ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAzMjg3MDNlLi41MDM0MDgzIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDExICsxLDI1IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1DaGFuZ2VzIHNpbmNlIFUtQm9vdCAwLjMuMToKK0NoYW5nZXMgc2luY2UgVS1Cb290IDAuNC4wOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIENvZGUgY2xlYW51cDoKKyAgLSByZW1vdmUgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIHRyYWlsaW5nIGVtcHR5IGxpbmVzLCBDKysgY29tbWVudHMsIGV0Yy4KKyAgLSBzcGxpdCBjbWRfYm9vdC5jIChzZXBhcmF0ZSBjbWRfYmRpbmZvLmMgYW5kIGNtZF9sb2FkLmMpCisKKyogUGF0Y2hlcyBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjUgSnVuIDIwMDM6CisgIC0gbWFqb3IgcmV3b3JrIG9mIGNvbW1hbmQgc3RydWN0dXJlCisgICAgKHdvcmsgZG9uZSBtb3N0bHkgYnkgTWljaGFsIENlbmRyb3dza2kgYW5kIEpvYWtpbSBLcmlzdGlhbnNlbikKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4wOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAyNiBKdW4gMjAwMzoKLSAgLSBsb2dkbAotICAtIGNzYjIyNgotICAtIGlubm9rb20KKyAgLSBjc2IyMjYgY29uZmlndXJhdGlvbiB1cGRhdGVkCisgIC0gY3JlZGl0cyBmb3IgbG9nb2RsIHBvcnQgdXBkYXRlZAorICAtIGlubm9rb20gY29uZmlndXJhdGlvbiB1cGRhdGVkCisgIC0gbG9nb2RsIHRyZWUgdXBkYXRlLCBzdGlsbCB3aXRoIGNvZGluZyBzdHlsZSBpbmNvbnNpc3RlbmNpZXMKKyAgLSBhZGRlZCBPQ00gZm9yIHBwYzQwNSB3YXJuaW5nIHRvIFJFQURNRQogCiAqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyNSBKdW4gMjAwMzoKICAgdXBkYXRlIE5ldFZpYSB3aXRoIFYyIGJvYXJkIHN1cHBvcnQKZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGU4MTU4NTcuLjUyYTNlYTEgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtNjcsNyArNjcsNyBAQAogRDogUG9ydCB0byBTaWVtZW5zIElBRDIxMCBib2FyZAogCiBOOiBLZW4gQ2hvdQotRToga2Nob3VAaWVlZS5vcmcJCitFOiBrY2hvdUBpZWVlLm9yZwogRDogU3VwcG9ydCBmb3IgQTMwMDAgU0JDIGJvYXJkCiAKIE46IENvbm4gQ2xhcmsKZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDRkYzJmOWEuLjk5NDVmMmIgMTAwNjQ0Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtNDUsMTAgKzQ1LDEwIEBACiAKIExJU1RfNHh4PSIJXAogCUFEQ0lPUAkJQVI0MDUJCUFTSDQwNSAgICAgICAgICBCVUJJTkdBNDA1RVAgICAgXAotICAgICAgICBDQU5CVAkJQ1BDSTQwNQkJQ1BDSTQwNTIgCUNQQ0k0MDVBQiAgICAgICBcCi0gICAgICAgIENQQ0k0NDAgICAgICAgICBDUENJSVNFUjQJQ1JBWUwxICAJREFTQV9TSU0JXAotICAgICAgICBEVTQwNSAgICAJRUJPTlkgICAgICAgICAgIEVSSUMgIAkJTUlQNDA1ICAJXAotICAgICAgICBNSVA0MDVUCQlNTDIJCU9DUlRDCQlPUlNHCQlcCisJQ0FOQlQJCUNQQ0k0MDUJCUNQQ0k0MDUyIAlDUENJNDA1QUIgICAgICAgXAorCUNQQ0k0NDAgICAgICAgICBDUENJSVNFUjQJQ1JBWUwxICAJREFTQV9TSU0JXAorCURVNDA1ICAgIAlFQk9OWSAgICAgICAgICAgRVJJQyAgCQlNSVA0MDUgIAlcCisJTUlQNDA1VAkJTUwyCQlPQ1JUQwkJT1JTRwkJXAogCVBDSTQwNQkJUElQNDA1CQlQTUM0MDUgICAgICAgICAgVzdPTE1DCQlcCiAJVzdPTE1HICAgICAgICAgIFdBTE5VVDQwNQlcCiAiCkBAIC01OCw3ICs1OCw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIExJU1RfODI0eD0iCVwKLSAgICAgICAgQTMwMDAgICAgICAgICAgIEJNVwkJQ1BDNDUJCUNVODI0CQlcCisJQTMwMDAgICAgICAgICAgIEJNVwkJQ1BDNDUJCUNVODI0CQlcCiAJTU9VU1NFICAgICAgICAgIE1VU0VOS0kgICAgCU9YQwkJUE42MgkJXAogCVNhbmRwb2ludDgyNDAgICBTYW5kcG9pbnQ4MjQ1CXV0eDgyNDUJCVwKICIKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggYWYxNDA0Mi4uYjIyMzE2MSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEzNCw3ICsxMzQsOCBAQAogCQkkKE9CSkRVTVApIC1kICQ8ID4gJEAKIAogdS1ib290OgkJZGVwZW5kIHN1YmRpcnMgJChPQkpTKSAkKExJQlMpICQoTERTQ1JJUFQpCi0JCSQoTEQpICQoTERGTEFHUykgJChPQkpTKSBcCisJCVVOREVGX1NZTT1gJChPQkpEVU1QKSAteCAkKExJQlMpIHxzZWQgIC1uIC1lICdzLy4qXChfX3VfYm9vdF9jbWRfLipcKS8tdVwxL3AnfHNvcnR8dW5pcWA7XAorCQkkKExEKSAkKExERkxBR1MpICQkVU5ERUZfU1lNICQoT0JKUykgXAogCQkJLS1zdGFydC1ncm91cCAkKExJQlMpIC0tZW5kLWdyb3VwIFwKIAkJCS1NYXAgdS1ib290Lm1hcCAtbyB1LWJvb3QKIApAQCAtNzQxLDcgKzc0Miw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIGNyYWRsZV9jb25maWcJOgl1bmNvbmZpZwotCUAuL21rY29uZmlnICQoQDpfY29uZmlnPSkgYXJtIHB4YSBjcmFkbGUgCisJQC4vbWtjb25maWcgJChAOl9jb25maWc9KSBhcm0gcHhhIGNyYWRsZQogCiBjc2IyMjZfY29uZmlnCToJdW5jb25maWcKIAlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIGFybSBweGEgY3NiMjI2CmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggZTMzYzYwMS4uNjY4YzRlMCAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtNzM1LDEyICs3MzUsMTIgQEAKIAkJKFRFQUMgRkQtMDVQVUIpLgogCiAtIE1NQyBTdXBwb3J0OgotICAJCVRoZSBNTUMgY29udHJvbGxlciBvbiB0aGUgSW50ZWwgUFhBIGlzIHN1cHBvcnRlZC4gVG8KLQkJZW5hYmxlIHRoaXMgZGVmaW5lIENPTkZJR19NTUMuIFRoZSBNTUMgY2FuIGJlIAotCQlhY2Nlc3NlZCBmcm9tIHRoZSBib290IHByb21wdCBieSBtYXBwaW5nIHRoZSBkZXZpY2UgCisJCVRoZSBNTUMgY29udHJvbGxlciBvbiB0aGUgSW50ZWwgUFhBIGlzIHN1cHBvcnRlZC4gVG8KKwkJZW5hYmxlIHRoaXMgZGVmaW5lIENPTkZJR19NTUMuIFRoZSBNTUMgY2FuIGJlCisJCWFjY2Vzc2VkIGZyb20gdGhlIGJvb3QgcHJvbXB0IGJ5IG1hcHBpbmcgdGhlIGRldmljZQogCQl0byBwaHlzaWNhbCBtZW1vcnkgc2ltaWxhciB0byBmbGFzaC4gQ29tbWFuZCBsaW5lIGlzCiAJCWVuYWJsZWQgd2l0aCBDRkdfQ01EX01NQy4gVGhlIE1NQyBkcml2ZXIgYWxzbyB3b3JrcyB3aXRoCi0JCXRoZSBGQVQgZnMuIFRoaXMgaXMgZW5hYmxlZCB3aXRoIENGR19DTURfRkFULiAKKwkJdGhlIEZBVCBmcy4gVGhpcyBpcyBlbmFibGVkIHdpdGggQ0ZHX0NNRF9GQVQuCiAKIC0gS2V5Ym9hcmQgU3VwcG9ydDoKIAkJQ09ORklHX0lTQV9LRVlCT0FSRApAQCAtNzgyLDEyICs3ODIsMTIgQEAKIAkJb3IgQ09ORklHX1ZJREVPX1NFRDEzODA2XzE2QlBQCiAKIC0gS2V5Ym9hcmQgU3VwcG9ydDoKLSAgICAgICAgICAgICAgICBDT05GSUdfS0VZQk9BUkQKKwkJQ09ORklHX0tFWUJPQVJECiAKLSAgICAgICAgICAgICAgICBEZWZpbmUgdGhpcyB0byBlbmFibGUgYSBjdXN0b20ga2V5Ym9hcmQgc3VwcG9ydC4KLSAgICAgICAgICAgICAgICBUaGlzIHNpbXBseSBjYWxscyBkcnZfa2V5Ym9hcmRfaW5pdCgpIHdoaWNoIG11c3QgYmUKLSAgICAgICAgICAgICAgICBkZWZpbmVkIGluIHlvdXIgYm9hcmQtc3BlY2lmaWMgZmlsZXMuCi0gICAgICAgICAgICAgICAgVGhlIG9ubHkgYm9hcmQgdXNpbmcgdGhpcyBzbyBmYXIgaXMgUkJDODIzLgorCQlEZWZpbmUgdGhpcyB0byBlbmFibGUgYSBjdXN0b20ga2V5Ym9hcmQgc3VwcG9ydC4KKwkJVGhpcyBzaW1wbHkgY2FsbHMgZHJ2X2tleWJvYXJkX2luaXQoKSB3aGljaCBtdXN0IGJlCisJCWRlZmluZWQgaW4geW91ciBib2FyZC1zcGVjaWZpYyBmaWxlcy4KKwkJVGhlIG9ubHkgYm9hcmQgdXNpbmcgdGhpcyBzbyBmYXIgaXMgUkJDODIzLgogCiAtIExDRCBTdXBwb3J0OglDT05GSUdfTENECiAKQEAgLTgzNCwxNCArODM0LDE0IEBACiAKIC0gU3Bhc2ggU2NyZWVuIFN1cHBvcnQ6IENPTkZJR19TUExBU0hfU0NSRUVOCiAKLSAgICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBlbnZpcm9ubWVudCBpcyBjaGVja2VkIGZvcgotICAgICAgICAgICAgICAgIGEgdmFyaWFibGUgInNwbGFzaGltYWdlIi4gSWYgZm91bmQsIHRoZSB1c3VhbCBkaXNwbGF5Ci0gICAgICAgICAgICAgICAgb2YgbG9nbywgY29weXJpZ2h0IGFuZCBzeXN0ZW0gaW5mb3JtYXRpb24gb24gdGhlIExDRAotICAgICAgICAgICAgICAgIGlzIHN1cHJlc3NlZCBhbmQgdGhlIEJNUCBpbWFnZSBhdCB0aGUgYWRkcmVzcwotICAgICAgICAgICAgICAgIHNwZWNpZmllZCBpbiAic3BsYXNoaW1hZ2UiIGlzIGxvYWRlZCBpbnN0ZWFkLiBUaGUKLSAgICAgICAgICAgICAgICBjb25zb2xlIGlzIHJlZGlyZWN0ZWQgdG8gdGhlICJudWxsZGV2IiwgdG9vLiBUaGlzCi0gICAgICAgICAgICAgICAgYWxsb3dzIGZvciBhICJzaWxlbnQiIGJvb3Qgd2hlcmUgYSBzcGxhc2ggc2NyZWVuIGlzCi0gICAgICAgICAgICAgICAgbG9hZGVkIHZlcnkgcXVpY2tseSBhZnRlciBwb3dlci1vbi4KKwkJSWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgZW52aXJvbm1lbnQgaXMgY2hlY2tlZCBmb3IKKwkJYSB2YXJpYWJsZSAic3BsYXNoaW1hZ2UiLiBJZiBmb3VuZCwgdGhlIHVzdWFsIGRpc3BsYXkKKwkJb2YgbG9nbywgY29weXJpZ2h0IGFuZCBzeXN0ZW0gaW5mb3JtYXRpb24gb24gdGhlIExDRAorCQlpcyBzdXByZXNzZWQgYW5kIHRoZSBCTVAgaW1hZ2UgYXQgdGhlIGFkZHJlc3MKKwkJc3BlY2lmaWVkIGluICJzcGxhc2hpbWFnZSIgaXMgbG9hZGVkIGluc3RlYWQuIFRoZQorCQljb25zb2xlIGlzIHJlZGlyZWN0ZWQgdG8gdGhlICJudWxsZGV2IiwgdG9vLiBUaGlzCisJCWFsbG93cyBmb3IgYSAic2lsZW50IiBib290IHdoZXJlIGEgc3BsYXNoIHNjcmVlbiBpcworCQlsb2FkZWQgdmVyeSBxdWlja2x5IGFmdGVyIHBvd2VyLW9uLgogCiAKIC0gRXRoZXJuZXQgYWRkcmVzczoKQEAgLTk2OCwxNCArOTY4LDE0IEBACiAKIAkJQ0ZHX0kyQ19JTklUX0JPQVJECiAKLSAgICAgICAgICAgICAgICBXaGVuIGEgYm9hcmQgaXMgcmVzZXQgZHVyaW5nIGFuIGkyYyBidXMgdHJhbnNmZXIKLSAgICAgICAgICAgICAgICBjaGlwcyBtaWdodCB0aGluayB0aGF0IHRoZSBjdXJyZW50IHRyYW5zZmVyIGlzIHN0aWxsCi0gICAgICAgICAgICAgICAgaW4gcHJvZ3Jlc3MuIE9uIHNvbWUgYm9hcmRzIGl0IGlzIHBvc3NpYmxlIHRvIGFjY2VzcwotICAgICAgICAgICAgICAgIHRoZSBpMmMgU0NMSyBsaW5lIGRpcmVjdGx5LCBlaXRoZXIgYnkgdXNpbmcgdGhlCi0gICAgICAgICAgICAgICAgcHJvY2Vzc29yIHBpbiBhcyBhIEdQSU8gb3IgYnkgaGF2aW5nIGEgc2Vjb25kIHBpbgotICAgICAgICAgICAgICAgIGNvbm5lY3RlZCB0byB0aGUgYnVzLiBJZiB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkIGEKLSAgICAgICAgICAgICAgICBjdXN0b20gaTJjX2luaXRfYm9hcmQoKSByb3V0aW5lIGluIGJvYXJkcy94eHgvYm9hcmQuYwotICAgICAgICAgICAgICAgIGlzIHJ1biBlYXJseSBpbiB0aGUgYm9vdCBzZXF1ZW5jZS4KKwkJV2hlbiBhIGJvYXJkIGlzIHJlc2V0IGR1cmluZyBhbiBpMmMgYnVzIHRyYW5zZmVyCisJCWNoaXBzIG1pZ2h0IHRoaW5rIHRoYXQgdGhlIGN1cnJlbnQgdHJhbnNmZXIgaXMgc3RpbGwKKwkJaW4gcHJvZ3Jlc3MuIE9uIHNvbWUgYm9hcmRzIGl0IGlzIHBvc3NpYmxlIHRvIGFjY2VzcworCQl0aGUgaTJjIFNDTEsgbGluZSBkaXJlY3RseSwgZWl0aGVyIGJ5IHVzaW5nIHRoZQorCQlwcm9jZXNzb3IgcGluIGFzIGEgR1BJTyBvciBieSBoYXZpbmcgYSBzZWNvbmQgcGluCisJCWNvbm5lY3RlZCB0byB0aGUgYnVzLiBJZiB0aGlzIG9wdGlvbiBpcyBkZWZpbmVkIGEKKwkJY3VzdG9tIGkyY19pbml0X2JvYXJkKCkgcm91dGluZSBpbiBib2FyZHMveHh4L2JvYXJkLmMKKwkJaXMgcnVuIGVhcmx5IGluIHRoZSBib290IHNlcXVlbmNlLgogCiAtIFNQSSBTdXBwb3J0OglDT05GSUdfU1BJCiAKQEAgLTEwMDYsOSArMTAwNiw5IEBACiAKIAkJVXNlZCB0byBzcGVjaWZ5IHRoZSB0eXBlcyBvZiBGUEdBIGRldmljZXMuIEZvcgogCQlleGFtcGxlLAotIAkJI2RlZmluZSBDT05GSUdfRlBHQSAgQ0ZHX1hJTElOWF9WSVJURVgyCisJCSNkZWZpbmUgQ09ORklHX0ZQR0EgIENGR19YSUxJTlhfVklSVEVYMgogCi0gCQlDRkdfRlBHQV9QUk9HX0ZFRURCQUNLCisJCUNGR19GUEdBX1BST0dfRkVFREJBQ0sKIAogCQlFbmFibGUgcHJpbnRpbmcgb2YgaGFzaCBtYXJrcyBkdXJpbmcgRlBHQQogCQljb25maWd1cmF0aW9uLgpAQCAtMTA1NCwxNiArMTA1NCwxNiBAQAogCiAtIEZQR0EgU3VwcG9ydDoJQ09ORklHX0ZQR0FfQ09VTlQKIAotIAkJU3BlY2lmeSB0aGUgbnVtYmVyIG9mIEZQR0EgZGV2aWNlcyB0byBzdXBwb3J0LgorCQlTcGVjaWZ5IHRoZSBudW1iZXIgb2YgRlBHQSBkZXZpY2VzIHRvIHN1cHBvcnQuCiAKLSAJCUNPTkZJR19GUEdBCisJCUNPTkZJR19GUEdBCiAKLSAJCVVzZWQgdG8gc3BlY2lmeSB0aGUgdHlwZXMgb2YgRlBHQSBkZXZpY2VzLiAgRm9yIGV4YW1wbGUsCi0gCQkjZGVmaW5lIENPTkZJR19GUEdBICBDRkdfWElMSU5YX1ZJUlRFWDIKKwkJVXNlZCB0byBzcGVjaWZ5IHRoZSB0eXBlcyBvZiBGUEdBIGRldmljZXMuICBGb3IgZXhhbXBsZSwKKwkJI2RlZmluZSBDT05GSUdfRlBHQSAgQ0ZHX1hJTElOWF9WSVJURVgyCiAKLSAJCUNGR19GUEdBX1BST0dfRkVFREJBQ0sKKwkJQ0ZHX0ZQR0FfUFJPR19GRUVEQkFDSwogCi0gCQlFbmFibGUgcHJpbnRpbmcgb2YgaGFzaCBtYXJrcyBkdXJpbmcgRlBHQSBjb25maWd1cmF0aW9uLgorCQlFbmFibGUgcHJpbnRpbmcgb2YgaGFzaCBtYXJrcyBkdXJpbmcgRlBHQSBjb25maWd1cmF0aW9uLgogCiAJCUNGR19GUEdBX0NIRUNLX0JVU1kKIApAQCAtMTIwNSwxMyArMTIwNSwxMyBAQAogCiAJTm90ZToKIAotICAgICAgICAgICAgICAgIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgbG9jYWwgdmFyaWFibGVzCi0gICAgICAgICAgICAgICAgc3BhY2UgYW5kIGdsb2JhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc3BhY2UgYXJlCi0gICAgICAgICAgICAgICAgc2VwYXJhdGVkLiBMb2NhbCB2YXJpYWJsZXMgYXJlIHRob3NlIHlvdSBkZWZpbmUgYnkKLSAgICAgICAgICAgICAgICBzaW1wbHkgdHlwaW5nIGBuYW1lPXZhbHVlJy4gVG8gYWNjZXNzIGEgbG9jYWwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZSBsYXRlciBvbiwgeW91IGhhdmUgd3JpdGUgYCRuYW1lJyBvcgotICAgICAgICAgICAgICAgIGAke25hbWV9JzsgdG8gZXhlY3V0ZSB0aGUgY29udGVudHMgb2YgYSB2YXJpYWJsZQotICAgICAgICAgICAgICAgIGRpcmVjdGx5IHR5cGUgYCRuYW1lJyBhdCB0aGUgY29tbWFuZCBwcm9tcHQuCisJCUluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgbG9jYWwgdmFyaWFibGVzCisJCXNwYWNlIGFuZCBnbG9iYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNwYWNlIGFyZQorCQlzZXBhcmF0ZWQuIExvY2FsIHZhcmlhYmxlcyBhcmUgdGhvc2UgeW91IGRlZmluZSBieQorCQlzaW1wbHkgdHlwaW5nIGBuYW1lPXZhbHVlJy4gVG8gYWNjZXNzIGEgbG9jYWwKKwkJdmFyaWFibGUgbGF0ZXIgb24sIHlvdSBoYXZlIHdyaXRlIGAkbmFtZScgb3IKKwkJYCR7bmFtZX0nOyB0byBleGVjdXRlIHRoZSBjb250ZW50cyBvZiBhIHZhcmlhYmxlCisJCWRpcmVjdGx5IHR5cGUgYCRuYW1lJyBhdCB0aGUgY29tbWFuZCBwcm9tcHQuCiAKIAkJR2xvYmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgdGhvc2UgeW91IHVzZQogCQlzZXRlbnYvcHJpbnRlbnYgdG8gd29yayB3aXRoLiBUbyBydW4gYSBjb21tYW5kIHN0b3JlZApAQCAtMTI1Myw5ICsxMjUzLDkgQEAKIC0gRGF0YUZsYXNoIFN1cHBvcnQKIAkJQ09ORklHX0hBU19EQVRBRkxBU0gKIAotICAgICAgICAgICAgICAgIERlZmluaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgRGF0YUZsYXNoIGZlYXR1cmVzIGFuZAotICAgICAgICAgICAgICAgIGFsbG93cyB0byByZWFkL3dyaXRlIGluIERhdGFmbGFzaCB2aWEgdGhlIHN0YW5kYXJkCi0gICAgICAgICAgICAgICAgY29tbWFuZHMgY3AsIG1kLi4uCisJCURlZmluaW5nIHRoaXMgb3B0aW9uIGVuYWJsZXMgRGF0YUZsYXNoIGZlYXR1cmVzIGFuZAorCQlhbGxvd3MgdG8gcmVhZC93cml0ZSBpbiBEYXRhZmxhc2ggdmlhIHRoZSBzdGFuZGFyZAorCQljb21tYW5kcyBjcCwgbWQuLi4KIAogLSBTaG93IGJvb3QgcHJvZ3Jlc3MKIAkJQ09ORklHX1NIT1dfQk9PVF9QUk9HUkVTUwpAQCAtMTM0OSw4ICsxMzQ5LDYgQEAKIAkJU2VlIGFsc286IGRvYy9SRUFETUUuTW9kZW0KIAogCi0KLQogQ29uZmlndXJhdGlvbiBTZXR0aW5nczoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEzNzQsMTYgKzEzNzIsMTYgQEAKIAkJTGlzdCBvZiBsZWdhbCBiYXVkcmF0ZSBzZXR0aW5ncyBmb3IgdGhpcyBib2FyZC4KIAogLSBDRkdfQ09OU09MRV9JTkZPX1FVSUVUCi0gCQlTdXBwcmVzcyBkaXNwbGF5IG9mIGNvbnNvbGUgaW5mb3JtYXRpb24gYXQgYm9vdC4KKwkJU3VwcHJlc3MgZGlzcGxheSBvZiBjb25zb2xlIGluZm9ybWF0aW9uIGF0IGJvb3QuCiAKIC0gQ0ZHX0NPTlNPTEVfSVNfSU5fRU5WCi0gCQlJZiB0aGUgYm9hcmQgc3BlY2lmaWMgZnVuY3Rpb24KLSAJCQlleHRlcm4gaW50IG92ZXJ3cml0ZV9jb25zb2xlICh2b2lkKTsKLSAJCXJldHVybnMgMSwgdGhlIHN0ZGluLCBzdGRlcnIgYW5kIHN0ZG91dCBhcmUgc3dpdGNoZWQgdG8gdGhlCisJCUlmIHRoZSBib2FyZCBzcGVjaWZpYyBmdW5jdGlvbgorCQkJZXh0ZXJuIGludCBvdmVyd3JpdGVfY29uc29sZSAodm9pZCk7CisJCXJldHVybnMgMSwgdGhlIHN0ZGluLCBzdGRlcnIgYW5kIHN0ZG91dCBhcmUgc3dpdGNoZWQgdG8gdGhlCiAJCXNlcmlhbCBwb3J0LCBlbHNlIHRoZSBzZXR0aW5ncyBpbiB0aGUgZW52aXJvbm1lbnQgYXJlIHVzZWQuCiAKIC0gQ0ZHX0NPTlNPTEVfT1ZFUldSSVRFX1JPVVRJTkUKLSAJCUVuYWJsZSB0aGUgY2FsbCB0byBvdmVyd3JpdGVfY29uc29sZSgpLgorCQlFbmFibGUgdGhlIGNhbGwgdG8gb3ZlcndyaXRlX2NvbnNvbGUoKS4KIAogLSBDRkdfQ09OU09MRV9FTlZfT1ZFUldSSVRFCiAJCUVuYWJsZSBvdmVyd3JpdGUgb2YgcHJldmlvdXMgY29uc29sZSBlbnZpcm9ubWVudCBzZXR0aW5ncy4KQEAgLTEzOTMsNyArMTM5MSw3IEBACiAJCXNpbXBsZSBtZW1vcnkgdGVzdC4KIAogLSBDRkdfQUxUX01FTVRFU1Q6Ci0gCQlFbmFibGUgYW4gYWx0ZXJuYXRlLCBtb3JlIGV4dGVuc2l2ZSBtZW1vcnkgdGVzdC4KKwkJRW5hYmxlIGFuIGFsdGVybmF0ZSwgbW9yZSBleHRlbnNpdmUgbWVtb3J5IHRlc3QuCiAKIC0gQ0ZHX1RGVFBfTE9BREFERFI6CiAJCURlZmF1bHQgbG9hZCBhZGRyZXNzIGZvciBuZXR3b3JrIGZpbGUgZG93bmxvYWRzCkBAIC0xNDE4LDEwICsxNDE2LDEwIEBACiAJCUNGR19GTEFTSF9CQVNFIHdoZW4gYm9vdGluZyBmcm9tIGZsYXNoLgogCiAtIENGR19NT05JVE9SX0xFTjoKLSAgICAgICAgICAgICAgICBTaXplIG9mIG1lbW9yeSByZXNlcnZlZCBmb3IgbW9uaXRvciBjb2RlLCB1c2VkIHRvCi0gICAgICAgICAgICAgICAgZGV0ZXJtaW5lIF9hdF9jb21waWxlX3RpbWVfICghKSBpZiB0aGUgZW52aXJvbm1lbnQgaXMKLSAgICAgICAgICAgICAgICBlbWJlZGRlZCB3aXRoaW4gdGhlIFUtQm9vdCBpbWFnZSwgb3IgaW4gYSBzZXBhcmF0ZQotICAgICAgICAgICAgICAgIGZsYXNoIHNlY3Rvci4KKwkJU2l6ZSBvZiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIG1vbml0b3IgY29kZSwgdXNlZCB0bworCQlkZXRlcm1pbmUgX2F0X2NvbXBpbGVfdGltZV8gKCEpIGlmIHRoZSBlbnZpcm9ubWVudCBpcworCQllbWJlZGRlZCB3aXRoaW4gdGhlIFUtQm9vdCBpbWFnZSwgb3IgaW4gYSBzZXBhcmF0ZQorCQlmbGFzaCBzZWN0b3IuCiAKIC0gQ0ZHX01BTExPQ19MRU46CiAJCVNpemUgb2YgRFJBTSByZXNlcnZlZCBmb3IgbWFsbG9jKCkgdXNlLgpAQCAtMTg0Miw3ICsxODQwLDYgQEAKICAgICAgIGV0Yy4KIAogCi0KIEZpbmFsbHksIHR5cGUgIm1ha2UgYWxsIiwgYW5kIHlvdSBzaG91bGQgZ2V0IHNvbWUgd29ya2luZyBVLUJvb3QKIGltYWdlcyByZWFkeSBmb3IgZG93bmxvZCB0byAvIGluc3RhbGxhdGlvbiBvbiB5b3VyIHN5c3RlbToKIApAQCAtMTkwNiw3ICsxOTAzLDYgQEAKIFNlZSBhbHNvICJVLUJvb3QgUG9ydGluZyBHdWlkZSIgYmVsb3cuCiAKIAotCiBNb25pdG9yIENvbW1hbmRzIC0gT3ZlcnZpZXc6CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTIwMjksMTMgKzIwMjUsMTMgQEAKIAogCQkgIHNldGVudiBpbml0cmRfaGlnaCAwMGMwMDAwMAogCi0gICAgICAgICAgICAgICAgICBJZiB5b3Ugc2V0IGluaXRyZF9oaWdoIHRvIDB4RkZGRkZGRkYsIHRoaXMgaXMgYW4KLSAgICAgICAgICAgICAgICAgIGluZGljYXRpb24gdG8gVS1Cb290IHRoYXQgYWxsIGFkZHJlc3NlcyBhcmUgbGVnYWwKLSAgICAgICAgICAgICAgICAgIGZvciB0aGUgTGludXgga2VybmVsLCBpbmNsdWRpbmcgYWRkcmVzc2VzIGluIGZsYXNoCi0gICAgICAgICAgICAgICAgICBtZW1vcnkuIEluIHRoaXMgY2FzZSBVLUJvb3Qgd2lsbCBOT1QgQ09QWSB0aGUKLSAgICAgICAgICAgICAgICAgIHJhbWRpc2sgYXQgYWxsLiBUaGlzIG1heSBiZSB1c2VmdWwgdG8gcmVkdWNlIHRoZQotICAgICAgICAgICAgICAgICAgYm9vdCB0aW1lIG9uIHlvdXIgc3lzdGVtLCBidXQgcmVxdWlyZXMgdGhhdCB0aGlzCi0gICAgICAgICAgICAgICAgICBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB5b3VyIExpbnV4IGtlcm5lbC4KKwkJICBJZiB5b3Ugc2V0IGluaXRyZF9oaWdoIHRvIDB4RkZGRkZGRkYsIHRoaXMgaXMgYW4KKwkJICBpbmRpY2F0aW9uIHRvIFUtQm9vdCB0aGF0IGFsbCBhZGRyZXNzZXMgYXJlIGxlZ2FsCisJCSAgZm9yIHRoZSBMaW51eCBrZXJuZWwsIGluY2x1ZGluZyBhZGRyZXNzZXMgaW4gZmxhc2gKKwkJICBtZW1vcnkuIEluIHRoaXMgY2FzZSBVLUJvb3Qgd2lsbCBOT1QgQ09QWSB0aGUKKwkJICByYW1kaXNrIGF0IGFsbC4gVGhpcyBtYXkgYmUgdXNlZnVsIHRvIHJlZHVjZSB0aGUKKwkJICBib290IHRpbWUgb24geW91ciBzeXN0ZW0sIGJ1dCByZXF1aXJlcyB0aGF0IHRoaXMKKwkJICBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB5b3VyIExpbnV4IGtlcm5lbC4KIAogICBpcGFkZHIJLSBJUCBhZGRyZXNzOyBuZWVkZWQgZm9yIHRmdHBib290IGNvbW1hbmQKIApAQCAtMjE2NSw3ICsyMTYxLDYgQEAKICAgaXMgcmFpc2VkLgogCiAKLQogSW1hZ2UgRm9ybWF0czoKID09PT09PT09PT09PT09CiAKQEAgLTI0MjgsNyArMjQyMyw2IEBACiAJICAgVmVyaWZ5aW5nIENoZWNrc3VtIC4uLiBPSwogCiAKLQogQm9vdCBMaW51eDoKIC0tLS0tLS0tLS0tCiAKQEAgLTI1MTgsMzkgKzI1MTIsMzkgQEAKIFUtQm9vdCBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGltYWdlIHR5cGVzOgogCiAgICAiU3RhbmRhbG9uZSBQcm9ncmFtcyIgYXJlIGRpcmVjdGx5IHJ1bm5hYmxlIGluIHRoZSBlbnZpcm9ubWVudAotICAJcHJvdmlkZWQgYnkgVS1Cb290OyBpdCBpcyBleHBlY3RlZCB0aGF0IChpZiB0aGV5IGJlaGF2ZQotICAJd2VsbCkgeW91IGNhbiBjb250aW51ZSB0byB3b3JrIGluIFUtQm9vdCBhZnRlciByZXR1cm4gZnJvbQotICAJdGhlIFN0YW5kYWxvbmUgUHJvZ3JhbS4KKwlwcm92aWRlZCBieSBVLUJvb3Q7IGl0IGlzIGV4cGVjdGVkIHRoYXQgKGlmIHRoZXkgYmVoYXZlCisJd2VsbCkgeW91IGNhbiBjb250aW51ZSB0byB3b3JrIGluIFUtQm9vdCBhZnRlciByZXR1cm4gZnJvbQorCXRoZSBTdGFuZGFsb25lIFByb2dyYW0uCiAgICAiT1MgS2VybmVsIEltYWdlcyIgYXJlIHVzdWFsbHkgaW1hZ2VzIG9mIHNvbWUgRW1iZWRkZWQgT1Mgd2hpY2gKLSAgCXdpbGwgdGFrZSBvdmVyIGNvbnRyb2wgY29tcGxldGVseS4gVXN1YWxseSB0aGVzZSBwcm9ncmFtcwotICAJd2lsbCBpbnN0YWxsIHRoZWlyIG93biBzZXQgb2YgZXhjZXB0aW9uIGhhbmRsZXJzLCBkZXZpY2UKLSAgCWRyaXZlcnMsIHNldCB1cCB0aGUgTU1VLCBldGMuIC0gdGhpcyBtZWFucywgdGhhdCB5b3UgY2Fubm90Ci0gIAlleHBlY3QgdG8gcmUtZW50ZXIgVS1Cb290IGV4Y2VwdCBieSByZXNldHRpbmcgdGhlIENQVS4KKwl3aWxsIHRha2Ugb3ZlciBjb250cm9sIGNvbXBsZXRlbHkuIFVzdWFsbHkgdGhlc2UgcHJvZ3JhbXMKKwl3aWxsIGluc3RhbGwgdGhlaXIgb3duIHNldCBvZiBleGNlcHRpb24gaGFuZGxlcnMsIGRldmljZQorCWRyaXZlcnMsIHNldCB1cCB0aGUgTU1VLCBldGMuIC0gdGhpcyBtZWFucywgdGhhdCB5b3UgY2Fubm90CisJZXhwZWN0IHRvIHJlLWVudGVyIFUtQm9vdCBleGNlcHQgYnkgcmVzZXR0aW5nIHRoZSBDUFUuCiAgICAiUkFNRGlzayBJbWFnZXMiIGFyZSBtb3JlIG9yIGxlc3MganVzdCBkYXRhIGJsb2NrcywgYW5kIHRoZWlyCi0gIAlwYXJhbWV0ZXJzIChhZGRyZXNzLCBzaXplKSBhcmUgcGFzc2VkIHRvIGFuIE9TIGtlcm5lbCB0aGF0IGlzCi0gIAliZWluZyBzdGFydGVkLgorCXBhcmFtZXRlcnMgKGFkZHJlc3MsIHNpemUpIGFyZSBwYXNzZWQgdG8gYW4gT1Mga2VybmVsIHRoYXQgaXMKKwliZWluZyBzdGFydGVkLgogICAgIk11bHRpLUZpbGUgSW1hZ2VzIiBjb250YWluIHNldmVyYWwgaW1hZ2VzLCB0eXBpY2FsbHkgYW4gT1MKLSAgCShMaW51eCkga2VybmVsIGltYWdlIGFuZCBvbmUgb3IgbW9yZSBkYXRhIGltYWdlcyBsaWtlCi0gIAlSQU1EaXNrcy4gVGhpcyBjb25zdHJ1Y3QgaXMgdXNlZnVsIGZvciBpbnN0YW5jZSB3aGVuIHlvdSB3YW50Ci0gIAl0byBib290IG92ZXIgdGhlIG5ldHdvcmsgdXNpbmcgQk9PVFAgZXRjLiwgd2hlcmUgdGhlIGJvb3QKLSAgCXNlcnZlciBwcm92aWRlcyBqdXN0IGEgc2luZ2xlIGltYWdlIGZpbGUsIGJ1dCB5b3Ugd2FudCB0byBnZXQKLSAgCWZvciBpbnN0YW5jZSBhbiBPUyBrZXJuZWwgYW5kIGEgUkFNRGlzayBpbWFnZS4KKwkoTGludXgpIGtlcm5lbCBpbWFnZSBhbmQgb25lIG9yIG1vcmUgZGF0YSBpbWFnZXMgbGlrZQorCVJBTURpc2tzLiBUaGlzIGNvbnN0cnVjdCBpcyB1c2VmdWwgZm9yIGluc3RhbmNlIHdoZW4geW91IHdhbnQKKwl0byBib290IG92ZXIgdGhlIG5ldHdvcmsgdXNpbmcgQk9PVFAgZXRjLiwgd2hlcmUgdGhlIGJvb3QKKwlzZXJ2ZXIgcHJvdmlkZXMganVzdCBhIHNpbmdsZSBpbWFnZSBmaWxlLCBidXQgeW91IHdhbnQgdG8gZ2V0CisJZm9yIGluc3RhbmNlIGFuIE9TIGtlcm5lbCBhbmQgYSBSQU1EaXNrIGltYWdlLgogCi0gIAkiTXVsdGktRmlsZSBJbWFnZXMiIHN0YXJ0IHdpdGggYSBsaXN0IG9mIGltYWdlIHNpemVzLCBlYWNoCi0gIAlpbWFnZSBzaXplIChpbiBieXRlcykgc3BlY2lmaWVkIGJ5IGFuICJ1aW50MzJfdCIgaW4gbmV0d29yawotICAJYnl0ZSBvcmRlci4gVGhpcyBsaXN0IGlzIHRlcm1pbmF0ZWQgYnkgYW4gIih1aW50MzJfdCkwIi4KLSAgCUltbWVkaWF0ZWx5IGFmdGVyIHRoZSB0ZXJtaW5hdGluZyAwIGZvbGxvdyB0aGUgaW1hZ2VzLCBvbmUgYnkKLSAgCW9uZSwgYWxsIGFsaWduZWQgb24gInVpbnQzMl90IiBib3VuZGFyaWVzIChzaXplIHJvdW5kZWQgdXAgdG8KLSAgCWEgbXVsdGlwbGUgb2YgNCBieXRlcykuCisJIk11bHRpLUZpbGUgSW1hZ2VzIiBzdGFydCB3aXRoIGEgbGlzdCBvZiBpbWFnZSBzaXplcywgZWFjaAorCWltYWdlIHNpemUgKGluIGJ5dGVzKSBzcGVjaWZpZWQgYnkgYW4gInVpbnQzMl90IiBpbiBuZXR3b3JrCisJYnl0ZSBvcmRlci4gVGhpcyBsaXN0IGlzIHRlcm1pbmF0ZWQgYnkgYW4gIih1aW50MzJfdCkwIi4KKwlJbW1lZGlhdGVseSBhZnRlciB0aGUgdGVybWluYXRpbmcgMCBmb2xsb3cgdGhlIGltYWdlcywgb25lIGJ5CisJb25lLCBhbGwgYWxpZ25lZCBvbiAidWludDMyX3QiIGJvdW5kYXJpZXMgKHNpemUgcm91bmRlZCB1cCB0bworCWEgbXVsdGlwbGUgb2YgNCBieXRlcykuCiAKICAgICJGaXJtd2FyZSBJbWFnZXMiIGFyZSBiaW5hcnkgaW1hZ2VzIGNvbnRhaW5pbmcgZmlybXdhcmUgKGxpa2UKLSAgCVUtQm9vdCBvciBGUEdBIGltYWdlcykgd2hpY2ggdXN1YWxseSB3aWxsIGJlIHByb2dyYW1tZWQgdG8KLSAgCWZsYXNoIG1lbW9yeS4KKwlVLUJvb3Qgb3IgRlBHQSBpbWFnZXMpIHdoaWNoIHVzdWFsbHkgd2lsbCBiZSBwcm9ncmFtbWVkIHRvCisJZmxhc2ggbWVtb3J5LgogCiAgICAiU2NyaXB0IGZpbGVzIiBhcmUgY29tbWFuZCBzZXF1ZW5jZXMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGJ5Ci0gIAlVLUJvb3QncyBjb21tYW5kIGludGVycHJldGVyOyB0aGlzIGZlYXR1cmUgaXMgZXNwZWNpYWxseQotICAJdXNlZnVsIHdoZW4geW91IGNvbmZpZ3VyZSBVLUJvb3QgdG8gdXNlIGEgcmVhbCBzaGVsbCAoaHVzaCkKLSAgCWFzIGNvbW1hbmQgaW50ZXJwcmV0ZXIuCisJVS1Cb290J3MgY29tbWFuZCBpbnRlcnByZXRlcjsgdGhpcyBmZWF0dXJlIGlzIGVzcGVjaWFsbHkKKwl1c2VmdWwgd2hlbiB5b3UgY29uZmlndXJlIFUtQm9vdCB0byB1c2UgYSByZWFsIHNoZWxsIChodXNoKQorCWFzIGNvbW1hbmQgaW50ZXJwcmV0ZXIuCiAKIAogU3RhbmRhbG9uZSBIT1dUTzoKQEAgLTI2NDEsNyArMjYzNSw2IEBACiAJW3EsIGIsIGUsID9dICMjIEFwcGxpY2F0aW9uIHRlcm1pbmF0ZWQsIHJjID0gMHgwCiAKIAotCiBNaW5pY29tIHdhcm5pbmc6CiA9PT09PT09PT09PT09PT09CiAKQEAgLTI4MTMsNyArMjgwNiw2IEBACiAgICAgPT0+IFUtQm9vdCB3aWxsIHVzZSBSOCB0byBob2xkIGEgcG9pbnRlciB0byB0aGUgZ2xvYmFsIGRhdGEKIAogCi0KIE1lbW9yeSBNYW5hZ2VtZW50OgogLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI5NTksNyArMjk1MSw2IEBACiB9CiAKIAotCiBDb2RpbmcgU3RhbmRhcmRzOgogLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzAxNiw3ICszMDA3LDcgQEAKIAogKiBDaGFuZ2VzZXRzIHRoYXQgY29udGFpbiBkaWZmZXJlbnQsIHVucmVsYXRlZCBtb2RpZmljYXRpb25zIHNoYWxsIGJlCiAgIHN1Ym1pdHRlZCBhcyBTRVBBUkFURSBwYXRjaGVzLCBvbmUgcGF0Y2ggcGVyIGNoYW5nZXNldC4KLSAgCisKIAogTm90ZXM6CiAKZGlmZiAtLWdpdCBhL2JvYXJkL0xFT1gvZWxwdDg2MC9NYWtlZmlsZSBiL2JvYXJkL0xFT1gvZWxwdDg2MC9NYWtlZmlsZQppbmRleCBhYmNhNzY1Li4zZTczMTYzIDEwMDY0NAotLS0gYS9ib2FyZC9MRU9YL2VscHQ4NjAvTWFrZWZpbGUKKysrIGIvYm9hcmQvTEVPWC9lbHB0ODYwL01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwogIyBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMKQEAgLTM1LDcgKzM2LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL0xFT1gvZWxwdDg2MC9SRUFETUUuTEVPWCBiL2JvYXJkL0xFT1gvZWxwdDg2MC9SRUFETUUuTEVPWAppbmRleCA5YWNlOTdiLi4yM2JjMzAyIDEwMDY0NAotLS0gYS9ib2FyZC9MRU9YL2VscHQ4NjAvUkVBRE1FLkxFT1gKKysrIGIvYm9hcmQvTEVPWC9lbHB0ODYwL1JFQURNRS5MRU9YCkBAIC0xLDIwICsxLDIwIEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gICAgICAgICAgICAgVS1Cb290IHBvcnQgb24gdGhlIExFT1gncyBFTFBUODYwIENQVSBib2FyZAotICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgIFUtQm9vdCBwb3J0IG9uIHRoZSBMRU9YJ3MgRUxQVDg2MCBDUFUgYm9hcmQKKwkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogTEVPWC5vcmcgaXMgYWJvdXQgdGhlIGRldmVsb3BtZW50IG9mIGZyZWUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHJlc291cmNlcwotICAgICAgICAgZm9yIHN5c3RlbSBvbiBjaGlwLgorCSBmb3Igc3lzdGVtIG9uIGNoaXAuCiAKIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb250YWN0IFRoZSBMRU9YIHRlYW0gPHRlYW1AbGVveC5vcmc+CiAKIFJlZmVyZW5jZXM6CiB+fn5+fn5+fn5+CiAgICAgMSkgR2V0IHRoZSBsYXN0IHN0YWJsZSByZWxlYXNlIGZyb20gZGVueC5kZToKLSAgICAgICAgICAgbyBmdHA6Ly9mdHAuZGVueC5kZS9wdWIvdS1ib290L3UtYm9vdC0wLjIuMC50YXIuYnoyCisJICAgbyBmdHA6Ly9mdHAuZGVueC5kZS9wdWIvdS1ib290L3UtYm9vdC0wLjIuMC50YXIuYnoyCiAgICAgMikgR2V0IHRoZSBjdXJyZW50IENWUyBzbmFwc2hvdDoKLSAgICAgICAgICAgbyBjdnMgLWQ6cHNlcnZlcjphbm9ueW1vdXNAY3ZzLnUtYm9vdC5zb3VyY2Vmb3JnZS5uZXQ6L2N2c3Jvb3QvdS1ib290IGxvZ2luCi0gICAgICAgICAgIG8gY3ZzIC16NiAtZDpwc2VydmVyOmFub255bW91c0BjdnMudS1ib290LnNvdXJjZWZvcmdlLm5ldDovY3Zzcm9vdC91LWJvb3QgY28gLVAgdS1ib290CisJICAgbyBjdnMgLWQ6cHNlcnZlcjphbm9ueW1vdXNAY3ZzLnUtYm9vdC5zb3VyY2Vmb3JnZS5uZXQ6L2N2c3Jvb3QvdS1ib290IGxvZ2luCisJICAgbyBjdnMgLXo2IC1kOnBzZXJ2ZXI6YW5vbnltb3VzQGN2cy51LWJvb3Quc291cmNlZm9yZ2UubmV0Oi9jdnNyb290L3UtYm9vdCBjbyAtUCB1LWJvb3QKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNDIsNyArNDIsNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gICAgICAgICAgICAgICAgICAgICAgICBVLUJvb3QgdGVzdCByZXN1bHRzCisJCQlVLUJvb3QgdGVzdCByZXN1bHRzCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTU0LDcgKzU0LDcgQEAKIFUtQm9vdCAwLjIuMiAoSmFuIDE5IDIwMDMgLSAxMTowODozOSkKIAogQ1BVOiAgIFhQQzg2MHh4WlBubkIgYXQgNTAgTUh6OiA0IGtCIEktQ2FjaGUgNCBrQiBELUNhY2hlIEZFQyBwcmVzZW50Ci0gICAgICAgICAqKiogV2FybmluZzogQ1BVIENvcmUgaGFzIFNpbGljb24gQnVncyAtLSBDaGVjayB0aGUgRXJyYXRhICoqKgorCSAqKiogV2FybmluZzogQ1BVIENvcmUgaGFzIFNpbGljb24gQnVncyAtLSBDaGVjayB0aGUgRXJyYXRhICoqKgogQm9hcmQ6ICMjIyBObyBIVyBJRCAtIGFzc3VtaW5nIEVMUFQ4NjAKIERSQU06ICAxNiBNQgogRkxBU0g6IDUxMiBrQgpAQCAtMTAxLDcgKzEwMSw3IEBACiBzZXRlbnYgIC0gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcwogc2xlZXAgICAtIGRlbGF5IGV4ZWN1dGlvbiBmb3Igc29tZSB0aW1lCiB0ZnRwYm9vdC0gYm9vdCBpbWFnZSB2aWEgbmV0d29yayB1c2luZyBURlRQIHByb3RvY29sCi0gICAgICAgICAgICAgICBhbmQgZW52IHZhcmlhYmxlcyBpcGFkZHIgYW5kIHNlcnZlcmlwCisJICAgICAgIGFuZCBlbnYgdmFyaWFibGVzIGlwYWRkciBhbmQgc2VydmVyaXAKIHZlcnNpb24gLSBwcmludCBtb25pdG9yIHZlcnNpb24KID8gICAgICAgLSBhbGlhcyBmb3IgJ2hlbHAnCiAKQEAgLTE0Myw4ICsxNDMsOCBAQAogQmFuayAjIDE6IEFNRCBBTTI5RjA0MCAgICg0IE1iaXRzKQogICBTaXplOiA1MTIgS0IgaW4gOCBTZWN0b3JzCiAgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Ci0gICAgMDIwMDAwMDAgKFJPKSAwMjAxMDAwMCAoUk8pIDAyMDIwMDAwIChSTykgMDIwMzAwMDAgKFJPKSAwMjA0MDAwMCAgICAgCi0gICAgMDIwNTAwMDAgICAgICAwMjA2MDAwMCAgICAgIDAyMDcwMDAwICAgICAKKyAgICAwMjAwMDAwMCAoUk8pIDAyMDEwMDAwIChSTykgMDIwMjAwMDAgKFJPKSAwMjAzMDAwMCAoUk8pIDAyMDQwMDAwCisgICAgMDIwNTAwMDAgICAgICAwMjA2MDAwMCAgICAgIDAyMDcwMDAwCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEJvYXJkIEluZm9ybWF0aW9uIFN0cnVjdHVyZQpAQCAtMTc3LDcgKzE3Nyw3IEBACiBVLUJvb3QgMC4yLjIgKEphbiAxOSAyMDAzIC0gMTE6MDg6MzkpCiAKIENQVTogICBYUEM4NjB4eFpQbm5CIGF0IDUwIE1IejogNCBrQiBJLUNhY2hlIDQga0IgRC1DYWNoZSBGRUMgcHJlc2VudAotICAgICAgICAgKioqIFdhcm5pbmc6IENQVSBDb3JlIGhhcyBTaWxpY29uIEJ1Z3MgLS0gQ2hlY2sgdGhlIEVycmF0YSAqKioKKwkgKioqIFdhcm5pbmc6IENQVSBDb3JlIGhhcyBTaWxpY29uIEJ1Z3MgLS0gQ2hlY2sgdGhlIEVycmF0YSAqKioKIEJvYXJkOiAjIyMgTm8gSFcgSUQgLSBhc3N1bWluZyBFTFBUODYwCiBEUkFNOiAgMTYgTUIKIEZMQVNIOiA1MTIga0IKQEAgLTIxOSw3ICsyMTksNyBAQAogVS1Cb290IDAuMi4yIChKYW4gMTkgMjAwMyAtIDExOjA4OjM5KQogCiBDUFU6ICAgWFBDODYweHhaUG5uQiBhdCA1MCBNSHo6IDQga0IgSS1DYWNoZSA0IGtCIEQtQ2FjaGUgRkVDIHByZXNlbnQKLSAgICAgICAgICoqKiBXYXJuaW5nOiBDUFUgQ29yZSBoYXMgU2lsaWNvbiBCdWdzIC0tIENoZWNrIHRoZSBFcnJhdGEgKioqCisJICoqKiBXYXJuaW5nOiBDUFUgQ29yZSBoYXMgU2lsaWNvbiBCdWdzIC0tIENoZWNrIHRoZSBFcnJhdGEgKioqCiBCb2FyZDogIyMjIE5vIEhXIElEIC0gYXNzdW1pbmcgRUxQVDg2MAogRFJBTTogIDE2IE1CCiBGTEFTSDogNTEyIGtCCkBAIC0yMzcsNyArMjM3LDcgQEAKIEZpbGVuYW1lICcvaG9tZS9sZW94L3VJbWFnZScuCiBMb2FkIGFkZHJlc3M6IDB4NDAwMDAwCiBMb2FkaW5nOiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGRvbmUKIEJ5dGVzIHRyYW5zZmVycmVkID0gNDc3Mjk0ICg3NDg2ZSBoZXgpCiAjIyBCb290aW5nIGltYWdlIGF0IDAwNDAwMDAwIC4uLgpAQCAtMjgyLDggKzI4Miw4IEBACiBWRlM6IE1vdW50ZWQgcm9vdCAobmZzIGZpbGVzeXN0ZW0pLgogRnJlZWluZyB1bnVzZWQga2VybmVsIG1lbW9yeTogNDRrIGluaXQKIElOSVQ6IHZlcnNpb24gMi43OCBib290aW5nCi0gICAgICAgICAgICAgICAgV2VsY29tZSB0byBERU5YIEVtYmVkZGVkIExpbnV4IEVudmlyb25tZW50Ci0gICAgICAgICAgICAgICAgUHJlc3MgJ0knIHRvIGVudGVyIGludGVyYWN0aXZlIHN0YXJ0dXAuCisJCVdlbGNvbWUgdG8gREVOWCBFbWJlZGRlZCBMaW51eCBFbnZpcm9ubWVudAorCQlQcmVzcyAnSScgdG8gZW50ZXIgaW50ZXJhY3RpdmUgc3RhcnR1cC4KIE1vdW50aW5nIHByb2MgZmlsZXN5c3RlbTogIFsgIE9LICBdCiBDb25maWd1cmluZyBrZXJuZWwgcGFyYW1ldGVyczogIFsgIE9LICBdCiBDYW5ub3QgYWNjZXNzIHRoZSBIYXJkd2FyZSBDbG9jayB2aWEgYW55IGtub3duIG1ldGhvZC4KQEAgLTMxNiw3ICszMTYsNyBAQAogVS1Cb290IDAuMi4yIChKYW4gMTkgMjAwMyAtIDExOjA4OjM5KQogCiBDUFU6ICAgWFBDODYweHhaUG5uQiBhdCA1MCBNSHo6IDQga0IgSS1DYWNoZSA0IGtCIEQtQ2FjaGUgRkVDIHByZXNlbnQKLSAgICAgICAgICoqKiBXYXJuaW5nOiBDUFUgQ29yZSBoYXMgU2lsaWNvbiBCdWdzIC0tIENoZWNrIHRoZSBFcnJhdGEgKioqCisJICoqKiBXYXJuaW5nOiBDUFUgQ29yZSBoYXMgU2lsaWNvbiBCdWdzIC0tIENoZWNrIHRoZSBFcnJhdGEgKioqCiBCb2FyZDogIyMjIE5vIEhXIElEIC0gYXNzdW1pbmcgRUxQVDg2MAogRFJBTTogIDE2IE1CCiBGTEFTSDogNTEyIGtCCkBAIC0zMzQsMTEgKzMzNCwxMSBAQAogRmlsZW5hbWUgJy9ob21lL2xlb3gvcE11bHRpJy4KIExvYWQgYWRkcmVzczogMHg0MDAwMDAKIExvYWRpbmc6ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGRvbmUKIEJ5dGVzIHRyYW5zZmVycmVkID0gMTk0NzgxNiAoMWRiOGE4IGhleCkKICMjIEJvb3RpbmcgaW1hZ2UgYXQgMDA0MDAwMDAgLi4uCkBAIC0zOTgsMjIgKzM5OCwyMiBAQAogUGFzc3dvcmQ6CiBXZWxjb21lIHRvIExpbnV4LTIuNC40IGZvciBFTFBUIENQVSBib2FyZCAoTVBDODYwVCBAIDUwTUh6KQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTg4ODhiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDg4ODg4OGIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4UCJZUCJZODgKKwkJCQkJICAgICAgYTg4ODhiLgorCQkJCQkgICAgIGQ4ODg4ODhiLgorCQkJCQkgICAgIDhQIllQIlk4OAogICAgICBfICAgICAgXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOHxvfHxvfDg4CiAgICAgfCB8ICAgIHxffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4JyAgICAuODgKICAgICB8IHwgICAgIF8gX19fXyAgXyAgIF8gIF8gIF8gICAgICAgICAgICAgIDhgLl8uJyBZOC4KICAgICB8IHwgICAgfCB8ICBfIFx8IHwgfCB8XCBcLyAvICAgICAgICAgICAgZC8gICAgICBgOGIuCiAgICAgfCB8X19fIHwgfCB8IHwgfCB8X3wgfC8gICAgXCAgICAgICAgICAuZFAgICAuICAgICBZOGIuCiAgICAgfF9fX19ffHxffF98IHxffFxfX19ffFxfL1xfLyAgICAgICAgIGQ4OicgICAiICAgYDo6ODhiLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ4IiAgICAgICAgICAgYFk4OGIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo4UCAgICAgJyAgICAgICA6ODg4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOGEuICAgIDogICAgICBfYTg4UAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuXy8iWWFhXyA6ICAgIC58IDg4UHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCAgICBZUCIgICAgICBgfCA4UCAgYC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgICAgXC5fX19fXy5kfCAgICAuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLS0uLl9fKTg4ODg4OFBgLl8uJworCQkJCQlkOCIgICAgICAgICAgIGBZODhiCisJCQkJICAgICAgIDo4UCAgICAgJyAgICAgICA6ODg4CisJCQkJCThhLiAgICA6ICAgICAgX2E4OFAKKwkJCQkgICAgICAuXy8iWWFhXyA6ICAgIC58IDg4UHwKKwkJCQkgICAgICBcICAgIFlQIiAgICAgIGB8IDhQICBgLgorCQkJCSAgICAgIC8gICAgIFwuX19fX18uZHwgICAgLicKKwkJCQkgICAgICBgLS0uLl9fKTg4ODg4OFBgLl8uJwogbG9naW5bMjFdOiByb290IGxvZ2luICBvbiBgdHR5UzAnCiAKIApkaWZmIC0tZ2l0IGEvYm9hcmQvTEVPWC9lbHB0ODYwL2VscHQ4NjAuYyBiL2JvYXJkL0xFT1gvZWxwdDg2MC9lbHB0ODYwLmMKaW5kZXggMjU2NDU0Ni4uMjU0NDk3ZiAxMDA2NDQKLS0tIGEvYm9hcmQvTEVPWC9lbHB0ODYwL2VscHQ4NjAuYworKysgYi9ib2FyZC9MRU9YL2VscHQ4NjAvZWxwdDg2MC5jCkBAIC05NSw3ICs5NSw3IEBACiAgIC8qCiAgICAqIFNpbmdsZSBSZWFkLiAoT2Zmc2V0IDAgaW4gVVBNQSBSQU0pCiAgICAqLwotICAweDBGMEZGQzI0LCAweDBGMENGQzA0LCAweEZGMEZGQzA0LCAweDAwQUYzQzA0LCAKKyAgMHgwRjBGRkMyNCwgMHgwRjBDRkMwNCwgMHhGRjBGRkMwNCwgMHgwMEFGM0MwNCwKICAgMHhGRjBGRkMwMCwgLyogbGFzdCAqLwogICAvKgogICAgKiBTRFJBTSBJbml0aWFsaXphdGlvbiAob2Zmc2V0IDUgaW4gVVBNQSBSQU0pCkBAIC0xMDksMjggKzEwOSwyOCBAQAogICAvKgogICAgKiBCdXJzdCBSZWFkLiAoT2Zmc2V0IDggaW4gVVBNQSBSQU0pCiAgICAqLwotICAweDBGMEZGQzI0LCAweDBGMENGQzA0LCAweEZGMEZGQzA0LCAweDAwQUYzQzA0LCAKKyAgMHgwRjBGRkMyNCwgMHgwRjBDRkMwNCwgMHhGRjBGRkMwNCwgMHgwMEFGM0MwNCwKICAgMHhGMDBGRkMwMCwgMHhGMDBGRkMwMCwgMHhGMDBGRkMwMCwgMHhGRjBGRkMwMCwKLSAgMHgwRkZDQ0MwNCwgMHhGRkFGRkMwNSwgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNCwgCisgIDB4MEZGQ0NDMDQsIDB4RkZBRkZDMDUsIDB4RkZBRkZDMDQsIDB4RkZBRkZDMDQsCiAgIDB4RkZBRkZDMDQsIDB4RkZBRkZDMDQsIDB4RkZBRkZDMDQsIDB4RkZBRkZDMDQsIC8qIGxhc3QgKi8KICAgLyoKICAgICogU2luZ2xlIFdyaXRlLiAoT2Zmc2V0IDE4IGluIFVQTUEgUkFNKQogICAgKi8KLSAgMHgwRjBGRkMyNCwgMHgwRjBDRkMwNCwgMHhGRjBGRkMwNCwgMHgwMEFGMEMwMCwgCisgIDB4MEYwRkZDMjQsIDB4MEYwQ0ZDMDQsIDB4RkYwRkZDMDQsIDB4MDBBRjBDMDAsCiAgIDB4RkYwRkZDMDQsIDB4MEZGQ0NDMDQsIDB4RkZBRkZDMDUsIC8qIGxhc3QgKi8KLSAgX05PVF9VU0VEXywgCisgIF9OT1RfVVNFRF8sCiAgIC8qCiAgICAqIEJ1cnN0IFdyaXRlLiAoT2Zmc2V0IDIwIGluIFVQTUEgUkFNKQogICAgKi8KLSAgMHgwRjBGRkMyNCwgMHgwRjBDRkMwNCwgMHhGRjBGRkMwMCwgMHgwMEFGMEMwMCwgCi0gIDB4RjAwRkZDMDAsIDB4RjAwRkZDMDAsIDB4RjAwRkZDMDQsIDB4MEZGQ0NDMDQsIAotICAweEZGQUZGQzA0LCAweEZGQUZGQzA1LCAweEZGQUZGQzA0LCAweEZGQUZGQzA0LCAKKyAgMHgwRjBGRkMyNCwgMHgwRjBDRkMwNCwgMHhGRjBGRkMwMCwgMHgwMEFGMEMwMCwKKyAgMHhGMDBGRkMwMCwgMHhGMDBGRkMwMCwgMHhGMDBGRkMwNCwgMHgwRkZDQ0MwNCwKKyAgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNSwgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNCwKICAgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNCwgMHhGRkFGRkMwNCwgLyogbGFzdCAqLwogICAvKgogICAgKiBSZWZyZXNoICAoT2Zmc2V0IDMwIGluIFVQTUEgUkFNKQogICAgKi8KLSAgMHgwRkZDM0MwNCwgMHhGRkZGRkMwNCwgMHhGRkZGRkMwNCwgMHhGRkZGRkMwNCwgCi0gIDB4RkZGRkZDMDUsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDUsIF9OT1RfVVNFRF8sIAorICAweDBGRkMzQzA0LCAweEZGRkZGQzA0LCAweEZGRkZGQzA0LCAweEZGRkZGQzA0LAorICAweEZGRkZGQzA1LCAweEZGRkZGQzA0LCAweEZGRkZGQzA1LCBfTk9UX1VTRURfLAogICAweEZGQUZGQzA0LCAweEZGQUZGQzA0LCAweEZGQUZGQzA0LCAweEZGQUZGQzA0LCAvKiBsYXN0ICovCiAgIC8qCiAgICAqIEV4Y2VwdGlvbi4gKE9mZnNldCAzYyBpbiBVUE1BIFJBTSkKQEAgLTE1Miw4ICsxNTIsOCBAQAogewogICB2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CiAKLSAgLyogCi0gICAqIExpZ2h0IHVwIHRoZSByZWQgbGVkIG9uIEVMUFQ4NjAgcGNiIChEUzEpIChQQ0RBVCkgCisgIC8qCisgICAqIExpZ2h0IHVwIHRoZSByZWQgbGVkIG9uIEVMUFQ4NjAgcGNiIChEUzEpIChQQ0RBVCkKICAgICovCiAgIGltbXItPmltX2lvcG9ydC5pb3BfcGNkYXQgJj0gfkNGR19EUzE7ICAgLyogUENEQVQgKERTMSA9IDApICAgICAgICAgICAgICAgICovCiAgIGltbXItPmltX2lvcG9ydC5pb3BfcGNwYXIgJj0gfkNGR19EUzE7ICAgLyogUENQQVIgKDA9Z2VuZXJhbCBwdXJwb3NlIEkvTykgICovCkBAIC0xNzAsMjAgKzE3MCwyMCBAQAogICogUmV0dXJuIDEgaWYgbm8gc2Vjb25kIERSQU0gYmFuaywgb3RoZXJ3aXNlIHJldHVybnMgMAogICovCiAKLWludCAKK2ludAogY2hlY2tib2FyZCAodm9pZCkKIHsKICAgICB1bnNpZ25lZCBjaGFyICpzID0gZ2V0ZW52KCJzZXJpYWwjIik7CiAKICAgICBpZiAoICFzIHx8IHN0cm5jbXAocywgIkVMUFQ4NjAiLCA3KSApCiAgICAgICBwcmludGYgKCIjIyMgTm8gSFcgSUQgLSBhc3N1bWluZyBFTFBUODYwXG4iKTsKLSAgICAKKwogICAgIHJldHVybiAoIDAgKTsgICAgLyogc3VjY2VzcyAqLwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLWxvbmcgaW50IAorbG9uZyBpbnQKIGluaXRkcmFtIChpbnQgYm9hcmRfdHlwZSkKIHsKICAgICB2b2xhdGlsZSBpbW1hcF90ICAgICAqaW1tYXAgID0gKGltbWFwX3QgKilDRkdfSU1NUjsKQEAgLTE5NCw3ICsxOTQsNyBAQAogICAgIC8qCiAgICAgICogVGhpcyBzZXF1ZW5jZSBpbml0aWFsaXplcyBTRFJBTSBjaGlwcyBvbiBFTFBUODYwIGJvYXJkCiAgICAgICovCi0gICAgdXBtY29uZmlnKFVQTUEsICh1aW50ICopaW5pdF9zZHJhbV90YWJsZSwgCisgICAgdXBtY29uZmlnKFVQTUEsICh1aW50ICopaW5pdF9zZHJhbV90YWJsZSwKIAkgICAgICBzaXplb2YoaW5pdF9zZHJhbV90YWJsZSkvc2l6ZW9mKHVpbnQpKTsKIAogICAgIG1lbWN0bC0+bWVtY19tcHRwciA9IDB4MDIwMDsKQEAgLTIwMyw3ICsyMDMsNyBAQAogICAgIG1lbWN0bC0+bWVtY19tYXIgICA9IDB4MDAwMDAwODg7CiAgICAgbWVtY3RsLT5tZW1jX21jciAgID0gMHg4MDAwMjAwMDsJLyogQ1MxOiBTRFJBTSBiYW5rIDAgKi8KIAotICAgIHVwbWNvbmZpZyhVUE1BLCAodWludCAqKXNkcmFtX3RhYmxlLCAKKyAgICB1cG1jb25maWcoVVBNQSwgKHVpbnQgKilzZHJhbV90YWJsZSwKIAkgICAgICBzaXplb2Yoc2RyYW1fdGFibGUpL3NpemVvZih1aW50KSk7CiAKICAgICAvKgpAQCAtMjU3LDggKzI1Nyw4IEBACiAgICAgICoKICAgICAgKiB0cnkgOCBjb2x1bW4gbW9kZQogICAgICAqLwotICAgIHNpemU4ID0gZHJhbV9zaXplIChDRkdfTUFNUl84Q09MLCAKLQkJICAgICAgICh1bG9uZyAqKSBTRFJBTV9CQVNFMV9QUkVMSU0sIAorICAgIHNpemU4ID0gZHJhbV9zaXplIChDRkdfTUFNUl84Q09MLAorCQkgICAgICAgKHVsb25nICopIFNEUkFNX0JBU0UxX1BSRUxJTSwKIAkJICAgICAgIFNEUkFNX01BWF9TSVpFKTsKIAogICAgIHVkZWxheSAoMTAwMCk7CkBAIC0yNjYsMTUgKzI2NiwxNSBAQAogICAgIC8qCiAgICAgICogdHJ5IDkgY29sdW1uIG1vZGUKICAgICAgKi8KLSAgICBzaXplOSA9IGRyYW1fc2l6ZSAoQ0ZHX01BTVJfOUNPTCwgCi0JCSAgICAgICAodWxvbmcgKikgU0RSQU1fQkFTRTFfUFJFTElNLCAKKyAgICBzaXplOSA9IGRyYW1fc2l6ZSAoQ0ZHX01BTVJfOUNPTCwKKwkJICAgICAgICh1bG9uZyAqKSBTRFJBTV9CQVNFMV9QUkVMSU0sCiAJCSAgICAgICBTRFJBTV9NQVhfU0laRSk7CiAKICAgICBpZiAoIHNpemU4IDwgc2l6ZTkgKSAgICAvKiBsZWF2ZSBjb25maWd1cmF0aW9uIGF0IDkgY29sdW1ucwkqLwogICAgICAgewogCXNpemVfYjAgPSBzaXplOTsKIAkvKiBkZWJ1ZyAoIlNEUkFNIEJhbmsgMCBpbiA5IGNvbHVtbiBtb2RlOiAlbGQgTUJcbiIsIHNpemUgPj4gMjApOyAqLwotICAgICAgfSAKKyAgICAgIH0KICAgICBlbHNlICAgICAgICAgICAgICAgICAgLyogYmFjayB0byA4IGNvbHVtbnMJCQkqLwogICAgICAgewogCXNpemVfYjAgPSBzaXplODsKQEAgLTI4MiwxNCArMjgyLDE0IEBACiAJdWRlbGF5ICg1MDApOwogCS8qIGRlYnVnICgiU0RSQU0gQmFuayAwIGluIDggY29sdW1uIG1vZGU6ICVsZCBNQlxuIiwgc2l6ZSA+PiAyMCk7ICovCiAgICAgICB9Ci0gICAgCisKICAgICB1ZGVsYXkgKDEwMDApOwogCiAgICAgLyoKICAgICAgKiBBZGp1c3QgcmVmcmVzaCByYXRlIGRlcGVuZGluZyBvbiBTRFJBTSB0eXBlLCBib3RoIGJhbmtzCiAgICAgICogRm9yIHR5cGVzID4gMTI4IE1CaXQgbGVhdmUgaXQgYXQgdGhlIGN1cnJlbnQgKGZhc3QpIHJhdGUKICAgICAgKi8KLSAgICBpZiAoIHNpemVfYjAgPCAweDAyMDAwMDAwICkgCisgICAgaWYgKCBzaXplX2IwIDwgMHgwMjAwMDAwMCApCiAgICAgICB7CiAJLyogcmVkdWNlIHRvIDE1LjYgdXMgKDYyLjQgdXMgLyBxdWFkKSAqLwogCW1lbWN0bC0+bWVtY19tcHRwciA9IENGR19NUFRQUl8yQktfNEs7CkBAIC0zMDQsNyArMzA0LDcgQEAKIAogICAgIHsKICAgICAgIHVuc2lnbmVkIGxvbmcgcmVnOwotICAgICAgCisKICAgICAgIC8qIGFkanVzdCByZWZyZXNoIHJhdGUgZGVwZW5kaW5nIG9uIFNEUkFNIHR5cGUsIG9uZSBiYW5rICovCiAgICAgICByZWcgPSBtZW1jdGwtPm1lbWNfbXB0cHI7CiAgICAgICByZWcgPj49IDE7CS8qIHJlZHVjZSB0byBDRkdfTVBUUFJfMUJLXzhLIC8gXzRLICovCkBAIC0zMTIsNyArMzEyLDcgQEAKICAgICB9CiAKICAgICB1ZGVsYXkoMTAwMDApOwotICAgIAorCiAgICAgcmV0dXJuIChzaXplX2IwKTsKIH0KIApAQCAtMzI2LDkgKzMyNiw5IEBACiAgKiAtIHNob3J0IGJldHdlZW4gZGF0YSBsaW5lcwogICovCiAKLXN0YXRpYyBsb25nIGludCAKLWRyYW1fc2l6ZSAobG9uZyBpbnQgICBtYW1yX3ZhbHVlLCAKLQkgICBsb25nIGludCAgKmJhc2UsIAorc3RhdGljIGxvbmcgaW50CitkcmFtX3NpemUgKGxvbmcgaW50ICAgbWFtcl92YWx1ZSwKKwkgICBsb25nIGludCAgKmJhc2UsCiAJICAgbG9uZyBpbnQgICBtYXhzaXplKQogewogICB2b2xhdGlsZSBpbW1hcF90ICAgICAqaW1tYXAgID0gKGltbWFwX3QgKilDRkdfSU1NUjsKQEAgLTMzNywzOCArMzM3LDM4IEBACiAgIHVsb25nICAgICAgICAgICAgICAgICBjbnQsIHZhbDsKICAgdWxvbmcgICAgICAgICAgICAgICAgIHNhdmVbMzJdOyAgICAvKiB0byBtYWtlIHRlc3Qgbm9uLWRlc3RydWN0aXZlICovCiAgIHVuc2lnbmVkIGNoYXIgICAgICAgICBpID0gMDsKLSAgCisKICAgbWVtY3RsLT5tZW1jX21hbXIgPSBtYW1yX3ZhbHVlOwotICAKLSAgZm9yIChjbnQgPSBtYXhzaXplL3NpemVvZihsb25nKTsgY250ID4gMDsgY250ID4+PSAxKSAKKworICBmb3IgKGNudCA9IG1heHNpemUvc2l6ZW9mKGxvbmcpOyBjbnQgPiAwOyBjbnQgPj49IDEpCiAgICAgewogICAgICAgYWRkciA9IGJhc2UgKyBjbnQ7ICAgIC8qIHBvaW50ZXIgYXJpdGghICovCi0gICAgICAKKwogICAgICAgc2F2ZVtpKytdID0gKmFkZHI7CiAgICAgICAqYWRkciAgICAgPSB+Y250OwogICAgIH0KLSAgCisKICAgLyogd3JpdGUgMCB0byBiYXNlIGFkZHJlc3MgKi8KICAgYWRkciAgICA9IGJhc2U7CiAgIHNhdmVbaV0gPSAqYWRkcjsKICAgKmFkZHIgICA9IDA7Ci0gIAorCiAgIC8qIGNoZWNrIGF0IGJhc2UgYWRkcmVzcyAqLwotICBpZiAoICh2YWwgPSAqYWRkcikgIT0gMCApIAorICBpZiAoICh2YWwgPSAqYWRkcikgIT0gMCApCiAgICAgewogICAgICAgKmFkZHIgPSBzYXZlW2ldOwogCiAgICAgICByZXR1cm4gKDApOwogICAgIH0KLSAgCi0gIGZvciAoY250ID0gMTsgY250IDw9IG1heHNpemUvc2l6ZW9mKGxvbmcpOyBjbnQgPDw9IDEpIAorCisgIGZvciAoY250ID0gMTsgY250IDw9IG1heHNpemUvc2l6ZW9mKGxvbmcpOyBjbnQgPDw9IDEpCiAgICAgewogICAgICAgYWRkciA9IGJhc2UgKyBjbnQ7ICAgIC8qIHBvaW50ZXIgYXJpdGghICovCi0gICAgICAKKwogICAgICAgdmFsICAgPSAqYWRkcjsKICAgICAgICphZGRyID0gc2F2ZVstLWldOwotICAgICAgCi0gICAgICBpZiAoIHZhbCAhPSAofmNudCkgKSAKKworICAgICAgaWYgKCB2YWwgIT0gKH5jbnQpICkKIAl7CiAJICByZXR1cm4gKGNudCAqIHNpemVvZihsb25nKSk7CiAJfQpAQCAtMzg4LDcgKzM4OCw3IEBACiByZXNldF9waHkgKHZvaWQpCiB7CiAgIHZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKSBDRkdfSU1NUjsKLSAgCisKICAgLyoKICAgICogRW5zdXJlIExCSyBMWFQ5MDEgZXRoZXJuZXQgMSAmIDIgPSAwIC4uLiBmb3Igbm9ybWFsIGxvb3BiYWNrIGluIGVmZmVjdAogICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBubyBBVUkgbG9vcGJhY2sKZGlmZiAtLWdpdCBhL2JvYXJkL0xFT1gvZWxwdDg2MC9mbGFzaC5jIGIvYm9hcmQvTEVPWC9lbHB0ODYwL2ZsYXNoLmMKaW5kZXggNzEwN2FhYS4uYzFiM2I4NSAxMDA2NDQKLS0tIGEvYm9hcmQvTEVPWC9lbHB0ODYwL2ZsYXNoLmMKKysrIGIvYm9hcmQvTEVPWC9lbHB0ODYwL2ZsYXNoLmMKQEAgLTc5LDQxICs3OSw0MSBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLXVuc2lnbmVkIGxvbmcgCit1bnNpZ25lZCBsb25nCiBmbGFzaF9pbml0ICh2b2lkKQogewogICB2b2xhdGlsZSBpbW1hcF90ICAgICAqaW1tYXAgID0gKGltbWFwX3QgKilDRkdfSU1NUjsKICAgdm9sYXRpbGUgbWVtY3RsOHh4X3QgKm1lbWN0bCA9ICZpbW1hcC0+aW1fbWVtY3RsOwogICB1bnNpZ25lZCBsb25nICAgICAgICAgc2l6ZV9iMDsKICAgaW50IGk7Ci0gIAorCiAgIC8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KLSAgZm9yIChpPTA7IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKSAKKyAgZm9yIChpPTA7IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKQogICAgIHsKICAgICAgIGZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwogICAgIH0KLSAgCisKICAgLyogU3RhdGljIEZMQVNIIEJhbmsgY29uZmlndXJhdGlvbiBoZXJlIC0gRklYTUUgWFhYICovCi0gIAotICBzaXplX2IwID0gZmxhc2hfZ2V0X3NpemUgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopRkxBU0hfQkFTRTBfUFJFTElNLCAKKworICBzaXplX2IwID0gZmxhc2hfZ2V0X3NpemUgKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopRkxBU0hfQkFTRTBfUFJFTElNLAogCQkJICAgICZmbGFzaF9pbmZvWzBdKTsKLSAgCi0gIGlmICggZmxhc2hfaW5mb1swXS5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOICkgCisKKyAgaWYgKCBmbGFzaF9pbmZvWzBdLmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04gKQogICAgIHsKICAgICAgIHByaW50ZiAoIiMjIFVua25vd24gRkxBU0ggb24gQmFuayAwIC0gU2l6ZSA9IDB4JTA4bHggPSAlbGQgTUJcbiIsCiAJICAgICAgc2l6ZV9iMCwgc2l6ZV9iMDw8MjApOwogICAgIH0KLSAgCisKICAgLyogUmVtYXAgRkxBU0ggYWNjb3JkaW5nIHRvIHJlYWwgc2l6ZSAqLwogICBtZW1jdGwtPm1lbWNfb3IwID0gQ0ZHX09SX1RJTUlOR19GTEFTSCB8ICgtc2l6ZV9iMCAmIE9SX0FNX01TSyk7CiAgIG1lbWN0bC0+bWVtY19icjAgPSAoQ0ZHX0ZMQVNIX0JBU0UgJiBCUl9CQV9NU0spIHwgQlJfTVNfR1BDTSB8IEJSX1BTXzggfCBCUl9WOwotICAKKwogICAvKiBSZS1kbyBzaXppbmcgdG8gZ2V0IGZ1bGwgY29ycmVjdCBpbmZvICovCi0gIHNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDRkdfRkxBU0hfQkFTRSwgCisgIHNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilDRkdfRkxBU0hfQkFTRSwKIAkJCSAgICAmZmxhc2hfaW5mb1swXSk7Ci0gIAorCiAgIGZsYXNoX2dldF9vZmZzZXRzIChDRkdfRkxBU0hfQkFTRSwgJmZsYXNoX2luZm9bMF0pOwotICAKKwogI2lmIENGR19NT05JVE9SX0JBU0UgPj0gQ0ZHX0ZMQVNIX0JBU0UKICAgLyogbW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KICAgZmxhc2hfcHJvdGVjdCAoRkxBR19QUk9URUNUX1NFVCwKQEAgLTEyMSw3ICsxMjEsNyBAQAogCQkgQ0ZHX01PTklUT1JfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuLTEsCiAJCSAmZmxhc2hfaW5mb1swXSk7CiAjZW5kaWYKLSAgCisKICNpZmRlZglDRkdfRU5WX0lTX0lOX0ZMQVNICiAgIC8qIEVOViBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KICAgZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULApAQCAtMTMxLDE0ICsxMzEsMTQgQEAKICNlbmRpZgogCiAgIGZsYXNoX2luZm9bMF0uc2l6ZSA9IHNpemVfYjA7Ci0gIAorCiAgIHJldHVybiAoc2l6ZV9iMCk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotc3RhdGljIHZvaWQgCi1mbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgICAgICAgICAgYmFzZSwgCitzdGF0aWMgdm9pZAorZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nICAgICAgICAgIGJhc2UsCiAJCSAgIGZsYXNoX2luZm9fdCAgKmluZm8pCiB7CiAgIGludCBpOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAjZGVmaW5lIFNFQ1RPUl82NEtCICAgIDB4MDAwMTAwMDAKIAogICAvKiBzZXQgdXAgc2VjdG9yIHN0YXJ0IGFkcmVzcyB0YWJsZSAqLwotICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIAorICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCiAgICAgewogICAgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiBTRUNUT1JfNjRLQik7CiAgICAgfQpAQCAtMTU0LDM4ICsxNTQsMzggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi12b2lkIAordm9pZAogZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICppbmZvKQogewogICBpbnQgaTsKLSAgCi0gIGlmICggaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTiApIAorCisgIGlmICggaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTiApCiAgICAgewogICAgICAgcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOwogICAgICAgcmV0dXJuOwogICAgIH0KIAotICBzd2l0Y2ggKCBpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLICkgCisgIHN3aXRjaCAoIGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0sgKQogICAgIHsKICAgICBjYXNlIEZMQVNIX01BTl9BTUQ6CXByaW50ZiAoIkFNRCAiKTsJCWJyZWFrOwogICAgIGNhc2UgRkxBU0hfTUFOX0ZVSjoJcHJpbnRmICgiRlVKSVRTVSAiKTsJCWJyZWFrOwogICAgIGNhc2UgRkxBU0hfTUFOX1NUTTogcHJpbnRmICgiU1RNIChUaG9tc29uKSAiKTsgICAgICBicmVhazsKICAgICBkZWZhdWx0OgkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CWJyZWFrOwogICAgIH0KLSAgCi0gIHN3aXRjaCAoIGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0sgKSAKKworICBzd2l0Y2ggKCBpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLICkKICAgICB7CiAgICAgY2FzZSBGTEFTSF9BTTA0MDogICBwcmludGYgKCJBTTI5RjA0MCAgICg0IE1iaXRzKVxuIik7CiAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgkgICAgICAgIHByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgCi0gIHByaW50ZiAoIiAgU2l6ZTogJWxkIEtCIGluICVkIFNlY3RvcnNcbiIsIAorCisgIHByaW50ZiAoIiAgU2l6ZTogJWxkIEtCIGluICVkIFNlY3RvcnNcbiIsCiAJICBpbmZvLT5zaXplID4+IDEwLCBpbmZvLT5zZWN0b3JfY291bnQpOwotICAKKwogICBwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7Ci0gIGZvciAoaT0wOyBpPGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSAKKyAgZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpCiAgICAgewogICAgICAgaWYgKChpICUgNSkgPT0gMCkKIAlwcmludGYgKCJcbiAgICIpOwpAQCAtMjEwLDkgKzIxMCw5IEBACiAgKiBUaGUgZm9sbG93aW5nIGNvZGUgY2Fubm90IGJlIHJ1biBmcm9tIEZMQVNIIQogICovCiAKLXN0YXRpYyB1bG9uZyAKLWZsYXNoX2dldF9zaXplICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICphZGRyLCAKLSAgICAgICAgICAgICAgICBmbGFzaF9pbmZvX3QgICAgICAgICAgICppbmZvKQorc3RhdGljIHVsb25nCitmbGFzaF9nZXRfc2l6ZSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJZmxhc2hfaW5mb190ICAgICAgICAgICAqaW5mbykKIHsKICAgc2hvcnQgaTsKICAgdWNoYXIgdmFsdWU7CkBAIC0yMjIsMTAgKzIyMiwxMCBAQAogICBhZGRyWzB4MDU1NV0gPSAweEFBOwogICBhZGRyWzB4MDJBQV0gPSAweDU1OwogICBhZGRyWzB4MDU1NV0gPSAweDkwOwotICAKKwogICB2YWx1ZSA9IGFkZHJbMF07CiAKLSAgc3dpdGNoICggdmFsdWUgKSAKKyAgc3dpdGNoICggdmFsdWUgKQogICAgIHsKICAgICAgIC8qICAgIGNhc2UgQU1EX01BTlVGQUNUOiAqLwogICAgIGNhc2UgMHgwMToKQEAgLTI0NiwxMCArMjQ2LDEwIEBACiAgICAgICBpbmZvLT5zaXplID0gMDsKICAgICAgIHJldHVybiAoMCk7CQkJLyogbm8gb3IgdW5rbm93biBmbGFzaAkqLwogICAgIH0KLSAgCisKICAgdmFsdWUgPSBhZGRyWzFdOwkJCS8qIGRldmljZSBJRAkJKi8KLSAgCi0gIHN3aXRjaCAoIHZhbHVlICkgCisKKyAgc3dpdGNoICggdmFsdWUgKQogICAgIHsKICAgICBjYXNlIFNUTV9JRF9GMDQwQjoKICAgICBjYXNlIEFNRF9JRF9GMDQwQjoKQEAgLTI2NCwxMyArMjY0LDEzIEBACiAgICAgfQogCiAgIC8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRyZXNzIHRhYmxlICovCi0gIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgCisgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKICAgICB7CiAgICAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMTAwMDApOwogICAgIH0KLSAgCisKICAgLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCi0gIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgCisgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKICAgICB7CiAgICAgICAvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLwogICAgICAgLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLwpAQCAtMjgxLDEzICsyODEsMTMgQEAKICAgLyoKICAgICogUHJldmVudCB3cml0ZXMgdG8gdW5pbml0aWFsaXplZCBGTEFTSC4KICAgICovCi0gIGlmICggaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTiApIAorICBpZiAoIGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04gKQogICAgIHsKICAgICAgIGFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWluZm8tPnN0YXJ0WzBdOwotICAgICAgCisKICAgICAgICphZGRyID0gMHhGMDsJLyogcmVzZXQgYmFuayAqLwogICAgIH0KLSAgCisKICAgcmV0dXJuIChpbmZvLT5zaXplKTsKIH0KIApAQCAtMjk2LDIxICsyOTYsMjEgQEAKICAqLwogCiBpbnQKLWZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgICppbmZvLCAKLQkgICAgIGludCAgICAgICAgICAgIHNfZmlyc3QsIAorZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAgKmluZm8sCisJICAgICBpbnQgICAgICAgICAgICBzX2ZpcnN0LAogCSAgICAgaW50ICAgICAgICAgICAgc19sYXN0KQogewogICB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICphZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoaW5mby0+c3RhcnRbMF0pOwogICBpbnQgZmxhZywgcHJvdCwgc2VjdCwgbF9zZWN0OwogICB1bG9uZyBzdGFydCwgbm93LCBsYXN0OwotICAKLSAgaWYgKCAoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSApIAorCisgIGlmICggKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkgKQogICAgIHsKLSAgICAgIGlmICggaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTiApIAorICAgICAgaWYgKCBpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOICkKIAl7CiAJICBwcmludGYgKCItIG1pc3NpbmdcbiIpOwotCX0gCi0gICAgICBlbHNlIAorCX0KKyAgICAgIGVsc2UKIAl7CiAJICBwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOwogCX0KQEAgLTMxOCw0NCArMzE4LDQ0IEBACiAgICAgfQogCiAgIGlmICggKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHx8Ci0gICAgICAgKGluZm8tPmZsYXNoX2lkID4gRkxBU0hfQU1EX0NPTVApICkgCisgICAgICAgKGluZm8tPmZsYXNoX2lkID4gRkxBU0hfQU1EX0NPTVApICkKICAgICB7CiAgICAgICBwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgJTA4bHggLSBhYm9ydGVkXG4iLAogCSAgICAgIGluZm8tPmZsYXNoX2lkKTsKICAgICAgIHJldHVybiAoIDEgKTsKICAgICB9Ci0gIAorCiAgIHByb3QgPSAwOwotICBmb3IgKHNlY3Q9c19maXJzdDsgc2VjdDw9c19sYXN0OyArK3NlY3QpIAorICBmb3IgKHNlY3Q9c19maXJzdDsgc2VjdDw9c19sYXN0OyArK3NlY3QpCiAgICAgewotICAgICAgaWYgKCBpbmZvLT5wcm90ZWN0W3NlY3RdICkgCisgICAgICBpZiAoIGluZm8tPnByb3RlY3Rbc2VjdF0gKQogCXsKIAkgIHByb3QrKzsKIAl9CiAgICAgfQotICAKLSAgaWYgKCBwcm90ICkgCisKKyAgaWYgKCBwcm90ICkKICAgICB7CiAgICAgICBwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsIHByb3QpOwotICAgIH0gCi0gIGVsc2UgCisgICAgfQorICBlbHNlCiAgICAgewogICAgICAgcHJpbnRmICgiXG4iKTsKICAgICB9Ci0gIAorCiAgIGxfc2VjdCA9IC0xOwotICAKKwogICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotICAKKwogICBhZGRyWzB4MDU1NV0gPSAweEFBOwogICBhZGRyWzB4MDJBQV0gPSAweDU1OwogICBhZGRyWzB4MDU1NV0gPSAweDgwOwogICBhZGRyWzB4MDU1NV0gPSAweEFBOwogICBhZGRyWzB4MDJBQV0gPSAweDU1OwotICAKKwogICAvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCi0gIGZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgc2VjdCsrKSAKKyAgZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdDw9c19sYXN0OyBzZWN0KyspCiAgICAgewogICAgICAgaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgICAgLyogbm90IHByb3RlY3RlZCAqLwogCXsKQEAgLTM2NCwyNiArMzY0LDI2IEBACiAJICBsX3NlY3QgPSBzZWN0OwogCX0KICAgICB9Ci0gIAorCiAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwogICBpZiAoIGZsYWcgKQogICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0gIAorCiAgIC8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwogICB1ZGVsYXkgKDEwMDApOwotICAKKwogICAvKgogICAgKiBXZSB3YWl0IGZvciB0aGUgbGFzdCB0cmlnZ2VyZWQgc2VjdG9yCiAgICAqLwogICBpZiAoIGxfc2VjdCA8IDAgKQogICAgIGdvdG8gRE9ORTsKLSAgCisKICAgc3RhcnQgPSBnZXRfdGltZXIgKDApOwogICBsYXN0ICA9IHN0YXJ0OwogICBhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoaW5mby0+c3RhcnRbbF9zZWN0XSk7Ci0gIHdoaWxlICggKGFkZHJbMF0gJiAweDgwKSAhPSAweDgwICkgCisgIHdoaWxlICggKGFkZHJbMF0gJiAweDgwKSAhPSAweDgwICkKICAgICB7Ci0gICAgICBpZiAoIChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUICkgCisgICAgICBpZiAoIChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUICkKIAl7CiAJICBwcmludGYgKCJUaW1lb3V0XG4iKTsKIAkgIHJldHVybiAoIDEgKTsKQEAgLTM5NSwxNCArMzk1LDE0IEBACiAJICBsYXN0ID0gbm93OwogCX0KICAgICB9Ci0gIAorCiBET05FOgogICAvKiByZXNldCB0byByZWFkIG1vZGUgKi8KICAgYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopaW5mby0+c3RhcnRbMF07CiAgIGFkZHJbMF0gPSAweEYwOwkvKiByZXNldCBiYW5rICovCi0gIAorCiAgIHByaW50ZiAoIiBkb25lXG4iKTsKLSAgCisKICAgcmV0dXJuICggMCApOwogfQogCkBAIC00MTMsMTAgKzQxMywxMCBAQAogICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKICAqLwogCi1pbnQgCi13cml0ZV9idWZmIChmbGFzaF9pbmZvX3QgICppbmZvLCAKLQkgICAgdWNoYXIgICAgICAgICAqc3JjLCAKLQkgICAgdWxvbmcgICAgICAgICAgYWRkciwgCitpbnQKK3dyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAgKmluZm8sCisJICAgIHVjaGFyICAgICAgICAgKnNyYywKKwkgICAgdWxvbmcgICAgICAgICAgYWRkciwKIAkgICAgdWxvbmcgICAgICAgICAgY250KQogewogICB1bG9uZyBjcCwgd3AsIGRhdGE7CkBAIC00MjgsMTYgKzQyOCwxNiBAQAogICAgICAgLyogV2lkdGggb2YgdGhlIGRhdGEgYnVzOiA4IGJpdHMgKi8KIAogICAgICAgd3AgPSBhZGRyOwotICAgICAgCisKICAgICAgIHdoaWxlICggY250ICkKIAl7CiAJICBiZGF0YSA9ICpzcmMrKzsKLQkgIAorCiAJICBpZiAoIChyYyA9IHdyaXRlX2J5dGUoaW5mbywgd3AsIGJkYXRhKSkgIT0gMCApCiAJICAgIHsKIAkgICAgICByZXR1cm4gKHJjKTsKIAkgICAgfQotCSAgCisKIAkgICsrd3A7CiAJICAtLWNudDsKIAl9CkBAIC00NDksNzIgKzQ0OSw3MiBAQAogICAgICAgLyogV2lkdGggb2YgdGhlIGRhdGEgYnVzOiAzMiBiaXRzICovCiAKICAgICAgIHdwID0gKGFkZHIgJiB+Myk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLwotICAgICAgCisKICAgICAgIC8qCiAgICAgICAgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCiAgICAgICAgKi8KLSAgICAgIGlmICggKGwgPSBhZGRyIC0gd3ApICE9IDAgKSAKKyAgICAgIGlmICggKGwgPSBhZGRyIC0gd3ApICE9IDAgKQogCXsKIAkgIGRhdGEgPSAwOwotCSAgZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgCisJICBmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKQogCSAgICB7CiAJICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CiAJICAgIH0KLQkgIGZvciAoOyBpPDQgJiYgY250PjA7ICsraSkgCisJICBmb3IgKDsgaTw0ICYmIGNudD4wOyArK2kpCiAJICAgIHsKIAkgICAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CiAJICAgICAgLS1jbnQ7CiAJICAgICAgKytjcDsKIAkgICAgfQotCSAgZm9yICg7IGNudD09MCAmJiBpPDQ7ICsraSwgKytjcCkgCisJICBmb3IgKDsgY250PT0wICYmIGk8NDsgKytpLCArK2NwKQogCSAgICB7CiAJICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CiAJICAgIH0KLQkgIAotCSAgaWYgKCAocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCApIAorCisJICBpZiAoIChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwICkKIAkgICAgewogCSAgICAgIHJldHVybiAocmMpOwogCSAgICB9CiAJICB3cCArPSA0OwogCX0KLSAgICAgIAorCiAgICAgICAvKgogICAgICAgICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0CiAgICAgICAgKi8KLSAgICAgIHdoaWxlICggY250ID49IDQgKSAKKyAgICAgIHdoaWxlICggY250ID49IDQgKQogCXsKIAkgIGRhdGEgPSAwOwotCSAgZm9yIChpPTA7IGk8NDsgKytpKSAKKwkgIGZvciAoaT0wOyBpPDQ7ICsraSkKIAkgICAgewogCSAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKIAkgICAgfQotCSAgaWYgKCAocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCApIAorCSAgaWYgKCAocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCApCiAJICAgIHsKIAkgICAgICByZXR1cm4gKHJjKTsKIAkgICAgfQogCSAgd3AgICs9IDQ7CiAJICBjbnQgLT0gNDsKIAl9Ci0gICAgICAKLSAgICAgIGlmICggY250ID09IDAgKSAKKworICAgICAgaWYgKCBjbnQgPT0gMCApCiAJewogCSAgcmV0dXJuICgwKTsKIAl9Ci0gICAgICAKKwogICAgICAgLyoKICAgICAgICAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcwogICAgICAgICovCiAgICAgICBkYXRhID0gMDsKLSAgICAgIGZvciAoaT0wLCBjcD13cDsgaTw0ICYmIGNudD4wOyArK2ksICsrY3ApIAorICAgICAgZm9yIChpPTAsIGNwPXdwOyBpPDQgJiYgY250PjA7ICsraSwgKytjcCkKIAl7CiAJICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CiAJICAtLWNudDsKIAl9Ci0gICAgICBmb3IgKDsgaTw0OyArK2ksICsrY3ApIAorICAgICAgZm9yICg7IGk8NDsgKytpLCArK2NwKQogCXsKIAkgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwogCX0KLSAgICAgIAorCiAgICAgICByZXR1cm4gKHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKTsKICAgICB9CiB9CkBAIC01MjUsMzggKzUyNSwzOCBAQAogICogMSAtIHdyaXRlIHRpbWVvdXQKICAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCiAgKi8KLXN0YXRpYyBpbnQgCi13cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgICppbmZvLCAKLQkgICAgdWxvbmcgICAgICAgICAgZGVzdCwgCitzdGF0aWMgaW50Cit3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgICppbmZvLAorCSAgICB1bG9uZyAgICAgICAgICBkZXN0LAogCSAgICB1bG9uZyAgICAgICAgICBkYXRhKQogewogICB2dV9sb25nICphZGRyID0gKHZ1X2xvbmcqKShpbmZvLT5zdGFydFswXSk7CiAgIHVsb25nIHN0YXJ0OwogICBpbnQgZmxhZzsKLSAgCisKICAgLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCi0gIGlmICggKCooKHZ1X2xvbmcgKilkZXN0KSAmIGRhdGEpICE9IGRhdGEgKSAKKyAgaWYgKCAoKigodnVfbG9uZyAqKWRlc3QpICYgZGF0YSkgIT0gZGF0YSApCiAgICAgewogICAgICAgcmV0dXJuICgyKTsKICAgICB9CiAgIC8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwogICBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0gIAorCiAgIGFkZHJbMHgwNTU1XSA9IDB4MDBBQTAwQUE7CiAgIGFkZHJbMHgwMkFBXSA9IDB4MDA1NTAwNTU7CiAgIGFkZHJbMHgwNTU1XSA9IDB4MDBBMDAwQTA7Ci0gIAorCiAgICooKHZ1X2xvbmcgKilkZXN0KSA9IGRhdGE7Ci0gIAorCiAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwogICBpZiAoIGZsYWcgKQogICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAKICAgLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLwogICBzdGFydCA9IGdldF90aW1lciAoMCk7Ci0gIHdoaWxlICggKCooKHZ1X2xvbmcgKilkZXN0KSAmIDB4MDA4MDAwODApICE9IChkYXRhICYgMHgwMDgwMDA4MCkgKSAKKyAgd2hpbGUgKCAoKigodnVfbG9uZyAqKWRlc3QpICYgMHgwMDgwMDA4MCkgIT0gKGRhdGEgJiAweDAwODAwMDgwKSApCiAgICAgewotICAgICAgaWYgKCBnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQgKSAKKyAgICAgIGlmICggZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUICkKIAl7CiAJICByZXR1cm4gKDEpOwogCX0KQEAgLTU3MSwzOCArNTcxLDM4IEBACiAgKiAxIC0gd3JpdGUgdGltZW91dAogICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKICAqLwotc3RhdGljIGludCAKLXdyaXRlX2J5dGUgKGZsYXNoX2luZm9fdCAgKmluZm8sIAotCSAgICB1bG9uZyAgICAgICAgICBkZXN0LCAKK3N0YXRpYyBpbnQKK3dyaXRlX2J5dGUgKGZsYXNoX2luZm9fdCAgKmluZm8sCisJICAgIHVsb25nICAgICAgICAgIGRlc3QsCiAJICAgIHVjaGFyICAgICAgICAgIGRhdGEpCiB7CiAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShpbmZvLT5zdGFydFswXSk7CiAgIHVsb25nICBzdGFydDsKICAgaW50ICAgIGZsYWc7Ci0gIAorCiAgIC8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwotICBpZiAoICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopZGVzdCkgJiBkYXRhKSAhPSBkYXRhICkgCisgIGlmICggKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilkZXN0KSAmIGRhdGEpICE9IGRhdGEgKQogICAgIHsKICAgICAgIHJldHVybiAoMik7CiAgICAgfQogICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotICAKKwogICBhZGRyWzB4MDU1NV0gPSAweEFBOwogICBhZGRyWzB4MDJBQV0gPSAweDU1OwogICBhZGRyWzB4MDU1NV0gPSAweEEwOwotICAKKwogICAqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopZGVzdCkgPSBkYXRhOwotICAKKwogICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KICAgaWYgKCBmbGFnICkKICAgICBlbmFibGVfaW50ZXJydXB0cygpOwogCiAgIC8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KICAgc3RhcnQgPSBnZXRfdGltZXIgKDApOwotICB3aGlsZSAoICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopZGVzdCkgJiAweDgwKSAhPSAoZGF0YSAmIDB4ODApICkgCisgIHdoaWxlICggKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilkZXN0KSAmIDB4ODApICE9IChkYXRhICYgMHg4MCkgKQogICAgIHsKLSAgICAgIGlmICggZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUICkgCisgICAgICBpZiAoIGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCApCiAJewogCSAgcmV0dXJuICgxKTsKIAl9CmRpZmYgLS1naXQgYS9ib2FyZC9MRU9YL2VscHQ4NjAvdS1ib290LmxkcyBiL2JvYXJkL0xFT1gvZWxwdDg2MC91LWJvb3QubGRzCmluZGV4IGNlY2IyMTAuLmQyM2FmOTYgMTAwNjQ0Ci0tLSBhL2JvYXJkL0xFT1gvZWxwdDg2MC91LWJvb3QubGRzCisrKyBiL2JvYXJkL0xFT1gvZWxwdDg2MC91LWJvb3QubGRzCkBAIC0xMjMsNiArMTIzLDEwIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTEVPWC9lbHB0ODYwL3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9MRU9YL2VscHQ4NjAvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCBiODEyMzVmLi4yNjllOGQ5IDEwMDY0NAotLS0gYS9ib2FyZC9MRU9YL2VscHQ4NjAvdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9MRU9YL2VscHQ4NjAvdS1ib290Lmxkcy5kZWJ1ZwpAQCAtMTM3LDQgKzEzNywzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvQW1pZ2FPbmVHM1NFLmMgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL0FtaWdhT25lRzNTRS5jCmluZGV4IDFkNmNhODEuLjA5MzRlMWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvQW1pZ2FPbmVHM1NFLmMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9BbWlnYU9uZUczU0UuYwpAQCAtMzAsNDcgKzMwLDQ3IEBACiAjaW5jbHVkZSAidmlhNjg2LmgiCiAKIF9fYXNtKCIgLmdsb2JsIHNlbmRfa2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgIHNlbmRfa2I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgIGxpcyAgICAgcjksIDB4ZmUwMCAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgbGkgICAgICByNCwgMHgxMCAgICAgICAgIyByZXRyaWVzICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgIG10Y3RyICAgcjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgIGlkbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgIGxieiAgICAgcjQsIDB4NjQocjkpICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgICAgICAgICBhbmRpLiAgIHI0LCByNCwgMHgwMiAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgYm5lICAgICBpZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgcmVhZHk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgc3RiICAgICByMywgMHg2MChyOSkgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgY2hlY2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgbGJ6ICAgICByNCwgMHg2NChyOSkgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgIGFuZGkuICAgcjQsIHI0LCAweDAxICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgICAgICAgICBiZXEgICAgIGNoZWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgIGxieiAgICAgcjQsIDB4NjAocjkpICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgICAgICAgICBjbXB3aSAgIHI0LCAweGZhICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgYmVxICAgICBkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgICAgICAgICBiZG56ICAgIGlkbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgIGxpICAgICAgcjMsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgICAgICAgICBibHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICBkb25lOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgICAgICAgICBsaSAgICAgIHIzLCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgYmxyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgLmdsb2JsIHRlc3Rfa2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgIHRlc3Rfa2I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgIG1mbHIgICAgcjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLQkgICAgICAgIGxpICAgICAgcjMsIDB4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgICAgICAgICBibCAgICAgIHNlbmRfa2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgbGkgICAgICByMywgMHgwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgotICAgICAgICAgICAgICAgIGJsICAgICAgc2VuZF9rYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KLSAgICAgICAgICAgICAgICBtdGxyICAgIHIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCi0gICAgICAgICAgICAgICAgYmxyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCXNlbmRfa2I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQlsaXMgICAgIHI5LCAweGZlMDAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisJCQkJCQkJICAgIFxuCisJCWxpICAgICAgcjQsIDB4MTAgICAgICAgICMgcmV0cmllcyAgICAgICAgICAgXG4KKwkJbXRjdHIgICByNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQkJCQkJCSAgICBcbgorCWlkbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQlsYnogICAgIHI0LCAweDY0KHI5KSAgICAgICAgICAgICAgICAgICAgICAgIFxuCisJCWFuZGkuICAgcjQsIHI0LCAweDAyICAgICAgICAgICAgICAgICAgICAgICAgXG4KKwkJYm5lICAgICBpZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQkJCQkJCSAgICBcbgorCXJlYWR5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQlzdGIgICAgIHIzLCAweDYwKHI5KSAgICAgICAgICAgICAgICAgICAgICAgIFxuCisJCQkJCQkJICAgIFxuCisJY2hlY2s6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisJCWxieiAgICAgcjQsIDB4NjQocjkpICAgICAgICAgICAgICAgICAgICAgICAgXG4KKwkJYW5kaS4gICByNCwgcjQsIDB4MDEgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQliZXEgICAgIGNoZWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisJCQkJCQkJICAgIFxuCisJCWxieiAgICAgcjQsIDB4NjAocjkpICAgICAgICAgICAgICAgICAgICAgICAgXG4KKwkJY21wd2kgICByNCwgMHhmYSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQliZXEgICAgIGRvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisJCQkJCQkJICAgIFxuCisJCWJkbnogICAgaWRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKwkJCQkJCQkgICAgXG4KKwkJbGkgICAgICByMywgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQlibHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisJCQkJCQkJICAgIFxuCisJZG9uZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisJCWxpICAgICAgcjMsIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKwkJYmxyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQkJCQkJCSAgICBcbgorCS5nbG9ibCB0ZXN0X2tiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCXRlc3Rfa2I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQltZmxyICAgIHIxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisJCWxpICAgICAgcjMsIDB4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKwkJYmwgICAgICBzZW5kX2tiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQlsaSAgICAgIHIzLCAweDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCisJCWJsICAgICAgc2VuZF9rYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4KKwkJbXRsciAgICByMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbgorCQlibHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuCiAiKTsKIAogCkBAIC04Niw3ICs4Niw2IEBACiB9CiAKIAotCiB2b2lkIGFmdGVyX3JlbG9jICh1bG9uZyBkZXN0X2FkZHIsIGdkX3QgKmdkKQogewogLyogSEpGOglERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvTWFrZWZpbGUgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL01ha2VmaWxlCmluZGV4IDc4NWYwMWYuLmIxMjQ3ZmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvTWFrZWZpbGUKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9NYWtlZmlsZQpAQCAtMzMsMTQgKzMzLDE0IEBACiAKIEFPQkpTCT0gYm9hcmRfYXNtX2luaXQubyBtZW1pby5vCiAKLU9CSlMJPSAkKENPQkpTKSAkKEFPQkpTKSAKK09CSlMJPSAkKENPQkpTKSAkKEFPQkpTKQogCiBFTVVESVIgID0gLi4vYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUvCiBFTVVPQkogID0gJChFTVVESVIpZGVjb2RlLm8gJChFTVVESVIpb3BzMi5vICQoRU1VRElSKWZwdS5vICQoRU1VRElSKXByaW1fb3BzLm8gXAogCQkkKEVNVURJUilvcHMubyAkKEVNVURJUilzeXMubwogRU1VU1JDID0gJChFTVVPQko6Lm89LmMpCiAKLSQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoRU1VU1JDKSAKKyQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoRU1VU1JDKQogCW1ha2UgbGlieDg2ZW11LmEgLUMgLi4vYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUgLWYgbWFrZWZpbGUudWJvb3QgQ1JPU1NfQ09NUElMRT0kKENST1NTX0NPTVBJTEUpCiAJLXJtICQoTElCKQogCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoRU1VT0JKKQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9hcnRpY2lhUy5jIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9hcnRpY2lhUy5jCmluZGV4IDVlZGRmYzYuLjlmZDZiOTUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvYXJ0aWNpYVMuYworKysgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2FydGljaWFTLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBIeXBlcmlvbiBFbnRlcnRhaW5tZW50LCBUaG9tYXNGQGh5cGVyaW9uLWVudGVydGFpbm1lbnQuY29tIAorICogSHlwZXJpb24gRW50ZXJ0YWlubWVudCwgVGhvbWFzRkBoeXBlcmlvbi1lbnRlcnRhaW5tZW50LmNvbQogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgpAQCAtNTcyLDcgKzU3Miw3IEBACiAJaWYgKGJhbmtzWzNdLnVzZWQpCiAJCWJ1cnN0X3N1cHBvcnQgPSBiYW5rc1szXS5idXJzdF9sZW47CiAKLQkvKiAKKwkvKgogCSAgICoqIE1vZGUgcmVnaXN0ZXI6CiAJICAgKiogQml0cyAgICAgICAgIFVzZQogCSAgICoqIDAtMiAgICAgICAgICBCdXJzdCBsZW4KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvYXJ0aWNpYVMuaCBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvYXJ0aWNpYVMuaAppbmRleCAxNThkNzBhLi5jZTIwZDAzIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2FydGljaWFTLmgKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9hcnRpY2lhUy5oCkBAIC05OSwxNCArOTksMTQgQEAKICNkZWZpbmUgWERCQ1JfSFdUT1hEICAgICAgICAgICgxPDwwKQogI2RlZmluZSBYREJDUl9LQlRPWEQgICAgICAgICAgKDE8PDEpCiAjZGVmaW5lIFhEQkNSX1JUQ1RPWEQgICAgICAgICAoMTw8MikKLSNkZWZpbmUgWERCQ1JfU0NBTEVfMV8xICAgICAgICgweDA8PDMpICAgICAgIAotI2RlZmluZSBYREJDUl9TQ0FMRV8yXzIgICAgICAgKDB4MTw8MykgICAgICAgCi0jZGVmaW5lIFhEQkNSX1NDQUxFXzNfMiAgICAgICAoMHgyPDwzKSAgICAgICAKLSNkZWZpbmUgWERCQ1JfU0NBTEVfNF80ICAgICAgICgweDM8PDMpICAgICAgIAotI2RlZmluZSBYREJDUl9TQ0FMRV81XzggICAgICAgKDB4NDw8MykgICAgICAgCi0jZGVmaW5lIFhEQkNSX1NDQUxFXzZfOCAgICAgICAoMHg1PDwzKSAgICAgICAKLSNkZWZpbmUgWERCQ1JfU0NBTEVfOF84ICAgICAgICgweDY8PDMpICAgICAgIAotI2RlZmluZSBYREJDUl9TQ0FMRV8wXzE2ICAgICAgKDB4Nzw8MykgICAgICAgCisjZGVmaW5lIFhEQkNSX1NDQUxFXzFfMSAgICAgICAoMHgwPDwzKQorI2RlZmluZSBYREJDUl9TQ0FMRV8yXzIgICAgICAgKDB4MTw8MykKKyNkZWZpbmUgWERCQ1JfU0NBTEVfM18yICAgICAgICgweDI8PDMpCisjZGVmaW5lIFhEQkNSX1NDQUxFXzRfNCAgICAgICAoMHgzPDwzKQorI2RlZmluZSBYREJDUl9TQ0FMRV81XzggICAgICAgKDB4NDw8MykKKyNkZWZpbmUgWERCQ1JfU0NBTEVfNl84ICAgICAgICgweDU8PDMpCisjZGVmaW5lIFhEQkNSX1NDQUxFXzhfOCAgICAgICAoMHg2PDwzKQorI2RlZmluZSBYREJDUl9TQ0FMRV8wXzE2ICAgICAgKDB4Nzw8MykKICNkZWZpbmUgWERCQ1JfWERQUk9NICAgICAgICAgICgxPDw3KQogCiAKQEAgLTEzNCw3ICsxMzQsNiBAQAogI2RlZmluZSBBUlRJQ0lBU19JU0FJT19QSFlTICAgIDB4ZmUwMDIwMDAKIAogCi0KIC8qIFByb3RvdHlwZXMgKi8KIGxvbmcgYXJ0aWNpYVNfcmFtX2luaXQodm9pZCk7CiB2b2lkIGFydGljaWFTX3BjaV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9hcnRpY2lhU19wY2kuYyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvYXJ0aWNpYVNfcGNpLmMKaW5kZXggMmE3NzYzZC4uZDJlOWYyOSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9hcnRpY2lhU19wY2kuYworKysgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2FydGljaWFTX3BjaS5jCkBAIC0xMjMsMTQgKzEyMywxNCBAQAogewogICAgIHsgMCwgMCwgMCwgMHhmZn0sICAgICAgICAvKiBBcnRpY2lhIFMgaG9zdCBicmlkZ2UgKi8KICAgICB7IDAsIDEsIDAsIDB4ZmZ9LCAgICAgICAgLyogQXJ0aWNpYSBTIEFHUCBicmlkZ2UgKi8KLS8vICAgIHsgMCwgNiwgMCwgMHgwNX0sICAgICAgICAvKiAzQ09NIGV0aGVybmV0ICovCisvKiAgICB7IDAsIDYsIDAsIDB4MDV9LCAgICAgICAgLyMjIyogM0NPTSBldGhlcm5ldCAqLwogICAgIHsgMCwgNywgMCwgMHhmZn0sICAgICAgICAvKiBWSUEgc291dGhicmlkZ2UgKi8KICAgICB7IDAsIDcsIDEsIDB4MGV9LCAgICAgICAgLyogSURFIGNvbnRyb2xsZXIgaW4gbGVnYWN5IG1vZGUgKi8KLS8vICAgIHsgMCwgNywgMiwgMHgwNX0sICAgICAgICAvKiBGaXJzdCBVU0IgY29udHJvbGxlciAqLwotLy8gICAgeyAwLCA3LCAzLCAweDBjfSwgICAgICAgIC8qIFNlY29uZCBVU0IgY29udHJvbGxlciAoc2hhcmVzIGludGVycnVwdCB3aXRoIGV0aGVybmV0KSAqLworLyogICAgeyAwLCA3LCAyLCAweDA1fSwgICAgICAgIC8jIyMqIEZpcnN0IFVTQiBjb250cm9sbGVyICovCisvKiAgICB7IDAsIDcsIDMsIDB4MGN9LCAgICAgICAgLyMjIyogU2Vjb25kIFVTQiBjb250cm9sbGVyIChzaGFyZXMgaW50ZXJydXB0IHdpdGggZXRoZXJuZXQpICovCiAgICAgeyAwLCA3LCA0LCAweGZmfSwgICAgICAgIC8qIEFDUEkgUG93ZXIgTWFuYWdlbWVudCAqLwotLy8gICAgeyAwLCA3LCA1LCAweDA4fSwgICAgICAgIC8qIEFDOTcgKi8KLS8vICAgIHsgMCwgNywgNiwgMHgwOH0sICAgICAgICAvKiBNQzk3ICovCisvKiAgICB7IDAsIDcsIDUsIDB4MDh9LCAgICAgICAgLyMjIyogQUM5NyAqLworLyogICAgeyAwLCA3LCA2LCAweDA4fSwgICAgICAgIC8jIyMqIE1DOTcgKi8KICAgICB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9CiB9OwogCkBAIC0yODcsNyArMjg3LDcgQEAKIAogICAgIFBSSU5URigiYXRyaWNpYVNfcGNpX2luaXRcbiIpOwogCi0gICAgLy8gV2h5IGFyZW4ndCB0aGVzZSByZWxvY2F0ZWQ/PworICAgIC8qIFdoeSBhcmVuJ3QgdGhlc2UgcmVsb2NhdGVkPz8gKi8KICAgICBmb3IgKGk9MDsgY29uZmlnX3RhYmxlW2ldLmNvbmZpZ19kZXZpY2U7IGkrKykKICAgICB7CiAJc3dpdGNoKChpbnQpY29uZmlnX3RhYmxlW2ldLmNvbmZpZ19kZXZpY2UpCkBAIC0zMzUsNyArMzM1LDYgQEAKIAkJICAgUENJX1JFR0lPTl9JTyk7CiAKIAotCiAgICAgYXJ0aWNpYVNfaG9zZS5yZWdpb25fY291bnQgPSA0OwogCiAgICAgcGNpX3NldHVwX2luZGlyZWN0KCZhcnRpY2lhU19ob3NlLCBBUlRJQ0lBU19QQ0lfQ0ZHQUREUiwgQVJUSUNJQVNfUENJX0NGR0RBVEEpOwpAQCAtNDEwLDggKzQwOSw4IEBACiAJICAgIHBjaV9ob3NlX3JlYWRfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCAweDBCLCAmYzEpOwogCSAgICBwY2lfaG9zZV9yZWFkX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgMHgwQSwgJmMyKTsKIAkgICAgY2xhc3MgPSBjMTw8OCB8IGMyOwotCSAgICAvL3ByaW50ZigiQXQgJTAyeDolMDJ4OiUwMng6IGNsYXNzICV4XG4iLAotCSAgICAvLwkgICBQQ0lfQlVTKGRldiksIFBDSV9ERVYoZGV2KSwgUENJX0ZVTkMoZGV2KSwgY2xhc3MpOworCSAgICAvKnByaW50ZigiQXQgJTAyeDolMDJ4OiUwMng6IGNsYXNzICV4XG4iLCAqLworCSAgICAvKgkgICBQQ0lfQlVTKGRldiksIFBDSV9ERVYoZGV2KSwgUENJX0ZVTkMoZGV2KSwgY2xhc3MpOyAqLwogCSAgICBpZiAoY2xhc3MgPT0gZmluZF9jbGFzcykKIAkgICAgewogCQlpZiAoaW5kZXggPT0gMCkKQEAgLTQ0MSw3ICs0NDAsNyBAQAogCiAgICAgaWYgKGhvc2UgPT0gTlVMTCkgaG9zZSA9ICZhcnRpY2lhU19ob3NlOwogCi0gICAgaWYgKGJ1c25yIDwgaG9zZS0+Zmlyc3RfYnVzbm8gfHwgYnVzbnIgPiBob3NlLT5sYXN0X2J1c25vKSByZXR1cm4gUENJX0FOWV9JRDsgLy8gTm90IGluIHJhbmdlCisgICAgaWYgKGJ1c25yIDwgaG9zZS0+Zmlyc3RfYnVzbm8gfHwgYnVzbnIgPiBob3NlLT5sYXN0X2J1c25vKSByZXR1cm4gUENJX0FOWV9JRDsgLyogTm90IGluIHJhbmdlICovCiAKICAgICAvKgogICAgICAqIFRoZSBicmlkZ2UgbXVzdCBiZSBvbiBhIGxvd2VyIGJ1cyBudW1iZXIKQEAgLTQ2Nyw3ICs0NjYsNyBAQAogCiAJCWlmICghUENJX0ZVTkMoZGV2KSkKIAkJICAgIGZvdW5kX211bHRpID0gaGVhZGVyX3R5cGUgJiAweDgwOwotCQlpZiAoaGVhZGVyX3R5cGUgPT0gMSkgLy8gQnJpZGdlIGRldmljZSBoZWFkZXIKKwkJaWYgKGhlYWRlcl90eXBlID09IDEpIC8qIEJyaWRnZSBkZXZpY2UgaGVhZGVyICovCiAJCXsKIAkJICAgIHBjaV9ob3NlX3JlYWRfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfU0VDT05EQVJZX0JVUywgJnNlY29uZGFyeV9idXMpOwogCQkgICAgaWYgKChpbnQpc2Vjb25kYXJ5X2J1cyA9PSBidXNucikgcmV0dXJuIGRldjsKQEAgLTUxMiw3ICs1MTEsNyBAQAogCVBSSU5URigiU2VhcmNoaW5nIGZvciBjbGFzcyAweCV4IG9uIGJ1cyAlZFxuIiwgY2xhc3Nlc1tjbGFzc25yXSwgYnVzbnIpOwogCS8qIEZpbmQgdGhlIGZpcnN0IG9mIHRoaXMgY2xhc3Mgb24gdGhpcyBidXMgKi8KIAlkZXYgPSBwY2lfaG9zZV9maW5kX2NsYXNzKCZhcnRpY2lhU19ob3NlLCBidXNuciwgY2xhc3Nlc1tjbGFzc25yXSwgMCk7Ci0JaWYgKGRldiAhPSB+MCkgCisJaWYgKGRldiAhPSB+MCkKIAl7CiAJICAgIFBSSU5URigiRm91bmQgVkdBIENhcmQgYXQgJTAyeDolMDJ4OiUwMnhcbiIsIFBDSV9CVVMoZGV2KSwgUENJX0RFVihkZXYpLCBQQ0lfRlVOQyhkZXYpKTsKIAkgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2JvYXJkX2FzbV9pbml0LlMgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2JvYXJkX2FzbV9pbml0LlMKaW5kZXggYTQyMWM1ZC4uMDg2YjE5YyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9ib2FyZF9hc21faW5pdC5TCisrKyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvYm9hcmRfYXNtX2luaXQuUwpAQCAtMSwxNCArMSwxMyBAQAotCSNpbmNsdWRlCSJtYWNyb3MuaCIKLQkKLQkKKyNpbmNsdWRlCSJtYWNyb3MuaCIKIAotI2RlZmluZSBHTE9CQUxJTkZPMAkgICAgICAweDUwCQorCisjZGVmaW5lIEdMT0JBTElORk8wCSAgICAgIDB4NTAKICNkZWZpbmUgR0xPQkFMSU5GTzBfQk8gICAgICAgICgxPDw3KQogI2RlZmluZSBHTE9CQUxJTkZPMl9CMUFSQklURVIgKDE8PDYpCiAjZGVmaW5lIEhCVVNBQ1IwICAgICAgICAgICAgICAweDVjCiAjZGVmaW5lIEhCVVNBQ1IyX0JVUlNUICAgICAgICAoMTw8MCkKICNkZWZpbmUgSEJVU0FDUjJfTEFUICAgICAgICAgICgxPDwxKQotCQorCiAjZGVmaW5lIFJFQ0VJVkVSX0hPTERJTkcgMAogI2RlZmluZSBUUkFOU01JVFRFUl9IT0xESU5HIDAKICNkZWZpbmUgSU5URVJSVVBUX0VOQUJMRSAxCkBAIC0zNSw5ICszNCw5IEBACiAKICNkZWZpbmUgU1VQRVJJT18xICAgICAgICAgICAgICAgKCg3IDw8IDMpIHwgKDApKQogI2RlZmluZSBTVVBFUklPXzIgICAgICAgICAgICAgICAoKDcgPDwgMykgfCAoMSkpCi0JCisKIAkuZ2xvYmwJYm9hcmRfYXNtX2luaXQKLQkKKwogYm9hcmRfYXNtX2luaXQ6CiAJbWZscglyMjkKIAkvKiBTZXQgJ011c3Qtc2V0JyByZWdpc3RlciAqLwpAQCAtNzcsNyArNzYsNyBAQAogCWxpCXI1LCAweDQ3CiAJYmwJcGNpX3dyaXRlX2NmZ19ieXRlKi8KIAotCQorCiAJLyogRW5hYmxlIE5WUkFNIGZvciBlbnZpcm9ubWVudCAqLwogCWxpCXIzLCAwCiAJbGkJcjQsIDAKQEAgLTkxLDcgKzkwLDcgQEAKIAlzaW93YgkweDQwLCAweDA4CiAJc2lvd2IJMHg0MSwgMHgwMQogCXNpb3diCTB4NDUsIDB4ODAKLQlzaW93YgkweDQ2LCAweDYwCQorCXNpb3diCTB4NDYsIDB4NjAKIAlzaW93YgkweDQ3LCAweDIwCiAJc2lvd2IJMHg0OCwgMHgwMQogCXNpb3diCTB4NGEsIDB4YzQKQEAgLTEwMyw3ICsxMDIsNyBAQAogCXNpb3diCTB4NTYsIDB4OTkKIAlzaW93YgkweDU3LCAweDkwCiAJc2lvd2IJMHg4NSwgMHgwMQotCQkKKwogCS8qIEVuYWJsZSBjb25maWd1cmF0aW9uIG1vZGUgZm9yIFN1cGVySU8gKi8KIAlsaQlyMywgMAogCWxpCXI0LCAoNzw8MykKQEAgLTEyOCw3ICsxMjcsNyBAQAogCW9yaQlyMywgcjMsIDB4MGMKIAlvdXRiCTB4M2YwLCAweGUyCiAJb3V0YnIJMHgzZjEsIHIzCi0JCisKIAkvKiBEaXNhYmxlIGNvbmZpZ3VyYXRpb24gbW9kZSAqLwogCWxpCXIzLCAwCiAJbGkJcjQsICg3PDwzKQpAQCAtMTQ1LDcgKzE0NCw3IEBACiAJbXRscglyMjkKIAlibHIKIAotCQkKKwogCS5nbG9ibAluZXdfcmVzZXQKIAkuZ2xvYmwJbmV3X3Jlc2V0X2VuZAogbmV3X3Jlc2V0OgpAQCAtMTUzLDUgKzE1Miw1IEBACiAJb3JpcwlyMCwgcjAsIDB4RkZGMAogCW10bHIJcjAKIAlibHIKLQkKLW5ld19yZXNldF9lbmQ6CQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworbmV3X3Jlc2V0X2VuZDoKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvY21kX2Jvb3RhLmMgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2NtZF9ib290YS5jCmluZGV4IDE0MGFhZmYuLmRiMWVjZmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvY21kX2Jvb3RhLmMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9jbWRfYm9vdGEuYwpAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3RhLmg+CiAjaW5jbHVkZSAiLi4vZGlzay9wYXJ0X2FtaWdhLmgiCiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAKQEAgLTEyMSwzICsxMjAsMTAgQEAKIAogCXJldHVybiAwOwogfQorI2lmIGRlZmluZWQoQ09ORklHX0FNSUdBT05FRzNTRSkgJiYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQlNQKQorY21kX3RibF90IFVfQk9PVF9DTUQoQk9PVEEpID0gTUtfQ01EX0VOVFJZKAorCSJib290YSIsICAgMywgICAgICAxLCAgICAgIGRvX2Jvb3RhLAorCSJib290YSAgIC0gYm9vdCBhbiBBbWlnYSBrZXJuZWxcbiIsCisJImFkZHJlc3MgZGlzayIKKyk7CisjZW5kaWYgLyogX0NNRF9CT09UQV9IICovCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2NvbmZpZy5tayBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvY29uZmlnLm1rCmluZGV4IGQ3ZDBlNmIuLjkzMGE3OTMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvY29uZmlnLm1rCisrKyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvY29uZmlnLm1rCkBAIC0yOSw1ICsyOSw0IEBACiAKIFRFWFRfQkFTRSA9IDB4ZmZmMDAwMDAKIAotUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURURVhUX0JBU0U9JChURVhUX0JBU0UpIC1XYSwtbXJlZ25hbWVzIC1ERUFTVEVSRUdHICQoWDg2RU1VKSAtRHByaW50az1wcmludGYgIy1EREVCVUcgCi0KK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EVEVYVF9CQVNFPSQoVEVYVF9CQVNFKSAtV2EsLW1yZWduYW1lcyAtREVBU1RFUkVHRyAkKFg4NkVNVSkgLURwcmludGs9cHJpbnRmICMtRERFQlVHCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2VuZXQuYyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvZW5ldC5jCmluZGV4IDBhYWE4YmYuLmQ0YmU4ODkgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvZW5ldC5jCisrKyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvZW5ldC5jCkBAIC0zNiw0NSArMzYsNDUgQEAKIAogLyogM0NvbSBFdGhlcm5ldCBQQ0kgZGVmaW5pdGlvbnMqLwogCi0vLyAjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0NPTQkJMHgxMEI3CisvKiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0NPTQkJMHgxMEI3ICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzkwNUMJMHg5MjAwCiAKIC8qIDNDb20gQ29tbWFuZHMsIHRvcCA1IGJpdHMgYXJlIGNvbW1hbmQgYW5kIGJvdHRvbSAxMSBiaXRzIGFyZSBwYXJhbWV0ZXJzICovCiAKLSNkZWZpbmUgVG90YWxSZXNldCAJCSgwPDwxMSkgCisjZGVmaW5lIFRvdGFsUmVzZXQgCQkoMDw8MTEpCiAjZGVmaW5lIFNlbGVjdFdpbmRvdyAJCSgxPDwxMSkKICNkZWZpbmUgU3RhcnRDb2F4IAkJKDI8PDExKQotI2RlZmluZSBSeERpc2FibGUgCQkoMzw8MTEpIAotI2RlZmluZSBSeEVuYWJsZSAJCSg0PDwxMSkgCisjZGVmaW5lIFJ4RGlzYWJsZSAJCSgzPDwxMSkKKyNkZWZpbmUgUnhFbmFibGUgCQkoNDw8MTEpCiAjZGVmaW5lIFJ4UmVzZXQgCQkoNTw8MTEpCi0jZGVmaW5lIFVwU3RhbGwgCQkoNjw8MTEpIAorI2RlZmluZSBVcFN0YWxsIAkJKDY8PDExKQogI2RlZmluZSBVcFVuc3RhbGwgCQkoNjw8MTEpKzEKLSNkZWZpbmUgRG93blN0YWxsIAkJKDY8PDExKSsyIAorI2RlZmluZSBEb3duU3RhbGwgCQkoNjw8MTEpKzIKICNkZWZpbmUgRG93blVuc3RhbGwgCQkoNjw8MTEpKzMKICNkZWZpbmUgUnhEaXNjYXJkIAkJKDg8PDExKQogI2RlZmluZSBUeEVuYWJsZSAJCSg5PDwxMSkKLSNkZWZpbmUgVHhEaXNhYmxlIAkJKDEwPDwxMSkgCisjZGVmaW5lIFR4RGlzYWJsZSAJCSgxMDw8MTEpCiAjZGVmaW5lIFR4UmVzZXQgCQkoMTE8PDExKQotI2RlZmluZSBGYWtlSW50ciAJCSgxMjw8MTEpIAotI2RlZmluZSBBY2tJbnRyIAkJKDEzPDwxMSkgCisjZGVmaW5lIEZha2VJbnRyIAkJKDEyPDwxMSkKKyNkZWZpbmUgQWNrSW50ciAJCSgxMzw8MTEpCiAjZGVmaW5lIFNldEludHJFbmIgCQkoMTQ8PDExKQotI2RlZmluZSBTZXRTdGF0dXNFbmIgCQkoMTU8PDExKSAKKyNkZWZpbmUgU2V0U3RhdHVzRW5iIAkJKDE1PDwxMSkKICNkZWZpbmUgU2V0UnhGaWx0ZXIgCQkoMTY8PDExKQogI2RlZmluZSBTZXRSeFRocmVzaG9sZCAJCSgxNzw8MTEpCi0jZGVmaW5lIFNldFR4VGhyZXNob2xkIAkJKDE4PDwxMSkgCisjZGVmaW5lIFNldFR4VGhyZXNob2xkIAkJKDE4PDwxMSkKICNkZWZpbmUgU2V0VHhTdGFydCAJCSgxOTw8MTEpCiAjZGVmaW5lIFN0YXJ0RE1BVXAgCQkoMjA8PDExKQogI2RlZmluZSBTdGFydERNQURvd24gCQkoMjA8PDExKSsxCiAjZGVmaW5lIFN0YXRzRW5hYmxlCQkoMjE8PDExKQotI2RlZmluZSBTdGF0c0Rpc2FibGUJCSgyMjw8MTEpIAorI2RlZmluZSBTdGF0c0Rpc2FibGUJCSgyMjw8MTEpCiAjZGVmaW5lIFN0b3BDb2F4IAkJKDIzPDwxMSkKICNkZWZpbmUgU2V0RmlsdGVyQml0IAkJKDI1PDwxMSkKIAogLyogVGhlIFNldFJ4RmlsdGVyIGNvbW1hbmQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGNsYXNzZXMgKi8KIAotI2RlZmluZSBSeFN0YXRpb24gCQkxIAotI2RlZmluZSBSeE11bHRpY2FzdAkJMiAKLSNkZWZpbmUgUnhCcm9hZGNhc3QJCTQgCisjZGVmaW5lIFJ4U3RhdGlvbiAJCTEKKyNkZWZpbmUgUnhNdWx0aWNhc3QJCTIKKyNkZWZpbmUgUnhCcm9hZGNhc3QJCTQKICNkZWZpbmUgUnhQcm9tIAkJCTgKIAogLyogM0NvbSBzdGF0dXMgd29yZCBkZWZuaXRpb25zICovCkBAIC04MywxMiArODMsMTIgQEAKICNkZWZpbmUgSG9zdEVycm9yIAkJMHgwMDAyCiAjZGVmaW5lIFR4Q29tcGxldGUgCQkweDAwMDQKICNkZWZpbmUgVHhBdmFpbGFibGUgCQkweDAwMDgKLSNkZWZpbmUgUnhDb21wbGV0ZSAJCTB4MDAxMCAKKyNkZWZpbmUgUnhDb21wbGV0ZSAJCTB4MDAxMAogI2RlZmluZSBSeEVhcmx5IAkJMHgwMDIwCiAjZGVmaW5lIEludFJlcSAJCQkweDAwNDAKICNkZWZpbmUgU3RhdHNGdWxsIAkJMHgwMDgwCiAjZGVmaW5lIERNQURvbmUgCQkoMTw8OCkKLSNkZWZpbmUgRG93bkNvbXBsZXRlIAkJKDE8PDkpIAorI2RlZmluZSBEb3duQ29tcGxldGUgCQkoMTw8OSkKICNkZWZpbmUgVXBDb21wbGV0ZSAJCSgxPDwxMCkKICNkZWZpbmUgRE1BSW5Qcm9ncmVzcyAJCSgxPDwxMSkJCQkvKiBETUEgY29udHJvbGxlciBpcyBzdGlsbCBidXN5LiovCiAjZGVmaW5lIENtZEluUHJvZ3Jlc3MgCQkoMTw8MTIpICAgICAgICAgICAJLyogRUwzX0NNRCBpcyBzdGlsbCBidXN5LiovCkBAIC0xMTQsMzEgKzExNCwzMSBAQAogCiAvKiBFRVBST00gbG9jYXRpb25zLiAqLwogCi0jZGVmaW5lIFBoeXNBZGRyMDEJCTAgCisjZGVmaW5lIFBoeXNBZGRyMDEJCTAKICNkZWZpbmUgUGh5c0FkZHIyMwkJMQotI2RlZmluZSBQaHlzQWRkcjQ1CQkyIAorI2RlZmluZSBQaHlzQWRkcjQ1CQkyCiAjZGVmaW5lIE1vZGVsSUQJCQkzCi0jZGVmaW5lIEV0aGVyTGluazNJRAkJNyAKLSNkZWZpbmUgSUZYY3ZySU8JCTggCisjZGVmaW5lIEV0aGVyTGluazNJRAkJNworI2RlZmluZSBJRlhjdnJJTwkJOAogI2RlZmluZSBJUlFMaW5lCQkJOQotI2RlZmluZSBOb2RlQWRkcjAxCQkxMCAKLSNkZWZpbmUgTm9kZUFkZHIyMwkJMTEgCisjZGVmaW5lIE5vZGVBZGRyMDEJCTEwCisjZGVmaW5lIE5vZGVBZGRyMjMJCTExCiAjZGVmaW5lIE5vZGVBZGRyNDUJCTEyCi0jZGVmaW5lIERyaXZlclR1bmUJCTEzIAorI2RlZmluZSBEcml2ZXJUdW5lCQkxMwogI2RlZmluZSBDaGVja3N1bQkJMTUKIAogLyogUmVnaXN0ZXIgd2luZG93IDEgb2Zmc2V0cywgdGhlIHdpbmRvdyB1c2VkIGluIG5vcm1hbCBvcGVyYXRpb24gKi8KIAotI2RlZmluZSBUWF9GSUZPIAkJMHgxMCAgCi0jZGVmaW5lIFJYX0ZJRk8gCQkweDEwICAKKyNkZWZpbmUgVFhfRklGTyAJCTB4MTAKKyNkZWZpbmUgUlhfRklGTyAJCTB4MTAKICNkZWZpbmUgUnhFcnJvcnMgCQkweDE0Ci0jZGVmaW5lIFJ4U3RhdHVzIAkJMHgxOCAgCi0jZGVmaW5lIFRpbWVyCQkJMHgxQSAKKyNkZWZpbmUgUnhTdGF0dXMgCQkweDE4CisjZGVmaW5lIFRpbWVyCQkJMHgxQQogI2RlZmluZSBUeFN0YXR1cyAJCTB4MUIKICNkZWZpbmUgVHhGcmVlIAkJCTB4MUMJIAkJLyogUmVtYWluaW5nIGZyZWUgYnl0ZXMgaW4gVHggYnVmZmVyLiAqLwogCiAvKiBSZWdpc3RlciBXaW5kb3cgMiAqLwotICAgICAgICAKKwogI2RlZmluZSBXbjJfUmVzZXRPcHRpb25zCTEyCiAKIC8qIFJlZ2lzdGVyIFdpbmRvdyAzOiBNQUMvY29uZmlnIGJpdHMgKi8KQEAgLTE0OCwxMSArMTQ4LDExIEBACiAjZGVmaW5lIFduM19PcHRpb25zCQk4CiAKICNkZWZpbmUgQkZFWFQodmFsdWUsIG9mZnNldCwgYml0Y291bnQpICAJCQkJCVwKLSAgICAJKCgoKHVuc2lnbmVkIGxvbmcpKHZhbHVlKSkgPj4gKG9mZnNldCkpICYgKCgxIDw8IChiaXRjb3VudCkpIC0gMSkpCisJKCgoKHVuc2lnbmVkIGxvbmcpKHZhbHVlKSkgPj4gKG9mZnNldCkpICYgKCgxIDw8IChiaXRjb3VudCkpIC0gMSkpCiAKICNkZWZpbmUgQkZJTlMobGhzLCByaHMsIG9mZnNldCwgYml0Y291bnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoKChsaHMpICYgfigoKCgxIDw8IChiaXRjb3VudCkpIC0gMSkpIDw8IChvZmZzZXQpKSkgfCAgIAkJXAotICAgICAgICAoKChyaHMpICYgKCgxIDw8IChiaXRjb3VudCkpIC0gMSkpIDw8IChvZmZzZXQpKSkKKwkoKChsaHMpICYgfigoKCgxIDw8IChiaXRjb3VudCkpIC0gMSkpIDw8IChvZmZzZXQpKSkgfCAgIAkJXAorCSgoKHJocykgJiAoKDEgPDwgKGJpdGNvdW50KSkgLSAxKSkgPDwgKG9mZnNldCkpKQogCiAjZGVmaW5lIFJBTV9TSVpFKHYpICAgICAgICAgICAgIEJGRVhUKHYsIDAsIDMpCiAjZGVmaW5lIFJBTV9XSURUSCh2KSAgICAJQkZFWFQodiwgMywgMSkKQEAgLTE2Myw3ICsxNjMsNyBAQAogI2RlZmluZSBBVVRPU0VMRUNUKHYpICAgCUJGRVhUKHYsIDI0LCAxKQogCiAvKiBSZWdpc3RlciBXaW5kb3cgNDogWGN2ci9tZWRpYSBiaXRzICovCi0gICAgICAgIAorCiAjZGVmaW5lIFduNF9GSUZPRGlhZyAJCTQKICNkZWZpbmUgV240X05ldERpYWcgCQk2CiAjZGVmaW5lIFduNF9QaHlzaWNhbE1nbXQJOApAQCAtMTk2LDI4ICsxOTYsMjggQEAKICNkZWZpbmUgRE5fQ09NUExFVEUgICAgIDB4MDAwMTAwMDAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBwYWNrZXQgaGFzIGJlZW4gZG93bmxvYWRlZCAqLwogCiBzdHJ1Y3QgcnhfZGVzY18zY29tIHsKLSAgICAgICAgdTMyIG5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGFzdCBlbnRyeSBwb2ludHMgdG8gMAkgICAJKi8KLSAgICAgICAgdTMyIHN0YXR1czsJCQkJCS8qIEZTSCAtPiBGcmFtZSBTdGFydCBIZWFkZXIgCQkqLwotICAgICAgICB1MzIgYWRkcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVcCB0byA2MyBhZGRyL2xlbiBwYWlycyBwb3NzaWJsZSAJKi8KLSAgICAgICAgdTMyIGxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IExBU1RfRlJBRyB0byBpbmRpY2F0ZSBsYXN0IHBhaXIJKi8KKwl1MzIgbmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMYXN0IGVudHJ5IHBvaW50cyB0byAwCSAgIAkqLworCXUzMiBzdGF0dXM7CQkJCQkvKiBGU0ggLT4gRnJhbWUgU3RhcnQgSGVhZGVyIAkJKi8KKwl1MzIgYWRkcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVcCB0byA2MyBhZGRyL2xlbiBwYWlycyBwb3NzaWJsZSAJKi8KKwl1MzIgbGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgTEFTVF9GUkFHIHRvIGluZGljYXRlIGxhc3QgcGFpcgkqLwogfTsKIAogLyogVmFsdWVzIGZvciB0aGUgUnggc3RhdHVzIGVudHJ5LiAqLwogCiAjZGVmaW5lIFJ4RENvbXBsZXRlCQkweDAwMDA4MDAwCiAjZGVmaW5lIFJ4REVycm9yCQkweDQwMDAKLSNkZWZpbmUgSVBDaGtzdW1FcnIJCSgxPDwyNSkgCi0jZGVmaW5lIFRDUENoa3N1bUVycgkJKDE8PDI2KSAKKyNkZWZpbmUgSVBDaGtzdW1FcnIJCSgxPDwyNSkKKyNkZWZpbmUgVENQQ2hrc3VtRXJyCQkoMTw8MjYpCiAjZGVmaW5lIFVEUENoa3N1bUVycgkJKDE8PDI3KQotI2RlZmluZSBJUENoa3N1bVZhbGlkCQkoMTw8MjkpIAorI2RlZmluZSBJUENoa3N1bVZhbGlkCQkoMTw8MjkpCiAjZGVmaW5lIFRDUENoa3N1bVZhbGlkCQkoMTw8MzApCiAjZGVmaW5lIFVEUENoa3N1bVZhbGlkCQkoMTw8MzEpCiAKIHN0cnVjdCB0eF9kZXNjXzNjb20gewotICAgICAgICB1MzIgbmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMYXN0IGVudHJ5IHBvaW50cyB0byAwCQkqLwotICAgICAgICB1MzIgc3RhdHVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiaXRzIDA6MTIgbGVuZ3RoLCBvdGhlcnMgc2VlIGJlbG93CSovCi0gICAgICAgIHUzMiBhZGRyOwotICAgICAgICB1MzIgbGVuZ3RoOworCXUzMiBuZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExhc3QgZW50cnkgcG9pbnRzIHRvIDAJCSovCisJdTMyIHN0YXR1czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYml0cyAwOjEyIGxlbmd0aCwgb3RoZXJzIHNlZSBiZWxvdwkqLworCXUzMiBhZGRyOworCXUzMiBsZW5ndGg7CiB9OwogCiAvKiBWYWx1ZXMgZm9yIHRoZSBUeCBzdGF0dXMgZW50cnkuICovCkBAIC0yMzIsOSArMjMyLDkgQEAKIC8qIFhDVlIgVHlwZXMgKi8KIAogI2RlZmluZSBYQ1ZSXzEwYmFzZVQJCTAKLSNkZWZpbmUgWENWUl9BVUkJCTEgCisjZGVmaW5lIFhDVlJfQVVJCQkxCiAjZGVmaW5lIFhDVlJfMTBiYXNlVE9ubHkJMgotI2RlZmluZSBYQ1ZSXzEwYmFzZTIJCTMgCisjZGVmaW5lIFhDVlJfMTBiYXNlMgkJMwogI2RlZmluZSBYQ1ZSXzEwMGJhc2VUeAkJNAogI2RlZmluZSBYQ1ZSXzEwMGJhc2VGeAkJNQogI2RlZmluZSBYQ1ZSX01JSQkJNgpAQCAtMjQzLDEwICsyNDMsMTAgQEAKICNkZWZpbmUgWENWUl9EZWZhdWx0CQkxMAkJCS8qIEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyBjb3JyZWN0IC0+IHNob3VsZCBoYXZlIGJlZW4gMHgxMCBpZiBBdXRvIE5lZ290aWF0ZSAqLwogCiBzdHJ1Y3QgZGVzY3JpcHRvciB7CQkJICAgIAkJLyogQSBnZW5lcmljIGRlc2NyaXB0b3IuICovCi0gICAgICAgIHUzMiBuZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExhc3QgZW50cnkgcG9pbnRzIHRvIDAJICAgCSovCi0gICAgICAgIHUzMiBzdGF0dXM7CQkJCQkvKiBGU0ggLT4gRnJhbWUgU3RhcnQgSGVhZGVyIAkJKi8KLSAgICAgICAgdTMyIGFkZHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXAgdG8gNjMgYWRkci9sZW4gcGFpcnMgcG9zc2libGUgCSovCi0gICAgICAgIHUzMiBsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBMQVNUX0ZSQUcgdG8gaW5kaWNhdGUgbGFzdCBwYWlyCSovCisJdTMyIG5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTGFzdCBlbnRyeSBwb2ludHMgdG8gMAkgICAJKi8KKwl1MzIgc3RhdHVzOwkJCQkJLyogRlNIIC0+IEZyYW1lIFN0YXJ0IEhlYWRlciAJCSovCisJdTMyIGFkZHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVXAgdG8gNjMgYWRkci9sZW4gcGFpcnMgcG9zc2libGUgCSovCisJdTMyIGxlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IExBU1RfRlJBRyB0byBpbmRpY2F0ZSBsYXN0IHBhaXIJKi8KIH07CiAKIC8qIE1pc2MuIGRlZmluaXRpb25zICovCkBAIC0zMzgsNyArMzM4LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIEVUSF9DTUQoc3RydWN0IGV0aF9kZXZpY2UqIGRldiwgaW50IGNvbW1hbmQpCiB7Ci0JKih2b2xhdGlsZSB1MTYgKilpb190b19waHlzKEVMM19DTUQgKyBkZXYtPmlvYmFzZSkgPSBjcHVfdG9fbGUxNihjb21tYW5kKTsgCisJKih2b2xhdGlsZSB1MTYgKilpb190b19waHlzKEVMM19DTUQgKyBkZXYtPmlvYmFzZSkgPSBjcHVfdG9fbGUxNihjb21tYW5kKTsKICAgICBfX2FzbSB2b2xhdGlsZSAoImVpZWlvIik7CiB9CiAKQEAgLTM0OCwyNCArMzQ4LDI0IEBACiBzdGF0aWMgaW50IGlzc3VlX2FuZF93YWl0KHN0cnVjdCBldGhfZGV2aWNlKiBkZXYsIGludCBjb21tYW5kKQogewogCi0gICAgICAgIGludCBpLCBzdGF0dXM7CisJaW50IGksIHN0YXR1czsKIAogCUVUSF9DTUQoZGV2LCBjb21tYW5kKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDIwMDA7IGkrKykgewotICAgICAgICAgICAgICAgIHN0YXR1cyA9IEVUSF9TVEFUVVMoZGV2KTsKLQkJLy9wcmludGYgKCJJc3N1ZTogc3RhdHVzIDB4JTR4LlxuIiwgc3RhdHVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7CisJCXN0YXR1cyA9IEVUSF9TVEFUVVMoZGV2KTsKKwkJLypwcmludGYgKCJJc3N1ZTogc3RhdHVzIDB4JTR4LlxuIiwgc3RhdHVzKTsgKi8KIAkJaWYgKCEoc3RhdHVzICYgQ21kSW5Qcm9ncmVzcykpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQorCQkJcmV0dXJuIDE7CisJfQogCi0gICAgICAgIC8qIE9LLCB0aGF0IGRpZG4ndCB3b3JrLiAgRG8gaXQgdGhlIHNsb3cgd2F5LiAgT25lIHNlY29uZCAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBFVEhfU1RBVFVTKGRldik7Ci0JCS8vcHJpbnRmICgiSXNzdWU6IHN0YXR1cyAweCU0eC5cbiIsIHN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB1ZGVsYXkoMTApOwotICAgICAgICB9Ci0gICAgICAgIFBSSU5URigiRXRoZXJuZXQgY29tbWFuZDogMHglNHggZGlkIG5vdCBjb21wbGV0ZSEgU3RhdHVzOiAweCU0eFxuIiwgY29tbWFuZCwgRVRIX1NUQVRVUyhkZXYpICk7CisJLyogT0ssIHRoYXQgZGlkbid0IHdvcmsuICBEbyBpdCB0aGUgc2xvdyB3YXkuICBPbmUgc2Vjb25kICovCisJZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisJCXN0YXR1cyA9IEVUSF9TVEFUVVMoZGV2KTsKKwkJLypwcmludGYgKCJJc3N1ZTogc3RhdHVzIDB4JTR4LlxuIiwgc3RhdHVzKTsgKi8KKwkJCXJldHVybiAxOworCQl1ZGVsYXkoMTApOworCX0KKwlQUklOVEYoIkV0aGVybmV0IGNvbW1hbmQ6IDB4JTR4IGRpZCBub3QgY29tcGxldGUhIFN0YXR1czogMHglNHhcbiIsIGNvbW1hbmQsIEVUSF9TVEFUVVMoZGV2KSApOwogCXJldHVybiAwOwogfQogCkBAIC0zNzgsNyArMzc4LDcgQEAKIAogICAgIEVMM1dJTkRPVyhkZXYsIDEpOwogCi0gICAgLy8gV2FpdCBmb3IgQXV0byBuZWdvdGlhdGlvbiB0byBjb21wbGV0ZQorICAgIC8qIFdhaXQgZm9yIEF1dG8gbmVnb3RpYXRpb24gdG8gY29tcGxldGUgKi8KICAgICBmb3IgKGkgPSAwOyBpIDw9IDEwMDA7IGkrKykKICAgICB7CiAJaWYgKEVUSF9JTlcoZGV2LCAyKSAmIDB4MDQpCkBAIC0zOTEsNyArMzkxLDYgQEAKIAkgICAgcmV0dXJuIDA7CiAJfQogICAgIH0KLSAgICAKIAogCiAgICAgcmV0dXJuIDE7CkBAIC00MzAsMTAgKzQyOSwxMCBAQAogCiBpbnQgZXRoXzNjb21faW5pdGlhbGl6ZShiZF90ICpiaXMpCiB7Ci0gICAgICAgIHUzMiBldGhfaW9iYXNlID0gMCwgc3RhdHVzOwotICAgICAgICBpbnQgY2FyZF9udW1iZXIgPSAwLCByZXQ7Ci0gICAgICAgIHN0cnVjdCBldGhfZGV2aWNlKiBkZXY7Ci0gICAgICAgIHBjaV9kZXZfdCBkZXZubzsKKwl1MzIgZXRoX2lvYmFzZSA9IDAsIHN0YXR1czsKKwlpbnQgY2FyZF9udW1iZXIgPSAwLCByZXQ7CisJc3RydWN0IGV0aF9kZXZpY2UqIGRldjsKKwlwY2lfZGV2X3QgZGV2bm87CiAJY2hhciAqczsKIAogCXMgPSBnZXRlbnYoIjNjb21fYmFzZSIpOwpAQCAtNDUzLDEwICs0NTIsMTAgQEAKIAl9CiAKIAlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2bm8sIFBDSV9CQVNFX0FERFJFU1NfMCwgJmV0aF9pb2Jhc2UpOwotICAgICAgICBldGhfaW9iYXNlICY9IH4weGY7CisJZXRoX2lvYmFzZSAmPSB+MHhmOwogCiAJUFJJTlRGKCJldGg6IDNDb20gRm91bmQgYXQgQWRkcmVzczogMHgleFxuIiwgZXRoX2lvYmFzZSk7Ci0gIAorCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZubywgUENJX0NPTU1BTkQsIFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSKTsKIAogCSAvKiBDaGVjayBpZiBJL08gYWNjZXNzZXMgYW5kIEJ1cyBNYXN0ZXJpbmcgYXJlIGVuYWJsZWQgKi8KQEAgLTQ4MSwyOCArNDgwLDI4IEBACiAJCWdvdG8gRG9uZTsKIAl9CiAKLSAgICAgICAgZGV2ID0gKHN0cnVjdCBldGhfZGV2aWNlKikgbWFsbG9jKHNpemVvZigqZGV2KSk7IC8vc3RydWN0IGV0aF9kZXZpY2UpKTsKKwlkZXYgPSAoc3RydWN0IGV0aF9kZXZpY2UqKSBtYWxsb2Moc2l6ZW9mKCpkZXYpKTsgLypzdHJ1Y3QgZXRoX2RldmljZSkpOyAqLwogCi0gICAgICAgIHNwcmludGYoZGV2LT5uYW1lLCAiM0NvbSAzYzkyMGMjJWQiLCBjYXJkX251bWJlcik7Ci0gICAgICAgIGRldi0+aW9iYXNlID0gZXRoX2lvYmFzZTsKLSAgICAgICAgZGV2LT5wcml2ICAgPSAodm9pZCopIGRldm5vOwotICAgICAgICBkZXYtPmluaXQgICA9IGV0aF8zY29tX2luaXQ7Ci0gICAgICAgIGRldi0+aGFsdCAgID0gZXRoXzNjb21faGFsdDsKLSAgICAgICAgZGV2LT5zZW5kICAgPSBldGhfM2NvbV9zZW5kOwotICAgICAgICBkZXYtPnJlY3YgICA9IGV0aF8zY29tX3JlY3Y7CisJc3ByaW50ZihkZXYtPm5hbWUsICIzQ29tIDNjOTIwYyMlZCIsIGNhcmRfbnVtYmVyKTsKKwlkZXYtPmlvYmFzZSA9IGV0aF9pb2Jhc2U7CisJZGV2LT5wcml2ICAgPSAodm9pZCopIGRldm5vOworCWRldi0+aW5pdCAgID0gZXRoXzNjb21faW5pdDsKKwlkZXYtPmhhbHQgICA9IGV0aF8zY29tX2hhbHQ7CisJZGV2LT5zZW5kICAgPSBldGhfM2NvbV9zZW5kOworCWRldi0+cmVjdiAgID0gZXRoXzNjb21fcmVjdjsKIAotICAgICAgICBldGhfcmVnaXN0ZXIoZGV2KTsKKwlldGhfcmVnaXN0ZXIoZGV2KTsKIAogLyogCXsgKi8KIC8qIAkgICAgY2hhciBpbnRlcnJ1cHQ7ICovCiAvKiAJICAgIGRldm5vID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfM0NPTSwgUENJX0RFVklDRV9JRF8zQ09NXzNDOTA1QywgMCk7ICovCiAvKiAJICAgIHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldm5vLCBQQ0lfSU5URVJSVVBUX0xJTkUsICZpbnRlcnJ1cHQpOyAqLwotCSAgICAKKwogLyogCSAgICBwcmludGYoIkluc3RhbGxpbmcgZXRoMCBpbnRlcnJ1cHQgaGFuZGxlciB0byAlZFxuIiwgaW50ZXJydXB0KTsgKi8KIC8qIAkgICAgaXJxX2luc3RhbGxfaGFuZGxlcihpbnRlcnJ1cHQsIGV0aF9pbnRlcnJ1cHQsIGRldik7ICovCiAvKiAJfSAqLwogCi0gICAgICAgIGNhcmRfbnVtYmVyKys7CisJY2FyZF9udW1iZXIrKzsKIAogCS8qIFNldCB0aGUgbGF0ZW5jeSB0aW1lciBmb3IgdmFsdWUgKi8KIAlzID0gZ2V0ZW52KCIzY29tX2xhdGVuY3kiKTsKQEAgLTUzMiwxMyArNTMxLDEzIEBACiAJCVBSSU5URiAoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIFJYX1JJTkcuLi4uLlxuIik7CiAJCWdvdG8gRG9uZTsKIAl9Ci0JCisKIAlpZiAoISh0eF9yaW5nID0gbWVtYWxpZ24oc2l6ZW9mKHN0cnVjdCB0eF9kZXNjXzNjb20pICogTlVNX1RYX0RFU0MsIDE2KSkpCiAJewogCQlQUklOVEYgKCJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBUWF9SSU5HLi4uLi5cbiIpOwogCQlnb3RvIERvbmU7CiAJfQotCQorCiBEb25lOgogCXJldHVybiBzdGF0dXM7CiB9CkBAIC01NTIsNyArNTUxLDcgQEAKIAlzdHJ1Y3QgZGVzY3JpcHRvciAqaWFzX2NtZDsKIAogCS8qIERldGVybWluZSB3aGF0IHR5cGUgb2YgbmV0d29yayB0aGUgbWFjaGluZSBpcyBjb25uZWN0ZWQgdG8JKi8KLQkvKiBwcmVzZW50bHkgZHJvcHMgdGhlIGNvbm5lY3QgdG8gMTBNYnBzCQkJKi8JICAgICAKKwkvKiBwcmVzZW50bHkgZHJvcHMgdGhlIGNvbm5lY3QgdG8gMTBNYnBzCQkJKi8KIAogCWlmICghYXV0b19uZWdvdGlhdGUoZGV2KSkKIAl7CkBAIC01NjAsNDMgKzU1OSw0MyBAQAogCQlnb3RvIERvbmU7CiAJfQogCi0gICAgICAgIGlzc3VlX2FuZF93YWl0KGRldiwgVHhSZXNldCk7Ci0gICAgICAgIGlzc3VlX2FuZF93YWl0KGRldiwgUnhSZXNldHwweDA0KTsKKwlpc3N1ZV9hbmRfd2FpdChkZXYsIFR4UmVzZXQpOworCWlzc3VlX2FuZF93YWl0KGRldiwgUnhSZXNldHwweDA0KTsKIAotICAgICAgICAvKiBTd2l0Y2ggdG8gcmVnaXN0ZXIgc2V0IDcgZm9yIG5vcm1hbCB1c2UuICovCi0gICAgICAgIEVMM1dJTkRPVyhkZXYsIDcpOworCS8qIFN3aXRjaCB0byByZWdpc3RlciBzZXQgNyBmb3Igbm9ybWFsIHVzZS4gKi8KKwlFTDNXSU5ET1coZGV2LCA3KTsKIAogCS8qIEluaXRpYWxpemUgUnggYW5kIFR4IHJpbmdzICovCiAKIAlpbml0X3J4X3JpbmcoZGV2KTsKIAlwdXJnZV90eF9yaW5nKGRldik7CiAKLSAJRVRIX0NNRChkZXYsIFNldFJ4RmlsdGVyIHwgUnhTdGF0aW9uIHwgUnhCcm9hZGNhc3QgfCBSeFByb20pOworCUVUSF9DTUQoZGV2LCBTZXRSeEZpbHRlciB8IFJ4U3RhdGlvbiB8IFJ4QnJvYWRjYXN0IHwgUnhQcm9tKTsKIAotICAgICAgICBpc3N1ZV9hbmRfd2FpdChkZXYsU2V0VHhTdGFydHwweDA3ZmYpOworCWlzc3VlX2FuZF93YWl0KGRldixTZXRUeFN0YXJ0fDB4MDdmZik7CiAKLSAgICAgICAgLyogQmVsb3cgc2V0cyB3aGljaCBpbmRpY2F0aW9uIGJpdHMgdG8gYmUgc2Vlbi4gKi8KKwkvKiBCZWxvdyBzZXRzIHdoaWNoIGluZGljYXRpb24gYml0cyB0byBiZSBzZWVuLiAqLwogCi0gICAgICAgIHN0YXR1c19lbmFibGUgPSBTZXRTdGF0dXNFbmIgfCBIb3N0RXJyb3IgfCBEb3duQ29tcGxldGUgfCBVcENvbXBsZXRlIHwgKDE8PDYpOwotICAgICAgICBFVEhfQ01EKGRldiwgc3RhdHVzX2VuYWJsZSk7CisJc3RhdHVzX2VuYWJsZSA9IFNldFN0YXR1c0VuYiB8IEhvc3RFcnJvciB8IERvd25Db21wbGV0ZSB8IFVwQ29tcGxldGUgfCAoMTw8Nik7CisJRVRIX0NNRChkZXYsIHN0YXR1c19lbmFibGUpOwogCiAJLyogQmVsb3cgc2V0cyBubyBiaXRzIGFyZSB0byBjYXVzZSBhbiBpbnRlcnJ1cHQgc2luY2UgdGhpcyBpcyBqdXN0IHBvbGxpbmcgKi8KIAotICAgICAgICBpbnRyX2VuYWJsZSAgID0gU2V0SW50ckVuYjsKLS8vCWludHJfZW5hYmxlID0gU2V0SW50ckVuYiB8ICgxPDw5KSB8ICgxPDwxMCkgfCAoMTw8Nik7Ci0gICAgICAgIEVUSF9DTUQoZGV2LCBpbnRyX2VuYWJsZSk7CisJaW50cl9lbmFibGUgICA9IFNldEludHJFbmI7CisvKglpbnRyX2VuYWJsZSA9IFNldEludHJFbmIgfCAoMTw8OSkgfCAoMTw8MTApIHwgKDE8PDYpOyAqLworCUVUSF9DTUQoZGV2LCBpbnRyX2VuYWJsZSk7CiAJRVRIX09VVEIoZGV2LCAxMjcsIFVwUG9sbCk7CiAKLSAgICAgICAgLyogQWNrIGFsbCBwZW5kaW5nIGV2ZW50cywgYW5kIHNldCBhY3RpdmUgaW5kaWNhdG9yIG1hc2sgKi8KKwkvKiBBY2sgYWxsIHBlbmRpbmcgZXZlbnRzLCBhbmQgc2V0IGFjdGl2ZSBpbmRpY2F0b3IgbWFzayAqLwogCi0gICAgICAgIEVUSF9DTUQoZGV2LCBBY2tJbnRyIHwgSW50TGF0Y2ggfCBUeEF2YWlsYWJsZSB8IFJ4RWFybHkgfCBJbnRSZXEpOwotICAgICAgICBFVEhfQ01EKGRldiwgaW50cl9lbmFibGUpOworCUVUSF9DTUQoZGV2LCBBY2tJbnRyIHwgSW50TGF0Y2ggfCBUeEF2YWlsYWJsZSB8IFJ4RWFybHkgfCBJbnRSZXEpOworCUVUSF9DTUQoZGV2LCBpbnRyX2VuYWJsZSk7CiAKIAkvKiBUZWxsIHRoZSBhZGFwdGVyIHdoZXJlIHRoZSBSWCByaW5nIGlzIGxvY2F0ZWQgKi8KIAogCWlzc3VlX2FuZF93YWl0KGRldixVcFN0YWxsKTsJCQkJLyogU3RhbGwgYW5kIHNldCB0aGUgVXBsaXN0UHRyIAkJKi8KIAlFVEhfT1VUTChkZXYsICh1MzIpJnJ4X3JpbmdbcnhfbmV4dF0sIFVwTGlzdFB0cik7Ci0gICAgICAgIEVUSF9DTUQoZGV2LCBSeEVuYWJsZSk7IAkJCQkvKiBFbmFibGUgdGhlIHJlY2VpdmVyLiAJCSovCisJRVRIX0NNRChkZXYsIFJ4RW5hYmxlKTsgCQkJCS8qIEVuYWJsZSB0aGUgcmVjZWl2ZXIuIAkJKi8KIAlpc3N1ZV9hbmRfd2FpdChkZXYsVXBVbnN0YWxsKTsKIAogCS8qIFNlbmQgdGhlIEluZGl2aWR1YWwgQWRkcmVzcyBTZXR1cCBmcmFtZSAqLwpAQCAtNjEyLDcgKzYxMSw3IEBACiAKIAkvKiBUZWxsIHRoZSBhZGFwdGVyIHdoZXJlIHRoZSBUWCByaW5nIGlzIGxvY2F0ZWQgKi8KIAotICAgICAgICBFVEhfQ01EKGRldiwgVHhFbmFibGUpOyAJCQkJLyogRW5hYmxlIHRyYW5zbWl0dGVyLiAJCQkqLworCUVUSF9DTUQoZGV2LCBUeEVuYWJsZSk7IAkJCQkvKiBFbmFibGUgdHJhbnNtaXR0ZXIuIAkJCSovCiAJaXNzdWVfYW5kX3dhaXQoZGV2LCBEb3duU3RhbGwpOwkJCQkvKiBTdGFsbCBhbmQgc2V0IHRoZSBEb3duTGlzdFB0ci4gCSovCiAJRVRIX09VVEwoZGV2LCAodTMyKSZ0eF9yaW5nW3R4X2N1cl0sIERvd25MaXN0UHRyKTsKIAlpc3N1ZV9hbmRfd2FpdChkZXYsIERvd25VbnN0YWxsKTsKQEAgLTYyNywxMyArNjI2LDEzIEBACiAJfQogCWlmIChFVEhfU1RBVFVTKGRldikgJiBEb3duQ29tcGxldGUpCQkJLyogSWYgRG93bkxvYWQgQ29tcGxldGUgQUNLIHRoZSBiaXQgCSovCiAJewotICAgICAgICAJRVRIX0NNRChkZXYsIEFja0ludHIgfCBEb3duQ29tcGxldGUpOwkJLyogYWNrbm93bGVkZ2UgdGhlIGluZGljYXRpb24gYml0CSovCi0gCQlpc3N1ZV9hbmRfd2FpdChkZXYsIERvd25TdGFsbCk7CQkJLyogc3RhbGwgYW5kIGNsZWFyIERvd25MaXN0UHRyIAkJKi8KKwkJRVRIX0NNRChkZXYsIEFja0ludHIgfCBEb3duQ29tcGxldGUpOwkJLyogYWNrbm93bGVkZ2UgdGhlIGluZGljYXRpb24gYml0CSovCisJCWlzc3VlX2FuZF93YWl0KGRldiwgRG93blN0YWxsKTsJCQkvKiBzdGFsbCBhbmQgY2xlYXIgRG93bkxpc3RQdHIgCQkqLwogCQlFVEhfT1VUTChkZXYsIDAsIERvd25MaXN0UHRyKTsKIAkJaXNzdWVfYW5kX3dhaXQoZGV2LCBEb3duVW5zdGFsbCk7CiAJfQogCXN0YXR1cyA9IDE7Ci0JICAgIAorCiBEb25lOgogCXJldHVybiBzdGF0dXM7CiB9CkBAIC02NzMsOCArNjcyLDggQEAKIAl9CiAJaWYgKEVUSF9TVEFUVVMoZGV2KSAmIERvd25Db21wbGV0ZSkJCQkvKiBJZiBEb3duTG9hZCBDb21wbGV0ZSBBQ0sgdGhlIGJpdCAJKi8KIAl7Ci0gICAgICAgIAlFVEhfQ01EKGRldiwgQWNrSW50ciB8IERvd25Db21wbGV0ZSk7CQkvKiBhY2tub3dsZWRnZSB0aGUgaW5kaWNhdGlvbiBiaXQJKi8KLSAJCWlzc3VlX2FuZF93YWl0KGRldiwgRG93blN0YWxsKTsJCQkvKiBzdGFsbCBhbmQgY2xlYXIgRG93bkxpc3RQdHIgCQkqLworCQlFVEhfQ01EKGRldiwgQWNrSW50ciB8IERvd25Db21wbGV0ZSk7CQkvKiBhY2tub3dsZWRnZSB0aGUgaW5kaWNhdGlvbiBiaXQJKi8KKwkJaXNzdWVfYW5kX3dhaXQoZGV2LCBEb3duU3RhbGwpOwkJCS8qIHN0YWxsIGFuZCBjbGVhciBEb3duTGlzdFB0ciAJCSovCiAJCUVUSF9PVVRMKGRldiwgMCwgRG93bkxpc3RQdHIpOwogCQlpc3N1ZV9hbmRfd2FpdChkZXYsIERvd25VbnN0YWxsKTsKIAl9CkBAIC03MTAsMTUgKzcwOSwxNSBAQAogCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHJ4X3JpbmdbcnhfbmV4dF0uc3RhdHVzKTsJCS8qIHBhY2tldCBzdGF0dXMJCSovCiAKIAl3aGlsZSAoc3RhdHVzICYgKDE8PDE1KSkKLQl7CQkKKwl7CiAJCS8qIEEgcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkICovCiAKLQkJaWYgKHN0YXR1cyAmICgxPDwxNSkpCQkKKwkJaWYgKHN0YXR1cyAmICgxPDwxNSkpCiAJCXsKIAkJCS8qIEEgdmFsaWQgZnJhbWUgcmVjZWl2ZWQgICovCi0JCQkKKwogCQkJbGVuZ3RoID0gbGUzMl90b19jcHUocnhfcmluZ1tyeF9uZXh0XS5zdGF0dXMpICYgMHgxZmZmOwkJLyogbGVuZ3RoIGlzIGluIGJpdHMgMCAtIDEyIAkqLwotCQkJCisKIAkJCS8qIFBhc3MgdGhlIHBhY2tldCB1cCB0byB0aGUgcHJvdG9jb2wgbGF5ZXJzICovCiAKIAkJCU5ldFJlY2VpdmUoKHVjaGFyICopbGUzMl90b19jcHUocnhfcmluZ1tyeF9uZXh0XS5hZGRyKSwgbGVuZ3RoKTsKQEAgLTc0OCw3ICs3NDcsNyBAQAogCiB2b2lkIGV0aF8zY29tX2hhbHQoc3RydWN0IGV0aF9kZXZpY2UqIGRldikKIHsKLQlpZiAoIShkZXYtPmlvYmFzZSkpIAorCWlmICghKGRldi0+aW9iYXNlKSkKIAl7CiAJCWdvdG8gRG9uZTsKIAl9CkBAIC03NTgsMTQgKzc1NywxNCBAQAogCWlzc3VlX2FuZF93YWl0KGRldiwgUnhEaXNhYmxlKTsKIAlpc3N1ZV9hbmRfd2FpdChkZXYsIFR4RGlzYWJsZSk7CiAKLS8vCWZyZWUodHhfcmluZyk7CQkJCS8qIHJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCB0byB0aGUgRFBEIGFuZCBVUEQgcmluZ3MgKi8KLS8vCWZyZWUocnhfcmluZyk7CisvKglmcmVlKHR4X3JpbmcpOwkJCQkvIyMjKiByZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgdG8gdGhlIERQRCBhbmQgVVBEIHJpbmdzICovCisvKglmcmVlKHJ4X3JpbmcpOyAqLwogCiBEb25lOgogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaW5pdF9yeF9yaW5nKHN0cnVjdCBldGhfZGV2aWNlKiBkZXYpIAorc3RhdGljIHZvaWQgaW5pdF9yeF9yaW5nKHN0cnVjdCBldGhfZGV2aWNlKiBkZXYpCiB7CiAJaW50IGk7CiAKQEAgLTc4Miw3ICs3ODEsNyBAQAogCXJ4X25leHQgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBwdXJnZV90eF9yaW5nKHN0cnVjdCBldGhfZGV2aWNlKiBkZXYpIAorc3RhdGljIHZvaWQgcHVyZ2VfdHhfcmluZyhzdHJ1Y3QgZXRoX2RldmljZSogZGV2KQogewogCWludCBpOwogCkBAIC03OTksMzkgKzc5OCwzOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcmVhZF9od19hZGRyKHN0cnVjdCBldGhfZGV2aWNlKiBkZXYsIGJkX3QgKmJpcykgCitzdGF0aWMgdm9pZCByZWFkX2h3X2FkZHIoc3RydWN0IGV0aF9kZXZpY2UqIGRldiwgYmRfdCAqYmlzKQogewogCXU4IGh3X2FkZHJbRVRIX0FMRU5dOwogCXVuc2lnbmVkIGludCBlZXByb21bMHg0MF07CiAJdW5zaWduZWQgaW50IGNoZWNrc3VtID0gMDsKIAlpbnQgaSwgaiwgdGltZXI7CiAKLSAgICAgICAgLyogUmVhZCB0aGUgc3RhdGlvbiBhZGRyZXNzIGZyb20gdGhlIEVFUFJPTS4gKi8KKwkvKiBSZWFkIHRoZSBzdGF0aW9uIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NLiAqLwogCi0gICAgICAgIEVMM1dJTkRPVyhkZXYsIDApOworCUVMM1dJTkRPVyhkZXYsIDApOwogCWZvciAoaSA9IDA7IGkgPCAweDQwOyBpKyspCiAJewotICAgICAgICAJRVRIX09VVFcoZGV2LCBFRVBST01fUmVhZCArIGksIFduMEVlcHJvbUNtZCk7Ci0gICAgICAgICAgICAgICAgLyogUGF1c2UgZm9yIGF0IGxlYXN0IDE2MiB1cy4gZm9yIHRoZSByZWFkIHRvIHRha2UgcGxhY2UuICovCi0gICAgICAgICAgICAgICAgZm9yICh0aW1lciA9IDEwOyB0aW1lciA+PSAwOyB0aW1lci0tKSAKKwkJRVRIX09VVFcoZGV2LCBFRVBST01fUmVhZCArIGksIFduMEVlcHJvbUNtZCk7CisJCS8qIFBhdXNlIGZvciBhdCBsZWFzdCAxNjIgdXMuIGZvciB0aGUgcmVhZCB0byB0YWtlIHBsYWNlLiAqLworCQlmb3IgKHRpbWVyID0gMTA7IHRpbWVyID49IDA7IHRpbWVyLS0pCiAJCXsKLSAgICAgICAgICAgICAgICAJdWRlbGF5KDE2Mik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEVUSF9JTlcoZGV2LCBXbjBFZXByb21DbWQpICYgMHg4MDAwKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgCWJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlZXByb21baV0gPSBFVEhfSU5XKGRldiwgV24wRWVwcm9tRGF0YSk7Ci0gICAgICAgIH0KKwkJCXVkZWxheSgxNjIpOworCQkJaWYgKChFVEhfSU5XKGRldiwgV24wRWVwcm9tQ21kKSAmIDB4ODAwMCkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCQllZXByb21baV0gPSBFVEhfSU5XKGRldiwgV24wRWVwcm9tRGF0YSk7CisJfQogCiAJLyogQ2hlY2tzdW0gY2FsY3VsYXRpb24uICBJJ20gbm90IHN1cmUgYWJvdXQgdGhpcyBwYXJ0IGFuZCB0aGVyZSBzZWVtcyB0byBiZSBhIGJ1ZyBvbiB0aGUgM2NvbSBzaWRlIG9mIHRoaW5ncyAqLwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAweDIxOyBpKyspCi0gICAgICAgICAgICAgICAgY2hlY2tzdW0gIF49IGVlcHJvbVtpXTsKLSAgICAgICAgY2hlY2tzdW0gPSAoY2hlY2tzdW0gXiAoY2hlY2tzdW0gPj4gOCkpICYgMHhmZjsKKwlmb3IgKGkgPSAwOyBpIDwgMHgyMTsgaSsrKQorCQljaGVja3N1bSAgXj0gZWVwcm9tW2ldOworCWNoZWNrc3VtID0gKGNoZWNrc3VtIF4gKGNoZWNrc3VtID4+IDgpKSAmIDB4ZmY7CiAKLSAgICAgICAgaWYgKGNoZWNrc3VtICE9IDB4YmIpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgKioqIElOVkFMSUQgRUVQUk9NIENIRUNLU1VNICU0LjR4ICoqKiBcbiIsIGNoZWNrc3VtKTsKKwlpZiAoY2hlY2tzdW0gIT0gMHhiYikKKwkJcHJpbnRmKCIgKioqIElOVkFMSUQgRUVQUk9NIENIRUNLU1VNICU0LjR4ICoqKiBcbiIsIGNoZWNrc3VtKTsKIAotICAgICAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDM7IGkrKykKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDM7IGkrKykKIAl7CiAJCWh3X2FkZHJbaisrXSA9ICh1OCkoKGVlcHJvbVtpKzEwXSA+PiA4KSAmIDB4ZmYpOwogCQlod19hZGRyW2orK10gPSAodTgpKGVlcHJvbVtpKzEwXSAmIDB4ZmYpOwpAQCAtODM5LDkgKzgzOCw5IEBACiAKIAkvKiAgTUFDIEFkZHJlc3MgaXMgaW4gd2luZG93IDIsIHdyaXRlIHZhbHVlIGZyb20gRUVQUk9NIHRvIHdpbmRvdyAyICovCiAKLSAgICAgICAgRUwzV0lORE9XKGRldiwgMik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgICAgICAgICAgICAgRVRIX09VVEIoZGV2LCBod19hZGRyW2ldLCBpKTsKKwlFTDNXSU5ET1coZGV2LCAyKTsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlFVEhfT1VUQihkZXYsIGh3X2FkZHJbaV0sIGkpOwogCiAJZm9yIChqID0gMDsgaiA8IEVUSF9BTEVOOyBqKz0yKQogCXsKQEAgLTg0OSw5ICs4NDgsOSBAQAogCQlod19hZGRyW2orMV0gPSAodTgpKChFVEhfSU5XKGRldiwgaikgPj4gOCkgJiAweGZmKTsKIAl9CiAKLQlmb3IgKGk9MDtpPEVUSF9BTEVOO2krKykgCisJZm9yIChpPTA7aTxFVEhfQUxFTjtpKyspCiAJewotCQlpZiAoaHdfYWRkcltpXSAhPSBiaXMtPmJpX2VuZXRhZGRyW2ldKSAKKwkJaWYgKGh3X2FkZHJbaV0gIT0gYmlzLT5iaV9lbmV0YWRkcltpXSkKIAkJewogLyogCQkJcHJpbnRmKCJXYXJuaW5nOiBIVyBhZGRyZXNzIGRvbid0IG1hdGNoOlxuIik7ICovCiAvKiAJCQlwcmludGYoIkFkZHJlc3MgaW4gM0NvbSBXaW5kb3cgMiBpcyAgICAgICAgICIgKi8KQEAgLTg3MCw5ICs4NjksOSBAQAogCQkJYmlzLT5iaV9lbmV0YWRkcls0XSA9PSAwICYmIGJpcy0+YmlfZW5ldGFkZHJbNV0gPT0gMCkKIAkJICAgIHsKIAotCQkJc3ByaW50ZihidWZmZXIsICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWCIsIAotCQkJCWh3X2FkZHJbMF0sIGh3X2FkZHJbMV0sIGh3X2FkZHJbMl0sIAotCQkJCWh3X2FkZHJbM10sIGh3X2FkZHJbNF0sIGh3X2FkZHJbNV0pOyAKKwkJCXNwcmludGYoYnVmZmVyLCAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlgiLAorCQkJCWh3X2FkZHJbMF0sIGh3X2FkZHJbMV0sIGh3X2FkZHJbMl0sCisJCQkJaHdfYWRkclszXSwgaHdfYWRkcls0XSwgaHdfYWRkcls1XSk7CiAJCQlzZXRlbnYoImV0aGFkZHIiLCBidWZmZXIpOwogCQkgICAgfQogCQl9CkBAIC04ODMsNCArODgyLDMgQEAKIERvbmU6CiAJcmV0dXJuOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2ZsYXNoX25ldy5jIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9mbGFzaF9uZXcuYwppbmRleCAzZmI5ZjEyLi5kNDZiZjQ2IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2ZsYXNoX25ldy5jCisrKyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvZmxhc2hfbmV3LmMKQEAgLTI3LDExICsyNywxMCBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSAibWVtaW8uaCIgCisjaW5jbHVkZSAibWVtaW8uaCIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI3VuZGVmIERFQlVHX0ZMQVNICi0vLyNkZWZpbmUgREVCVUdfRkxBU0gKIAogI2lmZGVmIERFQlVHX0ZMQVNICiAjZGVmaW5lIERFQlVHRihmbXQsYXJncy4uLikgcHJpbnRmKGZtdCAsIyNhcmdzKQpAQCAtNjgsNyArNjcsNyBAQAogICAgIHVuc2lnbmVkIGNoYXIgeDsKIAogICAgIGZsYXNoX3hkX25lc3QgLS07Ci0gICAKKwogICAgIGlmIChmbGFzaF94ZF9uZXN0ID09IDApCiAgICAgewogCURFQlVHRigiRmxhc2ggb24gbWVtb3J5IGJ1c1xuIik7CkBAIC0zMjcsNyArMzI2LDcgQEAKIAkJCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgdW5pZm9ybSBzZWN0b3IgdHlwZQkqLwogCQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CiAJCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgaSAqIGluZm8tPnNpemUgLwotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQ7CisJCQkJCQkJICAgIGluZm8tPnNlY3Rvcl9jb3VudDsKIAkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNDc4LDcgKzQ3Nyw3IEBACiAJCX0KIAogCQlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLQkJICAgICAgICBmbGFzaF90b19tZW0oKTsKKwkJCWZsYXNoX3RvX21lbSgpOwogCQkJcmV0dXJuIChyYyk7CiAJCX0KIAkJd3AgKz0gNDsKQEAgLTQ5Myw3ICs0OTIsNyBAQAogCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwogCQl9CiAJCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCQkgICAgICAgIGZsYXNoX3RvX21lbSgpOworCQkJZmxhc2hfdG9fbWVtKCk7CiAJCQlyZXR1cm4gKHJjKTsKIAkJfQogCQl3cCAgKz0gNDsKQEAgLTU4Miw3ICs1ODEsNyBAQAogICovCiBzdGF0aWMgdm9pZCBmbGFzaF9yZXNldCAodWxvbmcgYWRkcikKIHsKLSAgICAgICAgZmxhc2hfdG9feGQoKTsKKwlmbGFzaF90b194ZCgpOwogCW91dDgoYWRkciwgMHhGMCk7CS8qIHJlc2V0IGJhbmsgKi8KIAlpb2JhcnJpZXJfcncoKTsKIAlmbGFzaF90b19tZW0oKTsKQEAgLTYzMywxMCArNjMyLDEwIEBACiAJCQlpbmZvLT5zaXplIC8gMHgxMDAwMDAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CiAJfSBlbHNlIGlmIChpbmZvLT5zaXplICUgMHg0MDAgPT0gMCkgewogCQlwcmludGYgKCIgIFNpemU6ICVsZCBLQiBpbiAlZCBTZWN0b3JzXG4iLAotCQkgICAgICAgIGluZm8tPnNpemUgLyAweDQwMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKKwkJCWluZm8tPnNpemUgLyAweDQwMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKIAl9IGVsc2UgewogCQlwcmludGYgKCIgIFNpemU6ICVsZCBCIGluICVkIFNlY3RvcnNcbiIsCi0JCSAgICAgICAgaW5mby0+c2l6ZSwgaW5mby0+c2VjdG9yX2NvdW50KTsKKwkJCWluZm8tPnNpemUsIGluZm8tPnNlY3Rvcl9jb3VudCk7CiAJfQogCiAJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9pODI1OS5jIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9pODI1OS5jCmluZGV4IDZjZGZjNjAuLjM0ZjQ4OWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvaTgyNTkuYworKysgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL2k4MjU5LmMKQEAgLTc1LDE2ICs3NSwxNiBAQAogCWNoYXIgZHVtbXk7CiAJUFJJTlRGKCJJbml0aWFsaXppbmcgSW50ZXJydXB0IGNvbnRyb2xsZXJcbiIpOwogCS8qIGluaXQgbWFzdGVyIGludGVycnVwdCBjb250cm9sbGVyICovCi0Jb3V0OCgweDIwLCAweDExKTsgLy8weDE5KTsgLy8gd2FzOiAweDExKTsgLyogU3RhcnQgaW5pdCBzZXF1ZW5jZSAqLworCW91dDgoMHgyMCwgMHgxMSk7IC8qIDB4MTkpOyAvIyMjKiBTdGFydCBpbml0IHNlcXVlbmNlICovCiAJb3V0OCgweDIxLCAweDAwKTsgLyogVmVjdG9yIGJhc2UgKi8KIAlvdXQ4KDB4MjEsIDB4MDQpOyAvKiBlZGdlIHRpZ2dlcmVkLCBDYXNjYWRlIChzbGF2ZSkgb24gSVJRMiAqLwotCW91dDgoMHgyMSwgMHgxMSk7IC8vIHdhczogMHgwMSk7IC8qIFNlbGVjdCA4MDg2IG1vZGUgKi8KKwlvdXQ4KDB4MjEsIDB4MTEpOyAvKiB3YXM6IDB4MDEpOyAvIyMjKiBTZWxlY3QgODA4NiBtb2RlICovCiAKIAkvKiBpbml0IHNsYXZlIGludGVycnVwdCBjb250cm9sbGVyICovCi0Jb3V0OCgweEEwLCAweDExKTsgLy8weDE5KTsgLy8gd2FzOiAweDExKTsgLyogU3RhcnQgaW5pdCBzZXF1ZW5jZSAqLworCW91dDgoMHhBMCwgMHgxMSk7IC8qIDB4MTkpOyAvIyMjKiBTdGFydCBpbml0IHNlcXVlbmNlICovCiAJb3V0OCgweEExLCAweDA4KTsgLyogVmVjdG9yIGJhc2UgKi8KIAlvdXQ4KDB4QTEsIDB4MDIpOyAvKiBlZGdlIHRyaWdnZXJlZCwgQ2FzY2FkZSAoc2xhdmUpIG9uIElSUTIgKi8KLQlvdXQ4KDB4QTEsIDB4MTEpOyAvLyB3YXM6IDB4MDEpOyAvKiBTZWxlY3QgODA4NiBtb2RlICovCisJb3V0OCgweEExLCAweDExKTsgLyogd2FzOiAweDAxKTsgLyMjIyogU2VsZWN0IDgwODYgbW9kZSAqLwogCiAJLyogYWx3YXlzIHJlYWQgSVNSICovCiAJb3V0OCgweDIwLCAweDBCKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvaW50ZXJydXB0cy5jIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9pbnRlcnJ1cHRzLmMKaW5kZXggYmI5M2VhMC4uNWIzMTRhOCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9pbnRlcnJ1cHRzLmMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9pbnRlcnJ1cHRzLmMKQEAgLTczLDcgKzczLDcgQEAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKIHNldF9tc3IodW5zaWduZWQgbG9uZyBtc3IpCiB7Ci0JYXNtIHZvbGF0aWxlKCJtdG1zciAlMCIgOiA6ICJyIiAobXNyKSk7IAorCWFzbSB2b2xhdGlsZSgibXRtc3IgJTAiIDogOiAiciIgKG1zcikpOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCkBAIC04OSw3ICs4OSw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCiBzZXRfZGVjKHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWFzbSB2b2xhdGlsZSgibXRkZWMgJTAiIDogOiAiciIgKHZhbCkpOyAKKwlhc20gdm9sYXRpbGUoIm10ZGVjICUwIiA6IDogInIiICh2YWwpKTsKIH0KIAogCkBAIC0xNjcsOCArMTY3LDggQEAKIAogCWludCBpcnEsIHVubWFzayA9IDE7CiAKLQlpcnEgPSBpODI1OV9pcnEoKTsgLy9pODI1OV9nZXRfaXJxKHJlZ3MpOwotLy8JcHJpbnRmKCJpcnEgPSAlZCwgaGFuZGxlciBhdCAlcCBhY2s9JWRcbiIsIGlycSwgaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlciwgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHhGRUYwMDAwMCk7CisJaXJxID0gaTgyNTlfaXJxKCk7IC8qaTgyNTlfZ2V0X2lycShyZWdzKTsgKi8KKy8qCXByaW50ZigiaXJxID0gJWQsIGhhbmRsZXIgYXQgJXAgYWNrPSVkXG4iLCBpcnEsIGlycV9oYW5kbGVyc1tpcnFdLmhhbmRsZXIsICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4RkVGMDAwMDApOyAqLwogCWk4MjU5X21hc2tfYW5kX2FjayhpcnEpOwogCiAJaWYgKGlycV9oYW5kbGVyc1tpcnFdLmhhbmRsZXIgIT0gTlVMTCkKQEAgLTI2NCw1ICsyNjQsMyBAQAogewogCXB1dHMoIklSUSByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgdW5pbXBsZW1lbnRlZCBjdXJyZW50bHkuXG4iKTsKIH0KLQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL21hY3Jvcy5oIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9tYWNyb3MuaAppbmRleCAwZmJlMzliLi42MDIwZDdlIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL21hY3Jvcy5oCisrKyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbWFjcm9zLmgKQEAgLTUsMjAgKzUsMjAgQEAKIAkvKgogCSoqIExvYWQgYSBsb25nIGludGVnZXIgaW50byBhIHJlZ2lzdGVyCiAJKi8KLSAgICAgIAkubWFjcm8gbGl3IHJlZywgdmFsdWUKLSAgICAgICAgICAgICAgICBsaXMgXHJlZywgXHZhbHVlQGgKLSAgICAgICAgICAgICAgICBvcmkgXHJlZywgXHJlZywgXHZhbHVlQGwKLSAgICAgICAgLmVuZG0KKwkubWFjcm8gbGl3IHJlZywgdmFsdWUKKwkJbGlzIFxyZWcsIFx2YWx1ZUBoCisJCW9yaSBccmVnLCBccmVnLCBcdmFsdWVAbAorCS5lbmRtCiAKIAotCS8qIAorCS8qCiAJKiogR2VuZXJhdGUgY29uZmlnX2FkZHIgcmVxdWVzdAogCSoqIFRoaXMgbWFjcm8gZXhwZWN0cyB0aGUgdmFsdWVzIGluIHJlZ2lzdGVyczoKIAkqKiByMyAtIGJ1cwogCSoqIHI0IC0gZGV2Zm4KIAkqKiByNSAtIG9mZnNldAogCSovCi0JLm1hY3JvIGNvbmZpZ19hZGRyIAkKKwkubWFjcm8gY29uZmlnX2FkZHIKIAkJcmx3aW5tCXI5LCByNSwgMjQsIDAsIDYKIAkJcmx3aW5tCXI4LCByNCwgMTYsIDAsIDMxCiAJCXJsd2lubQlyNywgcjMsIDgsIDAsIDMxCkBAIC0zMSw3ICszMSw3IEBACiAJCXN5bmMKIAkuZW5kbQogCi0JCisKIAkvKgogCSoqIEdlbmVyYXRlIGNvbmZpZ19kYXRhIGFkZHJlc3MKIAkqLwpAQCAtNDUsNDAgKzQ1LDQwIEBACiAJLyoKIAkqKiBXcml0ZSBhIGJ5dGUgdmFsdWUgdG8gYW4gb3V0cHV0IHBvcnQKIAkqLwotICAgICAgICAubWFjcm8gb3V0YiBwb3J0LCB2YWx1ZQotICAgICAgICAgICAgICAgIGxpcyAgICAgcjIsIDB4ZmUwMAotICAgICAgICAgICAgICAgIGxpICAgICAgcjAsIFx2YWx1ZQotICAgICAgICAgICAgICAgIHN0YiAgICAgcjAsIFxwb3J0KHIyKQotICAgICAgICAuZW5kbQorCS5tYWNybyBvdXRiIHBvcnQsIHZhbHVlCisJCWxpcyAgICAgcjIsIDB4ZmUwMAorCQlsaSAgICAgIHIwLCBcdmFsdWUKKwkJc3RiICAgICByMCwgXHBvcnQocjIpCisJLmVuZG0KIAogCiAJLyoKIAkqKiBXcml0ZSBhIHJlZ2lzdGVyIGJ5dGUgdmFsdWUgdG8gYW4gb3V0cHV0IHBvcnQKIAkqLwotICAgICAgICAubWFjcm8gb3V0YnIgcG9ydCwgdmFsdWUKLSAgICAgICAgICAgICAgICBsaXMgICAgIHIyLCAweGZlMDAKLSAgICAgICAgICAgICAgICBzdGIgICAgIFx2YWx1ZSwgXHBvcnQocjIpCi0gICAgICAgIC5lbmRtCisJLm1hY3JvIG91dGJyIHBvcnQsIHZhbHVlCisJCWxpcyAgICAgcjIsIDB4ZmUwMAorCQlzdGIgICAgIFx2YWx1ZSwgXHBvcnQocjIpCisJLmVuZG0KIAogCi0JLyogCisJLyoKIAkqKiBSZWFkIGEgYnl0ZSB2YWx1ZSBmcm9tIGEgcG9ydCBpbnRvIGEgc3BlY2lmaWVkIHJlZ2lzdGVyCiAJKi8KLSAgICAgICAgLm1hY3JvIGluYiByZWcsIHBvcnQKLSAgICAgICAgICAgICAgICBsaXMgICAgIHIyLCAweGZlMDAKLSAgICAgICAgICAgICAgICBsYnogICAgIFxyZWcsIFxwb3J0KHIyKQotICAgICAgICAuZW5kbQorCS5tYWNybyBpbmIgcmVnLCBwb3J0CisJCWxpcyAgICAgcjIsIDB4ZmUwMAorCQlsYnogICAgIFxyZWcsIFxwb3J0KHIyKQorCS5lbmRtCiAKIAogCS8qCiAJKiogV3JpdGUgYSBieXRlIHRvIHRoZSBTdXBlcklPIGNvbmZpZyBhcmVhCiAJKi8KLSAgICAgICAgLm1hY3JvIHNpb3diIG9mZnNldCwgdmFsdWUKLSAgICAgICAgICAgICAgICBsaSAgICAgIHIzLCAwCi0gICAgICAgICAgICAgICAgbGkgICAgICByNCwgKDc8PDMpCi0gICAgICAgICAgICAgICAgbGkgICAgICByNSwgXG9mZnNldAotICAgICAgICAgICAgICAgIGxpICAgICAgcjYsIFx2YWx1ZQotICAgICAgICAgICAgICAgIGJsICAgICAgcGNpX3dyaXRlX2NmZ19ieXRlCi0gICAgICAgIC5lbmRtCisJLm1hY3JvIHNpb3diIG9mZnNldCwgdmFsdWUKKwkJbGkgICAgICByMywgMAorCQlsaSAgICAgIHI0LCAoNzw8MykKKwkJbGkgICAgICByNSwgXG9mZnNldAorCQlsaSAgICAgIHI2LCBcdmFsdWUKKwkJYmwgICAgICBwY2lfd3JpdGVfY2ZnX2J5dGUKKwkuZW5kbQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbWVtaW8uUyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbWVtaW8uUwppbmRleCBjNGEwOWFhLi45ODBkMzQzIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL21lbWlvLlMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9tZW1pby5TCkBAIC0xLDkgKzEsOCBAQAogI2luY2x1ZGUJIm1hY3Jvcy5oIgogCi0JCiAKIAkuZ2xvYmwgcGNpX3JlYWRfY2ZnX2J5dGUKLQkKKwogcGNpX3JlYWRfY2ZnX2J5dGU6CiAJY29uZmlnX2FkZHIKIAljb25maWdfZGF0YQkzCkBAIC0xMiwxMSArMTEsMTAgQEAKIAlsYnoJcjMsIDAocjkpCiAJYmxyCiAKLQkKIAogCS5nbG9ibCBwY2lfd3JpdGVfY2ZnX2J5dGUKLQkKLXBjaV93cml0ZV9jZmdfYnl0ZToJCisKK3BjaV93cml0ZV9jZmdfYnl0ZToKIAljb25maWdfYWRkcgogCWNvbmZpZ19kYXRhCTMKIAlzdGIJcjYsIDAocjkpCkBAIC0yNSw5ICsyMyw4IEBACiAJYmxyCiAKIAotCiAJLmdsb2JsIHBjaV9yZWFkX2NmZ193b3JkCi0JCisKIHBjaV9yZWFkX2NmZ193b3JkOgogCWNvbmZpZ19hZGRyCiAJY29uZmlnX2RhdGEJMgpAQCAtMzcsOSArMzQsOCBAQAogCWJscgogCiAKLQkKIAkuZ2xvYmwgcGNpX3dyaXRlX2NmZ193b3JkCi0JCisKIHBjaV93cml0ZV9jZmdfd29yZDoKIAljb25maWdfYWRkcgogCWNvbmZpZ19kYXRhCTIKQEAgLTQ4LDEwICs0NCw5IEBACiAJc3luYwogCWJscgogCi0JCiAKIAkuZ2xvYmwgcGNpX3JlYWRfY2ZnX2xvbmcKLQkKKwogcGNpX3JlYWRfY2ZnX2xvbmc6CiAJY29uZmlnX2FkZHIKIAljb25maWdfZGF0YQkwCkBAIC02MSw5ICs1Niw4IEBACiAJYmxyCiAKIAotCiAJLmdsb2JsIHBjaV93cml0ZV9jZmdfbG9uZwotCQorCiBwY2lfd3JpdGVfY2ZnX2xvbmc6CiAJY29uZmlnX2FkZHIKIAljb25maWdfZGF0YQkwCkBAIC03MSw0ICs2NSwzIEBACiAJZWllaW8KIAlzeW5jCiAJYmxyCi0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbWVtaW8uaCBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbWVtaW8uaAppbmRleCBkZjA4MzlmLi5mNWNlMzAzIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL21lbWlvLmgKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9tZW1pby5oCkBAIC0yLDcgKzIsNyBAQAogICogTWVtb3J5IG1hcHBlZCBJTwogICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogSHlwZXJpb24gRW50ZXJ0YWlubWVudCwgVGhvbWFzRkBoeXBlcmlvbi1lbnRlcnRhaW5tZW50LmNvbSAKKyAqIEh5cGVyaW9uIEVudGVydGFpbm1lbnQsIFRob21hc0ZAaHlwZXJpb24tZW50ZXJ0YWlubWVudC5jb20KICAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KQEAgLTE1LDkgKzE1LDkgQEAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICoKLSAqLyAKKyAqLwogCiAjaWZuZGVmIF9NRU1JT19ICiAjZGVmaW5lIF9NRU1JT19ICkBAIC05Nyw4ICs5Nyw4IEBACiAKICNkZWZpbmUgQ09ORklHX0FERFIoYnVzLCBkZXZmbiwgb2Zmc2V0KSBcCiAgICAgd3JpdGVfbG9uZ19iaWcoKHVpbnQzMiAqKTB4RkVDMDBDRjgsICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgKChvZmZzZXQgJiAweEZDKTw8MjQpIHwgKGRldmZuIDw8IDE2KSAgXAotICAgICAgICAgICAgICAgICAgIHwgKGJ1czw8OCkgfCAweDgwKTsKKwkJICAgKChvZmZzZXQgJiAweEZDKTw8MjQpIHwgKGRldmZuIDw8IDE2KSAgXAorCQkgICB8IChidXM8PDgpIHwgMHg4MCk7CiAjZGVmaW5lIENPTkZJR19EQVRBKG9mZnNldCxtYXNrKSAoKHZvaWQgKikoMHhGRUUwMENGQysob2Zmc2V0ICYgbWFzaykpKQogCiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbnZyYW0uYyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbnZyYW0uYwppbmRleCA1ZGRlMTViLi5kMzdlZWMxIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL252cmFtLmMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9udnJhbS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogVGhvbWFzIEZyaWVkZW4sIEh5cGVyaW9uIEVudGVydGFpbm1lbnQgCisgKiBUaG9tYXMgRnJpZWRlbiwgSHlwZXJpb24gRW50ZXJ0YWlubWVudAogICogVGhvbWFzRkBoeXBlcmlvbi1lbnRlcnRhaW5tZW50LmNvbQogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0zNCw0ICszNCwzIEBACiB7CiAgICAgcGNpX3dyaXRlX2NmZ19ieXRlKDAsIDAsIDB4NTYsIDB4MCk7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvcHMya2JkLmMgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3BzMmtiZC5jCmluZGV4IGE2ZDY3YmUuLmJmZTVlYjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvcHMya2JkLmMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9wczJrYmQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIEpvaG4gVy4gTGludmlsbGUsIGxpbnZpbGxlQHR1eGRyaXZlci5jb20KLSAqIAorICoKICAqIE1vZGlmaWVkIGZyb20gY29kZSBmb3Igc3VwcG9ydCBvZiBNSVA0MDUgYW5kIFBJUDQwNSBib2FyZHMuICBQcmV2aW91cwogICogY29weXJpZ2h0IGZvbGxvd3MuCiAgKgpAQCAtNDgsNyArNDgsNiBAQAogCiAKICN1bmRlZiBLQkdfREVCVUcKLS8vI2RlZmluZSBLQkdfREVCVUcKIAogI2lmZGVmIEtCR19ERUJVRwogI2RlZmluZQlQUklOVEYoZm10LGFyZ3MuLi4pCXByaW50ZiAoZm10ICwjI2FyZ3MpCkBAIC0xNDMsOCArMTQyLDYgQEAKICNkZWZpbmUgCUtCRF9CVUZGRVJfTEVOIDB4MjAgIC8qIHNpemUgb2YgdGhlIGtleWJvYXJkYnVmZmVyICovCiAKIAotCi0KIHN0YXRpYyB2b2xhdGlsZSBjaGFyIGtiZF9idWZmZXJbS0JEX0JVRkZFUl9MRU5dOwogc3RhdGljIHZvbGF0aWxlIGludCBpbl9wb2ludGVyID0gMDsKIHN0YXRpYyB2b2xhdGlsZSBpbnQgb3V0X3BvaW50ZXIgPSAwOwpAQCAtMTcyLDcgKzE2OSw3IEBACiAJICcyJywgJzMnLCAnMCcsICcuJywweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgIC8qIDB4NTAgLSAweDVGICovCiAJJ1xyJywweGZmLDB4ZmYKIAl9OwotCSAgCSAgCisKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGtiZF9zaGlmdF94bGF0ZVtdID0gewogCTB4ZmYsMHgxYiwgJyEnLCAnQCcsICcjJywgJyQnLCAnJScsICdeJywgJyYnLCAnKicsICcoJywgJyknLCAnXycsICcrJywnXGInLCdcdCcsCS8qIDB4MDAgLSAweDBmICovCiAJICdRJywgJ1cnLCAnRScsICdSJywgJ1QnLCAnWScsICdVJywgJ0knLCAnTycsICdQJywgJ3snLCAnfScsJ1xyJywweGZmLCAnQScsICdTJywJLyogMHgxMCAtIDB4MWYgKi8KQEAgLTE5NCw3ICsxOTEsNyBAQAogCX07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEluaXQgCisgKiBJbml0CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBpbnQgaXNhX2tiZF9pbml0KHZvaWQpCkBAIC0yNTIsNyArMjQ5LDcgQEAKIAkJCWVycm9yPWNvbnNvbGVfYXNzaWduKHN0ZGluLERFVk5BTUUpOwogCQkJaWYoZXJyb3I9PTApCiAJCQkJcmV0dXJuIDE7Ci0JCQllbHNlIAorCQkJZWxzZQogCQkJCXJldHVybiBlcnJvcjsKIAkJfQogCQlyZXR1cm4gMTsKQEAgLTI2MSw3ICsyNTgsNyBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBRdWV1ZSBoYW5kbGluZyAKKyAqIFF1ZXVlIGhhbmRsaW5nCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogcHV0cyBjaGFyYWN0ZXIgaW4gdGhlIHF1ZXVlIGFuZCBzZXRzIHVwIHRoZSBpbiBhbmQgb3V0IHBvaW50ZXIgKi8KIHZvaWQga2JkX3B1dF9xdWV1ZShjaGFyIGRhdGEpCkBAIC0yODcsNyArMjg0LDcgQEAKIAlpZihpbl9wb2ludGVyPT1vdXRfcG9pbnRlcikKIAkJcmV0dXJuKDApOyAvKiBubyBkYXRhICovCiAJZWxzZQotCQlyZXR1cm4oMSk7CQorCQlyZXR1cm4oMSk7CiB9CiAvKiBnZXRzIHRoZSBjaGFyYWN0ZXIgZnJvbSB0aGUgcXVldWUgKi8KIGludCBrYmRfZ2V0Yyh2b2lkKQpAQCAtMjk1LDEzICsyOTIsMTMgQEAKIAljaGFyIGM7CiAKIAl3aGlsZShpbl9wb2ludGVyPT1vdXRfcG9pbnRlcik7Ci0JaWYoKG91dF9wb2ludGVyKzEpPT1LQkRfQlVGRkVSX0xFTikgCisJaWYoKG91dF9wb2ludGVyKzEpPT1LQkRfQlVGRkVSX0xFTikKIAkJb3V0X3BvaW50ZXI9MDsKIAllbHNlCiAJCW91dF9wb2ludGVyKys7CiAJYz1rYmRfYnVmZmVyW291dF9wb2ludGVyXTsKIAlyZXR1cm4gKGludCljOwotCQorCiB9CiAKIApAQCAtMzI0LDcgKzMyMSw3IEBACiAJa2JkX3NlbmRfZGF0YShLQkRfQ01EX1NFVF9MRURTKTsKIAlrYmRfc2VuZF9kYXRhKGxlZHMpOwogfQotCQorCiAKIHZvaWQgaGFuZGxlX2tleWJvYXJkX2V2ZW50KHVuc2lnbmVkIGNoYXIgc2NhbmNvZGUpCiB7CkBAIC0zODEsMTEgKzM3OCwxMSBAQAogCQljb25zb2xlX2NoYW5nZWQgPSAxOwogCSAgICB9CiAJICAgIHJldHVybjsKLQljYXNlIDB4MkE6IAorCWNhc2UgMHgyQToKIAkJY2FzZSAweDM2OiAvKiBzaGlmdCBwcmVzc2VkICovCiAJCQlzaGlmdD0xOwogCQkJcmV0dXJuOyAvKiBkbyBub3RoaW5nIGVsc2UgKi8KLQkJY2FzZSAweEFBOiAKKwkJY2FzZSAweEFBOgogCQljYXNlIDB4QjY6IC8qIHNoaWZ0IHJlbGVhc2VkICovCiAJCQlzaGlmdD0wOwogCQkJcmV0dXJuOyAvKiBkbyBub3RoaW5nIGVsc2UgKi8KQEAgLTQwOCwxNSArNDA1LDE1IEBACiAJCWNhc2UgMHgzQTogLyogY2Fwc2xvY2sgcHJlc3NlZCAqLwogCQkJY2Fwc19sb2NrPX5jYXBzX2xvY2s7CiAJCQlrYmRfc2V0X2xlZHMoKTsKLQkJCXJldHVybjsgCisJCQlyZXR1cm47CiAJCWNhc2UgMHg0NTogLyogbnVtbG9jayBwcmVzc2VkICovCiAJCQludW1fbG9jaz1+bnVtX2xvY2s7CiAJCQlrYmRfc2V0X2xlZHMoKTsKLQkJCXJldHVybjsgCisJCQlyZXR1cm47CiAJCWNhc2UgMHhDNjogLyogc2Nyb2xsIGxvY2sgcmVsZWFzZWQgKi8KIAkJY2FzZSAweEM1OiAvKiBudW0gbG9jayByZWxlYXNlZCAqLwogCQljYXNlIDB4QkE6IC8qIGNhcHMgbG9jayByZWxlYXNlZCAqLwotCQkJcmV0dXJuOyAvKiBqdXN0IHN3YWxsb3cgKi8gCisJCQlyZXR1cm47IC8qIGp1c3Qgc3dhbGxvdyAqLwogCX0KIAlpZigoc2NhbmNvZGUmMHg4MCk9PTB4ODApIC8qIGtleSByZWxlYXNlZCAqLwogCQlyZXR1cm47CkBAIC00NTYsNyArNDUzLDcgQEAKIAkJUFJJTlRGKCJ1bmtvd24gc2NhbmNvZGUgJVhcbiIsc2NhbmNvZGUpOwogCQlyZXR1cm47IC8qIHN3YWxsb3cgdW5rbm93biBjb2RlcyAqLwogCX0KLQkKKwogCWtiZF9wdXRfcXVldWUoa2V5Y29kZSk7CiAJUFJJTlRGKCIleFxuIixrZXljb2RlKTsKIH0KQEAgLTQ5NCwzMCArNDkxLDI5IEBACiB9CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBMb3dsZXZlbCBQYXJ0IG9mIGtleWJvYXJkIHNlY3Rpb24KLSAqLyAgCisgKi8KIHVuc2lnbmVkIGNoYXIga2JkX3JlYWRfc3RhdHVzKHZvaWQpCiB7CiAJcmV0dXJuKGluOChDRkdfSVNBX0lPX0JBU0VfQUREUkVTUyArIEtEQl9DT01NQU5EX1BPUlQpKTsKLX0gCi0gIAorfQorCiB1bnNpZ25lZCBjaGFyIGtiZF9yZWFkX2lucHV0KHZvaWQpCiB7CiAJcmV0dXJuKGluOChDRkdfSVNBX0lPX0JBU0VfQUREUkVTUyArIEtEQl9EQVRBX1BPUlQpKTsKLX0gCit9CiAKIHZvaWQga2JkX3dyaXRlX2NvbW1hbmQodW5zaWduZWQgY2hhciBjbWQpCiB7CiAJb3V0OChDRkdfSVNBX0lPX0JBU0VfQUREUkVTUyArIEtEQl9DT01NQU5EX1BPUlQsY21kKTsKLX0gCi0gIAorfQorCiB2b2lkIGtiZF93cml0ZV9vdXRwdXQodW5zaWduZWQgY2hhciBkYXRhKQogewogCW91dDgoQ0ZHX0lTQV9JT19CQVNFX0FERFJFU1MgKyBLREJfREFUQV9QT1JULCBkYXRhKTsKLX0gCi0gCit9CisKIGludCBrYmRfcmVhZF9kYXRhKHZvaWQpCiB7CiAJaW50IHZhbDsKQEAgLTUzNyw3ICs1MzMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAlpbnQgdmFsOwotCQorCiAJdGltZW91dCA9IEtCRF9USU1FT1VUOwogCXZhbD1rYmRfcmVhZF9kYXRhKCk7CiAJd2hpbGUodmFsIDwgMCkKQEAgLTYwMiw3ICs1OTgsNyBAQAogCSAqIElmIHRoZSB0ZXN0IGlzIHN1Y2Nlc3NmdWwgYSB4NTUgaXMgcGxhY2VkIGluIHRoZSBpbnB1dCBidWZmZXIuCiAJICovCiAJa2JkX3dyaXRlX2NvbW1hbmRfdyhLQkRfQ0NNRF9TRUxGX1RFU1QpOwotCWlmIChrYmRfd2FpdF9mb3JfaW5wdXQoKSAhPSAweDU1KSAKKwlpZiAoa2JkX3dhaXRfZm9yX2lucHV0KCkgIT0gMHg1NSkKIAkJcmV0dXJuICJLYmQ6ICAgZmFpbGVkIHNlbGYgdGVzdCI7CiAJLyoKIAkgKiBQZXJmb3JtIGEga2V5Ym9hcmQgaW50ZXJmYWNlIHRlc3QuICBUaGlzIGNhdXNlcyB0aGUgY29udHJvbGxlcgpAQCAtNjEwLDcgKzYwNiw3IEBACiAJICogdGVzdCBhcmUgcGxhY2VkIGluIHRoZSBpbnB1dCBidWZmZXIuCiAJICovCiAJa2JkX3dyaXRlX2NvbW1hbmRfdyhLQkRfQ0NNRF9LQkRfVEVTVCk7Ci0JaWYgKGtiZF93YWl0X2Zvcl9pbnB1dCgpICE9IDB4MDApIAorCWlmIChrYmRfd2FpdF9mb3JfaW5wdXQoKSAhPSAweDAwKQogCQlyZXR1cm4gIktiZDogICBpbnRlcmZhY2UgZmFpbGVkIHNlbGYgdGVzdCI7CiAJLyoKIAkgKiBFbmFibGUgdGhlIGtleWJvYXJkIGJ5IGFsbG93aW5nIHRoZSBrZXlib2FyZCBjbG9jayB0byBydW4uCkBAIC02MjgsNyArNjI0LDcgQEAKIAlkbyB7CiAJCWtiZF93cml0ZV9vdXRwdXRfdyhLQkRfQ01EX1JFU0VUKTsKIAkJc3RhdHVzID0ga2JkX3dhaXRfZm9yX2lucHV0KCk7Ci0JCWlmIChzdGF0dXMgPT0gS0JEX1JFUExZX0FDSykgCisJCWlmIChzdGF0dXMgPT0gS0JEX1JFUExZX0FDSykKIAkJCWJyZWFrOwogCQlpZiAoc3RhdHVzICE9IEtCRF9SRVBMWV9SRVNFTkQpCiAJCXsKQEAgLTY5Miw4ICs2ODgsMyBAQAogewogCWhhbmRsZV9rYmRfZXZlbnQoKTsKIH0KLQotCi0KLS8qIGVvZiAqLwotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3BzMmtiZC5oIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9wczJrYmQuaAppbmRleCA5NWZjMTRkLi5mYzVjNDIyIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3BzMmtiZC5oCisrKyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvcHMya2JkLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDAyCiAgKiBKb2huIFcuIExpbnZpbGxlLCBsaW52aWxsZUB0dXhkcml2ZXIuY29tCi0gKiAKKyAqCiAgKiBNb2RpZmllZCBmcm9tIGNvZGUgZm9yIHN1cHBvcnQgb2YgTUlQNDA1IGFuZCBQSVA0MDUgYm9hcmRzLiAgUHJldmlvdXMKICAqIGNvcHlyaWdodCBmb2xsb3dzLgogICoKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lmbmRlZiBfS0JEX0hfCiAjZGVmaW5lIF9LQkRfSF8KLSAgIAorCiBleHRlcm4gaW50IGtiZF90ZXN0Yyh2b2lkKTsKIGV4dGVybiBpbnQga2JkX2dldGModm9pZCk7CiBleHRlcm4gdm9pZCBrYmRfaW50ZXJydXB0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9zaG9ydF90eXBlcy5oIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9zaG9ydF90eXBlcy5oCmluZGV4IDIyZGYzYzkuLjE4NDBkMjggMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0Uvc2hvcnRfdHlwZXMuaAorKysgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3Nob3J0X3R5cGVzLmgKQEAgLTIsNyArMiw3IEBACiAgKiBzaG9ydCB0eXBlIG5hbWVzCiAgKgogICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBIeXBlcmlvbiBFbnRlcnRhaW5tZW50LCBUaG9tYXNGQGh5cGVyaW9uLWVudGVydGFpbm1lbnQuY29tIAorICogSHlwZXJpb24gRW50ZXJ0YWlubWVudCwgVGhvbWFzRkBoeXBlcmlvbi1lbnRlcnRhaW5tZW50LmNvbQogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9zbWJ1cy5jIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9zbWJ1cy5jCmluZGV4IDYxNjAwNWUuLmRlMTM5NzcgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0Uvc21idXMuYworKysgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3NtYnVzLmMKQEAgLTI2LDE4ICsyNiwxOCBAQAogewogICAgIGludCBpOwogICAgIGludCBsZXZlbDsKLSAgICAKKwogICAgIG91dF9ieXRlKDB4QTUzOSwgMHgwMCk7CiAKICAgICBsZXZlbCA9IDA7CiAKICAgICBmb3IgKGk9MDsgaTw4OyBpKyspCiAgICAgewotCWlmICgod3JpdGVtZSAmIDB4ODApID09IChsZXZlbDw8NykpIAotICAgICAgICB7CisJaWYgKCh3cml0ZW1lICYgMHg4MCkgPT0gKGxldmVsPDw3KSkKKwl7CiAJICAgIC8qIEJpdCBkaWQgbm90IGNoYW5nZSwgcmV3cml0ZSBzdHJvYmUgKi8KIAkgICAgb3V0X2J5dGUoMHhBNTM5LCBsZXZlbCB8IDB4MDIpOwotCSAgICBvdXRfYnl0ZSgweEE1MzksIGxldmVsKTsgCisJICAgIG91dF9ieXRlKDB4QTUzOSwgbGV2ZWwpOwogCX0KIAllbHNlCiAJewpAQCAtNjgsNyArNjgsNyBAQAogICAgIH0KIAogICAgIHJldHVybiByZXRtZTsKLX0gCit9CiAKIGludCBzbV9nZXRfYWNrKHZvaWQpCiB7CkBAIC0xMDYsMzYgKzEwNiwzNiBAQAogCiBpbnQgc21fcmVhZF9ieXRlX2Zyb21fZGV2aWNlKHVpbnQ4IGFkZHIsIHVpbnQ4IHJlZywgdWludDggKnN0b3JhZ2UpCiB7Ci0gICAgLy8gUyBBZGRyIFdyCisgICAgLyogUyBBZGRyIFdyICovCiAgICAgc21fd3JpdGVfbW9kZSgpOwogICAgIHNtX3NlbmRfc3RhcnQoKTsKICAgICBzbV93cml0ZV9ieXRlKChhZGRyPDwxKSk7Ci0gICAgCi0gICAgLy8gW0FdCisKKyAgICAvKiBbQV0gKi8KICAgICBzbV9yZWFkX21vZGUoKTsKICAgICBpZiAoc21fZ2V0X2FjaygpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CiAKLSAgICAvLyBDb21tCisgICAgLyogQ29tbSAqLwogICAgIHNtX3dyaXRlX21vZGUoKTsKICAgICBzbV93cml0ZV9ieXRlKHJlZyk7Ci0gICAgCi0gICAgLy8gW0FdCisKKyAgICAvKiBbQV0gKi8KICAgICBzbV9yZWFkX21vZGUoKTsKICAgICBpZiAoc21fZ2V0X2FjaygpID09IEZBTFNFKSByZXR1cm4gRkFMU0U7CiAKLSAgICAvLyBTIEFkZHIgUmQKKyAgICAvKiBTIEFkZHIgUmQgKi8KICAgICBzbV93cml0ZV9tb2RlKCk7CiAgICAgc21fc2VuZF9zdGFydCgpOwogICAgIHNtX3dyaXRlX2J5dGUoKGFkZHI8PDEpfDEpOwotICAgIAotICAgIC8vIFtBXQorCisgICAgLyogW0FdICovCiAgICAgc21fcmVhZF9tb2RlKCk7CiAgICAgaWYgKHNtX2dldF9hY2soKSA9PSBGQUxTRSkgcmV0dXJuIEZBTFNFOwogCi0gICAgLy8gW0RhdGFdCisgICAgLyogW0RhdGFdICovCiAgICAgKnN0b3JhZ2UgPSBzbV9yZWFkX2J5dGUoKTsKLSAgICAKLSAgICAvLyBOQQorCisgICAgLyogTkEgKi8KICAgICBzbV93cml0ZV9tb2RlKCk7CiAgICAgc21fd3JpdGVfbmFjaygpOwogICAgIHNtX3NlbmRfc3RvcCgpOwpAQCAtMTQ0LDEwICsxNDQsMTAgQEAKIH0KIAogdm9pZCBzbV9pbml0KHZvaWQpCi17ICAKK3sKICAgICAvKiBTd2l0Y2ggdG8gUE1DIG1vZGUgKi8KICAgICBwY2lfd3JpdGVfY2ZnX2J5dGUoMCwgMCwgUkVHX0dST1VQLCAodWludDgpKFJFR19HUk9VUF9TUEVDSUFMfFJFR19HUk9VUF9QT1dFUikpOwotIAorCiAgICAgLyogU2V0IEdQSU8gQmFzZSAqLwogICAgIHBjaV93cml0ZV9jZmdfbG9uZygwLCAwLCAweDQwLCAweGE1MDApOwogCkBAIC0xNTUsMTIgKzE1NSwxMiBAQAogICAgIHBjaV93cml0ZV9jZmdfYnl0ZSgwLCAwLCAweDQ0LCAweDExKTsKIAogICAgIC8qIFNldCBib3RoIEdQSU8gMCBhbmQgMSBhcyBvdXRwdXQgKi8KLSAgICBvdXRfYnl0ZSgweEE1M0EsIDB4MDMpOyAKKyAgICBvdXRfYnl0ZSgweEE1M0EsIDB4MDMpOwogfQogCiAKIHZvaWQgc21fdGVybSh2b2lkKQoteyAgCit7CiAgICAgLyogU3dpdGNoIHRvIG5vcm1hbCBtb2RlICovCiAgICAgcGNpX3dyaXRlX2NmZ19ieXRlKDAsIDAsIFJFR19HUk9VUCwgMCk7CiB9CkBAIC0xNzMsNyArMTczLDcgQEAKICNpZiAwCiAgICAgLyogU3dpdGNoIHRvIFBNQyBtb2RlICovCiAgICAgcGNpX3dyaXRlX2NmZ19ieXRlKDAsIDAsIFJFR19HUk9VUCwgKHVpbnQ4KShSRUdfR1JPVVBfU1BFQ0lBTHxSRUdfR1JPVVBfUE9XRVIpKTsKLSAKKwogICAgIC8qIFNldCBHUElPIEJhc2UgKi8KICAgICBwY2lfd3JpdGVfY2ZnX2xvbmcoMCwgMCwgMHg0MCwgMHhhNTAwKTsKIApAQCAtMTgxLDcgKzE4MSw3IEBACiAgICAgcGNpX3dyaXRlX2NmZ19ieXRlKDAsIDAsIDB4NDQsIDB4MTEpOwogCiAgICAgLyogU2V0IGJvdGggR1BJTyAwIGFuZCAxIGFzIG91dHB1dCAqLwotICAgIG91dF9ieXRlKDB4QTUzQSwgMHgwMyk7IAorICAgIG91dF9ieXRlKDB4QTUzQSwgMHgwMyk7CiAjZW5kaWYKIAogICAgIHNtX2luaXQoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0Uvc3RhcnQudHh0IGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9zdGFydC50eHQKaW5kZXggNWM3YjU0MS4uZTQyMTQ2MiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9zdGFydC50eHQKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9zdGFydC50eHQKQEAgLTEsMjAxICsxLDE5OCBAQAotDQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0gICAgICAgIC8qICAgICAgICAgICAgICBURVJPTiBBcnRpY2lhIC8gU0RSQU0gSW5pdCAgICAgICAgICAgICAgKi8NCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0NCi0qICAgICAgIFhEX0NUTCAgPSAweDgxMDAwMDAwCQkJKDB4NzQpDQotDQotKiAgICAgICBIQlVTX0FDQ19DVExfMCAmPSAweEZGRkZGREZGCQkoMHg1YykNCi0gICAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgYnVzIGFjY2VzcyBjdGwgcmVnIDIoNWUpICovDQotICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgLSBDUFUgcmVhZCBmcm9tIG1lbW9yeSBkYXRhIG9uZSBjbG9jayBhZnRlciBkYXRhIGlzIGxhdGNoZWQgKi8NCi0NCi0qICAgICAgIEdMT0JMX0lORk9fMCB8PSAweDAwMDA0MDAwCQkoMHg1MCkNCi0gICAgICAgICAgICAgICAgICAgICAgLyogZ2xvYmFsIGluZm8gcmVnaXN0ZXIgMiAoNTIpLCBBR1AvUENJIGJ1cyAxIGFyYml0ZXIgaXMgYWRkcmVzc2VkIGluIEFydGljaWEgUyAqLw0KLQ0KLSAgICAgICAgUENJXzFfU0JfQ09ORklHXzAgfD0gMHgwMDAwMDQwMCAgICAgICAgICgweDgwZDApDQotICAgICAgICAgICAgICAgICAgICAgICAgLyogUENJMSBzaWRlIGJhbmQgY29uZmlnIHJlZyAyIChkMiksIGVuYWJsZSByZWFkIGFjY2VzIHdoaWxlIHdyaXRlIGJ1ZmZlciBub3QgZW1wdHkgKi8NCi0NCi0gICAgICAgIE1FTV9SQVNfQ1RMXzAgfD0gMHgzZjAwMDAwMAkJKDB4Y2MpDQotCQkgICAgICAmPSAweDNmZmZmZmZmDQotICAgICAgICAgICAgICAgICAgICAgIC8qIFJBUyBwYXJrIGNvbnRyb2wgcmVnIDAoY2MpLCBwYXJrIGFjY2VzcyBlbmFibGUgaXMgc2V0ICovDQotCQkgICAgICANCi0gICAgICAgIEhPU1RfUkRCVUZfQ1RMIHw9IDB4MTAwMDAwMDAJCSgweDcwKQ0KLQkgICAgICAgICAgICAgICAmPSAweDEwZmZmZmZmDQotICAgICAgICAgICAgICAgICAgICAgIC8qIGhvc3QgcmVhZCBidWZmZXIgY29udHJvbCByZWcsIGVuYWJsZSBwcmVmZXRjaCBmb3IgQ1BVIHJlYWQgZnJvbSBEUkFNIGNvbnRyb2wgKi8NCi0NCi0gICAgICAgIEhCVVNfQUNDX0NUTF8wIHw9IDB4MDEwMDAwMWYJCSgweDVjKQ0KLQkJICAgICAgICY9IDB4ZjFmZmZmZmYNCi0gICAgICAgICAgICAgICAgICAgICAgLyogaG9zdCBidXMgYWNjZXNzIGNvbnRyb2wgcmVnaXN0ZXIsIGVuYWJsZSBDUFUgYWRkcmVzcyBidXMgcGlwZSBjb250cm9sCSovDQotICAgICAgICAgICAgICAgICAgICAgIC8qIHR3byBvdXRzdGFuZGluZyByZXF1ZXN0cywgICoqKiBjaGFuZ2VkIHRvIDIgZnJvbSAzCQkJCSovDQotICAgICAgICAgICAgICAgICAgICAgIC8qIGVuYWJsZSBsaW5lIG1lcmdlIHdyaXRlIGNvbnRyb2wgZm9yIENQVSB3cml0ZSB0byBzeXN0ZW0gbWVtb3J5LCBQQ0kgMQkqLw0KLSAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgUENJIDAgYnVzIG1lbW9yeTsgZW5hYmxlIHBhZ2UgbWVyZ2Ugd3JpdGUgY29udHJvbCBmb3Igd3JpdGUgdG8JCSovDQotICAgICAgICAgICAgICAgICAgICAgIC8qIFBDSSBidXMgMCAmIGJ1cyAxIG1lbW9yeQkJCQkJCQkqLw0KLQ0KLSAgICAgICAgU1JBTV9DVEwgfD0gMHgwMDAwNDAwMAkJCSgweGM4KQ0KLQkJICY9IDB4ZmZiZmY3ZmYNCi0gICAgICAgICAgICAgICAgICAgICAgLyogRFJBTSBkZXRhaWwgdGltaW5nIGNvbnRyb2wgcmVnaXN0ZXIgMSAoY2EpLCBiaXQgMyBzZXQgdG8gMAkqLw0KLSAgICAgICAgICAgICAgICAgICAgICAvKiBEUkFNIHN0YXJ0IGFjY2VzcyBsYXRlbmN5IGNvbnRyb2wgLSB3YWl0IGZvciBvbmUgY2xvY2sJKi8NCi0gICAgICAgICAgICAgICAgICAgICAgLyogZmY5ZiBjaGFuZ2VkIHRvIGZmYmYJCQkJCQkqLw0KLSAgICANCi0gICAgICAgIERJTTBfVElNX0NUTF8wID0gMHg3MzdkNzM3ZCAgICAgICAgICAgICAoMHhjOSkNCi0gICAgICAgICAgICAgICAgICAgICAgLyogRFJBTSB0aW1pbmcgY29udHJvbCBmb3IgZGltbTAgJiBkaW1tMTsgc2V0IHdhaXQgb25lIGNsb2NrCSovDQotICAgICAgICAgICAgICAgICAgICAgIC8qIGN5Y2xlIGZvciBuZXh0IGRhdGEgYWNjZXNzIAkJCQkJKi8NCi0NCi0gICAgICAgIERJTTJfVElNX0NUTF8wID0gMHg3MzdkNzM3ZCAgICAgICAgICAgICAoMHhjYSkNCi0gICAgICAgICAgICAgICAgICAgICAgLyogRFJBTSB0aW1pbmcgY29udHJvbCBmb3IgZGltbTIgJiBkaW1tMzsgc2V0IHdhaXQgb25lIGNsb2NrCSovDQotICAgICAgICAgICAgICAgICAgICAgIC8qIGN5Y2xlIGZvciBuZXh0IGRhdGEgYWNjZXNzIAkJCQkJKi8NCi0NCi0gICAgICAgIERJTTBfQk5LMF9DVExfMCA9IEJOSzBfUkFNX1NJWl8xMjhNQiAgICAoMHg5MCkNCi0JICAgICAgICAgICAgICAvKiBzZXQgZGltbTAgYmFuazAgZm9yIDEyOCBNQgkqLw0KLQ0KLSAgICAgICAgRElNMF9CTksxX0NUTF8wID0gQk5LMV9SQU1fU0laXzEyOE1CICAgICgweDk0KQ0KLSAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgZGltbTAgZm9yICBiYW5rMQkJKi8NCi0NCi0gICAgICAgIERJTTBfVElNX0NUTF8wID0gMHhmM2JmMDAwMCAgICAgICAgICAgICAoMHhjOSkNCi0gICAgICAgICAgICAgICAgICAgICAgLyogZGltbTAgdGltaW5nIGNvbnRyb2wgcmVnaXN0ZXI7IFJBUyAtIENBUyBsYXRlbmN5IC0gNCBjbG9jawkJKi8NCi0gICAgICAgICAgICAgICAgICAgICAgLyogQ0FTIGFjY2VzcyBsYXRlbmN5IC0gMyB3YWl0OyBwcmUtY2hhcmdlIGxhdGVuY3kgLSAzIHdhaXQJCSovDQotICAgICAgICAgICAgICAgICAgICAgIC8qIHByZS1jaGFyZ2UgY29tbWFuZCBwZXJpb2QgY29udHJvbCAtIDUgY2xvY2s7IHdhaXQgb25lIGNsb2NrCQkqLw0KLSAgICAgICAgICAgICAgICAgICAgICAvKiBjeWNsZSBmb3IgbmV4dCBkYXRhIGFjY2VzczsgcmVhZCB0byB3cml0ZSBhY2Nlc3MgbGF0ZW5jeSBjb250cm9sCSovDQotICAgICAgICAgICAgICAgICAgICAgIC8qIC0gMiBjbG9jayBjeWNsZXMJCQkJCQkJKi8NCi0NCi0gICAgICAgIERSQU1fR0JMX0NUTF8wIHw9IDB4MDAwMDAxMDAgICAgICAgICAgICAoMHhjMCkNCi0JCSAgICAgICAmPSAweGZmZmYwMWZmDQotICAgICAgICAgICAgICAgICAgICAgIC8qIG1lbW9yeSBnbG9iYWwgY29udHJvbCByZWdpc3RlciAtIHN1cHBvcnQgYnVmZmVyIHNkcmFtIG9uIGJhbmsgMAkqLw0KLQ0KLSAgICAgICAgRFJBTV9FQ0NfQ1RMXzAgfD0gMHgwMDI2MDAwMAkJKDB4YzQpDQotCQkgICAgICAgJj0gMHhmZjI2ZmZmZg0KLSAgICAgICAgICAgICAgICAgICAgICAvKiBlbmFibGUgRUNDOyBlbmFibGUgcmVhZCwgbW9kaWZ5LCB3cml0ZSBjb250cm9sCSovDQotIA0KLSAgICAgICAgRFJBTV9SRUZfQ1RMXzAgPSBEUkFNX1JFRl9EQVRBICAgICAgICAgICgweGI4KQ0KLQkJICAgICAgLyogc2V0IERSQU0gcmVmcmVzaCBwYXJhbWV0ZXJzICoqKiBjaGFuZ2VkIHRvIDAwOTQwMTAwCSovDQotDQotICAgICAgICBub3ANCi0gICAgICAgIG5vcA0KLSAgICAgICAgbm9wDQotICAgICAgICBub3ANCi0gICAgICAgIG5vcA0KLQ0KLSAgICAgICAgRFJBTV9FQ0NfQ1RMXzAgfD0gMHgyMDI0MzI4MAkJKDB4YzQpDQotICAgICAgICAgICAgICAgICAgICAgIC8qIHR1cm4gb2ZmIGVjYwkJKi8NCi0gICAgICAgICAgICAgICAgICAgICAgLyogZm9yIFNEUkFNIGJhbmsgMAkqLw0KLQ0KLSAgICAgICAgRFJBTV9FQ0NfQ1RMXzAgfD0gMHgyMDI0MzI5MCAgICAgICAgICAgICgweGM0KSA/DQotICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBTRFJBTSBiYW5rIDEJKi8NCi0gDQotDQotLyogQWRkaXRpb25hbCBTdHVmZi4uLiovDQotDQotICAgICAgICBHTE9CTF9DVFJMIHw9IDB4MjAwMDBiMDAJCSgweDU0KQ0KLQ0KLSAgICAgICAgUENJXzBfU0JfQ09ORklHIHw9IDB4MDQxMDAwMDcJCSgweGQwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAvKiBQQ0kgMCBTaWRlIGJhbmQgY29uZmlnIHJlZyovDQotDQotICAgICAgICAweDgwMDAwODNjIHw9IDB4MDAwODAwMDANCi0gICAgICAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBWR0EgZGVjb2RlIG9uIFBDSSBCdXMgMSAqLw0KLQ0KLQ0KLS8qRW5kIEFkZGl0aW9uYWwgU3R1ZmYuLiovDQotDQotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0gICAgICAgIC8qICAgICAgICAgICAgICBURVJPTiBzZXJpYWwgcG9ydCBpbml0aWFsaXphdGlvbiBjb2RlICAgICAgICAgICAqLw0KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQotDQotCTB4ODQzODAwODAgfD0gMHgwMDAzMDAwMA0KLSAgICAgICAgICAgICAgICAgICAgIC8qIGVuYWJsZSBzdXBlciBJTyBjb25maWd1cmF0aW9uIFZJQSBjaGlwIFJlZ2lzdGVyIDg1CSovDQotCQkgICAgIC8qIEVuYWJsZSBzdXBlciBJL08gY29uZmlnIG1vZGUgKi8NCi0NCi0gICAgICAgIDB4ZmUwMDAzZjAgPSAweGUyDQotICAgICAgICBibCBkZWxheTENCi0NCi0gICAgICAgIDB4ZmUwMDAzZjEgPSAweDBmDQotCWJsIGRlbGF5MQ0KLQkgICAgICAgICAgICAvKiBlbmFibGUgY29tMSAmIGNvbTIsIHBhcmFsbGVsIHBvcnQgZGlzYWJsZWQgKi8gDQotCQ0KLQkweGZlMDAwM2YwID0gMHhlNw0KLSAgICAgICAgYmwgZGVsYXkxDQotCSAgICAgICAgICAgIC8qIGxldCdzIG1ha2UgY29tMSBiYXNlIGFzIDB4M2Y4ICovDQotICAgICAgICANCi0gICAgICAgIDB4ZmUwMDAzZjEgPSAweGZlDQotICAgICAgICBibCBkZWxheTENCi0NCi0gICAgICAgIDB4ZmUwMDAzZjAgPSAweGU4DQotICAgICAgICBibCBkZWxheTEgICAgICAgICAgIA0KLQkJICAgIC8qIGxldCdzIG1ha2UgY29tMiBiYXNlIGFzIDB4MmY4ICovDQotDQotCTB4ZmUwMDAzZjEgPSAweGJlDQotDQotCTB4ODQzODAwODAgJj0gMHhmZmZkZmZmZg0KLSAgICAgICAgICAgICAgICAgICAgLyogY2xvc2luZyBzdXBlciBJTyBjb25maWd1cmF0aW9uIFZJQSBjaGlwIFJlZ2lzdGVyIDg1ICAgKi8NCi0gICAgIA0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLQ0KLSAgICAgICAgMHhmZTAwMDNmYiA9IDB4ODMNCi0JYmwgZGVsYXkxDQotICAgICAgICAgICAgICAgICAgIC8qbGF0Y2ggZW5hYmxlIHdvcmQgbGVuZ3RoIC04IGJpdCAqLyAgICAgICAgIC8qIHNldCBtc2xhYiBiaXQJKi8NCi0gICAgICAgIDB4ZmUwMDAzZjggPSAweDBjDQotCWJsIGRlbGF5MQ0KLSAgICAgICAgICAgICAgICAgICAvKiBzZXQgYmF1ZCByYXRlIGxzYiBmb3IgOTYwMCBiYXVkCSovDQotICAgICAgICAweGZlMDAwM2Y5ID0gMHgwDQotCWJsIGRlbGF5MQ0KLSAgICAgICAgICAgICAgICAgICAvKiBzZXQgYmF1ZCByYXRlIG1zYiBmb3IgOTYwMCBiYXVkCSovDQotICAgICAgICAweGZlMDAwM2ZiICA9IDB4MDMNCi0JYmwgZGVsYXkxDQotICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0IG1zbGFiCSovDQotDQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLSAgICAgICAgLyogICAgICAgICAgICAgIEVORCBURVJPTiBTZXJpYWwgUG9ydCBJbml0aWFsaXphdGlvbiBDb2RlICAgICAgICovDQotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0NCi0gICANCi0NCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLSAgICAgICAgLyogICAgICBFTkQgVEVST04gQXJ0aWNpYSAvIFNEUkFNIEluaXRpYWxpemF0aW9uIGNvZGUgICAgICAgICAgICovDQotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0NCi1Qcm9wb3NlZCBmcm9tIERvY3VtZW50YXRpb246DQotDQotd3JpdGUgZG1lbSAweGZlYzAwY2Y4IDB4NTAwMDAwODANCi13cml0ZSBkbWVtIDB4ZmVlMDBjZmMgMHhjMDMwNTQxMQ0KLQ0KLSAgICAgIFdyaXRlcyB0byBpbmRleCAweDUwLTB4NTMuIA0KLSAgICAgIDB4NTA6IEdsb2JhbCBJbmZvcm1hdGlvbiBSZWdpc3RlciAwDQotCSAgICAweEMwID0gTGl0dGxlIEVuZGlhbiBDUFUsIFNlcXVlbnRpYWwgb3JkZXIgQnVyc3QNCi0gICAgICAweDUxOiBHbG9iYWwgSW5mb3JtYXRpb24gUmVnaXN0ZXIgMQ0KLQkgICAgUmVhZCBvbmx5LCAweDMwID0gUHJvdmlkZXMgUG93ZXJQQyBhbmQgWDg2IHN1cHBvcnQNCi0gICAgICAweDUyOiBHbG9iYWwgSW5mb3JtYXRpb24gUmVnaXN0ZXIgMg0KLQkgICAgMHgwNSA9IDY0LzEyOCBiaXQgQ1BVIGJ1cyBzdXBwb3J0DQotICAgICAgMHg1MzogR2xvYmFsIEluZm9ybWF0aW9uIFJlZ2lzdGVyIDMNCi0JICAgIDB4ODAgPSBQQ0kgQnVzIDAgZ3JhbnQgYWN0aXZlIHRpbWUgaXMgMSBjbG9jayBhZnRlciBSRVEjIGRlYXNzZXJ0ZWQNCi0NCi13cml0ZSBkbWVtIDB4ZmVjMDBjZjggMHg1YzAwMDA4MA0KLXdyaXRlIGRtZW0gMHhmZWUwMGNmYyAweGIzMDAwMTFGDQotDQotd3JpdGUgZG1lbSAweGZlYzAwY2Y4IDB4YzgwMDAwODANCi13cml0ZSBkbWVtIDB4ZmVlMDBjZmMgMHgwMDIwZjEwMA0KLQ0KLXdyaXRlIGRtZW0gMHhmZWMwMGNmOCAweDkwMDAwMDgwDQotd3JpdGUgZG1lbSAweGZlZTAwY2ZjIDB4MDA3ZmU3MDANCi0NCi13cml0ZSBkbWVtIDB4ZmVjMDBjZjggMHg5NDAwMDgwDQotd3JpdGUgZG1lbSAweGZlZTAwY2ZjIDB4MDA3ZmU3MDANCi0NCi13cml0ZSBkbWVtIDB4ZmVjMDBjZjggMHhiMDAwMDA4MA0KLXdyaXRlIGRtZW0gMHhmZWUwMGNmYyAweDczN2Q3MzdkDQotDQotd3JpdGUgZG1lbSAweGZlYzAwY2Y4IDB4YjQwMDAwODANCi13cml0ZSBkbWVtIDB4ZmVlMDBjZmMgMHg3MzdkNzM3ZA0KLQ0KLXdyaXRlIGRtZW0gMHhmZWMwMGNmOCAweGMwMDAwMDgwDQotd3JpdGUgZG1lbSAweGZlZTAwY2ZjIDB4NDAwMDU1MDANCi0NCi13cml0ZSBkbWVtIDB4ZmVjMDBjZjggMHhiODAwMDA4MA0KLXdyaXRlIGRtZW0gMHhmZWUwMGNmYyAweDAwOTQwMTAwDQotDQotd3JpdGUgZG1lbSAweGZlYzAwY2Y4IDB4YzQwMDAwODANCi13cml0ZSBkbWVtIDB4ZmVlMDBjZmMgMHgwMDAwMzI4MA0KLQ0KLXdyaXRlIGRtZW0gMHhmZWMwMGNmOCAweGM0MDAwMDgwDQotd3JpdGUgZG1lbSAweGZlZTAwY2ZjIDB4MDAwMDMyOTANCi0NCi0NCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLyogICAgICAgICAgICAgIFRFUk9OIEFydGljaWEgLyBTRFJBTSBJbml0ICAgICAgICAgICAgICAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworKiAgICAgICBYRF9DVEwgID0gMHg4MTAwMDAwMAkJCSgweDc0KQorCisqICAgICAgIEhCVVNfQUNDX0NUTF8wICY9IDB4RkZGRkZERkYJCSgweDVjKQorCQkgICAgICAgLyogaG9zdCBidXMgYWNjZXNzIGN0bCByZWcgMig1ZSkgKi8KKwkJICAgICAgIC8qIHNldCAtIENQVSByZWFkIGZyb20gbWVtb3J5IGRhdGEgb25lIGNsb2NrIGFmdGVyIGRhdGEgaXMgbGF0Y2hlZCAqLworCisqICAgICAgIEdMT0JMX0lORk9fMCB8PSAweDAwMDA0MDAwCQkoMHg1MCkKKwkJICAgICAgLyogZ2xvYmFsIGluZm8gcmVnaXN0ZXIgMiAoNTIpLCBBR1AvUENJIGJ1cyAxIGFyYml0ZXIgaXMgYWRkcmVzc2VkIGluIEFydGljaWEgUyAqLworCisJUENJXzFfU0JfQ09ORklHXzAgfD0gMHgwMDAwMDQwMCAgICAgICAgICgweDgwZDApCisJCQkvKiBQQ0kxIHNpZGUgYmFuZCBjb25maWcgcmVnIDIgKGQyKSwgZW5hYmxlIHJlYWQgYWNjZXMgd2hpbGUgd3JpdGUgYnVmZmVyIG5vdCBlbXB0eSAqLworCisJTUVNX1JBU19DVExfMCB8PSAweDNmMDAwMDAwCQkoMHhjYykKKwkJICAgICAgJj0gMHgzZmZmZmZmZgorCQkgICAgICAvKiBSQVMgcGFyayBjb250cm9sIHJlZyAwKGNjKSwgcGFyayBhY2Nlc3MgZW5hYmxlIGlzIHNldCAqLworCisJSE9TVF9SREJVRl9DVEwgfD0gMHgxMDAwMDAwMAkJKDB4NzApCisJCSAgICAgICAmPSAweDEwZmZmZmZmCisJCSAgICAgIC8qIGhvc3QgcmVhZCBidWZmZXIgY29udHJvbCByZWcsIGVuYWJsZSBwcmVmZXRjaCBmb3IgQ1BVIHJlYWQgZnJvbSBEUkFNIGNvbnRyb2wgKi8KKworCUhCVVNfQUNDX0NUTF8wIHw9IDB4MDEwMDAwMWYJCSgweDVjKQorCQkgICAgICAgJj0gMHhmMWZmZmZmZgorCQkgICAgICAvKiBob3N0IGJ1cyBhY2Nlc3MgY29udHJvbCByZWdpc3RlciwgZW5hYmxlIENQVSBhZGRyZXNzIGJ1cyBwaXBlIGNvbnRyb2wJKi8KKwkJICAgICAgLyogdHdvIG91dHN0YW5kaW5nIHJlcXVlc3RzLCAgKioqIGNoYW5nZWQgdG8gMiBmcm9tIDMJCQkJKi8KKwkJICAgICAgLyogZW5hYmxlIGxpbmUgbWVyZ2Ugd3JpdGUgY29udHJvbCBmb3IgQ1BVIHdyaXRlIHRvIHN5c3RlbSBtZW1vcnksIFBDSSAxCSovCisJCSAgICAgIC8qIGFuZCBQQ0kgMCBidXMgbWVtb3J5OyBlbmFibGUgcGFnZSBtZXJnZSB3cml0ZSBjb250cm9sIGZvciB3cml0ZSB0bwkJKi8KKwkJICAgICAgLyogUENJIGJ1cyAwICYgYnVzIDEgbWVtb3J5CQkJCQkJCSovCisKKwlTUkFNX0NUTCB8PSAweDAwMDA0MDAwCQkJKDB4YzgpCisJCSAmPSAweGZmYmZmN2ZmCisJCSAgICAgIC8qIERSQU0gZGV0YWlsIHRpbWluZyBjb250cm9sIHJlZ2lzdGVyIDEgKGNhKSwgYml0IDMgc2V0IHRvIDAJKi8KKwkJICAgICAgLyogRFJBTSBzdGFydCBhY2Nlc3MgbGF0ZW5jeSBjb250cm9sIC0gd2FpdCBmb3Igb25lIGNsb2NrCSovCisJCSAgICAgIC8qIGZmOWYgY2hhbmdlZCB0byBmZmJmCQkJCQkJKi8KKworCURJTTBfVElNX0NUTF8wID0gMHg3MzdkNzM3ZCAgICAgICAgICAgICAoMHhjOSkKKwkJICAgICAgLyogRFJBTSB0aW1pbmcgY29udHJvbCBmb3IgZGltbTAgJiBkaW1tMTsgc2V0IHdhaXQgb25lIGNsb2NrCSovCisJCSAgICAgIC8qIGN5Y2xlIGZvciBuZXh0IGRhdGEgYWNjZXNzIAkJCQkJKi8KKworCURJTTJfVElNX0NUTF8wID0gMHg3MzdkNzM3ZCAgICAgICAgICAgICAoMHhjYSkKKwkJICAgICAgLyogRFJBTSB0aW1pbmcgY29udHJvbCBmb3IgZGltbTIgJiBkaW1tMzsgc2V0IHdhaXQgb25lIGNsb2NrCSovCisJCSAgICAgIC8qIGN5Y2xlIGZvciBuZXh0IGRhdGEgYWNjZXNzIAkJCQkJKi8KKworCURJTTBfQk5LMF9DVExfMCA9IEJOSzBfUkFNX1NJWl8xMjhNQiAgICAoMHg5MCkKKwkJICAgICAgLyogc2V0IGRpbW0wIGJhbmswIGZvciAxMjggTUIJKi8KKworCURJTTBfQk5LMV9DVExfMCA9IEJOSzFfUkFNX1NJWl8xMjhNQiAgICAoMHg5NCkKKwkJICAgICAgLyogc2V0IGRpbW0wIGZvciAgYmFuazEJCSovCisKKwlESU0wX1RJTV9DVExfMCA9IDB4ZjNiZjAwMDAgICAgICAgICAgICAgKDB4YzkpCisJCSAgICAgIC8qIGRpbW0wIHRpbWluZyBjb250cm9sIHJlZ2lzdGVyOyBSQVMgLSBDQVMgbGF0ZW5jeSAtIDQgY2xvY2sJCSovCisJCSAgICAgIC8qIENBUyBhY2Nlc3MgbGF0ZW5jeSAtIDMgd2FpdDsgcHJlLWNoYXJnZSBsYXRlbmN5IC0gMyB3YWl0CQkqLworCQkgICAgICAvKiBwcmUtY2hhcmdlIGNvbW1hbmQgcGVyaW9kIGNvbnRyb2wgLSA1IGNsb2NrOyB3YWl0IG9uZSBjbG9jawkJKi8KKwkJICAgICAgLyogY3ljbGUgZm9yIG5leHQgZGF0YSBhY2Nlc3M7IHJlYWQgdG8gd3JpdGUgYWNjZXNzIGxhdGVuY3kgY29udHJvbAkqLworCQkgICAgICAvKiAtIDIgY2xvY2sgY3ljbGVzCQkJCQkJCSovCisKKwlEUkFNX0dCTF9DVExfMCB8PSAweDAwMDAwMTAwICAgICAgICAgICAgKDB4YzApCisJCSAgICAgICAmPSAweGZmZmYwMWZmCisJCSAgICAgIC8qIG1lbW9yeSBnbG9iYWwgY29udHJvbCByZWdpc3RlciAtIHN1cHBvcnQgYnVmZmVyIHNkcmFtIG9uIGJhbmsgMAkqLworCisJRFJBTV9FQ0NfQ1RMXzAgfD0gMHgwMDI2MDAwMAkJKDB4YzQpCisJCSAgICAgICAmPSAweGZmMjZmZmZmCisJCSAgICAgIC8qIGVuYWJsZSBFQ0M7IGVuYWJsZSByZWFkLCBtb2RpZnksIHdyaXRlIGNvbnRyb2wJKi8KKworCURSQU1fUkVGX0NUTF8wID0gRFJBTV9SRUZfREFUQSAgICAgICAgICAoMHhiOCkKKwkJICAgICAgLyogc2V0IERSQU0gcmVmcmVzaCBwYXJhbWV0ZXJzICoqKiBjaGFuZ2VkIHRvIDAwOTQwMTAwCSovCisKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKworCURSQU1fRUNDX0NUTF8wIHw9IDB4MjAyNDMyODAJCSgweGM0KQorCQkgICAgICAvKiB0dXJuIG9mZiBlY2MJCSovCisJCSAgICAgIC8qIGZvciBTRFJBTSBiYW5rIDAJKi8KKworCURSQU1fRUNDX0NUTF8wIHw9IDB4MjAyNDMyOTAgICAgICAgICAgICAoMHhjNCkgPworCQkgICAgICAvKiBmb3IgU0RSQU0gYmFuayAxCSovCisKKworLyogQWRkaXRpb25hbCBTdHVmZi4uLiovCisKKwlHTE9CTF9DVFJMIHw9IDB4MjAwMDBiMDAJCSgweDU0KQorCisJUENJXzBfU0JfQ09ORklHIHw9IDB4MDQxMDAwMDcJCSgweGQwKQorCQkgICAgICAvKiBQQ0kgMCBTaWRlIGJhbmQgY29uZmlnIHJlZyovCisKKwkweDgwMDAwODNjIHw9IDB4MDAwODAwMDAKKwkJICAgICAgLyogRGlzYWJsZSBWR0EgZGVjb2RlIG9uIFBDSSBCdXMgMSAqLworCisKKy8qRW5kIEFkZGl0aW9uYWwgU3R1ZmYuLiovCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkvKiAgICAgICAgICAgICAgVEVST04gc2VyaWFsIHBvcnQgaW5pdGlhbGl6YXRpb24gY29kZSAgICAgICAgICAgKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCTB4ODQzODAwODAgfD0gMHgwMDAzMDAwMAorCQkgICAgIC8qIGVuYWJsZSBzdXBlciBJTyBjb25maWd1cmF0aW9uIFZJQSBjaGlwIFJlZ2lzdGVyIDg1CSovCisJCSAgICAgLyogRW5hYmxlIHN1cGVyIEkvTyBjb25maWcgbW9kZSAqLworCisJMHhmZTAwMDNmMCA9IDB4ZTIKKwlibCBkZWxheTEKKworCTB4ZmUwMDAzZjEgPSAweDBmCisJYmwgZGVsYXkxCisJCSAgICAvKiBlbmFibGUgY29tMSAmIGNvbTIsIHBhcmFsbGVsIHBvcnQgZGlzYWJsZWQgKi8KKworCTB4ZmUwMDAzZjAgPSAweGU3CisJYmwgZGVsYXkxCisJCSAgICAvKiBsZXQncyBtYWtlIGNvbTEgYmFzZSBhcyAweDNmOCAqLworCisJMHhmZTAwMDNmMSA9IDB4ZmUKKwlibCBkZWxheTEKKworCTB4ZmUwMDAzZjAgPSAweGU4CisJYmwgZGVsYXkxCisJCSAgICAvKiBsZXQncyBtYWtlIGNvbTIgYmFzZSBhcyAweDJmOCAqLworCisJMHhmZTAwMDNmMSA9IDB4YmUKKworCTB4ODQzODAwODAgJj0gMHhmZmZkZmZmZgorCQkgICAgLyogY2xvc2luZyBzdXBlciBJTyBjb25maWd1cmF0aW9uIFZJQSBjaGlwIFJlZ2lzdGVyIDg1ICAgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCTB4ZmUwMDAzZmIgPSAweDgzCisJYmwgZGVsYXkxCisJCSAgIC8qbGF0Y2ggZW5hYmxlIHdvcmQgbGVuZ3RoIC04IGJpdCAqLyAgICAgICAgIC8qIHNldCBtc2xhYiBiaXQJKi8KKwkweGZlMDAwM2Y4ID0gMHgwYworCWJsIGRlbGF5MQorCQkgICAvKiBzZXQgYmF1ZCByYXRlIGxzYiBmb3IgOTYwMCBiYXVkCSovCisJMHhmZTAwMDNmOSA9IDB4MAorCWJsIGRlbGF5MQorCQkgICAvKiBzZXQgYmF1ZCByYXRlIG1zYiBmb3IgOTYwMCBiYXVkCSovCisJMHhmZTAwMDNmYiAgPSAweDAzCisJYmwgZGVsYXkxCisJCSAgICAgIC8qIHJlc2V0IG1zbGFiCSovCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkvKiAgICAgICAgICAgICAgRU5EIFRFUk9OIFNlcmlhbCBQb3J0IEluaXRpYWxpemF0aW9uIENvZGUgICAgICAgKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLyogICAgICBFTkQgVEVST04gQXJ0aWNpYSAvIFNEUkFNIEluaXRpYWxpemF0aW9uIGNvZGUgICAgICAgICAgICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK1Byb3Bvc2VkIGZyb20gRG9jdW1lbnRhdGlvbjoKKword3JpdGUgZG1lbSAweGZlYzAwY2Y4IDB4NTAwMDAwODAKK3dyaXRlIGRtZW0gMHhmZWUwMGNmYyAweGMwMzA1NDExCisKKyAgICAgIFdyaXRlcyB0byBpbmRleCAweDUwLTB4NTMuCisgICAgICAweDUwOiBHbG9iYWwgSW5mb3JtYXRpb24gUmVnaXN0ZXIgMAorCSAgICAweEMwID0gTGl0dGxlIEVuZGlhbiBDUFUsIFNlcXVlbnRpYWwgb3JkZXIgQnVyc3QKKyAgICAgIDB4NTE6IEdsb2JhbCBJbmZvcm1hdGlvbiBSZWdpc3RlciAxCisJICAgIFJlYWQgb25seSwgMHgzMCA9IFByb3ZpZGVzIFBvd2VyUEMgYW5kIFg4NiBzdXBwb3J0CisgICAgICAweDUyOiBHbG9iYWwgSW5mb3JtYXRpb24gUmVnaXN0ZXIgMgorCSAgICAweDA1ID0gNjQvMTI4IGJpdCBDUFUgYnVzIHN1cHBvcnQKKyAgICAgIDB4NTM6IEdsb2JhbCBJbmZvcm1hdGlvbiBSZWdpc3RlciAzCisJICAgIDB4ODAgPSBQQ0kgQnVzIDAgZ3JhbnQgYWN0aXZlIHRpbWUgaXMgMSBjbG9jayBhZnRlciBSRVEjIGRlYXNzZXJ0ZWQKKword3JpdGUgZG1lbSAweGZlYzAwY2Y4IDB4NWMwMDAwODAKK3dyaXRlIGRtZW0gMHhmZWUwMGNmYyAweGIzMDAwMTFGCisKK3dyaXRlIGRtZW0gMHhmZWMwMGNmOCAweGM4MDAwMDgwCit3cml0ZSBkbWVtIDB4ZmVlMDBjZmMgMHgwMDIwZjEwMAorCit3cml0ZSBkbWVtIDB4ZmVjMDBjZjggMHg5MDAwMDA4MAord3JpdGUgZG1lbSAweGZlZTAwY2ZjIDB4MDA3ZmU3MDAKKword3JpdGUgZG1lbSAweGZlYzAwY2Y4IDB4OTQwMDA4MAord3JpdGUgZG1lbSAweGZlZTAwY2ZjIDB4MDA3ZmU3MDAKKword3JpdGUgZG1lbSAweGZlYzAwY2Y4IDB4YjAwMDAwODAKK3dyaXRlIGRtZW0gMHhmZWUwMGNmYyAweDczN2Q3MzdkCisKK3dyaXRlIGRtZW0gMHhmZWMwMGNmOCAweGI0MDAwMDgwCit3cml0ZSBkbWVtIDB4ZmVlMDBjZmMgMHg3MzdkNzM3ZAorCit3cml0ZSBkbWVtIDB4ZmVjMDBjZjggMHhjMDAwMDA4MAord3JpdGUgZG1lbSAweGZlZTAwY2ZjIDB4NDAwMDU1MDAKKword3JpdGUgZG1lbSAweGZlYzAwY2Y4IDB4YjgwMDAwODAKK3dyaXRlIGRtZW0gMHhmZWUwMGNmYyAweDAwOTQwMTAwCisKK3dyaXRlIGRtZW0gMHhmZWMwMGNmOCAweGM0MDAwMDgwCit3cml0ZSBkbWVtIDB4ZmVlMDBjZmMgMHgwMDAwMzI4MAorCit3cml0ZSBkbWVtIDB4ZmVjMDBjZjggMHhjNDAwMDA4MAord3JpdGUgZG1lbSAweGZlZTAwY2ZjIDB4MDAwMDMyOTAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvdS1ib290LmxkcyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvdS1ib290LmxkcwppbmRleCAxMGMwYzNkLi4yMjgxZDM1IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS91LWJvb3QubGRzCkBAIC02Myw3ICs2Myw3IEBACiAgICAgY3B1Lzc0eHhfN3h4L3N0YXJ0Lm8JKC50ZXh0KQogLyogc3RvcmUgdGhlIGVudmlyb25tZW50IGluIGEgc2VwZXJhdGUgc2VjdG9yIGluIHRoZSBib290IGZsYXNoICovCiAvKiAgICAuID0gZW52X29mZnNldDsgKi8KLSAgICBjb21tb24vZW52aXJvbm1lbnQubygudGV4dCkgCisgICAgY29tbW9uL2Vudmlyb25tZW50Lm8oLnRleHQpCiAKICAgICAqKC50ZXh0KQogICAgICooLmZpeHVwKQpAQCAtODcsNyArODcsNyBAQAogICBQUk9WSURFIChlcm90ZXh0ID0gLik7CiAgIC5yZWxvYyAgIDoKICAgewotICAgICooLmdvdCkgCisgICAgKiguZ290KQogICAgIF9HT1QyX1RBQkxFXyA9IC47CiAgICAgKiguZ290MikKICAgICBfRklYVVBfVEFCTEVfID0gLjsKQEAgLTEwOCw2ICsxMDgsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvdXNiX3VoY2kuYyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvdXNiX3VoY2kuYwppbmRleCBmZDhjYjRlLi4xNGU4MDQzIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3VzYl91aGNpLmMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS91c2JfdWhjaS5jCkBAIC04Myw3ICs4Myw3IEBACiAjZGVmaW5lIFVTQl9NQVhfVEVNUF9JTlRfVEQgIDMyICAgLyogbnVtYmVyIG9mIHRlbXBvcmFyeSBURHMgZm9yIEludGVycnVwdCB0cmFuc2ZlcnMgKi8KIAogCi0vLyNkZWZpbmUgVVNCX1VIQ0lfREVCVUcKKy8qI2RlZmluZSBVU0JfVUhDSV9ERUJVRyAqLwogCiAjaWZkZWYJVVNCX1VIQ0lfREVCVUcKICNkZWZpbmUJVVNCX1VIQ0lfUFJJTlRGKGZtdCxhcmdzLi4uKQlwcmludGYgKGZtdCAsIyNhcmdzKQpAQCAtNTk5LDcgKzU5OSw3IEBACiAJCXByaW50ZigiRXJyb3IgVVNCIFVIQ0kgKCUwNFgsJTA0WCkgbm90IGZvdW5kXG4iLFVTQl9VSENJX1ZFTkRfSUQsVVNCX1VIQ0lfREVWX0lEKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkKKwogI2lmIDEKIAlzID0gZ2V0ZW52KCJ1c2JfaXJxIik7CiAJaWYgKHMpCkBAIC0xMTE1LDcgKzExMTUsNiBAQAogI2VuZGlmCiAKIAotCiAjaWZkZWYJVVNCX1VIQ0lfREVCVUcKIAogc3RhdGljIGludCB1c2JfZGlzcGxheV90ZCh1aGNpX3RkX3QgKnRkKQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS91c2JfdWhjaS5oIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS91c2JfdWhjaS5oCmluZGV4IDdmZGE2MGIuLjMzODcxNTcgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvdXNiX3VoY2kuaAorKysgYi9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3VzYl91aGNpLmgKQEAgLTE5MCw1ICsxOTAsMyBAQAogCiAKICNlbmRpZiAvKiBfVVNCX1VIQ0lfSF8gKi8KLQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3ZpYTY4Ni5jIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS92aWE2ODYuYwppbmRleCAwNDgzY2E5Li5jNzk3ZTQ3IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3ZpYTY4Ni5jCisrKyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvdmlhNjg2LmMKQEAgLTIxMSwxOCArMjExLDE4IEBACiAKIF9fYXNtICAgICAgICAgKCIgICAgLmdsb2JsIHZpYV9jYWxpYnJhdGVfdGltZV9iYXNlIFxuIgogCSAgICAgICAidmlhX2NhbGlicmF0ZV90aW1lX2Jhc2U6IAkgICBcbiIKLSAgICAgICAgICAgICAgICIgICBsaXMgICAgIDksIDB4ZmUwMAkJICAgXG4iCi0gICAgICAgICAgICAgICAiICAgbGkgICAgICAwLCAweDAwCQkgICBcbiIKKwkgICAgICAgIiAgIGxpcyAgICAgOSwgMHhmZTAwCQkgICBcbiIKKwkgICAgICAgIiAgIGxpICAgICAgMCwgMHgwMAkJICAgXG4iCiAJICAgICAgICIgICBtdHRidSAgIDAJCQkgICBcbiIKIAkgICAgICAgIiAgIG10dGJsICAgMAkJCSAgIFxuIgogCSAgICAgICAiY3RiX2xvb3A6CQkJICAgXG4iCi0gICAgICAgICAgICAgICAiICAgbGJ6ICAgICAwLCAweDYxKDkpCQkgICBcbiIKLSAgICAgICAgICAgICAgICIgICBlaWVpbwkJCSAgIFxuIgotICAgICAgICAgICAgICAgIiAgIGFuZGkuICAgMCwgMCwgMHgyMAkJICAgXG4iCi0gICAgICAgICAgICAgICAiICAgYmVxICAgICBjdGJfbG9vcAkJICAgXG4iCi0gICAgICAgICAgICAgICAiY3RiX2RvbmU6CQkJICAgXG4iCi0gICAgICAgICAgICAgICAiICAgbWZ0YiAgICAzCQkJICAgXG4iCi0gICAgICAgICAgICAgICAiICAgYmxyIik7CisJICAgICAgICIgICBsYnogICAgIDAsIDB4NjEoOSkJCSAgIFxuIgorCSAgICAgICAiICAgZWllaW8JCQkgICBcbiIKKwkgICAgICAgIiAgIGFuZGkuICAgMCwgMCwgMHgyMAkJICAgXG4iCisJICAgICAgICIgICBiZXEgICAgIGN0Yl9sb29wCQkgICBcbiIKKwkgICAgICAgImN0Yl9kb25lOgkJCSAgIFxuIgorCSAgICAgICAiICAgbWZ0YiAgICAzCQkJICAgXG4iCisJICAgICAgICIgICBibHIiKTsKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmlhX2NhbGlicmF0ZV90aW1lX2Jhc2Uodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvdmlkZW8uYyBiL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvdmlkZW8uYwppbmRleCBlODAyODhiLi4zNmUzYzYyIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL3ZpZGVvLmMKKysrIGIvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS92aWRlby5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogSHlwZXJpb24gRW50ZXJ0YWlubWVudCwgSGFucy1Kb2VyZ0ZAaHlwZXJpb24tZW50ZXJ0YWlubWVudC5jb20gCisgKiBIeXBlcmlvbiBFbnRlcnRhaW5tZW50LCBIYW5zLUpvZXJnRkBoeXBlcmlvbi1lbnRlcnRhaW5tZW50LmNvbQogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgdmlkZW9faW5pdGVkID0gMTsKICAgICB2aWRlb19pbml0KCk7CiAgICAgbWVtc2V0ICgmdmdhZGV2LCAwLCBzaXplb2YodmdhZGV2KSk7Ci0gICAgCisKICAgICBzdHJjcHkodmdhZGV2Lm5hbWUsIFZJREVPX05BTUUpOwogICAgIHZnYWRldi5mbGFncyA9ICBERVZfRkxBR1NfT1VUUFVUIHwgREVWX0ZMQUdTX1NZU1RFTTsKICAgICB2Z2FkZXYucHV0YyA9IHZpZGVvX3B1dGM7CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICB2Z2FkZXYuZ2V0YyA9IE5VTEw7CiAgICAgdmdhZGV2LnRzdGMgPSBOVUxMOwogICAgIHZnYWRldi5zdGFydCA9IHZpZGVvX3N0YXJ0OwotICAgIAorCiAgICAgZXJyb3IgPSBkZXZpY2VfcmVnaXN0ZXIgKCZ2Z2FkZXYpOwogCiAgICAgaWYgKGVycm9yID09IDApCkBAIC0xMjksMTEgKzEyOSwxMSBAQAogCiBpbnQgdmlkZW9faW5pdCh2b2lkKQogewotICAgIGN1cnNvcl9wb3NpdGlvbiA9IFZJREVPX0JBU0U7IC8vIENvbG9yIHRleHQgZGlzcGxheSBiYXNlCisgICAgY3Vyc29yX3Bvc2l0aW9uID0gVklERU9fQkFTRTsgLyogQ29sb3IgdGV4dCBkaXNwbGF5IGJhc2UgKi8KICAgICBjdXJzb3Jfcm93ID0gMDsKICAgICBjdXJzb3JfY29sID0gMDsKLSAgICBjdXJyZW50X2F0dHIgPSB2aWRlb19nZXRfYXR0cigpOyAvLyBDdXJyZW50bHkgc2VsZWN0ZWQgdmFsdWUgZm9yIGF0dHJpYnV0ZS4KLS8vICAgIHZpZGVvX3Rlc3QoKTsKKyAgICBjdXJyZW50X2F0dHIgPSB2aWRlb19nZXRfYXR0cigpOyAvKiBDdXJyZW50bHkgc2VsZWN0ZWQgdmFsdWUgZm9yIGF0dHJpYnV0ZS4gKi8KKy8qICAgIHZpZGVvX3Rlc3QoKTsgKi8KICAgICB2aWRlb19zZXRfY29sb3IoY3VycmVudF9hdHRyKTsKIAogICAgIHJldHVybiAwOwpAQCAtMjgzLDcgKzI4Myw3IEBACiAKIHZvaWQgdmlkZW9fZHJhd19ib3goaW50IHN0eWxlLCBpbnQgYXR0ciwgY2hhciAqdGl0bGUsIGludCBzZXBhcmF0ZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCiB7Ci0gICAgdW5zaWduZWQgY2hhciAqZmIsICpmYjI7IAorICAgIHVuc2lnbmVkIGNoYXIgKmZiLCAqZmIyOwogICAgIHVuc2lnbmVkIGNoYXIgKnN0ID0gKHN0eWxlID09IFNJTkdMRV9CT1gpP3ZpZGVvX3NpbmdsZV9ib3ggOiB2aWRlb19kb3VibGVfYm94OwogICAgIHVuc2lnbmVkIGNoYXIgKnRpID0gKHN0eWxlID09IFNJTkdMRV9CT1gpP3ZpZGVvX3NpbmdsZV90aXRsZSA6IHZpZGVvX2RvdWJsZV90aXRsZTsKICAgICBpbnQgaTsKQEAgLTMyNCwxMSArMzI0LDExIEBACiAJKmZiID0gc3RbM107CiAJKihmYisxKSA9IGF0dHI7IGZiICs9IDIqVklERU9fQ09MUzsKIAotCSpmYjIgPSBzdFs0XTsgCisJKmZiMiA9IHN0WzRdOwogCSooZmIyKzEpID0gYXR0cjsgZmIyICs9IDIqVklERU9fQ09MUzsKICAgICB9Ci0gICAgCi0gICAgLy8gRHJhdyB0aXRsZQorCisgICAgLyogRHJhdyB0aXRsZSAqLwogICAgIGlmICh0aXRsZSkKICAgICB7CiAJaWYgKHNlcGFyYXRlID09IDApCkBAIC0zNzAsNyArMzcwLDcgQEAKIAkJZmIgKz0gMjsKIAkgICAgfQogCSAgICBmYiA9IHZpZGVvX2FkZHIoeCsyLCB5KzEpOwotCSAgICAKKwogCSAgICB3aGlsZSAoKnRpdGxlKQogCSAgICB7CiAJCSpmYiA9ICp0aXRsZTsKQEAgLTQxNCw3ICs0MTQsNyBAQAogfQogCiB2b2lkIHZpZGVvX3Jlc3RvcmVfcmVjdChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgdm9pZCAqc2F2ZV9hcmVhKQoteyAgIAorewogICAgIHVuc2lnbmVkIGNoYXIgKnNhdmUgPSAodW5zaWduZWQgY2hhciAqKXNhdmVfYXJlYTsKICAgICB1bnNpZ25lZCBjaGFyICpmYiA9IHZpZGVvX2FkZHIoeCx5KTsKICAgICBpbnQgaSxqOwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAgICAgaW50IGk7CiAgICAgY2hhciAqczsKICAgICBpbnQgbWF4ZGV2OwotICAgIAorCiAKICAgICBpZiAodmlkZW9faW5pdGVkID09IDApIHJldHVybjsKICNpZmRlZiBFQVNURVJFR0cKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL2Jpb3MuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL2Jpb3MuYwppbmRleCA0NzA3YmQ5Li5kNTFlYjY0IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9iaW9zLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3IvYmlvcy5jCkBAIC0xMzAsMTQgKzEzMCwxNCBAQAogCiAgICAgc3dpdGNoKE0ueDg2LlJfQVgpCiAgICAgewotICAgIGNhc2UgMHhCMTAxOiAvLyBQQ0kgQmlvcyBQcmVzZW50PworICAgIGNhc2UgMHhCMTAxOiAvKiBQQ0kgQmlvcyBQcmVzZW50PyAqLwogCU0ueDg2LlJfQUwgID0gMHgwMDsKIAlNLng4Ni5SX0VEWCA9IDB4MjA0OTQzNTA7CiAJTS54ODYuUl9CWCAgPSAweDAyMTA7CiAJTS54ODYuUl9DTCAgPSAzOwogCUNMRUFSX0ZMQUcoRl9DRik7CiAJYnJlYWs7Ci0gICAgY2FzZSAweEIxMDI6IC8vIEZpbmQgZGV2aWNlCisgICAgY2FzZSAweEIxMDI6IC8qIEZpbmQgZGV2aWNlICovCiAJZGV2aWNlID0gbXlwY2lfZmluZF9kZXZpY2UoTS54ODYuUl9EWCwgTS54ODYuUl9DWCwgTS54ODYuUl9TSSk7CiAJaWYgKGRldmljZSAhPSAtMSkKIAl7CkBAIC0xNTEsNTIgKzE1MSw1MiBAQAogCX0KIAlDT05ESVRJT05BTF9TRVRfRkxBRygoTS54ODYuUl9BSCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpLCBGX0NGKTsKIAlicmVhazsKLSAgICBjYXNlIDB4QjEwMzogLy8gRmluZCBQQ0kgY2xhc3MgY29kZQorICAgIGNhc2UgMHhCMTAzOiAvKiBGaW5kIFBDSSBjbGFzcyBjb2RlICovCiAJTS54ODYuUl9BSCA9IFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQkvL3ByaW50ZigiRmluZCBieSBjbGFzcyBub3QgeWV0IGltcGxtZW50ZWQiKTsKKwkvKnByaW50ZigiRmluZCBieSBjbGFzcyBub3QgeWV0IGltcGxtZW50ZWQiKTsgKi8KIAlDT05ESVRJT05BTF9TRVRfRkxBRygoTS54ODYuUl9BSCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpLCBGX0NGKTsKIAlicmVhazsKLSAgICBjYXNlIDB4QjEwODogLy8gcmVhZCBjb25maWcgYnl0ZQorICAgIGNhc2UgMHhCMTA4OiAvKiByZWFkIGNvbmZpZyBieXRlICovCiAJTS54ODYuUl9DTCA9IG15cGNpX3JlYWRfY2ZnX2J5dGUoTS54ODYuUl9CSCwgTS54ODYuUl9CTCwgTS54ODYuUl9ESSk7CiAJTS54ODYuUl9BSCA9IFBDSUJJT1NfU1VDQ0VTU0ZVTDsKIAlDT05ESVRJT05BTF9TRVRfRkxBRygoTS54ODYuUl9BSCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpLCBGX0NGKTsKLQkvL3ByaW50ZigicmVhZF9jb25maWdfYnl0ZSAleCwleCwleCAtPiAleFxuIiwgTS54ODYuUl9CSCwgTS54ODYuUl9CTCwgTS54ODYuUl9ESSwKLQkvLwkgICAgTS54ODYuUl9DTCk7CisJLypwcmludGYoInJlYWRfY29uZmlnX2J5dGUgJXgsJXgsJXggLT4gJXhcbiIsIE0ueDg2LlJfQkgsIE0ueDg2LlJfQkwsIE0ueDg2LlJfREksICovCisJLyoJICAgIE0ueDg2LlJfQ0wpOyAqLwogCWJyZWFrOwotICAgIGNhc2UgMHhCMTA5OiAvLyByZWFkIGNvbmZpZyB3b3JkCisgICAgY2FzZSAweEIxMDk6IC8qIHJlYWQgY29uZmlnIHdvcmQgKi8KIAlNLng4Ni5SX0NYID0gbXlwY2lfcmVhZF9jZmdfd29yZChNLng4Ni5SX0JILCBNLng4Ni5SX0JMLCBNLng4Ni5SX0RJKTsKIAlNLng4Ni5SX0FIID0gUENJQklPU19TVUNDRVNTRlVMOwogCUNPTkRJVElPTkFMX1NFVF9GTEFHKChNLng4Ni5SX0FIICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCksIEZfQ0YpOwotCS8vcHJpbnRmKCJyZWFkX2NvbmZpZ193b3JkICV4LCV4LCV4IC0+ICV4XG4iLCBNLng4Ni5SX0JILCBNLng4Ni5SX0JMLCBNLng4Ni5SX0RJLAotCS8vCSAgICBNLng4Ni5SX0NYKTsKKwkvKnByaW50ZigicmVhZF9jb25maWdfd29yZCAleCwleCwleCAtPiAleFxuIiwgTS54ODYuUl9CSCwgTS54ODYuUl9CTCwgTS54ODYuUl9ESSwgKi8KKwkvKgkgICAgTS54ODYuUl9DWCk7ICovCiAJYnJlYWs7Ci0gICAgY2FzZSAweEIxMEE6IC8vIHJlYWQgY29uZmlnIGR3b3JkCisgICAgY2FzZSAweEIxMEE6IC8qIHJlYWQgY29uZmlnIGR3b3JkICovCiAJTS54ODYuUl9FQ1ggPSBteXBjaV9yZWFkX2NmZ19sb25nKE0ueDg2LlJfQkgsIE0ueDg2LlJfQkwsIE0ueDg2LlJfREkpOwogCU0ueDg2LlJfQUggPSBQQ0lCSU9TX1NVQ0NFU1NGVUw7CiAJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKE0ueDg2LlJfQUggIT0gUENJQklPU19TVUNDRVNTRlVMKSwgRl9DRik7Ci0JLy9wcmludGYoInJlYWRfY29uZmlnX2xvbmcgJXgsJXgsJXggLT4gJXhcbiIsIE0ueDg2LlJfQkgsIE0ueDg2LlJfQkwsIE0ueDg2LlJfREksCi0JLy8gICAgTS54ODYuUl9FQ1gpOworCS8qcHJpbnRmKCJyZWFkX2NvbmZpZ19sb25nICV4LCV4LCV4IC0+ICV4XG4iLCBNLng4Ni5SX0JILCBNLng4Ni5SX0JMLCBNLng4Ni5SX0RJLCAqLworCS8qICAgIE0ueDg2LlJfRUNYKTsgKi8KIAlicmVhazsKLSAgICBjYXNlIDB4QjEwQjogLy8gd3JpdGUgY29uZmlnIGJ5dGUKKyAgICBjYXNlIDB4QjEwQjogLyogd3JpdGUgY29uZmlnIGJ5dGUgKi8KIAlteXBjaV93cml0ZV9jZmdfYnl0ZShNLng4Ni5SX0JILCBNLng4Ni5SX0JMLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0NMKTsKIAlNLng4Ni5SX0FIID0gUENJQklPU19TVUNDRVNTRlVMOwogCUNPTkRJVElPTkFMX1NFVF9GTEFHKChNLng4Ni5SX0FIICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCksIEZfQ0YpOwotCS8vcHJpbnRmKCJ3cml0ZV9jb25maWdfYnl0ZSAleCwleCwleCA8LSAleFxuIiwgTS54ODYuUl9CSCwgTS54ODYuUl9CTCwgTS54ODYuUl9ESSwKLQkvLyAgICBNLng4Ni5SX0NMKTsKKwkvKnByaW50Zigid3JpdGVfY29uZmlnX2J5dGUgJXgsJXgsJXggPC0gJXhcbiIsIE0ueDg2LlJfQkgsIE0ueDg2LlJfQkwsIE0ueDg2LlJfREksICovCisJLyogICAgTS54ODYuUl9DTCk7ICovCiAJYnJlYWs7Ci0gICAgY2FzZSAweEIxMEM6IC8vIHdyaXRlIGNvbmZpZyB3b3JkCisgICAgY2FzZSAweEIxMEM6IC8qIHdyaXRlIGNvbmZpZyB3b3JkICovCiAJbXlwY2lfd3JpdGVfY2ZnX3dvcmQoTS54ODYuUl9CSCwgTS54ODYuUl9CTCwgTS54ODYuUl9ESSwgTS54ODYuUl9DWCk7CiAJTS54ODYuUl9BSCA9IFBDSUJJT1NfU1VDQ0VTU0ZVTDsKIAlDT05ESVRJT05BTF9TRVRfRkxBRygoTS54ODYuUl9BSCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpLCBGX0NGKTsKLQkvL3ByaW50Zigid3JpdGVfY29uZmlnX3dvcmQgJXgsJXgsJXggPC0gJXhcbiIsIE0ueDg2LlJfQkgsIE0ueDg2LlJfQkwsIE0ueDg2LlJfREksCi0JLy8JICAgIE0ueDg2LlJfQ1gpOworCS8qcHJpbnRmKCJ3cml0ZV9jb25maWdfd29yZCAleCwleCwleCA8LSAleFxuIiwgTS54ODYuUl9CSCwgTS54ODYuUl9CTCwgTS54ODYuUl9ESSwgKi8KKwkvKgkgICAgTS54ODYuUl9DWCk7ICovCiAJYnJlYWs7Ci0gICAgY2FzZSAweEIxMEQ6IC8vIHdyaXRlIGNvbmZpZyBkd29yZAorICAgIGNhc2UgMHhCMTBEOiAvKiB3cml0ZSBjb25maWcgZHdvcmQgKi8KIAlteXBjaV93cml0ZV9jZmdfbG9uZyhNLng4Ni5SX0JILCBNLng4Ni5SX0JMLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0VDWCk7CiAJTS54ODYuUl9BSCA9IFBDSUJJT1NfU1VDQ0VTU0ZVTDsKIAlDT05ESVRJT05BTF9TRVRfRkxBRygoTS54ODYuUl9BSCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpLCBGX0NGKTsKLQkvL3ByaW50Zigid3JpdGVfY29uZmlnX2xvbmcgJXgsJXgsJXggPC0gJXhcbiIsIE0ueDg2LlJfQkgsIE0ueDg2LlJfQkwsIE0ueDg2LlJfREksCi0JLy8JICAgIE0ueDg2LlJfRUNYKTsKKwkvKnByaW50Zigid3JpdGVfY29uZmlnX2xvbmcgJXgsJXgsJXggPC0gJXhcbiIsIE0ueDg2LlJfQkgsIE0ueDg2LlJfQkwsIE0ueDg2LlJfREksICovCisJLyoJICAgIE0ueDg2LlJfRUNYKTsgKi8KIAlicmVhazsKICAgICBkZWZhdWx0OgogCVBSSU5URigiQklPUyBpbnQgJXhoOiBVbmtub3duIGZ1bmN0aW9uIEFYPSUwNHhoXG4iLCBpbnRubywgTS54ODYuUl9BWCk7CkBAIC0yMDgsNyArMjA4LDcgQEAKIHsKICAgICBpbnQgaTsKICAgICBYODZFTVVfaW50ckZ1bmNzIGJpb3NfaW50cl90YWJbMjU2XTsKLSAgICAKKwogICAgIGZvciAoaT0wOyBpPDI1NjsgaSsrKQogICAgIHsKIAl3cml0ZV9sb25nX2xpdHRsZShNLm1lbV9iYXNlK2kqNCwgQklPU19TRUc8PDE2KTsKQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgIGJpb3NfaW50cl90YWJbMHgxNV0gPSBpbnQxNTsKIAogICAgIGJpb3NfaW50cl90YWJbMHg2RF0gPSBpbnQ0MjsKLSAgICAKKwogICAgIFg4NkVNVV9zZXR1cEludHJGdW5jcyhiaW9zX2ludHJfdGFiKTsKICAgICB2aWRlb19pbml0KCk7CiB9CkBAIC0yNTIsMTQgKzI1MiwxNCBAQAogCiB1bnNpZ25lZCBjaGFyICogc2V0dXBfbW9kZXNbXSA9CiB7Ci0gICAgc2V0dXBfNDB4MjUsICAgICAvLyBtb2RlIDA6IDQweDI1IGJ3IHRleHQKLSAgICBzZXR1cF80MHgyNSwgICAgIC8vIG1vZGUgMTogNDB4MjUgY29sIHRleHQKLSAgICBzZXR1cF84MHgyNSwgICAgIC8vIG1vZGUgMjogODB4MjUgYncgdGV4dAotICAgIHNldHVwXzgweDI1LCAgICAgLy8gbW9kZSAzOiA4MHgyNSBjb2wgdGV4dAotICAgIHNldHVwX2dyYXBoaWNzLCAgLy8gbW9kZSA0OiAzMjB4MjAwIGNvbCBncmFwaGljcwotICAgIHNldHVwX2dyYXBoaWNzLCAgLy8gbW9kZSA1OiAzMjB4MjAwIGJ3IGdyYXBoaWNzCi0gICAgc2V0dXBfZ3JhcGhpY3MsICAvLyBtb2RlIDY6IDY0MHgyMDAgYncgZ3JhcGhpY3MKLSAgICBzZXR1cF9idyAgICAgICAgIC8vIG1vZGUgNzogODB4MjUgbW9ubyB0ZXh0CisgICAgc2V0dXBfNDB4MjUsICAgICAvKiBtb2RlIDA6IDQweDI1IGJ3IHRleHQgKi8KKyAgICBzZXR1cF80MHgyNSwgICAgIC8qIG1vZGUgMTogNDB4MjUgY29sIHRleHQgKi8KKyAgICBzZXR1cF84MHgyNSwgICAgIC8qIG1vZGUgMjogODB4MjUgYncgdGV4dCAqLworICAgIHNldHVwXzgweDI1LCAgICAgLyogbW9kZSAzOiA4MHgyNSBjb2wgdGV4dCAqLworICAgIHNldHVwX2dyYXBoaWNzLCAgLyogbW9kZSA0OiAzMjB4MjAwIGNvbCBncmFwaGljcyAqLworICAgIHNldHVwX2dyYXBoaWNzLCAgLyogbW9kZSA1OiAzMjB4MjAwIGJ3IGdyYXBoaWNzICovCisgICAgc2V0dXBfZ3JhcGhpY3MsICAvKiBtb2RlIDY6IDY0MHgyMDAgYncgZ3JhcGhpY3MgKi8KKyAgICBzZXR1cF9idyAgICAgICAgIC8qIG1vZGUgNzogODB4MjUgbW9ubyB0ZXh0ICovCiB9OwogCiB1bnNpZ25lZCBpbnQgc2V0dXBfY29sc1tdID0KQEAgLTI4MCwxMyArMjgwLDEzIEBACiB2b2lkIGJpb3Nfc2V0X21vZGUoaW50IG1vZGUpCiB7CiAgICAgaW50IGk7Ci0gICAgdW5zaWduZWQgY2hhciBtb2RlX3NldCA9IHNldHVwX21vZGVzZXRzW21vZGVdOyAvLyBDb250cm9sIHJlZ2lzdGVyIHZhbHVlCi0gICAgdW5zaWduZWQgY2hhciAqc2V0dXBfcmVncyA9IHNldHVwX21vZGVzW21vZGVdOyAvLyBSZWdpc3RlciAzRDQgQXJyYXkKKyAgICB1bnNpZ25lZCBjaGFyIG1vZGVfc2V0ID0gc2V0dXBfbW9kZXNldHNbbW9kZV07IC8qIENvbnRyb2wgcmVnaXN0ZXIgdmFsdWUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpzZXR1cF9yZWdzID0gc2V0dXBfbW9kZXNbbW9kZV07IC8qIFJlZ2lzdGVyIDNENCBBcnJheSAqLwogCi0gICAgLy8gU3dpdGNoIHZpZGVvIG9mZgorICAgIC8qIFN3aXRjaCB2aWRlbyBvZmYgKi8KICAgICBvdXRfYnl0ZSgweDNEOCwgbW9kZV9zZXQgJiAweDM3KTsKIAotICAgIC8vIFNldCB1cCBwYXJhbWV0ZXJzIGF0IDNENGgKKyAgICAvKiBTZXQgdXAgcGFyYW1ldGVycyBhdCAzRDRoICovCiAgICAgZm9yIChpPTA7IGk8MTY7IGkrKykKICAgICB7CiAJb3V0X2J5dGUoMHgzRDQsICh1bnNpZ25lZCBjaGFyKWkpOwpAQCAtMjk0LDEwICsyOTQsMTAgQEAKIAlzZXR1cF9yZWdzKys7CiAgICAgfQogCi0gICAgLy8gRW5hYmxlIHZpZGVvCisgICAgLyogRW5hYmxlIHZpZGVvICovCiAgICAgb3V0X2J5dGUoMHgzRDgsIG1vZGVfc2V0KTsKIAotICAgIC8vIFNldCBvdmVyc2NhbgorICAgIC8qIFNldCBvdmVyc2NhbiAqLwogICAgIGlmIChtb2RlID09IDYpIG91dF9ieXRlKDB4M0Q5LCAweDNGKTsKICAgICBlbHNlICAgICAgICAgICBvdXRfYnl0ZSgweDNEOSwgMHgzMCk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9nbHVlLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9nbHVlLmMKaW5kZXggZjU5ZmZhYS4uYjM4MGYwZCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3IvZ2x1ZS5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL2dsdWUuYwpAQCAtNDAxLDcgKzQwMSw3IEBACiB7CiAgICAgaW50IGkgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgKnJvbSA9ICh1bnNpZ25lZCBjaGFyICopcm9tX2FkZHJlc3M7Ci0gICAgLyogaWYgKCpyb20gIT0gMHg1NSB8fCAqKHJvbSsxKSAhPSAweEFBKSByZXR1cm4gMDsgLy8gTm8gYmlvcyByb20gdGhpcyBpcywgeWVzLiAqLworICAgIC8qIGlmICgqcm9tICE9IDB4NTUgfHwgKihyb20rMSkgIT0gMHhBQSkgcmV0dXJuIDA7IC8qIE5vIGJpb3Mgcm9tIHRoaXMgaXMsIHllcy4gKi8gKi8KIAogICAgIGZvciAoOzspCiAgICAgewpAQCAtNDc5LDcgKzQ3OSw2IEBACiB9CiAKIAotCiB2b2lkIHJlbW92ZV9pbml0X2RhdGEodm9pZCkKIHsKICAgICBjaGFyICpzOwpAQCAtNDk3LDE5ICs0OTYsMTkgQEAKICAgICB9CiAgICAgZWxzZSBpZiAocykKICAgICB7Ci0gICAgICAgIGlmIChzdHJjbXAocywgImRjYWNoZSIpPT0wKQotICAgICAgICB7Ci0gICAgICAgICAgICBkY2FjaGVfZW5hYmxlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKHMsICJpY2FjaGUiKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpY2FjaGVfZW5hYmxlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKHMsICJvbiIpPT0gMCB8fCBzdHJjbXAocywgImJvdGgiKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBkY2FjaGVfZW5hYmxlKCk7Ci0gICAgICAgICAgICBpY2FjaGVfZW5hYmxlKCk7Ci0gICAgICAgIH0KKwlpZiAoc3RyY21wKHMsICJkY2FjaGUiKT09MCkKKwl7CisJICAgIGRjYWNoZV9lbmFibGUoKTsKKwl9CisJZWxzZSBpZiAoc3RyY21wKHMsICJpY2FjaGUiKSA9PSAwKQorCXsKKwkgICAgaWNhY2hlX2VuYWJsZSgpOworCX0KKwllbHNlIGlmIChzdHJjbXAocywgIm9uIik9PSAwIHx8IHN0cmNtcChzLCAiYm90aCIpID09IDApCisJeworCSAgICBkY2FjaGVfZW5hYmxlKCk7CisJICAgIGljYWNoZV9lbmFibGUoKTsKKwl9CiAgICAgfQogCiAgICAgLyogICBzaG93X2JhdF9tYXBwaW5nKCk7Ki8KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9iaW9zZW11LmggYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL2luY2x1ZGUvYmlvc2VtdS5oCmluZGV4IGUzOGZmMzEuLjgyYzMzYTcgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9iaW9zZW11LmgKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL2Jpb3NlbXUuaApAQCAtMTUyLDQgKzE1MiwzIEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQklPU0VNVV9IICovCi0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9ldmVudC5oIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL2V2ZW50LmgKaW5kZXggMGRlNDUxNy4uYmVlYWM4NyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL2V2ZW50LmgKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL2V2ZW50LmgKQEAgLTIwMSw5ICsyMDEsOSBAQAogdGhlIGNvdW50cnkgY29kZSBwYWdlcyBpbiB1c2UuCiAKIE5PVEU6ICAgU2NhbiBjb2RlcyBpbiB0aGUgZXZlbnQgbGlicmFyeSBhcmUgbm90IHJlYWxseSBoYXJkd2FyZSBzY2FuIGNvZGVzLAotICAgICAgICBidXQgcmF0aGVyIHZpcnR1YWwgc2NhbiBjb2RlcyBhcyBnZW5lcmF0ZWQgYnkgYSBsb3cgbGV2ZWwga2V5Ym9hcmQKLSAgICAgICAgaW50ZXJmYWNlIGRyaXZlci4gQWxsIHZpcnR1YWwgY29kZXMgYmVnaW4gd2l0aCBzY2FuIGNvZGUgMHg2MCBhbmQKLSAgICAgICAgcmFuZ2UgdXAgZnJvbSB0aGVyZS4KKwlidXQgcmF0aGVyIHZpcnR1YWwgc2NhbiBjb2RlcyBhcyBnZW5lcmF0ZWQgYnkgYSBsb3cgbGV2ZWwga2V5Ym9hcmQKKwlpbnRlcmZhY2UgZHJpdmVyLiBBbGwgdmlydHVhbCBjb2RlcyBiZWdpbiB3aXRoIHNjYW4gY29kZSAweDYwIGFuZAorCXJhbmdlIHVwIGZyb20gdGhlcmUuCiAKIEhFQURFUjoKIGV2ZW50LmgKQEAgLTQ5NiwzOCArNDk2LDM4IEBACiAKIE1FTUJFUlM6CiB3aGljaCAgICAgICAtIFdpbmRvdyBpZGVudGlmaWVyIGZvciBtZXNzYWdlIGZvciB1c2UgYnkgaGlnaCBsZXZlbCB3aW5kb3cgbWFuYWdlcgotICAgICAgICAgICAgICBjb2RlIChpLmUuIE1lZ2FWaXNpb24gR1VJIG9yIFdpbmRvd3MgQVBJKS4KKwkgICAgICBjb2RlIChpLmUuIE1lZ2FWaXNpb24gR1VJIG9yIFdpbmRvd3MgQVBJKS4KIHdoYXQgICAgICAgIC0gVHlwZSBvZiBldmVudCB0aGF0IG9jY3VycmVkLiBXaWxsIGJlIG9uZSBvZiB0aGUgdmFsdWVzIGRlZmluZWQgYnkKLSAgICAgICAgICAgICAgdGhlIEVWVF9ldmVudFR5cGUgZW51bWVyYXRpb24uCisJICAgICAgdGhlIEVWVF9ldmVudFR5cGUgZW51bWVyYXRpb24uCiB3aGVuICAgICAgICAtIFRpbWUgdGhhdCB0aGUgZXZlbnQgb2NjdXJyZWQgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHN0YXJ0dXAKIHdoZXJlX3ggICAgIC0gWCBjb29yZGluYXRlIG9mIHRoZSBtb3VzZSBjdXJzb3IgbG9jYXRpb24gYXQgdGhlIHRpbWUgb2YgdGhlIGV2ZW50Ci0gICAgICAgICAgICAgIChpbiBzY3JlZW4gY29vcmRpbmF0ZXMpLiBGb3Igam95c3RpY2sgZXZlbnRzIHRoaXMgcmVwcmVzZW50cwotICAgICAgICAgICAgICB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGpveXN0aWNrIFggYXhpcy4KKwkgICAgICAoaW4gc2NyZWVuIGNvb3JkaW5hdGVzKS4gRm9yIGpveXN0aWNrIGV2ZW50cyB0aGlzIHJlcHJlc2VudHMKKwkgICAgICB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGpveXN0aWNrIFggYXhpcy4KIHdoZXJlX3kgICAgIC0gWSBjb29yZGluYXRlIG9mIHRoZSBtb3VzZSBjdXJzb3IgbG9jYXRpb24gYXQgdGhlIHRpbWUgb2YgdGhlIGV2ZW50Ci0gICAgICAgICAgICAgIChpbiBzY3JlZW4gY29vcmRpbmF0ZXMpLiBGb3Igam95c3RpY2sgZXZlbnRzIHRoaXMgcmVwcmVzZW50cwotICAgICAgICAgICAgICB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGpveXN0aWNrIFkgYXhpcy4KKwkgICAgICAoaW4gc2NyZWVuIGNvb3JkaW5hdGVzKS4gRm9yIGpveXN0aWNrIGV2ZW50cyB0aGlzIHJlcHJlc2VudHMKKwkgICAgICB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGpveXN0aWNrIFkgYXhpcy4KIHJlbGF0aXZlX3ggIC0gUmVsYXRpdmUgbW92ZW1lbnQgb2YgdGhlIG1vdXNlIGN1cnNvciBpbiB0aGUgWCBkaXJlY3Rpb24gKGluCi0gICAgICAgICAgICAgIHVuaXRzIG9mIG1pY2tleXMsIG9yIDEvMjAwdGggb2YgYW4gaW5jaCkuIEZvciBqb3lzdGljayBldmVudHMKLSAgICAgICAgICAgICAgdGhpcyByZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIGpveXN0aWNrIFggYXhpcy4KKwkgICAgICB1bml0cyBvZiBtaWNrZXlzLCBvciAxLzIwMHRoIG9mIGFuIGluY2gpLiBGb3Igam95c3RpY2sgZXZlbnRzCisJICAgICAgdGhpcyByZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIGpveXN0aWNrIFggYXhpcy4KIHJlbGF0aXZlX3kgIC0gUmVsYXRpdmUgbW92ZW1lbnQgb2YgdGhlIG1vdXNlIGN1cnNvciBpbiB0aGUgWSBkaXJlY3Rpb24gKGluCi0gICAgICAgICAgICAgIHVuaXRzIG9mIG1pY2tleXMsIG9yIDEvMjAwdGggb2YgYW4gaW5jaCkuIEZvciBqb3lzdGljayBldmVudHMKLSAgICAgICAgICAgICAgdGhpcyByZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIGpveXN0aWNrIFkgYXhpcy4KKwkgICAgICB1bml0cyBvZiBtaWNrZXlzLCBvciAxLzIwMHRoIG9mIGFuIGluY2gpLiBGb3Igam95c3RpY2sgZXZlbnRzCisJICAgICAgdGhpcyByZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgc2Vjb25kIGpveXN0aWNrIFkgYXhpcy4KIG1lc3NhZ2UgICAgIC0gRXZlbnQgc3BlY2lmaWMgbWVzc2FnZSBmb3IgdGhlIGV2ZW50LiBGb3IgdXNlIGV2ZW50cyB0aGlzIGNhbiBiZQotICAgICAgICAgICAgICBhbnkgdXNlciBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gRm9yIGtleWJvYXJkIGV2ZW50cyB0aGlzIGNvbnRhaW5zCi0gICAgICAgICAgICAgIHRoZSBBU0NJSSBjb2RlIGluIGJpdHMgMC03LCB0aGUga2V5Ym9hcmQgc2NhbiBjb2RlIGluIGJpdHMgOC0xNSBhbmQKLSAgICAgICAgICAgICAgdGhlIGNoYXJhY3RlciByZXBlYXQgY291bnQgaW4gYml0cyAxNi0zMC4gWW91IGNhbiB1c2UgdGhlCi0gICAgICAgICAgICAgIEVWVF9hc2NpaUNvZGUsIEVWVF9zY2FuQ29kZSBhbmQgRVZUX3JlcGVhdENvdW50IG1hY3JvcyB0byBleHRyYWN0Ci0gICAgICAgICAgICAgIHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgbWVzc2FnZSBmaWVsZC4gRm9yIG1vdXNlIGV2ZW50cyB0aGlzCi0gICAgICAgICAgICAgIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoIGJ1dHRvbiB3YXMgcHJlc3NlZCwgYW5kIHdpbGwgYmUgYQotICAgICAgICAgICAgICBjb21iaW5hdGlvbiBvZiB0aGUgZmxhZ3MgZGVmaW5lZCBieSB0aGUgRVZUX2V2ZW50TW91c2VNYXNrVHlwZQotICAgICAgICAgICAgICBlbnVtZXJhdGlvbi4gRm9yIGpveXN0aWNrIGV2ZW50cywgdGhpcyBjb25hdGlucyBpbmZvcm1hdGlvbgotICAgICAgICAgICAgICBhYm91dCB3aGljaCBidXR0b25zIHdlcmUgcHJlc3NlZCwgYW5kIHdpbGwgYmUgYSBjb21iaW5hdGlvbiBvZgotICAgICAgICAgICAgICB0aGUgZmxhZ3MgZGVmaW5lZCBieSB0aGUgRVZUX2V2ZW50Sm95TWFza1R5cGUgZW51bWVyYXRpb24uCisJICAgICAgYW55IHVzZXIgc3BlY2lmaWMgaW5mb3JtYXRpb24uIEZvciBrZXlib2FyZCBldmVudHMgdGhpcyBjb250YWlucworCSAgICAgIHRoZSBBU0NJSSBjb2RlIGluIGJpdHMgMC03LCB0aGUga2V5Ym9hcmQgc2NhbiBjb2RlIGluIGJpdHMgOC0xNSBhbmQKKwkgICAgICB0aGUgY2hhcmFjdGVyIHJlcGVhdCBjb3VudCBpbiBiaXRzIDE2LTMwLiBZb3UgY2FuIHVzZSB0aGUKKwkgICAgICBFVlRfYXNjaWlDb2RlLCBFVlRfc2NhbkNvZGUgYW5kIEVWVF9yZXBlYXRDb3VudCBtYWNyb3MgdG8gZXh0cmFjdAorCSAgICAgIHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgbWVzc2FnZSBmaWVsZC4gRm9yIG1vdXNlIGV2ZW50cyB0aGlzCisJICAgICAgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggYnV0dG9uIHdhcyBwcmVzc2VkLCBhbmQgd2lsbCBiZSBhCisJICAgICAgY29tYmluYXRpb24gb2YgdGhlIGZsYWdzIGRlZmluZWQgYnkgdGhlIEVWVF9ldmVudE1vdXNlTWFza1R5cGUKKwkgICAgICBlbnVtZXJhdGlvbi4gRm9yIGpveXN0aWNrIGV2ZW50cywgdGhpcyBjb25hdGlucyBpbmZvcm1hdGlvbgorCSAgICAgIGFib3V0IHdoaWNoIGJ1dHRvbnMgd2VyZSBwcmVzc2VkLCBhbmQgd2lsbCBiZSBhIGNvbWJpbmF0aW9uIG9mCisJICAgICAgdGhlIGZsYWdzIGRlZmluZWQgYnkgdGhlIEVWVF9ldmVudEpveU1hc2tUeXBlIGVudW1lcmF0aW9uLgogbW9kaWZpZXJzICAgLSBDb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUga2V5Ym9hcmQKLSAgICAgICAgICAgICAgc2hpZnQgbW9kaWZpZXJzIChDdHJsLCBBbHQgYW5kIFNoaWZ0IGtleXMpIHdoZW4gdGhlIGV2ZW50Ci0gICAgICAgICAgICAgIG9jY3VycmVkLiBGb3IgbW91c2UgZXZlbnRzIGl0IHdpbGwgYWxzbyBjb250YWluIHRoZSBzdGF0ZSBvZgotICAgICAgICAgICAgICB0aGUgbW91c2UgYnV0dG9ucy4gV2lsbCBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSB2YWx1ZXMgZGVmaW5lZAotICAgICAgICAgICAgICBieSB0aGUgRVZUX2V2ZW50TW9kTWFza1R5cGUgZW51bWVyYXRpb24uCisJICAgICAgc2hpZnQgbW9kaWZpZXJzIChDdHJsLCBBbHQgYW5kIFNoaWZ0IGtleXMpIHdoZW4gdGhlIGV2ZW50CisJICAgICAgb2NjdXJyZWQuIEZvciBtb3VzZSBldmVudHMgaXQgd2lsbCBhbHNvIGNvbnRhaW4gdGhlIHN0YXRlIG9mCisJICAgICAgdGhlIG1vdXNlIGJ1dHRvbnMuIFdpbGwgYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgdmFsdWVzIGRlZmluZWQKKwkgICAgICBieSB0aGUgRVZUX2V2ZW50TW9kTWFza1R5cGUgZW51bWVyYXRpb24uCiBuZXh0ICAgICAgICAtIEludGVybmFsIHVzZTsgZG8gbm90IHVzZS4KIHByZXYgICAgICAgIC0gSW50ZXJuYWwgdXNlOyBkbyBub3QgdXNlLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTU1NSw4ICs1NTUsOCBAQAogb3RoZXIgdGhhbiB0aGUgVVMgRW5nbGlzaCBrZXlib2FyZCAodGhlIGRlZmF1bHQpLgogCiBOT1RFOiAgIEVudHJpZXMgaW4gY29kZSBwYWdlIHRhYmxlcyAqbXVzdCogYmUgaW4gYXNjZW5kaW5nIG9yZGVyIGZvciB0aGUKLSAgICAgICAgc2NhbiBjb2RlcyBhcyB3ZSBkbyBhIGJpbmFyeSBzZWFyY2ggb24gdGhlIHRhYmxlcyBmb3IgdGhlIEFTQ0lJCi0gICAgICAgIGNvZGUgZXF1aXZhbGVudHMuCisJc2NhbiBjb2RlcyBhcyB3ZSBkbyBhIGJpbmFyeSBzZWFyY2ggb24gdGhlIHRhYmxlcyBmb3IgdGhlIEFTQ0lJCisJY29kZSBlcXVpdmFsZW50cy4KIAogSEVBREVSOgogZXZlbnQuaApkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL3BjaWxpYi5oIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL3BjaWxpYi5oCmluZGV4IGUyZDU4YjAuLjIzOGY4ZWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9wY2lsaWIuaAorKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL2luY2x1ZGUvcGNpbGliLmgKQEAgLTEwMywxNCArMTAzLDE0IEBACiAKIHR5cGVkZWYgdW5pb24gewogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVpbnQgICAgWmVybzoyOwotICAgICAgICB1aW50ICAgIFJlZ2lzdGVyOjY7Ci0gICAgICAgIHVpbnQgICAgRnVuY3Rpb246MzsKLSAgICAgICAgdWludCAgICBEZXZpY2U6NTsKLSAgICAgICAgdWludCAgICBCdXM6ODsKLSAgICAgICAgdWludCAgICBSZXNlcnZlZDo3OwotICAgICAgICB1aW50ICAgIEVuYWJsZToxOwotICAgICAgICB9IHA7CisJdWludCAgICBaZXJvOjI7CisJdWludCAgICBSZWdpc3Rlcjo2OworCXVpbnQgICAgRnVuY3Rpb246MzsKKwl1aW50ICAgIERldmljZTo1OworCXVpbnQgICAgQnVzOjg7CisJdWludCAgICBSZXNlcnZlZDo3OworCXVpbnQgICAgRW5hYmxlOjE7CisJfSBwOwogICAgIHVsb25nICAgaTsKICAgICB9IFBDSXNsb3Q7CiAKQEAgLTE5NCw5ICsxOTQsOSBAQAogICAgIHVjaGFyICAgU3Vib3JkaW5hdGVCdXM7CiAgICAgdWNoYXIgICBTZWNvbmRhcnlMYXRlbmN5OwogICAgIHN0cnVjdCAgewotICAgICAgICB1bG9uZyAgIEJhc2U7Ci0gICAgICAgIHVsb25nICAgTGltaXQ7Ci0gICAgICAgIH0gUmFuZ2VbNF07CisJdWxvbmcgICBCYXNlOworCXVsb25nICAgTGltaXQ7CisJfSBSYW5nZVs0XTsKICAgICB1Y2hhciAgIEludGVycnVwdExpbmU7CiAgICAgdWNoYXIgICBJbnRlcnJ1cHRQaW47CiAgICAgdXNob3J0ICBCcmlkZ2VDb250cm9sOwpAQCAtMjI0LDEwICsyMjQsMTAgQEAKICAgICB1Y2hhciAgICAgICAgICAgICAgIEhlYWRlclR5cGU7CiAgICAgdWNoYXIgICAgICAgICAgICAgICBCSVNUOwogICAgIHVuaW9uIHsKLSAgICAgICAgUENJVHlwZTBJbmZvICAgIHR5cGUwOwotICAgICAgICBQQ0lUeXBlMUluZm8gICAgdHlwZTE7Ci0gICAgICAgIFBDSVR5cGUySW5mbyAgICB0eXBlMjsKLSAgICAgICAgfSB1OworCVBDSVR5cGUwSW5mbyAgICB0eXBlMDsKKwlQQ0lUeXBlMUluZm8gICAgdHlwZTE7CisJUENJVHlwZTJJbmZvICAgIHR5cGUyOworCX0gdTsKICAgICB9IFBDSURldmljZUluZm87CiAKIC8qIFBDSSBDYXBhYmlsaXR5IGhlYWRlciBzdHJ1Y3R1cmUuIEFsbCBQQ0kgY2FwYWJpbGl0aWVzIGhhdmUgdGhlCkBAIC00MTEsNCArNDExLDMgQEAKICNlbmRpZgogCiAjZW5kaWYgIC8qIF9fUENJTElCX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL3BtX2hlbHAuaCBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9wbV9oZWxwLmgKaW5kZXggNjBhN2MyNS4uNTM2YTJiYSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL3BtX2hlbHAuaAorKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL2luY2x1ZGUvcG1faGVscC5oCkBAIC0xNjQsNCArMTY0LDMgQEAKICNlbmRpZiAgLyogIV9fT1MyX18gKi8KIAogI2VuZGlmICAvKiBfX1BNSEVMUF9IICovCi0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9wbV93Y3RsLmggYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL2luY2x1ZGUvcG1fd2N0bC5oCmluZGV4IDA4OGMxOWUuLjIwYWExNWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9wbV93Y3RsLmgKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL3BtX3djdGwuaApAQCAtNzMsNCArNzMsMyBAQAogUE1IRUxQX0NUTF9DT0RFKEdBR0VURVhQT1JUUyAgICAgICAgICAgICAgICAsMHgwMDJFKSwKIFBNSEVMUF9DVExfQ09ERShHQVRIVU5LICAgICAgICAgICAgICAgICAgICAgLDB4MDAyRiksCiBQTUhFTFBfQ1RMX0NPREUoU0VUTlVDTEVVU1BBVEggICAgICAgICAgICAgICwweDAwMzApLAotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL2luY2x1ZGUvcG1hcGkuaCBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9wbWFwaS5oCmluZGV4IDNhZmZlNjcuLjdkZGFjZTcgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9wbWFwaS5oCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9wbWFwaS5oCkBAIC0xMTQ2LDQgKzExNDYsMyBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBfX1BNQVBJX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL3BtaW1wLmggYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL2luY2x1ZGUvcG1pbXAuaAppbmRleCBkNmM1Y2RiLi44MTdmNWU2IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL2luY2x1ZGUvcG1pbXAuaAorKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL2luY2x1ZGUvcG1pbXAuaApAQCAtMTkxLDQgKzE5MSwzIEBACiAgICAgTlVMTCwKICNlbmRpZgogICAgIH07Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9zY2l0ZWNoLmggYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL2luY2x1ZGUvc2NpdGVjaC5oCmluZGV4IDFkYmZmYWMuLjhkNWVlZTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS9zY2l0ZWNoLmgKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9pbmNsdWRlL3NjaXRlY2guaApAQCAtODAsNyArODAsNyBAQAogCiAjaWZkZWYgIF9fR05VQ19fCiAjaWZkZWYgIF9fY3BsdXNwbHVzCi0vLyBHKysgY3VycmVudGx5IGZ1Y2tzIHRoaXMgdXAhCisvKiBHKysgY3VycmVudGx5IGZ1Y2tzIHRoaXMgdXAhICovCiAjZGVmaW5lIF9fY2RlY2wKICNkZWZpbmUgX19zdGRjYWxsCiAjZWxzZQpAQCAtNjA1LDE4ICs2MDUsMTggQEAKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzdGF0aWMgaWJvb2wgZmlyc3RUaW1lID0gdHJ1ZTsgIFwKICAgICBpZiAoZmlyc3RUaW1lKSB7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7ICAgICAgICAgIFwKLSAgICAgICAgRGVidWdJbnQoKTsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmaXJzdFRpbWUgPSBmYWxzZTsgICAgICAgICAgXAorCURlYnVnSW50KCk7ICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBEZWJ1Z1Z4RE9uY2UoKSAgICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHN0YXRpYyBpYm9vbCBmaXJzdFRpbWUgPSB0cnVlOyAgXAogICAgIGlmIChmaXJzdFRpbWUpIHsgICAgICAgICAgICAgICAgXAotICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTsgICAgICAgICAgXAotICAgICAgICBEZWJ1Z1Z4RCgpOyAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWZpcnN0VGltZSA9IGZhbHNlOyAgICAgICAgICBcCisJRGVidWdWeEQoKTsgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCiAvKiBNYWNyb3MgZm9yIGxpbnV4IHN0cmluZyBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyAqLwpAQCAtNjM2LDEwICs2MzYsMTAgQEAKIC8qIEdldCByaWQgb2Ygc29tZSBoZWxhY2lvdXNseSBhbm5veWluZyBWaXN1YWwgQysrIHdhcm5pbmdzISAqLwogCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19NV0VSS1NfXykgJiYgIWRlZmluZWQoX19TQ19fKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDc2MSkgICAvLyBpbnRlZ3JhbCBzaXplIG1pc21hdGNoIGluIGFyZ3VtZW50OyBjb252ZXJzaW9uIHN1cHBsaWVkCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MjQ0KSAgIC8vIGNvbnZlcnNpb24gZnJvbSAndW5zaWduZWQgc2hvcnQgJyB0byAndW5zaWduZWQgY2hhciAnLCBwb3NzaWJsZSBsb3NzIG9mIGRhdGEKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQwMTgpICAgLy8gJzwnIDogc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MzA1KSAgIC8vICdpbml0aWFsaXppbmcnIDogdHJ1bmNhdGlvbiBmcm9tICdjb25zdCBkb3VibGUnIHRvICdmbG9hdCcKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ3NjEpICAgLyogaW50ZWdyYWwgc2l6ZSBtaXNtYXRjaCBpbiBhcmd1bWVudDsgY29udmVyc2lvbiBzdXBwbGllZCAqLworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NCkgICAvKiBjb252ZXJzaW9uIGZyb20gJ3Vuc2lnbmVkIHNob3J0ICcgdG8gJ3Vuc2lnbmVkIGNoYXIgJywgcG9zc2libGUgbG9zcyBvZiBkYXRhICovCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0MDE4KSAgIC8qICc8JyA6IHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaCAqLworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDMwNSkgICAvKiAnaW5pdGlhbGl6aW5nJyA6IHRydW5jYXRpb24gZnJvbSAnY29uc3QgZG91YmxlJyB0byAnZmxvYXQnICovCiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY3NCwyOSArNjc0LDI5IEBACiAjICAgICAgIGRlZmluZSAgQ0hLKHgpICAgICAgeAogI2lmICAgICBDSEVDS0VEID4gMQogIyAgICAgICBkZWZpbmUgIENIRUNLKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICgocCkgPyAodm9pZCkwIDogRGVidWdJbnQoKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIF9DSEtfZmFpbCgxLCJDaGVjayBmYWlsZWQ6ICclcycsIGZpbGUgJXMsIGxpbmUgJWRcbiIsICAgXAotICAgICAgICAgICAgI3AsIF9fRklMRV9fLCBfX0xJTkVfXykpCisJKChwKSA/ICh2b2lkKTAgOiBEZWJ1Z0ludCgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBfQ0hLX2ZhaWwoMSwiQ2hlY2sgZmFpbGVkOiAnJXMnLCBmaWxlICVzLCBsaW5lICVkXG4iLCAgIFwKKwkgICAgI3AsIF9fRklMRV9fLCBfX0xJTkVfXykpCiAjICAgICAgIGRlZmluZSAgV0FSTihwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKChwKSA/ICh2b2lkKTAgOiBEZWJ1Z0ludCgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgX0NIS19mYWlsKDAsIldhcm5pbmc6ICclcycsIGZpbGUgJXMsIGxpbmUgJWRcbiIsICAgICAgICBcCi0gICAgICAgICAgICAjcCwgX19GSUxFX18sIF9fTElORV9fKSkKKwkoKHApID8gKHZvaWQpMCA6IERlYnVnSW50KCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIF9DSEtfZmFpbCgwLCJXYXJuaW5nOiAnJXMnLCBmaWxlICVzLCBsaW5lICVkXG4iLCAgICAgICAgXAorCSAgICAjcCwgX19GSUxFX18sIF9fTElORV9fKSkKICNlbHNlCiAjICAgICAgIGRlZmluZSAgQ0hFQ0socCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKChwKSA/ICh2b2lkKTAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgX0NIS19mYWlsKDEsIkNoZWNrIGZhaWxlZDogJyVzJywgZmlsZSAlcywgbGluZSAlZFxuIiwgICBcCi0gICAgICAgICAgICAjcCwgX19GSUxFX18sIF9fTElORV9fKSkKKwkoKHApID8gKHZvaWQpMCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIF9DSEtfZmFpbCgxLCJDaGVjayBmYWlsZWQ6ICclcycsIGZpbGUgJXMsIGxpbmUgJWRcbiIsICAgXAorCSAgICAjcCwgX19GSUxFX18sIF9fTElORV9fKSkKICMgICAgICAgZGVmaW5lICBXQVJOKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoKHApID8gKHZvaWQpMCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBfQ0hLX2ZhaWwoMCwiV2FybmluZzogJyVzJywgZmlsZSAlcywgbGluZSAlZFxuIiwgICAgICAgIFwKLSAgICAgICAgICAgICNwLCBfX0ZJTEVfXywgX19MSU5FX18pKQorCSgocCkgPyAodm9pZCkwIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgX0NIS19mYWlsKDAsIldhcm5pbmc6ICclcycsIGZpbGUgJXMsIGxpbmUgJWRcbiIsICAgICAgICBcCisJICAgICNwLCBfX0ZJTEVfXywgX19MSU5FX18pKQogI2VuZGlmCiAjICAgICAgIGRlZmluZSAgTE9HRkFUQUwobXNnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIF9DSEtfZmFpbCgxLCJGYXRhbCBlcnJvcjogJyVzJywgZmlsZSAlcywgbGluZSAlZFxuIiwgICAgXAotICAgICAgICAgICAgbXNnLCBfX0ZJTEVfXywgX19MSU5FX18pCisJICAgIF9DSEtfZmFpbCgxLCJGYXRhbCBlcnJvcjogJyVzJywgZmlsZSAlcywgbGluZSAlZFxuIiwgICAgXAorCSAgICBtc2csIF9fRklMRV9fLCBfX0xJTkVfXykKICMgICAgICAgZGVmaW5lICBMT0dXQVJOKG1zZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgX0NIS19mYWlsKDAsIldhcm5pbmc6ICclcycsIGZpbGUgJXMsIGxpbmUgJWRcbiIsICAgICAgICBcCi0gICAgICAgICAgICBtc2csIF9fRklMRV9fLCBfX0xJTkVfXykKKwkgICAgX0NIS19mYWlsKDAsIldhcm5pbmc6ICclcycsIGZpbGUgJXMsIGxpbmUgJWRcbiIsICAgICAgICBcCisJICAgIG1zZywgX19GSUxFX18sIF9fTElORV9fKQogI2Vsc2UKICMgICAgICAgZGVmaW5lICBDSEsoeCkKICMgICAgICAgZGVmaW5lICBDSEVDSyhwKSAgICAgICAgKCh2b2lkKTApCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL2luY2x1ZGUveDg2ZW11L3JlZ3MuaCBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS94ODZlbXUvcmVncy5oCmluZGV4IGM2Y2U4ODQuLmExMjAxN2IgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS94ODZlbXUvcmVncy5oCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvaW5jbHVkZS94ODZlbXUvcmVncy5oCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICB1MzIgRkxBR1M7CiAgICAgfTsKIAotLyogIAorLyoKICAqIFNlZ21lbnQgcmVnaXN0ZXJzIGhlcmUgcmVwcmVzZW50IHRoZSAxNiBiaXQgcXVhbnRpdGllcwogICogQ1MsIERTLCBFUywgU1MuCiAgKi8KQEAgLTE4Myw4ICsxODMsOCBAQAogI2RlZmluZSBGX0FMV0FZU19PTiAgKDB4MDAwMikgICAvKiBmbGFnIGJpdHMgYWx3YXlzIG9uICovCiAKIC8qCi0gKiBEZWZpbmUgYSBtYXNrIGZvciBvbmx5IHRob3NlIGZsYWcgYml0cyB3ZSB3aWxsIGV2ZXIgcGFzcyBiYWNrIAotICogKHZpYSBQVVNIRikgCisgKiBEZWZpbmUgYSBtYXNrIGZvciBvbmx5IHRob3NlIGZsYWcgYml0cyB3ZSB3aWxsIGV2ZXIgcGFzcyBiYWNrCisgKiAodmlhIFBVU0hGKQogICovCiAjZGVmaW5lIEZfTVNLIChGQl9DRnxGQl9QRnxGQl9BRnxGQl9aRnxGQl9TRnxGQl9URnxGQl9JRnxGQl9ERnxGQl9PRikKIApAQCAtMjM1LDIxICsyMzUsMjEgQEAKICNkZWZpbmUgU1lTTU9ERV9IQUxURUQgICAgICAgICAgMHg0MDAwMDAwMAogCiAjZGVmaW5lIFNZU01PREVfU0VHTUFTSyAoU1lTTU9ERV9TRUdfRFNfU1MgICAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVNNT0RFX1NFR09WUl9DUyAgICAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZU01PREVfU0VHT1ZSX0RTICAgICAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lTTU9ERV9TRUdPVlJfRVMgICAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVNNT0RFX1NFR09WUl9GUyAgICAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZU01PREVfU0VHT1ZSX0dTICAgICAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lTTU9ERV9TRUdPVlJfU1MpCisJCQkgU1lTTU9ERV9TRUdPVlJfQ1MgICAgICB8IFwKKwkJCSBTWVNNT0RFX1NFR09WUl9EUyAgICAgIHwgXAorCQkJIFNZU01PREVfU0VHT1ZSX0VTICAgICAgfCBcCisJCQkgU1lTTU9ERV9TRUdPVlJfRlMgICAgICB8IFwKKwkJCSBTWVNNT0RFX1NFR09WUl9HUyAgICAgIHwgXAorCQkJIFNZU01PREVfU0VHT1ZSX1NTKQogI2RlZmluZSBTWVNNT0RFX0NMUk1BU0sgKFNZU01PREVfU0VHX0RTX1NTICAgICAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lTTU9ERV9TRUdPVlJfQ1MgICAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVNNT0RFX1NFR09WUl9EUyAgICAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZU01PREVfU0VHT1ZSX0VTICAgICAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lTTU9ERV9TRUdPVlJfRlMgICAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVNNT0RFX1NFR09WUl9HUyAgICAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZU01PREVfU0VHT1ZSX1NTICAgICAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lTTU9ERV9QUkVGSVhfREFUQSAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVNNT0RFX1BSRUZJWF9BRERSKQorCQkJIFNZU01PREVfU0VHT1ZSX0NTICAgICAgfCBcCisJCQkgU1lTTU9ERV9TRUdPVlJfRFMgICAgICB8IFwKKwkJCSBTWVNNT0RFX1NFR09WUl9FUyAgICAgIHwgXAorCQkJIFNZU01PREVfU0VHT1ZSX0ZTICAgICAgfCBcCisJCQkgU1lTTU9ERV9TRUdPVlJfR1MgICAgICB8IFwKKwkJCSBTWVNNT0RFX1NFR09WUl9TUyAgICAgIHwgXAorCQkJIFNZU01PREVfUFJFRklYX0RBVEEgICAgfCBcCisJCQkgU1lTTU9ERV9QUkVGSVhfQUREUikKIAogI2RlZmluZSAgSU5UUl9TWU5DSCAgICAgICAgICAgMHgxCiAjZGVmaW5lICBJTlRSX0FTWU5DSCAgICAgICAgICAweDIKQEAgLTI2Niw4ICsyNjYsOCBAQAogICAgICAqICBEZWxheWVkIGZsYWcgc2V0ICAgICAgICAzIGJpdHMgICh6ZXJvLCBzaWduZWQsIHBhcml0eSkKICAgICAgKiAgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgNiBiaXRzCiAgICAgICogIGludGVycnVwdCAjICAgICAgICAgICAgIDggYml0cyAgaW5zdHJ1Y3Rpb24gcmFpc2VkIGludGVycnVwdAotICAgICAqICBCSU9TIHZpZGVvIHNlZ3JlZ3MgICAgICA0IGJpdHMgIAotICAgICAqICBJbnRlcnJ1cHQgUGVuZGluZyAgICAgICAxIGJpdHMgIAorICAgICAqICBCSU9TIHZpZGVvIHNlZ3JlZ3MgICAgICA0IGJpdHMKKyAgICAgKiAgSW50ZXJydXB0IFBlbmRpbmcgICAgICAgMSBiaXRzCiAgICAgICogIEV4dGVybiBpbnRlcnJ1cHQgICAgICAgIDEgYml0cwogICAgICAqICBIYWx0ZWQgICAgICAgICAgICAgICAgICAxIGJpdHMKICAgICAgKi8KQEAgLTMxNywxMiArMzE3LDEyIEBACiAKIGV4dGVybiAgICBYODZFTVVfc3lzRW52IF9YODZFTVVfZW52OwogI2RlZmluZSAgIE0gICAgICAgICAgICAgX1g4NkVNVV9lbnYKLSAgICAgICAgCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb24gUHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIEZ1bmN0aW9uIHRvIGxvZyBpbmZvcm1hdGlvbiBhdCBydW50aW1lICovCiAKLS8vdm9pZCAgICBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworLyp2b2lkICAgIHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7ICovCiAKICNpZmRlZiAgX19jcGx1c3BsdXMKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICovCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL2NvbW1vbi5tayBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvY29tbW9uLm1rCmluZGV4IGRhMjM2NGYuLmQzMzcxNTIgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvY29tbW9uLm1rCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvY29tbW9uLm1rCkBAIC0xNzgsNCArMTc4LDMgQEAKICMgSW5jbHVkZSBmaWxlIGRlcGVuZGVuY2llcwogCiAuSU5DTFVERSAuSUdOT1JFOiAibWFrZWZpbGUuZGVwIgotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL2djY19saW51eC5tayBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvZ2NjX2xpbnV4Lm1rCmluZGV4IDM2MWVkNGEuLjcyYzRjZWQgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvZ2NjX2xpbnV4Lm1rCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvZ2NjX2xpbnV4Lm1rCkBAIC0xNzgsNCArMTc4LDMgQEAKICMgRGVmaW5lIHdoaWNoIGZpbGUgY29udGFpbnMgb3VyIHJ1bGVzCiAKICAgIFJVTEVTX01BSwk6PSBnY2NfbGludXgubWsKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9tYWtlZGVmcy9nY2Nfd2luMzIubWsgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL2djY193aW4zMi5tawppbmRleCAxNzA5ZDg4Li4yMWNjZjk3IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL2djY193aW4zMi5taworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL2djY193aW4zMi5tawpAQCAtMTMzLDQgKzEzMywzIEBACiAjIERlZmluZSB3aGljaCBmaWxlIGNvbnRhaW5zIG91ciBydWxlcwogCiAgICBSVUxFU19NQUsJOj0gZ2NjX3dpbjMyLm1rCi0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcW54NC5tayBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcW54NC5tawppbmRleCA1NmRmYTRkLi5mNTgzYWYzIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3FueDQubWsKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9tYWtlZGVmcy9xbng0Lm1rCkBAIC0xNjIsNCArMTYyLDMgQEAKICMgRGVmaW5lIHdoaWNoIGZpbGUgY29udGFpbnMgb3VyIHJ1bGVzCiAKICAgIFJVTEVTX01BSwk6PSBxbng0Lm1rCi0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcnVsZXMvZ2NjX2Jlb3MubWsgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3J1bGVzL2djY19iZW9zLm1rCmluZGV4IDRiNTkzMjguLjY4MWI2OTggMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcnVsZXMvZ2NjX2Jlb3MubWsKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9tYWtlZGVmcy9ydWxlcy9nY2NfYmVvcy5tawpAQCAtNDQsNSArNDQsNCBAQAogJSRMOiAgICAgOyAkKExJQikgJChMSUJGTEFHUykgJEAgJCYKIAogIyBJbXBsaWNpdCBydWxlIGZvciBidWlsZGluZyBhbiBleGVjdXRhYmxlIGZpbGUKLSUkRTogICAgIDsgJChMRCkgJChMREZMQUdTKSAtbyAkQCAkJiAkKEVYRUxJQlMpICQoUE1MSUIpIAotCislJEU6ICAgICA7ICQoTEQpICQoTERGTEFHUykgLW8gJEAgJCYgJChFWEVMSUJTKSAkKFBNTElCKQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9tYWtlZGVmcy9ydWxlcy9nY2NfbGludXgubWsgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3J1bGVzL2djY19saW51eC5tawppbmRleCA1NjcxOWVkLi41ZjkxZmU1IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3J1bGVzL2djY19saW51eC5taworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3J1bGVzL2djY19saW51eC5tawpAQCAtOTEsNCArOTEsMyBAQAogICAgIEAkKEVDSE8pIGxkICRACiAgICAgQCQoTEQpICQoTERGTEFHUykgLW8gJEAgJCYgJChFWEVMSUJTKSAkKFBNTElCKSAtbG0KIC5FTkRJRgotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3J1bGVzL2djY193aW4zMi5tayBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcnVsZXMvZ2NjX3dpbjMyLm1rCmluZGV4IDM2YjI0YjEuLjQ4NWQxNjYgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcnVsZXMvZ2NjX3dpbjMyLm1rCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcnVsZXMvZ2NjX3dpbjMyLm1rCkBAIC04OCw0ICs4OCwzIEBACiAgICAgQCQoRUNITykgbGQgJEAKICAgICBAJChMRCkgJChMREZMQUdTKSAtbyAkQCBAJChta3RtcCAkKCY6cy9cL1xcKSAkKEVYRUxJQlMpICQoUE1MSUIpIC1sbSkKIC5FTkRJRgotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3J1bGVzL3ZhMzIubWsgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3J1bGVzL3ZhMzIubWsKaW5kZXggNTg4MDI4Zi4uMWEyMDMxOSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9tYWtlZGVmcy9ydWxlcy92YTMyLm1rCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcnVsZXMvdmEzMi5tawpAQCAtNjksMTQgKzY5LDE0IEBACiAjIEltcGxpY2l0IHJ1bGUgZm9yIGJ1aWxkaW5nIGFuIGV4ZWN1dGFibGUgZmlsZSB1c2luZyByZXNwb25zZSBmaWxlCiAuSUYgJChVU0VfT1MyR1VJKQogJSRFOiA7Ci0gICAgICAgIHJjbGluayAkKExEKSAkKFJDKSAkQCAkKG1rdG1wICQoTERGTEFHUykgJCgmOnQiK1xuIjpzL1wvXFwpXG4kQFxuJCoubWFwXG4kKEVYRUxJQlMpICQoUE1MSUIpXG4kKi5kZWZcbikKKwlyY2xpbmsgJChMRCkgJChSQykgJEAgJChta3RtcCAkKExERkxBR1MpICQoJjp0IitcbiI6cy9cL1xcKVxuJEBcbiQqLm1hcFxuJChFWEVMSUJTKSAkKFBNTElCKVxuJCouZGVmXG4pCiAuSUYgJChMWExJVEUpCi0gICAgICAgIGx4bGl0ZSAkQAorCWx4bGl0ZSAkQAogLkVORElGCiAuRUxTRQogJSRFOiA7Ci0gICAgICAgIHJjbGluayAkKExEKSAkKFJDKSAkQCAkKG1rdG1wICQoTERGTEFHUykgJCgmOnQiK1xuIjpzL1wvXFwpXG4kQFxuJCoubWFwXG4kKEVYRUxJQlMpICQoUE1MSUIpXG5cbikKKwlyY2xpbmsgJChMRCkgJChSQykgJEAgJChta3RtcCAkKExERkxBR1MpICQoJjp0IitcbiI6cy9cL1xcKVxuJEBcbiQqLm1hcFxuJChFWEVMSUJTKSAkKFBNTElCKVxuXG4pCiAuSUYgJChMWExJVEUpCi0gICAgICAgIGx4bGl0ZSAkQAorCWx4bGl0ZSAkQAogLkVORElGCiAuRU5ESUYKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcnVsZXMvdmEzNjUubWsgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3J1bGVzL3ZhMzY1Lm1rCmluZGV4IDBjMTQ5YjcuLjJiNDE4MDEgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcnVsZXMvdmEzNjUubWsKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9tYWtlZGVmcy9ydWxlcy92YTM2NS5tawpAQCAtNjYsMTQgKzY2LDE0IEBACiAjIEltcGxpY2l0IHJ1bGUgZm9yIGJ1aWxkaW5nIGFuIGV4ZWN1dGFibGUgZmlsZSB1c2luZyByZXNwb25zZSBmaWxlCiAuSUYgJChVU0VfT1MyR1VJKQogJSRFOiA7Ci0gICAgICAgIHJjbGluayAkKExEKSAkKFJDKSAkQCAkKG1rdG1wICQoTERGTEFHUykgJCgmOnQiK1xuIjpzL1wvXFwpXG4kQFxuJCoubWFwXG4kKEVYRUxJQlMpICQoUE1MSUIpXG4kKi5kZWZcbikKKwlyY2xpbmsgJChMRCkgJChSQykgJEAgJChta3RtcCAkKExERkxBR1MpICQoJjp0IitcbiI6cy9cL1xcKVxuJEBcbiQqLm1hcFxuJChFWEVMSUJTKSAkKFBNTElCKVxuJCouZGVmXG4pCiAuSUYgJChMWExJVEUpCi0gICAgICAgIGx4bGl0ZSAkQAorCWx4bGl0ZSAkQAogLkVORElGCiAuRUxTRQogJSRFOiA7Ci0gICAgICAgIHJjbGluayAkKExEKSAkKFJDKSAkQCAkKG1rdG1wICQoTERGTEFHUykgJCgmOnQiK1xuIjpzL1wvXFwpXG4kQFxuJCoubWFwXG4kKEVYRUxJQlMpICQoUE1MSUIpXG5cbikKKwlyY2xpbmsgJChMRCkgJChSQykgJEAgJChta3RtcCAkKExERkxBR1MpICQoJjp0IitcbiI6cy9cL1xcKVxuJEBcbiQqLm1hcFxuJChFWEVMSUJTKSAkKFBNTElCKVxuXG4pCiAuSUYgJChMWExJVEUpCi0gICAgICAgIGx4bGl0ZSAkQAorCWx4bGl0ZSAkQAogLkVORElGCiAuRU5ESUYKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcnVsZXMvd2MzMi5tayBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvcnVsZXMvd2MzMi5tawppbmRleCA2OGJmZDgzLi4zOWI4ODE5IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3J1bGVzL3djMzIubWsKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9tYWtlZGVmcy9ydWxlcy93YzMyLm1rCkBAIC0xMDksNyArMTA5LDcgQEAKIAlAZ2NwcCAtRE5BU01fQVNTRU1CTEVSIC1EX19XQVRDT01DX18gLUVQICQoPDpzLC8sXCkgPiAkKCo6cywvLFwpLmFzbQogCW5hc20gQCQobWt0bXAgLWYgb2JqIC1vICRAKSAkKCo6cywvLFwpLmFzbQogCUAkKFJNKSAtUyAkKG1rdG1wICQoKjpzLC8sXCkuYXNtKQotLkVORElGCQorLkVORElGCiAKICMgU3BlY2lhbCB0YXJnZXQgdG8gYnVpbGQgZGxsc3RhcnQuYXNtIHVzaW5nIEJvcmxhbmQgVEFTTQogZGxsc3RhcnQub2JqOiBkbGxzdGFydC5hc20KQEAgLTEyNiwyNiArMTI2LDI2IEBACiAJQHRyaW1saWIgJChta3RtcCAkKExERkxBR1MpIE9QIHF1aWV0IFNZUyBvczJ2MiBkbGxcbk4gJEBcbkYgJCgmOnQiLFxuIjpzL1wvXFwpXG5MSUJSICQoRVhFTElCUzp0IiwiKSkgJCoubG5rCiAJcmNsaW5rICQoTEQpICQoUkMpICRAICQqLmxuawogLklGICQoTEVBVkVfTElOS0ZJTEUpCi0uRUxTRQkKKy5FTFNFCiAJQCQoUk0pIC1TICQobWt0bXAgKi5sbmspCi0uRU5ESUYJCisuRU5ESUYKIC5FTElGICQoVVNFX1dJTjMyKQogJSREOiA7CiAJQHRyaW1saWIgJChta3RtcCAkKExERkxBR1MpIE9QIHF1aWV0IFNZUyBudF9kbGxcbk4gJEBcbkYgJCgmOnQiLFxuIjpzL1wvXFwpXG5MSUJSICQoUE1MSUIpJChERUZMSUJTKSQoRVhFTElCUzp0IiwiKSkgJCoubG5rCiAJcmNsaW5rICQoTEQpICQoUkMpICRAICQqLmxuawogLklGICQoTEVBVkVfTElOS0ZJTEUpCi0uRUxTRQkKKy5FTFNFCiAJQCQoUk0pIC1TICQobWt0bXAgKi5sbmspCi0uRU5ESUYJCisuRU5ESUYKIC5FTFNFCiAlJEQ6IDsKIAlAdHJpbWxpYiAkKG1rdG1wICQoTERGTEFHUykgT1AgcXVpZXQgU1lTIHdpbjM4NlxuTiAkKi5yZXhcbkYgJCgmOnQiLFxuIjpzL1wvXFwpXG5MSUJSICQoRVhFTElCUzp0IiwiKSkgJCoubG5rCiAJcmNsaW5rICQoTEQpICQoUkMpICRAICQqLmxuawogCXdiaW5kICQqIC1kIC1xIC1uCiAuSUYgJChMRUFWRV9MSU5LRklMRSkKLS5FTFNFCQorLkVMU0UKIAlAJChSTSkgLVMgJChta3RtcCAqLmxuaykKLS5FTkRJRgkKKy5FTkRJRgogLkVORElGCiAuRU5ESUYKIApAQCAtMTcxLDE4ICsxNzEsMTggQEAKIAkkKExEKSAkKExERkxBR1MpIEAkKi5sbmsKIAl4MzJmaXggJEAKIC5JRiAkKExFQVZFX0xJTktGSUxFKQotLkVMU0UJCisuRUxTRQogCUAkKFJNKSAtUyAkKG1rdG1wICoubG5rKQotLkVORElGCQorLkVORElGCiAuRUxJRiAkKFVTRV9PUzIzMikKIC5JRiAkKFVTRV9PUzJHVUkpCiAlJEU6IDsKIAlAdHJpbWxpYiAkKG1rdG1wICQoTERGTEFHUykgT1AgcXVpZXQgU1lTIG9zMnYyX3BtXG5OICRAXG5GICQoJjp0IiwiOnMvXC9cXClcbkxJQlIgJChQTUxJQikkKEVYRUxJQlM6dCIsIikpICQqLmxuawogCXJjbGluayAkKExEKSAkKFJDKSAkQCAkKi5sbmsKIC5JRiAkKExFQVZFX0xJTktGSUxFKQotLkVMU0UJCisuRUxTRQogCUAkKFJNKSAtUyAkKG1rdG1wICoubG5rKQotLkVORElGCQorLkVORElGCiAuSUYgJChMWExJVEUpCiAgCWx4bGl0ZSAkQAogLkVORElGCkBAIC0xOTEsOSArMTkxLDkgQEAKIAlAdHJpbWxpYiAkKG1rdG1wICQoTERGTEFHUykgT1AgcXVpZXQgU1lTIG9zMnYyXG5OICRAXG5GICQoJjp0IiwiOnMvXC9cXClcbkxJQlIgJChQTUxJQikkKEVYRUxJQlM6dCIsIikpICQqLmxuawogCXJjbGluayAkKExEKSAkKFJDKSAkQCAkKi5sbmsKIC5JRiAkKExFQVZFX0xJTktGSUxFKQotLkVMU0UJCisuRUxTRQogCUAkKFJNKSAtUyAkKG1rdG1wICoubG5rKQotLkVORElGCQorLkVORElGCiAuSUYgJChMWExJVEUpCiAgCWx4bGl0ZSAkQAogLkVORElGCkBAIC0yMDMsNDMgKzIwMyw0MyBAQAogCUB0cmltbGliICQobWt0bXAgJChMREZMQUdTKSBPUCBxdWlldCBTWVMgbnRcbk4gJEBcbkYgJCgmOnQiLCI6cy9cL1xcKVxuTElCUiAkKERFRkxJQlMpJChFWEVMSUJTOnQiLCIpKSAkKi5sbmsKIAlyY2xpbmsgJChMRCkgJChSQykgJEAgJCoubG5rCiAuSUYgJChMRUFWRV9MSU5LRklMRSkKLS5FTFNFCQorLkVMU0UKIAlAJChSTSkgLVMgJChta3RtcCAqLmxuaykKLS5FTkRJRgkKKy5FTkRJRgogLkVMSUYgJChVU0VfV0lOMzIpCiAuSUYgJChXSU4zMl9HVUkpCiAlJEU6IDsKIAlAdHJpbWxpYiAkKG1rdG1wICQoTERGTEFHUykgT1AgcXVpZXQgU1lTIHdpbjk1XG5OICRAXG5GICQoJjp0IiwiOnMvXC9cXClcbkxJQlIgJChQTUxJQikkKERFRkxJQlMpJChFWEVMSUJTOnQiLCIpKSAkKi5sbmsKIAlyY2xpbmsgJChMRCkgJChSQykgJEAgJCoubG5rCiAuSUYgJChMRUFWRV9MSU5LRklMRSkKLS5FTFNFCQorLkVMU0UKIAlAJChSTSkgLVMgJChta3RtcCAqLmxuaykKLS5FTkRJRgkKKy5FTkRJRgogLkVMU0UKICUkRTogOwogCUB0cmltbGliICQobWt0bXAgJChMREZMQUdTKSBPUCBxdWlldCBTWVMgbnRcbk4gJEBcbkYgJCgmOnQiLCI6cy9cL1xcKVxuTElCUiAkKFBNTElCKSQoREVGTElCUykkKEVYRUxJQlM6dCIsIikpICQqLmxuawogCXJjbGluayAkKExEKSAkKFJDKSAkQCAkKi5sbmsKIC5JRiAkKExFQVZFX0xJTktGSUxFKQotLkVMU0UJCisuRUxTRQogCUAkKFJNKSAtUyAkKG1rdG1wICoubG5rKQotLkVORElGCQorLkVORElGCiAuRU5ESUYKIC5FTElGICQoVVNFX1dJTjM4NikKICUkRTogOwogCUB0cmltbGliICQobWt0bXAgJChMREZMQUdTKSBPUCBxdWlldCBTWVMgd2luMzg2XG5OICQqLnJleFxuRiAkKCY6dCIsIjpzL1wvXFwpXG5MSUJSICQoUE1MSUIpJChFWEVMSUJTOnQiLCIpKSAkKi5sbmsKIAlyY2xpbmsgJChMRCkgd2JpbmQgJCoucmV4ICQqLmxuawogLklGICQoTEVBVkVfTElOS0ZJTEUpCi0uRUxTRQkKKy5FTFNFCiAJQCQoUk0pIC1TICQobWt0bXAgKi5sbmspCi0uRU5ESUYJCisuRU5ESUYKIC5FTElGICQoVVNFX1ROVCkKICUkRTogOwogCUB0cmltbGliICQobWt0bXAgJChMREZMQUdTKSBPUCBxdWlldFxuTiAkQFxuRiAkKCY6dCIsIjpzL1wvXFwpXG5MSUJSIGRvc3gzMi5saWIsdG50YXBpLmxpYiwkKFBNTElCKSQoRVhFTElCUzp0IiwiKSkgJCoubG5rCiAJJChMRCkgQCQqLmxuawogLklGICQoTEVBVkVfTElOS0ZJTEUpCi0uRUxTRQkKKy5FTFNFCiAJQCQoUk0pIC1TICQobWt0bXAgKi5sbmspCi0uRU5ESUYJCisuRU5ESUYKIC5JRiAkKERPU1NUWUxFKQogCUBtYXJrcGhhciAkQAogLkVORElGCkBAIC0yNTAsMTYgKzI1MCwxNSBAQAogCSQoTEQpIEAkKi5sbmsKIAlAYXR0cmliICtzICQqLmV4ZQogLklGICQoTEVBVkVfTElOS0ZJTEUpCi0uRUxTRQkKKy5FTFNFCiAJQCQoUk0pIC1TICQobWt0bXAgKi5sbmspCi0uRU5ESUYJCisuRU5ESUYKIC5FTFNFCiAlJEU6IDsKIAlAdHJpbWxpYiAkKG1rdG1wICQoTERGTEFHUykgT1AgcXVpZXRcbk4gJEBcbkYgJCgmOnQiLCI6cy9cL1xcKVxuTElCUiAkKFBNTElCKSQoRVhFTElCUzp0IiwiKSkgJCoubG5rCiAJJChMRCkgQCQqLmxuawogLklGICQoTEVBVkVfTElOS0ZJTEUpCi0uRUxTRQkKKy5FTFNFCiAJQCQoUk0pIC1TICQobWt0bXAgKi5sbmspCi0uRU5ESUYJCiAuRU5ESUYKLQorLkVORElGCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3N0YXJ0dXAubWsgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3N0YXJ0dXAubWsKaW5kZXggMWQ2N2E5Ny4uZDhiMmJhMiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9tYWtlZGVmcy9zdGFydHVwLm1rCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvc3RhcnR1cC5tawpAQCAtMTU5LDQgKzE1OSwzIEBACiAKICMgV2UgZG9udCB1c2UgVEFCUyBpbiBvdXIgbWFrZWZpbGVzCiAuTk9UQUJTICAgICAgICAgOj0geWVzCi0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvd2MzMi5tayBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvbWFrZWRlZnMvd2MzMi5tawppbmRleCBmZjAzNTExLi5lNTE3NWNhIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL21ha2VkZWZzL3djMzIubWsKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9tYWtlZGVmcy93YzMyLm1rCkBAIC0zNTEsNCArMzUxLDMgQEAKICMgRGVmaW5lIHdoaWNoIGZpbGUgY29udGFpbnMgb3VyIHJ1bGVzCiAKICAgIFJVTEVTX01BSwk6PSB3YzMyLm1rCi0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2Jpb3NlbXUvYmVzeXMuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2Jpb3NlbXUvYmVzeXMuYwppbmRleCA3ZjdlYTk5Li4xNTEyY2U5IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9iaW9zZW11L2Jlc3lzLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvYmlvc2VtdS9iZXN5cy5jCkBAIC03NywyMCArNzcsMjAgQEAKICAgICB1OCB2YWwgPSAwOwogCiAgICAgaWYgKGFkZHIgPj0gMHhDMDAwMCAmJiBhZGRyIDw9IF9CRV9lbnYuYmlvc21lbV9saW1pdCkgewotICAgICAgICB2YWwgPSAqKHU4KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyIC0gMHhDMDAwMCk7Ci0gICAgICAgIH0KKwl2YWwgPSAqKHU4KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyIC0gMHhDMDAwMCk7CisJfQogICAgIGVsc2UgaWYgKGFkZHIgPj0gMHhBMDAwMCAmJiBhZGRyIDw9IDB4RkZGRkYpIHsKLSAgICAgICAgdmFsID0gcmVhZGIoX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciAtIDB4QTAwMDApOwotICAgICAgICB9CisJdmFsID0gcmVhZGIoX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciAtIDB4QTAwMDApOworCX0KICAgICBlbHNlIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKIERCKCAgICAgcHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKLSAgICAgICAgSEFMVF9TWVMoKTsKLSAgICAgICAgfQorCUhBTFRfU1lTKCk7CisJfQogICAgIGVsc2UgewotICAgICAgICB2YWwgPSAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIpOwotICAgICAgICB9CisJdmFsID0gKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKwl9CiBEQiggaWYgKERFQlVHX01FTSgpKQotICAgICAgICBwcmludGsoIiUjMDh4IDEgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKwlwcmludGsoIiUjMDh4IDEgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKICAgICByZXR1cm4gdmFsOwogfQogCkBAIC0xMTIsNDIgKzExMiw0MiBAQAogCiAgICAgaWYgKGFkZHIgPj0gMHhDMDAwMCAmJiBhZGRyIDw9IF9CRV9lbnYuYmlvc21lbV9saW1pdCkgewogI2lmZGVmIF9fQklHX0VORElBTl9fCi0gICAgICAgIGlmIChhZGRyICYgMHgxKSB7Ci0gICAgICAgICAgICBhZGRyIC09IDB4QzAwMDA7Ci0gICAgICAgICAgICB2YWwgPSAoICoodTgqKShfQkVfZW52LmJpb3NtZW1fYmFzZSArIGFkZHIpIHwKLSAgICAgICAgICAgICAgICAgICAoKih1OCopKF9CRV9lbnYuYmlvc21lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZQorCWlmIChhZGRyICYgMHgxKSB7CisJICAgIGFkZHIgLT0gMHhDMDAwMDsKKwkgICAgdmFsID0gKCAqKHU4KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyKSB8CisJCSAgICgqKHU4KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkpOworCSAgICB9CisJZWxzZQogI2VuZGlmCi0gICAgICAgICAgICB2YWwgPSAqKHUxNiopKF9CRV9lbnYuYmlvc21lbV9iYXNlICsgYWRkciAtIDB4QzAwMDApOwotICAgICAgICB9CisJICAgIHZhbCA9ICoodTE2KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyIC0gMHhDMDAwMCk7CisJfQogICAgIGVsc2UgaWYgKGFkZHIgPj0gMHhBMDAwMCAmJiBhZGRyIDw9IDB4RkZGRkYpIHsKICNpZmRlZiBfX0JJR19FTkRJQU5fXwotICAgICAgICBpZiAoYWRkciAmIDB4MSkgewotICAgICAgICAgICAgYWRkciAtPSAweEEwMDAwOwotICAgICAgICAgICAgdmFsID0gKCByZWFkYihfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyKSB8Ci0gICAgICAgICAgICAgICAgICAgKHJlYWRiKF9CRV9lbnYuYnVzbWVtX2Jhc2UsIGFkZHIgKyAxKSA8PCA4KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UKKwlpZiAoYWRkciAmIDB4MSkgeworCSAgICBhZGRyIC09IDB4QTAwMDA7CisJICAgIHZhbCA9ICggcmVhZGIoX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkcikgfAorCQkgICAocmVhZGIoX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciArIDEpIDw8IDgpKTsKKwkgICAgfQorCWVsc2UKICNlbmRpZgotICAgICAgICAgICAgdmFsID0gcmVhZHcoX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciAtIDB4QTAwMDApOwotICAgICAgICB9CisJICAgIHZhbCA9IHJlYWR3KF9CRV9lbnYuYnVzbWVtX2Jhc2UsIGFkZHIgLSAweEEwMDAwKTsKKwl9CiAgICAgZWxzZSBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CiBEQiggICAgIHByaW50aygibWVtX3JlYWQ6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCi0gICAgICAgIEhBTFRfU1lTKCk7Ci0gICAgICAgIH0KKwlIQUxUX1NZUygpOworCX0KICAgICBlbHNlIHsKICNpZmRlZiBfX0JJR19FTkRJQU5fXwotICAgICAgICBpZiAoYWRkciAmIDB4MSkgewotICAgICAgICAgICAgdmFsID0gKCAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIpIHwKLSAgICAgICAgICAgICAgICAgICAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkpOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlCisJaWYgKGFkZHIgJiAweDEpIHsKKwkgICAgdmFsID0gKCAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIpIHwKKwkJICAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpKTsKKwkgICAgfQorCWVsc2UKICNlbmRpZgotICAgICAgICAgICAgdmFsID0gKih1MTYqKShNLm1lbV9iYXNlICsgYWRkcik7Ci0gICAgICAgIH0KKwkgICAgdmFsID0gKih1MTYqKShNLm1lbV9iYXNlICsgYWRkcik7CisJfQogREIoIGlmIChERUJVR19NRU0oKSkKLSAgICAgICAgcHJpbnRrKCIlIzA4eCAyIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCisJcHJpbnRrKCIlIzA4eCAyIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCiAgICAgcmV0dXJuIHZhbDsKIH0KIApAQCAtMTY5LDQ4ICsxNjksNDggQEAKIAogICAgIGlmIChhZGRyID49IDB4QzAwMDAgJiYgYWRkciA8PSBfQkVfZW52LmJpb3NtZW1fbGltaXQpIHsKICNpZmRlZiBfX0JJR19FTkRJQU5fXwotICAgICAgICBpZiAoYWRkciAmIDB4MykgewotICAgICAgICAgICAgYWRkciAtPSAweEMwMDAwOwotICAgICAgICAgICAgdmFsID0gKCAqKHU4KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyICsgMCkgfAotICAgICAgICAgICAgICAgICAgICgqKHU4KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkgfAotICAgICAgICAgICAgICAgICAgICgqKHU4KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyICsgMikgPDwgMTYpIHwKLSAgICAgICAgICAgICAgICAgICAoKih1OCopKF9CRV9lbnYuYmlvc21lbV9iYXNlICsgYWRkciArIDMpIDw8IDI0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UKKwlpZiAoYWRkciAmIDB4MykgeworCSAgICBhZGRyIC09IDB4QzAwMDA7CisJICAgIHZhbCA9ICggKih1OCopKF9CRV9lbnYuYmlvc21lbV9iYXNlICsgYWRkciArIDApIHwKKwkJICAgKCoodTgqKShfQkVfZW52LmJpb3NtZW1fYmFzZSArIGFkZHIgKyAxKSA8PCA4KSB8CisJCSAgICgqKHU4KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyICsgMikgPDwgMTYpIHwKKwkJICAgKCoodTgqKShfQkVfZW52LmJpb3NtZW1fYmFzZSArIGFkZHIgKyAzKSA8PCAyNCkpOworCSAgICB9CisJZWxzZQogI2VuZGlmCi0gICAgICAgICAgICB2YWwgPSAqKHUzMiopKF9CRV9lbnYuYmlvc21lbV9iYXNlICsgYWRkciAtIDB4QzAwMDApOwotICAgICAgICB9CisJICAgIHZhbCA9ICoodTMyKikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyIC0gMHhDMDAwMCk7CisJfQogICAgIGVsc2UgaWYgKGFkZHIgPj0gMHhBMDAwMCAmJiBhZGRyIDw9IDB4RkZGRkYpIHsKICNpZmRlZiBfX0JJR19FTkRJQU5fXwotICAgICAgICBpZiAoYWRkciAmIDB4MykgewotICAgICAgICAgICAgYWRkciAtPSAweEEwMDAwOwotICAgICAgICAgICAgdmFsID0gKCByZWFkYihfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyKSB8Ci0gICAgICAgICAgICAgICAgICAgKHJlYWRiKF9CRV9lbnYuYnVzbWVtX2Jhc2UsIGFkZHIgKyAxKSA8PCAgOCkgfAotICAgICAgICAgICAgICAgICAgIChyZWFkYihfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyICsgMikgPDwgMTYpIHwKLSAgICAgICAgICAgICAgICAgICAocmVhZGIoX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciArIDMpIDw8IDI0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UKKwlpZiAoYWRkciAmIDB4MykgeworCSAgICBhZGRyIC09IDB4QTAwMDA7CisJICAgIHZhbCA9ICggcmVhZGIoX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkcikgfAorCQkgICAocmVhZGIoX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciArIDEpIDw8ICA4KSB8CisJCSAgIChyZWFkYihfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyICsgMikgPDwgMTYpIHwKKwkJICAgKHJlYWRiKF9CRV9lbnYuYnVzbWVtX2Jhc2UsIGFkZHIgKyAzKSA8PCAyNCkpOworCSAgICB9CisJZWxzZQogI2VuZGlmCi0gICAgICAgICAgICB2YWwgPSByZWFkbChfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyIC0gMHhBMDAwMCk7Ci0gICAgICAgIH0KKwkgICAgdmFsID0gcmVhZGwoX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciAtIDB4QTAwMDApOworCX0KICAgICBlbHNlIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDQpIHsKIERCKCAgICAgcHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKLSAgICAgICAgSEFMVF9TWVMoKTsKLSAgICAgICAgfQorCUhBTFRfU1lTKCk7CisJfQogICAgIGVsc2UgewogI2lmZGVmIF9fQklHX0VORElBTl9fCi0gICAgICAgIGlmIChhZGRyICYgMHgzKSB7Ci0gICAgICAgICAgICB2YWwgPSAoICoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDApIHwKLSAgICAgICAgICAgICAgICAgICAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkgfAotICAgICAgICAgICAgICAgICAgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA8PCAxNikgfAotICAgICAgICAgICAgICAgICAgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAzKSA8PCAyNCkpOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlCisJaWYgKGFkZHIgJiAweDMpIHsKKwkgICAgdmFsID0gKCAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSB8CisJCSAgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA8PCA4KSB8CisJCSAgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA8PCAxNikgfAorCQkgICAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMykgPDwgMjQpKTsKKwkgICAgfQorCWVsc2UKICNlbmRpZgotICAgICAgICAgICAgdmFsID0gKih1MzIqKShNLm1lbV9iYXNlICsgYWRkcik7Ci0gICAgICAgIH0KKwkgICAgdmFsID0gKih1MzIqKShNLm1lbV9iYXNlICsgYWRkcik7CisJfQogREIoIGlmIChERUJVR19NRU0oKSkKLSAgICAgICAgcHJpbnRrKCIlIzA4eCA0IC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCisJcHJpbnRrKCIlIzA4eCA0IC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCiAgICAgcmV0dXJuIHZhbDsKIH0KIApAQCAtMjI4LDIwICsyMjgsMjAgQEAKICAgICB1OCB2YWwpCiB7CiBEQiggaWYgKERFQlVHX01FTSgpKQotICAgICAgICBwcmludGsoIiUjMDh4IDEgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKwlwcmludGsoIiUjMDh4IDEgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKICAgICBpZiAoYWRkciA+PSAweEMwMDAwICYmIGFkZHIgPD0gX0JFX2Vudi5iaW9zbWVtX2xpbWl0KSB7Ci0gICAgICAgICoodTgqKShfQkVfZW52LmJpb3NtZW1fYmFzZSArIGFkZHIgLSAweEMwMDAwKSA9IHZhbDsKLSAgICAgICAgfQorCSoodTgqKShfQkVfZW52LmJpb3NtZW1fYmFzZSArIGFkZHIgLSAweEMwMDAwKSA9IHZhbDsKKwl9CiAgICAgZWxzZSBpZiAoYWRkciA+PSAweEEwMDAwICYmIGFkZHIgPD0gMHhGRkZGRikgewotICAgICAgICB3cml0ZWIodmFsLCBfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyIC0gMHhBMDAwMCk7Ci0gICAgICAgIH0KKwl3cml0ZWIodmFsLCBfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyIC0gMHhBMDAwMCk7CisJfQogICAgIGVsc2UgaWYgKGFkZHIgPiBNLm1lbV9zaXplLTEpIHsKIERCKCAgICAgcHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCi0gICAgICAgIEhBTFRfU1lTKCk7Ci0gICAgICAgIH0KKwlIQUxUX1NZUygpOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKLSAgICAgICAgfQorCSoodTgqKShNLm1lbV9iYXNlICsgYWRkcikgPSB2YWw7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjU4LDQzICsyNTgsNDMgQEAKICAgICB1MTYgdmFsKQogewogREIoIGlmIChERUJVR19NRU0oKSkKLSAgICAgICAgcHJpbnRrKCIlIzA4eCAyIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCisJcHJpbnRrKCIlIzA4eCAyIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCiAgICAgaWYgKGFkZHIgPj0gMHhDMDAwMCAmJiBhZGRyIDw9IF9CRV9lbnYuYmlvc21lbV9saW1pdCkgewogI2lmZGVmIF9fQklHX0VORElBTl9fCi0gICAgICAgIGlmIChhZGRyICYgMHgxKSB7Ci0gICAgICAgICAgICBhZGRyIC09IDB4QzAwMDA7Ci0gICAgICAgICAgICAqKHU4KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKLSAgICAgICAgICAgICoodTgqKShfQkVfZW52LmJpb3NtZW1fYmFzZSArIGFkZHIgKyAxKSA9ICh2YWwgPj4gOCkgJiAweGZmOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlCisJaWYgKGFkZHIgJiAweDEpIHsKKwkgICAgYWRkciAtPSAweEMwMDAwOworCSAgICAqKHU4KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKwkgICAgKih1OCopKF9CRV9lbnYuYmlvc21lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJICAgIH0KKwllbHNlCiAjZW5kaWYKLSAgICAgICAgICAgICoodTE2KikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyIC0gMHhDMDAwMCkgPSB2YWw7Ci0gICAgICAgIH0KKwkgICAgKih1MTYqKShfQkVfZW52LmJpb3NtZW1fYmFzZSArIGFkZHIgLSAweEMwMDAwKSA9IHZhbDsKKwl9CiAgICAgZWxzZSBpZiAoYWRkciA+PSAweEEwMDAwICYmIGFkZHIgPD0gMHhGRkZGRikgewogI2lmZGVmIF9fQklHX0VORElBTl9fCi0gICAgICAgIGlmIChhZGRyICYgMHgxKSB7Ci0gICAgICAgICAgICBhZGRyIC09IDB4QTAwMDA7Ci0gICAgICAgICAgICB3cml0ZWIodmFsID4+IDAsIF9CRV9lbnYuYnVzbWVtX2Jhc2UsIGFkZHIpOwotICAgICAgICAgICAgd3JpdGViKHZhbCA+PiA4LCBfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyICsgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UKKwlpZiAoYWRkciAmIDB4MSkgeworCSAgICBhZGRyIC09IDB4QTAwMDA7CisJICAgIHdyaXRlYih2YWwgPj4gMCwgX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkcik7CisJICAgIHdyaXRlYih2YWwgPj4gOCwgX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciArIDEpOworCSAgICB9CisJZWxzZQogI2VuZGlmCi0gICAgICAgICAgICB3cml0ZXcodmFsLCBfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyIC0gMHhBMDAwMCk7Ci0gICAgICAgIH0KKwkgICAgd3JpdGV3KHZhbCwgX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciAtIDB4QTAwMDApOworCX0KICAgICBlbHNlIGlmIChhZGRyID4gTS5tZW1fc2l6ZS0yKSB7CiBEQiggICAgIHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQotICAgICAgICBIQUxUX1NZUygpOwotICAgICAgICB9CisJSEFMVF9TWVMoKTsKKwl9CiAgICAgZWxzZSB7CiAjaWZkZWYgX19CSUdfRU5ESUFOX18KLSAgICAgICAgaWYgKGFkZHIgJiAweDEpIHsKLSAgICAgICAgICAgICoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDApID0gKHZhbCA+PiAwKSAmIDB4ZmY7Ci0gICAgICAgICAgICAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA9ICh2YWwgPj4gOCkgJiAweGZmOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlCisJaWYgKGFkZHIgJiAweDEpIHsKKwkgICAgKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKwkgICAgKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+IDgpICYgMHhmZjsKKwkgICAgfQorCWVsc2UKICNlbmRpZgotICAgICAgICAgICAgKih1MTYqKShNLm1lbV9iYXNlICsgYWRkcikgPSB2YWw7Ci0gICAgICAgIH0KKwkgICAgKih1MTYqKShNLm1lbV9iYXNlICsgYWRkcikgPSB2YWw7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzExLDQ5ICszMTEsNDkgQEAKICAgICB1MzIgdmFsKQogewogREIoIGlmIChERUJVR19NRU0oKSkKLSAgICAgICAgcHJpbnRrKCIlIzA4eCA0IDwtICUjeFxuIiwgYWRkciwgdmFsKTspCisJcHJpbnRrKCIlIzA4eCA0IDwtICUjeFxuIiwgYWRkciwgdmFsKTspCiAgICAgaWYgKGFkZHIgPj0gMHhDMDAwMCAmJiBhZGRyIDw9IF9CRV9lbnYuYmlvc21lbV9saW1pdCkgewogI2lmZGVmIF9fQklHX0VORElBTl9fCi0gICAgICAgIGlmIChhZGRyICYgMHgxKSB7Ci0gICAgICAgICAgICBhZGRyIC09IDB4QzAwMDA7Ci0gICAgICAgICAgICAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSA9ICh2YWwgPj4gIDApICYgMHhmZjsKLSAgICAgICAgICAgICoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiAgOCkgJiAweGZmOwotICAgICAgICAgICAgKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMikgPSAodmFsID4+IDE2KSAmIDB4ZmY7Ci0gICAgICAgICAgICAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAzKSA9ICh2YWwgPj4gMjQpICYgMHhmZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZQorCWlmIChhZGRyICYgMHgxKSB7CisJICAgIGFkZHIgLT0gMHhDMDAwMDsKKwkgICAgKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+ICAwKSAmIDB4ZmY7CisJICAgICoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiAgOCkgJiAweGZmOworCSAgICAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKwkgICAgKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMykgPSAodmFsID4+IDI0KSAmIDB4ZmY7CisJICAgIH0KKwllbHNlCiAjZW5kaWYKLSAgICAgICAgICAgICoodTMyKikoTS5tZW1fYmFzZSArIGFkZHIgLSAweEMwMDAwKSA9IHZhbDsKLSAgICAgICAgfQorCSAgICAqKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyIC0gMHhDMDAwMCkgPSB2YWw7CisJfQogICAgIGVsc2UgaWYgKGFkZHIgPj0gMHhBMDAwMCAmJiBhZGRyIDw9IDB4RkZGRkYpIHsKICNpZmRlZiBfX0JJR19FTkRJQU5fXwotICAgICAgICBpZiAoYWRkciAmIDB4MykgewotICAgICAgICAgICAgYWRkciAtPSAweEEwMDAwOwotICAgICAgICAgICAgd3JpdGViKHZhbCA+PiAgMCwgX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkcik7Ci0gICAgICAgICAgICB3cml0ZWIodmFsID4+ICA4LCBfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyICsgMSk7Ci0gICAgICAgICAgICB3cml0ZWIodmFsID4+IDE2LCBfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyICsgMSk7Ci0gICAgICAgICAgICB3cml0ZWIodmFsID4+IDI0LCBfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyICsgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UKKwlpZiAoYWRkciAmIDB4MykgeworCSAgICBhZGRyIC09IDB4QTAwMDA7CisJICAgIHdyaXRlYih2YWwgPj4gIDAsIF9CRV9lbnYuYnVzbWVtX2Jhc2UsIGFkZHIpOworCSAgICB3cml0ZWIodmFsID4+ICA4LCBfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyICsgMSk7CisJICAgIHdyaXRlYih2YWwgPj4gMTYsIF9CRV9lbnYuYnVzbWVtX2Jhc2UsIGFkZHIgKyAxKTsKKwkgICAgd3JpdGViKHZhbCA+PiAyNCwgX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciArIDEpOworCSAgICB9CisJZWxzZQogI2VuZGlmCi0gICAgICAgICAgICB3cml0ZWwodmFsLCBfQkVfZW52LmJ1c21lbV9iYXNlLCBhZGRyIC0gMHhBMDAwMCk7Ci0gICAgICAgIH0KKwkgICAgd3JpdGVsKHZhbCwgX0JFX2Vudi5idXNtZW1fYmFzZSwgYWRkciAtIDB4QTAwMDApOworCX0KICAgICBlbHNlIGlmIChhZGRyID4gTS5tZW1fc2l6ZS00KSB7CiBEQiggICAgIHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQotICAgICAgICBIQUxUX1NZUygpOwotICAgICAgICB9CisJSEFMVF9TWVMoKTsKKwl9CiAgICAgZWxzZSB7CiAjaWZkZWYgX19CSUdfRU5ESUFOX18KLSAgICAgICAgaWYgKGFkZHIgJiAweDEpIHsKLSAgICAgICAgICAgICoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDApID0gKHZhbCA+PiAgMCkgJiAweGZmOwotICAgICAgICAgICAgKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+ICA4KSAmIDB4ZmY7Ci0gICAgICAgICAgICAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKLSAgICAgICAgICAgICoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDMpID0gKHZhbCA+PiAyNCkgJiAweGZmOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlCisJaWYgKGFkZHIgJiAweDEpIHsKKwkgICAgKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+ICAwKSAmIDB4ZmY7CisJICAgICoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiAgOCkgJiAweGZmOworCSAgICAqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKwkgICAgKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMykgPSAodmFsID4+IDI0KSAmIDB4ZmY7CisJICAgIH0KKwllbHNlCiAjZW5kaWYKLSAgICAgICAgICAgICoodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpID0gdmFsOwotICAgICAgICB9CisJICAgICoodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpID0gdmFsOworCX0KIH0KIAogLyogRGVidWcgZnVuY3Rpb25zIHRvIGRvIElTQS9QQ0kgYnVzIHBvcnQgSS9PICovCkBAIC0zNjUsNyArMzY1LDcgQEAKIHsKICAgICB1OCB2YWwgPSBQTV9pbnBiKHBvcnQpOwogICAgIGlmIChERUJVR19JTygpKQotICAgICAgICBwcmludGsoIiUwNFg6JTA0WDogIGluYi4lMDRYIC0+ICUwMlhcbiIsTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCAodXNob3J0KXBvcnQsIHZhbCk7CisJcHJpbnRrKCIlMDRYOiUwNFg6ICBpbmIuJTA0WCAtPiAlMDJYXG4iLE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgKHVzaG9ydClwb3J0LCB2YWwpOwogICAgIHJldHVybiB2YWw7CiB9CiAKQEAgLTM3Myw3ICszNzMsNyBAQAogewogICAgIHUxNiB2YWwgPSBQTV9pbnB3KHBvcnQpOwogICAgIGlmIChERUJVR19JTygpKQotICAgICAgICBwcmludGsoIiUwNFg6JTA0WDogIGludy4lMDRYIC0+ICUwNFhcbiIsTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCAodXNob3J0KXBvcnQsIHZhbCk7CisJcHJpbnRrKCIlMDRYOiUwNFg6ICBpbncuJTA0WCAtPiAlMDRYXG4iLE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgKHVzaG9ydClwb3J0LCB2YWwpOwogICAgIHJldHVybiB2YWw7CiB9CiAKQEAgLTM4MSwyOCArMzgxLDI4IEBACiB7CiAgICAgdTMyIHZhbCA9IFBNX2lucGQocG9ydCk7CiAgICAgaWYgKERFQlVHX0lPKCkpCi0gICAgICAgIHByaW50aygiJTA0WDolMDRYOiAgaW5sLiUwNFggLT4gJTA4WFxuIixNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsICh1c2hvcnQpcG9ydCwgdmFsKTsKKwlwcmludGsoIiUwNFg6JTA0WDogIGlubC4lMDRYIC0+ICUwOFhcbiIsTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCAodXNob3J0KXBvcnQsIHZhbCk7CiAgICAgcmV0dXJuIHZhbDsKIH0KIAogdm9pZCBYODZBUEkgQkVfb3V0YihpbnQgcG9ydCwgdTggdmFsKQogewogICAgIGlmIChERUJVR19JTygpKQotICAgICAgICBwcmludGsoIiUwNFg6JTA0WDogb3V0Yi4lMDRYIDwtICUwMlhcbiIsTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCAodXNob3J0KXBvcnQsIHZhbCk7CisJcHJpbnRrKCIlMDRYOiUwNFg6IG91dGIuJTA0WCA8LSAlMDJYXG4iLE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgKHVzaG9ydClwb3J0LCB2YWwpOwogICAgIFBNX291dHBiKHBvcnQsdmFsKTsKIH0KIAogdm9pZCBYODZBUEkgQkVfb3V0dyhpbnQgcG9ydCwgdTE2IHZhbCkKIHsKICAgICBpZiAoREVCVUdfSU8oKSkKLSAgICAgICAgcHJpbnRrKCIlMDRYOiUwNFg6IG91dHcuJTA0WCA8LSAlMDRYXG4iLE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgKHVzaG9ydClwb3J0LCB2YWwpOworCXByaW50aygiJTA0WDolMDRYOiBvdXR3LiUwNFggPC0gJTA0WFxuIixNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsICh1c2hvcnQpcG9ydCwgdmFsKTsKICAgICBQTV9vdXRwdyhwb3J0LHZhbCk7CiB9CiAKIHZvaWQgWDg2QVBJIEJFX291dGwoaW50IHBvcnQsIHUzMiB2YWwpCiB7CiAgICAgaWYgKERFQlVHX0lPKCkpCi0gICAgICAgIHByaW50aygiJTA0WDolMDRYOiBvdXRsLiUwNFggPC0gJTA4WFxuIixNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsICh1c2hvcnQpcG9ydCwgdmFsKTsKKwlwcmludGsoIiUwNFg6JTA0WDogb3V0bC4lMDRYIDwtICUwOFhcbiIsTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCAodXNob3J0KXBvcnQsIHZhbCk7CiAgICAgUE1fb3V0cGQocG9ydCx2YWwpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9iaW9zZW11L2Jpb3MuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2Jpb3NlbXUvYmlvcy5jCmluZGV4IDNmYjRjMzYuLmMwZjRhNGIgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2Jpb3NlbXUvYmlvcy5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2Jpb3NlbXUvYmlvcy5jCkBAIC01MCw5ICs1MCw5IEBACiAgICAgaW50IGludG5vKQogewogICAgIGlmIChCRV9yZHcoaW50bm8gKiA0ICsgMikgPT0gQklPU19TRUcpCi0gICAgICAgIHByaW50aygiYmlvc0VtdTogdW5kZWZpbmVkIGludGVycnVwdCAleGggY2FsbGVkIVxuIixpbnRubyk7CisJcHJpbnRrKCJiaW9zRW11OiB1bmRlZmluZWQgaW50ZXJydXB0ICV4aCBjYWxsZWQhXG4iLGludG5vKTsKICAgICBlbHNlCi0gICAgICAgIFg4NkVNVV9wcmVwYXJlRm9ySW50KGludG5vKTsKKwlYODZFTVVfcHJlcGFyZUZvckludChpbnRubyk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02OCwyNiArNjgsMjYgQEAKICAgICBpbnQgaW50bm8pCiB7CiAgICAgaWYgKE0ueDg2LlJfQUggPT0gMHgxMiAmJiBNLng4Ni5SX0JMID09IDB4MzIpIHsKLSAgICAgICAgaWYgKE0ueDg2LlJfQUwgPT0gMCkgewotICAgICAgICAgICAgLyogRW5hYmxlIENQVSBhY2Nlc3NlcyB0byB2aWRlbyBtZW1vcnkgKi8KLSAgICAgICAgICAgIFBNX291dHBiKDB4M2MyLCBQTV9pbnBiKDB4M2NjKSB8ICh1OCkweDAyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoTS54ODYuUl9BTCA9PSAxKSB7Ci0gICAgICAgICAgICAvKiBEaXNhYmxlIENQVSBhY2Nlc3NlcyB0byB2aWRlbyBtZW1vcnkgKi8KLSAgICAgICAgICAgIFBNX291dHBiKDB4M2MyLCBQTV9pbnBiKDB4M2NjKSAmICh1OCl+MHgwMik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisJaWYgKE0ueDg2LlJfQUwgPT0gMCkgeworCSAgICAvKiBFbmFibGUgQ1BVIGFjY2Vzc2VzIHRvIHZpZGVvIG1lbW9yeSAqLworCSAgICBQTV9vdXRwYigweDNjMiwgUE1faW5wYigweDNjYykgfCAodTgpMHgwMik7CisJICAgIHJldHVybjsKKwkgICAgfQorCWVsc2UgaWYgKE0ueDg2LlJfQUwgPT0gMSkgeworCSAgICAvKiBEaXNhYmxlIENQVSBhY2Nlc3NlcyB0byB2aWRlbyBtZW1vcnkgKi8KKwkgICAgUE1fb3V0cGIoMHgzYzIsIFBNX2lucGIoMHgzY2MpICYgKHU4KX4weDAyKTsKKwkgICAgcmV0dXJuOworCSAgICB9CiAjaWZkZWYgIERFQlVHCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcHJpbnRrKCJiaW9zRW11L2Jpb3MuaW50NDI6IHVua25vd24gZnVuY3Rpb24gQUg9MHgxMiwgQkw9MHgzMiwgQUw9JSMwMnhcbiIsTS54ODYuUl9BTCk7Ci0gICAgICAgICAgICB9CisJZWxzZSB7CisJICAgIHByaW50aygiYmlvc0VtdS9iaW9zLmludDQyOiB1bmtub3duIGZ1bmN0aW9uIEFIPTB4MTIsIEJMPTB4MzIsIEFMPSUjMDJ4XG4iLE0ueDg2LlJfQUwpOworCSAgICB9CiAjZW5kaWYKLSAgICAgICAgfQorCX0KICNpZmRlZiAgREVCVUcKICAgICBlbHNlIHsKLSAgICAgICAgcHJpbnRrKCJiaW9zRW11L2Jpb3MuaW50NDI6IHVua25vd24gZnVuY3Rpb24gQUg9JSMwMngsIEFMPSUjMDJ4LCBCTD0lIzAyeFxuIixNLng4Ni5SX0FILCBNLng4Ni5SX0FMLCBNLng4Ni5SX0JMKTsKLSAgICAgICAgfQorCXByaW50aygiYmlvc0VtdS9iaW9zLmludDQyOiB1bmtub3duIGZ1bmN0aW9uIEFIPSUjMDJ4LCBBTD0lIzAyeCwgQkw9JSMwMnhcbiIsTS54ODYuUl9BSCwgTS54ODYuUl9BTCwgTS54ODYuUl9CTCk7CisJfQogI2VuZGlmCiB9CiAKQEAgLTEwNiw5ICsxMDYsOSBAQAogICAgIGludCBpbnRubykKIHsKICAgICBpZiAoQkVfcmR3KGludG5vICogNCArIDIpID09IEJJT1NfU0VHKQotICAgICAgICBpbnQ0MihpbnRubyk7CisJaW50NDIoaW50bm8pOwogICAgIGVsc2UKLSAgICAgICAgWDg2RU1VX3ByZXBhcmVGb3JJbnQoaW50bm8pOworCVg4NkVNVV9wcmVwYXJlRm9ySW50KGludG5vKTsKIH0KIAogLyogUmVzdWx0IGNvZGVzIHJldHVybmVkIGJ5IHRoZSBQQ0kgQklPUyAqLwpAQCAtMTQyLDg3ICsxNDIsODcgQEAKIAogICAgIC8qIEZhaWwgaWYgbm8gUENJIGRldmljZSBpbmZvcm1hdGlvbiBoYXMgYmVlbiByZWdpc3RlcmVkICovCiAgICAgaWYgKCFfQkVfZW52LnZnYUluZm8ucGNpSW5mbykKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICBwY2lTbG90ID0gKHUxNikoX0JFX2Vudi52Z2FJbmZvLnBjaUluZm8tPnNsb3QuaSA+PiA4KTsKICAgICBzd2l0Y2ggKE0ueDg2LlJfQVgpIHsKLSAgICAgICAgY2FzZSAweEIxMDE6ICAgICAgICAgICAgICAgICAgICAvKiBQQ0kgYmlvcyBwcmVzZW50PyAqLwotICAgICAgICAgICAgTS54ODYuUl9BTCAgPSAweDAwOyAgICAgICAgIC8qIG5vIGNvbmZpZyBzcGFjZS9zcGVjaWFsIGN5Y2xlIGdlbmVyYXRpb24gc3VwcG9ydCAqLwotICAgICAgICAgICAgTS54ODYuUl9FRFggPSAweDIwNDk0MzUwOyAgIC8qICIgSUNQIiAqLwotICAgICAgICAgICAgTS54ODYuUl9CWCAgPSAweDAyMTA7ICAgICAgIC8qIFZlcnNpb24gMi4xMCAqLwotICAgICAgICAgICAgTS54ODYuUl9DTCAgPSAwOyAgICAgICAgICAgIC8qIE1heCBidXMgbnVtYmVyIGluIHN5c3RlbSAqLwotICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDB4QjEwMjogICAgICAgICAgICAgICAgICAgIC8qIEZpbmQgUENJIGRldmljZSAqLwotICAgICAgICAgICAgTS54ODYuUl9BSCA9IERFVklDRV9OT1RfRk9VTkQ7Ci0gICAgICAgICAgICBpZiAoTS54ODYuUl9EWCA9PSBfQkVfZW52LnZnYUluZm8ucGNpSW5mby0+VmVuZG9ySUQgJiYKLSAgICAgICAgICAgICAgICAgICAgTS54ODYuUl9DWCA9PSBfQkVfZW52LnZnYUluZm8ucGNpSW5mby0+RGV2aWNlSUQgJiYKLSAgICAgICAgICAgICAgICAgICAgTS54ODYuUl9TSSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgTS54ODYuUl9BSCA9IFNVQ0NFU1NGVUw7Ci0gICAgICAgICAgICAgICAgTS54ODYuUl9CWCA9IHBjaVNsb3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKE0ueDg2LlJfQUggIT0gU1VDQ0VTU0ZVTCksIEZfQ0YpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHhCMTAzOiAgICAgICAgICAgICAgICAgICAgLyogRmluZCBQQ0kgY2xhc3MgY29kZSAqLwotICAgICAgICAgICAgTS54ODYuUl9BSCA9IERFVklDRV9OT1RfRk9VTkQ7Ci0gICAgICAgICAgICBpZiAoTS54ODYuUl9DTCA9PSBfQkVfZW52LnZnYUluZm8ucGNpSW5mby0+SW50ZXJmYWNlICYmCi0gICAgICAgICAgICAgICAgICAgIE0ueDg2LlJfQ0ggPT0gX0JFX2Vudi52Z2FJbmZvLnBjaUluZm8tPlN1YkNsYXNzICYmCi0gICAgICAgICAgICAgICAgICAgICh1OCkoTS54ODYuUl9FQ1ggPj4gMTYpID09IF9CRV9lbnYudmdhSW5mby5wY2lJbmZvLT5CYXNlQ2xhc3MpIHsKLSAgICAgICAgICAgICAgICBNLng4Ni5SX0FIID0gU1VDQ0VTU0ZVTDsKLSAgICAgICAgICAgICAgICBNLng4Ni5SX0JYID0gcGNpU2xvdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoTS54ODYuUl9BSCAhPSBTVUNDRVNTRlVMKSwgRl9DRik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAweEIxMDg6ICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGNvbmZpZ3VyYXRpb24gYnl0ZSAqLwotICAgICAgICAgICAgTS54ODYuUl9BSCA9IEJBRF9SRUdJU1RFUl9OVU1CRVI7Ci0gICAgICAgICAgICBpZiAoTS54ODYuUl9CWCA9PSBwY2lTbG90KSB7Ci0gICAgICAgICAgICAgICAgTS54ODYuUl9BSCA9IFNVQ0NFU1NGVUw7Ci0gICAgICAgICAgICAgICAgTS54ODYuUl9DTCA9ICh1OClQQ0lfYWNjZXNzUmVnKE0ueDg2LlJfREksMCxQQ0lfUkVBRF9CWVRFLF9CRV9lbnYudmdhSW5mby5wY2lJbmZvKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoTS54ODYuUl9BSCAhPSBTVUNDRVNTRlVMKSwgRl9DRik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAweEIxMDk6ICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGNvbmZpZ3VyYXRpb24gd29yZCAqLwotICAgICAgICAgICAgTS54ODYuUl9BSCA9IEJBRF9SRUdJU1RFUl9OVU1CRVI7Ci0gICAgICAgICAgICBpZiAoTS54ODYuUl9CWCA9PSBwY2lTbG90KSB7Ci0gICAgICAgICAgICAgICAgTS54ODYuUl9BSCA9IFNVQ0NFU1NGVUw7Ci0gICAgICAgICAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpUENJX2FjY2Vzc1JlZyhNLng4Ni5SX0RJLDAsUENJX1JFQURfV09SRCxfQkVfZW52LnZnYUluZm8ucGNpSW5mbyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKE0ueDg2LlJfQUggIT0gU1VDQ0VTU0ZVTCksIEZfQ0YpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHhCMTBBOiAgICAgICAgICAgICAgICAgICAgLyogUmVhZCBjb25maWd1cmF0aW9uIGR3b3JkICovCi0gICAgICAgICAgICBNLng4Ni5SX0FIID0gQkFEX1JFR0lTVEVSX05VTUJFUjsKLSAgICAgICAgICAgIGlmIChNLng4Ni5SX0JYID09IHBjaVNsb3QpIHsKLSAgICAgICAgICAgICAgICBNLng4Ni5SX0FIID0gU1VDQ0VTU0ZVTDsKLSAgICAgICAgICAgICAgICBNLng4Ni5SX0VDWCA9ICh1MzIpUENJX2FjY2Vzc1JlZyhNLng4Ni5SX0RJLDAsUENJX1JFQURfRFdPUkQsX0JFX2Vudi52Z2FJbmZvLnBjaUluZm8pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChNLng4Ni5SX0FIICE9IFNVQ0NFU1NGVUwpLCBGX0NGKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDB4QjEwQjogICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbmZpZ3VyYXRpb24gYnl0ZSAqLwotICAgICAgICAgICAgTS54ODYuUl9BSCA9IEJBRF9SRUdJU1RFUl9OVU1CRVI7Ci0gICAgICAgICAgICBpZiAoTS54ODYuUl9CWCA9PSBwY2lTbG90KSB7Ci0gICAgICAgICAgICAgICAgTS54ODYuUl9BSCA9IFNVQ0NFU1NGVUw7Ci0gICAgICAgICAgICAgICAgUENJX2FjY2Vzc1JlZyhNLng4Ni5SX0RJLE0ueDg2LlJfQ0wsUENJX1dSSVRFX0JZVEUsX0JFX2Vudi52Z2FJbmZvLnBjaUluZm8pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChNLng4Ni5SX0FIICE9IFNVQ0NFU1NGVUwpLCBGX0NGKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDB4QjEwQzogICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbmZpZ3VyYXRpb24gd29yZCAqLwotICAgICAgICAgICAgTS54ODYuUl9BSCA9IEJBRF9SRUdJU1RFUl9OVU1CRVI7Ci0gICAgICAgICAgICBpZiAoTS54ODYuUl9CWCA9PSBwY2lTbG90KSB7Ci0gICAgICAgICAgICAgICAgTS54ODYuUl9BSCA9IFNVQ0NFU1NGVUw7Ci0gICAgICAgICAgICAgICAgUENJX2FjY2Vzc1JlZyhNLng4Ni5SX0RJLE0ueDg2LlJfQ1gsUENJX1dSSVRFX1dPUkQsX0JFX2Vudi52Z2FJbmZvLnBjaUluZm8pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChNLng4Ni5SX0FIICE9IFNVQ0NFU1NGVUwpLCBGX0NGKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDB4QjEwRDogICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbmZpZ3VyYXRpb24gZHdvcmQgKi8KLSAgICAgICAgICAgIE0ueDg2LlJfQUggPSBCQURfUkVHSVNURVJfTlVNQkVSOwotICAgICAgICAgICAgaWYgKE0ueDg2LlJfQlggPT0gcGNpU2xvdCkgewotICAgICAgICAgICAgICAgIE0ueDg2LlJfQUggPSBTVUNDRVNTRlVMOwotICAgICAgICAgICAgICAgIFBDSV9hY2Nlc3NSZWcoTS54ODYuUl9ESSxNLng4Ni5SX0VDWCxQQ0lfV1JJVEVfRFdPUkQsX0JFX2Vudi52Z2FJbmZvLnBjaUluZm8pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChNLng4Ni5SX0FIICE9IFNVQ0NFU1NGVUwpLCBGX0NGKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRrKCJiaW9zRW11L2Jpb3MuaW50MWE6IHVua25vd24gZnVuY3Rpb24gQVg9JSMwNHhcbiIsIE0ueDg2LlJfQVgpOwotICAgICAgICB9CisJY2FzZSAweEIxMDE6ICAgICAgICAgICAgICAgICAgICAvKiBQQ0kgYmlvcyBwcmVzZW50PyAqLworCSAgICBNLng4Ni5SX0FMICA9IDB4MDA7ICAgICAgICAgLyogbm8gY29uZmlnIHNwYWNlL3NwZWNpYWwgY3ljbGUgZ2VuZXJhdGlvbiBzdXBwb3J0ICovCisJICAgIE0ueDg2LlJfRURYID0gMHgyMDQ5NDM1MDsgICAvKiAiIElDUCIgKi8KKwkgICAgTS54ODYuUl9CWCAgPSAweDAyMTA7ICAgICAgIC8qIFZlcnNpb24gMi4xMCAqLworCSAgICBNLng4Ni5SX0NMICA9IDA7ICAgICAgICAgICAgLyogTWF4IGJ1cyBudW1iZXIgaW4gc3lzdGVtICovCisJICAgIENMRUFSX0ZMQUcoRl9DRik7CisJICAgIGJyZWFrOworCWNhc2UgMHhCMTAyOiAgICAgICAgICAgICAgICAgICAgLyogRmluZCBQQ0kgZGV2aWNlICovCisJICAgIE0ueDg2LlJfQUggPSBERVZJQ0VfTk9UX0ZPVU5EOworCSAgICBpZiAoTS54ODYuUl9EWCA9PSBfQkVfZW52LnZnYUluZm8ucGNpSW5mby0+VmVuZG9ySUQgJiYKKwkJICAgIE0ueDg2LlJfQ1ggPT0gX0JFX2Vudi52Z2FJbmZvLnBjaUluZm8tPkRldmljZUlEICYmCisJCSAgICBNLng4Ni5SX1NJID09IDApIHsKKwkJTS54ODYuUl9BSCA9IFNVQ0NFU1NGVUw7CisJCU0ueDg2LlJfQlggPSBwY2lTbG90OworCQl9CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChNLng4Ni5SX0FIICE9IFNVQ0NFU1NGVUwpLCBGX0NGKTsKKwkgICAgYnJlYWs7CisJY2FzZSAweEIxMDM6ICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIFBDSSBjbGFzcyBjb2RlICovCisJICAgIE0ueDg2LlJfQUggPSBERVZJQ0VfTk9UX0ZPVU5EOworCSAgICBpZiAoTS54ODYuUl9DTCA9PSBfQkVfZW52LnZnYUluZm8ucGNpSW5mby0+SW50ZXJmYWNlICYmCisJCSAgICBNLng4Ni5SX0NIID09IF9CRV9lbnYudmdhSW5mby5wY2lJbmZvLT5TdWJDbGFzcyAmJgorCQkgICAgKHU4KShNLng4Ni5SX0VDWCA+PiAxNikgPT0gX0JFX2Vudi52Z2FJbmZvLnBjaUluZm8tPkJhc2VDbGFzcykgeworCQlNLng4Ni5SX0FIID0gU1VDQ0VTU0ZVTDsKKwkJTS54ODYuUl9CWCA9IHBjaVNsb3Q7CisJCX0KKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKE0ueDg2LlJfQUggIT0gU1VDQ0VTU0ZVTCksIEZfQ0YpOworCSAgICBicmVhazsKKwljYXNlIDB4QjEwODogICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgY29uZmlndXJhdGlvbiBieXRlICovCisJICAgIE0ueDg2LlJfQUggPSBCQURfUkVHSVNURVJfTlVNQkVSOworCSAgICBpZiAoTS54ODYuUl9CWCA9PSBwY2lTbG90KSB7CisJCU0ueDg2LlJfQUggPSBTVUNDRVNTRlVMOworCQlNLng4Ni5SX0NMID0gKHU4KVBDSV9hY2Nlc3NSZWcoTS54ODYuUl9ESSwwLFBDSV9SRUFEX0JZVEUsX0JFX2Vudi52Z2FJbmZvLnBjaUluZm8pOworCQl9CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChNLng4Ni5SX0FIICE9IFNVQ0NFU1NGVUwpLCBGX0NGKTsKKwkgICAgYnJlYWs7CisJY2FzZSAweEIxMDk6ICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGNvbmZpZ3VyYXRpb24gd29yZCAqLworCSAgICBNLng4Ni5SX0FIID0gQkFEX1JFR0lTVEVSX05VTUJFUjsKKwkgICAgaWYgKE0ueDg2LlJfQlggPT0gcGNpU2xvdCkgeworCQlNLng4Ni5SX0FIID0gU1VDQ0VTU0ZVTDsKKwkJTS54ODYuUl9DWCA9ICh1MTYpUENJX2FjY2Vzc1JlZyhNLng4Ni5SX0RJLDAsUENJX1JFQURfV09SRCxfQkVfZW52LnZnYUluZm8ucGNpSW5mbyk7CisJCX0KKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKE0ueDg2LlJfQUggIT0gU1VDQ0VTU0ZVTCksIEZfQ0YpOworCSAgICBicmVhazsKKwljYXNlIDB4QjEwQTogICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgY29uZmlndXJhdGlvbiBkd29yZCAqLworCSAgICBNLng4Ni5SX0FIID0gQkFEX1JFR0lTVEVSX05VTUJFUjsKKwkgICAgaWYgKE0ueDg2LlJfQlggPT0gcGNpU2xvdCkgeworCQlNLng4Ni5SX0FIID0gU1VDQ0VTU0ZVTDsKKwkJTS54ODYuUl9FQ1ggPSAodTMyKVBDSV9hY2Nlc3NSZWcoTS54ODYuUl9ESSwwLFBDSV9SRUFEX0RXT1JELF9CRV9lbnYudmdhSW5mby5wY2lJbmZvKTsKKwkJfQorCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoTS54ODYuUl9BSCAhPSBTVUNDRVNTRlVMKSwgRl9DRik7CisJICAgIGJyZWFrOworCWNhc2UgMHhCMTBCOiAgICAgICAgICAgICAgICAgICAgLyogV3JpdGUgY29uZmlndXJhdGlvbiBieXRlICovCisJICAgIE0ueDg2LlJfQUggPSBCQURfUkVHSVNURVJfTlVNQkVSOworCSAgICBpZiAoTS54ODYuUl9CWCA9PSBwY2lTbG90KSB7CisJCU0ueDg2LlJfQUggPSBTVUNDRVNTRlVMOworCQlQQ0lfYWNjZXNzUmVnKE0ueDg2LlJfREksTS54ODYuUl9DTCxQQ0lfV1JJVEVfQllURSxfQkVfZW52LnZnYUluZm8ucGNpSW5mbyk7CisJCX0KKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKE0ueDg2LlJfQUggIT0gU1VDQ0VTU0ZVTCksIEZfQ0YpOworCSAgICBicmVhazsKKwljYXNlIDB4QjEwQzogICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGNvbmZpZ3VyYXRpb24gd29yZCAqLworCSAgICBNLng4Ni5SX0FIID0gQkFEX1JFR0lTVEVSX05VTUJFUjsKKwkgICAgaWYgKE0ueDg2LlJfQlggPT0gcGNpU2xvdCkgeworCQlNLng4Ni5SX0FIID0gU1VDQ0VTU0ZVTDsKKwkJUENJX2FjY2Vzc1JlZyhNLng4Ni5SX0RJLE0ueDg2LlJfQ1gsUENJX1dSSVRFX1dPUkQsX0JFX2Vudi52Z2FJbmZvLnBjaUluZm8pOworCQl9CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChNLng4Ni5SX0FIICE9IFNVQ0NFU1NGVUwpLCBGX0NGKTsKKwkgICAgYnJlYWs7CisJY2FzZSAweEIxMEQ6ICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBjb25maWd1cmF0aW9uIGR3b3JkICovCisJICAgIE0ueDg2LlJfQUggPSBCQURfUkVHSVNURVJfTlVNQkVSOworCSAgICBpZiAoTS54ODYuUl9CWCA9PSBwY2lTbG90KSB7CisJCU0ueDg2LlJfQUggPSBTVUNDRVNTRlVMOworCQlQQ0lfYWNjZXNzUmVnKE0ueDg2LlJfREksTS54ODYuUl9FQ1gsUENJX1dSSVRFX0RXT1JELF9CRV9lbnYudmdhSW5mby5wY2lJbmZvKTsKKwkJfQorCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoTS54ODYuUl9BSCAhPSBTVUNDRVNTRlVMKSwgRl9DRik7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHByaW50aygiYmlvc0VtdS9iaW9zLmludDFhOiB1bmtub3duIGZ1bmN0aW9uIEFYPSUjMDR4XG4iLCBNLng4Ni5SX0FYKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNDAsOSArMjQwLDkgQEAKICAgICBYODZFTVVfaW50ckZ1bmNzICAgIGJpb3NfaW50cl90YWJbMjU2XTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkgewotICAgICAgICBpbnRyVGFiW2ldID0gQklPU19TRUcgPDwgMTY7Ci0gICAgICAgIGJpb3NfaW50cl90YWJbaV0gPSB1bmRlZmluZWRfaW50cjsKLSAgICAgICAgfQorCWludHJUYWJbaV0gPSBCSU9TX1NFRyA8PCAxNjsKKwliaW9zX2ludHJfdGFiW2ldID0gdW5kZWZpbmVkX2ludHI7CisJfQogICAgIGJpb3NfaW50cl90YWJbMHgxMF0gPSBpbnQxMDsKICAgICBiaW9zX2ludHJfdGFiWzB4MUFdID0gaW50MUE7CiAgICAgYmlvc19pbnRyX3RhYlsweDQyXSA9IGludDQyOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvYmlvc2VtdS9iaW9zZW11LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9iaW9zZW11L2Jpb3NlbXUuYwppbmRleCBlZDI3MTdjLi4wMDUyNzA5IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9iaW9zZW11L2Jpb3NlbXUuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9iaW9zZW11L2Jpb3NlbXUuYwpAQCAtMTAwLDkgKzEwMCw5IEBACiAjZW5kaWYKICAgICBtZW1zZXQoJk0sMCxzaXplb2YoTSkpOwogICAgIGlmIChtZW1TaXplIDwgMjA0ODApCi0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIkVtdWxhdG9yIHJlcXVpcmVzIGF0IGxlYXN0IDIwS2Igb2YgbWVtb3J5IVxuIik7CisJUE1fZmF0YWxFcnJvcigiRW11bGF0b3IgcmVxdWlyZXMgYXQgbGVhc3QgMjBLYiBvZiBtZW1vcnkhXG4iKTsKICAgICBpZiAoKE0ubWVtX2Jhc2UgPSAodW5zaWduZWQgbG9uZyltYWxsb2MobWVtU2l6ZSkpID09IE5VTEwpCi0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIk91dCBvZiBtZW1vcnkhIik7CisJUE1fZmF0YWxFcnJvcigiT3V0IG9mIG1lbW9yeSEiKTsKICAgICBNLm1lbV9zaXplID0gbWVtU2l6ZTsKICAgICBfQkVfZW52LmJ1c21lbV9iYXNlID0gKHVsb25nKVBNX21hcFBoeXNpY2FsQWRkcigweEEwMDAwLDB4NUZGRkYsdHJ1ZSk7CiAgICAgTS54ODYuZGVidWcgPSBkZWJ1Z0ZsYWdzOwpAQCAtMTQ0LDE1ICsxNDQsMTUgQEAKICAgICBfQkVfZW52LnZnYUluZm8ucGNpSW5mbyA9IGluZm8tPnBjaUluZm87CiAgICAgX0JFX2Vudi52Z2FJbmZvLkJJT1NJbWFnZSA9IGluZm8tPkJJT1NJbWFnZTsKICAgICBpZiAoaW5mby0+QklPU0ltYWdlKSB7Ci0gICAgICAgIF9CRV9lbnYuYmlvc21lbV9iYXNlID0gKHVsb25nKWluZm8tPkJJT1NJbWFnZTsKLSAgICAgICAgX0JFX2Vudi5iaW9zbWVtX2xpbWl0ID0gMHhDMDAwMCArIGluZm8tPkJJT1NJbWFnZUxlbi0xOwotICAgICAgICB9CisJX0JFX2Vudi5iaW9zbWVtX2Jhc2UgPSAodWxvbmcpaW5mby0+QklPU0ltYWdlOworCV9CRV9lbnYuYmlvc21lbV9saW1pdCA9IDB4QzAwMDAgKyBpbmZvLT5CSU9TSW1hZ2VMZW4tMTsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIF9CRV9lbnYuYmlvc21lbV9iYXNlID0gX0JFX2Vudi5idXNtZW1fYmFzZSArIDB4MjAwMDA7Ci0gICAgICAgIF9CRV9lbnYuYmlvc21lbV9saW1pdCA9IDB4QzdGRkY7Ci0gICAgICAgIH0KKwlfQkVfZW52LmJpb3NtZW1fYmFzZSA9IF9CRV9lbnYuYnVzbWVtX2Jhc2UgKyAweDIwMDAwOworCV9CRV9lbnYuYmlvc21lbV9saW1pdCA9IDB4QzdGRkY7CisJfQogICAgIGlmICgqKCh1MzIqKWluZm8tPkxvd01lbSkgPT0gMCkKLSAgICAgICAgX0JFX2Jpb3NfaW5pdCgodTMyKilpbmZvLT5Mb3dNZW0pOworCV9CRV9iaW9zX2luaXQoKHUzMiopaW5mby0+TG93TWVtKTsKICAgICBtZW1jcHkoKHU4KilNLm1lbV9iYXNlLGluZm8tPkxvd01lbSxzaXplb2YoaW5mby0+TG93TWVtKSk7CiB9CiAKQEAgLTE4Miw4ICsxODIsOCBAQAogbW9kZSBwb2ludGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlyZWN0bHkgYWNjZXNzIHRoZSBtZW1vcnkuCiAKIE5PVEU6ICAgVGhlIG1lbW9yeSBpcyAqYWx3YXlzKiBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCwgc29uIG9uIG5vbi14ODYKLSAgICAgICAgc3lzdGVtcyB5b3Ugd2lsbCBuZWVkIHRvIGRvIGVuZGlhbiB0cmFuc2xhdGlvbnMgdG8gYWNjZXNzIHRoaXMKLSAgICAgICAgbWVtb3J5LgorCXN5c3RlbXMgeW91IHdpbGwgbmVlZCB0byBkbyBlbmRpYW4gdHJhbnNsYXRpb25zIHRvIGFjY2VzcyB0aGlzCisJbWVtb3J5LgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgKiBQTUFQSSBCRV9tYXBSZWFsUG9pbnRlcigKICAgICB1aW50IHJfc2VnLApAQCAtMTkyLDExICsxOTIsMTEgQEAKICAgICB1MzIgYWRkciA9ICgodTMyKXJfc2VnIDw8IDQpICsgcl9vZmY7CiAKICAgICBpZiAoYWRkciA+PSAweEMwMDAwICYmIGFkZHIgPD0gX0JFX2Vudi5iaW9zbWVtX2xpbWl0KSB7Ci0gICAgICAgIHJldHVybiAodm9pZCopKF9CRV9lbnYuYmlvc21lbV9iYXNlICsgYWRkciAtIDB4QzAwMDApOwotICAgICAgICB9CisJcmV0dXJuICh2b2lkKikoX0JFX2Vudi5iaW9zbWVtX2Jhc2UgKyBhZGRyIC0gMHhDMDAwMCk7CisJfQogICAgIGVsc2UgaWYgKGFkZHIgPj0gMHhBMDAwMCAmJiBhZGRyIDw9IDB4RkZGRkYpIHsKLSAgICAgICAgcmV0dXJuICh2b2lkKikoX0JFX2Vudi5idXNtZW1fYmFzZSArIGFkZHIgLSAweEEwMDAwKTsKLSAgICAgICAgfQorCXJldHVybiAodm9pZCopKF9CRV9lbnYuYnVzbWVtX2Jhc2UgKyBhZGRyIC0gMHhBMDAwMCk7CisJfQogICAgIHJldHVybiAodm9pZCopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKIH0KIApAQCAtMjEzLDggKzIxMyw4IEBACiB3ZSBwdXQgdGhlIHJlYWwgbW9kZSBjb2RlIHdlIGV4ZWN1dGUgZm9yIGlzc3VpbmcgaW50ZXJydXB0cykuCiAKIE5PVEU6ICAgVGhlIG1lbW9yeSBpcyAqYWx3YXlzKiBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCwgc29uIG9uIG5vbi14ODYKLSAgICAgICAgc3lzdGVtcyB5b3Ugd2lsbCBuZWVkIHRvIGRvIGVuZGlhbiB0cmFuc2xhdGlvbnMgdG8gYWNjZXNzIHRoaXMKLSAgICAgICAgbWVtb3J5LgorCXN5c3RlbXMgeW91IHdpbGwgbmVlZCB0byBkbyBlbmRpYW4gdHJhbnNsYXRpb25zIHRvIGFjY2VzcyB0aGlzCisJbWVtb3J5LgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgKiBQTUFQSSBCRV9nZXRWRVNBQnVmKAogICAgIHVpbnQgKmxlbiwKQEAgLTQxNiwyOCArNDE2LDI4IEBACiAgICAgUE1faW1wb3J0cyAqcG1JbXApCiB7CiAgICAgc3RhdGljIEJFX2V4cG9ydHMgX0JFX2V4cG9ydHMgPSB7Ci0gICAgICAgIHNpemVvZihCRV9leHBvcnRzKSwKLSAgICAgICAgQkVfaW5pdCwKLSAgICAgICAgQkVfc2V0VkdBLAotICAgICAgICBCRV9nZXRWR0EsCi0gICAgICAgIEJFX21hcFJlYWxQb2ludGVyLAotICAgICAgICBCRV9nZXRWRVNBQnVmLAotICAgICAgICBCRV9jYWxsUmVhbE1vZGUsCi0gICAgICAgIEJFX2ludDg2LAotICAgICAgICBCRV9pbnQ4NngsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIEJFX2V4aXQsCi0gICAgICAgIH07CisJc2l6ZW9mKEJFX2V4cG9ydHMpLAorCUJFX2luaXQsCisJQkVfc2V0VkdBLAorCUJFX2dldFZHQSwKKwlCRV9tYXBSZWFsUG9pbnRlciwKKwlCRV9nZXRWRVNBQnVmLAorCUJFX2NhbGxSZWFsTW9kZSwKKwlCRV9pbnQ4NiwKKwlCRV9pbnQ4NngsCisJTlVMTCwKKwlCRV9leGl0LAorCX07CiAgICAgaW50ICAgICBpLG1heDsKICAgICB1bG9uZyAgICpwOwogCi0gICAgLy8gSW5pdGlhbGl6ZSBhbGwgZGVmYXVsdCBpbXBvcnRzIHRvIHBvaW50IHRvIGZhdGFsIGVycm9yIGhhbmRsZXIKLSAgICAvLyBmb3IgdXB3YXJkcyBjb21wYXRpYmlsaXR5LgorICAgIC8qIEluaXRpYWxpemUgYWxsIGRlZmF1bHQgaW1wb3J0cyB0byBwb2ludCB0byBmYXRhbCBlcnJvciBoYW5kbGVyICovCisgICAgLyogZm9yIHVwd2FyZHMgY29tcGF0aWJpbGl0eS4gKi8KICAgICBtYXggPSBzaXplb2YoX1BNX2ltcG9ydHMpL3NpemVvZihCRV9pbml0TGlicmFyeV90KTsKICAgICBmb3IgKGkgPSAwLHAgPSAodWxvbmcqKSZfUE1faW1wb3J0czsgaSA8IG1heDsgaSsrKQotICAgICAgICAqcCsrID0gKHVsb25nKV9QTV9mYXRhbEVycm9ySGFuZGxlcjsKKwkqcCsrID0gKHVsb25nKV9QTV9mYXRhbEVycm9ySGFuZGxlcjsKIAotICAgIC8vIE5vdyBjb3B5IGFsbCBvdXIgaW1wb3J0ZWQgZnVuY3Rpb25zCisgICAgLyogTm93IGNvcHkgYWxsIG91ciBpbXBvcnRlZCBmdW5jdGlvbnMgKi8KICAgICBtZW1jcHkoJl9QTV9pbXBvcnRzLHBtSW1wLE1JTihzaXplb2YoX1BNX2ltcG9ydHMpLHBtSW1wLT5kd1NpemUpKTsKICAgICByZXR1cm4gJl9CRV9leHBvcnRzOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvYmlvc2VtdS93YXJtYm9vdC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvYmlvc2VtdS93YXJtYm9vdC5jCmluZGV4IDk2ZmE1YTAuLjk4ZDVmYjggMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2Jpb3NlbXUvd2FybWJvb3QuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9iaW9zZW11L3dhcm1ib290LmMKQEAgLTExMiwxNiArMTEyLDE2IEBACiAgICAgaW50ICAgICBiYXI7CiAKICAgICBmb3IgKGJhciA9IDB4MTA7IGJhciA8PSAweDE0OyBiYXIrKykgewotICAgICAgICBiYXNlID0gUENJX3JlYWRQQ0lSZWdMKGJhcixkZXZpY2UpICYgfjB4RkY7Ci0gICAgICAgIGlmICghKGJhc2UgJiAweDEpKSB7Ci0gICAgICAgICAgICBQQ0lfd3JpdGVQQ0lSZWdMKGJhciwweEZGRkZGRkZGLGRldmljZSk7Ci0gICAgICAgICAgICBzaXplID0gUENJX3JlYWRQQ0lSZWdMKGJhcixkZXZpY2UpICYgfjB4RkY7Ci0gICAgICAgICAgICBzaXplID0gfnNpemUrMTsKLSAgICAgICAgICAgIFBDSV93cml0ZVBDSVJlZ0woYmFyLDAsZGV2aWNlKTsKLSAgICAgICAgICAgIGlmIChzaXplID49IE1BWF9CSU9TTEVOKQotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJYmFzZSA9IFBDSV9yZWFkUENJUmVnTChiYXIsZGV2aWNlKSAmIH4weEZGOworCWlmICghKGJhc2UgJiAweDEpKSB7CisJICAgIFBDSV93cml0ZVBDSVJlZ0woYmFyLDB4RkZGRkZGRkYsZGV2aWNlKTsKKwkgICAgc2l6ZSA9IFBDSV9yZWFkUENJUmVnTChiYXIsZGV2aWNlKSAmIH4weEZGOworCSAgICBzaXplID0gfnNpemUrMTsKKwkgICAgUENJX3dyaXRlUENJUmVnTChiYXIsMCxkZXZpY2UpOworCSAgICBpZiAoc2l6ZSA+PSBNQVhfQklPU0xFTikKKwkJcmV0dXJuIGJhc2U7CisJICAgIH0KKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEzOCwxMyArMTM4LDEzIEBACiAgICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgTnVtRGV2aWNlczsgaSsrKSB7Ci0gICAgICAgIFBDSV93cml0ZVBDSVJlZ0woMHgxMCxQQ0lbRGV2aWNlSW5kZXhbaV1dLkJhc2VBZGRyZXNzMTAsaSk7Ci0gICAgICAgIFBDSV93cml0ZVBDSVJlZ0woMHgxNCxQQ0lbRGV2aWNlSW5kZXhbaV1dLkJhc2VBZGRyZXNzMTQsaSk7Ci0gICAgICAgIFBDSV93cml0ZVBDSVJlZ0woMHgxOCxQQ0lbRGV2aWNlSW5kZXhbaV1dLkJhc2VBZGRyZXNzMTgsaSk7Ci0gICAgICAgIFBDSV93cml0ZVBDSVJlZ0woMHgxQyxQQ0lbRGV2aWNlSW5kZXhbaV1dLkJhc2VBZGRyZXNzMUMsaSk7Ci0gICAgICAgIFBDSV93cml0ZVBDSVJlZ0woMHgyMCxQQ0lbRGV2aWNlSW5kZXhbaV1dLkJhc2VBZGRyZXNzMjAsaSk7Ci0gICAgICAgIFBDSV93cml0ZVBDSVJlZ0woMHgyNCxQQ0lbRGV2aWNlSW5kZXhbaV1dLkJhc2VBZGRyZXNzMjQsaSk7Ci0gICAgICAgIH0KKwlQQ0lfd3JpdGVQQ0lSZWdMKDB4MTAsUENJW0RldmljZUluZGV4W2ldXS5CYXNlQWRkcmVzczEwLGkpOworCVBDSV93cml0ZVBDSVJlZ0woMHgxNCxQQ0lbRGV2aWNlSW5kZXhbaV1dLkJhc2VBZGRyZXNzMTQsaSk7CisJUENJX3dyaXRlUENJUmVnTCgweDE4LFBDSVtEZXZpY2VJbmRleFtpXV0uQmFzZUFkZHJlc3MxOCxpKTsKKwlQQ0lfd3JpdGVQQ0lSZWdMKDB4MUMsUENJW0RldmljZUluZGV4W2ldXS5CYXNlQWRkcmVzczFDLGkpOworCVBDSV93cml0ZVBDSVJlZ0woMHgyMCxQQ0lbRGV2aWNlSW5kZXhbaV1dLkJhc2VBZGRyZXNzMjAsaSk7CisJUENJX3dyaXRlUENJUmVnTCgweDI0LFBDSVtEZXZpY2VJbmRleFtpXV0uQmFzZUFkZHJlc3MyNCxpKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjUsMjkgKzE2NSwyOSBAQAogICAgIFJNUkVHUyAgICAgICAgICByZWdzOwogICAgIFJNU1JFR1MgICAgICAgICBzcmVnczsKIAotICAgIC8vIERldGVybWluZSB0aGUgdmFsdWUgdG8gc3RvcmUgaW4gQVggZm9yIEJJT1MgUE9TVAorICAgIC8qIERldGVybWluZSB0aGUgdmFsdWUgdG8gc3RvcmUgaW4gQVggZm9yIEJJT1MgUE9TVCAqLwogICAgIHJlZ3MueC5heCA9ICh1MTYpKFBDSVtEZXZpY2VJbmRleFtkZXZpY2VdXS5zbG90LmkgPj4gOCk7CiAgICAgaWYgKHVzZVY4NikgewotICAgICAgICAvLyBQb3N0IHRoZSBCSU9TIHVzaW5nIHRoZSBQTSBmdW5jdGlvbnMgKGllOiB2ODYgbW9kZSBvbiBMaW51eCkKLSAgICAgICAgaWYgKCFQTV9kb0JJT1NQT1NUKHJlZ3MueC5heCxCSU9TUGh5c0FkZHIsbWFwcGVkQklPUyxCSU9TTGVuKSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIFBNIGZ1bmN0aW9uIGZhaWxzLCB0aGlzIHByb2JhYmx5IG1lYW5zIGFyZSB3ZSBhcmUgb24KLSAgICAgICAgICAgIC8vIERPUyBhbmQgY2FuJ3QgcmUtbWFwIHRoZSByZWFsIG1vZGUgMHhDMDAwMCByZWdpb24uIEluIHRoaXNlCi0gICAgICAgICAgICAvLyBjYXNlIGlmIHRoZSBkZXZpY2UgaXMgdGhlIHByaW1hcnksIHdlIGNhbiB1c2UgdGhlIHJlYWwKLSAgICAgICAgICAgIC8vIEJJT1MgYXQgMHhDMDAwMCBkaXJlY3RseS4KLSAgICAgICAgICAgIGlmIChkZXZpY2UgPT0gMCkKLSAgICAgICAgICAgICAgICBQTV9kb0JJT1NQT1NUKHJlZ3MueC5heCwweEMwMDAwLG1hcHBlZEJJT1MsQklPU0xlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBQb3N0IHRoZSBCSU9TIHVzaW5nIHRoZSBQTSBmdW5jdGlvbnMgKGllOiB2ODYgbW9kZSBvbiBMaW51eCkgKi8KKwlpZiAoIVBNX2RvQklPU1BPU1QocmVncy54LmF4LEJJT1NQaHlzQWRkcixtYXBwZWRCSU9TLEJJT1NMZW4pKSB7CisJICAgIC8qIElmIHRoZSBQTSBmdW5jdGlvbiBmYWlscywgdGhpcyBwcm9iYWJseSBtZWFucyBhcmUgd2UgYXJlIG9uICovCisJICAgIC8qIERPUyBhbmQgY2FuJ3QgcmUtbWFwIHRoZSByZWFsIG1vZGUgMHhDMDAwMCByZWdpb24uIEluIHRoaXNlICovCisJICAgIC8qIGNhc2UgaWYgdGhlIGRldmljZSBpcyB0aGUgcHJpbWFyeSwgd2UgY2FuIHVzZSB0aGUgcmVhbCAqLworCSAgICAvKiBCSU9TIGF0IDB4QzAwMDAgZGlyZWN0bHkuICovCisJICAgIGlmIChkZXZpY2UgPT0gMCkKKwkJUE1fZG9CSU9TUE9TVChyZWdzLnguYXgsMHhDMDAwMCxtYXBwZWRCSU9TLEJJT1NMZW4pOworCSAgICB9CisJfQogICAgIGVsc2UgewotICAgICAgICAvLyBTZXR1cCB0aGUgWDg2IGVtdWxhdG9yIGZvciB0aGUgVkdBIEJJT1MKLSAgICAgICAgQkVfc2V0VkdBKCZWR0FJbmZvW2RldmljZV0pOworCS8qIFNldHVwIHRoZSBYODYgZW11bGF0b3IgZm9yIHRoZSBWR0EgQklPUyAqLworCUJFX3NldFZHQSgmVkdBSW5mb1tkZXZpY2VdKTsKIAotICAgICAgICAvLyBFeGVjdXRlIHRoZSBCSU9TIFBPU1QgY29kZQotICAgICAgICBCRV9jYWxsUmVhbE1vZGUoMHhDMDAwLDB4MDAwMywmcmVncywmc3JlZ3MpOworCS8qIEV4ZWN1dGUgdGhlIEJJT1MgUE9TVCBjb2RlICovCisJQkVfY2FsbFJlYWxNb2RlKDB4QzAwMCwweDAwMDMsJnJlZ3MsJnNyZWdzKTsKIAotICAgICAgICAvLyBDbGVhbnVwIGFuZCBleGl0Ci0gICAgICAgIEJFX2dldFZHQSgmVkdBSW5mb1tkZXZpY2VdKTsKLSAgICAgICAgfQorCS8qIENsZWFudXAgYW5kIGV4aXQgKi8KKwlCRV9nZXRWR0EoJlZHQUluZm9bZGV2aWNlXSk7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjA2LDExMyArMjA2LDExMyBAQAogICAgIGNoYXIgICAgZmlsZW5hbWVbX01BWF9QQVRIXTsKICAgICBGSUxFICAgICpmOwogCi0gICAgLy8gRGlzYWJsZSB0aGUgcHJpbWFyeSBkaXNwbGF5IGNvbnRyb2xsZXIgYW5kIEFHUCBWR0EgcGFzcy10aHJvdWdoCisgICAgLyogRGlzYWJsZSB0aGUgcHJpbWFyeSBkaXNwbGF5IGNvbnRyb2xsZXIgYW5kIEFHUCBWR0EgcGFzcy10aHJvdWdoICovCiAgICAgRElTQUJMRV9ERVZJQ0UoMCk7CiAgICAgaWYgKEFHUEJyaWRnZSkKLSAgICAgICAgRElTQUJMRV9BR1BfVkdBKCk7CisJRElTQUJMRV9BR1BfVkdBKCk7CiAKLSAgICAvLyBOb3cgUE9TVCBhbGwgdGhlIHNlY29uZGFyeSBjb250cm9sbGVycworICAgIC8qIE5vdyBQT1NUIGFsbCB0aGUgc2Vjb25kYXJ5IGNvbnRyb2xsZXJzICovCiAgICAgZm9yIChkZXZpY2UgPSAwOyBkZXZpY2UgPCBOdW1EZXZpY2VzOyBkZXZpY2UrKykgewotICAgICAgICAvLyBTa2lwIHRoZSBkZXZpY2UgaWYgaXQgaXMgbm90IGVuYWJsZWQgKHByb2JhYmx5IGFuIElTQSBkZXZpY2UpCi0gICAgICAgIGlmIChEZXZpY2VJbmRleFtkZXZpY2VdID09IC0xKQotICAgICAgICAgICAgY29udGludWU7CisJLyogU2tpcCB0aGUgZGV2aWNlIGlmIGl0IGlzIG5vdCBlbmFibGVkIChwcm9iYWJseSBhbiBJU0EgZGV2aWNlKSAqLworCWlmIChEZXZpY2VJbmRleFtkZXZpY2VdID09IC0xKQorCSAgICBjb250aW51ZTsKIAotICAgICAgICAvLyBFbmFibGUgc2Vjb25kYXJ5IGRpc3BsYXkgY29udHJvbGxlci4gSWYgdGhlIHNlY29uZGFyeSBjb250cm9sbGVyCi0gICAgICAgIC8vIGlzIG9uIHRoZSBBR1AgYnVzLCB0aGVuIGVuYWJsZSBWR0EgcmVzb3VyY2VzIGZvciB0aGUgQUdQIGRldmljZS4KLSAgICAgICAgRU5BQkxFX0RFVklDRShkZXZpY2UpOwotICAgICAgICBpZiAoQUdQQnJpZGdlICYmIEFHUEJyaWRnZS0+U2Vjb25kYXlCdXNOdW1iZXIgPT0gUENJW0RldmljZUluZGV4W2RldmljZV1dLnNsb3QucC5CdXMpCi0gICAgICAgICAgICBFTkFCTEVfQUdQX1ZHQSgpOworCS8qIEVuYWJsZSBzZWNvbmRhcnkgZGlzcGxheSBjb250cm9sbGVyLiBJZiB0aGUgc2Vjb25kYXJ5IGNvbnRyb2xsZXIgKi8KKwkvKiBpcyBvbiB0aGUgQUdQIGJ1cywgdGhlbiBlbmFibGUgVkdBIHJlc291cmNlcyBmb3IgdGhlIEFHUCBkZXZpY2UuICovCisJRU5BQkxFX0RFVklDRShkZXZpY2UpOworCWlmIChBR1BCcmlkZ2UgJiYgQUdQQnJpZGdlLT5TZWNvbmRheUJ1c051bWJlciA9PSBQQ0lbRGV2aWNlSW5kZXhbZGV2aWNlXV0uc2xvdC5wLkJ1cykKKwkgICAgRU5BQkxFX0FHUF9WR0EoKTsKIAotICAgICAgICAvLyBDaGVjayBpZiB0aGUgY29udHJvbGxlciBoYXMgYWxyZWFkeSBiZWVuIFBPU1QnZWQKLSAgICAgICAgaWYgKFZHQV9OT1RfQUNUSVZFKCkpIHsKLSAgICAgICAgICAgIC8vIEZpbmQgYSB2aWFibGUgcGxhY2UgdG8gbWFwIHRoZSBzZWNvbmRhcnkgUENJIEJJT1MgaW1hZ2UgYW5kIG1hcCBpdAotICAgICAgICAgICAgcHJpbnRrKCJEZXZpY2UgJWQgbm90IGVuYWJsZWQsIHNvIGF0dGVtcHRpbmcgd2FybSBib290IGl0XG4iLCBkZXZpY2UpOworCS8qIENoZWNrIGlmIHRoZSBjb250cm9sbGVyIGhhcyBhbHJlYWR5IGJlZW4gUE9TVCdlZCAqLworCWlmIChWR0FfTk9UX0FDVElWRSgpKSB7CisJICAgIC8qIEZpbmQgYSB2aWFibGUgcGxhY2UgdG8gbWFwIHRoZSBzZWNvbmRhcnkgUENJIEJJT1MgaW1hZ2UgYW5kIG1hcCBpdCAqLworCSAgICBwcmludGsoIkRldmljZSAlZCBub3QgZW5hYmxlZCwgc28gYXR0ZW1wdGluZyB3YXJtIGJvb3QgaXRcbiIsIGRldmljZSk7CiAKLSAgICAgICAgICAgIC8vIEZvciBBR1AgZGV2aWNlcyAoYW5kIFBDSSBkZXZpY2VzIHRoYXQgZG8gaGF2ZSB0aGUgUk9NIGJhc2UKLSAgICAgICAgICAgIC8vIGFkZHJlc3MgemVybydlZCBvdXQpIHdlIGhhdmUgdG8gbWFwIHRoZSBCSU9TIHRvIGEgbG9jYXRpb24KLSAgICAgICAgICAgIC8vIHRoYXQgaXMgcGFzc2VkIGJ5IHRoZSBBR1AgYnJpZGdlIHRvIHRoZSBidXMuIFNvbWUgQUdQIGRldmljZXMKLSAgICAgICAgICAgIC8vIGhhdmUgdGhlIFJPTSBiYXNlIGFkZHJlc3MgYWxyZWFkeSBzZXQgdXAgZm9yIHVzLCBhbmQgc29tZQotICAgICAgICAgICAgLy8gZG8gbm90ICh3ZSBtYXAgdG8gb25lIG9mIHRoZSBleGlzdGluZyBCQVIgbG9jYXRpb25zIGluCi0gICAgICAgICAgICAvLyB0aGlzIGNhc2UpLgotICAgICAgICAgICAgbWFwcGVkQklPUyA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAoUENJW0RldmljZUluZGV4W2RldmljZV1dLlJPTUJhc2VBZGRyZXNzICE9IDApCi0gICAgICAgICAgICAgICAgbWFwcGVkQklPU1BoeXMgPSBQQ0lbRGV2aWNlSW5kZXhbZGV2aWNlXV0uUk9NQmFzZUFkZHJlc3MgJiB+MHhGOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1hcHBlZEJJT1NQaHlzID0gUENJX2ZpbmRCSU9TQWRkcihkZXZpY2UpOwotICAgICAgICAgICAgcHJpbnRrKCJNYXBwaW5nIEJJT1MgaW1hZ2UgdG8gMHglMDhYXG4iLCBtYXBwZWRCSU9TUGh5cyk7Ci0gICAgICAgICAgICBtYXBwZWRCSU9TID0gUE1fbWFwUGh5c2ljYWxBZGRyKG1hcHBlZEJJT1NQaHlzLE1BWF9CSU9TTEVOLTEsZmFsc2UpOwotICAgICAgICAgICAgUENJX3dyaXRlUENJUmVnTCgweDMwLG1hcHBlZEJJT1NQaHlzIHwgMHgxLGRldmljZSk7Ci0gICAgICAgICAgICBCSU9TSW1hZ2VMZW4gPSBtYXBwZWRCSU9TWzJdICogNTEyOwotICAgICAgICAgICAgaWYgKChjb3B5T2ZCSU9TID0gbWFsbG9jKEJJT1NJbWFnZUxlbikpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbWVtY3B5KGNvcHlPZkJJT1MsbWFwcGVkQklPUyxCSU9TSW1hZ2VMZW4pOwotICAgICAgICAgICAgUE1fZnJlZVBoeXNpY2FsQWRkcihtYXBwZWRCSU9TLE1BWF9CSU9TTEVOLTEpOworCSAgICAvKiBGb3IgQUdQIGRldmljZXMgKGFuZCBQQ0kgZGV2aWNlcyB0aGF0IGRvIGhhdmUgdGhlIFJPTSBiYXNlICovCisJICAgIC8qIGFkZHJlc3MgemVybydlZCBvdXQpIHdlIGhhdmUgdG8gbWFwIHRoZSBCSU9TIHRvIGEgbG9jYXRpb24gKi8KKwkgICAgLyogdGhhdCBpcyBwYXNzZWQgYnkgdGhlIEFHUCBicmlkZ2UgdG8gdGhlIGJ1cy4gU29tZSBBR1AgZGV2aWNlcyAqLworCSAgICAvKiBoYXZlIHRoZSBST00gYmFzZSBhZGRyZXNzIGFscmVhZHkgc2V0IHVwIGZvciB1cywgYW5kIHNvbWUgKi8KKwkgICAgLyogZG8gbm90ICh3ZSBtYXAgdG8gb25lIG9mIHRoZSBleGlzdGluZyBCQVIgbG9jYXRpb25zIGluICovCisJICAgIC8qIHRoaXMgY2FzZSkuICovCisJICAgIG1hcHBlZEJJT1MgPSBOVUxMOworCSAgICBpZiAoUENJW0RldmljZUluZGV4W2RldmljZV1dLlJPTUJhc2VBZGRyZXNzICE9IDApCisJCW1hcHBlZEJJT1NQaHlzID0gUENJW0RldmljZUluZGV4W2RldmljZV1dLlJPTUJhc2VBZGRyZXNzICYgfjB4RjsKKwkgICAgZWxzZQorCQltYXBwZWRCSU9TUGh5cyA9IFBDSV9maW5kQklPU0FkZHIoZGV2aWNlKTsKKwkgICAgcHJpbnRrKCJNYXBwaW5nIEJJT1MgaW1hZ2UgdG8gMHglMDhYXG4iLCBtYXBwZWRCSU9TUGh5cyk7CisJICAgIG1hcHBlZEJJT1MgPSBQTV9tYXBQaHlzaWNhbEFkZHIobWFwcGVkQklPU1BoeXMsTUFYX0JJT1NMRU4tMSxmYWxzZSk7CisJICAgIFBDSV93cml0ZVBDSVJlZ0woMHgzMCxtYXBwZWRCSU9TUGh5cyB8IDB4MSxkZXZpY2UpOworCSAgICBCSU9TSW1hZ2VMZW4gPSBtYXBwZWRCSU9TWzJdICogNTEyOworCSAgICBpZiAoKGNvcHlPZkJJT1MgPSBtYWxsb2MoQklPU0ltYWdlTGVuKSkgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCSAgICBtZW1jcHkoY29weU9mQklPUyxtYXBwZWRCSU9TLEJJT1NJbWFnZUxlbik7CisJICAgIFBNX2ZyZWVQaHlzaWNhbEFkZHIobWFwcGVkQklPUyxNQVhfQklPU0xFTi0xKTsKIAotICAgICAgICAgICAgLy8gQWxsb2NhdGUgbWVtb3J5IHRvIHN0b3JlIGNvcHkgb2YgQklPUyBmcm9tIHNlY29uZGFyeSBjb250cm9sbGVycwotICAgICAgICAgICAgVkdBSW5mb1tkZXZpY2VdLnBjaUluZm8gPSAmUENJW0RldmljZUluZGV4W2RldmljZV1dOwotICAgICAgICAgICAgVkdBSW5mb1tkZXZpY2VdLkJJT1NJbWFnZSA9IGNvcHlPZkJJT1M7Ci0gICAgICAgICAgICBWR0FJbmZvW2RldmljZV0uQklPU0ltYWdlTGVuID0gQklPU0ltYWdlTGVuOworCSAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgdG8gc3RvcmUgY29weSBvZiBCSU9TIGZyb20gc2Vjb25kYXJ5IGNvbnRyb2xsZXJzICovCisJICAgIFZHQUluZm9bZGV2aWNlXS5wY2lJbmZvID0gJlBDSVtEZXZpY2VJbmRleFtkZXZpY2VdXTsKKwkgICAgVkdBSW5mb1tkZXZpY2VdLkJJT1NJbWFnZSA9IGNvcHlPZkJJT1M7CisJICAgIFZHQUluZm9bZGV2aWNlXS5CSU9TSW1hZ2VMZW4gPSBCSU9TSW1hZ2VMZW47CiAKLSAgICAgICAgICAgIC8vIFJlc3RvcmUgZGV2aWNlIG1hcHBpbmdzCi0gICAgICAgICAgICBQQ0lfd3JpdGVQQ0lSZWdMKDB4MzAsUENJW0RldmljZUluZGV4W2RldmljZV1dLlJPTUJhc2VBZGRyZXNzLGRldmljZSk7Ci0gICAgICAgICAgICBQQ0lfd3JpdGVQQ0lSZWdMKDB4MTAsUENJW0RldmljZUluZGV4W2RldmljZV1dLkJhc2VBZGRyZXNzMTAsZGV2aWNlKTsKLSAgICAgICAgICAgIFBDSV93cml0ZVBDSVJlZ0woMHgxNCxQQ0lbRGV2aWNlSW5kZXhbZGV2aWNlXV0uQmFzZUFkZHJlc3MxNCxkZXZpY2UpOworCSAgICAvKiBSZXN0b3JlIGRldmljZSBtYXBwaW5ncyAqLworCSAgICBQQ0lfd3JpdGVQQ0lSZWdMKDB4MzAsUENJW0RldmljZUluZGV4W2RldmljZV1dLlJPTUJhc2VBZGRyZXNzLGRldmljZSk7CisJICAgIFBDSV93cml0ZVBDSVJlZ0woMHgxMCxQQ0lbRGV2aWNlSW5kZXhbZGV2aWNlXV0uQmFzZUFkZHJlc3MxMCxkZXZpY2UpOworCSAgICBQQ0lfd3JpdGVQQ0lSZWdMKDB4MTQsUENJW0RldmljZUluZGV4W2RldmljZV1dLkJhc2VBZGRyZXNzMTQsZGV2aWNlKTsKIAotICAgICAgICAgICAgLy8gTm93IGV4ZWN1dGUgdGhlIEJJT1MgUE9TVCBmb3IgdGhlIGRldmljZQotICAgICAgICAgICAgaWYgKGNvcHlPZkJJT1NbMF0gPT0gMHg1NSAmJiBjb3B5T2ZCSU9TWzFdID09IDB4QUEpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoIkV4ZWN1dGluZyBCSU9TIFBPU1QgZm9yIGNvbnRyb2xsZXIuXG4iKTsKLSAgICAgICAgICAgICAgICBQQ0lfZG9CSU9TUE9TVChkZXZpY2UsbWFwcGVkQklPU1BoeXMsY29weU9mQklPUyxCSU9TSW1hZ2VMZW4pOwotICAgICAgICAgICAgICAgIH0KKwkgICAgLyogTm93IGV4ZWN1dGUgdGhlIEJJT1MgUE9TVCBmb3IgdGhlIGRldmljZSAqLworCSAgICBpZiAoY29weU9mQklPU1swXSA9PSAweDU1ICYmIGNvcHlPZkJJT1NbMV0gPT0gMHhBQSkgeworCQlwcmludGsoIkV4ZWN1dGluZyBCSU9TIFBPU1QgZm9yIGNvbnRyb2xsZXIuXG4iKTsKKwkJUENJX2RvQklPU1BPU1QoZGV2aWNlLG1hcHBlZEJJT1NQaHlzLGNvcHlPZkJJT1MsQklPU0ltYWdlTGVuKTsKKwkJfQogCi0gICAgICAgICAgICAvLyBSZXNldCB0aGUgc2l6ZSBvZiB0aGUgQklPUyBpbWFnZSB0byB0aGUgZmluYWwgc2l6ZQotICAgICAgICAgICAgVkdBSW5mb1tkZXZpY2VdLkJJT1NJbWFnZUxlbiA9IEZJTkFMX0JJT1NMRU47CisJICAgIC8qIFJlc2V0IHRoZSBzaXplIG9mIHRoZSBCSU9TIGltYWdlIHRvIHRoZSBmaW5hbCBzaXplICovCisJICAgIFZHQUluZm9bZGV2aWNlXS5CSU9TSW1hZ2VMZW4gPSBGSU5BTF9CSU9TTEVOOwogCi0gICAgICAgICAgICAvLyBTYXZlIHRoZSBCSU9TIGFuZCBpbnRlcnJ1cHQgdmVjdG9yIGluZm9ybWF0aW9uIHRvIGRpc2sKLSAgICAgICAgICAgIHNwcmludGYoZmlsZW5hbWUsIiVzL2Jpb3MuJTAyZCIsUE1fZ2V0TnVjbGV1c0NvbmZpZ1BhdGgoKSxkZXZpY2UpOwotICAgICAgICAgICAgaWYgKChmID0gZm9wZW4oZmlsZW5hbWUsIndiIikpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmd3JpdGUoY29weU9mQklPUywxLEZJTkFMX0JJT1NMRU4sZik7Ci0gICAgICAgICAgICAgICAgZndyaXRlKFZHQUluZm9bZGV2aWNlXS5Mb3dNZW0sMSxzaXplb2YoVkdBSW5mb1tkZXZpY2VdLkxvd01lbSksZik7Ci0gICAgICAgICAgICAgICAgZmNsb3NlKGYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgdG8gc3RvcmUgY29weSBvZiBCSU9TIGZyb20gc2Vjb25kYXJ5IGNvbnRyb2xsZXJzCi0gICAgICAgICAgICBpZiAoKGNvcHlPZkJJT1MgPSBtYWxsb2MoRklOQUxfQklPU0xFTikpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgVkdBSW5mb1tkZXZpY2VdLnBjaUluZm8gPSAmUENJW0RldmljZUluZGV4W2RldmljZV1dOwotICAgICAgICAgICAgVkdBSW5mb1tkZXZpY2VdLkJJT1NJbWFnZSA9IGNvcHlPZkJJT1M7Ci0gICAgICAgICAgICBWR0FJbmZvW2RldmljZV0uQklPU0ltYWdlTGVuID0gRklOQUxfQklPU0xFTjsKKwkgICAgLyogU2F2ZSB0aGUgQklPUyBhbmQgaW50ZXJydXB0IHZlY3RvciBpbmZvcm1hdGlvbiB0byBkaXNrICovCisJICAgIHNwcmludGYoZmlsZW5hbWUsIiVzL2Jpb3MuJTAyZCIsUE1fZ2V0TnVjbGV1c0NvbmZpZ1BhdGgoKSxkZXZpY2UpOworCSAgICBpZiAoKGYgPSBmb3BlbihmaWxlbmFtZSwid2IiKSkgIT0gTlVMTCkgeworCQlmd3JpdGUoY29weU9mQklPUywxLEZJTkFMX0JJT1NMRU4sZik7CisJCWZ3cml0ZShWR0FJbmZvW2RldmljZV0uTG93TWVtLDEsc2l6ZW9mKFZHQUluZm9bZGV2aWNlXS5Mb3dNZW0pLGYpOworCQlmY2xvc2UoZik7CisJCX0KKwkgICAgfQorCWVsc2UgeworCSAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgdG8gc3RvcmUgY29weSBvZiBCSU9TIGZyb20gc2Vjb25kYXJ5IGNvbnRyb2xsZXJzICovCisJICAgIGlmICgoY29weU9mQklPUyA9IG1hbGxvYyhGSU5BTF9CSU9TTEVOKSkgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCSAgICBWR0FJbmZvW2RldmljZV0ucGNpSW5mbyA9ICZQQ0lbRGV2aWNlSW5kZXhbZGV2aWNlXV07CisJICAgIFZHQUluZm9bZGV2aWNlXS5CSU9TSW1hZ2UgPSBjb3B5T2ZCSU9TOworCSAgICBWR0FJbmZvW2RldmljZV0uQklPU0ltYWdlTGVuID0gRklOQUxfQklPU0xFTjsKIAotICAgICAgICAgICAgLy8gTG9hZCB0aGUgQklPUyBhbmQgaW50ZXJydXB0IHZlY3RvciBpbmZvcm1hdGlvbiBmcm9tIGRpc2sKLSAgICAgICAgICAgIHNwcmludGYoZmlsZW5hbWUsIiVzL2Jpb3MuJTAyZCIsUE1fZ2V0TnVjbGV1c0NvbmZpZ1BhdGgoKSxkZXZpY2UpOwotICAgICAgICAgICAgaWYgKChmID0gZm9wZW4oZmlsZW5hbWUsInJiIikpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcmVhZChjb3B5T2ZCSU9TLDEsRklOQUxfQklPU0xFTixmKTsKLSAgICAgICAgICAgICAgICBmcmVhZChWR0FJbmZvW2RldmljZV0uTG93TWVtLDEsc2l6ZW9mKFZHQUluZm9bZGV2aWNlXS5Mb3dNZW0pLGYpOwotICAgICAgICAgICAgICAgIGZjbG9zZShmKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJICAgIC8qIExvYWQgdGhlIEJJT1MgYW5kIGludGVycnVwdCB2ZWN0b3IgaW5mb3JtYXRpb24gZnJvbSBkaXNrICovCisJICAgIHNwcmludGYoZmlsZW5hbWUsIiVzL2Jpb3MuJTAyZCIsUE1fZ2V0TnVjbGV1c0NvbmZpZ1BhdGgoKSxkZXZpY2UpOworCSAgICBpZiAoKGYgPSBmb3BlbihmaWxlbmFtZSwicmIiKSkgIT0gTlVMTCkgeworCQlmcmVhZChjb3B5T2ZCSU9TLDEsRklOQUxfQklPU0xFTixmKTsKKwkJZnJlYWQoVkdBSW5mb1tkZXZpY2VdLkxvd01lbSwxLHNpemVvZihWR0FJbmZvW2RldmljZV0uTG93TWVtKSxmKTsKKwkJZmNsb3NlKGYpOworCQl9CisJICAgIH0KIAotICAgICAgICAvLyBGaXggdXAgYWxsIHRoZSBzZWNvbmRhcnkgUENJIGJhc2UgYWRkcmVzcyByZWdpc3RlcnMKLSAgICAgICAgLy8gKHJlc3RvcmVzIHRoZW0gYWxsIGZyb20gdGhlIHZhbHVlcyB3ZSByZWFkIHByZXZpb3VzbHkpCi0gICAgICAgIF9QQ0lfZml4dXBTZWNvbmRhcnlCQVJzKCk7CisJLyogRml4IHVwIGFsbCB0aGUgc2Vjb25kYXJ5IFBDSSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXJzICovCisJLyogKHJlc3RvcmVzIHRoZW0gYWxsIGZyb20gdGhlIHZhbHVlcyB3ZSByZWFkIHByZXZpb3VzbHkpICovCisJX1BDSV9maXh1cFNlY29uZGFyeUJBUnMoKTsKIAotICAgICAgICAvLyBEaXNhYmxlIHRoZSBzZWNvbmRhcnkgY29udHJvbGxlciBhbmQgQUdQIFZHQSBwYXNzLXRocm91Z2gKLSAgICAgICAgRElTQUJMRV9ERVZJQ0UoZGV2aWNlKTsKLSAgICAgICAgaWYgKEFHUEJyaWRnZSkKLSAgICAgICAgICAgIERJU0FCTEVfQUdQX1ZHQSgpOwotICAgICAgICB9CisJLyogRGlzYWJsZSB0aGUgc2Vjb25kYXJ5IGNvbnRyb2xsZXIgYW5kIEFHUCBWR0EgcGFzcy10aHJvdWdoICovCisJRElTQUJMRV9ERVZJQ0UoZGV2aWNlKTsKKwlpZiAoQUdQQnJpZGdlKQorCSAgICBESVNBQkxFX0FHUF9WR0EoKTsKKwl9CiAKLSAgICAvLyBSZWVuYWJsZSBwcmltYXJ5IGRpc3BsYXkgY29udHJvbGxlciBhbmQgcmVzZXQgQUdQIGJyaWRnZSBjb250cm9sCisgICAgLyogUmVlbmFibGUgcHJpbWFyeSBkaXNwbGF5IGNvbnRyb2xsZXIgYW5kIHJlc2V0IEFHUCBicmlkZ2UgY29udHJvbCAqLwogICAgIGlmIChBR1BCcmlkZ2UpCi0gICAgICAgIFJFU1RPUkVfQUdQX1ZHQSgpOworCVJFU1RPUkVfQUdQX1ZHQSgpOwogICAgIEVOQUJMRV9ERVZJQ0UoMCk7CiAKLSAgICAvLyBGcmVlIHBoeXNpY2FsIEJJT1MgaW1hZ2UgbWFwcGluZworICAgIC8qIEZyZWUgcGh5c2ljYWwgQklPUyBpbWFnZSBtYXBwaW5nICovCiAgICAgUE1fZnJlZVBoeXNpY2FsQWRkcihtYXBwZWRCSU9TLE1BWF9CSU9TTEVOLTEpOwogCi0gICAgLy8gUmVzdG9yZSB0aGUgWDg2IGVtdWxhdG9yIEJJT1MgaW5mbyB0byBwcmltYXJ5IGNvbnRyb2xsZXIKKyAgICAvKiBSZXN0b3JlIHRoZSBYODYgZW11bGF0b3IgQklPUyBpbmZvIHRvIHByaW1hcnkgY29udHJvbGxlciAqLwogICAgIGlmICghdXNlVjg2KQotICAgICAgICBCRV9zZXRWR0EoJlZHQUluZm9bMF0pOworCUJFX3NldFZHQSgmVkdBSW5mb1swXSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMyNywxMjMgKzMyNywxMjMgQEAKICAgICBQQ0lCcmlkZ2VJbmZvICAgKmluZm87CiAKICAgICBwcmludGsoIkRpc3BsYXlpbmcgZW51bWVyYXRpb24gb2YgUENJIGJ1cyAoJWQgZGV2aWNlcywgJWQgZGlzcGxheSBkZXZpY2VzKVxuIiwKLSAgICAgICAgTnVtUENJLCBOdW1EZXZpY2VzKTsKKwlOdW1QQ0ksIE51bURldmljZXMpOwogICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspCi0gICAgICAgIHByaW50aygiICBEaXNwbGF5IGRldmljZSAlZCBpcyBQQ0kgZGV2aWNlICVkXG4iLGluZGV4LERldmljZUluZGV4W2luZGV4XSk7CisJcHJpbnRrKCIgIERpc3BsYXkgZGV2aWNlICVkIGlzIFBDSSBkZXZpY2UgJWRcbiIsaW5kZXgsRGV2aWNlSW5kZXhbaW5kZXhdKTsKICAgICBwcmludGsoIlxuIik7CiAgICAgcHJpbnRrKCJCdXMgU2xvdCBGbmMgRGV2aWNlSUQgIFN1YlN5c3RlbSBSZXYgQ2xhc3MgSVJRIEludCBDbWRcbiIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBOdW1QQ0k7IGkrKykgewotICAgICAgICBwcmludGsoIiUyZCAgICUyZCAgJTJkICAlMDRYOiUwNFggJTA0WDolMDRYICUwMlggICUwMlg6JTAyWCAlMDJYICAlMDJYICAlMDRYICAgIiwKLSAgICAgICAgICAgIFBDSVtpXS5zbG90LnAuQnVzLAotICAgICAgICAgICAgUENJW2ldLnNsb3QucC5EZXZpY2UsCi0gICAgICAgICAgICBQQ0lbaV0uc2xvdC5wLkZ1bmN0aW9uLAotICAgICAgICAgICAgUENJW2ldLlZlbmRvcklELAotICAgICAgICAgICAgUENJW2ldLkRldmljZUlELAotICAgICAgICAgICAgUENJW2ldLlN1YlN5c3RlbVZlbmRvcklELAotICAgICAgICAgICAgUENJW2ldLlN1YlN5c3RlbUlELAotICAgICAgICAgICAgUENJW2ldLlJldklELAotICAgICAgICAgICAgUENJW2ldLkJhc2VDbGFzcywKLSAgICAgICAgICAgIFBDSVtpXS5TdWJDbGFzcywKLSAgICAgICAgICAgIFBDSVtpXS5JbnRlcnJ1cHRMaW5lLAotICAgICAgICAgICAgUENJW2ldLkludGVycnVwdFBpbiwKLSAgICAgICAgICAgIFBDSVtpXS5Db21tYW5kKTsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTnVtRGV2aWNlczsgaW5kZXgrKykgewotICAgICAgICAgICAgaWYgKERldmljZUluZGV4W2luZGV4XSA9PSBpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAoaW5kZXggPCBOdW1EZXZpY2VzKQotICAgICAgICAgICAgcHJpbnRrKCI8LSAlZFxuIiwgaW5kZXgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGsoIlxuIik7Ci0gICAgICAgIH0KKwlwcmludGsoIiUyZCAgICUyZCAgJTJkICAlMDRYOiUwNFggJTA0WDolMDRYICUwMlggICUwMlg6JTAyWCAlMDJYICAlMDJYICAlMDRYICAgIiwKKwkgICAgUENJW2ldLnNsb3QucC5CdXMsCisJICAgIFBDSVtpXS5zbG90LnAuRGV2aWNlLAorCSAgICBQQ0lbaV0uc2xvdC5wLkZ1bmN0aW9uLAorCSAgICBQQ0lbaV0uVmVuZG9ySUQsCisJICAgIFBDSVtpXS5EZXZpY2VJRCwKKwkgICAgUENJW2ldLlN1YlN5c3RlbVZlbmRvcklELAorCSAgICBQQ0lbaV0uU3ViU3lzdGVtSUQsCisJICAgIFBDSVtpXS5SZXZJRCwKKwkgICAgUENJW2ldLkJhc2VDbGFzcywKKwkgICAgUENJW2ldLlN1YkNsYXNzLAorCSAgICBQQ0lbaV0uSW50ZXJydXB0TGluZSwKKwkgICAgUENJW2ldLkludGVycnVwdFBpbiwKKwkgICAgUENJW2ldLkNvbW1hbmQpOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspIHsKKwkgICAgaWYgKERldmljZUluZGV4W2luZGV4XSA9PSBpKQorCQlicmVhazsKKwkgICAgfQorCWlmIChpbmRleCA8IE51bURldmljZXMpCisJICAgIHByaW50aygiPC0gJWRcbiIsIGluZGV4KTsKKwllbHNlCisJICAgIHByaW50aygiXG4iKTsKKwl9CiAgICAgcHJpbnRrKCJcbiIpOwogICAgIHByaW50aygiRGV2aWNlSUQgIFN0YXQgSWZjIENjaCBMYXQgSGRyIEJJU1RcbiIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBOdW1QQ0k7IGkrKykgewotICAgICAgICBwcmludGsoIiUwNFg6JTA0WCAlMDRYICAlMDJYICAlMDJYICAlMDJYICAlMDJYICAlMDJYICAgIiwKLSAgICAgICAgICAgIFBDSVtpXS5WZW5kb3JJRCwKLSAgICAgICAgICAgIFBDSVtpXS5EZXZpY2VJRCwKLSAgICAgICAgICAgIFBDSVtpXS5TdGF0dXMsCi0gICAgICAgICAgICBQQ0lbaV0uSW50ZXJmYWNlLAotICAgICAgICAgICAgUENJW2ldLkNhY2hlTGluZVNpemUsCi0gICAgICAgICAgICBQQ0lbaV0uTGF0ZW5jeVRpbWVyLAotICAgICAgICAgICAgUENJW2ldLkhlYWRlclR5cGUsCi0gICAgICAgICAgICBQQ0lbaV0uQklTVCk7Ci0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspIHsKLSAgICAgICAgICAgIGlmIChEZXZpY2VJbmRleFtpbmRleF0gPT0gaSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4IDwgTnVtRGV2aWNlcykKLSAgICAgICAgICAgIHByaW50aygiPC0gJWRcbiIsIGluZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICB9CisJcHJpbnRrKCIlMDRYOiUwNFggJTA0WCAgJTAyWCAgJTAyWCAgJTAyWCAgJTAyWCAgJTAyWCAgICIsCisJICAgIFBDSVtpXS5WZW5kb3JJRCwKKwkgICAgUENJW2ldLkRldmljZUlELAorCSAgICBQQ0lbaV0uU3RhdHVzLAorCSAgICBQQ0lbaV0uSW50ZXJmYWNlLAorCSAgICBQQ0lbaV0uQ2FjaGVMaW5lU2l6ZSwKKwkgICAgUENJW2ldLkxhdGVuY3lUaW1lciwKKwkgICAgUENJW2ldLkhlYWRlclR5cGUsCisJICAgIFBDSVtpXS5CSVNUKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOdW1EZXZpY2VzOyBpbmRleCsrKSB7CisJICAgIGlmIChEZXZpY2VJbmRleFtpbmRleF0gPT0gaSkKKwkJYnJlYWs7CisJICAgIH0KKwlpZiAoaW5kZXggPCBOdW1EZXZpY2VzKQorCSAgICBwcmludGsoIjwtICVkXG4iLCBpbmRleCk7CisJZWxzZQorCSAgICBwcmludGsoIlxuIik7CisJfQogICAgIHByaW50aygiXG4iKTsKICAgICBwcmludGsoIkRldmljZUlEICBCYXNlMTBoICBCYXNlMTRoICBCYXNlMThoICBCYXNlMUNoICBCYXNlMjBoICBCYXNlMjRoICBST01CYXNlXG4iKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgTnVtUENJOyBpKyspIHsKLSAgICAgICAgcHJpbnRrKCIlMDRYOiUwNFggJTA4WCAlMDhYICUwOFggJTA4WCAlMDhYICUwOFggJTA4WCAiLAotICAgICAgICAgICAgUENJW2ldLlZlbmRvcklELAotICAgICAgICAgICAgUENJW2ldLkRldmljZUlELAotICAgICAgICAgICAgUENJW2ldLkJhc2VBZGRyZXNzMTAsCi0gICAgICAgICAgICBQQ0lbaV0uQmFzZUFkZHJlc3MxNCwKLSAgICAgICAgICAgIFBDSVtpXS5CYXNlQWRkcmVzczE4LAotICAgICAgICAgICAgUENJW2ldLkJhc2VBZGRyZXNzMUMsCi0gICAgICAgICAgICBQQ0lbaV0uQmFzZUFkZHJlc3MyMCwKLSAgICAgICAgICAgIFBDSVtpXS5CYXNlQWRkcmVzczI0LAotICAgICAgICAgICAgUENJW2ldLlJPTUJhc2VBZGRyZXNzKTsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTnVtRGV2aWNlczsgaW5kZXgrKykgewotICAgICAgICAgICAgaWYgKERldmljZUluZGV4W2luZGV4XSA9PSBpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAoaW5kZXggPCBOdW1EZXZpY2VzKQotICAgICAgICAgICAgcHJpbnRrKCI8LSAlZFxuIiwgaW5kZXgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGsoIlxuIik7Ci0gICAgICAgIH0KKwlwcmludGsoIiUwNFg6JTA0WCAlMDhYICUwOFggJTA4WCAlMDhYICUwOFggJTA4WCAlMDhYICIsCisJICAgIFBDSVtpXS5WZW5kb3JJRCwKKwkgICAgUENJW2ldLkRldmljZUlELAorCSAgICBQQ0lbaV0uQmFzZUFkZHJlc3MxMCwKKwkgICAgUENJW2ldLkJhc2VBZGRyZXNzMTQsCisJICAgIFBDSVtpXS5CYXNlQWRkcmVzczE4LAorCSAgICBQQ0lbaV0uQmFzZUFkZHJlc3MxQywKKwkgICAgUENJW2ldLkJhc2VBZGRyZXNzMjAsCisJICAgIFBDSVtpXS5CYXNlQWRkcmVzczI0LAorCSAgICBQQ0lbaV0uUk9NQmFzZUFkZHJlc3MpOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspIHsKKwkgICAgaWYgKERldmljZUluZGV4W2luZGV4XSA9PSBpKQorCQlicmVhazsKKwkgICAgfQorCWlmIChpbmRleCA8IE51bURldmljZXMpCisJICAgIHByaW50aygiPC0gJWRcbiIsIGluZGV4KTsKKwllbHNlCisJICAgIHByaW50aygiXG4iKTsKKwl9CiAgICAgcHJpbnRrKCJcbiIpOwogICAgIHByaW50aygiRGV2aWNlSUQgIEJBUjEwTGVuIEJBUjE0TGVuIEJBUjE4TGVuIEJBUjFDTGVuIEJBUjIwTGVuIEJBUjI0TGVuIFJPTUxlblxuIik7CiAgICAgZm9yIChpID0gMDsgaSA8IE51bVBDSTsgaSsrKSB7Ci0gICAgICAgIHByaW50aygiJTA0WDolMDRYICUwOFggJTA4WCAlMDhYICUwOFggJTA4WCAlMDhYICUwOFggIiwKLSAgICAgICAgICAgIFBDSVtpXS5WZW5kb3JJRCwKLSAgICAgICAgICAgIFBDSVtpXS5EZXZpY2VJRCwKLSAgICAgICAgICAgIFBDSVtpXS5CYXNlQWRkcmVzczEwTGVuLAotICAgICAgICAgICAgUENJW2ldLkJhc2VBZGRyZXNzMTRMZW4sCi0gICAgICAgICAgICBQQ0lbaV0uQmFzZUFkZHJlc3MxOExlbiwKLSAgICAgICAgICAgIFBDSVtpXS5CYXNlQWRkcmVzczFDTGVuLAotICAgICAgICAgICAgUENJW2ldLkJhc2VBZGRyZXNzMjBMZW4sCi0gICAgICAgICAgICBQQ0lbaV0uQmFzZUFkZHJlc3MyNExlbiwKLSAgICAgICAgICAgIFBDSVtpXS5ST01CYXNlQWRkcmVzc0xlbik7Ci0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspIHsKLSAgICAgICAgICAgIGlmIChEZXZpY2VJbmRleFtpbmRleF0gPT0gaSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4IDwgTnVtRGV2aWNlcykKLSAgICAgICAgICAgIHByaW50aygiPC0gJWRcbiIsIGluZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICB9CisJcHJpbnRrKCIlMDRYOiUwNFggJTA4WCAlMDhYICUwOFggJTA4WCAlMDhYICUwOFggJTA4WCAiLAorCSAgICBQQ0lbaV0uVmVuZG9ySUQsCisJICAgIFBDSVtpXS5EZXZpY2VJRCwKKwkgICAgUENJW2ldLkJhc2VBZGRyZXNzMTBMZW4sCisJICAgIFBDSVtpXS5CYXNlQWRkcmVzczE0TGVuLAorCSAgICBQQ0lbaV0uQmFzZUFkZHJlc3MxOExlbiwKKwkgICAgUENJW2ldLkJhc2VBZGRyZXNzMUNMZW4sCisJICAgIFBDSVtpXS5CYXNlQWRkcmVzczIwTGVuLAorCSAgICBQQ0lbaV0uQmFzZUFkZHJlc3MyNExlbiwKKwkgICAgUENJW2ldLlJPTUJhc2VBZGRyZXNzTGVuKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOdW1EZXZpY2VzOyBpbmRleCsrKSB7CisJICAgIGlmIChEZXZpY2VJbmRleFtpbmRleF0gPT0gaSkKKwkJYnJlYWs7CisJICAgIH0KKwlpZiAoaW5kZXggPCBOdW1EZXZpY2VzKQorCSAgICBwcmludGsoIjwtICVkXG4iLCBpbmRleCk7CisJZWxzZQorCSAgICBwcmludGsoIlxuIik7CisJfQogICAgIHByaW50aygiXG4iKTsKICAgICBwcmludGsoIkRpc3BsYXlpbmcgZW51bWVyYXRpb24gb2YgJWQgYnJpZGdlIGRldmljZXNcbiIsTnVtQnJpZGdlcyk7CiAgICAgcHJpbnRrKCJcbiIpOwogICAgIHByaW50aygiRGV2aWNlSUQgIFAjIFMjIEIjIElPQiAgSU9MICBNZW1CYXNlICBNZW1MaW1pdCBQcmVCYXNlICBQcmVMaW1pdCBDdHJsXG4iKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgTnVtQnJpZGdlczsgaSsrKSB7Ci0gICAgICAgIGluZm8gPSAoUENJQnJpZGdlSW5mbyopJlBDSVtCcmlkZ2VJbmRleFtpXV07Ci0gICAgICAgIHByaW50aygiJTA0WDolMDRYICUwMlggJTAyWCAlMDJYICUwNFggJTA0WCAlMDhYICUwOFggJTA4WCAlMDhYICUwNFhcbiIsCi0gICAgICAgICAgICBpbmZvLT5WZW5kb3JJRCwKLSAgICAgICAgICAgIGluZm8tPkRldmljZUlELAotICAgICAgICAgICAgaW5mby0+UHJpbWFyeUJ1c051bWJlciwKLSAgICAgICAgICAgIGluZm8tPlNlY29uZGF5QnVzTnVtYmVyLAotICAgICAgICAgICAgaW5mby0+U3Vib3JkaW5hdGVCdXNOdW1iZXIsCi0gICAgICAgICAgICAoKHUxNilpbmZvLT5JT0Jhc2UgPDwgOCkgJiAweEYwMDAsCi0gICAgICAgICAgICBpbmZvLT5JT0xpbWl0ID8KLSAgICAgICAgICAgICAgICAoKHUxNilpbmZvLT5JT0xpbWl0IDw8IDgpIHwgMHhGRkYgOiAwLAotICAgICAgICAgICAgKCh1MzIpaW5mby0+TWVtb3J5QmFzZSA8PCAxNikgJiAweEZGRjAwMDAwLAotICAgICAgICAgICAgaW5mby0+TWVtb3J5TGltaXQgPwotICAgICAgICAgICAgICAgICgodTMyKWluZm8tPk1lbW9yeUxpbWl0IDw8IDE2KSB8IDB4RkZGRkYgOiAwLAotICAgICAgICAgICAgKCh1MzIpaW5mby0+UHJlZmV0Y2hhYmxlTWVtb3J5QmFzZSA8PCAxNikgJiAweEZGRjAwMDAwLAotICAgICAgICAgICAgaW5mby0+UHJlZmV0Y2hhYmxlTWVtb3J5TGltaXQgPwotICAgICAgICAgICAgICAgICgodTMyKWluZm8tPlByZWZldGNoYWJsZU1lbW9yeUxpbWl0IDw8IDE2KSB8IDB4RkZGRkYgOiAwLAotICAgICAgICAgICAgaW5mby0+QnJpZGdlQ29udHJvbCk7Ci0gICAgICAgIH0KKwlpbmZvID0gKFBDSUJyaWRnZUluZm8qKSZQQ0lbQnJpZGdlSW5kZXhbaV1dOworCXByaW50aygiJTA0WDolMDRYICUwMlggJTAyWCAlMDJYICUwNFggJTA0WCAlMDhYICUwOFggJTA4WCAlMDhYICUwNFhcbiIsCisJICAgIGluZm8tPlZlbmRvcklELAorCSAgICBpbmZvLT5EZXZpY2VJRCwKKwkgICAgaW5mby0+UHJpbWFyeUJ1c051bWJlciwKKwkgICAgaW5mby0+U2Vjb25kYXlCdXNOdW1iZXIsCisJICAgIGluZm8tPlN1Ym9yZGluYXRlQnVzTnVtYmVyLAorCSAgICAoKHUxNilpbmZvLT5JT0Jhc2UgPDwgOCkgJiAweEYwMDAsCisJICAgIGluZm8tPklPTGltaXQgPworCQkoKHUxNilpbmZvLT5JT0xpbWl0IDw8IDgpIHwgMHhGRkYgOiAwLAorCSAgICAoKHUzMilpbmZvLT5NZW1vcnlCYXNlIDw8IDE2KSAmIDB4RkZGMDAwMDAsCisJICAgIGluZm8tPk1lbW9yeUxpbWl0ID8KKwkJKCh1MzIpaW5mby0+TWVtb3J5TGltaXQgPDwgMTYpIHwgMHhGRkZGRiA6IDAsCisJICAgICgodTMyKWluZm8tPlByZWZldGNoYWJsZU1lbW9yeUJhc2UgPDwgMTYpICYgMHhGRkYwMDAwMCwKKwkgICAgaW5mby0+UHJlZmV0Y2hhYmxlTWVtb3J5TGltaXQgPworCQkoKHUzMilpbmZvLT5QcmVmZXRjaGFibGVNZW1vcnlMaW1pdCA8PCAxNikgfCAweEZGRkZGIDogMCwKKwkgICAgaW5mby0+QnJpZGdlQ29udHJvbCk7CisJfQogICAgIHByaW50aygiXG4iKTsKIH0KIApAQCAtNDYwLDUxICs0NjAsNTEgQEAKICAgICBpbnQgICAgICAgICAgICAgaSxqOwogICAgIFBDSUJyaWRnZUluZm8gICAqaW5mbzsKIAotICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgaGF2ZSBiZWVuIGNhbGxlZCwgZW51bWVyYXRlIGFsbAotICAgIC8vIGRldmljZXMgb24gdGhlIFBDSSBidXMuCisgICAgLyogSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBoYXZlIGJlZW4gY2FsbGVkLCBlbnVtZXJhdGUgYWxsICovCisgICAgLyogZGV2aWNlcyBvbiB0aGUgUENJIGJ1cy4gKi8KICAgICBpZiAoTnVtUENJID09IC0xKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfUENJX0RFVklDRVM7IGkrKykKLSAgICAgICAgICAgIFBDSVtpXS5kd1NpemUgPSBzaXplb2YoUENJW2ldKTsKLSAgICAgICAgaWYgKChOdW1QQ0kgPSBQQ0lfZW51bWVyYXRlKFBDSSxNQVhfUENJX0RFVklDRVMpKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBNQVhfUENJX0RFVklDRVM7IGkrKykKKwkgICAgUENJW2ldLmR3U2l6ZSA9IHNpemVvZihQQ0lbaV0pOworCWlmICgoTnVtUENJID0gUENJX2VudW1lcmF0ZShQQ0ksTUFYX1BDSV9ERVZJQ0VTKSkgPT0gMCkKKwkgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIC8vIEJ1aWxkIGEgbGlzdCBvZiBhbGwgUENJIGJyaWRnZSBkZXZpY2VzCi0gICAgICAgIGZvciAoaSA9IDAsTnVtQnJpZGdlcyA9IDAsQnJpZGdlSW5kZXhbMF0gPSAtMTsgaSA8IE51bVBDSTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoUENJW2ldLkJhc2VDbGFzcyA9PSBQQ0lfQlJJREdFX0NMQVNTKSB7Ci0gICAgICAgICAgICAgICAgaWYgKE51bUJyaWRnZXMgPCBNQVhfUENJX0RFVklDRVMpCi0gICAgICAgICAgICAgICAgICAgIEJyaWRnZUluZGV4W051bUJyaWRnZXMrK10gPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkvKiBCdWlsZCBhIGxpc3Qgb2YgYWxsIFBDSSBicmlkZ2UgZGV2aWNlcyAqLworCWZvciAoaSA9IDAsTnVtQnJpZGdlcyA9IDAsQnJpZGdlSW5kZXhbMF0gPSAtMTsgaSA8IE51bVBDSTsgaSsrKSB7CisJICAgIGlmIChQQ0lbaV0uQmFzZUNsYXNzID09IFBDSV9CUklER0VfQ0xBU1MpIHsKKwkJaWYgKE51bUJyaWRnZXMgPCBNQVhfUENJX0RFVklDRVMpCisJCSAgICBCcmlkZ2VJbmRleFtOdW1CcmlkZ2VzKytdID0gaTsKKwkJfQorCSAgICB9CiAKLSAgICAgICAgLy8gTm93IGJ1aWxkIGEgbGlzdCBvZiBhbGwgZGlzcGxheSBjbGFzcyBkZXZpY2VzCi0gICAgICAgIGZvciAoaSA9IDAsTnVtRGV2aWNlcyA9IDEsRGV2aWNlSW5kZXhbMF0gPSAtMTsgaSA8IE51bVBDSTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoUENJX0lTX0RJU1BMQVlfQ0xBU1MoJlBDSVtpXSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoKFBDSVtpXS5Db21tYW5kICYgMHgzKSA9PSAweDMpIHsKLSAgICAgICAgICAgICAgICAgICAgRGV2aWNlSW5kZXhbMF0gPSBpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChOdW1EZXZpY2VzIDwgTUFYX1BDSV9ERVZJQ0VTKQotICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlSW5kZXhbTnVtRGV2aWNlcysrXSA9IGk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoUENJW2ldLnNsb3QucC5CdXMgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGRldmljZSBpcyBvbiBhIGRpZmZlcmVudCBidXMgdGhhbiB0aGUgcHJpbWFyeQotICAgICAgICAgICAgICAgICAgICAvLyBQQ0kgYnVzLCBzbyBpdCBpcyBwcm9iYWJseSBhbiBBR1AgZGV2aWNlLiBGaW5kIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBBR1AgYnVzIGRldmljZSB0aGF0IGNvbnRyb2xzIHRoYXQgYnVzIHNvIHdlIGNhbgotICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sIGl0LgotICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTnVtQnJpZGdlczsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gKFBDSUJyaWRnZUluZm8qKSZQQ0lbQnJpZGdlSW5kZXhbal1dOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8tPlNlY29uZGF5QnVzTnVtYmVyID09IFBDSVtpXS5zbG90LnAuQnVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQUdQQnJpZGdlID0gaW5mbzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJLyogTm93IGJ1aWxkIGEgbGlzdCBvZiBhbGwgZGlzcGxheSBjbGFzcyBkZXZpY2VzICovCisJZm9yIChpID0gMCxOdW1EZXZpY2VzID0gMSxEZXZpY2VJbmRleFswXSA9IC0xOyBpIDwgTnVtUENJOyBpKyspIHsKKwkgICAgaWYgKFBDSV9JU19ESVNQTEFZX0NMQVNTKCZQQ0lbaV0pKSB7CisJCWlmICgoUENJW2ldLkNvbW1hbmQgJiAweDMpID09IDB4MykgeworCQkgICAgRGV2aWNlSW5kZXhbMF0gPSBpOworCQkgICAgfQorCQllbHNlIHsKKwkJICAgIGlmIChOdW1EZXZpY2VzIDwgTUFYX1BDSV9ERVZJQ0VTKQorCQkJRGV2aWNlSW5kZXhbTnVtRGV2aWNlcysrXSA9IGk7CisJCSAgICB9CisJCWlmIChQQ0lbaV0uc2xvdC5wLkJ1cyAhPSAwKSB7CisJCSAgICAvKiBUaGlzIGRldmljZSBpcyBvbiBhIGRpZmZlcmVudCBidXMgdGhhbiB0aGUgcHJpbWFyeSAqLworCQkgICAgLyogUENJIGJ1cywgc28gaXQgaXMgcHJvYmFibHkgYW4gQUdQIGRldmljZS4gRmluZCB0aGUgKi8KKwkJICAgIC8qIEFHUCBidXMgZGV2aWNlIHRoYXQgY29udHJvbHMgdGhhdCBidXMgc28gd2UgY2FuICovCisJCSAgICAvKiBjb250cm9sIGl0LiAqLworCQkgICAgZm9yIChqID0gMDsgaiA8IE51bUJyaWRnZXM7IGorKykgeworCQkJaW5mbyA9IChQQ0lCcmlkZ2VJbmZvKikmUENJW0JyaWRnZUluZGV4W2pdXTsKKwkJCWlmIChpbmZvLT5TZWNvbmRheUJ1c051bWJlciA9PSBQQ0lbaV0uc2xvdC5wLkJ1cykgeworCQkJICAgIEFHUEJyaWRnZSA9IGluZm87CisJCQkgICAgYnJlYWs7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KIAotICAgICAgICAvLyBFbnVtZXJhdGUgYWxsIFBDSSBhbmQgYnJpZGdlIGRldmljZXMgdG8gbG9nIGZpbGUKLSAgICAgICAgRW51bWVyYXRlUENJKCk7Ci0gICAgICAgIH0KKwkvKiBFbnVtZXJhdGUgYWxsIFBDSSBhbmQgYnJpZGdlIGRldmljZXMgdG8gbG9nIGZpbGUgKi8KKwlFbnVtZXJhdGVQQ0koKTsKKwl9CiAgICAgcmV0dXJuIE51bURldmljZXM7CiB9CiAKQEAgLTUyMiw0OCArNTIyLDQ4IEBACiBpbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCiB7CiAgICAgd2hpbGUgKGFyZ2MgPiAxKSB7Ci0gICAgICAgIGlmIChzdHJpY21wKGFyZ3ZbMV0sIi11c2V2ODYiKSA9PSAwKSB7Ci0gICAgICAgICAgICB1c2VWODYgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzdHJpY21wKGFyZ3ZbMV0sIi1mb3JjZSIpID09IDApIHsKLSAgICAgICAgICAgIGZvcmNlUG9zdCA9IHRydWU7Ci0gICAgICAgICAgICB9CisJaWYgKHN0cmljbXAoYXJndlsxXSwiLXVzZXY4NiIpID09IDApIHsKKwkgICAgdXNlVjg2ID0gdHJ1ZTsKKwkgICAgfQorCWVsc2UgaWYgKHN0cmljbXAoYXJndlsxXSwiLWZvcmNlIikgPT0gMCkgeworCSAgICBmb3JjZVBvc3QgPSB0cnVlOworCSAgICB9CiAjaWZkZWYgIERFQlVHCi0gICAgICAgIGVsc2UgaWYgKHN0cmljbXAoYXJndlsxXSwiLWRlY29kZSIpID09IDApIHsKLSAgICAgICAgICAgIGRlYnVnRmxhZ3MgfD0gREVCVUdfREVDT0RFX0Y7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0cmljbXAoYXJndlsxXSwiLWlvdHJhY2UiKSA9PSAwKSB7Ci0gICAgICAgICAgICBkZWJ1Z0ZsYWdzIHw9IERFQlVHX0lPX1RSQUNFX0Y7Ci0gICAgICAgICAgICB9CisJZWxzZSBpZiAoc3RyaWNtcChhcmd2WzFdLCItZGVjb2RlIikgPT0gMCkgeworCSAgICBkZWJ1Z0ZsYWdzIHw9IERFQlVHX0RFQ09ERV9GOworCSAgICB9CisJZWxzZSBpZiAoc3RyaWNtcChhcmd2WzFdLCItaW90cmFjZSIpID09IDApIHsKKwkgICAgZGVidWdGbGFncyB8PSBERUJVR19JT19UUkFDRV9GOworCSAgICB9CiAjZW5kaWYKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYoIlVzYWdlOiB3YXJtYm9vdCBbLXVzZXY4Nl0gWy1mb3JjZV0gWy1kZWNvZGVdIFstaW90cmFjZV1cbiIpOwotICAgICAgICAgICAgZXhpdCgtMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGFyZ2MtLTsKLSAgICAgICAgYXJndisrOwotICAgICAgICB9CisJZWxzZSB7CisJICAgIHByaW50ZigiVXNhZ2U6IHdhcm1ib290IFstdXNldjg2XSBbLWZvcmNlXSBbLWRlY29kZV0gWy1pb3RyYWNlXVxuIik7CisJICAgIGV4aXQoLTEpOworCSAgICB9CisJYXJnYy0tOworCWFyZ3YrKzsKKwl9CiAgICAgaWYgKChsb2dmaWxlID0gZm9wZW4oIndhcm1ib290LmxvZyIsInciKSkgPT0gTlVMTCkKLSAgICAgICAgZXhpdCgxKTsKKwlleGl0KDEpOwogCiAgICAgUE1faW5pdCgpOwogICAgIGlmICghdXNlVjg2KSB7Ci0gICAgICAgIC8vIEluaXRpYWxpc2UgdGhlIHg4NiBCSU9TIGVtdWxhdG9yCi0gICAgICAgIEJFX2luaXQoZmFsc2UsZGVidWdGbGFncyw2NTUzNiwmVkdBSW5mb1swXSk7Ci0gICAgICAgIH0KKwkvKiBJbml0aWFsaXNlIHRoZSB4ODYgQklPUyBlbXVsYXRvciAqLworCUJFX2luaXQoZmFsc2UsZGVidWdGbGFncyw2NTUzNiwmVkdBSW5mb1swXSk7CisJfQogCi0gICAgLy8gRW51bWVyYXRlIGFsbCBkZXZpY2VzICh3aGljaCBQT1NUJ3MgdGhlbSBhdCB0aGUgc2FtZSB0aW1lKQorICAgIC8qIEVudW1lcmF0ZSBhbGwgZGV2aWNlcyAod2hpY2ggUE9TVCdzIHRoZW0gYXQgdGhlIHNhbWUgdGltZSkgKi8KICAgICBpZiAoUENJX2VudW1lcmF0ZURldmljZXMoKSA8IDEpIHsKLSAgICAgICAgcHJpbnRrKCJObyBQQ0kgZGlzcGxheSBkZXZpY2VzIGZvdW5kIVxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorCXByaW50aygiTm8gUENJIGRpc3BsYXkgZGV2aWNlcyBmb3VuZCFcbiIpOworCXJldHVybiAtMTsKKwl9CiAKLSAgICAvLyBQb3N0IGFsbCB0aGUgZGlzcGxheSBjb250cm9sbGVyIEJJT1MnZXMKKyAgICAvKiBQb3N0IGFsbCB0aGUgZGlzcGxheSBjb250cm9sbGVyIEJJT1MnZXMgKi8KICAgICBQQ0lfcG9zdENvbnRyb2xsZXJzKCk7CiAKLSAgICAvLyBDbGVhbnVwIGFuZCBleGl0IHRoZSBlbXVsYXRvcgorICAgIC8qIENsZWFudXAgYW5kIGV4aXQgdGhlIGVtdWxhdG9yICovCiAgICAgaWYgKCF1c2VWODYpCi0gICAgICAgIEJFX2V4aXQoKTsKKwlCRV9leGl0KCk7CiAgICAgZmNsb3NlKGxvZ2ZpbGUpOwogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhYmVvcy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhYmVvcy5jCmluZGV4IGJhODY0NTkuLmFkNTY5OGEgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYWJlb3MuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vYWFiZW9zLmMKQEAgLTcwLDcgKzcwLDcgQEAKIGlib29sIE5BUEkgR0FfVGltZXJJbml0KHZvaWQpCiB7CiAgICAgaWYgKF9HQV9oYXZlQ1BVSUQoKSAmJiAoX0dBX2dldENQVUlERmVhdHVyZXMoKSAmIENQVV9IYXZlUkRUU0MpICE9IDApCi0gICAgICAgIGhhdmVSRFRTQyA9IHRydWU7CisJaGF2ZVJEVFNDID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODIsMTEgKzgyLDExIEBACiAgICAgR0FfbGFyZ2VJbnRlZ2VyICp2YWx1ZSkKIHsKICAgICBpZiAoaGF2ZVJEVFNDKQotICAgICAgICBfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CisJX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOwogICAgIGVsc2UgewotICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0OwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnQsIE5VTEwpOwotICAgICAgICB2YWx1ZS0+bG93ID0gdC50dl9zZWMqMTAwMDAwMCArIHQudHZfdXNlYzsKLSAgICAgICAgdmFsdWUtPmhpZ2ggPSAwOwotICAgICAgICB9CisJc3RydWN0IHRpbWV2YWwgdDsKKwlnZXR0aW1lb2ZkYXkoJnQsIE5VTEwpOworCXZhbHVlLT5sb3cgPSB0LnR2X3NlYyoxMDAwMDAwICsgdC50dl91c2VjOworCXZhbHVlLT5oaWdoID0gMDsKKwl9CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vYWFkb3MuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYWRvcy5jCmluZGV4IGU5OTRmOTMuLjM0MmQyZjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYWRvcy5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYWRvcy5jCkBAIC00OSw3ICs0OSw3IEBACiBpYm9vbCBOQVBJIEdBX1RpbWVySW5pdCh2b2lkKQogewogICAgIGlmIChfR0FfaGF2ZUNQVUlEKCkgJiYgKF9HQV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVJEVFNDKSAhPSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYWxpYi5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhbGliLmMKaW5kZXggODRiZjdiMy4uNTAwM2IyMiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhbGliLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhbGliLmMKQEAgLTEwMCwzNSArMTAwLDM1IEBACiAKICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGFscmVhZHkgbG9hZGVkIHRoZSBkcml2ZXIgKi8KICAgICBpZiAobG9hZGVkKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICBQTV9pbml0KCk7CiAgICAgX0FBX2V4cG9ydHMuZHdTaXplID0gc2l6ZW9mKF9BQV9leHBvcnRzKTsKIAogICAgIC8qIE9wZW4gdGhlIEJQRCBmaWxlICovCiAgICAgaWYgKCFQTV9maW5kQlBEKERMTF9OQU1FLGJwZHBhdGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogICAgIHN0cmNweShmaWxlbmFtZSxicGRwYXRoKTsKICAgICBzdHJjYXQoZmlsZW5hbWUsRExMX05BTUUpOwogICAgIGlmICgoaE1vZEJQRCA9IFBFX2xvYWRMaWJyYXJ5KGZpbGVuYW1lLGZhbHNlKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBpZiAoKEFBX2luaXRMaWJyYXJ5ID0gKEFBX2luaXRMaWJyYXJ5X3QpUEVfZ2V0UHJvY0FkZHJlc3MoaE1vZEJQRCwiX0FBX2luaXRMaWJyYXJ5IikpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgYnBkcGF0aFtzdHJsZW4oYnBkcGF0aCktMV0gPSAwOwogICAgIGlmIChzdHJjbXAoYnBkcGF0aCxQTV9nZXROdWNsZXVzUGF0aCgpKSA9PSAwKQotICAgICAgICBzdHJjcHkoYnBkcGF0aCxQTV9nZXROdWNsZXVzQ29uZmlnUGF0aCgpKTsKKwlzdHJjcHkoYnBkcGF0aCxQTV9nZXROdWNsZXVzQ29uZmlnUGF0aCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgUE1fYmFja3NsYXNoKGJwZHBhdGgpOwotICAgICAgICBzdHJjYXQoYnBkcGF0aCwiY29uZmlnIik7Ci0gICAgICAgIH0KKwlQTV9iYWNrc2xhc2goYnBkcGF0aCk7CisJc3RyY2F0KGJwZHBhdGgsImNvbmZpZyIpOworCX0KICAgICBpZiAoKGFhRXhwID0gQUFfaW5pdExpYnJhcnkoYnBkcGF0aCxmaWxlbmFtZSwmX1BNX2ltcG9ydHMsJl9OX2ltcG9ydHMsJl9BQV9pbXBvcnRzKSkgPT0gTlVMTCkKLSAgICAgICAgUE1fZmF0YWxFcnJvcigiQUFfaW5pdExpYnJhcnkgZmFpbGVkIVxuIik7CisJUE1fZmF0YWxFcnJvcigiQUFfaW5pdExpYnJhcnkgZmFpbGVkIVxuIik7CiAKICAgICAvKiBJbml0aWFsaXplIGFsbCBkZWZhdWx0IGltcG9ydHMgdG8gcG9pbnQgdG8gZmF0YWwgZXJyb3IgaGFuZGxlcgogICAgICAqIGZvciB1cHdhcmRzIGNvbXBhdGliaWxpdHksIGFuZCBjb3B5IHRoZSBleHBvcnRlZCBmdW5jdGlvbnMuCiAgICAgICovCiAgICAgbWF4ID0gc2l6ZW9mKF9BQV9leHBvcnRzKS9zaXplb2YoQUFfaW5pdExpYnJhcnlfdCk7CiAgICAgZm9yIChpID0gMCxwID0gKHVsb25nKikmX0FBX2V4cG9ydHM7IGkgPCBtYXg7IGkrKykKLSAgICAgICAgKnArKyA9ICh1bG9uZylfQUFfZmF0YWxFcnJvckhhbmRsZXI7CisJKnArKyA9ICh1bG9uZylfQUFfZmF0YWxFcnJvckhhbmRsZXI7CiAgICAgbWVtY3B5KCZfQUFfZXhwb3J0cyxhYUV4cCxNSU4oc2l6ZW9mKF9BQV9leHBvcnRzKSxhYUV4cC0+ZHdTaXplKSk7CiAgICAgbG9hZGVkID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0Myw3ICsxNDMsNyBAQAogaW50IE5BUEkgQUFfc3RhdHVzKHZvaWQpCiB7CiAgICAgaWYgKCFsb2FkZWQpCi0gICAgICAgIHJldHVybiBuRHJpdmVyTm90Rm91bmQ7CisJcmV0dXJuIG5Ecml2ZXJOb3RGb3VuZDsKICAgICByZXR1cm4gX0FBX2V4cG9ydHMuQUFfc3RhdHVzKCk7CiB9CiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgIE5faW50MzIgc3RhdHVzKQogewogICAgIGlmICghbG9hZGVkKQotICAgICAgICByZXR1cm4gIlVuYWJsZSB0byBsb2FkIE51Y2xldXMgZGV2aWNlIGRyaXZlciEiOworCXJldHVybiAiVW5hYmxlIHRvIGxvYWQgTnVjbGV1cyBkZXZpY2UgZHJpdmVyISI7CiAgICAgcmV0dXJuIF9BQV9leHBvcnRzLkFBX2Vycm9yTXNnKHN0YXR1cyk7CiB9CiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogaW50IE5BUEkgQUFfZ2V0RGF5c0xlZnQodm9pZCkKIHsKICAgICBpZiAoIUxvYWREcml2ZXIoKSkKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICAgICByZXR1cm4gX0FBX2V4cG9ydHMuQUFfZ2V0RGF5c0xlZnQoKTsKIH0KIApAQCAtMTY4LDcgKzE2OCw3IEBACiBpbnQgTkFQSSBBQV9yZWdpc3RlckxpY2Vuc2UodWNoYXIgKmxpY2Vuc2UpCiB7CiAgICAgaWYgKCFMb2FkRHJpdmVyKCkpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIHJldHVybiBfQUFfZXhwb3J0cy5BQV9yZWdpc3RlckxpY2Vuc2UobGljZW5zZSk7CiB9CiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogaW50IE5BUEkgQUFfZW51bWVyYXRlRGV2aWNlcyh2b2lkKQogewogICAgIGlmICghTG9hZERyaXZlcigpKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gX0FBX2V4cG9ydHMuQUFfZW51bWVyYXRlRGV2aWNlcygpOwogfQogCkBAIC0xODQsNyArMTg0LDcgQEAKIEFBX2RldkN0eCAqIE5BUEkgQUFfbG9hZERyaXZlcihOX2ludDMyIGRldmljZUluZGV4KQogewogICAgIGlmICghTG9hZERyaXZlcigpKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKICAgICByZXR1cm4gX0FBX2V4cG9ydHMuQUFfbG9hZERyaXZlcihkZXZpY2VJbmRleCk7CiB9CiAjZW5kaWYKQEAgLTIxMSwxNSArMjExLDE1IEBACiAgICAgTFpUaW1lck9iamVjdCAgIHRtOwogCiAgICAgaWYgKF9HQV9oYXZlQ1BVSUQoKSAmJiAoX0dBX2dldENQVUlERmVhdHVyZXMoKSAmIENQVV9IYXZlUkRUU0MpICE9IDApIHsKLSAgICAgICAgaWYgKCFpbml0ZWQpIHsKLSAgICAgICAgICAgIFpUaW1lckluaXQoKTsKLSAgICAgICAgICAgIGluaXRlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIExaVGltZXJPbkV4dCgmdG0pOwotICAgICAgICB3aGlsZSAoTFpUaW1lckxhcEV4dCgmdG0pIDwgbWljcm9TZWNvbmRzKQotICAgICAgICAgICAgOwotICAgICAgICBMWlRpbWVyT25FeHQoJnRtKTsKLSAgICAgICAgfQorCWlmICghaW5pdGVkKSB7CisJICAgIFpUaW1lckluaXQoKTsKKwkgICAgaW5pdGVkID0gdHJ1ZTsKKwkgICAgfQorCUxaVGltZXJPbkV4dCgmdG0pOworCXdoaWxlIChMWlRpbWVyTGFwRXh0KCZ0bSkgPCBtaWNyb1NlY29uZHMpCisJICAgIDsKKwlMWlRpbWVyT25FeHQoJnRtKTsKKwl9CiAgICAgZWxzZQotICAgICAgICBfT1NfZGVsYXk4MjUzKG1pY3JvU2Vjb25kcyk7CisJX09TX2RlbGF5ODI1MyhtaWNyb1NlY29uZHMpOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhbGludXguYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYWxpbnV4LmMKaW5kZXggNDM4NWIyMy4uZDNkNDY4ZSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhbGludXguYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vYWFsaW51eC5jCkBAIC03Miw3ICs3Miw3IEBACiBpYm9vbCBOQVBJIEdBX1RpbWVySW5pdCh2b2lkKQogewogICAgIGlmIChfR0FfaGF2ZUNQVUlEKCkgJiYgKF9HQV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVJEVFNDKSAhPSAwKQotICAgICAgICBoYXZlUkRUU0MgPSB0cnVlOworCWhhdmVSRFRTQyA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg0LDExICs4NCwxMSBAQAogICAgIEdBX2xhcmdlSW50ZWdlciAqdmFsdWUpCiB7CiAgICAgaWYgKGhhdmVSRFRTQykKLSAgICAgICAgX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOworCV9HQV9yZWFkVGltZVN0YW1wKHZhbHVlKTsKICAgICBlbHNlIHsKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgdDsKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0LCBOVUxMKTsKLSAgICAgICAgdmFsdWUtPmxvdyA9IHQudHZfc2VjKjEwMDAwMDAgKyB0LnR2X3VzZWM7Ci0gICAgICAgIHZhbHVlLT5oaWdoID0gMDsKLSAgICAgICAgfQorCXN0cnVjdCB0aW1ldmFsIHQ7CisJZ2V0dGltZW9mZGF5KCZ0LCBOVUxMKTsKKwl2YWx1ZS0+bG93ID0gdC50dl9zZWMqMTAwMDAwMCArIHQudHZfdXNlYzsKKwl2YWx1ZS0+aGlnaCA9IDA7CisJfQogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2Fhb3MyLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vYWFvczIuYwppbmRleCA0ODZiOTZhLi4wZWM4YzlmIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vYWFvczIuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vYWFvczIuYwpAQCAtNjUsMjUgKzY1LDI1IEBACiAKICAgICAvKiBPcGVuIG91ciBoZWxwZXIgZGV2aWNlIGRyaXZlciAqLwogICAgIGlmIChEb3NPcGVuKFBNSEVMUF9OQU1FLCZoU0RESGVscCwmcmVzdWx0LDAsMCwKLSAgICAgICAgICAgIEZJTEVfT1BFTiwgT1BFTl9TSEFSRV9ERU5ZTk9ORSB8IE9QRU5fQUNDRVNTX1JFQURXUklURSwKLSAgICAgICAgICAgIE5VTEwpKQotICAgICAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gb3BlbiBTRERIRUxQJCBoZWxwZXIgZGV2aWNlIGRyaXZlciEiKTsKKwkgICAgRklMRV9PUEVOLCBPUEVOX1NIQVJFX0RFTllOT05FIHwgT1BFTl9BQ0NFU1NfUkVBRFdSSVRFLAorCSAgICBOVUxMKSkKKwlQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gb3BlbiBTRERIRUxQJCBoZWxwZXIgZGV2aWNlIGRyaXZlciEiKTsKICAgICBvdXRMZW4gPSBzaXplb2YocmVzdWx0KTsKICAgICBEb3NEZXZJT0N0bChoU0RESGVscCxQTUhFTFBfSU9DVEwsUE1IRUxQX0dFVFNIQVJFRElORk8sCi0gICAgICAgIE5VTEwsIDAsIE5VTEwsCi0gICAgICAgICZyZXN1bHQsIG91dExlbiwgJm91dExlbik7CisJTlVMTCwgMCwgTlVMTCwKKwkmcmVzdWx0LCBvdXRMZW4sICZvdXRMZW4pOwogICAgIERvc0Nsb3NlKGhTRERIZWxwKTsKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIC8qIFdlIGhhdmUgZm91bmQgdGhlIHNoYXJlZCBOdWNsZXVzIHBhY2tldC4gQmVjYXVzZSBub3QgYWxsIHByb2Nlc3NlcwotICAgICAgICAgKiBtYXAgdG8gU0REUE1JLkRMTCwgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB3ZSBjb25uZWN0IHRvIHRoaXMKLSAgICAgICAgICogRExMIHNvIHRoYXQgaXQgZ2V0cyBtYXBwZWQgaW50byBvdXIgYWRkcmVzcyBzcGFjZSAodGhhdCBpcwotICAgICAgICAgKiB3aGVyZSB0aGUgc2hhcmVkIE51Y2xldXMgcGFja2V0IGlzIGxvY2F0ZWQpLiBTaW1wbHkgZG9pbmcgYQotICAgICAgICAgKiBEb3NMb2FkTW9kdWxlIG9uIGl0IGlzIGVub3VnaCBmb3IgdGhpcy4KLSAgICAgICAgICovCi0gICAgICAgIEhNT0RVTEUgaE1vZFNERFBNSTsKLSAgICAgICAgY2hhciAgICBidWZbODBdOwotICAgICAgICBEb3NMb2FkTW9kdWxlKChQU1opYnVmLHNpemVvZihidWYpLChQU1opIlNERFBNSS5ETEwiLCZoTW9kU0REUE1JKTsKLSAgICAgICAgfQorCS8qIFdlIGhhdmUgZm91bmQgdGhlIHNoYXJlZCBOdWNsZXVzIHBhY2tldC4gQmVjYXVzZSBub3QgYWxsIHByb2Nlc3NlcworCSAqIG1hcCB0byBTRERQTUkuRExMLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIGNvbm5lY3QgdG8gdGhpcworCSAqIERMTCBzbyB0aGF0IGl0IGdldHMgbWFwcGVkIGludG8gb3VyIGFkZHJlc3Mgc3BhY2UgKHRoYXQgaXMKKwkgKiB3aGVyZSB0aGUgc2hhcmVkIE51Y2xldXMgcGFja2V0IGlzIGxvY2F0ZWQpLiBTaW1wbHkgZG9pbmcgYQorCSAqIERvc0xvYWRNb2R1bGUgb24gaXQgaXMgZW5vdWdoIGZvciB0aGlzLgorCSAqLworCUhNT0RVTEUgaE1vZFNERFBNSTsKKwljaGFyICAgIGJ1Zls4MF07CisJRG9zTG9hZE1vZHVsZSgoUFNaKWJ1ZixzaXplb2YoYnVmKSwoUFNaKSJTRERQTUkuRExMIiwmaE1vZFNERFBNSSk7CisJfQogICAgIHJldHVybiAoR0Ffc2hhcmVkSW5mbyopcmVzdWx0OwogfQogCkBAIC0xMDYsNyArMTA2LDcgQEAKIGlib29sIE5BUEkgR0FfVGltZXJJbml0KHZvaWQpCiB7CiAgICAgaWYgKF9HQV9oYXZlQ1BVSUQoKSAmJiAoX0dBX2dldENQVUlERmVhdHVyZXMoKSAmIENQVV9IYXZlUkRUU0MpICE9IDApCi0gICAgICAgIGhhdmVSRFRTQyA9IHRydWU7CisJaGF2ZVJEVFNDID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTE4LDcgKzExOCw3IEBACiAgICAgR0FfbGFyZ2VJbnRlZ2VyICp2YWx1ZSkKIHsKICAgICBpZiAoaGF2ZVJEVFNDKQotICAgICAgICBfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CisJX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgRG9zVG1yUXVlcnlUaW1lKChRV09SRCopdmFsdWUpOworCURvc1RtclF1ZXJ5VGltZSgoUVdPUkQqKXZhbHVlKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYXFueC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhcW54LmMKaW5kZXggMmUyNmM5YS4uMTM1MzFiZSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhcW54LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhcW54LmMKQEAgLTcyLDcgKzcyLDcgQEAKIGlib29sIE5BUEkgR0FfVGltZXJJbml0KHZvaWQpCiB7CiAgICAgaWYgKF9HQV9oYXZlQ1BVSUQoKSAmJiAoX0dBX2dldENQVUlERmVhdHVyZXMoKSAmIENQVV9IYXZlUkRUU0MpICE9IDApCi0gICAgICAgIGhhdmVSRFRTQyA9IHRydWU7CisJaGF2ZVJEVFNDID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODQsMTIgKzg0LDEyIEBACiAgICAgR0FfbGFyZ2VJbnRlZ2VyICp2YWx1ZSkKIHsKICAgICBpZiAoaGF2ZVJEVFNDKQotICAgICAgICBfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CisJX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOwogICAgIGVsc2UgewotICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisJc3RydWN0IHRpbWVzcGVjIHRzOwogCi0gICAgICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cyk7Ci0gICAgICAgIHZhbHVlLT5sb3cgPSAodHMudHZfbnNlYyAvIDEwMDAgKyB0cy50dl9zZWMgKiAxMDAwMDAwKTsKLSAgICAgICAgdmFsdWUtPmhpZ2ggPSAwOwotICAgICAgICB9CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKTsKKwl2YWx1ZS0+bG93ID0gKHRzLnR2X25zZWMgLyAxMDAwICsgdHMudHZfc2VjICogMTAwMDAwMCk7CisJdmFsdWUtPmhpZ2ggPSAwOworCX0KIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYXJ0dC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhcnR0LmMKaW5kZXggMTdhMDZiNS4uMWE1YTY3YSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhcnR0LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhcnR0LmMKQEAgLTcxLDkgKzcxLDkgQEAKIGlib29sIE5BUEkgR0FfVGltZXJJbml0KHZvaWQpCiB7CiAgICAgaWYgKF9HQV9oYXZlQ1BVSUQoKSAmJiAoX0dBX2dldENQVUlERmVhdHVyZXMoKSAmIENQVV9IYXZlUkRUU0MpICE9IDApIHsKLSAgICAgICAgaGF2ZVJEVFNDID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKwloYXZlUkRUU0MgPSB0cnVlOworCXJldHVybiB0cnVlOworCX0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTg1LDUgKzg1LDUgQEAKICAgICBHQV9sYXJnZUludGVnZXIgKnZhbHVlKQogewogICAgIGlmIChoYXZlUkRUU0MpCi0gICAgICAgIF9HQV9yZWFkVGltZVN0YW1wKHZhbHVlKTsKKwlfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vYWFzbXguYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYXNteC5jCmluZGV4IDU2Y2JkNWIuLjE2MzA2MGYgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYXNteC5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYXNteC5jCkBAIC02OCw3ICs2OCw3IEBACiBpYm9vbCBOQVBJIEdBX1RpbWVySW5pdCh2b2lkKQogewogICAgIGlmIChfR0FfaGF2ZUNQVUlEKCkgJiYgKF9HQV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVJEVFNDKSAhPSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYXZ4ZC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhdnhkLmMKaW5kZXggMjk1NTMzZC4uMjIxYjAyYiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhdnhkLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FhdnhkLmMKQEAgLTcxLDggKzcxLDggQEAKIGlib29sIE5BUEkgR0FfVGltZXJJbml0KHZvaWQpCiB7CiAgICAgaWYgKF9HQV9oYXZlQ1BVSUQoKSAmJiAoX0dBX2dldENQVUlERmVhdHVyZXMoKSAmIENQVV9IYXZlUkRUU0MpICE9IDApIHsKLSAgICAgICAgaGF2ZVJEVFNDID0gdHJ1ZTsKLSAgICAgICAgfQorCWhhdmVSRFRTQyA9IHRydWU7CisJfQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04NCw3ICs4NCw3IEBACiAgICAgR0FfbGFyZ2VJbnRlZ2VyICp2YWx1ZSkKIHsKICAgICBpZiAoaGF2ZVJEVFNDKQotICAgICAgICBfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CisJX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgVlREX0dldF9SZWFsX1RpbWUoJnZhbHVlLT5oaWdoLCZ2YWx1ZS0+bG93KTsKKwlWVERfR2V0X1JlYWxfVGltZSgmdmFsdWUtPmhpZ2gsJnZhbHVlLT5sb3cpOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2Fhd2luMzIuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hYXdpbjMyLmMKaW5kZXggZjYzZjAwNC4uNTQxZGY0YSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2Fhd2luMzIuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vYWF3aW4zMi5jCkBAIC03NSw5ICs3NSw5IEBACiAgICAgUE1faW5pdCgpOwogICAgIGluQnVmWzBdID0gZGV2aWNlOwogICAgIGlmIChEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9HRVRTSEFSRURJTkZPMzIsIGluQnVmLCBzaXplb2YoaW5CdWYpLAotICAgICAgICAgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkgewotICAgICAgICByZXR1cm4gKEdBX3NoYXJlZEluZm8qKW91dEJ1ZlswXTsKLSAgICAgICAgfQorCSAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKSB7CisJcmV0dXJuIChHQV9zaGFyZWRJbmZvKilvdXRCdWZbMF07CisJfQogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xMDIsMTYgKzEwMiwxNiBAQAogICAgIEdBX2RldkN0eCAqZGMpCiB7CiAgICAgaWYgKF9QTV9oRGV2aWNlKSB7Ci0gICAgICAgIERXT1JEICAgaW5CdWZbMV07ICAgLyogQnVmZmVyIHRvIHNlbmQgZGF0YSB0byBWeEQgICAgICAgKi8KLSAgICAgICAgRFdPUkQgICBvdXRCdWZbMV07ICAvKiBCdWZmZXIgdG8gcmVjZWl2ZSBkYXRhIGZyb20gVnhEICAqLwotICAgICAgICBEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCisJRFdPUkQgICBpbkJ1ZlsxXTsgICAvKiBCdWZmZXIgdG8gc2VuZCBkYXRhIHRvIFZ4RCAgICAgICAqLworCURXT1JEICAgb3V0QnVmWzFdOyAgLyogQnVmZmVyIHRvIHJlY2VpdmUgZGF0YSBmcm9tIFZ4RCAgKi8KKwlEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCiAKLSAgICAgICAgaW5CdWZbMF0gPSAodWxvbmcpZGM7Ci0gICAgICAgIGlmIChEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9HQVNURVJFT0lOSVQzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCi0gICAgICAgICAgICAgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkgewotICAgICAgICAgICAgcmV0dXJuIG91dEJ1ZlswXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWluQnVmWzBdID0gKHVsb25nKWRjOworCWlmIChEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9HQVNURVJFT0lOSVQzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCisJCW91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpIHsKKwkgICAgcmV0dXJuIG91dEJ1ZlswXTsKKwkgICAgfQorCX0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEyMiw5ICsxMjIsOSBAQAogc3RhdGljIHZvaWQgTkFQSSBfR0Ffc29mdFN0ZXJlb09uKHZvaWQpCiB7CiAgICAgaWYgKF9QTV9oRGV2aWNlKSB7Ci0gICAgICAgIERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dBU1RFUkVPT04zMiwgTlVMTCwgMCwKLSAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwpOwotICAgICAgICB9CisJRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfR0FTVEVSRU9PTjMyLCBOVUxMLCAwLAorCSAgICBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzcsMTQgKzEzNywxNCBAQAogICAgIE5fdWludDMyIHJpZ2h0QWRkcikKIHsKICAgICBpZiAoX1BNX2hEZXZpY2UpIHsKLSAgICAgICAgRFdPUkQgICBpbkJ1ZlsyXTsgICAvKiBCdWZmZXIgdG8gc2VuZCBkYXRhIHRvIFZ4RCAgICAgICAqLwotICAgICAgICBEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCisJRFdPUkQgICBpbkJ1ZlsyXTsgICAvKiBCdWZmZXIgdG8gc2VuZCBkYXRhIHRvIFZ4RCAgICAgICAqLworCURXT1JEICAgY291bnQ7ICAgICAgLyogQ291bnQgb2YgYnl0ZXMgcmV0dXJuZWQgZnJvbSBWeEQgKi8KIAotICAgICAgICBpbkJ1ZlswXSA9ICh1bG9uZylsZWZ0QWRkcjsKLSAgICAgICAgaW5CdWZbMV0gPSAodWxvbmcpcmlnaHRBZGRyOwotICAgICAgICBEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9HQVNURVJFT0ZMSVAzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCi0gICAgICAgICAgICBOVUxMLCAwLCAmY291bnQsIE5VTEwpOwotICAgICAgICB9CisJaW5CdWZbMF0gPSAodWxvbmcpbGVmdEFkZHI7CisJaW5CdWZbMV0gPSAodWxvbmcpcmlnaHRBZGRyOworCURldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dBU1RFUkVPRkxJUDMyLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwKKwkgICAgTlVMTCwgMCwgJmNvdW50LCBOVUxMKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNTQsMTQgKzE1NCwxNCBAQAogc3RhdGljIE5faW50MzIgTkFQSSBfR0Ffc29mdFN0ZXJlb0dldEZsaXBTdGF0dXModm9pZCkKIHsKICAgICBpZiAoX1BNX2hEZXZpY2UpIHsKLSAgICAgICAgRFdPUkQgICBvdXRCdWZbMV07ICAvKiBCdWZmZXIgdG8gcmVjZWl2ZSBkYXRhIGZyb20gVnhEICAqLwotICAgICAgICBEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCisJRFdPUkQgICBvdXRCdWZbMV07ICAvKiBCdWZmZXIgdG8gcmVjZWl2ZSBkYXRhIGZyb20gVnhEICAqLworCURXT1JEICAgY291bnQ7ICAgICAgLyogQ291bnQgb2YgYnl0ZXMgcmV0dXJuZWQgZnJvbSBWeEQgKi8KIAotICAgICAgICBpZiAoRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfR0FTVEVSRU9GTElQU1RBVFVTMzIsIE5VTEwsIDAsCi0gICAgICAgICAgICAgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkgewotICAgICAgICAgICAgcmV0dXJuIG91dEJ1ZlswXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmIChEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9HQVNURVJFT0ZMSVBTVEFUVVMzMiwgTlVMTCwgMCwKKwkJb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkgeworCSAgICByZXR1cm4gb3V0QnVmWzBdOworCSAgICB9CisJfQogICAgIHJldHVybiAwOwogfQogCkBAIC0xNzIsNyArMTcyLDcgQEAKIHN0YXRpYyB2b2lkIE5BUEkgX0dBX3NvZnRTdGVyZW9XYWl0VGlsbEZsaXBwZWQodm9pZCkKIHsKICAgICB3aGlsZSAoIV9HQV9zb2Z0U3RlcmVvR2V0RmxpcFN0YXR1cygpKQotICAgICAgICA7CisJOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTgyLDkgKzE4Miw5IEBACiBzdGF0aWMgdm9pZCBOQVBJIF9HQV9zb2Z0U3RlcmVvT2ZmKHZvaWQpCiB7CiAgICAgaWYgKF9QTV9oRGV2aWNlKSB7Ci0gICAgICAgIERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dBU1RFUkVPT0ZGMzIsIE5VTEwsIDAsCi0gICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgfQorCURldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dBU1RFUkVPT0ZGMzIsIE5VTEwsIDAsCisJICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE5NSw5ICsxOTUsOSBAQAogc3RhdGljIHZvaWQgTkFQSSBfR0Ffc29mdFN0ZXJlb0V4aXQodm9pZCkKIHsKICAgICBpZiAoX1BNX2hEZXZpY2UpIHsKLSAgICAgICAgRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfR0FTVEVSRU9FWElUMzIsIE5VTEwsIDAsCi0gICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgfQorCURldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dBU1RFUkVPRVhJVDMyLCBOVUxMLCAwLAorCSAgICBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMTcsMTQgKzIxNywxNCBAQAogICAgIE5faW50MzIgICAgIHRvdGFsTWVtb3J5ID0gMCxvbGRJT1BMOwogCiAgICAgaWYgKGRldmljZUluZGV4ID49IEdBX01BWF9ERVZJQ0VTKQotICAgICAgICBQTV9mYXRhbEVycm9yKCJEZXZpY2VJbmRleCB0b28gbGFyZ2UgaW4gR0FfbG9hZERyaXZlciEiKTsKKwlQTV9mYXRhbEVycm9yKCJEZXZpY2VJbmRleCB0b28gbGFyZ2UgaW4gR0FfbG9hZERyaXZlciEiKTsKICAgICBQTV9pbml0KCk7CiAgICAgaW5CdWZbMF0gPSBkZXZpY2VJbmRleDsKICAgICBpZiAoRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfR0VUTUVNU0laRTMyLAotICAgICAgICAgICAgaW5CdWYsIHNpemVvZihpbkJ1ZiksIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksIE5VTEwsIE5VTEwpKQotICAgICAgICB0b3RhbE1lbW9yeSA9IG91dEJ1ZlswXTsKKwkgICAgaW5CdWYsIHNpemVvZihpbkJ1ZiksIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksIE5VTEwsIE5VTEwpKQorCXRvdGFsTWVtb3J5ID0gb3V0QnVmWzBdOwogICAgIGlmICh0b3RhbE1lbW9yeSA9PSAwKQotICAgICAgICB0b3RhbE1lbW9yeSA9IDgxOTI7CisJdG90YWxNZW1vcnkgPSA4MTkyOwogICAgIF9HQV9leHBvcnRzLkdBX2ZvcmNlTWVtU2l6ZSh0b3RhbE1lbW9yeSxzaGFyZWQpOwogICAgIG9sZElPUEwgPSBQTV9zZXRJT1BMKDMpOwogICAgIGRjID0gT1JHX0dBX2xvYWREcml2ZXIoZGV2aWNlSW5kZXgsc2hhcmVkKTsKQEAgLTI0MCwxMyArMjQwLDEzIEBACiBpYm9vbCBOQVBJIEdBX1RpbWVySW5pdCh2b2lkKQogewogICAgIGlmIChfR0FfaGF2ZUNQVUlEKCkgJiYgKF9HQV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVJEVFNDKSAhPSAwKSB7Ci0gICAgICAgIGhhdmVSRFRTQyA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisJaGF2ZVJEVFNDID0gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKKwl9CiAgICAgZWxzZSBpZiAoUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSgoTEFSR0VfSU5URUdFUiopJmNvdW50RnJlcSkpIHsKLSAgICAgICAgaGF2ZVJEVFNDID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisJaGF2ZVJEVFNDID0gZmFsc2U7CisJcmV0dXJuIHRydWU7CisJfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMjU4LDcgKzI1OCw3IEBACiAgICAgR0FfbGFyZ2VJbnRlZ2VyICp2YWx1ZSkKIHsKICAgICBpZiAoaGF2ZVJEVFNDKQotICAgICAgICBfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CisJX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoKExBUkdFX0lOVEVHRVIqKXZhbHVlKTsKKwlRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigoTEFSR0VfSU5URUdFUiopdmFsdWUpOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FncGxpYi5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2FncGxpYi5jCmluZGV4IGRmOGY5MzIuLjQ3NmVlZGMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9hZ3BsaWIuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vYWdwbGliLmMKQEAgLTg4LDMxICs4OCwzMSBAQAogCiAgICAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhbHJlYWR5IGxvYWRlZCB0aGUgZHJpdmVyICovCiAgICAgaWYgKGxvYWRlZCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisJcmV0dXJuIHRydWU7CiAgICAgUE1faW5pdCgpOwogCiAgICAgLyogT3BlbiB0aGUgQlBEIGZpbGUgKi8KICAgICBpZiAoIVBNX2ZpbmRCUEQoRExMX05BTUUsYnBkcGF0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgc3RyY3B5KGZpbGVuYW1lLGJwZHBhdGgpOwogICAgIHN0cmNhdChmaWxlbmFtZSxETExfTkFNRSk7CiAgICAgaWYgKChoTW9kQlBEID0gUEVfbG9hZExpYnJhcnkoZmlsZW5hbWUsZmFsc2UpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogICAgIGlmICgoQUdQX2luaXRMaWJyYXJ5ID0gKEFHUF9pbml0TGlicmFyeV90KVBFX2dldFByb2NBZGRyZXNzKGhNb2RCUEQsIl9BR1BfaW5pdExpYnJhcnkiKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBicGRwYXRoW3N0cmxlbihicGRwYXRoKS0xXSA9IDA7CiAgICAgaWYgKHN0cmNtcChicGRwYXRoLFBNX2dldE51Y2xldXNQYXRoKCkpID09IDApCi0gICAgICAgIHN0cmNweShicGRwYXRoLFBNX2dldE51Y2xldXNDb25maWdQYXRoKCkpOworCXN0cmNweShicGRwYXRoLFBNX2dldE51Y2xldXNDb25maWdQYXRoKCkpOwogICAgIGVsc2UgewotICAgICAgICBQTV9iYWNrc2xhc2goYnBkcGF0aCk7Ci0gICAgICAgIHN0cmNhdChicGRwYXRoLCJjb25maWciKTsKLSAgICAgICAgfQorCVBNX2JhY2tzbGFzaChicGRwYXRoKTsKKwlzdHJjYXQoYnBkcGF0aCwiY29uZmlnIik7CisJfQogICAgIGlmICgoYWdwRXhwID0gQUdQX2luaXRMaWJyYXJ5KGJwZHBhdGgsZmlsZW5hbWUsR0FfZ2V0U3lzdGVtUE1JbXBvcnRzKCksJl9OX2ltcG9ydHMsJl9BR1BfaW1wb3J0cykpID09IE5VTEwpCi0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIkFHUF9pbml0TGlicmFyeSBmYWlsZWQhXG4iKTsKKwlQTV9mYXRhbEVycm9yKCJBR1BfaW5pdExpYnJhcnkgZmFpbGVkIVxuIik7CiAgICAgX0FHUF9leHBvcnRzLmR3U2l6ZSA9IHNpemVvZihfQUdQX2V4cG9ydHMpOwogICAgIG1heCA9IHNpemVvZihfQUdQX2V4cG9ydHMpL3NpemVvZihBR1BfaW5pdExpYnJhcnlfdCk7CiAgICAgZm9yIChpID0gMCxwID0gKHVsb25nKikmX0FHUF9leHBvcnRzOyBpIDwgbWF4OyBpKyspCi0gICAgICAgICpwKysgPSAodWxvbmcpX0FHUF9mYXRhbEVycm9ySGFuZGxlcjsKKwkqcCsrID0gKHVsb25nKV9BR1BfZmF0YWxFcnJvckhhbmRsZXI7CiAgICAgbWVtY3B5KCZfQUdQX2V4cG9ydHMsYWdwRXhwLE1JTihzaXplb2YoX0FHUF9leHBvcnRzKSxhZ3BFeHAtPmR3U2l6ZSkpOwogICAgIGxvYWRlZCA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjcsNyArMTI3LDcgQEAKIGludCBOQVBJIEFHUF9zdGF0dXModm9pZCkKIHsKICAgICBpZiAoIWxvYWRlZCkKLSAgICAgICAgcmV0dXJuIG5Ecml2ZXJOb3RGb3VuZDsKKwlyZXR1cm4gbkRyaXZlck5vdEZvdW5kOwogICAgIHJldHVybiBfQUdQX2V4cG9ydHMuQUdQX3N0YXR1cygpOwogfQogCkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICBOX2ludDMyIHN0YXR1cykKIHsKICAgICBpZiAoIWxvYWRlZCkKLSAgICAgICAgcmV0dXJuICJVbmFibGUgdG8gbG9hZCBOdWNsZXVzIGRldmljZSBkcml2ZXIhIjsKKwlyZXR1cm4gIlVuYWJsZSB0byBsb2FkIE51Y2xldXMgZGV2aWNlIGRyaXZlciEiOwogICAgIHJldHVybiBfQUdQX2V4cG9ydHMuQUdQX2Vycm9yTXNnKHN0YXR1cyk7CiB9CiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogQUdQX2RldkN0eCAqIE5BUEkgQUdQX2xvYWREcml2ZXIoTl9pbnQzMiBkZXZpY2VJbmRleCkKIHsKICAgICBpZiAoIUxvYWREcml2ZXIoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIF9BR1BfZXhwb3J0cy5BR1BfbG9hZERyaXZlcihkZXZpY2VJbmRleCk7CiB9CiAKQEAgLTE1Myw3ICsxNTMsNyBAQAogICAgIEFHUF9kZXZDdHggKmRjKQogewogICAgIGlmIChsb2FkZWQpCi0gICAgICAgIF9BR1BfZXhwb3J0cy5BR1BfdW5sb2FkRHJpdmVyKGRjKTsKKwlfQUdQX2V4cG9ydHMuQUdQX3VubG9hZERyaXZlcihkYyk7CiB9CiAKIC8qIHtzZWNyZXR9ICovCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICBBR1BfZ2xvYmFsT3B0aW9ucyAqb3B0aW9ucykKIHsKICAgICBpZiAoTG9hZERyaXZlcigpKQotICAgICAgICBfQUdQX2V4cG9ydHMuQUdQX2dldEdsb2JhbE9wdGlvbnMob3B0aW9ucyk7CisJX0FHUF9leHBvcnRzLkFHUF9nZXRHbG9iYWxPcHRpb25zKG9wdGlvbnMpOwogfQogCiAvKiB7c2VjcmV0fSAqLwpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgQUdQX2dsb2JhbE9wdGlvbnMgKm9wdGlvbnMpCiB7CiAgICAgaWYgKExvYWREcml2ZXIoKSkKLSAgICAgICAgX0FHUF9leHBvcnRzLkFHUF9zZXRHbG9iYWxPcHRpb25zKG9wdGlvbnMpOworCV9BR1BfZXhwb3J0cy5BR1Bfc2V0R2xvYmFsT3B0aW9ucyhvcHRpb25zKTsKIH0KIAogLyoge3NlY3JldH0gKi8KQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgIEFHUF9nbG9iYWxPcHRpb25zICpvcHRpb25zKQogewogICAgIGlmIChsb2FkZWQpCi0gICAgICAgIF9BR1BfZXhwb3J0cy5BR1Bfc2F2ZUdsb2JhbE9wdGlvbnMob3B0aW9ucyk7CisJX0FHUF9leHBvcnRzLkFHUF9zYXZlR2xvYmFsT3B0aW9ucyhvcHRpb25zKTsKIH0KICNlbmRpZgogCkBAIC0xOTcsMjQgKzE5NywyMyBAQAogCiAgICAgaWYgKCFpbml0ZWQpIHsKICNpZm5kZWYgX19XSU4zMl9WWERfXwotICAgICAgICAvLyBUaGlzIGhhcyBiZWVuIGNhdXNpbmcgcHJvYmxlbXMgaW4gVnhEJ3MgZm9yIHNvbWUgcmVhc29uLCBzbyBmb3Igbm93Ci0gICAgICAgIC8vIHdlIGF2b2lkIHVzaW5nIGl0LgotICAgICAgICBpZiAoX0dBX2hhdmVDUFVJRCgpICYmIChfR0FfZ2V0Q1BVSURGZWF0dXJlcygpICYgQ1BVX0hhdmVSRFRTQykgIT0gMCkgewotICAgICAgICAgICAgWlRpbWVySW5pdCgpOwotICAgICAgICAgICAgaGF2ZVJEVFNDID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZQorCS8qIFRoaXMgaGFzIGJlZW4gY2F1c2luZyBwcm9ibGVtcyBpbiBWeEQncyBmb3Igc29tZSByZWFzb24sIHNvIGZvciBub3cgKi8KKwkvKiB3ZSBhdm9pZCB1c2luZyBpdC4gKi8KKwlpZiAoX0dBX2hhdmVDUFVJRCgpICYmIChfR0FfZ2V0Q1BVSURGZWF0dXJlcygpICYgQ1BVX0hhdmVSRFRTQykgIT0gMCkgeworCSAgICBaVGltZXJJbml0KCk7CisJICAgIGhhdmVSRFRTQyA9IHRydWU7CisJICAgIH0KKwllbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIGhhdmVSRFRTQyA9IGZhbHNlOwotICAgICAgICBpbml0ZWQgPSB0cnVlOwotICAgICAgICB9CisJICAgIGhhdmVSRFRTQyA9IGZhbHNlOworCWluaXRlZCA9IHRydWU7CisJfQogICAgIGlmIChoYXZlUkRUU0MpIHsKLSAgICAgICAgTFpUaW1lck9uRXh0KCZ0bSk7Ci0gICAgICAgIHdoaWxlIChMWlRpbWVyTGFwRXh0KCZ0bSkgPCBtaWNyb1NlY29uZHMpCi0gICAgICAgICAgICA7Ci0gICAgICAgIExaVGltZXJPbkV4dCgmdG0pOwotICAgICAgICB9CisJTFpUaW1lck9uRXh0KCZ0bSk7CisJd2hpbGUgKExaVGltZXJMYXBFeHQoJnRtKSA8IG1pY3JvU2Vjb25kcykKKwkgICAgOworCUxaVGltZXJPbkV4dCgmdG0pOworCX0KICAgICBlbHNlCi0gICAgICAgIF9PU19kZWxheTgyNTMobWljcm9TZWNvbmRzKTsKKwlfT1NfZGVsYXk4MjUzKG1pY3JvU2Vjb25kcyk7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9jZW50ZXIuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9jZW50ZXIuYwppbmRleCA3ZWIzNjhmLi42OGUxN2MyIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vY2VudGVyLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2NlbnRlci5jCkBAIC02MCwxOSArNjAsMTkgQEAKICAgICBDZW50ZXJZID0gKChSZWN0UGFyZW50LmJvdHRvbSAtIFJlY3RQYXJlbnQudG9wKSAtIEhlaWdodCkgLyAyOwogCiAgICAgaWYgKChDZW50ZXJYIDwgMCkgfHwgKENlbnRlclkgPCAwKSkgewotICAgICAgICAvKiBUaGUgQ2VudGVyIFdpbmRvdyBpcyBzbWFsbGVyIHRoYW4gdGhlIHBhcmVudCB3aW5kb3cuICovCi0gICAgICAgIGlmIChoV25kUGFyZW50ICE9IEdldERlc2t0b3BXaW5kb3coKSkgewotICAgICAgICAgICAgLyogSWYgdGhlIHBhcmVudCB3aW5kb3cgaXMgbm90IHRoZSBkZXNrdG9wIHVzZSB0aGUgZGVza3RvcCBzaXplLiAqLwotICAgICAgICAgICAgQ2VudGVyWCA9IChHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYU0NSRUVOKSAtIFdpZHRoKSAvIDI7Ci0gICAgICAgICAgICBDZW50ZXJZID0gKEdldFN5c3RlbU1ldHJpY3MoU01fQ1lTQ1JFRU4pIC0gSGVpZ2h0KSAvIDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIENlbnRlclggPSAoQ2VudGVyWCA8IDApID8gMDogQ2VudGVyWDsKLSAgICAgICAgQ2VudGVyWSA9IChDZW50ZXJZIDwgMCkgPyAwOiBDZW50ZXJZOwotICAgICAgICB9CisJLyogVGhlIENlbnRlciBXaW5kb3cgaXMgc21hbGxlciB0aGFuIHRoZSBwYXJlbnQgd2luZG93LiAqLworCWlmIChoV25kUGFyZW50ICE9IEdldERlc2t0b3BXaW5kb3coKSkgeworCSAgICAvKiBJZiB0aGUgcGFyZW50IHdpbmRvdyBpcyBub3QgdGhlIGRlc2t0b3AgdXNlIHRoZSBkZXNrdG9wIHNpemUuICovCisJICAgIENlbnRlclggPSAoR2V0U3lzdGVtTWV0cmljcyhTTV9DWFNDUkVFTikgLSBXaWR0aCkgLyAyOworCSAgICBDZW50ZXJZID0gKEdldFN5c3RlbU1ldHJpY3MoU01fQ1lTQ1JFRU4pIC0gSGVpZ2h0KSAvIDI7CisJICAgIH0KKwlDZW50ZXJYID0gKENlbnRlclggPCAwKSA/IDA6IENlbnRlclg7CisJQ2VudGVyWSA9IChDZW50ZXJZIDwgMCkgPyAwOiBDZW50ZXJZOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgQ2VudGVyWCArPSBSZWN0UGFyZW50LmxlZnQ7Ci0gICAgICAgIENlbnRlclkgKz0gUmVjdFBhcmVudC50b3A7Ci0gICAgICAgIH0KKwlDZW50ZXJYICs9IFJlY3RQYXJlbnQubGVmdDsKKwlDZW50ZXJZICs9IFJlY3RQYXJlbnQudG9wOworCX0KIAogICAgIC8qIENvcHkgdGhlIHZhbHVlcyBpbnRvIFJlY3RDZW50ZXIgKi8KICAgICBSZWN0Q2VudGVyLmxlZnQgPSBDZW50ZXJYOwpAQCAtODIsOCArODIsOCBAQAogCiAgICAgLyogTW92ZSB0aGUgd2luZG93IHRvIHRoZSBuZXcgbG9jYXRpb24gKi8KICAgICBNb3ZlV2luZG93KGhXbmRDZW50ZXIsIFJlY3RDZW50ZXIubGVmdCwgUmVjdENlbnRlci50b3AsCi0gICAgICAgICAgICAoUmVjdENlbnRlci5yaWdodCAtIFJlY3RDZW50ZXIubGVmdCksCi0gICAgICAgICAgICAoUmVjdENlbnRlci5ib3R0b20gLSBSZWN0Q2VudGVyLnRvcCksIHJlcGFpbnQpOworCSAgICAoUmVjdENlbnRlci5yaWdodCAtIFJlY3RDZW50ZXIubGVmdCksCisJICAgIChSZWN0Q2VudGVyLmJvdHRvbSAtIFJlY3RDZW50ZXIudG9wKSwgcmVwYWludCk7CiB9CiAKIHZvaWQgX0VYUE9SVCBDZW50ZXJMb2dvKEhXTkQgaFduZExvZ28sIEhXTkQgaFduZFBhcmVudCwgaW50IENlbnRlclkpCkBAIC0xMTcsNyArMTE3LDYgQEAKIAogICAgIC8qIE1vdmUgdGhlIHdpbmRvdyB0byB0aGUgbmV3IGxvY2F0aW9uICovCiAgICAgTW92ZVdpbmRvdyhoV25kTG9nbywgUmVjdENlbnRlci5sZWZ0LCBSZWN0Q2VudGVyLnRvcCwKLSAgICAgICAgICAgIChSZWN0Q2VudGVyLnJpZ2h0IC0gUmVjdENlbnRlci5sZWZ0KSwKLSAgICAgICAgICAgIChSZWN0Q2VudGVyLmJvdHRvbSAtIFJlY3RDZW50ZXIudG9wKSwgZmFsc2UpOworCSAgICAoUmVjdENlbnRlci5yaWdodCAtIFJlY3RDZW50ZXIubGVmdCksCisJICAgIChSZWN0Q2VudGVyLmJvdHRvbSAtIFJlY3RDZW50ZXIudG9wKSwgZmFsc2UpOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vY21kbGluZS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2NtZGxpbmUuYwppbmRleCA4NzJmYWU5Li41MzFlNWUxIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vY21kbGluZS5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9jbWRsaW5lLmMKQEAgLTEwNiw0OSArMTA2LDQ5IEBACiAgICAgY2hhciAgICAqZm9ybWF0Y2hhcjsKIAogICAgIGlmIChhcmdjID4gbmV4dGFyZ3YpIHsKLSAgICAgICAgaWYgKG5leHRjaGFyID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5leHRjaGFyID0gYXJndltuZXh0YXJndl07ICAgICAgLyogSW5kZXggbmV4dCBhcmd1bWVudCAgICAgICovCi0gICAgICAgICAgICBpZiAobmV4dGNoYXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG5leHRhcmd2Kys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFMTERPTkU7ICAgICAgICAgICAgIC8qIE5vIG1vcmUgb3B0aW9ucyAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChJU19OT1RfU1dJVENIX0NIQVIoKm5leHRjaGFyKSkgewotICAgICAgICAgICAgICAgIG5leHRjaGFyID0gTlVMTDsKLSAgICAgICAgICAgICAgICByZXR1cm4gUEFSQU1FVEVSOyAgICAgICAgICAgLyogV2UgaGF2ZSBhIHBhcmFtZXRlciAgICAgICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV4dGNoYXIrKzsgICAgICAgICAgICAgICAgICAgICAvKiBNb3ZlIHBhc3Qgc3dpdGNoIG9wZXJhdG9yICovCi0gICAgICAgICAgICBpZiAoSVNfU1dJVENIX0NIQVIoKm5leHRjaGFyKSkgewotICAgICAgICAgICAgICAgIG5leHRjaGFyID0gTlVMTDsKLSAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDsgICAgICAgICAgICAgLyogSWdub3JlIHJlc3Qgb2YgbGluZSAgICAgICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBpZiAoKGNoID0gKihuZXh0Y2hhcisrKSkgPT0gMCkgewotICAgICAgICAgICAgbmV4dGNoYXIgPSBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7ICAgICAgICAgICAgICAgICAvKiBObyBvcHRpb25zIG9uIGxpbmUgICAgICAgKi8KLSAgICAgICAgICAgIH0KKwlpZiAobmV4dGNoYXIgPT0gTlVMTCkgeworCSAgICBuZXh0Y2hhciA9IGFyZ3ZbbmV4dGFyZ3ZdOyAgICAgIC8qIEluZGV4IG5leHQgYXJndW1lbnQgICAgICAqLworCSAgICBpZiAobmV4dGNoYXIgPT0gTlVMTCkgeworCQluZXh0YXJndisrOworCQlyZXR1cm4gQUxMRE9ORTsgICAgICAgICAgICAgLyogTm8gbW9yZSBvcHRpb25zICAgICAgICAgICovCisJCX0KKwkgICAgaWYgKElTX05PVF9TV0lUQ0hfQ0hBUigqbmV4dGNoYXIpKSB7CisJCW5leHRjaGFyID0gTlVMTDsKKwkJcmV0dXJuIFBBUkFNRVRFUjsgICAgICAgICAgIC8qIFdlIGhhdmUgYSBwYXJhbWV0ZXIgICAgICAqLworCQl9CisJICAgIG5leHRjaGFyKys7ICAgICAgICAgICAgICAgICAgICAgLyogTW92ZSBwYXN0IHN3aXRjaCBvcGVyYXRvciAqLworCSAgICBpZiAoSVNfU1dJVENIX0NIQVIoKm5leHRjaGFyKSkgeworCQluZXh0Y2hhciA9IE5VTEw7CisJCXJldHVybiBJTlZBTElEOyAgICAgICAgICAgICAvKiBJZ25vcmUgcmVzdCBvZiBsaW5lICAgICAgKi8KKwkJfQorCSAgICB9CisJaWYgKChjaCA9ICoobmV4dGNoYXIrKykpID09IDApIHsKKwkgICAgbmV4dGNoYXIgPSBOVUxMOworCSAgICByZXR1cm4gSU5WQUxJRDsgICAgICAgICAgICAgICAgIC8qIE5vIG9wdGlvbnMgb24gbGluZSAgICAgICAqLworCSAgICB9CiAKLSAgICAgICAgaWYgKGNoID09ICc6JyB8fCAgKGZvcm1hdGNoYXIgPSBzdHJjaHIoZm9ybWF0LCBjaCkpID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDsKKwlpZiAoY2ggPT0gJzonIHx8ICAoZm9ybWF0Y2hhciA9IHN0cmNocihmb3JtYXQsIGNoKSkgPT0gTlVMTCkKKwkgICAgcmV0dXJuIElOVkFMSUQ7CiAKLSAgICAgICAgaWYgKCooKytmb3JtYXRjaGFyKSA9PSAnOicpIHsgICAvKiBFeHBlY3QgYW4gYXJndW1lbnQgYWZ0ZXIgb3B0aW9uICovCi0gICAgICAgICAgICBuZXh0YXJndisrOwotICAgICAgICAgICAgaWYgKCpuZXh0Y2hhciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ2MgPD0gbmV4dGFyZ3YpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEOwotICAgICAgICAgICAgICAgIG5leHRjaGFyID0gYXJndltuZXh0YXJndisrXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAqYXJndW1lbnQgPSBuZXh0Y2hhcjsKLSAgICAgICAgICAgIG5leHRjaGFyID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGhhdmUgYSBzd2l0Y2ggc3R5bGUgb3B0aW9uICAgICovCi0gICAgICAgICAgICBpZiAoKm5leHRjaGFyID09IDApIHsKLSAgICAgICAgICAgICAgICBuZXh0YXJndisrOwotICAgICAgICAgICAgICAgIG5leHRjaGFyID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAqYXJndW1lbnQgPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICByZXR1cm4gY2g7ICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHRoZSBvcHRpb24gc3BlY2lmaWVyICAgICAgKi8KLSAgICAgICAgfQorCWlmICgqKCsrZm9ybWF0Y2hhcikgPT0gJzonKSB7ICAgLyogRXhwZWN0IGFuIGFyZ3VtZW50IGFmdGVyIG9wdGlvbiAqLworCSAgICBuZXh0YXJndisrOworCSAgICBpZiAoKm5leHRjaGFyID09IDApIHsKKwkJaWYgKGFyZ2MgPD0gbmV4dGFyZ3YpCisJCSAgICByZXR1cm4gSU5WQUxJRDsKKwkJbmV4dGNoYXIgPSBhcmd2W25leHRhcmd2KytdOworCQl9CisJICAgICphcmd1bWVudCA9IG5leHRjaGFyOworCSAgICBuZXh0Y2hhciA9IE5VTEw7CisJICAgIH0KKwllbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogV2UgaGF2ZSBhIHN3aXRjaCBzdHlsZSBvcHRpb24gICAgKi8KKwkgICAgaWYgKCpuZXh0Y2hhciA9PSAwKSB7CisJCW5leHRhcmd2Kys7CisJCW5leHRjaGFyID0gTlVMTDsKKwkJfQorCSAgICAqYXJndW1lbnQgPSBOVUxMOworCSAgICB9CisJcmV0dXJuIGNoOyAgICAgICAgICAgICAgICAgIC8qIHJldHVybiB0aGUgb3B0aW9uIHNwZWNpZmllciAgICAgICovCisJfQogICAgIG5leHRjaGFyID0gTlVMTDsKICAgICBuZXh0YXJndisrOwogICAgIHJldHVybiBBTExET05FOyAgICAgICAgICAgICAgICAgLyogbm8gYXJndW1lbnRzIG9uIGNvbW1hbmQgbGluZSAgICAgKi8KQEAgLTE3NCw1MSArMTc0LDUxIEBACiAgICAgaW50ICAgICBudW1fcmVhZDsKIAogICAgIHN3aXRjaCAoKGludCkob3B0YXJyLT50eXBlKSkgewotICAgICAgICBjYXNlIE9QVF9JTlRFR0VSOgotICAgICAgICAgICAgbnVtX3JlYWQgPSBzc2NhbmYoYXJndW1lbnQsIiVkIiwoaW50KilvcHRhcnItPmFyZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPUFRfSEVYOgotICAgICAgICAgICAgbnVtX3JlYWQgPSBzc2NhbmYoYXJndW1lbnQsIiV4IiwoaW50KilvcHRhcnItPmFyZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPUFRfT0NUQUw6Ci0gICAgICAgICAgICBudW1fcmVhZCA9IHNzY2FuZihhcmd1bWVudCwiJW8iLChpbnQqKW9wdGFyci0+YXJnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9QVF9VTlNJR05FRDoKLSAgICAgICAgICAgIG51bV9yZWFkID0gc3NjYW5mKGFyZ3VtZW50LCIldSIsKHVpbnQqKW9wdGFyci0+YXJnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9QVF9MSU5URUdFUjoKLSAgICAgICAgICAgIG51bV9yZWFkID0gc3NjYW5mKGFyZ3VtZW50LCIlbGQiLChsb25nKilvcHRhcnItPmFyZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPUFRfTEhFWDoKLSAgICAgICAgICAgIG51bV9yZWFkID0gc3NjYW5mKGFyZ3VtZW50LCIlbHgiLChsb25nKilvcHRhcnItPmFyZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPUFRfTE9DVEFMOgotICAgICAgICAgICAgbnVtX3JlYWQgPSBzc2NhbmYoYXJndW1lbnQsIiVsbyIsKGxvbmcqKW9wdGFyci0+YXJnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9QVF9MVU5TSUdORUQ6Ci0gICAgICAgICAgICBudW1fcmVhZCA9IHNzY2FuZihhcmd1bWVudCwiJWx1IiwodWxvbmcqKW9wdGFyci0+YXJnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9QVF9GTE9BVDoKLSAgICAgICAgICAgIG51bV9yZWFkID0gc3NjYW5mKGFyZ3VtZW50LCIlZiIsKGZsb2F0KilvcHRhcnItPmFyZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPUFRfRE9VQkxFOgotICAgICAgICAgICAgbnVtX3JlYWQgPSBzc2NhbmYoYXJndW1lbnQsIiVsZiIsKGRvdWJsZSopb3B0YXJyLT5hcmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT1BUX0xET1VCTEU6Ci0gICAgICAgICAgICBudW1fcmVhZCA9IHNzY2FuZihhcmd1bWVudCwiJUxmIiwobG9uZyBkb3VibGUqKW9wdGFyci0+YXJnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9QVF9TVFJJTkc6Ci0gICAgICAgICAgICBudW1fcmVhZCA9IDE7ICAgICAgICAgICAvKiBUaGlzIGFsd2F5cyB3b3JrcyAgICAqLwotICAgICAgICAgICAgKigoY2hhcioqKW9wdGFyci0+YXJnKSA9IGFyZ3VtZW50OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDsKLSAgICAgICAgfQorCWNhc2UgT1BUX0lOVEVHRVI6CisJICAgIG51bV9yZWFkID0gc3NjYW5mKGFyZ3VtZW50LCIlZCIsKGludCopb3B0YXJyLT5hcmcpOworCSAgICBicmVhazsKKwljYXNlIE9QVF9IRVg6CisJICAgIG51bV9yZWFkID0gc3NjYW5mKGFyZ3VtZW50LCIleCIsKGludCopb3B0YXJyLT5hcmcpOworCSAgICBicmVhazsKKwljYXNlIE9QVF9PQ1RBTDoKKwkgICAgbnVtX3JlYWQgPSBzc2NhbmYoYXJndW1lbnQsIiVvIiwoaW50KilvcHRhcnItPmFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgT1BUX1VOU0lHTkVEOgorCSAgICBudW1fcmVhZCA9IHNzY2FuZihhcmd1bWVudCwiJXUiLCh1aW50KilvcHRhcnItPmFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgT1BUX0xJTlRFR0VSOgorCSAgICBudW1fcmVhZCA9IHNzY2FuZihhcmd1bWVudCwiJWxkIiwobG9uZyopb3B0YXJyLT5hcmcpOworCSAgICBicmVhazsKKwljYXNlIE9QVF9MSEVYOgorCSAgICBudW1fcmVhZCA9IHNzY2FuZihhcmd1bWVudCwiJWx4IiwobG9uZyopb3B0YXJyLT5hcmcpOworCSAgICBicmVhazsKKwljYXNlIE9QVF9MT0NUQUw6CisJICAgIG51bV9yZWFkID0gc3NjYW5mKGFyZ3VtZW50LCIlbG8iLChsb25nKilvcHRhcnItPmFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgT1BUX0xVTlNJR05FRDoKKwkgICAgbnVtX3JlYWQgPSBzc2NhbmYoYXJndW1lbnQsIiVsdSIsKHVsb25nKilvcHRhcnItPmFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgT1BUX0ZMT0FUOgorCSAgICBudW1fcmVhZCA9IHNzY2FuZihhcmd1bWVudCwiJWYiLChmbG9hdCopb3B0YXJyLT5hcmcpOworCSAgICBicmVhazsKKwljYXNlIE9QVF9ET1VCTEU6CisJICAgIG51bV9yZWFkID0gc3NjYW5mKGFyZ3VtZW50LCIlbGYiLChkb3VibGUqKW9wdGFyci0+YXJnKTsKKwkgICAgYnJlYWs7CisJY2FzZSBPUFRfTERPVUJMRToKKwkgICAgbnVtX3JlYWQgPSBzc2NhbmYoYXJndW1lbnQsIiVMZiIsKGxvbmcgZG91YmxlKilvcHRhcnItPmFyZyk7CisJICAgIGJyZWFrOworCWNhc2UgT1BUX1NUUklORzoKKwkgICAgbnVtX3JlYWQgPSAxOyAgICAgICAgICAgLyogVGhpcyBhbHdheXMgd29ya3MgICAgKi8KKwkgICAgKigoY2hhcioqKW9wdGFyci0+YXJnKSA9IGFyZ3VtZW50OworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICByZXR1cm4gSU5WQUxJRDsKKwl9CiAKICAgICBpZiAobnVtX3JlYWQgPT0gMCkKLSAgICAgICAgcmV0dXJuIElOVkFMSUQ7CisJcmV0dXJuIElOVkFMSUQ7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gQUxMRE9ORTsKKwlyZXR1cm4gQUxMRE9ORTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI2MSw4ICsyNjEsOCBAQAogICAgIGludCBudW1fb3B0LAogICAgIE9wdGlvbiBvcHRhcnJbXSwKICAgICBpbnQgKCpkb19wYXJhbSkoCi0gICAgICAgIGNoYXIgKnBhcmFtLAotICAgICAgICBpbnQgbnVtKSkKKwljaGFyICpwYXJhbSwKKwlpbnQgbnVtKSkKIHsKICAgICBpbnQgICAgIGksb3B0OwogICAgIGNoYXIgICAgKmFyZ3VtZW50OwpAQCAtMjczLDUxICsyNzMsNTEgQEAKIAogICAgIHN0cmNweShjbWRzdHIsImhIPyIpOwogICAgIGZvciAoaSA9IDAsb3B0ID0gMzsgaSA8IG51bV9vcHQ7IGkrKyxvcHQrKykgewotICAgICAgICBjbWRzdHJbb3B0XSA9IG9wdGFycltpXS5vcHQ7Ci0gICAgICAgIGlmIChvcHRhcnJbaV0udHlwZSAhPSBPUFRfU1dJVENIKSB7Ci0gICAgICAgICAgICBjbWRzdHJbKytvcHRdID0gJzonOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJY21kc3RyW29wdF0gPSBvcHRhcnJbaV0ub3B0OworCWlmIChvcHRhcnJbaV0udHlwZSAhPSBPUFRfU1dJVENIKSB7CisJICAgIGNtZHN0clsrK29wdF0gPSAnOic7CisJICAgIH0KKwl9CiAgICAgY21kc3RyW29wdF0gPSAnXDAnOwogCiAgICAgZm9yICg7OykgewotICAgICAgICBvcHQgPSBnZXRjbWRvcHQoYXJnYyxhcmd2LGNtZHN0ciwmYXJndW1lbnQpOwotICAgICAgICBzd2l0Y2ggKG9wdCkgewotICAgICAgICAgICAgY2FzZSAnSCc6Ci0gICAgICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgIGNhc2UgJz8nOgotICAgICAgICAgICAgICAgIHJldHVybiBIRUxQOwotICAgICAgICAgICAgY2FzZSBBTExET05FOgotICAgICAgICAgICAgICAgIHJldHVybiBBTExET05FOwotICAgICAgICAgICAgY2FzZSBJTlZBTElEOgotICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEOwotICAgICAgICAgICAgY2FzZSBQQVJBTUVURVI6Ci0gICAgICAgICAgICAgICAgaWYgKGRvX3BhcmFtID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEOwotICAgICAgICAgICAgICAgIGlmIChkb19wYXJhbShhcmd2W25leHRhcmd2XSxwYXJhbV9udW0pID09IElOVkFMSUQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEOwotICAgICAgICAgICAgICAgIG5leHRhcmd2Kys7Ci0gICAgICAgICAgICAgICAgcGFyYW1fbnVtKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgorCW9wdCA9IGdldGNtZG9wdChhcmdjLGFyZ3YsY21kc3RyLCZhcmd1bWVudCk7CisJc3dpdGNoIChvcHQpIHsKKwkgICAgY2FzZSAnSCc6CisJICAgIGNhc2UgJ2gnOgorCSAgICBjYXNlICc/JzoKKwkJcmV0dXJuIEhFTFA7CisJICAgIGNhc2UgQUxMRE9ORToKKwkJcmV0dXJuIEFMTERPTkU7CisJICAgIGNhc2UgSU5WQUxJRDoKKwkJcmV0dXJuIElOVkFMSUQ7CisJICAgIGNhc2UgUEFSQU1FVEVSOgorCQlpZiAoZG9fcGFyYW0gPT0gTlVMTCkKKwkJICAgIHJldHVybiBJTlZBTElEOworCQlpZiAoZG9fcGFyYW0oYXJndltuZXh0YXJndl0scGFyYW1fbnVtKSA9PSBJTlZBTElEKQorCQkgICAgcmV0dXJuIElOVkFMSUQ7CisJCW5leHRhcmd2Kys7CisJCXBhcmFtX251bSsrOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKIAotICAgICAgICAgICAgICAgIC8qIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBpbiB0aGUgb3B0aW9uIGFycmF5LiBXZSBhcmUKLSAgICAgICAgICAgICAgICAgKiBndWFyYW50ZWVkIHRvIGZpbmQgaXQuCi0gICAgICAgICAgICAgICAgICovCisJCS8qIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBpbiB0aGUgb3B0aW9uIGFycmF5LiBXZSBhcmUKKwkJICogZ3VhcmFudGVlZCB0byBmaW5kIGl0LgorCQkgKi8KIAotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fb3B0OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGFycltpXS5vcHQgPT0gb3B0KQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAob3B0YXJyW2ldLnR5cGUgPT0gT1BUX1NXSVRDSCkKLSAgICAgICAgICAgICAgICAgICAgKigoaWJvb2wqKW9wdGFycltpXS5hcmcpID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlX29wdGlvbigmb3B0YXJyW2ldLGFyZ3VtZW50KSA9PSBJTlZBTElEKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtX29wdDsgaSsrKSB7CisJCSAgICBpZiAob3B0YXJyW2ldLm9wdCA9PSBvcHQpCisJCQlicmVhazsKKwkJICAgIH0KKwkJaWYgKG9wdGFycltpXS50eXBlID09IE9QVF9TV0lUQ0gpCisJCSAgICAqKChpYm9vbCopb3B0YXJyW2ldLmFyZykgPSB0cnVlOworCQllbHNlIHsKKwkJICAgIGlmIChwYXJzZV9vcHRpb24oJm9wdGFycltpXSxhcmd1bWVudCkgPT0gSU5WQUxJRCkKKwkJCXJldHVybiBJTlZBTElEOworCQkgICAgfQorCQlicmVhazsKKwkgICAgfQorCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM0MCwxMSArMzQwLDExIEBACiAgICAgaW50ICAgICBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9vcHQ7IGkrKykgewotICAgICAgICBpZiAob3B0YXJyW2ldLnR5cGUgPT0gT1BUX1NXSVRDSCkKLSAgICAgICAgICAgIHByaW50ZigiICAtJWMgICAgICAgJXNcbiIsb3B0YXJyW2ldLm9wdCxvcHRhcnJbaV0uZGVzYyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiICAtJWM8YXJnPiAgJXNcbiIsb3B0YXJyW2ldLm9wdCxvcHRhcnJbaV0uZGVzYyk7Ci0gICAgICAgIH0KKwlpZiAob3B0YXJyW2ldLnR5cGUgPT0gT1BUX1NXSVRDSCkKKwkgICAgcHJpbnRmKCIgIC0lYyAgICAgICAlc1xuIixvcHRhcnJbaV0ub3B0LG9wdGFycltpXS5kZXNjKTsKKwllbHNlCisJICAgIHByaW50ZigiICAtJWM8YXJnPiAgJXNcbiIsb3B0YXJyW2ldLm9wdCxvcHRhcnJbaV0uZGVzYyk7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzgyLDQ1ICszODIsNDUgQEAKICAgICBhcmd2W2FyZ2MrK10gPSBmaWxlbmFtZTsKICAgICBjbWRMaW5lID0gc3RybmNweShzdHIsIGNtZExpbmUsIHNpemVvZihzdHIpLTEpOwogICAgIHdoaWxlICgqY21kTGluZSkgewotICAgICAgICBzd2l0Y2ggKCpjbWRMaW5lKSB7Ci0gICAgICAgICAgICBjYXNlICciJyA6Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZXb3JkICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluUXVvdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9TdHJpcCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY21kTGluZSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmd2IFthcmdjKytdID0gcHJldldvcmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2V29yZCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vU3RyaXAgPSBUUlVFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW5RdW90ZSA9ICFpblF1b3RlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnICcgOgotICAgICAgICAgICAgY2FzZSAnXHQnIDoKLSAgICAgICAgICAgICAgICBpZiAoIWluUXVvdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZXb3JkICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICpjbWRMaW5lID0gJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3YgW2FyZ2MrK10gPSBwcmV2V29yZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZXb3JkID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vU3RyaXAgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZXb3JkID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHByZXZXb3JkID0gY21kTGluZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIGlmIChhcmdjID49IG1heEFyZ3YgLSAxKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNtZExpbmUrKzsKLSAgICAgICAgfQorCXN3aXRjaCAoKmNtZExpbmUpIHsKKwkgICAgY2FzZSAnIicgOgorCQlpZiAocHJldldvcmQgIT0gTlVMTCkgeworCQkgICAgaWYgKGluUXVvdGUpIHsKKwkJCWlmICghbm9TdHJpcCkKKwkJCSAgICAqY21kTGluZSA9ICdcMCc7CisJCQlhcmd2IFthcmdjKytdID0gcHJldldvcmQ7CisJCQlwcmV2V29yZCA9IE5VTEw7CisJCQl9CisJCSAgICBlbHNlCisJCQlub1N0cmlwID0gVFJVRTsKKwkJICAgIH0KKwkJaW5RdW90ZSA9ICFpblF1b3RlOworCQlicmVhazsKKwkgICAgY2FzZSAnICcgOgorCSAgICBjYXNlICdcdCcgOgorCQlpZiAoIWluUXVvdGUpIHsKKwkJICAgIGlmIChwcmV2V29yZCAhPSBOVUxMKSB7CisJCQkqY21kTGluZSA9ICdcMCc7CisJCQlhcmd2IFthcmdjKytdID0gcHJldldvcmQ7CisJCQlwcmV2V29yZCA9IE5VTEw7CisJCQlub1N0cmlwID0gRkFMU0U7CisJCQl9CisJCSAgICB9CisJCWJyZWFrOworCSAgICBkZWZhdWx0IDoKKwkJaWYgKHByZXZXb3JkID09IE5VTEwpCisJCSAgICBwcmV2V29yZCA9IGNtZExpbmU7CisJCWJyZWFrOworCQl9CisJaWYgKGFyZ2MgPj0gbWF4QXJndiAtIDEpCisJICAgIGJyZWFrOworCWNtZExpbmUrKzsKKwl9CiAKICAgICBpZiAoKHByZXZXb3JkICE9IE5VTEwgfHwgKGluUXVvdGUgJiYgcHJldldvcmQgIT0gTlVMTCkpICYmIGFyZ2MgPCBtYXhBcmd2IC0gMSkgewotICAgICAgICAqY21kTGluZSA9ICdcMCc7Ci0gICAgICAgIGFyZ3YgW2FyZ2MrK10gPSBwcmV2V29yZDsKLSAgICAgICAgfQorCSpjbWRMaW5lID0gJ1wwJzsKKwlhcmd2IFthcmdjKytdID0gcHJldldvcmQ7CisJfQogICAgIGFyZ3ZbYXJnY10gPSBOVUxMOwogCiAgICAgLyogUmV0dXJuIHVwZGF0ZWQgcGFyYW1ldGVycyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhYmVvcy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhYmVvcy5jCmluZGV4IDFkOGE1NDMuLmE5MzRiZDEgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYWJlb3MuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2FiZW9zLmMKQEAgLTcwLDEwICs3MCwxMCBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIFBNX2ltcG9ydHMgKiBOQVBJIEdBX2dldFN5c3RlbVBNSW1wb3J0cyh2b2lkKQogewotICAgIC8vIFRPRE86IFdlIG1heSB2ZXJ5IHdlbGwgd2FudCB0byBwcm92aWRlIGEgc3lzdGVtIHNoYXJlZCBsaWJyYXJ5Ci0gICAgLy8gICAgICAgdGhhdCBlcG9ydHMgdGhlIFBNIGZ1bmN0aW9ucyByZXF1aXJlZCBieSB0aGUgTnVjbGV1cyBsaWJyYXJ5Ci0gICAgLy8gICAgICAgZm9yIEJlT1MgaGVyZS4gVGhhdCB3aWxsIGVsaW1pbmF0ZSBmYXRhbCBlcnJvcnMgbG9hZGluZyBuZXcKLSAgICAvLyAgICAgICBkcml2ZXJzIG9uIEJlT1MhCisgICAgLyogVE9ETzogV2UgbWF5IHZlcnkgd2VsbCB3YW50IHRvIHByb3ZpZGUgYSBzeXN0ZW0gc2hhcmVkIGxpYnJhcnkgKi8KKyAgICAvKiAgICAgICB0aGF0IGVwb3J0cyB0aGUgUE0gZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IHRoZSBOdWNsZXVzIGxpYnJhcnkgKi8KKyAgICAvKiAgICAgICBmb3IgQmVPUyBoZXJlLiBUaGF0IHdpbGwgZWxpbWluYXRlIGZhdGFsIGVycm9ycyBsb2FkaW5nIG5ldyAqLworICAgIC8qICAgICAgIGRyaXZlcnMgb24gQmVPUyEgKi8KICAgICByZXR1cm4gJl9QTV9pbXBvcnRzOwogfQogCkBAIC0xMjQsNyArMTI0LDcgQEAKIGlib29sIE5BUEkgR0FfVGltZXJJbml0KHZvaWQpCiB7CiAgICAgaWYgKF9HQV9oYXZlQ1BVSUQoKSAmJiAoX0dBX2dldENQVUlERmVhdHVyZXMoKSAmIENQVV9IYXZlUkRUU0MpICE9IDApCi0gICAgICAgIGhhdmVSRFRTQyA9IHRydWU7CisJaGF2ZVJEVFNDID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgICBHQV9sYXJnZUludGVnZXIgKnZhbHVlKQogewogICAgIGlmIChoYXZlUkRUU0MpCi0gICAgICAgIF9HQV9yZWFkVGltZVN0YW1wKHZhbHVlKTsKKwlfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHQ7Ci0gICAgICAgIGdldHRpbWVvZmRheSgmdCwgTlVMTCk7Ci0gICAgICAgIHZhbHVlLT5sb3cgPSB0LnR2X3NlYyoxMDAwMDAwICsgdC50dl91c2VjOwotICAgICAgICB2YWx1ZS0+aGlnaCA9IDA7Ci0gICAgICAgIH0KKwlzdHJ1Y3QgdGltZXZhbCB0OworCWdldHRpbWVvZmRheSgmdCwgTlVMTCk7CisJdmFsdWUtPmxvdyA9IHQudHZfc2VjKjEwMDAwMDAgKyB0LnR2X3VzZWM7CisJdmFsdWUtPmhpZ2ggPSAwOworCX0KIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYWRvcy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhZG9zLmMKaW5kZXggNGM5MGU4MC4uZDJiZTc3NiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhZG9zLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhZG9zLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogaWJvb2wgTkFQSSBHQV9UaW1lckluaXQodm9pZCkKIHsKICAgICBpZiAoX0dBX2hhdmVDUFVJRCgpICYmIChfR0FfZ2V0Q1BVSURGZWF0dXJlcygpICYgQ1BVX0hhdmVSRFRTQykgIT0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisJcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMzMsNCArMTMzLDMgQEAKIHsKICAgICBfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYWxpYi5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhbGliLmMKaW5kZXggN2MxZmJlMy4uZjJlYWNjMyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhbGliLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhbGliLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiAgICAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhbHJlYWR5IGxvYWRlZCB0aGUgZHJpdmVyICovCiAgICAgaWYgKGxvYWRlZCkKLSAgICAgICAgcmV0dXJuIHRydWU7CisJcmV0dXJuIHRydWU7CiAgICAgUE1faW5pdCgpOwogCiAgICAgLyogRmlyc3QgdHJ5IHRvIHNlZSBpZiB3ZSBjYW4gZmluZCB0aGUgc3lzdGVtIHdpZGUgc2hhcmVkIGV4cG9ydHMKQEAgLTExNiwzMyArMTE2LDMzIEBACiAgICAgICovCiAgICAgX19HQV9leHBvcnRzLmR3U2l6ZSA9IHNpemVvZihfX0dBX2V4cG9ydHMpOwogICAgIGlmIChHQV9nZXRTaGFyZWRFeHBvcnRzKCZfX0dBX2V4cG9ydHMsc2hhcmVkKSkKLSAgICAgICAgcmV0dXJuIGxvYWRlZCA9IHRydWU7CisJcmV0dXJuIGxvYWRlZCA9IHRydWU7CiAKICAgICAvKiBPcGVuIHRoZSBCUEQgZmlsZSAqLwogICAgIGlmICghUE1fZmluZEJQRChETExfTkFNRSxicGRwYXRoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBzdHJjcHkoZmlsZW5hbWUsYnBkcGF0aCk7CiAgICAgc3RyY2F0KGZpbGVuYW1lLERMTF9OQU1FKTsKICAgICBpZiAoKGhNb2RCUEQgPSBQRV9sb2FkTGlicmFyeShmaWxlbmFtZSxzaGFyZWQpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogICAgIGlmICgoR0FfaW5pdExpYnJhcnkgPSAoR0FfaW5pdExpYnJhcnlfdClQRV9nZXRQcm9jQWRkcmVzcyhoTW9kQlBELCJfR0FfaW5pdExpYnJhcnkiKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBicGRwYXRoW3N0cmxlbihicGRwYXRoKS0xXSA9IDA7CiAgICAgaWYgKHN0cmNtcChicGRwYXRoLFBNX2dldE51Y2xldXNQYXRoKCkpID09IDApCi0gICAgICAgIHN0cmNweShicGRwYXRoLFBNX2dldE51Y2xldXNDb25maWdQYXRoKCkpOworCXN0cmNweShicGRwYXRoLFBNX2dldE51Y2xldXNDb25maWdQYXRoKCkpOwogICAgIGVsc2UgewotICAgICAgICBQTV9iYWNrc2xhc2goYnBkcGF0aCk7Ci0gICAgICAgIHN0cmNhdChicGRwYXRoLCJjb25maWciKTsKLSAgICAgICAgfQorCVBNX2JhY2tzbGFzaChicGRwYXRoKTsKKwlzdHJjYXQoYnBkcGF0aCwiY29uZmlnIik7CisJfQogICAgIGlmICgoZ2FFeHAgPSBHQV9pbml0TGlicmFyeShzaGFyZWQsYnBkcGF0aCxmaWxlbmFtZSxHQV9nZXRTeXN0ZW1QTUltcG9ydHMoKSwmX05faW1wb3J0cywmX0dBX2ltcG9ydHMpKSA9PSBOVUxMKQotICAgICAgICBQTV9mYXRhbEVycm9yKCJHQV9pbml0TGlicmFyeSBmYWlsZWQhXG4iKTsKKwlQTV9mYXRhbEVycm9yKCJHQV9pbml0TGlicmFyeSBmYWlsZWQhXG4iKTsKIAogICAgIC8qIEluaXRpYWxpemUgYWxsIGRlZmF1bHQgaW1wb3J0cyB0byBwb2ludCB0byBmYXRhbCBlcnJvciBoYW5kbGVyCiAgICAgICogZm9yIHVwd2FyZHMgY29tcGF0aWJpbGl0eSwgYW5kIGNvcHkgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucy4KICAgICAgKi8KICAgICBtYXggPSBzaXplb2YoX19HQV9leHBvcnRzKS9zaXplb2YoR0FfaW5pdExpYnJhcnlfdCk7CiAgICAgZm9yIChpID0gMCxwID0gKHVsb25nKikmX19HQV9leHBvcnRzOyBpIDwgbWF4OyBpKyspCi0gICAgICAgICpwKysgPSAodWxvbmcpX0dBX2ZhdGFsRXJyb3JIYW5kbGVyOworCSpwKysgPSAodWxvbmcpX0dBX2ZhdGFsRXJyb3JIYW5kbGVyOwogICAgIG1lbWNweSgmX19HQV9leHBvcnRzLGdhRXhwLE1JTihzaXplb2YoX19HQV9leHBvcnRzKSxnYUV4cC0+ZHdTaXplKSk7CiAgICAgbG9hZGVkID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogaW50IE5BUEkgR0Ffc3RhdHVzKHZvaWQpCiB7CiAgICAgaWYgKCFsb2FkZWQpCi0gICAgICAgIHJldHVybiBuRHJpdmVyTm90Rm91bmQ7CisJcmV0dXJuIG5Ecml2ZXJOb3RGb3VuZDsKICAgICByZXR1cm4gX19HQV9leHBvcnRzLkdBX3N0YXR1cygpOwogfQogCkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICBOX2ludDMyIHN0YXR1cykKIHsKICAgICBpZiAoIWxvYWRlZCkKLSAgICAgICAgcmV0dXJuICJVbmFibGUgdG8gbG9hZCBOdWNsZXVzIGRldmljZSBkcml2ZXIhIjsKKwlyZXR1cm4gIlVuYWJsZSB0byBsb2FkIE51Y2xldXMgZGV2aWNlIGRyaXZlciEiOwogICAgIHJldHVybiBfX0dBX2V4cG9ydHMuR0FfZXJyb3JNc2coc3RhdHVzKTsKIH0KIApAQCAtMTc0LDcgKzE3NCw3IEBACiBpbnQgTkFQSSBHQV9nZXREYXlzTGVmdChOX2ludDMyIHNoYXJlZCkKIHsKICAgICBpZiAoIUxvYWREcml2ZXIoc2hhcmVkKSkKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICAgICByZXR1cm4gX19HQV9leHBvcnRzLkdBX2dldERheXNMZWZ0KHNoYXJlZCk7CiB9CiAKQEAgLTE4Miw3ICsxODIsNyBAQAogaW50IE5BUEkgR0FfcmVnaXN0ZXJMaWNlbnNlKHVjaGFyICpsaWNlbnNlLE5faW50MzIgc2hhcmVkKQogewogICAgIGlmICghTG9hZERyaXZlcihzaGFyZWQpKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gX19HQV9leHBvcnRzLkdBX3JlZ2lzdGVyTGljZW5zZShsaWNlbnNlLHNoYXJlZCk7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogaWJvb2wgTkFQSSBHQV9sb2FkSW5HVUkoTl9pbnQzMiBzaGFyZWQpCiB7CiAgICAgaWYgKCFMb2FkRHJpdmVyKHNoYXJlZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIF9fR0FfZXhwb3J0cy5HQV9sb2FkSW5HVUkoc2hhcmVkKTsKIH0KIApAQCAtMTk4LDcgKzE5OCw3IEBACiBpbnQgTkFQSSBHQV9lbnVtZXJhdGVEZXZpY2VzKE5faW50MzIgc2hhcmVkKQogewogICAgIGlmICghTG9hZERyaXZlcihzaGFyZWQpKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gX19HQV9leHBvcnRzLkdBX2VudW1lcmF0ZURldmljZXMoc2hhcmVkKTsKIH0KIApAQCAtMjA2LDcgKzIwNiw3IEBACiBHQV9kZXZDdHggKiBOQVBJIEdBX2xvYWREcml2ZXIoTl9pbnQzMiBkZXZpY2VJbmRleCxOX2ludDMyIHNoYXJlZCkKIHsKICAgICBpZiAoIUxvYWREcml2ZXIoc2hhcmVkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIF9fR0FfZXhwb3J0cy5HQV9sb2FkRHJpdmVyKGRldmljZUluZGV4LHNoYXJlZCk7CiB9CiAKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgIGlib29sIHNoYXJlZCkKIHsKICAgICBpZiAoTG9hZERyaXZlcihzaGFyZWQpKQotICAgICAgICBfX0dBX2V4cG9ydHMuR0FfZ2V0R2xvYmFsT3B0aW9ucyhvcHRpb25zLHNoYXJlZCk7CisJX19HQV9leHBvcnRzLkdBX2dldEdsb2JhbE9wdGlvbnMob3B0aW9ucyxzaGFyZWQpOwogfQogCiAvKiB7c2VjcmV0fSAqLwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgaWJvb2wgc2hhcmVkKQogewogICAgIGlmICghTG9hZERyaXZlcihzaGFyZWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKICAgICByZXR1cm4gX19HQV9leHBvcnRzLkdBX2xvYWRMaWJyYXJ5KHN6QlBETmFtZSxzaXplLHNoYXJlZCk7CiB9CiAKQEAgLTIzNiw3ICsyMzYsNyBAQAogewogICAgIC8qIEJhaWwgZm9yIG9sZGVyIGRyaXZlcnMgdGhhdCBkaWRuJ3QgZXhwb3J0IHRoaXMgZnVuY3Rpb24hICovCiAgICAgaWYgKCFfX0dBX2V4cG9ydHMuR0FfZ2V0Q3VycmVudERyaXZlcikKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIF9fR0FfZXhwb3J0cy5HQV9nZXRDdXJyZW50RHJpdmVyKGRldmljZUluZGV4KTsKIH0KIApAQCAtMjQ2LDcgKzI0Niw3IEBACiB7CiAgICAgLyogQmFpbCBmb3Igb2xkZXIgZHJpdmVycyB0aGF0IGRpZG4ndCBleHBvcnQgdGhpcyBmdW5jdGlvbiEgKi8KICAgICBpZiAoIV9fR0FfZXhwb3J0cy5HQV9nZXRDdXJyZW50UmVmMmQpCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogICAgIHJldHVybiBfX0dBX2V4cG9ydHMuR0FfZ2V0Q3VycmVudFJlZjJkKGRldmljZUluZGV4KTsKIH0KIApAQCAtMjU0LDcgKzI1NCw3IEBACiBpbnQgTkFQSSBHQV9pc09FTVZlcnNpb24oaWJvb2wgc2hhcmVkKQogewogICAgIGlmICghTG9hZERyaXZlcihzaGFyZWQpKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gX19HQV9leHBvcnRzLkdBX2lzT0VNVmVyc2lvbihzaGFyZWQpOwogfQogCkBAIC0yNjIsOCArMjYyLDcgQEAKIE5fdWludDMyICogTkFQSSBHQV9nZXRMaWNlbnNlZERldmljZXMoaWJvb2wgc2hhcmVkKQogewogICAgIGlmICghTG9hZERyaXZlcihzaGFyZWQpKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gX19HQV9leHBvcnRzLkdBX2dldExpY2Vuc2VkRGV2aWNlcyhzaGFyZWQpOwogfQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYWxpbnV4LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2FsaW51eC5jCmluZGV4IGNiZDlkN2YuLjQ3ZTRlODUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYWxpbnV4LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhbGludXguYwpAQCAtNzIsMTAgKzcyLDEwIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogUE1faW1wb3J0cyAqIE5BUEkgR0FfZ2V0U3lzdGVtUE1JbXBvcnRzKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogV2UgbWF5IHZlcnkgd2VsbCB3YW50IHRvIHByb3ZpZGUgYSBzeXN0ZW0gc2hhcmVkIGxpYnJhcnkKLSAgICAvLyAgICAgICB0aGF0IGVwb3J0cyB0aGUgUE0gZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IHRoZSBOdWNsZXVzIGxpYnJhcnkKLSAgICAvLyAgICAgICBmb3IgTGludXggaGVyZS4gVGhhdCB3aWxsIGVsaW1pbmF0ZSBmYXRhbCBlcnJvcnMgbG9hZGluZyBuZXcKLSAgICAvLyAgICAgICBkcml2ZXJzIG9uIExpbnV4IQorICAgIC8qIFRPRE86IFdlIG1heSB2ZXJ5IHdlbGwgd2FudCB0byBwcm92aWRlIGEgc3lzdGVtIHNoYXJlZCBsaWJyYXJ5ICovCisgICAgLyogICAgICAgdGhhdCBlcG9ydHMgdGhlIFBNIGZ1bmN0aW9ucyByZXF1aXJlZCBieSB0aGUgTnVjbGV1cyBsaWJyYXJ5ICovCisgICAgLyogICAgICAgZm9yIExpbnV4IGhlcmUuIFRoYXQgd2lsbCBlbGltaW5hdGUgZmF0YWwgZXJyb3JzIGxvYWRpbmcgbmV3ICovCisgICAgLyogICAgICAgZHJpdmVycyBvbiBMaW51eCEgKi8KICAgICByZXR1cm4gJl9QTV9pbXBvcnRzOwogfQogCkBAIC0xMjYsNyArMTI2LDcgQEAKIGlib29sIE5BUEkgR0FfVGltZXJJbml0KHZvaWQpCiB7CiAgICAgaWYgKF9HQV9oYXZlQ1BVSUQoKSAmJiAoX0dBX2dldENQVUlERmVhdHVyZXMoKSAmIENQVV9IYXZlUkRUU0MpICE9IDApCi0gICAgICAgIGhhdmVSRFRTQyA9IHRydWU7CisJaGF2ZVJEVFNDID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTM4LDExICsxMzgsMTEgQEAKICAgICBHQV9sYXJnZUludGVnZXIgKnZhbHVlKQogewogICAgIGlmIChoYXZlUkRUU0MpCi0gICAgICAgIF9HQV9yZWFkVGltZVN0YW1wKHZhbHVlKTsKKwlfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHQ7Ci0gICAgICAgIGdldHRpbWVvZmRheSgmdCwgTlVMTCk7Ci0gICAgICAgIHZhbHVlLT5sb3cgPSB0LnR2X3NlYyoxMDAwMDAwICsgdC50dl91c2VjOwotICAgICAgICB2YWx1ZS0+aGlnaCA9IDA7Ci0gICAgICAgIH0KKwlzdHJ1Y3QgdGltZXZhbCB0OworCWdldHRpbWVvZmRheSgmdCwgTlVMTCk7CisJdmFsdWUtPmxvdyA9IHQudHZfc2VjKjEwMDAwMDAgKyB0LnR2X3VzZWM7CisJdmFsdWUtPmhpZ2ggPSAwOworCX0KIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYW50ZHJ2LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2FudGRydi5jCmluZGV4IGQ5OTQ0YzUuLjA1MGY3MzcgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYW50ZHJ2LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhbnRkcnYuYwpAQCAtMTE3LDggKzExNyw4IEBACiBpYm9vbCBOQVBJIEdBX1RpbWVySW5pdCh2b2lkKQogewogICAgIGlmIChfR0FfaGF2ZUNQVUlEKCkgJiYgKF9HQV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVJEVFNDKSAhPSAwKSB7Ci0gICAgICAgIGhhdmVSRFRTQyA9IHRydWU7Ci0gICAgICAgIH0KKwloYXZlUkRUU0MgPSB0cnVlOworCX0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTMwLDggKzEzMCw3IEBACiAgICAgR0FfbGFyZ2VJbnRlZ2VyICp2YWx1ZSkKIHsKICAgICBpZiAoaGF2ZVJEVFNDKQotICAgICAgICBfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CisJX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgS2VRdWVyeVN5c3RlbVRpbWUoKExBUkdFX0lOVEVHRVIqKXZhbHVlKTsKKwlLZVF1ZXJ5U3lzdGVtVGltZSgoTEFSR0VfSU5URUdFUiopdmFsdWUpOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2FvczIuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYW9zMi5jCmluZGV4IDgyMmU5M2MuLjI2ZTY1MDMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYW9zMi5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYW9zMi5jCkBAIC04MywxMSArODMsMTEgQEAKICAgICAgKiBjYW4ndCBmYWlsIGhlcmUuCiAgICAgICovCiAgICAgRG9zT3BlbihQTUhFTFBfTkFNRSwmaFNEREhlbHAsJnJlc3VsdFswXSwwLDAsCi0gICAgICAgICAgICBGSUxFX09QRU4sIE9QRU5fU0hBUkVfREVOWU5PTkUgfCBPUEVOX0FDQ0VTU19SRUFEV1JJVEUsCi0gICAgICAgICAgICBOVUxMKTsKKwkgICAgRklMRV9PUEVOLCBPUEVOX1NIQVJFX0RFTllOT05FIHwgT1BFTl9BQ0NFU1NfUkVBRFdSSVRFLAorCSAgICBOVUxMKTsKICAgICBEb3NEZXZJT0N0bChoU0RESGVscCxQTUhFTFBfSU9DVEwsZnVuYywKLSAgICAgICAgICAgICAmcGFybXMsIGluTGVuID0gc2l6ZW9mKHBhcm1zKSwgJmluTGVuLAotICAgICAgICAgICAgJnJlc3VsdCwgb3V0TGVuID0gc2l6ZW9mKHJlc3VsdCksICZvdXRMZW4pOworCSAgICAgJnBhcm1zLCBpbkxlbiA9IHNpemVvZihwYXJtcyksICZpbkxlbiwKKwkgICAgJnJlc3VsdCwgb3V0TGVuID0gc2l6ZW9mKHJlc3VsdCksICZvdXRMZW4pOwogICAgIERvc0Nsb3NlKGhTRERIZWxwKTsKICAgICByZXR1cm4gcmVzdWx0WzBdOwogfQpAQCAtMTQ3LDE3ICsxNDcsMTcgQEAKICAgICAvKiBJbml0aWFsaXNlIHRoZSBQTSBsaWJyYXJ5IGFuZCBjb25uZWN0IHRvIG91ciBydW50aW1lIERMTCdzICovCiAgICAgUE1faW5pdCgpOwogICAgIGlmIChDYWxsU0RESGVscChQTUhFTFBfR0VUU0hBUkVERVhQKSAhPSAwKSB7Ci0gICAgICAgIC8qIFdlIGhhdmUgZm91bmQgdGhlIHNoYXJlZCBOdWNsZXVzIGV4cG9ydHMuIEJlY2F1c2Ugbm90IGFsbCBwcm9jZXNzZXMKLSAgICAgICAgICogbWFwIHRvIFNERFBNSS5ETEwsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgY29ubmVjdCB0byB0aGlzCi0gICAgICAgICAqIERMTCBzbyB0aGF0IGl0IGdldHMgbWFwcGVkIGludG8gb3VyIGFkZHJlc3Mgc3BhY2UgKHRoYXQgaXMKLSAgICAgICAgICogd2hlcmUgdGhlIHNoYXJlZCBOdWNsZXVzIGxvYWRlciBjb2RlIGlzIGxvY2F0ZWQpLiBTaW1wbHkgZG9pbmcgYQotICAgICAgICAgKiBEb3NMb2FkTW9kdWxlIG9uIGl0IGlzIGVub3VnaCBmb3IgdGhpcy4KLSAgICAgICAgICovCi0gICAgICAgIERvc0xvYWRNb2R1bGUoKFBTWilidWYsc2l6ZW9mKGJ1ZiksKFBTWikiU0REUE1JLkRMTCIsJmhNb2RTRERQTUkpOwotICAgICAgICBleHAgPSAoR0FfZXhwb3J0cyopcmVzdWx0WzBdOwotICAgICAgICBtZW1jcHkoZ2FFeHAsZXhwLE1JTihnYUV4cC0+ZHdTaXplLGV4cC0+ZHdTaXplKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisJLyogV2UgaGF2ZSBmb3VuZCB0aGUgc2hhcmVkIE51Y2xldXMgZXhwb3J0cy4gQmVjYXVzZSBub3QgYWxsIHByb2Nlc3NlcworCSAqIG1hcCB0byBTRERQTUkuRExMLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIGNvbm5lY3QgdG8gdGhpcworCSAqIERMTCBzbyB0aGF0IGl0IGdldHMgbWFwcGVkIGludG8gb3VyIGFkZHJlc3Mgc3BhY2UgKHRoYXQgaXMKKwkgKiB3aGVyZSB0aGUgc2hhcmVkIE51Y2xldXMgbG9hZGVyIGNvZGUgaXMgbG9jYXRlZCkuIFNpbXBseSBkb2luZyBhCisJICogRG9zTG9hZE1vZHVsZSBvbiBpdCBpcyBlbm91Z2ggZm9yIHRoaXMuCisJICovCisJRG9zTG9hZE1vZHVsZSgoUFNaKWJ1ZixzaXplb2YoYnVmKSwoUFNaKSJTRERQTUkuRExMIiwmaE1vZFNERFBNSSk7CisJZXhwID0gKEdBX2V4cG9ydHMqKXJlc3VsdFswXTsKKwltZW1jcHkoZ2FFeHAsZXhwLE1JTihnYUV4cC0+ZHdTaXplLGV4cC0+ZHdTaXplKSk7CisJcmV0dXJuIHRydWU7CisJfQogI2VuZGlmCiAgICAgKHZvaWQpc2hhcmVkOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogaWJvb2wgTkFQSSBHQV9UaW1lckluaXQodm9pZCkKIHsKICAgICBpZiAoX0dBX2hhdmVDUFVJRCgpICYmIChfR0FfZ2V0Q1BVSURGZWF0dXJlcygpICYgQ1BVX0hhdmVSRFRTQykgIT0gMCkKLSAgICAgICAgaGF2ZVJEVFNDID0gdHJ1ZTsKKwloYXZlUkRUU0MgPSB0cnVlOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMDksOSArMjA5LDkgQEAKICAgICBHQV9sYXJnZUludGVnZXIgKnZhbHVlKQogewogICAgIGlmIChoYXZlUkRUU0MpCi0gICAgICAgIF9HQV9yZWFkVGltZVN0YW1wKHZhbHVlKTsKKwlfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBEb3NUbXJRdWVyeVRpbWUoKFFXT1JEKil2YWx1ZSk7CisJRG9zVG1yUXVlcnlUaW1lKChRV09SRCopdmFsdWUpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhcW54LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2FxbnguYwppbmRleCAwODQ2Y2NjLi41MjVkNjYyIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2FxbnguYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2FxbnguYwpAQCAtNzIsMTAgKzcyLDEwIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogUE1faW1wb3J0cyAqIE5BUEkgR0FfZ2V0U3lzdGVtUE1JbXBvcnRzKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogV2UgbWF5IHZlcnkgd2VsbCB3YW50IHRvIHByb3ZpZGUgYSBzeXN0ZW0gc2hhcmVkIGxpYnJhcnkKLSAgICAvLyAgICAgICB0aGF0IGVwb3J0cyB0aGUgUE0gZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IHRoZSBOdWNsZXVzIGxpYnJhcnkKLSAgICAvLyAgICAgICBmb3IgUU5YIGhlcmUuIFRoYXQgd2lsbCBlbGltaW5hdGUgZmF0YWwgZXJyb3JzIGxvYWRpbmcgbmV3Ci0gICAgLy8gICAgICAgZHJpdmVycyBvbiBRTlghCisgICAgLyogVE9ETzogV2UgbWF5IHZlcnkgd2VsbCB3YW50IHRvIHByb3ZpZGUgYSBzeXN0ZW0gc2hhcmVkIGxpYnJhcnkgKi8KKyAgICAvKiAgICAgICB0aGF0IGVwb3J0cyB0aGUgUE0gZnVuY3Rpb25zIHJlcXVpcmVkIGJ5IHRoZSBOdWNsZXVzIGxpYnJhcnkgKi8KKyAgICAvKiAgICAgICBmb3IgUU5YIGhlcmUuIFRoYXQgd2lsbCBlbGltaW5hdGUgZmF0YWwgZXJyb3JzIGxvYWRpbmcgbmV3ICovCisgICAgLyogICAgICAgZHJpdmVycyBvbiBRTlghICovCiAgICAgcmV0dXJuICZfUE1faW1wb3J0czsKIH0KIApAQCAtMTI2LDcgKzEyNiw3IEBACiBpYm9vbCBOQVBJIEdBX1RpbWVySW5pdCh2b2lkKQogewogICAgIGlmIChfR0FfaGF2ZUNQVUlEKCkgJiYgKF9HQV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVJEVFNDKSAhPSAwKQotICAgICAgICBoYXZlUkRUU0MgPSB0cnVlOworCWhhdmVSRFRTQyA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzOCwxMiArMTM4LDEyIEBACiAgICAgR0FfbGFyZ2VJbnRlZ2VyICp2YWx1ZSkKIHsKICAgICBpZiAoaGF2ZVJEVFNDKQotICAgICAgICBfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CisJX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOwogICAgIGVsc2UgewotICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisJc3RydWN0IHRpbWVzcGVjIHRzOwogCi0gICAgICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cyk7Ci0gICAgICAgIHZhbHVlLT5sb3cgPSAodHMudHZfbnNlYyAvIDEwMDAgKyB0cy50dl9zZWMgKiAxMDAwMDAwKTsKLSAgICAgICAgdmFsdWUtPmhpZ2ggPSAwOwotICAgICAgICB9CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKTsKKwl2YWx1ZS0+bG93ID0gKHRzLnR2X25zZWMgLyAxMDAwICsgdHMudHZfc2VjICogMTAwMDAwMCk7CisJdmFsdWUtPmhpZ2ggPSAwOworCX0KIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYXJ0dC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhcnR0LmMKaW5kZXggMDAzZTFlNy4uM2E0MWY1OSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhcnR0LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhcnR0LmMKQEAgLTEyMSw5ICsxMjEsOSBAQAogaWJvb2wgTkFQSSBHQV9UaW1lckluaXQodm9pZCkKIHsKICAgICBpZiAoX0dBX2hhdmVDUFVJRCgpICYmIChfR0FfZ2V0Q1BVSURGZWF0dXJlcygpICYgQ1BVX0hhdmVSRFRTQykgIT0gMCkgewotICAgICAgICBoYXZlUkRUU0MgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorCWhhdmVSRFRTQyA9IHRydWU7CisJcmV0dXJuIHRydWU7CisJfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTM1LDUgKzEzNSw1IEBACiAgICAgR0FfbGFyZ2VJbnRlZ2VyICp2YWx1ZSkKIHsKICAgICBpZiAoaGF2ZVJEVFNDKQotICAgICAgICBfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CisJX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhc214LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2FzbXguYwppbmRleCA2MmU2OGRjLi5hZTMxOTQxIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2FzbXguYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2FzbXguYwpAQCAtMTE4LDcgKzExOCw3IEBACiBpYm9vbCBOQVBJIEdBX1RpbWVySW5pdCh2b2lkKQogewogICAgIGlmIChfR0FfaGF2ZUNQVUlEKCkgJiYgKF9HQV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVJEVFNDKSAhPSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYXZ4ZC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhdnhkLmMKaW5kZXggNjIxNzNjYy4uZmM4YmE4ZCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhdnhkLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhdnhkLmMKQEAgLTExNyw4ICsxMTcsOCBAQAogaWJvb2wgTkFQSSBHQV9UaW1lckluaXQodm9pZCkKIHsKICAgICBpZiAoX0dBX2hhdmVDUFVJRCgpICYmIChfR0FfZ2V0Q1BVSURGZWF0dXJlcygpICYgQ1BVX0hhdmVSRFRTQykgIT0gMCkgewotICAgICAgICBoYXZlUkRUU0MgPSB0cnVlOwotICAgICAgICB9CisJaGF2ZVJEVFNDID0gdHJ1ZTsKKwl9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzMCw4ICsxMzAsNyBAQAogICAgIEdBX2xhcmdlSW50ZWdlciAqdmFsdWUpCiB7CiAgICAgaWYgKGhhdmVSRFRTQykKLSAgICAgICAgX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOworCV9HQV9yZWFkVGltZVN0YW1wKHZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIFZURF9HZXRfUmVhbF9UaW1lKCZ2YWx1ZS0+aGlnaCwmdmFsdWUtPmxvdyk7CisJVlREX0dldF9SZWFsX1RpbWUoJnZhbHVlLT5oaWdoLCZ2YWx1ZS0+bG93KTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhd2luMzIuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9nYXdpbjMyLmMKaW5kZXggYTJhNDE1MC4uNjk0NDMzNCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2dhd2luMzIuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ2F3aW4zMi5jCkBAIC02NywxNiArNjcsMTYgQEAKIAogICAgIC8qIENoZWNrIGlmIHdlIGhhdmUgYWxyZWFkeSBsb2FkZWQgdGhlIERMTCAqLwogICAgIGlmIChoTW9kRExMKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICBQTV9pbml0KCk7CiAKICAgICAvKiBPcGVuIHRoZSBETEwgZmlsZSAqLwogICAgIGlmICghUE1fZmluZEJQRChETExfTkFNRSxicGRwYXRoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBzdHJjcHkoZmlsZW5hbWUsYnBkcGF0aCk7CiAgICAgc3RyY2F0KGZpbGVuYW1lLERMTF9OQU1FKTsKICAgICBpZiAoKGhNb2RETEwgPSBMb2FkTGlicmFyeShmaWxlbmFtZSkpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMywxMCArMTAzLDEwIEBACiAKICAgICBQTV9zZXRMb2NhbEJQRFBhdGgocGF0aCk7CiAgICAgaWYgKF9QTV9oRGV2aWNlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgICAgIGluQnVmWzBdID0gKERXT1JEKXBhdGg7Ci0gICAgICAgIERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dBU0VUTE9DQUxQQVRIMzIsCi0gICAgICAgICAgICBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJm91dENudCwgTlVMTCk7Ci0gICAgICAgIH0KKwlpbkJ1ZlswXSA9IChEV09SRClwYXRoOworCURldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dBU0VUTE9DQUxQQVRIMzIsCisJICAgIGluQnVmLCBzaXplb2YoaW5CdWYpLCBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmb3V0Q250LCBOVUxMKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMjYsMTggKzEyNiwxOCBAQAogICAgIFBNX2ltcG9ydHMgKiAoTkFQSVAgX0dBX2dldFN5c3RlbVBNSW1wb3J0cykodm9pZCk7CiAKICAgICBpZiAoTG9hZFNoYXJlZERMTCgpKSB7Ci0gICAgICAgIC8qIE5vdGUgdGhhdCBWaXN1YWwgQysrIGJ1aWxkIERMTCdzIHdpdGggb25seSBhIHNpbmdsZSB1bmRlcnNjb3JlIGluIGZyb250Ci0gICAgICAgICAqIG9mIHRoZSBleHBvcnRlZCBuYW1lIHdoaWxlIFdhdGNvbSBDIHByb3ZpZGVzIHR3byBvZiB0aGVtLiBXZSBjaGVjayBmb3IKLSAgICAgICAgICogYm90aCB0byBhbGxvdyB3b3JraW5nIHdpdGggZWl0aGVyIGNvbXBpbGVkIERMTC4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgoX0dBX2dldFN5c3RlbVBNSW1wb3J0cyA9ICh2b2lkKilHZXRQcm9jQWRkcmVzcyhoTW9kRExMLCJfR0FfZ2V0U3lzdGVtUE1JbXBvcnRzIikpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICgoX0dBX2dldFN5c3RlbVBNSW1wb3J0cyA9ICh2b2lkKilHZXRQcm9jQWRkcmVzcyhoTW9kRExMLCJfX0dBX2dldFN5c3RlbVBNSW1wb3J0cyIpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcG1JbXAgPSBfR0FfZ2V0U3lzdGVtUE1JbXBvcnRzKCk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCZfUE1faW1wb3J0cyxwbUltcCxNSU4oX1BNX2ltcG9ydHMuZHdTaXplLHBtSW1wLT5kd1NpemUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcG1JbXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJLyogTm90ZSB0aGF0IFZpc3VhbCBDKysgYnVpbGQgRExMJ3Mgd2l0aCBvbmx5IGEgc2luZ2xlIHVuZGVyc2NvcmUgaW4gZnJvbnQKKwkgKiBvZiB0aGUgZXhwb3J0ZWQgbmFtZSB3aGlsZSBXYXRjb20gQyBwcm92aWRlcyB0d28gb2YgdGhlbS4gV2UgY2hlY2sgZm9yCisJICogYm90aCB0byBhbGxvdyB3b3JraW5nIHdpdGggZWl0aGVyIGNvbXBpbGVkIERMTC4KKwkgKi8KKwlpZiAoKF9HQV9nZXRTeXN0ZW1QTUltcG9ydHMgPSAodm9pZCopR2V0UHJvY0FkZHJlc3MoaE1vZERMTCwiX0dBX2dldFN5c3RlbVBNSW1wb3J0cyIpKSAhPSBOVUxMKSB7CisJICAgIGlmICgoX0dBX2dldFN5c3RlbVBNSW1wb3J0cyA9ICh2b2lkKilHZXRQcm9jQWRkcmVzcyhoTW9kRExMLCJfX0dBX2dldFN5c3RlbVBNSW1wb3J0cyIpKSAhPSBOVUxMKSB7CisJCXBtSW1wID0gX0dBX2dldFN5c3RlbVBNSW1wb3J0cygpOworCQltZW1jcHkoJl9QTV9pbXBvcnRzLHBtSW1wLE1JTihfUE1faW1wb3J0cy5kd1NpemUscG1JbXAtPmR3U2l6ZSkpOworCQlyZXR1cm4gcG1JbXA7CisJCX0KKwkgICAgfQorCX0KICAgICByZXR1cm4gJl9QTV9pbXBvcnRzOwogfQogCkBAIC0xNjIsMTYgKzE2MiwxNiBAQAogCiAgICAgdXNlUmluZzBEcml2ZXIgPSBmYWxzZTsKICAgICBpZiAoc2hhcmVkKSB7Ci0gICAgICAgIGlmICghTG9hZFNoYXJlZERMTCgpKQotICAgICAgICAgICAgUE1fZmF0YWxFcnJvcigiVW5hYmxlIHRvIGxvYWQgIiBETExfTkFNRSAiISIpOwotICAgICAgICBpZiAoKF9HQV9nZXRTeXN0ZW1HQUV4cG9ydHMgPSAodm9pZCopR2V0UHJvY0FkZHJlc3MoaE1vZERMTCwiX0dBX2dldFN5c3RlbUdBRXhwb3J0cyIpKSA9PSBOVUxMKQotICAgICAgICAgICAgaWYgKChfR0FfZ2V0U3lzdGVtR0FFeHBvcnRzID0gKHZvaWQqKUdldFByb2NBZGRyZXNzKGhNb2RETEwsIl9fR0FfZ2V0U3lzdGVtR0FFeHBvcnRzIikpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgUE1fZmF0YWxFcnJvcigiVW5hYmxlIHRvIGxvYWQgIiBETExfTkFNRSAiISIpOwotICAgICAgICBleHAgPSBfR0FfZ2V0U3lzdGVtR0FFeHBvcnRzKCk7Ci0gICAgICAgIG1lbWNweShnYUV4cCxleHAsTUlOKGdhRXhwLT5kd1NpemUsZXhwLT5kd1NpemUpKTsKLSAgICAgICAgdXNlUmluZzBEcml2ZXIgPSB0cnVlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorCWlmICghTG9hZFNoYXJlZERMTCgpKQorCSAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gbG9hZCAiIERMTF9OQU1FICIhIik7CisJaWYgKChfR0FfZ2V0U3lzdGVtR0FFeHBvcnRzID0gKHZvaWQqKUdldFByb2NBZGRyZXNzKGhNb2RETEwsIl9HQV9nZXRTeXN0ZW1HQUV4cG9ydHMiKSkgPT0gTlVMTCkKKwkgICAgaWYgKChfR0FfZ2V0U3lzdGVtR0FFeHBvcnRzID0gKHZvaWQqKUdldFByb2NBZGRyZXNzKGhNb2RETEwsIl9fR0FfZ2V0U3lzdGVtR0FFeHBvcnRzIikpID09IE5VTEwpCisJCVBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBsb2FkICIgRExMX05BTUUgIiEiKTsKKwlleHAgPSBfR0FfZ2V0U3lzdGVtR0FFeHBvcnRzKCk7CisJbWVtY3B5KGdhRXhwLGV4cCxNSU4oZ2FFeHAtPmR3U2l6ZSxleHAtPmR3U2l6ZSkpOworCXVzZVJpbmcwRHJpdmVyID0gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKKwl9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xODgsMTQgKzE4OCwxNCBAQAogICAgIHN0YXRpYyBpYm9vbCAoTkFQSVAgX0dBX3F1ZXJ5RnVuY3Rpb25zKShHQV9kZXZDdHggKmRjLE5fdWludDMyIGlkLHZvaWQgX0ZBUl8gKmZ1bmNzKSA9IE5VTEw7CiAKICAgICBpZiAodXNlUmluZzBEcml2ZXIpIHsKLSAgICAgICAgLy8gQ2FsbCB0aGUgdmVyc2lvbiBpbiBuZ2FfdzMyLmRsbCBpZiBpdCBpcyBsb2FkZWQKLSAgICAgICAgaWYgKCFfR0FfcXVlcnlGdW5jdGlvbnMpIHsKLSAgICAgICAgICAgIGlmICgoX0dBX3F1ZXJ5RnVuY3Rpb25zID0gKHZvaWQqKUdldFByb2NBZGRyZXNzKGhNb2RETEwsIl9HQV9xdWVyeUZ1bmN0aW9ucyIpKSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGlmICgoX0dBX3F1ZXJ5RnVuY3Rpb25zID0gKHZvaWQqKUdldFByb2NBZGRyZXNzKGhNb2RETEwsIl9fR0FfcXVlcnlGdW5jdGlvbnMiKSkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgUE1fZmF0YWxFcnJvcigiVW5hYmxlIHRvIGdldCBleHBvcnRzIGZyb20gIiBETExfTkFNRSAiISIpOwotICAgICAgICAgICAgfQotICAgICAgICByZXR1cm4gX0dBX3F1ZXJ5RnVuY3Rpb25zKGRjLGlkLGZ1bmNzKTsKLSAgICAgICAgfQorCS8qIENhbGwgdGhlIHZlcnNpb24gaW4gbmdhX3czMi5kbGwgaWYgaXQgaXMgbG9hZGVkICovCisJaWYgKCFfR0FfcXVlcnlGdW5jdGlvbnMpIHsKKwkgICAgaWYgKChfR0FfcXVlcnlGdW5jdGlvbnMgPSAodm9pZCopR2V0UHJvY0FkZHJlc3MoaE1vZERMTCwiX0dBX3F1ZXJ5RnVuY3Rpb25zIikpID09IE5VTEwpCisJCWlmICgoX0dBX3F1ZXJ5RnVuY3Rpb25zID0gKHZvaWQqKUdldFByb2NBZGRyZXNzKGhNb2RETEwsIl9fR0FfcXVlcnlGdW5jdGlvbnMiKSkgPT0gTlVMTCkKKwkJICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBnZXQgZXhwb3J0cyBmcm9tICIgRExMX05BTUUgIiEiKTsKKwkgICAgfQorCXJldHVybiBfR0FfcXVlcnlGdW5jdGlvbnMoZGMsaWQsZnVuY3MpOworCX0KICAgICByZXR1cm4gX19HQV9leHBvcnRzLkdBX3F1ZXJ5RnVuY3Rpb25zKGRjLGlkLGZ1bmNzKTsKIH0KIApAQCAtMjExLDE0ICsyMTEsMTQgQEAKICAgICBzdGF0aWMgaWJvb2wgKE5BUElQIF9SRUYyRF9xdWVyeUZ1bmN0aW9ucykoUkVGMkRfZHJpdmVyICpyZWYyZCxOX3VpbnQzMiBpZCx2b2lkIF9GQVJfICpmdW5jcykgPSBOVUxMOwogCiAgICAgaWYgKHVzZVJpbmcwRHJpdmVyKSB7Ci0gICAgICAgIC8vIENhbGwgdGhlIHZlcnNpb24gaW4gbmdhX3czMi5kbGwgaWYgaXQgaXMgbG9hZGVkCi0gICAgICAgIGlmICghX1JFRjJEX3F1ZXJ5RnVuY3Rpb25zKSB7Ci0gICAgICAgICAgICBpZiAoKF9SRUYyRF9xdWVyeUZ1bmN0aW9ucyA9ICh2b2lkKilHZXRQcm9jQWRkcmVzcyhoTW9kRExMLCJfUkVGMkRfcXVlcnlGdW5jdGlvbnMiKSkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBpZiAoKF9SRUYyRF9xdWVyeUZ1bmN0aW9ucyA9ICh2b2lkKilHZXRQcm9jQWRkcmVzcyhoTW9kRExMLCJfX1JFRjJEX3F1ZXJ5RnVuY3Rpb25zIikpID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBnZXQgZXhwb3J0cyBmcm9tICIgRExMX05BTUUgIiEiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIF9SRUYyRF9xdWVyeUZ1bmN0aW9ucyhyZWYyZCxpZCxmdW5jcyk7Ci0gICAgICAgIH0KKwkvKiBDYWxsIHRoZSB2ZXJzaW9uIGluIG5nYV93MzIuZGxsIGlmIGl0IGlzIGxvYWRlZCAqLworCWlmICghX1JFRjJEX3F1ZXJ5RnVuY3Rpb25zKSB7CisJICAgIGlmICgoX1JFRjJEX3F1ZXJ5RnVuY3Rpb25zID0gKHZvaWQqKUdldFByb2NBZGRyZXNzKGhNb2RETEwsIl9SRUYyRF9xdWVyeUZ1bmN0aW9ucyIpKSA9PSBOVUxMKQorCQlpZiAoKF9SRUYyRF9xdWVyeUZ1bmN0aW9ucyA9ICh2b2lkKilHZXRQcm9jQWRkcmVzcyhoTW9kRExMLCJfX1JFRjJEX3F1ZXJ5RnVuY3Rpb25zIikpID09IE5VTEwpCisJCSAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gZ2V0IGV4cG9ydHMgZnJvbSAiIERMTF9OQU1FICIhIik7CisJICAgIH0KKwlyZXR1cm4gX1JFRjJEX3F1ZXJ5RnVuY3Rpb25zKHJlZjJkLGlkLGZ1bmNzKTsKKwl9CiAgICAgcmV0dXJuIF9fR0FfZXhwb3J0cy5SRUYyRF9xdWVyeUZ1bmN0aW9ucyhyZWYyZCxpZCxmdW5jcyk7CiB9CiAjZW5kaWYKQEAgLTIzMSwxMyArMjMxLDEzIEBACiBpYm9vbCBOQVBJIEdBX1RpbWVySW5pdCh2b2lkKQogewogICAgIGlmIChfR0FfaGF2ZUNQVUlEKCkgJiYgKF9HQV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVJEVFNDKSAhPSAwKSB7Ci0gICAgICAgIGhhdmVSRFRTQyA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisJaGF2ZVJEVFNDID0gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKKwl9CiAgICAgZWxzZSBpZiAoUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSgoTEFSR0VfSU5URUdFUiopJmNvdW50RnJlcSkpIHsKLSAgICAgICAgaGF2ZVJEVFNDID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisJaGF2ZVJEVFNDID0gZmFsc2U7CisJcmV0dXJuIHRydWU7CisJfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMjQ5LDggKzI0OSw3IEBACiAgICAgR0FfbGFyZ2VJbnRlZ2VyICp2YWx1ZSkKIHsKICAgICBpZiAoaGF2ZVJEVFNDKQotICAgICAgICBfR0FfcmVhZFRpbWVTdGFtcCh2YWx1ZSk7CisJX0dBX3JlYWRUaW1lU3RhbXAodmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoKExBUkdFX0lOVEVHRVIqKXZhbHVlKTsKKwlRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigoTEFSR0VfSU5URUdFUiopdmFsdWUpOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ3RmY2FsYy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2d0ZmNhbGMuYwppbmRleCA1YTAzYWM1Li4xZDU0N2U5IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vZ3RmY2FsYy5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9ndGZjYWxjLmMKQEAgLTEwNyw5ICsxMDcsOSBAQAogICAgIGMtPmhTeW5jID0gR0MuaFN5bmM7CiAgICAgYy0+bWluVlN5bmNCUCA9IEdDLm1pblZTeW5jQlA7CiAgICAgaWYgKEdDLmsgPT0gMCkKLSAgICAgICAgYy0+ayA9IDAuMDAxOworCWMtPmsgPSAwLjAwMTsKICAgICBlbHNlCi0gICAgICAgIGMtPmsgPSBHQy5rOworCWMtPmsgPSBHQy5rOwogICAgIGMtPm0gPSAoYy0+ayAvIDI1NikgKiBHQy5tOwogICAgIGMtPmMgPSAoR0MuYyAtIEdDLmopICogKGMtPmsgLyAyNTYpICsgR0MuajsKICAgICBjLT5qID0gR0MuajsKQEAgLTE2NSw4OSArMTY1LDg5IEBACiAgICAgdkZpZWxkUmF0ZSA9IHZGcmVxOwogICAgIGludGVybGFjZSA9IDA7CiAgICAgaWYgKHdhbnRJbnRlcmxhY2UpCi0gICAgICAgIGRvdENsb2NrICo9IDI7CisJZG90Q2xvY2sgKj0gMjsKIAogICAgIC8qIERldGVybWluZSB0aGUgbGluZXMgZm9yIG1hcmdpbnMgKi8KICAgICBpZiAod2FudE1hcmdpbnMpIHsKLSAgICAgICAgdG9wTWFyZ2luTGluZXMgPSByb3VuZChjLm1hcmdpbiAvIDEwMCAqIHZMaW5lcyk7Ci0gICAgICAgIGJvdE1hcmdpbkxpbmVzID0gcm91bmQoYy5tYXJnaW4gLyAxMDAgKiB2TGluZXMpOwotICAgICAgICB9CisJdG9wTWFyZ2luTGluZXMgPSByb3VuZChjLm1hcmdpbiAvIDEwMCAqIHZMaW5lcyk7CisJYm90TWFyZ2luTGluZXMgPSByb3VuZChjLm1hcmdpbiAvIDEwMCAqIHZMaW5lcyk7CisJfQogICAgIGVsc2UgewotICAgICAgICB0b3BNYXJnaW5MaW5lcyA9IDA7Ci0gICAgICAgIGJvdE1hcmdpbkxpbmVzID0gMDsKLSAgICAgICAgfQorCXRvcE1hcmdpbkxpbmVzID0gMDsKKwlib3RNYXJnaW5MaW5lcyA9IDA7CisJfQogCiAgICAgaWYgKHR5cGUgIT0gR1RGX2xvY2tQRikgewotICAgICAgICBpZiAodHlwZSA9PSBHVEZfbG9ja1ZGKSB7Ci0gICAgICAgICAgICAvKiBFc3RpbWF0ZSB0aGUgaG9yaXpvbnRhbCBwZXJpb2QgKi8KLSAgICAgICAgICAgIGhQZXJpb2RFc3QgPSAoKDEvdkZpZWxkUmF0ZSkgLSAoYy5taW5WU3luY0JQLzEwMDAwMDApKSAvCi0gICAgICAgICAgICAgICAgKHZMaW5lcyArICgyKnRvcE1hcmdpbkxpbmVzKSArIGMubWluUG9yY2ggKyBpbnRlcmxhY2UpICogMTAwMDAwMDsKKwlpZiAodHlwZSA9PSBHVEZfbG9ja1ZGKSB7CisJICAgIC8qIEVzdGltYXRlIHRoZSBob3Jpem9udGFsIHBlcmlvZCAqLworCSAgICBoUGVyaW9kRXN0ID0gKCgxL3ZGaWVsZFJhdGUpIC0gKGMubWluVlN5bmNCUC8xMDAwMDAwKSkgLworCQkodkxpbmVzICsgKDIqdG9wTWFyZ2luTGluZXMpICsgYy5taW5Qb3JjaCArIGludGVybGFjZSkgKiAxMDAwMDAwOwogCi0gICAgICAgICAgICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdlN5bmMgKyBiYWNrIHBvcmNoICovCi0gICAgICAgICAgICB2U3luY0JQID0gcm91bmQoYy5taW5WU3luY0JQIC8gaFBlcmlvZEVzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gR1RGX2xvY2tIRikgewotICAgICAgICAgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHZTeW5jICsgYmFjayBwb3JjaCAqLwotICAgICAgICAgICAgdlN5bmNCUCA9IHJvdW5kKChjLm1pblZTeW5jQlAgKiBoRnJlcSkgLyAxMDAwKTsKLSAgICAgICAgICAgIH0KKwkgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHZTeW5jICsgYmFjayBwb3JjaCAqLworCSAgICB2U3luY0JQID0gcm91bmQoYy5taW5WU3luY0JQIC8gaFBlcmlvZEVzdCk7CisJICAgIH0KKwllbHNlIGlmICh0eXBlID09IEdURl9sb2NrSEYpIHsKKwkgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHZTeW5jICsgYmFjayBwb3JjaCAqLworCSAgICB2U3luY0JQID0gcm91bmQoKGMubWluVlN5bmNCUCAqIGhGcmVxKSAvIDEwMDApOworCSAgICB9CiAKLSAgICAgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBWIGJhY2sgcG9yY2ggYWxvbmUgKi8KLSAgICAgICAgdkJhY2tQb3JjaCA9IHZTeW5jQlAgLSBjLnZTeW5jUnFkOworCS8qIEZpbmQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgViBiYWNrIHBvcmNoIGFsb25lICovCisJdkJhY2tQb3JjaCA9IHZTeW5jQlAgLSBjLnZTeW5jUnFkOwogCi0gICAgICAgIC8qIEZpbmQgdGhlIHRvdGFsIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgdmVydGljYWwgcGVyaW9kICovCi0gICAgICAgIHZUb3RhbExpbmVzID0gdkxpbmVzICsgdG9wTWFyZ2luTGluZXMgKyBib3RNYXJnaW5MaW5lcyArIHZTeW5jQlAKLSAgICAgICAgICAgICsgaW50ZXJsYWNlICsgYy5taW5Qb3JjaDsKKwkvKiBGaW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZlcnRpY2FsIHBlcmlvZCAqLworCXZUb3RhbExpbmVzID0gdkxpbmVzICsgdG9wTWFyZ2luTGluZXMgKyBib3RNYXJnaW5MaW5lcyArIHZTeW5jQlAKKwkgICAgKyBpbnRlcmxhY2UgKyBjLm1pblBvcmNoOwogCi0gICAgICAgIGlmICh0eXBlID09IEdURl9sb2NrVkYpIHsKLSAgICAgICAgICAgIC8qIEVzdGltYXRlIHRoZSB2ZXJ0aWNhbCBmcmVxdWVuY3kgKi8KLSAgICAgICAgICAgIHZGaWVsZFJhdGVFc3QgPSAxMDAwMDAwIC8gKGhQZXJpb2RFc3QgKiB2VG90YWxMaW5lcyk7CisJaWYgKHR5cGUgPT0gR1RGX2xvY2tWRikgeworCSAgICAvKiBFc3RpbWF0ZSB0aGUgdmVydGljYWwgZnJlcXVlbmN5ICovCisJICAgIHZGaWVsZFJhdGVFc3QgPSAxMDAwMDAwIC8gKGhQZXJpb2RFc3QgKiB2VG90YWxMaW5lcyk7CiAKLSAgICAgICAgICAgIC8qIEZpbmQgdGhlIGFjdHVhbCBob3Jpem9udGFsIHBlcmlvZCAqLwotICAgICAgICAgICAgaFBlcmlvZCA9IChoUGVyaW9kRXN0ICogdkZpZWxkUmF0ZUVzdCkgLyB2RmllbGRSYXRlOworCSAgICAvKiBGaW5kIHRoZSBhY3R1YWwgaG9yaXpvbnRhbCBwZXJpb2QgKi8KKwkgICAgaFBlcmlvZCA9IChoUGVyaW9kRXN0ICogdkZpZWxkUmF0ZUVzdCkgLyB2RmllbGRSYXRlOwogCi0gICAgICAgICAgICAvKiBGaW5kIHRoZSBhY3R1YWwgdmVydGljYWwgZmllbGQgZnJlcXVlbmN5ICovCi0gICAgICAgICAgICB2RmllbGRSYXRlID0gMTAwMDAwMCAvIChoUGVyaW9kICogdlRvdGFsTGluZXMpOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlID09IEdURl9sb2NrSEYpIHsKLSAgICAgICAgICAgIC8qIEZpbmQgdGhlIGFjdHVhbCB2ZXJ0aWNhbCBmaWVsZCBmcmVxdWVuY3kgKi8KLSAgICAgICAgICAgIHZGaWVsZFJhdGUgPSAoaEZyZXEgLyB2VG90YWxMaW5lcykgKiAxMDAwOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJICAgIC8qIEZpbmQgdGhlIGFjdHVhbCB2ZXJ0aWNhbCBmaWVsZCBmcmVxdWVuY3kgKi8KKwkgICAgdkZpZWxkUmF0ZSA9IDEwMDAwMDAgLyAoaFBlcmlvZCAqIHZUb3RhbExpbmVzKTsKKwkgICAgfQorCWVsc2UgaWYgKHR5cGUgPT0gR1RGX2xvY2tIRikgeworCSAgICAvKiBGaW5kIHRoZSBhY3R1YWwgdmVydGljYWwgZmllbGQgZnJlcXVlbmN5ICovCisJICAgIHZGaWVsZFJhdGUgPSAoaEZyZXEgLyB2VG90YWxMaW5lcykgKiAxMDAwOworCSAgICB9CisJfQogCiAgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIHBpeGVscyBpbiB0aGUgbGVmdCBhbmQgcmlnaHQgbWFyZ2lucyAqLwogICAgIGlmICh3YW50TWFyZ2lucykgewotICAgICAgICBsZWZ0TWFyZ2luUGl4ZWxzID0gcm91bmQoaFBpeGVscyAqIGMubWFyZ2luKSAvICgxMDAgKiBjLmNlbGxHcmFuKTsKLSAgICAgICAgcmlnaHRNYXJnaW5QaXhlbHMgPSByb3VuZChoUGl4ZWxzICogYy5tYXJnaW4pIC8gKDEwMCAqIGMuY2VsbEdyYW4pOwotICAgICAgICB9CisJbGVmdE1hcmdpblBpeGVscyA9IHJvdW5kKGhQaXhlbHMgKiBjLm1hcmdpbikgLyAoMTAwICogYy5jZWxsR3Jhbik7CisJcmlnaHRNYXJnaW5QaXhlbHMgPSByb3VuZChoUGl4ZWxzICogYy5tYXJnaW4pIC8gKDEwMCAqIGMuY2VsbEdyYW4pOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgbGVmdE1hcmdpblBpeGVscyA9IDA7Ci0gICAgICAgIHJpZ2h0TWFyZ2luUGl4ZWxzID0gMDsKLSAgICAgICAgfQorCWxlZnRNYXJnaW5QaXhlbHMgPSAwOworCXJpZ2h0TWFyZ2luUGl4ZWxzID0gMDsKKwl9CiAKICAgICAvKiBGaW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgYWN0aXZlIHBpeGVscyBpbiBpbWFnZSArIG1hcmdpbnMgKi8KICAgICBoVG90YWxBY3RpdmVQaXhlbHMgPSBoUGl4ZWxzICsgbGVmdE1hcmdpblBpeGVscyArIHJpZ2h0TWFyZ2luUGl4ZWxzOwogCiAgICAgaWYgKHR5cGUgPT0gR1RGX2xvY2tWRikgewotICAgICAgICAvKiBGaW5kIHRoZSBpZGVhbCBibGFua2luZyBkdXR5IGN5Y2xlICovCi0gICAgICAgIGlkZWFsRHV0eUN5Y2xlID0gYy5jIC0gKChjLm0gKiBoUGVyaW9kKSAvIDEwMDApOwotICAgICAgICB9CisJLyogRmluZCB0aGUgaWRlYWwgYmxhbmtpbmcgZHV0eSBjeWNsZSAqLworCWlkZWFsRHV0eUN5Y2xlID0gYy5jIC0gKChjLm0gKiBoUGVyaW9kKSAvIDEwMDApOworCX0KICAgICBlbHNlIGlmICh0eXBlID09IEdURl9sb2NrSEYpIHsKLSAgICAgICAgLyogRmluZCB0aGUgaWRlYWwgYmxhbmtpbmcgZHV0eSBjeWNsZSAqLwotICAgICAgICBpZGVhbER1dHlDeWNsZSA9IGMuYyAtIChjLm0gLyBoRnJlcSk7Ci0gICAgICAgIH0KKwkvKiBGaW5kIHRoZSBpZGVhbCBibGFua2luZyBkdXR5IGN5Y2xlICovCisJaWRlYWxEdXR5Q3ljbGUgPSBjLmMgLSAoYy5tIC8gaEZyZXEpOworCX0KICAgICBlbHNlIGlmICh0eXBlID09IEdURl9sb2NrUEYpIHsKLSAgICAgICAgLyogRmluZCBpZGVhbCBob3Jpem9udGFsIHBlcmlvZCBmcm9tIGJsYW5raW5nIGR1dHkgY3ljbGUgZm9ybXVsYSAqLwotICAgICAgICBpZGVhbEhQZXJpb2QgPSAoKChjLmMgLSAxMDApICsgKHNxcnQoKHBvdygxMDAtYy5jLDIpKSArCi0gICAgICAgICAgICAoMC40ICogYy5tICogKGhUb3RhbEFjdGl2ZVBpeGVscyArIHJpZ2h0TWFyZ2luUGl4ZWxzICsKLSAgICAgICAgICAgIGxlZnRNYXJnaW5QaXhlbHMpIC8gZG90Q2xvY2spKSkpIC8gKDIgKiBjLm0pKSAqIDEwMDA7CisJLyogRmluZCBpZGVhbCBob3Jpem9udGFsIHBlcmlvZCBmcm9tIGJsYW5raW5nIGR1dHkgY3ljbGUgZm9ybXVsYSAqLworCWlkZWFsSFBlcmlvZCA9ICgoKGMuYyAtIDEwMCkgKyAoc3FydCgocG93KDEwMC1jLmMsMikpICsKKwkgICAgKDAuNCAqIGMubSAqIChoVG90YWxBY3RpdmVQaXhlbHMgKyByaWdodE1hcmdpblBpeGVscyArCisJICAgIGxlZnRNYXJnaW5QaXhlbHMpIC8gZG90Q2xvY2spKSkpIC8gKDIgKiBjLm0pKSAqIDEwMDA7CiAKLSAgICAgICAgLyogRmluZCB0aGUgaWRlYWwgYmxhbmtpbmcgZHV0eSBjeWNsZSAqLwotICAgICAgICBpZGVhbER1dHlDeWNsZSA9IGMuYyAtICgoYy5tICogaWRlYWxIUGVyaW9kKSAvIDEwMDApOwotICAgICAgICB9CisJLyogRmluZCB0aGUgaWRlYWwgYmxhbmtpbmcgZHV0eSBjeWNsZSAqLworCWlkZWFsRHV0eUN5Y2xlID0gYy5jIC0gKChjLm0gKiBpZGVhbEhQZXJpb2QpIC8gMTAwMCk7CisJfQogCiAgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIHBpeGVscyBpbiBibGFua2luZyB0aW1lICovCiAgICAgaEJsYW5rUGl4ZWxzID0gcm91bmQoKGhUb3RhbEFjdGl2ZVBpeGVscyAqIGlkZWFsRHV0eUN5Y2xlKSAvCi0gICAgICAgICgoMTAwIC0gaWRlYWxEdXR5Q3ljbGUpICogYy5jZWxsR3JhbikpICogYy5jZWxsR3JhbjsKKwkoKDEwMCAtIGlkZWFsRHV0eUN5Y2xlKSAqIGMuY2VsbEdyYW4pKSAqIGMuY2VsbEdyYW47CiAKICAgICAvKiBGaW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgcGl4ZWxzICovCiAgICAgaFRvdGFsUGl4ZWxzID0gaFRvdGFsQWN0aXZlUGl4ZWxzICsgaEJsYW5rUGl4ZWxzOwpAQCAtMjYyLDM1ICsyNjIsMzUgQEAKICAgICBoU3luY0JQID0gaEJhY2tQb3JjaCArIGhTeW5jV2lkdGg7CiAKICAgICBpZiAodHlwZSA9PSBHVEZfbG9ja1BGKSB7Ci0gICAgICAgIC8qIEZpbmQgdGhlIGhvcml6b250YWwgZnJlcXVlbmN5ICovCi0gICAgICAgIGhGcmVxID0gKGRvdENsb2NrIC8gaFRvdGFsUGl4ZWxzKSAqIDEwMDA7CisJLyogRmluZCB0aGUgaG9yaXpvbnRhbCBmcmVxdWVuY3kgKi8KKwloRnJlcSA9IChkb3RDbG9jayAvIGhUb3RhbFBpeGVscykgKiAxMDAwOwogCi0gICAgICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiB2U3luYyArIGJhY2sgcG9yY2ggKi8KLSAgICAgICAgdlN5bmNCUCA9IHJvdW5kKChjLm1pblZTeW5jQlAgKiBoRnJlcSkgLyAxMDAwKTsKKwkvKiBGaW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdlN5bmMgKyBiYWNrIHBvcmNoICovCisJdlN5bmNCUCA9IHJvdW5kKChjLm1pblZTeW5jQlAgKiBoRnJlcSkgLyAxMDAwKTsKIAotICAgICAgICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIFYgYmFjayBwb3JjaCBhbG9uZSAqLwotICAgICAgICB2QmFja1BvcmNoID0gdlN5bmNCUCAtIGMudlN5bmNScWQ7CisJLyogRmluZCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBWIGJhY2sgcG9yY2ggYWxvbmUgKi8KKwl2QmFja1BvcmNoID0gdlN5bmNCUCAtIGMudlN5bmNScWQ7CiAKLSAgICAgICAgLyogRmluZCB0aGUgdG90YWwgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSB2ZXJ0aWNhbCBwZXJpb2QgKi8KLSAgICAgICAgdlRvdGFsTGluZXMgPSB2TGluZXMgKyB0b3BNYXJnaW5MaW5lcyArIGJvdE1hcmdpbkxpbmVzICsgdlN5bmNCUAotICAgICAgICAgICAgKyBpbnRlcmxhY2UgKyBjLm1pblBvcmNoOworCS8qIEZpbmQgdGhlIHRvdGFsIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgdmVydGljYWwgcGVyaW9kICovCisJdlRvdGFsTGluZXMgPSB2TGluZXMgKyB0b3BNYXJnaW5MaW5lcyArIGJvdE1hcmdpbkxpbmVzICsgdlN5bmNCUAorCSAgICArIGludGVybGFjZSArIGMubWluUG9yY2g7CiAKLSAgICAgICAgLyogRmluZCB0aGUgYWN0dWFsIHZlcnRpY2FsIGZpZWxkIGZyZXF1ZW5jeSAqLwotICAgICAgICB2RmllbGRSYXRlID0gKGhGcmVxIC8gdlRvdGFsTGluZXMpICogMTAwMDsKLSAgICAgICAgfQorCS8qIEZpbmQgdGhlIGFjdHVhbCB2ZXJ0aWNhbCBmaWVsZCBmcmVxdWVuY3kgKi8KKwl2RmllbGRSYXRlID0gKGhGcmVxIC8gdlRvdGFsTGluZXMpICogMTAwMDsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICh0eXBlID09IEdURl9sb2NrVkYpIHsKLSAgICAgICAgICAgIC8qIEZpbmQgdGhlIGhvcml6b250YWwgZnJlcXVlbmN5ICovCi0gICAgICAgICAgICBoRnJlcSA9IDEwMDAgLyBoUGVyaW9kOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh0eXBlID09IEdURl9sb2NrSEYpIHsKLSAgICAgICAgICAgIC8qIEZpbmQgdGhlIGhvcml6b250YWwgZnJlcXVlbmN5ICovCi0gICAgICAgICAgICBoUGVyaW9kID0gMTAwMCAvIGhGcmVxOwotICAgICAgICAgICAgfQorCWlmICh0eXBlID09IEdURl9sb2NrVkYpIHsKKwkgICAgLyogRmluZCB0aGUgaG9yaXpvbnRhbCBmcmVxdWVuY3kgKi8KKwkgICAgaEZyZXEgPSAxMDAwIC8gaFBlcmlvZDsKKwkgICAgfQorCWVsc2UgaWYgKHR5cGUgPT0gR1RGX2xvY2tIRikgeworCSAgICAvKiBGaW5kIHRoZSBob3Jpem9udGFsIGZyZXF1ZW5jeSAqLworCSAgICBoUGVyaW9kID0gMTAwMCAvIGhGcmVxOworCSAgICB9CiAKLSAgICAgICAgLyogRmluZCB0aGUgcGl4ZWwgY2xvY2sgZnJlcXVlbmN5ICovCi0gICAgICAgIGRvdENsb2NrID0gaFRvdGFsUGl4ZWxzIC8gaFBlcmlvZDsKLSAgICAgICAgfQorCS8qIEZpbmQgdGhlIHBpeGVsIGNsb2NrIGZyZXF1ZW5jeSAqLworCWRvdENsb2NrID0gaFRvdGFsUGl4ZWxzIC8gaFBlcmlvZDsKKwl9CiAKICAgICAvKiBSZXR1cm4gdGhlIGNvbXB1dGVkIGZyZXF1ZW5jaWVzICovCiAgICAgdC0+dkZyZXEgPSB2RmllbGRSYXRlOwpAQCAtMzE1LDE2ICszMTUsMTYgQEAKICAgICB0LT52LnZTeW5jV2lkdGggPSAoaW50KWMudlN5bmNScWQ7CiAgICAgdC0+di52QmFja1BvcmNoID0gKGludCl2QmFja1BvcmNoOwogICAgIGlmICh3YW50SW50ZXJsYWNlKSB7Ci0gICAgICAgIC8qIEhhbHZlIHRoZSB0aW1pbmdzIGZvciBpbnRlcmxhY2VkIG1vZGVzICovCi0gICAgICAgIHQtPnYudlRvdGFsIC89IDI7Ci0gICAgICAgIHQtPnYudkRpc3AgLz0gMjsKLSAgICAgICAgdC0+di52U3luY1N0YXJ0IC89IDI7Ci0gICAgICAgIHQtPnYudlN5bmNFbmQgLz0gMjsKLSAgICAgICAgdC0+di52RnJvbnRQb3JjaCAvPSAyOwotICAgICAgICB0LT52LnZTeW5jV2lkdGggLz0gMjsKLSAgICAgICAgdC0+di52QmFja1BvcmNoIC89IDI7Ci0gICAgICAgIHQtPmRvdENsb2NrIC89IDI7Ci0gICAgICAgIH0KKwkvKiBIYWx2ZSB0aGUgdGltaW5ncyBmb3IgaW50ZXJsYWNlZCBtb2RlcyAqLworCXQtPnYudlRvdGFsIC89IDI7CisJdC0+di52RGlzcCAvPSAyOworCXQtPnYudlN5bmNTdGFydCAvPSAyOworCXQtPnYudlN5bmNFbmQgLz0gMjsKKwl0LT52LnZGcm9udFBvcmNoIC89IDI7CisJdC0+di52U3luY1dpZHRoIC89IDI7CisJdC0+di52QmFja1BvcmNoIC89IDI7CisJdC0+ZG90Q2xvY2sgLz0gMjsKKwl9CiAKICAgICAvKiBNYXJrIGFzIEdURiB0aW1pbmcgdXNpbmcgdGhlIHN5bmMgcG9sYXJpdGllcyAqLwogICAgIHQtPmludGVybGFjZSA9ICh3YW50SW50ZXJsYWNlKSA/ICdJJyA6ICdOJzsKQEAgLTM0OCwzMCArMzQ4LDMwIEBACiAgICAgR1RGX3RpbWluZ3MgdDsKIAogICAgIGlmIChhcmdjICE9IDUgJiYgYXJnYyAhPSA2KSB7Ci0gICAgICAgIHByaW50ZigiVXNhZ2U6IEdURkNBTEMgPHhQaXhlbHM+IDx5UGl4ZWxzPiA8ZnJlcT4gW1tIel0gW0tIel0gW01Iel1dIFtJXVxuIik7Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgcHJpbnRmKCJ3aGVyZSA8eFBpeGVscz4gaXMgdGhlIGhvcml6b250YWwgcmVzb2x1dGlvbiBvZiB0aGUgbW9kZSwgPHlQaXhlbHM+IGlzIHRoZVxuIik7Ci0gICAgICAgIHByaW50ZigidmVydGljYWwgcmVzb2x1dGlvbiBvZiB0aGUgbW9kZS4gVGhlIDxmcmVxPiB2YWx1ZSB3aWxsIGJlIHRoZSBmcmVxdWVuY3kgdG9cbiIpOwotICAgICAgICBwcmludGYoImRyaXZlIHRoZSBjYWxjdWxhdGlvbnMsIGFuZCB3aWxsIGJlIGVpdGhlciB0aGUgdmVydGljYWwgZnJlcXVlbmN5IChpbiBIeilcbiIpOwotICAgICAgICBwcmludGYoInRoZSBob3Jpem9udGFsIGZyZXF1ZW5jeSAoaW4gS0h6KSBvciB0aGUgZG90IGNsb2NrIChpbiBNSHopLiBUbyBnZW5lcmF0ZVxuIik7Ci0gICAgICAgIHByaW50ZigidGltaW5ncyBmb3IgYW4gaW50ZXJsYWNlZCBtb2RlLCBhZGQgJ0knIHRvIHRoZSBlbmQgb2YgdGhlIGNvbW1hbmQgbGluZS5cbiIpOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIHByaW50ZigiRm9yIGV4YW1wbGUgdG8gZ2VuZXJhdGUgdGltaW5ncyBmb3IgNjQweDQ4MCBhdCA2MEh6IHZlcnRpY2FsOlxuIik7Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgR1RGQ0FMQyA2NDAgNDgwIDYwIEh6XG4iKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBwcmludGYoIkZvciBleGFtcGxlIHRvIGdlbmVyYXRlIHRpbWluZ3MgZm9yIDY0MHg0ODAgYXQgMzEuNUtIeiBob3Jpem9udGFsOlxuIik7Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgcHJpbnRmKCIgICAgR1RGQ0FMQyA2NDAgNDgwIDMxLjUgS0h6XG4iKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBwcmludGYoIkZvciBleGFtcGxlIHRvIGdlbmVyYXRlIHRpbWluZ3MgZm9yIDY0MHg0ODAgd2l0aCBhIDI1LjE3NU1oeiBkb3QgY2xvY2s6XG4iKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICBwcmludGYoIiAgICBHVEZDQUxDIDY0MCA0ODAgMjUuMTc1IE1IelxuIik7Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgcHJpbnRmKCJHVEZDQUxDIHdpbGwgcHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHRzIGZvdW5kLCBhbmQgZHVtcCB0aGUgQ1JUQ1xuIik7Ci0gICAgICAgIHByaW50ZigidmFsdWVzIHRvIHRoZSBVVkNPTkZJRy5DUlQgZmlsZSBpbiB0aGUgZm9ybWF0IHVzZWQgYnkgU2NpVGVjaCBEaXNwbGF5IERvY3Rvci5cbiIpOwotICAgICAgICBleGl0KDEpOwotICAgICAgICB9CisJcHJpbnRmKCJVc2FnZTogR1RGQ0FMQyA8eFBpeGVscz4gPHlQaXhlbHM+IDxmcmVxPiBbW0h6XSBbS0h6XSBbTUh6XV0gW0ldXG4iKTsKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKCJ3aGVyZSA8eFBpeGVscz4gaXMgdGhlIGhvcml6b250YWwgcmVzb2x1dGlvbiBvZiB0aGUgbW9kZSwgPHlQaXhlbHM+IGlzIHRoZVxuIik7CisJcHJpbnRmKCJ2ZXJ0aWNhbCByZXNvbHV0aW9uIG9mIHRoZSBtb2RlLiBUaGUgPGZyZXE+IHZhbHVlIHdpbGwgYmUgdGhlIGZyZXF1ZW5jeSB0b1xuIik7CisJcHJpbnRmKCJkcml2ZSB0aGUgY2FsY3VsYXRpb25zLCBhbmQgd2lsbCBiZSBlaXRoZXIgdGhlIHZlcnRpY2FsIGZyZXF1ZW5jeSAoaW4gSHopXG4iKTsKKwlwcmludGYoInRoZSBob3Jpem9udGFsIGZyZXF1ZW5jeSAoaW4gS0h6KSBvciB0aGUgZG90IGNsb2NrIChpbiBNSHopLiBUbyBnZW5lcmF0ZVxuIik7CisJcHJpbnRmKCJ0aW1pbmdzIGZvciBhbiBpbnRlcmxhY2VkIG1vZGUsIGFkZCAnSScgdG8gdGhlIGVuZCBvZiB0aGUgY29tbWFuZCBsaW5lLlxuIik7CisJcHJpbnRmKCJcbiIpOworCXByaW50ZigiRm9yIGV4YW1wbGUgdG8gZ2VuZXJhdGUgdGltaW5ncyBmb3IgNjQweDQ4MCBhdCA2MEh6IHZlcnRpY2FsOlxuIik7CisJcHJpbnRmKCJcbiIpOworCXByaW50ZigiICAgIEdURkNBTEMgNjQwIDQ4MCA2MCBIelxuIik7CisJcHJpbnRmKCJcbiIpOworCXByaW50ZigiRm9yIGV4YW1wbGUgdG8gZ2VuZXJhdGUgdGltaW5ncyBmb3IgNjQweDQ4MCBhdCAzMS41S0h6IGhvcml6b250YWw6XG4iKTsKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKCIgICAgR1RGQ0FMQyA2NDAgNDgwIDMxLjUgS0h6XG4iKTsKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKCJGb3IgZXhhbXBsZSB0byBnZW5lcmF0ZSB0aW1pbmdzIGZvciA2NDB4NDgwIHdpdGggYSAyNS4xNzVNaHogZG90IGNsb2NrOlxuIik7CisJcHJpbnRmKCJcbiIpOworCXByaW50ZigiICAgIEdURkNBTEMgNjQwIDQ4MCAyNS4xNzUgTUh6XG4iKTsKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKCJHVEZDQUxDIHdpbGwgcHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHRzIGZvdW5kLCBhbmQgZHVtcCB0aGUgQ1JUQ1xuIik7CisJcHJpbnRmKCJ2YWx1ZXMgdG8gdGhlIFVWQ09ORklHLkNSVCBmaWxlIGluIHRoZSBmb3JtYXQgdXNlZCBieSBTY2lUZWNoIERpc3BsYXkgRG9jdG9yLlxuIik7CisJZXhpdCgxKTsKKwl9CiAKICAgICAvKiBHZXQgdmFsdWVzIGZyb20gY29tbWFuZCBsaW5lICovCiAgICAgeFBpeGVscyA9IGF0b2YoYXJndlsxXSk7CkBAIC0zODEsMzMgKzM4MSwzMyBAQAogCiAgICAgLyogQ29tcHV0ZSB0aGUgQ1JUQyB0aW1pbmdzICovCiAgICAgaWYgKHRvdXBwZXIoYXJndls0XVswXSkgPT0gJ0gnKQotICAgICAgICBHVEZfY2FsY1RpbWluZ3MoeFBpeGVscyx5UGl4ZWxzLGZyZXEsR1RGX2xvY2tWRixmYWxzZSxpbnRlcmxhY2UsJnQpOworCUdURl9jYWxjVGltaW5ncyh4UGl4ZWxzLHlQaXhlbHMsZnJlcSxHVEZfbG9ja1ZGLGZhbHNlLGludGVybGFjZSwmdCk7CiAgICAgZWxzZSBpZiAodG91cHBlcihhcmd2WzRdWzBdKSA9PSAnSycpCi0gICAgICAgIEdURl9jYWxjVGltaW5ncyh4UGl4ZWxzLHlQaXhlbHMsZnJlcSxHVEZfbG9ja0hGLGZhbHNlLGludGVybGFjZSwmdCk7CisJR1RGX2NhbGNUaW1pbmdzKHhQaXhlbHMseVBpeGVscyxmcmVxLEdURl9sb2NrSEYsZmFsc2UsaW50ZXJsYWNlLCZ0KTsKICAgICBlbHNlIGlmICh0b3VwcGVyKGFyZ3ZbNF1bMF0pID09ICdNJykKLSAgICAgICAgR1RGX2NhbGNUaW1pbmdzKHhQaXhlbHMseVBpeGVscyxmcmVxLEdURl9sb2NrUEYsZmFsc2UsaW50ZXJsYWNlLCZ0KTsKKwlHVEZfY2FsY1RpbWluZ3MoeFBpeGVscyx5UGl4ZWxzLGZyZXEsR1RGX2xvY2tQRixmYWxzZSxpbnRlcmxhY2UsJnQpOwogICAgIGVsc2UgewotICAgICAgICBwcmludGYoIlVua25vd24gY29tbWFuZCBsaW5lIVxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KKwlwcmludGYoIlVua25vd24gY29tbWFuZCBsaW5lIVxuIik7CisJZXhpdCgxKTsKKwl9CiAKICAgICAvKiBEdW1wIHN1bW1hcnkgaW5mbyB0byBzdGFuZGFyZCBvdXRwdXQgKi8KICAgICBwcmludGYoIkNSVEMgdmFsdWVzIGZvciAlLjBmeCUuMGYgQCAlLjJmICVzXG4iLCB4UGl4ZWxzLCB5UGl4ZWxzLCBmcmVxLCBhcmd2WzRdKTsKICAgICBwcmludGYoIlxuIik7CiAgICAgcHJpbnRmKCIgIGhUb3RhbCAgICAgID0gJS00ZCAgICB2VG90YWwgICAgICA9ICUtNGRcbiIsCi0gICAgICAgIHQuaC5oVG90YWwsIHQudi52VG90YWwpOworCXQuaC5oVG90YWwsIHQudi52VG90YWwpOwogICAgIHByaW50ZigiICBoRGlzcCAgICAgICA9ICUtNGQgICAgdkRpc3AgICAgICAgPSAlLTRkXG4iLAotICAgICAgICB0LmguaERpc3AsIHQudi52RGlzcCk7CisJdC5oLmhEaXNwLCB0LnYudkRpc3ApOwogICAgIHByaW50ZigiICBoU3luY1N0YXJ0ICA9ICUtNGQgICAgdlN5bmNTdGFydCAgPSAlLTRkXG4iLAotICAgICAgICB0LmguaFN5bmNTdGFydCwgdC52LnZTeW5jU3RhcnQpOworCXQuaC5oU3luY1N0YXJ0LCB0LnYudlN5bmNTdGFydCk7CiAgICAgcHJpbnRmKCIgIGhTeW5jRW5kICAgID0gJS00ZCAgICB2U3luY0VuZCAgICA9ICUtNGRcbiIsCi0gICAgICAgIHQuaC5oU3luY0VuZCwgdC52LnZTeW5jRW5kKTsKKwl0LmguaFN5bmNFbmQsIHQudi52U3luY0VuZCk7CiAgICAgcHJpbnRmKCIgIGhGcm9udFBvcmNoID0gJS00ZCAgICB2RnJvbnRQb3JjaCA9ICUtNGRcbiIsCi0gICAgICAgIHQuaC5oRnJvbnRQb3JjaCwgdC52LnZGcm9udFBvcmNoKTsKKwl0LmguaEZyb250UG9yY2gsIHQudi52RnJvbnRQb3JjaCk7CiAgICAgcHJpbnRmKCIgIGhTeW5jV2lkdGggID0gJS00ZCAgICB2U3luY1dpZHRoICA9ICUtNGRcbiIsCi0gICAgICAgIHQuaC5oU3luY1dpZHRoLCB0LnYudlN5bmNXaWR0aCk7CisJdC5oLmhTeW5jV2lkdGgsIHQudi52U3luY1dpZHRoKTsKICAgICBwcmludGYoIiAgaEJhY2tQb3JjaCAgPSAlLTRkICAgIHZCYWNrUG9yY2ggID0gJS00ZFxuIiwKLSAgICAgICAgdC5oLmhCYWNrUG9yY2gsIHQudi52QmFja1BvcmNoKTsKKwl0LmguaEJhY2tQb3JjaCwgdC52LnZCYWNrUG9yY2gpOwogICAgIHByaW50ZigiXG4iKTsKICAgICBwcmludGYoIiAgSW50ZXJsYWNlZCAgPSAlc1xuIiwgKHQuaW50ZXJsYWNlID09ICdJJykgPyAiWWVzIiA6ICJObyIpOwogICAgIHByaW50ZigiICBIIHN5bmMgcG9sICA9ICVjXG4iLCB0LmhTeW5jUG9sKTsKQEAgLTQxOSwxOCArNDE5LDE4IEBACiAKICAgICAvKiBEdW1wIHRvIGZpbGUgaW4gZm9ybWF0IHVzZWQgYnkgU2NpVGVjaCBEaXNwbGF5IERvY3RvciAqLwogICAgIGlmICgoZiA9IGZvcGVuKCJVVkNPTkZJRy5DUlQiLCJ3IikpICE9IE5VTEwpIHsKLSAgICAgICAgZnByaW50ZihmLCAiWyUuMGYgJS4wZl1cbiIsIHhQaXhlbHMsIHlQaXhlbHMpOwotICAgICAgICBmcHJpbnRmKGYsICIlZCAlZCAlZCAlZCAnJWMnICVzXG4iLAotICAgICAgICAgICAgdC5oLmhUb3RhbCwgdC5oLmhEaXNwLAotICAgICAgICAgICAgdC5oLmhTeW5jU3RhcnQsIHQuaC5oU3luY0VuZCwKLSAgICAgICAgICAgIHQuaFN5bmNQb2wsICh0LmludGVybGFjZSA9PSAnSScpID8gIkkiIDogIk5JIik7Ci0gICAgICAgIGZwcmludGYoZiwgIiVkICVkICVkICVkICclYydcbiIsCi0gICAgICAgICAgICB0LnYudlRvdGFsLCB0LnYudkRpc3AsCi0gICAgICAgICAgICB0LnYudlN5bmNTdGFydCwgdC52LnZTeW5jRW5kLAotICAgICAgICAgICAgdC52U3luY1BvbCk7Ci0gICAgICAgIGZwcmludGYoZiwgIiUuMmZcbiIsIHQuZG90Q2xvY2spOwotICAgICAgICBmY2xvc2UoZik7Ci0gICAgICAgIH0KKwlmcHJpbnRmKGYsICJbJS4wZiAlLjBmXVxuIiwgeFBpeGVscywgeVBpeGVscyk7CisJZnByaW50ZihmLCAiJWQgJWQgJWQgJWQgJyVjJyAlc1xuIiwKKwkgICAgdC5oLmhUb3RhbCwgdC5oLmhEaXNwLAorCSAgICB0LmguaFN5bmNTdGFydCwgdC5oLmhTeW5jRW5kLAorCSAgICB0LmhTeW5jUG9sLCAodC5pbnRlcmxhY2UgPT0gJ0knKSA/ICJJIiA6ICJOSSIpOworCWZwcmludGYoZiwgIiVkICVkICVkICVkICclYydcbiIsCisJICAgIHQudi52VG90YWwsIHQudi52RGlzcCwKKwkgICAgdC52LnZTeW5jU3RhcnQsIHQudi52U3luY0VuZCwKKwkgICAgdC52U3luY1BvbCk7CisJZnByaW50ZihmLCAiJS4yZlxuIiwgdC5kb3RDbG9jayk7CisJZmNsb3NlKGYpOworCX0KIH0KIAogI2VuZGlmICAvKiBURVNUSU5HICovCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vbGliY2ltcC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL2xpYmNpbXAuYwppbmRleCAwZWFjZDEyLi5hYjczYWQ1IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vbGliY2ltcC5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi9saWJjaW1wLmMKQEAgLTI3MCwyNyArMjcwLDI3IEBACiAKICAgICAvKiBGaW5kIGFuIGVtcHR5IGZpbGUgaGFuZGxlIHRvIHVzZSAqLwogICAgIGZvciAoaSA9IDM7IGkgPCBNQVhfRklMRVM7IGkrKykgewotICAgICAgICBpZiAoIW9wZW5IYW5kbGVzW2ldKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlpZiAoIW9wZW5IYW5kbGVzW2ldKQorCSAgICBicmVhazsKKwl9CiAgICAgaWYgKG9wZW5IYW5kbGVzW2ldKQotICAgICAgICByZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogCiAgICAgLyogRmluZCB0aGUgb3BlbiBmbGFncyB0byB1c2UgKi8KICAgICBpZiAoX29mbGFnICYgX19fT19UUlVOQykKLSAgICAgICAgc3RyY3B5KG1vZGUsInciKTsKKwlzdHJjcHkobW9kZSwidyIpOwogICAgIGVsc2UgaWYgKF9vZmxhZyAmIF9fX09fQ1JFQVQpCi0gICAgICAgIHN0cmNweShtb2RlLCJhIik7CisJc3RyY3B5KG1vZGUsImEiKTsKICAgICBlbHNlCi0gICAgICAgIHN0cmNweShtb2RlLCJyIik7CisJc3RyY3B5KG1vZGUsInIiKTsKICAgICBpZiAoX29mbGFnICYgX19fT19CSU5BUlkpCi0gICAgICAgIHN0cmNhdChtb2RlLCJiIik7CisJc3RyY2F0KG1vZGUsImIiKTsKICAgICBpZiAoX29mbGFnICYgX19fT19URVhUKQotICAgICAgICBzdHJjYXQobW9kZSwidCIpOworCXN0cmNhdChtb2RlLCJ0Iik7CiAKICAgICAvKiBPcGVuIHRoZSBmaWxlIGFuZCBzdG9yZSB0aGUgZmlsZSBoYW5kbGUgKi8KICAgICBpZiAoKG9wZW5IYW5kbGVzW2ldID0gZm9wZW4oX3BhdGgsbW9kZSkpID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKKwlyZXR1cm4gLTE7CiAgICAgcmV0dXJuIGk7CiB9CiAKQEAgLTMwMCwyNSArMzAwLDI1IEBACiBpbnQgX0NERUNMIHN0dWJfY2xvc2UoaW50IF9maWxkZXMpCiB7CiAgICAgaWYgKF9maWxkZXMgPj0gMyAmJiBvcGVuSGFuZGxlc1tfZmlsZGVzXSkgewotICAgICAgICBmY2xvc2Uob3BlbkhhbmRsZXNbX2ZpbGRlc10pOwotICAgICAgICBvcGVuSGFuZGxlc1tfZmlsZGVzXSA9IE5VTEw7Ci0gICAgICAgIH0KKwlmY2xvc2Uob3BlbkhhbmRsZXNbX2ZpbGRlc10pOworCW9wZW5IYW5kbGVzW19maWxkZXNdID0gTlVMTDsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKIG9mZl90IF9DREVDTCBzdHViX2xzZWVrKGludCBfZmlsZGVzLCBvZmZfdCBfb2Zmc2V0LCBpbnQgX3doZW5jZSkKIHsKICAgICBpZiAoX2ZpbGRlcyA+PSAzKSB7Ci0gICAgICAgIGZzZWVrKG9wZW5IYW5kbGVzW19maWxkZXNdLF9vZmZzZXQsX3doZW5jZSk7Ci0gICAgICAgIHJldHVybiBmdGVsbChvcGVuSGFuZGxlc1tfZmlsZGVzXSk7Ci0gICAgICAgIH0KKwlmc2VlayhvcGVuSGFuZGxlc1tfZmlsZGVzXSxfb2Zmc2V0LF93aGVuY2UpOworCXJldHVybiBmdGVsbChvcGVuSGFuZGxlc1tfZmlsZGVzXSk7CisJfQogICAgIHJldHVybiAwOwogfQogCiBzaXplX3QgX0NERUNMIHN0dWJfcmVhZChpbnQgX2ZpbGRlcywgdm9pZCAqX2J1Ziwgc2l6ZV90IF9uYnl0ZSkKIHsKICAgICBpZiAoX2ZpbGRlcyA+PSAzKQotICAgICAgICByZXR1cm4gZnJlYWQoX2J1ZiwxLF9uYnl0ZSxvcGVuSGFuZGxlc1tfZmlsZGVzXSk7CisJcmV0dXJuIGZyZWFkKF9idWYsMSxfbmJ5dGUsb3BlbkhhbmRsZXNbX2ZpbGRlc10pOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMjcsMTggKzMyNywxOCBAQAogICAgIFdPUkQgZXJyb3I7CiAKICAgICBpZiAoaW5pdENvbXBsZXRlKSB7Ci0gICAgICAgIGlmIChSMF9EZWxldGVGaWxlKChjaGFyKilfcGF0aCwwLCZlcnJvcikpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisJaWYgKFIwX0RlbGV0ZUZpbGUoKGNoYXIqKV9wYXRoLDAsJmVycm9yKSkKKwkgICAgcmV0dXJuIDA7CisJcmV0dXJuIC0xOworCX0KICAgICBlbHNlCi0gICAgICAgIHJldHVybiBpX3JlbW92ZShfcGF0aCk7CisJcmV0dXJuIGlfcmVtb3ZlKF9wYXRoKTsKIH0KIAogc2l6ZV90IF9DREVDTCBzdHViX3dyaXRlKGludCBfZmlsZGVzLCBjb25zdCB2b2lkICpfYnVmLCBzaXplX3QgX25ieXRlKQogewogICAgIGlmIChfZmlsZGVzID49IDMpCi0gICAgICAgIHJldHVybiBmd3JpdGUoX2J1ZiwxLF9uYnl0ZSxvcGVuSGFuZGxlc1tfZmlsZGVzXSk7CisJcmV0dXJuIGZ3cml0ZShfYnVmLDEsX25ieXRlLG9wZW5IYW5kbGVzW19maWxkZXNdKTsKICAgICByZXR1cm4gX25ieXRlOwogfQogCkBAIC0zNTYsNyArMzU2LDcgQEAKIHsKICAgICBXT1JEIGVycm9yOwogICAgIGlmIChpbml0Q29tcGxldGUpCi0gICAgICAgIFIwX1NldEZpbGVBdHRyaWJ1dGVzKChjaGFyKilmaWxlbmFtZSxhdHRyaWIsJmVycm9yKTsKKwlSMF9TZXRGaWxlQXR0cmlidXRlcygoY2hhciopZmlsZW5hbWUsYXR0cmliLCZlcnJvcik7CiB9CiAKIC8qIFJldHVybiB0aGUgY3VycmVudCBkYXRlIGluIGRheXMgc2luY2UgMS8xLzE5ODAgKi8KQEAgLTM4MCw1OSArMzgwLDU5IEBACiAKICAgICAvKiBGaW5kIGFuIGVtcHR5IGZpbGUgaGFuZGxlIHRvIHVzZSAqLwogICAgIGZvciAoaSA9IDM7IGkgPCBNQVhfRklMRVM7IGkrKykgewotICAgICAgICBpZiAoIW9wZW5IYW5kbGVzW2ldKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlpZiAoIW9wZW5IYW5kbGVzW2ldKQorCSAgICBicmVhazsKKwl9CiAgICAgaWYgKG9wZW5IYW5kbGVzW2ldKQotICAgICAgICByZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogCiAgICAgLyogRmluZCB0aGUgb3BlbiBmbGFncyB0byB1c2UgKi8KICAgICBpZiAoX29mbGFnICYgX19fT19UUlVOQykKLSAgICAgICAgc3RyY3B5KG1vZGUsInciKTsKKwlzdHJjcHkobW9kZSwidyIpOwogICAgIGVsc2UgaWYgKF9vZmxhZyAmIF9fX09fQ1JFQVQpCi0gICAgICAgIHN0cmNweShtb2RlLCJhIik7CisJc3RyY3B5KG1vZGUsImEiKTsKICAgICBlbHNlCi0gICAgICAgIHN0cmNweShtb2RlLCJyIik7CisJc3RyY3B5KG1vZGUsInIiKTsKICAgICBpZiAoX29mbGFnICYgX19fT19CSU5BUlkpCi0gICAgICAgIHN0cmNhdChtb2RlLCJiIik7CisJc3RyY2F0KG1vZGUsImIiKTsKICAgICBpZiAoX29mbGFnICYgX19fT19URVhUKQotICAgICAgICBzdHJjYXQobW9kZSwidCIpOworCXN0cmNhdChtb2RlLCJ0Iik7CiAKICAgICAvKiBPcGVuIHRoZSBmaWxlIGFuZCBzdG9yZSB0aGUgZmlsZSBoYW5kbGUgKi8KICAgICBpZiAoKG9wZW5IYW5kbGVzW2ldID0gZm9wZW4oX3BhdGgsbW9kZSkpID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKKwlyZXR1cm4gLTE7CiAgICAgcmV0dXJuIGk7CiB9CiAKIGludCBfQ0RFQ0wgc3R1Yl9jbG9zZShpbnQgX2ZpbGRlcykKIHsKICAgICBpZiAoX2ZpbGRlcyA+PSAzICYmIG9wZW5IYW5kbGVzW19maWxkZXNdKSB7Ci0gICAgICAgIGZjbG9zZShvcGVuSGFuZGxlc1tfZmlsZGVzXSk7Ci0gICAgICAgIG9wZW5IYW5kbGVzW19maWxkZXNdID0gTlVMTDsKLSAgICAgICAgfQorCWZjbG9zZShvcGVuSGFuZGxlc1tfZmlsZGVzXSk7CisJb3BlbkhhbmRsZXNbX2ZpbGRlc10gPSBOVUxMOworCX0KICAgICByZXR1cm4gMDsKIH0KIAogb2ZmX3QgX0NERUNMIHN0dWJfbHNlZWsoaW50IF9maWxkZXMsIG9mZl90IF9vZmZzZXQsIGludCBfd2hlbmNlKQogewogICAgIGlmIChfZmlsZGVzID49IDMpIHsKLSAgICAgICAgZnNlZWsob3BlbkhhbmRsZXNbX2ZpbGRlc10sX29mZnNldCxfd2hlbmNlKTsKLSAgICAgICAgcmV0dXJuIGZ0ZWxsKG9wZW5IYW5kbGVzW19maWxkZXNdKTsKLSAgICAgICAgfQorCWZzZWVrKG9wZW5IYW5kbGVzW19maWxkZXNdLF9vZmZzZXQsX3doZW5jZSk7CisJcmV0dXJuIGZ0ZWxsKG9wZW5IYW5kbGVzW19maWxkZXNdKTsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKIHNpemVfdCBfQ0RFQ0wgc3R1Yl9yZWFkKGludCBfZmlsZGVzLCB2b2lkICpfYnVmLCBzaXplX3QgX25ieXRlKQogewogICAgIGlmIChfZmlsZGVzID49IDMpCi0gICAgICAgIHJldHVybiBmcmVhZChfYnVmLDEsX25ieXRlLG9wZW5IYW5kbGVzW19maWxkZXNdKTsKKwlyZXR1cm4gZnJlYWQoX2J1ZiwxLF9uYnl0ZSxvcGVuSGFuZGxlc1tfZmlsZGVzXSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHNpemVfdCBfQ0RFQ0wgc3R1Yl93cml0ZShpbnQgX2ZpbGRlcywgY29uc3Qgdm9pZCAqX2J1Ziwgc2l6ZV90IF9uYnl0ZSkKIHsKICAgICBpZiAoX2ZpbGRlcyA+PSAzKQotICAgICAgICByZXR1cm4gZndyaXRlKF9idWYsMSxfbmJ5dGUsb3BlbkhhbmRsZXNbX2ZpbGRlc10pOworCXJldHVybiBmd3JpdGUoX2J1ZiwxLF9uYnl0ZSxvcGVuSGFuZGxlc1tfZmlsZGVzXSk7CiAgICAgcmV0dXJuIF9uYnl0ZTsKIH0KIApAQCAtNDQ0LDcgKzQ0NCw3IEBACiAKIGludCBfQ0RFQ0wgc3R1Yl91bmxpbmsoY29uc3QgY2hhciAqX3BhdGgpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgcmV0dXJuIC0xOwogfQogCkBAIC00NTQsNyArNDU0LDcgQEAKIAogaW50IF9DREVDTCBzdHViX3JlbmFtZShjb25zdCBjaGFyICpfb2xkLCBjb25zdCBjaGFyICpfbmV3KQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIQorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzISAqLwogICAgIHJldHVybiAtMTsKIH0KIApAQCAtNDYyLDExICs0NjIsMTEgQEAKIHsKICAgICB1aW50IF9hdHRyID0gMDsKICAgICBpZiAoYXR0cmliICYgX19BX1JET05MWSkKLSAgICAgICAgX2F0dHIgfD0gRklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7CisJX2F0dHIgfD0gRklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7CiAgICAgaWYgKGF0dHJpYiAmIF9fQV9ISURERU4pCi0gICAgICAgIF9hdHRyIHw9IEZJTEVfQVRUUklCVVRFX0hJRERFTjsKKwlfYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9ISURERU47CiAgICAgaWYgKGF0dHJpYiAmIF9fQV9TWVNURU0pCi0gICAgICAgIF9hdHRyIHw9IEZJTEVfQVRUUklCVVRFX1NZU1RFTTsKKwlfYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9TWVNURU07CiAgICAgUE1fc2V0RmlsZUF0dHIoZmlsZW5hbWUsX2F0dHIpOwogfQogCkBAIC01MDYsNyArNTA2LDcgQEAKIHsKICAgICBGSUxFU1RBVFVTMyBzOwogICAgIGlmIChEb3NRdWVyeVBhdGhJbmZvKChQU1opZmlsZW5hbWUsRklMX1NUQU5EQVJELChQVk9JRCkmcyxzaXplb2YocykpKQotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogICAgIHMuYXR0ckZpbGUgPSBhdHRyaWI7CiAgICAgRG9zU2V0UGF0aEluZm8oKFBTWilmaWxlbmFtZSxGSUxfU1RBTkRBUkQsKFBWT0lEKSZzLHNpemVvZihzKSwwTCk7CiB9CkBAIC01MjgsMjUgKzUyOCwyNSBAQAogCiAgICAgLyogRGV0ZXJtaW5lIG9wZW4gZmxhZ3MgKi8KICAgICBpZiAoX29mbGFnICYgX19fT19DUkVBVCkgewotICAgICAgICBpZiAoX29mbGFnICYgX19fT19FWENMKQotICAgICAgICAgICAgb3BlbmZsYWcgPSBPUEVOX0FDVElPTl9GQUlMX0lGX0VYSVNUUyB8IE9QRU5fQUNUSU9OX0NSRUFURV9JRl9ORVc7Ci0gICAgICAgIGVsc2UgaWYgKF9vZmxhZyAmIF9fX09fVFJVTkMpCi0gICAgICAgICAgICBvcGVuZmxhZyA9IE9QRU5fQUNUSU9OX1JFUExBQ0VfSUZfRVhJU1RTIHwgT1BFTl9BQ1RJT05fQ1JFQVRFX0lGX05FVzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgb3BlbmZsYWcgPSBPUEVOX0FDVElPTl9PUEVOX0lGX0VYSVNUUyB8IE9QRU5fQUNUSU9OX0NSRUFURV9JRl9ORVc7Ci0gICAgICAgIH0KKwlpZiAoX29mbGFnICYgX19fT19FWENMKQorCSAgICBvcGVuZmxhZyA9IE9QRU5fQUNUSU9OX0ZBSUxfSUZfRVhJU1RTIHwgT1BFTl9BQ1RJT05fQ1JFQVRFX0lGX05FVzsKKwllbHNlIGlmIChfb2ZsYWcgJiBfX19PX1RSVU5DKQorCSAgICBvcGVuZmxhZyA9IE9QRU5fQUNUSU9OX1JFUExBQ0VfSUZfRVhJU1RTIHwgT1BFTl9BQ1RJT05fQ1JFQVRFX0lGX05FVzsKKwllbHNlCisJICAgIG9wZW5mbGFnID0gT1BFTl9BQ1RJT05fT1BFTl9JRl9FWElTVFMgfCBPUEVOX0FDVElPTl9DUkVBVEVfSUZfTkVXOworCX0KICAgICBlbHNlIGlmIChfb2ZsYWcgJiBfX19PX1RSVU5DKQotICAgICAgICBvcGVuZmxhZyA9IE9QRU5fQUNUSU9OX1JFUExBQ0VfSUZfRVhJU1RTOworCW9wZW5mbGFnID0gT1BFTl9BQ1RJT05fUkVQTEFDRV9JRl9FWElTVFM7CiAgICAgZWxzZQotICAgICAgICBvcGVuZmxhZyA9IE9QRU5fQUNUSU9OX09QRU5fSUZfRVhJU1RTOworCW9wZW5mbGFnID0gT1BFTl9BQ1RJT05fT1BFTl9JRl9FWElTVFM7CiAKICAgICAvKiBEZXRlcm1pbmUgb3BlbiBtb2RlIGZsYWdzICovCiAgICAgaWYgKF9vZmxhZyAmIF9fX09fUkRPTkxZKQotICAgICAgICBvcGVubW9kZSA9IE9QRU5fQUNDRVNTX1JFQURPTkxZIHwgT1BFTl9TSEFSRV9ERU5ZTk9ORTsKKwlvcGVubW9kZSA9IE9QRU5fQUNDRVNTX1JFQURPTkxZIHwgT1BFTl9TSEFSRV9ERU5ZTk9ORTsKICAgICBlbHNlIGlmIChfb2ZsYWcgJiBfX19PX1dST05MWSkKLSAgICAgICAgb3Blbm1vZGUgPSBPUEVOX0FDQ0VTU19XUklURU9OTFkgfCBPUEVOX1NIQVJFX0RFTllXUklURTsKKwlvcGVubW9kZSA9IE9QRU5fQUNDRVNTX1dSSVRFT05MWSB8IE9QRU5fU0hBUkVfREVOWVdSSVRFOwogICAgIGVsc2UKLSAgICAgICAgb3Blbm1vZGUgPSBPUEVOX0FDQ0VTU19SRUFEV1JJVEUgfCBPUEVOX1NIQVJFX0RFTllXUklURTsKKwlvcGVubW9kZSA9IE9QRU5fQUNDRVNTX1JFQURXUklURSB8IE9QRU5fU0hBUkVfREVOWVdSSVRFOwogCiAgICAgLyogQ29weSB0aGUgcGF0aCB0byBhIHZhcmlhYmxlIG9uIHRoZSBzdGFjay4gV2UgbmVlZCB0byBkbyB0aGlzCiAgICAgICogZm9yIE9TLzIgYXMgd2hlbiB0aGUgZHJpdmVycyBhcmUgbG9hZGVkIGludG8gc2hhcmVkIGtlcm5lbApAQCAtNTU1LDE0ICs1NTUsMTQgQEAKICAgICAgKi8KICAgICBzdHJjcHkocGF0aCxfcGF0aCk7CiAgICAgaWYgKERvc09wZW4ocGF0aCwgJmhhbmRsZSwgJmFjdGlvbnRha2VuLCAwLCBGSUxFX05PUk1BTCwKLSAgICAgICAgICAgIG9wZW5mbGFnLCBvcGVubW9kZSwgTlVMTCkgIT0gTk9fRVJST1IpCi0gICAgICAgIHJldHVybiAtMTsKKwkgICAgb3BlbmZsYWcsIG9wZW5tb2RlLCBOVUxMKSAhPSBOT19FUlJPUikKKwlyZXR1cm4gLTE7CiAKICAgICAvKiBIYW5kbGUgYXBwZW5kIG1vZGUgb2Ygb3BlcmF0aW9uICovCiAgICAgaWYgKF9vZmxhZyAmIF9fX09fQVBQRU5EKSB7Ci0gICAgICAgIGlmIChEb3NTZXRGaWxlUHRyKGhhbmRsZSwgMCwgRklMRV9FTkQsICZlcnJvcikgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKwlpZiAoRG9zU2V0RmlsZVB0cihoYW5kbGUsIDAsIEZJTEVfRU5ELCAmZXJyb3IpICE9IE5PX0VSUk9SKQorCSAgICByZXR1cm4gLTE7CisJfQogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKQEAgLTU3OCwxNiArNTc4LDE2IEBACiAgICAgICovCiAgICAgc3RyY3B5KHBhdGgsX3BhdGgpOwogICAgIGlmIChEb3NRdWVyeVBhdGhJbmZvKHBhdGgsIEZJTF9TVEFOREFSRCwgJmZzLCBzaXplb2YoZnMpKSAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICAgICBpZiAoKF9hbW9kZSAmIFdfT0spICYmIChmcy5hdHRyRmlsZSAmIEZJTEVfUkVBRE9OTFkpKQotICAgICAgICByZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQogCiBpbnQgX0NERUNMIHN0dWJfY2xvc2UoaW50IF9maWxkZXMpCiB7CiAgICAgaWYgKERvc0Nsb3NlKF9maWxkZXMpICE9IE5PX0VSUk9SKQotICAgICAgICByZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQogCkBAIC01OTYsMTcgKzU5NiwxNyBAQAogICAgIFVMT05HICBjYkFjdHVhbCwgb3JpZ2luOwogCiAgICAgc3dpdGNoIChfd2hlbmNlKSB7Ci0gICAgICAgIGNhc2UgU0VFS19DVVI6Ci0gICAgICAgICAgICBvcmlnaW4gPSBGSUxFX0NVUlJFTlQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTRUVLX0VORDoKLSAgICAgICAgICAgIG9yaWdpbiA9IEZJTEVfRU5EOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBvcmlnaW4gPSBGSUxFX0JFR0lOOwotICAgICAgICB9CisJY2FzZSBTRUVLX0NVUjoKKwkgICAgb3JpZ2luID0gRklMRV9DVVJSRU5UOworCSAgICBicmVhazsKKwljYXNlIFNFRUtfRU5EOgorCSAgICBvcmlnaW4gPSBGSUxFX0VORDsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgb3JpZ2luID0gRklMRV9CRUdJTjsKKwl9CiAgICAgaWYgKERvc1NldEZpbGVQdHIoX2ZpbGRlcywgX29mZnNldCwgb3JpZ2luLCAmY2JBY3R1YWwpICE9IE5PX0VSUk9SKQotICAgICAgICByZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogICAgIHJldHVybiBjYkFjdHVhbDsKIH0KIApAQCAtNjIxLDE5ICs2MjEsMTkgQEAKICAgICAgKiBpbiBrZXJuZWwgc3BhY2UgYW5kIHdpbGwgY2F1c2UgRG9zUmVhZCB0byBiYWlsIGludGVybmFsbHkuCiAgICAgICovCiAgICAgd2hpbGUgKF9uYnl0ZSA+IEJVRl9TSVpFKSB7Ci0gICAgICAgIGlmIChEb3NSZWFkKF9maWxkZXMsIGZpbGVfaW9fYnVmLCBCVUZfU0laRSwgJmNiUmVhZCkgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGNiQWN0dWFsICs9IGNiUmVhZDsKLSAgICAgICAgbWVtY3B5KHAsZmlsZV9pb19idWYsQlVGX1NJWkUpOwotICAgICAgICBwICs9IEJVRl9TSVpFOwotICAgICAgICBfbmJ5dGUgLT0gQlVGX1NJWkU7Ci0gICAgICAgIH0KKwlpZiAoRG9zUmVhZChfZmlsZGVzLCBmaWxlX2lvX2J1ZiwgQlVGX1NJWkUsICZjYlJlYWQpICE9IE5PX0VSUk9SKQorCSAgICByZXR1cm4gLTE7CisJY2JBY3R1YWwgKz0gY2JSZWFkOworCW1lbWNweShwLGZpbGVfaW9fYnVmLEJVRl9TSVpFKTsKKwlwICs9IEJVRl9TSVpFOworCV9uYnl0ZSAtPSBCVUZfU0laRTsKKwl9CiAgICAgaWYgKF9uYnl0ZSkgewotICAgICAgICBpZiAoRG9zUmVhZChfZmlsZGVzLCBmaWxlX2lvX2J1ZiwgX25ieXRlLCAmY2JSZWFkKSAhPSBOT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgY2JBY3R1YWwgKz0gY2JSZWFkOwotICAgICAgICBtZW1jcHkocCxmaWxlX2lvX2J1ZixfbmJ5dGUpOwotICAgICAgICB9CisJaWYgKERvc1JlYWQoX2ZpbGRlcywgZmlsZV9pb19idWYsIF9uYnl0ZSwgJmNiUmVhZCkgIT0gTk9fRVJST1IpCisJICAgIHJldHVybiAtMTsKKwljYkFjdHVhbCArPSBjYlJlYWQ7CisJbWVtY3B5KHAsZmlsZV9pb19idWYsX25ieXRlKTsKKwl9CiAgICAgcmV0dXJuIGNiQWN0dWFsOwogfQogCkBAIC02NDgsMTkgKzY0OCwxOSBAQAogICAgICAqIGluIGtlcm5lbCBzcGFjZSBhbmQgd2lsbCBjYXVzZSBEb3NXcml0ZSB0byBiYWlsIGludGVybmFsbHkuCiAgICAgICovCiAgICAgd2hpbGUgKF9uYnl0ZSA+IEJVRl9TSVpFKSB7Ci0gICAgICAgIG1lbWNweShmaWxlX2lvX2J1ZixwLEJVRl9TSVpFKTsKLSAgICAgICAgaWYgKERvc1dyaXRlKF9maWxkZXMsIGZpbGVfaW9fYnVmLCBCVUZfU0laRSwgJmNiV3JpdGUpICE9IE5PX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBjYkFjdHVhbCArPSBjYldyaXRlOwotICAgICAgICBwICs9IEJVRl9TSVpFOwotICAgICAgICBfbmJ5dGUgLT0gQlVGX1NJWkU7Ci0gICAgICAgIH0KKwltZW1jcHkoZmlsZV9pb19idWYscCxCVUZfU0laRSk7CisJaWYgKERvc1dyaXRlKF9maWxkZXMsIGZpbGVfaW9fYnVmLCBCVUZfU0laRSwgJmNiV3JpdGUpICE9IE5PX0VSUk9SKQorCSAgICByZXR1cm4gLTE7CisJY2JBY3R1YWwgKz0gY2JXcml0ZTsKKwlwICs9IEJVRl9TSVpFOworCV9uYnl0ZSAtPSBCVUZfU0laRTsKKwl9CiAgICAgaWYgKF9uYnl0ZSkgewotICAgICAgICBtZW1jcHkoZmlsZV9pb19idWYscCxfbmJ5dGUpOwotICAgICAgICBpZiAoRG9zV3JpdGUoX2ZpbGRlcywgZmlsZV9pb19idWYsIF9uYnl0ZSwgJmNiV3JpdGUpICE9IE5PX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBjYkFjdHVhbCArPSBjYldyaXRlOwotICAgICAgICB9CisJbWVtY3B5KGZpbGVfaW9fYnVmLHAsX25ieXRlKTsKKwlpZiAoRG9zV3JpdGUoX2ZpbGRlcywgZmlsZV9pb19idWYsIF9uYnl0ZSwgJmNiV3JpdGUpICE9IE5PX0VSUk9SKQorCSAgICByZXR1cm4gLTE7CisJY2JBY3R1YWwgKz0gY2JXcml0ZTsKKwl9CiAgICAgcmV0dXJuIGNiQWN0dWFsOwogfQogCkBAIC02NzUsNyArNjc1LDcgQEAKICAgICAgKi8KICAgICBzdHJjcHkocGF0aCxfcGF0aCk7CiAgICAgaWYgKERvc0RlbGV0ZShwYXRoKSAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjg0LDcgKzY4NCw3IEBACiAgICAgVUxPTkcgIGh0eXBlLCBmbGFnczsKIAogICAgIGlmIChEb3NRdWVyeUhUeXBlKF9maWxkZXMsICZodHlwZSwgJmZsYWdzKSAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgcmV0dXJuICgoaHR5cGUgJiAweEZGKSA9PSBIQU5EVFlQRV9ERVZJQ0UpOwogfQogCkBAIC03MDAsNyArNzAwLDcgQEAKICAgICAgKi8KICAgICBzdHJjcHkocGF0aCxfcGF0aCk7CiAgICAgaWYgKERvc0RlbGV0ZShwYXRoKSAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNzE3LDcgKzcxNyw3IEBACiAgICAgc3RyY3B5KG9sZCxfb2xkKTsKICAgICBzdHJjcHkobmV3LF9uZXcpOwogICAgIGlmIChEb3NNb3ZlKG9sZCwgbmV3KSAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNzM0LDIzICs3MzQsMjMgQEAKIGludCBfQ0RFQ0wgc3R1Yl9vcGVuKGNvbnN0IGNoYXIgKl9wYXRoLCBpbnQgX29mbGFnLCB1bnNpZ25lZCBfbW9kZSkKIHsKICAgICBpbnQgb2ZsYWdfdGFiW10gPSB7Ci0gICAgICAgIF9fX09fUkRPTkxZLCAgICBPX1JET05MWSwKLSAgICAgICAgX19fT19XUk9OTFksICAgIE9fV1JPTkxZLAotICAgICAgICBfX19PX1JEV1IsICAgICAgT19SRFdSLAotICAgICAgICBfX19PX0JJTkFSWSwgICAgT19CSU5BUlksCi0gICAgICAgIF9fX09fVEVYVCwgICAgICBPX1RFWFQsCi0gICAgICAgIF9fX09fQ1JFQVQsICAgICBPX0NSRUFULAotICAgICAgICBfX19PX0VYQ0wsICAgICAgT19FWENMLAotICAgICAgICBfX19PX1RSVU5DLCAgICAgT19UUlVOQywKLSAgICAgICAgX19fT19BUFBFTkQsICAgIE9fQVBQRU5ELAotICAgICAgICB9OworCV9fX09fUkRPTkxZLCAgICBPX1JET05MWSwKKwlfX19PX1dST05MWSwgICAgT19XUk9OTFksCisJX19fT19SRFdSLCAgICAgIE9fUkRXUiwKKwlfX19PX0JJTkFSWSwgICAgT19CSU5BUlksCisJX19fT19URVhULCAgICAgIE9fVEVYVCwKKwlfX19PX0NSRUFULCAgICAgT19DUkVBVCwKKwlfX19PX0VYQ0wsICAgICAgT19FWENMLAorCV9fX09fVFJVTkMsICAgICBPX1RSVU5DLAorCV9fX09fQVBQRU5ELCAgICBPX0FQUEVORCwKKwl9OwogICAgIGludCBpLG9mbGFnID0gMDsKIAogICAgIC8qIFRyYW5zbGF0ZSB0aGUgb2ZsYWcncyB0byB0aGUgT1MgZGVwZW5kZW50IHZlcnNpb25zICovCiAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihvZmxhZ190YWIpIC8gc2l6ZW9mKGludCk7IGkgKz0gMikgewotICAgICAgICBpZiAoX29mbGFnICYgb2ZsYWdfdGFiW2ldKQotICAgICAgICAgICAgb2ZsYWcgfD0gb2ZsYWdfdGFiW2krMV07Ci0gICAgICAgIH0KKwlpZiAoX29mbGFnICYgb2ZsYWdfdGFiW2ldKQorCSAgICBvZmxhZyB8PSBvZmxhZ190YWJbaSsxXTsKKwl9CiAgICAgcmV0dXJuIG9wZW4oX3BhdGgsb2ZsYWcsX21vZGUpOwogfQogCkBAIC04MjUsNCArODI1LDMgQEAKICAgICByZXR1cm4gKHZvaWQqKXNpZ25hbChzaWcsKF9fY29kZV9wdHIpaGFuZGxlcik7CiAjZW5kaWYKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL3BlbG9hZGVyLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vcGVsb2FkZXIuYwppbmRleCBiOWJlYzRhLi5hMTM0YmIwIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vcGVsb2FkZXIuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vcGVsb2FkZXIuYwpAQCAtNzksMzUgKzc5LDM1IEBACiAgICAgcmVzdWx0ID0gUEVfaW52YWxpZERMTEltYWdlOwogICAgIGZzZWVrKGYsIHN0YXJ0T2Zmc2V0LCBTRUVLX1NFVCk7CiAgICAgaWYgKGZyZWFkKCZleGVoZHIsIDEsIHNpemVvZihleGVoZHIpLCBmKSAhPSBzaXplb2YoZXhlaGRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBpZiAoZXhlaGRyLnNpZ25hdHVyZSAhPSAweDVBNEQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAKICAgICAvKiBOb3cgc2VlayB0byB0aGUgc3RhcnQgb2YgdGhlIFBFIGhlYWRlciBkZWZpbmVkIGF0IG9mZnNldCAweDNDCiAgICAgICogaW4gdGhlIE1TLURPUyBFWEUgaGVhZGVyLCBhbmQgcmVhZCB0aGUgc2lnbmF0dXJlIGFuZCBjaGVjayBpdC4KICAgICAgKi8KICAgICBmc2VlayhmLCBzdGFydE9mZnNldCsweDNDLCBTRUVLX1NFVCk7CiAgICAgaWYgKGZyZWFkKCZvZmZzZXQsIDEsIHNpemVvZihvZmZzZXQpLCBmKSAhPSBzaXplb2Yob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBmc2VlayhmLCBzdGFydE9mZnNldCtvZmZzZXQsIFNFRUtfU0VUKTsKICAgICBpZiAoZnJlYWQoJnNpZ25hdHVyZSwgMSwgc2l6ZW9mKHNpZ25hdHVyZSksIGYpICE9IHNpemVvZihzaWduYXR1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogICAgIGlmIChzaWduYXR1cmUgIT0gMHgwMDAwNDU1MCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKIAogICAgIC8qIE5vdyByZWFkIHRoZSBQRSBmaWxlIGhlYWRlciBhbmQgY2hlY2sgdGhhdCBpdCBpcyBjb3JyZWN0ICovCiAgICAgaWYgKGZyZWFkKGZpbGVoZHIsIDEsIHNpemVvZigqZmlsZWhkciksIGYpICE9IHNpemVvZigqZmlsZWhkcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgaWYgKGZpbGVoZHItPk1hY2hpbmUgIT0gSU1BR0VfRklMRV9NQUNISU5FX0kzODYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgaWYgKCEoZmlsZWhkci0+Q2hhcmFjdGVyaXN0aWNzICYgSU1BR0VfRklMRV8zMkJJVF9NQUNISU5FKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBpZiAoIShmaWxlaGRyLT5DaGFyYWN0ZXJpc3RpY3MgJiBJTUFHRV9GSUxFX0RMTCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgaWYgKGZyZWFkKG9wdGhkciwgMSwgc2l6ZW9mKCpvcHRoZHIpLCBmKSAhPSBzaXplb2YoKm9wdGhkcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgaWYgKG9wdGhkci0+TWFnaWMgIT0gMHgxMEIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAKICAgICAvKiBTdWNjZXNzLCBzbyByZXR1cm4gdHJ1ZSEgKi8KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzOCwxNSArMTM4LDE1IEBACiAKICAgICAvKiBSZWFkIHRoZSBQRSBmaWxlIGhlYWRlcnMgZnJvbSBkaXNrICovCiAgICAgaWYgKCFQRV9yZWFkSGVhZGVyKGYsc3RhcnRPZmZzZXQsJmZpbGVoZHIsJm9wdGhkcikpCi0gICAgICAgIHJldHVybiAweEZGRkZGRkZGOworCXJldHVybiAweEZGRkZGRkZGOwogCiAgICAgLyogU2NhbiBhbGwgdGhlIHNlY3Rpb24gaGVhZGVycyBzdW1taW5nIHVwIHRoZSB0b3RhbCBzaXplICovCiAgICAgc2l6ZSA9IG9wdGhkci5TaXplT2ZIZWFkZXJzOwogICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlaGRyLk51bWJlck9mU2VjdGlvbnM7IGkrKykgewotICAgICAgICBpZiAoZnJlYWQoJnNlY3RoZHIsIDEsIHNpemVvZihzZWN0aGRyKSwgZikgIT0gc2l6ZW9mKHNlY3RoZHIpKQotICAgICAgICAgICAgcmV0dXJuIDB4RkZGRkZGRkY7Ci0gICAgICAgIHNpemUgKz0gc2VjdGhkci5TaXplT2ZSYXdEYXRhOwotICAgICAgICB9CisJaWYgKGZyZWFkKCZzZWN0aGRyLCAxLCBzaXplb2Yoc2VjdGhkciksIGYpICE9IHNpemVvZihzZWN0aGRyKSkKKwkgICAgcmV0dXJuIDB4RkZGRkZGRkY7CisJc2l6ZSArPSBzZWN0aGRyLlNpemVPZlJhd0RhdGE7CisJfQogICAgIHJldHVybiBzaXplOwogfQogCkBAIC0xOTksNyArMTk5LDcgQEAKIAogICAgIC8qIFJlYWQgdGhlIFBFIGZpbGUgaGVhZGVycyBmcm9tIGRpc2sgKi8KICAgICBpZiAoIVBFX3JlYWRIZWFkZXIoZixzdGFydE9mZnNldCwmZmlsZWhkciwmb3B0aGRyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAKICAgICAvKiBTY2FuIGFsbCB0aGUgc2VjdGlvbiBoZWFkZXJzIGFuZCBmaW5kIHRoZSBuZWNlc3Nhcnkgc2VjdGlvbnMgKi8KICAgICB0ZXh0X29mZiA9IGRhdGFfb2ZmID0gcmVsb2Nfb2ZmID0gZXhwb3J0X29mZiA9IDA7CkBAIC0yMDgsNTYgKzIwOCw1NiBAQAogICAgIGV4cG9ydF9hZGRyID0gZXhwb3J0X3NpemUgPSBleHBvcnRfZW5kID0gMDsKICAgICByZWxvY19zaXplID0gMDsKICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZWhkci5OdW1iZXJPZlNlY3Rpb25zOyBpKyspIHsKLSAgICAgICAgaWYgKGZyZWFkKCZzZWN0aGRyLCAxLCBzaXplb2Yoc2VjdGhkciksIGYpICE9IHNpemVvZihzZWN0aGRyKSkKLSAgICAgICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgICAgIGlmIChzdHJjbXAoc2VjdGhkci5OYW1lLCAiLmVkYXRhIikgPT0gMCB8fCBzdHJjbXAoc2VjdGhkci5OYW1lLCAiLnJkYXRhIikgPT0gMCkgewotICAgICAgICAgICAgLyogRXhwb3J0cyBzZWN0aW9uICovCi0gICAgICAgICAgICBleHBvcnRfb2ZmID0gc2VjdGhkci5Qb2ludGVyVG9SYXdEYXRhOwotICAgICAgICAgICAgZXhwb3J0X2FkZHIgPSBzZWN0aGRyLlZpcnR1YWxBZGRyZXNzOwotICAgICAgICAgICAgZXhwb3J0X3NpemUgPSBzZWN0aGRyLlNpemVPZlJhd0RhdGE7Ci0gICAgICAgICAgICBleHBvcnRfZW5kID0gZXhwb3J0X2FkZHIgKyBleHBvcnRfc2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKHNlY3RoZHIuTmFtZSwgIi5pZGF0YSIpID09IDApIHsKLSAgICAgICAgICAgIC8qIEltcG9ydHMgc2VjdGlvbiwgaWdub3JlICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChzZWN0aGRyLk5hbWUsICIucmVsb2MiKSA9PSAwKSB7Ci0gICAgICAgICAgICAvKiBSZWxvY2F0aW9ucyBzZWN0aW9uICovCi0gICAgICAgICAgICByZWxvY19vZmYgPSBzZWN0aGRyLlBvaW50ZXJUb1Jhd0RhdGE7Ci0gICAgICAgICAgICByZWxvY19zaXplID0gc2VjdGhkci5TaXplT2ZSYXdEYXRhOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICghdGV4dF9vZmYgJiYgc2VjdGhkci5DaGFyYWN0ZXJpc3RpY3MgJiBJTUFHRV9TQ05fQ05UX0NPREUpIHsKLSAgICAgICAgICAgIC8qIENvZGUgc2VjdGlvbiAqLwotICAgICAgICAgICAgdGV4dF9vZmYgPSBzZWN0aGRyLlBvaW50ZXJUb1Jhd0RhdGE7Ci0gICAgICAgICAgICB0ZXh0X2FkZHIgPSBzZWN0aGRyLlZpcnR1YWxBZGRyZXNzOwotICAgICAgICAgICAgdGV4dF9zaXplID0gc2VjdGhkci5TaXplT2ZSYXdEYXRhOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICghZGF0YV9vZmYgJiYgc2VjdGhkci5DaGFyYWN0ZXJpc3RpY3MgJiBJTUFHRV9TQ05fQ05UX0lOSVRJQUxJWkVEX0RBVEEpIHsKLSAgICAgICAgICAgIC8qIERhdGEgc2VjdGlvbiAqLwotICAgICAgICAgICAgZGF0YV9vZmYgPSBzZWN0aGRyLlBvaW50ZXJUb1Jhd0RhdGE7Ci0gICAgICAgICAgICBkYXRhX2FkZHIgPSBzZWN0aGRyLlZpcnR1YWxBZGRyZXNzOwotICAgICAgICAgICAgZGF0YV9zaXplID0gc2VjdGhkci5TaXplT2ZSYXdEYXRhOwotICAgICAgICAgICAgZGF0YV9lbmQgPSBkYXRhX2FkZHIgKyBkYXRhX3NpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoZnJlYWQoJnNlY3RoZHIsIDEsIHNpemVvZihzZWN0aGRyKSwgZikgIT0gc2l6ZW9mKHNlY3RoZHIpKQorCSAgICBnb3RvIEVycm9yOworCWlmIChzdHJjbXAoc2VjdGhkci5OYW1lLCAiLmVkYXRhIikgPT0gMCB8fCBzdHJjbXAoc2VjdGhkci5OYW1lLCAiLnJkYXRhIikgPT0gMCkgeworCSAgICAvKiBFeHBvcnRzIHNlY3Rpb24gKi8KKwkgICAgZXhwb3J0X29mZiA9IHNlY3RoZHIuUG9pbnRlclRvUmF3RGF0YTsKKwkgICAgZXhwb3J0X2FkZHIgPSBzZWN0aGRyLlZpcnR1YWxBZGRyZXNzOworCSAgICBleHBvcnRfc2l6ZSA9IHNlY3RoZHIuU2l6ZU9mUmF3RGF0YTsKKwkgICAgZXhwb3J0X2VuZCA9IGV4cG9ydF9hZGRyICsgZXhwb3J0X3NpemU7CisJICAgIH0KKwllbHNlIGlmIChzdHJjbXAoc2VjdGhkci5OYW1lLCAiLmlkYXRhIikgPT0gMCkgeworCSAgICAvKiBJbXBvcnRzIHNlY3Rpb24sIGlnbm9yZSAqLworCSAgICB9CisJZWxzZSBpZiAoc3RyY21wKHNlY3RoZHIuTmFtZSwgIi5yZWxvYyIpID09IDApIHsKKwkgICAgLyogUmVsb2NhdGlvbnMgc2VjdGlvbiAqLworCSAgICByZWxvY19vZmYgPSBzZWN0aGRyLlBvaW50ZXJUb1Jhd0RhdGE7CisJICAgIHJlbG9jX3NpemUgPSBzZWN0aGRyLlNpemVPZlJhd0RhdGE7CisJICAgIH0KKwllbHNlIGlmICghdGV4dF9vZmYgJiYgc2VjdGhkci5DaGFyYWN0ZXJpc3RpY3MgJiBJTUFHRV9TQ05fQ05UX0NPREUpIHsKKwkgICAgLyogQ29kZSBzZWN0aW9uICovCisJICAgIHRleHRfb2ZmID0gc2VjdGhkci5Qb2ludGVyVG9SYXdEYXRhOworCSAgICB0ZXh0X2FkZHIgPSBzZWN0aGRyLlZpcnR1YWxBZGRyZXNzOworCSAgICB0ZXh0X3NpemUgPSBzZWN0aGRyLlNpemVPZlJhd0RhdGE7CisJICAgIH0KKwllbHNlIGlmICghZGF0YV9vZmYgJiYgc2VjdGhkci5DaGFyYWN0ZXJpc3RpY3MgJiBJTUFHRV9TQ05fQ05UX0lOSVRJQUxJWkVEX0RBVEEpIHsKKwkgICAgLyogRGF0YSBzZWN0aW9uICovCisJICAgIGRhdGFfb2ZmID0gc2VjdGhkci5Qb2ludGVyVG9SYXdEYXRhOworCSAgICBkYXRhX2FkZHIgPSBzZWN0aGRyLlZpcnR1YWxBZGRyZXNzOworCSAgICBkYXRhX3NpemUgPSBzZWN0aGRyLlNpemVPZlJhd0RhdGE7CisJICAgIGRhdGFfZW5kID0gZGF0YV9hZGRyICsgZGF0YV9zaXplOworCSAgICB9CisJfQogCiAgICAgLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbGwgdGhlIHNlY3Rpb25zIHdlIG5lZWQgKi8KICAgICBpZiAoIXRleHRfb2ZmIHx8ICFkYXRhX29mZiB8fCAhZXhwb3J0X29mZiB8fCAhcmVsb2Nfb2ZmKSB7Ci0gICAgICAgIHJlc3VsdCA9IFBFX2ludmFsaWRETExJbWFnZTsKLSAgICAgICAgZ290byBFcnJvcjsKLSAgICAgICAgfQorCXJlc3VsdCA9IFBFX2ludmFsaWRETExJbWFnZTsKKwlnb3RvIEVycm9yOworCX0KIAogICAgIC8qIEZpbmQgdGhlIHNpemUgb2YgdGhlIGltYWdlIHRvIGxvYWQgYWxsb2NhdGUgbWVtb3J5IGZvciBpdCAqLwogICAgIGltYWdlX3NpemUgPSBNQVgoZXhwb3J0X2VuZCxkYXRhX2VuZCkgLSB0ZXh0X2FkZHI7CiAgICAgKnNpemUgPSBzaXplb2YoUEVfTU9EVUxFKSArIGltYWdlX3NpemUgKyA0MDk2OwogICAgIGlmIChzaGFyZWQpCi0gICAgICAgIGhNb2QgPSBQTV9tYWxsb2NTaGFyZWQoKnNpemUpOworCWhNb2QgPSBQTV9tYWxsb2NTaGFyZWQoKnNpemUpOwogICAgIGVsc2UKLSAgICAgICAgaE1vZCA9IFBNX21hbGxvYygqc2l6ZSk7CisJaE1vZCA9IFBNX21hbGxvYygqc2l6ZSk7CiAgICAgcmVsb2MgPSBQTV9tYWxsb2MocmVsb2Nfc2l6ZSk7CiAgICAgaWYgKCFoTW9kIHx8ICFyZWxvYykgewotICAgICAgICByZXN1bHQgPSBQRV9vdXRPZk1lbW9yeTsKLSAgICAgICAgZ290byBFcnJvcjsKLSAgICAgICAgfQorCXJlc3VsdCA9IFBFX291dE9mTWVtb3J5OworCWdvdG8gRXJyb3I7CisJfQogCiAgICAgaE1vZC0+dGV4dCA9ICh1Y2hhciopUk9VTkRfNEsoKHVsb25nKWhNb2QgKyBzaXplb2YoUEVfTU9EVUxFKSk7CiAgICAgaE1vZC0+ZGF0YSA9ICh1Y2hhciopKCh1bG9uZyloTW9kLT50ZXh0ICsgKGRhdGFfYWRkciAtIHRleHRfYWRkcikpOwpAQCAtMjcyLDQ4ICsyNzIsNDggQEAKICAgICByZXN1bHQgPSBQRV9pbnZhbGlkRExMSW1hZ2U7CiAgICAgZnNlZWsoZiwgc3RhcnRPZmZzZXQrdGV4dF9vZmYsIFNFRUtfU0VUKTsKICAgICBpZiAoZnJlYWQoaE1vZC0+dGV4dCwgMSwgdGV4dF9zaXplLCBmKSAhPSB0ZXh0X3NpemUpCi0gICAgICAgIGdvdG8gRXJyb3I7CisJZ290byBFcnJvcjsKICAgICBmc2VlayhmLCBzdGFydE9mZnNldCtkYXRhX29mZiwgU0VFS19TRVQpOwogICAgIGlmIChmcmVhZChoTW9kLT5kYXRhLCAxLCBkYXRhX3NpemUsIGYpICE9IGRhdGFfc2l6ZSkKLSAgICAgICAgZ290byBFcnJvcjsKKwlnb3RvIEVycm9yOwogICAgIGZzZWVrKGYsIHN0YXJ0T2Zmc2V0K2V4cG9ydF9vZmYsIFNFRUtfU0VUKTsKICAgICBpZiAoZnJlYWQoaE1vZC0+ZXhwb3J0LCAxLCBleHBvcnRfc2l6ZSwgZikgIT0gZXhwb3J0X3NpemUpCi0gICAgICAgIGdvdG8gRXJyb3I7CisJZ290byBFcnJvcjsKICAgICBmc2VlayhmLCBzdGFydE9mZnNldCtyZWxvY19vZmYsIFNFRUtfU0VUKTsKICAgICBpZiAoZnJlYWQocmVsb2MsIDEsIHJlbG9jX3NpemUsIGYpICE9IHJlbG9jX3NpemUpCi0gICAgICAgIGdvdG8gRXJyb3I7CisJZ290byBFcnJvcjsKIAogICAgIC8qIE5vdyBwZXJmb3JtIHJlbG9jYXRpb25zIG9uIGFsbCBzZWN0aW9ucyBpbiB0aGUgaW1hZ2UgKi8KICAgICBkZWx0YSA9ICh1bG9uZyloTW9kLT50ZXh0IC0gb3B0aGRyLkltYWdlQmFzZSAtIHRleHRfYWRkcjsKICAgICBiYXNlUmVsb2MgPSAoQkFTRV9SRUxPQ0FUSU9OKilyZWxvYzsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIC8qIENoZWNrIGZvciB0ZXJtaW5hdGlvbiBjb25kaXRpb24gKi8KLSAgICAgICAgaWYgKCFiYXNlUmVsb2MtPlBhZ2VSVkEgfHwgIWJhc2VSZWxvYy0+QmxvY2tTaXplKQotICAgICAgICAgICAgYnJlYWs7CisJLyogQ2hlY2sgZm9yIHRlcm1pbmF0aW9uIGNvbmRpdGlvbiAqLworCWlmICghYmFzZVJlbG9jLT5QYWdlUlZBIHx8ICFiYXNlUmVsb2MtPkJsb2NrU2l6ZSkKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgLyogRG8gZml4dXBzICovCi0gICAgICAgIHBhZ2VPZmZzZXQgPSBiYXNlUmVsb2MtPlBhZ2VSVkEgLSBoTW9kLT50ZXh0QmFzZTsKLSAgICAgICAgbnVtRml4dXBzID0gKGJhc2VSZWxvYy0+QmxvY2tTaXplIC0gc2l6ZW9mKEJBU0VfUkVMT0NBVElPTikpIC8gc2l6ZW9mKHVzaG9ydCk7Ci0gICAgICAgIGZpeHVwID0gKHVzaG9ydCopKGJhc2VSZWxvYyArIDEpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtRml4dXBzOyBpKyspIHsKLSAgICAgICAgICAgIHJlbG9jVHlwZSA9ICpmaXh1cCA+PiAxMjsKLSAgICAgICAgICAgIGlmIChyZWxvY1R5cGUpIHsKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBwYWdlT2Zmc2V0ICsgKCpmaXh1cCAmIDB4MEZGRik7Ci0gICAgICAgICAgICAgICAgKih1bG9uZyopKGhNb2QtPnRleHQgKyBvZmZzZXQpICs9IGRlbHRhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpeHVwKys7Ci0gICAgICAgICAgICB9CisJLyogRG8gZml4dXBzICovCisJcGFnZU9mZnNldCA9IGJhc2VSZWxvYy0+UGFnZVJWQSAtIGhNb2QtPnRleHRCYXNlOworCW51bUZpeHVwcyA9IChiYXNlUmVsb2MtPkJsb2NrU2l6ZSAtIHNpemVvZihCQVNFX1JFTE9DQVRJT04pKSAvIHNpemVvZih1c2hvcnQpOworCWZpeHVwID0gKHVzaG9ydCopKGJhc2VSZWxvYyArIDEpOworCWZvciAoaSA9IDA7IGkgPCBudW1GaXh1cHM7IGkrKykgeworCSAgICByZWxvY1R5cGUgPSAqZml4dXAgPj4gMTI7CisJICAgIGlmIChyZWxvY1R5cGUpIHsKKwkJb2Zmc2V0ID0gcGFnZU9mZnNldCArICgqZml4dXAgJiAweDBGRkYpOworCQkqKHVsb25nKikoaE1vZC0+dGV4dCArIG9mZnNldCkgKz0gZGVsdGE7CisJCX0KKwkgICAgZml4dXArKzsKKwkgICAgfQogCi0gICAgICAgIC8qIE1vdmUgdG8gbmV4dCByZWxvY2F0aW9uIGJsb2NrICovCi0gICAgICAgIGJhc2VSZWxvYyA9IChCQVNFX1JFTE9DQVRJT04qKSgodWxvbmcpYmFzZVJlbG9jICsgYmFzZVJlbG9jLT5CbG9ja1NpemUpOwotICAgICAgICB9CisJLyogTW92ZSB0byBuZXh0IHJlbG9jYXRpb24gYmxvY2sgKi8KKwliYXNlUmVsb2MgPSAoQkFTRV9SRUxPQ0FUSU9OKikoKHVsb25nKWJhc2VSZWxvYyArIGJhc2VSZWxvYy0+QmxvY2tTaXplKTsKKwl9CiAKICAgICAvKiBJbml0aWFsaXNlIHRoZSBDIHJ1bnRpbWUgbGlicmFyeSBmb3IgdGhlIGxvYWRlZCBETEwgKi8KICAgICByZXN1bHQgPSBQRV91bmFibGVUb0luaXRMaWJDOwogICAgIGlmICgoSW5pdExpYkMgPSAoSW5pdExpYkNfdClQRV9nZXRQcm9jQWRkcmVzcyhoTW9kLCJfSW5pdExpYkMiKSkgPT0gTlVMTCkKLSAgICAgICAgZ290byBFcnJvcjsKKwlnb3RvIEVycm9yOwogICAgIGlmICghSW5pdExpYkMoJl9fX2ltcG9ydHMsUE1fZ2V0T1NUeXBlKCkpKQotICAgICAgICBnb3RvIEVycm9yOworCWdvdG8gRXJyb3I7CiAKICAgICAvKiBDbGVhbiB1cCwgY2xvc2UgdGhlIGZpbGUgYW5kIHJldHVybiB0aGUgbG9hZGVkIG1vZHVsZSBoYW5kbGUgKi8KICAgICBQTV9mcmVlKHJlbG9jKTsKQEAgLTMyMiw5ICszMjIsOSBAQAogCiBFcnJvcjoKICAgICBpZiAoc2hhcmVkKQotICAgICAgICBQTV9mcmVlU2hhcmVkKGhNb2QpOworCVBNX2ZyZWVTaGFyZWQoaE1vZCk7CiAgICAgZWxzZQotICAgICAgICBQTV9mcmVlKGhNb2QpOworCVBNX2ZyZWUoaE1vZCk7CiAgICAgUE1fZnJlZShyZWxvYyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0zNjAsNTMgKzM2MCw1MyBAQAogCiAjaWYgKGRlZmluZWQoX19XSU5ET1dTMzJfXykgfHwgZGVmaW5lZChfX0RSSVZFUl9fKSkgJiYgZGVmaW5lZChDSEVDS0VEKQogICAgIGlmICghc2hhcmVkKSB7Ci0gICAgICAgIFBNX01PRFVMRSAgICAgICBoSW5zdDsKLSAgICAgICAgSW5pdExpYkNfdCAgICAgIEluaXRMaWJDOworCVBNX01PRFVMRSAgICAgICBoSW5zdDsKKwlJbml0TGliQ190ICAgICAgSW5pdExpYkM7CiAKLSAgICAgICAgLyogRm9yIFdpbjMyIGlmIGFyZSBidWlsZGluZyBjaGVja2VkIGxpYnJhcmllcyBmb3IgZGVidWdnaW5nLCB3ZSB1c2UKLSAgICAgICAgICogdGhlIHJlYWwgV2luMzIgRExMIGZ1bmN0aW9ucyBzbyB0aGF0IHdlIGNhbiBkZWJ1ZyB0aGUgcmVzdWx0aW5nIERMTAotICAgICAgICAgKiBmaWxlcyB3aXRoIHRoZSBXaW4zMiBkZWJ1Z2dlcnMuIE5vdGUgdGhhdCB3ZSBjYW4ndCBkbyB0aGlzIGlmCi0gICAgICAgICAqIHdlIG5lZWQgdG8gbG9hZCB0aGUgZmlsZXMgaW50byBhIHNoYXJlZCBtZW1vcnkgY29udGV4dC4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgoaEluc3QgPSBQTV9sb2FkTGlicmFyeShzekRMTE5hbWUpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQRV9maWxlTm90Rm91bmQ7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKwkvKiBGb3IgV2luMzIgaWYgYXJlIGJ1aWxkaW5nIGNoZWNrZWQgbGlicmFyaWVzIGZvciBkZWJ1Z2dpbmcsIHdlIHVzZQorCSAqIHRoZSByZWFsIFdpbjMyIERMTCBmdW5jdGlvbnMgc28gdGhhdCB3ZSBjYW4gZGVidWcgdGhlIHJlc3VsdGluZyBETEwKKwkgKiBmaWxlcyB3aXRoIHRoZSBXaW4zMiBkZWJ1Z2dlcnMuIE5vdGUgdGhhdCB3ZSBjYW4ndCBkbyB0aGlzIGlmCisJICogd2UgbmVlZCB0byBsb2FkIHRoZSBmaWxlcyBpbnRvIGEgc2hhcmVkIG1lbW9yeSBjb250ZXh0LgorCSAqLworCWlmICgoaEluc3QgPSBQTV9sb2FkTGlicmFyeShzekRMTE5hbWUpKSA9PSBOVUxMKSB7CisJICAgIHJlc3VsdCA9IFBFX2ZpbGVOb3RGb3VuZDsKKwkgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KIAotICAgICAgICAvKiBJbml0aWFsaXNlIHRoZSBDIHJ1bnRpbWUgbGlicmFyeSBmb3IgdGhlIGxvYWRlZCBETEwgKi8KLSAgICAgICAgcmVzdWx0ID0gUEVfdW5hYmxlVG9Jbml0TGliQzsKLSAgICAgICAgaWYgKChJbml0TGliQyA9ICh2b2lkKilQTV9nZXRQcm9jQWRkcmVzcyhoSW5zdCwiX0luaXRMaWJDIikpID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKCFJbml0TGliQygmX19faW1wb3J0cyxQTV9nZXRPU1R5cGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKwkvKiBJbml0aWFsaXNlIHRoZSBDIHJ1bnRpbWUgbGlicmFyeSBmb3IgdGhlIGxvYWRlZCBETEwgKi8KKwlyZXN1bHQgPSBQRV91bmFibGVUb0luaXRMaWJDOworCWlmICgoSW5pdExpYkMgPSAodm9pZCopUE1fZ2V0UHJvY0FkZHJlc3MoaEluc3QsIl9Jbml0TGliQyIpKSA9PSBOVUxMKQorCSAgICByZXR1cm4gTlVMTDsKKwlpZiAoIUluaXRMaWJDKCZfX19pbXBvcnRzLFBNX2dldE9TVHlwZSgpKSkKKwkgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgLyogQWxsb2NhdGUgdGhlIFBFX01PRFVMRSBzdHJ1Y3R1cmUgKi8KLSAgICAgICAgaWYgKChoTW9kID0gUE1fbWFsbG9jKHNpemVvZigqaE1vZCkpKSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGhNb2QtPnRleHQgPSAodm9pZCopaEluc3Q7Ci0gICAgICAgIGhNb2QtPnNoYXJlZCA9IC0xOworCS8qIEFsbG9jYXRlIHRoZSBQRV9NT0RVTEUgc3RydWN0dXJlICovCisJaWYgKChoTW9kID0gUE1fbWFsbG9jKHNpemVvZigqaE1vZCkpKSA9PSBOVUxMKQorCSAgICByZXR1cm4gTlVMTDsKKwloTW9kLT50ZXh0ID0gKHZvaWQqKWhJbnN0OworCWhNb2QtPnNoYXJlZCA9IC0xOwogCi0gICAgICAgIC8qIERMTCBsb2FkZWQgc3VjY2Vzc2Z1bGx5IHNvIHJldHVybiBtb2R1bGUgaGFuZGxlICovCi0gICAgICAgIHJlc3VsdCA9IFBFX29rOwotICAgICAgICByZXR1cm4gaE1vZDsKLSAgICAgICAgfQorCS8qIERMTCBsb2FkZWQgc3VjY2Vzc2Z1bGx5IHNvIHJldHVybiBtb2R1bGUgaGFuZGxlICovCisJcmVzdWx0ID0gUEVfb2s7CisJcmV0dXJuIGhNb2Q7CisJfQogICAgIGVsc2UKICNlbmRpZgotICAgICAgICB7Ci0gICAgICAgIEZJTEUgICAgICAgICpmOwotICAgICAgICB1bG9uZyAgICAgICBzaXplOworCXsKKwlGSUxFICAgICAgICAqZjsKKwl1bG9uZyAgICAgICBzaXplOwogCi0gICAgICAgIC8qIEF0dGVtcHQgdG8gb3BlbiB0aGUgZmlsZSBvbiBkaXNrICovCi0gICAgICAgIGlmIChzaGFyZWQgPCAwKQotICAgICAgICAgICAgc2hhcmVkID0gMDsKLSAgICAgICAgaWYgKChmID0gZm9wZW4oc3pETExOYW1lLCJyYiIpKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQRV9maWxlTm90Rm91bmQ7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgaE1vZCA9IFBFX2xvYWRMaWJyYXJ5RXh0KGYsMCwmc2l6ZSxzaGFyZWQpOwotICAgICAgICBmY2xvc2UoZik7Ci0gICAgICAgIHJldHVybiBoTW9kOwotICAgICAgICB9CisJLyogQXR0ZW1wdCB0byBvcGVuIHRoZSBmaWxlIG9uIGRpc2sgKi8KKwlpZiAoc2hhcmVkIDwgMCkKKwkgICAgc2hhcmVkID0gMDsKKwlpZiAoKGYgPSBmb3BlbihzekRMTE5hbWUsInJiIikpID09IE5VTEwpIHsKKwkgICAgcmVzdWx0ID0gUEVfZmlsZU5vdEZvdW5kOworCSAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCWhNb2QgPSBQRV9sb2FkTGlicmFyeUV4dChmLDAsJnNpemUsc2hhcmVkKTsKKwlmY2xvc2UoZik7CisJcmV0dXJuIGhNb2Q7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDQ1LDE0ICs0NDUsMTQgQEAKICAgICAgKi8KICNpZiAhZGVmaW5lZChfX1dJTjMyX1ZYRF9fKSAmJiAhZGVmaW5lZChfX05UX0RSSVZFUl9fKQogICAgIGlmIChnZXRlbnYoIk1HTF9ST09UIikpIHsKLSAgICAgICAgc3RyY3B5KHBhdGgsZ2V0ZW52KCJNR0xfUk9PVCIpKTsKLSAgICAgICAgUE1fYmFja3NsYXNoKHBhdGgpOwotICAgICAgICB9CisJc3RyY3B5KHBhdGgsZ2V0ZW52KCJNR0xfUk9PVCIpKTsKKwlQTV9iYWNrc2xhc2gocGF0aCk7CisJfQogICAgIHN0cmNhdChwYXRoLCJkcml2ZXJzIik7CiAgICAgUE1fYmFja3NsYXNoKHBhdGgpOwogICAgIHN0cmNhdChwYXRoLHN6RExMTmFtZSk7CiAgICAgaWYgKChoTW9kID0gUEVfbG9hZExpYnJhcnkocGF0aCxzaGFyZWQpKSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gaE1vZDsKKwlyZXR1cm4gaE1vZDsKICNlbmRpZgogICAgIHN0cmNweShwYXRoLCJkcml2ZXJzIik7CiAgICAgUE1fYmFja3NsYXNoKHBhdGgpOwpAQCAtNDg4LDM5ICs0ODgsMzkgQEAKIHsKICNpZiAoZGVmaW5lZChfX1dJTkRPV1MzMl9fKSB8fCBkZWZpbmVkKF9fRFJJVkVSX18pKSAmJiBkZWZpbmVkKENIRUNLRUQpCiAgICAgaWYgKGhNb2R1bGUtPnNoYXJlZCA9PSAtMSkKLSAgICAgICAgcmV0dXJuICh2b2lkKilQTV9nZXRQcm9jQWRkcmVzcyhoTW9kdWxlLT50ZXh0LHN6UHJvY05hbWUpOworCXJldHVybiAodm9pZCopUE1fZ2V0UHJvY0FkZHJlc3MoaE1vZHVsZS0+dGV4dCxzelByb2NOYW1lKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgewotICAgICAgICB1aW50ICAgICAgICAgICAgICAgIGk7Ci0gICAgICAgIEVYUE9SVF9ESVJFQ1RPUlkgICAgKmV4cG9ydHM7Ci0gICAgICAgIHVsb25nICAgICAgICAgICAgICAgZnVuY09mZnNldDsKLSAgICAgICAgdWxvbmcgICAgICAgICAgICAgICAqQWRkcmVzc1RhYmxlOwotICAgICAgICB1bG9uZyAgICAgICAgICAgICAgICpOYW1lVGFibGU7Ci0gICAgICAgIHVzaG9ydCAgICAgICAgICAgICAgKk9yZGluYWxUYWJsZTsKLSAgICAgICAgY2hhciAgICAgICAgICAgICAgICAqbmFtZTsKKwl7CisJdWludCAgICAgICAgICAgICAgICBpOworCUVYUE9SVF9ESVJFQ1RPUlkgICAgKmV4cG9ydHM7CisJdWxvbmcgICAgICAgICAgICAgICBmdW5jT2Zmc2V0OworCXVsb25nICAgICAgICAgICAgICAgKkFkZHJlc3NUYWJsZTsKKwl1bG9uZyAgICAgICAgICAgICAgICpOYW1lVGFibGU7CisJdXNob3J0ICAgICAgICAgICAgICAqT3JkaW5hbFRhYmxlOworCWNoYXIgICAgICAgICAgICAgICAgKm5hbWU7CiAKLSAgICAgICAgLyogRmluZCB0aGUgYWRkcmVzcyBvZiB0aGUgZXhwb3J0IHRhYmxlcyBmcm9tIHRoZSBleHBvcnQgc2VjdGlvbiAqLwotICAgICAgICBpZiAoIWhNb2R1bGUpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgZXhwb3J0cyA9IChFWFBPUlRfRElSRUNUT1JZKikoaE1vZHVsZS0+ZXhwb3J0ICsgaE1vZHVsZS0+ZXhwb3J0RGlyKTsKLSAgICAgICAgQWRkcmVzc1RhYmxlID0gKHVsb25nKikoaE1vZHVsZS0+ZXhwb3J0ICsgZXhwb3J0cy0+QWRkcmVzc1RhYmxlUlZBIC0gaE1vZHVsZS0+ZXhwb3J0QmFzZSk7Ci0gICAgICAgIE5hbWVUYWJsZSA9ICh1bG9uZyopKGhNb2R1bGUtPmV4cG9ydCArIGV4cG9ydHMtPk5hbWVUYWJsZVJWQSAtIGhNb2R1bGUtPmV4cG9ydEJhc2UpOwotICAgICAgICBPcmRpbmFsVGFibGUgPSAodXNob3J0KikoaE1vZHVsZS0+ZXhwb3J0ICsgZXhwb3J0cy0+T3JkaW5hbFRhYmxlUlZBIC0gaE1vZHVsZS0+ZXhwb3J0QmFzZSk7CisJLyogRmluZCB0aGUgYWRkcmVzcyBvZiB0aGUgZXhwb3J0IHRhYmxlcyBmcm9tIHRoZSBleHBvcnQgc2VjdGlvbiAqLworCWlmICghaE1vZHVsZSkKKwkgICAgcmV0dXJuIE5VTEw7CisJZXhwb3J0cyA9IChFWFBPUlRfRElSRUNUT1JZKikoaE1vZHVsZS0+ZXhwb3J0ICsgaE1vZHVsZS0+ZXhwb3J0RGlyKTsKKwlBZGRyZXNzVGFibGUgPSAodWxvbmcqKShoTW9kdWxlLT5leHBvcnQgKyBleHBvcnRzLT5BZGRyZXNzVGFibGVSVkEgLSBoTW9kdWxlLT5leHBvcnRCYXNlKTsKKwlOYW1lVGFibGUgPSAodWxvbmcqKShoTW9kdWxlLT5leHBvcnQgKyBleHBvcnRzLT5OYW1lVGFibGVSVkEgLSBoTW9kdWxlLT5leHBvcnRCYXNlKTsKKwlPcmRpbmFsVGFibGUgPSAodXNob3J0KikoaE1vZHVsZS0+ZXhwb3J0ICsgZXhwb3J0cy0+T3JkaW5hbFRhYmxlUlZBIC0gaE1vZHVsZS0+ZXhwb3J0QmFzZSk7CiAKLSAgICAgICAgLyogU2VhcmNoIHRoZSBleHBvcnQgbmFtZSB0YWJsZSB0byBmaW5kIHRoZSBmdW5jdGlvbiBuYW1lICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBleHBvcnRzLT5OdW1iZXJPZk5hbWVQb2ludGVyczsgaSsrKSB7Ci0gICAgICAgICAgICBuYW1lID0gKGNoYXIqKShoTW9kdWxlLT5leHBvcnQgKyBOYW1lVGFibGVbaV0gLSBoTW9kdWxlLT5leHBvcnRCYXNlKTsKLSAgICAgICAgICAgIGlmIChzdHJjbXAobmFtZSxzelByb2NOYW1lKSA9PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAoaSA9PSBleHBvcnRzLT5OdW1iZXJPZk5hbWVQb2ludGVycykKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBmdW5jT2Zmc2V0ID0gQWRkcmVzc1RhYmxlW09yZGluYWxUYWJsZVtpXV07Ci0gICAgICAgIGlmICghZnVuY09mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICByZXR1cm4gKHZvaWQqKShoTW9kdWxlLT50ZXh0ICsgZnVuY09mZnNldCAtIGhNb2R1bGUtPnRleHRCYXNlKTsKLSAgICAgICAgfQorCS8qIFNlYXJjaCB0aGUgZXhwb3J0IG5hbWUgdGFibGUgdG8gZmluZCB0aGUgZnVuY3Rpb24gbmFtZSAqLworCWZvciAoaSA9IDA7IGkgPCBleHBvcnRzLT5OdW1iZXJPZk5hbWVQb2ludGVyczsgaSsrKSB7CisJICAgIG5hbWUgPSAoY2hhciopKGhNb2R1bGUtPmV4cG9ydCArIE5hbWVUYWJsZVtpXSAtIGhNb2R1bGUtPmV4cG9ydEJhc2UpOworCSAgICBpZiAoc3RyY21wKG5hbWUsc3pQcm9jTmFtZSkgPT0gMCkKKwkJYnJlYWs7CisJICAgIH0KKwlpZiAoaSA9PSBleHBvcnRzLT5OdW1iZXJPZk5hbWVQb2ludGVycykKKwkgICAgcmV0dXJuIE5VTEw7CisJZnVuY09mZnNldCA9IEFkZHJlc3NUYWJsZVtPcmRpbmFsVGFibGVbaV1dOworCWlmICghZnVuY09mZnNldCkKKwkgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuICh2b2lkKikoaE1vZHVsZS0+dGV4dCArIGZ1bmNPZmZzZXQgLSBoTW9kdWxlLT50ZXh0QmFzZSk7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTQ2LDI1ICs1NDYsMjUgQEAKIAogI2lmIChkZWZpbmVkKF9fV0lORE9XUzMyX18pIHx8IGRlZmluZWQoX19EUklWRVJfXykpICYmIGRlZmluZWQoQ0hFQ0tFRCkKICAgICBpZiAoaE1vZHVsZS0+c2hhcmVkID09IC0xKSB7Ci0gICAgICAgIC8qIFJ1biB0aGUgQyBydW50aW1lIGxpYnJhcnkgZXhpdCBjb2RlIG9uIG1vZHVsZSB1bmxvYWQgKi8KLSAgICAgICAgaWYgKChUZXJtaW5hdGVMaWJDID0gKFRlcm1pbmF0ZUxpYkNfdClQTV9nZXRQcm9jQWRkcmVzcyhoTW9kdWxlLT50ZXh0LCJfVGVybWluYXRlTGliQyIpKSAhPSBOVUxMKQotICAgICAgICAgICAgVGVybWluYXRlTGliQygpOwotICAgICAgICBQTV9mcmVlTGlicmFyeShoTW9kdWxlLT50ZXh0KTsKLSAgICAgICAgUE1fZnJlZShoTW9kdWxlKTsKLSAgICAgICAgfQorCS8qIFJ1biB0aGUgQyBydW50aW1lIGxpYnJhcnkgZXhpdCBjb2RlIG9uIG1vZHVsZSB1bmxvYWQgKi8KKwlpZiAoKFRlcm1pbmF0ZUxpYkMgPSAoVGVybWluYXRlTGliQ190KVBNX2dldFByb2NBZGRyZXNzKGhNb2R1bGUtPnRleHQsIl9UZXJtaW5hdGVMaWJDIikpICE9IE5VTEwpCisJICAgIFRlcm1pbmF0ZUxpYkMoKTsKKwlQTV9mcmVlTGlicmFyeShoTW9kdWxlLT50ZXh0KTsKKwlQTV9mcmVlKGhNb2R1bGUpOworCX0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgewotICAgICAgICBpZiAoaE1vZHVsZSkgewotICAgICAgICAgICAgLyogUnVuIHRoZSBDIHJ1bnRpbWUgbGlicmFyeSBleGl0IGNvZGUgb24gbW9kdWxlIHVubG9hZCAqLwotICAgICAgICAgICAgaWYgKChUZXJtaW5hdGVMaWJDID0gKFRlcm1pbmF0ZUxpYkNfdClQRV9nZXRQcm9jQWRkcmVzcyhoTW9kdWxlLCJfVGVybWluYXRlTGliQyIpKSAhPSBOVUxMKQotICAgICAgICAgICAgICAgIFRlcm1pbmF0ZUxpYkMoKTsKLSAgICAgICAgICAgIGlmIChoTW9kdWxlLT5zaGFyZWQpCi0gICAgICAgICAgICAgICAgUE1fZnJlZVNoYXJlZChoTW9kdWxlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBQTV9mcmVlKGhNb2R1bGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJeworCWlmIChoTW9kdWxlKSB7CisJICAgIC8qIFJ1biB0aGUgQyBydW50aW1lIGxpYnJhcnkgZXhpdCBjb2RlIG9uIG1vZHVsZSB1bmxvYWQgKi8KKwkgICAgaWYgKChUZXJtaW5hdGVMaWJDID0gKFRlcm1pbmF0ZUxpYkNfdClQRV9nZXRQcm9jQWRkcmVzcyhoTW9kdWxlLCJfVGVybWluYXRlTGliQyIpKSAhPSBOVUxMKQorCQlUZXJtaW5hdGVMaWJDKCk7CisJICAgIGlmIChoTW9kdWxlLT5zaGFyZWQpCisJCVBNX2ZyZWVTaGFyZWQoaE1vZHVsZSk7CisJICAgIGVsc2UKKwkJUE1fZnJlZShoTW9kdWxlKTsKKwkgICAgfQorCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU4NCw0ICs1ODQsMyBAQAogewogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi92ZXNhdmJlLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9jb21tb24vdmVzYXZiZS5jCmluZGV4IDJiZTU3ZTIuLmE2NjllNWMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL2NvbW1vbi92ZXNhdmJlLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvY29tbW9uL3Zlc2F2YmUuYwpAQCAtNzMsMTAgKzczLDEwIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogewogICAgIGlmICghc3RhdGUtPlZFU0FCdWZfcHRyKSB7Ci0gICAgICAgIC8qIEFsbG9jYXRlIGEgZ2xvYmFsIGJ1ZmZlciBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBWRVNBIFZCRSAqLwotICAgICAgICBpZiAoKHN0YXRlLT5WRVNBQnVmX3B0ciA9IFBNX2dldFZFU0FCdWYoJlZFU0FCdWZfbGVuLCAmc3RhdGUtPlZFU0FCdWZfcnNlZywgJnN0YXRlLT5WRVNBQnVmX3JvZmYpKSA9PSBOVUxMKQotICAgICAgICAgICAgUE1fZmF0YWxFcnJvcigiVkVTQVZCRS5DOiBSZWFsIG1vZGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkISIpOwotICAgICAgICB9CisJLyogQWxsb2NhdGUgYSBnbG9iYWwgYnVmZmVyIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIFZFU0EgVkJFICovCisJaWYgKChzdGF0ZS0+VkVTQUJ1Zl9wdHIgPSBQTV9nZXRWRVNBQnVmKCZWRVNBQnVmX2xlbiwgJnN0YXRlLT5WRVNBQnVmX3JzZWcsICZzdGF0ZS0+VkVTQUJ1Zl9yb2ZmKSkgPT0gTlVMTCkKKwkgICAgUE1fZmF0YWxFcnJvcigiVkVTQVZCRS5DOiBSZWFsIG1vZGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkISIpOworCX0KIH0KIAogdm9pZCAqIFZCRUFQSSBWQkVfZ2V0Uk1CdWYodWludCAqbGVuLHVpbnQgKnJzZWcsdWludCAqcm9mZikKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgIFJNU1JFR1Mgc3JlZ3M7CiAKICAgICBpZiAoIXN0YXRlLT5WRVNBQnVmX3B0cikKLSAgICAgICAgUE1fZmF0YWxFcnJvcigiWW91ICpNVVNUKiBjYWxsIFZCRV9pbml0KCkgYmVmb3JlIHlvdSBjYW4gY2FsbCB0aGUgVkVTQVZCRS5DIG1vZHVsZSEiKTsKKwlQTV9mYXRhbEVycm9yKCJZb3UgKk1VU1QqIGNhbGwgVkJFX2luaXQoKSBiZWZvcmUgeW91IGNhbiBjYWxsIHRoZSBWRVNBVkJFLkMgbW9kdWxlISIpOwogICAgIHNyZWdzLmVzID0gKHVzaG9ydClzdGF0ZS0+VkVTQUJ1Zl9yc2VnOwogICAgIHJlZ3MtPnguZGkgPSAodXNob3J0KXN0YXRlLT5WRVNBQnVmX3JvZmY7CiAgICAgbWVtY3B5KHN0YXRlLT5WRVNBQnVmX3B0ciwgYnVmZmVyLCBzaXplKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiAgICAgdiA9IFBNX21hcFJlYWxQb2ludGVyKCh1aW50KSgodWxvbmcpcmVhbFB0ciA+PiAxNiksICh1aW50KSgodWxvbmcpcmVhbFB0ciAmIDB4RkZGRikpOwogICAgIHdoaWxlICgqdiAhPSAwICYmIHAgPCBtYXgpCi0gICAgICAgICpwKysgPSAqdisrOworCSpwKysgPSAqdisrOwogICAgICpwKysgPSAwOwogICAgIHJldHVybiBwOwogfQpAQCAtMTc4LDcgKzE3OCw3IEBACiAKICAgICB2ID0gUE1fbWFwUmVhbFBvaW50ZXIoKHVpbnQpKCh1bG9uZylyZWFsUHRyID4+IDE2KSwodWludCkoKHVsb25nKXJlYWxQdHIgJiAweEZGRkYpKTsKICAgICB3aGlsZSAoKnYgIT0gMHhGRkZGKQotICAgICAgICAqcCsrID0gKnYrKzsKKwkqcCsrID0gKnYrKzsKICAgICAqcCA9IDB4RkZGRjsKIH0KICNlbmRpZgpAQCAtMjAwLDI2ICsyMDAsMjYgQEAKIAogICAgIHJlZ3MueC5heCA9IDB4NEYwMDsgICAgIC8qIEdldCBTdXBlclZHQSBpbmZvcm1hdGlvbiAqLwogICAgIGlmIChmb3JjZVVuaVZCRSkgewotICAgICAgICByZWdzLnguYnggPSAweDEyMzQ7Ci0gICAgICAgIHJlZ3MueC5jeCA9IDB4NDMyMTsKLSAgICAgICAgfQorCXJlZ3MueC5ieCA9IDB4MTIzNDsKKwlyZWdzLnguY3ggPSAweDQzMjE7CisJfQogICAgIGVsc2UgewotICAgICAgICByZWdzLnguYnggPSAwOwotICAgICAgICByZWdzLnguY3ggPSAwOwotICAgICAgICB9CisJcmVncy54LmJ4ID0gMDsKKwlyZWdzLnguY3ggPSAwOworCX0KICAgICBzdHJuY3B5KHZnYUluZm8tPlZFU0FTaWduYXR1cmUsIlZCRTIiLDQpOwogICAgIFZCRV9jYWxsRVNESSgmcmVncywgdmdhSW5mbywgc2l6ZW9mKCp2Z2FJbmZvKSk7CiAgICAgaWYgKHJlZ3MueC5heCAhPSBWQkVfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgaWYgKHN0cm5jbXAodmdhSW5mby0+VkVTQVNpZ25hdHVyZSwiVkVTQSIsNCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAKICAgICAvKiBDaGVjayBmb3IgYm9ndXMgQklPU2VzIHRoYXQgcmV0dXJuIGEgVkJFIHZlcnNpb24gbnVtYmVyIHRoYXQgaXMKICAgICAgKiBub3QgY29ycmVjdCwgYW5kIGZpeCBpdCB1cC4gV2UgYWxzbyBjaGVjayB0aGUgT2VtVmVuZG9yTmFtZVB0ciBmb3IgYQogICAgICAqIHZhbGlkIHZhbHVlLCBhbmQgaWYgaXQgaXMgaW52YWxpZCB0aGVuIHdlIGFsc28gcmVzZXQgdG8gVkJFIDEuMi4KICAgICAgKi8KICAgICBpZiAodmdhSW5mby0+VkVTQVZlcnNpb24gPj0gMHgyMDAgJiYgdmdhSW5mby0+T2VtVmVuZG9yTmFtZVB0ciA9PSAwKQotICAgICAgICB2Z2FJbmZvLT5WRVNBVmVyc2lvbiA9IDB4MTAyOworCXZnYUluZm8tPlZFU0FWZXJzaW9uID0gMHgxMDI7CiAjaWZuZGVmIFJFQUxNT0RFCiAgICAgLyogUmVsb2NhdGUgYWxsIHRoZSBpbmRpcmVjdCBpbmZvcm1hdGlvbiAobW9kZSB0YWJsZXMsIE9FTSBzdHJpbmdzCiAgICAgICogZXRjKSBmcm9tIHRoZSBsb3cgMU1iIG1lbW9yeSByZWdpb24gaW50byBhIHN0YXRpYyBidWZmZXIgaW4KQEAgLTIyNywyMyArMjI3LDIzIEBACiAgICAgICogZnJvbSBtYXBwaW5nIHRoZSBzdHJpbmdzIGZyb20gcmVhbCBtb2RlIHRvIHByb3RlY3RlZCBtb2RlLgogICAgICAqLwogICAgIHsKLSAgICAgICAgY2hhciAqcCwqcDI7CisJY2hhciAqcCwqcDI7CiAgICAgIHAyID0gVkJFX2NvcHlTdHJUb0xvY2FsKGxvY2FsQnVmLHZnYUluZm8tPk9lbVN0cmluZ1B0cixNQVhfTE9DQUxfQlVGKTsKICAgICAgdmdhSW5mby0+T2VtU3RyaW5nUHRyID0gbG9jYWxCdWY7CiAgICAgIGlmICh2Z2FJbmZvLT5WRVNBVmVyc2lvbiA+PSAweDIwMCkgewotICAgICAgICAgcCA9IFZCRV9jb3B5U3RyVG9Mb2NhbChwMix2Z2FJbmZvLT5PZW1WZW5kb3JOYW1lUHRyLE1BWF9MT0NBTF9CVUYpOwotICAgICAgICAgdmdhSW5mby0+T2VtVmVuZG9yTmFtZVB0ciA9IHAyOwotICAgICAgICAgcDIgPSBWQkVfY29weVN0clRvTG9jYWwocCx2Z2FJbmZvLT5PZW1Qcm9kdWN0TmFtZVB0cixNQVhfTE9DQUxfQlVGKTsKLSAgICAgICAgIHZnYUluZm8tPk9lbVByb2R1Y3ROYW1lUHRyID0gcDsKLSAgICAgICAgIHAgPSBWQkVfY29weVN0clRvTG9jYWwocDIsdmdhSW5mby0+T2VtUHJvZHVjdFJldlB0cixNQVhfTE9DQUxfQlVGKTsKLSAgICAgICAgIHZnYUluZm8tPk9lbVByb2R1Y3RSZXZQdHIgPSBwMjsKLSAgICAgICAgIFZCRV9jb3B5U2hvcnRUb0xvY2FsKCh1c2hvcnQqKXAsdmdhSW5mby0+VmlkZW9Nb2RlUHRyKTsKLSAgICAgICAgIHZnYUluZm8tPlZpZGVvTW9kZVB0ciA9ICh1c2hvcnQqKXA7Ci0gICAgICAgICB9CisJIHAgPSBWQkVfY29weVN0clRvTG9jYWwocDIsdmdhSW5mby0+T2VtVmVuZG9yTmFtZVB0cixNQVhfTE9DQUxfQlVGKTsKKwkgdmdhSW5mby0+T2VtVmVuZG9yTmFtZVB0ciA9IHAyOworCSBwMiA9IFZCRV9jb3B5U3RyVG9Mb2NhbChwLHZnYUluZm8tPk9lbVByb2R1Y3ROYW1lUHRyLE1BWF9MT0NBTF9CVUYpOworCSB2Z2FJbmZvLT5PZW1Qcm9kdWN0TmFtZVB0ciA9IHA7CisJIHAgPSBWQkVfY29weVN0clRvTG9jYWwocDIsdmdhSW5mby0+T2VtUHJvZHVjdFJldlB0cixNQVhfTE9DQUxfQlVGKTsKKwkgdmdhSW5mby0+T2VtUHJvZHVjdFJldlB0ciA9IHAyOworCSBWQkVfY29weVNob3J0VG9Mb2NhbCgodXNob3J0KilwLHZnYUluZm8tPlZpZGVvTW9kZVB0cik7CisJIHZnYUluZm8tPlZpZGVvTW9kZVB0ciA9ICh1c2hvcnQqKXA7CisJIH0KICAgICAgZWxzZSB7Ci0gICAgICAgICBWQkVfY29weVNob3J0VG9Mb2NhbCgodXNob3J0KilwMix2Z2FJbmZvLT5WaWRlb01vZGVQdHIpOwotICAgICAgICAgdmdhSW5mby0+VmlkZW9Nb2RlUHRyID0gKHVzaG9ydCopcDI7Ci0gICAgICAgICB9CisJIFZCRV9jb3B5U2hvcnRUb0xvY2FsKCh1c2hvcnQqKXAyLHZnYUluZm8tPlZpZGVvTW9kZVB0cik7CisJIHZnYUluZm8tPlZpZGVvTW9kZVB0ciA9ICh1c2hvcnQqKXAyOworCSB9CiAgICAgfQogI2VuZGlmCiAgICAgc3RhdGUtPlZCRU1lbW9yeSA9IHZnYUluZm8tPlRvdGFsTWVtb3J5ICogNjQ7CkBAIC0yNTMsMTcgKzI1MywxNyBAQAogICAgICAqLwogICAgIGhhdmVSaXZhMTI4ID0gZmFsc2U7CiAgICAgaWYgKHZnYUluZm8tPlZFU0FWZXJzaW9uID49IDB4MzAwICYmCi0gICAgICAgICAgIChzdHJzdHIodmdhSW5mby0+T2VtU3RyaW5nUHRyLCJOVmlkaWEiKSAhPSBOVUxMIHx8Ci0gICAgICAgICAgICBzdHJzdHIodmdhSW5mby0+T2VtU3RyaW5nUHRyLCJSaXZhIikgIT0gTlVMTCkpIHsKLSAgICAgICAgaGF2ZVJpdmExMjggPSB0cnVlOwotICAgICAgICB9CisJICAgKHN0cnN0cih2Z2FJbmZvLT5PZW1TdHJpbmdQdHIsIk5WaWRpYSIpICE9IE5VTEwgfHwKKwkgICAgc3Ryc3RyKHZnYUluZm8tPk9lbVN0cmluZ1B0ciwiUml2YSIpICE9IE5VTEwpKSB7CisJaGF2ZVJpdmExMjggPSB0cnVlOworCX0KIAogICAgIC8qIENoZWNrIGZvciBNYXRyb3ggRzQwMCBjYXJkcyB3aGljaCBjbGFpbSB0byBiZSBWQkUgMy4wCiAgICAgICogY29tcGxpYW50IHlldCB0aGV5IGRvbid0IGltcGxlbWVudCB0aGUgcmVmcmVzaCByYXRlIGNvbnRyb2wKICAgICAgKiBmdW5jdGlvbnMuCiAgICAgICovCiAgICAgaWYgKHZnYUluZm8tPlZFU0FWZXJzaW9uID49IDB4MzAwICYmIChzdHJjbXAodmdhSW5mby0+T2VtUHJvZHVjdE5hbWVQdHIsIk1hdHJveCBHNDAwIikgPT0gMCkpCi0gICAgICAgIHZnYUluZm8tPlZFU0FWZXJzaW9uID0gMHgyMDA7CisJdmdhSW5mby0+VkVTQVZlcnNpb24gPSAweDIwMDsKICAgICByZXR1cm4gKHN0YXRlLT5WQkVWZXJzaW9uID0gdmdhSW5mby0+VkVTQVZlcnNpb24pOwogfQogCkBAIC0zMDUsNzAgKzMwNSw3MCBAQAogICAgIHJlZ3MueC5jeCA9ICh1c2hvcnQpbW9kZTsKICAgICBWQkVfY2FsbEVTREkoJnJlZ3MsIG1vZGVJbmZvLCBzaXplb2YoKm1vZGVJbmZvKSk7CiAgICAgaWYgKHJlZ3MueC5heCAhPSBWQkVfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBpZiAoKG1vZGVJbmZvLT5Nb2RlQXR0cmlidXRlcyAmIHZiZU1kQXZhaWxhYmxlKSA9PSAwKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogCiAgICAgLyogTWFwIG91dCB0cmlwbGUgYnVmZmVyIGFuZCBzdGVyZW8gZmxhZ3MgZm9yIE5WaWRpYSBSaXZhMTI4CiAgICAgICogY2hpcHMuCiAgICAgICovCiAgICAgaWYgKGhhdmVSaXZhMTI4KSB7Ci0gICAgICAgIG1vZGVJbmZvLT5Nb2RlQXR0cmlidXRlcyAmPSB+dmJlTWRUcmlwbGVCdWY7Ci0gICAgICAgIG1vZGVJbmZvLT5Nb2RlQXR0cmlidXRlcyAmPSB+dmJlTWRTdGVyZW87Ci0gICAgICAgIH0KKwltb2RlSW5mby0+TW9kZUF0dHJpYnV0ZXMgJj0gfnZiZU1kVHJpcGxlQnVmOworCW1vZGVJbmZvLT5Nb2RlQXR0cmlidXRlcyAmPSB+dmJlTWRTdGVyZW87CisJfQogCiAgICAgLyogU3VwcG9ydCBvbGQgc3R5bGUgUkdCIGRlZmluaXRpb25zIGZvciBWQkUgMS4xIEJJT1NlcyAqLwogICAgIGJpdHMgPSBtb2RlSW5mby0+Qml0c1BlclBpeGVsOwogICAgIGlmIChtb2RlSW5mby0+TWVtb3J5TW9kZWwgPT0gdmJlTWVtUEsgJiYgYml0cyA+IDgpIHsKLSAgICAgICAgbW9kZUluZm8tPk1lbW9yeU1vZGVsID0gdmJlTWVtUkdCOwotICAgICAgICBzd2l0Y2ggKGJpdHMpIHsKLSAgICAgICAgICAgIGNhc2UgMTU6Ci0gICAgICAgICAgICAgICAgbW9kZUluZm8tPlJlZE1hc2tTaXplID0gNTsKLSAgICAgICAgICAgICAgICBtb2RlSW5mby0+UmVkRmllbGRQb3NpdGlvbiA9IDEwOwotICAgICAgICAgICAgICAgIG1vZGVJbmZvLT5HcmVlbk1hc2tTaXplID0gNTsKLSAgICAgICAgICAgICAgICBtb2RlSW5mby0+R3JlZW5GaWVsZFBvc2l0aW9uID0gNTsKLSAgICAgICAgICAgICAgICBtb2RlSW5mby0+Qmx1ZU1hc2tTaXplID0gNTsKLSAgICAgICAgICAgICAgICBtb2RlSW5mby0+Qmx1ZUZpZWxkUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgICAgIG1vZGVJbmZvLT5Sc3ZkTWFza1NpemUgPSAxOwotICAgICAgICAgICAgICAgIG1vZGVJbmZvLT5Sc3ZkRmllbGRQb3NpdGlvbiA9IDE1OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxNjoKLSAgICAgICAgICAgICAgICBtb2RlSW5mby0+UmVkTWFza1NpemUgPSA1OwotICAgICAgICAgICAgICAgIG1vZGVJbmZvLT5SZWRGaWVsZFBvc2l0aW9uID0gMTE7Ci0gICAgICAgICAgICAgICAgbW9kZUluZm8tPkdyZWVuTWFza1NpemUgPSA1OwotICAgICAgICAgICAgICAgIG1vZGVJbmZvLT5HcmVlbkZpZWxkUG9zaXRpb24gPSA1OwotICAgICAgICAgICAgICAgIG1vZGVJbmZvLT5CbHVlTWFza1NpemUgPSA1OwotICAgICAgICAgICAgICAgIG1vZGVJbmZvLT5CbHVlRmllbGRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAgbW9kZUluZm8tPlJzdmRNYXNrU2l6ZSA9IDA7Ci0gICAgICAgICAgICAgICAgbW9kZUluZm8tPlJzdmRGaWVsZFBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjQ6Ci0gICAgICAgICAgICAgICAgbW9kZUluZm8tPlJlZE1hc2tTaXplID0gODsKLSAgICAgICAgICAgICAgICBtb2RlSW5mby0+UmVkRmllbGRQb3NpdGlvbiA9IDE2OwotICAgICAgICAgICAgICAgIG1vZGVJbmZvLT5HcmVlbk1hc2tTaXplID0gODsKLSAgICAgICAgICAgICAgICBtb2RlSW5mby0+R3JlZW5GaWVsZFBvc2l0aW9uID0gODsKLSAgICAgICAgICAgICAgICBtb2RlSW5mby0+Qmx1ZU1hc2tTaXplID0gODsKLSAgICAgICAgICAgICAgICBtb2RlSW5mby0+Qmx1ZUZpZWxkUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgICAgIG1vZGVJbmZvLT5Sc3ZkTWFza1NpemUgPSAwOwotICAgICAgICAgICAgICAgIG1vZGVJbmZvLT5Sc3ZkRmllbGRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwltb2RlSW5mby0+TWVtb3J5TW9kZWwgPSB2YmVNZW1SR0I7CisJc3dpdGNoIChiaXRzKSB7CisJICAgIGNhc2UgMTU6CisJCW1vZGVJbmZvLT5SZWRNYXNrU2l6ZSA9IDU7CisJCW1vZGVJbmZvLT5SZWRGaWVsZFBvc2l0aW9uID0gMTA7CisJCW1vZGVJbmZvLT5HcmVlbk1hc2tTaXplID0gNTsKKwkJbW9kZUluZm8tPkdyZWVuRmllbGRQb3NpdGlvbiA9IDU7CisJCW1vZGVJbmZvLT5CbHVlTWFza1NpemUgPSA1OworCQltb2RlSW5mby0+Qmx1ZUZpZWxkUG9zaXRpb24gPSAwOworCQltb2RlSW5mby0+UnN2ZE1hc2tTaXplID0gMTsKKwkJbW9kZUluZm8tPlJzdmRGaWVsZFBvc2l0aW9uID0gMTU7CisJCWJyZWFrOworCSAgICBjYXNlIDE2OgorCQltb2RlSW5mby0+UmVkTWFza1NpemUgPSA1OworCQltb2RlSW5mby0+UmVkRmllbGRQb3NpdGlvbiA9IDExOworCQltb2RlSW5mby0+R3JlZW5NYXNrU2l6ZSA9IDU7CisJCW1vZGVJbmZvLT5HcmVlbkZpZWxkUG9zaXRpb24gPSA1OworCQltb2RlSW5mby0+Qmx1ZU1hc2tTaXplID0gNTsKKwkJbW9kZUluZm8tPkJsdWVGaWVsZFBvc2l0aW9uID0gMDsKKwkJbW9kZUluZm8tPlJzdmRNYXNrU2l6ZSA9IDA7CisJCW1vZGVJbmZvLT5Sc3ZkRmllbGRQb3NpdGlvbiA9IDA7CisJCWJyZWFrOworCSAgICBjYXNlIDI0OgorCQltb2RlSW5mby0+UmVkTWFza1NpemUgPSA4OworCQltb2RlSW5mby0+UmVkRmllbGRQb3NpdGlvbiA9IDE2OworCQltb2RlSW5mby0+R3JlZW5NYXNrU2l6ZSA9IDg7CisJCW1vZGVJbmZvLT5HcmVlbkZpZWxkUG9zaXRpb24gPSA4OworCQltb2RlSW5mby0+Qmx1ZU1hc2tTaXplID0gODsKKwkJbW9kZUluZm8tPkJsdWVGaWVsZFBvc2l0aW9uID0gMDsKKwkJbW9kZUluZm8tPlJzdmRNYXNrU2l6ZSA9IDA7CisJCW1vZGVJbmZvLT5Sc3ZkRmllbGRQb3NpdGlvbiA9IDA7CisJCWJyZWFrOworCSAgICB9CisJfQogCiAgICAgLyogQ29udmVydCB0aGUgMzJrIGRpcmVjdCBjb2xvciBtb2RlcyBvZiBWQkUgMS4yKyBCSU9TZXMgdG8KICAgICAgKiBiZSByZWNvZ25pc2VkIGFzIDE1IGJpdHMgcGVyIHBpeGVsIG1vZGVzLgogICAgICAqLwogICAgIGlmIChiaXRzID09IDE2ICYmIG1vZGVJbmZvLT5Sc3ZkTWFza1NpemUgPT0gMSkKLSAgICAgICAgbW9kZUluZm8tPkJpdHNQZXJQaXhlbCA9IDE1OworCW1vZGVJbmZvLT5CaXRzUGVyUGl4ZWwgPSAxNTsKIAogICAgIC8qIEZpeCB1cCBib2d1cyBCSU9TJ2VzIHRoYXQgcmVwb3J0IGluY29ycmVjdCByZXNlcnZlZCBwaXhlbCBtYXNrcwogICAgICAqIGZvciAzMksgY29sb3IgbW9kZXMuIFF1aXRlIGEgbnVtYmVyIG9mIEJJT1MnZXMgaGF2ZSB0aGlzIHByb2JsZW0sCiAgICAgICogYW5kIHRoaXMgYWZmZWN0cyBvdXIgT1MvMiBkcml2ZXJzIGluIFZCRSBmYWxsYmFjayBtb2RlLgogICAgICAqLwogICAgIGlmIChiaXRzID09IDE1ICYmIChtb2RlSW5mby0+UnN2ZE1hc2tTaXplICE9IDEgfHwgbW9kZUluZm8tPlJzdmRGaWVsZFBvc2l0aW9uICE9IDE1KSkgewotICAgICAgICBtb2RlSW5mby0+UnN2ZE1hc2tTaXplID0gMTsKLSAgICAgICAgbW9kZUluZm8tPlJzdmRGaWVsZFBvc2l0aW9uID0gMTU7Ci0gICAgICAgIH0KKwltb2RlSW5mby0+UnN2ZE1hc2tTaXplID0gMTsKKwltb2RlSW5mby0+UnN2ZEZpZWxkUG9zaXRpb24gPSAxNTsKKwl9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM5MSwyMCArMzkxLDIwIEBACiAKICAgICBzaXplID0gKGxvbmcpbWktPkJ5dGVzUGVyU2NhbkxpbmUgKiAobG9uZyltaS0+WVJlc29sdXRpb247CiAgICAgaWYgKG1pLT5CaXRzUGVyUGl4ZWwgPT0gNCkgewotICAgICAgICAvKiBXZSBoYXZlIGEgMTYgY29sb3IgdmlkZW8gbW9kZSwgc28gcm91bmQgdXAgdGhlIHBhZ2Ugc2l6ZSB0bwotICAgICAgICAgKiA4aywgMTZrLCAzMmsgb3IgNjRrIGJvdW5kYXJpZXMgZGVwZW5kaW5nIG9uIGhvdyBsYXJnZSBpdCBpcy4KLSAgICAgICAgICovCisJLyogV2UgaGF2ZSBhIDE2IGNvbG9yIHZpZGVvIG1vZGUsIHNvIHJvdW5kIHVwIHRoZSBwYWdlIHNpemUgdG8KKwkgKiA4aywgMTZrLCAzMmsgb3IgNjRrIGJvdW5kYXJpZXMgZGVwZW5kaW5nIG9uIGhvdyBsYXJnZSBpdCBpcy4KKwkgKi8KIAotICAgICAgICBzaXplID0gKHNpemUgKyAweDFGRkZMKSAmIDB4RkZGRkUwMDBMOwotICAgICAgICBpZiAoc2l6ZSAhPSAweDIwMDApIHsKLSAgICAgICAgICAgIHNpemUgPSAoc2l6ZSArIDB4M0ZGRkwpICYgMHhGRkZGQzAwMEw7Ci0gICAgICAgICAgICBpZiAoc2l6ZSAhPSAweDQwMDApIHsKLSAgICAgICAgICAgICAgICBzaXplID0gKHNpemUgKyAweDdGRkZMKSAmIDB4RkZGRjgwMDBMOwotICAgICAgICAgICAgICAgIGlmIChzaXplICE9IDB4ODAwMCkKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IChzaXplICsgMHhGRkZGTCkgJiAweEZGRkYwMDAwTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlzaXplID0gKHNpemUgKyAweDFGRkZMKSAmIDB4RkZGRkUwMDBMOworCWlmIChzaXplICE9IDB4MjAwMCkgeworCSAgICBzaXplID0gKHNpemUgKyAweDNGRkZMKSAmIDB4RkZGRkMwMDBMOworCSAgICBpZiAoc2l6ZSAhPSAweDQwMDApIHsKKwkJc2l6ZSA9IChzaXplICsgMHg3RkZGTCkgJiAweEZGRkY4MDAwTDsKKwkJaWYgKHNpemUgIT0gMHg4MDAwKQorCQkgICAgc2l6ZSA9IChzaXplICsgMHhGRkZGTCkgJiAweEZGRkYwMDAwTDsKKwkJfQorCSAgICB9CisJfQogICAgIGVsc2Ugc2l6ZSA9IChzaXplICsgMHhGRkZGTCkgJiAweEZGRkYwMDAwTDsKICAgICByZXR1cm4gc2l6ZTsKIH0KQEAgLTQyNSwyNiArNDI1LDI2IEBACiAgICAgUk1SRUdTICByZWdzOwogCiAgICAgaWYgKHN0YXRlLT5WQkVWZXJzaW9uIDwgMHgyMDAgJiYgbW9kZSA8IDB4MTAwKSB7Ci0gICAgICAgIC8qIFNvbWUgVkJFIGltcGxlbWVudGF0aW9ucyBiYXJmIHRlcnJpYmx5IGlmIHlvdSB0cnkgdG8gc2V0IG5vbi1WQkUKLSAgICAgICAgICogdmlkZW8gbW9kZXMgd2l0aCB0aGUgVkJFIHNldCBtb2RlIGNhbGwuIFZCRSAyLjAgaW1wbGVtZW50YXRpb25zCi0gICAgICAgICAqIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgdGhpcy4KLSAgICAgICAgICovCi0gICAgICAgIHJlZ3MuaC5hbCA9ICh1c2hvcnQpbW9kZTsKLSAgICAgICAgcmVncy5oLmFoID0gMDsKLSAgICAgICAgUE1faW50ODYoMHgxMCwmcmVncywmcmVncyk7Ci0gICAgICAgIH0KKwkvKiBTb21lIFZCRSBpbXBsZW1lbnRhdGlvbnMgYmFyZiB0ZXJyaWJseSBpZiB5b3UgdHJ5IHRvIHNldCBub24tVkJFCisJICogdmlkZW8gbW9kZXMgd2l0aCB0aGUgVkJFIHNldCBtb2RlIGNhbGwuIFZCRSAyLjAgaW1wbGVtZW50YXRpb25zCisJICogbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzLgorCSAqLworCXJlZ3MuaC5hbCA9ICh1c2hvcnQpbW9kZTsKKwlyZWdzLmguYWggPSAwOworCVBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRlLT5WQkVWZXJzaW9uIDwgMHgzMDAgJiYgKG1vZGUgJiB2YmVSZWZyZXNoQ3RybCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJlZ3MueC5heCA9IDB4NEYwMjsKLSAgICAgICAgcmVncy54LmJ4ID0gKHVzaG9ydCltb2RlOwotICAgICAgICBpZiAoKG1vZGUgJiB2YmVSZWZyZXNoQ3RybCkgJiYgY3J0YykKLSAgICAgICAgICAgIFZCRV9jYWxsRVNESSgmcmVncywgY3J0Yywgc2l6ZW9mKCpjcnRjKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOwotICAgICAgICBpZiAocmVncy54LmF4ICE9IFZCRV9TVUNDRVNTKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisJaWYgKHN0YXRlLT5WQkVWZXJzaW9uIDwgMHgzMDAgJiYgKG1vZGUgJiB2YmVSZWZyZXNoQ3RybCkpCisJICAgIHJldHVybiBmYWxzZTsKKwlyZWdzLnguYXggPSAweDRGMDI7CisJcmVncy54LmJ4ID0gKHVzaG9ydCltb2RlOworCWlmICgobW9kZSAmIHZiZVJlZnJlc2hDdHJsKSAmJiBjcnRjKQorCSAgICBWQkVfY2FsbEVTREkoJnJlZ3MsIGNydGMsIHNpemVvZigqY3J0YykpOworCWVsc2UKKwkgICAgUE1faW50ODYoMHgxMCwmcmVncywmcmVncyk7CisJaWYgKHJlZ3MueC5heCAhPSBWQkVfU1VDQ0VTUykKKwkgICAgcmV0dXJuIGZhbHNlOworCX0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDc1LDcgKzQ3NSw3IEBACiAgICAgcmVncy54LmF4ID0gMHg0RjAzOwogICAgIFBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOwogICAgIGlmIChyZWdzLnguYXggIT0gVkJFX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiAtMTsKKwlyZXR1cm4gLTE7CiAgICAgcmV0dXJuIHJlZ3MueC5ieDsKIH0KIApAQCAtNTE1LDcgKzUxNSw3IEBACiAgICAgcmVncy5oLmJsID0gd2luZG93OwogICAgIFBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOwogICAgIGlmIChyZWdzLnguYXggIT0gVkJFX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybiAtMTsKKwlyZXR1cm4gLTE7CiAgICAgcmV0dXJuIHJlZ3MueC5keDsKIH0KIApAQCAtNjM3LDcgKzYzNyw3IEBACiAKICAgICByZWdzLnguYXggPSAweDRGMDc7CiAgICAgaWYgKHdhaXRWUlQpCi0gICAgICAgIHJlZ3MueC5ieCA9IDB4ODA7CisJcmVncy54LmJ4ID0gMHg4MDsKICAgICBlbHNlIHJlZ3MueC5ieCA9IDB4MDA7CiAgICAgcmVncy54LmN4ID0geDsKICAgICByZWdzLnguZHggPSB5OwpAQCAtNjg1LDEyICs2ODUsMTIgQEAKICAgICBSTVJFR1MgIHJlZ3M7CiAKICAgICBpZiAoc3RhdGUtPlZCRVZlcnNpb24gPj0gMHgzMDApIHsKLSAgICAgICAgcmVncy54LmF4ID0gMHg0RjA3OwotICAgICAgICByZWdzLnguYnggPSB3YWl0VlJUID8gMHg4MiA6IDB4MDI7Ci0gICAgICAgIHJlZ3MuZS5lY3ggPSBzdGFydEFkZHI7Ci0gICAgICAgIFBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOwotICAgICAgICByZXR1cm4gcmVncy54LmF4ID09IFZCRV9TVUNDRVNTOwotICAgICAgICB9CisJcmVncy54LmF4ID0gMHg0RjA3OworCXJlZ3MueC5ieCA9IHdhaXRWUlQgPyAweDgyIDogMHgwMjsKKwlyZWdzLmUuZWN4ID0gc3RhcnRBZGRyOworCVBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOworCXJldHVybiByZWdzLnguYXggPT0gVkJFX1NVQ0NFU1M7CisJfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNzEyLDEyICs3MTIsMTIgQEAKICAgICBSTVJFR1MgIHJlZ3M7CiAKICAgICBpZiAoc3RhdGUtPlZCRVZlcnNpb24gPj0gMHgzMDApIHsKLSAgICAgICAgcmVncy54LmF4ID0gMHg0RjA3OwotICAgICAgICByZWdzLnguYnggPSAweDAwMDQ7Ci0gICAgICAgIFBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOwotICAgICAgICBpZiAocmVncy54LmF4ID09IFZCRV9TVUNDRVNTKQotICAgICAgICAgICAgcmV0dXJuIChyZWdzLnguY3ggIT0gMCk7Ci0gICAgICAgIH0KKwlyZWdzLnguYXggPSAweDRGMDc7CisJcmVncy54LmJ4ID0gMHgwMDA0OworCVBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOworCWlmIChyZWdzLnguYXggPT0gVkJFX1NVQ0NFU1MpCisJICAgIHJldHVybiAocmVncy54LmN4ICE9IDApOworCX0KICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTczOCwxMSArNzM4LDExIEBACiAgICAgUk1SRUdTICByZWdzOwogCiAgICAgaWYgKHN0YXRlLT5WQkVWZXJzaW9uID49IDB4MzAwKSB7Ci0gICAgICAgIHJlZ3MueC5heCA9IDB4NEYwNzsKLSAgICAgICAgcmVncy54LmJ4ID0gMHgwMDA1OwotICAgICAgICBQTV9pbnQ4NigweDEwLCZyZWdzLCZyZWdzKTsKLSAgICAgICAgcmV0dXJuIHJlZ3MueC5heCA9PSBWQkVfU1VDQ0VTUzsKLSAgICAgICAgfQorCXJlZ3MueC5heCA9IDB4NEYwNzsKKwlyZWdzLnguYnggPSAweDAwMDU7CisJUE1faW50ODYoMHgxMCwmcmVncywmcmVncyk7CisJcmV0dXJuIHJlZ3MueC5heCA9PSBWQkVfU1VDQ0VTUzsKKwl9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC03NjIsMTEgKzc2MiwxMSBAQAogICAgIFJNUkVHUyAgcmVnczsKIAogICAgIGlmIChzdGF0ZS0+VkJFVmVyc2lvbiA+PSAweDMwMCkgewotICAgICAgICByZWdzLnguYXggPSAweDRGMDc7Ci0gICAgICAgIHJlZ3MueC5ieCA9IDB4MDAwNjsKLSAgICAgICAgUE1faW50ODYoMHgxMCwmcmVncywmcmVncyk7Ci0gICAgICAgIHJldHVybiByZWdzLnguYXggPT0gVkJFX1NVQ0NFU1M7Ci0gICAgICAgIH0KKwlyZWdzLnguYXggPSAweDRGMDc7CisJcmVncy54LmJ4ID0gMHgwMDA2OworCVBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOworCXJldHVybiByZWdzLnguYXggPT0gVkJFX1NVQ0NFU1M7CisJfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNzkzLDEzICs3OTMsMTMgQEAKICAgICBSTVJFR1MgIHJlZ3M7CiAKICAgICBpZiAoc3RhdGUtPlZCRVZlcnNpb24gPj0gMHgzMDApIHsKLSAgICAgICAgcmVncy54LmF4ID0gMHg0RjA3OwotICAgICAgICByZWdzLnguYnggPSB3YWl0VlJUID8gMHg4MyA6IDB4MDM7Ci0gICAgICAgIHJlZ3MuZS5lY3ggPSBsZWZ0QWRkcjsKLSAgICAgICAgcmVncy5lLmVkeCA9IHJpZ2h0QWRkcjsKLSAgICAgICAgUE1faW50ODYoMHgxMCwmcmVncywmcmVncyk7Ci0gICAgICAgIHJldHVybiByZWdzLnguYXggPT0gVkJFX1NVQ0NFU1M7Ci0gICAgICAgIH0KKwlyZWdzLnguYXggPSAweDRGMDc7CisJcmVncy54LmJ4ID0gd2FpdFZSVCA/IDB4ODMgOiAweDAzOworCXJlZ3MuZS5lY3ggPSBsZWZ0QWRkcjsKKwlyZWdzLmUuZWR4ID0gcmlnaHRBZGRyOworCVBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOworCXJldHVybiByZWdzLnguYXggPT0gVkJFX1NVQ0NFU1M7CisJfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtODMyLDE0ICs4MzIsMTQgQEAKICAgICBSTVJFR1MgIHJlZ3M7CiAKICAgICBpZiAoc3RhdGUtPlZCRVZlcnNpb24gPj0gMHgzMDApIHsKLSAgICAgICAgcmVncy54LmF4ID0gMHg0RjBCOwotICAgICAgICByZWdzLmguYmwgPSAweDAwOwotICAgICAgICByZWdzLmUuZWN4ID0gcGl4ZWxDbG9jazsKLSAgICAgICAgcmVncy54LmR4ID0gbW9kZTsKLSAgICAgICAgUE1faW50ODYoMHgxMCwmcmVncywmcmVncyk7Ci0gICAgICAgIGlmIChyZWdzLnguYXggPT0gVkJFX1NVQ0NFU1MpCi0gICAgICAgICAgICByZXR1cm4gcmVncy5lLmVjeDsKLSAgICAgICAgfQorCXJlZ3MueC5heCA9IDB4NEYwQjsKKwlyZWdzLmguYmwgPSAweDAwOworCXJlZ3MuZS5lY3ggPSBwaXhlbENsb2NrOworCXJlZ3MueC5keCA9IG1vZGU7CisJUE1faW50ODYoMHgxMCwmcmVncywmcmVncyk7CisJaWYgKHJlZ3MueC5heCA9PSBWQkVfU1VDQ0VTUykKKwkgICAgcmV0dXJuIHJlZ3MuZS5lY3g7CisJfQogICAgIHJldHVybiAtMTsKIH0KIApAQCAtODc1LDcgKzg3NSw3IEBACiAgICAgcmVncy5oLmJsID0gMHgwMTsKICAgICBQTV9pbnQ4NigweDEwLCZyZWdzLCZyZWdzKTsKICAgICBpZiAocmVncy54LmF4ICE9IFZCRV9TVUNDRVNTKQotICAgICAgICByZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogICAgIHJldHVybiByZWdzLmguYmg7CiB9CiAKQEAgLTkyNywxMSArOTI3LDExIEBACiAgICAgICovCiAgICAgdWxvbmcgc2VnID0gKHVzaG9ydCltb2RlSW5mby0+V2luQVNlZ21lbnQ7CiAgICAgaWYgKHNlZyAhPSAwKSB7Ci0gICAgICAgIGlmIChzZWcgPT0gMHhBMDAwKQotICAgICAgICAgICAgcmV0dXJuICh2b2lkKilQTV9nZXRBMDAwMFBvaW50ZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuICh2b2lkKilQTV9tYXBQaHlzaWNhbEFkZHIoc2VnIDw8IDQsMHhGRkZGLHRydWUpOwotICAgICAgICB9CisJaWYgKHNlZyA9PSAweEEwMDApCisJICAgIHJldHVybiAodm9pZCopUE1fZ2V0QTAwMDBQb2ludGVyKCk7CisJZWxzZQorCSAgICByZXR1cm4gKHZvaWQqKVBNX21hcFBoeXNpY2FsQWRkcihzZWcgPDwgNCwweEZGRkYsdHJ1ZSk7CisJfQogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC05NTYsMTQgKzk1NiwxNCBAQAogCiAgICAgLyogU2VhcmNoIGZvciBhbiBhbHJlYWR5IG1hcHBlZCBwb2ludGVyICovCiAgICAgZm9yIChpID0gMDsgaSA8IG51bVB0cnM7IGkrKykgewotICAgICAgICBpZiAocGh5c1B0cltpXSA9PSBtb2RlSW5mby0+UGh5c0Jhc2VQdHIpCi0gICAgICAgICAgICByZXR1cm4gbGluUHRyW2ldOwotICAgICAgICB9CisJaWYgKHBoeXNQdHJbaV0gPT0gbW9kZUluZm8tPlBoeXNCYXNlUHRyKQorCSAgICByZXR1cm4gbGluUHRyW2ldOworCX0KICAgICBpZiAobnVtUHRycyA8IE1BWF9MSU5fUFRSUykgewotICAgICAgICBwaHlzUHRyW251bVB0cnNdID0gbW9kZUluZm8tPlBoeXNCYXNlUHRyOwotICAgICAgICBsaW5QdHJbbnVtUHRyc10gPSBQTV9tYXBQaHlzaWNhbEFkZHIobW9kZUluZm8tPlBoeXNCYXNlUHRyLChzdGF0ZS0+VkJFTWVtb3J5ICogMTAyNEwpLTEsdHJ1ZSk7Ci0gICAgICAgIHJldHVybiBsaW5QdHJbbnVtUHRycysrXTsKLSAgICAgICAgfQorCXBoeXNQdHJbbnVtUHRyc10gPSBtb2RlSW5mby0+UGh5c0Jhc2VQdHI7CisJbGluUHRyW251bVB0cnNdID0gUE1fbWFwUGh5c2ljYWxBZGRyKG1vZGVJbmZvLT5QaHlzQmFzZVB0ciwoc3RhdGUtPlZCRU1lbW9yeSAqIDEwMjRMKS0xLHRydWUpOworCXJldHVybiBsaW5QdHJbbnVtUHRycysrXTsKKwl9CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTk4OSw1NiArOTg5LDU2IEBACiAgICAgaW50ICAgICAgICAgcG1MZW47CiAKICAgICBpZiAoIXN0YXRlLT5wbUluZm8gJiYgc3RhdGUtPlZCRVZlcnNpb24gPj0gMHgyMDApIHsKLSAgICAgICAgcmVncy54LmF4ID0gMHg0RjBBOwotICAgICAgICByZWdzLnguYnggPSAwOwotICAgICAgICBQTV9pbnQ4NngoMHgxMCwmcmVncywmcmVncywmc3JlZ3MpOwotICAgICAgICBpZiAocmVncy54LmF4ICE9IFZCRV9TVUNDRVNTKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoVkJFX3NoYXJlZCkKLSAgICAgICAgICAgIHN0YXRlLT5wbUluZm8gPSBQTV9tYWxsb2NTaGFyZWQocmVncy54LmN4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdGUtPnBtSW5mbyA9IFBNX21hbGxvYyhyZWdzLnguY3gpOwotICAgICAgICBpZiAoc3RhdGUtPnBtSW5mbyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS0+cG1JbmZvMzIgPSBzdGF0ZS0+cG1JbmZvOwotICAgICAgICBwbUxlbiA9IHJlZ3MueC5jeDsKKwlyZWdzLnguYXggPSAweDRGMEE7CisJcmVncy54LmJ4ID0gMDsKKwlQTV9pbnQ4NngoMHgxMCwmcmVncywmcmVncywmc3JlZ3MpOworCWlmIChyZWdzLnguYXggIT0gVkJFX1NVQ0NFU1MpCisJICAgIHJldHVybjsKKwlpZiAoVkJFX3NoYXJlZCkKKwkgICAgc3RhdGUtPnBtSW5mbyA9IFBNX21hbGxvY1NoYXJlZChyZWdzLnguY3gpOworCWVsc2UKKwkgICAgc3RhdGUtPnBtSW5mbyA9IFBNX21hbGxvYyhyZWdzLnguY3gpOworCWlmIChzdGF0ZS0+cG1JbmZvID09IE5VTEwpCisJICAgIHJldHVybjsKKwlzdGF0ZS0+cG1JbmZvMzIgPSBzdGF0ZS0+cG1JbmZvOworCXBtTGVuID0gcmVncy54LmN4OwogCi0gICAgICAgIC8qIFJlbG9jYXRlIHRoZSBibG9jayBpbnRvIG91ciBsb2NhbCBkYXRhIHNlZ21lbnQgKi8KLSAgICAgICAgY29kZSA9IFBNX21hcFJlYWxQb2ludGVyKHNyZWdzLmVzLHJlZ3MueC5kaSk7Ci0gICAgICAgIG1lbWNweShzdGF0ZS0+cG1JbmZvLGNvZGUscG1MZW4pOworCS8qIFJlbG9jYXRlIHRoZSBibG9jayBpbnRvIG91ciBsb2NhbCBkYXRhIHNlZ21lbnQgKi8KKwljb2RlID0gUE1fbWFwUmVhbFBvaW50ZXIoc3JlZ3MuZXMscmVncy54LmRpKTsKKwltZW1jcHkoc3RhdGUtPnBtSW5mbyxjb2RlLHBtTGVuKTsKIAotICAgICAgICAvKiBOb3cgZG8gYSBzYW5pdHkgY2hlY2sgb24gdGhlIGluZm9ybWF0aW9uIHdlIHJlY2lldmUgdG8gZW5zdXJlCi0gICAgICAgICAqIHRoYXQgaXMgaXMgY29ycmVjdC4gU29tZSBCSU9TIHJldHVybiB0b3RhbGx5IGJvZ3VzIGluZm9ybWF0aW9uCi0gICAgICAgICAqIGluIGhlcmUgKE1hdHJveCBpcyBvbmUpISBVbmRlciBET1MgdGhpcyB3b3JrcyBPSywgYnV0IHVuZGVyIE9TLzIKLSAgICAgICAgICogd2UgYXJlIHNjcmV3ZWQuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoc3RhdGUtPnBtSW5mby0+c2V0V2luZG93ID49IHBtTGVuIHx8Ci0gICAgICAgICAgICBzdGF0ZS0+cG1JbmZvLT5zZXREaXNwbGF5U3RhcnQgPj0gcG1MZW4gfHwKLSAgICAgICAgICAgIHN0YXRlLT5wbUluZm8tPnNldFBhbGV0dGUgPj0gcG1MZW4gfHwKLSAgICAgICAgICAgIHN0YXRlLT5wbUluZm8tPklPUHJpdkluZm8gPj0gcG1MZW4pIHsKLSAgICAgICAgICAgIGlmIChWQkVfc2hhcmVkKQotICAgICAgICAgICAgICAgIFBNX2ZyZWVTaGFyZWQoc3RhdGUtPnBtSW5mbyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUE1fZnJlZShzdGF0ZS0+cG1JbmZvKTsKLSAgICAgICAgICAgIHN0YXRlLT5wbUluZm8zMiA9IHN0YXRlLT5wbUluZm8gPSBOVUxMOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorCS8qIE5vdyBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgaW5mb3JtYXRpb24gd2UgcmVjaWV2ZSB0byBlbnN1cmUKKwkgKiB0aGF0IGlzIGlzIGNvcnJlY3QuIFNvbWUgQklPUyByZXR1cm4gdG90YWxseSBib2d1cyBpbmZvcm1hdGlvbgorCSAqIGluIGhlcmUgKE1hdHJveCBpcyBvbmUpISBVbmRlciBET1MgdGhpcyB3b3JrcyBPSywgYnV0IHVuZGVyIE9TLzIKKwkgKiB3ZSBhcmUgc2NyZXdlZC4KKwkgKi8KKwlpZiAoc3RhdGUtPnBtSW5mby0+c2V0V2luZG93ID49IHBtTGVuIHx8CisJICAgIHN0YXRlLT5wbUluZm8tPnNldERpc3BsYXlTdGFydCA+PSBwbUxlbiB8fAorCSAgICBzdGF0ZS0+cG1JbmZvLT5zZXRQYWxldHRlID49IHBtTGVuIHx8CisJICAgIHN0YXRlLT5wbUluZm8tPklPUHJpdkluZm8gPj0gcG1MZW4pIHsKKwkgICAgaWYgKFZCRV9zaGFyZWQpCisJCVBNX2ZyZWVTaGFyZWQoc3RhdGUtPnBtSW5mbyk7CisJICAgIGVsc2UKKwkJUE1fZnJlZShzdGF0ZS0+cG1JbmZvKTsKKwkgICAgc3RhdGUtPnBtSW5mbzMyID0gc3RhdGUtPnBtSW5mbyA9IE5VTEw7CisJICAgIHJldHVybjsKKwkgICAgfQogCi0gICAgICAgIC8qIFJlYWQgdGhlIElPIHByaXZlbGVkZ2UgaW5mbyBhbmQgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8KLSAgICAgICAgICogcGFzcyBhIHNlbGVjdG9yIHRvIE1NSU8gcmVnaXN0ZXJzIHRvIHRoZSBiYW5rIHN3aXRjaCBjb2RlLgotICAgICAgICAgKiBTaW5jZSB3ZSBubyBsb25nZXIgc3VwcG9ydCBzZWxlY3RvciBhbGxvY2F0aW9uLCB3ZSBubyBsb25nZXIKLSAgICAgICAgICogc3VwcG9ydCB0aGlzIG1lY2hhbmlzbSBzbyB3ZSBkaXNhYmxlIHRoZSBwcm90ZWN0ZWQgbW9kZQotICAgICAgICAgKiBpbnRlcmZhY2UgaW4gdGhpcyBjYXNlLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHN0YXRlLT5wbUluZm8tPklPUHJpdkluZm8gJiYgIXN0YXRlLT5NTUlPU2VsKSB7Ci0gICAgICAgICAgICB1c2hvcnQgKnAgPSAodXNob3J0KikoKHVjaGFyKilzdGF0ZS0+cG1JbmZvICsgc3RhdGUtPnBtSW5mby0+SU9Qcml2SW5mbyk7Ci0gICAgICAgICAgICB3aGlsZSAoKnAgIT0gMHhGRkZGKQotICAgICAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIHArKzsKLSAgICAgICAgICAgIGlmICgqcCAhPSAweEZGRkYpCi0gICAgICAgICAgICAgICAgVkJFX2ZyZWVQTUNvZGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCS8qIFJlYWQgdGhlIElPIHByaXZlbGVkZ2UgaW5mbyBhbmQgZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8KKwkgKiBwYXNzIGEgc2VsZWN0b3IgdG8gTU1JTyByZWdpc3RlcnMgdG8gdGhlIGJhbmsgc3dpdGNoIGNvZGUuCisJICogU2luY2Ugd2Ugbm8gbG9uZ2VyIHN1cHBvcnQgc2VsZWN0b3IgYWxsb2NhdGlvbiwgd2Ugbm8gbG9uZ2VyCisJICogc3VwcG9ydCB0aGlzIG1lY2hhbmlzbSBzbyB3ZSBkaXNhYmxlIHRoZSBwcm90ZWN0ZWQgbW9kZQorCSAqIGludGVyZmFjZSBpbiB0aGlzIGNhc2UuCisJICovCisJaWYgKHN0YXRlLT5wbUluZm8tPklPUHJpdkluZm8gJiYgIXN0YXRlLT5NTUlPU2VsKSB7CisJICAgIHVzaG9ydCAqcCA9ICh1c2hvcnQqKSgodWNoYXIqKXN0YXRlLT5wbUluZm8gKyBzdGF0ZS0+cG1JbmZvLT5JT1ByaXZJbmZvKTsKKwkgICAgd2hpbGUgKCpwICE9IDB4RkZGRikKKwkJcCsrOworCSAgICBwKys7CisJICAgIGlmICgqcCAhPSAweEZGRkYpCisJCVZCRV9mcmVlUE1Db2RlKCk7CisJICAgIH0KKwl9CiB9CiAKIHZvaWQgKiBWQkVBUEkgVkJFX2dldFNldEJhbmsodm9pZCkKQEAgLTEwNTAsMTAgKzEwNTAsMTAgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB7CiAgICAgaWYgKHN0YXRlLT5WQkVWZXJzaW9uID49IDB4MjAwKSB7Ci0gICAgICAgIEluaXRQTUNvZGUoKTsKLSAgICAgICAgaWYgKHN0YXRlLT5wbUluZm8pCi0gICAgICAgICAgICByZXR1cm4gKHVjaGFyKilzdGF0ZS0+cG1JbmZvICsgc3RhdGUtPnBtSW5mby0+c2V0V2luZG93OwotICAgICAgICB9CisJSW5pdFBNQ29kZSgpOworCWlmIChzdGF0ZS0+cG1JbmZvKQorCSAgICByZXR1cm4gKHVjaGFyKilzdGF0ZS0+cG1JbmZvICsgc3RhdGUtPnBtSW5mby0+c2V0V2luZG93OworCX0KICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTA2NiwxMCArMTA2NiwxMCBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHsKICAgICBpZiAoc3RhdGUtPlZCRVZlcnNpb24gPj0gMHgyMDApIHsKLSAgICAgICAgSW5pdFBNQ29kZSgpOwotICAgICAgICBpZiAoc3RhdGUtPnBtSW5mbykKLSAgICAgICAgICAgIHJldHVybiAodWNoYXIqKXN0YXRlLT5wbUluZm8gKyBzdGF0ZS0+cG1JbmZvLT5zZXREaXNwbGF5U3RhcnQ7Ci0gICAgICAgIH0KKwlJbml0UE1Db2RlKCk7CisJaWYgKHN0YXRlLT5wbUluZm8pCisJICAgIHJldHVybiAodWNoYXIqKXN0YXRlLT5wbUluZm8gKyBzdGF0ZS0+cG1JbmZvLT5zZXREaXNwbGF5U3RhcnQ7CisJfQogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xMDgyLDEwICsxMDgyLDEwIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogewogICAgIGlmIChzdGF0ZS0+VkJFVmVyc2lvbiA+PSAweDIwMCkgewotICAgICAgICBJbml0UE1Db2RlKCk7Ci0gICAgICAgIGlmIChzdGF0ZS0+cG1JbmZvKQotICAgICAgICAgICAgcmV0dXJuICh1Y2hhciopc3RhdGUtPnBtSW5mbyArIHN0YXRlLT5wbUluZm8tPnNldFBhbGV0dGU7Ci0gICAgICAgIH0KKwlJbml0UE1Db2RlKCk7CisJaWYgKHN0YXRlLT5wbUluZm8pCisJICAgIHJldHVybiAodWNoYXIqKXN0YXRlLT5wbUluZm8gKyBzdGF0ZS0+cG1JbmZvLT5zZXRQYWxldHRlOworCX0KICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTEwNCwxMyArMTEwNCwxMyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHsKICAgICBpZiAoc3RhdGUtPnBtSW5mbykgewotICAgICAgICBpZiAoVkJFX3NoYXJlZCkKLSAgICAgICAgICAgIFBNX2ZyZWVTaGFyZWQoc3RhdGUtPnBtSW5mbyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFBNX2ZyZWUoc3RhdGUtPnBtSW5mbyk7Ci0gICAgICAgIHN0YXRlLT5wbUluZm8gPSBOVUxMOwotICAgICAgICBzdGF0ZS0+cG1JbmZvMzIgPSBOVUxMOwotICAgICAgICB9CisJaWYgKFZCRV9zaGFyZWQpCisJICAgIFBNX2ZyZWVTaGFyZWQoc3RhdGUtPnBtSW5mbyk7CisJZWxzZQorCSAgICBQTV9mcmVlKHN0YXRlLT5wbUluZm8pOworCXN0YXRlLT5wbUluZm8gPSBOVUxMOworCXN0YXRlLT5wbUluZm8zMiA9IE5VTEw7CisJfQogfQogCiB2b2lkIFZCRUFQSSBWQkVfc2hhcmVQTUNvZGUodm9pZCkKQEAgLTExODMsMzEgKzExODMsMzEgQEAKIAogICAgIEluaXRQTUNvZGUoKTsKICAgICBpZiAoc3RhdGUtPlZCRVZlcnNpb24gPj0gMHgyMDAgJiYgc3RhdGUtPnBtSW5mbzMyICYmICFzdGF0ZS0+TU1JT1NlbCkgewotICAgICAgICBjb2RlID0gKHVjaGFyKilzdGF0ZS0+cG1JbmZvMzIgKyBzdGF0ZS0+cG1JbmZvMzItPnNldFdpbmRvdzsKLSAgICAgICAgaWYgKHN0YXRlLT5wbUluZm8zMi0+ZXh0ZW5zaW9uU2lnID09IFZCRTIwX0VYVF9TSUcpCi0gICAgICAgICAgICBsZW4gPSBzdGF0ZS0+cG1JbmZvMzItPnNldFdpbmRvd0xlbi0xOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIFdlIGFyZSBydW5uaW5nIG9uIGEgc3lzdGVtIHdpdGhvdXQgdGhlIFVuaVZCRSA1LjIgZXh0ZW5zaW9uLgotICAgICAgICAgICAgICogV2UgZG8gYXMgYmVzdCB3ZSBjYW4gYnkgc2Nhbm5pbmcgdGhyb3VnaCB0aGUgY29kZSBmb3IgdGhlCi0gICAgICAgICAgICAgKiByZXQgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGguIFRoaXMgaXMgbm90IGZvb2xwcm9vZiwKLSAgICAgICAgICAgICAqIGJ1dCBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHAgPSBjb2RlOwotICAgICAgICAgICAgd2hpbGUgKCpwICE9IDB4QzMpCi0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgbGVuID0gcCAtIGNvZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGlmICgobGVuICsgc2l6ZW9mKFZCRTIwQV9iYW5rRnVuYzMyX1N0YXJ0KSArIHNpemVvZihWQkUyMF9iYW5rRnVuYzMyX0VuZCkpID4gc2l6ZW9mKGJhbmtGdW5jMzIpKQotICAgICAgICAgICAgUE1fZmF0YWxFcnJvcigiMzItYml0IGJhbmsgc3dpdGNoIGZ1bmN0aW9uIHRvbyBsb25nISIpOwotICAgICAgICBjb3B5KHAsYmFua0Z1bmMzMixWQkUyMEFfYmFua0Z1bmMzMl9TdGFydCk7Ci0gICAgICAgIG1lbWNweShwLGNvZGUsbGVuKTsKLSAgICAgICAgcCArPSBsZW47Ci0gICAgICAgIGNvcHkocCxwLFZCRTIwX2JhbmtGdW5jMzJfRW5kKTsKLSAgICAgICAgKmNvZGVMZW4gPSBwIC0gYmFua0Z1bmMzMjsKLSAgICAgICAgYmFua0Z1bmMzMltWQkUyMF9hZGp1c3RPZmZzZXRdID0gKHVjaGFyKWJhbmtBZGp1c3Q7Ci0gICAgICAgICpiYW5rRnVuYyA9IGJhbmtGdW5jMzI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisJY29kZSA9ICh1Y2hhciopc3RhdGUtPnBtSW5mbzMyICsgc3RhdGUtPnBtSW5mbzMyLT5zZXRXaW5kb3c7CisJaWYgKHN0YXRlLT5wbUluZm8zMi0+ZXh0ZW5zaW9uU2lnID09IFZCRTIwX0VYVF9TSUcpCisJICAgIGxlbiA9IHN0YXRlLT5wbUluZm8zMi0+c2V0V2luZG93TGVuLTE7CisJZWxzZSB7CisJICAgIC8qIFdlIGFyZSBydW5uaW5nIG9uIGEgc3lzdGVtIHdpdGhvdXQgdGhlIFVuaVZCRSA1LjIgZXh0ZW5zaW9uLgorCSAgICAgKiBXZSBkbyBhcyBiZXN0IHdlIGNhbiBieSBzY2FubmluZyB0aHJvdWdoIHRoZSBjb2RlIGZvciB0aGUKKwkgICAgICogcmV0IGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgbGVuZ3RoLiBUaGlzIGlzIG5vdCBmb29scHJvb2YsCisJICAgICAqIGJ1dCBpcyB0aGUgYmVzdCB3ZSBjYW4gZG8uCisJICAgICAqLworCSAgICBwID0gY29kZTsKKwkgICAgd2hpbGUgKCpwICE9IDB4QzMpCisJCXArKzsKKwkgICAgbGVuID0gcCAtIGNvZGU7CisJICAgIH0KKwlpZiAoKGxlbiArIHNpemVvZihWQkUyMEFfYmFua0Z1bmMzMl9TdGFydCkgKyBzaXplb2YoVkJFMjBfYmFua0Z1bmMzMl9FbmQpKSA+IHNpemVvZihiYW5rRnVuYzMyKSkKKwkgICAgUE1fZmF0YWxFcnJvcigiMzItYml0IGJhbmsgc3dpdGNoIGZ1bmN0aW9uIHRvbyBsb25nISIpOworCWNvcHkocCxiYW5rRnVuYzMyLFZCRTIwQV9iYW5rRnVuYzMyX1N0YXJ0KTsKKwltZW1jcHkocCxjb2RlLGxlbik7CisJcCArPSBsZW47CisJY29weShwLHAsVkJFMjBfYmFua0Z1bmMzMl9FbmQpOworCSpjb2RlTGVuID0gcCAtIGJhbmtGdW5jMzI7CisJYmFua0Z1bmMzMltWQkUyMF9hZGp1c3RPZmZzZXRdID0gKHVjaGFyKWJhbmtBZGp1c3Q7CisJKmJhbmtGdW5jID0gYmFua0Z1bmMzMjsKKwlyZXR1cm4gdHJ1ZTsKKwl9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9iZW9zL2NwdWluZm8uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Jlb3MvY3B1aW5mby5jCmluZGV4IGM4ZjgyNWUuLmNiM2FmZTIgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Jlb3MvY3B1aW5mby5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Jlb3MvY3B1aW5mby5jCkBAIC02NCw4ICs2NCw4IEBACiBzdGF0aWMgdm9pZCBHZXRDb3VudGVyRnJlcXVlbmN5KAogICAgIENQVV9sYXJnZUludGVnZXIgKmZyZXEpCiB7Ci0gICAgLy8gVE9ETzogUmV0dXJuIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGNvdW50ZXIgaW4gaGVyZS4gWW91IHNob3VsZCB0cnkgdG8KLSAgICAvLyAgICAgICBub3JtYWxpc2UgdGhpcyB2YWx1ZSB0byBiZSBhcm91bmQgMTAwLDAwMCB0aWNrcyBwZXIgc2Vjb25kLgorICAgIC8qIFRPRE86IFJldHVybiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBjb3VudGVyIGluIGhlcmUuIFlvdSBzaG91bGQgdHJ5IHRvICovCisgICAgLyogICAgICAgbm9ybWFsaXNlIHRoaXMgdmFsdWUgdG8gYmUgYXJvdW5kIDEwMCwwMDAgdGlja3MgcGVyIHNlY29uZC4gKi8KICAgICBmcmVxLT5sb3cgPSAxMDAwMDAwOwogICAgIGZyZXEtPmhpZ2ggPSAwOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vYmVvcy9ldmVudC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vYmVvcy9ldmVudC5jCmluZGV4IDRjMzJjZTcuLjkzYzZjMGEgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Jlb3MvZXZlbnQuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9iZW9zL2V2ZW50LmMKQEAgLTU5LDcgKzU5LDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1bG9uZyBfRVZUX2dldFRpY2tzKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIHlvdXIgT1MhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIHlvdXIgT1MhICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02OCwzNiArNjgsMzYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBfRVZUX3B1bXBNZXNzYWdlcyh2b2lkKQogewotICAgIC8vIFRPRE86IFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gcmVhZCBhbGwga2V5Ym9hcmQgYW5kIG1vdXNlCi0gICAgLy8gICAgICAgZXZlbnRzIGZyb20gdGhlIE9TIHNwZWNpZmljIGV2ZW50IHF1ZXVlLCB0cmFuc2xhdGUgdGhlbSBhbmQgcG9zdAotICAgIC8vICAgICAgIHRoZW0gaW50byB0aGUgU2NpVGVjaCBldmVudCBxdWV1ZS4KLSAgICAvLwotICAgIC8vIE5PVEU6IFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBpbXBvcnRhbnQgdGhpbmdzIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXN0Ci0gICAgLy8gICAgICAgdGFrZSBjYXJlIG9mOgotICAgIC8vCi0gICAgLy8gIDEuIFN1cHBvcnQgZm9yIEtFWURPV04sIEtFWVJFUEVBVCBhbmQgS0VZVVAgaXMgcmVxdWlyZWQuCi0gICAgLy8KLSAgICAvLyAgMi4gU3VwcG9ydCBmb3IgcmVhZGluZyBoYXJkd2FyZSBzY2FuIGNvZGUgYXMgd2VsbCBhcyBBU0NJSQotICAgIC8vICAgICB0cmFuc2xhdGVkIHZhbHVlcyBpcyByZXF1aXJlZC4gR2FtZXMgdXNlIHRoZSBzY2FuIGNvZGVzIHJhdGhlcgotICAgIC8vICAgICB0aGFuIEFTQ0lJIHZhbHVlcy4gU2NhbiBjb2RlcyBnbyBpbnRvIHRoZSBoaWdoIG9yZGVyIGJ5dGUgb2YgdGhlCi0gICAgLy8gICAgIGtleWJvYXJkIG1lc3NhZ2UgZmllbGQuCi0gICAgLy8KLSAgICAvLyAgMy4gU3VwcG9ydCBmb3IgYXQgbGVhc3QgcmVhZGluZyBtb3VzZSBtb3Rpb24gZGF0YSAobWlja2V5cykgZnJvbSB0aGUKLSAgICAvLyAgICAgbW91c2UgaXMgcmVxdWlyZWQuIFVzaW5nIHRoZSBtaWNrZXkgdmFsdWVzLCB3ZSBjYW4gdGhlbiB0cmFuc2xhdGUKLSAgICAvLyAgICAgdG8gbW91c2UgY3Vyc29yIGNvb3JkaW5hdGVzIHNjYWxlZCB0byB0aGUgcmFuZ2Ugb2YgdGhlIGN1cnJlbnQKLSAgICAvLyAgICAgZ3JhcGhpY3MgZGlzcGxheSBtb2RlLiBNb3VzZSB2YWx1ZXMgYXJlIHNjYWxlZCBiYXNlZCBvbiB0aGUKLSAgICAvLyAgICAgZ2xvYmFsICdyYW5nZVgnIGFuZCAncmFuZ2VZJy4KLSAgICAvLwotICAgIC8vICA0LiBTdXBwb3J0IGZvciBhIHRpbWVzdGFtcCBmb3IgdGhlIGV2ZW50cyBpcyByZXF1aXJlZCwgd2hpY2ggaXMKLSAgICAvLyAgICAgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSBzb21lIGV2ZW50ICh1c3VhbGx5Ci0gICAgLy8gICAgIHN5c3RlbSBzdGFydHVwKS4gVGhpcyBpcyB0aGUgdGltZXN0YW1wIHdoZW4gdGhlIGV2ZW50IG9jY3VycmVkCi0gICAgLy8gICAgIChpZTogYXQgaW50ZXJydXB0IHRpbWUpIG5vdCB3aGVuIGl0IHdhcyBzdHVmZiBpbnRvIHRoZSBTY2lUZWNoCi0gICAgLy8gICAgIGV2ZW50IHF1ZXVlLgotICAgIC8vCi0gICAgLy8gIDUuIFN1cHBvcnQgZm9yIG1vdXNlIGRvdWJsZSBjbGljayBldmVudHMuIElmIHRoZSBPUyBoYXMgYSBuYXRpdmUKLSAgICAvLyAgICAgbWVjaGFuaXNtIHRvIGRldGVybWluZSB0aGlzLCBpdCBzaG91bGQgYmUgdXNlZC4gT3RoZXJ3aXNlIHRoZQotICAgIC8vICAgICB0aW1lIHN0YW1wIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCBieSB0aGUgZ2VuZXJpYyBldmVudCBjb2RlCi0gICAgLy8gICAgIHRvIGdlbmVyYXRlIGRvdWJsZSBjbGljayBldmVudHMuCisgICAgLyogVE9ETzogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byByZWFkIGFsbCBrZXlib2FyZCBhbmQgbW91c2UgKi8KKyAgICAvKiAgICAgICBldmVudHMgZnJvbSB0aGUgT1Mgc3BlY2lmaWMgZXZlbnQgcXVldWUsIHRyYW5zbGF0ZSB0aGVtIGFuZCBwb3N0ICovCisgICAgLyogICAgICAgdGhlbSBpbnRvIHRoZSBTY2lUZWNoIGV2ZW50IHF1ZXVlLiAqLworICAgIC8qICovCisgICAgLyogTk9URTogVGhlcmUgYXJlIGEgY291cGxlIG9mIGltcG9ydGFudCB0aGluZ3MgdGhhdCB0aGlzIGZ1bmN0aW9uIG11c3QgKi8KKyAgICAvKiAgICAgICB0YWtlIGNhcmUgb2Y6ICovCisgICAgLyogKi8KKyAgICAvKiAgMS4gU3VwcG9ydCBmb3IgS0VZRE9XTiwgS0VZUkVQRUFUIGFuZCBLRVlVUCBpcyByZXF1aXJlZC4gKi8KKyAgICAvKiAqLworICAgIC8qICAyLiBTdXBwb3J0IGZvciByZWFkaW5nIGhhcmR3YXJlIHNjYW4gY29kZSBhcyB3ZWxsIGFzIEFTQ0lJICovCisgICAgLyogICAgIHRyYW5zbGF0ZWQgdmFsdWVzIGlzIHJlcXVpcmVkLiBHYW1lcyB1c2UgdGhlIHNjYW4gY29kZXMgcmF0aGVyICovCisgICAgLyogICAgIHRoYW4gQVNDSUkgdmFsdWVzLiBTY2FuIGNvZGVzIGdvIGludG8gdGhlIGhpZ2ggb3JkZXIgYnl0ZSBvZiB0aGUgKi8KKyAgICAvKiAgICAga2V5Ym9hcmQgbWVzc2FnZSBmaWVsZC4gKi8KKyAgICAvKiAqLworICAgIC8qICAzLiBTdXBwb3J0IGZvciBhdCBsZWFzdCByZWFkaW5nIG1vdXNlIG1vdGlvbiBkYXRhIChtaWNrZXlzKSBmcm9tIHRoZSAqLworICAgIC8qICAgICBtb3VzZSBpcyByZXF1aXJlZC4gVXNpbmcgdGhlIG1pY2tleSB2YWx1ZXMsIHdlIGNhbiB0aGVuIHRyYW5zbGF0ZSAqLworICAgIC8qICAgICB0byBtb3VzZSBjdXJzb3IgY29vcmRpbmF0ZXMgc2NhbGVkIHRvIHRoZSByYW5nZSBvZiB0aGUgY3VycmVudCAqLworICAgIC8qICAgICBncmFwaGljcyBkaXNwbGF5IG1vZGUuIE1vdXNlIHZhbHVlcyBhcmUgc2NhbGVkIGJhc2VkIG9uIHRoZSAqLworICAgIC8qICAgICBnbG9iYWwgJ3JhbmdlWCcgYW5kICdyYW5nZVknLiAqLworICAgIC8qICovCisgICAgLyogIDQuIFN1cHBvcnQgZm9yIGEgdGltZXN0YW1wIGZvciB0aGUgZXZlbnRzIGlzIHJlcXVpcmVkLCB3aGljaCBpcyAqLworICAgIC8qICAgICBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHNvbWUgZXZlbnQgKHVzdWFsbHkgKi8KKyAgICAvKiAgICAgc3lzdGVtIHN0YXJ0dXApLiBUaGlzIGlzIHRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgZXZlbnQgb2NjdXJyZWQgKi8KKyAgICAvKiAgICAgKGllOiBhdCBpbnRlcnJ1cHQgdGltZSkgbm90IHdoZW4gaXQgd2FzIHN0dWZmIGludG8gdGhlIFNjaVRlY2ggKi8KKyAgICAvKiAgICAgZXZlbnQgcXVldWUuICovCisgICAgLyogKi8KKyAgICAvKiAgNS4gU3VwcG9ydCBmb3IgbW91c2UgZG91YmxlIGNsaWNrIGV2ZW50cy4gSWYgdGhlIE9TIGhhcyBhIG5hdGl2ZSAqLworICAgIC8qICAgICBtZWNoYW5pc20gdG8gZGV0ZXJtaW5lIHRoaXMsIGl0IHNob3VsZCBiZSB1c2VkLiBPdGhlcndpc2UgdGhlICovCisgICAgLyogICAgIHRpbWUgc3RhbXAgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGJ5IHRoZSBnZW5lcmljIGV2ZW50IGNvZGUgKi8KKyAgICAvKiAgICAgdG8gZ2VuZXJhdGUgZG91YmxlIGNsaWNrIGV2ZW50cy4gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgIGluaXRFdmVudFF1ZXVlKCk7CiAgICAgbWVtc2V0KGtleVVwTXNnLDAsc2l6ZW9mKGtleVVwTXNnKSk7CiAKLSAgICAvLyBUT0RPOiBEbyBhbnkgT1Mgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gaGVyZQorICAgIC8qIFRPRE86IERvIGFueSBPUyBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBoZXJlICovCiAKICAgICAvKiBDYXRjaCBwcm9ncmFtIHRlcm1pbmF0aW9uIHNpZ25hbHMgc28gd2UgY2FuIGNsZWFuIHVwIHByb3Blcmx5ICovCiAgICAgc2lnbmFsKFNJR0FCUlQsIF9FVlRfYWJvcnQpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBFVlRfcmVzdW1lKHZvaWQpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3Igbm9uIERPUyBzeXN0ZW1zCisgICAgLyogRG8gbm90aGluZyBmb3Igbm9uIERPUyBzeXN0ZW1zICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xODEsNyArMTgxLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIEVWVF9zdXNwZW5kKHZvaWQpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3Igbm9uIERPUyBzeXN0ZW1zCisgICAgLyogRG8gbm90aGluZyBmb3Igbm9uIERPUyBzeXN0ZW1zICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xOTUsNSArMTk1LDUgQEAKICAgICBzaWduYWwoU0lHRlBFLCBTSUdfREZMKTsKICAgICBzaWduYWwoU0lHSU5ULCBTSUdfREZMKTsKIAotICAgIC8vIFRPRE86IERvIGFueSBPUyBzcGVjaWZpYyBjbGVhbnVwIGluIGhlcmUKKyAgICAvKiBUT0RPOiBEbyBhbnkgT1Mgc3BlY2lmaWMgY2xlYW51cCBpbiBoZXJlICovCiB9CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9iZW9zL29zaGRyLmggYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9iZW9zL29zaGRyLmgKaW5kZXggYWI0MjNkNC4uMDQzZDczZSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vYmVvcy9vc2hkci5oCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Jlb3Mvb3NoZHIuaApAQCAtMjgsNSArMjgsNSBAQAogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLy8gVGhpcyBpcyB3aGVyZSB5b3UgaW5jbHVkZSBPUyBzcGVjaWZpYyBoZWFkZXJzIGZvciB0aGUgZXZlbnQgaGFuZGxpbmcKLS8vIGxpYnJhcnkuCisvKiBUaGlzIGlzIHdoZXJlIHlvdSBpbmNsdWRlIE9TIHNwZWNpZmljIGhlYWRlcnMgZm9yIHRoZSBldmVudCBoYW5kbGluZyAqLworLyogbGlicmFyeS4gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Jlb3MvcG0uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Jlb3MvcG0uYwppbmRleCBjNTdkODJhLi4yZGNiMWI4IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9iZW9zL3BtLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vYmVvcy9wbS5jCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLS8vIFRPRE86IEluY2x1ZGUgYW55IEJlT1Mgc3BlY2lmaWMgaGVhZGVycyBoZXJlIQorLyogVE9ETzogSW5jbHVkZSBhbnkgQmVPUyBzcGVjaWZpYyBoZWFkZXJzIGhlcmUhICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTQ4LDEyICs0OCwxMiBAQAogCiB2b2lkIFBNQVBJIFBNX2luaXQodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBEbyBhbnkgaW5pdGlhbGlzYXRpb24gaW4gaGVyZS4gVGhpcyBpbmNsdWRlcyBnZXR0aW5nIElPUEwKLSAgICAvLyAgICAgICBhY2Nlc3MgZm9yIHRoZSBwcm9jZXNzIGNhbGxpbmcgUE1faW5pdC4gVGhpcyB3aWxsIGdldCBjYWxsZWQKLSAgICAvLyAgICAgICBtb3JlIHRoYW4gb25jZS4KKyAgICAvKiBUT0RPOiBEbyBhbnkgaW5pdGlhbGlzYXRpb24gaW4gaGVyZS4gVGhpcyBpbmNsdWRlcyBnZXR0aW5nIElPUEwgKi8KKyAgICAvKiAgICAgICBhY2Nlc3MgZm9yIHRoZSBwcm9jZXNzIGNhbGxpbmcgUE1faW5pdC4gVGhpcyB3aWxsIGdldCBjYWxsZWQgKi8KKyAgICAvKiAgICAgICBtb3JlIHRoYW4gb25jZS4gKi8KIAotICAgIC8vIFRPRE86IElmIHlvdSBzdXBwb3J0IHRoZSBzdXBwbGllZCBNVFJSIHJlZ2lzdGVyIHN0dWZmICh5b3UgbmVlZCB0bwotICAgIC8vICAgICAgIGJlIGF0IHJpbmcgMCBmb3IgdGhpcyEpLCB5b3Ugc2hvdWxkIGluaXRpYWxpc2UgaXQgaW4gaGVyZS4KKyAgICAvKiBUT0RPOiBJZiB5b3Ugc3VwcG9ydCB0aGUgc3VwcGxpZWQgTVRSUiByZWdpc3RlciBzdHVmZiAoeW91IG5lZWQgdG8gKi8KKyAgICAvKiAgICAgICBiZSBhdCByaW5nIDAgZm9yIHRoaXMhKSwgeW91IHNob3VsZCBpbml0aWFsaXNlIGl0IGluIGhlcmUuICovCiAKIC8qIE1UUlJfaW5pdCgpOyAqLwogfQpAQCAtNjgsOSArNjgsOSBAQAogewogICAgIHVpbnQgcG9zID0gc3RybGVuKHMpOwogICAgIGlmIChzW3Bvcy0xXSAhPSAnLycpIHsKLSAgICAgICAgc1twb3NdID0gJy8nOwotICAgICAgICBzW3BvcysxXSA9ICdcMCc7Ci0gICAgICAgIH0KKwlzW3Bvc10gPSAnLyc7CisJc1twb3MrMV0gPSAnXDAnOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9zZXRGYXRhbEVycm9yQ2xlYW51cCgKQEAgLTgxLDExMiArODEsMTEyIEBACiAKIHZvaWQgUE1BUEkgUE1fZmF0YWxFcnJvcihjb25zdCBjaGFyICptc2cpCiB7Ci0gICAgLy8gVE9ETzogSWYgeW91IGFyZSBydW5uaW5nIGluIGEgR1VJIGVudmlyb25tZW50IHdpdGhvdXQgYSBjb25zb2xlLAotICAgIC8vICAgICAgIHRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byBicmluZyB1cCBhIGZhdGFsIGVycm9yIG1lc3NhZ2UKLSAgICAvLyAgICAgICBib3ggYW5kIHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbS4KKyAgICAvKiBUT0RPOiBJZiB5b3UgYXJlIHJ1bm5pbmcgaW4gYSBHVUkgZW52aXJvbm1lbnQgd2l0aG91dCBhIGNvbnNvbGUsICovCisgICAgLyogICAgICAgdGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIGJyaW5nIHVwIGEgZmF0YWwgZXJyb3IgbWVzc2FnZSAqLworICAgIC8qICAgICAgIGJveCBhbmQgdGVybWluYXRlIHRoZSBwcm9ncmFtLiAqLwogICAgIGlmIChmYXRhbEVycm9yQ2xlYW51cCkKLSAgICAgICAgZmF0YWxFcnJvckNsZWFudXAoKTsKKwlmYXRhbEVycm9yQ2xlYW51cCgpOwogICAgIGZwcmludGYoc3RkZXJyLCIlc1xuIiwgbXNnKTsKICAgICBleGl0KDEpOwogfQogCiB2b2lkICogUE1BUEkgUE1fZ2V0VkVTQUJ1Zih1aW50ICpsZW4sdWludCAqcnNlZyx1aW50ICpyb2ZmKQogewotICAgIC8vIE5vIEJJT1MgYWNjZXNzIGZvciB0aGUgQmVPUworICAgIC8qIE5vIEJJT1MgYWNjZXNzIGZvciB0aGUgQmVPUyAqLwogICAgIHJldHVybiBOVUxMOwogfQogCiBpbnQgUE1BUEkgUE1fa2JoaXQodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGtleSBpcyBhdmFpbGFibGUgdG8gYmUgcmVhZC4gVGhpcwotICAgIC8vICAgICAgIHNob3VsZCBiZSBpbXBsZW1lbnRlZCwgYnV0IGlzIG1vc3RseSB1c2VkIGJ5IHRoZSB0ZXN0IHByb2dyYW1zCi0gICAgLy8gICAgICAgdGhlc2UgZGF5cy4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGtleSBpcyBhdmFpbGFibGUgdG8gYmUgcmVhZC4gVGhpcyAqLworICAgIC8qICAgICAgIHNob3VsZCBiZSBpbXBsZW1lbnRlZCwgYnV0IGlzIG1vc3RseSB1c2VkIGJ5IHRoZSB0ZXN0IHByb2dyYW1zICovCisgICAgLyogICAgICAgdGhlc2UgZGF5cy4gKi8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogaW50IFBNQVBJIFBNX2dldGNoKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyByZXR1cm5zIHRoZSBBU0NJSSBjb2RlIG9mIHRoZSBrZXkgcHJlc3NlZC4gVGhpcwotICAgIC8vICAgICAgIHNob3VsZCBiZSBpbXBsZW1lbnRlZCwgYnV0IGlzIG1vc3RseSB1c2VkIGJ5IHRoZSB0ZXN0IHByb2dyYW1zCi0gICAgLy8gICAgICAgdGhlc2UgZGF5cy4KKyAgICAvKiBUT0RPOiBUaGlzIHJldHVybnMgdGhlIEFTQ0lJIGNvZGUgb2YgdGhlIGtleSBwcmVzc2VkLiBUaGlzICovCisgICAgLyogICAgICAgc2hvdWxkIGJlIGltcGxlbWVudGVkLCBidXQgaXMgbW9zdGx5IHVzZWQgYnkgdGhlIHRlc3QgcHJvZ3JhbXMgKi8KKyAgICAvKiAgICAgICB0aGVzZSBkYXlzLiAqLwogICAgIHJldHVybiAweEQ7CiB9CiAKIGludCBQTUFQSSBQTV9vcGVuQ29uc29sZSh2b2lkKQogewotICAgIC8vIFRPRE86IE9wZW5zIHVwIGEgZnVsbHNjcmVlbiBjb25zb2xlIGZvciBncmFwaGljcyBvdXRwdXQuIElmIHlvdXIKLSAgICAvLyAgICAgICBjb25zb2xlIGRvZXMgbm90IGhhdmUgZ3JhcGhpY3MvdGV4dCBtb2RlcywgdGhpcyBjYW4gYmUgbGVmdAotICAgIC8vICAgICAgIGVtcHR5LiBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gZGlzYWJsZSBjb25zb2xlIHN3aXRjaGluZwotICAgIC8vICAgICAgIHdoZW4gaW4gZ3JhcGhpY3MgbW9kZXMgaWYgeW91IGNhbiBzd2l0Y2ggYXdheSBmcm9tIGZ1bGxzY3JlZW4KLSAgICAvLyAgICAgICBjb25zb2xlcyAoaWYgeW91IHdhbnQgdG8gYWxsb3cgc3dpdGNoaW5nLCB0aGlzIGNhbiBiZSBkb25lCi0gICAgLy8gICAgICAgZWxzZXdoZXJlIHdpdGggYSBmdWxsIHNhdmUvcmVzdG9yZSBzdGF0ZSBvZiB0aGUgZ3JhcGhpY3MgbW9kZSkuCisgICAgLyogVE9ETzogT3BlbnMgdXAgYSBmdWxsc2NyZWVuIGNvbnNvbGUgZm9yIGdyYXBoaWNzIG91dHB1dC4gSWYgeW91ciAqLworICAgIC8qICAgICAgIGNvbnNvbGUgZG9lcyBub3QgaGF2ZSBncmFwaGljcy90ZXh0IG1vZGVzLCB0aGlzIGNhbiBiZSBsZWZ0ICovCisgICAgLyogICAgICAgZW1wdHkuIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBkaXNhYmxlIGNvbnNvbGUgc3dpdGNoaW5nICovCisgICAgLyogICAgICAgd2hlbiBpbiBncmFwaGljcyBtb2RlcyBpZiB5b3UgY2FuIHN3aXRjaCBhd2F5IGZyb20gZnVsbHNjcmVlbiAqLworICAgIC8qICAgICAgIGNvbnNvbGVzIChpZiB5b3Ugd2FudCB0byBhbGxvdyBzd2l0Y2hpbmcsIHRoaXMgY2FuIGJlIGRvbmUgKi8KKyAgICAvKiAgICAgICBlbHNld2hlcmUgd2l0aCBhIGZ1bGwgc2F2ZS9yZXN0b3JlIHN0YXRlIG9mIHRoZSBncmFwaGljcyBtb2RlKS4gKi8KICAgICByZXR1cm4gMDsKIH0KIAogaW50IFBNQVBJIFBNX2dldENvbnNvbGVTdGF0ZVNpemUodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb25zb2xlIHN0YXRlIGJ1ZmZlciB1c2VkIHRvIHNhdmUgdGhlCi0gICAgLy8gICAgICAgc3RhdGUgb2YgdGhlIGNvbnNvbGUgYmVmb3JlIGdvaW5nIGludG8gZ3JhcGhpY3MgbW9kZS4gVGhpcyBpcwotICAgIC8vICAgICAgIHVzZWQgdG8gcmVzdG9yZSB0aGUgY29uc29sZSBiYWNrIHRvIG5vcm1hbCB3aGVuIHdlIGFyZSBkb25lLgorICAgIC8qIFRPRE86IFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGNvbnNvbGUgc3RhdGUgYnVmZmVyIHVzZWQgdG8gc2F2ZSB0aGUgKi8KKyAgICAvKiAgICAgICBzdGF0ZSBvZiB0aGUgY29uc29sZSBiZWZvcmUgZ29pbmcgaW50byBncmFwaGljcyBtb2RlLiBUaGlzIGlzICovCisgICAgLyogICAgICAgdXNlZCB0byByZXN0b3JlIHRoZSBjb25zb2xlIGJhY2sgdG8gbm9ybWFsIHdoZW4gd2UgYXJlIGRvbmUuICovCiAgICAgcmV0dXJuIDE7CiB9CiAKIHZvaWQgUE1BUEkgUE1fc2F2ZUNvbnNvbGVTdGF0ZSh2b2lkICpzdGF0ZUJ1ZixpbnQgY29uc29sZV9pZCkKIHsKLSAgICAvLyBUT0RPOiBTYXZlcyB0aGUgc3RhdGUgb2YgdGhlIGNvbnNvbGUgaW50byB0aGUgc3RhdGUgYnVmZmVyLiBUaGlzIGlzCi0gICAgLy8gICAgICAgdXNlZCB0byByZXN0b3JlIHRoZSBjb25zb2xlIGJhY2sgdG8gbm9ybWFsIHdoZW4gd2UgYXJlIGRvbmUuCi0gICAgLy8gICAgICAgV2Ugd2lsbCBhbHdheXMgcmVzdG9yZSA4MHgyNSB0ZXh0IG1vZGUgYWZ0ZXIgYmVpbmcgaW4gZ3JhcGhpY3MKLSAgICAvLyAgICAgICBtb2RlLCBzbyBpZiByZXN0b3JpbmcgdGV4dCBtb2RlIGlzIGFsbCB5b3UgbmVlZCB0byBkbyB0aGlzIGNhbgotICAgIC8vICAgICAgIGJlIGxlZnQgZW1wdHkuCisgICAgLyogVE9ETzogU2F2ZXMgdGhlIHN0YXRlIG9mIHRoZSBjb25zb2xlIGludG8gdGhlIHN0YXRlIGJ1ZmZlci4gVGhpcyBpcyAqLworICAgIC8qICAgICAgIHVzZWQgdG8gcmVzdG9yZSB0aGUgY29uc29sZSBiYWNrIHRvIG5vcm1hbCB3aGVuIHdlIGFyZSBkb25lLiAqLworICAgIC8qICAgICAgIFdlIHdpbGwgYWx3YXlzIHJlc3RvcmUgODB4MjUgdGV4dCBtb2RlIGFmdGVyIGJlaW5nIGluIGdyYXBoaWNzICovCisgICAgLyogICAgICAgbW9kZSwgc28gaWYgcmVzdG9yaW5nIHRleHQgbW9kZSBpcyBhbGwgeW91IG5lZWQgdG8gZG8gdGhpcyBjYW4gKi8KKyAgICAvKiAgICAgICBiZSBsZWZ0IGVtcHR5LiAqLwogfQogCiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVDb25zb2xlU3RhdGUoY29uc3Qgdm9pZCAqc3RhdGVCdWYsaW50IGNvbnNvbGVfaWQpCiB7Ci0gICAgLy8gVE9ETzogUmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIGNvbnNvbGUgZnJvbSB0aGUgc3RhdGUgYnVmZmVyLiBUaGlzIGlzCi0gICAgLy8gICAgICAgdXNlZCB0byByZXN0b3JlIHRoZSBjb25zb2xlIGJhY2sgdG8gbm9ybWFsIHdoZW4gd2UgYXJlIGRvbmUuCi0gICAgLy8gICAgICAgV2Ugd2lsbCBhbHdheXMgcmVzdG9yZSA4MHgyNSB0ZXh0IG1vZGUgYWZ0ZXIgYmVpbmcgaW4gZ3JhcGhpY3MKLSAgICAvLyAgICAgICBtb2RlLCBzbyBpZiByZXN0b3JpbmcgdGV4dCBtb2RlIGlzIGFsbCB5b3UgbmVlZCB0byBkbyB0aGlzIGNhbgotICAgIC8vICAgICAgIGJlIGxlZnQgZW1wdHkuCisgICAgLyogVE9ETzogUmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIGNvbnNvbGUgZnJvbSB0aGUgc3RhdGUgYnVmZmVyLiBUaGlzIGlzICovCisgICAgLyogICAgICAgdXNlZCB0byByZXN0b3JlIHRoZSBjb25zb2xlIGJhY2sgdG8gbm9ybWFsIHdoZW4gd2UgYXJlIGRvbmUuICovCisgICAgLyogICAgICAgV2Ugd2lsbCBhbHdheXMgcmVzdG9yZSA4MHgyNSB0ZXh0IG1vZGUgYWZ0ZXIgYmVpbmcgaW4gZ3JhcGhpY3MgKi8KKyAgICAvKiAgICAgICBtb2RlLCBzbyBpZiByZXN0b3JpbmcgdGV4dCBtb2RlIGlzIGFsbCB5b3UgbmVlZCB0byBkbyB0aGlzIGNhbiAqLworICAgIC8qICAgICAgIGJlIGxlZnQgZW1wdHkuICovCiB9CiAKIHZvaWQgUE1BUEkgUE1fY2xvc2VDb25zb2xlKGludCBjb25zb2xlX2lkKQogewotICAgIC8vIFRPRE86IENsb3NlIHRoZSBjb25zb2xlIHdoZW4gd2UgYXJlIGRvbmUsIGdvaW5nIGJhY2sgdG8gdGV4dCBtb2RlLgorICAgIC8qIFRPRE86IENsb3NlIHRoZSBjb25zb2xlIHdoZW4gd2UgYXJlIGRvbmUsIGdvaW5nIGJhY2sgdG8gdGV4dCBtb2RlLiAqLwogfQogCiB2b2lkIFBNX3NldE9TQ3Vyc29yTG9jYXRpb24oaW50IHgsaW50IHkpCiB7Ci0gICAgLy8gVE9ETzogU2V0IHRoZSBPUyBjb25zb2xlIGN1cnNvciBsb2NhdGlvbiB0byB0aGUgbmV3IHZhbHVlLiBUaGlzIGlzCi0gICAgLy8gICAgICAgZ2VuZXJhbGx5IHVzZWQgZm9yIG5ldyBPUyBwb3J0cyAodXNlZCBtb3N0bHkgZm9yIERPUykuCisgICAgLyogVE9ETzogU2V0IHRoZSBPUyBjb25zb2xlIGN1cnNvciBsb2NhdGlvbiB0byB0aGUgbmV3IHZhbHVlLiBUaGlzIGlzICovCisgICAgLyogICAgICAgZ2VuZXJhbGx5IHVzZWQgZm9yIG5ldyBPUyBwb3J0cyAodXNlZCBtb3N0bHkgZm9yIERPUykuICovCiB9CiAKIHZvaWQgUE1fc2V0T1NTY3JlZW5XaWR0aChpbnQgd2lkdGgsaW50IGhlaWdodCkKIHsKLSAgICAvLyBUT0RPOiBTZXQgdGhlIE9TIGNvbnNvbGUgc2NyZWVuIHdpZHRoLiBUaGlzIGlzIGdlbmVyYWxseSB1bnVzZWQgZm9yCi0gICAgLy8gICAgICAgbmV3IE9TIHBvcnRzLgorICAgIC8qIFRPRE86IFNldCB0aGUgT1MgY29uc29sZSBzY3JlZW4gd2lkdGguIFRoaXMgaXMgZ2VuZXJhbGx5IHVudXNlZCBmb3IgKi8KKyAgICAvKiAgICAgICBuZXcgT1MgcG9ydHMuICovCiB9CiAKIGlib29sIFBNQVBJIFBNX3NldFJlYWxUaW1lQ2xvY2tIYW5kbGVyKFBNX2ludEhhbmRsZXIgaWgsIGludCBmcmVxdWVuY3kpCiB7Ci0gICAgLy8gVE9ETzogSW5zdGFsbCBhIHJlYWwgdGltZSBjbG9jayBpbnRlcnJ1cHQgaGFuZGxlci4gTm9ybWFsbHkgdGhpcwotICAgIC8vICAgICAgIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBmcm9tIG1vc3QgT1MnZXMgaW4gdXNlciBsYW5kLCBzbyBhbgotICAgIC8vICAgICAgIGFsdGVybmF0aXZlIG1lY2hhbmlzbSBpcyBuZWVkZWQgdG8gZW5hYmxlIHNvZnR3YXJlIHN0ZXJlby4KLSAgICAvLyAgICAgICBIZW5jZSBsZWF2ZSB0aGlzIHVuaW1wbGVtZW50ZWQgdW5sZXNzIHlvdSBoYXZlIGEgaGlnaCBwcmlvcml0eQotICAgIC8vICAgICAgIG1lY2hhbmlzbSB0byBjYWxsIHRoZSAzMi1iaXQgY2FsbGJhY2sgd2hlbiB0aGUgcmVhbCB0aW1lIGNsb2NrCi0gICAgLy8gICAgICAgaW50ZXJydXB0IGZpcmVzLgorICAgIC8qIFRPRE86IEluc3RhbGwgYSByZWFsIHRpbWUgY2xvY2sgaW50ZXJydXB0IGhhbmRsZXIuIE5vcm1hbGx5IHRoaXMgKi8KKyAgICAvKiAgICAgICB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgZnJvbSBtb3N0IE9TJ2VzIGluIHVzZXIgbGFuZCwgc28gYW4gKi8KKyAgICAvKiAgICAgICBhbHRlcm5hdGl2ZSBtZWNoYW5pc20gaXMgbmVlZGVkIHRvIGVuYWJsZSBzb2Z0d2FyZSBzdGVyZW8uICovCisgICAgLyogICAgICAgSGVuY2UgbGVhdmUgdGhpcyB1bmltcGxlbWVudGVkIHVubGVzcyB5b3UgaGF2ZSBhIGhpZ2ggcHJpb3JpdHkgKi8KKyAgICAvKiAgICAgICBtZWNoYW5pc20gdG8gY2FsbCB0aGUgMzItYml0IGNhbGxiYWNrIHdoZW4gdGhlIHJlYWwgdGltZSBjbG9jayAqLworICAgIC8qICAgICAgIGludGVycnVwdCBmaXJlcy4gKi8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUE1BUEkgUE1fc2V0UmVhbFRpbWVDbG9ja0ZyZXF1ZW5jeShpbnQgZnJlcXVlbmN5KQogewotICAgIC8vIFRPRE86IFNldCB0aGUgcmVhbCB0aW1lIGNsb2NrIGludGVycnVwdCBmcmVxdWVuY3kuIFVzZWQgZm9yIHN0ZXJlbwotICAgIC8vICAgICAgIExDIHNodXR0ZXIgZ2xhc3NlcyB3aGVuIGRvaW5nIHNvZnR3YXJlIHN0ZXJlby4gVXN1YWxseSBzZXRzCi0gICAgLy8gICAgICAgdGhlIGZyZXF1ZW5jeSB0byBhcm91bmQgMjA0OCBIei4KKyAgICAvKiBUT0RPOiBTZXQgdGhlIHJlYWwgdGltZSBjbG9jayBpbnRlcnJ1cHQgZnJlcXVlbmN5LiBVc2VkIGZvciBzdGVyZW8gKi8KKyAgICAvKiAgICAgICBMQyBzaHV0dGVyIGdsYXNzZXMgd2hlbiBkb2luZyBzb2Z0d2FyZSBzdGVyZW8uIFVzdWFsbHkgc2V0cyAqLworICAgIC8qICAgICAgIHRoZSBmcmVxdWVuY3kgdG8gYXJvdW5kIDIwNDggSHouICovCiB9CiAKIHZvaWQgUE1BUEkgUE1fcmVzdG9yZVJlYWxUaW1lQ2xvY2tIYW5kbGVyKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogUmVzdG9yZXMgdGhlIHJlYWwgdGltZSBjbG9jayBoYW5kbGVyLgorICAgIC8qIFRPRE86IFJlc3RvcmVzIHRoZSByZWFsIHRpbWUgY2xvY2sgaGFuZGxlci4gKi8KIH0KIAogY2hhciAqIFBNQVBJIFBNX2dldEN1cnJlbnRQYXRoKApAQCAtMjE5LDggKzIxOSw4IEBACiAKIGNvbnN0IGNoYXIgKiBQTUFQSSBQTV9nZXRVbmlxdWVJRCh2b2lkKQogewotICAgIC8vIFRPRE86IFJldHVybiBhIHVuaXF1ZSBJRCBmb3IgdGhlIG1hY2hpbmUuIElmIGEgdW5pcXVlIElEIGlzIG5vdAotICAgIC8vICAgICAgIGF2YWlsYWJsZSwgcmV0dXJuIHRoZSBtYWNoaW5lIG5hbWUuCisgICAgLyogVE9ETzogUmV0dXJuIGEgdW5pcXVlIElEIGZvciB0aGUgbWFjaGluZS4gSWYgYSB1bmlxdWUgSUQgaXMgbm90ICovCisgICAgLyogICAgICAgYXZhaWxhYmxlLCByZXR1cm4gdGhlIG1hY2hpbmUgbmFtZS4gKi8KICAgICBzdGF0aWMgY2hhciBidWZbMTI4XTsKICAgICBnZXRob3N0bmFtZShidWYsIDEyOCk7CiAgICAgcmV0dXJuIGJ1ZjsKQEAgLTIyOCw3ICsyMjgsNyBAQAogCiBjb25zdCBjaGFyICogUE1BUEkgUE1fZ2V0TWFjaGluZU5hbWUodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBSZXR1cm4gdGhlIG5ldHdvcmsgbWFjaGluZSBuYW1lIGZvciB0aGUgbWFjaGluZS4KKyAgICAvKiBUT0RPOiBSZXR1cm4gdGhlIG5ldHdvcmsgbWFjaGluZSBuYW1lIGZvciB0aGUgbWFjaGluZS4gKi8KICAgICBzdGF0aWMgY2hhciBidWZbMTI4XTsKICAgICBnZXRob3N0bmFtZShidWYsIDEyOCk7CiAgICAgcmV0dXJuIGJ1ZjsKQEAgLTIzNiw3ICsyMzYsNyBAQAogCiB2b2lkICogUE1BUEkgUE1fZ2V0QklPU1BvaW50ZXIodm9pZCkKIHsKLSAgICAvLyBObyBCSU9TIGFjY2VzcyBvbiB0aGUgQmVPUworICAgIC8qIE5vIEJJT1MgYWNjZXNzIG9uIHRoZSBCZU9TICovCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI0NCwyMTIgKzI0NCwyMTIgQEAKIHsKICAgICBzdGF0aWMgdm9pZCAqYmFua1B0cjsKICAgICBpZiAoIWJhbmtQdHIpCi0gICAgICAgIGJhbmtQdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMHhBMDAwMCwweEZGRkYsdHJ1ZSk7CisJYmFua1B0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigweEEwMDAwLDB4RkZGRix0cnVlKTsKICAgICByZXR1cm4gYmFua1B0cjsKIH0KIAogdm9pZCAqIFBNQVBJIFBNX21hcFBoeXNpY2FsQWRkcih1bG9uZyBiYXNlLHVsb25nIGxpbWl0LGlib29sIGlzQ2FjaGVkKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gbWFwcyBhIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIHRvIGEgbGluZWFyCi0gICAgLy8gICAgICAgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgY2FsbGluZyBwcm9jZXNzLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gbWFwcyBhIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIHRvIGEgbGluZWFyICovCisgICAgLyogICAgICAgYWRkcmVzcyBpbiB0aGUgYWRkcmVzcyBzcGFjZSBvZiB0aGUgY2FsbGluZyBwcm9jZXNzLiAqLwogCi0gICAgLy8gTk9URTogVGhpcyBmdW5jdGlvbiAqbXVzdCogYmUgYWJsZSB0byBoYW5kbGUgYW55IHBoc3lpY2FsIGJhc2UKLSAgICAvLyAgICAgICBhZGRyZXNzLCBhbmQgaGVuY2UgeW91IHdpbGwgaGF2ZSB0byBoYW5kbGUgcm91bmRpbmcgb2YKLSAgICAvLyAgICAgICB0aGUgcGh5c2ljYWwgYmFzZSBhZGRyZXNzIHRvIGEgcGFnZSBib3VuZGFyeSAoaWU6IDRLYiBvbgotICAgIC8vICAgICAgIHg4NiBDUFUncykgdG8gYmUgYWJsZSB0byBwcm9wZXJseSBtYXAgaW4gdGhlIG1lbW9yeQotICAgIC8vICAgICAgIHJlZ2lvbi4KKyAgICAvKiBOT1RFOiBUaGlzIGZ1bmN0aW9uICptdXN0KiBiZSBhYmxlIHRvIGhhbmRsZSBhbnkgcGhzeWljYWwgYmFzZSAqLworICAgIC8qICAgICAgIGFkZHJlc3MsIGFuZCBoZW5jZSB5b3Ugd2lsbCBoYXZlIHRvIGhhbmRsZSByb3VuZGluZyBvZiAqLworICAgIC8qICAgICAgIHRoZSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgdG8gYSBwYWdlIGJvdW5kYXJ5IChpZTogNEtiIG9uICovCisgICAgLyogICAgICAgeDg2IENQVSdzKSB0byBiZSBhYmxlIHRvIHByb3Blcmx5IG1hcCBpbiB0aGUgbWVtb3J5ICovCisgICAgLyogICAgICAgcmVnaW9uLiAqLwogCi0gICAgLy8gTk9URTogSWYgcG9zc2libGUgdGhlIGlzQ2FjaGVkIGJpdCBzaG91bGQgYmUgdXNlZCB0byBlbnN1cmUgdGhhdAotICAgIC8vICAgICAgIHRoZSBQQ0QgKFBhZ2UgQ2FjaGUgRGlzYWJsZSkgYW5kIFBXVCAoUGFnZSBXcml0ZSBUaHJvdWdoKQotICAgIC8vICAgICAgIGJpdHMgYXJlIHNldCB0byBkaXNhYmxlIGNhY2hpbmcgZm9yIGEgbWVtb3J5IG1hcHBpbmcgdXNlZAotICAgIC8vICAgICAgIGZvciBNTUlPIHJlZ2lzdGVyIGFjY2Vzcy4gV2UgYWxzbyBkaXNhYmxlIGNhY2hpbmcgdXNpbmcKLSAgICAvLyAgICAgICB0aGUgTVRSUiByZWdpc3RlcnMgZm9yIFBlbnRpdW0gUHJvIGFuZCBsYXRlciBjaGlwc2V0cyBzbyBpZgotICAgIC8vICAgICAgIE1UUlIgc3VwcG9ydCBpcyBlbmFibGVkIGZvciB5b3VyIE9TIHRoZW4geW91IGNhbiBzYWZlbHkgaWdub3JlCi0gICAgLy8gICAgICAgdGhlIGlzQ2FjaGVkIGZsYWcgYW5kIGFsd2F5cyBlbmFibGUgY2FjaGluZyBpbiB0aGUgcGFnZQotICAgIC8vICAgICAgIHRhYmxlcy4KKyAgICAvKiBOT1RFOiBJZiBwb3NzaWJsZSB0aGUgaXNDYWNoZWQgYml0IHNob3VsZCBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0ICovCisgICAgLyogICAgICAgdGhlIFBDRCAoUGFnZSBDYWNoZSBEaXNhYmxlKSBhbmQgUFdUIChQYWdlIFdyaXRlIFRocm91Z2gpICovCisgICAgLyogICAgICAgYml0cyBhcmUgc2V0IHRvIGRpc2FibGUgY2FjaGluZyBmb3IgYSBtZW1vcnkgbWFwcGluZyB1c2VkICovCisgICAgLyogICAgICAgZm9yIE1NSU8gcmVnaXN0ZXIgYWNjZXNzLiBXZSBhbHNvIGRpc2FibGUgY2FjaGluZyB1c2luZyAqLworICAgIC8qICAgICAgIHRoZSBNVFJSIHJlZ2lzdGVycyBmb3IgUGVudGl1bSBQcm8gYW5kIGxhdGVyIGNoaXBzZXRzIHNvIGlmICovCisgICAgLyogICAgICAgTVRSUiBzdXBwb3J0IGlzIGVuYWJsZWQgZm9yIHlvdXIgT1MgdGhlbiB5b3UgY2FuIHNhZmVseSBpZ25vcmUgKi8KKyAgICAvKiAgICAgICB0aGUgaXNDYWNoZWQgZmxhZyBhbmQgYWx3YXlzIGVuYWJsZSBjYWNoaW5nIGluIHRoZSBwYWdlICovCisgICAgLyogICAgICAgdGFibGVzLiAqLwogICAgIHJldHVybiBOVUxMOwogfQogCiB2b2lkIFBNQVBJIFBNX2ZyZWVQaHlzaWNhbEFkZHIodm9pZCAqcHRyLHVsb25nIGxpbWl0KQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gd2lsbCBmcmVlIGEgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmcgcHJldmlvdXNseQotICAgIC8vICAgICAgIGFsbG9jYXRlZCB3aXRoIFBNX21hcFBoeXNpY2FsQWRkcigpIGlmIGF0IGFsbCBwb3NzaWJsZS4gSWYKLSAgICAvLyAgICAgICB5b3UgY2FuJ3QgZnJlZSBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZ3MsIHNpbXBseSBkbyBub3RoaW5nLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gd2lsbCBmcmVlIGEgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmcgcHJldmlvdXNseSAqLworICAgIC8qICAgICAgIGFsbG9jYXRlZCB3aXRoIFBNX21hcFBoeXNpY2FsQWRkcigpIGlmIGF0IGFsbCBwb3NzaWJsZS4gSWYgKi8KKyAgICAvKiAgICAgICB5b3UgY2FuJ3QgZnJlZSBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZ3MsIHNpbXBseSBkbyBub3RoaW5nLiAqLwogfQogCiB1bG9uZyBQTUFQSSBQTV9nZXRQaHlzaWNhbEFkZHIodm9pZCAqcCkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmaW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGEgbGluZWFyCi0gICAgLy8gICAgICAgYWRkcmVzcy4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmaW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGEgbGluZWFyICovCisgICAgLyogICAgICAgYWRkcmVzcy4gKi8KICAgICByZXR1cm4gMHhGRkZGRkZGRlVMOwogfQogCiB2b2lkIFBNQVBJIFBNX3NsZWVwKHVsb25nIG1pbGxpc2Vjb25kcykKIHsKLSAgICAvLyBUT0RPOiBQdXQgdGhlIHByb2Nlc3MgdG8gc2xlZXAgZm9yIG1pbGxpc2Vjb25kcworICAgIC8qIFRPRE86IFB1dCB0aGUgcHJvY2VzcyB0byBzbGVlcCBmb3IgbWlsbGlzZWNvbmRzICovCiB9CiAKIGludCBQTUFQSSBQTV9nZXRDT01Qb3J0KGludCBwb3J0KQogewotICAgIC8vIFRPRE86IFJlLWNvZGUgdGhpcyB0byBkZXRlcm1pbmUgcmVhbCB2YWx1ZXMgdXNpbmcgdGhlIFBsdWcgYW5kIFBsYXkKLSAgICAvLyAgICAgICBtYW5hZ2VyIGZvciB0aGUgT1MuCisgICAgLyogVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheSAqLworICAgIC8qICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4gKi8KICAgICBzd2l0Y2ggKHBvcnQpIHsKLSAgICAgICAgY2FzZSAwOiByZXR1cm4gMHgzRjg7Ci0gICAgICAgIGNhc2UgMTogcmV0dXJuIDB4MkY4OwotICAgICAgICB9CisJY2FzZSAwOiByZXR1cm4gMHgzRjg7CisJY2FzZSAxOiByZXR1cm4gMHgyRjg7CisJfQogICAgIHJldHVybiAwOwogfQogCiBpbnQgUE1BUEkgUE1fZ2V0TFBUUG9ydChpbnQgcG9ydCkKIHsKLSAgICAvLyBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5Ci0gICAgLy8gICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLgorICAgIC8qIFRPRE86IFJlLWNvZGUgdGhpcyB0byBkZXRlcm1pbmUgcmVhbCB2YWx1ZXMgdXNpbmcgdGhlIFBsdWcgYW5kIFBsYXkgKi8KKyAgICAvKiAgICAgICBtYW5hZ2VyIGZvciB0aGUgT1MuICovCiAgICAgc3dpdGNoIChwb3J0KSB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuIDB4M0JDOwotICAgICAgICBjYXNlIDE6IHJldHVybiAweDM3ODsKLSAgICAgICAgY2FzZSAyOiByZXR1cm4gMHgyNzg7Ci0gICAgICAgIH0KKwljYXNlIDA6IHJldHVybiAweDNCQzsKKwljYXNlIDE6IHJldHVybiAweDM3ODsKKwljYXNlIDI6IHJldHVybiAweDI3ODsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgKiBQTUFQSSBQTV9tYWxsb2NTaGFyZWQobG9uZyBzaXplKQogewotICAgIC8vIFRPRE86IFRoaXMgaXMgdXNlZCB0byBhbGxvY2F0ZSBtZW1vcnkgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzCi0gICAgLy8gICAgICAgdGhhdCBhbGwgYWNjZXNzIHRoZSBjb21tb24gTnVjbGV1cyBkcml2ZXJzIHZpYSBhIGNvbW1vbiBkaXNwbGF5Ci0gICAgLy8gICAgICAgZHJpdmVyIERMTC4gSWYgeW91ciBPUyBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBtZW1vcnkgKG9yIGlmCi0gICAgLy8gICAgICAgdGhlIGRpc3BsYXkgZHJpdmVyIGRvZXMgbm90IG5lZWQgdG8gYWxsb2NhdGUgc2hhcmVkIG1lbW9yeQotICAgIC8vICAgICAgIGZvciBlYWNoIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSksIHRoaXMgc2hvdWxkIGp1c3QgY2FsbCBQTV9tYWxsb2MuCisgICAgLyogVE9ETzogVGhpcyBpcyB1c2VkIHRvIGFsbG9jYXRlIG1lbW9yeSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3MgKi8KKyAgICAvKiAgICAgICB0aGF0IGFsbCBhY2Nlc3MgdGhlIGNvbW1vbiBOdWNsZXVzIGRyaXZlcnMgdmlhIGEgY29tbW9uIGRpc3BsYXkgKi8KKyAgICAvKiAgICAgICBkcml2ZXIgRExMLiBJZiB5b3VyIE9TIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIG1lbW9yeSAob3IgaWYgKi8KKyAgICAvKiAgICAgICB0aGUgZGlzcGxheSBkcml2ZXIgZG9lcyBub3QgbmVlZCB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5ICovCisgICAgLyogICAgICAgZm9yIGVhY2ggcHJvY2VzcyBhZGRyZXNzIHNwYWNlKSwgdGhpcyBzaG91bGQganVzdCBjYWxsIFBNX21hbGxvYy4gKi8KICAgICByZXR1cm4gUE1fbWFsbG9jKHNpemUpOwogfQogCiB2b2lkIFBNQVBJIFBNX2ZyZWVTaGFyZWQodm9pZCAqcHRyKQogewotICAgIC8vIFRPRE86IEZyZWUgdGhlIHNoYXJlZCBtZW1vcnkgYmxvY2suIFRoaXMgd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQKLSAgICAvLyAgICAgICBvZiB0aGUgb3JpZ2luYWwgY2FsbGluZyBwcm9jZXNzIHRoYXQgYWxsb2NhdGVkIHRoZSBzaGFyZWQKLSAgICAvLyAgICAgICBtZW1vcnkgd2l0aCBQTV9tYWxsb2NTaGFyZWQuIFNpbXBseSBjYWxsIGZyZWUgaWYgeW91IGRvIG5vdAotICAgIC8vICAgICAgIG5lZWQgdGhpcy4KKyAgICAvKiBUT0RPOiBGcmVlIHRoZSBzaGFyZWQgbWVtb3J5IGJsb2NrLiBUaGlzIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0ICovCisgICAgLyogICAgICAgb2YgdGhlIG9yaWdpbmFsIGNhbGxpbmcgcHJvY2VzcyB0aGF0IGFsbG9jYXRlZCB0aGUgc2hhcmVkICovCisgICAgLyogICAgICAgbWVtb3J5IHdpdGggUE1fbWFsbG9jU2hhcmVkLiBTaW1wbHkgY2FsbCBmcmVlIGlmIHlvdSBkbyBub3QgKi8KKyAgICAvKiAgICAgICBuZWVkIHRoaXMuICovCiAgICAgUE1fZnJlZShwdHIpOwogfQogCiB2b2lkICogUE1BUEkgUE1fbWFwVG9Qcm9jZXNzKHZvaWQgKmJhc2UsdWxvbmcgbGltaXQpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hcCBhIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nCi0gICAgLy8gICAgICAgcHJldmlvdXNseSBhbGxvY2F0ZWQgd2l0aCBQTV9tYXBQaHlzaWNhbEFkZHIgaW50byB0aGUKLSAgICAvLyAgICAgICBhZGRyZXNzIHNwYWNlIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MuIElmIHRoZSBtZW1vcnkgbWFwcGluZwotICAgIC8vICAgICAgIGFsbG9jYXRlZCBieSBQTV9tYXBQaHlzaWNhbEFkZHIgaXMgZ2xvYmFsIHRvIGFsbCBwcm9jZXNzZXMsCi0gICAgLy8gICAgICAgc2ltcGx5IHJldHVybiB0aGUgcG9pbnRlci4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFwIGEgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmcgKi8KKyAgICAvKiAgICAgICBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIFBNX21hcFBoeXNpY2FsQWRkciBpbnRvIHRoZSAqLworICAgIC8qICAgICAgIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4gSWYgdGhlIG1lbW9yeSBtYXBwaW5nICovCisgICAgLyogICAgICAgYWxsb2NhdGVkIGJ5IFBNX21hcFBoeXNpY2FsQWRkciBpcyBnbG9iYWwgdG8gYWxsIHByb2Nlc3NlcywgKi8KKyAgICAvKiAgICAgICBzaW1wbHkgcmV0dXJuIHRoZSBwb2ludGVyLiAqLwogICAgIHJldHVybiBiYXNlOwogfQogCiB2b2lkICogUE1BUEkgUE1fbWFwUmVhbFBvaW50ZXIodWludCByX3NlZyx1aW50IHJfb2ZmKQogewotICAgIC8vIE5vIEJJT1MgYWNjZXNzIG9uIHRoZSBCZU9TCisgICAgLyogTm8gQklPUyBhY2Nlc3Mgb24gdGhlIEJlT1MgKi8KICAgICByZXR1cm4gTlVMTDsKIH0KIAogdm9pZCAqIFBNQVBJIFBNX2FsbG9jUmVhbFNlZyh1aW50IHNpemUsdWludCAqcl9zZWcsdWludCAqcl9vZmYpCiB7Ci0gICAgLy8gTm8gQklPUyBhY2Nlc3Mgb24gdGhlIEJlT1MKKyAgICAvKiBObyBCSU9TIGFjY2VzcyBvbiB0aGUgQmVPUyAqLwogICAgIHJldHVybiBOVUxMOwogfQogCiB2b2lkIFBNQVBJIFBNX2ZyZWVSZWFsU2VnKHZvaWQgKm1lbSkKIHsKLSAgICAvLyBObyBCSU9TIGFjY2VzcyBvbiB0aGUgQmVPUworICAgIC8qIE5vIEJJT1MgYWNjZXNzIG9uIHRoZSBCZU9TICovCiB9CiAKIHZvaWQgUE1BUEkgRFBNSV9pbnQ4NihpbnQgaW50bm8sIERQTUlfcmVncyAqcmVncykKIHsKLSAgICAvLyBObyBCSU9TIGFjY2VzcyBvbiB0aGUgQmVPUworICAgIC8qIE5vIEJJT1MgYWNjZXNzIG9uIHRoZSBCZU9TICovCiB9CiAKIGludCBQTUFQSSBQTV9pbnQ4NihpbnQgaW50bm8sIFJNUkVHUyAqaW4sIFJNUkVHUyAqb3V0KQogewotICAgIC8vIE5vIEJJT1MgYWNjZXNzIG9uIHRoZSBCZU9TCisgICAgLyogTm8gQklPUyBhY2Nlc3Mgb24gdGhlIEJlT1MgKi8KICAgICByZXR1cm4gMDsKIH0KIAogaW50IFBNQVBJIFBNX2ludDg2eChpbnQgaW50bm8sIFJNUkVHUyAqaW4sIFJNUkVHUyAqb3V0LAogICAgIFJNU1JFR1MgKnNyZWdzKQogewotICAgIC8vIE5vIEJJT1MgYWNjZXNzIG9uIHRoZSBCZU9TCisgICAgLyogTm8gQklPUyBhY2Nlc3Mgb24gdGhlIEJlT1MgKi8KICAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBQTUFQSSBQTV9jYWxsUmVhbE1vZGUodWludCBzZWcsdWludCBvZmYsIFJNUkVHUyAqaW4sCiAgICAgUk1TUkVHUyAqc3JlZ3MpCiB7Ci0gICAgLy8gTm8gQklPUyBhY2Nlc3Mgb24gdGhlIEJlT1MKKyAgICAvKiBObyBCSU9TIGFjY2VzcyBvbiB0aGUgQmVPUyAqLwogfQogCiB2b2lkIFBNQVBJIFBNX2F2YWlsYWJsZU1lbW9yeSh1bG9uZyAqcGh5c2ljYWwsdWxvbmcgKnRvdGFsKQogewotICAgIC8vIFRPRE86IFJlcG9ydCB0aGUgYW1vdW50IG9mIGF2YWlsYWJsZSBtZW1vcnksIGJvdGggdGhlIGFtb3VudCBvZgotICAgIC8vICAgICAgIHBoeXNpY2FsIG1lbW9yeSBsZWZ0IGFuZCB0aGUgYW1vdW50IG9mIHZpcnR1YWwgbWVtb3J5IGxlZnQuCi0gICAgLy8gICAgICAgSWYgdGhlIE9TIGRvZXMgbm90IHByb3ZpZGUgdGhlc2Ugc2VydmljZXMsIHJlcG9ydCAwJ3MuCisgICAgLyogVE9ETzogUmVwb3J0IHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIG1lbW9yeSwgYm90aCB0aGUgYW1vdW50IG9mICovCisgICAgLyogICAgICAgcGh5c2ljYWwgbWVtb3J5IGxlZnQgYW5kIHRoZSBhbW91bnQgb2YgdmlydHVhbCBtZW1vcnkgbGVmdC4gKi8KKyAgICAvKiAgICAgICBJZiB0aGUgT1MgZG9lcyBub3QgcHJvdmlkZSB0aGVzZSBzZXJ2aWNlcywgcmVwb3J0IDAncy4gKi8KICAgICAqcGh5c2ljYWwgPSAqdG90YWwgPSAwOwogfQogCiB2b2lkICogUE1BUEkgUE1fYWxsb2NMb2NrZWRNZW0odWludCBzaXplLHVsb25nICpwaHlzQWRkcixpYm9vbCBjb250aWd1b3VzLGlib29sIGJlbG93MTZNZWcpCiB7Ci0gICAgLy8gVE9ETzogQWxsb2NhdGUgYSBibG9jayBvZiBsb2NrZWQsIHBoeXNpY2FsIG1lbW9yeSBvZiB0aGUgc3BlY2lmaWVkCi0gICAgLy8gICAgICAgc2l6ZS4gVGhpcyBpcyB1c2VkIGZvciBidXMgbWFzdGVyIG9wZXJhdGlvbnMuIElmIHRoaXMgaXMgbm90Ci0gICAgLy8gICAgICAgc3VwcG9ydGVkIGJ5IHRoZSBPUywgcmV0dXJuIE5VTEwgYW5kIGJ1cyBtYXN0ZXJpbmcgd2lsbCBub3QKLSAgICAvLyAgICAgICBiZSB1c2VkLgorICAgIC8qIFRPRE86IEFsbG9jYXRlIGEgYmxvY2sgb2YgbG9ja2VkLCBwaHlzaWNhbCBtZW1vcnkgb2YgdGhlIHNwZWNpZmllZCAqLworICAgIC8qICAgICAgIHNpemUuIFRoaXMgaXMgdXNlZCBmb3IgYnVzIG1hc3RlciBvcGVyYXRpb25zLiBJZiB0aGlzIGlzIG5vdCAqLworICAgIC8qICAgICAgIHN1cHBvcnRlZCBieSB0aGUgT1MsIHJldHVybiBOVUxMIGFuZCBidXMgbWFzdGVyaW5nIHdpbGwgbm90ICovCisgICAgLyogICAgICAgYmUgdXNlZC4gKi8KICAgICByZXR1cm4gTlVMTDsKIH0KIAogdm9pZCBQTUFQSSBQTV9mcmVlTG9ja2VkTWVtKHZvaWQgKnAsdWludCBzaXplLGlib29sIGNvbnRpZ3VvdXMpCiB7Ci0gICAgLy8gVE9ETzogRnJlZSBhIG1lbW9yeSBibG9jayBhbGxvY2F0ZWQgd2l0aCBQTV9hbGxvY0xvY2tlZE1lbS4KKyAgICAvKiBUT0RPOiBGcmVlIGEgbWVtb3J5IGJsb2NrIGFsbG9jYXRlZCB3aXRoIFBNX2FsbG9jTG9ja2VkTWVtLiAqLwogfQogCiB2b2lkIFBNQVBJIFBNX3NldEJhbmtBKGludCBiYW5rKQogewotICAgIC8vIE5vIEJJT1MgYWNjZXNzIG9uIHRoZSBCZU9TCisgICAgLyogTm8gQklPUyBhY2Nlc3Mgb24gdGhlIEJlT1MgKi8KIH0KIAogdm9pZCBQTUFQSSBQTV9zZXRCYW5rQUIoaW50IGJhbmspCiB7Ci0gICAgLy8gTm8gQklPUyBhY2Nlc3Mgb24gdGhlIEJlT1MKKyAgICAvKiBObyBCSU9TIGFjY2VzcyBvbiB0aGUgQmVPUyAqLwogfQogCiB2b2lkIFBNQVBJIFBNX3NldENSVFN0YXJ0KGludCB4LGludCB5LGludCB3YWl0VlJUKQogewotICAgIC8vIE5vIEJJT1MgYWNjZXNzIG9uIHRoZSBCZU9TCisgICAgLyogTm8gQklPUyBhY2Nlc3Mgb24gdGhlIEJlT1MgKi8KIH0KIAogaWJvb2wgUE1BUEkgUE1fZW5hYmxlV3JpdGVDb21iaW5lKHVsb25nIGJhc2UsdWxvbmcgbGVuZ3RoLHVpbnQgdHlwZSkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBlbmFibGUgUGVudGl1bSBQcm8gYW5kIFBlbnRpdW0gSUkgTVRSUgotICAgIC8vICAgICAgIHdyaXRlIGNvbWJpbmluZyBmb3IgdGhlIHBhc3NlZCBpbiBwaHlzaWNhbCBtZW1vcnkgYmFzZSBhZGRyZXNzCi0gICAgLy8gICAgICAgYW5kIGxlbmd0aC4gTm9ybWFsbHkgdGhpcyBpcyBkb25lIHZpYSBjYWxscyB0byBhbiBPUyBzcGVjaWZpYwotICAgIC8vICAgICAgIGRldmljZSBkcml2ZXIgYXMgdGhpcyBjYW4gb25seSBiZSBkb25lIGF0IHJpbmcgMC4KLSAgICAvLwotICAgIC8vIE5PVEU6IFRoaXMgaXMgYSAqdmVyeSogaW1wb3J0YW50IGZ1bmN0aW9uIHRvIGltcGxlbWVudCEgSWYgeW91IGRvCi0gICAgLy8gICAgICAgbm90IGltcGxlbWVudCwgZ3JhcGhpY3MgcGVyZm9ybWFuY2Ugb24gdGhlIGxhdGVzdCBJbnRlbCBjaGlwcwotICAgIC8vICAgICAgIHdpbGwgYmUgc2V2ZXJseSBpbXBhaXJlZC4gRm9yIHNhbXBsZSBjb2RlIHRoYXQgY2FuIGJlIHVzZWQKLSAgICAvLyAgICAgICBkaXJlY3RseSBpbiBhIHJpbmcgMCBkZXZpY2UgZHJpdmVyLCBzZWUgdGhlIE1TRE9TIGltcGxlbWVudGF0aW9uCi0gICAgLy8gICAgICAgd2hpY2ggaW5jbHVkZXMgYXNzZW1ibGVyIGNvZGUgdG8gZG8gdGhpcyBkaXJlY3RseSAoaWYgdGhlCi0gICAgLy8gICAgICAgcHJvZ3JhbSBpcyBydW5uaW5nIGF0IHJpbmcgMCkuCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgZW5hYmxlIFBlbnRpdW0gUHJvIGFuZCBQZW50aXVtIElJIE1UUlIgKi8KKyAgICAvKiAgICAgICB3cml0ZSBjb21iaW5pbmcgZm9yIHRoZSBwYXNzZWQgaW4gcGh5c2ljYWwgbWVtb3J5IGJhc2UgYWRkcmVzcyAqLworICAgIC8qICAgICAgIGFuZCBsZW5ndGguIE5vcm1hbGx5IHRoaXMgaXMgZG9uZSB2aWEgY2FsbHMgdG8gYW4gT1Mgc3BlY2lmaWMgKi8KKyAgICAvKiAgICAgICBkZXZpY2UgZHJpdmVyIGFzIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBhdCByaW5nIDAuICovCisgICAgLyogKi8KKyAgICAvKiBOT1RFOiBUaGlzIGlzIGEgKnZlcnkqIGltcG9ydGFudCBmdW5jdGlvbiB0byBpbXBsZW1lbnQhIElmIHlvdSBkbyAqLworICAgIC8qICAgICAgIG5vdCBpbXBsZW1lbnQsIGdyYXBoaWNzIHBlcmZvcm1hbmNlIG9uIHRoZSBsYXRlc3QgSW50ZWwgY2hpcHMgKi8KKyAgICAvKiAgICAgICB3aWxsIGJlIHNldmVybHkgaW1wYWlyZWQuIEZvciBzYW1wbGUgY29kZSB0aGF0IGNhbiBiZSB1c2VkICovCisgICAgLyogICAgICAgZGlyZWN0bHkgaW4gYSByaW5nIDAgZGV2aWNlIGRyaXZlciwgc2VlIHRoZSBNU0RPUyBpbXBsZW1lbnRhdGlvbiAqLworICAgIC8qICAgICAgIHdoaWNoIGluY2x1ZGVzIGFzc2VtYmxlciBjb2RlIHRvIGRvIHRoaXMgZGlyZWN0bHkgKGlmIHRoZSAqLworICAgIC8qICAgICAgIHByb2dyYW0gaXMgcnVubmluZyBhdCByaW5nIDApLiAqLwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogaWJvb2wgUE1BUEkgUE1fZG9CSU9TUE9TVCh1c2hvcnQgYXhWYWwsdWxvbmcgQklPU1BoeXNBZGRyLHZvaWQgKm1hcHBlZEJJT1MpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJ1biB0aGUgQklPUyBQT1NUIGNvZGUgb24gYSBzZWNvbmRhcnkKLSAgICAvLyAgICAgICBjb250cm9sbGVyIHRvIGluaXRpYWxpc2UgaXQgZm9yIHVzZS4gVGhpcyBpcyBub3QgbmVjZXNzYXJ5Ci0gICAgLy8gICAgICAgZm9yIG11bHRpLWNvbnRyb2xsZXIgb3BlcmF0aW9uLCBidXQgaXQgd2lsbCBtYWtlIGl0IGEgbG90Ci0gICAgLy8gICAgICAgbW9yZSBjb252ZW5pY2VudCBmb3IgZW5kIHVzZXJzIChvdGhlcndpc2UgdGhleSBoYXZlIHRvIGJvb3QKLSAgICAvLyAgICAgICB0aGUgc3lzdGVtIG9uY2Ugd2l0aCB0aGUgc2Vjb25kYXJ5IGNvbnRyb2xsZXIgYXMgcHJpbWFyeSwgYW5kCi0gICAgLy8gICAgICAgdGhlbiBib290IHdpdGggYm90aCBjb250cm9sbGVycyBpbnN0YWxsZWQpLgotICAgIC8vCi0gICAgLy8gICAgICAgRXZlbiBpZiB5b3UgZG9uJ3Qgc3VwcG9ydCBmdWxsIEJJT1MgYWNjZXNzLCBpdCB3b3VsZCBiZQotICAgIC8vICAgICAgIGFkdmlzZWFibGUgdG8gYmUgYWJsZSB0byBQT1NUIHRoZSBzZWNvbmRhcnkgY29udHJvbGxlcnMgaW4gdGhlCi0gICAgLy8gICAgICAgc3lzdGVtIHVzaW5nIHRoaXMgZnVuY3Rpb24gYXMgYSBtaW5pbXVtIHJlcXVpcmVtZW50LiBTb21lCi0gICAgLy8gICAgICAgZ3JhcGhpY3MgaGFyZHdhcmUgaGFzIHJlZ2lzdGVycyB0aGF0IGNvbnRhaW4gdmFsdWVzIHRoYXQgb25seQotICAgIC8vICAgICAgIHRoZSBCSU9TIGtub3dzIGFib3V0LCB3aGljaCBtYWtlcyBicmluZyB1cCBhIGNhcmQgZnJvbSBjb2xkCi0gICAgLy8gICAgICAgcmVzZXQgZGlmZmljdWx0IGlmIHRoZSBCSU9TIGhhcyBub3QgUE9TVCdlZCBpdC4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcnVuIHRoZSBCSU9TIFBPU1QgY29kZSBvbiBhIHNlY29uZGFyeSAqLworICAgIC8qICAgICAgIGNvbnRyb2xsZXIgdG8gaW5pdGlhbGlzZSBpdCBmb3IgdXNlLiBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgKi8KKyAgICAvKiAgICAgICBmb3IgbXVsdGktY29udHJvbGxlciBvcGVyYXRpb24sIGJ1dCBpdCB3aWxsIG1ha2UgaXQgYSBsb3QgKi8KKyAgICAvKiAgICAgICBtb3JlIGNvbnZlbmljZW50IGZvciBlbmQgdXNlcnMgKG90aGVyd2lzZSB0aGV5IGhhdmUgdG8gYm9vdCAqLworICAgIC8qICAgICAgIHRoZSBzeXN0ZW0gb25jZSB3aXRoIHRoZSBzZWNvbmRhcnkgY29udHJvbGxlciBhcyBwcmltYXJ5LCBhbmQgKi8KKyAgICAvKiAgICAgICB0aGVuIGJvb3Qgd2l0aCBib3RoIGNvbnRyb2xsZXJzIGluc3RhbGxlZCkuICovCisgICAgLyogKi8KKyAgICAvKiAgICAgICBFdmVuIGlmIHlvdSBkb24ndCBzdXBwb3J0IGZ1bGwgQklPUyBhY2Nlc3MsIGl0IHdvdWxkIGJlICovCisgICAgLyogICAgICAgYWR2aXNlYWJsZSB0byBiZSBhYmxlIHRvIFBPU1QgdGhlIHNlY29uZGFyeSBjb250cm9sbGVycyBpbiB0aGUgKi8KKyAgICAvKiAgICAgICBzeXN0ZW0gdXNpbmcgdGhpcyBmdW5jdGlvbiBhcyBhIG1pbmltdW0gcmVxdWlyZW1lbnQuIFNvbWUgKi8KKyAgICAvKiAgICAgICBncmFwaGljcyBoYXJkd2FyZSBoYXMgcmVnaXN0ZXJzIHRoYXQgY29udGFpbiB2YWx1ZXMgdGhhdCBvbmx5ICovCisgICAgLyogICAgICAgdGhlIEJJT1Mga25vd3MgYWJvdXQsIHdoaWNoIG1ha2VzIGJyaW5nIHVwIGEgY2FyZCBmcm9tIGNvbGQgKi8KKyAgICAvKiAgICAgICByZXNldCBkaWZmaWN1bHQgaWYgdGhlIEJJT1MgaGFzIG5vdCBQT1NUJ2VkIGl0LiAqLwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNTA2LDcgKzUwNiw3IEBACiAgICAgY2hhciBkcml2ZSkKIHsKICAgICBpZiAoZHJpdmUgPT0gMykKLSAgICAgICAgcmV0dXJuIHRydWU7CisJcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC01MzMsNyArNTMzLDcgQEAKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKICAgICB1aW50IGF0dHJpYikKIHsKLSAgICAvLyBUT0RPOiBTZXQgdGhlIGZpbGUgYXR0cmlidXRlcyBmb3IgYSBmaWxlCisgICAgLyogVE9ETzogU2V0IHRoZSBmaWxlIGF0dHJpYnV0ZXMgZm9yIGEgZmlsZSAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgICh2b2lkKWF0dHJpYjsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Jlb3MvenRpbWVyLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9iZW9zL3p0aW1lci5jCmluZGV4IGE1NjM3YTUuLmE1MjhiNzMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Jlb3MvenRpbWVyLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vYmVvcy96dGltZXIuYwpAQCAtMzYsNyArMzYsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgX1pUaW1lckluaXQodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBEbyBhbnkgc3BlY2lmaWMgaW50ZXJuYWwgaW5pdGlhbGlzYXRpb24gaW4gaGVyZQorICAgIC8qIFRPRE86IERvIGFueSBzcGVjaWZpYyBpbnRlcm5hbCBpbml0aWFsaXNhdGlvbiBpbiBoZXJlICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00Niw4ICs0Niw4IEBACiBzdGF0aWMgdm9pZCBfTFpUaW1lck9uKAogICAgIExaVGltZXJPYmplY3QgKnRtKQogewotICAgIC8vIFRPRE86IFN0YXJ0IHRoZSBaZW4gVGltZXIgY291bnRpbmcuIFRoaXMgc2hvdWxkIGJlIGEgbWFjcm8gaWYKLSAgICAvLyAgICAgICBwb3NzaWJsZS4KKyAgICAvKiBUT0RPOiBTdGFydCB0aGUgWmVuIFRpbWVyIGNvdW50aW5nLiBUaGlzIHNob3VsZCBiZSBhIG1hY3JvIGlmICovCisgICAgLyogICAgICAgcG9zc2libGUuICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01Nyw4ICs1Nyw4IEBACiBzdGF0aWMgdWxvbmcgX0xaVGltZXJMYXAoCiAgICAgTFpUaW1lck9iamVjdCAqdG0pCiB7Ci0gICAgLy8gVE9ETzogQ29tcHV0ZSB0aGUgbGFwIHRpbWUgYmV0d2VlbiB0aGUgY3VycmVudCB0aW1lIGFuZCB3aGVuIHRoZQotICAgIC8vICAgICAgIHRpbWVyIHdhcyBzdGFydGVkLgorICAgIC8qIFRPRE86IENvbXB1dGUgdGhlIGxhcCB0aW1lIGJldHdlZW4gdGhlIGN1cnJlbnQgdGltZSBhbmQgd2hlbiB0aGUgKi8KKyAgICAvKiAgICAgICB0aW1lciB3YXMgc3RhcnRlZC4gKi8KICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjksNyArNjksNyBAQAogc3RhdGljIHZvaWQgX0xaVGltZXJPZmYoCiAgICAgTFpUaW1lck9iamVjdCAqdG0pCiB7Ci0gICAgLy8gVE9ETzogU3RvcCB0aGUgdGltZXIgY291bnRpbmcuIFNob3VsZCBiZSBhIG1hY3JvIGlmIHBvc3NpYmxlLgorICAgIC8qIFRPRE86IFN0b3AgdGhlIHRpbWVyIGNvdW50aW5nLiBTaG91bGQgYmUgYSBtYWNybyBpZiBwb3NzaWJsZS4gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc5LDcgKzc5LDcgQEAKIHN0YXRpYyB1bG9uZyBfTFpUaW1lckNvdW50KAogICAgIExaVGltZXJPYmplY3QgKnRtKQogewotICAgIC8vIFRPRE86IENvbXB1dGUgdGhlIGVsYXBzZWQgdGltZSBhbmQgcmV0dXJuIGl0LiBBbHdheXMgbWljcm9zZWNvbmRzLgorICAgIC8qIFRPRE86IENvbXB1dGUgdGhlIGVsYXBzZWQgdGltZSBhbmQgcmV0dXJuIGl0LiBBbHdheXMgbWljcm9zZWNvbmRzLiAqLwogICAgIHJldHVybiAwOwogfQogCkBAIC05NSw5ICs5NSw5IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHVsb25nIF9VTFpSZWFkVGltZSh2b2lkKQogewotICAgIC8vIFRPRE86IFJlYWQgdGhlIGxvbmcgcGVyaW9kIHRpbWVyIGZyb20gdGhlIE9TLiBUaGUgcmVzb2x1dGlvbiBvZiB0aGlzCi0gICAgLy8gICAgICAgdGltZXIgc2hvdWxkIGJlIGFyb3VuZCAxLzIwIG9mIGEgc2Vjb25kIGZvciB0aW1pbmcgbG9uZwotICAgIC8vICAgICAgIHBlcmlvZHMgaWYgcG9zc2libGUuCisgICAgLyogVE9ETzogUmVhZCB0aGUgbG9uZyBwZXJpb2QgdGltZXIgZnJvbSB0aGUgT1MuIFRoZSByZXNvbHV0aW9uIG9mIHRoaXMgKi8KKyAgICAvKiAgICAgICB0aW1lciBzaG91bGQgYmUgYXJvdW5kIDEvMjAgb2YgYSBzZWNvbmQgZm9yIHRpbWluZyBsb25nICovCisgICAgLyogICAgICAgcGVyaW9kcyBpZiBwb3NzaWJsZS4gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NvbW1vbi5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uLmMKaW5kZXggYjEwMGI4YS4uZDVhOGU4ZiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uLmMKQEAgLTk4LDkgKzk4LDkgQEAKICAgICBzdHJjcHkoZmlsZW5hbWUsYnBkcGF0aCk7CiAgICAgc3RyY2F0KGZpbGVuYW1lLGRsbG5hbWUpOwogICAgIGlmICgoZiA9IGZvcGVuKGZpbGVuYW1lLCJyYiIpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogICAgIGlmIChjYWNoZWRwYXRoKQotICAgICAgICBzdHJjcHkoY2FjaGVkcGF0aCxicGRwYXRoKTsKKwlzdHJjcHkoY2FjaGVkcGF0aCxicGRwYXRoKTsKICAgICBmY2xvc2UoZik7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMjEsMjAgKzEyMSwyMCBAQAogICAgIHN0YXRpYyBpYm9vbCAgICBsb2NhbF9vdmVycmlkZSA9IC0xOwogCiAgICAgaWYgKGxvY2FsX292ZXJyaWRlID09IC0xKSB7Ci0gICAgICAgIGxvY2FsX292ZXJyaWRlID0gZmFsc2U7Ci0gICAgICAgIHN0cmNweShmaWxlbmFtZSxQTV9nZXROdWNsZXVzUGF0aCgpKTsKLSAgICAgICAgUE1fYmFja3NsYXNoKGZpbGVuYW1lKTsKLSAgICAgICAgc3RyY2F0KGZpbGVuYW1lLCJncmFwaGljcy5pbmkiKTsKLSAgICAgICAgaWYgKChmID0gZm9wZW4oZmlsZW5hbWUsInIiKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgd2hpbGUgKCFmZW9mKGYpICYmIGZnZXRzKGZpbGVuYW1lLHNpemVvZihmaWxlbmFtZSksZikpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RybmljbXAoZmlsZW5hbWUsInVzZWxvY2FsIiw4KSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsX292ZXJyaWRlID0gKCgqKGZpbGVuYW1lKzkpIC0gJzAnKSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmY2xvc2UoZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlsb2NhbF9vdmVycmlkZSA9IGZhbHNlOworCXN0cmNweShmaWxlbmFtZSxQTV9nZXROdWNsZXVzUGF0aCgpKTsKKwlQTV9iYWNrc2xhc2goZmlsZW5hbWUpOworCXN0cmNhdChmaWxlbmFtZSwiZ3JhcGhpY3MuaW5pIik7CisJaWYgKChmID0gZm9wZW4oZmlsZW5hbWUsInIiKSkgIT0gTlVMTCkgeworCSAgICB3aGlsZSAoIWZlb2YoZikgJiYgZmdldHMoZmlsZW5hbWUsc2l6ZW9mKGZpbGVuYW1lKSxmKSkgeworCQlpZiAoc3RybmljbXAoZmlsZW5hbWUsInVzZWxvY2FsIiw4KSA9PSAwKSB7CisJCSAgICBsb2NhbF9vdmVycmlkZSA9ICgoKihmaWxlbmFtZSs5KSAtICcwJykgPT0gMSk7CisJCSAgICBicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICBmY2xvc2UoZik7CisJICAgIH0KKwl9CiAgICAgcmV0dXJuIGxvY2FsX292ZXJyaWRlOwogfQogCkBAIC0xNjQsNDQgKzE2NCw0NCBAQAogCiAgICAgLyogT24gdGhlIGZpcnN0IGNhbGwgZGV0ZXJtaW5lIHRoZSBwYXRoIHRvIHRoZSBOdWNsZXVzIGRyaXZlcnMgKi8KICAgICBpZiAoY2FjaGVkcGF0aFswXSA9PSAwKSB7Ci0gICAgICAgIC8qIEZpcnN0IHRyeSBpbiB0aGUgZ2xvYmFsIHN5c3RlbSBOdWNsZXVzIGRyaXZlciBwYXRoIGlmCi0gICAgICAgICAqIHRoZSBsb2NhbCBvdmVycmlkZSBzZXR0aW5nIGlzIG5vdCBlbmFibGVkLgotICAgICAgICAgKi8KLSAgICAgICAgUE1faW5pdCgpOwotICAgICAgICBpZiAoIUdldExvY2FsT3ZlcnJpZGUoKSkgewotICAgICAgICAgICAgaWYgKFRyeVBhdGgoYnBkcGF0aCxjYWNoZWRwYXRoLFBNX2dldE51Y2xldXNQYXRoKCksIiIsZGxsbmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9CisJLyogRmlyc3QgdHJ5IGluIHRoZSBnbG9iYWwgc3lzdGVtIE51Y2xldXMgZHJpdmVyIHBhdGggaWYKKwkgKiB0aGUgbG9jYWwgb3ZlcnJpZGUgc2V0dGluZyBpcyBub3QgZW5hYmxlZC4KKwkgKi8KKwlQTV9pbml0KCk7CisJaWYgKCFHZXRMb2NhbE92ZXJyaWRlKCkpIHsKKwkgICAgaWYgKFRyeVBhdGgoYnBkcGF0aCxjYWNoZWRwYXRoLFBNX2dldE51Y2xldXNQYXRoKCksIiIsZGxsbmFtZSkpCisJCXJldHVybiB0cnVlOworCSAgICB9CiAKLSAgICAgICAgLyogTmV4dCB0cnkgaW4gdGhlIGxvY2FsIGFwcGxpY2F0aW9uIGRpcmVjdG9yeSBpZiBhdmFpbGFibGUgKi8KLSAgICAgICAgaWYgKGxvY2FsQlBEUGF0aFswXSAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoVHJ5UGF0aChicGRwYXRoLGNhY2hlZHBhdGgsbG9jYWxCUERQYXRoLCIiLGRsbG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIHsKKwkvKiBOZXh0IHRyeSBpbiB0aGUgbG9jYWwgYXBwbGljYXRpb24gZGlyZWN0b3J5IGlmIGF2YWlsYWJsZSAqLworCWlmIChsb2NhbEJQRFBhdGhbMF0gIT0gMCkgeworCSAgICBpZiAoVHJ5UGF0aChicGRwYXRoLGNhY2hlZHBhdGgsbG9jYWxCUERQYXRoLCIiLGRsbG5hbWUpKQorCQlyZXR1cm4gdHJ1ZTsKKwkgICAgfQorCWVsc2UgewogI2lmICFkZWZpbmVkKF9fV0lOMzJfVlhEX18pICYmICFkZWZpbmVkKF9fTlRfRFJJVkVSX18pCi0gICAgICAgICAgICBjaGFyICAgICptZ2xfcm9vdDsKLSAgICAgICAgICAgIGlmICgobWdsX3Jvb3QgPSBnZXRlbnYoIk1HTF9ST09UIikpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoVHJ5UGF0aChicGRwYXRoLGNhY2hlZHBhdGgsbWdsX3Jvb3QsImRyaXZlcnMiLGRsbG5hbWUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9CisJICAgIGNoYXIgICAgKm1nbF9yb290OworCSAgICBpZiAoKG1nbF9yb290ID0gZ2V0ZW52KCJNR0xfUk9PVCIpKSAhPSBOVUxMKSB7CisJCWlmIChUcnlQYXRoKGJwZHBhdGgsY2FjaGVkcGF0aCxtZ2xfcm9vdCwiZHJpdmVycyIsZGxsbmFtZSkpCisJCSAgICByZXR1cm4gdHJ1ZTsKKwkJfQogI2VuZGlmCi0gICAgICAgICAgICBQTV9nZXRDdXJyZW50UGF0aChicGRwYXRoLFBNX01BWF9QQVRIKTsKLSAgICAgICAgICAgIGlmIChUcnlQYXRoKGJwZHBhdGgsY2FjaGVkcGF0aCxicGRwYXRoLCJkcml2ZXJzIixkbGxuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KKwkgICAgUE1fZ2V0Q3VycmVudFBhdGgoYnBkcGF0aCxQTV9NQVhfUEFUSCk7CisJICAgIGlmIChUcnlQYXRoKGJwZHBhdGgsY2FjaGVkcGF0aCxicGRwYXRoLCJkcml2ZXJzIixkbGxuYW1lKSkKKwkJcmV0dXJuIHRydWU7CisJICAgIH0KIAotICAgICAgICAvKiBGaW5hbGx5IHRyeSBpbiB0aGUgZ2xvYmFsIHN5c3RlbSBwYXRoIGFnYWluIHNvIHRoYXQgd2UKLSAgICAgICAgICogd2lsbCBzdGlsbCBmaW5kIHRoZSBkcml2ZXJzIGluIHRoZSBnbG9iYWwgc3lzdGVtIHBhdGggaWYKLSAgICAgICAgICogdGhlIGxvY2FsIG92ZXJyaWRlIG9wdGlvbiBpcyBvbiwgYnV0IHRoZSBhcHBsaWNhdGlvbiBkb2VzCi0gICAgICAgICAqIG5vdCBoYXZlIGFueSBsb2NhbCBvdmVycmlkZSBkcml2ZXJzLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKFRyeVBhdGgoYnBkcGF0aCxjYWNoZWRwYXRoLFBNX2dldE51Y2xldXNQYXRoKCksIiIsZGxsbmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwkvKiBGaW5hbGx5IHRyeSBpbiB0aGUgZ2xvYmFsIHN5c3RlbSBwYXRoIGFnYWluIHNvIHRoYXQgd2UKKwkgKiB3aWxsIHN0aWxsIGZpbmQgdGhlIGRyaXZlcnMgaW4gdGhlIGdsb2JhbCBzeXN0ZW0gcGF0aCBpZgorCSAqIHRoZSBsb2NhbCBvdmVycmlkZSBvcHRpb24gaXMgb24sIGJ1dCB0aGUgYXBwbGljYXRpb24gZG9lcworCSAqIG5vdCBoYXZlIGFueSBsb2NhbCBvdmVycmlkZSBkcml2ZXJzLgorCSAqLworCWlmIChUcnlQYXRoKGJwZHBhdGgsY2FjaGVkcGF0aCxQTV9nZXROdWNsZXVzUGF0aCgpLCIiLGRsbG5hbWUpKQorCSAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAvKiBXaG9vcHMsIHdlIGNhbid0IGZpbmQgdGhlIEJQRCBmaWxlISAqLwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKwkvKiBXaG9vcHMsIHdlIGNhbid0IGZpbmQgdGhlIEJQRCBmaWxlISAqLworCXJldHVybiBmYWxzZTsKKwl9CiAKICAgICAvKiBBbHdheXMgdHJ5IGluIHRoZSBwcmV2aW91c2x5IGRpc2NvdmVyZWQgcGF0aCAqLwogICAgIHJldHVybiBUcnlQYXRoKGJwZHBhdGgsTlVMTCxjYWNoZWRwYXRoLCIiLGRsbG5hbWUpOwpAQCAtMjE2LDkgKzIxNiw5IEBACiAgICAgY29uc3QgY2hhciAqX3NyYykKIHsKICAgICBpZiAoIV9kZXN0IHx8ICFfc3JjKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICB3aGlsZSAoKCpfZGVzdCsrID0gKl9zcmMrKykgIT0gMCkKLSAgICAgICAgOworCTsKICAgICByZXR1cm4gLS1fZGVzdDsKIH0KIApAQCAtMjMzLDEzICsyMzMsMTMgQEAKICAgICB1bnNpZ25lZCBtYXhsZW4pCiB7CiAgICAgaWYgKGRzdCkgewotICAgICAgICBpZihzdHJsZW4oc3JjKSA+PSBtYXhsZW4pIHsKLSAgICAgICAgICAgIHN0cm5jcHkoZHN0LCBzcmMsIG1heGxlbik7Ci0gICAgICAgICAgICBkc3RbbWF4bGVuXSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmNweShkc3QsIHNyYyk7Ci0gICAgICAgIH0KKwlpZihzdHJsZW4oc3JjKSA+PSBtYXhsZW4pIHsKKwkgICAgc3RybmNweShkc3QsIHNyYywgbWF4bGVuKTsKKwkgICAgZHN0W21heGxlbl0gPSAwOworCSAgICB9CisJZWxzZQorCSAgICBzdHJjcHkoZHN0LCBzcmMpOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1MCwxNiArMjUwLDE2IEBACiAgICAgY2hhciAqcCkKIHsKICAgICBpZiAoKihwLTEpID09ICcuJykKLSAgICAgICAgcC0tOworCXAtLTsKICAgICBzd2l0Y2ggKCotLXApIHsKLSAgICAgICAgY2FzZSAnOic6Ci0gICAgICAgICAgICBpZiAoKihwLTIpICE9ICdcMCcpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJy8nOgotICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGNhc2UgJ1wwJzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisJY2FzZSAnOic6CisJICAgIGlmICgqKHAtMikgIT0gJ1wwJykKKwkJYnJlYWs7CisJY2FzZSAnLyc6CisJY2FzZSAnXFwnOgorCWNhc2UgJ1wwJzoKKwkgICAgcmV0dXJuIHRydWU7CisJfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMjk5LDI1ICsyOTksMjUgQEAKICAgICBjb25zdCBjaGFyICpleHQpCiB7CiAgICAgaWYgKGRyaXZlICYmICpkcml2ZSkgewotICAgICAgICAqcGF0aCsrID0gKmRyaXZlOwotICAgICAgICAqcGF0aCsrID0gJzonOwotICAgICAgICB9CisJKnBhdGgrKyA9ICpkcml2ZTsKKwkqcGF0aCsrID0gJzonOworCX0KICAgICBpZiAoZGlyICYmICpkaXIpIHsKLSAgICAgICAgcGF0aCA9IF9zdHBjcHkocGF0aCxkaXIpOwotICAgICAgICBpZiAoKihwYXRoLTEpICE9ICdcXCcgJiYgKihwYXRoLTEpICE9ICcvJykKKwlwYXRoID0gX3N0cGNweShwYXRoLGRpcik7CisJaWYgKCoocGF0aC0xKSAhPSAnXFwnICYmICoocGF0aC0xKSAhPSAnLycpCiAjaWZkZWYgIF9fVU5JWF9fCi0gICAgICAgICAgICAqcGF0aCsrID0gJy8nOworCSAgICAqcGF0aCsrID0gJy8nOwogI2Vsc2UKLSAgICAgICAgICAgICpwYXRoKysgPSAnXFwnOworCSAgICAqcGF0aCsrID0gJ1xcJzsKICNlbmRpZgotICAgICAgICB9CisJfQogICAgIGlmIChuYW1lKQotICAgICAgICBwYXRoID0gX3N0cGNweShwYXRoLG5hbWUpOworCXBhdGggPSBfc3RwY3B5KHBhdGgsbmFtZSk7CiAgICAgaWYgKGV4dCAmJiAqZXh0KSB7Ci0gICAgICAgIGlmICgqZXh0ICE9ICcuJykKLSAgICAgICAgICAgICpwYXRoKysgPSAnLic7Ci0gICAgICAgIHBhdGggPSBfc3RwY3B5KHBhdGgsZXh0KTsKLSAgICAgICAgfQorCWlmICgqZXh0ICE9ICcuJykKKwkgICAgKnBhdGgrKyA9ICcuJzsKKwlwYXRoID0gX3N0cGNweShwYXRoLGV4dCk7CisJfQogICAgICpwYXRoID0gMDsKIH0KIApAQCAtMzc3LDcgKzM3Nyw3IEBACiAgICAgLyogQ29weSBmaWxlbmFtZSBpbnRvIHRlbXBsYXRlIHVwIHRvIFBNX01BWF9QQVRIIGNoYXJhY3RlcnMgKi8KICAgICBwID0gYnVmOwogICAgIGlmICgodGVtcCA9IHN0cmxlbihwYXRoKSkgPiBQTV9NQVhfUEFUSCkKLSAgICAgICAgdGVtcCA9IFBNX01BWF9QQVRIOworCXRlbXAgPSBQTV9NQVhfUEFUSDsKICAgICAqcCsrID0gMDsKICAgICBzdHJuY3B5KHAsIHBhdGgsIHRlbXApOwogICAgICoocCArPSB0ZW1wKSA9IDA7CkBAIC0zODUsNTMgKzM4NSw1MyBAQAogICAgIC8qIFNwbGl0IHRoZSBmaWxlbmFtZSBhbmQgZmlsbCBjb3JyZXNwb25kaW5nIG5vbnplcm8gcG9pbnRlcnMgKi8KICAgICB0ZW1wID0gMDsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHN3aXRjaCAoKi0tcCkgewotICAgICAgICAgICAgY2FzZSAnLic6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZW1wICYmICgqKHArMSkgPT0gJ1wwJykpCi0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSBmaW5kRG90KHApOwotICAgICAgICAgICAgICAgIGlmICgoIXRlbXApICYmICgocmV0ICYgUE1fSEFTX0VYVEVOU0lPTikgPT0gMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0IHw9IFBNX0hBU19FWFRFTlNJT047Ci0gICAgICAgICAgICAgICAgICAgIHNhZmVfc3RybmNweShleHQsIHAsIFBNX01BWF9QQVRIIC0gMSk7Ci0gICAgICAgICAgICAgICAgICAgICpwID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY2FzZSAnOic6Ci0gICAgICAgICAgICAgICAgaWYgKHAgIT0gJmJ1ZlsyXSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjYXNlICdcMCc6Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCorK3ApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgfD0gUE1fSEFTX0RJUkVDVE9SWTsKLSAgICAgICAgICAgICAgICAgICAgc2FmZV9zdHJuY3B5KGRpciwgcCwgUE1fTUFYX1BBVEggLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgKnAtLSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICcvJzoKLSAgICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgICAgICAgICBpZiAoIXRlbXApIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcCsrOwotICAgICAgICAgICAgICAgICAgICBpZiAoKisrcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCB8PSBQTV9IQVNfRklMRU5BTUU7Ci0gICAgICAgICAgICAgICAgICAgIHNhZmVfc3RybmNweShuYW1lLCBwLCBQTV9NQVhfUEFUSCAtIDEpOwotICAgICAgICAgICAgICAgICAgICAqcC0tID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpwID09IDAgfHwgKCpwID09ICc6JyAmJiBwID09ICZidWZbMl0pKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNhc2UgJyonOgotICAgICAgICAgICAgY2FzZSAnPyc6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZW1wKQotICAgICAgICAgICAgICAgICAgICByZXQgfD0gUE1fSEFTX1dJTERDQVJEUzsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgICB9CisJc3dpdGNoICgqLS1wKSB7CisJICAgIGNhc2UgJy4nOgorCQlpZiAoIXRlbXAgJiYgKCoocCsxKSA9PSAnXDAnKSkKKwkJICAgIHRlbXAgPSBmaW5kRG90KHApOworCQlpZiAoKCF0ZW1wKSAmJiAoKHJldCAmIFBNX0hBU19FWFRFTlNJT04pID09IDApKSB7CisJCSAgICByZXQgfD0gUE1fSEFTX0VYVEVOU0lPTjsKKwkJICAgIHNhZmVfc3RybmNweShleHQsIHAsIFBNX01BWF9QQVRIIC0gMSk7CisJCSAgICAqcCA9IDA7CisJCSAgICB9CisJCWNvbnRpbnVlOworCSAgICBjYXNlICc6JzoKKwkJaWYgKHAgIT0gJmJ1ZlsyXSkKKwkJICAgIGNvbnRpbnVlOworCSAgICBjYXNlICdcMCc6CisJCWlmICh0ZW1wKSB7CisJCSAgICBpZiAoKisrcCkKKwkJCXJldCB8PSBQTV9IQVNfRElSRUNUT1JZOworCQkgICAgc2FmZV9zdHJuY3B5KGRpciwgcCwgUE1fTUFYX1BBVEggLSAxKTsKKwkJICAgICpwLS0gPSAwOworCQkgICAgYnJlYWs7CisJCSAgICB9CisJICAgIGNhc2UgJy8nOgorCSAgICBjYXNlICdcXCc6CisJCWlmICghdGVtcCkgeworCQkgICAgdGVtcCsrOworCQkgICAgaWYgKCorK3ApCisJCQlyZXQgfD0gUE1fSEFTX0ZJTEVOQU1FOworCQkgICAgc2FmZV9zdHJuY3B5KG5hbWUsIHAsIFBNX01BWF9QQVRIIC0gMSk7CisJCSAgICAqcC0tID0gMDsKKwkJICAgIGlmICgqcCA9PSAwIHx8ICgqcCA9PSAnOicgJiYgcCA9PSAmYnVmWzJdKSkKKwkJCWJyZWFrOworCQkgICAgfQorCQljb250aW51ZTsKKwkgICAgY2FzZSAnKic6CisJICAgIGNhc2UgJz8nOgorCQlpZiAoIXRlbXApCisJCSAgICByZXQgfD0gUE1fSEFTX1dJTERDQVJEUzsKKwkgICAgZGVmYXVsdDoKKwkJY29udGludWU7CisJICAgIH0KKwlicmVhazsKKwl9CiAgICAgaWYgKCpwID09ICc6JykgewotICAgICAgICBpZiAoYnVmWzFdKQotICAgICAgICAgICAgcmV0IHw9IFBNX0hBU19EUklWRTsKLSAgICAgICAgc2FmZV9zdHJuY3B5KGRyaXZlLCAmYnVmWzFdLCBQTV9NQVhfRFJJVkUgLSAxKTsKLSAgICAgICAgfQorCWlmIChidWZbMV0pCisJICAgIHJldCB8PSBQTV9IQVNfRFJJVkU7CisJc2FmZV9zdHJuY3B5KGRyaXZlLCAmYnVmWzFdLCBQTV9NQVhfRFJJVkUgLSAxKTsKKwl9CiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtNDY2LDE1ICs0NjYsMTUgQEAKICAgICBzdGF0aWMgaWJvb2wgICAgICAgICAgICBmaXJzdFRpbWUgPSB0cnVlOwogCiAgICAgaWYgKGZpcnN0VGltZSkgewotICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTsKLSAgICAgICAgTFpUaW1lck9uRXh0KCZ0bSk7Ci0gICAgICAgIH0KKwlmaXJzdFRpbWUgPSBmYWxzZTsKKwlMWlRpbWVyT25FeHQoJnRtKTsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICgobXNEZWxheSA9IChtaWNyb3NlY29uZHMgLSBMWlRpbWVyTGFwRXh0KCZ0bSkpIC8gMTAwMEwpID4gMCkKLSAgICAgICAgICAgIFBNX3NsZWVwKG1zRGVsYXkpOwotICAgICAgICB3aGlsZSAoTFpUaW1lckxhcEV4dCgmdG0pIDwgbWljcm9zZWNvbmRzKQotICAgICAgICAgICAgOwotICAgICAgICBMWlRpbWVyT2ZmRXh0KCZ0bSk7Ci0gICAgICAgIExaVGltZXJPbkV4dCgmdG0pOwotICAgICAgICB9CisJaWYgKChtc0RlbGF5ID0gKG1pY3Jvc2Vjb25kcyAtIExaVGltZXJMYXBFeHQoJnRtKSkgLyAxMDAwTCkgPiAwKQorCSAgICBQTV9zbGVlcChtc0RlbGF5KTsKKwl3aGlsZSAoTFpUaW1lckxhcEV4dCgmdG0pIDwgbWljcm9zZWNvbmRzKQorCSAgICA7CisJTFpUaW1lck9mZkV4dCgmdG0pOworCUxaVGltZXJPbkV4dCgmdG0pOworCX0KIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NvbW1vbi9hZ3AuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NvbW1vbi9hZ3AuYwppbmRleCAyM2Y3ZTFlLi5kNTNiYzg4IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9jb21tb24vYWdwLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uL2FncC5jCkBAIC01NCwyMiArNTQsMjIgQEAKIHVsb25nIFBNQVBJIFBNX2FncEluaXQodm9pZCkKIHsKICAgICBpZiAoKGFncCA9IEFHUF9sb2FkRHJpdmVyKDApKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICBkcml2ZXIuZHdTaXplID0gc2l6ZW9mKGRyaXZlcik7CiAgICAgaWYgKCFhZ3AtPlF1ZXJ5RnVuY3Rpb25zKEFHUF9HRVRfRFJJVkVSRlVOQ1MsJmRyaXZlcikpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIHN3aXRjaCAoZHJpdmVyLkdldEFwZXJ0dXJlU2l6ZSgpKSB7Ci0gICAgICAgIGNhc2UgYWdwU2l6ZTRNQjogICAgcmV0dXJuIDQ7Ci0gICAgICAgIGNhc2UgYWdwU2l6ZThNQjogICAgcmV0dXJuIDg7Ci0gICAgICAgIGNhc2UgYWdwU2l6ZTE2TUI6ICAgcmV0dXJuIDE2OwotICAgICAgICBjYXNlIGFncFNpemUzMk1COiAgIHJldHVybiAzMjsKLSAgICAgICAgY2FzZSBhZ3BTaXplNjRNQjogICByZXR1cm4gNjQ7Ci0gICAgICAgIGNhc2UgYWdwU2l6ZTEyOE1COiAgcmV0dXJuIDEyODsKLSAgICAgICAgY2FzZSBhZ3BTaXplMjU2TUI6ICByZXR1cm4gMjU2OwotICAgICAgICBjYXNlIGFncFNpemU1MTJNQjogIHJldHVybiA1MTI7Ci0gICAgICAgIGNhc2UgYWdwU2l6ZTFHQjogICAgcmV0dXJuIDEwMjQ7Ci0gICAgICAgIGNhc2UgYWdwU2l6ZTJHQjogICAgcmV0dXJuIDIwNDg7Ci0gICAgICAgIH0KKwljYXNlIGFncFNpemU0TUI6ICAgIHJldHVybiA0OworCWNhc2UgYWdwU2l6ZThNQjogICAgcmV0dXJuIDg7CisJY2FzZSBhZ3BTaXplMTZNQjogICByZXR1cm4gMTY7CisJY2FzZSBhZ3BTaXplMzJNQjogICByZXR1cm4gMzI7CisJY2FzZSBhZ3BTaXplNjRNQjogICByZXR1cm4gNjQ7CisJY2FzZSBhZ3BTaXplMTI4TUI6ICByZXR1cm4gMTI4OworCWNhc2UgYWdwU2l6ZTI1Nk1COiAgcmV0dXJuIDI1NjsKKwljYXNlIGFncFNpemU1MTJNQjogIHJldHVybiA1MTI7CisJY2FzZSBhZ3BTaXplMUdCOiAgICByZXR1cm4gMTAyNDsKKwljYXNlIGFncFNpemUyR0I6ICAgIHJldHVybiAyMDQ4OworCX0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTA2LDE4ICsxMDYsMTggQEAKICAgICBQTV9waHlzQWRkciAqcGh5c0FkZHIpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgUE1fYWdwVW5jYWNoZWQ6ICAgICAgICAKLSAgICAgICAgICAgIHR5cGUgPSBhZ3BVbmNhY2hlZDsgICAgIAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fYWdwV3JpdGVDb21iaW5lOiAgICAKLSAgICAgICAgICAgIHR5cGUgPSBhZ3BXcml0ZUNvbWJpbmU7IAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fYWdwSW50ZWxEQ0FDSEU6ICAgICAKLSAgICAgICAgICAgIHR5cGUgPSBhZ3BJbnRlbERDQUNIRTsgICAgICAKLSAgICAgICAgICAgIGJyZWFrOyAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKwljYXNlIFBNX2FncFVuY2FjaGVkOgorCSAgICB0eXBlID0gYWdwVW5jYWNoZWQ7CisJICAgIGJyZWFrOworCWNhc2UgUE1fYWdwV3JpdGVDb21iaW5lOgorCSAgICB0eXBlID0gYWdwV3JpdGVDb21iaW5lOworCSAgICBicmVhazsKKwljYXNlIFBNX2FncEludGVsRENBQ0hFOgorCSAgICB0eXBlID0gYWdwSW50ZWxEQ0FDSEU7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHJldHVybiBmYWxzZTsKKwl9CiAgICAgcmV0dXJuIGRyaXZlci5SZXNlcnZlUGh5c2ljYWwobnVtUGFnZXMsdHlwZSxwaHlzQ29udGV4dCxwaHlzQWRkcikgPT0gbk9LOwogfQogCkBAIC0xODcsNCArMTg3LDMgQEAKIH0KIAogI2VuZGlmICAvKiAhUkVBTE1PREUgKi8KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uL2tleWJvYXJkLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9jb21tb24va2V5Ym9hcmQuYwppbmRleCA3OWI0MDQwLi4zNjg2N2JkIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9jb21tb24va2V5Ym9hcmQuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9jb21tb24va2V5Ym9hcmQuYwpAQCAtNTIsMTggKzUyLDE4IEBACiAgICAgaW50ICAgICAgICAgICAgICAgICBuLHBpdm90LHZhbDsKIAogICAgIGZvciAobiA9IGNvdW50OyBuID4gMDsgKSB7Ci0gICAgICAgIHBpdm90ID0gbiA+PiAxOwotICAgICAgICB0ZXN0ID0gdGFibGUgKyBwaXZvdDsKLSAgICAgICAgdmFsID0gc2NhbkNvZGUgLSB0ZXN0LT5zY2FuQ29kZTsKLSAgICAgICAgaWYgKHZhbCA8IDApCi0gICAgICAgICAgICBuID0gcGl2b3Q7Ci0gICAgICAgIGVsc2UgaWYgKHZhbCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIHRlc3QtPmFzY2lpQ29kZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0YWJsZSA9IHRlc3QgKyAxOwotICAgICAgICAgICAgbiAtPSBwaXZvdCArIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlwaXZvdCA9IG4gPj4gMTsKKwl0ZXN0ID0gdGFibGUgKyBwaXZvdDsKKwl2YWwgPSBzY2FuQ29kZSAtIHRlc3QtPnNjYW5Db2RlOworCWlmICh2YWwgPCAwKQorCSAgICBuID0gcGl2b3Q7CisJZWxzZSBpZiAodmFsID09IDApCisJICAgIHJldHVybiB0ZXN0LT5hc2NpaUNvZGU7CisJZWxzZSB7CisJICAgIHRhYmxlID0gdGVzdCArIDE7CisJICAgIG4gLT0gcGl2b3QgKyAxOworCSAgICB9CisJfQogICAgIHJldHVybiAwOwogfQogCkBAIC04NCwzNSArODQsMzUgQEAKIAogICAgIGV2dC0+bWVzc2FnZSAmPSB+MHhGRjsKICAgICBpZiAoZXZ0LT5tb2RpZmllcnMgJiBFVlRfTlVNTE9DSykgewotICAgICAgICBpZiAoKGFzY2lpID0gdHJhbnNsYXRlU2NhbihzY2FuLEVWVC5jb2RlUGFnZS0+bnVtUGFkLEVWVC5jb2RlUGFnZS0+bnVtUGFkTGVuKSkgIT0gMCkgewotICAgICAgICAgICAgZXZ0LT5tZXNzYWdlIHw9IGFzY2lpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKChhc2NpaSA9IHRyYW5zbGF0ZVNjYW4oc2NhbixFVlQuY29kZVBhZ2UtPm51bVBhZCxFVlQuY29kZVBhZ2UtPm51bVBhZExlbikpICE9IDApIHsKKwkgICAgZXZ0LT5tZXNzYWdlIHw9IGFzY2lpOworCSAgICByZXR1cm47CisJICAgIH0KKwl9CiAgICAgaWYgKGV2dC0+bW9kaWZpZXJzICYgRVZUX0NUUkxTVEFURSkgewotICAgICAgICBldnQtPm1lc3NhZ2UgfD0gdHJhbnNsYXRlU2NhbihzY2FuLEVWVC5jb2RlUGFnZS0+Y3RybCxFVlQuY29kZVBhZ2UtPmN0cmxMZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwlldnQtPm1lc3NhZ2UgfD0gdHJhbnNsYXRlU2NhbihzY2FuLEVWVC5jb2RlUGFnZS0+Y3RybCxFVlQuY29kZVBhZ2UtPmN0cmxMZW4pOworCXJldHVybjsKKwl9CiAgICAgaWYgKGV2dC0+bW9kaWZpZXJzICYgRVZUX0NBUFNMT0NLKSB7Ci0gICAgICAgIGlmIChldnQtPm1vZGlmaWVycyAmIEVWVF9TSElGVEtFWSkgewotICAgICAgICAgICAgaWYgKChhc2NpaSA9IHRyYW5zbGF0ZVNjYW4oc2NhbixFVlQuY29kZVBhZ2UtPnNoaWZ0Q2FwcyxFVlQuY29kZVBhZ2UtPnNoaWZ0Q2Fwc0xlbikpICE9IDApIHsKLSAgICAgICAgICAgICAgICBldnQtPm1lc3NhZ2UgfD0gYXNjaWk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoKGFzY2lpID0gdHJhbnNsYXRlU2NhbihzY2FuLEVWVC5jb2RlUGFnZS0+Y2FwcyxFVlQuY29kZVBhZ2UtPmNhcHNMZW4pKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZXZ0LT5tZXNzYWdlIHw9IGFzY2lpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoZXZ0LT5tb2RpZmllcnMgJiBFVlRfU0hJRlRLRVkpIHsKKwkgICAgaWYgKChhc2NpaSA9IHRyYW5zbGF0ZVNjYW4oc2NhbixFVlQuY29kZVBhZ2UtPnNoaWZ0Q2FwcyxFVlQuY29kZVBhZ2UtPnNoaWZ0Q2Fwc0xlbikpICE9IDApIHsKKwkJZXZ0LT5tZXNzYWdlIHw9IGFzY2lpOworCQlyZXR1cm47CisJCX0KKwkgICAgfQorCWVsc2UgeworCSAgICBpZiAoKGFzY2lpID0gdHJhbnNsYXRlU2NhbihzY2FuLEVWVC5jb2RlUGFnZS0+Y2FwcyxFVlQuY29kZVBhZ2UtPmNhcHNMZW4pKSAhPSAwKSB7CisJCWV2dC0+bWVzc2FnZSB8PSBhc2NpaTsKKwkJcmV0dXJuOworCQl9CisJICAgIH0KKwl9CiAgICAgaWYgKGV2dC0+bW9kaWZpZXJzICYgRVZUX1NISUZUS0VZKSB7Ci0gICAgICAgIGlmICgoYXNjaWkgPSB0cmFuc2xhdGVTY2FuKHNjYW4sRVZULmNvZGVQYWdlLT5zaGlmdCxFVlQuY29kZVBhZ2UtPnNoaWZ0TGVuKSkgIT0gMCkgewotICAgICAgICAgICAgZXZ0LT5tZXNzYWdlIHw9IGFzY2lpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKChhc2NpaSA9IHRyYW5zbGF0ZVNjYW4oc2NhbixFVlQuY29kZVBhZ2UtPnNoaWZ0LEVWVC5jb2RlUGFnZS0+c2hpZnRMZW4pKSAhPSAwKSB7CisJICAgIGV2dC0+bWVzc2FnZSB8PSBhc2NpaTsKKwkgICAgcmV0dXJuOworCSAgICB9CisJfQogICAgIGV2dC0+bWVzc2FnZSB8PSB0cmFuc2xhdGVTY2FuKHNjYW4sRVZULmNvZGVQYWdlLT5ub3JtYWwsRVZULmNvZGVQYWdlLT5ub3JtYWxMZW4pOwogfQogCkBAIC0xMjQsOSArMTI0LDkgQEAKICAgICB1Y2hhciBzY2FuQ29kZSkKIHsKICAgICBpZiAoc2NhbkNvZGUgPiAweDdGKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEVWVC5rZXlUYWJsZVtzY2FuQ29kZV0gIT0gMDsKKwlyZXR1cm4gRVZULmtleVRhYmxlW3NjYW5Db2RlXSAhPSAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTM5LDcgKzEzOSw3IEBACiB3aXRoaW4gdGhlIGtleWJvYXJkIGludGVycnVwdCBzdWJyb3V0aW5lIQogCiBOT1RFOiAgIEludGVycnVwdHMgYXJlIE9GRiB3aGVuIHRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIGtleWJvYXJkIElTUiwKLSAgICAgICAgYW5kIHdlIGxlYXZlIHRoZW0gT0ZGIHRoZSBlbnRpcmUgdGltZS4KKwlhbmQgd2UgbGVhdmUgdGhlbSBPRkYgdGhlIGVudGlyZSB0aW1lLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGFkZEtleUV2ZW50KAogICAgIHVpbnQgd2hhdCwKQEAgLTE0OCwzMSArMTQ4LDMxIEBACiAgICAgZXZlbnRfdCBldnQ7CiAKICAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkgewotICAgICAgICAvKiBTYXZlIGluZm9ybWF0aW9uIGluIGV2ZW50IHJlY29yZCAqLwotICAgICAgICBldnQud2hlbiA9IF9FVlRfZ2V0VGlja3MoKTsKLSAgICAgICAgZXZ0LndoYXQgPSB3aGF0OwotICAgICAgICBldnQubWVzc2FnZSA9IG1lc3NhZ2UgfCAweDEwMDAwVUw7Ci0gICAgICAgIGV2dC53aGVyZV94ID0gMDsKLSAgICAgICAgZXZ0LndoZXJlX3kgPSAwOwotICAgICAgICBldnQucmVsYXRpdmVfeCA9IDA7Ci0gICAgICAgIGV2dC5yZWxhdGl2ZV95ID0gMDsKLSAgICAgICAgZXZ0Lm1vZGlmaWVycyA9IEVWVC5rZXlNb2RpZmllcnM7Ci0gICAgICAgIGlmIChldnQud2hhdCA9PSBFVlRfS0VZUkVQRUFUKSB7Ci0gICAgICAgICAgICBpZiAoRVZULm9sZEtleSAhPSAtMSkKLSAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkS2V5XS5tZXNzYWdlICs9IDB4MTAwMDBVTDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEVWVC5vbGRLZXkgPSBFVlQuZnJlZUhlYWQ7Ci0gICAgICAgICAgICAgICAgYWRkRXZlbnQoJmV2dCk7ICAgICAgICAgLyogQWRkIHRvIHRhaWwgb2YgZXZlbnQgcXVldWUgICAqLwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisJLyogU2F2ZSBpbmZvcm1hdGlvbiBpbiBldmVudCByZWNvcmQgKi8KKwlldnQud2hlbiA9IF9FVlRfZ2V0VGlja3MoKTsKKwlldnQud2hhdCA9IHdoYXQ7CisJZXZ0Lm1lc3NhZ2UgPSBtZXNzYWdlIHwgMHgxMDAwMFVMOworCWV2dC53aGVyZV94ID0gMDsKKwlldnQud2hlcmVfeSA9IDA7CisJZXZ0LnJlbGF0aXZlX3ggPSAwOworCWV2dC5yZWxhdGl2ZV95ID0gMDsKKwlldnQubW9kaWZpZXJzID0gRVZULmtleU1vZGlmaWVyczsKKwlpZiAoZXZ0LndoYXQgPT0gRVZUX0tFWVJFUEVBVCkgeworCSAgICBpZiAoRVZULm9sZEtleSAhPSAtMSkKKwkJRVZULmV2dHFbRVZULm9sZEtleV0ubWVzc2FnZSArPSAweDEwMDAwVUw7CisJICAgIGVsc2UgeworCQlFVlQub2xkS2V5ID0gRVZULmZyZWVIZWFkOworCQlhZGRFdmVudCgmZXZ0KTsgICAgICAgICAvKiBBZGQgdG8gdGFpbCBvZiBldmVudCBxdWV1ZSAgICovCisJCX0KKwkgICAgfQorCWVsc2UgewogI2lmZGVmIF9fUU5YX18KLSAgICAgICAgICAgIF9FVlRfbWFza0tleUNvZGUoJmV2dCk7CisJICAgIF9FVlRfbWFza0tleUNvZGUoJmV2dCk7CiAjZW5kaWYKLSAgICAgICAgICAgIGFkZEV2ZW50KCZldnQpOyAgICAgICAgICAgICAvKiBBZGQgdG8gdGFpbCBvZiBldmVudCBxdWV1ZSAgICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7Ci0gICAgICAgIH0KKwkgICAgYWRkRXZlbnQoJmV2dCk7ICAgICAgICAgICAgIC8qIEFkZCB0byB0YWlsIG9mIGV2ZW50IHF1ZXVlICAgKi8KKwkgICAgfQorCUVWVC5vbGRNb3ZlID0gLTE7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTg0LDcgKzE4NCw3IEBACiB7CiAgICAgaW50IHRpbWVvdXQgPSA4MTkyOwogICAgIHdoaWxlICgodGltZW91dCA+IDApICYmIChQTV9pbnBiKDB4NjQpICYgMHgwMikpCi0gICAgICAgIHRpbWVvdXQtLTsKKwl0aW1lb3V0LS07CiAgICAgcmV0dXJuICh0aW1lb3V0ID4gMCk7CiB9CiAKQEAgLTE5Nyw3ICsxOTcsNyBAQAogewogICAgIGludCB0aW1lb3V0ID0gODE5MjsKICAgICB3aGlsZSAoKHRpbWVvdXQgPiAwKSAmJiAoIShQTV9pbnBiKDB4NjQpICYgMHgwMSkpKQotICAgICAgICB0aW1lb3V0LS07CisJdGltZW91dC0tOwogICAgIHJldHVybiAodGltZW91dCA+IDApOwogfQogCkBAIC0yMTUsMjAgKzIxNSwyMCBAQAogICAgIGludCB0aW1lb3V0LCB0ZW1wOwogCiAgICAgZG8gewotICAgICAgICBpZiAoIWtiV2FpdEZvcldyaXRlUmVhZHkoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBQTV9vdXRwYigweDYwLGRhdGEpOwotICAgICAgICB0aW1lb3V0ID0gODE5MjsKLSAgICAgICAgd2hpbGUgKC0tdGltZW91dCA+IDApIHsKLSAgICAgICAgICAgIGlmICgha2JXYWl0Rm9yUmVhZFJlYWR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB0ZW1wID0gUE1faW5wYigweDYwKTsKLSAgICAgICAgICAgIGlmICh0ZW1wID09IDB4RkEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBpZiAodGVtcCA9PSAweEZFKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlICgocmVzZW5kcy0tID4gMCkgJiYgKHRpbWVvdXQgPiAwKSk7CisJaWYgKCFrYldhaXRGb3JXcml0ZVJlYWR5KCkpCisJICAgIHJldHVybiAwOworCVBNX291dHBiKDB4NjAsZGF0YSk7CisJdGltZW91dCA9IDgxOTI7CisJd2hpbGUgKC0tdGltZW91dCA+IDApIHsKKwkgICAgaWYgKCFrYldhaXRGb3JSZWFkUmVhZHkoKSkKKwkJcmV0dXJuIDA7CisJICAgIHRlbXAgPSBQTV9pbnBiKDB4NjApOworCSAgICBpZiAodGVtcCA9PSAweEZBKQorCQlyZXR1cm4gMTsKKwkgICAgaWYgKHRlbXAgPT0gMHhGRSkKKwkJYnJlYWs7CisJICAgIH0KKwl9IHdoaWxlICgocmVzZW5kcy0tID4gMCkgJiYgKHRpbWVvdXQgPiAwKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI0NSwxMCArMjQ1LDEwIEBACiAgICAgdWludCBtb2RpZmllcnMpCiB7CiAgICAgaWYgKEVWVC5hbGxvd0xFRFMpIHsKLSAgICAgICAgaWYgKCFrYlNlbmREYXRhKDB4RUQpIHx8ICFrYlNlbmREYXRhKChtb2RpZmllcnM+PjkpICYgNykpIHsKLSAgICAgICAgICAgIGtiU2VuZERhdGEoMHhGNCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoIWtiU2VuZERhdGEoMHhFRCkgfHwgIWtiU2VuZERhdGEoKG1vZGlmaWVycz4+OSkgJiA3KSkgeworCSAgICBrYlNlbmREYXRhKDB4RjQpOworCSAgICB9CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjU2LDcgKzI1Niw3IEBACiBGdW5jdGlvbiB0byBwcm9jZXNzIHJhdyBzY2FuIGNvZGVzIHJlYWQgZnJvbSB0aGUga2V5Ym9hcmQgY29udHJvbGxlci4KIAogTk9URTogICBJbnRlcnJ1cHRzIGFyZSBPRkYgd2hlbiB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBrZXlib2FyZCBJU1IsCi0gICAgICAgIGFuZCB3ZSBsZWF2ZSB0aGVtIE9GRiB0aGUgZW50aXJlIHRpbWUuCisJYW5kIHdlIGxlYXZlIHRoZW0gT0ZGIHRoZSBlbnRpcmUgdGltZS4KIHtzZWNyZXR9CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBwcm9jZXNzUmF3U2NhbkNvZGUoCkBAIC0yNjcsMTU2ICsyNjcsMTU2IEBACiAgICAgaW50ICAgICAgICAgd2hhdDsKIAogICAgIGlmIChwYXVzZUxvb3ApIHsKLSAgICAgICAgLyogU2tpcCBzY2FuIGNvZGVzIHVudGlsIHRoZSBwYXVzZSBrZXkgc2VxdWVuY2UgaGFzIGJlZW4gcmVhZCAqLwotICAgICAgICBwYXVzZUxvb3AtLTsKLSAgICAgICAgfQorCS8qIFNraXAgc2NhbiBjb2RlcyB1bnRpbCB0aGUgcGF1c2Uga2V5IHNlcXVlbmNlIGhhcyBiZWVuIHJlYWQgKi8KKwlwYXVzZUxvb3AtLTsKKwl9CiAgICAgZWxzZSBpZiAoc2NhbiA9PSAweEUwKSB7Ci0gICAgICAgIC8qIFRoaXMgc2lnbmFscyB0aGUgc3RhcnQgb2YgYW4gZXh0ZW5kZWQgc2NhbiBjb2RlIHNlcXVlbmNlICovCi0gICAgICAgIGV4dGVuZGVkID0gMTsKLSAgICAgICAgfQorCS8qIFRoaXMgc2lnbmFscyB0aGUgc3RhcnQgb2YgYW4gZXh0ZW5kZWQgc2NhbiBjb2RlIHNlcXVlbmNlICovCisJZXh0ZW5kZWQgPSAxOworCX0KICAgICBlbHNlIGlmIChzY2FuID09IDB4RTEpIHsKLSAgICAgICAgLyogVGhlIFBhdXNlIGtleSBzZW5kcyBhIHN0cmFuZ2Ugc2NhbiBjb2RlIHNlcXVlbmNlLCB3aGljaCBpczoKLSAgICAgICAgICoKLSAgICAgICAgICogIEUxIDFEIDUyIEUxIDlEIEQyCi0gICAgICAgICAqCi0gICAgICAgICAqIEhvd2V2ZXIgdGhlcmUgaXMgbmV2ZXIgYW55IHJlbGVhc2UgY29kZSBub3IgYW55IGF1dG8tcmVwZWF0IGZvcgotICAgICAgICAgKiB0aGlzIGtleS4gRm9yIHRoaXMgcmVhc29uIHdlIHNpbXBseSBpZ25vcmUgdGhlIGtleSBhbmQgc2tpcCB0aGUKLSAgICAgICAgICogbmV4dCA1IHNjYW4gY29kZXMgcmVhZCBmcm9tIHRoZSBrZXlib2FyZC4KLSAgICAgICAgICovCi0gICAgICAgIHBhdXNlTG9vcCA9IDU7Ci0gICAgICAgIH0KKwkvKiBUaGUgUGF1c2Uga2V5IHNlbmRzIGEgc3RyYW5nZSBzY2FuIGNvZGUgc2VxdWVuY2UsIHdoaWNoIGlzOgorCSAqCisJICogIEUxIDFEIDUyIEUxIDlEIEQyCisJICoKKwkgKiBIb3dldmVyIHRoZXJlIGlzIG5ldmVyIGFueSByZWxlYXNlIGNvZGUgbm9yIGFueSBhdXRvLXJlcGVhdCBmb3IKKwkgKiB0aGlzIGtleS4gRm9yIHRoaXMgcmVhc29uIHdlIHNpbXBseSBpZ25vcmUgdGhlIGtleSBhbmQgc2tpcCB0aGUKKwkgKiBuZXh0IDUgc2NhbiBjb2RlcyByZWFkIGZyb20gdGhlIGtleWJvYXJkLgorCSAqLworCXBhdXNlTG9vcCA9IDU7CisJfQogICAgIGVsc2UgewotICAgICAgICAvKiBQcm9jZXNzIHRoZSBzY2FuIGNvZGUgbm9ybWFsbHkgKGl0IG1heSBiZSBhbiBleHRlbmRlZCBjb2RlCi0gICAgICAgICAqIGhvd2V2ZXIhKS4gQml0IDcgbWVhbnMga2V5IHdhcyByZWxlYXNlZCwgYW5kIGJpdHMgMC02IGFyZSB0aGUKLSAgICAgICAgICogc2NhbiBjb2RlLgotICAgICAgICAgKi8KLSAgICAgICAgd2hhdCA9IChzY2FuICYgMHg4MCkgPyBFVlRfS0VZVVAgOiBFVlRfS0VZRE9XTjsKLSAgICAgICAgc2NhbiAmPSAweDdGOwotICAgICAgICBpZiAoZXh0ZW5kZWQpIHsKLSAgICAgICAgICAgIGV4dGVuZGVkID0gMDsKLSAgICAgICAgICAgIGlmIChzY2FuID09IDB4MkEgfHwgc2NhbiA9PSAweDM2KSB7Ci0gICAgICAgICAgICAgICAgLyogSWdub3JlIHRoZXNlIGV4dGVuZGVkIHNjYW4gY29kZSBzZXF1ZW5jZXMuIFRoZXNlIGFyZQotICAgICAgICAgICAgICAgICAqIHVzZWQgYnkgdGhlIGtleWJvYXJkIGNvbnRyb2xsZXIgdG8gd3JhcCBhcm91bmQgY2VydGFpbgotICAgICAgICAgICAgICAgICAqIGtleSBzZXF1ZW5jZXMgZm9yIHRoZSBrZXlwYWQgKGFuZCB3aGVuIE5VTUxPQ0sgaXMgZG93bgotICAgICAgICAgICAgICAgICAqIGludGVybmFsbHkpLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CisJLyogUHJvY2VzcyB0aGUgc2NhbiBjb2RlIG5vcm1hbGx5IChpdCBtYXkgYmUgYW4gZXh0ZW5kZWQgY29kZQorCSAqIGhvd2V2ZXIhKS4gQml0IDcgbWVhbnMga2V5IHdhcyByZWxlYXNlZCwgYW5kIGJpdHMgMC02IGFyZSB0aGUKKwkgKiBzY2FuIGNvZGUuCisJICovCisJd2hhdCA9IChzY2FuICYgMHg4MCkgPyBFVlRfS0VZVVAgOiBFVlRfS0VZRE9XTjsKKwlzY2FuICY9IDB4N0Y7CisJaWYgKGV4dGVuZGVkKSB7CisJICAgIGV4dGVuZGVkID0gMDsKKwkgICAgaWYgKHNjYW4gPT0gMHgyQSB8fCBzY2FuID09IDB4MzYpIHsKKwkJLyogSWdub3JlIHRoZXNlIGV4dGVuZGVkIHNjYW4gY29kZSBzZXF1ZW5jZXMuIFRoZXNlIGFyZQorCQkgKiB1c2VkIGJ5IHRoZSBrZXlib2FyZCBjb250cm9sbGVyIHRvIHdyYXAgYXJvdW5kIGNlcnRhaW4KKwkJICoga2V5IHNlcXVlbmNlcyBmb3IgdGhlIGtleXBhZCAoYW5kIHdoZW4gTlVNTE9DSyBpcyBkb3duCisJCSAqIGludGVybmFsbHkpLgorCQkgKi8KKwkJcmV0dXJuOworCQl9CiAKLSAgICAgICAgICAgIC8qIENvbnZlcnQgZXh0ZW5kZWQgY29kZXMgZm9yIGtleSBzZXF1ZW5jZXMgdGhhdCB3ZSBtYXAgdG8KLSAgICAgICAgICAgICAqIHZpcnR1YWwgc2NhbiBjb2RlcyBzbyB0aGUgdXNlciBjYW4gZGV0ZWN0IHRoZW0gaW4gdGhlaXIKLSAgICAgICAgICAgICAqIGNvZGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHN3aXRjaCAoc2NhbikgewotICAgICAgICAgICAgICAgIGNhc2UgS0JfbGVmdEN0cmw6ICAgc2NhbiA9IEtCX3JpZ2h0Q3RybDsgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBLQl9sZWZ0QWx0OiAgICBzY2FuID0gS0JfcmlnaHRBbHQ7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtCX2RpdmlkZTogICAgIHNjYW4gPSBLQl9wYWREaXZpZGU7ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgS0JfZW50ZXI6ICAgICAgc2NhbiA9IEtCX3BhZEVudGVyOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBLQl9wYWRUaW1lczogICBzY2FuID0gS0Jfc3lzUmVxOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogQ29udmVydCByZWd1bGFyIHNjYW4gY29kZXMgZm9yIGtleSBzZXF1ZW5jZXMgdGhhdCB3ZSBtYXAgdG8KLSAgICAgICAgICAgICAqIHZpcnR1YWwgc2NhbiBjb2RlcyBzbyB0aGUgdXNlciBjYW4gZGV0ZWN0IHRoZW0gaW4gdGhlaXIKLSAgICAgICAgICAgICAqIGNvZGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHN3aXRjaCAoc2NhbikgewotICAgICAgICAgICAgICAgIGNhc2UgS0JfbGVmdDogICAgICAgc2NhbiA9IEtCX3BhZExlZnQ7ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBLQl9yaWdodDogICAgICBzY2FuID0gS0JfcGFkUmlnaHQ7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtCX3VwOiAgICAgICAgIHNjYW4gPSBLQl9wYWRVcDsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgS0JfZG93bjogICAgICAgc2NhbiA9IEtCX3BhZERvd247ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBLQl9pbnNlcnQ6ICAgICBzY2FuID0gS0JfcGFkSW5zZXJ0OyAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtCX2RlbGV0ZTogICAgIHNjYW4gPSBLQl9wYWREZWxldGU7ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgS0JfaG9tZTogICAgICAgc2NhbiA9IEtCX3BhZEhvbWU7ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBLQl9lbmQ6ICAgICAgICBzY2FuID0gS0JfcGFkRW5kOyAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtCX3BhZ2VVcDogICAgIHNjYW4gPSBLQl9wYWRQYWdlVXA7ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgS0JfcGFnZURvd246ICAgc2NhbiA9IEtCX3BhZFBhZ2VEb3duOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorCSAgICAvKiBDb252ZXJ0IGV4dGVuZGVkIGNvZGVzIGZvciBrZXkgc2VxdWVuY2VzIHRoYXQgd2UgbWFwIHRvCisJICAgICAqIHZpcnR1YWwgc2NhbiBjb2RlcyBzbyB0aGUgdXNlciBjYW4gZGV0ZWN0IHRoZW0gaW4gdGhlaXIKKwkgICAgICogY29kZS4KKwkgICAgICovCisJICAgIHN3aXRjaCAoc2NhbikgeworCQljYXNlIEtCX2xlZnRDdHJsOiAgIHNjYW4gPSBLQl9yaWdodEN0cmw7ICAgIGJyZWFrOworCQljYXNlIEtCX2xlZnRBbHQ6ICAgIHNjYW4gPSBLQl9yaWdodEFsdDsgICAgIGJyZWFrOworCQljYXNlIEtCX2RpdmlkZTogICAgIHNjYW4gPSBLQl9wYWREaXZpZGU7ICAgIGJyZWFrOworCQljYXNlIEtCX2VudGVyOiAgICAgIHNjYW4gPSBLQl9wYWRFbnRlcjsgICAgIGJyZWFrOworCQljYXNlIEtCX3BhZFRpbWVzOiAgIHNjYW4gPSBLQl9zeXNSZXE7ICAgICAgIGJyZWFrOworCQl9CisJICAgIH0KKwllbHNlIHsKKwkgICAgLyogQ29udmVydCByZWd1bGFyIHNjYW4gY29kZXMgZm9yIGtleSBzZXF1ZW5jZXMgdGhhdCB3ZSBtYXAgdG8KKwkgICAgICogdmlydHVhbCBzY2FuIGNvZGVzIHNvIHRoZSB1c2VyIGNhbiBkZXRlY3QgdGhlbSBpbiB0aGVpcgorCSAgICAgKiBjb2RlLgorCSAgICAgKi8KKwkgICAgc3dpdGNoIChzY2FuKSB7CisJCWNhc2UgS0JfbGVmdDogICAgICAgc2NhbiA9IEtCX3BhZExlZnQ7ICAgICAgYnJlYWs7CisJCWNhc2UgS0JfcmlnaHQ6ICAgICAgc2NhbiA9IEtCX3BhZFJpZ2h0OyAgICAgYnJlYWs7CisJCWNhc2UgS0JfdXA6ICAgICAgICAgc2NhbiA9IEtCX3BhZFVwOyAgICAgICAgYnJlYWs7CisJCWNhc2UgS0JfZG93bjogICAgICAgc2NhbiA9IEtCX3BhZERvd247ICAgICAgYnJlYWs7CisJCWNhc2UgS0JfaW5zZXJ0OiAgICAgc2NhbiA9IEtCX3BhZEluc2VydDsgICAgYnJlYWs7CisJCWNhc2UgS0JfZGVsZXRlOiAgICAgc2NhbiA9IEtCX3BhZERlbGV0ZTsgICAgYnJlYWs7CisJCWNhc2UgS0JfaG9tZTogICAgICAgc2NhbiA9IEtCX3BhZEhvbWU7ICAgICAgYnJlYWs7CisJCWNhc2UgS0JfZW5kOiAgICAgICAgc2NhbiA9IEtCX3BhZEVuZDsgICAgICAgYnJlYWs7CisJCWNhc2UgS0JfcGFnZVVwOiAgICAgc2NhbiA9IEtCX3BhZFBhZ2VVcDsgICAgYnJlYWs7CisJCWNhc2UgS0JfcGFnZURvd246ICAgc2NhbiA9IEtCX3BhZFBhZ2VEb3duOyAgYnJlYWs7CisJCX0KKwkgICAgfQogCi0gICAgICAgIC8qIERldGVybWluZSBpZiB0aGUga2V5IGlzIGFuIFVQLCBET1dOIG9yIFJFUEVBVCBhbmQgbWFpbnRhaW4gdGhlCi0gICAgICAgICAqIHVwL2Rvd24gc3RhdHVzIG9mIGFsbCBrZXlzIGluIG91ciBnbG9iYWwga2V5IGFycmF5LgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHdoYXQgPT0gRVZUX0tFWURPV04pIHsKLSAgICAgICAgICAgIGlmIChFVlQua2V5VGFibGVbc2Nhbl0pCi0gICAgICAgICAgICAgICAgd2hhdCA9IEVWVF9LRVlSRVBFQVQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgRVZULmtleVRhYmxlW3NjYW5dID0gc2NhbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBFVlQua2V5VGFibGVbc2Nhbl0gPSAwOwotICAgICAgICAgICAgfQorCS8qIERldGVybWluZSBpZiB0aGUga2V5IGlzIGFuIFVQLCBET1dOIG9yIFJFUEVBVCBhbmQgbWFpbnRhaW4gdGhlCisJICogdXAvZG93biBzdGF0dXMgb2YgYWxsIGtleXMgaW4gb3VyIGdsb2JhbCBrZXkgYXJyYXkuCisJICovCisJaWYgKHdoYXQgPT0gRVZUX0tFWURPV04pIHsKKwkgICAgaWYgKEVWVC5rZXlUYWJsZVtzY2FuXSkKKwkJd2hhdCA9IEVWVF9LRVlSRVBFQVQ7CisJICAgIGVsc2UKKwkJRVZULmtleVRhYmxlW3NjYW5dID0gc2NhbjsKKwkgICAgfQorCWVsc2UgeworCSAgICBFVlQua2V5VGFibGVbc2Nhbl0gPSAwOworCSAgICB9CiAKLSAgICAgICAgLyogSGFuZGxlIHNoaWZ0IGtleSBtb2RpZmllcnMgKi8KLSAgICAgICAgaWYgKHdoYXQgIT0gRVZUX0tFWVJFUEVBVCkgewotICAgICAgICAgICAgc3dpdGNoIChzY2FuKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBLQl9jYXBzTG9jazoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gRVZUX0tFWURPV04pCi0gICAgICAgICAgICAgICAgICAgICAgICBFVlQua2V5TW9kaWZpZXJzIF49IEVWVF9DQVBTTE9DSzsKLSAgICAgICAgICAgICAgICAgICAgc2V0TEVEUyhFVlQua2V5TW9kaWZpZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBLQl9udW1Mb2NrOgotICAgICAgICAgICAgICAgICAgICBpZiAod2hhdCA9PSBFVlRfS0VZRE9XTikKLSAgICAgICAgICAgICAgICAgICAgICAgIEVWVC5rZXlNb2RpZmllcnMgXj0gRVZUX05VTUxPQ0s7Ci0gICAgICAgICAgICAgICAgICAgIHNldExFRFMoRVZULmtleU1vZGlmaWVycyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgS0Jfc2Nyb2xsTG9jazoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gRVZUX0tFWURPV04pCi0gICAgICAgICAgICAgICAgICAgICAgICBFVlQua2V5TW9kaWZpZXJzIF49IEVWVF9TQ1JPTExMT0NLOwotICAgICAgICAgICAgICAgICAgICBzZXRMRURTKEVWVC5rZXlNb2RpZmllcnMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtCX2xlZnRTaGlmdDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gRVZUX0tFWVVQKQotICAgICAgICAgICAgICAgICAgICAgICAgRVZULmtleU1vZGlmaWVycyAmPSB+RVZUX0xFRlRTSElGVDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgRVZULmtleU1vZGlmaWVycyB8PSBFVlRfTEVGVFNISUZUOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtCX3JpZ2h0U2hpZnQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ID09IEVWVF9LRVlVUCkKLSAgICAgICAgICAgICAgICAgICAgICAgIEVWVC5rZXlNb2RpZmllcnMgJj0gfkVWVF9SSUdIVFNISUZUOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBFVlQua2V5TW9kaWZpZXJzIHw9IEVWVF9SSUdIVFNISUZUOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtCX2xlZnRDdHJsOgotICAgICAgICAgICAgICAgICAgICBpZiAod2hhdCA9PSBFVlRfS0VZVVApCi0gICAgICAgICAgICAgICAgICAgICAgICBFVlQua2V5TW9kaWZpZXJzICY9IH5FVlRfTEVGVENUUkw7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIEVWVC5rZXlNb2RpZmllcnMgfD0gRVZUX0xFRlRDVFJMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtCX3JpZ2h0Q3RybDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdoYXQgPT0gRVZUX0tFWVVQKQotICAgICAgICAgICAgICAgICAgICAgICAgRVZULmtleU1vZGlmaWVycyAmPSB+RVZUX1JJR0hUQ1RSTDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgRVZULmtleU1vZGlmaWVycyB8PSBFVlRfUklHSFRDVFJMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtCX2xlZnRBbHQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aGF0ID09IEVWVF9LRVlVUCkKLSAgICAgICAgICAgICAgICAgICAgICAgIEVWVC5rZXlNb2RpZmllcnMgJj0gfkVWVF9MRUZUQUxUOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBFVlQua2V5TW9kaWZpZXJzIHw9IEVWVF9MRUZUQUxUOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEtCX3JpZ2h0QWx0OgotICAgICAgICAgICAgICAgICAgICBpZiAod2hhdCA9PSBFVlRfS0VZVVApCi0gICAgICAgICAgICAgICAgICAgICAgICBFVlQua2V5TW9kaWZpZXJzICY9IH5FVlRfUklHSFRBTFQ7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIEVWVC5rZXlNb2RpZmllcnMgfD0gRVZUX1JJR0hUQUxUOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkvKiBIYW5kbGUgc2hpZnQga2V5IG1vZGlmaWVycyAqLworCWlmICh3aGF0ICE9IEVWVF9LRVlSRVBFQVQpIHsKKwkgICAgc3dpdGNoIChzY2FuKSB7CisJCWNhc2UgS0JfY2Fwc0xvY2s6CisJCSAgICBpZiAod2hhdCA9PSBFVlRfS0VZRE9XTikKKwkJCUVWVC5rZXlNb2RpZmllcnMgXj0gRVZUX0NBUFNMT0NLOworCQkgICAgc2V0TEVEUyhFVlQua2V5TW9kaWZpZXJzKTsKKwkJICAgIGJyZWFrOworCQljYXNlIEtCX251bUxvY2s6CisJCSAgICBpZiAod2hhdCA9PSBFVlRfS0VZRE9XTikKKwkJCUVWVC5rZXlNb2RpZmllcnMgXj0gRVZUX05VTUxPQ0s7CisJCSAgICBzZXRMRURTKEVWVC5rZXlNb2RpZmllcnMpOworCQkgICAgYnJlYWs7CisJCWNhc2UgS0Jfc2Nyb2xsTG9jazoKKwkJICAgIGlmICh3aGF0ID09IEVWVF9LRVlET1dOKQorCQkJRVZULmtleU1vZGlmaWVycyBePSBFVlRfU0NST0xMTE9DSzsKKwkJICAgIHNldExFRFMoRVZULmtleU1vZGlmaWVycyk7CisJCSAgICBicmVhazsKKwkJY2FzZSBLQl9sZWZ0U2hpZnQ6CisJCSAgICBpZiAod2hhdCA9PSBFVlRfS0VZVVApCisJCQlFVlQua2V5TW9kaWZpZXJzICY9IH5FVlRfTEVGVFNISUZUOworCQkgICAgZWxzZQorCQkJRVZULmtleU1vZGlmaWVycyB8PSBFVlRfTEVGVFNISUZUOworCQkgICAgYnJlYWs7CisJCWNhc2UgS0JfcmlnaHRTaGlmdDoKKwkJICAgIGlmICh3aGF0ID09IEVWVF9LRVlVUCkKKwkJCUVWVC5rZXlNb2RpZmllcnMgJj0gfkVWVF9SSUdIVFNISUZUOworCQkgICAgZWxzZQorCQkJRVZULmtleU1vZGlmaWVycyB8PSBFVlRfUklHSFRTSElGVDsKKwkJICAgIGJyZWFrOworCQljYXNlIEtCX2xlZnRDdHJsOgorCQkgICAgaWYgKHdoYXQgPT0gRVZUX0tFWVVQKQorCQkJRVZULmtleU1vZGlmaWVycyAmPSB+RVZUX0xFRlRDVFJMOworCQkgICAgZWxzZQorCQkJRVZULmtleU1vZGlmaWVycyB8PSBFVlRfTEVGVENUUkw7CisJCSAgICBicmVhazsKKwkJY2FzZSBLQl9yaWdodEN0cmw6CisJCSAgICBpZiAod2hhdCA9PSBFVlRfS0VZVVApCisJCQlFVlQua2V5TW9kaWZpZXJzICY9IH5FVlRfUklHSFRDVFJMOworCQkgICAgZWxzZQorCQkJRVZULmtleU1vZGlmaWVycyB8PSBFVlRfUklHSFRDVFJMOworCQkgICAgYnJlYWs7CisJCWNhc2UgS0JfbGVmdEFsdDoKKwkJICAgIGlmICh3aGF0ID09IEVWVF9LRVlVUCkKKwkJCUVWVC5rZXlNb2RpZmllcnMgJj0gfkVWVF9MRUZUQUxUOworCQkgICAgZWxzZQorCQkJRVZULmtleU1vZGlmaWVycyB8PSBFVlRfTEVGVEFMVDsKKwkJICAgIGJyZWFrOworCQljYXNlIEtCX3JpZ2h0QWx0OgorCQkgICAgaWYgKHdoYXQgPT0gRVZUX0tFWVVQKQorCQkJRVZULmtleU1vZGlmaWVycyAmPSB+RVZUX1JJR0hUQUxUOworCQkgICAgZWxzZQorCQkJRVZULmtleU1vZGlmaWVycyB8PSBFVlRfUklHSFRBTFQ7CisJCSAgICBicmVhazsKICNpZmRlZiBTVVBQT1JUX0NUUkxfQUxUX0RFTAotICAgICAgICAgICAgICAgIGNhc2UgS0JfZGVsZXRlOgotICAgICAgICAgICAgICAgICAgICBpZiAoKEVWVC5rZXlNb2RpZmllcnMgJiBFVlRfQ1RSTFNUQVRFKSAmJiAoRVZULmtleU1vZGlmaWVycyAmIEVWVF9BTFRTVEFURSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWJvb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgS0JfZGVsZXRlOgorCQkgICAgaWYgKChFVlQua2V5TW9kaWZpZXJzICYgRVZUX0NUUkxTVEFURSkgJiYgKEVWVC5rZXlNb2RpZmllcnMgJiBFVlRfQUxUU1RBVEUpKQorCQkJUmVib290KCk7CisJCSAgICBicmVhazsKICNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkJfQorCSAgICB9CiAKLSAgICAgICAgLyogQWRkIHRoZSB1bnRyYW5zbGF0ZWQga2V5IGNvZGUgdG8gdGhlIGV2ZW50IHF1ZXVlLiBBbGwKLSAgICAgICAgICogdHJhbnNsYXRpb24gdG8gQVNDSUkgZnJvbSB0aGUga2V5IGNvZGVzIG9jY3VycyB3aGVuIHRoZSBrZXkKLSAgICAgICAgICogaXMgZXh0cmFjdGVkIGZyb20gdGhlIHF1ZXVlLCBzYXZpbmcgdGltZSBpbiB0aGUgbG93IGxldmVsCi0gICAgICAgICAqIGludGVycnVwdCBoYW5kbGVyLgotICAgICAgICAgKi8KLSAgICAgICAgYWRkS2V5RXZlbnQod2hhdCxzY2FuIDw8IDgpOwotICAgICAgICB9CisJLyogQWRkIHRoZSB1bnRyYW5zbGF0ZWQga2V5IGNvZGUgdG8gdGhlIGV2ZW50IHF1ZXVlLiBBbGwKKwkgKiB0cmFuc2xhdGlvbiB0byBBU0NJSSBmcm9tIHRoZSBrZXkgY29kZXMgb2NjdXJzIHdoZW4gdGhlIGtleQorCSAqIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBxdWV1ZSwgc2F2aW5nIHRpbWUgaW4gdGhlIGxvdyBsZXZlbAorCSAqIGludGVycnVwdCBoYW5kbGVyLgorCSAqLworCWFkZEtleUV2ZW50KHdoYXQsc2NhbiA8PCA4KTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NDIsOSArNDQyLDggQEAKIHsKICAgICBFVlQuYWxsb3dMRURTID0gdHJ1ZTsKICAgICBpZiAoZW5hYmxlKQotICAgICAgICBzZXRMRURTKEVWVC5rZXlNb2RpZmllcnMpOworCXNldExFRFMoRVZULmtleU1vZGlmaWVycyk7CiAgICAgZWxzZQotICAgICAgICBzZXRMRURTKDApOworCXNldExFRFMoMCk7CiAgICAgRVZULmFsbG93TEVEUyA9IGVuYWJsZTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uL210cnIuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NvbW1vbi9tdHJyLmMKaW5kZXggZDZjZWQ2ZS4uZWVkNWY0NSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uL210cnIuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9jb21tb24vbXRyci5jCkBAIC0xMDYsMjYgKzEwNiwyNiBAQAogICAgIHVsb25nICAgY29uZmlnLGR1bW15OwogCiAgICAgc3dpdGNoIChjcHVGYW1pbHkpIHsKLSAgICAgICAgY2FzZSBDUFVfQU1EOgotICAgICAgICAgICAgaWYgKGNwdVR5cGUgPCBDUFVfQU1EQXRobG9uKSB7Ci0gICAgICAgICAgICAgICAgLyogQU1EIEs2LTIgc3RlcHBpbmcgOCBhbmQgbGF0ZXIgc3VwcG9ydCB0aGUgTVRSUiByZWdpc3RlcnMuCi0gICAgICAgICAgICAgICAgICogVGhlIGVhcmxpZXIgSzYtMiBzdGVwcGluZ3MgKDMwME1oeiBtb2RlbHMpIGRvIG5vdAotICAgICAgICAgICAgICAgICAqIHN1cHBvcnQgTVRSUidzLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmICgoY3B1VHlwZSA8IENQVV9BTURLNl8yKSB8fCAoY3B1VHlwZSA9PSBDUFVfQU1ESzZfMiAmJiBjcHVTdGVwcGluZyA8IDgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggZm9yIEFNRCBBdGhsb24gd2hpY2ggdXNlcyBQNiBzdHlsZSBNVFJSJ3MgKi8KLSAgICAgICAgY2FzZSBDUFVfSW50ZWw6Ci0gICAgICAgICAgICBfTVRSUl9yZWFkTVNSKElOVEVMX2NhcF9NU1IsJmNvbmZpZywmZHVtbXkpOwotICAgICAgICAgICAgcmV0dXJuIChjb25maWcgJiAoMSA8PCAxMCkpOwotICAgICAgICBjYXNlIENQVV9DeXJpeDoKLSAgICAgICAgICAgIC8qIEN5cml4IDZ4ODYgYW5kIGxhdGVyIHN1cHBvcnQgdGhlIE1UUlIgcmVnaXN0ZXJzICovCi0gICAgICAgICAgICBpZiAoY3B1VHlwZSA8IENQVV9DeXJpeDZ4ODYpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQorCWNhc2UgQ1BVX0FNRDoKKwkgICAgaWYgKGNwdVR5cGUgPCBDUFVfQU1EQXRobG9uKSB7CisJCS8qIEFNRCBLNi0yIHN0ZXBwaW5nIDggYW5kIGxhdGVyIHN1cHBvcnQgdGhlIE1UUlIgcmVnaXN0ZXJzLgorCQkgKiBUaGUgZWFybGllciBLNi0yIHN0ZXBwaW5ncyAoMzAwTWh6IG1vZGVscykgZG8gbm90CisJCSAqIHN1cHBvcnQgTVRSUidzLgorCQkgKi8KKwkJaWYgKChjcHVUeXBlIDwgQ1BVX0FNREs2XzIpIHx8IChjcHVUeXBlID09IENQVV9BTURLNl8yICYmIGNwdVN0ZXBwaW5nIDwgOCkpCisJCSAgICByZXR1cm4gMDsKKwkJcmV0dXJuIDE7CisJCX0KKwkgICAgLyogRmFsbCB0aHJvdWdoIGZvciBBTUQgQXRobG9uIHdoaWNoIHVzZXMgUDYgc3R5bGUgTVRSUidzICovCisJY2FzZSBDUFVfSW50ZWw6CisJICAgIF9NVFJSX3JlYWRNU1IoSU5URUxfY2FwX01TUiwmY29uZmlnLCZkdW1teSk7CisJICAgIHJldHVybiAoY29uZmlnICYgKDEgPDwgMTApKTsKKwljYXNlIENQVV9DeXJpeDoKKwkgICAgLyogQ3lyaXggNng4NiBhbmQgbGF0ZXIgc3VwcG9ydCB0aGUgTVRSUiByZWdpc3RlcnMgKi8KKwkgICAgaWYgKGNwdVR5cGUgPCBDUFVfQ3lyaXg2eDg2KQorCQlyZXR1cm4gMDsKKwkgICAgcmV0dXJuIDE7CisJfQogICAgIHJldHVybiAwOwogfQogCkBAIC0xNDksMTAgKzE0OSwxMCBAQAogICAgIHVsb25nICAgbGJhc2UsbHNpemU7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtTVRSUjsgaSsrKSB7Ci0gICAgICAgIGdldE1UUlIoaSwmbGJhc2UsJmxzaXplLCZsdHlwZSk7Ci0gICAgICAgIGlmIChsc2l6ZSA8IDEpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQorCWdldE1UUlIoaSwmbGJhc2UsJmxzaXplLCZsdHlwZSk7CisJaWYgKGxzaXplIDwgMSkKKwkgICAgcmV0dXJuIGk7CisJfQogICAgICh2b2lkKWJhc2U7CiAgICAgKHZvaWQpc2l6ZTsKICAgICByZXR1cm4gLTE7CkBAIC0xNzgsMTAgKzE3OCwxMCBAQAogICAgIHVsb25nICAgbGJhc2UsbHNpemU7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtTVRSUjsgaSsrKSB7Ci0gICAgICAgIGdldE1UUlIoaSwmbGJhc2UsJmxzaXplLCZsdHlwZSk7Ci0gICAgICAgIGlmIChsc2l6ZSA8IDEpCi0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQorCWdldE1UUlIoaSwmbGJhc2UsJmxzaXplLCZsdHlwZSk7CisJaWYgKGxzaXplIDwgMSkKKwkgICAgcmV0dXJuIGk7CisJfQogICAgICh2b2lkKWJhc2U7CiAgICAgKHZvaWQpc2l6ZTsKICAgICByZXR1cm4gLTE7CkBAIC0yMDcsMjMgKzIwNywyMyBAQAogICAgIHVsb25nICAgbGJhc2UsIGxzaXplOwogCiAgICAgaWYgKHNpemUgPiAweDIwMDAwMDBVTCkgewotICAgICAgICAvKiBJZiB3ZSBhcmUgdG8gc2V0IHVwIGEgcmVnaW9uID4zMk0gdGhlbiBsb29rIGF0IEFSUjcgaW1tZWRpYXRlbHkgKi8KLSAgICAgICAgZ2V0TVRSUig3LCZsYmFzZSwmbHNpemUsJmx0eXBlKTsKLSAgICAgICAgaWYgKGxzaXplIDwgMSkKLSAgICAgICAgICAgIHJldHVybiA3OwotICAgICAgICB9CisJLyogSWYgd2UgYXJlIHRvIHNldCB1cCBhIHJlZ2lvbiA+MzJNIHRoZW4gbG9vayBhdCBBUlI3IGltbWVkaWF0ZWx5ICovCisJZ2V0TVRSUig3LCZsYmFzZSwmbHNpemUsJmx0eXBlKTsKKwlpZiAobHNpemUgPCAxKQorCSAgICByZXR1cm4gNzsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIENoZWNrIEFSUjAtNiByZWdpc3RlcnMgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotICAgICAgICAgICAgZ2V0TVRSUihpLCZsYmFzZSwmbHNpemUsJmx0eXBlKTsKLSAgICAgICAgICAgIGlmIChsc2l6ZSA8IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIC8qIFRyeSBBUlI3IGJ1dCBpdHMgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDI1NksgKi8KLSAgICAgICAgZ2V0TVRSUig3LCZsYmFzZSwmbHNpemUsJmx0eXBlKTsKLSAgICAgICAgaWYgKChsc2l6ZSA8IDEpICYmIChzaXplID49IDB4NDAwMDApKQotICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgIH0KKwkvKiBDaGVjayBBUlIwLTYgcmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCSAgICBnZXRNVFJSKGksJmxiYXNlLCZsc2l6ZSwmbHR5cGUpOworCSAgICBpZiAobHNpemUgPCAxKQorCQlyZXR1cm4gaTsKKwkgICAgfQorCS8qIFRyeSBBUlI3IGJ1dCBpdHMgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDI1NksgKi8KKwlnZXRNVFJSKDcsJmxiYXNlLCZsc2l6ZSwmbHR5cGUpOworCWlmICgobHNpemUgPCAxKSAmJiAoc2l6ZSA+PSAweDQwMDAwKSkKKwkgICAgcmV0dXJuIGk7CisJfQogICAgICh2b2lkKWJhc2U7CiAgICAgcmV0dXJuIC0xOwogfQpAQCAtMjQwLDIwICsyNDAsMjAgQEAKIHsKICAgICBjLT5mbGFncyA9IF9NVFJSX2Rpc2FibGVJbnQoKTsKICAgICBpZiAoY3B1RmFtaWx5ICE9IENQVV9BTUQgfHwgKGNwdUZhbWlseSA9PSBDUFVfQU1EICYmIGNwdVR5cGUgPj0gQ1BVX0FNREF0aGxvbikpIHsKLSAgICAgICAgc3dpdGNoIChjcHVGYW1pbHkpIHsKLSAgICAgICAgICAgIGNhc2UgQ1BVX0ludGVsOgotICAgICAgICAgICAgY2FzZSBDUFVfQU1EOgotICAgICAgICAgICAgICAgIC8qIERpc2FibGUgTVRSUnMsIGFuZCBzZXQgdGhlIGRlZmF1bHQgdHlwZSB0byB1bmNhY2hlZCAqLwotICAgICAgICAgICAgICAgIGMtPmNyNFZhbCA9IF9NVFJSX3NhdmVDUjQoKTsKLSAgICAgICAgICAgICAgICBfTVRSUl9yZWFkTVNSKElOVEVMX2RlZlR5cGVfTVNSLCZjLT5kZWZUeXBlTG8sJmMtPmRlZlR5cGVIaSk7Ci0gICAgICAgICAgICAgICAgX01UUlJfd3JpdGVNU1IoSU5URUxfZGVmVHlwZV9NU1IsYy0+ZGVmVHlwZUxvICYgMHhGMzAwVUwsYy0+ZGVmVHlwZUhpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1BVX0N5cml4OgotICAgICAgICAgICAgICAgIGMtPmNjcjMgPSBfTVRSUl9nZXRDeDg2KENYODZfQ0NSMyk7Ci0gICAgICAgICAgICAgICAgX01UUlJfc2V0Q3g4NihDWDg2X0NDUjMsICh1Y2hhcikoKGMtPmNjcjMgJiAweDBGKSB8IDB4MTApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXN3aXRjaCAoY3B1RmFtaWx5KSB7CisJICAgIGNhc2UgQ1BVX0ludGVsOgorCSAgICBjYXNlIENQVV9BTUQ6CisJCS8qIERpc2FibGUgTVRSUnMsIGFuZCBzZXQgdGhlIGRlZmF1bHQgdHlwZSB0byB1bmNhY2hlZCAqLworCQljLT5jcjRWYWwgPSBfTVRSUl9zYXZlQ1I0KCk7CisJCV9NVFJSX3JlYWRNU1IoSU5URUxfZGVmVHlwZV9NU1IsJmMtPmRlZlR5cGVMbywmYy0+ZGVmVHlwZUhpKTsKKwkJX01UUlJfd3JpdGVNU1IoSU5URUxfZGVmVHlwZV9NU1IsYy0+ZGVmVHlwZUxvICYgMHhGMzAwVUwsYy0+ZGVmVHlwZUhpKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgQ1BVX0N5cml4OgorCQljLT5jY3IzID0gX01UUlJfZ2V0Q3g4NihDWDg2X0NDUjMpOworCQlfTVRSUl9zZXRDeDg2KENYODZfQ0NSMywgKHVjaGFyKSgoYy0+Y2NyMyAmIDB4MEYpIHwgMHgxMCkpOworCQlicmVhazsKKwkgICAgfQorCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI2NywxOCArMjY3LDE4IEBACiAgICAgTVRSUkNvbnRleHQgKmMpCiB7CiAgICAgaWYgKGNwdUZhbWlseSAhPSBDUFVfQU1EIHx8IChjcHVGYW1pbHkgPT0gQ1BVX0FNRCAmJiBjcHVUeXBlID49IENQVV9BTURBdGhsb24pKSB7Ci0gICAgICAgIFBNX2ZsdXNoVExCKCk7Ci0gICAgICAgIHN3aXRjaCAoY3B1RmFtaWx5KSB7Ci0gICAgICAgICAgICBjYXNlIENQVV9JbnRlbDoKLSAgICAgICAgICAgIGNhc2UgQ1BVX0FNRDoKLSAgICAgICAgICAgICAgICBfTVRSUl93cml0ZU1TUihJTlRFTF9kZWZUeXBlX01TUixjLT5kZWZUeXBlTG8sYy0+ZGVmVHlwZUhpKTsKLSAgICAgICAgICAgICAgICBfTVRSUl9yZXN0b3JlQ1I0KGMtPmNyNFZhbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENQVV9DeXJpeDoKLSAgICAgICAgICAgICAgICBfTVRSUl9zZXRDeDg2KENYODZfQ0NSMywodWNoYXIpYy0+Y2NyMyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlQTV9mbHVzaFRMQigpOworCXN3aXRjaCAoY3B1RmFtaWx5KSB7CisJICAgIGNhc2UgQ1BVX0ludGVsOgorCSAgICBjYXNlIENQVV9BTUQ6CisJCV9NVFJSX3dyaXRlTVNSKElOVEVMX2RlZlR5cGVfTVNSLGMtPmRlZlR5cGVMbyxjLT5kZWZUeXBlSGkpOworCQlfTVRSUl9yZXN0b3JlQ1I0KGMtPmNyNFZhbCk7CisJCWJyZWFrOworCSAgICBjYXNlIENQVV9DeXJpeDoKKwkJX01UUlJfc2V0Q3g4NihDWDg2X0NDUjMsKHVjaGFyKWMtPmNjcjMpOworCQlicmVhazsKKwkgICAgfQorCX0KIAogICAgIC8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzIChpZiBlbmFibGVkIHByZXZpb3VzbHkpICovCiAgICAgX01UUlJfcmVzdG9yZUludChjLT5mbGFncyk7CkBAIC0zMDQsMTIgKzMwNCwxMiBAQAogCiAgICAgX01UUlJfcmVhZE1TUihJTlRFTF9waHlzTWFza19NU1IocmVnKSwmbWFza0xvLCZoaSk7CiAgICAgaWYgKChtYXNrTG8gJiAweDgwMCkgPT0gMCkgewotICAgICAgICAvKiBNVFJSIGlzIGRpc2FibGVkLCBzbyBpdCBpcyBmcmVlICovCi0gICAgICAgICpiYXNlID0gMDsKLSAgICAgICAgKnNpemUgPSAwOwotICAgICAgICAqdHlwZSA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCS8qIE1UUlIgaXMgZGlzYWJsZWQsIHNvIGl0IGlzIGZyZWUgKi8KKwkqYmFzZSA9IDA7CisJKnNpemUgPSAwOworCSp0eXBlID0gMDsKKwlyZXR1cm47CisJfQogICAgIF9NVFJSX3JlYWRNU1IoSU5URUxfcGh5c0Jhc2VfTVNSKHJlZyksJmJhc2VMbywmaGkpOwogICAgIG1hc2tMbyA9IChtYXNrTG8gJiAweEZGRkZGMDAwVUwpOwogICAgICpzaXplID0gfihtYXNrTG8gLSAxKTsKQEAgLTMzOCwxNSArMzM4LDE1IEBACiAKICAgICBNVFJSX2JlZ2luVXBkYXRlKCZjKTsKICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIC8qIFRoZSBpbnZhbGlkIGJpdCBpcyBrZXB0IGluIHRoZSBtYXNrLCBzbyB3ZSBzaW1wbHkgY2xlYXIgdGhlCi0gICAgICAgICAqIHJlbGV2YW50IG1hc2sgcmVnaXN0ZXIgdG8gZGlzYWJsZSBhIHJhbmdlLgotICAgICAgICAgKi8KLSAgICAgICAgX01UUlJfd3JpdGVNU1IoSU5URUxfcGh5c01hc2tfTVNSKHJlZyksMCwwKTsKLSAgICAgICAgfQorCS8qIFRoZSBpbnZhbGlkIGJpdCBpcyBrZXB0IGluIHRoZSBtYXNrLCBzbyB3ZSBzaW1wbHkgY2xlYXIgdGhlCisJICogcmVsZXZhbnQgbWFzayByZWdpc3RlciB0byBkaXNhYmxlIGEgcmFuZ2UuCisJICovCisJX01UUlJfd3JpdGVNU1IoSU5URUxfcGh5c01hc2tfTVNSKHJlZyksMCwwKTsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIF9NVFJSX3dyaXRlTVNSKElOVEVMX3BoeXNCYXNlX01TUihyZWcpLGJhc2UgfCB0eXBlLDApOwotICAgICAgICBfTVRSUl93cml0ZU1TUihJTlRFTF9waHlzTWFza19NU1IocmVnKSx+KHNpemUgLSAxKSB8IDB4ODAwLDApOwotICAgICAgICB9CisJX01UUlJfd3JpdGVNU1IoSU5URUxfcGh5c0Jhc2VfTVNSKHJlZyksYmFzZSB8IHR5cGUsMCk7CisJX01UUlJfd3JpdGVNU1IoSU5URUxfcGh5c01hc2tfTVNSKHJlZyksfihzaXplIC0gMSkgfCAweDgwMCwwKTsKKwl9CiAgICAgTVRSUl9lbmRVcGRhdGUoJmMpOwogfQogCkBAIC0zODYsMTkgKzM4NiwxOSBAQAogICAgIC8qICBVcHBlciBkd29yZCBpcyByZWdpb24gMSwgbG93ZXIgaXMgcmVnaW9uIDAgICovCiAgICAgX01UUlJfcmVhZE1TUigweEMwMDAwMDg1LCAmbG93LCAmaGlnaCk7CiAgICAgaWYgKHJlZyA9PSAxKQotICAgICAgICBsb3cgPSBoaWdoOworCWxvdyA9IGhpZ2g7CiAKICAgICAvKiBGaW5kIHRoZSBiYXNlIGFuZCB0eXBlIGZvciB0aGUgcmVnaW9uICovCiAgICAgKmJhc2UgPSBsb3cgJiAweEZGRkUwMDAwOwogICAgICp0eXBlID0gMDsKICAgICBpZiAobG93ICYgMSkKLSAgICAgICAgKnR5cGUgPSBQTV9NVFJSX1VOQ0FDSEFCTEU7CisJKnR5cGUgPSBQTV9NVFJSX1VOQ0FDSEFCTEU7CiAgICAgaWYgKGxvdyAmIDIpCi0gICAgICAgICp0eXBlID0gUE1fTVRSUl9XUkNPTUI7CisJKnR5cGUgPSBQTV9NVFJSX1dSQ09NQjsKICAgICBpZiAoKGxvdyAmIDMpID09IDApIHsKLSAgICAgICAgKnNpemUgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwkqc2l6ZSA9IDA7CisJcmV0dXJuOworCX0KIAogICAgIC8qIFRoaXMgbmVlZHMgYSBsaXR0bGUgZXhwbGFpbmluZy4gVGhlIHNpemUgaXMgc3RvcmVkIGFzIGFuCiAgICAgICogaW52ZXJ0ZWQgbWFzayBvZiBiaXRzIG9mIDEyOEsgZ3JhbnVsYXJpdHkgMTUgYml0cyBsb25nIG9mZnNldApAQCAtNDQxLDI2ICs0NDEsMjYgQEAKICAgICBNVFJSX2JlZ2luVXBkYXRlKCZjKTsKICAgICBfTVRSUl9yZWFkTVNSKDB4QzAwMDAwODUsICZsb3csICZoaWdoKTsKICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIC8qIENsZWFyIHJlZ2lzdGVyIHRvIGRpc2FibGUgKi8KLSAgICAgICAgaWYgKHJlZykKLSAgICAgICAgICAgIGhpZ2ggPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb3cgPSAwOwotICAgICAgICB9CisJLyogQ2xlYXIgcmVnaXN0ZXIgdG8gZGlzYWJsZSAqLworCWlmIChyZWcpCisJICAgIGhpZ2ggPSAwOworCWVsc2UKKwkgICAgbG93ID0gMDsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIFNldCB0aGUgcmVnaXN0ZXIgdG8gdGhlIGJhc2UgKGFscmVhZHkgc2hpZnRlZCBmb3IgdXMpLCB0aGUKLSAgICAgICAgICogdHlwZSAob2ZmIGJ5IG9uZSkgYW5kIGFuIGludmVydGVkIGJpdG1hc2sgb2YgdGhlIHNpemUKLSAgICAgICAgICogVGhlIHNpemUgaXMgdGhlIG9ubHkgb2RkIGJpdC4gV2UgYXJlIGZlZCBzYXkgNTEySwotICAgICAgICAgKiBXZSBpbnZlcnQgdGhpcyBhbmQgd2UgZ2V0IDExMSAxMTExIDExMTEgMTAxMSBidXQKLSAgICAgICAgICogaWYgeW91IHN1YnRyYWN0IG9uZSBhbmQgaW52ZXJ0IHlvdSBnZXQgdGhlIGRlc2lyZWQKLSAgICAgICAgICogMTExIDExMTEgMTExMSAxMTAwIG1hc2sKLSAgICAgICAgICovCi0gICAgICAgIG5ld1ZhbCA9ICgoKH4oc2l6ZS0xKSkgPj4gMTUpICYgMHgwMDAxRkZGQykgfCBiYXNlIHwgKHR5cGUrMSk7Ci0gICAgICAgIGlmIChyZWcpCi0gICAgICAgICAgICBoaWdoID0gbmV3VmFsOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb3cgPSBuZXdWYWw7Ci0gICAgICAgIH0KKwkvKiBTZXQgdGhlIHJlZ2lzdGVyIHRvIHRoZSBiYXNlIChhbHJlYWR5IHNoaWZ0ZWQgZm9yIHVzKSwgdGhlCisJICogdHlwZSAob2ZmIGJ5IG9uZSkgYW5kIGFuIGludmVydGVkIGJpdG1hc2sgb2YgdGhlIHNpemUKKwkgKiBUaGUgc2l6ZSBpcyB0aGUgb25seSBvZGQgYml0LiBXZSBhcmUgZmVkIHNheSA1MTJLCisJICogV2UgaW52ZXJ0IHRoaXMgYW5kIHdlIGdldCAxMTEgMTExMSAxMTExIDEwMTEgYnV0CisJICogaWYgeW91IHN1YnRyYWN0IG9uZSBhbmQgaW52ZXJ0IHlvdSBnZXQgdGhlIGRlc2lyZWQKKwkgKiAxMTEgMTExMSAxMTExIDExMDAgbWFzaworCSAqLworCW5ld1ZhbCA9ICgoKH4oc2l6ZS0xKSkgPj4gMTUpICYgMHgwMDAxRkZGQykgfCBiYXNlIHwgKHR5cGUrMSk7CisJaWYgKHJlZykKKwkgICAgaGlnaCA9IG5ld1ZhbDsKKwllbHNlCisJICAgIGxvdyA9IG5ld1ZhbDsKKwl9CiAKICAgICAvKiBUaGUgd3JpdGViYWNrIHJ1bGUgaXMgcXVpdGUgc3BlY2lmaWMuIFNlZSB0aGUgbWFudWFsLiBJdHMKICAgICAgKiBkaXNhYmxlIGxvY2FsIGludGVycnVwdHMsIHdyaXRlIGJhY2sgdGhlIGNhY2hlLCBzZXQgdGhlIE1UUlIKQEAgLTUwNywyOSArNTA3LDI5IEBACiAgICAgICogTm90ZTogc2hpZnQ9PTB4RiBtZWFucyA0RywgdGhpcyBpcyB1bnN1cHBvcnRlZC4KICAgICAgKi8KICAgICBpZiAoc2hpZnQpCi0gICAgICAgICpzaXplID0gKHJlZyA8IDcgPyAweDgwMFVMIDogMHgyMDAwMFVMKSA8PCBzaGlmdDsKKwkqc2l6ZSA9IChyZWcgPCA3ID8gMHg4MDBVTCA6IDB4MjAwMDBVTCkgPDwgc2hpZnQ7CiAgICAgZWxzZQotICAgICAgICAqc2l6ZSA9IDA7CisJKnNpemUgPSAwOwogCiAgICAgLyogQml0IDAgaXMgQ2FjaGUgRW5hYmxlIG9uIEFSUjcsIENhY2hlIERpc2FibGUgb24gQVJSMC1BUlI2ICovCiAgICAgaWYgKHJlZyA8IDcpIHsKLSAgICAgICAgc3dpdGNoIChyY3IpIHsKLSAgICAgICAgICAgIGNhc2UgIDE6ICp0eXBlID0gUE1fTVRSUl9VTkNBQ0hBQkxFOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDg6ICp0eXBlID0gUE1fTVRSUl9XUkJBQ0s7ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDk6ICp0eXBlID0gUE1fTVRSUl9XUkNPTUI7ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjQ6Ci0gICAgICAgICAgICBkZWZhdWx0OiAqdHlwZSA9IFBNX01UUlJfV1JUSFJPVUdIOyAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlzd2l0Y2ggKHJjcikgeworCSAgICBjYXNlICAxOiAqdHlwZSA9IFBNX01UUlJfVU5DQUNIQUJMRTsgYnJlYWs7CisJICAgIGNhc2UgIDg6ICp0eXBlID0gUE1fTVRSUl9XUkJBQ0s7ICAgICBicmVhazsKKwkgICAgY2FzZSAgOTogKnR5cGUgPSBQTV9NVFJSX1dSQ09NQjsgICAgIGJyZWFrOworCSAgICBjYXNlIDI0OgorCSAgICBkZWZhdWx0OiAqdHlwZSA9IFBNX01UUlJfV1JUSFJPVUdIOyAgYnJlYWs7CisJICAgIH0KKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocmNyKSB7Ci0gICAgICAgICAgICBjYXNlICAwOiAqdHlwZSA9IFBNX01UUlJfVU5DQUNIQUJMRTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICA4OiAqdHlwZSA9IFBNX01UUlJfV1JDT01COyAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICA5OiAqdHlwZSA9IFBNX01UUlJfV1JCQUNLOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDI1OgotICAgICAgICAgICAgZGVmYXVsdDogKnR5cGUgPSBQTV9NVFJSX1dSVEhST1VHSDsgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJc3dpdGNoIChyY3IpIHsKKwkgICAgY2FzZSAgMDogKnR5cGUgPSBQTV9NVFJSX1VOQ0FDSEFCTEU7IGJyZWFrOworCSAgICBjYXNlICA4OiAqdHlwZSA9IFBNX01UUlJfV1JDT01COyAgICAgYnJlYWs7CisJICAgIGNhc2UgIDk6ICp0eXBlID0gUE1fTVRSUl9XUkJBQ0s7ICAgICBicmVhazsKKwkgICAgY2FzZSAyNToKKwkgICAgZGVmYXVsdDogKnR5cGUgPSBQTV9NVFJSX1dSVEhST1VHSDsgIGJyZWFrOworCSAgICB9CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTU3LDIzICs1NTcsMjMgQEAKICAgICBzaXplID4+PSAocmVnIDwgNyA/IDEyIDogMTgpOwogICAgIHNpemUgJj0gMHg3RkZGOyAvKiBNYWtlIHN1cmUgYXJyX3NpemUgPD0gMTQgKi8KICAgICBmb3IgKGFycl9zaXplID0gMDsgc2l6ZTsgYXJyX3NpemUrKywgc2l6ZSA+Pj0gMSkKLSAgICAgICAgOworCTsKICAgICBpZiAocmVnIDwgNykgewotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgUE1fTVRSUl9VTkNBQ0hBQkxFOiAgICBhcnJfdHlwZSA9ICAxOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUE1fTVRSUl9XUkNPTUI6ICAgICAgICBhcnJfdHlwZSA9ICA5OyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUE1fTVRSUl9XUlRIUk9VR0g6ICAgICBhcnJfdHlwZSA9IDI0OyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICBhcnJfdHlwZSA9ICA4OyBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXN3aXRjaCAodHlwZSkgeworCSAgICBjYXNlIFBNX01UUlJfVU5DQUNIQUJMRTogICAgYXJyX3R5cGUgPSAgMTsgYnJlYWs7CisJICAgIGNhc2UgUE1fTVRSUl9XUkNPTUI6ICAgICAgICBhcnJfdHlwZSA9ICA5OyBicmVhazsKKwkgICAgY2FzZSBQTV9NVFJSX1dSVEhST1VHSDogICAgIGFycl90eXBlID0gMjQ7IGJyZWFrOworCSAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgYXJyX3R5cGUgPSAgODsgYnJlYWs7CisJICAgIH0KKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICAgICAgY2FzZSBQTV9NVFJSX1VOQ0FDSEFCTEU6ICAgIGFycl90eXBlID0gIDA7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQTV9NVFJSX1dSQ09NQjogICAgICAgIGFycl90eXBlID0gIDg7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQTV9NVFJSX1dSVEhST1VHSDogICAgIGFycl90eXBlID0gMjU7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgIGFycl90eXBlID0gIDk7IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJc3dpdGNoICh0eXBlKSB7CisJICAgIGNhc2UgUE1fTVRSUl9VTkNBQ0hBQkxFOiAgICBhcnJfdHlwZSA9ICAwOyBicmVhazsKKwkgICAgY2FzZSBQTV9NVFJSX1dSQ09NQjogICAgICAgIGFycl90eXBlID0gIDg7IGJyZWFrOworCSAgICBjYXNlIFBNX01UUlJfV1JUSFJPVUdIOiAgICAgYXJyX3R5cGUgPSAyNTsgYnJlYWs7CisJICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICBhcnJfdHlwZSA9ICA5OyBicmVhazsKKwkgICAgfQorCX0KICAgICBNVFJSX2JlZ2luVXBkYXRlKCZjKTsKICAgICBfTVRSUl9zZXRDeDg2KCh1Y2hhcilhcnIsICAgICAoKHVjaGFyKikmYmFzZSlbM10pOwogICAgIF9NVFJSX3NldEN4ODYoKHVjaGFyKShhcnIrMSksICgodWNoYXIqKSZiYXNlKVsyXSk7CkBAIC02MTUsMjggKzYxNSwyOCBAQAogICAgIGNjcls1XSA9IF9NVFJSX2dldEN4ODYoQ1g4Nl9DQ1I1KTsKICAgICBjY3JbNl0gPSBfTVRSUl9nZXRDeDg2KENYODZfQ0NSNik7CiAgICAgaWYgKGNjclszXSAmIDEpCi0gICAgICAgIGNjcmNbM10gPSAxOworCWNjcmNbM10gPSAxOwogICAgIGVsc2UgewotICAgICAgICAvKiBEaXNhYmxlIFNNTSBtb2RlIChiaXQgMSksIGFjY2VzcyB0byBTTU0gbWVtb3J5IChiaXQgMikgYW5kCi0gICAgICAgICAqIGFjY2VzcyB0byBTTU0gbWVtb3J5IHRocm91Z2ggQVJSMyAoYml0IDcpLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGNjcls2XSAmIDB4MDIpIHsKLSAgICAgICAgICAgIGNjcls2XSAmPSAweEZEOwotICAgICAgICAgICAgY2NyY1s2XSA9IDE7ICAgICAgICAvKiBEaXNhYmxlIHdyaXRlIHByb3RlY3Rpb24gb2YgQVJSMy4gKi8KLSAgICAgICAgICAgIF9NVFJSX3NldEN4ODYoQ1g4Nl9DQ1I2LGNjcls2XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBEaXNhYmxlIFNNTSBtb2RlIChiaXQgMSksIGFjY2VzcyB0byBTTU0gbWVtb3J5IChiaXQgMikgYW5kCisJICogYWNjZXNzIHRvIFNNTSBtZW1vcnkgdGhyb3VnaCBBUlIzIChiaXQgNykuCisJICovCisJaWYgKGNjcls2XSAmIDB4MDIpIHsKKwkgICAgY2NyWzZdICY9IDB4RkQ7CisJICAgIGNjcmNbNl0gPSAxOyAgICAgICAgLyogRGlzYWJsZSB3cml0ZSBwcm90ZWN0aW9uIG9mIEFSUjMuICovCisJICAgIF9NVFJSX3NldEN4ODYoQ1g4Nl9DQ1I2LGNjcls2XSk7CisJICAgIH0KKwl9CiAKICAgICAvKiBJZiB3ZSBjaGFuZ2VkIENDUjEgaW4gbWVtb3J5LCBjaGFuZ2UgaXQgaW4gdGhlIHByb2Nlc3NvciwgdG9vLiAqLwogICAgIGlmIChjY3JjWzFdKQotICAgICAgICBfTVRSUl9zZXRDeDg2KENYODZfQ0NSMSxjY3JbMV0pOworCV9NVFJSX3NldEN4ODYoQ1g4Nl9DQ1IxLGNjclsxXSk7CiAKICAgICAvKiBFbmFibGUgQVJSIHVzYWdlIGJ5IHRoZSBwcm9jZXNzb3IgKi8KICAgICBpZiAoIShjY3JbNV0gJiAweDIwKSkgewotICAgICAgICBjY3JbNV0gfD0gMHgyMDsKLSAgICAgICAgY2NyY1s1XSA9IDE7Ci0gICAgICAgIF9NVFJSX3NldEN4ODYoQ1g4Nl9DQ1I1LGNjcls1XSk7Ci0gICAgICAgIH0KKwljY3JbNV0gfD0gMHgyMDsKKwljY3JjWzVdID0gMTsKKwlfTVRSUl9zZXRDeDg2KENYODZfQ0NSNSxjY3JbNV0pOworCX0KIAogICAgIC8qIFdlIGFyZSBmaW5pc2hlZCB1cGRhdGluZyAqLwogICAgIE1UUlJfZW5kVXBkYXRlKCZjKTsKQEAgLTY1NCw3MiArNjU0LDcyIEBACiAKICAgICAvKiBDaGVjayB0aGF0IHdlIGhhdmUgYSBjb21wYXRpYmxlIENQVSAqLwogICAgIGlmIChudW1NVFJSID09IC0xKSB7Ci0gICAgICAgIG51bU1UUlIgPSAwOwotICAgICAgICBpZiAoIV9NVFJSX2lzUmluZzAoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY3B1ID0gQ1BVX2dldFByb2Nlc3NvclR5cGUoKTsKLSAgICAgICAgY3B1RmFtaWx5ID0gY3B1ICYgQ1BVX2ZhbWlseU1hc2s7Ci0gICAgICAgIGNwdVR5cGUgPSBjcHUgJiBDUFVfbWFzazsKLSAgICAgICAgY3B1U3RlcHBpbmcgPSAoY3B1ICYgQ1BVX3N0ZXBwaW5nTWFzaykgPj4gQ1BVX3N0ZXBwaW5nU2hpZnQ7Ci0gICAgICAgIHN3aXRjaCAoY3B1RmFtaWx5KSB7Ci0gICAgICAgICAgICBjYXNlIENQVV9JbnRlbDoKLSAgICAgICAgICAgICAgICAvKiBJbnRlbCBQZW50aXVtIFBybyBhbmQgbGF0ZXIgc3VwcG9ydCB0aGUgTVRSUiByZWdpc3RlcnMgKi8KLSAgICAgICAgICAgICAgICBpZiAoY3B1VHlwZSA8IENQVV9QZW50aXVtUHJvKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgX01UUlJfcmVhZE1TUihJTlRFTF9jYXBfTVNSLCZlYXgsJmVkeCk7Ci0gICAgICAgICAgICAgICAgbnVtTVRSUiA9IGVheCAmIDB4RkY7Ci0gICAgICAgICAgICAgICAgZ2V0TVRSUiA9IElOVEVMX2dldE1UUlI7Ci0gICAgICAgICAgICAgICAgc2V0TVRSUiA9IElOVEVMX3NldE1UUlI7Ci0gICAgICAgICAgICAgICAgZ2V0RnJlZVJlZ2lvbiA9IEdFTkVSSUNfZ2V0RnJlZVJlZ2lvbjsKLSAgICAgICAgICAgICAgICBJTlRFTF9kaXNhYmxlQmFua2VkV3JpdGVDb21iaW5lKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENQVV9BTUQ6Ci0gICAgICAgICAgICAgICAgLyogQU1EIEs2LTIgYW5kIGxhdGVyIHN1cHBvcnQgdGhlIE1UUlIgcmVnaXN0ZXJzICovCi0gICAgICAgICAgICAgICAgaWYgKChjcHVUeXBlIDwgQ1BVX0FNREs2XzIpIHx8IChjcHVUeXBlID09IENQVV9BTURLNl8yICYmIGNwdVN0ZXBwaW5nIDwgOCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoY3B1VHlwZSA8IENQVV9BTURBdGhsb24pIHsKLSAgICAgICAgICAgICAgICAgICAgbnVtTVRSUiA9IDI7ICAgICAgICAvKiBBTUQgQ1BVJ3MgaGF2ZSAyIE1UUlIncyAqLwotICAgICAgICAgICAgICAgICAgICBnZXRNVFJSID0gQU1EX2dldE1UUlI7Ci0gICAgICAgICAgICAgICAgICAgIHNldE1UUlIgPSBBTURfc2V0TVRSUjsKLSAgICAgICAgICAgICAgICAgICAgZ2V0RnJlZVJlZ2lvbiA9IEFNREs2X2dldEZyZWVSZWdpb247CisJbnVtTVRSUiA9IDA7CisJaWYgKCFfTVRSUl9pc1JpbmcwKCkpCisJICAgIHJldHVybjsKKwljcHUgPSBDUFVfZ2V0UHJvY2Vzc29yVHlwZSgpOworCWNwdUZhbWlseSA9IGNwdSAmIENQVV9mYW1pbHlNYXNrOworCWNwdVR5cGUgPSBjcHUgJiBDUFVfbWFzazsKKwljcHVTdGVwcGluZyA9IChjcHUgJiBDUFVfc3RlcHBpbmdNYXNrKSA+PiBDUFVfc3RlcHBpbmdTaGlmdDsKKwlzd2l0Y2ggKGNwdUZhbWlseSkgeworCSAgICBjYXNlIENQVV9JbnRlbDoKKwkJLyogSW50ZWwgUGVudGl1bSBQcm8gYW5kIGxhdGVyIHN1cHBvcnQgdGhlIE1UUlIgcmVnaXN0ZXJzICovCisJCWlmIChjcHVUeXBlIDwgQ1BVX1BlbnRpdW1Qcm8pCisJCSAgICByZXR1cm47CisJCV9NVFJSX3JlYWRNU1IoSU5URUxfY2FwX01TUiwmZWF4LCZlZHgpOworCQludW1NVFJSID0gZWF4ICYgMHhGRjsKKwkJZ2V0TVRSUiA9IElOVEVMX2dldE1UUlI7CisJCXNldE1UUlIgPSBJTlRFTF9zZXRNVFJSOworCQlnZXRGcmVlUmVnaW9uID0gR0VORVJJQ19nZXRGcmVlUmVnaW9uOworCQlJTlRFTF9kaXNhYmxlQmFua2VkV3JpdGVDb21iaW5lKCk7CisJCWJyZWFrOworCSAgICBjYXNlIENQVV9BTUQ6CisJCS8qIEFNRCBLNi0yIGFuZCBsYXRlciBzdXBwb3J0IHRoZSBNVFJSIHJlZ2lzdGVycyAqLworCQlpZiAoKGNwdVR5cGUgPCBDUFVfQU1ESzZfMikgfHwgKGNwdVR5cGUgPT0gQ1BVX0FNREs2XzIgJiYgY3B1U3RlcHBpbmcgPCA4KSkKKwkJICAgIHJldHVybjsKKwkJaWYgKGNwdVR5cGUgPCBDUFVfQU1EQXRobG9uKSB7CisJCSAgICBudW1NVFJSID0gMjsgICAgICAgIC8qIEFNRCBDUFUncyBoYXZlIDIgTVRSUidzICovCisJCSAgICBnZXRNVFJSID0gQU1EX2dldE1UUlI7CisJCSAgICBzZXRNVFJSID0gQU1EX3NldE1UUlI7CisJCSAgICBnZXRGcmVlUmVnaW9uID0gQU1ESzZfZ2V0RnJlZVJlZ2lvbjsKIAotICAgICAgICAgICAgICAgICAgICAvKiBGb3Igc29tZSByZWFzb24gc29tZSBJQk0gc3lzdGVtcyB3aXRoIEs2LTIgcHJvY2Vzc29ycwotICAgICAgICAgICAgICAgICAgICAgKiBoYXZlIHdyaXRlIGNvbWJpbmVkIGVuYWJsZWQgZm9yIHRoZSBzeXN0ZW0gQklPUwotICAgICAgICAgICAgICAgICAgICAgKiByZWdpb24gZnJvbSAweEUwMDAwIHRvIDB4RkZGRkZGLiBXZSBuZWVkICpib3RoKiBNVFJSJ3MKLSAgICAgICAgICAgICAgICAgICAgICogZm9yIG91ciBvd24gZ3JhcGhpY3MgZHJpdmVycywgc28gaWYgd2UgZGV0ZWN0IGFueQotICAgICAgICAgICAgICAgICAgICAgKiByZWdpb25zIGJlbG93IHRoZSAxTWVnIGJvdW5kYXJ5LCB3ZSByZW1vdmUgdGhlbQotICAgICAgICAgICAgICAgICAgICAgKiBzbyB3ZSBjYW4gdXNlIHRoaXMgTVRSUiByZWdpc3RlciBvdXJzZWx2ZXMuCi0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtTVRSUjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZXRNVFJSKGksJmxiYXNlLCZsc2l6ZSwmbHR5cGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxiYXNlIDwgMHgxMDAwMDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TVRSUihpLDAsMCwwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvKiBBTUQgQXRobG9uIHVzZXMgUDYgc3R5bGUgTVRSUidzICovCi0gICAgICAgICAgICAgICAgICAgIF9NVFJSX3JlYWRNU1IoSU5URUxfY2FwX01TUiwmZWF4LCZlZHgpOwotICAgICAgICAgICAgICAgICAgICBudW1NVFJSID0gZWF4ICYgMHhGRjsKLSAgICAgICAgICAgICAgICAgICAgZ2V0TVRSUiA9IElOVEVMX2dldE1UUlI7Ci0gICAgICAgICAgICAgICAgICAgIHNldE1UUlIgPSBJTlRFTF9zZXRNVFJSOwotICAgICAgICAgICAgICAgICAgICBnZXRGcmVlUmVnaW9uID0gR0VORVJJQ19nZXRGcmVlUmVnaW9uOwotICAgICAgICAgICAgICAgICAgICBJTlRFTF9kaXNhYmxlQmFua2VkV3JpdGVDb21iaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1BVX0N5cml4OgotICAgICAgICAgICAgICAgIC8qIEN5cml4IDZ4ODYgYW5kIGxhdGVyIHN1cHBvcnQgdGhlIE1UUlIgcmVnaXN0ZXJzICovCi0gICAgICAgICAgICAgICAgaWYgKGNwdVR5cGUgPCBDUFVfQ3lyaXg2eDg2IHx8IGNwdVR5cGUgPj0gQ1BVX0N5cml4TWVkaWFHWCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIG51bU1UUlIgPSA4OyAgICAgICAgLyogQ3lyaXggQ1BVJ3MgaGF2ZSA4IEFSUidzICovCi0gICAgICAgICAgICAgICAgZ2V0TVRSUiA9IENZUklYX2dldE1UUlI7Ci0gICAgICAgICAgICAgICAgc2V0TVRSUiA9IENZUklYX3NldE1UUlI7Ci0gICAgICAgICAgICAgICAgZ2V0RnJlZVJlZ2lvbiA9IENZUklYX2dldEZyZWVSZWdpb247Ci0gICAgICAgICAgICAgICAgQ1lSSVhfaW5pdEFSUigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkJICAgIC8qIEZvciBzb21lIHJlYXNvbiBzb21lIElCTSBzeXN0ZW1zIHdpdGggSzYtMiBwcm9jZXNzb3JzCisJCSAgICAgKiBoYXZlIHdyaXRlIGNvbWJpbmVkIGVuYWJsZWQgZm9yIHRoZSBzeXN0ZW0gQklPUworCQkgICAgICogcmVnaW9uIGZyb20gMHhFMDAwMCB0byAweEZGRkZGRi4gV2UgbmVlZCAqYm90aCogTVRSUidzCisJCSAgICAgKiBmb3Igb3VyIG93biBncmFwaGljcyBkcml2ZXJzLCBzbyBpZiB3ZSBkZXRlY3QgYW55CisJCSAgICAgKiByZWdpb25zIGJlbG93IHRoZSAxTWVnIGJvdW5kYXJ5LCB3ZSByZW1vdmUgdGhlbQorCQkgICAgICogc28gd2UgY2FuIHVzZSB0aGlzIE1UUlIgcmVnaXN0ZXIgb3Vyc2VsdmVzLgorCQkgICAgICovCisJCSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtTVRSUjsgaSsrKSB7CisJCQlnZXRNVFJSKGksJmxiYXNlLCZsc2l6ZSwmbHR5cGUpOworCQkJaWYgKGxiYXNlIDwgMHgxMDAwMDApCisJCQkgICAgc2V0TVRSUihpLDAsMCwwKTsKKwkJCX0KKwkJICAgIH0KKwkJZWxzZSB7CisJCSAgICAvKiBBTUQgQXRobG9uIHVzZXMgUDYgc3R5bGUgTVRSUidzICovCisJCSAgICBfTVRSUl9yZWFkTVNSKElOVEVMX2NhcF9NU1IsJmVheCwmZWR4KTsKKwkJICAgIG51bU1UUlIgPSBlYXggJiAweEZGOworCQkgICAgZ2V0TVRSUiA9IElOVEVMX2dldE1UUlI7CisJCSAgICBzZXRNVFJSID0gSU5URUxfc2V0TVRSUjsKKwkJICAgIGdldEZyZWVSZWdpb24gPSBHRU5FUklDX2dldEZyZWVSZWdpb247CisJCSAgICBJTlRFTF9kaXNhYmxlQmFua2VkV3JpdGVDb21iaW5lKCk7CisJCSAgICB9CisJCWJyZWFrOworCSAgICBjYXNlIENQVV9DeXJpeDoKKwkJLyogQ3lyaXggNng4NiBhbmQgbGF0ZXIgc3VwcG9ydCB0aGUgTVRSUiByZWdpc3RlcnMgKi8KKwkJaWYgKGNwdVR5cGUgPCBDUFVfQ3lyaXg2eDg2IHx8IGNwdVR5cGUgPj0gQ1BVX0N5cml4TWVkaWFHWCkKKwkJICAgIHJldHVybjsKKwkJbnVtTVRSUiA9IDg7ICAgICAgICAvKiBDeXJpeCBDUFUncyBoYXZlIDggQVJSJ3MgKi8KKwkJZ2V0TVRSUiA9IENZUklYX2dldE1UUlI7CisJCXNldE1UUlIgPSBDWVJJWF9zZXRNVFJSOworCQlnZXRGcmVlUmVnaW9uID0gQ1lSSVhfZ2V0RnJlZVJlZ2lvbjsKKwkJQ1lSSVhfaW5pdEFSUigpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJcmV0dXJuOworCSAgICB9CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzQ1LDkzICs3NDUsOTMgQEAKIAogICAgIC8qIENoZWNrIHRoYXQgd2UgaGF2ZSBhIENQVSB0aGF0IHN1cHBvcnRzIE1UUlIncyBhbmQgdHlwZSBpcyB2YWxpZCAqLwogICAgIGlmIChudW1NVFJSIDw9IDApIHsKLSAgICAgICAgaWYgKCFfTVRSUl9pc1JpbmcwKCkpCi0gICAgICAgICAgICByZXR1cm4gUE1fTVRSUl9FUlJfTk9fT1NfU1VQUE9SVDsKLSAgICAgICAgcmV0dXJuIFBNX01UUlJfTk9UX1NVUFBPUlRFRDsKLSAgICAgICAgfQorCWlmICghX01UUlJfaXNSaW5nMCgpKQorCSAgICByZXR1cm4gUE1fTVRSUl9FUlJfTk9fT1NfU1VQUE9SVDsKKwlyZXR1cm4gUE1fTVRSUl9OT1RfU1VQUE9SVEVEOworCX0KICAgICBpZiAodHlwZSA+PSBQTV9NVFJSX01BWCkKLSAgICAgICAgcmV0dXJuIFBNX01UUlJfRVJSX1BBUkFNUzsKKwlyZXR1cm4gUE1fTVRSUl9FUlJfUEFSQU1TOwogCiAgICAgLyogSWYgdGhlIHR5cGUgaXMgV0MsIGNoZWNrIHRoYXQgdGhpcyBwcm9jZXNzb3Igc3VwcG9ydHMgaXQgKi8KICAgICBpZiAoIU1UUlJfaGF2ZVdyaXRlQ29tYmluZSgpKQotICAgICAgICByZXR1cm4gUE1fTVRSUl9FUlJfTk9XUkNPTUI7CisJcmV0dXJuIFBNX01UUlJfRVJSX05PV1JDT01COwogCiAgICAgLyogQWRqdXN0IHRoZSBib3VuZGFyaWVzIGRlcGVuZGluZyBvbiB0aGUgQ1BVIHR5cGUgKi8KICAgICBzd2l0Y2ggKGNwdUZhbWlseSkgewotICAgICAgICBjYXNlIENQVV9BTUQ6Ci0gICAgICAgICAgICBpZiAoY3B1VHlwZSA8IENQVV9BTURBdGhsb24pIHsKLSAgICAgICAgICAgICAgICAvKiBBcHBseSB0aGUgSzYgYmxvY2sgYWxpZ25tZW50IGFuZCBzaXplIHJ1bGVzLiBJbiBvcmRlcjoKLSAgICAgICAgICAgICAgICAgKiAgbyBVbmNhY2hlZCBvciBnYXRoZXJpbmcgb25seQotICAgICAgICAgICAgICAgICAqICBvIDEyOEsgb3IgYmlnZ2VyIGJsb2NrCi0gICAgICAgICAgICAgICAgICogIG8gUG93ZXIgb2YgMiBibG9jawotICAgICAgICAgICAgICAgICAqICBvIGJhc2Ugc3VpdGFibHkgYWxpZ25lZCB0byB0aGUgcG93ZXIKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAodHlwZSA+IFBNX01UUlJfV1JDT01CICYmIChzaXplIDwgKDEgPDwgMTcpIHx8IChzaXplICYgfihzaXplLTEpKS1zaXplIHx8IChiYXNlICYgKHNpemUtMSkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBNX01UUlJfRVJSX05PVF9BTElHTkVEOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCBmb3IgQU1EIEF0aGxvbiB3aGljaCB1c2VzIFA2IHN0eWxlIE1UUlIncyAqLwotICAgICAgICBjYXNlIENQVV9JbnRlbDoKLSAgICAgICAgY2FzZSBDUFVfQ3lyaXg6Ci0gICAgICAgICAgICBpZiAoKGJhc2UgJiAweEZGRikgfHwgKHNpemUgJiAweEZGRikpIHsKLSAgICAgICAgICAgICAgICAvKiBCYXNlIGFuZCBzaXplIG11c3QgYmUgbXVsdGlwbGVzIG9mIDRLYiAqLwotICAgICAgICAgICAgICAgIHJldHVybiBQTV9NVFJSX0VSUl9OT1RfNEtCX0FMSUdORUQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGJhc2UgPCAweDEwMDAwMCkgewotICAgICAgICAgICAgICAgIC8qIEJhc2UgbXVzdCBiZSA+PSAxTWIgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gUE1fTVRSUl9FUlJfQkVMT1dfMU1COwotICAgICAgICAgICAgICAgIH0KKwljYXNlIENQVV9BTUQ6CisJICAgIGlmIChjcHVUeXBlIDwgQ1BVX0FNREF0aGxvbikgeworCQkvKiBBcHBseSB0aGUgSzYgYmxvY2sgYWxpZ25tZW50IGFuZCBzaXplIHJ1bGVzLiBJbiBvcmRlcjoKKwkJICogIG8gVW5jYWNoZWQgb3IgZ2F0aGVyaW5nIG9ubHkKKwkJICogIG8gMTI4SyBvciBiaWdnZXIgYmxvY2sKKwkJICogIG8gUG93ZXIgb2YgMiBibG9jaworCQkgKiAgbyBiYXNlIHN1aXRhYmx5IGFsaWduZWQgdG8gdGhlIHBvd2VyCisJCSAqLworCQlpZiAodHlwZSA+IFBNX01UUlJfV1JDT01CICYmIChzaXplIDwgKDEgPDwgMTcpIHx8IChzaXplICYgfihzaXplLTEpKS1zaXplIHx8IChiYXNlICYgKHNpemUtMSkpKSkKKwkJICAgIHJldHVybiBQTV9NVFJSX0VSUl9OT1RfQUxJR05FRDsKKwkJYnJlYWs7CisJCX0KKwkgICAgLyogRmFsbCB0aHJvdWdoIGZvciBBTUQgQXRobG9uIHdoaWNoIHVzZXMgUDYgc3R5bGUgTVRSUidzICovCisJY2FzZSBDUFVfSW50ZWw6CisJY2FzZSBDUFVfQ3lyaXg6CisJICAgIGlmICgoYmFzZSAmIDB4RkZGKSB8fCAoc2l6ZSAmIDB4RkZGKSkgeworCQkvKiBCYXNlIGFuZCBzaXplIG11c3QgYmUgbXVsdGlwbGVzIG9mIDRLYiAqLworCQlyZXR1cm4gUE1fTVRSUl9FUlJfTk9UXzRLQl9BTElHTkVEOworCQl9CisJICAgIGlmIChiYXNlIDwgMHgxMDAwMDApIHsKKwkJLyogQmFzZSBtdXN0IGJlID49IDFNYiAqLworCQlyZXR1cm4gUE1fTVRSUl9FUlJfQkVMT1dfMU1COworCQl9CiAKLSAgICAgICAgICAgIC8qIENoZWNrIHVwcGVyIGJpdHMgb2YgYmFzZSBhbmQgbGFzdCBhcmUgZXF1YWwgYW5kIGxvd2VyIGJpdHMKLSAgICAgICAgICAgICAqIGFyZSAwIGZvciBiYXNlIGFuZCAxIGZvciBsYXN0Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGxhc3QgPSBiYXNlICsgc2l6ZSAtIDE7Ci0gICAgICAgICAgICBmb3IgKGxiYXNlID0gYmFzZTsgIShsYmFzZSAmIDEpICYmIChsYXN0ICYgMSk7IGxiYXNlID0gbGJhc2UgPj4gMSwgbGFzdCA9IGxhc3QgPj4gMSkKLSAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBpZiAobGJhc2UgIT0gbGFzdCkgewotICAgICAgICAgICAgICAgIC8qIEJhc2UgaXMgbm90IGFsaWduZWQgb24gdGhlIGNvcnJlY3QgYm91bmRhcnkgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gUE1fTVRSUl9FUlJfTk9UX0FMSUdORUQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gUE1fTVRSUl9OT1RfU1VQUE9SVEVEOwotICAgICAgICB9CisJICAgIC8qIENoZWNrIHVwcGVyIGJpdHMgb2YgYmFzZSBhbmQgbGFzdCBhcmUgZXF1YWwgYW5kIGxvd2VyIGJpdHMKKwkgICAgICogYXJlIDAgZm9yIGJhc2UgYW5kIDEgZm9yIGxhc3QKKwkgICAgICovCisJICAgIGxhc3QgPSBiYXNlICsgc2l6ZSAtIDE7CisJICAgIGZvciAobGJhc2UgPSBiYXNlOyAhKGxiYXNlICYgMSkgJiYgKGxhc3QgJiAxKTsgbGJhc2UgPSBsYmFzZSA+PiAxLCBsYXN0ID0gbGFzdCA+PiAxKQorCQk7CisJICAgIGlmIChsYmFzZSAhPSBsYXN0KSB7CisJCS8qIEJhc2UgaXMgbm90IGFsaWduZWQgb24gdGhlIGNvcnJlY3QgYm91bmRhcnkgKi8KKwkJcmV0dXJuIFBNX01UUlJfRVJSX05PVF9BTElHTkVEOworCQl9CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHJldHVybiBQTV9NVFJSX05PVF9TVVBQT1JURUQ7CisJfQogCiAgICAgLyogU2VhcmNoIGZvciBleGlzdGluZyBNVFJSICovCiAgICAgZm9yIChpID0gMDsgaSA8IG51bU1UUlI7ICsraSkgewotICAgICAgICBnZXRNVFJSKGksJmxiYXNlLCZsc2l6ZSwmbHR5cGUpOwotICAgICAgICBpZiAobGJhc2UgPT0gMCAmJiBsc2l6ZSA9PSAwKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChiYXNlID4gbGJhc2UgKyAobHNpemUtMSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKChiYXNlIDwgbGJhc2UpICYmIChiYXNlK3NpemUtMSA8IGxiYXNlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworCWdldE1UUlIoaSwmbGJhc2UsJmxzaXplLCZsdHlwZSk7CisJaWYgKGxiYXNlID09IDAgJiYgbHNpemUgPT0gMCkKKwkgICAgY29udGludWU7CisJaWYgKGJhc2UgPiBsYmFzZSArIChsc2l6ZS0xKSkKKwkgICAgY29udGludWU7CisJaWYgKChiYXNlIDwgbGJhc2UpICYmIChiYXNlK3NpemUtMSA8IGxiYXNlKSkKKwkgICAgY29udGludWU7CiAKLSAgICAgICAgLyogQ2hlY2sgdGhhdCB3ZSBkb24ndCBvdmVybGFwIGFuIGV4aXN0aW5nIHJlZ2lvbiAqLwotICAgICAgICBpZiAodHlwZSAhPSBQTV9NVFJSX1VOQ0FDSEFCTEUpIHsKLSAgICAgICAgICAgIGlmICgoYmFzZSA8IGxiYXNlKSB8fCAoYmFzZStzaXplLTEgPiBsYmFzZStsc2l6ZS0xKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUE1fTVRSUl9FUlJfT1ZFUkxBUDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYmFzZSA9PSBsYmFzZSAmJiBzaXplID09IGxzaXplKSB7Ci0gICAgICAgICAgICAvKiBUaGUgcmVnaW9uIGFscmVhZHkgZXhpc3RzIHNvIGxlYXZlIGl0IGFsb25lICovCi0gICAgICAgICAgICByZXR1cm4gUE1fTVRSUl9FUlJfT0s7Ci0gICAgICAgICAgICB9CisJLyogQ2hlY2sgdGhhdCB3ZSBkb24ndCBvdmVybGFwIGFuIGV4aXN0aW5nIHJlZ2lvbiAqLworCWlmICh0eXBlICE9IFBNX01UUlJfVU5DQUNIQUJMRSkgeworCSAgICBpZiAoKGJhc2UgPCBsYmFzZSkgfHwgKGJhc2Urc2l6ZS0xID4gbGJhc2UrbHNpemUtMSkpCisJCXJldHVybiBQTV9NVFJSX0VSUl9PVkVSTEFQOworCSAgICB9CisJZWxzZSBpZiAoYmFzZSA9PSBsYmFzZSAmJiBzaXplID09IGxzaXplKSB7CisJICAgIC8qIFRoZSByZWdpb24gYWxyZWFkeSBleGlzdHMgc28gbGVhdmUgaXQgYWxvbmUgKi8KKwkgICAgcmV0dXJuIFBNX01UUlJfRVJSX09LOworCSAgICB9CiAKLSAgICAgICAgLyogTmV3IHJlZ2lvbiBpcyBlbmNsb3NlZCBieSBhbiBleGlzdGluZyByZWdpb24sIHNvIG9ubHkgYWxsb3cKLSAgICAgICAgICogYSBuZXcgdHlwZSB0byBiZSBjcmVhdGVkIGlmIHdlIGFyZSBzZXR0aW5nIGEgcmVnaW9uIHRvIGJlCi0gICAgICAgICAqIHVuY2FjaGVhYmxlIChzdWNoIGFzIE1NSU8gcmVnaXN0ZXJzIHdpdGhpbiBhIGZyYW1lYnVmZmVyKS4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChsdHlwZSAhPSAoaW50KXR5cGUpIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IFBNX01UUlJfVU5DQUNIQUJMRSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJldHVybiBQTV9NVFJSX0VSUl9UWVBFX01JU01BVENIOwotICAgICAgICAgICAgfQotICAgICAgICByZXR1cm4gUE1fTVRSUl9FUlJfT0s7Ci0gICAgICAgIH0KKwkvKiBOZXcgcmVnaW9uIGlzIGVuY2xvc2VkIGJ5IGFuIGV4aXN0aW5nIHJlZ2lvbiwgc28gb25seSBhbGxvdworCSAqIGEgbmV3IHR5cGUgdG8gYmUgY3JlYXRlZCBpZiB3ZSBhcmUgc2V0dGluZyBhIHJlZ2lvbiB0byBiZQorCSAqIHVuY2FjaGVhYmxlIChzdWNoIGFzIE1NSU8gcmVnaXN0ZXJzIHdpdGhpbiBhIGZyYW1lYnVmZmVyKS4KKwkgKi8KKwlpZiAobHR5cGUgIT0gKGludCl0eXBlKSB7CisJICAgIGlmICh0eXBlID09IFBNX01UUlJfVU5DQUNIQUJMRSkKKwkJY29udGludWU7CisJICAgIHJldHVybiBQTV9NVFJSX0VSUl9UWVBFX01JU01BVENIOworCSAgICB9CisJcmV0dXJuIFBNX01UUlJfRVJSX09LOworCX0KIAogICAgIC8qIFNlYXJjaCBmb3IgYW4gZW1wdHkgTVRSUiAqLwogICAgIGlmICgoaSA9IGdldEZyZWVSZWdpb24oYmFzZSxzaXplKSkgPCAwKQotICAgICAgICByZXR1cm4gUE1fTVRSUl9FUlJfTk9ORV9GUkVFOworCXJldHVybiBQTV9NVFJSX0VSUl9OT05FX0ZSRUU7CiAgICAgc2V0TVRSUihpLGJhc2Usc2l6ZSx0eXBlKTsKICAgICByZXR1cm4gUE1fTVRSUl9FUlJfT0s7CiB9CkBAIC04NTIsMTYgKzg1MiwxNiBAQAogCiAgICAgLyogQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgQ1BVIHRoYXQgc3VwcG9ydHMgTVRSUidzIGFuZCB0eXBlIGlzIHZhbGlkICovCiAgICAgaWYgKG51bU1UUlIgPD0gMCkgewotICAgICAgICBpZiAoIV9NVFJSX2lzUmluZzAoKSkKLSAgICAgICAgICAgIHJldHVybiBQTV9NVFJSX0VSUl9OT19PU19TVVBQT1JUOwotICAgICAgICByZXR1cm4gUE1fTVRSUl9OT1RfU1VQUE9SVEVEOwotICAgICAgICB9CisJaWYgKCFfTVRSUl9pc1JpbmcwKCkpCisJICAgIHJldHVybiBQTV9NVFJSX0VSUl9OT19PU19TVVBQT1JUOworCXJldHVybiBQTV9NVFJSX05PVF9TVVBQT1JURUQ7CisJfQogCiAgICAgLyogRW51bWVyYXRlIGFsbCBleGlzdGluZyBNVFJSJ3MgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtTVRSUjsgKytpKSB7Ci0gICAgICAgIGdldE1UUlIoaSwmbGJhc2UsJmxzaXplLCZsdHlwZSk7Ci0gICAgICAgIGNhbGxiYWNrKGxiYXNlLGxzaXplLGx0eXBlKTsKLSAgICAgICAgfQorCWdldE1UUlIoaSwmbGJhc2UsJmxzaXplLCZsdHlwZSk7CisJY2FsbGJhY2sobGJhc2UsbHNpemUsbHR5cGUpOworCX0KICAgICByZXR1cm4gUE1fTVRSUl9FUlJfT0s7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NvbW1vbi9wY2lsaWIuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NvbW1vbi9wY2lsaWIuYwppbmRleCA4ZGQ2ZGQxLi4xZDU0MmZjIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9jb21tb24vcGNpbGliLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uL3BjaWxpYi5jCkBAIC02NywxMyArNjcsMTMgQEAKIAogdHlwZWRlZiB1bmlvbiB7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdWxvbmcgc2lnbmF0dXJlOyAgICAgICAgLyogXzMyXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIHVsb25nIGVudHJ5OyAgICAgICAgICAgIC8qIDMyIGJpdCBwaHlzaWNhbCBhZGRyZXNzICAgICAgICAgICAgICAqLwotICAgICAgICB1Y2hhciByZXZpc2lvbjsgICAgICAgICAvKiBSZXZpc2lvbiBsZXZlbCwgMCAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgdWNoYXIgbGVuZ3RoOyAgICAgICAgICAgLyogTGVuZ3RoIGluIHBhcmFncmFwaHMgc2hvdWxkIGJlIDAxICAgICovCi0gICAgICAgIHVjaGFyIGNoZWNrc3VtOyAgICAgICAgIC8qIEFsbCBieXRlcyBtdXN0IGFkZCB1cCB0byB6ZXJvICAgICAgICAqLwotICAgICAgICB1Y2hhciByZXNlcnZlZFs1XTsgICAgICAvKiBNdXN0IGJlIHplcm8gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgfSBmaWVsZHM7CisJdWxvbmcgc2lnbmF0dXJlOyAgICAgICAgLyogXzMyXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdWxvbmcgZW50cnk7ICAgICAgICAgICAgLyogMzIgYml0IHBoeXNpY2FsIGFkZHJlc3MgICAgICAgICAgICAgICovCisJdWNoYXIgcmV2aXNpb247ICAgICAgICAgLyogUmV2aXNpb24gbGV2ZWwsIDAgICAgICAgICAgICAgICAgICAgICovCisJdWNoYXIgbGVuZ3RoOyAgICAgICAgICAgLyogTGVuZ3RoIGluIHBhcmFncmFwaHMgc2hvdWxkIGJlIDAxICAgICovCisJdWNoYXIgY2hlY2tzdW07ICAgICAgICAgLyogQWxsIGJ5dGVzIG11c3QgYWRkIHVwIHRvIHplcm8gICAgICAgICovCisJdWNoYXIgcmVzZXJ2ZWRbNV07ICAgICAgLyogTXVzdCBiZSB6ZXJvICAgICAgICAgICAgICAgICAgICAgICAgICovCisJfSBmaWVsZHM7CiAgICAgY2hhciBjaGFyc1sxNl07CiAgICAgfSBQQ0lfYmlvczMyOwogCkBAIC0xNDMsNTQgKzE0Myw1NCBAQAogCiAgICAgLyogQmFpbCBpZiB3ZSBoYXZlIGFscmVhZHkgZGV0ZWN0ZWQgbm8gQklPUyBpcyBwcmVzZW50ICovCiAgICAgaWYgKFBDSUJJT1NWZXJzaW9uID09IDApCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogCiAgICAgLyogRmlyc3Qgc2NhbiB0aGUgbWVtb3J5IGZyb20gMHhFMDAwMCB0byAweEZGRkZGIGxvb2tpbmcgZm9yIHRoZQogICAgICAqIEJJT1MzMiBzZXJ2aWNlIGRpcmVjdG9yeSwgc28gd2UgY2FuIGRldGVybWluZSBpZiB3ZSBjYW4gY2FsbCBpdAogICAgICAqIGZyb20gMzItYml0IHByb3RlY3RlZCBtb2RlLgogICAgICAqLwogICAgIGlmIChQQ0lCSU9TVmVyc2lvbiA9PSAtMSkgewotICAgICAgICBQQ0lCSU9TVmVyc2lvbiA9IDA7Ci0gICAgICAgIEJJT1NJbWFnZSA9IFBNX21hcFBoeXNpY2FsQWRkcigweEUwMDAwLEJJT1NfTElNSVQsZmFsc2UpOwotICAgICAgICBpZiAoIUJJT1NJbWFnZSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBCSU9TRW5kID0gQklPU0ltYWdlICsgMHgyMDAwMDsKLSAgICAgICAgZm9yIChCSU9TRGlyID0gKFBDSV9iaW9zMzIqKUJJT1NJbWFnZTsgQklPU0RpciA8IChQQ0lfYmlvczMyKilCSU9TRW5kOyBCSU9TRGlyKyspIHsKLSAgICAgICAgICAgIHVjaGFyICAgc3VtOwotICAgICAgICAgICAgaW50ICAgICBpLGxlbmd0aDsKKwlQQ0lCSU9TVmVyc2lvbiA9IDA7CisJQklPU0ltYWdlID0gUE1fbWFwUGh5c2ljYWxBZGRyKDB4RTAwMDAsQklPU19MSU1JVCxmYWxzZSk7CisJaWYgKCFCSU9TSW1hZ2UpCisJICAgIHJldHVybiAwOworCUJJT1NFbmQgPSBCSU9TSW1hZ2UgKyAweDIwMDAwOworCWZvciAoQklPU0RpciA9IChQQ0lfYmlvczMyKilCSU9TSW1hZ2U7IEJJT1NEaXIgPCAoUENJX2Jpb3MzMiopQklPU0VuZDsgQklPU0RpcisrKSB7CisJICAgIHVjaGFyICAgc3VtOworCSAgICBpbnQgICAgIGksbGVuZ3RoOwogCi0gICAgICAgICAgICBpZiAoQklPU0Rpci0+ZmllbGRzLnNpZ25hdHVyZSAhPSBCSU9TMzJfU0lHTkFUVVJFKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbGVuZ3RoID0gQklPU0Rpci0+ZmllbGRzLmxlbmd0aCAqIDE2OwotICAgICAgICAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBmb3IgKHN1bSA9IGkgPSAwOyBpIDwgbGVuZ3RoIDsgaSsrKQotICAgICAgICAgICAgICAgIHN1bSArPSBCSU9TRGlyLT5jaGFyc1tpXTsKLSAgICAgICAgICAgIGlmIChzdW0gIT0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEJJT1NFbnRyeS5hZGRyZXNzID0gKHVsb25nKUJJT1NJbWFnZSArIChCSU9TRGlyLT5maWVsZHMuZW50cnkgLSAweEUwMDAwKTsKLSAgICAgICAgICAgIEJJT1NFbnRyeS5zZWdtZW50ID0gX1BDSV9nZXRDUygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisJICAgIGlmIChCSU9TRGlyLT5maWVsZHMuc2lnbmF0dXJlICE9IEJJT1MzMl9TSUdOQVRVUkUpCisJCWNvbnRpbnVlOworCSAgICBsZW5ndGggPSBCSU9TRGlyLT5maWVsZHMubGVuZ3RoICogMTY7CisJICAgIGlmICghbGVuZ3RoKQorCQljb250aW51ZTsKKwkgICAgZm9yIChzdW0gPSBpID0gMDsgaSA8IGxlbmd0aCA7IGkrKykKKwkJc3VtICs9IEJJT1NEaXItPmNoYXJzW2ldOworCSAgICBpZiAoc3VtICE9IDApCisJCWNvbnRpbnVlOworCSAgICBCSU9TRW50cnkuYWRkcmVzcyA9ICh1bG9uZylCSU9TSW1hZ2UgKyAoQklPU0Rpci0+ZmllbGRzLmVudHJ5IC0gMHhFMDAwMCk7CisJICAgIEJJT1NFbnRyeS5zZWdtZW50ID0gX1BDSV9nZXRDUygpOworCSAgICBicmVhazsKKwkgICAgfQogCi0gICAgICAgIC8qIElmIHdlIGZvdW5kIHRoZSBCSU9TMzIgZGlyZWN0b3J5LCBjYWxsIGl0IHRvIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUKLSAgICAgICAgICogUENJIHNlcnZpY2VzLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKEJJT1NFbnRyeS5hZGRyZXNzID09IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKF9CSU9TMzJfc2VydmljZShQQ0lfU0VSVklDRSwwLCZwaHlzQmFzZSwmbGVuZ3RoLCZvZmZzZXQsQklPU0VudHJ5KSAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIFBDSVBoeXNFbnRyeSA9IHBoeXNCYXNlICsgb2Zmc2V0OwotICAgICAgICBQQ0lFbnRyeS5hZGRyZXNzID0gKHVsb25nKUJJT1NJbWFnZSArIChQQ0lQaHlzRW50cnkgLSAweEUwMDAwKTsKLSAgICAgICAgUENJRW50cnkuc2VnbWVudCA9IF9QQ0lfZ2V0Q1MoKTsKLSAgICAgICAgfQorCS8qIElmIHdlIGZvdW5kIHRoZSBCSU9TMzIgZGlyZWN0b3J5LCBjYWxsIGl0IHRvIGdldCB0aGUgYWRkcmVzcyBvZiB0aGUKKwkgKiBQQ0kgc2VydmljZXMuCisJICovCisJaWYgKEJJT1NFbnRyeS5hZGRyZXNzID09IDApCisJICAgIHJldHVybiAwOworCWlmIChfQklPUzMyX3NlcnZpY2UoUENJX1NFUlZJQ0UsMCwmcGh5c0Jhc2UsJmxlbmd0aCwmb2Zmc2V0LEJJT1NFbnRyeSkgIT0gMCkKKwkgICAgcmV0dXJuIDA7CisJUENJUGh5c0VudHJ5ID0gcGh5c0Jhc2UgKyBvZmZzZXQ7CisJUENJRW50cnkuYWRkcmVzcyA9ICh1bG9uZylCSU9TSW1hZ2UgKyAoUENJUGh5c0VudHJ5IC0gMHhFMDAwMCk7CisJUENJRW50cnkuc2VnbWVudCA9IF9QQ0lfZ2V0Q1MoKTsKKwl9CiAjZW5kaWYKICAgICAvKiBXZSBmb3VuZCB0aGUgQklPUyBlbnRyeSwgc28gbm93IGRvIHRoZSB2ZXJzaW9uIGNoZWNrICovCiAgICAgdmVyc2lvbiA9IF9QQ0lCSU9TX2lzUHJlc2VudChQQ0lfQklPU19QUkVTRU5ULCZzaWduYXR1cmUsJnN0YXQsbGFzdEJ1cyxQQ0lFbnRyeSk7CiAgICAgaWYgKHZlcnNpb24gPiAwICYmICgoc3RhdCA+PiA4KSA9PSAwKSAmJiBzaWduYXR1cmUgPT0gUENJX1NJR05BVFVSRSkgewotICAgICAgICAqaHdUeXBlID0gc3RhdCAmIDB4RkY7Ci0gICAgICAgIHJldHVybiBQQ0lCSU9TVmVyc2lvbiA9IHZlcnNpb247Ci0gICAgICAgIH0KKwkqaHdUeXBlID0gc3RhdCAmIDB4RkY7CisJcmV0dXJuIFBDSUJJT1NWZXJzaW9uID0gdmVyc2lvbjsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTIxNSwxNiArMjE1LDE2IEBACiB7CiAgICAgLyogSWdub3JlIGRldmljZXMgd2l0aCBhIHZlbmRvciBJRCBvZiAwICovCiAgICAgaWYgKGluZm8tPlZlbmRvcklEID09IDApCi0gICAgICAgIHJldHVybiB0cnVlOworCXJldHVybiB0cnVlOwogCiAgICAgLyogTk9URTogV2Ugb25seSBjaGVjayBhZ2FpbnN0IHRoZSBjdXJyZW50IGRldmljZSBvbgogICAgICAqICAgICAgIHRoZSBidXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gbm90IGV4Y2x1ZGUKICAgICAgKiAgICAgICBtdWx0aXBsZSBjb250cm9sbGVycyBvZiB0aGUgc2FtZSBkZXZpY2UgSUQuCiAgICAgICovCiAgICAgaWYgKGluZm8tPnNsb3QucC5CdXMgPT0gcHJldi0+c2xvdC5wLkJ1cyAmJgotICAgICAgICBpbmZvLT5zbG90LnAuRGV2aWNlID09IHByZXYtPnNsb3QucC5EZXZpY2UgJiYKLSAgICAgICAgaW5mby0+RGV2aWNlSUQgPT0gcHJldi0+RGV2aWNlSUQpCi0gICAgICAgIHJldHVybiB0cnVlOworCWluZm8tPnNsb3QucC5EZXZpY2UgPT0gcHJldi0+c2xvdC5wLkRldmljZSAmJgorCWluZm8tPkRldmljZUlEID09IHByZXYtPkRldmljZUlEKQorCXJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMjUzLDQxICsyNTMsNDEgQEAKICAgICB0bXAgPSBQTV9pbnBkKDB4Q0Y4KTsKICAgICBQTV9vdXRwZCgweENGOCxzbG90LmkpOwogICAgIGlmICgoUE1faW5wZCgweENGOCkgPT0gc2xvdC5pKSAmJiAoUE1faW5wZCgweENGQykgIT0gMHhGRkZGRkZGRlVMKSkgewotICAgICAgICAvKiBQQ0kgYWNjZXNzIG1lY2hhbmlzbSAxIC0gdGhlIHByZWZlcnJlZCBtZWNoYW5pc20gKi8KLSAgICAgICAgZm9yIChidXMgPSAwOyBidXMgPCA4OyBidXMrKykgewotICAgICAgICAgICAgc2xvdC5wLkJ1cyA9IGJ1czsKLSAgICAgICAgICAgIGZvciAoZGV2aWNlID0gMDsgZGV2aWNlIDwgMzI7IGRldmljZSsrKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5wLkRldmljZSA9IGRldmljZTsKLSAgICAgICAgICAgICAgICBmb3IgKGZ1bmN0aW9uID0gMDsgZnVuY3Rpb24gPCA4OyBmdW5jdGlvbisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3QucC5GdW5jdGlvbiA9IGZ1bmN0aW9uOwotICAgICAgICAgICAgICAgICAgICBzbG90LnAuUmVnaXN0ZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICBQTV9vdXRwZCgweENGOCxzbG90LmkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoUE1faW5wZCgweENGQykgIT0gMHhGRkZGRkZGRlVMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJnBjaSwwLHNpemVvZihwY2kpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjaS5kd1NpemUgPSBzaXplb2YocGNpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBjaS5tZWNoMSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2kuc2xvdCA9IHNsb3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICBscCA9ICh1bG9uZyopJihwY2kuVmVuZG9ySUQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5VTV9QQ0lfUkVHOyBpKyssIGxwKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LnAuUmVnaXN0ZXIgPSBpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNX291dHBkKDB4Q0Y4LHNsb3QuaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmxwID0gUE1faW5wZCgweENGQyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFDaGVja0R1cGxpY2F0ZSgmcGNpLCZwcmV2KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1BZX1NUUlVDVFVSRSgmaW5mb1tudW1Gb3VuZF0sJnBjaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytudW1Gb3VuZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcGNpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorCS8qIFBDSSBhY2Nlc3MgbWVjaGFuaXNtIDEgLSB0aGUgcHJlZmVycmVkIG1lY2hhbmlzbSAqLworCWZvciAoYnVzID0gMDsgYnVzIDwgODsgYnVzKyspIHsKKwkgICAgc2xvdC5wLkJ1cyA9IGJ1czsKKwkgICAgZm9yIChkZXZpY2UgPSAwOyBkZXZpY2UgPCAzMjsgZGV2aWNlKyspIHsKKwkJc2xvdC5wLkRldmljZSA9IGRldmljZTsKKwkJZm9yIChmdW5jdGlvbiA9IDA7IGZ1bmN0aW9uIDwgODsgZnVuY3Rpb24rKykgeworCQkgICAgc2xvdC5wLkZ1bmN0aW9uID0gZnVuY3Rpb247CisJCSAgICBzbG90LnAuUmVnaXN0ZXIgPSAwOworCQkgICAgUE1fb3V0cGQoMHhDRjgsc2xvdC5pKTsKKwkJICAgIGlmIChQTV9pbnBkKDB4Q0ZDKSAhPSAweEZGRkZGRkZGVUwpIHsKKwkJCW1lbXNldCgmcGNpLDAsc2l6ZW9mKHBjaSkpOworCQkJcGNpLmR3U2l6ZSA9IHNpemVvZihwY2kpOworCQkJcGNpLm1lY2gxID0gMTsKKwkJCXBjaS5zbG90ID0gc2xvdDsKKwkJCWxwID0gKHVsb25nKikmKHBjaS5WZW5kb3JJRCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1BDSV9SRUc7IGkrKywgbHArKykgeworCQkJICAgIHNsb3QucC5SZWdpc3RlciA9IGk7CisJCQkgICAgUE1fb3V0cGQoMHhDRjgsc2xvdC5pKTsKKwkJCSAgICAqbHAgPSBQTV9pbnBkKDB4Q0ZDKTsKKwkJCSAgICB9CisJCQlpZiAoIUNoZWNrRHVwbGljYXRlKCZwY2ksJnByZXYpKSB7CisJCQkgICAgaWYgKGluZm8pCisJCQkJQ09QWV9TVFJVQ1RVUkUoJmluZm9bbnVtRm91bmRdLCZwY2kpOworCQkJICAgICsrbnVtRm91bmQ7CisJCQkgICAgfQorCQkJcHJldiA9IHBjaTsKKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CiAKLSAgICAgICAgLyogRGlzYWJsZSBQQ0kgY29uZmlnIGN5Y2xlIG9uIGV4aXQgKi8KLSAgICAgICAgUE1fb3V0cGQoMHhDRjgsMCk7Ci0gICAgICAgIHJldHVybiBudW1Gb3VuZDsKLSAgICAgICAgfQorCS8qIERpc2FibGUgUENJIGNvbmZpZyBjeWNsZSBvbiBleGl0ICovCisJUE1fb3V0cGQoMHhDRjgsMCk7CisJcmV0dXJuIG51bUZvdW5kOworCX0KICAgICBQTV9vdXRwZCgweENGOCx0bXApOwogCiAgICAgLyogTm8gaGFyZHdhcmUgYWNjZXNzIG1lY2hhbmlzbSAxIGZvdW5kICovCkBAIC0zMjAsNDIgKzMyMCw0MiBAQAogICAgIFBNX291dHBiKDB4Q0Y4LDB4MDApOwogICAgIFBNX291dHBiKDB4Q0ZBLDB4MDApOwogICAgIGlmIChQTV9pbnBiKDB4Q0Y4KSA9PSAweDAwICYmIFBNX2lucGIoMHhDRkIpID09IDB4MDApIHsKLSAgICAgICAgLyogUENJIGFjY2VzcyBtZWNoYW5pc20gMiAtIHRoZSBvbGRlciBtZWNoYW5pc20gZm9yIGxlZ2FjeSBidXNzZXMgKi8KLSAgICAgICAgZm9yIChidXMgPSAwOyBidXMgPCAyOyBidXMrKykgewotICAgICAgICAgICAgc2xvdC5wLkJ1cyA9IGJ1czsKLSAgICAgICAgICAgIFBNX291dHBiKDB4Q0ZBLCh1Y2hhcilidXMpOwotICAgICAgICAgICAgZm9yIChkZXZpY2UgPSAwOyBkZXZpY2UgPCAxNjsgZGV2aWNlKyspIHsKLSAgICAgICAgICAgICAgICBzbG90LnAuRGV2aWNlID0gZGV2aWNlOwotICAgICAgICAgICAgICAgIGRldmljZUlPID0gMHhDMDAwICsgKGRldmljZSA8PCA4KTsKLSAgICAgICAgICAgICAgICBmb3IgKGZ1bmN0aW9uID0gMDsgZnVuY3Rpb24gPCA4OyBmdW5jdGlvbisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3QucC5GdW5jdGlvbiA9IGZ1bmN0aW9uOwotICAgICAgICAgICAgICAgICAgICBzbG90LnAuUmVnaXN0ZXIgPSAwOwotICAgICAgICAgICAgICAgICAgICBQTV9vdXRwYigweENGOCwodWNoYXIpKChmdW5jdGlvbiA8PCAxKSB8IDB4MTApKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFBNX2lucGQoZGV2aWNlSU8pICE9IDB4RkZGRkZGRkZVTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZwY2ksMCxzaXplb2YocGNpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2kuZHdTaXplID0gc2l6ZW9mKHBjaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2kubWVjaDEgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgcGNpLnNsb3QgPSBzbG90OwotICAgICAgICAgICAgICAgICAgICAgICAgbHAgPSAodWxvbmcqKSYocGNpLlZlbmRvcklEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fUENJX1JFRzsgaSsrLCBscCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC5wLlJlZ2lzdGVyID0gaTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbHAgPSBQTV9pbnBkKGRldmljZUlPICsgKGkgPDwgMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQ2hlY2tEdXBsaWNhdGUoJnBjaSwmcHJldikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5mbykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09QWV9TVFJVQ1RVUkUoJmluZm9bbnVtRm91bmRdLCZwY2kpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbnVtRm91bmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IHBjaTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkvKiBQQ0kgYWNjZXNzIG1lY2hhbmlzbSAyIC0gdGhlIG9sZGVyIG1lY2hhbmlzbSBmb3IgbGVnYWN5IGJ1c3NlcyAqLworCWZvciAoYnVzID0gMDsgYnVzIDwgMjsgYnVzKyspIHsKKwkgICAgc2xvdC5wLkJ1cyA9IGJ1czsKKwkgICAgUE1fb3V0cGIoMHhDRkEsKHVjaGFyKWJ1cyk7CisJICAgIGZvciAoZGV2aWNlID0gMDsgZGV2aWNlIDwgMTY7IGRldmljZSsrKSB7CisJCXNsb3QucC5EZXZpY2UgPSBkZXZpY2U7CisJCWRldmljZUlPID0gMHhDMDAwICsgKGRldmljZSA8PCA4KTsKKwkJZm9yIChmdW5jdGlvbiA9IDA7IGZ1bmN0aW9uIDwgODsgZnVuY3Rpb24rKykgeworCQkgICAgc2xvdC5wLkZ1bmN0aW9uID0gZnVuY3Rpb247CisJCSAgICBzbG90LnAuUmVnaXN0ZXIgPSAwOworCQkgICAgUE1fb3V0cGIoMHhDRjgsKHVjaGFyKSgoZnVuY3Rpb24gPDwgMSkgfCAweDEwKSk7CisJCSAgICBpZiAoUE1faW5wZChkZXZpY2VJTykgIT0gMHhGRkZGRkZGRlVMKSB7CisJCQltZW1zZXQoJnBjaSwwLHNpemVvZihwY2kpKTsKKwkJCXBjaS5kd1NpemUgPSBzaXplb2YocGNpKTsKKwkJCXBjaS5tZWNoMSA9IDA7CisJCQlwY2kuc2xvdCA9IHNsb3Q7CisJCQlscCA9ICh1bG9uZyopJihwY2kuVmVuZG9ySUQpOworCQkJZm9yIChpID0gMDsgaSA8IE5VTV9QQ0lfUkVHOyBpKyssIGxwKyspIHsKKwkJCSAgICBzbG90LnAuUmVnaXN0ZXIgPSBpOworCQkJICAgICpscCA9IFBNX2lucGQoZGV2aWNlSU8gKyAoaSA8PCAyKSk7CisJCQkgICAgfQorCQkJaWYgKCFDaGVja0R1cGxpY2F0ZSgmcGNpLCZwcmV2KSkgeworCQkJICAgIGlmIChpbmZvKQorCQkJCUNPUFlfU1RSVUNUVVJFKCZpbmZvW251bUZvdW5kXSwmcGNpKTsKKwkJCSAgICArK251bUZvdW5kOworCQkJICAgIH0KKwkJCXByZXYgPSBwY2k7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQogCi0gICAgICAgIC8qIERpc2FibGUgUENJIGNvbmZpZyBjeWNsZSBvbiBleGl0ICovCi0gICAgICAgIFBNX291dHBiKDB4Q0Y4LDApOwotICAgICAgICByZXR1cm4gbnVtRm91bmQ7Ci0gICAgICAgIH0KKwkvKiBEaXNhYmxlIFBDSSBjb25maWcgY3ljbGUgb24gZXhpdCAqLworCVBNX291dHBiKDB4Q0Y4LDApOworCXJldHVybiBudW1Gb3VuZDsKKwl9CiAKICAgICAvKiBObyBoYXJkd2FyZSBhY2Nlc3MgbWVjaGFuaXNtIDIgZm91bmQgKi8KICAgICByZXR1cm4gMDsKQEAgLTM5NCwzMiArMzk0LDMyIEBACiAgICAgUENJRGV2aWNlSW5mbyAgIHBjaSxwcmV2ID0gezB9OwogCiAgICAgaWYgKFBDSUJJT1NfZGV0ZWN0KCZod1R5cGUsJmxhc3RCdXMpKSB7Ci0gICAgICAgIC8qIFBDSSBCSU9TIGFjY2VzcyAtIHRoZSB1bHRpbWF0ZSBmYWxsYmFjayAqLwotICAgICAgICBmb3IgKGJ1cyA9IDA7IGJ1cyA8PSBsYXN0QnVzOyBidXMrKykgewotICAgICAgICAgICAgc2xvdC5wLkJ1cyA9IGJ1czsKLSAgICAgICAgICAgIGZvciAoZGV2aWNlID0gMDsgZGV2aWNlIDwgMzI7IGRldmljZSsrKSB7Ci0gICAgICAgICAgICAgICAgc2xvdC5wLkRldmljZSA9IGRldmljZTsKLSAgICAgICAgICAgICAgICBmb3IgKGZ1bmN0aW9uID0gMDsgZnVuY3Rpb24gPCA4OyBmdW5jdGlvbisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3QucC5GdW5jdGlvbiA9IGZ1bmN0aW9uOwotICAgICAgICAgICAgICAgICAgICBpZiAoUENJQklPU19yZWFkRFdPUkQoMCxzbG90LmkpICE9IDB4RkZGRkZGRkZVTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZwY2ksMCxzaXplb2YocGNpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2kuZHdTaXplID0gc2l6ZW9mKHBjaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwY2kubWVjaDEgPSAyOwotICAgICAgICAgICAgICAgICAgICAgICAgcGNpLnNsb3QgPSBzbG90OwotICAgICAgICAgICAgICAgICAgICAgICAgbHAgPSAodWxvbmcqKSYocGNpLlZlbmRvcklEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fUENJX1JFRzsgaSsrLCBscCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpscCA9IFBDSUJJT1NfcmVhZERXT1JEKGkgPDwgMixzbG90LmkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFDaGVja0R1cGxpY2F0ZSgmcGNpLCZwcmV2KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1BZX1NUUlVDVFVSRSgmaW5mb1tudW1Gb3VuZF0sJnBjaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytudW1Gb3VuZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcGNpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJLyogUENJIEJJT1MgYWNjZXNzIC0gdGhlIHVsdGltYXRlIGZhbGxiYWNrICovCisJZm9yIChidXMgPSAwOyBidXMgPD0gbGFzdEJ1czsgYnVzKyspIHsKKwkgICAgc2xvdC5wLkJ1cyA9IGJ1czsKKwkgICAgZm9yIChkZXZpY2UgPSAwOyBkZXZpY2UgPCAzMjsgZGV2aWNlKyspIHsKKwkJc2xvdC5wLkRldmljZSA9IGRldmljZTsKKwkJZm9yIChmdW5jdGlvbiA9IDA7IGZ1bmN0aW9uIDwgODsgZnVuY3Rpb24rKykgeworCQkgICAgc2xvdC5wLkZ1bmN0aW9uID0gZnVuY3Rpb247CisJCSAgICBpZiAoUENJQklPU19yZWFkRFdPUkQoMCxzbG90LmkpICE9IDB4RkZGRkZGRkZVTCkgeworCQkJbWVtc2V0KCZwY2ksMCxzaXplb2YocGNpKSk7CisJCQlwY2kuZHdTaXplID0gc2l6ZW9mKHBjaSk7CisJCQlwY2kubWVjaDEgPSAyOworCQkJcGNpLnNsb3QgPSBzbG90OworCQkJbHAgPSAodWxvbmcqKSYocGNpLlZlbmRvcklEKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBOVU1fUENJX1JFRzsgaSsrLCBscCsrKQorCQkJICAgICpscCA9IFBDSUJJT1NfcmVhZERXT1JEKGkgPDwgMixzbG90LmkpOworCQkJaWYgKCFDaGVja0R1cGxpY2F0ZSgmcGNpLCZwcmV2KSkgeworCQkJICAgIGlmIChpbmZvKQorCQkJCUNPUFlfU1RSVUNUVVJFKCZpbmZvW251bUZvdW5kXSwmcGNpKTsKKwkJCSAgICArK251bUZvdW5kOworCQkJICAgIH0KKwkJCXByZXYgPSBwY2k7CisJCQl9CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KIAogICAgIC8qIFJldHVybiBudW1iZXIgb2YgZGV2aWNlcyBmb3VuZCAqLwogICAgIHJldHVybiBudW1Gb3VuZDsKQEAgLTQ0NywxMSArNDQ3LDExIEBACiAgICAgICogc3R1ZmYgd2UgY2FuJ3QgZG8gZGlyZWN0bHkuCiAgICAgICovCiAgICAgaWYgKChudW1Gb3VuZCA9IFBDSV9lbnVtZXJhdGVNZWNoMShpbmZvKSkgPT0gMCkgewotICAgICAgICBpZiAoKG51bUZvdW5kID0gUENJX2VudW1lcmF0ZU1lY2gyKGluZm8pKSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoKG51bUZvdW5kID0gUENJX2VudW1lcmF0ZUJJT1MoaW5mbykpID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoKG51bUZvdW5kID0gUENJX2VudW1lcmF0ZU1lY2gyKGluZm8pKSA9PSAwKSB7CisJICAgIGlmICgobnVtRm91bmQgPSBQQ0lfZW51bWVyYXRlQklPUyhpbmZvKSkgPT0gMCkKKwkJcmV0dXJuIDA7CisJICAgIH0KKwl9CiAgICAgcmV0dXJuIG51bUZvdW5kOwogfQogCkBAIC00OTMsMjIgKzQ5MywyMiBAQAogCiAgICAgYmFzZSA9IFBDSV9hY2Nlc3NSZWcoYmFyLDAsUENJX1JFQURfRFdPUkQscGNpKTsKICAgICBpZiAoYmFzZSAmJiAhKGJhc2UgJiAweDEpKSB7Ci0gICAgICAgIC8qIEZvciBzb21lIHN0cmFuZ2UgcmVhc29uIHNvbWUgZGV2aWNlcyBkb24ndCBwcm9wZXJseSBkZWNvZGUKLSAgICAgICAgICogdGhlaXIgYmFzZSBhZGRyZXNzIHJlZ2lzdGVycyAoSW50ZWwgUENJL1BDSSBicmlkZ2VzISksIGFuZAotICAgICAgICAgKiB3ZSByZWFkIGNvbXBsZXRlbHkgYm9ndXMgdmFsdWVzLiBXZSBjaGVjayBmb3IgdGhhdCBoZXJlCi0gICAgICAgICAqIGFuZCBjbGVhciBvdXQgdGhvc2UgQkFSJ3MuCi0gICAgICAgICAqCi0gICAgICAgICAqIFdlIGNoZWNrIGZvciB0aGF0IGhlcmUgYmVjYXVzZSBhdCBsZWFzdCB0aGUgbG93IDEyIGJpdHMKLSAgICAgICAgICogb2YgdGhlIGFkZHJlc3MgcmFuZ2UgbXVzdCBiZSB6ZXJvcywgc2luY2UgdGhlIHBhZ2Ugc2l6ZQotICAgICAgICAgKiBvbiBJQTMyIHByb2Nlc3NvcnMgaXMgYWx3YXlzIDRLYi4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgoYmFzZSAmIDB4RkZGKSA9PSAwKSB7Ci0gICAgICAgICAgICBQQ0lfYWNjZXNzUmVnKGJhciwweEZGRkZGRkZGLFBDSV9XUklURV9EV09SRCxwY2kpOwotICAgICAgICAgICAgc2l6ZSA9IFBDSV9hY2Nlc3NSZWcoYmFyLDAsUENJX1JFQURfRFdPUkQscGNpKSAmIH4weEZGOwotICAgICAgICAgICAgc2l6ZSA9IH5zaXplKzE7Ci0gICAgICAgICAgICBQQ0lfYWNjZXNzUmVnKGJhcixiYXNlLFBDSV9XUklURV9EV09SRCxwY2kpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJLyogRm9yIHNvbWUgc3RyYW5nZSByZWFzb24gc29tZSBkZXZpY2VzIGRvbid0IHByb3Blcmx5IGRlY29kZQorCSAqIHRoZWlyIGJhc2UgYWRkcmVzcyByZWdpc3RlcnMgKEludGVsIFBDSS9QQ0kgYnJpZGdlcyEpLCBhbmQKKwkgKiB3ZSByZWFkIGNvbXBsZXRlbHkgYm9ndXMgdmFsdWVzLiBXZSBjaGVjayBmb3IgdGhhdCBoZXJlCisJICogYW5kIGNsZWFyIG91dCB0aG9zZSBCQVIncy4KKwkgKgorCSAqIFdlIGNoZWNrIGZvciB0aGF0IGhlcmUgYmVjYXVzZSBhdCBsZWFzdCB0aGUgbG93IDEyIGJpdHMKKwkgKiBvZiB0aGUgYWRkcmVzcyByYW5nZSBtdXN0IGJlIHplcm9zLCBzaW5jZSB0aGUgcGFnZSBzaXplCisJICogb24gSUEzMiBwcm9jZXNzb3JzIGlzIGFsd2F5cyA0S2IuCisJICovCisJaWYgKChiYXNlICYgMHhGRkYpID09IDApIHsKKwkgICAgUENJX2FjY2Vzc1JlZyhiYXIsMHhGRkZGRkZGRixQQ0lfV1JJVEVfRFdPUkQscGNpKTsKKwkgICAgc2l6ZSA9IFBDSV9hY2Nlc3NSZWcoYmFyLDAsUENJX1JFQURfRFdPUkQscGNpKSAmIH4weEZGOworCSAgICBzaXplID0gfnNpemUrMTsKKwkgICAgUENJX2FjY2Vzc1JlZyhiYXIsYmFzZSxQQ0lfV1JJVEVfRFdPUkQscGNpKTsKKwkgICAgfQorCX0KICAgICBwY2ktPnNsb3QucC5SZWdpc3RlciA9IDA7CiAgICAgcmV0dXJuIHNpemU7CiB9CkBAIC01NDIsNDkgKzU0Miw0OSBAQAogICAgIGludCBpb2Jhc2U7CiAKICAgICBpZiAoaW5mby0+bWVjaDEgPT0gMikgewotICAgICAgICAvKiBVc2UgUENJIEJJT1MgYWNjZXNzIHNpbmNlIHdlIGRvbnQgaGF2ZSBkaXJlY3QgaGFyZHdhcmUgYWNjZXNzICovCi0gICAgICAgIHN3aXRjaCAoZnVuYykgewotICAgICAgICAgICAgY2FzZSBQQ0lfUkVBRF9CWVRFOgotICAgICAgICAgICAgICAgIHJldHVybiAodWNoYXIpX1BDSUJJT1Nfc2VydmljZShSRUFEX0NPTkZJR19CWVRFLGluZm8tPnNsb3QuaSA+PiA4LGluZGV4LDAsUENJRW50cnkpOwotICAgICAgICAgICAgY2FzZSBQQ0lfUkVBRF9XT1JEOgotICAgICAgICAgICAgICAgIHJldHVybiAodXNob3J0KV9QQ0lCSU9TX3NlcnZpY2UoUkVBRF9DT05GSUdfV09SRCxpbmZvLT5zbG90LmkgPj4gOCxpbmRleCwwLFBDSUVudHJ5KTsKLSAgICAgICAgICAgIGNhc2UgUENJX1JFQURfRFdPUkQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICh1bG9uZylfUENJQklPU19zZXJ2aWNlKFJFQURfQ09ORklHX0RXT1JELGluZm8tPnNsb3QuaSA+PiA4LGluZGV4LDAsUENJRW50cnkpOwotICAgICAgICAgICAgY2FzZSBQQ0lfV1JJVEVfQllURToKLSAgICAgICAgICAgICAgICBfUENJQklPU19zZXJ2aWNlKFdSSVRFX0NPTkZJR19CWVRFLGluZm8tPnNsb3QuaSA+PiA4LGluZGV4LHZhbHVlLFBDSUVudHJ5KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUENJX1dSSVRFX1dPUkQ6Ci0gICAgICAgICAgICAgICAgX1BDSUJJT1Nfc2VydmljZShXUklURV9DT05GSUdfV09SRCxpbmZvLT5zbG90LmkgPj4gOCxpbmRleCx2YWx1ZSxQQ0lFbnRyeSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFBDSV9XUklURV9EV09SRDoKLSAgICAgICAgICAgICAgICBfUENJQklPU19zZXJ2aWNlKFdSSVRFX0NPTkZJR19EV09SRCxpbmZvLT5zbG90LmkgPj4gOCxpbmRleCx2YWx1ZSxQQ0lFbnRyeSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBVc2UgUENJIEJJT1MgYWNjZXNzIHNpbmNlIHdlIGRvbnQgaGF2ZSBkaXJlY3QgaGFyZHdhcmUgYWNjZXNzICovCisJc3dpdGNoIChmdW5jKSB7CisJICAgIGNhc2UgUENJX1JFQURfQllURToKKwkJcmV0dXJuICh1Y2hhcilfUENJQklPU19zZXJ2aWNlKFJFQURfQ09ORklHX0JZVEUsaW5mby0+c2xvdC5pID4+IDgsaW5kZXgsMCxQQ0lFbnRyeSk7CisJICAgIGNhc2UgUENJX1JFQURfV09SRDoKKwkJcmV0dXJuICh1c2hvcnQpX1BDSUJJT1Nfc2VydmljZShSRUFEX0NPTkZJR19XT1JELGluZm8tPnNsb3QuaSA+PiA4LGluZGV4LDAsUENJRW50cnkpOworCSAgICBjYXNlIFBDSV9SRUFEX0RXT1JEOgorCQlyZXR1cm4gKHVsb25nKV9QQ0lCSU9TX3NlcnZpY2UoUkVBRF9DT05GSUdfRFdPUkQsaW5mby0+c2xvdC5pID4+IDgsaW5kZXgsMCxQQ0lFbnRyeSk7CisJICAgIGNhc2UgUENJX1dSSVRFX0JZVEU6CisJCV9QQ0lCSU9TX3NlcnZpY2UoV1JJVEVfQ09ORklHX0JZVEUsaW5mby0+c2xvdC5pID4+IDgsaW5kZXgsdmFsdWUsUENJRW50cnkpOworCQlicmVhazsKKwkgICAgY2FzZSBQQ0lfV1JJVEVfV09SRDoKKwkJX1BDSUJJT1Nfc2VydmljZShXUklURV9DT05GSUdfV09SRCxpbmZvLT5zbG90LmkgPj4gOCxpbmRleCx2YWx1ZSxQQ0lFbnRyeSk7CisJCWJyZWFrOworCSAgICBjYXNlIFBDSV9XUklURV9EV09SRDoKKwkJX1BDSUJJT1Nfc2VydmljZShXUklURV9DT05GSUdfRFdPUkQsaW5mby0+c2xvdC5pID4+IDgsaW5kZXgsdmFsdWUsUENJRW50cnkpOworCQlicmVhazsKKwkgICAgfQorCX0KICAgICBlbHNlIHsKLSAgICAgICAgLyogVXNlIGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3MgbWVjaGFuaXNtcyAqLwotICAgICAgICBpZiAoaW5mby0+bWVjaDEpIHsKLSAgICAgICAgICAgIC8qIFBDSSBhY2Nlc3MgbWVjaGFuaXNtIDEgKi8KLSAgICAgICAgICAgIGlvYmFzZSA9IDB4Q0ZDICsgKGluZGV4ICYgMyk7Ci0gICAgICAgICAgICBpbmZvLT5zbG90LnAuUmVnaXN0ZXIgPSBpbmRleCA+PiAyOwotICAgICAgICAgICAgUE1fb3V0cGQoMHhDRjgsaW5mby0+c2xvdC5pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBQQ0kgYWNjZXNzIG1lY2hhbmlzbSAyICovCi0gICAgICAgICAgICBQTV9vdXRwYigweENGOCwodWNoYXIpKChpbmZvLT5zbG90LnAuRnVuY3Rpb24gPDwgMSkgfCAweDEwKSk7Ci0gICAgICAgICAgICBQTV9vdXRwYigweENGQSwodWNoYXIpaW5mby0+c2xvdC5wLkJ1cyk7Ci0gICAgICAgICAgICBpb2Jhc2UgPSAweEMwMDAgKyAoaW5mby0+c2xvdC5wLkRldmljZSA8PCA4KSArIGluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKGZ1bmMpIHsKLSAgICAgICAgICAgIGNhc2UgUENJX1JFQURfQllURToKLSAgICAgICAgICAgIGNhc2UgUENJX1JFQURfV09SRDoKLSAgICAgICAgICAgIGNhc2UgUENJX1JFQURfRFdPUkQ6ICAgIHZhbHVlID0gUE1faW5wZChpb2Jhc2UpOyAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFBDSV9XUklURV9CWVRFOiAgICBQTV9vdXRwYihpb2Jhc2UsKHVjaGFyKXZhbHVlKTsgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQQ0lfV1JJVEVfV09SRDogICAgUE1fb3V0cHcoaW9iYXNlLCh1c2hvcnQpdmFsdWUpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUENJX1dSSVRFX0RXT1JEOiAgIFBNX291dHBkKGlvYmFzZSwodWxvbmcpdmFsdWUpOyAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIFBNX291dHBkKDB4Q0Y4LDApOwotICAgICAgICB9CisJLyogVXNlIGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3MgbWVjaGFuaXNtcyAqLworCWlmIChpbmZvLT5tZWNoMSkgeworCSAgICAvKiBQQ0kgYWNjZXNzIG1lY2hhbmlzbSAxICovCisJICAgIGlvYmFzZSA9IDB4Q0ZDICsgKGluZGV4ICYgMyk7CisJICAgIGluZm8tPnNsb3QucC5SZWdpc3RlciA9IGluZGV4ID4+IDI7CisJICAgIFBNX291dHBkKDB4Q0Y4LGluZm8tPnNsb3QuaSk7CisJICAgIH0KKwllbHNlIHsKKwkgICAgLyogUENJIGFjY2VzcyBtZWNoYW5pc20gMiAqLworCSAgICBQTV9vdXRwYigweENGOCwodWNoYXIpKChpbmZvLT5zbG90LnAuRnVuY3Rpb24gPDwgMSkgfCAweDEwKSk7CisJICAgIFBNX291dHBiKDB4Q0ZBLCh1Y2hhcilpbmZvLT5zbG90LnAuQnVzKTsKKwkgICAgaW9iYXNlID0gMHhDMDAwICsgKGluZm8tPnNsb3QucC5EZXZpY2UgPDwgOCkgKyBpbmRleDsKKwkgICAgfQorCXN3aXRjaCAoZnVuYykgeworCSAgICBjYXNlIFBDSV9SRUFEX0JZVEU6CisJICAgIGNhc2UgUENJX1JFQURfV09SRDoKKwkgICAgY2FzZSBQQ0lfUkVBRF9EV09SRDogICAgdmFsdWUgPSBQTV9pbnBkKGlvYmFzZSk7ICAgICAgICBicmVhazsKKwkgICAgY2FzZSBQQ0lfV1JJVEVfQllURTogICAgUE1fb3V0cGIoaW9iYXNlLCh1Y2hhcil2YWx1ZSk7ICBicmVhazsKKwkgICAgY2FzZSBQQ0lfV1JJVEVfV09SRDogICAgUE1fb3V0cHcoaW9iYXNlLCh1c2hvcnQpdmFsdWUpOyBicmVhazsKKwkgICAgY2FzZSBQQ0lfV1JJVEVfRFdPUkQ6ICAgUE1fb3V0cGQoaW9iYXNlLCh1bG9uZyl2YWx1ZSk7ICBicmVhazsKKwkgICAgfQorCVBNX291dHBkKDB4Q0Y4LDApOworCX0KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTYwOCwxNCArNjA4LDE0IEBACiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgcmV0OwogCiAgICAgaWYgKFBDSVBoeXNFbnRyeSkgewotICAgICAgICBidWYuQnVmZmVyU2l6ZSA9IG51bURldmljZXMgKiBzaXplb2YoUENJUm91dGVJbmZvKTsKLSAgICAgICAgYnVmLkRhdGFCdWZmZXIgPSBidWZmZXI7Ci0gICAgICAgIGlmICgocmV0ID0gX1BDSUJJT1NfZ2V0Um91dGluZygmYnVmLFBDSUVudHJ5KSkgPT0gMHg4OSkKLSAgICAgICAgICAgIHJldHVybiBidWYuQnVmZmVyU2l6ZSAvIHNpemVvZihQQ0lSb3V0ZUluZm8pOwotICAgICAgICBpZiAocmV0ICE9IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisJYnVmLkJ1ZmZlclNpemUgPSBudW1EZXZpY2VzICogc2l6ZW9mKFBDSVJvdXRlSW5mbyk7CisJYnVmLkRhdGFCdWZmZXIgPSBidWZmZXI7CisJaWYgKChyZXQgPSBfUENJQklPU19nZXRSb3V0aW5nKCZidWYsUENJRW50cnkpKSA9PSAweDg5KQorCSAgICByZXR1cm4gYnVmLkJ1ZmZlclNpemUgLyBzaXplb2YoUENJUm91dGVJbmZvKTsKKwlpZiAocmV0ICE9IDApCisJICAgIHJldHVybiAtMTsKKwlyZXR1cm4gMDsKKwl9CiAKICAgICAvKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHRoaXMgdmlhIHRoZSBQQ0kgQklPUyBmdW5jdGlvbnMgKi8KICAgICByZXR1cm4gLTE7CkBAIC02NDIsMTMgKzY0MiwxMyBAQAogICAgIHVpbnQgSVJRKQogewogICAgIGlmIChQQ0lQaHlzRW50cnkpIHsKLSAgICAgICAgaWYgKF9QQ0lCSU9TX3NldElSUShpbmZvLT5zbG90LmkgPj4gOCxpbnRQaW4sSVJRLFBDSUVudHJ5KSkgewotICAgICAgICAgICAgaW5mby0+dS50eXBlMC5JbnRlcnJ1cHRQaW4gPSBpbnRQaW47Ci0gICAgICAgICAgICBpbmZvLT51LnR5cGUwLkludGVycnVwdExpbmUgPSBJUlE7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisJaWYgKF9QQ0lCSU9TX3NldElSUShpbmZvLT5zbG90LmkgPj4gOCxpbnRQaW4sSVJRLFBDSUVudHJ5KSkgeworCSAgICBpbmZvLT51LnR5cGUwLkludGVycnVwdFBpbiA9IGludFBpbjsKKwkgICAgaW5mby0+dS50eXBlMC5JbnRlcnJ1cHRMaW5lID0gSVJROworCSAgICByZXR1cm4gdHJ1ZTsKKwkgICAgfQorCXJldHVybiBmYWxzZTsKKwl9CiAKICAgICAvKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHRoaXMgdmlhIHRoZSBQQ0kgQklPUyBmdW5jdGlvbnMgKi8KICAgICByZXR1cm4gZmFsc2U7CkBAIC02NjgsNyArNjY4LDcgQEAKICAgICB1bG9uZyBzcGVjaWFsQ3ljbGVEYXRhKQogewogICAgIGlmIChQQ0lQaHlzRW50cnkpCi0gICAgICAgIF9QQ0lCSU9TX3NwZWNpYWxDeWNsZShidXMsc3BlY2lhbEN5Y2xlRGF0YSxQQ0lFbnRyeSk7CisJX1BDSUJJT1Nfc3BlY2lhbEN5Y2xlKGJ1cyxzcGVjaWFsQ3ljbGVEYXRhLFBDSUVudHJ5KTsKICAgICAvKiBXZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHRoaXMgdmlhIHRoZSBQQ0kgQklPUyBmdW5jdGlvbnMgKi8KIH0KIApAQCAtNjk5LDE0ICs2OTksMTQgQEAKICAgICBpbnQgICAgIGVuZENvdW50ID0gY291bnQgLSBtaWRkbGVDb3VudCAqIDQgLSBzdGFydENvdW50OwogCiAgICAgZm9yIChpID0gMCxwYiA9IGRzdDsgaSA8IHN0YXJ0Q291bnQ7IGkrKywgaW5kZXgrKykgewotICAgICAgICAqcGIrKyA9ICh1Y2hhcilQQ0lfYWNjZXNzUmVnKGluZGV4LDAsUENJX1JFQURfQllURSxpbmZvKTsKLSAgICAgICAgfQorCSpwYisrID0gKHVjaGFyKVBDSV9hY2Nlc3NSZWcoaW5kZXgsMCxQQ0lfUkVBRF9CWVRFLGluZm8pOworCX0KICAgICBmb3IgKGkgPSAwLHBkID0gKHVsb25nKilwYjsgaSA8IG1pZGRsZUNvdW50OyBpKyssIGluZGV4ICs9IDQpIHsKLSAgICAgICAgKnBkKysgPSAodWxvbmcpUENJX2FjY2Vzc1JlZyhpbmRleCwwLFBDSV9SRUFEX0RXT1JELGluZm8pOwotICAgICAgICB9CisJKnBkKysgPSAodWxvbmcpUENJX2FjY2Vzc1JlZyhpbmRleCwwLFBDSV9SRUFEX0RXT1JELGluZm8pOworCX0KICAgICBmb3IgKGkgPSAwLHBiID0gKHVjaGFyKilwZDsgaSA8IGVuZENvdW50OyBpKyssIGluZGV4KyspIHsKLSAgICAgICAgKnBiKysgPSAodWNoYXIpUENJX2FjY2Vzc1JlZyhpbmRleCwwLFBDSV9SRUFEX0JZVEUsaW5mbyk7Ci0gICAgICAgIH0KKwkqcGIrKyA9ICh1Y2hhcilQQ0lfYWNjZXNzUmVnKGluZGV4LDAsUENJX1JFQURfQllURSxpbmZvKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03MzYsMTIgKzczNiwxMiBAQAogICAgIGludCAgICAgZW5kQ291bnQgPSBjb3VudCAtIG1pZGRsZUNvdW50ICogNCAtIHN0YXJ0Q291bnQ7CiAKICAgICBmb3IgKGkgPSAwLHBiID0gc3JjOyBpIDwgc3RhcnRDb3VudDsgaSsrLCBpbmRleCsrKSB7Ci0gICAgICAgIFBDSV9hY2Nlc3NSZWcoaW5kZXgsKnBiKyssUENJX1dSSVRFX0JZVEUsaW5mbyk7Ci0gICAgICAgIH0KKwlQQ0lfYWNjZXNzUmVnKGluZGV4LCpwYisrLFBDSV9XUklURV9CWVRFLGluZm8pOworCX0KICAgICBmb3IgKGkgPSAwLHBkID0gKHVsb25nKilwYjsgaSA8IG1pZGRsZUNvdW50OyBpKyssIGluZGV4ICs9IDQpIHsKLSAgICAgICAgUENJX2FjY2Vzc1JlZyhpbmRleCwqcGQrKyxQQ0lfV1JJVEVfRFdPUkQsaW5mbyk7Ci0gICAgICAgIH0KKwlQQ0lfYWNjZXNzUmVnKGluZGV4LCpwZCsrLFBDSV9XUklURV9EV09SRCxpbmZvKTsKKwl9CiAgICAgZm9yIChpID0gMCxwYiA9ICh1Y2hhciopcGQ7IGkgPCBlbmRDb3VudDsgaSsrLCBpbmRleCsrKSB7Ci0gICAgICAgIFBDSV9hY2Nlc3NSZWcoaW5kZXgsKnBiKyssUENJX1dSSVRFX0JZVEUsaW5mbyk7Ci0gICAgICAgIH0KKwlQQ0lfYWNjZXNzUmVnKGluZGV4LCpwYisrLFBDSV9XUklURV9CWVRFLGluZm8pOworCX0KIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NvbW1vbi91bml4aW8uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NvbW1vbi91bml4aW8uYwppbmRleCAwNGFhNDcwLi5jM2E2NmE3IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9jb21tb24vdW5peGlvLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uL3VuaXhpby5jCkBAIC02NSw5ICs2NSw5IEBACiAgICAgc3RyY2F0KGZpbGVuYW1lLGJsay0+ZF9uYW1lKTsKICAgICBzdGF0KGZpbGVuYW1lLCZzdCk7CiAgICAgaWYgKCEoc3Quc3RfbW9kZSAmIFNfSVdSSVRFKSkKLSAgICAgICAgZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX1JFQURPTkxZOworCWZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9SRUFET05MWTsKICAgICBpZiAoc3Quc3RfbW9kZSAmIFNfSUZESVIpCi0gICAgICAgIGZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9ESVJFQ1RPUlk7CisJZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX0RJUkVDVE9SWTsKICAgICBmaW5kRGF0YS0+c2l6ZUxvID0gc3Quc3Rfc2l6ZTsKICAgICBmaW5kRGF0YS0+c2l6ZUhpID0gMDsKICAgICBzdHJuY3B5KGZpbmREYXRhLT5uYW1lLGJsay0+ZF9uYW1lLFBNX01BWF9QQVRIKTsKQEAgLTkxLDI0ICs5MSwyNCBAQAogICAgIFBNX2JhY2tzbGFzaChmdWxscGF0aCk7CiAgICAgc3RyY2F0KGZ1bGxwYXRoLCBkaXJlLT5kX25hbWUpOwogICAgIGlmIChzdGF0KGZ1bGxwYXRoLCAmc3QpICE9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgZm9yICg7IGkgPCAoaW50KXN0cmxlbihkaXJlLT5kX25hbWUpICYmIGogPCAoaW50KXN0cmxlbihwYXR0ZXJuKTsgaSsrLCBqKyspIHsKLSAgICAgICAgaWYgKHBhdHRlcm5bal0gPT0gJyonICYmIGxhc3RjaGFyICE9ICdcXCcpIHsKLSAgICAgICAgICAgIGlmIChwYXR0ZXJuW2orMV0gPT0gJ1wwJykKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIHdoaWxlIChkaXJlLT5kX25hbWVbaSsrXSAhPSBwYXR0ZXJuW2orMV0pIHsKLSAgICAgICAgICAgICAgICBpZiAoZGlyZS0+ZF9uYW1lW2ldID09ICdcMCcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpIC09IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRpcmUtPmRfbmFtZVtpXSAhPSBwYXR0ZXJuW2pdICYmCi0gICAgICAgICAgICAgICAgIShwYXR0ZXJuW2pdID09ICc/JyAmJiBsYXN0Y2hhciAhPSAnXFwnKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbGFzdGNoYXIgPSBwYXR0ZXJuW2ldOwotICAgICAgICB9CisJaWYgKHBhdHRlcm5bal0gPT0gJyonICYmIGxhc3RjaGFyICE9ICdcXCcpIHsKKwkgICAgaWYgKHBhdHRlcm5baisxXSA9PSAnXDAnKQorCQlyZXR1cm4gdHJ1ZTsKKwkgICAgd2hpbGUgKGRpcmUtPmRfbmFtZVtpKytdICE9IHBhdHRlcm5baisxXSkgeworCQlpZiAoZGlyZS0+ZF9uYW1lW2ldID09ICdcMCcpCisJCSAgICByZXR1cm4gZmFsc2U7CisJCX0KKwkgICAgaSAtPSAyOworCSAgICB9CisJZWxzZSBpZiAoZGlyZS0+ZF9uYW1lW2ldICE9IHBhdHRlcm5bal0gJiYKKwkJIShwYXR0ZXJuW2pdID09ICc/JyAmJiBsYXN0Y2hhciAhPSAnXFwnKSkKKwkgICAgcmV0dXJuIGZhbHNlOworCWxhc3RjaGFyID0gcGF0dGVybltpXTsKKwl9CiAgICAgaWYgKGogPT0gKGludClzdHJsZW4ocGF0dGVybikgJiYgaSA9PSAoaW50KXN0cmxlbihkaXJlLT5kX25hbWUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEyNiwyMyArMTI2LDIzIEBACiAgICAgY2hhciAgICAgICAgICAgIGV4dFtQTV9NQVhfUEFUSF07CiAKICAgICBpZiAoKGQgPSBQTV9tYWxsb2Moc2l6ZW9mKCpkKSkpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBQTV9GSUxFX0lOVkFMSUQ7CisJcmV0dXJuIFBNX0ZJTEVfSU5WQUxJRDsKICAgICBQTV9zcGxpdHBhdGgoZmlsZW5hbWUsTlVMTCxkLT5wYXRoLG5hbWUsZXh0KTsKICAgICBzdHJjcHkoZC0+bWFzayxuYW1lKTsKICAgICBzdHJjYXQoZC0+bWFzayxleHQpOwogICAgIGlmIChzdHJsZW4oZC0+cGF0aCkgPT0gMCkKLSAgICAgICAgc3RyY3B5KGQtPnBhdGgsICIuIik7CisJc3RyY3B5KGQtPnBhdGgsICIuIik7CiAgICAgaWYgKGQtPnBhdGhbc3RybGVuKGQtPnBhdGgpLTFdID09ICcvJykKLSAgICAgICAgZC0+cGF0aFtzdHJsZW4oZC0+cGF0aCktMV0gPSAwOworCWQtPnBhdGhbc3RybGVuKGQtPnBhdGgpLTFdID0gMDsKICAgICBpZiAoKGQtPmQgPSBvcGVuZGlyKGQtPnBhdGgpKSAhPSBOVUxMKSB7Ci0gICAgICAgIHdoaWxlICgoZGlyZSA9IHJlYWRkaXIoZC0+ZCkpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChmaWxlbWF0Y2goZC0+bWFzayxkLT5wYXRoLGRpcmUpKSB7Ci0gICAgICAgICAgICAgICAgY29udmVydEZpbmREYXRhKGZpbmREYXRhLGRpcmUsZC0+cGF0aCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBjbG9zZWRpcihkLT5kKTsKLSAgICAgICAgfQorCXdoaWxlICgoZGlyZSA9IHJlYWRkaXIoZC0+ZCkpICE9IE5VTEwpIHsKKwkgICAgaWYgKGZpbGVtYXRjaChkLT5tYXNrLGQtPnBhdGgsZGlyZSkpIHsKKwkJY29udmVydEZpbmREYXRhKGZpbmREYXRhLGRpcmUsZC0+cGF0aCk7CisJCXJldHVybiBkOworCQl9CisJICAgIH0KKwljbG9zZWRpcihkLT5kKTsKKwl9CiAgICAgUE1fZnJlZShkKTsKICAgICByZXR1cm4gUE1fRklMRV9JTlZBTElEOwogfQpAQCAtMTU5LDExICsxNTksMTEgQEAKICAgICBzdHJ1Y3QgZGlyZW50ICAgKmRpcmU7CiAKICAgICB3aGlsZSAoKGRpcmUgPSByZWFkZGlyKGQtPmQpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChmaWxlbWF0Y2goZC0+bWFzayxkLT5wYXRoLGRpcmUpKSB7Ci0gICAgICAgICAgICBjb252ZXJ0RmluZERhdGEoZmluZERhdGEsZGlyZSxkLT5wYXRoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKGZpbGVtYXRjaChkLT5tYXNrLGQtPnBhdGgsZGlyZSkpIHsKKwkgICAgY29udmVydEZpbmREYXRhKGZpbmREYXRhLGRpcmUsZC0+cGF0aCk7CisJICAgIHJldHVybiB0cnVlOworCSAgICB9CisJfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgY2hhciBkcml2ZSkKIHsKICAgICBpZiAoZHJpdmUgPT0gMykKLSAgICAgICAgcmV0dXJuIHRydWU7CisJcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0yMzAsOSArMjMwLDkgQEAKICAgICBzdGF0KGZpbGVuYW1lLCZzdCk7CiAgICAgbW9kZSA9IHN0LnN0X21vZGU7CiAgICAgaWYgKGF0dHJpYiAmIFBNX0ZJTEVfUkVBRE9OTFkpCi0gICAgICAgIG1vZGUgJj0gflNfSVdSSVRFOworCW1vZGUgJj0gflNfSVdSSVRFOwogICAgIGVsc2UKLSAgICAgICAgbW9kZSB8PSBTX0lXUklURTsKKwltb2RlIHw9IFNfSVdSSVRFOwogICAgIGNobW9kKGZpbGVuYW1lLG1vZGUpOwogfQogCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAogICAgIHN0YXQoZmlsZW5hbWUsJnN0KTsKICAgICBpZiAoc3Quc3RfbW9kZSAmIFNfSVdSSVRFKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gUE1fRklMRV9SRUFET05MWTsKIH0KIApAQCAtMjgwLDcgKzI4MCw3IEBACiAgICAgaWJvb2wgZ21UaW1lLAogICAgIFBNX3RpbWUgKnRpbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgKHZvaWQpZmlsZW5hbWU7CiAgICAgKHZvaWQpZ21UaW1lOwogICAgICh2b2lkKXRpbWU7CkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICBpYm9vbCBnbVRpbWUsCiAgICAgUE1fdGltZSAqdGltZSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyEKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyEgKi8KICAgICAodm9pZClmaWxlbmFtZTsKICAgICAodm9pZClnbVRpbWU7CiAgICAgKHZvaWQpdGltZTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NvbW1vbi92Z2FzdGF0ZS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uL3ZnYXN0YXRlLmMKaW5kZXggM2JlMTRlOC4uODA1NmU5YSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uL3ZnYXN0YXRlLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY29tbW9uL3ZnYXN0YXRlLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAqIHdoYXQgd2UgbmVlZC4KICAgICAgKi8KICAgICBmb3IgKGkgPSAwOyBpIDw9IDEwOyBpKyspCi0gICAgICAgIFBNX291dHBiKDB4ODAsIDApOworCVBNX291dHBiKDB4ODAsIDApOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTUyLDkgKzE1Miw5IEBACiAKICAgICBfcG9ydF9vdXQoMCwgUEVMX0lSKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgNzY4OyBpKyspIHsKLSAgICAgICAgdmdhX2RlbGF5KCk7Ci0gICAgICAgICpwYWwrKyA9IF9wb3J0X2luKFBFTF9EKTsKLSAgICAgICAgfQorCXZnYV9kZWxheSgpOworCSpwYWwrKyA9IF9wb3J0X2luKFBFTF9EKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjksOSArMTY5LDkgQEAKICAgICAvKiByZXN0b3JlIHNhdmVkIHBhbGV0dGUgKi8KICAgICBfcG9ydF9vdXQoMCwgUEVMX0lXKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgNzY4OyBpKyspIHsKLSAgICAgICAgdmdhX2RlbGF5KCk7Ci0gICAgICAgIF9wb3J0X291dCgqcGFsKyssIFBFTF9EKTsKLSAgICAgICAgfQorCXZnYV9kZWxheSgpOworCV9wb3J0X291dCgqcGFsKyssIFBFTF9EKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNDcsMjUgKzI0NywyNSBAQAogCiAgICAgLyogU2F2ZSBzdGF0ZSBvZiBWR0EgcmVnaXN0ZXJzICovCiAgICAgZm9yIChpID0gMDsgaSA8IENSVF9DOyBpKyspIHsKLSAgICAgICAgX3BvcnRfb3V0KGksIENSVF9JKTsKLSAgICAgICAgcmVnc1tDUlQgKyBpXSA9IF9wb3J0X2luKENSVF9EKTsKLSAgICAgICAgfQorCV9wb3J0X291dChpLCBDUlRfSSk7CisJcmVnc1tDUlQgKyBpXSA9IF9wb3J0X2luKENSVF9EKTsKKwl9CiAgICAgZm9yIChpID0gMDsgaSA8IEFUVF9DOyBpKyspIHsKLSAgICAgICAgX3BvcnRfaW4oSVMxX1IpOwotICAgICAgICB2Z2FfZGVsYXkoKTsKLSAgICAgICAgX3BvcnRfb3V0KGksIEFUVF9JVyk7Ci0gICAgICAgIHZnYV9kZWxheSgpOwotICAgICAgICByZWdzW0FUVCArIGldID0gX3BvcnRfaW4oQVRUX1IpOwotICAgICAgICB2Z2FfZGVsYXkoKTsKLSAgICAgICAgfQorCV9wb3J0X2luKElTMV9SKTsKKwl2Z2FfZGVsYXkoKTsKKwlfcG9ydF9vdXQoaSwgQVRUX0lXKTsKKwl2Z2FfZGVsYXkoKTsKKwlyZWdzW0FUVCArIGldID0gX3BvcnRfaW4oQVRUX1IpOworCXZnYV9kZWxheSgpOworCX0KICAgICBmb3IgKGkgPSAwOyBpIDwgR1JBX0M7IGkrKykgewotICAgICAgICBfcG9ydF9vdXQoaSwgR1JBX0kpOwotICAgICAgICByZWdzW0dSQSArIGldID0gX3BvcnRfaW4oR1JBX0QpOwotICAgICAgICB9CisJX3BvcnRfb3V0KGksIEdSQV9JKTsKKwlyZWdzW0dSQSArIGldID0gX3BvcnRfaW4oR1JBX0QpOworCX0KICAgICBmb3IgKGkgPSAwOyBpIDwgU0VRX0M7IGkrKykgewotICAgICAgICBfcG9ydF9vdXQoaSwgU0VRX0kpOwotICAgICAgICByZWdzW1NFUSArIGldID0gX3BvcnRfaW4oU0VRX0QpOwotICAgICAgICB9CisJX3BvcnRfb3V0KGksIFNFUV9JKTsKKwlyZWdzW1NFUSArIGldID0gX3BvcnRfaW4oU0VRX0QpOworCX0KICAgICByZWdzW01JU10gPSBfcG9ydF9pbihNSVNfUik7CiAKICAgICAvKiBTYXZlIHRoZSBWR0EgcGFsZXR0ZSB2YWx1ZXMgKi8KQEAgLTMwMiw3ICszMDIsNyBAQAogCiAgICAgLyogRGVsYXkgdG8gYWxsb3cgY2xvY2sgY2hhbmdlIHRvIHNldHRsZSAqLwogICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQotICAgICAgICB2Z2FfZGVsYXkoKTsKKwl2Z2FfZGVsYXkoKTsKIAogICAgIC8qIFN5bmNocm9ub3VzIHJlc2V0IG9uICovCiAgICAgX3BvcnRfb3V0KDB4MDAsU0VRX0kpOwpAQCAtMzEyLDkgKzMxMiw5IEBACiAgICAgX3BvcnRfb3V0KDEsIFNFUV9JKTsKICAgICBfcG9ydF9vdXQocmVnc1tTRVEgKyAxXSB8IDB4MjAsIFNFUV9EKTsKICAgICBmb3IgKGkgPSAyOyBpIDwgU0VRX0M7IGkrKykgewotICAgICAgICBfcG9ydF9vdXQoaSwgU0VRX0kpOwotICAgICAgICBfcG9ydF9vdXQocmVnc1tTRVEgKyBpXSwgU0VRX0QpOwotICAgICAgICB9CisJX3BvcnRfb3V0KGksIFNFUV9JKTsKKwlfcG9ydF9vdXQocmVnc1tTRVEgKyBpXSwgU0VRX0QpOworCX0KIAogICAgIC8qIFN5bmNocm9ub3VzIHJlc2V0IG9mZiAqLwogICAgIF9wb3J0X291dCgweDAwLFNFUV9JKTsKQEAgLTMyNCwyMSArMzI0LDIxIEBACiAgICAgX3BvcnRfb3V0KDB4MTEsIENSVF9JKTsKICAgICBfcG9ydF9vdXQoX3BvcnRfaW4oQ1JUX0QpICYgMHg3RiwgQ1JUX0QpOwogICAgIGZvciAoaSA9IDA7IGkgPCBDUlRfQzsgaSsrKSB7Ci0gICAgICAgIF9wb3J0X291dChpLCBDUlRfSSk7Ci0gICAgICAgIF9wb3J0X291dChyZWdzW0NSVCArIGldLCBDUlRfRCk7Ci0gICAgICAgIH0KKwlfcG9ydF9vdXQoaSwgQ1JUX0kpOworCV9wb3J0X291dChyZWdzW0NSVCArIGldLCBDUlRfRCk7CisJfQogICAgIGZvciAoaSA9IDA7IGkgPCBHUkFfQzsgaSsrKSB7Ci0gICAgICAgIF9wb3J0X291dChpLCBHUkFfSSk7Ci0gICAgICAgIF9wb3J0X291dChyZWdzW0dSQSArIGldLCBHUkFfRCk7Ci0gICAgICAgIH0KKwlfcG9ydF9vdXQoaSwgR1JBX0kpOworCV9wb3J0X291dChyZWdzW0dSQSArIGldLCBHUkFfRCk7CisJfQogICAgIGZvciAoaSA9IDA7IGkgPCBBVFRfQzsgaSsrKSB7Ci0gICAgICAgIF9wb3J0X2luKElTMV9SKTsgICAgICAgIC8qIHJlc2V0IGZsaXAtZmxvcCAqLwotICAgICAgICB2Z2FfZGVsYXkoKTsKLSAgICAgICAgX3BvcnRfb3V0KGksIEFUVF9JVyk7Ci0gICAgICAgIHZnYV9kZWxheSgpOwotICAgICAgICBfcG9ydF9vdXQocmVnc1tBVFQgKyBpXSwgQVRUX0lXKTsKLSAgICAgICAgdmdhX2RlbGF5KCk7Ci0gICAgICAgIH0KKwlfcG9ydF9pbihJUzFfUik7ICAgICAgICAvKiByZXNldCBmbGlwLWZsb3AgKi8KKwl2Z2FfZGVsYXkoKTsKKwlfcG9ydF9vdXQoaSwgQVRUX0lXKTsKKwl2Z2FfZGVsYXkoKTsKKwlfcG9ydF9vdXQocmVnc1tBVFQgKyBpXSwgQVRUX0lXKTsKKwl2Z2FfZGVsYXkoKTsKKwl9CiAKICAgICAvKiBFbnN1cmUgdGhlIFZHQSBzY3JlZW4gaXMgdHVybmVkIG9uICovCiAgICAgUE1fdmdhVW5ibGFua0Rpc3BsYXkoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NwdWluZm8uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2NwdWluZm8uYwppbmRleCBlMjQ0NmE0Li5hYzYyZTgxIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9jcHVpbmZvLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vY3B1aW5mby5jCkBAIC0xNjgsMTQ0ICsxNjgsMTQ0IEBACiAgICAgc3RhdGljIGlib29sICAgIGZpcnN0VGltZSA9IHRydWU7CiAKICAgICBpZiAoX0NQVV9oYXZlQ1BVSUQoKSkgewotICAgICAgICBjcHUgPSBfQ1BVX2NoZWNrQ1BVSUQoKTsKLSAgICAgICAgdmVuZG9yID0gY3B1ICYgfkNQVV9tYXNrOwotICAgICAgICBpZiAodmVuZG9yID09IENQVV9JbnRlbCkgewotICAgICAgICAgICAgLyogQ2hlY2sgZm9yIEludGVsIHByb2Nlc3NvcnMgKi8KLSAgICAgICAgICAgIHN3aXRjaCAoY3B1ICYgQ1BVX21hc2spIHsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IGNwdSA9IENQVV9pNDg2OyAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNTogY3B1ID0gQ1BVX1BlbnRpdW07ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgICAgICBpZiAoKG1vZGVsID0gX0NQVV9nZXRDUFVJRE1vZGVsKCkpID09IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBjcHUgPSBDUFVfUGVudGl1bVBybzsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobW9kZWwgPD0gNikgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVTaXplID0gX0NQVV9nZXRDYWNoZVNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobW9kZWwgPT0gNSAmJiBjYWNoZVNpemUgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWwgPT0gNSAmJiBjYWNoZVNpemUgPT0gMjU2KSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbCA9PSA2ICYmIGNhY2hlU2l6ZSA9PSAxMjgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdSA9IENQVV9DZWxlcm9uOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdSA9IENQVV9QZW50aXVtSUk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsID49IDcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGVsIDcgPT0gUGVudGl1bSBJSUkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1vZGVsIDggPT0gQ2VsZXJvbi9QZW50aXVtIElJSSBDb3BwZXJtaW5lICovCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVNpemUgPSBfQ1BVX2dldENhY2hlU2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtb2RlbCA9PSA4ICYmIGNhY2hlU2l6ZSA9PSAxMjgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdSA9IENQVV9DZWxlcm9uOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdSA9IENQVV9QZW50aXVtSUlJOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBjcHUgPSBDUFVfVW5rSW50ZWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh2ZW5kb3IgPT0gQ1BVX0N5cml4KSB7Ci0gICAgICAgICAgICAvKiBDaGVjayBmb3IgQ3lyaXggcHJvY2Vzc29ycyAqLwotICAgICAgICAgICAgc3dpdGNoIChjcHUgJiBDUFVfbWFzaykgewotICAgICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKChtb2RlbCA9IF9DUFVfZ2V0Q1BVSURNb2RlbCgpKSA9PSA0KQotICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX0N5cml4TWVkaWFHWDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX1Vua0N5cml4OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgobW9kZWwgPSBfQ1BVX2dldENQVUlETW9kZWwoKSkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGNwdSA9IENQVV9DeXJpeDZ4ODY7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsID09IDQpCi0gICAgICAgICAgICAgICAgICAgICAgICBjcHUgPSBDUFVfQ3lyaXhNZWRpYUdYbTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX1Vua0N5cml4OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgobW9kZWwgPSBfQ1BVX2dldENQVUlETW9kZWwoKSkgPD0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNwdSA9IENQVV9DeXJpeDZ4ODZNWDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX1Vua0N5cml4OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBjcHUgPSBDUFVfVW5rQ3lyaXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh2ZW5kb3IgPT0gQ1BVX0FNRCkgewotICAgICAgICAgICAgLyogQ2hlY2sgZm9yIEFNRCBwcm9jZXNzb3JzICovCi0gICAgICAgICAgICBzd2l0Y2ggKGNwdSAmIENQVV9tYXNrKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICBpZiAoKG1vZGVsID0gX0NQVV9nZXRDUFVJRE1vZGVsKCkpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjcHUgPSBDUFVfQU1EQW01eDg2OwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjcHUgPSBDUFVfQU1EQW00ODY7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICAgICAgaWYgKChtb2RlbCA9IF9DUFVfZ2V0Q1BVSURNb2RlbCgpKSA8PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX0FNREs1OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtb2RlbCA8PSA3KQotICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX0FNREs2OwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtb2RlbCA9PSA4KQotICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX0FNREs2XzI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsID09IDkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjcHUgPSBDUFVfQU1ESzZfSUlJOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtb2RlbCA9PSAxMykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9DUFVfZ2V0Q1BVSURTdGVwcGluZygpIDw9IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX0FNREs2X0lJSXBsdXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX0FNREs2XzJwbHVzOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjcHUgPSBDUFVfVW5rQU1EOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgobW9kZWwgPSBfQ1BVX2dldENQVUlETW9kZWwoKSkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNwdSA9IENQVV9BTUREdXJvbjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX0FNREF0aGxvbjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX1Vua0FNRDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHZlbmRvciA9PSBDUFVfSURUKSB7Ci0gICAgICAgICAgICAvKiBDaGVjayBmb3IgSURUIFdpbkNoaXAgcHJvY2Vzc29ycyAqLwotICAgICAgICAgICAgc3dpdGNoIChjcHUgJiBDUFVfbWFzaykgewotICAgICAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICAgICAgaWYgKChtb2RlbCA9IF9DUFVfZ2V0Q1BVSURNb2RlbCgpKSA8PSA0KQotICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX1dpbkNoaXBDNjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobW9kZWwgPT0gOCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNwdSA9IENQVV9XaW5DaGlwMjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX1Vua0lEVDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgY3B1ID0gQ1BVX1Vua0lEVDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogQXNzdW1lIGEgUGVudGl1bSBjb21wYXRpYmxlIEludGVsIGNsb25lICovCi0gICAgICAgICAgICBjcHUgPSBDUFVfUGVudGl1bTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNwdSB8IHZlbmRvciB8IChfQ1BVX2dldENQVUlEU3RlcHBpbmcoKSA8PCBDUFVfc3RlcHBpbmdTaGlmdCk7Ci0gICAgICAgIH0KKwljcHUgPSBfQ1BVX2NoZWNrQ1BVSUQoKTsKKwl2ZW5kb3IgPSBjcHUgJiB+Q1BVX21hc2s7CisJaWYgKHZlbmRvciA9PSBDUFVfSW50ZWwpIHsKKwkgICAgLyogQ2hlY2sgZm9yIEludGVsIHByb2Nlc3NvcnMgKi8KKwkgICAgc3dpdGNoIChjcHUgJiBDUFVfbWFzaykgeworCQljYXNlIDQ6IGNwdSA9IENQVV9pNDg2OyAgICAgICAgIGJyZWFrOworCQljYXNlIDU6IGNwdSA9IENQVV9QZW50aXVtOyAgICAgIGJyZWFrOworCQljYXNlIDY6CisJCSAgICBpZiAoKG1vZGVsID0gX0NQVV9nZXRDUFVJRE1vZGVsKCkpID09IDEpCisJCQljcHUgPSBDUFVfUGVudGl1bVBybzsKKwkJICAgIGVsc2UgaWYgKG1vZGVsIDw9IDYpIHsKKwkJCWNhY2hlU2l6ZSA9IF9DUFVfZ2V0Q2FjaGVTaXplKCk7CisJCQlpZiAoKG1vZGVsID09IDUgJiYgY2FjaGVTaXplID09IDApIHx8CisJCQkgICAgKG1vZGVsID09IDUgJiYgY2FjaGVTaXplID09IDI1NikgfHwKKwkJCSAgICAobW9kZWwgPT0gNiAmJiBjYWNoZVNpemUgPT0gMTI4KSkKKwkJCSAgICBjcHUgPSBDUFVfQ2VsZXJvbjsKKwkJCWVsc2UKKwkJCSAgICBjcHUgPSBDUFVfUGVudGl1bUlJOworCQkJfQorCQkgICAgZWxzZSBpZiAobW9kZWwgPj0gNykgeworCQkJLyogTW9kZWwgNyA9PSBQZW50aXVtIElJSSAqLworCQkJLyogTW9kZWwgOCA9PSBDZWxlcm9uL1BlbnRpdW0gSUlJIENvcHBlcm1pbmUgKi8KKwkJCWNhY2hlU2l6ZSA9IF9DUFVfZ2V0Q2FjaGVTaXplKCk7CisJCQlpZiAoKG1vZGVsID09IDggJiYgY2FjaGVTaXplID09IDEyOCkpCisJCQkgICAgY3B1ID0gQ1BVX0NlbGVyb247CisJCQllbHNlCisJCQkgICAgY3B1ID0gQ1BVX1BlbnRpdW1JSUk7CisJCQl9CisJCSAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIGNwdSA9IENQVV9VbmtJbnRlbDsKKwkJfQorCSAgICB9CisJZWxzZSBpZiAodmVuZG9yID09IENQVV9DeXJpeCkgeworCSAgICAvKiBDaGVjayBmb3IgQ3lyaXggcHJvY2Vzc29ycyAqLworCSAgICBzd2l0Y2ggKGNwdSAmIENQVV9tYXNrKSB7CisJCWNhc2UgNDoKKwkJICAgIGlmICgobW9kZWwgPSBfQ1BVX2dldENQVUlETW9kZWwoKSkgPT0gNCkKKwkJCWNwdSA9IENQVV9DeXJpeE1lZGlhR1g7CisJCSAgICBlbHNlCisJCQljcHUgPSBDUFVfVW5rQ3lyaXg7CisJCSAgICBicmVhazsKKwkJY2FzZSA1OgorCQkgICAgaWYgKChtb2RlbCA9IF9DUFVfZ2V0Q1BVSURNb2RlbCgpKSA9PSAyKQorCQkJY3B1ID0gQ1BVX0N5cml4Nng4NjsKKwkJICAgIGVsc2UgaWYgKG1vZGVsID09IDQpCisJCQljcHUgPSBDUFVfQ3lyaXhNZWRpYUdYbTsKKwkJICAgIGVsc2UKKwkJCWNwdSA9IENQVV9VbmtDeXJpeDsKKwkJICAgIGJyZWFrOworCQljYXNlIDY6CisJCSAgICBpZiAoKG1vZGVsID0gX0NQVV9nZXRDUFVJRE1vZGVsKCkpIDw9IDEpCisJCQljcHUgPSBDUFVfQ3lyaXg2eDg2TVg7CisJCSAgICBlbHNlCisJCQljcHUgPSBDUFVfVW5rQ3lyaXg7CisJCSAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIGNwdSA9IENQVV9VbmtDeXJpeDsKKwkJfQorCSAgICB9CisJZWxzZSBpZiAodmVuZG9yID09IENQVV9BTUQpIHsKKwkgICAgLyogQ2hlY2sgZm9yIEFNRCBwcm9jZXNzb3JzICovCisJICAgIHN3aXRjaCAoY3B1ICYgQ1BVX21hc2spIHsKKwkJY2FzZSA0OgorCQkgICAgaWYgKChtb2RlbCA9IF9DUFVfZ2V0Q1BVSURNb2RlbCgpKSA9PSAwKQorCQkJY3B1ID0gQ1BVX0FNREFtNXg4NjsKKwkJICAgIGVsc2UKKwkJCWNwdSA9IENQVV9BTURBbTQ4NjsKKwkJICAgIGJyZWFrOworCQljYXNlIDU6CisJCSAgICBpZiAoKG1vZGVsID0gX0NQVV9nZXRDUFVJRE1vZGVsKCkpIDw9IDMpCisJCQljcHUgPSBDUFVfQU1ESzU7CisJCSAgICBlbHNlIGlmIChtb2RlbCA8PSA3KQorCQkJY3B1ID0gQ1BVX0FNREs2OworCQkgICAgZWxzZSBpZiAobW9kZWwgPT0gOCkKKwkJCWNwdSA9IENQVV9BTURLNl8yOworCQkgICAgZWxzZSBpZiAobW9kZWwgPT0gOSkKKwkJCWNwdSA9IENQVV9BTURLNl9JSUk7CisJCSAgICBlbHNlIGlmIChtb2RlbCA9PSAxMykgeworCQkJaWYgKF9DUFVfZ2V0Q1BVSURTdGVwcGluZygpIDw9IDMpCisJCQkgICAgY3B1ID0gQ1BVX0FNREs2X0lJSXBsdXM7CisJCQllbHNlCisJCQkgICAgY3B1ID0gQ1BVX0FNREs2XzJwbHVzOworCQkJfQorCQkgICAgZWxzZQorCQkJY3B1ID0gQ1BVX1Vua0FNRDsKKwkJICAgIGJyZWFrOworCQljYXNlIDY6CisJCSAgICBpZiAoKG1vZGVsID0gX0NQVV9nZXRDUFVJRE1vZGVsKCkpID09IDMpCisJCQljcHUgPSBDUFVfQU1ERHVyb247CisJCSAgICBlbHNlCisJCQljcHUgPSBDUFVfQU1EQXRobG9uOworCQkgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICBjcHUgPSBDUFVfVW5rQU1EOworCQl9CisJICAgIH0KKwllbHNlIGlmICh2ZW5kb3IgPT0gQ1BVX0lEVCkgeworCSAgICAvKiBDaGVjayBmb3IgSURUIFdpbkNoaXAgcHJvY2Vzc29ycyAqLworCSAgICBzd2l0Y2ggKGNwdSAmIENQVV9tYXNrKSB7CisJCWNhc2UgNToKKwkJICAgIGlmICgobW9kZWwgPSBfQ1BVX2dldENQVUlETW9kZWwoKSkgPD0gNCkKKwkJCWNwdSA9IENQVV9XaW5DaGlwQzY7CisJCSAgICBlbHNlIGlmIChtb2RlbCA9PSA4KQorCQkJY3B1ID0gQ1BVX1dpbkNoaXAyOworCQkgICAgZWxzZQorCQkJY3B1ID0gQ1BVX1Vua0lEVDsKKwkJICAgIGJyZWFrOworCQlkZWZhdWx0OgorCQkgICAgY3B1ID0gQ1BVX1Vua0lEVDsKKwkJfQorCSAgICB9CisJZWxzZSB7CisJICAgIC8qIEFzc3VtZSBhIFBlbnRpdW0gY29tcGF0aWJsZSBJbnRlbCBjbG9uZSAqLworCSAgICBjcHUgPSBDUFVfUGVudGl1bTsKKwkgICAgfQorCXJldHVybiBjcHUgfCB2ZW5kb3IgfCAoX0NQVV9nZXRDUFVJRFN0ZXBwaW5nKCkgPDwgQ1BVX3N0ZXBwaW5nU2hpZnQpOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKF9DUFVfY2hlY2s4MDM4NigpKQotICAgICAgICAgICAgY3B1ID0gQ1BVX2kzODY7Ci0gICAgICAgIGVsc2UgIGlmIChfQ1BVX2NoZWNrODA0ODYoKSkgewotICAgICAgICAgICAgLyogSWYgd2UgZ2V0IGhlcmUgd2UgbWF5IGhhdmUgYSBDeXJpeCBwcm9jZXNzb3Igc28gd2UgY2FuIHRyeQotICAgICAgICAgICAgICogZW5hYmxpbmcgdGhlIENQVUlEIGluc3RydWN0aW9uIGFuZCB0cnlpbmcgYWdhaW4uCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChmaXJzdFRpbWUpIHsKLSAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBfQ1BVX2VuYWJsZUN5cml4Q1BVSUQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BVX2dldFByb2Nlc3NvclR5cGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjcHUgPSBDUFVfaTQ4NjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3B1ID0gQ1BVX1BlbnRpdW07Ci0gICAgICAgIGlmICghX0NQVV9jaGVja0Nsb25lKCkpCi0gICAgICAgICAgICByZXR1cm4gY3B1IHwgQ1BVX0ludGVsOwotICAgICAgICByZXR1cm4gY3B1OwotICAgICAgICB9CisJaWYgKF9DUFVfY2hlY2s4MDM4NigpKQorCSAgICBjcHUgPSBDUFVfaTM4NjsKKwllbHNlICBpZiAoX0NQVV9jaGVjazgwNDg2KCkpIHsKKwkgICAgLyogSWYgd2UgZ2V0IGhlcmUgd2UgbWF5IGhhdmUgYSBDeXJpeCBwcm9jZXNzb3Igc28gd2UgY2FuIHRyeQorCSAgICAgKiBlbmFibGluZyB0aGUgQ1BVSUQgaW5zdHJ1Y3Rpb24gYW5kIHRyeWluZyBhZ2Fpbi4KKwkgICAgICovCisJICAgIGlmIChmaXJzdFRpbWUpIHsKKwkJZmlyc3RUaW1lID0gZmFsc2U7CisJCV9DUFVfZW5hYmxlQ3lyaXhDUFVJRCgpOworCQlyZXR1cm4gQ1BVX2dldFByb2Nlc3NvclR5cGUoKTsKKwkJfQorCSAgICBjcHUgPSBDUFVfaTQ4NjsKKwkgICAgfQorCWVsc2UKKwkgICAgY3B1ID0gQ1BVX1BlbnRpdW07CisJaWYgKCFfQ1BVX2NoZWNrQ2xvbmUoKSkKKwkgICAgcmV0dXJuIGNwdSB8IENQVV9JbnRlbDsKKwlyZXR1cm4gY3B1OworCX0KICNlbGlmICAgZGVmaW5lZChfX0FMUEhBX18pCiAgICAgcmV0dXJuIENQVV9BbHBoYTsKICNlbGlmICAgZGVmaW5lZChfX01JUFNfXykKQEAgLTMzNyw3ICszMzcsNyBAQAogewogI2lmZGVmICBfX0lOVEVMX18KICAgICBpZiAoX0NQVV9oYXZlQ1BVSUQoKSkKLSAgICAgICAgcmV0dXJuIChfQ1BVX2dldENQVUlERmVhdHVyZXMoKSAmIENQVV9IYXZlTU1YKSAhPSAwOworCXJldHVybiAoX0NQVV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZU1NWCkgIT0gMDsKICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM2Niw3ICszNjYsNyBAQAogewogI2lmZGVmICBfX0lOVEVMX18KICAgICBpZiAoX0NQVV9oYXZlQ1BVSUQoKSkKLSAgICAgICAgcmV0dXJuIF9DUFVfaGF2ZTNETm93KCk7CisJcmV0dXJuIF9DUFVfaGF2ZTNETm93KCk7CiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CkBAIC0zOTUsNyArMzk1LDcgQEAKIHsKICNpZmRlZiAgX19JTlRFTF9fCiAgICAgaWYgKF9DUFVfaGF2ZUNQVUlEKCkpCi0gICAgICAgIHJldHVybiAoX0NQVV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVNTRSkgIT0gMDsKKwlyZXR1cm4gKF9DUFVfZ2V0Q1BVSURGZWF0dXJlcygpICYgQ1BVX0hhdmVTU0UpICE9IDA7CiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CkBAIC00MzIsNyArNDMyLDcgQEAKIHsKICNpZmRlZiAgX19JTlRFTF9fCiAgICAgaWYgKF9DUFVfaGF2ZUNQVUlEKCkpCi0gICAgICAgIHJldHVybiAoX0NQVV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVJEVFNDKSAhPSAwOworCXJldHVybiAoX0NQVV9nZXRDUFVJREZlYXR1cmVzKCkgJiBDUFVfSGF2ZVJEVFNDKSAhPSAwOwogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDY0LDIyICs0NjQsMjIgQEAKICAgICBpUHJpb3JpdHkgPSBTZXRNYXhUaHJlYWRQcmlvcml0eSgpOwogICAgIEdldENvdW50ZXJGcmVxdWVuY3koJmNvdW50X2ZyZXEpOwogICAgIGZvciAoaSA9IDA7IGkgPCBTQU1QTElOR1M7IGkrKykgewotICAgICAgICBHZXRDb3VudGVyKCZ0MCk7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBJTk5FUl9MT09QUzsgaisrKQotICAgICAgICAgICAgX0NQVV9ydW5CU0ZMb29wKElURVJBVElPTlMpOwotICAgICAgICBHZXRDb3VudGVyKCZ0MSk7Ci0gICAgICAgIGN1cnJlbnQgPSB0MS5sb3cgLSB0MC5sb3c7Ci0gICAgICAgIGlmIChjdXJyZW50IDwgbG93ZXN0KQotICAgICAgICAgICAgbG93ZXN0ID0gY3VycmVudDsKLSAgICAgICAgfQorCUdldENvdW50ZXIoJnQwKTsKKwlmb3IgKGogPSAwOyBqIDwgSU5ORVJfTE9PUFM7IGorKykKKwkgICAgX0NQVV9ydW5CU0ZMb29wKElURVJBVElPTlMpOworCUdldENvdW50ZXIoJnQxKTsKKwljdXJyZW50ID0gdDEubG93IC0gdDAubG93OworCWlmIChjdXJyZW50IDwgbG93ZXN0KQorCSAgICBsb3dlc3QgPSBjdXJyZW50OworCX0KICAgICBSZXN0b3JlVGhyZWFkUHJpb3JpdHkoaVByaW9yaXR5KTsKIAogICAgIC8qIENvbXB1dGUgZnJlcXVlbmN5ICovCiAgICAgdGlja3MgPSBfQ1BVX211bERpdihsb3dlc3QsMTAwMDAwMCxjb3VudF9mcmVxLmxvdyk7CiAgICAgaWYgKCh0aWNrcyAlIGNvdW50X2ZyZXEubG93KSA+IChjb3VudF9mcmVxLmxvdy8yKSkKLSAgICAgICAgdGlja3MrKzsgICAgICAgICAgICAvKiBSb3VuZCB1cCBpZiBuZWNlc3NhcnkgKi8KKwl0aWNrcysrOyAgICAgICAgICAgIC8qIFJvdW5kIHVwIGlmIG5lY2Vzc2FyeSAqLwogICAgIGlmICh0aWNrcyA9PSAwKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gKChjeWNsZXMqSU5ORVJfTE9PUFMpL3RpY2tzKTsKIH0KIApAQCAtNTEzLDQ0ICs1MTMsNDQgQEAKICAgICBHZXRDb3VudGVyRnJlcXVlbmN5KCZjb3VudF9mcmVxKTsKICAgICBQTV9zZXQ2NChmcmVxLGNvdW50X2ZyZXEuaGlnaCxjb3VudF9mcmVxLmxvdyk7CiAgICAgZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgMzsgdHJpZXMrKykgewotICAgICAgICAvKiBMb29wIHVudGlsIDEwMCB0aWNrcyBoYXZlIHBhc3NlZCBzaW5jZSBsYXN0IHJlYWQgb2YgaGktcmVzCi0gICAgICAgICAqIGNvdW50ZXIuIFRoaXMgYWNjb3VudHMgZm9yIG92ZXJoZWFkIGxhdGVyLgotICAgICAgICAgKi8KLSAgICAgICAgR2V0Q291bnRlcigmdDApOwotICAgICAgICB0MS5sb3cgPSB0MC5sb3c7Ci0gICAgICAgIHQxLmhpZ2ggPSB0MC5oaWdoOwotICAgICAgICB3aGlsZSAoKHQxLmxvdyAtIHQwLmxvdykgPCAxMDApIHsKLSAgICAgICAgICAgIEdldENvdW50ZXIoJnQxKTsKLSAgICAgICAgICAgIF9DUFVfcmVhZFRpbWVTdGFtcCgmczApOwotICAgICAgICAgICAgfQorCS8qIExvb3AgdW50aWwgMTAwIHRpY2tzIGhhdmUgcGFzc2VkIHNpbmNlIGxhc3QgcmVhZCBvZiBoaS1yZXMKKwkgKiBjb3VudGVyLiBUaGlzIGFjY291bnRzIGZvciBvdmVyaGVhZCBsYXRlci4KKwkgKi8KKwlHZXRDb3VudGVyKCZ0MCk7CisJdDEubG93ID0gdDAubG93OworCXQxLmhpZ2ggPSB0MC5oaWdoOworCXdoaWxlICgodDEubG93IC0gdDAubG93KSA8IDEwMCkgeworCSAgICBHZXRDb3VudGVyKCZ0MSk7CisJICAgIF9DUFVfcmVhZFRpbWVTdGFtcCgmczApOworCSAgICB9CiAKLSAgICAgICAgLyogTG9vcCB1bnRpbCAzMDAwMCB0aWNrcyBoYXZlIHBhc3NlZCBzaW5jZSBsYXN0IHJlYWQgb2YgaGktcmVzIGNvdW50ZXIuCi0gICAgICAgICAqIFRoaXMgYWxsb3dzIGZvciBlbGFwc2VkIHRpbWUgZm9yIHNhbXBsaW5nLiBGb3IgYSBoaS1yZXMgZnJlcXVlbmN5Ci0gICAgICAgICAqIG9mIDFNSHosIHRoaXMgaXMgYWJvdXQgMC4wMyBvZiBhIHNlY29uZC4gVGhlIGZyZXF1ZW5jeSByZXBvcnRlZAotICAgICAgICAgKiBieSB0aGUgT1MgZGVwZW5kZW50IGNvZGUgc2hvdWxkIGJlIHR1bmVkIHRvIHByb3ZpZGUgYSBnb29kCi0gICAgICAgICAqIHNhbXBsZSBwZXJpb2QgZGVwZW5kaW5nIG9uIHRoZSBhY2N1cmFjeSBvZiB0aGUgT1MgdGltZXJzIChpZToKLSAgICAgICAgICogaWYgdGhlIGFjY3VyYWN5IGlzIGxvd2VyLCBsb3dlciB0aGUgZnJlcXVlbmN5IHRvIHNwZW5kIG1vcmUgdGltZQotICAgICAgICAgKiBpbiB0aGUgaW5uZXIgbG9vcCB0byBnZXQgYmV0dGVyIGFjY3VyYWN5KS4KLSAgICAgICAgICovCi0gICAgICAgIHQwLmxvdyA9IHQxLmxvdzsKLSAgICAgICAgdDAuaGlnaCA9IHQxLmhpZ2g7Ci0gICAgICAgIHdoaWxlICgodDEubG93IC0gdDAubG93KSA8IG1heENvdW50KSB7Ci0gICAgICAgICAgICBHZXRDb3VudGVyKCZ0MSk7Ci0gICAgICAgICAgICBfQ1BVX3JlYWRUaW1lU3RhbXAoJnMxKTsKLSAgICAgICAgICAgIH0KKwkvKiBMb29wIHVudGlsIDMwMDAwIHRpY2tzIGhhdmUgcGFzc2VkIHNpbmNlIGxhc3QgcmVhZCBvZiBoaS1yZXMgY291bnRlci4KKwkgKiBUaGlzIGFsbG93cyBmb3IgZWxhcHNlZCB0aW1lIGZvciBzYW1wbGluZy4gRm9yIGEgaGktcmVzIGZyZXF1ZW5jeQorCSAqIG9mIDFNSHosIHRoaXMgaXMgYWJvdXQgMC4wMyBvZiBhIHNlY29uZC4gVGhlIGZyZXF1ZW5jeSByZXBvcnRlZAorCSAqIGJ5IHRoZSBPUyBkZXBlbmRlbnQgY29kZSBzaG91bGQgYmUgdHVuZWQgdG8gcHJvdmlkZSBhIGdvb2QKKwkgKiBzYW1wbGUgcGVyaW9kIGRlcGVuZGluZyBvbiB0aGUgYWNjdXJhY3kgb2YgdGhlIE9TIHRpbWVycyAoaWU6CisJICogaWYgdGhlIGFjY3VyYWN5IGlzIGxvd2VyLCBsb3dlciB0aGUgZnJlcXVlbmN5IHRvIHNwZW5kIG1vcmUgdGltZQorCSAqIGluIHRoZSBpbm5lciBsb29wIHRvIGdldCBiZXR0ZXIgYWNjdXJhY3kpLgorCSAqLworCXQwLmxvdyA9IHQxLmxvdzsKKwl0MC5oaWdoID0gdDEuaGlnaDsKKwl3aGlsZSAoKHQxLmxvdyAtIHQwLmxvdykgPCBtYXhDb3VudCkgeworCSAgICBHZXRDb3VudGVyKCZ0MSk7CisJICAgIF9DUFVfcmVhZFRpbWVTdGFtcCgmczEpOworCSAgICB9CiAKLSAgICAgICAgLyogRmluZCB0aGUgZGlmZmVyZW5jZSBkdXJpbmcgdGhlIHRpbWluZyBsb29wICovCi0gICAgICAgIFBNX3NldDY0KHN0YW1wMCxzMC5oaWdoLHMwLmxvdyk7Ci0gICAgICAgIFBNX3NldDY0KHN0YW1wMSxzMS5oaWdoLHMxLmxvdyk7Ci0gICAgICAgIFBNX3NldDY0KHRpY2tzMCx0MC5oaWdoLHQwLmxvdyk7Ci0gICAgICAgIFBNX3NldDY0KHRpY2tzMSx0MS5oaWdoLHQxLmxvdyk7Ci0gICAgICAgIFBNX3N1YjY0KGN5Y2xlcyxzdGFtcDEsc3RhbXAwKTsKLSAgICAgICAgUE1fc3ViNjQodGlja3MsdGlja3MxLHRpY2tzMCk7CisJLyogRmluZCB0aGUgZGlmZmVyZW5jZSBkdXJpbmcgdGhlIHRpbWluZyBsb29wICovCisJUE1fc2V0NjQoc3RhbXAwLHMwLmhpZ2gsczAubG93KTsKKwlQTV9zZXQ2NChzdGFtcDEsczEuaGlnaCxzMS5sb3cpOworCVBNX3NldDY0KHRpY2tzMCx0MC5oaWdoLHQwLmxvdyk7CisJUE1fc2V0NjQodGlja3MxLHQxLmhpZ2gsdDEubG93KTsKKwlQTV9zdWI2NChjeWNsZXMsc3RhbXAxLHN0YW1wMCk7CisJUE1fc3ViNjQodGlja3MsdGlja3MxLHRpY2tzMCk7CiAKLSAgICAgICAgLyogU3VtIHVwIHRoZSByZXN1bHRzICovCi0gICAgICAgIFBNX2FkZDY0KHRvdGFsX3RpY2tzLHRvdGFsX3RpY2tzLHRpY2tzKTsKLSAgICAgICAgUE1fYWRkNjQodG90YWxfY3ljbGVzLHRvdGFsX2N5Y2xlcyxjeWNsZXMpOwotICAgICAgICB9CisJLyogU3VtIHVwIHRoZSByZXN1bHRzICovCisJUE1fYWRkNjQodG90YWxfdGlja3MsdG90YWxfdGlja3MsdGlja3MpOworCVBNX2FkZDY0KHRvdGFsX2N5Y2xlcyx0b3RhbF9jeWNsZXMsY3ljbGVzKTsKKwl9CiAgICAgUmVzdG9yZVRocmVhZFByaW9yaXR5KGlQcmlvcml0eSk7CiAKICAgICAvKiBDb21wdXRlIGZyZXF1ZW5jeSBpbiBIeiAqLwpAQCAtNTk4LDQ2ICs1OTgsNDYgQEAKICAgICB1bG9uZyAgIGNwdVNwZWVkOwogICAgIHVpbnQgICAgaTsKICAgICBzdGF0aWMgIHVsb25nIGludGVsX2N5Y2xlc1tdID0gewotICAgICAgICAxMTUsNDcsNDMsCi0gICAgICAgIH07CisJMTE1LDQ3LDQzLAorCX07CiAgICAgc3RhdGljICB1bG9uZyBjeXJpeF9jeWNsZXNbXSA9IHsKLSAgICAgICAgMzgsMzgsNTIsNTIsCi0gICAgICAgIH07CisJMzgsMzgsNTIsNTIsCisJfTsKICAgICBzdGF0aWMgIHVsb25nIGFtZF9jeWNsZXNbXSA9IHsKLSAgICAgICAgNDksCi0gICAgICAgIH07CisJNDksCisJfTsKICAgICBzdGF0aWMgIHVsb25nIGtub3duX3NwZWVkc1tdID0gewotICAgICAgICAxMDAwLDk1MCw5MDAsODUwLDgwMCw3NTAsNzAwLDY1MCw2MDAsNTUwLDUwMCw0NTAsNDMzLDQwMCwzNTAsCi0gICAgICAgIDMzMywzMDAsMjY2LDIzMywyMDAsMTY2LDE1MCwxMzMsMTIwLDEwMCw5MCw3NSw2Niw2MCw1MCwzMywyMCwwLAotICAgICAgICB9OworCTEwMDAsOTUwLDkwMCw4NTAsODAwLDc1MCw3MDAsNjUwLDYwMCw1NTAsNTAwLDQ1MCw0MzMsNDAwLDM1MCwKKwkzMzMsMzAwLDI2NiwyMzMsMjAwLDE2NiwxNTAsMTMzLDEyMCwxMDAsOTAsNzUsNjYsNjAsNTAsMzMsMjAsMCwKKwl9OwogCiAgICAgaWYgKENQVV9oYXZlUkRUU0MoKSkgewotICAgICAgICBjcHVTcGVlZCA9IChHZXRSRFRTQ0NwdVNwZWVkKGFjY3VyYXRlKSArIDUwMDAwMCkgLyAxMDAwMDAwOwotICAgICAgICB9CisJY3B1U3BlZWQgPSAoR2V0UkRUU0NDcHVTcGVlZChhY2N1cmF0ZSkgKyA1MDAwMDApIC8gMTAwMDAwMDsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIGludCB0eXBlID0gQ1BVX2dldFByb2Nlc3NvclR5cGUoKTsKLSAgICAgICAgaW50IHByb2Nlc3NvciA9IHR5cGUgJiBDUFVfbWFzazsKLSAgICAgICAgaW50IHZlbmRvciA9IHR5cGUgJiBDUFVfZmFtaWx5TWFzazsKLSAgICAgICAgaWYgKHZlbmRvciA9PSBDUFVfSW50ZWwpCi0gICAgICAgICAgICBjcHVTcGVlZCA9IEdldEJTRkNwdVNwZWVkKElURVJBVElPTlMgKiBpbnRlbF9jeWNsZXNbcHJvY2Vzc29yIC0gQ1BVX2kzODZdKTsKLSAgICAgICAgZWxzZSBpZiAodmVuZG9yID09IENQVV9DeXJpeCkKLSAgICAgICAgICAgIGNwdVNwZWVkID0gR2V0QlNGQ3B1U3BlZWQoSVRFUkFUSU9OUyAqIGN5cml4X2N5Y2xlc1twcm9jZXNzb3IgLSBDUFVfQ3lyaXg2eDg2XSk7Ci0gICAgICAgIGVsc2UgaWYgKHZlbmRvciA9PSBDUFVfQU1EKQotICAgICAgICAgICAgY3B1U3BlZWQgPSBHZXRCU0ZDcHVTcGVlZChJVEVSQVRJT05TICogYW1kX2N5Y2xlc1swXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisJaW50IHR5cGUgPSBDUFVfZ2V0UHJvY2Vzc29yVHlwZSgpOworCWludCBwcm9jZXNzb3IgPSB0eXBlICYgQ1BVX21hc2s7CisJaW50IHZlbmRvciA9IHR5cGUgJiBDUFVfZmFtaWx5TWFzazsKKwlpZiAodmVuZG9yID09IENQVV9JbnRlbCkKKwkgICAgY3B1U3BlZWQgPSBHZXRCU0ZDcHVTcGVlZChJVEVSQVRJT05TICogaW50ZWxfY3ljbGVzW3Byb2Nlc3NvciAtIENQVV9pMzg2XSk7CisJZWxzZSBpZiAodmVuZG9yID09IENQVV9DeXJpeCkKKwkgICAgY3B1U3BlZWQgPSBHZXRCU0ZDcHVTcGVlZChJVEVSQVRJT05TICogY3lyaXhfY3ljbGVzW3Byb2Nlc3NvciAtIENQVV9DeXJpeDZ4ODZdKTsKKwllbHNlIGlmICh2ZW5kb3IgPT0gQ1BVX0FNRCkKKwkgICAgY3B1U3BlZWQgPSBHZXRCU0ZDcHVTcGVlZChJVEVSQVRJT05TICogYW1kX2N5Y2xlc1swXSk7CisJZWxzZQorCSAgICByZXR1cm4gMDsKKwl9CiAKICAgICAvKiBOb3cgbm9ybWFsaXNlIHRoZSByZXN1bHRzIGdpdmVuIGtub3duIHByb2Nlc3NvcnMgc3BlZWRzLCBpZiB0aGUKICAgICAgKiBzcGVlZCB3ZSBtZWFzdXJlIGlzIHdpdGhpbiAyTUh6IG9mIHRoZSBleHBlY3RlZCB2YWx1ZXMKICAgICAgKi8KICAgICBpZiAoIWFjY3VyYXRlKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGtub3duX3NwZWVkc1tpXSAhPSAwOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChjcHVTcGVlZCA+PSAoa25vd25fc3BlZWRzW2ldLTMpICYmIGNwdVNwZWVkIDw9IChrbm93bl9zcGVlZHNbaV0rMykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4ga25vd25fc3BlZWRzW2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGtub3duX3NwZWVkc1tpXSAhPSAwOyBpKyspIHsKKwkgICAgaWYgKGNwdVNwZWVkID49IChrbm93bl9zcGVlZHNbaV0tMykgJiYgY3B1U3BlZWQgPD0gKGtub3duX3NwZWVkc1tpXSszKSkgeworCQlyZXR1cm4ga25vd25fc3BlZWRzW2ldOworCQl9CisJICAgIH0KKwl9CiAgICAgcmV0dXJuIGNwdVNwZWVkOwogI2Vsc2UKICAgICByZXR1cm4gMDsKQEAgLTY3NCw4ICs2NzQsOCBAQAogewogI2lmIGRlZmluZWQoX19JTlRFTF9fKQogICAgIGlmIChDUFVfaGF2ZVJEVFNDKCkpIHsKLSAgICAgICAgcmV0dXJuIEdldFJEVFNDQ3B1U3BlZWQoYWNjdXJhdGUpOwotICAgICAgICB9CisJcmV0dXJuIEdldFJEVFNDQ3B1U3BlZWQoYWNjdXJhdGUpOworCX0KICAgICByZXR1cm4gQ1BVX2dldFByb2Nlc3NvclNwZWVkKGZhbHNlKSAqIDEwMDAwMDA7CiAjZWxzZQogICAgIHJldHVybiAwOwpAQCAtNzA2LDEwMSArNzA2LDEwMSBAQAogICAgIHN0YXRpYyBjaGFyIG5hbWVbODBdOwogCiAgICAgaWYgKHNwZWVkID09IC0xKSB7Ci0gICAgICAgIGNwdSA9IENQVV9nZXRQcm9jZXNzb3JUeXBlKCk7Ci0gICAgICAgIHNwZWVkID0gQ1BVX2dldFByb2Nlc3NvclNwZWVkKGZhbHNlKTsKLSAgICAgICAgfQorCWNwdSA9IENQVV9nZXRQcm9jZXNzb3JUeXBlKCk7CisJc3BlZWQgPSBDUFVfZ2V0UHJvY2Vzc29yU3BlZWQoZmFsc2UpOworCX0KICAgICBzcHJpbnRmKG5hbWUsIiVkIE1IeiAiLCBzcGVlZCk7CiAgICAgc3dpdGNoIChjcHUgJiBDUFVfbWFzaykgewotICAgICAgICBjYXNlIENQVV9pMzg2OgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIkludGVsIGkzODYgcHJvY2Vzc29yIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFVfaTQ4NjoKLSAgICAgICAgICAgIHN0cmNhdChuYW1lLCJJbnRlbCBpNDg2IHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX1BlbnRpdW06Ci0gICAgICAgICAgICBzdHJjYXQobmFtZSwiSW50ZWwgUGVudGl1bSBwcm9jZXNzb3IiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQVV9QZW50aXVtUHJvOgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIkludGVsIFBlbnRpdW0gUHJvIHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX1BlbnRpdW1JSToKLSAgICAgICAgICAgIHN0cmNhdChuYW1lLCJJbnRlbCBQZW50aXVtIElJIHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX0NlbGVyb246Ci0gICAgICAgICAgICBzdHJjYXQobmFtZSwiSW50ZWwgQ2VsZXJvbiBwcm9jZXNzb3IiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQVV9QZW50aXVtSUlJOgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIkludGVsIFBlbnRpdW0gSUlJIHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX1Vua0ludGVsOgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIlVua25vd24gSW50ZWwgcHJvY2Vzc29yIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFVfQ3lyaXg2eDg2OgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIkN5cml4IDZ4ODYgcHJvY2Vzc29yIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFVfQ3lyaXg2eDg2TVg6Ci0gICAgICAgICAgICBzdHJjYXQobmFtZSwiQ3lyaXggNng4Nk1YIHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX0N5cml4TWVkaWFHWDoKLSAgICAgICAgICAgIHN0cmNhdChuYW1lLCJDeXJpeCBNZWRpYUdYIHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX0N5cml4TWVkaWFHWG06Ci0gICAgICAgICAgICBzdHJjYXQobmFtZSwiQ3lyaXggTWVkaWFHWG0gcHJvY2Vzc29yIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFVfVW5rQ3lyaXg6Ci0gICAgICAgICAgICBzdHJjYXQobmFtZSwiVW5rbm93biBDeXJpeCBwcm9jZXNzb3IiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQVV9BTURBbTQ4NjoKLSAgICAgICAgICAgIHN0cmNhdChuYW1lLCJBTUQgQW00ODYgcHJvY2Vzc29yIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFVfQU1EQW01eDg2OgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIkFNRCBBbTV4ODYgcHJvY2Vzc29yIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFVfQU1ESzU6Ci0gICAgICAgICAgICBzdHJjYXQobmFtZSwiQU1EIEs1IHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX0FNREs2OgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIkFNRCBLNiBwcm9jZXNzb3IiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQVV9BTURLNl8yOgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIkFNRCBLNi0yIHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX0FNREs2X0lJSToKLSAgICAgICAgICAgIHN0cmNhdChuYW1lLCJBTUQgSzYtSUlJIHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX0FNREs2XzJwbHVzOgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIkFNRCBLNi0yKyBwcm9jZXNzb3IiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQVV9BTURLNl9JSUlwbHVzOgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIkFNRCBLNi1JSUkrIHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX1Vua0FNRDoKLSAgICAgICAgICAgIHN0cmNhdChuYW1lLCJVbmtub3duIEFNRCBwcm9jZXNzb3IiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQVV9BTURBdGhsb246Ci0gICAgICAgICAgICBzdHJjYXQobmFtZSwiQU1EIEF0aGxvbiBwcm9jZXNzb3IiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENQVV9BTUREdXJvbjoKLSAgICAgICAgICAgIHN0cmNhdChuYW1lLCJBTUQgRHVyb24gcHJvY2Vzc29yIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFVfV2luQ2hpcEM2OgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIklEVCBXaW5DaGlwIEM2IHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1BVX1dpbkNoaXAyOgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIklEVCBXaW5DaGlwIDIgcHJvY2Vzc29yIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDUFVfVW5rSURUOgotICAgICAgICAgICAgc3RyY2F0KG5hbWUsIlVua25vd24gSURUIHByb2Nlc3NvciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzdHJjYXQobmFtZSwiVW5rbm93biBwcm9jZXNzb3IiKTsKLSAgICAgICAgfQorCWNhc2UgQ1BVX2kzODY6CisJICAgIHN0cmNhdChuYW1lLCJJbnRlbCBpMzg2IHByb2Nlc3NvciIpOworCSAgICBicmVhazsKKwljYXNlIENQVV9pNDg2OgorCSAgICBzdHJjYXQobmFtZSwiSW50ZWwgaTQ4NiBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfUGVudGl1bToKKwkgICAgc3RyY2F0KG5hbWUsIkludGVsIFBlbnRpdW0gcHJvY2Vzc29yIik7CisJICAgIGJyZWFrOworCWNhc2UgQ1BVX1BlbnRpdW1Qcm86CisJICAgIHN0cmNhdChuYW1lLCJJbnRlbCBQZW50aXVtIFBybyBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfUGVudGl1bUlJOgorCSAgICBzdHJjYXQobmFtZSwiSW50ZWwgUGVudGl1bSBJSSBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfQ2VsZXJvbjoKKwkgICAgc3RyY2F0KG5hbWUsIkludGVsIENlbGVyb24gcHJvY2Vzc29yIik7CisJICAgIGJyZWFrOworCWNhc2UgQ1BVX1BlbnRpdW1JSUk6CisJICAgIHN0cmNhdChuYW1lLCJJbnRlbCBQZW50aXVtIElJSSBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfVW5rSW50ZWw6CisJICAgIHN0cmNhdChuYW1lLCJVbmtub3duIEludGVsIHByb2Nlc3NvciIpOworCSAgICBicmVhazsKKwljYXNlIENQVV9DeXJpeDZ4ODY6CisJICAgIHN0cmNhdChuYW1lLCJDeXJpeCA2eDg2IHByb2Nlc3NvciIpOworCSAgICBicmVhazsKKwljYXNlIENQVV9DeXJpeDZ4ODZNWDoKKwkgICAgc3RyY2F0KG5hbWUsIkN5cml4IDZ4ODZNWCBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfQ3lyaXhNZWRpYUdYOgorCSAgICBzdHJjYXQobmFtZSwiQ3lyaXggTWVkaWFHWCBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfQ3lyaXhNZWRpYUdYbToKKwkgICAgc3RyY2F0KG5hbWUsIkN5cml4IE1lZGlhR1htIHByb2Nlc3NvciIpOworCSAgICBicmVhazsKKwljYXNlIENQVV9VbmtDeXJpeDoKKwkgICAgc3RyY2F0KG5hbWUsIlVua25vd24gQ3lyaXggcHJvY2Vzc29yIik7CisJICAgIGJyZWFrOworCWNhc2UgQ1BVX0FNREFtNDg2OgorCSAgICBzdHJjYXQobmFtZSwiQU1EIEFtNDg2IHByb2Nlc3NvciIpOworCSAgICBicmVhazsKKwljYXNlIENQVV9BTURBbTV4ODY6CisJICAgIHN0cmNhdChuYW1lLCJBTUQgQW01eDg2IHByb2Nlc3NvciIpOworCSAgICBicmVhazsKKwljYXNlIENQVV9BTURLNToKKwkgICAgc3RyY2F0KG5hbWUsIkFNRCBLNSBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfQU1ESzY6CisJICAgIHN0cmNhdChuYW1lLCJBTUQgSzYgcHJvY2Vzc29yIik7CisJICAgIGJyZWFrOworCWNhc2UgQ1BVX0FNREs2XzI6CisJICAgIHN0cmNhdChuYW1lLCJBTUQgSzYtMiBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfQU1ESzZfSUlJOgorCSAgICBzdHJjYXQobmFtZSwiQU1EIEs2LUlJSSBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfQU1ESzZfMnBsdXM6CisJICAgIHN0cmNhdChuYW1lLCJBTUQgSzYtMisgcHJvY2Vzc29yIik7CisJICAgIGJyZWFrOworCWNhc2UgQ1BVX0FNREs2X0lJSXBsdXM6CisJICAgIHN0cmNhdChuYW1lLCJBTUQgSzYtSUlJKyBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfVW5rQU1EOgorCSAgICBzdHJjYXQobmFtZSwiVW5rbm93biBBTUQgcHJvY2Vzc29yIik7CisJICAgIGJyZWFrOworCWNhc2UgQ1BVX0FNREF0aGxvbjoKKwkgICAgc3RyY2F0KG5hbWUsIkFNRCBBdGhsb24gcHJvY2Vzc29yIik7CisJICAgIGJyZWFrOworCWNhc2UgQ1BVX0FNRER1cm9uOgorCSAgICBzdHJjYXQobmFtZSwiQU1EIER1cm9uIHByb2Nlc3NvciIpOworCSAgICBicmVhazsKKwljYXNlIENQVV9XaW5DaGlwQzY6CisJICAgIHN0cmNhdChuYW1lLCJJRFQgV2luQ2hpcCBDNiBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJY2FzZSBDUFVfV2luQ2hpcDI6CisJICAgIHN0cmNhdChuYW1lLCJJRFQgV2luQ2hpcCAyIHByb2Nlc3NvciIpOworCSAgICBicmVhazsKKwljYXNlIENQVV9VbmtJRFQ6CisJICAgIHN0cmNhdChuYW1lLCJVbmtub3duIElEVCBwcm9jZXNzb3IiKTsKKwkgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgc3RyY2F0KG5hbWUsIlVua25vd24gcHJvY2Vzc29yIik7CisJfQogICAgIGlmIChDUFVfaGF2ZU1NWCgpKQotICAgICAgICBzdHJjYXQobmFtZSwiIHdpdGggTU1YKFIpIik7CisJc3RyY2F0KG5hbWUsIiB3aXRoIE1NWChSKSIpOwogICAgIGlmIChDUFVfaGF2ZTNETm93KCkpCi0gICAgICAgIHN0cmNhdChuYW1lLCIsIDNETm93IShSKSIpOworCXN0cmNhdChuYW1lLCIsIDNETm93IShSKSIpOwogICAgIGlmIChDUFVfaGF2ZVNTRSgpKQotICAgICAgICBzdHJjYXQobmFtZSwiLCBTU0UoUikiKTsKKwlzdHJjYXQobmFtZSwiLCBTU0UoUikiKTsKICAgICByZXR1cm4gbmFtZTsKICNlbHNlCiAgICAgcmV0dXJuICJVbmtub3duIjsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2RlYnVnLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kZWJ1Zy5jCmluZGV4IGQ4NmUzZTYuLjc1MWJmMDkgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2RlYnVnLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vZGVidWcuYwpAQCAtNjEsMjMgKzYxLDIzIEBACiAgICAgY2hhciAgICBidWZbMjU2XTsKIAogICAgIGlmIChsb2dGaWxlWzBdID09IDApIHsKLSAgICAgICAgc3RyY3B5KGxvZ0ZpbGUsUE1fZ2V0TnVjbGV1c1BhdGgoKSk7Ci0gICAgICAgIFBNX2JhY2tzbGFzaChsb2dGaWxlKTsKLSAgICAgICAgc3RyY2F0KGxvZ0ZpbGUsInNjaXRlY2gubG9nIik7Ci0gICAgICAgIH0KKwlzdHJjcHkobG9nRmlsZSxQTV9nZXROdWNsZXVzUGF0aCgpKTsKKwlQTV9iYWNrc2xhc2gobG9nRmlsZSk7CisJc3RyY2F0KGxvZ0ZpbGUsInNjaXRlY2gubG9nIik7CisJfQogICAgIGlmICgoZiA9IGZvcGVuKGxvZ0ZpbGUsImErIikpICE9IE5VTEwpIHsKICNpZiBkZWZpbmVkKF9fV0lOMzJfVlhEX18pIHx8IGRlZmluZWQoX19PUzJfVkREX18pIHx8IGRlZmluZWQoX19OVF9EUklWRVJfXykKLSAgICAgICAgc3ByaW50ZihidWYsbXNnLGNvbmQsZmlsZSxsaW5lKTsKLSAgICAgICAgZndyaXRlKGJ1ZiwxLHN0cmxlbihidWYpLGYpOworCXNwcmludGYoYnVmLG1zZyxjb25kLGZpbGUsbGluZSk7CisJZndyaXRlKGJ1ZiwxLHN0cmxlbihidWYpLGYpOwogI2Vsc2UKLSAgICAgICAgZnByaW50ZihmLG1zZyxjb25kLGZpbGUsbGluZSk7CisJZnByaW50ZihmLG1zZyxjb25kLGZpbGUsbGluZSk7CiAjZW5kaWYKLSAgICAgICAgZmNsb3NlKGYpOwotICAgICAgICB9CisJZmNsb3NlKGYpOworCX0KICAgICBpZiAoZmF0YWwpIHsKLSAgICAgICAgc3ByaW50ZihidWYsIkNoZWNrIGZhaWxlZDogY2hlY2sgJyVzJyBmb3IgZGV0YWlscyIsIGxvZ0ZpbGUpOwotICAgICAgICBQTV9mYXRhbEVycm9yKGJ1Zik7Ci0gICAgICAgIH0KKwlzcHJpbnRmKGJ1ZiwiQ2hlY2sgZmFpbGVkOiBjaGVjayAnJXMnIGZvciBkZXRhaWxzIiwgbG9nRmlsZSk7CisJUE1fZmF0YWxFcnJvcihidWYpOworCX0KIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvZXZlbnQuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Rvcy9ldmVudC5jCmluZGV4IDEyZWNiMjkuLmE5NjlkMTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Rvcy9ldmVudC5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Rvcy9ldmVudC5jCkBAIC03NSw3ICs3NSw3IEBACiAJCV9FVlRfcmVzdG9yZUludChwcyk7CiAJCX0KIAotICAgIHJlZ3MueC5heCA9IDB4MEI7ICAgICAgICAgICAvLyBSZXNldCBNb3ZlIE1vdXNlCisgICAgcmVncy54LmF4ID0gMHgwQjsgICAgICAgICAgIC8qIFJlc2V0IE1vdmUgTW91c2UgKi8KICAgICBQTV9pbnQ4NigweDMzLCZyZWdzLCZyZWdzKTsKIH0KICNlbmRpZgpAQCAtMTc4LDggKzE3OCw4IEBACiB0aGUgbW91c2UgaW50ZXJydXB0IHN1YnJvdXRpbmUsIHNvIGl0IG11c3QgYmUgZWZmaWNpZW50LgogCiBOT1RFOiAgIEludGVycnVwdHMgTVVTVCBiZSBPRkYgd2hpbGUgdGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBlbnN1cmUgd2UgaGF2ZQotICAgICAgICBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzIHRvIG91ciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgZm9yCi0gICAgICAgIGludGVycnVwdCBkcml2ZW4gc3lzdGVtcyAobGlrZSB1bmRlciBET1MpLgorCW11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gb3VyIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBmb3IKKwlpbnRlcnJ1cHQgZHJpdmVuIHN5c3RlbXMgKGxpa2UgdW5kZXIgRE9TKS4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBhZGRNb3VzZUV2ZW50KAogICAgIHVpbnQgd2hhdCwKQEAgLTE5MywxOCArMTkzLDE4IEBACiAgICAgZXZlbnRfdCBldnQ7CiAKICAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkgewotICAgICAgICAvKiBTYXZlIGluZm9ybWF0aW9uIGluIGV2ZW50IHJlY29yZC4gKi8KLSAgICAgICAgZXZ0LndoZW4gPSBfRVZUX2dldFRpY2tzKCk7Ci0gICAgICAgIGV2dC53aGF0ID0gd2hhdDsKLSAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgICBldnQubW9kaWZpZXJzID0gYnV0X3N0YXQ7Ci0gICAgICAgIGV2dC53aGVyZV94ID0geDsgICAgICAgICAgICAgICAgLyogU2F2ZSBtb3VzZSBldmVudCBwb3NpdGlvbiAgICAqLwotICAgICAgICBldnQud2hlcmVfeSA9IHk7Ci0gICAgICAgIGV2dC5yZWxhdGl2ZV94ID0gbWlja2V5WDsKLSAgICAgICAgZXZ0LnJlbGF0aXZlX3kgPSBtaWNrZXlZOwotICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVC5rZXlNb2RpZmllcnM7Ci0gICAgICAgIGFkZEV2ZW50KCZldnQpOyAgICAgICAgICAgICAgICAgLyogQWRkIHRvIHRhaWwgb2YgZXZlbnQgcXVldWUgICAqLwotICAgICAgICB9CisJLyogU2F2ZSBpbmZvcm1hdGlvbiBpbiBldmVudCByZWNvcmQuICovCisJZXZ0LndoZW4gPSBfRVZUX2dldFRpY2tzKCk7CisJZXZ0LndoYXQgPSB3aGF0OworCWV2dC5tZXNzYWdlID0gbWVzc2FnZTsKKwlldnQubW9kaWZpZXJzID0gYnV0X3N0YXQ7CisJZXZ0LndoZXJlX3ggPSB4OyAgICAgICAgICAgICAgICAvKiBTYXZlIG1vdXNlIGV2ZW50IHBvc2l0aW9uICAgICovCisJZXZ0LndoZXJlX3kgPSB5OworCWV2dC5yZWxhdGl2ZV94ID0gbWlja2V5WDsKKwlldnQucmVsYXRpdmVfeSA9IG1pY2tleVk7CisJZXZ0Lm1vZGlmaWVycyB8PSBFVlQua2V5TW9kaWZpZXJzOworCWFkZEV2ZW50KCZldnQpOyAgICAgICAgICAgICAgICAgLyogQWRkIHRvIHRhaWwgb2YgZXZlbnQgcXVldWUgICAqLworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIzMyw0NyArMjMzLDQ3IEBACiAgICAgdWludCAgICBidXR0b25NYXNrOwogCiAgICAgaWYgKG1hc2sgJiAxKSB7Ci0gICAgICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgbW91c2UgY29vcmRpbmF0ZXMgKi8KLSAgICAgICAgRVZULm14ID0geDsgRVZULm15ID0geTsKKwkvKiBTYXZlIHRoZSBjdXJyZW50IG1vdXNlIGNvb3JkaW5hdGVzICovCisJRVZULm14ID0geDsgRVZULm15ID0geTsKIAotICAgICAgICAvKiBJZiB0aGUgbGFzdCBldmVudCB3YXMgYSBtb3ZlbWVudCBldmVudCwgdGhlbiBtb2RpZnkgdGhlIGxhc3QKLSAgICAgICAgICogZXZlbnQgcmF0aGVyIHRoYW4gcG9zdCBhIG5ldyBvbmUsIHNvIHRoYXQgdGhlIHF1ZXVlIHdpbGwgbm90Ci0gICAgICAgICAqIGJlY29tZSBzYXR1cmF0ZWQuIEJlZm9yZSB3ZSBtb2RpZnkgdGhlIGRhdGEgc3RydWN0dXJlcywgd2UKLSAgICAgICAgICogTVVTVCBlbnN1cmUgdGhhdCBpbnRlcnJ1cHRzIGFyZSBvZmYuCi0gICAgICAgICAqLwotICAgICAgICBwcyA9IF9FVlRfZGlzYWJsZUludCgpOwotICAgICAgICBpZiAoRVZULm9sZE1vdmUgIT0gLTEpIHsKLSAgICAgICAgICAgIEVWVC5ldnRxW0VWVC5vbGRNb3ZlXS53aGVyZV94ID0geDsgIC8qIE1vZGlmeSBleGlzdGluZyBvbmUgICovCi0gICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeSA9IHk7Ci0gICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ucmVsYXRpdmVfeCArPSBtaWNrZXlYOwotICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLnJlbGF0aXZlX3kgKz0gbWlja2V5WTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBFVlQub2xkTW92ZSA9IEVWVC5mcmVlSGVhZDsgICAgICAgICAvKiBTYXZlIGlkIG9mIHRoaXMgbW92ZSBldmVudCAgICovCi0gICAgICAgICAgICBhZGRNb3VzZUV2ZW50KEVWVF9NT1VTRU1PVkUsMCx4LHksbWlja2V5WCxtaWNrZXlZLGJ1dHN0YXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgX0VWVF9yZXN0b3JlSW50KHBzKTsKLSAgICAgICAgfQorCS8qIElmIHRoZSBsYXN0IGV2ZW50IHdhcyBhIG1vdmVtZW50IGV2ZW50LCB0aGVuIG1vZGlmeSB0aGUgbGFzdAorCSAqIGV2ZW50IHJhdGhlciB0aGFuIHBvc3QgYSBuZXcgb25lLCBzbyB0aGF0IHRoZSBxdWV1ZSB3aWxsIG5vdAorCSAqIGJlY29tZSBzYXR1cmF0ZWQuIEJlZm9yZSB3ZSBtb2RpZnkgdGhlIGRhdGEgc3RydWN0dXJlcywgd2UKKwkgKiBNVVNUIGVuc3VyZSB0aGF0IGludGVycnVwdHMgYXJlIG9mZi4KKwkgKi8KKwlwcyA9IF9FVlRfZGlzYWJsZUludCgpOworCWlmIChFVlQub2xkTW92ZSAhPSAtMSkgeworCSAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeCA9IHg7ICAvKiBNb2RpZnkgZXhpc3Rpbmcgb25lICAqLworCSAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeSA9IHk7CisJICAgIEVWVC5ldnRxW0VWVC5vbGRNb3ZlXS5yZWxhdGl2ZV94ICs9IG1pY2tleVg7CisJICAgIEVWVC5ldnRxW0VWVC5vbGRNb3ZlXS5yZWxhdGl2ZV95ICs9IG1pY2tleVk7CisJICAgIH0KKwllbHNlIHsKKwkgICAgRVZULm9sZE1vdmUgPSBFVlQuZnJlZUhlYWQ7ICAgICAgICAgLyogU2F2ZSBpZCBvZiB0aGlzIG1vdmUgZXZlbnQgICAqLworCSAgICBhZGRNb3VzZUV2ZW50KEVWVF9NT1VTRU1PVkUsMCx4LHksbWlja2V5WCxtaWNrZXlZLGJ1dHN0YXRlKTsKKwkgICAgfQorCV9FVlRfcmVzdG9yZUludChwcyk7CisJfQogICAgIGlmIChtYXNrICYgMHgyQSkgewotICAgICAgICBwcyA9IF9FVlRfZGlzYWJsZUludCgpOwotICAgICAgICBidXR0b25NYXNrID0gMDsKLSAgICAgICAgaWYgKG1hc2sgJiAyKSAgYnV0dG9uTWFzayB8PSBFVlRfTEVGVEJNQVNLOwotICAgICAgICBpZiAobWFzayAmIDgpICBidXR0b25NYXNrIHw9IEVWVF9SSUdIVEJNQVNLOwotICAgICAgICBpZiAobWFzayAmIDMyKSBidXR0b25NYXNrIHw9IEVWVF9NSURETEVCTUFTSzsKLSAgICAgICAgYWRkTW91c2VFdmVudChFVlRfTU9VU0VET1dOLGJ1dHRvbk1hc2sseCx5LDAsMCxidXRzdGF0ZSk7Ci0gICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7Ci0gICAgICAgIF9FVlRfcmVzdG9yZUludChwcyk7Ci0gICAgICAgIH0KKwlwcyA9IF9FVlRfZGlzYWJsZUludCgpOworCWJ1dHRvbk1hc2sgPSAwOworCWlmIChtYXNrICYgMikgIGJ1dHRvbk1hc2sgfD0gRVZUX0xFRlRCTUFTSzsKKwlpZiAobWFzayAmIDgpICBidXR0b25NYXNrIHw9IEVWVF9SSUdIVEJNQVNLOworCWlmIChtYXNrICYgMzIpIGJ1dHRvbk1hc2sgfD0gRVZUX01JRERMRUJNQVNLOworCWFkZE1vdXNlRXZlbnQoRVZUX01PVVNFRE9XTixidXR0b25NYXNrLHgseSwwLDAsYnV0c3RhdGUpOworCUVWVC5vbGRNb3ZlID0gLTE7CisJX0VWVF9yZXN0b3JlSW50KHBzKTsKKwl9CiAgICAgaWYgKG1hc2sgJiAweDU0KSB7Ci0gICAgICAgIHBzID0gX0VWVF9kaXNhYmxlSW50KCk7Ci0gICAgICAgIGJ1dHRvbk1hc2sgPSAwOwotICAgICAgICBpZiAobWFzayAmIDIpICBidXR0b25NYXNrIHw9IEVWVF9MRUZUQk1BU0s7Ci0gICAgICAgIGlmIChtYXNrICYgOCkgIGJ1dHRvbk1hc2sgfD0gRVZUX1JJR0hUQk1BU0s7Ci0gICAgICAgIGlmIChtYXNrICYgMzIpIGJ1dHRvbk1hc2sgfD0gRVZUX01JRERMRUJNQVNLOwotICAgICAgICBhZGRNb3VzZUV2ZW50KEVWVF9NT1VTRVVQLGJ1dHRvbk1hc2sseCx5LDAsMCxidXRzdGF0ZSk7Ci0gICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7Ci0gICAgICAgIF9FVlRfcmVzdG9yZUludChwcyk7Ci0gICAgICAgIH0KKwlwcyA9IF9FVlRfZGlzYWJsZUludCgpOworCWJ1dHRvbk1hc2sgPSAwOworCWlmIChtYXNrICYgMikgIGJ1dHRvbk1hc2sgfD0gRVZUX0xFRlRCTUFTSzsKKwlpZiAobWFzayAmIDgpICBidXR0b25NYXNrIHw9IEVWVF9SSUdIVEJNQVNLOworCWlmIChtYXNrICYgMzIpIGJ1dHRvbk1hc2sgfD0gRVZUX01JRERMRUJNQVNLOworCWFkZE1vdXNlRXZlbnQoRVZUX01PVVNFVVAsYnV0dG9uTWFzayx4LHksMCwwLGJ1dHN0YXRlKTsKKwlFVlQub2xkTW92ZSA9IC0xOworCV9FVlRfcmVzdG9yZUludChwcyk7CisJfQogICAgIEVWVC5vbGRLZXkgPSAtMTsKIH0KIApAQCAtMjgyLDcgKzI4Miw3IEBACiBLZXlib2FyZCBpbnRlcnJ1cHQgaGFuZGxlciBmdW5jdGlvbi4KIAogTk9URTogICBJbnRlcnJ1cHRzIGFyZSBPRkYgd2hlbiB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBrZXlib2FyZCBJU1IsCi0gICAgICAgIGFuZCB3ZSBsZWF2ZSB0aGVtIE9GRiB0aGUgZW50aXJlIHRpbWUuCisJYW5kIHdlIGxlYXZlIHRoZW0gT0ZGIHRoZSBlbnRpcmUgdGltZS4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBFVlRBUEkga2V5Ym9hcmRJU1Iodm9pZCkKIHsKQEAgLTMyNyw3ICszMjcsNyBAQAogICAgICAqIHdoaWxlIHRoZSBwcm9ncmFtIGlzIGluaXRpYWxpc2luZy4KICAgICAgKi8KICAgICB3aGlsZSAoKGkgPSBfRVZUX2dldEtleUNvZGUoKSkgIT0gMCkKLSAgICAgICAgYWRkS2V5RXZlbnQoRVZUX0tFWURPV04saSk7CisJYWRkS2V5RXZlbnQoRVZUX0tFWURPV04saSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNDQsNjIgKzM0NCw2MiBAQAogICAgIFBNX2xvY2tIYW5kbGUgICBsaDsgLyogVW51c2VkIGluIERPUyAqLwogCiAgICAgaWYgKF9FVlRfdXNlRXZlbnRzKSB7Ci0gICAgICAgIC8qIEluaXRpYWxpc2UgdGhlIGV2ZW50IHF1ZXVlIGFuZCBlbmFibGUgb3VyIGludGVycnVwdCBoYW5kbGVycyAqLwotICAgICAgICBpbml0RXZlbnRRdWV1ZSgpOworCS8qIEluaXRpYWxpc2UgdGhlIGV2ZW50IHF1ZXVlIGFuZCBlbmFibGUgb3VyIGludGVycnVwdCBoYW5kbGVycyAqLworCWluaXRFdmVudFF1ZXVlKCk7CiAjaWZuZGVmIE5PX0tFWUJPQVJEX0lOVEVSUlVQVAotICAgICAgICBQTV9zZXRLZXlIYW5kbGVyKGtleWJvYXJkSVNSKTsKKwlQTV9zZXRLZXlIYW5kbGVyKGtleWJvYXJkSVNSKTsKICNlbmRpZgogI2lmbmRlZiBOT19NT1VTRV9JTlRFUlJVUFQKLSAgICAgICAgaWYgKChoYXZlTW91c2UgPSBkZXRlY3RNb3VzZSgpKSAhPSAwKSB7Ci0gICAgICAgICAgICBpbnQgb2xkbW9kZSA9IF9FVlRfZm9vbE1vdXNlKCk7Ci0gICAgICAgICAgICBQTV9zZXRNb3VzZUhhbmRsZXIoMHhGRkZGLG1vdXNlSVNSKTsKLSAgICAgICAgICAgIF9FVlRfdW5mb29sTW91c2Uob2xkbW9kZSk7Ci0gICAgICAgICAgICB9CisJaWYgKChoYXZlTW91c2UgPSBkZXRlY3RNb3VzZSgpKSAhPSAwKSB7CisJICAgIGludCBvbGRtb2RlID0gX0VWVF9mb29sTW91c2UoKTsKKwkgICAgUE1fc2V0TW91c2VIYW5kbGVyKDB4RkZGRixtb3VzZUlTUik7CisJICAgIF9FVlRfdW5mb29sTW91c2Uob2xkbW9kZSk7CisJICAgIH0KICNlbmRpZgogCi0gICAgICAgIC8qIFJlYWQgdGhlIGtleWJvYXJkIG1vZGlmaWVyIGZsYWdzIGZyb20gdGhlIEJJT1MgdG8gZ2V0IHRoZQotICAgICAgICAgKiBjb3JyZWN0IGluaXRpYWxpc2F0aW9uIHN0YXRlLiBUaGUgb25seSBzdGF0ZSB3ZSBjYXJlIGFib3V0IGlzCi0gICAgICAgICAqIHRoZSBjb3JyZWN0IHRvZ2dsZSBzdGF0ZSBmbGFncyBzdWNoIGFzIFNDUk9MTExPQ0ssIE5VTUxPQ0sgYW5kCi0gICAgICAgICAqIENBUFNMT0NLLgotICAgICAgICAgKi8KLSAgICAgICAgRVZULmtleU1vZGlmaWVycyA9IDA7Ci0gICAgICAgIG1vZHMgPSBQTV9nZXRCeXRlKF9FVlRfYmlvc1B0cisweDE3KTsKLSAgICAgICAgaWYgKG1vZHMgJiAweDEwKQotICAgICAgICAgICAgRVZULmtleU1vZGlmaWVycyB8PSBFVlRfU0NST0xMTE9DSzsKLSAgICAgICAgaWYgKG1vZHMgJiAweDIwKQotICAgICAgICAgICAgRVZULmtleU1vZGlmaWVycyB8PSBFVlRfTlVNTE9DSzsKLSAgICAgICAgaWYgKG1vZHMgJiAweDQwKQotICAgICAgICAgICAgRVZULmtleU1vZGlmaWVycyB8PSBFVlRfQ0FQU0xPQ0s7CisJLyogUmVhZCB0aGUga2V5Ym9hcmQgbW9kaWZpZXIgZmxhZ3MgZnJvbSB0aGUgQklPUyB0byBnZXQgdGhlCisJICogY29ycmVjdCBpbml0aWFsaXNhdGlvbiBzdGF0ZS4gVGhlIG9ubHkgc3RhdGUgd2UgY2FyZSBhYm91dCBpcworCSAqIHRoZSBjb3JyZWN0IHRvZ2dsZSBzdGF0ZSBmbGFncyBzdWNoIGFzIFNDUk9MTExPQ0ssIE5VTUxPQ0sgYW5kCisJICogQ0FQU0xPQ0suCisJICovCisJRVZULmtleU1vZGlmaWVycyA9IDA7CisJbW9kcyA9IFBNX2dldEJ5dGUoX0VWVF9iaW9zUHRyKzB4MTcpOworCWlmIChtb2RzICYgMHgxMCkKKwkgICAgRVZULmtleU1vZGlmaWVycyB8PSBFVlRfU0NST0xMTE9DSzsKKwlpZiAobW9kcyAmIDB4MjApCisJICAgIEVWVC5rZXlNb2RpZmllcnMgfD0gRVZUX05VTUxPQ0s7CisJaWYgKG1vZHMgJiAweDQwKQorCSAgICBFVlQua2V5TW9kaWZpZXJzIHw9IEVWVF9DQVBTTE9DSzsKIAotICAgICAgICAvKiBMb2NrIGFsbCBvZiB0aGUgY29kZSBhbmQgZGF0YSB1c2VkIGJ5IG91ciBwcm90ZWN0ZWQgbW9kZSBpbnRlcnJ1cHQKLSAgICAgICAgICogaGFuZGxpbmcgcm91dGluZXMsIHNvIHRoYXQgaXQgd2lsbCBjb250aW51ZSB0byB3b3JrIGNvcnJlY3RseQotICAgICAgICAgKiB1bmRlciByZWFsIG1vZGUuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIWxvY2tlZCkgewotICAgICAgICAgICAgLyogSXQgaXMgZGlmZmljdWx0IHRvIGVuc3VyZSB0aGF0IHdlIGxvY2sgb3VyIGdsb2JhbCBkYXRhLCBzbyB3ZQotICAgICAgICAgICAgICogZG8gdGhpcyBieSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSB2YXJpYWJsZSBsb2NraW5nIGFsbCBkYXRhCi0gICAgICAgICAgICAgKiAyS2Igb24gZWl0aGVyIHNpZGUuIFRoaXMgc2hvdWxkIHByb3Blcmx5IGNvdmVyIHRoZSBnbG9iYWwgZGF0YQotICAgICAgICAgICAgICogdXNlZCBieSB0aGUgbW9kdWxlICh0aGUgb3RoZXIgYWx0ZXJuYXRpdmUgaXMgdG8gZGVjbGFyZSB0aGUKLSAgICAgICAgICAgICAqIHZhcmlhYmxlcyBpbiBhc3NlbWJsZXIsIGluIHdoaWNoIGNhc2Ugd2Uga25vdyBpdCB3aWxsIGJlCi0gICAgICAgICAgICAgKiBjb3JyZWN0KS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc3RhdCAgPSAhUE1fbG9ja0RhdGFQYWdlcygmRVZULHNpemVvZihFVlQpLCZsaCk7Ci0gICAgICAgICAgICBzdGF0IHw9ICFQTV9sb2NrRGF0YVBhZ2VzKCZfRVZUX2Jpb3NQdHIsc2l6ZW9mKF9FVlRfYmlvc1B0ciksJmxoKTsKLSAgICAgICAgICAgIHN0YXQgfD0gIVBNX2xvY2tDb2RlUGFnZXMoKF9fY29kZVB0cilfRVZUX2NDb2RlU3RhcnQsKGludClfRVZUX2NDb2RlRW5kLShpbnQpX0VWVF9jQ29kZVN0YXJ0LCZsaCk7Ci0gICAgICAgICAgICBzdGF0IHw9ICFQTV9sb2NrQ29kZVBhZ2VzKChfX2NvZGVQdHIpX0VWVF9jb2RlU3RhcnQsKGludClfRVZUX2NvZGVFbmQtKGludClfRVZUX2NvZGVTdGFydCwmbGgpOwotICAgICAgICAgICAgaWYgKHN0YXQpIHsKLSAgICAgICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJQYWdlIGxvY2tpbmcgc2VydmljZXMgZmFpbGVkIC0gaW50ZXJydXB0IGhhbmRsaW5nIG5vdCBzYWZlISIpOwotICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9ja2VkID0gMTsKLSAgICAgICAgICAgIH0KKwkvKiBMb2NrIGFsbCBvZiB0aGUgY29kZSBhbmQgZGF0YSB1c2VkIGJ5IG91ciBwcm90ZWN0ZWQgbW9kZSBpbnRlcnJ1cHQKKwkgKiBoYW5kbGluZyByb3V0aW5lcywgc28gdGhhdCBpdCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgY29ycmVjdGx5CisJICogdW5kZXIgcmVhbCBtb2RlLgorCSAqLworCWlmICghbG9ja2VkKSB7CisJICAgIC8qIEl0IGlzIGRpZmZpY3VsdCB0byBlbnN1cmUgdGhhdCB3ZSBsb2NrIG91ciBnbG9iYWwgZGF0YSwgc28gd2UKKwkgICAgICogZG8gdGhpcyBieSB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSB2YXJpYWJsZSBsb2NraW5nIGFsbCBkYXRhCisJICAgICAqIDJLYiBvbiBlaXRoZXIgc2lkZS4gVGhpcyBzaG91bGQgcHJvcGVybHkgY292ZXIgdGhlIGdsb2JhbCBkYXRhCisJICAgICAqIHVzZWQgYnkgdGhlIG1vZHVsZSAodGhlIG90aGVyIGFsdGVybmF0aXZlIGlzIHRvIGRlY2xhcmUgdGhlCisJICAgICAqIHZhcmlhYmxlcyBpbiBhc3NlbWJsZXIsIGluIHdoaWNoIGNhc2Ugd2Uga25vdyBpdCB3aWxsIGJlCisJICAgICAqIGNvcnJlY3QpLgorCSAgICAgKi8KKwkgICAgc3RhdCAgPSAhUE1fbG9ja0RhdGFQYWdlcygmRVZULHNpemVvZihFVlQpLCZsaCk7CisJICAgIHN0YXQgfD0gIVBNX2xvY2tEYXRhUGFnZXMoJl9FVlRfYmlvc1B0cixzaXplb2YoX0VWVF9iaW9zUHRyKSwmbGgpOworCSAgICBzdGF0IHw9ICFQTV9sb2NrQ29kZVBhZ2VzKChfX2NvZGVQdHIpX0VWVF9jQ29kZVN0YXJ0LChpbnQpX0VWVF9jQ29kZUVuZC0oaW50KV9FVlRfY0NvZGVTdGFydCwmbGgpOworCSAgICBzdGF0IHw9ICFQTV9sb2NrQ29kZVBhZ2VzKChfX2NvZGVQdHIpX0VWVF9jb2RlU3RhcnQsKGludClfRVZUX2NvZGVFbmQtKGludClfRVZUX2NvZGVTdGFydCwmbGgpOworCSAgICBpZiAoc3RhdCkgeworCQlQTV9mYXRhbEVycm9yKCJQYWdlIGxvY2tpbmcgc2VydmljZXMgZmFpbGVkIC0gaW50ZXJydXB0IGhhbmRsaW5nIG5vdCBzYWZlISIpOworCQlleGl0KDEpOworCQl9CisJICAgIGxvY2tlZCA9IDE7CisJICAgIH0KIAotICAgICAgICAvKiBDYXRjaCBwcm9ncmFtIHRlcm1pbmF0aW9uIHNpZ25hbHMgc28gd2UgY2FuIGNsZWFuIHVwIHByb3Blcmx5ICovCi0gICAgICAgIHNpZ25hbChTSUdBQlJULCBfRVZUX2Fib3J0KTsKLSAgICAgICAgc2lnbmFsKFNJR0ZQRSwgX0VWVF9hYm9ydCk7Ci0gICAgICAgIHNpZ25hbChTSUdJTlQsIF9FVlRfYWJvcnQpOwotICAgICAgICBfRVZUX2luc3RhbGxlZCA9IHRydWU7Ci0gICAgICAgIH0KKwkvKiBDYXRjaCBwcm9ncmFtIHRlcm1pbmF0aW9uIHNpZ25hbHMgc28gd2UgY2FuIGNsZWFuIHVwIHByb3Blcmx5ICovCisJc2lnbmFsKFNJR0FCUlQsIF9FVlRfYWJvcnQpOworCXNpZ25hbChTSUdGUEUsIF9FVlRfYWJvcnQpOworCXNpZ25hbChTSUdJTlQsIF9FVlRfYWJvcnQpOworCV9FVlRfaW5zdGFsbGVkID0gdHJ1ZTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MTUsMTggKzQxNSwxOCBAQAogICAgIFJNUkVHUyAgcmVnczsKIAogICAgIGlmIChoYXZlTW91c2UpIHsKLSAgICAgICAgaW50IG9sZG1vZGUgPSBfRVZUX2Zvb2xNb3VzZSgpOwotICAgICAgICBQTV9yZXNldE1vdXNlRHJpdmVyKDEpOwotICAgICAgICByZWdzLnguYXggPSA3OyAgLyogTW91c2UgZnVuY3Rpb24gNyAtIFNldCBob3Jpem9udGFsIG1pbiBhbmQgbWF4ICovCi0gICAgICAgIHJlZ3MueC5jeCA9IDA7Ci0gICAgICAgIHJlZ3MueC5keCA9IHhSZXM7Ci0gICAgICAgIFBNX2ludDg2KDB4MzMsJnJlZ3MsJnJlZ3MpOwotICAgICAgICByZWdzLnguYXggPSA4OyAgLyogTW91c2UgZnVuY3Rpb24gOCAtIFNldCB2ZXJ0aWNhbCBtaW4gYW5kIG1heCAgICovCi0gICAgICAgIHJlZ3MueC5jeCA9IDA7Ci0gICAgICAgIHJlZ3MueC5keCA9IHlSZXM7Ci0gICAgICAgIFBNX2ludDg2KDB4MzMsJnJlZ3MsJnJlZ3MpOwotICAgICAgICBfRVZUX3VuZm9vbE1vdXNlKG9sZG1vZGUpOwotICAgICAgICB9CisJaW50IG9sZG1vZGUgPSBfRVZUX2Zvb2xNb3VzZSgpOworCVBNX3Jlc2V0TW91c2VEcml2ZXIoMSk7CisJcmVncy54LmF4ID0gNzsgIC8qIE1vdXNlIGZ1bmN0aW9uIDcgLSBTZXQgaG9yaXpvbnRhbCBtaW4gYW5kIG1heCAqLworCXJlZ3MueC5jeCA9IDA7CisJcmVncy54LmR4ID0geFJlczsKKwlQTV9pbnQ4NigweDMzLCZyZWdzLCZyZWdzKTsKKwlyZWdzLnguYXggPSA4OyAgLyogTW91c2UgZnVuY3Rpb24gOCAtIFNldCB2ZXJ0aWNhbCBtaW4gYW5kIG1heCAgICovCisJcmVncy54LmN4ID0gMDsKKwlyZWdzLnguZHggPSB5UmVzOworCVBNX2ludDg2KDB4MzMsJnJlZ3MsJnJlZ3MpOworCV9FVlRfdW5mb29sTW91c2Uob2xkbW9kZSk7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDQxLDEzICs0NDEsMTMgQEAKICAgICBSTVJFR1MgIHJlZ3M7CiAKICAgICBpZiAoaGF2ZU1vdXNlKSB7Ci0gICAgICAgIGludCBvbGRtb2RlID0gX0VWVF9mb29sTW91c2UoKTsKLSAgICAgICAgcmVncy54LmF4ID0gNDsgICAgICAvKiBNb3VzZSBmdW5jdGlvbiA0IC0gU2V0IG1vdXNlIHBvc2l0aW9uICAgICovCi0gICAgICAgIHJlZ3MueC5jeCA9ICp4OyAgICAgLyogTmV3IGhvcml6b250YWwgY29vcmRpbmF0ZSAgICAgICAgICAgICAgICAqLwotICAgICAgICByZWdzLnguZHggPSAqeTsgICAgIC8qIE5ldyB2ZXJ0aWNhbCBjb29yZGluYXRlICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgUE1faW50ODYoMHgzMywmcmVncywmcmVncyk7Ci0gICAgICAgIF9FVlRfdW5mb29sTW91c2Uob2xkbW9kZSk7Ci0gICAgICAgIH0KKwlpbnQgb2xkbW9kZSA9IF9FVlRfZm9vbE1vdXNlKCk7CisJcmVncy54LmF4ID0gNDsgICAgICAvKiBNb3VzZSBmdW5jdGlvbiA0IC0gU2V0IG1vdXNlIHBvc2l0aW9uICAgICovCisJcmVncy54LmN4ID0gKng7ICAgICAvKiBOZXcgaG9yaXpvbnRhbCBjb29yZGluYXRlICAgICAgICAgICAgICAgICovCisJcmVncy54LmR4ID0gKnk7ICAgICAvKiBOZXcgdmVydGljYWwgY29vcmRpbmF0ZSAgICAgICAgICAgICAgICAgICovCisJUE1faW50ODYoMHgzMywmcmVncywmcmVncyk7CisJX0VWVF91bmZvb2xNb3VzZShvbGRtb2RlKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NjAsMjggKzQ2MCwyOCBAQAogICAgIHVjaGFyICAgbW9kczsKIAogICAgIGlmIChfRVZUX2luc3RhbGxlZCkgewotICAgICAgICAvKiBSZXN0b3JlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8KLSAgICAgICAgUE1fcmVzdG9yZUtleUhhbmRsZXIoKTsKLSAgICAgICAgaWYgKGhhdmVNb3VzZSkKLSAgICAgICAgICAgIFBNX3Jlc3RvcmVNb3VzZUhhbmRsZXIoKTsKLSAgICAgICAgc2lnbmFsKFNJR0FCUlQsIFNJR19ERkwpOwotICAgICAgICBzaWduYWwoU0lHRlBFLCBTSUdfREZMKTsKLSAgICAgICAgc2lnbmFsKFNJR0lOVCwgU0lHX0RGTCk7CisJLyogUmVzdG9yZSB0aGUgaW50ZXJydXB0IGhhbmRsZXJzICovCisJUE1fcmVzdG9yZUtleUhhbmRsZXIoKTsKKwlpZiAoaGF2ZU1vdXNlKQorCSAgICBQTV9yZXN0b3JlTW91c2VIYW5kbGVyKCk7CisJc2lnbmFsKFNJR0FCUlQsIFNJR19ERkwpOworCXNpZ25hbChTSUdGUEUsIFNJR19ERkwpOworCXNpZ25hbChTSUdJTlQsIFNJR19ERkwpOwogCi0gICAgICAgIC8qIFNldCB0aGUga2V5Ym9hcmQgbW9kaWZpZXIgZmxhZ3MgaW4gdGhlIEJJT1MgdG8gb3VyIHZhbHVlcyAqLwotICAgICAgICBFVlRfYWxsb3dMRURTKHRydWUpOwotICAgICAgICBtb2RzID0gUE1fZ2V0Qnl0ZShfRVZUX2Jpb3NQdHIrMHgxNykgJiB+MHg3MDsKLSAgICAgICAgaWYgKEVWVC5rZXlNb2RpZmllcnMgJiBFVlRfU0NST0xMTE9DSykKLSAgICAgICAgICAgIG1vZHMgfD0gMHgxMDsKLSAgICAgICAgaWYgKEVWVC5rZXlNb2RpZmllcnMgJiBFVlRfTlVNTE9DSykKLSAgICAgICAgICAgIG1vZHMgfD0gMHgyMDsKLSAgICAgICAgaWYgKEVWVC5rZXlNb2RpZmllcnMgJiBFVlRfQ0FQU0xPQ0spCi0gICAgICAgICAgICBtb2RzIHw9IDB4NDA7Ci0gICAgICAgIFBNX3NldEJ5dGUoX0VWVF9iaW9zUHRyKzB4MTcsbW9kcyk7CisJLyogU2V0IHRoZSBrZXlib2FyZCBtb2RpZmllciBmbGFncyBpbiB0aGUgQklPUyB0byBvdXIgdmFsdWVzICovCisJRVZUX2FsbG93TEVEUyh0cnVlKTsKKwltb2RzID0gUE1fZ2V0Qnl0ZShfRVZUX2Jpb3NQdHIrMHgxNykgJiB+MHg3MDsKKwlpZiAoRVZULmtleU1vZGlmaWVycyAmIEVWVF9TQ1JPTExMT0NLKQorCSAgICBtb2RzIHw9IDB4MTA7CisJaWYgKEVWVC5rZXlNb2RpZmllcnMgJiBFVlRfTlVNTE9DSykKKwkgICAgbW9kcyB8PSAweDIwOworCWlmIChFVlQua2V5TW9kaWZpZXJzICYgRVZUX0NBUFNMT0NLKQorCSAgICBtb2RzIHw9IDB4NDA7CisJUE1fc2V0Qnl0ZShfRVZUX2Jpb3NQdHIrMHgxNyxtb2RzKTsKIAotICAgICAgICAvKiBGbGFnIHRoYXQgd2UgYXJlIG5vIGxvbmdlciBpbnN0YWxsZWQgKi8KLSAgICAgICAgX0VWVF9pbnN0YWxsZWQgPSBmYWxzZTsKLSAgICAgICAgfQorCS8qIEZsYWcgdGhhdCB3ZSBhcmUgbm8gbG9uZ2VyIGluc3RhbGxlZCAqLworCV9FVlRfaW5zdGFsbGVkID0gZmFsc2U7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vZG9zL3BtLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvcG0uYwppbmRleCA3MWFjZDY4Li4yYWQ5ZTM0IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvcG0uYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvcG0uYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAgICAgVlhEX3JlZ3MgKnJlZ3MpCiB7CiAgICAgaWYgKF9QTV9WWERfc2VsICE9IDAgfHwgX1BNX1ZYRF9vZmYgIT0gMCkKLSAgICAgICAgX1BNX1Z4RENhbGwocmVncyxfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7CisJX1BNX1Z4RENhbGwocmVncyxfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNzIsMTEgKzE3MiwxMSBAQAogCiAgICAgLyogQ2FsbCB0aGUgaGVscGVyIFZ4RCB0byBkZXRlcm1pbmUgdGhlIHZlcnNpb24gbnVtYmVyICovCiAgICAgaWYgKF9QTV9WWERfc2VsICE9IDAgfHwgX1BNX1ZYRF9vZmYgIT0gMCkgewotICAgICAgICBtZW1zZXQoJnIsMCxzaXplb2YocikpOwotICAgICAgICByLmVheCA9IEFQSV9OVU0oUE1IRUxQX0dFVFZFUik7Ci0gICAgICAgIF9QTV9WeERDYWxsKCZyLF9QTV9WWERfb2ZmLF9QTV9WWERfc2VsKTsKLSAgICAgICAgcmV0dXJuIFZYRF92ZXJzaW9uID0gKHVpbnQpci5lYXg7Ci0gICAgICAgIH0KKwltZW1zZXQoJnIsMCxzaXplb2YocikpOworCXIuZWF4ID0gQVBJX05VTShQTUhFTFBfR0VUVkVSKTsKKwlfUE1fVnhEQ2FsbCgmcixfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7CisJcmV0dXJuIFZYRF92ZXJzaW9uID0gKHVpbnQpci5lYXg7CisJfQogICAgIHJldHVybiBWWERfdmVyc2lvbiA9IDA7CiB9CiAKQEAgLTE5OSw3ICsxOTksNyBAQAogCiAgICAgLyogQmFpbCBlYXJseSBpZiB3ZSBoYXZlIGFscmVhZCBjb25uZWN0ZWQgKi8KICAgICBpZiAoVlhEX3ZlcnNpb24gIT0gLTEpCi0gICAgICAgIHJldHVybiBWWERfdmVyc2lvbiAhPSAwOworCXJldHVybiBWWERfdmVyc2lvbiAhPSAwOwogCiAgICAgLyogR2V0IHRoZSBzdGF0aWMgU0RESEVMUC5WWEQgZW50cnkgcG9pbnQgaWYgYXZhaWxhYmxlICovCiAgICAgUE1fc2VncmVhZCgmc3JlZ3MpOwpAQCAtMjExLDkgKzIxMSw5IEBACiAgICAgX1BNX1ZYRF9zZWwgPSBzcmVncy5lczsKICAgICBfUE1fVlhEX29mZiA9IHJlZ3MueC5kaTsKICAgICBpZiAoX1BNX1ZYRF9zZWwgIT0gMCB8fCBfUE1fVlhEX29mZiAhPSAwKSB7Ci0gICAgICAgIGlmIChQTUhFTFBfZ2V0VmVyc2lvbigpID49IFBNSEVMUF9WRVJTSU9OKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKwlpZiAoUE1IRUxQX2dldFZlcnNpb24oKSA+PSBQTUhFTFBfVkVSU0lPTikKKwkgICAgcmV0dXJuIHRydWU7CisJfQogCiAgICAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZW4gZWl0aGVyIFNEREhFTFAuVlhEIGlzIG5vdCBsb2FkZWQsIG9yIGl0IGlzIGFuCiAgICAgICogZWFybGllciB2ZXJzaW9uLiBJbiB0aGlzIGNhc2UgdHJ5IHRvIGR5bmFtaWNhbGx5IGxvYWQgdGhlIFBNSEVMUC5WWEQKQEAgLTIyOCw3ICsyMjgsNyBAQAogICAgIFZYRF9sb2FkU2VsID0gc3JlZ3MuZXM7CiAgICAgVlhEX2xvYWRPZmYgPSByZWdzLnguZGk7CiAgICAgaWYgKFZYRF9sb2FkU2VsID09IDAgJiYgVlhEX2xvYWRPZmYgPT0gMCkKLSAgICAgICAgcmV0dXJuIFZYRF92ZXJzaW9uID0gMDsKKwlyZXR1cm4gVlhEX3ZlcnNpb24gPSAwOwogICAgIHIuZWF4ID0gMTsKICAgICByLmVieCA9IDA7CiAgICAgci5lZHggPSAodWludClWWERfbmFtZTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogICAgIHIuZXMgPSBzcmVncy5lczsKICAgICBfUE1fVnhEQ2FsbCgmcixWWERfbG9hZE9mZixWWERfbG9hZFNlbCk7CiAgICAgaWYgKHIuZWF4ICE9IDApCi0gICAgICAgIHJldHVybiBWWERfdmVyc2lvbiA9IDA7CisJcmV0dXJuIFZYRF92ZXJzaW9uID0gMDsKIAogICAgIC8qIEdldCB0aGUgZHluYW1pYyBWeEQgZW50cnkgcG9pbnQgc28gd2UgY2FuIGNhbGwgaXQgKi8KICAgICBhdGV4aXQoVW5sb2FkVnhEKTsKQEAgLTI0OSw5ICsyNDksOSBAQAogICAgIF9QTV9WWERfc2VsID0gc3JlZ3MuZXM7CiAgICAgX1BNX1ZYRF9vZmYgPSByZWdzLnguZGk7CiAgICAgaWYgKF9QTV9WWERfc2VsID09IDAgJiYgX1BNX1ZYRF9vZmYgPT0gMCkKLSAgICAgICAgcmV0dXJuIFZYRF92ZXJzaW9uID0gMDsKKwlyZXR1cm4gVlhEX3ZlcnNpb24gPSAwOwogICAgIGlmIChQTUhFTFBfZ2V0VmVyc2lvbigpID49IFBNSEVMUF9WRVJTSU9OKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gVlhEX3ZlcnNpb24gPSAwOwogfQogI2VuZGlmCkBAIC0yNjksMjQgKzI2OSwyNCBAQAogCiAgICAgLyogQ2hlY2sgaWYgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgQ2F1c2VXYXkgdW5kZXIgcmVhbCBET1MgKi8KICAgICBpZiAoX1BNX2hhdmVDYXVzZVdheSA9PSAtMSkgewotICAgICAgICAvKiBDaGVjayBpZiB3ZSBhcmUgcnVubmluZyB1bmRlciBEUE1JIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBub3QgYmUKLSAgICAgICAgICogYWJsZSB0byB1c2Ugb3VyIHNwZWNpYWwgcmluZyAwIENhdXNlV2F5IGZ1bmN0aW9ucy4KLSAgICAgICAgICovCi0gICAgICAgIF9QTV9oYXZlQ2F1c2VXYXkgPSBmYWxzZTsKLSAgICAgICAgcmVncy54LmF4ID0gMHhGRjAwOwotICAgICAgICBQTV9pbnQzODYoMHgzMSwmcmVncywmcmVncyk7Ci0gICAgICAgIGlmIChyZWdzLnguY2ZsYWcgfHwgIShyZWdzLmUuZWRpICYgOCkpIHsKLSAgICAgICAgICAgIC8qIFdlIGFyZSBub3QgdW5kZXIgRFBNSSwgc28gbm93IGNoZWNrIGlmIENhdXNlV2F5IGlzIGFjdGl2ZSAqLwotICAgICAgICAgICAgcmVncy54LmF4ID0gMHhGRkY5OwotICAgICAgICAgICAgUE1faW50Mzg2KDB4MzEsJnJlZ3MsJnJlZ3MpOwotICAgICAgICAgICAgaWYgKCFyZWdzLnguY2ZsYWcgJiYgcmVncy5lLmVjeCA9PSAweDQzNDE1NTUzICYmIHJlZ3MuZS5lZHggPT0gMHg0NTU3NDE1OSkKLSAgICAgICAgICAgICAgICBfUE1faGF2ZUNhdXNlV2F5ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KKwkvKiBDaGVjayBpZiB3ZSBhcmUgcnVubmluZyB1bmRlciBEUE1JIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBub3QgYmUKKwkgKiBhYmxlIHRvIHVzZSBvdXIgc3BlY2lhbCByaW5nIDAgQ2F1c2VXYXkgZnVuY3Rpb25zLgorCSAqLworCV9QTV9oYXZlQ2F1c2VXYXkgPSBmYWxzZTsKKwlyZWdzLnguYXggPSAweEZGMDA7CisJUE1faW50Mzg2KDB4MzEsJnJlZ3MsJnJlZ3MpOworCWlmIChyZWdzLnguY2ZsYWcgfHwgIShyZWdzLmUuZWRpICYgOCkpIHsKKwkgICAgLyogV2UgYXJlIG5vdCB1bmRlciBEUE1JLCBzbyBub3cgY2hlY2sgaWYgQ2F1c2VXYXkgaXMgYWN0aXZlICovCisJICAgIHJlZ3MueC5heCA9IDB4RkZGOTsKKwkgICAgUE1faW50Mzg2KDB4MzEsJnJlZ3MsJnJlZ3MpOworCSAgICBpZiAoIXJlZ3MueC5jZmxhZyAmJiByZWdzLmUuZWN4ID09IDB4NDM0MTU1NTMgJiYgcmVncy5lLmVkeCA9PSAweDQ1NTc0MTU5KQorCQlfUE1faGF2ZUNhdXNlV2F5ID0gdHJ1ZTsKKwkgICAgfQogCi0gICAgICAgIC8qIE5vdyBjb25uZWN0IHRvIFBNSEVMUC5WWEQgYW5kIGluaXRpYWxpc2UgTVRSUiBtb2R1bGUgKi8KLSAgICAgICAgaWYgKCFQTUhFTFBfY29ubmVjdCgpKQotICAgICAgICAgICAgTVRSUl9pbml0KCk7Ci0gICAgICAgIH0KKwkvKiBOb3cgY29ubmVjdCB0byBQTUhFTFAuVlhEIGFuZCBpbml0aWFsaXNlIE1UUlIgbW9kdWxlICovCisJaWYgKCFQTUhFTFBfY29ubmVjdCgpKQorCSAgICBNVFJSX2luaXQoKTsKKwl9CiAjZW5kaWYKIH0KIApAQCAtMzExLDE0ICszMTEsMTQgQEAKICAgICBWWERfcmVncyAgICByZWdzOwogCiAgICAgaWYgKFBNSEVMUF9jb25uZWN0KCkpIHsKLSAgICAgICAgbWVtc2V0KCZyZWdzLDAsc2l6ZW9mKHJlZ3MpKTsKLSAgICAgICAgcmVncy5lYXggPSBBUElfTlVNKFBNSEVMUF9FTkFCTEVMRkJDT01CKTsKLSAgICAgICAgcmVncy5lYnggPSBiYXNlOwotICAgICAgICByZWdzLmVjeCA9IHNpemU7Ci0gICAgICAgIHJlZ3MuZWR4ID0gdHlwZTsKLSAgICAgICAgX1BNX1Z4RENhbGwoJnJlZ3MsX1BNX1ZYRF9vZmYsX1BNX1ZYRF9zZWwpOwotICAgICAgICByZXR1cm4gcmVncy5lYXg7Ci0gICAgICAgIH0KKwltZW1zZXQoJnJlZ3MsMCxzaXplb2YocmVncykpOworCXJlZ3MuZWF4ID0gQVBJX05VTShQTUhFTFBfRU5BQkxFTEZCQ09NQik7CisJcmVncy5lYnggPSBiYXNlOworCXJlZ3MuZWN4ID0gc2l6ZTsKKwlyZWdzLmVkeCA9IHR5cGU7CisJX1BNX1Z4RENhbGwoJnJlZ3MsX1BNX1ZYRF9vZmYsX1BNX1ZYRF9zZWwpOworCXJldHVybiByZWdzLmVheDsKKwl9CiAgICAgcmV0dXJuIE1UUlJfZW5hYmxlV3JpdGVDb21iaW5lKGJhc2Usc2l6ZSx0eXBlKTsKICNlbHNlCiAgICAgcmV0dXJuIFBNX01UUlJfTk9UX1NVUFBPUlRFRDsKQEAgLTM0Niw5ICszNDYsOSBAQAogewogICAgIHVpbnQgcG9zID0gc3RybGVuKHMpOwogICAgIGlmIChzW3Bvcy0xXSAhPSAnXFwnKSB7Ci0gICAgICAgIHNbcG9zXSA9ICdcXCc7Ci0gICAgICAgIHNbcG9zKzFdID0gJ1wwJzsKLSAgICAgICAgfQorCXNbcG9zXSA9ICdcXCc7CisJc1twb3MrMV0gPSAnXDAnOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9zZXRGYXRhbEVycm9yQ2xlYW51cCgKQEAgLTM2MCw3ICszNjAsNyBAQAogdm9pZCBQTUFQSSBQTV9mYXRhbEVycm9yKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBpZiAoZmF0YWxFcnJvckNsZWFudXApCi0gICAgICAgIGZhdGFsRXJyb3JDbGVhbnVwKCk7CisJZmF0YWxFcnJvckNsZWFudXAoKTsKICAgICBmcHJpbnRmKHN0ZGVyciwiJXNcbiIsIG1zZyk7CiAgICAgZXhpdCgxKTsKIH0KQEAgLTM2OCwxOCArMzY4LDE4IEBACiBzdGF0aWMgdm9pZCBFeGl0VkJFQnVmKHZvaWQpCiB7CiAgICAgaWYgKFZFU0FCdWZfcHRyKQotICAgICAgICBQTV9mcmVlUmVhbFNlZyhWRVNBQnVmX3B0cik7CisJUE1fZnJlZVJlYWxTZWcoVkVTQUJ1Zl9wdHIpOwogICAgIFZFU0FCdWZfcHRyID0gMDsKIH0KIAogdm9pZCAqIFBNQVBJIFBNX2dldFZFU0FCdWYodWludCAqbGVuLHVpbnQgKnJzZWcsdWludCAqcm9mZikKIHsKICAgICBpZiAoIVZFU0FCdWZfcHRyKSB7Ci0gICAgICAgIC8qIEFsbG9jYXRlIGEgZ2xvYmFsIGJ1ZmZlciBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBWRVNBIFZCRSAqLwotICAgICAgICBpZiAoKFZFU0FCdWZfcHRyID0gUE1fYWxsb2NSZWFsU2VnKFZFU0FCdWZfbGVuLCAmVkVTQUJ1Zl9yc2VnLCAmVkVTQUJ1Zl9yb2ZmKSkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhdGV4aXQoRXhpdFZCRUJ1Zik7Ci0gICAgICAgIH0KKwkvKiBBbGxvY2F0ZSBhIGdsb2JhbCBidWZmZXIgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgVkVTQSBWQkUgKi8KKwlpZiAoKFZFU0FCdWZfcHRyID0gUE1fYWxsb2NSZWFsU2VnKFZFU0FCdWZfbGVuLCAmVkVTQUJ1Zl9yc2VnLCAmVkVTQUJ1Zl9yb2ZmKSkgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisJYXRleGl0KEV4aXRWQkVCdWYpOworCX0KICAgICAqbGVuID0gVkVTQUJ1Zl9sZW47CiAgICAgKnJzZWcgPSBWRVNBQnVmX3JzZWc7CiAgICAgKnJvZmYgPSBWRVNBQnVmX3JvZmY7CkBAIC00MjksMTIgKzQyOSwxMiBAQAogICAgIGludCBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9STV9CTE9DS1M7IGkrKykgewotICAgICAgICBpZiAocm1CbG9ja3NbaV0ucCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBybUJsb2Nrc1tpXS5wID0gbWVtOwotICAgICAgICAgICAgcm1CbG9ja3NbaV0udGFnID0gdGFnOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKHJtQmxvY2tzW2ldLnAgPT0gTlVMTCkgeworCSAgICBybUJsb2Nrc1tpXS5wID0gbWVtOworCSAgICBybUJsb2Nrc1tpXS50YWcgPSB0YWc7CisJICAgIHJldHVybjsKKwkgICAgfQorCX0KICAgICBQTV9mYXRhbEVycm9yKCJUbyBtYW55IHJlYWwgbW9kZSBtZW1vcnkgYmxvY2sgYWxsb2NhdGlvbnMhIik7CiB9CiAKQEAgLTQ0Myw5ICs0NDMsOSBAQAogICAgIGludCBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9STV9CTE9DS1M7IGkrKykgewotICAgICAgICBpZiAocm1CbG9ja3NbaV0ucCA9PSBtZW0pCi0gICAgICAgICAgICByZXR1cm4gcm1CbG9ja3NbaV0udGFnOwotICAgICAgICB9CisJaWYgKHJtQmxvY2tzW2ldLnAgPT0gbWVtKQorCSAgICByZXR1cm4gcm1CbG9ja3NbaV0udGFnOworCX0KICAgICBQTV9mYXRhbEVycm9yKCJDb3VsZCBub3QgZmluZCBwcmlvciByZWFsIG1vZGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRpb24hIik7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC00NjksMTkgKzQ2OSwxOSBAQAogICAgIGNoYXIgICAgICAgICplbnY7CiAKICAgICBpZiAoKGVudiA9IGdldGVudigiTlVDTEVVU19QQVRIIikpICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBlbnY7CisJcmV0dXJuIGVudjsKICAgICBpZiAoKGVudiA9IGdldGVudigiV0lOQk9PVERJUiIpKSAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIFJ1bm5pbmcgaW4gYSBXaW5kb3dzIDl4IERPUyBib3ggb3IgRE9TIG1vZGUgKi8KLSAgICAgICAgc3RyY3B5KHBhdGgsZW52KTsKLSAgICAgICAgc3RyY2F0KHBhdGgsIlxcc3lzdGVtXFxudWNsZXVzIik7Ci0gICAgICAgIHJldHVybiBwYXRoOwotICAgICAgICB9CisJLyogUnVubmluZyBpbiBhIFdpbmRvd3MgOXggRE9TIGJveCBvciBET1MgbW9kZSAqLworCXN0cmNweShwYXRoLGVudik7CisJc3RyY2F0KHBhdGgsIlxcc3lzdGVtXFxudWNsZXVzIik7CisJcmV0dXJuIHBhdGg7CisJfQogICAgIGlmICgoZW52ID0gZ2V0ZW52KCJTeXN0ZW1Sb290IikpICE9IE5VTEwpIHsKLSAgICAgICAgLyogUnVubmluZyBpbiBhbiBOVC8ySyBET1MgYm94ICovCi0gICAgICAgIHN0cmNweShwYXRoLGVudik7Ci0gICAgICAgIHN0cmNhdChwYXRoLCJcXHN5c3RlbTMyXFxudWNsZXVzIik7Ci0gICAgICAgIHJldHVybiBwYXRoOwotICAgICAgICB9CisJLyogUnVubmluZyBpbiBhbiBOVC8ySyBET1MgYm94ICovCisJc3RyY3B5KHBhdGgsZW52KTsKKwlzdHJjYXQocGF0aCwiXFxzeXN0ZW0zMlxcbnVjbGV1cyIpOworCXJldHVybiBwYXRoOworCX0KICAgICByZXR1cm4gImM6XFxudWNsZXVzIjsKIH0KIApAQCAtNTM4LDEyICs1MzgsMTIgQEAKICAgICBzYi0+b2xkTW9kZSA9IHJlZ3MuaC5hbCAmIDB4N0Y7CiAgICAgc2ItPm9sZDUwTGluZXMgPSBmYWxzZTsKICAgICBpZiAoc2ItPm9sZE1vZGUgPT0gMHgzKSB7Ci0gICAgICAgIHJlZ3MueC5heCA9IDB4MTEzMDsKLSAgICAgICAgcmVncy54LmJ4ID0gMDsKLSAgICAgICAgcmVncy54LmR4ID0gMDsKLSAgICAgICAgUE1faW50ODYoMHgxMCwmcmVncywmcmVncyk7Ci0gICAgICAgIHNiLT5vbGQ1MExpbmVzID0gKHJlZ3MuaC5kbCA9PSA0MiB8fCByZWdzLmguZGwgPT0gNDkpOwotICAgICAgICB9CisJcmVncy54LmF4ID0gMHgxMTMwOworCXJlZ3MueC5ieCA9IDA7CisJcmVncy54LmR4ID0gMDsKKwlQTV9pbnQ4NigweDEwLCZyZWdzLCZyZWdzKTsKKwlzYi0+b2xkNTBMaW5lcyA9IChyZWdzLmguZGwgPT0gNDIgfHwgcmVncy5oLmRsID09IDQ5KTsKKwl9CiAgICAgKHZvaWQpaHduZENvbnNvbGU7CiB9CiAKQEAgLTU2MCwxMCArNTYwLDEwIEBACiAKICAgICAvKiBSZXRvcmUgNTAgbGluZSBtb2RlIGlmIHNldCAqLwogICAgIGlmIChzYi0+b2xkNTBMaW5lcykgewotICAgICAgICByZWdzLnguYXggPSAweDExMTI7Ci0gICAgICAgIHJlZ3MueC5ieCA9IDA7Ci0gICAgICAgIFBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOwotICAgICAgICB9CisJcmVncy54LmF4ID0gMHgxMTEyOworCXJlZ3MueC5ieCA9IDA7CisJUE1faW50ODYoMHgxMCwmcmVncywmcmVncyk7CisJfQogICAgICh2b2lkKWh3bmRDb25zb2xlOwogfQogCkBAIC01ODcsMTMgKzU4NywxMyBAQAogICAgIFBNX3NldFdvcmQoX2Jpb3NQdHIrMHg0Qyx3aWR0aCoyKTsKICAgICBQTV9zZXRCeXRlKF9iaW9zUHRyKzB4ODQsaGVpZ2h0LTEpOwogICAgIGlmIChoZWlnaHQgPiAyNSkgewotICAgICAgICBQTV9zZXRXb3JkKF9iaW9zUHRyKzB4NjAsMHgwNjA3KTsKLSAgICAgICAgUE1fc2V0Qnl0ZShfYmlvc1B0cisweDg1LDB4MDgpOwotICAgICAgICB9CisJUE1fc2V0V29yZChfYmlvc1B0cisweDYwLDB4MDYwNyk7CisJUE1fc2V0Qnl0ZShfYmlvc1B0cisweDg1LDB4MDgpOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgUE1fc2V0V29yZChfYmlvc1B0cisweDYwLDB4MEQwRSk7Ci0gICAgICAgIFBNX3NldEJ5dGUoX2Jpb3NQdHIrMHg4NSwweDAxNik7Ci0gICAgICAgIH0KKwlQTV9zZXRXb3JkKF9iaW9zUHRyKzB4NjAsMHgwRDBFKTsKKwlQTV9zZXRCeXRlKF9iaW9zUHRyKzB4ODUsMHgwMTYpOworCX0KIH0KIAogdm9pZCAqIFBNQVBJIFBNX21hbGxvY1NoYXJlZChsb25nIHNpemUpCkBAIC02MjMsMjIgKzYyMywyMiBAQAogCiAgICAgLyogQ3JlYXRlIGEgemVybyBtZW1vcnkgbWFwcGluZyBmb3IgdXMgdG8gdXNlICovCiAgICAgaWYgKGZpcnN0VGltZSkgewotICAgICAgICBybVplcm9QdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMCwweDdGRkYsdHJ1ZSk7Ci0gICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwotICAgICAgICB9CisJcm1aZXJvUHRyID0gUE1fbWFwUGh5c2ljYWxBZGRyKDAsMHg3RkZGLHRydWUpOworCWZpcnN0VGltZSA9IGZhbHNlOworCX0KIAogICAgIC8qIFJlbWFwIHRoZSBzZWNvbmRhcnkgQklPUyB0byAweEMwMDAwIHBoeXNpY2FsICovCiAgICAgaWYgKEJJT1NQaHlzQWRkciAhPSAweEMwMDAwTCB8fCBCSU9TTGVuID4gMzI3NjgpIHsKLSAgICAgICAgLyogRE9TIGNhbm5vdCB2aXJ0dWFsbHkgcmVtYXAgdGhlIEJJT1MsIHNvIHdlIGNhbiBvbmx5IHdvcmsgaWYgYWxsCi0gICAgICAgICAqIHRoZSBzZWNvbmRhcnkgY29udHJvbGxlcnMgYXJlIGlkZW50aWNhbCwgYW5kIHdlIHRoZW4gdXNlIHRoZQotICAgICAgICAgKiBCSU9TIG9uIHRoZSBmaXJzdCBjb250cm9sbGVyIGZvciBhbGwgdGhlIHJlbWFpbmluZyBjb250cm9sbGVycy4KLSAgICAgICAgICoKLSAgICAgICAgICogRm9yIE9TJ2VzIHRoYXQgZG8gdmlydHVhbCBtZW1vcnksIGFuZCByZW1hcHBpbmcgb2YgMHhDMDAwMAotICAgICAgICAgKiBwaHlzaWNhbCAocGVyaGFwcyBhIGNvcHkgb24gd3JpdGUgbWFwcGluZykgc2hvdWxkIGJlIGFsbCB0aGF0Ci0gICAgICAgICAqIGlzIG5lZWRlZC4KLSAgICAgICAgICovCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorCS8qIERPUyBjYW5ub3QgdmlydHVhbGx5IHJlbWFwIHRoZSBCSU9TLCBzbyB3ZSBjYW4gb25seSB3b3JrIGlmIGFsbAorCSAqIHRoZSBzZWNvbmRhcnkgY29udHJvbGxlcnMgYXJlIGlkZW50aWNhbCwgYW5kIHdlIHRoZW4gdXNlIHRoZQorCSAqIEJJT1Mgb24gdGhlIGZpcnN0IGNvbnRyb2xsZXIgZm9yIGFsbCB0aGUgcmVtYWluaW5nIGNvbnRyb2xsZXJzLgorCSAqCisJICogRm9yIE9TJ2VzIHRoYXQgZG8gdmlydHVhbCBtZW1vcnksIGFuZCByZW1hcHBpbmcgb2YgMHhDMDAwMAorCSAqIHBoeXNpY2FsIChwZXJoYXBzIGEgY29weSBvbiB3cml0ZSBtYXBwaW5nKSBzaG91bGQgYmUgYWxsIHRoYXQKKwkgKiBpcyBuZWVkZWQuCisJICovCisJcmV0dXJuIGZhbHNlOworCX0KIAogICAgIC8qIFNhdmUgY3VycmVudCBoYW5kbGVycyBvZiBpbnQgMTBoIGFuZCA2RGggKi8KICAgICBHZXRSTVZlY3QoMHgxMCwmQ3VycmVudDEwKTsKQEAgLTY1Niw5ICs2NTYsOSBAQAogCiAgICAgLyogU2Vjb25kIHRoZSBwcmltYXJ5IEJJT1MgbWFwcGluIDE6MSBmb3IgMHhDMDAwMCBwaHlzaWNhbCAqLwogICAgIGlmIChCSU9TUGh5c0FkZHIgIT0gMHhDMDAwMEwpIHsKLSAgICAgICAgLyogRE9TIGRvZXMgbm90IHN1cHBvcnQgdGhpcyAqLwotICAgICAgICAodm9pZCltYXBwZWRCSU9TOwotICAgICAgICB9CisJLyogRE9TIGRvZXMgbm90IHN1cHBvcnQgdGhpcyAqLworCSh2b2lkKW1hcHBlZEJJT1M7CisJfQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC02NjksMjYgKzY2OSwyNiBAQAogCiAgICAgTFpUaW1lck9uRXh0KCZ0bSk7CiAgICAgd2hpbGUgKExaVGltZXJMYXBFeHQoJnRtKSA8IG1pY3Jvc2Vjb25kcykKLSAgICAgICAgOworCTsKICAgICBMWlRpbWVyT2ZmRXh0KCZ0bSk7CiB9CiAKIGludCBQTUFQSSBQTV9nZXRDT01Qb3J0KGludCBwb3J0KQogewogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNGODsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgyRjg7Ci0gICAgICAgIH0KKwljYXNlIDA6IHJldHVybiAweDNGODsKKwljYXNlIDE6IHJldHVybiAweDJGODsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKIGludCBQTUFQSSBQTV9nZXRMUFRQb3J0KGludCBwb3J0KQogewogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNCQzsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgzNzg7Ci0gICAgICAgIGNhc2UgMjogcmV0dXJuIDB4Mjc4OwotICAgICAgICB9CisJY2FzZSAwOiByZXR1cm4gMHgzQkM7CisJY2FzZSAxOiByZXR1cm4gMHgzNzg7CisJY2FzZSAyOiByZXR1cm4gMHgyNzg7CisJfQogICAgIHJldHVybiAwOwogfQogCkBAIC03MzMsMTUgKzczMywxNSBAQAogICAgIG1lbXNldChmaW5kRGF0YSwwLGZpbmREYXRhLT5kd1NpemUpOwogICAgIGZpbmREYXRhLT5kd1NpemUgPSBkd1NpemU7CiAgICAgaWYgKGJsay0+YXR0cmliICYgX0FfUkRPTkxZKQotICAgICAgICBmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfUkVBRE9OTFk7CisJZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX1JFQURPTkxZOwogICAgIGlmIChibGstPmF0dHJpYiAmIF9BX1NVQkRJUikKLSAgICAgICAgZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX0RJUkVDVE9SWTsKKwlmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfRElSRUNUT1JZOwogICAgIGlmIChibGstPmF0dHJpYiAmIF9BX0FSQ0gpCi0gICAgICAgIGZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9BUkNISVZFOworCWZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9BUkNISVZFOwogICAgIGlmIChibGstPmF0dHJpYiAmIF9BX0hJRERFTikKLSAgICAgICAgZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX0hJRERFTjsKKwlmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfSElEREVOOwogICAgIGlmIChibGstPmF0dHJpYiAmIF9BX1NZU1RFTSkKLSAgICAgICAgZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX1NZU1RFTTsKKwlmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfU1lTVEVNOwogICAgIGZpbmREYXRhLT5zaXplTG8gPSBibGstPnNpemU7CiAgICAgc3RybmNweShmaW5kRGF0YS0+bmFtZSxibGstPm5hbWUsUE1fTUFYX1BBVEgpOwogICAgIGZpbmREYXRhLT5uYW1lW1BNX01BWF9QQVRILTFdID0gMDsKQEAgLTc2MCwxMSArNzYwLDExIEBACiAgICAgc3RydWN0IGZpbmRfdCAqYmxrOwogCiAgICAgaWYgKChibGsgPSBQTV9tYWxsb2Moc2l6ZW9mKCpibGspKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFBNX0ZJTEVfSU5WQUxJRDsKKwlyZXR1cm4gUE1fRklMRV9JTlZBTElEOwogICAgIGlmIChfZG9zX2ZpbmRmaXJzdCgoY2hhciopZmlsZW5hbWUsRklORF9NQVNLLGJsaykgPT0gMCkgewotICAgICAgICBjb252ZXJ0RmluZERhdGEoZmluZERhdGEsYmxrKTsKLSAgICAgICAgcmV0dXJuIGJsazsKLSAgICAgICAgfQorCWNvbnZlcnRGaW5kRGF0YShmaW5kRGF0YSxibGspOworCXJldHVybiBibGs7CisJfQogICAgIHJldHVybiBQTV9GSUxFX0lOVkFMSUQ7CiB9CiAKQEAgLTc3OSw5ICs3NzksOSBAQAogICAgIHN0cnVjdCBmaW5kX3QgKmJsayA9IGhhbmRsZTsKIAogICAgIGlmIChfZG9zX2ZpbmRuZXh0KGJsaykgPT0gMCkgewotICAgICAgICBjb252ZXJ0RmluZERhdGEoZmluZERhdGEsYmxrKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKwljb252ZXJ0RmluZERhdGEoZmluZERhdGEsYmxrKTsKKwlyZXR1cm4gdHJ1ZTsKKwl9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC04MTMsOSArODEzLDkgQEAKIHsKICAgICBSTVJFR1MgIHJlZ3M7CiAgICAgcmVncy5oLmRsID0gKHVjaGFyKShkcml2ZSAtICdBJyArIDEpOwotICAgIHJlZ3MuaC5haCA9IDB4MzY7ICAgICAgICAgICAgICAgLy8gR2V0IGRpc2sgaW5mb3JtYXRpb24gc2VydmljZQorICAgIHJlZ3MuaC5haCA9IDB4MzY7ICAgICAgICAgICAgICAgLyogR2V0IGRpc2sgaW5mb3JtYXRpb24gc2VydmljZSAqLwogICAgIFBNX2ludDg2KDB4MjEsJnJlZ3MsJnJlZ3MpOwotICAgIHJldHVybiByZWdzLnguYXggIT0gMHhGRkZGOyAgICAgLy8gQVggPSAweEZGRkYgaWYgZGlzayBpcyBpbnZhbGlkCisgICAgcmV0dXJuIHJlZ3MueC5heCAhPSAweEZGRkY7ICAgICAvKiBBWCA9IDB4RkZGRiBpZiBkaXNrIGlzIGludmFsaWQgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTg0OCwyNSArODQ4LDI1IEBACiAgICAgRFdPUkQgYXR0ciA9IDA7CiAKICAgICBpZiAoYXR0cmliICYgUE1fRklMRV9SRUFET05MWSkKLSAgICAgICAgYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9SRUFET05MWTsKKwlhdHRyIHw9IEZJTEVfQVRUUklCVVRFX1JFQURPTkxZOwogICAgIGlmIChhdHRyaWIgJiBQTV9GSUxFX0FSQ0hJVkUpCi0gICAgICAgIGF0dHIgfD0gRklMRV9BVFRSSUJVVEVfQVJDSElWRTsKKwlhdHRyIHw9IEZJTEVfQVRUUklCVVRFX0FSQ0hJVkU7CiAgICAgaWYgKGF0dHJpYiAmIFBNX0ZJTEVfSElEREVOKQotICAgICAgICBhdHRyIHw9IEZJTEVfQVRUUklCVVRFX0hJRERFTjsKKwlhdHRyIHw9IEZJTEVfQVRUUklCVVRFX0hJRERFTjsKICAgICBpZiAoYXR0cmliICYgUE1fRklMRV9TWVNURU0pCi0gICAgICAgIGF0dHIgfD0gRklMRV9BVFRSSUJVVEVfU1lTVEVNOworCWF0dHIgfD0gRklMRV9BVFRSSUJVVEVfU1lTVEVNOwogICAgIFNldEZpbGVBdHRyaWJ1dGVzKChMUFNUUilmaWxlbmFtZSwgYXR0cik7CiAjZWxzZQogICAgIHVpbnQgYXR0ciA9IDA7CiAKICAgICBpZiAoYXR0cmliICYgUE1fRklMRV9SRUFET05MWSkKLSAgICAgICAgYXR0ciB8PSBfQV9SRE9OTFk7CisJYXR0ciB8PSBfQV9SRE9OTFk7CiAgICAgaWYgKGF0dHJpYiAmIFBNX0ZJTEVfQVJDSElWRSkKLSAgICAgICAgYXR0ciB8PSBfQV9BUkNIOworCWF0dHIgfD0gX0FfQVJDSDsKICAgICBpZiAoYXR0cmliICYgUE1fRklMRV9ISURERU4pCi0gICAgICAgIGF0dHIgfD0gX0FfSElEREVOOworCWF0dHIgfD0gX0FfSElEREVOOwogICAgIGlmIChhdHRyaWIgJiBQTV9GSUxFX1NZU1RFTSkKLSAgICAgICAgYXR0ciB8PSBfQV9TWVNURU07CisJYXR0ciB8PSBfQV9TWVNURU07CiAgICAgX2Rvc19zZXRmaWxlYXR0cihmaWxlbmFtZSxhdHRyKTsKICNlbmRpZgogfQpAQCAtOTEwLDcgKzkxMCw3IEBACiAgICAgICogbWFwcGVkIDE6MSBmb3IgdGhpcyBtZW1vcnkgYW55d2F5IHNvIHdlIGp1c3QgcmV0dXJuIHRoZSBiYXNlIGFkZHJlc3MuCiAgICAgICovCiAgICAgaWYgKHBoeXNBZGRyIDwgMHgxMDAwMDBMKQotICAgICAgICByZXR1cm4gcGh5c0FkZHI7CisJcmV0dXJuIHBoeXNBZGRyOwogCiAgICAgLyogU2VhcmNoIHRhYmxlIG9mIGV4aXN0aW5nIG1hcHBpbmdzIHRvIHNlZSBpZiB3ZSBoYXZlIGFscmVhZHkgbWFwcGVkCiAgICAgICogYSByZWdpb24gb2YgbWVtb3J5IHRoYXQgd2lsbCBzZXJ2ZSB0aGlzIHB1cnBvc2UuIFdlIGRvIHRoaXMgYmVjYXVzZQpAQCAtOTE5LDIwICs5MTksMjAgQEAKICAgICAgKiBtb3JlIG1hcHBpbmdzIHRoYW4gbmVjZXNzYXJ5LgogICAgICAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1NYXBzOyBpKyspIHsKLSAgICAgICAgaWYgKG1hcHNbaV0ucGh5c2ljYWwgPT0gcGh5c0FkZHIgJiYgbWFwc1tpXS5saW1pdCA9PSBsaW1pdCkKLSAgICAgICAgICAgIHJldHVybiBtYXBzW2ldLmxpbmVhcjsKLSAgICAgICAgfQorCWlmIChtYXBzW2ldLnBoeXNpY2FsID09IHBoeXNBZGRyICYmIG1hcHNbaV0ubGltaXQgPT0gbGltaXQpCisJICAgIHJldHVybiBtYXBzW2ldLmxpbmVhcjsKKwl9CiAKICAgICAvKiBGaW5kIGEgZnJlZSBzbG90IGluIG91ciBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyB0YWJsZSAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1NYXBzOyBpKyspIHsKLSAgICAgICAgaWYgKG1hcHNbaV0ubGltaXQgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJaWYgKG1hcHNbaV0ubGltaXQgPT0gMCkKKwkgICAgYnJlYWs7CisJfQogICAgIGlmIChpID09IG51bU1hcHMpIHsKLSAgICAgICAgaSA9IG51bU1hcHMrKzsKLSAgICAgICAgaWYgKGkgPT0gTUFYX01FTU9SWV9NQVBQSU5HUykKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisJaSA9IG51bU1hcHMrKzsKKwlpZiAoaSA9PSBNQVhfTUVNT1JZX01BUFBJTkdTKQorCSAgICByZXR1cm4gTlVMTDsKKwl9CiAKICAgICAvKiBSb3VuZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyB0byBhIDRLYiBib3VuZGFyeSBhbmQgdGhlIGxpbWl0IHRvIGEKICAgICAgKiA0S2ItMSBib3VuZGFyeSBiZWZvcmUgcGFzc2luZyB0aGUgdmFsdWVzIHRvIERQTUkgYXMgc29tZSBleHRlbmRlcnMKQEAgLTk1MCw3ICs5NTAsNyBAQAogICAgIHIueC5kaSA9IHJvdW5kZWRMaW1pdCAmIDB4RkZGRjsKICAgICBQTV9pbnQzODYoMHgzMSwgJnIsICZyKTsKICAgICBpZiAoci54LmNmbGFnKQotICAgICAgICByZXR1cm4gMHhGRkZGRkZGRlVMOworCXJldHVybiAweEZGRkZGRkZGVUw7CiAgICAgbWFwc1tpXS5waHlzaWNhbCA9IHBoeXNBZGRyOwogICAgIG1hcHNbaV0ubGltaXQgPSBsaW1pdDsKICAgICBtYXBzW2ldLmxpbmVhciA9ICgodWxvbmcpci54LmJ4IDw8IDE2KSArIHIueC5jeCArIGJhc2VPZnM7CkBAIC05NjcsNyArOTY3LDcgQEAKICAgICByLnguZHggPSBsaW5BZGRyICYgMHhGRkZGOwogICAgIFBNX2ludDM4NigweDMxLCAmciwgJnIpOwogICAgIGlmIChyLnguY2ZsYWcpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIHJldHVybiAxOwogfQogCkBAIC05OTEsNyArOTkxLDcgQEAKICAgICByLnguZHggPSBsaW1pdCAmIDB4RkZGRjsKICAgICBQTV9pbnQzODYoMHgzMSwgJnIsICZyKTsKICAgICBpZiAoci54LmNmbGFnKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtMTAxMSwxOSArMTAxMSwxOSBAQAogICAgICAqIHNlZ21lbnQpLgogICAgICAqLwogICAgIGlmIChsaW1pdCA+PSAweDEwMDAwTCkgewotICAgICAgICByLnguYXggPSA5OwotICAgICAgICByLnguYnggPSBzZWw7Ci0gICAgICAgIHIueC5jeCA9IDB4NDBGMzsKLSAgICAgICAgUE1faW50Mzg2KDB4MzEsICZyLCAmcik7Ci0gICAgICAgIH0KKwlyLnguYXggPSA5OworCXIueC5ieCA9IHNlbDsKKwlyLnguY3ggPSAweDQwRjM7CisJUE1faW50Mzg2KDB4MzEsICZyLCAmcik7CisJfQogCiAgICAgLyogTWFwIHBoeXNpY2FsIG1lbW9yeSBhbmQgY3JlYXRlIHNlbGVjdG9yICovCiAgICAgaWYgKChiYXNlID0gRFBNSV9tYXBQaHlzaWNhbFRvTGluZWFyKGJhc2UsbGltaXQpKSA9PSAweEZGRkZGRkZGVUwpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIGlmICghRFBNSV9zZXRTZWxlY3RvckJhc2Uoc2VsLGJhc2UpKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICBpZiAoIURQTUlfc2V0U2VsZWN0b3JMaW1pdChzZWwsbGltaXQpKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gc2VsOwogfQogCkBAIC0xMDgzLDM5ICsxMDgzLDM5IEBACiAgICAgYW5kTWFzayA9IH4weDE4OwogICAgIG9yTWFzayA9IChpc0NhY2hlZCkgPyAweDAwIDogMHgxODsKICAgICBpZiAoX1BNX3BhZ2luZ0VuYWJsZWQoKSA9PSAxICYmIChQREIgPSBfUE1fZ2V0UERCKCkpICE9IDApIHsKLSAgICAgICAgaWYgKF9QTV9oYXZlQ2F1c2VXYXkpIHsKLSAgICAgICAgICAgIC8qIENhdXNlV2F5IGlzIGEgbGl0dGxlIGRpZmZlcmVudCBpbiB0aGUgcGFnZSB0YWJsZSBoYW5kbGluZy4KLSAgICAgICAgICAgICAqIFRoZSBjb2RlIHRoYXQgd2UgdXNlIGZvciBET1M0Ry9XIGRvZXMgbm90IGFwcGVhciB0byB3b3JrCi0gICAgICAgICAgICAgKiB3aXRoIENhdXNlV2F5IGNvcnJlY3RseSBhcyBpdCBkb2VzIG5vdCBhcHBlYXIgdG8gYWxsb3cgdXMKLSAgICAgICAgICAgICAqIHRvIG1hcCB0aGUgcGFnZSB0YWJsZXMgZGlyZWN0bHkuIEluc3RlYWQgd2UgY2FuIGRpcmVjdGx5Ci0gICAgICAgICAgICAgKiBhY2Nlc3MgdGhlIHBhZ2UgdGFibGUgZW50cmllcyBpbiBleHRlbmRlZCBtZW1vcnkgd2hlcmUKLSAgICAgICAgICAgICAqIENhdXNlV2F5IGFsd2F5cyBsb2NhdGVzIHRoZW0gKHN0YXJ0aW5nIGF0IDEwMjQqNDA5NioxMDIzKQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzdGFydFBhZ2UgPSAobGluZWFyID4+IDEyKTsKLSAgICAgICAgICAgIGVuZFBhZ2UgPSAoKGxpbmVhcitsaW1pdCkgPj4gMTIpOwotICAgICAgICAgICAgcFBhZ2VUYWJsZSA9ICh1bG9uZyopQ1dfUEFHRV9UQUJMRV9TVEFSVDsKLSAgICAgICAgICAgIGZvciAoaVBhZ2UgPSBzdGFydFBhZ2U7IGlQYWdlIDw9IGVuZFBhZ2U7IGlQYWdlKyspCi0gICAgICAgICAgICAgICAgcFBhZ2VUYWJsZVtpUGFnZV0gPSAocFBhZ2VUYWJsZVtpUGFnZV0gJiBhbmRNYXNrKSB8IG9yTWFzazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwUERCID0gKHVsb25nKilEUE1JX21hcFBoeXNpY2FsVG9MaW5lYXIoUERCLDB4RkZGKTsKLSAgICAgICAgICAgIGlmIChwUERCKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRQREIgPSAobGluZWFyID4+IDIyKSAmIDB4M0ZGOwotICAgICAgICAgICAgICAgIHN0YXJ0UGFnZSA9IChsaW5lYXIgPj4gMTIpICYgMHgzRkY7Ci0gICAgICAgICAgICAgICAgZW5kUERCID0gKChsaW5lYXIrbGltaXQpID4+IDIyKSAmIDB4M0ZGOwotICAgICAgICAgICAgICAgIGVuZFBhZ2UgPSAoKGxpbmVhcitsaW1pdCkgPj4gMTIpICYgMHgzRkY7Ci0gICAgICAgICAgICAgICAgZm9yIChpUERCID0gc3RhcnRQREI7IGlQREIgPD0gZW5kUERCOyBpUERCKyspIHsKLSAgICAgICAgICAgICAgICAgICAgcGFnZVRhYmxlID0gcFBEQltpUERCXSAmIH4weEZGRjsKLSAgICAgICAgICAgICAgICAgICAgcFBhZ2VUYWJsZSA9ICh1bG9uZyopRFBNSV9tYXBQaHlzaWNhbFRvTGluZWFyKHBhZ2VUYWJsZSwweEZGRik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gKGlQREIgPT0gc3RhcnRQREIpID8gc3RhcnRQYWdlIDogMDsKLSAgICAgICAgICAgICAgICAgICAgZW5kID0gKGlQREIgPT0gZW5kUERCKSA/IGVuZFBhZ2UgOiAweDNGRjsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpUGFnZSA9IHN0YXJ0OyBpUGFnZSA8PSBlbmQ7IGlQYWdlKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBwUGFnZVRhYmxlW2lQYWdlXSA9IChwUGFnZVRhYmxlW2lQYWdlXSAmIGFuZE1hc2spIHwgb3JNYXNrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBQTV9mbHVzaFRMQigpOwotICAgICAgICB9CisJaWYgKF9QTV9oYXZlQ2F1c2VXYXkpIHsKKwkgICAgLyogQ2F1c2VXYXkgaXMgYSBsaXR0bGUgZGlmZmVyZW50IGluIHRoZSBwYWdlIHRhYmxlIGhhbmRsaW5nLgorCSAgICAgKiBUaGUgY29kZSB0aGF0IHdlIHVzZSBmb3IgRE9TNEcvVyBkb2VzIG5vdCBhcHBlYXIgdG8gd29yaworCSAgICAgKiB3aXRoIENhdXNlV2F5IGNvcnJlY3RseSBhcyBpdCBkb2VzIG5vdCBhcHBlYXIgdG8gYWxsb3cgdXMKKwkgICAgICogdG8gbWFwIHRoZSBwYWdlIHRhYmxlcyBkaXJlY3RseS4gSW5zdGVhZCB3ZSBjYW4gZGlyZWN0bHkKKwkgICAgICogYWNjZXNzIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgaW4gZXh0ZW5kZWQgbWVtb3J5IHdoZXJlCisJICAgICAqIENhdXNlV2F5IGFsd2F5cyBsb2NhdGVzIHRoZW0gKHN0YXJ0aW5nIGF0IDEwMjQqNDA5NioxMDIzKQorCSAgICAgKi8KKwkgICAgc3RhcnRQYWdlID0gKGxpbmVhciA+PiAxMik7CisJICAgIGVuZFBhZ2UgPSAoKGxpbmVhcitsaW1pdCkgPj4gMTIpOworCSAgICBwUGFnZVRhYmxlID0gKHVsb25nKilDV19QQUdFX1RBQkxFX1NUQVJUOworCSAgICBmb3IgKGlQYWdlID0gc3RhcnRQYWdlOyBpUGFnZSA8PSBlbmRQYWdlOyBpUGFnZSsrKQorCQlwUGFnZVRhYmxlW2lQYWdlXSA9IChwUGFnZVRhYmxlW2lQYWdlXSAmIGFuZE1hc2spIHwgb3JNYXNrOworCSAgICB9CisJZWxzZSB7CisJICAgIHBQREIgPSAodWxvbmcqKURQTUlfbWFwUGh5c2ljYWxUb0xpbmVhcihQREIsMHhGRkYpOworCSAgICBpZiAocFBEQikgeworCQlzdGFydFBEQiA9IChsaW5lYXIgPj4gMjIpICYgMHgzRkY7CisJCXN0YXJ0UGFnZSA9IChsaW5lYXIgPj4gMTIpICYgMHgzRkY7CisJCWVuZFBEQiA9ICgobGluZWFyK2xpbWl0KSA+PiAyMikgJiAweDNGRjsKKwkJZW5kUGFnZSA9ICgobGluZWFyK2xpbWl0KSA+PiAxMikgJiAweDNGRjsKKwkJZm9yIChpUERCID0gc3RhcnRQREI7IGlQREIgPD0gZW5kUERCOyBpUERCKyspIHsKKwkJICAgIHBhZ2VUYWJsZSA9IHBQREJbaVBEQl0gJiB+MHhGRkY7CisJCSAgICBwUGFnZVRhYmxlID0gKHVsb25nKilEUE1JX21hcFBoeXNpY2FsVG9MaW5lYXIocGFnZVRhYmxlLDB4RkZGKTsKKwkJICAgIHN0YXJ0ID0gKGlQREIgPT0gc3RhcnRQREIpID8gc3RhcnRQYWdlIDogMDsKKwkJICAgIGVuZCA9IChpUERCID09IGVuZFBEQikgPyBlbmRQYWdlIDogMHgzRkY7CisJCSAgICBmb3IgKGlQYWdlID0gc3RhcnQ7IGlQYWdlIDw9IGVuZDsgaVBhZ2UrKykKKwkJCXBQYWdlVGFibGVbaVBhZ2VdID0gKHBQYWdlVGFibGVbaVBhZ2VdICYgYW5kTWFzaykgfCBvck1hc2s7CisJCSAgICB9CisJCX0KKwkgICAgfQorCVBNX2ZsdXNoVExCKCk7CisJfQogI2VuZGlmCiB9CiAKQEAgLTExMjksMjggKzExMjksMjggQEAKICAgICBQTV9zZWdyZWFkKCZzcmVncyk7CiAgICAgRFNCYXNlQWRkciA9IERQTUlfZ2V0U2VsZWN0b3JCYXNlKHNyZWdzLmRzKTsKICAgICBpZiAoKGJhc2UgPCAweDEwMDAwMCkgJiYgKERTQmFzZUFkZHIgPT0gMCkpIHsKLSAgICAgICAgLyogRFMgaXMgemVybyBiYXNlZCwgc28gd2UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgZmlyc3QgMU1iIG9mCi0gICAgICAgICAqIHN5c3RlbSBtZW1vcnkgKGxpa2UgdW5kZXIgRE9TNEdXKS4KLSAgICAgICAgICovCi0gICAgICAgIHJldHVybiAodm9pZCopYmFzZTsKLSAgICAgICAgfQorCS8qIERTIGlzIHplcm8gYmFzZWQsIHNvIHdlIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIGZpcnN0IDFNYiBvZgorCSAqIHN5c3RlbSBtZW1vcnkgKGxpa2UgdW5kZXIgRE9TNEdXKS4KKwkgKi8KKwlyZXR1cm4gKHZvaWQqKWJhc2U7CisJfQogCiAgICAgLyogTWFwIHRoZSBtZW1vcnkgdG8gYSBsaW5lYXIgYWRkcmVzcyB1c2luZyBEUE1JIGZ1bmN0aW9uIDB4ODAwICovCiAgICAgaWYgKChsaW5BZGRyID0gRFBNSV9tYXBQaHlzaWNhbFRvTGluZWFyKGJhc2UsbGltaXQpKSA9PSAweEZGRkZGRkZGKSB7Ci0gICAgICAgIGlmIChiYXNlID49IDB4MTAwMDAwKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIC8qIElmIHRoZSBsaW5lYXIgYWRkcmVzcyBtYXBwaW5nIGZhaWxzIGJ1dCB3ZSBhcmUgdHJ5aW5nIHRvCi0gICAgICAgICAqIG1hcCBhbiBhcmVhIGluIHRoZSBmaXJzdCAxTWIgb2Ygc3lzdGVtIG1lbW9yeSwgdGhlbiB3ZSBtdXN0Ci0gICAgICAgICAqIGJlIHJ1bm5pbmcgdW5kZXIgYSBXaW5kb3dzIG9yIE9TLzIgRE9TIGJveC4gVW5kZXIgdGhlc2UKLSAgICAgICAgICogZW52aXJvbm1lbnRzIHdlIGNhbiB1c2UgdGhlIHNlZ21lbnQgd3JhcCBhcm91bmQgYXMgYSBmYWxsYmFjawotICAgICAgICAgKiBtZWFzdXJlLCBhcyB0aGlzIGRvZXMgd29yayBwcm9wZXJseS4KLSAgICAgICAgICovCi0gICAgICAgIGxpbkFkZHIgPSBiYXNlOwotICAgICAgICB9CisJaWYgKGJhc2UgPj0gMHgxMDAwMDApCisJICAgIHJldHVybiBOVUxMOworCS8qIElmIHRoZSBsaW5lYXIgYWRkcmVzcyBtYXBwaW5nIGZhaWxzIGJ1dCB3ZSBhcmUgdHJ5aW5nIHRvCisJICogbWFwIGFuIGFyZWEgaW4gdGhlIGZpcnN0IDFNYiBvZiBzeXN0ZW0gbWVtb3J5LCB0aGVuIHdlIG11c3QKKwkgKiBiZSBydW5uaW5nIHVuZGVyIGEgV2luZG93cyBvciBPUy8yIERPUyBib3guIFVuZGVyIHRoZXNlCisJICogZW52aXJvbm1lbnRzIHdlIGNhbiB1c2UgdGhlIHNlZ21lbnQgd3JhcCBhcm91bmQgYXMgYSBmYWxsYmFjaworCSAqIG1lYXN1cmUsIGFzIHRoaXMgZG9lcyB3b3JrIHByb3Blcmx5LgorCSAqLworCWxpbkFkZHIgPSBiYXNlOworCX0KIAogICAgIC8qIE5vdyBleHBhbmQgdGhlIGRlZmF1bHQgRFMgc2VsZWN0b3IgdG8gNEdiIHNvIHdlIGNhbiBhY2Nlc3MgaXQgKi8KICAgICBpZiAoIURQTUlfc2V0U2VsZWN0b3JMaW1pdChzcmVncy5kcywweEZGRkZGRkZGVUwpKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIAogICAgIC8qIEZpbmFsbHkgZW5hYmxlIGNhY2hpbmcgZm9yIHRoZSBwYWdlIHRhYmxlcyB0aGF0IHdlIGp1c3QgbWFwcGVkIGluLAogICAgICAqIHNpbmNlIERPUzRHVyBhbmQgUE1PREUvVyBjcmVhdGUgdGhlIHBhZ2UgdGFibGUgZW50cmllcyB3aXRob3V0CkBAIC0xMTYyLDcgKzExNjIsNyBAQAogICAgICAqIGNhY2hpbmcpIHNvIHRoYXQgTU1JTyByZWdpc3RlciByZWdpb25zIGRvIG5vdCBzY3JldyB1cC4KICAgICAgKi8KICAgICBpZiAoRFNCYXNlQWRkciA9PSAwKQotICAgICAgICBQTV9hZGp1c3RQYWdlVGFibGVzKGxpbkFkZHIsbGltaXQsaXNDYWNoZWQpOworCVBNX2FkanVzdFBhZ2VUYWJsZXMobGluQWRkcixsaW1pdCxpc0NhY2hlZCk7CiAKICAgICAvKiBOb3cgcmV0dXJuIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBpbnRvIHRoZSBkZWZhdWx0IERTICovCiAgICAgcmV0dXJuICh2b2lkKikobGluQWRkciAtIERTQmFzZUFkZHIpOwpAQCAtMTE5MiwxMCArMTE5MiwxMCBAQAogICAgIHVpbnQgICAgb2xkU2VnLG9sZE9mZjsKIAogICAgIGlmICghY3JQdHIpIHsKLSAgICAgICAgLyogQWxsb2NhdGUgYW5kIGNvcHkgdGhlIG1lbW9yeSBibG9jayBvbmx5IG9uY2UgKi8KLSAgICAgICAgY3JQdHIgPSBQTV9hbGxvY1JlYWxTZWcoc2l6ZW9mKGludDZBSGFuZGxlciksICZjclJTZWcsICZjclJPZmYpOwotICAgICAgICBtZW1jcHkoY3JQdHIsaW50NkFIYW5kbGVyLHNpemVvZihpbnQ2QUhhbmRsZXIpKTsKLSAgICAgICAgfQorCS8qIEFsbG9jYXRlIGFuZCBjb3B5IHRoZSBtZW1vcnkgYmxvY2sgb25seSBvbmNlICovCisJY3JQdHIgPSBQTV9hbGxvY1JlYWxTZWcoc2l6ZW9mKGludDZBSGFuZGxlciksICZjclJTZWcsICZjclJPZmYpOworCW1lbWNweShjclB0cixpbnQ2QUhhbmRsZXIsc2l6ZW9mKGludDZBSGFuZGxlcikpOworCX0KICAgICBQTV9zZXRXb3JkKGNyUHRyLG9mZik7ICAgICAgICAgICAgICAvKiBQbHVnIGluIGFkZHJlc3MgdG8gY2FsbCAgKi8KICAgICBQTV9zZXRXb3JkKGNyUHRyKzIsc2VnKTsKICAgICBwID0gUE1fbWFwUmVhbFBvaW50ZXIoMCwweDZBICogNCk7CkBAIC0xMjM0LDE0ICsxMjM0LDE0IEBACiAgICAgICogaGVscGVyIFZ4RCBzZXJ2aWNlcyB0byBhbGxvY2F0ZSB0aGUgbWVtb3J5IHRoYXQgd2UgbmVlZC4KICAgICAgKi8KICAgICBpZiAoVlhEX3ZlcnNpb24pIHsKLSAgICAgICAgbWVtc2V0KCZyZWdzLDAsc2l6ZW9mKHJlZ3MpKTsKLSAgICAgICAgcmVncy5lYXggPSBBUElfTlVNKFBNSEVMUF9BTExPQ0xPQ0tFRCk7Ci0gICAgICAgIHJlZ3MuZWJ4ID0gc2l6ZTsKLSAgICAgICAgcmVncy5lY3ggPSAodWxvbmcpcGh5c0FkZHI7Ci0gICAgICAgIHJlZ3MuZWR4ID0gY29udGlndW91cyB8IChiZWxvdzE2TWVnIDw8IDgpOwotICAgICAgICBfUE1fVnhEQ2FsbCgmcmVncyxfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7Ci0gICAgICAgIHJldHVybiAodm9pZCopcmVncy5lYXg7Ci0gICAgICAgIH0KKwltZW1zZXQoJnJlZ3MsMCxzaXplb2YocmVncykpOworCXJlZ3MuZWF4ID0gQVBJX05VTShQTUhFTFBfQUxMT0NMT0NLRUQpOworCXJlZ3MuZWJ4ID0gc2l6ZTsKKwlyZWdzLmVjeCA9ICh1bG9uZylwaHlzQWRkcjsKKwlyZWdzLmVkeCA9IGNvbnRpZ3VvdXMgfCAoYmVsb3cxNk1lZyA8PCA4KTsKKwlfUE1fVnhEQ2FsbCgmcmVncyxfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7CisJcmV0dXJuICh2b2lkKilyZWdzLmVheDsKKwl9CiAKICAgICAvKiBJZiB0aGUgbWVtb3J5IGlzIG5vdCBjb250aWd1b3VzLCB3ZSBzaW1wbHkgbmVlZCB0byBhbGxvY2F0ZSBpdAogICAgICAqIHVzaW5nIHJlZ3VsYXIgbWVtb3J5IGFsbG9jYXRpb24gc2VydmljZXMsIGFuZCBsb2NrIGl0IGRvd24KQEAgLTEyNTcsMTkgKzEyNTcsMTkgQEAKICAgICAgKiBzaXplIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgNEsgYm91bmRhcnkuCiAgICAgICovCiAgICAgaWYgKCFjb250aWd1b3VzKQotICAgICAgICBwID0gUE1fbWFsbG9jKHJvdW5kZWRTaXplKTsKKwlwID0gUE1fbWFsbG9jKHJvdW5kZWRTaXplKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcCA9IFBNX2FsbG9jUmVhbFNlZyhyb3VuZGVkU2l6ZSwmcl9zZWcsJnJfb2ZmKTsKKwlwID0gUE1fYWxsb2NSZWFsU2VnKHJvdW5kZWRTaXplLCZyX3NlZywmcl9vZmYpOwogICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogICAgIHJvdW5kZWRQID0gKHZvaWQqKSgoKHVsb25nKXAgKyAweEZGRikgJiB+MHhGRkYpOwogICAgICooKHVsb25nKikocm91bmRlZFAgKyBzaXplKSkgPSAodWxvbmcpcDsKICAgICBQTV9sb2NrRGF0YVBhZ2VzKHJvdW5kZWRQLHNpemUsJmxoKTsKICAgICBpZiAoKCpwaHlzQWRkciA9IFBNX2dldFBoeXNpY2FsQWRkcihyb3VuZGVkUCkpID09IDB4RkZGRkZGRkYpIHsKLSAgICAgICAgUE1fZnJlZUxvY2tlZE1lbShyb3VuZGVkUCxzaXplLGNvbnRpZ3VvdXMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorCVBNX2ZyZWVMb2NrZWRNZW0ocm91bmRlZFAsc2l6ZSxjb250aWd1b3VzKTsKKwlyZXR1cm4gTlVMTDsKKwl9CiAKICAgICAvKiBEaXNhYmxlIGNhY2hpbmcgZm9yIHRoZSBtZW1vcnkgc2luY2UgaXQgaXMgcHJvYmFibHkgYSBETUEgYnVmZmVyICovCiAjaWZuZGVmIFJFQUxNT0RFCkBAIC0xMjg5LDIyICsxMjg5LDIyIEBACiAgICAgUE1fbG9ja0hhbmRsZSAgIGxoOyAvKiBVbnVzZWQgaW4gRE9TICovCiAKICAgICBpZiAoIXApCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAgICAgaWYgKFZYRF92ZXJzaW9uKSB7Ci0gICAgICAgIG1lbXNldCgmcmVncywwLHNpemVvZihyZWdzKSk7Ci0gICAgICAgIHJlZ3MuZWF4ID0gQVBJX05VTShQTUhFTFBfRlJFRUxPQ0tFRCk7Ci0gICAgICAgIHJlZ3MuZWJ4ID0gKHVsb25nKXA7Ci0gICAgICAgIHJlZ3MuZWN4ID0gc2l6ZTsKLSAgICAgICAgcmVncy5lZHggPSBjb250aWd1b3VzOwotICAgICAgICBfUE1fVnhEQ2FsbCgmcmVncyxfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCW1lbXNldCgmcmVncywwLHNpemVvZihyZWdzKSk7CisJcmVncy5lYXggPSBBUElfTlVNKFBNSEVMUF9GUkVFTE9DS0VEKTsKKwlyZWdzLmVieCA9ICh1bG9uZylwOworCXJlZ3MuZWN4ID0gc2l6ZTsKKwlyZWdzLmVkeCA9IGNvbnRpZ3VvdXM7CisJX1BNX1Z4RENhbGwoJnJlZ3MsX1BNX1ZYRF9vZmYsX1BNX1ZYRF9zZWwpOworCXJldHVybjsKKwl9CiAgICAgUE1fdW5sb2NrRGF0YVBhZ2VzKHAsc2l6ZSwmbGgpOwogICAgIGlmICghY29udGlndW91cykKLSAgICAgICAgZnJlZSgqKCh2b2lkKiopKCh1Y2hhciopcCArIHNpemUpKSk7CisJZnJlZSgqKCh2b2lkKiopKCh1Y2hhciopcCArIHNpemUpKSk7CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIFBNX2ZyZWVSZWFsU2VnKCooKHZvaWQqKikoKGNoYXIqKXAgKyBzaXplKSkpOworCVBNX2ZyZWVSZWFsU2VnKCooKHZvaWQqKikoKGNoYXIqKXAgKyBzaXplKSkpOwogfQogCiAjaWZuZGVmIFJFQUxNT0RFCkBAIC0xMzIxLDExICsxMzIxLDExIEBACiAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbmV3IHBhZ2UgYmxvY2ssIGFuZCBhZGQgdG8gaGVhZCBvZiBsaXN0ICovCiAgICAgc2l6ZSA9IFBBR0VTX1BFUl9CTE9DSyAqIFBNX1BBR0VfU0laRSArIChQTV9QQUdFX1NJWkUtMSkgKyBzaXplb2YocGFnZWJsb2NrKTsKICAgICBpZiAoKG5ld0Jsb2NrID0gUE1fbWFsbG9jKHNpemUpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKICAgICBuZXdCbG9jay0+cHJldiA9IE5VTEw7CiAgICAgbmV3QmxvY2stPm5leHQgPSBwYWdlQmxvY2tzOwogICAgIGlmIChwYWdlQmxvY2tzKQotICAgICAgICBwYWdlQmxvY2tzLT5wcmV2ID0gbmV3QmxvY2s7CisJcGFnZUJsb2Nrcy0+cHJldiA9IG5ld0Jsb2NrOwogICAgIHBhZ2VCbG9ja3MgPSBuZXdCbG9jazsKIAogICAgIC8qIEluaXRpYWxpc2UgdGhlIHBhZ2UgYWxpZ25lZCBmcmVlIGxpc3QgZm9yIHRoZSBwYWdlIGJsb2NrICovCkBAIC0xMzM0LDcgKzEzMzQsNyBAQAogICAgIG5ld0Jsb2NrLT5mcmVlTGlzdFN0YXJ0ID0gbmV3QmxvY2stPmZyZWVMaXN0OwogICAgIG5ld0Jsb2NrLT5mcmVlTGlzdEVuZCA9IHAgKyAoUEFHRVNfUEVSX0JMT0NLLTEpICogUE1fUEFHRV9TSVpFOwogICAgIGZvciAoaSA9IDA7IGkgPCBQQUdFU19QRVJfQkxPQ0s7IGkrKyxwID0gbmV4dCkKLSAgICAgICAgRlJFRUxJU1RfTkVYVChwKSA9IG5leHQgPSBwICsgUE1fUEFHRV9TSVpFOworCUZSRUVMSVNUX05FWFQocCkgPSBuZXh0ID0gcCArIFBNX1BBR0VfU0laRTsKICAgICBGUkVFTElTVF9ORVhUKHAgLSBQTV9QQUdFX1NJWkUpID0gTlVMTDsKICAgICByZXR1cm4gbmV3QmxvY2s7CiB9CkBAIC0xMzU1LDI3ICsxMzU1LDI3IEBACiAKICAgICAvKiBDYWxsIHRoZSBoZWxwZXIgVnhEIGZvciB0aGlzIHNlcnZpY2UgaWYgd2UgYXJlIHJ1bm5pbmcgaW4gYSBET1MgYm94ICovCiAgICAgaWYgKFZYRF92ZXJzaW9uKSB7Ci0gICAgICAgIG1lbXNldCgmcmVncywwLHNpemVvZihyZWdzKSk7Ci0gICAgICAgIHJlZ3MuZWF4ID0gQVBJX05VTShQTUhFTFBfQUxMT0NQQUdFKTsKLSAgICAgICAgcmVncy5lYnggPSBsb2NrZWQ7Ci0gICAgICAgIF9QTV9WeERDYWxsKCZyZWdzLF9QTV9WWERfb2ZmLF9QTV9WWERfc2VsKTsKLSAgICAgICAgcmV0dXJuICh2b2lkKilyZWdzLmVheDsKLSAgICAgICAgfQorCW1lbXNldCgmcmVncywwLHNpemVvZihyZWdzKSk7CisJcmVncy5lYXggPSBBUElfTlVNKFBNSEVMUF9BTExPQ1BBR0UpOworCXJlZ3MuZWJ4ID0gbG9ja2VkOworCV9QTV9WeERDYWxsKCZyZWdzLF9QTV9WWERfb2ZmLF9QTV9WWERfc2VsKTsKKwlyZXR1cm4gKHZvaWQqKXJlZ3MuZWF4OworCX0KIAogICAgIC8qIFNjYW4gdGhlIGJsb2NrIGxpc3QgbG9va2luZyBmb3IgYW55IGZyZWUgYmxvY2tzLiBBbGxvY2F0ZSBhIG5ldwogICAgICAqIHBhZ2UgYmxvY2sgaWYgbm8gZnJlZSBibG9ja3MgYXJlIGZvdW5kLgogICAgICAqLwogICAgIGZvciAoYmxvY2sgPSBwYWdlQmxvY2tzOyBibG9jayAhPSBOVUxMOyBibG9jayA9IGJsb2NrLT5uZXh0KSB7Ci0gICAgICAgIGlmIChibG9jay0+ZnJlZUNvdW50KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlpZiAoYmxvY2stPmZyZWVDb3VudCkKKwkgICAgYnJlYWs7CisJfQogICAgIGlmIChibG9jayA9PSBOVUxMICYmIChibG9jayA9IFBNX2FkZE5ld1BhZ2VCbG9jaygpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKICAgICBibG9jay0+ZnJlZUNvdW50LS07CiAgICAgcCA9IGJsb2NrLT5mcmVlTGlzdDsKICAgICBibG9jay0+ZnJlZUxpc3QgPSBGUkVFTElTVF9ORVhUKHApOwogICAgIGlmIChsb2NrZWQpCi0gICAgICAgIFBNX2xvY2tEYXRhUGFnZXMocCxQTV9QQUdFX1NJWkUsJmxoKTsKKwlQTV9sb2NrRGF0YVBhZ2VzKHAsUE1fUEFHRV9TSVpFLCZsaCk7CiAgICAgcmV0dXJuIHA7CiAjZWxzZQogICAgIHJldHVybiBOVUxMOwpAQCAtMTM5NSw0MiArMTM5NSw0MiBAQAogCiAgICAgLyogQ2FsbCB0aGUgaGVscGVyIFZ4RCBmb3IgdGhpcyBzZXJ2aWNlIGlmIHdlIGFyZSBydW5uaW5nIGluIGEgRE9TIGJveCAqLwogICAgIGlmIChWWERfdmVyc2lvbikgewotICAgICAgICBtZW1zZXQoJnJlZ3MsMCxzaXplb2YocmVncykpOwotICAgICAgICByZWdzLmVheCA9IEFQSV9OVU0oUE1IRUxQX0ZSRUVQQUdFKTsKLSAgICAgICAgcmVncy5lYnggPSAodWxvbmcpcDsKLSAgICAgICAgX1BNX1Z4RENhbGwoJnJlZ3MsX1BNX1ZYRF9vZmYsX1BNX1ZYRF9zZWwpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwltZW1zZXQoJnJlZ3MsMCxzaXplb2YocmVncykpOworCXJlZ3MuZWF4ID0gQVBJX05VTShQTUhFTFBfRlJFRVBBR0UpOworCXJlZ3MuZWJ4ID0gKHVsb25nKXA7CisJX1BNX1Z4RENhbGwoJnJlZ3MsX1BNX1ZYRF9vZmYsX1BNX1ZYRF9zZWwpOworCXJldHVybjsKKwl9CiAKICAgICAvKiBGaXJzdCBmaW5kIHRoZSBwYWdlIGJsb2NrIHRoYXQgdGhpcyBwYWdlIGJlbG9uZ3MgdG8gKi8KICAgICBmb3IgKGJsb2NrID0gcGFnZUJsb2NrczsgYmxvY2sgIT0gTlVMTDsgYmxvY2sgPSBibG9jay0+bmV4dCkgewotICAgICAgICBpZiAocCA+PSBibG9jay0+ZnJlZUxpc3RTdGFydCAmJiBwIDw9IGJsb2NrLT5mcmVlTGlzdEVuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJaWYgKHAgPj0gYmxvY2stPmZyZWVMaXN0U3RhcnQgJiYgcCA8PSBibG9jay0+ZnJlZUxpc3RFbmQpCisJICAgIGJyZWFrOworCX0KICAgICBDSEVDSyhibG9jayAhPSBOVUxMKTsKIAogICAgIC8qIE5vdyBmcmVlIHRoZSBibG9jayBieSBhZGRpbmcgaXQgdG8gdGhlIGZyZWUgbGlzdCAqLwogICAgIEZSRUVMSVNUX05FWFQocCkgPSBibG9jay0+ZnJlZUxpc3Q7CiAgICAgYmxvY2stPmZyZWVMaXN0ID0gcDsKICAgICBpZiAoKytibG9jay0+ZnJlZUNvdW50ID09IFBBR0VTX1BFUl9CTE9DSykgewotICAgICAgICAvKiBJZiBhbGwgcGFnZXMgaW4gdGhlIHBhZ2UgYmxvY2sgYXJlIG5vdyBmcmVlLCBmcmVlIHRoZSBlbnRpcmUKLSAgICAgICAgICogcGFnZSBibG9jayBpdHNlbGYuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoYmxvY2sgPT0gcGFnZUJsb2NrcykgewotICAgICAgICAgICAgLyogRGVsZXRlIGZyb20gaGVhZCAqLwotICAgICAgICAgICAgcGFnZUJsb2NrcyA9IGJsb2NrLT5uZXh0OwotICAgICAgICAgICAgaWYgKGJsb2NrLT5uZXh0KQotICAgICAgICAgICAgICAgIGJsb2NrLT5uZXh0LT5wcmV2ID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBEZWxldGUgZnJvbSBtaWRkbGUgb2YgbGlzdCAqLwotICAgICAgICAgICAgQ0hFQ0soYmxvY2stPnByZXYgIT0gTlVMTCk7Ci0gICAgICAgICAgICBibG9jay0+cHJldi0+bmV4dCA9IGJsb2NrLT5uZXh0OwotICAgICAgICAgICAgaWYgKGJsb2NrLT5uZXh0KQotICAgICAgICAgICAgICAgIGJsb2NrLT5uZXh0LT5wcmV2ID0gYmxvY2stPnByZXY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIFBNX2ZyZWUoYmxvY2spOwotICAgICAgICB9CisJLyogSWYgYWxsIHBhZ2VzIGluIHRoZSBwYWdlIGJsb2NrIGFyZSBub3cgZnJlZSwgZnJlZSB0aGUgZW50aXJlCisJICogcGFnZSBibG9jayBpdHNlbGYuCisJICovCisJaWYgKGJsb2NrID09IHBhZ2VCbG9ja3MpIHsKKwkgICAgLyogRGVsZXRlIGZyb20gaGVhZCAqLworCSAgICBwYWdlQmxvY2tzID0gYmxvY2stPm5leHQ7CisJICAgIGlmIChibG9jay0+bmV4dCkKKwkJYmxvY2stPm5leHQtPnByZXYgPSBOVUxMOworCSAgICB9CisJZWxzZSB7CisJICAgIC8qIERlbGV0ZSBmcm9tIG1pZGRsZSBvZiBsaXN0ICovCisJICAgIENIRUNLKGJsb2NrLT5wcmV2ICE9IE5VTEwpOworCSAgICBibG9jay0+cHJldi0+bmV4dCA9IGJsb2NrLT5uZXh0OworCSAgICBpZiAoYmxvY2stPm5leHQpCisJCWJsb2NrLT5uZXh0LT5wcmV2ID0gYmxvY2stPnByZXY7CisJICAgIH0KKwlQTV9mcmVlKGJsb2NrKTsKKwl9CiAjZWxzZQogICAgICh2b2lkKXA7CiAjZW5kaWYKQEAgLTE0NDQsNyArMTQ0NCw3IEBACiAKICNpZm5kZWYgTUtfRlAKICNkZWZpbmUgTUtfRlAocyxvKSAgKCAodm9pZCBmYXIgKikoICgodWxvbmcpKHMpIDw8IDE2KSArIFwKLSAgICAgICAgICAgICAgICAgICAgKHVsb25nKShvKSApKQorCQkgICAgKHVsb25nKShvKSApKQogI2VuZGlmCiAKIHZvaWQgKiBQTUFQSSBQTV9tYXBSZWFsUG9pbnRlcih1aW50IHJfc2VnLHVpbnQgcl9vZmYpCkBAIC0xNTM0LDcgKzE1MzQsNyBAQAogdm9pZCAqIFBNQVBJIFBNX2dldEJJT1NQb2ludGVyKHZvaWQpCiB7CiAgICAgaWYgKCF6ZXJvUHRyKQotICAgICAgICB6ZXJvUHRyID0gUE1fbWFwUGh5c2ljYWxBZGRyKDAsMHhGRkZGRix0cnVlKTsKKwl6ZXJvUHRyID0gUE1fbWFwUGh5c2ljYWxBZGRyKDAsMHhGRkZGRix0cnVlKTsKICAgICByZXR1cm4gKHZvaWQqKSh6ZXJvUHRyICsgMHg0MDApOwogfQogCkBAIC0xNTQyLDcgKzE1NDIsNyBAQAogewogICAgIHN0YXRpYyB2b2lkICpiYW5rUHRyOwogICAgIGlmICghYmFua1B0cikKLSAgICAgICAgYmFua1B0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigweEEwMDAwLDB4RkZGRix0cnVlKTsKKwliYW5rUHRyID0gUE1fbWFwUGh5c2ljYWxBZGRyKDB4QTAwMDAsMHhGRkZGLHRydWUpOwogICAgIHJldHVybiBiYW5rUHRyOwogfQogCkBAIC0xNTYxLDE2ICsxNTYxLDE2IEBACiAgICAgICogcnVubmluZyBhdCByaW5nIDAgKGllOiB1bmRlciByZWFsIERPUykuCiAgICAgICovCiAgICAgaWYgKFZYRF92ZXJzaW9uID09IC0xKQotICAgICAgICBQTV9pbml0KCk7CisJUE1faW5pdCgpOwogICAgIGlmIChWWERfdmVyc2lvbikgewotICAgICAgICBtZW1zZXQoJnJlZ3MsMCxzaXplb2YocmVncykpOwotICAgICAgICByZWdzLmVheCA9IEFQSV9OVU0oUE1IRUxQX01BUFBIWVMpOwotICAgICAgICByZWdzLmVieCA9IGJhc2U7Ci0gICAgICAgIHJlZ3MuZWN4ID0gbGltaXQ7Ci0gICAgICAgIHJlZ3MuZWR4ID0gaXNDYWNoZWQ7Ci0gICAgICAgIF9QTV9WeERDYWxsKCZyZWdzLF9QTV9WWERfb2ZmLF9QTV9WWERfc2VsKTsKLSAgICAgICAgcmV0dXJuICh2b2lkKilyZWdzLmVheDsKLSAgICAgICAgfQorCW1lbXNldCgmcmVncywwLHNpemVvZihyZWdzKSk7CisJcmVncy5lYXggPSBBUElfTlVNKFBNSEVMUF9NQVBQSFlTKTsKKwlyZWdzLmVieCA9IGJhc2U7CisJcmVncy5lY3ggPSBsaW1pdDsKKwlyZWdzLmVkeCA9IGlzQ2FjaGVkOworCV9QTV9WeERDYWxsKCZyZWdzLF9QTV9WWERfb2ZmLF9QTV9WWERfc2VsKTsKKwlyZXR1cm4gKHZvaWQqKXJlZ3MuZWF4OworCX0KIAogICAgIC8qIFJvdW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHRvIGEgNEtiIGJvdW5kYXJ5IGFuZCB0aGUgbGltaXQgdG8gYQogICAgICAqIDRLYi0xIGJvdW5kYXJ5IGJlZm9yZSBwYXNzaW5nIHRoZSB2YWx1ZXMgdG8gVE5ULiBJZiB3ZSByb3VuZCB0aGUKQEAgLTE1ODMsMTUgKzE1ODMsMTUgQEAKICAgICBfZHhfY29uZmlnX2luZigmY29uZmlnLCAoVUNIQVIqKSZjb25maWcpOwogICAgIGVyciA9IF9keF9tYXBfcGh5cyhjb25maWcuY19kc19zZWwsYmFzZUFkZHIsKG5ld0xpbWl0ICsgNDA5NSkgLyA0MDk2LCZvZmZzZXQpOwogICAgIGlmIChlcnIgPT0gMTMwKSB7Ci0gICAgICAgIC8qIElmIHRoZSBUTlQgZnVuY3Rpb24gZmFpbGVkLCB3ZSBhcmUgcnVubmluZyBpbiBhIERQTUkgZW52aXJvbm1lbnQKLSAgICAgICAgICogYW5kIHRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgd29yay4gSG93ZXZlciB3ZSBrbm93IGhvdyB0byBoYW5kbGUKLSAgICAgICAgICogRFBNSSBwcm9wZXJseSwgc28gd2UgdXNlIG91ciBnZW5lcmljIERQTUkgZnVuY3Rpb25zIHRvIGRvCi0gICAgICAgICAqIHdoYXQgdGhlIFROVCBydW50aW1lIGxpYnJhcmllcyBjYW4ndC4KLSAgICAgICAgICovCi0gICAgICAgIHJldHVybiBEUE1JX21hcFBoeXNpY2FsQWRkcihiYXNlLGxpbWl0LGlzQ2FjaGVkKTsKLSAgICAgICAgfQorCS8qIElmIHRoZSBUTlQgZnVuY3Rpb24gZmFpbGVkLCB3ZSBhcmUgcnVubmluZyBpbiBhIERQTUkgZW52aXJvbm1lbnQKKwkgKiBhbmQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrLiBIb3dldmVyIHdlIGtub3cgaG93IHRvIGhhbmRsZQorCSAqIERQTUkgcHJvcGVybHksIHNvIHdlIHVzZSBvdXIgZ2VuZXJpYyBEUE1JIGZ1bmN0aW9ucyB0byBkbworCSAqIHdoYXQgdGhlIFROVCBydW50aW1lIGxpYnJhcmllcyBjYW4ndC4KKwkgKi8KKwlyZXR1cm4gRFBNSV9tYXBQaHlzaWNhbEFkZHIoYmFzZSxsaW1pdCxpc0NhY2hlZCk7CisJfQogICAgIGlmIChlcnIgPT0gMCkKLSAgICAgICAgcmV0dXJuICh2b2lkKikob2Zmc2V0ICsgYmFzZU9mcyk7CisJcmV0dXJuICh2b2lkKikob2Zmc2V0ICsgYmFzZU9mcyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE2MTEsNyArMTYxMSw3IEBACiB2b2lkICogUE1BUEkgUE1fbWFwUmVhbFBvaW50ZXIodWludCByX3NlZyx1aW50IHJfb2ZmKQogewogICAgIGlmICghemVyb1B0cikKLSAgICAgICAgemVyb1B0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigwLDB4RkZGRkYpOworCXplcm9QdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMCwweEZGRkZGKTsKICAgICByZXR1cm4gKHZvaWQqKSh6ZXJvUHRyICsgTUtfUEhZUyhyX3NlZyxyX29mZikpOwogfQogCkBAIC0xNjIxLDcgKzE2MjEsNyBAQAogICAgIHZvaWQgICAgKnA7CiAKICAgICBpZiAoX2R4X3JlYWxfYWxsb2MoKHNpemUgKyAweEYpID4+IDQsJmFkZHIsJnQpICE9IDApCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgICpyX3NlZyA9IGFkZHI7ICAgICAgICAgICAgICAgICAgLyogUmVhbCBtb2RlIHNlZ21lbnQgYWRkcmVzcyAgICAqLwogICAgICpyX29mZiA9IDA7ICAgICAgICAgICAgICAgICAgICAgLyogUmVhbCBtb2RlIHNlZ21lbnQgb2Zmc2V0ICAgICAqLwogICAgIHAgPSBQTV9tYXBSZWFsUG9pbnRlcigqcl9zZWcsKnJfb2ZmKTsKQEAgLTE3MzIsNyArMTczMiw3IEBACiAgICAgci54LmJ4ID0gKHNpemUgKyAweEYpID4+IDQ7ICAgICAvKiBOdW1iZXIgb2YgcGFyYWdyYXBocyB0byBhbGxvY2F0ZSAqLwogICAgIFBNX2ludDM4NigweDIxLCAmciwgJnIpOyAgICAgICAgLyogQ2FsbCBET1MgZXh0ZW5kZXIgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoci54LmNmbGFnKQotICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgLyogQ291bGQgbm90IGFsbG9jYXRlIHRoZSBtZW1vcnkgICAgKi8KKwlyZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgLyogQ291bGQgbm90IGFsbG9jYXRlIHRoZSBtZW1vcnkgICAgKi8KICAgICAqcl9zZWcgPSByLmUuZWF4OwogICAgICpyX29mZiA9IDA7CiAgICAgcmV0dXJuIFBNX21hcFJlYWxQb2ludGVyKCpyX3NlZywqcl9vZmYpOwpAQCAtMTgyOCwxOSArMTgyOCwxOSBAQAogICAgICAqIHJ1bm5pbmcgYXQgcmluZyAwIChpZTogdW5kZXIgcmVhbCBET1MpLgogICAgICAqLwogICAgIGlmIChWWERfdmVyc2lvbiA9PSAtMSkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBpZiAoVlhEX3ZlcnNpb24pIHsKLSAgICAgICAgbWVtc2V0KCZyZWdzLDAsc2l6ZW9mKHJlZ3MpKTsKLSAgICAgICAgcmVncy5lYXggPSBBUElfTlVNKFBNSEVMUF9NQVBQSFlTKTsKLSAgICAgICAgcmVncy5lYnggPSBiYXNlOwotICAgICAgICByZWdzLmVjeCA9IGxpbWl0OwotICAgICAgICByZWdzLmVkeCA9IGlzQ2FjaGVkOwotICAgICAgICBfUE1fVnhEQ2FsbCgmcmVncyxfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7Ci0gICAgICAgIHJldHVybiAodm9pZCopcmVncy5lYXg7Ci0gICAgICAgIH0KKwltZW1zZXQoJnJlZ3MsMCxzaXplb2YocmVncykpOworCXJlZ3MuZWF4ID0gQVBJX05VTShQTUhFTFBfTUFQUEhZUyk7CisJcmVncy5lYnggPSBiYXNlOworCXJlZ3MuZWN4ID0gbGltaXQ7CisJcmVncy5lZHggPSBpc0NhY2hlZDsKKwlfUE1fVnhEQ2FsbCgmcmVncyxfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7CisJcmV0dXJuICh2b2lkKilyZWdzLmVheDsKKwl9CiAKICAgICBpZiAoYmFzZSA+IDB4MTAwMDAwKQotICAgICAgICByZXR1cm4gX3gzODZfbWFwX3BoeXNpY2FsX2FkZHJlc3MoKHZvaWQqKWJhc2UsbGltaXQpOworCXJldHVybiBfeDM4Nl9tYXBfcGh5c2ljYWxfYWRkcmVzcygodm9pZCopYmFzZSxsaW1pdCk7CiAgICAgcmV0dXJuICh2b2lkKikoKHVsb25nKV94Mzg2X3plcm9fYmFzZV9wdHIgKyBiYXNlKTsKIH0KIApAQCAtMTg3Miw3ICsxODcyLDcgQEAKICAgICAvKiBHZXQgcGh5c2ljYWwgbWVtb3J5IGF2YWlsYWJsZSAqLwogICAgICpwaHlzaWNhbCA9IF9YMzJfZ2V0UGh5c01lbSgpOwogICAgIGlmICgqcGh5c2ljYWwgPiAqdG90YWwpCi0gICAgICAgICpwaHlzaWNhbCA9ICp0b3RhbDsKKwkqcGh5c2ljYWwgPSAqdG90YWw7CiB9CiAKICNlbmRpZgpAQCAtMTkwOCwxNiArMTkwOCwxNiBAQAogICAgICAqIHJ1bm5pbmcgYXQgcmluZyAwIChpZTogdW5kZXIgcmVhbCBET1MpLgogICAgICAqLwogICAgIGlmIChWWERfdmVyc2lvbiA9PSAtMSkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBpZiAoVlhEX3ZlcnNpb24pIHsKLSAgICAgICAgbWVtc2V0KCZyZWdzLDAsc2l6ZW9mKHJlZ3MpKTsKLSAgICAgICAgcmVncy5lYXggPSBBUElfTlVNKFBNSEVMUF9NQVBQSFlTKTsKLSAgICAgICAgcmVncy5lYnggPSBiYXNlOwotICAgICAgICByZWdzLmVjeCA9IGxpbWl0OwotICAgICAgICByZWdzLmVkeCA9IGlzQ2FjaGVkOwotICAgICAgICBfUE1fVnhEQ2FsbCgmcmVncyxfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7Ci0gICAgICAgIHJldHVybiAodm9pZCopcmVncy5lYXg7Ci0gICAgICAgIH0KKwltZW1zZXQoJnJlZ3MsMCxzaXplb2YocmVncykpOworCXJlZ3MuZWF4ID0gQVBJX05VTShQTUhFTFBfTUFQUEhZUyk7CisJcmVncy5lYnggPSBiYXNlOworCXJlZ3MuZWN4ID0gbGltaXQ7CisJcmVncy5lZHggPSBpc0NhY2hlZDsKKwlfUE1fVnhEQ2FsbCgmcmVncyxfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7CisJcmV0dXJuICh2b2lkKilyZWdzLmVheDsKKwl9CiAgICAgcmV0dXJuIERQTUlfbWFwUGh5c2ljYWxBZGRyKGJhc2UsbGltaXQsaXNDYWNoZWQpOwogfQogCkBAIC0xOTMyLDcgKzE5MzIsNyBAQAogewogICAgIHVsb25nICAgcGh5c0FkZHI7CiAgICAgaWYgKCFQTV9nZXRQaHlzaWNhbEFkZHJSYW5nZShwLDEsJnBoeXNBZGRyKSkKLSAgICAgICAgcmV0dXJuIDB4RkZGRkZGRkY7CisJcmV0dXJuIDB4RkZGRkZGRkY7CiAgICAgcmV0dXJuIHBoeXNBZGRyIHwgKCh1bG9uZylwICYgMHhGRkYpOwogfQogCkBAIC0xOTUwLDE0ICsxOTUwLDE0IEBACiAgICAgICogaGVscGVyIFZ4RCBzZXJ2aWNlcyB0byBmaW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGFuIGFkZHJlc3MuCiAgICAgICovCiAgICAgaWYgKFZYRF92ZXJzaW9uKSB7Ci0gICAgICAgIG1lbXNldCgmcmVncywwLHNpemVvZihyZWdzKSk7Ci0gICAgICAgIHJlZ3MuZWF4ID0gQVBJX05VTShQTUhFTFBfR0VUUEhZU0lDQUxBRERSUkFOR0UpOwotICAgICAgICByZWdzLmVieCA9ICh1bG9uZylwOwotICAgICAgICByZWdzLmVjeCA9ICh1bG9uZylsZW5ndGg7Ci0gICAgICAgIHJlZ3MuZWR4ID0gKHVsb25nKXBoeXNBZGRyZXNzOwotICAgICAgICBfUE1fVnhEQ2FsbCgmcmVncyxfUE1fVlhEX29mZixfUE1fVlhEX3NlbCk7Ci0gICAgICAgIHJldHVybiByZWdzLmVheDsKLSAgICAgICAgfQorCW1lbXNldCgmcmVncywwLHNpemVvZihyZWdzKSk7CisJcmVncy5lYXggPSBBUElfTlVNKFBNSEVMUF9HRVRQSFlTSUNBTEFERFJSQU5HRSk7CisJcmVncy5lYnggPSAodWxvbmcpcDsKKwlyZWdzLmVjeCA9ICh1bG9uZylsZW5ndGg7CisJcmVncy5lZHggPSAodWxvbmcpcGh5c0FkZHJlc3M7CisJX1BNX1Z4RENhbGwoJnJlZ3MsX1BNX1ZYRF9vZmYsX1BNX1ZYRF9zZWwpOworCXJldHVybiByZWdzLmVheDsKKwl9CiAKICAgICAvKiBGaW5kIGJhc2UgYWRkcmVzcyBmb3IgZGVmYXVsdCBEUyBzZWxlY3RvciAqLwogICAgIFBNX3NlZ3JlYWQoJnNyZWdzKTsKQEAgLTE5NzAsMzggKzE5NzAsMzggQEAKICAgICBwdGUgPSAqKCh1bG9uZyopcCk7CiAjaWZkZWYgIERPUzRHVwogICAgIGlmIChfUE1fcGFnaW5nRW5hYmxlZCgpID09IDApIHsKLSAgICAgICAgaW50ICAgICBjb3VudDsKLSAgICAgICAgdWxvbmcgICBsaW5BZGRyID0gKHVsb25nKXA7CisJaW50ICAgICBjb3VudDsKKwl1bG9uZyAgIGxpbkFkZHIgPSAodWxvbmcpcDsKIAotICAgICAgICAvKiBXaGVuIHBhZ2luZyBpcyBkaXNhYmxlZCBwaHlzaWNhbD1saW5lYXIgKi8KLSAgICAgICAgZm9yIChjb3VudCA9IChsZW5ndGgrMHhGRkYpID4+IDEyOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKLSAgICAgICAgICAgICpwaHlzQWRkcmVzcysrID0gbGluQWRkcjsKLSAgICAgICAgICAgIGxpbkFkZHIgKz0gNDA5NjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKwkvKiBXaGVuIHBhZ2luZyBpcyBkaXNhYmxlZCBwaHlzaWNhbD1saW5lYXIgKi8KKwlmb3IgKGNvdW50ID0gKGxlbmd0aCsweEZGRikgPj4gMTI7IGNvdW50ID4gMDsgY291bnQtLSkgeworCSAgICAqcGh5c0FkZHJlc3MrKyA9IGxpbkFkZHI7CisJICAgIGxpbkFkZHIgKz0gNDA5NjsKKwkgICAgfQorCXJldHVybiB0cnVlOworCX0KICAgICBlbHNlIGlmICgoUERCID0gX1BNX2dldFBEQigpKSAhPSAwICYmIERTQmFzZUFkZHIgPT0gMCkgewotICAgICAgICBpbnQgICAgIHN0YXJ0UERCLGVuZFBEQixpUERCLHN0YXJ0UGFnZSxlbmRQYWdlLHN0YXJ0LGVuZCxpUGFnZTsKLSAgICAgICAgdWxvbmcgICBwYWdlVGFibGUsKnBQYWdlVGFibGUsbGluQWRkciA9ICh1bG9uZylwOwotICAgICAgICB1bG9uZyAgIGxpbWl0ID0gbGVuZ3RoLTE7CisJaW50ICAgICBzdGFydFBEQixlbmRQREIsaVBEQixzdGFydFBhZ2UsZW5kUGFnZSxzdGFydCxlbmQsaVBhZ2U7CisJdWxvbmcgICBwYWdlVGFibGUsKnBQYWdlVGFibGUsbGluQWRkciA9ICh1bG9uZylwOworCXVsb25nICAgbGltaXQgPSBsZW5ndGgtMTsKIAotICAgICAgICBwUERCID0gKHVsb25nKilEUE1JX21hcFBoeXNpY2FsVG9MaW5lYXIoUERCLDB4RkZGKTsKLSAgICAgICAgaWYgKHBQREIpIHsKLSAgICAgICAgICAgIHN0YXJ0UERCID0gKGxpbkFkZHIgPj4gMjIpICYgMHgzRkZMOwotICAgICAgICAgICAgc3RhcnRQYWdlID0gKGxpbkFkZHIgPj4gMTIpICYgMHgzRkZMOwotICAgICAgICAgICAgZW5kUERCID0gKChsaW5BZGRyK2xpbWl0KSA+PiAyMikgJiAweDNGRkw7Ci0gICAgICAgICAgICBlbmRQYWdlID0gKChsaW5BZGRyK2xpbWl0KSA+PiAxMikgJiAweDNGRkw7Ci0gICAgICAgICAgICBmb3IgKGlQREIgPSBzdGFydFBEQjsgaVBEQiA8PSBlbmRQREI7IGlQREIrKykgewotICAgICAgICAgICAgICAgIHBhZ2VUYWJsZSA9IHBQREJbaVBEQl0gJiB+MHhGRkZMOwotICAgICAgICAgICAgICAgIHBQYWdlVGFibGUgPSAodWxvbmcqKURQTUlfbWFwUGh5c2ljYWxUb0xpbmVhcihwYWdlVGFibGUsMHhGRkYpOwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gKGlQREIgPT0gc3RhcnRQREIpID8gc3RhcnRQYWdlIDogMDsKLSAgICAgICAgICAgICAgICBlbmQgPSAoaVBEQiA9PSBlbmRQREIpID8gZW5kUGFnZSA6IDB4M0ZGTDsKLSAgICAgICAgICAgICAgICBmb3IgKGlQYWdlID0gc3RhcnQ7IGlQYWdlIDw9IGVuZDsgaVBhZ2UrKykKLSAgICAgICAgICAgICAgICAgICAgKnBoeXNBZGRyZXNzKysgPSAocFBhZ2VUYWJsZVtpUGFnZV0gJiB+MHhGRkYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJcFBEQiA9ICh1bG9uZyopRFBNSV9tYXBQaHlzaWNhbFRvTGluZWFyKFBEQiwweEZGRik7CisJaWYgKHBQREIpIHsKKwkgICAgc3RhcnRQREIgPSAobGluQWRkciA+PiAyMikgJiAweDNGRkw7CisJICAgIHN0YXJ0UGFnZSA9IChsaW5BZGRyID4+IDEyKSAmIDB4M0ZGTDsKKwkgICAgZW5kUERCID0gKChsaW5BZGRyK2xpbWl0KSA+PiAyMikgJiAweDNGRkw7CisJICAgIGVuZFBhZ2UgPSAoKGxpbkFkZHIrbGltaXQpID4+IDEyKSAmIDB4M0ZGTDsKKwkgICAgZm9yIChpUERCID0gc3RhcnRQREI7IGlQREIgPD0gZW5kUERCOyBpUERCKyspIHsKKwkJcGFnZVRhYmxlID0gcFBEQltpUERCXSAmIH4weEZGRkw7CisJCXBQYWdlVGFibGUgPSAodWxvbmcqKURQTUlfbWFwUGh5c2ljYWxUb0xpbmVhcihwYWdlVGFibGUsMHhGRkYpOworCQlzdGFydCA9IChpUERCID09IHN0YXJ0UERCKSA/IHN0YXJ0UGFnZSA6IDA7CisJCWVuZCA9IChpUERCID09IGVuZFBEQikgPyBlbmRQYWdlIDogMHgzRkZMOworCQlmb3IgKGlQYWdlID0gc3RhcnQ7IGlQYWdlIDw9IGVuZDsgaVBhZ2UrKykKKwkJICAgICpwaHlzQWRkcmVzcysrID0gKHBQYWdlVGFibGVbaVBhZ2VdICYgfjB4RkZGKTsKKwkJfQorCSAgICByZXR1cm4gdHJ1ZTsKKwkgICAgfQorCX0KICNlbmRpZgogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIwMTcsNyArMjAxNyw3IEBACiAgICAgc3RhdGljIHVjaGFyICp6ZXJvUHRyID0gTlVMTDsKIAogICAgIGlmICghemVyb1B0cikKLSAgICAgICAgemVyb1B0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigwLDB4RkZGRkYsdHJ1ZSk7CisJemVyb1B0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigwLDB4RkZGRkYsdHJ1ZSk7CiAgICAgcmV0dXJuICh2b2lkKikoemVyb1B0ciArIE1LX1BIWVMocl9zZWcscl9vZmYpKTsKIH0KIApAQCAtMjAzMCw3ICsyMDMwLDcgQEAKICAgICByLnguYnggPSAoc2l6ZSArIDB4RikgPj4gNDsgICAgIC8qIG51bWJlciBvZiBwYXJhZ3JhcGhzICAgICAgICAgICAgICovCiAgICAgUE1faW50Mzg2KDB4MzEsICZyLCAmcik7CiAgICAgaWYgKHIueC5jZmxhZykKLSAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIERQTUkgY2FsbCBmYWlsZWQgICAgICAgICAgICAgICAgICovCisJcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIERQTUkgY2FsbCBmYWlsZWQgICAgICAgICAgICAgICAgICovCiAgICAgKnJfc2VnID0gci54LmF4OyAgICAgICAgICAgICAgICAvKiBSZWFsIG1vZGUgc2VnbWVudCAgICAgICAgICAgICAgICAqLwogICAgICpyX29mZiA9IDA7CiAgICAgcCA9IFBNX21hcFJlYWxQb2ludGVyKCpyX3NlZywqcl9vZmYpOwpAQCAtMjA0MywxMCArMjA0MywxMCBAQAogICAgIFBNUkVHUyAgcjsKIAogICAgIGlmIChtZW0pIHsKLSAgICAgICAgci54LmF4ID0gMHgxMDE7ICAgICAgICAgICAgICAgICAgICAgLyogRFBNSSBmcmVlIERPUyBtZW1vcnkgICAgICAgICAqLwotICAgICAgICByLnguZHggPSBfUE1fZmluZFJlYWxNb2RlQmxvY2sobWVtKTsvKiBEWCA6PSBzZWxlY3RvciBmcm9tIDB4MTAwICAgICovCi0gICAgICAgIFBNX2ludDM4NigweDMxLCAmciwgJnIpOwotICAgICAgICB9CisJci54LmF4ID0gMHgxMDE7ICAgICAgICAgICAgICAgICAgICAgLyogRFBNSSBmcmVlIERPUyBtZW1vcnkgICAgICAgICAqLworCXIueC5keCA9IF9QTV9maW5kUmVhbE1vZGVCbG9jayhtZW0pOy8qIERYIDo9IHNlbGVjdG9yIGZyb20gMHgxMDAgICAgKi8KKwlQTV9pbnQzODYoMHgzMSwgJnIsICZyKTsKKwl9CiB9CiAKIHN0YXRpYyBEUE1JX2hhbmRsZXJfdCAgIERQTUlfaW50MTAgPSBOVUxMOwpAQCAtMjA2Miw5ICsyMDYyLDkgQEAKICAgICBQTVNSRUdTICAgICBzcjsKIAogICAgIGlmIChpbnRubyA9PSAweDEwICYmIERQTUlfaW50MTApIHsKLSAgICAgICAgaWYgKERQTUlfaW50MTAocmVncykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwlpZiAoRFBNSV9pbnQxMChyZWdzKSkKKwkgICAgcmV0dXJuOworCX0KICAgICBQTV9zZWdyZWFkKCZzcik7CiAgICAgci54LmF4ID0gMHgzMDA7ICAgICAgICAgICAgICAgICAvKiBEUE1JIGlzc3VlIHJlYWwgaW50ZXJydXB0ICAgICovCiAgICAgci5oLmJsID0gaW50bm87CkBAIC0yMTE2LDE3ICsyMTE2LDE3IEBACiAjcHJhZ21hIHBhY2soMSkKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICB1aW50ICAgIExhcmdlc3RCbG9ja0F2YWlsOwotICAgICAgICB1aW50ICAgIE1heFVubG9ja2VkUGFnZTsKLSAgICAgICAgdWludCAgICBMYXJnZXN0TG9ja2FibGVQYWdlOwotICAgICAgICB1aW50ICAgIExpbkFkZHJTcGFjZTsKLSAgICAgICAgdWludCAgICBOdW1GcmVlUGFnZXNBdmFpbDsKLSAgICAgICAgdWludCAgICBOdW1QaHlzaWNhbFBhZ2VzRnJlZTsKLSAgICAgICAgdWludCAgICBUb3RhbFBoeXNpY2FsUGFnZXM7Ci0gICAgICAgIHVpbnQgICAgRnJlZUxpbkFkZHJTcGFjZTsKLSAgICAgICAgdWludCAgICBTaXplT2ZQYWdlRmlsZTsKLSAgICAgICAgdWludCAgICByZXNbM107Ci0gICAgICAgIH0gTWVtSW5mbzsKKwl1aW50ICAgIExhcmdlc3RCbG9ja0F2YWlsOworCXVpbnQgICAgTWF4VW5sb2NrZWRQYWdlOworCXVpbnQgICAgTGFyZ2VzdExvY2thYmxlUGFnZTsKKwl1aW50ICAgIExpbkFkZHJTcGFjZTsKKwl1aW50ICAgIE51bUZyZWVQYWdlc0F2YWlsOworCXVpbnQgICAgTnVtUGh5c2ljYWxQYWdlc0ZyZWU7CisJdWludCAgICBUb3RhbFBoeXNpY2FsUGFnZXM7CisJdWludCAgICBGcmVlTGluQWRkclNwYWNlOworCXVpbnQgICAgU2l6ZU9mUGFnZUZpbGU7CisJdWludCAgICByZXNbM107CisJfSBNZW1JbmZvOwogCiAjcHJhZ21hIHBhY2soKQogCkBAIC0yMTQ0LDcgKzIxNDQsNyBAQAogICAgICpwaHlzaWNhbCA9IG1lbUluZm8uTnVtUGh5c2ljYWxQYWdlc0ZyZWUgKiA0MDk2OwogICAgICp0b3RhbCA9IG1lbUluZm8uTGFyZ2VzdEJsb2NrQXZhaWw7CiAgICAgaWYgKCp0b3RhbCA8ICpwaHlzaWNhbCkKLSAgICAgICAgKnBoeXNpY2FsID0gKnRvdGFsOworCSpwaHlzaWNhbCA9ICp0b3RhbDsKIH0KIAogI2VuZGlmCkBAIC0yMjEyLDcgKzIyMTIsNyBAQAogdWludCBQTUFQSSBQTV9nZXRGaWxlQXR0cigKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyEKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyEgKi8KICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjIyNSw3ICsyMjI1LDcgQEAKICAgICBpYm9vbCBnbVRpbWUsCiAgICAgUE1fdGltZSAqdGltZSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyEKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyEgKi8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTIyMzgsNiArMjIzOCw2IEBACiAgICAgaWJvb2wgZ21UaW1lLAogICAgIFBNX3RpbWUgKnRpbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vZG9zL3BtZG9zLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvcG1kb3MuYwppbmRleCA3NGY4NDI3Li5lZWNjMmRhIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvcG1kb3MuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvcG1kb3MuYwpAQCAtMTYwLDQ3ICsxNjAsNDcgQEAKICAgICByZWdzLnguYXggPSBoYXJkUmVzZXQgPyAwIDogMzM7CiAgICAgUE1faW50ODYoMHgzMywgJnJlZ3MsICZyZWdzKTsKICAgICBpZiAob2xkSGFuZGxlcikKLSAgICAgICAgUE1fc2V0TW91c2VIYW5kbGVyKF9QTV9tb3VzZU1hc2ssIG9sZEhhbmRsZXIpOworCVBNX3NldE1vdXNlSGFuZGxlcihfUE1fbW91c2VNYXNrLCBvbGRIYW5kbGVyKTsKIH0KIAogdm9pZCBQTUFQSSBQTV9zZXRSZWFsVGltZUNsb2NrRnJlcXVlbmN5KGludCBmcmVxdWVuY3kpCiB7CiAgICAgc3RhdGljIHNob3J0IGNvbnZlcnRbXSA9IHsKLSAgICAgICAgODE5MiwKLSAgICAgICAgNDA5NiwKLSAgICAgICAgMjA0OCwKLSAgICAgICAgMTAyNCwKLSAgICAgICAgNTEyLAotICAgICAgICAyNTYsCi0gICAgICAgIDEyOCwKLSAgICAgICAgNjQsCi0gICAgICAgIDMyLAotICAgICAgICAxNiwKLSAgICAgICAgOCwKLSAgICAgICAgNCwKLSAgICAgICAgMiwKLSAgICAgICAgLTEsCi0gICAgICAgIH07CisJODE5MiwKKwk0MDk2LAorCTIwNDgsCisJMTAyNCwKKwk1MTIsCisJMjU2LAorCTEyOCwKKwk2NCwKKwkzMiwKKwkxNiwKKwk4LAorCTQsCisJMiwKKwktMSwKKwl9OwogICAgIGludCBpOwogCiAgICAgLyogRmlyc3QgY2xlYXIgYW55IHBlbmRpbmcgUlRDIHRpbWVvdXQgaWYgbm90IGNsZWFyZWQgKi8KICAgICBfUE1fcmVhZENNT1MoMHgwQyk7CiAgICAgaWYgKGZyZXF1ZW5jeSA9PSAwKSB7Ci0gICAgICAgIC8qIERpc2FibGUgUlRDIHRpbW91dCAqLwotICAgICAgICBfUE1fd3JpdGVDTU9TKDB4MEEsX1BNX29sZENNT1NSZWdBKTsKLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBCLF9QTV9vbGRDTU9TUmVnQiAmIDB4MEYpOwotICAgICAgICB9CisJLyogRGlzYWJsZSBSVEMgdGltb3V0ICovCisJX1BNX3dyaXRlQ01PUygweDBBLF9QTV9vbGRDTU9TUmVnQSk7CisJX1BNX3dyaXRlQ01PUygweDBCLF9QTV9vbGRDTU9TUmVnQiAmIDB4MEYpOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgLyogQ29udmVydCBmcmVxdWVuY3kgdmFsdWUgdG8gUlRDIGNsb2NrIGluZGV4ZXMgKi8KLSAgICAgICAgZm9yIChpID0gMDsgY29udmVydFtpXSAhPSAtMTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoY29udmVydFtpXSA9PSBmcmVxdWVuY3kpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisJLyogQ29udmVydCBmcmVxdWVuY3kgdmFsdWUgdG8gUlRDIGNsb2NrIGluZGV4ZXMgKi8KKwlmb3IgKGkgPSAwOyBjb252ZXJ0W2ldICE9IC0xOyBpKyspIHsKKwkgICAgaWYgKGNvbnZlcnRbaV0gPT0gZnJlcXVlbmN5KQorCQlicmVhazsKKwkgICAgfQogCi0gICAgICAgIC8qIFNldCBSVEMgdGltb3V0IHZhbHVlIGFuZCBlbmFibGUgdGltZW91dCAqLwotICAgICAgICBfUE1fd3JpdGVDTU9TKDB4MEEsMHgyMCB8IChpKzMpKTsKLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBCLChfUE1fb2xkQ01PU1JlZ0IgJiAweDBGKSB8IDB4NDApOwotICAgICAgICB9CisJLyogU2V0IFJUQyB0aW1vdXQgdmFsdWUgYW5kIGVuYWJsZSB0aW1lb3V0ICovCisJX1BNX3dyaXRlQ01PUygweDBBLDB4MjAgfCAoaSszKSk7CisJX1BNX3dyaXRlQ01PUygweDBCLChfUE1fb2xkQ01PU1JlZ0IgJiAweDBGKSB8IDB4NDApOworCX0KIH0KIAogI2lmbmRlZiBSRUFMTU9ERQpAQCAtMjE2LDE4ICsyMTYsMTggQEAKICAgICAgKiB1bmRlciByZWFsIG1vZGUuCiAgICAgICovCiAgICAgaWYgKCFsb2NrZWQpIHsKLSAgICAgICAgUE1fc2F2ZURTKCk7Ci0gICAgICAgIHN0YXQgID0gIVBNX2xvY2tEYXRhUGFnZXMoJmdsb2JhbERhdGFTdGFydC0yMDQ4LDQwOTYsJmxoKTsKLSAgICAgICAgc3RhdCB8PSAhUE1fbG9ja0RhdGFQYWdlcygmX1BNX3BtZG9zRGF0YVN0YXJ0LChpbnQpJl9QTV9wbWRvc0RhdGFFbmQgLSAoaW50KSZfUE1fcG1kb3NEYXRhU3RhcnQsJmxoKTsKLSAgICAgICAgc3RhdCB8PSAhUE1fbG9ja0NvZGVQYWdlcygoX19jb2RlUHRyKV9QTV9wbWRvc0NvZGVTdGFydCwoaW50KV9QTV9wbWRvc0NvZGVFbmQtKGludClfUE1fcG1kb3NDb2RlU3RhcnQsJmxoKTsKLSAgICAgICAgc3RhdCB8PSAhUE1fbG9ja0RhdGFQYWdlcygmX1BNX0RNQURhdGFTdGFydCwoaW50KSZfUE1fRE1BRGF0YUVuZCAtIChpbnQpJl9QTV9ETUFEYXRhU3RhcnQsJmxoKTsKLSAgICAgICAgc3RhdCB8PSAhUE1fbG9ja0NvZGVQYWdlcygoX19jb2RlUHRyKV9QTV9ETUFDb2RlU3RhcnQsKGludClfUE1fRE1BQ29kZUVuZC0oaW50KV9QTV9ETUFDb2RlU3RhcnQsJmxoKTsKLSAgICAgICAgaWYgKHN0YXQpIHsKLSAgICAgICAgICAgIHByaW50ZigiUGFnZSBsb2NraW5nIHNlcnZpY2VzIGZhaWxlZCAtIGludGVycnVwdCBoYW5kbGluZyBub3Qgc2FmZSFcbiIpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgbG9ja2VkID0gMTsKLSAgICAgICAgfQorCVBNX3NhdmVEUygpOworCXN0YXQgID0gIVBNX2xvY2tEYXRhUGFnZXMoJmdsb2JhbERhdGFTdGFydC0yMDQ4LDQwOTYsJmxoKTsKKwlzdGF0IHw9ICFQTV9sb2NrRGF0YVBhZ2VzKCZfUE1fcG1kb3NEYXRhU3RhcnQsKGludCkmX1BNX3BtZG9zRGF0YUVuZCAtIChpbnQpJl9QTV9wbWRvc0RhdGFTdGFydCwmbGgpOworCXN0YXQgfD0gIVBNX2xvY2tDb2RlUGFnZXMoKF9fY29kZVB0cilfUE1fcG1kb3NDb2RlU3RhcnQsKGludClfUE1fcG1kb3NDb2RlRW5kLShpbnQpX1BNX3BtZG9zQ29kZVN0YXJ0LCZsaCk7CisJc3RhdCB8PSAhUE1fbG9ja0RhdGFQYWdlcygmX1BNX0RNQURhdGFTdGFydCwoaW50KSZfUE1fRE1BRGF0YUVuZCAtIChpbnQpJl9QTV9ETUFEYXRhU3RhcnQsJmxoKTsKKwlzdGF0IHw9ICFQTV9sb2NrQ29kZVBhZ2VzKChfX2NvZGVQdHIpX1BNX0RNQUNvZGVTdGFydCwoaW50KV9QTV9ETUFDb2RlRW5kLShpbnQpX1BNX0RNQUNvZGVTdGFydCwmbGgpOworCWlmIChzdGF0KSB7CisJICAgIHByaW50ZigiUGFnZSBsb2NraW5nIHNlcnZpY2VzIGZhaWxlZCAtIGludGVycnVwdCBoYW5kbGluZyBub3Qgc2FmZSFcbiIpOworCSAgICBleGl0KDEpOworCSAgICB9CisJbG9ja2VkID0gMTsKKwl9CiB9CiAKICNlbmRpZgpAQCAtMjQwLDcgKzI0MCw3IEBACiAKICNpZm5kZWYgTUtfRlAKICNkZWZpbmUgTUtfRlAocyxvKSAgKCAodm9pZCBmYXIgKikoICgodWxvbmcpKHMpIDw8IDE2KSArIFwKLSAgICAgICAgICAgICAgICAgICAgKHVsb25nKShvKSApKQorCQkgICAgKHVsb25nKShvKSApKQogI2VuZGlmCiAKIGludCBQTUFQSSBQTV9zZXRNb3VzZUhhbmRsZXIoaW50IG1hc2ssIFBNX21vdXNlSGFuZGxlciBtaCkKQEAgLTI1NiwxMCArMjU2LDEwIEBACiAgICAgdW5pb24gUkVHUyAgICAgIHJlZ3M7CiAKICAgICBpZiAoX1BNX21vdXNlSGFuZGxlcikgewotICAgICAgICByZWdzLnguYXggPSAzMzsKLSAgICAgICAgaW50ODYoMHgzMywgJnJlZ3MsICZyZWdzKTsKLSAgICAgICAgX1BNX21vdXNlSGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIH0KKwlyZWdzLnguYXggPSAzMzsKKwlpbnQ4NigweDMzLCAmcmVncywgJnJlZ3MpOworCV9QTV9tb3VzZUhhbmRsZXIgPSBOVUxMOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9zZXRUaW1lckhhbmRsZXIoUE1faW50SGFuZGxlciB0aCkKQEAgLTI3Miw5ICsyNzIsOSBAQAogdm9pZCBQTUFQSSBQTV9yZXN0b3JlVGltZXJIYW5kbGVyKHZvaWQpCiB7CiAgICAgaWYgKF9QTV90aW1lckhhbmRsZXIpIHsKLSAgICAgICAgX1BNX3NldFJNdmVjdCgweDgsIChsb25nKV9QTV9wcmV2VGltZXIpOwotICAgICAgICBfUE1fdGltZXJIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCV9QTV9zZXRSTXZlY3QoMHg4LCAobG9uZylfUE1fcHJldlRpbWVyKTsKKwlfUE1fdGltZXJIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIGlib29sIFBNQVBJIFBNX3NldFJlYWxUaW1lQ2xvY2tIYW5kbGVyKFBNX2ludEhhbmRsZXIgdGgsaW50IGZyZXF1ZW5jeSkKQEAgLTMwMCwxNSArMzAwLDE1IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVSZWFsVGltZUNsb2NrSGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fcnRjSGFuZGxlcikgewotICAgICAgICAvKiBSZXN0b3JlIENNT1MgcmVnaXN0ZXJzIGFuZCBtYXNrIFJUQyBjbG9jayAqLwotICAgICAgICBfUE1fd3JpdGVDTU9TKDB4MEEsX1BNX29sZENNT1NSZWdBKTsKLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBCLF9QTV9vbGRDTU9TUmVnQik7Ci0gICAgICAgIFBNX291dHBiKDB4QTEsKFBNX2lucGIoMHhBMSkgJiAweEZFKSB8IChfUE1fb2xkUlRDUElDMiAmIH4weEZFKSk7CisJLyogUmVzdG9yZSBDTU9TIHJlZ2lzdGVycyBhbmQgbWFzayBSVEMgY2xvY2sgKi8KKwlfUE1fd3JpdGVDTU9TKDB4MEEsX1BNX29sZENNT1NSZWdBKTsKKwlfUE1fd3JpdGVDTU9TKDB4MEIsX1BNX29sZENNT1NSZWdCKTsKKwlQTV9vdXRwYigweEExLChQTV9pbnBiKDB4QTEpICYgMHhGRSkgfCAoX1BNX29sZFJUQ1BJQzIgJiB+MHhGRSkpOwogCi0gICAgICAgIC8qIFJlc3RvcmUgdGhlIGludGVycnVwdCB2ZWN0b3IgKi8KLSAgICAgICAgX1BNX3NldFJNdmVjdCgweDcwLCAobG9uZylfUE1fcHJldlJUQyk7Ci0gICAgICAgIF9QTV9ydGNIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCS8qIFJlc3RvcmUgdGhlIGludGVycnVwdCB2ZWN0b3IgKi8KKwlfUE1fc2V0Uk12ZWN0KDB4NzAsIChsb25nKV9QTV9wcmV2UlRDKTsKKwlfUE1fcnRjSGFuZGxlciA9IE5VTEw7CisJfQogfQogCiB2b2lkIFBNQVBJIFBNX3NldEtleUhhbmRsZXIoUE1faW50SGFuZGxlciBraCkKQEAgLTMyMSw5ICszMjEsOSBAQAogdm9pZCBQTUFQSSBQTV9yZXN0b3JlS2V5SGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fa2V5SGFuZGxlcikgewotICAgICAgICBfUE1fc2V0Uk12ZWN0KDB4OSwgKGxvbmcpX1BNX3ByZXZLZXkpOwotICAgICAgICBfUE1fa2V5SGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIH0KKwlfUE1fc2V0Uk12ZWN0KDB4OSwgKGxvbmcpX1BNX3ByZXZLZXkpOworCV9QTV9rZXlIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIHZvaWQgUE1BUEkgUE1fc2V0S2V5MTVIYW5kbGVyKFBNX2tleTE1SGFuZGxlciBraCkKQEAgLTMzNiw5ICszMzYsOSBAQAogdm9pZCBQTUFQSSBQTV9yZXN0b3JlS2V5MTVIYW5kbGVyKHZvaWQpCiB7CiAgICAgaWYgKF9QTV9rZXkxNUhhbmRsZXIpIHsKLSAgICAgICAgX1BNX3NldFJNdmVjdCgweDE1LCAobG9uZylfUE1fcHJldktleTE1KTsKLSAgICAgICAgX1BNX2tleTE1SGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIH0KKwlfUE1fc2V0Uk12ZWN0KDB4MTUsIChsb25nKV9QTV9wcmV2S2V5MTUpOworCV9QTV9rZXkxNUhhbmRsZXIgPSBOVUxMOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9pbnN0YWxsQWx0QnJlYWtIYW5kbGVyKFBNX2JyZWFrSGFuZGxlciBiaCkKQEAgLTM2MiwxMSArMzYyLDExIEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVCcmVha0hhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX3ByZXZCcmVhaykgewotICAgICAgICBfUE1fc2V0Uk12ZWN0KDB4MUIsIChsb25nKV9QTV9wcmV2QnJlYWspOwotICAgICAgICBfUE1fc2V0Uk12ZWN0KDB4MjMsIChsb25nKV9QTV9wcmV2Q3RybEMpOwotICAgICAgICBfUE1fcHJldkJyZWFrID0gTlVMTDsKLSAgICAgICAgX1BNX2JyZWFrSGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIH0KKwlfUE1fc2V0Uk12ZWN0KDB4MUIsIChsb25nKV9QTV9wcmV2QnJlYWspOworCV9QTV9zZXRSTXZlY3QoMHgyMywgKGxvbmcpX1BNX3ByZXZDdHJsQyk7CisJX1BNX3ByZXZCcmVhayA9IE5VTEw7CisJX1BNX2JyZWFrSGFuZGxlciA9IE5VTEw7CisJfQogfQogCiB2b2lkIFBNQVBJIFBNX2luc3RhbGxBbHRDcml0aWNhbEhhbmRsZXIoUE1fY3JpdGljYWxIYW5kbGVyIGNoKQpAQCAtMzg3LDEwICszODcsMTAgQEAKIHZvaWQgUE1BUEkgUE1fcmVzdG9yZUNyaXRpY2FsSGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fcHJldkNyaXRpY2FsKSB7Ci0gICAgICAgIF9QTV9zZXRSTXZlY3QoMHgyNCwgKGxvbmcpX1BNX3ByZXZDcml0aWNhbCk7Ci0gICAgICAgIF9QTV9wcmV2Q3JpdGljYWwgPSBOVUxMOwotICAgICAgICBfUE1fY3JpdEhhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJX1BNX3NldFJNdmVjdCgweDI0LCAobG9uZylfUE1fcHJldkNyaXRpY2FsKTsKKwlfUE1fcHJldkNyaXRpY2FsID0gTlVMTDsKKwlfUE1fY3JpdEhhbmRsZXIgPSBOVUxMOworCX0KIH0KIAogaW50IFBNQVBJIFBNX2xvY2tEYXRhUGFnZXModm9pZCAqcCx1aW50IGxlbixQTV9sb2NrSGFuZGxlICpsaCkKQEAgLTQ5OSw3ICs0OTksNyBAQAogCiAgICAgLyogQ29weSB0aGUgcmVhbCBtb2RlIGhhbmRsZXIgdG8gcmVhbCBtb2RlIG1lbW9yeSAgICovCiAgICAgaWYgKChwID0gUE1fYWxsb2NSZWFsU2VnKHNpemVvZihyZWFsSGFuZGxlcikscnNlZyxyb2ZmKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAgICAgbWVtY3B5KHAscmVhbEhhbmRsZXIsc2l6ZW9mKHJlYWxIYW5kbGVyKSk7CiAKICAgICAvKiBTa2lwIHBhc3QgZ2xvYmFsIHZhcmlhYmxzIGluIHJlYWwgbW9kZSBjb2RlIHNlZ21lbnQgKi8KQEAgLTUxNiw3ICs1MTYsNyBAQAogICAgIGxvY2tQTUhhbmRsZXJzKCk7ICAgICAgICAgICAvKiBFbnN1cmUgb3VyIGhhbmRsZXJzIGFyZSBsb2NrZWQgICAqLwogCiAgICAgaWYgKChtb3VzZVB0ciA9IGluc3RhbGxDYWxsYmFjayhfUE1fbW91c2VJU1IsICZyc2VnLCAmcm9mZikpID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIF9QTV9tb3VzZUhhbmRsZXIgPSBtaDsKIAogICAgIC8qIEluc3RhbGwgdGhlIHJlYWwgbW9kZSBtb3VzZSBoYW5kbGVyICAqLwpAQCAtNTMzLDExICs1MzMsMTEgQEAKICAgICBSTVJFR1MgIHJlZ3M7CiAKICAgICBpZiAoX1BNX21vdXNlSGFuZGxlcikgewotICAgICAgICByZWdzLnguYXggPSAzMzsKLSAgICAgICAgUE1faW50ODYoMHgzMywgJnJlZ3MsICZyZWdzKTsKLSAgICAgICAgUE1fZnJlZVJlYWxTZWcobW91c2VQdHIpOwotICAgICAgICBfUE1fbW91c2VIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCXJlZ3MueC5heCA9IDMzOworCVBNX2ludDg2KDB4MzMsICZyZWdzLCAmcmVncyk7CisJUE1fZnJlZVJlYWxTZWcobW91c2VQdHIpOworCV9QTV9tb3VzZUhhbmRsZXIgPSBOVUxMOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9nZXRQTXZlY3QoaW50IGludG5vLCBQTUZBUlBUUiAqaXNyKQpAQCAtNjAyLDkgKzYwMiw5IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVUaW1lckhhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX3RpbWVySGFuZGxlcikgewotICAgICAgICByZXN0b3JlSVNSKDB4OCwgX1BNX3ByZXZUaW1lciwgX1BNX3ByZXZSZWFsVGltZXIpOwotICAgICAgICBfUE1fdGltZXJIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCXJlc3RvcmVJU1IoMHg4LCBfUE1fcHJldlRpbWVyLCBfUE1fcHJldlJlYWxUaW1lcik7CisJX1BNX3RpbWVySGFuZGxlciA9IE5VTEw7CisJfQogfQogCiBpYm9vbCBQTUFQSSBQTV9zZXRSZWFsVGltZUNsb2NrSGFuZGxlcihQTV9pbnRIYW5kbGVyIHRoLGludCBmcmVxdWVuY3kpCkBAIC02MzAsMTUgKzYzMCwxNSBAQAogdm9pZCBQTUFQSSBQTV9yZXN0b3JlUmVhbFRpbWVDbG9ja0hhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX3J0Y0hhbmRsZXIpIHsKLSAgICAgICAgLyogUmVzdG9yZSBDTU9TIHJlZ2lzdGVycyBhbmQgbWFzayBSVEMgY2xvY2sgKi8KLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBBLF9QTV9vbGRDTU9TUmVnQSk7Ci0gICAgICAgIF9QTV93cml0ZUNNT1MoMHgwQixfUE1fb2xkQ01PU1JlZ0IpOwotICAgICAgICBQTV9vdXRwYigweEExLChQTV9pbnBiKDB4QTEpICYgMHhGRSkgfCAoX1BNX29sZFJUQ1BJQzIgJiB+MHhGRSkpOworCS8qIFJlc3RvcmUgQ01PUyByZWdpc3RlcnMgYW5kIG1hc2sgUlRDIGNsb2NrICovCisJX1BNX3dyaXRlQ01PUygweDBBLF9QTV9vbGRDTU9TUmVnQSk7CisJX1BNX3dyaXRlQ01PUygweDBCLF9QTV9vbGRDTU9TUmVnQik7CisJUE1fb3V0cGIoMHhBMSwoUE1faW5wYigweEExKSAmIDB4RkUpIHwgKF9QTV9vbGRSVENQSUMyICYgfjB4RkUpKTsKIAotICAgICAgICAvKiBSZXN0b3JlIHRoZSBpbnRlcnJ1cHQgdmVjdG9yICovCi0gICAgICAgIHJlc3RvcmVJU1IoMHg3MCwgX1BNX3ByZXZSVEMsIF9QTV9wcmV2UmVhbFJUQyk7Ci0gICAgICAgIF9QTV9ydGNIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCS8qIFJlc3RvcmUgdGhlIGludGVycnVwdCB2ZWN0b3IgKi8KKwlyZXN0b3JlSVNSKDB4NzAsIF9QTV9wcmV2UlRDLCBfUE1fcHJldlJlYWxSVEMpOworCV9QTV9ydGNIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIHZvaWQgUE1BUEkgUE1fc2V0S2V5SGFuZGxlcihQTV9pbnRIYW5kbGVyIGtoKQpAQCAtNjUxLDkgKzY1MSw5IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVLZXlIYW5kbGVyKHZvaWQpCiB7CiAgICAgaWYgKF9QTV9rZXlIYW5kbGVyKSB7Ci0gICAgICAgIHJlc3RvcmVJU1IoMHg5LCBfUE1fcHJldktleSwgX1BNX3ByZXZSZWFsS2V5KTsKLSAgICAgICAgX1BNX2tleUhhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJcmVzdG9yZUlTUigweDksIF9QTV9wcmV2S2V5LCBfUE1fcHJldlJlYWxLZXkpOworCV9QTV9rZXlIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIHZvaWQgUE1BUEkgUE1fc2V0S2V5MTVIYW5kbGVyKFBNX2tleTE1SGFuZGxlciBraCkKQEAgLTY2Niw5ICs2NjYsOSBAQAogdm9pZCBQTUFQSSBQTV9yZXN0b3JlS2V5MTVIYW5kbGVyKHZvaWQpCiB7CiAgICAgaWYgKF9QTV9rZXkxNUhhbmRsZXIpIHsKLSAgICAgICAgcmVzdG9yZUlTUigweDE1LCBfUE1fcHJldktleTE1LCBfUE1fcHJldlJlYWxLZXkxNSk7Ci0gICAgICAgIF9QTV9rZXkxNUhhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJcmVzdG9yZUlTUigweDE1LCBfUE1fcHJldktleTE1LCBfUE1fcHJldlJlYWxLZXkxNSk7CisJX1BNX2tleTE1SGFuZGxlciA9IE5VTEw7CisJfQogfQogCiB2b2lkIFBNQVBJIFBNX2luc3RhbGxBbHRCcmVha0hhbmRsZXIoUE1fYnJlYWtIYW5kbGVyIGJoKQpAQCAtNjkyLDExICs2OTIsMTEgQEAKIHZvaWQgUE1BUEkgUE1fcmVzdG9yZUJyZWFrSGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fcHJldkJyZWFrLnNlbCkgewotICAgICAgICByZXN0b3JlSVNSKDB4MUIsIF9QTV9wcmV2QnJlYWssIHByZXZSZWFsQnJlYWspOwotICAgICAgICByZXN0b3JlSVNSKDB4MjMsIF9QTV9wcmV2Q3RybEMsIHByZXZSZWFsQ3RybEMpOwotICAgICAgICBfUE1fcHJldkJyZWFrLnNlbCA9IDA7Ci0gICAgICAgIF9QTV9icmVha0hhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJcmVzdG9yZUlTUigweDFCLCBfUE1fcHJldkJyZWFrLCBwcmV2UmVhbEJyZWFrKTsKKwlyZXN0b3JlSVNSKDB4MjMsIF9QTV9wcmV2Q3RybEMsIHByZXZSZWFsQ3RybEMpOworCV9QTV9wcmV2QnJlYWsuc2VsID0gMDsKKwlfUE1fYnJlYWtIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIHZvaWQgUE1BUEkgUE1faW5zdGFsbEFsdENyaXRpY2FsSGFuZGxlcihQTV9jcml0aWNhbEhhbmRsZXIgY2gpCkBAIC03MTcsMTAgKzcxNywxMCBAQAogdm9pZCBQTUFQSSBQTV9yZXN0b3JlQ3JpdGljYWxIYW5kbGVyKHZvaWQpCiB7CiAgICAgaWYgKF9QTV9wcmV2Q3JpdGljYWwuc2VsKSB7Ci0gICAgICAgIHJlc3RvcmVJU1IoMHgyNCwgX1BNX3ByZXZDcml0aWNhbCwgcHJldlJlYWxDcml0aWNhbCk7Ci0gICAgICAgIF9QTV9wcmV2Q3JpdGljYWwuc2VsID0gMDsKLSAgICAgICAgX1BNX2NyaXRIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCXJlc3RvcmVJU1IoMHgyNCwgX1BNX3ByZXZDcml0aWNhbCwgcHJldlJlYWxDcml0aWNhbCk7CisJX1BNX3ByZXZDcml0aWNhbC5zZWwgPSAwOworCV9QTV9jcml0SGFuZGxlciA9IE5VTEw7CisJfQogfQogCiBpbnQgUE1BUEkgUE1fbG9ja0RhdGFQYWdlcyh2b2lkICpwLHVpbnQgbGVuLFBNX2xvY2tIYW5kbGUgKmxoKQpAQCAtODE2LDkgKzgxNiw5IEBACiAgICAgICogYnVmZmVyIG9uY2Ugc2luY2Ugd2UgY2FudCBkZWFsbG9hdGUgaXQgd2l0aCBYMzIpLgogICAgICAqLwogICAgIGlmICgqcHNlbCA9PSAwKSB7Ci0gICAgICAgIGlmICghUE1fYWxsb2NSZWFsU2VnKHNpemVvZihyZWFsSGFuZGxlcikscHNlbCxwb2ZmLHJzZWcscm9mZikpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorCWlmICghUE1fYWxsb2NSZWFsU2VnKHNpemVvZihyZWFsSGFuZGxlcikscHNlbCxwb2ZmLHJzZWcscm9mZikpCisJICAgIHJldHVybiAwOworCX0KICAgICBQTV9tZW1jcHlmbigqcHNlbCwqcG9mZixyZWFsSGFuZGxlcixzaXplb2YocmVhbEhhbmRsZXIpKTsKIAogICAgIC8qIFNraXAgcGFzdCBnbG9iYWwgdmFyaWFibGVzIGluIHJlYWwgbW9kZSBjb2RlIHNlZ21lbnQgKi8KQEAgLTgzNSw3ICs4MzUsNyBAQAogICAgIGxvY2tQTUhhbmRsZXJzKCk7ICAgICAgICAgICAvKiBFbnN1cmUgb3VyIGhhbmRsZXJzIGFyZSBsb2NrZWQgICAqLwogCiAgICAgaWYgKCFpbnN0YWxsQ2FsbGJhY2soX1BNX21vdXNlSVNSLCAmbW91c2VTZWwsICZtb3VzZU9mZiwgJnJzZWcsICZyb2ZmKSkKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgX1BNX21vdXNlSGFuZGxlciA9IG1oOwogCiAgICAgLyogSW5zdGFsbCB0aGUgcmVhbCBtb2RlIG1vdXNlIGhhbmRsZXIgICovCkBAIC04NTIsMTAgKzg1MiwxMCBAQAogICAgIFJNUkVHUyAgcmVnczsKIAogICAgIGlmIChfUE1fbW91c2VIYW5kbGVyKSB7Ci0gICAgICAgIHJlZ3MueC5heCA9IDMzOwotICAgICAgICBQTV9pbnQ4NigweDMzLCAmcmVncywgJnJlZ3MpOwotICAgICAgICBfUE1fbW91c2VIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCXJlZ3MueC5heCA9IDMzOworCVBNX2ludDg2KDB4MzMsICZyZWdzLCAmcmVncyk7CisJX1BNX21vdXNlSGFuZGxlciA9IE5VTEw7CisJfQogfQogCiB2b2lkIFBNQVBJIFBNX2dldFBNdmVjdChpbnQgaW50bm8sIFBNRkFSUFRSICppc3IpCkBAIC05NDEsOSArOTQxLDkgQEAKIHZvaWQgUE1BUEkgUE1fcmVzdG9yZVRpbWVySGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fdGltZXJIYW5kbGVyKSB7Ci0gICAgICAgIHJlc3RvcmVJU1IoMHg4LCBfUE1fcHJldlRpbWVyLCBfUE1fcHJldlJlYWxUaW1lcik7Ci0gICAgICAgIF9QTV90aW1lckhhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJcmVzdG9yZUlTUigweDgsIF9QTV9wcmV2VGltZXIsIF9QTV9wcmV2UmVhbFRpbWVyKTsKKwlfUE1fdGltZXJIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIGlib29sIFBNQVBJIFBNX3NldFJlYWxUaW1lQ2xvY2tIYW5kbGVyKFBNX2ludEhhbmRsZXIgdGgsaW50IGZyZXF1ZW5jeSkKQEAgLTk2OSwxNSArOTY5LDE1IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVSZWFsVGltZUNsb2NrSGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fcnRjSGFuZGxlcikgewotICAgICAgICAvKiBSZXN0b3JlIENNT1MgcmVnaXN0ZXJzIGFuZCBtYXNrIFJUQyBjbG9jayAqLwotICAgICAgICBfUE1fd3JpdGVDTU9TKDB4MEEsX1BNX29sZENNT1NSZWdBKTsKLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBCLF9QTV9vbGRDTU9TUmVnQik7Ci0gICAgICAgIFBNX291dHBiKDB4QTEsKFBNX2lucGIoMHhBMSkgJiAweEZFKSB8IChfUE1fb2xkUlRDUElDMiAmIH4weEZFKSk7CisJLyogUmVzdG9yZSBDTU9TIHJlZ2lzdGVycyBhbmQgbWFzayBSVEMgY2xvY2sgKi8KKwlfUE1fd3JpdGVDTU9TKDB4MEEsX1BNX29sZENNT1NSZWdBKTsKKwlfUE1fd3JpdGVDTU9TKDB4MEIsX1BNX29sZENNT1NSZWdCKTsKKwlQTV9vdXRwYigweEExLChQTV9pbnBiKDB4QTEpICYgMHhGRSkgfCAoX1BNX29sZFJUQ1BJQzIgJiB+MHhGRSkpOwogCi0gICAgICAgIC8qIFJlc3RvcmUgdGhlIGludGVycnVwdCB2ZWN0b3IgKi8KLSAgICAgICAgcmVzdG9yZUlTUigweDcwLCBfUE1fcHJldlJUQywgX1BNX3ByZXZSZWFsUlRDKTsKLSAgICAgICAgX1BNX3J0Y0hhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJLyogUmVzdG9yZSB0aGUgaW50ZXJydXB0IHZlY3RvciAqLworCXJlc3RvcmVJU1IoMHg3MCwgX1BNX3ByZXZSVEMsIF9QTV9wcmV2UmVhbFJUQyk7CisJX1BNX3J0Y0hhbmRsZXIgPSBOVUxMOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9zZXRLZXlIYW5kbGVyKFBNX2ludEhhbmRsZXIga2gpCkBAIC05OTAsOSArOTkwLDkgQEAKIHZvaWQgUE1BUEkgUE1fcmVzdG9yZUtleUhhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX2tleUhhbmRsZXIpIHsKLSAgICAgICAgcmVzdG9yZUlTUigweDksIF9QTV9wcmV2S2V5LCBfUE1fcHJldlJlYWxLZXkpOwotICAgICAgICBfUE1fa2V5SGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIH0KKwlyZXN0b3JlSVNSKDB4OSwgX1BNX3ByZXZLZXksIF9QTV9wcmV2UmVhbEtleSk7CisJX1BNX2tleUhhbmRsZXIgPSBOVUxMOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9zZXRLZXkxNUhhbmRsZXIoUE1fa2V5MTVIYW5kbGVyIGtoKQpAQCAtMTAwNSw5ICsxMDA1LDkgQEAKIHZvaWQgUE1BUEkgUE1fcmVzdG9yZUtleTE1SGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fa2V5MTVIYW5kbGVyKSB7Ci0gICAgICAgIHJlc3RvcmVJU1IoMHgxNSwgX1BNX3ByZXZLZXkxNSwgX1BNX3ByZXZSZWFsS2V5MTUpOwotICAgICAgICBfUE1fa2V5MTVIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCXJlc3RvcmVJU1IoMHgxNSwgX1BNX3ByZXZLZXkxNSwgX1BNX3ByZXZSZWFsS2V5MTUpOworCV9QTV9rZXkxNUhhbmRsZXIgPSBOVUxMOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9pbnN0YWxsQWx0QnJlYWtIYW5kbGVyKFBNX2JyZWFrSGFuZGxlciBiaCkKQEAgLTEwMzEsMTEgKzEwMzEsMTEgQEAKIHZvaWQgUE1BUEkgUE1fcmVzdG9yZUJyZWFrSGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fcHJldkJyZWFrLnNlbCkgewotICAgICAgICByZXN0b3JlSVNSKDB4MUIsIF9QTV9wcmV2QnJlYWssIHByZXZSZWFsQnJlYWspOwotICAgICAgICByZXN0b3JlSVNSKDB4MjMsIF9QTV9wcmV2Q3RybEMsIHByZXZSZWFsQ3RybEMpOwotICAgICAgICBfUE1fcHJldkJyZWFrLnNlbCA9IDA7Ci0gICAgICAgIF9QTV9icmVha0hhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJcmVzdG9yZUlTUigweDFCLCBfUE1fcHJldkJyZWFrLCBwcmV2UmVhbEJyZWFrKTsKKwlyZXN0b3JlSVNSKDB4MjMsIF9QTV9wcmV2Q3RybEMsIHByZXZSZWFsQ3RybEMpOworCV9QTV9wcmV2QnJlYWsuc2VsID0gMDsKKwlfUE1fYnJlYWtIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIHZvaWQgUE1BUEkgUE1faW5zdGFsbEFsdENyaXRpY2FsSGFuZGxlcihQTV9jcml0aWNhbEhhbmRsZXIgY2gpCkBAIC0xMDU2LDEwICsxMDU2LDEwIEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVDcml0aWNhbEhhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX3ByZXZDcml0aWNhbC5zZWwpIHsKLSAgICAgICAgcmVzdG9yZUlTUigweDI0LCBfUE1fcHJldkNyaXRpY2FsLCBwcmV2UmVhbENyaXRpY2FsKTsKLSAgICAgICAgX1BNX3ByZXZDcml0aWNhbC5zZWwgPSAwOwotICAgICAgICBfUE1fY3JpdEhhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJcmVzdG9yZUlTUigweDI0LCBfUE1fcHJldkNyaXRpY2FsLCBwcmV2UmVhbENyaXRpY2FsKTsKKwlfUE1fcHJldkNyaXRpY2FsLnNlbCA9IDA7CisJX1BNX2NyaXRIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIGludCBQTUFQSSBQTV9sb2NrRGF0YVBhZ2VzKHZvaWQgKnAsdWludCBsZW4sUE1fbG9ja0hhbmRsZSAqbGgpCkBAIC0xMTk5LDEwICsxMTk5LDEwIEBACiAgICAgUE1SRUdTICByZWdzOwogCiAgICAgaWYgKF9QTV9tb3VzZUhhbmRsZXIpIHsKLSAgICAgICAgcmVncy54LmF4ID0gMzM7Ci0gICAgICAgIFBNX2ludDM4NigweDMzLCAmcmVncywgJnJlZ3MpOwotICAgICAgICBfUE1fbW91c2VIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCXJlZ3MueC5heCA9IDMzOworCVBNX2ludDM4NigweDMzLCAmcmVncywgJnJlZ3MpOworCV9QTV9tb3VzZUhhbmRsZXIgPSBOVUxMOworCX0KIH0KIAogI2VuZGlmCkBAIC0xMjg4LDEwICsxMjg4LDEwIEBACiAKICAgICAvKiBDb3B5IHRoZSByZWFsIG1vZGUgaGFuZGxlciB0byByZWFsIG1vZGUgbWVtb3J5ICAgKi8KICAgICBpZiAoKG1vdXNlUHRyID0gUE1fYWxsb2NSZWFsU2VnKHNpemVvZihtb3VzZUhhbmRsZXIpLCZyc2VnLCZyb2ZmKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgbWVtY3B5KG1vdXNlUHRyLG1vdXNlSGFuZGxlcixzaXplb2YobW91c2VIYW5kbGVyKSk7CiAgICAgaWYgKCFfRFBNSV9hbGxvY2F0ZUNhbGxiYWNrKF9QTV9tb3VzZVBNQ0IsIG1vdXNlUmVncywgJm1vdXNlUk1DQikpCi0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBhbGxvY2F0ZSByZWFsIG1vZGUgY2FsbGJhY2shXG4iKTsKKwlQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gYWxsb2NhdGUgcmVhbCBtb2RlIGNhbGxiYWNrIVxuIik7CiAgICAgUE1fc2V0TG9uZyhtb3VzZVB0cixtb3VzZVJNQ0IpOwogCiAgICAgLyogSW5zdGFsbCB0aGUgcmVhbCBtb2RlIG1vdXNlIGhhbmRsZXIgICovCkBAIC0xMzA5LDEyICsxMzA5LDEyIEBACiAgICAgUk1SRUdTICByZWdzOwogCiAgICAgaWYgKF9QTV9tb3VzZUhhbmRsZXIpIHsKLSAgICAgICAgcmVncy54LmF4ID0gMzM7Ci0gICAgICAgIFBNX2ludDg2KDB4MzMsICZyZWdzLCAmcmVncyk7Ci0gICAgICAgIFBNX2ZyZWVSZWFsU2VnKG1vdXNlUHRyKTsKLSAgICAgICAgX0RQTUlfZnJlZUNhbGxiYWNrKG1vdXNlUk1DQik7Ci0gICAgICAgIF9QTV9tb3VzZUhhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJcmVncy54LmF4ID0gMzM7CisJUE1faW50ODYoMHgzMywgJnJlZ3MsICZyZWdzKTsKKwlQTV9mcmVlUmVhbFNlZyhtb3VzZVB0cik7CisJX0RQTUlfZnJlZUNhbGxiYWNrKG1vdXNlUk1DQik7CisJX1BNX21vdXNlSGFuZGxlciA9IE5VTEw7CisJfQogfQogCiAjZW5kaWYKQEAgLTEzNDcsOSArMTM0Nyw5IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVUaW1lckhhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX3RpbWVySGFuZGxlcikgewotICAgICAgICByZXN0b3JlSVNSKDB4OCwgX1BNX3ByZXZUaW1lciwgX1BNX3ByZXZSZWFsVGltZXIpOwotICAgICAgICBfUE1fdGltZXJIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCXJlc3RvcmVJU1IoMHg4LCBfUE1fcHJldlRpbWVyLCBfUE1fcHJldlJlYWxUaW1lcik7CisJX1BNX3RpbWVySGFuZGxlciA9IE5VTEw7CisJfQogfQogCiBpYm9vbCBQTUFQSSBQTV9zZXRSZWFsVGltZUNsb2NrSGFuZGxlcihQTV9pbnRIYW5kbGVyIHRoLGludCBmcmVxdWVuY3kpCkBAIC0xMzc1LDE1ICsxMzc1LDE1IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVSZWFsVGltZUNsb2NrSGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fcnRjSGFuZGxlcikgewotICAgICAgICAvKiBSZXN0b3JlIENNT1MgcmVnaXN0ZXJzIGFuZCBtYXNrIFJUQyBjbG9jayAqLwotICAgICAgICBfUE1fd3JpdGVDTU9TKDB4MEEsX1BNX29sZENNT1NSZWdBKTsKLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBCLF9QTV9vbGRDTU9TUmVnQik7Ci0gICAgICAgIFBNX291dHBiKDB4QTEsKFBNX2lucGIoMHhBMSkgJiAweEZFKSB8IChfUE1fb2xkUlRDUElDMiAmIH4weEZFKSk7CisJLyogUmVzdG9yZSBDTU9TIHJlZ2lzdGVycyBhbmQgbWFzayBSVEMgY2xvY2sgKi8KKwlfUE1fd3JpdGVDTU9TKDB4MEEsX1BNX29sZENNT1NSZWdBKTsKKwlfUE1fd3JpdGVDTU9TKDB4MEIsX1BNX29sZENNT1NSZWdCKTsKKwlQTV9vdXRwYigweEExLChQTV9pbnBiKDB4QTEpICYgMHhGRSkgfCAoX1BNX29sZFJUQ1BJQzIgJiB+MHhGRSkpOwogCi0gICAgICAgIC8qIFJlc3RvcmUgdGhlIGludGVycnVwdCB2ZWN0b3IgKi8KLSAgICAgICAgcmVzdG9yZUlTUigweDcwLCBfUE1fcHJldlJUQywgX1BNX3ByZXZSZWFsUlRDKTsKLSAgICAgICAgX1BNX3J0Y0hhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJLyogUmVzdG9yZSB0aGUgaW50ZXJydXB0IHZlY3RvciAqLworCXJlc3RvcmVJU1IoMHg3MCwgX1BNX3ByZXZSVEMsIF9QTV9wcmV2UmVhbFJUQyk7CisJX1BNX3J0Y0hhbmRsZXIgPSBOVUxMOworCX0KIH0KIAogUE1fSVJRSGFuZGxlIFBNQVBJIFBNX3NldElSUUhhbmRsZXIoCkBAIC0xMzk2LDIwICsxMzk2LDIwIEBACiAKICAgICB0aHVua1NpemUgPSAodWxvbmcpX1BNX2lycUlTUlRlbXBsYXRlRW5kIC0gKHVsb25nKV9QTV9pcnFJU1JUZW1wbGF0ZTsKICAgICBpZiAoKGhhbmRsZSA9IFBNX21hbGxvYyhzaXplb2YoX1BNX0lSUUhhbmRsZSkgKyB0aHVua1NpemUpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKICAgICBoYW5kbGUtPklSUSA9IElSUTsKICAgICBoYW5kbGUtPnByZXZQSUMgPSBQTV9pbnBiKDB4MjEpOwogICAgIGhhbmRsZS0+cHJldlBJQzIgPSBQTV9pbnBiKDB4QTEpOwogICAgIGlmIChJUlEgPCA4KSB7Ci0gICAgICAgIGhhbmRsZS0+SVJRVmVjdCA9IChJUlEgKyA4KTsKLSAgICAgICAgUElDbWFzayA9ICgxIDw8IElSUSk7Ci0gICAgICAgIGNoYWluUHJldmlvdXMgPSAoKGhhbmRsZS0+cHJldlBJQyAmIFBJQ21hc2spID09IDApOwotICAgICAgICB9CisJaGFuZGxlLT5JUlFWZWN0ID0gKElSUSArIDgpOworCVBJQ21hc2sgPSAoMSA8PCBJUlEpOworCWNoYWluUHJldmlvdXMgPSAoKGhhbmRsZS0+cHJldlBJQyAmIFBJQ21hc2spID09IDApOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgaGFuZGxlLT5JUlFWZWN0ID0gKDB4NjAgKyBJUlEgKyA4KTsKLSAgICAgICAgUElDbWFzayA9ICgoMSA8PCBJUlEpIHwgMHg0KTsKLSAgICAgICAgY2hhaW5QcmV2aW91cyA9ICgoaGFuZGxlLT5wcmV2UElDMiAmIChQSUNtYXNrID4+IDgpKSA9PSAwKTsKLSAgICAgICAgfQorCWhhbmRsZS0+SVJRVmVjdCA9ICgweDYwICsgSVJRICsgOCk7CisJUElDbWFzayA9ICgoMSA8PCBJUlEpIHwgMHg0KTsKKwljaGFpblByZXZpb3VzID0gKChoYW5kbGUtPnByZXZQSUMyICYgKFBJQ21hc2sgPj4gOCkpID09IDApOworCX0KIAogICAgIC8qIENvcHkgYW5kIHNldHVwIHRoZSBhc3NlbWJsZXIgdGh1bmsgKi8KICAgICBvZmZzZXRBZGp1c3QgPSAodWxvbmcpaGFuZGxlLT50aHVuayAtICh1bG9uZylfUE1faXJxSVNSVGVtcGxhdGU7CkBAIC0xNDE3LDEzICsxNDE3LDEzIEBACiAgICAgKigodWxvbmcqKSZoYW5kbGUtPnRodW5rWzJdKSA9IG9mZnNldEFkanVzdDsKICAgICAqKCh1bG9uZyopJmhhbmRsZS0+dGh1bmtbMTErMF0pID0gKHVsb25nKWloOwogICAgIGlmIChjaGFpblByZXZpb3VzKSB7Ci0gICAgICAgICooKHVsb25nKikmaGFuZGxlLT50aHVua1sxMSs0XSkgPSBoYW5kbGUtPnByZXZIYW5kbGVyLm9mZjsKLSAgICAgICAgKigodWxvbmcqKSZoYW5kbGUtPnRodW5rWzExKzhdKSA9IGhhbmRsZS0+cHJldkhhbmRsZXIuc2VsOwotICAgICAgICB9CisJKigodWxvbmcqKSZoYW5kbGUtPnRodW5rWzExKzRdKSA9IGhhbmRsZS0+cHJldkhhbmRsZXIub2ZmOworCSooKHVsb25nKikmaGFuZGxlLT50aHVua1sxMSs4XSkgPSBoYW5kbGUtPnByZXZIYW5kbGVyLnNlbDsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgICooKHVsb25nKikmaGFuZGxlLT50aHVua1sxMSs0XSkgPSAwOwotICAgICAgICAqKCh1bG9uZyopJmhhbmRsZS0+dGh1bmtbMTErOF0pID0gMDsKLSAgICAgICAgfQorCSooKHVsb25nKikmaGFuZGxlLT50aHVua1sxMSs0XSkgPSAwOworCSooKHVsb25nKikmaGFuZGxlLT50aHVua1sxMSs4XSkgPSAwOworCX0KICAgICAqKCh1bG9uZyopJmhhbmRsZS0+dGh1bmtbMTErMTJdKSA9IElSUTsKIAogICAgIC8qIFNldCB0aGUgcmVhbCB0aW1lIGNsb2NrIGludGVycnVwdCBoYW5kbGVyICovCkBAIC0xNDQ0LDkgKzE0NDQsOSBAQAogCiAgICAgLyogUmVzdG9yZSBQSUMgbWFzayBmb3IgdGhlIGludGVycnVwdCAqLwogICAgIGlmIChoYW5kbGUtPklSUSA8IDgpCi0gICAgICAgIFBJQ21hc2sgPSAoMSA8PCBoYW5kbGUtPklSUSk7CisJUElDbWFzayA9ICgxIDw8IGhhbmRsZS0+SVJRKTsKICAgICBlbHNlCi0gICAgICAgIFBJQ21hc2sgPSAoKDEgPDwgaGFuZGxlLT5JUlEpIHwgMHg0KTsKKwlQSUNtYXNrID0gKCgxIDw8IGhhbmRsZS0+SVJRKSB8IDB4NCk7CiAgICAgUE1fb3V0cGIoMHhBMSwoUE1faW5wYigweEExKSAmIH4oUElDbWFzayA+PiA4KSkgfCAoaGFuZGxlLT5wcmV2UElDMiAmIChQSUNtYXNrID4+IDgpKSk7CiAgICAgUE1fb3V0cGIoMHgyMSwoUE1faW5wYigweDIxKSAmIH5QSUNtYXNrKSB8IChoYW5kbGUtPnByZXZQSUMgJiBQSUNtYXNrKSk7CiAKQEAgLTE0NjcsOSArMTQ2Nyw5IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVLZXlIYW5kbGVyKHZvaWQpCiB7CiAgICAgaWYgKF9QTV9rZXlIYW5kbGVyKSB7Ci0gICAgICAgIHJlc3RvcmVJU1IoMHg5LCBfUE1fcHJldktleSwgX1BNX3ByZXZSZWFsS2V5KTsKLSAgICAgICAgX1BNX2tleUhhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJcmVzdG9yZUlTUigweDksIF9QTV9wcmV2S2V5LCBfUE1fcHJldlJlYWxLZXkpOworCV9QTV9rZXlIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIHZvaWQgUE1BUEkgUE1fc2V0S2V5MTVIYW5kbGVyKFBNX2tleTE1SGFuZGxlciBraCkKQEAgLTE0ODIsOSArMTQ4Miw5IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVLZXkxNUhhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX2tleTE1SGFuZGxlcikgewotICAgICAgICByZXN0b3JlSVNSKDB4MTUsIF9QTV9wcmV2S2V5MTUsIF9QTV9wcmV2UmVhbEtleTE1KTsKLSAgICAgICAgX1BNX2tleTE1SGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIH0KKwlyZXN0b3JlSVNSKDB4MTUsIF9QTV9wcmV2S2V5MTUsIF9QTV9wcmV2UmVhbEtleTE1KTsKKwlfUE1fa2V5MTVIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIC8qIFJlYWwgbW9kZSBDdHJsLUMgYW5kIEN0cmwtQnJlYWsgaGFuZGxlci4gVGhpcyBoYW5kbGVyIHNpbXBseSBzZXRzIGEKQEAgLTE1NDAsMTQgKzE1NDAsMTQgQEAKIHZvaWQgUE1BUEkgUE1fcmVzdG9yZUJyZWFrSGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fcHJldkJyZWFrLnNlbCkgewotICAgICAgICByZXN0b3JlSVNSKDB4MUIsIF9QTV9wcmV2QnJlYWssIHByZXZSZWFsQnJlYWspOwotICAgICAgICByZXN0b3JlSVNSKDB4MjMsIF9QTV9wcmV2Q3RybEMsIHByZXZSZWFsQ3RybEMpOwotICAgICAgICBfUE1fcHJldkJyZWFrLnNlbCA9IDA7Ci0gICAgICAgIF9QTV9icmVha0hhbmRsZXIgPSBOVUxMOworCXJlc3RvcmVJU1IoMHgxQiwgX1BNX3ByZXZCcmVhaywgcHJldlJlYWxCcmVhayk7CisJcmVzdG9yZUlTUigweDIzLCBfUE1fcHJldkN0cmxDLCBwcmV2UmVhbEN0cmxDKTsKKwlfUE1fcHJldkJyZWFrLnNlbCA9IDA7CisJX1BNX2JyZWFrSGFuZGxlciA9IE5VTEw7CiAjaWZuZGVmIERPUzRHVwotICAgICAgICBQTV9mcmVlUmVhbFNlZyhfUE1fY3RybEJQdHIpOworCVBNX2ZyZWVSZWFsU2VnKF9QTV9jdHJsQlB0cik7CiAjZW5kaWYKLSAgICAgICAgfQorCX0KIH0KIAogLyogUmVhbCBtb2RlIENyaXRpY2FsIEVycm9yIGhhbmRsZXIuIFRoaXMgaGFuZGxlciBzaW1wbHkgc2F2ZXMgdGhlIEFYIGFuZApAQCAtMTU5OSwxMSArMTU5OSwxMSBAQAogdm9pZCBQTUFQSSBQTV9yZXN0b3JlQ3JpdGljYWxIYW5kbGVyKHZvaWQpCiB7CiAgICAgaWYgKF9QTV9wcmV2Q3JpdGljYWwuc2VsKSB7Ci0gICAgICAgIHJlc3RvcmVJU1IoMHgyNCwgX1BNX3ByZXZDcml0aWNhbCwgcHJldlJlYWxDcml0aWNhbCk7Ci0gICAgICAgIFBNX2ZyZWVSZWFsU2VnKF9QTV9jcml0UHRyKTsKLSAgICAgICAgX1BNX3ByZXZDcml0aWNhbC5zZWwgPSAwOwotICAgICAgICBfUE1fY3JpdEhhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJcmVzdG9yZUlTUigweDI0LCBfUE1fcHJldkNyaXRpY2FsLCBwcmV2UmVhbENyaXRpY2FsKTsKKwlQTV9mcmVlUmVhbFNlZyhfUE1fY3JpdFB0cik7CisJX1BNX3ByZXZDcml0aWNhbC5zZWwgPSAwOworCV9QTV9jcml0SGFuZGxlciA9IE5VTEw7CisJfQogfQogCiBpbnQgUE1BUEkgUE1fbG9ja0RhdGFQYWdlcyh2b2lkICpwLHVpbnQgbGVuLFBNX2xvY2tIYW5kbGUgKmxoKQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vZG9zL3ZmbGF0LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvdmZsYXQuYwppbmRleCAyZTc4ZTI1Li5jM2U5YjZjIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvdmZsYXQuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvdmZsYXQuYwpAQCAtNzksNyArNzksNyBAQAogICAgIFBNUkVHUyAgcmVnczsKIAogICAgIGlmIChoYXZlRFBNSSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisJcmV0dXJuIHRydWU7CiAKICAgICAvKiBDaGVjayBpZiB3ZSBhcmUgcnVubmluZyB1bmRlciBEUE1JIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBub3QgYmUKICAgICAgKiBhYmxlIHRvIGluc3RhbGwgb3VyIHBhZ2UgZmF1bHQgaGFuZGxlcnMuIFdlIGNhbiBob3dldmVyIHVzZSB0aGUKQEAgLTg4LDcgKzg4LDcgQEAKICAgICByZWdzLnguYXggPSAweEZGMDA7CiAgICAgUE1faW50Mzg2KDB4MzEsJnJlZ3MsJnJlZ3MpOwogICAgIGlmICghcmVncy54LmNmbGFnICYmIChyZWdzLmUuZWRpICYgOCkpCi0gICAgICAgIHJldHVybiAoaGF2ZURQTUkgPSB0cnVlKTsKKwlyZXR1cm4gKGhhdmVEUE1JID0gdHJ1ZSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMDEsMTMgKzEwMSwxMyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHsKICAgICBpZiAoIVZGX3plcm9QdHIpCi0gICAgICAgIFZGX3plcm9QdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMCwweEZGRkZGRkZGLHRydWUpOworCVZGX3plcm9QdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMCwweEZGRkZGRkZGLHRydWUpOwogICAgIGlmIChDaGVja0RQTUkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKIAogICAgIC8qIFN0YW5kYXJkIERPUzRHVywgUE1PREUvVyBhbmQgQ2F1c2V3YXkgKi8KICAgICBpZiAoSW5pdFBhZ2luZygpID09IC0xKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogICAgIENsb3NlUGFnaW5nKCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNTMsMjEgKzE1MywyMSBAQAogICAgIGludCAgICAgaTsKIAogICAgIGlmIChJbml0UGFnaW5nKCkgPT0gLTEpCi0gICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIENhbm5vdCBkbyBoYXJkd2FyZSBwYWdpbmchICAgICAgICovCisJcmV0dXJuIE5VTEw7ICAgICAgICAgICAgLyogQ2Fubm90IGRvIGhhcmR3YXJlIHBhZ2luZyEgICAgICAgKi8KIAogICAgIC8qIE1hcCA0TUIgb2YgdmlkZW8gbWVtb3J5IGludG8gbGluZWFyIGFkZHJlc3Mgc3BhY2UgKHJlYWQvd3JpdGUpICovCiAgICAgaWYgKGJhbmtTaXplID09IDY0KSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0gICAgICAgICAgICBNYXBQaHlzaWNhbDJMaW5lYXIoYmFzZUFkZHIsVkZMQVRfU1RBUlRfQUREUisoaTw8MTYpLDE2LAotICAgICAgICAgICAgICAgIFBBR0VfV1JJVEUgfCBQQUdFX05PVFBSRVNFTlQpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKwkgICAgTWFwUGh5c2ljYWwyTGluZWFyKGJhc2VBZGRyLFZGTEFUX1NUQVJUX0FERFIrKGk8PDE2KSwxNiwKKwkJUEFHRV9XUklURSB8IFBBR0VfTk9UUFJFU0VOVCk7CisJICAgIH0KKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspIHsKLSAgICAgICAgICAgIE1hcFBoeXNpY2FsMkxpbmVhcihiYXNlQWRkcixWRkxBVF9TVEFSVF9BRERSKyhpPDwxMiksMSwKLSAgICAgICAgICAgICAgICBQQUdFX1dSSVRFIHwgUEFHRV9OT1RQUkVTRU5UKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspIHsKKwkgICAgTWFwUGh5c2ljYWwyTGluZWFyKGJhc2VBZGRyLFZGTEFUX1NUQVJUX0FERFIrKGk8PDEyKSwxLAorCQlQQUdFX1dSSVRFIHwgUEFHRV9OT1RQUkVTRU5UKTsKKwkgICAgfQorCX0KIAogICAgIC8qIEluc3RhbGwgb3VyIHBhZ2UgZmF1bHQgaGFuZGxlciBhbmQgYmFua3Mgc3dpdGNoIGZ1bmN0aW9uICovCiAgICAgSW5zdGFsbEZhdWx0SGFuZGxlcihiYXNlQWRkcixiYW5rU2l6ZSk7CkBAIC0xOTEsMTMgKzE5MSwxMyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHsKICAgICBpZiAoaW5zdGFsbGVkKQotICAgICAgICByZXR1cm4gKHZvaWQqKVZGTEFUX1NUQVJUX0FERFI7CisJcmV0dXJuICh2b2lkKilWRkxBVF9TVEFSVF9BRERSOwogICAgIGlmIChjb2RlTGVuID4gMTAwKQotICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogQmFuayBmdW5jdGlvbiBpcyB0b28gbGFyZ2UhICAgICAgKi8KKwlyZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogQmFuayBmdW5jdGlvbiBpcyB0b28gbGFyZ2UhICAgICAgKi8KICAgICBpZiAoIVZGX3plcm9QdHIpCi0gICAgICAgIFZGX3plcm9QdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMCwweEZGRkZGRkZGLHRydWUpOworCVZGX3plcm9QdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMCwweEZGRkZGRkZGLHRydWUpOwogICAgIGlmIChDaGVja0RQTUkoKSkKLSAgICAgICAgcmV0dXJuIEluaXREUE1JKGJhc2VBZGRyLGJhbmtTaXplLGNvZGVMZW4sYmFua0Z1bmMpOworCXJldHVybiBJbml0RFBNSShiYXNlQWRkcixiYW5rU2l6ZSxjb2RlTGVuLGJhbmtGdW5jKTsKICAgICByZXR1cm4gSW5pdERPUzRHVyhiYXNlQWRkcixiYW5rU2l6ZSxjb2RlTGVuLGJhbmtGdW5jKTsKIH0KIApAQCAtMjEyLDE2ICsyMTIsMTYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB7CiAgICAgaWYgKGluc3RhbGxlZCkgewotICAgICAgICBpZiAoaGF2ZURQTUkpIHsKLSAgICAgICAgICAgIC8qIERQTUkgc3VwcG9ydCAqLwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIFN0YW5kYXJkIERPUzRHVyBhbmQgUE1PREUvVyBzdXBwb3J0ICovCi0gICAgICAgICAgICBSZW1vdmVGYXVsdEhhbmRsZXIoKTsKLSAgICAgICAgICAgIENsb3NlUGFnaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGluc3RhbGxlZCA9IGZhbHNlOwotICAgICAgICB9CisJaWYgKGhhdmVEUE1JKSB7CisJICAgIC8qIERQTUkgc3VwcG9ydCAqLworCSAgICB9CisJZWxzZSB7CisJICAgIC8qIFN0YW5kYXJkIERPUzRHVyBhbmQgUE1PREUvVyBzdXBwb3J0ICovCisJICAgIFJlbW92ZUZhdWx0SGFuZGxlcigpOworCSAgICBDbG9zZVBhZ2luZygpOworCSAgICB9CisJaW5zdGFsbGVkID0gZmFsc2U7CisJfQogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vZG9zL3p0aW1lci5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vZG9zL3p0aW1lci5jCmluZGV4IDk2MGVkMDYuLjUzYWIxNmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2Rvcy96dGltZXIuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9kb3MvenRpbWVyLmMKQEAgLTEwNiw2ICsxMDYsNiBAQAogdWxvbmcgX19VTFpFbGFwc2VkVGltZSh1bG9uZyBzdGFydCx1bG9uZyBmaW5pc2gpCiB7CiAgICAgaWYgKGZpbmlzaCA8IHN0YXJ0KQotICAgICAgICBmaW5pc2ggKz0gMTU3MzA0MEw7ICAgICAgICAgLyogTnVtYmVyIG9mIHRpY2tzIGluIDI0IGhvdXJzICAgICAgKi8KKwlmaW5pc2ggKz0gMTU3MzA0MEw7ICAgICAgICAgLyogTnVtYmVyIG9mIHRpY2tzIGluIDI0IGhvdXJzICAgICAgKi8KICAgICByZXR1cm4gZmluaXNoIC0gc3RhcnQ7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9ldmVudC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vZXZlbnQuYwppbmRleCBiMjg0YzY4Li5iNmY0NTg2IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9ldmVudC5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2V2ZW50LmMKQEAgLTEwNiw4ICsxMDYsOCBAQAogZnJlZUxpc3QgZm9yIHRoZSBldmVudCB0byBiZSBpbnNlcnRlZC4KIAogTk9URTogICBJbnRlcnJ1cHRzIE1VU1QgYmUgT0ZGIHdoaWxlIHRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZW5zdXJlIHdlIGhhdmUKLSAgICAgICAgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2VzcyB0byBvdXIgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvcgotICAgICAgICBpbnRlcnJ1cHQgZHJpdmVuIHN5c3RlbXMgKGxpa2UgdW5kZXIgRE9TKS4KKwltdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzIHRvIG91ciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgZm9yCisJaW50ZXJydXB0IGRyaXZlbiBzeXN0ZW1zIChsaWtlIHVuZGVyIERPUykuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgYWRkRXZlbnQoCiAgICAgZXZlbnRfdCAqZXZ0KQpAQCAtMTE2LDM1ICsxMTYsMzUgQEAKIAogICAgIC8qIENoZWNrIGZvciBtb3VzZSBkb3VibGUgY2xpY2sgZXZlbnRzICovCiAgICAgaWYgKGV2dC0+d2hhdCAmIEVWVF9NT1VTRUVWVCkgewotICAgICAgICBFVlQuYXV0b01vdXNlX3ggPSBldnQtPndoZXJlX3g7Ci0gICAgICAgIEVWVC5hdXRvTW91c2VfeSA9IGV2dC0+d2hlcmVfeTsKLSAgICAgICAgaWYgKChldnQtPndoYXQgJiBFVlRfTU9VU0VET1dOKSAmJiAhKGV2dC0+bWVzc2FnZSAmIEVWVF9EQkxDTElDSykpIHsKLSAgICAgICAgICAgIC8qIERldGVybWluZSBpZiB0aGUgbGFzdCBtb3VzZSBldmVudCB3YXMgYSBkb3VibGUgY2xpY2sgZXZlbnQgKi8KLSAgICAgICAgICAgIHVpbnQgZGlmZl94ID0gQUJTKGV2dC0+d2hlcmVfeCAtIEVWVC5kb3duTW91c2Uud2hlcmVfeCk7Ci0gICAgICAgICAgICB1aW50IGRpZmZfeSA9IEFCUyhldnQtPndoZXJlX3kgLSBFVlQuZG93bk1vdXNlLndoZXJlX3kpOwotICAgICAgICAgICAgaWYgKChldnQtPm1lc3NhZ2UgPT0gRVZULmRvd25Nb3VzZS5tZXNzYWdlKQotICAgICAgICAgICAgICAgICYmICgoZXZ0LT53aGVuIC0gRVZULmRvd25Nb3VzZS53aGVuKSA8PSBFVlQuZG91YmxlQ2xpY2spCi0gICAgICAgICAgICAgICAgJiYgKGRpZmZfeCA8PSBFVlQuZG91YmxlQ2xpY2tUaHJlc2gpCi0gICAgICAgICAgICAgICAgJiYgKGRpZmZfeSA8PSBFVlQuZG91YmxlQ2xpY2tUaHJlc2gpKSB7Ci0gICAgICAgICAgICAgICAgZXZ0LT5tZXNzYWdlIHw9IEVWVF9EQkxDTElDSzsKLSAgICAgICAgICAgICAgICBFVlQuZG93bk1vdXNlID0gKmV2dDsKLSAgICAgICAgICAgICAgICBFVlQuZG93bk1vdXNlLndoZW4gPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBFVlQuZG93bk1vdXNlID0gKmV2dDsKLSAgICAgICAgICAgIEVWVC5hdXRvVGlja3MgPSBfRVZUX2dldFRpY2tzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGV2dC0+d2hhdCAmIEVWVF9NT1VTRVVQKSB7Ci0gICAgICAgICAgICBFVlQuZG93bk1vdXNlLndoYXQgPSBFVlRfTlVMTEVWVDsKLSAgICAgICAgICAgIEVWVC5maXJzdEF1dG8gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJRVZULmF1dG9Nb3VzZV94ID0gZXZ0LT53aGVyZV94OworCUVWVC5hdXRvTW91c2VfeSA9IGV2dC0+d2hlcmVfeTsKKwlpZiAoKGV2dC0+d2hhdCAmIEVWVF9NT1VTRURPV04pICYmICEoZXZ0LT5tZXNzYWdlICYgRVZUX0RCTENMSUNLKSkgeworCSAgICAvKiBEZXRlcm1pbmUgaWYgdGhlIGxhc3QgbW91c2UgZXZlbnQgd2FzIGEgZG91YmxlIGNsaWNrIGV2ZW50ICovCisJICAgIHVpbnQgZGlmZl94ID0gQUJTKGV2dC0+d2hlcmVfeCAtIEVWVC5kb3duTW91c2Uud2hlcmVfeCk7CisJICAgIHVpbnQgZGlmZl95ID0gQUJTKGV2dC0+d2hlcmVfeSAtIEVWVC5kb3duTW91c2Uud2hlcmVfeSk7CisJICAgIGlmICgoZXZ0LT5tZXNzYWdlID09IEVWVC5kb3duTW91c2UubWVzc2FnZSkKKwkJJiYgKChldnQtPndoZW4gLSBFVlQuZG93bk1vdXNlLndoZW4pIDw9IEVWVC5kb3VibGVDbGljaykKKwkJJiYgKGRpZmZfeCA8PSBFVlQuZG91YmxlQ2xpY2tUaHJlc2gpCisJCSYmIChkaWZmX3kgPD0gRVZULmRvdWJsZUNsaWNrVGhyZXNoKSkgeworCQlldnQtPm1lc3NhZ2UgfD0gRVZUX0RCTENMSUNLOworCQlFVlQuZG93bk1vdXNlID0gKmV2dDsKKwkJRVZULmRvd25Nb3VzZS53aGVuID0gMDsKKwkJfQorCSAgICBlbHNlCisJCUVWVC5kb3duTW91c2UgPSAqZXZ0OworCSAgICBFVlQuYXV0b1RpY2tzID0gX0VWVF9nZXRUaWNrcygpOworCSAgICB9CisJZWxzZSBpZiAoZXZ0LT53aGF0ICYgRVZUX01PVVNFVVApIHsKKwkgICAgRVZULmRvd25Nb3VzZS53aGF0ID0gRVZUX05VTExFVlQ7CisJICAgIEVWVC5maXJzdEF1dG8gPSB0cnVlOworCSAgICB9CisJfQogCiAgICAgLyogQ2FsbCB1c2VyIHN1cHBsaWVkIGNhbGxiYWNrIHRvIG1vZGlmeSB0aGUgZXZlbnQgaWYgZGVzaXJlZCAqLwogICAgIGlmIChFVlQudXNlckV2ZW50Q2FsbGJhY2spIHsKLSAgICAgICAgaWYgKCFFVlQudXNlckV2ZW50Q2FsbGJhY2soZXZ0KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCWlmICghRVZULnVzZXJFdmVudENhbGxiYWNrKGV2dCkpCisJICAgIHJldHVybjsKKwl9CiAKICAgICAvKiBHZXQgc3BvdCB0byBwbGFjZSB0aGUgZXZlbnQgZnJvbSB0aGUgZnJlZSBsaXN0ICovCiAgICAgZXZ0SUQgPSBFVlQuZnJlZUhlYWQ7CkBAIC0xNTQsOSArMTU0LDkgQEAKICAgICBldnQtPm5leHQgPSAtMTsKICAgICBldnQtPnByZXYgPSBFVlQudGFpbDsKICAgICBpZiAoRVZULnRhaWwgIT0gLTEpCi0gICAgICAgIEVWVC5ldnRxW0VWVC50YWlsXS5uZXh0ID0gZXZ0SUQ7CisJRVZULmV2dHFbRVZULnRhaWxdLm5leHQgPSBldnRJRDsKICAgICBlbHNlCi0gICAgICAgIEVWVC5oZWFkID0gZXZ0SUQ7CisJRVZULmhlYWQgPSBldnRJRDsKICAgICBFVlQudGFpbCA9IGV2dElEOwogICAgIEVWVC5ldnRxW2V2dElEXSA9ICpldnQ7CiAgICAgRVZULmNvdW50Kys7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAogICAgIC8qIEJ1aWxkIGZyZWUgbGlzdCwgYW5kIGluaXRpYWxpemUgZ2xvYmFsIGRhdGEgc3RydWN0dXJlcyAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBFVkVOVFFTSVpFOyBpKyspCi0gICAgICAgIEVWVC5ldnRxW2ldLm5leHQgPSBpKzE7CisJRVZULmV2dHFbaV0ubmV4dCA9IGkrMTsKICAgICBFVlQuZXZ0cVtFVkVOVFFTSVpFLTFdLm5leHQgPSAtMTsgICAgICAgLyogVGVybWluYXRlIGxpc3QgICAgICAgICAgICovCiAgICAgRVZULmNvdW50ID0gRVZULmZyZWVIZWFkID0gMDsKICAgICBFVlQuaGVhZCA9IEVWVC50YWlsID0gLTE7CkBAIC0yMTcsMjEgKzIxNywyMSBAQAogCiAgICAgLyogTWFrZSBzdXJlIHRoZSBqb3lzdGljayBpcyBjYWxpYnJhdGVkIHByb3Blcmx5ICovCiAgICAgaWYgKEVWVC5qb3lDZW50ZXJbYXhpc10gLSBFVlQuam95TWluW2F4aXNdIDwgNSkKLSAgICAgICAgcmV0dXJuIHJhdzsKKwlyZXR1cm4gcmF3OwogICAgIGlmIChFVlQuam95TWF4W2F4aXNdIC0gRVZULmpveUNlbnRlcltheGlzXSA8IDUpCi0gICAgICAgIHJldHVybiByYXc7CisJcmV0dXJuIHJhdzsKIAogICAgIC8qIE5vdyBzY2FsZSB0aGUgY29vcmRpbmF0ZXMgdG8gLTEyOCB0byAxMjcgKi8KICAgICByYXcgLT0gRVZULmpveUNlbnRlcltheGlzXTsKICAgICBpZiAocmF3IDwgMCkKLSAgICAgICAgcmFuZ2UgPSBFVlQuam95Q2VudGVyW2F4aXNdLUVWVC5qb3lNaW5bYXhpc107CisJcmFuZ2UgPSBFVlQuam95Q2VudGVyW2F4aXNdLUVWVC5qb3lNaW5bYXhpc107CiAgICAgZWxzZQotICAgICAgICByYW5nZSA9IEVWVC5qb3lNYXhbYXhpc10tRVZULmpveUNlbnRlcltheGlzXTsKKwlyYW5nZSA9IEVWVC5qb3lNYXhbYXhpc10tRVZULmpveUNlbnRlcltheGlzXTsKICAgICBzY2FsZWQgPSAocmF3ICogMTI4KSAvIHJhbmdlOwogICAgIGlmIChzY2FsZWQgPCAtMTI4KQotICAgICAgICBzY2FsZWQgPSAtMTI4OworCXNjYWxlZCA9IC0xMjg7CiAgICAgaWYgKHNjYWxlZCA+IDEyNykKLSAgICAgICAgc2NhbGVkID0gMTI3OworCXNjYWxlZCA9IDEyNzsKICAgICByZXR1cm4gc2NhbGVkOwogfQogI2VuZGlmCkBAIC0zMDgsOSArMzA4LDkgQEAKICNlbmRpZgogICAgIG1hc2sgPSBfRVZUX3JlYWRKb3lBeGlzKEVWVF9KT1lfQVhJU19BTEwsRVZULmpveUNlbnRlcik7CiAgICAgaWYgKG1hc2spIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IEpPWV9OVU1fQVhFUzsgaSsrKQotICAgICAgICAgICAgRVZULmpveU1heFtpXSA9IEVWVC5qb3lDZW50ZXJbaV0qMjsKLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCBKT1lfTlVNX0FYRVM7IGkrKykKKwkgICAgRVZULmpveU1heFtpXSA9IEVWVC5qb3lDZW50ZXJbaV0qMjsKKwl9CiAgICAgcmV0dXJuIG1hc2s7CiB9CiAKQEAgLTMyOSw5ICszMjksOSBAQAogcXVldWUgZm9yIGxhdGVyIHJldHJpZXZhbC4KIAogTm90ZTogICBNb3N0IGFuYWxvZ3VlIGpveXN0aWNrcyB3aWxsIHByb3ZpZGUgcmVhZGluZ3MgdGhhdCBjaGFuZ2UgZXZlbgotICAgICAgICB0aG91Z2ggdGhlIGpveXN0aWNrIGhhcyBub3QgbW92ZWQuIEhlbmNlIGlmIHlvdSBjYWxsIHRoaXMgcm91dGluZQotICAgICAgICB5b3Ugd2lsbCBsaWtlbHkgZ2V0IGFuIEVWVF9KT1lNT1ZFIGV2ZW50IGV2ZXJ5IHRpbWUgdGhyb3VnaCB5b3VyCi0gICAgICAgIGV2ZW50IGxvb3AuCisJdGhvdWdoIHRoZSBqb3lzdGljayBoYXMgbm90IG1vdmVkLiBIZW5jZSBpZiB5b3UgY2FsbCB0aGlzIHJvdXRpbmUKKwl5b3Ugd2lsbCBsaWtlbHkgZ2V0IGFuIEVWVF9KT1lNT1ZFIGV2ZW50IGV2ZXJ5IHRpbWUgdGhyb3VnaCB5b3VyCisJZXZlbnQgbG9vcC4KIAogU0VFIEFMU086CiBFVlRfZ2V0TmV4dCwgRVZUX3BlZWtOZXh0LCBFVlRfam95U2V0VXBwZXJMZWZ0LCBFVlRfam95U2V0TG93ZXJSaWdodCwKQEAgLTM0Myw2OCArMzQzLDY4IEBACiAgICAgaW50ICAgICBpLGF4aXNbSk9ZX05VTV9BWEVTXSxuZXdCdXRTdGF0ZSxtYXNrLG1vdmVkLHBzOwogCiAgICAgaWYgKEVWVC5qb3lNYXNrKSB7Ci0gICAgICAgIC8qIFJlYWQgam95c3RpY2sgYXhlcyBhbmQgcG9zdCBtb3ZlbWVudCBldmVudHMgaWYgdGhleSBoYXZlCi0gICAgICAgICAqIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBwb2xsZWQuIFVudGlsIHRoZSBldmVudHMgYXJlCi0gICAgICAgICAqIGFjdHVhbGx5IGZsdXNoZWQsIHdlIGtlZXAgbW9kaWZ5aW5nIHRoZSBzYW1lIGpveXN0aWNrIG1vdmVtZW50Ci0gICAgICAgICAqIGV2ZW50LCBzbyB5b3Ugd29uJ3QgZ2V0IG11bHRpcGxlIG1vdmVtZW50IGV2ZW50Ci0gICAgICAgICAqLwotICAgICAgICBtYXNrID0gX0VWVF9yZWFkSm95QXhpcyhFVlQuam95TWFzayxheGlzKTsKLSAgICAgICAgbmV3QnV0U3RhdGUgPSBfRVZUX3JlYWRKb3lCdXR0b25zKCk7Ci0gICAgICAgIG1vdmVkID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBKT1lfTlVNX0FYRVM7IGkrKykgewotICAgICAgICAgICAgaWYgKG1hc2sgJiAoRVZUX0pPWV9BWElTX1gxIDw8IGkpKQotICAgICAgICAgICAgICAgIGF4aXNbaV0gPSBzY2FsZUpveUF4aXMoYXhpc1tpXSxpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBheGlzW2ldID0gRVZULmpveVByZXZbaV07Ci0gICAgICAgICAgICBpZiAoYXhpc1tpXSAhPSBFVlQuam95UHJldltpXSkKLSAgICAgICAgICAgICAgICBtb3ZlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGlmIChtb3ZlZCkgewotICAgICAgICAgICAgbWVtY3B5KEVWVC5qb3lQcmV2LGF4aXMsc2l6ZW9mKEVWVC5qb3lQcmV2KSk7Ci0gICAgICAgICAgICBwcyA9IF9FVlRfZGlzYWJsZUludCgpOwotICAgICAgICAgICAgaWYgKEVWVC5vbGRKb3lNb3ZlICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgLyogTW9kaWZ5IHRoZSBleGlzdGluZyBqb3lzdGljayBtb3ZlbWVudCBldmVudCAqLwotICAgICAgICAgICAgICAgIEVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS5tZXNzYWdlID0gbmV3QnV0U3RhdGU7Ci0gICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZEpveU1vdmVdLndoZXJlX3ggPSBFVlQuam95UHJldlswXTsKLSAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ud2hlcmVfeSA9IEVWVC5qb3lQcmV2WzFdOwotICAgICAgICAgICAgICAgIEVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS5yZWxhdGl2ZV94ID0gRVZULmpveVByZXZbMl07Ci0gICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZEpveU1vdmVdLnJlbGF0aXZlX3kgPSBFVlQuam95UHJldlszXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKSB7Ci0gICAgICAgICAgICAgICAgLyogQWRkIGEgbmV3IGpveXN0aWNrIG1vdmVtZW50IGV2ZW50ICovCi0gICAgICAgICAgICAgICAgRVZULm9sZEpveU1vdmUgPSBFVlQuZnJlZUhlYWQ7Ci0gICAgICAgICAgICAgICAgbWVtc2V0KCZldnQsMCxzaXplb2YoZXZ0KSk7Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfSk9ZTU9WRTsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVC5qb3lCdXRTdGF0ZTsKLSAgICAgICAgICAgICAgICBldnQud2hlcmVfeCA9IEVWVC5qb3lQcmV2WzBdOwotICAgICAgICAgICAgICAgIGV2dC53aGVyZV95ID0gRVZULmpveVByZXZbMV07Ci0gICAgICAgICAgICAgICAgZXZ0LnJlbGF0aXZlX3ggPSBFVlQuam95UHJldlsyXTsKLSAgICAgICAgICAgICAgICBldnQucmVsYXRpdmVfeSA9IEVWVC5qb3lQcmV2WzNdOwotICAgICAgICAgICAgICAgIGFkZEV2ZW50KCZldnQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9FVlRfcmVzdG9yZUludChwcyk7Ci0gICAgICAgICAgICB9CisJLyogUmVhZCBqb3lzdGljayBheGVzIGFuZCBwb3N0IG1vdmVtZW50IGV2ZW50cyBpZiB0aGV5IGhhdmUKKwkgKiBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgcG9sbGVkLiBVbnRpbCB0aGUgZXZlbnRzIGFyZQorCSAqIGFjdHVhbGx5IGZsdXNoZWQsIHdlIGtlZXAgbW9kaWZ5aW5nIHRoZSBzYW1lIGpveXN0aWNrIG1vdmVtZW50CisJICogZXZlbnQsIHNvIHlvdSB3b24ndCBnZXQgbXVsdGlwbGUgbW92ZW1lbnQgZXZlbnQKKwkgKi8KKwltYXNrID0gX0VWVF9yZWFkSm95QXhpcyhFVlQuam95TWFzayxheGlzKTsKKwluZXdCdXRTdGF0ZSA9IF9FVlRfcmVhZEpveUJ1dHRvbnMoKTsKKwltb3ZlZCA9IGZhbHNlOworCWZvciAoaSA9IDA7IGkgPCBKT1lfTlVNX0FYRVM7IGkrKykgeworCSAgICBpZiAobWFzayAmIChFVlRfSk9ZX0FYSVNfWDEgPDwgaSkpCisJCWF4aXNbaV0gPSBzY2FsZUpveUF4aXMoYXhpc1tpXSxpKTsKKwkgICAgZWxzZQorCQlheGlzW2ldID0gRVZULmpveVByZXZbaV07CisJICAgIGlmIChheGlzW2ldICE9IEVWVC5qb3lQcmV2W2ldKQorCQltb3ZlZCA9IHRydWU7CisJICAgIH0KKwlpZiAobW92ZWQpIHsKKwkgICAgbWVtY3B5KEVWVC5qb3lQcmV2LGF4aXMsc2l6ZW9mKEVWVC5qb3lQcmV2KSk7CisJICAgIHBzID0gX0VWVF9kaXNhYmxlSW50KCk7CisJICAgIGlmIChFVlQub2xkSm95TW92ZSAhPSAtMSkgeworCQkvKiBNb2RpZnkgdGhlIGV4aXN0aW5nIGpveXN0aWNrIG1vdmVtZW50IGV2ZW50ICovCisJCUVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS5tZXNzYWdlID0gbmV3QnV0U3RhdGU7CisJCUVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS53aGVyZV94ID0gRVZULmpveVByZXZbMF07CisJCUVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS53aGVyZV95ID0gRVZULmpveVByZXZbMV07CisJCUVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS5yZWxhdGl2ZV94ID0gRVZULmpveVByZXZbMl07CisJCUVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS5yZWxhdGl2ZV95ID0gRVZULmpveVByZXZbM107CisJCX0KKwkgICAgZWxzZSBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkgeworCQkvKiBBZGQgYSBuZXcgam95c3RpY2sgbW92ZW1lbnQgZXZlbnQgKi8KKwkJRVZULm9sZEpveU1vdmUgPSBFVlQuZnJlZUhlYWQ7CisJCW1lbXNldCgmZXZ0LDAsc2l6ZW9mKGV2dCkpOworCQlldnQud2hhdCA9IEVWVF9KT1lNT1ZFOworCQlldnQubWVzc2FnZSA9IEVWVC5qb3lCdXRTdGF0ZTsKKwkJZXZ0LndoZXJlX3ggPSBFVlQuam95UHJldlswXTsKKwkJZXZ0LndoZXJlX3kgPSBFVlQuam95UHJldlsxXTsKKwkJZXZ0LnJlbGF0aXZlX3ggPSBFVlQuam95UHJldlsyXTsKKwkJZXZ0LnJlbGF0aXZlX3kgPSBFVlQuam95UHJldlszXTsKKwkJYWRkRXZlbnQoJmV2dCk7CisJCX0KKwkgICAgX0VWVF9yZXN0b3JlSW50KHBzKTsKKwkgICAgfQogCi0gICAgICAgIC8qIFJlYWQgdGhlIGpveXN0aWNrIGJ1dHRvbnMsIGFuZCBwb3N0IGV2ZW50cyB0byByZWZsZWN0IHRoZSBjaGFuZ2UKLSAgICAgICAgICogaW4gc3RhdGUgZm9yIHRoZSBqb3lzdGljayBidXR0b25zLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKG5ld0J1dFN0YXRlICE9IEVWVC5qb3lCdXRTdGF0ZSkgewotICAgICAgICAgICAgaWYgKEVWVC5jb3VudCA8IEVWRU5UUVNJWkUpIHsKLSAgICAgICAgICAgICAgICAvKiBBZGQgYSBuZXcgam95c3RpY2sgY2xpY2sgZXZlbnQgKi8KLSAgICAgICAgICAgICAgICBwcyA9IF9FVlRfZGlzYWJsZUludCgpOwotICAgICAgICAgICAgICAgIG1lbXNldCgmZXZ0LDAsc2l6ZW9mKGV2dCkpOwotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX0pPWUNMSUNLOwotICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gbmV3QnV0U3RhdGU7Ci0gICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZEpveU1vdmVdLndoZXJlX3ggPSBFVlQuam95UHJldlswXTsKLSAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ud2hlcmVfeSA9IEVWVC5qb3lQcmV2WzFdOwotICAgICAgICAgICAgICAgIEVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS5yZWxhdGl2ZV94ID0gRVZULmpveVByZXZbMl07Ci0gICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZEpveU1vdmVdLnJlbGF0aXZlX3kgPSBFVlQuam95UHJldlszXTsKLSAgICAgICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgICAgICBfRVZUX3Jlc3RvcmVJbnQocHMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEVWVC5qb3lCdXRTdGF0ZSA9IG5ld0J1dFN0YXRlOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJLyogUmVhZCB0aGUgam95c3RpY2sgYnV0dG9ucywgYW5kIHBvc3QgZXZlbnRzIHRvIHJlZmxlY3QgdGhlIGNoYW5nZQorCSAqIGluIHN0YXRlIGZvciB0aGUgam95c3RpY2sgYnV0dG9ucy4KKwkgKi8KKwlpZiAobmV3QnV0U3RhdGUgIT0gRVZULmpveUJ1dFN0YXRlKSB7CisJICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKSB7CisJCS8qIEFkZCBhIG5ldyBqb3lzdGljayBjbGljayBldmVudCAqLworCQlwcyA9IF9FVlRfZGlzYWJsZUludCgpOworCQltZW1zZXQoJmV2dCwwLHNpemVvZihldnQpKTsKKwkJZXZ0LndoYXQgPSBFVlRfSk9ZQ0xJQ0s7CisJCWV2dC5tZXNzYWdlID0gbmV3QnV0U3RhdGU7CisJCUVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS53aGVyZV94ID0gRVZULmpveVByZXZbMF07CisJCUVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS53aGVyZV95ID0gRVZULmpveVByZXZbMV07CisJCUVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS5yZWxhdGl2ZV94ID0gRVZULmpveVByZXZbMl07CisJCUVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS5yZWxhdGl2ZV95ID0gRVZULmpveVByZXZbM107CisJCWFkZEV2ZW50KCZldnQpOworCQlfRVZUX3Jlc3RvcmVJbnQocHMpOworCQl9CisJICAgIEVWVC5qb3lCdXRTdGF0ZSA9IG5ld0J1dFN0YXRlOworCSAgICB9CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTI2LDE5ICs1MjYsMTkgQEAKICAgICB1aW50ICAgIHBzOwogCiAgICAgaWYgKEVWVC5jb3VudCA8IEVWRU5UUVNJWkUpIHsKLSAgICAgICAgLyogU2F2ZSBpbmZvcm1hdGlvbiBpbiBldmVudCByZWNvcmQgKi8KLSAgICAgICAgcHMgPSBfRVZUX2Rpc2FibGVJbnQoKTsKLSAgICAgICAgZXZ0LndoaWNoID0gd2hpY2g7Ci0gICAgICAgIGV2dC53aGVuID0gX0VWVF9nZXRUaWNrcygpOwotICAgICAgICBldnQud2hhdCA9IHdoYXQ7Ci0gICAgICAgIGV2dC5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICAgICAgZXZ0Lm1vZGlmaWVycyA9IG1vZGlmaWVyczsKLSAgICAgICAgYWRkRXZlbnQoJmV2dCk7ICAgICAgICAgICAgIC8qIEFkZCB0byBFVlQudGFpbCBvZiBldmVudCBxdWV1ZSAgICovCi0gICAgICAgIF9FVlRfcmVzdG9yZUludChwcyk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisJLyogU2F2ZSBpbmZvcm1hdGlvbiBpbiBldmVudCByZWNvcmQgKi8KKwlwcyA9IF9FVlRfZGlzYWJsZUludCgpOworCWV2dC53aGljaCA9IHdoaWNoOworCWV2dC53aGVuID0gX0VWVF9nZXRUaWNrcygpOworCWV2dC53aGF0ID0gd2hhdDsKKwlldnQubWVzc2FnZSA9IG1lc3NhZ2U7CisJZXZ0Lm1vZGlmaWVycyA9IG1vZGlmaWVyczsKKwlhZGRFdmVudCgmZXZ0KTsgICAgICAgICAgICAgLyogQWRkIHRvIEVWVC50YWlsIG9mIGV2ZW50IHF1ZXVlICAgKi8KKwlfRVZUX3Jlc3RvcmVJbnQocHMpOworCXJldHVybiB0cnVlOworCX0KICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NjUsOCArNTY1LDggQEAKICAgICBldmVudF90IGV2dDsKIAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRmx1c2ggYWxsIGV2ZW50cyAqLwotICAgICAgICBFVlRfZ2V0TmV4dCgmZXZ0LG1hc2spOwotICAgICAgICB9IHdoaWxlIChldnQud2hhdCAhPSBFVlRfTlVMTEVWVCk7CisJRVZUX2dldE5leHQoJmV2dCxtYXNrKTsKKwl9IHdoaWxlIChldnQud2hhdCAhPSBFVlRfTlVMTEVWVCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01OTYsMTAgKzU5NiwxMCBAQAogICAgIHVsb25nIG1hc2spCiB7CiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXYWl0IGZvciBhbiBldmVudCAgICAqLwotICAgICAgICBpZiAobWFzayAmIChFVlRfSk9ZRVZUKSkKLSAgICAgICAgICAgIEVWVF9wb2xsSm95c3RpY2soKTsKLSAgICAgICAgRVZUX2dldE5leHQoZXZ0LEVWVF9FVkVSWUVWVCk7Ci0gICAgICAgIH0gd2hpbGUgKCEoZXZ0LT53aGF0ICYgbWFzaykpOworCWlmIChtYXNrICYgKEVWVF9KT1lFVlQpKQorCSAgICBFVlRfcG9sbEpveXN0aWNrKCk7CisJRVZUX2dldE5leHQoZXZ0LEVWVF9FVkVSWUVWVCk7CisJfSB3aGlsZSAoIShldnQtPndoYXQgJiBtYXNrKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MzYsMzEgKzYzNiwzMSBAQAogICAgIHVpbnQgICAgcHM7CiAKICAgICBpZiAoRVZULmhlYXJ0QmVhdCkKLSAgICAgICAgRVZULmhlYXJ0QmVhdChFVlQuaGVhcnRCZWF0UGFyYW1zKTsKKwlFVlQuaGVhcnRCZWF0KEVWVC5oZWFydEJlYXRQYXJhbXMpOwogICAgIF9FVlRfcHVtcE1lc3NhZ2VzKCk7ICAgICAgICAgICAgICAgIC8qIFB1bXAgYWxsIG1lc3NhZ2VzIGludG8gcXVldWUgKi8KICAgICBFVlQubW91c2VNb3ZlKEVWVC5teCxFVlQubXkpOyAgICAgICAvKiBNb3ZlIHRoZSBtb3VzZSBjdXJzb3IgICAgICAgICovCiAgICAgZXZ0LT53aGF0ID0gRVZUX05VTExFVlQ7ICAgICAgICAgICAgLyogRGVmYXVsdCB0byBudWxsIGV2ZW50ICAgICAgICAqLwogICAgIGlmIChFVlQuY291bnQpIHsKLSAgICAgICAgLyogSXQgaXMgcG9zc2libGUgdGhhdCBhbiBldmVudCBiZSBwb3N0ZWQgd2hpbGUgd2UgYXJlIHRyeWluZwotICAgICAgICAgKiB0byBhY2Nlc3MgdGhlIGV2ZW50IHF1ZXVlLiBUaGlzIHdvdWxkIGNyZWF0ZSBwcm9ibGVtcyBzaW5jZQotICAgICAgICAgKiB3ZSBtYXkgZW5kIHVwIHdpdGggaW52YWxpZCBkYXRhIGZvciBvdXIgZXZlbnQgcXVldWUgcG9pbnRlcnMuIFRvCi0gICAgICAgICAqIGFsbGV2aWF0ZSB0aGlzLCBhbGwgaW50ZXJydXB0cyBhcmUgc3VzcGVuZGVkIHdoaWxlIHdlIG1hbmlwdWxhdGUKLSAgICAgICAgICogb3VyIHBvaW50ZXJzLgotICAgICAgICAgKi8KLSAgICAgICAgcHMgPSBfRVZUX2Rpc2FibGVJbnQoKTsgICAgICAgICAgICAgLyogZGlzYWJsZSBpbnRlcnJ1cHRzICAgICAgICovCi0gICAgICAgIGZvciAoZXZ0SUQgPSBFVlQuaGVhZDsgZXZ0SUQgIT0gLTE7IGV2dElEID0gRVZULmV2dHFbZXZ0SURdLm5leHQpIHsKLSAgICAgICAgICAgIGlmIChFVlQuZXZ0cVtldnRJRF0ud2hhdCAmIG1hc2spCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZvdW5kIGFuIGV2ZW50ICAgICAgICAgICAqLwotICAgICAgICAgICAgfQotICAgICAgICBpZiAoZXZ0SUQgPT0gLTEpIHsKLSAgICAgICAgICAgIF9FVlRfcmVzdG9yZUludChwcyk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgIC8qIEV2ZW50IHdhcyBub3QgZm91bmQgICAgICAqLwotICAgICAgICAgICAgfQotICAgICAgICAqZXZ0ID0gRVZULmV2dHFbZXZ0SURdOyAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHRoZSBldmVudCAgICAgICAgICovCi0gICAgICAgIF9FVlRfcmVzdG9yZUludChwcyk7Ci0gICAgICAgIGlmIChldnQtPndoYXQgJiBFVlRfS0VZRVZUKQotICAgICAgICAgICAgX0VWVF9tYXNrS2V5Q29kZShldnQpOwotICAgICAgICB9CisJLyogSXQgaXMgcG9zc2libGUgdGhhdCBhbiBldmVudCBiZSBwb3N0ZWQgd2hpbGUgd2UgYXJlIHRyeWluZworCSAqIHRvIGFjY2VzcyB0aGUgZXZlbnQgcXVldWUuIFRoaXMgd291bGQgY3JlYXRlIHByb2JsZW1zIHNpbmNlCisJICogd2UgbWF5IGVuZCB1cCB3aXRoIGludmFsaWQgZGF0YSBmb3Igb3VyIGV2ZW50IHF1ZXVlIHBvaW50ZXJzLiBUbworCSAqIGFsbGV2aWF0ZSB0aGlzLCBhbGwgaW50ZXJydXB0cyBhcmUgc3VzcGVuZGVkIHdoaWxlIHdlIG1hbmlwdWxhdGUKKwkgKiBvdXIgcG9pbnRlcnMuCisJICovCisJcHMgPSBfRVZUX2Rpc2FibGVJbnQoKTsgICAgICAgICAgICAgLyogZGlzYWJsZSBpbnRlcnJ1cHRzICAgICAgICovCisJZm9yIChldnRJRCA9IEVWVC5oZWFkOyBldnRJRCAhPSAtMTsgZXZ0SUQgPSBFVlQuZXZ0cVtldnRJRF0ubmV4dCkgeworCSAgICBpZiAoRVZULmV2dHFbZXZ0SURdLndoYXQgJiBtYXNrKQorCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyogRm91bmQgYW4gZXZlbnQgICAgICAgICAgICovCisJICAgIH0KKwlpZiAoZXZ0SUQgPT0gLTEpIHsKKwkgICAgX0VWVF9yZXN0b3JlSW50KHBzKTsKKwkgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICAvKiBFdmVudCB3YXMgbm90IGZvdW5kICAgICAgKi8KKwkgICAgfQorCSpldnQgPSBFVlQuZXZ0cVtldnRJRF07ICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gdGhlIGV2ZW50ICAgICAgICAgKi8KKwlfRVZUX3Jlc3RvcmVJbnQocHMpOworCWlmIChldnQtPndoYXQgJiBFVlRfS0VZRVZUKQorCSAgICBfRVZUX21hc2tLZXlDb2RlKGV2dCk7CisJfQogICAgIHJldHVybiBldnQtPndoYXQgIT0gRVZUX05VTExFVlQ7CiB9CiAKQEAgLTY5NiwxMCArNjk2LDEwIEBACiBvZiB0aGUgZXZlbnQgd2lsbCBiZSBzZXQgdG8gTlVMTEVWVCwgYW5kIHRoZSByZXR1cm4gdmFsdWUgd2lsbCByZXR1cm4gZmFsc2UuCiAKIE5vdGU6ICAgWW91IHNob3VsZCAvYWx3YXlzLyB1c2UgdGhlIEVWVF9FVkVSWUVWVCBtYXNrIGZvciBleHRyYWN0aW5nIGV2ZW50cwotICAgICAgICBmcm9tIHlvdXIgbWFpbiBldmVudCBsb29wIGhhbmRsZXIuIFVzaW5nIGEgbWFzayBmb3Igb25seSBhIHNwZWNpZmljCi0gICAgICAgIHR5cGUgb2YgZXZlbnQgZm9yIGxvbmcgcGVyaW9kcyBvZiB0aW1lIHdpbGwgY2F1c2UgdGhlIGV2ZW50IHF1ZXVlIHRvCi0gICAgICAgIGZpbGwgdXAgd2l0aCBldmVudHMgb2YgdGhlIHR5cGUgeW91IGFyZSBpZ25vcmluZywgZXZlbnR1YWxseSBjYXVzaW5nCi0gICAgICAgIHRoZSBhcHBsaWNhdGlvbiB0byBoYW5nIHdoZW4gdGhlIGV2ZW50IHF1ZXVlIGJlY29tZXMgZnVsbC4KKwlmcm9tIHlvdXIgbWFpbiBldmVudCBsb29wIGhhbmRsZXIuIFVzaW5nIGEgbWFzayBmb3Igb25seSBhIHNwZWNpZmljCisJdHlwZSBvZiBldmVudCBmb3IgbG9uZyBwZXJpb2RzIG9mIHRpbWUgd2lsbCBjYXVzZSB0aGUgZXZlbnQgcXVldWUgdG8KKwlmaWxsIHVwIHdpdGggZXZlbnRzIG9mIHRoZSB0eXBlIHlvdSBhcmUgaWdub3JpbmcsIGV2ZW50dWFsbHkgY2F1c2luZworCXRoZSBhcHBsaWNhdGlvbiB0byBoYW5nIHdoZW4gdGhlIGV2ZW50IHF1ZXVlIGJlY29tZXMgZnVsbC4KIAogU0VFIEFMU086CiBFVlRfZmx1c2gsIEVWVF9oYWx0LCBFVlRfcGVla05leHQKQEAgLTcxMiw2OCArNzEyLDY4IEBACiAgICAgdWludCAgICBwczsKIAogICAgIGlmIChFVlQuaGVhcnRCZWF0KQotICAgICAgICBFVlQuaGVhcnRCZWF0KEVWVC5oZWFydEJlYXRQYXJhbXMpOworCUVWVC5oZWFydEJlYXQoRVZULmhlYXJ0QmVhdFBhcmFtcyk7CiAgICAgX0VWVF9wdW1wTWVzc2FnZXMoKTsgICAgICAgICAgICAgICAgLyogUHVtcCBhbGwgbWVzc2FnZXMgaW50byBxdWV1ZSAqLwogICAgIEVWVC5tb3VzZU1vdmUoRVZULm14LEVWVC5teSk7ICAgICAgIC8qIE1vdmUgdGhlIG1vdXNlIGN1cnNvciAgICAgICAgKi8KICAgICBldnQtPndoYXQgPSBFVlRfTlVMTEVWVDsgICAgICAgICAgICAvKiBEZWZhdWx0IHRvIG51bGwgZXZlbnQgICAgICAgICovCiAgICAgaWYgKEVWVC5jb3VudCkgewotICAgICAgICAvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IGFuIGV2ZW50IGJlIHBvc3RlZCB3aGlsZSB3ZSBhcmUgdHJ5aW5nCi0gICAgICAgICAqIHRvIGFjY2VzcyB0aGUgZXZlbnQgcXVldWUuIFRoaXMgd291bGQgY3JlYXRlIHByb2JsZW1zIHNpbmNlCi0gICAgICAgICAqIHdlIG1heSBlbmQgdXAgd2l0aCBpbnZhbGlkIGRhdGEgZm9yIG91ciBldmVudCBxdWV1ZSBwb2ludGVycy4gVG8KLSAgICAgICAgICogYWxsZXZpYXRlIHRoaXMsIGFsbCBpbnRlcnJ1cHRzIGFyZSBzdXNwZW5kZWQgd2hpbGUgd2UgbWFuaXB1bGF0ZQotICAgICAgICAgKiBvdXIgcG9pbnRlcnMuCi0gICAgICAgICAqLwotICAgICAgICBwcyA9IF9FVlRfZGlzYWJsZUludCgpOyAgICAgICAgICAgICAvKiBkaXNhYmxlIGludGVycnVwdHMgICAgICAgKi8KLSAgICAgICAgZm9yIChldnRJRCA9IEVWVC5oZWFkOyBldnRJRCAhPSAtMTsgZXZ0SUQgPSBFVlQuZXZ0cVtldnRJRF0ubmV4dCkgewotICAgICAgICAgICAgaWYgKEVWVC5ldnRxW2V2dElEXS53aGF0ICYgbWFzaykKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyogRm91bmQgYW4gZXZlbnQgICAgICAgICAgICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIGlmIChldnRJRCA9PSAtMSkgewotICAgICAgICAgICAgX0VWVF9yZXN0b3JlSW50KHBzKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgLyogRXZlbnQgd2FzIG5vdCBmb3VuZCAgICAgICovCi0gICAgICAgICAgICB9Ci0gICAgICAgIG5leHQgPSBFVlQuZXZ0cVtldnRJRF0ubmV4dDsKLSAgICAgICAgcHJldiA9IEVWVC5ldnRxW2V2dElEXS5wcmV2OwotICAgICAgICBpZiAocHJldiAhPSAtMSkKLSAgICAgICAgICAgIEVWVC5ldnRxW3ByZXZdLm5leHQgPSBuZXh0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBFVlQuaGVhZCA9IG5leHQ7Ci0gICAgICAgIGlmIChuZXh0ICE9IC0xKQotICAgICAgICAgICAgRVZULmV2dHFbbmV4dF0ucHJldiA9IHByZXY7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIEVWVC50YWlsID0gcHJldjsKLSAgICAgICAgKmV2dCA9IEVWVC5ldnRxW2V2dElEXTsgICAgICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgZXZlbnQgICAgICAgICAqLwotICAgICAgICBFVlQuZXZ0cVtldnRJRF0ubmV4dCA9IEVWVC5mcmVlSGVhZDsgICAgICAgIC8qIGFuZCByZXR1cm4gdG8gZnJlZSBsaXN0ICAqLwotICAgICAgICBFVlQuZnJlZUhlYWQgPSBldnRJRDsKLSAgICAgICAgRVZULmNvdW50LS07Ci0gICAgICAgIGlmIChldnQtPndoYXQgPT0gRVZUX01PVVNFTU9WRSkKLSAgICAgICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7Ci0gICAgICAgIGlmIChldnQtPndoYXQgPT0gRVZUX0tFWVJFUEVBVCkKLSAgICAgICAgICAgIEVWVC5vbGRLZXkgPSAtMTsKLSAgICAgICAgaWYgKGV2dC0+d2hhdCA9PSBFVlRfSk9ZTU9WRSkKLSAgICAgICAgICAgIEVWVC5vbGRKb3lNb3ZlID0gLTE7Ci0gICAgICAgIF9FVlRfcmVzdG9yZUludChwcyk7ICAgICAgICAgICAgICAgIC8qIGVuYWJsZSBpbnRlcnJ1cHRzICAgICAgICAqLwotICAgICAgICBpZiAoZXZ0LT53aGF0ICYgRVZUX0tFWUVWVCkKLSAgICAgICAgICAgIF9FVlRfbWFza0tleUNvZGUoZXZ0KTsKLSAgICAgICAgfQorCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgYW4gZXZlbnQgYmUgcG9zdGVkIHdoaWxlIHdlIGFyZSB0cnlpbmcKKwkgKiB0byBhY2Nlc3MgdGhlIGV2ZW50IHF1ZXVlLiBUaGlzIHdvdWxkIGNyZWF0ZSBwcm9ibGVtcyBzaW5jZQorCSAqIHdlIG1heSBlbmQgdXAgd2l0aCBpbnZhbGlkIGRhdGEgZm9yIG91ciBldmVudCBxdWV1ZSBwb2ludGVycy4gVG8KKwkgKiBhbGxldmlhdGUgdGhpcywgYWxsIGludGVycnVwdHMgYXJlIHN1c3BlbmRlZCB3aGlsZSB3ZSBtYW5pcHVsYXRlCisJICogb3VyIHBvaW50ZXJzLgorCSAqLworCXBzID0gX0VWVF9kaXNhYmxlSW50KCk7ICAgICAgICAgICAgIC8qIGRpc2FibGUgaW50ZXJydXB0cyAgICAgICAqLworCWZvciAoZXZ0SUQgPSBFVlQuaGVhZDsgZXZ0SUQgIT0gLTE7IGV2dElEID0gRVZULmV2dHFbZXZ0SURdLm5leHQpIHsKKwkgICAgaWYgKEVWVC5ldnRxW2V2dElEXS53aGF0ICYgbWFzaykKKwkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgIC8qIEZvdW5kIGFuIGV2ZW50ICAgICAgICAgICAqLworCSAgICB9CisJaWYgKGV2dElEID09IC0xKSB7CisJICAgIF9FVlRfcmVzdG9yZUludChwcyk7CisJICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgLyogRXZlbnQgd2FzIG5vdCBmb3VuZCAgICAgICovCisJICAgIH0KKwluZXh0ID0gRVZULmV2dHFbZXZ0SURdLm5leHQ7CisJcHJldiA9IEVWVC5ldnRxW2V2dElEXS5wcmV2OworCWlmIChwcmV2ICE9IC0xKQorCSAgICBFVlQuZXZ0cVtwcmV2XS5uZXh0ID0gbmV4dDsKKwllbHNlCisJICAgIEVWVC5oZWFkID0gbmV4dDsKKwlpZiAobmV4dCAhPSAtMSkKKwkgICAgRVZULmV2dHFbbmV4dF0ucHJldiA9IHByZXY7CisJZWxzZQorCSAgICBFVlQudGFpbCA9IHByZXY7CisJKmV2dCA9IEVWVC5ldnRxW2V2dElEXTsgICAgICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgZXZlbnQgICAgICAgICAqLworCUVWVC5ldnRxW2V2dElEXS5uZXh0ID0gRVZULmZyZWVIZWFkOyAgICAgICAgLyogYW5kIHJldHVybiB0byBmcmVlIGxpc3QgICovCisJRVZULmZyZWVIZWFkID0gZXZ0SUQ7CisJRVZULmNvdW50LS07CisJaWYgKGV2dC0+d2hhdCA9PSBFVlRfTU9VU0VNT1ZFKQorCSAgICBFVlQub2xkTW92ZSA9IC0xOworCWlmIChldnQtPndoYXQgPT0gRVZUX0tFWVJFUEVBVCkKKwkgICAgRVZULm9sZEtleSA9IC0xOworCWlmIChldnQtPndoYXQgPT0gRVZUX0pPWU1PVkUpCisJICAgIEVWVC5vbGRKb3lNb3ZlID0gLTE7CisJX0VWVF9yZXN0b3JlSW50KHBzKTsgICAgICAgICAgICAgICAgLyogZW5hYmxlIGludGVycnVwdHMgICAgICAgICovCisJaWYgKGV2dC0+d2hhdCAmIEVWVF9LRVlFVlQpCisJICAgIF9FVlRfbWFza0tleUNvZGUoZXZ0KTsKKwl9CiAKICAgICAvKiBJZiB0aGVyZSBpcyBubyBldmVudCBwZW5kaW5nLCBjaGVjayBpZiB3ZSBzaG91bGQgZ2VuZXJhdGUgYW4gYXV0bwogICAgICAqIG1vdXNlIGRvd24gZXZlbnQgaWYgdGhlIG1vdXNlIGlzIHN0aWxsIGN1cnJlbnRseSBkb3duLgogICAgICAqLwogICAgIGlmIChldnQtPndoYXQgPT0gRVZUX05VTExFVlQgJiYgRVZULmF1dG9SZXBlYXQgJiYgKG1hc2sgJiBFVlRfTU9VU0VBVVRPKSAmJiAoRVZULmRvd25Nb3VzZS53aGF0ICYgRVZUX01PVVNFRE9XTikpIHsKLSAgICAgICAgdWxvbmcgdGlja3MgPSBfRVZUX2dldFRpY2tzKCk7Ci0gICAgICAgIGlmICgodGlja3MgLSBFVlQuYXV0b1RpY2tzKSA+PSAoRVZULmF1dG9SZXBlYXQgKyAoRVZULmZpcnN0QXV0byA/IEVWVC5hdXRvRGVsYXkgOiAwKSkpIHsKLSAgICAgICAgICAgIGV2dC0+d2hhdCA9IEVWVF9NT1VTRUFVVE87Ci0gICAgICAgICAgICBldnQtPm1lc3NhZ2UgPSBFVlQuZG93bk1vdXNlLm1lc3NhZ2U7Ci0gICAgICAgICAgICBldnQtPm1vZGlmaWVycyA9IEVWVC5kb3duTW91c2UubW9kaWZpZXJzOwotICAgICAgICAgICAgZXZ0LT53aGVyZV94ID0gRVZULmF1dG9Nb3VzZV94OwotICAgICAgICAgICAgZXZ0LT53aGVyZV95ID0gRVZULmF1dG9Nb3VzZV95OwotICAgICAgICAgICAgZXZ0LT5yZWxhdGl2ZV94ID0gMDsKLSAgICAgICAgICAgIGV2dC0+cmVsYXRpdmVfeSA9IDA7Ci0gICAgICAgICAgICBFVlQuYXV0b1RpY2tzID0gZXZ0LT53aGVuID0gdGlja3M7Ci0gICAgICAgICAgICBFVlQuZmlyc3RBdXRvID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwl1bG9uZyB0aWNrcyA9IF9FVlRfZ2V0VGlja3MoKTsKKwlpZiAoKHRpY2tzIC0gRVZULmF1dG9UaWNrcykgPj0gKEVWVC5hdXRvUmVwZWF0ICsgKEVWVC5maXJzdEF1dG8gPyBFVlQuYXV0b0RlbGF5IDogMCkpKSB7CisJICAgIGV2dC0+d2hhdCA9IEVWVF9NT1VTRUFVVE87CisJICAgIGV2dC0+bWVzc2FnZSA9IEVWVC5kb3duTW91c2UubWVzc2FnZTsKKwkgICAgZXZ0LT5tb2RpZmllcnMgPSBFVlQuZG93bk1vdXNlLm1vZGlmaWVyczsKKwkgICAgZXZ0LT53aGVyZV94ID0gRVZULmF1dG9Nb3VzZV94OworCSAgICBldnQtPndoZXJlX3kgPSBFVlQuYXV0b01vdXNlX3k7CisJICAgIGV2dC0+cmVsYXRpdmVfeCA9IDA7CisJICAgIGV2dC0+cmVsYXRpdmVfeSA9IDA7CisJICAgIEVWVC5hdXRvVGlja3MgPSBldnQtPndoZW4gPSB0aWNrczsKKwkgICAgRVZULmZpcnN0QXV0byA9IGZhbHNlOworCSAgICB9CisJfQogICAgIHJldHVybiBldnQtPndoYXQgIT0gRVZUX05VTExFVlQ7CiB9CiAKQEAgLTgwMiwxOCArODAyLDE4IEBACiByZWNpZXZlZC4KIAogTm90ZTogICBZb3VyIGV2ZW50IGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gYSBoYXJkd2FyZQotICAgICAgICBpbnRlcnJ1cHQgYW5kIHdpbGwgYmUgZXhlY3V0aW5nIGluIHRoZSBjb250ZXh0IG9mIHRoZSBoYXJkd2FyZQotICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlciB1bmRlciBNU0RPUyAoaWU6IGtleWJvYXJkIGludGVycnVwdCBvciBtb3VzZQotICAgICAgICBpbnRlcnJ1cHQpLiBGb3IgdGhpcyByZWFzb24gdGhlIGNvZGUgcGFnZXMgZm9yIHRoZSBjYWxsYmFjayB0aGF0Ci0gICAgICAgIHlvdSByZWdpc3RlciBtdXN0IGJlIGxvY2tlZCBpbiBtZW1vcnkgd2l0aCB0aGUgUE1fbG9ja0NvZGVQYWdlcwotICAgICAgICBmdW5jdGlvbi4gWW91IG11c3QgYWxzbyBsb2NrIGRvd24gYW55IGRhdGEgcGFnZXMgdGhhdCB5b3VyIGZ1bmN0aW9uCi0gICAgICAgIG5lZWRzIHRvIHJlZmVyZW5jZSBhcyB3ZWxsLgorCWludGVycnVwdCBhbmQgd2lsbCBiZSBleGVjdXRpbmcgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGhhcmR3YXJlCisJaW50ZXJydXB0IGhhbmRsZXIgdW5kZXIgTVNET1MgKGllOiBrZXlib2FyZCBpbnRlcnJ1cHQgb3IgbW91c2UKKwlpbnRlcnJ1cHQpLiBGb3IgdGhpcyByZWFzb24gdGhlIGNvZGUgcGFnZXMgZm9yIHRoZSBjYWxsYmFjayB0aGF0CisJeW91IHJlZ2lzdGVyIG11c3QgYmUgbG9ja2VkIGluIG1lbW9yeSB3aXRoIHRoZSBQTV9sb2NrQ29kZVBhZ2VzCisJZnVuY3Rpb24uIFlvdSBtdXN0IGFsc28gbG9jayBkb3duIGFueSBkYXRhIHBhZ2VzIHRoYXQgeW91ciBmdW5jdGlvbgorCW5lZWRzIHRvIHJlZmVyZW5jZSBhcyB3ZWxsLgogCiBOb3RlOiAgIFlvdSBjYW4gYWxzbyB1c2UgdGhpcyBmaWx0ZXIgY2FsbGJhY2sgdG8gcHJvY2VzcyBldmVudHMgYXQgdGhlCi0gICAgICAgIHRpbWUgdGhleSBhcmUgYWN0aXZhdGVkIGJ5IHRoZSB1c2VyIChpZTogd2hlbiB0aGUgdXNlciBoaXRzIHRoZQotICAgICAgICBrZXkgb3IgbW92ZXMgdGhlIG1vdXNlKSwgYnV0IG1ha2Ugc3VyZSB5b3VyIGNvZGUgcnVucyBhcyBmYXN0IGFzCi0gICAgICAgIHBvc3NpYmxlIGFzIGl0IHdpbGwgYmUgZXhlY3V0aW5nIGluc2lkZSB0aGUgY29udGV4dCBvZiBhbiBpbnRlcnJ1cHQKLSAgICAgICAgaGFuZGxlciBvbiBzb21lIHN5c3RlbXMuCisJdGltZSB0aGV5IGFyZSBhY3RpdmF0ZWQgYnkgdGhlIHVzZXIgKGllOiB3aGVuIHRoZSB1c2VyIGhpdHMgdGhlCisJa2V5IG9yIG1vdmVzIHRoZSBtb3VzZSksIGJ1dCBtYWtlIHN1cmUgeW91ciBjb2RlIHJ1bnMgYXMgZmFzdCBhcworCXBvc3NpYmxlIGFzIGl0IHdpbGwgYmUgZXhlY3V0aW5nIGluc2lkZSB0aGUgY29udGV4dCBvZiBhbiBpbnRlcnJ1cHQKKwloYW5kbGVyIG9uIHNvbWUgc3lzdGVtcy4KIAogU0VFIEFMU086CiBFVlRfZ2V0TmV4dCwgRVZUX3BlZWtOZXh0CkBAIC0xMDY4LDEwICsxMDY4LDEwIEBACiAgICAgY29kZSA9IEVWVF9zY2FuQ29kZShFVlQubXlFdmVudC5tZXNzYWdlKTsKIAogTk9URTogICBTY2FuIGNvZGVzIGluIHRoZSBldmVudCBsaWJyYXJ5IGFyZSBub3QgcmVhbGx5IGhhcmR3YXJlIHNjYW4gY29kZXMsCi0gICAgICAgIGJ1dCByYXRoZXIgdmlydHVhbCBzY2FuIGNvZGVzIGFzIGdlbmVyYXRlZCBieSBhIGxvdyBsZXZlbCBrZXlib2FyZAotICAgICAgICBpbnRlcmZhY2UgZHJpdmVyLiBBbGwgdmlydHVhbCBzY2FuIGNvZGUgdmFsdWVzIGFyZSBkZWZpbmVkIGJ5IHRoZQotICAgICAgICBFVlRfc2NhbkNvZGVzVHlwZSBlbnVtZXJhdGlvbiwgYW5kIHdpbGwgYmUgaWRlbnRpY2FsIGFjcm9zcyBhbGwKLSAgICAgICAgc3VwcG9ydHMgT1MnZXMgYW5kIHBsYXRmb3Jtcy4KKwlidXQgcmF0aGVyIHZpcnR1YWwgc2NhbiBjb2RlcyBhcyBnZW5lcmF0ZWQgYnkgYSBsb3cgbGV2ZWwga2V5Ym9hcmQKKwlpbnRlcmZhY2UgZHJpdmVyLiBBbGwgdmlydHVhbCBzY2FuIGNvZGUgdmFsdWVzIGFyZSBkZWZpbmVkIGJ5IHRoZQorCUVWVF9zY2FuQ29kZXNUeXBlIGVudW1lcmF0aW9uLCBhbmQgd2lsbCBiZSBpZGVudGljYWwgYWNyb3NzIGFsbAorCXN1cHBvcnRzIE9TJ2VzIGFuZCBwbGF0Zm9ybXMuCiAKIFNFRSBBTFNPOgogRVZUX2FzY2lpQ29kZSwgRVZUX3JlcGVhdENvdW50CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9saW51eC9ldmVudC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbGludXgvZXZlbnQuYwppbmRleCBjMjY2OGNlLi5jZTM4NzMyIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9saW51eC9ldmVudC5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2xpbnV4L2V2ZW50LmMKQEAgLTg5LDcgKzg5LDcgQEAKICAgICB7IkJ1c01vdXNlIiwgICAgICAgIFNURF9GTEcsICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgezB4ZjgsIDB4ODAsIDB4MDAsIDB4MDB9LCAzLCAzfSwKICAgICB7Ik1vdXNlTWFuIiwgICAgICAgIENTNyB8IFNURF9GTEcsICAgICAgICAgICAgICAgICAgICAgIF9FVlRfbW91c2VfaW5pdCwgICAgezB4NDAsIDB4NDAsIDB4NDAsIDB4MDB9LCAzLCAxfSwKICAgICB7IkludGVsbGlNb3VzZSIsICAgIENTNyB8IFNURF9GTEcsICAgICAgICAgICAgICAgICAgICAgIF9FVlRfcG5wbW91c2VfaW5pdCwgezB4YzAsIDB4NDAsIDB4YzAsIDB4MDB9LCA0LCAxfSwKLSAgICB7IklNUFMyIiwgICAgICAgICAgIENTNyB8IFNURF9GTEcsICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgezB4YzAsIDB4NDAsIDB4YzAsIDB4MDB9LCA0LCAxfSwgLy8gPworICAgIHsiSU1QUzIiLCAgICAgICAgICAgQ1M3IHwgU1REX0ZMRywgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICB7MHhjMCwgMHg0MCwgMHhjMCwgMHgwMH0sIDQsIDF9LCAvKiA/ICovCiAgICAgfTsKIAogI2RlZmluZSBOQl9NSUNFIChzaXplb2YobW91c2VfaW5mb3MpL3NpemVvZihtb3VzZV9pbmZvKSkKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgIGludCBtYXA7CiAgICAgfSBrZXltYXA7CiAKLS8vIFRPRE86IEZpeCB0aGlzIGFuZCBzZXQgaXQgdXAgc28gd2UgY2FuIGRvIGEgYmluYXJ5IHNlYXJjaCEKKy8qIFRPRE86IEZpeCB0aGlzIGFuZCBzZXQgaXQgdXAgc28gd2UgY2FuIGRvIGEgYmluYXJ5IHNlYXJjaCEgKi8KIAoga2V5bWFwIGtleW1hcHNbXSA9IHsKICAgICB7OTYsIEtCX3BhZEVudGVyfSwKQEAgLTI0OSwxMzEgKzI0OSwxMzEgQEAKICAgICAvKiBSZWFkIHRoZSBmaXJzdCBieXRlIHRvIGNoZWNrIGZvciB0aGUgcHJvdG9jb2wgKi8KICAgICBkcnYgPSAmbW91c2VfaW5mb3NbbW91c2VfZHJpdmVyXTsKICAgICBpZiAocmVhZChfRVZUX21vdXNlX2ZkLCBkYXRhLCBkcnYtPnJlYWQpICE9IGRydi0+cmVhZCkgewotICAgICAgICBwZXJyb3IoInJlYWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisJcGVycm9yKCJyZWFkIik7CisJcmV0dXJuIGZhbHNlOworCX0KICAgICBpZiAoKGRhdGFbMF0gJiBkcnYtPnByb3RvWzBdKSAhPSBkcnYtPnByb3RvWzFdKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogCiAgICAgLyogTG9hZCBhIHdob2xlIHByb3RvY29sIHBhY2tldCAqLwogICAgIGNudCArPSBkcnYtPnJlYWQ7CiAgICAgd2hpbGUgKGNudCA8IGRydi0+cGFja2V0X2xlbikgewotICAgICAgICByZXQgPSByZWFkKF9FVlRfbW91c2VfZmQsIGRhdGErY250LCBkcnYtPnJlYWQpOwotICAgICAgICBpZiAocmV0ID09IGRydi0+cmVhZCkKLSAgICAgICAgICAgIGNudCArPSByZXQ7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcGVycm9yKCJyZWFkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlyZXQgPSByZWFkKF9FVlRfbW91c2VfZmQsIGRhdGErY250LCBkcnYtPnJlYWQpOworCWlmIChyZXQgPT0gZHJ2LT5yZWFkKQorCSAgICBjbnQgKz0gcmV0OworCWVsc2UgeworCSAgICBwZXJyb3IoInJlYWQiKTsKKwkgICAgcmV0dXJuIGZhbHNlOworCSAgICB9CisJfQogICAgIGlmICgoZGF0YVsxXSAmIGRydi0+cHJvdG9bMl0pICE9IGRydi0+cHJvdG9bM10pCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAKICAgICAvKiBOb3cgZGVjb2RlIHRoZSBwcm90b2NvbCBwYWNrZXQgKi8KICAgICBzd2l0Y2ggKG1vdXNlX2RyaXZlcikgewotICAgICAgICBjYXNlIEVWVF9taWNyb3NvZnQ6Ci0gICAgICAgICAgICBpZiAoZGF0YVswXSA9PSAweDQwICYmICEocHJldnxkYXRhWzFdfGRhdGFbMl0pKQotICAgICAgICAgICAgICAgICpidXR0b25zID0gMjsgICAvKiBUaGlyZCBidXR0b24gb24gTVMgY29tcGF0aWJsZSBtb3VzZSAqLwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICpidXR0b25zPSAoKGRhdGFbMF0gJiAweDIwKSA+PiAzKSB8ICgoZGF0YVswXSAmIDB4MTApID4+IDQpOwotICAgICAgICAgICAgcHJldiA9ICpidXR0b25zOwotICAgICAgICAgICAgKmR4ID0gKGNoYXIpKCgoZGF0YVswXSAmIDB4MDMpIDw8IDYpIHwgKGRhdGFbMV0gJiAweDNGKSk7Ci0gICAgICAgICAgICAqZHkgPSAoY2hhcikoKChkYXRhWzBdICYgMHgwQykgPDwgNCkgfCAoZGF0YVsyXSAmIDB4M0YpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVWVF9wczI6Ci0gICAgICAgICAgICAqYnV0dG9ucyA9ICEhKGRhdGFbMF0mMSkgKiA0ICsgISEoZGF0YVswXSYyKSAqIDEgKyAhIShkYXRhWzBdJjQpICogMjsKLSAgICAgICAgICAgIGlmIChkYXRhWzFdICE9IDApCi0gICAgICAgICAgICAgICAgKmR4ID0gKGRhdGFbMF0gJiAweDEwKSA/IGRhdGFbMV0tMjU2IDogZGF0YVsxXTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAqZHggPSAwOwotICAgICAgICAgICAgaWYgKGRhdGFbMl0gIT0gMCkKLSAgICAgICAgICAgICAgICAqZHkgPSAtKChkYXRhWzBdICYgMHgyMCkgPyBkYXRhWzJdLTI1NiA6IGRhdGFbMl0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICpkeSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFVlRfbW91c2VzeXN0ZW1zOiBjYXNlIEVWVF9ncG06Ci0gICAgICAgICAgICAqYnV0dG9ucyA9ICh+ZGF0YVswXSkgJiAweDA3OwotICAgICAgICAgICAgKmR4ID0gKGNoYXIpKGRhdGFbMV0pICsgKGNoYXIpKGRhdGFbM10pOwotICAgICAgICAgICAgKmR5ID0gLSgoY2hhcikoZGF0YVsyXSkgKyAoY2hhcikoZGF0YVs0XSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVZUX2xvZ2l0ZWNoOgotICAgICAgICAgICAgKmJ1dHRvbnM9IGRhdGFbMF0gJiAweDA3OwotICAgICAgICAgICAgKmR4ID0gKGRhdGFbMF0gJiAweDEwKSA/ICAgZGF0YVsxXSA6IC0gZGF0YVsxXTsKLSAgICAgICAgICAgICpkeSA9IChkYXRhWzBdICYgMHgwOCkgPyAtIGRhdGFbMl0gOiAgIGRhdGFbMl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFVlRfYnVzbW91c2U6Ci0gICAgICAgICAgICAqYnV0dG9ucz0gKH5kYXRhWzBdKSAmIDB4MDc7Ci0gICAgICAgICAgICAqZHggPSAoY2hhcilkYXRhWzFdOwotICAgICAgICAgICAgKmR5ID0gLShjaGFyKWRhdGFbMl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFVlRfTU1zZXJpZXM6Ci0gICAgICAgICAgICAqYnV0dG9ucyA9IGRhdGFbMF0gJiAweDA3OwotICAgICAgICAgICAgKmR4ID0gKGRhdGFbMF0gJiAweDEwKSA/ICAgZGF0YVsxXSA6IC0gZGF0YVsxXTsKLSAgICAgICAgICAgICpkeSA9IChkYXRhWzBdICYgMHgwOCkgPyAtIGRhdGFbMl0gOiAgIGRhdGFbMl07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFVlRfaW50ZWxsaW1vdXNlOgotICAgICAgICAgICAgKmJ1dHRvbnMgPSAoKGRhdGFbMF0gJiAweDIwKSA+PiAzKSAgLyogbGVmdCAqLwotICAgICAgICAgICAgICAgICAgICAgfCAoKGRhdGFbM10gJiAweDEwKSA+PiAzKSAgLyogbWlkZGxlICovCi0gICAgICAgICAgICAgICAgICAgICB8ICgoZGF0YVswXSAmIDB4MTApID4+IDQpOyAvKiByaWdodCAqLwotICAgICAgICAgICAgKmR4ID0gKGNoYXIpKCgoZGF0YVswXSAmIDB4MDMpIDw8IDYpIHwgKGRhdGFbMV0gJiAweDNGKSk7Ci0gICAgICAgICAgICAqZHkgPSAoY2hhcikoKChkYXRhWzBdICYgMHgwQykgPDwgNCkgfCAoZGF0YVsyXSAmIDB4M0YpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVWVF9pbnRlbGxpbW91c2VfcHMyOgotICAgICAgICAgICAgKmJ1dHRvbnMgPSAoZGF0YVswXSAmIDB4MDQpID4+IDEgLyogTWlkZGxlICovCi0gICAgICAgICAgICAgICAgfCAoZGF0YVswXSAmIDB4MDIpID4+IDEgLyogUmlnaHQgKi8KLSAgICAgICAgICAgICAgICB8IChkYXRhWzBdICYgMHgwMSkgPDwgMjsgLyogTGVmdCAqLwotICAgICAgICAgICAgKmR4ID0gKGRhdGFbMF0gJiAweDEwKSA/ICAgIGRhdGFbMV0tMjU2ICA6ICBkYXRhWzFdOwotICAgICAgICAgICAgKmR5ID0gKGRhdGFbMF0gJiAweDIwKSA/ICAtKGRhdGFbMl0tMjU2KSA6IC1kYXRhWzJdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVZUX21vdXNlbWFuOiB7Ci0gICAgICAgICAgICBzdGF0aWMgaW50ICAgICAgZ2V0ZXh0cmE7Ci0gICAgICAgICAgICBzdGF0aWMgdWNoYXIgICAgcHJldj0wOwotICAgICAgICAgICAgdWNoYXIgICAgICAgICAgIGI7CisJY2FzZSBFVlRfbWljcm9zb2Z0OgorCSAgICBpZiAoZGF0YVswXSA9PSAweDQwICYmICEocHJldnxkYXRhWzFdfGRhdGFbMl0pKQorCQkqYnV0dG9ucyA9IDI7ICAgLyogVGhpcmQgYnV0dG9uIG9uIE1TIGNvbXBhdGlibGUgbW91c2UgKi8KKwkgICAgZWxzZQorCQkqYnV0dG9ucz0gKChkYXRhWzBdICYgMHgyMCkgPj4gMykgfCAoKGRhdGFbMF0gJiAweDEwKSA+PiA0KTsKKwkgICAgcHJldiA9ICpidXR0b25zOworCSAgICAqZHggPSAoY2hhcikoKChkYXRhWzBdICYgMHgwMykgPDwgNikgfCAoZGF0YVsxXSAmIDB4M0YpKTsKKwkgICAgKmR5ID0gKGNoYXIpKCgoZGF0YVswXSAmIDB4MEMpIDw8IDQpIHwgKGRhdGFbMl0gJiAweDNGKSk7CisJICAgIGJyZWFrOworCWNhc2UgRVZUX3BzMjoKKwkgICAgKmJ1dHRvbnMgPSAhIShkYXRhWzBdJjEpICogNCArICEhKGRhdGFbMF0mMikgKiAxICsgISEoZGF0YVswXSY0KSAqIDI7CisJICAgIGlmIChkYXRhWzFdICE9IDApCisJCSpkeCA9IChkYXRhWzBdICYgMHgxMCkgPyBkYXRhWzFdLTI1NiA6IGRhdGFbMV07CisJICAgIGVsc2UKKwkJKmR4ID0gMDsKKwkgICAgaWYgKGRhdGFbMl0gIT0gMCkKKwkJKmR5ID0gLSgoZGF0YVswXSAmIDB4MjApID8gZGF0YVsyXS0yNTYgOiBkYXRhWzJdKTsKKwkgICAgZWxzZQorCQkqZHkgPSAwOworCSAgICBicmVhazsKKwljYXNlIEVWVF9tb3VzZXN5c3RlbXM6IGNhc2UgRVZUX2dwbToKKwkgICAgKmJ1dHRvbnMgPSAofmRhdGFbMF0pICYgMHgwNzsKKwkgICAgKmR4ID0gKGNoYXIpKGRhdGFbMV0pICsgKGNoYXIpKGRhdGFbM10pOworCSAgICAqZHkgPSAtKChjaGFyKShkYXRhWzJdKSArIChjaGFyKShkYXRhWzRdKSk7CisJICAgIGJyZWFrOworCWNhc2UgRVZUX2xvZ2l0ZWNoOgorCSAgICAqYnV0dG9ucz0gZGF0YVswXSAmIDB4MDc7CisJICAgICpkeCA9IChkYXRhWzBdICYgMHgxMCkgPyAgIGRhdGFbMV0gOiAtIGRhdGFbMV07CisJICAgICpkeSA9IChkYXRhWzBdICYgMHgwOCkgPyAtIGRhdGFbMl0gOiAgIGRhdGFbMl07CisJICAgIGJyZWFrOworCWNhc2UgRVZUX2J1c21vdXNlOgorCSAgICAqYnV0dG9ucz0gKH5kYXRhWzBdKSAmIDB4MDc7CisJICAgICpkeCA9IChjaGFyKWRhdGFbMV07CisJICAgICpkeSA9IC0oY2hhcilkYXRhWzJdOworCSAgICBicmVhazsKKwljYXNlIEVWVF9NTXNlcmllczoKKwkgICAgKmJ1dHRvbnMgPSBkYXRhWzBdICYgMHgwNzsKKwkgICAgKmR4ID0gKGRhdGFbMF0gJiAweDEwKSA/ICAgZGF0YVsxXSA6IC0gZGF0YVsxXTsKKwkgICAgKmR5ID0gKGRhdGFbMF0gJiAweDA4KSA/IC0gZGF0YVsyXSA6ICAgZGF0YVsyXTsKKwkgICAgYnJlYWs7CisJY2FzZSBFVlRfaW50ZWxsaW1vdXNlOgorCSAgICAqYnV0dG9ucyA9ICgoZGF0YVswXSAmIDB4MjApID4+IDMpICAvKiBsZWZ0ICovCisJCSAgICAgfCAoKGRhdGFbM10gJiAweDEwKSA+PiAzKSAgLyogbWlkZGxlICovCisJCSAgICAgfCAoKGRhdGFbMF0gJiAweDEwKSA+PiA0KTsgLyogcmlnaHQgKi8KKwkgICAgKmR4ID0gKGNoYXIpKCgoZGF0YVswXSAmIDB4MDMpIDw8IDYpIHwgKGRhdGFbMV0gJiAweDNGKSk7CisJICAgICpkeSA9IChjaGFyKSgoKGRhdGFbMF0gJiAweDBDKSA8PCA0KSB8IChkYXRhWzJdICYgMHgzRikpOworCSAgICBicmVhazsKKwljYXNlIEVWVF9pbnRlbGxpbW91c2VfcHMyOgorCSAgICAqYnV0dG9ucyA9IChkYXRhWzBdICYgMHgwNCkgPj4gMSAvKiBNaWRkbGUgKi8KKwkJfCAoZGF0YVswXSAmIDB4MDIpID4+IDEgLyogUmlnaHQgKi8KKwkJfCAoZGF0YVswXSAmIDB4MDEpIDw8IDI7IC8qIExlZnQgKi8KKwkgICAgKmR4ID0gKGRhdGFbMF0gJiAweDEwKSA/ICAgIGRhdGFbMV0tMjU2ICA6ICBkYXRhWzFdOworCSAgICAqZHkgPSAoZGF0YVswXSAmIDB4MjApID8gIC0oZGF0YVsyXS0yNTYpIDogLWRhdGFbMl07CisJICAgIGJyZWFrOworCWNhc2UgRVZUX21vdXNlbWFuOiB7CisJICAgIHN0YXRpYyBpbnQgICAgICBnZXRleHRyYTsKKwkgICAgc3RhdGljIHVjaGFyICAgIHByZXY9MDsKKwkgICAgdWNoYXIgICAgICAgICAgIGI7CiAKLSAgICAgICAgICAgIC8qIFRoZSBkYW1uZWQgTW91c2VNYW4gaGFzIDMvNCBieXRlcyBwYWNrZXRzLiBUaGUgZXh0cmEgYnl0ZQotICAgICAgICAgICAgICogaXMgb25seSB0aGVyZSBpZiB0aGUgbWlkZGxlIGJ1dHRvbiBpcyBhY3RpdmUuCi0gICAgICAgICAgICAgKiBJIGdldCB0aGUgZXh0cmEgYnl0ZSBhcyBhIHBhY2tldCB3aXRoIG1hZ2ljIG51bWJlcnMgaW4gaXQuCi0gICAgICAgICAgICAgKiBhbmQgdGhlbiBzd2l0Y2ggdG8gNC1ieXRlIG1vZGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChkYXRhWzFdID09IDB4QUEgJiYgZGF0YVsyXSA9PSAweDU1KSB7Ci0gICAgICAgICAgICAgICAgLyogR290IHVuZXhwZWN0ZWQgZm91cnRoIGJ5dGUgKi8KLSAgICAgICAgICAgICAgICBpZiAoKGIgPSAoKmRhdGE+PjQpKSA+IDB4MykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgLyoganVzdCBhIHNhbml0eSBjaGVjayAqLwotICAgICAgICAgICAgICAgICpkeCA9ICpkeSA9IDA7Ci0gICAgICAgICAgICAgICAgZHJ2LT5wYWNrZXRfbGVuPTQ7Ci0gICAgICAgICAgICAgICAgZ2V0ZXh0cmE9MDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBHb3QgMy80LCBhcyBleHBlY3RlZCAqLwotICAgICAgICAgICAgICAgIC8qIE1vdGlvbiBpcyBpbmRlcGVuZGVudCBvZiBwYWNrZXRsZW4uLi4gKi8KLSAgICAgICAgICAgICAgICAqZHggPSAoY2hhcikoKChkYXRhWzBdICYgMHgwMykgPDwgNikgfCAoZGF0YVsxXSAmIDB4M0YpKTsKLSAgICAgICAgICAgICAgICAqZHkgPSAoY2hhcikoKChkYXRhWzBdICYgMHgwQykgPDwgNCkgfCAoZGF0YVsyXSAmIDB4M0YpKTsKLSAgICAgICAgICAgICAgICBwcmV2ID0gKChkYXRhWzBdICYgMHgyMCkgPj4gMykgfCAoKGRhdGFbMF0gJiAweDEwKSA+PiA0KTsKLSAgICAgICAgICAgICAgICBpZiAoZHJ2LT5wYWNrZXRfbGVuPT00KQotICAgICAgICAgICAgICAgICAgICBiID0gZGF0YVszXT4+NDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZHJ2LT5wYWNrZXRfbGVuID09IDQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRydi0+cGFja2V0X2xlbiA9IDM7Ci0gICAgICAgICAgICAgICAgICAgIGdldGV4dHJhID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoYiAmIDB4MikKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgfD0gMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpidXR0b25zID0gcHJldjsKKwkgICAgLyogVGhlIGRhbW5lZCBNb3VzZU1hbiBoYXMgMy80IGJ5dGVzIHBhY2tldHMuIFRoZSBleHRyYSBieXRlCisJICAgICAqIGlzIG9ubHkgdGhlcmUgaWYgdGhlIG1pZGRsZSBidXR0b24gaXMgYWN0aXZlLgorCSAgICAgKiBJIGdldCB0aGUgZXh0cmEgYnl0ZSBhcyBhIHBhY2tldCB3aXRoIG1hZ2ljIG51bWJlcnMgaW4gaXQuCisJICAgICAqIGFuZCB0aGVuIHN3aXRjaCB0byA0LWJ5dGUgbW9kZS4KKwkgICAgICovCisJICAgIGlmIChkYXRhWzFdID09IDB4QUEgJiYgZGF0YVsyXSA9PSAweDU1KSB7CisJCS8qIEdvdCB1bmV4cGVjdGVkIGZvdXJ0aCBieXRlICovCisJCWlmICgoYiA9ICgqZGF0YT4+NCkpID4gMHgzKQorCQkgICAgcmV0dXJuIGZhbHNlOyAgLyoganVzdCBhIHNhbml0eSBjaGVjayAqLworCQkqZHggPSAqZHkgPSAwOworCQlkcnYtPnBhY2tldF9sZW49NDsKKwkJZ2V0ZXh0cmE9MDsKKwkJfQorCSAgICBlbHNlIHsKKwkJLyogR290IDMvNCwgYXMgZXhwZWN0ZWQgKi8KKwkJLyogTW90aW9uIGlzIGluZGVwZW5kZW50IG9mIHBhY2tldGxlbi4uLiAqLworCQkqZHggPSAoY2hhcikoKChkYXRhWzBdICYgMHgwMykgPDwgNikgfCAoZGF0YVsxXSAmIDB4M0YpKTsKKwkJKmR5ID0gKGNoYXIpKCgoZGF0YVswXSAmIDB4MEMpIDw8IDQpIHwgKGRhdGFbMl0gJiAweDNGKSk7CisJCXByZXYgPSAoKGRhdGFbMF0gJiAweDIwKSA+PiAzKSB8ICgoZGF0YVswXSAmIDB4MTApID4+IDQpOworCQlpZiAoZHJ2LT5wYWNrZXRfbGVuPT00KQorCQkgICAgYiA9IGRhdGFbM10+PjQ7CisJCX0KKwkgICAgaWYgKGRydi0+cGFja2V0X2xlbiA9PSA0KSB7CisJCWlmIChiID09IDApIHsKKwkJICAgIGRydi0+cGFja2V0X2xlbiA9IDM7CisJCSAgICBnZXRleHRyYSA9IDE7CisJCSAgICB9CisJCWVsc2UgeworCQkgICAgaWYgKGIgJiAweDIpCisJCQlwcmV2IHw9IDI7CisJCSAgICB9CisJCX0KKwkgICAgKmJ1dHRvbnMgPSBwcmV2OwogCi0gICAgICAgICAgICAvKiBUaGlzICJjaG9yZC1taWRkbGUiIGJlaGF2aW91ciB3YXMgcmVwb3J0ZWQgYnkgRGF2aWQgQS4gdmFuIExlZXV3ZW4gKi8KLSAgICAgICAgICAgIGlmICgoKHByZXYgXiAqYnV0dG9ucykgJiA1KSA9PSA1KQotICAgICAgICAgICAgICAgICpidXR0b25zID0gKmJ1dHRvbnMgPyAyIDogMDsKLSAgICAgICAgICAgIHByZXYgPSAqYnV0dG9uczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBjYXNlIEVWVF9ub01vdXNlOgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkgICAgLyogVGhpcyAiY2hvcmQtbWlkZGxlIiBiZWhhdmlvdXIgd2FzIHJlcG9ydGVkIGJ5IERhdmlkIEEuIHZhbiBMZWV1d2VuICovCisJICAgIGlmICgoKHByZXYgXiAqYnV0dG9ucykgJiA1KSA9PSA1KQorCQkqYnV0dG9ucyA9ICpidXR0b25zID8gMiA6IDA7CisJICAgIHByZXYgPSAqYnV0dG9uczsKKwkgICAgYnJlYWs7CisJICAgIH0KKwljYXNlIEVWVF9ub01vdXNlOgorCSAgICByZXR1cm4gZmFsc2U7CisJICAgIGJyZWFrOworCX0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzg5LDkgKzM4OSw5IEBACiAgICAgaW50IGk7CiAKICAgICBmb3IoaSA9IDA7IGkgPCBuYjsgaSsrKSB7Ci0gICAgICAgIGlmICh0YWJbaV0uc2NhbiA9PSBrZXkpCi0gICAgICAgICAgICByZXR1cm4gdGFiW2ldLm1hcDsKLSAgICAgICAgfQorCWlmICh0YWJbaV0uc2NhbiA9PSBrZXkpCisJICAgIHJldHVybiB0YWJbaV0ubWFwOworCX0KICAgICByZXR1cm4ga2V5OwogfQogCkBAIC00MTEsMjEgKzQxMSwyMSBAQAogewogICAgIGV2dC0+bWVzc2FnZSA9IDA7CiAgICAgaWYgKGJ1dHMwICYmIGF4aXMwKSB7Ci0gICAgICAgIGlmIChidXRzMFswXSkgZXZ0LT5tZXNzYWdlIHw9IEVWVF9KT1kxX0JVVFRPTkE7Ci0gICAgICAgIGlmIChidXRzMFsxXSkgZXZ0LT5tZXNzYWdlIHw9IEVWVF9KT1kxX0JVVFRPTkI7Ci0gICAgICAgIGV2dC0+d2hlcmVfeCA9IGF4aXMwWzBdOwotICAgICAgICBldnQtPndoZXJlX3kgPSBheGlzMFsxXTsKLSAgICAgICAgfQorCWlmIChidXRzMFswXSkgZXZ0LT5tZXNzYWdlIHw9IEVWVF9KT1kxX0JVVFRPTkE7CisJaWYgKGJ1dHMwWzFdKSBldnQtPm1lc3NhZ2UgfD0gRVZUX0pPWTFfQlVUVE9OQjsKKwlldnQtPndoZXJlX3ggPSBheGlzMFswXTsKKwlldnQtPndoZXJlX3kgPSBheGlzMFsxXTsKKwl9CiAgICAgZWxzZQotICAgICAgICBldnQtPndoZXJlX3ggPSBldnQtPndoZXJlX3kgPSAwOworCWV2dC0+d2hlcmVfeCA9IGV2dC0+d2hlcmVfeSA9IDA7CiAgICAgaWYgKGJ1dHMxICYmIGF4aXMxKSB7Ci0gICAgICAgIGlmIChidXRzMVswXSkgZXZ0LT5tZXNzYWdlIHw9IEVWVF9KT1kyX0JVVFRPTkE7Ci0gICAgICAgIGlmIChidXRzMVsxXSkgZXZ0LT5tZXNzYWdlIHw9IEVWVF9KT1kyX0JVVFRPTkI7Ci0gICAgICAgIGV2dC0+d2hlcmVfeCA9IGF4aXMxWzBdOwotICAgICAgICBldnQtPndoZXJlX3kgPSBheGlzMVsxXTsKLSAgICAgICAgfQorCWlmIChidXRzMVswXSkgZXZ0LT5tZXNzYWdlIHw9IEVWVF9KT1kyX0JVVFRPTkE7CisJaWYgKGJ1dHMxWzFdKSBldnQtPm1lc3NhZ2UgfD0gRVZUX0pPWTJfQlVUVE9OQjsKKwlldnQtPndoZXJlX3ggPSBheGlzMVswXTsKKwlldnQtPndoZXJlX3kgPSBheGlzMVsxXTsKKwl9CiAgICAgZWxzZQotICAgICAgICBldnQtPndoZXJlX3ggPSBldnQtPndoZXJlX3kgPSAwOworCWV2dC0+d2hlcmVfeCA9IGV2dC0+d2hlcmVfeSA9IDA7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MzksMzkgKzQzOSwzOSBAQAogICAgIGludCBtYXNrID0gMDsKIAogICAgIGlmICgoanNfdmVyc2lvbiAmIH4weGZmZmYpID09IDApIHsKLSAgICAgICAgLyogT2xkIDAueCBkcml2ZXIgKi8KLSAgICAgICAgc3RydWN0IEpTX0RBVEFfVFlQRSBqczsKLSAgICAgICAgaWYgKGpveXN0aWNrMF9mZCAmJiByZWFkKGpveXN0aWNrMF9mZCwgJmpzLCBKU19SRVRVUk4pID09IEpTX1JFVFVSTikgewotICAgICAgICAgICAgaWYgKGptYXNrICYgRVZUX0pPWV9BWElTX1gxKQotICAgICAgICAgICAgICAgIGF4aXNbMF0gPSBqcy54OwotICAgICAgICAgICAgaWYgKGptYXNrICYgRVZUX0pPWV9BWElTX1kxKQotICAgICAgICAgICAgICAgIGF4aXNbMV0gPSBqcy55OwotICAgICAgICAgICAgbWFzayB8PSBFVlRfSk9ZX0FYSVNfWDF8RVZUX0pPWV9BWElTX1kxOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAoam95c3RpY2sxX2ZkICYmIHJlYWQoam95c3RpY2sxX2ZkLCAmanMsIEpTX1JFVFVSTikgPT0gSlNfUkVUVVJOKSB7Ci0gICAgICAgICAgICBpZiAoam1hc2sgJiBFVlRfSk9ZX0FYSVNfWDIpCi0gICAgICAgICAgICAgICAgYXhpc1syXSA9IGpzLng7Ci0gICAgICAgICAgICBpZiAoam1hc2sgJiBFVlRfSk9ZX0FYSVNfWTIpCi0gICAgICAgICAgICAgICAgYXhpc1szXSA9IGpzLnk7Ci0gICAgICAgICAgICBtYXNrIHw9IEVWVF9KT1lfQVhJU19YMnxFVlRfSk9ZX0FYSVNfWTI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBPbGQgMC54IGRyaXZlciAqLworCXN0cnVjdCBKU19EQVRBX1RZUEUganM7CisJaWYgKGpveXN0aWNrMF9mZCAmJiByZWFkKGpveXN0aWNrMF9mZCwgJmpzLCBKU19SRVRVUk4pID09IEpTX1JFVFVSTikgeworCSAgICBpZiAoam1hc2sgJiBFVlRfSk9ZX0FYSVNfWDEpCisJCWF4aXNbMF0gPSBqcy54OworCSAgICBpZiAoam1hc2sgJiBFVlRfSk9ZX0FYSVNfWTEpCisJCWF4aXNbMV0gPSBqcy55OworCSAgICBtYXNrIHw9IEVWVF9KT1lfQVhJU19YMXxFVlRfSk9ZX0FYSVNfWTE7CisJICAgIH0KKwlpZiAoam95c3RpY2sxX2ZkICYmIHJlYWQoam95c3RpY2sxX2ZkLCAmanMsIEpTX1JFVFVSTikgPT0gSlNfUkVUVVJOKSB7CisJICAgIGlmIChqbWFzayAmIEVWVF9KT1lfQVhJU19YMikKKwkJYXhpc1syXSA9IGpzLng7CisJICAgIGlmIChqbWFzayAmIEVWVF9KT1lfQVhJU19ZMikKKwkJYXhpc1szXSA9IGpzLnk7CisJICAgIG1hc2sgfD0gRVZUX0pPWV9BWElTX1gyfEVWVF9KT1lfQVhJU19ZMjsKKwkgICAgfQorCX0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKGF4aXMwKSB7Ci0gICAgICAgICAgICBpZiAoam1hc2sgJiBFVlRfSk9ZX0FYSVNfWDEpCi0gICAgICAgICAgICAgICAgYXhpc1swXSA9IGF4aXMwWzBdOwotICAgICAgICAgICAgaWYgKGptYXNrICYgRVZUX0pPWV9BWElTX1kxKQotICAgICAgICAgICAgICAgIGF4aXNbMV0gPSBheGlzMFsxXTsKLSAgICAgICAgICAgIG1hc2sgfD0gRVZUX0pPWV9BWElTX1gxIHwgRVZUX0pPWV9BWElTX1kxOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAoYXhpczEpIHsKLSAgICAgICAgICAgIGlmIChqbWFzayAmIEVWVF9KT1lfQVhJU19YMikKLSAgICAgICAgICAgICAgICBheGlzWzJdID0gYXhpczFbMF07Ci0gICAgICAgICAgICBpZiAoam1hc2sgJiBFVlRfSk9ZX0FYSVNfWTIpCi0gICAgICAgICAgICAgICAgYXhpc1szXSA9IGF4aXMxWzFdOwotICAgICAgICAgICAgbWFzayB8PSBFVlRfSk9ZX0FYSVNfWDIgfCBFVlRfSk9ZX0FYSVNfWTI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoYXhpczApIHsKKwkgICAgaWYgKGptYXNrICYgRVZUX0pPWV9BWElTX1gxKQorCQlheGlzWzBdID0gYXhpczBbMF07CisJICAgIGlmIChqbWFzayAmIEVWVF9KT1lfQVhJU19ZMSkKKwkJYXhpc1sxXSA9IGF4aXMwWzFdOworCSAgICBtYXNrIHw9IEVWVF9KT1lfQVhJU19YMSB8IEVWVF9KT1lfQVhJU19ZMTsKKwkgICAgfQorCWlmIChheGlzMSkgeworCSAgICBpZiAoam1hc2sgJiBFVlRfSk9ZX0FYSVNfWDIpCisJCWF4aXNbMl0gPSBheGlzMVswXTsKKwkgICAgaWYgKGptYXNrICYgRVZUX0pPWV9BWElTX1kyKQorCQlheGlzWzNdID0gYXhpczFbMV07CisJICAgIG1hc2sgfD0gRVZUX0pPWV9BWElTX1gyIHwgRVZUX0pPWV9BWElTX1kyOworCSAgICB9CisJfQogICAgIHJldHVybiBtYXNrOwogfQogCkBAIC00ODQsMTkgKzQ4NCwxOSBAQAogICAgIGludCBidXRzID0gMDsKIAogICAgIGlmICgoanNfdmVyc2lvbiAmIH4weGZmZmYpID09IDApIHsKLSAgICAgICAgLyogT2xkIDAueCBkcml2ZXIgKi8KLSAgICAgICAgc3RydWN0IEpTX0RBVEFfVFlQRSBqczsKLSAgICAgICAgaWYgKGpveXN0aWNrMF9mZCAmJiByZWFkKGpveXN0aWNrMF9mZCwgJmpzLCBKU19SRVRVUk4pID09IEpTX1JFVFVSTikKLSAgICAgICAgICAgIGJ1dHMgPSBqcy5idXR0b25zOwotICAgICAgICBpZiAoam95c3RpY2sxX2ZkICYmIHJlYWQoam95c3RpY2sxX2ZkLCAmanMsIEpTX1JFVFVSTikgPT0gSlNfUkVUVVJOKQotICAgICAgICAgICAgYnV0cyB8PSBqcy5idXR0b25zIDw8IDI7Ci0gICAgICAgIH0KKwkvKiBPbGQgMC54IGRyaXZlciAqLworCXN0cnVjdCBKU19EQVRBX1RZUEUganM7CisJaWYgKGpveXN0aWNrMF9mZCAmJiByZWFkKGpveXN0aWNrMF9mZCwgJmpzLCBKU19SRVRVUk4pID09IEpTX1JFVFVSTikKKwkgICAgYnV0cyA9IGpzLmJ1dHRvbnM7CisJaWYgKGpveXN0aWNrMV9mZCAmJiByZWFkKGpveXN0aWNrMV9mZCwgJmpzLCBKU19SRVRVUk4pID09IEpTX1JFVFVSTikKKwkgICAgYnV0cyB8PSBqcy5idXR0b25zIDw8IDI7CisJfQogICAgIGVsc2UgewotICAgICAgICBpZiAoYnV0czApCi0gICAgICAgICAgICBidXRzIHw9IEVWVF9KT1kxX0JVVFRPTkEqYnV0czBbMF0gKyBFVlRfSk9ZMV9CVVRUT05CKmJ1dHMwWzFdOwotICAgICAgICBpZiAoYnV0czEpCi0gICAgICAgICAgICBidXRzIHw9IEVWVF9KT1kyX0JVVFRPTkEqYnV0czFbMF0gKyBFVlRfSk9ZMl9CVVRUT05CKmJ1dHMxWzFdOwotICAgICAgICB9CisJaWYgKGJ1dHMwKQorCSAgICBidXRzIHw9IEVWVF9KT1kxX0JVVFRPTkEqYnV0czBbMF0gKyBFVlRfSk9ZMV9CVVRUT05CKmJ1dHMwWzFdOworCWlmIChidXRzMSkKKwkgICAgYnV0cyB8PSBFVlRfSk9ZMl9CVVRUT05BKmJ1dHMxWzBdICsgRVZUX0pPWTJfQlVUVE9OQipidXRzMVsxXTsKKwl9CiAgICAgcmV0dXJuIGJ1dHM7CiB9CiAKQEAgLTUyNSw5NyArNTI1LDk3IEBACiAgICAgc3RhdGljIGlib29sICAgIGluaXRlZCA9IGZhbHNlOwogCiAgICAgaWYgKGluaXRlZCkKLSAgICAgICAgcmV0dXJuIG1hc2s7CisJcmV0dXJuIG1hc2s7CiAgICAgbWVtc2V0KEVWVC5qb3lNaW4sMCxzaXplb2YoRVZULmpveU1pbikpOwogICAgIG1lbXNldChFVlQuam95Q2VudGVyLDAsc2l6ZW9mKEVWVC5qb3lDZW50ZXIpKTsKICAgICBtZW1zZXQoRVZULmpveU1heCwwLHNpemVvZihFVlQuam95TWF4KSk7CiAgICAgbWVtc2V0KEVWVC5qb3lQcmV2LDAsc2l6ZW9mKEVWVC5qb3lQcmV2KSk7CiAgICAgRVZULmpveUJ1dFN0YXRlID0gMDsKICAgICBpZiAoKHRtcCA9IGdldGVudihFTlZfSk9ZREVWMCkpICE9IE5VTEwpCi0gICAgICAgIHN0cmNweShqb3lzdGljazBfZGV2LHRtcCk7CisJc3RyY3B5KGpveXN0aWNrMF9kZXYsdG1wKTsKICAgICBpZiAoKHRtcCA9IGdldGVudihFTlZfSk9ZREVWMSkpICE9IE5VTEwpCi0gICAgICAgIHN0cmNweShqb3lzdGljazFfZGV2LHRtcCk7CisJc3RyY3B5KGpveXN0aWNrMV9kZXYsdG1wKTsKICAgICBpZiAoKGpveXN0aWNrMF9mZCA9IG9wZW4oam95c3RpY2swX2RldiwgT19SRE9OTFkpKSA8IDApCi0gICAgICAgIGpveXN0aWNrMF9mZCA9IDA7CisJam95c3RpY2swX2ZkID0gMDsKICAgICBpZiAoKGpveXN0aWNrMV9mZCA9IG9wZW4oam95c3RpY2sxX2RldiwgT19SRE9OTFkpKSA8IDApCi0gICAgICAgIGpveXN0aWNrMV9mZCA9IDA7Ci0gICAgaWYgKCFqb3lzdGljazBfZmQgJiYgIWpveXN0aWNrMV9mZCkgLy8gTm8gam95c3RpY2tzIGRldGVjdGVkCi0gICAgICAgIHJldHVybiAwOworCWpveXN0aWNrMV9mZCA9IDA7CisgICAgaWYgKCFqb3lzdGljazBfZmQgJiYgIWpveXN0aWNrMV9mZCkgLyogTm8gam95c3RpY2tzIGRldGVjdGVkICovCisJcmV0dXJuIDA7CiAgICAgaW5pdGVkID0gdHJ1ZTsKICAgICBpZiAoaW9jdGwoam95c3RpY2swX2ZkID8gam95c3RpY2swX2ZkIDogam95c3RpY2sxX2ZkLCBKU0lPQ0dWRVJTSU9OLCAmanNfdmVyc2lvbikgPCAwKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAogICAgIC8qIEluaXRpYWxpc2Ugam95c3RpY2sgMCAqLwogICAgIGlmIChqb3lzdGljazBfZmQpIHsKLSAgICAgICAgaW9jdGwoam95c3RpY2swX2ZkLCBKU0lPQ0dOQU1FKHNpemVvZihuYW1lMCkpLCBuYW1lMCk7Ci0gICAgICAgIGlmIChqc192ZXJzaW9uICYgfjB4ZmZmZikgewotICAgICAgICAgICAgc3RydWN0IGpzX2V2ZW50IGpzOworCWlvY3RsKGpveXN0aWNrMF9mZCwgSlNJT0NHTkFNRShzaXplb2YobmFtZTApKSwgbmFtZTApOworCWlmIChqc192ZXJzaW9uICYgfjB4ZmZmZikgeworCSAgICBzdHJ1Y3QganNfZXZlbnQganM7CiAKLSAgICAgICAgICAgIGlvY3RsKGpveXN0aWNrMF9mZCwgSlNJT0NHQVhFUywgJmpzMF9heGVzKTsKLSAgICAgICAgICAgIGlvY3RsKGpveXN0aWNrMF9mZCwgSlNJT0NHQlVUVE9OUywgJmpzMF9idXR0b25zKTsKLSAgICAgICAgICAgIGF4aXMwID0gUE1fY2FsbG9jKChpbnQpanMwX2F4ZXMsIHNpemVvZihzaG9ydCkpOwotICAgICAgICAgICAgYnV0czAgPSBQTV9tYWxsb2MoKGludClqczBfYnV0dG9ucyk7Ci0gICAgICAgICAgICAvKiBSZWFkIHRoZSBpbml0aWFsIGV2ZW50cyAqLwotICAgICAgICAgICAgd2hpbGUoZGF0YVJlYWR5KGpveXN0aWNrMF9mZCkKLSAgICAgICAgICAgICAgICAgICYmIHJlYWQoam95c3RpY2swX2ZkLCAmanMsIHNpemVvZihzdHJ1Y3QganNfZXZlbnQpKSA9PSBzaXplb2Yoc3RydWN0IGpzX2V2ZW50KQotICAgICAgICAgICAgICAgICAgJiYgKGpzLnR5cGUgJiBKU19FVkVOVF9JTklUKQotICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGpzLnR5cGUgJiBKU19FVkVOVF9CVVRUT04pCi0gICAgICAgICAgICAgICAgICAgIGJ1dHMwW2pzLm51bWJlcl0gPSBqcy52YWx1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChqcy50eXBlICYgSlNfRVZFTlRfQVhJUykKLSAgICAgICAgICAgICAgICAgICAgYXhpczBbanMubnVtYmVyXSA9IHNjYWxlSm95QXhpcyhqcy52YWx1ZSxqcy5udW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBqczBfYXhlcyA9IDI7Ci0gICAgICAgICAgICBqczBfYnV0dG9ucyA9IDI7Ci0gICAgICAgICAgICBheGlzMCA9IFBNX2NhbGxvYygoaW50KWpzMF9heGVzLCBzaXplb2Yoc2hvcnQpKTsKLSAgICAgICAgICAgIGJ1dHMwID0gUE1fbWFsbG9jKChpbnQpanMwX2J1dHRvbnMpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJICAgIGlvY3RsKGpveXN0aWNrMF9mZCwgSlNJT0NHQVhFUywgJmpzMF9heGVzKTsKKwkgICAgaW9jdGwoam95c3RpY2swX2ZkLCBKU0lPQ0dCVVRUT05TLCAmanMwX2J1dHRvbnMpOworCSAgICBheGlzMCA9IFBNX2NhbGxvYygoaW50KWpzMF9heGVzLCBzaXplb2Yoc2hvcnQpKTsKKwkgICAgYnV0czAgPSBQTV9tYWxsb2MoKGludClqczBfYnV0dG9ucyk7CisJICAgIC8qIFJlYWQgdGhlIGluaXRpYWwgZXZlbnRzICovCisJICAgIHdoaWxlKGRhdGFSZWFkeShqb3lzdGljazBfZmQpCisJCSAgJiYgcmVhZChqb3lzdGljazBfZmQsICZqcywgc2l6ZW9mKHN0cnVjdCBqc19ldmVudCkpID09IHNpemVvZihzdHJ1Y3QganNfZXZlbnQpCisJCSAgJiYgKGpzLnR5cGUgJiBKU19FVkVOVF9JTklUKQorCQkgICkgeworCQlpZiAoanMudHlwZSAmIEpTX0VWRU5UX0JVVFRPTikKKwkJICAgIGJ1dHMwW2pzLm51bWJlcl0gPSBqcy52YWx1ZTsKKwkJZWxzZSBpZiAoanMudHlwZSAmIEpTX0VWRU5UX0FYSVMpCisJCSAgICBheGlzMFtqcy5udW1iZXJdID0gc2NhbGVKb3lBeGlzKGpzLnZhbHVlLGpzLm51bWJlcik7CisJCX0KKwkgICAgfQorCWVsc2UgeworCSAgICBqczBfYXhlcyA9IDI7CisJICAgIGpzMF9idXR0b25zID0gMjsKKwkgICAgYXhpczAgPSBQTV9jYWxsb2MoKGludClqczBfYXhlcywgc2l6ZW9mKHNob3J0KSk7CisJICAgIGJ1dHMwID0gUE1fbWFsbG9jKChpbnQpanMwX2J1dHRvbnMpOworCSAgICB9CisJfQogCiAgICAgLyogSW5pdGlhbGlzZSBqb3lzdGljayAxICovCiAgICAgaWYgKGpveXN0aWNrMV9mZCkgewotICAgICAgICBpb2N0bChqb3lzdGljazFfZmQsIEpTSU9DR05BTUUoc2l6ZW9mKG5hbWUxKSksIG5hbWUxKTsKLSAgICAgICAgaWYgKGpzX3ZlcnNpb24gJiB+MHhmZmZmKSB7Ci0gICAgICAgICAgICBzdHJ1Y3QganNfZXZlbnQganM7CisJaW9jdGwoam95c3RpY2sxX2ZkLCBKU0lPQ0dOQU1FKHNpemVvZihuYW1lMSkpLCBuYW1lMSk7CisJaWYgKGpzX3ZlcnNpb24gJiB+MHhmZmZmKSB7CisJICAgIHN0cnVjdCBqc19ldmVudCBqczsKIAotICAgICAgICAgICAgaW9jdGwoam95c3RpY2sxX2ZkLCBKU0lPQ0dBWEVTLCAmanMxX2F4ZXMpOwotICAgICAgICAgICAgaW9jdGwoam95c3RpY2sxX2ZkLCBKU0lPQ0dCVVRUT05TLCAmanMxX2J1dHRvbnMpOwotICAgICAgICAgICAgYXhpczEgPSBQTV9jYWxsb2MoKGludClqczFfYXhlcywgc2l6ZW9mKHNob3J0KSk7Ci0gICAgICAgICAgICBidXRzMSA9IFBNX21hbGxvYygoaW50KWpzMV9idXR0b25zKTsKLSAgICAgICAgICAgIC8qIFJlYWQgdGhlIGluaXRpYWwgZXZlbnRzICovCi0gICAgICAgICAgICB3aGlsZShkYXRhUmVhZHkoam95c3RpY2sxX2ZkKQotICAgICAgICAgICAgICAgICAgJiYgcmVhZChqb3lzdGljazFfZmQsICZqcywgc2l6ZW9mKHN0cnVjdCBqc19ldmVudCkpPT1zaXplb2Yoc3RydWN0IGpzX2V2ZW50KQotICAgICAgICAgICAgICAgICAgJiYgKGpzLnR5cGUgJiBKU19FVkVOVF9JTklUKQotICAgICAgICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGpzLnR5cGUgJiBKU19FVkVOVF9CVVRUT04pCi0gICAgICAgICAgICAgICAgICAgIGJ1dHMxW2pzLm51bWJlcl0gPSBqcy52YWx1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChqcy50eXBlICYgSlNfRVZFTlRfQVhJUykKLSAgICAgICAgICAgICAgICAgICAgYXhpczFbanMubnVtYmVyXSA9IHNjYWxlSm95QXhpcyhqcy52YWx1ZSxqcy5udW1iZXI8PDIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBqczFfYXhlcyA9IDI7Ci0gICAgICAgICAgICBqczFfYnV0dG9ucyA9IDI7Ci0gICAgICAgICAgICBheGlzMSA9IFBNX2NhbGxvYygoaW50KWpzMV9heGVzLCBzaXplb2Yoc2hvcnQpKTsKLSAgICAgICAgICAgIGJ1dHMxID0gUE1fbWFsbG9jKChpbnQpanMxX2J1dHRvbnMpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJICAgIGlvY3RsKGpveXN0aWNrMV9mZCwgSlNJT0NHQVhFUywgJmpzMV9heGVzKTsKKwkgICAgaW9jdGwoam95c3RpY2sxX2ZkLCBKU0lPQ0dCVVRUT05TLCAmanMxX2J1dHRvbnMpOworCSAgICBheGlzMSA9IFBNX2NhbGxvYygoaW50KWpzMV9heGVzLCBzaXplb2Yoc2hvcnQpKTsKKwkgICAgYnV0czEgPSBQTV9tYWxsb2MoKGludClqczFfYnV0dG9ucyk7CisJICAgIC8qIFJlYWQgdGhlIGluaXRpYWwgZXZlbnRzICovCisJICAgIHdoaWxlKGRhdGFSZWFkeShqb3lzdGljazFfZmQpCisJCSAgJiYgcmVhZChqb3lzdGljazFfZmQsICZqcywgc2l6ZW9mKHN0cnVjdCBqc19ldmVudCkpPT1zaXplb2Yoc3RydWN0IGpzX2V2ZW50KQorCQkgICYmIChqcy50eXBlICYgSlNfRVZFTlRfSU5JVCkKKwkJICApIHsKKwkJaWYgKGpzLnR5cGUgJiBKU19FVkVOVF9CVVRUT04pCisJCSAgICBidXRzMVtqcy5udW1iZXJdID0ganMudmFsdWU7CisJCWVsc2UgaWYgKGpzLnR5cGUgJiBKU19FVkVOVF9BWElTKQorCQkgICAgYXhpczFbanMubnVtYmVyXSA9IHNjYWxlSm95QXhpcyhqcy52YWx1ZSxqcy5udW1iZXI8PDIpOworCQl9CisJICAgIH0KKwllbHNlIHsKKwkgICAganMxX2F4ZXMgPSAyOworCSAgICBqczFfYnV0dG9ucyA9IDI7CisJICAgIGF4aXMxID0gUE1fY2FsbG9jKChpbnQpanMxX2F4ZXMsIHNpemVvZihzaG9ydCkpOworCSAgICBidXRzMSA9IFBNX21hbGxvYygoaW50KWpzMV9idXR0b25zKTsKKwkgICAgfQorCX0KIAogI2lmZGVmICBDSEVDS0VECi0gICAgZnByaW50ZihzdGRlcnIsIlVzaW5nIGpveXN0aWNrIGRyaXZlciB2ZXJzaW9uICVkLiVkLiVkXG4iLCAKLSAgICAgICAgICAgIGpzX3ZlcnNpb24gPj4gMTYsIChqc192ZXJzaW9uID4+IDgpICYgMHhmZiwganNfdmVyc2lvbiAmIDB4ZmYpOworICAgIGZwcmludGYoc3RkZXJyLCJVc2luZyBqb3lzdGljayBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZFxuIiwKKwkgICAganNfdmVyc2lvbiA+PiAxNiwgKGpzX3ZlcnNpb24gPj4gOCkgJiAweGZmLCBqc192ZXJzaW9uICYgMHhmZik7CiAgICAgaWYgKGpveXN0aWNrMF9mZCkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIkpveXN0aWNrIDEgKCVzKTogJXNcbiIsIGpveXN0aWNrMF9kZXYsIG5hbWUwKTsKKwlmcHJpbnRmKHN0ZGVyciwiSm95c3RpY2sgMSAoJXMpOiAlc1xuIiwgam95c3RpY2swX2RldiwgbmFtZTApOwogICAgIGlmIChqb3lzdGljazFfZmQpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCJKb3lzdGljayAyICglcyk6ICVzXG4iLCBqb3lzdGljazFfZGV2LCBuYW1lMSk7CisJZnByaW50ZihzdGRlcnIsIkpveXN0aWNrIDIgKCVzKTogJXNcbiIsIGpveXN0aWNrMV9kZXYsIG5hbWUxKTsKICNlbmRpZgogICAgIG1hc2sgPSBfRVZUX3JlYWRKb3lBeGlzKEVWVF9KT1lfQVhJU19BTEwsRVZULmpveUNlbnRlcik7CiAgICAgaWYgKG1hc2spIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IEpPWV9OVU1fQVhFUzsgaSsrKQotICAgICAgICAgICAgRVZULmpveU1heFtpXSA9IEVWVC5qb3lDZW50ZXJbaV0qMjsKLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCBKT1lfTlVNX0FYRVM7IGkrKykKKwkgICAgRVZULmpveU1heFtpXSA9IEVWVC5qb3lDZW50ZXJbaV0qMjsKKwl9CiAgICAgcmV0dXJuIG1hc2s7CiB9CiAKQEAgLTYzNCw5ICs2MzQsOSBAQAogcXVldWUgZm9yIGxhdGVyIHJldHJpZXZhbC4KIAogTm90ZTogICBNb3N0IGFuYWxvZ3VlIGpveXN0aWNrcyB3aWxsIHByb3ZpZGUgcmVhZGluZ3MgdGhhdCBjaGFuZ2UgZXZlbgotICAgICAgICB0aG91Z2ggdGhlIGpveXN0aWNrIGhhcyBub3QgbW92ZWQuIEhlbmNlIGlmIHlvdSBjYWxsIHRoaXMgcm91dGluZQotICAgICAgICB5b3Ugd2lsbCBsaWtlbHkgZ2V0IGFuIEVWVF9KT1lNT1ZFIGV2ZW50IGV2ZXJ5IHRpbWUgdGhyb3VnaCB5b3VyCi0gICAgICAgIGV2ZW50IGxvb3AuCisJdGhvdWdoIHRoZSBqb3lzdGljayBoYXMgbm90IG1vdmVkLiBIZW5jZSBpZiB5b3UgY2FsbCB0aGlzIHJvdXRpbmUKKwl5b3Ugd2lsbCBsaWtlbHkgZ2V0IGFuIEVWVF9KT1lNT1ZFIGV2ZW50IGV2ZXJ5IHRpbWUgdGhyb3VnaCB5b3VyCisJZXZlbnQgbG9vcC4KIAogU0VFIEFMU086CiBFVlRfZ2V0TmV4dCwgRVZUX3BlZWtOZXh0LCBFVlRfam95U2V0VXBwZXJMZWZ0LCBFVlRfam95U2V0TG93ZXJSaWdodCwKQEAgLTY0OCw2OCArNjQ4LDY4IEBACiAgICAgaW50ICAgICBpLGF4aXNbSk9ZX05VTV9BWEVTXSxuZXdCdXRTdGF0ZSxtYXNrLG1vdmVkLHBzOwogCiAgICAgaWYgKChqc192ZXJzaW9uICYgfjB4RkZGRikgPT0gMCAmJiBFVlQuam95TWFzaykgewotICAgICAgICAvKiBSZWFkIGpveXN0aWNrIGF4ZXMgYW5kIHBvc3QgbW92ZW1lbnQgZXZlbnRzIGlmIHRoZXkgaGF2ZQotICAgICAgICAgKiBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgd2UgcG9sbGVkLiBVbnRpbCB0aGUgZXZlbnRzIGFyZQotICAgICAgICAgKiBhY3R1YWxseSBmbHVzaGVkLCB3ZSBrZWVwIG1vZGlmeWluZyB0aGUgc2FtZSBqb3lzdGljayBtb3ZlbWVudAotICAgICAgICAgKiBldmVudCwgc28geW91IHdvbid0IGdldCBtdWx0aXBsZSBtb3ZlbWVudCBldmVudAotICAgICAgICAgKi8KLSAgICAgICAgbWFzayA9IF9FVlRfcmVhZEpveUF4aXMoRVZULmpveU1hc2ssYXhpcyk7Ci0gICAgICAgIG5ld0J1dFN0YXRlID0gX0VWVF9yZWFkSm95QnV0dG9ucygpOwotICAgICAgICBtb3ZlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgSk9ZX05VTV9BWEVTOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChtYXNrICYgKEVWVF9KT1lfQVhJU19YMSA8PCBpKSkKLSAgICAgICAgICAgICAgICBheGlzW2ldID0gc2NhbGVKb3lBeGlzKGF4aXNbaV0saSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXhpc1tpXSA9IEVWVC5qb3lQcmV2W2ldOwotICAgICAgICAgICAgaWYgKGF4aXNbaV0gIT0gRVZULmpveVByZXZbaV0pCi0gICAgICAgICAgICAgICAgbW92ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAobW92ZWQpIHsKLSAgICAgICAgICAgIG1lbWNweShFVlQuam95UHJldixheGlzLHNpemVvZihFVlQuam95UHJldikpOwotICAgICAgICAgICAgcHMgPSBfRVZUX2Rpc2FibGVJbnQoKTsKLSAgICAgICAgICAgIGlmIChFVlQub2xkSm95TW92ZSAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8qIE1vZGlmeSB0aGUgZXhpc3Rpbmcgam95c3RpY2sgbW92ZW1lbnQgZXZlbnQgKi8KLSAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ubWVzc2FnZSA9IG5ld0J1dFN0YXRlOwotICAgICAgICAgICAgICAgIEVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS53aGVyZV94ID0gRVZULmpveVByZXZbMF07Ci0gICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZEpveU1vdmVdLndoZXJlX3kgPSBFVlQuam95UHJldlsxXTsKLSAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ucmVsYXRpdmVfeCA9IEVWVC5qb3lQcmV2WzJdOwotICAgICAgICAgICAgICAgIEVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS5yZWxhdGl2ZV95ID0gRVZULmpveVByZXZbM107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkgewotICAgICAgICAgICAgICAgIC8qIEFkZCBhIG5ldyBqb3lzdGljayBtb3ZlbWVudCBldmVudCAqLwotICAgICAgICAgICAgICAgIEVWVC5vbGRKb3lNb3ZlID0gRVZULmZyZWVIZWFkOwotICAgICAgICAgICAgICAgIG1lbXNldCgmZXZ0LDAsc2l6ZW9mKGV2dCkpOwotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX0pPWU1PVkU7Ci0gICAgICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBFVlQuam95QnV0U3RhdGU7Ci0gICAgICAgICAgICAgICAgZXZ0LndoZXJlX3ggPSBFVlQuam95UHJldlswXTsKLSAgICAgICAgICAgICAgICBldnQud2hlcmVfeSA9IEVWVC5qb3lQcmV2WzFdOwotICAgICAgICAgICAgICAgIGV2dC5yZWxhdGl2ZV94ID0gRVZULmpveVByZXZbMl07Ci0gICAgICAgICAgICAgICAgZXZ0LnJlbGF0aXZlX3kgPSBFVlQuam95UHJldlszXTsKLSAgICAgICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBfRVZUX3Jlc3RvcmVJbnQocHMpOwotICAgICAgICAgICAgfQorCS8qIFJlYWQgam95c3RpY2sgYXhlcyBhbmQgcG9zdCBtb3ZlbWVudCBldmVudHMgaWYgdGhleSBoYXZlCisJICogY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHBvbGxlZC4gVW50aWwgdGhlIGV2ZW50cyBhcmUKKwkgKiBhY3R1YWxseSBmbHVzaGVkLCB3ZSBrZWVwIG1vZGlmeWluZyB0aGUgc2FtZSBqb3lzdGljayBtb3ZlbWVudAorCSAqIGV2ZW50LCBzbyB5b3Ugd29uJ3QgZ2V0IG11bHRpcGxlIG1vdmVtZW50IGV2ZW50CisJICovCisJbWFzayA9IF9FVlRfcmVhZEpveUF4aXMoRVZULmpveU1hc2ssYXhpcyk7CisJbmV3QnV0U3RhdGUgPSBfRVZUX3JlYWRKb3lCdXR0b25zKCk7CisJbW92ZWQgPSBmYWxzZTsKKwlmb3IgKGkgPSAwOyBpIDwgSk9ZX05VTV9BWEVTOyBpKyspIHsKKwkgICAgaWYgKG1hc2sgJiAoRVZUX0pPWV9BWElTX1gxIDw8IGkpKQorCQlheGlzW2ldID0gc2NhbGVKb3lBeGlzKGF4aXNbaV0saSk7CisJICAgIGVsc2UKKwkJYXhpc1tpXSA9IEVWVC5qb3lQcmV2W2ldOworCSAgICBpZiAoYXhpc1tpXSAhPSBFVlQuam95UHJldltpXSkKKwkJbW92ZWQgPSB0cnVlOworCSAgICB9CisJaWYgKG1vdmVkKSB7CisJICAgIG1lbWNweShFVlQuam95UHJldixheGlzLHNpemVvZihFVlQuam95UHJldikpOworCSAgICBwcyA9IF9FVlRfZGlzYWJsZUludCgpOworCSAgICBpZiAoRVZULm9sZEpveU1vdmUgIT0gLTEpIHsKKwkJLyogTW9kaWZ5IHRoZSBleGlzdGluZyBqb3lzdGljayBtb3ZlbWVudCBldmVudCAqLworCQlFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ubWVzc2FnZSA9IG5ld0J1dFN0YXRlOworCQlFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ud2hlcmVfeCA9IEVWVC5qb3lQcmV2WzBdOworCQlFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ud2hlcmVfeSA9IEVWVC5qb3lQcmV2WzFdOworCQlFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ucmVsYXRpdmVfeCA9IEVWVC5qb3lQcmV2WzJdOworCQlFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ucmVsYXRpdmVfeSA9IEVWVC5qb3lQcmV2WzNdOworCQl9CisJICAgIGVsc2UgaWYgKEVWVC5jb3VudCA8IEVWRU5UUVNJWkUpIHsKKwkJLyogQWRkIGEgbmV3IGpveXN0aWNrIG1vdmVtZW50IGV2ZW50ICovCisJCUVWVC5vbGRKb3lNb3ZlID0gRVZULmZyZWVIZWFkOworCQltZW1zZXQoJmV2dCwwLHNpemVvZihldnQpKTsKKwkJZXZ0LndoYXQgPSBFVlRfSk9ZTU9WRTsKKwkJZXZ0Lm1lc3NhZ2UgPSBFVlQuam95QnV0U3RhdGU7CisJCWV2dC53aGVyZV94ID0gRVZULmpveVByZXZbMF07CisJCWV2dC53aGVyZV95ID0gRVZULmpveVByZXZbMV07CisJCWV2dC5yZWxhdGl2ZV94ID0gRVZULmpveVByZXZbMl07CisJCWV2dC5yZWxhdGl2ZV95ID0gRVZULmpveVByZXZbM107CisJCWFkZEV2ZW50KCZldnQpOworCQl9CisJICAgIF9FVlRfcmVzdG9yZUludChwcyk7CisJICAgIH0KIAotICAgICAgICAvKiBSZWFkIHRoZSBqb3lzdGljayBidXR0b25zLCBhbmQgcG9zdCBldmVudHMgdG8gcmVmbGVjdCB0aGUgY2hhbmdlCi0gICAgICAgICAqIGluIHN0YXRlIGZvciB0aGUgam95c3RpY2sgYnV0dG9ucy4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChuZXdCdXRTdGF0ZSAhPSBFVlQuam95QnV0U3RhdGUpIHsKLSAgICAgICAgICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKSB7Ci0gICAgICAgICAgICAgICAgLyogQWRkIGEgbmV3IGpveXN0aWNrIG1vdmVtZW50IGV2ZW50ICovCi0gICAgICAgICAgICAgICAgcHMgPSBfRVZUX2Rpc2FibGVJbnQoKTsKLSAgICAgICAgICAgICAgICBtZW1zZXQoJmV2dCwwLHNpemVvZihldnQpKTsKLSAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9KT1lDTElDSzsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IG5ld0J1dFN0YXRlOwotICAgICAgICAgICAgICAgIEVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS53aGVyZV94ID0gRVZULmpveVByZXZbMF07Ci0gICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZEpveU1vdmVdLndoZXJlX3kgPSBFVlQuam95UHJldlsxXTsKLSAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ucmVsYXRpdmVfeCA9IEVWVC5qb3lQcmV2WzJdOwotICAgICAgICAgICAgICAgIEVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXS5yZWxhdGl2ZV95ID0gRVZULmpveVByZXZbM107Ci0gICAgICAgICAgICAgICAgYWRkRXZlbnQoJmV2dCk7Ci0gICAgICAgICAgICAgICAgX0VWVF9yZXN0b3JlSW50KHBzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBFVlQuam95QnV0U3RhdGUgPSBuZXdCdXRTdGF0ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCS8qIFJlYWQgdGhlIGpveXN0aWNrIGJ1dHRvbnMsIGFuZCBwb3N0IGV2ZW50cyB0byByZWZsZWN0IHRoZSBjaGFuZ2UKKwkgKiBpbiBzdGF0ZSBmb3IgdGhlIGpveXN0aWNrIGJ1dHRvbnMuCisJICovCisJaWYgKG5ld0J1dFN0YXRlICE9IEVWVC5qb3lCdXRTdGF0ZSkgeworCSAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkgeworCQkvKiBBZGQgYSBuZXcgam95c3RpY2sgbW92ZW1lbnQgZXZlbnQgKi8KKwkJcHMgPSBfRVZUX2Rpc2FibGVJbnQoKTsKKwkJbWVtc2V0KCZldnQsMCxzaXplb2YoZXZ0KSk7CisJCWV2dC53aGF0ID0gRVZUX0pPWUNMSUNLOworCQlldnQubWVzc2FnZSA9IG5ld0J1dFN0YXRlOworCQlFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ud2hlcmVfeCA9IEVWVC5qb3lQcmV2WzBdOworCQlFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ud2hlcmVfeSA9IEVWVC5qb3lQcmV2WzFdOworCQlFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ucmVsYXRpdmVfeCA9IEVWVC5qb3lQcmV2WzJdOworCQlFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0ucmVsYXRpdmVfeSA9IEVWVC5qb3lQcmV2WzNdOworCQlhZGRFdmVudCgmZXZ0KTsKKwkJX0VWVF9yZXN0b3JlSW50KHBzKTsKKwkJfQorCSAgICBFVlQuam95QnV0U3RhdGUgPSBuZXdCdXRTdGF0ZTsKKwkgICAgfQorCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTgxNSwyODcgKzgxNSwyODcgQEAKIAogICAgIC8qIFBvbGwga2V5Ym9hcmQgZXZlbnRzICovCiAgICAgd2hpbGUgKGRhdGFSZWFkeShfUE1fY29uc29sZV9mZCkgJiYgKG51bWtleXMgPSByZWFkKF9QTV9jb25zb2xlX2ZkLCBidWYsIEtCRFJFQURCVUZGRVJTSVpFKSkgPiAwKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1rZXlzOyBpKyspIHsKLSAgICAgICAgICAgIGMgPSBidWZbaV07Ci0gICAgICAgICAgICByZWxlYXNlID0gYyAmIDB4ODA7Ci0gICAgICAgICAgICBjICY9IDB4N0Y7CisJZm9yIChpID0gMDsgaSA8IG51bWtleXM7IGkrKykgeworCSAgICBjID0gYnVmW2ldOworCSAgICByZWxlYXNlID0gYyAmIDB4ODA7CisJICAgIGMgJj0gMHg3RjsKIAotICAgICAgICAgICAgLy8gVE9ETzogICAgVGhpcyBpcyB3cm9uZyEgV2UgbmVlZCB0aGlzIHRvIGJlIHRoZSB0aW1lIHN0YW1wIGF0Ci0gICAgICAgICAgICAvLyAgICAgICAgICAqKiBpbnRlcnJ1cHQgKiogdGltZSEhIE9uZSBzb2x1dGlvbiB3b3VsZCBiZSB0bwotICAgICAgICAgICAgLy8gICAgICAgICAgcHV0IHRoZSBrZXlib2FyZCBhbmQgbW91c2UgcG9sbGluZyBsb29wcyBpbnRvCi0gICAgICAgICAgICAvLyAgICAgICAgICBhIHNlcGFyYXRlIHRocmVhZCB0aGF0IGNhbiBibG9jayBvbiBJL08gdG8gdGhlCi0gICAgICAgICAgICAvLyAgICAgICAgICBuZWNlc3NheSBmaWxlIGRlc2NyaXB0b3IuCi0gICAgICAgICAgICBldnQud2hlbiA9IF9FVlRfZ2V0VGlja3MoKTsKKwkgICAgLyogVE9ETzogICAgVGhpcyBpcyB3cm9uZyEgV2UgbmVlZCB0aGlzIHRvIGJlIHRoZSB0aW1lIHN0YW1wIGF0ICovCisJICAgIC8qICAgICAgICAgICoqIGludGVycnVwdCAqKiB0aW1lISEgT25lIHNvbHV0aW9uIHdvdWxkIGJlIHRvICovCisJICAgIC8qICAgICAgICAgIHB1dCB0aGUga2V5Ym9hcmQgYW5kIG1vdXNlIHBvbGxpbmcgbG9vcHMgaW50byAqLworCSAgICAvKiAgICAgICAgICBhIHNlcGFyYXRlIHRocmVhZCB0aGF0IGNhbiBibG9jayBvbiBJL08gdG8gdGhlICovCisJICAgIC8qICAgICAgICAgIG5lY2Vzc2F5IGZpbGUgZGVzY3JpcHRvci4gKi8KKwkgICAgZXZ0LndoZW4gPSBfRVZUX2dldFRpY2tzKCk7CiAKLSAgICAgICAgICAgIGlmIChyZWxlYXNlKSB7Ci0gICAgICAgICAgICAgICAgLyogS2V5IHJlbGVhc2VkICovCi0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfS0VZVVA7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgS0JfbGVmdFNoaWZ0OgotICAgICAgICAgICAgICAgICAgICAgICAgX1BNX21vZGlmaWVycyAmPSB+RVZUX0xFRlRTSElGVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEtCX3JpZ2h0U2hpZnQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBfUE1fbW9kaWZpZXJzICY9IH5FVlRfUklHSFRTSElGVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDI5OgotICAgICAgICAgICAgICAgICAgICAgICAgX1BNX21vZGlmaWVycyAmPSB+KEVWVF9MRUZUQ1RSTHxFVlRfQ1RSTFNUQVRFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDk3OiAgICAgICAgICAgIC8qIENvbnRyb2wgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIF9QTV9tb2RpZmllcnMgJj0gfkVWVF9DVFJMU1RBVEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA1NjoKLSAgICAgICAgICAgICAgICAgICAgICAgIF9QTV9tb2RpZmllcnMgJj0gfihFVlRfTEVGVEFMVHxFVlRfQUxUU1RBVEUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOgotICAgICAgICAgICAgICAgICAgICAgICAgX1BNX21vZGlmaWVycyAmPSB+RVZUX0FMVFNUQVRFOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzID0gX1BNX21vZGlmaWVyczsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IGtleVVwTXNnW2NdOwotICAgICAgICAgICAgICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQotICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgICAgICBrZXlVcE1zZ1tjXSA9IDA7Ci0gICAgICAgICAgICAgICAgcmVwZWF0S2V5W2NdID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBLZXkgcHJlc3NlZCAqLwotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX0tFWURPV047Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgS0JfbGVmdFNoaWZ0OgotICAgICAgICAgICAgICAgICAgICAgICAgX1BNX21vZGlmaWVycyB8PSBFVlRfTEVGVFNISUZUOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgS0JfcmlnaHRTaGlmdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIF9QTV9tb2RpZmllcnMgfD0gRVZUX1JJR0hUU0hJRlQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOToKLSAgICAgICAgICAgICAgICAgICAgICAgIF9QTV9tb2RpZmllcnMgfD0gRVZUX0xFRlRDVFJMfEVWVF9DVFJMU1RBVEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA5NzogICAgICAgICAgICAvKiBDb250cm9sICovCi0gICAgICAgICAgICAgICAgICAgICAgICBfUE1fbW9kaWZpZXJzIHw9IEVWVF9DVFJMU1RBVEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA1NjoKLSAgICAgICAgICAgICAgICAgICAgICAgIF9QTV9tb2RpZmllcnMgfD0gRVZUX0xFRlRBTFR8RVZUX0FMVFNUQVRFOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOgotICAgICAgICAgICAgICAgICAgICAgICAgX1BNX21vZGlmaWVycyB8PSBFVlRfQUxUU1RBVEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBLQl9jYXBzTG9jazogICAvKiBDYXBzIExvY2sgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIF9QTV9sZWRzIF49IExFRF9DQVA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpb2N0bChfUE1fY29uc29sZV9mZCwgS0RTRVRMRUQsIF9QTV9sZWRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEtCX251bUxvY2s6ICAgIC8qIE51bSBMb2NrICovCi0gICAgICAgICAgICAgICAgICAgICAgICBfUE1fbGVkcyBePSBMRURfTlVNOwotICAgICAgICAgICAgICAgICAgICAgICAgaW9jdGwoX1BNX2NvbnNvbGVfZmQsIEtEU0VUTEVELCBfUE1fbGVkcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBLQl9zY3JvbGxMb2NrOiAvKiBTY3JvbGwgTG9jayAqLwotICAgICAgICAgICAgICAgICAgICAgICAgX1BNX2xlZHMgXj0gTEVEX1NDUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBLRFNFVExFRCwgX1BNX2xlZHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzID0gX1BNX21vZGlmaWVyczsKLSAgICAgICAgICAgICAgICBpZiAoa2V5VXBNc2dbY10pIHsKLSAgICAgICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfS0VZUkVQRUFUOwotICAgICAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IGtleVVwTXNnW2NdIHwgKHJlcGVhdEtleVtjXSsrIDw8IDE2KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgYXNjOworCSAgICBpZiAocmVsZWFzZSkgeworCQkvKiBLZXkgcmVsZWFzZWQgKi8KKwkJZXZ0LndoYXQgPSBFVlRfS0VZVVA7CisJCXN3aXRjaCAoYykgeworCQkgICAgY2FzZSBLQl9sZWZ0U2hpZnQ6CisJCQlfUE1fbW9kaWZpZXJzICY9IH5FVlRfTEVGVFNISUZUOworCQkJYnJlYWs7CisJCSAgICBjYXNlIEtCX3JpZ2h0U2hpZnQ6CisJCQlfUE1fbW9kaWZpZXJzICY9IH5FVlRfUklHSFRTSElGVDsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAyOToKKwkJCV9QTV9tb2RpZmllcnMgJj0gfihFVlRfTEVGVENUUkx8RVZUX0NUUkxTVEFURSk7CisJCQlicmVhazsKKwkJICAgIGNhc2UgOTc6ICAgICAgICAgICAgLyogQ29udHJvbCAqLworCQkJX1BNX21vZGlmaWVycyAmPSB+RVZUX0NUUkxTVEFURTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSA1NjoKKwkJCV9QTV9tb2RpZmllcnMgJj0gfihFVlRfTEVGVEFMVHxFVlRfQUxUU1RBVEUpOworCQkJYnJlYWs7CisJCSAgICBjYXNlIDEwMDoKKwkJCV9QTV9tb2RpZmllcnMgJj0gfkVWVF9BTFRTVEFURTsKKwkJCWJyZWFrOworCQkgICAgZGVmYXVsdDoKKwkJICAgIH0KKwkJZXZ0Lm1vZGlmaWVycyA9IF9QTV9tb2RpZmllcnM7CisJCWV2dC5tZXNzYWdlID0ga2V5VXBNc2dbY107CisJCWlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQorCQkgICAgYWRkRXZlbnQoJmV2dCk7CisJCWtleVVwTXNnW2NdID0gMDsKKwkJcmVwZWF0S2V5W2NdID0gMDsKKwkJfQorCSAgICBlbHNlIHsKKwkJLyogS2V5IHByZXNzZWQgKi8KKwkJZXZ0LndoYXQgPSBFVlRfS0VZRE9XTjsKKwkJc3dpdGNoIChjKSB7CisJCSAgICBjYXNlIEtCX2xlZnRTaGlmdDoKKwkJCV9QTV9tb2RpZmllcnMgfD0gRVZUX0xFRlRTSElGVDsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBLQl9yaWdodFNoaWZ0OgorCQkJX1BNX21vZGlmaWVycyB8PSBFVlRfUklHSFRTSElGVDsKKwkJCWJyZWFrOworCQkgICAgY2FzZSAyOToKKwkJCV9QTV9tb2RpZmllcnMgfD0gRVZUX0xFRlRDVFJMfEVWVF9DVFJMU1RBVEU7CisJCQlicmVhazsKKwkJICAgIGNhc2UgOTc6ICAgICAgICAgICAgLyogQ29udHJvbCAqLworCQkJX1BNX21vZGlmaWVycyB8PSBFVlRfQ1RSTFNUQVRFOworCQkJYnJlYWs7CisJCSAgICBjYXNlIDU2OgorCQkJX1BNX21vZGlmaWVycyB8PSBFVlRfTEVGVEFMVHxFVlRfQUxUU1RBVEU7CisJCQlicmVhazsKKwkJICAgIGNhc2UgMTAwOgorCQkJX1BNX21vZGlmaWVycyB8PSBFVlRfQUxUU1RBVEU7CisJCQlicmVhazsKKwkJICAgIGNhc2UgS0JfY2Fwc0xvY2s6ICAgLyogQ2FwcyBMb2NrICovCisJCQlfUE1fbGVkcyBePSBMRURfQ0FQOworCQkJaW9jdGwoX1BNX2NvbnNvbGVfZmQsIEtEU0VUTEVELCBfUE1fbGVkcyk7CisJCQlicmVhazsKKwkJICAgIGNhc2UgS0JfbnVtTG9jazogICAgLyogTnVtIExvY2sgKi8KKwkJCV9QTV9sZWRzIF49IExFRF9OVU07CisJCQlpb2N0bChfUE1fY29uc29sZV9mZCwgS0RTRVRMRUQsIF9QTV9sZWRzKTsKKwkJCWJyZWFrOworCQkgICAgY2FzZSBLQl9zY3JvbGxMb2NrOiAvKiBTY3JvbGwgTG9jayAqLworCQkJX1BNX2xlZHMgXj0gTEVEX1NDUjsKKwkJCWlvY3RsKF9QTV9jb25zb2xlX2ZkLCBLRFNFVExFRCwgX1BNX2xlZHMpOworCQkJYnJlYWs7CisJCSAgICBkZWZhdWx0OgorCQkgICAgfQorCQlldnQubW9kaWZpZXJzID0gX1BNX21vZGlmaWVyczsKKwkJaWYgKGtleVVwTXNnW2NdKSB7CisJCSAgICBldnQud2hhdCA9IEVWVF9LRVlSRVBFQVQ7CisJCSAgICBldnQubWVzc2FnZSA9IGtleVVwTXNnW2NdIHwgKHJlcGVhdEtleVtjXSsrIDw8IDE2KTsKKwkJICAgIH0KKwkJZWxzZSB7CisJCSAgICBpbnQgYXNjOwogCi0gICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gZ2V0S2V5TWFwcGluZyhrZXltYXBzLCBOQl9LRVlNQVBTLCBjKSA8PCA4OwotICAgICAgICAgICAgICAgICAgICBrZS5rYl9pbmRleCA9IGM7Ci0gICAgICAgICAgICAgICAgICAgIGtlLmtiX3RhYmxlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChfUE1fbW9kaWZpZXJzICYgRVZUX1NISUZUS0VZKSB8fCAoX1BNX2xlZHMgJiBMRURfQ0FQKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGtlLmtiX3RhYmxlIHw9IEtfU0hJRlRUQUI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChfUE1fbW9kaWZpZXJzICYgKEVWVF9MRUZUQUxUIHwgRVZUX0FMVFNUQVRFKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGtlLmtiX3RhYmxlIHw9IEtfQUxUVEFCOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwoX1BNX2NvbnNvbGVfZmQsIEtER0tCRU5ULCAodW5zaWduZWQgbG9uZykma2UpPDApCi0gICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoImlvY3RsKEtER0tCRU5UKSIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKF9QTV9sZWRzICYgTEVEX05VTSkgJiYgKGdldEtleU1hcHBpbmcoa2V5cGFkLCBOQl9LRVlQQUQsIGMpIT1jKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXNjID0gZ2V0S2V5TWFwcGluZyhrZXlwYWQsIE5CX0tFWVBBRCwgYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjID0gQVNDSUlfYmFja3NwYWNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE1OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2MgPSBBU0NJSV90YWI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5NjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjID0gQVNDSUlfZW50ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjID0gQVNDSUlfZXNjOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzYyA9IGtlLmtiX3ZhbHVlICYgMHhGRjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzYyA8IDB4MUIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2MgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoX1BNX21vZGlmaWVycyAmIChFVlRfQ1RSTFNUQVRFfEVWVF9MRUZUQ1RSTCkpICYmIGlzYWxwaGEoYXNjKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlIHw9IHRvdXBwZXIoYXNjKSAtICdBJyArIDE7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlIHw9IGFzYzsKLSAgICAgICAgICAgICAgICAgICAga2V5VXBNc2dbY10gPSBldnQubWVzc2FnZTsKLSAgICAgICAgICAgICAgICAgICAgcmVwZWF0S2V5W2NdKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkKLSAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoJmV2dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJCSAgICBldnQubWVzc2FnZSA9IGdldEtleU1hcHBpbmcoa2V5bWFwcywgTkJfS0VZTUFQUywgYykgPDwgODsKKwkJICAgIGtlLmtiX2luZGV4ID0gYzsKKwkJICAgIGtlLmtiX3RhYmxlID0gMDsKKwkJICAgIGlmICgoX1BNX21vZGlmaWVycyAmIEVWVF9TSElGVEtFWSkgfHwgKF9QTV9sZWRzICYgTEVEX0NBUCkpCisJCQlrZS5rYl90YWJsZSB8PSBLX1NISUZUVEFCOworCQkgICAgaWYgKF9QTV9tb2RpZmllcnMgJiAoRVZUX0xFRlRBTFQgfCBFVlRfQUxUU1RBVEUpKQorCQkJa2Uua2JfdGFibGUgfD0gS19BTFRUQUI7CisJCSAgICBpZiAoaW9jdGwoX1BNX2NvbnNvbGVfZmQsIEtER0tCRU5ULCAodW5zaWduZWQgbG9uZykma2UpPDApCisJCQlwZXJyb3IoImlvY3RsKEtER0tCRU5UKSIpOworCQkgICAgaWYgKChfUE1fbGVkcyAmIExFRF9OVU0pICYmIChnZXRLZXlNYXBwaW5nKGtleXBhZCwgTkJfS0VZUEFELCBjKSE9YykpIHsKKwkJCWFzYyA9IGdldEtleU1hcHBpbmcoa2V5cGFkLCBOQl9LRVlQQUQsIGMpOworCQkJfQorCQkgICAgZWxzZSB7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCSAgICBjYXNlIDE0OgorCQkJCWFzYyA9IEFTQ0lJX2JhY2tzcGFjZTsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIDE1OgorCQkJCWFzYyA9IEFTQ0lJX3RhYjsKKwkJCQlicmVhazsKKwkJCSAgICBjYXNlIDI4OgorCQkJICAgIGNhc2UgOTY6CisJCQkJYXNjID0gQVNDSUlfZW50ZXI7CisJCQkJYnJlYWs7CisJCQkgICAgY2FzZSAxOgorCQkJCWFzYyA9IEFTQ0lJX2VzYzsKKwkJCSAgICBkZWZhdWx0OgorCQkJCWFzYyA9IGtlLmtiX3ZhbHVlICYgMHhGRjsKKwkJCQlpZiAoYXNjIDwgMHgxQikKKwkJCQkgICAgYXNjID0gMDsKKwkJCQlicmVhazsKKwkJCSAgICB9CisJCQl9CisJCSAgICBpZiAoKF9QTV9tb2RpZmllcnMgJiAoRVZUX0NUUkxTVEFURXxFVlRfTEVGVENUUkwpKSAmJiBpc2FscGhhKGFzYykpCisJCQlldnQubWVzc2FnZSB8PSB0b3VwcGVyKGFzYykgLSAnQScgKyAxOworCQkgICAgZWxzZQorCQkJZXZ0Lm1lc3NhZ2UgfD0gYXNjOworCQkgICAga2V5VXBNc2dbY10gPSBldnQubWVzc2FnZTsKKwkJICAgIHJlcGVhdEtleVtjXSsrOworCQkgICAgfQorCQlpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkKKwkJICAgIGFkZEV2ZW50KCZldnQpOworCQl9CisJICAgIH0KKwl9CiAKICAgICAvKiBQb2xsIG1vdXNlIGV2ZW50cyAqLwogICAgIGlmIChfRVZUX21vdXNlX2ZkKSB7Ci0gICAgICAgIGludCAgICAgICAgIGR4LCBkeSwgYnV0czsKLSAgICAgICAgc3RhdGljIGludCAgb2xkYnV0czsKKwlpbnQgICAgICAgICBkeCwgZHksIGJ1dHM7CisJc3RhdGljIGludCAgb2xkYnV0czsKIAotICAgICAgICB3aGlsZSAoZGF0YVJlYWR5KF9FVlRfbW91c2VfZmQpKSB7Ci0gICAgICAgICAgICBpZiAocmVhZE1vdXNlRGF0YSgmYnV0cywgJmR4LCAmZHkpKSB7Ci0gICAgICAgICAgICAgICAgRVZULm14ICs9IGR4OwotICAgICAgICAgICAgICAgIEVWVC5teSArPSBkeTsKLSAgICAgICAgICAgICAgICBpZiAoRVZULm14IDwgMCkgRVZULm14ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoRVZULm15IDwgMCkgRVZULm15ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoRVZULm14ID4gcmFuZ2VfeCkgRVZULm14ID0gcmFuZ2VfeDsKLSAgICAgICAgICAgICAgICBpZiAoRVZULm15ID4gcmFuZ2VfeSkgRVZULm15ID0gcmFuZ2VfeTsKLSAgICAgICAgICAgICAgICBldnQud2hlcmVfeCA9IEVWVC5teDsKLSAgICAgICAgICAgICAgICBldnQud2hlcmVfeSA9IEVWVC5teTsKLSAgICAgICAgICAgICAgICBldnQucmVsYXRpdmVfeCA9IGR4OwotICAgICAgICAgICAgICAgIGV2dC5yZWxhdGl2ZV95ID0gZHk7CisJd2hpbGUgKGRhdGFSZWFkeShfRVZUX21vdXNlX2ZkKSkgeworCSAgICBpZiAocmVhZE1vdXNlRGF0YSgmYnV0cywgJmR4LCAmZHkpKSB7CisJCUVWVC5teCArPSBkeDsKKwkJRVZULm15ICs9IGR5OworCQlpZiAoRVZULm14IDwgMCkgRVZULm14ID0gMDsKKwkJaWYgKEVWVC5teSA8IDApIEVWVC5teSA9IDA7CisJCWlmIChFVlQubXggPiByYW5nZV94KSBFVlQubXggPSByYW5nZV94OworCQlpZiAoRVZULm15ID4gcmFuZ2VfeSkgRVZULm15ID0gcmFuZ2VfeTsKKwkJZXZ0LndoZXJlX3ggPSBFVlQubXg7CisJCWV2dC53aGVyZV95ID0gRVZULm15OworCQlldnQucmVsYXRpdmVfeCA9IGR4OworCQlldnQucmVsYXRpdmVfeSA9IGR5OwogCi0gICAgICAgICAgICAgICAgLy8gVE9ETzogICAgVGhpcyBpcyB3cm9uZyEgV2UgbmVlZCB0aGlzIHRvIGJlIHRoZSB0aW1lIHN0YW1wIGF0Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgKiogaW50ZXJydXB0ICoqIHRpbWUhISBPbmUgc29sdXRpb24gd291bGQgYmUgdG8KLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICBwdXQgdGhlIGtleWJvYXJkIGFuZCBtb3VzZSBwb2xsaW5nIGxvb3BzIGludG8KLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICBhIHNlcGFyYXRlIHRocmVhZCB0aGF0IGNhbiBibG9jayBvbiBJL08gdG8gdGhlCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgbmVjZXNzYXkgZmlsZSBkZXNjcmlwdG9yLgotICAgICAgICAgICAgICAgIGV2dC53aGVuID0gX0VWVF9nZXRUaWNrcygpOwotICAgICAgICAgICAgICAgIGV2dC5tb2RpZmllcnMgPSBfUE1fbW9kaWZpZXJzOwotICAgICAgICAgICAgICAgIGlmIChidXRzICYgNCkKLSAgICAgICAgICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTEVGVEJVVDsKLSAgICAgICAgICAgICAgICBpZiAoYnV0cyAmIDEpCi0gICAgICAgICAgICAgICAgICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX1JJR0hUQlVUOwotICAgICAgICAgICAgICAgIGlmIChidXRzICYgMikKLSAgICAgICAgICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTUlERExFQlVUOworCQkvKiBUT0RPOiAgICBUaGlzIGlzIHdyb25nISBXZSBuZWVkIHRoaXMgdG8gYmUgdGhlIHRpbWUgc3RhbXAgYXQgKi8KKwkJLyogICAgICAgICAgKiogaW50ZXJydXB0ICoqIHRpbWUhISBPbmUgc29sdXRpb24gd291bGQgYmUgdG8gKi8KKwkJLyogICAgICAgICAgcHV0IHRoZSBrZXlib2FyZCBhbmQgbW91c2UgcG9sbGluZyBsb29wcyBpbnRvICovCisJCS8qICAgICAgICAgIGEgc2VwYXJhdGUgdGhyZWFkIHRoYXQgY2FuIGJsb2NrIG9uIEkvTyB0byB0aGUgKi8KKwkJLyogICAgICAgICAgbmVjZXNzYXkgZmlsZSBkZXNjcmlwdG9yLiAqLworCQlldnQud2hlbiA9IF9FVlRfZ2V0VGlja3MoKTsKKwkJZXZ0Lm1vZGlmaWVycyA9IF9QTV9tb2RpZmllcnM7CisJCWlmIChidXRzICYgNCkKKwkJICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX0xFRlRCVVQ7CisJCWlmIChidXRzICYgMSkKKwkJICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX1JJR0hUQlVUOworCQlpZiAoYnV0cyAmIDIpCisJCSAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9NSURETEVCVVQ7CiAKLSAgICAgICAgICAgICAgICAvKiBMZWZ0IGNsaWNrIGV2ZW50cyAqLwotICAgICAgICAgICAgICAgIGlmICgoYnV0cyY0KSAhPSAob2xkYnV0cyY0KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYnV0cyY0KQotICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRVVQOwotICAgICAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9MRUZUQk1BU0s7Ci0gICAgICAgICAgICAgICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoJmV2dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKwkJLyogTGVmdCBjbGljayBldmVudHMgKi8KKwkJaWYgKChidXRzJjQpICE9IChvbGRidXRzJjQpKSB7CisJCSAgICBpZiAoYnV0cyY0KQorCQkJZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOOworCQkgICAgZWxzZQorCQkJZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKKwkJICAgIGV2dC5tZXNzYWdlID0gRVZUX0xFRlRCTUFTSzsKKwkJICAgIEVWVC5vbGRNb3ZlID0gLTE7CisJCSAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkKKwkJCWFkZEV2ZW50KCZldnQpOworCQkgICAgfQogCi0gICAgICAgICAgICAgICAgLyogUmlnaHQgY2xpY2sgZXZlbnRzICovCi0gICAgICAgICAgICAgICAgaWYgKChidXRzJjEpICE9IChvbGRidXRzJjEpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChidXRzJjEpCi0gICAgICAgICAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRURPV047Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFVVA7Ci0gICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gRVZUX1JJR0hUQk1BU0s7Ci0gICAgICAgICAgICAgICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoJmV2dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKwkJLyogUmlnaHQgY2xpY2sgZXZlbnRzICovCisJCWlmICgoYnV0cyYxKSAhPSAob2xkYnV0cyYxKSkgeworCQkgICAgaWYgKGJ1dHMmMSkKKwkJCWV2dC53aGF0ID0gRVZUX01PVVNFRE9XTjsKKwkJICAgIGVsc2UKKwkJCWV2dC53aGF0ID0gRVZUX01PVVNFVVA7CisJCSAgICBldnQubWVzc2FnZSA9IEVWVF9SSUdIVEJNQVNLOworCQkgICAgRVZULm9sZE1vdmUgPSAtMTsKKwkJICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQorCQkJYWRkRXZlbnQoJmV2dCk7CisJCSAgICB9CiAKLSAgICAgICAgICAgICAgICAvKiBNaWRkbGUgY2xpY2sgZXZlbnRzICovCi0gICAgICAgICAgICAgICAgaWYgKChidXRzJjIpICE9IChvbGRidXRzJjIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChidXRzJjIpCi0gICAgICAgICAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRURPV047Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFVVA7Ci0gICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gRVZUX01JRERMRUJNQVNLOwotICAgICAgICAgICAgICAgICAgICBFVlQub2xkTW92ZSA9IC0xOwotICAgICAgICAgICAgICAgICAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KCZldnQpOwotICAgICAgICAgICAgICAgICAgICB9CisJCS8qIE1pZGRsZSBjbGljayBldmVudHMgKi8KKwkJaWYgKChidXRzJjIpICE9IChvbGRidXRzJjIpKSB7CisJCSAgICBpZiAoYnV0cyYyKQorCQkJZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOOworCQkgICAgZWxzZQorCQkJZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKKwkJICAgIGV2dC5tZXNzYWdlID0gRVZUX01JRERMRUJNQVNLOworCQkgICAgRVZULm9sZE1vdmUgPSAtMTsKKwkJICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQorCQkJYWRkRXZlbnQoJmV2dCk7CisJCSAgICB9CiAKLSAgICAgICAgICAgICAgICAvKiBNb3VzZSBtb3ZlbWVudCBldmVudCAqLwotICAgICAgICAgICAgICAgIGlmIChkeCB8fCBkeSkgewotICAgICAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRU1PVkU7Ci0gICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVWVC5vbGRNb3ZlICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBNb2RpZnkgZXhpc3RpbmcgbW92ZW1lbnQgZXZlbnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIEVWVC5ldnRxW0VWVC5vbGRNb3ZlXS53aGVyZV94ID0gZXZ0LndoZXJlX3g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeSA9IGV2dC53aGVyZV95OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNhdmUgaWQgb2YgdGhpcyBtb3ZlbWVudCBldmVudCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgRVZULm9sZE1vdmUgPSBFVlQuZnJlZUhlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9sZGJ1dHMgPSBidXRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQkvKiBNb3VzZSBtb3ZlbWVudCBldmVudCAqLworCQlpZiAoZHggfHwgZHkpIHsKKwkJICAgIGV2dC53aGF0ID0gRVZUX01PVVNFTU9WRTsKKwkJICAgIGV2dC5tZXNzYWdlID0gMDsKKwkJICAgIGlmIChFVlQub2xkTW92ZSAhPSAtMSkgeworCQkJLyogTW9kaWZ5IGV4aXN0aW5nIG1vdmVtZW50IGV2ZW50ICovCisJCQlFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeCA9IGV2dC53aGVyZV94OworCQkJRVZULmV2dHFbRVZULm9sZE1vdmVdLndoZXJlX3kgPSBldnQud2hlcmVfeTsKKwkJCX0KKwkJICAgIGVsc2UgeworCQkJLyogU2F2ZSBpZCBvZiB0aGlzIG1vdmVtZW50IGV2ZW50ICovCisJCQlFVlQub2xkTW92ZSA9IEVWVC5mcmVlSGVhZDsKKwkJCWlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQorCQkJICAgIGFkZEV2ZW50KCZldnQpOworCQkJfQorCQkgICAgfQorCQlvbGRidXRzID0gYnV0czsKKwkJfQorCSAgICB9CisJfQogCiAjaWZkZWYgVVNFX09TX0pPWVNUSUNLCi0gICAgLy8gUG9sbCBqb3lzdGljayBldmVudHMgdXNpbmcgdGhlIDEueCBqb3lzdGljayBkcml2ZXIgQVBJIGluIHRoZSAyLjIga2VybmVscworICAgIC8qIFBvbGwgam95c3RpY2sgZXZlbnRzIHVzaW5nIHRoZSAxLnggam95c3RpY2sgZHJpdmVyIEFQSSBpbiB0aGUgMi4yIGtlcm5lbHMgKi8KICAgICBpZiAoanNfdmVyc2lvbiAmIH4weGZmZmYpIHsKLSAgICAgICAgc3RhdGljIHN0cnVjdCBqc19ldmVudCAganM7CisJc3RhdGljIHN0cnVjdCBqc19ldmVudCAganM7CiAKLSAgICAgICAgLyogUmVhZCBqb3lzdGljayBheGlzIDAgKi8KLSAgICAgICAgZXZ0LndoZW4gPSAwOwotICAgICAgICBldnQubW9kaWZpZXJzID0gX1BNX21vZGlmaWVyczsKLSAgICAgICAgaWYgKGpveXN0aWNrMF9mZCAmJiBkYXRhUmVhZHkoam95c3RpY2swX2ZkKSAmJgotICAgICAgICAgICAgICAgIHJlYWQoam95c3RpY2swX2ZkLCAmanMsIHNpemVvZihqcykpID09IHNpemVvZihqcykpIHsKLSAgICAgICAgICAgIGlmIChqcy50eXBlICYgSlNfRVZFTlRfQlVUVE9OKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGpzLm51bWJlciA8IDIpIHsgLyogT25seSAyIGJ1dHRvbnMgZm9yIG5vdyA6KCAqLwotICAgICAgICAgICAgICAgICAgICBidXRzMFtqcy5udW1iZXJdID0ganMudmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX0pPWUNMSUNLOwotICAgICAgICAgICAgICAgICAgICBtYWtlSm95RXZlbnQoJmV2dCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoJmV2dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChqcy50eXBlICYgSlNfRVZFTlRfQVhJUykgewotICAgICAgICAgICAgICAgIGF4aXMwW2pzLm51bWJlcl0gPSBzY2FsZUpveUF4aXMoanMudmFsdWUsanMubnVtYmVyKTsKLSAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9KT1lNT1ZFOwotICAgICAgICAgICAgICAgIGlmIChFVlQub2xkSm95TW92ZSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBtYWtlSm95RXZlbnQoJkVWVC5ldnRxW0VWVC5vbGRKb3lNb3ZlXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVWVC5vbGRKb3lNb3ZlID0gRVZULmZyZWVIZWFkOwotICAgICAgICAgICAgICAgICAgICBtYWtlSm95RXZlbnQoJmV2dCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KCZldnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorCS8qIFJlYWQgam95c3RpY2sgYXhpcyAwICovCisJZXZ0LndoZW4gPSAwOworCWV2dC5tb2RpZmllcnMgPSBfUE1fbW9kaWZpZXJzOworCWlmIChqb3lzdGljazBfZmQgJiYgZGF0YVJlYWR5KGpveXN0aWNrMF9mZCkgJiYKKwkJcmVhZChqb3lzdGljazBfZmQsICZqcywgc2l6ZW9mKGpzKSkgPT0gc2l6ZW9mKGpzKSkgeworCSAgICBpZiAoanMudHlwZSAmIEpTX0VWRU5UX0JVVFRPTikgeworCQlpZiAoanMubnVtYmVyIDwgMikgeyAvKiBPbmx5IDIgYnV0dG9ucyBmb3Igbm93IDooICovCisJCSAgICBidXRzMFtqcy5udW1iZXJdID0ganMudmFsdWU7CisJCSAgICBldnQud2hhdCA9IEVWVF9KT1lDTElDSzsKKwkJICAgIG1ha2VKb3lFdmVudCgmZXZ0KTsKKwkJICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQorCQkJYWRkRXZlbnQoJmV2dCk7CisJCSAgICB9CisJCX0KKwkgICAgZWxzZSBpZiAoanMudHlwZSAmIEpTX0VWRU5UX0FYSVMpIHsKKwkJYXhpczBbanMubnVtYmVyXSA9IHNjYWxlSm95QXhpcyhqcy52YWx1ZSxqcy5udW1iZXIpOworCQlldnQud2hhdCA9IEVWVF9KT1lNT1ZFOworCQlpZiAoRVZULm9sZEpveU1vdmUgIT0gLTEpIHsKKwkJICAgIG1ha2VKb3lFdmVudCgmRVZULmV2dHFbRVZULm9sZEpveU1vdmVdKTsKKwkJICAgIH0KKwkJZWxzZSBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkgeworCQkgICAgRVZULm9sZEpveU1vdmUgPSBFVlQuZnJlZUhlYWQ7CisJCSAgICBtYWtlSm95RXZlbnQoJmV2dCk7CisJCSAgICBhZGRFdmVudCgmZXZ0KTsKKwkJICAgIH0KKwkJfQorCSAgICB9CiAKLSAgICAgICAgLyogUmVhZCBqb3lzdGljayBheGlzIDEgKi8KLSAgICAgICAgaWYgKGpveXN0aWNrMV9mZCAmJiBkYXRhUmVhZHkoam95c3RpY2sxX2ZkKSAmJgotICAgICAgICAgICAgICAgIHJlYWQoam95c3RpY2sxX2ZkLCAmanMsIHNpemVvZihqcykpPT1zaXplb2YoanMpKSB7Ci0gICAgICAgICAgICBpZiAoanMudHlwZSAmIEpTX0VWRU5UX0JVVFRPTikgewotICAgICAgICAgICAgICAgIGlmIChqcy5udW1iZXIgPCAyKSB7IC8qIE9ubHkgMiBidXR0b25zIGZvciBub3cgOiggKi8KLSAgICAgICAgICAgICAgICAgICAgYnV0czFbanMubnVtYmVyXSA9IGpzLnZhbHVlOwotICAgICAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9KT1lDTElDSzsKLSAgICAgICAgICAgICAgICAgICAgbWFrZUpveUV2ZW50KCZldnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KCZldnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoanMudHlwZSAmIEpTX0VWRU5UX0FYSVMpIHsKLSAgICAgICAgICAgICAgICBheGlzMVtqcy5udW1iZXJdID0gc2NhbGVKb3lBeGlzKGpzLnZhbHVlLGpzLm51bWJlcjw8Mik7Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfSk9ZTU9WRTsKLSAgICAgICAgICAgICAgICBpZiAoRVZULm9sZEpveU1vdmUgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgbWFrZUpveUV2ZW50KCZFVlQuZXZ0cVtFVlQub2xkSm95TW92ZV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkgewotICAgICAgICAgICAgICAgICAgICBFVlQub2xkSm95TW92ZSA9IEVWVC5mcmVlSGVhZDsKLSAgICAgICAgICAgICAgICAgICAgbWFrZUpveUV2ZW50KCZldnQpOwotICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCS8qIFJlYWQgam95c3RpY2sgYXhpcyAxICovCisJaWYgKGpveXN0aWNrMV9mZCAmJiBkYXRhUmVhZHkoam95c3RpY2sxX2ZkKSAmJgorCQlyZWFkKGpveXN0aWNrMV9mZCwgJmpzLCBzaXplb2YoanMpKT09c2l6ZW9mKGpzKSkgeworCSAgICBpZiAoanMudHlwZSAmIEpTX0VWRU5UX0JVVFRPTikgeworCQlpZiAoanMubnVtYmVyIDwgMikgeyAvKiBPbmx5IDIgYnV0dG9ucyBmb3Igbm93IDooICovCisJCSAgICBidXRzMVtqcy5udW1iZXJdID0ganMudmFsdWU7CisJCSAgICBldnQud2hhdCA9IEVWVF9KT1lDTElDSzsKKwkJICAgIG1ha2VKb3lFdmVudCgmZXZ0KTsKKwkJICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQorCQkJYWRkRXZlbnQoJmV2dCk7CisJCSAgICB9CisJCX0KKwkgICAgZWxzZSBpZiAoanMudHlwZSAmIEpTX0VWRU5UX0FYSVMpIHsKKwkJYXhpczFbanMubnVtYmVyXSA9IHNjYWxlSm95QXhpcyhqcy52YWx1ZSxqcy5udW1iZXI8PDIpOworCQlldnQud2hhdCA9IEVWVF9KT1lNT1ZFOworCQlpZiAoRVZULm9sZEpveU1vdmUgIT0gLTEpIHsKKwkJICAgIG1ha2VKb3lFdmVudCgmRVZULmV2dHFbRVZULm9sZEpveU1vdmVdKTsKKwkJICAgIH0KKwkJZWxzZSBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkgeworCQkgICAgRVZULm9sZEpveU1vdmUgPSBFVlQuZnJlZUhlYWQ7CisJCSAgICBtYWtlSm95RXZlbnQoJmV2dCk7CisJCSAgICBhZGRFdmVudCgmZXZ0KTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQogI2VuZGlmCiB9CiAKQEAgLTExMjIsNyArMTEyMiw3IEBACiB7CiAgICAgc3RydWN0IHRlcm1pb3MgdHR5OwogICAgIGNoYXIgKmM7Ci0gIAorCiAgICAgdGNnZXRhdHRyKGZkLCAmdHR5KTsKICAgICB0dHkuY19pZmxhZyA9IElHTkJSSyB8IElHTlBBUjsKICAgICB0dHkuY19vZmxhZyA9IDA7CkBAIC0xMTMxLDIwICsxMTMxLDIwIEBACiAgICAgdHR5LmNfY2NbVlRJTUVdID0gMDsKICAgICB0dHkuY19jY1tWTUlOXSA9IDE7CiAgICAgc3dpdGNoIChvbGQpIHsKLSAgICAgICAgY2FzZSA5NjAwOiAgdHR5LmNfY2ZsYWcgPSBmbGFncyB8IEI5NjAwOyBicmVhazsKLSAgICAgICAgY2FzZSA0ODAwOiAgdHR5LmNfY2ZsYWcgPSBmbGFncyB8IEI0ODAwOyBicmVhazsKLSAgICAgICAgY2FzZSAyNDAwOiAgdHR5LmNfY2ZsYWcgPSBmbGFncyB8IEIyNDAwOyBicmVhazsKLSAgICAgICAgY2FzZSAxMjAwOgotICAgICAgICBkZWZhdWx0OiAgICB0dHkuY19jZmxhZyA9IGZsYWdzIHwgQjEyMDA7IGJyZWFrOwotICAgICAgICB9CisJY2FzZSA5NjAwOiAgdHR5LmNfY2ZsYWcgPSBmbGFncyB8IEI5NjAwOyBicmVhazsKKwljYXNlIDQ4MDA6ICB0dHkuY19jZmxhZyA9IGZsYWdzIHwgQjQ4MDA7IGJyZWFrOworCWNhc2UgMjQwMDogIHR0eS5jX2NmbGFnID0gZmxhZ3MgfCBCMjQwMDsgYnJlYWs7CisJY2FzZSAxMjAwOgorCWRlZmF1bHQ6ICAgIHR0eS5jX2NmbGFnID0gZmxhZ3MgfCBCMTIwMDsgYnJlYWs7CisJfQogICAgIHRjc2V0YXR0cihmZCwgVENTQUZMVVNILCAmdHR5KTsKICAgICBzd2l0Y2ggKG5ldykgewotICAgICAgICBjYXNlIDk2MDA6ICBjID0gIipxIjsgIHR0eS5jX2NmbGFnID0gZmxhZ3MgfCBCOTYwMDsgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDgwMDogIGMgPSAiKnAiOyAgdHR5LmNfY2ZsYWcgPSBmbGFncyB8IEI0ODAwOyBicmVhazsKLSAgICAgICAgY2FzZSAyNDAwOiAgYyA9ICIqbyI7ICB0dHkuY19jZmxhZyA9IGZsYWdzIHwgQjI0MDA7IGJyZWFrOwotICAgICAgICBjYXNlIDEyMDA6Ci0gICAgICAgIGRlZmF1bHQ6ICAgIGMgPSAiKm4iOyAgdHR5LmNfY2ZsYWcgPSBmbGFncyB8IEIxMjAwOyBicmVhazsKLSAgICAgICAgfQorCWNhc2UgOTYwMDogIGMgPSAiKnEiOyAgdHR5LmNfY2ZsYWcgPSBmbGFncyB8IEI5NjAwOyBicmVhazsKKwljYXNlIDQ4MDA6ICBjID0gIipwIjsgIHR0eS5jX2NmbGFnID0gZmxhZ3MgfCBCNDgwMDsgYnJlYWs7CisJY2FzZSAyNDAwOiAgYyA9ICIqbyI7ICB0dHkuY19jZmxhZyA9IGZsYWdzIHwgQjI0MDA7IGJyZWFrOworCWNhc2UgMTIwMDoKKwlkZWZhdWx0OiAgICBjID0gIipuIjsgIHR0eS5jX2NmbGFnID0gZmxhZ3MgfCBCMTIwMDsgYnJlYWs7CisJfQogICAgIHdyaXRlKGZkLCBjLCAyKTsKICAgICB1c2xlZXAoMTAwMDAwKTsKICAgICB0Y3NldGF0dHIoZmQsIFRDU0FGTFVTSCwgJnR0eSk7CkBAIC0xMTYxLDcgKzExNjEsNyBAQAogCiAgICAgLyogQ2hhbmdlIGZyb20gYW55IGF2YWlsYWJsZSBzcGVlZCB0byB0aGUgY2hvc2VuIG9uZSAqLwogICAgIGZvciAoaSA9IDk2MDA7IGkgPj0gMTIwMDsgaSAvPSAyKQotICAgICAgICBzZXRzcGVlZChfRVZUX21vdXNlX2ZkLCBpLCBvcHRfYmF1ZCwgbW91c2VfaW5mb3NbbW91c2VfZHJpdmVyXS5mbGFncyk7CisJc2V0c3BlZWQoX0VWVF9tb3VzZV9mZCwgaSwgb3B0X2JhdWQsIG1vdXNlX2luZm9zW21vdXNlX2RyaXZlcl0uZmxhZ3MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTE3MywyOSArMTE3MywyOSBAQAogICAgIGludCAgICAgICAgIGk7CiAgICAgc3RydWN0IHN0YXQgYnVmOwogICAgIGludCAgICAgICAgIGJ1c21vdXNlOwotICAgIAorCiAgICAgLyogaXMgdGhpcyBhIHNlcmlhbC0gb3IgYSBidXMtIG1vdXNlPyAqLwogICAgIGlmIChmc3RhdChfRVZUX21vdXNlX2ZkLCZidWYpID09IC0xKQotICAgICAgICBwZXJyb3IoImZzdGF0Iik7CisJcGVycm9yKCJmc3RhdCIpOwogICAgIGkgPSBNQUpPUihidWYuc3RfcmRldik7CiAgICAgaWYgKHN0YXQoIi9kZXYvdHR5UzAiLCZidWYpID09IC0xKQotICAgICAgICBwZXJyb3IoInN0YXQiKTsKKwlwZXJyb3IoInN0YXQiKTsKICAgICBidXNtb3VzZT0oaSAhPSBNQUpPUihidWYuc3RfcmRldikpOwotICAgIAorCiAgICAgLyogRml4IHRoZSBob3dtYW55IGZpZWxkLCBzbyB0aGF0IHNlcmlhbCBtaWNlIGhhdmUgMSwgd2hpbGUgYnVzbWljZSBoYXZlIDMgKi8KICAgICBtb3VzZV9pbmZvc1ttb3VzZV9kcml2ZXJdLnJlYWQgPSBidXNtb3VzZSA/IDMgOiAxOwotICAgIAorCiAgICAgLyogQ2hhbmdlIGZyb20gYW55IGF2YWlsYWJsZSBzcGVlZCB0byB0aGUgY2hvc2VuIG9uZSAqLwogICAgIGZvciAoaSA9IDk2MDA7IGkgPj0gMTIwMDsgaSAvPSAyKQotICAgICAgICBzZXRzcGVlZChfRVZUX21vdXNlX2ZkLCBpLCBvcHRfYmF1ZCwgbW91c2VfaW5mb3NbbW91c2VfZHJpdmVyXS5mbGFncyk7Ci0gIAorCXNldHNwZWVkKF9FVlRfbW91c2VfZmQsIGksIG9wdF9iYXVkLCBtb3VzZV9pbmZvc1ttb3VzZV9kcml2ZXJdLmZsYWdzKTsKKwogICAgIC8qIFRoaXMgc3R1ZmYgaXMgcGVjdWxpYXIgb2YgbG9naXRlY2ggbWljZSwgYWxzbyBmb3IgdGhlIHNlcmlhbCBvbmVzICovCiAgICAgd3JpdGUoX0VWVF9tb3VzZV9mZCwgIlMiLCAxKTsKICAgICBzZXRzcGVlZChfRVZUX21vdXNlX2ZkLCBvcHRfYmF1ZCwgb3B0X2JhdWQsQ1M4IHxQQVJFTkIgfFBBUk9ERCB8Q1JFQUQgfENMT0NBTCB8SFVQQ0wpOwotICAKKwogICAgIC8qIENvbmZpZ3VyZSB0aGUgc2FtcGxlIHJhdGUgKi8KICAgICBmb3IgKGkgPSAwOyBvcHRfc2FtcGxlIDw9IHNhbXBsZXRhYltpXS5zYW1wbGU7IGkrKykKLSAgICAgICAgOworCTsKICAgICB3cml0ZShfRVZUX21vdXNlX2ZkLHNhbXBsZXRhYltpXS5jb2RlLDEpOwogfQogCkBAIC0xMjA2LDcgKzEyMDYsNyBAQAogc3RhdGljIHZvaWQgX0VWVF9wbnBtb3VzZV9pbml0KHZvaWQpCiB7CiAgICAgc3RydWN0IHRlcm1pb3MgdHR5OwotICAKKwogICAgIHRjZ2V0YXR0cihfRVZUX21vdXNlX2ZkLCAmdHR5KTsKICAgICB0dHkuY19pZmxhZyA9IElHTkJSSyB8IElHTlBBUjsKICAgICB0dHkuY19vZmxhZyA9IDA7CkBAIC0xMjQwLDUzICsxMjQwLDUzIEBACiAgICAgRVZULm1vdXNlTW92ZSA9IG1vdXNlTW92ZTsKICAgICBpbml0RXZlbnRRdWV1ZSgpOwogICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICAgICAga2V5VXBNc2dbaV0gPSAwOworCWtleVVwTXNnW2ldID0gMDsKIAogICAgIC8qIEtleWJvYXJkIGluaXRpYWxpemF0aW9uICovCiAgICAgaWYgKF9QTV9jb25zb2xlX2ZkID09IC0xKQotICAgICAgICBQTV9mYXRhbEVycm9yKCJZb3UgbXVzdCBmaXJzdCBjYWxsIFBNX29wZW5Db25zb2xlIHRvIHVzZSB0aGUgRVZUIGZ1bmN0aW9ucyEiKTsKKwlQTV9mYXRhbEVycm9yKCJZb3UgbXVzdCBmaXJzdCBjYWxsIFBNX29wZW5Db25zb2xlIHRvIHVzZSB0aGUgRVZUIGZ1bmN0aW9ucyEiKTsKICAgICBfUE1fa2V5Ym9hcmRfcmF3bW9kZSgpOwogICAgIGZjbnRsKF9QTV9jb25zb2xlX2ZkLEZfU0VURkwsZmNudGwoX1BNX2NvbnNvbGVfZmQsRl9HRVRGTCkgfCBPX05PTkJMT0NLKTsKIAogICAgIC8qIE1vdXNlIGluaXRpYWxpemF0aW9uICovCiAgICAgaWYgKCh0bXAgPSBnZXRlbnYoRU5WX01PVVNFRFJWKSkgIT0gTlVMTCkgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkJfTUlDRTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAodG1wLCBtb3VzZV9pbmZvc1tpXS5uYW1lKSkgewotICAgICAgICAgICAgICAgIG1vdXNlX2RyaXZlciA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBpZiAoaSA9PSBOQl9NSUNFKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiVW5rbm93biBtb3VzZSBkcml2ZXI6ICVzXG4iLCB0bXApOwotICAgICAgICAgICAgbW91c2VfZHJpdmVyID0gRVZUX25vTW91c2U7Ci0gICAgICAgICAgICBfRVZUX21vdXNlX2ZkID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCBOQl9NSUNFOyBpKyspIHsKKwkgICAgaWYgKCFzdHJjYXNlY21wKHRtcCwgbW91c2VfaW5mb3NbaV0ubmFtZSkpIHsKKwkJbW91c2VfZHJpdmVyID0gaTsKKwkJYnJlYWs7CisJCX0KKwkgICAgfQorCWlmIChpID09IE5CX01JQ0UpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsIlVua25vd24gbW91c2UgZHJpdmVyOiAlc1xuIiwgdG1wKTsKKwkgICAgbW91c2VfZHJpdmVyID0gRVZUX25vTW91c2U7CisJICAgIF9FVlRfbW91c2VfZmQgPSAwOworCSAgICB9CisJfQogICAgIGlmIChtb3VzZV9kcml2ZXIgIT0gRVZUX25vTW91c2UpIHsKLSAgICAgICAgaWYgKG1vdXNlX2RyaXZlciA9PSBFVlRfZ3BtKQotICAgICAgICAgICAgc3RyY3B5KG1vdXNlX2RldiwiL2Rldi9ncG1kYXRhIik7Ci0gICAgICAgIGlmICgodG1wID0gZ2V0ZW52KEVOVl9NT1VTRURFVikpICE9IE5VTEwpCi0gICAgICAgICAgICBzdHJjcHkobW91c2VfZGV2LHRtcCk7CisJaWYgKG1vdXNlX2RyaXZlciA9PSBFVlRfZ3BtKQorCSAgICBzdHJjcHkobW91c2VfZGV2LCIvZGV2L2dwbWRhdGEiKTsKKwlpZiAoKHRtcCA9IGdldGVudihFTlZfTU9VU0VERVYpKSAhPSBOVUxMKQorCSAgICBzdHJjcHkobW91c2VfZGV2LHRtcCk7CiAjaWZkZWYgIENIRUNLRUQKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIlVzaW5nIHRoZSAlcyBNR0wgbW91c2UgZHJpdmVyIG9uICVzLlxuIiwgbW91c2VfaW5mb3NbbW91c2VfZHJpdmVyXS5uYW1lLCBtb3VzZV9kZXYpOworCWZwcmludGYoc3RkZXJyLCJVc2luZyB0aGUgJXMgTUdMIG1vdXNlIGRyaXZlciBvbiAlcy5cbiIsIG1vdXNlX2luZm9zW21vdXNlX2RyaXZlcl0ubmFtZSwgbW91c2VfZGV2KTsKICNlbmRpZgotICAgICAgICBpZiAoKF9FVlRfbW91c2VfZmQgPSBvcGVuKG1vdXNlX2RldiwgT19SRFdSKSkgPCAwKSB7Ci0gICAgICAgICAgICBwZXJyb3IoIm9wZW4iKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIG9wZW4gbW91c2UgZGV2aWNlICVzLCBkcm9wcGluZyBtb3VzZSBzdXBwb3J0LlxuIiwgbW91c2VfZGV2KTsKLSAgICAgICAgICAgIHNsZWVwKDEpOwotICAgICAgICAgICAgbW91c2VfZHJpdmVyID0gRVZUX25vTW91c2U7Ci0gICAgICAgICAgICBfRVZUX21vdXNlX2ZkID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGFyIGM7CisJaWYgKChfRVZUX21vdXNlX2ZkID0gb3Blbihtb3VzZV9kZXYsIE9fUkRXUikpIDwgMCkgeworCSAgICBwZXJyb3IoIm9wZW4iKTsKKwkgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gb3BlbiBtb3VzZSBkZXZpY2UgJXMsIGRyb3BwaW5nIG1vdXNlIHN1cHBvcnQuXG4iLCBtb3VzZV9kZXYpOworCSAgICBzbGVlcCgxKTsKKwkgICAgbW91c2VfZHJpdmVyID0gRVZUX25vTW91c2U7CisJICAgIF9FVlRfbW91c2VfZmQgPSAwOworCSAgICB9CisJZWxzZSB7CisJICAgIGNoYXIgYzsKIAotICAgICAgICAgICAgLyogSW5pdCBhbmQgZmx1c2ggdGhlIG1vdXNlIHBlbmRpbmcgaW5wdXQgcXVldWUgKi8KLSAgICAgICAgICAgIGlmIChtb3VzZV9pbmZvc1ttb3VzZV9kcml2ZXJdLmluaXQpCi0gICAgICAgICAgICAgICAgbW91c2VfaW5mb3NbbW91c2VfZHJpdmVyXS5pbml0KCk7Ci0gICAgICAgICAgICB3aGlsZShkYXRhUmVhZHkoX0VWVF9tb3VzZV9mZCkgJiYgcmVhZChfRVZUX21vdXNlX2ZkLCAmYywgMSkgPT0gMSkKLSAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgLyogSW5pdCBhbmQgZmx1c2ggdGhlIG1vdXNlIHBlbmRpbmcgaW5wdXQgcXVldWUgKi8KKwkgICAgaWYgKG1vdXNlX2luZm9zW21vdXNlX2RyaXZlcl0uaW5pdCkKKwkJbW91c2VfaW5mb3NbbW91c2VfZHJpdmVyXS5pbml0KCk7CisJICAgIHdoaWxlKGRhdGFSZWFkeShfRVZUX21vdXNlX2ZkKSAmJiByZWFkKF9FVlRfbW91c2VfZmQsICZjLCAxKSA9PSAxKQorCQk7CisJICAgIH0KKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzE4LDcgKzEzMTgsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgRVZUX3Jlc3VtZSh2b2lkKQogewotICAgIC8vIERvIG5vdGhpbmcgZm9yIExpbnV4CisgICAgLyogRG8gbm90aGluZyBmb3IgTGludXggKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzMjgsNyArMTMyOCw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBFVlRfc3VzcGVuZCh2b2lkKQogewotICAgIC8vIERvIG5vdGhpbmcgZm9yIExpbnV4CisgICAgLyogRG8gbm90aGluZyBmb3IgTGludXggKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzNDAsMjIgKzEzNDAsMjEgQEAKICAgICAvKiBSZXN0b3JlIHNpZ25hbCBoYW5kbGVycyAqLwogICAgIF9QTV9yZXN0b3JlX2tiX21vZGUoKTsKICAgICBpZiAoX0VWVF9tb3VzZV9mZCkgewotICAgICAgICBjbG9zZShfRVZUX21vdXNlX2ZkKTsKLSAgICAgICAgX0VWVF9tb3VzZV9mZCA9IDA7Ci0gICAgICAgIH0KKwljbG9zZShfRVZUX21vdXNlX2ZkKTsKKwlfRVZUX21vdXNlX2ZkID0gMDsKKwl9CiAjaWZkZWYgVVNFX09TX0pPWVNUSUNLCiAgICAgaWYgKGpveXN0aWNrMF9mZCkgewotICAgICAgICBjbG9zZShqb3lzdGljazBfZmQpOwotICAgICAgICBmcmVlKGF4aXMwKTsKLSAgICAgICAgZnJlZShidXRzMCk7Ci0gICAgICAgIGpveXN0aWNrMF9mZCA9IDA7Ci0gICAgICAgIH0KKwljbG9zZShqb3lzdGljazBfZmQpOworCWZyZWUoYXhpczApOworCWZyZWUoYnV0czApOworCWpveXN0aWNrMF9mZCA9IDA7CisJfQogICAgIGlmIChqb3lzdGljazFfZmQpIHsKLSAgICAgICAgY2xvc2Uoam95c3RpY2sxX2ZkKTsKLSAgICAgICAgZnJlZShheGlzMSk7Ci0gICAgICAgIGZyZWUoYnV0czEpOwotICAgICAgICBqb3lzdGljazFfZmQgPSAwOwotICAgICAgICB9CisJY2xvc2Uoam95c3RpY2sxX2ZkKTsKKwlmcmVlKGF4aXMxKTsKKwlmcmVlKGJ1dHMxKTsKKwlqb3lzdGljazFfZmQgPSAwOworCX0KICNlbmRpZgogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9saW51eC9vc2hkci5oIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbGludXgvb3NoZHIuaAppbmRleCA2MDIzZGZmLi5lYWRlZGZiIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9saW51eC9vc2hkci5oCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2xpbnV4L29zaGRyLmgKQEAgLTU4LDQgKzU4LDMgQEAKIC8qIExpbnV4IG5lZWRzIHRoZSBnZW5lcmljIGpveXN0aWNrIHNjYWxpbmcgY29kZSAqLwogCiAjZGVmaW5lIE5FRURfU0NBTEVfSk9ZX0FYSVMKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbGludXgvcG0uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL2xpbnV4L3BtLmMKaW5kZXggMWQ1Mjk4NC4uYzEyYTgzNSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbGludXgvcG0uYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9saW51eC9wbS5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICBwcmludGsoIiUwNFg6JTA0WDogb3V0Yi4lMDRYIDwtICUwMlhcbiIsIHRyYWNlQWRkciA+PiAxNiwgdHJhY2VBZGRyICYgMHhGRkZGLCAodXNob3J0KXBvcnQsICh1Y2hhcil2YWx1ZSk7CiAjZW5kaWYKICAgICBhc20gdm9sYXRpbGUgKCJvdXRiICUwLCUxIgotICAgICAgICAgIDo6ImEiICgodW5zaWduZWQgY2hhcikgdmFsdWUpLCAiZCIoKHVuc2lnbmVkIHNob3J0KSBwb3J0KSk7CisJICA6OiJhIiAoKHVuc2lnbmVkIGNoYXIpIHZhbHVlKSwgImQiKCh1bnNpZ25lZCBzaG9ydCkgcG9ydCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9vdXR3KGludCB2YWx1ZSwgaW50IHBvcnQpCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICBwcmludGsoIiUwNFg6JTA0WDogb3V0dy4lMDRYIDwtICUwNFhcbiIsIHRyYWNlQWRkciA+PiAxNix0cmFjZUFkZHIgJiAweEZGRkYsICh1c2hvcnQpcG9ydCwgKHVzaG9ydCl2YWx1ZSk7CiAjZW5kaWYKICAgICBhc20gdm9sYXRpbGUgKCJvdXR3ICUwLCUxIgotICAgICAgICAgOjoiYSIgKCh1bnNpZ25lZCBzaG9ydCkgdmFsdWUpLCAiZCIoKHVuc2lnbmVkIHNob3J0KSBwb3J0KSk7CisJIDo6ImEiICgodW5zaWduZWQgc2hvcnQpIHZhbHVlKSwgImQiKCh1bnNpZ25lZCBzaG9ydCkgcG9ydCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9vdXRsKGludCB2YWx1ZSwgaW50IHBvcnQpCkBAIC0xNjYsMTUgKzE2NiwxNSBAQAogICAgIHByaW50aygiJTA0WDolMDRYOiBvdXRsLiUwNFggPC0gJTA4WFxuIiwgdHJhY2VBZGRyID4+IDE2LHRyYWNlQWRkciAmIDB4RkZGRiwgKHVzaG9ydClwb3J0LCAodWxvbmcpdmFsdWUpOwogI2VuZGlmCiAgICAgYXNtIHZvbGF0aWxlICgib3V0bCAlMCwlMSIKLSAgICAgICAgIDo6ImEiICgodW5zaWduZWQgbG9uZykgdmFsdWUpLCAiZCIoKHVuc2lnbmVkIHNob3J0KSBwb3J0KSk7CisJIDo6ImEiICgodW5zaWduZWQgbG9uZykgdmFsdWUpLCAiZCIoKHVuc2lnbmVkIHNob3J0KSBwb3J0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHBvcnRfaW4oaW50IHBvcnQpCiB7CiAgICAgdW5zaWduZWQgY2hhciB2YWx1ZTsKICAgICBhc20gdm9sYXRpbGUgKCJpbmIgJTEsJTAiCi0gICAgICAgICAgICAgIDoiPWEiICgodW5zaWduZWQgY2hhcil2YWx1ZSkKLSAgICAgICAgICAgICAgOiJkIigodW5zaWduZWQgc2hvcnQpIHBvcnQpKTsKKwkgICAgICA6Ij1hIiAoKHVuc2lnbmVkIGNoYXIpdmFsdWUpCisJICAgICAgOiJkIigodW5zaWduZWQgc2hvcnQpIHBvcnQpKTsKICNpZmRlZiBUUkFDRV9JTwogICAgIHByaW50aygiJTA0WDolMDRYOiAgaW5iLiUwNFggLT4gJTAyWFxuIiwgdHJhY2VBZGRyID4+IDE2LHRyYWNlQWRkciAmIDB4RkZGRiwgKHVzaG9ydClwb3J0LCAodWNoYXIpdmFsdWUpOwogI2VuZGlmCkBAIC0xODUsOCArMTg1LDggQEAKIHsKICAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKICAgICBhc20gdm9sYXRpbGUgKCJpbncgJTEsJTAiCi0gICAgICAgICAgICAgIDoiPWEiICgodW5zaWduZWQgc2hvcnQpdmFsdWUpCi0gICAgICAgICAgICAgIDoiZCIoKHVuc2lnbmVkIHNob3J0KSBwb3J0KSk7CisJICAgICAgOiI9YSIgKCh1bnNpZ25lZCBzaG9ydCl2YWx1ZSkKKwkgICAgICA6ImQiKCh1bnNpZ25lZCBzaG9ydCkgcG9ydCkpOwogI2lmZGVmIFRSQUNFX0lPCiAgICAgcHJpbnRrKCIlMDRYOiUwNFg6ICBpbncuJTA0WCAtPiAlMDRYXG4iLCB0cmFjZUFkZHIgPj4gMTYsdHJhY2VBZGRyICYgMHhGRkZGLCAodXNob3J0KXBvcnQsICh1c2hvcnQpdmFsdWUpOwogI2VuZGlmCkBAIC0xOTcsOCArMTk3LDggQEAKIHsKICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOwogICAgIGFzbSB2b2xhdGlsZSAoImlubCAlMSwlMCIKLSAgICAgICAgICAgICAgOiI9YSIgKCh1bnNpZ25lZCBsb25nKXZhbHVlKQotICAgICAgICAgICAgICA6ImQiKCh1bnNpZ25lZCBzaG9ydCkgcG9ydCkpOworCSAgICAgIDoiPWEiICgodW5zaWduZWQgbG9uZyl2YWx1ZSkKKwkgICAgICA6ImQiKCh1bnNpZ25lZCBzaG9ydCkgcG9ydCkpOwogI2lmZGVmIFRSQUNFX0lPCiAgICAgcHJpbnRrKCIlMDRYOiUwNFg6ICBpbmwuJTA0WCAtPiAlMDhYXG4iLCB0cmFjZUFkZHIgPj4gMTYsdHJhY2VBZGRyICYgMHhGRkZGLCAodXNob3J0KXBvcnQsICh1bG9uZyl2YWx1ZSk7CiAjZW5kaWYKQEAgLTIxMSwxNiArMjExLDE2IEBACiAgICAgaW50ICAgICBmZF96ZXJvOwogCiAgICAgaWYgKG1lbV9pbmZvLnJlYWR5KQotICAgICAgICByZXR1cm4gMTsKKwlyZXR1cm4gMTsKIAogICAgIGlmICgoZmRfemVybyA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRPTkxZKSkgPT0gLTEpCi0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIllvdSBtdXN0IGhhdmUgcm9vdCBwcml2bGVkZ2VzIHRvIHJ1biB0aGlzIHByb2dyYW0hIik7CisJUE1fZmF0YWxFcnJvcigiWW91IG11c3QgaGF2ZSByb290IHByaXZsZWRnZXMgdG8gcnVuIHRoaXMgcHJvZ3JhbSEiKTsKICAgICBpZiAoKG0gPSBtbWFwKCh2b2lkICopUkVBTF9NRU1fQkFTRSwgUkVBTF9NRU1fU0laRSwKLSAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsCi0gICAgICAgICAgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfemVybywgMCkpID09ICh2b2lkICopLTEpIHsKLSAgICAgICAgY2xvc2UoZmRfemVybyk7Ci0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIllvdSBtdXN0IGhhdmUgcm9vdCBwcml2bGVkZ2VzIHRvIHJ1biB0aGlzIHByb2dyYW0hIik7Ci0gICAgICAgIH0KKwkgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQywKKwkgICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX3plcm8sIDApKSA9PSAodm9pZCAqKS0xKSB7CisJY2xvc2UoZmRfemVybyk7CisJUE1fZmF0YWxFcnJvcigiWW91IG11c3QgaGF2ZSByb290IHByaXZsZWRnZXMgdG8gcnVuIHRoaXMgcHJvZ3JhbSEiKTsKKwl9CiAgICAgbWVtX2luZm8ucmVhZHkgPSAxOwogICAgIG1lbV9pbmZvLmNvdW50ID0gMTsKICAgICBtZW1faW5mby5ibG9ja3NbMF0uc2l6ZSA9IFJFQUxfTUVNX1NJWkU7CkBAIC0yMzEsOSArMjMxLDkgQEAKIHN0YXRpYyB2b2lkIGluc2VydF9ibG9jayhpbnQgaSkKIHsKICAgICBtZW1tb3ZlKAotICAgICAgICBtZW1faW5mby5ibG9ja3MgKyBpICsgMSwKLSAgICAgICAgbWVtX2luZm8uYmxvY2tzICsgaSwKLSAgICAgICAgKG1lbV9pbmZvLmNvdW50IC0gaSkgKiBzaXplb2Yoc3RydWN0IG1lbV9ibG9jaykpOworCW1lbV9pbmZvLmJsb2NrcyArIGkgKyAxLAorCW1lbV9pbmZvLmJsb2NrcyArIGksCisJKG1lbV9pbmZvLmNvdW50IC0gaSkgKiBzaXplb2Yoc3RydWN0IG1lbV9ibG9jaykpOwogICAgIG1lbV9pbmZvLmNvdW50Kys7CiB9CiAKQEAgLTI0Miw5ICsyNDIsOSBAQAogICAgIG1lbV9pbmZvLmNvdW50LS07CiAKICAgICBtZW1tb3ZlKAotICAgICAgICBtZW1faW5mby5ibG9ja3MgKyBpLAotICAgICAgICBtZW1faW5mby5ibG9ja3MgKyBpICsgMSwKLSAgICAgICAgKG1lbV9pbmZvLmNvdW50IC0gaSkgKiBzaXplb2Yoc3RydWN0IG1lbV9ibG9jaykpOworCW1lbV9pbmZvLmJsb2NrcyArIGksCisJbWVtX2luZm8uYmxvY2tzICsgaSArIDEsCisJKG1lbV9pbmZvLmNvdW50IC0gaSkgKiBzaXplb2Yoc3RydWN0IG1lbV9ibG9jaykpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdCh1bnNpZ25lZCBpbnQgYml0LCB2b2lkICphcnJheSkKQEAgLTI3OSwzNSArMjc5LDM1IEBACiAgICAgdWludCAgICByX3NlZyxyX29mZjsKIAogICAgIGlmIChpbml0ZWQpCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAKICAgICAvKiBNYXAgdGhlIEludGVycnVwdCBWZWN0b3JzICgweDAgLSAweDQwMCkgKyBCSU9TIGRhdGEgKDB4NDAwIC0gMHg1MDIpCiAgICAgICogYW5kIHRoZSBwaHlzaWNhbCBmcmFtZWJ1ZmZlciBhbmQgUk9NIGltYWdlcyBmcm9tICgweGEwMDAwIC0gMHgxMDAwMDApCiAgICAgICovCiAgICAgcmVhbF9tZW1faW5pdCgpOwogICAgIGlmICghZmRfbWVtICYmIChmZF9tZW0gPSBvcGVuKCIvZGV2L21lbSIsIE9fUkRXUikpID09IC0xKSB7Ci0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIllvdSBtdXN0IGhhdmUgcm9vdCBwcml2aWxlZ2VzIHRvIHJ1biB0aGlzIHByb2dyYW0hIik7Ci0gICAgICAgIH0KKwlQTV9mYXRhbEVycm9yKCJZb3UgbXVzdCBoYXZlIHJvb3QgcHJpdmlsZWdlcyB0byBydW4gdGhpcyBwcm9ncmFtISIpOworCX0KICAgICBpZiAoKG0gPSBtbWFwKCh2b2lkICopMCwgMHg1MDIsCi0gICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLAotICAgICAgICAgICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUsIGZkX21lbSwgMCkpID09ICh2b2lkICopLTEpIHsKLSAgICAgICAgUE1fZmF0YWxFcnJvcigiWW91IG11c3QgaGF2ZSByb290IHByaXZpbGVnZXMgdG8gcnVuIHRoaXMgcHJvZ3JhbSEiKTsKLSAgICAgICAgfQorCSAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLAorCSAgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfbWVtLCAwKSkgPT0gKHZvaWQgKiktMSkgeworCVBNX2ZhdGFsRXJyb3IoIllvdSBtdXN0IGhhdmUgcm9vdCBwcml2aWxlZ2VzIHRvIHJ1biB0aGlzIHByb2dyYW0hIik7CisJfQogICAgIGlmICgobSA9IG1tYXAoKHZvaWQgKikweEEwMDAwLCAweEMwMDAwIC0gMHhBMDAwMCwKLSAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0gICAgICAgICAgICBNQVBfRklYRUQgfCBNQVBfU0hBUkVELCBmZF9tZW0sIDB4QTAwMDApKSA9PSAodm9pZCAqKS0xKSB7Ci0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIllvdSBtdXN0IGhhdmUgcm9vdCBwcml2aWxlZ2VzIHRvIHJ1biB0aGlzIHByb2dyYW0hIik7Ci0gICAgICAgIH0KKwkgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkgICAgTUFQX0ZJWEVEIHwgTUFQX1NIQVJFRCwgZmRfbWVtLCAweEEwMDAwKSkgPT0gKHZvaWQgKiktMSkgeworCVBNX2ZhdGFsRXJyb3IoIllvdSBtdXN0IGhhdmUgcm9vdCBwcml2aWxlZ2VzIHRvIHJ1biB0aGlzIHByb2dyYW0hIik7CisJfQogICAgIGlmICgobSA9IG1tYXAoKHZvaWQgKikweEMwMDAwLCAweEQwMDAwIC0gMHhDMDAwMCwKLSAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsCi0gICAgICAgICAgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSwgZmRfbWVtLCAweEMwMDAwKSkgPT0gKHZvaWQgKiktMSkgewotICAgICAgICBQTV9mYXRhbEVycm9yKCJZb3UgbXVzdCBoYXZlIHJvb3QgcHJpdmlsZWdlcyB0byBydW4gdGhpcyBwcm9ncmFtISIpOwotICAgICAgICB9CisJICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsCisJICAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFLCBmZF9tZW0sIDB4QzAwMDApKSA9PSAodm9pZCAqKS0xKSB7CisJUE1fZmF0YWxFcnJvcigiWW91IG11c3QgaGF2ZSByb290IHByaXZpbGVnZXMgdG8gcnVuIHRoaXMgcHJvZ3JhbSEiKTsKKwl9CiAgICAgaWYgKChtID0gbW1hcCgodm9pZCAqKTB4RDAwMDAsIDB4MTAwMDAwIC0gMHhEMDAwMCwKLSAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0gICAgICAgICAgICBNQVBfRklYRUQgfCBNQVBfU0hBUkVELCBmZF9tZW0sIDB4RDAwMDApKSA9PSAodm9pZCAqKS0xKSB7Ci0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIllvdSBtdXN0IGhhdmUgcm9vdCBwcml2aWxlZ2VzIHRvIHJ1biB0aGlzIHByb2dyYW0hIik7Ci0gICAgICAgIH0KKwkgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkgICAgTUFQX0ZJWEVEIHwgTUFQX1NIQVJFRCwgZmRfbWVtLCAweEQwMDAwKSkgPT0gKHZvaWQgKiktMSkgeworCVBNX2ZhdGFsRXJyb3IoIllvdSBtdXN0IGhhdmUgcm9vdCBwcml2aWxlZ2VzIHRvIHJ1biB0aGlzIHByb2dyYW0hIik7CisJfQogICAgIGluaXRlZCA9IDE7CiAKICAgICAvKiBBbGxvY2F0ZSBhIHN0YWNrICovCkBAIC0zNTYsOSArMzU2LDkgQEAKIHsKICAgICB1aW50IHBvcyA9IHN0cmxlbihzKTsKICAgICBpZiAoc1twb3MtMV0gIT0gJy8nKSB7Ci0gICAgICAgIHNbcG9zXSA9ICcvJzsKLSAgICAgICAgc1twb3MrMV0gPSAnXDAnOwotICAgICAgICB9CisJc1twb3NdID0gJy8nOworCXNbcG9zKzFdID0gJ1wwJzsKKwl9CiB9CiAKIHZvaWQgUE1BUEkgUE1fc2V0RmF0YWxFcnJvckNsZWFudXAoCkBAIC0zNzAsNyArMzcwLDcgQEAKIHZvaWQgUE1BUEkgUE1fZmF0YWxFcnJvcihjb25zdCBjaGFyICptc2cpCiB7CiAgICAgaWYgKGZhdGFsRXJyb3JDbGVhbnVwKQotICAgICAgICBmYXRhbEVycm9yQ2xlYW51cCgpOworCWZhdGFsRXJyb3JDbGVhbnVwKCk7CiAgICAgZnByaW50ZihzdGRlcnIsIiVzXG4iLCBtc2cpOwogICAgIGZmbHVzaChzdGRlcnIpOwogICAgIGV4aXQoMSk7CkBAIC0zNzksMTggKzM3OSwxOCBAQAogc3RhdGljIHZvaWQgRXhpdFZCRUJ1Zih2b2lkKQogewogICAgIGlmIChWRVNBQnVmX3B0cikKLSAgICAgICAgUE1fZnJlZVJlYWxTZWcoVkVTQUJ1Zl9wdHIpOworCVBNX2ZyZWVSZWFsU2VnKFZFU0FCdWZfcHRyKTsKICAgICBWRVNBQnVmX3B0ciA9IDA7CiB9CiAKIHZvaWQgKiBQTUFQSSBQTV9nZXRWRVNBQnVmKHVpbnQgKmxlbix1aW50ICpyc2VnLHVpbnQgKnJvZmYpCiB7CiAgICAgaWYgKCFWRVNBQnVmX3B0cikgewotICAgICAgICAvKiBBbGxvY2F0ZSBhIGdsb2JhbCBidWZmZXIgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgVkVTQSBWQkUgKi8KLSAgICAgICAgaWYgKChWRVNBQnVmX3B0ciA9IFBNX2FsbG9jUmVhbFNlZyhWRVNBQnVmX2xlbiwgJlZFU0FCdWZfcnNlZywgJlZFU0FCdWZfcm9mZikpID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXRleGl0KEV4aXRWQkVCdWYpOwotICAgICAgICB9CisJLyogQWxsb2NhdGUgYSBnbG9iYWwgYnVmZmVyIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIFZFU0EgVkJFICovCisJaWYgKChWRVNBQnVmX3B0ciA9IFBNX2FsbG9jUmVhbFNlZyhWRVNBQnVmX2xlbiwgJlZFU0FCdWZfcnNlZywgJlZFU0FCdWZfcm9mZikpID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCWF0ZXhpdChFeGl0VkJFQnVmKTsKKwl9CiAgICAgKmxlbiA9IFZFU0FCdWZfbGVuOwogICAgICpyc2VnID0gVkVTQUJ1Zl9yc2VnOwogICAgICpyb2ZmID0gVkVTQUJ1Zl9yb2ZmOwpAQCAtNDMxLDcgKzQzMSw3IEBACiAgICAgY2hhciAqcGF0aCkKIHsKICAgICBpZiAoIVBNX2ZpbmRCUEQoImdyYXBoaWNzLmJwZCIscGF0aCkpCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogICAgIFBNX2JhY2tzbGFzaChwYXRoKTsKICAgICBzdHJjYXQocGF0aCxLQk1PREVfREFUKTsKICAgICByZXR1cm4gZm9wZW4ocGF0aCxtb2RlKTsKQEAgLTQ0OCwxOCArNDQ4LDE4IEBACiAgICAgY2hhciAgICAgICAgICAgIHBhdGhbUE1fTUFYX1BBVEhdOwogCiAgICAgaWYgKF9QTV9jb25zb2xlX2ZkICE9IC0xICYmIChrYm1vZGUgPSBvcGVuX2tiX21vZGUoInJiIixwYXRoKSkgIT0gTlVMTCkgewotICAgICAgICBpZiAoZnJlYWQoJm1vZGUsMSxzaXplb2YobW9kZSksa2Jtb2RlKSA9PSBzaXplb2YobW9kZSkpIHsKLSAgICAgICAgICAgIGlmIChtb2RlLnN0YXJ0dXBfdmMgPiAwKQotICAgICAgICAgICAgICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBWVF9BQ1RJVkFURSwgbW9kZS5zdGFydHVwX3ZjKTsKLSAgICAgICAgICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBLRFNLQk1PREUsIG1vZGUua2JfbW9kZSk7Ci0gICAgICAgICAgICBpb2N0bChfUE1fY29uc29sZV9mZCwgS0RTRVRMRUQsIG1vZGUubGVkcyk7Ci0gICAgICAgICAgICB0Y3NldGF0dHIoX1BNX2NvbnNvbGVfZmQsIFRDU0FGTFVTSCwgJm1vZGUudGVybWlvcyk7Ci0gICAgICAgICAgICBmY250bChfUE1fY29uc29sZV9mZCxGX1NFVEZMLG1vZGUuZmxhZ3MpOwotICAgICAgICAgICAgfQotICAgICAgICBmY2xvc2Uoa2Jtb2RlKTsKLSAgICAgICAgdW5saW5rKHBhdGgpOwotICAgICAgICBpbl9yYXdfbW9kZSA9IGZhbHNlOwotICAgICAgICB9CisJaWYgKGZyZWFkKCZtb2RlLDEsc2l6ZW9mKG1vZGUpLGtibW9kZSkgPT0gc2l6ZW9mKG1vZGUpKSB7CisJICAgIGlmIChtb2RlLnN0YXJ0dXBfdmMgPiAwKQorCQlpb2N0bChfUE1fY29uc29sZV9mZCwgVlRfQUNUSVZBVEUsIG1vZGUuc3RhcnR1cF92Yyk7CisJICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBLRFNLQk1PREUsIG1vZGUua2JfbW9kZSk7CisJICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBLRFNFVExFRCwgbW9kZS5sZWRzKTsKKwkgICAgdGNzZXRhdHRyKF9QTV9jb25zb2xlX2ZkLCBUQ1NBRkxVU0gsICZtb2RlLnRlcm1pb3MpOworCSAgICBmY250bChfUE1fY29uc29sZV9mZCxGX1NFVEZMLG1vZGUuZmxhZ3MpOworCSAgICB9CisJZmNsb3NlKGtibW9kZSk7CisJdW5saW5rKHBhdGgpOworCWluX3Jhd19tb2RlID0gZmFsc2U7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDg4LDQ5ICs0ODgsNDkgQEAKICAgICBjaGFyICAgICAgICAgICAgcGF0aFtQTV9NQVhfUEFUSF07CiAgICAgaW50ICAgICAgICAgICAgIGk7CiAgICAgc3RhdGljIGludCBzaWdfbGlzdFtdID0gewotICAgICAgICBTSUdIVVAsCi0gICAgICAgIFNJR0lOVCwKLSAgICAgICAgU0lHUVVJVCwKLSAgICAgICAgU0lHSUxMLAotICAgICAgICBTSUdUUkFQLAotICAgICAgICBTSUdBQlJULAotICAgICAgICBTSUdJT1QsCi0gICAgICAgIFNJR0JVUywKLSAgICAgICAgU0lHRlBFLAotICAgICAgICBTSUdLSUxMLAotICAgICAgICBTSUdTRUdWLAotICAgICAgICBTSUdURVJNLAotICAgICAgICB9OworCVNJR0hVUCwKKwlTSUdJTlQsCisJU0lHUVVJVCwKKwlTSUdJTEwsCisJU0lHVFJBUCwKKwlTSUdBQlJULAorCVNJR0lPVCwKKwlTSUdCVVMsCisJU0lHRlBFLAorCVNJR0tJTEwsCisJU0lHU0VHViwKKwlTSUdURVJNLAorCX07CiAKICAgICBpZiAoKGtibW9kZSA9IG9wZW5fa2JfbW9kZSgicmIiLHBhdGgpKSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICgoa2Jtb2RlID0gb3Blbl9rYl9tb2RlKCJ3YiIscGF0aCkpID09IE5VTEwpCi0gICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gb3BlbiBrYm1vZGUuZGF0IGZpbGUgZm9yIHdyaXRpbmchIik7Ci0gICAgICAgIGlmIChpb2N0bChfUE1fY29uc29sZV9mZCwgS0RHS0JNT0RFLCAmbW9kZS5rYl9tb2RlKSkKLSAgICAgICAgICAgIHBlcnJvcigiS0RHS0JNT0RFIik7Ci0gICAgICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBLREdFVExFRCwgJm1vZGUubGVkcyk7Ci0gICAgICAgIF9QTV9sZWRzID0gbW9kZS5sZWRzICYgMHhGOwotICAgICAgICBfUE1fbW9kaWZpZXJzID0gMDsKLSAgICAgICAgdGNnZXRhdHRyKF9QTV9jb25zb2xlX2ZkLCAmbW9kZS50ZXJtaW9zKTsKLSAgICAgICAgY29uZiA9IG1vZGUudGVybWlvczsKLSAgICAgICAgY29uZi5jX2xmbGFnICY9IH4oSUNBTk9OIHwgRUNITyB8IElTSUcpOwotICAgICAgICBjb25mLmNfaWZsYWcgJj0gfihJU1RSSVAgfCBJR05DUiB8IElDUk5MIHwgSU5MQ1IgfCBCUktJTlQgfCBQQVJNUksgfCBJTlBDSyB8IElVQ0xDIHwgSVhPTiB8IElYT0ZGKTsKLSAgICAgICAgY29uZi5jX2lmbGFnICB8PSAoSUdOQlJLIHwgSUdOUEFSKTsKLSAgICAgICAgY29uZi5jX2NjW1ZNSU5dID0gMTsKLSAgICAgICAgY29uZi5jX2NjW1ZUSU1FXSA9IDA7Ci0gICAgICAgIGNvbmYuY19jY1tWU1VTUF0gPSAwOwotICAgICAgICB0Y3NldGF0dHIoX1BNX2NvbnNvbGVfZmQsIFRDU0FGTFVTSCwgJmNvbmYpOwotICAgICAgICBtb2RlLmZsYWdzID0gZmNudGwoX1BNX2NvbnNvbGVfZmQsRl9HRVRGTCk7Ci0gICAgICAgIGlmIChpb2N0bChfUE1fY29uc29sZV9mZCwgS0RTS0JNT0RFLCBLX01FRElVTVJBVykpCi0gICAgICAgICAgICBwZXJyb3IoIktEU0tCTU9ERSIpOwotICAgICAgICBhdGV4aXQoX1BNX3Jlc3RvcmVfa2JfbW9kZSk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2lnX2xpc3QpL3NpemVvZihzaWdfbGlzdFswXSk7IGkrKykKLSAgICAgICAgICAgIHNpZ25hbChzaWdfbGlzdFtpXSwgX1BNX2Fib3J0KTsKLSAgICAgICAgbW9kZS5zdGFydHVwX3ZjID0gc3RhcnR1cF92YzsKLSAgICAgICAgaWYgKGZ3cml0ZSgmbW9kZSwxLHNpemVvZihtb2RlKSxrYm1vZGUpICE9IHNpemVvZihtb2RlKSkKLSAgICAgICAgICAgIFBNX2ZhdGFsRXJyb3IoIkVycm9yIHdyaXRpbmcga2Jtb2RlLmRhdCEiKTsKLSAgICAgICAgZmNsb3NlKGtibW9kZSk7Ci0gICAgICAgIGluX3Jhd19tb2RlID0gdHJ1ZTsKLSAgICAgICAgfQorCWlmICgoa2Jtb2RlID0gb3Blbl9rYl9tb2RlKCJ3YiIscGF0aCkpID09IE5VTEwpCisJICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBvcGVuIGtibW9kZS5kYXQgZmlsZSBmb3Igd3JpdGluZyEiKTsKKwlpZiAoaW9jdGwoX1BNX2NvbnNvbGVfZmQsIEtER0tCTU9ERSwgJm1vZGUua2JfbW9kZSkpCisJICAgIHBlcnJvcigiS0RHS0JNT0RFIik7CisJaW9jdGwoX1BNX2NvbnNvbGVfZmQsIEtER0VUTEVELCAmbW9kZS5sZWRzKTsKKwlfUE1fbGVkcyA9IG1vZGUubGVkcyAmIDB4RjsKKwlfUE1fbW9kaWZpZXJzID0gMDsKKwl0Y2dldGF0dHIoX1BNX2NvbnNvbGVfZmQsICZtb2RlLnRlcm1pb3MpOworCWNvbmYgPSBtb2RlLnRlcm1pb3M7CisJY29uZi5jX2xmbGFnICY9IH4oSUNBTk9OIHwgRUNITyB8IElTSUcpOworCWNvbmYuY19pZmxhZyAmPSB+KElTVFJJUCB8IElHTkNSIHwgSUNSTkwgfCBJTkxDUiB8IEJSS0lOVCB8IFBBUk1SSyB8IElOUENLIHwgSVVDTEMgfCBJWE9OIHwgSVhPRkYpOworCWNvbmYuY19pZmxhZyAgfD0gKElHTkJSSyB8IElHTlBBUik7CisJY29uZi5jX2NjW1ZNSU5dID0gMTsKKwljb25mLmNfY2NbVlRJTUVdID0gMDsKKwljb25mLmNfY2NbVlNVU1BdID0gMDsKKwl0Y3NldGF0dHIoX1BNX2NvbnNvbGVfZmQsIFRDU0FGTFVTSCwgJmNvbmYpOworCW1vZGUuZmxhZ3MgPSBmY250bChfUE1fY29uc29sZV9mZCxGX0dFVEZMKTsKKwlpZiAoaW9jdGwoX1BNX2NvbnNvbGVfZmQsIEtEU0tCTU9ERSwgS19NRURJVU1SQVcpKQorCSAgICBwZXJyb3IoIktEU0tCTU9ERSIpOworCWF0ZXhpdChfUE1fcmVzdG9yZV9rYl9tb2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNpZ19saXN0KS9zaXplb2Yoc2lnX2xpc3RbMF0pOyBpKyspCisJICAgIHNpZ25hbChzaWdfbGlzdFtpXSwgX1BNX2Fib3J0KTsKKwltb2RlLnN0YXJ0dXBfdmMgPSBzdGFydHVwX3ZjOworCWlmIChmd3JpdGUoJm1vZGUsMSxzaXplb2YobW9kZSksa2Jtb2RlKSAhPSBzaXplb2YobW9kZSkpCisJICAgIFBNX2ZhdGFsRXJyb3IoIkVycm9yIHdyaXRpbmcga2Jtb2RlLmRhdCEiKTsKKwlmY2xvc2Uoa2Jtb2RlKTsKKwlpbl9yYXdfbW9kZSA9IHRydWU7CisJfQogfQogCiBpbnQgUE1BUEkgUE1fa2JoaXQodm9pZCkKQEAgLTUzOSw5ICs1MzksOSBAQAogICAgIHN0cnVjdCB0aW1ldmFsIHR2ID0geyAwLCAwIH07CiAKICAgICBpZiAoY29uc29sZV9jb3VudCA9PSAwKQotICAgICAgICBQTV9mYXRhbEVycm9yKCJZb3UgKm11c3QqIG9wZW4gYSBjb25zb2xlIGJlZm9yZSB1c2luZyBQTV9rYmhpdCEiKTsKKwlQTV9mYXRhbEVycm9yKCJZb3UgKm11c3QqIG9wZW4gYSBjb25zb2xlIGJlZm9yZSB1c2luZyBQTV9rYmhpdCEiKTsKICAgICBpZiAoIWluX3Jhd19tb2RlKQotICAgICAgICBfUE1fa2V5Ym9hcmRfcmF3bW9kZSgpOworCV9QTV9rZXlib2FyZF9yYXdtb2RlKCk7CiAgICAgRkRfWkVSTygmcyk7CiAgICAgRkRfU0VUKF9QTV9jb25zb2xlX2ZkLCAmcyk7CiAgICAgcmV0dXJuIHNlbGVjdChfUE1fY29uc29sZV9mZCsxLCAmcywgTlVMTCwgTlVMTCwgJnR2KSA+IDA7CkBAIC01NTQsNjIgKzU1NCw2MiBAQAogICAgIHN0YXRpYyBzdHJ1Y3Qga2JlbnRyeSBrZTsKIAogICAgIGlmIChjb25zb2xlX2NvdW50ID09IDApCi0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIllvdSAqbXVzdCogb3BlbiBhIGNvbnNvbGUgYmVmb3JlIHVzaW5nIFBNX2dldGNoISIpOworCVBNX2ZhdGFsRXJyb3IoIllvdSAqbXVzdCogb3BlbiBhIGNvbnNvbGUgYmVmb3JlIHVzaW5nIFBNX2dldGNoISIpOwogICAgIGlmICghaW5fcmF3X21vZGUpCi0gICAgICAgIF9QTV9rZXlib2FyZF9yYXdtb2RlKCk7CisJX1BNX2tleWJvYXJkX3Jhd21vZGUoKTsKICAgICB3aGlsZSAocmVhZChfUE1fY29uc29sZV9mZCwgJmMsIDEpID4gMCkgewotICAgICAgICByZWxlYXNlID0gYyAmIDB4ODA7Ci0gICAgICAgIGMgJj0gMHg3RjsKLSAgICAgICAgaWYgKHJlbGVhc2UpIHsKLSAgICAgICAgICAgIHN3aXRjaChjKXsKLSAgICAgICAgICAgICAgICBjYXNlIDQyOiBjYXNlIDU0OiAvLyBTaGlmdAotICAgICAgICAgICAgICAgICAgICBfUE1fbW9kaWZpZXJzICY9IH5LQl9TSElGVDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOTogY2FzZSA5NzogLy8gQ29udHJvbAotICAgICAgICAgICAgICAgICAgICBfUE1fbW9kaWZpZXJzICY9IH5LQl9DT05UUk9MOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDU2OiBjYXNlIDEwMDogLy8gQWx0IC8gQWx0R3IKLSAgICAgICAgICAgICAgICAgICAgX1BNX21vZGlmaWVycyAmPSB+S0JfQUxUOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICBjYXNlIDQyOiBjYXNlIDU0OiAvLyBTaGlmdAotICAgICAgICAgICAgICAgIF9QTV9tb2RpZmllcnMgfD0gS0JfU0hJRlQ7Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOTogY2FzZSA5NzogLy8gQ29udHJvbAotICAgICAgICAgICAgICAgIF9QTV9tb2RpZmllcnMgfD0gS0JfQ09OVFJPTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNTY6IGNhc2UgMTAwOiAvLyBBbHQgLyBBbHRHcgotICAgICAgICAgICAgICAgIF9QTV9tb2RpZmllcnMgfD0gS0JfQUxUOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA1ODogLy8gQ2FwcyBMb2NrCi0gICAgICAgICAgICAgICAgX1BNX21vZGlmaWVycyBePSBLQl9DQVBTOwotICAgICAgICAgICAgICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBLRFNFVExFRCwgX1BNX21vZGlmaWVycyAmIDcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA2OTogLy8gTnVtIExvY2sKLSAgICAgICAgICAgICAgICBfUE1fbW9kaWZpZXJzIF49IEtCX05VTUxPQ0s7Ci0gICAgICAgICAgICAgICAgaW9jdGwoX1BNX2NvbnNvbGVfZmQsIEtEU0VUTEVELCBfUE1fbW9kaWZpZXJzICYgNyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDcwOiAvLyBTY3JvbGwgTG9jawotICAgICAgICAgICAgICAgIF9QTV9tb2RpZmllcnMgXj0gS0JfU0NST0xMOwotICAgICAgICAgICAgICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBLRFNFVExFRCwgX1BNX21vZGlmaWVycyAmIDcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyODoKLSAgICAgICAgICAgICAgICByZXR1cm4gMHgxQzsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAga2Uua2JfaW5kZXggPSBjOwotICAgICAgICAgICAgICAgIGtlLmtiX3RhYmxlID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoKF9QTV9tb2RpZmllcnMgJiBLQl9TSElGVCkgfHwgKF9QTV9tb2RpZmllcnMgJiBLQl9DQVBTKSkKLSAgICAgICAgICAgICAgICAgICAga2Uua2JfdGFibGUgfD0gS19TSElGVFRBQjsKLSAgICAgICAgICAgICAgICBpZiAoX1BNX21vZGlmaWVycyAmIEtCX0FMVCkKLSAgICAgICAgICAgICAgICAgICAga2Uua2JfdGFibGUgfD0gS19BTFRUQUI7Ci0gICAgICAgICAgICAgICAgaW9jdGwoX1BNX2NvbnNvbGVfZmQsIEtER0tCRU5ULCAodWxvbmcpJmtlKTsKLSAgICAgICAgICAgICAgICBjID0ga2Uua2JfdmFsdWUgJiAweEZGOwotICAgICAgICAgICAgICAgIHJldHVybiBjOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJcmVsZWFzZSA9IGMgJiAweDgwOworCWMgJj0gMHg3RjsKKwlpZiAocmVsZWFzZSkgeworCSAgICBzd2l0Y2goYyl7CisJCWNhc2UgNDI6IGNhc2UgNTQ6IC8qIFNoaWZ0ICovCisJCSAgICBfUE1fbW9kaWZpZXJzICY9IH5LQl9TSElGVDsKKwkJICAgIGJyZWFrOworCQljYXNlIDI5OiBjYXNlIDk3OiAvKiBDb250cm9sICovCisJCSAgICBfUE1fbW9kaWZpZXJzICY9IH5LQl9DT05UUk9MOworCQkgICAgYnJlYWs7CisJCWNhc2UgNTY6IGNhc2UgMTAwOiAvKiBBbHQgLyBBbHRHciAqLworCQkgICAgX1BNX21vZGlmaWVycyAmPSB+S0JfQUxUOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgY29udGludWU7CisJICAgIH0KKwlzd2l0Y2ggKGMpIHsKKwkgICAgY2FzZSA0MjogY2FzZSA1NDogLyogU2hpZnQgKi8KKwkJX1BNX21vZGlmaWVycyB8PSBLQl9TSElGVDsKKwkJIGJyZWFrOworCSAgICBjYXNlIDI5OiBjYXNlIDk3OiAvKiBDb250cm9sICovCisJCV9QTV9tb2RpZmllcnMgfD0gS0JfQ09OVFJPTDsKKwkJYnJlYWs7CisJICAgIGNhc2UgNTY6IGNhc2UgMTAwOiAvKiBBbHQgLyBBbHRHciAqLworCQlfUE1fbW9kaWZpZXJzIHw9IEtCX0FMVDsKKwkJYnJlYWs7CisJICAgIGNhc2UgNTg6IC8qIENhcHMgTG9jayAqLworCQlfUE1fbW9kaWZpZXJzIF49IEtCX0NBUFM7CisJCWlvY3RsKF9QTV9jb25zb2xlX2ZkLCBLRFNFVExFRCwgX1BNX21vZGlmaWVycyAmIDcpOworCQlicmVhazsKKwkgICAgY2FzZSA2OTogLyogTnVtIExvY2sgKi8KKwkJX1BNX21vZGlmaWVycyBePSBLQl9OVU1MT0NLOworCQlpb2N0bChfUE1fY29uc29sZV9mZCwgS0RTRVRMRUQsIF9QTV9tb2RpZmllcnMgJiA3KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgNzA6IC8qIFNjcm9sbCBMb2NrICovCisJCV9QTV9tb2RpZmllcnMgXj0gS0JfU0NST0xMOworCQlpb2N0bChfUE1fY29uc29sZV9mZCwgS0RTRVRMRUQsIF9QTV9tb2RpZmllcnMgJiA3KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMjg6CisJCXJldHVybiAweDFDOworCSAgICBkZWZhdWx0OgorCQlrZS5rYl9pbmRleCA9IGM7CisJCWtlLmtiX3RhYmxlID0gMDsKKwkJaWYgKChfUE1fbW9kaWZpZXJzICYgS0JfU0hJRlQpIHx8IChfUE1fbW9kaWZpZXJzICYgS0JfQ0FQUykpCisJCSAgICBrZS5rYl90YWJsZSB8PSBLX1NISUZUVEFCOworCQlpZiAoX1BNX21vZGlmaWVycyAmIEtCX0FMVCkKKwkJICAgIGtlLmtiX3RhYmxlIHw9IEtfQUxUVEFCOworCQlpb2N0bChfUE1fY29uc29sZV9mZCwgS0RHS0JFTlQsICh1bG9uZykma2UpOworCQljID0ga2Uua2JfdmFsdWUgJiAweEZGOworCQlyZXR1cm4gYzsKKwkgICAgfQorCX0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjIxLDEyICs2MjEsMTIgQEAKICAgICBpbnQgX1BNX2NvbnNvbGVfZmQpCiB7CiAgICAgd2hpbGUgKGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBWVF9XQUlUQUNUSVZFLCB0dHlfdmMpIDwgMCkgewotICAgICAgICBpZiAoKGVycm5vICE9IEVBR0FJTikgJiYgKGVycm5vICE9IEVJTlRSKSkgewotICAgICAgICAgICAgcGVycm9yKCJpb2N0bChWVF9XQUlUQUNUSVZFKSIpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgdXNsZWVwKDE1MDAwMCk7Ci0gICAgICAgIH0KKwlpZiAoKGVycm5vICE9IEVBR0FJTikgJiYgKGVycm5vICE9IEVJTlRSKSkgeworCSAgICBwZXJyb3IoImlvY3RsKFZUX1dBSVRBQ1RJVkUpIik7CisJICAgIGV4aXQoMSk7CisJICAgIH0KKwl1c2xlZXAoMTUwMDAwKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02NDEsNyArNjQxLDcgQEAKIAogICAgIHNwcmludGYoZm5hbWUsICIvZGV2L3R0eSVkIiwgdmMpOwogICAgIGlmICgoc3RhdChmbmFtZSwgJnNidWYpID49IDApICYmIChnZXR1aWQoKSA9PSBzYnVmLnN0X3VpZCkpCi0gICAgICAgIHJldHVybiAxOworCXJldHVybiAxOwogICAgIHByaW50ZigiWW91IG11c3QgYmUgdGhlIG93bmVyIG9mIHRoZSBjdXJyZW50IGNvbnNvbGUgdG8gdXNlIHRoaXMgcHJvZ3JhbS5cbiIpOwogICAgIHJldHVybiAwOwogfQpAQCAtNjU4LDcgKzY1OCw3IEBACiAgICAgaW50IGNvbnNvbGVfaWQpCiB7CiAgICAgaWYgKGlvY3RsKGNvbnNvbGVfaWQsIEtEU0VUTU9ERSwgS0RfVEVYVCkgPCAwKQotICAgICAgICBMT0dXQVJOKCJpb2N0bChLRFNFVE1PREUpIGZhaWxlZCIpOworCUxPR1dBUk4oImlvY3RsKEtEU0VUTU9ERSkgZmFpbGVkIik7CiAgICAgX1BNX3Jlc3RvcmVfa2JfbW9kZSgpOwogfQogCkBAIC02ODIsNyArNjgyLDcgQEAKIAogICAgIC8qIENoZWNrIGlmIHdlIGhhdmUgYWxyZWFkeSBvcGVuZWQgdGhlIGNvbnNvbGUgKi8KICAgICBpZiAoY29uc29sZV9jb3VudCsrKQotICAgICAgICByZXR1cm4gX1BNX2NvbnNvbGVfZmQ7CisJcmV0dXJuIF9QTV9jb25zb2xlX2ZkOwogCiAgICAgLyogTm93LCBpdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCB1c2UgL2Rldi90dHkgYW5kIHNlZSB3aGF0IGl0IGlzCiAgICAgICogY29ubmVjdGVkIHRvLiBBbGFzLCB3ZSBjYW5ub3QgZmluZCBvdXQgcmVsaWFibHkgd2hhdCBWQyAvZGV2L3R0eSBpcwpAQCAtNjkwLDI2ICs2OTAsMjYgQEAKICAgICAgKi8KICAgICBzdGFydHVwX3ZjID0gMDsKICAgICBmb3IgKF9QTV9jb25zb2xlX2ZkID0gMDsgX1BNX2NvbnNvbGVfZmQgPCAzOyBfUE1fY29uc29sZV9mZCsrKSB7Ci0gICAgICAgIGlmIChmc3RhdChfUE1fY29uc29sZV9mZCwgJnNidWYpIDwgMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaW9jdGwoX1BNX2NvbnNvbGVfZmQsIFZUX0dFVE1PREUsICZ2dG0pIDwgMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoKHNidWYuc3RfcmRldiAmIDB4RkYwMCkgIT0gMHg0MDApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCEoc2J1Zi5zdF9yZGV2ICYgMHhGRikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdHR5X3ZjID0gc2J1Zi5zdF9yZGV2ICYgMHhGRjsKLSAgICAgICAgcmVzdG9yZV90ZXh0X2NvbnNvbGUoX1BNX2NvbnNvbGVfZmQpOwotICAgICAgICByZXR1cm4gX1BNX2NvbnNvbGVfZmQ7Ci0gICAgICAgIH0KKwlpZiAoZnN0YXQoX1BNX2NvbnNvbGVfZmQsICZzYnVmKSA8IDApCisJICAgIGNvbnRpbnVlOworCWlmIChpb2N0bChfUE1fY29uc29sZV9mZCwgVlRfR0VUTU9ERSwgJnZ0bSkgPCAwKQorCSAgICBjb250aW51ZTsKKwlpZiAoKHNidWYuc3RfcmRldiAmIDB4RkYwMCkgIT0gMHg0MDApCisJICAgIGNvbnRpbnVlOworCWlmICghKHNidWYuc3RfcmRldiAmIDB4RkYpKQorCSAgICBjb250aW51ZTsKKwl0dHlfdmMgPSBzYnVmLnN0X3JkZXYgJiAweEZGOworCXJlc3RvcmVfdGV4dF9jb25zb2xlKF9QTV9jb25zb2xlX2ZkKTsKKwlyZXR1cm4gX1BNX2NvbnNvbGVfZmQ7CisJfQogICAgIGlmICgoX1BNX2NvbnNvbGVfZmQgPSBvcGVuKCIvZGV2L2NvbnNvbGUiLCBPX1JEV1IpKSA8IDApIHsKLSAgICAgICAgcHJpbnRmKCJvcGVuX2Rldl9jb25zb2xlOiBjYW4ndCBvcGVuIC9kZXYvY29uc29sZSBcbiIpOwotICAgICAgICBleGl0KDEpOwotICAgICAgICB9CisJcHJpbnRmKCJvcGVuX2Rldl9jb25zb2xlOiBjYW4ndCBvcGVuIC9kZXYvY29uc29sZSBcbiIpOworCWV4aXQoMSk7CisJfQogICAgIGlmIChpb2N0bChfUE1fY29uc29sZV9mZCwgVlRfT1BFTlFSWSwgJnR0eV92YykgPCAwKQotICAgICAgICBnb3RvIEVycm9yOworCWdvdG8gRXJyb3I7CiAgICAgaWYgKHR0eV92YyA8PSAwKQotICAgICAgICBnb3RvIEVycm9yOworCWdvdG8gRXJyb3I7CiAgICAgc3ByaW50ZihmbmFtZSwgIi9kZXYvdHR5JWQiLCB0dHlfdmMpOwogICAgIGNsb3NlKF9QTV9jb25zb2xlX2ZkKTsKIApAQCAtNzE4LDQwICs3MTgsNDAgQEAKIAogICAgIC8qIFdlIG11c3QgdXNlIFJEV1IgdG8gYWxsb3cgZm9yIG91dHB1dC4uLiAqLwogICAgIGlmICgoKF9QTV9jb25zb2xlX2ZkID0gb3BlbihmbmFtZSwgT19SRFdSKSkgPj0gMCkgJiYKLSAgICAgICAgICAgIChpb2N0bChfUE1fY29uc29sZV9mZCwgVlRfR0VUU1RBVEUsICZ2dHMpID49IDApKSB7Ci0gICAgICAgIGlmICghY2hlY2tfb3duZXIodnRzLnZfYWN0aXZlKSkKLSAgICAgICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgICAgIHJlc3RvcmVfdGV4dF9jb25zb2xlKF9QTV9jb25zb2xlX2ZkKTsKKwkgICAgKGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBWVF9HRVRTVEFURSwgJnZ0cykgPj0gMCkpIHsKKwlpZiAoIWNoZWNrX293bmVyKHZ0cy52X2FjdGl2ZSkpCisJICAgIGdvdG8gRXJyb3I7CisJcmVzdG9yZV90ZXh0X2NvbnNvbGUoX1BNX2NvbnNvbGVfZmQpOwogCi0gICAgICAgIC8qIFN1Y2Nlc3MsIHJlZGlyZWN0IGFsbCBzdGRpb3MgKi8KLSAgICAgICAgZmZsdXNoKHN0ZGluKTsKLSAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICBjbG9zZSgwKTsKLSAgICAgICAgY2xvc2UoMSk7Ci0gICAgICAgIGNsb3NlKDIpOwotICAgICAgICBkdXAoX1BNX2NvbnNvbGVfZmQpOwotICAgICAgICBkdXAoX1BNX2NvbnNvbGVfZmQpOwotICAgICAgICBkdXAoX1BNX2NvbnNvbGVfZmQpOworCS8qIFN1Y2Nlc3MsIHJlZGlyZWN0IGFsbCBzdGRpb3MgKi8KKwlmZmx1c2goc3RkaW4pOworCWZmbHVzaChzdGRvdXQpOworCWZmbHVzaChzdGRlcnIpOworCWNsb3NlKDApOworCWNsb3NlKDEpOworCWNsb3NlKDIpOworCWR1cChfUE1fY29uc29sZV9mZCk7CisJZHVwKF9QTV9jb25zb2xlX2ZkKTsKKwlkdXAoX1BNX2NvbnNvbGVfZmQpOwogCi0gICAgICAgIC8qIGNsZWFyIHNjcmVlbiBhbmQgc3dpdGNoIHRvIGl0ICovCi0gICAgICAgIGZ3cml0ZSgiXGVbSFxlW0oiLCA2LCAxLCBzdGRlcnIpOwotICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICAgICAgaWYgKHR0eV92YyAhPSB2dHMudl9hY3RpdmUpIHsKLSAgICAgICAgICAgIHN0YXJ0dXBfdmMgPSB2dHMudl9hY3RpdmU7Ci0gICAgICAgICAgICBpb2N0bChfUE1fY29uc29sZV9mZCwgVlRfQUNUSVZBVEUsIHR0eV92Yyk7Ci0gICAgICAgICAgICB3YWl0X3Z0X2FjdGl2ZShfUE1fY29uc29sZV9mZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBjbGVhciBzY3JlZW4gYW5kIHN3aXRjaCB0byBpdCAqLworCWZ3cml0ZSgiXGVbSFxlW0oiLCA2LCAxLCBzdGRlcnIpOworCWZmbHVzaChzdGRlcnIpOworCWlmICh0dHlfdmMgIT0gdnRzLnZfYWN0aXZlKSB7CisJICAgIHN0YXJ0dXBfdmMgPSB2dHMudl9hY3RpdmU7CisJICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBWVF9BQ1RJVkFURSwgdHR5X3ZjKTsKKwkgICAgd2FpdF92dF9hY3RpdmUoX1BNX2NvbnNvbGVfZmQpOworCSAgICB9CisJfQogICAgIHJldHVybiBfUE1fY29uc29sZV9mZDsKIAogRXJyb3I6CiAgICAgaWYgKF9QTV9jb25zb2xlX2ZkID4gMikKLSAgICAgICAgY2xvc2UoX1BNX2NvbnNvbGVfZmQpOworCWNsb3NlKF9QTV9jb25zb2xlX2ZkKTsKICAgICBjb25zb2xlX2NvdW50ID0gMDsKICAgICBQTV9mYXRhbEVycm9yKAotICAgICAgICAiTm90IHJ1bm5pbmcgaW4gYSBncmFwaGljcyBjYXBhYmxlIGNvbnNvbGUsXG4iCi0gICAgICAgICJhbmQgdW5hYmxlIHRvIGZpbmQgb25lLlxuIik7CisJIk5vdCBydW5uaW5nIGluIGEgZ3JhcGhpY3MgY2FwYWJsZSBjb25zb2xlLFxuIgorCSJhbmQgdW5hYmxlIHRvIGZpbmQgb25lLlxuIik7CiAgICAgcmV0dXJuIC0xOwogfQogCkBAIC03NjQsNyArNzY0LDcgQEAKIGludCBQTUFQSSBQTV9nZXRDb25zb2xlU3RhdGVTaXplKHZvaWQpCiB7CiAgICAgaWYgKCFpbml0ZWQpCi0gICAgICAgIFBNX2luaXQoKTsKKwlQTV9pbml0KCk7CiAgICAgcmV0dXJuIFBNX2dldFZHQVN0YXRlU2l6ZSgpICsgRk9OVF9DKjI7CiB9CiAKQEAgLTc3OCwxMSArNzc4LDExIEBACiAKICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGNvbnNvbGUgZm9udCAqLwogICAgIGlmIChpb2N0bChjb25zb2xlX2lkLEdJT19GT05ULCZyZWdzW1BNX2dldFZHQVN0YXRlU2l6ZSgpXSkgPCAwKQotICAgICAgICBwZXJyb3IoImlvY3RsKEdJT19GT05UKSIpOworCXBlcnJvcigiaW9jdGwoR0lPX0ZPTlQpIik7CiAKICAgICAvKiBJbmZvcm0gdGhlIExpbnV4IGNvbnNvbGUgdGhhdCB3ZSBhcmUgZ29pbmcgaW50byBncmFwaGljcyBtb2RlICovCiAgICAgaWYgKGlvY3RsKGNvbnNvbGVfaWQsIEtEU0VUTU9ERSwgS0RfR1JBUEhJQ1MpIDwgMCkKLSAgICAgICAgcGVycm9yKCJpb2N0bChLRFNFVE1PREUpIik7CisJcGVycm9yKCJpb2N0bChLRFNFVE1PREUpIik7CiAKICAgICAvKiBTYXZlIHN0YXRlIG9mIFZHQSByZWdpc3RlcnMgKi8KICAgICBQTV9zYXZlVkdBU3RhdGUoc3RhdGVCdWYpOwpAQCAtODA2LDExICs4MDYsMTEgQEAKIAogICAgIC8qIEluZm9ybSB0aGUgTGludXggY29uc29sZSB0aGF0IHdlIGFyZSBiYWNrIGZyb20gZ3JhcGhpY3MgbW9kZXMgKi8KICAgICBpZiAoaW9jdGwoY29uc29sZV9pZCwgS0RTRVRNT0RFLCBLRF9URVhUKSA8IDApCi0gICAgICAgIExPR1dBUk4oImlvY3RsKEtEU0VUTU9ERSkgZmFpbGVkIik7CisJTE9HV0FSTigiaW9jdGwoS0RTRVRNT0RFKSBmYWlsZWQiKTsKIAogICAgIC8qIFJlc3RvcmUgdGhlIG9sZCBjb25zb2xlIGZvbnQgKi8KICAgICBpZiAoaW9jdGwoY29uc29sZV9pZCxQSU9fRk9OVCwmcmVnc1tQTV9nZXRWR0FTdGF0ZVNpemUoKV0pIDwgMCkKLSAgICAgICAgTE9HV0FSTigiaW9jdGwoS0RTRVRNT0RFKSBmYWlsZWQiKTsKKwlMT0dXQVJOKCJpb2N0bChLRFNFVE1PREUpIGZhaWxlZCIpOwogCiAgICAgLyogQ29taW5nIGJhY2sgZnJvbSBncmFwaGljcyBtb2RlIG9uIExpbnV4IGFsc28gcmVzdG9yZWQgdGhlIHByZXZpb3VzCiAgICAgICogdGV4dCBtb2RlIGNvbnNvbGUgY29udGVudHMsIHNvIHdlIG5lZWQgdG8gY2xlYXIgdGhlIHNjcmVlbiB0byBnZXQKQEAgLTgzMCwxNSArODMwLDE1IEBACiB7CiAgICAgLyogUmVzdG9yZSBjb25zb2xlIHRvIG5vcm1hbCBvcGVyYXRpb24gKi8KICAgICBpZiAoLS1jb25zb2xlX2NvdW50ID09IDApIHsKLSAgICAgICAgLyogUmUtYWN0aXZhdGUgdGhlIG9yaWdpbmFsIHZpcnR1YWwgY29uc29sZSAqLwotICAgICAgICBpZiAoc3RhcnR1cF92YyA+IDApCi0gICAgICAgICAgICBpb2N0bChfUE1fY29uc29sZV9mZCwgVlRfQUNUSVZBVEUsIHN0YXJ0dXBfdmMpOworCS8qIFJlLWFjdGl2YXRlIHRoZSBvcmlnaW5hbCB2aXJ0dWFsIGNvbnNvbGUgKi8KKwlpZiAoc3RhcnR1cF92YyA+IDApCisJICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBWVF9BQ1RJVkFURSwgc3RhcnR1cF92Yyk7CiAKLSAgICAgICAgLyogQ2xvc2UgdGhlIGNvbnNvbGUgZmlsZSBkZXNjcmlwdG9yICovCi0gICAgICAgIGlmIChfUE1fY29uc29sZV9mZCA+IDIpCi0gICAgICAgICAgICBjbG9zZShfUE1fY29uc29sZV9mZCk7Ci0gICAgICAgIF9QTV9jb25zb2xlX2ZkID0gLTE7Ci0gICAgICAgIH0KKwkvKiBDbG9zZSB0aGUgY29uc29sZSBmaWxlIGRlc2NyaXB0b3IgKi8KKwlpZiAoX1BNX2NvbnNvbGVfZmQgPiAyKQorCSAgICBjbG9zZShfUE1fY29uc29sZV9mZCk7CisJX1BNX2NvbnNvbGVfZmQgPSAtMTsKKwl9CiB9CiAKIHZvaWQgUE1fc2V0T1NDdXJzb3JMb2NhdGlvbihpbnQgeCxpbnQgeSkKQEAgLTg1NSwxMiArODU1LDEyIEBACiAgICAgc3RydWN0IHdpbnNpemUgIHdzOwogICAgIHN0cnVjdCB2dF9zaXplcyB2czsKIAotICAgIC8vIFJlc2l6ZSB0aGUgc29mdHdhcmUgdGVybWluYWwKKyAgICAvKiBSZXNpemUgdGhlIHNvZnR3YXJlIHRlcm1pbmFsICovCiAgICAgd3Mud3NfY29sID0gd2lkdGg7CiAgICAgd3Mud3Nfcm93ID0gaGVpZ2h0OwogICAgIGlvY3RsKF9QTV9jb25zb2xlX2ZkLCBUSU9DU1dJTlNaLCAmd3MpOwogCi0gICAgLy8gQW5kIHRoZSBoYXJkd2FyZQorICAgIC8qIEFuZCB0aGUgaGFyZHdhcmUgKi8KICAgICB2cy52X3Jvd3MgPSBoZWlnaHQ7CiAgICAgdnMudl9jb2xzID0gd2lkdGg7CiAgICAgdnMudl9zY3JvbGxzaXplID0gMDsKQEAgLTg2OSwxOCArODY5LDE4IEBACiAKIGlib29sIFBNQVBJIFBNX3NldFJlYWxUaW1lQ2xvY2tIYW5kbGVyKFBNX2ludEhhbmRsZXIgaWgsIGludCBmcmVxdWVuY3kpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIExpbnV4CisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIExpbnV4ICovCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFBNQVBJIFBNX3NldFJlYWxUaW1lQ2xvY2tGcmVxdWVuY3koaW50IGZyZXF1ZW5jeSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmb3IgTGludXgKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmb3IgTGludXggKi8KIH0KIAogdm9pZCBQTUFQSSBQTV9yZXN0b3JlUmVhbFRpbWVDbG9ja0hhbmRsZXIodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmb3IgTGludXgKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmb3IgTGludXggKi8KIH0KIAogY2hhciAqIFBNQVBJIFBNX2dldEN1cnJlbnRQYXRoKApAQCAtOTI5LDcgKzkyOSw3IEBACiB7CiAgICAgc3RhdGljIHVjaGFyICp6ZXJvUHRyID0gTlVMTDsKICAgICBpZiAoIXplcm9QdHIpCi0gICAgICAgIHplcm9QdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMCwweEZGRkZGLHRydWUpOworCXplcm9QdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMCwweEZGRkZGLHRydWUpOwogICAgIHJldHVybiAodm9pZCopKHplcm9QdHIgKyAweDQwMCk7CiB9CiAKQEAgLTkzOSw3ICs5MzksNyBAQAogICAgICAqIGFkZHJlc3MgbWFwcGluZywgc28gd2UgY2FuIHJldHVybiB0aGUgYWRkcmVzcyBoZXJlLgogICAgICAqLwogICAgIGlmICghaW5pdGVkKQotICAgICAgICBQTV9pbml0KCk7CisJUE1faW5pdCgpOwogICAgIHJldHVybiAodm9pZCopKDB4QTAwMDApOwogfQogCkBAIC05NDksMTEgKzk0OSwxMSBAQAogICAgIHVsb25nICAgYmFzZUFkZHIsYmFzZU9mczsKIAogICAgIGlmICghaW5pdGVkKQotICAgICAgICBQTV9pbml0KCk7CisJUE1faW5pdCgpOwogICAgIGlmIChiYXNlID49IDB4QTAwMDAgJiYgYmFzZSA8IDB4MTAwMDAwKQotICAgICAgICByZXR1cm4gKHZvaWQqKWJhc2U7CisJcmV0dXJuICh2b2lkKiliYXNlOwogICAgIGlmICghZmRfbWVtICYmIChmZF9tZW0gPSBvcGVuKCIvZGV2L21lbSIsIE9fUkRXUikpID09IC0xKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIAogICAgIC8qIFJvdW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHRvIGEgNEtiIGJvdW5kYXJ5IGFuZCB0aGUgbGltaXQgdG8gYQogICAgICAqIDRLYi0xIGJvdW5kYXJ5IGJlZm9yZSBwYXNzaW5nIHRoZSB2YWx1ZXMgdG8gbW1hcC4gSWYgd2Ugcm91bmQgdGhlCkBAIC05NjQsNTcgKzk2NCw1NyBAQAogICAgIGJhc2VBZGRyID0gYmFzZSAmIH40MDk1OwogICAgIGxpbWl0ID0gKChsaW1pdCtiYXNlT2ZzKzErNDA5NSkgJiB+NDA5NSktMTsKICAgICBpZiAoKHAgPSBtbWFwKDAsIGxpbWl0KzEsCi0gICAgICAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAotICAgICAgICAgICAgZmRfbWVtLCBiYXNlQWRkcikpID09ICh2b2lkICopLTEpCi0gICAgICAgIHJldHVybiBOVUxMOworCSAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAorCSAgICBmZF9tZW0sIGJhc2VBZGRyKSkgPT0gKHZvaWQgKiktMSkKKwlyZXR1cm4gTlVMTDsKICAgICByZXR1cm4gKHZvaWQqKShwK2Jhc2VPZnMpOwogfQogCiB2b2lkIFBNQVBJIFBNX2ZyZWVQaHlzaWNhbEFkZHIodm9pZCAqcHRyLHVsb25nIGxpbWl0KQogewogICAgIGlmICgodWxvbmcpcHRyID49IDB4MTAwMDAwKQotICAgICAgICBtdW5tYXAocHRyLGxpbWl0KzEpOworCW11bm1hcChwdHIsbGltaXQrMSk7CiB9CiAKIHVsb25nIFBNQVBJIFBNX2dldFBoeXNpY2FsQWRkcih2b2lkICpwKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBsaW5lYXIKLSAgICAvLyAgICAgICBhZGRyZXNzLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBsaW5lYXIgKi8KKyAgICAvKiAgICAgICBhZGRyZXNzLiAqLwogICAgIHJldHVybiAweEZGRkZGRkZGVUw7CiB9CiAKIGlib29sIFBNQVBJIFBNX2dldFBoeXNpY2FsQWRkclJhbmdlKHZvaWQgKnAsdWxvbmcgbGVuZ3RoLHVsb25nICpwaHlzQWRkcmVzcykKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmaW5kIGEgcmFuZ2Ugb2YgcGh5c2ljYWwgYWRkcmVzc2VzCi0gICAgLy8gICAgICAgZm9yIGEgbGluZWFyIGFkZHJlc3MuCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgZmluZCBhIHJhbmdlIG9mIHBoeXNpY2FsIGFkZHJlc3NlcyAqLworICAgIC8qICAgICAgIGZvciBhIGxpbmVhciBhZGRyZXNzLiAqLwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBQTUFQSSBQTV9zbGVlcCh1bG9uZyBtaWxsaXNlY29uZHMpCiB7Ci0gICAgLy8gVE9ETzogUHV0IHRoZSBwcm9jZXNzIHRvIHNsZWVwIGZvciBtaWxsaXNlY29uZHMKKyAgICAvKiBUT0RPOiBQdXQgdGhlIHByb2Nlc3MgdG8gc2xlZXAgZm9yIG1pbGxpc2Vjb25kcyAqLwogfQogCiBpbnQgUE1BUEkgUE1fZ2V0Q09NUG9ydChpbnQgcG9ydCkKIHsKLSAgICAvLyBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5Ci0gICAgLy8gICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLgorICAgIC8qIFRPRE86IFJlLWNvZGUgdGhpcyB0byBkZXRlcm1pbmUgcmVhbCB2YWx1ZXMgdXNpbmcgdGhlIFBsdWcgYW5kIFBsYXkgKi8KKyAgICAvKiAgICAgICBtYW5hZ2VyIGZvciB0aGUgT1MuICovCiAgICAgc3dpdGNoIChwb3J0KSB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuIDB4M0Y4OwotICAgICAgICBjYXNlIDE6IHJldHVybiAweDJGODsKLSAgICAgICAgfQorCWNhc2UgMDogcmV0dXJuIDB4M0Y4OworCWNhc2UgMTogcmV0dXJuIDB4MkY4OworCX0KICAgICByZXR1cm4gMDsKIH0KIAogaW50IFBNQVBJIFBNX2dldExQVFBvcnQoaW50IHBvcnQpCiB7Ci0gICAgLy8gVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheQotICAgIC8vICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4KKyAgICAvKiBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5ICovCisgICAgLyogICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLiAqLwogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNCQzsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgzNzg7Ci0gICAgICAgIGNhc2UgMjogcmV0dXJuIDB4Mjc4OwotICAgICAgICB9CisJY2FzZSAwOiByZXR1cm4gMHgzQkM7CisJY2FzZSAxOiByZXR1cm4gMHgzNzg7CisJY2FzZSAyOiByZXR1cm4gMHgyNzg7CisJfQogICAgIHJldHVybiAwOwogfQogCkBAIC0xMDM4LDcgKzEwMzgsNyBAQAogICAgICAqIG1hcHBpbmcgc28gd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgaW4gaGVyZS4KICAgICAgKi8KICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICByZXR1cm4gKHZvaWQqKU1LX1BIWVMocl9zZWcscl9vZmYpOwogfQogCkBAIC0xMDQ4LDI0ICsxMDQ4LDI0IEBACiAgICAgY2hhciAgICAqciA9IChjaGFyICopUkVBTF9NRU1fQkFTRTsKIAogICAgIGlmICghaW5pdGVkKQotICAgICAgICBQTV9pbml0KCk7CisJUE1faW5pdCgpOwogICAgIGlmICghbWVtX2luZm8ucmVhZHkpCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogICAgIGlmIChtZW1faW5mby5jb3VudCA9PSBSRUFMX01FTV9CTE9DS1MpCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogICAgIHNpemUgPSAoc2l6ZSArIDE1KSAmIH4xNTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbWVtX2luZm8uY291bnQ7IGkrKykgewotICAgICAgICBpZiAobWVtX2luZm8uYmxvY2tzW2ldLmZyZWUgJiYgc2l6ZSA8IG1lbV9pbmZvLmJsb2Nrc1tpXS5zaXplKSB7Ci0gICAgICAgICAgICBpbnNlcnRfYmxvY2soaSk7Ci0gICAgICAgICAgICBtZW1faW5mby5ibG9ja3NbaV0uc2l6ZSA9IHNpemU7Ci0gICAgICAgICAgICBtZW1faW5mby5ibG9ja3NbaV0uZnJlZSA9IDA7Ci0gICAgICAgICAgICBtZW1faW5mby5ibG9ja3NbaSArIDFdLnNpemUgLT0gc2l6ZTsKLSAgICAgICAgICAgICpyX3NlZyA9ICh1aW50KShyKSA+PiA0OwotICAgICAgICAgICAgKnJfb2ZmID0gKHVpbnQpKHIpICYgMHhGOwotICAgICAgICAgICAgcmV0dXJuICh2b2lkICopcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgciArPSBtZW1faW5mby5ibG9ja3NbaV0uc2l6ZTsKLSAgICAgICAgfQorCWlmIChtZW1faW5mby5ibG9ja3NbaV0uZnJlZSAmJiBzaXplIDwgbWVtX2luZm8uYmxvY2tzW2ldLnNpemUpIHsKKwkgICAgaW5zZXJ0X2Jsb2NrKGkpOworCSAgICBtZW1faW5mby5ibG9ja3NbaV0uc2l6ZSA9IHNpemU7CisJICAgIG1lbV9pbmZvLmJsb2Nrc1tpXS5mcmVlID0gMDsKKwkgICAgbWVtX2luZm8uYmxvY2tzW2kgKyAxXS5zaXplIC09IHNpemU7CisJICAgICpyX3NlZyA9ICh1aW50KShyKSA+PiA0OworCSAgICAqcl9vZmYgPSAodWludCkocikgJiAweEY7CisJICAgIHJldHVybiAodm9pZCAqKXI7CisJICAgIH0KKwlyICs9IG1lbV9pbmZvLmJsb2Nrc1tpXS5zaXplOworCX0KICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTA3NSwyMyArMTA3NSwyMyBAQAogICAgIGNoYXIgICAgKnIgPSAoY2hhciAqKVJFQUxfTUVNX0JBU0U7CiAKICAgICBpZiAoIW1lbV9pbmZvLnJlYWR5KQotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogICAgIGkgPSAwOwogICAgIHdoaWxlIChtZW0gIT0gKHZvaWQgKilyKSB7Ci0gICAgICAgIHIgKz0gbWVtX2luZm8uYmxvY2tzW2ldLnNpemU7Ci0gICAgICAgIGkrKzsKLSAgICAgICAgaWYgKGkgPT0gbWVtX2luZm8uY291bnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwlyICs9IG1lbV9pbmZvLmJsb2Nrc1tpXS5zaXplOworCWkrKzsKKwlpZiAoaSA9PSBtZW1faW5mby5jb3VudCkKKwkgICAgcmV0dXJuOworCX0KICAgICBtZW1faW5mby5ibG9ja3NbaV0uZnJlZSA9IDE7CiAgICAgaWYgKGkgKyAxIDwgbWVtX2luZm8uY291bnQgJiYgbWVtX2luZm8uYmxvY2tzW2kgKyAxXS5mcmVlKSB7Ci0gICAgICAgIG1lbV9pbmZvLmJsb2Nrc1tpXS5zaXplICs9IG1lbV9pbmZvLmJsb2Nrc1tpICsgMV0uc2l6ZTsKLSAgICAgICAgZGVsZXRlX2Jsb2NrKGkgKyAxKTsKLSAgICAgICAgfQorCW1lbV9pbmZvLmJsb2Nrc1tpXS5zaXplICs9IG1lbV9pbmZvLmJsb2Nrc1tpICsgMV0uc2l6ZTsKKwlkZWxldGVfYmxvY2soaSArIDEpOworCX0KICAgICBpZiAoaSAtIDEgPj0gMCAmJiBtZW1faW5mby5ibG9ja3NbaSAtIDFdLmZyZWUpIHsKLSAgICAgICAgbWVtX2luZm8uYmxvY2tzW2kgLSAxXS5zaXplICs9IG1lbV9pbmZvLmJsb2Nrc1tpXS5zaXplOwotICAgICAgICBkZWxldGVfYmxvY2soaSk7Ci0gICAgICAgIH0KKwltZW1faW5mby5ibG9ja3NbaSAtIDFdLnNpemUgKz0gbWVtX2luZm8uYmxvY2tzW2ldLnNpemU7CisJZGVsZXRlX2Jsb2NrKGkpOworCX0KIH0KIAogI2RlZmluZSBESVJFQ1RJT05fRkxBRyAgKDEgPDwgMTApCkBAIC0xMTA0LDI3ICsxMTA0LDI3IEBACiAgICAgZWRpID0gY29udGV4dC52bS5yZWdzLmVkaSAmIDB4ZmZmZjsKICAgICBlZGkgKz0gKHVuc2lnbmVkIGludCljb250ZXh0LnZtLnJlZ3MuZHMgPDwgNDsKICAgICBpZiAoY29udGV4dC52bS5yZWdzLmVmbGFncyAmIERJUkVDVElPTl9GTEFHKSB7Ci0gICAgICAgIGlmIChzaXplID09IDQpCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJzdGQ7IGluc2w7IGNsZCIKLSAgICAgICAgICAgICA6ICI9RCIgKGVkaSkgOiAiZCIgKGVkeCksICIwIiAoZWRpKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKLSAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoInN0ZDsgaW5zdzsgY2xkIgotICAgICAgICAgICAgIDogIj1EIiAoZWRpKSA6ICJkIiAoZWR4KSwgIjAiIChlZGkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgic3RkOyBpbnNiOyBjbGQiCi0gICAgICAgICAgICAgOiAiPUQiIChlZGkpIDogImQiIChlZHgpLCAiMCIgKGVkaSkpOwotICAgICAgICB9CisJaWYgKHNpemUgPT0gNCkKKwkgICAgYXNtIHZvbGF0aWxlICgic3RkOyBpbnNsOyBjbGQiCisJICAgICA6ICI9RCIgKGVkaSkgOiAiZCIgKGVkeCksICIwIiAoZWRpKSk7CisJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCSAgICBhc20gdm9sYXRpbGUgKCJzdGQ7IGluc3c7IGNsZCIKKwkgICAgIDogIj1EIiAoZWRpKSA6ICJkIiAoZWR4KSwgIjAiIChlZGkpKTsKKwllbHNlCisJICAgIGFzbSB2b2xhdGlsZSAoInN0ZDsgaW5zYjsgY2xkIgorCSAgICAgOiAiPUQiIChlZGkpIDogImQiIChlZHgpLCAiMCIgKGVkaSkpOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHNpemUgPT0gNCkKLSAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNsZDsgaW5zbCIKLSAgICAgICAgICAgICA6ICI9RCIgKGVkaSkgOiAiZCIgKGVkeCksICIwIiAoZWRpKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKLSAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNsZDsgaW5zdyIKLSAgICAgICAgICAgICA6ICI9RCIgKGVkaSkgOiAiZCIgKGVkeCksICIwIiAoZWRpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNsZDsgaW5zYiIKLSAgICAgICAgICAgICA6ICI9RCIgKGVkaSkgOiAiZCIgKGVkeCksICIwIiAoZWRpKSk7Ci0gICAgICAgIH0KKwlpZiAoc2l6ZSA9PSA0KQorCSAgICBhc20gdm9sYXRpbGUgKCJjbGQ7IGluc2wiCisJICAgICA6ICI9RCIgKGVkaSkgOiAiZCIgKGVkeCksICIwIiAoZWRpKSk7CisJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCSAgICBhc20gdm9sYXRpbGUgKCJjbGQ7IGluc3ciCisJICAgICA6ICI9RCIgKGVkaSkgOiAiZCIgKGVkeCksICIwIiAoZWRpKSk7CisJZWxzZQorCSAgICBhc20gdm9sYXRpbGUgKCJjbGQ7IGluc2IiCisJICAgICA6ICI9RCIgKGVkaSkgOiAiZCIgKGVkeCksICIwIiAoZWRpKSk7CisJfQogICAgIGVkaSAtPSAodW5zaWduZWQgaW50KWNvbnRleHQudm0ucmVncy5kcyA8PCA0OwogICAgIGNvbnRleHQudm0ucmVncy5lZGkgJj0gMHhmZmZmMDAwMDsKICAgICBjb250ZXh0LnZtLnJlZ3MuZWRpIHw9IGVkaSAmIDB4ZmZmZjsKQEAgLTExMzksMzMgKzExMzksMzMgQEAKICAgICBlZGkgPSBjb250ZXh0LnZtLnJlZ3MuZWRpICYgMHhmZmZmOwogICAgIGVkaSArPSAodW5zaWduZWQgaW50KWNvbnRleHQudm0ucmVncy5kcyA8PCA0OwogICAgIGlmIChjb250ZXh0LnZtLnJlZ3MuZWZsYWdzICYgRElSRUNUSU9OX0ZMQUcpIHsKLSAgICAgICAgaWYgKHNpemUgPT0gNCkKLSAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoInN0ZDsgcmVwOyBpbnNsOyBjbGQiCi0gICAgICAgICAgICAgOiAiPUQiIChlZGkpLCAiPWMiIChlY3gpCi0gICAgICAgICAgICAgOiAiZCIgKGVkeCksICIwIiAoZWRpKSwgIjEiIChlY3gpKTsKLSAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgic3RkOyByZXA7IGluc3c7IGNsZCIKLSAgICAgICAgICAgICA6ICI9RCIgKGVkaSksICI9YyIgKGVjeCkKLSAgICAgICAgICAgICA6ICJkIiAoZWR4KSwgIjAiIChlZGkpLCAiMSIgKGVjeCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJzdGQ7IHJlcDsgaW5zYjsgY2xkIgotICAgICAgICAgICAgIDogIj1EIiAoZWRpKSwgIj1jIiAoZWN4KQotICAgICAgICAgICAgIDogImQiIChlZHgpLCAiMCIgKGVkaSksICIxIiAoZWN4KSk7Ci0gICAgICAgIH0KKwlpZiAoc2l6ZSA9PSA0KQorCSAgICBhc20gdm9sYXRpbGUgKCJzdGQ7IHJlcDsgaW5zbDsgY2xkIgorCSAgICAgOiAiPUQiIChlZGkpLCAiPWMiIChlY3gpCisJICAgICA6ICJkIiAoZWR4KSwgIjAiIChlZGkpLCAiMSIgKGVjeCkpOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkgICAgYXNtIHZvbGF0aWxlICgic3RkOyByZXA7IGluc3c7IGNsZCIKKwkgICAgIDogIj1EIiAoZWRpKSwgIj1jIiAoZWN4KQorCSAgICAgOiAiZCIgKGVkeCksICIwIiAoZWRpKSwgIjEiIChlY3gpKTsKKwllbHNlCisJICAgIGFzbSB2b2xhdGlsZSAoInN0ZDsgcmVwOyBpbnNiOyBjbGQiCisJICAgICA6ICI9RCIgKGVkaSksICI9YyIgKGVjeCkKKwkgICAgIDogImQiIChlZHgpLCAiMCIgKGVkaSksICIxIiAoZWN4KSk7CisJfQogICAgIGVsc2UgewotICAgICAgICBpZiAoc2l6ZSA9PSA0KQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY2xkOyByZXA7IGluc2wiCi0gICAgICAgICAgICAgOiAiPUQiIChlZGkpLCAiPWMiIChlY3gpCi0gICAgICAgICAgICAgOiAiZCIgKGVkeCksICIwIiAoZWRpKSwgIjEiIChlY3gpKTsKLSAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY2xkOyByZXA7IGluc3ciCi0gICAgICAgICAgICAgOiAiPUQiIChlZGkpLCAiPWMiIChlY3gpCi0gICAgICAgICAgICAgOiAiZCIgKGVkeCksICIwIiAoZWRpKSwgIjEiIChlY3gpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY2xkOyByZXA7IGluc2IiCi0gICAgICAgICAgICAgOiAiPUQiIChlZGkpLCAiPWMiIChlY3gpCi0gICAgICAgICAgICAgOiAiZCIgKGVkeCksICIwIiAoZWRpKSwgIjEiIChlY3gpKTsKLSAgICAgICAgfQorCWlmIChzaXplID09IDQpCisJICAgIGFzbSB2b2xhdGlsZSAoImNsZDsgcmVwOyBpbnNsIgorCSAgICAgOiAiPUQiIChlZGkpLCAiPWMiIChlY3gpCisJICAgICA6ICJkIiAoZWR4KSwgIjAiIChlZGkpLCAiMSIgKGVjeCkpOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkgICAgYXNtIHZvbGF0aWxlICgiY2xkOyByZXA7IGluc3ciCisJICAgICA6ICI9RCIgKGVkaSksICI9YyIgKGVjeCkKKwkgICAgIDogImQiIChlZHgpLCAiMCIgKGVkaSksICIxIiAoZWN4KSk7CisJZWxzZQorCSAgICBhc20gdm9sYXRpbGUgKCJjbGQ7IHJlcDsgaW5zYiIKKwkgICAgIDogIj1EIiAoZWRpKSwgIj1jIiAoZWN4KQorCSAgICAgOiAiZCIgKGVkeCksICIwIiAoZWRpKSwgIjEiIChlY3gpKTsKKwl9CiAKICAgICBlZGkgLT0gKHVuc2lnbmVkIGludCljb250ZXh0LnZtLnJlZ3MuZHMgPDwgNDsKICAgICBjb250ZXh0LnZtLnJlZ3MuZWRpICY9IDB4ZmZmZjAwMDA7CkBAIC0xMTgyLDI3ICsxMTgyLDI3IEBACiAgICAgZXNpID0gY29udGV4dC52bS5yZWdzLmVzaSAmIDB4ZmZmZjsKICAgICBlc2kgKz0gKHVuc2lnbmVkIGludCljb250ZXh0LnZtLnJlZ3MuZHMgPDwgNDsKICAgICBpZiAoY29udGV4dC52bS5yZWdzLmVmbGFncyAmIERJUkVDVElPTl9GTEFHKSB7Ci0gICAgICAgIGlmIChzaXplID09IDQpCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJzdGQ7IG91dHNsOyBjbGQiCi0gICAgICAgICAgICAgOiAiPVMiIChlc2kpIDogImQiIChlZHgpLCAiMCIgKGVzaSkpOwotICAgICAgICBlbHNlIGlmIChzaXplID09IDIpCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJzdGQ7IG91dHN3OyBjbGQiCi0gICAgICAgICAgICAgOiAiPVMiIChlc2kpIDogImQiIChlZHgpLCAiMCIgKGVzaSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJzdGQ7IG91dHNiOyBjbGQiCi0gICAgICAgICAgICAgOiAiPVMiIChlc2kpIDogImQiIChlZHgpLCAiMCIgKGVzaSkpOwotICAgICAgICB9CisJaWYgKHNpemUgPT0gNCkKKwkgICAgYXNtIHZvbGF0aWxlICgic3RkOyBvdXRzbDsgY2xkIgorCSAgICAgOiAiPVMiIChlc2kpIDogImQiIChlZHgpLCAiMCIgKGVzaSkpOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkgICAgYXNtIHZvbGF0aWxlICgic3RkOyBvdXRzdzsgY2xkIgorCSAgICAgOiAiPVMiIChlc2kpIDogImQiIChlZHgpLCAiMCIgKGVzaSkpOworCWVsc2UKKwkgICAgYXNtIHZvbGF0aWxlICgic3RkOyBvdXRzYjsgY2xkIgorCSAgICAgOiAiPVMiIChlc2kpIDogImQiIChlZHgpLCAiMCIgKGVzaSkpOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHNpemUgPT0gNCkKLSAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNsZDsgb3V0c2wiCi0gICAgICAgICAgICAgOiAiPVMiIChlc2kpIDogImQiIChlZHgpLCAiMCIgKGVzaSkpOwotICAgICAgICBlbHNlIGlmIChzaXplID09IDIpCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjbGQ7IG91dHN3IgotICAgICAgICAgICAgIDogIj1TIiAoZXNpKSA6ICJkIiAoZWR4KSwgIjAiIChlc2kpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY2xkOyBvdXRzYiIKLSAgICAgICAgICAgICA6ICI9UyIgKGVzaSkgOiAiZCIgKGVkeCksICIwIiAoZXNpKSk7Ci0gICAgICAgIH0KKwlpZiAoc2l6ZSA9PSA0KQorCSAgICBhc20gdm9sYXRpbGUgKCJjbGQ7IG91dHNsIgorCSAgICAgOiAiPVMiIChlc2kpIDogImQiIChlZHgpLCAiMCIgKGVzaSkpOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkgICAgYXNtIHZvbGF0aWxlICgiY2xkOyBvdXRzdyIKKwkgICAgIDogIj1TIiAoZXNpKSA6ICJkIiAoZWR4KSwgIjAiIChlc2kpKTsKKwllbHNlCisJICAgIGFzbSB2b2xhdGlsZSAoImNsZDsgb3V0c2IiCisJICAgICA6ICI9UyIgKGVzaSkgOiAiZCIgKGVkeCksICIwIiAoZXNpKSk7CisJfQogCiAgICAgZXNpIC09ICh1bnNpZ25lZCBpbnQpY29udGV4dC52bS5yZWdzLmRzIDw8IDQ7CiAgICAgY29udGV4dC52bS5yZWdzLmVzaSAmPSAweGZmZmYwMDAwOwpAQCAtMTIxOCwzMyArMTIxOCwzMyBAQAogICAgIGVzaSA9IGNvbnRleHQudm0ucmVncy5lc2kgJiAweGZmZmY7CiAgICAgZXNpICs9ICh1bnNpZ25lZCBpbnQpY29udGV4dC52bS5yZWdzLmRzIDw8IDQ7CiAgICAgaWYgKGNvbnRleHQudm0ucmVncy5lZmxhZ3MgJiBESVJFQ1RJT05fRkxBRykgewotICAgICAgICBpZiAoc2l6ZSA9PSA0KQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgic3RkOyByZXA7IG91dHNsOyBjbGQiCi0gICAgICAgICAgICAgOiAiPVMiIChlc2kpLCAiPWMiIChlY3gpCi0gICAgICAgICAgICAgOiAiZCIgKGVkeCksICIwIiAoZXNpKSwgIjEiIChlY3gpKTsKLSAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgic3RkOyByZXA7IG91dHN3OyBjbGQiCi0gICAgICAgICAgICAgOiAiPVMiIChlc2kpLCAiPWMiIChlY3gpCi0gICAgICAgICAgICAgOiAiZCIgKGVkeCksICIwIiAoZXNpKSwgIjEiIChlY3gpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgic3RkOyByZXA7IG91dHNiOyBjbGQiCi0gICAgICAgICAgICAgOiAiPVMiIChlc2kpLCAiPWMiIChlY3gpCi0gICAgICAgICAgICAgOiAiZCIgKGVkeCksICIwIiAoZXNpKSwgIjEiIChlY3gpKTsKLSAgICAgICAgfQorCWlmIChzaXplID09IDQpCisJICAgIGFzbSB2b2xhdGlsZSAoInN0ZDsgcmVwOyBvdXRzbDsgY2xkIgorCSAgICAgOiAiPVMiIChlc2kpLCAiPWMiIChlY3gpCisJICAgICA6ICJkIiAoZWR4KSwgIjAiIChlc2kpLCAiMSIgKGVjeCkpOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkgICAgYXNtIHZvbGF0aWxlICgic3RkOyByZXA7IG91dHN3OyBjbGQiCisJICAgICA6ICI9UyIgKGVzaSksICI9YyIgKGVjeCkKKwkgICAgIDogImQiIChlZHgpLCAiMCIgKGVzaSksICIxIiAoZWN4KSk7CisJZWxzZQorCSAgICBhc20gdm9sYXRpbGUgKCJzdGQ7IHJlcDsgb3V0c2I7IGNsZCIKKwkgICAgIDogIj1TIiAoZXNpKSwgIj1jIiAoZWN4KQorCSAgICAgOiAiZCIgKGVkeCksICIwIiAoZXNpKSwgIjEiIChlY3gpKTsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChzaXplID09IDQpCi0gICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjbGQ7IHJlcDsgb3V0c2wiCi0gICAgICAgICAgICAgOiAiPVMiIChlc2kpLCAiPWMiIChlY3gpCi0gICAgICAgICAgICAgOiAiZCIgKGVkeCksICIwIiAoZXNpKSwgIjEiIChlY3gpKTsKLSAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY2xkOyByZXA7IG91dHN3IgotICAgICAgICAgICAgIDogIj1TIiAoZXNpKSwgIj1jIiAoZWN4KQotICAgICAgICAgICAgIDogImQiIChlZHgpLCAiMCIgKGVzaSksICIxIiAoZWN4KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNsZDsgcmVwOyBvdXRzYiIKLSAgICAgICAgICAgICA6ICI9UyIgKGVzaSksICI9YyIgKGVjeCkKLSAgICAgICAgICAgICA6ICJkIiAoZWR4KSwgIjAiIChlc2kpLCAiMSIgKGVjeCkpOwotICAgICAgICB9CisJaWYgKHNpemUgPT0gNCkKKwkgICAgYXNtIHZvbGF0aWxlICgiY2xkOyByZXA7IG91dHNsIgorCSAgICAgOiAiPVMiIChlc2kpLCAiPWMiIChlY3gpCisJICAgICA6ICJkIiAoZWR4KSwgIjAiIChlc2kpLCAiMSIgKGVjeCkpOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkgICAgYXNtIHZvbGF0aWxlICgiY2xkOyByZXA7IG91dHN3IgorCSAgICAgOiAiPVMiIChlc2kpLCAiPWMiIChlY3gpCisJICAgICA6ICJkIiAoZWR4KSwgIjAiIChlc2kpLCAiMSIgKGVjeCkpOworCWVsc2UKKwkgICAgYXNtIHZvbGF0aWxlICgiY2xkOyByZXA7IG91dHNiIgorCSAgICAgOiAiPVMiIChlc2kpLCAiPWMiIChlY3gpCisJICAgICA6ICJkIiAoZWR4KSwgIjAiIChlc2kpLCAiMSIgKGVjeCkpOworCX0KIAogICAgIGVzaSAtPSAodW5zaWduZWQgaW50KWNvbnRleHQudm0ucmVncy5kcyA8PCA0OwogICAgIGNvbnRleHQudm0ucmVncy5lc2kgJj0gMHhmZmZmMDAwMDsKQEAgLTEyNTcsOSArMTI1Nyw5IEBACiB7CiAgICAgdW5zaWduZWQgY2hhciAqaW5zbjsKICAgICBzdHJ1Y3QgewotICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA6IDE7Ci0gICAgICAgIHVuc2lnbmVkIGludCByZXAgOiAxOwotICAgICAgICB9IHByZWZpeCA9IHsgMCwgMCB9OworCXVuc2lnbmVkIGludCBzaXplIDogMTsKKwl1bnNpZ25lZCBpbnQgcmVwIDogMTsKKwl9IHByZWZpeCA9IHsgMCwgMCB9OwogICAgIGludCBpID0gMDsKIAogICAgIGluc24gPSAodW5zaWduZWQgY2hhciAqKSgodW5zaWduZWQgaW50KWNvbnRleHQudm0ucmVncy5jcyA8PCA0KTsKQEAgLTEyNjcsMTAxICsxMjY3LDEwMSBAQAogCiAgICAgd2hpbGUgKDEpIHsKICNpZmRlZiBUUkFDRV9JTwotICAgICAgICB0cmFjZUFkZHIgPSAoKHVsb25nKWNvbnRleHQudm0ucmVncy5jcyA8PCAxNikgKyBjb250ZXh0LnZtLnJlZ3MuZWlwICsgaTsKKwl0cmFjZUFkZHIgPSAoKHVsb25nKWNvbnRleHQudm0ucmVncy5jcyA8PCAxNikgKyBjb250ZXh0LnZtLnJlZ3MuZWlwICsgaTsKICNlbmRpZgotICAgICAgICBpZiAoaW5zbltpXSA9PSAweDY2KSB7Ci0gICAgICAgICAgICBwcmVmaXguc2l6ZSA9IDEgLSBwcmVmaXguc2l6ZTsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5zbltpXSA9PSAweGYzKSB7Ci0gICAgICAgICAgICBwcmVmaXgucmVwID0gMTsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5zbltpXSA9PSAweGYwIHx8IGluc25baV0gPT0gMHhmMgotICAgICAgICAgICAgIHx8IGluc25baV0gPT0gMHgyNiB8fCBpbnNuW2ldID09IDB4MmUKLSAgICAgICAgICAgICB8fCBpbnNuW2ldID09IDB4MzYgfHwgaW5zbltpXSA9PSAweDNlCi0gICAgICAgICAgICAgfHwgaW5zbltpXSA9PSAweDY0IHx8IGluc25baV0gPT0gMHg2NQotICAgICAgICAgICAgIHx8IGluc25baV0gPT0gMHg2NykgewotICAgICAgICAgICAgLyogdGhlc2UgcHJlZml4ZXMgYXJlIGp1c3QgaWdub3JlZCAqLwotICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpbnNuW2ldID09IDB4NmMpIHsKLSAgICAgICAgICAgIGlmIChwcmVmaXgucmVwKQotICAgICAgICAgICAgICAgIGVtX3JlcF9pbnMoMSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1faW5zKDEpOwotICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGluc25baV0gPT0gMHg2ZCkgewotICAgICAgICAgICAgaWYgKHByZWZpeC5yZXApIHsKLSAgICAgICAgICAgICAgICBpZiAocHJlZml4LnNpemUpCi0gICAgICAgICAgICAgICAgICAgIGVtX3JlcF9pbnMoNCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbV9yZXBfaW5zKDIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChwcmVmaXguc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgZW1faW5zKDQpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1faW5zKDIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpbnNuW2ldID09IDB4NmUpIHsKLSAgICAgICAgICAgIGlmIChwcmVmaXgucmVwKQotICAgICAgICAgICAgICAgIGVtX3JlcF9vdXRzKDEpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtX291dHMoMSk7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5zbltpXSA9PSAweDZmKSB7Ci0gICAgICAgICAgICBpZiAocHJlZml4LnJlcCkgewotICAgICAgICAgICAgICAgIGlmIChwcmVmaXguc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgZW1fcmVwX291dHMoNCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbV9yZXBfb3V0cygyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAocHJlZml4LnNpemUpCi0gICAgICAgICAgICAgICAgICAgIGVtX291dHMoNCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbV9vdXRzKDIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpbnNuW2ldID09IDB4ZWMpIHsKLSAgICAgICAgICAgICooKHVjaGFyKikmY29udGV4dC52bS5yZWdzLmVheCkgPSBwb3J0X2luKGNvbnRleHQudm0ucmVncy5lZHgpOwotICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGluc25baV0gPT0gMHhlZCkgewotICAgICAgICAgICAgaWYgKHByZWZpeC5zaXplKQotICAgICAgICAgICAgICAgICooKHVsb25nKikmY29udGV4dC52bS5yZWdzLmVheCkgPSBwb3J0X2lubChjb250ZXh0LnZtLnJlZ3MuZWR4KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAqKCh1c2hvcnQqKSZjb250ZXh0LnZtLnJlZ3MuZWF4KSA9IHBvcnRfaW53KGNvbnRleHQudm0ucmVncy5lZHgpOwotICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGluc25baV0gPT0gMHhlZSkgewotICAgICAgICAgICAgcG9ydF9vdXQoY29udGV4dC52bS5yZWdzLmVheCxjb250ZXh0LnZtLnJlZ3MuZWR4KTsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpbnNuW2ldID09IDB4ZWYpIHsKLSAgICAgICAgICAgIGlmIChwcmVmaXguc2l6ZSkKLSAgICAgICAgICAgICAgICBwb3J0X291dGwoY29udGV4dC52bS5yZWdzLmVheCxjb250ZXh0LnZtLnJlZ3MuZWR4KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwb3J0X291dHcoY29udGV4dC52bS5yZWdzLmVheCxjb250ZXh0LnZtLnJlZ3MuZWR4KTsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorCWlmIChpbnNuW2ldID09IDB4NjYpIHsKKwkgICAgcHJlZml4LnNpemUgPSAxIC0gcHJlZml4LnNpemU7CisJICAgIGkrKzsKKwkgICAgfQorCWVsc2UgaWYgKGluc25baV0gPT0gMHhmMykgeworCSAgICBwcmVmaXgucmVwID0gMTsKKwkgICAgaSsrOworCSAgICB9CisJZWxzZSBpZiAoaW5zbltpXSA9PSAweGYwIHx8IGluc25baV0gPT0gMHhmMgorCSAgICAgfHwgaW5zbltpXSA9PSAweDI2IHx8IGluc25baV0gPT0gMHgyZQorCSAgICAgfHwgaW5zbltpXSA9PSAweDM2IHx8IGluc25baV0gPT0gMHgzZQorCSAgICAgfHwgaW5zbltpXSA9PSAweDY0IHx8IGluc25baV0gPT0gMHg2NQorCSAgICAgfHwgaW5zbltpXSA9PSAweDY3KSB7CisJICAgIC8qIHRoZXNlIHByZWZpeGVzIGFyZSBqdXN0IGlnbm9yZWQgKi8KKwkgICAgaSsrOworCSAgICB9CisJZWxzZSBpZiAoaW5zbltpXSA9PSAweDZjKSB7CisJICAgIGlmIChwcmVmaXgucmVwKQorCQllbV9yZXBfaW5zKDEpOworCSAgICBlbHNlCisJCWVtX2lucygxKTsKKwkgICAgaSsrOworCSAgICBicmVhazsKKwkgICAgfQorCWVsc2UgaWYgKGluc25baV0gPT0gMHg2ZCkgeworCSAgICBpZiAocHJlZml4LnJlcCkgeworCQlpZiAocHJlZml4LnNpemUpCisJCSAgICBlbV9yZXBfaW5zKDQpOworCQllbHNlCisJCSAgICBlbV9yZXBfaW5zKDIpOworCQl9CisJICAgIGVsc2UgeworCQlpZiAocHJlZml4LnNpemUpCisJCSAgICBlbV9pbnMoNCk7CisJCWVsc2UKKwkJICAgIGVtX2lucygyKTsKKwkJfQorCSAgICBpKys7CisJICAgIGJyZWFrOworCSAgICB9CisJZWxzZSBpZiAoaW5zbltpXSA9PSAweDZlKSB7CisJICAgIGlmIChwcmVmaXgucmVwKQorCQllbV9yZXBfb3V0cygxKTsKKwkgICAgZWxzZQorCQllbV9vdXRzKDEpOworCSAgICBpKys7CisJICAgIGJyZWFrOworCSAgICB9CisJZWxzZSBpZiAoaW5zbltpXSA9PSAweDZmKSB7CisJICAgIGlmIChwcmVmaXgucmVwKSB7CisJCWlmIChwcmVmaXguc2l6ZSkKKwkJICAgIGVtX3JlcF9vdXRzKDQpOworCQllbHNlCisJCSAgICBlbV9yZXBfb3V0cygyKTsKKwkJfQorCSAgICBlbHNlIHsKKwkJaWYgKHByZWZpeC5zaXplKQorCQkgICAgZW1fb3V0cyg0KTsKKwkJZWxzZQorCQkgICAgZW1fb3V0cygyKTsKKwkJfQorCSAgICBpKys7CisJICAgIGJyZWFrOworCSAgICB9CisJZWxzZSBpZiAoaW5zbltpXSA9PSAweGVjKSB7CisJICAgICooKHVjaGFyKikmY29udGV4dC52bS5yZWdzLmVheCkgPSBwb3J0X2luKGNvbnRleHQudm0ucmVncy5lZHgpOworCSAgICBpKys7CisJICAgIGJyZWFrOworCSAgICB9CisJZWxzZSBpZiAoaW5zbltpXSA9PSAweGVkKSB7CisJICAgIGlmIChwcmVmaXguc2l6ZSkKKwkJKigodWxvbmcqKSZjb250ZXh0LnZtLnJlZ3MuZWF4KSA9IHBvcnRfaW5sKGNvbnRleHQudm0ucmVncy5lZHgpOworCSAgICBlbHNlCisJCSooKHVzaG9ydCopJmNvbnRleHQudm0ucmVncy5lYXgpID0gcG9ydF9pbncoY29udGV4dC52bS5yZWdzLmVkeCk7CisJICAgIGkrKzsKKwkgICAgYnJlYWs7CisJICAgIH0KKwllbHNlIGlmIChpbnNuW2ldID09IDB4ZWUpIHsKKwkgICAgcG9ydF9vdXQoY29udGV4dC52bS5yZWdzLmVheCxjb250ZXh0LnZtLnJlZ3MuZWR4KTsKKwkgICAgaSsrOworCSAgICBicmVhazsKKwkgICAgfQorCWVsc2UgaWYgKGluc25baV0gPT0gMHhlZikgeworCSAgICBpZiAocHJlZml4LnNpemUpCisJCXBvcnRfb3V0bChjb250ZXh0LnZtLnJlZ3MuZWF4LGNvbnRleHQudm0ucmVncy5lZHgpOworCSAgICBlbHNlCisJCXBvcnRfb3V0dyhjb250ZXh0LnZtLnJlZ3MuZWF4LGNvbnRleHQudm0ucmVncy5lZHgpOworCSAgICBpKys7CisJICAgIGJyZWFrOworCSAgICB9CisJZWxzZQorCSAgICByZXR1cm4gMDsKKwl9CiAKICAgICBjb250ZXh0LnZtLnJlZ3MuZWlwICs9IGk7CiAgICAgcmV0dXJuIDE7CkBAIC0xMzkzLDcgKzEzOTMsNyBAQAogICAgIGZwdXRzKCJjczppcCA9IFsgIiwgc3RkZXJyKTsKICAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikoKGNvbnRleHQudm0ucmVncy5jcyA8PCA0KSArIChjb250ZXh0LnZtLnJlZ3MuZWlwICYgMHhmZmZmKSk7CiAgICAgZm9yIChpID0gMDsgaSA8IDE2OyArK2kpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgKHVuc2lnbmVkIGludClwW2ldKTsKKwkgICAgZnByaW50ZihzdGRlcnIsICIlMDJ4ICIsICh1bnNpZ25lZCBpbnQpcFtpXSk7CiAgICAgZnB1dHMoIl1cbiIsIHN0ZGVycik7CiAgICAgZmZsdXNoKHN0ZGVycik7CiB9CkBAIC0xNDAzLDI0ICsxNDAzLDI0IEBACiAgICAgdW5zaWduZWQgaW50IHZyZXQ7CiAKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHZyZXQgPSB2bTg2KCZjb250ZXh0LnZtKTsKLSAgICAgICAgaWYgKFZNODZfVFlQRSh2cmV0KSA9PSBWTTg2X0lOVHgpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ID0gVk04Nl9BUkcodnJldCk7Ci0gICAgICAgICAgICBpZiAodiA9PSBSRVRVUk5fVE9fMzJfSU5UKQotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgcHVzaHcoY29udGV4dC52bS5yZWdzLmVmbGFncyk7Ci0gICAgICAgICAgICBwdXNodyhjb250ZXh0LnZtLnJlZ3MuY3MpOwotICAgICAgICAgICAgcHVzaHcoY29udGV4dC52bS5yZWdzLmVpcCk7Ci0gICAgICAgICAgICBjb250ZXh0LnZtLnJlZ3MuY3MgPSBnZXRfaW50X3NlZyh2KTsKLSAgICAgICAgICAgIGNvbnRleHQudm0ucmVncy5laXAgPSBnZXRfaW50X29mZih2KTsKLSAgICAgICAgICAgIGNvbnRleHQudm0ucmVncy5lZmxhZ3MgJj0gfihWSUZfTUFTSyB8IFRGX01BU0spOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGlmIChWTTg2X1RZUEUodnJldCkgIT0gVk04Nl9VTktOT1dOKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICghZW11bGF0ZSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwl2cmV0ID0gdm04NigmY29udGV4dC52bSk7CisJaWYgKFZNODZfVFlQRSh2cmV0KSA9PSBWTTg2X0lOVHgpIHsKKwkgICAgdW5zaWduZWQgaW50IHYgPSBWTTg2X0FSRyh2cmV0KTsKKwkgICAgaWYgKHYgPT0gUkVUVVJOX1RPXzMyX0lOVCkKKwkJcmV0dXJuIDE7CisJICAgIHB1c2h3KGNvbnRleHQudm0ucmVncy5lZmxhZ3MpOworCSAgICBwdXNodyhjb250ZXh0LnZtLnJlZ3MuY3MpOworCSAgICBwdXNodyhjb250ZXh0LnZtLnJlZ3MuZWlwKTsKKwkgICAgY29udGV4dC52bS5yZWdzLmNzID0gZ2V0X2ludF9zZWcodik7CisJICAgIGNvbnRleHQudm0ucmVncy5laXAgPSBnZXRfaW50X29mZih2KTsKKwkgICAgY29udGV4dC52bS5yZWdzLmVmbGFncyAmPSB+KFZJRl9NQVNLIHwgVEZfTUFTSyk7CisJICAgIGNvbnRpbnVlOworCSAgICB9CisJaWYgKFZNODZfVFlQRSh2cmV0KSAhPSBWTTg2X1VOS05PV04pCisJICAgIGJyZWFrOworCWlmICghZW11bGF0ZSgpKQorCSAgICBicmVhazsKKwl9CiAgICAgZGVidWdfaW5mbyh2cmV0KTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTE0MzEsNyArMTQzMSw3IEBACiB2b2lkIFBNQVBJIERQTUlfaW50ODYoaW50IGludG5vLCBEUE1JX3JlZ3MgKnJlZ3MpCiB7CiAgICAgaWYgKCFpbml0ZWQpCi0gICAgICAgIFBNX2luaXQoKTsKKwlQTV9pbml0KCk7CiAgICAgbWVtc2V0KCZjb250ZXh0LnZtLnJlZ3MsIDAsIHNpemVvZihjb250ZXh0LnZtLnJlZ3MpKTsKICAgICBJTkQoZWF4KTsgSU5EKGVieCk7IElORChlY3gpOyBJTkQoZWR4KTsgSU5EKGVzaSk7IElORChlZGkpOwogICAgIGNvbnRleHQudm0ucmVncy5lZmxhZ3MgPSBERUZBVUxUX1ZNODZfRkxBR1M7CkBAIC0xNDUzLDcgKzE0NTMsNyBAQAogaW50IFBNQVBJIFBNX2ludDg2KGludCBpbnRubywgUk1SRUdTICppbiwgUk1SRUdTICpvdXQpCiB7CiAgICAgaWYgKCFpbml0ZWQpCi0gICAgICAgIFBNX2luaXQoKTsKKwlQTV9pbml0KCk7CiAgICAgbWVtc2V0KCZjb250ZXh0LnZtLnJlZ3MsIDAsIHNpemVvZihjb250ZXh0LnZtLnJlZ3MpKTsKICAgICBJTihlYXgpOyBJTihlYngpOyBJTihlY3gpOyBJTihlZHgpOyBJTihlc2kpOyBJTihlZGkpOwogICAgIGNvbnRleHQudm0ucmVncy5lZmxhZ3MgPSBERUZBVUxUX1ZNODZfRkxBR1M7CkBAIC0xNDc0LDQxICsxNDc0LDQxIEBACiAgICAgUk1TUkVHUyAqc3JlZ3MpCiB7CiAgICAgaWYgKCFpbml0ZWQpCi0gICAgICAgIFBNX2luaXQoKTsKKwlQTV9pbml0KCk7CiAgICAgaWYgKGludG5vID09IDB4MjEpIHsKLSAgICAgICAgdGltZV90IHRvZGF5ID0gdGltZShOVUxMKTsKLSAgICAgICAgc3RydWN0IHRtICp0OwotICAgICAgICB0ID0gbG9jYWx0aW1lKCZ0b2RheSk7Ci0gICAgICAgIG91dC0+eC5jeCA9IHQtPnRtX3llYXIgKyAxOTAwOwotICAgICAgICBvdXQtPmguZGggPSB0LT50bV9tb24gKyAxOwotICAgICAgICBvdXQtPmguZGwgPSB0LT50bV9tZGF5OwotICAgICAgICB9CisJdGltZV90IHRvZGF5ID0gdGltZShOVUxMKTsKKwlzdHJ1Y3QgdG0gKnQ7CisJdCA9IGxvY2FsdGltZSgmdG9kYXkpOworCW91dC0+eC5jeCA9IHQtPnRtX3llYXIgKyAxOTAwOworCW91dC0+aC5kaCA9IHQtPnRtX21vbiArIDE7CisJb3V0LT5oLmRsID0gdC0+dG1fbWRheTsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzZWcsIG9mZjsKLSAgICAgICAgc2VnID0gZ2V0X2ludF9zZWcoaW50bm8pOwotICAgICAgICBvZmYgPSBnZXRfaW50X29mZihpbnRubyk7Ci0gICAgICAgIG1lbXNldCgmY29udGV4dC52bS5yZWdzLCAwLCBzaXplb2YoY29udGV4dC52bS5yZWdzKSk7Ci0gICAgICAgIElOKGVheCk7IElOKGVieCk7IElOKGVjeCk7IElOKGVkeCk7IElOKGVzaSk7IElOKGVkaSk7Ci0gICAgICAgIGNvbnRleHQudm0ucmVncy5lZmxhZ3MgPSBERUZBVUxUX1ZNODZfRkxBR1M7Ci0gICAgICAgIGNvbnRleHQudm0ucmVncy5jcyA9IHNlZzsKLSAgICAgICAgY29udGV4dC52bS5yZWdzLmVpcCA9IG9mZjsKLSAgICAgICAgY29udGV4dC52bS5yZWdzLmVzID0gc3JlZ3MtPmVzOwotICAgICAgICBjb250ZXh0LnZtLnJlZ3MuZHMgPSBzcmVncy0+ZHM7Ci0gICAgICAgIGNvbnRleHQudm0ucmVncy5mcyA9IHNyZWdzLT5mczsKLSAgICAgICAgY29udGV4dC52bS5yZWdzLmdzID0gc3JlZ3MtPmdzOwotICAgICAgICBjb250ZXh0LnZtLnJlZ3Muc3MgPSBjb250ZXh0LnN0YWNrX3NlZzsKLSAgICAgICAgY29udGV4dC52bS5yZWdzLmVzcCA9IGNvbnRleHQuc3RhY2tfb2ZmOwotICAgICAgICBwdXNodyhERUZBVUxUX1ZNODZfRkxBR1MpOwotICAgICAgICBwdXNodyhjb250ZXh0LnJldF9zZWcpOwotICAgICAgICBwdXNodyhjb250ZXh0LnJldF9vZmYpOwotICAgICAgICBydW5fdm04NigpOwotICAgICAgICBPVVQoZWF4KTsgT1VUKGVieCk7IE9VVChlY3gpOyBPVVQoZWR4KTsgT1VUKGVzaSk7IE9VVChlZGkpOwotICAgICAgICBzcmVncy0+ZXMgPSBjb250ZXh0LnZtLnJlZ3MuZXM7Ci0gICAgICAgIHNyZWdzLT5kcyA9IGNvbnRleHQudm0ucmVncy5kczsKLSAgICAgICAgc3JlZ3MtPmZzID0gY29udGV4dC52bS5yZWdzLmZzOwotICAgICAgICBzcmVncy0+Z3MgPSBjb250ZXh0LnZtLnJlZ3MuZ3M7Ci0gICAgICAgIG91dC0+eC5jZmxhZyA9IGNvbnRleHQudm0ucmVncy5lZmxhZ3MgJiAxOwotICAgICAgICB9CisJdW5zaWduZWQgaW50IHNlZywgb2ZmOworCXNlZyA9IGdldF9pbnRfc2VnKGludG5vKTsKKwlvZmYgPSBnZXRfaW50X29mZihpbnRubyk7CisJbWVtc2V0KCZjb250ZXh0LnZtLnJlZ3MsIDAsIHNpemVvZihjb250ZXh0LnZtLnJlZ3MpKTsKKwlJTihlYXgpOyBJTihlYngpOyBJTihlY3gpOyBJTihlZHgpOyBJTihlc2kpOyBJTihlZGkpOworCWNvbnRleHQudm0ucmVncy5lZmxhZ3MgPSBERUZBVUxUX1ZNODZfRkxBR1M7CisJY29udGV4dC52bS5yZWdzLmNzID0gc2VnOworCWNvbnRleHQudm0ucmVncy5laXAgPSBvZmY7CisJY29udGV4dC52bS5yZWdzLmVzID0gc3JlZ3MtPmVzOworCWNvbnRleHQudm0ucmVncy5kcyA9IHNyZWdzLT5kczsKKwljb250ZXh0LnZtLnJlZ3MuZnMgPSBzcmVncy0+ZnM7CisJY29udGV4dC52bS5yZWdzLmdzID0gc3JlZ3MtPmdzOworCWNvbnRleHQudm0ucmVncy5zcyA9IGNvbnRleHQuc3RhY2tfc2VnOworCWNvbnRleHQudm0ucmVncy5lc3AgPSBjb250ZXh0LnN0YWNrX29mZjsKKwlwdXNodyhERUZBVUxUX1ZNODZfRkxBR1MpOworCXB1c2h3KGNvbnRleHQucmV0X3NlZyk7CisJcHVzaHcoY29udGV4dC5yZXRfb2ZmKTsKKwlydW5fdm04NigpOworCU9VVChlYXgpOyBPVVQoZWJ4KTsgT1VUKGVjeCk7IE9VVChlZHgpOyBPVVQoZXNpKTsgT1VUKGVkaSk7CisJc3JlZ3MtPmVzID0gY29udGV4dC52bS5yZWdzLmVzOworCXNyZWdzLT5kcyA9IGNvbnRleHQudm0ucmVncy5kczsKKwlzcmVncy0+ZnMgPSBjb250ZXh0LnZtLnJlZ3MuZnM7CisJc3JlZ3MtPmdzID0gY29udGV4dC52bS5yZWdzLmdzOworCW91dC0+eC5jZmxhZyA9IGNvbnRleHQudm0ucmVncy5lZmxhZ3MgJiAxOworCX0KICAgICByZXR1cm4gb3V0LT5lLmVheDsKIH0KIApAQCAtMTUxOCw3ICsxNTE4LDcgQEAKICAgICBSTVNSRUdTICpzcmVncykKIHsKICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBtZW1zZXQoJmNvbnRleHQudm0ucmVncywgMCwgc2l6ZW9mKGNvbnRleHQudm0ucmVncykpOwogICAgIElOKGVheCk7IElOKGVieCk7IElOKGVjeCk7IElOKGVkeCk7IElOKGVzaSk7IElOKGVkaSk7CiAgICAgY29udGV4dC52bS5yZWdzLmVmbGFncyA9IERFRkFVTFRfVk04Nl9GTEFHUzsKQEAgLTE1NTgsMzIgKzE1NTgsMzIgQEAKIAogdm9pZCAqIFBNQVBJIFBNX2FsbG9jTG9ja2VkTWVtKHVpbnQgc2l6ZSx1bG9uZyAqcGh5c0FkZHIsaWJvb2wgY29udGlndW91cyxpYm9vbCBiZWxvdzE2TSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmb3IgTGludXgKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmb3IgTGludXggKi8KICAgICByZXR1cm4gTlVMTDsKIH0KIAogdm9pZCBQTUFQSSBQTV9mcmVlTG9ja2VkTWVtKHZvaWQgKnAsdWludCBzaXplLGlib29sIGNvbnRpZ3VvdXMpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIExpbnV4CisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIExpbnV4ICovCiB9CiAKIHZvaWQgKiBQTUFQSSBQTV9hbGxvY1BhZ2UoCiAgICAgaWJvb2wgbG9ja2VkKQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIGZvciBMaW51eAorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzIGZvciBMaW51eCAqLwogICAgIHJldHVybiBOVUxMOwogfQogCiB2b2lkIFBNQVBJIFBNX2ZyZWVQYWdlKAogICAgIHZvaWQgKnApCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIExpbnV4CisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIExpbnV4ICovCiB9CiAKIHZvaWQgUE1BUEkgUE1fc2V0QmFua0EoaW50IGJhbmspCiB7CiAgICAgaWYgKCFpbml0ZWQpCi0gICAgICAgIFBNX2luaXQoKTsKKwlQTV9pbml0KCk7CiAgICAgbWVtc2V0KCZjb250ZXh0LnZtLnJlZ3MsIDAsIHNpemVvZihjb250ZXh0LnZtLnJlZ3MpKTsKICAgICBjb250ZXh0LnZtLnJlZ3MuZWF4ID0gMHg0RjA1OwogICAgIGNvbnRleHQudm0ucmVncy5lYnggPSAweDAwMDA7CkBAIC0xNjAyLDcgKzE2MDIsNyBAQAogdm9pZCBQTUFQSSBQTV9zZXRCYW5rQUIoaW50IGJhbmspCiB7CiAgICAgaWYgKCFpbml0ZWQpCi0gICAgICAgIFBNX2luaXQoKTsKKwlQTV9pbml0KCk7CiAgICAgbWVtc2V0KCZjb250ZXh0LnZtLnJlZ3MsIDAsIHNpemVvZihjb250ZXh0LnZtLnJlZ3MpKTsKICAgICBjb250ZXh0LnZtLnJlZ3MuZWF4ID0gMHg0RjA1OwogICAgIGNvbnRleHQudm0ucmVncy5lYnggPSAweDAwMDA7CkBAIC0xNjMzLDcgKzE2MzMsNyBAQAogdm9pZCBQTUFQSSBQTV9zZXRDUlRTdGFydChpbnQgeCxpbnQgeSxpbnQgd2FpdFZSVCkKIHsKICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBtZW1zZXQoJmNvbnRleHQudm0ucmVncywgMCwgc2l6ZW9mKGNvbnRleHQudm0ucmVncykpOwogICAgIGNvbnRleHQudm0ucmVncy5lYXggPSAweDRGMDc7CiAgICAgY29udGV4dC52bS5yZWdzLmVieCA9IHdhaXRWUlQ7CkBAIC0xNjU2LDE0ICsxNjU2LDE0IEBACiAgICAgc3RydWN0IG10cnJfc2VudHJ5IHNlbnRyeTsKIAogICAgIGlmIChtdHJyX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIFBNX01UUlJfRVJSX05PX09TX1NVUFBPUlQ7CisJcmV0dXJuIFBNX01UUlJfRVJSX05PX09TX1NVUFBPUlQ7CiAgICAgc2VudHJ5LmJhc2UgPSBiYXNlOwogICAgIHNlbnRyeS5zaXplID0gbGVuZ3RoOwogICAgIHNlbnRyeS50eXBlID0gdHlwZTsKICAgICBpZiAoaW9jdGwobXRycl9mZCwgTVRSUklPQ19BRERfRU5UUlksICZzZW50cnkpID09IC0xKSB7Ci0gICAgICAgIC8vIFRPRE86IE5lZWQgdG8gZGVjb2RlIE1UUlIgZXJyb3IgY29kZXMhIQotICAgICAgICByZXR1cm4gUE1fTVRSUl9OT1RfU1VQUE9SVEVEOwotICAgICAgICB9CisJLyogVE9ETzogTmVlZCB0byBkZWNvZGUgTVRSUiBlcnJvciBjb2RlcyEhICovCisJcmV0dXJuIFBNX01UUlJfTk9UX1NVUFBPUlRFRDsKKwl9CiAgICAgcmV0dXJuIFBNX01UUlJfRVJSX09LOwogI2Vsc2UKICAgICByZXR1cm4gUE1fTVRSUl9FUlJfTk9fT1NfU1VQUE9SVDsKQEAgLTE2ODUsMTUgKzE2ODUsMTUgQEAKICAgICBzdHJ1Y3QgbXRycl9nZW50cnkgZ2VudHJ5OwogCiAgICAgaWYgKG10cnJfZmQgPCAwKQotICAgICAgICByZXR1cm4gUE1fTVRSUl9FUlJfTk9fT1NfU1VQUE9SVDsKKwlyZXR1cm4gUE1fTVRSUl9FUlJfTk9fT1NfU1VQUE9SVDsKIAogICAgIGZvciAoZ2VudHJ5LnJlZ251bSA9IDA7IGlvY3RsIChtdHJyX2ZkLCBNVFJSSU9DX0dFVF9FTlRSWSwgJmdlbnRyeSkgPT0gMDsKLSAgICAgICAgICsrZ2VudHJ5LnJlZ251bSkgewotICAgICAgICBpZiAoZ2VudHJ5LnNpemUgPiAwKSB7Ci0gICAgICAgICAgICAvLyBXQVJOSU5HOiBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSB0eXBlcyBpbiBwbWFwaS5oIG1hdGNoIHRoZSBvbmVzCi0gICAgICAgICAgICAvLyBpbiB0aGUgTGludXgga2VybmVsIChtdHJyLmgpCi0gICAgICAgICAgICBjYWxsYmFjayhnZW50cnkuYmFzZSwgZ2VudHJ5LnNpemUsIGdlbnRyeS50eXBlKTsKLSAgICAgICAgfQorCSArK2dlbnRyeS5yZWdudW0pIHsKKwlpZiAoZ2VudHJ5LnNpemUgPiAwKSB7CisJICAgIC8qIFdBUk5JTkc6IFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHR5cGVzIGluIHBtYXBpLmggbWF0Y2ggdGhlIG9uZXMgKi8KKwkgICAgLyogaW4gdGhlIExpbnV4IGtlcm5lbCAobXRyci5oKSAqLworCSAgICBjYWxsYmFjayhnZW50cnkuYmFzZSwgZ2VudHJ5LnNpemUsIGdlbnRyeS50eXBlKTsKKwl9CiAgICAgfQogCiAgICAgcmV0dXJuIFBNX01UUlJfRVJSX09LOwpAQCAtMTcxOSwxMyArMTcxOSwxMyBAQAogICAgICAqIHRoZSBzZWNvbmRhcnkgQklPUyBpbWFnZSBvdmVyIHRoZSB0b3Agb2YgdGhlIG9sZCBvbmUuCiAgICAgICovCiAgICAgaWYgKCFpbml0ZWQpCi0gICAgICAgIFBNX2luaXQoKTsKKwlQTV9pbml0KCk7CiAgICAgaWYgKChvbGRfYmlvcyA9IFBNX21hbGxvYyhCSU9TTGVuKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBpZiAoQklPU1BoeXNBZGRyICE9IDB4QzAwMDApIHsKLSAgICAgICAgbWVtY3B5KG9sZF9iaW9zLGJpb3NfcHRyLEJJT1NMZW4pOwotICAgICAgICBtZW1jcHkoYmlvc19wdHIsY29weU9mQklPUyxCSU9TTGVuKTsKLSAgICAgICAgfQorCW1lbWNweShvbGRfYmlvcyxiaW9zX3B0cixCSU9TTGVuKTsKKwltZW1jcHkoYmlvc19wdHIsY29weU9mQklPUyxCSU9TTGVuKTsKKwl9CiAKICAgICAvKiBUaGUgaW50ZXJydXB0IHZlY3RvcnMgc2hvdWxkIGFscmVhZHkgYmUgbW1hcCgpJ2VkIGZyb20gMC0weDQwMCBpbiBQTV9pbml0ICovCiAgICAgQ3VycmVudDEwID0gcnZlY1sweDEwXTsKQEAgLTE3NDIsNyArMTc0Miw3IEBACiAKICAgICAvKiBSZXN0b3JlIG9yaWdpbmFsIEJJT1MgaW1hZ2UgKi8KICAgICBpZiAoQklPU1BoeXNBZGRyICE9IDB4QzAwMDApCi0gICAgICAgIG1lbWNweShiaW9zX3B0cixvbGRfYmlvcyxCSU9TTGVuKTsKKwltZW1jcHkoYmlvc19wdHIsb2xkX2Jpb3MsQklPU0xlbik7CiAgICAgUE1fZnJlZShvbGRfYmlvcyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xNzc0LDcgKzE3NzQsNyBAQAogUE1fTU9EVUxFIFBNQVBJIFBNX2xvYWRMaWJyYXJ5KAogICAgIGNvbnN0IGNoYXIgKnN6RExMTmFtZSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyB0byBsb2FkIHNoYXJlZCBsaWJyYXJpZXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgdG8gbG9hZCBzaGFyZWQgbGlicmFyaWVzISAqLwogICAgICh2b2lkKXN6RExMTmFtZTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTE3ODMsNyArMTc4Myw3IEBACiAgICAgUE1fTU9EVUxFIGhNb2R1bGUsCiAgICAgY29uc3QgY2hhciAqc3pQcm9jTmFtZSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyEKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyEgKi8KICAgICAodm9pZCloTW9kdWxlOwogICAgICh2b2lkKXN6UHJvY05hbWU7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzkyLDE5ICsxNzkyLDE4IEBACiB2b2lkIFBNQVBJIFBNX2ZyZWVMaWJyYXJ5KAogICAgIFBNX01PRFVMRSBoTW9kdWxlKQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIQorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzISAqLwogICAgICh2b2lkKWhNb2R1bGU7CiB9CiAKIGludCBQTUFQSSBQTV9zZXRJT1BMKAogICAgIGludCBsZXZlbCkKIHsKLSAgICAvLyBUT0RPOiBNb3ZlIHRoZSBJT1BMIHN3aXRjaGluZyBpbnRvIHRoaXMgZnVuY3Rpb24hIQorICAgIC8qIFRPRE86IE1vdmUgdGhlIElPUEwgc3dpdGNoaW5nIGludG8gdGhpcyBmdW5jdGlvbiEhICovCiAgICAgcmV0dXJuIGxldmVsOwogfQogCiB2b2lkIFBNQVBJIFBNX2ZsdXNoVExCKHZvaWQpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBvbiBMaW51eC4KKyAgICAvKiBEbyBub3RoaW5nIG9uIExpbnV4LiAqLwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9udGRydi9jcHVpbmZvLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9udGRydi9jcHVpbmZvLmMKaW5kZXggZTcyYTg1Ni4uZDE1YjA3YyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvY3B1aW5mby5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L2NwdWluZm8uYwpAQCAtNjIsNCArNjIsMyBAQAogICAgICh0KS0+bG93ID0gbHQuTG93UGFydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICh0KS0+aGlnaCA9IGx0LkhpZ2hQYXJ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9udGRydi9pbnQ4Ni5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvaW50ODYuYwppbmRleCBmOTNkOWMyLi5jODI2NDhiIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9udGRydi9pbnQ4Ni5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L2ludDg2LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiAgICAgICAgICAgICAgICAgICBTY2lUZWNoIE9TIFBvcnRhYmlsaXR5IE1hbmFnZXIgTGlicmFyeQotKgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCisqCiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICoKICogICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgU2NpVGVjaCBNR0wgUHVibGljCkBAIC00Myw3ICs0Myw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaWJvb2wgUE1BUEkgUE1faGF2ZUJJT1NBY2Nlc3Modm9pZCkKIHsKLSAgICAvLyBSZXR1cm4gZmFsc2UgdW5sZXNzIHdlIGhhdmUgZnVsbCBidWZmZXIgcGFzc2luZyEKKyAgICAvKiBSZXR1cm4gZmFsc2UgdW5sZXNzIHdlIGhhdmUgZnVsbCBidWZmZXIgcGFzc2luZyEgKi8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTYzLDggKzYzLDggQEAKICAgICB1aW50ICpyc2VnLAogICAgIHVpbnQgKnJvZmYpCiB7Ci0gICAgLy8gTm8gYnVmZmVycyBzdXBwb3J0ZWQgdW5kZXIgV2luZG93cyBOVCAoV2luZG93cyBYUCBoYXMgdGhlbSBob3dldmVyIGlmCi0gICAgLy8gd2UgZXZlciBkZWNpZGUgdG8gc3VwcG9ydCB0aGlzISkKKyAgICAvKiBObyBidWZmZXJzIHN1cHBvcnRlZCB1bmRlciBXaW5kb3dzIE5UIChXaW5kb3dzIFhQIGhhcyB0aGVtIGhvd2V2ZXIgaWYgKi8KKyAgICAvKiB3ZSBldmVyIGRlY2lkZSB0byBzdXBwb3J0IHRoaXMhKSAqLwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC05MCw3ICs5MCw3IEBACiAgICAgdWludCByX3NlZywKICAgICB1aW50IHJfb2ZmKQogewotICAgIC8vIE5vdCB1c2VkIGZvciBXaW5kb3dzIE5UIGRyaXZlcnMhCisgICAgLyogTm90IHVzZWQgZm9yIFdpbmRvd3MgTlQgZHJpdmVycyEgKi8KICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgdWludCAqcl9zZWcsCiAgICAgdWludCAqcl9vZmYpCiB7Ci0gICAgLy8gTm90IHN1cHBvcnRlZCBpbiBOVCBkcml2ZXJzCisgICAgLyogTm90IHN1cHBvcnRlZCBpbiBOVCBkcml2ZXJzICovCiAgICAgKHZvaWQpc2l6ZTsKICAgICAodm9pZClyX3NlZzsKICAgICAodm9pZClyX29mZjsKQEAgLTExNyw3ICsxMTcsNyBAQAogdm9pZCBQTUFQSSBQTV9mcmVlUmVhbFNlZygKICAgICB2b2lkICptZW0pCiB7Ci0gICAgLy8gTm90IHN1cHBvcnRlZCBpbiBOVCBkcml2ZXJzCisgICAgLyogTm90IHN1cHBvcnRlZCBpbiBOVCBkcml2ZXJzICovCiAgICAgKHZvaWQpbWVtOwogfQogCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICBpbnQgaW50bm8sCiAgICAgRFBNSV9yZWdzICpyZWdzKQogewotICAgIC8vIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMKKyAgICAvKiBOb3QgdXNlZCBpbiBOVCBkcml2ZXJzICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICBSTVJFR1MgKnJlZ3MsCiAgICAgUk1TUkVHUyAqc3JlZ3MpCiB7Ci0gICAgLy8gVE9ETyEhCisgICAgLyogVE9ETyEhICovCiAjaWYgMAogICAgIENMSUVOVF9TVFJVQ1Qgc2F2ZVJlZ3M7CiAKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAqIGxvYWRlZCwgYW5kIG5vdCBzdGF0aWNhbGx5IGxvYWRlZC4KICAgICAgKi8KICAgICBpZiAoIV9QTV9oYXZlQklPUykKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKIAogICAgIFRSQUNFKCJTRERIRUxQOiBFbnRlcmluZyBQTV9jYWxsUmVhbE1vZGUoKVxuIik7CiAgICAgQmVnaW5fTmVzdF9WODZfRXhlYygpOwpAQCAtMTc0LDcgKzE3NCw3IEBACiAgICAgUk1SRUdTICppbiwKICAgICBSTVJFR1MgKm91dCkKIHsKLSAgICAvLyBUT0RPISEKKyAgICAvKiBUT0RPISEgKi8KICNpZiAwCiAgICAgUk1TUkVHUyAgICAgICAgIHNyZWdzID0gezB9OwogICAgIENMSUVOVF9TVFJVQ1QgICBzYXZlUmVnczsKQEAgLTE4Myw5ICsxODMsOSBAQAogICAgIC8qIERpc2FibGUgcGFzcy11cCB0byBvdXIgVnhEIGhhbmRsZXIgc28gd2UgZGlyZWN0bHkgY2FsbCBCSU9TICovCiAgICAgVFJBQ0UoIlNEREhFTFA6IEVudGVyaW5nIFBNX2ludDg2KClcbiIpOwogICAgIGlmIChkaXNhYmxlVFNSRmxhZykgewotICAgICAgICBvbGREaXNhYmxlID0gKmRpc2FibGVUU1JGbGFnOwotICAgICAgICAqZGlzYWJsZVRTUkZsYWcgPSAwOwotICAgICAgICB9CisJb2xkRGlzYWJsZSA9ICpkaXNhYmxlVFNSRmxhZzsKKwkqZGlzYWJsZVRTUkZsYWcgPSAwOworCX0KICAgICBCZWdpbl9OZXN0X1Y4Nl9FeGVjKCk7CiAgICAgTG9hZFY4NlJlZ2lzdGVycygmc2F2ZVJlZ3MsaW4sJnNyZWdzKTsKICAgICBFeGVjX0ludChpbnRubyk7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAogICAgIC8qIFJlLWVuYWJsZSBwYXNzLXVwIHRvIG91ciBWeEQgaGFuZGxlciBpZiBwcmV2aW91c2x5IGVuYWJsZWQgKi8KICAgICBpZiAoZGlzYWJsZVRTUkZsYWcpCi0gICAgICAgICpkaXNhYmxlVFNSRmxhZyA9IG9sZERpc2FibGU7CisJKmRpc2FibGVUU1JGbGFnID0gb2xkRGlzYWJsZTsKIAogICAgIFRSQUNFKCJTRERIRUxQOiBFeGl0aW5nIFBNX2ludDg2KClcbiIpOwogI2Vsc2UKQEAgLTIxNCw3ICsyMTQsNyBAQAogICAgIFJNUkVHUyAqb3V0LAogICAgIFJNU1JFR1MgKnNyZWdzKQogewotICAgIC8vIFRPRE8hIQorICAgIC8qIFRPRE8hISAqLwogI2lmIDAKICAgICBDTElFTlRfU1RSVUNUICAgc2F2ZVJlZ3M7CiAgICAgdXNob3J0ICAgICAgICAgIG9sZERpc2FibGU7CkBAIC0yMjMsMTYgKzIyMywxNiBAQAogICAgICAqIGxvYWRlZCwgYW5kIG5vdCBzdGF0aWNhbGx5IGxvYWRlZC4KICAgICAgKi8KICAgICBpZiAoIV9QTV9oYXZlQklPUykgewotICAgICAgICAqb3V0ID0gKmluOwotICAgICAgICByZXR1cm4gb3V0LT54LmF4OwotICAgICAgICB9CisJKm91dCA9ICppbjsKKwlyZXR1cm4gb3V0LT54LmF4OworCX0KIAogICAgIC8qIERpc2FibGUgcGFzcy11cCB0byBvdXIgVnhEIGhhbmRsZXIgc28gd2UgZGlyZWN0bHkgY2FsbCBCSU9TICovCiAgICAgVFJBQ0UoIlNEREhFTFA6IEVudGVyaW5nIFBNX2ludDg2eCgpXG4iKTsKICAgICBpZiAoZGlzYWJsZVRTUkZsYWcpIHsKLSAgICAgICAgb2xkRGlzYWJsZSA9ICpkaXNhYmxlVFNSRmxhZzsKLSAgICAgICAgKmRpc2FibGVUU1JGbGFnID0gMDsKLSAgICAgICAgfQorCW9sZERpc2FibGUgPSAqZGlzYWJsZVRTUkZsYWc7CisJKmRpc2FibGVUU1JGbGFnID0gMDsKKwl9CiAgICAgQmVnaW5fTmVzdF9WODZfRXhlYygpOwogICAgIExvYWRWODZSZWdpc3RlcnMoJnNhdmVSZWdzLGluLHNyZWdzKTsKICAgICBFeGVjX0ludChpbnRubyk7CkBAIC0yNDEsNyArMjQxLDcgQEAKIAogICAgIC8qIFJlLWVuYWJsZSBwYXNzLXVwIHRvIG91ciBWeEQgaGFuZGxlciBpZiBwcmV2aW91c2x5IGVuYWJsZWQgKi8KICAgICBpZiAoZGlzYWJsZVRTUkZsYWcpCi0gICAgICAgICpkaXNhYmxlVFNSRmxhZyA9IG9sZERpc2FibGU7CisJKmRpc2FibGVUU1JGbGFnID0gb2xkRGlzYWJsZTsKIAogICAgIFRSQUNFKCJTRERIRUxQOiBFeGl0aW5nIFBNX2ludDg2eCgpXG4iKTsKICNlbHNlCkBAIC0yNDksNCArMjQ5LDMgQEAKICNlbmRpZgogICAgIHJldHVybiBvdXQtPnguYXg7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L2lycS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvaXJxLmMKaW5kZXggYmM2YjQyNy4uOWNkNTIwNDcgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L2lycS5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L2lycS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogICAgICAgICAgICAgICAgICAgU2NpVGVjaCBPUyBQb3J0YWJpbGl0eSBNYW5hZ2VyIExpYnJhcnkKLSoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorKgogKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqCiAqICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFNjaVRlY2ggTUdMIFB1YmxpYwpAQCAtNjcsNDEgKzY3LDQxIEBACiAgICAgaW50IGZyZXF1ZW5jeSkKIHsKICAgICBzdGF0aWMgc2hvcnQgY29udmVydFtdID0gewotICAgICAgICA4MTkyLAotICAgICAgICA0MDk2LAotICAgICAgICAyMDQ4LAotICAgICAgICAxMDI0LAotICAgICAgICA1MTIsCi0gICAgICAgIDI1NiwKLSAgICAgICAgMTI4LAotICAgICAgICA2NCwKLSAgICAgICAgMzIsCi0gICAgICAgIDE2LAotICAgICAgICA4LAotICAgICAgICA0LAotICAgICAgICAyLAotICAgICAgICAtMSwKLSAgICAgICAgfTsKKwk4MTkyLAorCTQwOTYsCisJMjA0OCwKKwkxMDI0LAorCTUxMiwKKwkyNTYsCisJMTI4LAorCTY0LAorCTMyLAorCTE2LAorCTgsCisJNCwKKwkyLAorCS0xLAorCX07CiAgICAgaW50IGk7CiAKICAgICAvKiBGaXJzdCBjbGVhciBhbnkgcGVuZGluZyBSVEMgdGltZW91dCBpZiBub3QgY2xlYXJlZCAqLwogICAgIF9QTV9yZWFkQ01PUygweDBDKTsKICAgICBpZiAoZnJlcXVlbmN5ID09IDApIHsKLSAgICAgICAgLyogRGlzYWJsZSBSVEMgdGltb3V0ICovCi0gICAgICAgIF9QTV93cml0ZUNNT1MoMHgwQSwodWNoYXIpX1BNX29sZENNT1NSZWdBKTsKLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBCLCh1Y2hhcikoX1BNX29sZENNT1NSZWdCICYgMHgwRikpOwotICAgICAgICB9CisJLyogRGlzYWJsZSBSVEMgdGltb3V0ICovCisJX1BNX3dyaXRlQ01PUygweDBBLCh1Y2hhcilfUE1fb2xkQ01PU1JlZ0EpOworCV9QTV93cml0ZUNNT1MoMHgwQiwodWNoYXIpKF9QTV9vbGRDTU9TUmVnQiAmIDB4MEYpKTsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIENvbnZlcnQgZnJlcXVlbmN5IHZhbHVlIHRvIFJUQyBjbG9jayBpbmRleGVzICovCi0gICAgICAgIGZvciAoaSA9IDA7IGNvbnZlcnRbaV0gIT0gLTE7IGkrKykgewotICAgICAgICAgICAgaWYgKGNvbnZlcnRbaV0gPT0gZnJlcXVlbmN5KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorCS8qIENvbnZlcnQgZnJlcXVlbmN5IHZhbHVlIHRvIFJUQyBjbG9jayBpbmRleGVzICovCisJZm9yIChpID0gMDsgY29udmVydFtpXSAhPSAtMTsgaSsrKSB7CisJICAgIGlmIChjb252ZXJ0W2ldID09IGZyZXF1ZW5jeSkKKwkJYnJlYWs7CisJICAgIH0KIAotICAgICAgICAvKiBTZXQgUlRDIHRpbW91dCB2YWx1ZSBhbmQgZW5hYmxlIHRpbWVvdXQgKi8KLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBBLCh1Y2hhcikoMHgyMCB8IChpKzMpKSk7Ci0gICAgICAgIF9QTV93cml0ZUNNT1MoMHgwQiwodWNoYXIpKChfUE1fb2xkQ01PU1JlZ0IgJiAweDBGKSB8IDB4NDApKTsKLSAgICAgICAgfQorCS8qIFNldCBSVEMgdGltb3V0IHZhbHVlIGFuZCBlbmFibGUgdGltZW91dCAqLworCV9QTV93cml0ZUNNT1MoMHgwQSwodWNoYXIpKDB4MjAgfCAoaSszKSkpOworCV9QTV93cml0ZUNNT1MoMHgwQiwodWNoYXIpKChfUE1fb2xkQ01PU1JlZ0IgJiAweDBGKSB8IDB4NDApKTsKKwl9CiB9CiAKIGlib29sIFBNQVBJIFBNX3NldFJlYWxUaW1lQ2xvY2tIYW5kbGVyKFBNX2ludEhhbmRsZXIgdGgsaW50IGZyZXF1ZW5jeSkKQEAgLTEzMCwxNCArMTMwLDEzIEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVSZWFsVGltZUNsb2NrSGFuZGxlcih2b2lkKQogewogICAgIGlmIChfUE1fcnRjSGFuZGxlcikgewotICAgICAgICAvKiBSZXN0b3JlIENNT1MgcmVnaXN0ZXJzIGFuZCBtYXNrIFJUQyBjbG9jayAqLwotICAgICAgICBfUE1fd3JpdGVDTU9TKDB4MEEsX1BNX29sZENNT1NSZWdBKTsKLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBCLF9QTV9vbGRDTU9TUmVnQik7Ci0gICAgICAgIFBNX291dHBiKDB4QTEsKHVjaGFyKSgoUE1faW5wYigweEExKSAmIDB4RkUpIHwgKF9QTV9vbGRSVENQSUMyICYgfjB4RkUpKSk7CisJLyogUmVzdG9yZSBDTU9TIHJlZ2lzdGVycyBhbmQgbWFzayBSVEMgY2xvY2sgKi8KKwlfUE1fd3JpdGVDTU9TKDB4MEEsX1BNX29sZENNT1NSZWdBKTsKKwlfUE1fd3JpdGVDTU9TKDB4MEIsX1BNX29sZENNT1NSZWdCKTsKKwlQTV9vdXRwYigweEExLCh1Y2hhcikoKFBNX2lucGIoMHhBMSkgJiAweEZFKSB8IChfUE1fb2xkUlRDUElDMiAmIH4weEZFKSkpOwogCi0gICAgICAgIC8qIFJlc3RvcmUgdGhlIGludGVycnVwdCB2ZWN0b3IgKi8KLSAgICAgICAgX1BNX3Jlc3RvcmVJU1IoUlRDX2lkdEVudHJ5LCAmX1BNX3ByZXZSVEMpOwotICAgICAgICBfUE1fcnRjSGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIH0KKwkvKiBSZXN0b3JlIHRoZSBpbnRlcnJ1cHQgdmVjdG9yICovCisJX1BNX3Jlc3RvcmVJU1IoUlRDX2lkdEVudHJ5LCAmX1BNX3ByZXZSVEMpOworCV9QTV9ydGNIYW5kbGVyID0gTlVMTDsKKwl9CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L21lbS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvbWVtLmMKaW5kZXggYjMwZDJiZS4uMzEyOGM2YSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvbWVtLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvbWVtLmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiAgICAgICAgICAgICAgICAgICBTY2lUZWNoIE9TIFBvcnRhYmlsaXR5IE1hbmFnZXIgTGlicmFyeQotKgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCisqCiAqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICoKICogICAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgU2NpVGVjaCBNR0wgUHVibGljCkBAIC03MCw3ICs3MCw3IEBACiAKIHVsb25nICAgUE1BUEkgX1BNX2dldFBEQih2b2lkKTsKIAotLy8gUGFnZSB0YWJsZSBlbnRyeSBmbGFncworLyogUGFnZSB0YWJsZSBlbnRyeSBmbGFncyAqLwogCiAjZGVmaW5lIFBBR0VfRkxBR1NfUFJFU0VOVAkJCTB4MDAwMDAwMDEKICNkZWZpbmUgUEFHRV9GTEFHU19XUklURUFCTEUJCTB4MDAwMDAwMDIKQEAgLTEwMCwxNCArMTAwLDE0IEBACiAgICAgdWxvbmcgICAgICAgICAgICAgICBsZW5ndGggPSBsaW1pdCsxOwogICAgIFBIWVNJQ0FMX0FERFJFU1MgICAgcGFJb0Jhc2UgPSB7MH07CiAKLSAgICAvLyBOVCBsb3ZlcyBsYXJnZSBJbnRzCisgICAgLyogTlQgbG92ZXMgbGFyZ2UgSW50cyAqLwogICAgIHBhSW9CYXNlID0gUnRsQ29udmVydFVsb25nVG9MYXJnZUludGVnZXIoIGJhc2UgKTsKIAotICAgIC8vIE1hcCBJTyBzcGFjZSBpbnRvIEtlcm5lbAorICAgIC8qIE1hcCBJTyBzcGFjZSBpbnRvIEtlcm5lbCAqLwogICAgIGlmIChpc0NhY2hlZCkKLSAgICAgICAgcmV0dXJuIChVTE9ORylNbU1hcElvU3BhY2UocGFJb0Jhc2UsIGxlbmd0aCwgTW1DYWNoZWQgKTsKKwlyZXR1cm4gKFVMT05HKU1tTWFwSW9TcGFjZShwYUlvQmFzZSwgbGVuZ3RoLCBNbUNhY2hlZCApOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIChVTE9ORylNbU1hcElvU3BhY2UocGFJb0Jhc2UsIGxlbmd0aCwgTW1Ob25DYWNoZWQgKTsKKwlyZXR1cm4gKFVMT05HKU1tTWFwSW9TcGFjZShwYUlvQmFzZSwgbGVuZ3RoLCBNbU5vbkNhY2hlZCApOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTM1LDcgKzEzNSw3IEBACiAJCW1hc2sgJj0gflBBR0VfRkxBR1NfVVNFUjsKIAkJYml0cyB8PSBQQUdFX0ZMQUdTX1VTRVI7CiAJCX0KLQkJCisKIAkvKiBEaXNhYmxlIFBDRCBiaXQgaWYgcGFnZSB0YWJsZSBlbnRyeSBzaG91bGQgYmUgdW5jYWNoZWQgKi8KIAlpZiAoIWlzQ2FjaGVkKSB7CiAJCW1hc2sgJj0gfihQQUdFX0ZMQUdTX0NBQ0hFX0RJU0FCTEUgfCBQQUdFX0ZMQUdTX1dSSVRFX1RIUk9VR0gpOwpAQCAtMTQ0LDMwICsxNDQsMzAgQEAKIAogICAgIHBQREIgPSAodWxvbmcqKV9QTV9tYXBQaHlzaWNhbFRvTGluZWFyKF9QTV9nZXRQREIoKSwweEZGRix0cnVlKTsKICAgICBpZiAocFBEQikgewotICAgICAgICBzdGFydFBEQiA9IChsaW5lYXIgPj4gMjIpICYgMHgzRkY7Ci0gICAgICAgIHN0YXJ0UGFnZSA9IChsaW5lYXIgPj4gMTIpICYgMHgzRkY7Ci0gICAgICAgIGVuZFBEQiA9ICgobGluZWFyK2xpbWl0KSA+PiAyMikgJiAweDNGRjsKLSAgICAgICAgZW5kUGFnZSA9ICgobGluZWFyK2xpbWl0KSA+PiAxMikgJiAweDNGRjsKLSAgICAgICAgZm9yIChpUERCID0gc3RhcnRQREI7IGlQREIgPD0gZW5kUERCOyBpUERCKyspIHsKLSAgICAgICAgICAgIC8vIFNldCB0aGUgYml0cyBpbiB0aGUgcGFnZSBkaXJlY3RvcnkgZW50cnkgLSByZXF1aXJlZCBhcyBwZXIKLSAgICAgICAgICAgIC8vIFBlbnRpdW0gNCBtYW51YWwuIFRoaXMgYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSA0TUIgcGFnZSBlbnRyaWVzCi0gICAgICAgICAgICBwUERCW2lQREJdID0gKHBQREJbaVBEQl0gJiBtYXNrKSB8IGJpdHM7Ci0gICAgICAgICAgICBpZiAoIShwUERCW2lQREJdICYgUEFHRV9GTEFHU180TUIpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGRlYWxpbmcgd2l0aCA0S0IgcGFnZXMgdGhlbiB3ZSBuZWVkIHRvIGl0ZXJhdGUKLSAgICAgICAgICAgICAgICAvLyB0aHJvdWdoIGVhY2ggb2YgdGhlIHBhZ2UgdGFibGUgZW50cmllcwotICAgICAgICAgICAgICAgIHBhZ2VUYWJsZSA9IHBQREJbaVBEQl0gJiB+MHhGRkY7Ci0gICAgICAgICAgICAgICAgcFBhZ2VUYWJsZSA9ICh1bG9uZyopX1BNX21hcFBoeXNpY2FsVG9MaW5lYXIocGFnZVRhYmxlLDB4RkZGLHRydWUpOwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gKGlQREIgPT0gc3RhcnRQREIpID8gc3RhcnRQYWdlIDogMDsKLSAgICAgICAgICAgICAgICBlbmQgPSAoaVBEQiA9PSBlbmRQREIpID8gZW5kUGFnZSA6IDB4M0ZGOwotICAgICAgICAgICAgICAgIGZvciAoaVBhZ2UgPSBzdGFydDsgaVBhZ2UgPD0gZW5kOyBpUGFnZSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBQYWdlVGFibGVbaVBhZ2VdID0gKHBQYWdlVGFibGVbaVBhZ2VdICYgbWFzaykgfCBiaXRzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTW1Vbm1hcElvU3BhY2UocFBhZ2VUYWJsZSwweEZGRik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBNbVVubWFwSW9TcGFjZShwUERCLDB4RkZGKTsKLSAgICAgICAgUE1fZmx1c2hUTEIoKTsKLSAgICAgICAgfQorCXN0YXJ0UERCID0gKGxpbmVhciA+PiAyMikgJiAweDNGRjsKKwlzdGFydFBhZ2UgPSAobGluZWFyID4+IDEyKSAmIDB4M0ZGOworCWVuZFBEQiA9ICgobGluZWFyK2xpbWl0KSA+PiAyMikgJiAweDNGRjsKKwllbmRQYWdlID0gKChsaW5lYXIrbGltaXQpID4+IDEyKSAmIDB4M0ZGOworCWZvciAoaVBEQiA9IHN0YXJ0UERCOyBpUERCIDw9IGVuZFBEQjsgaVBEQisrKSB7CisJICAgIC8qIFNldCB0aGUgYml0cyBpbiB0aGUgcGFnZSBkaXJlY3RvcnkgZW50cnkgLSByZXF1aXJlZCBhcyBwZXIgKi8KKwkgICAgLyogUGVudGl1bSA0IG1hbnVhbC4gVGhpcyBhbHNvIHRha2VzIGNhcmUgb2YgdGhlIDRNQiBwYWdlIGVudHJpZXMgKi8KKwkgICAgcFBEQltpUERCXSA9IChwUERCW2lQREJdICYgbWFzaykgfCBiaXRzOworCSAgICBpZiAoIShwUERCW2lQREJdICYgUEFHRV9GTEFHU180TUIpKSB7CisJCS8qIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggNEtCIHBhZ2VzIHRoZW4gd2UgbmVlZCB0byBpdGVyYXRlICovCisJCS8qIHRocm91Z2ggZWFjaCBvZiB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzICovCisJCXBhZ2VUYWJsZSA9IHBQREJbaVBEQl0gJiB+MHhGRkY7CisJCXBQYWdlVGFibGUgPSAodWxvbmcqKV9QTV9tYXBQaHlzaWNhbFRvTGluZWFyKHBhZ2VUYWJsZSwweEZGRix0cnVlKTsKKwkJc3RhcnQgPSAoaVBEQiA9PSBzdGFydFBEQikgPyBzdGFydFBhZ2UgOiAwOworCQllbmQgPSAoaVBEQiA9PSBlbmRQREIpID8gZW5kUGFnZSA6IDB4M0ZGOworCQlmb3IgKGlQYWdlID0gc3RhcnQ7IGlQYWdlIDw9IGVuZDsgaVBhZ2UrKykgeworCQkgICAgcFBhZ2VUYWJsZVtpUGFnZV0gPSAocFBhZ2VUYWJsZVtpUGFnZV0gJiBtYXNrKSB8IGJpdHM7CisJCSAgICB9CisJCU1tVW5tYXBJb1NwYWNlKHBQYWdlVGFibGUsMHhGRkYpOworCQl9CisJICAgIH0KKwlNbVVubWFwSW9TcGFjZShwUERCLDB4RkZGKTsKKwlQTV9mbHVzaFRMQigpOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE4MywyNCArMTgzLDI0IEBACiB7CiAgICAgaW50ICAgICAgICAgaTsKIAotICAgIC8vIEZpcnN0IGZpbmQgYSBmcmVlIHNsb3QgaW4gb3VyIHNoYXJlZCBtZW1vcnkgdGFibGUKKyAgICAvKiBGaXJzdCBmaW5kIGEgZnJlZSBzbG90IGluIG91ciBzaGFyZWQgbWVtb3J5IHRhYmxlICovCiAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9NRU1PUllfU0hBUkVEOyBpKyspIHsKLSAgICAgICAgaWYgKHNoYXJlZFtpXS5saW5lYXIgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJaWYgKHNoYXJlZFtpXS5saW5lYXIgPT0gMCkKKwkgICAgYnJlYWs7CisJfQogICAgIGlmIChpID09IE1BWF9NRU1PUllfU0hBUkVEKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIAotICAgIC8vIEFsbG9jYXRlIHRoZSBwYWdlZCBwb29sCisgICAgLyogQWxsb2NhdGUgdGhlIHBhZ2VkIHBvb2wgKi8KICAgICBzaGFyZWRbaV0ubGluZWFyID0gRXhBbGxvY2F0ZVBvb2woUGFnZWRQb29sLCBzaXplKTsKIAotICAgIC8vIENyZWF0ZSBhIGxpc3QgdG8gbWFuYWdlIHRoaXMgYWxsb2NhdGlvbgorICAgIC8qIENyZWF0ZSBhIGxpc3QgdG8gbWFuYWdlIHRoaXMgYWxsb2NhdGlvbiAqLwogICAgIHNoYXJlZFtpXS5wTWRsID0gSW9BbGxvY2F0ZU1kbChzaGFyZWRbaV0ubGluZWFyLHNpemUsRkFMU0UsRkFMU0UsKFBJUlApIE5VTEwpOwogCi0gICAgLy8gTG9jayB0aGlzIGFsbG9jYXRpb24gaW4gbWVtb3J5CisgICAgLyogTG9jayB0aGlzIGFsbG9jYXRpb24gaW4gbWVtb3J5ICovCiAgICAgTW1Qcm9iZUFuZExvY2tQYWdlcyhzaGFyZWRbaV0ucE1kbCxLZXJuZWxNb2RlLElvTW9kaWZ5QWNjZXNzKTsKIAotICAgIC8vIE1vZGlmeSBiaXRzIHRvIGdyYW50IHVzZXIgYWNjZXNzCisgICAgLyogTW9kaWZ5IGJpdHMgdG8gZ3JhbnQgdXNlciBhY2Nlc3MgKi8KICAgICBfUE1fYWRqdXN0UGFnZVRhYmxlcygodWxvbmcpc2hhcmVkW2ldLmxpbmVhciwgc2l6ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgcmV0dXJuICh2b2lkKilzaGFyZWRbaV0ubGluZWFyOwogfQpAQCAtMjE0LDIzICsyMTQsMjMgQEAKIHsKICAgICBpbnQgaTsKIAotICAgIC8vIEZpbmQgYSBzaGFyZWQgbWVtb3J5IGJsb2NrIGluIG91ciB0YWJsZSBhbmQgZnJlZSBpdAorICAgIC8qIEZpbmQgYSBzaGFyZWQgbWVtb3J5IGJsb2NrIGluIG91ciB0YWJsZSBhbmQgZnJlZSBpdCAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfTUVNT1JZX1NIQVJFRDsgaSsrKSB7Ci0gICAgICAgIGlmIChzaGFyZWRbaV0ubGluZWFyID09IHApIHsKLSAgICAgICAgICAgIC8vIFVubG9jayB3aGF0IHdlIGxvY2tlZAotICAgICAgICAgICAgTW1VbmxvY2tQYWdlcyhzaGFyZWRbaV0ucE1kbCk7CisJaWYgKHNoYXJlZFtpXS5saW5lYXIgPT0gcCkgeworCSAgICAvKiBVbmxvY2sgd2hhdCB3ZSBsb2NrZWQgKi8KKwkgICAgTW1VbmxvY2tQYWdlcyhzaGFyZWRbaV0ucE1kbCk7CiAKLSAgICAgICAgICAgIC8vIEZyZWUgb3VyIE1ETAotICAgICAgICAgICAgSW9GcmVlTWRsKHNoYXJlZFtpXS5wTWRsKTsKKwkgICAgLyogRnJlZSBvdXIgTURMICovCisJICAgIElvRnJlZU1kbChzaGFyZWRbaV0ucE1kbCk7CiAKLSAgICAgICAgICAgIC8vIEZyZWUgb3VyIG1lbQotICAgICAgICAgICAgRXhGcmVlUG9vbChzaGFyZWRbaV0ubGluZWFyKTsKKwkgICAgLyogRnJlZSBvdXIgbWVtICovCisJICAgIEV4RnJlZVBvb2woc2hhcmVkW2ldLmxpbmVhcik7CiAKLSAgICAgICAgICAgIC8vIEZsYWcgdGhhdCBpcyBlbnRyeSBpcyBhdmFpbGFibGUKLSAgICAgICAgICAgIHNoYXJlZFtpXS5saW5lYXIgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgLyogRmxhZyB0aGF0IGlzIGVudHJ5IGlzIGF2YWlsYWJsZSAqLworCSAgICBzaGFyZWRbaV0ubGluZWFyID0gMDsKKwkgICAgYnJlYWs7CisJICAgIH0KKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNDUsMjcgKzI0NSwyNyBAQAogICAgIHVsb25nICAgbGluZWFyLGxlbmd0aCA9IGxpbWl0KzE7CiAgICAgaW50ICAgICBpOwogCi0gICAgLy8gU2VhcmNoIHRhYmxlIG9mIGV4aXN0aW5nIG1hcHBpbmdzIHRvIHNlZSBpZiB3ZSBoYXZlIGFscmVhZHkgbWFwcGVkCi0gICAgLy8gYSByZWdpb24gb2YgbWVtb3J5IHRoYXQgd2lsbCBzZXJ2ZSB0aGlzIHB1cnBvc2UuCisgICAgLyogU2VhcmNoIHRhYmxlIG9mIGV4aXN0aW5nIG1hcHBpbmdzIHRvIHNlZSBpZiB3ZSBoYXZlIGFscmVhZHkgbWFwcGVkICovCisgICAgLyogYSByZWdpb24gb2YgbWVtb3J5IHRoYXQgd2lsbCBzZXJ2ZSB0aGlzIHB1cnBvc2UuICovCiAgICAgZm9yIChpID0gMDsgaSA8IG51bU1hcHBpbmdzOyBpKyspIHsKLSAgICAgICAgaWYgKG1hcHNbaV0ucGh5c2ljYWwgPT0gYmFzZSAmJiBtYXBzW2ldLmxlbmd0aCA9PSBsZW5ndGggJiYgbWFwc1tpXS5pc0NhY2hlZCA9PSBpc0NhY2hlZCkgewotICAgICAgICAgICAgX1BNX2FkanVzdFBhZ2VUYWJsZXMoKHVsb25nKW1hcHNbaV0ubGluZWFyLCBtYXBzW2ldLmxlbmd0aCwgdHJ1ZSwgaXNDYWNoZWQpOwotICAgICAgICAgICAgcmV0dXJuICh2b2lkKiltYXBzW2ldLmxpbmVhcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmIChtYXBzW2ldLnBoeXNpY2FsID09IGJhc2UgJiYgbWFwc1tpXS5sZW5ndGggPT0gbGVuZ3RoICYmIG1hcHNbaV0uaXNDYWNoZWQgPT0gaXNDYWNoZWQpIHsKKwkgICAgX1BNX2FkanVzdFBhZ2VUYWJsZXMoKHVsb25nKW1hcHNbaV0ubGluZWFyLCBtYXBzW2ldLmxlbmd0aCwgdHJ1ZSwgaXNDYWNoZWQpOworCSAgICByZXR1cm4gKHZvaWQqKW1hcHNbaV0ubGluZWFyOworCSAgICB9CisJfQogICAgIGlmIChudW1NYXBwaW5ncyA9PSBNQVhfTUVNT1JZX01BUFBJTkdTKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIAotICAgIC8vIFdlIGRpZCBub3QgZmluZCBhbnkgcHJldmlvdXNseSBtYXBwZWQgbWVtb3J5IHJlZ2lvbiwgc28gbWFwcyBpdCBpbi4KKyAgICAvKiBXZSBkaWQgbm90IGZpbmQgYW55IHByZXZpb3VzbHkgbWFwcGVkIG1lbW9yeSByZWdpb24sIHNvIG1hcHMgaXQgaW4uICovCiAgICAgaWYgKChsaW5lYXIgPSBfUE1fbWFwUGh5c2ljYWxUb0xpbmVhcihiYXNlLGxpbWl0LGlzQ2FjaGVkKSkgPT0gMHhGRkZGRkZGRikKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAgICAgbWFwc1tudW1NYXBwaW5nc10ucGh5c2ljYWwgPSBiYXNlOwogICAgIG1hcHNbbnVtTWFwcGluZ3NdLmxlbmd0aCA9IGxlbmd0aDsKICAgICBtYXBzW251bU1hcHBpbmdzXS5saW5lYXIgPSBsaW5lYXI7CiAgICAgbWFwc1tudW1NYXBwaW5nc10uaXNDYWNoZWQgPSBpc0NhY2hlZDsKICAgICBudW1NYXBwaW5ncysrOwogCi0gICAgLy8gR3JhbnQgdXNlciBhY2Nlc3MgdG8gdGhpcyBJL08gc3BhY2UKKyAgICAvKiBHcmFudCB1c2VyIGFjY2VzcyB0byB0aGlzIEkvTyBzcGFjZSAqLwogICAgIF9QTV9hZGp1c3RQYWdlVGFibGVzKCh1bG9uZylsaW5lYXIsIGxlbmd0aCwgdHJ1ZSwgaXNDYWNoZWQpOwogICAgIHJldHVybiAodm9pZCopbGluZWFyOwogfQpAQCAtMjc4LDggKzI3OCw4IEBACiAgICAgdm9pZCAqcHRyLAogICAgIHVsb25nIGxpbWl0KQogewotICAgIC8vIFdlIGRvbid0IGZyZWUgdGhlIG1lbW9yeSBtYXBwaW5ncyBpbiBoZXJlIGJlY2F1c2Ugd2UgY2FjaGUgYWxsCi0gICAgLy8gdGhlIG1lbW9yeSBtYXBwaW5ncyB3ZSBjcmVhdGUgaW4gdGhlIHN5c3RlbSBmb3IgbGF0ZXIgdXNlLgorICAgIC8qIFdlIGRvbid0IGZyZWUgdGhlIG1lbW9yeSBtYXBwaW5ncyBpbiBoZXJlIGJlY2F1c2Ugd2UgY2FjaGUgYWxsICovCisgICAgLyogdGhlIG1lbW9yeSBtYXBwaW5ncyB3ZSBjcmVhdGUgaW4gdGhlIHN5c3RlbSBmb3IgbGF0ZXIgdXNlLiAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjkxLDcgKzI5MSw3IEBACiAgICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtTWFwcGluZ3M7IGkrKykKLSAgICAgICAgTW1Vbm1hcElvU3BhY2UoKHZvaWQgKiltYXBzW2ldLmxpbmVhcixtYXBzW2ldLmxlbmd0aCk7CisJTW1Vbm1hcElvU3BhY2UoKHZvaWQgKiltYXBzW2ldLmxpbmVhcixtYXBzW2ldLmxlbmd0aCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMjAsMTAgKzMyMCwxMCBAQAogICAgIHVsb25nICAgbGluZWFyID0gKHVsb25nKXAgJiB+MHhGRkY7CiAKICAgICBmb3IgKGkgPSAobGVuZ3RoICsgMHhGRkYpID4+IDEyOyBpID4gMDsgaS0tKSB7Ci0gICAgICAgIGlmICgoKnBoeXNBZGRyZXNzKysgPSBQTV9nZXRQaHlzaWNhbEFkZHIoKHZvaWQqKWxpbmVhcikpID09IDB4RkZGRkZGRkYpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxpbmVhciArPSA0MDk2OwotICAgICAgICB9CisJaWYgKCgqcGh5c0FkZHJlc3MrKyA9IFBNX2dldFBoeXNpY2FsQWRkcigodm9pZCopbGluZWFyKSkgPT0gMHhGRkZGRkZGRikKKwkgICAgcmV0dXJuIGZhbHNlOworCWxpbmVhciArPSA0MDk2OworCX0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzQwLDU4ICszNDAsNTggQEAKICAgICBpbnQgICAgICAgICAgICAgICAgIGk7CiAgICAgUEhZU0lDQUxfQUREUkVTUyAgICBwYU91ckFkZHJlc3M7CiAKLSAgICAvLyBGaXJzdCBmaW5kIGEgZnJlZSBzbG90IGluIG91ciBzaGFyZWQgbWVtb3J5IHRhYmxlCisgICAgLyogRmlyc3QgZmluZCBhIGZyZWUgc2xvdCBpbiBvdXIgc2hhcmVkIG1lbW9yeSB0YWJsZSAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfTUVNT1JZX0xPQ0tFRDsgaSsrKSB7Ci0gICAgICAgIGlmIChsb2NrZWRbaV0ubGluZWFyID09IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWlmIChsb2NrZWRbaV0ubGluZWFyID09IDApCisJICAgIGJyZWFrOworCX0KICAgICBpZiAoaSA9PSBNQVhfTUVNT1JZX0xPQ0tFRCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAKLSAgICAvLyBIaWdoZXN0QWNjZXB0YWJsZUFkZHJlc3MgLSBTcGVjaWZpZXMgdGhlIGhpZ2hlc3QgdmFsaWQgcGh5c2ljYWwgYWRkcmVzcwotICAgIC8vIHRoZSBkcml2ZXIgY2FuIHVzZS4gRm9yIGV4YW1wbGUsIGlmIGEgZGV2aWNlIGNhbiBvbmx5IHJlZmVyZW5jZSBwaHlzaWNhbAotICAgIC8vIG1lbW9yeSBpbiB0aGUgbG93ZXIgMTZNQiwgdGhpcyB2YWx1ZSB3b3VsZCBiZSBzZXQgdG8gMHgwMDAwMDAwMEZGRkZGRi4KKyAgICAvKiBIaWdoZXN0QWNjZXB0YWJsZUFkZHJlc3MgLSBTcGVjaWZpZXMgdGhlIGhpZ2hlc3QgdmFsaWQgcGh5c2ljYWwgYWRkcmVzcyAqLworICAgIC8qIHRoZSBkcml2ZXIgY2FuIHVzZS4gRm9yIGV4YW1wbGUsIGlmIGEgZGV2aWNlIGNhbiBvbmx5IHJlZmVyZW5jZSBwaHlzaWNhbCAqLworICAgIC8qIG1lbW9yeSBpbiB0aGUgbG93ZXIgMTZNQiwgdGhpcyB2YWx1ZSB3b3VsZCBiZSBzZXQgdG8gMHgwMDAwMDAwMEZGRkZGRi4gKi8KICAgICBwYU91ckFkZHJlc3MuSGlnaFBhcnQgPSAwOwogICAgIGlmIChiZWxvdzE2TSkKLSAgICAgICAgcGFPdXJBZGRyZXNzLkxvd1BhcnQgPSAweDAwRkZGRkZGOworCXBhT3VyQWRkcmVzcy5Mb3dQYXJ0ID0gMHgwMEZGRkZGRjsKICAgICBlbHNlCi0gICAgICAgIHBhT3VyQWRkcmVzcy5Mb3dQYXJ0ID0gMHhGRkZGRkZGRjsKKwlwYU91ckFkZHJlc3MuTG93UGFydCA9IDB4RkZGRkZGRkY7CiAKICAgICBpZiAoY29udGlndW91cykgewotICAgICAgICAvLyBBbGxvY2F0ZSBmcm9tIHRoZSBub24tcGFnZWQgcG9vbCAodW5mb3J0dW5hdGVseSA0TUIgcGFnZXMpCi0gICAgICAgIGxvY2tlZFtpXS5saW5lYXIgPSBNbUFsbG9jYXRlQ29udGlndW91c01lbW9yeShzaXplLCBwYU91ckFkZHJlc3MpOwotICAgICAgICBpZiAoIWxvY2tlZFtpXS5saW5lYXIpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKwkvKiBBbGxvY2F0ZSBmcm9tIHRoZSBub24tcGFnZWQgcG9vbCAodW5mb3J0dW5hdGVseSA0TUIgcGFnZXMpICovCisJbG9ja2VkW2ldLmxpbmVhciA9IE1tQWxsb2NhdGVDb250aWd1b3VzTWVtb3J5KHNpemUsIHBhT3VyQWRkcmVzcyk7CisJaWYgKCFsb2NrZWRbaV0ubGluZWFyKQorCSAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAvLyBGbGFnIG5vIE1ETAotICAgICAgICBsb2NrZWRbaV0ucE1kbCA9IE5VTEw7CisJLyogRmxhZyBubyBNREwgKi8KKwlsb2NrZWRbaV0ucE1kbCA9IE5VTEw7CiAKLSAgICAgICAgLy8gTWFwIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGZvciB0aGUgbWVtb3J5IHNvIHdlIGNhbiBtYW5hZ2UKLSAgICAgICAgLy8gdGhlIHBhZ2UgdGFibGVzIGluIDRLQiBjaHVua3MgbWFwcGVkIGludG8gdXNlciBzcGFjZS4KKwkvKiBNYXAgdGhlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIHRoZSBtZW1vcnkgc28gd2UgY2FuIG1hbmFnZSAqLworCS8qIHRoZSBwYWdlIHRhYmxlcyBpbiA0S0IgY2h1bmtzIG1hcHBlZCBpbnRvIHVzZXIgc3BhY2UuICovCiAKLSAgICAgICAgLy8gVE9ETzogTWFwIHRoaXMgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzcyB0byB0aGUgbGluZWFyIGFkZHJlc3NzCi0gICAgICAgIGxvY2tlZFtpXS5tbUlvTWFwcGVkID0gbG9ja2VkW2ldLmxpbmVhcjsKKwkvKiBUT0RPOiBNYXAgdGhpcyB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHRvIHRoZSBsaW5lYXIgYWRkcmVzc3MgKi8KKwlsb2NrZWRbaV0ubW1Jb01hcHBlZCA9IGxvY2tlZFtpXS5saW5lYXI7CiAKLSAgICAgICAgLy8gTW9kaWZ5IGJpdHMgdG8gZ3JhbnQgdXNlciBhY2Nlc3MsIGZsYWcgbm90IGNhY2hlZAotICAgICAgICBfUE1fYWRqdXN0UGFnZVRhYmxlcygodWxvbmcpbG9ja2VkW2ldLm1tSW9NYXBwZWQsIHNpemUsIHRydWUsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuICh2b2lkKilsb2NrZWRbaV0ubW1Jb01hcHBlZDsKLSAgICAgICAgfQorCS8qIE1vZGlmeSBiaXRzIHRvIGdyYW50IHVzZXIgYWNjZXNzLCBmbGFnIG5vdCBjYWNoZWQgKi8KKwlfUE1fYWRqdXN0UGFnZVRhYmxlcygodWxvbmcpbG9ja2VkW2ldLm1tSW9NYXBwZWQsIHNpemUsIHRydWUsIGZhbHNlKTsKKwlyZXR1cm4gKHZvaWQqKWxvY2tlZFtpXS5tbUlvTWFwcGVkOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgLy8gQWxsb2NhdGUgZnJvbSB0aGUgcGFnZWQgcG9vbAotICAgICAgICBsb2NrZWRbaV0ubGluZWFyID0gRXhBbGxvY2F0ZVBvb2woUGFnZWRQb29sLCBzaXplKTsKLSAgICAgICAgaWYgKCFsb2NrZWRbaV0ubGluZWFyKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisJLyogQWxsb2NhdGUgZnJvbSB0aGUgcGFnZWQgcG9vbCAqLworCWxvY2tlZFtpXS5saW5lYXIgPSBFeEFsbG9jYXRlUG9vbChQYWdlZFBvb2wsIHNpemUpOworCWlmICghbG9ja2VkW2ldLmxpbmVhcikKKwkgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgLy8gQ3JlYXRlIGEgbGlzdCB0byBtYW5hZ2UgdGhpcyBhbGxvY2F0aW9uCi0gICAgICAgIGxvY2tlZFtpXS5wTWRsID0gSW9BbGxvY2F0ZU1kbChsb2NrZWRbaV0ubGluZWFyLHNpemUsRkFMU0UsRkFMU0UsKFBJUlApIE5VTEwpOworCS8qIENyZWF0ZSBhIGxpc3QgdG8gbWFuYWdlIHRoaXMgYWxsb2NhdGlvbiAqLworCWxvY2tlZFtpXS5wTWRsID0gSW9BbGxvY2F0ZU1kbChsb2NrZWRbaV0ubGluZWFyLHNpemUsRkFMU0UsRkFMU0UsKFBJUlApIE5VTEwpOwogCi0gICAgICAgIC8vIExvY2sgdGhpcyBhbGxvY2F0aW9uIGluIG1lbW9yeQotICAgICAgICBNbVByb2JlQW5kTG9ja1BhZ2VzKGxvY2tlZFtpXS5wTWRsLEtlcm5lbE1vZGUsSW9Nb2RpZnlBY2Nlc3MpOworCS8qIExvY2sgdGhpcyBhbGxvY2F0aW9uIGluIG1lbW9yeSAqLworCU1tUHJvYmVBbmRMb2NrUGFnZXMobG9ja2VkW2ldLnBNZGwsS2VybmVsTW9kZSxJb01vZGlmeUFjY2Vzcyk7CiAKLSAgICAgICAgLy8gTW9kaWZ5IGJpdHMgdG8gZ3JhbnQgdXNlciBhY2Nlc3MsIGZsYWcgbm90IGNhY2hlZAotICAgICAgICBfUE1fYWRqdXN0UGFnZVRhYmxlcygodWxvbmcpbG9ja2VkW2ldLmxpbmVhciwgc2l6ZSwgdHJ1ZSwgZmFsc2UpOwotICAgICAgICByZXR1cm4gKHZvaWQqKWxvY2tlZFtpXS5saW5lYXI7Ci0gICAgICAgIH0KKwkvKiBNb2RpZnkgYml0cyB0byBncmFudCB1c2VyIGFjY2VzcywgZmxhZyBub3QgY2FjaGVkICovCisJX1BNX2FkanVzdFBhZ2VUYWJsZXMoKHVsb25nKWxvY2tlZFtpXS5saW5lYXIsIHNpemUsIHRydWUsIGZhbHNlKTsKKwlyZXR1cm4gKHZvaWQqKWxvY2tlZFtpXS5saW5lYXI7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDA3LDI3ICs0MDcsMjcgQEAKIAogICAgIC8qIEZpbmQgYSBsb2NrZWQgbWVtb3J5IGJsb2NrIGluIG91ciB0YWJsZSBhbmQgZnJlZSBpdCAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfTUVNT1JZX0xPQ0tFRDsgaSsrKSB7Ci0gICAgICAgIGlmIChsb2NrZWRbaV0ubGluZWFyID09IHApIHsKLSAgICAgICAgICAgIC8vIEFuIE1kbCBpbmRpY2F0ZXMgdGhhdCB3ZSB1c2VkIHRoZSBwYWdlZCBwb29sLCBhbmQgbG9ja2VkIGl0LAotICAgICAgICAgICAgLy8gc28gbm93IHdlIGhhdmUgdG8gdW5sb2NrLCBmcmVlIHRoZSBNREwsIGFuZCBmcmVlIHBhZ2VkCi0gICAgICAgICAgICBpZiAobG9ja2VkW2ldLnBNZGwpIHsKLSAgICAgICAgICAgICAgICAvLyBVbmxvY2sgd2hhdCB3ZSBsb2NrZWQgYW5kIGZyZWUgdGhlIE1kbAotICAgICAgICAgICAgICAgIE1tVW5sb2NrUGFnZXMobG9ja2VkW2ldLnBNZGwpOwotICAgICAgICAgICAgICAgIElvRnJlZU1kbChsb2NrZWRbaV0ucE1kbCk7Ci0gICAgICAgICAgICAgICAgRXhGcmVlUG9vbChsb2NrZWRbaV0ubGluZWFyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiBGcmVlIHRoZSBtbUlvTWFwIG1hcHBpbmcgZm9yIHRoZSBtZW1vcnkhCisJaWYgKGxvY2tlZFtpXS5saW5lYXIgPT0gcCkgeworCSAgICAvKiBBbiBNZGwgaW5kaWNhdGVzIHRoYXQgd2UgdXNlZCB0aGUgcGFnZWQgcG9vbCwgYW5kIGxvY2tlZCBpdCwgKi8KKwkgICAgLyogc28gbm93IHdlIGhhdmUgdG8gdW5sb2NrLCBmcmVlIHRoZSBNREwsIGFuZCBmcmVlIHBhZ2VkICovCisJICAgIGlmIChsb2NrZWRbaV0ucE1kbCkgeworCQkvKiBVbmxvY2sgd2hhdCB3ZSBsb2NrZWQgYW5kIGZyZWUgdGhlIE1kbCAqLworCQlNbVVubG9ja1BhZ2VzKGxvY2tlZFtpXS5wTWRsKTsKKwkJSW9GcmVlTWRsKGxvY2tlZFtpXS5wTWRsKTsKKwkJRXhGcmVlUG9vbChsb2NrZWRbaV0ubGluZWFyKTsKKwkJfQorCSAgICBlbHNlIHsKKwkJLyogVE9ETzogRnJlZSB0aGUgbW1Jb01hcCBtYXBwaW5nIGZvciB0aGUgbWVtb3J5ISAqLwogCi0gICAgICAgICAgICAgICAgLy8gRnJlZSBub24tcGFnZWQgcG9vbAotICAgICAgICAgICAgICAgIE1tRnJlZUNvbnRpZ3VvdXNNZW1vcnkobG9ja2VkW2ldLmxpbmVhcik7Ci0gICAgICAgICAgICAgICAgfQorCQkvKiBGcmVlIG5vbi1wYWdlZCBwb29sICovCisJCU1tRnJlZUNvbnRpZ3VvdXNNZW1vcnkobG9ja2VkW2ldLmxpbmVhcik7CisJCX0KIAotICAgICAgICAgICAgLy8gRmxhZyB0aGF0IGlzIGVudHJ5IGlzIGF2YWlsYWJsZQotICAgICAgICAgICAgbG9ja2VkW2ldLmxpbmVhciA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCSAgICAvKiBGbGFnIHRoYXQgaXMgZW50cnkgaXMgYXZhaWxhYmxlICovCisJICAgIGxvY2tlZFtpXS5saW5lYXIgPSAwOworCSAgICBicmVhazsKKwkgICAgfQorCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQzNywxMSArNDM3LDExIEBACiB2b2lkICogUE1BUEkgUE1fYWxsb2NQYWdlKAogICAgIGlib29sIGxvY2tlZCkKIHsKLSAgICAvLyBBbGxvY2F0ZSB0aGUgbWVtb3J5IGZyb20gdGhlIG5vbi1wYWdlZCBwb29sIGlmIHdlIHdhbnQgdGhlIG1lbW9yeQotICAgIC8vIHRvIGJlIGxvY2tlZC4KKyAgICAvKiBBbGxvY2F0ZSB0aGUgbWVtb3J5IGZyb20gdGhlIG5vbi1wYWdlZCBwb29sIGlmIHdlIHdhbnQgdGhlIG1lbW9yeSAqLworICAgIC8qIHRvIGJlIGxvY2tlZC4gKi8KICAgICByZXR1cm4gRXhBbGxvY2F0ZVBvb2woCi0gICAgICAgIGxvY2tlZCA/IE5vblBhZ2VkUG9vbENhY2hlQWxpZ25lZCA6IFBhZ2VkUG9vbENhY2hlQWxpZ25lZCwKLSAgICAgICAgUEFHRV9TSVpFKTsKKwlsb2NrZWQgPyBOb25QYWdlZFBvb2xDYWNoZUFsaWduZWQgOiBQYWdlZFBvb2xDYWNoZUFsaWduZWQsCisJUEFHRV9TSVpFKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ2NSwxMSArNDY1LDExIEBACiB7CiAgICAgTURMICpwTWRsOwogCi0gICAgLy8gQ3JlYXRlIGEgbGlzdCB0byBtYW5hZ2UgdGhpcyBhbGxvY2F0aW9uCisgICAgLyogQ3JlYXRlIGEgbGlzdCB0byBtYW5hZ2UgdGhpcyBhbGxvY2F0aW9uICovCiAgICAgaWYgKChwTWRsID0gSW9BbGxvY2F0ZU1kbChwLGxlbixGQUxTRSxGQUxTRSwoUElSUClOVUxMKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKIAotICAgIC8vIExvY2sgdGhpcyBhbGxvY2F0aW9uIGluIG1lbW9yeQorICAgIC8qIExvY2sgdGhpcyBhbGxvY2F0aW9uIGluIG1lbW9yeSAqLwogICAgIE1tUHJvYmVBbmRMb2NrUGFnZXMocE1kbCxLZXJuZWxNb2RlLElvTW9kaWZ5QWNjZXNzKTsKICAgICAqKChQTURMKikoJmxoLT5oKSkgPSBwTWRsOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDg1LDExICs0ODUsMTEgQEAKICAgICBQTV9sb2NrSGFuZGxlICpsaCkKIHsKICAgICBpZiAocCAmJiBsaCkgewotICAgICAgICAvLyBVbmxvY2sgd2hhdCB3ZSBsb2NrZWQKLSAgICAgICAgTURMICpwTWRsID0gKigoUE1ETCopKCZsaC0+aCkpOwotICAgICAgICBNbVVubG9ja1BhZ2VzKHBNZGwpOwotICAgICAgICBJb0ZyZWVNZGwocE1kbCk7Ci0gICAgICAgIH0KKwkvKiBVbmxvY2sgd2hhdCB3ZSBsb2NrZWQgKi8KKwlNREwgKnBNZGwgPSAqKChQTURMKikoJmxoLT5oKSk7CisJTW1VbmxvY2tQYWdlcyhwTWRsKTsKKwlJb0ZyZWVNZGwocE1kbCk7CisJfQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01MTYsNCArNTE2LDMgQEAKIHsKICAgICByZXR1cm4gUE1fdW5sb2NrRGF0YVBhZ2VzKCh2b2lkKilwLGxlbixsaCk7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L29zaGRyLmggYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9udGRydi9vc2hkci5oCmluZGV4IDNmNzQ3YmIuLjY1YjdiYWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L29zaGRyLmgKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvb3NoZHIuaApAQCAtNDIsNSArNDIsNCBAQAogVU5JQ09ERV9TVFJJTkcgKiAgICBfUE1fQ1N0cmluZ1RvVW5pY29kZVN0cmluZyhjb25zdCBjaGFyICpjc3RyKTsKIHZvaWQgICAgICAgICAgICAgICAgX1BNX0ZyZWVVbmljb2RlU3RyaW5nKFVOSUNPREVfU1RSSU5HICp1bmlTdHIpOwogCi0jZW5kaWYgIC8vIF9fTlREUlZfT1NIRFJfSAotCisjZW5kaWYgIC8qIF9fTlREUlZfT1NIRFJfSCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvcG0uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L3BtLmMKaW5kZXggZDRiYmUyMi4uYzY2MDYzMSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvcG0uYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9udGRydi9wbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogICAgICAgICAgICAgICAgICAgU2NpVGVjaCBPUyBQb3J0YWJpbGl0eSBNYW5hZ2VyIExpYnJhcnkKLSoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQorKgogKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqCiAqICAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFNjaVRlY2ggTUdMIFB1YmxpYwpAQCAtODgsOSArODgsOSBAQAogewogICAgIHVpbnQgcG9zID0gc3RybGVuKHMpOwogICAgIGlmIChzW3Bvcy0xXSAhPSAnXFwnKSB7Ci0gICAgICAgIHNbcG9zXSA9ICdcXCc7Ci0gICAgICAgIHNbcG9zKzFdID0gJ1wwJzsKLSAgICAgICAgfQorCXNbcG9zXSA9ICdcXCc7CisJc1twb3MrMV0gPSAnXDAnOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTExNiwyNSArMTE2LDI1IEBACiAgICAgVUxPTkcgICBsZW47CiAKICAgICBpZiAoZmF0YWxFcnJvckNsZWFudXApCi0gICAgICAgIGZhdGFsRXJyb3JDbGVhbnVwKCk7CisJZmF0YWxFcnJvckNsZWFudXAoKTsKIAotI2lmZGVmIERCRwkvLyBTZW5kIG91dHB1dCB0byBkZWJ1Z2dlciwganVzdCByZXR1cm4gc28gYXMgbm90IHRvIGZvcmNlIGEgcmVib290Ci0jcHJhZ21hIG1lc3NhZ2UoIklORk86IGJ1aWxkaW5nIGZvciBkZWJ1ZywgUE1fZmF0YWxFcnJvcigpIHJlLXJvdXRlZCIpCQotCURCR01TRzIoIlNEREhFTFA+IFBNX2ZhdGFsRXJyb3IoKTogRVJST1I6ICVzXG4iLCBtc2cpOwkKKyNpZmRlZiBEQkcJLyogU2VuZCBvdXRwdXQgdG8gZGVidWdnZXIsIGp1c3QgcmV0dXJuIHNvIGFzIG5vdCB0byBmb3JjZSBhIHJlYm9vdCAqLworI3ByYWdtYSBtZXNzYWdlKCJJTkZPOiBidWlsZGluZyBmb3IgZGVidWcsIFBNX2ZhdGFsRXJyb3IoKSByZS1yb3V0ZWQiKQorCURCR01TRzIoIlNEREhFTFA+IFBNX2ZhdGFsRXJyb3IoKTogRVJST1I6ICVzXG4iLCBtc2cpOwogCXJldHVybiA7CiAjZW5kaWYKLSAgICAvLyBLZUJ1Z0NoZWNrRXggYnJpbmdzIGRvd24gdGhlIHN5c3RlbSBpbiBhIGNvbnRyb2xsZWQKLSAgICAvLyBtYW5uZXIgd2hlbiB0aGUgY2FsbGVyIGRpc2NvdmVycyBhbiB1bnJlY292ZXJhYmxlCi0gICAgLy8gaW5jb25zaXN0ZW5jeSB0aGF0IHdvdWxkIGNvcnJ1cHQgdGhlIHN5c3RlbSBpZgotICAgIC8vIHRoZSBjYWxsZXIgY29udGludWVkIHRvIHJ1bi4KLSAgICAvLwotICAgIC8vIGhhY2sgLSBkdW1wIHRoZSBmaXJzdCAyMCBjaGFycyBpbiBoZXggdXNpbmcgdGhlIHZhcmlhYmxlcwotICAgIC8vICAgICAgcHJvdmlkZWQgLSBFYWNoIFVMT05HIGlzIGVxdWFsIHRvIGZvdXIgY2hhcmFjdGVycy4uLgorICAgIC8qIEtlQnVnQ2hlY2tFeCBicmluZ3MgZG93biB0aGUgc3lzdGVtIGluIGEgY29udHJvbGxlZCAqLworICAgIC8qIG1hbm5lciB3aGVuIHRoZSBjYWxsZXIgZGlzY292ZXJzIGFuIHVucmVjb3ZlcmFibGUgKi8KKyAgICAvKiBpbmNvbnNpc3RlbmN5IHRoYXQgd291bGQgY29ycnVwdCB0aGUgc3lzdGVtIGlmICovCisgICAgLyogdGhlIGNhbGxlciBjb250aW51ZWQgdG8gcnVuLiAqLworICAgIC8qICovCisgICAgLyogaGFjayAtIGR1bXAgdGhlIGZpcnN0IDIwIGNoYXJzIGluIGhleCB1c2luZyB0aGUgdmFyaWFibGVzICovCisgICAgLyogICAgICBwcm92aWRlZCAtIEVhY2ggVUxPTkcgaXMgZXF1YWwgdG8gZm91ciBjaGFyYWN0ZXJzLi4uICovCiAgICAgZm9yKGxlbiA9IDA7IGxlbiA8IDIwOyBsZW4rKykKLSAgICAgICAgaWYgKG1zZ1tsZW5dID09IChjaGFyKTApCi0gICAgICAgICAgICBicmVhazsKKwlpZiAobXNnW2xlbl0gPT0gKGNoYXIpMCkKKwkgICAgYnJlYWs7CiAKLSAgICAvLyBUaGlzIGxvb2tzIGJhZCBidXQgaXQncyBxdWljayBhbmQgcmVsaWFibGUuLi4KKyAgICAvKiBUaGlzIGxvb2tzIGJhZCBidXQgaXQncyBxdWljayBhbmQgcmVsaWFibGUuLi4gKi8KICAgICBwID0gKGNoYXIgKikmQnVnQ2hlY2tDb2RlOwogICAgIGlmKGxlbiA+IDApIHBbM10gPSBtc2dbMF07CiAgICAgaWYobGVuID4gMSkgcFsyXSA9IG1zZ1sxXTsKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgIGlmKGxlbiA+IDE4KSBwWzFdID0gbXNnWzE4XTsKICAgICBpZihsZW4gPiAxOSkgcFswXSA9IG1zZ1sxOV07CiAKLSAgICAvLyBIYWx0IHRoZSBzeXN0ZW0hCisgICAgLyogSGFsdCB0aGUgc3lzdGVtISAqLwogICAgIEtlQnVnQ2hlY2tFeChCdWdDaGVja0NvZGUsIE1vcmVCdWdDaGVja0RhdGFbMF0sIE1vcmVCdWdDaGVja0RhdGFbMV0sIE1vcmVCdWdDaGVja0RhdGFbMl0sIE1vcmVCdWdDaGVja0RhdGFbM10pOwogfQogCkBAIC0yMDksNTAgKzIwOSw1MCBAQAogICAgIFNUUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nZGF0YTsKICAgICBVTklDT0RFX1NUUklORyAgICAgICAgICAgICAgICAgIHVuaWRhdGE7CiAKLSAgICAvLyBDb252ZXJ0IHN0cmluZ3MgdG8gVW5pQ29kZQorICAgIC8qIENvbnZlcnQgc3RyaW5ncyB0byBVbmlDb2RlICovCiAgICAgc3RhdHVzID0gZmFsc2U7CiAgICAgaWYgKCh1bmlLZXkgPSBfUE1fQ1N0cmluZ1RvVW5pY29kZVN0cmluZyhzektleSkpID09IE5VTEwpCi0gICAgICAgIGdvdG8gRXhpdDsKKwlnb3RvIEV4aXQ7CiAgICAgaWYgKCh1bmlWYWx1ZSA9IF9QTV9DU3RyaW5nVG9Vbmljb2RlU3RyaW5nKHN6VmFsdWUpKSA9PSBOVUxMKQotICAgICAgICBnb3RvIEV4aXQ7CisJZ290byBFeGl0OwogCi0gICAgLy8gT3BlbiB0aGUga2V5CisgICAgLyogT3BlbiB0aGUga2V5ICovCiAgICAgSW5pdGlhbGl6ZU9iamVjdEF0dHJpYnV0ZXMoICZrZXlBdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9CSl9DQVNFX0lOU0VOU0lUSVZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMICk7CisJCQkJdW5pS2V5LAorCQkJCU9CSl9DQVNFX0lOU0VOU0lUSVZFLAorCQkJCU5VTEwsCisJCQkJTlVMTCApOwogICAgIHJ2YWwgPSBad09wZW5LZXkoICZIYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MsCi0gICAgICAgICAgICAgICAgICAgICAgJmtleUF0dHJpYnV0ZXMgKTsKKwkJICAgICAgS0VZX0FMTF9BQ0NFU1MsCisJCSAgICAgICZrZXlBdHRyaWJ1dGVzICk7CiAgICAgaWYgKCFOVF9TVUNDRVNTKHJ2YWwpKQotICAgICAgICBnb3RvIEV4aXQ7CisJZ290byBFeGl0OwogCi0gICAgLy8gUXVlcnkgdGhlIHZhbHVlCisgICAgLyogUXVlcnkgdGhlIHZhbHVlICovCiAgICAgbGVuZ3RoID0gc2l6ZW9mIChLRVlfVkFMVUVfRlVMTF9JTkZPUk1BVElPTikKLSAgICAgICAgICAgKyBzaXplICogc2l6ZW9mKFdDSEFSKTsKKwkgICArIHNpemUgKiBzaXplb2YoV0NIQVIpOwogICAgIGlmICgoZnVsbEluZm8gPSBFeEFsbG9jYXRlUG9vbCAoUGFnZWRQb29sLCBsZW5ndGgpKSA9PSBOVUxMKQotICAgICAgICBnb3RvIEV4aXQ7CisJZ290byBFeGl0OwogICAgIFJ0bFplcm9NZW1vcnkoZnVsbEluZm8sIGxlbmd0aCk7CiAgICAgcnZhbCA9IFp3UXVlcnlWYWx1ZUtleSAoSGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaVZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleVZhbHVlRnVsbEluZm9ybWF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxJbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoKTsKKwkJCSAgICB1bmlWYWx1ZSwKKwkJCSAgICBLZXlWYWx1ZUZ1bGxJbmZvcm1hdGlvbiwKKwkJCSAgICBmdWxsSW5mbywKKwkJCSAgICBsZW5ndGgsCisJCQkgICAgJmxlbmd0aCk7CiAgICAgaWYgKE5UX1NVQ0NFU1MgKHJ2YWwpKSB7Ci0gICAgICAgIC8vIENyZWF0ZSB0aGUgVW5pQ29kZSBzdHJpbmcgc28gd2UgY2FuIGNvbnZlcnQgaXQKLSAgICAgICAgdW5pZGF0YS5CdWZmZXIgPSAoUFdDSEFSKSgoKFBDSEFSKWZ1bGxJbmZvKSArIGZ1bGxJbmZvLT5EYXRhT2Zmc2V0KTsKLSAgICAgICAgdW5pZGF0YS5MZW5ndGggPSAoVVNIT1JUKWZ1bGxJbmZvLT5EYXRhTGVuZ3RoOwotICAgICAgICB1bmlkYXRhLk1heGltdW1MZW5ndGggPSAoVVNIT1JUKWZ1bGxJbmZvLT5EYXRhTGVuZ3RoICsgc2l6ZW9mKFdDSEFSKTsKKwkvKiBDcmVhdGUgdGhlIFVuaUNvZGUgc3RyaW5nIHNvIHdlIGNhbiBjb252ZXJ0IGl0ICovCisJdW5pZGF0YS5CdWZmZXIgPSAoUFdDSEFSKSgoKFBDSEFSKWZ1bGxJbmZvKSArIGZ1bGxJbmZvLT5EYXRhT2Zmc2V0KTsKKwl1bmlkYXRhLkxlbmd0aCA9IChVU0hPUlQpZnVsbEluZm8tPkRhdGFMZW5ndGg7CisJdW5pZGF0YS5NYXhpbXVtTGVuZ3RoID0gKFVTSE9SVClmdWxsSW5mby0+RGF0YUxlbmd0aCArIHNpemVvZihXQ0hBUik7CiAKLSAgICAgICAgLy8gQ29udmVydCB1bmljb2RlIHVuaXZhbHVlIHRvIGFuc2kgc3RyaW5nLgotICAgICAgICBydmFsID0gUnRsVW5pY29kZVN0cmluZ1RvQW5zaVN0cmluZygmc3RyaW5nZGF0YSwgJnVuaWRhdGEsIFRSVUUpOwotICAgICAgICBpZiAoTlRfU1VDQ0VTUyhydmFsKSkgewotICAgICAgICAgICAgc3RyY3B5KHZhbHVlLHN0cmluZ2RhdGEuQnVmZmVyKTsKLSAgICAgICAgICAgIHN0YXR1cyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBDb252ZXJ0IHVuaWNvZGUgdW5pdmFsdWUgdG8gYW5zaSBzdHJpbmcuICovCisJcnZhbCA9IFJ0bFVuaWNvZGVTdHJpbmdUb0Fuc2lTdHJpbmcoJnN0cmluZ2RhdGEsICZ1bmlkYXRhLCBUUlVFKTsKKwlpZiAoTlRfU1VDQ0VTUyhydmFsKSkgeworCSAgICBzdHJjcHkodmFsdWUsc3RyaW5nZGF0YS5CdWZmZXIpOworCSAgICBzdGF0dXMgPSB0cnVlOworCSAgICB9CisJfQogCiBFeGl0OgogICAgIGlmIChmdWxsSW5mbykgRXhGcmVlUG9vbChmdWxsSW5mbyk7CkBAIC0yNjksNyArMjY5LDcgQEAKIHsKICAgICBjaGFyIHBhdGhbMjU2XTsKICAgICBpZiAoUkVHX3F1ZXJ5U3RyaW5nKHN6TlRXaW5kb3dzS2V5LHN6TlRTeXN0ZW1Sb290LHBhdGgsc2l6ZW9mKHBhdGgpKSkKLSAgICAgICAgcmV0dXJuICdjJzsKKwlyZXR1cm4gJ2MnOwogICAgIHJldHVybiBwYXRoWzBdOwogfQogCkBAIC0yOTEsMTIgKzI5MSwxMiBAQAogICAgIHN0YXRpYyBjaGFyIHBhdGhbMjU2XTsKIAogICAgIGlmIChzdHJsZW4oX1BNX251Y2xldXNQYXRoKSA+IDApIHsKLSAgICAgICAgc3RyY3B5KHBhdGgsX1BNX251Y2xldXNQYXRoKTsKLSAgICAgICAgUE1fYmFja3NsYXNoKHBhdGgpOwotICAgICAgICByZXR1cm4gcGF0aDsKLSAgICAgICAgfQorCXN0cmNweShwYXRoLF9QTV9udWNsZXVzUGF0aCk7CisJUE1fYmFja3NsYXNoKHBhdGgpOworCXJldHVybiBwYXRoOworCX0KICAgICBpZiAoIVJFR19xdWVyeVN0cmluZyhzek5UV2luZG93c0tleSxzek5UU3lzdGVtUm9vdCxwYXRoLHNpemVvZihwYXRoKSkpCi0gICAgICAgIHN0cmNweShwYXRoLCJjOlxcd2lubnQiKTsKKwlzdHJjcHkocGF0aCwiYzpcXHdpbm50Iik7CiAgICAgUE1fYmFja3NsYXNoKHBhdGgpOwogICAgIHN0cmNhdChwYXRoLCJzeXN0ZW0zMlxcbnVjbGV1cyIpOwogICAgIHJldHVybiBwYXRoOwpAQCAtMzMzLDkgKzMzMyw5IEBACiAgICAgc3RhdGljIGNoYXIgbmFtZVsyNTZdOwogCiAgICAgaWYgKFJFR19xdWVyeVN0cmluZyhzek1hY2hpbmVOYW1lS2V5LHN6TWFjaGluZU5hbWUsbmFtZSxzaXplb2YobmFtZSkpKQotICAgICAgICByZXR1cm4gbmFtZTsKKwlyZXR1cm4gbmFtZTsKICAgICBpZiAoUkVHX3F1ZXJ5U3RyaW5nKHN6TWFjaGluZU5hbWVLZXlOVCxzek1hY2hpbmVOYW1lLG5hbWUsc2l6ZW9mKG5hbWUpKSkKLSAgICAgICAgcmV0dXJuIG5hbWU7CisJcmV0dXJuIG5hbWU7CiAgICAgcmV0dXJuICJVbmtub3duIjsKIH0KIApAQCAtMzQ1LDcgKzM0NSw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IFBNQVBJIFBNX2tiaGl0KHZvaWQpCiB7Ci0gICAgLy8gTm90IHVzZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMgKi8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzU1LDcgKzM1NSw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IFBNQVBJIFBNX2dldGNoKHZvaWQpCiB7Ci0gICAgLy8gTm90IHVzZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMgKi8KICAgICByZXR1cm4gMHhEOwogfQogCkBAIC0zNzIsNyArMzcyLDcgQEAKICAgICBpbnQgYnBwLAogICAgIGlib29sIGZ1bGxTY3JlZW4pCiB7Ci0gICAgLy8gTm90IHVzZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMgKi8KICAgICAodm9pZClod25kVXNlcjsKICAgICAodm9pZClkZXZpY2U7CiAgICAgKHZvaWQpeFJlczsKQEAgLTM4OCw3ICszODgsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBQTUFQSSBQTV9nZXRDb25zb2xlU3RhdGVTaXplKHZvaWQpCiB7Ci0gICAgLy8gTm90IHVzZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMgKi8KICAgICByZXR1cm4gMTsKIH0KIApAQCAtNDAwLDcgKzQwMCw3IEBACiAgICAgdm9pZCAqc3RhdGVCdWYsCiAgICAgUE1fSFdORCBod25kQ29uc29sZSkKIHsKLSAgICAvLyBOb3QgdXNlZCBpbiBOVCBkcml2ZXJzCisgICAgLyogTm90IHVzZWQgaW4gTlQgZHJpdmVycyAqLwogICAgICh2b2lkKXN0YXRlQnVmOwogICAgICh2b2lkKWh3bmRDb25zb2xlOwogfQpAQCAtNDEyLDcgKzQxMiw3IEBACiB2b2lkIFBNQVBJIFBNX3NldFN1c3BlbmRBcHBDYWxsYmFjaygKICAgICBQTV9zYXZlU3RhdGVfY2Igc2F2ZVN0YXRlKQogewotICAgIC8vIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMKKyAgICAvKiBOb3QgdXNlZCBpbiBOVCBkcml2ZXJzICovCiAgICAgKHZvaWQpc2F2ZVN0YXRlOwogfQogCkBAIC00MjQsNyArNDI0LDcgQEAKICAgICBjb25zdCB2b2lkICpzdGF0ZUJ1ZiwKICAgICBQTV9IV05EIGh3bmRDb25zb2xlKQogewotICAgIC8vIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMKKyAgICAvKiBOb3QgdXNlZCBpbiBOVCBkcml2ZXJzICovCiAgICAgKHZvaWQpc3RhdGVCdWY7CiAgICAgKHZvaWQpaHduZENvbnNvbGU7CiB9CkBAIC00MzYsNyArNDM2LDcgQEAKIHZvaWQgUE1BUEkgUE1fY2xvc2VDb25zb2xlKAogICAgIFBNX0hXTkQgaHduZENvbnNvbGUpCiB7Ci0gICAgLy8gTm90IHVzZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMgKi8KICAgICAodm9pZClod25kQ29uc29sZTsKIH0KIApAQCAtNDc1LDcgKzQ3NSw3IEBACiAgICAgdm9pZCAqYmFzZSwKICAgICB1bG9uZyBsaW1pdCkKIHsKLSAgICAvLyBOb3QgdXNlZCBhbnltb3JlCisgICAgLyogTm90IHVzZWQgYW55bW9yZSAqLwogICAgICh2b2lkKWJhc2U7CiAgICAgKHZvaWQpbGltaXQ7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC00OTEsNyArNDkxLDcgQEAKICAgICB2b2lkICptYXBwZWRCSU9TLAogICAgIHVsb25nIEJJT1NMZW4pCiB7Ci0gICAgLy8gVGhpcyBtYXkgbm90IGJlIHBvc3NpYmxlIGluIE5UIGFuZCBzaG91bGQgYmUgZG9uZSBieSB0aGUgT1MgYW55d2F5CisgICAgLyogVGhpcyBtYXkgbm90IGJlIHBvc3NpYmxlIGluIE5UIGFuZCBzaG91bGQgYmUgZG9uZSBieSB0aGUgT1MgYW55d2F5ICovCiAgICAgKHZvaWQpYXhWYWw7CiAgICAgKHZvaWQpQklPU1BoeXNBZGRyOwogICAgICh2b2lkKW1hcHBlZEJJT1M7CkBAIC01MDUsNyArNTA1LDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkICogUE1BUEkgUE1fZ2V0QklPU1BvaW50ZXIodm9pZCkKIHsKLSAgICAvLyBOb3RlIHRoYXQgb24gTlQgdGhpcyBwcm9iYWJseSBkb2VzIG5vdCBkbyB3aGF0IHdlIGV4cGVjdCEKKyAgICAvKiBOb3RlIHRoYXQgb24gTlQgdGhpcyBwcm9iYWJseSBkb2VzIG5vdCBkbyB3aGF0IHdlIGV4cGVjdCEgKi8KICAgICByZXR1cm4gUE1fbWFwUGh5c2ljYWxBZGRyKDB4NDAwLCAweDEwMDAsIHRydWUpOwogfQogCkBAIC01MjUsNyArNTI1LDcgQEAKIHZvaWQgUE1BUEkgUE1fc2xlZXAoCiAgICAgdWxvbmcgbWlsbGlzZWNvbmRzKQogewotICAgIC8vIFdlIG5ldmVyIHVzZSB0aGlzIGluIE5UIGRyaXZlcnMKKyAgICAvKiBXZSBuZXZlciB1c2UgdGhpcyBpbiBOVCBkcml2ZXJzICovCiAgICAgKHZvaWQpbWlsbGlzZWNvbmRzOwogfQogCkBAIC01MzUsMTQgKzUzNSwxNCBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBQTUFQSSBQTV9nZXRDT01Qb3J0KGludCBwb3J0KQogewotICAgIC8vIFRPRE86IFJlLWNvZGUgdGhpcyB0byBkZXRlcm1pbmUgcmVhbCB2YWx1ZXMgdXNpbmcgdGhlIFBsdWcgYW5kIFBsYXkKLSAgICAvLyAgICAgICBtYW5hZ2VyIGZvciB0aGUgT1MuCisgICAgLyogVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheSAqLworICAgIC8qICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4gKi8KICAgICBzd2l0Y2ggKHBvcnQpIHsKLSAgICAgICAgY2FzZSAwOiByZXR1cm4gMHgzRjg7Ci0gICAgICAgIGNhc2UgMTogcmV0dXJuIDB4MkY4OwotICAgICAgICBjYXNlIDI6IHJldHVybiAweDNFODsKLSAgICAgICAgY2FzZSAzOiByZXR1cm4gMHgyRTg7Ci0gICAgICAgIH0KKwljYXNlIDA6IHJldHVybiAweDNGODsKKwljYXNlIDE6IHJldHVybiAweDJGODsKKwljYXNlIDI6IHJldHVybiAweDNFODsKKwljYXNlIDM6IHJldHVybiAweDJFODsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU1MiwxMyArNTUyLDEzIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IFBNQVBJIFBNX2dldExQVFBvcnQoaW50IHBvcnQpCiB7Ci0gICAgLy8gVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheQotICAgIC8vICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4KKyAgICAvKiBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5ICovCisgICAgLyogICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLiAqLwogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNCQzsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgzNzg7Ci0gICAgICAgIGNhc2UgMjogcmV0dXJuIDB4Mjc4OwotICAgICAgICB9CisJY2FzZSAwOiByZXR1cm4gMHgzQkM7CisJY2FzZSAxOiByZXR1cm4gMHgzNzg7CisJY2FzZSAyOiByZXR1cm4gMHgyNzg7CisJfQogICAgIHJldHVybiAwOwogfQogCkBAIC01ODAsNyArNTgwLDcgQEAKIFBNX01PRFVMRSBQTUFQSSBQTV9sb2FkTGlicmFyeSgKICAgICBjb25zdCBjaGFyICpzekRMTE5hbWUpCiB7Ci0gICAgLy8gTm90IHVzZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMgKi8KICAgICAodm9pZClzekRMTE5hbWU7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC01OTMsNyArNTkzLDcgQEAKICAgICBQTV9NT0RVTEUgaE1vZHVsZSwKICAgICBjb25zdCBjaGFyICpzelByb2NOYW1lKQogewotICAgIC8vIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMKKyAgICAvKiBOb3QgdXNlZCBpbiBOVCBkcml2ZXJzICovCiAgICAgKHZvaWQpaE1vZHVsZTsKICAgICAodm9pZClzelByb2NOYW1lOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjA2LDcgKzYwNiw3IEBACiB2b2lkIFBNQVBJIFBNX2ZyZWVMaWJyYXJ5KAogICAgIFBNX01PRFVMRSBoTW9kdWxlKQogewotICAgIC8vIE5vdCB1c2VkIGluIE5UIGRyaXZlcnMKKyAgICAvKiBOb3QgdXNlZCBpbiBOVCBkcml2ZXJzICovCiAgICAgKHZvaWQpaE1vZHVsZTsKIH0KIApAQCAtNjE4LDkgKzYxOCw5IEBACiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgUE1fZmluZERhdGEgKmZpbmREYXRhKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHN0YXJ0IGEgZGlyZWN0b3J5IGVudW1lcmF0aW9uIHNlYXJjaAotICAgIC8vICAgICAgIGdpdmVuIHRoZSBmaWxlbmFtZSAod2l0aCB3aWxkY2FyZHMpLiBUaGUgZGF0YSBzaG91bGQgYmUKLSAgICAvLyAgICAgICBjb252ZXJ0ZWQgYW5kIHJldHVybmVkIGluIHRoZSBmaW5kRGF0YSBzdGFuZGFyZCBmb3JtLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHN0YXJ0IGEgZGlyZWN0b3J5IGVudW1lcmF0aW9uIHNlYXJjaCAqLworICAgIC8qICAgICAgIGdpdmVuIHRoZSBmaWxlbmFtZSAod2l0aCB3aWxkY2FyZHMpLiBUaGUgZGF0YSBzaG91bGQgYmUgKi8KKyAgICAvKiAgICAgICBjb252ZXJ0ZWQgYW5kIHJldHVybmVkIGluIHRoZSBmaW5kRGF0YSBzdGFuZGFyZCBmb3JtLiAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgICh2b2lkKWZpbmREYXRhOwogICAgIHJldHVybiBQTV9GSUxFX0lOVkFMSUQ7CkBAIC02MzQsMTAgKzYzNCwxMCBAQAogICAgIHZvaWQgKmhhbmRsZSwKICAgICBQTV9maW5kRGF0YSAqZmluZERhdGEpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgZmluZCB0aGUgbmV4dCBmaWxlIGluIGRpcmVjdG9yeSBlbnVtZXJhdGlvbgotICAgIC8vICAgICAgIHNlYXJjaCBnaXZlbiB0aGUgc2VhcmNoIGNyaXRlcmlhIGRlZmluZWQgaW4gdGhlIGNhbGwgdG8KLSAgICAvLyAgICAgICBQTV9maW5kRmlyc3RGaWxlLiBUaGUgZGF0YSBzaG91bGQgYmUgY29udmVydGVkIGFuZCByZXR1cm5lZAotICAgIC8vICAgICAgIGluIHRoZSBmaW5kRGF0YSBzdGFuZGFyZCBmb3JtLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpbmQgdGhlIG5leHQgZmlsZSBpbiBkaXJlY3RvcnkgZW51bWVyYXRpb24gKi8KKyAgICAvKiAgICAgICBzZWFyY2ggZ2l2ZW4gdGhlIHNlYXJjaCBjcml0ZXJpYSBkZWZpbmVkIGluIHRoZSBjYWxsIHRvICovCisgICAgLyogICAgICAgUE1fZmluZEZpcnN0RmlsZS4gVGhlIGRhdGEgc2hvdWxkIGJlIGNvbnZlcnRlZCBhbmQgcmV0dXJuZWQgKi8KKyAgICAvKiAgICAgICBpbiB0aGUgZmluZERhdGEgc3RhbmRhcmQgZm9ybS4gKi8KICAgICAodm9pZCloYW5kbGU7CiAgICAgKHZvaWQpZmluZERhdGE7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjUwLDggKzY1MCw4IEBACiB2b2lkIFBNQVBJIFBNX2ZpbmRDbG9zZSgKICAgICB2b2lkICpoYW5kbGUpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgY2xvc2UgdGhlIGZpbmQgcHJvY2Vzcy4gVGhpcyBtYXkgZG8KLSAgICAvLyAgICAgICBub3RoaW5nIGZvciBzb21lIE9TJ2VzLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNsb3NlIHRoZSBmaW5kIHByb2Nlc3MuIFRoaXMgbWF5IGRvICovCisgICAgLyogICAgICAgbm90aGluZyBmb3Igc29tZSBPUydlcy4gKi8KICAgICAodm9pZCloYW5kbGU7CiB9CiAKQEAgLTY3MSw3ICs2NzEsNyBAQAogaWJvb2wgUE1BUEkgUE1fZHJpdmVWYWxpZCgKICAgICBjaGFyIGRyaXZlKQogewotICAgIC8vIE5vdCBzdXBwb3J0ZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCBzdXBwb3J0ZWQgaW4gTlQgZHJpdmVycyAqLwogICAgICh2b2lkKWRyaXZlOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTY4Nyw3ICs2ODcsNyBAQAogICAgIGNoYXIgKmRpciwKICAgICBpbnQgbGVuKQogewotICAgIC8vIE5vdCBzdXBwb3J0ZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCBzdXBwb3J0ZWQgaW4gTlQgZHJpdmVycyAqLwogICAgICh2b2lkKWRyaXZlOwogICAgICh2b2lkKWRpcjsKICAgICAodm9pZClsZW47CkBAIC03MzMsNjcgKzczMyw2NyBAQAogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIGtlcm5lbEZpbGVuYW1lW1BNX01BWF9QQVRIKzVdOwogICAgIFVMT05HICAgICAgICAgICAgICAgICAgIEZpbGVBdHRyaWJ1dGVzID0gMDsKIAotICAgIC8vIENvbnZlcnQgZmlsZSBhdHRyaWJ1dGUgZmxhZ3MKKyAgICAvKiBDb252ZXJ0IGZpbGUgYXR0cmlidXRlIGZsYWdzICovCiAgICAgaWYgKGF0dHJpYiAmIFBNX0ZJTEVfUkVBRE9OTFkpCi0gICAgICAgIEZpbGVBdHRyaWJ1dGVzIHw9IEZJTEVfQVRUUklCVVRFX1JFQURPTkxZOworCUZpbGVBdHRyaWJ1dGVzIHw9IEZJTEVfQVRUUklCVVRFX1JFQURPTkxZOwogICAgIGlmIChhdHRyaWIgJiBQTV9GSUxFX0FSQ0hJVkUpCi0gICAgICAgIEZpbGVBdHRyaWJ1dGVzIHw9IEZJTEVfQVRUUklCVVRFX0FSQ0hJVkU7CisJRmlsZUF0dHJpYnV0ZXMgfD0gRklMRV9BVFRSSUJVVEVfQVJDSElWRTsKICAgICBpZiAoYXR0cmliICYgUE1fRklMRV9ISURERU4pCi0gICAgICAgIEZpbGVBdHRyaWJ1dGVzIHw9IEZJTEVfQVRUUklCVVRFX0hJRERFTjsKKwlGaWxlQXR0cmlidXRlcyB8PSBGSUxFX0FUVFJJQlVURV9ISURERU47CiAgICAgaWYgKGF0dHJpYiAmIFBNX0ZJTEVfU1lTVEVNKQotICAgICAgICBGaWxlQXR0cmlidXRlcyB8PSBGSUxFX0FUVFJJQlVURV9TWVNURU07CisJRmlsZUF0dHJpYnV0ZXMgfD0gRklMRV9BVFRSSUJVVEVfU1lTVEVNOwogCi0gICAgLy8gQWRkIHByZWZpeCBmb3IgYWRkcmVzc2luZyB0aGUgZmlsZSBzeXN0ZW0uICJcPz9cIiBpcyBzaG9ydCBmb3IgIlxEb3NEZXZpY2VzXCIKKyAgICAvKiBBZGQgcHJlZml4IGZvciBhZGRyZXNzaW5nIHRoZSBmaWxlIHN5c3RlbS4gIlw/P1wiIGlzIHNob3J0IGZvciAiXERvc0RldmljZXNcIiAqLwogICAgIHN0cmNweShrZXJuZWxGaWxlbmFtZSwgIlxcPz9cXCIpOwogICAgIHN0cmNhdChrZXJuZWxGaWxlbmFtZSwgZmlsZW5hbWUpOwogCi0gICAgLy8gQ29udmVydCBmaWxlbmFtZSBzdHJpbmcgdG8gYW5zaSBzdHJpbmcKKyAgICAvKiBDb252ZXJ0IGZpbGVuYW1lIHN0cmluZyB0byBhbnNpIHN0cmluZyAqLwogICAgIGlmICgodW5pRmlsZSA9IF9QTV9DU3RyaW5nVG9Vbmljb2RlU3RyaW5nKGtlcm5lbEZpbGVuYW1lKSkgPT0gTlVMTCkKLSAgICAgICAgZ290byBFeGl0OworCWdvdG8gRXhpdDsKIAotICAgIC8vIE11c3Qgb3BlbiBhIGZpbGUgdG8gcXVlcnkgaXQncyBhdHRyaWJ1dGVzCisgICAgLyogTXVzdCBvcGVuIGEgZmlsZSB0byBxdWVyeSBpdCdzIGF0dHJpYnV0ZXMgKi8KICAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcyAoJk9iamVjdEF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaUZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9CSl9DQVNFX0lOU0VOU0lUSVZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMICk7CisJCQkJdW5pRmlsZSwKKwkJCQlPQkpfQ0FTRV9JTlNFTlNJVElWRSwKKwkJCQlOVUxMLAorCQkJCU5VTEwgKTsKICAgICBzdGF0dXMgPSBad0NyZWF0ZUZpbGUoICZGaWxlSGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2lyZWRBY2Nlc3MgfCBTWU5DSFJPTklaRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmT2JqZWN0QXR0cmlidXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW9TdGF0dXNCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8vQWxsb2NhdGlvblNpemUgIE9QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfQVRUUklCVVRFX05PUk1BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZUFjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVEaXNwb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX1JBTkRPTV9BQ0NFU1MsICAgICAgICAvL0NyZWF0ZU9wdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAvL0VhQnVmZmVyICBPUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgIC8vRWFMZW5ndGggKHJlcXVpcmVkIGlmIEVhQnVmZmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisJCQkgICAgRGVzaXJlZEFjY2VzcyB8IFNZTkNIUk9OSVpFLAorCQkJICAgICZPYmplY3RBdHRyaWJ1dGVzLAorCQkJICAgICZJb1N0YXR1c0Jsb2NrLAorCQkJICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLypBbGxvY2F0aW9uU2l6ZSAgT1BUSU9OQUwsICovCisJCQkgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMLAorCQkJICAgIFNoYXJlQWNjZXNzLAorCQkJICAgIENyZWF0ZURpc3Bvc2l0aW9uLAorCQkJICAgIEZJTEVfUkFORE9NX0FDQ0VTUywgICAgICAgIC8qQ3JlYXRlT3B0aW9ucywgKi8KKwkJCSAgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8qRWFCdWZmZXIgIE9QVElPTkFMLCAqLworCQkJICAgIDAgICAgICAgICAgICAgICAgICAgICAgLypFYUxlbmd0aCAocmVxdWlyZWQgaWYgRWFCdWZmZXIpICovCisJCQkgICAgKTsKICAgICBpZiAoIU5UX1NVQ0NFU1MgKHN0YXR1cykpCi0gICAgICAgIGdvdG8gRXhpdDsKKwlnb3RvIEV4aXQ7CiAKLSAgICAvLyBRdWVyeSB0aW1lc3RhbXBzCisgICAgLyogUXVlcnkgdGltZXN0YW1wcyAqLwogICAgIHN0YXR1cyA9IFp3UXVlcnlJbmZvcm1hdGlvbkZpbGUoRmlsZUhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJb1N0YXR1c0Jsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGVCYXNpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihGSUxFX0JBU0lDX0lORk9STUFUSU9OKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVCYXNpY0luZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCQkJCSAgICAmSW9TdGF0dXNCbG9jaywKKwkJCQkgICAgJkZpbGVCYXNpYywKKwkJCQkgICAgc2l6ZW9mKEZJTEVfQkFTSUNfSU5GT1JNQVRJT04pLAorCQkJCSAgICBGaWxlQmFzaWNJbmZvcm1hdGlvbgorCQkJCSAgICApOwogICAgIGlmICghTlRfU1VDQ0VTUyAoc3RhdHVzKSkKLSAgICAgICAgZ290byBFeGl0OworCWdvdG8gRXhpdDsKIAotICAgIC8vIENoYW5nZSB0aGUgZm91ciBiaXRzIHdlIGNoYW5nZQorICAgIC8qIENoYW5nZSB0aGUgZm91ciBiaXRzIHdlIGNoYW5nZSAqLwogICAgIEZpbGVCYXNpYy5GaWxlQXR0cmlidXRlcyAmPSB+KEZJTEVfQVRUUklCVVRFX1JFQURPTkxZIHwgRklMRV9BVFRSSUJVVEVfQVJDSElWRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRklMRV9BVFRSSUJVVEVfSElEREVOIHwgRklMRV9BVFRSSUJVVEVfU1lTVEVNKTsKKwkJCQkgIHwgRklMRV9BVFRSSUJVVEVfSElEREVOIHwgRklMRV9BVFRSSUJVVEVfU1lTVEVNKTsKICAgICBGaWxlQmFzaWMuRmlsZUF0dHJpYnV0ZXMgfD0gRmlsZUF0dHJpYnV0ZXM7CiAKLSAgICAvLyBTZXQgdGltZXN0YW1wcworICAgIC8qIFNldCB0aW1lc3RhbXBzICovCiAgICAgWndTZXRJbmZvcm1hdGlvbkZpbGUoICAgRmlsZUhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW9TdGF0dXNCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRmlsZUJhc2ljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihGSUxFX0JBU0lDX0lORk9STUFUSU9OKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlQmFzaWNJbmZvcm1hdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisJCQkgICAgJklvU3RhdHVzQmxvY2ssCisJCQkgICAgJkZpbGVCYXNpYywKKwkJCSAgICBzaXplb2YoRklMRV9CQVNJQ19JTkZPUk1BVElPTiksCisJCQkgICAgRmlsZUJhc2ljSW5mb3JtYXRpb24KKwkJCSAgICApOwogCiBFeGl0OgogICAgIGlmIChGaWxlSGFuZGxlKSBad0Nsb3NlKEZpbGVIYW5kbGUpOwpAQCAtODIxLDU0ICs4MjEsNTQgQEAKICAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBGaWxlQXR0cmlidXRlcyA9IDA7CiAgICAgdWludCAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gMDsKIAotICAgIC8vIEFkZCBwcmVmaXggZm9yIGFkZHJlc3NpbmcgdGhlIGZpbGUgc3lzdGVtLiAiXD8/XCIgaXMgc2hvcnQgZm9yICJcRG9zRGV2aWNlc1wiCisgICAgLyogQWRkIHByZWZpeCBmb3IgYWRkcmVzc2luZyB0aGUgZmlsZSBzeXN0ZW0uICJcPz9cIiBpcyBzaG9ydCBmb3IgIlxEb3NEZXZpY2VzXCIgKi8KICAgICBzdHJjcHkoa2VybmVsRmlsZW5hbWUsICJcXD8/XFwiKTsKICAgICBzdHJjYXQoa2VybmVsRmlsZW5hbWUsIGZpbGVuYW1lKTsKIAotICAgIC8vIENvbnZlcnQgZmlsZW5hbWUgc3RyaW5nIHRvIGFuc2kgc3RyaW5nCisgICAgLyogQ29udmVydCBmaWxlbmFtZSBzdHJpbmcgdG8gYW5zaSBzdHJpbmcgKi8KICAgICBpZiAoKHVuaUZpbGUgPSBfUE1fQ1N0cmluZ1RvVW5pY29kZVN0cmluZyhrZXJuZWxGaWxlbmFtZSkpID09IE5VTEwpCi0gICAgICAgIGdvdG8gRXhpdDsKKwlnb3RvIEV4aXQ7CiAKLSAgICAvLyBNdXN0IG9wZW4gYSBmaWxlIHRvIHF1ZXJ5IGl0J3MgYXR0cmlidXRlcworICAgIC8qIE11c3Qgb3BlbiBhIGZpbGUgdG8gcXVlcnkgaXQncyBhdHRyaWJ1dGVzICovCiAgICAgSW5pdGlhbGl6ZU9iamVjdEF0dHJpYnV0ZXMgKCZPYmplY3RBdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQkpfQ0FTRV9JTlNFTlNJVElWRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCApOworCQkJCXVuaUZpbGUsCisJCQkJT0JKX0NBU0VfSU5TRU5TSVRJVkUsCisJCQkJTlVMTCwKKwkJCQlOVUxMICk7CiAgICAgc3RhdHVzID0gWndDcmVhdGVGaWxlKCAmRmlsZUhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2lyZWRBY2Nlc3MgfCBTWU5DSFJPTklaRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZPYmplY3RBdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJklvU3RhdHVzQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8vQWxsb2NhdGlvblNpemUgIE9QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhcmVBY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVEaXNwb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfUkFORE9NX0FDQ0VTUywgICAgICAgIC8vQ3JlYXRlT3B0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLy9FYUJ1ZmZlciAgT1BUSU9OQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgIC8vRWFMZW5ndGggKHJlcXVpcmVkIGlmIEVhQnVmZmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwkJCSAgIERlc2lyZWRBY2Nlc3MgfCBTWU5DSFJPTklaRSwKKwkJCSAgICZPYmplY3RBdHRyaWJ1dGVzLAorCQkJICAgJklvU3RhdHVzQmxvY2ssCisJCQkgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8qQWxsb2NhdGlvblNpemUgIE9QVElPTkFMLCAqLworCQkJICAgRklMRV9BVFRSSUJVVEVfTk9STUFMLAorCQkJICAgU2hhcmVBY2Nlc3MsCisJCQkgICBDcmVhdGVEaXNwb3NpdGlvbiwKKwkJCSAgIEZJTEVfUkFORE9NX0FDQ0VTUywgICAgICAgIC8qQ3JlYXRlT3B0aW9ucywgKi8KKwkJCSAgIE5VTEwsICAgICAgICAgICAgICAgICAgLypFYUJ1ZmZlciAgT1BUSU9OQUwsICovCisJCQkgICAwICAgICAgICAgICAgICAgICAgICAgIC8qRWFMZW5ndGggKHJlcXVpcmVkIGlmIEVhQnVmZmVyKSAqLworCQkJICAgKTsKICAgICBpZiAoIU5UX1NVQ0NFU1MgKHN0YXR1cykpCi0gICAgICAgIGdvdG8gRXhpdDsKKwlnb3RvIEV4aXQ7CiAKLSAgICAvLyBRdWVyeSB0aW1lc3RhbXBzCisgICAgLyogUXVlcnkgdGltZXN0YW1wcyAqLwogICAgIHN0YXR1cyA9IFp3UXVlcnlJbmZvcm1hdGlvbkZpbGUoRmlsZUhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJb1N0YXR1c0Jsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGVCYXNpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihGSUxFX0JBU0lDX0lORk9STUFUSU9OKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVCYXNpY0luZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCQkJCSAgICAmSW9TdGF0dXNCbG9jaywKKwkJCQkgICAgJkZpbGVCYXNpYywKKwkJCQkgICAgc2l6ZW9mKEZJTEVfQkFTSUNfSU5GT1JNQVRJT04pLAorCQkJCSAgICBGaWxlQmFzaWNJbmZvcm1hdGlvbgorCQkJCSAgICApOwogICAgIGlmICghTlRfU1VDQ0VTUyAoc3RhdHVzKSkKLSAgICAgICAgZ290byBFeGl0OworCWdvdG8gRXhpdDsKIAotICAgIC8vIFRyYW5zbGF0ZSB0aGUgZmlsZSBhdHRyaWJ1dGVzCisgICAgLyogVHJhbnNsYXRlIHRoZSBmaWxlIGF0dHJpYnV0ZXMgKi8KICAgICBpZiAoRmlsZUJhc2ljLkZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpCi0gICAgICAgIHJldHZhbCB8PSBQTV9GSUxFX1JFQURPTkxZOworCXJldHZhbCB8PSBQTV9GSUxFX1JFQURPTkxZOwogICAgIGlmIChGaWxlQmFzaWMuRmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9BUkNISVZFKQotICAgICAgICByZXR2YWwgfD0gUE1fRklMRV9BUkNISVZFOworCXJldHZhbCB8PSBQTV9GSUxFX0FSQ0hJVkU7CiAgICAgaWYgKEZpbGVCYXNpYy5GaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0hJRERFTikKLSAgICAgICAgcmV0dmFsIHw9IFBNX0ZJTEVfSElEREVOOworCXJldHZhbCB8PSBQTV9GSUxFX0hJRERFTjsKICAgICBpZiAoRmlsZUJhc2ljLkZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfU1lTVEVNKQotICAgICAgICByZXR2YWwgfD0gUE1fRklMRV9TWVNURU07CisJcmV0dmFsIHw9IFBNX0ZJTEVfU1lTVEVNOwogCiBFeGl0OgogICAgIGlmIChGaWxlSGFuZGxlKSBad0Nsb3NlKEZpbGVIYW5kbGUpOwpAQCAtODgzLDcgKzg4Myw3IEBACiBpYm9vbCBQTUFQSSBQTV9ta2RpcigKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKLSAgICAvLyBOb3Qgc3VwcG9ydGVkIGluIE5UIGRyaXZlcnMKKyAgICAvKiBOb3Qgc3VwcG9ydGVkIGluIE5UIGRyaXZlcnMgKi8KICAgICAodm9pZClmaWxlbmFtZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC04OTUsNyArODk1LDcgQEAKIGlib29sIFBNQVBJIFBNX3JtZGlyKAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotICAgIC8vIE5vdCBzdXBwb3J0ZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCBzdXBwb3J0ZWQgaW4gTlQgZHJpdmVycyAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTkwOSw3ICs5MDksNyBAQAogICAgIGlib29sIGdtVGltZSwKICAgICBQTV90aW1lICp0aW1lKQogewotICAgIC8vIE5vdCBzdXBwb3J0ZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCBzdXBwb3J0ZWQgaW4gTlQgZHJpdmVycyAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgICh2b2lkKWdtVGltZTsKICAgICAodm9pZCl0aW1lOwpAQCAtOTI1LDEwICs5MjUsOSBAQAogICAgIGlib29sIGdtVGltZSwKICAgICBQTV90aW1lICp0aW1lKQogewotICAgIC8vIE5vdCBzdXBwb3J0ZWQgaW4gTlQgZHJpdmVycworICAgIC8qIE5vdCBzdXBwb3J0ZWQgaW4gTlQgZHJpdmVycyAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgICh2b2lkKWdtVGltZTsKICAgICAodm9pZCl0aW1lOwogICAgIHJldHVybiBmYWxzZTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvc3RkaW8uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L3N0ZGlvLmMKaW5kZXggODU2MjE1Mi4uNjU4ZjFjOCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvc3RkaW8uYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9udGRydi9zdGRpby5jCkBAIC00Miw3ICs0Miw3IEBACiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgY29uc3QgY2hhciAqbW9kZSkKIHsKLSAgICBBQ0NFU1NfTUFTSyAgICAgICAgICAgICAgICAgRGVzaXJlZEFjY2VzczsgICAgICAvLyBmb3IgWndDcmVhdGVGaWxlLi4uCisgICAgQUNDRVNTX01BU0sgICAgICAgICAgICAgICAgIERlc2lyZWRBY2Nlc3M7ICAgICAgLyogZm9yIFp3Q3JlYXRlRmlsZS4uLiAqLwogICAgIE9CSkVDVF9BVFRSSUJVVEVTICAgICAgICAgICBPYmplY3RBdHRyaWJ1dGVzOwogICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBTaGFyZUFjY2VzczsKICAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlRGlzcG9zaXRpb247CkBAIC01Niw4NiArNTYsODYgQEAKICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsRmlsZW5hbWVbUE1fTUFYX1BBVEgrNV07CiAgICAgRklMRSAgICAgICAgICAgICAgICAgICAgICAgICpmOwogCi0gICAgLy8gQWRkIHByZWZpeCBmb3IgYWRkcmVzc2luZyB0aGUgZmlsZSBzeXN0ZW0uICJcPz9cIiBpcyBzaG9ydCBmb3IgIlxEb3NEZXZpY2VzXCIKKyAgICAvKiBBZGQgcHJlZml4IGZvciBhZGRyZXNzaW5nIHRoZSBmaWxlIHN5c3RlbS4gIlw/P1wiIGlzIHNob3J0IGZvciAiXERvc0RldmljZXNcIiAqLwogICAgIHN0cmNweShrZXJuZWxGaWxlbmFtZSwgIlxcPz9cXCIpOwogICAgIHN0cmNhdChrZXJuZWxGaWxlbmFtZSwgZmlsZW5hbWUpOwogICAgIGlmICgoZiA9IFBNX21hbGxvYyhzaXplb2YoRklMRSkpKSA9PSBOVUxMKQotICAgICAgICBnb3RvIEVycm9yOworCWdvdG8gRXJyb3I7CiAgICAgZi0+b2Zmc2V0ID0gMDsKICAgICBmLT50ZXh0ID0gKG1vZGVbMV0gPT0gJ3QnIHx8IG1vZGVbMl0gPT0gJ3QnKTsKICAgICBmLT53cml0ZW1vZGUgPSAobW9kZVswXSA9PSAndycpIHx8IChtb2RlWzBdID09ICdhJyk7CiAgICAgaWYgKG1vZGVbMF0gPT0gJ3InKSB7Ci0gICAgICAgIC8vIG9tb2RlID0gT1BFTl9BQ0NFU1NfUkVBRE9OTFkgfCBPUEVOX1NIQVJFX0NPTVBBVElCTEU7Ci0gICAgICAgIC8vIGFjdGlvbiA9IEFDVElPTl9JRkVYSVNUU19PUEVOIHwgQUNUSU9OX0lGTk9URVhJU1RTX0ZBSUw7Ci0gICAgICAgIERlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1JFQUQ7Ci0gICAgICAgIFNoYXJlQWNjZXNzID0gRklMRV9TSEFSRV9SRUFEIHwgRklMRV9TSEFSRV9XUklURTsKLSAgICAgICAgQ3JlYXRlRGlzcG9zaXRpb24gPSBGSUxFX09QRU47Ci0gICAgICAgIH0KKwkvKiBvbW9kZSA9IE9QRU5fQUNDRVNTX1JFQURPTkxZIHwgT1BFTl9TSEFSRV9DT01QQVRJQkxFOyAqLworCS8qIGFjdGlvbiA9IEFDVElPTl9JRkVYSVNUU19PUEVOIHwgQUNUSU9OX0lGTk9URVhJU1RTX0ZBSUw7ICovCisJRGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfUkVBRDsKKwlTaGFyZUFjY2VzcyA9IEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEU7CisJQ3JlYXRlRGlzcG9zaXRpb24gPSBGSUxFX09QRU47CisJfQogICAgIGVsc2UgaWYgKG1vZGVbMF0gPT0gJ3cnKSB7Ci0gICAgICAgIC8vIG9tb2RlID0gT1BFTl9BQ0NFU1NfV1JJVEVPTkxZIHwgT1BFTl9TSEFSRV9DT01QQVRJQkxFOwotICAgICAgICAvLyBhY3Rpb24gPSBBQ1RJT05fSUZFWElTVFNfVFJVTkNBVEUgfCBBQ1RJT05fSUZOT1RFWElTVFNfQ1JFQVRFOwotICAgICAgICBEZXNpcmVkQWNjZXNzID0gR0VORVJJQ19XUklURTsKLSAgICAgICAgU2hhcmVBY2Nlc3MgPSBGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJFX1dSSVRFOwotICAgICAgICBDcmVhdGVEaXNwb3NpdGlvbiA9IEZJTEVfU1VQRVJTRURFOwotICAgICAgICB9CisJLyogb21vZGUgPSBPUEVOX0FDQ0VTU19XUklURU9OTFkgfCBPUEVOX1NIQVJFX0NPTVBBVElCTEU7ICovCisJLyogYWN0aW9uID0gQUNUSU9OX0lGRVhJU1RTX1RSVU5DQVRFIHwgQUNUSU9OX0lGTk9URVhJU1RTX0NSRUFURTsgKi8KKwlEZXNpcmVkQWNjZXNzID0gR0VORVJJQ19XUklURTsKKwlTaGFyZUFjY2VzcyA9IEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEU7CisJQ3JlYXRlRGlzcG9zaXRpb24gPSBGSUxFX1NVUEVSU0VERTsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIG9tb2RlID0gT1BFTl9BQ0NFU1NfUkVBRFdSSVRFIHwgT1BFTl9TSEFSRV9DT01QQVRJQkxFOwotICAgICAgICAvLyBhY3Rpb24gPSBBQ1RJT05fSUZFWElTVFNfT1BFTiB8IEFDVElPTl9JRk5PVEVYSVNUU19DUkVBVEU7Ci0gICAgICAgIERlc2lyZWRBY2Nlc3MgPSBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFOwotICAgICAgICBTaGFyZUFjY2VzcyA9IEZJTEVfU0hBUkVfUkVBRDsKLSAgICAgICAgQ3JlYXRlRGlzcG9zaXRpb24gPSBGSUxFX09QRU5fSUY7Ci0gICAgICAgIH0KKwkvKiBvbW9kZSA9IE9QRU5fQUNDRVNTX1JFQURXUklURSB8IE9QRU5fU0hBUkVfQ09NUEFUSUJMRTsgKi8KKwkvKiBhY3Rpb24gPSBBQ1RJT05fSUZFWElTVFNfT1BFTiB8IEFDVElPTl9JRk5PVEVYSVNUU19DUkVBVEU7ICovCisJRGVzaXJlZEFjY2VzcyA9IEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEU7CisJU2hhcmVBY2Nlc3MgPSBGSUxFX1NIQVJFX1JFQUQ7CisJQ3JlYXRlRGlzcG9zaXRpb24gPSBGSUxFX09QRU5fSUY7CisJfQogCi0gICAgLy8gQ29udmVydCBmaWxlbmFtZSBzdHJpbmcgdG8gYW5zaSBzdHJpbmcgYW5kIHRoZW4gdG8gVW5pQ29kZSBzdHJpbmcKKyAgICAvKiBDb252ZXJ0IGZpbGVuYW1lIHN0cmluZyB0byBhbnNpIHN0cmluZyBhbmQgdGhlbiB0byBVbmlDb2RlIHN0cmluZyAqLwogICAgIGlmICgodW5pRmlsZSA9IF9QTV9DU3RyaW5nVG9Vbmljb2RlU3RyaW5nKGtlcm5lbEZpbGVuYW1lKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAKLSAgICAvLyBDcmVhdGUgdGhlIGZpbGUKKyAgICAvKiBDcmVhdGUgdGhlIGZpbGUgKi8KICAgICBJbml0aWFsaXplT2JqZWN0QXR0cmlidXRlcyAoJk9iamVjdEF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaUZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9CSl9DQVNFX0lOU0VOU0lUSVZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKwkJCQl1bmlGaWxlLAorCQkJCU9CSl9DQVNFX0lOU0VOU0lUSVZFLAorCQkJCU5VTEwsCisJCQkJTlVMTCk7CiAgICAgc3RhdHVzID0gWndDcmVhdGVGaWxlKCAmRmlsZUhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNpcmVkQWNjZXNzIHwgU1lOQ0hST05JWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJk9iamVjdEF0dHJpYnV0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJklvU3RhdHVzQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgLy8gQWxsb2NhdGlvblNpemUgIE9QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfQVRUUklCVVRFX05PUk1BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZUFjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVEaXNwb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX1JBTkRPTV9BQ0NFU1MsICAgICAvLyBDcmVhdGVPcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgIC8vIEVhQnVmZmVyICBPUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAvLyBFYUxlbmd0aCAocmVxdWlyZWQgaWYgRWFCdWZmZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKwkJCSAgICBEZXNpcmVkQWNjZXNzIHwgU1lOQ0hST05JWkUsCisJCQkgICAgJk9iamVjdEF0dHJpYnV0ZXMsCisJCQkgICAgJklvU3RhdHVzQmxvY2ssCisJCQkgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgLyogQWxsb2NhdGlvblNpemUgIE9QVElPTkFMLCAqLworCQkJICAgIEZJTEVfQVRUUklCVVRFX05PUk1BTCwKKwkJCSAgICBTaGFyZUFjY2VzcywKKwkJCSAgICBDcmVhdGVEaXNwb3NpdGlvbiwKKwkJCSAgICBGSUxFX1JBTkRPTV9BQ0NFU1MsICAgICAvKiBDcmVhdGVPcHRpb25zLCAqLworCQkJICAgIE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIEVhQnVmZmVyICBPUFRJT05BTCwgKi8KKwkJCSAgICAwICAgICAgICAgICAgICAgICAgICAgICAvKiBFYUxlbmd0aCAocmVxdWlyZWQgaWYgRWFCdWZmZXIpICovCisJCQkgICAgKTsKICAgICBpZiAoIU5UX1NVQ0NFU1MgKHN0YXR1cykpCi0gICAgICAgIGdvdG8gRXJyb3I7CisJZ290byBFcnJvcjsKICAgICBmLT5oYW5kbGUgPSAoaW50KUZpbGVIYW5kbGU7CiAKLSAgICAvLyBEZXRlcm1pbmUgc2l6ZSBvZiB0aGUgZmlsZQorICAgIC8qIERldGVybWluZSBzaXplIG9mIHRoZSBmaWxlICovCiAgICAgc3RhdHVzID0gWndRdWVyeUluZm9ybWF0aW9uRmlsZSggIEZpbGVIYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJb1N0YXR1c0Jsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRmlsZUluZm9ybWF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoRklMRV9TVEFOREFSRF9JTkZPUk1BVElPTiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVTdGFuZGFyZEluZm9ybWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisJCQkJICAgICAgJklvU3RhdHVzQmxvY2ssCisJCQkJICAgICAgJkZpbGVJbmZvcm1hdGlvbiwKKwkJCQkgICAgICBzaXplb2YoRklMRV9TVEFOREFSRF9JTkZPUk1BVElPTiksCisJCQkJICAgICAgRmlsZVN0YW5kYXJkSW5mb3JtYXRpb24KKwkJCQkgICAgICApOwogICAgIGlmICghTlRfU1VDQ0VTUyAoc3RhdHVzKSkKLSAgICAgICAgZ290byBFcnJvcjsKKwlnb3RvIEVycm9yOwogICAgIGYtPmZpbGVzaXplID0gRmlsZUluZm9ybWF0aW9uLkVuZE9mRmlsZS5Mb3dQYXJ0OwogCi0gICAgLy8gTW92ZSB0byB0aGUgZW5kIG9mIHRoZSBmaWxlIGlmIHdlIGFyZSBhcHBlbmRpbmcKKyAgICAvKiBNb3ZlIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgaWYgd2UgYXJlIGFwcGVuZGluZyAqLwogICAgIGlmIChtb2RlWzBdID09ICdhJykgewotICAgICAgICBGaWxlUG9zaXRpb24uQ3VycmVudEJ5dGVPZmZzZXQuSGlnaFBhcnQgPSAwOwotICAgICAgICBGaWxlUG9zaXRpb24uQ3VycmVudEJ5dGVPZmZzZXQuTG93UGFydCA9IGYtPmZpbGVzaXplOwotICAgICAgICBzdGF0dXMgPSBad1NldEluZm9ybWF0aW9uRmlsZSggIEZpbGVIYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJklvU3RhdHVzQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGVQb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoRklMRV9QT1NJVElPTl9JTkZPUk1BVElPTiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVBvc2l0aW9uSW5mb3JtYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBpZiAoIU5UX1NVQ0NFU1MgKHN0YXR1cykpCi0gICAgICAgICAgICBnb3RvIEVycm9yOwotICAgICAgICB9CisJRmlsZVBvc2l0aW9uLkN1cnJlbnRCeXRlT2Zmc2V0LkhpZ2hQYXJ0ID0gMDsKKwlGaWxlUG9zaXRpb24uQ3VycmVudEJ5dGVPZmZzZXQuTG93UGFydCA9IGYtPmZpbGVzaXplOworCXN0YXR1cyA9IFp3U2V0SW5mb3JtYXRpb25GaWxlKCAgRmlsZUhhbmRsZSwKKwkJCQkJJklvU3RhdHVzQmxvY2ssCisJCQkJCSZGaWxlUG9zaXRpb24sCisJCQkJCXNpemVvZihGSUxFX1BPU0lUSU9OX0lORk9STUFUSU9OKSwKKwkJCQkJRmlsZVBvc2l0aW9uSW5mb3JtYXRpb24KKwkJCQkJKTsKKwlpZiAoIU5UX1NVQ0NFU1MgKHN0YXR1cykpCisJICAgIGdvdG8gRXJyb3I7CisJfQogICAgIHJldHVybiBmOwogCiBFcnJvcjoKQEAgLTE1OCwyMSArMTU4LDIxIEBACiAgICAgSU9fU1RBVFVTX0JMT0NLIElvU3RhdHVzQmxvY2s7CiAgICAgTEFSR0VfSU5URUdFUiAgIEJ5dGVPZmZzZXQ7CiAKLSAgICAvLyBSZWFkIGFueSBleHRyYSBieXRlcyBmcm9tIHRoZSBmaWxlCisgICAgLyogUmVhZCBhbnkgZXh0cmEgYnl0ZXMgZnJvbSB0aGUgZmlsZSAqLwogICAgIEJ5dGVPZmZzZXQuSGlnaFBhcnQgPSAwOwogICAgIEJ5dGVPZmZzZXQuTG93UGFydCA9IGYtPm9mZnNldDsKICAgICBzdGF0dXMgPSBad1JlYWRGaWxlKCAoSEFORExFKWYtPmhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgLy9JTiBIQU5ETEUgIEV2ZW50ICBPUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgLy8gIElOIFBJT19BUENfUk9VVElORSAgQXBjUm91dGluZSAgT1BUSU9OQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgIC8vICBJTiBQVk9JRCAgQXBjQ29udGV4dCAgT1BUSU9OQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJklvU3RhdHVzQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgcHRyLCAgICAgICAgICAgICAgIC8vICBPVVQgUFZPSUQgIEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplICogbiwgICAgICAgICAgLy9JTiBVTE9ORyAgTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICZCeXRlT2Zmc2V0LCAgICAgICAvL09QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAvL0lOIFBVTE9ORyAgS2V5ICBPUFRJT05BTAotICAgICAgICAgICAgICAgICAgICAgICAgICk7CisJCQkgTlVMTCwgICAgICAgICAgICAgIC8qSU4gSEFORExFICBFdmVudCAgT1BUSU9OQUwsICovCisJCQkgTlVMTCwgICAgICAgICAgICAgIC8qICBJTiBQSU9fQVBDX1JPVVRJTkUgIEFwY1JvdXRpbmUgIE9QVElPTkFMLCAqLworCQkJIE5VTEwsICAgICAgICAgICAgICAvKiAgSU4gUFZPSUQgIEFwY0NvbnRleHQgIE9QVElPTkFMLCAqLworCQkJICZJb1N0YXR1c0Jsb2NrLAorCQkJIHB0ciwgICAgICAgICAgICAgICAvKiAgT1VUIFBWT0lEICBCdWZmZXIsICovCisJCQkgc2l6ZSAqIG4sICAgICAgICAgIC8qSU4gVUxPTkcgIExlbmd0aCwgKi8KKwkJCSAmQnl0ZU9mZnNldCwgICAgICAgLypPUFRJT05BTCwgKi8KKwkJCSBOVUxMICAgICAgICAgICAgICAgLypJTiBQVUxPTkcgIEtleSAgT1BUSU9OQUwgKi8KKwkJCSApOwogICAgIGlmICghTlRfU1VDQ0VTUyAoc3RhdHVzKSkKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgZi0+b2Zmc2V0ICs9IElvU3RhdHVzQmxvY2suSW5mb3JtYXRpb247CiAgICAgcmV0dXJuIElvU3RhdHVzQmxvY2suSW5mb3JtYXRpb24gLyBzaXplOwogfQpAQCAtMTkyLDI0ICsxOTIsMjQgQEAKICAgICBMQVJHRV9JTlRFR0VSICAgQnl0ZU9mZnNldDsKIAogICAgIGlmICghZi0+d3JpdGVtb2RlKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICBCeXRlT2Zmc2V0LkhpZ2hQYXJ0ID0gMDsKICAgICBCeXRlT2Zmc2V0Lkxvd1BhcnQgPSBmLT5vZmZzZXQ7CiAgICAgc3RhdHVzID0gWndXcml0ZUZpbGUoIChIQU5ETEUpZi0+aGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAvL0lOIEhBTkRMRSAgRXZlbnQgIE9QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAvLyAgSU4gUElPX0FQQ19ST1VUSU5FICBBcGNSb3V0aW5lICBPUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgLy8gIElOIFBWT0lEICBBcGNDb250ZXh0ICBPUFRJT05BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJklvU3RhdHVzQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKilwdHIsICAgICAgIC8vICBPVVQgUFZPSUQgIEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAqIG4sICAgICAgICAgLy9JTiBVTE9ORyAgTGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmQnl0ZU9mZnNldCwgICAgICAvL09QVElPTkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAvL0lOIFBVTE9ORyAgS2V5ICBPUFRJT05BTAotICAgICAgICAgICAgICAgICAgICAgICAgICApOworCQkJICBOVUxMLCAgICAgICAgICAgICAvKklOIEhBTkRMRSAgRXZlbnQgIE9QVElPTkFMLCAqLworCQkJICBOVUxMLCAgICAgICAgICAgICAvKiAgSU4gUElPX0FQQ19ST1VUSU5FICBBcGNSb3V0aW5lICBPUFRJT05BTCwgKi8KKwkJCSAgTlVMTCwgICAgICAgICAgICAgLyogIElOIFBWT0lEICBBcGNDb250ZXh0ICBPUFRJT05BTCwgKi8KKwkJCSAgJklvU3RhdHVzQmxvY2ssCisJCQkgICh2b2lkKilwdHIsICAgICAgIC8qICBPVVQgUFZPSUQgIEJ1ZmZlciwgKi8KKwkJCSAgc2l6ZSAqIG4sICAgICAgICAgLypJTiBVTE9ORyAgTGVuZ3RoLCAqLworCQkJICAmQnl0ZU9mZnNldCwgICAgICAvKk9QVElPTkFMLCAqLworCQkJICBOVUxMICAgICAgICAgICAgICAvKklOIFBVTE9ORyAgS2V5ICBPUFRJT05BTCAqLworCQkJICApOwogICAgIGlmICghTlRfU1VDQ0VTUyAoc3RhdHVzKSkKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgZi0+b2Zmc2V0ICs9IElvU3RhdHVzQmxvY2suSW5mb3JtYXRpb247CiAgICAgaWYgKGYtPm9mZnNldCA+IGYtPmZpbGVzaXplKQotICAgICAgICBmLT5maWxlc2l6ZSA9IGYtPm9mZnNldDsKKwlmLT5maWxlc2l6ZSA9IGYtPm9mZnNldDsKICAgICByZXR1cm4gSW9TdGF0dXNCbG9jay5JbmZvcm1hdGlvbiAvIHNpemU7CiB9CiAKQEAgLTIyMCw3ICsyMjAsNyBAQAogaW50IGZmbHVzaCgKICAgICBGSUxFICpmKQogewotICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSBhcyB3ZSBhcmUgbm90IGRvaW5nIGJ1ZmZlcmVkIEkvTworICAgIC8qIE5vdGhpbmcgdG8gZG8gaGVyZSBhcyB3ZSBhcmUgbm90IGRvaW5nIGJ1ZmZlcmVkIEkvTyAqLwogICAgICh2b2lkKWY7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yMzksMjEgKzIzOSwyMSBAQAogICAgIElPX1NUQVRVU19CTE9DSyAgICAgICAgICAgICBJb1N0YXR1c0Jsb2NrOwogCiAgICAgaWYgKHdoZW5jZSA9PSAwKQotICAgICAgICBmLT5vZmZzZXQgPSBvZmZzZXQ7CisJZi0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGVsc2UgaWYgKHdoZW5jZSA9PSAxKQotICAgICAgICBmLT5vZmZzZXQgKz0gb2Zmc2V0OworCWYtPm9mZnNldCArPSBvZmZzZXQ7CiAgICAgZWxzZSBpZiAod2hlbmNlID09IDIpCi0gICAgICAgIGYtPm9mZnNldCA9IGYtPmZpbGVzaXplICsgb2Zmc2V0OworCWYtPm9mZnNldCA9IGYtPmZpbGVzaXplICsgb2Zmc2V0OwogICAgIEZpbGVQb3NpdGlvbi5DdXJyZW50Qnl0ZU9mZnNldC5IaWdoUGFydCA9IDA7CiAgICAgRmlsZVBvc2l0aW9uLkN1cnJlbnRCeXRlT2Zmc2V0Lkxvd1BhcnQgPSBmLT5vZmZzZXQ7CiAgICAgc3RhdHVzID0gWndTZXRJbmZvcm1hdGlvbkZpbGUoIChIQU5ETEUpZi0+aGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW9TdGF0dXNCbG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGVQb3NpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEZJTEVfUE9TSVRJT05fSU5GT1JNQVRJT04pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlUG9zaXRpb25JbmZvcm1hdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCQkJCSAgICZJb1N0YXR1c0Jsb2NrLAorCQkJCSAgICZGaWxlUG9zaXRpb24sCisJCQkJICAgc2l6ZW9mKEZJTEVfUE9TSVRJT05fSU5GT1JNQVRJT04pLAorCQkJCSAgIEZpbGVQb3NpdGlvbkluZm9ybWF0aW9uCisJCQkJICAgKTsKICAgICBpZiAoIU5UX1NVQ0NFU1MgKHN0YXR1cykpCi0gICAgICAgIHJldHVybiAtMTsKKwlyZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI4OSwxOSArMjg5LDE5IEBACiAgICAgaW50ICAgICBsZW47CiAgICAgY2hhciAgICAqY3M7CiAKLSAgICAvLyBSZWFkIHRoZSBlbnRpcmUgYnVmZmVyIGludG8gbWVtb3J5IChvdXIgZnVuY3Rpb25zIGFyZSB1bmJ1ZmZlcmVkISkKKyAgICAvKiBSZWFkIHRoZSBlbnRpcmUgYnVmZmVyIGludG8gbWVtb3J5IChvdXIgZnVuY3Rpb25zIGFyZSB1bmJ1ZmZlcmVkISkgKi8KICAgICBpZiAoKGxlbiA9IGZyZWFkKHMsMSxuLGYpKSA9PSAwKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIAotICAgIC8vIFNlYXJjaCBmb3IgJ1xuJyBvciBlbmQgb2Ygc3RyaW5nCisgICAgLyogU2VhcmNoIGZvciAnXG4nIG9yIGVuZCBvZiBzdHJpbmcgKi8KICAgICBpZiAobiA+IGxlbikKLSAgICAgICAgbiA9IGxlbjsKKwluID0gbGVuOwogICAgIGNzID0gczsKICAgICB3aGlsZSAoLS1uID4gMCkgewotICAgICAgICBpZiAoKmNzID09ICdcbicpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY3MrKzsKLSAgICAgICAgfQorCWlmICgqY3MgPT0gJ1xuJykKKwkgICAgYnJlYWs7CisJY3MrKzsKKwl9CiAgICAgKmNzID0gJ1wwJzsKICAgICByZXR1cm4gczsKIH0KQEAgLTMyOCw0ICszMjgsMyBAQAogICAgIFBNX2ZyZWUoZik7CiAgICAgcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L3N0ZGxpYi5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvc3RkbGliLmMKaW5kZXggZDc3MDUxMy4uYmJmMGNiZiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvc3RkbGliLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvc3RkbGliLmMKQEAgLTU0LDcgKzU0LDcgQEAKIHsKICAgICB2b2lkICpwID0gUE1fbWFsbG9jU2hhcmVkKG5lbGVtICogc2l6ZSk7CiAgICAgaWYgKHApCi0gICAgICAgIG1lbXNldChwLDAsbmVsZW0gKiBzaXplKTsKKwltZW1zZXQocCwwLG5lbGVtICogc2l6ZSk7CiAgICAgcmV0dXJuIHA7CiB9CiAKQEAgLTY4LDkgKzY4LDkgQEAKIHsKICAgICB2b2lkICpwID0gUE1fbWFsbG9jU2hhcmVkKHNpemUpOwogICAgIGlmIChwKSB7Ci0gICAgICAgIG1lbWNweShwLHB0cixzaXplKTsKLSAgICAgICAgUE1fZnJlZVNoYXJlZChwdHIpOwotICAgICAgICB9CisJbWVtY3B5KHAscHRyLHNpemUpOworCVBNX2ZyZWVTaGFyZWQocHRyKTsKKwl9CiAgICAgcmV0dXJuIHA7CiB9CiAKQEAgLTEwMiwyMSArMTAyLDIxIEBACiAgICAgQU5TSV9TVFJJTkcgICAgIGFuc2lTdHI7CiAgICAgVU5JQ09ERV9TVFJJTkcgICp1bmlTdHI7CiAKLSAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBzdHJpbmcgc3RydWN0dXJlCisgICAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgc3RyaW5nIHN0cnVjdHVyZSAqLwogICAgIGlmICgodW5pU3RyID0gRXhBbGxvY2F0ZVBvb2woTm9uUGFnZWRQb29sLCBzaXplb2YoVU5JQ09ERV9TVFJJTkcpKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAKLSAgICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB3aWRlIHN0cmluZyBpdHNlbGYKKyAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSB3aWRlIHN0cmluZyBpdHNlbGYgKi8KICAgICBsZW5ndGggPSAoc3RybGVuKGNzdHIpICogc2l6ZW9mKFdDSEFSKSkgKyBzaXplb2YoV0NIQVIpOwogICAgIGlmICgodW5pU3RyLT5CdWZmZXIgPSBFeEFsbG9jYXRlUG9vbChOb25QYWdlZFBvb2wsIGxlbmd0aCkpID09IE5VTEwpIHsKLSAgICAgICAgRXhGcmVlUG9vbCh1bmlTdHIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorCUV4RnJlZVBvb2wodW5pU3RyKTsKKwlyZXR1cm4gTlVMTDsKKwl9CiAgICAgUnRsWmVyb01lbW9yeSh1bmlTdHItPkJ1ZmZlciwgbGVuZ3RoKTsKICAgICB1bmlTdHItPkxlbmd0aCA9IDA7CiAgICAgdW5pU3RyLT5NYXhpbXVtTGVuZ3RoID0gKFVTSE9SVClsZW5ndGg7CiAKLSAgICAvLyBDb252ZXJ0IGZpbGVuYW1lIHN0cmluZyB0byBhbnNpIHN0cmluZyBhbmQgdGhlbiB0byBVbmlDb2RlIHN0cmluZworICAgIC8qIENvbnZlcnQgZmlsZW5hbWUgc3RyaW5nIHRvIGFuc2kgc3RyaW5nIGFuZCB0aGVuIHRvIFVuaUNvZGUgc3RyaW5nICovCiAgICAgUnRsSW5pdEFuc2lTdHJpbmcoJmFuc2lTdHIsIGNzdHIpOwogICAgIFJ0bEFuc2lTdHJpbmdUb1VuaWNvZGVTdHJpbmcodW5pU3RyLCAmYW5zaVN0ciwgRkFMU0UpOwogICAgIHJldHVybiB1bmlTdHI7CkBAIC0xMzMsOCArMTMzLDcgQEAKICAgICBVTklDT0RFX1NUUklORyAqdW5pU3RyKQogewogICAgIGlmICh1bmlTdHIpIHsKLSAgICAgICAgRXhGcmVlUG9vbCh1bmlTdHItPkJ1ZmZlcik7Ci0gICAgICAgIEV4RnJlZVBvb2wodW5pU3RyKTsKLSAgICAgICAgfQorCUV4RnJlZVBvb2wodW5pU3RyLT5CdWZmZXIpOworCUV4RnJlZVBvb2wodW5pU3RyKTsKKwl9CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL250ZHJ2L3p0aW1lci5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvenRpbWVyLmMKaW5kZXggZWYyNzI5NC4uZjRjNGJkNCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvenRpbWVyLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vbnRkcnYvenRpbWVyLmMKQEAgLTEyMSw0ICsxMjEsMyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHVsb25nIF9fVUxaRWxhcHNlZFRpbWUodWxvbmcgc3RhcnQsdWxvbmcgZmluaXNoKQogeyByZXR1cm4gZmluaXNoIC0gc3RhcnQ7IH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vb3MyL2V2ZW50LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9vczIvZXZlbnQuYwppbmRleCA3MDZlODRkLi45MWNjMTliIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9vczIvZXZlbnQuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9vczIvZXZlbnQuYwpAQCAtODcsOCArODcsOCBAQAogc3RhdGljIGludCBNaWNrZXlUb1BpeGVsKAogICAgIGludCBtaWNrZXkpCiB7Ci0gICAgLy8gVE9ETzogV2UgY2FuIGFkZCBzb21lIGNvZGUgaW4gaGVyZSB0byBoYW5kbGUgJ2FjY2VsZXJhdGlvbicgZm9yCi0gICAgLy8gICAgICAgdGhlIG1vdXNlIGN1cnNvci4gRm9yIG5vdyBqdXN0IHVzZSB0aGUgbWlja2V5cy4KKyAgICAvKiBUT0RPOiBXZSBjYW4gYWRkIHNvbWUgY29kZSBpbiBoZXJlIHRvIGhhbmRsZSAnYWNjZWxlcmF0aW9uJyBmb3IgKi8KKyAgICAvKiAgICAgICB0aGUgbW91c2UgY3Vyc29yLiBGb3Igbm93IGp1c3QgdXNlIHRoZSBtaWNrZXlzLiAqLwogICAgIHJldHVybiBtaWNrZXk7CiB9CiAKQEAgLTExNiwxOTYgKzExNiwxOTYgQEAKIAogICAgIC8qIFB1bXAgYWxsIGtleWJvYXJkIG1lc3NhZ2VzIGZyb20gb3VyIGNpcmN1bGFyIGJ1ZmZlciAqLwogICAgIGZvciAoOzspIHsKLSAgICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgbW9uaXRvciB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyAqLwotICAgICAgICBpZiAoIWJNb25SdW5uaW5nKQotICAgICAgICAgICAgUE1fZmF0YWxFcnJvcigiS2V5Ym9hcmQgbW9uaXRvciB0aHJlYWQgZGllZCEiKTsKKwkvKiBDaGVjayB0aGF0IHRoZSBtb25pdG9yIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nICovCisJaWYgKCFiTW9uUnVubmluZykKKwkgICAgUE1fZmF0YWxFcnJvcigiS2V5Ym9hcmQgbW9uaXRvciB0aHJlYWQgZGllZCEiKTsKIAotICAgICAgICAvKiBQcm90ZWN0IGtleXBhY2tldCBidWZmZXIgd2l0aCBtdXRleCAqLwotICAgICAgICBEb3NSZXF1ZXN0TXV0ZXhTZW0oaG10eEtleUJ1ZiwgU0VNX0lOREVGSU5JVEVfV0FJVCk7Ci0gICAgICAgIGlmIChrcEhlYWQgPT0ga3BUYWlsKSB7Ci0gICAgICAgICAgICBEb3NSZWxlYXNlTXV0ZXhTZW0oaG10eEtleUJ1Zik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKwkvKiBQcm90ZWN0IGtleXBhY2tldCBidWZmZXIgd2l0aCBtdXRleCAqLworCURvc1JlcXVlc3RNdXRleFNlbShobXR4S2V5QnVmLCBTRU1fSU5ERUZJTklURV9XQUlUKTsKKwlpZiAoa3BIZWFkID09IGtwVGFpbCkgeworCSAgICBEb3NSZWxlYXNlTXV0ZXhTZW0oaG10eEtleUJ1Zik7CisJICAgIGJyZWFrOworCSAgICB9CiAKLSAgICAgICAgbm9JbnB1dCA9IEZBTFNFOworCW5vSW5wdXQgPSBGQUxTRTsKIAotICAgICAgICAvKiBSZWFkIHBhY2tldCBmcm9tIGNpcmN1bGFyIGJ1ZmZlciBhbmQgcmVtb3ZlIGl0ICovCi0gICAgICAgIG1lbWNweSgma3AsICZrZXlNb25Qa3RzW2twVGFpbF0sIHNpemVvZihLRVlQQUNLRVQpKTsKLSAgICAgICAgaWYgKCsra3BUYWlsID09IEtFWUJVRlNJWkUpCi0gICAgICAgICAgICBrcFRhaWwgPSAwOwotICAgICAgICBEb3NSZWxlYXNlTXV0ZXhTZW0oaG10eEtleUJ1Zik7CisJLyogUmVhZCBwYWNrZXQgZnJvbSBjaXJjdWxhciBidWZmZXIgYW5kIHJlbW92ZSBpdCAqLworCW1lbWNweSgma3AsICZrZXlNb25Qa3RzW2twVGFpbF0sIHNpemVvZihLRVlQQUNLRVQpKTsKKwlpZiAoKytrcFRhaWwgPT0gS0VZQlVGU0laRSkKKwkgICAga3BUYWlsID0gMDsKKwlEb3NSZWxlYXNlTXV0ZXhTZW0oaG10eEtleUJ1Zik7CiAKLSAgICAgICAgLyogQ29tcGVuc2F0ZSBmb3IgdGhlIDB4RTAgY2hhcmFjdGVyICovCi0gICAgICAgIGlmIChrcC5YbGF0ZWRTY2FuICYmIGtwLlhsYXRlZENoYXIgPT0gMHhFMCkKLSAgICAgICAgICAgIGtwLlhsYXRlZENoYXIgPSAwOworCS8qIENvbXBlbnNhdGUgZm9yIHRoZSAweEUwIGNoYXJhY3RlciAqLworCWlmIChrcC5YbGF0ZWRTY2FuICYmIGtwLlhsYXRlZENoYXIgPT0gMHhFMCkKKwkgICAga3AuWGxhdGVkQ2hhciA9IDA7CiAKLSAgICAgICAgLyogRGV0ZXJtaW5lIHR5cGUgb2Yga2V5Ym9hcmQgZXZlbnQgKi8KLSAgICAgICAgbWVtc2V0KCZldnQsMCxzaXplb2YoZXZ0KSk7Ci0gICAgICAgIGlmIChrcC5LYmREREZsYWdXb3JkICYgS0VZX1JFTEVBU0UpCi0gICAgICAgICAgICBldnQud2hhdCA9IEVWVF9LRVlVUDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfS0VZRE9XTjsKKwkvKiBEZXRlcm1pbmUgdHlwZSBvZiBrZXlib2FyZCBldmVudCAqLworCW1lbXNldCgmZXZ0LDAsc2l6ZW9mKGV2dCkpOworCWlmIChrcC5LYmREREZsYWdXb3JkICYgS0VZX1JFTEVBU0UpCisJICAgIGV2dC53aGF0ID0gRVZUX0tFWVVQOworCWVsc2UKKwkgICAgZXZ0LndoYXQgPSBFVlRfS0VZRE9XTjsKIAotICAgICAgICAvKiBDb252ZXJ0IGtleWJvYXJkIGNvZGVzICovCi0gICAgICAgIHNjYW4gPSBrcC5Nb25GbGFnV29yZCA+PiA4OwotICAgICAgICBpZiAoZXZ0LndoYXQgPT0gRVZUX0tFWVVQKSB7Ci0gICAgICAgICAgICAvKiBHZXQgbWVzc2FnZSBmb3Iga2V5dXAgY29kZSBmcm9tIHRhYmxlIG9mIGNhY2hlZCBkb3duIHZhbHVlcyAqLwotICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBrZXlVcE1zZ1tzY2FuXTsKLSAgICAgICAgICAgIGtleVVwTXNnW3NjYW5dID0gMDsKLSAgICAgICAgICAgIG9sZEtleU1lc3NhZ2UgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBldnQubWVzc2FnZSA9ICgodWxvbmcpc2NhbiA8PCA4KSB8IGtwLlhsYXRlZENoYXI7Ci0gICAgICAgICAgICBpZiAoZXZ0Lm1lc3NhZ2UgPT0ga2V5VXBNc2dbc2Nhbl0pIHsKLSAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9LRVlSRVBFQVQ7Ci0gICAgICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgfD0gMHgxMDAwMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvbGRLZXlNZXNzYWdlID0gZXZ0Lm1lc3NhZ2UgJiAweDBGRkZGOwotICAgICAgICAgICAga2V5VXBNc2dbc2Nhbl0gPSAodXNob3J0KWV2dC5tZXNzYWdlOwotICAgICAgICAgICAgfQorCS8qIENvbnZlcnQga2V5Ym9hcmQgY29kZXMgKi8KKwlzY2FuID0ga3AuTW9uRmxhZ1dvcmQgPj4gODsKKwlpZiAoZXZ0LndoYXQgPT0gRVZUX0tFWVVQKSB7CisJICAgIC8qIEdldCBtZXNzYWdlIGZvciBrZXl1cCBjb2RlIGZyb20gdGFibGUgb2YgY2FjaGVkIGRvd24gdmFsdWVzICovCisJICAgIGV2dC5tZXNzYWdlID0ga2V5VXBNc2dbc2Nhbl07CisJICAgIGtleVVwTXNnW3NjYW5dID0gMDsKKwkgICAgb2xkS2V5TWVzc2FnZSA9IC0xOworCSAgICB9CisJZWxzZSB7CisJICAgIGV2dC5tZXNzYWdlID0gKCh1bG9uZylzY2FuIDw8IDgpIHwga3AuWGxhdGVkQ2hhcjsKKwkgICAgaWYgKGV2dC5tZXNzYWdlID09IGtleVVwTXNnW3NjYW5dKSB7CisJCWV2dC53aGF0ID0gRVZUX0tFWVJFUEVBVDsKKwkJZXZ0Lm1lc3NhZ2UgfD0gMHgxMDAwMDsKKwkJfQorCSAgICBvbGRLZXlNZXNzYWdlID0gZXZ0Lm1lc3NhZ2UgJiAweDBGRkZGOworCSAgICBrZXlVcE1zZ1tzY2FuXSA9ICh1c2hvcnQpZXZ0Lm1lc3NhZ2U7CisJICAgIH0KIAotICAgICAgICAgLyogQ29udmVydCBzaGlmdCBzdGF0ZSBtb2RpZmllcnMgKi8KLSAgICAgICAgIGlmIChrcC51LlNoaWZ0U3RhdGUgJiAweDAwMDEpCi0gICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfUklHSFRTSElGVDsKLSAgICAgICAgIGlmIChrcC51LlNoaWZ0U3RhdGUgJiAweDAwMDIpCi0gICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTEVGVFNISUZUOwotICAgICAgICAgaWYgKGtwLnUuU2hpZnRTdGF0ZSAmIDB4MDEwMCkKLSAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9MRUZUQ1RSTDsKLSAgICAgICAgIGlmIChrcC51LlNoaWZ0U3RhdGUgJiAweDAyMDApCi0gICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTEVGVEFMVDsKLSAgICAgICAgIGlmIChrcC51LlNoaWZ0U3RhdGUgJiAweDA0MDApCi0gICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfUklHSFRDVFJMOwotICAgICAgICAgaWYgKGtwLnUuU2hpZnRTdGF0ZSAmIDB4MDgwMCkKLSAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9SSUdIVEFMVDsKLSAgICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7CisJIC8qIENvbnZlcnQgc2hpZnQgc3RhdGUgbW9kaWZpZXJzICovCisJIGlmIChrcC51LlNoaWZ0U3RhdGUgJiAweDAwMDEpCisJICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9SSUdIVFNISUZUOworCSBpZiAoa3AudS5TaGlmdFN0YXRlICYgMHgwMDAyKQorCSAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTEVGVFNISUZUOworCSBpZiAoa3AudS5TaGlmdFN0YXRlICYgMHgwMTAwKQorCSAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTEVGVENUUkw7CisJIGlmIChrcC51LlNoaWZ0U3RhdGUgJiAweDAyMDApCisJICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9MRUZUQUxUOworCSBpZiAoa3AudS5TaGlmdFN0YXRlICYgMHgwNDAwKQorCSAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfUklHSFRDVFJMOworCSBpZiAoa3AudS5TaGlmdFN0YXRlICYgMHgwODAwKQorCSAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfUklHSFRBTFQ7CisJIEVWVC5vbGRNb3ZlID0gLTE7CiAKLSAgICAgICAgIC8qIEFkZCB0aW1lIHN0YW1wIGFuZCBhZGQgdGhlIGV2ZW50IHRvIHRoZSBxdWV1ZSAqLwotICAgICAgICAgZXZ0LndoZW4gPSBrZXkudGltZTsKLSAgICAgICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQotICAgICAgICAgICAgIGFkZEV2ZW50KCZldnQpOwotICAgICAgICAgfQorCSAvKiBBZGQgdGltZSBzdGFtcCBhbmQgYWRkIHRoZSBldmVudCB0byB0aGUgcXVldWUgKi8KKwkgZXZ0LndoZW4gPSBrZXkudGltZTsKKwkgaWYgKEVWVC5jb3VudCA8IEVWRU5UUVNJWkUpCisJICAgICBhZGRFdmVudCgmZXZ0KTsKKwkgfQogCiAgICAgLyogRG9uJ3QganVzdCBmbHVzaCBiZWNhdXNlIHRoYXQgdGVybWluYWxseSBjb25mdXNlcyB0aGUgbW9uaXRvciAqLwogICAgIGRvIHsKLSAgICAgICAgS2JkQ2hhckluKCZrZXksIElPX05PV0FJVCwgMCk7Ci0gICAgICAgIH0gd2hpbGUgKGtleS5mYlN0YXR1cyAmIEtCRFRSRl9GSU5BTF9DSEFSX0lOKTsKKwlLYmRDaGFySW4oJmtleSwgSU9fTk9XQUlULCAwKTsKKwl9IHdoaWxlIChrZXkuZmJTdGF0dXMgJiBLQkRUUkZfRklOQUxfQ0hBUl9JTik7CiAKICAgICAvKiBQdW1wIGFsbCBtb3VzZSBtZXNzYWdlcyAqLwogICAgIEtiZEdldFN0YXR1cygma2V5SW5mbywwKTsKICAgICAvKiBDaGVjayByZXR1cm4gY29kZSAtIG1vdXNlIG1heSBub3QgYmUgb3BlcmF0aW9uYWwhISAqLwogICAgIGlmIChNb3VHZXROdW1RdWVFbCgmbXF1ZXVlLF9FVlRfaE1vdXNlKSA9PSBOT19FUlJPUikgewotICAgICAgICB3aGlsZSAobXF1ZXVlLmNFdmVudHMpIHsKLSAgICAgICAgICAgIHdoaWxlIChtcXVldWUuY0V2ZW50cy0tKSB7Ci0gICAgICAgICAgICAgICAgbWVtc2V0KCZldnQsMCxzaXplb2YoZXZ0KSk7Ci0gICAgICAgICAgICAgICAgbVdhaXQgPSBNT1VfTk9XQUlUOwotICAgICAgICAgICAgICAgIE1vdVJlYWRFdmVudFF1ZSgmbW91c2UsJm1XYWl0LF9FVlRfaE1vdXNlKTsKKwl3aGlsZSAobXF1ZXVlLmNFdmVudHMpIHsKKwkgICAgd2hpbGUgKG1xdWV1ZS5jRXZlbnRzLS0pIHsKKwkJbWVtc2V0KCZldnQsMCxzaXplb2YoZXZ0KSk7CisJCW1XYWl0ID0gTU9VX05PV0FJVDsKKwkJTW91UmVhZEV2ZW50UXVlKCZtb3VzZSwmbVdhaXQsX0VWVF9oTW91c2UpOwogCi0gICAgICAgICAgICAgICAgLyogVXBkYXRlIHRoZSBtb3VzZSBwb3NpdGlvbi4gV2UgZ2V0IHRoZSBtb3VzZSBjb29yZGluYXRlcwotICAgICAgICAgICAgICAgICAqIGluIG1pY2tleXMgc28gd2UgaGF2ZSB0byB0cmFuc2xhdGUgdGhlc2UgaW50byBwaXhlbHMgYW5kCi0gICAgICAgICAgICAgICAgICogbW92ZSBvdXIgbW91c2UgcG9zaXRpb24uIElmIHdlIGRvbid0IGRvIHRoaXMsIE9TLzIgZ2l2ZXMKLSAgICAgICAgICAgICAgICAgKiB1cyB0aGUgY29vcmRpbmF0ZXMgaW4gY2hhcmFjdGVyIHBvc2l0aW9ucyBzaW5jZSBpdCBzdGlsbAotICAgICAgICAgICAgICAgICAqIHRoaW5rcyB3ZSBhcmUgaW4gdGV4dCBtb2RlIQotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIEVWVC5teCArPSBNaWNrZXlUb1BpeGVsKG1vdXNlLmNvbCk7Ci0gICAgICAgICAgICAgICAgRVZULm15ICs9IE1pY2tleVRvUGl4ZWwobW91c2Uucm93KTsKLSAgICAgICAgICAgICAgICBpZiAoRVZULm14IDwgMCkgRVZULm14ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoRVZULm15IDwgMCkgRVZULm15ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoRVZULm14ID4gcmFuZ2VYKSAgICBFVlQubXggPSByYW5nZVg7Ci0gICAgICAgICAgICAgICAgaWYgKEVWVC5teSA+IHJhbmdlWSkgICAgRVZULm15ID0gcmFuZ2VZOwotICAgICAgICAgICAgICAgIGV2dC53aGVyZV94ID0gRVZULm14OwotICAgICAgICAgICAgICAgIGV2dC53aGVyZV95ID0gRVZULm15OwotICAgICAgICAgICAgICAgIGV2dC5yZWxhdGl2ZV94ID0gbW91c2UuY29sOwotICAgICAgICAgICAgICAgIGV2dC5yZWxhdGl2ZV95ID0gbW91c2Uucm93OwotICAgICAgICAgICAgICAgIGV2dC53aGVuID0ga2V5LnRpbWU7Ci0gICAgICAgICAgICAgICAgaWYgKG1vdXNlLmZzICYgKE1PVVNFX0JOMV9ET1dOIHwgTU9VU0VfTU9USU9OX1dJVEhfQk4xX0RPV04pKQotICAgICAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9MRUZUQlVUOwotICAgICAgICAgICAgICAgIGlmIChtb3VzZS5mcyAmIChNT1VTRV9CTjJfRE9XTiB8IE1PVVNFX01PVElPTl9XSVRIX0JOMl9ET1dOKSkKLSAgICAgICAgICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfUklHSFRCVVQ7Ci0gICAgICAgICAgICAgICAgaWYgKG1vdXNlLmZzICYgKE1PVVNFX0JOM19ET1dOIHwgTU9VU0VfTU9USU9OX1dJVEhfQk4zX0RPV04pKQotICAgICAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9NSURETEVCVVQ7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUluZm8uZnNTdGF0ZSAmIDB4MDAwMSkKLSAgICAgICAgICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfUklHSFRTSElGVDsKLSAgICAgICAgICAgICAgICBpZiAoa2V5SW5mby5mc1N0YXRlICYgMHgwMDAyKQotICAgICAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9MRUZUU0hJRlQ7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUluZm8uZnNTdGF0ZSAmIDB4MDEwMCkKLSAgICAgICAgICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTEVGVENUUkw7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUluZm8uZnNTdGF0ZSAmIDB4MDIwMCkKLSAgICAgICAgICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTEVGVEFMVDsKLSAgICAgICAgICAgICAgICBpZiAoa2V5SW5mby5mc1N0YXRlICYgMHgwNDAwKQotICAgICAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9SSUdIVENUUkw7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUluZm8uZnNTdGF0ZSAmIDB4MDgwMCkKLSAgICAgICAgICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfUklHSFRBTFQ7CisJCS8qIFVwZGF0ZSB0aGUgbW91c2UgcG9zaXRpb24uIFdlIGdldCB0aGUgbW91c2UgY29vcmRpbmF0ZXMKKwkJICogaW4gbWlja2V5cyBzbyB3ZSBoYXZlIHRvIHRyYW5zbGF0ZSB0aGVzZSBpbnRvIHBpeGVscyBhbmQKKwkJICogbW92ZSBvdXIgbW91c2UgcG9zaXRpb24uIElmIHdlIGRvbid0IGRvIHRoaXMsIE9TLzIgZ2l2ZXMKKwkJICogdXMgdGhlIGNvb3JkaW5hdGVzIGluIGNoYXJhY3RlciBwb3NpdGlvbnMgc2luY2UgaXQgc3RpbGwKKwkJICogdGhpbmtzIHdlIGFyZSBpbiB0ZXh0IG1vZGUhCisJCSAqLworCQlFVlQubXggKz0gTWlja2V5VG9QaXhlbChtb3VzZS5jb2wpOworCQlFVlQubXkgKz0gTWlja2V5VG9QaXhlbChtb3VzZS5yb3cpOworCQlpZiAoRVZULm14IDwgMCkgRVZULm14ID0gMDsKKwkJaWYgKEVWVC5teSA8IDApIEVWVC5teSA9IDA7CisJCWlmIChFVlQubXggPiByYW5nZVgpICAgIEVWVC5teCA9IHJhbmdlWDsKKwkJaWYgKEVWVC5teSA+IHJhbmdlWSkgICAgRVZULm15ID0gcmFuZ2VZOworCQlldnQud2hlcmVfeCA9IEVWVC5teDsKKwkJZXZ0LndoZXJlX3kgPSBFVlQubXk7CisJCWV2dC5yZWxhdGl2ZV94ID0gbW91c2UuY29sOworCQlldnQucmVsYXRpdmVfeSA9IG1vdXNlLnJvdzsKKwkJZXZ0LndoZW4gPSBrZXkudGltZTsKKwkJaWYgKG1vdXNlLmZzICYgKE1PVVNFX0JOMV9ET1dOIHwgTU9VU0VfTU9USU9OX1dJVEhfQk4xX0RPV04pKQorCQkgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTEVGVEJVVDsKKwkJaWYgKG1vdXNlLmZzICYgKE1PVVNFX0JOMl9ET1dOIHwgTU9VU0VfTU9USU9OX1dJVEhfQk4yX0RPV04pKQorCQkgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfUklHSFRCVVQ7CisJCWlmIChtb3VzZS5mcyAmIChNT1VTRV9CTjNfRE9XTiB8IE1PVVNFX01PVElPTl9XSVRIX0JOM19ET1dOKSkKKwkJICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX01JRERMRUJVVDsKKwkJaWYgKGtleUluZm8uZnNTdGF0ZSAmIDB4MDAwMSkKKwkJICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX1JJR0hUU0hJRlQ7CisJCWlmIChrZXlJbmZvLmZzU3RhdGUgJiAweDAwMDIpCisJCSAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9MRUZUU0hJRlQ7CisJCWlmIChrZXlJbmZvLmZzU3RhdGUgJiAweDAxMDApCisJCSAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9MRUZUQ1RSTDsKKwkJaWYgKGtleUluZm8uZnNTdGF0ZSAmIDB4MDIwMCkKKwkJICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX0xFRlRBTFQ7CisJCWlmIChrZXlJbmZvLmZzU3RhdGUgJiAweDA0MDApCisJCSAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9SSUdIVENUUkw7CisJCWlmIChrZXlJbmZvLmZzU3RhdGUgJiAweDA4MDApCisJCSAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9SSUdIVEFMVDsKIAotICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBsZWZ0IG1vdXNlIGNsaWNrIGV2ZW50cyAqLwotICAgICAgICAgICAgICAgIC8qIDB4MDYgPT0gKE1PVVNFX0JOMV9ET1dOIHwgTU9VU0VfTU9USU9OX1dJVEhfQk4xX0RPV04pICovCi0gICAgICAgICAgICAgICAgaWYgKCgobW91c2UuZnMgJiAweDAwMDYpICYmICEob2xkTW91c2VTdGF0ZSAmIDB4MDAwNikpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAoIShtb3VzZS5mcyAmIDB4MDAwNikgJiYgKG9sZE1vdXNlU3RhdGUgJiAweDAwMDYpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobW91c2UuZnMgJiAweDAwMDYpCi0gICAgICAgICAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRURPV047Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFVVA7Ci0gICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gRVZUX0xFRlRCTUFTSzsKLSAgICAgICAgICAgICAgICAgICAgRVZULm9sZE1vdmUgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVWVC5jb3VudCA8IEVWRU5UUVNJWkUpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgfQorCQkvKiBDaGVjayBmb3IgbGVmdCBtb3VzZSBjbGljayBldmVudHMgKi8KKwkJLyogMHgwNiA9PSAoTU9VU0VfQk4xX0RPV04gfCBNT1VTRV9NT1RJT05fV0lUSF9CTjFfRE9XTikgKi8KKwkJaWYgKCgobW91c2UuZnMgJiAweDAwMDYpICYmICEob2xkTW91c2VTdGF0ZSAmIDB4MDAwNikpCisJCQl8fCAoIShtb3VzZS5mcyAmIDB4MDAwNikgJiYgKG9sZE1vdXNlU3RhdGUgJiAweDAwMDYpKSkgeworCQkgICAgaWYgKG1vdXNlLmZzICYgMHgwMDA2KQorCQkJZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOOworCQkgICAgZWxzZQorCQkJZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKKwkJICAgIGV2dC5tZXNzYWdlID0gRVZUX0xFRlRCTUFTSzsKKwkJICAgIEVWVC5vbGRNb3ZlID0gLTE7CisJCSAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkKKwkJCWFkZEV2ZW50KCZldnQpOworCQkgICAgfQogCi0gICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIHJpZ2h0IG1vdXNlIGNsaWNrIGV2ZW50cyAqLwotICAgICAgICAgICAgICAgIC8qIDB4MDAxOCA9PSAoTU9VU0VfQk4yX0RPV04gfCBNT1VTRV9NT1RJT05fV0lUSF9CTjJfRE9XTikgKi8KLSAgICAgICAgICAgICAgICBpZiAoKChtb3VzZS5mcyAmIDB4MDAxOCkgJiYgIShvbGRNb3VzZVN0YXRlICYgMHgwMDE4KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICghKG1vdXNlLmZzICYgMHgwMDE4KSAmJiAob2xkTW91c2VTdGF0ZSAmIDB4MDAxOCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtb3VzZS5mcyAmIDB4MDAxOCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFRE9XTjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKLSAgICAgICAgICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBFVlRfUklHSFRCTUFTSzsKLSAgICAgICAgICAgICAgICAgICAgRVZULm9sZE1vdmUgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVWVC5jb3VudCA8IEVWRU5UUVNJWkUpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgfQorCQkvKiBDaGVjayBmb3IgcmlnaHQgbW91c2UgY2xpY2sgZXZlbnRzICovCisJCS8qIDB4MDAxOCA9PSAoTU9VU0VfQk4yX0RPV04gfCBNT1VTRV9NT1RJT05fV0lUSF9CTjJfRE9XTikgKi8KKwkJaWYgKCgobW91c2UuZnMgJiAweDAwMTgpICYmICEob2xkTW91c2VTdGF0ZSAmIDB4MDAxOCkpCisJCQl8fCAoIShtb3VzZS5mcyAmIDB4MDAxOCkgJiYgKG9sZE1vdXNlU3RhdGUgJiAweDAwMTgpKSkgeworCQkgICAgaWYgKG1vdXNlLmZzICYgMHgwMDE4KQorCQkJZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOOworCQkgICAgZWxzZQorCQkJZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKKwkJICAgIGV2dC5tZXNzYWdlID0gRVZUX1JJR0hUQk1BU0s7CisJCSAgICBFVlQub2xkTW92ZSA9IC0xOworCQkgICAgaWYgKEVWVC5jb3VudCA8IEVWRU5UUVNJWkUpCisJCQlhZGRFdmVudCgmZXZ0KTsKKwkJICAgIH0KIAotICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBtaWRkbGUgbW91c2UgY2xpY2sgZXZlbnRzICovCi0gICAgICAgICAgICAgICAgLyogMHgwMDYwID09IChNT1VTRV9CTjNfRE9XTiB8IE1PVVNFX01PVElPTl9XSVRIX0JOM19ET1dOKSAqLwotICAgICAgICAgICAgICAgIGlmICgoKG1vdXNlLmZzICYgMHgwMDYwKSAmJiAhKG9sZE1vdXNlU3RhdGUgJiAweDAwNjApKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCEobW91c2UuZnMgJiAweDAwNjApICYmIChvbGRNb3VzZVN0YXRlICYgMHgwMDYwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1vdXNlLmZzICYgMHgwMDYwKQotICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRVVQOwotICAgICAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9NSURETEVCTUFTSzsKLSAgICAgICAgICAgICAgICAgICAgRVZULm9sZE1vdmUgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVWVC5jb3VudCA8IEVWRU5UUVNJWkUpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgfQorCQkvKiBDaGVjayBmb3IgbWlkZGxlIG1vdXNlIGNsaWNrIGV2ZW50cyAqLworCQkvKiAweDAwNjAgPT0gKE1PVVNFX0JOM19ET1dOIHwgTU9VU0VfTU9USU9OX1dJVEhfQk4zX0RPV04pICovCisJCWlmICgoKG1vdXNlLmZzICYgMHgwMDYwKSAmJiAhKG9sZE1vdXNlU3RhdGUgJiAweDAwNjApKQorCQkJfHwgKCEobW91c2UuZnMgJiAweDAwNjApICYmIChvbGRNb3VzZVN0YXRlICYgMHgwMDYwKSkpIHsKKwkJICAgIGlmIChtb3VzZS5mcyAmIDB4MDA2MCkKKwkJCWV2dC53aGF0ID0gRVZUX01PVVNFRE9XTjsKKwkJICAgIGVsc2UKKwkJCWV2dC53aGF0ID0gRVZUX01PVVNFVVA7CisJCSAgICBldnQubWVzc2FnZSA9IEVWVF9NSURETEVCTUFTSzsKKwkJICAgIEVWVC5vbGRNb3ZlID0gLTE7CisJCSAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkKKwkJCWFkZEV2ZW50KCZldnQpOworCQkgICAgfQogCi0gICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIG1vdXNlIG1vdmVtZW50IGV2ZW50ICovCi0gICAgICAgICAgICAgICAgaWYgKG1vdXNlLmZzICYgMHgwMDJCKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFTU9WRTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVWVC5vbGRNb3ZlICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeCA9IGV2dC53aGVyZV94Oy8qIE1vZGlmeSBleGlzdGluZyBvbmUgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeSA9IGV2dC53aGVyZV95OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEVWVC5vbGRNb3ZlID0gRVZULmZyZWVIZWFkOyAvKiBTYXZlIGlkIG9mIHRoaXMgbW92ZSBldmVudCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQorCQkvKiBDaGVjayBmb3IgbW91c2UgbW92ZW1lbnQgZXZlbnQgKi8KKwkJaWYgKG1vdXNlLmZzICYgMHgwMDJCKSB7CisJCSAgICBldnQud2hhdCA9IEVWVF9NT1VTRU1PVkU7CisJCSAgICBpZiAoRVZULm9sZE1vdmUgIT0gLTEpIHsKKwkJCUVWVC5ldnRxW0VWVC5vbGRNb3ZlXS53aGVyZV94ID0gZXZ0LndoZXJlX3g7LyogTW9kaWZ5IGV4aXN0aW5nIG9uZSAgKi8KKwkJCUVWVC5ldnRxW0VWVC5vbGRNb3ZlXS53aGVyZV95ID0gZXZ0LndoZXJlX3k7CisJCQl9CisJCSAgICBlbHNlIHsKKwkJCUVWVC5vbGRNb3ZlID0gRVZULmZyZWVIZWFkOyAvKiBTYXZlIGlkIG9mIHRoaXMgbW92ZSBldmVudCAgICovCisJCQlpZiAoRVZULmNvdW50IDwgRVZFTlRRU0laRSkKKwkJCSAgICBhZGRFdmVudCgmZXZ0KTsKKwkJCX0KKwkJICAgIH0KIAotICAgICAgICAgICAgICAgIC8qIFNhdmUgY3VycmVudCBtb3VzZSBzdGF0ZSAqLwotICAgICAgICAgICAgICAgIG9sZE1vdXNlU3RhdGUgPSBtb3VzZS5mczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBNb3VHZXROdW1RdWVFbCgmbXF1ZXVlLF9FVlRfaE1vdXNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vSW5wdXQgPSBGQUxTRTsKLSAgICAgICAgfQorCQkvKiBTYXZlIGN1cnJlbnQgbW91c2Ugc3RhdGUgKi8KKwkJb2xkTW91c2VTdGF0ZSA9IG1vdXNlLmZzOworCQl9CisJICAgIE1vdUdldE51bVF1ZUVsKCZtcXVldWUsX0VWVF9oTW91c2UpOworCSAgICB9CisJICAgIG5vSW5wdXQgPSBGQUxTRTsKKwl9CiAKICAgICAvKiBJZiB0aGVyZSB3YXMgbm8gaW5wdXQgYXZhaWxhYmxlLCBnaXZlIHVwIHRoZSBjdXJyZW50IHRpbWVzbGljZQogICAgICAqIE5vdGU6IERvc1NsZWVwKDApIHdpbGwgZWZmZWN0aXZlbHkgZG8gbm90aGluZyBpZiBubyBvdGhlciB0aHJlYWQgaXMgcmVhZHkuIEhlbmNlCiAgICAgICogRG9zU2xlZXAoMCkgd2lsbCBzdGlsbCB1c2UgMTAwJSBDUFUgX2J1dF8gc2hvdWxkIG5vdCBpbnRlcmZlcmUgd2l0aCBvdGhlciBwcm9ncmFtcy4KICAgICAgKi8KICAgICBpZiAobm9JbnB1dCkKLSAgICAgICAgRG9zU2xlZXAoMCk7CisJRG9zU2xlZXAoMCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNDEsNzggKzM0MSw3OCBAQAogCiAgICAgLyogUmVnaXN0ZXIgdGhlIGJ1ZmZlcnMgdG8gYmUgdXNlZCBmb3IgbW9uaXRvcmluZyBmb3IgY3VycmVudCBzZXNzaW9uICovCiAgICAgaWYgKERvc01vblJlZyhfRVZUX2hLYmRNb24sICZtb25JbmJ1ZiwgKFVMT05HKikmbW9uT3V0YnVmLE1PTklUT1JfRU5ELCAtMSkpIHsKLSAgICAgICAgRG9zUG9zdEV2ZW50U2VtKGhldlN0YXJ0KTsgIC8qIHVuYmxvY2sgdGhlIG1haW4gdGhyZWFkICovCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCURvc1Bvc3RFdmVudFNlbShoZXZTdGFydCk7ICAvKiB1bmJsb2NrIHRoZSBtYWluIHRocmVhZCAqLworCXJldHVybjsKKwl9CiAKICAgICAvKiBVbmJsb2NrIHRoZSBtYWluIHRocmVhZCBhbmQgdGVsbCBpdCB3ZSdyZSBPSyovCiAgICAgYk1vblJ1bm5pbmcgPSBUUlVFOwogICAgIERvc1Bvc3RFdmVudFNlbShoZXZTdGFydCk7CiAgICAgd2hpbGUgKGJNb25SdW5uaW5nKSB7ICAvKiBTdGFydCBhbiBlbmRsZXNzIGxvb3AgKi8KLSAgICAgICAgLyogUmVhZCBkYXRhIGZyb20ga2V5Ym9hcmQgZHJpdmVyICovCi0gICAgICAgIHJjID0gRG9zTW9uUmVhZCgoUEJZVEUpJm1vbkluYnVmLCBJT19XQUlULCAoUEJZVEUpJmtwLCAoUFVTSE9SVCkmY291bnQpOwotICAgICAgICBpZiAocmMpIHsKKwkvKiBSZWFkIGRhdGEgZnJvbSBrZXlib2FyZCBkcml2ZXIgKi8KKwlyYyA9IERvc01vblJlYWQoKFBCWVRFKSZtb25JbmJ1ZiwgSU9fV0FJVCwgKFBCWVRFKSZrcCwgKFBVU0hPUlQpJmNvdW50KTsKKwlpZiAocmMpIHsKICNpZmRlZiBDSEVDS0VECi0gICAgICAgICAgICBpZiAoYk1vblJ1bm5pbmcpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBpbiBEb3NNb25SZWFkLCByYyA9ICVsZFxuIiwgcmMpOworCSAgICBpZiAoYk1vblJ1bm5pbmcpCisJCXByaW50ZigiRXJyb3IgaW4gRG9zTW9uUmVhZCwgcmMgPSAlbGRcbiIsIHJjKTsKICNlbmRpZgotICAgICAgICAgICAgYk1vblJ1bm5pbmcgPSBGQUxTRTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKwkgICAgYk1vblJ1bm5pbmcgPSBGQUxTRTsKKwkgICAgcmV0dXJuOworCSAgICB9CiAKLSAgICAgICAgLyogUGFzcyBGTFVTSCBwYWNrZXRzIGltbWVkaWF0ZWx5ICovCi0gICAgICAgIGlmIChrcC5Nb25GbGFnV29yZCAmIDQpIHsKKwkvKiBQYXNzIEZMVVNIIHBhY2tldHMgaW1tZWRpYXRlbHkgKi8KKwlpZiAoa3AuTW9uRmxhZ1dvcmQgJiA0KSB7CiAjaWZkZWYgQ0hFQ0tFRAotICAgICAgICAgICAgcHJpbnRmKCJGbHVzaCBwYWNrZXQhXG4iKTsKKwkgICAgcHJpbnRmKCJGbHVzaCBwYWNrZXQhXG4iKTsKICNlbmRpZgotICAgICAgICAgICAgRG9zTW9uV3JpdGUoKFBCWVRFKSZtb25PdXRidWYsIChQQllURSkma3AsIGNvdW50KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQorCSAgICBEb3NNb25Xcml0ZSgoUEJZVEUpJm1vbk91dGJ1ZiwgKFBCWVRFKSZrcCwgY291bnQpOworCSAgICBjb250aW51ZTsKKwkgICAgfQogCi0gICAgICAgIC8vVE9ETzogdG8gYmUgcmVtb3ZlZAotICAgICAgICAvKiBTa2lwIGV4dGVuZGVkIHNjYW5jb2RlcyAmIHNvbWUgb3RoZXJzICovCi0gICAgICAgIGlmICgoKGtwLk1vbkZsYWdXb3JkID4+IDgpID09IDB4RTApIHx8ICgoa3AuS2JkRERGbGFnV29yZCAmIDB4MEYpID09IDB4MEYpKSB7Ci0gICAgICAgICAgICBEb3NNb25Xcml0ZSgoUEJZVEUpJm1vbk91dGJ1ZiwgKFBCWVRFKSZrcCwgY291bnQpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisJLypUT0RPOiB0byBiZSByZW1vdmVkICovCisJLyogU2tpcCBleHRlbmRlZCBzY2FuY29kZXMgJiBzb21lIG90aGVycyAqLworCWlmICgoKGtwLk1vbkZsYWdXb3JkID4+IDgpID09IDB4RTApIHx8ICgoa3AuS2JkRERGbGFnV29yZCAmIDB4MEYpID09IDB4MEYpKSB7CisJICAgIERvc01vbldyaXRlKChQQllURSkmbW9uT3V0YnVmLCAoUEJZVEUpJmtwLCBjb3VudCk7CisJICAgIGNvbnRpbnVlOworCSAgICB9CiAKLS8vICAgICAgcHJpbnRmKCJSYXdTY2FuID0gJVgsIFhsYXRlZFNjYW4gPSAlWCwgZmJTdGF0dXMgPSAlWCwgS2JkRERGbGFncyA9ICVYXG4iLAotLy8gICAgICAgICAga3AuTW9uRmxhZ1dvcmQgPj4gOCwga3AuWGxhdGVkU2Nhbiwga3AudS5TaGlmdFN0YXRlLCBrcC5LYmREREZsYWdXb3JkKTsKKy8qICAgICAgcHJpbnRmKCJSYXdTY2FuID0gJVgsIFhsYXRlZFNjYW4gPSAlWCwgZmJTdGF0dXMgPSAlWCwgS2JkRERGbGFncyA9ICVYXG4iLCAqLworLyogICAgICAgICAga3AuTW9uRmxhZ1dvcmQgPj4gOCwga3AuWGxhdGVkU2Nhbiwga3AudS5TaGlmdFN0YXRlLCBrcC5LYmREREZsYWdXb3JkKTsgKi8KIAotICAgICAgICAvKiBQcm90ZWN0IGFjY2VzcyB0byBidWZmZXIgd2l0aCBtdXRleCBzZW1hcGhvcmUgKi8KLSAgICAgICAgcmMgPSBEb3NSZXF1ZXN0TXV0ZXhTZW0oaG10eEtleUJ1ZiwgMTAwMCk7Ci0gICAgICAgIGlmIChyYykgeworCS8qIFByb3RlY3QgYWNjZXNzIHRvIGJ1ZmZlciB3aXRoIG11dGV4IHNlbWFwaG9yZSAqLworCXJjID0gRG9zUmVxdWVzdE11dGV4U2VtKGhtdHhLZXlCdWYsIDEwMDApOworCWlmIChyYykgewogI2lmZGVmIENIRUNLRUQKLSAgICAgICAgICAgIHByaW50ZigiQ2FuJ3QgZ2V0IGFjY2VzcyB0byBtdXRleCwgcmMgPSAlbGRcbiIsIHJjKTsKKwkgICAgcHJpbnRmKCJDYW4ndCBnZXQgYWNjZXNzIHRvIG11dGV4LCByYyA9ICVsZFxuIiwgcmMpOwogI2VuZGlmCi0gICAgICAgICAgICBiTW9uUnVubmluZyA9IEZBTFNFOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorCSAgICBiTW9uUnVubmluZyA9IEZBTFNFOworCSAgICByZXR1cm47CisJICAgIH0KIAotICAgICAgICAvKiBTdG9yZSBwYWNrZXQgaW4gY2lyY3VsYXIgYnVmZmVyLCBkcm9wIGl0IGlmIGl0J3MgZnVsbCAqLwotICAgICAgICBrcE5ldyA9IGtwSGVhZCArIDE7Ci0gICAgICAgIGlmIChrcE5ldyA9PSBLRVlCVUZTSVpFKQotICAgICAgICAgICAga3BOZXcgPSAwOwotICAgICAgICBpZiAoa3BOZXcgIT0ga3BUYWlsKSB7Ci0gICAgICAgICAgICBtZW1jcHkoJmtleU1vblBrdHNba3BIZWFkXSwgJmtwLCBzaXplb2YoS0VZUEFDS0VUKSk7Ci0gICAgICAgICAgICAvLyBUT0RPOiBmaXggdGhpcyEKLSAgICAgICAgICAgIC8qIENvbnZlcnQgYnJlYWsgdG8gbWFrZSBjb2RlICovCi0gICAgICAgICAgICBrZXlNb25Qa3RzW2twSGVhZF0uTW9uRmxhZ1dvcmQgJj0gMHg3RkZGOwotICAgICAgICAgICAga3BIZWFkID0ga3BOZXc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIERvc1JlbGVhc2VNdXRleFNlbShobXR4S2V5QnVmKTsKKwkvKiBTdG9yZSBwYWNrZXQgaW4gY2lyY3VsYXIgYnVmZmVyLCBkcm9wIGl0IGlmIGl0J3MgZnVsbCAqLworCWtwTmV3ID0ga3BIZWFkICsgMTsKKwlpZiAoa3BOZXcgPT0gS0VZQlVGU0laRSkKKwkgICAga3BOZXcgPSAwOworCWlmIChrcE5ldyAhPSBrcFRhaWwpIHsKKwkgICAgbWVtY3B5KCZrZXlNb25Qa3RzW2twSGVhZF0sICZrcCwgc2l6ZW9mKEtFWVBBQ0tFVCkpOworCSAgICAvKiBUT0RPOiBmaXggdGhpcyEgKi8KKwkgICAgLyogQ29udmVydCBicmVhayB0byBtYWtlIGNvZGUgKi8KKwkgICAga2V5TW9uUGt0c1trcEhlYWRdLk1vbkZsYWdXb3JkICY9IDB4N0ZGRjsKKwkgICAga3BIZWFkID0ga3BOZXc7CisJICAgIH0KKwlEb3NSZWxlYXNlTXV0ZXhTZW0oaG10eEtleUJ1Zik7CiAKLSAgICAgICAgLyogRmluYWxseSB3cml0ZSB0aGUgcGFja2V0ICovCi0gICAgICAgIHJjID0gRG9zTW9uV3JpdGUoKFBCWVRFKSZtb25PdXRidWYsIChQQllURSkma3AsIGNvdW50KTsKLSAgICAgICAgaWYgKHJjKSB7CisJLyogRmluYWxseSB3cml0ZSB0aGUgcGFja2V0ICovCisJcmMgPSBEb3NNb25Xcml0ZSgoUEJZVEUpJm1vbk91dGJ1ZiwgKFBCWVRFKSZrcCwgY291bnQpOworCWlmIChyYykgewogI2lmZGVmIENIRUNLRUQKLSAgICAgICAgICAgIGlmIChiTW9uUnVubmluZykKLSAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIGluIERvc01vbldyaXRlLCByYyA9ICVsZFxuIiwgcmMpOworCSAgICBpZiAoYk1vblJ1bm5pbmcpCisJCXByaW50ZigiRXJyb3IgaW4gRG9zTW9uV3JpdGUsIHJjID0gJWxkXG4iLCByYyk7CiAjZW5kaWYKLSAgICAgICAgICAgIGJNb25SdW5uaW5nID0gRkFMU0U7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgYk1vblJ1bm5pbmcgPSBGQUxTRTsKKwkgICAgcmV0dXJuOworCSAgICB9CisJfQogICAgICh2b2lkKXBhcmFtczsKIH0KIApAQCAtNDYxLDE1ICs0NjEsMTUgQEAKIAogICAgIC8qIE9wZW4gdGhlIGtleWJvYXJkIG1vbml0b3IgICovCiAgICAgaWYgKERvc01vbk9wZW4oKFBTWikiS0JEJCIsICZfRVZUX2hLYmRNb24pKQotICAgICAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gb3BlbiBrZXlib2FyZCBtb25pdG9yISIpOworCVBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBvcGVuIGtleWJvYXJkIG1vbml0b3IhIik7CiAKICAgICAvKiBDcmVhdGUgZXZlbnQgc2VtYXBob3JlLCB0aGUgbW9uaXRvciB3aWxsIHBvc3QgaXQgd2hlbiBpdCdzIGluaXRhbGl6ZWQgKi8KICAgICBpZiAoRG9zQ3JlYXRlRXZlbnRTZW0oTlVMTCwgJmhldlN0YXJ0LCAwLCBGQUxTRSkpCi0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgZXZlbnQgc2VtYXBob3JlISIpOworCVBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgZXZlbnQgc2VtYXBob3JlISIpOwogCiAgICAgLyogQ3JlYXRlIG11dGV4IHNlbWFwaG9yZSBwcm90ZWN0aW5nIHRoZSBrZXlwYWNrZXQgYnVmZmVyICovCiAgICAgaWYgKERvc0NyZWF0ZU11dGV4U2VtKE5VTEwsICZobXR4S2V5QnVmLCAwLCBGQUxTRSkpCi0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgbXV0ZXggc2VtYXBob3JlISIpOworCVBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBjcmVhdGUgbXV0ZXggc2VtYXBob3JlISIpOwogCiAgICAgLyogU3RhcnQga2V5Ym9hcmQgbW9uaXRvciB0aHJlYWQsIHVzZSAzMksgc3RhY2sgKi8KICAgICBrYmRNb25USUQgPSBfYmVnaW50aHJlYWQoX2tiZE1vblRocmVhZCwgTlVMTCwgMHg4MDAwLCBOVUxMKTsKQEAgLTQ3OCw5ICs0NzgsOSBAQAogICAgIC8qIEdpdmUgdGhlIHRocmVhZCBvbmUgc2Vjb25kICovCiAgICAgRG9zV2FpdEV2ZW50U2VtKGhldlN0YXJ0LCAxMDAwKTsKICAgICBpZiAoIWJNb25SdW5uaW5nKSB7ICAvKiBDaGVjayB0aGUgdGhyZWFkIGlzIE9LICovCi0gICAgICAgIERvc01vbkNsb3NlKF9FVlRfaEtiZE1vbik7Ci0gICAgICAgIFBNX2ZhdGFsRXJyb3IoIktleWJvYXJkIG1vbml0b3IgdGhyZWFkIGRpZG4ndCBpbml0aWFsaXplISIpOwotICAgICAgICB9CisJRG9zTW9uQ2xvc2UoX0VWVF9oS2JkTW9uKTsKKwlQTV9mYXRhbEVycm9yKCJLZXlib2FyZCBtb25pdG9yIHRocmVhZCBkaWRuJ3QgaW5pdGlhbGl6ZSEiKTsKKwl9CiAKICAgICAvKiBDYXRjaCBwcm9ncmFtIHRlcm1pbmF0aW9uIHNpZ25hbHMgc28gd2UgY2FuIGNsZWFuIHVwIHByb3Blcmx5ICovCiAgICAgc2lnbmFsKFNJR0FCUlQsIF9FVlRfYWJvcnQpOwpAQCAtNTE3LDcgKzUxNyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBFVlRfcmVzdW1lKHZvaWQpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3IgT1MvMgorICAgIC8qIERvIG5vdGhpbmcgZm9yIE9TLzIgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTUyNyw3ICs1MjcsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgRVZUX3N1c3BlbmQodm9pZCkKIHsKLSAgICAvLyBEbyBub3RoaW5nIGZvciBPUy8yCisgICAgLyogRG8gbm90aGluZyBmb3IgT1MvMiAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTUxLDE2ICs1NTEsMTUgQEAKICAgICByYyA9IERvc0tpbGxUaHJlYWQoa2JkTW9uVElEKTsKICNpZmRlZiBDSEVDS0VECiAgICAgaWYgKHJjKQotICAgICAgICBwcmludGYoIkRvc0tpbGxUaHJlYWQgZmFpbGVkLCByYyA9ICVsZFxuIiwgcmMpOworCXByaW50ZigiRG9zS2lsbFRocmVhZCBmYWlsZWQsIHJjID0gJWxkXG4iLCByYyk7CiAjZW5kaWYKICAgICByYyA9IERvc01vbkNsb3NlKF9FVlRfaEtiZE1vbik7CiAjaWZkZWYgQ0hFQ0tFRAogICAgIGlmIChyYykgewotICAgICAgICBwcmludGYoIkRvc01vbkNsb3NlIGZhaWxlZCwgcmMgPSAlbGRcbiIsIHJjKTsKLSAgICAgICAgfQorCXByaW50ZigiRG9zTW9uQ2xvc2UgZmFpbGVkLCByYyA9ICVsZFxuIiwgcmMpOworCX0KICNlbmRpZgogICAgIERvc0Nsb3NlRXZlbnRTZW0oaGV2U3RhcnQpOwogICAgIERvc0Nsb3NlTXV0ZXhTZW0oaG10eEtleUJ1Zik7CiAgICAgS2JkRmx1c2hCdWZmZXIoMCk7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL29zMi9tb24uaCBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL29zMi9tb24uaAppbmRleCA1MmYxMmYwLi4yOGQzOWZiIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9vczIvbW9uLmgKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vb3MyL21vbi5oCkBAIC02Myw1NSArNjMsNTUgQEAKICAgVVNIT1JUICBLYmREREZsYWdXb3JkOwogfSBNTE5QQUNLRVQ7CiAKLS8vIERCQ1NTdGF0dXMKKy8qIERCQ1NTdGF0dXMgKi8KIAotI2RlZmluZSBTRl9TSElGVFMgICAgICAgICAgICAgIDEgIC8vIElmIHNldCB0byAxLCBzaGlmdCBzdGF0dXMgcmV0dXJuZWQgd2l0aG91dCBhIGNoYXJhY3RlcgotI2RlZmluZSBTRl9OT1RDSEFSICAgICAgICAgICAgIDIgIC8vIDAgLSBTY2FuIGNvZGUgaXMgYSBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxIC0gU2NhbiBjb2RlIGlzIG5vdCBhIGNoYXJhY3RlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaW5zdGVhZCBpdCBpcyBhbiBleHRlbmRlZCBrZXkgY29kZSBmcm9tIHRoZSBrZXlib2FyZC4KLSNkZWZpbmUgU0ZfSU1NRURJQVRFICAgICAgICAgIDMyICAvLyBJZiBzZXQgdG8gMSwgaW1tZWRpYXRlIGNvbnZlcnNpb24gcmVxdWVzdGVkCi0jZGVmaW5lIFNGX1RZUEVNQVNLICAgICAgICAgIDE5MiAgLy8gSGFzIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAwIC0gVW5kZWZpbmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMDEgLSBGaW5hbCBjaGFyYWN0ZXI7IGludGVyaW0gY2hhcmFjdGVyIGZsYWcgaXMgdHVybmVkIG9mZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEwIC0gSW50ZXJpbSBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxMSAtIEZpbmFsIGNoYXJhY3RlcjsgaW50ZXJpbSBjaGFyYWN0ZXIgZmxhZyBpcyB0dXJuZWQgb24uCi0vLyBNb25GbGFnV29yZAorI2RlZmluZSBTRl9TSElGVFMgICAgICAgICAgICAgIDEgIC8qIElmIHNldCB0byAxLCBzaGlmdCBzdGF0dXMgcmV0dXJuZWQgd2l0aG91dCBhIGNoYXJhY3RlciAqLworI2RlZmluZSBTRl9OT1RDSEFSICAgICAgICAgICAgIDIgIC8qIDAgLSBTY2FuIGNvZGUgaXMgYSBjaGFyYWN0ZXIgKi8KKwkJCQkgIC8qIDEgLSBTY2FuIGNvZGUgaXMgbm90IGEgY2hhcmFjdGVyOyAqLworCQkJCSAgLyogICAgIGluc3RlYWQgaXQgaXMgYW4gZXh0ZW5kZWQga2V5IGNvZGUgZnJvbSB0aGUga2V5Ym9hcmQuICovCisjZGVmaW5lIFNGX0lNTUVESUFURSAgICAgICAgICAzMiAgLyogSWYgc2V0IHRvIDEsIGltbWVkaWF0ZSBjb252ZXJzaW9uIHJlcXVlc3RlZCAqLworI2RlZmluZSBTRl9UWVBFTUFTSyAgICAgICAgICAxOTIgIC8qIEhhcyB0aGUgZm9sbG93aW5nIHZhbHVlczogKi8KKwkJCQkgIC8qIDAwIC0gVW5kZWZpbmVkICovCisJCQkJICAvKiAwMSAtIEZpbmFsIGNoYXJhY3RlcjsgaW50ZXJpbSBjaGFyYWN0ZXIgZmxhZyBpcyB0dXJuZWQgb2ZmICovCisJCQkJICAvKiAxMCAtIEludGVyaW0gY2hhcmFjdGVyICovCisJCQkJICAvKiAxMSAtIEZpbmFsIGNoYXJhY3RlcjsgaW50ZXJpbSBjaGFyYWN0ZXIgZmxhZyBpcyB0dXJuZWQgb24uICovCisvKiBNb25GbGFnV29yZCAqLwogCi0jZGVmaW5lIE1GX09QRU4gICAgICAgICAgICAgICAgMSAgLy8gb3BlbgotI2RlZmluZSBNRl9DTE9TRSAgICAgICAgICAgICAgIDIgIC8vIGNsb3NlCi0jZGVmaW5lIE1GX0ZMVVNIICAgICAgICAgICAgICAgNCAgLy8gaXMgZmx1c2ggcGFja2V0CisjZGVmaW5lIE1GX09QRU4gICAgICAgICAgICAgICAgMSAgLyogb3BlbiAqLworI2RlZmluZSBNRl9DTE9TRSAgICAgICAgICAgICAgIDIgIC8qIGNsb3NlICovCisjZGVmaW5lIE1GX0ZMVVNIICAgICAgICAgICAgICAgNCAgLyogaXMgZmx1c2ggcGFja2V0ICovCiAKLS8vIEtiZERERmxhZ1dvcmQKKy8qIEtiZERERmxhZ1dvcmQgKi8KIAotI2RlZmluZSBLRl9OT1RTUVBBQ0tFVCAgICAgIDEwMjQgIC8vIERvbid0IHB1dCB0aGlzIHBhY2tldCBpbiBTUSBidWZmZXIKLSNkZWZpbmUgS0ZfQUNDRU5URURLRVkgICAgICAgNTEyICAvLyBLZXkgd2FzIHRyYW5zbGF0ZWQgdXNpbmcgcHJldmlvdXMgYWNjZW50LgotI2RlZmluZSBLRl9NVUxUSU1BS0UgICAgICAgICAyNTYgIC8vIEtleSB3YXMgcmVwZWF0ZWQgbWFrZSBvZiBhIHRvZ2dsZSBrZXkuCi0jZGVmaW5lIEtGX1NFQ09OREFSWUtFWSAgICAgIDEyOCAgLy8gUHJldmlvdXMgc2NhbiBjb2RlIHdhcyB0aGUgRTAgcHJlZml4IGNvZGUuCi0jZGVmaW5lIEtGX0tFWUJSRUFLICAgICAgICAgICA2NCAgLy8gVGhpcyBpcyB0aGUgYnJlYWsgb2YgdGhlIGtleS4KLSNkZWZpbmUgS0ZfS0VZVFlQRU1BU0sgICAgICAgIDYzICAvLyBJc29sYXRlcyB0aGUgS2V5IFR5cGUgZmllbGQgb2YgRERGbGFncy4KLSNkZWZpbmUgS0ZfVU5ERUZLRVkgICAgICAgICAgIDYzICAvLyBLZXkgcGFja2V0IGlzIHVuZGVmaW5lZAotI2RlZmluZSBLRl9TWVNSRVFLRVkgICAgICAgICAgMjMgIC8vIFRoaXMga2V5IHBhY2tldCBpcyB0aGUgU3lzUmVxIGtleSAoNDk5MCkKLSNkZWZpbmUgS0ZfUFJJTlRGTFVTSEtFWSAgICAgIDIyICAvLyBUaGlzIHBhY2tldCBpcyBDdC1BbHQtUHJ0U2NyCi0jZGVmaW5lIEtGX1BTUFJJTlRFQ0hPS0VZICAgICAyMSAgLy8gVGhpcyBwYWNrZXQgaXMgQ3RsLVAKLSNkZWZpbmUgS0ZfUFJJTlRFQ0hPS0VZICAgICAgIDIwICAvLyBUaGlzIHBhY2tldCBpcyBDdGwtUHJ0U2NyCi0jZGVmaW5lIEtGX1BSVFNDUktFWSAgICAgICAgICAxOSAgLy8gVGhpcyBwYWNrZXQgaXMgUHJ0U2NyCi0jZGVmaW5lIEtGX1BTQlJFQUtLRVkgICAgICAgICAxOCAgLy8gVGhpcyBwYWNrZXQgaXMgQ3RsLUMKLSNkZWZpbmUgS0ZfQlJFQUtLRVkgICAgICAgICAgIDE3ICAvLyBUaGlzIHBhY2tldCBpcyBDdGwtQnJlYWsKLSNkZWZpbmUgS0ZfQUNDRU5US0VZICAgICAgICAgIDE2ICAvLyBUaGlzIHBhY2tldCBpcyBhbiBhY2NlbnQga2V5Ci0jZGVmaW5lIEtGX1hST1JQTk9UICAgICAgICAgICAxMyAgLy8gVGhpcyBwYWNrZXQgaXMgYSBSZWFkIG9yIFBlZWsgTm90aWZpY2F0aW9uIFBjdC4KLSNkZWZpbmUgS0ZfTUxOT1RJRklDQVRJT04gICAgIDE0ICAvLyBwYWNrZXQgaXMgYSBNdWx0aS1MYXllciBOTFMgcGFja2V0Ci0jZGVmaW5lIEtGX0hPVEtFWVBBQ0tFVCAgICAgICAxMiAgLy8gVGhpcyBwYWNrZXQgaXMgdGhlIGhvdCBrZXkuCi0jZGVmaW5lIEtGX0JBREtFWUNPTUJPICAgICAgICAxMSAgLy8gQWNjZW50L2NoYXIgY29tYm8gdW5kZWZpbmVkLCBiZWVwIG9ubHkuCi0jZGVmaW5lIEtGX1dBS0VVUEtFWSAgICAgICAgICAxMCAgLy8gVGhpcyBwYWNrZXQgaXMgb25lIGZvbGxvd2luZyBQQVVTRUtFWQotI2RlZmluZSBLRl9QU1BBVVNFS0VZICAgICAgICAgIDkgIC8vIFRoaXMgcGFja2V0IGlzIEN0bC1TCi0jZGVmaW5lIEtGX1BBVVNFS0VZICAgICAgICAgICAgOCAgLy8gVGhpcyBwYWNrZXQgaXMgQ3RsLU51bWxvY2sgb3IgUEFVU0UKLSNkZWZpbmUgS0ZfU0hJRlRNQVNLICAgICAgICAgICA3ICAvLyBLZXkgaXMgYSBzaGlmdCBLZXkKLSNkZWZpbmUgS0ZfRFVNUEtFWSAgICAgICAgICAgICA2ICAvLyBUaGlzIHBhY2tldCBpcyBDdGwtTnVtbG9jay1OdW1Mb2NrCi0jZGVmaW5lIEtGX1JFQk9PVEtFWSAgICAgICAgICAgNSAgLy8gVGhpcyBwYWNrZXQgaXMgQ3RsLUFsdC1EZWwKLSNkZWZpbmUgS0ZfUkVTRU5EQ09ERSAgICAgICAgICA0ICAvLyBUaGlzIHBhY2tldCBpcyByZXNlbmQgY29kZSBmcm9tIGNvbnRyb2xsZXIKLSNkZWZpbmUgS0ZfT1ZFUlJVTkNPREUgICAgICAgICAzICAvLyBUaGlzIHBhY2tldCBpcyBvdmVycnVuIGNvZGUgZnJvbSBjb250cm9sbGVyCi0jZGVmaW5lIEtGX1NFQ1BSRUZJWENPREUgICAgICAgMiAgLy8gVGhpcyBwYWNrZXQgaXMgRTAvRTEgc2NhbiBjb2RlCi0jZGVmaW5lIEtGX0FDS0NPREUgICAgICAgICAgICAgMSAgLy8gVGhpcyBwYWNrZXQgaXMgYWNrIGNvZGUgZnJvbSBrZXlib2FyZAorI2RlZmluZSBLRl9OT1RTUVBBQ0tFVCAgICAgIDEwMjQgIC8qIERvbid0IHB1dCB0aGlzIHBhY2tldCBpbiBTUSBidWZmZXIgKi8KKyNkZWZpbmUgS0ZfQUNDRU5URURLRVkgICAgICAgNTEyICAvKiBLZXkgd2FzIHRyYW5zbGF0ZWQgdXNpbmcgcHJldmlvdXMgYWNjZW50LiAqLworI2RlZmluZSBLRl9NVUxUSU1BS0UgICAgICAgICAyNTYgIC8qIEtleSB3YXMgcmVwZWF0ZWQgbWFrZSBvZiBhIHRvZ2dsZSBrZXkuICovCisjZGVmaW5lIEtGX1NFQ09OREFSWUtFWSAgICAgIDEyOCAgLyogUHJldmlvdXMgc2NhbiBjb2RlIHdhcyB0aGUgRTAgcHJlZml4IGNvZGUuICovCisjZGVmaW5lIEtGX0tFWUJSRUFLICAgICAgICAgICA2NCAgLyogVGhpcyBpcyB0aGUgYnJlYWsgb2YgdGhlIGtleS4gKi8KKyNkZWZpbmUgS0ZfS0VZVFlQRU1BU0sgICAgICAgIDYzICAvKiBJc29sYXRlcyB0aGUgS2V5IFR5cGUgZmllbGQgb2YgRERGbGFncy4gKi8KKyNkZWZpbmUgS0ZfVU5ERUZLRVkgICAgICAgICAgIDYzICAvKiBLZXkgcGFja2V0IGlzIHVuZGVmaW5lZCAqLworI2RlZmluZSBLRl9TWVNSRVFLRVkgICAgICAgICAgMjMgIC8qIFRoaXMga2V5IHBhY2tldCBpcyB0aGUgU3lzUmVxIGtleSAoNDk5MCkgKi8KKyNkZWZpbmUgS0ZfUFJJTlRGTFVTSEtFWSAgICAgIDIyICAvKiBUaGlzIHBhY2tldCBpcyBDdC1BbHQtUHJ0U2NyICovCisjZGVmaW5lIEtGX1BTUFJJTlRFQ0hPS0VZICAgICAyMSAgLyogVGhpcyBwYWNrZXQgaXMgQ3RsLVAgKi8KKyNkZWZpbmUgS0ZfUFJJTlRFQ0hPS0VZICAgICAgIDIwICAvKiBUaGlzIHBhY2tldCBpcyBDdGwtUHJ0U2NyICovCisjZGVmaW5lIEtGX1BSVFNDUktFWSAgICAgICAgICAxOSAgLyogVGhpcyBwYWNrZXQgaXMgUHJ0U2NyICovCisjZGVmaW5lIEtGX1BTQlJFQUtLRVkgICAgICAgICAxOCAgLyogVGhpcyBwYWNrZXQgaXMgQ3RsLUMgKi8KKyNkZWZpbmUgS0ZfQlJFQUtLRVkgICAgICAgICAgIDE3ICAvKiBUaGlzIHBhY2tldCBpcyBDdGwtQnJlYWsgKi8KKyNkZWZpbmUgS0ZfQUNDRU5US0VZICAgICAgICAgIDE2ICAvKiBUaGlzIHBhY2tldCBpcyBhbiBhY2NlbnQga2V5ICovCisjZGVmaW5lIEtGX1hST1JQTk9UICAgICAgICAgICAxMyAgLyogVGhpcyBwYWNrZXQgaXMgYSBSZWFkIG9yIFBlZWsgTm90aWZpY2F0aW9uIFBjdC4gKi8KKyNkZWZpbmUgS0ZfTUxOT1RJRklDQVRJT04gICAgIDE0ICAvKiBwYWNrZXQgaXMgYSBNdWx0aS1MYXllciBOTFMgcGFja2V0ICovCisjZGVmaW5lIEtGX0hPVEtFWVBBQ0tFVCAgICAgICAxMiAgLyogVGhpcyBwYWNrZXQgaXMgdGhlIGhvdCBrZXkuICovCisjZGVmaW5lIEtGX0JBREtFWUNPTUJPICAgICAgICAxMSAgLyogQWNjZW50L2NoYXIgY29tYm8gdW5kZWZpbmVkLCBiZWVwIG9ubHkuICovCisjZGVmaW5lIEtGX1dBS0VVUEtFWSAgICAgICAgICAxMCAgLyogVGhpcyBwYWNrZXQgaXMgb25lIGZvbGxvd2luZyBQQVVTRUtFWSAqLworI2RlZmluZSBLRl9QU1BBVVNFS0VZICAgICAgICAgIDkgIC8qIFRoaXMgcGFja2V0IGlzIEN0bC1TICovCisjZGVmaW5lIEtGX1BBVVNFS0VZICAgICAgICAgICAgOCAgLyogVGhpcyBwYWNrZXQgaXMgQ3RsLU51bWxvY2sgb3IgUEFVU0UgKi8KKyNkZWZpbmUgS0ZfU0hJRlRNQVNLICAgICAgICAgICA3ICAvKiBLZXkgaXMgYSBzaGlmdCBLZXkgKi8KKyNkZWZpbmUgS0ZfRFVNUEtFWSAgICAgICAgICAgICA2ICAvKiBUaGlzIHBhY2tldCBpcyBDdGwtTnVtbG9jay1OdW1Mb2NrICovCisjZGVmaW5lIEtGX1JFQk9PVEtFWSAgICAgICAgICAgNSAgLyogVGhpcyBwYWNrZXQgaXMgQ3RsLUFsdC1EZWwgKi8KKyNkZWZpbmUgS0ZfUkVTRU5EQ09ERSAgICAgICAgICA0ICAvKiBUaGlzIHBhY2tldCBpcyByZXNlbmQgY29kZSBmcm9tIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgS0ZfT1ZFUlJVTkNPREUgICAgICAgICAzICAvKiBUaGlzIHBhY2tldCBpcyBvdmVycnVuIGNvZGUgZnJvbSBjb250cm9sbGVyICovCisjZGVmaW5lIEtGX1NFQ1BSRUZJWENPREUgICAgICAgMiAgLyogVGhpcyBwYWNrZXQgaXMgRTAvRTEgc2NhbiBjb2RlICovCisjZGVmaW5lIEtGX0FDS0NPREUgICAgICAgICAgICAgMSAgLyogVGhpcyBwYWNrZXQgaXMgYWNrIGNvZGUgZnJvbSBrZXlib2FyZCAqLwogCiAKIHR5cGVkZWYgc3RydWN0IF9NT05CVUYgewpAQCAtMTIwLDI5ICsxMjAsMjkgQEAKICAgQllURSAgICAgIFJlc2VydmVkWzIwXTsKIH0gTU9OQlVGOwogCi0jZGVmaW5lIFJTX1NZU1JFRyAgICAgIDMyNzY4ICAvLyBCaXQgMTUgIFN5c1JlcSBrZXkgZG93bgotI2RlZmluZSBSU19DQVBTTE9DSyAgICAxNjM4NCAgLy8gQml0IDE0ICBDYXBzIExvY2sga2V5IGRvd24KLSNkZWZpbmUgUlNfTlVNTE9DSyAgICAgIDgxOTIgIC8vIEJpdCAxMyAgTnVtTG9jayBrZXkgZG93bgotI2RlZmluZSBSU19TQ1JPTExMT0NLICAgNDA5NiAgLy8gQml0IDEyICBTY3JvbGwgTG9jayBrZXkgZG93bgotI2RlZmluZSBSU19SQUxUICAgICAgICAgMjA0OCAgLy8gQml0IDExICBSaWdodCBBbHQga2V5IGRvd24KLSNkZWZpbmUgUlNfUkNPTlRST0wgICAgIDEwMjQgIC8vIEJpdCAxMCAgUmlnaHQgQ3RybCBrZXkgZG93bgotI2RlZmluZSBSU19MQUxUICAgICAgICAgIDUxMiAgLy8gQml0ICA5ICBMZWZ0IEFsdCBrZXkgZG93bgotI2RlZmluZSBSU19MQ09OVFJPTCAgICAgIDI1NiAgLy8gQml0ICA4ICBMZWZ0IEN0cmwga2V5IGRvd24KLSNkZWZpbmUgUlNfSU5TRVJUICAgICAgICAxMjggIC8vIEJpdCAgNyAgSW5zZXJ0IG9uCi0jZGVmaW5lIFJTX0NBUFMgICAgICAgICAgIDY0ICAvLyBCaXQgIDYgIENhcHMgTG9jayBvbgotI2RlZmluZSBSU19OVU0gICAgICAgICAgICAzMiAgLy8gQml0ICA1ICBOdW1Mb2NrIG9uCi0jZGVmaW5lIFJTX1NDUk9MTCAgICAgICAgIDE2ICAvLyBCaXQgIDQgIFNjcm9sbCBMb2NrIG9uCi0jZGVmaW5lIFJTX0FMVCAgICAgICAgICAgICA4ICAvLyBCaXQgIDMgIEVpdGhlciBBbHQga2V5IGRvd24KLSNkZWZpbmUgUlNfQ09OVFJPTCAgICAgICAgIDQgIC8vIEJpdCAgMiAgRWl0aGVyIEN0cmwga2V5IGRvd24KLSNkZWZpbmUgUlNfTFNISUZUICAgICAgICAgIDIgIC8vIEJpdCAgMSAgTGVmdCBTaGlmdCBrZXkgZG93bgotI2RlZmluZSBSU19SU0hJRlQgICAgICAgICAgMSAgLy8gQml0ICAwICBSaWdodCBTaGlmdCBrZXkgZG93bgorI2RlZmluZSBSU19TWVNSRUcgICAgICAzMjc2OCAgLyogQml0IDE1ICBTeXNSZXEga2V5IGRvd24gKi8KKyNkZWZpbmUgUlNfQ0FQU0xPQ0sgICAgMTYzODQgIC8qIEJpdCAxNCAgQ2FwcyBMb2NrIGtleSBkb3duICovCisjZGVmaW5lIFJTX05VTUxPQ0sgICAgICA4MTkyICAvKiBCaXQgMTMgIE51bUxvY2sga2V5IGRvd24gKi8KKyNkZWZpbmUgUlNfU0NST0xMTE9DSyAgIDQwOTYgIC8qIEJpdCAxMiAgU2Nyb2xsIExvY2sga2V5IGRvd24gKi8KKyNkZWZpbmUgUlNfUkFMVCAgICAgICAgIDIwNDggIC8qIEJpdCAxMSAgUmlnaHQgQWx0IGtleSBkb3duICovCisjZGVmaW5lIFJTX1JDT05UUk9MICAgICAxMDI0ICAvKiBCaXQgMTAgIFJpZ2h0IEN0cmwga2V5IGRvd24gKi8KKyNkZWZpbmUgUlNfTEFMVCAgICAgICAgICA1MTIgIC8qIEJpdCAgOSAgTGVmdCBBbHQga2V5IGRvd24gKi8KKyNkZWZpbmUgUlNfTENPTlRST0wgICAgICAyNTYgIC8qIEJpdCAgOCAgTGVmdCBDdHJsIGtleSBkb3duICovCisjZGVmaW5lIFJTX0lOU0VSVCAgICAgICAgMTI4ICAvKiBCaXQgIDcgIEluc2VydCBvbiAqLworI2RlZmluZSBSU19DQVBTICAgICAgICAgICA2NCAgLyogQml0ICA2ICBDYXBzIExvY2sgb24gKi8KKyNkZWZpbmUgUlNfTlVNICAgICAgICAgICAgMzIgIC8qIEJpdCAgNSAgTnVtTG9jayBvbiAqLworI2RlZmluZSBSU19TQ1JPTEwgICAgICAgICAxNiAgLyogQml0ICA0ICBTY3JvbGwgTG9jayBvbiAqLworI2RlZmluZSBSU19BTFQgICAgICAgICAgICAgOCAgLyogQml0ICAzICBFaXRoZXIgQWx0IGtleSBkb3duICovCisjZGVmaW5lIFJTX0NPTlRST0wgICAgICAgICA0ICAvKiBCaXQgIDIgIEVpdGhlciBDdHJsIGtleSBkb3duICovCisjZGVmaW5lIFJTX0xTSElGVCAgICAgICAgICAyICAvKiBCaXQgIDEgIExlZnQgU2hpZnQga2V5IGRvd24gKi8KKyNkZWZpbmUgUlNfUlNISUZUICAgICAgICAgIDEgIC8qIEJpdCAgMCAgUmlnaHQgU2hpZnQga2V5IGRvd24gKi8KIAogCi0jZGVmaW5lIENTX1JDT05UUk9MICAgICA5MSAgICAvLyBSaWdodCBDb250cm9sCi0jZGVmaW5lIENTX0xTSElGVCAgICAgICA0MiAgICAvLyBMZWZ0IFNoaWZ0Ci0jZGVmaW5lIENTX1JTSElGVCAgICAgICA1NCAgICAvLyBSaWdodCBTaGlmdAotI2RlZmluZSBDU19MQUxUICAgICAgICAgNTYgICAgLy8gTGVmdCBBbHQKLSNkZWZpbmUgQ1NfUkFMVCAgICAgICAgIDk0ICAgIC8vIFJpZ2h0IEFsdAorI2RlZmluZSBDU19SQ09OVFJPTCAgICAgOTEgICAgLyogUmlnaHQgQ29udHJvbCAqLworI2RlZmluZSBDU19MU0hJRlQgICAgICAgNDIgICAgLyogTGVmdCBTaGlmdCAqLworI2RlZmluZSBDU19SU0hJRlQgICAgICAgNTQgICAgLyogUmlnaHQgU2hpZnQgKi8KKyNkZWZpbmUgQ1NfTEFMVCAgICAgICAgIDU2ICAgIC8qIExlZnQgQWx0ICovCisjZGVmaW5lIENTX1JBTFQgICAgICAgICA5NCAgICAvKiBSaWdodCBBbHQgKi8KIAogCiAvKiBEb3NNb24qIHByb3RvdHlwZXMgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL29zMi9vc2hkci5oIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vb3MyL29zaGRyLmgKaW5kZXggYWUxZjk3YS4uZTdhYTFjNiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vb3MyL29zaGRyLmgKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vb3MyL29zaGRyLmgKQEAgLTM5LDQgKzM5LDMgQEAKICNpbmNsdWRlICJvczIvbW9uLmgiCiAKIHZvaWQgX19QTV9jaGVja0NvbnNvbGVTd2l0Y2godm9pZCk7Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL29zMi9wbS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vb3MyL3BtLmMKaW5kZXggNTAyNTEwMi4uNzU2ZWVhZCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vb3MyL3BtLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vb3MyL3BtLmMKQEAgLTExNiwxNiArMTE2LDE2IEBACiAvKiBQTUlSRVFVRVNUX1NPRlRXQVJFSU5UIHN0cnVjdHVyZXMgZnJvbSBPUy8yIERESyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgVUxPTkcgdWxGbGFnczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWRE0gaW5pdGlhbGl6YXRpb24gdHlwZQotI2RlZmluZSBWRE1fUE9TVExPQUQgICAgICAgICAgICAgICAgICAgIDB4MSAgICAgLy8gYWRhcHRlciBqdXN0IGxvYWRlZCwgdXNlZCBpbnRlcm5hbGx5IGZvciBpbml0aWFsaXphdGlvbgotI2RlZmluZSBWRE1fSU5JVElBTElaRSAgICAgICAgICAgICAgICAgIDB4MiAgICAgLy8gZm9yY2UgaW5pdGlhbGl6YXRpb24gb2YgYSBwZXJtYW5lbnRseSBvcGVuIFZETSwgZXZlbiBpZiBwcmV2aW91c2x5IGluaXRpYWxpemVkCi0jZGVmaW5lIFZETV9URVJNSU5BVEVfUE9TVElOSVRJQUxJWkUgICAgMHg2ICAgICAvL3N0YXJ0IFZETSB3aXRoIGluaXRpYWxpemF0aW9uLCBidXQgY2xvc2UgaXQgYWZ0ZXJ3YXJkcyAoaW5jbHVkZXMgVkRNX0lOSVRJQUxJWkUpCi0jZGVmaW5lIFZETV9RVUVSWV9DQVBBQklMSVRZICAgICAgICAgICAgMHgxMCAgICAvLyBxdWVyeSB0aGUgY3VycmVudCBpbnQgMTAgY2FwYWJpbGl0eQotI2RlZmluZSBWRE1fRlVMTF9WRE1fQ1JFQVRFRCAgICAgICAgICAgIDB4MjAgICAgLy8gYSBmdWxsIFZETSBpcyBjcmVhdGVkCi0jZGVmaW5lIFZETV9NSU5JX1ZETV9DUkVBVEVEICAgICAgICAgICAgMHg0MCAgICAvLyBhIG1pbmkgVkRNIGlzIGNyZWF0ZWQKLSNkZWZpbmUgVkRNX01JTklfVkRNX1NVUFBPUlRFRCAgICAgICAgICAweDgwICAgIC8vIG1pbmkgVkRNIHN1cHBvcnQgaXMgYXZhaWxhYmxlCi0gICAgUENIQVIgc3pOYW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWRE0gaW5pdGlhbGl6YXRpb24gcHJvZ3JhbQotICAgIFBDSEFSIHN6QXJnczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVkRNIGluaXRpYWxpemF0aW9uIGFyZ3VtZW50cworICAgIFVMT05HIHVsRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVkRNIGluaXRpYWxpemF0aW9uIHR5cGUgKi8KKyNkZWZpbmUgVkRNX1BPU1RMT0FEICAgICAgICAgICAgICAgICAgICAweDEgICAgIC8qIGFkYXB0ZXIganVzdCBsb2FkZWQsIHVzZWQgaW50ZXJuYWxseSBmb3IgaW5pdGlhbGl6YXRpb24gKi8KKyNkZWZpbmUgVkRNX0lOSVRJQUxJWkUgICAgICAgICAgICAgICAgICAweDIgICAgIC8qIGZvcmNlIGluaXRpYWxpemF0aW9uIG9mIGEgcGVybWFuZW50bHkgb3BlbiBWRE0sIGV2ZW4gaWYgcHJldmlvdXNseSBpbml0aWFsaXplZCAqLworI2RlZmluZSBWRE1fVEVSTUlOQVRFX1BPU1RJTklUSUFMSVpFICAgIDB4NiAgICAgLypzdGFydCBWRE0gd2l0aCBpbml0aWFsaXphdGlvbiwgYnV0IGNsb3NlIGl0IGFmdGVyd2FyZHMgKGluY2x1ZGVzIFZETV9JTklUSUFMSVpFKSAqLworI2RlZmluZSBWRE1fUVVFUllfQ0FQQUJJTElUWSAgICAgICAgICAgIDB4MTAgICAgLyogcXVlcnkgdGhlIGN1cnJlbnQgaW50IDEwIGNhcGFiaWxpdHkgKi8KKyNkZWZpbmUgVkRNX0ZVTExfVkRNX0NSRUFURUQgICAgICAgICAgICAweDIwICAgIC8qIGEgZnVsbCBWRE0gaXMgY3JlYXRlZCAqLworI2RlZmluZSBWRE1fTUlOSV9WRE1fQ1JFQVRFRCAgICAgICAgICAgIDB4NDAgICAgLyogYSBtaW5pIFZETSBpcyBjcmVhdGVkICovCisjZGVmaW5lIFZETV9NSU5JX1ZETV9TVVBQT1JURUQgICAgICAgICAgMHg4MCAgICAvKiBtaW5pIFZETSBzdXBwb3J0IGlzIGF2YWlsYWJsZSAqLworICAgIFBDSEFSIHN6TmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVkRNIGluaXRpYWxpemF0aW9uIHByb2dyYW0gKi8KKyAgICBQQ0hBUiBzekFyZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZETSBpbml0aWFsaXphdGlvbiBhcmd1bWVudHMgKi8KICAgICB9SU5JVFZETTsKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgSEVWICAgICAgICAgICAgIEV2ZW50OyAgICAgICAgICAvKiBQb3N0ZWQgYWZ0ZXIgY2FsbGJhY2sgaXMgY2FsbGVkICAgICAgKi8KICAgICB9IFNFU1dJVENIUkVDOwogCi0vLyBQYWdlIHNpemVkIGJsb2NrIGNhY2hlCisvKiBQYWdlIHNpemVkIGJsb2NrIGNhY2hlICovCiAKICNkZWZpbmUgUEFHRVNfUEVSX0JMT0NLICAgICAzMgogI2RlZmluZSBQQUdFX0JMT0NLX1NJWkUgICAgIChQQUdFU19QRVJfQkxPQ0sgKiBQTV9QQUdFX1NJWkUgKyAoUE1fUEFHRV9TSVpFLTEpICsgc2l6ZW9mKHBhZ2VibG9jaykpCkBAIC0yNjksMjkgKzI2OSwyOSBAQAogICAgIHVsb25nICAgICAgICAgICByZXN1bHQ7CiAKICAgICBpZiAoKHJjID0gRG9zT3BlbihQTUhFTFBfTkFNRSwmaFNEREhlbHAsJnJlc3VsdCwwLDAsCi0gICAgICAgICAgICBGSUxFX09QRU4sIE9QRU5fU0hBUkVfREVOWU5PTkUgfCBPUEVOX0FDQ0VTU19SRUFEV1JJVEUsCi0gICAgICAgICAgICBOVUxMKSkgIT0gMCkgewotICAgICAgICBpZiAocmMgPT0gNCkgeyAgLyogRGlkIHdlIHJ1biBvdXQgb2YgZmlsZSBoYW5kbGVzPyAqLwotICAgICAgICAgICAgVUxPTkcgICB1bE5ld0ZIczsKLSAgICAgICAgICAgIExPTkcgICAgbEFkZEZIcyA9IDU7CisJICAgIEZJTEVfT1BFTiwgT1BFTl9TSEFSRV9ERU5ZTk9ORSB8IE9QRU5fQUNDRVNTX1JFQURXUklURSwKKwkgICAgTlVMTCkpICE9IDApIHsKKwlpZiAocmMgPT0gNCkgeyAgLyogRGlkIHdlIHJ1biBvdXQgb2YgZmlsZSBoYW5kbGVzPyAqLworCSAgICBVTE9ORyAgIHVsTmV3RkhzOworCSAgICBMT05HICAgIGxBZGRGSHMgPSA1OwogCi0gICAgICAgICAgICBpZiAoRG9zU2V0UmVsTWF4RkgoJmxBZGRGSHMsICZ1bE5ld0ZIcykgIT0gMCkKLSAgICAgICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJGYWlsZWQgdG8gcmFpc2UgdGhlIGZpbGUgaGFuZGxlcyBsaW1pdCEiKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmICgocmMgPSBEb3NPcGVuKFBNSEVMUF9OQU1FLCZoU0RESGVscCwmcmVzdWx0LDAsMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfT1BFTiwgT1BFTl9TSEFSRV9ERU5ZTk9ORSB8IE9QRU5fQUNDRVNTX1JFQURXUklURSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBvcGVuIFNEREhFTFAkIGhlbHBlciBkZXZpY2UgZHJpdmVyISAoIzIpIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBvcGVuIFNEREhFTFAkIGhlbHBlciBkZXZpY2UgZHJpdmVyISIpOwotICAgICAgICB9CisJICAgIGlmIChEb3NTZXRSZWxNYXhGSCgmbEFkZEZIcywgJnVsTmV3RkhzKSAhPSAwKQorCQlQTV9mYXRhbEVycm9yKCJGYWlsZWQgdG8gcmFpc2UgdGhlIGZpbGUgaGFuZGxlcyBsaW1pdCEiKTsKKwkgICAgZWxzZSB7CisJCWlmICgocmMgPSBEb3NPcGVuKFBNSEVMUF9OQU1FLCZoU0RESGVscCwmcmVzdWx0LDAsMCwKKwkJCUZJTEVfT1BFTiwgT1BFTl9TSEFSRV9ERU5ZTk9ORSB8IE9QRU5fQUNDRVNTX1JFQURXUklURSwKKwkJCU5VTEwpKSAhPSAwKSB7CisJCSAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gb3BlbiBTRERIRUxQJCBoZWxwZXIgZGV2aWNlIGRyaXZlciEgKCMyKSIpOworCQkgICAgfQorCQl9CisJICAgIH0KKwllbHNlCisJICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBvcGVuIFNEREhFTFAkIGhlbHBlciBkZXZpY2UgZHJpdmVyISIpOworCX0KICAgICBpZiAoRG9zRGV2SU9DdGwoaFNEREhlbHAsUE1IRUxQX0lPQ1RMLGZ1bmMsCi0gICAgICAgICAgICAmcGFybXNJbiwgaW5MZW4gPSBzaXplb2YocGFybXNJbiksICZpbkxlbiwKLSAgICAgICAgICAgICZwYXJtc091dCwgb3V0TGVuID0gc2l6ZW9mKHBhcm1zT3V0KSwgJm91dExlbikgIT0gMCkKLSAgICAgICAgUE1fZmF0YWxFcnJvcigiRmFpbHVyZSBjYWxsaW5nIFNEREhFTFAkIGhlbHBlciBkZXZpY2UgZHJpdmVyISIpOworCSAgICAmcGFybXNJbiwgaW5MZW4gPSBzaXplb2YocGFybXNJbiksICZpbkxlbiwKKwkgICAgJnBhcm1zT3V0LCBvdXRMZW4gPSBzaXplb2YocGFybXNPdXQpLCAmb3V0TGVuKSAhPSAwKQorCVBNX2ZhdGFsRXJyb3IoIkZhaWx1cmUgY2FsbGluZyBTRERIRUxQJCBoZWxwZXIgZGV2aWNlIGRyaXZlciEiKTsKICAgICBEb3NDbG9zZShoU0RESGVscCk7CiAgICAgcmV0dXJuIHBhcm1zT3V0WzBdOwogfQpAQCAtMzEwLDkgKzMxMCw5IEBACiAgICAgLyogR2V0IHRoZSBEQkNTIHZlY3RvciAtIGlmIGl0J3Mgbm90IGVtcHR5LCB3ZSdyZSBvbiBEQkNTICovCiAgICAgRG9zUXVlcnlEQkNTRW52KHNpemVvZihhY2hEQkNTSW5mbyksICZjY1N0cnVjdCwgYWNoREJDU0luZm8pOwogICAgIGlmIChhY2hEQkNTSW5mb1swXSAhPSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMjQsOSArMzI0LDkgQEAKICAgICBQVk9JRCAgIHB0cjsKIAogICAgIGlmIChEb3NHZXROYW1lZFNoYXJlZE1lbSgmcHRyLCAoUFNaKSJcXFNIQVJFTUVNXFxQTUdMT0JBTC5NRU0iLCBQQUdfUkVBRCkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgRG9zRnJlZU1lbShwdHIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorCURvc0ZyZWVNZW0ocHRyKTsKKwlyZXR1cm4gdHJ1ZTsKKwl9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0zMzksMTkgKzMzOSwxOSBAQAogdm9pZCBQTUFQSSBQTV9pbml0KHZvaWQpCiB7CiAgICAgaWYgKCFsb3dNZW0pIHsKLSAgICAgICAgLyogT2J0YWluIHRoZSAzMi0+MTYgY2FsbGdhdGUgZnJvbSB0aGUgZGV2aWNlIGRyaXZlciB0byBlbmFibGUgSU9QTCAqLwotICAgICAgICBpZiAoKF9QTV9nZHQgPSBDYWxsU0RESGVscChQTUhFTFBfR0VUR0RUMzIpKSA9PSAwKQotICAgICAgICAgICAgUE1fZmF0YWxFcnJvcigiVW5hYmxlIHRvIG9idGFpbiBjYWxsIGdhdGUgc2VsZWN0b3IhIik7CisJLyogT2J0YWluIHRoZSAzMi0+MTYgY2FsbGdhdGUgZnJvbSB0aGUgZGV2aWNlIGRyaXZlciB0byBlbmFibGUgSU9QTCAqLworCWlmICgoX1BNX2dkdCA9IENhbGxTRERIZWxwKFBNSEVMUF9HRVRHRFQzMikpID09IDApCisJICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBvYnRhaW4gY2FsbCBnYXRlIHNlbGVjdG9yISIpOwogCi0gICAgICAgIFBNX3NldElPUEwoMyk7CisJUE1fc2V0SU9QTCgzKTsKIAotICAgICAgICAvKiBNYXAgdGhlIGZpcnN0IE1iIG9mIHBoeXNpY2FsIG1lbW9yeSBpbnRvIGxvd01lbSAqLwotICAgICAgICBpZiAoKGxvd01lbSA9IFBNX21hcFBoeXNpY2FsQWRkcigwLDB4RkZGRkYsdHJ1ZSkpID09IE5VTEwpCi0gICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gbWFwIGZpcnN0IE1iIHBoeXNpY2FsIG1lbW9yeSEiKTsKKwkvKiBNYXAgdGhlIGZpcnN0IE1iIG9mIHBoeXNpY2FsIG1lbW9yeSBpbnRvIGxvd01lbSAqLworCWlmICgobG93TWVtID0gUE1fbWFwUGh5c2ljYWxBZGRyKDAsMHhGRkZGRix0cnVlKSkgPT0gTlVMTCkKKwkgICAgUE1fZmF0YWxFcnJvcigiVW5hYmxlIHRvIG1hcCBmaXJzdCBNYiBwaHlzaWNhbCBtZW1vcnkhIik7CiAKLSAgICAgICAgLyogSW5pdGlhbGlzZSB0aGUgTVRSUiBpbnRlcmZhY2UgZnVuY3Rpb25zICovCi0gICAgICAgIE1UUlJfaW5pdCgpOwotICAgICAgICB9CisJLyogSW5pdGlhbGlzZSB0aGUgTVRSUiBpbnRlcmZhY2UgZnVuY3Rpb25zICovCisJTVRSUl9pbml0KCk7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzY3LDc5ICszNjcsNzkgQEAKICAgICBSRVNVTFRDT0RFUyByZXNDb2RlczsKIAogICAgIGlmIChoYXZlSW50MTAgPT0gLTEpIHsKLSAgICAgICAgLyogQ29ubmVjdCB0byBWSURFT1BNSSBhbmQgZ2V0IGVudHJ5IHBvaW50LiBOb3RlIHRoYXQgd2Ugb25seQotICAgICAgICAgKiBkbyB0aGlzIGlmIEdFTlBNSSBvciBTRERQTUkgYXJlIGFscmVhZHkgbG9hZGVkLCBzaW5jZSB3ZSBuZWVkCi0gICAgICAgICAqIGEgR1JBREQgYmFzZWQgZHJpdmVyIGZvciB0aGlzIHRvIHdvcmsuCi0gICAgICAgICAqLwotICAgICAgICBQTV9pbml0KCk7Ci0gICAgICAgIGhhdmVJbnQxMCA9IGZhbHNlOwotICAgICAgICBpZiAoRG9zUXVlcnlNb2R1bGVIYW5kbGUoKFBTWikiR0VOUE1JLkRMTCIsJmhNb2RHRU5QTUkpICE9IDApCi0gICAgICAgICAgICBoTW9kR0VOUE1JID0gTlVMTEhBTkRMRTsKLSAgICAgICAgaWYgKERvc1F1ZXJ5TW9kdWxlSGFuZGxlKChQU1opIlNERFBNSS5ETEwiLCZoTW9kU0REUE1JKSAhPSAwKQotICAgICAgICAgICAgaE1vZFNERFBNSSA9IE5VTExIQU5ETEU7Ci0gICAgICAgIGlmIChoTW9kR0VOUE1JIHx8IGhNb2RTRERQTUkpIHsKLSAgICAgICAgICAgIGlmIChEb3NMb2FkTW9kdWxlKChQU1opYnVmLHNpemVvZihidWYpLChQU1opIlZJREVPUE1JLkRMTCIsJmhNb2RWaWRlb1BNSSkgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChEb3NRdWVyeVByb2NBZGRyKGhNb2RWaWRlb1BNSSwwLChQU1opIlZJREVPUE1JMzJSZXF1ZXN0Iiwodm9pZCopJlBNX1ZJREVPUE1JMzJSZXF1ZXN0KSAhPSAwKQotICAgICAgICAgICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gZ2V0IFZJREVPUE1JMzJSZXF1ZXN0IGVudHJ5IHBvaW50ISIpOwotICAgICAgICAgICAgICAgIHN0cmNweShwYXRoLCJYOlxcT1MyXFxTVkdBREFUQS5QTUkiKTsKLSAgICAgICAgICAgICAgICBwYXRoWzBdID0gUE1fZ2V0Qm9vdERyaXZlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKFBNX1ZJREVPUE1JMzJSZXF1ZXN0KCZBZGFwdGVyLFBNSVJFUVVFU1RfTE9BRFBNSUZJTEUscGF0aCxOVUxMKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIERvc0ZyZWVNb2R1bGUoaE1vZFZpZGVvUE1JKTsKLSAgICAgICAgICAgICAgICAgICAgUE1fVklERU9QTUkzMlJlcXVlc3QgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBoYXZlSW50MTAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvKiBBdHRlbXB0IHRvIGluaXRpYWxpc2UgdGhlIGZ1bGwgVkRNIGluIHRoZSBzeXN0ZW0uIFRoaXMgd2lsbCBvbmx5Ci0gICAgICAgICAgICAgICAgICAgICAqIHdvcmsgaWYgVlBSUE1JLlNZUyBpcyBsb2FkZWQsIGJ1dCBpdCBwcm92aWRlcyBzdXBwb3J0IGZvciBwYXNzaW5nCi0gICAgICAgICAgICAgICAgICAgICAqIHZhbHVlcyBpbiBFUy9EUy9FU0kvRURJIGJldHdlZW4gdGhlIEJJT1Mgd2hpY2ggZG9lcyBub3Qgd29yayB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAqIGtlcm5lbCBWRE0ncyBpbiBmaXhwYWNrcyBlYXJsaWVyIHRoYW4gRlAxNS4gRlAxNSBhbmQgbGF0ZXIgYW5kCi0gICAgICAgICAgICAgICAgICAgICAqIHRoZSBuZXcgV2FycCA0LjUxIGFuZCBXYXJwIFNlcnZlciBjb252ZW5pZW5jZSBwYWNrcyBzaG91bGQgd29yawotICAgICAgICAgICAgICAgICAgICAgKiBmaW5lIHdpdGggdGhlIGtlcm5lbCBtaW5pLVZETS4KLSAgICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAgICogQWxzbyB0aGUgZnVsbCBWRE0gaXMgdGhlIG9ubHkgc29sdXRpb24gZm9yIHJlYWxseSBvbGQga2VybmVscwotICAgICAgICAgICAgICAgICAgICAgKiAoYnV0IEdSQUREIHdvbid0IHJ1biBvbiB0aGVtIHNvIHRoaXMgaXMgc3VwZXJmbHVvdXMgOy0pLgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgSU5JVFZETSBJbml0VkRNID0ge1ZETV9JTklUSUFMSVpFLE5VTEwsTlVMTH07Ci0gICAgICAgICAgICAgICAgICAgIFBNX1ZJREVPUE1JMzJSZXF1ZXN0KCZBZGFwdGVyLFBNSVJFUVVFU1RfU09GVFdBUkVJTlQsJkluaXRWRE0sTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIGhhdmVJbnQxMCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogQSBHUkFERCBkcml2ZXIgaXNuJ3QgbG9hZGVkLCBoZW5jZSB3ZSBjYW4ndCB1c2UgVklERU9QTUkuIEJ1dCB3ZSB3aWxsIHRyeQotICAgICAgICAgICAgICogdG8gYWNjZXNzIHRoZSBtaW5pLVZETSBkaXJlY3RseSwgZmlyc3QgdmVyaWZ5aW5nIHRoYXQgdGhlIHN1cHBvcnQgaXMKLSAgICAgICAgICAgICAqIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsIChpdCBzaG91bGQgYmUgZm9yIGtlcm5lbHMgdGhhdCBzdXBwb3J0IEdSQUREKS4KLSAgICAgICAgICAgICAqIFRoaXMgbWF5IGJlIG5lZWRlZCBpbiBhIGNvbW1hbmQgbGluZSBib290IG9yIGlmIG5vbi1HUkFERCBkcml2ZXIgaXMKLSAgICAgICAgICAgICAqIHVzZWQgKE1hdHJveCBvciBjbGFzc2ljIFZHQSkuCi0gICAgICAgICAgICAgKiBOb3RlOiBiZWNhdXNlIG9mIHByb2JsZW1zIHdpdGggbWluaS1WRE0gc3VwcG9ydCBpbiB0aGUga2VybmVsLCB3ZSBoYXZlIHRvCi0gICAgICAgICAgICAgKiBzcGF3biBhIGRhZW1vbiBwcm9jZXNzIHRoYXQgd2lsbCBkbyB0aGUgYWN0dWFsIG1pbmktVkRNIGFjY2VzcyBmb3IgdXMuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAvKiBUcnkgdG8gb3BlbiBzaGFyZWQgc2VtYXBob3JlIHRvIHNlZSBpZiBvdXIgZGFlbW9uIGlzIGFscmVhZHkgdXAgKi8KLSAgICAgICAgICAgIGlmIChEb3NPcGVuRXZlbnRTZW0oU0hBUkVEU0VNLCAmaGV2RGFlbW9uKSA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgIGlmIChEb3NXYWl0RXZlbnRTZW0oaGV2RGFlbW9uLCAxKSA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAvKiBJZiBzZW1hcGhvcmUgaXMgcG9zdGVkLCBhbGwgaXMgd2VsbCAqLwotICAgICAgICAgICAgICAgICAgICB1c2VWUE1JICAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaGF2ZUludDEwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIENyZWF0ZSBzaGFyZWQgZXZlbnQgc2VtYXBob3JlICovCi0gICAgICAgICAgICAgICAgaWYgKERvc0NyZWF0ZUV2ZW50U2VtKFNIQVJFRFNFTSwgJmhldkRhZW1vbiwgRENfU0VNX1NIQVJFRCwgRkFMU0UpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIFBNX2ZpbmRCUEQoREFFTU9OX05BTUUsIHBhdGgpOwotICAgICAgICAgICAgICAgICAgICBzdHJjYXQocGF0aCwgREFFTU9OX05BTUUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoRG9zRXhlY1BnbShidWYsIHNpemVvZihidWYpLCBFWEVDX0JBQ0tHUk9VTkQsIChQU1opREFFTU9OX05BTUUsCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmcmVzQ29kZXMsIChQU1opcGF0aCkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBkYWVtb24gd2FzIHN1Y2Nlc3NmdWxseSBzcGF3bmVkLCBub3cgZ2l2ZSBpdCBhIHNlYyB0byBjb21lIHVwICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoRG9zV2FpdEV2ZW50U2VtKGhldkRhZW1vbiwgMjAwMCkgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJdCdzIHVwISAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZQTUkgICA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVJbnQxMCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJLyogQ29ubmVjdCB0byBWSURFT1BNSSBhbmQgZ2V0IGVudHJ5IHBvaW50LiBOb3RlIHRoYXQgd2Ugb25seQorCSAqIGRvIHRoaXMgaWYgR0VOUE1JIG9yIFNERFBNSSBhcmUgYWxyZWFkeSBsb2FkZWQsIHNpbmNlIHdlIG5lZWQKKwkgKiBhIEdSQUREIGJhc2VkIGRyaXZlciBmb3IgdGhpcyB0byB3b3JrLgorCSAqLworCVBNX2luaXQoKTsKKwloYXZlSW50MTAgPSBmYWxzZTsKKwlpZiAoRG9zUXVlcnlNb2R1bGVIYW5kbGUoKFBTWikiR0VOUE1JLkRMTCIsJmhNb2RHRU5QTUkpICE9IDApCisJICAgIGhNb2RHRU5QTUkgPSBOVUxMSEFORExFOworCWlmIChEb3NRdWVyeU1vZHVsZUhhbmRsZSgoUFNaKSJTRERQTUkuRExMIiwmaE1vZFNERFBNSSkgIT0gMCkKKwkgICAgaE1vZFNERFBNSSA9IE5VTExIQU5ETEU7CisJaWYgKGhNb2RHRU5QTUkgfHwgaE1vZFNERFBNSSkgeworCSAgICBpZiAoRG9zTG9hZE1vZHVsZSgoUFNaKWJ1ZixzaXplb2YoYnVmKSwoUFNaKSJWSURFT1BNSS5ETEwiLCZoTW9kVmlkZW9QTUkpID09IDApIHsKKwkJaWYgKERvc1F1ZXJ5UHJvY0FkZHIoaE1vZFZpZGVvUE1JLDAsKFBTWikiVklERU9QTUkzMlJlcXVlc3QiLCh2b2lkKikmUE1fVklERU9QTUkzMlJlcXVlc3QpICE9IDApCisJCSAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gZ2V0IFZJREVPUE1JMzJSZXF1ZXN0IGVudHJ5IHBvaW50ISIpOworCQlzdHJjcHkocGF0aCwiWDpcXE9TMlxcU1ZHQURBVEEuUE1JIik7CisJCXBhdGhbMF0gPSBQTV9nZXRCb290RHJpdmUoKTsKKwkJaWYgKFBNX1ZJREVPUE1JMzJSZXF1ZXN0KCZBZGFwdGVyLFBNSVJFUVVFU1RfTE9BRFBNSUZJTEUscGF0aCxOVUxMKSAhPSAwKSB7CisJCSAgICBEb3NGcmVlTW9kdWxlKGhNb2RWaWRlb1BNSSk7CisJCSAgICBQTV9WSURFT1BNSTMyUmVxdWVzdCA9IE5VTEw7CisJCSAgICBoYXZlSW50MTAgPSBmYWxzZTsKKwkJICAgIH0KKwkJZWxzZSB7CisJCSAgICAvKiBBdHRlbXB0IHRvIGluaXRpYWxpc2UgdGhlIGZ1bGwgVkRNIGluIHRoZSBzeXN0ZW0uIFRoaXMgd2lsbCBvbmx5CisJCSAgICAgKiB3b3JrIGlmIFZQUlBNSS5TWVMgaXMgbG9hZGVkLCBidXQgaXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgcGFzc2luZworCQkgICAgICogdmFsdWVzIGluIEVTL0RTL0VTSS9FREkgYmV0d2VlbiB0aGUgQklPUyB3aGljaCBkb2VzIG5vdCB3b3JrIHdpdGgKKwkJICAgICAqIGtlcm5lbCBWRE0ncyBpbiBmaXhwYWNrcyBlYXJsaWVyIHRoYW4gRlAxNS4gRlAxNSBhbmQgbGF0ZXIgYW5kCisJCSAgICAgKiB0aGUgbmV3IFdhcnAgNC41MSBhbmQgV2FycCBTZXJ2ZXIgY29udmVuaWVuY2UgcGFja3Mgc2hvdWxkIHdvcmsKKwkJICAgICAqIGZpbmUgd2l0aCB0aGUga2VybmVsIG1pbmktVkRNLgorCQkgICAgICoKKwkJICAgICAqIEFsc28gdGhlIGZ1bGwgVkRNIGlzIHRoZSBvbmx5IHNvbHV0aW9uIGZvciByZWFsbHkgb2xkIGtlcm5lbHMKKwkJICAgICAqIChidXQgR1JBREQgd29uJ3QgcnVuIG9uIHRoZW0gc28gdGhpcyBpcyBzdXBlcmZsdW91cyA7LSkuCisJCSAgICAgKi8KKwkJICAgIElOSVRWRE0gSW5pdFZETSA9IHtWRE1fSU5JVElBTElaRSxOVUxMLE5VTEx9OworCQkgICAgUE1fVklERU9QTUkzMlJlcXVlc3QoJkFkYXB0ZXIsUE1JUkVRVUVTVF9TT0ZUV0FSRUlOVCwmSW5pdFZETSxOVUxMKTsKKwkJICAgIGhhdmVJbnQxMCA9IHRydWU7CisJCSAgICB9CisJCX0KKwkgICAgfQorCWVsc2UgeworCSAgICAvKiBBIEdSQUREIGRyaXZlciBpc24ndCBsb2FkZWQsIGhlbmNlIHdlIGNhbid0IHVzZSBWSURFT1BNSS4gQnV0IHdlIHdpbGwgdHJ5CisJICAgICAqIHRvIGFjY2VzcyB0aGUgbWluaS1WRE0gZGlyZWN0bHksIGZpcnN0IHZlcmlmeWluZyB0aGF0IHRoZSBzdXBwb3J0IGlzCisJICAgICAqIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsIChpdCBzaG91bGQgYmUgZm9yIGtlcm5lbHMgdGhhdCBzdXBwb3J0IEdSQUREKS4KKwkgICAgICogVGhpcyBtYXkgYmUgbmVlZGVkIGluIGEgY29tbWFuZCBsaW5lIGJvb3Qgb3IgaWYgbm9uLUdSQUREIGRyaXZlciBpcworCSAgICAgKiB1c2VkIChNYXRyb3ggb3IgY2xhc3NpYyBWR0EpLgorCSAgICAgKiBOb3RlOiBiZWNhdXNlIG9mIHByb2JsZW1zIHdpdGggbWluaS1WRE0gc3VwcG9ydCBpbiB0aGUga2VybmVsLCB3ZSBoYXZlIHRvCisJICAgICAqIHNwYXduIGEgZGFlbW9uIHByb2Nlc3MgdGhhdCB3aWxsIGRvIHRoZSBhY3R1YWwgbWluaS1WRE0gYWNjZXNzIGZvciB1cy4KKwkgICAgICovCisJICAgICAvKiBUcnkgdG8gb3BlbiBzaGFyZWQgc2VtYXBob3JlIHRvIHNlZSBpZiBvdXIgZGFlbW9uIGlzIGFscmVhZHkgdXAgKi8KKwkgICAgaWYgKERvc09wZW5FdmVudFNlbShTSEFSRURTRU0sICZoZXZEYWVtb24pID09IE5PX0VSUk9SKSB7CisJCWlmIChEb3NXYWl0RXZlbnRTZW0oaGV2RGFlbW9uLCAxKSA9PSBOT19FUlJPUikgeworCQkgICAgLyogSWYgc2VtYXBob3JlIGlzIHBvc3RlZCwgYWxsIGlzIHdlbGwgKi8KKwkJICAgIHVzZVZQTUkgICA9IGZhbHNlOworCQkgICAgaGF2ZUludDEwID0gdHJ1ZTsKKwkJICAgIH0KKwkJfQorCSAgICBlbHNlIHsKKwkJLyogQ3JlYXRlIHNoYXJlZCBldmVudCBzZW1hcGhvcmUgKi8KKwkJaWYgKERvc0NyZWF0ZUV2ZW50U2VtKFNIQVJFRFNFTSwgJmhldkRhZW1vbiwgRENfU0VNX1NIQVJFRCwgRkFMU0UpID09IE5PX0VSUk9SKSB7CisJCSAgICBQTV9maW5kQlBEKERBRU1PTl9OQU1FLCBwYXRoKTsKKwkJICAgIHN0cmNhdChwYXRoLCBEQUVNT05fTkFNRSk7CisJCSAgICBpZiAoRG9zRXhlY1BnbShidWYsIHNpemVvZihidWYpLCBFWEVDX0JBQ0tHUk9VTkQsIChQU1opREFFTU9OX05BTUUsCisJCQlOVUxMLCAmcmVzQ29kZXMsIChQU1opcGF0aCkgPT0gTk9fRVJST1IpIHsKKwkJCS8qIFRoZSBkYWVtb24gd2FzIHN1Y2Nlc3NmdWxseSBzcGF3bmVkLCBub3cgZ2l2ZSBpdCBhIHNlYyB0byBjb21lIHVwICovCisJCQlpZiAoRG9zV2FpdEV2ZW50U2VtKGhldkRhZW1vbiwgMjAwMCkgPT0gTk9fRVJST1IpIHsKKwkJCSAgICAvKiBJdCdzIHVwISAqLworCQkJICAgIHVzZVZQTUkgICA9IGZhbHNlOworCQkJICAgIGhhdmVJbnQxMCA9IHRydWU7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CiAgICAgcmV0dXJuIGhhdmVJbnQxMDsKIH0KIApAQCAtNDgwLDkgKzQ4MCw5IEBACiB7CiAgICAgdWludCBwb3MgPSBzdHJsZW4ocyk7CiAgICAgaWYgKHNbcG9zLTFdICE9ICdcXCcpIHsKLSAgICAgICAgc1twb3NdID0gJ1xcJzsKLSAgICAgICAgc1twb3MrMV0gPSAnXDAnOwotICAgICAgICB9CisJc1twb3NdID0gJ1xcJzsKKwlzW3BvcysxXSA9ICdcMCc7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTA1LDkgKzUwNSw5IEBACiAgICAgLyogQmUgcHJlcGFyZSB0byBiZSBjYWxsZWQgcmVjdXJzaXZlbHkgKGZhaWxlZCB0byBmYWlsIHNpdHVhdGlvbiA6LSkgKi8KICAgICBzdGF0aWMgaW50IGZhdGFsRXJyb3JDb3VudCA9IDA7CiAgICAgaWYgKGZhdGFsRXJyb3JDb3VudCsrID09IDApIHsKLSAgICAgICAgaWYgKGZhdGFsRXJyb3JDbGVhbnVwKQotICAgICAgICAgICAgZmF0YWxFcnJvckNsZWFudXAoKTsKLSAgICAgICAgfQorCWlmIChmYXRhbEVycm9yQ2xlYW51cCkKKwkgICAgZmF0YWxFcnJvckNsZWFudXAoKTsKKwl9CiAgICAgZnByaW50ZihzdGRlcnIsIiVzXG4iLCBtc2cpOwogICAgIGV4aXQoMSk7CiB9CkBAIC01MjIsMTAgKzUyMiwxMCBAQAogICAgIHVpbnQgKnJvZmYpCiB7CiAgICAgaWYgKCFWRVNBQnVmX3B0cikgewotICAgICAgICAvKiBBbGxvY2F0ZSBhIGdsb2JhbCBidWZmZXIgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgVkVTQSBWQkUgKi8KLSAgICAgICAgaWYgKChWRVNBQnVmX3B0ciA9IFBNX2FsbG9jUmVhbFNlZyhWRVNBQnVmX2xlbiwgJlZFU0FCdWZfcnNlZywgJlZFU0FCdWZfcm9mZikpID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorCS8qIEFsbG9jYXRlIGEgZ2xvYmFsIGJ1ZmZlciBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBWRVNBIFZCRSAqLworCWlmICgoVkVTQUJ1Zl9wdHIgPSBQTV9hbGxvY1JlYWxTZWcoVkVTQUJ1Zl9sZW4sICZWRVNBQnVmX3JzZWcsICZWRVNBQnVmX3JvZmYpKSA9PSBOVUxMKQorCSAgICByZXR1cm4gTlVMTDsKKwl9CiAgICAgKmxlbiA9IFZFU0FCdWZfbGVuOwogICAgICpyc2VnID0gVkVTQUJ1Zl9yc2VnOwogICAgICpyb2ZmID0gVkVTQUJ1Zl9yb2ZmOwpAQCAtNjMyLDExICs2MzIsMTEgQEAKIAogICAgIC8qIFF1aWNrIG9wdGltaXplZCBwYXRoIGZvciBtb3N0IGNvbW1vbiBjYXNlICovCiAgICAgaWYgKFNlc1N3aXRjaFJlYy5GbGFncyA9PSAtMSkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKIAogYWdhaW46CiAgICAgaWYgKERvc1JlcXVlc3RNdXRleFNlbShTZXNTd2l0Y2hSZWMuTXV0ZXgsIDEwMCkpCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAgICAgRmxhZ3MgPSBTZXNTd2l0Y2hSZWMuRmxhZ3M7CiAgICAgQ2FsbGJhY2sgPSBTZXNTd2l0Y2hSZWMuQ2FsbGJhY2s7CiAgICAgU2VzU3dpdGNoUmVjLkZsYWdzID0gLTE7CkBAIC02NDcsMTUgKzY0NywxNSBAQAogICAgIGlzU2Vzc2lvblN3aXRjaGluZyA9IGZhbHNlOwogICAgIERvc1Bvc3RFdmVudFNlbShTZXNTd2l0Y2hSZWMuRXZlbnQpOwogICAgIGlmIChGbGFncyA9PSBQTV9ERUFDVElWQVRFICYmIE1vZGUgPT0gUE1fU1VTUEVORF9BUFApCi0gICAgICAgIC8qIFN1c3BlbmQgYXBwbGljYXRpb24gdW50aWwgd2Ugc3dpdGNoIGJhY2sgdG8gb3VyIGFwcGxpY2F0aW9uICovCi0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIERvc1NsZWVwICg1MDApOwotICAgICAgICAgICAgLyogU2VzU3dpdGNoUmVjLkZsYWdzIGlzIHZvbGF0aWxlIHNvIG9wdGltaXplcgotICAgICAgICAgICAgICogd29uJ3QgbG9hZCBpdCBpbnRvIGEgcmVnaXN0ZXIKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKFNlc1N3aXRjaFJlYy5GbGFncyAhPSAtMSkKLSAgICAgICAgICAgICAgICBnb3RvIGFnYWluOwotICAgICAgICAgICAgfQorCS8qIFN1c3BlbmQgYXBwbGljYXRpb24gdW50aWwgd2Ugc3dpdGNoIGJhY2sgdG8gb3VyIGFwcGxpY2F0aW9uICovCisJZm9yICg7OykgeworCSAgICBEb3NTbGVlcCAoNTAwKTsKKwkgICAgLyogU2VzU3dpdGNoUmVjLkZsYWdzIGlzIHZvbGF0aWxlIHNvIG9wdGltaXplcgorCSAgICAgKiB3b24ndCBsb2FkIGl0IGludG8gYSByZWdpc3RlcgorCSAgICAgKi8KKwkgICAgaWYgKFNlc1N3aXRjaFJlYy5GbGFncyAhPSAtMSkKKwkJZ290byBhZ2FpbjsKKwkgICAgfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjY5LDcgKzY2OSw3IEBACiAgICAgVUxPTkcgQ291bnQ7CiAKICAgICBpZiAoRG9zUmVxdWVzdE11dGV4U2VtKFNlc1N3aXRjaFJlYy5NdXRleCwgMTAwMDApKQotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogCiAgICAgLyogV2UncmUgZ29pbmcgdG8gd2FpdCBvbiB0aGF0IHNlbWFwaG9yZSAqLwogICAgIERvc1Jlc2V0RXZlbnRTZW0oU2VzU3dpdGNoUmVjLkV2ZW50LCAmQ291bnQpOwpAQCAtNjkyLDEwICs2OTIsMTAgQEAKICAgICBVU0hPUlQgTm90aWZ5VHlwZTsKIAogICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKFZpb01vZGVXYWl0KFZNV1JfUE9QVVAsICZOb3RpZnlUeXBlLCAwKSAhPSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIF9QTV9TZXNzaW9uU3dpdGNoRXZlbnQoc2F2ZVN0YXRlLCBQTV9SRUFDVElWQVRFKTsKLSAgICAgICAgfQorCWlmIChWaW9Nb2RlV2FpdChWTVdSX1BPUFVQLCAmTm90aWZ5VHlwZSwgMCkgIT0gMCkKKwkgICAgYnJlYWs7CisJX1BNX1Nlc3Npb25Td2l0Y2hFdmVudChzYXZlU3RhdGUsIFBNX1JFQUNUSVZBVEUpOworCX0KICAgICBWaW9Nb2RlVW5kbyhVTkRPSV9SRUxFQVNFT1dORVIsIFVORE9LX0VSUk9SQ09ERSwgKEhWSU8pMCk7CiB9CiAKQEAgLTcwOSwxMyArNzA5LDEzIEBACiB7CiAgICAgVVNIT1JUIE5vdGlmeVR5cGU7CiAgICAgZm9yICg7OykgewotICAgICAgICBpZiAoVmlvU2F2UmVkcmF3V2FpdChWU1JXSV9TQVZFQU5EUkVEUkFXLCAmTm90aWZ5VHlwZSwgMCkgIT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoTm90aWZ5VHlwZSA9PSBWU1JXTl9TQVZFKQotICAgICAgICAgICAgX1BNX1Nlc3Npb25Td2l0Y2hFdmVudChzYXZlU3RhdGUsIFBNX0RFQUNUSVZBVEUpOwotICAgICAgICBlbHNlIGlmIChOb3RpZnlUeXBlID09IFZTUldOX1JFRFJBVykKLSAgICAgICAgICAgIF9QTV9TZXNzaW9uU3dpdGNoRXZlbnQoc2F2ZVN0YXRlLCBQTV9SRUFDVElWQVRFKTsKLSAgICAgICAgfQorCWlmIChWaW9TYXZSZWRyYXdXYWl0KFZTUldJX1NBVkVBTkRSRURSQVcsICZOb3RpZnlUeXBlLCAwKSAhPSAwKQorCSAgICBicmVhazsKKwlpZiAoTm90aWZ5VHlwZSA9PSBWU1JXTl9TQVZFKQorCSAgICBfUE1fU2Vzc2lvblN3aXRjaEV2ZW50KHNhdmVTdGF0ZSwgUE1fREVBQ1RJVkFURSk7CisJZWxzZSBpZiAoTm90aWZ5VHlwZSA9PSBWU1JXTl9SRURSQVcpCisJICAgIF9QTV9TZXNzaW9uU3dpdGNoRXZlbnQoc2F2ZVN0YXRlLCBQTV9SRUFDVElWQVRFKTsKKwl9CiAgICAgVmlvU2F2UmVkcmF3VW5kbyhVTkRPSV9SRUxFQVNFT1dORVIsIFVORE9LX0VSUk9SQ09ERSwgKEhWSU8pMCk7CiB9CiAKQEAgLTcyNiwyNCArNzI2LDI0IEBACiB2b2lkIFBNQVBJIFBNX3NldFN1c3BlbmRBcHBDYWxsYmFjaygKICAgICBQTV9zYXZlU3RhdGVfY2Igc2F2ZVN0YXRlKQogewotICAgIC8vIElmIFBNIGlzbid0IGxvYWRlZCwgdGhpcyBzdHVmZiB3aWxsIGNhdXNlIGNyYXNoZXMhCisgICAgLyogSWYgUE0gaXNuJ3QgbG9hZGVkLCB0aGlzIHN0dWZmIHdpbGwgY2F1c2UgY3Jhc2hlcyEgKi8KICAgICBpZiAoX19pc1NoZWxsTG9hZGVkKCkpIHsKLSAgICAgICAgaWYgKHNhdmVTdGF0ZSkgewotICAgICAgICAgICAgLyogQ3JlYXRlIHRoZSB0aHJlYWRzIHJlc3BvbnNpYmxlIGZvciB0cmFja2luZyBjb25zb2xlIHN3aXRjaGVzICovCi0gICAgICAgICAgICBTZXNTd2l0Y2hSZWMuRmxhZ3MgPSAtMTsKLSAgICAgICAgICAgIERvc0NyZWF0ZU11dGV4U2VtKE5VTEwsICZTZXNTd2l0Y2hSZWMuTXV0ZXgsIDAsIEZBTFNFKTsKLSAgICAgICAgICAgIERvc0NyZWF0ZUV2ZW50U2VtKE5VTEwsICZTZXNTd2l0Y2hSZWMuRXZlbnQsIDAsIEZBTFNFKTsKLSAgICAgICAgICAgIF9iZWdpbnRocmVhZCAoKHZvaWQoKikodm9pZCopKV9QTV9Db25zb2xlU3dpdGNoLE5VTEwsU0VTU0lPTl9TV0lUQ0hfU1RBQ0tfU0laRSwgKHZvaWQqKXNhdmVTdGF0ZSk7Ci0gICAgICAgICAgICBfYmVnaW50aHJlYWQgKCh2b2lkKCopKHZvaWQqKSlfUE1fQ29uc29sZVBvcHVwLE5VTEwsU0VTU0lPTl9TV0lUQ0hfU1RBQ0tfU0laRSwgKHZvaWQqKXNhdmVTdGF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogS2lsbCB0aGUgdGhyZWFkcyByZXNwb25zaWJsZSBmb3IgdHJhY2tpbmcgY29uc29sZSBzd2l0Y2hlcyAqLwotICAgICAgICAgICAgVmlvTW9kZVVuZG8oVU5ET0lfUkVMRUFTRU9XTkVSLCBVTkRPS19URVJNSU5BVEUsIChIVklPKTApOwotICAgICAgICAgICAgVmlvU2F2UmVkcmF3VW5kbyhVTkRPSV9SRUxFQVNFT1dORVIsIFVORE9LX1RFUk1JTkFURSwgKEhWSU8pMCk7Ci0gICAgICAgICAgICBEb3NDbG9zZUV2ZW50U2VtKFNlc1N3aXRjaFJlYy5FdmVudCk7Ci0gICAgICAgICAgICBEb3NDbG9zZU11dGV4U2VtKFNlc1N3aXRjaFJlYy5NdXRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoc2F2ZVN0YXRlKSB7CisJICAgIC8qIENyZWF0ZSB0aGUgdGhyZWFkcyByZXNwb25zaWJsZSBmb3IgdHJhY2tpbmcgY29uc29sZSBzd2l0Y2hlcyAqLworCSAgICBTZXNTd2l0Y2hSZWMuRmxhZ3MgPSAtMTsKKwkgICAgRG9zQ3JlYXRlTXV0ZXhTZW0oTlVMTCwgJlNlc1N3aXRjaFJlYy5NdXRleCwgMCwgRkFMU0UpOworCSAgICBEb3NDcmVhdGVFdmVudFNlbShOVUxMLCAmU2VzU3dpdGNoUmVjLkV2ZW50LCAwLCBGQUxTRSk7CisJICAgIF9iZWdpbnRocmVhZCAoKHZvaWQoKikodm9pZCopKV9QTV9Db25zb2xlU3dpdGNoLE5VTEwsU0VTU0lPTl9TV0lUQ0hfU1RBQ0tfU0laRSwgKHZvaWQqKXNhdmVTdGF0ZSk7CisJICAgIF9iZWdpbnRocmVhZCAoKHZvaWQoKikodm9pZCopKV9QTV9Db25zb2xlUG9wdXAsTlVMTCxTRVNTSU9OX1NXSVRDSF9TVEFDS19TSVpFLCAodm9pZCopc2F2ZVN0YXRlKTsKKwkgICAgfQorCWVsc2UgeworCSAgICAvKiBLaWxsIHRoZSB0aHJlYWRzIHJlc3BvbnNpYmxlIGZvciB0cmFja2luZyBjb25zb2xlIHN3aXRjaGVzICovCisJICAgIFZpb01vZGVVbmRvKFVORE9JX1JFTEVBU0VPV05FUiwgVU5ET0tfVEVSTUlOQVRFLCAoSFZJTykwKTsKKwkgICAgVmlvU2F2UmVkcmF3VW5kbyhVTkRPSV9SRUxFQVNFT1dORVIsIFVORE9LX1RFUk1JTkFURSwgKEhWSU8pMCk7CisJICAgIERvc0Nsb3NlRXZlbnRTZW0oU2VzU3dpdGNoUmVjLkV2ZW50KTsKKwkgICAgRG9zQ2xvc2VNdXRleFNlbShTZXNTd2l0Y2hSZWMuTXV0ZXgpOworCSAgICB9CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzU4LDcgKzc1OCw3IEBACiAgICAgVklPTU9ERUlORk8gIHZtaTsKIAogICAgIGlmICghY3MpCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAKICAgICBtZW1jcHkoJnZtaSwgJmNzLT52bWksIHNpemVvZiAoVklPTU9ERUlORk8pKTsKICAgICBWaW9TZXRNb2RlKCZ2bWksIChIVklPKTApOwpAQCAtNzg5LDcgKzc4OSw3IEBACiAgICAgLyogSWYgc2Vzc2lvbiBzd2l0Y2ggaXMgaW4gcHJvZ3Jlc3MsIGNhbGxpbmcgaW50byBWSU8gY2F1c2VzIGRlYWRsb2NrcyEgKi8KICAgICAvKiBBbHNvIHRoaXMgY2FsbCB0byBWSU8gc2NyZXdzIHVwIG91ciBjb25zb2xlIGxpYnJhcnkgb24gREJDUyBib3hlcy4uLiAqLwogICAgIGlmICghaXNTZXNzaW9uU3dpdGNoaW5nICYmICFfX0lzREJDU1N5c3RlbSgpKQotICAgICAgICBWaW9TZXRDdXJQb3MoeSx4LDApOworCVZpb1NldEN1clBvcyh5LHgsMCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04MTMsNyArODEzLDcgQEAKICAgICBQTV9pbnRIYW5kbGVyIGloLAogICAgIGludCBmcmVxdWVuY3kpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgKHZvaWQpaWg7CiAgICAgKHZvaWQpZnJlcXVlbmN5OwogICAgIHJldHVybiBmYWxzZTsKQEAgLTgyNiw3ICs4MjYsNyBAQAogdm9pZCBQTUFQSSBQTV9zZXRSZWFsVGltZUNsb2NrRnJlcXVlbmN5KAogICAgIGludCBmcmVxdWVuY3kpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgKHZvaWQpZnJlcXVlbmN5OwogfQogCkBAIC04MzYsNyArODM2LDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVSZWFsVGltZUNsb2NrSGFuZGxlcih2b2lkKQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIQorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzISAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtODgxLDcgKzg4MSw3IEBACiB7CiAgICAgc3RhdGljIGNoYXIgcGF0aFtDQ0hNQVhQQVRIXTsKICAgICBpZiAoZ2V0ZW52KCJOVUNMRVVTX1BBVEgiKSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gZ2V0ZW52KCJOVUNMRVVTX1BBVEgiKTsKKwlyZXR1cm4gZ2V0ZW52KCJOVUNMRVVTX1BBVEgiKTsKICAgICBzdHJjcHkocGF0aCwieDpcXG9zMlxcZHJpdmVycyIpOwogICAgIHBhdGhbMF0gPSBQTV9nZXRCb290RHJpdmUoKTsKICAgICBQTV9iYWNrc2xhc2gocGF0aCk7CkBAIC05MjAsMTAgKzkyMCwxMCBAQAogICAgIHN0YXRpYyBjaGFyIG5hbWVbNDBdLCplbnY7CiAKICAgICBpZiAoKGVudiA9IGdldGVudigiSE9TVE5BTUUiKSkgIT0gTlVMTCkgewotICAgICAgICBzdHJuY3B5KG5hbWUsZW52LHNpemVvZihuYW1lKSk7Ci0gICAgICAgIG5hbWVbc2l6ZW9mKG5hbWUpLTFdID0gMDsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICAgIH0KKwlzdHJuY3B5KG5hbWUsZW52LHNpemVvZihuYW1lKSk7CisJbmFtZVtzaXplb2YobmFtZSktMV0gPSAwOworCXJldHVybiBuYW1lOworCX0KICAgICByZXR1cm4gIk9TMiI7CiB9CiAKQEAgLTk3MCw3ICs5NzAsNyBAQAogICAgIHBhcm1zSW5bMV0gPSBsaW1pdDsKICAgICBwYXJtc0luWzJdID0gaXNDYWNoZWQ7CiAgICAgaWYgKChsaW5lYXIgPSBDYWxsU0RESGVscChQTUhFTFBfTUFQUEhZUykpID09IDApCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogICAgIHJldHVybiAodm9pZCopKGxpbmVhciArIGJhc2VPZnMpOwogfQogCkBAIC0xMDMxLDkgKzEwMzEsOSBAQAogICAgIGludCBwb3J0KQogewogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNGODsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgyRjg7Ci0gICAgICAgIH0KKwljYXNlIDA6IHJldHVybiAweDNGODsKKwljYXNlIDE6IHJldHVybiAweDJGODsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDUsMTAgKzEwNDUsMTAgQEAKICAgICBpbnQgcG9ydCkKIHsKICAgICBzd2l0Y2ggKHBvcnQpIHsKLSAgICAgICAgY2FzZSAwOiByZXR1cm4gMHgzQkM7Ci0gICAgICAgIGNhc2UgMTogcmV0dXJuIDB4Mzc4OwotICAgICAgICBjYXNlIDI6IHJldHVybiAweDI3ODsKLSAgICAgICAgfQorCWNhc2UgMDogcmV0dXJuIDB4M0JDOworCWNhc2UgMTogcmV0dXJuIDB4Mzc4OworCWNhc2UgMjogcmV0dXJuIDB4Mjc4OworCX0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTExMiw3ICsxMTEyLDcgQEAKICAgICB1aW50IHJfb2ZmKQogewogICAgIGlmIChyX3NlZyA9PSAweEZGRkYpCi0gICAgICAgIHJldHVybiAmUk1CdWZbcl9vZmZdOworCXJldHVybiAmUk1CdWZbcl9vZmZdOwogICAgIHJldHVybiBsb3dNZW0gKyBNS19QSFlTKHJfc2VnLHJfb2ZmKTsKIH0KIApAQCAtMTEyNiw3ICsxMTI2LDcgQEAKICAgICB1aW50ICpyX29mZikKIHsKICAgICBpZiAoc2l6ZSA+IHNpemVvZihSTUJ1ZikpCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogICAgICpyX3NlZyA9IDB4RkZGRjsKICAgICAqcl9vZmYgPSAweDAwMDA7CiAgICAgcmV0dXJuICZSTUJ1ZjsKQEAgLTExNjAsNzkgKzExNjAsNzkgQEAKICAgICB1bG9uZyAgIGVheCA9IDA7CiAKICAgICBpZiAoIUluaXRJbnQxMCgpKQotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogICAgIG1lbXNldCgmcm1yZWdzLCAwLCBzaXplb2Yocm1yZWdzKSk7CiAgICAgcm1yZWdzLnVsQklPU0ludE5vID0gaW50bm87CiAgICAgSU5EUE1JKGVheCk7IElORFBNSShlYngpOyBJTkRQTUkoZWN4KTsgSU5EUE1JKGVkeCk7IElORFBNSShlc2kpOyBJTkRQTUkoZWRpKTsKICAgICBybXJlZ3MuYUNSRi5yZWdfZHMgPSByZWdzLT5kczsKICAgICBybXJlZ3MuYUNSRi5yZWdfZXMgPSByZWdzLT5lczsKICAgICBpZiAoaW50bm8gPT0gMHgxMCkgewotICAgICAgICBlYXggPSBybXJlZ3MuYUNSRi5yZWdfZWF4OwotICAgICAgICBzd2l0Y2ggKGVheCAmIDB4RkZGRikgewotICAgICAgICAgICAgY2FzZSAweDRGMDA6Ci0gICAgICAgICAgICAgICAgLyogV2UgaGF2ZSB0byBoYWNrIHRoZSB3YXkgdGhpcyBmdW5jdGlvbiB3b3JrcywgZHVlIHRvCi0gICAgICAgICAgICAgICAgICogc29tZSBidWdzIGluIHRoZSBJQk0gbWluaS1WRE0gQklPUyBzdXBwb3J0LiBTcGVjaWZpY2FsbHkKLSAgICAgICAgICAgICAgICAgKiB3ZSBuZWVkIHRvIG1ha2UgdGhlIGlucHV0IGJ1ZmZlciBhbmQgb3V0cHV0IGJ1ZmZlciB0aGUKLSAgICAgICAgICAgICAgICAgKiAnc2FtZScgYnVmZmVyLCBhbmQgdGhhdCBFUzpTSSBwb2ludHMgdG8gdGhlIG91dHB1dAotICAgICAgICAgICAgICAgICAqIGJ1ZmZlciAoaWdub3JlZCBieSB0aGUgQklPUykuIFRoZSBkYXRhIHdpbGwgZW5kIHVwCi0gICAgICAgICAgICAgICAgICogYmVpbmcgcmV0dXJuZWQgaW4gdGhlIGlucHV0IGJ1ZmZlciwgZXhjZXB0IGZvciB0aGUKLSAgICAgICAgICAgICAgICAgKiBmaXJzdCBmb3VyIGJ5dGVzICgnVkVTQScpIHRoYXQgd2lsbCBub3QgYmUgcmV0dXJuZWQuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcm1yZWdzLnBCWzBdLmJCdWZmZXJUeXBlID0gSU5QVVRfQlVGRkVSOwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlswXS5iU2VsQ1JGID0gUkVHX09GRlNFVChyZWdfZXMpOwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlswXS5iT2ZmQ1JGID0gUkVHX09GRlNFVChyZWdfZWRpKTsKLSAgICAgICAgICAgICAgICBybXJlZ3MucEJbMF0ucEFkZHJlc3MgPSBSTUJ1ZjsKLSAgICAgICAgICAgICAgICBybXJlZ3MucEJbMF0udWxTaXplID0gNDsKLSAgICAgICAgICAgICAgICBybXJlZ3MucEJbMV0uYkJ1ZmZlclR5cGUgPSBPVVRQVVRfQlVGRkVSOwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlsxXS5iU2VsQ1JGID0gUkVHX09GRlNFVChyZWdfZXMpOwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlsxXS5iT2ZmQ1JGID0gUkVHX09GRlNFVChyZWdfZXNpKTsKLSAgICAgICAgICAgICAgICBybXJlZ3MucEJbMV0ucEFkZHJlc3MgPSAoKFBCWVRFKVJNQnVmKSs0OwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlsxXS51bFNpemUgPSA1MTItNDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHg0RjAxOgotICAgICAgICAgICAgICAgIHJtcmVncy5wQlswXS5iQnVmZmVyVHlwZSA9IE9VVFBVVF9CVUZGRVI7Ci0gICAgICAgICAgICAgICAgcm1yZWdzLnBCWzBdLmJTZWxDUkYgPSBSRUdfT0ZGU0VUKHJlZ19lcyk7Ci0gICAgICAgICAgICAgICAgcm1yZWdzLnBCWzBdLmJPZmZDUkYgPSBSRUdfT0ZGU0VUKHJlZ19lZGkpOwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlswXS5wQWRkcmVzcyA9IFJNQnVmOwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlswXS51bFNpemUgPSAyNTY7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4NEYwMjoKLSAgICAgICAgICAgICAgICBybXJlZ3MucEJbMF0uYkJ1ZmZlclR5cGUgPSBJTlBVVF9CVUZGRVI7Ci0gICAgICAgICAgICAgICAgcm1yZWdzLnBCWzBdLmJTZWxDUkYgPSBSRUdfT0ZGU0VUKHJlZ19lcyk7Ci0gICAgICAgICAgICAgICAgcm1yZWdzLnBCWzBdLmJPZmZDUkYgPSBSRUdfT0ZGU0VUKHJlZ19lZGkpOwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlswXS5wQWRkcmVzcyA9IFJNQnVmOwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlswXS51bFNpemUgPSAyNTY7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4NEYwOToKLSAgICAgICAgICAgICAgICBybXJlZ3MucEJbMF0uYkJ1ZmZlclR5cGUgPSBJTlBVVF9CVUZGRVI7Ci0gICAgICAgICAgICAgICAgcm1yZWdzLnBCWzBdLmJTZWxDUkYgPSBSRUdfT0ZGU0VUKHJlZ19lcyk7Ci0gICAgICAgICAgICAgICAgcm1yZWdzLnBCWzBdLmJPZmZDUkYgPSBSRUdfT0ZGU0VUKHJlZ19lZGkpOwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlswXS5wQWRkcmVzcyA9IFJNQnVmOwotICAgICAgICAgICAgICAgIHJtcmVncy5wQlswXS51bFNpemUgPSAxMDI0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDRGMEE6Ci0gICAgICAgICAgICAgICAgLyogRHVlIHRvIGJ1Z3MgaW4gdGhlIG1pbmktVkRNIGluIE9TLzIsIHRoZSAweDRGMEEgcHJvdGVjdGVkCi0gICAgICAgICAgICAgICAgICogbW9kZSBpbnRlcmZhY2UgZnVuY3Rpb25zIHdpbGwgbm90IHdvcmsgKHdlIG5ldmVyIGdldCBhbnkKLSAgICAgICAgICAgICAgICAgKiBzZWxlY3RvcnMgcmV0dXJuZWQpLCBzbyB3ZSBmYWlsIHRoaXMgZnVuY3Rpb24gaGVyZS4gVGhlCi0gICAgICAgICAgICAgICAgICogcmVzdCBvZiB0aGUgVkJFL0NvcmUgZHJpdmVyIHdpbGwgd29yayBwcm9wZXJseSBpZiB0aGlzCi0gICAgICAgICAgICAgICAgICogZnVuY3Rpb24gaXMgZmFpbGVkLCBiZWNhdXNlIHRoZSBWQkUgMi4wIGFuZCAzLjAgc3BlY3MKLSAgICAgICAgICAgICAgICAgKiBhbGxvdyBmb3IgdGhpcy4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICByZWdzLT5lYXggPSAweDAxNEY7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJZWF4ID0gcm1yZWdzLmFDUkYucmVnX2VheDsKKwlzd2l0Y2ggKGVheCAmIDB4RkZGRikgeworCSAgICBjYXNlIDB4NEYwMDoKKwkJLyogV2UgaGF2ZSB0byBoYWNrIHRoZSB3YXkgdGhpcyBmdW5jdGlvbiB3b3JrcywgZHVlIHRvCisJCSAqIHNvbWUgYnVncyBpbiB0aGUgSUJNIG1pbmktVkRNIEJJT1Mgc3VwcG9ydC4gU3BlY2lmaWNhbGx5CisJCSAqIHdlIG5lZWQgdG8gbWFrZSB0aGUgaW5wdXQgYnVmZmVyIGFuZCBvdXRwdXQgYnVmZmVyIHRoZQorCQkgKiAnc2FtZScgYnVmZmVyLCBhbmQgdGhhdCBFUzpTSSBwb2ludHMgdG8gdGhlIG91dHB1dAorCQkgKiBidWZmZXIgKGlnbm9yZWQgYnkgdGhlIEJJT1MpLiBUaGUgZGF0YSB3aWxsIGVuZCB1cAorCQkgKiBiZWluZyByZXR1cm5lZCBpbiB0aGUgaW5wdXQgYnVmZmVyLCBleGNlcHQgZm9yIHRoZQorCQkgKiBmaXJzdCBmb3VyIGJ5dGVzICgnVkVTQScpIHRoYXQgd2lsbCBub3QgYmUgcmV0dXJuZWQuCisJCSAqLworCQlybXJlZ3MucEJbMF0uYkJ1ZmZlclR5cGUgPSBJTlBVVF9CVUZGRVI7CisJCXJtcmVncy5wQlswXS5iU2VsQ1JGID0gUkVHX09GRlNFVChyZWdfZXMpOworCQlybXJlZ3MucEJbMF0uYk9mZkNSRiA9IFJFR19PRkZTRVQocmVnX2VkaSk7CisJCXJtcmVncy5wQlswXS5wQWRkcmVzcyA9IFJNQnVmOworCQlybXJlZ3MucEJbMF0udWxTaXplID0gNDsKKwkJcm1yZWdzLnBCWzFdLmJCdWZmZXJUeXBlID0gT1VUUFVUX0JVRkZFUjsKKwkJcm1yZWdzLnBCWzFdLmJTZWxDUkYgPSBSRUdfT0ZGU0VUKHJlZ19lcyk7CisJCXJtcmVncy5wQlsxXS5iT2ZmQ1JGID0gUkVHX09GRlNFVChyZWdfZXNpKTsKKwkJcm1yZWdzLnBCWzFdLnBBZGRyZXNzID0gKChQQllURSlSTUJ1ZikrNDsKKwkJcm1yZWdzLnBCWzFdLnVsU2l6ZSA9IDUxMi00OworCQlicmVhazsKKwkgICAgY2FzZSAweDRGMDE6CisJCXJtcmVncy5wQlswXS5iQnVmZmVyVHlwZSA9IE9VVFBVVF9CVUZGRVI7CisJCXJtcmVncy5wQlswXS5iU2VsQ1JGID0gUkVHX09GRlNFVChyZWdfZXMpOworCQlybXJlZ3MucEJbMF0uYk9mZkNSRiA9IFJFR19PRkZTRVQocmVnX2VkaSk7CisJCXJtcmVncy5wQlswXS5wQWRkcmVzcyA9IFJNQnVmOworCQlybXJlZ3MucEJbMF0udWxTaXplID0gMjU2OworCQlicmVhazsKKwkgICAgY2FzZSAweDRGMDI6CisJCXJtcmVncy5wQlswXS5iQnVmZmVyVHlwZSA9IElOUFVUX0JVRkZFUjsKKwkJcm1yZWdzLnBCWzBdLmJTZWxDUkYgPSBSRUdfT0ZGU0VUKHJlZ19lcyk7CisJCXJtcmVncy5wQlswXS5iT2ZmQ1JGID0gUkVHX09GRlNFVChyZWdfZWRpKTsKKwkJcm1yZWdzLnBCWzBdLnBBZGRyZXNzID0gUk1CdWY7CisJCXJtcmVncy5wQlswXS51bFNpemUgPSAyNTY7CisJCWJyZWFrOworCSAgICBjYXNlIDB4NEYwOToKKwkJcm1yZWdzLnBCWzBdLmJCdWZmZXJUeXBlID0gSU5QVVRfQlVGRkVSOworCQlybXJlZ3MucEJbMF0uYlNlbENSRiA9IFJFR19PRkZTRVQocmVnX2VzKTsKKwkJcm1yZWdzLnBCWzBdLmJPZmZDUkYgPSBSRUdfT0ZGU0VUKHJlZ19lZGkpOworCQlybXJlZ3MucEJbMF0ucEFkZHJlc3MgPSBSTUJ1ZjsKKwkJcm1yZWdzLnBCWzBdLnVsU2l6ZSA9IDEwMjQ7CisJCWJyZWFrOworCSAgICBjYXNlIDB4NEYwQToKKwkJLyogRHVlIHRvIGJ1Z3MgaW4gdGhlIG1pbmktVkRNIGluIE9TLzIsIHRoZSAweDRGMEEgcHJvdGVjdGVkCisJCSAqIG1vZGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB3aWxsIG5vdCB3b3JrICh3ZSBuZXZlciBnZXQgYW55CisJCSAqIHNlbGVjdG9ycyByZXR1cm5lZCksIHNvIHdlIGZhaWwgdGhpcyBmdW5jdGlvbiBoZXJlLiBUaGUKKwkJICogcmVzdCBvZiB0aGUgVkJFL0NvcmUgZHJpdmVyIHdpbGwgd29yayBwcm9wZXJseSBpZiB0aGlzCisJCSAqIGZ1bmN0aW9uIGlzIGZhaWxlZCwgYmVjYXVzZSB0aGUgVkJFIDIuMCBhbmQgMy4wIHNwZWNzCisJCSAqIGFsbG93IGZvciB0aGlzLgorCQkgKi8KKwkJcmVncy0+ZWF4ID0gMHgwMTRGOworCQlyZXR1cm47CisJICAgIH0KKwl9CiAgICAgaWYgKHVzZVZQTUkpCi0gICAgICAgIFBNX1ZJREVPUE1JMzJSZXF1ZXN0KCZBZGFwdGVyLFBNSVJFUVVFU1RfU09GVFdBUkVJTlQsTlVMTCwmcm1yZWdzKTsKKwlQTV9WSURFT1BNSTMyUmVxdWVzdCgmQWRhcHRlcixQTUlSRVFVRVNUX1NPRlRXQVJFSU5ULE5VTEwsJnJtcmVncyk7CiAgICAgZWxzZSB7Ci0gICAgICAgIERvc1N5c0N0bCg2LCAmcm1yZWdzKTsKLSAgICAgICAgfQorCURvc1N5c0N0bCg2LCAmcm1yZWdzKTsKKwl9CiAKICAgICBPVVREUE1JKGVheCk7IE9VVERQTUkoZWJ4KTsgT1VURFBNSShlY3gpOyBPVVREUE1JKGVkeCk7IE9VVERQTUkoZXNpKTsgT1VURFBNSShlZGkpOwogICAgIGlmICgoKHJlZ3MtPmVheCAmIDB4RkZGRikgPT0gMHgwMDRGKSAmJiAoKGVheCAmIDB4RkZGRikgPT0gMHg0RjAwKSkgewotICAgICAgICAvKiBIYWNrIHRvIGZpeCB1cCB0aGUgbWlzc2luZyAnVkVTQScgc3RyaW5nIGZvciBtaW5pLVZETSAqLwotICAgICAgICBtZW1jcHkoUk1CdWYsIlZFU0EiLDQpOwotICAgICAgICB9CisJLyogSGFjayB0byBmaXggdXAgdGhlIG1pc3NpbmcgJ1ZFU0EnIHN0cmluZyBmb3IgbWluaS1WRE0gKi8KKwltZW1jcHkoUk1CdWYsIlZFU0EiLDQpOworCX0KICAgICByZWdzLT5kcyA9IHJtcmVncy5hQ1JGLnJlZ19kczsKICAgICByZWdzLT5lcyA9IHJtcmVncy5hQ1JGLnJlZ19lczsKICAgICByZWdzLT5mbGFncyA9IHJtcmVncy5hQ1JGLnJlZ19lZmxhZzsKQEAgLTEzNTQsMTMgKzEzNTQsMTMgQEAKIAogICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIG5ldyBwYWdlIGJsb2NrLCBhbmQgYWRkIHRvIGhlYWQgb2YgbGlzdCAqLwogICAgIGlmIChEb3NBbGxvY1NoYXJlZE1lbSgodm9pZCoqKSZuZXdCbG9jayxOVUxMLFBBR0VfQkxPQ0tfU0laRSxPQkpfR0VUVEFCTEUgfCBQQUdfUkVBRCB8IFBBR19XUklURSB8IFBBR19DT01NSVQpKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKICAgICBpZiAoIVBNX2xvY2tEYXRhUGFnZXMobmV3QmxvY2ssUEFHRV9CTE9DS19TSVpFLCZuZXdCbG9jay0+bG9ja0hhbmRsZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogICAgIG5ld0Jsb2NrLT5wcmV2ID0gTlVMTDsKICAgICBuZXdCbG9jay0+bmV4dCA9IHBhZ2VCbG9ja3M7CiAgICAgaWYgKHBhZ2VCbG9ja3MpCi0gICAgICAgIHBhZ2VCbG9ja3MtPnByZXYgPSBuZXdCbG9jazsKKwlwYWdlQmxvY2tzLT5wcmV2ID0gbmV3QmxvY2s7CiAgICAgcGFnZUJsb2NrcyA9IG5ld0Jsb2NrOwogCiAgICAgLyogSW5pdGlhbGlzZSB0aGUgcGFnZSBhbGlnbmVkIGZyZWUgbGlzdCBmb3IgdGhlIHBhZ2UgYmxvY2sgKi8KQEAgLTEzNjksNyArMTM2OSw3IEBACiAgICAgbmV3QmxvY2stPmZyZWVMaXN0U3RhcnQgPSBuZXdCbG9jay0+ZnJlZUxpc3Q7CiAgICAgbmV3QmxvY2stPmZyZWVMaXN0RW5kID0gcCArIChQQUdFU19QRVJfQkxPQ0stMSkgKiBQTV9QQUdFX1NJWkU7CiAgICAgZm9yIChpID0gMDsgaSA8IFBBR0VTX1BFUl9CTE9DSzsgaSsrLHAgPSBuZXh0KQotICAgICAgICBGUkVFTElTVF9ORVhUKHApID0gbmV4dCA9IHAgKyBQTV9QQUdFX1NJWkU7CisJRlJFRUxJU1RfTkVYVChwKSA9IG5leHQgPSBwICsgUE1fUEFHRV9TSVpFOwogICAgIEZSRUVMSVNUX05FWFQocCAtIFBNX1BBR0VfU0laRSkgPSBOVUxMOwogICAgIHJldHVybiBuZXdCbG9jazsKIH0KQEAgLTEzODgsMTEgKzEzODgsMTEgQEAKICAgICAgKiBwYWdlIGJsb2NrIGlmIG5vIGZyZWUgYmxvY2tzIGFyZSBmb3VuZC4KICAgICAgKi8KICAgICBmb3IgKGJsb2NrID0gcGFnZUJsb2NrczsgYmxvY2sgIT0gTlVMTDsgYmxvY2sgPSBibG9jay0+bmV4dCkgewotICAgICAgICBpZiAoYmxvY2stPmZyZWVDb3VudCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJaWYgKGJsb2NrLT5mcmVlQ291bnQpCisJICAgIGJyZWFrOworCX0KICAgICBpZiAoYmxvY2sgPT0gTlVMTCAmJiAoYmxvY2sgPSBQTV9hZGROZXdQYWdlQmxvY2soKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAgICAgYmxvY2stPmZyZWVDb3VudC0tOwogICAgIHAgPSBibG9jay0+ZnJlZUxpc3Q7CiAgICAgYmxvY2stPmZyZWVMaXN0ID0gRlJFRUxJU1RfTkVYVChwKTsKQEAgLTE0MTEsMzYgKzE0MTEsMzYgQEAKIAogICAgIC8qIEZpcnN0IGZpbmQgdGhlIHBhZ2UgYmxvY2sgdGhhdCB0aGlzIHBhZ2UgYmVsb25ncyB0byAqLwogICAgIGZvciAoYmxvY2sgPSBwYWdlQmxvY2tzOyBibG9jayAhPSBOVUxMOyBibG9jayA9IGJsb2NrLT5uZXh0KSB7Ci0gICAgICAgIGlmIChwID49IGJsb2NrLT5mcmVlTGlzdFN0YXJ0ICYmIHAgPD0gYmxvY2stPmZyZWVMaXN0RW5kKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlpZiAocCA+PSBibG9jay0+ZnJlZUxpc3RTdGFydCAmJiBwIDw9IGJsb2NrLT5mcmVlTGlzdEVuZCkKKwkgICAgYnJlYWs7CisJfQogICAgIENIRUNLKGJsb2NrICE9IE5VTEwpOwogCiAgICAgLyogTm93IGZyZWUgdGhlIGJsb2NrIGJ5IGFkZGluZyBpdCB0byB0aGUgZnJlZSBsaXN0ICovCiAgICAgRlJFRUxJU1RfTkVYVChwKSA9IGJsb2NrLT5mcmVlTGlzdDsKICAgICBibG9jay0+ZnJlZUxpc3QgPSBwOwogICAgIGlmICgrK2Jsb2NrLT5mcmVlQ291bnQgPT0gUEFHRVNfUEVSX0JMT0NLKSB7Ci0gICAgICAgIC8qIElmIGFsbCBwYWdlcyBpbiB0aGUgcGFnZSBibG9jayBhcmUgbm93IGZyZWUsIGZyZWUgdGhlIGVudGlyZQotICAgICAgICAgKiBwYWdlIGJsb2NrIGl0c2VsZi4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChibG9jayA9PSBwYWdlQmxvY2tzKSB7Ci0gICAgICAgICAgICAvKiBEZWxldGUgZnJvbSBoZWFkICovCi0gICAgICAgICAgICBwYWdlQmxvY2tzID0gYmxvY2stPm5leHQ7Ci0gICAgICAgICAgICBpZiAoYmxvY2stPm5leHQpCi0gICAgICAgICAgICAgICAgYmxvY2stPm5leHQtPnByZXYgPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIERlbGV0ZSBmcm9tIG1pZGRsZSBvZiBsaXN0ICovCi0gICAgICAgICAgICBDSEVDSyhibG9jay0+cHJldiAhPSBOVUxMKTsKLSAgICAgICAgICAgIGJsb2NrLT5wcmV2LT5uZXh0ID0gYmxvY2stPm5leHQ7Ci0gICAgICAgICAgICBpZiAoYmxvY2stPm5leHQpCi0gICAgICAgICAgICAgICAgYmxvY2stPm5leHQtPnByZXYgPSBibG9jay0+cHJldjsKLSAgICAgICAgICAgIH0KKwkvKiBJZiBhbGwgcGFnZXMgaW4gdGhlIHBhZ2UgYmxvY2sgYXJlIG5vdyBmcmVlLCBmcmVlIHRoZSBlbnRpcmUKKwkgKiBwYWdlIGJsb2NrIGl0c2VsZi4KKwkgKi8KKwlpZiAoYmxvY2sgPT0gcGFnZUJsb2NrcykgeworCSAgICAvKiBEZWxldGUgZnJvbSBoZWFkICovCisJICAgIHBhZ2VCbG9ja3MgPSBibG9jay0+bmV4dDsKKwkgICAgaWYgKGJsb2NrLT5uZXh0KQorCQlibG9jay0+bmV4dC0+cHJldiA9IE5VTEw7CisJICAgIH0KKwllbHNlIHsKKwkgICAgLyogRGVsZXRlIGZyb20gbWlkZGxlIG9mIGxpc3QgKi8KKwkgICAgQ0hFQ0soYmxvY2stPnByZXYgIT0gTlVMTCk7CisJICAgIGJsb2NrLT5wcmV2LT5uZXh0ID0gYmxvY2stPm5leHQ7CisJICAgIGlmIChibG9jay0+bmV4dCkKKwkJYmxvY2stPm5leHQtPnByZXYgPSBibG9jay0+cHJldjsKKwkgICAgfQogCi0gICAgICAgIC8qIFVubG9jayB0aGUgbWVtb3J5IGFuZCBmcmVlIGl0ICovCi0gICAgICAgIFBNX3VubG9ja0RhdGFQYWdlcyhibG9jayxQQUdFX0JMT0NLX1NJWkUsJmJsb2NrLT5sb2NrSGFuZGxlKTsKLSAgICAgICAgRG9zRnJlZU1lbShibG9jayk7Ci0gICAgICAgIH0KKwkvKiBVbmxvY2sgdGhlIG1lbW9yeSBhbmQgZnJlZSBpdCAqLworCVBNX3VubG9ja0RhdGFQYWdlcyhibG9jayxQQUdFX0JMT0NLX1NJWkUsJmJsb2NrLT5sb2NrSGFuZGxlKTsKKwlEb3NGcmVlTWVtKGJsb2NrKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDUzLDggKzE0NTMsOCBAQAogCiAgICAgLyogTWFwIGFsbCB0aGUgcGFnZSBibG9ja3MgYWJvdmUgaW50byB0aGUgc2hhcmVkIG1lbW9yeSBmb3IgcHJvY2VzcyAqLwogICAgIGZvciAoYmxvY2sgPSBwYWdlQmxvY2tzOyBibG9jayAhPSBOVUxMOyBibG9jayA9IGJsb2NrLT5uZXh0KSB7Ci0gICAgICAgIERvc0dldFNoYXJlZE1lbShibG9jaywgUEFHX1JFQUQgfCBQQUdfV1JJVEUpOwotICAgICAgICB9CisJRG9zR2V0U2hhcmVkTWVtKGJsb2NrLCBQQUdfUkVBRCB8IFBBR19XUklURSk7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTUzMyw3ICsxNTMzLDcgQEAKICAgICBJTlRDUkYgIHJtcmVnczsKIAogICAgIGlmICghSW5pdEludDEwKCkpCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAgICAgbWVtc2V0KCZybXJlZ3MsIDAsIHNpemVvZihybXJlZ3MpKTsKICAgICBybXJlZ3MudWxCSU9TSW50Tm8gPSAweDEwOwogICAgIHJtcmVncy5hQ1JGLnJlZ19lYXggPSAweDRGMDU7CkBAIC0xNTUyLDcgKzE1NTIsNyBAQAogICAgIElOVENSRiAgcm1yZWdzOwogCiAgICAgaWYgKCFJbml0SW50MTAoKSkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICBtZW1zZXQoJnJtcmVncywgMCwgc2l6ZW9mKHJtcmVncykpOwogICAgIHJtcmVncy51bEJJT1NJbnRObyA9IDB4MTA7CiAgICAgcm1yZWdzLmFDUkYucmVnX2VheCA9IDB4NEYwNTsKQEAgLTE1NzgsNyArMTU3OCw3IEBACiAgICAgSU5UQ1JGICBybXJlZ3M7CiAKICAgICBpZiAoIUluaXRJbnQxMCgpKQotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogICAgIG1lbXNldCgmcm1yZWdzLCAwLCBzaXplb2Yocm1yZWdzKSk7CiAgICAgcm1yZWdzLnVsQklPU0ludE5vID0gMHgxMDsKICAgICBybXJlZ3MuYUNSRi5yZWdfZWF4ID0gMHg0RjA3OwpAQCAtMTYyNSw4ICsxNjI1LDggQEAKICAgICByZXR1cm4gTVRSUl9lbmFibGVXcml0ZUNvbWJpbmUoYmFzZSxzaXplLHR5cGUpOwogfQogCi0vLyBUT0RPOiBNb3ZlIHRoZSBNVFJSIGhlbHBlciBzdHVmZiBpbnRvIHRoZSBjYWxsIGdhdGUsIG9yIGJldHRlciB5ZXQKLS8vICAgICAgIGVudGlyZWx5IGludG8gdGhlIHJpbmcgMCBoZWxwZXIgZHJpdmVyISEKKy8qIFRPRE86IE1vdmUgdGhlIE1UUlIgaGVscGVyIHN0dWZmIGludG8gdGhlIGNhbGwgZ2F0ZSwgb3IgYmV0dGVyIHlldCAqLworLyogICAgICAgZW50aXJlbHkgaW50byB0aGUgcmluZyAwIGhlbHBlciBkcml2ZXIhISAqLwogCiAvKiBNVFJSIGhlbHBlciBmdW5jdGlvbnMuIFRvIG1ha2UgaXQgZWFzaWVyIHRvIGltcGxlbWVudCB0aGUgTVRSUiBzdXBwb3J0CiAgKiB1bmRlciBPUy8yLCB3ZSBzaW1wbHkgcHV0IG91ciByaW5nIDAgaGVscGVyIGZ1bmN0aW9ucyBpbnRvIHRoZQpAQCAtMTcwNSw3ICsxNzA1LDcgQEAKIFBNX01PRFVMRSBQTUFQSSBQTV9sb2FkTGlicmFyeSgKICAgICBjb25zdCBjaGFyICpzekRMTE5hbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgdG8gbG9hZCBzaGFyZWQgbGlicmFyaWVzIQorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzIHRvIGxvYWQgc2hhcmVkIGxpYnJhcmllcyEgKi8KICAgICAodm9pZClzekRMTE5hbWU7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0xNzE0LDcgKzE3MTQsNyBAQAogICAgIFBNX01PRFVMRSBoTW9kdWxlLAogICAgIGNvbnN0IGNoYXIgKnN6UHJvY05hbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgKHZvaWQpaE1vZHVsZTsKICAgICAodm9pZClzelByb2NOYW1lOwogICAgIHJldHVybiBOVUxMOwpAQCAtMTcyMyw3ICsxNzIzLDcgQEAKIHZvaWQgUE1BUEkgUE1fZnJlZUxpYnJhcnkoCiAgICAgUE1fTU9EVUxFIGhNb2R1bGUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgKHZvaWQpaE1vZHVsZTsKIH0KIApAQCAtMTc0MCwxNSArMTc0MCwxNSBAQAogICAgIG1lbXNldChmaW5kRGF0YSwwLGZpbmREYXRhLT5kd1NpemUpOwogICAgIGZpbmREYXRhLT5kd1NpemUgPSBkd1NpemU7CiAgICAgaWYgKGJsay0+YXR0ckZpbGUgJiBGSUxFX1JFQURPTkxZKQotICAgICAgICBmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfUkVBRE9OTFk7CisJZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX1JFQURPTkxZOwogICAgIGlmIChibGstPmF0dHJGaWxlICYgRklMRV9ESVJFQ1RPUlkpCi0gICAgICAgIGZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9ESVJFQ1RPUlk7CisJZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX0RJUkVDVE9SWTsKICAgICBpZiAoYmxrLT5hdHRyRmlsZSAmIEZJTEVfQVJDSElWRUQpCi0gICAgICAgIGZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9BUkNISVZFOworCWZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9BUkNISVZFOwogICAgIGlmIChibGstPmF0dHJGaWxlICYgRklMRV9ISURERU4pCi0gICAgICAgIGZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9ISURERU47CisJZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX0hJRERFTjsKICAgICBpZiAoYmxrLT5hdHRyRmlsZSAmIEZJTEVfU1lTVEVNKQotICAgICAgICBmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfU1lTVEVNOworCWZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9TWVNURU07CiAgICAgZmluZERhdGEtPnNpemVMbyA9IGJsay0+Y2JGaWxlOwogICAgIGZpbmREYXRhLT5zaXplSGkgPSAwOwogICAgIHN0cm5jcHkoZmluZERhdGEtPm5hbWUsYmxrLT5hY2hOYW1lLFBNX01BWF9QQVRIKTsKQEAgLTE3NzAsOSArMTc3MCw5IEBACiAgICAgdWxvbmcgICAgICAgICAgIGNvdW50ID0gMTsKIAogICAgIGlmIChEb3NGaW5kRmlyc3QoKFBTWilmaWxlbmFtZSwmaGRpcixGSU5EX01BU0ssJmJsayxzaXplb2YoYmxrKSwmY291bnQsRklMX1NUQU5EQVJEKSA9PSBOT19FUlJPUikgewotICAgICAgICBjb252ZXJ0RmluZERhdGEoZmluZERhdGEsJmJsayk7Ci0gICAgICAgIHJldHVybiAodm9pZCopaGRpcjsKLSAgICAgICAgfQorCWNvbnZlcnRGaW5kRGF0YShmaW5kRGF0YSwmYmxrKTsKKwlyZXR1cm4gKHZvaWQqKWhkaXI7CisJfQogICAgIHJldHVybiBQTV9GSUxFX0lOVkFMSUQ7CiB9CiAKQEAgLTE3ODgsOSArMTc4OCw5IEBACiAgICAgdWxvbmcgICAgICAgICAgIGNvdW50ID0gMTsKIAogICAgIGlmIChEb3NGaW5kTmV4dCgoSERJUiloYW5kbGUsJmJsayxzaXplb2YoYmxrKSwmY291bnQpID09IE5PX0VSUk9SKSB7Ci0gICAgICAgIGNvbnZlcnRGaW5kRGF0YShmaW5kRGF0YSwmYmxrKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKwljb252ZXJ0RmluZERhdGEoZmluZERhdGEsJmJsayk7CisJcmV0dXJuIHRydWU7CisJfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTg1NywxNiArMTg1NywxNiBAQAogICAgIEZJTEVTVEFUVVMzIHM7CiAKICAgICBpZiAoRG9zUXVlcnlQYXRoSW5mbygoUFNaKWZpbGVuYW1lLEZJTF9TVEFOREFSRCwoUFZPSUQpJnMsc2l6ZW9mKHMpKSkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICBzLmF0dHJGaWxlID0gMDsKICAgICBpZiAoYXR0cmliICYgUE1fRklMRV9SRUFET05MWSkKLSAgICAgICAgcy5hdHRyRmlsZSB8PSBGSUxFX1JFQURPTkxZOworCXMuYXR0ckZpbGUgfD0gRklMRV9SRUFET05MWTsKICAgICBpZiAoYXR0cmliICYgUE1fRklMRV9BUkNISVZFKQotICAgICAgICBzLmF0dHJGaWxlIHw9IEZJTEVfQVJDSElWRUQ7CisJcy5hdHRyRmlsZSB8PSBGSUxFX0FSQ0hJVkVEOwogICAgIGlmIChhdHRyaWIgJiBQTV9GSUxFX0hJRERFTikKLSAgICAgICAgcy5hdHRyRmlsZSB8PSBGSUxFX0hJRERFTjsKKwlzLmF0dHJGaWxlIHw9IEZJTEVfSElEREVOOwogICAgIGlmIChhdHRyaWIgJiBQTV9GSUxFX1NZU1RFTSkKLSAgICAgICAgcy5hdHRyRmlsZSB8PSBGSUxFX1NZU1RFTTsKKwlzLmF0dHJGaWxlIHw9IEZJTEVfU1lTVEVNOwogICAgIERvc1NldFBhdGhJbmZvKChQU1opZmlsZW5hbWUsRklMX1NUQU5EQVJELChQVk9JRCkmcyxzaXplb2YocyksMEwpOwogfQogCkBAIC0xODgxLDE1ICsxODgxLDE1IEBACiAgICAgdWludCAgICAgICAgcmV0dmFsID0gMDsKIAogICAgIGlmIChEb3NRdWVyeVBhdGhJbmZvKChQU1opZmlsZW5hbWUsIEZJTF9TVEFOREFSRCwgJmZzMywgc2l6ZW9mKEZJTEVTVEFUVVMzKSkpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIGlmIChmczMuYXR0ckZpbGUgJiBGSUxFX1JFQURPTkxZKQotICAgICAgICByZXR2YWwgfD0gUE1fRklMRV9SRUFET05MWTsKKwlyZXR2YWwgfD0gUE1fRklMRV9SRUFET05MWTsKICAgICBpZiAoZnMzLmF0dHJGaWxlICYgRklMRV9BUkNISVZFRCkKLSAgICAgICAgcmV0dmFsIHw9IFBNX0ZJTEVfQVJDSElWRTsKKwlyZXR2YWwgfD0gUE1fRklMRV9BUkNISVZFOwogICAgIGlmIChmczMuYXR0ckZpbGUgJiBGSUxFX0hJRERFTikKLSAgICAgICAgcmV0dmFsIHw9IFBNX0ZJTEVfSElEREVOOworCXJldHZhbCB8PSBQTV9GSUxFX0hJRERFTjsKICAgICBpZiAoZnMzLmF0dHJGaWxlICYgRklMRV9TWVNURU0pCi0gICAgICAgIHJldHZhbCB8PSBQTV9GSUxFX1NZU1RFTTsKKwlyZXR2YWwgfD0gUE1fRklMRV9TWVNURU07CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTkyOCwzMyArMTkyOCwzMyBAQAogICAgIHRpbWVfdCAgICAgIHR0OwogCiAgICAgaWYgKERvc1F1ZXJ5UGF0aEluZm8oKFBTWilmaWxlbmFtZSwgRklMX1NUQU5EQVJELCAmZnMzLCBzaXplb2YoRklMRVNUQVRVUzMpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBpZiAoZ21UaW1lKSB7Ci0gICAgICAgIHRjLnRtX3llYXIgPSBmczMuZmRhdGVMYXN0V3JpdGUueWVhciArIDgwOwotICAgICAgICB0Yy50bV9tb24gPSBmczMuZmRhdGVMYXN0V3JpdGUubW9udGggLSAxOwotICAgICAgICB0Yy50bV9tZGF5ID0gZnMzLmZkYXRlTGFzdFdyaXRlLmRheTsKLSAgICAgICAgdGMudG1faG91ciA9IGZzMy5mdGltZUxhc3RXcml0ZS5ob3VyczsKLSAgICAgICAgdGMudG1fbWluID0gZnMzLmZ0aW1lTGFzdFdyaXRlLm1pbnV0ZXM7Ci0gICAgICAgIHRjLnRtX3NlYyA9IGZzMy5mdGltZUxhc3RXcml0ZS50d29zZWNzICogMjsKLSAgICAgICAgaWYoKHR0ID0gbWt0aW1lKCZ0YykpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZighKHJldCA9IGdtdGltZSgmdHQpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdGltZS0+c2VjID0gcmV0LT50bV9zZWM7Ci0gICAgICAgIHRpbWUtPmRheSA9IHJldC0+dG1fbWRheTsKLSAgICAgICAgdGltZS0+bW9uID0gcmV0LT50bV9tb24gKyAxOwotICAgICAgICB0aW1lLT55ZWFyID0gcmV0LT50bV95ZWFyIC0gODA7Ci0gICAgICAgIHRpbWUtPm1pbiA9IHJldC0+dG1fbWluOwotICAgICAgICB0aW1lLT5ob3VyID0gcmV0LT50bV9ob3VyOwotICAgICAgICB9CisJdGMudG1feWVhciA9IGZzMy5mZGF0ZUxhc3RXcml0ZS55ZWFyICsgODA7CisJdGMudG1fbW9uID0gZnMzLmZkYXRlTGFzdFdyaXRlLm1vbnRoIC0gMTsKKwl0Yy50bV9tZGF5ID0gZnMzLmZkYXRlTGFzdFdyaXRlLmRheTsKKwl0Yy50bV9ob3VyID0gZnMzLmZ0aW1lTGFzdFdyaXRlLmhvdXJzOworCXRjLnRtX21pbiA9IGZzMy5mdGltZUxhc3RXcml0ZS5taW51dGVzOworCXRjLnRtX3NlYyA9IGZzMy5mdGltZUxhc3RXcml0ZS50d29zZWNzICogMjsKKwlpZigodHQgPSBta3RpbWUoJnRjKSkgPT0gLTEpCisJICAgIHJldHVybiBmYWxzZTsKKwlpZighKHJldCA9IGdtdGltZSgmdHQpKSkKKwkgICAgcmV0dXJuIGZhbHNlOworCXRpbWUtPnNlYyA9IHJldC0+dG1fc2VjOworCXRpbWUtPmRheSA9IHJldC0+dG1fbWRheTsKKwl0aW1lLT5tb24gPSByZXQtPnRtX21vbiArIDE7CisJdGltZS0+eWVhciA9IHJldC0+dG1feWVhciAtIDgwOworCXRpbWUtPm1pbiA9IHJldC0+dG1fbWluOworCXRpbWUtPmhvdXIgPSByZXQtPnRtX2hvdXI7CisJfQogICAgIGVsc2UgewotICAgICAgICB0aW1lLT5zZWMgPSBmczMuZnRpbWVMYXN0V3JpdGUudHdvc2VjcyAqIDI7Ci0gICAgICAgIHRpbWUtPmRheSA9IGZzMy5mZGF0ZUxhc3RXcml0ZS5kYXk7Ci0gICAgICAgIHRpbWUtPm1vbiA9IGZzMy5mZGF0ZUxhc3RXcml0ZS5tb250aDsKLSAgICAgICAgdGltZS0+eWVhciA9IGZzMy5mZGF0ZUxhc3RXcml0ZS55ZWFyOwotICAgICAgICB0aW1lLT5taW4gPSBmczMuZnRpbWVMYXN0V3JpdGUubWludXRlczsKLSAgICAgICAgdGltZS0+aG91ciA9IGZzMy5mdGltZUxhc3RXcml0ZS5ob3VyczsKLSAgICAgICAgfQorCXRpbWUtPnNlYyA9IGZzMy5mdGltZUxhc3RXcml0ZS50d29zZWNzICogMjsKKwl0aW1lLT5kYXkgPSBmczMuZmRhdGVMYXN0V3JpdGUuZGF5OworCXRpbWUtPm1vbiA9IGZzMy5mZGF0ZUxhc3RXcml0ZS5tb250aDsKKwl0aW1lLT55ZWFyID0gZnMzLmZkYXRlTGFzdFdyaXRlLnllYXI7CisJdGltZS0+bWluID0gZnMzLmZ0aW1lTGFzdFdyaXRlLm1pbnV0ZXM7CisJdGltZS0+aG91ciA9IGZzMy5mdGltZUxhc3RXcml0ZS5ob3VyczsKKwl9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE5NzMsMzIgKzE5NzMsMzIgQEAKICAgICB0aW1lX3QgICAgICB0dDsKIAogICAgIGlmIChEb3NRdWVyeVBhdGhJbmZvKChQU1opZmlsZW5hbWUsRklMX1NUQU5EQVJELChQVk9JRCkmZnMzLHNpemVvZihmczMpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBpZiAoZ21UaW1lKSB7Ci0gICAgICAgIHRjLnRtX3llYXIgPSB0aW1lLT55ZWFyICsgODA7Ci0gICAgICAgIHRjLnRtX21vbiA9IHRpbWUtPm1vbiAtIDE7Ci0gICAgICAgIHRjLnRtX21kYXkgPSB0aW1lLT5kYXk7Ci0gICAgICAgIHRjLnRtX2hvdXIgPSB0aW1lLT5ob3VyOwotICAgICAgICB0Yy50bV9taW4gPSB0aW1lLT5taW47Ci0gICAgICAgIHRjLnRtX3NlYyA9IHRpbWUtPnNlYzsKLSAgICAgICAgaWYoKHR0ID0gbWt0aW1lKCZ0YykpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXQgPSBsb2NhbHRpbWUoJnR0KTsKLSAgICAgICAgZnMzLmZ0aW1lTGFzdFdyaXRlLnR3b3NlY3MgPSByZXQtPnRtX3NlYyAvIDI7Ci0gICAgICAgIGZzMy5mZGF0ZUxhc3RXcml0ZS5kYXkgPSByZXQtPnRtX21kYXk7Ci0gICAgICAgIGZzMy5mZGF0ZUxhc3RXcml0ZS5tb250aCA9IHJldC0+dG1fbW9uICsgMTsKLSAgICAgICAgZnMzLmZkYXRlTGFzdFdyaXRlLnllYXIgPSByZXQtPnRtX3llYXIgLSA4MDsKLSAgICAgICAgZnMzLmZ0aW1lTGFzdFdyaXRlLm1pbnV0ZXMgPSByZXQtPnRtX21pbjsKLSAgICAgICAgZnMzLmZ0aW1lTGFzdFdyaXRlLmhvdXJzID0gcmV0LT50bV9ob3VyOwotICAgICAgICB9CisJdGMudG1feWVhciA9IHRpbWUtPnllYXIgKyA4MDsKKwl0Yy50bV9tb24gPSB0aW1lLT5tb24gLSAxOworCXRjLnRtX21kYXkgPSB0aW1lLT5kYXk7CisJdGMudG1faG91ciA9IHRpbWUtPmhvdXI7CisJdGMudG1fbWluID0gdGltZS0+bWluOworCXRjLnRtX3NlYyA9IHRpbWUtPnNlYzsKKwlpZigodHQgPSBta3RpbWUoJnRjKSkgPT0gLTEpCisJICAgIHJldHVybiBmYWxzZTsKKwlyZXQgPSBsb2NhbHRpbWUoJnR0KTsKKwlmczMuZnRpbWVMYXN0V3JpdGUudHdvc2VjcyA9IHJldC0+dG1fc2VjIC8gMjsKKwlmczMuZmRhdGVMYXN0V3JpdGUuZGF5ID0gcmV0LT50bV9tZGF5OworCWZzMy5mZGF0ZUxhc3RXcml0ZS5tb250aCA9IHJldC0+dG1fbW9uICsgMTsKKwlmczMuZmRhdGVMYXN0V3JpdGUueWVhciA9IHJldC0+dG1feWVhciAtIDgwOworCWZzMy5mdGltZUxhc3RXcml0ZS5taW51dGVzID0gcmV0LT50bV9taW47CisJZnMzLmZ0aW1lTGFzdFdyaXRlLmhvdXJzID0gcmV0LT50bV9ob3VyOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgZnMzLmZ0aW1lTGFzdFdyaXRlLnR3b3NlY3MgPSB0aW1lLT5zZWMgLyAyOwotICAgICAgICBmczMuZmRhdGVMYXN0V3JpdGUuZGF5ID0gdGltZS0+ZGF5OwotICAgICAgICBmczMuZmRhdGVMYXN0V3JpdGUubW9udGggPSB0aW1lLT5tb247Ci0gICAgICAgIGZzMy5mZGF0ZUxhc3RXcml0ZS55ZWFyID0gdGltZS0+eWVhcjsKLSAgICAgICAgZnMzLmZ0aW1lTGFzdFdyaXRlLm1pbnV0ZXMgPSB0aW1lLT5taW47Ci0gICAgICAgIGZzMy5mdGltZUxhc3RXcml0ZS5ob3VycyA9IHRpbWUtPmhvdXI7Ci0gICAgICAgIH0KKwlmczMuZnRpbWVMYXN0V3JpdGUudHdvc2VjcyA9IHRpbWUtPnNlYyAvIDI7CisJZnMzLmZkYXRlTGFzdFdyaXRlLmRheSA9IHRpbWUtPmRheTsKKwlmczMuZmRhdGVMYXN0V3JpdGUubW9udGggPSB0aW1lLT5tb247CisJZnMzLmZkYXRlTGFzdFdyaXRlLnllYXIgPSB0aW1lLT55ZWFyOworCWZzMy5mdGltZUxhc3RXcml0ZS5taW51dGVzID0gdGltZS0+bWluOworCWZzMy5mdGltZUxhc3RXcml0ZS5ob3VycyA9IHRpbWUtPmhvdXI7CisJfQogICAgIG1lbWNweSgmZnMzLmZkYXRlTGFzdEFjY2VzcywgJmZzMy5mZGF0ZUxhc3RXcml0ZSwgc2l6ZW9mKEZEQVRFKSk7CiAgICAgbWVtY3B5KCZmczMuZmRhdGVDcmVhdGlvbiwgJmZzMy5mZGF0ZUxhc3RXcml0ZSwgc2l6ZW9mKEZEQVRFKSk7CiAgICAgbWVtY3B5KCZmczMuZnRpbWVMYXN0QWNjZXNzLCAmZnMzLmZ0aW1lTGFzdFdyaXRlLCBzaXplb2YoRlRJTUUpKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL29zMnBtL2V2ZW50LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9vczJwbS9ldmVudC5jCmluZGV4IDk3YzJjYWEuLjdhZjIwYTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL29zMnBtL2V2ZW50LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vb3MycG0vZXZlbnQuYwpAQCAtNTksNyArNTksNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIF9FVlRfcHVtcE1lc3NhZ2VzKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIE9TLzIgUHJlc2VudGF0aW9uIE1hbmFnZXIgYXBwcyEKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmb3IgT1MvMiBQcmVzZW50YXRpb24gTWFuYWdlciBhcHBzISAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgb2xkS2V5TWVzc2FnZSA9IDA7CiAgICAgbWVtc2V0KGtleVVwTXNnLDAsc2l6ZW9mKGtleVVwTXNnKSk7CiAKLSAgICAvLyBUT0RPOiBPUy8yIFBNIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uIGNvZGUhCisgICAgLyogVE9ETzogT1MvMiBQTSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBjb2RlISAqLwogCiAgICAgLyogQ2F0Y2ggcHJvZ3JhbSB0ZXJtaW5hdGlvbiBzaWduYWxzIHNvIHdlIGNhbiBjbGVhbiB1cCBwcm9wZXJseSAqLwogICAgIHNpZ25hbChTSUdBQlJULCBfRVZUX2Fib3J0KTsKQEAgLTEzNSw3ICsxMzUsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgRVZUX3Jlc3VtZSh2b2lkKQogewotICAgIC8vIERvIG5vdGhpbmcgZm9yIE9TLzIKKyAgICAvKiBEbyBub3RoaW5nIGZvciBPUy8yICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDUsNyArMTQ1LDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIEVWVF9zdXNwZW5kKHZvaWQpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3IgT1MvMgorICAgIC8qIERvIG5vdGhpbmcgZm9yIE9TLzIgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgIHNpZ25hbChTSUdGUEUsIFNJR19ERkwpOwogICAgIHNpZ25hbChTSUdJTlQsIFNJR19ERkwpOwogCi0gICAgLy8gVE9ETzogT1MvMiBQTSBzcGVjaWZpYyBleGl0IGNvZGUKKyAgICAvKiBUT0RPOiBPUy8yIFBNIHNwZWNpZmljIGV4aXQgY29kZSAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vcGhvdG9uL2V2ZW50LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9waG90b24vZXZlbnQuYwppbmRleCA3MzhkZmVhLi41ODFkYTE2IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9waG90b24vZXZlbnQuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9waG90b24vZXZlbnQuYwpAQCAtNTEsNyArNTEsNyBAQAogICAgIHVjaGFyIHNjYW5jb2RlKQogewogICAgIHJldHVybiAoS2V5U3RhdGVbKHNjYW5jb2RlICYgMHhmOCkgPj4gM10gJiAoMSA8PCAoc2NhbmNvZGUgJiAweDcpKSA/Ci0gICAgICAgIHRydWUgOiBmYWxzZSk7CisJdHJ1ZSA6IGZhbHNlKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTcxLDEwMCArNzEsMTAwIEBACiAgICAgZXZlbnRfdCAgICAgICAgIF9ldnQ7CiAKICAgICB3aGlsZSAoY291bnQgPCBFVkVOVFFTSVpFKSB7Ci0gICAgICAgIHVpbnQgICAgbW9kcyA9IDAsIGtleXAgPSAwOworCXVpbnQgICAgbW9kcyA9IDAsIGtleXAgPSAwOwogCi0gICAgICAgIHBpZCA9IENyZWNlaXZlKDAsICZtc2csIHNpemVvZiAobXNnKSk7CisJcGlkID0gQ3JlY2VpdmUoMCwgJm1zZywgc2l6ZW9mIChtc2cpKTsKIAotICAgICAgICBpZiAocGlkID09IC0xKQotICAgICAgICAgICAgcmV0dXJuOworCWlmIChwaWQgPT0gLTEpCisJICAgIHJldHVybjsKIAotICAgICAgICBpZiAoUGhFdmVudFJlYWQocGlkLCBldmVudCwgc2l6ZW9mIChldnQpKSA9PSBQaF9FVkVOVF9NU0cpIHsKLSAgICAgICAgICAgIG1lbXNldCgmZXZ0LCAwLCBzaXplb2YgKGV2dCkpOwotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IFBoX0VWX0tFWSkgewotICAgICAgICAgICAgICAgIGtleSA9IFBoR2V0RGF0YShldmVudCk7CisJaWYgKFBoRXZlbnRSZWFkKHBpZCwgZXZlbnQsIHNpemVvZiAoZXZ0KSkgPT0gUGhfRVZFTlRfTVNHKSB7CisJICAgIG1lbXNldCgmZXZ0LCAwLCBzaXplb2YgKGV2dCkpOworCSAgICBpZiAoZXZlbnQtPnR5cGUgPT0gUGhfRVZfS0VZKSB7CisJCWtleSA9IFBoR2V0RGF0YShldmVudCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoa2V5LT5rZXlfZmxhZ3MgJiBLRVlfU0NBTl9WQUxJRCkgewotICAgICAgICAgICAgICAgICAgICBrZXlwID0ga2V5LT5rZXlfc2NhbjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGtleS0+a2V5X2ZsYWdzICYgS0VZX0RPV04pCi0gICAgICAgICAgICAgICAgICAgICAgICBLZXlTdGF0ZVsoa2V5cCAmIDB4ZjgwMCkgPj4gMTFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfD0gMSA8PCAoKGtleXAgJiAweDcwMCkgPj4gOCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIEtleVN0YXRlWyhrZXlwICYgMHhmODAwKSA+PiAxMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmPSB+KDEgPDwgKChrZXlwICYgMHg3MDApID4+IDgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChrZXktPmtleV9mbGFncyAmIEtFWV9TWU1fVkFMSUQpIHx8IGV4dGVuZGVkKQotICAgICAgICAgICAgICAgICAgICBrZXlwIHw9IGtleS0+a2V5X3N5bTsKKwkJaWYgKGtleS0+a2V5X2ZsYWdzICYgS0VZX1NDQU5fVkFMSUQpIHsKKwkJICAgIGtleXAgPSBrZXktPmtleV9zY2FuOworCQkgICAgaWYgKGtleS0+a2V5X2ZsYWdzICYgS0VZX0RPV04pCisJCQlLZXlTdGF0ZVsoa2V5cCAmIDB4ZjgwMCkgPj4gMTFdCisJCQkgICAgfD0gMSA8PCAoKGtleXAgJiAweDcwMCkgPj4gOCk7CisJCSAgICBlbHNlCisJCQlLZXlTdGF0ZVsoa2V5cCAmIDB4ZjgwMCkgPj4gMTFdCisJCQkgICAgJj0gfigxIDw8ICgoa2V5cCAmIDB4NzAwKSA+PiA4KSk7CisJCX0KKwkJaWYgKChrZXktPmtleV9mbGFncyAmIEtFWV9TWU1fVkFMSUQpIHx8IGV4dGVuZGVkKQorCQkgICAga2V5cCB8PSBrZXktPmtleV9zeW07CiAKLSAgICAgICAgICAgICAgICAvKiBObyB3YXkgdG8gdGVsbCBsZWZ0IGZyb20gcmlnaHQuLi4gKi8KLSAgICAgICAgICAgICAgICBpZiAoa2V5LT5rZXlfbW9kcyAmIEtFWU1PRF9TSElGVCkKLSAgICAgICAgICAgICAgICAgICAgbW9kcyA9IChFVlRfTEVGVFNISUZUIHwgRVZUX1JJR0hUU0hJRlQpOwotICAgICAgICAgICAgICAgIGlmIChrZXktPmtleV9tb2RzICYgS0VZTU9EX0NUUkwpCi0gICAgICAgICAgICAgICAgICAgIG1vZHMgfD0gKEVWVF9DVFJMU1RBVEUgfCBFVlRfTEVGVENUUkwpOwotICAgICAgICAgICAgICAgIGlmIChrZXktPmtleV9tb2RzICYgS0VZTU9EX0FMVCkKLSAgICAgICAgICAgICAgICAgICAgbW9kcyB8PSAoRVZUX0FMVFNUQVRFIHwgRVZUX0xFRlRBTFQpOworCQkvKiBObyB3YXkgdG8gdGVsbCBsZWZ0IGZyb20gcmlnaHQuLi4gKi8KKwkJaWYgKGtleS0+a2V5X21vZHMgJiBLRVlNT0RfU0hJRlQpCisJCSAgICBtb2RzID0gKEVWVF9MRUZUU0hJRlQgfCBFVlRfUklHSFRTSElGVCk7CisJCWlmIChrZXktPmtleV9tb2RzICYgS0VZTU9EX0NUUkwpCisJCSAgICBtb2RzIHw9IChFVlRfQ1RSTFNUQVRFIHwgRVZUX0xFRlRDVFJMKTsKKwkJaWYgKGtleS0+a2V5X21vZHMgJiBLRVlNT0RfQUxUKQorCQkgICAgbW9kcyB8PSAoRVZUX0FMVFNUQVRFIHwgRVZUX0xFRlRBTFQpOwogCi0gICAgICAgICAgICAgICAgX2V2dC53aGVuID0gZXZ0LT50aW1lc3RhbXA7Ci0gICAgICAgICAgICAgICAgaWYgKGtleS0+a2V5X2ZsYWdzICYgS0VZX1JFUEVBVCkgewotICAgICAgICAgICAgICAgICAgICBfZXZ0LndoYXQgPSBFVlRfS0VZUkVQRUFUOwotICAgICAgICAgICAgICAgICAgICBfZXZ0Lm1lc3NhZ2UgPSAweDEwMDAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5LT5rZXlfZmxhZ3MgJiBLRVlfRE9XTikKLSAgICAgICAgICAgICAgICAgICAgX2V2dC53aGF0ID0gRVZUX0tFWURPV047Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBfZXZ0LndoYXQgPSBFVlRfS0VZVVA7Ci0gICAgICAgICAgICAgICAgX2V2dC5tb2RpZmllcnMgPSBtb2RzOwotICAgICAgICAgICAgICAgIF9ldnQubWVzc2FnZSB8PSBrZXlwOworCQlfZXZ0LndoZW4gPSBldnQtPnRpbWVzdGFtcDsKKwkJaWYgKGtleS0+a2V5X2ZsYWdzICYgS0VZX1JFUEVBVCkgeworCQkgICAgX2V2dC53aGF0ID0gRVZUX0tFWVJFUEVBVDsKKwkJICAgIF9ldnQubWVzc2FnZSA9IDB4MTAwMDA7CisJCSAgICB9CisJCWVsc2UgaWYgKGtleS0+a2V5X2ZsYWdzICYgS0VZX0RPV04pCisJCSAgICBfZXZ0LndoYXQgPSBFVlRfS0VZRE9XTjsKKwkJZWxzZQorCQkgICAgX2V2dC53aGF0ID0gRVZUX0tFWVVQOworCQlfZXZ0Lm1vZGlmaWVycyA9IG1vZHM7CisJCV9ldnQubWVzc2FnZSB8PSBrZXlwOwogCi0gICAgICAgICAgICAgICAgYWRkRXZlbnQoJl9ldnQpOworCQlhZGRFdmVudCgmX2V2dCk7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2goa2V5LT5rZXlfc2NhbiAmIDB4ZmYwMCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDB4ZTAwMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDB4ZTAwMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkID0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dGVuZGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkLS07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSAmIFBoX0VWX1BUUl9BTEwpIHsKLSAgICAgICAgICAgICAgICBidXRfc3RhdCA9IG1lc3NhZ2UgPSAwOwotICAgICAgICAgICAgICAgIG1vdXNlID0gUGhHZXREYXRhKGV2ZW50KTsKKwkJc3dpdGNoKGtleS0+a2V5X3NjYW4gJiAweGZmMDApIHsKKwkJICAgIGNhc2UgMHhlMDAwOgorCQkJZXh0ZW5kZWQgPSAxOworCQkJYnJlYWs7CisJCSAgICBjYXNlIDB4ZTAwMToKKwkJCWV4dGVuZGVkID0gMjsKKwkJCWJyZWFrOworCQkgICAgZGVmYXVsdDoKKwkJCWlmIChleHRlbmRlZCkKKwkJCSAgICBleHRlbmRlZC0tOworCQkgICAgfQorCQl9CisJICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlICYgUGhfRVZfUFRSX0FMTCkgeworCQlidXRfc3RhdCA9IG1lc3NhZ2UgPSAwOworCQltb3VzZSA9IFBoR2V0RGF0YShldmVudCk7CiAKLSAgICAgICAgICAgICAgICBpZiAobW91c2UtPmJ1dHRvbl9zdGF0ZSAmIFBoX0JVVFRPTl8zKQotICAgICAgICAgICAgICAgICAgICBidXRfc3RhdCA9IEVWVF9MRUZUQlVUOwotICAgICAgICAgICAgICAgIGlmIChtb3VzZS0+YnV0dG9ucyAmIFBoX0JVVFRPTl8zKQotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRVZUX0xFRlRCTUFTSzsKKwkJaWYgKG1vdXNlLT5idXR0b25fc3RhdGUgJiBQaF9CVVRUT05fMykKKwkJICAgIGJ1dF9zdGF0ID0gRVZUX0xFRlRCVVQ7CisJCWlmIChtb3VzZS0+YnV0dG9ucyAmIFBoX0JVVFRPTl8zKQorCQkgICAgbWVzc2FnZSA9IEVWVF9MRUZUQk1BU0s7CiAKLSAgICAgICAgICAgICAgICBpZiAobW91c2UtPmJ1dHRvbl9zdGF0ZSAmIFBoX0JVVFRPTl8xKQotICAgICAgICAgICAgICAgICAgICBidXRfc3RhdCB8PSBFVlRfUklHSFRCVVQ7Ci0gICAgICAgICAgICAgICAgaWYgKG1vdXNlLT5idXR0b25zICYgUGhfQlVUVE9OXzEpIAotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIHw9IEVWVF9SSUdIVEJNQVNLOworCQlpZiAobW91c2UtPmJ1dHRvbl9zdGF0ZSAmIFBoX0JVVFRPTl8xKQorCQkgICAgYnV0X3N0YXQgfD0gRVZUX1JJR0hUQlVUOworCQlpZiAobW91c2UtPmJ1dHRvbnMgJiBQaF9CVVRUT05fMSkKKwkJICAgIG1lc3NhZ2UgfD0gRVZUX1JJR0hUQk1BU0s7CiAKLSAgICAgICAgICAgICAgICBfZXZ0LndoZW4gPSBldnQtPnRpbWVzdGFtcDsKLSAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUgJiBQaF9FVl9QVFJfTU9USU9OKSB7Ci0gICAgICAgICAgICAgICAgICAgIF9ldnQud2hhdCA9IEVWVF9NT1VTRU1PVkU7Ci0gICAgICAgICAgICAgICAgICAgIF9ldnQud2hlcmVfeCA9IG1vdXNlLT5wb3MueDsKLSAgICAgICAgICAgICAgICAgICAgX2V2dC53aGVyZV95ID0gbW91c2UtPnBvcy55OwotICAgICAgICAgICAgICAgICAgICBfZXZ0Lm1vZGlmaWVycyA9IGJ1dF9zdGF0OwotICAgICAgICAgICAgICAgICAgICBhZGRFdmVudCgmX2V2dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZXZlbnQtPnR5cGUgJiBQaF9FVl9CVVRfUFJFU1MpCi0gICAgICAgICAgICAgICAgICAgIF9ldnQud2hhdCA9IEVWVF9NT1VTRURPV047Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBfZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKLSAgICAgICAgICAgICAgICBfZXZ0LndoZXJlX3ggPSBtb3VzZS0+cG9zLng7Ci0gICAgICAgICAgICAgICAgX2V2dC53aGVyZV95ID0gbW91c2UtPnBvcy55OwotICAgICAgICAgICAgICAgIF9ldnQubW9kaWZpZXJzID0gYnV0X3N0YXQ7Ci0gICAgICAgICAgICAgICAgX2V2dC5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICAgICAgICAgICAgICBhZGRFdmVudCgmX2V2dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwkJX2V2dC53aGVuID0gZXZ0LT50aW1lc3RhbXA7CisJCWlmIChldmVudC0+dHlwZSAmIFBoX0VWX1BUUl9NT1RJT04pIHsKKwkJICAgIF9ldnQud2hhdCA9IEVWVF9NT1VTRU1PVkU7CisJCSAgICBfZXZ0LndoZXJlX3ggPSBtb3VzZS0+cG9zLng7CisJCSAgICBfZXZ0LndoZXJlX3kgPSBtb3VzZS0+cG9zLnk7CisJCSAgICBfZXZ0Lm1vZGlmaWVycyA9IGJ1dF9zdGF0OworCQkgICAgYWRkRXZlbnQoJl9ldnQpOworCQkgICAgfQorCQlpZiAoZXZlbnQtPnR5cGUgJiBQaF9FVl9CVVRfUFJFU1MpCisJCSAgICBfZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOOworCQllbHNlCisJCSAgICBfZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKKwkJX2V2dC53aGVyZV94ID0gbW91c2UtPnBvcy54OworCQlfZXZ0LndoZXJlX3kgPSBtb3VzZS0+cG9zLnk7CisJCV9ldnQubW9kaWZpZXJzID0gYnV0X3N0YXQ7CisJCV9ldnQubWVzc2FnZSA9IG1lc3NhZ2U7CisJCWFkZEV2ZW50KCZfZXZ0KTsKKwkJfQorCSAgICB9CisJZWxzZQorCSAgICByZXR1cm47CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjMwLDggKzIzMCw4IEBACiAgICAgaW50IHhSZXMsCiAgICAgaW50IHlSZXMpCiB7Ci0gICAgLy8gVE9ETzogTmVlZCB0byBjYWxsIElucHV0IHRvIGNoYW5nZSB0aGUgY29vcmRpbmF0ZXMgdGhhdCBpdCByZXR1cm5zCi0gICAgLy8gICAgICAgZm9yIG1vdXNlIGV2ZW50cyEhCisgICAgLyogVE9ETzogTmVlZCB0byBjYWxsIElucHV0IHRvIGNoYW5nZSB0aGUgY29vcmRpbmF0ZXMgdGhhdCBpdCByZXR1cm5zICovCisgICAgLyogICAgICAgZm9yIG1vdXNlIGV2ZW50cyEhICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNDIsNyArMjQyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIEVWVF9yZXN1bWUodm9pZCkKIHsKLSAgICAvLyBEbyBub3RoaW5nIGZvciBQaG90b24KKyAgICAvKiBEbyBub3RoaW5nIGZvciBQaG90b24gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1Miw3ICsyNTIsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgRVZUX3N1c3BlbmQodm9pZCkKIHsKLSAgICAvLyBEbyBub3RoaW5nIGZvciBQaG90b24KKyAgICAvKiBEbyBub3RoaW5nIGZvciBQaG90b24gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3FueC9ldmVudC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vcW54L2V2ZW50LmMKaW5kZXggZTE2ZjhhNS4uNDVjZDUxNCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vcW54L2V2ZW50LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vcW54L2V2ZW50LmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpZm5kZWYgX19RTlhOVE9fXwogc3RhdGljIHN0cnVjdCBfbW91c2VfY3RybCAgICpfUE1fbW91c2VfY3RsOwogc3RhdGljIGludCAgICAgICAgICBfUE1fa2V5Ym9hcmRfZmQgPSAtMTsKLS8vc3RhdGljIGludCAgICAgICAgICAgIF9QTV9tb2RpZmllcnMsIF9QTV9sZWRzOworLypzdGF0aWMgaW50ICAgICAgICAgICAgX1BNX21vZGlmaWVycywgX1BNX2xlZHM7ICovCiAjZWxzZQogc3RhdGljIGludCAgICAgICAgICBrYmRfZmQgPSAtMSwgbW91c2VfZmQgPSAtMTsKICNlbmRpZgpAQCAtNTgsNyArNTgsNyBAQAogICAgIGludCBtYXA7CiAgICAgfSBrZXltYXA7CiAKLS8vIFRPRE86IEZpeCB0aGlzIGFuZCBzZXQgaXQgdXAgc28gd2UgY2FuIGRvIGEgYmluYXJ5IHNlYXJjaCEKKy8qIFRPRE86IEZpeCB0aGlzIGFuZCBzZXQgaXQgdXAgc28gd2UgY2FuIGRvIGEgYmluYXJ5IHNlYXJjaCEgKi8KIAoga2V5bWFwIGtleW1hcHNbXSA9IHsKICAgICB7OTYsIEtCX3BhZEVudGVyfSwKQEAgLTE0Niw4ICsxNDYsOCBAQAogc3RhdGljIGludCBNaWNrZXlUb1BpeGVsKAogICAgIGludCBtaWNrZXkpCiB7Ci0gICAgLy8gVE9ETzogV2UgY2FuIGFkZCBzb21lIGNvZGUgaW4gaGVyZSB0byBoYW5kbGUgJ2FjY2VsZXJhdGlvbicgZm9yCi0gICAgLy8gICAgICAgdGhlIG1vdXNlIGN1cnNvci4gRm9yIG5vdyBqdXN0IHVzZSB0aGUgbWlja2V5cy4KKyAgICAvKiBUT0RPOiBXZSBjYW4gYWRkIHNvbWUgY29kZSBpbiBoZXJlIHRvIGhhbmRsZSAnYWNjZWxlcmF0aW9uJyBmb3IgKi8KKyAgICAvKiAgICAgICB0aGUgbW91c2UgY3Vyc29yLiBGb3Igbm93IGp1c3QgdXNlIHRoZSBtaWNrZXlzLiAqLwogICAgIHJldHVybiBtaWNrZXk7CiB9CiAKQEAgLTE2NywxMTAgKzE2NywxMTAgQEAKICAgICBldmVudF90ICAgICAgICAgZXZ0OwogCiAgICAgd2hpbGUgKEVWVC5jb3VudCA8IEVWRU5UUVNJWkUpIHsKLSAgICAgICAgcmMxID0gcmVhZChrYmRfZmQsICh2b2lkICopJmtleSwgc2l6ZW9mKGtleSkpOwotICAgICAgICBpZiAocmMxID09IC0xKSB7Ci0gICAgICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQotICAgICAgICAgICAgICAgIHJjMSA9IDA7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBwZXJyb3IoImdldEV2ZW50cyIpOwotICAgICAgICAgICAgICAgIFBNX2ZhdGFsRXJyb3IoIktleWJvYXJkIGVycm9yIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBpZiAocmMxID4gMCkgewotICAgICAgICAgICAgbWVtc2V0KCZldnQsIDAsIHNpemVvZihldnQpKTsKLSAgICAgICAgICAgIGlmIChrZXkuZGF0YS5tb2RpZmllcnMgJiBLRVlNT0RfU0hJRlQpCi0gICAgICAgICAgICAgICAgbW9kcyB8PSBFVlRfTEVGVFNISUZUOwotICAgICAgICAgICAgaWYgKGtleS5kYXRhLm1vZGlmaWVycyAmIEtFWU1PRF9DVFJMKQotICAgICAgICAgICAgICAgIG1vZHMgfD0gRVZUX0NUUkxTVEFURTsKLSAgICAgICAgICAgIGlmIChrZXkuZGF0YS5tb2RpZmllcnMgJiBLRVlNT0RfQUxUKQotICAgICAgICAgICAgICAgIG1vZHMgfD0gRVZUX0FMVFNUQVRFOworCXJjMSA9IHJlYWQoa2JkX2ZkLCAodm9pZCAqKSZrZXksIHNpemVvZihrZXkpKTsKKwlpZiAocmMxID09IC0xKSB7CisJICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCisJCXJjMSA9IDA7CisJICAgIGVsc2UgeworCQlwZXJyb3IoImdldEV2ZW50cyIpOworCQlQTV9mYXRhbEVycm9yKCJLZXlib2FyZCBlcnJvciIpOworCQl9CisJICAgIH0KKwlpZiAocmMxID4gMCkgeworCSAgICBtZW1zZXQoJmV2dCwgMCwgc2l6ZW9mKGV2dCkpOworCSAgICBpZiAoa2V5LmRhdGEubW9kaWZpZXJzICYgS0VZTU9EX1NISUZUKQorCQltb2RzIHw9IEVWVF9MRUZUU0hJRlQ7CisJICAgIGlmIChrZXkuZGF0YS5tb2RpZmllcnMgJiBLRVlNT0RfQ1RSTCkKKwkJbW9kcyB8PSBFVlRfQ1RSTFNUQVRFOworCSAgICBpZiAoa2V5LmRhdGEubW9kaWZpZXJzICYgS0VZTU9EX0FMVCkKKwkJbW9kcyB8PSBFVlRfQUxUU1RBVEU7CiAKLSAgICAgICAgICAgIC8qIE5vdyBzdG9yZSB0aGUga2V5Ym9hcmQgZXZlbnQgZGF0YSAqLwotICAgICAgICAgICAgZXZ0LndoZW4gPSBUSU1FX1RPX01TRUMoa2V5LnRpbWUpOwotICAgICAgICAgICAgaWYgKGtleS5kYXRhLmZsYWdzICYgS0VZX1NDQU5fVkFMSUQpCi0gICAgICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgfD0gKGtleS5kYXRhLmtleV9zY2FuICYgMHg3RikgPDwgODsKLSAgICAgICAgICAgIGlmICgoa2V5LmRhdGEuZmxhZ3MgJiBLRVlfU1lNX1ZBTElEKSAmJgotICAgICAgICAgICAgICAgICgoKGtleS5kYXRhLmtleV9zeW0gJiAweGZmMDApID09IDB4ZjAwMCAmJgotICAgICAgICAgICAgICAgIChrZXkuZGF0YS5rZXlfc3ltICYgMHhmZikgPCAweDIwKSB8fAotICAgICAgICAgICAgICAgIGtleS5kYXRhLmtleV9zeW0gPCAweDgwKSkKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSB8PSAoa2V5LmRhdGEua2V5X3N5bSAmIDB4RkYpOwotICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyA9IG1vZHM7Ci0gICAgICAgICAgICBpZiAoa2V5LmRhdGEuZmxhZ3MgJiBLRVlfRE9XTikgewotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX0tFWURPV047Ci0gICAgICAgICAgICAgICAga2V5VXBNc2dbZXZ0Lm1lc3NhZ2UgPj4gOF0gPSAodXNob3J0KWV2dC5tZXNzYWdlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGtleS5kYXRhLmZsYWdzICYgS0VZX1JFUEVBVCkgewotICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlIHw9IDB4MTAwMDA7Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfS0VZUkVQRUFUOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX0tFWVVQOwotICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0ga2V5VXBNc2dbZXZ0Lm1lc3NhZ2UgPj4gOF07Ci0gICAgICAgICAgICAgICAgaWYgKGV2dC5tZXNzYWdlID09IDApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGtleVVwTXNnW2V2dC5tZXNzYWdlID4+IDhdID0gMDsKLSAgICAgICAgICAgICAgICB9CisJICAgIC8qIE5vdyBzdG9yZSB0aGUga2V5Ym9hcmQgZXZlbnQgZGF0YSAqLworCSAgICBldnQud2hlbiA9IFRJTUVfVE9fTVNFQyhrZXkudGltZSk7CisJICAgIGlmIChrZXkuZGF0YS5mbGFncyAmIEtFWV9TQ0FOX1ZBTElEKQorCQlldnQubWVzc2FnZSB8PSAoa2V5LmRhdGEua2V5X3NjYW4gJiAweDdGKSA8PCA4OworCSAgICBpZiAoKGtleS5kYXRhLmZsYWdzICYgS0VZX1NZTV9WQUxJRCkgJiYKKwkJKCgoa2V5LmRhdGEua2V5X3N5bSAmIDB4ZmYwMCkgPT0gMHhmMDAwICYmCisJCShrZXkuZGF0YS5rZXlfc3ltICYgMHhmZikgPCAweDIwKSB8fAorCQlrZXkuZGF0YS5rZXlfc3ltIDwgMHg4MCkpCisJCWV2dC5tZXNzYWdlIHw9IChrZXkuZGF0YS5rZXlfc3ltICYgMHhGRik7CisJICAgIGV2dC5tb2RpZmllcnMgPSBtb2RzOworCSAgICBpZiAoa2V5LmRhdGEuZmxhZ3MgJiBLRVlfRE9XTikgeworCQlldnQud2hhdCA9IEVWVF9LRVlET1dOOworCQlrZXlVcE1zZ1tldnQubWVzc2FnZSA+PiA4XSA9ICh1c2hvcnQpZXZ0Lm1lc3NhZ2U7CisJCX0KKwkgICAgZWxzZSBpZiAoa2V5LmRhdGEuZmxhZ3MgJiBLRVlfUkVQRUFUKSB7CisJCWV2dC5tZXNzYWdlIHw9IDB4MTAwMDA7CisJCWV2dC53aGF0ID0gRVZUX0tFWVJFUEVBVDsKKwkJfQorCSAgICBlbHNlIHsKKwkJZXZ0LndoYXQgPSBFVlRfS0VZVVA7CisJCWV2dC5tZXNzYWdlID0ga2V5VXBNc2dbZXZ0Lm1lc3NhZ2UgPj4gOF07CisJCWlmIChldnQubWVzc2FnZSA9PSAwKQorCQkgICAgY29udGludWU7CisJCWtleVVwTXNnW2V2dC5tZXNzYWdlID4+IDhdID0gMDsKKwkJfQogCi0gICAgICAgICAgICAvKiBOb3cgYWRkIHRoZSBuZXcgZXZlbnQgdG8gdGhlIGV2ZW50IHF1ZXVlICovCi0gICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcmMyID0gcmVhZChtb3VzZV9mZCwgKHZvaWQgKikmbXMsIHNpemVvZiAobXMpKTsKLSAgICAgICAgaWYgKHJjMiA9PSAtMSkgewotICAgICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKLSAgICAgICAgICAgICAgICByYzIgPSAwOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGVycm9yKCJnZXRFdmVudHMiKTsKLSAgICAgICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJNb3VzZSBlcnJvciIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgaWYgKHJjMiA+IDApIHsKLSAgICAgICAgICAgIG1lbXNldCgmZXZ0LCAwLCBzaXplb2YoZXZ0KSk7Ci0gICAgICAgICAgICBtcy5oZHIuYnV0dG9ucyAmPQotICAgICAgICAgICAgICAgIChfUE9JTlRFUl9CVVRUT05fTEVGVCB8IF9QT0lOVEVSX0JVVFRPTl9SSUdIVCk7Ci0gICAgICAgICAgICBpZiAobXMuaGRyLmJ1dHRvbnMgJiBfUE9JTlRFUl9CVVRUT05fTEVGVCkKLSAgICAgICAgICAgICAgICBidXRfc3RhdCA9IEVWVF9MRUZUQlVUOwotICAgICAgICAgICAgaWYgKChtcy5oZHIuYnV0dG9ucyAmIF9QT0lOVEVSX0JVVFRPTl9MRUZUKSAhPQotICAgICAgICAgICAgICAgIChvbGRfYnV0dG9ucyAmIF9QT0lOVEVSX0JVVFRPTl9MRUZUKSkKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gRVZUX0xFRlRCTUFTSzsKLSAgICAgICAgICAgIGlmIChtcy5oZHIuYnV0dG9ucyAmIF9QT0lOVEVSX0JVVFRPTl9SSUdIVCkKLSAgICAgICAgICAgICAgICBidXRfc3RhdCB8PSBFVlRfUklHSFRCVVQ7Ci0gICAgICAgICAgICBpZiAoKG1zLmhkci5idXR0b25zICYgX1BPSU5URVJfQlVUVE9OX1JJR0hUKSAhPQotICAgICAgICAgICAgICAgIChvbGRfYnV0dG9ucyAmIF9QT0lOVEVSX0JVVFRPTl9SSUdIVCkpCi0gICAgICAgICAgICAgICAgbWVzc2FnZSB8PSBFVlRfUklHSFRCTUFTSzsKLSAgICAgICAgICAgIGlmIChtcy5keCB8fCBtcy5keSkgewotICAgICAgICAgICAgICAgIG1zLmR5ID0gLW1zLmR5OwotICAgICAgICAgICAgICAgIEVWVC5teCArPSBNaWNrZXlUb1BpeGVsKG1zLmR4KTsKLSAgICAgICAgICAgICAgICBFVlQubXkgKz0gTWlja2V5VG9QaXhlbChtcy5keSk7Ci0gICAgICAgICAgICAgICAgaWYgKEVWVC5teCA8IDApIEVWVC5teCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKEVWVC5teSA8IDApIEVWVC5teSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKEVWVC5teCA+IHJhbmdlWCkgICAgRVZULm14ID0gcmFuZ2VYOwotICAgICAgICAgICAgICAgIGlmIChFVlQubXkgPiByYW5nZVkpICAgIEVWVC5teSA9IHJhbmdlWTsKLSAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRU1PVkU7Ci0gICAgICAgICAgICAgICAgZXZ0LndoZW4gPSBUSU1FX1RPX01TRUMobXMuaGRyLnRpbWUpOwotICAgICAgICAgICAgICAgIGV2dC53aGVyZV94ID0gRVZULm14OwotICAgICAgICAgICAgICAgIGV2dC53aGVyZV95ID0gRVZULm15OwotICAgICAgICAgICAgICAgIGV2dC5yZWxhdGl2ZV94ID0gbXMuZHg7Ci0gICAgICAgICAgICAgICAgZXZ0LnJlbGF0aXZlX3kgPSBtcy5keTsKLSAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzID0gYnV0X3N0YXQ7Ci0gICAgICAgICAgICAgICAgYWRkRXZlbnQoJmV2dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZXZ0LndoYXQgPSBtcy5oZHIuYnV0dG9ucyA8IG9sZF9idXR0b25zID8KLSAgICAgICAgICAgICAgICBFVlRfTU9VU0VVUCA6IEVWVF9NT1VTRURPV047Ci0gICAgICAgICAgICBldnQud2hlbiA9IFRJTUVfVE9fTVNFQyhtcy5oZHIudGltZSk7Ci0gICAgICAgICAgICBldnQud2hlcmVfeCA9IEVWVC5teDsKLSAgICAgICAgICAgIGV2dC53aGVyZV95ID0gRVZULm15OwotICAgICAgICAgICAgZXZ0LnJlbGF0aXZlX3ggPSBtcy5keDsKLSAgICAgICAgICAgIGV2dC5yZWxhdGl2ZV95ID0gbXMuZHk7Ci0gICAgICAgICAgICBldnQubW9kaWZpZXJzID0gYnV0X3N0YXQ7Ci0gICAgICAgICAgICBldnQubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgICAgICAgICBpZiAobXMuaGRyLmJ1dHRvbnMgIT0gb2xkX2J1dHRvbnMpIHsKLSAgICAgICAgICAgICAgICBhZGRFdmVudCgmZXZ0KTsKLSAgICAgICAgICAgICAgICBvbGRfYnV0dG9ucyA9IG1zLmhkci5idXR0b25zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgaWYgKHJjMSArIHJjMiA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkgICAgLyogTm93IGFkZCB0aGUgbmV3IGV2ZW50IHRvIHRoZSBldmVudCBxdWV1ZSAqLworCSAgICBhZGRFdmVudCgmZXZ0KTsKKwkgICAgfQorCXJjMiA9IHJlYWQobW91c2VfZmQsICh2b2lkICopJm1zLCBzaXplb2YgKG1zKSk7CisJaWYgKHJjMiA9PSAtMSkgeworCSAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQorCQlyYzIgPSAwOworCSAgICBlbHNlIHsKKwkJcGVycm9yKCJnZXRFdmVudHMiKTsKKwkJUE1fZmF0YWxFcnJvcigiTW91c2UgZXJyb3IiKTsKKwkJfQorCSAgICB9CisJaWYgKHJjMiA+IDApIHsKKwkgICAgbWVtc2V0KCZldnQsIDAsIHNpemVvZihldnQpKTsKKwkgICAgbXMuaGRyLmJ1dHRvbnMgJj0KKwkJKF9QT0lOVEVSX0JVVFRPTl9MRUZUIHwgX1BPSU5URVJfQlVUVE9OX1JJR0hUKTsKKwkgICAgaWYgKG1zLmhkci5idXR0b25zICYgX1BPSU5URVJfQlVUVE9OX0xFRlQpCisJCWJ1dF9zdGF0ID0gRVZUX0xFRlRCVVQ7CisJICAgIGlmICgobXMuaGRyLmJ1dHRvbnMgJiBfUE9JTlRFUl9CVVRUT05fTEVGVCkgIT0KKwkJKG9sZF9idXR0b25zICYgX1BPSU5URVJfQlVUVE9OX0xFRlQpKQorCQltZXNzYWdlID0gRVZUX0xFRlRCTUFTSzsKKwkgICAgaWYgKG1zLmhkci5idXR0b25zICYgX1BPSU5URVJfQlVUVE9OX1JJR0hUKQorCQlidXRfc3RhdCB8PSBFVlRfUklHSFRCVVQ7CisJICAgIGlmICgobXMuaGRyLmJ1dHRvbnMgJiBfUE9JTlRFUl9CVVRUT05fUklHSFQpICE9CisJCShvbGRfYnV0dG9ucyAmIF9QT0lOVEVSX0JVVFRPTl9SSUdIVCkpCisJCW1lc3NhZ2UgfD0gRVZUX1JJR0hUQk1BU0s7CisJICAgIGlmIChtcy5keCB8fCBtcy5keSkgeworCQltcy5keSA9IC1tcy5keTsKKwkJRVZULm14ICs9IE1pY2tleVRvUGl4ZWwobXMuZHgpOworCQlFVlQubXkgKz0gTWlja2V5VG9QaXhlbChtcy5keSk7CisJCWlmIChFVlQubXggPCAwKSBFVlQubXggPSAwOworCQlpZiAoRVZULm15IDwgMCkgRVZULm15ID0gMDsKKwkJaWYgKEVWVC5teCA+IHJhbmdlWCkgICAgRVZULm14ID0gcmFuZ2VYOworCQlpZiAoRVZULm15ID4gcmFuZ2VZKSAgICBFVlQubXkgPSByYW5nZVk7CisJCWV2dC53aGF0ID0gRVZUX01PVVNFTU9WRTsKKwkJZXZ0LndoZW4gPSBUSU1FX1RPX01TRUMobXMuaGRyLnRpbWUpOworCQlldnQud2hlcmVfeCA9IEVWVC5teDsKKwkJZXZ0LndoZXJlX3kgPSBFVlQubXk7CisJCWV2dC5yZWxhdGl2ZV94ID0gbXMuZHg7CisJCWV2dC5yZWxhdGl2ZV95ID0gbXMuZHk7CisJCWV2dC5tb2RpZmllcnMgPSBidXRfc3RhdDsKKwkJYWRkRXZlbnQoJmV2dCk7CisJCX0KKwkgICAgZXZ0LndoYXQgPSBtcy5oZHIuYnV0dG9ucyA8IG9sZF9idXR0b25zID8KKwkJRVZUX01PVVNFVVAgOiBFVlRfTU9VU0VET1dOOworCSAgICBldnQud2hlbiA9IFRJTUVfVE9fTVNFQyhtcy5oZHIudGltZSk7CisJICAgIGV2dC53aGVyZV94ID0gRVZULm14OworCSAgICBldnQud2hlcmVfeSA9IEVWVC5teTsKKwkgICAgZXZ0LnJlbGF0aXZlX3ggPSBtcy5keDsKKwkgICAgZXZ0LnJlbGF0aXZlX3kgPSBtcy5keTsKKwkgICAgZXZ0Lm1vZGlmaWVycyA9IGJ1dF9zdGF0OworCSAgICBldnQubWVzc2FnZSA9IG1lc3NhZ2U7CisJICAgIGlmIChtcy5oZHIuYnV0dG9ucyAhPSBvbGRfYnV0dG9ucykgeworCQlhZGRFdmVudCgmZXZ0KTsKKwkJb2xkX2J1dHRvbnMgPSBtcy5oZHIuYnV0dG9uczsKKwkJfQorCSAgICB9CisJaWYgKHJjMSArIHJjMiA9PSAwKQorCSAgICBicmVhazsKKwl9CiB9CiAjZWxzZQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI5MCw2NiArMjkwLDY2IEBACiAKICAgICAvKiBQb2xsIGtleWJvYXJkIGV2ZW50cyAqLwogICAgIHdoaWxlICgobnVta2V5cyA9IHJlYWQoX1BNX2tleWJvYXJkX2ZkLCBidWYsIHNpemVvZiBidWYpKSA+IDApIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWtleXM7IGkrKykgewotICAgICAgICAgICAgcHJvY2Vzc1Jhd1NjYW5Db2RlKGJ1ZltpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlmb3IgKGkgPSAwOyBpIDwgbnVta2V5czsgaSsrKSB7CisJICAgIHByb2Nlc3NSYXdTY2FuQ29kZShidWZbaV0pOworCSAgICB9CisJfQogCiAgICAgaWYgKF9QTV9tb3VzZV9jdGwgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKIAogICAgIC8qIEdvYmJsZSBwZW5kaW5nIG1vdXNlIGV2ZW50cyAqLwogICAgIHdoaWxlIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKSB7Ci0gICAgICAgIHJjID0gbW91c2VfcmVhZChfUE1fbW91c2VfY3RsLCAmZXYsIDEsIDAsIE5VTEwpOwotICAgICAgICBpZiAocmMgPT0gLTEpIHsKLSAgICAgICAgICAgIHBlcnJvcigiZ2V0RXZlbnRzIik7Ci0gICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJNb3VzZSBlcnJvciAoSW5wdXQgdGVybWluYXRlZD8pIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGlmIChyYyA9PSAwKQotICAgICAgICAgICAgYnJlYWs7CisJcmMgPSBtb3VzZV9yZWFkKF9QTV9tb3VzZV9jdGwsICZldiwgMSwgMCwgTlVMTCk7CisJaWYgKHJjID09IC0xKSB7CisJICAgIHBlcnJvcigiZ2V0RXZlbnRzIik7CisJICAgIFBNX2ZhdGFsRXJyb3IoIk1vdXNlIGVycm9yIChJbnB1dCB0ZXJtaW5hdGVkPykiKTsKKwkgICAgfQorCWlmIChyYyA9PSAwKQorCSAgICBicmVhazsKIAotICAgICAgICBtZXNzYWdlID0gMCwgYnV0X3N0YXQgPSAwOwotICAgICAgICBtZW1zZXQoJmV2dCwgMCwgc2l6ZW9mKGV2dCkpOworCW1lc3NhZ2UgPSAwLCBidXRfc3RhdCA9IDA7CisJbWVtc2V0KCZldnQsIDAsIHNpemVvZihldnQpKTsKIAotICAgICAgICBldi5idXR0b25zICY9IChfTU9VU0VfTEVGVCB8IF9NT1VTRV9SSUdIVCk7Ci0gICAgICAgIGlmIChldi5idXR0b25zICYgX01PVVNFX0xFRlQpCi0gICAgICAgICAgICBidXRfc3RhdCA9IEVWVF9MRUZUQlVUOwotICAgICAgICBpZiAoKGV2LmJ1dHRvbnMgJiBfTU9VU0VfTEVGVCkgIT0gKG9sZF9idXR0b25zICYgX01PVVNFX0xFRlQpKQotICAgICAgICAgICAgbWVzc2FnZSA9IEVWVF9MRUZUQk1BU0s7Ci0gICAgICAgIGlmIChldi5idXR0b25zICYgX01PVVNFX1JJR0hUKQotICAgICAgICAgICAgYnV0X3N0YXQgfD0gRVZUX1JJR0hUQlVUOwotICAgICAgICBpZiAoKGV2LmJ1dHRvbnMgJiBfTU9VU0VfUklHSFQpICE9IChvbGRfYnV0dG9ucyAmIF9NT1VTRV9SSUdIVCkpCi0gICAgICAgICAgICBtZXNzYWdlIHw9IEVWVF9SSUdIVEJNQVNLOwotICAgICAgICBpZiAoZXYuZHggfHwgZXYuZHkpIHsKLSAgICAgICAgICAgIGV2LmR5ID0gLWV2LmR5OwotICAgICAgICAgICAgRVZULm14ICs9IE1pY2tleVRvUGl4ZWwoZXYuZHgpOwotICAgICAgICAgICAgRVZULm15ICs9IE1pY2tleVRvUGl4ZWwoZXYuZHkpOwotICAgICAgICAgICAgaWYgKEVWVC5teCA8IDApIEVWVC5teCA9IDA7Ci0gICAgICAgICAgICBpZiAoRVZULm15IDwgMCkgRVZULm15ID0gMDsKLSAgICAgICAgICAgIGlmIChFVlQubXggPiByYW5nZVgpICAgIEVWVC5teCA9IHJhbmdlWDsKLSAgICAgICAgICAgIGlmIChFVlQubXkgPiByYW5nZVkpICAgIEVWVC5teSA9IHJhbmdlWTsKLSAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFTU9WRTsKLSAgICAgICAgICAgIGV2dC53aGVuID0gZXYudGltZXN0YW1wKjEwMDsKLSAgICAgICAgICAgIGV2dC53aGVyZV94ID0gRVZULm14OwotICAgICAgICAgICAgZXZ0LndoZXJlX3kgPSBFVlQubXk7Ci0gICAgICAgICAgICBldnQucmVsYXRpdmVfeCA9IGV2LmR4OwotICAgICAgICAgICAgZXZ0LnJlbGF0aXZlX3kgPSBldi5keTsKLSAgICAgICAgICAgIGV2dC5tb2RpZmllcnMgPSBidXRfc3RhdDsKLSAgICAgICAgICAgIGFkZEV2ZW50KCZldnQpOwotICAgICAgICAgICAgfQotICAgICAgICBldnQud2hhdCA9IGV2LmJ1dHRvbnMgPCBvbGRfYnV0dG9ucyA/IEVWVF9NT1VTRVVQIDogRVZUX01PVVNFRE9XTjsKLSAgICAgICAgZXZ0LndoZW4gPSBldi50aW1lc3RhbXAqMTAwOwotICAgICAgICBldnQud2hlcmVfeCA9IEVWVC5teDsKLSAgICAgICAgZXZ0LndoZXJlX3kgPSBFVlQubXk7Ci0gICAgICAgIGV2dC5yZWxhdGl2ZV94ID0gZXYuZHg7Ci0gICAgICAgIGV2dC5yZWxhdGl2ZV95ID0gZXYuZHk7Ci0gICAgICAgIGV2dC5tb2RpZmllcnMgPSBidXRfc3RhdDsKLSAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgICBpZiAoZXYuYnV0dG9ucyAhPSBvbGRfYnV0dG9ucykgewotICAgICAgICAgICAgYWRkRXZlbnQoJmV2dCk7Ci0gICAgICAgICAgICBvbGRfYnV0dG9ucyA9IGV2LmJ1dHRvbnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlldi5idXR0b25zICY9IChfTU9VU0VfTEVGVCB8IF9NT1VTRV9SSUdIVCk7CisJaWYgKGV2LmJ1dHRvbnMgJiBfTU9VU0VfTEVGVCkKKwkgICAgYnV0X3N0YXQgPSBFVlRfTEVGVEJVVDsKKwlpZiAoKGV2LmJ1dHRvbnMgJiBfTU9VU0VfTEVGVCkgIT0gKG9sZF9idXR0b25zICYgX01PVVNFX0xFRlQpKQorCSAgICBtZXNzYWdlID0gRVZUX0xFRlRCTUFTSzsKKwlpZiAoZXYuYnV0dG9ucyAmIF9NT1VTRV9SSUdIVCkKKwkgICAgYnV0X3N0YXQgfD0gRVZUX1JJR0hUQlVUOworCWlmICgoZXYuYnV0dG9ucyAmIF9NT1VTRV9SSUdIVCkgIT0gKG9sZF9idXR0b25zICYgX01PVVNFX1JJR0hUKSkKKwkgICAgbWVzc2FnZSB8PSBFVlRfUklHSFRCTUFTSzsKKwlpZiAoZXYuZHggfHwgZXYuZHkpIHsKKwkgICAgZXYuZHkgPSAtZXYuZHk7CisJICAgIEVWVC5teCArPSBNaWNrZXlUb1BpeGVsKGV2LmR4KTsKKwkgICAgRVZULm15ICs9IE1pY2tleVRvUGl4ZWwoZXYuZHkpOworCSAgICBpZiAoRVZULm14IDwgMCkgRVZULm14ID0gMDsKKwkgICAgaWYgKEVWVC5teSA8IDApIEVWVC5teSA9IDA7CisJICAgIGlmIChFVlQubXggPiByYW5nZVgpICAgIEVWVC5teCA9IHJhbmdlWDsKKwkgICAgaWYgKEVWVC5teSA+IHJhbmdlWSkgICAgRVZULm15ID0gcmFuZ2VZOworCSAgICBldnQud2hhdCA9IEVWVF9NT1VTRU1PVkU7CisJICAgIGV2dC53aGVuID0gZXYudGltZXN0YW1wKjEwMDsKKwkgICAgZXZ0LndoZXJlX3ggPSBFVlQubXg7CisJICAgIGV2dC53aGVyZV95ID0gRVZULm15OworCSAgICBldnQucmVsYXRpdmVfeCA9IGV2LmR4OworCSAgICBldnQucmVsYXRpdmVfeSA9IGV2LmR5OworCSAgICBldnQubW9kaWZpZXJzID0gYnV0X3N0YXQ7CisJICAgIGFkZEV2ZW50KCZldnQpOworCSAgICB9CisJZXZ0LndoYXQgPSBldi5idXR0b25zIDwgb2xkX2J1dHRvbnMgPyBFVlRfTU9VU0VVUCA6IEVWVF9NT1VTRURPV047CisJZXZ0LndoZW4gPSBldi50aW1lc3RhbXAqMTAwOworCWV2dC53aGVyZV94ID0gRVZULm14OworCWV2dC53aGVyZV95ID0gRVZULm15OworCWV2dC5yZWxhdGl2ZV94ID0gZXYuZHg7CisJZXZ0LnJlbGF0aXZlX3kgPSBldi5keTsKKwlldnQubW9kaWZpZXJzID0gYnV0X3N0YXQ7CisJZXZ0Lm1lc3NhZ2UgPSBtZXNzYWdlOworCWlmIChldi5idXR0b25zICE9IG9sZF9idXR0b25zKSB7CisJICAgIGFkZEV2ZW50KCZldnQpOworCSAgICBvbGRfYnV0dG9ucyA9IGV2LmJ1dHRvbnM7CisJICAgIH0KKwl9CiB9CiAjZW5kaWYgIC8qIF9fUU5YTlRPX18gKi8KIApAQCAtNDAwLDcgKzQwMCw3IEBACiAgICAgY2hhciAgICAgICAgYnVmWzEyOF07CiAgICAgRklMRSAgICAgICAgKnA7CiAgICAgaW50ICAgICAgICAgYXJnbm8sbGVuOwotI2VuZGlmICAKKyNlbmRpZgogCiAjaWZkZWYgX19RTlhOVE9fXwogICAgIFRocmVhZEN0bChfTlRPX1RDVExfSU8sIDApOyAvKiBTbyBqb3lzdGljayBjb2RlIHdvbid0IGJsb3cgdXAgKi8KQEAgLTQxMCw3ICs0MTAsNyBAQAogICAgIEVWVC5tb3VzZU1vdmUgPSBtb3VzZU1vdmU7CiAgICAgaW5pdEV2ZW50UXVldWUoKTsKICAgICBtZW1zZXQoa2V5VXBNc2csMCxzaXplb2Yoa2V5VXBNc2cpKTsKLSAgICAKKwogI2lmZGVmIF9fUU5YTlRPX18KICAgICAvKgogICAgICAqIFVzZXIgbWF5IGFscmVhZHkgaGF2ZSBpbnB1dCBydW5uaW5nIHdpdGggdGhlIHJpZ2h0IHBhcmFtZXRlcnMuCkBAIC00MTksODIgKzQxOSw4MiBAQAogICAgICAqIG1hbmFnZXIuCiAgICAgICovCiAgICAgaWYgKChtb3VzZV9mZCA9IG9wZW4oIi9kZXYvbW91c2UwIiwgT19SRE9OTFkgfCBPX05PTkJMT0NLKSkgPCAwKSB7Ci0gICAgICAgIC8qIFJ1biBpbnB1dHRyYXAgdG8gZ2V0IHRoZSBhcmdzIGZvciBpbnB1dCAqLwotICAgICAgICBpZiAoKHAgPSBwb3BlbigiaW5wdXR0cmFwIiwgInIiKSkgPT0gTlVMTCkKLSAgICAgICAgICAgIFBNX2ZhdGFsRXJyb3IoIkVycm9yIHJ1bm5pbmcgJ2lucHV0dHJhcCciKTsKLSAgICAgICAgZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgcCk7Ci0gICAgICAgIHBjbG9zZShwKTsKKwkvKiBSdW4gaW5wdXR0cmFwIHRvIGdldCB0aGUgYXJncyBmb3IgaW5wdXQgKi8KKwlpZiAoKHAgPSBwb3BlbigiaW5wdXR0cmFwIiwgInIiKSkgPT0gTlVMTCkKKwkgICAgUE1fZmF0YWxFcnJvcigiRXJyb3IgcnVubmluZyAnaW5wdXR0cmFwJyIpOworCWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHApOworCXBjbG9zZShwKTsKIAotICAgICAgICAvKiBCdWlsZCB0aGUgYXJndW1lbnQgbGlzdCAqLwotICAgICAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSAgICAgICAgaWFyZ1swXSA9IGJ1ZjsKLSAgICAgICAgZm9yIChpID0gMCwgYXJnbm8gPSAwOyBpIDwgbGVuICYmIGFyZ25vIDwgMTU7KSB7Ci0gICAgICAgICAgICBpZiAoYXJnbm8gPT0gMSkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogQWRkIGZsYWdzIHRvIGlucHV0J3MgYXJnIGxpc3QuCi0gICAgICAgICAgICAgICAgICogJy1yJyBtZWFucyBydW4gYXMgcmVzb3VyY2UKLSAgICAgICAgICAgICAgICAgKiBtYW5hZ2VyLCBwcm92aWRpbmcgdGhlIC9kZXYvbW91c2UKLSAgICAgICAgICAgICAgICAgKiBhbmQgL2Rldi9rZXlib2FyZCBpbnRlcmZhY2VzLgotICAgICAgICAgICAgICAgICAqICctUCcgc3VwcmVzc2VzIHRoZSAvZGV2L3Bob3RvbgotICAgICAgICAgICAgICAgICAqIG1lY2hhbmlzbS4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpYXJnW2FyZ25vKytdID0gIi1QciI7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKGJ1ZltpXSA9PSAnICcpCi0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PSAnXDAnIHx8IGJ1ZltpXSA9PSAnXG4nKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWFyZ1thcmdubysrXSA9ICZidWZbaV07Ci0gICAgICAgICAgICB3aGlsZSAoYnVmW2ldICE9ICcgJwotICAgICAgICAgICAgICAgICYmIGJ1ZltpXSAhPSAnXDAnICYmIGJ1ZltpXSAhPSAnXG4nKQotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgIGJ1ZltpKytdID0gJ1wwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgaWFyZ1thcmdub10gPSBOVUxMOwotICAgICAgICAgICAgCi0gICAgICAgIGlmICgoa2lsbF9waWQgPSBzcGF3bnZwKFBfTk9XQUlUTywgaWFyZ1swXSwgaWFyZykpID09IC0xKSB7Ci0gICAgICAgICAgICBwZXJyb3IoInNwYXduaW5nIGlucHV0IHJlc21nciIpOwotICAgICAgICAgICAgUE1fZmF0YWxFcnJvcigiQ291bGQgbm90IHN0YXJ0IGlucHV0IHJlc21nciIpOwotICAgICAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgICAgICAgICAgaWYgKHN0YXQoIi9kZXYvbW91c2UwIiwgJnN0KSA9PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgc2xlZXAoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGlmICgobW91c2VfZmQgPSBvcGVuKCIvZGV2L21vdXNlMCIsIE9fUkRPTkxZfE9fTk9OQkxPQ0spKSA8IDApIHsKLSAgICAgICAgICAgIHBlcnJvcigiL2Rldi9tb3VzZTAiKTsKLSAgICAgICAgICAgIFBNX2ZhdGFsRXJyb3IoIkNvdWxkIG5vdCBvcGVuIC9kZXYvbW91c2UwIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBCdWlsZCB0aGUgYXJndW1lbnQgbGlzdCAqLworCWxlbiA9IHN0cmxlbihidWYpOworCWlhcmdbMF0gPSBidWY7CisJZm9yIChpID0gMCwgYXJnbm8gPSAwOyBpIDwgbGVuICYmIGFyZ25vIDwgMTU7KSB7CisJICAgIGlmIChhcmdubyA9PSAxKSB7CisJCS8qCisJCSAqIEFkZCBmbGFncyB0byBpbnB1dCdzIGFyZyBsaXN0LgorCQkgKiAnLXInIG1lYW5zIHJ1biBhcyByZXNvdXJjZQorCQkgKiBtYW5hZ2VyLCBwcm92aWRpbmcgdGhlIC9kZXYvbW91c2UKKwkJICogYW5kIC9kZXYva2V5Ym9hcmQgaW50ZXJmYWNlcy4KKwkJICogJy1QJyBzdXByZXNzZXMgdGhlIC9kZXYvcGhvdG9uCisJCSAqIG1lY2hhbmlzbS4KKwkJICovCisJCWlhcmdbYXJnbm8rK10gPSAiLVByIjsKKwkJY29udGludWU7CisJCX0KKwkgICAgd2hpbGUgKGJ1ZltpXSA9PSAnICcpCisJCWkrKzsKKwkgICAgaWYgKGJ1ZltpXSA9PSAnXDAnIHx8IGJ1ZltpXSA9PSAnXG4nKQorCQlicmVhazsKKwkgICAgaWFyZ1thcmdubysrXSA9ICZidWZbaV07CisJICAgIHdoaWxlIChidWZbaV0gIT0gJyAnCisJCSYmIGJ1ZltpXSAhPSAnXDAnICYmIGJ1ZltpXSAhPSAnXG4nKQorCQlpKys7CisJICAgIGJ1ZltpKytdID0gJ1wwJzsKKwkgICAgfQorCWlhcmdbYXJnbm9dID0gTlVMTDsKKworCWlmICgoa2lsbF9waWQgPSBzcGF3bnZwKFBfTk9XQUlUTywgaWFyZ1swXSwgaWFyZykpID09IC0xKSB7CisJICAgIHBlcnJvcigic3Bhd25pbmcgaW5wdXQgcmVzbWdyIik7CisJICAgIFBNX2ZhdGFsRXJyb3IoIkNvdWxkIG5vdCBzdGFydCBpbnB1dCByZXNtZ3IiKTsKKwkgICAgfQorCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJICAgIGlmIChzdGF0KCIvZGV2L21vdXNlMCIsICZzdCkgPT0gMCkKKwkJYnJlYWs7CisJICAgIHNsZWVwKDEpOworCSAgICB9CisJaWYgKChtb3VzZV9mZCA9IG9wZW4oIi9kZXYvbW91c2UwIiwgT19SRE9OTFl8T19OT05CTE9DSykpIDwgMCkgeworCSAgICBwZXJyb3IoIi9kZXYvbW91c2UwIik7CisJICAgIFBNX2ZhdGFsRXJyb3IoIkNvdWxkIG5vdCBvcGVuIC9kZXYvbW91c2UwIik7CisJICAgIH0KKwl9CiAgICAgaWYgKChrYmRfZmQgPSBvcGVuKCIvZGV2L2tleWJvYXJkMCIsIE9fUkRPTkxZfE9fTk9OQkxPQ0spKSA8IDApIHsKLSAgICAgICAgcGVycm9yKCIvZGV2L2tleWJvYXJkMCIpOwotICAgICAgICBQTV9mYXRhbEVycm9yKCJDb3VsZCBub3Qgb3BlbiAvZGV2L2tleWJvYXJkMCIpOwotICAgICAgICB9CisJcGVycm9yKCIvZGV2L2tleWJvYXJkMCIpOworCVBNX2ZhdGFsRXJyb3IoIkNvdWxkIG5vdCBvcGVuIC9kZXYva2V5Ym9hcmQwIik7CisJfQogI2Vsc2UKICAgICAvKiBDb25uZWN0IHRvIElucHV0L01vdXNlIGZvciBldmVudCBoYW5kbGluZyAqLwogICAgIGlmIChfUE1fbW91c2VfY3RsID09IE5VTEwpIHsKLSAgICAgICAgX1BNX21vdXNlX2N0bCA9IG1vdXNlX29wZW4oMCwgIi9kZXYvbW91c2UiLCAwKTsKKwlfUE1fbW91c2VfY3RsID0gbW91c2Vfb3BlbigwLCAiL2Rldi9tb3VzZSIsIDApOwogCi0gICAgICAgIC8qICJNb3VzZSIgaXMgbm90IHJ1bm5pbmc7IGF0dGVtcHQgdG8gc3RhcnQgaXQgKi8KLSAgICAgICAgaWYgKF9QTV9tb3VzZV9jdGwgPT0gTlVMTCkgewotICAgICAgICAgICAgaWFyZ1swXSA9ICJtb3VzZXRyYXAiOwotICAgICAgICAgICAgaWFyZ1sxXSA9ICJzdGFydCI7Ci0gICAgICAgICAgICBpYXJnWzJdID0gTlVMTDsKLSAgICAgICAgICAgIGlmICgoa2lsbF9waWQgPSBzcGF3bnZwKFBfTk9XQUlUTywgaWFyZ1swXSwgKHZvaWQqKWlhcmcpKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBwZXJyb3IoInNwYXduIChtb3VzZXRyYXApIik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdCgiL2Rldi9tb3VzZSIsICZzdCkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzbGVlcCgxKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIF9QTV9tb3VzZV9jdGwgPSBtb3VzZV9vcGVuKDAsICIvZGV2L21vdXNlIiwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJLyogIk1vdXNlIiBpcyBub3QgcnVubmluZzsgYXR0ZW1wdCB0byBzdGFydCBpdCAqLworCWlmIChfUE1fbW91c2VfY3RsID09IE5VTEwpIHsKKwkgICAgaWFyZ1swXSA9ICJtb3VzZXRyYXAiOworCSAgICBpYXJnWzFdID0gInN0YXJ0IjsKKwkgICAgaWFyZ1syXSA9IE5VTEw7CisJICAgIGlmICgoa2lsbF9waWQgPSBzcGF3bnZwKFBfTk9XQUlUTywgaWFyZ1swXSwgKHZvaWQqKWlhcmcpKSA9PSAtMSkKKwkJcGVycm9yKCJzcGF3biAobW91c2V0cmFwKSIpOworCSAgICBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJICAgIGlmIChzdGF0KCIvZGV2L21vdXNlIiwgJnN0KSA9PSAwKQorCQkJYnJlYWs7CisJCSAgICBzbGVlcCgxKTsKKwkJICAgIH0KKwkJX1BNX21vdXNlX2N0bCA9IG1vdXNlX29wZW4oMCwgIi9kZXYvbW91c2UiLCAwKTsKKwkJfQorCSAgICB9CisJfQogICAgIGlmIChfUE1fa2V5Ym9hcmRfZmQgPT0gLTEpCi0gICAgICAgIF9QTV9rZXlib2FyZF9mZCA9IG9wZW4oIi9kZXYva2JkIiwgT19SRE9OTFl8T19OT05CTE9DSyk7CisJX1BNX2tleWJvYXJkX2ZkID0gb3BlbigiL2Rldi9rYmQiLCBPX1JET05MWXxPX05PTkJMT0NLKTsKICNlbmRpZgogCiAgICAgLyogQ2F0Y2ggcHJvZ3JhbSB0ZXJtaW5hdGlvbiBzaWduYWxzIHNvIHdlIGNhbiBjbGVhbiB1cCBwcm9wZXJseSAqLwpAQCAtNTMyLDcgKzUzMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBFVlRfcmVzdW1lKHZvaWQpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3IgUU5YCisgICAgLyogRG8gbm90aGluZyBmb3IgUU5YICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NDIsNyArNTQyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIEVWVF9zdXNwZW5kKHZvaWQpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3IgUU5YCisgICAgLyogRG8gbm90aGluZyBmb3IgUU5YICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NTYsMTMgKzU1NiwxMyBAQAogICAgIGludCBmbGFnczsKIAogICAgIGlmIChrYmRfZmQgIT0gLTEpIHsKLSAgICAgICAgY2xvc2Uoa2JkX2ZkKTsKLSAgICAgICAga2JkX2ZkID0gLTE7Ci0gICAgICAgIH0KKwljbG9zZShrYmRfZmQpOworCWtiZF9mZCA9IC0xOworCX0KICAgICBpZiAobW91c2VfZmQgIT0gLTEpIHsKLSAgICAgICAgY2xvc2UobW91c2VfZmQpOwotICAgICAgICBtb3VzZV9mZCA9IC0xOwotICAgICAgICB9CisJY2xvc2UobW91c2VfZmQpOworCW1vdXNlX2ZkID0gLTE7CisJfQogI2VuZGlmCiAKICAgICAvKiBSZXN0b3JlIHNpZ25hbCBoYW5kbGVycyAqLwpAQCAtNTczLDMwICs1NzMsMjkgQEAKICNpZm5kZWYgX19RTlhOVE9fXwogICAgIC8qIEtpbGwgdGhlIElucHV0L01vdXNlIGRyaXZlciBpZiB3ZSBoYXZlIHNwYXduZWQgaXQgKi8KICAgICBpZiAoX1BNX21vdXNlX2N0bCAhPSBOVUxMKSB7Ci0gICAgICAgIHN0cnVjdCBfZmRfZW50cnkgICAgZmRlOwotICAgICAgICB1aW50ICAgICAgICAgICAgcGlkID0gMDsKKwlzdHJ1Y3QgX2ZkX2VudHJ5ICAgIGZkZTsKKwl1aW50ICAgICAgICAgICAgcGlkID0gMDsKIAotICAgICAgICAvKiBGaW5kIG91dCB0aGUgcGlkIG9mIHRoZSBtb3VzZSBkcml2ZXIgKi8KLSAgICAgICAgaWYgKGtpbGxfcGlkID4gMCkgewotICAgICAgICAgICAgaWYgKHFueF9mZF9xdWVyeSgwLAotICAgICAgICAgICAgICAgIDAsIF9QTV9tb3VzZV9jdGwtPmZkLCAmZmRlKSAhPSAtMSkKLSAgICAgICAgICAgICAgICBwaWQgPSBmZGUucGlkOwotICAgICAgICAgICAgfQotICAgICAgICBtb3VzZV9jbG9zZShfUE1fbW91c2VfY3RsKTsKLSAgICAgICAgX1BNX21vdXNlX2N0bCA9IE5VTEw7CisJLyogRmluZCBvdXQgdGhlIHBpZCBvZiB0aGUgbW91c2UgZHJpdmVyICovCisJaWYgKGtpbGxfcGlkID4gMCkgeworCSAgICBpZiAocW54X2ZkX3F1ZXJ5KDAsCisJCTAsIF9QTV9tb3VzZV9jdGwtPmZkLCAmZmRlKSAhPSAtMSkKKwkJcGlkID0gZmRlLnBpZDsKKwkgICAgfQorCW1vdXNlX2Nsb3NlKF9QTV9tb3VzZV9jdGwpOworCV9QTV9tb3VzZV9jdGwgPSBOVUxMOwogCi0gICAgICAgIGlmIChwaWQgPiAwKSB7Ci0gICAgICAgICAgICAvKiBGb3Igc29tZSByZWFzb25zIHRoZSBQSUQncyBhcmUgZGlmZmVyZW50IHVuZGVyIFFOWDQsCi0gICAgICAgICAgICAgKiBzbyB3ZSB1c2UgdGhlIG9sZCBtZWNoYW5pc20gdG8ga2lsbCB0aGUgbW91c2Ugc2VydmVyLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBraWxsKHBpZCwgU0lHVEVSTSk7Ci0gICAgICAgICAgICBraWxsX3BpZCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAocGlkID4gMCkgeworCSAgICAvKiBGb3Igc29tZSByZWFzb25zIHRoZSBQSUQncyBhcmUgZGlmZmVyZW50IHVuZGVyIFFOWDQsCisJICAgICAqIHNvIHdlIHVzZSB0aGUgb2xkIG1lY2hhbmlzbSB0byBraWxsIHRoZSBtb3VzZSBzZXJ2ZXIuCisJICAgICAqLworCSAgICBraWxsKHBpZCwgU0lHVEVSTSk7CisJICAgIGtpbGxfcGlkID0gMDsKKwkgICAgfQorCX0KICNlbmRpZgogICAgIGlmIChraWxsX3BpZCA+IDApIHsKLSAgICAgICAga2lsbChraWxsX3BpZCwgU0lHVEVSTSk7Ci0gICAgICAgIGtpbGxfcGlkID0gMDsKLSAgICAgICAgfQorCWtpbGwoa2lsbF9waWQsIFNJR1RFUk0pOworCWtpbGxfcGlkID0gMDsKKwl9CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3FueC9tdHJycW54LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9xbngvbXRycnFueC5jCmluZGV4IGRlNzQ5ZTMuLmY5NjBjNzUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3FueC9tdHJycW54LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vcW54L210cnJxbnguYwpAQCAtNzUsNyArNzUsNyBAQAogaWJvb2wgX0FTTUFQSSBfTVRSUl9pc1JpbmcwKHZvaWQpCiB7CiAjaWZkZWYgX19RTlhOVE9fXwotICAgIHJldHVybiBmYWxzZTsgICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0IQorICAgIHJldHVybiBmYWxzZTsgICAvKiBOb3QgaW1wbGVtZW50ZWQgeWV0ISAqLwogI2Vsc2UKICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgpAQCAtMTAxLDE1ICsxMDEsMTUgQEAKICNlbmRpZgogI2lmZGVmIF9fUU5YTlRPX18KICAgICBpZiAoKGludHJpZCA9IEludGVycnVwdEF0dGFjaChfTlRPX0lOVFJfQ0xBU1NfRVhURVJOQUwgfCBjbG9ja19pbnRubywKLSAgICAgICAgX1BNX3JpbmcwX2lzciwgKHZvaWQqKSZfUE1fUjAsIHNpemVvZihfUE1fUjApLCBfTlRPX0lOVFJfRkxBR1NfRU5EKSkgPT0gLTEpIHsKKwlfUE1fcmluZzBfaXNyLCAodm9pZCopJl9QTV9SMCwgc2l6ZW9mKF9QTV9SMCksIF9OVE9fSU5UUl9GTEFHU19FTkQpKSA9PSAtMSkgewogI2Vsc2UKICAgICBpZiAoKGludHJpZCA9IHFueF9oaW50X2F0dGFjaChjbG9ja19pbnRubywgX1BNX3JpbmcwX2lzciwgRlBfU0VHKCZfUE1fUjApKSkgPT0gLTEpIHsKICNlbmRpZgotICAgICAgICBwZXJyb3IoIkF0dGFjaCIpOwotICAgICAgICBleGl0KC0xKTsKLSAgICAgICAgfQorCXBlcnJvcigiQXR0YWNoIik7CisJZXhpdCgtMSk7CisJfQogICAgIHdoaWxlIChfUE1fUjAuc2VydmljZSAhPSAtMSkKLSAgICAgICAgOworCTsKICNpZmRlZiBfX1FOWE5UT19fCiAgICAgSW50ZXJydXB0RGV0YWNoSWQoaW50cmlkKTsKICNlbHNlCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9xbngvcG0uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3FueC9wbS5jCmluZGV4IGMyYjQxZWIuLmM5OTNlZTAgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3FueC9wbS5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3FueC9wbS5jCkBAIC03NywxMSArNzcsMTEgQEAKIAogICAgIGlmIChWUmVncyA9PSBOVUxMKSB7CiAjaWZkZWYgIF9fUU5YTlRPX18KLSAgICAgICAgVGhyZWFkQ3RsKF9OVE9fVENUTF9JTywgMCk7IC8qIEdldCBJTyBwcml2aWxpZGdlICovCisJVGhyZWFkQ3RsKF9OVE9fVENUTF9JTywgMCk7IC8qIEdldCBJTyBwcml2aWxpZGdlICovCiAjZW5kaWYKLSAgICAgICAgZm9yY2UgPSBnZXRlbnYoIlZCSU9TX01FVEhPRCIpOwotICAgICAgICBWUmVncyA9IFZCSU9TaW5pdChmb3JjZSA/IGF0b2koZm9yY2UpIDogMCk7Ci0gICAgICAgIH0KKwlmb3JjZSA9IGdldGVudigiVkJJT1NfTUVUSE9EIik7CisJVlJlZ3MgPSBWQklPU2luaXQoZm9yY2UgPyBhdG9pKGZvcmNlKSA6IDApOworCX0KICNpZm5kZWYgIF9fUU5YTlRPX18KICAgICBNVFJSX2luaXQoKTsKICNlbmRpZgpAQCAtMTAwLDkgKzEwMCw5IEBACiB7CiAgICAgdWludCBwb3MgPSBzdHJsZW4ocyk7CiAgICAgaWYgKHNbcG9zLTFdICE9ICcvJykgewotICAgICAgICBzW3Bvc10gPSAnLyc7Ci0gICAgICAgIHNbcG9zKzFdID0gJ1wwJzsKLSAgICAgICAgfQorCXNbcG9zXSA9ICcvJzsKKwlzW3BvcysxXSA9ICdcMCc7CisJfQogfQogCiB2b2lkIFBNQVBJIFBNX3NldEZhdGFsRXJyb3JDbGVhbnVwKApAQCAtMTE0LDcgKzExNCw3IEBACiB2b2lkIFBNQVBJIFBNX2ZhdGFsRXJyb3IoY29uc3QgY2hhciAqbXNnKQogewogICAgIGlmIChmYXRhbEVycm9yQ2xlYW51cCkKLSAgICAgICAgZmF0YWxFcnJvckNsZWFudXAoKTsKKwlmYXRhbEVycm9yQ2xlYW51cCgpOwogICAgIGZwcmludGYoc3RkZXJyLCIlc1xuIiwgbXNnKTsKICAgICBleGl0KDEpOwogfQpAQCAtMTIyLDE4ICsxMjIsMTggQEAKIHN0YXRpYyB2b2lkIEV4aXRWQkVCdWYodm9pZCkKIHsKICAgICBpZiAoVkVTQUJ1Zl9wdHIpCi0gICAgICAgIFBNX2ZyZWVSZWFsU2VnKFZFU0FCdWZfcHRyKTsKKwlQTV9mcmVlUmVhbFNlZyhWRVNBQnVmX3B0cik7CiAgICAgVkVTQUJ1Zl9wdHIgPSAwOwogfQogCiB2b2lkICogUE1BUEkgUE1fZ2V0VkVTQUJ1Zih1aW50ICpsZW4sdWludCAqcnNlZyx1aW50ICpyb2ZmKQogewogICAgIGlmICghVkVTQUJ1Zl9wdHIpIHsKLSAgICAgICAgLyogQWxsb2NhdGUgYSBnbG9iYWwgYnVmZmVyIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIFZFU0EgVkJFICovCi0gICAgICAgIGlmICgoVkVTQUJ1Zl9wdHIgPSBQTV9hbGxvY1JlYWxTZWcoVkVTQUJ1Zl9sZW4sICZWRVNBQnVmX3JzZWcsICZWRVNBQnVmX3JvZmYpKSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGF0ZXhpdChFeGl0VkJFQnVmKTsKLSAgICAgICAgfQorCS8qIEFsbG9jYXRlIGEgZ2xvYmFsIGJ1ZmZlciBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBWRVNBIFZCRSAqLworCWlmICgoVkVTQUJ1Zl9wdHIgPSBQTV9hbGxvY1JlYWxTZWcoVkVTQUJ1Zl9sZW4sICZWRVNBQnVmX3JzZWcsICZWRVNBQnVmX3JvZmYpKSA9PSBOVUxMKQorCSAgICByZXR1cm4gTlVMTDsKKwlhdGV4aXQoRXhpdFZCRUJ1Zik7CisJfQogICAgICpsZW4gPSBWRVNBQnVmX2xlbjsKICAgICAqcnNlZyA9IFZFU0FCdWZfcnNlZzsKICAgICAqcm9mZiA9IFZFU0FCdWZfcm9mZjsKQEAgLTE0NSwxMSArMTQ1LDExIEBACiAgICAgc3RydWN0IHRlcm1pb3MgIHRlcm1pb3NfcDsKIAogICAgIGlmIChyYXdfY291bnQrKyA+IDApCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogCiAgICAgLyogR28gaW50byAicmF3IiBpbnB1dCBtb2RlICovCiAgICAgaWYgKHRjZ2V0YXR0cihTVERJTl9GSUxFTk8sICZ0ZXJtaW9zX3ApKQotICAgICAgICByZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogCiAgICAgdGVybWlvc19wLmNfY2NbVk1JTl0gPSAgMTsKICAgICB0ZXJtaW9zX3AuY19jY1tWVElNRV0gPSAgMDsKQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgIHN0cnVjdCB0ZXJtaW9zICB0ZXJtaW9zX3A7CiAKICAgICBpZiAocmF3X2NvdW50LS0gIT0gMSkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKIAogICAgIHRjZ2V0YXR0cihTVERJTl9GSUxFTk8sICZ0ZXJtaW9zX3ApOwogICAgIHRlcm1pb3NfcC5jX2xmbGFnIHw9IChFQ0hPfElDQU5PTnxJU0lHfEVDSE9FfEVDSE9LfEVDSE9OTCk7CkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICBpbnQgYmxvY2tpbmcsIGM7CiAKICAgICBpZiAodGVybV9yYXcoKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAKICAgICAvKiBHbyBpbnRvIG5vbiBibG9ja2luZyBtb2RlICovCiAgICAgYmxvY2tpbmcgPSBmY250bChTVERJTl9GSUxFTk8sIEZfR0VURkwpIHwgT19OT05CTE9DSzsKQEAgLTE4Nyw5ICsxODcsOSBAQAogICAgIGZjbnRsKFNURElOX0ZJTEVOTywgRl9TRVRGTCwgYmxvY2tpbmcgJiB+T19OT05CTE9DSyk7CiAgICAgdGVybV9yZXN0b3JlKCk7CiAgICAgaWYgKGMgIT0gRU9GKSB7Ci0gICAgICAgIHVuZ2V0YyhjLCBzdGRpbik7Ci0gICAgICAgIHJldHVybiBjOwotICAgICAgICB9CisJdW5nZXRjKGMsIHN0ZGluKTsKKwlyZXR1cm4gYzsKKwl9CiAgICAgY2xlYXJlcnIoc3RkaW4pOwogICAgIHJldHVybiAwOwogfQpAQCAtMTk5LDEzICsxOTksMTMgQEAKICAgICBpbnQgYzsKIAogICAgIGlmICh0ZXJtX3JhdygpID09IC0xKQotICAgICAgICByZXR1cm4gKDApOworCXJldHVybiAoMCk7CiAgICAgYyA9IGdldGMoc3RkaW4pOwogI2lmIGRlZmluZWQoX19RTlhfXykgJiYgIWRlZmluZWQoX19RTlhOVE9fXykKICAgICBpZiAoYyA9PSAweEEpCi0gICAgICAgIGMgPSAweDBEOworCWMgPSAweDBEOwogICAgIGVsc2UgaWYgKGMgPT0gMHg3RikKLSAgICAgICAgYyA9IDB4MDg7CisJYyA9IDB4MDg7CiAjZW5kaWYKICAgICB0ZXJtX3Jlc3RvcmUoKTsKICAgICByZXR1cm4gYzsKQEAgLTIyMywxMyArMjIzLDEzIEBACiAgICAgaW50IGZkOwogCiAgICAgaWYgKGNvbnNvbGVfY291bnQrKykKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgaWYgKChmZCA9IG9wZW4oIi9kZXYvY29uMSIsIE9fUkRXUikpID09IC0xKQotICAgICAgICByZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogICAgIGNjID0gY29uc29sZV9vcGVuKGZkLCBPX1JEV1IpOwogICAgIGNsb3NlKGZkKTsKICAgICBpZiAoY2MgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICNlbmRpZgogICAgIHJldHVybiAxOwogfQpAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgaW50ICAgICBmbGFnczsKIAogICAgIGlmICgoZmQgPSBvcGVuKCIvZGV2L2NvbjEiLCBPX1JEV1IpKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICBmbGFncyA9IF9DT05DVExfSU5WSVNJQkxFX0NIRyB8IF9DT05DVExfSU5WSVNJQkxFOwogICAgIGRldmN0bChmZCwgRENNRF9DSFJfU0VSQ1RMLCAmZmxhZ3MsIHNpemVvZiBmbGFncywgMCk7CiAgICAgY2xvc2UoZmQpOwpAQCAtMjU1LDEwICsyNTUsMTAgQEAKIAogICAgIC8qIFNhdmUgUU5YIDQgY29uc29sZSBzdGF0ZSAqLwogICAgIGNvbnNvbGVfcmVhZChjYywgLTEsIDAsIE5VTEwsIDAsCi0gICAgICAgIChpbnQgKilidWYrMSwgKGludCAqKWJ1ZisyLCBOVUxMKTsKKwkoaW50ICopYnVmKzEsIChpbnQgKilidWYrMiwgTlVMTCk7CiAgICAgKihpbnQgKilidWYgPSBjb25zb2xlX2N0cmwoY2MsIC0xLAotICAgICAgICBDT05TT0xFX05PUkVTSVpFIHwgQ09OU09MRV9OT1NXSVRDSCB8IENPTlNPTEVfSU5WSVNJQkxFLAotICAgICAgICBDT05TT0xFX05PUkVTSVpFIHwgQ09OU09MRV9OT1NXSVRDSCB8IENPTlNPTEVfSU5WSVNJQkxFKTsKKwlDT05TT0xFX05PUkVTSVpFIHwgQ09OU09MRV9OT1NXSVRDSCB8IENPTlNPTEVfSU5WSVNJQkxFLAorCUNPTlNPTEVfTk9SRVNJWkUgfCBDT05TT0xFX05PU1dJVENIIHwgQ09OU09MRV9JTlZJU0lCTEUpOwogCiAgICAgLyogU2F2ZSBzdGF0ZSBvZiBWR0EgcmVnaXN0ZXJzICovCiAgICAgUE1fc2F2ZVZHQVN0YXRlKHN0YXRlQnVmKTsKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICAgIGludCAgICAgZmxhZ3M7CiAKICAgICBpZiAoKGZkID0gb3BlbigiL2Rldi9jb24xIiwgT19SRFdSKSkgPT0gLTEpCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAgICAgZmxhZ3MgPSBfQ09OQ1RMX0lOVklTSUJMRV9DSEc7CiAgICAgZGV2Y3RsKGZkLCBEQ01EX0NIUl9TRVJDVEwsICZmbGFncywgc2l6ZW9mIGZsYWdzLCAwKTsKICAgICBjbG9zZShmZCk7CkBAIC0yODksOSArMjg5LDkgQEAKIAogICAgIC8qIFJlc3RvcmUgUU5YIDQgY29uc29sZSBzdGF0ZSAqLwogICAgIGNvbnNvbGVfY3RybChjYywgLTEsICooaW50ICopYnVmLAotICAgICAgICBDT05TT0xFX05PUkVTSVpFIHwgQ09OU09MRV9OT1NXSVRDSCB8IENPTlNPTEVfSU5WSVNJQkxFKTsKKwlDT05TT0xFX05PUkVTSVpFIHwgQ09OU09MRV9OT1NXSVRDSCB8IENPTlNPTEVfSU5WSVNJQkxFKTsKICAgICBjb25zb2xlX3dyaXRlKGNjLCAtMSwgMCwgTlVMTCwgMCwKLSAgICAgICAgKGludCAqKWJ1ZisxLCAoaW50ICopYnVmKzIsIE5VTEwpOworCShpbnQgKilidWYrMSwgKGludCAqKWJ1ZisyLCBOVUxMKTsKICNlbmRpZgogfQogCkBAIC0yOTksMTYgKzI5OSwxNiBAQAogewogI2lmbmRlZiBfX1FOWE5UT19fCiAgICAgaWYgKC0tY29uc29sZV9jb3VudCA9PSAwKSB7Ci0gICAgICAgIGNvbnNvbGVfY2xvc2UoY2MpOwotICAgICAgICBjYyA9IE5VTEw7Ci0gICAgICAgIH0KKwljb25zb2xlX2Nsb3NlKGNjKTsKKwljYyA9IE5VTEw7CisJfQogI2VuZGlmCiB9CiAKIHZvaWQgUE1fc2V0T1NDdXJzb3JMb2NhdGlvbihpbnQgeCxpbnQgeSkKIHsKICAgICBpZiAoIWNjKQotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogI2lmbmRlZiBfX1FOWE5UT19fCiAgICAgY29uc29sZV93cml0ZShjYywgLTEsIDAsIE5VTEwsIDAsICZ5LCAmeCwgTlVMTCk7CiAjZW5kaWYKQEAgLTMyMCwxOCArMzIwLDE4IEBACiAKIGlib29sIFBNQVBJIFBNX3NldFJlYWxUaW1lQ2xvY2tIYW5kbGVyKFBNX2ludEhhbmRsZXIgaWgsIGludCBmcmVxdWVuY3kpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIFFOWAorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzIGZvciBRTlggKi8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUE1BUEkgUE1fc2V0UmVhbFRpbWVDbG9ja0ZyZXF1ZW5jeShpbnQgZnJlcXVlbmN5KQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIGZvciBRTlgKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyBmb3IgUU5YICovCiB9CiAKIHZvaWQgUE1BUEkgUE1fcmVzdG9yZVJlYWxUaW1lQ2xvY2tIYW5kbGVyKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgZm9yIFFOWAorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzIGZvciBRTlggKi8KIH0KIAogY2hhciAqIFBNQVBJIFBNX2dldEN1cnJlbnRQYXRoKApAQCAtMzg4LDEwICszODgsMTAgQEAKICAgICBzcHJpbnRmKHBhdGgsIi9ldGMvY29uZmlnL3NjaXRlY2gvJWQvY29uZmlnIiwgZ2V0bmlkKCkpOwogI2VuZGlmCiAgICAgaWYgKChlbnYgPSBnZXRlbnYoIk5VQ0xFVVNfUEFUSCIpKSAhPSBOVUxMKSB7Ci0gICAgICAgIHN0cmNweShwYXRoLGVudik7Ci0gICAgICAgIFBNX2JhY2tzbGFzaChwYXRoKTsKLSAgICAgICAgc3RyY2F0KHBhdGgsImNvbmZpZyIpOwotICAgICAgICB9CisJc3RyY3B5KHBhdGgsZW52KTsKKwlQTV9iYWNrc2xhc2gocGF0aCk7CisJc3RyY2F0KHBhdGgsImNvbmZpZyIpOworCX0KICAgICByZXR1cm4gcGF0aDsKIH0KIApAQCAtNDI5LDI2ICs0MjksMjYgQEAKICAgICB1bnNpZ25lZCBvZmZzZXQsIGksIG1hcGxlbjsKIAogICAgIGlmIChwdHIgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHB0cjsKKwlyZXR1cm4gcHRyOwogCiAgICAgLyogU29tZSB0cmlja2VyeSBpcyByZXF1aXJlZCB0byBnZXQgdGhlIGxpbmVhciBhZGRyZXNzIDY0SyBhbGlnbmVkICovCiAgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotICAgICAgICBwdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMHhBMDAwMCwweEZGRkYsdHJ1ZSk7Ci0gICAgICAgIG9mZnNldCA9IDB4MTAwMDAgLSAoKHVuc2lnbmVkKXB0ciAlIDB4MTAwMDApOwotICAgICAgICBpZiAoIW9mZnNldCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtdW5tYXAocHRyLCAweDEwMDAwKTsKLSAgICAgICAgbWFwbGVuID0gMHgxMDAwMCArIG9mZnNldDsKLSAgICAgICAgZnJlZXB0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigweEEwMDAwLW9mZnNldCwgbWFwbGVuLTEsdHJ1ZSk7Ci0gICAgICAgIHB0ciA9ICh2b2lkICopKG9mZnNldCArICh1bnNpZ25lZClmcmVlcHRyKTsKLSAgICAgICAgaWYgKDB4MTAwMDAgLSAoKHVuc2lnbmVkKXB0ciAlIDB4MTAwMDApKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG11bm1hcChmcmVlcHRyLCBtYXBsZW4pOwotICAgICAgICB9CisJcHRyID0gUE1fbWFwUGh5c2ljYWxBZGRyKDB4QTAwMDAsMHhGRkZGLHRydWUpOworCW9mZnNldCA9IDB4MTAwMDAgLSAoKHVuc2lnbmVkKXB0ciAlIDB4MTAwMDApOworCWlmICghb2Zmc2V0KQorCSAgICBicmVhazsKKwltdW5tYXAocHRyLCAweDEwMDAwKTsKKwltYXBsZW4gPSAweDEwMDAwICsgb2Zmc2V0OworCWZyZWVwdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMHhBMDAwMC1vZmZzZXQsIG1hcGxlbi0xLHRydWUpOworCXB0ciA9ICh2b2lkICopKG9mZnNldCArICh1bnNpZ25lZClmcmVlcHRyKTsKKwlpZiAoMHgxMDAwMCAtICgodW5zaWduZWQpcHRyICUgMHgxMDAwMCkpCisJICAgIGJyZWFrOworCW11bm1hcChmcmVlcHRyLCBtYXBsZW4pOworCX0KICAgICBpZiAoaSA9PSA1KSB7Ci0gICAgICAgIHByaW50ZigiQ291bGQgbm90IGdldCBhIDY0SyBhbGlnbmVkIGxpbmVhciBhZGRyZXNzIGZvciBBMDAwMCByZWdpb25cbiIpOwotICAgICAgICBleGl0KDEpOwotICAgICAgICB9CisJcHJpbnRmKCJDb3VsZCBub3QgZ2V0IGEgNjRLIGFsaWduZWQgbGluZWFyIGFkZHJlc3MgZm9yIEEwMDAwIHJlZ2lvblxuIik7CisJZXhpdCgxKTsKKwl9CiAgICAgcmV0dXJuIHB0cjsKIH0KIApAQCAtNDY4LDMxICs0NjgsMzEgQEAKICNlbmRpZgogCiAgICAgaWYgKHJvdW5kZG93bikgewotICAgICAgICBpZiAoYmFzZSA8IHJvdW5kZG93bikKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBiYXNlIC09IHJvdW5kZG93bjsKLSAgICAgICAgbGltaXQgKz0gcm91bmRkb3duOwotICAgICAgICB9CisJaWYgKGJhc2UgPCByb3VuZGRvd24pCisJICAgIHJldHVybiBOVUxMOworCWJhc2UgLT0gcm91bmRkb3duOworCWxpbWl0ICs9IHJvdW5kZG93bjsKKwl9CiAKICNpZm5kZWYgX19RTlhOVE9fXwogICAgIGlmIChfX1ZpZEZEIDwgMCkgewotICAgICAgICBpZiAoKF9fVmlkRkQgPSBzaG1fb3BlbiggIlBoeXNpY2FsIiwgT19SRFdSLCAwNzc3ICkpID09IC0xKSB7Ci0gICAgICAgICAgICBwZXJyb3IoICJDYW5ub3Qgb3BlbiBQaHlzaWNhbCBtZW1vcnkiICk7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKChfX1ZpZEZEID0gc2htX29wZW4oICJQaHlzaWNhbCIsIE9fUkRXUiwgMDc3NyApKSA9PSAtMSkgeworCSAgICBwZXJyb3IoICJDYW5ub3Qgb3BlbiBQaHlzaWNhbCBtZW1vcnkiICk7CisJICAgIGV4aXQoMSk7CisJICAgIH0KKwl9CiAgICAgbyA9IGJhc2UgJiAweEZGRjsKICAgICBsaW1pdCA9IChsaW1pdCArIG8gKyAweEZGRikgJiB+MHhGRkY7CiAgICAgaWYgKChpbnQpKHAgPSBtbWFwKCAwLCBsaW1pdCwgcHJvdCwgTUFQX1NIQVJFRCwKLSAgICAgICAgICAgIF9fVmlkRkQsIGJhc2UgKSkgPT0gLTEgKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisJICAgIF9fVmlkRkQsIGJhc2UgKSkgPT0gLTEgKSB7CisJcmV0dXJuIE5VTEw7CisJfQogICAgIHAgKz0gbzsKICNlbHNlCiAgICAgaWYgKChwID0gbW1hcCgwLCBsaW1pdCwgcHJvdCwgTUFQX1BIWVMgfCBNQVBfU0hBUkVELAotICAgICAgICAgICAgTk9GRCwgYmFzZSkpID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgcmV0dXJuICh2b2lkICopLTE7Ci0gICAgICAgIH0KKwkgICAgTk9GRCwgYmFzZSkpID09IE1BUF9GQUlMRUQpIHsKKwlyZXR1cm4gKHZvaWQgKiktMTsKKwl9CiAjZW5kaWYKICAgICByZXR1cm4gKHAgKyByb3VuZGRvd24pOwogfQpAQCAtNTA0LDggKzUwNCw4IEBACiAKIHVsb25nIFBNQVBJIFBNX2dldFBoeXNpY2FsQWRkcih2b2lkICpwKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBsaW5lYXIKLSAgICAvLyAgICAgICBhZGRyZXNzLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBsaW5lYXIgKi8KKyAgICAvKiAgICAgICBhZGRyZXNzLiAqLwogICAgIHJldHVybiAweEZGRkZGRkZGVUw7CiB9CiAKQEAgLTUxNCwzNSArNTE0LDM1IEBACiAgICAgdWxvbmcgbGVuZ3RoLAogICAgIHVsb25nICpwaHlzQWRkcmVzcykKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyEKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyEgKi8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUE1BUEkgUE1fc2xlZXAodWxvbmcgbWlsbGlzZWNvbmRzKQogewotICAgIC8vIFRPRE86IFB1dCB0aGUgcHJvY2VzcyB0byBzbGVlcCBmb3IgbWlsbGlzZWNvbmRzCisgICAgLyogVE9ETzogUHV0IHRoZSBwcm9jZXNzIHRvIHNsZWVwIGZvciBtaWxsaXNlY29uZHMgKi8KIH0KIAogaW50IFBNQVBJIFBNX2dldENPTVBvcnQoaW50IHBvcnQpCiB7Ci0gICAgLy8gVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheQotICAgIC8vICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4KKyAgICAvKiBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5ICovCisgICAgLyogICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLiAqLwogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNGODsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgyRjg7Ci0gICAgICAgIH0KKwljYXNlIDA6IHJldHVybiAweDNGODsKKwljYXNlIDE6IHJldHVybiAweDJGODsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKIGludCBQTUFQSSBQTV9nZXRMUFRQb3J0KGludCBwb3J0KQogewotICAgIC8vIFRPRE86IFJlLWNvZGUgdGhpcyB0byBkZXRlcm1pbmUgcmVhbCB2YWx1ZXMgdXNpbmcgdGhlIFBsdWcgYW5kIFBsYXkKLSAgICAvLyAgICAgICBtYW5hZ2VyIGZvciB0aGUgT1MuCisgICAgLyogVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheSAqLworICAgIC8qICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4gKi8KICAgICBzd2l0Y2ggKHBvcnQpIHsKLSAgICAgICAgY2FzZSAwOiByZXR1cm4gMHgzQkM7Ci0gICAgICAgIGNhc2UgMTogcmV0dXJuIDB4Mzc4OwotICAgICAgICBjYXNlIDI6IHJldHVybiAweDI3ODsKLSAgICAgICAgfQorCWNhc2UgMDogcmV0dXJuIDB4M0JDOworCWNhc2UgMTogcmV0dXJuIDB4Mzc4OworCWNhc2UgMjogcmV0dXJuIDB4Mjc4OworCX0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtNTY2LDIwICs1NjYsMjAgQEAKICAgICBQTV9pbml0KCk7CiAKICAgICBpZiAoKHAgPSBWQklPU2dldG1lbXB0cihyX3NlZywgcl9vZmYsIFZSZWdzKSkgPT0gKHZvaWQgKiktMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIHA7CiB9CiAKIHZvaWQgKiBQTUFQSSBQTV9hbGxvY1JlYWxTZWcodWludCBzaXplLHVpbnQgKnJfc2VnLHVpbnQgKnJfb2ZmKQogewogICAgIGlmIChzaXplID4gMTAyNCkgewotICAgICAgICBwcmludGYoIlBNX2FsbG9jUmVhbFNlZzogY2FuJ3QgaGFuZGxlICVkIGJ5dGVzXG4iLCBzaXplKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KKwlwcmludGYoIlBNX2FsbG9jUmVhbFNlZzogY2FuJ3QgaGFuZGxlICVkIGJ5dGVzXG4iLCBzaXplKTsKKwlyZXR1cm4gMDsKKwl9CiAgICAgaWYgKHJtYnVmX2ludXNlICE9IDApIHsKLSAgICAgICAgcHJpbnRmKCJQTV9hbGxvY1JlYWxTZWc6IHRyYW5zZmVyIGFyZWEgYWxyZWFkeSBpbiB1c2VcbiIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorCXByaW50ZigiUE1fYWxsb2NSZWFsU2VnOiB0cmFuc2ZlciBhcmVhIGFscmVhZHkgaW4gdXNlXG4iKTsKKwlyZXR1cm4gMDsKKwl9CiAgICAgUE1faW5pdCgpOwogICAgIHJtYnVmX2ludXNlID0gMTsKICAgICAqcl9zZWcgPSBWQklPU19UcmFuc0J1ZlZTZWcoVlJlZ3MpOwpAQCAtNTkwLDkgKzU5MCw5IEBACiB2b2lkIFBNQVBJIFBNX2ZyZWVSZWFsU2VnKHZvaWQgKm1lbSkKIHsKICAgICBpZiAocm1idWZfaW51c2UgPT0gMCkgewotICAgICAgICBwcmludGYoIlBNX2ZyZWVSZWFsU2VnOiBub3RoaW5nIHdhcyBhbGxvY2F0ZWRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwlwcmludGYoIlBNX2ZyZWVSZWFsU2VnOiBub3RoaW5nIHdhcyBhbGxvY2F0ZWRcbiIpOworCXJldHVybjsKKwl9CiAgICAgcm1idWZfaW51c2UgPSAwOwogfQogCkBAIC02MDAsNyArNjAwLDcgQEAKIHsKICAgICBQTV9pbml0KCk7CiAgICAgaWYgKFZSZWdzID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAKICAgICBWUmVncy0+bC5lYXggPSByZWdzLT5lYXg7CiAgICAgVlJlZ3MtPmwuZWJ4ID0gcmVncy0+ZWJ4OwpAQCAtNjI0LDcgKzYyNCw3IEBACiB7CiAgICAgUE1faW5pdCgpOwogICAgIGlmIChWUmVncyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAogICAgIFZSZWdzLT5sLmVheCA9IGluLT5lLmVheDsKICAgICBWUmVncy0+bC5lYnggPSBpbi0+ZS5lYng7CkBAIC02NTEsNDEgKzY1MSw0MSBAQAogewogICAgIFBNX2luaXQoKTsKICAgICBpZiAoVlJlZ3MgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAKICAgICBpZiAoaW50bm8gPT0gMHgyMSkgewotICAgICAgICB0aW1lX3QgdG9kYXkgPSB0aW1lKE5VTEwpOwotICAgICAgICBzdHJ1Y3QgdG0gKnQ7Ci0gICAgICAgIHQgPSBsb2NhbHRpbWUoJnRvZGF5KTsKLSAgICAgICAgb3V0LT54LmN4ID0gdC0+dG1feWVhciArIDE5MDA7Ci0gICAgICAgIG91dC0+aC5kaCA9IHQtPnRtX21vbiArIDE7Ci0gICAgICAgIG91dC0+aC5kbCA9IHQtPnRtX21kYXk7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisJdGltZV90IHRvZGF5ID0gdGltZShOVUxMKTsKKwlzdHJ1Y3QgdG0gKnQ7CisJdCA9IGxvY2FsdGltZSgmdG9kYXkpOworCW91dC0+eC5jeCA9IHQtPnRtX3llYXIgKyAxOTAwOworCW91dC0+aC5kaCA9IHQtPnRtX21vbiArIDE7CisJb3V0LT5oLmRsID0gdC0+dG1fbWRheTsKKwlyZXR1cm4gMDsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIFZSZWdzLT5sLmVheCA9IGluLT5lLmVheDsKLSAgICAgICAgVlJlZ3MtPmwuZWJ4ID0gaW4tPmUuZWJ4OwotICAgICAgICBWUmVncy0+bC5lY3ggPSBpbi0+ZS5lY3g7Ci0gICAgICAgIFZSZWdzLT5sLmVkeCA9IGluLT5lLmVkeDsKLSAgICAgICAgVlJlZ3MtPmwuZXNpID0gaW4tPmUuZXNpOwotICAgICAgICBWUmVncy0+bC5lZGkgPSBpbi0+ZS5lZGk7Ci0gICAgICAgIFZSZWdzLT53LmVzID0gc3JlZ3MtPmVzOwotICAgICAgICBWUmVncy0+dy5kcyA9IHNyZWdzLT5kczsKKwlWUmVncy0+bC5lYXggPSBpbi0+ZS5lYXg7CisJVlJlZ3MtPmwuZWJ4ID0gaW4tPmUuZWJ4OworCVZSZWdzLT5sLmVjeCA9IGluLT5lLmVjeDsKKwlWUmVncy0+bC5lZHggPSBpbi0+ZS5lZHg7CisJVlJlZ3MtPmwuZXNpID0gaW4tPmUuZXNpOworCVZSZWdzLT5sLmVkaSA9IGluLT5lLmVkaTsKKwlWUmVncy0+dy5lcyA9IHNyZWdzLT5lczsKKwlWUmVncy0+dy5kcyA9IHNyZWdzLT5kczsKIAotICAgICAgICBWQklPU2ludChpbnRubywgVlJlZ3MsIDEwMjQpOworCVZCSU9TaW50KGludG5vLCBWUmVncywgMTAyNCk7CiAKLSAgICAgICAgb3V0LT5lLmVheCA9IFZSZWdzLT5sLmVheDsKLSAgICAgICAgb3V0LT5lLmVieCA9IFZSZWdzLT5sLmVieDsKLSAgICAgICAgb3V0LT5lLmVjeCA9IFZSZWdzLT5sLmVjeDsKLSAgICAgICAgb3V0LT5lLmVkeCA9IFZSZWdzLT5sLmVkeDsKLSAgICAgICAgb3V0LT5lLmVzaSA9IFZSZWdzLT5sLmVzaTsKLSAgICAgICAgb3V0LT5lLmVkaSA9IFZSZWdzLT5sLmVkaTsKLSAgICAgICAgb3V0LT54LmNmbGFnID0gVlJlZ3MtPncuZmxhZ3MgJiAweDE7Ci0gICAgICAgIHNyZWdzLT5lcyA9IFZSZWdzLT53LmVzOwotICAgICAgICBzcmVncy0+ZHMgPSBWUmVncy0+dy5kczsKKwlvdXQtPmUuZWF4ID0gVlJlZ3MtPmwuZWF4OworCW91dC0+ZS5lYnggPSBWUmVncy0+bC5lYng7CisJb3V0LT5lLmVjeCA9IFZSZWdzLT5sLmVjeDsKKwlvdXQtPmUuZWR4ID0gVlJlZ3MtPmwuZWR4OworCW91dC0+ZS5lc2kgPSBWUmVncy0+bC5lc2k7CisJb3V0LT5lLmVkaSA9IFZSZWdzLT5sLmVkaTsKKwlvdXQtPnguY2ZsYWcgPSBWUmVncy0+dy5mbGFncyAmIDB4MTsKKwlzcmVncy0+ZXMgPSBWUmVncy0+dy5lczsKKwlzcmVncy0+ZHMgPSBWUmVncy0+dy5kczsKIAotICAgICAgICByZXR1cm4gb3V0LT54LmF4OwotICAgICAgICB9CisJcmV0dXJuIG91dC0+eC5heDsKKwl9CiB9CiAKIHZvaWQgUE1BUEkgUE1fY2FsbFJlYWxNb2RlKHVpbnQgc2VnLHVpbnQgb2ZmLCBSTVJFR1MgKmluLApAQCAtNjkzLDcgKzY5Myw3IEBACiB7CiAgICAgUE1faW5pdCgpOwogICAgIGlmIChWUmVncyA9PSBOVUxMKQotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogCiAgICAgVlJlZ3MtPmwuZWF4ID0gaW4tPmUuZWF4OwogICAgIFZSZWdzLT5sLmVieCA9IGluLT5lLmVieDsKQEAgLTczMCw3ICs3MzAsNyBAQAogICAgIGlib29sIGNvbnRpZ3VvdXMsCiAgICAgaWJvb2wgYmVsb3cxNk0pCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgb24gUU5YCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgb24gUU5YICovCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTczOSwyNyArNzM5LDI3IEBACiAgICAgdWludCBzaXplLAogICAgIGlib29sIGNvbnRpZ3VvdXMpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgb24gUU5YCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgb24gUU5YICovCiB9CiAKIHZvaWQgKiBQTUFQSSBQTV9hbGxvY1BhZ2UoCiAgICAgaWJvb2wgbG9ja2VkKQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIG9uIFFOWAorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzIG9uIFFOWCAqLwogICAgIHJldHVybiBOVUxMOwogfQogCiB2b2lkIFBNQVBJIFBNX2ZyZWVQYWdlKAogICAgIHZvaWQgKnApCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgb24gUU5YCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgb24gUU5YICovCiB9CiAKIHZvaWQgUE1BUEkgUE1fc2V0QmFua0EoaW50IGJhbmspCiB7CiAgICAgUE1faW5pdCgpOwogICAgIGlmIChWUmVncyA9PSBOVUxMKQotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogCiAgICAgVlJlZ3MtPmwuZWF4ID0gMHg0RjA1OwogICAgIFZSZWdzLT5sLmVieCA9IDB4MDAwMDsKQEAgLTc3MSw3ICs3NzEsNyBAQAogewogICAgIFBNX2luaXQoKTsKICAgICBpZiAoVlJlZ3MgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKIAogICAgIFZSZWdzLT5sLmVheCA9IDB4NEYwNTsKICAgICBWUmVncy0+bC5lYnggPSAweDAwMDA7CkBAIC03ODgsNyArNzg4LDcgQEAKIHsKICAgICBQTV9pbml0KCk7CiAgICAgaWYgKFZSZWdzID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAKICAgICBWUmVncy0+bC5lYXggPSAweDRGMDc7CiAgICAgVlJlZ3MtPmwuZWJ4ID0gd2FpdFZSVDsKQEAgLTgzNyw3ICs4MzcsNyBAQAogUE1fTU9EVUxFIFBNQVBJIFBNX2xvYWRMaWJyYXJ5KAogICAgIGNvbnN0IGNoYXIgKnN6RExMTmFtZSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyB0byBsb2FkIHNoYXJlZCBsaWJyYXJpZXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgdG8gbG9hZCBzaGFyZWQgbGlicmFyaWVzISAqLwogICAgICh2b2lkKXN6RExMTmFtZTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTg0Niw3ICs4NDYsNyBAQAogICAgIFBNX01PRFVMRSBoTW9kdWxlLAogICAgIGNvbnN0IGNoYXIgKnN6UHJvY05hbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgKHZvaWQpaE1vZHVsZTsKICAgICAodm9pZClzelByb2NOYW1lOwogICAgIHJldHVybiBOVUxMOwpAQCAtODU1LDE0ICs4NTUsMTQgQEAKIHZvaWQgUE1BUEkgUE1fZnJlZUxpYnJhcnkoCiAgICAgUE1fTU9EVUxFIGhNb2R1bGUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgKHZvaWQpaE1vZHVsZTsKIH0KIAogaW50IFBNQVBJIFBNX3NldElPUEwoCiAgICAgaW50IGxldmVsKQogewotICAgIC8vIFFOWCBoYW5kbGVzIElPUEwgc2VsZWN0aW9uIGF0IHRoZSBwcm9ncmFtIGxpbmsgbGV2ZWwuCisgICAgLyogUU5YIGhhbmRsZXMgSU9QTCBzZWxlY3Rpb24gYXQgdGhlIHByb2dyYW0gbGluayBsZXZlbC4gKi8KICAgICByZXR1cm4gbGV2ZWw7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3J0dGFyZ2V0L2NwdWluZm8uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3J0dGFyZ2V0L2NwdWluZm8uYwppbmRleCAzZDZkZDQ0Li40ZjMyYzNlIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9ydHRhcmdldC9jcHVpbmZvLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vcnR0YXJnZXQvY3B1aW5mby5jCkBAIC00Niw3ICs0Niw3IEBACiAKICAgICBvbGRQcmlvcml0eSA9IEdldFRocmVhZFByaW9yaXR5KGhUaHJlYWQpOwogICAgIGlmIChvbGRQcmlvcml0eSAhPSBUSFJFQURfUFJJT1JJVFlfRVJST1JfUkVUVVJOKQotICAgICAgICBTZXRUaHJlYWRQcmlvcml0eShoVGhyZWFkLCBUSFJFQURfUFJJT1JJVFlfVElNRV9DUklUSUNBTCk7CisJU2V0VGhyZWFkUHJpb3JpdHkoaFRocmVhZCwgVEhSRUFEX1BSSU9SSVRZX1RJTUVfQ1JJVElDQUwpOwogICAgIHJldHVybiBvbGRQcmlvcml0eTsKIH0KIApAQCAtNjAsNyArNjAsNyBAQAogICAgIEhBTkRMRSAgaFRocmVhZCA9IEdldEN1cnJlbnRUaHJlYWQoKTsKIAogICAgIGlmIChvbGRQcmlvcml0eSAhPSBUSFJFQURfUFJJT1JJVFlfRVJST1JfUkVUVVJOKQotICAgICAgICBTZXRUaHJlYWRQcmlvcml0eShoVGhyZWFkLCBvbGRQcmlvcml0eSk7CisJU2V0VGhyZWFkUHJpb3JpdHkoaFRocmVhZCwgb2xkUHJpb3JpdHkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzEsMTIgKzcxLDEyIEBACiAgICAgQ1BVX2xhcmdlSW50ZWdlciAqZnJlcSkKIHsKICAgICBpZiAoIVF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koKExBUkdFX0lOVEVHRVIqKWZyZXEpKSB7Ci0gICAgICAgIGhhdmVQZXJmb3JtYW5jZUNvdW50ZXIgPSBmYWxzZTsKLSAgICAgICAgZnJlcS0+bG93ID0gMTAwMDAwOwotICAgICAgICBmcmVxLT5oaWdoID0gMDsKLSAgICAgICAgfQorCWhhdmVQZXJmb3JtYW5jZUNvdW50ZXIgPSBmYWxzZTsKKwlmcmVxLT5sb3cgPSAxMDAwMDA7CisJZnJlcS0+aGlnaCA9IDA7CisJfQogICAgIGVsc2UKLSAgICAgICAgaGF2ZVBlcmZvcm1hbmNlQ291bnRlciA9IHRydWU7CisJaGF2ZVBlcmZvcm1hbmNlQ291bnRlciA9IHRydWU7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04Niw5ICs4Niw5IEBACiAjZGVmaW5lIEdldENvdW50ZXIodCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKGhhdmVQZXJmb3JtYW5jZUNvdW50ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKChMQVJHRV9JTlRFR0VSKil0KTsgICAgICAgICBcCisJUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoKExBUkdFX0lOVEVHRVIqKXQpOyAgICAgICAgIFwKICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHQpLT5sb3cgPSB0aW1lR2V0VGltZSgpICogMTAwOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHQpLT5oaWdoID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkodCktPmxvdyA9IHRpbWVHZXRUaW1lKCkgKiAxMDA7ICAgICAgICAgICAgICAgICAgICAgXAorCSh0KS0+aGlnaCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3J0dGFyZ2V0L2V2ZW50LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9ydHRhcmdldC9ldmVudC5jCmluZGV4IGU5YWJhMjEuLjk2MmExNGEgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3J0dGFyZ2V0L2V2ZW50LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vcnR0YXJnZXQvZXZlbnQuYwpAQCAtNzEsMTEzICs3MSwxMTMgQEAKICAgICBldmVudF90IGV2dDsKIAogICAgIHdoaWxlIChQZWVrTWVzc2FnZSgmbXNnLE5VTEwsMCwwLFBNX1JFTU9WRSkpIHsKLSAgICAgICAgbWVtc2V0KCZldnQsMCxzaXplb2YoZXZ0KSk7Ci0gICAgICAgIHN3aXRjaCAobXNnLm1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGNhc2UgV01fTU9VU0VNT1ZFOgotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFTU9WRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV01fTEJVVFRPTkRCTENMSzoKLSAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRURPV047Ci0gICAgICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBFVlRfTEVGVEJNQVNLIHwgRVZUX0RCTENMSUNLOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKLSAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRURPV047Ci0gICAgICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBFVlRfTEVGVEJNQVNLOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9MRUZUQk1BU0s7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdNX1JCVVRUT05EQkxDTEs6Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOIHwgRVZUX0RCTENMSUNLOwotICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gRVZUX1JJR0hUQk1BU0s7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFRE9XTjsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9SSUdIVEJNQVNLOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9SSUdIVEJNQVNLOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTV9LRVlET1dOOgotICAgICAgICAgICAgY2FzZSBXTV9TWVNLRVlET1dOOgotICAgICAgICAgICAgICAgIGlmIChISVdPUkQobXNnLmxQYXJhbSkgJiBLRl9SRVBFQVQpIHsKLSAgICAgICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfS0VZUkVQRUFUOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX0tFWURPV047Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV01fS0VZVVA6Ci0gICAgICAgICAgICBjYXNlIFdNX1NZU0tFWVVQOgotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX0tFWVVQOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorCW1lbXNldCgmZXZ0LDAsc2l6ZW9mKGV2dCkpOworCXN3aXRjaCAobXNnLm1lc3NhZ2UpIHsKKwkgICAgY2FzZSBXTV9NT1VTRU1PVkU6CisJCWV2dC53aGF0ID0gRVZUX01PVVNFTU9WRTsKKwkJYnJlYWs7CisJICAgIGNhc2UgV01fTEJVVFRPTkRCTENMSzoKKwkJZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOOworCQlldnQubWVzc2FnZSA9IEVWVF9MRUZUQk1BU0sgfCBFVlRfREJMQ0xJQ0s7CisJCWJyZWFrOworCSAgICBjYXNlIFdNX0xCVVRUT05ET1dOOgorCQlldnQud2hhdCA9IEVWVF9NT1VTRURPV047CisJCWV2dC5tZXNzYWdlID0gRVZUX0xFRlRCTUFTSzsKKwkJYnJlYWs7CisJICAgIGNhc2UgV01fTEJVVFRPTlVQOgorCQlldnQud2hhdCA9IEVWVF9NT1VTRVVQOworCQlldnQubWVzc2FnZSA9IEVWVF9MRUZUQk1BU0s7CisJCWJyZWFrOworCSAgICBjYXNlIFdNX1JCVVRUT05EQkxDTEs6CisJCWV2dC53aGF0ID0gRVZUX01PVVNFRE9XTiB8IEVWVF9EQkxDTElDSzsKKwkJZXZ0Lm1lc3NhZ2UgPSBFVlRfUklHSFRCTUFTSzsKKwkJYnJlYWs7CisJICAgIGNhc2UgV01fUkJVVFRPTkRPV046CisJCWV2dC53aGF0ID0gRVZUX01PVVNFRE9XTjsKKwkJZXZ0Lm1lc3NhZ2UgPSBFVlRfUklHSFRCTUFTSzsKKwkJYnJlYWs7CisJICAgIGNhc2UgV01fUkJVVFRPTlVQOgorCQlldnQud2hhdCA9IEVWVF9NT1VTRVVQOworCQlldnQubWVzc2FnZSA9IEVWVF9SSUdIVEJNQVNLOworCQlicmVhazsKKwkgICAgY2FzZSBXTV9LRVlET1dOOgorCSAgICBjYXNlIFdNX1NZU0tFWURPV046CisJCWlmIChISVdPUkQobXNnLmxQYXJhbSkgJiBLRl9SRVBFQVQpIHsKKwkJICAgIGV2dC53aGF0ID0gRVZUX0tFWVJFUEVBVDsKKwkJICAgIH0KKwkJZWxzZSB7CisJCSAgICBldnQud2hhdCA9IEVWVF9LRVlET1dOOworCQkgICAgfQorCQlicmVhazsKKwkgICAgY2FzZSBXTV9LRVlVUDoKKwkgICAgY2FzZSBXTV9TWVNLRVlVUDoKKwkJZXZ0LndoYXQgPSBFVlRfS0VZVVA7CisJCWJyZWFrOworCSAgICB9CiAKLSAgICAgICAgLyogQ29udmVydCBtb3VzZSBldmVudCBtb2RpZmllciBmbGFncyAqLwotICAgICAgICBpZiAoZXZ0LndoYXQgJiBFVlRfTU9VU0VFVlQpIHsKLSAgICAgICAgICAgIGV2dC53aGVyZV94ID0gbXNnLnB0Lng7Ci0gICAgICAgICAgICBldnQud2hlcmVfeSA9IG1zZy5wdC55OwotICAgICAgICAgICAgaWYgKGV2dC53aGF0ID09IEVWVF9NT1VTRU1PVkUpIHsKLSAgICAgICAgICAgICAgICBpZiAob2xkTW92ZSAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBldnRxW29sZE1vdmVdLndoZXJlX3ggPSBldnQud2hlcmVfeDsvKiBNb2RpZnkgZXhpc3Rpbmcgb25lICAqLwotICAgICAgICAgICAgICAgICAgICBldnRxW29sZE1vdmVdLndoZXJlX3kgPSBldnQud2hlcmVfeTsKLSAgICAgICAgICAgICAgICAgICAgZXZ0LndoYXQgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9sZE1vdmUgPSBmcmVlSGVhZDsgLyogU2F2ZSBpZCBvZiB0aGlzIG1vdmUgZXZlbnQgICAqLwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9sZE1vdmUgPSAtMTsKLSAgICAgICAgICAgIGlmIChtc2cud1BhcmFtICYgTUtfTEJVVFRPTikKLSAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9MRUZUQlVUOwotICAgICAgICAgICAgaWYgKG1zZy53UGFyYW0gJiBNS19SQlVUVE9OKQotICAgICAgICAgICAgICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX1JJR0hUQlVUOwotICAgICAgICAgICAgaWYgKG1zZy53UGFyYW0gJiBNS19TSElGVCkKLSAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9TSElGVEtFWTsKLSAgICAgICAgICAgIGlmIChtc2cud1BhcmFtICYgTUtfQ09OVFJPTCkKLSAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9DVFJMU1RBVEU7Ci0gICAgICAgICAgICB9CisJLyogQ29udmVydCBtb3VzZSBldmVudCBtb2RpZmllciBmbGFncyAqLworCWlmIChldnQud2hhdCAmIEVWVF9NT1VTRUVWVCkgeworCSAgICBldnQud2hlcmVfeCA9IG1zZy5wdC54OworCSAgICBldnQud2hlcmVfeSA9IG1zZy5wdC55OworCSAgICBpZiAoZXZ0LndoYXQgPT0gRVZUX01PVVNFTU9WRSkgeworCQlpZiAob2xkTW92ZSAhPSAtMSkgeworCQkgICAgZXZ0cVtvbGRNb3ZlXS53aGVyZV94ID0gZXZ0LndoZXJlX3g7LyogTW9kaWZ5IGV4aXN0aW5nIG9uZSAgKi8KKwkJICAgIGV2dHFbb2xkTW92ZV0ud2hlcmVfeSA9IGV2dC53aGVyZV95OworCQkgICAgZXZ0LndoYXQgPSAwOworCQkgICAgfQorCQllbHNlIHsKKwkJICAgIG9sZE1vdmUgPSBmcmVlSGVhZDsgLyogU2F2ZSBpZCBvZiB0aGlzIG1vdmUgZXZlbnQgICAqLworCQkgICAgfQorCQl9CisJICAgIGVsc2UKKwkJb2xkTW92ZSA9IC0xOworCSAgICBpZiAobXNnLndQYXJhbSAmIE1LX0xCVVRUT04pCisJCWV2dC5tb2RpZmllcnMgfD0gRVZUX0xFRlRCVVQ7CisJICAgIGlmIChtc2cud1BhcmFtICYgTUtfUkJVVFRPTikKKwkJZXZ0Lm1vZGlmaWVycyB8PSBFVlRfUklHSFRCVVQ7CisJICAgIGlmIChtc2cud1BhcmFtICYgTUtfU0hJRlQpCisJCWV2dC5tb2RpZmllcnMgfD0gRVZUX1NISUZUS0VZOworCSAgICBpZiAobXNnLndQYXJhbSAmIE1LX0NPTlRST0wpCisJCWV2dC5tb2RpZmllcnMgfD0gRVZUX0NUUkxTVEFURTsKKwkgICAgfQogCi0gICAgICAgIC8qIENvbnZlcnQga2V5Ym9hcmQgY29kZXMgKi8KLSAgICAgICAgVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKLSAgICAgICAgaWYgKGV2dC53aGF0ICYgRVZUX0tFWUVWVCkgewotICAgICAgICAgICAgaW50IHNjYW5Db2RlID0gKG1zZy5sUGFyYW0gPj4gMTYpICYgMHhGRjsKLSAgICAgICAgICAgIGlmIChldnQud2hhdCA9PSBFVlRfS0VZVVApIHsKLSAgICAgICAgICAgICAgICAvKiBHZXQgbWVzc2FnZSBmb3Iga2V5dXAgY29kZSBmcm9tIHRhYmxlIG9mIGNhY2hlZCBkb3duIHZhbHVlcyAqLwotICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0ga2V5VXBNc2dbc2NhbkNvZGVdOwotICAgICAgICAgICAgICAgIGtleVVwTXNnW3NjYW5Db2RlXSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKFBlZWtNZXNzYWdlKCZjaGFyTXNnLE5VTEwsV01fQ0hBUixXTV9DSEFSLFBNX1JFTU9WRSkpCi0gICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gY2hhck1zZy53UGFyYW07Ci0gICAgICAgICAgICAgICAgaWYgKFBlZWtNZXNzYWdlKCZjaGFyTXNnLE5VTEwsV01fU1lTQ0hBUixXTV9TWVNDSEFSLFBNX1JFTU9WRSkpCi0gICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gY2hhck1zZy53UGFyYW07Ci0gICAgICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgfD0gKChtc2cubFBhcmFtID4+IDgpICYgMHhGRjAwKTsKLSAgICAgICAgICAgICAgICBrZXlVcE1zZ1tzY2FuQ29kZV0gPSAodXNob3J0KWV2dC5tZXNzYWdlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChldnQud2hhdCA9PSBFVlRfS0VZUkVQRUFUKQotICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlIHw9IChtc2cubFBhcmFtIDw8IDE2KTsKLSAgICAgICAgICAgIGlmIChISVdPUkQobXNnLmxQYXJhbSkgJiBLRl9BTFRET1dOKQotICAgICAgICAgICAgICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX0FMVFNUQVRFOwotICAgICAgICAgICAgaWYgKEdldEtleVN0YXRlKFZLX1NISUZUKSAmIDB4ODAwMFUpCi0gICAgICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfU0hJRlRLRVk7Ci0gICAgICAgICAgICBpZiAoR2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgJiAweDgwMDBVKQotICAgICAgICAgICAgICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX0NUUkxTVEFURTsKLSAgICAgICAgICAgIG9sZE1vdmUgPSAtMTsKLSAgICAgICAgICAgIH0KKwkvKiBDb252ZXJ0IGtleWJvYXJkIGNvZGVzICovCisJVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKwlpZiAoZXZ0LndoYXQgJiBFVlRfS0VZRVZUKSB7CisJICAgIGludCBzY2FuQ29kZSA9IChtc2cubFBhcmFtID4+IDE2KSAmIDB4RkY7CisJICAgIGlmIChldnQud2hhdCA9PSBFVlRfS0VZVVApIHsKKwkJLyogR2V0IG1lc3NhZ2UgZm9yIGtleXVwIGNvZGUgZnJvbSB0YWJsZSBvZiBjYWNoZWQgZG93biB2YWx1ZXMgKi8KKwkJZXZ0Lm1lc3NhZ2UgPSBrZXlVcE1zZ1tzY2FuQ29kZV07CisJCWtleVVwTXNnW3NjYW5Db2RlXSA9IDA7CisJCX0KKwkgICAgZWxzZSB7CisJCWlmIChQZWVrTWVzc2FnZSgmY2hhck1zZyxOVUxMLFdNX0NIQVIsV01fQ0hBUixQTV9SRU1PVkUpKQorCQkgICAgZXZ0Lm1lc3NhZ2UgPSBjaGFyTXNnLndQYXJhbTsKKwkJaWYgKFBlZWtNZXNzYWdlKCZjaGFyTXNnLE5VTEwsV01fU1lTQ0hBUixXTV9TWVNDSEFSLFBNX1JFTU9WRSkpCisJCSAgICBldnQubWVzc2FnZSA9IGNoYXJNc2cud1BhcmFtOworCQlldnQubWVzc2FnZSB8PSAoKG1zZy5sUGFyYW0gPj4gOCkgJiAweEZGMDApOworCQlrZXlVcE1zZ1tzY2FuQ29kZV0gPSAodXNob3J0KWV2dC5tZXNzYWdlOworCQl9CisJICAgIGlmIChldnQud2hhdCA9PSBFVlRfS0VZUkVQRUFUKQorCQlldnQubWVzc2FnZSB8PSAobXNnLmxQYXJhbSA8PCAxNik7CisJICAgIGlmIChISVdPUkQobXNnLmxQYXJhbSkgJiBLRl9BTFRET1dOKQorCQlldnQubW9kaWZpZXJzIHw9IEVWVF9BTFRTVEFURTsKKwkgICAgaWYgKEdldEtleVN0YXRlKFZLX1NISUZUKSAmIDB4ODAwMFUpCisJCWV2dC5tb2RpZmllcnMgfD0gRVZUX1NISUZUS0VZOworCSAgICBpZiAoR2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgJiAweDgwMDBVKQorCQlldnQubW9kaWZpZXJzIHw9IEVWVF9DVFJMU1RBVEU7CisJICAgIG9sZE1vdmUgPSAtMTsKKwkgICAgfQogCi0gICAgICAgIGlmIChldnQud2hhdCAhPSAwKSB7Ci0gICAgICAgICAgICAvKiBBZGQgdGltZSBzdGFtcCBhbmQgYWRkIHRoZSBldmVudCB0byB0aGUgcXVldWUgKi8KLSAgICAgICAgICAgIGV2dC53aGVuID0gbXNnLnRpbWU7Ci0gICAgICAgICAgICBpZiAoY291bnQgPCBFVkVOVFFTSVpFKSB7Ci0gICAgICAgICAgICAgICAgYWRkRXZlbnQoJmV2dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7Ci0gICAgICAgIH0KKwlpZiAoZXZ0LndoYXQgIT0gMCkgeworCSAgICAvKiBBZGQgdGltZSBzdGFtcCBhbmQgYWRkIHRoZSBldmVudCB0byB0aGUgcXVldWUgKi8KKwkgICAgZXZ0LndoZW4gPSBtc2cudGltZTsKKwkgICAgaWYgKGNvdW50IDwgRVZFTlRRU0laRSkgeworCQlhZGRFdmVudCgmZXZ0KTsKKwkJfQorCSAgICB9CisJRGlzcGF0Y2hNZXNzYWdlKCZtc2cpOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI2MSw3ICsyNjEsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgRVZUX3Jlc3VtZSh2b2lkKQogewotICAgIC8vIERvIG5vdGhpbmcgZm9yIFdpbjMyCisgICAgLyogRG8gbm90aGluZyBmb3IgV2luMzIgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI3MSw3ICsyNzEsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgRVZUX3N1c3BlbmQodm9pZCkKIHsKLSAgICAvLyBEbyBub3RoaW5nIGZvciBXaW4zMgorICAgIC8qIERvIG5vdGhpbmcgZm9yIFdpbjMyICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9ydHRhcmdldC9wbS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vcnR0YXJnZXQvcG0uYwppbmRleCBlNmMxZmJkLi40N2Q3ZWQ2IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9ydHRhcmdldC9wbS5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3J0dGFyZ2V0L3BtLmMKQEAgLTU5LDcgKzU5LDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIFBNQVBJIFBNX2luaXQodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBkTyBhbnkgc3BlY2lhbCBpbml0IGNvZGUgaW4gaGVyZS4KKyAgICAvKiBUT0RPOiBkTyBhbnkgc3BlY2lhbCBpbml0IGNvZGUgaW4gaGVyZS4gKi8KICAgICBNVFJSX2luaXQoKTsKIH0KIApAQCAtOTAsOSArOTAsOSBAQAogewogICAgIHVpbnQgcG9zID0gc3RybGVuKHMpOwogICAgIGlmIChzW3Bvcy0xXSAhPSAnXFwnKSB7Ci0gICAgICAgIHNbcG9zXSA9ICdcXCc7Ci0gICAgICAgIHNbcG9zKzFdID0gJ1wwJzsKLSAgICAgICAgfQorCXNbcG9zXSA9ICdcXCc7CisJc1twb3MrMV0gPSAnXDAnOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTExMyw5ICsxMTMsOSBAQAogICAgIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBpZiAoZmF0YWxFcnJvckNsZWFudXApCi0gICAgICAgIGZhdGFsRXJyb3JDbGVhbnVwKCk7Ci0gICAgLy8gVE9ETzogRGlzcGxheSBhIGZhdGFsIGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQhCi0vLyAgTWVzc2FnZUJveChOVUxMLG1zZywiRmF0YWwgRXJyb3IhIiwgTUJfSUNPTkVYQ0xBTUFUSU9OKTsKKwlmYXRhbEVycm9yQ2xlYW51cCgpOworICAgIC8qIFRPRE86IERpc3BsYXkgYSBmYXRhbCBlcnJvciBtZXNzYWdlIGFuZCBleGl0ISAqLworLyogIE1lc3NhZ2VCb3goTlVMTCxtc2csIkZhdGFsIEVycm9yISIsIE1CX0lDT05FWENMQU1BVElPTik7ICovCiAgICAgZXhpdCgxKTsKIH0KIApAQCAtMTM4LDcgKzEzOCw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IFBNQVBJIFBNX2tiaGl0KHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogTmVlZCB0byBjaGVjayBpZiBhIGtleSBpcyB3YWl0aW5nIG9uIHRoZSBrZXlib2FyZCBxdWV1ZQorICAgIC8qIFRPRE86IE5lZWQgdG8gY2hlY2sgaWYgYSBrZXkgaXMgd2FpdGluZyBvbiB0aGUga2V5Ym9hcmQgcXVldWUgKi8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTQ4LDcgKzE0OCw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IFBNQVBJIFBNX2dldGNoKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogTmVlZCB0byBvYnRhaW4gdGhlIG5leHQga2V5cHJlc3MsIGFuZCBibG9jayB1bnRpbCBvbmUgaXMgaGl0CisgICAgLyogVE9ETzogTmVlZCB0byBvYnRhaW4gdGhlIG5leHQga2V5cHJlc3MsIGFuZCBibG9jayB1bnRpbCBvbmUgaXMgaGl0ICovCiAgICAgcmV0dXJuIDB4RDsKIH0KIApAQCAtMjQwLDcgKzI0MCw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogY29uc3QgY2hhciAqIFBNQVBJIFBNX2dldE51Y2xldXNQYXRoKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogUG9pbnQgdGhpcyBhdCB0aGUgcGF0aCB3aGVuIHRoZSBOdWNsZXVzIGRyaXZlcnMgd2lsbCBiZSBmb3VuZAorICAgIC8qIFRPRE86IFBvaW50IHRoaXMgYXQgdGhlIHBhdGggd2hlbiB0aGUgTnVjbGV1cyBkcml2ZXJzIHdpbGwgYmUgZm91bmQgKi8KICAgICByZXR1cm4gImM6XFxudWNsZXVzIjsKIH0KIApAQCAtMjk0LDcgKzI5NCw3IEBACiB7CiAgICAgc3RhdGljIHZvaWQgKmJhbmtQdHI7CiAgICAgaWYgKCFiYW5rUHRyKQotICAgICAgICBiYW5rUHRyID0gUE1fbWFwUGh5c2ljYWxBZGRyKDB4QTAwMDAsMHhGRkZGLHRydWUpOworCWJhbmtQdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMHhBMDAwMCwweEZGRkYsdHJ1ZSk7CiAgICAgcmV0dXJuIGJhbmtQdHI7CiB9CiAKQEAgLTMwNyw3ICszMDcsNyBAQAogICAgIHVsb25nIGxpbWl0LAogICAgIGlib29sIGlzQ2FjaGVkKQogewotICAgIC8vIFRPRE86IE1hcCBhIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzIHRvIGEgbGluZWFyIGFkZHJlc3MKKyAgICAvKiBUT0RPOiBNYXAgYSBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcyB0byBhIGxpbmVhciBhZGRyZXNzICovCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTMxOSwxMyArMzE5LDEzIEBACiAgICAgdm9pZCAqcHRyLAogICAgIHVsb25nIGxpbWl0KQogewotICAgIC8vIFRPRE86IEZyZWUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZworICAgIC8qIFRPRE86IEZyZWUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZyAqLwogfQogCiB1bG9uZyBQTUFQSSBQTV9nZXRQaHlzaWNhbEFkZHIodm9pZCAqcCkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmaW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGEgbGluZWFyCi0gICAgLy8gICAgICAgYWRkcmVzcy4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmaW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGEgbGluZWFyICovCisgICAgLyogICAgICAgYWRkcmVzcy4gKi8KICAgICByZXR1cm4gMHhGRkZGRkZGRlVMOwogfQogCkBAIC0zMzYsMjQgKzMzNiwyNCBAQAogCiBpbnQgUE1BUEkgUE1fZ2V0Q09NUG9ydChpbnQgcG9ydCkKIHsKLSAgICAvLyBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5Ci0gICAgLy8gICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLgorICAgIC8qIFRPRE86IFJlLWNvZGUgdGhpcyB0byBkZXRlcm1pbmUgcmVhbCB2YWx1ZXMgdXNpbmcgdGhlIFBsdWcgYW5kIFBsYXkgKi8KKyAgICAvKiAgICAgICBtYW5hZ2VyIGZvciB0aGUgT1MuICovCiAgICAgc3dpdGNoIChwb3J0KSB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuIDB4M0Y4OwotICAgICAgICBjYXNlIDE6IHJldHVybiAweDJGODsKLSAgICAgICAgfQorCWNhc2UgMDogcmV0dXJuIDB4M0Y4OworCWNhc2UgMTogcmV0dXJuIDB4MkY4OworCX0KICAgICByZXR1cm4gMDsKIH0KIAogaW50IFBNQVBJIFBNX2dldExQVFBvcnQoaW50IHBvcnQpCiB7Ci0gICAgLy8gVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheQotICAgIC8vICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4KKyAgICAvKiBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5ICovCisgICAgLyogICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLiAqLwogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNCQzsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgzNzg7Ci0gICAgICAgIGNhc2UgMjogcmV0dXJuIDB4Mjc4OwotICAgICAgICB9CisJY2FzZSAwOiByZXR1cm4gMHgzQkM7CisJY2FzZSAxOiByZXR1cm4gMHgzNzg7CisJY2FzZSAyOiByZXR1cm4gMHgyNzg7CisJfQogICAgIHJldHVybiAwOwogfQogCkBAIC00ODQsOCArNDg0LDggQEAKICAgICB1bG9uZyAqcGh5c2ljYWwsCiAgICAgdWxvbmcgKnRvdGFsKQogewotICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgaG93IHRvIGRldGVybWluZSB0aGUgYXZhaWxhYmxlIG1lbW9yeS4gTm90IGVudGlyZWx5Ci0gICAgLy8gICAgICAgY3JpdGljYWwgc28gcmV0dXJuaW5nIDAgaXMgT0suCisgICAgLyogVE9ETzogRmlndXJlIG91dCBob3cgdG8gZGV0ZXJtaW5lIHRoZSBhdmFpbGFibGUgbWVtb3J5LiBOb3QgZW50aXJlbHkgKi8KKyAgICAvKiAgICAgICBjcml0aWNhbCBzbyByZXR1cm5pbmcgMCBpcyBPSy4gKi8KICAgICAqcGh5c2ljYWwgPSAqdG90YWwgPSAwOwogfQogCkBAIC00OTksNyArNDk5LDcgQEAKICAgICBpYm9vbCBjb250aWd1b3VzLAogICAgIGlib29sIGJlbG93MTZNKQogewotICAgIC8vIFRPRE86IEFsbG9jYXRlIGEgYmxvY2sgb2YgbG9ja2VkLCBwaHN5aWNhbGx5IGNvbnRpZ291cyBtZW1vcnkgZm9yIERNQQorICAgIC8qIFRPRE86IEFsbG9jYXRlIGEgYmxvY2sgb2YgbG9ja2VkLCBwaHN5aWNhbGx5IGNvbnRpZ291cyBtZW1vcnkgZm9yIERNQSAqLwogICAgIHJldHVybiAwOwogfQogCkBAIC01MTAsMTAgKzUxMCwxMCBAQAogdm9pZCBQTUFQSSBQTV9mcmVlTG9ja2VkTWVtKAogICAgIHZvaWQgKnAsCiAgICAgdWludCBzaXplLAotICAgIAorCiAgICAgaWJvb2wgY29udGlndW91cykKIHsKLSAgICAvLyBUT0RPOiBGcmVlIGEgbG9ja2VkIG1lbW9yeSBidWZmZXIKKyAgICAvKiBUT0RPOiBGcmVlIGEgbG9ja2VkIG1lbW9yeSBidWZmZXIgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU2NCw3ICs1NjQsNyBAQAogUE1fTU9EVUxFIFBNQVBJIFBNX2xvYWRMaWJyYXJ5KAogICAgIGNvbnN0IGNoYXIgKnN6RExMTmFtZSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyB0byBsb2FkIHNoYXJlZCBsaWJyYXJpZXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgdG8gbG9hZCBzaGFyZWQgbGlicmFyaWVzISAqLwogICAgICh2b2lkKXN6RExMTmFtZTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTU3Myw3ICs1NzMsNyBAQAogICAgIFBNX01PRFVMRSBoTW9kdWxlLAogICAgIGNvbnN0IGNoYXIgKnN6UHJvY05hbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgKHZvaWQpaE1vZHVsZTsKICAgICAodm9pZClzelByb2NOYW1lOwogICAgIHJldHVybiBOVUxMOwpAQCAtNTgyLDcgKzU4Miw3IEBACiB2b2lkIFBNQVBJIFBNX2ZyZWVMaWJyYXJ5KAogICAgIFBNX01PRFVMRSBoTW9kdWxlKQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIQorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzISAqLwogICAgICh2b2lkKWhNb2R1bGU7CiB9CiAKQEAgLTU5NCw5ICs1OTQsOSBAQAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogICAgIFBNX2ZpbmREYXRhICpmaW5kRGF0YSkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBzdGFydCBhIGRpcmVjdG9yeSBlbnVtZXJhdGlvbiBzZWFyY2gKLSAgICAvLyAgICAgICBnaXZlbiB0aGUgZmlsZW5hbWUgKHdpdGggd2lsZGNhcmRzKS4gVGhlIGRhdGEgc2hvdWxkIGJlCi0gICAgLy8gICAgICAgY29udmVydGVkIGFuZCByZXR1cm5lZCBpbiB0aGUgZmluZERhdGEgc3RhbmRhcmQgZm9ybS4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBzdGFydCBhIGRpcmVjdG9yeSBlbnVtZXJhdGlvbiBzZWFyY2ggKi8KKyAgICAvKiAgICAgICBnaXZlbiB0aGUgZmlsZW5hbWUgKHdpdGggd2lsZGNhcmRzKS4gVGhlIGRhdGEgc2hvdWxkIGJlICovCisgICAgLyogICAgICAgY29udmVydGVkIGFuZCByZXR1cm5lZCBpbiB0aGUgZmluZERhdGEgc3RhbmRhcmQgZm9ybS4gKi8KICAgICAodm9pZClmaWxlbmFtZTsKICAgICAodm9pZClmaW5kRGF0YTsKICAgICByZXR1cm4gUE1fRklMRV9JTlZBTElEOwpAQCAtNjEwLDEwICs2MTAsMTAgQEAKICAgICB1bG9uZyBoYW5kbGUsCiAgICAgUE1fZmluZERhdGEgKmZpbmREYXRhKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpbmQgdGhlIG5leHQgZmlsZSBpbiBkaXJlY3RvcnkgZW51bWVyYXRpb24KLSAgICAvLyAgICAgICBzZWFyY2ggZ2l2ZW4gdGhlIHNlYXJjaCBjcml0ZXJpYSBkZWZpbmVkIGluIHRoZSBjYWxsIHRvCi0gICAgLy8gICAgICAgUE1fZmluZEZpcnN0RmlsZS4gVGhlIGRhdGEgc2hvdWxkIGJlIGNvbnZlcnRlZCBhbmQgcmV0dXJuZWQKLSAgICAvLyAgICAgICBpbiB0aGUgZmluZERhdGEgc3RhbmRhcmQgZm9ybS4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmaW5kIHRoZSBuZXh0IGZpbGUgaW4gZGlyZWN0b3J5IGVudW1lcmF0aW9uICovCisgICAgLyogICAgICAgc2VhcmNoIGdpdmVuIHRoZSBzZWFyY2ggY3JpdGVyaWEgZGVmaW5lZCBpbiB0aGUgY2FsbCB0byAqLworICAgIC8qICAgICAgIFBNX2ZpbmRGaXJzdEZpbGUuIFRoZSBkYXRhIHNob3VsZCBiZSBjb252ZXJ0ZWQgYW5kIHJldHVybmVkICovCisgICAgLyogICAgICAgaW4gdGhlIGZpbmREYXRhIHN0YW5kYXJkIGZvcm0uICovCiAgICAgKHZvaWQpaGFuZGxlOwogICAgICh2b2lkKWZpbmREYXRhOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTYyNiw4ICs2MjYsOCBAQAogdm9pZCBQTUFQSSBQTV9maW5kQ2xvc2UoCiAgICAgdWxvbmcgaGFuZGxlKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNsb3NlIHRoZSBmaW5kIHByb2Nlc3MuIFRoaXMgbWF5IGRvCi0gICAgLy8gICAgICAgbm90aGluZyBmb3Igc29tZSBPUydlcy4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjbG9zZSB0aGUgZmluZCBwcm9jZXNzLiBUaGlzIG1heSBkbyAqLworICAgIC8qICAgICAgIG5vdGhpbmcgZm9yIHNvbWUgT1MnZXMuICovCiAgICAgKHZvaWQpaGFuZGxlOwogfQogCkBAIC02NDgsNyArNjQ4LDcgQEAKICAgICBjaGFyIGRyaXZlKQogewogICAgIGlmIChkcml2ZSA9PSAzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTY3NSw3ICs2NzUsNyBAQAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogICAgIHVpbnQgYXR0cmliKQogewotICAgIC8vIFRPRE86IFNldCB0aGUgZmlsZSBhdHRyaWJ1dGVzIGZvciBhIGZpbGUKKyAgICAvKiBUT0RPOiBTZXQgdGhlIGZpbGUgYXR0cmlidXRlcyBmb3IgYSBmaWxlICovCiAgICAgKHZvaWQpZmlsZW5hbWU7CiAgICAgKHZvaWQpYXR0cmliOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vcnR0YXJnZXQvenRpbWVyLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9ydHRhcmdldC96dGltZXIuYwppbmRleCA1MjQ3MmMzLi44MGMxODRkIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9ydHRhcmdldC96dGltZXIuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9ydHRhcmdldC96dGltZXIuYwpAQCAtNTcsOSArNTcsOSBAQAogICAgIExaVGltZXJPYmplY3QgKnRtKQogewogICAgIGlmIChoYXZlUGVyZm9ybWFuY2VDb3VudGVyKQotICAgICAgICBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigoTEFSR0VfSU5URUdFUiopJnRtLT5zdGFydCk7CisJUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoKExBUkdFX0lOVEVHRVIqKSZ0bS0+c3RhcnQpOwogICAgIGVsc2UKLSAgICAgICAgdG0tPnN0YXJ0LmxvdyA9IHRpbWVHZXRUaW1lKCk7CisJdG0tPnN0YXJ0LmxvdyA9IHRpbWVHZXRUaW1lKCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03MiwxNCArNzIsMTQgQEAKICAgICBDUFVfbGFyZ2VJbnRlZ2VyICAgIHRtTGFwLHRtQ291bnQ7CiAKICAgICBpZiAoaGF2ZVBlcmZvcm1hbmNlQ291bnRlcikgewotICAgICAgICBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigoTEFSR0VfSU5URUdFUiopJnRtTGFwKTsKLSAgICAgICAgX0NQVV9kaWZmVGltZTY0KCZ0bS0+c3RhcnQsJnRtTGFwLCZ0bUNvdW50KTsKLSAgICAgICAgcmV0dXJuIF9DUFVfY2FsY01pY3JvU2VjKCZ0bUNvdW50LGNvdW50RnJlcS5sb3cpOwotICAgICAgICB9CisJUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoKExBUkdFX0lOVEVHRVIqKSZ0bUxhcCk7CisJX0NQVV9kaWZmVGltZTY0KCZ0bS0+c3RhcnQsJnRtTGFwLCZ0bUNvdW50KTsKKwlyZXR1cm4gX0NQVV9jYWxjTWljcm9TZWMoJnRtQ291bnQsY291bnRGcmVxLmxvdyk7CisJfQogICAgIGVsc2UgewotICAgICAgICB0bUxhcC5sb3cgPSB0aW1lR2V0VGltZSgpOwotICAgICAgICByZXR1cm4gKHRtTGFwLmxvdyAtIHRtLT5zdGFydC5sb3cpICogMTAwMEw7Ci0gICAgICAgIH0KKwl0bUxhcC5sb3cgPSB0aW1lR2V0VGltZSgpOworCXJldHVybiAodG1MYXAubG93IC0gdG0tPnN0YXJ0LmxvdykgKiAxMDAwTDsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC05MCw5ICs5MCw5IEBACiAgICAgTFpUaW1lck9iamVjdCAqdG0pCiB7CiAgICAgaWYgKGhhdmVQZXJmb3JtYW5jZUNvdW50ZXIpCi0gICAgICAgIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKChMQVJHRV9JTlRFR0VSKikmdG0tPmVuZCk7CisJUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoKExBUkdFX0lOVEVHRVIqKSZ0bS0+ZW5kKTsKICAgICBlbHNlCi0gICAgICAgIHRtLT5lbmQubG93ID0gdGltZUdldFRpbWUoKTsKKwl0bS0+ZW5kLmxvdyA9IHRpbWVHZXRUaW1lKCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDUsMTEgKzEwNSwxMSBAQAogICAgIENQVV9sYXJnZUludGVnZXIgICAgdG1Db3VudDsKIAogICAgIGlmIChoYXZlUGVyZm9ybWFuY2VDb3VudGVyKSB7Ci0gICAgICAgIF9DUFVfZGlmZlRpbWU2NCgmdG0tPnN0YXJ0LCZ0bS0+ZW5kLCZ0bUNvdW50KTsKLSAgICAgICAgcmV0dXJuIF9DUFVfY2FsY01pY3JvU2VjKCZ0bUNvdW50LGNvdW50RnJlcS5sb3cpOwotICAgICAgICB9CisJX0NQVV9kaWZmVGltZTY0KCZ0bS0+c3RhcnQsJnRtLT5lbmQsJnRtQ291bnQpOworCXJldHVybiBfQ1BVX2NhbGNNaWNyb1NlYygmdG1Db3VudCxjb3VudEZyZXEubG93KTsKKwl9CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gKHRtLT5lbmQubG93IC0gdG0tPnN0YXJ0LmxvdykgKiAxMDAwTDsKKwlyZXR1cm4gKHRtLT5lbmQubG93IC0gdG0tPnN0YXJ0LmxvdykgKiAxMDAwTDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3NteC9ldmVudC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc214L2V2ZW50LmMKaW5kZXggZmMxM2JiYi4uNTMzYzI2MSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc214L2V2ZW50LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc214L2V2ZW50LmMKQEAgLTk4LDggKzk4LDggQEAKIHRoZSBtb3VzZSBpbnRlcnJ1cHQgc3Vicm91dGluZSwgc28gaXQgbXVzdCBiZSBlZmZpY2llbnQuCiAKIE5PVEU6ICAgSW50ZXJydXB0cyBNVVNUIGJlIE9GRiB3aGlsZSB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGVuc3VyZSB3ZSBoYXZlCi0gICAgICAgIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gb3VyIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBmb3IKLSAgICAgICAgaW50ZXJydXB0IGRyaXZlbiBzeXN0ZW1zIChsaWtlIHVuZGVyIERPUykuCisJbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2VzcyB0byBvdXIgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvcgorCWludGVycnVwdCBkcml2ZW4gc3lzdGVtcyAobGlrZSB1bmRlciBET1MpLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGFkZE1vdXNlRXZlbnQoCiAgICAgdWludCB3aGF0LApAQCAtMTEzLDE4ICsxMTMsMTggQEAKICAgICBldmVudF90IGV2dDsKIAogICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKSB7Ci0gICAgICAgIC8qIFNhdmUgaW5mb3JtYXRpb24gaW4gZXZlbnQgcmVjb3JkLiAqLwotICAgICAgICBldnQud2hlbiA9IF9FVlRfZ2V0VGlja3MoKTsKLSAgICAgICAgZXZ0LndoYXQgPSB3aGF0OwotICAgICAgICBldnQubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgICAgIGV2dC5tb2RpZmllcnMgPSBidXRfc3RhdDsKLSAgICAgICAgZXZ0LndoZXJlX3ggPSB4OyAgICAgICAgICAgICAgICAvKiBTYXZlIG1vdXNlIGV2ZW50IHBvc2l0aW9uICAgICovCi0gICAgICAgIGV2dC53aGVyZV95ID0geTsKLSAgICAgICAgZXZ0LnJlbGF0aXZlX3ggPSBtaWNrZXlYOwotICAgICAgICBldnQucmVsYXRpdmVfeSA9IG1pY2tleVk7Ci0gICAgICAgIGV2dC5tb2RpZmllcnMgfD0gRVZULmtleU1vZGlmaWVyczsKLSAgICAgICAgYWRkRXZlbnQoJmV2dCk7ICAgICAgICAgICAgICAgICAvKiBBZGQgdG8gdGFpbCBvZiBldmVudCBxdWV1ZSAgICovCi0gICAgICAgIH0KKwkvKiBTYXZlIGluZm9ybWF0aW9uIGluIGV2ZW50IHJlY29yZC4gKi8KKwlldnQud2hlbiA9IF9FVlRfZ2V0VGlja3MoKTsKKwlldnQud2hhdCA9IHdoYXQ7CisJZXZ0Lm1lc3NhZ2UgPSBtZXNzYWdlOworCWV2dC5tb2RpZmllcnMgPSBidXRfc3RhdDsKKwlldnQud2hlcmVfeCA9IHg7ICAgICAgICAgICAgICAgIC8qIFNhdmUgbW91c2UgZXZlbnQgcG9zaXRpb24gICAgKi8KKwlldnQud2hlcmVfeSA9IHk7CisJZXZ0LnJlbGF0aXZlX3ggPSBtaWNrZXlYOworCWV2dC5yZWxhdGl2ZV95ID0gbWlja2V5WTsKKwlldnQubW9kaWZpZXJzIHw9IEVWVC5rZXlNb2RpZmllcnM7CisJYWRkRXZlbnQoJmV2dCk7ICAgICAgICAgICAgICAgICAvKiBBZGQgdG8gdGFpbCBvZiBldmVudCBxdWV1ZSAgICovCisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTQwLDggKzE0MCw4IEBACiB0byB0aGUgZXZlbnQgcXVldWUuCiAKIE5vdGU6IEludGVycnVwdHMgYXJlIE9OIHdoZW4gdGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgbW91c2UgZHJpdmVyIGNvZGUuCi0vL0FNOiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGhhcyBub3QgYWN0dWFsbHkgYmVlbiBwb3J0ZWQgZnJvbSBET1MgeWV0IGFuZCBzaG91bGQgbm90Ci0vL0FNOiBiZSBpbnN0YWxsZWQgdW50aWwgaXQgaXMuCisvKkFNOiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGhhcyBub3QgYWN0dWFsbHkgYmVlbiBwb3J0ZWQgZnJvbSBET1MgeWV0IGFuZCBzaG91bGQgbm90ICovCisvKkFNOiBiZSBpbnN0YWxsZWQgdW50aWwgaXQgaXMuICovCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgRVZUQVBJIG1vdXNlSVNSKAogICAgIHVpbnQgbWFzaywKQEAgLTE1NSwzOSArMTU1LDM5IEBACiAgICAgdWludCAgICBwczsKIAogICAgIGlmIChtYXNrICYgMSkgewotICAgICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IG1vdXNlIGNvb3JkaW5hdGVzICovCi0gICAgICAgIEVWVC5teCA9IHg7IEVWVC5teSA9IHk7CisJLyogU2F2ZSB0aGUgY3VycmVudCBtb3VzZSBjb29yZGluYXRlcyAqLworCUVWVC5teCA9IHg7IEVWVC5teSA9IHk7CiAKLSAgICAgICAgLyogSWYgdGhlIGxhc3QgZXZlbnQgd2FzIGEgbW92ZW1lbnQgZXZlbnQsIHRoZW4gbW9kaWZ5IHRoZSBsYXN0Ci0gICAgICAgICAqIGV2ZW50IHJhdGhlciB0aGFuIHBvc3QgYSBuZXcgb25lLCBzbyB0aGF0IHRoZSBxdWV1ZSB3aWxsIG5vdAotICAgICAgICAgKiBiZWNvbWUgc2F0dXJhdGVkLiBCZWZvcmUgd2UgbW9kaWZ5IHRoZSBkYXRhIHN0cnVjdHVyZXMsIHdlCi0gICAgICAgICAqIE1VU1QgZW5zdXJlIHRoYXQgaW50ZXJydXB0cyBhcmUgb2ZmLgotICAgICAgICAgKi8KLSAgICAgICAgcHMgPSBfRVZUX2Rpc2FibGVJbnQoKTsKLSAgICAgICAgaWYgKEVWVC5vbGRNb3ZlICE9IC0xKSB7Ci0gICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeCA9IHg7ICAgICAgICAgIC8qIE1vZGlmeSBleGlzdGluZyBvbmUgICovCi0gICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeSA9IHk7Ci0gICAgICAgICAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ucmVsYXRpdmVfeCArPSBtaWNrZXlYOwotICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLnJlbGF0aXZlX3kgKz0gbWlja2V5WTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBFVlQub2xkTW92ZSA9IEVWVC5mcmVlSGVhZDsgICAgICAgICAvKiBTYXZlIGlkIG9mIHRoaXMgbW92ZSBldmVudCAgICovCi0gICAgICAgICAgICBhZGRNb3VzZUV2ZW50KEVWVF9NT1VTRU1PVkUsMCx4LHksbWlja2V5WCxtaWNrZXlZLGJ1dHN0YXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgX0VWVF9yZXN0b3JlSW50KHBzKTsKLSAgICAgICAgfQorCS8qIElmIHRoZSBsYXN0IGV2ZW50IHdhcyBhIG1vdmVtZW50IGV2ZW50LCB0aGVuIG1vZGlmeSB0aGUgbGFzdAorCSAqIGV2ZW50IHJhdGhlciB0aGFuIHBvc3QgYSBuZXcgb25lLCBzbyB0aGF0IHRoZSBxdWV1ZSB3aWxsIG5vdAorCSAqIGJlY29tZSBzYXR1cmF0ZWQuIEJlZm9yZSB3ZSBtb2RpZnkgdGhlIGRhdGEgc3RydWN0dXJlcywgd2UKKwkgKiBNVVNUIGVuc3VyZSB0aGF0IGludGVycnVwdHMgYXJlIG9mZi4KKwkgKi8KKwlwcyA9IF9FVlRfZGlzYWJsZUludCgpOworCWlmIChFVlQub2xkTW92ZSAhPSAtMSkgeworCSAgICBFVlQuZXZ0cVtFVlQub2xkTW92ZV0ud2hlcmVfeCA9IHg7ICAgICAgICAgIC8qIE1vZGlmeSBleGlzdGluZyBvbmUgICovCisJICAgIEVWVC5ldnRxW0VWVC5vbGRNb3ZlXS53aGVyZV95ID0geTsKKwkgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLnJlbGF0aXZlX3ggKz0gbWlja2V5WDsKKwkgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLnJlbGF0aXZlX3kgKz0gbWlja2V5WTsKKwkgICAgfQorCWVsc2UgeworCSAgICBFVlQub2xkTW92ZSA9IEVWVC5mcmVlSGVhZDsgICAgICAgICAvKiBTYXZlIGlkIG9mIHRoaXMgbW92ZSBldmVudCAgICovCisJICAgIGFkZE1vdXNlRXZlbnQoRVZUX01PVVNFTU9WRSwwLHgseSxtaWNrZXlYLG1pY2tleVksYnV0c3RhdGUpOworCSAgICB9CisJX0VWVF9yZXN0b3JlSW50KHBzKTsKKwl9CiAgICAgaWYgKG1hc2sgJiAweDJBKSB7Ci0gICAgICAgIHBzID0gX0VWVF9kaXNhYmxlSW50KCk7Ci0gICAgICAgIGFkZE1vdXNlRXZlbnQoRVZUX01PVVNFRE9XTixtYXNrID4+IDEseCx5LDAsMCxidXRzdGF0ZSk7Ci0gICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7Ci0gICAgICAgIF9FVlRfcmVzdG9yZUludChwcyk7Ci0gICAgICAgIH0KKwlwcyA9IF9FVlRfZGlzYWJsZUludCgpOworCWFkZE1vdXNlRXZlbnQoRVZUX01PVVNFRE9XTixtYXNrID4+IDEseCx5LDAsMCxidXRzdGF0ZSk7CisJRVZULm9sZE1vdmUgPSAtMTsKKwlfRVZUX3Jlc3RvcmVJbnQocHMpOworCX0KICAgICBpZiAobWFzayAmIDB4NTQpIHsKLSAgICAgICAgcHMgPSBfRVZUX2Rpc2FibGVJbnQoKTsKLSAgICAgICAgYWRkTW91c2VFdmVudChFVlRfTU9VU0VVUCxtYXNrID4+IDIseCx5LDAsMCxidXRzdGF0ZSk7Ci0gICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7Ci0gICAgICAgIF9FVlRfcmVzdG9yZUludChwcyk7Ci0gICAgICAgIH0KKwlwcyA9IF9FVlRfZGlzYWJsZUludCgpOworCWFkZE1vdXNlRXZlbnQoRVZUX01PVVNFVVAsbWFzayA+PiAyLHgseSwwLDAsYnV0c3RhdGUpOworCUVWVC5vbGRNb3ZlID0gLTE7CisJX0VWVF9yZXN0b3JlSW50KHBzKTsKKwl9CiAgICAgRVZULm9sZEtleSA9IC0xOwogfQogCkBAIC0xOTYsNyArMTk2LDcgQEAKIEtleWJvYXJkIGludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9uLgogCiBOT1RFOiAgIEludGVycnVwdHMgYXJlIE9GRiB3aGVuIHRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIGtleWJvYXJkIElTUiwKLSAgICAgICAgYW5kIHdlIGxlYXZlIHRoZW0gT0ZGIHRoZSBlbnRpcmUgdGltZS4gVGhpcyBoYXMgYmVlbiBtb2RpZmllZCB0byB3b3JrCisJYW5kIHdlIGxlYXZlIHRoZW0gT0ZGIHRoZSBlbnRpcmUgdGltZS4gVGhpcyBoYXMgYmVlbiBtb2RpZmllZCB0byB3b3JrCiAgICAgICBpbiBjb25qdW5jdGlvbiB3aXRoIHNteCBrZXlib2FyZCBoYW5kbGVyLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIEVWVEFQSSBrZXlib2FyZElTUih2b2lkKQpAQCAtMjUyLDUxICsyNTIsNTEgQEAKICAgICBQTV9sb2NrSGFuZGxlICAgbGg7CiAKICAgICBpZiAoX0VWVF91c2VFdmVudHMpIHsKLSAgICAgICAgLyogSW5pdGlhbGlzZSB0aGUgZXZlbnQgcXVldWUgYW5kIGVuYWJsZSBvdXIgaW50ZXJydXB0IGhhbmRsZXJzICovCi0gICAgICAgIGluaXRFdmVudFF1ZXVlKCk7Ci0gICAgICAgIFBNX3NldEtleUhhbmRsZXIoa2V5Ym9hcmRJU1IpOwotICAgICAgICBpZiAoKGhhdmVNb3VzZSA9IGRldGVjdE1vdXNlKCkpICE9IDApCi0gICAgICAgICAgICBQTV9zZXRNb3VzZUhhbmRsZXIoMHhGRkZGLG1vdXNlSVNSKTsKKwkvKiBJbml0aWFsaXNlIHRoZSBldmVudCBxdWV1ZSBhbmQgZW5hYmxlIG91ciBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8KKwlpbml0RXZlbnRRdWV1ZSgpOworCVBNX3NldEtleUhhbmRsZXIoa2V5Ym9hcmRJU1IpOworCWlmICgoaGF2ZU1vdXNlID0gZGV0ZWN0TW91c2UoKSkgIT0gMCkKKwkgICAgUE1fc2V0TW91c2VIYW5kbGVyKDB4RkZGRixtb3VzZUlTUik7CiAKLSAgICAgICAgLyogUmVhZCB0aGUga2V5Ym9hcmQgbW9kaWZpZXIgZmxhZ3MgZnJvbSB0aGUgQklPUyB0byBnZXQgdGhlCi0gICAgICAgICAqIGNvcnJlY3QgaW5pdGlhbGlzYXRpb24gc3RhdGUuIFRoZSBvbmx5IHN0YXRlIHdlIGNhcmUgYWJvdXQgaXMKLSAgICAgICAgICogdGhlIGNvcnJlY3QgdG9nZ2xlIHN0YXRlIGZsYWdzIHN1Y2ggYXMgU0NST0xMTE9DSywgTlVNTE9DSyBhbmQKLSAgICAgICAgICogQ0FQU0xPQ0suCi0gICAgICAgICAqLwotICAgICAgICBFVlQua2V5TW9kaWZpZXJzID0gMDsKLSAgICAgICAgbW9kcyA9IFBNX2dldEJ5dGUoX0VWVF9iaW9zUHRyKzB4MTcpOwotICAgICAgICBpZiAobW9kcyAmIDB4MTApCi0gICAgICAgICAgICBFVlQua2V5TW9kaWZpZXJzIHw9IEVWVF9TQ1JPTExMT0NLOwotICAgICAgICBpZiAobW9kcyAmIDB4MjApCi0gICAgICAgICAgICBFVlQua2V5TW9kaWZpZXJzIHw9IEVWVF9OVU1MT0NLOwotICAgICAgICBpZiAobW9kcyAmIDB4NDApCi0gICAgICAgICAgICBFVlQua2V5TW9kaWZpZXJzIHw9IEVWVF9DQVBTTE9DSzsKKwkvKiBSZWFkIHRoZSBrZXlib2FyZCBtb2RpZmllciBmbGFncyBmcm9tIHRoZSBCSU9TIHRvIGdldCB0aGUKKwkgKiBjb3JyZWN0IGluaXRpYWxpc2F0aW9uIHN0YXRlLiBUaGUgb25seSBzdGF0ZSB3ZSBjYXJlIGFib3V0IGlzCisJICogdGhlIGNvcnJlY3QgdG9nZ2xlIHN0YXRlIGZsYWdzIHN1Y2ggYXMgU0NST0xMTE9DSywgTlVNTE9DSyBhbmQKKwkgKiBDQVBTTE9DSy4KKwkgKi8KKwlFVlQua2V5TW9kaWZpZXJzID0gMDsKKwltb2RzID0gUE1fZ2V0Qnl0ZShfRVZUX2Jpb3NQdHIrMHgxNyk7CisJaWYgKG1vZHMgJiAweDEwKQorCSAgICBFVlQua2V5TW9kaWZpZXJzIHw9IEVWVF9TQ1JPTExMT0NLOworCWlmIChtb2RzICYgMHgyMCkKKwkgICAgRVZULmtleU1vZGlmaWVycyB8PSBFVlRfTlVNTE9DSzsKKwlpZiAobW9kcyAmIDB4NDApCisJICAgIEVWVC5rZXlNb2RpZmllcnMgfD0gRVZUX0NBUFNMT0NLOwogCi0gICAgICAgIC8qIExvY2sgYWxsIG9mIHRoZSBjb2RlIGFuZCBkYXRhIHVzZWQgYnkgb3VyIHByb3RlY3RlZCBtb2RlIGludGVycnVwdAotICAgICAgICAgKiBoYW5kbGluZyByb3V0aW5lcywgc28gdGhhdCBpdCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgY29ycmVjdGx5Ci0gICAgICAgICAqIHVuZGVyIHJlYWwgbW9kZS4KLSAgICAgICAgICovCi0gICAgICAgIGlmICghbG9ja2VkKSB7Ci0gICAgICAgICAgICAvKiBJdCBpcyBkaWZmaWN1bHQgdG8gZW5zdXJlIHRoYXQgd2UgbG9jayBvdXIgZ2xvYmFsIGRhdGEsIHNvIHdlCi0gICAgICAgICAgICAgKiBkbyB0aGlzIGJ5IHRha2luZyB0aGUgYWRkcmVzcyBvZiBhIHZhcmlhYmxlIGxvY2tpbmcgYWxsIGRhdGEKLSAgICAgICAgICAgICAqIDJLYiBvbiBlaXRoZXIgc2lkZS4gVGhpcyBzaG91bGQgcHJvcGVybHkgY292ZXIgdGhlIGdsb2JhbCBkYXRhCi0gICAgICAgICAgICAgKiB1c2VkIGJ5IHRoZSBtb2R1bGUgKHRoZSBvdGhlciBhbHRlcm5hdGl2ZSBpcyB0byBkZWNsYXJlIHRoZQotICAgICAgICAgICAgICogdmFyaWFibGVzIGluIGFzc2VtYmxlciwgaW4gd2hpY2ggY2FzZSB3ZSBrbm93IGl0IHdpbGwgYmUKLSAgICAgICAgICAgICAqIGNvcnJlY3QpLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzdGF0ICA9ICFQTV9sb2NrRGF0YVBhZ2VzKCZFVlQsc2l6ZW9mKEVWVCksJmxoKTsKLSAgICAgICAgICAgIHN0YXQgfD0gIVBNX2xvY2tEYXRhUGFnZXMoJl9FVlRfYmlvc1B0cixzaXplb2YoX0VWVF9iaW9zUHRyKSwmbGgpOwotICAgICAgICAgICAgc3RhdCB8PSAhUE1fbG9ja0NvZGVQYWdlcygoX19jb2RlUHRyKV9FVlRfY0NvZGVTdGFydCwoaW50KV9FVlRfY0NvZGVFbmQtKGludClfRVZUX2NDb2RlU3RhcnQsJmxoKTsKLSAgICAgICAgICAgIHN0YXQgfD0gIVBNX2xvY2tDb2RlUGFnZXMoKF9fY29kZVB0cilfRVZUX2NvZGVTdGFydCwoaW50KV9FVlRfY29kZUVuZC0oaW50KV9FVlRfY29kZVN0YXJ0LCZsaCk7Ci0gICAgICAgICAgICBpZiAoc3RhdCkgewotICAgICAgICAgICAgICAgIFBNX2ZhdGFsRXJyb3IoIlBhZ2UgbG9ja2luZyBzZXJ2aWNlcyBmYWlsZWQgLSBpbnRlcnJ1cHQgaGFuZGxpbmcgbm90IHNhZmUhIik7Ci0gICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsb2NrZWQgPSAxOwotICAgICAgICAgICAgfQorCS8qIExvY2sgYWxsIG9mIHRoZSBjb2RlIGFuZCBkYXRhIHVzZWQgYnkgb3VyIHByb3RlY3RlZCBtb2RlIGludGVycnVwdAorCSAqIGhhbmRsaW5nIHJvdXRpbmVzLCBzbyB0aGF0IGl0IHdpbGwgY29udGludWUgdG8gd29yayBjb3JyZWN0bHkKKwkgKiB1bmRlciByZWFsIG1vZGUuCisJICovCisJaWYgKCFsb2NrZWQpIHsKKwkgICAgLyogSXQgaXMgZGlmZmljdWx0IHRvIGVuc3VyZSB0aGF0IHdlIGxvY2sgb3VyIGdsb2JhbCBkYXRhLCBzbyB3ZQorCSAgICAgKiBkbyB0aGlzIGJ5IHRha2luZyB0aGUgYWRkcmVzcyBvZiBhIHZhcmlhYmxlIGxvY2tpbmcgYWxsIGRhdGEKKwkgICAgICogMktiIG9uIGVpdGhlciBzaWRlLiBUaGlzIHNob3VsZCBwcm9wZXJseSBjb3ZlciB0aGUgZ2xvYmFsIGRhdGEKKwkgICAgICogdXNlZCBieSB0aGUgbW9kdWxlICh0aGUgb3RoZXIgYWx0ZXJuYXRpdmUgaXMgdG8gZGVjbGFyZSB0aGUKKwkgICAgICogdmFyaWFibGVzIGluIGFzc2VtYmxlciwgaW4gd2hpY2ggY2FzZSB3ZSBrbm93IGl0IHdpbGwgYmUKKwkgICAgICogY29ycmVjdCkuCisJICAgICAqLworCSAgICBzdGF0ICA9ICFQTV9sb2NrRGF0YVBhZ2VzKCZFVlQsc2l6ZW9mKEVWVCksJmxoKTsKKwkgICAgc3RhdCB8PSAhUE1fbG9ja0RhdGFQYWdlcygmX0VWVF9iaW9zUHRyLHNpemVvZihfRVZUX2Jpb3NQdHIpLCZsaCk7CisJICAgIHN0YXQgfD0gIVBNX2xvY2tDb2RlUGFnZXMoKF9fY29kZVB0cilfRVZUX2NDb2RlU3RhcnQsKGludClfRVZUX2NDb2RlRW5kLShpbnQpX0VWVF9jQ29kZVN0YXJ0LCZsaCk7CisJICAgIHN0YXQgfD0gIVBNX2xvY2tDb2RlUGFnZXMoKF9fY29kZVB0cilfRVZUX2NvZGVTdGFydCwoaW50KV9FVlRfY29kZUVuZC0oaW50KV9FVlRfY29kZVN0YXJ0LCZsaCk7CisJICAgIGlmIChzdGF0KSB7CisJCVBNX2ZhdGFsRXJyb3IoIlBhZ2UgbG9ja2luZyBzZXJ2aWNlcyBmYWlsZWQgLSBpbnRlcnJ1cHQgaGFuZGxpbmcgbm90IHNhZmUhIik7CisJCWV4aXQoMSk7CisJCX0KKwkgICAgbG9ja2VkID0gMTsKKwkgICAgfQogCi0gICAgICAgIF9FVlRfaW5zdGFsbGVkID0gdHJ1ZTsKLSAgICAgICAgfQorCV9FVlRfaW5zdGFsbGVkID0gdHJ1ZTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMTAsOSArMzEwLDkgQEAKICAgICBpbnQgeVJlcykKIHsKICAgICBpZiAoaGF2ZU1vdXNlKSB7Ci0gICAgICAgIHBzMk1vdXNlU3RvcCgpOwotICAgICAgICBwczJNb3VzZVN0YXJ0KCAwLCB4UmVzLCAwLCB5UmVzLCAtMSwgLTEsIC0xKTsKLSAgICAgICAgfQorCXBzMk1vdXNlU3RvcCgpOworCXBzMk1vdXNlU3RhcnQoIDAsIHhSZXMsIDAsIHlSZXMsIC0xLCAtMSwgLTEpOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMyNSw3ICszMjUsNyBAQAogICAgIGludCAqeSkKIHsKICAgICBpZiAoaGF2ZU1vdXNlKQotICAgICAgICBwczJNb3VzZU1vdmUoKngsICp5KTsKKwlwczJNb3VzZU1vdmUoKngsICp5KTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzOCwyNCArMzM4LDI0IEBACiAgICAgdWNoYXIgICBtb2RzOwogCiAgICAgaWYgKF9FVlRfaW5zdGFsbGVkKSB7Ci0gICAgICAgIFBNX3Jlc3RvcmVLZXlIYW5kbGVyKCk7CisJUE1fcmVzdG9yZUtleUhhbmRsZXIoKTsKICAgICBpZiAoaGF2ZU1vdXNlKQotICAgICAgICBQTV9yZXN0b3JlTW91c2VIYW5kbGVyKCk7CisJUE1fcmVzdG9yZU1vdXNlSGFuZGxlcigpOwogCi0gICAgICAgIC8qIFNldCB0aGUga2V5Ym9hcmQgbW9kaWZpZXIgZmxhZ3MgaW4gdGhlIEJJT1MgdG8gb3VyIHZhbHVlcyAqLwotICAgICAgICBFVlRfYWxsb3dMRURTKHRydWUpOwotICAgICAgICBtb2RzID0gUE1fZ2V0Qnl0ZShfRVZUX2Jpb3NQdHIrMHgxNykgJiB+MHg3MDsKLSAgICAgICAgaWYgKEVWVC5rZXlNb2RpZmllcnMgJiBFVlRfU0NST0xMTE9DSykKLSAgICAgICAgICAgIG1vZHMgfD0gMHgxMDsKLSAgICAgICAgaWYgKEVWVC5rZXlNb2RpZmllcnMgJiBFVlRfTlVNTE9DSykKLSAgICAgICAgICAgIG1vZHMgfD0gMHgyMDsKLSAgICAgICAgaWYgKEVWVC5rZXlNb2RpZmllcnMgJiBFVlRfQ0FQU0xPQ0spCi0gICAgICAgICAgICBtb2RzIHw9IDB4NDA7Ci0gICAgICAgIFBNX3NldEJ5dGUoX0VWVF9iaW9zUHRyKzB4MTcsbW9kcyk7CisJLyogU2V0IHRoZSBrZXlib2FyZCBtb2RpZmllciBmbGFncyBpbiB0aGUgQklPUyB0byBvdXIgdmFsdWVzICovCisJRVZUX2FsbG93TEVEUyh0cnVlKTsKKwltb2RzID0gUE1fZ2V0Qnl0ZShfRVZUX2Jpb3NQdHIrMHgxNykgJiB+MHg3MDsKKwlpZiAoRVZULmtleU1vZGlmaWVycyAmIEVWVF9TQ1JPTExMT0NLKQorCSAgICBtb2RzIHw9IDB4MTA7CisJaWYgKEVWVC5rZXlNb2RpZmllcnMgJiBFVlRfTlVNTE9DSykKKwkgICAgbW9kcyB8PSAweDIwOworCWlmIChFVlQua2V5TW9kaWZpZXJzICYgRVZUX0NBUFNMT0NLKQorCSAgICBtb2RzIHw9IDB4NDA7CisJUE1fc2V0Qnl0ZShfRVZUX2Jpb3NQdHIrMHgxNyxtb2RzKTsKIAotICAgICAgICAvKiBGbGFnIHRoYXQgd2UgYXJlIG5vIGxvbmdlciBpbnN0YWxsZWQgKi8KLSAgICAgICAgX0VWVF9pbnN0YWxsZWQgPSBmYWxzZTsKLSAgICAgICAgfQorCS8qIEZsYWcgdGhhdCB3ZSBhcmUgbm8gbG9uZ2VyIGluc3RhbGxlZCAqLworCV9FVlRfaW5zdGFsbGVkID0gZmFsc2U7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc214L3BtLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9zbXgvcG0uYwppbmRleCBkNmM5NWQ2Li45OWVlM2Q0IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9zbXgvcG0uYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9zbXgvcG0uYwpAQCAtMTQ3LDkgKzE0Nyw5IEBACiB7CiAgICAgdWludCBwb3MgPSBzdHJsZW4ocyk7CiAgICAgaWYgKHNbcG9zLTFdICE9ICdcXCcpIHsKLSAgICAgICAgc1twb3NdID0gJ1xcJzsKLSAgICAgICAgc1twb3MrMV0gPSAnXDAnOwotICAgICAgICB9CisJc1twb3NdID0gJ1xcJzsKKwlzW3BvcysxXSA9ICdcMCc7CisJfQogfQogCiB2b2lkIFBNQVBJIFBNX3NldEZhdGFsRXJyb3JDbGVhbnVwKApAQCAtMTYzLDI4ICsxNjMsMjggQEAKIHZvaWQgUE1BUEkgUE1fZmF0YWxFcnJvcihjb25zdCBjaGFyICptc2cpCiB7CiAgICAgaWYgKGZhdGFsRXJyb3JDbGVhbnVwKQotICAgICAgICBmYXRhbEVycm9yQ2xlYW51cCgpOworCWZhdGFsRXJyb3JDbGVhbnVwKCk7CiAgICAgTUdMT3V0cHV0KG1zZyk7Ci0vLyBObyBzdXBwb3J0IGZvciBmcHJpbnRmKCkgdW5kZXIgc214IGN1cnJlbnRseSEKLS8vICBmcHJpbnRmKHN0ZGVyciwiJXNcbiIsIG1zZyk7CisvKiBObyBzdXBwb3J0IGZvciBmcHJpbnRmKCkgdW5kZXIgc214IGN1cnJlbnRseSEgKi8KKy8qICBmcHJpbnRmKHN0ZGVyciwiJXNcbiIsIG1zZyk7ICovCiAgICAgZXhpdCgxKTsKIH0KIAogc3RhdGljIHZvaWQgRXhpdFZCRUJ1Zih2b2lkKQogewogICAgIGlmIChWRVNBQnVmX3B0cikKLSAgICAgICAgUE1fZnJlZVJlYWxTZWcoVkVTQUJ1Zl9wdHIpOworCVBNX2ZyZWVSZWFsU2VnKFZFU0FCdWZfcHRyKTsKICAgICBWRVNBQnVmX3B0ciA9IDA7CiB9CiAKIHZvaWQgKiBQTUFQSSBQTV9nZXRWRVNBQnVmKHVpbnQgKmxlbix1aW50ICpyc2VnLHVpbnQgKnJvZmYpCiB7CiAgICAgaWYgKCFWRVNBQnVmX3B0cikgewotICAgICAgICAvKiBBbGxvY2F0ZSBhIGdsb2JhbCBidWZmZXIgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgVkVTQSBWQkUgKi8KLSAgICAgICAgaWYgKChWRVNBQnVmX3B0ciA9IFBNX2FsbG9jUmVhbFNlZyhWRVNBQnVmX2xlbiwgJlZFU0FCdWZfcnNlZywgJlZFU0FCdWZfcm9mZikpID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXRleGl0KEV4aXRWQkVCdWYpOwotICAgICAgICB9CisJLyogQWxsb2NhdGUgYSBnbG9iYWwgYnVmZmVyIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIFZFU0EgVkJFICovCisJaWYgKChWRVNBQnVmX3B0ciA9IFBNX2FsbG9jUmVhbFNlZyhWRVNBQnVmX2xlbiwgJlZFU0FCdWZfcnNlZywgJlZFU0FCdWZfcm9mZikpID09IE5VTEwpCisJICAgIHJldHVybiBOVUxMOworCWF0ZXhpdChFeGl0VkJFQnVmKTsKKwl9CiAgICAgKmxlbiA9IFZFU0FCdWZfbGVuOwogICAgICpyc2VnID0gVkVTQUJ1Zl9yc2VnOwogICAgICpyb2ZmID0gVkVTQUJ1Zl9yb2ZmOwpAQCAtMjM0LDEyICsyMzQsMTIgQEAKICAgICBpbnQgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfUk1fQkxPQ0tTOyBpKyspIHsKLSAgICAgICAgaWYgKHJtQmxvY2tzW2ldLnAgPT0gTlVMTCkgewotICAgICAgICAgICAgcm1CbG9ja3NbaV0ucCA9IG1lbTsKLSAgICAgICAgICAgIHJtQmxvY2tzW2ldLnRhZyA9IHRhZzsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmIChybUJsb2Nrc1tpXS5wID09IE5VTEwpIHsKKwkgICAgcm1CbG9ja3NbaV0ucCA9IG1lbTsKKwkgICAgcm1CbG9ja3NbaV0udGFnID0gdGFnOworCSAgICByZXR1cm47CisJICAgIH0KKwl9CiAgICAgUE1fZmF0YWxFcnJvcigiVG8gbWFueSByZWFsIG1vZGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRpb25zISIpOwogfQogCkBAIC0yNDgsOSArMjQ4LDkgQEAKICAgICBpbnQgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfUk1fQkxPQ0tTOyBpKyspIHsKLSAgICAgICAgaWYgKHJtQmxvY2tzW2ldLnAgPT0gbWVtKQotICAgICAgICAgICAgcmV0dXJuIHJtQmxvY2tzW2ldLnRhZzsKLSAgICAgICAgfQorCWlmIChybUJsb2Nrc1tpXS5wID09IG1lbSkKKwkgICAgcmV0dXJuIHJtQmxvY2tzW2ldLnRhZzsKKwl9CiAgICAgUE1fZmF0YWxFcnJvcigiQ291bGQgbm90IGZpbmQgcHJpb3IgcmVhbCBtb2RlIG1lbW9yeSBibG9jayBhbGxvY2F0aW9uISIpOwogICAgIHJldHVybiAwOwogfQpAQCAtMjc0LDcgKzI3NCw3IEBACiAgICAgY2hhciAgICAgICAgKmVudjsKIAogICAgIGlmICgoZW52ID0gZ2V0ZW52KCJOVUNMRVVTX1BBVEgiKSkgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIGVudjsKKwlyZXR1cm4gZW52OwogICAgIHJldHVybiAiYzpcXG51Y2xldXMiOwogfQogCkBAIC0zMzksMTIgKzMzOSwxMiBAQAogICAgIHNiLT5vbGRNb2RlID0gcmVncy5oLmFsICYgMHg3RjsKICAgICBzYi0+b2xkNTBMaW5lcyA9IGZhbHNlOwogICAgIGlmIChzYi0+b2xkTW9kZSA9PSAweDMpIHsKLSAgICAgICAgcmVncy54LmF4ID0gMHgxMTMwOwotICAgICAgICByZWdzLnguYnggPSAwOwotICAgICAgICByZWdzLnguZHggPSAwOwotICAgICAgICBQTV9pbnQ4NigweDEwLCZyZWdzLCZyZWdzKTsKLSAgICAgICAgc2ItPm9sZDUwTGluZXMgPSAocmVncy5oLmRsID09IDQyIHx8IHJlZ3MuaC5kbCA9PSA0OSk7Ci0gICAgICAgIH0KKwlyZWdzLnguYXggPSAweDExMzA7CisJcmVncy54LmJ4ID0gMDsKKwlyZWdzLnguZHggPSAwOworCVBNX2ludDg2KDB4MTAsJnJlZ3MsJnJlZ3MpOworCXNiLT5vbGQ1MExpbmVzID0gKHJlZ3MuaC5kbCA9PSA0MiB8fCByZWdzLmguZGwgPT0gNDkpOworCX0KICAgICAodm9pZClod25kQ29uc29sZTsKIH0KIApAQCAtMzYxLDEwICszNjEsMTAgQEAKIAogICAgIC8qIFJldG9yZSA1MCBsaW5lIG1vZGUgaWYgc2V0ICovCiAgICAgaWYgKHNiLT5vbGQ1MExpbmVzKSB7Ci0gICAgICAgIHJlZ3MueC5heCA9IDB4MTExMjsKLSAgICAgICAgcmVncy54LmJ4ID0gMDsKLSAgICAgICAgUE1faW50ODYoMHgxMCwmcmVncywmcmVncyk7Ci0gICAgICAgIH0KKwlyZWdzLnguYXggPSAweDExMTI7CisJcmVncy54LmJ4ID0gMDsKKwlQTV9pbnQ4NigweDEwLCZyZWdzLCZyZWdzKTsKKwl9CiAgICAgKHZvaWQpaHduZENvbnNvbGU7CiB9CiAKQEAgLTM4OCwxMyArMzg4LDEzIEBACiAgICAgUE1fc2V0V29yZChfYmlvc1B0cisweDRDLHdpZHRoKjIpOwogICAgIFBNX3NldEJ5dGUoX2Jpb3NQdHIrMHg4NCxoZWlnaHQtMSk7CiAgICAgaWYgKGhlaWdodCA+IDI1KSB7Ci0gICAgICAgIFBNX3NldFdvcmQoX2Jpb3NQdHIrMHg2MCwweDA2MDcpOwotICAgICAgICBQTV9zZXRCeXRlKF9iaW9zUHRyKzB4ODUsMHgwOCk7Ci0gICAgICAgIH0KKwlQTV9zZXRXb3JkKF9iaW9zUHRyKzB4NjAsMHgwNjA3KTsKKwlQTV9zZXRCeXRlKF9iaW9zUHRyKzB4ODUsMHgwOCk7CisJfQogICAgIGVsc2UgewotICAgICAgICBQTV9zZXRXb3JkKF9iaW9zUHRyKzB4NjAsMHgwRDBFKTsKLSAgICAgICAgUE1fc2V0Qnl0ZShfYmlvc1B0cisweDg1LDB4MDE2KTsKLSAgICAgICAgfQorCVBNX3NldFdvcmQoX2Jpb3NQdHIrMHg2MCwweDBEMEUpOworCVBNX3NldEJ5dGUoX2Jpb3NQdHIrMHg4NSwweDAxNik7CisJfQogfQogCiB2b2lkICogUE1BUEkgUE1fbWFsbG9jU2hhcmVkKGxvbmcgc2l6ZSkKQEAgLTQyNCwyMiArNDI0LDIyIEBACiAKICAgICAvKiBDcmVhdGUgYSB6ZXJvIG1lbW9yeSBtYXBwaW5nIGZvciB1cyB0byB1c2UgKi8KICAgICBpZiAoZmlyc3RUaW1lKSB7Ci0gICAgICAgIHJtWmVyb1B0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigwLDB4N0ZGRix0cnVlKTsKLSAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7Ci0gICAgICAgIH0KKwlybVplcm9QdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMCwweDdGRkYsdHJ1ZSk7CisJZmlyc3RUaW1lID0gZmFsc2U7CisJfQogCiAgICAgLyogUmVtYXAgdGhlIHNlY29uZGFyeSBCSU9TIHRvIDB4QzAwMDAgcGh5c2ljYWwgKi8KICAgICBpZiAoQklPU1BoeXNBZGRyICE9IDB4QzAwMDBMIHx8IEJJT1NMZW4gPiAzMjc2OCkgewotICAgICAgICAvKiBTTVggY2Fubm90IHZpcnR1YWxseSByZW1hcCB0aGUgQklPUywgc28gd2UgY2FuIG9ubHkgd29yayBpZiBhbGwKLSAgICAgICAgICogdGhlIHNlY29uZGFyeSBjb250cm9sbGVycyBhcmUgaWRlbnRpY2FsLCBhbmQgd2UgdGhlbiB1c2UgdGhlCi0gICAgICAgICAqIEJJT1Mgb24gdGhlIGZpcnN0IGNvbnRyb2xsZXIgZm9yIGFsbCB0aGUgcmVtYWluaW5nIGNvbnRyb2xsZXJzLgotICAgICAgICAgKgotICAgICAgICAgKiBGb3IgT1MnZXMgdGhhdCBkbyB2aXJ0dWFsIG1lbW9yeSwgYW5kIHJlbWFwcGluZyBvZiAweEMwMDAwCi0gICAgICAgICAqIHBoeXNpY2FsIChwZXJoYXBzIGEgY29weSBvbiB3cml0ZSBtYXBwaW5nKSBzaG91bGQgYmUgYWxsIHRoYXQKLSAgICAgICAgICogaXMgbmVlZGVkLgotICAgICAgICAgKi8KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisJLyogU01YIGNhbm5vdCB2aXJ0dWFsbHkgcmVtYXAgdGhlIEJJT1MsIHNvIHdlIGNhbiBvbmx5IHdvcmsgaWYgYWxsCisJICogdGhlIHNlY29uZGFyeSBjb250cm9sbGVycyBhcmUgaWRlbnRpY2FsLCBhbmQgd2UgdGhlbiB1c2UgdGhlCisJICogQklPUyBvbiB0aGUgZmlyc3QgY29udHJvbGxlciBmb3IgYWxsIHRoZSByZW1haW5pbmcgY29udHJvbGxlcnMuCisJICoKKwkgKiBGb3IgT1MnZXMgdGhhdCBkbyB2aXJ0dWFsIG1lbW9yeSwgYW5kIHJlbWFwcGluZyBvZiAweEMwMDAwCisJICogcGh5c2ljYWwgKHBlcmhhcHMgYSBjb3B5IG9uIHdyaXRlIG1hcHBpbmcpIHNob3VsZCBiZSBhbGwgdGhhdAorCSAqIGlzIG5lZWRlZC4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7CisJfQogCiAgICAgLyogU2F2ZSBjdXJyZW50IGhhbmRsZXJzIG9mIGludCAxMGggYW5kIDZEaCAqLwogICAgIEdldFJNVmVjdCgweDEwLCZDdXJyZW50MTApOwpAQCAtNDU3LDkgKzQ1Nyw5IEBACiAKICAgICAvKiBTZWNvbmQgdGhlIHByaW1hcnkgQklPUyBtYXBwaW4gMToxIGZvciAweEMwMDAwIHBoeXNpY2FsICovCiAgICAgaWYgKEJJT1NQaHlzQWRkciAhPSAweEMwMDAwTCkgewotICAgICAgICAvKiBTTVggZG9lcyBub3Qgc3VwcG9ydCB0aGlzICovCi0gICAgICAgICh2b2lkKW1hcHBlZEJJT1M7Ci0gICAgICAgIH0KKwkvKiBTTVggZG9lcyBub3Qgc3VwcG9ydCB0aGlzICovCisJKHZvaWQpbWFwcGVkQklPUzsKKwl9CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ3MCwyNiArNDcwLDI2IEBACiAKICAgICBMWlRpbWVyT25FeHQoJnRtKTsKICAgICB3aGlsZSAoTFpUaW1lckxhcEV4dCgmdG0pIDwgbWljcm9zZWNvbmRzKQotICAgICAgICA7CisJOwogICAgIExaVGltZXJPZmZFeHQoJnRtKTsKIH0KIAogaW50IFBNQVBJIFBNX2dldENPTVBvcnQoaW50IHBvcnQpCiB7CiAgICAgc3dpdGNoIChwb3J0KSB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuIDB4M0Y4OwotICAgICAgICBjYXNlIDE6IHJldHVybiAweDJGODsKLSAgICAgICAgfQorCWNhc2UgMDogcmV0dXJuIDB4M0Y4OworCWNhc2UgMTogcmV0dXJuIDB4MkY4OworCX0KICAgICByZXR1cm4gMDsKIH0KIAogaW50IFBNQVBJIFBNX2dldExQVFBvcnQoaW50IHBvcnQpCiB7CiAgICAgc3dpdGNoIChwb3J0KSB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuIDB4M0JDOwotICAgICAgICBjYXNlIDE6IHJldHVybiAweDM3ODsKLSAgICAgICAgY2FzZSAyOiByZXR1cm4gMHgyNzg7Ci0gICAgICAgIH0KKwljYXNlIDA6IHJldHVybiAweDNCQzsKKwljYXNlIDE6IHJldHVybiAweDM3ODsKKwljYXNlIDI6IHJldHVybiAweDI3ODsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTUzNCwxNSArNTM0LDE1IEBACiAgICAgbWVtc2V0KGZpbmREYXRhLDAsZmluZERhdGEtPmR3U2l6ZSk7CiAgICAgZmluZERhdGEtPmR3U2l6ZSA9IGR3U2l6ZTsKICAgICBpZiAoYmxrLT5hdHRyaWIgJiBfQV9SRE9OTFkpCi0gICAgICAgIGZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9SRUFET05MWTsKKwlmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfUkVBRE9OTFk7CiAgICAgaWYgKGJsay0+YXR0cmliICYgX0FfU1VCRElSKQotICAgICAgICBmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfRElSRUNUT1JZOworCWZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9ESVJFQ1RPUlk7CiAgICAgaWYgKGJsay0+YXR0cmliICYgX0FfQVJDSCkKLSAgICAgICAgZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX0FSQ0hJVkU7CisJZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX0FSQ0hJVkU7CiAgICAgaWYgKGJsay0+YXR0cmliICYgX0FfSElEREVOKQotICAgICAgICBmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfSElEREVOOworCWZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9ISURERU47CiAgICAgaWYgKGJsay0+YXR0cmliICYgX0FfU1lTVEVNKQotICAgICAgICBmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfU1lTVEVNOworCWZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9TWVNURU07CiAgICAgZmluZERhdGEtPnNpemVMbyA9IGJsay0+c2l6ZTsKICAgICBzdHJuY3B5KGZpbmREYXRhLT5uYW1lLGJsay0+bmFtZSxQTV9NQVhfUEFUSCk7CiAgICAgZmluZERhdGEtPm5hbWVbUE1fTUFYX1BBVEgtMV0gPSAwOwpAQCAtNTYxLDExICs1NjEsMTEgQEAKICAgICBzdHJ1Y3QgZmluZF90ICpibGs7CiAKICAgICBpZiAoKGJsayA9IFBNX21hbGxvYyhzaXplb2YoKmJsaykpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gUE1fRklMRV9JTlZBTElEOworCXJldHVybiBQTV9GSUxFX0lOVkFMSUQ7CiAgICAgaWYgKF9kb3NfZmluZGZpcnN0KChjaGFyKilmaWxlbmFtZSxGSU5EX01BU0ssYmxrKSA9PSAwKSB7Ci0gICAgICAgIGNvbnZlcnRGaW5kRGF0YShmaW5kRGF0YSxibGspOwotICAgICAgICByZXR1cm4gYmxrOwotICAgICAgICB9CisJY29udmVydEZpbmREYXRhKGZpbmREYXRhLGJsayk7CisJcmV0dXJuIGJsazsKKwl9CiAgICAgcmV0dXJuIFBNX0ZJTEVfSU5WQUxJRDsKIH0KIApAQCAtNTgwLDkgKzU4MCw5IEBACiAgICAgc3RydWN0IGZpbmRfdCAqYmxrID0gaGFuZGxlOwogCiAgICAgaWYgKF9kb3NfZmluZG5leHQoYmxrKSA9PSAwKSB7Ci0gICAgICAgIGNvbnZlcnRGaW5kRGF0YShmaW5kRGF0YSxibGspOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorCWNvbnZlcnRGaW5kRGF0YShmaW5kRGF0YSxibGspOworCXJldHVybiB0cnVlOworCX0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTYxNCw5ICs2MTQsOSBAQAogewogICAgIFJNUkVHUyAgcmVnczsKICAgICByZWdzLmguZGwgPSAodWNoYXIpKGRyaXZlIC0gJ0EnICsgMSk7Ci0gICAgcmVncy5oLmFoID0gMHgzNjsgICAgICAgICAgICAgICAvLyBHZXQgZGlzayBpbmZvcm1hdGlvbiBzZXJ2aWNlCisgICAgcmVncy5oLmFoID0gMHgzNjsgICAgICAgICAgICAgICAvKiBHZXQgZGlzayBpbmZvcm1hdGlvbiBzZXJ2aWNlICovCiAgICAgUE1faW50ODYoMHgyMSwmcmVncywmcmVncyk7Ci0gICAgcmV0dXJuIHJlZ3MueC5heCAhPSAweEZGRkY7ICAgICAvLyBBWCA9IDB4RkZGRiBpZiBkaXNrIGlzIGludmFsaWQKKyAgICByZXR1cm4gcmVncy54LmF4ICE9IDB4RkZGRjsgICAgIC8qIEFYID0gMHhGRkZGIGlmIGRpc2sgaXMgaW52YWxpZCAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjQ5LDI1ICs2NDksMjUgQEAKICAgICBEV09SRCBhdHRyID0gMDsKIAogICAgIGlmIChhdHRyaWIgJiBQTV9GSUxFX1JFQURPTkxZKQotICAgICAgICBhdHRyIHw9IEZJTEVfQVRUUklCVVRFX1JFQURPTkxZOworCWF0dHIgfD0gRklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7CiAgICAgaWYgKGF0dHJpYiAmIFBNX0ZJTEVfQVJDSElWRSkKLSAgICAgICAgYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9BUkNISVZFOworCWF0dHIgfD0gRklMRV9BVFRSSUJVVEVfQVJDSElWRTsKICAgICBpZiAoYXR0cmliICYgUE1fRklMRV9ISURERU4pCi0gICAgICAgIGF0dHIgfD0gRklMRV9BVFRSSUJVVEVfSElEREVOOworCWF0dHIgfD0gRklMRV9BVFRSSUJVVEVfSElEREVOOwogICAgIGlmIChhdHRyaWIgJiBQTV9GSUxFX1NZU1RFTSkKLSAgICAgICAgYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9TWVNURU07CisJYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9TWVNURU07CiAgICAgU2V0RmlsZUF0dHJpYnV0ZXMoKExQU1RSKWZpbGVuYW1lLCBhdHRyKTsKICNlbHNlCiAgICAgdWludCBhdHRyID0gMDsKIAogICAgIGlmIChhdHRyaWIgJiBQTV9GSUxFX1JFQURPTkxZKQotICAgICAgICBhdHRyIHw9IF9BX1JET05MWTsKKwlhdHRyIHw9IF9BX1JET05MWTsKICAgICBpZiAoYXR0cmliICYgUE1fRklMRV9BUkNISVZFKQotICAgICAgICBhdHRyIHw9IF9BX0FSQ0g7CisJYXR0ciB8PSBfQV9BUkNIOwogICAgIGlmIChhdHRyaWIgJiBQTV9GSUxFX0hJRERFTikKLSAgICAgICAgYXR0ciB8PSBfQV9ISURERU47CisJYXR0ciB8PSBfQV9ISURERU47CiAgICAgaWYgKGF0dHJpYiAmIFBNX0ZJTEVfU1lTVEVNKQotICAgICAgICBhdHRyIHw9IF9BX1NZU1RFTTsKKwlhdHRyIHw9IF9BX1NZU1RFTTsKICAgICBfZG9zX3NldGZpbGVhdHRyKGZpbGVuYW1lLGF0dHIpOwogI2VuZGlmCiB9CkBAIC02ODIsNyArNjgyLDcgQEAKICNpZmRlZiAgX19HTlVDX18KICAgICByZXR1cm4gbWtkaXIoZmlsZW5hbWUsU19JUlVTUikgPT0gMDsKICNlbHNlCi0vL0FNOiAgIHJldHVybiBta2RpcihmaWxlbmFtZSkgPT0gMDsKKy8qQU06ICAgcmV0dXJuIG1rZGlyKGZpbGVuYW1lKSA9PSAwOyAqLwogICAgIHJldHVybihmYWxzZSk7CiAjZW5kaWYKIH0KQEAgLTY5NCw3ICs2OTQsNyBAQAogaWJvb2wgUE1BUEkgUE1fcm1kaXIoCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7Ci0vL0FNOiAgIHJldHVybiBybWRpcihmaWxlbmFtZSkgPT0gMDsKKy8qQU06ICAgcmV0dXJuIHJtZGlyKGZpbGVuYW1lKSA9PSAwOyAqLwogICAgIHJldHVybihmYWxzZSk7CiB9CiAKQEAgLTcxOSw5ICs3MTksOSBAQAogICAgICAqIHByb3Blcmx5IHBhZ2UgYWxpZ24gdGhlIHN0YXJ0IG9mIHRoZSBtZW1vcnkgYmxvY2sgZm9yIERNQSBvcGVyYXRpb25zLgogICAgICAqLwogICAgIGlmIChzaXplID4gNDA5NikKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAgICAgaWYgKChwID0gUE1fYWxsb2NSZWFsU2VnKChzaXplICsgMHhGRkYpICYgfjB4RkZGLCZyX3NlZywmcl9vZmYpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKICAgICAqcGh5c0FkZHIgPSAoKHJfc2VnIDw8IDQpICsgcl9vZmYgKyAweEZGRikgJiB+MHhGRkY7CiAgICAgUE1fbG9ja0RhdGFQYWdlcyhwLHNpemUqMiwmbGgpOwogICAgIHJldHVybiBwOwpAQCAtNzQzLDExICs3NDMsMTEgQEAKICAgICB1bG9uZyAgIHBoeXNPZnM7CiAKICAgICBpZiAocGh5c0FkZHIgPCAweDEwMDAwMEwpIHsKLSAgICAgICAgLyogV2UgY2FuJ3QgbWFwIG1lbW9yeSBiZWxvdyAxTWIsIGJ1dCB0aGUgbGluZWFyIGFkZHJlc3MgYXJlIGFscmVhZHkKLSAgICAgICAgICogbWFwcGVkIDE6MSBmb3IgdGhpcyBtZW1vcnkgYW55d2F5IHNvIHdlIGp1c3QgcmV0dXJuIHRoZSBiYXNlIGFkZHJlc3MuCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gcGh5c0FkZHI7Ci0gICAgICAgIH0KKwkvKiBXZSBjYW4ndCBtYXAgbWVtb3J5IGJlbG93IDFNYiwgYnV0IHRoZSBsaW5lYXIgYWRkcmVzcyBhcmUgYWxyZWFkeQorCSAqIG1hcHBlZCAxOjEgZm9yIHRoaXMgbWVtb3J5IGFueXdheSBzbyB3ZSBqdXN0IHJldHVybiB0aGUgYmFzZSBhZGRyZXNzLgorCSAqLworCXJldHVybiBwaHlzQWRkcjsKKwl9CiAKICAgICAvKiBSb3VuZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyB0byBhIDRLYiBib3VuZGFyeSBhbmQgdGhlIGxpbWl0IHRvIGEKICAgICAgKiA0S2ItMSBib3VuZGFyeSBiZWZvcmUgcGFzc2luZyB0aGUgdmFsdWVzIHRvIERQTUkgYXMgc29tZSBleHRlbmRlcnMKQEAgLTc2Niw3ICs3NjYsNyBAQAogICAgIHIueC5kaSA9IGxpbWl0ICYgMHhGRkZGOwogICAgIFBNX2ludDM4NigweDMxLCAmciwgJnIpOwogICAgIGlmIChyLnguY2ZsYWcpCi0gICAgICAgIHJldHVybiAweEZGRkZGRkZGVUw7CisJcmV0dXJuIDB4RkZGRkZGRkZVTDsKICAgICByZXR1cm4gKCh1bG9uZylyLnguYnggPDwgMTYpICsgci54LmN4ICsgcGh5c09mczsKIH0KIApAQCAtNzgwLDcgKzc4MCw3IEBACiAgICAgci54LmR4ID0gbGluQWRkciAmIDB4RkZGRjsKICAgICBQTV9pbnQzODYoMHgzMSwgJnIsICZyKTsKICAgICBpZiAoci54LmNmbGFnKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtODA0LDcgKzgwNCw3IEBACiAgICAgci54LmR4ID0gbGltaXQgJiAweEZGRkY7CiAgICAgUE1faW50Mzg2KDB4MzEsICZyLCAmcik7CiAgICAgaWYgKHIueC5jZmxhZykKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTgzMCwxMSArODMwLDExIEBACiAKICAgICAvKiBNYXAgcGh5c2ljYWwgbWVtb3J5IGFuZCBjcmVhdGUgc2VsZWN0b3IgKi8KICAgICBpZiAoKGJhc2UgPSBEUE1JX21hcFBoeXNpY2FsVG9MaW5lYXIoYmFzZSxsaW1pdCkpID09IDB4RkZGRkZGRkZVTCkKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgaWYgKCFEUE1JX3NldFNlbGVjdG9yQmFzZShzZWwsYmFzZSkpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIGlmICghRFBNSV9zZXRTZWxlY3RvckxpbWl0KHNlbCxsaW1pdCkpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIHJldHVybiBzZWw7CiB9CiAKQEAgLTg4MywyOCArODgzLDI4IEBACiAgICAgUE1fc2VncmVhZCgmc3JlZ3MpOwogICAgIERTQmFzZUFkZHIgPSBEUE1JX2dldFNlbGVjdG9yQmFzZShzcmVncy5kcyk7CiAgICAgaWYgKChiYXNlIDwgMHgxMDAwMDApICYmIChEU0Jhc2VBZGRyID09IDApKSB7Ci0gICAgICAgIC8qIERTIGlzIHplcm8gYmFzZWQsIHNvIHdlIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIGZpcnN0IDFNYiBvZgotICAgICAgICAgKiBzeXN0ZW0gbWVtb3J5IChsaWtlIHVuZGVyIERPUzRHVykuCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gKHZvaWQqKWJhc2U7Ci0gICAgICAgIH0KKwkvKiBEUyBpcyB6ZXJvIGJhc2VkLCBzbyB3ZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBmaXJzdCAxTWIgb2YKKwkgKiBzeXN0ZW0gbWVtb3J5IChsaWtlIHVuZGVyIERPUzRHVykuCisJICovCisJcmV0dXJuICh2b2lkKiliYXNlOworCX0KIAogICAgIC8qIE1hcCB0aGUgbWVtb3J5IHRvIGEgbGluZWFyIGFkZHJlc3MgdXNpbmcgRFBNSSBmdW5jdGlvbiAweDgwMCAqLwogICAgIGlmICgobGluQWRkciA9IERQTUlfbWFwUGh5c2ljYWxUb0xpbmVhcihiYXNlLGxpbWl0KSkgPT0gMCkgewotICAgICAgICBpZiAoYmFzZSA+PSAweDEwMDAwMCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAvKiBJZiB0aGUgbGluZWFyIGFkZHJlc3MgbWFwcGluZyBmYWlscyBidXQgd2UgYXJlIHRyeWluZyB0bwotICAgICAgICAgKiBtYXAgYW4gYXJlYSBpbiB0aGUgZmlyc3QgMU1iIG9mIHN5c3RlbSBtZW1vcnksIHRoZW4gd2UgbXVzdAotICAgICAgICAgKiBiZSBydW5uaW5nIHVuZGVyIGEgV2luZG93cyBvciBPUy8yIERPUyBib3guIFVuZGVyIHRoZXNlCi0gICAgICAgICAqIGVudmlyb25tZW50cyB3ZSBjYW4gdXNlIHRoZSBzZWdtZW50IHdyYXAgYXJvdW5kIGFzIGEgZmFsbGJhY2sKLSAgICAgICAgICogbWVhc3VyZSwgYXMgdGhpcyBkb2VzIHdvcmsgcHJvcGVybHkuCi0gICAgICAgICAqLwotICAgICAgICBsaW5BZGRyID0gYmFzZTsKLSAgICAgICAgfQorCWlmIChiYXNlID49IDB4MTAwMDAwKQorCSAgICByZXR1cm4gTlVMTDsKKwkvKiBJZiB0aGUgbGluZWFyIGFkZHJlc3MgbWFwcGluZyBmYWlscyBidXQgd2UgYXJlIHRyeWluZyB0bworCSAqIG1hcCBhbiBhcmVhIGluIHRoZSBmaXJzdCAxTWIgb2Ygc3lzdGVtIG1lbW9yeSwgdGhlbiB3ZSBtdXN0CisJICogYmUgcnVubmluZyB1bmRlciBhIFdpbmRvd3Mgb3IgT1MvMiBET1MgYm94LiBVbmRlciB0aGVzZQorCSAqIGVudmlyb25tZW50cyB3ZSBjYW4gdXNlIHRoZSBzZWdtZW50IHdyYXAgYXJvdW5kIGFzIGEgZmFsbGJhY2sKKwkgKiBtZWFzdXJlLCBhcyB0aGlzIGRvZXMgd29yayBwcm9wZXJseS4KKwkgKi8KKwlsaW5BZGRyID0gYmFzZTsKKwl9CiAKICAgICAvKiBOb3cgZXhwYW5kIHRoZSBkZWZhdWx0IERTIHNlbGVjdG9yIHRvIDRHYiBzbyB3ZSBjYW4gYWNjZXNzIGl0ICovCiAgICAgaWYgKCFEUE1JX3NldFNlbGVjdG9yTGltaXQoc3JlZ3MuZHMsMHhGRkZGRkZGRlVMKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAKICAgICAvKiBGaW5hbGx5IGVuYWJsZSBjYWNoaW5nIGZvciB0aGUgcGFnZSB0YWJsZXMgdGhhdCB3ZSBqdXN0IG1hcHBlZCBpbiwKICAgICAgKiBzaW5jZSBET1M0R1cgYW5kIFBNT0RFL1cgY3JlYXRlIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgd2l0aG91dApAQCAtOTE2LDM0ICs5MTYsMzQgQEAKICAgICAgKiBjYWNoaW5nKSBzbyB0aGF0IE1NSU8gcmVnaXN0ZXIgcmVnaW9ucyBkbyBub3Qgc2NyZXcgdXAuCiAgICAgICovCiAgICAgaWYgKGlzQ2FjaGVkKSB7Ci0gICAgICAgIGlmICgoUERCID0gX1BNX2dldFBEQigpKSAhPSAwICYmIERTQmFzZUFkZHIgPT0gMCkgewotICAgICAgICAgICAgaW50ICAgICBzdGFydFBEQixlbmRQREIsaVBEQixzdGFydFBhZ2UsZW5kUGFnZSxzdGFydCxlbmQsaVBhZ2U7Ci0gICAgICAgICAgICB1bG9uZyAgIHBhZ2VUYWJsZSwqcFBhZ2VUYWJsZTsKLSAgICAgICAgICAgIGlmICghcFBEQikgewotICAgICAgICAgICAgICAgIGlmIChQREIgPj0gMHgxMDAwMDApCi0gICAgICAgICAgICAgICAgICAgIHBQREIgPSAodWxvbmcqKURQTUlfbWFwUGh5c2ljYWxUb0xpbmVhcihQREIsMHhGRkYpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcFBEQiA9ICh1bG9uZyopUERCOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwUERCKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRQREIgPSAobGluQWRkciA+PiAyMikgJiAweDNGRjsKLSAgICAgICAgICAgICAgICBzdGFydFBhZ2UgPSAobGluQWRkciA+PiAxMikgJiAweDNGRjsKLSAgICAgICAgICAgICAgICBlbmRQREIgPSAoKGxpbkFkZHIrbGltaXQpID4+IDIyKSAmIDB4M0ZGOwotICAgICAgICAgICAgICAgIGVuZFBhZ2UgPSAoKGxpbkFkZHIrbGltaXQpID4+IDEyKSAmIDB4M0ZGOwotICAgICAgICAgICAgICAgIGZvciAoaVBEQiA9IHN0YXJ0UERCOyBpUERCIDw9IGVuZFBEQjsgaVBEQisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhZ2VUYWJsZSA9IHBQREJbaVBEQl0gJiB+MHhGRkY7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYWdlVGFibGUgPj0gMHgxMDAwMDApCi0gICAgICAgICAgICAgICAgICAgICAgICBwUGFnZVRhYmxlID0gKHVsb25nKilEUE1JX21hcFBoeXNpY2FsVG9MaW5lYXIocGFnZVRhYmxlLDB4RkZGKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcFBhZ2VUYWJsZSA9ICh1bG9uZyopcGFnZVRhYmxlOwotICAgICAgICAgICAgICAgICAgICBzdGFydCA9IChpUERCID09IHN0YXJ0UERCKSA/IHN0YXJ0UGFnZSA6IDA7Ci0gICAgICAgICAgICAgICAgICAgIGVuZCA9IChpUERCID09IGVuZFBEQikgPyBlbmRQYWdlIDogMHgzRkY7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaVBhZ2UgPSBzdGFydDsgaVBhZ2UgPD0gZW5kOyBpUGFnZSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgcFBhZ2VUYWJsZVtpUGFnZV0gJj0gfjB4MTg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoKFBEQiA9IF9QTV9nZXRQREIoKSkgIT0gMCAmJiBEU0Jhc2VBZGRyID09IDApIHsKKwkgICAgaW50ICAgICBzdGFydFBEQixlbmRQREIsaVBEQixzdGFydFBhZ2UsZW5kUGFnZSxzdGFydCxlbmQsaVBhZ2U7CisJICAgIHVsb25nICAgcGFnZVRhYmxlLCpwUGFnZVRhYmxlOworCSAgICBpZiAoIXBQREIpIHsKKwkJaWYgKFBEQiA+PSAweDEwMDAwMCkKKwkJICAgIHBQREIgPSAodWxvbmcqKURQTUlfbWFwUGh5c2ljYWxUb0xpbmVhcihQREIsMHhGRkYpOworCQllbHNlCisJCSAgICBwUERCID0gKHVsb25nKilQREI7CisJCX0KKwkgICAgaWYgKHBQREIpIHsKKwkJc3RhcnRQREIgPSAobGluQWRkciA+PiAyMikgJiAweDNGRjsKKwkJc3RhcnRQYWdlID0gKGxpbkFkZHIgPj4gMTIpICYgMHgzRkY7CisJCWVuZFBEQiA9ICgobGluQWRkcitsaW1pdCkgPj4gMjIpICYgMHgzRkY7CisJCWVuZFBhZ2UgPSAoKGxpbkFkZHIrbGltaXQpID4+IDEyKSAmIDB4M0ZGOworCQlmb3IgKGlQREIgPSBzdGFydFBEQjsgaVBEQiA8PSBlbmRQREI7IGlQREIrKykgeworCQkgICAgcGFnZVRhYmxlID0gcFBEQltpUERCXSAmIH4weEZGRjsKKwkJICAgIGlmIChwYWdlVGFibGUgPj0gMHgxMDAwMDApCisJCQlwUGFnZVRhYmxlID0gKHVsb25nKilEUE1JX21hcFBoeXNpY2FsVG9MaW5lYXIocGFnZVRhYmxlLDB4RkZGKTsKKwkJICAgIGVsc2UKKwkJCXBQYWdlVGFibGUgPSAodWxvbmcqKXBhZ2VUYWJsZTsKKwkJICAgIHN0YXJ0ID0gKGlQREIgPT0gc3RhcnRQREIpID8gc3RhcnRQYWdlIDogMDsKKwkJICAgIGVuZCA9IChpUERCID09IGVuZFBEQikgPyBlbmRQYWdlIDogMHgzRkY7CisJCSAgICBmb3IgKGlQYWdlID0gc3RhcnQ7IGlQYWdlIDw9IGVuZDsgaVBhZ2UrKykKKwkJCXBQYWdlVGFibGVbaVBhZ2VdICY9IH4weDE4OworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CiAKICAgICAvKiBOb3cgcmV0dXJuIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBpbnRvIHRoZSBkZWZhdWx0IERTICovCiAgICAgcmV0dXJuICh2b2lkKikobGluQWRkciAtIERTQmFzZUFkZHIpOwpAQCAtOTcxLDEwICs5NzEsMTAgQEAKICAgICB1aW50ICAgIG9sZFNlZyxvbGRPZmY7CiAKICAgICBpZiAoIWNyUHRyKSB7Ci0gICAgICAgIC8qIEFsbG9jYXRlIGFuZCBjb3B5IHRoZSBtZW1vcnkgYmxvY2sgb25seSBvbmNlICovCi0gICAgICAgIGNyUHRyID0gUE1fYWxsb2NSZWFsU2VnKHNpemVvZihpbnQ2QUhhbmRsZXIpLCAmY3JSU2VnLCAmY3JST2ZmKTsKLSAgICAgICAgbWVtY3B5KGNyUHRyLGludDZBSGFuZGxlcixzaXplb2YoaW50NkFIYW5kbGVyKSk7Ci0gICAgICAgIH0KKwkvKiBBbGxvY2F0ZSBhbmQgY29weSB0aGUgbWVtb3J5IGJsb2NrIG9ubHkgb25jZSAqLworCWNyUHRyID0gUE1fYWxsb2NSZWFsU2VnKHNpemVvZihpbnQ2QUhhbmRsZXIpLCAmY3JSU2VnLCAmY3JST2ZmKTsKKwltZW1jcHkoY3JQdHIsaW50NkFIYW5kbGVyLHNpemVvZihpbnQ2QUhhbmRsZXIpKTsKKwl9CiAgICAgUE1fc2V0V29yZChjclB0cixvZmYpOyAgICAgICAgICAgICAgLyogUGx1ZyBpbiBhZGRyZXNzIHRvIGNhbGwgICovCiAgICAgUE1fc2V0V29yZChjclB0cisyLHNlZyk7CiAgICAgcCA9IFBNX21hcFJlYWxQb2ludGVyKDAsMHg2QSAqIDQpOwpAQCAtMTAwMyw4ICsxMDAzLDggQEAKIAogdWxvbmcgUE1BUEkgUE1fZ2V0UGh5c2ljYWxBZGRyKHZvaWQgKnApCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgZmluZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBhIGxpbmVhcgotICAgIC8vICAgICAgIGFkZHJlc3MuCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgZmluZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBhIGxpbmVhciAqLworICAgIC8qICAgICAgIGFkZHJlc3MuICovCiAgICAgKHZvaWQpcDsKICAgICByZXR1cm4gMHhGRkZGRkZGRlVMOwogfQpAQCAtMTAyMCw3ICsxMDIwLDcgQEAKICAgICBzdGF0aWMgdWNoYXIgKnplcm9QdHIgPSBOVUxMOwogCiAgICAgaWYgKCF6ZXJvUHRyKQotICAgICAgICB6ZXJvUHRyID0gUE1fbWFwUGh5c2ljYWxBZGRyKDAsMHhGRkZGRix0cnVlKTsKKwl6ZXJvUHRyID0gUE1fbWFwUGh5c2ljYWxBZGRyKDAsMHhGRkZGRix0cnVlKTsKICAgICByZXR1cm4gKHZvaWQqKSh6ZXJvUHRyICsgTUtfUEhZUyhyX3NlZyxyX29mZikpOwogfQogCkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogICAgIHIueC5ieCA9IChzaXplICsgMHhGKSA+PiA0OyAgICAgLyogbnVtYmVyIG9mIHBhcmFncmFwaHMgICAgICAgICAgICAgKi8KICAgICBQTV9pbnQzODYoMHgzMSwgJnIsICZyKTsKICAgICBpZiAoci54LmNmbGFnKQotICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogRFBNSSBjYWxsIGZhaWxlZCAgICAgICAgICAgICAgICAgKi8KKwlyZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogRFBNSSBjYWxsIGZhaWxlZCAgICAgICAgICAgICAgICAgKi8KICAgICAqcl9zZWcgPSByLnguYXg7ICAgICAgICAgICAgICAgIC8qIFJlYWwgbW9kZSBzZWdtZW50ICAgICAgICAgICAgICAgICovCiAgICAgKnJfb2ZmID0gMDsKICAgICBwID0gUE1fbWFwUmVhbFBvaW50ZXIoKnJfc2VnLCpyX29mZik7CkBAIC0xMDYzLDkgKzEwNjMsOSBAQAogICAgIFBNU1JFR1MgICAgIHNyOwogCiAgICAgaWYgKGludG5vID09IDB4MTAgJiYgRFBNSV9pbnQxMCkgewotICAgICAgICBpZiAoRFBNSV9pbnQxMChyZWdzKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCWlmIChEUE1JX2ludDEwKHJlZ3MpKQorCSAgICByZXR1cm47CisJfQogICAgIFBNX3NlZ3JlYWQoJnNyKTsKICAgICByLnguYXggPSAweDMwMDsgICAgICAgICAgICAgICAgIC8qIERQTUkgaXNzdWUgcmVhbCBpbnRlcnJ1cHQgICAgKi8KICAgICByLmguYmwgPSBpbnRubzsKQEAgLTEwODYsOCArMTA4Niw4IEBACiAgICAgbWVtc2V0KCZybXJlZ3MsIDAsIHNpemVvZihybXJlZ3MpKTsKICAgICBJTihlYXgpOyBJTihlYngpOyBJTihlY3gpOyBJTihlZHgpOyBJTihlc2kpOyBJTihlZGkpOwogCi0vLyBUaGVzZSByZWFsIG1vZGUgaW50cyBtYXkgY2F1c2UgY3Jhc2hlcy4KLS8vQU06ICAgRFBNSV9pbnQ4NihpbnRubywmcm1yZWdzKTsgICAgICAvKiBEUE1JIGlzc3VlIHJlYWwgaW50ZXJydXB0ICAgICovCisvKiBUaGVzZSByZWFsIG1vZGUgaW50cyBtYXkgY2F1c2UgY3Jhc2hlcy4gKi8KKy8qQU06ICAgRFBNSV9pbnQ4NihpbnRubywmcm1yZWdzKTsgICAgICAvIyMjKiBEUE1JIGlzc3VlIHJlYWwgaW50ZXJydXB0ICAgICovCiAKICAgICBPVVQoZWF4KTsgT1VUKGVieCk7IE9VVChlY3gpOyBPVVQoZWR4KTsgT1VUKGVzaSk7IE9VVChlZGkpOwogICAgIG91dC0+eC5jZmxhZyA9IHJtcmVncy5mbGFncyAmIDB4MTsKQEAgLTExMDQsNyArMTEwNCw3IEBACiAgICAgcm1yZWdzLmVzID0gc3JlZ3MtPmVzOwogICAgIHJtcmVncy5kcyA9IHNyZWdzLT5kczsKIAotLy9BTTogICBEUE1JX2ludDg2KGludG5vLCZybXJlZ3MpOyAgICAgIC8qIERQTUkgaXNzdWUgcmVhbCBpbnRlcnJ1cHQgICAgKi8KKy8qQU06ICAgRFBNSV9pbnQ4NihpbnRubywmcm1yZWdzKTsgICAgICAvIyMjKiBEUE1JIGlzc3VlIHJlYWwgaW50ZXJydXB0ICAgICovCiAKICAgICBPVVQoZWF4KTsgT1VUKGVieCk7IE9VVChlY3gpOyBPVVQoZWR4KTsgT1VUKGVzaSk7IE9VVChlZGkpOwogICAgIHNyZWdzLT5lcyA9IHJtcmVncy5lczsKQEAgLTExMTgsMTcgKzExMTgsMTcgQEAKICNwcmFnbWEgcGFjaygxKQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgIHVpbnQgICAgTGFyZ2VzdEJsb2NrQXZhaWw7Ci0gICAgICAgIHVpbnQgICAgTWF4VW5sb2NrZWRQYWdlOwotICAgICAgICB1aW50ICAgIExhcmdlc3RMb2NrYWJsZVBhZ2U7Ci0gICAgICAgIHVpbnQgICAgTGluQWRkclNwYWNlOwotICAgICAgICB1aW50ICAgIE51bUZyZWVQYWdlc0F2YWlsOwotICAgICAgICB1aW50ICAgIE51bVBoeXNpY2FsUGFnZXNGcmVlOwotICAgICAgICB1aW50ICAgIFRvdGFsUGh5c2ljYWxQYWdlczsKLSAgICAgICAgdWludCAgICBGcmVlTGluQWRkclNwYWNlOwotICAgICAgICB1aW50ICAgIFNpemVPZlBhZ2VGaWxlOwotICAgICAgICB1aW50ICAgIHJlc1szXTsKLSAgICAgICAgfSBNZW1JbmZvOworCXVpbnQgICAgTGFyZ2VzdEJsb2NrQXZhaWw7CisJdWludCAgICBNYXhVbmxvY2tlZFBhZ2U7CisJdWludCAgICBMYXJnZXN0TG9ja2FibGVQYWdlOworCXVpbnQgICAgTGluQWRkclNwYWNlOworCXVpbnQgICAgTnVtRnJlZVBhZ2VzQXZhaWw7CisJdWludCAgICBOdW1QaHlzaWNhbFBhZ2VzRnJlZTsKKwl1aW50ICAgIFRvdGFsUGh5c2ljYWxQYWdlczsKKwl1aW50ICAgIEZyZWVMaW5BZGRyU3BhY2U7CisJdWludCAgICBTaXplT2ZQYWdlRmlsZTsKKwl1aW50ICAgIHJlc1szXTsKKwl9IE1lbUluZm87CiAKICNwcmFnbWEgcGFjaygpCiAKQEAgLTExNDYsNyArMTE0Niw3IEBACiAgICAgKnBoeXNpY2FsID0gbWVtSW5mby5OdW1QaHlzaWNhbFBhZ2VzRnJlZSAqIDQwOTY7CiAgICAgKnRvdGFsID0gbWVtSW5mby5MYXJnZXN0QmxvY2tBdmFpbDsKICAgICBpZiAoKnRvdGFsIDwgKnBoeXNpY2FsKQotICAgICAgICAqcGh5c2ljYWwgPSAqdG90YWw7CisJKnBoeXNpY2FsID0gKnRvdGFsOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTE1Niw3ICsxMTU2LDcgQEAKIHVpbnQgUE1BUEkgUE1fZ2V0RmlsZUF0dHIoCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTExNjksNyArMTE2OSw3IEBACiAgICAgaWJvb2wgZ21UaW1lLAogICAgIFBNX3RpbWUgKnRpbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMTgyLDYgKzExODIsNiBAQAogICAgIGlib29sIGdtVGltZSwKICAgICBQTV90aW1lICp0aW1lKQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIQorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzISAqLwogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3NteC9wbXNteC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc214L3Btc214LmMKaW5kZXggMjU5NmM3Ni4uOThlMzFiYyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc214L3Btc214LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc214L3Btc214LmMKQEAgLTEzNCw0MSArMTM0LDQxIEBACiB2b2lkIFBNQVBJIFBNX3NldFJlYWxUaW1lQ2xvY2tGcmVxdWVuY3koaW50IGZyZXF1ZW5jeSkKIHsKICAgICBzdGF0aWMgc2hvcnQgY29udmVydFtdID0gewotICAgICAgICA4MTkyLAotICAgICAgICA0MDk2LAotICAgICAgICAyMDQ4LAotICAgICAgICAxMDI0LAotICAgICAgICA1MTIsCi0gICAgICAgIDI1NiwKLSAgICAgICAgMTI4LAotICAgICAgICA2NCwKLSAgICAgICAgMzIsCi0gICAgICAgIDE2LAotICAgICAgICA4LAotICAgICAgICA0LAotICAgICAgICAyLAotICAgICAgICAtMSwKLSAgICAgICAgfTsKKwk4MTkyLAorCTQwOTYsCisJMjA0OCwKKwkxMDI0LAorCTUxMiwKKwkyNTYsCisJMTI4LAorCTY0LAorCTMyLAorCTE2LAorCTgsCisJNCwKKwkyLAorCS0xLAorCX07CiAgICAgaW50IGk7CiAKICAgICAvKiBGaXJzdCBjbGVhciBhbnkgcGVuZGluZyBSVEMgdGltZW91dCBpZiBub3QgY2xlYXJlZCAqLwogICAgIF9QTV9yZWFkQ01PUygweDBDKTsKICAgICBpZiAoZnJlcXVlbmN5ID09IDApIHsKLSAgICAgICAgLyogRGlzYWJsZSBSVEMgdGltb3V0ICovCi0gICAgICAgIF9QTV93cml0ZUNNT1MoMHgwQSxfUE1fb2xkQ01PU1JlZ0EpOwotICAgICAgICBfUE1fd3JpdGVDTU9TKDB4MEIsX1BNX29sZENNT1NSZWdCICYgMHgwRik7Ci0gICAgICAgIH0KKwkvKiBEaXNhYmxlIFJUQyB0aW1vdXQgKi8KKwlfUE1fd3JpdGVDTU9TKDB4MEEsX1BNX29sZENNT1NSZWdBKTsKKwlfUE1fd3JpdGVDTU9TKDB4MEIsX1BNX29sZENNT1NSZWdCICYgMHgwRik7CisJfQogICAgIGVsc2UgewotICAgICAgICAvKiBDb252ZXJ0IGZyZXF1ZW5jeSB2YWx1ZSB0byBSVEMgY2xvY2sgaW5kZXhlcyAqLwotICAgICAgICBmb3IgKGkgPSAwOyBjb252ZXJ0W2ldICE9IC0xOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChjb252ZXJ0W2ldID09IGZyZXF1ZW5jeSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKwkvKiBDb252ZXJ0IGZyZXF1ZW5jeSB2YWx1ZSB0byBSVEMgY2xvY2sgaW5kZXhlcyAqLworCWZvciAoaSA9IDA7IGNvbnZlcnRbaV0gIT0gLTE7IGkrKykgeworCSAgICBpZiAoY29udmVydFtpXSA9PSBmcmVxdWVuY3kpCisJCWJyZWFrOworCSAgICB9CiAKLSAgICAgICAgLyogU2V0IFJUQyB0aW1vdXQgdmFsdWUgYW5kIGVuYWJsZSB0aW1lb3V0ICovCi0gICAgICAgIF9QTV93cml0ZUNNT1MoMHgwQSwoX1BNX29sZENNT1NSZWdBICYgMHhGMCkgfCAoaSszKSk7Ci0gICAgICAgIF9QTV93cml0ZUNNT1MoMHgwQiwoX1BNX29sZENNT1NSZWdCICYgMHgwRikgfCAweDQwKTsKLSAgICAgICAgfQorCS8qIFNldCBSVEMgdGltb3V0IHZhbHVlIGFuZCBlbmFibGUgdGltZW91dCAqLworCV9QTV93cml0ZUNNT1MoMHgwQSwoX1BNX29sZENNT1NSZWdBICYgMHhGMCkgfCAoaSszKSk7CisJX1BNX3dyaXRlQ01PUygweDBCLChfUE1fb2xkQ01PU1JlZ0IgJiAweDBGKSB8IDB4NDApOworCX0KIH0KIAogc3RhdGljIHZvaWQgUE1BUEkgbG9ja1BNSGFuZGxlcnModm9pZCkKQEAgLTE3NiwyMiArMTc2LDIyIEBACiAgICAgc3RhdGljIGludCAgICAgIGxvY2tlZCA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIHN0YXQgPSAwOwogICAgIFBNX2xvY2tIYW5kbGUgICBsaDsKLSAgICAKKwogICAgIC8qIExvY2sgYWxsIG9mIHRoZSBjb2RlIGFuZCBkYXRhIHVzZWQgYnkgb3VyIHByb3RlY3RlZCBtb2RlIGludGVycnVwdAogICAgICAqIGhhbmRsaW5nIHJvdXRpbmVzLCBzbyB0aGF0IGl0IHdpbGwgY29udGludWUgdG8gd29yayBjb3JyZWN0bHkKICAgICAgKiB1bmRlciByZWFsIG1vZGUuCiAgICAgICovCiAgICAgaWYgKCFsb2NrZWQpIHsKLSAgICAgICAgUE1fc2F2ZURTKCk7Ci0gICAgICAgIHN0YXQgID0gIVBNX2xvY2tEYXRhUGFnZXMoJmdsb2JhbERhdGFTdGFydC0yMDQ4LDQwOTYsJmxoKTsKLSAgICAgICAgc3RhdCB8PSAhUE1fbG9ja0RhdGFQYWdlcygmX1BNX3Btc214RGF0YVN0YXJ0LChpbnQpJl9QTV9wbXNteERhdGFFbmQgLSAoaW50KSZfUE1fcG1zbXhEYXRhU3RhcnQsJmxoKTsKLSAgICAgICAgc3RhdCB8PSAhUE1fbG9ja0NvZGVQYWdlcygoX19jb2RlUHRyKV9QTV9wbXNteENvZGVTdGFydCwoaW50KV9QTV9wbXNteENvZGVFbmQtKGludClfUE1fcG1zbXhDb2RlU3RhcnQsJmxoKTsKLSAgICAgICAgaWYgKHN0YXQpIHsKLSAgICAgICAgICAgIHByaW50ZigiUGFnZSBsb2NraW5nIHNlcnZpY2VzIGZhaWxlZCAtIGludGVycnVwdCBoYW5kbGluZyBub3Qgc2FmZSFcbiIpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgbG9ja2VkID0gMTsKLSAgICAgICAgfQorCVBNX3NhdmVEUygpOworCXN0YXQgID0gIVBNX2xvY2tEYXRhUGFnZXMoJmdsb2JhbERhdGFTdGFydC0yMDQ4LDQwOTYsJmxoKTsKKwlzdGF0IHw9ICFQTV9sb2NrRGF0YVBhZ2VzKCZfUE1fcG1zbXhEYXRhU3RhcnQsKGludCkmX1BNX3Btc214RGF0YUVuZCAtIChpbnQpJl9QTV9wbXNteERhdGFTdGFydCwmbGgpOworCXN0YXQgfD0gIVBNX2xvY2tDb2RlUGFnZXMoKF9fY29kZVB0cilfUE1fcG1zbXhDb2RlU3RhcnQsKGludClfUE1fcG1zbXhDb2RlRW5kLShpbnQpX1BNX3Btc214Q29kZVN0YXJ0LCZsaCk7CisJaWYgKHN0YXQpIHsKKwkgICAgcHJpbnRmKCJQYWdlIGxvY2tpbmcgc2VydmljZXMgZmFpbGVkIC0gaW50ZXJydXB0IGhhbmRsaW5nIG5vdCBzYWZlIVxuIik7CisJICAgIGV4aXQoMSk7CisJICAgIH0KKwlsb2NrZWQgPSAxOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9nZXRQTXZlY3QoaW50IGludG5vLCBQTUZBUlBUUiAqaXNyKQpAQCAtMjQ1LDcgKzI0NSw3IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVNb3VzZUhhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX21vdXNlSGFuZGxlcikKLSAgICAgICAgX1BNX21vdXNlSGFuZGxlciA9IE5VTEw7CisJX1BNX21vdXNlSGFuZGxlciA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGdldElTUihpbnQgaW50bm8sIFBNRkFSUFRSICpwbWlzciwgbG9uZyAqcmVhbGlzcikKQEAgLTI3NCw5ICsyNzQsOSBAQAogdm9pZCBQTUFQSSBQTV9yZXN0b3JlVGltZXJIYW5kbGVyKHZvaWQpCiB7CiAgICAgaWYgKF9QTV90aW1lckhhbmRsZXIpIHsKLSAgICAgICAgcmVzdG9yZUlTUihQTV9JUlEwLCBfUE1fcHJldlRpbWVyLCBfUE1fcHJldlJlYWxUaW1lcik7Ci0gICAgICAgIF9QTV90aW1lckhhbmRsZXIgPSBOVUxMOwotICAgICAgICB9CisJcmVzdG9yZUlTUihQTV9JUlEwLCBfUE1fcHJldlRpbWVyLCBfUE1fcHJldlJlYWxUaW1lcik7CisJX1BNX3RpbWVySGFuZGxlciA9IE5VTEw7CisJfQogfQogCiBpYm9vbCBQTUFQSSBQTV9zZXRSZWFsVGltZUNsb2NrSGFuZGxlcihQTV9pbnRIYW5kbGVyIHRoLGludCBmcmVxdWVuY3kpCkBAIC0zMDIsMTUgKzMwMiwxNSBAQAogdm9pZCBQTUFQSSBQTV9yZXN0b3JlUmVhbFRpbWVDbG9ja0hhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX3J0Y0hhbmRsZXIpIHsKLSAgICAgICAgLyogUmVzdG9yZSBDTU9TIHJlZ2lzdGVycyBhbmQgbWFzayBSVEMgY2xvY2sgKi8KLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBBLF9QTV9vbGRDTU9TUmVnQSk7Ci0gICAgICAgIF9QTV93cml0ZUNNT1MoMHgwQixfUE1fb2xkQ01PU1JlZ0IpOwotICAgICAgICBQTV9vdXRwYigweEExLChQTV9pbnBiKDB4QTEpICYgMHhGRSkgfCAoX1BNX29sZFJUQ1BJQzIgJiB+MHhGRSkpOworCS8qIFJlc3RvcmUgQ01PUyByZWdpc3RlcnMgYW5kIG1hc2sgUlRDIGNsb2NrICovCisJX1BNX3dyaXRlQ01PUygweDBBLF9QTV9vbGRDTU9TUmVnQSk7CisJX1BNX3dyaXRlQ01PUygweDBCLF9QTV9vbGRDTU9TUmVnQik7CisJUE1fb3V0cGIoMHhBMSwoUE1faW5wYigweEExKSAmIDB4RkUpIHwgKF9QTV9vbGRSVENQSUMyICYgfjB4RkUpKTsKIAotICAgICAgICAvKiBSZXN0b3JlIHRoZSBpbnRlcnJ1cHQgdmVjdG9yICovCi0gICAgICAgIHJlc3RvcmVJU1IoMHg3MCwgX1BNX3ByZXZSVEMsIF9QTV9wcmV2UmVhbFJUQyk7Ci0gICAgICAgIF9QTV9ydGNIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCS8qIFJlc3RvcmUgdGhlIGludGVycnVwdCB2ZWN0b3IgKi8KKwlyZXN0b3JlSVNSKDB4NzAsIF9QTV9wcmV2UlRDLCBfUE1fcHJldlJlYWxSVEMpOworCV9QTV9ydGNIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIHZvaWQgUE1BUEkgUE1fc2V0S2V5SGFuZGxlcihQTV9pbnRIYW5kbGVyIGtoKQpAQCAtMzIzLDkgKzMyMyw5IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVLZXlIYW5kbGVyKHZvaWQpCiB7CiAgICAgaWYgKF9QTV9rZXlIYW5kbGVyKSB7Ci0gICAgICAgIHJlc3RvcmVJU1IoUE1fSVJRMSwgX1BNX3ByZXZLZXksIF9QTV9wcmV2UmVhbEtleSk7Ci0gICAgICAgIF9QTV9rZXlIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgfQorCXJlc3RvcmVJU1IoUE1fSVJRMSwgX1BNX3ByZXZLZXksIF9QTV9wcmV2UmVhbEtleSk7CisJX1BNX2tleUhhbmRsZXIgPSBOVUxMOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9zZXRLZXkxNUhhbmRsZXIoUE1fa2V5MTVIYW5kbGVyIGtoKQpAQCAtMzM4LDkgKzMzOCw5IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVLZXkxNUhhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX2tleTE1SGFuZGxlcikgewotICAgICAgICByZXN0b3JlSVNSKDB4MTUsIF9QTV9wcmV2S2V5MTUsIF9QTV9wcmV2UmVhbEtleTE1KTsKLSAgICAgICAgX1BNX2tleTE1SGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIH0KKwlyZXN0b3JlSVNSKDB4MTUsIF9QTV9wcmV2S2V5MTUsIF9QTV9wcmV2UmVhbEtleTE1KTsKKwlfUE1fa2V5MTVIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIC8qIFJlYWwgbW9kZSBDdHJsLUMgYW5kIEN0cmwtQnJlYWsgaGFuZGxlci4gVGhpcyBoYW5kbGVyIHNpbXBseSBzZXRzIGEKQEAgLTM4NSwxMiArMzg1LDEyIEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVCcmVha0hhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX3ByZXZCcmVhay5zZWwpIHsKLSAgICAgICAgcmVzdG9yZUlTUigweDFCLCBfUE1fcHJldkJyZWFrLCBwcmV2UmVhbEJyZWFrKTsKLSAgICAgICAgcmVzdG9yZUlTUigweDIzLCBfUE1fcHJldkN0cmxDLCBwcmV2UmVhbEN0cmxDKTsKLSAgICAgICAgX1BNX3ByZXZCcmVhay5zZWwgPSAwOwotICAgICAgICBfUE1fYnJlYWtIYW5kbGVyID0gTlVMTDsKLSAgICAgICAgUE1fZnJlZVJlYWxTZWcoX1BNX2N0cmxCUHRyKTsKLSAgICAgICAgfQorCXJlc3RvcmVJU1IoMHgxQiwgX1BNX3ByZXZCcmVhaywgcHJldlJlYWxCcmVhayk7CisJcmVzdG9yZUlTUigweDIzLCBfUE1fcHJldkN0cmxDLCBwcmV2UmVhbEN0cmxDKTsKKwlfUE1fcHJldkJyZWFrLnNlbCA9IDA7CisJX1BNX2JyZWFrSGFuZGxlciA9IE5VTEw7CisJUE1fZnJlZVJlYWxTZWcoX1BNX2N0cmxCUHRyKTsKKwl9CiB9CiAKIC8qIFJlYWwgbW9kZSBDcml0aWNhbCBFcnJvciBoYW5kbGVyLiBUaGlzIGhhbmRsZXIgc2ltcGx5IHNhdmVzIHRoZSBBWCBhbmQKQEAgLTQzMiwxMSArNDMyLDExIEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVDcml0aWNhbEhhbmRsZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX3ByZXZDcml0aWNhbC5zZWwpIHsKLSAgICAgICAgcmVzdG9yZUlTUigweDI0LCBfUE1fcHJldkNyaXRpY2FsLCBwcmV2UmVhbENyaXRpY2FsKTsKLSAgICAgICAgUE1fZnJlZVJlYWxTZWcoX1BNX2NyaXRQdHIpOwotICAgICAgICBfUE1fcHJldkNyaXRpY2FsLnNlbCA9IDA7Ci0gICAgICAgIF9QTV9jcml0SGFuZGxlciA9IE5VTEw7Ci0gICAgICAgIH0KKwlyZXN0b3JlSVNSKDB4MjQsIF9QTV9wcmV2Q3JpdGljYWwsIHByZXZSZWFsQ3JpdGljYWwpOworCVBNX2ZyZWVSZWFsU2VnKF9QTV9jcml0UHRyKTsKKwlfUE1fcHJldkNyaXRpY2FsLnNlbCA9IDA7CisJX1BNX2NyaXRIYW5kbGVyID0gTlVMTDsKKwl9CiB9CiAKIGludCBQTUFQSSBQTV9sb2NrRGF0YVBhZ2VzKHZvaWQgKnAsdWludCBsZW4sUE1fbG9ja0hhbmRsZSAqbGgpCkBAIC00NTcsOSArNDU3LDkgQEAKIHsKICAgICBQTVNSRUdTIHNyZWdzOwogICAgIFBNX3NlZ3JlYWQoJnNyZWdzKTsKLS8vQU06IGNhdXNlcyBtaW5vciBnbGl0Y2ggd2l0aAotLy9BTTogb2xkZXIgdmVyc2lvbnMgcG1FYXN5IHdoaWNoIGRvbid0IGFsbG93IERQTUkgMDYgb24KLS8vQU06IENvZGUgc2VsZWN0b3IgMHgwQyAtLSBhc3N1bWUgYmFzZSBpcyAwIHdoaWNoIGl0IHNob3VsZCBiZS4KKy8qQU06IGNhdXNlcyBtaW5vciBnbGl0Y2ggd2l0aCAqLworLypBTTogb2xkZXIgdmVyc2lvbnMgcG1FYXN5IHdoaWNoIGRvbid0IGFsbG93IERQTUkgMDYgb24gKi8KKy8qQU06IENvZGUgc2VsZWN0b3IgMHgwQyAtLSBhc3N1bWUgYmFzZSBpcyAwIHdoaWNoIGl0IHNob3VsZCBiZS4gKi8KICAgICByZXR1cm4gRFBNSV9sb2NrTGluZWFyUGFnZXMoKHVpbnQpcCxsZW4pOwogfQogCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9zbXgvenRpbWVyLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9zbXgvenRpbWVyLmMKaW5kZXggMDFlMTgwYi4uNzk0MTE5MiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc214L3p0aW1lci5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3NteC96dGltZXIuYwpAQCAtMTEwLDYgKzExMCw2IEBACiB1bG9uZyBfX1VMWkVsYXBzZWRUaW1lKHVsb25nIHN0YXJ0LHVsb25nIGZpbmlzaCkKIHsKICAgICBpZiAoZmluaXNoIDwgc3RhcnQpCi0gICAgICAgIGZpbmlzaCArPSB4dGlja3NfcGVyX3NlY29uZCgpICogMzYwMCAqMjQ7ICAgICAgIC8qIE51bWJlciBvZiB0aWNrcyBpbiAyNCBob3VycyAgICAgICovCisJZmluaXNoICs9IHh0aWNrc19wZXJfc2Vjb25kKCkgKiAzNjAwICoyNDsgICAgICAgLyogTnVtYmVyIG9mIHRpY2tzIGluIDI0IGhvdXJzICAgICAgKi8KICAgICByZXR1cm4gZmluaXNoIC0gc3RhcnQ7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9zdHViL2NwdWluZm8uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3N0dWIvY3B1aW5mby5jCmluZGV4IDI4MzNhNzIuLjA2MTVlOTAgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3N0dWIvY3B1aW5mby5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3N0dWIvY3B1aW5mby5jCkBAIC0zNyw4ICszNyw4IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBTZXRNYXhUaHJlYWRQcmlvcml0eSh2b2lkKQogewotICAgIC8vIFRPRE86IElmIHlvdSBoYXZlIHRocmVhZCBwcmlvcml0aWVzLCBpbmNyZWFzZSBpdCB0byBtYXhpbXVtIGZvciB0aGUKLSAgICAvLyAgICAgICB0aHJlYWQgZm9yIHRpbWluZyB0aGUgQ1BVIGZyZXF1ZW5jeS4KKyAgICAvKiBUT0RPOiBJZiB5b3UgaGF2ZSB0aHJlYWQgcHJpb3JpdGllcywgaW5jcmVhc2UgaXQgdG8gbWF4aW11bSBmb3IgdGhlICovCisgICAgLyogICAgICAgdGhyZWFkIGZvciB0aW1pbmcgdGhlIENQVSBmcmVxdWVuY3kuICovCiAgICAgcmV0dXJuIG9sZFByaW9yaXR5OwogfQogCkBAIC00OSw3ICs0OSw3IEBACiBzdGF0aWMgdm9pZCBSZXN0b3JlVGhyZWFkUHJpb3JpdHkoCiAgICAgaW50IHByaW9yaXR5KQogewotICAgIC8vIFRPRE86IFJlc3RvcmUgdGhlIG9yaWdpbmFsIHRocmVhZCBwcmlvcml0eSBvbiBleGl0LgorICAgIC8qIFRPRE86IFJlc3RvcmUgdGhlIG9yaWdpbmFsIHRocmVhZCBwcmlvcml0eSBvbiBleGl0LiAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTksOCArNTksOCBAQAogc3RhdGljIHZvaWQgR2V0Q291bnRlckZyZXF1ZW5jeSgKICAgICBDUFVfbGFyZ2VJbnRlZ2VyICpmcmVxKQogewotICAgIC8vIFRPRE86IFJldHVybiB0aGUgZnJlcXVlbmN5IG9mIHRoZSBjb3VudGVyIGluIGhlcmUuIFlvdSBzaG91bGQgdHJ5IHRvCi0gICAgLy8gICAgICAgbm9ybWFsaXNlIHRoaXMgdmFsdWUgdG8gYmUgYXJvdW5kIDEwMCwwMDAgdGlja3MgcGVyIHNlY29uZC4KKyAgICAvKiBUT0RPOiBSZXR1cm4gdGhlIGZyZXF1ZW5jeSBvZiB0aGUgY291bnRlciBpbiBoZXJlLiBZb3Ugc2hvdWxkIHRyeSB0byAqLworICAgIC8qICAgICAgIG5vcm1hbGlzZSB0aGlzIHZhbHVlIHRvIGJlIGFyb3VuZCAxMDAsMDAwIHRpY2tzIHBlciBzZWNvbmQuICovCiAgICAgZnJlcS0+bG93ID0gMDsKICAgICBmcmVxLT5oaWdoID0gMDsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3N0dWIvZXZlbnQuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3N0dWIvZXZlbnQuYwppbmRleCA4ZTgwNWQwLi4yMDRjNDkyIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9zdHViL2V2ZW50LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc3R1Yi9ldmVudC5jCkBAIC01OSw3ICs1OSw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdWxvbmcgX0VWVF9nZXRUaWNrcyh2b2lkKQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzIGZvciB5b3VyIE9TIQorICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzIGZvciB5b3VyIE9TISAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjgsMzYgKzY4LDM2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgX0VWVF9wdW1wTWVzc2FnZXModm9pZCkKIHsKLSAgICAvLyBUT0RPOiBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHJlYWQgYWxsIGtleWJvYXJkIGFuZCBtb3VzZQotICAgIC8vICAgICAgIGV2ZW50cyBmcm9tIHRoZSBPUyBzcGVjaWZpYyBldmVudCBxdWV1ZSwgdHJhbnNsYXRlIHRoZW0gYW5kIHBvc3QKLSAgICAvLyAgICAgICB0aGVtIGludG8gdGhlIFNjaVRlY2ggZXZlbnQgcXVldWUuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHRoaW5ncyB0aGF0IHRoaXMgZnVuY3Rpb24gbXVzdAotICAgIC8vICAgICAgIHRha2UgY2FyZSBvZjoKLSAgICAvLwotICAgIC8vICAxLiBTdXBwb3J0IGZvciBLRVlET1dOLCBLRVlSRVBFQVQgYW5kIEtFWVVQIGlzIHJlcXVpcmVkLgotICAgIC8vCi0gICAgLy8gIDIuIFN1cHBvcnQgZm9yIHJlYWRpbmcgaGFyZHdhcmUgc2NhbiBjb2RlIGFzIHdlbGwgYXMgQVNDSUkKLSAgICAvLyAgICAgdHJhbnNsYXRlZCB2YWx1ZXMgaXMgcmVxdWlyZWQuIEdhbWVzIHVzZSB0aGUgc2NhbiBjb2RlcyByYXRoZXIKLSAgICAvLyAgICAgdGhhbiBBU0NJSSB2YWx1ZXMuIFNjYW4gY29kZXMgZ28gaW50byB0aGUgaGlnaCBvcmRlciBieXRlIG9mIHRoZQotICAgIC8vICAgICBrZXlib2FyZCBtZXNzYWdlIGZpZWxkLgotICAgIC8vCi0gICAgLy8gIDMuIFN1cHBvcnQgZm9yIGF0IGxlYXN0IHJlYWRpbmcgbW91c2UgbW90aW9uIGRhdGEgKG1pY2tleXMpIGZyb20gdGhlCi0gICAgLy8gICAgIG1vdXNlIGlzIHJlcXVpcmVkLiBVc2luZyB0aGUgbWlja2V5IHZhbHVlcywgd2UgY2FuIHRoZW4gdHJhbnNsYXRlCi0gICAgLy8gICAgIHRvIG1vdXNlIGN1cnNvciBjb29yZGluYXRlcyBzY2FsZWQgdG8gdGhlIHJhbmdlIG9mIHRoZSBjdXJyZW50Ci0gICAgLy8gICAgIGdyYXBoaWNzIGRpc3BsYXkgbW9kZS4gTW91c2UgdmFsdWVzIGFyZSBzY2FsZWQgYmFzZWQgb24gdGhlCi0gICAgLy8gICAgIGdsb2JhbCAncmFuZ2VYJyBhbmQgJ3JhbmdlWScuCi0gICAgLy8KLSAgICAvLyAgNC4gU3VwcG9ydCBmb3IgYSB0aW1lc3RhbXAgZm9yIHRoZSBldmVudHMgaXMgcmVxdWlyZWQsIHdoaWNoIGlzCi0gICAgLy8gICAgIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2Ugc29tZSBldmVudCAodXN1YWxseQotICAgIC8vICAgICBzeXN0ZW0gc3RhcnR1cCkuIFRoaXMgaXMgdGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBldmVudCBvY2N1cnJlZAotICAgIC8vICAgICAoaWU6IGF0IGludGVycnVwdCB0aW1lKSBub3Qgd2hlbiBpdCB3YXMgc3R1ZmYgaW50byB0aGUgU2NpVGVjaAotICAgIC8vICAgICBldmVudCBxdWV1ZS4KLSAgICAvLwotICAgIC8vICA1LiBTdXBwb3J0IGZvciBtb3VzZSBkb3VibGUgY2xpY2sgZXZlbnRzLiBJZiB0aGUgT1MgaGFzIGEgbmF0aXZlCi0gICAgLy8gICAgIG1lY2hhbmlzbSB0byBkZXRlcm1pbmUgdGhpcywgaXQgc2hvdWxkIGJlIHVzZWQuIE90aGVyd2lzZSB0aGUKLSAgICAvLyAgICAgdGltZSBzdGFtcCBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgYnkgdGhlIGdlbmVyaWMgZXZlbnQgY29kZQotICAgIC8vICAgICB0byBnZW5lcmF0ZSBkb3VibGUgY2xpY2sgZXZlbnRzLgorICAgIC8qIFRPRE86IFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gcmVhZCBhbGwga2V5Ym9hcmQgYW5kIG1vdXNlICovCisgICAgLyogICAgICAgZXZlbnRzIGZyb20gdGhlIE9TIHNwZWNpZmljIGV2ZW50IHF1ZXVlLCB0cmFuc2xhdGUgdGhlbSBhbmQgcG9zdCAqLworICAgIC8qICAgICAgIHRoZW0gaW50byB0aGUgU2NpVGVjaCBldmVudCBxdWV1ZS4gKi8KKyAgICAvKiAqLworICAgIC8qIE5PVEU6IFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBpbXBvcnRhbnQgdGhpbmdzIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXN0ICovCisgICAgLyogICAgICAgdGFrZSBjYXJlIG9mOiAqLworICAgIC8qICovCisgICAgLyogIDEuIFN1cHBvcnQgZm9yIEtFWURPV04sIEtFWVJFUEVBVCBhbmQgS0VZVVAgaXMgcmVxdWlyZWQuICovCisgICAgLyogKi8KKyAgICAvKiAgMi4gU3VwcG9ydCBmb3IgcmVhZGluZyBoYXJkd2FyZSBzY2FuIGNvZGUgYXMgd2VsbCBhcyBBU0NJSSAqLworICAgIC8qICAgICB0cmFuc2xhdGVkIHZhbHVlcyBpcyByZXF1aXJlZC4gR2FtZXMgdXNlIHRoZSBzY2FuIGNvZGVzIHJhdGhlciAqLworICAgIC8qICAgICB0aGFuIEFTQ0lJIHZhbHVlcy4gU2NhbiBjb2RlcyBnbyBpbnRvIHRoZSBoaWdoIG9yZGVyIGJ5dGUgb2YgdGhlICovCisgICAgLyogICAgIGtleWJvYXJkIG1lc3NhZ2UgZmllbGQuICovCisgICAgLyogKi8KKyAgICAvKiAgMy4gU3VwcG9ydCBmb3IgYXQgbGVhc3QgcmVhZGluZyBtb3VzZSBtb3Rpb24gZGF0YSAobWlja2V5cykgZnJvbSB0aGUgKi8KKyAgICAvKiAgICAgbW91c2UgaXMgcmVxdWlyZWQuIFVzaW5nIHRoZSBtaWNrZXkgdmFsdWVzLCB3ZSBjYW4gdGhlbiB0cmFuc2xhdGUgKi8KKyAgICAvKiAgICAgdG8gbW91c2UgY3Vyc29yIGNvb3JkaW5hdGVzIHNjYWxlZCB0byB0aGUgcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgKi8KKyAgICAvKiAgICAgZ3JhcGhpY3MgZGlzcGxheSBtb2RlLiBNb3VzZSB2YWx1ZXMgYXJlIHNjYWxlZCBiYXNlZCBvbiB0aGUgKi8KKyAgICAvKiAgICAgZ2xvYmFsICdyYW5nZVgnIGFuZCAncmFuZ2VZJy4gKi8KKyAgICAvKiAqLworICAgIC8qICA0LiBTdXBwb3J0IGZvciBhIHRpbWVzdGFtcCBmb3IgdGhlIGV2ZW50cyBpcyByZXF1aXJlZCwgd2hpY2ggaXMgKi8KKyAgICAvKiAgICAgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSBzb21lIGV2ZW50ICh1c3VhbGx5ICovCisgICAgLyogICAgIHN5c3RlbSBzdGFydHVwKS4gVGhpcyBpcyB0aGUgdGltZXN0YW1wIHdoZW4gdGhlIGV2ZW50IG9jY3VycmVkICovCisgICAgLyogICAgIChpZTogYXQgaW50ZXJydXB0IHRpbWUpIG5vdCB3aGVuIGl0IHdhcyBzdHVmZiBpbnRvIHRoZSBTY2lUZWNoICovCisgICAgLyogICAgIGV2ZW50IHF1ZXVlLiAqLworICAgIC8qICovCisgICAgLyogIDUuIFN1cHBvcnQgZm9yIG1vdXNlIGRvdWJsZSBjbGljayBldmVudHMuIElmIHRoZSBPUyBoYXMgYSBuYXRpdmUgKi8KKyAgICAvKiAgICAgbWVjaGFuaXNtIHRvIGRldGVybWluZSB0aGlzLCBpdCBzaG91bGQgYmUgdXNlZC4gT3RoZXJ3aXNlIHRoZSAqLworICAgIC8qICAgICB0aW1lIHN0YW1wIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCBieSB0aGUgZ2VuZXJpYyBldmVudCBjb2RlICovCisgICAgLyogICAgIHRvIGdlbmVyYXRlIGRvdWJsZSBjbGljayBldmVudHMuICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNDEsNyArMTQxLDcgQEAKICAgICBpbml0RXZlbnRRdWV1ZSgpOwogICAgIG1lbXNldChrZXlVcE1zZywwLHNpemVvZihrZXlVcE1zZykpOwogCi0gICAgLy8gVE9ETzogRG8gYW55IE9TIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uIGhlcmUKKyAgICAvKiBUT0RPOiBEbyBhbnkgT1Mgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gaGVyZSAqLwogCiAgICAgLyogQ2F0Y2ggcHJvZ3JhbSB0ZXJtaW5hdGlvbiBzaWduYWxzIHNvIHdlIGNhbiBjbGVhbiB1cCBwcm9wZXJseSAqLwogICAgIHNpZ25hbChTSUdBQlJULCBfRVZUX2Fib3J0KTsKQEAgLTE3MSw3ICsxNzEsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgRVZUX3Jlc3VtZSh2b2lkKQogewotICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vbiBET1Mgc3lzdGVtcworICAgIC8qIERvIG5vdGhpbmcgZm9yIG5vbiBET1Mgc3lzdGVtcyAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTgxLDcgKzE4MSw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBFVlRfc3VzcGVuZCh2b2lkKQogewotICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vbiBET1Mgc3lzdGVtcworICAgIC8qIERvIG5vdGhpbmcgZm9yIG5vbiBET1Mgc3lzdGVtcyAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTk1LDUgKzE5NSw1IEBACiAgICAgc2lnbmFsKFNJR0ZQRSwgU0lHX0RGTCk7CiAgICAgc2lnbmFsKFNJR0lOVCwgU0lHX0RGTCk7CiAKLSAgICAvLyBUT0RPOiBEbyBhbnkgT1Mgc3BlY2lmaWMgY2xlYW51cCBpbiBoZXJlCisgICAgLyogVE9ETzogRG8gYW55IE9TIHNwZWNpZmljIGNsZWFudXAgaW4gaGVyZSAqLwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc3R1Yi9vc2hkci5oIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc3R1Yi9vc2hkci5oCmluZGV4IDgxYTIwYWEuLjEzOTVjYmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3N0dWIvb3NoZHIuaAorKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9zdHViL29zaGRyLmgKQEAgLTI4LDYgKzI4LDYgQEAKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8vIFRPRE86IFRoaXMgaXMgd2hlcmUgeW91IGluY2x1ZGUgT1Mgc3BlY2lmaWMgaGVhZGVycyBmb3IgdGhlIGV2ZW50IGhhbmRsaW5nCi0vLyAgICAgICBsaWJyYXJ5LiBZb3UgbWF5IGxlYXZlIHRoaXMgZW1wdHkgaWYgeW91IGhhdmUgbm8gT1Mgc3BlY2lmaWMgaGVhZGVycwotLy8gICAgICAgdG8gaW5jbHVkZS4KKy8qIFRPRE86IFRoaXMgaXMgd2hlcmUgeW91IGluY2x1ZGUgT1Mgc3BlY2lmaWMgaGVhZGVycyBmb3IgdGhlIGV2ZW50IGhhbmRsaW5nICovCisvKiAgICAgICBsaWJyYXJ5LiBZb3UgbWF5IGxlYXZlIHRoaXMgZW1wdHkgaWYgeW91IGhhdmUgbm8gT1Mgc3BlY2lmaWMgaGVhZGVycyAqLworLyogICAgICAgdG8gaW5jbHVkZS4gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3N0dWIvcG0uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3N0dWIvcG0uYwppbmRleCA1MTY1NmIwLi41ZjI3OGMzIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9zdHViL3BtLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc3R1Yi9wbS5jCkBAIC0zOCwxMyArMzgsMTMgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotLy8gVE9ETzogSW5jbHVkZSBhbnkgT1Mgc3BlY2lmaWMgaGVhZGVycyBoZXJlIQorLyogVE9ETzogSW5jbHVkZSBhbnkgT1Mgc3BlY2lmaWMgaGVhZGVycyBoZXJlISAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vLyBUT0RPOiBJZiB5b3Ugc3VwcG9ydCBhY2Nlc3MgdG8gdGhlIEJJT1MsIHRoZSBmb2xsb3dpbmcgVkVTQUJ1ZiBnbG9iYWxzCi0vLyAgICAgICBrZWVwIHRyYWNrIG9mIGEgc2luZ2xlIFZFU0EgdHJhbnNmZXIgYnVmZmVyLiBJZiB5b3UgZG9uJ3Qgc3VwcG9ydAotLy8gICAgICAgYWNjZXNzIHRvIHRoZSBCSU9TLCByZW1vdmUgdGhlc2UgdmFyaWFibGVzLgorLyogVE9ETzogSWYgeW91IHN1cHBvcnQgYWNjZXNzIHRvIHRoZSBCSU9TLCB0aGUgZm9sbG93aW5nIFZFU0FCdWYgZ2xvYmFscyAqLworLyogICAgICAga2VlcCB0cmFjayBvZiBhIHNpbmdsZSBWRVNBIHRyYW5zZmVyIGJ1ZmZlci4gSWYgeW91IGRvbid0IHN1cHBvcnQgKi8KKy8qICAgICAgIGFjY2VzcyB0byB0aGUgQklPUywgcmVtb3ZlIHRoZXNlIHZhcmlhYmxlcy4gKi8KIAogc3RhdGljIHVpbnQgVkVTQUJ1Zl9sZW4gPSAxMDI0OyAgICAgLyogTGVuZ3RoIG9mIHRoZSBWRVNBQnVmIGJ1ZmZlciAgICAgKi8KIHN0YXRpYyB2b2lkICpWRVNBQnVmX3B0ciA9IE5VTEw7ICAgIC8qIE5lYXIgcG9pbnRlciB0byBWRVNBQnVmICAgICAgICAgICovCkBAIC02MSwxMiArNjEsMTIgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIFBNQVBJIFBNX2luaXQodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBEbyBhbnkgaW5pdGlhbGlzYXRpb24gaW4gaGVyZS4gVGhpcyBpbmNsdWRlcyBnZXR0aW5nIElPUEwKLSAgICAvLyAgICAgICBhY2Nlc3MgZm9yIHRoZSBwcm9jZXNzIGNhbGxpbmcgUE1faW5pdC4gVGhpcyB3aWxsIGdldCBjYWxsZWQKLSAgICAvLyAgICAgICBtb3JlIHRoYW4gb25jZS4KKyAgICAvKiBUT0RPOiBEbyBhbnkgaW5pdGlhbGlzYXRpb24gaW4gaGVyZS4gVGhpcyBpbmNsdWRlcyBnZXR0aW5nIElPUEwgKi8KKyAgICAvKiAgICAgICBhY2Nlc3MgZm9yIHRoZSBwcm9jZXNzIGNhbGxpbmcgUE1faW5pdC4gVGhpcyB3aWxsIGdldCBjYWxsZWQgKi8KKyAgICAvKiAgICAgICBtb3JlIHRoYW4gb25jZS4gKi8KIAotICAgIC8vIFRPRE86IElmIHlvdSBzdXBwb3J0IHRoZSBzdXBwbGllZCBNVFJSIHJlZ2lzdGVyIHN0dWZmICh5b3UgbmVlZCB0bwotICAgIC8vICAgICAgIGJlIGF0IHJpbmcgMCBmb3IgdGhpcyEpLCB5b3Ugc2hvdWxkIGluaXRpYWxpc2UgaXQgaW4gaGVyZS4KKyAgICAvKiBUT0RPOiBJZiB5b3Ugc3VwcG9ydCB0aGUgc3VwcGxpZWQgTVRSUiByZWdpc3RlciBzdHVmZiAoeW91IG5lZWQgdG8gKi8KKyAgICAvKiAgICAgICBiZSBhdCByaW5nIDAgZm9yIHRoaXMhKSwgeW91IHNob3VsZCBpbml0aWFsaXNlIGl0IGluIGhlcmUuICovCiAKIC8qIE1UUlJfaW5pdCgpOyAqLwogfQpAQCAtNzcsNyArNzcsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGxvbmcgUE1BUEkgUE1fZ2V0T1NUeXBlKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogQ2hhbmdlIHRoaXMgdG8gcmV0dXJuIHRoZSBkZWZpbmUgZm9yIHlvdXIgT1MgZnJvbSBkcnZsaWIvb3MuaAorICAgIC8qIFRPRE86IENoYW5nZSB0aGlzIHRvIHJldHVybiB0aGUgZGVmaW5lIGZvciB5b3VyIE9TIGZyb20gZHJ2bGliL29zLmggKi8KICAgICByZXR1cm4gX09TX01ZT1M7CiB9CiAKQEAgLTk3LDkgKzk3LDkgQEAKIHsKICAgICB1aW50IHBvcyA9IHN0cmxlbihzKTsKICAgICBpZiAoc1twb3MtMV0gIT0gJy8nKSB7Ci0gICAgICAgIHNbcG9zXSA9ICcvJzsKLSAgICAgICAgc1twb3MrMV0gPSAnXDAnOwotICAgICAgICB9CisJc1twb3NdID0gJy8nOworCXNbcG9zKzFdID0gJ1wwJzsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTksMTEgKzExOSwxMSBAQAogdm9pZCBQTUFQSSBQTV9mYXRhbEVycm9yKAogICAgIGNvbnN0IGNoYXIgKm1zZykKIHsKLSAgICAvLyBUT0RPOiBJZiB5b3UgYXJlIHJ1bm5pbmcgaW4gYSBHVUkgZW52aXJvbm1lbnQgd2l0aG91dCBhIGNvbnNvbGUsCi0gICAgLy8gICAgICAgdGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvIGJyaW5nIHVwIGEgZmF0YWwgZXJyb3IgbWVzc2FnZQotICAgIC8vICAgICAgIGJveCBhbmQgdGVybWluYXRlIHRoZSBwcm9ncmFtLgorICAgIC8qIFRPRE86IElmIHlvdSBhcmUgcnVubmluZyBpbiBhIEdVSSBlbnZpcm9ubWVudCB3aXRob3V0IGEgY29uc29sZSwgKi8KKyAgICAvKiAgICAgICB0aGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gYnJpbmcgdXAgYSBmYXRhbCBlcnJvciBtZXNzYWdlICovCisgICAgLyogICAgICAgYm94IGFuZCB0ZXJtaW5hdGUgdGhlIHByb2dyYW0uICovCiAgICAgaWYgKGZhdGFsRXJyb3JDbGVhbnVwKQotICAgICAgICBmYXRhbEVycm9yQ2xlYW51cCgpOworCWZhdGFsRXJyb3JDbGVhbnVwKCk7CiAgICAgZnByaW50ZihzdGRlcnIsIiVzXG4iLCBtc2cpOwogICAgIGV4aXQoMSk7CiB9CkBAIC0xMzQsOSArMTM0LDkgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBFeGl0VkJFQnVmKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogSWYgeW91IGRvIG5vdCBoYXZlIEJJT1MgYWNjZXNzLCByZW1vdmUgdGhpcyBmdW5jdGlvbi4KKyAgICAvKiBUT0RPOiBJZiB5b3UgZG8gbm90IGhhdmUgQklPUyBhY2Nlc3MsIHJlbW92ZSB0aGlzIGZ1bmN0aW9uLiAqLwogICAgIGlmIChWRVNBQnVmX3B0cikKLSAgICAgICAgUE1fZnJlZVJlYWxTZWcoVkVTQUJ1Zl9wdHIpOworCVBNX2ZyZWVSZWFsU2VnKFZFU0FCdWZfcHRyKTsKICAgICBWRVNBQnVmX3B0ciA9IDA7CiB9CiAKQEAgLTE0OSwxNCArMTQ5LDE0IEBACiAgICAgdWludCAqcnNlZywKICAgICB1aW50ICpyb2ZmKQogewotICAgIC8vIFRPRE86IElmIHlvdSBkbyBub3QgaGF2ZSBCSU9TIGFjY2Vzcywgc2ltcGx5IGRlbGV0ZSB0aGUgZ3V0cyBvZgotICAgIC8vICAgICAgIHRoaXMgZnVuY3Rpb24gYW5kIHJldHVybiBOVUxMLgorICAgIC8qIFRPRE86IElmIHlvdSBkbyBub3QgaGF2ZSBCSU9TIGFjY2Vzcywgc2ltcGx5IGRlbGV0ZSB0aGUgZ3V0cyBvZiAqLworICAgIC8qICAgICAgIHRoaXMgZnVuY3Rpb24gYW5kIHJldHVybiBOVUxMLiAqLwogICAgIGlmICghVkVTQUJ1Zl9wdHIpIHsKLSAgICAgICAgLyogQWxsb2NhdGUgYSBnbG9iYWwgYnVmZmVyIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIFZFU0EgVkJFICovCi0gICAgICAgIGlmICgoVkVTQUJ1Zl9wdHIgPSBQTV9hbGxvY1JlYWxTZWcoVkVTQUJ1Zl9sZW4sICZWRVNBQnVmX3JzZWcsICZWRVNBQnVmX3JvZmYpKSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGF0ZXhpdChFeGl0VkJFQnVmKTsKLSAgICAgICAgfQorCS8qIEFsbG9jYXRlIGEgZ2xvYmFsIGJ1ZmZlciBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBWRVNBIFZCRSAqLworCWlmICgoVkVTQUJ1Zl9wdHIgPSBQTV9hbGxvY1JlYWxTZWcoVkVTQUJ1Zl9sZW4sICZWRVNBQnVmX3JzZWcsICZWRVNBQnVmX3JvZmYpKSA9PSBOVUxMKQorCSAgICByZXR1cm4gTlVMTDsKKwlhdGV4aXQoRXhpdFZCRUJ1Zik7CisJfQogICAgICpsZW4gPSBWRVNBQnVmX2xlbjsKICAgICAqcnNlZyA9IFZFU0FCdWZfcnNlZzsKICAgICAqcm9mZiA9IFZFU0FCdWZfcm9mZjsKQEAgLTE2OSw5ICsxNjksOSBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBQTUFQSSBQTV9rYmhpdCh2b2lkKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEga2V5IGlzIGF2YWlsYWJsZSB0byBiZSByZWFkLiBUaGlzCi0gICAgLy8gICAgICAgc2hvdWxkIGJlIGltcGxlbWVudGVkLCBidXQgaXMgbW9zdGx5IHVzZWQgYnkgdGhlIHRlc3QgcHJvZ3JhbXMKLSAgICAvLyAgICAgICB0aGVzZSBkYXlzLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEga2V5IGlzIGF2YWlsYWJsZSB0byBiZSByZWFkLiBUaGlzICovCisgICAgLyogICAgICAgc2hvdWxkIGJlIGltcGxlbWVudGVkLCBidXQgaXMgbW9zdGx5IHVzZWQgYnkgdGhlIHRlc3QgcHJvZ3JhbXMgKi8KKyAgICAvKiAgICAgICB0aGVzZSBkYXlzLiAqLwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xODEsOSArMTgxLDkgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgUE1BUEkgUE1fZ2V0Y2godm9pZCkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIHJldHVybnMgdGhlIEFTQ0lJIGNvZGUgb2YgdGhlIGtleSBwcmVzc2VkLiBUaGlzCi0gICAgLy8gICAgICAgc2hvdWxkIGJlIGltcGxlbWVudGVkLCBidXQgaXMgbW9zdGx5IHVzZWQgYnkgdGhlIHRlc3QgcHJvZ3JhbXMKLSAgICAvLyAgICAgICB0aGVzZSBkYXlzLgorICAgIC8qIFRPRE86IFRoaXMgcmV0dXJucyB0aGUgQVNDSUkgY29kZSBvZiB0aGUga2V5IHByZXNzZWQuIFRoaXMgKi8KKyAgICAvKiAgICAgICBzaG91bGQgYmUgaW1wbGVtZW50ZWQsIGJ1dCBpcyBtb3N0bHkgdXNlZCBieSB0aGUgdGVzdCBwcm9ncmFtcyAqLworICAgIC8qICAgICAgIHRoZXNlIGRheXMuICovCiAgICAgcmV0dXJuIDB4RDsKIH0KIApAQCAtMTkzLDEyICsxOTMsMTIgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgUE1BUEkgUE1fb3BlbkNvbnNvbGUodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBPcGVucyB1cCBhIGZ1bGxzY3JlZW4gY29uc29sZSBmb3IgZ3JhcGhpY3Mgb3V0cHV0LiBJZiB5b3VyCi0gICAgLy8gICAgICAgY29uc29sZSBkb2VzIG5vdCBoYXZlIGdyYXBoaWNzL3RleHQgbW9kZXMsIHRoaXMgY2FuIGJlIGxlZnQKLSAgICAvLyAgICAgICBlbXB0eS4gVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGlzIHRvIGRpc2FibGUgY29uc29sZSBzd2l0Y2hpbmcKLSAgICAvLyAgICAgICB3aGVuIGluIGdyYXBoaWNzIG1vZGVzIGlmIHlvdSBjYW4gc3dpdGNoIGF3YXkgZnJvbSBmdWxsc2NyZWVuCi0gICAgLy8gICAgICAgY29uc29sZXMgKGlmIHlvdSB3YW50IHRvIGFsbG93IHN3aXRjaGluZywgdGhpcyBjYW4gYmUgZG9uZQotICAgIC8vICAgICAgIGVsc2V3aGVyZSB3aXRoIGEgZnVsbCBzYXZlL3Jlc3RvcmUgc3RhdGUgb2YgdGhlIGdyYXBoaWNzIG1vZGUpLgorICAgIC8qIFRPRE86IE9wZW5zIHVwIGEgZnVsbHNjcmVlbiBjb25zb2xlIGZvciBncmFwaGljcyBvdXRwdXQuIElmIHlvdXIgKi8KKyAgICAvKiAgICAgICBjb25zb2xlIGRvZXMgbm90IGhhdmUgZ3JhcGhpY3MvdGV4dCBtb2RlcywgdGhpcyBjYW4gYmUgbGVmdCAqLworICAgIC8qICAgICAgIGVtcHR5LiBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gZGlzYWJsZSBjb25zb2xlIHN3aXRjaGluZyAqLworICAgIC8qICAgICAgIHdoZW4gaW4gZ3JhcGhpY3MgbW9kZXMgaWYgeW91IGNhbiBzd2l0Y2ggYXdheSBmcm9tIGZ1bGxzY3JlZW4gKi8KKyAgICAvKiAgICAgICBjb25zb2xlcyAoaWYgeW91IHdhbnQgdG8gYWxsb3cgc3dpdGNoaW5nLCB0aGlzIGNhbiBiZSBkb25lICovCisgICAgLyogICAgICAgZWxzZXdoZXJlIHdpdGggYSBmdWxsIHNhdmUvcmVzdG9yZSBzdGF0ZSBvZiB0aGUgZ3JhcGhpY3MgbW9kZSkuICovCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTIwOCw5ICsyMDgsOSBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBQTUFQSSBQTV9nZXRDb25zb2xlU3RhdGVTaXplKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgY29uc29sZSBzdGF0ZSBidWZmZXIgdXNlZCB0byBzYXZlIHRoZQotICAgIC8vICAgICAgIHN0YXRlIG9mIHRoZSBjb25zb2xlIGJlZm9yZSBnb2luZyBpbnRvIGdyYXBoaWNzIG1vZGUuIFRoaXMgaXMKLSAgICAvLyAgICAgICB1c2VkIHRvIHJlc3RvcmUgdGhlIGNvbnNvbGUgYmFjayB0byBub3JtYWwgd2hlbiB3ZSBhcmUgZG9uZS4KKyAgICAvKiBUT0RPOiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb25zb2xlIHN0YXRlIGJ1ZmZlciB1c2VkIHRvIHNhdmUgdGhlICovCisgICAgLyogICAgICAgc3RhdGUgb2YgdGhlIGNvbnNvbGUgYmVmb3JlIGdvaW5nIGludG8gZ3JhcGhpY3MgbW9kZS4gVGhpcyBpcyAqLworICAgIC8qICAgICAgIHVzZWQgdG8gcmVzdG9yZSB0aGUgY29uc29sZSBiYWNrIHRvIG5vcm1hbCB3aGVuIHdlIGFyZSBkb25lLiAqLwogICAgIHJldHVybiAxOwogfQogCkBAIC0yMjIsMTEgKzIyMiwxMSBAQAogICAgIHZvaWQgKnN0YXRlQnVmLAogICAgIGludCBjb25zb2xlX2lkKQogewotICAgIC8vIFRPRE86IFNhdmVzIHRoZSBzdGF0ZSBvZiB0aGUgY29uc29sZSBpbnRvIHRoZSBzdGF0ZSBidWZmZXIuIFRoaXMgaXMKLSAgICAvLyAgICAgICB1c2VkIHRvIHJlc3RvcmUgdGhlIGNvbnNvbGUgYmFjayB0byBub3JtYWwgd2hlbiB3ZSBhcmUgZG9uZS4KLSAgICAvLyAgICAgICBXZSB3aWxsIGFsd2F5cyByZXN0b3JlIDgweDI1IHRleHQgbW9kZSBhZnRlciBiZWluZyBpbiBncmFwaGljcwotICAgIC8vICAgICAgIG1vZGUsIHNvIGlmIHJlc3RvcmluZyB0ZXh0IG1vZGUgaXMgYWxsIHlvdSBuZWVkIHRvIGRvIHRoaXMgY2FuCi0gICAgLy8gICAgICAgYmUgbGVmdCBlbXB0eS4KKyAgICAvKiBUT0RPOiBTYXZlcyB0aGUgc3RhdGUgb2YgdGhlIGNvbnNvbGUgaW50byB0aGUgc3RhdGUgYnVmZmVyLiBUaGlzIGlzICovCisgICAgLyogICAgICAgdXNlZCB0byByZXN0b3JlIHRoZSBjb25zb2xlIGJhY2sgdG8gbm9ybWFsIHdoZW4gd2UgYXJlIGRvbmUuICovCisgICAgLyogICAgICAgV2Ugd2lsbCBhbHdheXMgcmVzdG9yZSA4MHgyNSB0ZXh0IG1vZGUgYWZ0ZXIgYmVpbmcgaW4gZ3JhcGhpY3MgKi8KKyAgICAvKiAgICAgICBtb2RlLCBzbyBpZiByZXN0b3JpbmcgdGV4dCBtb2RlIGlzIGFsbCB5b3UgbmVlZCB0byBkbyB0aGlzIGNhbiAqLworICAgIC8qICAgICAgIGJlIGxlZnQgZW1wdHkuICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yMzcsMTEgKzIzNywxMSBAQAogICAgIGNvbnN0IHZvaWQgKnN0YXRlQnVmLAogICAgIGludCBjb25zb2xlX2lkKQogewotICAgIC8vIFRPRE86IFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBjb25zb2xlIGZyb20gdGhlIHN0YXRlIGJ1ZmZlci4gVGhpcyBpcwotICAgIC8vICAgICAgIHVzZWQgdG8gcmVzdG9yZSB0aGUgY29uc29sZSBiYWNrIHRvIG5vcm1hbCB3aGVuIHdlIGFyZSBkb25lLgotICAgIC8vICAgICAgIFdlIHdpbGwgYWx3YXlzIHJlc3RvcmUgODB4MjUgdGV4dCBtb2RlIGFmdGVyIGJlaW5nIGluIGdyYXBoaWNzCi0gICAgLy8gICAgICAgbW9kZSwgc28gaWYgcmVzdG9yaW5nIHRleHQgbW9kZSBpcyBhbGwgeW91IG5lZWQgdG8gZG8gdGhpcyBjYW4KLSAgICAvLyAgICAgICBiZSBsZWZ0IGVtcHR5LgorICAgIC8qIFRPRE86IFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBjb25zb2xlIGZyb20gdGhlIHN0YXRlIGJ1ZmZlci4gVGhpcyBpcyAqLworICAgIC8qICAgICAgIHVzZWQgdG8gcmVzdG9yZSB0aGUgY29uc29sZSBiYWNrIHRvIG5vcm1hbCB3aGVuIHdlIGFyZSBkb25lLiAqLworICAgIC8qICAgICAgIFdlIHdpbGwgYWx3YXlzIHJlc3RvcmUgODB4MjUgdGV4dCBtb2RlIGFmdGVyIGJlaW5nIGluIGdyYXBoaWNzICovCisgICAgLyogICAgICAgbW9kZSwgc28gaWYgcmVzdG9yaW5nIHRleHQgbW9kZSBpcyBhbGwgeW91IG5lZWQgdG8gZG8gdGhpcyBjYW4gKi8KKyAgICAvKiAgICAgICBiZSBsZWZ0IGVtcHR5LiAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjUxLDcgKzI1MSw3IEBACiB2b2lkIFBNQVBJIFBNX2Nsb3NlQ29uc29sZSgKICAgICBpbnQgY29uc29sZV9pZCkKIHsKLSAgICAvLyBUT0RPOiBDbG9zZSB0aGUgY29uc29sZSB3aGVuIHdlIGFyZSBkb25lLCBnb2luZyBiYWNrIHRvIHRleHQgbW9kZS4KKyAgICAvKiBUT0RPOiBDbG9zZSB0aGUgY29uc29sZSB3aGVuIHdlIGFyZSBkb25lLCBnb2luZyBiYWNrIHRvIHRleHQgbW9kZS4gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI2Miw4ICsyNjIsOCBAQAogICAgIGludCB4LAogICAgIGludCB5KQogewotICAgIC8vIFRPRE86IFNldCB0aGUgT1MgY29uc29sZSBjdXJzb3IgbG9jYXRpb24gdG8gdGhlIG5ldyB2YWx1ZS4gVGhpcyBpcwotICAgIC8vICAgICAgIGdlbmVyYWxseSB1c2VkIGZvciBuZXcgT1MgcG9ydHMgKHVzZWQgbW9zdGx5IGZvciBET1MpLgorICAgIC8qIFRPRE86IFNldCB0aGUgT1MgY29uc29sZSBjdXJzb3IgbG9jYXRpb24gdG8gdGhlIG5ldyB2YWx1ZS4gVGhpcyBpcyAqLworICAgIC8qICAgICAgIGdlbmVyYWxseSB1c2VkIGZvciBuZXcgT1MgcG9ydHMgKHVzZWQgbW9zdGx5IGZvciBET1MpLiAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjc0LDggKzI3NCw4IEBACiAgICAgaW50IHdpZHRoLAogICAgIGludCBoZWlnaHQpCiB7Ci0gICAgLy8gVE9ETzogU2V0IHRoZSBPUyBjb25zb2xlIHNjcmVlbiB3aWR0aC4gVGhpcyBpcyBnZW5lcmFsbHkgdW51c2VkIGZvcgotICAgIC8vICAgICAgIG5ldyBPUyBwb3J0cy4KKyAgICAvKiBUT0RPOiBTZXQgdGhlIE9TIGNvbnNvbGUgc2NyZWVuIHdpZHRoLiBUaGlzIGlzIGdlbmVyYWxseSB1bnVzZWQgZm9yICovCisgICAgLyogICAgICAgbmV3IE9TIHBvcnRzLiAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjg2LDEyICsyODYsMTIgQEAKICAgICBQTV9pbnRIYW5kbGVyIGloLAogICAgIGludCBmcmVxdWVuY3kpCiB7Ci0gICAgLy8gVE9ETzogSW5zdGFsbCBhIHJlYWwgdGltZSBjbG9jayBpbnRlcnJ1cHQgaGFuZGxlci4gTm9ybWFsbHkgdGhpcwotICAgIC8vICAgICAgIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBmcm9tIG1vc3QgT1MnZXMgaW4gdXNlciBsYW5kLCBzbyBhbgotICAgIC8vICAgICAgIGFsdGVybmF0aXZlIG1lY2hhbmlzbSBpcyBuZWVkZWQgdG8gZW5hYmxlIHNvZnR3YXJlIHN0ZXJlby4KLSAgICAvLyAgICAgICBIZW5jZSBsZWF2ZSB0aGlzIHVuaW1wbGVtZW50ZWQgdW5sZXNzIHlvdSBoYXZlIGEgaGlnaCBwcmlvcml0eQotICAgIC8vICAgICAgIG1lY2hhbmlzbSB0byBjYWxsIHRoZSAzMi1iaXQgY2FsbGJhY2sgd2hlbiB0aGUgcmVhbCB0aW1lIGNsb2NrCi0gICAgLy8gICAgICAgaW50ZXJydXB0IGZpcmVzLgorICAgIC8qIFRPRE86IEluc3RhbGwgYSByZWFsIHRpbWUgY2xvY2sgaW50ZXJydXB0IGhhbmRsZXIuIE5vcm1hbGx5IHRoaXMgKi8KKyAgICAvKiAgICAgICB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgZnJvbSBtb3N0IE9TJ2VzIGluIHVzZXIgbGFuZCwgc28gYW4gKi8KKyAgICAvKiAgICAgICBhbHRlcm5hdGl2ZSBtZWNoYW5pc20gaXMgbmVlZGVkIHRvIGVuYWJsZSBzb2Z0d2FyZSBzdGVyZW8uICovCisgICAgLyogICAgICAgSGVuY2UgbGVhdmUgdGhpcyB1bmltcGxlbWVudGVkIHVubGVzcyB5b3UgaGF2ZSBhIGhpZ2ggcHJpb3JpdHkgKi8KKyAgICAvKiAgICAgICBtZWNoYW5pc20gdG8gY2FsbCB0aGUgMzItYml0IGNhbGxiYWNrIHdoZW4gdGhlIHJlYWwgdGltZSBjbG9jayAqLworICAgIC8qICAgICAgIGludGVycnVwdCBmaXJlcy4gKi8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTMwMiw5ICszMDIsOSBAQAogdm9pZCBQTUFQSSBQTV9zZXRSZWFsVGltZUNsb2NrRnJlcXVlbmN5KAogICAgIGludCBmcmVxdWVuY3kpCiB7Ci0gICAgLy8gVE9ETzogU2V0IHRoZSByZWFsIHRpbWUgY2xvY2sgaW50ZXJydXB0IGZyZXF1ZW5jeS4gVXNlZCBmb3Igc3RlcmVvCi0gICAgLy8gICAgICAgTEMgc2h1dHRlciBnbGFzc2VzIHdoZW4gZG9pbmcgc29mdHdhcmUgc3RlcmVvLiBVc3VhbGx5IHNldHMKLSAgICAvLyAgICAgICB0aGUgZnJlcXVlbmN5IHRvIGFyb3VuZCAyMDQ4IEh6LgorICAgIC8qIFRPRE86IFNldCB0aGUgcmVhbCB0aW1lIGNsb2NrIGludGVycnVwdCBmcmVxdWVuY3kuIFVzZWQgZm9yIHN0ZXJlbyAqLworICAgIC8qICAgICAgIExDIHNodXR0ZXIgZ2xhc3NlcyB3aGVuIGRvaW5nIHNvZnR3YXJlIHN0ZXJlby4gVXN1YWxseSBzZXRzICovCisgICAgLyogICAgICAgdGhlIGZyZXF1ZW5jeSB0byBhcm91bmQgMjA0OCBIei4gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMxMyw3ICszMTMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgUE1BUEkgUE1fcmVzdG9yZVJlYWxUaW1lQ2xvY2tIYW5kbGVyKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogUmVzdG9yZXMgdGhlIHJlYWwgdGltZSBjbG9jayBoYW5kbGVyLgorICAgIC8qIFRPRE86IFJlc3RvcmVzIHRoZSByZWFsIHRpbWUgY2xvY2sgaGFuZGxlci4gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzMyw4ICszMzMsOCBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGNoYXIgUE1BUEkgUE1fZ2V0Qm9vdERyaXZlKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogUmV0dXJuIHRoZSBib290IGRyaXZlIGxldHRlciBmb3IgdGhlIE9TLiBOb3JtYWxseSB0aGlzIGlzICdjJwotICAgIC8vICAgICAgIGZvciBET1MgYmFzZWQgT1MnZXMgYW5kICcvJyBmb3IgVW5pY2VzLgorICAgIC8qIFRPRE86IFJldHVybiB0aGUgYm9vdCBkcml2ZSBsZXR0ZXIgZm9yIHRoZSBPUy4gTm9ybWFsbHkgdGhpcyBpcyAnYycgKi8KKyAgICAvKiAgICAgICBmb3IgRE9TIGJhc2VkIE9TJ2VzIGFuZCAnLycgZm9yIFVuaWNlcy4gKi8KICAgICByZXR1cm4gJy8nOwogfQogCkBAIC0zNTMsOCArMzUzLDggQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBjb25zdCBjaGFyICogUE1BUEkgUE1fZ2V0TnVjbGV1c1BhdGgodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBDaGFuZ2UgdGhpcyB0byB0aGUgZGVmYXVsdCBwYXRoIHRvIE51Y2xldXMgZHJpdmVyIGZpbGVzLiBUaGUKLSAgICAvLyAgICAgICBmb2xsb3dpbmcgaXMgdGhlIGRlZmF1bHQgZm9yIFVuaWNlcy4KKyAgICAvKiBUT0RPOiBDaGFuZ2UgdGhpcyB0byB0aGUgZGVmYXVsdCBwYXRoIHRvIE51Y2xldXMgZHJpdmVyIGZpbGVzLiBUaGUgKi8KKyAgICAvKiAgICAgICBmb2xsb3dpbmcgaXMgdGhlIGRlZmF1bHQgZm9yIFVuaWNlcy4gKi8KICAgICBjaGFyICplbnYgPSBnZXRlbnYoIk5VQ0xFVVNfUEFUSCIpOwogICAgIHJldHVybiBlbnYgPyBlbnYgOiAiL3Vzci9saWIvbnVjbGV1cyI7CiB9CkBAIC0zNzgsOCArMzc4LDggQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBjb25zdCBjaGFyICogUE1BUEkgUE1fZ2V0VW5pcXVlSUQodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBSZXR1cm4gYSB1bmlxdWUgSUQgZm9yIHRoZSBtYWNoaW5lLiBJZiBhIHVuaXF1ZSBJRCBpcyBub3QKLSAgICAvLyAgICAgICBhdmFpbGFibGUsIHJldHVybiB0aGUgbWFjaGluZSBuYW1lLgorICAgIC8qIFRPRE86IFJldHVybiBhIHVuaXF1ZSBJRCBmb3IgdGhlIG1hY2hpbmUuIElmIGEgdW5pcXVlIElEIGlzIG5vdCAqLworICAgIC8qICAgICAgIGF2YWlsYWJsZSwgcmV0dXJuIHRoZSBtYWNoaW5lIG5hbWUuICovCiAgICAgc3RhdGljIGNoYXIgYnVmWzEyOF07CiAgICAgZ2V0aG9zdG5hbWUoYnVmLCAxMjgpOwogICAgIHJldHVybiBidWY7CkBAIC0zOTEsNyArMzkxLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBjb25zdCBjaGFyICogUE1BUEkgUE1fZ2V0TWFjaGluZU5hbWUodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBSZXR1cm4gdGhlIG5ldHdvcmsgbWFjaGluZSBuYW1lIGZvciB0aGUgbWFjaGluZS4KKyAgICAvKiBUT0RPOiBSZXR1cm4gdGhlIG5ldHdvcmsgbWFjaGluZSBuYW1lIGZvciB0aGUgbWFjaGluZS4gKi8KICAgICBzdGF0aWMgY2hhciBidWZbMTI4XTsKICAgICBnZXRob3N0bmFtZShidWYsIDEyOCk7CiAgICAgcmV0dXJuIGJ1ZjsKQEAgLTQwMywxMCArNDAzLDEwIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCAqIFBNQVBJIFBNX2dldEJJT1NQb2ludGVyKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcmVhbCBtb2RlIEJJT1MgZGF0YSBhcmVhLiBJZiB5b3UKLSAgICAvLyAgICAgICBkbyBub3Qgc3VwcG9ydCBCSU9TIGFjY2VzcywgeW91IGNhbiBzaW1wbHkgcmV0dXJuIE5VTEwgaGVyZS4KKyAgICAvKiBUT0RPOiBUaGlzIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSByZWFsIG1vZGUgQklPUyBkYXRhIGFyZWEuIElmIHlvdSAqLworICAgIC8qICAgICAgIGRvIG5vdCBzdXBwb3J0IEJJT1MgYWNjZXNzLCB5b3UgY2FuIHNpbXBseSByZXR1cm4gTlVMTCBoZXJlLiAqLwogICAgIGlmICghemVyb1B0cikKLSAgICAgICAgemVyb1B0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigwLDB4RkZGRkYsdHJ1ZSk7CisJemVyb1B0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigwLDB4RkZGRkYsdHJ1ZSk7CiAgICAgcmV0dXJuICh2b2lkKikoemVyb1B0ciArIDB4NDAwKTsKIH0KIApAQCAtNDE4LDcgKzQxOCw3IEBACiB7CiAgICAgc3RhdGljIHZvaWQgKmJhbmtQdHI7CiAgICAgaWYgKCFiYW5rUHRyKQotICAgICAgICBiYW5rUHRyID0gUE1fbWFwUGh5c2ljYWxBZGRyKDB4QTAwMDAsMHhGRkZGLHRydWUpOworCWJhbmtQdHIgPSBQTV9tYXBQaHlzaWNhbEFkZHIoMHhBMDAwMCwweEZGRkYsdHJ1ZSk7CiAgICAgcmV0dXJuIGJhbmtQdHI7CiB9CiAKQEAgLTQzMSwyMyArNDMxLDIzIEBACiAgICAgdWxvbmcgbGltaXQsCiAgICAgaWJvb2wgaXNDYWNoZWQpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBtYXBzIGEgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgdG8gYSBsaW5lYXIKLSAgICAvLyAgICAgICBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MuCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBtYXBzIGEgcGh5c2ljYWwgbWVtb3J5IGFkZHJlc3MgdG8gYSBsaW5lYXIgKi8KKyAgICAvKiAgICAgICBhZGRyZXNzIGluIHRoZSBhZGRyZXNzIHNwYWNlIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MuICovCiAKLSAgICAvLyBOT1RFOiBUaGlzIGZ1bmN0aW9uICptdXN0KiBiZSBhYmxlIHRvIGhhbmRsZSBhbnkgcGhzeWljYWwgYmFzZQotICAgIC8vICAgICAgIGFkZHJlc3MsIGFuZCBoZW5jZSB5b3Ugd2lsbCBoYXZlIHRvIGhhbmRsZSByb3VuZGluZyBvZgotICAgIC8vICAgICAgIHRoZSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgdG8gYSBwYWdlIGJvdW5kYXJ5IChpZTogNEtiIG9uCi0gICAgLy8gICAgICAgeDg2IENQVSdzKSB0byBiZSBhYmxlIHRvIHByb3Blcmx5IG1hcCBpbiB0aGUgbWVtb3J5Ci0gICAgLy8gICAgICAgcmVnaW9uLgorICAgIC8qIE5PVEU6IFRoaXMgZnVuY3Rpb24gKm11c3QqIGJlIGFibGUgdG8gaGFuZGxlIGFueSBwaHN5aWNhbCBiYXNlICovCisgICAgLyogICAgICAgYWRkcmVzcywgYW5kIGhlbmNlIHlvdSB3aWxsIGhhdmUgdG8gaGFuZGxlIHJvdW5kaW5nIG9mICovCisgICAgLyogICAgICAgdGhlIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyB0byBhIHBhZ2UgYm91bmRhcnkgKGllOiA0S2Igb24gKi8KKyAgICAvKiAgICAgICB4ODYgQ1BVJ3MpIHRvIGJlIGFibGUgdG8gcHJvcGVybHkgbWFwIGluIHRoZSBtZW1vcnkgKi8KKyAgICAvKiAgICAgICByZWdpb24uICovCiAKLSAgICAvLyBOT1RFOiBJZiBwb3NzaWJsZSB0aGUgaXNDYWNoZWQgYml0IHNob3VsZCBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0Ci0gICAgLy8gICAgICAgdGhlIFBDRCAoUGFnZSBDYWNoZSBEaXNhYmxlKSBhbmQgUFdUIChQYWdlIFdyaXRlIFRocm91Z2gpCi0gICAgLy8gICAgICAgYml0cyBhcmUgc2V0IHRvIGRpc2FibGUgY2FjaGluZyBmb3IgYSBtZW1vcnkgbWFwcGluZyB1c2VkCi0gICAgLy8gICAgICAgZm9yIE1NSU8gcmVnaXN0ZXIgYWNjZXNzLiBXZSBhbHNvIGRpc2FibGUgY2FjaGluZyB1c2luZwotICAgIC8vICAgICAgIHRoZSBNVFJSIHJlZ2lzdGVycyBmb3IgUGVudGl1bSBQcm8gYW5kIGxhdGVyIGNoaXBzZXRzIHNvIGlmCi0gICAgLy8gICAgICAgTVRSUiBzdXBwb3J0IGlzIGVuYWJsZWQgZm9yIHlvdXIgT1MgdGhlbiB5b3UgY2FuIHNhZmVseSBpZ25vcmUKLSAgICAvLyAgICAgICB0aGUgaXNDYWNoZWQgZmxhZyBhbmQgYWx3YXlzIGVuYWJsZSBjYWNoaW5nIGluIHRoZSBwYWdlCi0gICAgLy8gICAgICAgdGFibGVzLgorICAgIC8qIE5PVEU6IElmIHBvc3NpYmxlIHRoZSBpc0NhY2hlZCBiaXQgc2hvdWxkIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgKi8KKyAgICAvKiAgICAgICB0aGUgUENEIChQYWdlIENhY2hlIERpc2FibGUpIGFuZCBQV1QgKFBhZ2UgV3JpdGUgVGhyb3VnaCkgKi8KKyAgICAvKiAgICAgICBiaXRzIGFyZSBzZXQgdG8gZGlzYWJsZSBjYWNoaW5nIGZvciBhIG1lbW9yeSBtYXBwaW5nIHVzZWQgKi8KKyAgICAvKiAgICAgICBmb3IgTU1JTyByZWdpc3RlciBhY2Nlc3MuIFdlIGFsc28gZGlzYWJsZSBjYWNoaW5nIHVzaW5nICovCisgICAgLyogICAgICAgdGhlIE1UUlIgcmVnaXN0ZXJzIGZvciBQZW50aXVtIFBybyBhbmQgbGF0ZXIgY2hpcHNldHMgc28gaWYgKi8KKyAgICAvKiAgICAgICBNVFJSIHN1cHBvcnQgaXMgZW5hYmxlZCBmb3IgeW91ciBPUyB0aGVuIHlvdSBjYW4gc2FmZWx5IGlnbm9yZSAqLworICAgIC8qICAgICAgIHRoZSBpc0NhY2hlZCBmbGFnIGFuZCBhbHdheXMgZW5hYmxlIGNhY2hpbmcgaW4gdGhlIHBhZ2UgKi8KKyAgICAvKiAgICAgICB0YWJsZXMuICovCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ1OSw5ICs0NTksOSBAQAogICAgIHZvaWQgKnB0ciwKICAgICB1bG9uZyBsaW1pdCkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHdpbGwgZnJlZSBhIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nIHByZXZpb3VzbHkKLSAgICAvLyAgICAgICBhbGxvY2F0ZWQgd2l0aCBQTV9tYXBQaHlzaWNhbEFkZHIoKSBpZiBhdCBhbGwgcG9zc2libGUuIElmCi0gICAgLy8gICAgICAgeW91IGNhbid0IGZyZWUgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmdzLCBzaW1wbHkgZG8gbm90aGluZy4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHdpbGwgZnJlZSBhIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nIHByZXZpb3VzbHkgKi8KKyAgICAvKiAgICAgICBhbGxvY2F0ZWQgd2l0aCBQTV9tYXBQaHlzaWNhbEFkZHIoKSBpZiBhdCBhbGwgcG9zc2libGUuIElmICovCisgICAgLyogICAgICAgeW91IGNhbid0IGZyZWUgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmdzLCBzaW1wbHkgZG8gbm90aGluZy4gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ3MCwzNiArNDcwLDM2IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdWxvbmcgUE1BUEkgUE1fZ2V0UGh5c2ljYWxBZGRyKHZvaWQgKnApCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgZmluZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBhIGxpbmVhcgotICAgIC8vICAgICAgIGFkZHJlc3MuCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgZmluZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiBhIGxpbmVhciAqLworICAgIC8qICAgICAgIGFkZHJlc3MuICovCiAgICAgcmV0dXJuIDB4RkZGRkZGRkZVTDsKIH0KIAogdm9pZCBQTUFQSSBQTV9zbGVlcCh1bG9uZyBtaWxsaXNlY29uZHMpCiB7Ci0gICAgLy8gVE9ETzogUHV0IHRoZSBwcm9jZXNzIHRvIHNsZWVwIGZvciBtaWxsaXNlY29uZHMKKyAgICAvKiBUT0RPOiBQdXQgdGhlIHByb2Nlc3MgdG8gc2xlZXAgZm9yIG1pbGxpc2Vjb25kcyAqLwogfQogCiBpbnQgUE1BUEkgUE1fZ2V0Q09NUG9ydChpbnQgcG9ydCkKIHsKLSAgICAvLyBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5Ci0gICAgLy8gICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLgorICAgIC8qIFRPRE86IFJlLWNvZGUgdGhpcyB0byBkZXRlcm1pbmUgcmVhbCB2YWx1ZXMgdXNpbmcgdGhlIFBsdWcgYW5kIFBsYXkgKi8KKyAgICAvKiAgICAgICBtYW5hZ2VyIGZvciB0aGUgT1MuICovCiAgICAgc3dpdGNoIChwb3J0KSB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuIDB4M0Y4OwotICAgICAgICBjYXNlIDE6IHJldHVybiAweDJGODsKLSAgICAgICAgfQorCWNhc2UgMDogcmV0dXJuIDB4M0Y4OworCWNhc2UgMTogcmV0dXJuIDB4MkY4OworCX0KICAgICByZXR1cm4gMDsKIH0KIAogaW50IFBNQVBJIFBNX2dldExQVFBvcnQoaW50IHBvcnQpCiB7Ci0gICAgLy8gVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheQotICAgIC8vICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4KKyAgICAvKiBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5ICovCisgICAgLyogICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLiAqLwogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNCQzsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgzNzg7Ci0gICAgICAgIGNhc2UgMjogcmV0dXJuIDB4Mjc4OwotICAgICAgICB9CisJY2FzZSAwOiByZXR1cm4gMHgzQkM7CisJY2FzZSAxOiByZXR1cm4gMHgzNzg7CisJY2FzZSAyOiByZXR1cm4gMHgyNzg7CisJfQogICAgIHJldHVybiAwOwogfQogCkBAIC01MTAsMTEgKzUxMCwxMSBAQAogdm9pZCAqIFBNQVBJIFBNX21hbGxvY1NoYXJlZCgKICAgICBsb25nIHNpemUpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBpcyB1c2VkIHRvIGFsbG9jYXRlIG1lbW9yeSB0aGF0IGlzIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3MKLSAgICAvLyAgICAgICB0aGF0IGFsbCBhY2Nlc3MgdGhlIGNvbW1vbiBOdWNsZXVzIGRyaXZlcnMgdmlhIGEgY29tbW9uIGRpc3BsYXkKLSAgICAvLyAgICAgICBkcml2ZXIgRExMLiBJZiB5b3VyIE9TIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIG1lbW9yeSAob3IgaWYKLSAgICAvLyAgICAgICB0aGUgZGlzcGxheSBkcml2ZXIgZG9lcyBub3QgbmVlZCB0byBhbGxvY2F0ZSBzaGFyZWQgbWVtb3J5Ci0gICAgLy8gICAgICAgZm9yIGVhY2ggcHJvY2VzcyBhZGRyZXNzIHNwYWNlKSwgdGhpcyBzaG91bGQganVzdCBjYWxsIFBNX21hbGxvYy4KKyAgICAvKiBUT0RPOiBUaGlzIGlzIHVzZWQgdG8gYWxsb2NhdGUgbWVtb3J5IHRoYXQgaXMgc2hhcmVkIGJldHdlZW4gcHJvY2VzcyAqLworICAgIC8qICAgICAgIHRoYXQgYWxsIGFjY2VzcyB0aGUgY29tbW9uIE51Y2xldXMgZHJpdmVycyB2aWEgYSBjb21tb24gZGlzcGxheSAqLworICAgIC8qICAgICAgIGRyaXZlciBETEwuIElmIHlvdXIgT1MgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbWVtb3J5IChvciBpZiAqLworICAgIC8qICAgICAgIHRoZSBkaXNwbGF5IGRyaXZlciBkb2VzIG5vdCBuZWVkIHRvIGFsbG9jYXRlIHNoYXJlZCBtZW1vcnkgKi8KKyAgICAvKiAgICAgICBmb3IgZWFjaCBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UpLCB0aGlzIHNob3VsZCBqdXN0IGNhbGwgUE1fbWFsbG9jLiAqLwogICAgIHJldHVybiBQTV9tYWxsb2Moc2l6ZSk7CiB9CiAKQEAgLTUyNSwxMCArNTI1LDEwIEBACiB2b2lkIFBNQVBJIFBNX2ZyZWVTaGFyZWQoCiAgICAgdm9pZCAqcHRyKQogewotICAgIC8vIFRPRE86IEZyZWUgdGhlIHNoYXJlZCBtZW1vcnkgYmxvY2suIFRoaXMgd2lsbCBiZSBjYWxsZWQgaW4gdGhlIGNvbnRleHQKLSAgICAvLyAgICAgICBvZiB0aGUgb3JpZ2luYWwgY2FsbGluZyBwcm9jZXNzIHRoYXQgYWxsb2NhdGVkIHRoZSBzaGFyZWQKLSAgICAvLyAgICAgICBtZW1vcnkgd2l0aCBQTV9tYWxsb2NTaGFyZWQuIFNpbXBseSBjYWxsIFBNX2ZyZWUgaWYgeW91IGRvIG5vdAotICAgIC8vICAgICAgIG5lZWQgdGhpcy4KKyAgICAvKiBUT0RPOiBGcmVlIHRoZSBzaGFyZWQgbWVtb3J5IGJsb2NrLiBUaGlzIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0ICovCisgICAgLyogICAgICAgb2YgdGhlIG9yaWdpbmFsIGNhbGxpbmcgcHJvY2VzcyB0aGF0IGFsbG9jYXRlZCB0aGUgc2hhcmVkICovCisgICAgLyogICAgICAgbWVtb3J5IHdpdGggUE1fbWFsbG9jU2hhcmVkLiBTaW1wbHkgY2FsbCBQTV9mcmVlIGlmIHlvdSBkbyBub3QgKi8KKyAgICAvKiAgICAgICBuZWVkIHRoaXMuICovCiAgICAgUE1fZnJlZShwdHIpOwogfQogCkBAIC01NDIsMTYgKzU0MiwxNiBAQAogICAgIHZvaWQgKmJhc2UsCiAgICAgdWxvbmcgbGltaXQpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG1hcCBhIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nCi0gICAgLy8gICAgICAgcHJldmlvdXNseSBhbGxvY2F0ZWQgd2l0aCBQTV9tYXBQaHlzaWNhbEFkZHIgaW50byB0aGUKLSAgICAvLyAgICAgICBhZGRyZXNzIHNwYWNlIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MuIElmIHRoZSBtZW1vcnkgbWFwcGluZwotICAgIC8vICAgICAgIGFsbG9jYXRlZCBieSBQTV9tYXBQaHlzaWNhbEFkZHIgaXMgZ2xvYmFsIHRvIGFsbCBwcm9jZXNzZXMsCi0gICAgLy8gICAgICAgc2ltcGx5IHJldHVybiB0aGUgcG9pbnRlci4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFwIGEgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmcgKi8KKyAgICAvKiAgICAgICBwcmV2aW91c2x5IGFsbG9jYXRlZCB3aXRoIFBNX21hcFBoeXNpY2FsQWRkciBpbnRvIHRoZSAqLworICAgIC8qICAgICAgIGFkZHJlc3Mgc3BhY2Ugb2YgdGhlIGNhbGxpbmcgcHJvY2Vzcy4gSWYgdGhlIG1lbW9yeSBtYXBwaW5nICovCisgICAgLyogICAgICAgYWxsb2NhdGVkIGJ5IFBNX21hcFBoeXNpY2FsQWRkciBpcyBnbG9iYWwgdG8gYWxsIHByb2Nlc3NlcywgKi8KKyAgICAvKiAgICAgICBzaW1wbHkgcmV0dXJuIHRoZSBwb2ludGVyLiAqLwogCi0gICAgLy8gTk9URTogVGhpcyBmdW5jdGlvbiBtdXN0IGFsc28gaGFuZGxlIHJvdW5kaW5nIHRvIHBhZ2UgYm91bmRhcmllcywKLSAgICAvLyAgICAgICBzaW5jZSB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbWFwIGluIHNoYXJlZCBtZW1vcnkgYnVmZmVycwotICAgIC8vICAgICAgIGFsbG9jYXRlZCB3aXRoIFBNX21hcFBoeXNpY2FsQWRkcigpLiBIZW5jZSBpZiB5b3UgYWxpZ25lZAotICAgIC8vICAgICAgIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFib3ZlLCB0aGVuIHlvdSBhbHNvIG5lZWQgdG8gZG8gaXQgaGVyZS4KKyAgICAvKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIG11c3QgYWxzbyBoYW5kbGUgcm91bmRpbmcgdG8gcGFnZSBib3VuZGFyaWVzLCAqLworICAgIC8qICAgICAgIHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBtYXAgaW4gc2hhcmVkIG1lbW9yeSBidWZmZXJzICovCisgICAgLyogICAgICAgYWxsb2NhdGVkIHdpdGggUE1fbWFwUGh5c2ljYWxBZGRyKCkuIEhlbmNlIGlmIHlvdSBhbGlnbmVkICovCisgICAgLyogICAgICAgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYWJvdmUsIHRoZW4geW91IGFsc28gbmVlZCB0byBkbyBpdCBoZXJlLiAqLwogICAgIHJldHVybiBiYXNlOwogfQogCkBAIC01NjMsMTEgKzU2MywxMSBAQAogICAgIHVpbnQgcl9zZWcsCiAgICAgdWludCByX29mZikKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIG1hcHMgYSByZWFsIG1vZGUgbWVtb3J5IHBvaW50ZXIgaW50byB0aGUKLSAgICAvLyAgICAgICBjYWxsaW5nIHByb2Nlc3NlcyBhZGRyZXNzIHNwYWNlIGFzIGEgMzItYml0IG5lYXIgcG9pbnRlci4gSWYKLSAgICAvLyAgICAgICB5b3UgZG8gbm90IHN1cHBvcnQgQklPUyBhY2Nlc3MsIHNpbXBseSByZXR1cm4gTlVMTCBoZXJlLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gbWFwcyBhIHJlYWwgbW9kZSBtZW1vcnkgcG9pbnRlciBpbnRvIHRoZSAqLworICAgIC8qICAgICAgIGNhbGxpbmcgcHJvY2Vzc2VzIGFkZHJlc3Mgc3BhY2UgYXMgYSAzMi1iaXQgbmVhciBwb2ludGVyLiBJZiAqLworICAgIC8qICAgICAgIHlvdSBkbyBub3Qgc3VwcG9ydCBCSU9TIGFjY2Vzcywgc2ltcGx5IHJldHVybiBOVUxMIGhlcmUuICovCiAgICAgaWYgKCF6ZXJvUHRyKQotICAgICAgICB6ZXJvUHRyID0gUE1fbWFwUGh5c2ljYWxBZGRyKDAsMHhGRkZGRik7CisJemVyb1B0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigwLDB4RkZGRkYpOwogICAgIHJldHVybiAodm9pZCopKHplcm9QdHIgKyBNS19QSFlTKHJfc2VnLHJfb2ZmKSk7CiB9CiAKQEAgLTU4MCwxMCArNTgwLDEwIEBACiAgICAgdWludCAqcl9zZWcsCiAgICAgdWludCAqcl9vZmYpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBibG9jayBvZiByZWFsIG1vZGUgbWVtb3J5IGZvciB0aGUKLSAgICAvLyAgICAgICBjYWxsaW5nIHByb2Nlc3MgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHJlYWwgbW9kZSBCSU9TCi0gICAgLy8gICAgICAgZnVuY3Rpb25zLiBJZiB5b3UgZG8gbm90IHN1cHBvcnQgQklPUyBhY2Nlc3MsIHNpbXBseSByZXR1cm4KLSAgICAvLyAgICAgICBOVUxMIGhlcmUuCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBibG9jayBvZiByZWFsIG1vZGUgbWVtb3J5IGZvciB0aGUgKi8KKyAgICAvKiAgICAgICBjYWxsaW5nIHByb2Nlc3MgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHJlYWwgbW9kZSBCSU9TICovCisgICAgLyogICAgICAgZnVuY3Rpb25zLiBJZiB5b3UgZG8gbm90IHN1cHBvcnQgQklPUyBhY2Nlc3MsIHNpbXBseSByZXR1cm4gKi8KKyAgICAvKiAgICAgICBOVUxMIGhlcmUuICovCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTU5NCw4ICs1OTQsOCBAQAogdm9pZCBQTUFQSSBQTV9mcmVlUmVhbFNlZygKICAgICB2b2lkICptZW0pCiB7Ci0gICAgLy8gVE9ETzogRnJlZXMgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCByZWFsIG1vZGUgbWVtb3J5IGJsb2NrLiBJZiB5b3UKLSAgICAvLyAgICAgICBkbyBub3Qgc3VwcG9ydCBCSU9TIGFjY2VzcywgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1wdHkuCisgICAgLyogVE9ETzogRnJlZXMgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCByZWFsIG1vZGUgbWVtb3J5IGJsb2NrLiBJZiB5b3UgKi8KKyAgICAvKiAgICAgICBkbyBub3Qgc3VwcG9ydCBCSU9TIGFjY2VzcywgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1wdHkuICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02MDYsOSArNjA2LDkgQEAKICAgICBpbnQgaW50bm8sCiAgICAgRFBNSV9yZWdzICpyZWdzKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIHJlYWwgbW9kZSBCSU9TIHVzaW5nIHRoZSBwYXNzZWQgaW4KLSAgICAvLyAgICAgICByZWdpc3RlciBzdHJ1Y3R1cmUuIElmIHlvdSBkbyBub3Qgc3VwcG9ydCByZWFsIG1vZGUgQklPUwotICAgIC8vICAgICAgIGFjY2VzcywgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1wdHkuCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgcmVhbCBtb2RlIEJJT1MgdXNpbmcgdGhlIHBhc3NlZCBpbiAqLworICAgIC8qICAgICAgIHJlZ2lzdGVyIHN0cnVjdHVyZS4gSWYgeW91IGRvIG5vdCBzdXBwb3J0IHJlYWwgbW9kZSBCSU9TICovCisgICAgLyogICAgICAgYWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBlbXB0eS4gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYyMCw5ICs2MjAsOSBAQAogICAgIFJNUkVHUyAqaW4sCiAgICAgUk1SRUdTICpvdXQpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgcmVhbCBtb2RlIEJJT1MgdXNpbmcgdGhlIHBhc3NlZCBpbgotICAgIC8vICAgICAgIHJlZ2lzdGVyIHN0cnVjdHVyZS4gSWYgeW91IGRvIG5vdCBzdXBwb3J0IHJlYWwgbW9kZSBCSU9TCi0gICAgLy8gICAgICAgYWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gMC4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSByZWFsIG1vZGUgQklPUyB1c2luZyB0aGUgcGFzc2VkIGluICovCisgICAgLyogICAgICAgcmVnaXN0ZXIgc3RydWN0dXJlLiBJZiB5b3UgZG8gbm90IHN1cHBvcnQgcmVhbCBtb2RlIEJJT1MgKi8KKyAgICAvKiAgICAgICBhY2Nlc3MsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiAwLiAqLwogICAgIHJldHVybiAwOwogfQogCkBAIC02MzYsOSArNjM2LDkgQEAKICAgICBSTVJFR1MgKm91dCwKICAgICBSTVNSRUdTICpzcmVncykKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSByZWFsIG1vZGUgQklPUyB1c2luZyB0aGUgcGFzc2VkIGluCi0gICAgLy8gICAgICAgcmVnaXN0ZXIgc3RydWN0dXJlLiBJZiB5b3UgZG8gbm90IHN1cHBvcnQgcmVhbCBtb2RlIEJJT1MKLSAgICAvLyAgICAgICBhY2Nlc3MsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiAwLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIHJlYWwgbW9kZSBCSU9TIHVzaW5nIHRoZSBwYXNzZWQgaW4gKi8KKyAgICAvKiAgICAgICByZWdpc3RlciBzdHJ1Y3R1cmUuIElmIHlvdSBkbyBub3Qgc3VwcG9ydCByZWFsIG1vZGUgQklPUyAqLworICAgIC8qICAgICAgIGFjY2VzcywgdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIDAuICovCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTY1Miw5ICs2NTIsOSBAQAogICAgIFJNUkVHUyAqaW4sCiAgICAgUk1TUkVHUyAqc3JlZ3MpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBjYWxscyBhIHJlYWwgbW9kZSBmYXIgZnVuY3Rpb24gd2l0aCBhIGZhciBjYWxsLgotICAgIC8vICAgICAgIElmIHlvdSBkbyBub3Qgc3VwcG9ydCBCSU9TIGFjY2VzcywgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKLSAgICAvLyAgICAgICBlbXB0eS4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGEgcmVhbCBtb2RlIGZhciBmdW5jdGlvbiB3aXRoIGEgZmFyIGNhbGwuICovCisgICAgLyogICAgICAgSWYgeW91IGRvIG5vdCBzdXBwb3J0IEJJT1MgYWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSAqLworICAgIC8qICAgICAgIGVtcHR5LiAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNjY1LDkgKzY2NSw5IEBACiAgICAgdWxvbmcgKnBoeXNpY2FsLAogICAgIHVsb25nICp0b3RhbCkKIHsKLSAgICAvLyBUT0RPOiBSZXBvcnQgdGhlIGFtb3VudCBvZiBhdmFpbGFibGUgbWVtb3J5LCBib3RoIHRoZSBhbW91bnQgb2YKLSAgICAvLyAgICAgICBwaHlzaWNhbCBtZW1vcnkgbGVmdCBhbmQgdGhlIGFtb3VudCBvZiB2aXJ0dWFsIG1lbW9yeSBsZWZ0LgotICAgIC8vICAgICAgIElmIHRoZSBPUyBkb2VzIG5vdCBwcm92aWRlIHRoZXNlIHNlcnZpY2VzLCByZXBvcnQgMCdzLgorICAgIC8qIFRPRE86IFJlcG9ydCB0aGUgYW1vdW50IG9mIGF2YWlsYWJsZSBtZW1vcnksIGJvdGggdGhlIGFtb3VudCBvZiAqLworICAgIC8qICAgICAgIHBoeXNpY2FsIG1lbW9yeSBsZWZ0IGFuZCB0aGUgYW1vdW50IG9mIHZpcnR1YWwgbWVtb3J5IGxlZnQuICovCisgICAgLyogICAgICAgSWYgdGhlIE9TIGRvZXMgbm90IHByb3ZpZGUgdGhlc2Ugc2VydmljZXMsIHJlcG9ydCAwJ3MuICovCiAgICAgKnBoeXNpY2FsID0gKnRvdGFsID0gMDsKIH0KIApAQCAtNjgxLDEwICs2ODEsMTAgQEAKICAgICBpYm9vbCBjb250aWd1b3VzLAogICAgIGlib29sIGJlbG93MTZNKQogewotICAgIC8vIFRPRE86IEFsbG9jYXRlIGEgYmxvY2sgb2YgbG9ja2VkLCBwaHlzaWNhbCBtZW1vcnkgb2YgdGhlIHNwZWNpZmllZAotICAgIC8vICAgICAgIHNpemUuIFRoaXMgaXMgdXNlZCBmb3IgYnVzIG1hc3RlciBvcGVyYXRpb25zLiBJZiB0aGlzIGlzIG5vdAotICAgIC8vICAgICAgIHN1cHBvcnRlZCBieSB0aGUgT1MsIHJldHVybiBOVUxMIGFuZCBidXMgbWFzdGVyaW5nIHdpbGwgbm90Ci0gICAgLy8gICAgICAgYmUgdXNlZC4KKyAgICAvKiBUT0RPOiBBbGxvY2F0ZSBhIGJsb2NrIG9mIGxvY2tlZCwgcGh5c2ljYWwgbWVtb3J5IG9mIHRoZSBzcGVjaWZpZWQgKi8KKyAgICAvKiAgICAgICBzaXplLiBUaGlzIGlzIHVzZWQgZm9yIGJ1cyBtYXN0ZXIgb3BlcmF0aW9ucy4gSWYgdGhpcyBpcyBub3QgKi8KKyAgICAvKiAgICAgICBzdXBwb3J0ZWQgYnkgdGhlIE9TLCByZXR1cm4gTlVMTCBhbmQgYnVzIG1hc3RlcmluZyB3aWxsIG5vdCAqLworICAgIC8qICAgICAgIGJlIHVzZWQuICovCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTY5Nyw3ICs2OTcsNyBAQAogICAgIHVpbnQgc2l6ZSwKICAgICBpYm9vbCBjb250aWd1b3VzKQogewotICAgIC8vIFRPRE86IEZyZWUgYSBtZW1vcnkgYmxvY2sgYWxsb2NhdGVkIHdpdGggUE1fYWxsb2NMb2NrZWRNZW0uCisgICAgLyogVE9ETzogRnJlZSBhIG1lbW9yeSBibG9jayBhbGxvY2F0ZWQgd2l0aCBQTV9hbGxvY0xvY2tlZE1lbS4gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTcwOSw5ICs3MDksOSBAQAogewogICAgIFJNUkVHUyAgcmVnczsKIAotICAgIC8vIFRPRE86IFRoaXMgZG9lcyBhIGJhbmsgc3dpdGNoIGZ1bmN0aW9uIGJ5IGNhbGxpbmcgdGhlIHJlYWwgbW9kZQotICAgIC8vICAgICAgIFZFU0EgQklPUy4gSWYgeW91IGRvIG5vdCBzdXBwb3J0IEJJT1MgYWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHNob3VsZAotICAgIC8vICAgICAgIGJlIGVtcHR5LgorICAgIC8qIFRPRE86IFRoaXMgZG9lcyBhIGJhbmsgc3dpdGNoIGZ1bmN0aW9uIGJ5IGNhbGxpbmcgdGhlIHJlYWwgbW9kZSAqLworICAgIC8qICAgICAgIFZFU0EgQklPUy4gSWYgeW91IGRvIG5vdCBzdXBwb3J0IEJJT1MgYWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCAqLworICAgIC8qICAgICAgIGJlIGVtcHR5LiAqLwogICAgIHJlZ3MueC5heCA9IDB4NEYwNTsKICAgICByZWdzLnguYnggPSAweDAwMDA7CiAgICAgcmVncy54LmR4ID0gYmFuazsKQEAgLTcyNyw5ICs3MjcsOSBAQAogewogICAgIFJNUkVHUyAgcmVnczsKIAotICAgIC8vIFRPRE86IFRoaXMgZG9lcyBhIGJhbmsgc3dpdGNoIGZ1bmN0aW9uIGJ5IGNhbGxpbmcgdGhlIHJlYWwgbW9kZQotICAgIC8vICAgICAgIFZFU0EgQklPUy4gSWYgeW91IGRvIG5vdCBzdXBwb3J0IEJJT1MgYWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHNob3VsZAotICAgIC8vICAgICAgIGJlIGVtcHR5LgorICAgIC8qIFRPRE86IFRoaXMgZG9lcyBhIGJhbmsgc3dpdGNoIGZ1bmN0aW9uIGJ5IGNhbGxpbmcgdGhlIHJlYWwgbW9kZSAqLworICAgIC8qICAgICAgIFZFU0EgQklPUy4gSWYgeW91IGRvIG5vdCBzdXBwb3J0IEJJT1MgYWNjZXNzLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCAqLworICAgIC8qICAgICAgIGJlIGVtcHR5LiAqLwogICAgIHJlZ3MueC5heCA9IDB4NEYwNTsKICAgICByZWdzLnguYnggPSAweDAwMDA7CiAgICAgcmVncy54LmR4ID0gYmFuazsKQEAgLTc1MSw5ICs3NTEsOSBAQAogewogICAgIFJNUkVHUyAgcmVnczsKIAotICAgIC8vIFRPRE86IFRoaXMgY2hhbmdlcyB0aGUgZGlzcGxheSBzdGFydCBhZGRyZXNzIGJ5IGNhbGxpbmcgdGhlIHJlYWwgbW9kZQotICAgIC8vICAgICAgIFZFU0EgQklPUy4gSWYgeW91IGRvIG5vdCBzdXBwb3J0IEJJT1MgYWNjZXNzLCB0aGlzIGZ1bmN0aW9uCi0gICAgLy8gICAgICAgc2hvdWxkIGJlIGVtcHR5LgorICAgIC8qIFRPRE86IFRoaXMgY2hhbmdlcyB0aGUgZGlzcGxheSBzdGFydCBhZGRyZXNzIGJ5IGNhbGxpbmcgdGhlIHJlYWwgbW9kZSAqLworICAgIC8qICAgICAgIFZFU0EgQklPUy4gSWYgeW91IGRvIG5vdCBzdXBwb3J0IEJJT1MgYWNjZXNzLCB0aGlzIGZ1bmN0aW9uICovCisgICAgLyogICAgICAgc2hvdWxkIGJlIGVtcHR5LiAqLwogICAgIHJlZ3MueC5heCA9IDB4NEYwNzsKICAgICByZWdzLnguYnggPSB3YWl0VlJUOwogICAgIHJlZ3MueC5jeCA9IHg7CkBAIC03NzAsMTcgKzc3MCwxNyBAQAogICAgIHVsb25nIGxlbmd0aCwKICAgICB1aW50IHR5cGUpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgZW5hYmxlIFBlbnRpdW0gUHJvIGFuZCBQZW50aXVtIElJIE1UUlIKLSAgICAvLyAgICAgICB3cml0ZSBjb21iaW5pbmcgZm9yIHRoZSBwYXNzZWQgaW4gcGh5c2ljYWwgbWVtb3J5IGJhc2UgYWRkcmVzcwotICAgIC8vICAgICAgIGFuZCBsZW5ndGguIE5vcm1hbGx5IHRoaXMgaXMgZG9uZSB2aWEgY2FsbHMgdG8gYW4gT1Mgc3BlY2lmaWMKLSAgICAvLyAgICAgICBkZXZpY2UgZHJpdmVyIGFzIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBhdCByaW5nIDAuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBUaGlzIGlzIGEgKnZlcnkqIGltcG9ydGFudCBmdW5jdGlvbiB0byBpbXBsZW1lbnQhIElmIHlvdSBkbwotICAgIC8vICAgICAgIG5vdCBpbXBsZW1lbnQsIGdyYXBoaWNzIHBlcmZvcm1hbmNlIG9uIHRoZSBsYXRlc3QgSW50ZWwgY2hpcHMKLSAgICAvLyAgICAgICB3aWxsIGJlIHNldmVybHkgaW1wYWlyZWQuIEZvciBzYW1wbGUgY29kZSB0aGF0IGNhbiBiZSB1c2VkCi0gICAgLy8gICAgICAgZGlyZWN0bHkgaW4gYSByaW5nIDAgZGV2aWNlIGRyaXZlciwgc2VlIHRoZSBNU0RPUyBpbXBsZW1lbnRhdGlvbgotICAgIC8vICAgICAgIHdoaWNoIGluY2x1ZGVzIGFzc2VtYmxlciBjb2RlIHRvIGRvIHRoaXMgZGlyZWN0bHkgKGlmIHRoZQotICAgIC8vICAgICAgIHByb2dyYW0gaXMgcnVubmluZyBhdCByaW5nIDApLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGVuYWJsZSBQZW50aXVtIFBybyBhbmQgUGVudGl1bSBJSSBNVFJSICovCisgICAgLyogICAgICAgd3JpdGUgY29tYmluaW5nIGZvciB0aGUgcGFzc2VkIGluIHBoeXNpY2FsIG1lbW9yeSBiYXNlIGFkZHJlc3MgKi8KKyAgICAvKiAgICAgICBhbmQgbGVuZ3RoLiBOb3JtYWxseSB0aGlzIGlzIGRvbmUgdmlhIGNhbGxzIHRvIGFuIE9TIHNwZWNpZmljICovCisgICAgLyogICAgICAgZGV2aWNlIGRyaXZlciBhcyB0aGlzIGNhbiBvbmx5IGJlIGRvbmUgYXQgcmluZyAwLiAqLworICAgIC8qICovCisgICAgLyogTk9URTogVGhpcyBpcyBhICp2ZXJ5KiBpbXBvcnRhbnQgZnVuY3Rpb24gdG8gaW1wbGVtZW50ISBJZiB5b3UgZG8gKi8KKyAgICAvKiAgICAgICBub3QgaW1wbGVtZW50LCBncmFwaGljcyBwZXJmb3JtYW5jZSBvbiB0aGUgbGF0ZXN0IEludGVsIGNoaXBzICovCisgICAgLyogICAgICAgd2lsbCBiZSBzZXZlcmx5IGltcGFpcmVkLiBGb3Igc2FtcGxlIGNvZGUgdGhhdCBjYW4gYmUgdXNlZCAqLworICAgIC8qICAgICAgIGRpcmVjdGx5IGluIGEgcmluZyAwIGRldmljZSBkcml2ZXIsIHNlZSB0aGUgTVNET1MgaW1wbGVtZW50YXRpb24gKi8KKyAgICAvKiAgICAgICB3aGljaCBpbmNsdWRlcyBhc3NlbWJsZXIgY29kZSB0byBkbyB0aGlzIGRpcmVjdGx5IChpZiB0aGUgKi8KKyAgICAvKiAgICAgICBwcm9ncmFtIGlzIHJ1bm5pbmcgYXQgcmluZyAwKS4gKi8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTc5MywxOSArNzkzLDE5IEBACiAgICAgdWxvbmcgQklPU1BoeXNBZGRyLAogICAgIHZvaWQgKm1hcHBlZEJJT1MpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJ1biB0aGUgQklPUyBQT1NUIGNvZGUgb24gYSBzZWNvbmRhcnkKLSAgICAvLyAgICAgICBjb250cm9sbGVyIHRvIGluaXRpYWxpc2UgaXQgZm9yIHVzZS4gVGhpcyBpcyBub3QgbmVjZXNzYXJ5Ci0gICAgLy8gICAgICAgZm9yIG11bHRpLWNvbnRyb2xsZXIgb3BlcmF0aW9uLCBidXQgaXQgd2lsbCBtYWtlIGl0IGEgbG90Ci0gICAgLy8gICAgICAgbW9yZSBjb252ZW5pY2VudCBmb3IgZW5kIHVzZXJzIChvdGhlcndpc2UgdGhleSBoYXZlIHRvIGJvb3QKLSAgICAvLyAgICAgICB0aGUgc3lzdGVtIG9uY2Ugd2l0aCB0aGUgc2Vjb25kYXJ5IGNvbnRyb2xsZXIgYXMgcHJpbWFyeSwgYW5kCi0gICAgLy8gICAgICAgdGhlbiBib290IHdpdGggYm90aCBjb250cm9sbGVycyBpbnN0YWxsZWQpLgotICAgIC8vCi0gICAgLy8gICAgICAgRXZlbiBpZiB5b3UgZG9uJ3Qgc3VwcG9ydCBmdWxsIEJJT1MgYWNjZXNzLCBpdCB3b3VsZCBiZQotICAgIC8vICAgICAgIGFkdmlzZWFibGUgdG8gYmUgYWJsZSB0byBQT1NUIHRoZSBzZWNvbmRhcnkgY29udHJvbGxlcnMgaW4gdGhlCi0gICAgLy8gICAgICAgc3lzdGVtIHVzaW5nIHRoaXMgZnVuY3Rpb24gYXMgYSBtaW5pbXVtIHJlcXVpcmVtZW50LiBTb21lCi0gICAgLy8gICAgICAgZ3JhcGhpY3MgaGFyZHdhcmUgaGFzIHJlZ2lzdGVycyB0aGF0IGNvbnRhaW4gdmFsdWVzIHRoYXQgb25seQotICAgIC8vICAgICAgIHRoZSBCSU9TIGtub3dzIGFib3V0LCB3aGljaCBtYWtlcyBicmluZyB1cCBhIGNhcmQgZnJvbSBjb2xkCi0gICAgLy8gICAgICAgcmVzZXQgZGlmZmljdWx0IGlmIHRoZSBCSU9TIGhhcyBub3QgUE9TVCdlZCBpdC4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcnVuIHRoZSBCSU9TIFBPU1QgY29kZSBvbiBhIHNlY29uZGFyeSAqLworICAgIC8qICAgICAgIGNvbnRyb2xsZXIgdG8gaW5pdGlhbGlzZSBpdCBmb3IgdXNlLiBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgKi8KKyAgICAvKiAgICAgICBmb3IgbXVsdGktY29udHJvbGxlciBvcGVyYXRpb24sIGJ1dCBpdCB3aWxsIG1ha2UgaXQgYSBsb3QgKi8KKyAgICAvKiAgICAgICBtb3JlIGNvbnZlbmljZW50IGZvciBlbmQgdXNlcnMgKG90aGVyd2lzZSB0aGV5IGhhdmUgdG8gYm9vdCAqLworICAgIC8qICAgICAgIHRoZSBzeXN0ZW0gb25jZSB3aXRoIHRoZSBzZWNvbmRhcnkgY29udHJvbGxlciBhcyBwcmltYXJ5LCBhbmQgKi8KKyAgICAvKiAgICAgICB0aGVuIGJvb3Qgd2l0aCBib3RoIGNvbnRyb2xsZXJzIGluc3RhbGxlZCkuICovCisgICAgLyogKi8KKyAgICAvKiAgICAgICBFdmVuIGlmIHlvdSBkb24ndCBzdXBwb3J0IGZ1bGwgQklPUyBhY2Nlc3MsIGl0IHdvdWxkIGJlICovCisgICAgLyogICAgICAgYWR2aXNlYWJsZSB0byBiZSBhYmxlIHRvIFBPU1QgdGhlIHNlY29uZGFyeSBjb250cm9sbGVycyBpbiB0aGUgKi8KKyAgICAvKiAgICAgICBzeXN0ZW0gdXNpbmcgdGhpcyBmdW5jdGlvbiBhcyBhIG1pbmltdW0gcmVxdWlyZW1lbnQuIFNvbWUgKi8KKyAgICAvKiAgICAgICBncmFwaGljcyBoYXJkd2FyZSBoYXMgcmVnaXN0ZXJzIHRoYXQgY29udGFpbiB2YWx1ZXMgdGhhdCBvbmx5ICovCisgICAgLyogICAgICAgdGhlIEJJT1Mga25vd3MgYWJvdXQsIHdoaWNoIG1ha2VzIGJyaW5nIHVwIGEgY2FyZCBmcm9tIGNvbGQgKi8KKyAgICAvKiAgICAgICByZXNldCBkaWZmaWN1bHQgaWYgdGhlIEJJT1MgaGFzIG5vdCBQT1NUJ2VkIGl0LiAqLwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtODE3LDggKzgxNyw4IEBACiBQTV9NT0RVTEUgUE1BUEkgUE1fbG9hZExpYnJhcnkoCiAgICAgY29uc3QgY2hhciAqc3pETExOYW1lKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGxvYWQgYSBuYXRpdmUgc2hhcmVkIGxpYnJhcnkgZnJvbSBkaXNrCi0gICAgLy8gICAgICAgZ2l2ZW4gdGhlIHBhdGggdG8gdGhlIGxpYnJhcnkuCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgbG9hZCBhIG5hdGl2ZSBzaGFyZWQgbGlicmFyeSBmcm9tIGRpc2sgKi8KKyAgICAvKiAgICAgICBnaXZlbiB0aGUgcGF0aCB0byB0aGUgbGlicmFyeS4gKi8KICAgICAodm9pZClzekRMTE5hbWU7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC04MzEsOCArODMxLDggQEAKICAgICBQTV9NT0RVTEUgaE1vZHVsZSwKICAgICBjb25zdCBjaGFyICpzelByb2NOYW1lKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgYWRkcmVzcyBvZiBhIG5hbWVkIHByb2NlZHVyZQotICAgIC8vICAgICAgIGZyb20gYSBuYXRpdmUgc2hhcmVkIGxpYnJhcnkuCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIGEgbmFtZWQgcHJvY2VkdXJlICovCisgICAgLyogICAgICAgZnJvbSBhIG5hdGl2ZSBzaGFyZWQgbGlicmFyeS4gKi8KICAgICAodm9pZCloTW9kdWxlOwogICAgICh2b2lkKXN6UHJvY05hbWU7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC04NDUsNyArODQ1LDcgQEAKIHZvaWQgUE1BUEkgUE1fZnJlZUxpYnJhcnkoCiAgICAgUE1fTU9EVUxFIGhNb2R1bGUpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBmcmVlIGEgcHJldmlvdXNseSBsb2FkZWQgbmF0aXZlIHNoYXJlZCBsaWJyYXJ5LgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gZnJlZSBhIHByZXZpb3VzbHkgbG9hZGVkIG5hdGl2ZSBzaGFyZWQgbGlicmFyeS4gKi8KICAgICAodm9pZCloTW9kdWxlOwogfQogCkBAIC04NjAsOCArODYwLDggQEAKIGludCBQTUFQSSBQTV9zZXRJT1BMKAogICAgIGludCBsZXZlbCkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBlbmFibGUgSU9QTCBmb3IgdGhlIHRhc2sgKGlmIElPUEwgaXMKLSAgICAvLyAgICAgICBub3QgYWx3YXlzIGVuYWJsZWQgZm9yIHRoZSBhcHAgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zKS4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBlbmFibGUgSU9QTCBmb3IgdGhlIHRhc2sgKGlmIElPUEwgaXMgKi8KKyAgICAvKiAgICAgICBub3QgYWx3YXlzIGVuYWJsZWQgZm9yIHRoZSBhcHAgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zKS4gKi8KICAgICByZXR1cm4gbGV2ZWw7CiB9CiAKQEAgLTg3Myw5ICs4NzMsOSBAQAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogICAgIFBNX2ZpbmREYXRhICpmaW5kRGF0YSkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBzdGFydCBhIGRpcmVjdG9yeSBlbnVtZXJhdGlvbiBzZWFyY2gKLSAgICAvLyAgICAgICBnaXZlbiB0aGUgZmlsZW5hbWUgKHdpdGggd2lsZGNhcmRzKS4gVGhlIGRhdGEgc2hvdWxkIGJlCi0gICAgLy8gICAgICAgY29udmVydGVkIGFuZCByZXR1cm5lZCBpbiB0aGUgZmluZERhdGEgc3RhbmRhcmQgZm9ybS4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBzdGFydCBhIGRpcmVjdG9yeSBlbnVtZXJhdGlvbiBzZWFyY2ggKi8KKyAgICAvKiAgICAgICBnaXZlbiB0aGUgZmlsZW5hbWUgKHdpdGggd2lsZGNhcmRzKS4gVGhlIGRhdGEgc2hvdWxkIGJlICovCisgICAgLyogICAgICAgY29udmVydGVkIGFuZCByZXR1cm5lZCBpbiB0aGUgZmluZERhdGEgc3RhbmRhcmQgZm9ybS4gKi8KICAgICAodm9pZClmaWxlbmFtZTsKICAgICAodm9pZClmaW5kRGF0YTsKICAgICByZXR1cm4gUE1fRklMRV9JTlZBTElEOwpAQCAtODg5LDEwICs4ODksMTAgQEAKICAgICB2b2lkICpoYW5kbGUsCiAgICAgUE1fZmluZERhdGEgKmZpbmREYXRhKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpbmQgdGhlIG5leHQgZmlsZSBpbiBkaXJlY3RvcnkgZW51bWVyYXRpb24KLSAgICAvLyAgICAgICBzZWFyY2ggZ2l2ZW4gdGhlIHNlYXJjaCBjcml0ZXJpYSBkZWZpbmVkIGluIHRoZSBjYWxsIHRvCi0gICAgLy8gICAgICAgUE1fZmluZEZpcnN0RmlsZS4gVGhlIGRhdGEgc2hvdWxkIGJlIGNvbnZlcnRlZCBhbmQgcmV0dXJuZWQKLSAgICAvLyAgICAgICBpbiB0aGUgZmluZERhdGEgc3RhbmRhcmQgZm9ybS4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmaW5kIHRoZSBuZXh0IGZpbGUgaW4gZGlyZWN0b3J5IGVudW1lcmF0aW9uICovCisgICAgLyogICAgICAgc2VhcmNoIGdpdmVuIHRoZSBzZWFyY2ggY3JpdGVyaWEgZGVmaW5lZCBpbiB0aGUgY2FsbCB0byAqLworICAgIC8qICAgICAgIFBNX2ZpbmRGaXJzdEZpbGUuIFRoZSBkYXRhIHNob3VsZCBiZSBjb252ZXJ0ZWQgYW5kIHJldHVybmVkICovCisgICAgLyogICAgICAgaW4gdGhlIGZpbmREYXRhIHN0YW5kYXJkIGZvcm0uICovCiAgICAgKHZvaWQpaGFuZGxlOwogICAgICh2b2lkKWZpbmREYXRhOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTkwNSw4ICs5MDUsOCBAQAogdm9pZCBQTUFQSSBQTV9maW5kQ2xvc2UoCiAgICAgdm9pZCAqaGFuZGxlKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNsb3NlIHRoZSBmaW5kIHByb2Nlc3MuIFRoaXMgbWF5IGRvCi0gICAgLy8gICAgICAgbm90aGluZyBmb3Igc29tZSBPUydlcy4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjbG9zZSB0aGUgZmluZCBwcm9jZXNzLiBUaGlzIG1heSBkbyAqLworICAgIC8qICAgICAgIG5vdGhpbmcgZm9yIHNvbWUgT1MnZXMuICovCiAgICAgKHZvaWQpaGFuZGxlOwogfQogCkBAIC05MjcsNyArOTI3LDcgQEAKICAgICBjaGFyIGRyaXZlKQogewogICAgIGlmIChkcml2ZSA9PSAzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTk1NCw3ICs5NTQsNyBAQAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogICAgIHVpbnQgYXR0cmliKQogewotICAgIC8vIFRPRE86IFNldCB0aGUgZmlsZSBhdHRyaWJ1dGVzIGZvciBhIGZpbGUKKyAgICAvKiBUT0RPOiBTZXQgdGhlIGZpbGUgYXR0cmlidXRlcyBmb3IgYSBmaWxlICovCiAgICAgKHZvaWQpZmlsZW5hbWU7CiAgICAgKHZvaWQpYXR0cmliOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc3R1Yi96dGltZXIuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3N0dWIvenRpbWVyLmMKaW5kZXggOWJhZDZjMC4uODIwZTI5MiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vc3R1Yi96dGltZXIuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS9zdHViL3p0aW1lci5jCkBAIC0zNiw3ICszNiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBfX1pUaW1lckluaXQodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBEbyBhbnkgc3BlY2lmaWMgaW50ZXJuYWwgaW5pdGlhbGlzYXRpb24gaW4gaGVyZQorICAgIC8qIFRPRE86IERvIGFueSBzcGVjaWZpYyBpbnRlcm5hbCBpbml0aWFsaXNhdGlvbiBpbiBoZXJlICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00Niw4ICs0Niw4IEBACiBzdGF0aWMgdm9pZCBfX0xaVGltZXJPbigKICAgICBMWlRpbWVyT2JqZWN0ICp0bSkKIHsKLSAgICAvLyBUT0RPOiBTdGFydCB0aGUgWmVuIFRpbWVyIGNvdW50aW5nLiBUaGlzIHNob3VsZCBiZSBhIG1hY3JvIGlmCi0gICAgLy8gICAgICAgcG9zc2libGUuCisgICAgLyogVE9ETzogU3RhcnQgdGhlIFplbiBUaW1lciBjb3VudGluZy4gVGhpcyBzaG91bGQgYmUgYSBtYWNybyBpZiAqLworICAgIC8qICAgICAgIHBvc3NpYmxlLiAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTcsOCArNTcsOCBAQAogc3RhdGljIHVsb25nIF9fTFpUaW1lckxhcCgKICAgICBMWlRpbWVyT2JqZWN0ICp0bSkKIHsKLSAgICAvLyBUT0RPOiBDb21wdXRlIHRoZSBsYXAgdGltZSBiZXR3ZWVuIHRoZSBjdXJyZW50IHRpbWUgYW5kIHdoZW4gdGhlCi0gICAgLy8gICAgICAgdGltZXIgd2FzIHN0YXJ0ZWQuCisgICAgLyogVE9ETzogQ29tcHV0ZSB0aGUgbGFwIHRpbWUgYmV0d2VlbiB0aGUgY3VycmVudCB0aW1lIGFuZCB3aGVuIHRoZSAqLworICAgIC8qICAgICAgIHRpbWVyIHdhcyBzdGFydGVkLiAqLwogICAgIHJldHVybiAwOwogfQogCkBAIC02OSw3ICs2OSw3IEBACiBzdGF0aWMgdm9pZCBfX0xaVGltZXJPZmYoCiAgICAgTFpUaW1lck9iamVjdCAqdG0pCiB7Ci0gICAgLy8gVE9ETzogU3RvcCB0aGUgdGltZXIgY291bnRpbmcuIFNob3VsZCBiZSBhIG1hY3JvIGlmIHBvc3NpYmxlLgorICAgIC8qIFRPRE86IFN0b3AgdGhlIHRpbWVyIGNvdW50aW5nLiBTaG91bGQgYmUgYSBtYWNybyBpZiBwb3NzaWJsZS4gKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc5LDcgKzc5LDcgQEAKIHN0YXRpYyB1bG9uZyBfX0xaVGltZXJDb3VudCgKICAgICBMWlRpbWVyT2JqZWN0ICp0bSkKIHsKLSAgICAvLyBUT0RPOiBDb21wdXRlIHRoZSBlbGFwc2VkIHRpbWUgYW5kIHJldHVybiBpdC4gQWx3YXlzIG1pY3Jvc2Vjb25kcy4KKyAgICAvKiBUT0RPOiBDb21wdXRlIHRoZSBlbGFwc2VkIHRpbWUgYW5kIHJldHVybiBpdC4gQWx3YXlzIG1pY3Jvc2Vjb25kcy4gKi8KICAgICByZXR1cm4gMDsKIH0KIApAQCAtOTUsOSArOTUsOSBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB1bG9uZyBfX1VMWlJlYWRUaW1lKHZvaWQpCiB7Ci0gICAgLy8gVE9ETzogUmVhZCB0aGUgbG9uZyBwZXJpb2QgdGltZXIgZnJvbSB0aGUgT1MuIFRoZSByZXNvbHV0aW9uIG9mIHRoaXMKLSAgICAvLyAgICAgICB0aW1lciBzaG91bGQgYmUgYXJvdW5kIDEvMjAgb2YgYSBzZWNvbmQgZm9yIHRpbWluZyBsb25nCi0gICAgLy8gICAgICAgcGVyaW9kcyBpZiBwb3NzaWJsZS4KKyAgICAvKiBUT0RPOiBSZWFkIHRoZSBsb25nIHBlcmlvZCB0aW1lciBmcm9tIHRoZSBPUy4gVGhlIHJlc29sdXRpb24gb2YgdGhpcyAqLworICAgIC8qICAgICAgIHRpbWVyIHNob3VsZCBiZSBhcm91bmQgMS8yMCBvZiBhIHNlY29uZCBmb3IgdGltaW5nIGxvbmcgKi8KKyAgICAvKiAgICAgICBwZXJpb2RzIGlmIHBvc3NpYmxlLiAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvYWx0YnJrLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9hbHRicmsuYwppbmRleCA1ZDg5OWI3Li5iYTkwMjYyIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9hbHRicmsuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9hbHRicmsuYwpAQCAtNDcsNDMgKzQ3LDQzIEBACiB2b2lkIFBNQVBJIGJyZWFrSGFuZGxlcih1aW50IGJIaXQpCiB7CiAgICAgaWYgKGJIaXQpCi0gICAgICAgIGJyZWFrSGl0ID0gdHJ1ZTsKKwlicmVha0hpdCA9IHRydWU7CiAgICAgZWxzZQotICAgICAgICBjdHJsQ0hpdCA9IHRydWU7CisJY3RybENIaXQgPSB0cnVlOwogfQogCiBpbnQgbWFpbih2b2lkKQogewogICAgIHByaW50ZigiUHJvZ3JhbSBydW5uaW5nIGluICIpOwogICAgIHN3aXRjaCAoUE1fZ2V0TW9kZVR5cGUoKSkgewotICAgICAgICBjYXNlIFBNX3JlYWxNb2RlOgotICAgICAgICAgICAgcHJpbnRmKCJyZWFsIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fMjg2OgotICAgICAgICAgICAgcHJpbnRmKCIxNiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fMzg2OgotICAgICAgICAgICAgcHJpbnRmKCIzMiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwljYXNlIFBNX3JlYWxNb2RlOgorCSAgICBwcmludGYoInJlYWwgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fMjg2OgorCSAgICBwcmludGYoIjE2IGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fMzg2OgorCSAgICBwcmludGYoIjMyIGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCX0KIAogICAgIFBNX2luc3RhbGxBbHRCcmVha0hhbmRsZXIoYnJlYWtIYW5kbGVyKTsKICAgICBwcmludGYoIkNvbnRyb2wgQy9CcmVhayBpbnRlcnJ1cHQgaGFuZGxlciBpbnN0YWxsZWRcbiIpOwogICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGlmIChjdHJsQ0hpdCkgewotICAgICAgICAgICAgcHJpbnRmKCJDb2RlIHRlcm1pbWF0ZWQgd2l0aCBDdHJsLUMuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAoYnJlYWtIaXQpIHsKLSAgICAgICAgICAgIHByaW50ZigiQ29kZSB0ZXJtaW1hdGVkIHdpdGggQ3RybC1CcmVhay5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGlmIChQTV9rYmhpdCgpICYmIFBNX2dldGNoKCkgPT0gMHgxQikgewotICAgICAgICAgICAgcHJpbnRmKCJObyBicmVhayBjb2RlIGRldGVjdGVkIVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJIaXQgQ3RybC1DIG9yIEN0cmwtQnJlYWsgdG8gZXhpdCFcbiIpOwotICAgICAgICB9CisJaWYgKGN0cmxDSGl0KSB7CisJICAgIHByaW50ZigiQ29kZSB0ZXJtaW1hdGVkIHdpdGggQ3RybC1DLlxuIik7CisJICAgIGJyZWFrOworCSAgICB9CisJaWYgKGJyZWFrSGl0KSB7CisJICAgIHByaW50ZigiQ29kZSB0ZXJtaW1hdGVkIHdpdGggQ3RybC1CcmVhay5cbiIpOworCSAgICBicmVhazsKKwkgICAgfQorCWlmIChQTV9rYmhpdCgpICYmIFBNX2dldGNoKCkgPT0gMHgxQikgeworCSAgICBwcmludGYoIk5vIGJyZWFrIGNvZGUgZGV0ZWN0ZWQhXG4iKTsKKwkgICAgYnJlYWs7CisJICAgIH0KKwlwcmludGYoIkhpdCBDdHJsLUMgb3IgQ3RybC1CcmVhayB0byBleGl0IVxuIik7CisJfQogCiAgICAgUE1fcmVzdG9yZUJyZWFrSGFuZGxlcigpOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvYWx0Y3JpdC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvYWx0Y3JpdC5jCmluZGV4IGM1MzkwZjYuLmUxMzczMDcgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2FsdGNyaXQuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9hbHRjcml0LmMKQEAgLTU5LDI3ICs1OSwyNyBAQAogCiAgICAgcHJpbnRmKCJQcm9ncmFtIHJ1bm5pbmcgaW4gIik7CiAgICAgc3dpdGNoIChQTV9nZXRNb2RlVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgUE1fcmVhbE1vZGU6Ci0gICAgICAgICAgICBwcmludGYoInJlYWwgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV8yODY6Ci0gICAgICAgICAgICBwcmludGYoIjE2IGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV8zODY6Ci0gICAgICAgICAgICBwcmludGYoIjMyIGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWNhc2UgUE1fcmVhbE1vZGU6CisJICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV8yODY6CisJICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV8zODY6CisJICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJfQogCiAgICAgUE1faW5zdGFsbEFsdENyaXRpY2FsSGFuZGxlcihjcml0aWNhbEhhbmRsZXIpOwogICAgIHByaW50ZigiQ3JpdGljYWwgRXJyb3IgaGFuZGxlciBpbnN0YWxsZWQgLSB0cnlpbmcgdG8gcmVhZCBmcm9tIEE6IGRyaXZlLi4uXG4iKTsKICAgICBmID0gZm9wZW4oImE6XGJvZy5ib2ciLCJyYiIpOwogICAgIGlmIChmKSBmY2xvc2UoZik7CiAgICAgaWYgKGNyaXRpY2FsRXJyb3IpIHsKLSAgICAgICAgcHJpbnRmKCJDcml0aWNhbCBlcnJvciBvY2N1cmVkIG9uIElOVCAyMWggZnVuY3Rpb24gJTAyWCFcbiIsCi0gICAgICAgICAgICBheFZhbHVlID4+IDgpOwotICAgICAgICB9CisJcHJpbnRmKCJDcml0aWNhbCBlcnJvciBvY2N1cmVkIG9uIElOVCAyMWggZnVuY3Rpb24gJTAyWCFcbiIsCisJICAgIGF4VmFsdWUgPj4gOCk7CisJfQogICAgIGVsc2UKLSAgICAgICAgcHJpbnRmKCJDcml0aWNhbCBlcnJvciB3YXMgbm90IGNhdWdodCFcbiIpOworCXByaW50ZigiQ3JpdGljYWwgZXJyb3Igd2FzIG5vdCBjYXVnaHQhXG4iKTsKICAgICBQTV9yZXN0b3JlQ3JpdGljYWxIYW5kbGVyKCk7CiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9iaW9zcHRyLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9iaW9zcHRyLmMKaW5kZXggNDM2Njg0OC4uNWZhMzM4MiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvYmlvc3B0ci5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2Jpb3NwdHIuYwpAQCAtNjQsMjkgKzY0LDI5IEBACiAKICAgICBwcmludGYoIlByb2dyYW0gcnVubmluZyBpbiAiKTsKICAgICBzd2l0Y2ggKFBNX2dldE1vZGVUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBQTV9yZWFsTW9kZToKLSAgICAgICAgICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzI4NjoKLSAgICAgICAgICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzM4NjoKLSAgICAgICAgICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJY2FzZSBQTV9yZWFsTW9kZToKKwkgICAgcHJpbnRmKCJyZWFsIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzI4NjoKKwkgICAgcHJpbnRmKCIxNiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzM4NjoKKwkgICAgcHJpbnRmKCIzMiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwl9CiAKICAgICBiaW9zID0gUE1fZ2V0QklPU1BvaW50ZXIoKTsKICAgICBwcmludGYoIkhpdCBhbnkga2V5IHRvIHRlc3QsIEN0cmwtU2hpZnQtRXNjIHRvIHF1aXRcbiIpOwogICAgIHdoaWxlICghZG9uZSkgewotICAgICAgICBpZiAoS0JfSElUKCkpIHsKLSAgICAgICAgICAgIGMgPSBQTV9nZXRjaCgpOwotICAgICAgICAgICAgaWYgKGMgPT0gMCkgUE1fZ2V0Y2goKTsKLSAgICAgICAgICAgIHByaW50ZigiVElNRT0lLThsWCBTVD0lMDJYIENIQVI9JTAyWCAiLCBUSUNLUygpLCBLQl9TVEFULCBjKTsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAgIGlmICgoYyA9PSBFU0MpICYmIFNISUZUKCkgJiYgQ1RSTCgpKS8qIEN0cmwtU2hpZnQtRXNjICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoS0JfSElUKCkpIHsKKwkgICAgYyA9IFBNX2dldGNoKCk7CisJICAgIGlmIChjID09IDApIFBNX2dldGNoKCk7CisJICAgIHByaW50ZigiVElNRT0lLThsWCBTVD0lMDJYIENIQVI9JTAyWCAiLCBUSUNLUygpLCBLQl9TVEFULCBjKTsKKwkgICAgcHJpbnRmKCJcbiIpOworCSAgICBpZiAoKGMgPT0gRVNDKSAmJiBTSElGVCgpICYmIENUUkwoKSkvKiBDdHJsLVNoaWZ0LUVzYyAqLworCQlicmVhazsKKwkgICAgfQorCX0KIAogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvYmxvY2suYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2Jsb2NrLmMKaW5kZXggZTk0ODg3Mi4uMTVkNTAzYyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvYmxvY2suYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9ibG9jay5jCkBAIC02MSw5ICs2MSw5IEBACiAgICAgWlRpbWVySW5pdCgpOwogICAgIExaVGltZXJPbigpOwogICAgIGZvciAoaSA9IDA7IGkgPCBMT09QUzsgaSsrKSB7Ci0gICAgICAgIFBNX2Jsb2NrVW50aWxUaW1lb3V0KERFTEFZX01TRUNTKTsKLSAgICAgICAgUmVwb3J0VGltZShMWlRpbWVyTGFwKCkpOwotICAgICAgICB9CisJUE1fYmxvY2tVbnRpbFRpbWVvdXQoREVMQVlfTVNFQ1MpOworCVJlcG9ydFRpbWUoTFpUaW1lckxhcCgpKTsKKwl9CiAgICAgTFpUaW1lck9mZigpOwogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvYnJrLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9icmsuYwppbmRleCAzNTYxZmVlLi4xMGI2NDQ2IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9icmsuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9icmsuYwpAQCAtNDQsMzQgKzQ0LDM0IEBACiB7CiAgICAgcHJpbnRmKCJQcm9ncmFtIHJ1bm5pbmcgaW4gIik7CiAgICAgc3dpdGNoIChQTV9nZXRNb2RlVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgUE1fcmVhbE1vZGU6Ci0gICAgICAgICAgICBwcmludGYoInJlYWwgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV8yODY6Ci0gICAgICAgICAgICBwcmludGYoIjE2IGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV8zODY6Ci0gICAgICAgICAgICBwcmludGYoIjMyIGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWNhc2UgUE1fcmVhbE1vZGU6CisJICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV8yODY6CisJICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV8zODY6CisJICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJfQogCiAgICAgUE1faW5zdGFsbEJyZWFrSGFuZGxlcigpOwogICAgIHByaW50ZigiQ29udHJvbCBDL0JyZWFrIGludGVycnVwdCBoYW5kbGVyIGluc3RhbGxlZFxuIik7CiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKFBNX2N0cmxDSGl0KDEpKSB7Ci0gICAgICAgICAgICBwcmludGYoIkNvZGUgdGVybWltYXRlZCB3aXRoIEN0cmwtQy5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGlmIChQTV9jdHJsQnJlYWtIaXQoMSkpIHsKLSAgICAgICAgICAgIHByaW50ZigiQ29kZSB0ZXJtaW1hdGVkIHdpdGggQ3RybC1CcmVhay5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGlmIChQTV9rYmhpdCgpICYmIFBNX2dldGNoKCkgPT0gMHgxQikgewotICAgICAgICAgICAgcHJpbnRmKCJObyBicmVhayBjb2RlIGRldGVjdGVkIVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJIaXQgQ3RybC1DIG9yIEN0cmwtQnJlYWsgdG8gZXhpdCFcbiIpOwotICAgICAgICB9CisJaWYgKFBNX2N0cmxDSGl0KDEpKSB7CisJICAgIHByaW50ZigiQ29kZSB0ZXJtaW1hdGVkIHdpdGggQ3RybC1DLlxuIik7CisJICAgIGJyZWFrOworCSAgICB9CisJaWYgKFBNX2N0cmxCcmVha0hpdCgxKSkgeworCSAgICBwcmludGYoIkNvZGUgdGVybWltYXRlZCB3aXRoIEN0cmwtQnJlYWsuXG4iKTsKKwkgICAgYnJlYWs7CisJICAgIH0KKwlpZiAoUE1fa2JoaXQoKSAmJiBQTV9nZXRjaCgpID09IDB4MUIpIHsKKwkgICAgcHJpbnRmKCJObyBicmVhayBjb2RlIGRldGVjdGVkIVxuIik7CisJICAgIGJyZWFrOworCSAgICB9CisJcHJpbnRmKCJIaXQgQ3RybC1DIG9yIEN0cmwtQnJlYWsgdG8gZXhpdCFcbiIpOworCX0KIAogICAgIFBNX3Jlc3RvcmVCcmVha0hhbmRsZXIoKTsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2NhbGxyZWFsLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9jYWxscmVhbC5jCmluZGV4IDM4OTdjZTkuLjRkMzdjYWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2NhbGxyZWFsLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvY2FsbHJlYWwuYwpAQCAtNTgsMjIgKzU4LDIyIEBACiAKICAgICBwcmludGYoIlByb2dyYW0gcnVubmluZyBpbiAiKTsKICAgICBzd2l0Y2ggKFBNX2dldE1vZGVUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBQTV9yZWFsTW9kZToKLSAgICAgICAgICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzI4NjoKLSAgICAgICAgICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzM4NjoKLSAgICAgICAgICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJY2FzZSBQTV9yZWFsTW9kZToKKwkgICAgcHJpbnRmKCJyZWFsIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzI4NjoKKwkgICAgcHJpbnRmKCIxNiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzM4NjoKKwkgICAgcHJpbnRmKCIzMiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwl9CiAKICAgICAvKiBBbGxvY2F0ZSBhIHRoZSBibG9jayBvZiByZWFsIG1vZGUgbWVtb3J5ICovCiAgICAgaWYgKChwID0gUE1fYWxsb2NSZWFsU2VnKHNpemVvZihyZWFsTW9kZUNvZGUpLCAmcl9zZWcsICZyX29mZikpID09IE5VTEwpIHsKLSAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gYWxsb2NhdGUgcmVhbCBtb2RlIG1lbW9yeSFcbiIpOwotICAgICAgICBleGl0KDEpOwotICAgICAgICB9CisJcHJpbnRmKCJVbmFibGUgdG8gYWxsb2NhdGUgcmVhbCBtb2RlIG1lbW9yeSFcbiIpOworCWV4aXQoMSk7CisJfQogCiAgICAgLyogQ29weSB0aGUgcmVhbCBtb2RlIGNvZGUgKi8KICAgICBtZW1jcHkocCxyZWFsTW9kZUNvZGUsc2l6ZW9mKHJlYWxNb2RlQ29kZSkpOwpAQCAtODksMTcgKzg5LDE3IEBACiAgICAgc3JlZ3MuZHMgPSA4OwogICAgIFBNX2NhbGxSZWFsTW9kZShyX3NlZyxyX29mZiwmcmVncywmc3JlZ3MpOwogICAgIGlmIChyZWdzLnguYXggIT0gMiB8fCByZWdzLnguYnggIT0gMSB8fCByZWdzLnguY3ggIT0gNCB8fCByZWdzLnguZHggIT0gMwotICAgICAgICAgICAgfHwgcmVncy54LnNpICE9IDUgfHwgcmVncy54LmRpICE9IDYgfHwgc3JlZ3MuZXMgIT0gNwotICAgICAgICAgICAgfHwgc3JlZ3MuZHMgIT0gOCkgewotICAgICAgICBwcmludGYoIlJlYWwgbW9kZSBjYWxsIGZhaWxlZCFcbiIpOwotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIHByaW50ZigiYXggPSAlMDRYLCBieCA9ICUwNFgsIGN4ID0gJTA0WCwgZHggPSAlMDRYXG4iLAotICAgICAgICAgICAgcmVncy54LmF4LHJlZ3MueC5ieCxyZWdzLnguY3gscmVncy54LmR4KTsKLSAgICAgICAgcHJpbnRmKCJzaSA9ICUwNFgsIGRpID0gJTA0WCwgZXMgPSAlMDRYLCBkcyA9ICUwNFhcbiIsCi0gICAgICAgICAgICByZWdzLnguc2kscmVncy54LmRpLHNyZWdzLmVzLHNyZWdzLmRzKTsKLSAgICAgICAgfQorCSAgICB8fCByZWdzLnguc2kgIT0gNSB8fCByZWdzLnguZGkgIT0gNiB8fCBzcmVncy5lcyAhPSA3CisJICAgIHx8IHNyZWdzLmRzICE9IDgpIHsKKwlwcmludGYoIlJlYWwgbW9kZSBjYWxsIGZhaWxlZCFcbiIpOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoImF4ID0gJTA0WCwgYnggPSAlMDRYLCBjeCA9ICUwNFgsIGR4ID0gJTA0WFxuIiwKKwkgICAgcmVncy54LmF4LHJlZ3MueC5ieCxyZWdzLnguY3gscmVncy54LmR4KTsKKwlwcmludGYoInNpID0gJTA0WCwgZGkgPSAlMDRYLCBlcyA9ICUwNFgsIGRzID0gJTA0WFxuIiwKKwkgICAgcmVncy54LnNpLHJlZ3MueC5kaSxzcmVncy5lcyxzcmVncy5kcyk7CisJfQogICAgIGVsc2UKLSAgICAgICAgcHJpbnRmKCJSZWFsIG1vZGUgY2FsbCBzdWNjZWVkZWQhXG4iKTsKKwlwcmludGYoIlJlYWwgbW9kZSBjYWxsIHN1Y2NlZWRlZCFcbiIpOwogCiAgICAgLyogRnJlZSB0aGUgbWVtb3J5IHdlIGFsbG9jYXRlZCAqLwogICAgIFBNX2ZyZWVSZWFsU2VnKHApOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvY2hlY2tzLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9jaGVja3MuYwppbmRleCA4MTczN2UxLi41OTMzYWM5IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9jaGVja3MuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9jaGVja3MuYwpAQCAtODAsMjEgKzgwLDIxIEBACiAKICAgICBzcHJpbnRmKGJ1Zixtc2csY29uZCxmaWxlLGxpbmUpOwogICAgIGlmIChsb2cpIHsKLSAgICAgICAgZnB1dHMoYnVmLGxvZyk7Ci0gICAgICAgIGZmbHVzaChsb2cpOwotICAgICAgICBmY2xvc2UobG9nKTsKKwlmcHV0cyhidWYsbG9nKTsKKwlmZmx1c2gobG9nKTsKKwlmY2xvc2UobG9nKTsKICNpZmRlZiAgX19XSU5ET1dTX18KLSAgICAgICAgT3V0cHV0RGVidWdTdHIoYnVmKTsKKwlPdXRwdXREZWJ1Z1N0cihidWYpOwogI2VuZGlmCi0gICAgICAgIH0KKwl9CiAgICAgaWYgKGZhdGFsKSB7CiAjaWZkZWYgIF9fV0lORE9XU19fCi0gICAgICAgIE1lc3NhZ2VCb3goTlVMTCwgYnVmLCJGYXRhbCBFcnJvciEiLE1CX0lDT05FWENMQU1BVElPTik7CisJTWVzc2FnZUJveChOVUxMLCBidWYsIkZhdGFsIEVycm9yISIsTUJfSUNPTkVYQ0xBTUFUSU9OKTsKICNlbHNlCi0gICAgICAgIGZwdXRzKGJ1ZixzdGRlcnIpOworCWZwdXRzKGJ1ZixzdGRlcnIpOwogI2VuZGlmCi0gICAgICAgIGV4aXQoLTEpOwotICAgICAgICB9CisJZXhpdCgtMSk7CisJfQogfQogCiAjZW5kaWYgIC8qIENIRUNLRUQgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2NwdS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvY3B1LmMKaW5kZXggMzRhYmIyNC4uMzBlNWRkMyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvY3B1LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvY3B1LmMKQEAgLTQxLDYgKzQxLDYgQEAKICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICBwcmludGYoIlxuXG4lc1xuIiwgQ1BVX2dldFByb2Nlc3Nvck5hbWUoKSk7CiAgICAgaWYgKENQVV9oYXZlUkRUU0MoKSkKLSAgICAgICAgcHJpbnRmKCJcblByb2Nlc3NvciBzdXBwb3J0cyBSZWFkIFRpbWUgU3RhbXAgQ291bnRlciBwZXJmb3JtYW5jZSB0aW1lci5cbiIpOworCXByaW50ZigiXG5Qcm9jZXNzb3Igc3VwcG9ydHMgUmVhZCBUaW1lIFN0YW1wIENvdW50ZXIgcGVyZm9ybWFuY2UgdGltZXIuXG4iKTsKICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2NyaXRpY2FsLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9jcml0aWNhbC5jCmluZGV4IDIxZWM5OTQuLjYwZjEyNTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2NyaXRpY2FsLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvY3JpdGljYWwuYwpAQCAtNDUsMjUgKzQ1LDI1IEBACiAKICAgICBwcmludGYoIlByb2dyYW0gcnVubmluZyBpbiAiKTsKICAgICBzd2l0Y2ggKFBNX2dldE1vZGVUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBQTV9yZWFsTW9kZToKLSAgICAgICAgICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzI4NjoKLSAgICAgICAgICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzM4NjoKLSAgICAgICAgICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJY2FzZSBQTV9yZWFsTW9kZToKKwkgICAgcHJpbnRmKCJyZWFsIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzI4NjoKKwkgICAgcHJpbnRmKCIxNiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzM4NjoKKwkgICAgcHJpbnRmKCIzMiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwl9CiAKICAgICBQTV9pbnN0YWxsQ3JpdGljYWxIYW5kbGVyKCk7CiAgICAgcHJpbnRmKCJDcml0aWNhbCBFcnJvciBoYW5kbGVyIGluc3RhbGxlZCAtIHRyeWluZyB0byByZWFkIGZyb20gQTogZHJpdmUuLi5cbiIpOwogICAgIGYgPSBmb3BlbigiYTpcYm9nLmJvZyIsInJiIik7CiAgICAgaWYgKGYpIGZjbG9zZShmKTsKICAgICBpZiAoUE1fY3JpdGljYWxFcnJvcigmYXhjb2RlLCZkaWNvZGUsMSkpIHsKLSAgICAgICAgcHJpbnRmKCJDcml0aWNhbCBlcnJvciBvY2N1cmVkIG9uIElOVCAyMWggZnVuY3Rpb24gJTAyWCFcbiIsCi0gICAgICAgICAgICBheGNvZGUgPj4gOCk7Ci0gICAgICAgIH0KKwlwcmludGYoIkNyaXRpY2FsIGVycm9yIG9jY3VyZWQgb24gSU5UIDIxaCBmdW5jdGlvbiAlMDJYIVxuIiwKKwkgICAgYXhjb2RlID4+IDgpOworCX0KICAgICBlbHNlIHByaW50ZigiQ3JpdGljYWwgZXJyb3Igd2FzIG5vdCBjYXVnaHQhXG4iKTsKICAgICBQTV9yZXN0b3JlQ3JpdGljYWxIYW5kbGVyKCk7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9nZXRjaC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvZ2V0Y2guYwppbmRleCBjNzBmN2VlLi4wNmMyMTgwIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9nZXRjaC5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2dldGNoLmMKQEAgLTMwOSw5ICszMDksOSBAQAogICAgIEtleUVudHJ5ICAgICprZXk7CiAKICAgICBmb3IgKGtleSA9IGtleXM7IGtleS0+Y29kZSAhPSAwOyBrZXkrKykgewotICAgICAgICBpZiAoa2V5LT5jb2RlID09IGNvZGUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWlmIChrZXktPmNvZGUgPT0gY29kZSkKKwkgICAgYnJlYWs7CisJfQogICAgIHJldHVybiBrZXk7CiB9CiAKQEAgLTMyNiwyOSArMzI2LDI5IEBACiAgICAgZXZlbnRfdCAqZXZ0KQogewogICAgIGlmIChldnQtPm1vZGlmaWVycyAmIEVWVF9MRUZUQlVUKQotICAgICAgICBwcmludGYoIiwgTEJVVCIpOworCXByaW50ZigiLCBMQlVUIik7CiAgICAgaWYgKGV2dC0+bW9kaWZpZXJzICYgRVZUX1JJR0hUQlVUKQotICAgICAgICBwcmludGYoIiwgUkJVVCIpOworCXByaW50ZigiLCBSQlVUIik7CiAgICAgaWYgKGV2dC0+bW9kaWZpZXJzICYgRVZUX01JRERMRUJVVCkKLSAgICAgICAgcHJpbnRmKCIsIE1CVVQiKTsKKwlwcmludGYoIiwgTUJVVCIpOwogICAgIGlmIChldnQtPm1vZGlmaWVycyAmIEVWVF9TSElGVEtFWSkgewotICAgICAgICBpZiAoZXZ0LT5tb2RpZmllcnMgJiBFVlRfTEVGVFNISUZUKQotICAgICAgICAgICAgcHJpbnRmKCIsIExTSElGVCIpOwotICAgICAgICBpZiAoZXZ0LT5tb2RpZmllcnMgJiBFVlRfUklHSFRTSElGVCkKLSAgICAgICAgICAgIHByaW50ZigiLCBSU0hJRlQiKTsKLSAgICAgICAgfQorCWlmIChldnQtPm1vZGlmaWVycyAmIEVWVF9MRUZUU0hJRlQpCisJICAgIHByaW50ZigiLCBMU0hJRlQiKTsKKwlpZiAoZXZ0LT5tb2RpZmllcnMgJiBFVlRfUklHSFRTSElGVCkKKwkgICAgcHJpbnRmKCIsIFJTSElGVCIpOworCX0KICAgICBpZiAoZXZ0LT5tb2RpZmllcnMgJiBFVlRfQ1RSTFNUQVRFKSB7Ci0gICAgICAgIGlmIChldnQtPm1vZGlmaWVycyAmIEVWVF9MRUZUQ1RSTCkKLSAgICAgICAgICAgIHByaW50ZigiLCBMQ1RSTCIpOwotICAgICAgICBpZiAoZXZ0LT5tb2RpZmllcnMgJiBFVlRfUklHSFRDVFJMKQotICAgICAgICAgICAgcHJpbnRmKCIsIFJDVFJMIik7Ci0gICAgICAgIH0KKwlpZiAoZXZ0LT5tb2RpZmllcnMgJiBFVlRfTEVGVENUUkwpCisJICAgIHByaW50ZigiLCBMQ1RSTCIpOworCWlmIChldnQtPm1vZGlmaWVycyAmIEVWVF9SSUdIVENUUkwpCisJICAgIHByaW50ZigiLCBSQ1RSTCIpOworCX0KICAgICBpZiAoZXZ0LT5tb2RpZmllcnMgJiBFVlRfQUxUU1RBVEUpIHsKLSAgICAgICAgaWYgKGV2dC0+bW9kaWZpZXJzICYgRVZUX0xFRlRBTFQpCi0gICAgICAgICAgICBwcmludGYoIiwgTEFMVCIpOwotICAgICAgICBpZiAoZXZ0LT5tb2RpZmllcnMgJiBFVlRfUklHSFRBTFQpCi0gICAgICAgICAgICBwcmludGYoIiwgUkFMVCIpOwotICAgICAgICB9CisJaWYgKGV2dC0+bW9kaWZpZXJzICYgRVZUX0xFRlRBTFQpCisJICAgIHByaW50ZigiLCBMQUxUIik7CisJaWYgKGV2dC0+bW9kaWZpZXJzICYgRVZUX1JJR0hUQUxUKQorCSAgICBwcmludGYoIiwgUkFMVCIpOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM2OSw3ICszNjksNyBAQAogICAgIGFzY2lpID0gRmluZEtleShjaCxBU0NJSUNvZGVzKTsKICAgICBzY2FuID0gRmluZEtleShFVlRfc2NhbkNvZGUoZXZ0LT5tZXNzYWdlKSxTY2FuQ29kZXMpOwogICAgIHByaW50ZigiJXM6IDB4JTA0WCAtPiAlcywgJXMsICclYyciLAotICAgICAgICBtc2csIChpbnQpZXZ0LT5tZXNzYWdlICYgMHhGRkZGLCBzY2FuLT5uYW1lLCBhc2NpaS0+bmFtZSwgaXNwcmludChjaCkgPyBjaCA6ICcgJyk7CisJbXNnLCAoaW50KWV2dC0+bWVzc2FnZSAmIDB4RkZGRiwgc2Nhbi0+bmFtZSwgYXNjaWktPm5hbWUsIGlzcHJpbnQoY2gpID8gY2ggOiAnICcpOwogICAgIERpc3BsYXlNb2RpZmllcnMoZXZ0KTsKICAgICBwcmludGYoIlxuIik7CiB9CkBAIC0zODgsMTUgKzM4OCwxNSBAQAogewogICAgIHByaW50ZigiJXM6ICIsIG1zZyk7CiAgICAgaWYgKGV2dC0+bWVzc2FnZSAmIEVWVF9MRUZUQk1BU0spCi0gICAgICAgIHByaW50ZigiTEVGVCAiKTsKKwlwcmludGYoIkxFRlQgIik7CiAgICAgaWYgKGV2dC0+bWVzc2FnZSAmIEVWVF9SSUdIVEJNQVNLKQotICAgICAgICBwcmludGYoIlJJR0hUICIpOworCXByaW50ZigiUklHSFQgIik7CiAgICAgaWYgKGV2dC0+bWVzc2FnZSAmIEVWVF9NSURETEVCTUFTSykKLSAgICAgICAgcHJpbnRmKCJNSURETEUgIik7CisJcHJpbnRmKCJNSURETEUgIik7CiAgICAgcHJpbnRmKCJhYnMoJWQsJWQpLCByZWwoJWQsJWQpIiwgZXZ0LT53aGVyZV94LCBldnQtPndoZXJlX3ksIGV2dC0+cmVsYXRpdmVfeCwgZXZ0LT5yZWxhdGl2ZV95KTsKICAgICBEaXNwbGF5TW9kaWZpZXJzKGV2dCk7CiAgICAgaWYgKGV2dC0+bWVzc2FnZSAmIEVWVF9EQkxDTElDSykKLSAgICAgICAgcHJpbnRmKCIsIERCTENMSUNLIik7CisJcHJpbnRmKCIsIERCTENMSUNLIik7CiAgICAgcHJpbnRmKCJcbiIpOwogfQogCkBAIC00MTMsMTIgKzQxMywxMiBAQAogICAgIGV2ZW50X3QgKmV2dCkKIHsKICAgICBwcmludGYoIiVzOiBKb3kxKCU0ZCwlNGQsJWMlYyksIEpveTIoJTRkLCU0ZCwlYyVjKVxuIiwgbXNnLAotICAgICAgICBldnQtPndoZXJlX3gsZXZ0LT53aGVyZV95LAotICAgICAgICAoZXZ0LT5tZXNzYWdlICYgRVZUX0pPWTFfQlVUVE9OQSkgPyAnQScgOiAnYScsCi0gICAgICAgIChldnQtPm1lc3NhZ2UgJiBFVlRfSk9ZMV9CVVRUT05CKSA/ICdCJyA6ICdiJywKLSAgICAgICAgZXZ0LT5yZWxhdGl2ZV94LGV2dC0+cmVsYXRpdmVfeSwKLSAgICAgICAgKGV2dC0+bWVzc2FnZSAmIEVWVF9KT1kyX0JVVFRPTkEpID8gJ0EnIDogJ2EnLAotICAgICAgICAoZXZ0LT5tZXNzYWdlICYgRVZUX0pPWTJfQlVUVE9OQikgPyAnQicgOiAnYicpOworCWV2dC0+d2hlcmVfeCxldnQtPndoZXJlX3ksCisJKGV2dC0+bWVzc2FnZSAmIEVWVF9KT1kxX0JVVFRPTkEpID8gJ0EnIDogJ2EnLAorCShldnQtPm1lc3NhZ2UgJiBFVlRfSk9ZMV9CVVRUT05CKSA/ICdCJyA6ICdiJywKKwlldnQtPnJlbGF0aXZlX3gsZXZ0LT5yZWxhdGl2ZV95LAorCShldnQtPm1lc3NhZ2UgJiBFVlRfSk9ZMl9CVVRUT05BKSA/ICdBJyA6ICdhJywKKwkoZXZ0LT5tZXNzYWdlICYgRVZUX0pPWTJfQlVUVE9OQikgPyAnQicgOiAnYicpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDYwLDQxICs0NjAsNDEgQEAKICAgICBFVlRfc2V0TW91c2VSYW5nZSgxMDI0LDc2OCk7CiAgICAgQ2FsaWJyYXRlSm95KCk7CiAgICAgZG8gewotICAgICAgICBFVlRfcG9sbEpveXN0aWNrKCk7Ci0gICAgICAgIGlmIChFVlRfZ2V0TmV4dCgmZXZ0LEVWVF9FVkVSWUVWVCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZXZ0LndoYXQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVWVF9LRVlET1dOOgotICAgICAgICAgICAgICAgICAgICBEaXNwbGF5S2V5KCJFVlRfS0VZRE9XTiAgIiwgJmV2dCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChFVlRfc2NhbkNvZGUoZXZ0Lm1lc3NhZ2UpID09IEtCX2VzYykKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEVWVF9LRVlSRVBFQVQ6Ci0gICAgICAgICAgICAgICAgICAgIERpc3BsYXlLZXkoIkVWVF9LRVlSRVBFQVQiLCAmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVlRfS0VZVVA6Ci0gICAgICAgICAgICAgICAgICAgIERpc3BsYXlLZXkoIkVWVF9LRVlVUCAgICAiLCAmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVlRfTU9VU0VET1dOOgotICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TW91c2UoIkVWVF9NT1VTRURPV04iLCAmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVlRfTU9VU0VBVVRPOgotICAgICAgICAgICAgICAgICAgICBEaXNwbGF5TW91c2UoIkVWVF9NT1VTRUFVVE8iLCAmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVlRfTU9VU0VVUDoKLSAgICAgICAgICAgICAgICAgICAgRGlzcGxheU1vdXNlKCJFVlRfTU9VU0VVUCAgIiwgJmV2dCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRVZUX01PVVNFTU9WRToKLSAgICAgICAgICAgICAgICAgICAgRGlzcGxheU1vdXNlKCJFVlRfTU9VU0VNT1ZFIiwgJmV2dCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRVZUX0pPWUNMSUNLOgotICAgICAgICAgICAgICAgICAgICBEaXNwbGF5Sm95KCJFVlRfSk9ZQ0xJQ0sgIiwgJmV2dCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRVZUX0pPWU1PVkU6Ci0gICAgICAgICAgICAgICAgICAgIERpc3BsYXlKb3koIkVWVF9KT1lNT1ZFICAiLCAmZXZ0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlICghZG9uZSk7CisJRVZUX3BvbGxKb3lzdGljaygpOworCWlmIChFVlRfZ2V0TmV4dCgmZXZ0LEVWVF9FVkVSWUVWVCkpIHsKKwkgICAgc3dpdGNoIChldnQud2hhdCkgeworCQljYXNlIEVWVF9LRVlET1dOOgorCQkgICAgRGlzcGxheUtleSgiRVZUX0tFWURPV04gICIsICZldnQpOworCQkgICAgaWYgKEVWVF9zY2FuQ29kZShldnQubWVzc2FnZSkgPT0gS0JfZXNjKQorCQkJZG9uZSA9IHRydWU7CisJCSAgICBicmVhazsKKwkJY2FzZSBFVlRfS0VZUkVQRUFUOgorCQkgICAgRGlzcGxheUtleSgiRVZUX0tFWVJFUEVBVCIsICZldnQpOworCQkgICAgYnJlYWs7CisJCWNhc2UgRVZUX0tFWVVQOgorCQkgICAgRGlzcGxheUtleSgiRVZUX0tFWVVQICAgICIsICZldnQpOworCQkgICAgYnJlYWs7CisJCWNhc2UgRVZUX01PVVNFRE9XTjoKKwkJICAgIERpc3BsYXlNb3VzZSgiRVZUX01PVVNFRE9XTiIsICZldnQpOworCQkgICAgYnJlYWs7CisJCWNhc2UgRVZUX01PVVNFQVVUTzoKKwkJICAgIERpc3BsYXlNb3VzZSgiRVZUX01PVVNFQVVUTyIsICZldnQpOworCQkgICAgYnJlYWs7CisJCWNhc2UgRVZUX01PVVNFVVA6CisJCSAgICBEaXNwbGF5TW91c2UoIkVWVF9NT1VTRVVQICAiLCAmZXZ0KTsKKwkJICAgIGJyZWFrOworCQljYXNlIEVWVF9NT1VTRU1PVkU6CisJCSAgICBEaXNwbGF5TW91c2UoIkVWVF9NT1VTRU1PVkUiLCAmZXZ0KTsKKwkJICAgIGJyZWFrOworCQljYXNlIEVWVF9KT1lDTElDSzoKKwkJICAgIERpc3BsYXlKb3koIkVWVF9KT1lDTElDSyAiLCAmZXZ0KTsKKwkJICAgIGJyZWFrOworCQljYXNlIEVWVF9KT1lNT1ZFOgorCQkgICAgRGlzcGxheUpveSgiRVZUX0pPWU1PVkUgICIsICZldnQpOworCQkgICAgYnJlYWs7CisJCX0KKwkgICAgfQorCX0gd2hpbGUgKCFkb25lKTsKICAgICBFVlRfZXhpdCgpOwogICAgIFBNX2Nsb3NlQ29uc29sZShod25kQ29uc29sZSk7CiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9pc3Zlc2EuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2lzdmVzYS5jCmluZGV4IDljMDI0NTIuLjY3YWQyNDUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2lzdmVzYS5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2lzdmVzYS5jCkBAIC02OCwyNCArNjgsMjQgQEAKIAogICAgIHByaW50ZigiUHJvZ3JhbSBydW5uaW5nIGluICIpOwogICAgIHN3aXRjaCAoUE1fZ2V0TW9kZVR5cGUoKSkgewotICAgICAgICBjYXNlIFBNX3JlYWxNb2RlOgotICAgICAgICAgICAgcHJpbnRmKCJyZWFsIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fMjg2OgotICAgICAgICAgICAgcHJpbnRmKCIxNiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fMzg2OgotICAgICAgICAgICAgcHJpbnRmKCIzMiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwljYXNlIFBNX3JlYWxNb2RlOgorCSAgICBwcmludGYoInJlYWwgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fMjg2OgorCSAgICBwcmludGYoIjE2IGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fMzg2OgorCSAgICBwcmludGYoIjMyIGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCX0KIAogICAgIC8qIEFsbG9jYXRlIGEgMjU2IGJ5dGUgYmxvY2sgb2YgcmVhbCBtZW1vcnkgZm9yIGNvbW11bmljYXRpbmcgd2l0aAogICAgICAqIHRoZSBWRVNBIEJJT1MuCiAgICAgICovCiAgICAgaWYgKCh2Z1B0ciA9IFBNX2dldFZFU0FCdWYoJnZnTGVuLCZyX3Znc2VnLCZyX3Znb2ZmKSkgPT0gTlVMTCkgewotICAgICAgICBwcmludGYoIlVuYWJsZSB0byBhbGxvY2F0ZSBWRVNBIG1lbW9yeSBidWZmZXIhXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQorCXByaW50ZigiVW5hYmxlIHRvIGFsbG9jYXRlIFZFU0EgbWVtb3J5IGJ1ZmZlciFcbiIpOworCWV4aXQoMSk7CisJfQogCiAgICAgLyogQ2FsbCB0aGUgVkVTQSBWQkUgdG8gc2VlIGlmIGl0IGlzIG91dCB0aGVyZSAqLwogICAgIHJlZ3MueC5heCA9IDB4NEYwMDsKQEAgLTk1LDE2ICs5NSwxNiBAQAogICAgIFBNX2ludDg2eCgweDEwLCAmcmVncywgJnJlZ3MsICZzcmVncyk7CiAgICAgbWVtY3B5KCZ2Z2FJbmZvLHZnUHRyLHNpemVvZihWZ2FJbmZvQmxvY2spKTsKICAgICBpZiAocmVncy54LmF4ID09IDB4NEYgJiYgc3RybmNtcCh2Z2FJbmZvLlZFU0FTaWduYXR1cmUsIlZFU0EiLDQpID09IDApIHsKLSAgICAgICAgcHJpbnRmKCJWRVNBIFZCRSB2ZXJzaW9uICVkLiVkIEJJT1MgZGV0ZWN0ZWRcblxuIiwKLSAgICAgICAgICAgIHZnYUluZm8uVkVTQVZlcnNpb24gPj4gOCwgdmdhSW5mby5WRVNBVmVyc2lvbiAmIDB4Rik7Ci0gICAgICAgIHByaW50ZigiQXZhaWxhYmxlIHZpZGVvIG1vZGVzOlxuIik7Ci0gICAgICAgIG1vZGUgPSBQTV9tYXBSZWFsUG9pbnRlcih2Z2FJbmZvLlZpZGVvTW9kZVB0ciA+PiAxNiwgdmdhSW5mby5WaWRlb01vZGVQdHIgJiAweEZGRkYpOwotICAgICAgICB3aGlsZSAoKm1vZGUgIT0gMHhGRkZGKSB7Ci0gICAgICAgICAgICBwcmludGYoIiAgICAlMDRoWGggKCUwOFgpXG4iLCAqbW9kZSwgKGludCltb2RlKTsKLSAgICAgICAgICAgIG1vZGUrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXByaW50ZigiVkVTQSBWQkUgdmVyc2lvbiAlZC4lZCBCSU9TIGRldGVjdGVkXG5cbiIsCisJICAgIHZnYUluZm8uVkVTQVZlcnNpb24gPj4gOCwgdmdhSW5mby5WRVNBVmVyc2lvbiAmIDB4Rik7CisJcHJpbnRmKCJBdmFpbGFibGUgdmlkZW8gbW9kZXM6XG4iKTsKKwltb2RlID0gUE1fbWFwUmVhbFBvaW50ZXIodmdhSW5mby5WaWRlb01vZGVQdHIgPj4gMTYsIHZnYUluZm8uVmlkZW9Nb2RlUHRyICYgMHhGRkZGKTsKKwl3aGlsZSAoKm1vZGUgIT0gMHhGRkZGKSB7CisJICAgIHByaW50ZigiICAgICUwNGhYaCAoJTA4WClcbiIsICptb2RlLCAoaW50KW1vZGUpOworCSAgICBtb2RlKys7CisJICAgIH0KKwl9CiAgICAgZWxzZQotICAgICAgICBwcmludGYoIlZFU0EgVkJFIG5vdCBmb3VuZFxuIik7CisJcHJpbnRmKCJWRVNBIFZCRSBub3QgZm91bmRcbiIpOwogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMva2V5LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9rZXkuYwppbmRleCBjZjg5Zjc5Li5kYmE4ODg1IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9rZXkuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9rZXkuYwpAQCAtNTYsMTYgKzU2LDE2IEBACiAKICAgICBwcmludGYoIlByb2dyYW0gcnVubmluZyBpbiAiKTsKICAgICBzd2l0Y2ggKFBNX2dldE1vZGVUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBQTV9yZWFsTW9kZToKLSAgICAgICAgICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzI4NjoKLSAgICAgICAgICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzM4NjoKLSAgICAgICAgICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJY2FzZSBQTV9yZWFsTW9kZToKKwkgICAgcHJpbnRmKCJyZWFsIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzI4NjoKKwkgICAgcHJpbnRmKCIxNiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzM4NjoKKwkgICAgcHJpbnRmKCIzMiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwl9CiAKICAgICAvKiBJbnN0YWxsIG91ciB0aW1lciBoYW5kbGVyIGFuZCBsb2NrIGhhbmRsZXIgcGFnZXMgaW4gbWVtb3J5LiBJdCBpcwogICAgICAqIGRpZmZpY3VsdCB0byBnZXQgdGhlIHNpemUgb2YgYSBmdW5jdGlvbiBpbiBDLCBidXQgd2Uga25vdyBvdXIKQEAgLTc5LDkgKzc5LDkgQEAKICAgICBwcmludGYoIktleWJvYXJkIGludGVycnVwdCBoYW5kbGVyIGluc3RhbGxlZCAtIFR5cGUgc29tZSBjaGFyYWN0ZXJzIGFuZFxuIik7CiAgICAgcHJpbnRmKCJoaXQgRVNDIHRvIGV4aXRcbiIpOwogICAgIHdoaWxlICgoY2ggPSBQTV9nZXRjaCgpKSAhPSAweDFCKSB7Ci0gICAgICAgIHByaW50ZigiJWMiLCBjaCk7Ci0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICB9CisJcHJpbnRmKCIlYyIsIGNoKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwl9CiAKICAgICBQTV9yZXN0b3JlS2V5SGFuZGxlcigpOwogICAgIFBNX3Jlc3RvcmVCcmVha0hhbmRsZXIoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2tleTE1LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9rZXkxNS5jCmluZGV4IDVjMGQyN2EuLmIwYjk0YmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL2tleTE1LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMva2V5MTUuYwpAQCAtNTksMTYgKzU5LDE2IEBACiAKICAgICBwcmludGYoIlByb2dyYW0gcnVubmluZyBpbiAiKTsKICAgICBzd2l0Y2ggKFBNX2dldE1vZGVUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBQTV9yZWFsTW9kZToKLSAgICAgICAgICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzI4NjoKLSAgICAgICAgICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzM4NjoKLSAgICAgICAgICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJY2FzZSBQTV9yZWFsTW9kZToKKwkgICAgcHJpbnRmKCJyZWFsIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzI4NjoKKwkgICAgcHJpbnRmKCIxNiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzM4NjoKKwkgICAgcHJpbnRmKCIzMiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwl9CiAKICAgICAvKiBJbnN0YWxsIG91ciB0aW1lciBoYW5kbGVyIGFuZCBsb2NrIGhhbmRsZXIgcGFnZXMgaW4gbWVtb3J5LiBJdCBpcwogICAgICAqIGRpZmZpY3VsdCB0byBnZXQgdGhlIHNpemUgb2YgYSBmdW5jdGlvbiBpbiBDLCBidXQgd2Uga25vdyBvdXIKQEAgLTgyLDkgKzgyLDkgQEAKICAgICBwcmludGYoIktleWJvYXJkIGludGVycnVwdCBoYW5kbGVyIGluc3RhbGxlZCAtIFR5cGUgc29tZSBjaGFyYWN0ZXJzIGFuZFxuIik7CiAgICAgcHJpbnRmKCJoaXQgRVNDIHRvIGV4aXRcbiIpOwogICAgIHdoaWxlICgoY2ggPSBQTV9nZXRjaCgpKSAhPSAweDFCKSB7Ci0gICAgICAgIHByaW50ZigiJWMiLCBjaCk7Ci0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICB9CisJcHJpbnRmKCIlYyIsIGNoKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwl9CiAKICAgICBQTV9yZXN0b3JlS2V5MTVIYW5kbGVyKCk7CiAgICAgUE1fcmVzdG9yZUJyZWFrSGFuZGxlcigpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvbWVtdGVzdC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvbWVtdGVzdC5jCmluZGV4IDIyMWJmYjEuLmEyYzY1NWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL21lbXRlc3QuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9tZW10ZXN0LmMKQEAgLTU2LDE2ICs1NiwxNiBAQAogCiAgICAgcHJpbnRmKCJQcm9ncmFtIHJ1bm5pbmcgaW4gIik7CiAgICAgc3dpdGNoIChQTV9nZXRNb2RlVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgUE1fcmVhbE1vZGU6Ci0gICAgICAgICAgICBwcmludGYoInJlYWwgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV8yODY6Ci0gICAgICAgICAgICBwcmludGYoIjE2IGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV8zODY6Ci0gICAgICAgICAgICBwcmludGYoIjMyIGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWNhc2UgUE1fcmVhbE1vZGU6CisJICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV8yODY6CisJICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV8zODY6CisJICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJfQogCiAgICAgcHJpbnRmKCJNZW1vcnkgYXZhaWxhYmxlIGF0IHN0YXJ0OlxuIik7CiAgICAgUE1fYXZhaWxhYmxlTWVtb3J5KCZwaHlzaWNhbCwmdG90YWwpOwpAQCAtNzMsMTggKzczLDE4IEBACiAgICAgcHJpbnRmKCIgICBUb3RhbCAoaW5jbHVkaW5nIHZpcnR1YWwpOiAlbGQgS2JcbiIsIHRvdGFsIC8gMTAyNCk7CiAgICAgcHJpbnRmKCJcbiIpOwogICAgIGZvciAoYWxsb2NzID0gaSA9IDA7IGkgPCBNQVhBTExPQzsgaSsrKSB7Ci0gICAgICAgIGlmICgocGFbaV0gPSBQTV9tYWxsb2MoMTAqMTAyNCkpICE9IDApIHsgICAgLyogaW4gMTBrIGJsb2NrcyAgICAqLwotICAgICAgICAgICAgcCA9IHBhW2FsbG9jc107Ci0gICAgICAgICAgICBtZW1zZXQocCwgMCwgMTAqMTAyNCk7IC8qIHRvdWNoIGV2ZXJ5IGJ5dGUgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAqcCA9ICd4JzsgICAgICAgICAgIC8qIGRvIHNvbWV0aGluZywgYW55dGhpbmcgd2l0aCAgICAgICovCi0gICAgICAgICAgICBwWzEwMjNdID0gJ3knOyAgICAgIC8qIHRoZSBhbGxvY2F0ZWQgbWVtb3J5ICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhbGxvY3MrKzsKLSAgICAgICAgICAgIHByaW50ZigiQWxsb2NhdGVkICVsdSBieXRlc1xyIiwgMTAqKGFsbG9jcyA8PCAxMCkpOwotICAgICAgICAgICAgfQotICAgICAgICBlbHNlIGJyZWFrOwotICAgICAgICBpZiAoUE1fa2JoaXQoKSAmJiAoUE1fZ2V0Y2goKSA9PSAweDFCKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJaWYgKChwYVtpXSA9IFBNX21hbGxvYygxMCoxMDI0KSkgIT0gMCkgeyAgICAvKiBpbiAxMGsgYmxvY2tzICAgICovCisJICAgIHAgPSBwYVthbGxvY3NdOworCSAgICBtZW1zZXQocCwgMCwgMTAqMTAyNCk7IC8qIHRvdWNoIGV2ZXJ5IGJ5dGUgICAgICAgICAgICAgICovCisJICAgICpwID0gJ3gnOyAgICAgICAgICAgLyogZG8gc29tZXRoaW5nLCBhbnl0aGluZyB3aXRoICAgICAgKi8KKwkgICAgcFsxMDIzXSA9ICd5JzsgICAgICAvKiB0aGUgYWxsb2NhdGVkIG1lbW9yeSAgICAgICAgICAgICAqLworCSAgICBhbGxvY3MrKzsKKwkgICAgcHJpbnRmKCJBbGxvY2F0ZWQgJWx1IGJ5dGVzXHIiLCAxMCooYWxsb2NzIDw8IDEwKSk7CisJICAgIH0KKwllbHNlIGJyZWFrOworCWlmIChQTV9rYmhpdCgpICYmIChQTV9nZXRjaCgpID09IDB4MUIpKQorCSAgICBicmVhazsKKwl9CiAKICAgICBwcmludGYoIlxuXG5BbGxvY2F0ZWQgdG90YWwgb2YgJWx1IGJ5dGVzXG4iLCAxMCAqIChhbGxvY3MgPDwgMTApKTsKIApAQCAtOTQsNyArOTQsNyBAQAogICAgIHByaW50ZigiICAgVG90YWwgKGluY2x1ZGluZyB2aXJ0dWFsKTogJWxkIEtiXG4iLCB0b3RhbCAvIDEwMjQpOwogCiAgICAgZm9yIChpID0gYWxsb2NzLTE7IGkgPj0gMDsgaS0tKQotICAgICAgICBQTV9mcmVlKHBhW2ldKTsKKwlQTV9mcmVlKHBhW2ldKTsKIAogICAgIHByaW50ZigiXG5NZW1vcnkgYXZhaWxhYmxlIGFmdGVyIGZyZWVpbmcgYWxsIGJsb2NrcyAobm90ZSB0aGF0IHVuZGVyIHByb3RlY3RlZCBtb2RlXG4iKTsKICAgICBwcmludGYoInRoaXMgd2lsbCBtb3N0IGxpa2VseSBub3QgYmUgY29ycmVjdCBhZnRlciBmcmVlaW5nIGJsb2Nrcyk6XG5cbiIpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvbW91c2UuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL21vdXNlLmMKaW5kZXggNWI0MjY1MS4uMjc2NWEwZCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvbW91c2UuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9tb3VzZS5jCkBAIC02OSwyMyArNjksMjMgQEAKIAogICAgIHByaW50ZigiUHJvZ3JhbSBydW5uaW5nIGluICIpOwogICAgIHN3aXRjaCAoUE1fZ2V0TW9kZVR5cGUoKSkgewotICAgICAgICBjYXNlIFBNX3JlYWxNb2RlOgotICAgICAgICAgICAgcHJpbnRmKCJyZWFsIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fMjg2OgotICAgICAgICAgICAgcHJpbnRmKCIxNiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fMzg2OgotICAgICAgICAgICAgcHJpbnRmKCIzMiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwljYXNlIFBNX3JlYWxNb2RlOgorCSAgICBwcmludGYoInJlYWwgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fMjg2OgorCSAgICBwcmludGYoIjE2IGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fMzg2OgorCSAgICBwcmludGYoIjMyIGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCX0KIAogICAgIHJlZ3MueC5heCA9IDMzOyAgICAgLyogTW91c2UgZnVuY3Rpb24gMzMgLSBTb2Z0d2FyZSByZXNldCAgICAgICAqLwogICAgIFBNX2ludDg2KDB4MzMsJnJlZ3MsJnJlZ3MpOwogICAgIGlmIChyZWdzLnguYnggPT0gMCkgewotICAgICAgICBwcmludGYoIk5vIG1vdXNlIGluc3RhbGxlZC5cbiIpOwotICAgICAgICBleGl0KDEpOwotICAgICAgICB9CisJcHJpbnRmKCJObyBtb3VzZSBpbnN0YWxsZWQuXG4iKTsKKwlleGl0KDEpOworCX0KIAogICAgIC8qIEluc3RhbGwgb3VyIG1vdXNlIGhhbmRsZXIgYW5kIGxvY2sgaGFuZGxlciBwYWdlcyBpbiBtZW1vcnkuIEl0IGlzCiAgICAgICogZGlmZmljdWx0IHRvIGdldCB0aGUgc2l6ZSBvZiBhIGZ1bmN0aW9uIGluIEMsIGJ1dCB3ZSBrbm93IG91cgpAQCAtOTUsOSArOTUsOSBAQAogICAgIFBNX2xvY2tDb2RlUGFnZXMoKF9fY29kZVB0ciltb3VzZUhhbmRsZXIsMTAwLCZsaCk7CiAgICAgUE1fbG9ja0RhdGFQYWdlcygodm9pZCopJmNvdW50LHNpemVvZihjb3VudCksJmxoKTsKICAgICBpZiAoIVBNX3NldE1vdXNlSGFuZGxlcigweEZGRkYsIG1vdXNlSGFuZGxlcikpIHsKLSAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gaW5zdGFsbCBtb3VzZSBoYW5kbGVyIVxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KKwlwcmludGYoIlVuYWJsZSB0byBpbnN0YWxsIG1vdXNlIGhhbmRsZXIhXG4iKTsKKwlleGl0KDEpOworCX0KICAgICBwcmludGYoIk1vdXNlIGhhbmRsZXIgaW5zdGFsbGVkIC0gSGl0IGFueSBrZXkgdG8gZXhpdFxuIik7CiAgICAgUE1fZ2V0Y2goKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvcmVzdG9yZS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvcmVzdG9yZS5jCmluZGV4IGI4MDgwNTIuLmUwMGJlNzUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL3Jlc3RvcmUuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9yZXN0b3JlLmMKQEAgLTQ1LDI0ICs0NSwyNCBAQAogaW50IG1haW4odm9pZCkKIHsKICAgICBQTV9IV05EIGh3bmRDb25zb2xlOwotICAgIHVsb25nICAgc3RhdGVTaXplOyAgICAgIAorICAgIHVsb25nICAgc3RhdGVTaXplOwogICAgIHZvaWQgICAgKnN0YXRlQnVmOwogICAgIEZJTEUgICAgKmY7CiAKICAgICAvKiBXcml0ZSB0aGUgc2F2ZWQgY29uc29sZSBzdGF0ZSBidWZmZXIgdG8gZGlzayAqLwogICAgIGlmICgoZiA9IGZvcGVuKCIvZXRjL3Btc2F2ZS5kYXQiLCJyYiIpKSA9PSBOVUxMKSB7Ci0gICAgICAgIHByaW50ZigiVW5hYmxlIHRvIG9wZW4gL2V0Yy9wbXNhdmUuZGF0IGZvciByZWFkaW5nIVxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorCXByaW50ZigiVW5hYmxlIHRvIG9wZW4gL2V0Yy9wbXNhdmUuZGF0IGZvciByZWFkaW5nIVxuIik7CisJcmV0dXJuIC0xOworCX0KICAgICBmcmVhZCgmc3RhdGVTaXplLDEsc2l6ZW9mKHN0YXRlU2l6ZSksZik7CiAgICAgaWYgKHN0YXRlU2l6ZSAhPSBQTV9nZXRDb25zb2xlU3RhdGVTaXplKCkpIHsKLSAgICAgICAgcHJpbnRmKCJTaXplIG1pc21hdGNoIGluIC9ldGMvcG1zYXZlLmRhdCFcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKwlwcmludGYoIlNpemUgbWlzbWF0Y2ggaW4gL2V0Yy9wbXNhdmUuZGF0IVxuIik7CisJcmV0dXJuIC0xOworCX0KICAgICBpZiAoKHN0YXRlQnVmID0gUE1fbWFsbG9jKHN0YXRlU2l6ZSkpID09IE5VTEwpIHsKLSAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gYWxsb2NhdGUgY29uc29sZSBzdGF0ZSBidWZmZXIhXG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisJcHJpbnRmKCJVbmFibGUgdG8gYWxsb2NhdGUgY29uc29sZSBzdGF0ZSBidWZmZXIhXG4iKTsKKwlyZXR1cm4gLTE7CisJfQogICAgIGZyZWFkKHN0YXRlQnVmLDEsc3RhdGVTaXplLGYpOwogICAgIGZjbG9zZShmKTsKIApAQCAtNzEsNyArNzEsNyBAQAogCiAgICAgLyogRm9yY2libHkgc2V0IDgweDI1IHRleHQgbW9kZSB1c2luZyB0aGUgQklPUyAqLwogICAgIHNldFZpZGVvTW9kZSgweDMpOwotICAgIAorCiAgICAgLyogUmVzdG9yZSB0aGUgcHJldmlvdXMgY29uc29sZSBzdGF0ZSAqLwogICAgIFBNX3Jlc3RvcmVDb25zb2xlU3RhdGUoc3RhdGVCdWYsMCk7CiAgICAgUE1fY2xvc2VDb25zb2xlKGh3bmRDb25zb2xlKTsKQEAgLTc5LDQgKzc5LDMgQEAKICAgICBwcmludGYoIkNvbnNvbGUgc3RhdGUgc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkIGZyb20gL2V0Yy9wbXNhdmUuZGF0XG4iKTsKICAgICByZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvcnRjLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9ydGMuYwppbmRleCAwN2M2ZWFhLi5hY2VmOTIyIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9ydGMuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9ydGMuYwpAQCAtNTIsMTYgKzUyLDE2IEBACiAKICAgICBwcmludGYoIlByb2dyYW0gcnVubmluZyBpbiAiKTsKICAgICBzd2l0Y2ggKFBNX2dldE1vZGVUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBQTV9yZWFsTW9kZToKLSAgICAgICAgICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzI4NjoKLSAgICAgICAgICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNXzM4NjoKLSAgICAgICAgICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJY2FzZSBQTV9yZWFsTW9kZToKKwkgICAgcHJpbnRmKCJyZWFsIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzI4NjoKKwkgICAgcHJpbnRmKCIxNiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNXzM4NjoKKwkgICAgcHJpbnRmKCIzMiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOworCSAgICBicmVhazsKKwl9CiAKICAgICAvKiBJbnN0YWxsIG91ciB0aW1lciBoYW5kbGVyIGFuZCBsb2NrIGhhbmRsZXIgcGFnZXMgaW4gbWVtb3J5LiBJdCBpcwogICAgICAqIGRpZmZpY3VsdCB0byBnZXQgdGhlIHNpemUgb2YgYSBmdW5jdGlvbiBpbiBDLCBidXQgd2Uga25vdyBvdXIKQEAgLTc1LDEzICs3NSwxMyBAQAogICAgIHByaW50ZigiUmVhbFRpbWVDbG9jayBpbnRlcnJ1cHQgaGFuZGxlciBpbnN0YWxsZWQgLSBIaXQgRVNDIHRvIGV4aXRcbiIpOwogICAgIG9sZENvdW50ID0gY291bnQ7CiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKFBNX2tiaGl0KCkgJiYgKFBNX2dldGNoKCkgPT0gMHgxQikpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGNvdW50ICE9IG9sZENvdW50KSB7Ci0gICAgICAgICAgICBwcmludGYoIlRpY2ssIFRvY2s6ICVsZFxuIiwgY291bnQpOwotICAgICAgICAgICAgb2xkQ291bnQgPSBjb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmIChQTV9rYmhpdCgpICYmIChQTV9nZXRjaCgpID09IDB4MUIpKQorCSAgICBicmVhazsKKwlpZiAoY291bnQgIT0gb2xkQ291bnQpIHsKKwkgICAgcHJpbnRmKCJUaWNrLCBUb2NrOiAlbGRcbiIsIGNvdW50KTsKKwkgICAgb2xkQ291bnQgPSBjb3VudDsKKwkgICAgfQorCX0KIAogICAgIFBNX3Jlc3RvcmVSZWFsVGltZUNsb2NrSGFuZGxlcigpOwogICAgIFBNX3Jlc3RvcmVCcmVha0hhbmRsZXIoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL3NhdmUuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL3NhdmUuYwppbmRleCBiZTk2OTY4Li5mNzMyNDU2IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9zYXZlLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvc2F2ZS5jCkBAIC0zNyw3ICszNyw3IEBACiBpbnQgbWFpbih2b2lkKQogewogICAgIFBNX0hXTkQgaHduZENvbnNvbGU7Ci0gICAgdWxvbmcgICBzdGF0ZVNpemU7ICAgICAgCisgICAgdWxvbmcgICBzdGF0ZVNpemU7CiAgICAgdm9pZCAgICAqc3RhdGVCdWY7CiAgICAgRklMRSAgICAqZjsKIApAQCAtNDUsMjYgKzQ1LDI1IEBACiAgICAgaHduZENvbnNvbGUgPSBQTV9vcGVuQ29uc29sZSgwLDAsMCwwLDAsdHJ1ZSk7CiAgICAgc3RhdGVTaXplID0gUE1fZ2V0Q29uc29sZVN0YXRlU2l6ZSgpOwogICAgIGlmICgoc3RhdGVCdWYgPSBQTV9tYWxsb2Moc3RhdGVTaXplKSkgPT0gTlVMTCkgewotICAgICAgICBQTV9jbG9zZUNvbnNvbGUoaHduZENvbnNvbGUpOwotICAgICAgICBwcmludGYoIlVuYWJsZSB0byBhbGxvY2F0ZSBjb25zb2xlIHN0YXRlIGJ1ZmZlciFcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKwlQTV9jbG9zZUNvbnNvbGUoaHduZENvbnNvbGUpOworCXByaW50ZigiVW5hYmxlIHRvIGFsbG9jYXRlIGNvbnNvbGUgc3RhdGUgYnVmZmVyIVxuIik7CisJcmV0dXJuIC0xOworCX0KICAgICBQTV9zYXZlQ29uc29sZVN0YXRlKHN0YXRlQnVmLDApOwotICAgIAorCiAgICAgLyogUmVzdG9yZSB0aGUgY29uc29sZSBzdGF0ZSBvbiBleGl0ICovCiAgICAgUE1fcmVzdG9yZUNvbnNvbGVTdGF0ZShzdGF0ZUJ1ZiwwKTsKICAgICBQTV9jbG9zZUNvbnNvbGUoaHduZENvbnNvbGUpOwotICAgIAorCiAgICAgLyogV3JpdGUgdGhlIHNhdmVkIGNvbnNvbGUgc3RhdGUgYnVmZmVyIHRvIGRpc2sgKi8KICAgICBpZiAoKGYgPSBmb3BlbigiL2V0Yy9wbXNhdmUuZGF0Iiwid2IiKSkgPT0gTlVMTCkKLSAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gb3BlbiAvZXRjL3Btc2F2ZS9kYXQgZm9yIHdyaXRpbmchXG4iKTsKKwlwcmludGYoIlVuYWJsZSB0byBvcGVuIC9ldGMvcG1zYXZlL2RhdCBmb3Igd3JpdGluZyFcbiIpOwogICAgIGVsc2UgewotICAgICAgICBmd3JpdGUoJnN0YXRlU2l6ZSwxLHNpemVvZihzdGF0ZVNpemUpLGYpOwotICAgICAgICBmd3JpdGUoc3RhdGVCdWYsMSxzdGF0ZVNpemUsZik7Ci0gICAgICAgIGZjbG9zZShmKTsKLSAgICAgICAgcHJpbnRmKCJDb25zb2xlIHN0YXRlIHN1Y2Nlc3NmdWxseSBzYXZlZCB0byAvZXRjL3Btc2F2ZS5kYXRcbiIpOwotICAgICAgICB9ICAgCisJZndyaXRlKCZzdGF0ZVNpemUsMSxzaXplb2Yoc3RhdGVTaXplKSxmKTsKKwlmd3JpdGUoc3RhdGVCdWYsMSxzdGF0ZVNpemUsZik7CisJZmNsb3NlKGYpOworCXByaW50ZigiQ29uc29sZSBzdGF0ZSBzdWNjZXNzZnVsbHkgc2F2ZWQgdG8gL2V0Yy9wbXNhdmUuZGF0XG4iKTsKKwl9CiAgICAgUE1fZnJlZShzdGF0ZUJ1Zik7CiAgICAgcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL3Nob3dwY2kuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL3Nob3dwY2kuYwppbmRleCA4MjIyYjg2Li5iZTI3NWUxIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy9zaG93cGNpLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvc2hvd3BjaS5jCkBAIC01OCwxMjMgKzU4LDEyMyBAQAogICAgIFBDSURldmljZUluZm8gICAqaW5mbzsKIAogICAgIHByaW50ZigiRGlzcGxheWluZyBlbnVtZXJhdGlvbiBvZiBQQ0kgYnVzICglZCBkZXZpY2VzLCAlZCBkaXNwbGF5IGRldmljZXMpXG4iLAotICAgICAgICBOdW1QQ0ksIE51bURldmljZXMpOworCU51bVBDSSwgTnVtRGV2aWNlcyk7CiAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTnVtRGV2aWNlczsgaW5kZXgrKykKLSAgICAgICAgcHJpbnRmKCIgIERpc3BsYXkgZGV2aWNlICVkIGlzIFBDSSBkZXZpY2UgJWRcbiIsaW5kZXgsRGV2aWNlSW5kZXhbaW5kZXhdKTsKKwlwcmludGYoIiAgRGlzcGxheSBkZXZpY2UgJWQgaXMgUENJIGRldmljZSAlZFxuIixpbmRleCxEZXZpY2VJbmRleFtpbmRleF0pOwogICAgIHByaW50ZigiXG4iKTsKICAgICBwcmludGYoIkJ1cyBTbG90IEZuYyBEZXZpY2VJRCAgU3ViU3lzdGVtIFJldiBDbGFzcyBJUlEgSW50IENtZFxuIik7CiAgICAgZm9yIChpID0gMDsgaSA8IE51bVBDSTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiJTJkICAgJTJkICAlMmQgICUwNFg6JTA0WCAlMDRYOiUwNFggJTAyWCAgJTAyWDolMDJYICUwMlggICUwMlggICUwNFggICAiLAotICAgICAgICAgICAgUENJW2ldLnNsb3QucC5CdXMsCi0gICAgICAgICAgICBQQ0lbaV0uc2xvdC5wLkRldmljZSwKLSAgICAgICAgICAgIFBDSVtpXS5zbG90LnAuRnVuY3Rpb24sCi0gICAgICAgICAgICBQQ0lbaV0uVmVuZG9ySUQsCi0gICAgICAgICAgICBQQ0lbaV0uRGV2aWNlSUQsCi0gICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5TdWJTeXN0ZW1WZW5kb3JJRCwKLSAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLlN1YlN5c3RlbUlELAotICAgICAgICAgICAgUENJW2ldLlJldklELAotICAgICAgICAgICAgUENJW2ldLkJhc2VDbGFzcywKLSAgICAgICAgICAgIFBDSVtpXS5TdWJDbGFzcywKLSAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLkludGVycnVwdExpbmUsCi0gICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5JbnRlcnJ1cHRQaW4sCi0gICAgICAgICAgICBQQ0lbaV0uQ29tbWFuZCk7Ci0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspIHsKLSAgICAgICAgICAgIGlmIChEZXZpY2VJbmRleFtpbmRleF0gPT0gaSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4IDwgTnVtRGV2aWNlcykKLSAgICAgICAgICAgIHByaW50ZigiPC0gJWRcbiIsIGluZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9CisJcHJpbnRmKCIlMmQgICAlMmQgICUyZCAgJTA0WDolMDRYICUwNFg6JTA0WCAlMDJYICAlMDJYOiUwMlggJTAyWCAgJTAyWCAgJTA0WCAgICIsCisJICAgIFBDSVtpXS5zbG90LnAuQnVzLAorCSAgICBQQ0lbaV0uc2xvdC5wLkRldmljZSwKKwkgICAgUENJW2ldLnNsb3QucC5GdW5jdGlvbiwKKwkgICAgUENJW2ldLlZlbmRvcklELAorCSAgICBQQ0lbaV0uRGV2aWNlSUQsCisJICAgIFBDSVtpXS51LnR5cGUwLlN1YlN5c3RlbVZlbmRvcklELAorCSAgICBQQ0lbaV0udS50eXBlMC5TdWJTeXN0ZW1JRCwKKwkgICAgUENJW2ldLlJldklELAorCSAgICBQQ0lbaV0uQmFzZUNsYXNzLAorCSAgICBQQ0lbaV0uU3ViQ2xhc3MsCisJICAgIFBDSVtpXS51LnR5cGUwLkludGVycnVwdExpbmUsCisJICAgIFBDSVtpXS51LnR5cGUwLkludGVycnVwdFBpbiwKKwkgICAgUENJW2ldLkNvbW1hbmQpOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspIHsKKwkgICAgaWYgKERldmljZUluZGV4W2luZGV4XSA9PSBpKQorCQlicmVhazsKKwkgICAgfQorCWlmIChpbmRleCA8IE51bURldmljZXMpCisJICAgIHByaW50ZigiPC0gJWRcbiIsIGluZGV4KTsKKwllbHNlCisJICAgIHByaW50ZigiXG4iKTsKKwl9CiAgICAgcHJpbnRmKCJcbiIpOwogICAgIHByaW50ZigiRGV2aWNlSUQgIFN0YXQgSWZjIENjaCBMYXQgSGRyIEJJU1RcbiIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBOdW1QQ0k7IGkrKykgewotICAgICAgICBwcmludGYoIiUwNFg6JTA0WCAlMDRYICAlMDJYICAlMDJYICAlMDJYICAlMDJYICAlMDJYICAgIiwKLSAgICAgICAgICAgIFBDSVtpXS5WZW5kb3JJRCwKLSAgICAgICAgICAgIFBDSVtpXS5EZXZpY2VJRCwKLSAgICAgICAgICAgIFBDSVtpXS5TdGF0dXMsCi0gICAgICAgICAgICBQQ0lbaV0uSW50ZXJmYWNlLAotICAgICAgICAgICAgUENJW2ldLkNhY2hlTGluZVNpemUsCi0gICAgICAgICAgICBQQ0lbaV0uTGF0ZW5jeVRpbWVyLAotICAgICAgICAgICAgUENJW2ldLkhlYWRlclR5cGUsCi0gICAgICAgICAgICBQQ0lbaV0uQklTVCk7Ci0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspIHsKLSAgICAgICAgICAgIGlmIChEZXZpY2VJbmRleFtpbmRleF0gPT0gaSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4IDwgTnVtRGV2aWNlcykKLSAgICAgICAgICAgIHByaW50ZigiPC0gJWRcbiIsIGluZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9CisJcHJpbnRmKCIlMDRYOiUwNFggJTA0WCAgJTAyWCAgJTAyWCAgJTAyWCAgJTAyWCAgJTAyWCAgICIsCisJICAgIFBDSVtpXS5WZW5kb3JJRCwKKwkgICAgUENJW2ldLkRldmljZUlELAorCSAgICBQQ0lbaV0uU3RhdHVzLAorCSAgICBQQ0lbaV0uSW50ZXJmYWNlLAorCSAgICBQQ0lbaV0uQ2FjaGVMaW5lU2l6ZSwKKwkgICAgUENJW2ldLkxhdGVuY3lUaW1lciwKKwkgICAgUENJW2ldLkhlYWRlclR5cGUsCisJICAgIFBDSVtpXS5CSVNUKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOdW1EZXZpY2VzOyBpbmRleCsrKSB7CisJICAgIGlmIChEZXZpY2VJbmRleFtpbmRleF0gPT0gaSkKKwkJYnJlYWs7CisJICAgIH0KKwlpZiAoaW5kZXggPCBOdW1EZXZpY2VzKQorCSAgICBwcmludGYoIjwtICVkXG4iLCBpbmRleCk7CisJZWxzZQorCSAgICBwcmludGYoIlxuIik7CisJfQogICAgIHByaW50ZigiXG4iKTsKICAgICBwcmludGYoIkRldmljZUlEICBCYXNlMTBoICBCYXNlMTRoICBCYXNlMThoICBCYXNlMUNoICBCYXNlMjBoICBCYXNlMjRoICBST01CYXNlXG4iKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgTnVtUENJOyBpKyspIHsKLSAgICAgICAgcHJpbnRmKCIlMDRYOiUwNFggJTA4bFggJTA4bFggJTA4bFggJTA4bFggJTA4bFggJTA4bFggJTA4bFggIiwKLSAgICAgICAgICAgIFBDSVtpXS5WZW5kb3JJRCwKLSAgICAgICAgICAgIFBDSVtpXS5EZXZpY2VJRCwKLSAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTAsCi0gICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczE0LAotICAgICAgICAgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxOCwKLSAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMUMsCi0gICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczIwLAotICAgICAgICAgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MyNCwKLSAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLlJPTUJhc2VBZGRyZXNzKTsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTnVtRGV2aWNlczsgaW5kZXgrKykgewotICAgICAgICAgICAgaWYgKERldmljZUluZGV4W2luZGV4XSA9PSBpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAoaW5kZXggPCBOdW1EZXZpY2VzKQotICAgICAgICAgICAgcHJpbnRmKCI8LSAlZFxuIiwgaW5kZXgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIH0KKwlwcmludGYoIiUwNFg6JTA0WCAlMDhsWCAlMDhsWCAlMDhsWCAlMDhsWCAlMDhsWCAlMDhsWCAlMDhsWCAiLAorCSAgICBQQ0lbaV0uVmVuZG9ySUQsCisJICAgIFBDSVtpXS5EZXZpY2VJRCwKKwkgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxMCwKKwkgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxNCwKKwkgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxOCwKKwkgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxQywKKwkgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MyMCwKKwkgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MyNCwKKwkgICAgUENJW2ldLnUudHlwZTAuUk9NQmFzZUFkZHJlc3MpOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspIHsKKwkgICAgaWYgKERldmljZUluZGV4W2luZGV4XSA9PSBpKQorCQlicmVhazsKKwkgICAgfQorCWlmIChpbmRleCA8IE51bURldmljZXMpCisJICAgIHByaW50ZigiPC0gJWRcbiIsIGluZGV4KTsKKwllbHNlCisJICAgIHByaW50ZigiXG4iKTsKKwl9CiAgICAgcHJpbnRmKCJcbiIpOwogICAgIHByaW50ZigiRGV2aWNlSUQgIEJBUjEwTGVuIEJBUjE0TGVuIEJBUjE4TGVuIEJBUjFDTGVuIEJBUjIwTGVuIEJBUjI0TGVuIFJPTUxlblxuIik7CiAgICAgZm9yIChpID0gMDsgaSA8IE51bVBDSTsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiJTA0WDolMDRYICUwOGxYICUwOGxYICUwOGxYICUwOGxYICUwOGxYICUwOGxYICUwOGxYICIsCi0gICAgICAgICAgICBQQ0lbaV0uVmVuZG9ySUQsCi0gICAgICAgICAgICBQQ0lbaV0uRGV2aWNlSUQsCi0gICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczEwTGVuLAotICAgICAgICAgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxNExlbiwKLSAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMThMZW4sCi0gICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczFDTGVuLAotICAgICAgICAgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MyMExlbiwKLSAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMjRMZW4sCi0gICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5ST01CYXNlQWRkcmVzc0xlbik7Ci0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspIHsKLSAgICAgICAgICAgIGlmIChEZXZpY2VJbmRleFtpbmRleF0gPT0gaSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4IDwgTnVtRGV2aWNlcykKLSAgICAgICAgICAgIHByaW50ZigiPC0gJWRcbiIsIGluZGV4KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9CisJcHJpbnRmKCIlMDRYOiUwNFggJTA4bFggJTA4bFggJTA4bFggJTA4bFggJTA4bFggJTA4bFggJTA4bFggIiwKKwkgICAgUENJW2ldLlZlbmRvcklELAorCSAgICBQQ0lbaV0uRGV2aWNlSUQsCisJICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTBMZW4sCisJICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTRMZW4sCisJICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMThMZW4sCisJICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMUNMZW4sCisJICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMjBMZW4sCisJICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMjRMZW4sCisJICAgIFBDSVtpXS51LnR5cGUwLlJPTUJhc2VBZGRyZXNzTGVuKTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOdW1EZXZpY2VzOyBpbmRleCsrKSB7CisJICAgIGlmIChEZXZpY2VJbmRleFtpbmRleF0gPT0gaSkKKwkJYnJlYWs7CisJICAgIH0KKwlpZiAoaW5kZXggPCBOdW1EZXZpY2VzKQorCSAgICBwcmludGYoIjwtICVkXG4iLCBpbmRleCk7CisJZWxzZQorCSAgICBwcmludGYoIlxuIik7CisJfQogICAgIHByaW50ZigiXG4iKTsKICAgICBwcmludGYoIkRpc3BsYXlpbmcgZW51bWVyYXRpb24gb2YgJWQgYnJpZGdlIGRldmljZXNcbiIsTnVtQnJpZGdlcyk7CiAgICAgcHJpbnRmKCJcbiIpOwogICAgIHByaW50ZigiRGV2aWNlSUQgIFAjIFMjIEIjIElPQiAgSU9MICBNZW1CYXNlICBNZW1MaW1pdCBQcmVCYXNlICBQcmVMaW1pdCBDdHJsXG4iKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgTnVtQnJpZGdlczsgaSsrKSB7Ci0gICAgICAgIGluZm8gPSAoUENJRGV2aWNlSW5mbyopJlBDSVtCcmlkZ2VJbmRleFtpXV07Ci0gICAgICAgIHByaW50ZigiJTA0WDolMDRYICUwMlggJTAyWCAlMDJYICUwNFggJTA0WCAlMDhYICUwOFggJTA4WCAlMDhYICUwNFhcbiIsCi0gICAgICAgICAgICBpbmZvLT5WZW5kb3JJRCwKLSAgICAgICAgICAgIGluZm8tPkRldmljZUlELAotICAgICAgICAgICAgaW5mby0+dS50eXBlMS5QcmltYXJ5QnVzTnVtYmVyLAotICAgICAgICAgICAgaW5mby0+dS50eXBlMS5TZWNvbmRheUJ1c051bWJlciwKLSAgICAgICAgICAgIGluZm8tPnUudHlwZTEuU3Vib3JkaW5hdGVCdXNOdW1iZXIsCi0gICAgICAgICAgICAoKHUxNilpbmZvLT51LnR5cGUxLklPQmFzZSA8PCA4KSAmIDB4RjAwMCwKLSAgICAgICAgICAgIGluZm8tPnUudHlwZTEuSU9MaW1pdCA/Ci0gICAgICAgICAgICAgICAgKCh1MTYpaW5mby0+dS50eXBlMS5JT0xpbWl0IDw8IDgpIHwgMHhGRkYgOiAwLAotICAgICAgICAgICAgKCh1MzIpaW5mby0+dS50eXBlMS5NZW1vcnlCYXNlIDw8IDE2KSAmIDB4RkZGMDAwMDAsCi0gICAgICAgICAgICBpbmZvLT51LnR5cGUxLk1lbW9yeUxpbWl0ID8KLSAgICAgICAgICAgICAgICAoKHUzMilpbmZvLT51LnR5cGUxLk1lbW9yeUxpbWl0IDw8IDE2KSB8IDB4RkZGRkYgOiAwLAotICAgICAgICAgICAgKCh1MzIpaW5mby0+dS50eXBlMS5QcmVmZXRjaGFibGVNZW1vcnlCYXNlIDw8IDE2KSAmIDB4RkZGMDAwMDAsCi0gICAgICAgICAgICBpbmZvLT51LnR5cGUxLlByZWZldGNoYWJsZU1lbW9yeUxpbWl0ID8KLSAgICAgICAgICAgICAgICAoKHUzMilpbmZvLT51LnR5cGUxLlByZWZldGNoYWJsZU1lbW9yeUxpbWl0IDw8IDE2KSB8IDB4RkZGRkYgOiAwLAotICAgICAgICAgICAgaW5mby0+dS50eXBlMS5CcmlkZ2VDb250cm9sKTsKLSAgICAgICAgfQorCWluZm8gPSAoUENJRGV2aWNlSW5mbyopJlBDSVtCcmlkZ2VJbmRleFtpXV07CisJcHJpbnRmKCIlMDRYOiUwNFggJTAyWCAlMDJYICUwMlggJTA0WCAlMDRYICUwOFggJTA4WCAlMDhYICUwOFggJTA0WFxuIiwKKwkgICAgaW5mby0+VmVuZG9ySUQsCisJICAgIGluZm8tPkRldmljZUlELAorCSAgICBpbmZvLT51LnR5cGUxLlByaW1hcnlCdXNOdW1iZXIsCisJICAgIGluZm8tPnUudHlwZTEuU2Vjb25kYXlCdXNOdW1iZXIsCisJICAgIGluZm8tPnUudHlwZTEuU3Vib3JkaW5hdGVCdXNOdW1iZXIsCisJICAgICgodTE2KWluZm8tPnUudHlwZTEuSU9CYXNlIDw8IDgpICYgMHhGMDAwLAorCSAgICBpbmZvLT51LnR5cGUxLklPTGltaXQgPworCQkoKHUxNilpbmZvLT51LnR5cGUxLklPTGltaXQgPDwgOCkgfCAweEZGRiA6IDAsCisJICAgICgodTMyKWluZm8tPnUudHlwZTEuTWVtb3J5QmFzZSA8PCAxNikgJiAweEZGRjAwMDAwLAorCSAgICBpbmZvLT51LnR5cGUxLk1lbW9yeUxpbWl0ID8KKwkJKCh1MzIpaW5mby0+dS50eXBlMS5NZW1vcnlMaW1pdCA8PCAxNikgfCAweEZGRkZGIDogMCwKKwkgICAgKCh1MzIpaW5mby0+dS50eXBlMS5QcmVmZXRjaGFibGVNZW1vcnlCYXNlIDw8IDE2KSAmIDB4RkZGMDAwMDAsCisJICAgIGluZm8tPnUudHlwZTEuUHJlZmV0Y2hhYmxlTWVtb3J5TGltaXQgPworCQkoKHUzMilpbmZvLT51LnR5cGUxLlByZWZldGNoYWJsZU1lbW9yeUxpbWl0IDw8IDE2KSB8IDB4RkZGRkYgOiAwLAorCSAgICBpbmZvLT51LnR5cGUxLkJyaWRnZUNvbnRyb2wpOworCX0KICAgICBwcmludGYoIlxuIik7CiB9CiAKQEAgLTE5MSw2MyArMTkxLDYzIEBACiAgICAgaW50ICAgICAgICAgICAgIGksajsKICAgICBQQ0lEZXZpY2VJbmZvICAgKmluZm87CiAKLSAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGhhdmUgYmVlbiBjYWxsZWQsIGVudW1lcmF0ZSBhbGwKLSAgICAvLyBkZXZpY2VzIG9uIHRoZSBQQ0kgYnVzLgorICAgIC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgaGF2ZSBiZWVuIGNhbGxlZCwgZW51bWVyYXRlIGFsbCAqLworICAgIC8qIGRldmljZXMgb24gdGhlIFBDSSBidXMuICovCiAgICAgaWYgKE51bVBDSSA9PSAtMSkgewotICAgICAgICBpZiAoKE51bVBDSSA9IFBDSV9nZXROdW1EZXZpY2VzKCkpID09IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIFBDSSA9IG1hbGxvYyhOdW1QQ0kgKiBzaXplb2YoUENJWzBdKSk7Ci0gICAgICAgIEJyaWRnZUluZGV4ID0gbWFsbG9jKE51bVBDSSAqIHNpemVvZihCcmlkZ2VJbmRleFswXSkpOwotICAgICAgICBEZXZpY2VJbmRleCA9IG1hbGxvYyhOdW1QQ0kgKiBzaXplb2YoRGV2aWNlSW5kZXhbMF0pKTsKLSAgICAgICAgaWYgKCFQQ0kgfHwgIUJyaWRnZUluZGV4IHx8ICFEZXZpY2VJbmRleCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IE51bVBDSTsgaSsrKQotICAgICAgICAgICAgUENJW2ldLmR3U2l6ZSA9IHNpemVvZihQQ0lbaV0pOwotICAgICAgICBpZiAoUENJX2VudW1lcmF0ZShQQ0kpID09IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7CisJaWYgKChOdW1QQ0kgPSBQQ0lfZ2V0TnVtRGV2aWNlcygpKSA9PSAwKQorCSAgICByZXR1cm4gLTE7CisJUENJID0gbWFsbG9jKE51bVBDSSAqIHNpemVvZihQQ0lbMF0pKTsKKwlCcmlkZ2VJbmRleCA9IG1hbGxvYyhOdW1QQ0kgKiBzaXplb2YoQnJpZGdlSW5kZXhbMF0pKTsKKwlEZXZpY2VJbmRleCA9IG1hbGxvYyhOdW1QQ0kgKiBzaXplb2YoRGV2aWNlSW5kZXhbMF0pKTsKKwlpZiAoIVBDSSB8fCAhQnJpZGdlSW5kZXggfHwgIURldmljZUluZGV4KQorCSAgICByZXR1cm4gLTE7CisJZm9yIChpID0gMDsgaSA8IE51bVBDSTsgaSsrKQorCSAgICBQQ0lbaV0uZHdTaXplID0gc2l6ZW9mKFBDSVtpXSk7CisJaWYgKFBDSV9lbnVtZXJhdGUoUENJKSA9PSAwKQorCSAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgLy8gQnVpbGQgYSBsaXN0IG9mIGFsbCBQQ0kgYnJpZGdlIGRldmljZXMKLSAgICAgICAgZm9yIChpID0gMCxOdW1CcmlkZ2VzID0gMCxCcmlkZ2VJbmRleFswXSA9IC0xOyBpIDwgTnVtUENJOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChQQ0lbaV0uQmFzZUNsYXNzID09IFBDSV9CUklER0VfQ0xBU1MpCi0gICAgICAgICAgICAgICAgQnJpZGdlSW5kZXhbTnVtQnJpZGdlcysrXSA9IGk7Ci0gICAgICAgICAgICB9CisJLyogQnVpbGQgYSBsaXN0IG9mIGFsbCBQQ0kgYnJpZGdlIGRldmljZXMgKi8KKwlmb3IgKGkgPSAwLE51bUJyaWRnZXMgPSAwLEJyaWRnZUluZGV4WzBdID0gLTE7IGkgPCBOdW1QQ0k7IGkrKykgeworCSAgICBpZiAoUENJW2ldLkJhc2VDbGFzcyA9PSBQQ0lfQlJJREdFX0NMQVNTKQorCQlCcmlkZ2VJbmRleFtOdW1CcmlkZ2VzKytdID0gaTsKKwkgICAgfQogCi0gICAgICAgIC8vIE5vdyBidWlsZCBhIGxpc3Qgb2YgYWxsIGRpc3BsYXkgY2xhc3MgZGV2aWNlcwotICAgICAgICBmb3IgKGkgPSAwLE51bURldmljZXMgPSAxLERldmljZUluZGV4WzBdID0gLTE7IGkgPCBOdW1QQ0k7IGkrKykgewotICAgICAgICAgICAgaWYgKFBDSV9JU19ESVNQTEFZX0NMQVNTKCZQQ0lbaV0pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChQQ0lbaV0uQ29tbWFuZCAmIDB4MykgPT0gMHgzKQotICAgICAgICAgICAgICAgICAgICBEZXZpY2VJbmRleFswXSA9IGk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBEZXZpY2VJbmRleFtOdW1EZXZpY2VzKytdID0gaTsKLSAgICAgICAgICAgICAgICBpZiAoUENJW2ldLnNsb3QucC5CdXMgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGRldmljZSBpcyBvbiBhIGRpZmZlcmVudCBidXMgdGhhbiB0aGUgcHJpbWFyeQotICAgICAgICAgICAgICAgICAgICAvLyBQQ0kgYnVzLCBzbyBpdCBpcyBwcm9iYWJseSBhbiBBR1AgZGV2aWNlLiBGaW5kIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyBBR1AgYnVzIGRldmljZSB0aGF0IGNvbnRyb2xzIHRoYXQgYnVzIHNvIHdlIGNhbgotICAgICAgICAgICAgICAgICAgICAvLyBjb250cm9sIGl0LgotICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTnVtQnJpZGdlczsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gKFBDSURldmljZUluZm8qKSZQQ0lbQnJpZGdlSW5kZXhbal1dOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8tPnUudHlwZTEuU2Vjb25kYXlCdXNOdW1iZXIgPT0gUENJW2ldLnNsb3QucC5CdXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBR1BCcmlkZ2UgPSBpbmZvOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkvKiBOb3cgYnVpbGQgYSBsaXN0IG9mIGFsbCBkaXNwbGF5IGNsYXNzIGRldmljZXMgKi8KKwlmb3IgKGkgPSAwLE51bURldmljZXMgPSAxLERldmljZUluZGV4WzBdID0gLTE7IGkgPCBOdW1QQ0k7IGkrKykgeworCSAgICBpZiAoUENJX0lTX0RJU1BMQVlfQ0xBU1MoJlBDSVtpXSkpIHsKKwkJaWYgKChQQ0lbaV0uQ29tbWFuZCAmIDB4MykgPT0gMHgzKQorCQkgICAgRGV2aWNlSW5kZXhbMF0gPSBpOworCQllbHNlCisJCSAgICBEZXZpY2VJbmRleFtOdW1EZXZpY2VzKytdID0gaTsKKwkJaWYgKFBDSVtpXS5zbG90LnAuQnVzICE9IDApIHsKKwkJICAgIC8qIFRoaXMgZGV2aWNlIGlzIG9uIGEgZGlmZmVyZW50IGJ1cyB0aGFuIHRoZSBwcmltYXJ5ICovCisJCSAgICAvKiBQQ0kgYnVzLCBzbyBpdCBpcyBwcm9iYWJseSBhbiBBR1AgZGV2aWNlLiBGaW5kIHRoZSAqLworCQkgICAgLyogQUdQIGJ1cyBkZXZpY2UgdGhhdCBjb250cm9scyB0aGF0IGJ1cyBzbyB3ZSBjYW4gKi8KKwkJICAgIC8qIGNvbnRyb2wgaXQuICovCisJCSAgICBmb3IgKGogPSAwOyBqIDwgTnVtQnJpZGdlczsgaisrKSB7CisJCQlpbmZvID0gKFBDSURldmljZUluZm8qKSZQQ0lbQnJpZGdlSW5kZXhbal1dOworCQkJaWYgKGluZm8tPnUudHlwZTEuU2Vjb25kYXlCdXNOdW1iZXIgPT0gUENJW2ldLnNsb3QucC5CdXMpIHsKKwkJCSAgICBBR1BCcmlkZ2UgPSBpbmZvOworCQkJICAgIGJyZWFrOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CiAKLSAgICAgICAgLy8gRW51bWVyYXRlIGFsbCBQQ0kgYW5kIGJyaWRnZSBkZXZpY2VzIHRvIHN0YW5kYXJkIG91dHB1dAotICAgICAgICBFbnVtZXJhdGVQQ0koKTsKLSAgICAgICAgfQorCS8qIEVudW1lcmF0ZSBhbGwgUENJIGFuZCBicmlkZ2UgZGV2aWNlcyB0byBzdGFuZGFyZCBvdXRwdXQgKi8KKwlFbnVtZXJhdGVQQ0koKTsKKwl9CiAgICAgcmV0dXJuIE51bURldmljZXM7CiB9CiAKIGludCBtYWluKHZvaWQpCiB7Ci0gICAgLy8gRW51bWVyYXRlIGFsbCBQQ0kgZGV2aWNlcworICAgIC8qIEVudW1lcmF0ZSBhbGwgUENJIGRldmljZXMgKi8KICAgICBQTV9pbml0KCk7CiAgICAgaWYgKFBDSV9lbnVtZXJhdGVEZXZpY2VzKCkgPCAxKSB7Ci0gICAgICAgIHByaW50ZigiTm8gUENJIGRpc3BsYXkgZGV2aWNlcyBmb3VuZCFcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKwlwcmludGYoIk5vIFBDSSBkaXNwbGF5IGRldmljZXMgZm91bmQhXG4iKTsKKwlyZXR1cm4gLTE7CisJfQogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdGljay5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdGljay5jCmluZGV4IGVlMTAxNGYuLjM3ODcyNWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL3RpY2suYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy90aWNrLmMKQEAgLTU0LDE2ICs1NCwxNiBAQAogCiAgICAgcHJpbnRmKCJQcm9ncmFtIHJ1bm5pbmcgaW4gIik7CiAgICAgc3dpdGNoIChQTV9nZXRNb2RlVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgUE1fcmVhbE1vZGU6Ci0gICAgICAgICAgICBwcmludGYoInJlYWwgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV8yODY6Ci0gICAgICAgICAgICBwcmludGYoIjE2IGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV8zODY6Ci0gICAgICAgICAgICBwcmludGYoIjMyIGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWNhc2UgUE1fcmVhbE1vZGU6CisJICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV8yODY6CisJICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV8zODY6CisJICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJfQogCiAgICAgLyogSW5zdGFsbCBvdXIgdGltZXIgaGFuZGxlciBhbmQgbG9jayBoYW5kbGVyIHBhZ2VzIGluIG1lbW9yeS4gSXQgaXMKICAgICAgKiBkaWZmaWN1bHQgdG8gZ2V0IHRoZSBzaXplIG9mIGEgZnVuY3Rpb24gaW4gQywgYnV0IHdlIGtub3cgb3VyCkBAIC03NywxMyArNzcsMTMgQEAKICAgICBwcmludGYoIlRpbWVyIGludGVycnVwdCBoYW5kbGVyIGluc3RhbGxlZCAtIEhpdCBFU0MgdG8gZXhpdFxuIik7CiAgICAgb2xkQ291bnQgPSBjb3VudDsKICAgICB3aGlsZSAoMSkgewotICAgICAgICBpZiAoUE1fa2JoaXQoKSAmJiAoUE1fZ2V0Y2goKSA9PSAweDFCKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoY291bnQgIT0gb2xkQ291bnQpIHsKLSAgICAgICAgICAgIHByaW50ZigiVGljaywgVG9jazogJWxkXG4iLCBjb3VudCk7Ci0gICAgICAgICAgICBvbGRDb3VudCA9IGNvdW50OwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKFBNX2tiaGl0KCkgJiYgKFBNX2dldGNoKCkgPT0gMHgxQikpCisJICAgIGJyZWFrOworCWlmIChjb3VudCAhPSBvbGRDb3VudCkgeworCSAgICBwcmludGYoIlRpY2ssIFRvY2s6ICVsZFxuIiwgY291bnQpOworCSAgICBvbGRDb3VudCA9IGNvdW50OworCSAgICB9CisJfQogCiAgICAgUE1fcmVzdG9yZVRpbWVySGFuZGxlcigpOwogICAgIFBNX3Jlc3RvcmVCcmVha0hhbmRsZXIoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL3RpbWVyYy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdGltZXJjLmMKaW5kZXggNTVlOTVhOC4uN2ZhNzdiNyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdGltZXJjLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdGltZXJjLmMKQEAgLTY5LDggKzY5LDggQEAKIAogICAgIExaVGltZXJPbigpOwogICAgIGZvciAoaiA9IDA7IGogPCAxMDsgaisrKQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjAwMDA7IGkrKykKLSAgICAgICAgICAgIGkgPSBpOworCWZvciAoaSA9IDA7IGkgPCAyMDAwMDsgaSsrKQorCSAgICBpID0gaTsKICAgICBMWlRpbWVyT2ZmKCk7CiAgICAgUmVwb3J0VGltZShMWlRpbWVyQ291bnQoKSk7CiAKQEAgLTgwLDcgKzgwLDcgQEAKICAgICBkZWxheShERUxBWV9TRUNTICogMTAwMCk7CiAgICAgZmluaXNoID0gVUxaUmVhZFRpbWUoKTsKICAgICBwcmludGYoIkRlbGF5IG9mICVkIHNlY3MgdG9vayAlZCAxLzEwdGhzIG9mIGEgc2Vjb25kXG4iLAotICAgICAgICBERUxBWV9TRUNTLFVMWkVsYXBzZWRUaW1lKHN0YXJ0LGZpbmlzaCkpOworCURFTEFZX1NFQ1MsVUxaRWxhcHNlZFRpbWUoc3RhcnQsZmluaXNoKSk7CiAjZW5kaWYKIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdXN3Yy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdXN3Yy5jCmluZGV4IDA4OTJlMjUuLmYwYzdiZDYgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL3Vzd2MuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy91c3djLmMKQEAgLTY2LDUwICs2Niw1MCBAQAogICAgIGludCAgICAgICAgICAgICBpLGo7CiAgICAgUENJRGV2aWNlSW5mbyAgICppbmZvOwogCi0gICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBoYXZlIGJlZW4gY2FsbGVkLCBlbnVtZXJhdGUgYWxsCi0gICAgLy8gZGV2aWNlcyBvbiB0aGUgUENJIGJ1cy4KKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGhhdmUgYmVlbiBjYWxsZWQsIGVudW1lcmF0ZSBhbGwgKi8KKyAgICAvKiBkZXZpY2VzIG9uIHRoZSBQQ0kgYnVzLiAqLwogICAgIGlmIChOdW1QQ0kgPT0gLTEpIHsKLSAgICAgICAgaWYgKChOdW1QQ0kgPSBQQ0lfZ2V0TnVtRGV2aWNlcygpKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBQQ0kgPSBtYWxsb2MoTnVtUENJICogc2l6ZW9mKFBDSVswXSkpOwotICAgICAgICBCcmlkZ2VJbmRleCA9IG1hbGxvYyhOdW1QQ0kgKiBzaXplb2YoQnJpZGdlSW5kZXhbMF0pKTsKLSAgICAgICAgRGV2aWNlSW5kZXggPSBtYWxsb2MoTnVtUENJICogc2l6ZW9mKERldmljZUluZGV4WzBdKSk7Ci0gICAgICAgIGlmICghUENJIHx8ICFCcmlkZ2VJbmRleCB8fCAhRGV2aWNlSW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBOdW1QQ0k7IGkrKykKLSAgICAgICAgICAgIFBDSVtpXS5kd1NpemUgPSBzaXplb2YoUENJW2ldKTsKLSAgICAgICAgaWYgKFBDSV9lbnVtZXJhdGUoUENJKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOworCWlmICgoTnVtUENJID0gUENJX2dldE51bURldmljZXMoKSkgPT0gMCkKKwkgICAgcmV0dXJuIC0xOworCVBDSSA9IG1hbGxvYyhOdW1QQ0kgKiBzaXplb2YoUENJWzBdKSk7CisJQnJpZGdlSW5kZXggPSBtYWxsb2MoTnVtUENJICogc2l6ZW9mKEJyaWRnZUluZGV4WzBdKSk7CisJRGV2aWNlSW5kZXggPSBtYWxsb2MoTnVtUENJICogc2l6ZW9mKERldmljZUluZGV4WzBdKSk7CisJaWYgKCFQQ0kgfHwgIUJyaWRnZUluZGV4IHx8ICFEZXZpY2VJbmRleCkKKwkgICAgcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBOdW1QQ0k7IGkrKykKKwkgICAgUENJW2ldLmR3U2l6ZSA9IHNpemVvZihQQ0lbaV0pOworCWlmIChQQ0lfZW51bWVyYXRlKFBDSSkgPT0gMCkKKwkgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIC8vIEJ1aWxkIGEgbGlzdCBvZiBhbGwgUENJIGJyaWRnZSBkZXZpY2VzCi0gICAgICAgIGZvciAoaSA9IDAsTnVtQnJpZGdlcyA9IDAsQnJpZGdlSW5kZXhbMF0gPSAtMTsgaSA8IE51bVBDSTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoUENJW2ldLkJhc2VDbGFzcyA9PSBQQ0lfQlJJREdFX0NMQVNTKQotICAgICAgICAgICAgICAgIEJyaWRnZUluZGV4W051bUJyaWRnZXMrK10gPSBpOwotICAgICAgICAgICAgfQorCS8qIEJ1aWxkIGEgbGlzdCBvZiBhbGwgUENJIGJyaWRnZSBkZXZpY2VzICovCisJZm9yIChpID0gMCxOdW1CcmlkZ2VzID0gMCxCcmlkZ2VJbmRleFswXSA9IC0xOyBpIDwgTnVtUENJOyBpKyspIHsKKwkgICAgaWYgKFBDSVtpXS5CYXNlQ2xhc3MgPT0gUENJX0JSSURHRV9DTEFTUykKKwkJQnJpZGdlSW5kZXhbTnVtQnJpZGdlcysrXSA9IGk7CisJICAgIH0KIAotICAgICAgICAvLyBOb3cgYnVpbGQgYSBsaXN0IG9mIGFsbCBkaXNwbGF5IGNsYXNzIGRldmljZXMKLSAgICAgICAgZm9yIChpID0gMCxOdW1EZXZpY2VzID0gMSxEZXZpY2VJbmRleFswXSA9IC0xOyBpIDwgTnVtUENJOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChQQ0lfSVNfRElTUExBWV9DTEFTUygmUENJW2ldKSkgewotICAgICAgICAgICAgICAgIGlmICgoUENJW2ldLkNvbW1hbmQgJiAweDMpID09IDB4MykKLSAgICAgICAgICAgICAgICAgICAgRGV2aWNlSW5kZXhbMF0gPSBpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgRGV2aWNlSW5kZXhbTnVtRGV2aWNlcysrXSA9IGk7Ci0gICAgICAgICAgICAgICAgaWYgKFBDSVtpXS5zbG90LnAuQnVzICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBkZXZpY2UgaXMgb24gYSBkaWZmZXJlbnQgYnVzIHRoYW4gdGhlIHByaW1hcnkKLSAgICAgICAgICAgICAgICAgICAgLy8gUENJIGJ1cywgc28gaXQgaXMgcHJvYmFibHkgYW4gQUdQIGRldmljZS4gRmluZCB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gQUdQIGJ1cyBkZXZpY2UgdGhhdCBjb250cm9scyB0aGF0IGJ1cyBzbyB3ZSBjYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbCBpdC4KLSAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IE51bUJyaWRnZXM7IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IChQQ0lEZXZpY2VJbmZvKikmUENJW0JyaWRnZUluZGV4W2pdXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLT51LnR5cGUxLlNlY29uZGF5QnVzTnVtYmVyID09IFBDSVtpXS5zbG90LnAuQnVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQUdQQnJpZGdlID0gaW5mbzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBOb3cgYnVpbGQgYSBsaXN0IG9mIGFsbCBkaXNwbGF5IGNsYXNzIGRldmljZXMgKi8KKwlmb3IgKGkgPSAwLE51bURldmljZXMgPSAxLERldmljZUluZGV4WzBdID0gLTE7IGkgPCBOdW1QQ0k7IGkrKykgeworCSAgICBpZiAoUENJX0lTX0RJU1BMQVlfQ0xBU1MoJlBDSVtpXSkpIHsKKwkJaWYgKChQQ0lbaV0uQ29tbWFuZCAmIDB4MykgPT0gMHgzKQorCQkgICAgRGV2aWNlSW5kZXhbMF0gPSBpOworCQllbHNlCisJCSAgICBEZXZpY2VJbmRleFtOdW1EZXZpY2VzKytdID0gaTsKKwkJaWYgKFBDSVtpXS5zbG90LnAuQnVzICE9IDApIHsKKwkJICAgIC8qIFRoaXMgZGV2aWNlIGlzIG9uIGEgZGlmZmVyZW50IGJ1cyB0aGFuIHRoZSBwcmltYXJ5ICovCisJCSAgICAvKiBQQ0kgYnVzLCBzbyBpdCBpcyBwcm9iYWJseSBhbiBBR1AgZGV2aWNlLiBGaW5kIHRoZSAqLworCQkgICAgLyogQUdQIGJ1cyBkZXZpY2UgdGhhdCBjb250cm9scyB0aGF0IGJ1cyBzbyB3ZSBjYW4gKi8KKwkJICAgIC8qIGNvbnRyb2wgaXQuICovCisJCSAgICBmb3IgKGogPSAwOyBqIDwgTnVtQnJpZGdlczsgaisrKSB7CisJCQlpbmZvID0gKFBDSURldmljZUluZm8qKSZQQ0lbQnJpZGdlSW5kZXhbal1dOworCQkJaWYgKGluZm8tPnUudHlwZTEuU2Vjb25kYXlCdXNOdW1iZXIgPT0gUENJW2ldLnNsb3QucC5CdXMpIHsKKwkJCSAgICBBR1BCcmlkZ2UgPSBpbmZvOworCQkJICAgIGJyZWFrOworCQkJICAgIH0KKwkJCX0KKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQogICAgIHJldHVybiBOdW1EZXZpY2VzOwogfQogCkBAIC0xMjUsMTcgKzEyNSwxNyBAQAogICAgIHByaW50ZigiXG4iKTsKICAgICBwcmludGYoIkRldmljZUlEICBTdWJTeXN0ZW0gIEJhc2UxMGggIChsZW5ndGggICkgIEJhc2UxNGggIChsZW5ndGggIClcbiIpOwogICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IE51bURldmljZXM7IGluZGV4KyspIHsKLSAgICAgICAgaSA9IERldmljZUluZGV4W2luZGV4XTsKLSAgICAgICAgcHJpbnRmKCIlMDRYOiUwNFggJTA0WDolMDRYICAlMDhsWCAoJTZsZCBLQikgJTA4bFggKCU2bGQgS0IpXG4iLAotICAgICAgICAgICAgUENJW2ldLlZlbmRvcklELAotICAgICAgICAgICAgUENJW2ldLkRldmljZUlELAotICAgICAgICAgICAgUENJW2ldLnUudHlwZTAuU3ViU3lzdGVtVmVuZG9ySUQsCi0gICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5TdWJTeXN0ZW1JRCwKLSAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTAsCi0gICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczEwTGVuIC8gMTAyNCwKLSAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTQsCi0gICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczE0TGVuIC8gMTAyNCk7Ci0gICAgICAgIH0KKwlpID0gRGV2aWNlSW5kZXhbaW5kZXhdOworCXByaW50ZigiJTA0WDolMDRYICUwNFg6JTA0WCAgJTA4bFggKCU2bGQgS0IpICUwOGxYICglNmxkIEtCKVxuIiwKKwkgICAgUENJW2ldLlZlbmRvcklELAorCSAgICBQQ0lbaV0uRGV2aWNlSUQsCisJICAgIFBDSVtpXS51LnR5cGUwLlN1YlN5c3RlbVZlbmRvcklELAorCSAgICBQQ0lbaV0udS50eXBlMC5TdWJTeXN0ZW1JRCwKKwkgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxMCwKKwkgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxMExlbiAvIDEwMjQsCisJICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTQsCisJICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTRMZW4gLyAxMDI0KTsKKwl9CiAgICAgcHJpbnRmKCJcbiIpOwogfQogCkBAIC0xNDcsMTYgKzE0NywxNiBAQAogICAgIHVpbnQgdHlwZSkKIHsKICAgICBzdGF0aWMgY2hhciAqbmFtZXNbXSA9IHsKLSAgICAgICAgIlVOQ0FDSEFCTEUiLAotICAgICAgICAiV1JDT01CIiwKLSAgICAgICAgIlVOS05PV04iLAotICAgICAgICAiVU5LTk9XTiIsCi0gICAgICAgICJXUlRIUk9VR0giLAotICAgICAgICAiV1JQUk9UIiwKLSAgICAgICAgIldSQkFDSyIsCi0gICAgICAgIH07CisJIlVOQ0FDSEFCTEUiLAorCSJXUkNPTUIiLAorCSJVTktOT1dOIiwKKwkiVU5LTk9XTiIsCisJIldSVEhST1VHSCIsCisJIldSUFJPVCIsCisJIldSQkFDSyIsCisJfTsKICAgICBpZiAodHlwZSA8PSBQTV9NVFJSX01BWCkKLSAgICAgICAgcmV0dXJuIG5hbWVzW3R5cGVdOworCXJldHVybiBuYW1lc1t0eXBlXTsKICAgICByZXR1cm4gIlVOS05PV04iOwogfQogCkBAIC0xODMsNDIgKzE4Myw0MiBAQAogICAgIGludCBlcnIpCiB7CiAgICAgaWYgKGVyciA9PSBQTV9NVFJSX0VSUl9PSykKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICBzd2l0Y2ggKGVycikgewotICAgICAgICBjYXNlIFBNX01UUlJfTk9UX1NVUFBPUlRFRDoKLSAgICAgICAgICAgIHByaW50ZigiRmFpbGVkOiBNVFJSIGlzIG5vdCBzdXBwb3J0ZWQgYnkgaG9zdCBDUFVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fTVRSUl9FUlJfUEFSQU1TOgotICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQ6IEludmFsaWQgcGFyYW1ldGVycyBwYXNzZWQgdG8gUE1fZW5hYmxlV3JpdGVDb21iaW5lZCFcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fTVRSUl9FUlJfTk9UXzRLQl9BTElHTkVEOgotICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQ6IEFkZHJlc3MgaXMgbm90IDRLYiBhbGlnbmVkIVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV9NVFJSX0VSUl9CRUxPV18xTUI6Ci0gICAgICAgICAgICBwcmludGYoIkZhaWxlZDogQWRkcmVzc2VzIGJlbG93IDFNYiBjYW5ub3QgYmUgd3JpdGUgY29tYmluZWQhXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNX01UUlJfRVJSX05PVF9BTElHTkVEOgotICAgICAgICAgICAgcHJpbnRmKCJGYWlsZWQ6IEFkZHJlc3MgaXMgbm90IGNvcnJlY3RseSBhbGlnbmVkIGZvciBwcm9jZXNzb3IhXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNX01UUlJfRVJSX09WRVJMQVA6Ci0gICAgICAgICAgICBwcmludGYoIkZhaWxlZDogQWRkcmVzcyBvdmVybGFwcyBhbiBleGlzdGluZyByZWdpb24hXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBNX01UUlJfRVJSX1RZUEVfTUlTTUFUQ0g6Ci0gICAgICAgICAgICBwcmludGYoIkZhaWxlZDogQWRyZXNzIGlzIGNvbnRhaW5lZCB3aXRoIGV4aXN0aW5nIHJlZ2lvbiwgYnV0IHR5cGUgaXMgZGlmZmVyZW50IVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV9NVFJSX0VSUl9OT05FX0ZSRUU6Ci0gICAgICAgICAgICBwcmludGYoIkZhaWxlZDogT3V0IG9mIE1UUlIgcmVnaXN0ZXJzIVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV9NVFJSX0VSUl9OT1dSQ09NQjoKLSAgICAgICAgICAgIHByaW50ZigiRmFpbGVkOiBUaGlzIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IHdyaXRlIGNvbWJpbmluZyFcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fTVRSUl9FUlJfTk9fT1NfU1VQUE9SVDoKLSAgICAgICAgICAgIHByaW50ZigiRmFpbGVkOiBNVFJSIGlzIG5vdCBzdXBwb3J0ZWQgYnkgaG9zdCBPU1xuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50ZigiRmFpbGVkOiBVTktOT1dOIEVSUk9SIVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWNhc2UgUE1fTVRSUl9OT1RfU1VQUE9SVEVEOgorCSAgICBwcmludGYoIkZhaWxlZDogTVRSUiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGhvc3QgQ1BVXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV9NVFJSX0VSUl9QQVJBTVM6CisJICAgIHByaW50ZigiRmFpbGVkOiBJbnZhbGlkIHBhcmFtZXRlcnMgcGFzc2VkIHRvIFBNX2VuYWJsZVdyaXRlQ29tYmluZWQhXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV9NVFJSX0VSUl9OT1RfNEtCX0FMSUdORUQ6CisJICAgIHByaW50ZigiRmFpbGVkOiBBZGRyZXNzIGlzIG5vdCA0S2IgYWxpZ25lZCFcbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNX01UUlJfRVJSX0JFTE9XXzFNQjoKKwkgICAgcHJpbnRmKCJGYWlsZWQ6IEFkZHJlc3NlcyBiZWxvdyAxTWIgY2Fubm90IGJlIHdyaXRlIGNvbWJpbmVkIVxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fTVRSUl9FUlJfTk9UX0FMSUdORUQ6CisJICAgIHByaW50ZigiRmFpbGVkOiBBZGRyZXNzIGlzIG5vdCBjb3JyZWN0bHkgYWxpZ25lZCBmb3IgcHJvY2Vzc29yIVxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fTVRSUl9FUlJfT1ZFUkxBUDoKKwkgICAgcHJpbnRmKCJGYWlsZWQ6IEFkZHJlc3Mgb3ZlcmxhcHMgYW4gZXhpc3RpbmcgcmVnaW9uIVxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fTVRSUl9FUlJfVFlQRV9NSVNNQVRDSDoKKwkgICAgcHJpbnRmKCJGYWlsZWQ6IEFkcmVzcyBpcyBjb250YWluZWQgd2l0aCBleGlzdGluZyByZWdpb24sIGJ1dCB0eXBlIGlzIGRpZmZlcmVudCFcbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNX01UUlJfRVJSX05PTkVfRlJFRToKKwkgICAgcHJpbnRmKCJGYWlsZWQ6IE91dCBvZiBNVFJSIHJlZ2lzdGVycyFcbiIpOworCSAgICBicmVhazsKKwljYXNlIFBNX01UUlJfRVJSX05PV1JDT01COgorCSAgICBwcmludGYoIkZhaWxlZDogVGhpcyBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCB3cml0ZSBjb21iaW5pbmchXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV9NVFJSX0VSUl9OT19PU19TVVBQT1JUOgorCSAgICBwcmludGYoIkZhaWxlZDogTVRSUiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGhvc3QgT1NcbiIpOworCSAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBwcmludGYoIkZhaWxlZDogVU5LTk9XTiBFUlJPUiFcbiIpOworCSAgICBicmVhazsKKwl9CiAgICAgZXhpdCgtMSk7CiB9CiAKQEAgLTI0MiwyMCArMjQyLDIwIEBACiAgICAgaW50IGksaW5kZXg7CiAKICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOdW1EZXZpY2VzOyBpbmRleCsrKSB7Ci0gICAgICAgIGkgPSBEZXZpY2VJbmRleFtpbmRleF07Ci0gICAgICAgIGlmIChQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczEwICYgMHg4KSB7Ci0gICAgICAgICAgICBMb2dNVFJSRXJyb3IoUE1fZW5hYmxlV3JpdGVDb21iaW5lKAotICAgICAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTAgJiAweEZGRkZGRkYwLAotICAgICAgICAgICAgICAgIFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTBMZW4sCi0gICAgICAgICAgICAgICAgUE1fTVRSUl9XUkNPTUIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgaWYgKFBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTQgJiAweDgpIHsKLSAgICAgICAgICAgIExvZ01UUlJFcnJvcihQTV9lbmFibGVXcml0ZUNvbWJpbmUoCi0gICAgICAgICAgICAgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxNCAmIDB4RkZGRkZGRjAsCi0gICAgICAgICAgICAgICAgUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxNExlbiwKLSAgICAgICAgICAgICAgICBQTV9NVFJSX1dSQ09NQikpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaSA9IERldmljZUluZGV4W2luZGV4XTsKKwlpZiAoUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxMCAmIDB4OCkgeworCSAgICBMb2dNVFJSRXJyb3IoUE1fZW5hYmxlV3JpdGVDb21iaW5lKAorCQlQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczEwICYgMHhGRkZGRkZGMCwKKwkJUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxMExlbiwKKwkJUE1fTVRSUl9XUkNPTUIpKTsKKwkgICAgfQorCWlmIChQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczE0ICYgMHg4KSB7CisJICAgIExvZ01UUlJFcnJvcihQTV9lbmFibGVXcml0ZUNvbWJpbmUoCisJCVBDSVtpXS51LnR5cGUwLkJhc2VBZGRyZXNzMTQgJiAweEZGRkZGRkYwLAorCQlQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczE0TGVuLAorCQlQTV9NVFJSX1dSQ09NQikpOworCSAgICB9CisJfQogICAgIHByaW50ZigiXG4iKTsKICAgICBTaG93RGlzcGxheURldmljZXMoKTsKICAgICBTaG93V3JpdGVDb21iaW5lKCk7CkBAIC0yNzAsMjAgKzI3MCwyMCBAQAogICAgIGludCBpLGluZGV4OwogCiAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTnVtRGV2aWNlczsgaW5kZXgrKykgewotICAgICAgICBpID0gRGV2aWNlSW5kZXhbaW5kZXhdOwotICAgICAgICBpZiAoUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxMCAmIDB4OCkgewotICAgICAgICAgICAgTG9nTVRSUkVycm9yKFBNX2VuYWJsZVdyaXRlQ29tYmluZSgKLSAgICAgICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczEwICYgMHhGRkZGRkZGMCwKLSAgICAgICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczEwTGVuLAotICAgICAgICAgICAgICAgIFBNX01UUlJfVU5DQUNIQUJMRSkpOwotICAgICAgICAgICAgfQotICAgICAgICBpZiAoUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxNCAmIDB4OCkgewotICAgICAgICAgICAgTG9nTVRSUkVycm9yKFBNX2VuYWJsZVdyaXRlQ29tYmluZSgKLSAgICAgICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczE0ICYgMHhGRkZGRkZGMCwKLSAgICAgICAgICAgICAgICBQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczE0TGVuLAotICAgICAgICAgICAgICAgIFBNX01UUlJfVU5DQUNIQUJMRSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaSA9IERldmljZUluZGV4W2luZGV4XTsKKwlpZiAoUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxMCAmIDB4OCkgeworCSAgICBMb2dNVFJSRXJyb3IoUE1fZW5hYmxlV3JpdGVDb21iaW5lKAorCQlQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczEwICYgMHhGRkZGRkZGMCwKKwkJUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxMExlbiwKKwkJUE1fTVRSUl9VTkNBQ0hBQkxFKSk7CisJICAgIH0KKwlpZiAoUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxNCAmIDB4OCkgeworCSAgICBMb2dNVFJSRXJyb3IoUE1fZW5hYmxlV3JpdGVDb21iaW5lKAorCQlQQ0lbaV0udS50eXBlMC5CYXNlQWRkcmVzczE0ICYgMHhGRkZGRkZGMCwKKwkJUENJW2ldLnUudHlwZTAuQmFzZUFkZHJlc3MxNExlbiwKKwkJUE1fTVRSUl9VTkNBQ0hBQkxFKSk7CisJICAgIH0KKwl9CiAgICAgcHJpbnRmKCJcbiIpOwogICAgIFNob3dEaXNwbGF5RGV2aWNlcygpOwogICAgIFNob3dXcml0ZUNvbWJpbmUoKTsKQEAgLTI5MywxOSArMjkzLDE5IEBACiB7CiAgICAgUE1faW5pdCgpOwogICAgIGlmIChQQ0lfZW51bWVyYXRlRGV2aWNlcygpIDwgMSkgewotICAgICAgICBwcmludGYoIk5vIFBDSSBkaXNwbGF5IGRldmljZXMgZm91bmQhXG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisJcHJpbnRmKCJObyBQQ0kgZGlzcGxheSBkZXZpY2VzIGZvdW5kIVxuIik7CisJcmV0dXJuIC0xOworCX0KICAgICBpZiAoYXJnYyA8IDIpIHsKLSAgICAgICAgcHJpbnRmKCJ1c2FnZTogdXN3YyBbLXNob3cgLW9uIC1vZmZdXG5cbiIpOwotICAgICAgICBTaG93RGlzcGxheURldmljZXMoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisJcHJpbnRmKCJ1c2FnZTogdXN3YyBbLXNob3cgLW9uIC1vZmZdXG5cbiIpOworCVNob3dEaXNwbGF5RGV2aWNlcygpOworCXJldHVybiAtMTsKKwl9CiAgICAgaWYgKHN0cmljbXAoYXJndlsxXSwiLXNob3ciKSA9PSAwKQotICAgICAgICBTaG93V3JpdGVDb21iaW5lKCk7CisJU2hvd1dyaXRlQ29tYmluZSgpOwogICAgIGVsc2UgaWYgKHN0cmljbXAoYXJndlsxXSwiLW9uIikgPT0gMCkKLSAgICAgICAgRW5hYmxlV3JpdGVDb21iaW5lKCk7CisJRW5hYmxlV3JpdGVDb21iaW5lKCk7CiAgICAgZWxzZSBpZiAoc3RyaWNtcChhcmd2WzFdLCItb2ZmIikgPT0gMCkKLSAgICAgICAgRGlzYWJsZVdyaXRlQ29tYmluZSgpOworCURpc2FibGVXcml0ZUNvbWJpbmUoKTsKICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL3ZmdGVzdC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdmZ0ZXN0LmMKaW5kZXggNjMzYTc2ZC4uYjdlM2JiNyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdmZ0ZXN0LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdmZ0ZXN0LmMKQEAgLTUxLDI3ICs1MSwyNyBAQAogCiAgICAgcHJpbnRmKCJQcm9ncmFtIHJ1bm5pbmcgaW4gIik7CiAgICAgc3dpdGNoIChQTV9nZXRNb2RlVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgUE1fcmVhbE1vZGU6Ci0gICAgICAgICAgICBwcmludGYoInJlYWwgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV8yODY6Ci0gICAgICAgICAgICBwcmludGYoIjE2IGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQTV8zODY6Ci0gICAgICAgICAgICBwcmludGYoIjMyIGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWNhc2UgUE1fcmVhbE1vZGU6CisJICAgIHByaW50ZigicmVhbCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV8yODY6CisJICAgIHByaW50ZigiMTYgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBQTV8zODY6CisJICAgIHByaW50ZigiMzIgYml0IHByb3RlY3RlZCBtb2RlLlxuXG4iKTsKKwkgICAgYnJlYWs7CisJfQogCiAgICAgaWYgKCFWRl9hdmFpbGFibGUoKSkgewotICAgICAgICBwcmludGYoIlZpcnR1YWwgTGluZWFyIEZyYW1lYnVmZmVyIG5vdCBhdmFpbGFibGUuXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQorCXByaW50ZigiVmlydHVhbCBMaW5lYXIgRnJhbWVidWZmZXIgbm90IGF2YWlsYWJsZS5cbiIpOworCWV4aXQoMSk7CisJfQogCiAgICAgdmZCdWZmZXIgPSBWRl9pbml0KDB4QTAwMDAsNjQsc2l6ZW9mKGNvZGUpLGNvZGUpOwogICAgIGlmICghdmZCdWZmZXIpIHsKLSAgICAgICAgcHJpbnRmKCJGYWlsdXJlIHRvIGluaXRpYWxpc2UgVmlydHVhbCBMaW5lYXIgRnJhbWVidWZmZXIhXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQorCXByaW50ZigiRmFpbHVyZSB0byBpbml0aWFsaXNlIFZpcnR1YWwgTGluZWFyIEZyYW1lYnVmZmVyIVxuIik7CisJZXhpdCgxKTsKKwl9CiAgICAgVkZfZXhpdCgpOwogICAgIHByaW50ZigiVmlydHVhbCBMaW5lYXIgRnJhbWVidWZmZXIgc2V0IHVwIHN1Y2Nlc3NmdWxseSFcbiIpOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdmlkZW8uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Rlc3RzL3ZpZGVvLmMKaW5kZXggN2Y2ZjY3Zi4uOTJhZGNkZCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdGVzdHMvdmlkZW8uYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS90ZXN0cy92aWRlby5jCkBAIC05MCwxMiArOTAsMTIgQEAKICAgICBpbnQgICAgICAgICAgICAgeCx5OwogCiAgICAgZm9yICh5ID0gc3RhcnR5OyB5IDw9IGVuZHk7IHkrKykgewotICAgICAgICB2ID0gU0NSRUVOKHN0YXJ0eCx5KTsKLSAgICAgICAgZm9yICh4ID0gc3RhcnR4OyB4IDw9IGVuZHg7IHgrKykgewotICAgICAgICAgICAgKnYrKyA9IGM7Ci0gICAgICAgICAgICAqdisrID0gYXR0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXYgPSBTQ1JFRU4oc3RhcnR4LHkpOworCWZvciAoeCA9IHN0YXJ0eDsgeCA8PSBlbmR4OyB4KyspIHsKKwkgICAgKnYrKyA9IGM7CisJICAgICp2KysgPSBhdHRyOworCSAgICB9CisJfQogfQogCiAvKiBSb3V0aW5lIHRvIGRpc3BsYXkgYSBzaW5nbGUgY2hhcmFjdGVyIHVzaW5nIGRpcmVjdCB2aWRlbyB3cml0ZXMgKi8KQEAgLTEyNCwxOCArMTI0LDE4IEBACiAgICAgYiA9IGJvcmRlcl9jaGFyczsKIAogICAgIGZvciAoaSA9IHN0YXJ0eSsxOyBpIDwgZW5keTsgaSsrKSB7Ci0gICAgICAgIHdyaXRlQ2hhcihzdGFydHgsIGksICpiLCBhdHRyKTsKLSAgICAgICAgd3JpdGVDaGFyKGVuZHgsIGksICpiLCBhdHRyKTsKLSAgICAgICAgfQorCXdyaXRlQ2hhcihzdGFydHgsIGksICpiLCBhdHRyKTsKKwl3cml0ZUNoYXIoZW5keCwgaSwgKmIsIGF0dHIpOworCX0KICAgICBiKys7CiAgICAgZm9yIChpID0gc3RhcnR4KzEsIHYgPSBTQ1JFRU4oc3RhcnR4KzEsIHN0YXJ0eSk7IGkgPCBlbmR4OyBpKyspIHsKLSAgICAgICAgKnYrKyA9ICpiOwotICAgICAgICAqdisrID0gYXR0cjsKLSAgICAgICAgfQorCSp2KysgPSAqYjsKKwkqdisrID0gYXR0cjsKKwl9CiAgICAgZm9yIChpID0gc3RhcnR4KzEsIHYgPSBTQ1JFRU4oc3RhcnR4KzEsIGVuZHkpOyBpIDwgZW5keDsgaSsrKSB7Ci0gICAgICAgICp2KysgPSAqYjsKLSAgICAgICAgKnYrKyA9IGF0dHI7Ci0gICAgICAgIH0KKwkqdisrID0gKmI7CisJKnYrKyA9IGF0dHI7CisJfQogICAgIGIrKzsKICAgICB3cml0ZUNoYXIoc3RhcnR4LCBzdGFydHksICpiKyssIGF0dHIpOwogICAgIHdyaXRlQ2hhcihlbmR4LCBzdGFydHksICpiKyssIGF0dHIpOwpAQCAtMTUwLDE2ICsxNTAsMTYgQEAKIAogICAgIHByaW50ZigiUHJvZ3JhbSBydW5uaW5nIGluICIpOwogICAgIHN3aXRjaCAoUE1fZ2V0TW9kZVR5cGUoKSkgewotICAgICAgICBjYXNlIFBNX3JlYWxNb2RlOgotICAgICAgICAgICAgcHJpbnRmKCJyZWFsIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fMjg2OgotICAgICAgICAgICAgcHJpbnRmKCIxNiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUE1fMzg2OgotICAgICAgICAgICAgcHJpbnRmKCIzMiBiaXQgcHJvdGVjdGVkIG1vZGUuXG5cbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwljYXNlIFBNX3JlYWxNb2RlOgorCSAgICBwcmludGYoInJlYWwgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fMjg2OgorCSAgICBwcmludGYoIjE2IGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCWNhc2UgUE1fMzg2OgorCSAgICBwcmludGYoIjMyIGJpdCBwcm90ZWN0ZWQgbW9kZS5cblxuIik7CisJICAgIGJyZWFrOworCX0KIAogICAgIGh3bmRDb25zb2xlID0gUE1fb3BlbkNvbnNvbGUoMCwwLDAsMCwwLHRydWUpOwogICAgIHByaW50ZigiSGl0IGFueSBrZXkgdG8gc3RhcnQgODB4MjUgdGV4dCBtb2RlIGFuZCBwZXJmb3JtIHNvbWUgZGlyZWN0IHZpZGVvIG91dHB1dC5cbiIpOwpAQCAtMTY3LDE3ICsxNjcsMTcgQEAKIAogICAgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIHRvIHNhdmUgY29uc29sZSBzdGF0ZSBhbmQgc2F2ZSB0aGUgc3RhdGUgKi8KICAgICBpZiAoKHN0YXRlQnVmID0gUE1fbWFsbG9jKFBNX2dldENvbnNvbGVTdGF0ZVNpemUoKSkpID09IE5VTEwpIHsKLSAgICAgICAgcHJpbnRmKCJVbmFibGUgdG8gYWxsb2NhdGUgY29uc29sZSBzdGF0ZSBidWZmZXIhXG4iKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQorCXByaW50ZigiVW5hYmxlIHRvIGFsbG9jYXRlIGNvbnNvbGUgc3RhdGUgYnVmZmVyIVxuIik7CisJZXhpdCgxKTsKKwl9CiAgICAgUE1fc2F2ZUNvbnNvbGVTdGF0ZShzdGF0ZUJ1ZiwwKTsKICAgICBiaW9zID0gUE1fZ2V0QklPU1BvaW50ZXIoKTsKICAgICBvcmdNb2RlID0gZ2V0VmlkZW9Nb2RlKCk7CiAgICAgc2V0VmlkZW9Nb2RlKDB4Myk7CiAgICAgaWYgKCh2aWRlb1B0ciA9IFBNX21hcFBoeXNpY2FsQWRkcigweEI4MDAwLDB4RkZGRix0cnVlKSkgPT0gTlVMTCkgewotICAgICAgICBwcmludGYoIlVuYWJsZSB0byBvYnRhaW4gcG9pbnRlciB0byBmcmFtZWJ1ZmZlciFcbiIpOwotICAgICAgICBleGl0KDEpOwotICAgICAgICB9CisJcHJpbnRmKCJVbmFibGUgdG8gb2J0YWluIHBvaW50ZXIgdG8gZnJhbWVidWZmZXIhXG4iKTsKKwlleGl0KDEpOworCX0KIAogICAgIC8qIERyYXcgc29tZSB0ZXh0IG9uIHRoZSBzY3JlZW4gKi8KICAgICBmaWxsKDAsIDAsIDc5LCAyNCwgMTc2LCAweDFFKTsKQEAgLTE5Nyw0ICsxOTcsMyBAQAogICAgIHByaW50ZigiVmlkZW8gTWVtb3J5ID0gJTA4WFxuIiwgKGludCl2aWRlb1B0cik7CiAgICAgcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3ZkZC9maWxlaW8uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3ZkZC9maWxlaW8uYwppbmRleCBkYmJhZjM3Li45Mzc0MmRlIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS92ZGQvZmlsZWlvLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdmRkL2ZpbGVpby5jCkBAIC02Myw1NCArNjMsNTQgQEAKICAgICBVTE9ORyAgIG9tb2RlLCBvZmxhZ3M7CiAKICAgICBpZiAoZiAhPSBOVUxMKSB7Ci0gICAgICAgIGYtPm9mZnNldCA9IDA7Ci0gICAgICAgIGYtPnRleHQgPSAobW9kZVsxXSA9PSAndCcgfHwgbW9kZVsyXSA9PSAndCcpOwotICAgICAgICBmLT53cml0ZW1vZGUgPSAobW9kZVswXSA9PSAndycpIHx8IChtb2RlWzBdID09ICdhJyk7Ci0gICAgICAgIGYtPnVucHV0YyA9IEVPRjsKLSAgICAgICAgZi0+ZW5kcCA9IGYtPmJ1ZiArIHNpemVvZihmLT5idWYpOwotICAgICAgICBmLT5jdXJwID0gZi0+c3RhcnRwID0gZi0+YnVmOworCWYtPm9mZnNldCA9IDA7CisJZi0+dGV4dCA9IChtb2RlWzFdID09ICd0JyB8fCBtb2RlWzJdID09ICd0Jyk7CisJZi0+d3JpdGVtb2RlID0gKG1vZGVbMF0gPT0gJ3cnKSB8fCAobW9kZVswXSA9PSAnYScpOworCWYtPnVucHV0YyA9IEVPRjsKKwlmLT5lbmRwID0gZi0+YnVmICsgc2l6ZW9mKGYtPmJ1Zik7CisJZi0+Y3VycCA9IGYtPnN0YXJ0cCA9IGYtPmJ1ZjsKIAotICAgICAgICBpZiAobW9kZVswXSA9PSAncicpIHsKLSAgICAgICAgICAgICNpZmRlZiBfX09TMl9WRERfXwotICAgICAgICAgICAgb21vZGUgID0gVkRIT1BFTl9BQ0NFU1NfUkVBRE9OTFkgfCBWREhPUEVOX1NIQVJFX0RFTllOT05FOwotICAgICAgICAgICAgb2ZsYWdzID0gVkRIT1BFTl9BQ1RJT05fT1BFTl9JRl9FWElTVFMgfCBWREhPUEVOX0FDVElPTl9GQUlMX0lGX05FVzsKLSAgICAgICAgICAgICNlbHNlCi0gICAgICAgICAgICBvbW9kZSAgPSBPUEVOX0FDQ0VTU19SRUFET05MWSB8IE9QRU5fU0hBUkVfREVOWU5PTkU7Ci0gICAgICAgICAgICBvZmxhZ3MgPSBPUEVOX0FDVElPTl9PUEVOX0lGX0VYSVNUUyB8IE9QRU5fQUNUSU9OX0ZBSUxfSUZfTkVXOwotICAgICAgICAgICAgI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1vZGVbMF0gPT0gJ3cnKSB7Ci0gICAgICAgICAgICAjaWZkZWYgX19PUzJfVkREX18KLSAgICAgICAgICAgIG9tb2RlICA9IFZESE9QRU5fQUNDRVNTX1dSSVRFT05MWSB8IFZESE9QRU5fU0hBUkVfREVOWVdSSVRFOwotICAgICAgICAgICAgb2ZsYWdzID0gVkRIT1BFTl9BQ1RJT05fUkVQTEFDRV9JRl9FWElTVFMgfCBWREhPUEVOX0FDVElPTl9DUkVBVEVfSUZfTkVXOwotICAgICAgICAgICAgI2Vsc2UKLSAgICAgICAgICAgIG9tb2RlICA9IE9QRU5fQUNDRVNTX1dSSVRFT05MWSB8IE9QRU5fU0hBUkVfREVOWVdSSVRFOwotICAgICAgICAgICAgb2ZsYWdzID0gT1BFTl9BQ1RJT05fUkVQTEFDRV9JRl9FWElTVFMgfCBPUEVOX0FDVElPTl9DUkVBVEVfSUZfTkVXOwotICAgICAgICAgICAgI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgI2lmZGVmIF9fT1MyX1ZERF9fCi0gICAgICAgICAgICBvbW9kZSAgPSBWREhPUEVOX0FDQ0VTU19SRUFEV1JJVEUgfCBWREhPUEVOX1NIQVJFX0RFTllXUklURTsKLSAgICAgICAgICAgIG9mbGFncyA9IFZESE9QRU5fQUNUSU9OX09QRU5fSUZfRVhJU1RTIHwgVkRIT1BFTl9BQ1RJT05fQ1JFQVRFX0lGX05FVzsKLSAgICAgICAgICAgICNlbHNlCi0gICAgICAgICAgICBvbW9kZSAgPSBPUEVOX0FDQ0VTU19SRUFEV1JJVEUgfCBPUEVOX1NIQVJFX0RFTllXUklURTsKLSAgICAgICAgICAgIG9mbGFncyA9IE9QRU5fQUNUSU9OX09QRU5fSUZfRVhJU1RTIHwgT1BFTl9BQ1RJT05fQ1JFQVRFX0lGX05FVzsKLSAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICByYyA9IF9PUzJPcGVuKChQU1opZmlsZW5hbWUsIChQSEZJTEUpJmYtPmhhbmRsZSwgJnVsQWN0aW9uLCAwLCBWREhPUEVOX0ZJTEVfTk9STUFMLCBvZmxhZ3MsIG9tb2RlLCBOVUxMKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIFBNX2ZyZWUoZik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKwlpZiAobW9kZVswXSA9PSAncicpIHsKKwkgICAgI2lmZGVmIF9fT1MyX1ZERF9fCisJICAgIG9tb2RlICA9IFZESE9QRU5fQUNDRVNTX1JFQURPTkxZIHwgVkRIT1BFTl9TSEFSRV9ERU5ZTk9ORTsKKwkgICAgb2ZsYWdzID0gVkRIT1BFTl9BQ1RJT05fT1BFTl9JRl9FWElTVFMgfCBWREhPUEVOX0FDVElPTl9GQUlMX0lGX05FVzsKKwkgICAgI2Vsc2UKKwkgICAgb21vZGUgID0gT1BFTl9BQ0NFU1NfUkVBRE9OTFkgfCBPUEVOX1NIQVJFX0RFTllOT05FOworCSAgICBvZmxhZ3MgPSBPUEVOX0FDVElPTl9PUEVOX0lGX0VYSVNUUyB8IE9QRU5fQUNUSU9OX0ZBSUxfSUZfTkVXOworCSAgICAjZW5kaWYKKwkgICAgfQorCWVsc2UgaWYgKG1vZGVbMF0gPT0gJ3cnKSB7CisJICAgICNpZmRlZiBfX09TMl9WRERfXworCSAgICBvbW9kZSAgPSBWREhPUEVOX0FDQ0VTU19XUklURU9OTFkgfCBWREhPUEVOX1NIQVJFX0RFTllXUklURTsKKwkgICAgb2ZsYWdzID0gVkRIT1BFTl9BQ1RJT05fUkVQTEFDRV9JRl9FWElTVFMgfCBWREhPUEVOX0FDVElPTl9DUkVBVEVfSUZfTkVXOworCSAgICAjZWxzZQorCSAgICBvbW9kZSAgPSBPUEVOX0FDQ0VTU19XUklURU9OTFkgfCBPUEVOX1NIQVJFX0RFTllXUklURTsKKwkgICAgb2ZsYWdzID0gT1BFTl9BQ1RJT05fUkVQTEFDRV9JRl9FWElTVFMgfCBPUEVOX0FDVElPTl9DUkVBVEVfSUZfTkVXOworCSAgICAjZW5kaWYKKwkgICAgfQorCWVsc2UgeworCSAgICAjaWZkZWYgX19PUzJfVkREX18KKwkgICAgb21vZGUgID0gVkRIT1BFTl9BQ0NFU1NfUkVBRFdSSVRFIHwgVkRIT1BFTl9TSEFSRV9ERU5ZV1JJVEU7CisJICAgIG9mbGFncyA9IFZESE9QRU5fQUNUSU9OX09QRU5fSUZfRVhJU1RTIHwgVkRIT1BFTl9BQ1RJT05fQ1JFQVRFX0lGX05FVzsKKwkgICAgI2Vsc2UKKwkgICAgb21vZGUgID0gT1BFTl9BQ0NFU1NfUkVBRFdSSVRFIHwgT1BFTl9TSEFSRV9ERU5ZV1JJVEU7CisJICAgIG9mbGFncyA9IE9QRU5fQUNUSU9OX09QRU5fSUZfRVhJU1RTIHwgT1BFTl9BQ1RJT05fQ1JFQVRFX0lGX05FVzsKKwkgICAgI2VuZGlmCisJICAgIH0KKwlyYyA9IF9PUzJPcGVuKChQU1opZmlsZW5hbWUsIChQSEZJTEUpJmYtPmhhbmRsZSwgJnVsQWN0aW9uLCAwLCBWREhPUEVOX0ZJTEVfTk9STUFMLCBvZmxhZ3MsIG9tb2RlLCBOVUxMKTsKKwlpZiAocmMgIT0gMCkgeworCSAgICBQTV9mcmVlKGYpOworCSAgICByZXR1cm4gTlVMTDsKKwkgICAgfQogCi0gICAgICAgICNpZmRlZiBfX09TMl9WRERfXwotICAgICAgICBmLT5maWxlc2l6ZSA9IFZESFNlZWsoKEhGSUxFKWYtPmhhbmRsZSwgMCwgVkRIU0tfRU5EX09GX0ZJTEUpOwotICAgICAgICAjZWxzZQotICAgICAgICByYyA9IERvc1NldEZpbGVQdHIoKEhGSUxFKWYtPmhhbmRsZSwgMCwgRklMRV9FTkQsICZmLT5maWxlc2l6ZSk7Ci0gICAgICAgICNlbmRpZgorCSNpZmRlZiBfX09TMl9WRERfXworCWYtPmZpbGVzaXplID0gVkRIU2VlaygoSEZJTEUpZi0+aGFuZGxlLCAwLCBWREhTS19FTkRfT0ZfRklMRSk7CisJI2Vsc2UKKwlyYyA9IERvc1NldEZpbGVQdHIoKEhGSUxFKWYtPmhhbmRsZSwgMCwgRklMRV9FTkQsICZmLT5maWxlc2l6ZSk7CisJI2VuZGlmCiAKLSAgICAgICAgaWYgKG1vZGVbMF0gPT0gJ2EnKQotICAgICAgICAgICAgZnNlZWsoZiwwLDIpOworCWlmIChtb2RlWzBdID09ICdhJykKKwkgICAgZnNlZWsoZiwwLDIpOwogICAgIH0KICAgICByZXR1cm4gZjsKIH0KQEAgLTEzMSwyMyArMTMxLDIzIEBACiAKICAgICAvKiBGaXJzdCBjb3B5IGFueSBkYXRhIGFscmVhZHkgcmVhZCBpbnRvIG91ciBidWZmZXIgKi8KICAgICBpZiAoKGJ5dGVzID0gKGYtPmN1cnAgLSBmLT5zdGFydHApKSA+IDApIHsKLSAgICAgICAgbWVtY3B5KGJ1ZixmLT5jdXJwLGJ5dGVzKTsKLSAgICAgICAgZi0+c3RhcnRwID0gZi0+Y3VycCA9IGYtPmJ1ZjsKLSAgICAgICAgYnVmICs9IGJ5dGVzOwotICAgICAgICB0b3RhbGJ5dGVzICs9IGJ5dGVzOwotICAgICAgICBieXRlcyA9IChzaXplICogbikgLSBieXRlczsKLSAgICAgICAgfQorCW1lbWNweShidWYsZi0+Y3VycCxieXRlcyk7CisJZi0+c3RhcnRwID0gZi0+Y3VycCA9IGYtPmJ1ZjsKKwlidWYgKz0gYnl0ZXM7CisJdG90YWxieXRlcyArPSBieXRlczsKKwlieXRlcyA9IChzaXplICogbikgLSBieXRlczsKKwl9CiAgICAgZWxzZQotICAgICAgICBieXRlcyA9IHNpemUgKiBuOworCWJ5dGVzID0gc2l6ZSAqIG47CiAgICAgaWYgKGJ5dGVzKSB7Ci0gICAgICAgICNpZmRlZiBfX09TMl9WRERfXwotICAgICAgICByZWFkYnl0ZXMgPSBWREhSZWFkKChIRklMRSlmLT5oYW5kbGUsIGJ1ZiwgYnl0ZXMpOwotICAgICAgICAjZWxzZQotICAgICAgICBEb3NSZWFkKChIRklMRSlmLT5oYW5kbGUsIGJ1ZiwgYnl0ZXMsICZyZWFkYnl0ZXMpOwotICAgICAgICAjZW5kaWYKLSAgICAgICAgdG90YWxieXRlcyArPSByZWFkYnl0ZXM7Ci0gICAgICAgIGYtPm9mZnNldCArPSByZWFkYnl0ZXM7Ci0gICAgICAgIH0KKwkjaWZkZWYgX19PUzJfVkREX18KKwlyZWFkYnl0ZXMgPSBWREhSZWFkKChIRklMRSlmLT5oYW5kbGUsIGJ1ZiwgYnl0ZXMpOworCSNlbHNlCisJRG9zUmVhZCgoSEZJTEUpZi0+aGFuZGxlLCBidWYsIGJ5dGVzLCAmcmVhZGJ5dGVzKTsKKwkjZW5kaWYKKwl0b3RhbGJ5dGVzICs9IHJlYWRieXRlczsKKwlmLT5vZmZzZXQgKz0gcmVhZGJ5dGVzOworCX0KICAgICByZXR1cm4gdG90YWxieXRlcyAvIHNpemU7CiB9CiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiAgICAgLyogRmx1c2ggYW55dGhpbmcgYWxyZWFkeSBpbiB0aGUgYnVmZmVyICovCiAgICAgaWYgKCFmLT53cml0ZW1vZGUpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIGZmbHVzaChmKTsKICAgICBieXRlcyA9IHNpemUgKiBuOwogICAgICNpZmRlZiBfX09TMl9WRERfXwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgdG90YWxieXRlcyArPSB3cml0dGVuYnl0ZXM7CiAgICAgZi0+b2Zmc2V0ICs9IHdyaXR0ZW5ieXRlczsKICAgICBpZiAoZi0+b2Zmc2V0ID4gZi0+ZmlsZXNpemUpCi0gICAgICAgIGYtPmZpbGVzaXplID0gZi0+b2Zmc2V0OworCWYtPmZpbGVzaXplID0gZi0+b2Zmc2V0OwogICAgIHJldHVybiB0b3RhbGJ5dGVzIC8gc2l6ZTsKIH0KIApAQCAtMTkyLDE2ICsxOTIsMTYgQEAKIAogICAgIC8qIEZpcnN0IGNvcHkgYW55IGRhdGEgYWxyZWFkeSB3cml0dGVuIGludG8gb3VyIGJ1ZmZlciAqLwogICAgIGlmIChmLT53cml0ZW1vZGUgJiYgKGJ5dGVzID0gKGYtPmN1cnAgLSBmLT5zdGFydHApKSA+IDApIHsKLSAgICAgICAgI2lmZGVmIF9fT1MyX1ZERF9fCi0gICAgICAgIGJ5dGVzID0gVkRIV3JpdGUoKEhGSUxFKWYtPmhhbmRsZSwgZi0+c3RhcnRwLCBieXRlcyk7Ci0gICAgICAgICNlbHNlCi0gICAgICAgIERvc1dyaXRlKChIRklMRSlmLT5oYW5kbGUsIGYtPnN0YXJ0cCwgYnl0ZXMsICZieXRlcyk7Ci0gICAgICAgICNlbmRpZgotICAgICAgICBmLT5vZmZzZXQgKz0gYnl0ZXM7Ci0gICAgICAgIGlmIChmLT5vZmZzZXQgPiBmLT5maWxlc2l6ZSkKLSAgICAgICAgICAgIGYtPmZpbGVzaXplID0gZi0+b2Zmc2V0OwotICAgICAgICBmLT5zdGFydHAgPSBmLT5jdXJwID0gZi0+YnVmOwotICAgICAgICB9CisJI2lmZGVmIF9fT1MyX1ZERF9fCisJYnl0ZXMgPSBWREhXcml0ZSgoSEZJTEUpZi0+aGFuZGxlLCBmLT5zdGFydHAsIGJ5dGVzKTsKKwkjZWxzZQorCURvc1dyaXRlKChIRklMRSlmLT5oYW5kbGUsIGYtPnN0YXJ0cCwgYnl0ZXMsICZieXRlcyk7CisJI2VuZGlmCisJZi0+b2Zmc2V0ICs9IGJ5dGVzOworCWlmIChmLT5vZmZzZXQgPiBmLT5maWxlc2l6ZSkKKwkgICAgZi0+ZmlsZXNpemUgPSBmLT5vZmZzZXQ7CisJZi0+c3RhcnRwID0gZi0+Y3VycCA9IGYtPmJ1ZjsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTIxNywxMSArMjE3LDExIEBACiAgICAgZmZsdXNoKGYpOwogCiAgICAgaWYgKHdoZW5jZSA9PSAwKQotICAgICAgICBmLT5vZmZzZXQgPSBvZmZzZXQ7CisJZi0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGVsc2UgaWYgKHdoZW5jZSA9PSAxKQotICAgICAgICBmLT5vZmZzZXQgKz0gb2Zmc2V0OworCWYtPm9mZnNldCArPSBvZmZzZXQ7CiAgICAgZWxzZSBpZiAod2hlbmNlID09IDIpCi0gICAgICAgIGYtPm9mZnNldCA9IGYtPmZpbGVzaXplICsgb2Zmc2V0OworCWYtPm9mZnNldCA9IGYtPmZpbGVzaXplICsgb2Zmc2V0OwogCiAgICAgI2lmZGVmIF9fT1MyX1ZERF9fCiAgICAgVkRIU2VlaygoSEZJTEUpZi0+aGFuZGxlLCBmLT5vZmZzZXQsIFZESFNLX0FCU09MVVRFKTsKQEAgLTI2NywyMyArMjY3LDIzIEBACiAgICAgaW50IGM7CiAKICAgICBpZiAoZi0+dW5wdXRjICE9IEVPRikgewotICAgICAgICBjID0gZi0+dW5wdXRjOwotICAgICAgICBmLT51bnB1dGMgPSBFT0Y7Ci0gICAgICAgIH0KKwljID0gZi0+dW5wdXRjOworCWYtPnVucHV0YyA9IEVPRjsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChmLT5zdGFydHAgPT0gZi0+Y3VycCkgewotICAgICAgICAgICAgaW50IGJ5dGVzID0gZnJlYWQoZi0+YnVmLDEsc2l6ZW9mKGYtPmJ1ZiksZik7Ci0gICAgICAgICAgICBpZiAoYnl0ZXMgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gRU9GOwotICAgICAgICAgICAgZi0+Y3VycCA9IGYtPnN0YXJ0cCArIGJ5dGVzOwotICAgICAgICAgICAgfQotICAgICAgICBjID0gKmYtPnN0YXJ0cCsrOwotICAgICAgICBpZiAoZi0+dGV4dCAmJiBjID09ICdccicpIHsKLSAgICAgICAgICAgIGludCBuYyA9IF9fZ2V0YyhmKTsKLSAgICAgICAgICAgIGlmIChuYyAhPSAnXG4nKQotICAgICAgICAgICAgICAgIGYtPnVucHV0YyA9IG5jOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKGYtPnN0YXJ0cCA9PSBmLT5jdXJwKSB7CisJICAgIGludCBieXRlcyA9IGZyZWFkKGYtPmJ1ZiwxLHNpemVvZihmLT5idWYpLGYpOworCSAgICBpZiAoYnl0ZXMgPT0gMCkKKwkJcmV0dXJuIEVPRjsKKwkgICAgZi0+Y3VycCA9IGYtPnN0YXJ0cCArIGJ5dGVzOworCSAgICB9CisJYyA9ICpmLT5zdGFydHArKzsKKwlpZiAoZi0+dGV4dCAmJiBjID09ICdccicpIHsKKwkgICAgaW50IG5jID0gX19nZXRjKGYpOworCSAgICBpZiAobmMgIT0gJ1xuJykKKwkJZi0+dW5wdXRjID0gbmM7CisJICAgIH0KKwl9CiAgICAgcmV0dXJuIGM7CiB9CiAKQEAgLTI5NiwxMSArMjk2LDExIEBACiB7CiAgICAgaW50IGNvdW50ID0gMTsKICAgICBpZiAoZi0+dGV4dCAmJiBjID09ICdcbicpIHsKLSAgICAgICAgX19wdXRjKCdccicsZik7Ci0gICAgICAgIGNvdW50ID0gMjsKLSAgICAgICAgfQorCV9fcHV0YygnXHInLGYpOworCWNvdW50ID0gMjsKKwl9CiAgICAgaWYgKGYtPmN1cnAgPT0gZi0+ZW5kcCkKLSAgICAgICAgZmZsdXNoKGYpOworCWZmbHVzaChmKTsKICAgICAqZi0+Y3VycCsrID0gYzsKICAgICByZXR1cm4gY291bnQ7CiB9CkBAIC0zMTksMTIgKzMxOSwxMiBAQAogCiAgICAgY3MgPSBzOwogICAgIHdoaWxlICgtLW4gPiAwICYmIChjID0gX19nZXRjKGYpKSAhPSBFT0YpIHsKLSAgICAgICAgKmNzKysgPSBjOwotICAgICAgICBpZiAoYyA9PSAnXG4nKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkqY3MrKyA9IGM7CisJaWYgKGMgPT0gJ1xuJykKKwkgICAgYnJlYWs7CisJfQogICAgIGlmIChjID09IEVPRiAmJiBjcyA9PSBzKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKICAgICAqY3MgPSAnXDAnOwogICAgIHJldHVybiBzOwogfQpAQCAtMzQxLDcgKzM0MSw3IEBACiAgICAgaW50IGM7CiAKICAgICB3aGlsZSAoKGMgPSAqcysrKSAhPSAwKQotICAgICAgICByID0gX19wdXRjKGMsIGYpOworCXIgPSBfX3B1dGMoYywgZik7CiAgICAgcmV0dXJuIHI7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3ZkZC9wbS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdmRkL3BtLmMKaW5kZXggMzIxNzdmOC4uNjY4OGJhYiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdmRkL3BtLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdmRkL3BtLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNkZWZpbmUgTUFYX01FTU9SWV9TSEFSRUQgICAgICAgICAgIDEwMAogI2RlZmluZSBNQVhfTUVNT1JZX01BUFBJTkdTICAgICAgICAgMTAwCiAKLS8vIFRPRE86IEkgdGhpbmsgdGhlIGdsb2JhbCBhbmQgbGluZWFyIG1lbWJlcnMgd2lsbCBiZSB0aGUgc2FtZSwgYnV0IG5vdCBzdXJlIHlldC4KKy8qIFRPRE86IEkgdGhpbmsgdGhlIGdsb2JhbCBhbmQgbGluZWFyIG1lbWJlcnMgd2lsbCBiZSB0aGUgc2FtZSwgYnV0IG5vdCBzdXJlIHlldC4gKi8KIHR5cGVkZWYgc3RydWN0IHsKICAgICB2b2lkICAgICpsaW5lYXI7CiAgICAgdWxvbmcgICBnbG9iYWw7CkBAIC05MCwxOCArOTAsMTggQEAKIHsKICAgICBNVFJSX2luaXQoKTsKIAotICAgIC8vIEluaXRpYWxpemUgVkRELXNwZWNpZmljIGRhdGEKLSAgICAvLyBOb3RlOiBQTV9pbml0IG11c3QgYmUgKG9idmlvdXNseSkgY2FsbGVkIGluIFZETSB0YXNrIGNvbnRleHQhCisgICAgLyogSW5pdGlhbGl6ZSBWREQtc3BlY2lmaWMgZGF0YSAqLworICAgIC8qIE5vdGU6IFBNX2luaXQgbXVzdCBiZSAob2J2aW91c2x5KSBjYWxsZWQgaW4gVkRNIHRhc2sgY29udGV4dCEgKi8KICAgICBWREhDcmVhdGVTZW0oJmhldkZhckNhbGxSZXQsIFZESF9FVkVOVFNFTSk7CiAgICAgVkRIQ3JlYXRlU2VtKCZoZXZJUmV0LCBWREhfRVZFTlRTRU0pOwogICAgIGhob29rVXNlclJldHVybkhvb2sgPSBWREhBbGxvY0hvb2soVkRIX1JFVFVSTl9IT09LLCAoUEZOQVJNKVVzZXJSZXR1cm5Ib29rLCAwKTsKICAgICBoaG9va1VzZXJJUmV0SG9vayAgID0gVkRIQWxsb2NIb29rKFZESF9SRVRVUk5fSE9PSywgKFBGTkFSTSlVc2VySVJldEhvb2ssIDApOwogCiAgICAgaWYgKChoZXZJUmV0ID09IE5VTEwpIHx8IChoZXZGYXJDYWxsUmV0ID09IE5VTEwpIHx8Ci0gICAgICAgIChoaG9va1VzZXJSZXR1cm5Ib29rID09IE5VTEwpIHx8IChoaG9va1VzZXJJUmV0SG9vayA9PSBOVUxMKSkgewotICAgICAgICAvLyBzb21ldGhpbmcgZmFpbGVkLCB3ZSBjYW4ndCBnbyBvbgotICAgICAgICAvLyBUT0RPOiB0YWtlIHNvbWUgYWN0aW9uIGhlcmUhCi0gICAgICAgIH0KKwkoaGhvb2tVc2VyUmV0dXJuSG9vayA9PSBOVUxMKSB8fCAoaGhvb2tVc2VySVJldEhvb2sgPT0gTlVMTCkpIHsKKwkvKiBzb21ldGhpbmcgZmFpbGVkLCB3ZSBjYW4ndCBnbyBvbiAqLworCS8qIFRPRE86IHRha2Ugc29tZSBhY3Rpb24gaGVyZSEgKi8KKwl9CiB9CiAKIC8qIERvIHNvbWUgY2xlYW5pbmcgdXAgKi8KQEAgLTEwOSwxNyArMTA5LDE3IEBACiB7CiAgICAgLyogTm90ZTogSG9va3MgYWxsb2NhdGVkIGR1cmluZyBvciBhZnRlciBWRE0gY3JlYXRpb24gYXJlIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgKi8KICAgICBpZiAoaGV2SVJldCAhPSBOVUxMKQotICAgICAgICBWREhEZXN0cm95U2VtKGhldklSZXQpOworCVZESERlc3Ryb3lTZW0oaGV2SVJldCk7CiAKICAgICBpZiAoaGV2RmFyQ2FsbFJldCAhPSBOVUxMKQotICAgICAgICBWREhEZXN0cm95U2VtKGhldkZhckNhbGxSZXQpOworCVZESERlc3Ryb3lTZW0oaGV2RmFyQ2FsbFJldCk7CiB9CiAKIGlib29sIFBNQVBJIFBNX2hhdmVCSU9TQWNjZXNzKHZvaWQpCiB7IHJldHVybiBfUE1faGF2ZUJJT1M7IH0KIAogbG9uZyBQTUFQSSBQTV9nZXRPU1R5cGUodm9pZCkKLXsgcmV0dXJuIC8qX09TX09TMlZERCovIF9PU19PUzI7IH0gIC8vRklYISEKK3sgcmV0dXJuIC8qX09TX09TMlZERCovIF9PU19PUzI7IH0gIC8qRklYISEgKi8KIAogaW50IFBNQVBJIFBNX2dldE1vZGVUeXBlKHZvaWQpCiB7IHJldHVybiBQTV8zODY7IH0KQEAgLTEyOCw5ICsxMjgsOSBAQAogewogICAgIHVpbnQgcG9zID0gc3RybGVuKHMpOwogICAgIGlmIChzW3Bvcy0xXSAhPSAnXFwnKSB7Ci0gICAgICAgIHNbcG9zXSA9ICdcXCc7Ci0gICAgICAgIHNbcG9zKzFdID0gJ1wwJzsKLSAgICAgICAgfQorCXNbcG9zXSA9ICdcXCc7CisJc1twb3MrMV0gPSAnXDAnOworCX0KIH0KIAogdm9pZCBQTUFQSSBQTV9zZXRGYXRhbEVycm9yQ2xlYW51cCgKQEAgLTE0Miw4ICsxNDIsOCBAQAogdm9pZCBQTUFQSSBQTV9mYXRhbEVycm9yKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBpZiAoZmF0YWxFcnJvckNsZWFudXApCi0gICAgICAgIGZhdGFsRXJyb3JDbGVhbnVwKCk7Ci0vLyAgICBGYXRhbF9FcnJvcl9IYW5kbGVyKG1zZywwKTsgIFRPRE86IGltcGxlbWVudCBzb21laG93IQorCWZhdGFsRXJyb3JDbGVhbnVwKCk7CisvKiAgICBGYXRhbF9FcnJvcl9IYW5kbGVyKG1zZywwKTsgIFRPRE86IGltcGxlbWVudCBzb21laG93ISAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTYyLDExICsxNjIsMTEgQEAKICAgICB1aW50ICpyb2ZmKQogewogICAgIGlmIChfUE1fcm1CdWZBZGRyKSB7Ci0gICAgICAgICpsZW4gPSAwOyAvL1ZFU0FfQlVGX1NJWkU7Ci0gICAgICAgICpyc2VnID0gKHVsb25nKShfUE1fcm1CdWZBZGRyKSA+PiA0OwotICAgICAgICAqcm9mZiA9ICh1bG9uZykoX1BNX3JtQnVmQWRkcikgJiAweEY7Ci0gICAgICAgIHJldHVybiBfUE1fcm1CdWZBZGRyOwotICAgICAgICB9CisJKmxlbiA9IDA7IC8qVkVTQV9CVUZfU0laRTsgKi8KKwkqcnNlZyA9ICh1bG9uZykoX1BNX3JtQnVmQWRkcikgPj4gNDsKKwkqcm9mZiA9ICh1bG9uZykoX1BNX3JtQnVmQWRkcikgJiAweEY7CisJcmV0dXJuIF9QTV9ybUJ1ZkFkZHI7CisJfQogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yMDAsMTIgKzIwMCwxMiBAQAogCiBjb25zdCBjaGFyICogUE1BUEkgUE1fZ2V0TnVjbGV1c1BhdGgodm9pZCkKIHsKLSAgICAgICAgc3RhdGljIGNoYXIgcGF0aFtDQ0hNQVhQQVRIXTsKLSAgICAgICAgc3RyY3B5KHBhdGgsIng6XFxvczJcXGRyaXZlcnMiKTsKLSAgICAgICAgcGF0aFswXSA9IFBNX2dldEJvb3REcml2ZSgpOwotICAgICAgICBQTV9iYWNrc2xhc2gocGF0aCk7Ci0gICAgICAgIHN0cmNhdChwYXRoLCJudWNsZXVzIik7Ci0gICAgICAgIHJldHVybiBwYXRoOworCXN0YXRpYyBjaGFyIHBhdGhbQ0NITUFYUEFUSF07CisJc3RyY3B5KHBhdGgsIng6XFxvczJcXGRyaXZlcnMiKTsKKwlwYXRoWzBdID0gUE1fZ2V0Qm9vdERyaXZlKCk7CisJUE1fYmFja3NsYXNoKHBhdGgpOworCXN0cmNhdChwYXRoLCJudWNsZXVzIik7CisJcmV0dXJuIHBhdGg7CiB9CiAKIGNvbnN0IGNoYXIgKiBQTUFQSSBQTV9nZXROdWNsZXVzQ29uZmlnUGF0aCh2b2lkKQpAQCAtMjkyLDE1ICsyOTIsMTUgQEAKIAogICAgIC8qIEZpcnN0IGZpbmQgYSBmcmVlIHNsb3QgaW4gb3VyIHNoYXJlZCBtZW1vcnkgdGFibGUgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX01FTU9SWV9TSEFSRUQ7IGkrKykgewotICAgICAgICBpZiAoc2hhcmVkW2ldLmxpbmVhciA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlpZiAoc2hhcmVkW2ldLmxpbmVhciA9PSAwKQorCSAgICBicmVhazsKKwl9CiAgICAgaWYgKGkgPCBNQVhfTUVNT1JZX1NIQVJFRCkgewotICAgICAgICBzaGFyZWRbaV0ubGluZWFyID0gVkRIQWxsb2NQYWdlcyhOVUxMLCBuUGFnZXMsIFZESEFQX1NZU1RFTSB8IFZESEFQX0ZJWEVEKTsKLSAgICAgICAgc2hhcmVkW2ldLm5wYWdlcyA9IG5QYWdlczsKLSAgICAgICAgc2hhcmVkW2ldLmdsb2JhbCA9IChVTE9ORylzaGFyZWRbaV0ubGluZWFyOwotICAgICAgICByZXR1cm4gKHZvaWQqKXNoYXJlZFtpXS5nbG9iYWw7Ci0gICAgICAgIH0KKwlzaGFyZWRbaV0ubGluZWFyID0gVkRIQWxsb2NQYWdlcyhOVUxMLCBuUGFnZXMsIFZESEFQX1NZU1RFTSB8IFZESEFQX0ZJWEVEKTsKKwlzaGFyZWRbaV0ubnBhZ2VzID0gblBhZ2VzOworCXNoYXJlZFtpXS5nbG9iYWwgPSAoVUxPTkcpc2hhcmVkW2ldLmxpbmVhcjsKKwlyZXR1cm4gKHZvaWQqKXNoYXJlZFtpXS5nbG9iYWw7CisJfQogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0zMTQsMTIgKzMxNCwxMiBAQAogCiAgICAgLyogRmluZCBhIHNoYXJlZCBtZW1vcnkgYmxvY2sgaW4gb3VyIHRhYmxlIGFuZCBmcmVlIGl0ICovCiAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9NRU1PUllfU0hBUkVEOyBpKyspIHsKLSAgICAgICAgaWYgKHNoYXJlZFtpXS5nbG9iYWwgPT0gKHVsb25nKXApIHsKLSAgICAgICAgICAgIFZESEZyZWVQYWdlcyhzaGFyZWRbaV0ubGluZWFyKTsKLSAgICAgICAgICAgIHNoYXJlZFtpXS5saW5lYXIgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoc2hhcmVkW2ldLmdsb2JhbCA9PSAodWxvbmcpcCkgeworCSAgICBWREhGcmVlUGFnZXMoc2hhcmVkW2ldLmxpbmVhcik7CisJICAgIHNoYXJlZFtpXS5saW5lYXIgPSAwOworCSAgICBicmVhazsKKwkgICAgfQorCX0KIH0KIAogdm9pZCAqIFBNQVBJIFBNX21hcFRvUHJvY2Vzcyh2b2lkICpiYXNlLHVsb25nIGxpbWl0KQpAQCAtMzMxLDcgKzMzMSw3IEBACiAgICAgdm9pZCAqbWFwcGVkQklPUywKICAgICB1bG9uZyBCSU9TTGVuKQogewotICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaXMKKyAgICAvKiBUT0RPOiBGaWd1cmUgb3V0IGhvdyB0byBkbyB0aGlzICovCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0zNjQsMTggKzM2NCwxOCBAQAogICAgICpucGFnZXMgPSAobGVuZ3RoICsgKGJhc2UgJiAweEZGRikgKyA0MDk1KSA+PiAxMjsKICAgICBmbGFncyA9IFBSX0ZJWEVEIHwgUFJfU1RBVElDOwogICAgIGlmIChiYXNlID09IDB4QTAwMDApIHsKLSAgICAgICAgLyogV2UgcmVxdWlyZSB0aGUgbGluZWFyIGFkZHJlc3MgdG8gYmUgYWxpZ25lZCB0byBhIDY0S2IgYm91bmRhcnkKLSAgICAgICAgICogZm9yIG1hcHBpbmcgdGhlIGJhbmtlZCBmcmFtZWJ1ZmZlciAoc28gd2UgY2FuIGRvIGVmZmljaWVudAotICAgICAgICAgKiBjYXJyeSBjaGVja2luZyBmb3IgYmFuayBjaGFuZ2VzIGluIHRoZSBhc3NlbWJsZXIgY29kZSkuIFRoZSBvbmx5Ci0gICAgICAgICAqIHdheSB0byBlbnN1cmUgdGhpcyBpcyB0byBmb3JjZSB0aGUgbGluZWFyIGFkZHJlc3MgdG8gYmUgYWxpZ25lZAotICAgICAgICAgKiB0byBhIDRNYiBib3VuZGFyeS4KLSAgICAgICAgICovCi0gICAgICAgIGZsYWdzIHw9IFBSXzRNRUc7Ci0gICAgICAgIH0KKwkvKiBXZSByZXF1aXJlIHRoZSBsaW5lYXIgYWRkcmVzcyB0byBiZSBhbGlnbmVkIHRvIGEgNjRLYiBib3VuZGFyeQorCSAqIGZvciBtYXBwaW5nIHRoZSBiYW5rZWQgZnJhbWVidWZmZXIgKHNvIHdlIGNhbiBkbyBlZmZpY2llbnQKKwkgKiBjYXJyeSBjaGVja2luZyBmb3IgYmFuayBjaGFuZ2VzIGluIHRoZSBhc3NlbWJsZXIgY29kZSkuIFRoZSBvbmx5CisJICogd2F5IHRvIGVuc3VyZSB0aGlzIGlzIHRvIGZvcmNlIHRoZSBsaW5lYXIgYWRkcmVzcyB0byBiZSBhbGlnbmVkCisJICogdG8gYSA0TWIgYm91bmRhcnkuCisJICovCisJZmxhZ3MgfD0gUFJfNE1FRzsKKwl9CiAgICAgaWYgKChsaW5lYXIgPSAodWxvbmcpUGFnZVJlc2VydmUoUFJfU1lTVEVNLCpucGFnZXMsZmxhZ3MpKSA9PSAodWxvbmcpLTEpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIGlmICghUGFnZUNvbW1pdFBoeXMobGluZWFyID4+IDEyLCpucGFnZXMscHBhZ2UsUENfSU5DUiB8IFBDX1VTRVIgfCBQQ19XUklURUFCTEUpKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICNlbmRpZgogICAgIHJldHVybiBsaW5lYXIgKyAoYmFzZSAmIDB4RkZGKTsKIH0KQEAgLTM5Nyw5ICszOTcsOSBAQAogc3RpY2t5IHBhd3MuCiAKIE5PVEU6ICAgSWYgdGhlIG1lbW9yeSBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgY2FjaGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwKLSAgICAgICAgZGlyZWN0bHkgcmUtcHJvZ3JhbSB0aGUgUENEIChQYWdlIENhY2hlIERpc2FibGUpIGJpdCBpbiB0aGUKLSAgICAgICAgcGFnZSB0YWJsZXMuIFRoZXJlIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIG1lY2hhbmlzbSBpbiB0aGUgVk1NCi0gICAgICAgIHRvIGNvbnRyb2wgdGhpcyBiaXQgdmlhIHRoZSByZWd1bGFyIGludGVyZmFjZS4KKwlkaXJlY3RseSByZS1wcm9ncmFtIHRoZSBQQ0QgKFBhZ2UgQ2FjaGUgRGlzYWJsZSkgYml0IGluIHRoZQorCXBhZ2UgdGFibGVzLiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBtZWNoYW5pc20gaW4gdGhlIFZNTQorCXRvIGNvbnRyb2wgdGhpcyBiaXQgdmlhIHRoZSByZWd1bGFyIGludGVyZmFjZS4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkICogUE1BUEkgUE1fbWFwUGh5c2ljYWxBZGRyKAogICAgIHVsb25nIGJhc2UsCkBAIC00MTQsMTEgKzQxNCwxMSBAQAogICAgICAqIGEgcmVnaW9uIG9mIG1lbW9yeSB0aGF0IHdpbGwgc2VydmUgdGhpcyBwdXJwb3NlLgogICAgICAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1NYXBwaW5nczsgaSsrKSB7Ci0gICAgICAgIGlmIChtYXBzW2ldLnBoeXNpY2FsID09IGJhc2UgJiYgbWFwc1tpXS5sZW5ndGggPT0gbGVuZ3RoICYmIG1hcHNbaV0uaXNDYWNoZWQgPT0gaXNDYWNoZWQpCi0gICAgICAgICAgICByZXR1cm4gKHZvaWQqKW1hcHNbaV0ubGluZWFyOwotICAgICAgICB9CisJaWYgKG1hcHNbaV0ucGh5c2ljYWwgPT0gYmFzZSAmJiBtYXBzW2ldLmxlbmd0aCA9PSBsZW5ndGggJiYgbWFwc1tpXS5pc0NhY2hlZCA9PSBpc0NhY2hlZCkKKwkgICAgcmV0dXJuICh2b2lkKiltYXBzW2ldLmxpbmVhcjsKKwl9CiAgICAgaWYgKG51bU1hcHBpbmdzID09IE1BWF9NRU1PUllfTUFQUElOR1MpCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogCiAgICAgLyogV2UgZGlkIG5vdCBmaW5kIGFueSBwcmV2aW91c2x5IG1hcHBlZCBtZW1vcnkgcmVnaW9uLCBzbyBtYXAgaXQgaW4uCiAgICAgICogTm90ZSB0aGF0IHdlIGRvIG5vdCB1c2UgTWFwUGh5c1RvTGluZWFyLCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGVhcnMKQEAgLTQyNiw3ICs0MjYsNyBAQAogICAgICAqIEhlbmNlIHdlIHVzZSBQYWdlUmVzZXJ2ZSBhbmQgUGFnZUNvbW1pdFBoeXMuCiAgICAgICovCiAgICAgaWYgKChsaW5lYXIgPSBNYXBQaHlzaWNhbFRvTGluZWFyKGJhc2UsbGltaXQsJm5wYWdlcykpID09IDApCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogICAgIG1hcHNbbnVtTWFwcGluZ3NdLnBoeXNpY2FsID0gYmFzZTsKICAgICBtYXBzW251bU1hcHBpbmdzXS5sZW5ndGggPSBsZW5ndGg7CiAgICAgbWFwc1tudW1NYXBwaW5nc10ubGluZWFyID0gbGluZWFyOwpAQCAtNDM3LDMzICs0MzcsMzMgQEAKICNpZiAwCiAgICAgLyogRmluYWxseSBkaXNhYmxlIGNhY2hpbmcgd2hlcmUgbmVjZXNzYXJ5ICovCiAgICAgaWYgKCFpc0NhY2hlZCAmJiAoUERCID0gX1BNX2dldFBEQigpKSAhPSAwKSB7Ci0gICAgICAgIGludCAgICAgc3RhcnRQREIsZW5kUERCLGlQREIsc3RhcnRQYWdlLGVuZFBhZ2Usc3RhcnQsZW5kLGlQYWdlOwotICAgICAgICB1bG9uZyAgIHBhZ2VUYWJsZSwqcFBhZ2VUYWJsZTsKKwlpbnQgICAgIHN0YXJ0UERCLGVuZFBEQixpUERCLHN0YXJ0UGFnZSxlbmRQYWdlLHN0YXJ0LGVuZCxpUGFnZTsKKwl1bG9uZyAgIHBhZ2VUYWJsZSwqcFBhZ2VUYWJsZTsKIAotICAgICAgICBpZiAoUERCID49IDB4MTAwMDAwKQotICAgICAgICAgICAgcFBEQiA9ICh1bG9uZyopTWFwUGh5c2ljYWxUb0xpbmVhcihQREIsMHhGRkYsJm5wYWdlcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBQREIgPSAodWxvbmcqKVBEQjsKLSAgICAgICAgaWYgKHBQREIpIHsKLSAgICAgICAgICAgIHN0YXJ0UERCID0gKGxpbmVhciA+PiAyMikgJiAweDNGRjsKLSAgICAgICAgICAgIHN0YXJ0UGFnZSA9IChsaW5lYXIgPj4gMTIpICYgMHgzRkY7Ci0gICAgICAgICAgICBlbmRQREIgPSAoKGxpbmVhcitsaW1pdCkgPj4gMjIpICYgMHgzRkY7Ci0gICAgICAgICAgICBlbmRQYWdlID0gKChsaW5lYXIrbGltaXQpID4+IDEyKSAmIDB4M0ZGOwotICAgICAgICAgICAgZm9yIChpUERCID0gc3RhcnRQREI7IGlQREIgPD0gZW5kUERCOyBpUERCKyspIHsKLSAgICAgICAgICAgICAgICBwYWdlVGFibGUgPSBwUERCW2lQREJdICYgfjB4RkZGOwotICAgICAgICAgICAgICAgIGlmIChwYWdlVGFibGUgPj0gMHgxMDAwMDApCi0gICAgICAgICAgICAgICAgICAgIHBQYWdlVGFibGUgPSAodWxvbmcqKU1hcFBoeXNpY2FsVG9MaW5lYXIocGFnZVRhYmxlLDB4RkZGLCZucGFnZXMpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcFBhZ2VUYWJsZSA9ICh1bG9uZyopcGFnZVRhYmxlOwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gKGlQREIgPT0gc3RhcnRQREIpID8gc3RhcnRQYWdlIDogMDsKLSAgICAgICAgICAgICAgICBlbmQgPSAoaVBEQiA9PSBlbmRQREIpID8gZW5kUGFnZSA6IDB4M0ZGOwotICAgICAgICAgICAgICAgIGZvciAoaVBhZ2UgPSBzdGFydDsgaVBhZ2UgPD0gZW5kOyBpUGFnZSsrKQotICAgICAgICAgICAgICAgICAgICBwUGFnZVRhYmxlW2lQYWdlXSB8PSAweDEwOwotICAgICAgICAgICAgICAgIFBhZ2VGcmVlKCh1bG9uZylwUGFnZVRhYmxlLFBSX1NUQVRJQyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgUGFnZUZyZWUoKHVsb25nKXBQREIsUFJfU1RBVElDKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmIChQREIgPj0gMHgxMDAwMDApCisJICAgIHBQREIgPSAodWxvbmcqKU1hcFBoeXNpY2FsVG9MaW5lYXIoUERCLDB4RkZGLCZucGFnZXMpOworCWVsc2UKKwkgICAgcFBEQiA9ICh1bG9uZyopUERCOworCWlmIChwUERCKSB7CisJICAgIHN0YXJ0UERCID0gKGxpbmVhciA+PiAyMikgJiAweDNGRjsKKwkgICAgc3RhcnRQYWdlID0gKGxpbmVhciA+PiAxMikgJiAweDNGRjsKKwkgICAgZW5kUERCID0gKChsaW5lYXIrbGltaXQpID4+IDIyKSAmIDB4M0ZGOworCSAgICBlbmRQYWdlID0gKChsaW5lYXIrbGltaXQpID4+IDEyKSAmIDB4M0ZGOworCSAgICBmb3IgKGlQREIgPSBzdGFydFBEQjsgaVBEQiA8PSBlbmRQREI7IGlQREIrKykgeworCQlwYWdlVGFibGUgPSBwUERCW2lQREJdICYgfjB4RkZGOworCQlpZiAocGFnZVRhYmxlID49IDB4MTAwMDAwKQorCQkgICAgcFBhZ2VUYWJsZSA9ICh1bG9uZyopTWFwUGh5c2ljYWxUb0xpbmVhcihwYWdlVGFibGUsMHhGRkYsJm5wYWdlcyk7CisJCWVsc2UKKwkJICAgIHBQYWdlVGFibGUgPSAodWxvbmcqKXBhZ2VUYWJsZTsKKwkJc3RhcnQgPSAoaVBEQiA9PSBzdGFydFBEQikgPyBzdGFydFBhZ2UgOiAwOworCQllbmQgPSAoaVBEQiA9PSBlbmRQREIpID8gZW5kUGFnZSA6IDB4M0ZGOworCQlmb3IgKGlQYWdlID0gc3RhcnQ7IGlQYWdlIDw9IGVuZDsgaVBhZ2UrKykKKwkJICAgIHBQYWdlVGFibGVbaVBhZ2VdIHw9IDB4MTA7CisJCVBhZ2VGcmVlKCh1bG9uZylwUGFnZVRhYmxlLFBSX1NUQVRJQyk7CisJCX0KKwkgICAgUGFnZUZyZWUoKHVsb25nKXBQREIsUFJfU1RBVElDKTsKKwkgICAgfQorCX0KICNlbmRpZgogICAgIHJldHVybiAodm9pZCopbGluZWFyOwogfQpAQCAtNDgwLDM5ICs0ODAsMzkgQEAKIAogaW50IFBNQVBJIFBNX2dldENPTVBvcnQoaW50IHBvcnQpCiB7Ci0gICAgLy8gVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheQotICAgIC8vICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4KKyAgICAvKiBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5ICovCisgICAgLyogICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLiAqLwogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNGODsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgyRjg7Ci0gICAgICAgIH0KKwljYXNlIDA6IHJldHVybiAweDNGODsKKwljYXNlIDE6IHJldHVybiAweDJGODsKKwl9CiAgICAgcmV0dXJuIDA7CiB9CiAKIGludCBQTUFQSSBQTV9nZXRMUFRQb3J0KGludCBwb3J0KQogewotICAgIC8vIFRPRE86IFJlLWNvZGUgdGhpcyB0byBkZXRlcm1pbmUgcmVhbCB2YWx1ZXMgdXNpbmcgdGhlIFBsdWcgYW5kIFBsYXkKLSAgICAvLyAgICAgICBtYW5hZ2VyIGZvciB0aGUgT1MuCisgICAgLyogVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheSAqLworICAgIC8qICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4gKi8KICAgICBzd2l0Y2ggKHBvcnQpIHsKLSAgICAgICAgY2FzZSAwOiByZXR1cm4gMHgzQkM7Ci0gICAgICAgIGNhc2UgMTogcmV0dXJuIDB4Mzc4OwotICAgICAgICBjYXNlIDI6IHJldHVybiAweDI3ODsKLSAgICAgICAgfQorCWNhc2UgMDogcmV0dXJuIDB4M0JDOworCWNhc2UgMTogcmV0dXJuIDB4Mzc4OworCWNhc2UgMjogcmV0dXJuIDB4Mjc4OworCX0KICAgICByZXR1cm4gMDsKIH0KIAogdWxvbmcgUE1BUEkgUE1fZ2V0UGh5c2ljYWxBZGRyKHZvaWQgKnApCiB7Ci0gICAgICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBsaW5lYXIKLSAgICAgICAgLy8gICAgICAgICAgICAgICBhZGRyZXNzLgotICAgICAgICByZXR1cm4gMHhGRkZGRkZGRlVMOworCS8qIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpbmQgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBsaW5lYXIgKi8KKwkvKiAgICAgICAgICAgICAgIGFkZHJlc3MuICovCisJcmV0dXJuIDB4RkZGRkZGRkZVTDsKIH0KIAogdm9pZCBQTUFQSSBfUE1fZnJlZU1lbW9yeU1hcHBpbmdzKHZvaWQpCiB7CiAgICAgaW50IGk7Ci0vLyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtTWFwcGluZ3M7IGkrKykKLS8vICAgICAgICBQYWdlRnJlZShtYXBzW2ldLmxpbmVhcixQUl9TVEFUSUMpOworLyogICAgZm9yIChpID0gMDsgaSA8IG51bU1hcHBpbmdzOyBpKyspICovCisvKiAgICAgICAgUGFnZUZyZWUobWFwc1tpXS5saW5lYXIsUFJfU1RBVElDKTsgKi8KIH0KIAogdm9pZCAqIFBNQVBJIFBNX21hcFJlYWxQb2ludGVyKHVpbnQgcl9zZWcsdWludCByX29mZikKQEAgLTUzOSwxNiArNTM5LDE2IEBACiAgICAgUk1SRUdTICppbiwKICAgICBSTVNSRUdTICpzcmVncykKIHsKLSAgICBQQ1JGICAgICAgICAgICAgcGNyZjsgICAgIC8vIGN1cnJlbnQgY2xpZW50IHJlZ2lzdGVyIGZyYW1lCisgICAgUENSRiAgICAgICAgICAgIHBjcmY7ICAgICAvKiBjdXJyZW50IGNsaWVudCByZWdpc3RlciBmcmFtZSAqLwogCi0gICAgLy8gZ2V0IHBvaW50ZXIgdG8gcmVnaXN0ZXJzCisgICAgLyogZ2V0IHBvaW50ZXIgdG8gcmVnaXN0ZXJzICovCiAgICAgcGNyZiA9IChQQ1JGKVZESFF1ZXJ5U3lzVmFsdWUoQ1VSUkVOVF9WRE0sIFZESExTVl9QQ1JGKTsKIAotICAgIC8vIE5vdGU6IFdlIGNvdWxkIGRvIFZESFB1c2hSZWdzIGluc3RlYWQgYnV0IHRoaXMgc2hvdWxkIGJlIHNhZmVyIGFzIGl0Ci0gICAgLy8gZG9lc24ndCByZWx5IG9uIHRoZSBWRE0gc2Vzc2lvbiBoYXZpbmcgZW5vdWdoIGZyZWUgc3RhY2sgc3BhY2UuCi0gICAgKnNhdmVSZWdzID0gKnBjcmY7ICAgICAgICAvLyBzYXZlIGFsbCByZWdpc3RlcnMKKyAgICAvKiBOb3RlOiBXZSBjb3VsZCBkbyBWREhQdXNoUmVncyBpbnN0ZWFkIGJ1dCB0aGlzIHNob3VsZCBiZSBzYWZlciBhcyBpdCAqLworICAgIC8qIGRvZXNuJ3QgcmVseSBvbiB0aGUgVkRNIHNlc3Npb24gaGF2aW5nIGVub3VnaCBmcmVlIHN0YWNrIHNwYWNlLiAqLworICAgICpzYXZlUmVncyA9ICpwY3JmOyAgICAgICAgLyogc2F2ZSBhbGwgcmVnaXN0ZXJzICovCiAKLSAgICBwY3JmLT5jcmZfZWF4ID0gaW4tPmUuZWF4OyAgICAvLyBsb2FkIG5ldyB2YWx1ZXMKKyAgICBwY3JmLT5jcmZfZWF4ID0gaW4tPmUuZWF4OyAgICAvKiBsb2FkIG5ldyB2YWx1ZXMgKi8KICAgICBwY3JmLT5jcmZfZWJ4ID0gaW4tPmUuZWJ4OwogICAgIHBjcmYtPmNyZl9lY3ggPSBpbi0+ZS5lY3g7CiAgICAgcGNyZi0+Y3JmX2VkeCA9IGluLT5lLmVkeDsKQEAgLTU2OCwxMiArNTY4LDEyIEBACiAgICAgUk1SRUdTICpvdXQsCiAgICAgUk1TUkVHUyAqc3JlZ3MpCiB7Ci0gICAgUENSRiAgICAgICAgICAgIHBjcmY7ICAgICAvLyBjdXJyZW50IGNsaWVudCByZWdpc3RlciBmcmFtZQorICAgIFBDUkYgICAgICAgICAgICBwY3JmOyAgICAgLyogY3VycmVudCBjbGllbnQgcmVnaXN0ZXIgZnJhbWUgKi8KIAotICAgIC8vIGdldCBwb2ludGVyIHRvIHJlZ2lzdGVycworICAgIC8qIGdldCBwb2ludGVyIHRvIHJlZ2lzdGVycyAqLwogICAgIHBjcmYgPSAoUENSRilWREhRdWVyeVN5c1ZhbHVlKENVUlJFTlRfVkRNLCBWREhMU1ZfUENSRik7CiAKLSAgICAvLyByZWFkIG5ldyByZWdpc3RlciB2YWx1ZXMKKyAgICAvKiByZWFkIG5ldyByZWdpc3RlciB2YWx1ZXMgKi8KICAgICBvdXQtPmUuZWF4ID0gcGNyZi0+Y3JmX2VheDsKICAgICBvdXQtPmUuZWJ4ID0gcGNyZi0+Y3JmX2VieDsKICAgICBvdXQtPmUuZWN4ID0gcGNyZi0+Y3JmX2VjeDsKQEAgLTU4Myw3ICs1ODMsNyBAQAogICAgIHNyZWdzLT5lcyAgPSBwY3JmLT5jcmZfZXM7CiAgICAgc3JlZ3MtPmRzICA9IHBjcmYtPmNyZl9kczsKIAotICAgIC8vIHJlc3RvcmUgb3JpZ2luYWwgY2xpZW50IHJlZ2lzdGVycworICAgIC8qIHJlc3RvcmUgb3JpZ2luYWwgY2xpZW50IHJlZ2lzdGVycyAqLwogICAgICpwY3JmID0gKnNhdmVSZWdzOwogfQogCkBAIC02MjYsMTggKzYyNiwxOCBAQAogICAgIFRSQUNFKCJTRERIRUxQOiBFbnRlcmluZyBQTV9jYWxsUmVhbE1vZGUoKVxuIik7CiAgICAgTG9hZFY4NlJlZ2lzdGVycyhTU1RvRFMoJnNhdmVSZWdzKSxyZWdzLHNyZWdzKTsKIAotICAgIC8vIHNldCB1cCByZXR1cm4gaG9vayBmb3IgY2FsbAorICAgIC8qIHNldCB1cCByZXR1cm4gaG9vayBmb3IgY2FsbCAqLwogICAgIHJjID0gVkRIQXJtUmV0dXJuSG9vayhoaG9va1VzZXJSZXR1cm5Ib29rLCBWREhBUkhfQ1NFSVBfSE9PSyk7CiAKICAgICBWREhSZXNldEV2ZW50U2VtKGhldkZhckNhbGxSZXQpOwogCi0gICAgLy8gdGhlIGFkZHJlc3MgaXMgYSAxNjozMiBwb2ludGVyCisgICAgLyogdGhlIGFkZHJlc3MgaXMgYSAxNjozMiBwb2ludGVyICovCiAgICAgT0ZGU0VUT0YzMihmbkFkZHJlc3MpICA9IG9mZjsKICAgICBTRUdNRU5UT0YzMihmbkFkZHJlc3MpID0gc2VnOwogICAgIHJjID0gVkRIUHVzaEZhckNhbGwoZm5BZGRyZXNzKTsKICAgICBWREhZaWVsZCgwKTsKIAotICAgIC8vIHdhaXQgdW50aWwgdGhlIFY4NiBjYWxsIHJldHVybnMgLSBvdXIgcmV0dXJuIGhvb2sgcG9zdHMgdGhlIHNlbWFwaG9yZQorICAgIC8qIHdhaXQgdW50aWwgdGhlIFY4NiBjYWxsIHJldHVybnMgLSBvdXIgcmV0dXJuIGhvb2sgcG9zdHMgdGhlIHNlbWFwaG9yZSAqLwogICAgIHJjID0gVkRIV2FpdEV2ZW50U2VtKGhldkZhckNhbGxSZXQsIFNFTV9JTkRFRklOSVRFX1dBSVQpOwogCiAgICAgUmVhZFY4NlJlZ2lzdGVycyhTU1RvRFMoJnNhdmVSZWdzKSxyZWdzLHNyZWdzKTsKQEAgLTY2MiwxMyArNjYyLDEzIEBACiAKICAgICBtZW1zZXQoU1NUb0RTKCZzcmVncyksIDAsIHNpemVvZihzcmVncykpOwogCi0jaWYgMCAgIC8vIGRvIHdlIG5lZWQgdGhpcz8/CisjaWYgMCAgIC8qIGRvIHdlIG5lZWQgdGhpcz8/ICovCiAgICAgLyogRGlzYWJsZSBwYXNzLXVwIHRvIG91ciBWREQgaGFuZGxlciBzbyB3ZSBkaXJlY3RseSBjYWxsIEJJT1MgKi8KICAgICBUUkFDRSgiU0RESEVMUDogRW50ZXJpbmcgUE1faW50ODYoKVxuIik7CiAgICAgaWYgKGRpc2FibGVUU1JGbGFnKSB7Ci0gICAgICAgIG9sZERpc2FibGUgPSAqZGlzYWJsZVRTUkZsYWc7Ci0gICAgICAgICpkaXNhYmxlVFNSRmxhZyA9IDA7Ci0gICAgICAgIH0KKwlvbGREaXNhYmxlID0gKmRpc2FibGVUU1JGbGFnOworCSpkaXNhYmxlVFNSRmxhZyA9IDA7CisJfQogI2VuZGlmCiAKICAgICBMb2FkVjg2UmVnaXN0ZXJzKFNTVG9EUygmc2F2ZVJlZ3MpLCBpbiwgU1NUb0RTKCZzcmVncykpOwpAQCAtNjc2LDIwICs2NzYsMjAgQEAKICAgICBWREhSZXNldEV2ZW50U2VtKGhldklSZXQpOwogICAgIHJjID0gVkRIUHVzaEludChpbnRubyk7CiAKLSAgICAvLyBzZXQgdXAgcmV0dXJuIGhvb2sgZm9yIGludGVycnVwdAorICAgIC8qIHNldCB1cCByZXR1cm4gaG9vayBmb3IgaW50ZXJydXB0ICovCiAgICAgcmMgPSBWREhBcm1SZXR1cm5Ib29rKGhob29rVXNlcklSZXRIb29rLCBWREhBUkhfTk9STUFMX0lSRVQpOwogCiAgICAgVkRIWWllbGQoMCk7CiAKLSAgICAvLyB3YWl0IHVudGlsIHRoZSBWODYgSVJFVHMgLSBvdXIgcmV0dXJuIGhvb2sgcG9zdHMgdGhlIHNlbWFwaG9yZQotICAgIHJjID0gVkRIV2FpdEV2ZW50U2VtKGhldklSZXQsIDUwMDApOyAvL1NFTV9JTkRFRklOSVRFX1dBSVQpOworICAgIC8qIHdhaXQgdW50aWwgdGhlIFY4NiBJUkVUcyAtIG91ciByZXR1cm4gaG9vayBwb3N0cyB0aGUgc2VtYXBob3JlICovCisgICAgcmMgPSBWREhXYWl0RXZlbnRTZW0oaGV2SVJldCwgNTAwMCk7IC8qU0VNX0lOREVGSU5JVEVfV0FJVCk7ICovCiAKICAgICBSZWFkVjg2UmVnaXN0ZXJzKFNTVG9EUygmc2F2ZVJlZ3MpLCBvdXQsIFNTVG9EUygmc3JlZ3MpKTsKIAogI2lmIDAKICAgICAvKiBSZS1lbmFibGUgcGFzcy11cCB0byBvdXIgVkREIGhhbmRsZXIgaWYgcHJldmlvdXNseSBlbmFibGVkICovCiAgICAgaWYgKGRpc2FibGVUU1JGbGFnKQotICAgICAgICAqZGlzYWJsZVRTUkZsYWcgPSBvbGREaXNhYmxlOworCSpkaXNhYmxlVFNSRmxhZyA9IG9sZERpc2FibGU7CiAjZW5kaWYKIAogICAgIFRSQUNFKCJTRERIRUxQOiBFeGl0aW5nIFBNX2ludDg2KClcbiIpOwpAQCAtNzE2LDI5ICs3MTYsMjkgQEAKICAgICAvKiBEaXNhYmxlIHBhc3MtdXAgdG8gb3VyIFZ4RCBoYW5kbGVyIHNvIHdlIGRpcmVjdGx5IGNhbGwgQklPUyAqLwogICAgIFRSQUNFKCJTRERIRUxQOiBFbnRlcmluZyBQTV9pbnQ4NngoKVxuIik7CiAgICAgaWYgKGRpc2FibGVUU1JGbGFnKSB7Ci0gICAgICAgIG9sZERpc2FibGUgPSAqZGlzYWJsZVRTUkZsYWc7Ci0gICAgICAgICpkaXNhYmxlVFNSRmxhZyA9IDA7Ci0gICAgICAgIH0KKwlvbGREaXNhYmxlID0gKmRpc2FibGVUU1JGbGFnOworCSpkaXNhYmxlVFNSRmxhZyA9IDA7CisJfQogI2VuZGlmCiAgICAgTG9hZFY4NlJlZ2lzdGVycyhTU1RvRFMoJnNhdmVSZWdzKSwgaW4sIHNyZWdzKTsKIAogICAgIFZESFJlc2V0RXZlbnRTZW0oaGV2SVJldCk7CiAgICAgcmMgPSBWREhQdXNoSW50KGludG5vKTsKIAotICAgIC8vIHNldCB1cCByZXR1cm4gaG9vayBmb3IgaW50ZXJydXB0CisgICAgLyogc2V0IHVwIHJldHVybiBob29rIGZvciBpbnRlcnJ1cHQgKi8KICAgICByYyA9IFZESEFybVJldHVybkhvb2soaGhvb2tVc2VySVJldEhvb2ssIFZESEFSSF9OT1JNQUxfSVJFVCk7CiAKICAgICBWREhZaWVsZCgwKTsKIAotICAgIC8vIHdhaXQgdW50aWwgdGhlIFY4NiBJUkVUcyAtIG91ciByZXR1cm4gaG9vayBwb3N0cyB0aGUgc2VtYXBob3JlCi0gICAgcmMgPSBWREhXYWl0RXZlbnRTZW0oaGV2SVJldCwgNTAwMCk7IC8vU0VNX0lOREVGSU5JVEVfV0FJVCk7CisgICAgLyogd2FpdCB1bnRpbCB0aGUgVjg2IElSRVRzIC0gb3VyIHJldHVybiBob29rIHBvc3RzIHRoZSBzZW1hcGhvcmUgKi8KKyAgICByYyA9IFZESFdhaXRFdmVudFNlbShoZXZJUmV0LCA1MDAwKTsgLypTRU1fSU5ERUZJTklURV9XQUlUKTsgKi8KIAogICAgIFJlYWRWODZSZWdpc3RlcnMoU1NUb0RTKCZzYXZlUmVncyksIG91dCwgc3JlZ3MpOwogCiAjaWYgMAogICAgIC8qIFJlLWVuYWJsZSBwYXNzLXVwIHRvIG91ciBWeEQgaGFuZGxlciBpZiBwcmV2aW91c2x5IGVuYWJsZWQgKi8KICAgICBpZiAoZGlzYWJsZVRTUkZsYWcpCi0gICAgICAgICpkaXNhYmxlVFNSRmxhZyA9IG9sZERpc2FibGU7CisJKmRpc2FibGVUU1JGbGFnID0gb2xkRGlzYWJsZTsKICNlbmRpZgogCiAgICAgVFJBQ0UoIlNEREhFTFA6IEV4aXRpbmcgUE1faW50ODZ4KClcbiIpOwpAQCAtNzc2LDcgKzc3Niw3IEBACiAgICAgaWJvb2wgY29udGlndW91cykKIHsKICAgICBpZiAocCkKLSAgICAgICAgVkRIRnJlZVBhZ2VzKChQVk9JRClwKTsKKwlWREhGcmVlUGFnZXMoKFBWT0lEKXApOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzg3LDcgKzc4Nyw3IEBACiB7CiAgICAgVUxPTkcgIGxvY2tIYW5kbGU7CiAKLSAgICAvLyBUT0RPOiB0aGUgbG9jayBoYW5kbGUgaXMgZXNzZW50aWFsIGZvciB0aGUgdW5sb2NrIG9wZXJhdGlvbiEhCisgICAgLyogVE9ETzogdGhlIGxvY2sgaGFuZGxlIGlzIGVzc2VudGlhbCBmb3IgdGhlIHVubG9jayBvcGVyYXRpb24hISAqLwogICAgIGxvY2tIYW5kbGUgPSBWREhMb2NrTWVtKHAsIGxlbiwgMCwgKFBWT0lEKVZESExNX05PX0FERFIsIE5VTEwpOwogCiAgICAgaWYgKGxvY2tIYW5kbGUgIT0gTlVMTCkKQEAgLTgwMiw4ICs4MDIsOCBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBQTUFQSSBQTV91bmxvY2tEYXRhUGFnZXModm9pZCAqcCx1aW50IGxlbixQTV9sb2NrSGFuZGxlICpsaCkKIHsKLSAgICAvLyBUT0RPOiBpbXBsZW1lbnQgLSB1c2UgYSB0YWJsZSBvZiBsb2NrIGhhbmRsZXM/Ci0gICAgLy8gVkRIVW5sb2NrUGFnZXMobG9ja0hhbmRsZSk7CisgICAgLyogVE9ETzogaW1wbGVtZW50IC0gdXNlIGEgdGFibGUgb2YgbG9jayBoYW5kbGVzPyAqLworICAgIC8qIFZESFVubG9ja1BhZ2VzKGxvY2tIYW5kbGUpOyAqLwogICAgIHJldHVybiAwOwogfQogCkBAIC04NjcsOSArODY3LDkgQEAKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKICAgICBQTV9maW5kRGF0YSAqZmluZERhdGEpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgc3RhcnQgYSBkaXJlY3RvcnkgZW51bWVyYXRpb24gc2VhcmNoCi0gICAgLy8gICAgICAgZ2l2ZW4gdGhlIGZpbGVuYW1lICh3aXRoIHdpbGRjYXJkcykuIFRoZSBkYXRhIHNob3VsZCBiZQotICAgIC8vICAgICAgIGNvbnZlcnRlZCBhbmQgcmV0dXJuZWQgaW4gdGhlIGZpbmREYXRhIHN0YW5kYXJkIGZvcm0uCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgc3RhcnQgYSBkaXJlY3RvcnkgZW51bWVyYXRpb24gc2VhcmNoICovCisgICAgLyogICAgICAgZ2l2ZW4gdGhlIGZpbGVuYW1lICh3aXRoIHdpbGRjYXJkcykuIFRoZSBkYXRhIHNob3VsZCBiZSAqLworICAgIC8qICAgICAgIGNvbnZlcnRlZCBhbmQgcmV0dXJuZWQgaW4gdGhlIGZpbmREYXRhIHN0YW5kYXJkIGZvcm0uICovCiAgICAgKHZvaWQpZmlsZW5hbWU7CiAgICAgKHZvaWQpZmluZERhdGE7CiAgICAgcmV0dXJuIFBNX0ZJTEVfSU5WQUxJRDsKQEAgLTg4MywxMCArODgzLDEwIEBACiAgICAgdm9pZCAqaGFuZGxlLAogICAgIFBNX2ZpbmREYXRhICpmaW5kRGF0YSkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmaW5kIHRoZSBuZXh0IGZpbGUgaW4gZGlyZWN0b3J5IGVudW1lcmF0aW9uCi0gICAgLy8gICAgICAgc2VhcmNoIGdpdmVuIHRoZSBzZWFyY2ggY3JpdGVyaWEgZGVmaW5lZCBpbiB0aGUgY2FsbCB0bwotICAgIC8vICAgICAgIFBNX2ZpbmRGaXJzdEZpbGUuIFRoZSBkYXRhIHNob3VsZCBiZSBjb252ZXJ0ZWQgYW5kIHJldHVybmVkCi0gICAgLy8gICAgICAgaW4gdGhlIGZpbmREYXRhIHN0YW5kYXJkIGZvcm0uCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgZmluZCB0aGUgbmV4dCBmaWxlIGluIGRpcmVjdG9yeSBlbnVtZXJhdGlvbiAqLworICAgIC8qICAgICAgIHNlYXJjaCBnaXZlbiB0aGUgc2VhcmNoIGNyaXRlcmlhIGRlZmluZWQgaW4gdGhlIGNhbGwgdG8gKi8KKyAgICAvKiAgICAgICBQTV9maW5kRmlyc3RGaWxlLiBUaGUgZGF0YSBzaG91bGQgYmUgY29udmVydGVkIGFuZCByZXR1cm5lZCAqLworICAgIC8qICAgICAgIGluIHRoZSBmaW5kRGF0YSBzdGFuZGFyZCBmb3JtLiAqLwogICAgICh2b2lkKWhhbmRsZTsKICAgICAodm9pZClmaW5kRGF0YTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC04OTksOCArODk5LDggQEAKIHZvaWQgUE1BUEkgUE1fZmluZENsb3NlKAogICAgIHZvaWQgKmhhbmRsZSkKIHsKLSAgICAvLyBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjbG9zZSB0aGUgZmluZCBwcm9jZXNzLiBUaGlzIG1heSBkbwotICAgIC8vICAgICAgIG5vdGhpbmcgZm9yIHNvbWUgT1MnZXMuCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgY2xvc2UgdGhlIGZpbmQgcHJvY2Vzcy4gVGhpcyBtYXkgZG8gKi8KKyAgICAvKiAgICAgICBub3RoaW5nIGZvciBzb21lIE9TJ2VzLiAqLwogICAgICh2b2lkKWhhbmRsZTsKIH0KIApAQCAtOTIwLDcgKzkyMCw3IEBACiBpYm9vbCBQTUFQSSBQTV9kcml2ZVZhbGlkKAogICAgIGNoYXIgZHJpdmUpCiB7Ci0gICAgLy8gTm90IGFwcGxpY2FibGUgaW4gYSBWREQKKyAgICAvKiBOb3QgYXBwbGljYWJsZSBpbiBhIFZERCAqLwogICAgICh2b2lkKWRyaXZlOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTkzNiw3ICs5MzYsNyBAQAogICAgIGNoYXIgKmRpciwKICAgICBpbnQgbGVuKQogewotICAgIC8vIE5vdCBhcHBsaWNhYmxlIGluIGEgVkRECisgICAgLyogTm90IGFwcGxpY2FibGUgaW4gYSBWREQgKi8KICAgICAodm9pZClkcml2ZTsKICAgICAodm9pZClkaXI7CiAgICAgKHZvaWQpbGVuOwpAQCAtOTcwLDcgKzk3MCw3IEBACiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgdWludCBhdHRyaWIpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgPworICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzID8gKi8KICAgICAodm9pZClmaWxlbmFtZTsKICAgICAodm9pZClhdHRyaWI7CiAgICAgUE1fZmF0YWxFcnJvcigiUE1fc2V0RmlsZUF0dHIgbm90IGltcGxlbWVudGVkISIpOwpAQCAtOTgzLDcgKzk4Myw3IEBACiB1aW50IFBNQVBJIFBNX2dldEZpbGVBdHRyKAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzID8KKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyA/ICovCiAgICAgKHZvaWQpZmlsZW5hbWU7CiAgICAgUE1fZmF0YWxFcnJvcigiUE1fZ2V0RmlsZUF0dHIgbm90IGltcGxlbWVudGVkISIpOwogICAgIHJldHVybiAwOwpAQCAtOTk2LDcgKzk5Niw3IEBACiBpYm9vbCBQTUFQSSBQTV9ta2RpcigKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyA/CisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgPyAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgIFBNX2ZhdGFsRXJyb3IoIlBNX21rZGlyIG5vdCBpbXBsZW1lbnRlZCEiKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDA5LDcgKzEwMDksNyBAQAogaWJvb2wgUE1BUEkgUE1fcm1kaXIoCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgPworICAgIC8qIFRPRE86IEltcGxlbWVudCB0aGlzID8gKi8KICAgICAodm9pZClmaWxlbmFtZTsKICAgICBQTV9mYXRhbEVycm9yKCJQTV9ybWRpciBub3QgaW1wbGVtZW50ZWQhIik7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKICAgICBpYm9vbCBnbVRpbWUsCiAgICAgUE1fdGltZSAqdGltZSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyA/CisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgPyAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgICh2b2lkKWdtVGltZTsKICAgICAodm9pZCl0aW1lOwpAQCAtMTA0MSw3ICsxMDQxLDcgQEAKICAgICBpYm9vbCBnbVRpbWUsCiAgICAgUE1fdGltZSAqdGltZSkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdGhpcyA/CisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgPyAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgICh2b2lkKWdtVGltZTsKICAgICAodm9pZCl0aW1lOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdmRkL3ZmbGF0LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS92ZGQvdmZsYXQuYwppbmRleCAxMGM2M2UzLi4yMTYzOTI4IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS92ZGQvdmZsYXQuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS92ZGQvdmZsYXQuYwpAQCAtMzIsMTIgKzMyLDEyIEBACiAKIGlib29sIFBNQVBJIFZGX2F2YWlsYWJsZSh2b2lkKQogewotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkICogUE1BUEkgVkZfaW5pdCh1bG9uZyBiYXNlQWRkcixpbnQgYmFua1NpemUsaW50IGNvZGVMZW4sdm9pZCAqYmFua0Z1bmMpCiB7Ci0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogfQogCiB2b2lkIFBNQVBJIFZGX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Z4ZC9maWxlaW8uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Z4ZC9maWxlaW8uYwppbmRleCBlMmZmNTg1Li4zYzZjZTk5IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS92eGQvZmlsZWlvLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vdnhkL2ZpbGVpby5jCkBAIC00Nyw2MiArNDcsNjIgQEAKICAgICBsb25nICAgIG9sZHBvczsKIAogICAgIGlmIChmKSB7Ci0gICAgICAgIGYtPm9mZnNldCA9IDA7Ci0gICAgICAgIGYtPnRleHQgPSAobW9kZVsxXSA9PSAndCcgfHwgbW9kZVsyXSA9PSAndCcpOwotICAgICAgICBmLT53cml0ZW1vZGUgPSAobW9kZVswXSA9PSAndycpIHx8IChtb2RlWzBdID09ICdhJyk7Ci0gICAgICAgIGlmIChpbml0Q29tcGxldGUpIHsKLSAgICAgICAgICAgIFdPUkQgICAgb21vZGUsZXJyb3I7Ci0gICAgICAgICAgICBCWVRFICAgIGFjdGlvbjsKKwlmLT5vZmZzZXQgPSAwOworCWYtPnRleHQgPSAobW9kZVsxXSA9PSAndCcgfHwgbW9kZVsyXSA9PSAndCcpOworCWYtPndyaXRlbW9kZSA9IChtb2RlWzBdID09ICd3JykgfHwgKG1vZGVbMF0gPT0gJ2EnKTsKKwlpZiAoaW5pdENvbXBsZXRlKSB7CisJICAgIFdPUkQgICAgb21vZGUsZXJyb3I7CisJICAgIEJZVEUgICAgYWN0aW9uOwogCi0gICAgICAgICAgICBpZiAobW9kZVswXSA9PSAncicpIHsKLSAgICAgICAgICAgICAgICBvbW9kZSA9IE9QRU5fQUNDRVNTX1JFQURPTkxZIHwgT1BFTl9TSEFSRV9DT01QQVRJQkxFOwotICAgICAgICAgICAgICAgIGFjdGlvbiA9IEFDVElPTl9JRkVYSVNUU19PUEVOIHwgQUNUSU9OX0lGTk9URVhJU1RTX0ZBSUw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobW9kZVswXSA9PSAndycpIHsKLSAgICAgICAgICAgICAgICBvbW9kZSA9IE9QRU5fQUNDRVNTX1dSSVRFT05MWSB8IE9QRU5fU0hBUkVfQ09NUEFUSUJMRTsKLSAgICAgICAgICAgICAgICBhY3Rpb24gPSBBQ1RJT05fSUZFWElTVFNfVFJVTkNBVEUgfCBBQ1RJT05fSUZOT1RFWElTVFNfQ1JFQVRFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG9tb2RlID0gT1BFTl9BQ0NFU1NfUkVBRFdSSVRFIHwgT1BFTl9TSEFSRV9DT01QQVRJQkxFOwotICAgICAgICAgICAgICAgIGFjdGlvbiA9IEFDVElPTl9JRkVYSVNUU19PUEVOIHwgQUNUSU9OX0lGTk9URVhJU1RTX0NSRUFURTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmLT5oYW5kbGUgPSAoaW50KVIwX09wZW5DcmVhdGVGaWxlKGZhbHNlLChjaGFyKilmaWxlbmFtZSxvbW9kZSxBVFRSX05PUk1BTCxhY3Rpb24sMCwmZXJyb3IsJmFjdGlvbik7Ci0gICAgICAgICAgICBpZiAoZi0+aGFuZGxlID09IDApIHsKLSAgICAgICAgICAgICAgICBQTV9mcmVlKGYpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGYtPmZpbGVzaXplID0gUjBfR2V0RmlsZVNpemUoKEhBTkRMRSlmLT5oYW5kbGUsJmVycm9yKTsKLSAgICAgICAgICAgIGlmIChtb2RlWzBdID09ICdhJykKLSAgICAgICAgICAgICAgICBmc2VlayhmLDAsMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50IG9mbGFnLHBtb2RlOworCSAgICBpZiAobW9kZVswXSA9PSAncicpIHsKKwkJb21vZGUgPSBPUEVOX0FDQ0VTU19SRUFET05MWSB8IE9QRU5fU0hBUkVfQ09NUEFUSUJMRTsKKwkJYWN0aW9uID0gQUNUSU9OX0lGRVhJU1RTX09QRU4gfCBBQ1RJT05fSUZOT1RFWElTVFNfRkFJTDsKKwkJfQorCSAgICBlbHNlIGlmIChtb2RlWzBdID09ICd3JykgeworCQlvbW9kZSA9IE9QRU5fQUNDRVNTX1dSSVRFT05MWSB8IE9QRU5fU0hBUkVfQ09NUEFUSUJMRTsKKwkJYWN0aW9uID0gQUNUSU9OX0lGRVhJU1RTX1RSVU5DQVRFIHwgQUNUSU9OX0lGTk9URVhJU1RTX0NSRUFURTsKKwkJfQorCSAgICBlbHNlIHsKKwkJb21vZGUgPSBPUEVOX0FDQ0VTU19SRUFEV1JJVEUgfCBPUEVOX1NIQVJFX0NPTVBBVElCTEU7CisJCWFjdGlvbiA9IEFDVElPTl9JRkVYSVNUU19PUEVOIHwgQUNUSU9OX0lGTk9URVhJU1RTX0NSRUFURTsKKwkJfQorCSAgICBmLT5oYW5kbGUgPSAoaW50KVIwX09wZW5DcmVhdGVGaWxlKGZhbHNlLChjaGFyKilmaWxlbmFtZSxvbW9kZSxBVFRSX05PUk1BTCxhY3Rpb24sMCwmZXJyb3IsJmFjdGlvbik7CisJICAgIGlmIChmLT5oYW5kbGUgPT0gMCkgeworCQlQTV9mcmVlKGYpOworCQlyZXR1cm4gTlVMTDsKKwkJfQorCSAgICBmLT5maWxlc2l6ZSA9IFIwX0dldEZpbGVTaXplKChIQU5ETEUpZi0+aGFuZGxlLCZlcnJvcik7CisJICAgIGlmIChtb2RlWzBdID09ICdhJykKKwkJZnNlZWsoZiwwLDIpOworCSAgICB9CisJZWxzZSB7CisJICAgIGludCBvZmxhZyxwbW9kZTsKIAotICAgICAgICAgICAgaWYgKG1vZGVbMF0gPT0gJ3InKSB7Ci0gICAgICAgICAgICAgICAgcG1vZGUgPSBfU19JUkVBRDsKLSAgICAgICAgICAgICAgICBvZmxhZyA9IF9PX1JET05MWTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtb2RlWzBdID09ICd3JykgewotICAgICAgICAgICAgICAgIHBtb2RlID0gX1NfSVdSSVRFOwotICAgICAgICAgICAgICAgIG9mbGFnID0gX09fV1JPTkxZIHwgX09fQ1JFQVQgfCBfT19UUlVOQzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBwbW9kZSA9IF9TX0lXUklURTsKLSAgICAgICAgICAgICAgICBvZmxhZyA9IF9PX1JEV1IgfCBfT19DUkVBVCB8IF9PX0FQUEVORDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZi0+dGV4dCkKLSAgICAgICAgICAgICAgICBvZmxhZyB8PSBfT19URVhUOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9mbGFnIHw9IF9PX0JJTkFSWTsKLSAgICAgICAgICAgIGlmICgoZi0+aGFuZGxlID0gaV9vcGVuKGZpbGVuYW1lLG9mbGFnLHBtb2RlKSkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBQTV9mcmVlKGYpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9sZHBvcyA9IGlfbHNlZWsoZi0+aGFuZGxlLDAsMSk7Ci0gICAgICAgICAgICBmLT5maWxlc2l6ZSA9IGlfbHNlZWsoZi0+aGFuZGxlLDAsMik7Ci0gICAgICAgICAgICBpX2xzZWVrKGYtPmhhbmRsZSxvbGRwb3MsMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgaWYgKG1vZGVbMF0gPT0gJ3InKSB7CisJCXBtb2RlID0gX1NfSVJFQUQ7CisJCW9mbGFnID0gX09fUkRPTkxZOworCQl9CisJICAgIGVsc2UgaWYgKG1vZGVbMF0gPT0gJ3cnKSB7CisJCXBtb2RlID0gX1NfSVdSSVRFOworCQlvZmxhZyA9IF9PX1dST05MWSB8IF9PX0NSRUFUIHwgX09fVFJVTkM7CisJCX0KKwkgICAgZWxzZSB7CisJCXBtb2RlID0gX1NfSVdSSVRFOworCQlvZmxhZyA9IF9PX1JEV1IgfCBfT19DUkVBVCB8IF9PX0FQUEVORDsKKwkJfQorCSAgICBpZiAoZi0+dGV4dCkKKwkJb2ZsYWcgfD0gX09fVEVYVDsKKwkgICAgZWxzZQorCQlvZmxhZyB8PSBfT19CSU5BUlk7CisJICAgIGlmICgoZi0+aGFuZGxlID0gaV9vcGVuKGZpbGVuYW1lLG9mbGFnLHBtb2RlKSkgPT0gLTEpIHsKKwkJUE1fZnJlZShmKTsKKwkJcmV0dXJuIE5VTEw7CisJCX0KKwkgICAgb2xkcG9zID0gaV9sc2VlayhmLT5oYW5kbGUsMCwxKTsKKwkgICAgZi0+ZmlsZXNpemUgPSBpX2xzZWVrKGYtPmhhbmRsZSwwLDIpOworCSAgICBpX2xzZWVrKGYtPmhhbmRsZSxvbGRwb3MsMCk7CisJICAgIH0KKwl9CiAgICAgcmV0dXJuIGY7CiB9CiAKQEAgLTEyNSwyNyArMTI1LDI3IEBACiAgICAgaW50ICAgICByZWFkYnl0ZXMsdG90YWxieXRlcyA9IDA7CiAKICAgICB3aGlsZSAoYnl0ZXMgPiAweDEwMDAwKSB7Ci0gICAgICAgIGlmIChpbml0Q29tcGxldGUpIHsKLSAgICAgICAgICAgIHJlYWRieXRlcyAgPSBSMF9SZWFkRmlsZShmYWxzZSwoSEFORExFKWYtPmhhbmRsZSxidWYsMHg4MDAwLGYtPm9mZnNldCwmZXJyb3IpOwotICAgICAgICAgICAgcmVhZGJ5dGVzICs9IFIwX1JlYWRGaWxlKGZhbHNlLChIQU5ETEUpZi0+aGFuZGxlLGJ1ZisweDgwMDAsMHg4MDAwLGYtPm9mZnNldCsweDgwMDAsJmVycm9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZWFkYnl0ZXMgID0gaV9yZWFkKGYtPmhhbmRsZSxidWYsMHg4MDAwKTsKLSAgICAgICAgICAgIHJlYWRieXRlcyArPSBpX3JlYWQoZi0+aGFuZGxlLGJ1ZisweDgwMDAsMHg4MDAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgdG90YWxieXRlcyArPSByZWFkYnl0ZXM7Ci0gICAgICAgIGYtPm9mZnNldCArPSByZWFkYnl0ZXM7Ci0gICAgICAgIGJ1ZiArPSAweDEwMDAwOwotICAgICAgICBieXRlcyAtPSAweDEwMDAwOwotICAgICAgICB9CisJaWYgKGluaXRDb21wbGV0ZSkgeworCSAgICByZWFkYnl0ZXMgID0gUjBfUmVhZEZpbGUoZmFsc2UsKEhBTkRMRSlmLT5oYW5kbGUsYnVmLDB4ODAwMCxmLT5vZmZzZXQsJmVycm9yKTsKKwkgICAgcmVhZGJ5dGVzICs9IFIwX1JlYWRGaWxlKGZhbHNlLChIQU5ETEUpZi0+aGFuZGxlLGJ1ZisweDgwMDAsMHg4MDAwLGYtPm9mZnNldCsweDgwMDAsJmVycm9yKTsKKwkgICAgfQorCWVsc2UgeworCSAgICByZWFkYnl0ZXMgID0gaV9yZWFkKGYtPmhhbmRsZSxidWYsMHg4MDAwKTsKKwkgICAgcmVhZGJ5dGVzICs9IGlfcmVhZChmLT5oYW5kbGUsYnVmKzB4ODAwMCwweDgwMDApOworCSAgICB9CisJdG90YWxieXRlcyArPSByZWFkYnl0ZXM7CisJZi0+b2Zmc2V0ICs9IHJlYWRieXRlczsKKwlidWYgKz0gMHgxMDAwMDsKKwlieXRlcyAtPSAweDEwMDAwOworCX0KICAgICBpZiAoYnl0ZXMpIHsKLSAgICAgICAgaWYgKGluaXRDb21wbGV0ZSkKLSAgICAgICAgICAgIHJlYWRieXRlcyA9IFIwX1JlYWRGaWxlKGZhbHNlLChIQU5ETEUpZi0+aGFuZGxlLGJ1ZixieXRlcyxmLT5vZmZzZXQsJmVycm9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVhZGJ5dGVzID0gaV9yZWFkKGYtPmhhbmRsZSxidWYsYnl0ZXMpOwotICAgICAgICB0b3RhbGJ5dGVzICs9IHJlYWRieXRlczsKLSAgICAgICAgZi0+b2Zmc2V0ICs9IHJlYWRieXRlczsKLSAgICAgICAgfQorCWlmIChpbml0Q29tcGxldGUpCisJICAgIHJlYWRieXRlcyA9IFIwX1JlYWRGaWxlKGZhbHNlLChIQU5ETEUpZi0+aGFuZGxlLGJ1ZixieXRlcyxmLT5vZmZzZXQsJmVycm9yKTsKKwllbHNlCisJICAgIHJlYWRieXRlcyA9IGlfcmVhZChmLT5oYW5kbGUsYnVmLGJ5dGVzKTsKKwl0b3RhbGJ5dGVzICs9IHJlYWRieXRlczsKKwlmLT5vZmZzZXQgKz0gcmVhZGJ5dGVzOworCX0KICAgICByZXR1cm4gdG90YWxieXRlcyAvIHNpemU7CiB9CiAKQEAgLTE2OCwyOSArMTY4LDI5IEBACiAgICAgaW50ICAgICAgICAgd3JpdHRlbmJ5dGVzLHRvdGFsYnl0ZXMgPSAwOwogCiAgICAgaWYgKCFmLT53cml0ZW1vZGUpCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIHdoaWxlIChieXRlcyA+IDB4MTAwMDApIHsKLSAgICAgICAgaWYgKGluaXRDb21wbGV0ZSkgewotICAgICAgICAgICAgd3JpdHRlbmJ5dGVzICA9IFIwX1dyaXRlRmlsZShmYWxzZSwoSEFORExFKWYtPmhhbmRsZSxidWYsMHg4MDAwLGYtPm9mZnNldCwmZXJyb3IpOwotICAgICAgICAgICAgd3JpdHRlbmJ5dGVzICs9IFIwX1dyaXRlRmlsZShmYWxzZSwoSEFORExFKWYtPmhhbmRsZSxidWYrMHg4MDAwLDB4ODAwMCxmLT5vZmZzZXQrMHg4MDAwLCZlcnJvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgd3JpdHRlbmJ5dGVzICA9IGlfd3JpdGUoZi0+aGFuZGxlLGJ1ZiwweDgwMDApOwotICAgICAgICAgICAgd3JpdHRlbmJ5dGVzICs9IGlfd3JpdGUoZi0+aGFuZGxlLGJ1ZisweDgwMDAsMHg4MDAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgdG90YWxieXRlcyArPSB3cml0dGVuYnl0ZXM7Ci0gICAgICAgIGYtPm9mZnNldCArPSB3cml0dGVuYnl0ZXM7Ci0gICAgICAgIGJ1ZiArPSAweDEwMDAwOwotICAgICAgICBieXRlcyAtPSAweDEwMDAwOwotICAgICAgICB9CisJaWYgKGluaXRDb21wbGV0ZSkgeworCSAgICB3cml0dGVuYnl0ZXMgID0gUjBfV3JpdGVGaWxlKGZhbHNlLChIQU5ETEUpZi0+aGFuZGxlLGJ1ZiwweDgwMDAsZi0+b2Zmc2V0LCZlcnJvcik7CisJICAgIHdyaXR0ZW5ieXRlcyArPSBSMF9Xcml0ZUZpbGUoZmFsc2UsKEhBTkRMRSlmLT5oYW5kbGUsYnVmKzB4ODAwMCwweDgwMDAsZi0+b2Zmc2V0KzB4ODAwMCwmZXJyb3IpOworCSAgICB9CisJZWxzZSB7CisJICAgIHdyaXR0ZW5ieXRlcyAgPSBpX3dyaXRlKGYtPmhhbmRsZSxidWYsMHg4MDAwKTsKKwkgICAgd3JpdHRlbmJ5dGVzICs9IGlfd3JpdGUoZi0+aGFuZGxlLGJ1ZisweDgwMDAsMHg4MDAwKTsKKwkgICAgfQorCXRvdGFsYnl0ZXMgKz0gd3JpdHRlbmJ5dGVzOworCWYtPm9mZnNldCArPSB3cml0dGVuYnl0ZXM7CisJYnVmICs9IDB4MTAwMDA7CisJYnl0ZXMgLT0gMHgxMDAwMDsKKwl9CiAgICAgaWYgKGluaXRDb21wbGV0ZSkKLSAgICAgICAgd3JpdHRlbmJ5dGVzID0gUjBfV3JpdGVGaWxlKGZhbHNlLChIQU5ETEUpZi0+aGFuZGxlLGJ1ZixieXRlcyxmLT5vZmZzZXQsJmVycm9yKTsKKwl3cml0dGVuYnl0ZXMgPSBSMF9Xcml0ZUZpbGUoZmFsc2UsKEhBTkRMRSlmLT5oYW5kbGUsYnVmLGJ5dGVzLGYtPm9mZnNldCwmZXJyb3IpOwogICAgIGVsc2UKLSAgICAgICAgd3JpdHRlbmJ5dGVzID0gaV93cml0ZShmLT5oYW5kbGUsYnVmLGJ5dGVzKTsKKwl3cml0dGVuYnl0ZXMgPSBpX3dyaXRlKGYtPmhhbmRsZSxidWYsYnl0ZXMpOwogICAgIHRvdGFsYnl0ZXMgKz0gd3JpdHRlbmJ5dGVzOwogICAgIGYtPm9mZnNldCArPSB3cml0dGVuYnl0ZXM7CiAgICAgaWYgKGYtPm9mZnNldCA+IGYtPmZpbGVzaXplKQotICAgICAgICBmLT5maWxlc2l6ZSA9IGYtPm9mZnNldDsKKwlmLT5maWxlc2l6ZSA9IGYtPm9mZnNldDsKICAgICByZXR1cm4gdG90YWxieXRlcyAvIHNpemU7CiB9CiAKQEAgLTIwMSw3ICsyMDEsNyBAQAogaW50IGZmbHVzaCgKICAgICBGSUxFICpmKQogewotICAgIC8vIE5vdGhpbmcgdG8gZG8gc2luY2Ugd2UgYXJlIG5vdCBkb2luZyBidWZmZXJlZCBmaWxlIEkvTworICAgIC8qIE5vdGhpbmcgdG8gZG8gc2luY2Ugd2UgYXJlIG5vdCBkb2luZyBidWZmZXJlZCBmaWxlIEkvTyAqLwogICAgICh2b2lkKWY7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yMTYsMTMgKzIxNiwxMyBAQAogICAgIGludCB3aGVuY2UpCiB7CiAgICAgaWYgKHdoZW5jZSA9PSAwKQotICAgICAgICBmLT5vZmZzZXQgPSBvZmZzZXQ7CisJZi0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGVsc2UgaWYgKHdoZW5jZSA9PSAxKQotICAgICAgICBmLT5vZmZzZXQgKz0gb2Zmc2V0OworCWYtPm9mZnNldCArPSBvZmZzZXQ7CiAgICAgZWxzZSBpZiAod2hlbmNlID09IDIpCi0gICAgICAgIGYtPm9mZnNldCA9IGYtPmZpbGVzaXplICsgb2Zmc2V0OworCWYtPm9mZnNldCA9IGYtPmZpbGVzaXplICsgb2Zmc2V0OwogICAgIGlmICghaW5pdENvbXBsZXRlKQotICAgICAgICBpX2xzZWVrKGYtPmhhbmRsZSxmLT5vZmZzZXQsMCk7CisJaV9sc2VlayhmLT5oYW5kbGUsZi0+b2Zmc2V0LDApOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yNTgsMTkgKzI1OCwxOSBAQAogICAgIGludCAgICAgbGVuOwogICAgIGNoYXIgICAgKmNzOwogCi0gICAgLy8gUmVhZCB0aGUgZW50aXJlIGJ1ZmZlciBpbnRvIG1lbW9yeSAob3VyIGZ1bmN0aW9ucyBhcmUgdW5idWZmZXJlZCEpCisgICAgLyogUmVhZCB0aGUgZW50aXJlIGJ1ZmZlciBpbnRvIG1lbW9yeSAob3VyIGZ1bmN0aW9ucyBhcmUgdW5idWZmZXJlZCEpICovCiAgICAgaWYgKChsZW4gPSBmcmVhZChzLDEsbixmKSkgPT0gMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAKLSAgICAvLyBTZWFyY2ggZm9yICdcbicgb3IgZW5kIG9mIHN0cmluZworICAgIC8qIFNlYXJjaCBmb3IgJ1xuJyBvciBlbmQgb2Ygc3RyaW5nICovCiAgICAgaWYgKG4gPiBsZW4pCi0gICAgICAgIG4gPSBsZW47CisJbiA9IGxlbjsKICAgICBjcyA9IHM7CiAgICAgd2hpbGUgKC0tbiA+IDApIHsKLSAgICAgICAgaWYgKCpjcyA9PSAnXG4nKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNzKys7Ci0gICAgICAgIH0KKwlpZiAoKmNzID09ICdcbicpCisJICAgIGJyZWFrOworCWNzKys7CisJfQogICAgICpjcyA9ICdcMCc7CiAgICAgcmV0dXJuIHM7CiB9CkBAIC0yOTYsMTAgKzI5Niw5IEBACiAgICAgV09SRCBlcnJvcjsKIAogICAgIGlmIChpbml0Q29tcGxldGUpCi0gICAgICAgIFIwX0Nsb3NlRmlsZSgoSEFORExFKWYtPmhhbmRsZSwmZXJyb3IpOworCVIwX0Nsb3NlRmlsZSgoSEFORExFKWYtPmhhbmRsZSwmZXJyb3IpOwogICAgIGVsc2UKLSAgICAgICAgaV9jbG9zZShmLT5oYW5kbGUpOworCWlfY2xvc2UoZi0+aGFuZGxlKTsKICAgICBQTV9mcmVlKGYpOwogICAgIHJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS92eGQvcG0uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Z4ZC9wbS5jCmluZGV4IDhkMDBkZjkuLjRjYjdmMTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Z4ZC9wbS5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3Z4ZC9wbS5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIHsKICAgICB2b2lkICpwID0gUE1fbWFsbG9jU2hhcmVkKG5lbGVtICogc2l6ZSk7CiAgICAgaWYgKHApCi0gICAgICAgIG1lbXNldChwLDAsbmVsZW0gKiBzaXplKTsKKwltZW1zZXQocCwwLG5lbGVtICogc2l6ZSk7CiAgICAgcmV0dXJuIHA7CiB9CiAKQEAgLTExOSw5ICsxMTksOSBAQAogewogICAgIHZvaWQgKnAgPSBQTV9tYWxsb2NTaGFyZWQoc2l6ZSk7CiAgICAgaWYgKHApIHsKLSAgICAgICAgbWVtY3B5KHAscHRyLHNpemUpOwotICAgICAgICBQTV9mcmVlU2hhcmVkKHB0cik7Ci0gICAgICAgIH0KKwltZW1jcHkocCxwdHIsc2l6ZSk7CisJUE1fZnJlZVNoYXJlZChwdHIpOworCX0KICAgICByZXR1cm4gcDsKIH0KIApAQCAtMTY2LDkgKzE2Niw5IEBACiB7CiAgICAgdWludCBwb3MgPSBzdHJsZW4ocyk7CiAgICAgaWYgKHNbcG9zLTFdICE9ICdcXCcpIHsKLSAgICAgICAgc1twb3NdID0gJ1xcJzsKLSAgICAgICAgc1twb3MrMV0gPSAnXDAnOwotICAgICAgICB9CisJc1twb3NdID0gJ1xcJzsKKwlzW3BvcysxXSA9ICdcMCc7CisJfQogfQogCiB2b2lkIFBNQVBJIFBNX3NldEZhdGFsRXJyb3JDbGVhbnVwKApAQCAtMTgwLDcgKzE4MCw3IEBACiB2b2lkIFBNQVBJIFBNX2ZhdGFsRXJyb3IoY29uc3QgY2hhciAqbXNnKQogewogICAgIGlmIChmYXRhbEVycm9yQ2xlYW51cCkKLSAgICAgICAgZmF0YWxFcnJvckNsZWFudXAoKTsKKwlmYXRhbEVycm9yQ2xlYW51cCgpOwogICAgIEZhdGFsX0Vycm9yX0hhbmRsZXIobXNnLDApOwogfQogCkBAIC0yMDQsMTEgKzIwNCwxMSBAQAogICAgICAqIHRyYW5zZmVyIGJ1ZmZlciB0byByZXR1cm4sIHNvIHdlIGZhaWwgdGhlIGNhbGwuCiAgICAgICovCiAgICAgaWYgKF9QTV9ybUJ1ZkFkZHIpIHsKLSAgICAgICAgKmxlbiA9IFZFU0FfQlVGX1NJWkU7Ci0gICAgICAgICpyc2VnID0gKHVsb25nKShfUE1fcm1CdWZBZGRyKSA+PiA0OwotICAgICAgICAqcm9mZiA9ICh1bG9uZykoX1BNX3JtQnVmQWRkcikgJiAweEY7Ci0gICAgICAgIHJldHVybiBfUE1fcm1CdWZBZGRyOwotICAgICAgICB9CisJKmxlbiA9IFZFU0FfQlVGX1NJWkU7CisJKnJzZWcgPSAodWxvbmcpKF9QTV9ybUJ1ZkFkZHIpID4+IDQ7CisJKnJvZmYgPSAodWxvbmcpKF9QTV9ybUJ1ZkFkZHIpICYgMHhGOworCXJldHVybiBfUE1fcm1CdWZBZGRyOworCX0KICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjc2LDEwICsyNzYsMTAgQEAKIAogICAgIG1lbXNldCh2YWx1ZSwwLHNpemVvZih2YWx1ZSkpOwogICAgIGlmIChSZWdPcGVuS2V5KEhLRVlfTE9DQUxfTUFDSElORSxzektleSwmaEtleSkgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGhLZXksKFBDSEFSKXN6VmFsdWUsKHVsb25nKilOVUxMLCh1bG9uZyopJnR5cGUsdmFsdWUsKHVsb25nKikmc2l6ZSkgPT0gRVJST1JfU1VDQ0VTUykKLSAgICAgICAgICAgIHN0YXR1cyA9IHRydWU7Ci0gICAgICAgIFJlZ0Nsb3NlS2V5KGhLZXkpOwotICAgICAgICB9CisJaWYgKFJlZ1F1ZXJ5VmFsdWVFeChoS2V5LChQQ0hBUilzelZhbHVlLCh1bG9uZyopTlVMTCwodWxvbmcqKSZ0eXBlLHZhbHVlLCh1bG9uZyopJnNpemUpID09IEVSUk9SX1NVQ0NFU1MpCisJICAgIHN0YXR1cyA9IHRydWU7CisJUmVnQ2xvc2VLZXkoaEtleSk7CisJfQogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTI4OCwxMiArMjg4LDEyIEBACiAgICAgc3RhdGljIGNoYXIgcGF0aFsyNTZdOwogCiAgICAgaWYgKHN0cmxlbihfUE1fbnVjbGV1c1BhdGgpID4gMCkgewotICAgICAgICBzdHJjcHkocGF0aCxfUE1fbnVjbGV1c1BhdGgpOwotICAgICAgICBQTV9iYWNrc2xhc2gocGF0aCk7Ci0gICAgICAgIHJldHVybiBwYXRoOwotICAgICAgICB9CisJc3RyY3B5KHBhdGgsX1BNX251Y2xldXNQYXRoKTsKKwlQTV9iYWNrc2xhc2gocGF0aCk7CisJcmV0dXJuIHBhdGg7CisJfQogICAgIGlmICghUkVHX3F1ZXJ5U3RyaW5nKHN6V2luZG93c0tleSxzelN5c3RlbVJvb3QscGF0aCxzaXplb2YocGF0aCkpKQotICAgICAgICBzdHJjcHkocGF0aCwiYzpcXHdpbmRvd3MiKTsKKwlzdHJjcHkocGF0aCwiYzpcXHdpbmRvd3MiKTsKICAgICBQTV9iYWNrc2xhc2gocGF0aCk7CiAgICAgc3RyY2F0KHBhdGgsInN5c3RlbVxcbnVjbGV1cyIpOwogICAgIHJldHVybiBwYXRoOwpAQCAtMzE1LDcgKzMxNSw3IEBACiB7CiAgICAgc3RhdGljIGNoYXIgbmFtZVsyNTZdOwogICAgIGlmIChSRUdfcXVlcnlTdHJpbmcoc3pNYWNoaW5lTmFtZUtleSxzek1hY2hpbmVOYW1lLG5hbWUsc2l6ZW9mKG5hbWUpKSkKLSAgICAgICAgcmV0dXJuIG5hbWU7CisJcmV0dXJuIG5hbWU7CiAgICAgcmV0dXJuICJVbmtub3duIjsKIH0KIApAQCAtMzUyLDcgKzM1Miw3IEBACiAKIHZvaWQgUE1BUEkgUE1fc2V0U3VzcGVuZEFwcENhbGxiYWNrKAogICAgIGludCAoX0FTTUFQSVAgc2F2ZVN0YXRlKSgKLSAgICAgICAgaW50IGZsYWdzKSkKKwlpbnQgZmxhZ3MpKQogewogICAgIC8qIFVudXNlZCBpbiBWeERzICovCiB9CkBAIC00MDUsMTYgKzQwNSwxNiBAQAogCiAgICAgLyogRmlyc3QgZmluZCBhIGZyZWUgc2xvdCBpbiBvdXIgc2hhcmVkIG1lbW9yeSB0YWJsZSAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfTUVNT1JZX1NIQVJFRDsgaSsrKSB7Ci0gICAgICAgIGlmIChzaGFyZWRbaV0ubGluZWFyID09IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWlmIChzaGFyZWRbaV0ubGluZWFyID09IDApCisJICAgIGJyZWFrOworCX0KICAgICBpZiAoaSA8IE1BWF9NRU1PUllfU0hBUkVEKSB7Ci0gICAgICAgIFBhZ2VBbGxvY2F0ZShuUGFnZXMsUEdfU1lTLDAsMCwwLDAsTlVMTCwwLCZoTWVtLCZzaGFyZWRbaV0ubGluZWFyKTsKLSAgICAgICAgc2hhcmVkW2ldLm5wYWdlcyA9IG5QYWdlczsKLSAgICAgICAgcGdOdW0gPSAodWxvbmcpc2hhcmVkW2ldLmxpbmVhciA+PiAxMjsKLSAgICAgICAgc2hhcmVkW2ldLmdsb2JhbCA9IExpblBhZ2VMb2NrKHBnTnVtLG5QYWdlcyxQQUdFTUFQR0xPQkFMKTsKLSAgICAgICAgcmV0dXJuICh2b2lkKilzaGFyZWRbaV0uZ2xvYmFsOwotICAgICAgICB9CisJUGFnZUFsbG9jYXRlKG5QYWdlcyxQR19TWVMsMCwwLDAsMCxOVUxMLDAsJmhNZW0sJnNoYXJlZFtpXS5saW5lYXIpOworCXNoYXJlZFtpXS5ucGFnZXMgPSBuUGFnZXM7CisJcGdOdW0gPSAodWxvbmcpc2hhcmVkW2ldLmxpbmVhciA+PiAxMjsKKwlzaGFyZWRbaV0uZ2xvYmFsID0gTGluUGFnZUxvY2socGdOdW0sblBhZ2VzLFBBR0VNQVBHTE9CQUwpOworCXJldHVybiAodm9pZCopc2hhcmVkW2ldLmdsb2JhbDsKKwl9CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQyOCwxMyArNDI4LDEzIEBACiAKICAgICAvKiBGaW5kIGEgc2hhcmVkIG1lbW9yeSBibG9jayBpbiBvdXIgdGFibGUgYW5kIGZyZWUgaXQgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX01FTU9SWV9TSEFSRUQ7IGkrKykgewotICAgICAgICBpZiAoc2hhcmVkW2ldLmdsb2JhbCA9PSAodWxvbmcpcCkgewotICAgICAgICAgICAgTGluUGFnZVVuTG9jayhzaGFyZWRbaV0uZ2xvYmFsID4+IDEyLHNoYXJlZFtpXS5ucGFnZXMsUEFHRU1BUEdMT0JBTCk7Ci0gICAgICAgICAgICBQYWdlRnJlZSgodWxvbmcpc2hhcmVkW2ldLmxpbmVhciwwKTsKLSAgICAgICAgICAgIHNoYXJlZFtpXS5saW5lYXIgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiAoc2hhcmVkW2ldLmdsb2JhbCA9PSAodWxvbmcpcCkgeworCSAgICBMaW5QYWdlVW5Mb2NrKHNoYXJlZFtpXS5nbG9iYWwgPj4gMTIsc2hhcmVkW2ldLm5wYWdlcyxQQUdFTUFQR0xPQkFMKTsKKwkgICAgUGFnZUZyZWUoKHVsb25nKXNoYXJlZFtpXS5saW5lYXIsMCk7CisJICAgIHNoYXJlZFtpXS5saW5lYXIgPSAwOworCSAgICBicmVhazsKKwkgICAgfQorCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQ1NSw3ICs0NTUsNyBAQAogICAgIHZvaWQgKm1hcHBlZEJJT1MsCiAgICAgdWxvbmcgQklPU0xlbikKIHsKLSAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IGhvdyB0byBkbyB0aGlzCisgICAgLyogVE9ETzogRmlndXJlIG91dCBob3cgdG8gZG8gdGhpcyAqLwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNDg1LDI5ICs0ODUsMjkgQEAKICAgICBpbnQgICAgIGkscHBhZ2UsZmxhZ3M7CiAKICAgICBpZiAoYmFzZSA8IDB4MTAwMDAwKSB7Ci0gICAgICAgIC8qIFdpbmRvd3MgOXggaXMgemVybyBiYXNlZCBmb3IgdGhlIGZpcnN0IG1lZyBvZiBtZW1vcnkgKi8KLSAgICAgICAgcmV0dXJuIGJhc2U7Ci0gICAgICAgIH0KKwkvKiBXaW5kb3dzIDl4IGlzIHplcm8gYmFzZWQgZm9yIHRoZSBmaXJzdCBtZWcgb2YgbWVtb3J5ICovCisJcmV0dXJuIGJhc2U7CisJfQogICAgIHBwYWdlID0gYmFzZSA+PiAxMjsKICAgICAqbnBhZ2VzID0gKGxlbmd0aCArIChiYXNlICYgMHhGRkYpICsgNDA5NSkgPj4gMTI7CiAgICAgZmxhZ3MgPSBQUl9GSVhFRCB8IFBSX1NUQVRJQzsKICAgICBpZiAoYmFzZSA9PSAweEEwMDAwKSB7Ci0gICAgICAgIC8qIFdlIHJlcXVpcmUgdGhlIGxpbmVhciBhZGRyZXNzIHRvIGJlIGFsaWduZWQgdG8gYSA2NEtiIGJvdW5kYXJ5Ci0gICAgICAgICAqIGZvciBtYXBwaW5nIHRoZSBiYW5rZWQgZnJhbWVidWZmZXIgKHNvIHdlIGNhbiBkbyBlZmZpY2llbnQKLSAgICAgICAgICogY2FycnkgY2hlY2tpbmcgZm9yIGJhbmsgY2hhbmdlcyBpbiB0aGUgYXNzZW1ibGVyIGNvZGUpLiBUaGUgb25seQotICAgICAgICAgKiB3YXkgdG8gZW5zdXJlIHRoaXMgaXMgdG8gZm9yY2UgdGhlIGxpbmVhciBhZGRyZXNzIHRvIGJlIGFsaWduZWQKLSAgICAgICAgICogdG8gYSA0TWIgYm91bmRhcnkuCi0gICAgICAgICAqLwotICAgICAgICBmbGFncyB8PSBQUl80TUVHOwotICAgICAgICB9CisJLyogV2UgcmVxdWlyZSB0aGUgbGluZWFyIGFkZHJlc3MgdG8gYmUgYWxpZ25lZCB0byBhIDY0S2IgYm91bmRhcnkKKwkgKiBmb3IgbWFwcGluZyB0aGUgYmFua2VkIGZyYW1lYnVmZmVyIChzbyB3ZSBjYW4gZG8gZWZmaWNpZW50CisJICogY2FycnkgY2hlY2tpbmcgZm9yIGJhbmsgY2hhbmdlcyBpbiB0aGUgYXNzZW1ibGVyIGNvZGUpLiBUaGUgb25seQorCSAqIHdheSB0byBlbnN1cmUgdGhpcyBpcyB0byBmb3JjZSB0aGUgbGluZWFyIGFkZHJlc3MgdG8gYmUgYWxpZ25lZAorCSAqIHRvIGEgNE1iIGJvdW5kYXJ5LgorCSAqLworCWZsYWdzIHw9IFBSXzRNRUc7CisJfQogICAgIGlmICgobGluZWFyID0gKHVsb25nKVBhZ2VSZXNlcnZlKFBSX1NZU1RFTSwqbnBhZ2VzLGZsYWdzKSkgPT0gKHVsb25nKS0xKQotICAgICAgICByZXR1cm4gMHhGRkZGRkZGRjsKKwlyZXR1cm4gMHhGRkZGRkZGRjsKICAgICBpZiAoIVBhZ2VDb21taXRQaHlzKGxpbmVhciA+PiAxMiwqbnBhZ2VzLHBwYWdlLFBDX0lOQ1IgfCBQQ19VU0VSIHwgUENfV1JJVEVBQkxFKSkKLSAgICAgICAgcmV0dXJuIDB4RkZGRkZGRkY7CisJcmV0dXJuIDB4RkZGRkZGRkY7CiAgICAgcmV0dXJuIGxpbmVhciArIChiYXNlICYgMHhGRkYpOwogfQogCi0vLyBQYWdlIHRhYmxlIGZsYWdzCisvKiBQYWdlIHRhYmxlIGZsYWdzICovCiAKICNkZWZpbmUgUEFHRV9GTEFHU19QUkVTRU5UCQkJMHgwMDAwMDAwMQogI2RlZmluZSBQQUdFX0ZMQUdTX1dSSVRFQUJMRQkJMHgwMDAwMDAwMgpAQCAtNTM1LDkgKzUzNSw5IEBACiBzdGlja3kgcGF3cy4KIAogTk9URTogICBJZiB0aGUgbWVtb3J5IGlzIG5vdCBleHBlY3RlZCB0byBiZSBjYWNoZWQsIHRoaXMgZnVuY3Rpb24gd2lsbAotICAgICAgICBkaXJlY3RseSByZS1wcm9ncmFtIHRoZSBQQ0QgKFBhZ2UgQ2FjaGUgRGlzYWJsZSkgYml0IGluIHRoZQotICAgICAgICBwYWdlIHRhYmxlcy4gVGhlcmUgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgbWVjaGFuaXNtIGluIHRoZSBWTU0KLSAgICAgICAgdG8gY29udHJvbCB0aGlzIGJpdCB2aWEgdGhlIHJlZ3VsYXIgaW50ZXJmYWNlLgorCWRpcmVjdGx5IHJlLXByb2dyYW0gdGhlIFBDRCAoUGFnZSBDYWNoZSBEaXNhYmxlKSBiaXQgaW4gdGhlCisJcGFnZSB0YWJsZXMuIFRoZXJlIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIG1lY2hhbmlzbSBpbiB0aGUgVk1NCisJdG8gY29udHJvbCB0aGlzIGJpdCB2aWEgdGhlIHJlZ3VsYXIgaW50ZXJmYWNlLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgKiBQTUFQSSBQTV9tYXBQaHlzaWNhbEFkZHIoCiAgICAgdWxvbmcgYmFzZSwKQEAgLTU1MiwxMSArNTUyLDExIEBACiAgICAgICogYSByZWdpb24gb2YgbWVtb3J5IHRoYXQgd2lsbCBzZXJ2ZSB0aGlzIHB1cnBvc2UuCiAgICAgICovCiAgICAgZm9yIChpID0gMDsgaSA8IG51bU1hcHBpbmdzOyBpKyspIHsKLSAgICAgICAgaWYgKG1hcHNbaV0ucGh5c2ljYWwgPT0gYmFzZSAmJiBtYXBzW2ldLmxlbmd0aCA9PSBsZW5ndGggJiYgbWFwc1tpXS5pc0NhY2hlZCA9PSBpc0NhY2hlZCkKLSAgICAgICAgICAgIHJldHVybiAodm9pZCopbWFwc1tpXS5saW5lYXI7Ci0gICAgICAgIH0KKwlpZiAobWFwc1tpXS5waHlzaWNhbCA9PSBiYXNlICYmIG1hcHNbaV0ubGVuZ3RoID09IGxlbmd0aCAmJiBtYXBzW2ldLmlzQ2FjaGVkID09IGlzQ2FjaGVkKQorCSAgICByZXR1cm4gKHZvaWQqKW1hcHNbaV0ubGluZWFyOworCX0KICAgICBpZiAobnVtTWFwcGluZ3MgPT0gTUFYX01FTU9SWV9NQVBQSU5HUykKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5VTEw7CiAKICAgICAvKiBXZSBkaWQgbm90IGZpbmQgYW55IHByZXZpb3VzbHkgbWFwcGVkIG1lbW9yeSByZWdpb24sIHNvIG1hcHMgaXQgaW4uCiAgICAgICogTm90ZSB0aGF0IHdlIGRvIG5vdCB1c2UgTWFwUGh5c1RvTGluZWFyLCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGFwcGVhcnMKQEAgLTU2NCw3ICs1NjQsNyBAQAogICAgICAqIEhlbmNlIHdlIHVzZSBQYWdlUmVzZXJ2ZSBhbmQgUGFnZUNvbW1pdFBoeXMuCiAgICAgICovCiAgICAgaWYgKChsaW5lYXIgPSBfUE1fbWFwUGh5c2ljYWxUb0xpbmVhcihiYXNlLGxpbWl0LCZucGFnZXMpKSA9PSAweEZGRkZGRkZGKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKICAgICBtYXBzW251bU1hcHBpbmdzXS5waHlzaWNhbCA9IGJhc2U7CiAgICAgbWFwc1tudW1NYXBwaW5nc10ubGVuZ3RoID0gbGVuZ3RoOwogICAgIG1hcHNbbnVtTWFwcGluZ3NdLmxpbmVhciA9IGxpbmVhcjsKQEAgLTU3NCwzNCArNTc0LDM0IEBACiAKICAgICAvKiBGaW5hbGx5IGRpc2FibGUgY2FjaGluZyB3aGVyZSBuZWNlc3NhcnkgKi8KICAgICBpZiAoIWlzQ2FjaGVkICYmIChQREIgPSBfUE1fZ2V0UERCKCkpICE9IDApIHsKLSAgICAgICAgaW50ICAgICBzdGFydFBEQixlbmRQREIsaVBEQixzdGFydFBhZ2UsZW5kUGFnZSxzdGFydCxlbmQsaVBhZ2U7Ci0gICAgICAgIHVsb25nICAgcGFnZVRhYmxlLCpwUGFnZVRhYmxlOwotICAgICAgICBwUERCID0gKHVsb25nKilfUE1fbWFwUGh5c2ljYWxUb0xpbmVhcihQREIsMHhGRkYsJm5wYWdlcyk7Ci0gICAgICAgIGlmIChwUERCKSB7Ci0gICAgICAgICAgICBzdGFydFBEQiA9IChsaW5lYXIgPj4gMjIpICYgMHgzRkY7Ci0gICAgICAgICAgICBzdGFydFBhZ2UgPSAobGluZWFyID4+IDEyKSAmIDB4M0ZGOwotICAgICAgICAgICAgZW5kUERCID0gKChsaW5lYXIrbGltaXQpID4+IDIyKSAmIDB4M0ZGOwotICAgICAgICAgICAgZW5kUGFnZSA9ICgobGluZWFyK2xpbWl0KSA+PiAxMikgJiAweDNGRjsKLSAgICAgICAgICAgIGZvciAoaVBEQiA9IHN0YXJ0UERCOyBpUERCIDw9IGVuZFBEQjsgaVBEQisrKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBiaXRzIGluIHRoZSBwYWdlIGRpcmVjdG9yeSBlbnRyeSAtIHJlcXVpcmVkIGFzIHBlcgotICAgICAgICAgICAgICAgIC8vIFBlbnRpdW0gNCBtYW51YWwuIFRoaXMgYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSA0TUIgcGFnZSBlbnRyaWVzCi0gICAgICAgICAgICAgICAgcFBEQltpUERCXSA9IHBQREJbaVBEQl0gfD0gKFBBR0VfRkxBR1NfV1JJVEVfVEhST1VHSCB8IFBBR0VfRkxBR1NfQ0FDSEVfRElTQUJMRSk7Ci0gICAgICAgICAgICAgICAgaWYgKCEocFBEQltpUERCXSAmIFBBR0VfRkxBR1NfNE1CKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIDRLQiBwYWdlcyB0aGVuIHdlIG5lZWQgdG8gaXRlcmF0ZQotICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdWdoIGVhY2ggb2YgdGhlIHBhZ2UgdGFibGUgZW50cmllcwotICAgICAgICAgICAgICAgICAgICBwYWdlVGFibGUgPSBwUERCW2lQREJdICYgfjB4RkZGOwotICAgICAgICAgICAgICAgICAgICBwUGFnZVRhYmxlID0gKHVsb25nKilfUE1fbWFwUGh5c2ljYWxUb0xpbmVhcihwYWdlVGFibGUsMHhGRkYsJm5wYWdlcyk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gKGlQREIgPT0gc3RhcnRQREIpID8gc3RhcnRQYWdlIDogMDsKLSAgICAgICAgICAgICAgICAgICAgZW5kID0gKGlQREIgPT0gZW5kUERCKSA/IGVuZFBhZ2UgOiAweDNGRjsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpUGFnZSA9IHN0YXJ0OyBpUGFnZSA8PSBlbmQ7IGlQYWdlKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBwUGFnZVRhYmxlW2lQYWdlXSB8PSAoUEFHRV9GTEFHU19XUklURV9USFJPVUdIIHwgUEFHRV9GTEFHU19DQUNIRV9ESVNBQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgUGFnZUZyZWUoKHVsb25nKXBQYWdlVGFibGUsUFJfU1RBVElDKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBhZ2VGcmVlKCh1bG9uZylwUERCLFBSX1NUQVRJQyk7Ci0gICAgICAgICAgICBQTV9mbHVzaFRMQigpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaW50ICAgICBzdGFydFBEQixlbmRQREIsaVBEQixzdGFydFBhZ2UsZW5kUGFnZSxzdGFydCxlbmQsaVBhZ2U7CisJdWxvbmcgICBwYWdlVGFibGUsKnBQYWdlVGFibGU7CisJcFBEQiA9ICh1bG9uZyopX1BNX21hcFBoeXNpY2FsVG9MaW5lYXIoUERCLDB4RkZGLCZucGFnZXMpOworCWlmIChwUERCKSB7CisJICAgIHN0YXJ0UERCID0gKGxpbmVhciA+PiAyMikgJiAweDNGRjsKKwkgICAgc3RhcnRQYWdlID0gKGxpbmVhciA+PiAxMikgJiAweDNGRjsKKwkgICAgZW5kUERCID0gKChsaW5lYXIrbGltaXQpID4+IDIyKSAmIDB4M0ZGOworCSAgICBlbmRQYWdlID0gKChsaW5lYXIrbGltaXQpID4+IDEyKSAmIDB4M0ZGOworCSAgICBmb3IgKGlQREIgPSBzdGFydFBEQjsgaVBEQiA8PSBlbmRQREI7IGlQREIrKykgeworCQkvKiBTZXQgdGhlIGJpdHMgaW4gdGhlIHBhZ2UgZGlyZWN0b3J5IGVudHJ5IC0gcmVxdWlyZWQgYXMgcGVyICovCisJCS8qIFBlbnRpdW0gNCBtYW51YWwuIFRoaXMgYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSA0TUIgcGFnZSBlbnRyaWVzICovCisJCXBQREJbaVBEQl0gPSBwUERCW2lQREJdIHw9IChQQUdFX0ZMQUdTX1dSSVRFX1RIUk9VR0ggfCBQQUdFX0ZMQUdTX0NBQ0hFX0RJU0FCTEUpOworCQlpZiAoIShwUERCW2lQREJdICYgUEFHRV9GTEFHU180TUIpKSB7CisJCSAgICAvKiBJZiB3ZSBhcmUgZGVhbGluZyB3aXRoIDRLQiBwYWdlcyB0aGVuIHdlIG5lZWQgdG8gaXRlcmF0ZSAqLworCQkgICAgLyogdGhyb3VnaCBlYWNoIG9mIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgKi8KKwkJICAgIHBhZ2VUYWJsZSA9IHBQREJbaVBEQl0gJiB+MHhGRkY7CisJCSAgICBwUGFnZVRhYmxlID0gKHVsb25nKilfUE1fbWFwUGh5c2ljYWxUb0xpbmVhcihwYWdlVGFibGUsMHhGRkYsJm5wYWdlcyk7CisJCSAgICBzdGFydCA9IChpUERCID09IHN0YXJ0UERCKSA/IHN0YXJ0UGFnZSA6IDA7CisJCSAgICBlbmQgPSAoaVBEQiA9PSBlbmRQREIpID8gZW5kUGFnZSA6IDB4M0ZGOworCQkgICAgZm9yIChpUGFnZSA9IHN0YXJ0OyBpUGFnZSA8PSBlbmQ7IGlQYWdlKyspCisJCQlwUGFnZVRhYmxlW2lQYWdlXSB8PSAoUEFHRV9GTEFHU19XUklURV9USFJPVUdIIHwgUEFHRV9GTEFHU19DQUNIRV9ESVNBQkxFKTsKKwkJICAgIFBhZ2VGcmVlKCh1bG9uZylwUGFnZVRhYmxlLFBSX1NUQVRJQyk7CisJCSAgICB9CisJCX0KKwkgICAgUGFnZUZyZWUoKHVsb25nKXBQREIsUFJfU1RBVElDKTsKKwkgICAgUE1fZmx1c2hUTEIoKTsKKwkgICAgfQorCX0KICAgICByZXR1cm4gKHZvaWQqKWxpbmVhcjsKIH0KIApAQCAtNjE5LDI2ICs2MTksMjYgQEAKIAogaW50IFBNQVBJIFBNX2dldENPTVBvcnQoaW50IHBvcnQpCiB7Ci0gICAgLy8gVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheQotICAgIC8vICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4KKyAgICAvKiBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5ICovCisgICAgLyogICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLiAqLwogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNGODsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgyRjg7Ci0gICAgICAgIGNhc2UgMjogcmV0dXJuIDB4M0U4OwotICAgICAgICBjYXNlIDM6IHJldHVybiAweDJFODsKLSAgICAgICAgfQorCWNhc2UgMDogcmV0dXJuIDB4M0Y4OworCWNhc2UgMTogcmV0dXJuIDB4MkY4OworCWNhc2UgMjogcmV0dXJuIDB4M0U4OworCWNhc2UgMzogcmV0dXJuIDB4MkU4OworCX0KICAgICByZXR1cm4gMDsKIH0KIAogaW50IFBNQVBJIFBNX2dldExQVFBvcnQoaW50IHBvcnQpCiB7Ci0gICAgLy8gVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheQotICAgIC8vICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4KKyAgICAvKiBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5ICovCisgICAgLyogICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLiAqLwogICAgIHN3aXRjaCAocG9ydCkgewotICAgICAgICBjYXNlIDA6IHJldHVybiAweDNCQzsKLSAgICAgICAgY2FzZSAxOiByZXR1cm4gMHgzNzg7Ci0gICAgICAgIGNhc2UgMjogcmV0dXJuIDB4Mjc4OwotICAgICAgICB9CisJY2FzZSAwOiByZXR1cm4gMHgzQkM7CisJY2FzZSAxOiByZXR1cm4gMHgzNzg7CisJY2FzZSAyOiByZXR1cm4gMHgyNzg7CisJfQogICAgIHJldHVybiAwOwogfQogCkBAIC02NDcsMTggKzY0NywxOCBAQAogewogICAgIERXT1JEICAgcHRlOwogCi0gICAgLy8gVG91Y2ggdGhlIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBDb3B5UGFnZVRhYmxlLiBGb3Igc29tZSByZWFzb24KLSAgICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgb24gV2luZG93cyA5eCwgb3RoZXJ3aXNlIHRoZSBtZW1vcnkgbWF5IG5vdAotICAgIC8vIGJlIHBhZ2VkIGluIGNvcnJlY3RseS4gT2YgY291cnNlIGlmIHRoZSBwYXNzZWQgaW4gcG9pbnRlciBpcwotICAgIC8vIGludmFsaWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBmYXVsdCwgYnV0IHdlIHNob3VsZG4ndCBiZSBwYXNzZWQgYm9ndXMKLSAgICAvLyBwb2ludGVycyBhbnl3YXkgOy0pCisgICAgLyogVG91Y2ggdGhlIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBDb3B5UGFnZVRhYmxlLiBGb3Igc29tZSByZWFzb24gKi8KKyAgICAvKiB3ZSBuZWVkIHRvIGRvIHRoaXMgb24gV2luZG93cyA5eCwgb3RoZXJ3aXNlIHRoZSBtZW1vcnkgbWF5IG5vdCAqLworICAgIC8qIGJlIHBhZ2VkIGluIGNvcnJlY3RseS4gT2YgY291cnNlIGlmIHRoZSBwYXNzZWQgaW4gcG9pbnRlciBpcyAqLworICAgIC8qIGludmFsaWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBmYXVsdCwgYnV0IHdlIHNob3VsZG4ndCBiZSBwYXNzZWQgYm9ndXMgKi8KKyAgICAvKiBwb2ludGVycyBhbnl3YXkgOy0pICovCiAgICAgcHRlID0gKigodWxvbmcqKXApOwogCi0gICAgLy8gUmV0dXJuIGFzc2VtYmxlZCBhZGRyZXNzIHZhbHVlIG9ubHkgaWYgVk1NIHNlcnZpY2Ugc3VjY2VlZHMKKyAgICAvKiBSZXR1cm4gYXNzZW1ibGVkIGFkZHJlc3MgdmFsdWUgb25seSBpZiBWTU0gc2VydmljZSBzdWNjZWVkcyAqLwogICAgIGlmIChDb3B5UGFnZVRhYmxlKCgoRFdPUkQpcCkgPj4gMTIsIDEsIChQVk9JRCopJnB0ZSwgMCkpCi0gICAgICAgIHJldHVybiAocHRlICYgfjB4RkZGKSB8ICgoKERXT1JEKXApICYgMHhGRkYpOworCXJldHVybiAocHRlICYgfjB4RkZGKSB8ICgoKERXT1JEKXApICYgMHhGRkYpOwogCi0gICAgLy8gUmV0dXJuIGZhaWx1cmUgdG8gdGhlIGNhbGxlciEKKyAgICAvKiBSZXR1cm4gZmFpbHVyZSB0byB0aGUgY2FsbGVyISAqLwogICAgIHJldHVybiAweEZGRkZGRkZGVUw7CiB9CiAKQEAgLTY3MSwxMCArNjcxLDEwIEBACiAgICAgdWxvbmcgICBsaW5lYXIgPSAodWxvbmcpcCAmIH4weEZGRjsKIAogICAgIGZvciAoaSA9IChsZW5ndGggKyAweEZGRikgPj4gMTI7IGkgPiAwOyBpLS0pIHsKLSAgICAgICAgaWYgKCgqcGh5c0FkZHJlc3MrKyA9IFBNX2dldFBoeXNpY2FsQWRkcigodm9pZCopbGluZWFyKSkgPT0gMHhGRkZGRkZGRikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbGluZWFyICs9IDQwOTY7Ci0gICAgICAgIH0KKwlpZiAoKCpwaHlzQWRkcmVzcysrID0gUE1fZ2V0UGh5c2ljYWxBZGRyKCh2b2lkKilsaW5lYXIpKSA9PSAweEZGRkZGRkZGKQorCSAgICByZXR1cm4gZmFsc2U7CisJbGluZWFyICs9IDQwOTY7CisJfQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC02ODIsNyArNjgyLDcgQEAKIHsKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtTWFwcGluZ3M7IGkrKykKLSAgICAgICAgUGFnZUZyZWUobWFwc1tpXS5saW5lYXIsUFJfU1RBVElDKTsKKwlQYWdlRnJlZShtYXBzW2ldLmxpbmVhcixQUl9TVEFUSUMpOwogfQogCiB2b2lkICogUE1BUEkgUE1fbWFwUmVhbFBvaW50ZXIoCkBAIC03NzcsNyArNzc3LDcgQEAKICAgICAgKiBsb2FkZWQsIGFuZCBub3Qgc3RhdGljYWxseSBsb2FkZWQuCiAgICAgICovCiAgICAgaWYgKCFfUE1faGF2ZUJJT1MpCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAKICAgICBfVFJBQ0UoIlNEREhFTFA6IEVudGVyaW5nIFBNX2NhbGxSZWFsTW9kZSgpXG4iKTsKICAgICBCZWdpbl9OZXN0X1Y4Nl9FeGVjKCk7CkBAIC04MDcsMTYgKzgwNywxNiBAQAogICAgICAqIGxvYWRlZCwgYW5kIG5vdCBzdGF0aWNhbGx5IGxvYWRlZC4KICAgICAgKi8KICAgICBpZiAoIV9QTV9oYXZlQklPUykgewotICAgICAgICAqb3V0ID0gKmluOwotICAgICAgICByZXR1cm4gb3V0LT54LmF4OwotICAgICAgICB9CisJKm91dCA9ICppbjsKKwlyZXR1cm4gb3V0LT54LmF4OworCX0KIAogICAgIC8qIERpc2FibGUgcGFzcy11cCB0byBvdXIgVnhEIGhhbmRsZXIgc28gd2UgZGlyZWN0bHkgY2FsbCBCSU9TICovCiAgICAgX1RSQUNFKCJTRERIRUxQOiBFbnRlcmluZyBQTV9pbnQ4NigpXG4iKTsKICAgICBpZiAoZGlzYWJsZVRTUkZsYWcpIHsKLSAgICAgICAgb2xkRGlzYWJsZSA9ICpkaXNhYmxlVFNSRmxhZzsKLSAgICAgICAgKmRpc2FibGVUU1JGbGFnID0gMDsKLSAgICAgICAgfQorCW9sZERpc2FibGUgPSAqZGlzYWJsZVRTUkZsYWc7CisJKmRpc2FibGVUU1JGbGFnID0gMDsKKwl9CiAgICAgQmVnaW5fTmVzdF9WODZfRXhlYygpOwogICAgIExvYWRWODZSZWdpc3RlcnMoJnNhdmVSZWdzLGluLCZzcmVncyk7CiAgICAgRXhlY19JbnQoaW50bm8pOwpAQCAtODI1LDcgKzgyNSw3IEBACiAKICAgICAvKiBSZS1lbmFibGUgcGFzcy11cCB0byBvdXIgVnhEIGhhbmRsZXIgaWYgcHJldmlvdXNseSBlbmFibGVkICovCiAgICAgaWYgKGRpc2FibGVUU1JGbGFnKQotICAgICAgICAqZGlzYWJsZVRTUkZsYWcgPSBvbGREaXNhYmxlOworCSpkaXNhYmxlVFNSRmxhZyA9IG9sZERpc2FibGU7CiAKICAgICBfVFJBQ0UoIlNEREhFTFA6IEV4aXRpbmcgUE1faW50ODYoKVxuIik7CiAgICAgcmV0dXJuIG91dC0+eC5heDsKQEAgLTg0OSwxNiArODQ5LDE2IEBACiAgICAgICogbG9hZGVkLCBhbmQgbm90IHN0YXRpY2FsbHkgbG9hZGVkLgogICAgICAqLwogICAgIGlmICghX1BNX2hhdmVCSU9TKSB7Ci0gICAgICAgICpvdXQgPSAqaW47Ci0gICAgICAgIHJldHVybiBvdXQtPnguYXg7Ci0gICAgICAgIH0KKwkqb3V0ID0gKmluOworCXJldHVybiBvdXQtPnguYXg7CisJfQogCiAgICAgLyogRGlzYWJsZSBwYXNzLXVwIHRvIG91ciBWeEQgaGFuZGxlciBzbyB3ZSBkaXJlY3RseSBjYWxsIEJJT1MgKi8KICAgICBfVFJBQ0UoIlNEREhFTFA6IEVudGVyaW5nIFBNX2ludDg2eCgpXG4iKTsKICAgICBpZiAoZGlzYWJsZVRTUkZsYWcpIHsKLSAgICAgICAgb2xkRGlzYWJsZSA9ICpkaXNhYmxlVFNSRmxhZzsKLSAgICAgICAgKmRpc2FibGVUU1JGbGFnID0gMDsKLSAgICAgICAgfQorCW9sZERpc2FibGUgPSAqZGlzYWJsZVRTUkZsYWc7CisJKmRpc2FibGVUU1JGbGFnID0gMDsKKwl9CiAgICAgQmVnaW5fTmVzdF9WODZfRXhlYygpOwogICAgIExvYWRWODZSZWdpc3RlcnMoJnNhdmVSZWdzLGluLHNyZWdzKTsKICAgICBFeGVjX0ludChpbnRubyk7CkBAIC04NjcsNyArODY3LDcgQEAKIAogICAgIC8qIFJlLWVuYWJsZSBwYXNzLXVwIHRvIG91ciBWeEQgaGFuZGxlciBpZiBwcmV2aW91c2x5IGVuYWJsZWQgKi8KICAgICBpZiAoZGlzYWJsZVRTUkZsYWcpCi0gICAgICAgICpkaXNhYmxlVFNSRmxhZyA9IG9sZERpc2FibGU7CisJKmRpc2FibGVUU1JGbGFnID0gb2xkRGlzYWJsZTsKIAogICAgIF9UUkFDRSgiU0RESEVMUDogRXhpdGluZyBQTV9pbnQ4NngoKVxuIik7CiAgICAgcmV0dXJuIG91dC0+eC5heDsKQEAgLTkwMCwxNCArOTAwLDE0IEBACiAgICAgRFdPUkQgICAgICAgbWF4UGh5cyA9IGJlbG93MTZNID8gMHgwMEZGRkZGRiA6IDB4RkZGRkZGRkY7CiAgICAgdm9pZCAgICAgICAgKnA7CiAKLSAgICAvLyBUT0RPOiBUaGlzIG1heSBuZWVkIHRvIGJlIG1vZGlmaWVkIGlmIHRoZSBtZW1vcnkgbmVlZHMgdG8gYmUgZ2xvYmFsbHkKLSAgICAvLyAgICAgICBhY2Nlc3NpYmxlLiBDaGVjayBob3cgd2UgaW1wbGVtZW50ZWQgUE1fbWFsbG9jU2hhcmVkKCkgYXMgd2UKLSAgICAvLyAgICAgICBtYXkgbmVlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhciBpbiBoZXJlLgorICAgIC8qIFRPRE86IFRoaXMgbWF5IG5lZWQgdG8gYmUgbW9kaWZpZWQgaWYgdGhlIG1lbW9yeSBuZWVkcyB0byBiZSBnbG9iYWxseSAqLworICAgIC8qICAgICAgIGFjY2Vzc2libGUuIENoZWNrIGhvdyB3ZSBpbXBsZW1lbnRlZCBQTV9tYWxsb2NTaGFyZWQoKSBhcyB3ZSAqLworICAgIC8qICAgICAgIG1heSBuZWVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyIGluIGhlcmUuICovCiAgICAgUGFnZUFsbG9jYXRlKG5QYWdlcyxQR19TWVMsMCwwLDAsbWF4UGh5cyxwaHlzQWRkcixmbGFncywmaE1lbSwmcCk7CiAKLSAgICAvLyBUT0RPOiBXZSBtYXkgbmVlZCB0byBtb2RpZnkgdGhlIG1lbW9yeSBibG9ja3MgdG8gZGlzYWJsZSBjYWNoaW5nIHZpYQotICAgIC8vICAgICAgIHRoZSBwYWdlIHRhYmxlcyAoUENEfFBXVCkgc2luY2UgRE1BIG1lbW9yeSBibG9ja3MgKmNhbm5vdCogYmUKLSAgICAvLyAgICAgICBjYWNoZWQhCisgICAgLyogVE9ETzogV2UgbWF5IG5lZWQgdG8gbW9kaWZ5IHRoZSBtZW1vcnkgYmxvY2tzIHRvIGRpc2FibGUgY2FjaGluZyB2aWEgKi8KKyAgICAvKiAgICAgICB0aGUgcGFnZSB0YWJsZXMgKFBDRHxQV1QpIHNpbmNlIERNQSBtZW1vcnkgYmxvY2tzICpjYW5ub3QqIGJlICovCisgICAgLyogICAgICAgY2FjaGVkISAqLwogICAgIHJldHVybiBwOwogfQogCkBAIC05MjEsNyArOTIxLDcgQEAKICAgICBpYm9vbCBjb250aWd1b3VzKQogewogICAgIGlmIChwKQotICAgICAgICBQYWdlRnJlZSgodWxvbmcpcCwwKTsKKwlQYWdlRnJlZSgodWxvbmcpcCwwKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTkzNCw5ICs5MzQsOSBAQAogICAgIE1FTUhBTkRMRSAgIGhNZW07CiAgICAgdm9pZCAgICAgICAgKnA7CiAKLSAgICAvLyBUT0RPOiBUaGlzIHdpbGwgbmVlZCB0byBiZSBtb2RpZmllZCBpZiB0aGUgbWVtb3J5IG5lZWRzIHRvIGJlIGdsb2JhbGx5Ci0gICAgLy8gICAgICAgYWNjZXNzaWJsZS4gQ2hlY2sgaG93IHdlIGltcGxlbWVudGVkIFBNX21hbGxvY1NoYXJlZCgpIGFzIHdlCi0gICAgLy8gICAgICAgbWF5IG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgaW4gaGVyZS4KKyAgICAvKiBUT0RPOiBUaGlzIHdpbGwgbmVlZCB0byBiZSBtb2RpZmllZCBpZiB0aGUgbWVtb3J5IG5lZWRzIHRvIGJlIGdsb2JhbGx5ICovCisgICAgLyogICAgICAgYWNjZXNzaWJsZS4gQ2hlY2sgaG93IHdlIGltcGxlbWVudGVkIFBNX21hbGxvY1NoYXJlZCgpIGFzIHdlICovCisgICAgLyogICAgICAgbWF5IG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgaW4gaGVyZS4gKi8KICAgICBQYWdlQWxsb2NhdGUoMSxQR19TWVMsMCwwLDAsMCwwLFBBR0VGSVhFRCwmaE1lbSwmcCk7CiAgICAgcmV0dXJuIHA7CiB9CkBAIC05NDksNyArOTQ5LDcgQEAKICAgICB2b2lkICpwKQogewogICAgIGlmIChwKQotICAgICAgICBQYWdlRnJlZSgodWxvbmcpcCwwKTsKKwlQYWdlRnJlZSgodWxvbmcpcCwwKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEwMTIsNDEgKzEwMTIsNDEgQEAKICAgICBpbnQgZnJlcXVlbmN5KQogewogICAgIHN0YXRpYyBzaG9ydCBjb252ZXJ0W10gPSB7Ci0gICAgICAgIDgxOTIsCi0gICAgICAgIDQwOTYsCi0gICAgICAgIDIwNDgsCi0gICAgICAgIDEwMjQsCi0gICAgICAgIDUxMiwKLSAgICAgICAgMjU2LAotICAgICAgICAxMjgsCi0gICAgICAgIDY0LAotICAgICAgICAzMiwKLSAgICAgICAgMTYsCi0gICAgICAgIDgsCi0gICAgICAgIDQsCi0gICAgICAgIDIsCi0gICAgICAgIC0xLAotICAgICAgICB9OworCTgxOTIsCisJNDA5NiwKKwkyMDQ4LAorCTEwMjQsCisJNTEyLAorCTI1NiwKKwkxMjgsCisJNjQsCisJMzIsCisJMTYsCisJOCwKKwk0LAorCTIsCisJLTEsCisJfTsKICAgICBpbnQgaTsKIAogICAgIC8qIEZpcnN0IGNsZWFyIGFueSBwZW5kaW5nIFJUQyB0aW1lb3V0IGlmIG5vdCBjbGVhcmVkICovCiAgICAgX1BNX3JlYWRDTU9TKDB4MEMpOwogICAgIGlmIChmcmVxdWVuY3kgPT0gMCkgewotICAgICAgICAvKiBEaXNhYmxlIFJUQyB0aW1vdXQgKi8KLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBBLF9QTV9vbGRDTU9TUmVnQSk7Ci0gICAgICAgIF9QTV93cml0ZUNNT1MoMHgwQixfUE1fb2xkQ01PU1JlZ0IgJiAweDBGKTsKLSAgICAgICAgfQorCS8qIERpc2FibGUgUlRDIHRpbW91dCAqLworCV9QTV93cml0ZUNNT1MoMHgwQSxfUE1fb2xkQ01PU1JlZ0EpOworCV9QTV93cml0ZUNNT1MoMHgwQixfUE1fb2xkQ01PU1JlZ0IgJiAweDBGKTsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIENvbnZlcnQgZnJlcXVlbmN5IHZhbHVlIHRvIFJUQyBjbG9jayBpbmRleGVzICovCi0gICAgICAgIGZvciAoaSA9IDA7IGNvbnZlcnRbaV0gIT0gLTE7IGkrKykgewotICAgICAgICAgICAgaWYgKGNvbnZlcnRbaV0gPT0gZnJlcXVlbmN5KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorCS8qIENvbnZlcnQgZnJlcXVlbmN5IHZhbHVlIHRvIFJUQyBjbG9jayBpbmRleGVzICovCisJZm9yIChpID0gMDsgY29udmVydFtpXSAhPSAtMTsgaSsrKSB7CisJICAgIGlmIChjb252ZXJ0W2ldID09IGZyZXF1ZW5jeSkKKwkJYnJlYWs7CisJICAgIH0KIAotICAgICAgICAvKiBTZXQgUlRDIHRpbW91dCB2YWx1ZSBhbmQgZW5hYmxlIHRpbWVvdXQgKi8KLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBBLDB4MjAgfCAoaSszKSk7Ci0gICAgICAgIF9QTV93cml0ZUNNT1MoMHgwQiwoX1BNX29sZENNT1NSZWdCICYgMHgwRikgfCAweDQwKTsKLSAgICAgICAgfQorCS8qIFNldCBSVEMgdGltb3V0IHZhbHVlIGFuZCBlbmFibGUgdGltZW91dCAqLworCV9QTV93cml0ZUNNT1MoMHgwQSwweDIwIHwgKGkrMykpOworCV9QTV93cml0ZUNNT1MoMHgwQiwoX1BNX29sZENNT1NSZWdCICYgMHgwRikgfCAweDQwKTsKKwl9CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDcyLDExICsxMDcyLDExIEBACiAgICAgICogbmV3IG9uZSBjb21lcyBhbG9uZzsgaWYgdGhhdCBoYXBwZW5zIHdlIGlnbm9yZSB0aGUgb2xkIG9uZSkuCiAgICAgICovCiAgICAgaWYgKCFpbnNpZGUpIHsKLSAgICAgICAgaW5zaWRlID0gMTsKLSAgICAgICAgZW5hYmxlKCk7Ci0gICAgICAgIF9QTV9ydGNIYW5kbGVyKCk7Ci0gICAgICAgIGluc2lkZSA9IDA7Ci0gICAgICAgIH0KKwlpbnNpZGUgPSAxOworCWVuYWJsZSgpOworCV9QTV9ydGNIYW5kbGVyKCk7CisJaW5zaWRlID0gMDsKKwl9CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKQEAgLTExMDYsNyArMTEwNiw3IEBACiAgICAgSVJRZGVzYy5WSURfSVJFVF9Qcm9jICAgICAgID0gMDsKICAgICBJUlFkZXNjLlZJRF9JUkVUX1RpbWVfT3V0ICAgPSA1MDA7CiAgICAgaWYgKChSVENJUlFIYW5kbGUgPSBWUElDRF9WaXJ0dWFsaXplX0lSUSgmSVJRZGVzYykpID09IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAKICAgICAvKiBQcm9ncmFtIHRoZSByZWFsIHRpbWUgY2xvY2sgZGVmYXVsdCBmcmVxdWVuY3kgKi8KICAgICBQTV9zZXRSZWFsVGltZUNsb2NrRnJlcXVlbmN5KGZyZXF1ZW5jeSk7CkBAIC0xMTIzLDE1ICsxMTIzLDE1IEBACiB2b2lkIFBNQVBJIFBNX3Jlc3RvcmVSZWFsVGltZUNsb2NrSGFuZGxlcih2b2lkKQogewogICAgIGlmIChSVENJUlFIYW5kbGUpIHsKLSAgICAgICAgLyogUmVzdG9yZSBDTU9TIHJlZ2lzdGVycyBhbmQgbWFzayBSVEMgY2xvY2sgKi8KLSAgICAgICAgX1BNX3dyaXRlQ01PUygweDBBLF9QTV9vbGRDTU9TUmVnQSk7Ci0gICAgICAgIF9QTV93cml0ZUNNT1MoMHgwQixfUE1fb2xkQ01PU1JlZ0IpOworCS8qIFJlc3RvcmUgQ01PUyByZWdpc3RlcnMgYW5kIG1hc2sgUlRDIGNsb2NrICovCisJX1BNX3dyaXRlQ01PUygweDBBLF9QTV9vbGRDTU9TUmVnQSk7CisJX1BNX3dyaXRlQ01PUygweDBCLF9QTV9vbGRDTU9TUmVnQik7CiAKLSAgICAgICAgLyogUmVzdG9yZSB0aGUgaW50ZXJydXB0IHZlY3RvciAqLwotICAgICAgICBWUElDRF9TZXRfQXV0b19NYXNraW5nKFJUQ0lSUUhhbmRsZSk7Ci0gICAgICAgIFZQSUNEX0ZvcmNlX0RlZmF1bHRfQmVoYXZpb3IoUlRDSVJRSGFuZGxlKTsKLSAgICAgICAgUlRDSVJRSGFuZGxlID0gMDsKLSAgICAgICAgfQorCS8qIFJlc3RvcmUgdGhlIGludGVycnVwdCB2ZWN0b3IgKi8KKwlWUElDRF9TZXRfQXV0b19NYXNraW5nKFJUQ0lSUUhhbmRsZSk7CisJVlBJQ0RfRm9yY2VfRGVmYXVsdF9CZWhhdmlvcihSVENJUlFIYW5kbGUpOworCVJUQ0lSUUhhbmRsZSA9IDA7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTE3Niw5ICsxMTc2LDkgQEAKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKICAgICBQTV9maW5kRGF0YSAqZmluZERhdGEpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgc3RhcnQgYSBkaXJlY3RvcnkgZW51bWVyYXRpb24gc2VhcmNoCi0gICAgLy8gICAgICAgZ2l2ZW4gdGhlIGZpbGVuYW1lICh3aXRoIHdpbGRjYXJkcykuIFRoZSBkYXRhIHNob3VsZCBiZQotICAgIC8vICAgICAgIGNvbnZlcnRlZCBhbmQgcmV0dXJuZWQgaW4gdGhlIGZpbmREYXRhIHN0YW5kYXJkIGZvcm0uCisgICAgLyogVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgc3RhcnQgYSBkaXJlY3RvcnkgZW51bWVyYXRpb24gc2VhcmNoICovCisgICAgLyogICAgICAgZ2l2ZW4gdGhlIGZpbGVuYW1lICh3aXRoIHdpbGRjYXJkcykuIFRoZSBkYXRhIHNob3VsZCBiZSAqLworICAgIC8qICAgICAgIGNvbnZlcnRlZCBhbmQgcmV0dXJuZWQgaW4gdGhlIGZpbmREYXRhIHN0YW5kYXJkIGZvcm0uICovCiAgICAgKHZvaWQpZmlsZW5hbWU7CiAgICAgKHZvaWQpZmluZERhdGE7CiAgICAgcmV0dXJuIFBNX0ZJTEVfSU5WQUxJRDsKQEAgLTExOTIsMTAgKzExOTIsMTAgQEAKICAgICB2b2lkICpoYW5kbGUsCiAgICAgUE1fZmluZERhdGEgKmZpbmREYXRhKQogewotICAgIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGZpbmQgdGhlIG5leHQgZmlsZSBpbiBkaXJlY3RvcnkgZW51bWVyYXRpb24KLSAgICAvLyAgICAgICBzZWFyY2ggZ2l2ZW4gdGhlIHNlYXJjaCBjcml0ZXJpYSBkZWZpbmVkIGluIHRoZSBjYWxsIHRvCi0gICAgLy8gICAgICAgUE1fZmluZEZpcnN0RmlsZS4gVGhlIGRhdGEgc2hvdWxkIGJlIGNvbnZlcnRlZCBhbmQgcmV0dXJuZWQKLSAgICAvLyAgICAgICBpbiB0aGUgZmluZERhdGEgc3RhbmRhcmQgZm9ybS4KKyAgICAvKiBUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmaW5kIHRoZSBuZXh0IGZpbGUgaW4gZGlyZWN0b3J5IGVudW1lcmF0aW9uICovCisgICAgLyogICAgICAgc2VhcmNoIGdpdmVuIHRoZSBzZWFyY2ggY3JpdGVyaWEgZGVmaW5lZCBpbiB0aGUgY2FsbCB0byAqLworICAgIC8qICAgICAgIFBNX2ZpbmRGaXJzdEZpbGUuIFRoZSBkYXRhIHNob3VsZCBiZSBjb252ZXJ0ZWQgYW5kIHJldHVybmVkICovCisgICAgLyogICAgICAgaW4gdGhlIGZpbmREYXRhIHN0YW5kYXJkIGZvcm0uICovCiAgICAgKHZvaWQpaGFuZGxlOwogICAgICh2b2lkKWZpbmREYXRhOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTEyMDgsOCArMTIwOCw4IEBACiB2b2lkIFBNQVBJIFBNX2ZpbmRDbG9zZSgKICAgICB2b2lkICpoYW5kbGUpCiB7Ci0gICAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgY2xvc2UgdGhlIGZpbmQgcHJvY2Vzcy4gVGhpcyBtYXkgZG8KLSAgICAvLyAgICAgICBub3RoaW5nIGZvciBzb21lIE9TJ2VzLgorICAgIC8qIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNsb3NlIHRoZSBmaW5kIHByb2Nlc3MuIFRoaXMgbWF5IGRvICovCisgICAgLyogICAgICAgbm90aGluZyBmb3Igc29tZSBPUydlcy4gKi8KICAgICAodm9pZCloYW5kbGU7CiB9CiAKQEAgLTEyMjksNyArMTIyOSw3IEBACiBpYm9vbCBQTUFQSSBQTV9kcml2ZVZhbGlkKAogICAgIGNoYXIgZHJpdmUpCiB7Ci0gICAgLy8gTm90IHN1cHBvcnRlZCBpbiBhIFZ4RAorICAgIC8qIE5vdCBzdXBwb3J0ZWQgaW4gYSBWeEQgKi8KICAgICAodm9pZClkcml2ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMjQ1LDcgKzEyNDUsNyBAQAogICAgIGNoYXIgKmRpciwKICAgICBpbnQgbGVuKQogewotICAgIC8vIE5vdCBzdXBwb3J0ZWQgaW4gYSBWeEQKKyAgICAvKiBOb3Qgc3VwcG9ydGVkIGluIGEgVnhEICovCiAgICAgKHZvaWQpZHJpdmU7CiAgICAgKHZvaWQpZGlyOwogICAgICh2b2lkKWxlbjsKQEAgLTEyNzksNyArMTI3OSw3IEBACiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgdWludCBhdHRyaWIpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgICh2b2lkKWF0dHJpYjsKICAgICBQTV9mYXRhbEVycm9yKCJQTV9zZXRGaWxlQXR0ciBub3QgaW1wbGVtZW50ZWQgeWV0ISIpOwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIHVpbnQgUE1BUEkgUE1fZ2V0RmlsZUF0dHIoCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgIFBNX2ZhdGFsRXJyb3IoIlBNX2dldEZpbGVBdHRyIG5vdCBpbXBsZW1lbnRlZCB5ZXQhIik7CiAgICAgcmV0dXJuIDA7CkBAIC0xMzA1LDcgKzEzMDUsNyBAQAogaWJvb2wgUE1BUEkgUE1fbWtkaXIoCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMKKyAgICAvKiBUT0RPOiBJbXBsZW1lbnQgdGhpcyAqLwogICAgICh2b2lkKWZpbGVuYW1lOwogICAgIFBNX2ZhdGFsRXJyb3IoIlBNX21rZGlyIG5vdCBpbXBsZW1lbnRlZCB5ZXQhIik7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTMxOCw3ICsxMzE4LDcgQEAKIGlib29sIFBNQVBJIFBNX3JtZGlyKAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotICAgIC8vIFRPRE86IEltcGxlbWVudCB0aGlzCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMgKi8KICAgICAodm9pZClmaWxlbmFtZTsKICAgICBQTV9mYXRhbEVycm9yKCJQTV9ybWRpciBub3QgaW1wbGVtZW50ZWQgeWV0ISIpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTEzMzMsNyArMTMzMyw3IEBACiAgICAgaWJvb2wgZ21UaW1lLAogICAgIFBNX3RpbWUgKnRpbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgKHZvaWQpZmlsZW5hbWU7CiAgICAgKHZvaWQpZ21UaW1lOwogICAgICh2b2lkKXRpbWU7CkBAIC0xMzUwLDExICsxMzUwLDEwIEBACiAgICAgaWJvb2wgZ21UaW1lLAogICAgIFBNX3RpbWUgKnRpbWUpCiB7Ci0gICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMhCisgICAgLyogVE9ETzogSW1wbGVtZW50IHRoaXMhICovCiAgICAgKHZvaWQpZmlsZW5hbWU7CiAgICAgKHZvaWQpZ21UaW1lOwogICAgICh2b2lkKXRpbWU7CiAgICAgUE1fZmF0YWxFcnJvcigiUE1fc2V0RmlsZVRpbWUgbm90IGltcGxlbWVudGVkIHlldCEiKTsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL2NwdWluZm8uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL2NwdWluZm8uYwppbmRleCA1OTc4YjlmLi43ZGE5NzUyIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS93aW4zMi9jcHVpbmZvLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvY3B1aW5mby5jCkBAIC00Niw3ICs0Niw3IEBACiAKICAgICBvbGRQcmlvcml0eSA9IEdldFRocmVhZFByaW9yaXR5KGhUaHJlYWQpOwogICAgIGlmIChvbGRQcmlvcml0eSAhPSBUSFJFQURfUFJJT1JJVFlfRVJST1JfUkVUVVJOKQotICAgICAgICBTZXRUaHJlYWRQcmlvcml0eShoVGhyZWFkLCBUSFJFQURfUFJJT1JJVFlfVElNRV9DUklUSUNBTCk7CisJU2V0VGhyZWFkUHJpb3JpdHkoaFRocmVhZCwgVEhSRUFEX1BSSU9SSVRZX1RJTUVfQ1JJVElDQUwpOwogICAgIHJldHVybiBvbGRQcmlvcml0eTsKIH0KIApAQCAtNjAsNyArNjAsNyBAQAogICAgIEhBTkRMRSAgaFRocmVhZCA9IEdldEN1cnJlbnRUaHJlYWQoKTsKIAogICAgIGlmIChvbGRQcmlvcml0eSAhPSBUSFJFQURfUFJJT1JJVFlfRVJST1JfUkVUVVJOKQotICAgICAgICBTZXRUaHJlYWRQcmlvcml0eShoVGhyZWFkLCBvbGRQcmlvcml0eSk7CisJU2V0VGhyZWFkUHJpb3JpdHkoaFRocmVhZCwgb2xkUHJpb3JpdHkpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzEsMTIgKzcxLDEyIEBACiAgICAgQ1BVX2xhcmdlSW50ZWdlciAqZnJlcSkKIHsKICAgICBpZiAoIVF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koKExBUkdFX0lOVEVHRVIqKWZyZXEpKSB7Ci0gICAgICAgIGhhdmVQZXJmb3JtYW5jZUNvdW50ZXIgPSBmYWxzZTsKLSAgICAgICAgZnJlcS0+bG93ID0gMTAwMDAwOwotICAgICAgICBmcmVxLT5oaWdoID0gMDsKLSAgICAgICAgfQorCWhhdmVQZXJmb3JtYW5jZUNvdW50ZXIgPSBmYWxzZTsKKwlmcmVxLT5sb3cgPSAxMDAwMDA7CisJZnJlcS0+aGlnaCA9IDA7CisJfQogICAgIGVsc2UKLSAgICAgICAgaGF2ZVBlcmZvcm1hbmNlQ291bnRlciA9IHRydWU7CisJaGF2ZVBlcmZvcm1hbmNlQ291bnRlciA9IHRydWU7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04Niw5ICs4Niw5IEBACiAjZGVmaW5lIEdldENvdW50ZXIodCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKGhhdmVQZXJmb3JtYW5jZUNvdW50ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKChMQVJHRV9JTlRFR0VSKil0KTsgICAgICAgICBcCisJUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoKExBUkdFX0lOVEVHRVIqKXQpOyAgICAgICAgIFwKICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHQpLT5sb3cgPSB0aW1lR2V0VGltZSgpICogMTAwOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHQpLT5oaWdoID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkodCktPmxvdyA9IHRpbWVHZXRUaW1lKCkgKiAxMDA7ICAgICAgICAgICAgICAgICAgICAgXAorCSh0KS0+aGlnaCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL2RkcmF3LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS93aW4zMi9kZHJhdy5jCmluZGV4IGNmODk0MDEuLmQ2YzNmNjAgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL2RkcmF3LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvZGRyYXcuYwpAQCAtODUsMTEgKzg1LDExIEBACiAgICAgSEtFWSAgICBoS2V5OwogCiAgICAgaWYgKFJlZ09wZW5LZXlFeChIS0VZX0NVUlJFTlRfVVNFUixzekF1dG9QbGF5S2V5LDAsS0VZX0VYRUNVVEUgfCBLRVlfV1JJVEUsJmhLZXkpID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgUmVnUXVlcnlWYWx1ZUV4KGhLZXksc3pBdXRvUGxheVZhbHVlLE5VTEwsTlVMTCwodm9pZCopJmR3QXV0b1BsYXksJmR3U2l6ZSk7Ci0gICAgICAgIGR3QXV0b1BsYXkgfD0gQVVUT1BMQVlfRFJJVkVfQ0RST007Ci0gICAgICAgIFJlZ1NldFZhbHVlRXgoaEtleSxzekF1dG9QbGF5VmFsdWUsMCxSRUdfRFdPUkQsKHZvaWQqKSZkd0F1dG9QbGF5LGR3U2l6ZSk7Ci0gICAgICAgIFJlZ0Nsb3NlS2V5KGhLZXkpOwotICAgICAgICB9CisJUmVnUXVlcnlWYWx1ZUV4KGhLZXksc3pBdXRvUGxheVZhbHVlLE5VTEwsTlVMTCwodm9pZCopJmR3QXV0b1BsYXksJmR3U2l6ZSk7CisJZHdBdXRvUGxheSB8PSBBVVRPUExBWV9EUklWRV9DRFJPTTsKKwlSZWdTZXRWYWx1ZUV4KGhLZXksc3pBdXRvUGxheVZhbHVlLDAsUkVHX0RXT1JELCh2b2lkKikmZHdBdXRvUGxheSxkd1NpemUpOworCVJlZ0Nsb3NlS2V5KGhLZXkpOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEwMiwxMSArMTAyLDExIEBACiAgICAgSEtFWSAgICBoS2V5OwogCiAgICAgaWYgKFJlZ09wZW5LZXlFeChIS0VZX0NVUlJFTlRfVVNFUixzekF1dG9QbGF5S2V5LDAsS0VZX0VYRUNVVEUgfCBLRVlfV1JJVEUsJmhLZXkpID09IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgUmVnUXVlcnlWYWx1ZUV4KGhLZXksc3pBdXRvUGxheVZhbHVlLE5VTEwsTlVMTCwodm9pZCopJmR3QXV0b1BsYXksJmR3U2l6ZSk7Ci0gICAgICAgIGR3QXV0b1BsYXkgJj0gfkFVVE9QTEFZX0RSSVZFX0NEUk9NOwotICAgICAgICBSZWdTZXRWYWx1ZUV4KGhLZXksc3pBdXRvUGxheVZhbHVlLDAsUkVHX0RXT1JELCh2b2lkKikmZHdBdXRvUGxheSxkd1NpemUpOwotICAgICAgICBSZWdDbG9zZUtleShoS2V5KTsKLSAgICAgICAgfQorCVJlZ1F1ZXJ5VmFsdWVFeChoS2V5LHN6QXV0b1BsYXlWYWx1ZSxOVUxMLE5VTEwsKHZvaWQqKSZkd0F1dG9QbGF5LCZkd1NpemUpOworCWR3QXV0b1BsYXkgJj0gfkFVVE9QTEFZX0RSSVZFX0NEUk9NOworCVJlZ1NldFZhbHVlRXgoaEtleSxzekF1dG9QbGF5VmFsdWUsMCxSRUdfRFdPUkQsKHZvaWQqKSZkd0F1dG9QbGF5LGR3U2l6ZSk7CisJUmVnQ2xvc2VLZXkoaEtleSk7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTIxLDIwICsxMjEsMjAgQEAKICAgICBpbnQgcmV0Q29kZSA9IFBNX1NVU1BFTkRfQVBQOwogCiAgICAgaWYgKGJhY2tJbkdESSkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICBpZiAoc3VzcGVuZEFwcCkKLSAgICAgICAgcmV0Q29kZSA9IHN1c3BlbmRBcHAoUE1fREVBQ1RJVkFURSk7CisJcmV0Q29kZSA9IHN1c3BlbmRBcHAoUE1fREVBQ1RJVkFURSk7CiAgICAgUmVzdG9yZUF1dG9QbGF5KCk7CiAgICAgYmFja0luR0RJID0gdHJ1ZTsKIAogICAgIC8qIE5vdyBwcm9jZXNzIG1lc3NhZ2VzIG5vcm1hbGx5IHVudGlsIHdlIGFyZSByZS1hY3RpdmF0ZWQgKi8KICAgICB3YWl0QWN0aXZlID0gdHJ1ZTsKICAgICBpZiAocmV0Q29kZSAhPSBQTV9OT19TVVNQRU5EX0FQUCkgewotICAgICAgICB3aGlsZSAod2FpdEFjdGl2ZSkgewotICAgICAgICAgICAgX0VWVF9wdW1wTWVzc2FnZXMoKTsKLSAgICAgICAgICAgIFNsZWVwKDIwMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwl3aGlsZSAod2FpdEFjdGl2ZSkgeworCSAgICBfRVZUX3B1bXBNZXNzYWdlcygpOworCSAgICBTbGVlcCgyMDApOworCSAgICB9CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTQ3LDI3ICsxNDcsMjcgQEAKICAgICBzdGF0aWMgaWJvb2wgICAgZmlyc3RUaW1lID0gdHJ1ZTsKIAogICAgIGlmIChmaXJzdFRpbWUpIHsKLSAgICAgICAgLyogQ2xlYXIgdGhlIG1lc3NhZ2UgcXVldWUgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHN1cmZhY2VzIHRvIGJlCi0gICAgICAgICAqIHJlc3RvcmVkLgotICAgICAgICAgKi8KLSAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlICgxKSB7Ci0gICAgICAgICAgICAvKiBDb250aW51ZSBsb29waW5nIHVudGlsIG91dCBhcHBsaWNhdGlvbiBoYXMgYmVlbiByZXN0b3JlZAotICAgICAgICAgICAgICogYW5kIHdlIGhhdmUgcmVzZXQgdGhlIGRpc3BsYXkgbW9kZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgX0VWVF9wdW1wTWVzc2FnZXMoKTsKLSAgICAgICAgICAgIGlmIChHZXRBY3RpdmVXaW5kb3coKSA9PSBfUE1faHduZENvbnNvbGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc3VzcGVuZEFwcCkKLSAgICAgICAgICAgICAgICAgICAgc3VzcGVuZEFwcChQTV9SRUFDVElWQVRFKTsKLSAgICAgICAgICAgICAgICBEaXNhYmxlQXV0b1BsYXkoKTsKLSAgICAgICAgICAgICAgICBiYWNrSW5HREkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB3YWl0QWN0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgU2xlZXAoMjAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCS8qIENsZWFyIHRoZSBtZXNzYWdlIHF1ZXVlIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBzdXJmYWNlcyB0byBiZQorCSAqIHJlc3RvcmVkLgorCSAqLworCWZpcnN0VGltZSA9IGZhbHNlOworCXdoaWxlICgxKSB7CisJICAgIC8qIENvbnRpbnVlIGxvb3BpbmcgdW50aWwgb3V0IGFwcGxpY2F0aW9uIGhhcyBiZWVuIHJlc3RvcmVkCisJICAgICAqIGFuZCB3ZSBoYXZlIHJlc2V0IHRoZSBkaXNwbGF5IG1vZGUuCisJICAgICAqLworCSAgICBfRVZUX3B1bXBNZXNzYWdlcygpOworCSAgICBpZiAoR2V0QWN0aXZlV2luZG93KCkgPT0gX1BNX2h3bmRDb25zb2xlKSB7CisJCWlmIChzdXNwZW5kQXBwKQorCQkgICAgc3VzcGVuZEFwcChQTV9SRUFDVElWQVRFKTsKKwkJRGlzYWJsZUF1dG9QbGF5KCk7CisJCWJhY2tJbkdESSA9IGZhbHNlOworCQl3YWl0QWN0aXZlID0gZmFsc2U7CisJCWZpcnN0VGltZSA9IHRydWU7CisJCXJldHVybjsKKwkJfQorCSAgICBTbGVlcCgyMDApOworCSAgICB9CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTkyLDE3ICsxOTIsMTcgQEAKIAogICAgIC8qIENhbGwgc3lzdGVtIERMTCB2ZXJzaW9uIGlmIGZvdW5kICovCiAgICAgaWYgKF9QTV9pbXBvcnRzLlBNX2RvU3VzcGVuZEFwcCAhPSBQTV9kb1N1c3BlbmRBcHApIHsKLSAgICAgICAgX1BNX2ltcG9ydHMuUE1fZG9TdXNwZW5kQXBwKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCV9QTV9pbXBvcnRzLlBNX2RvU3VzcGVuZEFwcCgpOworCXJldHVybjsKKwl9CiAKICAgICBpZiAoZmlyc3RUaW1lKSB7Ci0gICAgICAgIGlmIChzdXNwZW5kQXBwKQotICAgICAgICAgICAgc3VzcGVuZEFwcChQTV9ERUFDVElWQVRFKTsKLSAgICAgICAgUmVzdG9yZUF1dG9QbGF5KCk7Ci0gICAgICAgIGZpcnN0VGltZSA9IGZhbHNlOwotICAgICAgICBiYWNrSW5HREkgPSB0cnVlOwotICAgICAgICB9CisJaWYgKHN1c3BlbmRBcHApCisJICAgIHN1c3BlbmRBcHAoUE1fREVBQ1RJVkFURSk7CisJUmVzdG9yZUF1dG9QbGF5KCk7CisJZmlyc3RUaW1lID0gZmFsc2U7CisJYmFja0luR0RJID0gdHJ1ZTsKKwl9CiAgICAgUmVzdG9yZUZ1bGxTY3JlZW4oKTsKICAgICBmaXJzdFRpbWUgPSB0cnVlOwogfQpAQCAtMjIwLDYwICsyMjAsNjAgQEAKICAgICBMT05HIGxQYXJhbSkKIHsKICAgICBzd2l0Y2ggKG1zZykgewotICAgICAgICBjYXNlIFdNX1NZU0NIQVI6Ci0gICAgICAgICAgICAvKiBTdG9wIEFsdC1TcGFjZSBmcm9tIHBhdXNpbmcgb3VyIGFwcGxpY2F0aW9uICovCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBXTV9LRVlET1dOOgotICAgICAgICBjYXNlIFdNX1NZU0tFWURPV046Ci0gICAgICAgICAgICBpZiAoSElXT1JEKGxQYXJhbSkgJiBLRl9SRVBFQVQpIHsKLSAgICAgICAgICAgICAgICBpZiAobXNnID09IFdNX1NZU0tFWURPV04pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCBmb3Iga2V5ZG93biBldmVudHMgKi8KLSAgICAgICAgY2FzZSBXTV9LRVlVUDoKLSAgICAgICAgY2FzZSBXTV9TWVNLRVlVUDoKLSAgICAgICAgICAgIGlmIChtc2cgPT0gV01fU1lTS0VZRE9XTiB8fCBtc2cgPT0gV01fU1lTS0VZVVApIHsKLSAgICAgICAgICAgICAgICBpZiAoKEhJV09SRChsUGFyYW0pICYgS0ZfQUxURE9XTikgJiYgd1BhcmFtID09IFZLX1JFVFVSTikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLyogV2UgaWdub3JlIHRoZSByZW1haW5kZXIgb2YgdGhlIHN5c3RlbSBrZXlzIHRvIHN0b3AgdGhlCi0gICAgICAgICAgICAgICAgICogc3lzdGVtIG1lbnUgZnJvbSBiZWluZyBhY3RpdmF0ZWQgZnJvbSB0aGUga2V5Ym9hcmQgYW5kIHBhdXNpbmcKLSAgICAgICAgICAgICAgICAgKiBvdXIgYXBwIHdoaWxlIGZ1bGxzY3JlZW4gKGllOiBwcmVzc2luZyB0aGUgQWx0IGtleSkuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV01fU1lTQ09NTUFORDoKLSAgICAgICAgICAgIHN3aXRjaCAod1BhcmFtICYgfjB4MEYpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNDX1NDUkVFTlNBVkU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTQ19NT05JVE9SUE9XRVI6Ci0gICAgICAgICAgICAgICAgICAgIC8qIElnbm9yZSBzY3JlZW5zYXZlciByZXF1ZXN0cyBpbiBmdWxsc2NyZWVuIG1vZGVzICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX1NJWkU6Ci0gICAgICAgICAgICBpZiAod2FpdEFjdGl2ZSAmJiBiYWNrSW5HREkgJiYgKHdQYXJhbSAhPSBTSVpFX01JTklNSVpFRCkpIHsKLSAgICAgICAgICAgICAgICAvKiBTdGFydCB0aGUgcmUtYWN0aXZhdGlvbiBwcm9jZXNzICovCi0gICAgICAgICAgICAgICAgUG9zdE1lc3NhZ2UoaHduZCxXTV9ET19TVVNQRU5EX0FQUCxXTV9QTV9SRVNUT1JFX0ZVTExTQ1JFRU4sMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIXdhaXRBY3RpdmUgJiYgaXNGdWxsU2NyZWVuICYmICFiYWNrSW5HREkgJiYgKHdQYXJhbSA9PSBTSVpFX01JTklNSVpFRCkpIHsKLSAgICAgICAgICAgICAgICAvKiBTdGFydCB0aGUgZGUtYWN0aXZhdGlvbiBwcm9jZXNzICovCi0gICAgICAgICAgICAgICAgUG9zdE1lc3NhZ2UoaHduZCxXTV9ET19TVVNQRU5EX0FQUCxXTV9QTV9MRUFWRV9GVUxMU0NSRUVOLDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdNX0RPX1NVU1BFTkRfQVBQOgotICAgICAgICAgICAgc3dpdGNoICh3UGFyYW0pIHsKKwljYXNlIFdNX1NZU0NIQVI6CisJICAgIC8qIFN0b3AgQWx0LVNwYWNlIGZyb20gcGF1c2luZyBvdXIgYXBwbGljYXRpb24gKi8KKwkgICAgcmV0dXJuIDA7CisJY2FzZSBXTV9LRVlET1dOOgorCWNhc2UgV01fU1lTS0VZRE9XTjoKKwkgICAgaWYgKEhJV09SRChsUGFyYW0pICYgS0ZfUkVQRUFUKSB7CisJCWlmIChtc2cgPT0gV01fU1lTS0VZRE9XTikKKwkJICAgIHJldHVybiAwOworCQlicmVhazsKKwkJfQorCSAgICAvKiBGYWxsIHRocm91Z2ggZm9yIGtleWRvd24gZXZlbnRzICovCisJY2FzZSBXTV9LRVlVUDoKKwljYXNlIFdNX1NZU0tFWVVQOgorCSAgICBpZiAobXNnID09IFdNX1NZU0tFWURPV04gfHwgbXNnID09IFdNX1NZU0tFWVVQKSB7CisJCWlmICgoSElXT1JEKGxQYXJhbSkgJiBLRl9BTFRET1dOKSAmJiB3UGFyYW0gPT0gVktfUkVUVVJOKQorCQkgICAgYnJlYWs7CisJCS8qIFdlIGlnbm9yZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBzeXN0ZW0ga2V5cyB0byBzdG9wIHRoZQorCQkgKiBzeXN0ZW0gbWVudSBmcm9tIGJlaW5nIGFjdGl2YXRlZCBmcm9tIHRoZSBrZXlib2FyZCBhbmQgcGF1c2luZworCQkgKiBvdXIgYXBwIHdoaWxlIGZ1bGxzY3JlZW4gKGllOiBwcmVzc2luZyB0aGUgQWx0IGtleSkuCisJCSAqLworCQlyZXR1cm4gMDsKKwkJfQorCSAgICBicmVhazsKKwljYXNlIFdNX1NZU0NPTU1BTkQ6CisJICAgIHN3aXRjaCAod1BhcmFtICYgfjB4MEYpIHsKKwkJY2FzZSBTQ19TQ1JFRU5TQVZFOgorCQljYXNlIFNDX01PTklUT1JQT1dFUjoKKwkJICAgIC8qIElnbm9yZSBzY3JlZW5zYXZlciByZXF1ZXN0cyBpbiBmdWxsc2NyZWVuIG1vZGVzICovCisJCSAgICByZXR1cm4gMDsKKwkJfQorCSAgICBicmVhazsKKwljYXNlIFdNX1NJWkU6CisJICAgIGlmICh3YWl0QWN0aXZlICYmIGJhY2tJbkdESSAmJiAod1BhcmFtICE9IFNJWkVfTUlOSU1JWkVEKSkgeworCQkvKiBTdGFydCB0aGUgcmUtYWN0aXZhdGlvbiBwcm9jZXNzICovCisJCVBvc3RNZXNzYWdlKGh3bmQsV01fRE9fU1VTUEVORF9BUFAsV01fUE1fUkVTVE9SRV9GVUxMU0NSRUVOLDApOworCQl9CisJICAgIGVsc2UgaWYgKCF3YWl0QWN0aXZlICYmIGlzRnVsbFNjcmVlbiAmJiAhYmFja0luR0RJICYmICh3UGFyYW0gPT0gU0laRV9NSU5JTUlaRUQpKSB7CisJCS8qIFN0YXJ0IHRoZSBkZS1hY3RpdmF0aW9uIHByb2Nlc3MgKi8KKwkJUG9zdE1lc3NhZ2UoaHduZCxXTV9ET19TVVNQRU5EX0FQUCxXTV9QTV9MRUFWRV9GVUxMU0NSRUVOLDApOworCQl9CisJICAgIGJyZWFrOworCWNhc2UgV01fRE9fU1VTUEVORF9BUFA6CisJICAgIHN3aXRjaCAod1BhcmFtKSB7CiAJCQkJY2FzZSBXTV9QTV9SRVNUT1JFX0ZVTExTQ1JFRU46CiAJCQkJCVJlc3RvcmVGdWxsU2NyZWVuKCk7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgV01fUE1fTEVBVkVfRlVMTFNDUkVFTjoKIAkJCQkJTGVhdmVGdWxsU2NyZWVuKCk7CiAJCQkJCWJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisJCX0KKwkgICAgcmV0dXJuIDA7CisJfQogICAgIGlmIChvbGRXaW5Qcm9jKQotICAgICAgICByZXR1cm4gb2xkV2luUHJvYyhod25kLG1zZyx3UGFyYW0sbFBhcmFtKTsKKwlyZXR1cm4gb2xkV2luUHJvYyhod25kLG1zZyx3UGFyYW0sbFBhcmFtKTsKICAgICByZXR1cm4gRGVmV2luZG93UHJvYyhod25kLG1zZyx3UGFyYW0sbFBhcmFtKTsKIH0KIApAQCAtMzQ5LDMyICszNDksMzIgQEAKIAogICAgIC8qIENhbGwgc3lzdGVtIERMTCB2ZXJzaW9uIGlmIGZvdW5kICovCiAgICAgaWYgKF9QTV9pbXBvcnRzLlBNX2xvYWREaXJlY3REcmF3ICE9IFBNX2xvYWREaXJlY3REcmF3KQotICAgICAgICByZXR1cm4gX1BNX2ltcG9ydHMuUE1fbG9hZERpcmVjdERyYXcoZGV2aWNlKTsKKwlyZXR1cm4gX1BNX2ltcG9ydHMuUE1fbG9hZERpcmVjdERyYXcoZGV2aWNlKTsKIAotICAgIC8vIFRPRE86IEhhbmRsZSBtdWx0aS1tb25pdG9yISEKKyAgICAvKiBUT0RPOiBIYW5kbGUgbXVsdGktbW9uaXRvciEhICovCiAgICAgaWYgKGRldmljZSAhPSAwKQotICAgICAgICByZXR1cm4gTlVMTDsKKwlyZXR1cm4gTlVMTDsKIAogICAgIC8qIExvYWQgdGhlIERpcmVjdERyYXcgRExMIGlmIG5vdCBwcmVzZW50bHkgbG9hZGVkICovCiAgICAgR0VUX0RFRkFVTFRfQ1coKTsKICAgICBpZiAoIWhJbnN0REQpIHsKLSAgICAgICAgaGRjID0gR2V0REMoTlVMTCk7Ci0gICAgICAgIGJpdHMgPSBHZXREZXZpY2VDYXBzKGhkYyxCSVRTUElYRUwpOwotICAgICAgICBSZWxlYXNlREMoTlVMTCxoZGMpOwotICAgICAgICBpZiAoYml0cyA8IDgpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKChoSW5zdEREID0gTG9hZExpYnJhcnkoImRkcmF3LmRsbCIpKSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHBEaXJlY3REcmF3Q3JlYXRlID0gKHZvaWQqKUdldFByb2NBZGRyZXNzKGhJbnN0REQsIkRpcmVjdERyYXdDcmVhdGUiKTsKLSAgICAgICAgaWYgKCFwRGlyZWN0RHJhd0NyZWF0ZSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisJaGRjID0gR2V0REMoTlVMTCk7CisJYml0cyA9IEdldERldmljZUNhcHMoaGRjLEJJVFNQSVhFTCk7CisJUmVsZWFzZURDKE5VTEwsaGRjKTsKKwlpZiAoYml0cyA8IDgpCisJICAgIHJldHVybiBOVUxMOworCWlmICgoaEluc3RERCA9IExvYWRMaWJyYXJ5KCJkZHJhdy5kbGwiKSkgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisJcERpcmVjdERyYXdDcmVhdGUgPSAodm9pZCopR2V0UHJvY0FkZHJlc3MoaEluc3RERCwiRGlyZWN0RHJhd0NyZWF0ZSIpOworCWlmICghcERpcmVjdERyYXdDcmVhdGUpCisJICAgIHJldHVybiBOVUxMOworCX0KIAogICAgIC8qIENyZWF0ZSB0aGUgRGlyZWN0RHJhdyBvYmplY3QgKi8KICAgICBpZiAoIWxwREQgJiYgcERpcmVjdERyYXdDcmVhdGUoTlVMTCwgJmxwREQsIE5VTEwpICE9IEREX09LKSB7Ci0gICAgICAgIGxwREQgPSBOVUxMOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorCWxwREQgPSBOVUxMOworCXJldHVybiBOVUxMOworCX0KICAgICBSRVNFVF9ERUZBVUxUX0NXKCk7CiAgICAgcmV0dXJuIGxwREQ7CiB9CkBAIC0zOTQsMTMgKzM5NCwxMyBAQAogewogICAgIC8qIENhbGwgc3lzdGVtIERMTCB2ZXJzaW9uIGlmIGZvdW5kICovCiAgICAgaWYgKF9QTV9pbXBvcnRzLlBNX3VubG9hZERpcmVjdERyYXcgIT0gUE1fdW5sb2FkRGlyZWN0RHJhdykgewotICAgICAgICBfUE1faW1wb3J0cy5QTV91bmxvYWREaXJlY3REcmF3KGRldmljZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCV9QTV9pbXBvcnRzLlBNX3VubG9hZERpcmVjdERyYXcoZGV2aWNlKTsKKwlyZXR1cm47CisJfQogICAgIGlmIChscEREKSB7Ci0gICAgICAgIElEaXJlY3REcmF3X1JlbGVhc2UobHBERCk7Ci0gICAgICAgIGxwREQgPSBOVUxMOwotICAgICAgICB9CisJSURpcmVjdERyYXdfUmVsZWFzZShscEREKTsKKwlscEREID0gTlVMTDsKKwl9CiAgICAgKHZvaWQpZGV2aWNlOwogfQogCkBAIC00MjMsNTYgKzQyMyw1NiBAQAogICAgIC8qIENhbGwgc3lzdGVtIERMTCB2ZXJzaW9uIGlmIGZvdW5kICovCiAgICAgR0FfZ2V0U3lzdGVtUE1JbXBvcnRzKCk7CiAgICAgaWYgKF9QTV9pbXBvcnRzLlBNX29wZW5Db25zb2xlICE9IFBNX29wZW5Db25zb2xlKSB7Ci0gICAgICAgIGlmIChmdWxsU2NyZWVuKSB7Ci0gICAgICAgICAgICBfUE1fZGVza1ggPSB4UmVzOwotICAgICAgICAgICAgX1BNX2Rlc2tZID0geVJlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIF9QTV9pbXBvcnRzLlBNX29wZW5Db25zb2xlKGhXbmRVc2VyLGRldmljZSx4UmVzLHlSZXMsYnBwLGZ1bGxTY3JlZW4pOwotICAgICAgICB9CisJaWYgKGZ1bGxTY3JlZW4pIHsKKwkgICAgX1BNX2Rlc2tYID0geFJlczsKKwkgICAgX1BNX2Rlc2tZID0geVJlczsKKwkgICAgfQorCXJldHVybiBfUE1faW1wb3J0cy5QTV9vcGVuQ29uc29sZShoV25kVXNlcixkZXZpY2UseFJlcyx5UmVzLGJwcCxmdWxsU2NyZWVuKTsKKwl9CiAKICAgICAvKiBDcmVhdGUgdGhlIGZ1bGxzY3JlZW4gd2luZG93IGlmIG5lY2Vzc2FyeSAqLwogICAgIGh3bmRVc2VyID0gaFduZFVzZXI7CiAgICAgaWYgKGZ1bGxTY3JlZW4pIHsKLSAgICAgICAgaWYgKCFjbGFzc1JlZ2lzdGVyZWQpIHsKLSAgICAgICAgICAgIC8qIENyZWF0ZSBhIFdpbmRvdyBjbGFzcyBmb3IgdGhlIGZ1bGxzY3JlZW4gd2luZG93IGluIGhlcmUsIHNpbmNlCi0gICAgICAgICAgICAgKiB3ZSBuZWVkIHRvIHJlZ2lzdGVyIG9uZSB0aGF0IHdpbGwgZG8gYWxsIG91ciBldmVudCBoYW5kbGluZyBmb3IKLSAgICAgICAgICAgICAqIHVzLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBoSW5zdEFwcCAgICAgICAgICAgID0gR2V0TW9kdWxlSGFuZGxlKE5VTEwpOwotICAgICAgICAgICAgY2xzLmhDdXJzb3IgICAgICAgICA9IExvYWRDdXJzb3IoTlVMTCxJRENfQVJST1cpOwotICAgICAgICAgICAgY2xzLmhJY29uICAgICAgICAgICA9IExvYWRJY29uKGhJbnN0QXBwLE1BS0VJTlRSRVNPVVJDRSgxKSk7Ci0gICAgICAgICAgICBjbHMubHBzek1lbnVOYW1lICAgID0gTlVMTDsKLSAgICAgICAgICAgIGNscy5scHN6Q2xhc3NOYW1lICAgPSBzeldpbkNsYXNzTmFtZTsKLSAgICAgICAgICAgIGNscy5oYnJCYWNrZ3JvdW5kICAgPSBHZXRTdG9ja09iamVjdChCTEFDS19CUlVTSCk7Ci0gICAgICAgICAgICBjbHMuaEluc3RhbmNlICAgICAgID0gaEluc3RBcHA7Ci0gICAgICAgICAgICBjbHMuc3R5bGUgICAgICAgICAgID0gQ1NfREJMQ0xLUzsKLSAgICAgICAgICAgIGNscy5scGZuV25kUHJvYyAgICAgPSBQTV93aW5Qcm9jOwotICAgICAgICAgICAgY2xzLmNiV25kRXh0cmEgICAgICA9IDA7Ci0gICAgICAgICAgICBjbHMuY2JDbHNFeHRyYSAgICAgID0gMDsKLSAgICAgICAgICAgIGlmICghUmVnaXN0ZXJDbGFzcygmY2xzKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGNsYXNzUmVnaXN0ZXJlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIF9QTV9kZXNrWCA9IHhSZXM7Ci0gICAgICAgIF9QTV9kZXNrWSA9IHlSZXM7Ci0gICAgICAgIGlmICghaHduZFVzZXIpIHsKLSAgICAgICAgICAgIGNoYXIgd2luZG93VGl0bGVbODBdOwotICAgICAgICAgICAgaWYgKExvYWRTdHJpbmcoaEluc3RBcHAsMSx3aW5kb3dUaXRsZSxzaXplb2Yod2luZG93VGl0bGUpKSA9PSAwKQotICAgICAgICAgICAgICAgIHN0cmNweSh3aW5kb3dUaXRsZSwiTUdMIEZ1bGxzY3JlZW4gQXBwbGljYXRpb24iKTsKLSAgICAgICAgICAgIF9QTV9od25kQ29uc29sZSA9IENyZWF0ZVdpbmRvd0V4KFdTX0VYX0FQUFdJTkRPVyxzeldpbkNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICB3aW5kb3dUaXRsZSxXU19QT1BVUCB8IFdTX1NZU01FTlUsMCwwLHhSZXMseVJlcywKLSAgICAgICAgICAgICAgICBOVUxMLE5VTEwsaEluc3RBcHAsTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgX1BNX2h3bmRDb25zb2xlID0gX1BNX2NvbnZlcnRVc2VyV2luZG93KGh3bmRVc2VyLHhSZXMseVJlcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIFNob3dDdXJzb3IoZmFsc2UpOwotICAgICAgICBpc0Z1bGxTY3JlZW4gPSB0cnVlOwotICAgICAgICB9CisJaWYgKCFjbGFzc1JlZ2lzdGVyZWQpIHsKKwkgICAgLyogQ3JlYXRlIGEgV2luZG93IGNsYXNzIGZvciB0aGUgZnVsbHNjcmVlbiB3aW5kb3cgaW4gaGVyZSwgc2luY2UKKwkgICAgICogd2UgbmVlZCB0byByZWdpc3RlciBvbmUgdGhhdCB3aWxsIGRvIGFsbCBvdXIgZXZlbnQgaGFuZGxpbmcgZm9yCisJICAgICAqIHVzLgorCSAgICAgKi8KKwkgICAgaEluc3RBcHAgICAgICAgICAgICA9IEdldE1vZHVsZUhhbmRsZShOVUxMKTsKKwkgICAgY2xzLmhDdXJzb3IgICAgICAgICA9IExvYWRDdXJzb3IoTlVMTCxJRENfQVJST1cpOworCSAgICBjbHMuaEljb24gICAgICAgICAgID0gTG9hZEljb24oaEluc3RBcHAsTUFLRUlOVFJFU09VUkNFKDEpKTsKKwkgICAgY2xzLmxwc3pNZW51TmFtZSAgICA9IE5VTEw7CisJICAgIGNscy5scHN6Q2xhc3NOYW1lICAgPSBzeldpbkNsYXNzTmFtZTsKKwkgICAgY2xzLmhickJhY2tncm91bmQgICA9IEdldFN0b2NrT2JqZWN0KEJMQUNLX0JSVVNIKTsKKwkgICAgY2xzLmhJbnN0YW5jZSAgICAgICA9IGhJbnN0QXBwOworCSAgICBjbHMuc3R5bGUgICAgICAgICAgID0gQ1NfREJMQ0xLUzsKKwkgICAgY2xzLmxwZm5XbmRQcm9jICAgICA9IFBNX3dpblByb2M7CisJICAgIGNscy5jYlduZEV4dHJhICAgICAgPSAwOworCSAgICBjbHMuY2JDbHNFeHRyYSAgICAgID0gMDsKKwkgICAgaWYgKCFSZWdpc3RlckNsYXNzKCZjbHMpKQorCQlyZXR1cm4gTlVMTDsKKwkgICAgY2xhc3NSZWdpc3RlcmVkID0gdHJ1ZTsKKwkgICAgfQorCV9QTV9kZXNrWCA9IHhSZXM7CisJX1BNX2Rlc2tZID0geVJlczsKKwlpZiAoIWh3bmRVc2VyKSB7CisJICAgIGNoYXIgd2luZG93VGl0bGVbODBdOworCSAgICBpZiAoTG9hZFN0cmluZyhoSW5zdEFwcCwxLHdpbmRvd1RpdGxlLHNpemVvZih3aW5kb3dUaXRsZSkpID09IDApCisJCXN0cmNweSh3aW5kb3dUaXRsZSwiTUdMIEZ1bGxzY3JlZW4gQXBwbGljYXRpb24iKTsKKwkgICAgX1BNX2h3bmRDb25zb2xlID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfQVBQV0lORE9XLHN6V2luQ2xhc3NOYW1lLAorCQl3aW5kb3dUaXRsZSxXU19QT1BVUCB8IFdTX1NZU01FTlUsMCwwLHhSZXMseVJlcywKKwkJTlVMTCxOVUxMLGhJbnN0QXBwLE5VTEwpOworCSAgICB9CisJZWxzZSB7CisJICAgIF9QTV9od25kQ29uc29sZSA9IF9QTV9jb252ZXJ0VXNlcldpbmRvdyhod25kVXNlcix4UmVzLHlSZXMpOworCSAgICB9CisJU2hvd0N1cnNvcihmYWxzZSk7CisJaXNGdWxsU2NyZWVuID0gdHJ1ZTsKKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIF9QTV9od25kQ29uc29sZSA9IGh3bmRVc2VyOwotICAgICAgICBpc0Z1bGxTY3JlZW4gPSBmYWxzZTsKLSAgICAgICAgfQorCV9QTV9od25kQ29uc29sZSA9IGh3bmRVc2VyOworCWlzRnVsbFNjcmVlbiA9IGZhbHNlOworCX0KICAgICBTZXRGb2N1cyhfUE1faHduZENvbnNvbGUpOwogICAgIFNldEZvcmVncm91bmRXaW5kb3coX1BNX2h3bmRDb25zb2xlKTsKICAgICBEaXNhYmxlQXV0b1BsYXkoKTsKQEAgLTQ4OCw3ICs0ODgsNyBAQAogewogICAgIC8qIENhbGwgc3lzdGVtIERMTCB2ZXJzaW9uIGlmIGZvdW5kICovCiAgICAgaWYgKF9QTV9pbXBvcnRzLlBNX2dldENvbnNvbGVTdGF0ZVNpemUgIT0gUE1fZ2V0Q29uc29sZVN0YXRlU2l6ZSkKLSAgICAgICAgcmV0dXJuIF9QTV9pbXBvcnRzLlBNX2dldENvbnNvbGVTdGF0ZVNpemUoKTsKKwlyZXR1cm4gX1BNX2ltcG9ydHMuUE1fZ2V0Q29uc29sZVN0YXRlU2l6ZSgpOwogCiAgICAgLyogTm90IHVzZWQgaW4gV2luZG93cyAqLwogICAgIHJldHVybiAxOwpAQCAtNTA0LDkgKzUwNCw5IEBACiB7CiAgICAgLyogQ2FsbCBzeXN0ZW0gRExMIHZlcnNpb24gaWYgZm91bmQgKi8KICAgICBpZiAoX1BNX2ltcG9ydHMuUE1fc2F2ZUNvbnNvbGVTdGF0ZSAhPSBQTV9zYXZlQ29uc29sZVN0YXRlKSB7Ci0gICAgICAgIF9QTV9pbXBvcnRzLlBNX3NhdmVDb25zb2xlU3RhdGUoc3RhdGVCdWYsaHduZENvbnNvbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwlfUE1faW1wb3J0cy5QTV9zYXZlQ29uc29sZVN0YXRlKHN0YXRlQnVmLGh3bmRDb25zb2xlKTsKKwlyZXR1cm47CisJfQogCiAgICAgLyogTm90IHVzZWQgaW4gV2luZG93cyAqLwogICAgICh2b2lkKXN0YXRlQnVmOwpAQCAtNTIyLDkgKzUyMiw5IEBACiB7CiAgICAgLyogQ2FsbCBzeXN0ZW0gRExMIHZlcnNpb24gaWYgZm91bmQgKi8KICAgICBpZiAoX1BNX2ltcG9ydHMuUE1fc2V0U3VzcGVuZEFwcENhbGxiYWNrICE9IFBNX3NldFN1c3BlbmRBcHBDYWxsYmFjaykgewotICAgICAgICBfUE1faW1wb3J0cy5QTV9zZXRTdXNwZW5kQXBwQ2FsbGJhY2soc2F2ZVN0YXRlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisJX1BNX2ltcG9ydHMuUE1fc2V0U3VzcGVuZEFwcENhbGxiYWNrKHNhdmVTdGF0ZSk7CisJcmV0dXJuOworCX0KICAgICBzdXNwZW5kQXBwID0gc2F2ZVN0YXRlOwogfQogCkBAIC01MzgsOSArNTM4LDkgQEAKIHsKICAgICAvKiBDYWxsIHN5c3RlbSBETEwgdmVyc2lvbiBpZiBmb3VuZCAqLwogICAgIGlmIChfUE1faW1wb3J0cy5QTV9yZXN0b3JlQ29uc29sZVN0YXRlICE9IFBNX3Jlc3RvcmVDb25zb2xlU3RhdGUpIHsKLSAgICAgICAgX1BNX2ltcG9ydHMuUE1fcmVzdG9yZUNvbnNvbGVTdGF0ZShzdGF0ZUJ1Zixod25kQ29uc29sZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCV9QTV9pbXBvcnRzLlBNX3Jlc3RvcmVDb25zb2xlU3RhdGUoc3RhdGVCdWYsaHduZENvbnNvbGUpOworCXJldHVybjsKKwl9CiAKICAgICAvKiBOb3QgdXNlZCBpbiBXaW5kb3dzICovCiAgICAgKHZvaWQpc3RhdGVCdWY7CkBAIC01NTYsMTUgKzU1NiwxNSBAQAogewogICAgIC8qIENhbGwgc3lzdGVtIERMTCB2ZXJzaW9uIGlmIGZvdW5kICovCiAgICAgaWYgKF9QTV9pbXBvcnRzLlBNX2Nsb3NlQ29uc29sZSAhPSBQTV9jbG9zZUNvbnNvbGUpIHsKLSAgICAgICAgX1BNX2ltcG9ydHMuUE1fY2xvc2VDb25zb2xlKGh3bmRDb25zb2xlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisJX1BNX2ltcG9ydHMuUE1fY2xvc2VDb25zb2xlKGh3bmRDb25zb2xlKTsKKwlyZXR1cm47CisJfQogICAgIFNob3dDdXJzb3IodHJ1ZSk7CiAgICAgUmVzdG9yZUF1dG9QbGF5KCk7CiAgICAgaWYgKGh3bmRVc2VyKQotICAgICAgICBfUE1fcmVzdG9yZVVzZXJXaW5kb3coaHduZENvbnNvbGUpOworCV9QTV9yZXN0b3JlVXNlcldpbmRvdyhod25kQ29uc29sZSk7CiAgICAgZWxzZQotICAgICAgICBEZXN0cm95V2luZG93KGh3bmRDb25zb2xlKTsKKwlEZXN0cm95V2luZG93KGh3bmRDb25zb2xlKTsKICAgICBod25kVXNlciA9IE5VTEw7CiAgICAgX1BNX2h3bmRDb25zb2xlID0gTlVMTDsKIH0KQEAgLTU3Nyw3ICs1NzcsNiBAQAogewogICAgIC8qIENhbGwgc3lzdGVtIERMTCB2ZXJzaW9uIGlmIGZvdW5kICovCiAgICAgaWYgKF9QTV9pbXBvcnRzLlBNX2dldERpcmVjdERyYXdXaW5kb3cgIT0gUE1fZ2V0RGlyZWN0RHJhd1dpbmRvdykKLSAgICAgICAgcmV0dXJuIF9QTV9pbXBvcnRzLlBNX2dldERpcmVjdERyYXdXaW5kb3coKTsKKwlyZXR1cm4gX1BNX2ltcG9ydHMuUE1fZ2V0RGlyZWN0RHJhd1dpbmRvdygpOwogICAgIHJldHVybiBfUE1faHduZENvbnNvbGU7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL2V2ZW50LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS93aW4zMi9ldmVudC5jCmluZGV4IGMxNDM3N2QuLjg2NDQ4ZTMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL2V2ZW50LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvZXZlbnQuYwpAQCAtNzAsMTQzICs3MCwxNDMgQEAKICAgICBNU0cgICAgIGNoYXJNc2c7CiAgICAgZXZlbnRfdCBldnQ7CiAKLSAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgRGlyZWN0SW5wdXQhIFdlIGNhbid0IHN1cHBvcnQgcmVsYXRpdmUgbW91c2UKLSAgICAvLyAgICAgICBtb3ZlbWVudCBtb3Rpb24gY291bnRlcnMgd2l0aG91dCBEaXJlY3RJbnB1dCA7LSguCisgICAgLyogVE9ETzogQWRkIHN1cHBvcnQgZm9yIERpcmVjdElucHV0ISBXZSBjYW4ndCBzdXBwb3J0IHJlbGF0aXZlIG1vdXNlICovCisgICAgLyogICAgICAgbW92ZW1lbnQgbW90aW9uIGNvdW50ZXJzIHdpdGhvdXQgRGlyZWN0SW5wdXQgOy0oLiAqLwogICAgIHdoaWxlIChQZWVrTWVzc2FnZSgmbXNnLE5VTEwsMCwwLFBNX1JFTU9WRSkpIHsKLSAgICAgICAgbWVtc2V0KCZldnQsMCxzaXplb2YoZXZ0KSk7Ci0gICAgICAgIHN3aXRjaCAobXNnLm1lc3NhZ2UpIHsKLSAgICAgICAgICAgIGNhc2UgV01fTU9VU0VNT1ZFOgotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFTU9WRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV01fTEJVVFRPTkRCTENMSzoKLSAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRURPV047Ci0gICAgICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBFVlRfTEVGVEJNQVNLIHwgRVZUX0RCTENMSUNLOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKLSAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRURPV047Ci0gICAgICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBFVlRfTEVGVEJNQVNLOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTV9MQlVUVE9OVVA6Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9MRUZUQk1BU0s7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdNX1JCVVRUT05EQkxDTEs6Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOIHwgRVZUX0RCTENMSUNLOwotICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gRVZUX1JJR0hUQk1BU0s7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFRE9XTjsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9SSUdIVEJNQVNLOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTV9SQlVUVE9OVVA6Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9SSUdIVEJNQVNLOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTV9NQlVUVE9OREJMQ0xLOgotICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX01PVVNFRE9XTiB8IEVWVF9EQkxDTElDSzsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9NSURETEVCTUFTSzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV01fTUJVVFRPTkRPV046Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOOwotICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gRVZUX01JRERMRUJNQVNLOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXTV9NQlVUVE9OVVA6Ci0gICAgICAgICAgICAgICAgZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKLSAgICAgICAgICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9NSURETEVCTUFTSzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV01fS0VZRE9XTjoKLSAgICAgICAgICAgIGNhc2UgV01fU1lTS0VZRE9XTjoKLSAgICAgICAgICAgICAgICBpZiAoSElXT1JEKG1zZy5sUGFyYW0pICYgS0ZfUkVQRUFUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV2dC53aGF0ID0gRVZUX0tFWVJFUEVBVDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9LRVlET1dOOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdNX0tFWVVQOgotICAgICAgICAgICAgY2FzZSBXTV9TWVNLRVlVUDoKLSAgICAgICAgICAgICAgICBldnQud2hhdCA9IEVWVF9LRVlVUDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKwltZW1zZXQoJmV2dCwwLHNpemVvZihldnQpKTsKKwlzd2l0Y2ggKG1zZy5tZXNzYWdlKSB7CisJICAgIGNhc2UgV01fTU9VU0VNT1ZFOgorCQlldnQud2hhdCA9IEVWVF9NT1VTRU1PVkU7CisJCWJyZWFrOworCSAgICBjYXNlIFdNX0xCVVRUT05EQkxDTEs6CisJCWV2dC53aGF0ID0gRVZUX01PVVNFRE9XTjsKKwkJZXZ0Lm1lc3NhZ2UgPSBFVlRfTEVGVEJNQVNLIHwgRVZUX0RCTENMSUNLOworCQlicmVhazsKKwkgICAgY2FzZSBXTV9MQlVUVE9ORE9XTjoKKwkJZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOOworCQlldnQubWVzc2FnZSA9IEVWVF9MRUZUQk1BU0s7CisJCWJyZWFrOworCSAgICBjYXNlIFdNX0xCVVRUT05VUDoKKwkJZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKKwkJZXZ0Lm1lc3NhZ2UgPSBFVlRfTEVGVEJNQVNLOworCQlicmVhazsKKwkgICAgY2FzZSBXTV9SQlVUVE9OREJMQ0xLOgorCQlldnQud2hhdCA9IEVWVF9NT1VTRURPV04gfCBFVlRfREJMQ0xJQ0s7CisJCWV2dC5tZXNzYWdlID0gRVZUX1JJR0hUQk1BU0s7CisJCWJyZWFrOworCSAgICBjYXNlIFdNX1JCVVRUT05ET1dOOgorCQlldnQud2hhdCA9IEVWVF9NT1VTRURPV047CisJCWV2dC5tZXNzYWdlID0gRVZUX1JJR0hUQk1BU0s7CisJCWJyZWFrOworCSAgICBjYXNlIFdNX1JCVVRUT05VUDoKKwkJZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKKwkJZXZ0Lm1lc3NhZ2UgPSBFVlRfUklHSFRCTUFTSzsKKwkJYnJlYWs7CisJICAgIGNhc2UgV01fTUJVVFRPTkRCTENMSzoKKwkJZXZ0LndoYXQgPSBFVlRfTU9VU0VET1dOIHwgRVZUX0RCTENMSUNLOworCQlldnQubWVzc2FnZSA9IEVWVF9NSURETEVCTUFTSzsKKwkJYnJlYWs7CisJICAgIGNhc2UgV01fTUJVVFRPTkRPV046CisJCWV2dC53aGF0ID0gRVZUX01PVVNFRE9XTjsKKwkJZXZ0Lm1lc3NhZ2UgPSBFVlRfTUlERExFQk1BU0s7CisJCWJyZWFrOworCSAgICBjYXNlIFdNX01CVVRUT05VUDoKKwkJZXZ0LndoYXQgPSBFVlRfTU9VU0VVUDsKKwkJZXZ0Lm1lc3NhZ2UgPSBFVlRfTUlERExFQk1BU0s7CisJCWJyZWFrOworCSAgICBjYXNlIFdNX0tFWURPV046CisJICAgIGNhc2UgV01fU1lTS0VZRE9XTjoKKwkJaWYgKEhJV09SRChtc2cubFBhcmFtKSAmIEtGX1JFUEVBVCkgeworCQkgICAgZXZ0LndoYXQgPSBFVlRfS0VZUkVQRUFUOworCQkgICAgfQorCQllbHNlIHsKKwkJICAgIGV2dC53aGF0ID0gRVZUX0tFWURPV047CisJCSAgICB9CisJCWJyZWFrOworCSAgICBjYXNlIFdNX0tFWVVQOgorCSAgICBjYXNlIFdNX1NZU0tFWVVQOgorCQlldnQud2hhdCA9IEVWVF9LRVlVUDsKKwkJYnJlYWs7CisJICAgIH0KIAotICAgICAgICAvKiBDb252ZXJ0IG1vdXNlIGV2ZW50IG1vZGlmaWVyIGZsYWdzICovCi0gICAgICAgIGlmIChldnQud2hhdCAmIEVWVF9NT1VTRUVWVCkgewotICAgICAgICAgICAgaWYgKF9QTV9kZXNrWCkgewotICAgICAgICAgICAgICAgIGV2dC53aGVyZV94ID0gKChsb25nKW1zZy5wdC54ICogcmFuZ2VYKSAvIF9QTV9kZXNrWDsKLSAgICAgICAgICAgICAgICBldnQud2hlcmVfeSA9ICgobG9uZyltc2cucHQueSAqIHJhbmdlWSkgLyBfUE1fZGVza1k7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgU2NyZWVuVG9DbGllbnQoX1BNX2h3bmRDb25zb2xlLCAmbXNnLnB0KTsKLSAgICAgICAgICAgICAgICBldnQud2hlcmVfeCA9IG1zZy5wdC54OwotICAgICAgICAgICAgICAgIGV2dC53aGVyZV95ID0gbXNnLnB0Lnk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGV2dC53aGF0ID09IEVWVF9NT1VTRU1PVkUpIHsKLSAgICAgICAgICAgICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IG1vdXNlIHBvc2l0aW9uICovCi0gICAgICAgICAgICAgICAgRVZULm14ID0gZXZ0LndoZXJlX3g7Ci0gICAgICAgICAgICAgICAgRVZULm15ID0gZXZ0LndoZXJlX3k7Ci0gICAgICAgICAgICAgICAgaWYgKEVWVC5vbGRNb3ZlICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIEVWVC5ldnRxW0VWVC5vbGRNb3ZlXS53aGVyZV94ID0gZXZ0LndoZXJlX3g7LyogTW9kaWZ5IGV4aXN0aW5nIG9uZSAgKi8KLSAgICAgICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLndoZXJlX3kgPSBldnQud2hlcmVfeTsKLS8vICAgICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLnJlbGF0aXZlX3ggKz0gbWlja2V5WDsgICAgLy8gVE9ETyEKLS8vICAgICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLnJlbGF0aXZlX3kgKz0gbWlja2V5WTsgICAgLy8gVE9ETyEKLSAgICAgICAgICAgICAgICAgICAgZXZ0LndoYXQgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEVWVC5vbGRNb3ZlID0gRVZULmZyZWVIZWFkOyAvKiBTYXZlIGlkIG9mIHRoaXMgbW92ZSBldmVudCAgICovCi0vLyAgICAgICAgICAgICAgICAgIGV2dC5yZWxhdGl2ZV94ID0gbWlja2V5WDsgICAgLy8gVE9ETyEKLS8vICAgICAgICAgICAgICAgICAgZXZ0LnJlbGF0aXZlX3kgPSBtaWNrZXlZOyAgICAvLyBUT0RPIQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7Ci0gICAgICAgICAgICBpZiAobXNnLndQYXJhbSAmIE1LX0xCVVRUT04pCi0gICAgICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTEVGVEJVVDsKLSAgICAgICAgICAgIGlmIChtc2cud1BhcmFtICYgTUtfUkJVVFRPTikKLSAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9SSUdIVEJVVDsKLSAgICAgICAgICAgIGlmIChtc2cud1BhcmFtICYgTUtfTUJVVFRPTikKLSAgICAgICAgICAgICAgICBldnQubW9kaWZpZXJzIHw9IEVWVF9NSURETEVCVVQ7Ci0gICAgICAgICAgICBpZiAobXNnLndQYXJhbSAmIE1LX1NISUZUKQotICAgICAgICAgICAgICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX1NISUZUS0VZOwotICAgICAgICAgICAgaWYgKG1zZy53UGFyYW0gJiBNS19DT05UUk9MKQotICAgICAgICAgICAgICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX0NUUkxTVEFURTsKLSAgICAgICAgICAgIH0KKwkvKiBDb252ZXJ0IG1vdXNlIGV2ZW50IG1vZGlmaWVyIGZsYWdzICovCisJaWYgKGV2dC53aGF0ICYgRVZUX01PVVNFRVZUKSB7CisJICAgIGlmIChfUE1fZGVza1gpIHsKKwkJZXZ0LndoZXJlX3ggPSAoKGxvbmcpbXNnLnB0LnggKiByYW5nZVgpIC8gX1BNX2Rlc2tYOworCQlldnQud2hlcmVfeSA9ICgobG9uZyltc2cucHQueSAqIHJhbmdlWSkgLyBfUE1fZGVza1k7CisJCX0KKwkgICAgZWxzZSB7CisJCVNjcmVlblRvQ2xpZW50KF9QTV9od25kQ29uc29sZSwgJm1zZy5wdCk7CisJCWV2dC53aGVyZV94ID0gbXNnLnB0Lng7CisJCWV2dC53aGVyZV95ID0gbXNnLnB0Lnk7CisJCX0KKwkgICAgaWYgKGV2dC53aGF0ID09IEVWVF9NT1VTRU1PVkUpIHsKKwkJLyogU2F2ZSB0aGUgY3VycmVudCBtb3VzZSBwb3NpdGlvbiAqLworCQlFVlQubXggPSBldnQud2hlcmVfeDsKKwkJRVZULm15ID0gZXZ0LndoZXJlX3k7CisJCWlmIChFVlQub2xkTW92ZSAhPSAtMSkgeworCQkgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLndoZXJlX3ggPSBldnQud2hlcmVfeDsvKiBNb2RpZnkgZXhpc3Rpbmcgb25lICAqLworCQkgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLndoZXJlX3kgPSBldnQud2hlcmVfeTsKKy8qICAgICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLnJlbGF0aXZlX3ggKz0gbWlja2V5WDsgICAgLy8gVE9ETyEgKi8KKy8qICAgICAgICAgICAgICAgICAgRVZULmV2dHFbRVZULm9sZE1vdmVdLnJlbGF0aXZlX3kgKz0gbWlja2V5WTsgICAgLy8gVE9ETyEgKi8KKwkJICAgIGV2dC53aGF0ID0gMDsKKwkJICAgIH0KKwkJZWxzZSB7CisJCSAgICBFVlQub2xkTW92ZSA9IEVWVC5mcmVlSGVhZDsgLyogU2F2ZSBpZCBvZiB0aGlzIG1vdmUgZXZlbnQgICAqLworLyogICAgICAgICAgICAgICAgICBldnQucmVsYXRpdmVfeCA9IG1pY2tleVg7ICAgIC8vIFRPRE8hICovCisvKiAgICAgICAgICAgICAgICAgIGV2dC5yZWxhdGl2ZV95ID0gbWlja2V5WTsgICAgLy8gVE9ETyEgKi8KKwkJICAgIH0KKwkJfQorCSAgICBlbHNlCisJCUVWVC5vbGRNb3ZlID0gLTE7CisJICAgIGlmIChtc2cud1BhcmFtICYgTUtfTEJVVFRPTikKKwkJZXZ0Lm1vZGlmaWVycyB8PSBFVlRfTEVGVEJVVDsKKwkgICAgaWYgKG1zZy53UGFyYW0gJiBNS19SQlVUVE9OKQorCQlldnQubW9kaWZpZXJzIHw9IEVWVF9SSUdIVEJVVDsKKwkgICAgaWYgKG1zZy53UGFyYW0gJiBNS19NQlVUVE9OKQorCQlldnQubW9kaWZpZXJzIHw9IEVWVF9NSURETEVCVVQ7CisJICAgIGlmIChtc2cud1BhcmFtICYgTUtfU0hJRlQpCisJCWV2dC5tb2RpZmllcnMgfD0gRVZUX1NISUZUS0VZOworCSAgICBpZiAobXNnLndQYXJhbSAmIE1LX0NPTlRST0wpCisJCWV2dC5tb2RpZmllcnMgfD0gRVZUX0NUUkxTVEFURTsKKwkgICAgfQogCi0gICAgICAgIC8qIENvbnZlcnQga2V5Ym9hcmQgY29kZXMgKi8KLSAgICAgICAgVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKLSAgICAgICAgaWYgKGV2dC53aGF0ICYgRVZUX0tFWUVWVCkgewotICAgICAgICAgICAgaW50IHNjYW5Db2RlID0gKG1zZy5sUGFyYW0gPj4gMTYpICYgMHhGRjsKLSAgICAgICAgICAgIGlmIChldnQud2hhdCA9PSBFVlRfS0VZVVApIHsKLSAgICAgICAgICAgICAgICAvKiBHZXQgbWVzc2FnZSBmb3Iga2V5dXAgY29kZSBmcm9tIHRhYmxlIG9mIGNhY2hlZCBkb3duIHZhbHVlcyAqLwotICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0ga2V5VXBNc2dbc2NhbkNvZGVdOwotICAgICAgICAgICAgICAgIGtleVVwTXNnW3NjYW5Db2RlXSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKFBlZWtNZXNzYWdlKCZjaGFyTXNnLE5VTEwsV01fQ0hBUixXTV9DSEFSLFBNX1JFTU9WRSkpCi0gICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gY2hhck1zZy53UGFyYW07Ci0gICAgICAgICAgICAgICAgaWYgKFBlZWtNZXNzYWdlKCZjaGFyTXNnLE5VTEwsV01fU1lTQ0hBUixXTV9TWVNDSEFSLFBNX1JFTU9WRSkpCi0gICAgICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlID0gY2hhck1zZy53UGFyYW07Ci0gICAgICAgICAgICAgICAgZXZ0Lm1lc3NhZ2UgfD0gKChtc2cubFBhcmFtID4+IDgpICYgMHhGRjAwKTsKLSAgICAgICAgICAgICAgICBrZXlVcE1zZ1tzY2FuQ29kZV0gPSAodXNob3J0KWV2dC5tZXNzYWdlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChldnQud2hhdCA9PSBFVlRfS0VZUkVQRUFUKQotICAgICAgICAgICAgICAgIGV2dC5tZXNzYWdlIHw9IChtc2cubFBhcmFtIDw8IDE2KTsKLSAgICAgICAgICAgIGlmIChISVdPUkQobXNnLmxQYXJhbSkgJiBLRl9BTFRET1dOKQotICAgICAgICAgICAgICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX0FMVFNUQVRFOwotICAgICAgICAgICAgaWYgKEdldEtleVN0YXRlKFZLX1NISUZUKSAmIDB4ODAwMFUpCi0gICAgICAgICAgICAgICAgZXZ0Lm1vZGlmaWVycyB8PSBFVlRfU0hJRlRLRVk7Ci0gICAgICAgICAgICBpZiAoR2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgJiAweDgwMDBVKQotICAgICAgICAgICAgICAgIGV2dC5tb2RpZmllcnMgfD0gRVZUX0NUUkxTVEFURTsKLSAgICAgICAgICAgIEVWVC5vbGRNb3ZlID0gLTE7Ci0gICAgICAgICAgICB9CisJLyogQ29udmVydCBrZXlib2FyZCBjb2RlcyAqLworCVRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7CisJaWYgKGV2dC53aGF0ICYgRVZUX0tFWUVWVCkgeworCSAgICBpbnQgc2NhbkNvZGUgPSAobXNnLmxQYXJhbSA+PiAxNikgJiAweEZGOworCSAgICBpZiAoZXZ0LndoYXQgPT0gRVZUX0tFWVVQKSB7CisJCS8qIEdldCBtZXNzYWdlIGZvciBrZXl1cCBjb2RlIGZyb20gdGFibGUgb2YgY2FjaGVkIGRvd24gdmFsdWVzICovCisJCWV2dC5tZXNzYWdlID0ga2V5VXBNc2dbc2NhbkNvZGVdOworCQlrZXlVcE1zZ1tzY2FuQ29kZV0gPSAwOworCQl9CisJICAgIGVsc2UgeworCQlpZiAoUGVla01lc3NhZ2UoJmNoYXJNc2csTlVMTCxXTV9DSEFSLFdNX0NIQVIsUE1fUkVNT1ZFKSkKKwkJICAgIGV2dC5tZXNzYWdlID0gY2hhck1zZy53UGFyYW07CisJCWlmIChQZWVrTWVzc2FnZSgmY2hhck1zZyxOVUxMLFdNX1NZU0NIQVIsV01fU1lTQ0hBUixQTV9SRU1PVkUpKQorCQkgICAgZXZ0Lm1lc3NhZ2UgPSBjaGFyTXNnLndQYXJhbTsKKwkJZXZ0Lm1lc3NhZ2UgfD0gKChtc2cubFBhcmFtID4+IDgpICYgMHhGRjAwKTsKKwkJa2V5VXBNc2dbc2NhbkNvZGVdID0gKHVzaG9ydClldnQubWVzc2FnZTsKKwkJfQorCSAgICBpZiAoZXZ0LndoYXQgPT0gRVZUX0tFWVJFUEVBVCkKKwkJZXZ0Lm1lc3NhZ2UgfD0gKG1zZy5sUGFyYW0gPDwgMTYpOworCSAgICBpZiAoSElXT1JEKG1zZy5sUGFyYW0pICYgS0ZfQUxURE9XTikKKwkJZXZ0Lm1vZGlmaWVycyB8PSBFVlRfQUxUU1RBVEU7CisJICAgIGlmIChHZXRLZXlTdGF0ZShWS19TSElGVCkgJiAweDgwMDBVKQorCQlldnQubW9kaWZpZXJzIHw9IEVWVF9TSElGVEtFWTsKKwkgICAgaWYgKEdldEtleVN0YXRlKFZLX0NPTlRST0wpICYgMHg4MDAwVSkKKwkJZXZ0Lm1vZGlmaWVycyB8PSBFVlRfQ1RSTFNUQVRFOworCSAgICBFVlQub2xkTW92ZSA9IC0xOworCSAgICB9CiAKLSAgICAgICAgaWYgKGV2dC53aGF0ICE9IDApIHsKLSAgICAgICAgICAgIC8qIEFkZCB0aW1lIHN0YW1wIGFuZCBhZGQgdGhlIGV2ZW50IHRvIHRoZSBxdWV1ZSAqLwotICAgICAgICAgICAgZXZ0LndoZW4gPSBtc2cudGltZTsKLSAgICAgICAgICAgIGlmIChFVlQuY291bnQgPCBFVkVOVFFTSVpFKQotICAgICAgICAgICAgICAgIGFkZEV2ZW50KCZldnQpOwotICAgICAgICAgICAgfQotICAgICAgICBEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7Ci0gICAgICAgIH0KKwlpZiAoZXZ0LndoYXQgIT0gMCkgeworCSAgICAvKiBBZGQgdGltZSBzdGFtcCBhbmQgYWRkIHRoZSBldmVudCB0byB0aGUgcXVldWUgKi8KKwkgICAgZXZ0LndoZW4gPSBtc2cudGltZTsKKwkgICAgaWYgKEVWVC5jb3VudCA8IEVWRU5UUVNJWkUpCisJCWFkZEV2ZW50KCZldnQpOworCSAgICB9CisJRGlzcGF0Y2hNZXNzYWdlKCZtc2cpOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI5OSw3ICsyOTksNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgRVZUX3Jlc3VtZSh2b2lkKQogewotICAgIC8vIERvIG5vdGhpbmcgZm9yIFdpbjMyCisgICAgLyogRG8gbm90aGluZyBmb3IgV2luMzIgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMwOSw3ICszMDksNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgRVZUX3N1c3BlbmQodm9pZCkKIHsKLSAgICAvLyBEbyBub3RoaW5nIGZvciBXaW4zMgorICAgIC8qIERvIG5vdGhpbmcgZm9yIFdpbjMyICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNDMsNyArMzQzLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgRVZUQVBJIEVWVF9qb3lJc1ByZXNlbnQodm9pZCkKIHsKLSAgICAvLyBUT0RPOiBJbXBsZW1lbnQgam95c3RpY2sgY29kZSBiYXNlZCBvbiBEaXJlY3RYIQorICAgIC8qIFRPRE86IEltcGxlbWVudCBqb3lzdGljayBjb2RlIGJhc2VkIG9uIERpcmVjdFghICovCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM2Miw5ICszNjIsOSBAQAogcXVldWUgZm9yIGxhdGVyIHJldHJpZXZhbC4KIAogTm90ZTogICBNb3N0IGFuYWxvZ3VlIGpveXN0aWNrcyB3aWxsIHByb3ZpZGUgcmVhZGluZ3MgdGhhdCBjaGFuZ2UgZXZlbgotICAgICAgICB0aG91Z2ggdGhlIGpveXN0aWNrIGhhcyBub3QgbW92ZWQuIEhlbmNlIGlmIHlvdSBjYWxsIHRoaXMgcm91dGluZQotICAgICAgICB5b3Ugd2lsbCBsaWtlbHkgZ2V0IGFuIEVWVF9KT1lNT1ZFIGV2ZW50IGV2ZXJ5IHRpbWUgdGhyb3VnaCB5b3VyCi0gICAgICAgIGV2ZW50IGxvb3AuCisJdGhvdWdoIHRoZSBqb3lzdGljayBoYXMgbm90IG1vdmVkLiBIZW5jZSBpZiB5b3UgY2FsbCB0aGlzIHJvdXRpbmUKKwl5b3Ugd2lsbCBsaWtlbHkgZ2V0IGFuIEVWVF9KT1lNT1ZFIGV2ZW50IGV2ZXJ5IHRpbWUgdGhyb3VnaCB5b3VyCisJZXZlbnQgbG9vcC4KIAogU0VFIEFMU086CiBFVlRfZ2V0TmV4dCwgRVZUX3BlZWtOZXh0LCBFVlRfam95U2V0VXBwZXJMZWZ0LCBFVlRfam95U2V0TG93ZXJSaWdodCwKQEAgLTQ1Nyw0ICs0NTcsMyBAQAogdm9pZCBFVlRBUEkgRVZUX2pveVNldENlbnRlcih2b2lkKQogewogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS93aW4zMi9udHNlcnZjLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS93aW4zMi9udHNlcnZjLmMKaW5kZXggYTMzMjRkMy4uNTlkOWFhMCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvbnRzZXJ2Yy5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL250c2VydmMuYwpAQCAtNjQsNjMgKzY0LDYzIEBACiAgICAgY2hhciAgICAgICAga2V5UGF0aFtNQVhfUEFUSF07CiAgICAgdWxvbmcgICAgICAgc3RhdHVzOwogCi0gICAgLy8gT2J0YWluIGEgaGFuZGxlIHRvIHRoZSBzZXJ2aWNlIGNvbnRyb2wgbWFuYWdlciByZXF1ZXN0aW5nIGFsbCBhY2Nlc3MKKyAgICAvKiBPYnRhaW4gYSBoYW5kbGUgdG8gdGhlIHNlcnZpY2UgY29udHJvbCBtYW5hZ2VyIHJlcXVlc3RpbmcgYWxsIGFjY2VzcyAqLwogICAgIGlmICgoc2NtSGFuZGxlID0gT3BlblNDTWFuYWdlcihOVUxMLCBOVUxMLCBTQ19NQU5BR0VSX0FMTF9BQ0NFU1MpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7CisJcmV0dXJuIEdldExhc3RFcnJvcigpOwogCi0gICAgLy8gRmluZCB0aGUgcGF0aCB0byB0aGUgZHJpdmVyIGluIHN5c3RlbSBkaXJlY3RvcnkKKyAgICAvKiBGaW5kIHRoZSBwYXRoIHRvIHRoZSBkcml2ZXIgaW4gc3lzdGVtIGRpcmVjdG9yeSAqLwogICAgIEdldFN5c3RlbURpcmVjdG9yeShzekRyaXZlclBhdGgsIHNpemVvZihzekRyaXZlclBhdGgpKTsKICAgICBzdHJjYXQoc3pEcml2ZXJQYXRoLCAiXFxkcml2ZXJzXFwiKTsKICAgICBzdHJjYXQoc3pEcml2ZXJQYXRoLCBzekRyaXZlck5hbWUpOwogCi0gICAgLy8gQ3JlYXRlIHRoZSBzZXJ2aWNlIHdpdGggdGhlIFNlcnZpY2UgQ29udHJvbCBNYW5hZ2VyLgorICAgIC8qIENyZWF0ZSB0aGUgc2VydmljZSB3aXRoIHRoZSBTZXJ2aWNlIENvbnRyb2wgTWFuYWdlci4gKi8KICAgICBkcml2ZXJIYW5kbGUgPSBDcmVhdGVTZXJ2aWNlKHNjbUhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN6U2VydmljZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzelNlcnZpY2VOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVklDRV9BTExfQUNDRVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdTZXJ2aWNlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZJQ0VfQk9PVF9TVEFSVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFUlZJQ0VfRVJST1JfTk9STUFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pEcml2ZXJQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3pMb2FkR3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKwkJCQkgc3pTZXJ2aWNlTmFtZSwKKwkJCQkgc3pTZXJ2aWNlTmFtZSwKKwkJCQkgU0VSVklDRV9BTExfQUNDRVNTLAorCQkJCSBkd1NlcnZpY2VUeXBlLAorCQkJCSBTRVJWSUNFX0JPT1RfU1RBUlQsCisJCQkJIFNFUlZJQ0VfRVJST1JfTk9STUFMLAorCQkJCSBzekRyaXZlclBhdGgsCisJCQkJIHN6TG9hZEdyb3VwLAorCQkJCSBOVUxMLAorCQkJCSBOVUxMLAorCQkJCSBOVUxMLAorCQkJCSBOVUxMKTsKIAotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZHJpdmVyIGNvdWxkIGFjdHVhbGx5IGJlIGluc3RhbGxlZC4KKyAgICAvKiBDaGVjayB0byBzZWUgaWYgdGhlIGRyaXZlciBjb3VsZCBhY3R1YWxseSBiZSBpbnN0YWxsZWQuICovCiAgICAgaWYgKCFkcml2ZXJIYW5kbGUpIHsKLSAgICAgICAgc3RhdHVzID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIENsb3NlU2VydmljZUhhbmRsZShzY21IYW5kbGUpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisJc3RhdHVzID0gR2V0TGFzdEVycm9yKCk7CisJQ2xvc2VTZXJ2aWNlSGFuZGxlKHNjbUhhbmRsZSk7CisJcmV0dXJuIHN0YXR1czsKKwl9CiAKLSAgICAvLyBHZXQgYSBoYW5kbGUgdG8gdGhlIGtleSBmb3IgZHJpdmVyIHNvIHRoYXQgaXQgY2FuIGJlIGFsdGVyZWQgaW4gdGhlCi0gICAgLy8gbmV4dCBzdGVwLgorICAgIC8qIEdldCBhIGhhbmRsZSB0byB0aGUga2V5IGZvciBkcml2ZXIgc28gdGhhdCBpdCBjYW4gYmUgYWx0ZXJlZCBpbiB0aGUgKi8KKyAgICAvKiBuZXh0IHN0ZXAuICovCiAgICAgc3RyY3B5KGtleVBhdGgsICJTWVNURU1cXEN1cnJlbnRDb250cm9sU2V0XFxTZXJ2aWNlc1xcIik7CiAgICAgc3RyY2F0KGtleVBhdGgsIHN6U2VydmljZU5hbWUpOwogICAgIGlmICgoc3RhdHVzID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSxrZXlQYXRoLDAsS0VZX0FMTF9BQ0NFU1MsJmtleSkpICE9IEVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgLy8gQSBwcm9ibGVtIGhhcyBvY2N1cmVkLiBEZWxldGUgdGhlIHNlcnZpY2Ugc28gdGhhdCBpdCBpcyBub3QgaW5zdGFsbGVkLgotICAgICAgICBzdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgRGVsZXRlU2VydmljZShkcml2ZXJIYW5kbGUpOwotICAgICAgICBDbG9zZVNlcnZpY2VIYW5kbGUoZHJpdmVySGFuZGxlKTsKLSAgICAgICAgQ2xvc2VTZXJ2aWNlSGFuZGxlKHNjbUhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKwkvKiBBIHByb2JsZW0gaGFzIG9jY3VyZWQuIERlbGV0ZSB0aGUgc2VydmljZSBzbyB0aGF0IGl0IGlzIG5vdCBpbnN0YWxsZWQuICovCisJc3RhdHVzID0gR2V0TGFzdEVycm9yKCk7CisJRGVsZXRlU2VydmljZShkcml2ZXJIYW5kbGUpOworCUNsb3NlU2VydmljZUhhbmRsZShkcml2ZXJIYW5kbGUpOworCUNsb3NlU2VydmljZUhhbmRsZShzY21IYW5kbGUpOworCXJldHVybiBzdGF0dXM7CisJfQogCi0gICAgLy8gRGVsZXRlIHRoZSBJbWFnZVBhdGggdmFsdWUgaW4gdGhlIG5ld2x5IGNyZWF0ZWQga2V5IHNvIHRoYXQgdGhlCi0gICAgLy8gc3lzdGVtIGxvb2tzIGZvciB0aGUgZHJpdmVyIGluIHRoZSBub3JtYWwgbG9jYXRpb24uCisgICAgLyogRGVsZXRlIHRoZSBJbWFnZVBhdGggdmFsdWUgaW4gdGhlIG5ld2x5IGNyZWF0ZWQga2V5IHNvIHRoYXQgdGhlICovCisgICAgLyogc3lzdGVtIGxvb2tzIGZvciB0aGUgZHJpdmVyIGluIHRoZSBub3JtYWwgbG9jYXRpb24uICovCiAgICAgaWYgKChzdGF0dXMgPSBSZWdEZWxldGVWYWx1ZShrZXksICJJbWFnZVBhdGgiKSkgIT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgICAvLyBBIHByb2JsZW0gaGFzIG9jY3VycmVkLiBEZWxldGUgdGhlIHNlcnZpY2Ugc28gdGhhdCBpdCBpcyBub3QKLSAgICAgICAgLy8gaW5zdGFsbGVkIGFuZCB3aWxsIG5vdCB0cnkgdG8gc3RhcnQuCi0gICAgICAgIFJlZ0Nsb3NlS2V5KGtleSk7Ci0gICAgICAgIERlbGV0ZVNlcnZpY2UoZHJpdmVySGFuZGxlKTsKLSAgICAgICAgQ2xvc2VTZXJ2aWNlSGFuZGxlKGRyaXZlckhhbmRsZSk7Ci0gICAgICAgIENsb3NlU2VydmljZUhhbmRsZShzY21IYW5kbGUpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisJLyogQSBwcm9ibGVtIGhhcyBvY2N1cnJlZC4gRGVsZXRlIHRoZSBzZXJ2aWNlIHNvIHRoYXQgaXQgaXMgbm90ICovCisJLyogaW5zdGFsbGVkIGFuZCB3aWxsIG5vdCB0cnkgdG8gc3RhcnQuICovCisJUmVnQ2xvc2VLZXkoa2V5KTsKKwlEZWxldGVTZXJ2aWNlKGRyaXZlckhhbmRsZSk7CisJQ2xvc2VTZXJ2aWNlSGFuZGxlKGRyaXZlckhhbmRsZSk7CisJQ2xvc2VTZXJ2aWNlSGFuZGxlKHNjbUhhbmRsZSk7CisJcmV0dXJuIHN0YXR1czsKKwl9CiAKLSAgICAvLyBDbGVhbiB1cCBhbmQgZXhpdAorICAgIC8qIENsZWFuIHVwIGFuZCBleGl0ICovCiAgICAgUmVnQ2xvc2VLZXkoa2V5KTsKICAgICBDbG9zZVNlcnZpY2VIYW5kbGUoZHJpdmVySGFuZGxlKTsKICAgICBDbG9zZVNlcnZpY2VIYW5kbGUoc2NtSGFuZGxlKTsKQEAgLTE0NSwzMiArMTQ1LDMyIEBACiAgICAgU0VSVklDRV9TVEFUVVMJc2VydmljZVN0YXR1czsKICAgICB1bG9uZyAgICAgICAgICAgc3RhdHVzOwogCi0gICAgLy8gT2J0YWluIGEgaGFuZGxlIHRvIHRoZSBzZXJ2aWNlIGNvbnRyb2wgbWFuYWdlciByZXF1ZXN0aW5nIGFsbCBhY2Nlc3MKKyAgICAvKiBPYnRhaW4gYSBoYW5kbGUgdG8gdGhlIHNlcnZpY2UgY29udHJvbCBtYW5hZ2VyIHJlcXVlc3RpbmcgYWxsIGFjY2VzcyAqLwogICAgIGlmICgoc2NtSGFuZGxlID0gT3BlblNDTWFuYWdlcihOVUxMLCBOVUxMLCBTQ19NQU5BR0VSX0FMTF9BQ0NFU1MpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gR2V0TGFzdEVycm9yKCk7CisJcmV0dXJuIEdldExhc3RFcnJvcigpOwogCi0gICAgLy8gT3BlbiB0aGUgc2VydmljZSB3aXRoIHRoZSBTZXJ2aWNlIENvbnRyb2wgTWFuYWdlci4KKyAgICAvKiBPcGVuIHRoZSBzZXJ2aWNlIHdpdGggdGhlIFNlcnZpY2UgQ29udHJvbCBNYW5hZ2VyLiAqLwogICAgIGlmICgoZHJpdmVySGFuZGxlID0gT3BlblNlcnZpY2Uoc2NtSGFuZGxlLHN6U2VydmljZU5hbWUsU0VSVklDRV9BTExfQUNDRVNTKSkgPT0gTlVMTCkgewotICAgICAgICBzdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgQ2xvc2VTZXJ2aWNlSGFuZGxlKHNjbUhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKwlzdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsKKwlDbG9zZVNlcnZpY2VIYW5kbGUoc2NtSGFuZGxlKTsKKwlyZXR1cm4gc3RhdHVzOworCX0KIAotICAgIC8vIFN0YXJ0IHRoZSBzZXJ2aWNlCisgICAgLyogU3RhcnQgdGhlIHNlcnZpY2UgKi8KICAgICBpZiAoIVN0YXJ0U2VydmljZShkcml2ZXJIYW5kbGUsMCxOVUxMKSkgewotICAgICAgICBzdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgQ2xvc2VTZXJ2aWNlSGFuZGxlKGRyaXZlckhhbmRsZSk7Ci0gICAgICAgIENsb3NlU2VydmljZUhhbmRsZShzY21IYW5kbGUpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisJc3RhdHVzID0gR2V0TGFzdEVycm9yKCk7CisJQ2xvc2VTZXJ2aWNlSGFuZGxlKGRyaXZlckhhbmRsZSk7CisJQ2xvc2VTZXJ2aWNlSGFuZGxlKHNjbUhhbmRsZSk7CisJcmV0dXJuIHN0YXR1czsKKwl9CiAKLSAgICAvLyBRdWVyeSB0aGUgc2VydmljZSB0byBtYWtlIHN1cmUgaXQgaXMgdGhlcmUKLSAgICBpZiAoIVF1ZXJ5U2VydmljZVN0YXR1cyhkcml2ZXJIYW5kbGUsJnNlcnZpY2VTdGF0dXMpKSB7CQotICAgICAgICBzdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgQ2xvc2VTZXJ2aWNlSGFuZGxlKGRyaXZlckhhbmRsZSk7Ci0gICAgICAgIENsb3NlU2VydmljZUhhbmRsZShzY21IYW5kbGUpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgLyogUXVlcnkgdGhlIHNlcnZpY2UgdG8gbWFrZSBzdXJlIGl0IGlzIHRoZXJlICovCisgICAgaWYgKCFRdWVyeVNlcnZpY2VTdGF0dXMoZHJpdmVySGFuZGxlLCZzZXJ2aWNlU3RhdHVzKSkgeworCXN0YXR1cyA9IEdldExhc3RFcnJvcigpOworCUNsb3NlU2VydmljZUhhbmRsZShkcml2ZXJIYW5kbGUpOworCUNsb3NlU2VydmljZUhhbmRsZShzY21IYW5kbGUpOworCXJldHVybiBzdGF0dXM7CisJfQogICAgIENsb3NlU2VydmljZUhhbmRsZShkcml2ZXJIYW5kbGUpOwogICAgIENsb3NlU2VydmljZUhhbmRsZShzY21IYW5kbGUpOwogICAgIHJldHVybiBFUlJPUl9TVUNDRVNTOwpAQCAtMTk0LDI0ICsxOTQsMjQgQEAKICAgICBTRVJWSUNFX1NUQVRVUwlzZXJ2aWNlU3RhdHVzOwogICAgIHVsb25nICAgICAgICAgICBzdGF0dXM7CiAKLSAgICAvLyBPYnRhaW4gYSBoYW5kbGUgdG8gdGhlIHNlcnZpY2UgY29udHJvbCBtYW5hZ2VyIHJlcXVlc3RpbmcgYWxsIGFjY2VzcworICAgIC8qIE9idGFpbiBhIGhhbmRsZSB0byB0aGUgc2VydmljZSBjb250cm9sIG1hbmFnZXIgcmVxdWVzdGluZyBhbGwgYWNjZXNzICovCiAgICAgaWYgKChzY21IYW5kbGUgPSBPcGVuU0NNYW5hZ2VyKE5VTEwsIE5VTEwsIFNDX01BTkFHRVJfQUxMX0FDQ0VTUykpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBHZXRMYXN0RXJyb3IoKTsKKwlyZXR1cm4gR2V0TGFzdEVycm9yKCk7CiAKLSAgICAvLyBPcGVuIHRoZSBzZXJ2aWNlIHdpdGggdGhlIFNlcnZpY2UgQ29udHJvbCBNYW5hZ2VyLgorICAgIC8qIE9wZW4gdGhlIHNlcnZpY2Ugd2l0aCB0aGUgU2VydmljZSBDb250cm9sIE1hbmFnZXIuICovCiAgICAgaWYgKChkcml2ZXJIYW5kbGUgPSBPcGVuU2VydmljZShzY21IYW5kbGUsc3pTZXJ2aWNlTmFtZSxTRVJWSUNFX0FMTF9BQ0NFU1MpKSA9PSBOVUxMKSB7Ci0gICAgICAgIHN0YXR1cyA9IEdldExhc3RFcnJvcigpOwotICAgICAgICBDbG9zZVNlcnZpY2VIYW5kbGUoc2NtSGFuZGxlKTsKLSAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQorCXN0YXR1cyA9IEdldExhc3RFcnJvcigpOworCUNsb3NlU2VydmljZUhhbmRsZShzY21IYW5kbGUpOworCXJldHVybiBzdGF0dXM7CisJfQogCi0gICAgLy8gU3RvcCB0aGUgc2VydmljZSBmcm9tIHJ1bm5pbmcKKyAgICAvKiBTdG9wIHRoZSBzZXJ2aWNlIGZyb20gcnVubmluZyAqLwogICAgIGlmICghQ29udHJvbFNlcnZpY2UoZHJpdmVySGFuZGxlLCBTRVJWSUNFX0NPTlRST0xfU1RPUCwgJnNlcnZpY2VTdGF0dXMpKSB7Ci0gICAgICAgIHN0YXR1cyA9IEdldExhc3RFcnJvcigpOwotICAgICAgICBDbG9zZVNlcnZpY2VIYW5kbGUoZHJpdmVySGFuZGxlKTsKLSAgICAgICAgQ2xvc2VTZXJ2aWNlSGFuZGxlKHNjbUhhbmRsZSk7Ci0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0gICAgICAgIH0KKwlzdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsKKwlDbG9zZVNlcnZpY2VIYW5kbGUoZHJpdmVySGFuZGxlKTsKKwlDbG9zZVNlcnZpY2VIYW5kbGUoc2NtSGFuZGxlKTsKKwlyZXR1cm4gc3RhdHVzOworCX0KICAgICBDbG9zZVNlcnZpY2VIYW5kbGUoZHJpdmVySGFuZGxlKTsKICAgICBDbG9zZVNlcnZpY2VIYW5kbGUoc2NtSGFuZGxlKTsKICAgICByZXR1cm4gRVJST1JfU1VDQ0VTUzsKQEAgLTIzNCwyNiArMjM0LDI1IEBACiAgICAgU0NfSEFORExFICAgZHJpdmVySGFuZGxlOwogICAgIHVsb25nICAgICAgIHN0YXR1czsKIAotICAgIC8vIE9idGFpbiBhIGhhbmRsZSB0byB0aGUgc2VydmljZSBjb250cm9sIG1hbmFnZXIgcmVxdWVzdGluZyBhbGwgYWNjZXNzCisgICAgLyogT2J0YWluIGEgaGFuZGxlIHRvIHRoZSBzZXJ2aWNlIGNvbnRyb2wgbWFuYWdlciByZXF1ZXN0aW5nIGFsbCBhY2Nlc3MgKi8KICAgICBpZiAoKHNjbUhhbmRsZSA9IE9wZW5TQ01hbmFnZXIoTlVMTCwgTlVMTCwgU0NfTUFOQUdFUl9BTExfQUNDRVNTKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIEdldExhc3RFcnJvcigpOworCXJldHVybiBHZXRMYXN0RXJyb3IoKTsKIAotICAgIC8vIE9wZW4gdGhlIHNlcnZpY2Ugd2l0aCB0aGUgU2VydmljZSBDb250cm9sIE1hbmFnZXIuCisgICAgLyogT3BlbiB0aGUgc2VydmljZSB3aXRoIHRoZSBTZXJ2aWNlIENvbnRyb2wgTWFuYWdlci4gKi8KICAgICBpZiAoKGRyaXZlckhhbmRsZSA9IE9wZW5TZXJ2aWNlKHNjbUhhbmRsZSxzelNlcnZpY2VOYW1lLFNFUlZJQ0VfQUxMX0FDQ0VTUykpID09IE5VTEwpIHsKLSAgICAgICAgc3RhdHVzID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgICAgIENsb3NlU2VydmljZUhhbmRsZShzY21IYW5kbGUpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisJc3RhdHVzID0gR2V0TGFzdEVycm9yKCk7CisJQ2xvc2VTZXJ2aWNlSGFuZGxlKHNjbUhhbmRsZSk7CisJcmV0dXJuIHN0YXR1czsKKwl9CiAKLSAgICAvLyBSZW1vdmUgdGhlIHNlcnZpY2UKKyAgICAvKiBSZW1vdmUgdGhlIHNlcnZpY2UgKi8KICAgICBpZiAoIURlbGV0ZVNlcnZpY2UoZHJpdmVySGFuZGxlKSkgewotICAgICAgICBzdGF0dXMgPSBHZXRMYXN0RXJyb3IoKTsKLSAgICAgICAgQ2xvc2VTZXJ2aWNlSGFuZGxlKGRyaXZlckhhbmRsZSk7Ci0gICAgICAgIENsb3NlU2VydmljZUhhbmRsZShzY21IYW5kbGUpOwotICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisJc3RhdHVzID0gR2V0TGFzdEVycm9yKCk7CisJQ2xvc2VTZXJ2aWNlSGFuZGxlKGRyaXZlckhhbmRsZSk7CisJQ2xvc2VTZXJ2aWNlSGFuZGxlKHNjbUhhbmRsZSk7CisJcmV0dXJuIHN0YXR1czsKKwl9CiAgICAgQ2xvc2VTZXJ2aWNlSGFuZGxlKGRyaXZlckhhbmRsZSk7CiAgICAgQ2xvc2VTZXJ2aWNlSGFuZGxlKHNjbUhhbmRsZSk7CiAgICAgcmV0dXJuIEVSUk9SX1NVQ0NFU1M7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL29zaGRyLmggYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS93aW4zMi9vc2hkci5oCmluZGV4IDAxOGM5MzYuLjBjNTllOTAgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL29zaGRyLmgKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvb3NoZHIuaApAQCAtNDcsNyArNDcsNyBAQAogI2RlZmluZSBHRVRfREVGQVVMVF9DVygpICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoX1BNX2N3X2RlZmF1bHQgPT0gMCkgICAgICAgICAgICAgICAgXAotICAgICAgICBfUE1fY3dfZGVmYXVsdCA9IF9jb250cm9sODcoMCwwKTsgICBcCisJX1BNX2N3X2RlZmF1bHQgPSBfY29udHJvbDg3KDAsMCk7ICAgXAogfQogI2RlZmluZSBSRVNFVF9ERUZBVUxUX0NXKCkgICAgICAgICAgICAgICAgICBcCiAgICAgX2NvbnRyb2w4NyhfUE1fY3dfZGVmYXVsdCwweEZGRkZGRkZGKQpAQCAtNzcsNCArNzcsMyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbnRlcm5hbCBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogdm9pZCBfRVZUX3B1bXBNZXNzYWdlcyh2b2lkKTsKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvcG0uYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL3BtLmMKaW5kZXggZDA4ZGE0Yy4uMWZmZGJjYyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvcG0uYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS93aW4zMi9wbS5jCkBAIC02OSwxMCArNjksMTAgQEAKICNkZWZpbmUgQ0hFQ0tfRk9SX1BNSEVMUCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmIChfUE1faERldmljZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKF9QTV9oYXZlV2luTlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gY29ubmVjdCB0byBQTUhFTFAuU1lTIG9yIFNEREhFTFAuU1lTISIpOyBcCi0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gY29ubmVjdCB0byBQTUhFTFAuVlhEIG9yIFNEREhFTFAuVlhEISIpOyBcCisJaWYgKF9QTV9oYXZlV2luTlQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBjb25uZWN0IHRvIFBNSEVMUC5TWVMgb3IgU0RESEVMUC5TWVMhIik7IFwKKwllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gY29ubmVjdCB0byBQTUhFTFAuVlhEIG9yIFNEREhFTFAuVlhEISIpOyBcCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC05NSw3MSArOTUsNzEgQEAKICAgICAgKiBvZiBTREQgaXMgbG9hZGVkLCB3ZSB1c2UgdGhlIFBNSEVMUCBWeEQgaW5zdGVhZC4KICAgICAgKi8KICAgICBpZiAoIWluaXRlZCkgewotICAgICAgICAvKiBEZXRlcm1pbmUgaWYgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgV2luZG93cyBOVCBvciBub3QgYW5kCi0gICAgICAgICAqIHNldCB0aGUgZ2xvYmFsIE9TIHR5cGUgdmFyaWFibGUuCi0gICAgICAgICAqLwotICAgICAgICBfUE1faGF2ZVdpbk5UID0gZmFsc2U7Ci0gICAgICAgIGlmICgoR2V0VmVyc2lvbigpICYgMHg4MDAwMDAwMFVMKSA9PSAwKQotICAgICAgICAgICAgX1BNX2hhdmVXaW5OVCA9IHRydWU7Ci0gICAgICAgIF9fX2Rydl9vc190eXBlID0gKF9QTV9oYXZlV2luTlQpID8gX09TX1dJTk5UIDogX09TX1dJTjk1OworCS8qIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyB1bmRlciBXaW5kb3dzIE5UIG9yIG5vdCBhbmQKKwkgKiBzZXQgdGhlIGdsb2JhbCBPUyB0eXBlIHZhcmlhYmxlLgorCSAqLworCV9QTV9oYXZlV2luTlQgPSBmYWxzZTsKKwlpZiAoKEdldFZlcnNpb24oKSAmIDB4ODAwMDAwMDBVTCkgPT0gMCkKKwkgICAgX1BNX2hhdmVXaW5OVCA9IHRydWU7CisJX19fZHJ2X29zX3R5cGUgPSAoX1BNX2hhdmVXaW5OVCkgPyBfT1NfV0lOTlQgOiBfT1NfV0lOOTU7CiAKLSAgICAgICAgLyogTm93IHRyeSB0byBjb25uZWN0IHRvIFNEREhFTFAuVlhEIG9yIFNEREhFTFAuU1lTICovCi0gICAgICAgIF9QTV9oRGV2aWNlID0gQ3JlYXRlRmlsZShTRERIRUxQX01PRFVMRV9QQVRILCAwLDAsMCwgQ1JFQVRFX05FVywgRklMRV9GTEFHX0RFTEVURV9PTl9DTE9TRSwgMCk7Ci0gICAgICAgIGlmIChfUE1faERldmljZSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICAgICAgaWYgKCFEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9HRVRWRVIzMiwgTlVMTCwgMCwKLSAgICAgICAgICAgICAgICAgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSB8fCBvdXRCdWZbMF0gPCBQTUhFTFBfVkVSU0lPTikgewotICAgICAgICAgICAgICAgIC8qIE9sZCB2ZXJzaW9uIG9mIFNEREhFTFAgbG9hZGVkLCBzbyB1c2UgUE1IRUxQIGluc3RlYWQgKi8KLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShfUE1faERldmljZSk7Ci0gICAgICAgICAgICAgICAgX1BNX2hEZXZpY2UgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGlmIChfUE1faERldmljZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICAgICAgLyogRmlyc3QgdHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnRseSBsb2FkZWQgUE1IRUxQIGRyaXZlci4KLSAgICAgICAgICAgICAqIFRoaXMgaXMgdXN1YWxseSB0aGUgY2FzZSB3aGVuIHdlIGFyZSBydW5uaW5nIHVuZGVyIFdpbmRvd3MgTlQvMksuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIF9QTV9oRGV2aWNlID0gQ3JlYXRlRmlsZShQTUhFTFBfTU9EVUxFX1BBVEgsIDAsMCwwLCBDUkVBVEVfTkVXLCBGSUxFX0ZMQUdfREVMRVRFX09OX0NMT1NFLCAwKTsKLSAgICAgICAgICAgIGlmIChfUE1faERldmljZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICAgICAgICAgIC8qIFRoZSBkcml2ZXIgd2FzIG5vdCBzdGF0aWNseSBsb2FkZWQsIHNvIHRyeSBjcmVhdGluZyBhIGZpbGUgaGFuZGxlCi0gICAgICAgICAgICAgICAgICogdG8gYSBkeW5hbWljIHZlcnNpb24gb2YgdGhlIFZ4RCBpZiBwb3NzaWJsZS4gTm90ZSB0aGF0IG9uIFdpbk5ULzJLIHdlCi0gICAgICAgICAgICAgICAgICogY2Fubm90IHN1cHBvcnQgZHluYW1pY2FsbHkgbG9hZGluZyB0aGUgZHJpdmVycy4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBfUE1faERldmljZSA9IENyZWF0ZUZpbGUoUE1IRUxQX1ZYRF9QQVRILCAwLDAsMCwgQ1JFQVRFX05FVywgRklMRV9GTEFHX0RFTEVURV9PTl9DTE9TRSwgMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICBpZiAoX1BNX2hEZXZpY2UgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgICAgIC8qIENhbGwgdGhlIGRyaXZlciB0byBkZXRlcm1pbmUgdGhlIHZlcnNpb24gbnVtYmVyICovCi0gICAgICAgICAgICBpZiAoIURldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dFVFZFUjMyLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwKLSAgICAgICAgICAgICAgICAgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSB8fCBvdXRCdWZbMF0gPCBQTUhFTFBfVkVSU0lPTikgewotICAgICAgICAgICAgICAgIGlmIChfUE1faGF2ZVdpbk5UKQotICAgICAgICAgICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJPbGRlciB2ZXJzaW9uIG9mIFBNSEVMUC5TWVMgZm91bmQhIik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJPbGRlciB2ZXJzaW9uIG9mIFBNSEVMUC5WWEQgZm91bmQhIik7Ci0gICAgICAgICAgICAgICAgfQorCS8qIE5vdyB0cnkgdG8gY29ubmVjdCB0byBTRERIRUxQLlZYRCBvciBTRERIRUxQLlNZUyAqLworCV9QTV9oRGV2aWNlID0gQ3JlYXRlRmlsZShTRERIRUxQX01PRFVMRV9QQVRILCAwLDAsMCwgQ1JFQVRFX05FVywgRklMRV9GTEFHX0RFTEVURV9PTl9DTE9TRSwgMCk7CisJaWYgKF9QTV9oRGV2aWNlICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJICAgIGlmICghRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfR0VUVkVSMzIsIE5VTEwsIDAsCisJCSAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpIHx8IG91dEJ1ZlswXSA8IFBNSEVMUF9WRVJTSU9OKSB7CisJCS8qIE9sZCB2ZXJzaW9uIG9mIFNEREhFTFAgbG9hZGVkLCBzbyB1c2UgUE1IRUxQIGluc3RlYWQgKi8KKwkJQ2xvc2VIYW5kbGUoX1BNX2hEZXZpY2UpOworCQlfUE1faERldmljZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOworCQl9CisJICAgIH0KKwlpZiAoX1BNX2hEZXZpY2UgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkgICAgLyogRmlyc3QgdHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnRseSBsb2FkZWQgUE1IRUxQIGRyaXZlci4KKwkgICAgICogVGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIHdoZW4gd2UgYXJlIHJ1bm5pbmcgdW5kZXIgV2luZG93cyBOVC8ySy4KKwkgICAgICovCisJICAgIF9QTV9oRGV2aWNlID0gQ3JlYXRlRmlsZShQTUhFTFBfTU9EVUxFX1BBVEgsIDAsMCwwLCBDUkVBVEVfTkVXLCBGSUxFX0ZMQUdfREVMRVRFX09OX0NMT1NFLCAwKTsKKwkgICAgaWYgKF9QTV9oRGV2aWNlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCS8qIFRoZSBkcml2ZXIgd2FzIG5vdCBzdGF0aWNseSBsb2FkZWQsIHNvIHRyeSBjcmVhdGluZyBhIGZpbGUgaGFuZGxlCisJCSAqIHRvIGEgZHluYW1pYyB2ZXJzaW9uIG9mIHRoZSBWeEQgaWYgcG9zc2libGUuIE5vdGUgdGhhdCBvbiBXaW5OVC8ySyB3ZQorCQkgKiBjYW5ub3Qgc3VwcG9ydCBkeW5hbWljYWxseSBsb2FkaW5nIHRoZSBkcml2ZXJzLgorCQkgKi8KKwkJX1BNX2hEZXZpY2UgPSBDcmVhdGVGaWxlKFBNSEVMUF9WWERfUEFUSCwgMCwwLDAsIENSRUFURV9ORVcsIEZJTEVfRkxBR19ERUxFVEVfT05fQ0xPU0UsIDApOworCQl9CisJICAgIH0KKwlpZiAoX1BNX2hEZXZpY2UgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkgICAgLyogQ2FsbCB0aGUgZHJpdmVyIHRvIGRldGVybWluZSB0aGUgdmVyc2lvbiBudW1iZXIgKi8KKwkgICAgaWYgKCFEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9HRVRWRVIzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCisJCSAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpIHx8IG91dEJ1ZlswXSA8IFBNSEVMUF9WRVJTSU9OKSB7CisJCWlmIChfUE1faGF2ZVdpbk5UKQorCQkgICAgUE1fZmF0YWxFcnJvcigiT2xkZXIgdmVyc2lvbiBvZiBQTUhFTFAuU1lTIGZvdW5kISIpOworCQllbHNlCisJCSAgICBQTV9mYXRhbEVycm9yKCJPbGRlciB2ZXJzaW9uIG9mIFBNSEVMUC5WWEQgZm91bmQhIik7CisJCX0KIAotICAgICAgICAgICAgLyogTm93IHNldCB0aGUgY3VycmVudCBwYXRoIGluc2lkZSB0aGUgVnhEIHNvIGl0IGtub3dzIHdoYXQgdGhlCi0gICAgICAgICAgICAgKiBjdXJyZW50IGRpcmVjdG9yeSBpcyBmb3IgbG9hZGluZyBOdWNsZXVzIGRyaXZlcnMuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGluQnVmWzBdID0gKHVsb25nKVBNX2dldEN1cnJlbnRQYXRoKGNudFBhdGgsc2l6ZW9mKGNudFBhdGgpKTsKLSAgICAgICAgICAgIGlmICghRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfU0VUQ05UUEFUSDMyLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKLSAgICAgICAgICAgICAgICBQTV9mYXRhbEVycm9yKCJVbmFibGUgdG8gc2V0IFZ4RCBjdXJyZW50IHBhdGghIik7CisJICAgIC8qIE5vdyBzZXQgdGhlIGN1cnJlbnQgcGF0aCBpbnNpZGUgdGhlIFZ4RCBzbyBpdCBrbm93cyB3aGF0IHRoZQorCSAgICAgKiBjdXJyZW50IGRpcmVjdG9yeSBpcyBmb3IgbG9hZGluZyBOdWNsZXVzIGRyaXZlcnMuCisJICAgICAqLworCSAgICBpbkJ1ZlswXSA9ICh1bG9uZylQTV9nZXRDdXJyZW50UGF0aChjbnRQYXRoLHNpemVvZihjbnRQYXRoKSk7CisJICAgIGlmICghRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfU0VUQ05UUEFUSDMyLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKKwkJUE1fZmF0YWxFcnJvcigiVW5hYmxlIHRvIHNldCBWeEQgY3VycmVudCBwYXRoISIpOwogCi0gICAgICAgICAgICAvKiBOb3cgcGFzcyBkb3duIHRoZSBOVUNMRVVTX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGRldmljZQotICAgICAgICAgICAgICogZHJpdmVyIHNvIGl0IGNhbiB1c2UgdGhpcyB2YWx1ZSBpZiBpdCBpcyBmb3VuZC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKChlbnYgPSBnZXRlbnYoIk5VQ0xFVVNfUEFUSCIpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaW5CdWZbMF0gPSAodWxvbmcpZW52OwotICAgICAgICAgICAgICAgIGlmICghRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfU0VUTlVDTEVVU1BBVEgzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCi0gICAgICAgICAgICAgICAgICAgIFBNX2ZhdGFsRXJyb3IoIlVuYWJsZSB0byBzZXQgVnhEIE51Y2xldXMgcGF0aCEiKTsKLSAgICAgICAgICAgICAgICB9CisJICAgIC8qIE5vdyBwYXNzIGRvd24gdGhlIE5VQ0xFVVNfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZGV2aWNlCisJICAgICAqIGRyaXZlciBzbyBpdCBjYW4gdXNlIHRoaXMgdmFsdWUgaWYgaXQgaXMgZm91bmQuCisJICAgICAqLworCSAgICBpZiAoKGVudiA9IGdldGVudigiTlVDTEVVU19QQVRIIikpICE9IE5VTEwpIHsKKwkJaW5CdWZbMF0gPSAodWxvbmcpZW52OworCQlpZiAoIURldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX1NFVE5VQ0xFVVNQQVRIMzIsIGluQnVmLCBzaXplb2YoaW5CdWYpLCBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKQorCQkgICAgUE1fZmF0YWxFcnJvcigiVW5hYmxlIHRvIHNldCBWeEQgTnVjbGV1cyBwYXRoISIpOworCQl9CiAKLSAgICAgICAgICAgIC8qIEVuYWJsZSBJT1BMIGZvciByaW5nLTMgY29kZSBieSBkZWZhdWx0IGlmIGRyaXZlciBpcyBwcmVzZW50ICovCi0gICAgICAgICAgICBpZiAoX1BNX2hhdmVXaW5OVCkKLSAgICAgICAgICAgICAgICBQTV9zZXRJT1BMKDMpOwotICAgICAgICAgICAgfQorCSAgICAvKiBFbmFibGUgSU9QTCBmb3IgcmluZy0zIGNvZGUgYnkgZGVmYXVsdCBpZiBkcml2ZXIgaXMgcHJlc2VudCAqLworCSAgICBpZiAoX1BNX2hhdmVXaW5OVCkKKwkJUE1fc2V0SU9QTCgzKTsKKwkgICAgfQogCi0gICAgICAgIC8qIEluZGljYXRlIHRoYXQgd2UgaGF2ZSBiZWVuIGluaXRpYWxpc2VkICovCi0gICAgICAgIGluaXRlZCA9IHRydWU7Ci0gICAgICAgIH0KKwkvKiBJbmRpY2F0ZSB0aGF0IHdlIGhhdmUgYmVlbiBpbml0aWFsaXNlZCAqLworCWluaXRlZCA9IHRydWU7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTc3LDE0ICsxNzcsMTQgQEAKIAogICAgIC8qIEVuYWJsZSBJL08gYnkgYWRqdXN0aW5nIHRoZSBJL08gcGVybWlzc2lvbnMgbWFwIG9uIFdpbmRvd3MgTlQgKi8KICAgICBpZiAoX1BNX2hhdmVXaW5OVCkgewotICAgICAgICBDSEVDS19GT1JfUE1IRUxQKCk7Ci0gICAgICAgIGlmIChpb3BsID09IDMpCi0gICAgICAgICAgICBEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9FTkFCTEVSSU5HM0lPUEwsIGluQnVmLCBzaXplb2YoaW5CdWYpLG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0RJU0FCTEVSSU5HM0lPUEwsIGluQnVmLCBzaXplb2YoaW5CdWYpLG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCk7Ci0gICAgICAgIGNudElPUEwgPSBpb3BsOwotICAgICAgICByZXR1cm4gb2xkSU9QTDsKLSAgICAgICAgfQorCUNIRUNLX0ZPUl9QTUhFTFAoKTsKKwlpZiAoaW9wbCA9PSAzKQorCSAgICBEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9FTkFCTEVSSU5HM0lPUEwsIGluQnVmLCBzaXplb2YoaW5CdWYpLG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCk7CisJZWxzZQorCSAgICBEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9ESVNBQkxFUklORzNJT1BMLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSxvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpOworCWNudElPUEwgPSBpb3BsOworCXJldHVybiBvbGRJT1BMOworCX0KIAogICAgIC8qIFdlIGFsd2F5cyBoYXZlIElPUEwgb24gV2luZG93cyA5eCAqLwogICAgIHJldHVybiAzOwpAQCAtMTk3LDkgKzE5Nyw5IEBACiBpYm9vbCBQTUFQSSBQTV9oYXZlQklPU0FjY2Vzcyh2b2lkKQogewogICAgIGlmIChQTV9nZXRPU1R5cGUoKSA9PSBfT1NfV0lOTlQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gX1BNX2hEZXZpY2UgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisJcmV0dXJuIF9QTV9oRGV2aWNlICE9IElOVkFMSURfSEFORExFX1ZBTFVFOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjA5LDkgKzIwOSw5IEBACiBsb25nIFBNQVBJIFBNX2dldE9TVHlwZSh2b2lkKQogewogICAgIGlmICgoR2V0VmVyc2lvbigpICYgMHg4MDAwMDAwMFVMKSA9PSAwKQotICAgICAgICByZXR1cm4gX19fZHJ2X29zX3R5cGUgPSBfT1NfV0lOTlQ7CisJcmV0dXJuIF9fX2Rydl9vc190eXBlID0gX09TX1dJTk5UOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIF9fX2Rydl9vc190eXBlID0gX09TX1dJTjk1OworCXJldHVybiBfX19kcnZfb3NfdHlwZSA9IF9PU19XSU45NTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIzMiw5ICsyMzIsOSBAQAogewogICAgIHVpbnQgcG9zID0gc3RybGVuKHMpOwogICAgIGlmIChzW3Bvcy0xXSAhPSAnXFwnKSB7Ci0gICAgICAgIHNbcG9zXSA9ICdcXCc7Ci0gICAgICAgIHNbcG9zKzFdID0gJ1wwJzsKLSAgICAgICAgfQorCXNbcG9zXSA9ICdcXCc7CisJc1twb3MrMV0gPSAnXDAnOworCX0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgIGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBpZiAoZmF0YWxFcnJvckNsZWFudXApCi0gICAgICAgIGZhdGFsRXJyb3JDbGVhbnVwKCk7CisJZmF0YWxFcnJvckNsZWFudXAoKTsKICAgICBNZXNzYWdlQm94KE5VTEwsbXNnLCJGYXRhbCBFcnJvciEiLCBNQl9JQ09ORVhDTEFNQVRJT04pOwogICAgIGV4aXQoMSk7CiB9CkBAIC0yNzksMTkgKzI3OSwxOSBAQAogICAgICAqIG1lbW9yeSBibG9ja3Mgb3V0IG9mIG9yZGVyKS4KICAgICAgKi8KICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBpZiAoIVZFU0FCdWZfcHRyKSB7Ci0gICAgICAgIENIRUNLX0ZPUl9QTUhFTFAoKTsKLSAgICAgICAgaWYgKERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dFVFZFU0FCVUYzMiwgTlVMTCwgMCwKLSAgICAgICAgICAgICAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKSB7Ci0gICAgICAgICAgICBpZiAoIW91dEJ1ZlswXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIFZFU0FCdWZfcHRyID0gKHZvaWQqKW91dEJ1ZlswXTsKLSAgICAgICAgICAgIFZFU0FCdWZfbGVuID0gb3V0QnVmWzFdOwotICAgICAgICAgICAgVkVTQUJ1Zl9yc2VnID0gb3V0QnVmWzJdOwotICAgICAgICAgICAgVkVTQUJ1Zl9yb2ZmID0gb3V0QnVmWzNdOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJQ0hFQ0tfRk9SX1BNSEVMUCgpOworCWlmIChEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9HRVRWRVNBQlVGMzIsIE5VTEwsIDAsCisJCW91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpIHsKKwkgICAgaWYgKCFvdXRCdWZbMF0pCisJCXJldHVybiBOVUxMOworCSAgICBWRVNBQnVmX3B0ciA9ICh2b2lkKilvdXRCdWZbMF07CisJICAgIFZFU0FCdWZfbGVuID0gb3V0QnVmWzFdOworCSAgICBWRVNBQnVmX3JzZWcgPSBvdXRCdWZbMl07CisJICAgIFZFU0FCdWZfcm9mZiA9IG91dEJ1ZlszXTsKKwkgICAgfQorCX0KICAgICAqbGVuID0gVkVTQUJ1Zl9sZW47CiAgICAgKnJzZWcgPSBWRVNBQnVmX3JzZWc7CiAgICAgKnJvZmYgPSBWRVNBQnVmX3JvZmY7CkBAIC00MDUsNyArNDA1LDcgQEAKICAgICBEV09SRCAgIHR5cGU7CiAKICAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGhLZXksKFBDSEFSKXN6VmFsdWUsKFBEV09SRClOVUxMLChQRFdPUkQpJnR5cGUsKExQQllURSl2YWx1ZSwoUERXT1JEKSZzaXplKSA9PSBFUlJPUl9TVUNDRVNTKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTQyNCw5ICs0MjQsOSBAQAogCiAgICAgbWVtc2V0KHZhbHVlLDAsc2l6ZW9mKHZhbHVlKSk7CiAgICAgaWYgKFJlZ09wZW5LZXkoSEtFWV9MT0NBTF9NQUNISU5FLHN6S2V5LCZoS2V5KSA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgIHN0YXR1cyA9IFJFR19xdWVyeVN0cmluZ0V4KGhLZXksc3pWYWx1ZSx2YWx1ZSxzaXplKTsKLSAgICAgICAgUmVnQ2xvc2VLZXkoaEtleSk7Ci0gICAgICAgIH0KKwlzdGF0dXMgPSBSRUdfcXVlcnlTdHJpbmdFeChoS2V5LHN6VmFsdWUsdmFsdWUsc2l6ZSk7CisJUmVnQ2xvc2VLZXkoaEtleSk7CisJfQogICAgIHJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTQ2MCw3ICs0NjAsNyBAQAogICAgIGNoYXIgICAgICAgICplbnY7CiAKICAgICBpZiAoKGVudiA9IGdldGVudigiTlVDTEVVU19QQVRIIikpICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBlbnY7CisJcmV0dXJuIGVudjsKICAgICBHZXRTeXN0ZW1EaXJlY3RvcnkocGF0aCxzaXplb2YocGF0aCkpOwogICAgIHN0cmNhdChwYXRoLCJcXG51Y2xldXMiKTsKICAgICByZXR1cm4gcGF0aDsKQEAgLTQ5Nyw5ICs0OTcsOSBAQAogICAgIHN0YXRpYyBjaGFyIG5hbWVbMjU2XTsKIAogICAgIGlmIChSRUdfcXVlcnlTdHJpbmcoc3pNYWNoaW5lTmFtZUtleSxzek1hY2hpbmVOYW1lLG5hbWUsc2l6ZW9mKG5hbWUpKSkKLSAgICAgICAgcmV0dXJuIG5hbWU7CisJcmV0dXJuIG5hbWU7CiAgICAgaWYgKFJFR19xdWVyeVN0cmluZyhzek1hY2hpbmVOYW1lS2V5TlQsc3pNYWNoaW5lTmFtZSxuYW1lLHNpemVvZihuYW1lKSkpCi0gICAgICAgIHJldHVybiBuYW1lOworCXJldHVybiBuYW1lOwogICAgIHJldHVybiAiVW5rbm93biI7CiB9CiAKQEAgLTUxMCwxMyArNTEwLDEzIEBACiB2b2lkICogUE1BUEkgUE1fZ2V0QklPU1BvaW50ZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX2hhdmVXaW5OVCkgewotICAgICAgICAvKiBPbiBXaW5kb3dzIE5UIHdlIGhhdmUgdG8gbWFwIGl0IHBoeXNpY2FsbHkgZGlyZWN0bHkgKi8KKwkvKiBPbiBXaW5kb3dzIE5UIHdlIGhhdmUgdG8gbWFwIGl0IHBoeXNpY2FsbHkgZGlyZWN0bHkgKi8KIAkgICAgcmV0dXJuIFBNX21hcFBoeXNpY2FsQWRkcigweDQwMCwgMHgxMDAwLCB0cnVlKTsKLSAgICAgICAgfQorCX0KICAgICBlbHNlIHsKLSAgICAgICAgLyogRm9yIFdpbmRvd3MgOXggd2UgY2FuIGFjY2VzcyB0aGlzIG1lbW9yeSBkaXJlY3RseSAqLwotICAgICAgICByZXR1cm4gKHZvaWQqKTB4NDAwOwotICAgICAgICB9CisJLyogRm9yIFdpbmRvd3MgOXggd2UgY2FuIGFjY2VzcyB0aGlzIG1lbW9yeSBkaXJlY3RseSAqLworCXJldHVybiAodm9pZCopMHg0MDA7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTI2LDE2ICs1MjYsMTYgQEAKIHZvaWQgKiBQTUFQSSBQTV9nZXRBMDAwMFBvaW50ZXIodm9pZCkKIHsKICAgICBpZiAoX1BNX2hhdmVXaW5OVCkgewotICAgICAgICAvKiBPbiBXaW5kb3dzIE5UIHdlIGhhdmUgdG8gbWFwIGl0IHBoeXNpY2FsbHkgZGlyZWN0bHkgKi8KKwkvKiBPbiBXaW5kb3dzIE5UIHdlIGhhdmUgdG8gbWFwIGl0IHBoeXNpY2FsbHkgZGlyZWN0bHkgKi8KIAkgICAgcmV0dXJuIFBNX21hcFBoeXNpY2FsQWRkcigweEEwMDAwLCAweDBGRkZGLCBmYWxzZSk7Ci0gICAgICAgIH0KKwl9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIEFsd2F5cyB1c2UgdGhlIDB4QTAwMDAgbGluZWFyIGFkZHJlc3Mgc28gdGhhdCB3ZSB3aWxsIHVzZQotICAgICAgICAgKiB3aGF0ZXZlciBwYWdlIHRhYmxlIG1hcHBpbmdzIGFyZSBzZXQgdXAgZm9yIHVzIChpZTogZm9yIHZpcnR1YWwKLSAgICAgICAgICogYmFuayBzd2l0Y2hpbmcuCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gKHZvaWQqKTB4QTAwMDA7Ci0gICAgICAgIH0KKwkvKiBBbHdheXMgdXNlIHRoZSAweEEwMDAwIGxpbmVhciBhZGRyZXNzIHNvIHRoYXQgd2Ugd2lsbCB1c2UKKwkgKiB3aGF0ZXZlciBwYWdlIHRhYmxlIG1hcHBpbmdzIGFyZSBzZXQgdXAgZm9yIHVzIChpZTogZm9yIHZpcnR1YWwKKwkgKiBiYW5rIHN3aXRjaGluZy4KKwkgKi8KKwlyZXR1cm4gKHZvaWQqKTB4QTAwMDA7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTUyLDE0ICs1NTIsMTQgQEAKICAgICBEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCiAKICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBpbkJ1ZlswXSA9IGJhc2U7CiAgICAgaW5CdWZbMV0gPSBsaW1pdDsKICAgICBpbkJ1ZlsyXSA9IGlzQ2FjaGVkOwogICAgIENIRUNLX0ZPUl9QTUhFTFAoKTsKICAgICBpZiAoRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfTUFQUEhZUzMyLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwKLSAgICAgICAgICAgIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCi0gICAgICAgIHJldHVybiAodm9pZCopb3V0QnVmWzBdOworCSAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKQorCXJldHVybiAodm9pZCopb3V0QnVmWzBdOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC01OTAsMTIgKzU5MCwxMiBAQAogICAgIERXT1JEICAgY291bnQ7ICAgICAgLyogQ291bnQgb2YgYnl0ZXMgcmV0dXJuZWQgZnJvbSBWeEQgKi8KIAogICAgIGlmICghaW5pdGVkKQotICAgICAgICBQTV9pbml0KCk7CisJUE1faW5pdCgpOwogICAgIGluQnVmWzBdID0gKHVsb25nKXA7CiAgICAgQ0hFQ0tfRk9SX1BNSEVMUCgpOwogICAgIGlmIChEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9HRVRQSFlTSUNBTEFERFIzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCi0gICAgICAgICAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKQotICAgICAgICByZXR1cm4gb3V0QnVmWzBdOworCSAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKQorCXJldHVybiBvdXRCdWZbMF07CiAgICAgcmV0dXJuIDB4RkZGRkZGRkZVTDsKIH0KIApAQCAtNjEzLDE0ICs2MTMsMTQgQEAKICAgICBEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCiAKICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBpbkJ1ZlswXSA9ICh1bG9uZylwOwogICAgIGluQnVmWzFdID0gKHVsb25nKWxlbmd0aDsKICAgICBpbkJ1ZlsyXSA9ICh1bG9uZylwaHlzQWRkcmVzczsKICAgICBDSEVDS19GT1JfUE1IRUxQKCk7CiAgICAgaWYgKERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dFVFBIWVNJQ0FMQUREUlJBTkdFMzIsIGluQnVmLCBzaXplb2YoaW5CdWYpLAotICAgICAgICAgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKLSAgICAgICAgcmV0dXJuIG91dEJ1ZlswXTsKKwkgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKKwlyZXR1cm4gb3V0QnVmWzBdOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtNjQwLDE0ICs2NDAsMTQgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgUE1BUEkgUE1fZ2V0Q09NUG9ydChpbnQgcG9ydCkKIHsKLSAgICAvLyBUT0RPOiBSZS1jb2RlIHRoaXMgdG8gZGV0ZXJtaW5lIHJlYWwgdmFsdWVzIHVzaW5nIHRoZSBQbHVnIGFuZCBQbGF5Ci0gICAgLy8gICAgICAgbWFuYWdlciBmb3IgdGhlIE9TLgorICAgIC8qIFRPRE86IFJlLWNvZGUgdGhpcyB0byBkZXRlcm1pbmUgcmVhbCB2YWx1ZXMgdXNpbmcgdGhlIFBsdWcgYW5kIFBsYXkgKi8KKyAgICAvKiAgICAgICBtYW5hZ2VyIGZvciB0aGUgT1MuICovCiAgICAgc3dpdGNoIChwb3J0KSB7Ci0gICAgICAgIGNhc2UgMDogcmV0dXJuIDB4M0Y4OwotICAgICAgICBjYXNlIDE6IHJldHVybiAweDJGODsKLSAgICAgICAgY2FzZSAyOiByZXR1cm4gMHgzRTg7Ci0gICAgICAgIGNhc2UgMzogcmV0dXJuIDB4MkU4OwotICAgICAgICB9CisJY2FzZSAwOiByZXR1cm4gMHgzRjg7CisJY2FzZSAxOiByZXR1cm4gMHgyRjg7CisJY2FzZSAyOiByZXR1cm4gMHgzRTg7CisJY2FzZSAzOiByZXR1cm4gMHgyRTg7CisJfQogICAgIHJldHVybiAwOwogfQogCkBAIC02NTcsMTMgKzY1NywxMyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBQTUFQSSBQTV9nZXRMUFRQb3J0KGludCBwb3J0KQogewotICAgIC8vIFRPRE86IFJlLWNvZGUgdGhpcyB0byBkZXRlcm1pbmUgcmVhbCB2YWx1ZXMgdXNpbmcgdGhlIFBsdWcgYW5kIFBsYXkKLSAgICAvLyAgICAgICBtYW5hZ2VyIGZvciB0aGUgT1MuCisgICAgLyogVE9ETzogUmUtY29kZSB0aGlzIHRvIGRldGVybWluZSByZWFsIHZhbHVlcyB1c2luZyB0aGUgUGx1ZyBhbmQgUGxheSAqLworICAgIC8qICAgICAgIG1hbmFnZXIgZm9yIHRoZSBPUy4gKi8KICAgICBzd2l0Y2ggKHBvcnQpIHsKLSAgICAgICAgY2FzZSAwOiByZXR1cm4gMHgzQkM7Ci0gICAgICAgIGNhc2UgMTogcmV0dXJuIDB4Mzc4OwotICAgICAgICBjYXNlIDI6IHJldHVybiAweDI3ODsKLSAgICAgICAgfQorCWNhc2UgMDogcmV0dXJuIDB4M0JDOworCWNhc2UgMTogcmV0dXJuIDB4Mzc4OworCWNhc2UgMjogcmV0dXJuIDB4Mjc4OworCX0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjg1LDggKzY4NSw4IEBACiAgICAgaW5CdWZbMF0gPSBzaXplOwogICAgIENIRUNLX0ZPUl9QTUhFTFAoKTsKICAgICBpZiAoRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfTUFMTE9DU0hBUkVEMzIsIGluQnVmLCBzaXplb2YoaW5CdWYpLAotICAgICAgICAgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKLSAgICAgICAgcmV0dXJuICh2b2lkKilvdXRCdWZbMF07CisJICAgIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCisJcmV0dXJuICh2b2lkKilvdXRCdWZbMF07CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTc3MiwxMiArNzcyLDEyIEBACiAgICAgRFdPUkQgICBjb3VudDsgICAgICAvKiBDb3VudCBvZiBieXRlcyByZXR1cm5lZCBmcm9tIFZ4RCAqLwogCiAgICAgaWYgKCFpbml0ZWQpCi0gICAgICAgIFBNX2luaXQoKTsKKwlQTV9pbml0KCk7CiAgICAgaW5CdWZbMF0gPSBpbnRubzsKICAgICBpbkJ1ZlsxXSA9ICh1bG9uZylyZWdzOwogICAgIENIRUNLX0ZPUl9QTUhFTFAoKTsKICAgICBEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9EUE1JSU5UODYzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCi0gICAgICAgIE5VTEwsIDAsICZjb3VudCwgTlVMTCk7CisJTlVMTCwgMCwgJmNvdW50LCBOVUxMKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc5NCwxNCArNzk0LDE0IEBACiAgICAgRFdPUkQgICBjb3VudDsgICAgICAvKiBDb3VudCBvZiBieXRlcyByZXR1cm5lZCBmcm9tIFZ4RCAqLwogCiAgICAgaWYgKCFpbml0ZWQpCi0gICAgICAgIFBNX2luaXQoKTsKKwlQTV9pbml0KCk7CiAgICAgaW5CdWZbMF0gPSBpbnRubzsKICAgICBpbkJ1ZlsxXSA9ICh1bG9uZylpbjsKICAgICBpbkJ1ZlsyXSA9ICh1bG9uZylvdXQ7CiAgICAgQ0hFQ0tfRk9SX1BNSEVMUCgpOwogICAgIGlmIChEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9JTlQ4NjMyLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwKLSAgICAgICAgICAgIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCi0gICAgICAgIHJldHVybiBvdXRCdWZbMF07CisJICAgIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCisJcmV0dXJuIG91dEJ1ZlswXTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtODIwLDE1ICs4MjAsMTUgQEAKICAgICBEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCiAKICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBpbkJ1ZlswXSA9IGludG5vOwogICAgIGluQnVmWzFdID0gKHVsb25nKWluOwogICAgIGluQnVmWzJdID0gKHVsb25nKW91dDsKICAgICBpbkJ1ZlszXSA9ICh1bG9uZylzcmVnczsKICAgICBDSEVDS19GT1JfUE1IRUxQKCk7CiAgICAgaWYgKERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0lOVDg2WDMyLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwKLSAgICAgICAgICAgIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCi0gICAgICAgIHJldHVybiBvdXRCdWZbMF07CisJICAgIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCisJcmV0dXJuIG91dEJ1ZlswXTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtODQ2LDE0ICs4NDYsMTQgQEAKICAgICBEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCiAKICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBpbkJ1ZlswXSA9IHNlZzsKICAgICBpbkJ1ZlsxXSA9IG9mZjsKICAgICBpbkJ1ZlsyXSA9ICh1bG9uZylpbjsKICAgICBpbkJ1ZlszXSA9ICh1bG9uZylzcmVnczsKICAgICBDSEVDS19GT1JfUE1IRUxQKCk7CiAgICAgRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfQ0FMTFJFQUxNT0RFMzIsIGluQnVmLCBzaXplb2YoaW5CdWYpLAotICAgICAgICBOVUxMLCAwLCAmY291bnQsIE5VTEwpOworCU5VTEwsIDAsICZjb3VudCwgTlVMTCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04ODMsMTUgKzg4MywxNSBAQAogICAgIERXT1JEICAgY291bnQ7ICAgICAgLyogQ291bnQgb2YgYnl0ZXMgcmV0dXJuZWQgZnJvbSBWeEQgKi8KIAogICAgIGlmICghaW5pdGVkKQotICAgICAgICBQTV9pbml0KCk7CisJUE1faW5pdCgpOwogICAgIGluQnVmWzBdID0gc2l6ZTsKICAgICBpbkJ1ZlsxXSA9ICh1bG9uZylwaHlzQWRkcjsKICAgICBpbkJ1ZlsyXSA9ICh1bG9uZyljb250aWd1b3VzOwogICAgIGluQnVmWzNdID0gKHVsb25nKWJlbG93MTZNOwogICAgIENIRUNLX0ZPUl9QTUhFTFAoKTsKICAgICBpZiAoRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfQUxMT0NMT0NLRUQzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCi0gICAgICAgICAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKQotICAgICAgICByZXR1cm4gKHZvaWQqKW91dEJ1ZlswXTsKKwkgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKKwlyZXR1cm4gKHZvaWQqKW91dEJ1ZlswXTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtOTA4LDEzICs5MDgsMTMgQEAKICAgICBEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCiAKICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBpbkJ1ZlswXSA9ICh1bG9uZylwOwogICAgIGluQnVmWzFdID0gc2l6ZTsKICAgICBpbkJ1ZlsyXSA9IGNvbnRpZ3VvdXM7CiAgICAgQ0hFQ0tfRk9SX1BNSEVMUCgpOwogICAgIERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0ZSRUVMT0NLRUQzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCi0gICAgICAgIE5VTEwsIDAsICZjb3VudCwgTlVMTCk7CisJTlVMTCwgMCwgJmNvdW50LCBOVUxMKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTkyOSwxMiArOTI5LDEyIEBACiAgICAgRFdPUkQgICBjb3VudDsgICAgICAvKiBDb3VudCBvZiBieXRlcyByZXR1cm5lZCBmcm9tIFZ4RCAqLwogCiAgICAgaWYgKCFpbml0ZWQpCi0gICAgICAgIFBNX2luaXQoKTsKKwlQTV9pbml0KCk7CiAgICAgaW5CdWZbMF0gPSBsb2NrZWQ7CiAgICAgQ0hFQ0tfRk9SX1BNSEVMUCgpOwogICAgIGlmIChEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9BTExPQ1BBR0UzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCi0gICAgICAgICAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKQotICAgICAgICByZXR1cm4gKHZvaWQqKW91dEJ1ZlswXTsKKwkgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKKwlyZXR1cm4gKHZvaWQqKW91dEJ1ZlswXTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtOTQ5LDExICs5NDksMTEgQEAKICAgICBEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCiAKICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBpbkJ1ZlswXSA9ICh1bG9uZylwOwogICAgIENIRUNLX0ZPUl9QTUhFTFAoKTsKICAgICBEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9GUkVFUEFHRTMyLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwKLSAgICAgICAgTlVMTCwgMCwgJmNvdW50LCBOVUxMKTsKKwlOVUxMLCAwLCAmY291bnQsIE5VTEwpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTcxLDggKzk3MSw4IEBACiAgICAgaW5CdWZbMl0gPSAodWxvbmcpbGg7CiAgICAgQ0hFQ0tfRk9SX1BNSEVMUCgpOwogICAgIGlmIChEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9MT0NLREFUQVBBR0VTMzIsIGluQnVmLCBzaXplb2YoaW5CdWYpLAotICAgICAgICAgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKLSAgICAgICAgcmV0dXJuIG91dEJ1ZlswXTsKKwkgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKKwlyZXR1cm4gb3V0QnVmWzBdOwogICAgIHJldHVybiAwOwogfQogCkBAIC05OTEsOCArOTkxLDggQEAKICAgICBpbkJ1ZlsyXSA9ICh1bG9uZylsaDsKICAgICBDSEVDS19GT1JfUE1IRUxQKCk7CiAgICAgaWYgKERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX1VOTE9DS0RBVEFQQUdFUzMyLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwKLSAgICAgICAgICAgIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCi0gICAgICAgIHJldHVybiBvdXRCdWZbMF07CisJICAgIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCisJcmV0dXJuIG91dEJ1ZlswXTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTAxMSw4ICsxMDExLDggQEAKICAgICBpbkJ1ZlsyXSA9ICh1bG9uZylsaDsKICAgICBDSEVDS19GT1JfUE1IRUxQKCk7CiAgICAgaWYgKERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0xPQ0tDT0RFUEFHRVMzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCi0gICAgICAgICAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKQotICAgICAgICByZXR1cm4gb3V0QnVmWzBdOworCSAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKQorCXJldHVybiBvdXRCdWZbMF07CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEwMzEsOCArMTAzMSw4IEBACiAgICAgaW5CdWZbMl0gPSAodWxvbmcpbGg7CiAgICAgQ0hFQ0tfRk9SX1BNSEVMUCgpOwogICAgIGlmIChEZXZpY2VJb0NvbnRyb2woX1BNX2hEZXZpY2UsIFBNSEVMUF9VTkxPQ0tDT0RFUEFHRVMzMiwgaW5CdWYsIHNpemVvZihpbkJ1ZiksCi0gICAgICAgICAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKQotICAgICAgICByZXR1cm4gb3V0QnVmWzBdOworCSAgICBvdXRCdWYsIHNpemVvZihvdXRCdWYpLCAmY291bnQsIE5VTEwpKQorCXJldHVybiBvdXRCdWZbMF07CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEwOTksMTQgKzEwOTksMTQgQEAKICAgICBEV09SRCAgIGNvdW50OyAgICAgIC8qIENvdW50IG9mIGJ5dGVzIHJldHVybmVkIGZyb20gVnhEICovCiAKICAgICBpZiAoIWluaXRlZCkKLSAgICAgICAgUE1faW5pdCgpOworCVBNX2luaXQoKTsKICAgICBpbkJ1ZlswXSA9IGJhc2U7CiAgICAgaW5CdWZbMV0gPSBsZW5ndGg7CiAgICAgaW5CdWZbMl0gPSB0eXBlOwogICAgIENIRUNLX0ZPUl9QTUhFTFAoKTsKICAgICBpZiAoRGV2aWNlSW9Db250cm9sKF9QTV9oRGV2aWNlLCBQTUhFTFBfRU5BQkxFTEZCQ09NQjMyLCBpbkJ1Ziwgc2l6ZW9mKGluQnVmKSwKLSAgICAgICAgICAgIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCi0gICAgICAgIHJldHVybiBvdXRCdWZbMF07CisJICAgIG91dEJ1Ziwgc2l6ZW9mKG91dEJ1ZiksICZjb3VudCwgTlVMTCkpCisJcmV0dXJuIG91dEJ1ZlswXTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTExMjEsOCArMTEyMSw4IEBACiAKICAgICBDSEVDS19GT1JfUE1IRUxQKCk7CiAgICAgaWYgKERldmljZUlvQ29udHJvbChfUE1faERldmljZSwgUE1IRUxQX0dFVFBEQjMyLCBOVUxMLCAwLAotICAgICAgICAgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKLSAgICAgICAgcmV0dXJuIG91dEJ1ZlswXTsKKwkgICAgb3V0QnVmLCBzaXplb2Yob3V0QnVmKSwgJmNvdW50LCBOVUxMKSkKKwlyZXR1cm4gb3V0QnVmWzBdOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xMjAxLDE1ICsxMjAxLDE1IEBACiAgICAgbWVtc2V0KGZpbmREYXRhLDAsZmluZERhdGEtPmR3U2l6ZSk7CiAgICAgZmluZERhdGEtPmR3U2l6ZSA9IGR3U2l6ZTsKICAgICBpZiAoYmxrLT5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpCi0gICAgICAgIGZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9SRUFET05MWTsKKwlmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfUkVBRE9OTFk7CiAgICAgaWYgKGJsay0+ZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKLSAgICAgICAgZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX0RJUkVDVE9SWTsKKwlmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfRElSRUNUT1JZOwogICAgIGlmIChibGstPmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9BUkNISVZFKQotICAgICAgICBmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfQVJDSElWRTsKKwlmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfQVJDSElWRTsKICAgICBpZiAoYmxrLT5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfSElEREVOKQotICAgICAgICBmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfSElEREVOOworCWZpbmREYXRhLT5hdHRyaWIgfD0gUE1fRklMRV9ISURERU47CiAgICAgaWYgKGJsay0+ZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1NZU1RFTSkKLSAgICAgICAgZmluZERhdGEtPmF0dHJpYiB8PSBQTV9GSUxFX1NZU1RFTTsKKwlmaW5kRGF0YS0+YXR0cmliIHw9IFBNX0ZJTEVfU1lTVEVNOwogICAgIGZpbmREYXRhLT5zaXplTG8gPSBibGstPm5GaWxlU2l6ZUxvdzsKICAgICBmaW5kRGF0YS0+c2l6ZUhpID0gYmxrLT5uRmlsZVNpemVIaWdoOwogICAgIHN0cm5jcHkoZmluZERhdGEtPm5hbWUsYmxrLT5jRmlsZU5hbWUsUE1fTUFYX1BBVEgpOwpAQCAtMTIyOCw5ICsxMjI4LDkgQEAKICAgICBIQU5ETEUgICAgICAgICAgaGZpbGU7CiAKICAgICBpZiAoKGhmaWxlID0gRmluZEZpcnN0RmlsZShmaWxlbmFtZSwmYmxrKSkgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgY29udmVydEZpbmREYXRhKGZpbmREYXRhLCZibGspOwotICAgICAgICByZXR1cm4gKHZvaWQqKWhmaWxlOwotICAgICAgICB9CisJY29udmVydEZpbmREYXRhKGZpbmREYXRhLCZibGspOworCXJldHVybiAodm9pZCopaGZpbGU7CisJfQogICAgIHJldHVybiBQTV9GSUxFX0lOVkFMSUQ7CiB9CiAKQEAgLTEyNDUsOSArMTI0NSw5IEBACiAgICAgV0lOMzJfRklORF9EQVRBIGJsazsKIAogICAgIGlmIChGaW5kTmV4dEZpbGUoKEhBTkRMRSloYW5kbGUsJmJsaykpIHsKLSAgICAgICAgY29udmVydEZpbmREYXRhKGZpbmREYXRhLCZibGspOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorCWNvbnZlcnRGaW5kRGF0YShmaW5kRGF0YSwmYmxrKTsKKwlyZXR1cm4gdHJ1ZTsKKwl9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMjk1LDggKzEyOTUsOCBAQAogICAgIGNoYXIgKmRpciwKICAgICBpbnQgbGVuKQogewotICAgIC8vIE5UIHN0b3JlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIGRyaXZlIE4gaW4gdGhlIG1hZ2ljIGVudmlyb25tZW50Ci0gICAgLy8gdmFyaWFibGUgPU46IHNvIHdlIHNpbXBseSBsb29rIGZvciB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgIC8qIE5UIHN0b3JlcyB0aGUgY3VycmVudCBkaXJlY3RvcnkgZm9yIGRyaXZlIE4gaW4gdGhlIG1hZ2ljIGVudmlyb25tZW50ICovCisgICAgLyogdmFyaWFibGUgPU46IHNvIHdlIHNpbXBseSBsb29rIGZvciB0aGF0IGVudmlyb25tZW50IHZhcmlhYmxlLiAqLwogICAgIGNoYXIgZW52bmFtZVs0XTsKIAogICAgIGVudm5hbWVbMF0gPSAnPSc7CkBAIC0xMzA0LDE0ICsxMzA0LDE0IEBACiAgICAgZW52bmFtZVsyXSA9ICc6JzsKICAgICBlbnZuYW1lWzNdID0gJ1wwJzsKICAgICBpZiAoR2V0RW52aXJvbm1lbnRWYXJpYWJsZShlbnZuYW1lLGRpcixsZW4pID09IDApIHsKLSAgICAgICAgLy8gVGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yIHRoZSBkcml2ZSBoYXMgbm90IGJlZW4gc2V0IHlldCwgc28KLSAgICAgICAgLy8gc2ltcGx5IHNldCBpdCB0byB0aGUgcm9vdC4KLSAgICAgICAgZGlyWzBdID0gZW52bmFtZVsxXTsKLSAgICAgICAgZGlyWzFdID0gJzonOwotICAgICAgICBkaXJbMl0gPSAnXFwnOwotICAgICAgICBkaXJbM10gPSAnXDAnOwotICAgICAgICBTZXRFbnZpcm9ubWVudFZhcmlhYmxlKGVudm5hbWUsZGlyKTsKLSAgICAgICAgfQorCS8qIFRoZSBjdXJyZW50IGRpcmVjdG9yeSBvciB0aGUgZHJpdmUgaGFzIG5vdCBiZWVuIHNldCB5ZXQsIHNvICovCisJLyogc2ltcGx5IHNldCBpdCB0byB0aGUgcm9vdC4gKi8KKwlkaXJbMF0gPSBlbnZuYW1lWzFdOworCWRpclsxXSA9ICc6JzsKKwlkaXJbMl0gPSAnXFwnOworCWRpclszXSA9ICdcMCc7CisJU2V0RW52aXJvbm1lbnRWYXJpYWJsZShlbnZuYW1lLGRpcik7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTMyNSwxMyArMTMyNSwxMyBAQAogICAgIERXT1JEIGF0dHIgPSAwOwogCiAgICAgaWYgKGF0dHJpYiAmIFBNX0ZJTEVfUkVBRE9OTFkpCi0gICAgICAgIGF0dHIgfD0gRklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7CisJYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9SRUFET05MWTsKICAgICBpZiAoYXR0cmliICYgUE1fRklMRV9BUkNISVZFKQotICAgICAgICBhdHRyIHw9IEZJTEVfQVRUUklCVVRFX0FSQ0hJVkU7CisJYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9BUkNISVZFOwogICAgIGlmIChhdHRyaWIgJiBQTV9GSUxFX0hJRERFTikKLSAgICAgICAgYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9ISURERU47CisJYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9ISURERU47CiAgICAgaWYgKGF0dHJpYiAmIFBNX0ZJTEVfU1lTVEVNKQotICAgICAgICBhdHRyIHw9IEZJTEVfQVRUUklCVVRFX1NZU1RFTTsKKwlhdHRyIHw9IEZJTEVfQVRUUklCVVRFX1NZU1RFTTsKICAgICBTZXRGaWxlQXR0cmlidXRlcygoTFBTVFIpZmlsZW5hbWUsIGF0dHIpOwogfQogCkBAIC0xMzQ2LDEzICsxMzQ2LDEzIEBACiAgICAgdWludCAgICBhdHRyaWIgPSAwOwogCiAgICAgaWYgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkKLSAgICAgICAgYXR0cmliIHw9IFBNX0ZJTEVfUkVBRE9OTFk7CisJYXR0cmliIHw9IFBNX0ZJTEVfUkVBRE9OTFk7CiAgICAgaWYgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9BUkNISVZFKQotICAgICAgICBhdHRyaWIgfD0gUE1fRklMRV9BUkNISVZFOworCWF0dHJpYiB8PSBQTV9GSUxFX0FSQ0hJVkU7CiAgICAgaWYgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9ISURERU4pCi0gICAgICAgIGF0dHJpYiB8PSBQTV9GSUxFX0hJRERFTjsKKwlhdHRyaWIgfD0gUE1fRklMRV9ISURERU47CiAgICAgaWYgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9TWVNURU0pCi0gICAgICAgIGF0dHJpYiB8PSBQTV9GSUxFX1NZU1RFTTsKKwlhdHRyaWIgfD0gUE1fRklMRV9TWVNURU07CiAgICAgcmV0dXJuIGF0dHJpYjsKIH0KIApAQCAtMTM5MywxNyArMTM5MywxNyBAQAogCiAgICAgb2YuY0J5dGVzID0gc2l6ZW9mKG9mKTsKICAgICBpZiAoKGYgPSBPcGVuRmlsZShmaWxlbmFtZSwmb2YsT0ZfUkVBRCkpID09IEhGSUxFX0VSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogICAgIGlmICghR2V0RmlsZVRpbWUoKEhBTkRMRSlmLE5VTEwsTlVMTCwmdXRjVGltZSkpCi0gICAgICAgIGdvdG8gRXhpdDsKKwlnb3RvIEV4aXQ7CiAgICAgaWYgKCFnbVRpbWUpIHsKLSAgICAgICAgaWYgKCFGaWxlVGltZVRvTG9jYWxGaWxlVGltZSgmdXRjVGltZSwmbG9jYWxUaW1lKSkKLSAgICAgICAgICAgIGdvdG8gRXhpdDsKLSAgICAgICAgfQorCWlmICghRmlsZVRpbWVUb0xvY2FsRmlsZVRpbWUoJnV0Y1RpbWUsJmxvY2FsVGltZSkpCisJICAgIGdvdG8gRXhpdDsKKwl9CiAgICAgZWxzZQotICAgICAgICBsb2NhbFRpbWUgPSB1dGNUaW1lOworCWxvY2FsVGltZSA9IHV0Y1RpbWU7CiAgICAgaWYgKCFGaWxlVGltZVRvU3lzdGVtVGltZSgmbG9jYWxUaW1lLCZzeXNUaW1lKSkKLSAgICAgICAgZ290byBFeGl0OworCWdvdG8gRXhpdDsKICAgICB0aW1lLT55ZWFyID0gc3lzVGltZS53WWVhcjsKICAgICB0aW1lLT5tb24gPSBzeXNUaW1lLndNb250aC0xOwogICAgIHRpbWUtPmRheSA9IHN5c1RpbWUud1llYXI7CkBAIC0xNDM0LDcgKzE0MzQsNyBAQAogCiAgICAgb2YuY0J5dGVzID0gc2l6ZW9mKG9mKTsKICAgICBpZiAoKGYgPSBPcGVuRmlsZShmaWxlbmFtZSwmb2YsT0ZfV1JJVEUpKSA9PSBIRklMRV9FUlJPUikKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCXJldHVybiBmYWxzZTsKICAgICBzeXNUaW1lLndZZWFyID0gdGltZS0+eWVhcjsKICAgICBzeXNUaW1lLndNb250aCA9IHRpbWUtPm1vbisxOwogICAgIHN5c1RpbWUud1llYXIgPSB0aW1lLT5kYXk7CkBAIC0xNDQyLDE5ICsxNDQyLDE4IEBACiAgICAgc3lzVGltZS53TWludXRlID0gdGltZS0+bWluOwogICAgIHN5c1RpbWUud1NlY29uZCA9IHRpbWUtPnNlYzsKICAgICBpZiAoIVN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZzeXNUaW1lLCZsb2NhbFRpbWUpKQotICAgICAgICBnb3RvIEV4aXQ7CisJZ290byBFeGl0OwogICAgIGlmICghZ21UaW1lKSB7Ci0gICAgICAgIGlmICghTG9jYWxGaWxlVGltZVRvRmlsZVRpbWUoJmxvY2FsVGltZSwmdXRjVGltZSkpCi0gICAgICAgICAgICBnb3RvIEV4aXQ7Ci0gICAgICAgIH0KKwlpZiAoIUxvY2FsRmlsZVRpbWVUb0ZpbGVUaW1lKCZsb2NhbFRpbWUsJnV0Y1RpbWUpKQorCSAgICBnb3RvIEV4aXQ7CisJfQogICAgIGVsc2UKLSAgICAgICAgdXRjVGltZSA9IGxvY2FsVGltZTsKKwl1dGNUaW1lID0gbG9jYWxUaW1lOwogICAgIGlmICghU2V0RmlsZVRpbWUoKEhBTkRMRSlmLE5VTEwsTlVMTCwmdXRjVGltZSkpCi0gICAgICAgIGdvdG8gRXhpdDsKKwlnb3RvIEV4aXQ7CiAgICAgc3RhdHVzID0gdHJ1ZTsKIAogRXhpdDoKICAgICBDbG9zZUhhbmRsZSgoSEFORExFKWYpOwogICAgIHJldHVybiBzdGF0dXM7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3dpbjMyL3p0aW1lci5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvenRpbWVyLmMKaW5kZXggMzE4OTI5YS4uNWE5MDFhNCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvenRpbWVyLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvcG0vd2luMzIvenRpbWVyLmMKQEAgLTU3LDkgKzU3LDkgQEAKICAgICBMWlRpbWVyT2JqZWN0ICp0bSkKIHsKICAgICBpZiAoaGF2ZVBlcmZvcm1hbmNlQ291bnRlcikKLSAgICAgICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoKExBUkdFX0lOVEVHRVIqKSZ0bS0+c3RhcnQpOworCVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKChMQVJHRV9JTlRFR0VSKikmdG0tPnN0YXJ0KTsKICAgICBlbHNlCi0gICAgICAgIHRtLT5zdGFydC5sb3cgPSB0aW1lR2V0VGltZSgpOworCXRtLT5zdGFydC5sb3cgPSB0aW1lR2V0VGltZSgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzIsMTQgKzcyLDE0IEBACiAgICAgQ1BVX2xhcmdlSW50ZWdlciAgICB0bUxhcCx0bUNvdW50OwogCiAgICAgaWYgKGhhdmVQZXJmb3JtYW5jZUNvdW50ZXIpIHsKLSAgICAgICAgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoKExBUkdFX0lOVEVHRVIqKSZ0bUxhcCk7Ci0gICAgICAgIF9DUFVfZGlmZlRpbWU2NCgmdG0tPnN0YXJ0LCZ0bUxhcCwmdG1Db3VudCk7Ci0gICAgICAgIHJldHVybiBfQ1BVX2NhbGNNaWNyb1NlYygmdG1Db3VudCxjb3VudEZyZXEubG93KTsKLSAgICAgICAgfQorCVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKChMQVJHRV9JTlRFR0VSKikmdG1MYXApOworCV9DUFVfZGlmZlRpbWU2NCgmdG0tPnN0YXJ0LCZ0bUxhcCwmdG1Db3VudCk7CisJcmV0dXJuIF9DUFVfY2FsY01pY3JvU2VjKCZ0bUNvdW50LGNvdW50RnJlcS5sb3cpOworCX0KICAgICBlbHNlIHsKLSAgICAgICAgdG1MYXAubG93ID0gdGltZUdldFRpbWUoKTsKLSAgICAgICAgcmV0dXJuICh0bUxhcC5sb3cgLSB0bS0+c3RhcnQubG93KSAqIDEwMDBMOwotICAgICAgICB9CisJdG1MYXAubG93ID0gdGltZUdldFRpbWUoKTsKKwlyZXR1cm4gKHRtTGFwLmxvdyAtIHRtLT5zdGFydC5sb3cpICogMTAwMEw7CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtOTAsOSArOTAsOSBAQAogICAgIExaVGltZXJPYmplY3QgKnRtKQogewogICAgIGlmIChoYXZlUGVyZm9ybWFuY2VDb3VudGVyKQotICAgICAgICBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigoTEFSR0VfSU5URUdFUiopJnRtLT5lbmQpOworCVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKChMQVJHRV9JTlRFR0VSKikmdG0tPmVuZCk7CiAgICAgZWxzZQotICAgICAgICB0bS0+ZW5kLmxvdyA9IHRpbWVHZXRUaW1lKCk7CisJdG0tPmVuZC5sb3cgPSB0aW1lR2V0VGltZSgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA1LDExICsxMDUsMTEgQEAKICAgICBDUFVfbGFyZ2VJbnRlZ2VyICAgIHRtQ291bnQ7CiAKICAgICBpZiAoaGF2ZVBlcmZvcm1hbmNlQ291bnRlcikgewotICAgICAgICBfQ1BVX2RpZmZUaW1lNjQoJnRtLT5zdGFydCwmdG0tPmVuZCwmdG1Db3VudCk7Ci0gICAgICAgIHJldHVybiBfQ1BVX2NhbGNNaWNyb1NlYygmdG1Db3VudCxjb3VudEZyZXEubG93KTsKLSAgICAgICAgfQorCV9DUFVfZGlmZlRpbWU2NCgmdG0tPnN0YXJ0LCZ0bS0+ZW5kLCZ0bUNvdW50KTsKKwlyZXR1cm4gX0NQVV9jYWxjTWljcm9TZWMoJnRtQ291bnQsY291bnRGcmVxLmxvdyk7CisJfQogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuICh0bS0+ZW5kLmxvdyAtIHRtLT5zdGFydC5sb3cpICogMTAwMEw7CisJcmV0dXJuICh0bS0+ZW5kLmxvdyAtIHRtLT5zdGFydC5sb3cpICogMTAwMEw7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS94MTEvZXZlbnQuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3gxMS9ldmVudC5jCmluZGV4IDIzYjkzODAuLmIzNGJmYWMgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3gxMS9ldmVudC5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3gxMS9ldmVudC5jCkBAIC04Myw3ICs4Myw3IEBACiB7CiAgIHN0YXRpYyB1bnNpZ25lZCBzdGFydHRpbWUgPSAwOwogICBzdHJ1Y3QgdGltZXZhbCB0OwotICAKKwogICBnZXR0aW1lb2ZkYXkoJnQsIE5VTEwpOwogICBpZiAoc3RhcnR0aW1lID09IDApCiAgICAgc3RhcnR0aW1lID0gdC50dl9zZWMgKiAxMDAwICsgKHQudHZfdXNlYy8xMDAwKTsKQEAgLTEwNSwxNCArMTA1LDE0IEBACiBzdGF0aWMgdm9pZCBfRVZUX3B1bXBNZXNzYWdlcyh2b2lkKQogI2VuZGlmCiB7Ci0gIC8vIFRPRE86IFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gcmVhZCBhbGwga2V5Ym9hcmQgYW5kIG1vdXNlCi0gIC8vICAgICAgICAgZXZlbnRzIGZyb20gdGhlIE9TIHNwZWNpZmljIGV2ZW50IHF1ZXVlLCB0cmFuc2xhdGUgdGhlbSBhbmQgcG9zdAotICAvLyAgICAgICAgIHRoZW0gaW50byB0aGUgU2NpVGVjaCBldmVudCBxdWV1ZS4KKyAgLyogVE9ETzogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byByZWFkIGFsbCBrZXlib2FyZCBhbmQgbW91c2UgKi8KKyAgLyogICAgICAgICBldmVudHMgZnJvbSB0aGUgT1Mgc3BlY2lmaWMgZXZlbnQgcXVldWUsIHRyYW5zbGF0ZSB0aGVtIGFuZCBwb3N0ICovCisgIC8qICAgICAgICAgdGhlbSBpbnRvIHRoZSBTY2lUZWNoIGV2ZW50IHF1ZXVlLiAqLwogICBldmVudF90IGV2dDsKICAgWEV2ZW50ICBldjsKICAgc3RhdGljIGludCBvbGRfbXggPSAwLCBvbGRfbXkgPSAwLCBidXRzID0gMCwgYzsKICAgY2hhciBidWZbMl07Ci0gIAorCiAgIHdoaWxlIChYUGVuZGluZyhfRVZUX2RweSkgJiYgWE5leHRFdmVudChfRVZUX2RweSwmZXYpKSB7CiAgICAgZXZ0LndoZW4gPSBfTUdMX2dldFRpY2tzKCk7CiAKQEAgLTEyOSwzNiArMTI5LDM2IEBACiAgICAgICBldnQud2hhdCA9IEVWVF9LRVlVUDsKICAgICAgIGV2dC5tZXNzYWdlID0ga2V5VXBNc2dbY107CiAgICAgICBpZihjb3VudCA8IEVWRU5UUVNJWkUpCi0gICAgICAgIGFkZEV2ZW50KCZldnQpOworCWFkZEV2ZW50KCZldnQpOwogICAgICAga2V5VXBNc2dbY10gPSAwOwogICAgICAgcmVwZWF0S2V5W2NdID0gMDsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgQnV0dG9uUHJlc3M6CiAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRURPV047CiAgICAgICBpZihldi54YnV0dG9uLmJ1dHRvbiA9PSAxKXsKLSAgICAgICAgYnV0cyB8PSBFVlRfTEVGVEJVVDsKLSAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBFVlRfTEVGVEJNQVNLOworCWJ1dHMgfD0gRVZUX0xFRlRCVVQ7CisJZXZ0Lm1lc3NhZ2UgPSBFVlRfTEVGVEJNQVNLOwogICAgICAgfWVsc2UgaWYoZXYueGJ1dHRvbi5idXR0b24gPT0gMil7Ci0gICAgICAgIGJ1dHMgfD0gRVZUX01JRERMRUJVVDsKLSAgICAgICAgZXZ0Lm1lc3NhZ2UgPSBFVlRfTUlERExFQk1BU0s7CisJYnV0cyB8PSBFVlRfTUlERExFQlVUOworCWV2dC5tZXNzYWdlID0gRVZUX01JRERMRUJNQVNLOwogICAgICAgfWVsc2UgaWYoZXYueGJ1dHRvbi5idXR0b24gPT0gMyl7Ci0gICAgICAgIGJ1dHMgfD0gRVZUX1JJR0hUQlVUOwotICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9SSUdIVEJNQVNLOworCWJ1dHMgfD0gRVZUX1JJR0hUQlVUOworCWV2dC5tZXNzYWdlID0gRVZUX1JJR0hUQk1BU0s7CiAgICAgICB9CiAgICAgICBldnQubW9kaWZpZXJzID0gbW9kaWZpZXJzIHwgYnV0czsKLSAgICAgIAorCiAgICAgICBicmVhazsKICAgICBjYXNlIEJ1dHRvblJlbGVhc2U6CiAgICAgICBldnQud2hhdCA9IEVWVF9NT1VTRVVQOwogICAgICAgaWYoZXYueGJ1dHRvbi5idXR0b24gPT0gMSl7Ci0gICAgICAgIGJ1dHMgJj0gfkVWVF9MRUZUQlVUOwotICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9MRUZUQk1BU0s7CisJYnV0cyAmPSB+RVZUX0xFRlRCVVQ7CisJZXZ0Lm1lc3NhZ2UgPSBFVlRfTEVGVEJNQVNLOwogICAgICAgfWVsc2UgaWYoZXYueGJ1dHRvbi5idXR0b24gPT0gMil7Ci0gICAgICAgIGJ1dHMgJj0gfkVWVF9NSURETEVCVVQ7Ci0gICAgICAgIGV2dC5tZXNzYWdlID0gRVZUX01JRERMRUJNQVNLOworCWJ1dHMgJj0gfkVWVF9NSURETEVCVVQ7CisJZXZ0Lm1lc3NhZ2UgPSBFVlRfTUlERExFQk1BU0s7CiAgICAgICB9ZWxzZSBpZihldi54YnV0dG9uLmJ1dHRvbiA9PSAzKXsKLSAgICAgICAgYnV0cyAmPSB+RVZUX1JJR0hUQlVUOwotICAgICAgICBldnQubWVzc2FnZSA9IEVWVF9SSUdIVEJNQVNLOworCWJ1dHMgJj0gfkVWVF9SSUdIVEJVVDsKKwlldnQubWVzc2FnZSA9IEVWVF9SSUdIVEJNQVNLOwogICAgICAgfQogICAgICAgZXZ0Lm1vZGlmaWVycyA9IG1vZGlmaWVycyB8IGJ1dHM7CiAKQEAgLTIyNiw3ICsyMjYsNyBAQAogICBfbW91c2VNb3ZlID0gbW91c2VNb3ZlOwogICBpbml0RXZlbnRRdWV1ZSgpOwogICBtZW1zZXQoa2V5VXBNc2csMCxzaXplb2Yoa2V5VXBNc2cpKTsKLSAgCisKIAogICAvKiBxdWVyeSBzZXJ2ZXIgZm9yIGlucHV0IGV4dGVuc2lvbnMgKi8KICAgcmVzdWx0ID1YUXVlcnlFeHRlbnNpb24oX0VWVF9kcHksIlhJbnB1dEV4dGVuc2lvbiIsJmksJmosJmspOwpAQCAtMjY5LDcgKzI2OSw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdm9pZCBFVlRfcmVzdW1lKHZvaWQpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3Igbm9uIERPUyBzeXN0ZW1zCisgICAgLyogRG8gbm90aGluZyBmb3Igbm9uIERPUyBzeXN0ZW1zICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNzksNyArMjc5LDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIEVWVF9zdXNwZW5kKHZvaWQpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3Igbm9uIERPUyBzeXN0ZW1zCisgICAgLyogRG8gbm90aGluZyBmb3Igbm9uIERPUyBzeXN0ZW1zICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yOTMsNyArMjkzLDcgQEAKICAgICBzaWduYWwoU0lHRlBFLCBTSUdfREZMKTsKICAgICBzaWduYWwoU0lHSU5ULCBTSUdfREZMKTsKIAotICAgIC8vIFRPRE86IERvIGFueSBPUyBzcGVjaWZpYyBjbGVhbnVwIGluIGhlcmUKKyAgICAvKiBUT0RPOiBEbyBhbnkgT1Mgc3BlY2lmaWMgY2xlYW51cCBpbiBoZXJlICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy9wbS96dGltZXIuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3p0aW1lci5jCmluZGV4IDM1MDgxZTkuLjVhY2Y3YjEgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3p0aW1lci5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3BtL3p0aW1lci5jCkBAIC0xMDQsMTIgKzEwNCwxMiBAQAogICAgIGlib29sIGFjY3VyYXRlKQogewogICAgIGlmIChjcHVTcGVlZCA9PSAtMSkgewotICAgICAgICBfX1pUaW1lckluaXQoKTsKKwlfX1pUaW1lckluaXQoKTsKICNpZmRlZiAgX19JTlRFTF9fCi0gICAgICAgIGNwdVNwZWVkID0gQ1BVX2dldFByb2Nlc3NvclNwZWVkSW5IWihhY2N1cmF0ZSk7Ci0gICAgICAgIGhhdmVSRFRTQyA9IENQVV9oYXZlUkRUU0MoKSAmJiAoY3B1U3BlZWQgPiAwKTsKKwljcHVTcGVlZCA9IENQVV9nZXRQcm9jZXNzb3JTcGVlZEluSFooYWNjdXJhdGUpOworCWhhdmVSRFRTQyA9IENQVV9oYXZlUkRUU0MoKSAmJiAoY3B1U3BlZWQgPiAwKTsKICNlbmRpZgotICAgICAgICB9CisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTc0LDExICsxNzQsMTEgQEAKIHsKICNpZmRlZiAgX19JTlRFTF9fCiAgICAgaWYgKGhhdmVSRFRTQykgewotICAgICAgICBfQ1BVX3JlYWRUaW1lU3RhbXAoJnRtLT5zdGFydCk7Ci0gICAgICAgIH0KKwlfQ1BVX3JlYWRUaW1lU3RhbXAoJnRtLT5zdGFydCk7CisJfQogICAgIGVsc2UKICNlbmRpZgotICAgICAgICBfX0xaVGltZXJPbih0bSk7CisJX19MWlRpbWVyT24odG0pOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjEwLDEzICsyMTAsMTMgQEAKICAgICBDUFVfbGFyZ2VJbnRlZ2VyICAgIHRtTGFwLHRtQ291bnQ7CiAKICAgICBpZiAoaGF2ZVJEVFNDKSB7Ci0gICAgICAgIF9DUFVfcmVhZFRpbWVTdGFtcCgmdG1MYXApOwotICAgICAgICBfQ1BVX2RpZmZUaW1lNjQoJnRtLT5zdGFydCwmdG1MYXAsJnRtQ291bnQpOwotICAgICAgICByZXR1cm4gX0NQVV9jYWxjTWljcm9TZWMoJnRtQ291bnQsY3B1U3BlZWQpOwotICAgICAgICB9CisJX0NQVV9yZWFkVGltZVN0YW1wKCZ0bUxhcCk7CisJX0NQVV9kaWZmVGltZTY0KCZ0bS0+c3RhcnQsJnRtTGFwLCZ0bUNvdW50KTsKKwlyZXR1cm4gX0NQVV9jYWxjTWljcm9TZWMoJnRtQ291bnQsY3B1U3BlZWQpOworCX0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIF9fTFpUaW1lckxhcCh0bSk7CisJcmV0dXJuIF9fTFpUaW1lckxhcCh0bSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNDQsMTEgKzI0NCwxMSBAQAogewogI2lmZGVmICBfX0lOVEVMX18KICAgICBpZiAoaGF2ZVJEVFNDKSB7Ci0gICAgICAgIF9DUFVfcmVhZFRpbWVTdGFtcCgmdG0tPmVuZCk7Ci0gICAgICAgIH0KKwlfQ1BVX3JlYWRUaW1lU3RhbXAoJnRtLT5lbmQpOworCX0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgX19MWlRpbWVyT2ZmKHRtKTsKKwlfX0xaVGltZXJPZmYodG0pOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjc4LDEyICsyNzgsMTIgQEAKICAgICBDUFVfbGFyZ2VJbnRlZ2VyICAgIHRtQ291bnQ7CiAKICAgICBpZiAoaGF2ZVJEVFNDKSB7Ci0gICAgICAgIF9DUFVfZGlmZlRpbWU2NCgmdG0tPnN0YXJ0LCZ0bS0+ZW5kLCZ0bUNvdW50KTsKLSAgICAgICAgcmV0dXJuIF9DUFVfY2FsY01pY3JvU2VjKCZ0bUNvdW50LGNwdVNwZWVkKTsKLSAgICAgICAgfQorCV9DUFVfZGlmZlRpbWU2NCgmdG0tPnN0YXJ0LCZ0bS0+ZW5kLCZ0bUNvdW50KTsKKwlyZXR1cm4gX0NQVV9jYWxjTWljcm9TZWMoJnRtQ291bnQsY3B1U3BlZWQpOworCX0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIF9fTFpUaW1lckNvdW50KHRtKTsKKwlyZXR1cm4gX19MWlRpbWVyQ291bnQodG0pOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTE0LDQgKzUxNCwzIEBACiB2b2lkIFpBUEkgVUxaVGltZXJSZXNvbHV0aW9uKAogCXVsb25nICpyZXNvbHV0aW9uKQogeyAqcmVzb2x1dGlvbiA9IFVMWlRJTUVSX1JFU09MVVRJT047IH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9Bc21NYWNyb3MuaCBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvQXNtTWFjcm9zLmgKaW5kZXggZTgyNDI5OS4uNzdjNTQ1YSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9Bc21NYWNyb3MuaAorKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL0FzbU1hY3Jvcy5oCkBAIC0yLDI0ICsyLDI0IEBACiAvKgogICogKGMpIENvcHlyaWdodCAxOTkzLDE5OTQgYnkgRGF2aWQgV2V4ZWxibGF0IDxkd2V4QHhmcmVlODYub3JnPgogICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIAotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIAotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQogICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKICAqCiAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKiAKKyAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgCi0gKiBEQVZJRCBXRVhFTEJMQVQgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCAKLSAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgCi0gKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBEQVZJRCBXRVhFTEJMQVQgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCi0gKiAKKyAqCiAgKiBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBEYXZpZCBXZXhlbGJsYXQgc2hhbGwgbm90IGJlCiAgKiB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MKICAqIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSBEYXZpZCBXZXhlbGJsYXQuCkBAIC0yOCwzMiArMjgsMzIgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMTk5NwogICogRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB1bmRlciBsaWNlbnNlIGFuZCBtYXkgYmUgdXNlZCBhbmQgY29waWVkIG9ubHkgaW4gCi0gKiBhY2NvcmRhbmNlIHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFN1YmplY3QgdG8gdGhlc2UgCi0gKiBjb25kaXRpb25zLCB5b3UgbWF5IGRvd25sb2FkLCBjb3B5LCBpbnN0YWxsLCB1c2UsIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSAKLSAqIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIGFuZC9vciBiaW5hcnkgZm9ybS4gTm8gdGl0bGUgb3Igb3duZXJzaGlwIGlzIAorICogVGhpcyBzb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdW5kZXIgbGljZW5zZSBhbmQgbWF5IGJlIHVzZWQgYW5kIGNvcGllZCBvbmx5IGluCisgKiBhY2NvcmRhbmNlIHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFN1YmplY3QgdG8gdGhlc2UKKyAqIGNvbmRpdGlvbnMsIHlvdSBtYXkgZG93bmxvYWQsIGNvcHksIGluc3RhbGwsIHVzZSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlCisgKiB0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBhbmQvb3IgYmluYXJ5IGZvcm0uIE5vIHRpdGxlIG9yIG93bmVyc2hpcCBpcwogICogdHJhbnNmZXJyZWQgaGVyZWJ5LgogICoKLSAqIDEpIEFueSBzb3VyY2UgY29kZSB1c2VkLCBtb2RpZmllZCBvciBkaXN0cmlidXRlZCBtdXN0IHJlcHJvZHVjZSBhbmQgcmV0YWluIAorICogMSkgQW55IHNvdXJjZSBjb2RlIHVzZWQsIG1vZGlmaWVkIG9yIGRpc3RyaWJ1dGVkIG11c3QgcmVwcm9kdWNlIGFuZCByZXRhaW4KICAqICAgIHRoaXMgY29weXJpZ2h0IG5vdGljZSBhbmQgbGlzdCBvZiBjb25kaXRpb25zIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBzb3VyY2UKICAqICAgIGZpbGUuCiAgKgotICogMikgTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB1c2UgYW55IHRyYWRlIG5hbWUsIHRyYWRlbWFyaywgb3IgbG9nbyBvZiBEaWdpdGFsIAotICogICAgRXF1aXBtZW50IENvcnBvcmF0aW9uLiBOZWl0aGVyIHRoZSAiRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24iIG5hbWUgCi0gKiAgICBub3IgYW55IHRyYWRlbWFyayBvciBsb2dvIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG1heSBiZSB1c2VkIAotICogICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgdGhlIAorICogMikgTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB1c2UgYW55IHRyYWRlIG5hbWUsIHRyYWRlbWFyaywgb3IgbG9nbyBvZiBEaWdpdGFsCisgKiAgICBFcXVpcG1lbnQgQ29ycG9yYXRpb24uIE5laXRoZXIgdGhlICJEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiIgbmFtZQorICogICAgbm9yIGFueSB0cmFkZW1hcmsgb3IgbG9nbyBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBtYXkgYmUgdXNlZAorICogICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgdGhlCiAgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCiAgKgotICogMykgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMtSVMiIGFuZCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnRpZXMsIAotICogICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bywgYW55IGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIAotICogICAgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG9yIG5vbi1pbmZyaW5nZW1lbnQgYXJlIGRpc2NsYWltZWQuIEluIAotICogICAgbm8gZXZlbnQgc2hhbGwgRElHSVRBTCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGFuZCBpbiAKLSAqICAgIHBhcnRpY3VsYXIsIERJR0lUQUwgc2hhbGwgbm90IGJlIGxpYWJsZSBmb3Igc3BlY2lhbCwgaW5kaXJlY3QsIAotICogICAgY29uc2VxdWVudGlhbCwgb3IgaW5jaWRlbnRhbCBkYW1hZ2VzIG9yIGRhbWFnZXMgZm9yIAotICogICAgbG9zdCBwcm9maXRzLCBsb3NzIG9mIHJldmVudWUgb3IgbG9zcyBvZiB1c2UsIHdoZXRoZXIgc3VjaCBkYW1hZ2VzIGFyaXNlIAotICogICAgaW4gY29udHJhY3QsIAotICogICAgbmVnbGlnZW5jZSwgdG9ydCwgdW5kZXIgc3RhdHV0ZSwgaW4gZXF1aXR5LCBhdCBsYXcgb3Igb3RoZXJ3aXNlLCBldmVuIGlmIAotICogICAgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuIAorICogMykgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMtSVMiIGFuZCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnRpZXMsCisgKiAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvLCBhbnkgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwKKyAqICAgIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBvciBub24taW5mcmluZ2VtZW50IGFyZSBkaXNjbGFpbWVkLiBJbgorICogICAgbm8gZXZlbnQgc2hhbGwgRElHSVRBTCBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGFuZCBpbgorICogICAgcGFydGljdWxhciwgRElHSVRBTCBzaGFsbCBub3QgYmUgbGlhYmxlIGZvciBzcGVjaWFsLCBpbmRpcmVjdCwKKyAqICAgIGNvbnNlcXVlbnRpYWwsIG9yIGluY2lkZW50YWwgZGFtYWdlcyBvciBkYW1hZ2VzIGZvcgorICogICAgbG9zdCBwcm9maXRzLCBsb3NzIG9mIHJldmVudWUgb3IgbG9zcyBvZiB1c2UsIHdoZXRoZXIgc3VjaCBkYW1hZ2VzIGFyaXNlCisgKiAgICBpbiBjb250cmFjdCwKKyAqICAgIG5lZ2xpZ2VuY2UsIHRvcnQsIHVuZGVyIHN0YXR1dGUsIGluIGVxdWl0eSwgYXQgbGF3IG9yIG90aGVyd2lzZSwgZXZlbiBpZgorICogICAgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuCiAgKgogICovCiAKQEAgLTM1Niw4ICszNTYsOCBAQAogewogICB1bnNpZ25lZCBpbnQgcmV0OwogICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiaW4lQjAgKCUxKSIgOgotICAgICAgICAgICAgICAgICAgICI9YSIgKHJldCkgOgotICAgICAgICAgICAgICAgICAgICJkIiAocG9ydCkpOworCQkgICAiPWEiIChyZXQpIDoKKwkJICAgImQiIChwb3J0KSk7CiAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTM2Nyw4ICszNjcsOCBAQAogewogICB1bnNpZ25lZCBpbnQgcmV0OwogICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiaW4lVzAgKCUxKSIgOgotICAgICAgICAgICAgICAgICAgICI9YSIgKHJldCkgOgotICAgICAgICAgICAgICAgICAgICJkIiAocG9ydCkpOworCQkgICAiPWEiIChyZXQpIDoKKwkJICAgImQiIChwb3J0KSk7CiAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTM3OCw4ICszNzgsOCBAQAogewogICB1bnNpZ25lZCBpbnQgcmV0OwogICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiaW4lTDAgKCUxKSIgOgotICAgICAgICAgICAgICAgICAgICI9YSIgKHJldCkgOgotICAgICAgICAgICAgICAgICAgICJkIiAocG9ydCkpOworCQkgICAiPWEiIChyZXQpIDoKKwkJICAgImQiIChwb3J0KSk7CiAgIHJldHVybiByZXQ7CiB9CiAKQEAgLTM5NSw3ICszOTUsNyBAQAogI2RlZmluZSBpbnRyX2Rpc2FibGUoKQogI2RlZmluZSBpbnRyX2VuYWJsZSgpCiAKLSNlbHNlIAorI2Vsc2UKIAogc3RhdGljIF9faW5saW5lX18gdm9pZAogaW50cl9kaXNhYmxlKCkKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvUkVBRE1FIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9SRUFETUUKaW5kZXggNGI3ZDBmYS4uY2I2NTY3NCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9SRUFETUUKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9SRUFETUUKQEAgLTIsMTIgKzIsMTIgQEAKIFRoaXMgaXMgYSBwcmVsaW1pbmFyeSB2ZXJzaW9uIG9mIGEgVkdBIHNvZnRib290ZXIgZm9yIExJTlVYLgogCiBJdCBtYWtlcyB1c2Ugb2YgdGhlIG9mIHRoZSB2bTg2KCkgY2FsbCBhbmQgaXMgdGhlcmVmb3JlIG9ubHkKLXVzYWJsZSBvbiBpeDg2IHN5c3RlbXMuIAordXNhYmxlIG9uIGl4ODYgc3lzdGVtcy4KIFRoZXJlIGFyZSBwbGFucyB0byBwb3J0IHRoaXMgcHJvZ3JhbSB0byB1c2UgYSB4ODYgZW11bGF0b3IKIGxpa2UgeDg2ZW11LiBBbHNvIGl0IG1heSBiZSBwb3J0ZWQgdG8gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuCiAKIFNvIGZhciBpdCBoYXMgYmVlbiB0ZXN0ZWQgb24gYSBzbWFsbCBudW1iZXIgb2YgY2FyZHMuIEl0IG1pZ2h0Ci13ZWxsIGJlIHRoYXQgaXQgd2lsbCBmYWlsIG9uIHlvdXIgY2FyZC4gCit3ZWxsIGJlIHRoYXQgaXQgd2lsbCBmYWlsIG9uIHlvdXIgY2FyZC4KIAogSWYgeW91IG5lZWQgdG8gbWFrZSBtb2RpZmljYXRpb25zIHRvIHRoZSBwcm9ncmFtcyB0byBiZSBhYmxlCiB0byBib290IHlvdXIgY2FyZCBwbGVhc2UgbGV0IHRoZSBhdXRob3Iga25vdy4KQEAgLTE2LDIwICsxNiwxNyBAQAogdG8gYmUgaGFyZGNvZGVkLiBZb3UgY2FuIGRvIHRoaXMgYnkgZWRpdGluZyBkZWJ1Zy5oLiBZb3UgY2FuCiB0dXJuIG9uIGEgYnVuY2ggb2YgZGVidWcgb3V0cHV0LiBPdGhlciBvcHRpb25zIGFsbG93IHlvdSB0bwogYm9vdCB0aGUgcHJpbWFyeSBjYXJkIChDT05GSUdfQUNUSVZFX0RFVklDRSksIHNhdmUgdGhlIGJpb3MKLXRvIGEgZmlsZSAoU0FWRV9CSU9TKSwgYW5kIG1hcCB0aGUgb3JpZ2luYWwgc3lzdGVtIGJpb3MgCit0byBhIGZpbGUgKFNBVkVfQklPUyksIGFuZCBtYXAgdGhlIG9yaWdpbmFsIHN5c3RlbSBiaW9zCiAoTUFQX1NZU19CSU9TKS4KIAogVGhlIGF1dGhvciB3YW50cyB0byB0aGFuawogIEhhbnMgTGVybWVuICAgKGRvc2VtdSkKICBhbmQKICBLZW5kYWxsIEJlbm5ldHQgKHg4NmVtdSkKLWZvciB0aGVpciBzdXBwb3J0LiAKK2ZvciB0aGVpciBzdXBwb3J0LgogCiBQYXJ0cyBvZiB0aGUgY29kZSAtIGVzcGVjaWFsbHkgaW4gdjg2LmMgYW5kIGlvLmMgLSBhcmUgYmFzZWQgb24gY29kZQogdGFrZW4gZnJvbSBkb3NlbXUuIFBhcnRzIG9mIHRoZSBjb2RlIGluIGludC5jIGFyZSBiYXNlZCBvbiBjb2RlIHRha2VuCiBmcm9tIHg4NmVtdQogCiBFZ2JlcnQgRWljaC4gIDxFZ2JlcnQuRWljaEBQaHlzaWsuVFUtRGFybXN0YWR0LkRFPgotCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9jYmlvcy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9jYmlvcy5jCmluZGV4IDQxNzNjOTUuLjZiMTJkZmYgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvY2Jpb3MuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL2NiaW9zLmMKQEAgLTU3LDE4ICs1NywxOCBAQAogICAgIENvbmZpZy5Jb1N0YXRpc3RpY3MgPSBJT19TVEFUSVNUSUNTOwogICAgIENvbmZpZy5QcmludElycSA9IFBSSU5UX0lSUTsKICAgICBDb25maWcuUHJpbnRQY2kgPSBQUklOVF9QQ0k7Ci0gICAgQ29uZmlnLlNob3dBbGxEZXYgPSBTSE9XX0FMTF9ERVY7ICAgICAgICAKLSAgICBDb25maWcuUHJpbnRJcCA9IFBSSU5UX0lQOyAgICAgICAgICAgCi0gICAgQ29uZmlnLlNhdmVCaW9zID0gU0FWRV9CSU9TOyAgICAgICAgICAKLSAgICBDb25maWcuVHJhY2UgPSBUUkFDRTsgICAgICAgICAgICAgCi0gICAgQ29uZmlnLkNvbmZpZ0FjdGl2ZU9ubHkgPSBDT05GSUdfQUNUSVZFX09OTFk7ICAKKyAgICBDb25maWcuU2hvd0FsbERldiA9IFNIT1dfQUxMX0RFVjsKKyAgICBDb25maWcuUHJpbnRJcCA9IFBSSU5UX0lQOworICAgIENvbmZpZy5TYXZlQmlvcyA9IFNBVkVfQklPUzsKKyAgICBDb25maWcuVHJhY2UgPSBUUkFDRTsKKyAgICBDb25maWcuQ29uZmlnQWN0aXZlT25seSA9IENPTkZJR19BQ1RJVkVfT05MWTsKICAgICBDb25maWcuQ29uZmlnQWN0aXZlRGV2aWNlID0gQ09ORklHX0FDVElWRV9ERVZJQ0U7Ci0gICAgQ29uZmlnLk1hcFN5c0Jpb3MgPSBNQVBfU1lTX0JJT1M7ICAgICAgICAKLSAgICBDb25maWcuUmVzb3J0ID0gUkVTT1JUOyAgICAgICAgICAgIAotICAgIENvbmZpZy5GaXhSb20gPSBGSVhfUk9NOyAgICAgICAgICAgIAotICAgIENvbmZpZy5Ob0NvbnNvbGUgPSBOT19DT05TT0xFOyAgICAgICAgIAorICAgIENvbmZpZy5NYXBTeXNCaW9zID0gTUFQX1NZU19CSU9TOworICAgIENvbmZpZy5SZXNvcnQgPSBSRVNPUlQ7CisgICAgQ29uZmlnLkZpeFJvbSA9IEZJWF9ST007CisgICAgQ29uZmlnLk5vQ29uc29sZSA9IE5PX0NPTlNPTEU7CiAgICAgQ29uZmlnLlZlcmJvc2UgPSBWRVJCT1NFOwotICAgIAorCiAgICAgaWYgKCFtYXAoKSkKICAgICBleGl0KDEpOwogICAgIGlmICghY29weV9zeXNfYmlvcygpKQpAQCAtNzksNyArNzksNyBAQAogICAgIGV4aXQoMSk7CiAgICAgaWYgKCFjb3B5X3ZiaW9zKHZiaW9zX2Jhc2UpKQogICAgIGV4aXQoMSk7Ci0gICAgCisKICAgICBpb3BsKDMpOwogICAgIHNldHVwX2lvKCk7CiAgICAgcnVuQklPUyhhcmdjLGFyZ3YpOwpAQCAtOTEsMTggKzkxLDE4IEBACiAgICAgZXhpdCAoMSk7CiB9CiAKLWludCAgCitpbnQKIG1hcCh2b2lkKQogewogICAgIHZvaWQqIG1lbTsKIAogICAgIG1lbSA9IG1tYXAoMCwgKHNpemVfdClTSVpFLAotICAgICAgICAgICAgICAgUFJPVF9FWEVDIHwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLSAgICAgICAgICAgICAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFIHwgTUFQX0FOT04sCi0gICAgICAgICAgICAgICAtMSwgMCApOyAKKwkgICAgICAgUFJPVF9FWEVDIHwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkgICAgICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwKKwkgICAgICAgLTEsIDAgKTsKICAgICBpZiAobWVtICE9IDApIHsKLSAgICAgICAgcGVycm9yKCJhbm9ueW1vdXMgbWFwIik7Ci0gICAgICAgIHJldHVybiAoMCk7CisJcGVycm9yKCJhbm9ueW1vdXMgbWFwIik7CisJcmV0dXJuICgwKTsKICAgICB9CiAgICAgbWVtc2V0KG1lbSwwLFNJWkUpOwogCkBAIC0xMTcsMTQgKzExNywxNCBAQAogICAgIGludCBtZW1fZmQ7CiAKICAgICBpZiAoKG1lbV9mZCA9IG9wZW4oTUVNX0ZJTEUsT19SRE9OTFkpKTwwKSB7Ci0gICAgICAgIHBlcnJvcigib3BlbmluZyBtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuICgwKTsKKwlwZXJyb3IoIm9wZW5pbmcgbWVtb3J5Iik7CisJcmV0dXJuICgwKTsKICAgICB9Ci0gIAotICAgIGlmIChsc2VlayhtZW1fZmQsKG9mZl90KSBTWVNfQklPUyxTRUVLX1NFVCkgIT0gKG9mZl90KSBTWVNfQklPUykgCi0gICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgaWYgKHJlYWQobWVtX2ZkLCAoY2hhciAqKVNZU19CSU9TLCAoc2l6ZV90KSAweEZGRkYpICE9IChzaXplX3QpIDB4RkZGRikgCi0gICAgICAgIGdvdG8gRXJyb3I7CisKKyAgICBpZiAobHNlZWsobWVtX2ZkLChvZmZfdCkgU1lTX0JJT1MsU0VFS19TRVQpICE9IChvZmZfdCkgU1lTX0JJT1MpCisJZ290byBFcnJvcjsKKyAgICBpZiAocmVhZChtZW1fZmQsIChjaGFyICopU1lTX0JJT1MsIChzaXplX3QpIDB4RkZGRikgIT0gKHNpemVfdCkgMHhGRkZGKQorCWdvdG8gRXJyb3I7CiAKICAgICBjbG9zZShtZW1fZmQpOwogICAgIHJldHVybiAoMSk7CkBAIC0xNDEsMzMgKzE0MSwzMyBAQAogICAgIGludCBtZW1fZmQ7CiAKICNpZmRlZiBfX2lhNjRfXwotICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JEV1IgfCBPX1NZTkMpKTwwKSAKKyAgICBpZiAoKG1lbV9mZCA9IG9wZW4oTUVNX0ZJTEUsT19SRFdSIHwgT19TWU5DKSk8MCkKICNlbHNlCi0gICAgaWYgKChtZW1fZmQgPSBvcGVuKE1FTV9GSUxFLE9fUkRXUikpPDApIAorICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JEV1IpKTwwKQogI2VuZGlmCiAgICAgICB7Ci0gICAgICAgIHBlcnJvcigib3BlbmluZyBtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuIDA7CisJcGVycm9yKCJvcGVuaW5nIG1lbW9yeSIpOworCXJldHVybiAwOwogICAgIH0KIAogI2lmbmRlZiBfX2FscGhhX18KICAgICBpZiAobW1hcCgodm9pZCAqKSBWUkFNX1NUQVJULCAoc2l6ZV90KSBWUkFNX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICBQUk9UX0VYRUMgfCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVELAotICAgICAgICAgICAgICAgICAgICAgbWVtX2ZkLCBWUkFNX1NUQVJUKSA9PSAodm9pZCAqKSAtMSkgCisJCSAgICAgUFJPVF9FWEVDIHwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCB8IE1BUF9GSVhFRCwKKwkJICAgICBtZW1fZmQsIFZSQU1fU1RBUlQpID09ICh2b2lkICopIC0xKQogI2Vsc2UKLSAgICAgICAgIGlmICghX2J1c19iYXNlKCkpIHNwYXJzZV9zaGlmdCA9IDc7IC8qIFVoLCBvaCwgSkVOU0VOLi4uICovCi0gICAgICAgICBpZiAoIV9idXNfYmFzZV9zcGFyc2UoKSkgc3BhcnNlX3NoaWZ0ID0gMDsKLSAgICAgICAgIGlmICgodnJhbV9tYXAgPSBtbWFwKDAsKHNpemVfdCkgKFZSQU1fU0laRSA8PCBzcGFyc2Vfc2hpZnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1NIQVJFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1fZmQsIChWUkFNX1NUQVJUIDw8IHNwYXJzZV9zaGlmdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IF9idXNfYmFzZV9zcGFyc2UoKSkpID09ICh2b2lkICopIC0xKQorCSBpZiAoIV9idXNfYmFzZSgpKSBzcGFyc2Vfc2hpZnQgPSA3OyAvKiBVaCwgb2gsIEpFTlNFTi4uLiAqLworCSBpZiAoIV9idXNfYmFzZV9zcGFyc2UoKSkgc3BhcnNlX3NoaWZ0ID0gMDsKKwkgaWYgKCh2cmFtX21hcCA9IG1tYXAoMCwoc2l6ZV90KSAoVlJBTV9TSVpFIDw8IHNwYXJzZV9zaGlmdCksCisJCQkJCQkgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkJCQkJCSBNQVBfU0hBUkVELAorCQkJCQkJIG1lbV9mZCwgKFZSQU1fU1RBUlQgPDwgc3BhcnNlX3NoaWZ0KQorCQkJCQkJIHwgX2J1c19iYXNlX3NwYXJzZSgpKSkgPT0gKHZvaWQgKikgLTEpCiAjZW5kaWYKICAgICAgIHsKLSAgICAgICAgcGVycm9yKCJtbWFwIGVycm9yIGluIG1hcF9oYXJkd2FyZV9yYW0iKTsKLSAgICAgICAgICAgIGNsb3NlKG1lbV9mZCk7Ci0gICAgICAgICAgICByZXR1cm4gKDApOwotICAgICAgICB9CisJcGVycm9yKCJtbWFwIGVycm9yIGluIG1hcF9oYXJkd2FyZV9yYW0iKTsKKwkgICAgY2xvc2UobWVtX2ZkKTsKKwkgICAgcmV0dXJuICgwKTsKKwl9CiAgICAgdnJhbV9tYXBwZWQgPSAxOwogICAgIGNsb3NlKG1lbV9mZCk7CiAgICAgcmV0dXJuICgxKTsKQEAgLTE4MSwzOSArMTgxLDM5IEBACiAgICAgaW50IHNpemU7CiAKICAgICBpZiAoKG1lbV9mZCA9IG9wZW4oTUVNX0ZJTEUsT19SRE9OTFkpKTwwKSB7Ci0gICAgICAgIHBlcnJvcigib3BlbmluZyBtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuICgwKTsKKwlwZXJyb3IoIm9wZW5pbmcgbWVtb3J5Iik7CisJcmV0dXJuICgwKTsKICAgICB9CiAKLSAgICBpZiAobHNlZWsobWVtX2ZkLChvZmZfdCkgdl9iYXNlLCBTRUVLX1NFVCkgIT0gKG9mZl90KSB2X2Jhc2UpIHsgCi0gICAgICAgICAgZnByaW50ZihzdGRlcnIsIkNhbm5vdCBsc2Vla1xuIik7Ci0gICAgICAgICAgZ290byBFcnJvcjsKKyAgICBpZiAobHNlZWsobWVtX2ZkLChvZmZfdCkgdl9iYXNlLCBTRUVLX1NFVCkgIT0gKG9mZl90KSB2X2Jhc2UpIHsKKwkgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgbHNlZWtcbiIpOworCSAgZ290byBFcnJvcjsKICAgICAgIH0KICAgICB0bXAgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYygzKTsKICAgICBpZiAocmVhZChtZW1fZmQsIChjaGFyICopdG1wLCAoc2l6ZV90KSAzKSAhPSAoc2l6ZV90KSAzKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQ2Fubm90IHJlYWRcbiIpOwotICAgICAgICBnb3RvIEVycm9yOworCSAgICBmcHJpbnRmKHN0ZGVyciwiQ2Fubm90IHJlYWRcbiIpOworCWdvdG8gRXJyb3I7CiAgICAgfQotICAgIGlmIChsc2VlayhtZW1fZmQsKG9mZl90KSB2X2Jhc2UsU0VFS19TRVQpICE9IChvZmZfdCkgdl9iYXNlKSAKLSAgICAgICAgZ290byBFcnJvcjsKKyAgICBpZiAobHNlZWsobWVtX2ZkLChvZmZfdCkgdl9iYXNlLFNFRUtfU0VUKSAhPSAob2ZmX3QpIHZfYmFzZSkKKwlnb3RvIEVycm9yOwogCiAgICAgaWYgKCp0bXAgIT0gMHg1NSB8fCAqKHRtcCsxKSAhPSAweEFBICkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiTm8gYmlvcyBmb3VuZCBhdDogMHglbHhcbiIsdl9iYXNlKTsKLSAgICAgICAgZ290byBFcnJvcjsKKwlmcHJpbnRmKHN0ZGVyciwiTm8gYmlvcyBmb3VuZCBhdDogMHglbHhcbiIsdl9iYXNlKTsKKwlnb3RvIEVycm9yOwogICAgIH0KICNpZmRlZiBERUJVRwotICAgICAgICBkcHJpbnQoKHVuc2lnbmVkIGxvbmcpdG1wLDB4MTAwKTsKKwlkcHJpbnQoKHVuc2lnbmVkIGxvbmcpdG1wLDB4MTAwKTsKICNlbmRpZgogICAgIHNpemUgPSAqKHRtcCsyKSAqIDUxMjsKIAogICAgIGlmIChyZWFkKG1lbV9mZCwgKGNoYXIgKil2X2Jhc2UsIChzaXplX3QpIHNpemUpICE9IChzaXplX3QpIHNpemUpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgcmVhZFxuIik7Ci0gICAgICAgIGdvdG8gRXJyb3I7CisJICAgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgcmVhZFxuIik7CisJZ290byBFcnJvcjsKICAgICB9CiAgICAgZnJlZSh0bXApOwogICAgIGNsb3NlKG1lbV9mZCk7CiAgICAgaWYgKCFjaGtzdW0oKENBUkQ4Kil2X2Jhc2UpKQotICAgICAgICByZXR1cm4gKDApOworCXJldHVybiAoMCk7CiAKICAgICByZXR1cm4gKDEpOwogCkBAIC0yMzMsNyArMjMzLDcgQEAKIHVubWFwX3ZyYW0odm9pZCkKIHsKICAgICBpZiAoIXZyYW1fbWFwcGVkKSByZXR1cm47Ci0gICAgCisKICAgICBtdW5tYXAoKHZvaWQqKVZSQU1fU1RBUlQsVlJBTV9TSVpFKTsKICAgICB2cmFtX21hcHBlZCA9IDA7CiB9CkBAIC0yNTksMTUgKzI1OSwxNSBAQAogICAgIGludCBtZW1fZmQ7CiAgICAgQ0FSRDMyIHZiYXNlOwogICAgIHZvaWQgKm1hcDsKLSAgICAKKwogICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JET05MWSkpPDApIHsKICAgICBwZXJyb3IoIm9wZW5pbmcgbWVtb3J5Iik7CiAgICAgcmV0dXJuICgwKTsKICAgICB9Ci0gIAorCiAgICAgaWYgKChtYXAgPSBtbWFwKCh2b2lkICopIDAsIChzaXplX3QpIDB4MjAwMCwKLSAgICAgICAgIFBST1RfRVhFQyB8IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCi0gICAgICAgICBtZW1fZmQsIDApKSA9PSAodm9pZCAqKS0xKSAgIHsKKwkgUFJPVF9FWEVDIHwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKwkgbWVtX2ZkLCAwKSkgPT0gKHZvaWQgKiktMSkgICB7CiAgICAgcGVycm9yKCJtbWFwIGVycm9yIGluIG1hcF9oYXJkd2FyZV9yYW0iKTsKICAgICBjbG9zZShtZW1fZmQpOwogICAgIHJldHVybiAoMCk7CkBAIC0yODIsNyArMjgyLDcgQEAKICAgICAgKi8KICAgICBiaW9zX3ZhciA9IChjaGFyICopbWFsbG9jKEJJT1NfTUVNKTsKICAgICBtZW1jcHkoYmlvc192YXIsMCxCSU9TX01FTSk7Ci0gICAgCisKICAgICB2YmFzZSA9ICgqKChDQVJEMTYqKSgweDEwIDw8IDIpICsgMSkpIDw8IDQ7CiAgICAgZnByaW50ZihzdGRlcnIsInZiYXNlOiAweCV4XG4iLHZiYXNlKTsKICAgICByZXR1cm4gdmJhc2U7CkBAIC0yOTQsMjggKzI5NCwyOCBAQAogICAgIGludCBtZW1fZmQ7CiAgICAgdm9pZCAqbWFwOwogICAgIG1lbVR5cGUgaTsKLSAgICAKKwogI2lmZGVmIF9faWE2NF9fCi0gICAgaWYgKChtZW1fZmQgPSBvcGVuKE1FTV9GSUxFLE9fUkRXUiB8IE9fU1lOQykpPDApIAorICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JEV1IgfCBPX1NZTkMpKTwwKQogI2Vsc2UKLSAgICBpZiAoKG1lbV9mZCA9IG9wZW4oTUVNX0ZJTEUsT19SRFdSKSk8MCkgCisgICAgaWYgKChtZW1fZmQgPSBvcGVuKE1FTV9GSUxFLE9fUkRXUikpPDApCiAjZW5kaWYKICAgICAgIHsKLSAgICAgICAgcGVycm9yKCJvcGVuaW5nIG1lbW9yeSIpOwotICAgICAgICByZXR1cm47CisJcGVycm9yKCJvcGVuaW5nIG1lbW9yeSIpOworCXJldHVybjsKICAgICAgIH0KLSAgCisKICAgICBpZiAoKG1hcCA9IG1tYXAoKHZvaWQgKikgMCwgKHNpemVfdCkgMHgyMDAwLAotICAgICAgICAgUFJPVF9FWEVDIHwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKLSAgICAgICAgIG1lbV9mZCwgMCkpID09ICh2b2lkICopLTEpICAgeworCSBQUk9UX0VYRUMgfCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAorCSBtZW1fZmQsIDApKSA9PSAodm9pZCAqKS0xKSAgIHsKICAgICBwZXJyb3IoIm1tYXAgZXJyb3IgaW4gbWFwX2hhcmR3YXJlX3JhbSIpOwogICAgIGNsb3NlKG1lbV9mZCk7CiAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBCSU9TX01FTTsgaSsrKSB7Ci0gICAgaWYgKGJpb3NfdmFyW2ldICE9ICooQ0FSRDgqKWkpIAotICAgICAgICAqKChDQVJEOCopbWFwICsgaSkgPSAqKENBUkQ4KilpOworICAgIGlmIChiaW9zX3ZhcltpXSAhPSAqKENBUkQ4KilpKQorCSooKENBUkQ4KiltYXAgKyBpKSA9ICooQ0FSRDgqKWk7CiAgICAgfQogCiAgICAgbXVubWFwKG1hcCwweDIwMDApOwpAQCAtMzM4LDIzICszMzgsMjMgQEAKICAgICB3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYyxhcmd2LCJhOmI6YzpkOmU6aToiKSkgIT0gRU9GKSB7CiAgICAgc3dpdGNoIChjKSB7CiAgICAgY2FzZSAnYSc6Ci0gICAgICAgIHJlZ3MtPmF4ID0gc3RydG9sKG9wdGFyZyxOVUxMLDApOwotICAgICAgICBicmVhazsKKwlyZWdzLT5heCA9IHN0cnRvbChvcHRhcmcsTlVMTCwwKTsKKwlicmVhazsKICAgICBjYXNlICdiJzoKLSAgICAgICAgcmVncy0+YnggPSBzdHJ0b2wob3B0YXJnLE5VTEwsMCk7Ci0gICAgICAgIGJyZWFrOworCXJlZ3MtPmJ4ID0gc3RydG9sKG9wdGFyZyxOVUxMLDApOworCWJyZWFrOwogICAgIGNhc2UgJ2MnOgotICAgICAgICByZWdzLT5jeCA9IHN0cnRvbChvcHRhcmcsTlVMTCwwKTsKLSAgICAgICAgYnJlYWs7CisJcmVncy0+Y3ggPSBzdHJ0b2wob3B0YXJnLE5VTEwsMCk7CisJYnJlYWs7CiAgICAgY2FzZSAnZCc6Ci0gICAgICAgIHJlZ3MtPmR4ID0gc3RydG9sKG9wdGFyZyxOVUxMLDApOwotICAgICAgICBicmVhazsKKwlyZWdzLT5keCA9IHN0cnRvbChvcHRhcmcsTlVMTCwwKTsKKwlicmVhazsKICAgICBjYXNlICdlJzoKLSAgICAgICAgcmVncy0+ZXMgPSBzdHJ0b2wob3B0YXJnLE5VTEwsMCk7Ci0gICAgICAgIGJyZWFrOworCXJlZ3MtPmVzID0gc3RydG9sKG9wdGFyZyxOVUxMLDApOworCWJyZWFrOwogICAgIGNhc2UgJ2knOgotICAgICAgICByZWdzLT5kaSA9IHN0cnRvbChvcHRhcmcsTlVMTCwwKTsKLSAgICAgICAgYnJlYWs7CisJcmVncy0+ZGkgPSBzdHJ0b2wob3B0YXJnLE5VTEwsMCk7CisJYnJlYWs7CiAgICAgfQogICAgIH0KIH0KQEAgLTM2NywxMCArMzY3LDEwIEBACiAgIENBUkQ4IHZhbCA9IDA7CiAgIGludCBpOwogCi0gIHNpemUgPSAqKHN0YXJ0KzIpICogNTEyOyAgCisgIHNpemUgPSAqKHN0YXJ0KzIpICogNTEyOwogICBmb3IgKGkgPSAwOyBpPHNpemU7IGkrKykKICAgICB2YWwgKz0gKihzdGFydCArIGkpOwotICAgIAorCiAgIGlmICghdmFsKQogICAgIHJldHVybiAxOwogCkBAIC0zOTEsMjUgKzM5MSwyNSBAQAogewogICAgIGludCBpOwogICAgIENBUkQ4IHZhbDsKLSAgICAKKwogICAgIGZvciAoIGk9MDs7aSsrKSB7Ci0gICAgICAgIHZhbCA9IGNvZGVbaV07Ci0gICAgICAgICpwdHIrKyA9IHZhbDsKLSAgICAgICAgaWYgKHZhbCA9PSAweGY0KSBicmVhazsKKwl2YWwgPSBjb2RlW2ldOworCSpwdHIrKyA9IHZhbDsKKwlpZiAodmFsID09IDB4ZjQpIGJyZWFrOwogICAgIH0KICAgICByZXR1cm47CiB9CiAKLXZvaWQgCit2b2lkCiBkcHJpbnQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogICAgIGludCBpLGo7CiAgICAgY2hhciAqYyA9IChjaGFyICopc3RhcnQ7CiAKICAgICBmb3IgKGogPSAwOyBqIDwgKHNpemUgPj4gNCk7IGorKykgewotICAgICAgICBwcmludGYgKCJcbjB4JWx4OiAgIiwodW5zaWduZWQgbG9uZyljKTsKLSAgICAgICAgZm9yIChpID0gMDsgaTwxNjsgaSsrKSAKLSAgICAgICAgICAgIHByaW50ZigiJXggIiwodW5zaWduZWQgY2hhcikgKCooYysrKSkpOworCXByaW50ZiAoIlxuMHglbHg6ICAiLCh1bnNpZ25lZCBsb25nKWMpOworCWZvciAoaSA9IDA7IGk8MTY7IGkrKykKKwkgICAgcHJpbnRmKCIleCAiLCh1bnNpZ25lZCBjaGFyKSAoKihjKyspKSk7CiAgICAgfQogICAgIHByaW50ZigiXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvY29tbWFuZC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9jb21tYW5kLmMKaW5kZXggNTQ5NGZmOC4uZTJiY2U2ZCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9jb21tYW5kLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9jb21tYW5kLmMKQEAgLTE1LDI0ICsxNSwyNCBAQAogICAgIHN0YXRpYyBpbnQgbGVuID0gMDsKICAgICBpbnQgdG1wX2xlbjsKICAgICBjaGFyICpidWZmOwotICAgIAorCiAgICAgaWYgKGxlbiA8PSAwKSB7CiAgICAgYnVmZiA9IHJlYWRsaW5lKFBST01QVCk7CiAgICAgYWRkX2hpc3RvcnkoYnVmZik7Ci0gICAgCisKICAgICBpZiAoKHRtcF9sZW4gPSBzdHJsZW4oYnVmZikpID4gbGluZV9sZW4pIHsKLSAgICAgICAgZnJlZShsaW5lKTsKLSAgICAgICAgbGluZSA9IG1hbGxvYyh0bXBfbGVuKTsKLSAgICAgICAgbGluZV9sZW4gPSB0bXBfbGVuOworCWZyZWUobGluZSk7CisJbGluZSA9IG1hbGxvYyh0bXBfbGVuKTsKKwlsaW5lX2xlbiA9IHRtcF9sZW47CiAgICAgfQogICAgIHNwcmludGYobGluZSwiJXNcbiIsYnVmZik7CiAgICAgZnJlZShidWZmKTsKICAgICBsaW5lX3BvaW50ZXIgPSBsaW5lOwogICAgIGxlbiA9IHN0cmxlbihsaW5lKTsKICAgICB9Ci0gICAgCi0gICAgKm51bSA9IG1heF9udW0gPiBsZW4/IGxlbiA6IG1heF9udW07IAotICAgIHN0cm5jcHkoYnVmLGxpbmVfcG9pbnRlciwqbnVtKTsgCisKKyAgICAqbnVtID0gbWF4X251bSA+IGxlbj8gbGVuIDogbWF4X251bTsKKyAgICBzdHJuY3B5KGJ1ZixsaW5lX3BvaW50ZXIsKm51bSk7CiAgICAgbGluZV9wb2ludGVyID0gbGluZV9wb2ludGVyICsgKm51bTsKICAgICBsZW4gPSBsZW4gLSAqbnVtOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9jb25zb2xlLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL2NvbnNvbGUuYwppbmRleCA0NjgwNTE1Li41ZTljOTI0IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL2NvbnNvbGUuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL2NvbnNvbGUuYwpAQCAtMzYsNDMgKzM2LDQzIEBACiAgICAgY2hhciBWVG5hbWVbMTFdOwogICAgIGNvbnNvbGUgQ29uID0gey0xLC0xfTsKICAgICBzdHJ1Y3QgdnRfc3RhdCB2dHM7Ci0gICAgCisKICAgICBpZiAoTk9fQ09OU09MRSkKLSAgICAgICAgICAgIHJldHVybiBDb247Ci0gICAgCisJICAgIHJldHVybiBDb247CisKICAgICBpZiAoKGZkID0gb3BlbigiL2Rldi90dHkwIixPX1dST05MWSwwKSkgPCAwKQotICAgICAgICByZXR1cm4gQ29uOworCXJldHVybiBDb247CiAKICAgICBpZiAoKGlvY3RsKGZkLCBWVF9PUEVOUVJZLCAmVlRubykgPCAwKSB8fCAoVlRubyA9PSAtMSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsImNhbm5vdCBnZXQgYSB2dFxuIik7ICAgIAotICAgICAgICByZXR1cm4gQ29uOworCWZwcmludGYoc3RkZXJyLCJjYW5ub3QgZ2V0IGEgdnRcbiIpOworCXJldHVybiBDb247CiAgICAgfQotICAgIAorCiAgICAgY2xvc2UoZmQpOwogICAgIHNwcmludGYoVlRuYW1lLCIvZGV2L3R0eSVpIixWVG5vKTsKLSAgICAKKwogICAgIGlmICgoZmQgPSBvcGVuKFZUbmFtZSwgT19SRFdSfE9fTkRFTEFZLCAwKSkgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCJjYW5ub3Qgb3BlbiBjb25zb2xlXG4iKTsKLSAgICAgICAgcmV0dXJuIENvbjsKKwlmcHJpbnRmKHN0ZGVyciwiY2Fubm90IG9wZW4gY29uc29sZVxuIik7CisJcmV0dXJuIENvbjsKICAgICB9Ci0gICAgCi0gICAgaWYgKGlvY3RsKGZkLCBWVF9HRVRTVEFURSwgJnZ0cykgPT0gMCkgCi0gICAgICAgIENvbi52dCA9IHZ0cy52X2FjdGl2ZTsKKworICAgIGlmIChpb2N0bChmZCwgVlRfR0VUU1RBVEUsICZ2dHMpID09IDApCisJQ29uLnZ0ID0gdnRzLnZfYWN0aXZlOwogCiAgICAgaWYgKGlvY3RsKGZkLCBWVF9BQ1RJVkFURSwgVlRubykgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiY2Fubm90IGFjdGl2YXRlIGNvbnNvbGVcbiIpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBDb247CisJZnByaW50ZihzdGRlcnIsImNhbm5vdCBhY3RpdmF0ZSBjb25zb2xlXG4iKTsKKwljbG9zZShmZCk7CisJcmV0dXJuIENvbjsKICAgICB9CiAgICAgaWYgKGlvY3RsKGZkLCBWVF9XQUlUQUNUSVZFLCBWVG5vKSAhPSAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCJ3YWl0IGZvciBhY3RpdmUgY29uc29sZSBmYWlsZWRcbiIpOwotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBDb247CisJZnByaW50ZihzdGRlcnIsIndhaXQgZm9yIGFjdGl2ZSBjb25zb2xlIGZhaWxlZFxuIik7CisJY2xvc2UoZmQpOworCXJldHVybiBDb247CiAgICAgfQogI2lmIDAKICAgICBpZiAoaW9jdGwoZmQsIEtEU0VUTU9ERSwgS0RfR1JBUEhJQ1MpIDwgMCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJldHVybiBDb247CisJY2xvc2UoZmQpOworCXJldHVybiBDb247CiAgICAgfQogI2VuZGlmCiAgICAgQ29uLmZkID0gZmQ7CkBAIC04MywyMiArODMsMTMgQEAKIGNsb3NlX2NvbnNvbGUoY29uc29sZSBDb24pCiB7CiAgICAgaWYgKENvbi5mZCA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotICAgIAorCXJldHVybjsKKwogI2lmIDAKICAgICBpb2N0bChDb24uZmQsIEtEU0VUTU9ERSwgS0RfVEVYVCk7CiAjZW5kaWYKICAgICBpZiAoQ29uLnZ0ID49MCkKLSAgICAgICAgaW9jdGwoQ29uLmZkLCBWVF9BQ1RJVkFURSwgQ29uLnZ0KTsKLSAgICAKKwlpb2N0bChDb24uZmQsIFZUX0FDVElWQVRFLCBDb24udnQpOworCiAgICAgY2xvc2UoQ29uLmZkKTsKIH0KLQotCi0gICAgCi0KLQotCi0KLQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL2RlYnVnLmggYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL2RlYnVnLmgKaW5kZXggYmMwYjExMS4uYzVjOTA2YiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9kZWJ1Zy5oCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvZGVidWcuaApAQCAtMTksNyArMTksNyBAQAogICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgogICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwotLy8jZGVmaW5lIFY4NkJJT1NfREVCVUcKKy8qI2RlZmluZSBWODZCSU9TX0RFQlVHICovCiAKIC8qCiAgKiB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBpZiBuZWVkZWQKQEAgLTMyLDcgKzMyLDcgQEAKICNkZWZpbmUgUFJJTlRfUENJIDEKICNkZWZpbmUgUFJJTlRfSVAgMCAgICAvKiBwcmludCBJUCBhZGRyZXNzIHdpdGggUElPIGluZm9ybWF0aW9uICovCiAjZGVmaW5lIFRSQUNFIDAgICAgICAgLyogdHVybiBvbiBkZWJ1Z2dlciBpbiB4ODZlbXUgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgIC8qIHJlcXVpcmVzIHg4NmVtdSBjb21waWxlZCB3aXRoIC1EREVCVUcgKi8KKwkJICAgICAgLyogcmVxdWlyZXMgeDg2ZW11IGNvbXBpbGVkIHdpdGggLURERUJVRyAqLwogCiAvKgogICogdGhlc2Ugc2hvdWxkIG5vdCBiZSBoZXJlLgpAQCAtNDgsMTAgKzQ4LDggQEAKICNkZWZpbmUgU0hPV19BTExfREVWIDAKICNkZWZpbmUgVkVSQk9TRSAwCiAKLS8vI2RlZmluZSBWX0JJT1MgMHhlMDAwMAotLy8jZGVmaW5lIFZfQklPUyAweGU0MDAwCi0KLQorLyojZGVmaW5lIFZfQklPUyAweGUwMDAwICovCisvKiNkZWZpbmUgVl9CSU9TIDB4ZTQwMDAgKi8KIAogCiAjaWYgKFBSSU5UX0lPID09IDEpICYmIChQUklOVF9QT1JUID09IDApCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL2ludC5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9pbnQuYwppbmRleCA0MGIxN2IxLi4zNTA0YzZjIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL2ludC5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvaW50LmMKQEAgLTM3LDExICszNywxMSBAQAogICAgIHN3aXRjaCAobnVtKSB7CiAgICAgY2FzZSAweDEwOgogICAgIGNhc2UgMHg0MjoKLSAgICAgICAgcmV0dXJuIChpbnQ0Ml9oYW5kbGVyKG51bSxyZWdzKSk7CisJcmV0dXJuIChpbnQ0Ml9oYW5kbGVyKG51bSxyZWdzKSk7CiAgICAgY2FzZSAweDFBOgotICAgICAgICByZXR1cm4gKGludDFBX2hhbmRsZXIocmVncykpOworCXJldHVybiAoaW50MUFfaGFuZGxlcihyZWdzKSk7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtNTMsMzggKzUzLDM4IEBACiAgICAgQ0FSRDMyIHZhbDsKIAogICAgIGlfcHJpbnRmKCJpbnQgMHgleDogYXg6MHglbHggYng6MHglbHggY3g6MHglbHggZHg6MHglbHhcbiIsbnVtLAotICAgICAgICAgICByZWdzLT5lYXgscmVncy0+ZWJ4LCByZWdzLT5lY3gsIHJlZ3MtPmVkeCk7Ci0gICAgCisJICAgcmVncy0+ZWF4LHJlZ3MtPmVieCwgcmVncy0+ZWN4LCByZWdzLT5lZHgpOworCiAgICAgLyoKICAgICAgKiB2aWRlbyBiaW9zIGhhcyBtb2RpZmllZCB0aGVzZSAtCiAgICAgICogbGVhdmUgaXQgdG8gdGhlIHZpZGVvIGJpb3MgdG8gZG8gdGhpcwogICAgICAqLwogCiAgICAgdmFsID0gZ2V0SW50VmVjdChudW0pOwotICAgIGlmICh2YWwgIT0gMHhGMDAwRjA2NSkgCisgICAgaWYgKHZhbCAhPSAweEYwMDBGMDY1KQogICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBpZiAoKHJlZ3MtPmVieCAmIDB4ZmYpID09IDB4MzIpIHsKLSAgICAgICAgc3dpdGNoIChyZWdzLT5lYXggJiAweEZGRkYpIHsKLSAgICAgICAgY2FzZSAweDEyMDA6Ci0gICAgICAgICAgICBpX3ByaW50ZigiZW5hYmxpbmcgdmlkZW9cbiIpOwotICAgICAgICAgICAgYyA9IGluYigweDNjYyk7Ci0gICAgICAgICAgICBjIHw9IDB4MDI7Ci0gICAgICAgICAgICBvdXRiKDB4M2MyLGMpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgMHgxMjAxOgotICAgICAgICAgICAgaV9wcmludGYoImRpc2FibGluZyB2aWRlb1xuIik7Ci0gICAgICAgICAgICBjID0gaW5iKDB4M2NjKTsKLSAgICAgICAgICAgIGMgJj0gfjB4MDI7Ci0gICAgICAgICAgICBvdXRiKDB4M2MyLGMpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIH0KKwlzd2l0Y2ggKHJlZ3MtPmVheCAmIDB4RkZGRikgeworCWNhc2UgMHgxMjAwOgorCSAgICBpX3ByaW50ZigiZW5hYmxpbmcgdmlkZW9cbiIpOworCSAgICBjID0gaW5iKDB4M2NjKTsKKwkgICAgYyB8PSAweDAyOworCSAgICBvdXRiKDB4M2MyLGMpOworCSAgICByZXR1cm4gMTsKKwljYXNlIDB4MTIwMToKKwkgICAgaV9wcmludGYoImRpc2FibGluZyB2aWRlb1xuIik7CisJICAgIGMgPSBpbmIoMHgzY2MpOworCSAgICBjICY9IH4weDAyOworCSAgICBvdXRiKDB4M2MyLGMpOworCSAgICByZXR1cm4gMTsKKwlkZWZhdWx0OgorCX0KICAgICB9CiAgICAgaWYgKG51bSA9PSAweDQyKQotICAgICAgICByZXR1cm4gMTsKKwlyZXR1cm4gMTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAjZGVmaW5lIFNVQ0NFU1NGVUwgICAgICAgICAgICAgIDB4MDAKQEAgLTEwMCwxMzkgKzEwMCwxMzkgQEAKICAgICBpZiAoISBDdXJyZW50UGNpKSByZXR1cm4gMDsgLyogb29wcyAqLwogCiAgICAgaV9wcmludGYoImludCAweDFhOiBheD0weCVseCBieD0weCVseCBjeD0weCVseCBkeD0weCVseCBkaT0weCVseCIKLSAgICAgICAgICIgc2k9MHglbHhcbiIsIHJlZ3MtPmVheCxyZWdzLT5lYngscmVncy0+ZWN4LHJlZ3MtPmVkeCwKLSAgICAgICAgIHJlZ3MtPmVkaSxyZWdzLT5lc2kpOworCSAiIHNpPTB4JWx4XG4iLCByZWdzLT5lYXgscmVncy0+ZWJ4LHJlZ3MtPmVjeCxyZWdzLT5lZHgsCisJIHJlZ3MtPmVkaSxyZWdzLT5lc2kpOwogICAgIHN3aXRjaCAocmVncy0+ZWF4ICYgMHhGRkZGKSB7CiAgICAgY2FzZSAweGIxMDE6Ci0gICAgICAgIHJlZ3MtPmVheCAgJj0gMHhGRjAwOyAgIC8qIG5vIGNvbmZpZyBzcGFjZS9zcGVjaWFsIGN5Y2xlIHN1cHBvcnQgKi8KLSAgICAgICAgcmVncy0+ZWR4ID0gMHgyMDQ5NDM1MDsgLyogIiBJQ1AiICovCi0gICAgICAgIHJlZ3MtPmVieCAgPSAweDAyMTA7ICAgIC8qIFZlcnNpb24gMi4xMCAqLwotICAgICAgICByZWdzLT5lY3ggICY9IDB4RkYwMDsKLSAgICAgICAgcmVncy0+ZWN4IHw9IChwY2lNYXhCdXMgJiAweEZGKTsgICAvKiBNYXggYnVzIG51bWJlciBpbiBzeXN0ZW0gKi8KLSAgICAgICAgcmVncy0+ZWZsYWdzICY9IH4oKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIGNsZWFyIGNhcnJ5IGZsYWcgKi8KLSAgICAgICAgaV9wcmludGYoImF4PTB4JWx4IGR4PTB4JWx4IGJ4PTB4JWx4IGN4PTB4JWx4IGZsYWdzPTB4JWx4XG4iLAotICAgICAgICAgICAgICAgICByZWdzLT5lYXgscmVncy0+ZWR4LHJlZ3MtPmVieCxyZWdzLT5lY3gscmVncy0+ZWZsYWdzKTsKLSAgICAgICAgcmV0dXJuIDE7CisJcmVncy0+ZWF4ICAmPSAweEZGMDA7ICAgLyogbm8gY29uZmlnIHNwYWNlL3NwZWNpYWwgY3ljbGUgc3VwcG9ydCAqLworCXJlZ3MtPmVkeCA9IDB4MjA0OTQzNTA7IC8qICIgSUNQIiAqLworCXJlZ3MtPmVieCAgPSAweDAyMTA7ICAgIC8qIFZlcnNpb24gMi4xMCAqLworCXJlZ3MtPmVjeCAgJj0gMHhGRjAwOworCXJlZ3MtPmVjeCB8PSAocGNpTWF4QnVzICYgMHhGRik7ICAgLyogTWF4IGJ1cyBudW1iZXIgaW4gc3lzdGVtICovCisJcmVncy0+ZWZsYWdzICY9IH4oKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIGNsZWFyIGNhcnJ5IGZsYWcgKi8KKwlpX3ByaW50ZigiYXg9MHglbHggZHg9MHglbHggYng9MHglbHggY3g9MHglbHggZmxhZ3M9MHglbHhcbiIsCisJCSByZWdzLT5lYXgscmVncy0+ZWR4LHJlZ3MtPmVieCxyZWdzLT5lY3gscmVncy0+ZWZsYWdzKTsKKwlyZXR1cm4gMTsKICAgICBjYXNlIDB4YjEwMjoKLSAgICAgICAgaWYgKCgocmVncy0+ZWR4ICYgMHhGRkZGKSA9PSBDdXJyZW50UGNpLT5WZW5kb3JJRCkgJiYKLSAgICAgICAgICAgICgocmVncy0+ZWN4ICYgMHhGRkZGKSA9PSBDdXJyZW50UGNpLT5EZXZpY2VJRCkgJiYKLSAgICAgICAgICAgIChyZWdzLT5lc2kgPT0gMCkpIHsKLSAgICAgICAgICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKFNVQ0NFU1NGVUwgPDwgOCk7Ci0gICAgICAgICAgICByZWdzLT5lZmxhZ3MgJj0gfigodW5zaWduZWQgbG9uZykweDAxKTsgLyogY2xlYXIgY2FycnkgZmxhZyAqLwotICAgICAgICAgICAgcmVncy0+ZWJ4ID0gcGNpU2xvdEJYKEN1cnJlbnRQY2kpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKENvbmZpZy5TaG93QWxsRGV2ICYmCi0gICAgICAgICAgICAgKHBQY2kgPSBmaW5kUGNpRGV2aWNlKHJlZ3MtPmVkeCxyZWdzLT5lY3gscmVncy0+ZXNpKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgcmVncy0+ZWF4ID0gKHJlZ3MtPmVheCAmIDB4MDBGRikgfCAoU1VDQ0VTU0ZVTCA8PCA4KTsKLSAgICAgICAgICAgIHJlZ3MtPmVmbGFncyAmPSB+KCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBjbGVhciBjYXJyeSBmbGFnICovCi0gICAgICAgICAgICByZWdzLT5lYnggPSBwY2lTbG90QlgocFBjaSk7Ci0gICAgICAgIH0gZWxzZSAgewotICAgICAgICAgICAgcmVncy0+ZWF4ID0gKHJlZ3MtPmVheCAmIDB4MDBGRikgfCAoREVWSUNFX05PVF9GT1VORCA8PCA4KTsKLSAgICAgICAgICAgIHJlZ3MtPmVmbGFncyB8PSAoKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIHNldCBjYXJyeSBmbGFnICovCi0gICAgICAgIH0KLSAgICAgICAgaV9wcmludGYoImF4PTB4JWx4IGJ4PTB4JWx4IGZsYWdzPTB4JWx4XG4iLAotICAgICAgICAgICAgICAgICByZWdzLT5lYXgscmVncy0+ZWJ4LHJlZ3MtPmVmbGFncyk7Ci0gICAgICAgIHJldHVybiAxOworCWlmICgoKHJlZ3MtPmVkeCAmIDB4RkZGRikgPT0gQ3VycmVudFBjaS0+VmVuZG9ySUQpICYmCisJICAgICgocmVncy0+ZWN4ICYgMHhGRkZGKSA9PSBDdXJyZW50UGNpLT5EZXZpY2VJRCkgJiYKKwkgICAgKHJlZ3MtPmVzaSA9PSAwKSkgeworCSAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChTVUNDRVNTRlVMIDw8IDgpOworCSAgICByZWdzLT5lZmxhZ3MgJj0gfigodW5zaWduZWQgbG9uZykweDAxKTsgLyogY2xlYXIgY2FycnkgZmxhZyAqLworCSAgICByZWdzLT5lYnggPSBwY2lTbG90QlgoQ3VycmVudFBjaSk7CisJfQorCWVsc2UgaWYgKENvbmZpZy5TaG93QWxsRGV2ICYmCisJICAgICAocFBjaSA9IGZpbmRQY2lEZXZpY2UocmVncy0+ZWR4LHJlZ3MtPmVjeCxyZWdzLT5lc2kpKSAhPSBOVUxMKSB7CisJICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKFNVQ0NFU1NGVUwgPDwgOCk7CisJICAgIHJlZ3MtPmVmbGFncyAmPSB+KCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBjbGVhciBjYXJyeSBmbGFnICovCisJICAgIHJlZ3MtPmVieCA9IHBjaVNsb3RCWChwUGNpKTsKKwl9IGVsc2UgIHsKKwkgICAgcmVncy0+ZWF4ID0gKHJlZ3MtPmVheCAmIDB4MDBGRikgfCAoREVWSUNFX05PVF9GT1VORCA8PCA4KTsKKwkgICAgcmVncy0+ZWZsYWdzIHw9ICgodW5zaWduZWQgbG9uZykweDAxKTsgLyogc2V0IGNhcnJ5IGZsYWcgKi8KKwl9CisJaV9wcmludGYoImF4PTB4JWx4IGJ4PTB4JWx4IGZsYWdzPTB4JWx4XG4iLAorCQkgcmVncy0+ZWF4LHJlZ3MtPmVieCxyZWdzLT5lZmxhZ3MpOworCXJldHVybiAxOwogICAgIGNhc2UgMHhiMTAzOgotICAgICAgICBpZiAoKChyZWdzLT5lY3ggJiAweEZGKSA9PSBDdXJyZW50UGNpLT5JbnRlcmZhY2UpICYmCi0gICAgICAgICAgICAoKChyZWdzLT5lY3ggJiAweEZGMDApID4+IDgpID09IEN1cnJlbnRQY2ktPlN1YkNsYXNzKSAmJgotICAgICAgICAgICAgKCgocmVncy0+ZWN4ICYgMHhGRkZGMDAwMCkgPj4gMTYpID09IEN1cnJlbnRQY2ktPkJhc2VDbGFzcykgJiYgCi0gICAgICAgICAgICAoKHJlZ3MtPmVzaSAmIDB4ZmYpID09IDApKSB7Ci0gICAgICAgICAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChTVUNDRVNTRlVMIDw8IDgpOwotICAgICAgICAgICAgcmVncy0+ZWJ4ID0gcGNpU2xvdEJYKEN1cnJlbnRQY2kpOwotICAgICAgICAgICAgcmVncy0+ZWZsYWdzICY9IH4oKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIGNsZWFyIGNhcnJ5IGZsYWcgKi8KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChDb25maWcuU2hvd0FsbERldgotICAgICAgICAgICAgICYmIChwUGNpID0gZmluZFBjaUNsYXNzKHJlZ3MtPmVjeCAmIDB4RkYsIChyZWdzLT5lY3ggJiAweGZmMDApID4+IDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ3MtPmVjeCAmIDB4ZmZmZjAwMDApID4+IDE2LCByZWdzLT5lc2kpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChTVUNDRVNTRlVMIDw8IDgpOwotICAgICAgICAgICAgcmVncy0+ZWJ4ID0gcGNpU2xvdEJYKHBQY2kpOwotICAgICAgICAgICAgcmVncy0+ZWZsYWdzICY9IH4oKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIGNsZWFyIGNhcnJ5IGZsYWcgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKERFVklDRV9OT1RfRk9VTkQgPDwgOCk7Ci0gICAgICAgICAgICByZWdzLT5lZmxhZ3MgfD0gKCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBzZXQgY2FycnkgZmxhZyAqLwotICAgICAgICB9Ci0gICAgICAgIGlfcHJpbnRmKCJheD0weCVseCBmbGFncz0weCVseFxuIixyZWdzLT5lYXgscmVncy0+ZWZsYWdzKTsKLSAgICAgICAgcmV0dXJuIDE7CisJaWYgKCgocmVncy0+ZWN4ICYgMHhGRikgPT0gQ3VycmVudFBjaS0+SW50ZXJmYWNlKSAmJgorCSAgICAoKChyZWdzLT5lY3ggJiAweEZGMDApID4+IDgpID09IEN1cnJlbnRQY2ktPlN1YkNsYXNzKSAmJgorCSAgICAoKChyZWdzLT5lY3ggJiAweEZGRkYwMDAwKSA+PiAxNikgPT0gQ3VycmVudFBjaS0+QmFzZUNsYXNzKSAmJgorCSAgICAoKHJlZ3MtPmVzaSAmIDB4ZmYpID09IDApKSB7CisJICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKFNVQ0NFU1NGVUwgPDwgOCk7CisJICAgIHJlZ3MtPmVieCA9IHBjaVNsb3RCWChDdXJyZW50UGNpKTsKKwkgICAgcmVncy0+ZWZsYWdzICY9IH4oKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIGNsZWFyIGNhcnJ5IGZsYWcgKi8KKwl9CisJZWxzZSBpZiAoQ29uZmlnLlNob3dBbGxEZXYKKwkgICAgICYmIChwUGNpID0gZmluZFBjaUNsYXNzKHJlZ3MtPmVjeCAmIDB4RkYsIChyZWdzLT5lY3ggJiAweGZmMDApID4+IDgsCisJCQkgKHJlZ3MtPmVjeCAmIDB4ZmZmZjAwMDApID4+IDE2LCByZWdzLT5lc2kpKSAhPSBOVUxMKSB7CisJICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKFNVQ0NFU1NGVUwgPDwgOCk7CisJICAgIHJlZ3MtPmVieCA9IHBjaVNsb3RCWChwUGNpKTsKKwkgICAgcmVncy0+ZWZsYWdzICY9IH4oKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIGNsZWFyIGNhcnJ5IGZsYWcgKi8KKwl9IGVsc2UgeworCSAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChERVZJQ0VfTk9UX0ZPVU5EIDw8IDgpOworCSAgICByZWdzLT5lZmxhZ3MgfD0gKCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBzZXQgY2FycnkgZmxhZyAqLworCX0KKwlpX3ByaW50ZigiYXg9MHglbHggZmxhZ3M9MHglbHhcbiIscmVncy0+ZWF4LHJlZ3MtPmVmbGFncyk7CisJcmV0dXJuIDE7CiAgICAgY2FzZSAweGIxMDg6Ci0gICAgICAgIGlfcHJpbnRmKCJTbG90PTB4JXhcbiIsQ3VycmVudFBjaS0+U2xvdC5sKTsKLSAgICAgICAgaWYgKChTbG90ID0gZmluZFBjaShyZWdzLT5lYngpKSkgewotICAgICAgICAgICAgcmVncy0+ZWN4ICY9IDB4RkZGRkZGMDA7Ci0gICAgICAgICAgICByZWdzLT5lY3ggfD0gUGNpUmVhZDgocmVncy0+ZWRpLFNsb3QpOwotICAgICAgICAgICAgcmVncy0+ZWF4ID0gKHJlZ3MtPmVheCAmIDB4MDBGRikgfCAoU1VDQ0VTU0ZVTCA8PCA4KTsKLSAgICAgICAgICAgIHJlZ3MtPmVmbGFncyAmPSB+KCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBjbGVhciBjYXJyeSBmbGFnICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChCQURfUkVHSVNURVJfTlVNQkVSIDw8IDgpOwotICAgICAgICAgICAgcmVncy0+ZWZsYWdzIHw9ICgodW5zaWduZWQgbG9uZykweDAxKTsgLyogc2V0IGNhcnJ5IGZsYWcgKi8KLSAgICAgICAgfQotICAgICAgICBpX3ByaW50ZigiYXg9MHglbHggY3g9MHglbHggZmxhZ3M9MHglbHhcbiIsCi0gICAgICAgICAgICAgICAgIHJlZ3MtPmVheCxyZWdzLT5lY3gscmVncy0+ZWZsYWdzKTsKLSAgICAgICAgcmV0dXJuIDE7CisJaV9wcmludGYoIlNsb3Q9MHgleFxuIixDdXJyZW50UGNpLT5TbG90LmwpOworCWlmICgoU2xvdCA9IGZpbmRQY2kocmVncy0+ZWJ4KSkpIHsKKwkgICAgcmVncy0+ZWN4ICY9IDB4RkZGRkZGMDA7CisJICAgIHJlZ3MtPmVjeCB8PSBQY2lSZWFkOChyZWdzLT5lZGksU2xvdCk7CisJICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKFNVQ0NFU1NGVUwgPDwgOCk7CisJICAgIHJlZ3MtPmVmbGFncyAmPSB+KCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBjbGVhciBjYXJyeSBmbGFnICovCisJfSBlbHNlIHsKKwkgICAgcmVncy0+ZWF4ID0gKHJlZ3MtPmVheCAmIDB4MDBGRikgfCAoQkFEX1JFR0lTVEVSX05VTUJFUiA8PCA4KTsKKwkgICAgcmVncy0+ZWZsYWdzIHw9ICgodW5zaWduZWQgbG9uZykweDAxKTsgLyogc2V0IGNhcnJ5IGZsYWcgKi8KKwl9CisJaV9wcmludGYoImF4PTB4JWx4IGN4PTB4JWx4IGZsYWdzPTB4JWx4XG4iLAorCQkgcmVncy0+ZWF4LHJlZ3MtPmVjeCxyZWdzLT5lZmxhZ3MpOworCXJldHVybiAxOwogICAgIGNhc2UgMHhiMTA5OgotICAgICAgICBpX3ByaW50ZigiU2xvdD0weCV4XG4iLEN1cnJlbnRQY2ktPlNsb3QubCk7Ci0gICAgICAgIGlmICgoU2xvdCA9IGZpbmRQY2kocmVncy0+ZWJ4KSkpIHsKLSAgICAgICAgICAgIHJlZ3MtPmVjeCAmPSAweEZGRkYwMDAwOwotICAgICAgICAgICAgcmVncy0+ZWN4IHw9IFBjaVJlYWQxNihyZWdzLT5lZGksU2xvdCk7Ci0gICAgICAgICAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChTVUNDRVNTRlVMIDw8IDgpOwotICAgICAgICAgICAgcmVncy0+ZWZsYWdzICY9IH4oKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIGNsZWFyIGNhcnJ5IGZsYWcgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKEJBRF9SRUdJU1RFUl9OVU1CRVIgPDwgOCk7Ci0gICAgICAgICAgICByZWdzLT5lZmxhZ3MgfD0gKCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBzZXQgY2FycnkgZmxhZyAqLwotICAgICAgICB9Ci0gICAgICAgIGlfcHJpbnRmKCJheD0weCVseCBjeD0weCVseCBmbGFncz0weCVseFxuIiwKLSAgICAgICAgICAgICAgICAgcmVncy0+ZWF4LHJlZ3MtPmVjeCxyZWdzLT5lZmxhZ3MpOwotICAgICAgICByZXR1cm4gMTsKKwlpX3ByaW50ZigiU2xvdD0weCV4XG4iLEN1cnJlbnRQY2ktPlNsb3QubCk7CisJaWYgKChTbG90ID0gZmluZFBjaShyZWdzLT5lYngpKSkgeworCSAgICByZWdzLT5lY3ggJj0gMHhGRkZGMDAwMDsKKwkgICAgcmVncy0+ZWN4IHw9IFBjaVJlYWQxNihyZWdzLT5lZGksU2xvdCk7CisJICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKFNVQ0NFU1NGVUwgPDwgOCk7CisJICAgIHJlZ3MtPmVmbGFncyAmPSB+KCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBjbGVhciBjYXJyeSBmbGFnICovCisJfSBlbHNlIHsKKwkgICAgcmVncy0+ZWF4ID0gKHJlZ3MtPmVheCAmIDB4MDBGRikgfCAoQkFEX1JFR0lTVEVSX05VTUJFUiA8PCA4KTsKKwkgICAgcmVncy0+ZWZsYWdzIHw9ICgodW5zaWduZWQgbG9uZykweDAxKTsgLyogc2V0IGNhcnJ5IGZsYWcgKi8KKwl9CisJaV9wcmludGYoImF4PTB4JWx4IGN4PTB4JWx4IGZsYWdzPTB4JWx4XG4iLAorCQkgcmVncy0+ZWF4LHJlZ3MtPmVjeCxyZWdzLT5lZmxhZ3MpOworCXJldHVybiAxOwogICAgIGNhc2UgMHhiMTBhOgotICAgICAgICBpX3ByaW50ZigiU2xvdD0weCV4XG4iLEN1cnJlbnRQY2ktPlNsb3QubCk7Ci0gICAgICAgIGlmICgoU2xvdCA9IGZpbmRQY2kocmVncy0+ZWJ4KSkpIHsKLSAgICAgICAgICAgIHJlZ3MtPmVjeCAmPSAwOwotICAgICAgICAgICAgcmVncy0+ZWN4IHw9IFBjaVJlYWQzMihyZWdzLT5lZGksU2xvdCk7Ci0gICAgICAgICAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChTVUNDRVNTRlVMIDw8IDgpOwotICAgICAgICAgICAgcmVncy0+ZWZsYWdzICY9IH4oKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIGNsZWFyIGNhcnJ5IGZsYWcgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKEJBRF9SRUdJU1RFUl9OVU1CRVIgPDwgOCk7Ci0gICAgICAgICAgICByZWdzLT5lZmxhZ3MgfD0gKCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBzZXQgY2FycnkgZmxhZyAqLwotICAgICAgICB9Ci0gICAgICAgIGlfcHJpbnRmKCJheD0weCVseCBjeD0weCVseCBmbGFncz0weCVseFxuIiwKLSAgICAgICAgICAgICAgICAgcmVncy0+ZWF4LHJlZ3MtPmVjeCxyZWdzLT5lZmxhZ3MpOwotICAgICAgICByZXR1cm4gMTsKKwlpX3ByaW50ZigiU2xvdD0weCV4XG4iLEN1cnJlbnRQY2ktPlNsb3QubCk7CisJaWYgKChTbG90ID0gZmluZFBjaShyZWdzLT5lYngpKSkgeworCSAgICByZWdzLT5lY3ggJj0gMDsKKwkgICAgcmVncy0+ZWN4IHw9IFBjaVJlYWQzMihyZWdzLT5lZGksU2xvdCk7CisJICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKFNVQ0NFU1NGVUwgPDwgOCk7CisJICAgIHJlZ3MtPmVmbGFncyAmPSB+KCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBjbGVhciBjYXJyeSBmbGFnICovCisJfSBlbHNlIHsKKwkgICAgcmVncy0+ZWF4ID0gKHJlZ3MtPmVheCAmIDB4MDBGRikgfCAoQkFEX1JFR0lTVEVSX05VTUJFUiA8PCA4KTsKKwkgICAgcmVncy0+ZWZsYWdzIHw9ICgodW5zaWduZWQgbG9uZykweDAxKTsgLyogc2V0IGNhcnJ5IGZsYWcgKi8KKwl9CisJaV9wcmludGYoImF4PTB4JWx4IGN4PTB4JWx4IGZsYWdzPTB4JWx4XG4iLAorCQkgcmVncy0+ZWF4LHJlZ3MtPmVjeCxyZWdzLT5lZmxhZ3MpOworCXJldHVybiAxOwogICAgIGNhc2UgMHhiMTBiOgotICAgICAgICBpX3ByaW50ZigiU2xvdD0weCV4XG4iLEN1cnJlbnRQY2ktPlNsb3QubCk7Ci0gICAgICAgIGlmICgoU2xvdCA9IGZpbmRQY2kocmVncy0+ZWJ4KSkpIHsKLSAgICAgICAgICAgIFBjaVdyaXRlOChyZWdzLT5lZGksKENBUkQ4KXJlZ3MtPmVjeCxTbG90KTsKLSAgICAgICAgICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKFNVQ0NFU1NGVUwgPDwgOCk7Ci0gICAgICAgICAgICByZWdzLT5lZmxhZ3MgJj0gfigodW5zaWduZWQgbG9uZykweDAxKTsgLyogY2xlYXIgY2FycnkgZmxhZyAqLwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVncy0+ZWF4ID0gKHJlZ3MtPmVheCAmIDB4MDBGRikgfCAoQkFEX1JFR0lTVEVSX05VTUJFUiA8PCA4KTsKLSAgICAgICAgICAgIHJlZ3MtPmVmbGFncyB8PSAoKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIHNldCBjYXJyeSBmbGFnICovCi0gICAgICAgIH0KLSAgICAgICAgaV9wcmludGYoImF4PTB4JWx4IGZsYWdzPTB4JWx4XG4iLCByZWdzLT5lYXgscmVncy0+ZWZsYWdzKTsKLSAgICAgICAgcmV0dXJuIDE7CisJaV9wcmludGYoIlNsb3Q9MHgleFxuIixDdXJyZW50UGNpLT5TbG90LmwpOworCWlmICgoU2xvdCA9IGZpbmRQY2kocmVncy0+ZWJ4KSkpIHsKKwkgICAgUGNpV3JpdGU4KHJlZ3MtPmVkaSwoQ0FSRDgpcmVncy0+ZWN4LFNsb3QpOworCSAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChTVUNDRVNTRlVMIDw8IDgpOworCSAgICByZWdzLT5lZmxhZ3MgJj0gfigodW5zaWduZWQgbG9uZykweDAxKTsgLyogY2xlYXIgY2FycnkgZmxhZyAqLworCX0gZWxzZSB7CisJICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKEJBRF9SRUdJU1RFUl9OVU1CRVIgPDwgOCk7CisJICAgIHJlZ3MtPmVmbGFncyB8PSAoKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIHNldCBjYXJyeSBmbGFnICovCisJfQorCWlfcHJpbnRmKCJheD0weCVseCBmbGFncz0weCVseFxuIiwgcmVncy0+ZWF4LHJlZ3MtPmVmbGFncyk7CisJcmV0dXJuIDE7CiAgICAgY2FzZSAweGIxMGM6Ci0gICAgICAgIGlfcHJpbnRmKCJTbG90PTB4JXhcbiIsQ3VycmVudFBjaS0+U2xvdC5sKTsKLSAgICAgICAgaWYgKChTbG90ID0gZmluZFBjaShyZWdzLT5lYngpKSkgewotICAgICAgICAgICAgUGNpV3JpdGUxNihyZWdzLT5lZGksKENBUkQxNilyZWdzLT5lY3gsU2xvdCk7Ci0gICAgICAgICAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChTVUNDRVNTRlVMIDw8IDgpOwotICAgICAgICAgICAgcmVncy0+ZWZsYWdzICY9IH4oKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIGNsZWFyIGNhcnJ5IGZsYWcgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKEJBRF9SRUdJU1RFUl9OVU1CRVIgPDwgOCk7Ci0gICAgICAgICAgICByZWdzLT5lZmxhZ3MgfD0gKCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBzZXQgY2FycnkgZmxhZyAqLwotICAgICAgICB9Ci0gICAgICAgIGlfcHJpbnRmKCJheD0weCVseCBmbGFncz0weCVseFxuIiwgcmVncy0+ZWF4LHJlZ3MtPmVmbGFncyk7Ci0gICAgICAgIHJldHVybiAxOworCWlfcHJpbnRmKCJTbG90PTB4JXhcbiIsQ3VycmVudFBjaS0+U2xvdC5sKTsKKwlpZiAoKFNsb3QgPSBmaW5kUGNpKHJlZ3MtPmVieCkpKSB7CisJICAgIFBjaVdyaXRlMTYocmVncy0+ZWRpLChDQVJEMTYpcmVncy0+ZWN4LFNsb3QpOworCSAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChTVUNDRVNTRlVMIDw8IDgpOworCSAgICByZWdzLT5lZmxhZ3MgJj0gfigodW5zaWduZWQgbG9uZykweDAxKTsgLyogY2xlYXIgY2FycnkgZmxhZyAqLworCX0gZWxzZSB7CisJICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKEJBRF9SRUdJU1RFUl9OVU1CRVIgPDwgOCk7CisJICAgIHJlZ3MtPmVmbGFncyB8PSAoKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIHNldCBjYXJyeSBmbGFnICovCisJfQorCWlfcHJpbnRmKCJheD0weCVseCBmbGFncz0weCVseFxuIiwgcmVncy0+ZWF4LHJlZ3MtPmVmbGFncyk7CisJcmV0dXJuIDE7CiAgICAgY2FzZSAweGIxMGQ6Ci0gICAgICAgIGlfcHJpbnRmKCJTbG90PTB4JXhcbiIsQ3VycmVudFBjaS0+U2xvdC5sKTsKLSAgICAgICAgaWYgKChTbG90ID0gZmluZFBjaShyZWdzLT5lYngpKSkgewotICAgICAgICAgICAgUGNpV3JpdGUzMihyZWdzLT5lZGksKENBUkQzMilyZWdzLT5lY3gsU2xvdCk7Ci0gICAgICAgICAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChTVUNDRVNTRlVMIDw8IDgpOwotICAgICAgICAgICAgcmVncy0+ZWZsYWdzICY9IH4oKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIGNsZWFyIGNhcnJ5IGZsYWcgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKEJBRF9SRUdJU1RFUl9OVU1CRVIgPDwgOCk7Ci0gICAgICAgICAgICByZWdzLT5lZmxhZ3MgfD0gKCh1bnNpZ25lZCBsb25nKTB4MDEpOyAvKiBzZXQgY2FycnkgZmxhZyAqLwotICAgICAgICB9Ci0gICAgICAgIGlfcHJpbnRmKCJheD0weCVseCBmbGFncz0weCVseFxuIiwgcmVncy0+ZWF4LHJlZ3MtPmVmbGFncyk7Ci0gICAgICAgIHJldHVybiAxOworCWlfcHJpbnRmKCJTbG90PTB4JXhcbiIsQ3VycmVudFBjaS0+U2xvdC5sKTsKKwlpZiAoKFNsb3QgPSBmaW5kUGNpKHJlZ3MtPmVieCkpKSB7CisJICAgIFBjaVdyaXRlMzIocmVncy0+ZWRpLChDQVJEMzIpcmVncy0+ZWN4LFNsb3QpOworCSAgICByZWdzLT5lYXggPSAocmVncy0+ZWF4ICYgMHgwMEZGKSB8IChTVUNDRVNTRlVMIDw8IDgpOworCSAgICByZWdzLT5lZmxhZ3MgJj0gfigodW5zaWduZWQgbG9uZykweDAxKTsgLyogY2xlYXIgY2FycnkgZmxhZyAqLworCX0gZWxzZSB7CisJICAgIHJlZ3MtPmVheCA9IChyZWdzLT5lYXggJiAweDAwRkYpIHwgKEJBRF9SRUdJU1RFUl9OVU1CRVIgPDwgOCk7CisJICAgIHJlZ3MtPmVmbGFncyB8PSAoKHVuc2lnbmVkIGxvbmcpMHgwMSk7IC8qIHNldCBjYXJyeSBmbGFnICovCisJfQorCWlfcHJpbnRmKCJheD0weCVseCBmbGFncz0weCVseFxuIiwgcmVncy0+ZWF4LHJlZ3MtPmVmbGFncyk7CisJcmV0dXJuIDE7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9pby5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9pby5jCmluZGV4IDEyOWUyNGYuLmYzNWI0M2UgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvaW8uYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL2lvLmMKQEAgLTM4LDE3ICszOCwxNyBAQAogewogICAgIHJlZ2lzdGVyIGludCBpbmMgPSBkX2YgPyAtMSA6IDE7CiAgICAgQ0FSRDggKmRzdCA9IGJhc2U7Ci0gICAgCisKICAgICBwX3ByaW50ZigiIHJlcF9pbnNiKCUjeCkgJWQgYnl0ZXMgYXQgJXAgJXMiLAotICAgICAgICAgICAgIHBvcnQsIGNvdW50LCBiYXNlLCBkX2Y/InVwIjoiZG93biIpOworCSAgICAgcG9ydCwgY291bnQsIGJhc2UsIGRfZj8idXAiOiJkb3duIik7CiAgICAgaWYgKENvbmZpZy5QcmludElwKQotICAgICAgICBwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOworCXBfcHJpbnRmKCIgJXhcbiIsZ2V0SVAoKSk7CiAgICAgZWxzZSBwX3ByaW50ZigiXG4iKTsKIAogICAgIHJfaW5iKys7CiAgICAgd2hpbGUgKGNvdW50LS0pIHsKLSAgICAgICAgKmRzdCA9IGluYihwb3J0KTsKLSAgICAgICAgZHN0ICs9IGluYzsKKwkqZHN0ID0gaW5iKHBvcnQpOworCWRzdCArPSBpbmM7CiAgICAgfQogICAgIHJldHVybiAoZHN0LWJhc2UpOwogfQpAQCAtNTgsMTcgKzU4LDE3IEBACiB7CiAgICAgcmVnaXN0ZXIgaW50IGluYyA9IGRfZiA/IC0xIDogMTsKICAgICBDQVJEMTYgKmRzdCA9IGJhc2U7Ci0gICAgCisKICAgICBwX3ByaW50ZigiIHJlcF9pbnN3KCUjeCkgJWQgYnl0ZXMgYXQgJXAgJXMiLAotICAgICAgICAgICAgIHBvcnQsIGNvdW50LCBiYXNlLCBkX2Y/InVwIjoiZG93biIpOworCSAgICAgcG9ydCwgY291bnQsIGJhc2UsIGRfZj8idXAiOiJkb3duIik7CiAgICAgaWYgKENvbmZpZy5QcmludElwKQotICAgICAgICBwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOworCXBfcHJpbnRmKCIgJXhcbiIsZ2V0SVAoKSk7CiAgICAgZWxzZSBwX3ByaW50ZigiXG4iKTsKIAogICAgIHJfaW53Kys7CiAgICAgd2hpbGUgKGNvdW50LS0pIHsKLSAgICAgICAgKmRzdCA9IGludyhwb3J0KTsKLSAgICAgICAgZHN0ICs9IGluYzsKKwkqZHN0ID0gaW53KHBvcnQpOworCWRzdCArPSBpbmM7CiAgICAgfQogICAgIHJldHVybiAoZHN0LWJhc2UpOwogfQpAQCAtNzgsMTcgKzc4LDE3IEBACiB7CiAgICAgcmVnaXN0ZXIgaW50IGluYyA9IGRfZiA/IC0xIDogMTsKICAgICBDQVJEMzIgKmRzdCA9IGJhc2U7Ci0gICAgCisKICAgICBwX3ByaW50ZigiIHJlcF9pbnNsKCUjeCkgJWQgYnl0ZXMgYXQgJXAgJXMiLAotICAgICAgICAgICAgIHBvcnQsIGNvdW50LCBiYXNlLCBkX2Y/InVwIjoiZG93biIpOworCSAgICAgcG9ydCwgY291bnQsIGJhc2UsIGRfZj8idXAiOiJkb3duIik7CiAgICAgaWYgKENvbmZpZy5QcmludElwKQotICAgICAgICBwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOworCXBfcHJpbnRmKCIgJXhcbiIsZ2V0SVAoKSk7CiAgICAgZWxzZSBwX3ByaW50ZigiXG4iKTsKIAogICAgIHJfaW5sKys7CiAgICAgd2hpbGUgKGNvdW50LS0pIHsKLSAgICAgICAgKmRzdCA9IGlubChwb3J0KTsKLSAgICAgICAgZHN0ICs9IGluYzsKKwkqZHN0ID0gaW5sKHBvcnQpOworCWRzdCArPSBpbmM7CiAgICAgfQogICAgIHJldHVybiAoZHN0LWJhc2UpOwogfQpAQCAtOTgsMTcgKzk4LDE3IEBACiB7CiAgICAgcmVnaXN0ZXIgaW50IGluYyA9IGRfZiA/IC0xIDogMTsKICAgICBDQVJEOCAqZHN0ID0gYmFzZTsKLSAgICAKKwogICAgIHBfcHJpbnRmKCIgcmVwX291dGIoJSN4KSAlZCBieXRlcyBhdCAlcCAlcyIsCi0gICAgICAgICAgICAgcG9ydCwgY291bnQsIGJhc2UsIGRfZj8idXAiOiJkb3duIik7CisJICAgICBwb3J0LCBjb3VudCwgYmFzZSwgZF9mPyJ1cCI6ImRvd24iKTsKICAgICBpZiAoQ29uZmlnLlByaW50SXApCi0gICAgICAgIHBfcHJpbnRmKCIgJXhcbiIsZ2V0SVAoKSk7CisJcF9wcmludGYoIiAleFxuIixnZXRJUCgpKTsKICAgICBlbHNlIHBfcHJpbnRmKCJcbiIpOwogCiAgICAgcl9vdXRiKys7CiAgICAgd2hpbGUgKGNvdW50LS0pIHsKLSAgICAgICAgb3V0Yihwb3J0LCpkc3QpOwotICAgICAgICBkc3QgKz0gaW5jOworCW91dGIocG9ydCwqZHN0KTsKKwlkc3QgKz0gaW5jOwogICAgIH0KICAgICByZXR1cm4gKGRzdC1iYXNlKTsKIH0KQEAgLTExOCwxNyArMTE4LDE3IEBACiB7CiAgICAgcmVnaXN0ZXIgaW50IGluYyA9IGRfZiA/IC0xIDogMTsKICAgICBDQVJEMTYgKmRzdCA9IGJhc2U7Ci0gICAgCisKICAgICBwX3ByaW50ZigiIHJlcF9vdXR3KCUjeCkgJWQgYnl0ZXMgYXQgJXAgJXMiLAotICAgICAgICAgICAgIHBvcnQsIGNvdW50LCBiYXNlLCBkX2Y/InVwIjoiZG93biIpOworCSAgICAgcG9ydCwgY291bnQsIGJhc2UsIGRfZj8idXAiOiJkb3duIik7CiAgICAgaWYgKENvbmZpZy5QcmludElwKQotICAgICAgICBwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOworCXBfcHJpbnRmKCIgJXhcbiIsZ2V0SVAoKSk7CiAgICAgZWxzZSBwX3ByaW50ZigiXG4iKTsKIAogICAgIHJfb3V0dysrOwogICAgIHdoaWxlIChjb3VudC0tKSB7Ci0gICAgICAgIG91dHcocG9ydCwqZHN0KTsKLSAgICAgICAgZHN0ICs9IGluYzsKKwlvdXR3KHBvcnQsKmRzdCk7CisJZHN0ICs9IGluYzsKICAgICB9CiAgICAgcmV0dXJuIChkc3QtYmFzZSk7CiB9CkBAIC0xMzgsMTcgKzEzOCwxNyBAQAogewogICAgIHJlZ2lzdGVyIGludCBpbmMgPSBkX2YgPyAtMSA6IDE7CiAgICAgQ0FSRDMyICpkc3QgPSBiYXNlOwotICAgIAorCiAgICAgcF9wcmludGYoIiByZXBfb3V0bCglI3gpICVkIGJ5dGVzIGF0ICVwICVzIiwKLSAgICAgICAgICAgICBwb3J0LCBjb3VudCwgYmFzZSwgZF9mPyJ1cCI6ImRvd24iKTsKKwkgICAgIHBvcnQsIGNvdW50LCBiYXNlLCBkX2Y/InVwIjoiZG93biIpOwogICAgIGlmIChDb25maWcuUHJpbnRJcCkKLSAgICAgICAgcF9wcmludGYoIiAleFxuIixnZXRJUCgpKTsKKwlwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOwogICAgIGVsc2UgcF9wcmludGYoIlxuIik7CiAKICAgICByX291dGwrKzsKICAgICB3aGlsZSAoY291bnQtLSkgewotICAgICAgICBvdXRsKHBvcnQsKmRzdCk7Ci0gICAgICAgIGRzdCArPSBpbmM7CisJb3V0bChwb3J0LCpkc3QpOworCWRzdCArPSBpbmM7CiAgICAgfQogICAgIHJldHVybiAoZHN0LWJhc2UpOwogfQpAQCAtMTYxLDcgKzE2MSw3IEBACiAgICAgdmFsID0gaW5iKHBvcnQpOwogICAgIHBfcHJpbnRmKCIgaW5iKCUjeCkgPSAlMi4yeCIscG9ydCx2YWwpOwogICAgIGlmIChDb25maWcuUHJpbnRJcCkKLSAgICAgICAgcF9wcmludGYoIiAleFxuIixnZXRJUCgpKTsKKwlwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOwogICAgIGVsc2UgcF9wcmludGYoIlxuIik7CiAKICAgICByZXR1cm4gdmFsOwpAQCAtMTc1LDcgKzE3NSw3IEBACiAgICAgdmFsID0gaW53KHBvcnQpOwogICAgIHBfcHJpbnRmKCIgaW53KCUjeCkgPSAlNC40eCIscG9ydCx2YWwpOwogICAgIGlmIChDb25maWcuUHJpbnRJcCkKLSAgICAgICAgcF9wcmludGYoIiAleFxuIixnZXRJUCgpKTsKKwlwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOwogICAgIGVsc2UgcF9wcmludGYoIlxuIik7CiAKICAgICByZXR1cm4gdmFsOwpAQCAtMTg4LDEzICsxODgsMTMgQEAKICAgICBpbl9sKys7CiAjaWZkZWYgTkVFRF9QQ0lfSU8KICAgICBpZiAoY2ZnMWluKHBvcnQsJnZhbCkpCi0gICAgICAgIHJldHVybiB2YWw7CisJcmV0dXJuIHZhbDsKICAgICBlbHNlCiAjZW5kaWYKICAgICB2YWwgPSBpbmwocG9ydCk7CiAgICAgcF9wcmludGYoIiBpbmwoJSN4KSA9ICU4Ljh4Iixwb3J0LHZhbCk7CiAgICAgaWYgKENvbmZpZy5QcmludElwKQotICAgICAgICBwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOworCXBfcHJpbnRmKCIgJXhcbiIsZ2V0SVAoKSk7CiAgICAgZWxzZSBwX3ByaW50ZigiXG4iKTsKIAogICAgIHJldHVybiB2YWw7CkBAIC0yMDYsNyArMjA2LDcgQEAKICAgICBvdXRfYisrOwogICAgIHBfcHJpbnRmKCIgb3V0YiglI3gsICUyLjJ4KSIscG9ydCx2YWwpOwogICAgIGlmIChDb25maWcuUHJpbnRJcCkKLSAgICAgICAgcF9wcmludGYoIiAleFxuIixnZXRJUCgpKTsKKwlwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOwogICAgIGVsc2UgcF9wcmludGYoIlxuIik7CiAKICAgICBvdXRiKHBvcnQsdmFsKTsKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgIG91dF93Kys7CiAgICAgcF9wcmludGYoIiBvdXR3KCUjeCwgJTQuNHgpIixwb3J0LHZhbCk7CiAgICAgaWYgKENvbmZpZy5QcmludElwKQotICAgICAgICBwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOworCXBfcHJpbnRmKCIgJXhcbiIsZ2V0SVAoKSk7CiAgICAgZWxzZSBwX3ByaW50ZigiXG4iKTsKIAogICAgIG91dHcocG9ydCx2YWwpOwpAQCAtMjMwLDEyICsyMzAsMTIgQEAKICAgICBvdXRfbCsrOwogICAgIHBfcHJpbnRmKCIgb3V0bCglI3gsICU4Ljh4KSIscG9ydCx2YWwpOwogICAgIGlmIChDb25maWcuUHJpbnRJcCkKLSAgICAgICAgcF9wcmludGYoIiAleFxuIixnZXRJUCgpKTsKKwlwX3ByaW50ZigiICV4XG4iLGdldElQKCkpOwogICAgIGVsc2UgcF9wcmludGYoIlxuIik7CiAKICNpZmRlZiBORUVEX1BDSV9JTwogICAgIGlmIChjZmcxb3V0KHBvcnQsdmFsKSkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICNlbmRpZgogICAgIG91dGwocG9ydCx2YWwpOwogfQpAQCAtMjQ0LDkgKzI0NCw5IEBACiBpb19zdGF0aXN0aWNzKHZvaWQpCiB7CiAgICAgcF9wcmludGYoInJlcDogaW5iOiAlaSwgaW53OiAlaSwgaW5sOiAlaSwgb3V0YjogJWksIG91dHc6ICVpLCBvdXRsOiAlaVxuIiwKLSAgICAgICAgIHJfaW5iLHJfaW53LHJfaW5sLHJfb3V0YixyX291dHcscl9vdXRsKTsKKwkgcl9pbmIscl9pbncscl9pbmwscl9vdXRiLHJfb3V0dyxyX291dGwpOwogICAgIHBfcHJpbnRmKCJpbmI6ICVpLCBpbnc6ICVpLCBpbmw6ICVpLCBvdXRiOiAlaSwgb3V0dzogJWksIG91dGw6ICVpXG4iLAotICAgICAgICAgaW5fYixpbl93LGluX2wsb3V0X2Isb3V0X3csb3V0X2wpOworCSBpbl9iLGluX3csaW5fbCxvdXRfYixvdXRfdyxvdXRfbCk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvbWFpbi5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9tYWluLmMKaW5kZXggYjczZDA1Ny4uMTVmOTExNSAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9tYWluLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9tYWluLmMKQEAgLTQ1LDEyICs0NSwxMiBAQAogI2RlZmluZSBWX0JJT1NfU0laRSAweDFGRkZGCiAjZGVmaW5lIEJJT1NfU1RBUlQgMHg3QzAwICAgICAgICAgICAgLyogZGVmYXVsdCBCSU9TIGVudHJ5ICovCiAKLS8vQ0FSRDggY29kZVtdID0geyAweGI4ICwgMHhmMCAsIDB4ZjAsIDB4ZjQgfTsKKy8qQ0FSRDggY29kZVtdID0geyAweGI4ICwgMHhmMCAsIDB4ZjAsIDB4ZjQgfTsgKi8KICNkZWZpbmUgVkJfWCh4KSAoVl9CSU9TID4+IHgpICYgMHhGRgogQ0FSRDggY29kZVtdID0geyAweDlhLCAweDAzLCAweDAwLCAweDAwLCBWQl9YKDEyKSwgMHhmNCB9OwotLy9DQVJEOCBjb2RlW10gPSB7IDB4OWEsIDB4MDMsIDB4MDAsIDB4MDAsIFZCX1goMTIpLCAweGI4LCAweDAzLCAweDAwLAotLy8weGNkLCAweDEwLCAweGY0IH07Ci0vL0NBUkQ4IGNvZGVbXSA9IHsgIDB4YjggLCAweGYwICwgMHhmMCAsMHhmNCB9OworLypDQVJEOCBjb2RlW10gPSB7IDB4OWEsIDB4MDMsIDB4MDAsIDB4MDAsIFZCX1goMTIpLCAweGI4LCAweDAzLCAweDAwLCAqLworLyoweGNkLCAweDEwLCAweGY0IH07ICovCisvKkNBUkQ4IGNvZGVbXSA9IHsgIDB4YjggLCAweGYwICwgMHhmMCAsMHhmNCB9OyAqLwogCiBzdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQpOwogc3RhdGljIGludCBtYXAodm9pZCk7CkBAIC04NywxNTQgKzg3LDE1NCBAQAogICAgIENvbmZpZy5Jb1N0YXRpc3RpY3MgPSBJT19TVEFUSVNUSUNTOwogICAgIENvbmZpZy5QcmludElycSA9IFBSSU5UX0lSUTsKICAgICBDb25maWcuUHJpbnRQY2kgPSBQUklOVF9QQ0k7Ci0gICAgQ29uZmlnLlNob3dBbGxEZXYgPSBTSE9XX0FMTF9ERVY7ICAgICAgICAKLSAgICBDb25maWcuUHJpbnRJcCA9IFBSSU5UX0lQOyAgICAgICAgICAgCi0gICAgQ29uZmlnLlNhdmVCaW9zID0gU0FWRV9CSU9TOyAgICAgICAgICAKLSAgICBDb25maWcuVHJhY2UgPSBUUkFDRTsgICAgICAgICAgICAgCi0gICAgQ29uZmlnLkNvbmZpZ0FjdGl2ZU9ubHkgPSBDT05GSUdfQUNUSVZFX09OTFk7ICAKKyAgICBDb25maWcuU2hvd0FsbERldiA9IFNIT1dfQUxMX0RFVjsKKyAgICBDb25maWcuUHJpbnRJcCA9IFBSSU5UX0lQOworICAgIENvbmZpZy5TYXZlQmlvcyA9IFNBVkVfQklPUzsKKyAgICBDb25maWcuVHJhY2UgPSBUUkFDRTsKKyAgICBDb25maWcuQ29uZmlnQWN0aXZlT25seSA9IENPTkZJR19BQ1RJVkVfT05MWTsKICAgICBDb25maWcuQ29uZmlnQWN0aXZlRGV2aWNlID0gQ09ORklHX0FDVElWRV9ERVZJQ0U7Ci0gICAgQ29uZmlnLk1hcFN5c0Jpb3MgPSBNQVBfU1lTX0JJT1M7ICAgICAgICAKLSAgICBDb25maWcuUmVzb3J0ID0gUkVTT1JUOyAgICAgICAgICAgIAotICAgIENvbmZpZy5GaXhSb20gPSBGSVhfUk9NOyAgICAgICAgICAgIAotICAgIENvbmZpZy5Ob0NvbnNvbGUgPSBOT19DT05TT0xFOyAgICAgICAgIAorICAgIENvbmZpZy5NYXBTeXNCaW9zID0gTUFQX1NZU19CSU9TOworICAgIENvbmZpZy5SZXNvcnQgPSBSRVNPUlQ7CisgICAgQ29uZmlnLkZpeFJvbSA9IEZJWF9ST007CisgICAgQ29uZmlnLk5vQ29uc29sZSA9IE5PX0NPTlNPTEU7CiAgICAgQ29uZmlnLlZlcmJvc2UgPSBWRVJCT1NFOwogCiAgICAgaWYgKCFtYXAoKSkKLSAgICAgICAgZXhpdCgxKTsKLSAgICAKKwlleGl0KDEpOworCiAgICAgaWYgKCFzZXR1cF9zeXN0ZW1fYmlvcygpKQotICAgICAgICBleGl0KDEpOwotICAgIAorCWV4aXQoMSk7CisKICAgICBpb3BsKDMpOwogICAgIHNldHVwX2lvKCk7Ci0gICAgCisKICAgICBzY2FuX3BjaSgpOwogICAgIGlmICghQ3VycmVudFBjaSAmJiAhQ29uZmlnLkNvbmZpZ0FjdGl2ZURldmljZSAmJiAhQ29uZmlnLkNvbmZpZ0FjdGl2ZU9ubHkpCi0gICAgICAgIGV4aXQgKDEpOworCWV4aXQgKDEpOwogI2VuZGlmCiAgICAgQ29uc29sZSA9IG9wZW5fY29uc29sZSgpOwogCiAgICAgaWYgKENvbmZpZy5Db25maWdBY3RpdmVPbmx5KSB7Ci0gICAgICAgIENBUkQxNiBheDsKLSAgICAgICAgaW50IGFjdGl2ZVBjaSA9IDA7Ci0gICAgICAgIGludCBlcnJvciA9IDA7Ci0gICAgICAgIAotICAgICAgICB3aGlsZSAoQ3VycmVudFBjaSkgewotICAgICAgICAgICAgaWYgKEN1cnJlbnRQY2ktPmFjdGl2ZSkgewotICAgICAgICAgICAgICAgIGFjdGl2ZVBjaSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobWFwUGNpUm9tKE5VTEwpICYmIGNoa3N1bSgoQ0FSRDgqKVZfQklPUykpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDdXJyZW50UGNpID0gQ3VycmVudFBjaS0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICBheCA9ICgoQ0FSRDE2KShDdXJyZW50UGNpLT5idXMpIDw8IDgpCi0gICAgICAgICAgICB8IChDdXJyZW50UGNpLT5kZXYgPDwgMykgfCAoQ3VycmVudFBjaS0+ZnVuYyAmIDB4Nyk7Ci0gICAgICAgIFBfcHJpbnRmKCJheDogMHgleFxuIixheCk7Ci0gICAgICAgIHNldHVwX2ludF92ZWN0KCk7Ci0gICAgICAgIGlmICghZXJyb3IgJiYgKGFjdGl2ZVBjaSB8fCBjb3B5X3ZiaW9zKCkpKSB7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChDb25maWcuU2F2ZUJpb3MpIHNhdmVfYmlvc190b19maWxlKCk7Ci0gICAgICAgICAgICBpZiAgKG1hcF92cmFtKCkpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImluaXRpYWxpemluZyBJU0FcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3RCSU9TKDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHVubWFwX3ZyYW0oKTsKLSAgICAgICAgc2xlZXAoMSk7ICAgICAgIAorCUNBUkQxNiBheDsKKwlpbnQgYWN0aXZlUGNpID0gMDsKKwlpbnQgZXJyb3IgPSAwOworCisJd2hpbGUgKEN1cnJlbnRQY2kpIHsKKwkgICAgaWYgKEN1cnJlbnRQY2ktPmFjdGl2ZSkgeworCQlhY3RpdmVQY2kgPSAxOworCQkJICAgIGlmICghKG1hcFBjaVJvbShOVUxMKSAmJiBjaGtzdW0oKENBUkQ4KilWX0JJT1MpKSkKKwkJCQllcnJvciA9IDE7CisJCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgQ3VycmVudFBjaSA9IEN1cnJlbnRQY2ktPm5leHQ7CisJfQorCWF4ID0gKChDQVJEMTYpKEN1cnJlbnRQY2ktPmJ1cykgPDwgOCkKKwkgICAgfCAoQ3VycmVudFBjaS0+ZGV2IDw8IDMpIHwgKEN1cnJlbnRQY2ktPmZ1bmMgJiAweDcpOworCVBfcHJpbnRmKCJheDogMHgleFxuIixheCk7CisJc2V0dXBfaW50X3ZlY3QoKTsKKwlpZiAoIWVycm9yICYmIChhY3RpdmVQY2kgfHwgY29weV92YmlvcygpKSkgeworCisJICAgIGlmIChDb25maWcuU2F2ZUJpb3MpIHNhdmVfYmlvc190b19maWxlKCk7CisJICAgIGlmICAobWFwX3ZyYW0oKSkgeworCQlwcmludGYoImluaXRpYWxpemluZyBJU0FcbiIpOworCQkJICAgIGJvb3RCSU9TKDApOworCSAgICB9CisJfQorCXVubWFwX3ZyYW0oKTsKKwlzbGVlcCgxKTsKICAgICB9IGVsc2UgewotICAgICAgICAvKiBkaXNhYmxlIHByaW1hcnkgY2FyZCAqLwotICAgICAgICBzYXZlX21zciA9IGluYigweDNDQyk7Ci0gICAgICAgIHNhdmVfdnNlID0gaW5iKDB4M0MzKTsKLSAgICAgICAgc2F2ZV80NmU4ID0gaW5iKDB4NDZlOCk7Ci0gICAgICAgIHNhdmVfcG9zMTAyID0gaW5iKDB4MTAyKTsKLSAgICAgICAgCi0gICAgICAgIHNpZ25hbCgyLHNpZ19oYW5kbGVyKTsKLSAgICAgICAgc2lnbmFsKDExLHNpZ19oYW5kbGVyKTsKLSAgICAgICAgCi0gICAgICAgIG91dGIoMHgzQzIsfihDQVJEOCkweDAzICYgc2F2ZV9tc3IpOwotICAgICAgICBvdXRiKDB4M0MzLH4oQ0FSRDgpMHgwMSAmIHNhdmVfdnNlKTsKLSAgICAgICAgb3V0YigweDQ2ZTgsIH4oQ0FSRDgpMHgwOCAmIHNhdmVfNDZlOCk7Ci0gICAgICAgIG91dGIoMHgxMDIsIH4oQ0FSRDgpMHgwMSAmIHNhdmVfcG9zMTAyKTsKLSAgICAgICAgCi0gICAgICAgIHBjaVZpZGVvRGlzYWJsZSgpOwotICAgICAgICAKLSAgICAgICAgd2hpbGUgKEN1cnJlbnRQY2kpIHsKLSAgICAgICAgICAgIENBUkQxNiBheDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKEN1cnJlbnRQY2ktPmFjdGl2ZSkgewotICAgICAgICAgICAgICAgIEFjdGl2ZV9pc19QY2kgPSAxOwotICAgICAgICAgICAgICAgIGlmICghQ29uZmlnLkNvbmZpZ0FjdGl2ZURldmljZSkgewotICAgICAgICAgICAgICAgICAgICBDdXJyZW50UGNpID0gQ3VycmVudFBjaS0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBFbmFibGVDdXJyZW50KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChDdXJyZW50UGNpLT5hY3RpdmUpIHsKLSAgICAgICAgICAgICAgICBvdXRiKDB4MTAyLCBzYXZlX3BvczEwMik7Ci0gICAgICAgICAgICAgICAgb3V0YigweDQ2ZTgsIHNhdmVfNDZlOCk7Ci0gICAgICAgICAgICAgICAgb3V0YigweDNDMywgc2F2ZV92c2UpOwotICAgICAgICAgICAgICAgIG91dGIoMHgzQzIsIHNhdmVfbXNyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLyogY2xlYXIgaW50ZXJydXB0IHZlY3RvcnMgKi8KLSAgICAgICAgICAgIHNldHVwX2ludF92ZWN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF4ID0gKChDQVJEMTYpKEN1cnJlbnRQY2ktPmJ1cykgPDwgOCkKLSAgICAgICAgICAgICAgICB8IChDdXJyZW50UGNpLT5kZXYgPDwgMykgfCAoQ3VycmVudFBjaS0+ZnVuYyAmIDB4Nyk7Ci0gICAgICAgICAgICBQX3ByaW50ZigiYXg6IDB4JXhcbiIsYXgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoISgobWFwUGNpUm9tKE5VTEwpICYmIGNoa3N1bSgoQ0FSRDgqKVZfQklPUykpCi0gICAgICAgICAgICAgICAgICB8fCAoQ3VycmVudFBjaS0+YWN0aXZlICYmIGNvcHlfdmJpb3MoKSkpKSB7Ci0gICAgICAgICAgICAgICAgQ3VycmVudFBjaSA9IEN1cnJlbnRQY2ktPm5leHQ7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIW1hcF92cmFtKCkpIHsKLSAgICAgICAgICAgICAgICBDdXJyZW50UGNpID0gQ3VycmVudFBjaS0+bmV4dDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChDb25maWcuU2F2ZUJpb3MpIHNhdmVfYmlvc190b19maWxlKCk7Ci0gICAgICAgICAgICBwcmludGYoImluaXRpYWxpemluZyBQQ0kgYnVzOiAlaSBkZXY6ICVpIGZ1bmM6ICVpXG4iLEN1cnJlbnRQY2ktPmJ1cywKLSAgICAgICAgICAgICAgICAgICBDdXJyZW50UGNpLT5kZXYsQ3VycmVudFBjaS0+ZnVuYyk7Ci0gICAgICAgICAgICBib290QklPUyhheCk7Ci0gICAgICAgICAgICB1bm1hcF92cmFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEN1cnJlbnRQY2kgPSBDdXJyZW50UGNpLT5uZXh0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKiBXZSBoYXZlIGFuIElTQSBkZXZpY2UgLSBjb25maWd1cmUgaWYgcmVxdWVzdGVkICovCi0gICAgICAgIGlmICghQWN0aXZlX2lzX1BjaSAmJiBDb25maWcuQ29uZmlnQWN0aXZlRGV2aWNlKSB7Ci0gICAgICAgICAgICBwY2lWaWRlb0Rpc2FibGUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgb3V0YigweDEwMiwgc2F2ZV9wb3MxMDIpOwotICAgICAgICAgICAgb3V0YigweDQ2ZTgsIHNhdmVfNDZlOCk7Ci0gICAgICAgICAgICBvdXRiKDB4M0MzLCBzYXZlX3ZzZSk7Ci0gICAgICAgICAgICBvdXRiKDB4M0MyLCBzYXZlX21zcik7CisJLyogZGlzYWJsZSBwcmltYXJ5IGNhcmQgKi8KKwlzYXZlX21zciA9IGluYigweDNDQyk7CisJc2F2ZV92c2UgPSBpbmIoMHgzQzMpOworCXNhdmVfNDZlOCA9IGluYigweDQ2ZTgpOworCXNhdmVfcG9zMTAyID0gaW5iKDB4MTAyKTsKIAotICAgICAgICAgICAgc2V0dXBfaW50X3ZlY3QoKTsKLSAgICAgICAgICAgIGlmIChjb3B5X3ZiaW9zKCkpIHsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoQ29uZmlnLlNhdmVCaW9zKSBzYXZlX2Jpb3NfdG9fZmlsZSgpOwotICAgICAgICAgICAgICAgIGlmICAobWFwX3ZyYW0oKSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoImluaXRpYWxpemluZyBJU0FcbiIpOwotICAgICAgICAgICAgICAgICAgICBib290QklPUygwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgdW5tYXBfdnJhbSgpOwotICAgICAgICAgICAgc2xlZXAoMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHBjaVZpZGVvUmVzdG9yZSgpOworCXNpZ25hbCgyLHNpZ19oYW5kbGVyKTsKKwlzaWduYWwoMTEsc2lnX2hhbmRsZXIpOwogCi0gICAgICAgIG91dGIoMHgxMDIsIHNhdmVfcG9zMTAyKTsKLSAgICAgICAgb3V0YigweDQ2ZTgsIHNhdmVfNDZlOCk7Ci0gICAgICAgIG91dGIoMHgzQzMsIHNhdmVfdnNlKTsKLSAgICAgICAgb3V0YigweDNDMiwgc2F2ZV9tc3IpOworCW91dGIoMHgzQzIsfihDQVJEOCkweDAzICYgc2F2ZV9tc3IpOworCW91dGIoMHgzQzMsfihDQVJEOCkweDAxICYgc2F2ZV92c2UpOworCW91dGIoMHg0NmU4LCB+KENBUkQ4KTB4MDggJiBzYXZlXzQ2ZTgpOworCW91dGIoMHgxMDIsIH4oQ0FSRDgpMHgwMSAmIHNhdmVfcG9zMTAyKTsKKworCXBjaVZpZGVvRGlzYWJsZSgpOworCisJd2hpbGUgKEN1cnJlbnRQY2kpIHsKKwkgICAgQ0FSRDE2IGF4OworCisJICAgIGlmIChDdXJyZW50UGNpLT5hY3RpdmUpIHsKKwkJQWN0aXZlX2lzX1BjaSA9IDE7CisJCWlmICghQ29uZmlnLkNvbmZpZ0FjdGl2ZURldmljZSkgeworCQkgICAgQ3VycmVudFBjaSA9IEN1cnJlbnRQY2ktPm5leHQ7CisJCSAgICBjb250aW51ZTsKKwkJfQorCSAgICB9CisKKwkgICAgRW5hYmxlQ3VycmVudCgpOworCisJICAgIGlmIChDdXJyZW50UGNpLT5hY3RpdmUpIHsKKwkJb3V0YigweDEwMiwgc2F2ZV9wb3MxMDIpOworCQlvdXRiKDB4NDZlOCwgc2F2ZV80NmU4KTsKKwkJb3V0YigweDNDMywgc2F2ZV92c2UpOworCQlvdXRiKDB4M0MyLCBzYXZlX21zcik7CisJICAgIH0KKworCSAgICAvKiBjbGVhciBpbnRlcnJ1cHQgdmVjdG9ycyAqLworCSAgICBzZXR1cF9pbnRfdmVjdCgpOworCisJICAgIGF4ID0gKChDQVJEMTYpKEN1cnJlbnRQY2ktPmJ1cykgPDwgOCkKKwkJfCAoQ3VycmVudFBjaS0+ZGV2IDw8IDMpIHwgKEN1cnJlbnRQY2ktPmZ1bmMgJiAweDcpOworCSAgICBQX3ByaW50ZigiYXg6IDB4JXhcbiIsYXgpOworCisJICAgIGlmICghKChtYXBQY2lSb20oTlVMTCkgJiYgY2hrc3VtKChDQVJEOCopVl9CSU9TKSkKKwkJICB8fCAoQ3VycmVudFBjaS0+YWN0aXZlICYmIGNvcHlfdmJpb3MoKSkpKSB7CisJCUN1cnJlbnRQY2kgPSBDdXJyZW50UGNpLT5uZXh0OworCQljb250aW51ZTsKKwkgICAgfQorCSAgICBpZiAoIW1hcF92cmFtKCkpIHsKKwkJQ3VycmVudFBjaSA9IEN1cnJlbnRQY2ktPm5leHQ7CisJCWNvbnRpbnVlOworCSAgICB9CisJICAgIGlmIChDb25maWcuU2F2ZUJpb3MpIHNhdmVfYmlvc190b19maWxlKCk7CisJICAgIHByaW50ZigiaW5pdGlhbGl6aW5nIFBDSSBidXM6ICVpIGRldjogJWkgZnVuYzogJWlcbiIsQ3VycmVudFBjaS0+YnVzLAorCQkgICBDdXJyZW50UGNpLT5kZXYsQ3VycmVudFBjaS0+ZnVuYyk7CisJICAgIGJvb3RCSU9TKGF4KTsKKwkgICAgdW5tYXBfdnJhbSgpOworCisJICAgIEN1cnJlbnRQY2kgPSBDdXJyZW50UGNpLT5uZXh0OworCX0KKworCS8qIFdlIGhhdmUgYW4gSVNBIGRldmljZSAtIGNvbmZpZ3VyZSBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoIUFjdGl2ZV9pc19QY2kgJiYgQ29uZmlnLkNvbmZpZ0FjdGl2ZURldmljZSkgeworCSAgICBwY2lWaWRlb0Rpc2FibGUoKTsKKworCSAgICBvdXRiKDB4MTAyLCBzYXZlX3BvczEwMik7CisJICAgIG91dGIoMHg0NmU4LCBzYXZlXzQ2ZTgpOworCSAgICBvdXRiKDB4M0MzLCBzYXZlX3ZzZSk7CisJICAgIG91dGIoMHgzQzIsIHNhdmVfbXNyKTsKKworCSAgICBzZXR1cF9pbnRfdmVjdCgpOworCSAgICBpZiAoY29weV92YmlvcygpKSB7CisKKwkJaWYgKENvbmZpZy5TYXZlQmlvcykgc2F2ZV9iaW9zX3RvX2ZpbGUoKTsKKwkJaWYgIChtYXBfdnJhbSgpKSB7CisJCSAgICBwcmludGYoImluaXRpYWxpemluZyBJU0FcbiIpOworCQkgICAgYm9vdEJJT1MoMCk7CisJCX0KKwkgICAgfQorCisJICAgIHVubWFwX3ZyYW0oKTsKKwkgICAgc2xlZXAoMSk7CisJfQorCisJcGNpVmlkZW9SZXN0b3JlKCk7CisKKwlvdXRiKDB4MTAyLCBzYXZlX3BvczEwMik7CisJb3V0YigweDQ2ZTgsIHNhdmVfNDZlOCk7CisJb3V0YigweDNDMywgc2F2ZV92c2UpOworCW91dGIoMHgzQzIsIHNhdmVfbXNyKTsKICAgICB9Ci0gICAgCisKICAgICBjbG9zZV9jb25zb2xlKENvbnNvbGUpOwogI2lmZGVmIERFTEVURQogICAgIGlvcGwoMCk7CkBAIC0yNDMsMjQgKzI0MywyNCBAQAogICAgIHByaW50ZigiZG9uZSAhXG4iKTsKICNlbmRpZgogICAgIGlmIChDb25maWcuSW9TdGF0aXN0aWNzKQotICAgICAgICBpb19zdGF0aXN0aWNzKCk7CisJaW9fc3RhdGlzdGljcygpOwogI2lmZGVmIERFTEVURQogICAgIGV4aXQoMCk7CiAjZW5kaWYKIH0KIAotaW50ICAKK2ludAogbWFwKHZvaWQpCiB7CiAgICAgdm9pZCogbWVtOwogCiAgICAgbWVtID0gbW1hcCgwLCAoc2l6ZV90KVNJWkUsCi0gICAgICAgICAgICAgICBQUk9UX0VYRUMgfCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAotICAgICAgICAgICAgICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwKLSAgICAgICAgICAgICAgIC0xLCAwICk7IAorCSAgICAgICBQUk9UX0VYRUMgfCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCSAgICAgICBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLAorCSAgICAgICAtMSwgMCApOwogICAgIGlmIChtZW0gIT0gMCkgewotICAgICAgICBwZXJyb3IoImFub255bW91cyBtYXAiKTsKLSAgICAgICAgcmV0dXJuICgwKTsKKwlwZXJyb3IoImFub255bW91cyBtYXAiKTsKKwlyZXR1cm4gKDApOwogICAgIH0KICAgICBtZW1zZXQobWVtLDAsU0laRSk7CiAKQEAgLTI5NCwzMyArMjk0LDMzIEBACiAgICAgaW50IG1lbV9mZDsKIAogI2lmZGVmIF9faWE2NF9fCi0gICAgaWYgKChtZW1fZmQgPSBvcGVuKE1FTV9GSUxFLE9fUkRXUiB8IE9fU1lOQykpPDApIAorICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JEV1IgfCBPX1NZTkMpKTwwKQogI2Vsc2UKLSAgICBpZiAoKG1lbV9mZCA9IG9wZW4oTUVNX0ZJTEUsT19SRFdSKSk8MCkgCisgICAgaWYgKChtZW1fZmQgPSBvcGVuKE1FTV9GSUxFLE9fUkRXUikpPDApCiAjZW5kaWYKICAgICAgIHsKLSAgICAgICAgcGVycm9yKCJvcGVuaW5nIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gMDsKKwlwZXJyb3IoIm9wZW5pbmcgbWVtb3J5Iik7CisJcmV0dXJuIDA7CiAgICAgfQogCiAjaWZuZGVmIF9fYWxwaGFfXwogICAgIGlmIChtbWFwKCh2b2lkICopIFZSQU1fU1RBUlQsIChzaXplX3QpIFZSQU1fU0laRSwKLSAgICAgICAgICAgICAgICAgICAgIFBST1RfRVhFQyB8IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQgfCBNQVBfRklYRUQsCi0gICAgICAgICAgICAgICAgICAgICBtZW1fZmQsIFZSQU1fU1RBUlQpID09ICh2b2lkICopIC0xKSAKKwkJICAgICBQUk9UX0VYRUMgfCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVELAorCQkgICAgIG1lbV9mZCwgVlJBTV9TVEFSVCkgPT0gKHZvaWQgKikgLTEpCiAjZWxzZQotICAgICAgICAgaWYgKCFfYnVzX2Jhc2UoKSkgc3BhcnNlX3NoaWZ0ID0gNzsgLyogVWgsIG9oLCBKRU5TRU4uLi4gKi8KLSAgICAgICAgIGlmICghX2J1c19iYXNlX3NwYXJzZSgpKSBzcGFyc2Vfc2hpZnQgPSAwOwotICAgICAgICAgaWYgKCh2cmFtX21hcCA9IG1tYXAoMCwoc2l6ZV90KSAoVlJBTV9TSVpFIDw8IHNwYXJzZV9zaGlmdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfU0hBUkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbV9mZCwgKFZSQU1fU1RBUlQgPDwgc3BhcnNlX3NoaWZ0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgX2J1c19iYXNlX3NwYXJzZSgpKSkgPT0gKHZvaWQgKikgLTEpCisJIGlmICghX2J1c19iYXNlKCkpIHNwYXJzZV9zaGlmdCA9IDc7IC8qIFVoLCBvaCwgSkVOU0VOLi4uICovCisJIGlmICghX2J1c19iYXNlX3NwYXJzZSgpKSBzcGFyc2Vfc2hpZnQgPSAwOworCSBpZiAoKHZyYW1fbWFwID0gbW1hcCgwLChzaXplX3QpIChWUkFNX1NJWkUgPDwgc3BhcnNlX3NoaWZ0KSwKKwkJCQkJCSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCQkJCQkJIE1BUF9TSEFSRUQsCisJCQkJCQkgbWVtX2ZkLCAoVlJBTV9TVEFSVCA8PCBzcGFyc2Vfc2hpZnQpCisJCQkJCQkgfCBfYnVzX2Jhc2Vfc3BhcnNlKCkpKSA9PSAodm9pZCAqKSAtMSkKICNlbmRpZgogICAgICAgewotICAgICAgICBwZXJyb3IoIm1tYXAgZXJyb3IgaW4gbWFwX2hhcmR3YXJlX3JhbSIpOwotICAgICAgICAgICAgY2xvc2UobWVtX2ZkKTsKLSAgICAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgICAgIH0KKwlwZXJyb3IoIm1tYXAgZXJyb3IgaW4gbWFwX2hhcmR3YXJlX3JhbSIpOworCSAgICBjbG9zZShtZW1fZmQpOworCSAgICByZXR1cm4gKDApOworCX0KICAgICB2cmFtX21hcHBlZCA9IDE7CiAgICAgY2xvc2UobWVtX2ZkKTsKICAgICByZXR1cm4gKDEpOwpAQCAtMzMwLDcgKzMzMCw3IEBACiB1bm1hcF92cmFtKHZvaWQpCiB7CiAgICAgaWYgKCF2cmFtX21hcHBlZCkgcmV0dXJuOwotICAgIAorCiAgICAgbXVubWFwKCh2b2lkKilWUkFNX1NUQVJULFZSQU1fU0laRSk7CiAgICAgdnJhbV9tYXBwZWQgPSAwOwogfQpAQCAtMzQzLDM5ICszNDMsMzkgQEAKICAgICBpbnQgc2l6ZTsKIAogICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JET05MWSkpPDApIHsKLSAgICAgICAgcGVycm9yKCJvcGVuaW5nIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gKDApOworCXBlcnJvcigib3BlbmluZyBtZW1vcnkiKTsKKwlyZXR1cm4gKDApOwogICAgIH0KIAotICAgIGlmIChsc2VlayhtZW1fZmQsKG9mZl90KSBWX0JJT1MsIFNFRUtfU0VUKSAhPSAob2ZmX3QpIFZfQklPUykgeyAKLSAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQ2Fubm90IGxzZWVrXG4iKTsKLSAgICAgICAgICBnb3RvIEVycm9yOworICAgIGlmIChsc2VlayhtZW1fZmQsKG9mZl90KSBWX0JJT1MsIFNFRUtfU0VUKSAhPSAob2ZmX3QpIFZfQklPUykgeworCSAgZnByaW50ZihzdGRlcnIsIkNhbm5vdCBsc2Vla1xuIik7CisJICBnb3RvIEVycm9yOwogICAgICAgfQogICAgIHRtcCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKDMpOwogICAgIGlmIChyZWFkKG1lbV9mZCwgKGNoYXIgKil0bXAsIChzaXplX3QpIDMpICE9IChzaXplX3QpIDMpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgcmVhZFxuIik7Ci0gICAgICAgIGdvdG8gRXJyb3I7CisJICAgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgcmVhZFxuIik7CisJZ290byBFcnJvcjsKICAgICB9Ci0gICAgaWYgKGxzZWVrKG1lbV9mZCwob2ZmX3QpIFZfQklPUyxTRUVLX1NFVCkgIT0gKG9mZl90KSBWX0JJT1MpIAotICAgICAgICBnb3RvIEVycm9yOworICAgIGlmIChsc2VlayhtZW1fZmQsKG9mZl90KSBWX0JJT1MsU0VFS19TRVQpICE9IChvZmZfdCkgVl9CSU9TKQorCWdvdG8gRXJyb3I7CiAKICAgICBpZiAoKnRtcCAhPSAweDU1IHx8ICoodG1wKzEpICE9IDB4QUEgKSB7CiAjaWZkZWYgREVCVUcKLSAgICAgICAgZHByaW50KCh1bnNpZ25lZCBsb25nKXRtcCwweDEwMCk7CisJZHByaW50KCh1bnNpZ25lZCBsb25nKXRtcCwweDEwMCk7CiAjZW5kaWYKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIk5vIGJpb3MgZm91bmQgYXQ6IDB4JXhcbiIsVl9CSU9TKTsKLSAgICAgICAgZ290byBFcnJvcjsKKwlmcHJpbnRmKHN0ZGVyciwiTm8gYmlvcyBmb3VuZCBhdDogMHgleFxuIixWX0JJT1MpOworCWdvdG8gRXJyb3I7CiAgICAgfQogICAgIHNpemUgPSAqKHRtcCsyKSAqIDUxMjsKIAogICAgIGlmIChyZWFkKG1lbV9mZCwgKGNoYXIgKilWX0JJT1MsIChzaXplX3QpIHNpemUpICE9IChzaXplX3QpIHNpemUpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgcmVhZFxuIik7Ci0gICAgICAgIGdvdG8gRXJyb3I7CisJICAgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgcmVhZFxuIik7CisJZ290byBFcnJvcjsKICAgICB9CiAgICAgZnJlZSh0bXApOwogICAgIGNsb3NlKG1lbV9mZCk7CiAgICAgaWYgKCFjaGtzdW0oKENBUkQ4KVZfQklPUykpCi0gICAgICAgIHJldHVybiAoMCk7CisJcmV0dXJuICgwKTsKIAogICAgIHJldHVybiAoMSk7CiAKQEAgLTM5MiwxNCArMzkyLDE0IEBACiAgICAgaW50IG1lbV9mZDsKIAogICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JET05MWSkpPDApIHsKLSAgICAgICAgcGVycm9yKCJvcGVuaW5nIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gKDApOworCXBlcnJvcigib3BlbmluZyBtZW1vcnkiKTsKKwlyZXR1cm4gKDApOwogICAgIH0KLSAgCi0gICAgaWYgKGxzZWVrKG1lbV9mZCwob2ZmX3QpIFNZU19CSU9TLFNFRUtfU0VUKSAhPSAob2ZmX3QpIFNZU19CSU9TKSAKLSAgICAgICAgZ290byBFcnJvcjsKLSAgICBpZiAocmVhZChtZW1fZmQsIChjaGFyICopU1lTX0JJT1MsIChzaXplX3QpIDB4RkZGRikgIT0gKHNpemVfdCkgMHhGRkZGKSAKLSAgICAgICAgZ290byBFcnJvcjsKKworICAgIGlmIChsc2VlayhtZW1fZmQsKG9mZl90KSBTWVNfQklPUyxTRUVLX1NFVCkgIT0gKG9mZl90KSBTWVNfQklPUykKKwlnb3RvIEVycm9yOworICAgIGlmIChyZWFkKG1lbV9mZCwgKGNoYXIgKilTWVNfQklPUywgKHNpemVfdCkgMHhGRkZGKSAhPSAoc2l6ZV90KSAweEZGRkYpCisJZ290byBFcnJvcjsKIAogICAgIGNsb3NlKG1lbV9mZCk7CiAgICAgcmV0dXJuICgxKTsKQEAgLTQxNSwxNiArNDE1LDE2IEBACiB7CiAgICAgaW50IGk7CiAgICAgQ0FSRDggdmFsOwotICAgIAorCiAgICAgZm9yICggaT0wOztpKyspIHsKLSAgICAgICAgdmFsID0gY29kZVtpXTsKLSAgICAgICAgKnB0cisrID0gdmFsOwotICAgICAgICBpZiAodmFsID09IDB4ZjQpIGJyZWFrOworCXZhbCA9IGNvZGVbaV07CisJKnB0cisrID0gdmFsOworCWlmICh2YWwgPT0gMHhmNCkgYnJlYWs7CiAgICAgfQogICAgIHJldHVybjsKIH0KLSAgICAgICAgCi12b2lkIAorCit2b2lkCiBkcHJpbnQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogICAgIGludCBpLGo7CkBAIC00MzMsMTMgKzQzMywxMyBAQAogICAgIGZvciAoaiA9IDA7IGogPCAoc2l6ZSA+PiA0KTsgaisrKSB7CiAgICAgY2hhciAqZCA9IGM7CiAgICAgcHJpbnRmKCJcbjB4JWx4OiAgIiwodW5zaWduZWQgbG9uZyljKTsKLSAgICBmb3IgKGkgPSAwOyBpPDE2OyBpKyspIAotICAgICAgICBwcmludGYoIiUyLjJ4ICIsKHVuc2lnbmVkIGNoYXIpICgqKGMrKykpKTsKKyAgICBmb3IgKGkgPSAwOyBpPDE2OyBpKyspCisJcHJpbnRmKCIlMi4yeCAiLCh1bnNpZ25lZCBjaGFyKSAoKihjKyspKSk7CiAgICAgYyA9IGQ7CiAgICAgZm9yIChpID0gMDsgaTwxNjsgaSsrKSB7Ci0gICAgICAgIHByaW50ZigiJWMiLCgoKChDQVJEOCkoKmMpKSA+IDMyKSAmJiAoKChDQVJEOCkoKmMpKSA8IDEyOCkpID8KLSAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpICgqKGMpKTogJy4nKTsKLSAgICAgICAgYysrOworCXByaW50ZigiJWMiLCgoKChDQVJEOCkoKmMpKSA+IDMyKSAmJiAoKChDQVJEOCkoKmMpKSA8IDEyOCkpID8KKwkgICAodW5zaWduZWQgY2hhcikgKCooYykpOiAnLicpOworCWMrKzsKICAgICB9CiAgICAgfQogICAgIHByaW50ZigiXG4iKTsKQEAgLTQ1MiwxNiArNDUyLDE2IEBACiAgICAgaW50IHNpemUsIGNvdW50OwogICAgIGNoYXIgZmlsZV9uYW1lWzI1Nl07CiAgICAgaW50IGZkOwotICAgIAorCiAgICAgc3ByaW50ZihmaWxlX25hbWUsImJpb3NfJWkuZmlsIixudW0pOwogICAgIGlmICgoZmQgPSAgb3BlbihmaWxlX25hbWUsT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywwMDY0NCkpID09IC0xKQotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogICAgIHNpemUgPSAoKih1bnNpZ25lZCBjaGFyKikoVl9CSU9TICsgMikpICogNTEyOwogI2lmZGVmIFY4NkJJT1NfREVCVUcKICAgICBkcHJpbnQoVl9CSU9TLDIwKTsKICNlbmRpZgogICAgIGlmICgoY291bnQgPSB3cml0ZShmZCwodm9pZCAqKShWX0JJT1MpLHNpemUpKSAhPSBzaXplKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwib25seSBzYXZlZCAlaSBvZiAlaSBieXRlc1xuIixzaXplLGNvdW50KTsKKwlmcHJpbnRmKHN0ZGVyciwib25seSBzYXZlZCAlaSBvZiAlaSBieXRlc1xuIixzaXplLGNvdW50KTsKICAgICBudW0rKzsKIH0KIApAQCAtNTExLDExICs1MTEsMTEgQEAKICAgICBjb25zdCBDQVJEMTYgY3MgPSAweDAwMDA7CiAgICAgY29uc3QgQ0FSRDE2IGlwID0gMHgwOwogICAgIGludCBpOwotICAgIAorCiAgICAgLyogbGV0IHRoZSBpbnQgdmVjdHMgcG9pbnQgdG8gdGhlIFNZU19CSU9TIHNlZyAqLwogICAgIGZvciAoaT0wOyBpPDB4ODA7IGkrKykgewotICAgICAgICAoKENBUkQxNiopMClbaTw8MV0gPSBpcDsKLSAgICAgICAgKChDQVJEMTYqKTApWyhpPDwxKSsxXSA9IGNzOworCSgoQ0FSRDE2KikwKVtpPDwxXSA9IGlwOworCSgoQ0FSRDE2KikwKVsoaTw8MSkrMV0gPSBjczsKICAgICB9CiAgICAgLyogdmlkZW8gaW50ZXJydXB0cyBkZWZhdWx0IGxvY2F0aW9uICovCiAgICAgKChDQVJEMTYqKTApWygweDQyPDwxKSsxXSA9IDB4ZjAwMDsKQEAgLTU2NiwxMyArNTY2LDEzIEBACiB7CiAgICAgY2hhciAqZGF0ZSA9ICIwNi8wMS85OSI7CiAgICAgY2hhciAqZWlzYV9pZGVudCA9ICJQQ0kvSVNBIjsKLSAgICAKKwogI2lmIE1BUF9TWVNfQklPUwogICAgIGlmICghY29weV9zeXNfYmlvcygpKSByZXR1cm4gMDsKICAgICByZXR1cm4gMTsKICNlbmRpZgotLy8gICAgbWVtc2V0KCh2b2lkICopMHhGMDAwMCwweGY0LDB4ZmZmNyk7Ci0gICAgCisvKiAgICBtZW1zZXQoKHZvaWQgKikweEYwMDAwLDB4ZjQsMHhmZmY3KTsgKi8KKwogICAgIC8qCiAgICAgICogd2UgdHJhcCB0aGUgImluZHVzdHJ5IHN0YW5kYXJkIGVudHJ5IHBvaW50cyIgdG8gdGhlIEJJT1MKICAgICAgKiBhbmQgYWxsIG90aGVyIGxvY2F0aW9ucyBieSBmaWxsaW5nIHRoZW0gd2l0aCAiaGx0IgpAQCAtNTg2LDcgKzU4Niw3IEBACiAgICAgICogYW5kIHRoZSBmb250IHRhYmxlcyAoMHhmYTZlLTB4ZmU2ZCkKICAgICAgKiBmcm9tIHRoZSBvcmlnaW5hbCBiaW9zIGhlcmUKICAgICAgKi8KLSAgICAKKwogICAgIC8qIHNldCBiaW9zIGRhdGUgKi8KICAgICBzdHJjcHkoKGNoYXIgKikweEZGRkY1LGRhdGUpOwogICAgIC8qIHNldCB1cCBlaXNhIGlkZW50IHN0cmluZyAqLwpAQCAtNjA0LDEwICs2MDQsMTAgQEAKICAgQ0FSRDggdmFsID0gMDsKICAgaW50IGk7CiAKLSAgc2l6ZSA9ICooc3RhcnQrMikgKiA1MTI7ICAKKyAgc2l6ZSA9ICooc3RhcnQrMikgKiA1MTI7CiAgIGZvciAoaSA9IDA7IGk8c2l6ZTsgaSsrKQogICAgIHZhbCArPSAqKHN0YXJ0ICsgaSk7Ci0gICAgCisKICAgaWYgKCF2YWwpCiAgICAgcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvbWVtLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL21lbS5jCmluZGV4IDUwZGM1NWYuLjI0YzFhZWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvbWVtLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9tZW0uYwpAQCAtNDMsNyArNDMsNyBAQAogICAgIHJlc3VsdCA9ICoodnVpcCkgKCh1bnNpZ25lZCBsb25nKXZyYW1fbWFwICsgKGFkZHIgPDwgc3BhcnNlX3NoaWZ0KSk7CiAgICAgcmVzdWx0ID4+PSBzaGlmdDsKICAgICByZXR1cm4gMHhmZlVMICYgcmVzdWx0OwotICB9IGVsc2UgCisgIH0gZWxzZQogI2VuZGlmCiAgICAgcmV0dXJuIHJkYihhZGRyKTsKIH0KQEAgLTUyLDE1ICs1MiwxNSBAQAogbWVtX3J3KENBUkQzMiBhZGRyKQogewogICB1bnNpZ25lZCBsb25nIHJlc3VsdCwgc2hpZnQ7Ci0jaWYgMSAgCisjaWYgMQogICBpZiAoYWRkciA+PSAweEEwMDAwICYmIGFkZHIgPD0gMHhCRkZGRikgewogICAgIGFkZHIgLT0gMHhBMDAwMDsKICAgICBzaGlmdCA9IChhZGRyICYgMHgyKSAqIDg7CiAgICAgcmVzdWx0ID0gKih2dWlwKSgodW5zaWduZWQgbG9uZyl2cmFtX21hcCsoYWRkcjw8c3BhcnNlX3NoaWZ0KQotICAgICAgICAgICAgICsoMTw8KHNwYXJzZV9zaGlmdC0yKSkpOworCSAgICAgKygxPDwoc3BhcnNlX3NoaWZ0LTIpKSk7CiAgICAgcmVzdWx0ID4+PSBzaGlmdDsKICAgICByZXR1cm4gMHhmZmZmVUwgJiByZXN1bHQ7Ci0gIH0gZWxzZSAKKyAgfSBlbHNlCiAjZW5kaWYKICAgICByZXR1cm4gcmR3KGFkZHIpOwogfQpAQCAtNjksMTIgKzY5LDEyIEBACiBtZW1fcmwoQ0FSRDMyIGFkZHIpCiB7CiAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0OwotI2lmIDEgIAorI2lmIDEKICAgaWYgKGFkZHIgPj0gMHhBMDAwMCAmJiBhZGRyIDw9IDB4QkZGRkYpIHsKICAgICBhZGRyIC09IDB4QTAwMDA7CiAgICAgcmVzdWx0ID0gKih2dWlwKSgodW5zaWduZWQgbG9uZyl2cmFtX21hcCsoYWRkcjw8c3BhcnNlX3NoaWZ0KSsoMzw8KHNwYXJzZV9zaGlmdC0yKSkpOwogICAgIHJldHVybiByZXN1bHQ7Ci0gIH0gZWxzZSAKKyAgfSBlbHNlCiAjZW5kaWYKICAgICByZXR1cm4gcmRsKGFkZHIpOwogfQpAQCAtODMsMTIgKzgzLDEyIEBACiBtZW1fd2IoQ0FSRDMyIGFkZHIsIENBUkQ4IHZhbCkKIHsKICAgICB1bnNpZ25lZCBpbnQgYiA9IHZhbCAmIDB4ZmZVOwotI2lmIDEgIAorI2lmIDEKICAgaWYgKGFkZHIgPj0gMHhBMDAwMCAmJiBhZGRyIDw9IDB4QkZGRkYpIHsKICAgICBhZGRyIC09IDB4QTAwMDA7CiAgICAgKih2dWlwKSAoKHVuc2lnbmVkIGxvbmcpdnJhbV9tYXAgKyAoYWRkciA8PCBzcGFyc2Vfc2hpZnQpKSA9IGIgKiAweDAxMDEwMTAxOwogICAgIG1lbV9iYXJyaWVyKCk7Ci0gIH0gZWxzZSAKKyAgfSBlbHNlCiAjZW5kaWYKICAgICB3cmIoYWRkcix2YWwpOwogfQpAQCAtOTcsMTMgKzk3LDEzIEBACiBtZW1fd3coQ0FSRDMyIGFkZHIsIENBUkQxNiB2YWwpCiB7CiAgIHVuc2lnbmVkIGludCB3ID0gdmFsICYgMHhmZmZmVTsKLSNpZiAxICAKKyNpZiAxCiAgIGlmIChhZGRyID49IDB4QTAwMDAgJiYgYWRkciA8PSAweEJGRkZGKSB7CiAgICAgYWRkciAtPSAweEEwMDAwOwogICAgICoodnVpcCkoKHVuc2lnbmVkIGxvbmcpdnJhbV9tYXArKGFkZHI8PHNwYXJzZV9zaGlmdCkKLSAgICAgICAgKygxPDwoc3BhcnNlX3NoaWZ0LTIpKSkgPSB3ICogMHgwMDAxMDAwMTsKKwkrKDE8PChzcGFyc2Vfc2hpZnQtMikpKSA9IHcgKiAweDAwMDEwMDAxOwogICAgIG1lbV9iYXJyaWVyKCk7Ci0gIH0gZWxzZSAKKyAgfSBlbHNlCiAjZW5kaWYKICAgICB3cncoYWRkcix2YWwpOwogfQpAQCAtMTExLDE2ICsxMTEsMTQgQEAKIHZvaWQKIG1lbV93bChDQVJEMzIgYWRkciwgQ0FSRDMyIHZhbCkKIHsKLSNpZiAxICAKKyNpZiAxCiAgIGlmIChhZGRyID49IDB4QTAwMDAgJiYgYWRkciA8PSAweEJGRkZGKSB7CiAgICAgYWRkciAtPSAweEEwMDAwOwogICAgICoodnVpcCkoKHVuc2lnbmVkIGxvbmcpdnJhbV9tYXArKGFkZHI8PHNwYXJzZV9zaGlmdCkKLSAgICAgICAgKygzPDwoc3BhcnNlX3NoaWZ0LTIpKSkgPSB2YWw7CisJKygzPDwoc3BhcnNlX3NoaWZ0LTIpKSkgPSB2YWw7CiAgICAgbWVtX2JhcnJpZXIoKTsKLSAgfSBlbHNlIAorICB9IGVsc2UKICNlbmRpZgogICAgIHdybChhZGRyLHZhbCk7CiB9CiAjZW5kaWYKLQotCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL3BjaS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9wY2kuYwppbmRleCBlNjhjNjFkLi5iNThhNTcxIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL3BjaS5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvcGNpLmMKQEAgLTUxLDEyICs1MSwxMiBAQAogc3RhdGljIENBUkQzMiBQY2lDZmcxQWRkcjsKIAogc3RhdGljIHZvaWQgcmVhZENvbmZpZ1NwYWNlQ2ZnMShDQVJEMzIgYnVzLCBDQVJEMzIgZGV2LCBDQVJEMzIgZnVuYywKLSAgICAgICAgICAgICAgICBDQVJEMzIgKnJlZyk7CisJCUNBUkQzMiAqcmVnKTsKIHN0YXRpYyBpbnQgY2hlY2tTbG90Q2ZnMShDQVJEMzIgYnVzLCBDQVJEMzIgZGV2LCBDQVJEMzIgZnVuYyk7CiBzdGF0aWMgaW50IGNoZWNrU2xvdENmZzIoQ0FSRDMyIGJ1cywgaW50IGRldik7CiBzdGF0aWMgdm9pZCByZWFkQ29uZmlnU3BhY2VDZmcyKENBUkQzMiBidXMsIGludCBkZXYsIENBUkQzMiAqcmVnKTsKIHN0YXRpYyBDQVJEOCBpbnRlcnByZXRDb25maWdTcGFjZShDQVJEMzIgKnJlZywgaW50IGJ1c2lkeCwKLSAgICAgICAgICAgICAgICAgIENBUkQ4IGRldiwgQ0FSRDggZnVuYyk7CisJCSAgQ0FSRDggZGV2LCBDQVJEOCBmdW5jKTsKIHN0YXRpYyBDQVJEMzIgZmluZEJJT1NNYXAoUGNpU3RydWN0UHRyIHBjaVAsIENBUkQzMiAqYmlvc1NpemUpOwogc3RhdGljIHZvaWQgcmVzdG9yZU1lbShQY2lTdHJ1Y3RQdHIgcGNpUCk7CiAKQEAgLTcyLDEwICs3MiwxMCBAQAogewogICAgIGludCBidXMsIGRmbjsKICAgICBDQVJEMzIgdmFsID0gMHhmZmZmZmZmZjsKLSAgICAKKwogICAgIGJ1cyA9IFBDSV9CVVNfRlJPTV9UQUcodGFnKTsKICAgICBkZm4gPSBQQ0lfREZOX0ZST01fVEFHKHRhZyk7Ci0gICAgCisKICAgICBzeXNjYWxsKF9fTlJfcGNpY29uZmlnX3JlYWQsIGJ1cywgZGZuLCB0YWcgJiAweGZmLCA0LCAmdmFsKTsKICAgICByZXR1cm4odmFsKTsKIH0KQEAgLTg0LDEwICs4NCwxMCBAQAogYXhwUGNpQ2ZnV3JpdGUoQ0FSRDMyIHRhZywgQ0FSRDMyIHZhbCkKIHsKICAgICBpbnQgYnVzLCBkZm47Ci0gICAgCisKICAgICBidXMgPSBQQ0lfQlVTX0ZST01fVEFHKHRhZyk7CiAgICAgZGZuID0gUENJX0RGTl9GUk9NX1RBRyh0YWcpOwotICAgIAorCiAgICAgc3lzY2FsbChfX05SX3BjaWNvbmZpZ193cml0ZSwgYnVzLCBkZm4sIHRhZyAmIDB4ZmYsIDQsICZ2YWwpOwogfQogCkBAIC0xMTUsMjIgKzExNSwyMSBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgcGNpTWluTWVtUmVnID0gfjA7CiAKIAotCiB2b2lkCiBzY2FuX3BjaSh2b2lkKQogewogICAgIHVuc2lnbmVkIHNob3J0IGNvbmZpZ3R5cGU7Ci0gICAgCisKICAgICBDQVJEMzIgcmVnWzY0XTsKICAgICBpbnQgYnVzaWR4OwogICAgIENBUkQ4IGNhcmRudW07CiAgICAgQ0FSRDggZnVuYzsKICAgICBpbnQgaWR4OwotICAgIAorCiAgICAgaW50IGk7CiAgICAgUGNpU3RydWN0UHRyIHBjaTE7CiAgICAgUGNpQnVzUHRyIHBjaV9iMSxwY2lfYjI7Ci0gICAgCisKICNpZiBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19pYTY0X18pCiAgICAgY29uZmlndHlwZSA9IDE7CiAjZWxzZQpAQCAtMTQxLDExMSArMTQwLDExMSBAQAogICAgIHRtcDEgPSBpbmIoUENJX01PREUyX0VOQUJMRV9SRUcpOwogICAgIHRtcDIgPSBpbmIoUENJX01PREUyX0ZPUldBUkRfUkVHKTsKICAgICBpZiAoKHRtcDEgPT0gMHgwMCkgJiYgKHRtcDIgPT0gMHgwMCkpIHsKLSAgICAgICAgY29uZmlndHlwZSA9IDI7Ci0gICAgICAgIHJlYWRQY2kgPSByZWFkUGNpQ2ZnMjsKLSAgICAgICAgd3JpdGVQY2kgPSB3cml0ZVBjaUNmZzI7Ci0gICAgICAgIFBfcHJpbnRmKCJQQ0kgc2F5cyBjb25maWd1cmF0aW9uIHR5cGUgMlxuIik7CisJY29uZmlndHlwZSA9IDI7CisJcmVhZFBjaSA9IHJlYWRQY2lDZmcyOworCXdyaXRlUGNpID0gd3JpdGVQY2lDZmcyOworCVBfcHJpbnRmKCJQQ0kgc2F5cyBjb25maWd1cmF0aW9uIHR5cGUgMlxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdG1wMzJfMSA9IGlubChQQ0lfTU9ERTFfQUREUkVTU19SRUcpOwotICAgICAgICBvdXRsKFBDSV9NT0RFMV9BRERSRVNTX1JFRywgUENJX0VOKTsKLSAgICAgICAgdG1wMzJfMiA9IGlubChQQ0lfTU9ERTFfQUREUkVTU19SRUcpOwotICAgICAgICBvdXRsKFBDSV9NT0RFMV9BRERSRVNTX1JFRywgdG1wMzJfMSk7Ci0gICAgICAgIGlmICh0bXAzMl8yID09IFBDSV9FTikgewotICAgICAgICAgICAgY29uZmlndHlwZSA9IDE7Ci0gICAgICAgICAgICBQX3ByaW50ZigiUENJIHNheXMgY29uZmlndXJhdGlvbiB0eXBlIDFcbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUF9wcmludGYoIk5vIFBDSSAhXG4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorCXRtcDMyXzEgPSBpbmwoUENJX01PREUxX0FERFJFU1NfUkVHKTsKKwlvdXRsKFBDSV9NT0RFMV9BRERSRVNTX1JFRywgUENJX0VOKTsKKwl0bXAzMl8yID0gaW5sKFBDSV9NT0RFMV9BRERSRVNTX1JFRyk7CisJb3V0bChQQ0lfTU9ERTFfQUREUkVTU19SRUcsIHRtcDMyXzEpOworCWlmICh0bXAzMl8yID09IFBDSV9FTikgeworCSAgICBjb25maWd0eXBlID0gMTsKKwkgICAgUF9wcmludGYoIlBDSSBzYXlzIGNvbmZpZ3VyYXRpb24gdHlwZSAxXG4iKTsKKwl9IGVsc2UgeworCSAgICBQX3ByaW50ZigiTm8gUENJICFcbiIpOworCSAgICByZXR1cm47CisJfQogICAgIH0KICNlbmRpZgotICAgIAorCiAgICAgaWYgKGNvbmZpZ3R5cGUgPT0gMSkgewotICAgICAgICBQX3ByaW50ZigiUENJIHByb2JpbmcgY29uZmlndXJhdGlvbiB0eXBlIDFcbiIpOwotICAgICAgICBidXNpZHggPSAwOwotICAgICAgICBudW1idXMgPSAxOwotICAgICAgICBpZHggPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBQX3ByaW50ZigiXG5Qcm9iaW5nIGZvciBkZXZpY2VzIG9uIFBDSSBidXMgJWQ6XG4iLCBidXNpZHgpOwotICAgICAgICAgICAgZm9yIChjYXJkbnVtID0gMDsgY2FyZG51bSA8IE1BWF9ERVZfUEVSX1ZFTkRPUl9DRkcxOyBjYXJkbnVtKyspIHsKLSAgICAgICAgICAgICAgICBmdW5jID0gMDsKLSAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIGxvb3Agb3ZlciB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucywgaWYgcHJlc2VudCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrU2xvdENmZzEoYnVzaWR4LGNhcmRudW0sZnVuYykpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgcmVhZENvbmZpZ1NwYWNlQ2ZnMShidXNpZHgsY2FyZG51bSxmdW5jLHJlZyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZnVuYyA9IGludGVycHJldENvbmZpZ1NwYWNlKHJlZyxidXNpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkbnVtLGZ1bmMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChpZHgrKyA+IE1BWF9QQ0lfREVWSUNFUykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKGZ1bmMgPCA4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoKytidXNpZHggPCBQQ0lfTUFYQlVTKTsKKwlQX3ByaW50ZigiUENJIHByb2JpbmcgY29uZmlndXJhdGlvbiB0eXBlIDFcbiIpOworCWJ1c2lkeCA9IDA7CisJbnVtYnVzID0gMTsKKwlpZHggPSAwOworCWRvIHsKKwkgICAgUF9wcmludGYoIlxuUHJvYmluZyBmb3IgZGV2aWNlcyBvbiBQQ0kgYnVzICVkOlxuIiwgYnVzaWR4KTsKKwkgICAgZm9yIChjYXJkbnVtID0gMDsgY2FyZG51bSA8IE1BWF9ERVZfUEVSX1ZFTkRPUl9DRkcxOyBjYXJkbnVtKyspIHsKKwkJZnVuYyA9IDA7CisJCWRvIHsKKwkJICAgIC8qIGxvb3Agb3ZlciB0aGUgZGlmZmVyZW50IGZ1bmN0aW9ucywgaWYgcHJlc2VudCAqLworCQkgICAgaWYgKCFjaGVja1Nsb3RDZmcxKGJ1c2lkeCxjYXJkbnVtLGZ1bmMpKQorCQkJYnJlYWs7CisJCSAgICByZWFkQ29uZmlnU3BhY2VDZmcxKGJ1c2lkeCxjYXJkbnVtLGZ1bmMscmVnKTsKKworCQkgICAgZnVuYyA9IGludGVycHJldENvbmZpZ1NwYWNlKHJlZyxidXNpZHgsCisJCQkJCQljYXJkbnVtLGZ1bmMpOworCisJCSAgICBpZiAoaWR4KysgPiBNQVhfUENJX0RFVklDRVMpCisJCQljb250aW51ZTsKKwkJfSB3aGlsZSAoZnVuYyA8IDgpOworCSAgICB9CisJfSB3aGlsZSAoKytidXNpZHggPCBQQ0lfTUFYQlVTKTsKICNpZiBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19pYTY0X18pCi0gICAgICAgIC8qIGRvbid0IHVzZSBvdXRsKCkgIDstKSAqLworCS8qIGRvbid0IHVzZSBvdXRsKCkgIDstKSAqLwogI2Vsc2UKLSAgICAgICAgb3V0bChQQ0lfTU9ERTFfQUREUkVTU19SRUcsIDApOworCW91dGwoUENJX01PREUxX0FERFJFU1NfUkVHLCAwKTsKICNlbmRpZgogICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBzbG90OwotICAgIAotICAgICAgICBQX3ByaW50ZigiUENJIHByb2JpbmcgY29uZmlndXJhdGlvbiB0eXBlIDJcbiIpOwotICAgICAgICBidXNpZHggPSAwOwotICAgICAgICBudW1idXMgPSAxOwotICAgICAgICBpZHggPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBmb3IgKHNsb3Q9MHhjMDsgc2xvdDwweGQwOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNoZWNrU2xvdENmZzIoYnVzaWR4LHNsb3QpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICByZWFkQ29uZmlnU3BhY2VDZmcyKGJ1c2lkeCxzbG90LHJlZyk7Ci0gICAgICAgIAotICAgICAgICAgICAgICAgIGludGVycHJldENvbmZpZ1NwYWNlKHJlZyxidXNpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdCwwKTsKLSAgICAgICAgICAgICAgICBpZiAoaWR4KysgPiBNQVhfUENJX0RFVklDRVMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9ICB3aGlsZSAoKytidXNpZHggPCBQQ0lfTUFYQlVTKTsKKwlpbnQgc2xvdDsKKworCVBfcHJpbnRmKCJQQ0kgcHJvYmluZyBjb25maWd1cmF0aW9uIHR5cGUgMlxuIik7CisJYnVzaWR4ID0gMDsKKwludW1idXMgPSAxOworCWlkeCA9IDA7CisJZG8geworCSAgICBmb3IgKHNsb3Q9MHhjMDsgc2xvdDwweGQwOyBpKyspIHsKKwkJaWYgKCFjaGVja1Nsb3RDZmcyKGJ1c2lkeCxzbG90KSkKKwkJICAgIGJyZWFrOworCQlyZWFkQ29uZmlnU3BhY2VDZmcyKGJ1c2lkeCxzbG90LHJlZyk7CisKKwkJaW50ZXJwcmV0Q29uZmlnU3BhY2UocmVnLGJ1c2lkeCwKKwkJCQkgICAgIHNsb3QsMCk7CisJCWlmIChpZHgrKyA+IE1BWF9QQ0lfREVWSUNFUykKKwkJICAgIGNvbnRpbnVlOworCSAgICB9CisJfSAgd2hpbGUgKCsrYnVzaWR4IDwgUENJX01BWEJVUyk7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwY2lNYXhCdXMgPSBudW1idXMgLSAxOwogICAgIFBfcHJpbnRmKCJOdW1iZXIgb2YgYnVzZXMgaW4gc3lzdGVtOiAlaVxuIixwY2lNYXhCdXMgKyAxKTsKICAgICBQX3ByaW50ZigiTWluIFBDSSBtZW0gYWRkcmVzczogMHglbHhcbiIscGNpTWluTWVtUmVnKTsKLSAgICAKKwogICAgIC8qIGxpbmsgYnVzZXMgKi8KICAgICBwY2lfYjEgPSBQY2lCdXNlczsKICAgICB3aGlsZSAocGNpX2IxKSB7Ci0gICAgICAgIHBjaV9iMiA9IFBjaUJ1c2VzOwotICAgICAgICBwY2lfYjEtPnBCdXMgPSBOVUxMOwotICAgICAgICB3aGlsZSAocGNpX2IyKSB7Ci0gICAgICAgICAgICBpZiAocGNpX2IxLT5wcmltYXJ5ID09IHBjaV9iMi0+c2Vjb25kYXJ5KQotICAgICAgICAgICAgICAgIHBjaV9iMS0+cEJ1cyA9IHBjaV9iMjsKLSAgICAgICAgICAgIHBjaV9iMiA9IHBjaV9iMi0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICBwY2lfYjEgPSBwY2lfYjEtPm5leHQ7CisJcGNpX2IyID0gUGNpQnVzZXM7CisJcGNpX2IxLT5wQnVzID0gTlVMTDsKKwl3aGlsZSAocGNpX2IyKSB7CisJICAgIGlmIChwY2lfYjEtPnByaW1hcnkgPT0gcGNpX2IyLT5zZWNvbmRhcnkpCisJCXBjaV9iMS0+cEJ1cyA9IHBjaV9iMjsKKwkgICAgcGNpX2IyID0gcGNpX2IyLT5uZXh0OworCX0KKwlwY2lfYjEgPSBwY2lfYjEtPm5leHQ7CiAgICAgfQogICAgIHBjaTEgPSBQY2lTdHJ1Y3Q7CiAgICAgd2hpbGUgKHBjaTEpIHsKLSAgICAgICAgcGNpX2IyID0gUGNpQnVzZXM7Ci0gICAgICAgIHBjaTEtPnBCdXMgPSBOVUxMOwotICAgICAgICB3aGlsZSAocGNpX2IyKSB7Ci0gICAgICAgICAgICBpZiAocGNpMS0+YnVzID09IHBjaV9iMi0+c2Vjb25kYXJ5KQotICAgICAgICAgICAgICAgIHBjaTEtPnBCdXMgPSBwY2lfYjI7Ci0gICAgICAgICAgICBwY2lfYjIgPSBwY2lfYjItPm5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcGNpMSA9IHBjaTEtPm5leHQ7CisJcGNpX2IyID0gUGNpQnVzZXM7CisJcGNpMS0+cEJ1cyA9IE5VTEw7CisJd2hpbGUgKHBjaV9iMikgeworCSAgICBpZiAocGNpMS0+YnVzID09IHBjaV9iMi0+c2Vjb25kYXJ5KQorCQlwY2kxLT5wQnVzID0gcGNpX2IyOworCSAgICBwY2lfYjIgPSBwY2lfYjItPm5leHQ7CisJfQorCXBjaTEgPSBwY2kxLT5uZXh0OwogICAgIH0KICAgICBpZiAoUkVTT1JUKSB7Ci0gICAgICAgIFBjaVN0cnVjdFB0ciB0bXAgPSBQY2lTdHJ1Y3QsIHRtcDE7Ci0gICAgICAgIFBjaVN0cnVjdCA9IE5VTEw7Ci0gICAgICAgIHdoaWxlICh0bXApIHsKLSAgICAgICAgICAgIHRtcDEgPSB0bXAtPm5leHQ7Ci0gICAgICAgICAgICB0bXAtPm5leHQgPSBQY2lTdHJ1Y3Q7Ci0gICAgICAgICAgICBQY2lTdHJ1Y3QgPSB0bXA7Ci0gICAgICAgICAgICB0bXAgPSB0bXAxOwotICAgICAgICB9CisJUGNpU3RydWN0UHRyIHRtcCA9IFBjaVN0cnVjdCwgdG1wMTsKKwlQY2lTdHJ1Y3QgPSBOVUxMOworCXdoaWxlICh0bXApIHsKKwkgICAgdG1wMSA9IHRtcC0+bmV4dDsKKwkgICAgdG1wLT5uZXh0ID0gUGNpU3RydWN0OworCSAgICBQY2lTdHJ1Y3QgPSB0bXA7CisJICAgIHRtcCA9IHRtcDE7CisJfQogICAgIH0KICAgICBQY2lMaXN0ID0gQ3VycmVudFBjaSA9IFBjaVN0cnVjdDsKIH0KQEAgLTI1NSw3ICsyNTQsNyBAQAogcmVhZFBjaUNmZzEoQ0FSRDMyIHJlZykKIHsKICAgICBDQVJEMzIgdmFsOwotICAgIAorCiAgICAgb3V0bChQQ0lfTU9ERTFfQUREUkVTU19SRUcsIHJlZyk7CiAgICAgdmFsID0gaW5sKFBDSV9NT0RFMV9EQVRBX1JFRyk7CiAgICAgb3V0bChQQ0lfTU9ERTFfQUREUkVTU19SRUcsIDApOwpAQCAtMjc5LDcgKzI3OCw3IEBACiAgICAgQ0FSRDggYnVzID0gKHJlZyA+PiAxNikgJiAweGZmOwogICAgIENBUkQ4IGRldiA9IChyZWcgPj4gMTEpICYgMHgxZjsKICAgICBDQVJEOCBudW0gPSByZWcgJiAweGZmOwotICAgIAorCiAgICAgb3V0YihQQ0lfTU9ERTJfRU5BQkxFX1JFRywgMHhGMSk7CiAgICAgb3V0YihQQ0lfTU9ERTJfRk9SV0FSRF9SRUcsIGJ1cyk7CiAgICAgdmFsID0gaW5sKChkZXYgPDwgOCkgKyBudW0pOwpAQCAtMzA5LDE2ICszMDgsMTYgQEAKICAgICAvKiBkaXNhYmxlIFZHQSByb3V0aW5nIG9uIGJyaWRnZXMgKi8KICAgICBQY2lCdXNQdHIgcGJwID0gUGNpQnVzZXM7CiAgICAgUGNpU3RydWN0UHRyIHBjcCA9IFBjaVN0cnVjdDsKLSAgICAKKwogICAgIHdoaWxlIChwYnApIHsKLSAgICAgICAgd3JpdGVQY2kocGJwLT5TbG90LmwgfCAweDNjLCBwYnAtPmJjdGwgJiB+KENBUkQzMikoODw8MTYpKTsKLSAgICAgICAgcGJwID0gcGJwLT5uZXh0OworCXdyaXRlUGNpKHBicC0+U2xvdC5sIHwgMHgzYywgcGJwLT5iY3RsICYgfihDQVJEMzIpKDg8PDE2KSk7CisJcGJwID0gcGJwLT5uZXh0OwogICAgIH0KICAgICAvKiBkaXNhYmxlIGRpc3BsYXkgZGV2aWNlcyAqLwogICAgIHdoaWxlIChwY3ApIHsKLSAgICAgICAgd3JpdGVQY2kocGNwLT5TbG90LmwgfCAweDA0LCBwY3AtPmNtZF9zdCAmIH4oQ0FSRDMyKTMpOwotICAgICAgICB3cml0ZVBjaShwY3AtPlNsb3QubCB8IDB4MzAsIHBjcC0+Um9tQmFzZSAmIH4oQ0FSRDMyKTEpOwotICAgICAgICBwY3AgPSBwY3AtPm5leHQ7CisJd3JpdGVQY2kocGNwLT5TbG90LmwgfCAweDA0LCBwY3AtPmNtZF9zdCAmIH4oQ0FSRDMyKTMpOworCXdyaXRlUGNpKHBjcC0+U2xvdC5sIHwgMHgzMCwgcGNwLT5Sb21CYXNlICYgfihDQVJEMzIpMSk7CisJcGNwID0gcGNwLT5uZXh0OwogICAgIH0KIH0KIApAQCAtMzI4LDE2ICszMjcsMTYgQEAKICAgICAvKiBkaXNhYmxlIFZHQSByb3V0aW5nIG9uIGJyaWRnZXMgKi8KICAgICBQY2lCdXNQdHIgcGJwID0gUGNpQnVzZXM7CiAgICAgUGNpU3RydWN0UHRyIHBjcCA9IFBjaVN0cnVjdDsKLSAgICAKKwogICAgIHdoaWxlIChwYnApIHsKLSAgICAgICAgd3JpdGVQY2kocGJwLT5TbG90LmwgfCAweDNjLCBwYnAtPmJjdGwpOwotICAgICAgICBwYnAgPSBwYnAtPm5leHQ7CisJd3JpdGVQY2kocGJwLT5TbG90LmwgfCAweDNjLCBwYnAtPmJjdGwpOworCXBicCA9IHBicC0+bmV4dDsKICAgICB9CiAgICAgLyogZGlzYWJsZSBkaXNwbGF5IGRldmljZXMgKi8KICAgICB3aGlsZSAocGNwKSB7Ci0gICAgICAgIHdyaXRlUGNpKHBjcC0+U2xvdC5sIHwgMHgwNCwgcGNwLT5jbWRfc3QpOwotICAgICAgICB3cml0ZVBjaShwY3AtPlNsb3QubCB8IDB4MzAsIHBjcC0+Um9tQmFzZSk7Ci0gICAgICAgIHBjcCA9IHBjcC0+bmV4dDsKKwl3cml0ZVBjaShwY3AtPlNsb3QubCB8IDB4MDQsIHBjcC0+Y21kX3N0KTsKKwl3cml0ZVBjaShwY3AtPlNsb3QubCB8IDB4MzAsIHBjcC0+Um9tQmFzZSk7CisJcGNwID0gcGNwLT5uZXh0OwogICAgIH0KIH0KIApAQCAtMzQ2LDEzICszNDUsMTMgQEAKIHsKICAgICBQY2lCdXNQdHIgcGJwOwogICAgIFBjaVN0cnVjdFB0ciBwY3AgPSBDdXJyZW50UGNpOwotICAgIAorCiAgICAgcGNpVmlkZW9EaXNhYmxlKCk7Ci0gICAgCisKICAgICBwYnAgPSBwY3AtPnBCdXM7CiAgICAgd2hpbGUgKHBicCkgeyAvKiBlbmFibGUgYnJpZGdlcyAqLwotICAgICAgICB3cml0ZVBjaShwYnAtPlNsb3QubCB8IDB4M2MsIHBicC0+YmN0bCB8IChDQVJEMzIpKDg8PDE2KSk7Ci0gICAgICAgIHBicCA9IHBicC0+cEJ1czsKKwl3cml0ZVBjaShwYnAtPlNsb3QubCB8IDB4M2MsIHBicC0+YmN0bCB8IChDQVJEMzIpKDg8PDE2KSk7CisJcGJwID0gcGJwLT5wQnVzOwogICAgIH0KICAgICB3cml0ZVBjaShwY3AtPlNsb3QubCB8IDB4MDQsIHBjcC0+Y21kX3N0IHwgKENBUkQzMikzKTsKICAgICB3cml0ZVBjaShwY3AtPlNsb3QubCB8IDB4MzAsIHBjcC0+Um9tQmFzZSB8IChDQVJEMzIpMSk7CkBAIC00MjcsMzUgKzQyNiwzNSBAQAogICAgICAgcGNpUCA9IEN1cnJlbnRQY2k7CiAKICAgICBpZiAoRklYX1JPTSkgewotICAgICAgICBSb21CYXNlID0gZmluZEJJT1NNYXAocGNpUCwgJmJpb3NTaXplKTsKLSAgICAgICAgaWYgKCFSb21CYXNlKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQ2Fubm90IHJlbWFwIEJJT1Mgb2YgJWk6JWk6JWkgIgotICAgICAgICAgICAgICAgICAgICAiLSB0cnlpbmcgcHJlc2V0IGFkZHJlc3NcbiIscGNpUC0+YnVzLHBjaVAtPmRldiwKLSAgICAgICAgICAgICAgICAgICAgcGNpUC0+ZnVuYyk7Ci0gICAgICAgICAgICBSb21CYXNlID0gcGNpUC0+Um9tQmFzZSAmIH4oQ0FSRDMyKTB4RkY7Ci0gICAgICAgIH0KKwlSb21CYXNlID0gZmluZEJJT1NNYXAocGNpUCwgJmJpb3NTaXplKTsKKwlpZiAoIVJvbUJhc2UpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsIkNhbm5vdCByZW1hcCBCSU9TIG9mICVpOiVpOiVpICIKKwkJICAgICItIHRyeWluZyBwcmVzZXQgYWRkcmVzc1xuIixwY2lQLT5idXMscGNpUC0+ZGV2LAorCQkgICAgcGNpUC0+ZnVuYyk7CisJICAgIFJvbUJhc2UgPSBwY2lQLT5Sb21CYXNlICYgfihDQVJEMzIpMHhGRjsKKwl9CiAgICAgfSAgZWxzZSB7Ci0gICAgICAgIFJvbUJhc2UgPSBwY2lQLT5Sb21CYXNlICYgfihDQVJEMzIpMHhGRjsKLSAgICAgICAgaWYgKH5Sb21CYXNlICsgMSA8IGJpb3NTaXplIHx8ICFSb21CYXNlKQotICAgICAgICAgICAgUm9tQmFzZSA9IGZpbmRCSU9TTWFwKHBjaVAsICZiaW9zU2l6ZSk7CisJUm9tQmFzZSA9IHBjaVAtPlJvbUJhc2UgJiB+KENBUkQzMikweEZGOworCWlmICh+Um9tQmFzZSArIDEgPCBiaW9zU2l6ZSB8fCAhUm9tQmFzZSkKKwkgICAgUm9tQmFzZSA9IGZpbmRCSU9TTWFwKHBjaVAsICZiaW9zU2l6ZSk7CiAgICAgfQogCiAgICAgUF9wcmludGYoIlJvbUJhc2U6IDB4JWx4XG4iLFJvbUJhc2UpOwotICAgIAorCiAgICAgaWYgKChtZW1fZmQgPSBvcGVuKE1FTV9GSUxFLE9fUkRPTkxZKSk8MCkgewotICAgICAgICBwZXJyb3IoIm9wZW5pbmcgbWVtb3J5Iik7Ci0gICAgICAgIHJlc3RvcmVNZW0ocGNpUCk7Ci0gICAgICAgIHJldHVybiAoMCk7CisJcGVycm9yKCJvcGVuaW5nIG1lbW9yeSIpOworCXJlc3RvcmVNZW0ocGNpUCk7CisJcmV0dXJuICgwKTsKICAgICB9CiAKICAgICBQY2lXcml0ZTMyKDB4MzAsUm9tQmFzZSB8IDEscGNpUC0+U2xvdC5sKTsKIAogI2lmZGVmIF9fYWxwaGFfXwogICAgIG1lbSA9IHB0ciA9ICh1bnNpZ25lZCBjaGFyICopbW1hcCgwLCBiaW9zU2l6ZSwgUFJPVF9SRUFELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfU0hBUkVELCBtZW1fZmQsIFJvbUJhc2UgfCBfYnVzX2Jhc2UoKSk7CisJCQkJICAgICAgTUFQX1NIQVJFRCwgbWVtX2ZkLCBSb21CYXNlIHwgX2J1c19iYXNlKCkpOwogI2Vsc2UKICAgICBtZW0gPSBwdHIgPSAodW5zaWduZWQgY2hhciAqKW1tYXAoMCwgYmlvc1NpemUsIFBST1RfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1NIQVJFRCwgbWVtX2ZkLCBSb21CYXNlKTsKKwkJCQkgICAgICBNQVBfU0hBUkVELCBtZW1fZmQsIFJvbUJhc2UpOwogI2VuZGlmCiAgICAgaWYgKHBjaVAgIT0gQ3VycmVudFBjaSkgewogICAgICAgZW5hYmxlUGNpID0gUGNpUmVhZDMyKDB4NCxwY2lQLT5TbG90LmwpOwpAQCAtNDY2LDM3ICs0NjUsMzcgQEAKICAgICBkcHJpbnQoKHVuc2lnbmVkIGxvbmcpcHRyLDB4MzApOwogI2VuZGlmCiAgICAgd2hpbGUgKCAqcHRyID09IDB4NTUgJiYgKihwdHIrMSkgPT0gMHhBQSkgewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBkYXRhX29mZiA9ICoocHRyKzB4MTgpIHwgKCoocHRyKzB4MTkpPDwgOCk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBwdHIgKyBkYXRhX29mZjsKLSAgICAgICAgdW5zaWduZWQgY2hhciB0eXBlOwotICAgICAgICBpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCBkYXRhX29mZiA9ICoocHRyKzB4MTgpIHwgKCoocHRyKzB4MTkpPDwgOCk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHB0ciArIGRhdGFfb2ZmOworCXVuc2lnbmVkIGNoYXIgdHlwZTsKKwlpbnQgaTsKIAotICAgICAgICBpZiAoKmRhdGEhPSdQJyB8fCAqKGRhdGErMSkhPSdDJyB8fCAqKGRhdGErMikhPSdJJyB8fCAqKGRhdGErMykhPSdSJykgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgdHlwZSA9ICooZGF0YSArIDB4MTQpOwotICAgICAgICBQX3ByaW50ZigiZGF0YSBzZWdtZW50IGluIEJJT1M6IDB4JXgsIHR5cGU6IDB4JXggIixkYXRhX29mZix0eXBlKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0eXBlICE9IDApICB7IC8qIG5vdCBQQy1BVCBpbWFnZTogZmluZCBuZXh0IG9uZSAqLwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGltYWdlX2xlbmd0aDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaW5kaWNhdG9yID0gKihkYXRhICsgMHgxNSk7Ci0gICAgICAgICAgICBpZiAoaW5kaWNhdG9yICYgMHg4MCkgLyogbGFzdCBpbWFnZSAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaW1hZ2VfbGVuZ3RoID0gKCooZGF0YSArIDB4MTApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKihkYXRhICsgMHgxMSkgPDwgOCkpIDw8IDk7Ci0gICAgICAgICAgICBQX3ByaW50ZigiZGF0YSBpbWFnZSBsZW5ndGg6IDB4JXgsIGluZDogMHgleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIGltYWdlX2xlbmd0aCxpbmRpY2F0b3IpOwotICAgICAgICAgICAgcHRyID0gcHRyICsgaW1hZ2VfbGVuZ3RoOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgLyogT0ssIHdlIGhhdmUgYSBQQyBJbWFnZSAqLwotICAgICAgICBsZW5ndGggPSAoKihwdHIgKyAyKSA8PCA5KTsKLSAgICAgICAgUF9wcmludGYoIkJJT1MgbGVuZ3RoOiAweCV4XG4iLGxlbmd0aCk7Ci0gICAgICAgIHNjcmF0Y2ggPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhsZW5ndGgpOwotICAgICAgICAvKiBkb24ndCB1c2UgbWVtY3B5KCkgaGVyZTogUmVhZGluZyBmcm9tIGJ1cyEgKi8KLSAgICAgICAgZm9yIChpPTA7aTxsZW5ndGg7aSsrKQotICAgICAgICAgICAgKihzY3JhdGNoICsgaSk9KihwdHIgKyBpKTsKLSAgICAgICAgYnJlYWs7CisJaWYgKCpkYXRhIT0nUCcgfHwgKihkYXRhKzEpIT0nQycgfHwgKihkYXRhKzIpIT0nSScgfHwgKihkYXRhKzMpIT0nUicpIHsKKwkgICAgYnJlYWs7CisJfQorCXR5cGUgPSAqKGRhdGEgKyAweDE0KTsKKwlQX3ByaW50ZigiZGF0YSBzZWdtZW50IGluIEJJT1M6IDB4JXgsIHR5cGU6IDB4JXggIixkYXRhX29mZix0eXBlKTsKKworCWlmICh0eXBlICE9IDApICB7IC8qIG5vdCBQQy1BVCBpbWFnZTogZmluZCBuZXh0IG9uZSAqLworCSAgICB1bnNpZ25lZCBpbnQgaW1hZ2VfbGVuZ3RoOworCSAgICB1bnNpZ25lZCBjaGFyIGluZGljYXRvciA9ICooZGF0YSArIDB4MTUpOworCSAgICBpZiAoaW5kaWNhdG9yICYgMHg4MCkgLyogbGFzdCBpbWFnZSAqLworCQlicmVhazsKKwkgICAgaW1hZ2VfbGVuZ3RoID0gKCooZGF0YSArIDB4MTApCisJCQkgICAgfCAoKihkYXRhICsgMHgxMSkgPDwgOCkpIDw8IDk7CisJICAgIFBfcHJpbnRmKCJkYXRhIGltYWdlIGxlbmd0aDogMHgleCwgaW5kOiAweCV4XG4iLAorCQkgICAgIGltYWdlX2xlbmd0aCxpbmRpY2F0b3IpOworCSAgICBwdHIgPSBwdHIgKyBpbWFnZV9sZW5ndGg7CisJICAgIGNvbnRpbnVlOworCX0KKwkvKiBPSywgd2UgaGF2ZSBhIFBDIEltYWdlICovCisJbGVuZ3RoID0gKCoocHRyICsgMikgPDwgOSk7CisJUF9wcmludGYoIkJJT1MgbGVuZ3RoOiAweCV4XG4iLGxlbmd0aCk7CisJc2NyYXRjaCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKGxlbmd0aCk7CisJLyogZG9uJ3QgdXNlIG1lbWNweSgpIGhlcmU6IFJlYWRpbmcgZnJvbSBidXMhICovCisJZm9yIChpPTA7aTxsZW5ndGg7aSsrKQorCSAgICAqKHNjcmF0Y2ggKyBpKT0qKHB0ciArIGkpOworCWJyZWFrOwogICAgIH0KIAogICAgIGlmIChwY2lQICE9IEN1cnJlbnRQY2kpCkBAIC01MDksMTAgKzUwOCwxMCBAQAogICAgIHdyaXRlUGNpKHBjaVAtPlNsb3QubCB8IDB4MzAsIHBjaVAtPlJvbUJhc2UgJiB+KENBUkQzMikxKTsKIAogICAgIGlmIChzY3JhdGNoICYmIGxlbmd0aCkgewotICAgICAgICBtZW1jcHkoKHVuc2lnbmVkIGNoYXIgKilWX0JJT1MsIHNjcmF0Y2gsIGxlbmd0aCk7Ci0gICAgICAgIGZyZWUoc2NyYXRjaCk7CisJbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopVl9CSU9TLCBzY3JhdGNoLCBsZW5ndGgpOworCWZyZWUoc2NyYXRjaCk7CiAgICAgfQotICAgIAorCiAgICAgcmVzdG9yZU1lbShwY2lQKTsKICAgICByZXR1cm4gbGVuZ3RoOwogfQpAQCAtNTIzLDI0ICs1MjIsMjQgQEAKICAgICBDQVJEMzIgc2xvdCA9IHNsb3RCWCA8PCA4OwogCiAgICAgaWYgKHNsb3QgPT0gKEN1cnJlbnRQY2ktPlNsb3QubCAmIH5QQ0lfRU4pKQotICAgICAgICByZXR1cm4gKEN1cnJlbnRQY2ktPlNsb3QubCB8IFBDSV9FTik7CisJcmV0dXJuIChDdXJyZW50UGNpLT5TbG90LmwgfCBQQ0lfRU4pOwogICAgIGVsc2UgewogI2lmICFTSE9XX0FMTF9ERVYKLSAgICAgICAgUGNpQnVzUHRyIHBCdXMgPSBDdXJyZW50UGNpLT5wQnVzOwotICAgICAgICB3aGlsZSAocEJ1cykgewotICAgICAgICAgIC8vICAgICAgZnByaW50ZihzdGRlcnIsInNsb3Q6IDB4JXggIGJyaWRnZTogMHgleFxuIixzbG90LCBwQnVzLT5TbG90LmwpOwotICAgICAgICAgICAgaWYgKHNsb3QgPT0gKHBCdXMtPlNsb3QubCAmIH5QQ0lfRU4pKQotICAgICAgICAgICAgICAgIHJldHVybiBwQnVzLT5TbG90LmwgfCBQQ0lfRU47Ci0gICAgICAgICAgICBwQnVzID0gcEJ1cy0+bmV4dDsKLSAgICAgICAgfQorCVBjaUJ1c1B0ciBwQnVzID0gQ3VycmVudFBjaS0+cEJ1czsKKwl3aGlsZSAocEJ1cykgeworCSAgLyogICAgICBmcHJpbnRmKHN0ZGVyciwic2xvdDogMHgleCAgYnJpZGdlOiAweCV4XG4iLHNsb3QsIHBCdXMtPlNsb3QubCk7ICovCisJICAgIGlmIChzbG90ID09IChwQnVzLT5TbG90LmwgJiB+UENJX0VOKSkKKwkJcmV0dXJuIHBCdXMtPlNsb3QubCB8IFBDSV9FTjsKKwkgICAgcEJ1cyA9IHBCdXMtPm5leHQ7CisJfQogI2Vsc2UKLSAgICAgICAgUGNpU3RydWN0UHRyIHBQY2kgPSBQY2lTdHJ1Y3Q7Ci0gICAgICAgIHdoaWxlIChwUGNpKSB7Ci0gICAgICAgICAgLy9mcHJpbnRmKHN0ZGVyciwic2xvdDogMHgleCAgYnJpZGdlOiAweCV4XG4iLHNsb3QsIHBQY2ktPlNsb3QubCk7Ci0gICAgICAgICAgICBpZiAoc2xvdCA9PSAocFBjaS0+U2xvdC5sICYgflBDSV9FTikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBQY2ktPlNsb3QubCB8IFBDSV9FTjsKLSAgICAgICAgICAgIHBQY2kgPSBwUGNpLT5uZXh0OwotICAgICAgICB9CisJUGNpU3RydWN0UHRyIHBQY2kgPSBQY2lTdHJ1Y3Q7CisJd2hpbGUgKHBQY2kpIHsKKwkgIC8qZnByaW50ZihzdGRlcnIsInNsb3Q6IDB4JXggIGJyaWRnZTogMHgleFxuIixzbG90LCBwUGNpLT5TbG90LmwpOyAqLworCSAgICBpZiAoc2xvdCA9PSAocFBjaS0+U2xvdC5sICYgflBDSV9FTikpCisJCXJldHVybiBwUGNpLT5TbG90LmwgfCBQQ0lfRU47CisJICAgIHBQY2kgPSBwUGNpLT5uZXh0OworCX0KICNlbmRpZgogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTU1OSw5ICs1NTgsOSBAQAogICAgIG4rKzsKIAogICAgIHdoaWxlIChwUGNpKSAgewotICAgICAgICBpZiAoKHBQY2ktPlZlbmRvcklEID09IHZlbmRvcklEKSAmJiAocFBjaS0+RGV2aWNlSUQgPT0gZGV2aWNlSUQpKSB7Ci0gICAgICAgIGlmICghKC0tbikpIGJyZWFrOwotICAgICAgICB9CisJaWYgKChwUGNpLT5WZW5kb3JJRCA9PSB2ZW5kb3JJRCkgJiYgKHBQY2ktPkRldmljZUlEID09IGRldmljZUlEKSkgeworCWlmICghKC0tbikpIGJyZWFrOworCX0KICAgICBwUGNpID0gcFBjaS0+bmV4dDsKICAgICB9CiAgICAgcmV0dXJuIHBQY2k7CkBAIC01NzQsMTAgKzU3MywxMCBAQAogICAgIG4rKzsKIAogICAgIHdoaWxlIChwUGNpKSAgewotICAgICAgICBpZiAoKHBQY2ktPkludGVyZmFjZSA9PSBpbnRmKSAmJiAocFBjaS0+U3ViQ2xhc3MgPT0gc3ViQ2xhc3MpCi0gICAgICAgICAmJiAocFBjaS0+QmFzZUNsYXNzID09IGNsYXNzKSkgewotICAgICAgICBpZiAoISgtLW4pKSBicmVhazsKLSAgICAgICAgfQorCWlmICgocFBjaS0+SW50ZXJmYWNlID09IGludGYpICYmIChwUGNpLT5TdWJDbGFzcyA9PSBzdWJDbGFzcykKKwkgJiYgKHBQY2ktPkJhc2VDbGFzcyA9PSBjbGFzcykpIHsKKwlpZiAoISgtLW4pKSBicmVhazsKKwl9CiAgICAgcFBjaSA9IHBQY2ktPm5leHQ7CiAgICAgfQogICAgIHJldHVybiBwUGNpOwpAQCAtNTkyLDE0ICs1OTEsMTQgQEAKIAogICAgIGZvciAoaSA9IDA7IGk8NjQ7aSs9NCkgewogI2lmZGVmIF9fYWxwaGFfXwotICAgICAgICByZWdbaV0gPSBheHBQY2lDZmdSZWFkKGNvbmZpZ19jbWQgfCBpKTsKKwlyZWdbaV0gPSBheHBQY2lDZmdSZWFkKGNvbmZpZ19jbWQgfCBpKTsKICNlbHNlCi0gICAgICAgIG91dGwoUENJX01PREUxX0FERFJFU1NfUkVHLCBjb25maWdfY21kIHwgaSk7Ci0gICAgICAgIHJlZ1tpXSA9IGlubChQQ0lfTU9ERTFfREFUQV9SRUcpOworCW91dGwoUENJX01PREUxX0FERFJFU1NfUkVHLCBjb25maWdfY21kIHwgaSk7CisJcmVnW2ldID0gaW5sKFBDSV9NT0RFMV9EQVRBX1JFRyk7CiAjZW5kaWYKIAogI2lmZGVmIFY4NkJJT1NfREVCVUcKLSAgICAgICAgUF9wcmludGYoIjB4JWx4XG4iLHJlZ1tpXSk7CisJUF9wcmludGYoIjB4JWx4XG4iLHJlZ1tpXSk7CiAjZW5kaWYKICAgICB9CiB9CkBAIC02MTEsMTUgKzYxMCwxNSBAQAogICAgICAgKGRldjw8MTEpIHwgKGZ1bmM8PDgpOwogICAgIENBUkQzMiByZWc7CiAjaWZkZWYgX19hbHBoYV9fCi0gICAgICAgIHJlZyA9IGF4cFBjaUNmZ1JlYWQoY29uZmlnX2NtZCk7CisJcmVnID0gYXhwUGNpQ2ZnUmVhZChjb25maWdfY21kKTsKICNlbHNlCi0gICAgICAgIG91dGwoUENJX01PREUxX0FERFJFU1NfUkVHLCBjb25maWdfY21kKTsKLSAgICAgICAgcmVnID0gaW5sKFBDSV9NT0RFMV9EQVRBX1JFRyk7CisJb3V0bChQQ0lfTU9ERTFfQUREUkVTU19SRUcsIGNvbmZpZ19jbWQpOworCXJlZyA9IGlubChQQ0lfTU9ERTFfREFUQV9SRUcpOwogI2VuZGlmCiAgICAgaWYgKHJlZyAhPSAweEZGRkZGRkZGKQotICAgICAgICByZXR1cm4gMTsKKwlyZXR1cm4gMTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC02MzMsOSArNjMyLDkgQEAKICAgICBvdXRiKFBDSV9NT0RFMl9GT1JXQVJEX1JFRywgMHgwMCk7CiAgICAgb3V0YihQQ0lfTU9ERTJfRU5BQkxFX1JFRywgMHgwMCk7CiAgICAgaWYgKHZhbCA9PSAweEZGRkZGRkZGKQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICBpZiAodmFsID09IDB4RjBGMEYwRjApCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIHJldHVybiAxOwogfQogCkBAIC02NDcsOSArNjQ2LDkgQEAKICAgICBvdXRiKFBDSV9NT0RFMl9FTkFCTEVfUkVHLCAweEYxKTsKICAgICBvdXRiKFBDSV9NT0RFMl9GT1JXQVJEX1JFRywgYnVzKTsKICAgICBmb3IgKGkgPSAwOyBpPDY0O2krPTQpIHsKLSAgICAgICAgcmVnW2ldID0gaW5sKChkZXYgPDwgOCkgKyBpKTsKKwlyZWdbaV0gPSBpbmwoKGRldiA8PCA4KSArIGkpOwogI2lmZGVmIFY4NkJJT1NfREVCVUcKLSAgICAgICAgUF9wcmludGYoIjB4JWx4XG4iLHJlZ1tpXSk7CisJUF9wcmludGYoIjB4JWx4XG4iLHJlZ1tpXSk7CiAjZW5kaWYKICAgICB9CiAgICAgb3V0YihQQ0lfTU9ERTJfRU5BQkxFX1JFRywgMHgwMCk7CkBAIC02NjQsMjIgKzY2MywyMiBAQAogICAgIENBUkQ4IHByaW1hcnksIHNlY29uZGFyeTsKICAgICBDQVJEOCBoZWFkZXIsIGludGVyZmFjZTsKICAgICBpbnQgaTsKLSAgICAKKwogICAgIGNvbmZpZ19jbWQgPSBQQ0lfRU4gfCBidXNpZHg8PDE2IHwKLSAgICAgICAgKGRldjw8MTEpIHwgKGZ1bmM8PDgpOworCShkZXY8PDExKSB8IChmdW5jPDw4KTsKIAogICAgIGZvciAoaSA9IDB4MTA7IGkgPCAweDI4OyBpKz00KSB7Ci0gICAgICAgIGlmIChJU19NRU0zMihyZWdbaV0pKQotICAgICAgICAgICAgaWYgKChyZWdbaV0gJiAweEZGRkZGRkYwKSA8IHBjaU1pbk1lbVJlZykKLSAgICAgICAgICAgICAgICBwY2lNaW5NZW1SZWcgPSAocmVnW2ldICYgMHhGRkZGRkZGMCk7CisJaWYgKElTX01FTTMyKHJlZ1tpXSkpCisJICAgIGlmICgocmVnW2ldICYgMHhGRkZGRkZGMCkgPCBwY2lNaW5NZW1SZWcpCisJCXBjaU1pbk1lbVJlZyA9IChyZWdbaV0gJiAweEZGRkZGRkYwKTsKICNpZmRlZiBfX2FscGhhX18KLSAgICAgICAgaWYgKElTX01FTTY0KHJlZ1tpXSkpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIgPSByZWdbaV0gfCAKLSAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHJlZ1tpKzRdKSA8PCAzMjsKLSAgICAgICAgICAgIGlmICgoYWRkciAmIH4weGZMKSA8IHBjaU1pbk1lbVJlZykKLSAgICAgICAgICAgICAgICBwY2lNaW5NZW1SZWcgPSAoYWRkciAmIH4weGZMKTsKLSAgICAgICAgICAgIGkrPTQ7Ci0gICAgICAgIH0KKwlpZiAoSVNfTUVNNjQocmVnW2ldKSkgeworCQl1bnNpZ25lZCBsb25nIGFkZHIgPSByZWdbaV0gfAorCSAgICAgICh1bnNpZ25lZCBsb25nKShyZWdbaSs0XSkgPDwgMzI7CisJICAgIGlmICgoYWRkciAmIH4weGZMKSA8IHBjaU1pbk1lbVJlZykKKwkJcGNpTWluTWVtUmVnID0gKGFkZHIgJiB+MHhmTCk7CisJICAgIGkrPTQ7CisJfQogI2VuZGlmCiAgICAgfQogICAgIHZlbmRvciA9IHJlZ1swXSAmIDB4RkZGRjsKQEAgLTY5MSw0OSArNjkwLDQ5IEBACiAKICAgICBoZWFkZXIgPSAocmVnWzB4MGNdID4+IDE2KSAmIDB4ZmY7CiAgICAgUF9wcmludGYoImJjIDB4JXgsIHN1YiAweCV4LCBpZiAweCV4LCBoZHIgMHgleFxuIiwKLSAgICAgICAgICAgICBiYXNlY2xhc3Msc3ViY2xhc3MsaW50ZXJmYWNlLGhlYWRlcik7CisJICAgICBiYXNlY2xhc3Msc3ViY2xhc3MsaW50ZXJmYWNlLGhlYWRlcik7CiAgICAgaWYgKEJSSURHRV9DTEFTUyhiYXNlY2xhc3MpKSB7Ci0gICAgICAgIGlmIChCUklER0VfUENJX0NMQVNTKHN1YmNsYXNzKSkgewotICAgICAgICAgICAgUGNpQnVzUHRyIHBicCA9IG1hbGxvYyhzaXplb2YoUGNpQnVzUmVjKSk7Ci0gICAgICAgICAgICBQX3ByaW50ZigiUGNpLVBjaSBCcmlkZ2UgZm91bmQ7ICIpOwotICAgICAgICAgICAgcHJpbWFyeSA9IHJlZ1sweDE4XSAmIDB4RkY7Ci0gICAgICAgICAgICBzZWNvbmRhcnkgPSAocmVnWzB4MThdID4+IDgpICYgMHhGRjsKLSAgICAgICAgICAgIFBfcHJpbnRmKCJwcmltYXJ5OiAweCV4IHNlY29uZGFyeTogMHgleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHByaW1hcnksc2Vjb25kYXJ5KTsKLSAgICAgICAgICAgIHBicC0+YmN0bCA9IHJlZ1sweDNjXTsKLSAgICAgICAgICAgIHBicC0+cHJpbWFyeSA9IHByaW1hcnk7Ci0gICAgICAgICAgICBwYnAtPnNlY29uZGFyeSA9IHNlY29uZGFyeTsKLSAgICAgICAgICAgIHBicC0+U2xvdC5sID0gY29uZmlnX2NtZDsKLSAgICAgICAgICAgIHBicC0+bmV4dCA9IFBjaUJ1c2VzOwotICAgICAgICAgICAgUGNpQnVzZXMgPSBwYnA7Ci0gICAgICAgICAgICBudW1idXMrKzsKLSAgICAgICAgfSBlbHNlIGlmIChCUklER0VfSE9TVF9DTEFTUyhzdWJjbGFzcykKLSAgICAgICAgICAgICAgICAgICAmJiAoaG9zdGJyaWRnZXMrKyA+IDEpKSB7Ci0gICAgICAgICAgICBudW1idXMrKzsKLSAgICAgICAgfQorCWlmIChCUklER0VfUENJX0NMQVNTKHN1YmNsYXNzKSkgeworCSAgICBQY2lCdXNQdHIgcGJwID0gbWFsbG9jKHNpemVvZihQY2lCdXNSZWMpKTsKKwkgICAgUF9wcmludGYoIlBjaS1QY2kgQnJpZGdlIGZvdW5kOyAiKTsKKwkgICAgcHJpbWFyeSA9IHJlZ1sweDE4XSAmIDB4RkY7CisJICAgIHNlY29uZGFyeSA9IChyZWdbMHgxOF0gPj4gOCkgJiAweEZGOworCSAgICBQX3ByaW50ZigicHJpbWFyeTogMHgleCBzZWNvbmRhcnk6IDB4JXhcbiIsCisJCSAgICAgcHJpbWFyeSxzZWNvbmRhcnkpOworCSAgICBwYnAtPmJjdGwgPSByZWdbMHgzY107CisJICAgIHBicC0+cHJpbWFyeSA9IHByaW1hcnk7CisJICAgIHBicC0+c2Vjb25kYXJ5ID0gc2Vjb25kYXJ5OworCSAgICBwYnAtPlNsb3QubCA9IGNvbmZpZ19jbWQ7CisJICAgIHBicC0+bmV4dCA9IFBjaUJ1c2VzOworCSAgICBQY2lCdXNlcyA9IHBicDsKKwkgICAgbnVtYnVzKys7CisJfSBlbHNlIGlmIChCUklER0VfSE9TVF9DTEFTUyhzdWJjbGFzcykKKwkJICAgJiYgKGhvc3RicmlkZ2VzKysgPiAxKSkgeworCSAgICBudW1idXMrKzsKKwl9CiAgICAgfSBlbHNlIGlmIChWSURFT19DTEFTUyhiYXNlY2xhc3Msc3ViY2xhc3MpKSB7Ci0gICAgICAgIFBjaVN0cnVjdFB0ciBwY3AgPSBtYWxsb2Moc2l6ZW9mKFBjaVN0cnVjdFJlYykpOwotICAgICAgICBQX3ByaW50ZigiRGlzcGxheSBhZGFwdGVyIGZvdW5kXG4iKTsKLSAgICAgICAgcGNwLT5Sb21CYXNlID0gcmVnWzB4MzBdOwotICAgICAgICBwY3AtPmNtZF9zdCA9IHJlZ1s0XTsKLSAgICAgICAgcGNwLT5hY3RpdmUgPSAocmVnWzRdICYgMHgwMykgPT0gMyA/IDEgOiAwOwotICAgICAgICBwY3AtPlZlbmRvcklEID0gdmVuZG9yOwotICAgICAgICBwY3AtPkRldmljZUlEID0gZGV2aWNlOwotICAgICAgICBwY3AtPkludGVyZmFjZSA9IGludGVyZmFjZTsKLSAgICAgICAgcGNwLT5CYXNlQ2xhc3MgPSBiYXNlY2xhc3M7Ci0gICAgICAgIHBjcC0+U3ViQ2xhc3MgPSBzdWJjbGFzczsKLSAgICAgICAgcGNwLT5TbG90LmwgPSBjb25maWdfY21kOwotICAgICAgICBwY3AtPmJ1cyA9IGJ1c2lkeDsKLSAgICAgICAgcGNwLT5kZXYgPSBkZXY7Ci0gICAgICAgIHBjcC0+ZnVuYyA9IGZ1bmM7Ci0gICAgICAgIHBjcC0+bmV4dCA9IFBjaVN0cnVjdDsKLSAgICAgICAgUGNpU3RydWN0ID0gcGNwOworCVBjaVN0cnVjdFB0ciBwY3AgPSBtYWxsb2Moc2l6ZW9mKFBjaVN0cnVjdFJlYykpOworCVBfcHJpbnRmKCJEaXNwbGF5IGFkYXB0ZXIgZm91bmRcbiIpOworCXBjcC0+Um9tQmFzZSA9IHJlZ1sweDMwXTsKKwlwY3AtPmNtZF9zdCA9IHJlZ1s0XTsKKwlwY3AtPmFjdGl2ZSA9IChyZWdbNF0gJiAweDAzKSA9PSAzID8gMSA6IDA7CisJcGNwLT5WZW5kb3JJRCA9IHZlbmRvcjsKKwlwY3AtPkRldmljZUlEID0gZGV2aWNlOworCXBjcC0+SW50ZXJmYWNlID0gaW50ZXJmYWNlOworCXBjcC0+QmFzZUNsYXNzID0gYmFzZWNsYXNzOworCXBjcC0+U3ViQ2xhc3MgPSBzdWJjbGFzczsKKwlwY3AtPlNsb3QubCA9IGNvbmZpZ19jbWQ7CisJcGNwLT5idXMgPSBidXNpZHg7CisJcGNwLT5kZXYgPSBkZXY7CisJcGNwLT5mdW5jID0gZnVuYzsKKwlwY3AtPm5leHQgPSBQY2lTdHJ1Y3Q7CisJUGNpU3RydWN0ID0gcGNwOwogICAgIH0KICAgICBpZiAoKGZ1bmMgPT0gMCkKLSAgICAgICAgJiYgKChoZWFkZXIgJiBQQ0lfTVVMVElGVU5DX0RFVikgPT0gMCkpCi0gICAgICAgIGZ1bmMgPSA4OworCSYmICgoaGVhZGVyICYgUENJX01VTFRJRlVOQ19ERVYpID09IDApKQorCWZ1bmMgPSA4OwogICAgIGVsc2UKLSAgICAgICAgZnVuYysrOworCWZ1bmMrKzsKICAgICByZXR1cm4gZnVuYzsKIH0KIApAQCAtNzQ4LDM2ICs3NDcsMzYgQEAKICAgICBDQVJEMzIgb3JnOwogICAgIENBUkQzMiB2YWw7CiAgICAgQ0FSRDMyIHNpemVfbjsKLSAgICAKLSAgICBvcmcgPSBQY2lSZWFkMzIobnVtICsgMHgxMCxwY2lQLT5TbG90LmwpOwotICAgIAotICAgIHdoaWxlIChwY2lQdHIpIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDIwOyBpPWkrNCkgewogCi0gICAgICAgICAgICB2YWwgPSBQY2lSZWFkMzIoaSArIDB4MTAscGNpUHRyLT5TbG90LmwpOwotICAgICAgICAgICAgLyogZG9uJ3QgbWFwIGl0IG9uIGl0c2VsZiAqLwotICAgICAgICAgICAgaWYgKChvcmcgJiAweGZmZmZmZmYwKSA9PSAodmFsICYgMHhmZmZmZmZmMCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAodmFsICYmICEodmFsICYgMSkpCi0gICAgICAgICAgICAgICAgUGNpV3JpdGUzMihpICsgMHgxMCwweGZmZmZmZmZmLHBjaVB0ci0+U2xvdC5sKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHNpemVfbiA9IFBjaVJlYWQzMihpICsgMHgxMCxwY2lQdHItPlNsb3QubCk7Ci0gICAgICAgICAgICBQY2lXcml0ZTMyKGkgKyAweDEwLHZhbCxwY2lQdHItPlNsb3QubCk7Ci0gICAgICAgICAgICBzaXplX24gPSB+KENBUkQzMikoc2l6ZV9uICAmIDB4ZmZmZmZmZjApICsgMTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc2l6ZV9uID49IHNpemUpIHsKLSAgICAgICAgICAgICAgICBQY2lXcml0ZTMyKG51bSArIDB4MTAsdmFsLHBjaVAtPlNsb3QubCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcGNpUHRyID0gcGNpUHRyLT5uZXh0OworICAgIG9yZyA9IFBjaVJlYWQzMihudW0gKyAweDEwLHBjaVAtPlNsb3QubCk7CisKKyAgICB3aGlsZSAocGNpUHRyKSB7CisJZm9yIChpID0gMDsgaSA8IDIwOyBpPWkrNCkgeworCisJICAgIHZhbCA9IFBjaVJlYWQzMihpICsgMHgxMCxwY2lQdHItPlNsb3QubCk7CisJICAgIC8qIGRvbid0IG1hcCBpdCBvbiBpdHNlbGYgKi8KKwkgICAgaWYgKChvcmcgJiAweGZmZmZmZmYwKSA9PSAodmFsICYgMHhmZmZmZmZmMCkpCisJCWNvbnRpbnVlOworCSAgICBpZiAodmFsICYmICEodmFsICYgMSkpCisJCVBjaVdyaXRlMzIoaSArIDB4MTAsMHhmZmZmZmZmZixwY2lQdHItPlNsb3QubCk7CisJICAgIGVsc2UKKwkJY29udGludWU7CisJICAgIHNpemVfbiA9IFBjaVJlYWQzMihpICsgMHgxMCxwY2lQdHItPlNsb3QubCk7CisJICAgIFBjaVdyaXRlMzIoaSArIDB4MTAsdmFsLHBjaVB0ci0+U2xvdC5sKTsKKwkgICAgc2l6ZV9uID0gfihDQVJEMzIpKHNpemVfbiAgJiAweGZmZmZmZmYwKSArIDE7CisKKwkgICAgaWYgKHNpemVfbiA+PSBzaXplKSB7CisJCVBjaVdyaXRlMzIobnVtICsgMHgxMCx2YWwscGNpUC0+U2xvdC5sKTsKKwkJcmV0dXJuIDE7CisJICAgIH0KKwl9CisJcGNpUHRyID0gcGNpUHRyLT5uZXh0OwogICAgIH0KICAgICAvKiBsYXN0IHJlc29ydDogdHJ5IHRvIGdvIGJlbG93IGxvd2VzdCBQQ0kgbWVtIGFkZHJlc3MgKi8KICAgICB2YWwgPSAoKHBjaU1pbk1lbVJlZyAmIH4oQ0FSRDMyKShzaXplIC0gMSkpIC0gc2l6ZSk7CiAgICAgaWYgKHZhbCA+IDB4N2ZmZmZmZmYpIHsKLSAgICAgICAgUGNpV3JpdGUzMihudW0gKyAweDEwLHZhbCwgcGNpUC0+U2xvdC5sKTsKLSAgICAgICAgcmV0dXJuIDE7CisJUGNpV3JpdGUzMihudW0gKyAweDEwLHZhbCwgcGNpUC0+U2xvdC5sKTsKKwlyZXR1cm4gMTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTc5OCw3ICs3OTcsNyBAQAogICAgIGludCBpOwogICAgIENBUkQzMiB2YWw7CiAgICAgQ0FSRDMyIHNpemU7Ci0gICAgCisKICAgICBQY2lXcml0ZTMyKDB4MzAsMHhmZmZmZmZmZixwY2lQLT5TbG90LmwpOwogICAgICpiaW9zU2l6ZSA9IFBjaVJlYWQzMigweDMwLHBjaVAtPlNsb3QubCk7CiAgICAgUF9wcmludGYoImJpb3Mgc2l6ZTogMHgleFxuIiwqYmlvc1NpemUpOwpAQCAtODEwLDQzICs4MDksNDMgQEAKICAgICAgIFBfcHJpbnRmKCJmaXhpbmcgYnJva2VuIEJJT1Mgc2l6ZTogMHgleFxuIiwqYmlvc1NpemUpOwogICAgIH0KICAgICB3aGlsZSAocGNpUHRyKSB7Ci0gICAgICAgIGlmIChwY2lQdHItPmJ1cyAhPSBwY2lQLT5idXMpIHsKLSAgICAgICAgICAgIHBjaVB0ciA9IHBjaVB0ci0+bmV4dDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyMDsgaT1pKzQpIHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFsID0gUGNpUmVhZDMyKGkgKyAweDEwLHBjaVB0ci0+U2xvdC5sKTsKLSAgICAgICAgICAgIGlmICghKHZhbCAmIDEpKQotICAgIAotICAgICAgICAgICAgUGNpV3JpdGUzMihpICsgMHgxMCwweGZmZmZmZmZmLHBjaVB0ci0+U2xvdC5sKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHNpemUgPSBQY2lSZWFkMzIoaSArIDB4MTAscGNpUHRyLT5TbG90LmwpOwotICAgICAgICAgICAgUGNpV3JpdGUzMihpICsgMHgxMCx2YWwscGNpUHRyLT5TbG90LmwpOwotICAgICAgICAgICAgc2l6ZSA9IH4oQ0FSRDMyKShzaXplICYgMHhGRkZGRkZGMCkgKyAxOworCWlmIChwY2lQdHItPmJ1cyAhPSBwY2lQLT5idXMpIHsKKwkgICAgcGNpUHRyID0gcGNpUHRyLT5uZXh0OworCSAgICBjb250aW51ZTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDIwOyBpPWkrNCkgeworCisJICAgIHZhbCA9IFBjaVJlYWQzMihpICsgMHgxMCxwY2lQdHItPlNsb3QubCk7CisJICAgIGlmICghKHZhbCAmIDEpKQorCisJICAgIFBjaVdyaXRlMzIoaSArIDB4MTAsMHhmZmZmZmZmZixwY2lQdHItPlNsb3QubCk7CisJICAgIGVsc2UKKwkJY29udGludWU7CisJICAgIHNpemUgPSBQY2lSZWFkMzIoaSArIDB4MTAscGNpUHRyLT5TbG90LmwpOworCSAgICBQY2lXcml0ZTMyKGkgKyAweDEwLHZhbCxwY2lQdHItPlNsb3QubCk7CisJICAgIHNpemUgPSB+KENBUkQzMikoc2l6ZSAmIDB4RkZGRkZGRjApICsgMTsKICNpZmRlZiBWODZfQklPU19ERUJVRwotICAgICAgICAgICAgUF9wcmludGYoInNpemU6IDB4JXhcbiIsc2l6ZSk7CisJICAgIFBfcHJpbnRmKCJzaXplOiAweCV4XG4iLHNpemUpOwogI2VuZGlmCi0gICAgICAgICAgICBpZiAoc2l6ZSA+PSAqYmlvc1NpemUpIHsKLSAgICAgICAgICAgICAgICBpZiAocGNpUCA9PSBwY2lQdHIpIHsgLyogaWYgc2FtZSBkZXZpY2UgcmVtYXAgcmFtKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVtYXBNZW0ocGNpUCxpLHNpemUpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICByZW1hcE1FTV92YWwgPSB2YWw7Ci0gICAgICAgICAgICAgICAgICAgIHJlbWFwTUVNX251bSA9IGk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVtYXBNRU1fdmFsID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbCAmIDB4RkZGRkZGMDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcGNpUHRyID0gcGNpUHRyLT5uZXh0OworCSAgICBpZiAoc2l6ZSA+PSAqYmlvc1NpemUpIHsKKwkJaWYgKHBjaVAgPT0gcGNpUHRyKSB7IC8qIGlmIHNhbWUgZGV2aWNlIHJlbWFwIHJhbSovCisJCSAgICBpZiAoIShyZW1hcE1lbShwY2lQLGksc2l6ZSkpKQorCQkJY29udGludWU7CisJCSAgICByZW1hcE1FTV92YWwgPSB2YWw7CisJCSAgICByZW1hcE1FTV9udW0gPSBpOworCQl9IGVsc2UgeworCQkgICAgcmVtYXBNRU1fdmFsID0gMDsKKwkJfQorCQlyZXR1cm4gdmFsICYgMHhGRkZGRkYwMDsKKwkgICAgfQorCX0KKwlwY2lQdHIgPSBwY2lQdHItPm5leHQ7CiAgICAgfQogICAgIHJlbWFwTUVNX3ZhbCA9IDA7CiAgICAgLyogdmVyeSBsYXN0IHJlc29ydCAqLwotICAgIGlmIChwY2lQLT5idXMgPT0gMCAmJiAocGNpTWluTWVtUmVnID4gKmJpb3NTaXplKSkgCisgICAgaWYgKHBjaVAtPmJ1cyA9PSAwICYmIChwY2lNaW5NZW1SZWcgPiAqYmlvc1NpemUpKQogICAgICAgcmV0dXJuIChwY2lNaW5NZW1SZWcgLSBzaXplKSAmIH4oc2l6ZSAtIDEpOwotICAgICAgCisKICAgICByZXR1cm4gMDsKIH0KIApAQCAtODYzLDcgKzg2Miw3IEBACiAgIHJldHVybiAwOwogfQogCi1pbnQgCitpbnQKIGNmZzFpbihDQVJEMTYgYWRkciwgQ0FSRDMyICp2YWwpCiB7CiAgIGlmIChhZGRyID09IDB4Q0Y4KSB7CkBAIC04ODMsOCArODgyLDggQEAKIAogICAgIHdoaWxlIChwY2kpIHsKICAgICBwcmludGYoIlsweCV4OjB4JXg6MHgleF0gdmVuZG9yOiAweCU0LjR4IGRldjogMHglNC40eCBjbGFzczogMHglNC40eCIKLSAgICAgICAgICAgIiBzdWJjbGFzczogMHglNC40eFxuIixwY2ktPmJ1cyxwY2ktPmRldixwY2ktPmZ1bmMsCi0gICAgICAgICAgIHBjaS0+VmVuZG9ySUQscGNpLT5EZXZpY2VJRCxwY2ktPkJhc2VDbGFzcyxwY2ktPlN1YkNsYXNzKTsKKwkgICAiIHN1YmNsYXNzOiAweCU0LjR4XG4iLHBjaS0+YnVzLHBjaS0+ZGV2LHBjaS0+ZnVuYywKKwkgICBwY2ktPlZlbmRvcklELHBjaS0+RGV2aWNlSUQscGNpLT5CYXNlQ2xhc3MscGNpLT5TdWJDbGFzcyk7CiAgICAgcGNpID0gcGNpLT5uZXh0OwogICAgIH0KIH0KQEAgLTg5Myw3ICs4OTIsNyBAQAogZmluZFBjaUJ5SURzKGludCBidXMsIGludCBkZXYsIGludCBmdW5jKQogewogICBQY2lTdHJ1Y3RQdHIgcGNpUCA9IFBjaUxpc3Q7Ci0gIAorCiAgIHdoaWxlIChwY2lQKSB7CiAgICAgaWYgKHBjaVAtPmJ1cyA9PSBidXMgJiYgcGNpUC0+ZGV2ID09IGRldiAmJiBwY2lQLT5mdW5jID09IGZ1bmMpCiAgICAgICByZXR1cm4gcGNpUDsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvcGNpLmggYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL3BjaS5oCmluZGV4IDBhYjczNjMuLjU4YWQ1MjIgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MvcGNpLmgKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy9wY2kuaApAQCAtMjYsMTMgKzI2LDEzIEBACiAKIHR5cGVkZWYgdW5pb24gewogICAgIHN0cnVjdCB7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgICB6ZXJvOjI7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgICByZWc6NjsKLSAgICAgICAgdW5zaWduZWQgaW50ICAgIGZ1bmM6MzsKLSAgICAgICAgdW5zaWduZWQgaW50ICAgIGRldjo1OwotICAgICAgICB1bnNpZ25lZCBpbnQgICAgYnVzOjg7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgICByZXNlcnZlZDo3OwotICAgICAgICB1bnNpZ25lZCBpbnQgICAgZW5hYmxlOjE7CisJdW5zaWduZWQgaW50ICAgIHplcm86MjsKKwl1bnNpZ25lZCBpbnQgICAgcmVnOjY7CisJdW5zaWduZWQgaW50ICAgIGZ1bmM6MzsKKwl1bnNpZ25lZCBpbnQgICAgZGV2OjU7CisJdW5zaWduZWQgaW50ICAgIGJ1czo4OworCXVuc2lnbmVkIGludCAgICByZXNlcnZlZDo3OworCXVuc2lnbmVkIGludCAgICBlbmFibGU6MTsKICAgICB9IHBjaTsKICAgICBDQVJEMzIgbDsKIH0gUGNpU2xvdDsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3Mvdjg2LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL3Y4Ni5jCmluZGV4IDMxNzBhOWMuLjRkZWVkMDQgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3Mvdjg2LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy92ODYuYwpAQCAtNDYsMTQgKzQ2LDE0IEBACiAjZGVmaW5lIENQVV9SRUdfSFcocmVnKSAgICAgICgqKChDQVJEMTYgKikmQ1BVX1JFRyhyZWcpICsgMSkpCiAjZGVmaW5lIENQVV9SRUdfTEIocmVnKSAgICAgICgqKENBUkQ4ICopJkNQVV9SRUcoZSMjcmVnKSkKICNkZWZpbmUgU0VHX0FEUih0eXBlLCBzZWcsIHJlZykgIHR5cGUoKENQVV9SRUdfTFcoc2VnKSA8PCA0KSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQ1BVX1JFR19MVyhlIyNyZWcpKQorCQkJCSAgICAgICsgQ1BVX1JFR19MVyhlIyNyZWcpKQogI2RlZmluZSBERiAoMSA8PCAxMCkKIAogc3RydWN0IHBpbyBQOwogCiAKIHZvaWQKLXNldHVwX2lvKHZvaWQpIAorc2V0dXBfaW8odm9pZCkKIHsKICAgICBpZiAoIUNvbmZpZy5QcmludFBvcnQgJiYgIUNvbmZpZy5Jb1N0YXRpc3RpY3MpIHsKICAgICBQLmluYiA9IChDQVJEOCgqKShDQVJEMTYpKWluYjsKQEAgLTcyLDEzICs3MiwxMyBAQAogICAgIH0KIH0KIAotICAgIAorCiBzdGF0aWMgdm9pZAogc2V0dXBfdm04Nih1bnNpZ25lZCBsb25nIGJpb3Nfc3RhcnQsIGk4NmJpb3NSZWdzUHRyIHJlZ3MpCiB7CiAgICAgQ0FSRDMyIGVpcDsKICAgICBDQVJEMTYgY3M7Ci0gICAgCisKICAgICB2bTg2cy5mbGFncyA9IFZNODZfU0NSRUVOX0JJVE1BUDsKICAgICB2bTg2cy5mbGFncyA9IDA7CiAgICAgdm04NnMuc2NyZWVuX2JpdG1hcCA9IDA7CkBAIC04OCw3ICs4OCw3IEBACiAKICAgICBlaXAgPSBiaW9zX3N0YXJ0ICYgMHhGRkZGOwogICAgIGNzID0gKGJpb3Nfc3RhcnQgJiAweEZGMDAwMCkgPj4gNDsKLSAgICAKKwogICAgIENQVV9SRUcoZWF4KSA9IHJlZ3MtPmF4OwogICAgIENQVV9SRUcoZWJ4KSA9IHJlZ3MtPmJ4OwogICAgIENQVV9SRUcoZWN4KSA9IHJlZ3MtPmN4OwpAQCAtOTcsNyArOTcsNyBAQAogICAgIENQVV9SRUcoZWRpKSA9IHJlZ3MtPmRpOwogICAgIENQVV9SRUcoZWJwKSA9IDA7CiAgICAgQ1BVX1JFRyhlaXApID0gZWlwOwotICAgIENQVV9SRUcoY3MpID0gY3M7ICAgICAgICAgICAgICAgCisgICAgQ1BVX1JFRyhjcykgPSBjczsKICAgICBDUFVfUkVHKGVzcCkgPSAweDEwMDsKICAgICBDUFVfUkVHKHNzKSA9IDB4MzA7ICAgICAgICAgICAgICAgLyogVGhpcyBpcyB0aGUgc3RhbmRhcmQgcGMgYmlvcyBzdGFjayAqLwogICAgIENQVV9SRUcoZXMpID0gcmVncy0+ZXM7CkBAIC0xMjQsNDQgKzEyNCw0NCBAQAogZG9fdm04Nih2b2lkKQogewogICAgIGludCByZXR2YWw7Ci0gICAgCisKICNpZmRlZiBWODZCSU9TX0RFQlVHCiAgICAgZHVtcF9yZWdpc3RlcnMoKTsKICNlbmRpZgotLy8gICAgcmV0dmFsID0gU1lTX3ZtODZvbGQoJnZtODZzKTsKLS8vICAgIHJldHZhbCA9IHN5c2NhbGwoU1lTX3ZtODZvbGQsJnZtODZzKTsKKy8qICAgIHJldHZhbCA9IFNZU192bTg2b2xkKCZ2bTg2cyk7ICovCisvKiAgICByZXR2YWwgPSBzeXNjYWxsKFNZU192bTg2b2xkLCZ2bTg2cyk7ICovCiAKICAgICByZXR2YWwgPSB2bTg2X3JlcCgmdm04NnMpOwotICAgIAorCiAgICAgc3dpdGNoIChWTTg2X1RZUEUocmV0dmFsKSkgewogICAgIGNhc2UgVk04Nl9VTktOT1dOOgotICAgICAgICBpZiAoIXZtODZfR1BfZmF1bHQoKSkgcmV0dXJuIDA7Ci0gICAgICAgIGJyZWFrOworCWlmICghdm04Nl9HUF9mYXVsdCgpKSByZXR1cm4gMDsKKwlicmVhazsKICAgICBjYXNlIFZNODZfU1RJOgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwidm04Nl9zdGkgOi0oKFxuIik7Ci0gICAgICAgIHN0YWNrX3RyYWNlKCk7Ci0gICAgICAgIGR1bXBfY29kZSgpOwotICAgICAgICByZXR1cm4gMDsKKwlmcHJpbnRmKHN0ZGVyciwidm04Nl9zdGkgOi0oKFxuIik7CisJc3RhY2tfdHJhY2UoKTsKKwlkdW1wX2NvZGUoKTsKKwlyZXR1cm4gMDsKICAgICBjYXNlIFZNODZfSU5UeDoKLSAgICAgICAgaWYgKCF2bTg2X2RvX2ludChWTTg2X0FSRyhyZXR2YWwpKSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIlxuVW5rbm93biB2bTg2X2ludDogJVhcblxuIixWTTg2X0FSRyhyZXR2YWwpKTsKLSAgICAgICAgICAgIGR1bXBfcmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICAvKiBJJ20gbm90IHN1cmUgeWV0IHdoYXQgdG8gZG8gaWYgd2UgY2FuIGhhbmRsZSBpbnRzICovCi0gICAgICAgIGJyZWFrOworCWlmICghdm04Nl9kb19pbnQoVk04Nl9BUkcocmV0dmFsKSkpIHsKKwkgICAgZnByaW50ZihzdGRlcnIsIlxuVW5rbm93biB2bTg2X2ludDogJVhcblxuIixWTTg2X0FSRyhyZXR2YWwpKTsKKwkgICAgZHVtcF9yZWdpc3RlcnMoKTsKKwkgICAgcmV0dXJuIDA7CisJfQorCS8qIEknbSBub3Qgc3VyZSB5ZXQgd2hhdCB0byBkbyBpZiB3ZSBjYW4gaGFuZGxlIGludHMgKi8KKwlicmVhazsKICAgICBjYXNlIFZNODZfU0lHTkFMOgotICAgICAgICBmcHJpbnRmKHN0ZGVyciwicmVjZWl2ZWQgc2lnbmFsXG4iKTsKLSAgICAgICAgcmV0dXJuIDA7CisJZnByaW50ZihzdGRlcnIsInJlY2VpdmVkIHNpZ25hbFxuIik7CisJcmV0dXJuIDA7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZnByaW50ZihzdGRlcnIsInVua25vd24gdHlwZSgweCV4KT0weCV4XG4iLAotICAgICAgICAgICAgICAgIFZNODZfQVJHKHJldHZhbCksVk04Nl9UWVBFKHJldHZhbCkpOwotICAgICAgICBkdW1wX3JlZ2lzdGVycygpOwotICAgICAgICBkdW1wX2NvZGUoKTsKLSAgICAgICAgc3RhY2tfdHJhY2UoKTsKLSAgICAgICAgcmV0dXJuIDA7CisJZnByaW50ZihzdGRlcnIsInVua25vd24gdHlwZSgweCV4KT0weCV4XG4iLAorCQlWTTg2X0FSRyhyZXR2YWwpLFZNODZfVFlQRShyZXR2YWwpKTsKKwlkdW1wX3JlZ2lzdGVycygpOworCWR1bXBfY29kZSgpOworCXN0YWNrX3RyYWNlKCk7CisJcmV0dXJuIDA7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTE3NiwxNyArMTc2LDE3IEBACiBkb194ODYodW5zaWduZWQgbG9uZyBiaW9zX3N0YXJ0LCBpODZiaW9zUmVnc1B0ciByZWdzKQogewogICAgIHN0YXRpYyB2b2lkICgqb3JnX2hhbmRsZXIpKGludCk7Ci0gICAgCisKICAgICBzZXR1cF92bTg2KGJpb3Nfc3RhcnQsIHJlZ3MpOwogICAgIGlmIChzZXRqbXAoeDg2X2VzYykgPT0gMCkgewotICAgICAgICBvcmdfaGFuZGxlciA9IHNpZ25hbCgyLHZtZXhpdCk7Ci0gICAgICAgIHdoaWxlKGRvX3ZtODYoKSkge307Ci0gICAgICAgIHNpZ25hbCgyLG9yZ19oYW5kbGVyKTsKLSAgICAgICAgY29sbGVjdF9iaW9zX3JlZ3MocmVncyk7CisJb3JnX2hhbmRsZXIgPSBzaWduYWwoMix2bWV4aXQpOworCXdoaWxlKGRvX3ZtODYoKSkge307CisJc2lnbmFsKDIsb3JnX2hhbmRsZXIpOworCWNvbGxlY3RfYmlvc19yZWdzKHJlZ3MpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpZ25hbCgyLG9yZ19oYW5kbGVyKTsKLSAgICAgICAgcHJpbnRmKCJpbnRlcnJ1cHRlZCBhdCAweCV4XG4iLCgoQ0FSRDE2KUNQVV9SRUcoY3MpKSA8PCA0Ci0gICAgICAgICAgIHwgKENBUkQxNilDUFVfUkVHKGVpcCkpOworCXNpZ25hbCgyLG9yZ19oYW5kbGVyKTsKKwlwcmludGYoImludGVycnVwdGVkIGF0IDB4JXhcbiIsKChDQVJEMTYpQ1BVX1JFRyhjcykpIDw8IDQKKwkgICB8IChDQVJEMTYpQ1BVX1JFRyhlaXApKTsKICAgICB9CiB9CiAKQEAgLTIxNywxOSArMjE3LDE5IEBACiAgICAgLyogZWF0IHVwIHByZWZpeGVzICovCiAgICAgZG9uZSA9IDA7CiAgICAgZG8gewotICAgICAgICBzd2l0Y2ggKCooY3NwKyspKSB7Ci0gICAgICAgIGNhc2UgMHg2NjogICAgICAvKiBvcGVyYW5kIHByZWZpeCAqLyAgcHJlZml4NjY9MTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHg2NzogICAgICAvKiBhZGRyZXNzIHByZWZpeCAqLyAgcHJlZml4Njc9MTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHgyZTogICAgICAvKiBDUyAqLyAgICAgICAgICAgICAgcHJlZl9zZWc9Q1BVX1JFRyhjcyk7IGJyZWFrOwotICAgICAgICBjYXNlIDB4M2U6ICAgICAgLyogRFMgKi8gICAgICAgICAgICAgIHByZWZfc2VnPUNQVV9SRUcoZHMpOyBicmVhazsKLSAgICAgICAgY2FzZSAweDI2OiAgICAgIC8qIEVTICovICAgICAgICAgICAgICBwcmVmX3NlZz1DUFVfUkVHKGVzKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHgzNjogICAgICAvKiBTUyAqLyAgICAgICAgICAgICAgcHJlZl9zZWc9Q1BVX1JFRyhzcyk7IGJyZWFrOwotICAgICAgICBjYXNlIDB4NjU6ICAgICAgLyogR1MgKi8gICAgICAgICAgICAgIHByZWZfc2VnPUNQVV9SRUcoZ3MpOyBicmVhazsKLSAgICAgICAgY2FzZSAweDY0OiAgICAgIC8qIEZTICovICAgICAgICAgICAgICBwcmVmX3NlZz1DUFVfUkVHKGZzKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHhmMjogICAgICAvKiByZXBueiAqLwotICAgICAgICBjYXNlIDB4ZjM6ICAgICAgLyogcmVwICovICAgICAgICAgICAgIGlzX3JlcD0xOyBicmVhazsKLSAgICAgICAgZGVmYXVsdDogZG9uZT0xOwotICAgICAgICB9CisJc3dpdGNoICgqKGNzcCsrKSkgeworCWNhc2UgMHg2NjogICAgICAvKiBvcGVyYW5kIHByZWZpeCAqLyAgcHJlZml4NjY9MTsgYnJlYWs7CisJY2FzZSAweDY3OiAgICAgIC8qIGFkZHJlc3MgcHJlZml4ICovICBwcmVmaXg2Nz0xOyBicmVhazsKKwljYXNlIDB4MmU6ICAgICAgLyogQ1MgKi8gICAgICAgICAgICAgIHByZWZfc2VnPUNQVV9SRUcoY3MpOyBicmVhazsKKwljYXNlIDB4M2U6ICAgICAgLyogRFMgKi8gICAgICAgICAgICAgIHByZWZfc2VnPUNQVV9SRUcoZHMpOyBicmVhazsKKwljYXNlIDB4MjY6ICAgICAgLyogRVMgKi8gICAgICAgICAgICAgIHByZWZfc2VnPUNQVV9SRUcoZXMpOyBicmVhazsKKwljYXNlIDB4MzY6ICAgICAgLyogU1MgKi8gICAgICAgICAgICAgIHByZWZfc2VnPUNQVV9SRUcoc3MpOyBicmVhazsKKwljYXNlIDB4NjU6ICAgICAgLyogR1MgKi8gICAgICAgICAgICAgIHByZWZfc2VnPUNQVV9SRUcoZ3MpOyBicmVhazsKKwljYXNlIDB4NjQ6ICAgICAgLyogRlMgKi8gICAgICAgICAgICAgIHByZWZfc2VnPUNQVV9SRUcoZnMpOyBicmVhazsKKwljYXNlIDB4ZjI6ICAgICAgLyogcmVwbnogKi8KKwljYXNlIDB4ZjM6ICAgICAgLyogcmVwICovICAgICAgICAgICAgIGlzX3JlcD0xOyBicmVhazsKKwlkZWZhdWx0OiBkb25lPTE7CisJfQogICAgIH0gd2hpbGUgKCFkb25lKTsKICAgICBjc3AtLTsgICAvKiBvb3BzIG9uZSB0b28gbWFueSAqLwogICAgIG9yZ19laXAgPSBDUFVfUkVHKGVpcCk7CkBAIC0yMzgsMTI1ICsyMzgsMTI1IEBACiAgICAgc3dpdGNoICgqY3NwKSB7CiAKICAgICBjYXNlIDB4NmM6ICAgICAgICAgICAgICAgICAgICAvKiBpbnNiICovCi0gICAgICAgIC8qIE5PVEU6IEVTIGNhbid0IGJlIG92ZXJ3cml0dGVuOyBwcmVmaXhlcyA2Niw2NyBzaG91bGQgdXNlIGVzaSxlZGksZWN4Ci0gICAgICAgICAqIGJ1dCBpcyBhbnlvbmUgdXNpbmcgZXh0ZW5kZWQgcmVncyBpbiByZWFsIG1vZGU/ICovCi0gICAgICAgIC8qIFdBUk5JTkc6IG5vIHRlc3QgZm9yIERJIHdyYXBwaW5nISAqLwotICAgICAgICBDUFVfUkVHX0xXKGVkaSkgKz0gcG9ydF9yZXBfaW5iKENQVV9SRUdfTFcoZWR4KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VHX0FEUigoQ0FSRDggKiksZXMsZGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVV9SRUdfTFcoZWZsYWdzKSZERiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNfcmVwPyBMV0VDWDoxKSk7Ci0gICAgICAgIGlmIChpc19yZXApIExXRUNYID0gMDsKLSAgICAgICAgQ1BVX1JFR19MVyhlaXApKys7Ci0gICAgICAgIGJyZWFrOworCS8qIE5PVEU6IEVTIGNhbid0IGJlIG92ZXJ3cml0dGVuOyBwcmVmaXhlcyA2Niw2NyBzaG91bGQgdXNlIGVzaSxlZGksZWN4CisJICogYnV0IGlzIGFueW9uZSB1c2luZyBleHRlbmRlZCByZWdzIGluIHJlYWwgbW9kZT8gKi8KKwkvKiBXQVJOSU5HOiBubyB0ZXN0IGZvciBESSB3cmFwcGluZyEgKi8KKwlDUFVfUkVHX0xXKGVkaSkgKz0gcG9ydF9yZXBfaW5iKENQVV9SRUdfTFcoZWR4KSwKKwkJCQkJU0VHX0FEUigoQ0FSRDggKiksZXMsZGkpLAorCQkJCQlDUFVfUkVHX0xXKGVmbGFncykmREYsCisJCQkJCShpc19yZXA/IExXRUNYOjEpKTsKKwlpZiAoaXNfcmVwKSBMV0VDWCA9IDA7CisJQ1BVX1JFR19MVyhlaXApKys7CisJYnJlYWs7CiAKICAgICBjYXNlIDB4NmQ6ICAgICAgICAgICAgICAgICAgLyogKHJlcCkgaW5zdyAvIGluc2QgKi8KLSAgICAgICAgLyogTk9URTogRVMgY2FuJ3QgYmUgb3ZlcndyaXR0ZW4gKi8KLSAgICAgICAgLyogV0FSTklORzogbm8gdGVzdCBmb3IgX0RJIHdyYXBwaW5nISAqLwotICAgICAgICBpZiAocHJlZml4NjYpIHsKLSAgICAgICAgICAgIENQVV9SRUdfTFcoZWRpKSArPSBwb3J0X3JlcF9pbmwoQ1BVX1JFR19MVyhlZHgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUdfQURSKChDQVJEMzIgKiksZXMsZGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFVfUkVHX0xXKGVmbGFncykmREYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc19yZXA/IExXRUNYOjEpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENQVV9SRUdfTFcoZWRpKSArPSBwb3J0X3JlcF9pbncoQ1BVX1JFR19MVyhlZHgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VHX0FEUigoQ0FSRDE2ICopLGVzLGRpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVX1JFR19MVyhlZmxhZ3MpJkRGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNfcmVwPyBMV0VDWDoxKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzX3JlcCkgTFdFQ1ggPSAwOwotICAgICAgICBDUFVfUkVHX0xXKGVpcCkrKzsKLSAgICAgICAgYnJlYWs7CisJLyogTk9URTogRVMgY2FuJ3QgYmUgb3ZlcndyaXR0ZW4gKi8KKwkvKiBXQVJOSU5HOiBubyB0ZXN0IGZvciBfREkgd3JhcHBpbmchICovCisJaWYgKHByZWZpeDY2KSB7CisJICAgIENQVV9SRUdfTFcoZWRpKSArPSBwb3J0X3JlcF9pbmwoQ1BVX1JFR19MVyhlZHgpLAorCQkJCQkgICAgU0VHX0FEUigoQ0FSRDMyICopLGVzLGRpKSwKKwkJCQkJICAgIENQVV9SRUdfTFcoZWZsYWdzKSZERiwKKwkJCQkJICAgIChpc19yZXA/IExXRUNYOjEpKTsKKwl9CisJZWxzZSB7CisJICAgIENQVV9SRUdfTFcoZWRpKSArPSBwb3J0X3JlcF9pbncoQ1BVX1JFR19MVyhlZHgpLAorCQkJCQkgICAgU0VHX0FEUigoQ0FSRDE2ICopLGVzLGRpKSwKKwkJCQkJICAgIENQVV9SRUdfTFcoZWZsYWdzKSZERiwKKwkJCQkJICAgIChpc19yZXA/IExXRUNYOjEpKTsKKwl9CisJaWYgKGlzX3JlcCkgTFdFQ1ggPSAwOworCUNQVV9SRUdfTFcoZWlwKSsrOworCWJyZWFrOwogCiAgICAgY2FzZSAweDZlOiAgICAgICAgICAgICAgICAgIC8qIChyZXApIG91dHNiICovCi0gICAgICAgIGlmIChwcmVmX3NlZyA8IDApIHByZWZfc2VnID0gQ1BVX1JFR19MVyhkcyk7Ci0gICAgICAgIC8qIFdBUk5JTkc6IG5vIHRlc3QgZm9yIF9TSSB3cmFwcGluZyEgKi8KLSAgICAgICAgQ1BVX1JFR19MVyhlc2kpICs9IHBvcnRfcmVwX291dGIoQ1BVX1JFR19MVyhlZHgpLChDQVJEOCopTElOX1BSRUZfU0ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVV9SRUdfTFcoZWZsYWdzKSZERiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzX3JlcD8gTFdFQ1g6MSkpOwotICAgICAgICBpZiAoaXNfcmVwKSBMV0VDWCA9IDA7Ci0gICAgICAgIENQVV9SRUdfTFcoZWlwKSsrOwotICAgICAgICBicmVhazsKKwlpZiAocHJlZl9zZWcgPCAwKSBwcmVmX3NlZyA9IENQVV9SRUdfTFcoZHMpOworCS8qIFdBUk5JTkc6IG5vIHRlc3QgZm9yIF9TSSB3cmFwcGluZyEgKi8KKwlDUFVfUkVHX0xXKGVzaSkgKz0gcG9ydF9yZXBfb3V0YihDUFVfUkVHX0xXKGVkeCksKENBUkQ4KilMSU5fUFJFRl9TSSwKKwkJCQkJIENQVV9SRUdfTFcoZWZsYWdzKSZERiwKKwkJCQkJIChpc19yZXA/IExXRUNYOjEpKTsKKwlpZiAoaXNfcmVwKSBMV0VDWCA9IDA7CisJQ1BVX1JFR19MVyhlaXApKys7CisJYnJlYWs7CiAKICAgICBjYXNlIDB4NmY6ICAgICAgICAgICAgICAgICAgLyogKHJlcCkgb3V0c3cgLyBvdXRzZCAqLwotICAgICAgICBpZiAocHJlZl9zZWcgPCAwKSBwcmVmX3NlZyA9IENQVV9SRUdfTFcoZHMpOwotICAgICAgICAvKiBXQVJOSU5HOiBubyB0ZXN0IGZvciBfU0kgd3JhcHBpbmchICovCi0gICAgICAgIGlmIChwcmVmaXg2NikgewotICAgICAgICAgICAgQ1BVX1JFR19MVyhlc2kpICs9IHBvcnRfcmVwX291dGwoQ1BVX1JFR19MVyhlZHgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENBUkQzMiAqKUxJTl9QUkVGX1NJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVX1JFR19MVyhlZmxhZ3MpJkRGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzX3JlcD8gTFdFQ1g6MSkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ1BVX1JFR19MVyhlc2kpICs9IHBvcnRfcmVwX291dHcoQ1BVX1JFR19MVyhlZHgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENBUkQxNiAqKUxJTl9QUkVGX1NJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVX1JFR19MVyhlZmxhZ3MpJkRGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlzX3JlcD8gTFdFQ1g6MSkpOwotICAgICAgICB9IAotICAgICAgICBpZiAoaXNfcmVwKSBMV0VDWCA9IDA7Ci0gICAgICAgIENQVV9SRUdfTFcoZWlwKSsrOwotICAgICAgICBicmVhazsKKwlpZiAocHJlZl9zZWcgPCAwKSBwcmVmX3NlZyA9IENQVV9SRUdfTFcoZHMpOworCS8qIFdBUk5JTkc6IG5vIHRlc3QgZm9yIF9TSSB3cmFwcGluZyEgKi8KKwlpZiAocHJlZml4NjYpIHsKKwkgICAgQ1BVX1JFR19MVyhlc2kpICs9IHBvcnRfcmVwX291dGwoQ1BVX1JFR19MVyhlZHgpLAorCQkJCQkgICAgIChDQVJEMzIgKilMSU5fUFJFRl9TSSwKKwkJCQkJICAgICBDUFVfUkVHX0xXKGVmbGFncykmREYsCisJCQkJCSAgICAgKGlzX3JlcD8gTFdFQ1g6MSkpOworCX0KKwllbHNlIHsKKwkgICAgQ1BVX1JFR19MVyhlc2kpICs9IHBvcnRfcmVwX291dHcoQ1BVX1JFR19MVyhlZHgpLAorCQkJCQkgICAgIChDQVJEMTYgKilMSU5fUFJFRl9TSSwKKwkJCQkJICAgICBDUFVfUkVHX0xXKGVmbGFncykmREYsCisJCQkJCSAgICAgKGlzX3JlcD8gTFdFQ1g6MSkpOworCX0KKwlpZiAoaXNfcmVwKSBMV0VDWCA9IDA7CisJQ1BVX1JFR19MVyhlaXApKys7CisJYnJlYWs7CiAKICAgICBjYXNlIDB4ZTU6ICAgICAgICAgICAgICAgICAgLyogaW53IHh4LCBpbmwgeHggKi8KLSAgICAgICAgaWYgKHByZWZpeDY2KSBDUFVfUkVHKGVheCkgPSBQLmlubCgoaW50KSBjc3BbMV0pOwotICAgICAgICBlbHNlIENQVV9SRUdfTFcoZWF4KSA9IFAuaW53KChpbnQpIGNzcFsxXSk7ICAKLSAgICAgICAgQ1BVX1JFR19MVyhlaXApICs9IDI7Ci0gICAgICAgIGJyZWFrOworCWlmIChwcmVmaXg2NikgQ1BVX1JFRyhlYXgpID0gUC5pbmwoKGludCkgY3NwWzFdKTsKKwllbHNlIENQVV9SRUdfTFcoZWF4KSA9IFAuaW53KChpbnQpIGNzcFsxXSk7CisJQ1BVX1JFR19MVyhlaXApICs9IDI7CisJYnJlYWs7CiAgICAgY2FzZSAweGU0OiAgICAgICAgICAgICAgICAgIC8qIGluYiB4eCAqLwotICAgICAgICBDUFVfUkVHX0xXKGVheCkgJj0gfihDQVJEMzIpMHhmZjsKLSAgICAgICAgQ1BVX1JFR19MQihheCkgfD0gUC5pbmIoKGludCkgY3NwWzFdKTsKLSAgICAgICAgQ1BVX1JFR19MVyhlaXApICs9IDI7Ci0gICAgICAgIGJyZWFrOworCUNQVV9SRUdfTFcoZWF4KSAmPSB+KENBUkQzMikweGZmOworCUNQVV9SRUdfTEIoYXgpIHw9IFAuaW5iKChpbnQpIGNzcFsxXSk7CisJQ1BVX1JFR19MVyhlaXApICs9IDI7CisJYnJlYWs7CiAgICAgY2FzZSAweGVkOiAgICAgICAgICAgICAgICAgIC8qIGludyBkeCwgaW5sIGR4ICovCi0gICAgICAgIGlmIChwcmVmaXg2NikgQ1BVX1JFRyhlYXgpID0gUC5pbmwoQ1BVX1JFR19MVyhlZHgpKTsgCi0gICAgICAgIGVsc2UgQ1BVX1JFR19MVyhlYXgpID0gUC5pbncoQ1BVX1JFR19MVyhlZHgpKTsKLSAgICAgICAgQ1BVX1JFR19MVyhlaXApICs9IDE7Ci0gICAgICAgIGJyZWFrOworCWlmIChwcmVmaXg2NikgQ1BVX1JFRyhlYXgpID0gUC5pbmwoQ1BVX1JFR19MVyhlZHgpKTsKKwllbHNlIENQVV9SRUdfTFcoZWF4KSA9IFAuaW53KENQVV9SRUdfTFcoZWR4KSk7CisJQ1BVX1JFR19MVyhlaXApICs9IDE7CisJYnJlYWs7CiAgICAgY2FzZSAweGVjOiAgICAgICAgICAgICAgICAgIC8qIGluYiBkeCAqLwotICAgICAgICBDUFVfUkVHX0xXKGVheCkgJj0gfihDQVJEMzIpMHhmZjsKLSAgICAgICAgQ1BVX1JFR19MQihheCkgfD0gUC5pbmIoQ1BVX1JFR19MVyhlZHgpKTsKLSAgICAgICAgQ1BVX1JFR19MVyhlaXApICs9IDE7Ci0gICAgICAgIGJyZWFrOworCUNQVV9SRUdfTFcoZWF4KSAmPSB+KENBUkQzMikweGZmOworCUNQVV9SRUdfTEIoYXgpIHw9IFAuaW5iKENQVV9SRUdfTFcoZWR4KSk7CisJQ1BVX1JFR19MVyhlaXApICs9IDE7CisJYnJlYWs7CiAKICAgICBjYXNlIDB4ZTc6ICAgICAgICAgICAgICAgICAgLyogb3V0dyB4eCAqLwotICAgICAgICBpZiAocHJlZml4NjYpIFAub3V0bCgoaW50KWNzcFsxXSwgQ1BVX1JFRyhlYXgpKTsKLSAgICAgICAgZWxzZSBQLm91dHcoKGludCljc3BbMV0sIENQVV9SRUdfTFcoZWF4KSk7Ci0gICAgICAgIENQVV9SRUdfTFcoZWlwKSArPSAyOwotICAgICAgICBicmVhazsKKwlpZiAocHJlZml4NjYpIFAub3V0bCgoaW50KWNzcFsxXSwgQ1BVX1JFRyhlYXgpKTsKKwllbHNlIFAub3V0dygoaW50KWNzcFsxXSwgQ1BVX1JFR19MVyhlYXgpKTsKKwlDUFVfUkVHX0xXKGVpcCkgKz0gMjsKKwlicmVhazsKICAgICBjYXNlIDB4ZTY6ICAgICAgICAgICAgICAgICAgLyogb3V0YiB4eCAqLwotICAgICAgICBQLm91dGIoKGludCkgY3NwWzFdLCBDUFVfUkVHX0xCKGF4KSk7Ci0gICAgICAgIENQVV9SRUdfTFcoZWlwKSArPSAyOwotICAgICAgICBicmVhazsKKwlQLm91dGIoKGludCkgY3NwWzFdLCBDUFVfUkVHX0xCKGF4KSk7CisJQ1BVX1JFR19MVyhlaXApICs9IDI7CisJYnJlYWs7CiAgICAgY2FzZSAweGVmOiAgICAgICAgICAgICAgICAgIC8qIG91dHcgZHggKi8KLSAgICAgICAgaWYgKHByZWZpeDY2KSBQLm91dGwoQ1BVX1JFR19MVyhlZHgpLCBDUFVfUkVHKGVheCkpOwotICAgICAgICBlbHNlIFAub3V0dyhDUFVfUkVHX0xXKGVkeCksIENQVV9SRUdfTFcoZWF4KSk7Ci0gICAgICAgIENQVV9SRUdfTFcoZWlwKSArPSAxOwotICAgICAgICBicmVhazsKKwlpZiAocHJlZml4NjYpIFAub3V0bChDUFVfUkVHX0xXKGVkeCksIENQVV9SRUcoZWF4KSk7CisJZWxzZSBQLm91dHcoQ1BVX1JFR19MVyhlZHgpLCBDUFVfUkVHX0xXKGVheCkpOworCUNQVV9SRUdfTFcoZWlwKSArPSAxOworCWJyZWFrOwogICAgIGNhc2UgMHhlZTogICAgICAgICAgICAgICAgICAvKiBvdXRiIGR4ICovCi0gICAgICAgIFAub3V0YihDUFVfUkVHX0xXKGVkeCksIENQVV9SRUdfTEIoYXgpKTsKLSAgICAgICAgQ1BVX1JFR19MVyhlaXApICs9IDE7Ci0gICAgICAgIGJyZWFrOworCVAub3V0YihDUFVfUkVHX0xXKGVkeCksIENQVV9SRUdfTEIoYXgpKTsKKwlDUFVfUkVHX0xXKGVpcCkgKz0gMTsKKwlicmVhazsKIAogICAgIGNhc2UgMHhmNDoKICNpZmRlZiBWODZCSU9TX0RFQlVHCi0gICAgICAgIHByaW50ZigiaGx0IGF0ICVwXG4iLCBsaW5hKTsKKwlwcmludGYoImhsdCBhdCAlcFxuIiwgbGluYSk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAKLSAgICBjYXNlIDB4MGY6IAotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQ1BVIDB4MGYgVHJhcCBhdCBlaXA9MHglbHhcbiIsQ1BVX1JFRyhlaXApKTsKLSAgICAgICAgZ290byBvcDBmZXJyOyAKLSAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDBmOgorCWZwcmludGYoc3RkZXJyLCJDUFUgMHgwZiBUcmFwIGF0IGVpcD0weCVseFxuIixDUFVfUkVHKGVpcCkpOworCWdvdG8gb3AwZmVycjsKKwlicmVhazsKIAogICAgIGNhc2UgMHhmMDogICAgICAgICAgICAgICAgICAvKiBsb2NrICovCiAgICAgZGVmYXVsdDoKLSAgICAgICAgZnByaW50ZihzdGRlcnIsInVua25vd24gcmVhc29uIGZvciBleGNlcHRpb25cbiIpOwotICAgICAgICBkdW1wX3JlZ2lzdGVycygpOwotICAgICAgICBzdGFja190cmFjZSgpOworCWZwcmludGYoc3RkZXJyLCJ1bmtub3duIHJlYXNvbiBmb3IgZXhjZXB0aW9uXG4iKTsKKwlkdW1wX3JlZ2lzdGVycygpOworCXN0YWNrX3RyYWNlKCk7CiAgICAgb3AwZmVycjoKLSAgICAgICAgZHVtcF9jb2RlKCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCJjYW5ub3QgY29udGludWVcbiIpOwotICAgICAgICByZXR1cm4gMDsKKwlkdW1wX2NvZGUoKTsKKwlmcHJpbnRmKHN0ZGVyciwiY2Fubm90IGNvbnRpbnVlXG4iKTsKKwlyZXR1cm4gMDsKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIHN3aXRjaCgpICovCiAgICAgcmV0dXJuIDE7CiB9CkBAIC0zNjksMTYgKzM2OSwxNiBAQAogCiAgICAgaV9wcmludGYoImludCAweCV4IHJlY2VpdmVkOiBheDoweCVseCIsbnVtLENQVV9SRUcoZWF4KSk7CiAgICAgaWYgKENvbmZpZy5QcmludElwKQotICAgICAgICBpX3ByaW50ZigiIGF0OiAweCV4XG4iLGdldElQKCkpOworCWlfcHJpbnRmKCIgYXQ6IDB4JXhcbiIsZ2V0SVAoKSk7CiAgICAgZWxzZQotICAgICAgICBpX3ByaW50ZigiXG4iKTsKKwlpX3ByaW50ZigiXG4iKTsKIAogICAgIC8qIHRyeSB0byBydW4gYmlvcyBpbnRlcnJ1cHQgKi8KLSAgICAKKwogICAgIC8qIGlmIG5vdCBpbnN0YWxsZWQgZmFsbCBiYWNrICovCiAjZGVmaW5lIENPUFkoeCkgcmVncy4jI3ggPSBDUFVfUkVHKHgpCiAjZGVmaW5lIENPUFlfUih4KSBDUFVfUkVHKHgpID0gcmVncy4jI3gKLSAgICAKKwogICAgIENPUFkoZWF4KTsKICAgICBDT1BZKGVieCk7CiAgICAgQ09QWShlY3gpOwpAQCAtMzk3LDkgKzM5Nyw5IEBACiAgICAgQ09QWShlZmxhZ3MpOwogCiAgICAgaWYgKCEodmFsID0gaW50X2hhbmRsZXIobnVtLCZyZWdzKSkpCi0gICAgICAgIGlmICghKHZhbCA9IHJ1bl9iaW9zX2ludChudW0sJnJlZ3MpKSkKLSAgICAgICAgICAgIHJldHVybiB2YWw7Ci0gICAgICAgIAorCWlmICghKHZhbCA9IHJ1bl9iaW9zX2ludChudW0sJnJlZ3MpKSkKKwkgICAgcmV0dXJuIHZhbDsKKwogICAgIENPUFlfUihlYXgpOwogICAgIENPUFlfUihlYngpOwogICAgIENPUFlfUihlY3gpOwpAQCAtNDI5LDExICs0MjksMTEgQEAKICAgICB1bnNpZ25lZCBjaGFyICpsaW5hID0gU0VHX0FEUigodW5zaWduZWQgY2hhciAqKSwgY3MsIGlwKTsKIAogICAgIGZwcmludGYoc3RkZXJyLCJjb2RlIGF0IDB4JTguOHg6ICIsKENBUkQzMilsaW5hKTsKLSAgICBmb3IgKGk9MDsgaTwweDEwOyBpKyspIAotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiJTIuMnggIiwqKGxpbmEgKyBpKSk7CisgICAgZm9yIChpPTA7IGk8MHgxMDsgaSsrKQorCWZwcmludGYoc3RkZXJyLCIlMi4yeCAiLCoobGluYSArIGkpKTsKICAgICBmcHJpbnRmKHN0ZGVyciwiXG4gICAgICAgICAgICAgICAgICAgICIpOwotICAgIGZvciAoOyBpPDB4MjA7IGkrKykgCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCIlMi4yeCAiLCoobGluYSArIGkpKTsKKyAgICBmb3IgKDsgaTwweDIwOyBpKyspCisJZnByaW50ZihzdGRlcnIsIiUyLjJ4ICIsKihsaW5hICsgaSkpOwogICAgIGZwcmludGYoc3RkZXJyLCJcbiIpOwogfQogCkBAIC00NjYsNDEgKzQ2Niw0MSBAQAogc3RhY2tfdHJhY2Uodm9pZCkKIHsKICAgICBpbnQgaTsKLSAgICB1bnNpZ25lZCBjaGFyICpzdGFjayA9IFNFR19BRFIoKHVuc2lnbmVkIGNoYXIgKiksIHNzLCBzcCk7ICAgIAorICAgIHVuc2lnbmVkIGNoYXIgKnN0YWNrID0gU0VHX0FEUigodW5zaWduZWQgY2hhciAqKSwgc3MsIHNwKTsKIAogICAgIGZwcmludGYoc3RkZXJyLCJzdGFjayBhdCAweCU4LjhseDpcbiIsKHVuc2lnbmVkIGxvbmcpc3RhY2spOwotICAgIGZvciAoaT0wOyBpIDwgMHgxMDsgaSsrKSAKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIiUyLjJ4ICIsKihzdGFjayArIGkpKTsKKyAgICBmb3IgKGk9MDsgaSA8IDB4MTA7IGkrKykKKwlmcHJpbnRmKHN0ZGVyciwiJTIuMnggIiwqKHN0YWNrICsgaSkpOwogICAgIGZwcmludGYoc3RkZXJyLCJcbiIpOwotICAgIAorCiB9CiAKIHN0YXRpYyBpbnQKLXZtODZfcmVwKHN0cnVjdCB2bTg2X3N0cnVjdCAqcHRyKSAKK3ZtODZfcmVwKHN0cnVjdCB2bTg2X3N0cnVjdCAqcHRyKQogewogCiAgICAgaW50IF9fcmVzOwogCiAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImludCAkMHg4MFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIDoiPWEiIChfX3Jlcyk6ImEiICgoaW50KTExMyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImIiICgoc3RydWN0IHZtODZfc3RydWN0ICopcHRyKSk7CisJCQkgOiI9YSIgKF9fcmVzKToiYSIgKChpbnQpMTEzKSwKKwkJCSAiYiIgKChzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgKilwdHIpKTsKIAotICAgICAgICAgICAgaWYgKChfX3JlcykgPCAwKSB7Ci0gICAgICAgICAgICAgICAgZXJybm8gPSAtX19yZXM7Ci0gICAgICAgICAgICAgICAgX19yZXM9LTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGVycm5vID0gMDsKLSAgICAgICAgICAgIHJldHVybiBfX3JlczsKKwkgICAgaWYgKChfX3JlcykgPCAwKSB7CisJCWVycm5vID0gLV9fcmVzOworCQlfX3Jlcz0tMTsKKwkgICAgfQorCSAgICBlbHNlIGVycm5vID0gMDsKKwkgICAgcmV0dXJuIF9fcmVzOwogfQogCiAjZGVmaW5lIHB1c2h3KGJhc2UsIHB0ciwgdmFsKSBcCiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggXAotICAgICAgICAiZGVjdyAldzBcblx0IiBcCi0gICAgICAgICJtb3ZiICVoMiwoJTEsJTApXG5cdCIgXAotICAgICAgICAiZGVjdyAldzBcblx0IiBcCi0gICAgICAgICJtb3ZiICViMiwoJTEsJTApIiBcCi0gICAgICAgIDogIj1yIiAocHRyKSBcCi0gICAgICAgIDogInIiIChiYXNlKSwgInEiICh2YWwpLCAiMCIgKHB0cikpCisJImRlY3cgJXcwXG5cdCIgXAorCSJtb3ZiICVoMiwoJTEsJTApXG5cdCIgXAorCSJkZWN3ICV3MFxuXHQiIFwKKwkibW92YiAlYjIsKCUxLCUwKSIgXAorCTogIj1yIiAocHRyKSBcCisJOiAiciIgKGJhc2UpLCAicSIgKHZhbCksICIwIiAocHRyKSkKIAogaW50CiBydW5fYmlvc19pbnQoaW50IG51bSwgc3RydWN0IHJlZ3M4NiAqcmVncykKQEAgLTUxNSwyNSArNTE1LDI1IEBACiAgICAgLyogY2hlY2sgaWYgYmlvcyB2ZWN0b3IgaXMgaW5pdGlhbGl6ZWQgKi8KICAgICBpZiAoKChDQVJEMTYqKTApWyhudW08PDEpKzFdID09IDB4MDAwMCkgeyAvKiBTWVNfQklPU19TRUcgPyovCiAjaWZkZWYgVjg2QklPU19ERUJVRwotICAgICAgICBpX3ByaW50ZigiY2FyZCBCSU9TIG5vdCBsb2FkZWRcbiIpOworCWlfcHJpbnRmKCJjYXJkIEJJT1Mgbm90IGxvYWRlZFxuIik7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgfQotICAgIAorCiAjaWZkZWYgVjg2QklPU19ERUJVRwogICAgIGlmIChmaXJzdHRpbWUpIHsKLSAgICAgICAgZHByaW50KDAsMHgzRDApOwotICAgICAgICBmaXJzdHRpbWUgPSAwOworCWRwcmludCgwLDB4M0QwKTsKKwlmaXJzdHRpbWUgPSAwOwogICAgIH0KICNlbmRpZgotICAgIAorCiAgICAgaV9wcmludGYoImNhbGxpbmcgY2FyZCBCSU9TIGF0OiAiKTsKICAgICBzc3AgPSAoQ0FSRDE2KikoQ1BVX1JFRyhzcyk8PDQpOwogICAgIHNwID0gKENBUkQzMikgQ1BVX1JFR19MVyhlc3ApOwogCiAgICAgZWZsYWdzID0gcmVncy0+ZWZsYWdzOwogICAgIGVmbGFncyA9ICgoZWZsYWdzICYgVklGX01BU0spICE9IDApCi0gICAgICAgID8gKGVmbGFncyB8IElGX01BU0spIDogKGVmbGFncyAmIH4oQ0FSRDMyKSBJRl9NQVNLKTsKKwk/IChlZmxhZ3MgfCBJRl9NQVNLKSA6IChlZmxhZ3MgJiB+KENBUkQzMikgSUZfTUFTSyk7CiAgICAgcHVzaHcoc3NwLCBzcCwgZWZsYWdzKTsKICAgICBwdXNodyhzc3AsIHNwLCByZWdzLT5jcyk7CiAgICAgcHVzaHcoc3NwLCBzcCwgKENBUkQxNilyZWdzLT5laXApOwpAQCAtNTQ1LDcgKzU0NSw3IEBACiAgICAgZHVtcF9jb2RlKCk7CiAjZW5kaWYKICAgICByZWdzLT5lZmxhZ3MgPSByZWdzLT5lZmxhZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgJiB+KFZJRl9NQVNLIHwgVEZfTUFTSyB8IElGX01BU0sgfCBOVF9NQVNLKTsKKwkJICAgICAgICYgfihWSUZfTUFTSyB8IFRGX01BU0sgfCBJRl9NQVNLIHwgTlRfTUFTSyk7CiAgICAgcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3Mvdjg2Ymlvcy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy92ODZiaW9zLmMKaW5kZXggN2EzZmIzNi4uMTAxYzFmMiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy92ODZiaW9zLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy92ODZiaW9zLmMKQEAgLTQ4LDEyICs0OCwxMiBAQAogI2RlZmluZSBCSU9TX1NUQVJUIDB4N0MwMCAgICAgICAgICAgIC8qIGRlZmF1bHQgQklPUyBlbnRyeSAqLwogI2RlZmluZSBCSU9TX01FTSAweDYwMAogCi0vL0NBUkQ4IGNvZGVbXSA9IHsgMHhiOCAsIDB4ZjAgLCAweGYwLCAweGY0IH07CisvKkNBUkQ4IGNvZGVbXSA9IHsgMHhiOCAsIDB4ZjAgLCAweGYwLCAweGY0IH07ICovCiAjZGVmaW5lIFZCX1goeCkgKFZfQklPUyA+PiB4KSAmIDB4RkYKIENBUkQ4IGNvZGVbXSA9IHsgNiwgMHg5YSwgMHgwMywgMHgwMCwgMHgwMCwgVkJfWCgxMiksIDB4ZjQgfTsKLS8vQ0FSRDggY29kZVtdID0geyAweDlhLCAweDAzLCAweDAwLCAweDAwLCBWQl9YKDEyKSwgMHhiOCwgMHgwMywgMHgwMCwKLS8vMHhjZCwgMHgxMCwgMHhmNCB9OwotLy9DQVJEOCBjb2RlW10gPSB7ICAweGI4ICwgMHhmMCAsIDB4ZjAgLDB4ZjQgfTsKKy8qQ0FSRDggY29kZVtdID0geyAweDlhLCAweDAzLCAweDAwLCAweDAwLCBWQl9YKDEyKSwgMHhiOCwgMHgwMywgMHgwMCwgKi8KKy8qMHhjZCwgMHgxMCwgMHhmNCB9OyAqLworLypDQVJEOCBjb2RlW10gPSB7ICAweGI4ICwgMHhmMCAsIDB4ZjAgLDB4ZjQgfTsgKi8KIAogaW50IGlvcGVybV9saXN0W0lPUEVSTV9CSVRTXSA9IHswLH07CiAKQEAgLTk3LDg3ICs5Nyw4NyBAQAogaW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCiB7CiAgICAgaW50IGM7Ci0gICAgCisKICAgICBDb25maWcuUHJpbnRQb3J0ID0gUFJJTlRfUE9SVDsKICAgICBDb25maWcuSW9TdGF0aXN0aWNzID0gSU9fU1RBVElTVElDUzsKICAgICBDb25maWcuUHJpbnRJcnEgPSBQUklOVF9JUlE7CiAgICAgQ29uZmlnLlByaW50UGNpID0gUFJJTlRfUENJOwotICAgIENvbmZpZy5TaG93QWxsRGV2ID0gU0hPV19BTExfREVWOyAgICAgICAgCi0gICAgQ29uZmlnLlByaW50SXAgPSBQUklOVF9JUDsgICAgICAgICAgIAotICAgIENvbmZpZy5TYXZlQmlvcyA9IFNBVkVfQklPUzsgICAgICAgICAgCi0gICAgQ29uZmlnLlRyYWNlID0gVFJBQ0U7ICAgICAgICAgICAgIAorICAgIENvbmZpZy5TaG93QWxsRGV2ID0gU0hPV19BTExfREVWOworICAgIENvbmZpZy5QcmludElwID0gUFJJTlRfSVA7CisgICAgQ29uZmlnLlNhdmVCaW9zID0gU0FWRV9CSU9TOworICAgIENvbmZpZy5UcmFjZSA9IFRSQUNFOwogICAgIENvbmZpZy5Db25maWdBY3RpdmVPbmx5ID0gQ09ORklHX0FDVElWRV9PTkxZOyAgLyogYm9vdCAqLwogICAgIENvbmZpZy5Db25maWdBY3RpdmVEZXZpY2UgPSBDT05GSUdfQUNUSVZFX0RFVklDRTsgLyogYm9vdCAqLwotICAgIENvbmZpZy5NYXBTeXNCaW9zID0gTUFQX1NZU19CSU9TOyAgICAgICAgCi0gICAgQ29uZmlnLlJlc29ydCA9IFJFU09SVDsgIC8qIGJvb3QgKi8gICAgICAgICAgCi0gICAgQ29uZmlnLkZpeFJvbSA9IEZJWF9ST007ICAgICAgICAgICAgCisgICAgQ29uZmlnLk1hcFN5c0Jpb3MgPSBNQVBfU1lTX0JJT1M7CisgICAgQ29uZmlnLlJlc29ydCA9IFJFU09SVDsgIC8qIGJvb3QgKi8KKyAgICBDb25maWcuRml4Um9tID0gRklYX1JPTTsKICAgICBDb25maWcuTm9Db25zb2xlID0gTk9fQ09OU09MRTsKICAgICBDb25maWcuQm9vdE9ubHkgPSBGQUxTRTsKICAgICBDb25maWcuVmVyYm9zZSA9IFZFUkJPU0U7Ci0gICAgCi0gICAgb3B0ZXJyID0gMDsgICAgCisKKyAgICBvcHRlcnIgPSAwOwogICAgIHdoaWxlICgoYyA9IGdldG9wdChhcmdjLGFyZ3YsInBzaWNhUFN0QWRicmZudjo/IikpICE9IEVPRikgewogICAgIHN3aXRjaChjKSB7CiAgICAgY2FzZSAncCc6Ci0gICAgICAgIENvbmZpZy5QcmludFBvcnQgPSBUUlVFOwotICAgICAgICBicmVhazsKKwlDb25maWcuUHJpbnRQb3J0ID0gVFJVRTsKKwlicmVhazsKICAgICBjYXNlICdzJzoKLSAgICAgICAgQ29uZmlnLklvU3RhdGlzdGljcyA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOworCUNvbmZpZy5Jb1N0YXRpc3RpY3MgPSBUUlVFOworCWJyZWFrOwogICAgIGNhc2UgJ2knOgotICAgICAgICBDb25maWcuUHJpbnRJcnEgPSBUUlVFOwotICAgICAgICBicmVhazsKKwlDb25maWcuUHJpbnRJcnEgPSBUUlVFOworCWJyZWFrOwogICAgIGNhc2UgJ2MnOgotICAgICAgICBDb25maWcuUHJpbnRQY2kgPSBUUlVFOwotICAgICAgICBicmVhazsKKwlDb25maWcuUHJpbnRQY2kgPSBUUlVFOworCWJyZWFrOwogICAgIGNhc2UgJ2EnOgotICAgICAgICBDb25maWcuU2hvd0FsbERldiA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOworCUNvbmZpZy5TaG93QWxsRGV2ID0gVFJVRTsKKwlicmVhazsKICAgICBjYXNlICdQJzoKLSAgICAgICAgQ29uZmlnLlByaW50SXAgPSBUUlVFOwotICAgICAgICBicmVhazsKKwlDb25maWcuUHJpbnRJcCA9IFRSVUU7CisJYnJlYWs7CiAgICAgY2FzZSAnUyc6Ci0gICAgICAgIENvbmZpZy5TYXZlQmlvcyA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOworCUNvbmZpZy5TYXZlQmlvcyA9IFRSVUU7CisJYnJlYWs7CiAgICAgY2FzZSAndCc6Ci0gICAgICAgIENvbmZpZy5UcmFjZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOworCUNvbmZpZy5UcmFjZSA9IFRSVUU7CisJYnJlYWs7CiAgICAgY2FzZSAnQSc6Ci0gICAgICAgIENvbmZpZy5Db25maWdBY3RpdmVPbmx5ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7CisJQ29uZmlnLkNvbmZpZ0FjdGl2ZU9ubHkgPSBUUlVFOworCWJyZWFrOwogICAgIGNhc2UgJ2QnOgotICAgICAgICBDb25maWcuQ29uZmlnQWN0aXZlRGV2aWNlID0gVFJVRTsKLSAgICAgICAgYnJlYWs7CisJQ29uZmlnLkNvbmZpZ0FjdGl2ZURldmljZSA9IFRSVUU7CisJYnJlYWs7CiAgICAgY2FzZSAnYic6Ci0gICAgICAgIENvbmZpZy5NYXBTeXNCaW9zID0gVFJVRTsKLSAgICAgICAgYnJlYWs7CisJQ29uZmlnLk1hcFN5c0Jpb3MgPSBUUlVFOworCWJyZWFrOwogICAgIGNhc2UgJ3InOgotICAgICAgICBDb25maWcuUmVzb3J0ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7CisJQ29uZmlnLlJlc29ydCA9IFRSVUU7CisJYnJlYWs7CiAgICAgY2FzZSAnZic6Ci0gICAgICAgIENvbmZpZy5GaXhSb20gPSBUUlVFOwotICAgICAgICBicmVhazsKKwlDb25maWcuRml4Um9tID0gVFJVRTsKKwlicmVhazsKICAgICBjYXNlICduJzoKLSAgICAgICAgQ29uZmlnLk5vQ29uc29sZSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOworCUNvbmZpZy5Ob0NvbnNvbGUgPSBUUlVFOworCWJyZWFrOwogICAgIGNhc2UgJ3YnOgotICAgICAgICBDb25maWcuVmVyYm9zZSA9IHN0cnRvbChvcHRhcmcsTlVMTCwwKTsKLSAgICAgICAgYnJlYWs7CisJQ29uZmlnLlZlcmJvc2UgPSBzdHJ0b2wob3B0YXJnLE5VTEwsMCk7CisJYnJlYWs7CiAgICAgY2FzZSAnPyc6Ci0gICAgICAgIHByaW50X3VzYWdlKCk7Ci0gICAgICAgIGJyZWFrOworCXByaW50X3VzYWdlKCk7CisJYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgfQogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgaWYgKCFtYXAoKSkKICAgICBleGl0KDEpOwotICAgIAorCiAgICAgaWYgKCFzZXR1cF9zeXN0ZW1fYmlvcygpKQogICAgIGV4aXQoMSk7Ci0gICAgCisKICAgICBpb3BsKDMpOwogCiAgICAgc2Nhbl9wY2koKTsKQEAgLTE4OCwyMyArMTg4LDIzIEBACiAgICAgc2F2ZV9wb3MxMDIgPSBpbmIoMHgxMDIpOwogCiAgICAgaWYgKENvbmZpZy5Cb290T25seSkgewotICAgIAorCiAgICAgaWYgKCFDdXJyZW50UGNpICYmICFDb25maWcuQ29uZmlnQWN0aXZlRGV2aWNlCi0gICAgICAgICYmICFDb25maWcuQ29uZmlnQWN0aXZlT25seSkgewotICAgICAgICBpb3BsKDApOwotICAgICAgICB1bm1hcCgpOwotICAgICAgICBleGl0ICgxKTsKKwkmJiAhQ29uZmlnLkNvbmZpZ0FjdGl2ZU9ubHkpIHsKKwlpb3BsKDApOworCXVubWFwKCk7CisJZXhpdCAoMSk7CiAgICAgfQogICAgIGNhbGxfYm9vdChOVUxMKTsKICAgICB9IGVsc2UgewogICAgIHVzaW5nX2hpc3RvcnkoKTsKICAgICB5eXBhcnNlKCk7CiAgICAgfQotICAgIAorCiAgICAgdW5tYXAoKTsKIAogICAgIHBjaVZpZGVvUmVzdG9yZSgpOwotICAgIAorCiAgICAgb3V0YigweDEwMiwgc2F2ZV9wb3MxMDIpOwogICAgIG91dGIoMHg0NmU4LCBzYXZlXzQ2ZTgpOwogICAgIG91dGIoMHgzQzMsIHNhdmVfdnNlKTsKQEAgLTIyMywxMzkgKzIyMywxMzkgQEAKIHsKICAgICBpbnQgQWN0aXZlX2lzX1BjaSA9IDA7CiAgICAgQ0FSRDMyIHZiaW9zX2Jhc2U7Ci0gICAgCisKICAgICBDdXJyZW50UGNpID0gUGNpTGlzdDsKICAgICBDb25zb2xlID0gb3Blbl9jb25zb2xlKCk7Ci0gICAgCisKICAgICBzZXRfaW9wZXJtKCk7CiAKLSAgICAKKwogICAgIHNpZ25hbCgyLHNpZ19oYW5kbGVyKTsKICAgICBzaWduYWwoMTEsc2lnX2hhbmRsZXIpOwotICAgIAorCiAgICAgLyogZGlzYWJsZSBwcmltYXJ5IGNhcmQgKi8KICAgICBwY2lWaWRlb1Jlc3RvcmUoKTsgLyogcmVzZXQgUENJIHN0YXRlIHRvIHNlZSBwcmltYXJ5IGNhcmQgKi8KICAgICBvdXRiKDB4M0MyLH4oQ0FSRDgpMHgwMyAmIHNhdmVfbXNyKTsKICAgICBvdXRiKDB4M0MzLH4oQ0FSRDgpMHgwMSAmIHNhdmVfdnNlKTsKICAgICBvdXRiKDB4NDZlOCwgfihDQVJEOCkweDA4ICYgc2F2ZV80NmU4KTsKICAgICBvdXRiKDB4MTAyLCB+KENBUkQ4KTB4MDEgJiBzYXZlX3BvczEwMik7Ci0gICAgCisKICAgICBwY2lWaWRlb0Rpc2FibGUoKTsKLSAgICAKKwogICAgIHdoaWxlIChDdXJyZW50UGNpKSB7CiAgICAgQ0FSRDE2IGF4OwotICAgIAorCiAgICAgaWYgKEN1cnJlbnRQY2ktPmFjdGl2ZSkgewotICAgICAgICBBY3RpdmVfaXNfUGNpID0gMTsKLSAgICAgICAgaWYgKCFDb25maWcuQ29uZmlnQWN0aXZlRGV2aWNlICYmICFkZXYpIHsKLSAgICAgICAgQ3VycmVudFBjaSA9IEN1cnJlbnRQY2ktPm5leHQ7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9CisJQWN0aXZlX2lzX1BjaSA9IDE7CisJaWYgKCFDb25maWcuQ29uZmlnQWN0aXZlRGV2aWNlICYmICFkZXYpIHsKKwlDdXJyZW50UGNpID0gQ3VycmVudFBjaS0+bmV4dDsKKwljb250aW51ZTsKKwl9CiAgICAgfSBlbHNlIGlmIChDb25maWcuQ29uZmlnQWN0aXZlT25seSAmJiAhZGV2KSB7Ci0gICAgICAgIEN1cnJlbnRQY2kgPSBDdXJyZW50UGNpLT5uZXh0OwotICAgICAgICBjb250aW51ZTsKKwlDdXJyZW50UGNpID0gQ3VycmVudFBjaS0+bmV4dDsKKwljb250aW51ZTsKICAgICB9CiAgICAgaWYgKGRldiAmJiAoKGRldi0+dHlwZSAhPSBQQ0kpCi0gICAgICAgICAgICB8fCAoZGV2LT50eXBlID09IFBDSQotICAgICAgICAgICAgJiYgKGRldi0+bG9jLnBjaS5kZXYgIT0gQ3VycmVudFBjaS0+ZGV2Ci0gICAgICAgICAgICAgICAgfHwgZGV2LT5sb2MucGNpLmJ1cyAhPSBDdXJyZW50UGNpLT5idXMKLSAgICAgICAgICAgICAgICB8fCBkZXYtPmxvYy5wY2kuZnVuYyAhPSBDdXJyZW50UGNpLT5mdW5jKSkpKSB7Ci0gICAgICAgIEN1cnJlbnRQY2kgPSBDdXJyZW50UGNpLT5uZXh0OwotICAgICAgICBjb250aW51ZTsKKwkgICAgfHwgKGRldi0+dHlwZSA9PSBQQ0kKKwkgICAgJiYgKGRldi0+bG9jLnBjaS5kZXYgIT0gQ3VycmVudFBjaS0+ZGV2CisJCXx8IGRldi0+bG9jLnBjaS5idXMgIT0gQ3VycmVudFBjaS0+YnVzCisJCXx8IGRldi0+bG9jLnBjaS5mdW5jICE9IEN1cnJlbnRQY2ktPmZ1bmMpKSkpIHsKKwlDdXJyZW50UGNpID0gQ3VycmVudFBjaS0+bmV4dDsKKwljb250aW51ZTsKICAgICB9Ci0gICAgCisKICAgICBFbmFibGVDdXJyZW50KCk7Ci0gICAgCisKICAgICBpZiAoQ3VycmVudFBjaS0+YWN0aXZlKSB7Ci0gICAgICAgIG91dGIoMHgxMDIsIHNhdmVfcG9zMTAyKTsKLSAgICAgICAgb3V0YigweDQ2ZTgsIHNhdmVfNDZlOCk7Ci0gICAgICAgIG91dGIoMHgzQzMsIHNhdmVfdnNlKTsKLSAgICAgICAgb3V0YigweDNDMiwgc2F2ZV9tc3IpOworCW91dGIoMHgxMDIsIHNhdmVfcG9zMTAyKTsKKwlvdXRiKDB4NDZlOCwgc2F2ZV80NmU4KTsKKwlvdXRiKDB4M0MzLCBzYXZlX3ZzZSk7CisJb3V0YigweDNDMiwgc2F2ZV9tc3IpOwogICAgIH0KLSAgICAKKwogICAgIC8qIGNsZWFyIGludGVycnVwdCB2ZWN0b3JzICovCiAjaWZkZWYgX19pYTMyX18KICAgICB2Ymlvc19iYXNlID0gQ3VycmVudFBjaS0+YWN0aXZlID8gc2V0dXBfcHJpbWFyeV9pbnRfdmVjdCgpCi0gICAgICAgIDogc2V0dXBfaW50X3ZlY3QoKTsKKwk6IHNldHVwX2ludF92ZWN0KCk7CiAjZWxzZQogICAgIHZiaW9zX2Jhc2UgPSBzZXR1cF9pbnRfdmVjdCgpOwogI2VuZGlmCiAgICAgYXggPSAoKENBUkQxNikoQ3VycmVudFBjaS0+YnVzKSA8PCA4KQotICAgICAgICB8IChDdXJyZW50UGNpLT5kZXYgPDwgMykgfCAoQ3VycmVudFBjaS0+ZnVuYyAmIDB4Nyk7CisJfCAoQ3VycmVudFBjaS0+ZGV2IDw8IDMpIHwgKEN1cnJlbnRQY2ktPmZ1bmMgJiAweDcpOwogICAgIGlmIChDb25maWcuVmVyYm9zZSA+IDEpIFBfcHJpbnRmKCJheDogMHgleFxuIixheCk7Ci0gICAgCisKICAgICBCb290QmlvcyA9IGZpbmRQY2lCeUlEcyhDdXJyZW50UGNpLT5idXMsQ3VycmVudFBjaS0+ZGV2LAotICAgICAgICAgICAgICAgICAgIEN1cnJlbnRQY2ktPmZ1bmMpOworCQkgICBDdXJyZW50UGNpLT5mdW5jKTsKICAgICBpZiAoISgobWFwUGNpUm9tKEJvb3RCaW9zKSAmJiBjaGtzdW0oKENBUkQ4KilWX0JJT1MpKQotICAgICAgICAgIHx8IChDdXJyZW50UGNpLT5hY3RpdmUgJiYgY29weV92Ymlvcyh2Ymlvc19iYXNlKSkpKSB7Ci0gICAgICAgIEN1cnJlbnRQY2kgPSBDdXJyZW50UGNpLT5uZXh0OwotICAgICAgICBjb250aW51ZTsKKwkgIHx8IChDdXJyZW50UGNpLT5hY3RpdmUgJiYgY29weV92Ymlvcyh2Ymlvc19iYXNlKSkpKSB7CisJQ3VycmVudFBjaSA9IEN1cnJlbnRQY2ktPm5leHQ7CisJY29udGludWU7CiAgICAgfQogICAgIGlmICghbWFwX3ZyYW0oKSkgewotICAgICAgICBDdXJyZW50UGNpID0gQ3VycmVudFBjaS0+bmV4dDsKLSAgICAgICAgY29udGludWU7CisJQ3VycmVudFBjaSA9IEN1cnJlbnRQY2ktPm5leHQ7CisJY29udGludWU7CiAgICAgfQogICAgIGlmIChDb25maWcuU2F2ZUJpb3MpIHNhdmVfYmlvc190b19maWxlKCk7CiAgICAgcHJpbnRmKCJpbml0aWFsaXppbmcgUENJIGJ1czogJWkgZGV2OiAlaSBmdW5jOiAlaVxuIixDdXJyZW50UGNpLT5idXMsCi0gICAgICAgICAgIEN1cnJlbnRQY2ktPmRldixDdXJyZW50UGNpLT5mdW5jKTsKKwkgICBDdXJyZW50UGNpLT5kZXYsQ3VycmVudFBjaS0+ZnVuYyk7CiAgICAgYm9vdEJJT1MoYXgpOwogICAgIHVubWFwX3ZyYW0oKTsKIAogICAgIGlmIChDdXJyZW50UGNpLT5hY3RpdmUpCi0gICAgICAgIGNsb3NlX2NvbnNvbGUoQ29uc29sZSk7CisJY2xvc2VfY29uc29sZShDb25zb2xlKTsKIAogICAgIGlmIChkZXYpIHJldHVybjsKLSAgICAKKwogICAgIEN1cnJlbnRQY2kgPSBDdXJyZW50UGNpLT5uZXh0OwogICAgIH0KLSAgICAKKwogICAgIC8qIFdlIGhhdmUgYW4gSVNBIGRldmljZSAtIGNvbmZpZ3VyZSBpZiByZXF1ZXN0ZWQgKi8KICAgICBpZiAoIUFjdGl2ZV9pc19QY2kgLyogbm8gaXNhIGNhcmQgaW4gc3lzdGVtISAqLwogICAgICYmICgoIWRldiAmJiAoQ29uZmlnLkNvbmZpZ0FjdGl2ZURldmljZSB8fCBDb25maWcuQ29uZmlnQWN0aXZlT25seSkpCi0gICAgICAgIHx8IChkZXYgJiYgZGV2LT50eXBlID09IElTQSkpKSB7CisJfHwgKGRldiAmJiBkZXYtPnR5cGUgPT0gSVNBKSkpIHsKIAogICAgIHBjaVZpZGVvRGlzYWJsZSgpOwogCiAgICAgaWYgKCFkZXYgfHwgZGV2LT50eXBlID09IElTQSkgewotICAgICAgICBvdXRiKDB4MTAyLCBzYXZlX3BvczEwMik7Ci0gICAgICAgIG91dGIoMHg0NmU4LCBzYXZlXzQ2ZTgpOwotICAgICAgICBvdXRiKDB4M0MzLCBzYXZlX3ZzZSk7Ci0gICAgICAgIG91dGIoMHgzQzIsIHNhdmVfbXNyKTsKLSAgICAgICAgCisJb3V0YigweDEwMiwgc2F2ZV9wb3MxMDIpOworCW91dGIoMHg0NmU4LCBzYXZlXzQ2ZTgpOworCW91dGIoMHgzQzMsIHNhdmVfdnNlKTsKKwlvdXRiKDB4M0MyLCBzYXZlX21zcik7CisKICNpZmRlZiBfX2lhMzJfXwotICAgICAgICB2Ymlvc19iYXNlID0gc2V0dXBfcHJpbWFyeV9pbnRfdmVjdCgpOworCXZiaW9zX2Jhc2UgPSBzZXR1cF9wcmltYXJ5X2ludF92ZWN0KCk7CiAjZWxzZQotICAgICAgICB2Ymlvc19iYXNlID0gc2V0dXBfaW50X3ZlY3QoKTsKKwl2Ymlvc19iYXNlID0gc2V0dXBfaW50X3ZlY3QoKTsKICNlbmRpZgotICAgICAgICBpZiAoY29weV92Ymlvcyh2Ymlvc19iYXNlKSkgewotICAgICAgICAKLSAgICAgICAgaWYgKENvbmZpZy5TYXZlQmlvcykgc2F2ZV9iaW9zX3RvX2ZpbGUoKTsKLSAgICAgICAgaWYgIChtYXBfdnJhbSgpKSB7Ci0gICAgICAgICAgICBwcmludGYoImluaXRpYWxpemluZyBJU0EgYnVzXG4iKTsKLSAgICAgICAgICAgIGJvb3RCSU9TKDApOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgdW5tYXBfdnJhbSgpOwotICAgICAgICBzbGVlcCgxKTsKLSAgICAgICAgY2xvc2VfY29uc29sZShDb25zb2xlKTsKKwlpZiAoY29weV92Ymlvcyh2Ymlvc19iYXNlKSkgeworCisJaWYgKENvbmZpZy5TYXZlQmlvcykgc2F2ZV9iaW9zX3RvX2ZpbGUoKTsKKwlpZiAgKG1hcF92cmFtKCkpIHsKKwkgICAgcHJpbnRmKCJpbml0aWFsaXppbmcgSVNBIGJ1c1xuIik7CisJICAgIGJvb3RCSU9TKDApOworCX0KKwl9CisKKwl1bm1hcF92cmFtKCk7CisJc2xlZXAoMSk7CisJY2xvc2VfY29uc29sZShDb25zb2xlKTsKICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKIH0KIAotaW50ICAKK2ludAogbWFwKHZvaWQpCiB7CiAgICAgdm9pZCogbWVtOwogICAgIG1lbSA9IG1tYXAoMCwgKHNpemVfdClTSVpFLAotICAgICAgICAgICAgICAgUFJPVF9FWEVDIHwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLSAgICAgICAgICAgICAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFIHwgTUFQX0FOT04sCi0gICAgICAgICAgICAgICAtMSwgMCApOyAKKwkgICAgICAgUFJPVF9FWEVDIHwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkgICAgICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwKKwkgICAgICAgLTEsIDAgKTsKICAgICBpZiAobWVtICE9IDApIHsKLSAgICAgICAgcGVycm9yKCJhbm9ueW1vdXMgbWFwIik7Ci0gICAgICAgIHJldHVybiAoMCk7CisJcGVycm9yKCJhbm9ueW1vdXMgbWFwIik7CisJcmV0dXJuICgwKTsKICAgICB9CiAgICAgbWVtc2V0KG1lbSwwLFNJWkUpOwogCkBAIC0zOTAsMzMgKzM5MCwzMyBAQAogICAgIGludCBtZW1fZmQ7CiAKICNpZmRlZiBfX2lhNjRfXwotICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JEV1IgfCBPX1NZTkMpKTwwKSAKKyAgICBpZiAoKG1lbV9mZCA9IG9wZW4oTUVNX0ZJTEUsT19SRFdSIHwgT19TWU5DKSk8MCkKICNlbHNlCi0gICAgaWYgKChtZW1fZmQgPSBvcGVuKE1FTV9GSUxFLE9fUkRXUikpPDApIAorICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JEV1IpKTwwKQogI2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgcGVycm9yKCJvcGVuaW5nIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gMDsKKwl7CisJcGVycm9yKCJvcGVuaW5nIG1lbW9yeSIpOworCXJldHVybiAwOwogICAgIH0KIAogI2lmZGVmIF9fYWxwaGFfXwogICAgICAgIGlmICghX2J1c19iYXNlKCkpIHNwYXJzZV9zaGlmdCA9IDc7IC8qIFVoLCBvaCwgSkVOU0VOLi4uICovCi0gICAgICAgICBpZiAoIV9idXNfYmFzZV9zcGFyc2UoKSkgc3BhcnNlX3NoaWZ0ID0gMDsKLSAgICAgICAgIGlmICgodnJhbV9tYXAgPSBtbWFwKDAsKHNpemVfdCkgKFZSQU1fU0laRSA8PCBzcGFyc2Vfc2hpZnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1NIQVJFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1fZmQsIChWUkFNX1NUQVJUIDw8IHNwYXJzZV9zaGlmdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IF9idXNfYmFzZV9zcGFyc2UoKSkpID09ICh2b2lkICopIC0xKQorCSBpZiAoIV9idXNfYmFzZV9zcGFyc2UoKSkgc3BhcnNlX3NoaWZ0ID0gMDsKKwkgaWYgKCh2cmFtX21hcCA9IG1tYXAoMCwoc2l6ZV90KSAoVlJBTV9TSVpFIDw8IHNwYXJzZV9zaGlmdCksCisJCQkJCQkgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKwkJCQkJCSBNQVBfU0hBUkVELAorCQkJCQkJIG1lbV9mZCwgKFZSQU1fU1RBUlQgPDwgc3BhcnNlX3NoaWZ0KQorCQkJCQkJIHwgX2J1c19iYXNlX3NwYXJzZSgpKSkgPT0gKHZvaWQgKikgLTEpCiAjZWxzZQogICAgICAgaWYgKG1tYXAoKHZvaWQgKikgVlJBTV9TVEFSVCwgKHNpemVfdCkgVlJBTV9TSVpFLAotICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfRVhFQyB8IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQgfCBNQVBfRklYRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWVtX2ZkLCBWUkFNX1NUQVJUKSA9PSAodm9pZCAqKSAtMSkgCisJCQkgUFJPVF9FWEVDIHwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCB8IE1BUF9GSVhFRCwKKwkJCSBtZW1fZmQsIFZSQU1fU1RBUlQpID09ICh2b2lkICopIC0xKQogI2VuZGlmCiAgICAgICB7Ci0gICAgICAgIHBlcnJvcigibW1hcCBlcnJvciBpbiBtYXBfaGFyZHdhcmVfcmFtICgxKSIpOwotICAgICAgICAgICAgY2xvc2UobWVtX2ZkKTsKLSAgICAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgICAgIH0KKwlwZXJyb3IoIm1tYXAgZXJyb3IgaW4gbWFwX2hhcmR3YXJlX3JhbSAoMSkiKTsKKwkgICAgY2xvc2UobWVtX2ZkKTsKKwkgICAgcmV0dXJuICgwKTsKKwl9CiAgICAgdnJhbV9tYXBwZWQgPSAxOwogICAgIGNsb3NlKG1lbV9mZCk7CiAgICAgcmV0dXJuICgxKTsKQEAgLTQyNiw3ICs0MjYsNyBAQAogdW5tYXBfdnJhbSh2b2lkKQogewogICAgIGlmICghdnJhbV9tYXBwZWQpIHJldHVybjsKLSAgICAKKwogICAgIG11bm1hcCgodm9pZCopVlJBTV9TVEFSVCxWUkFNX1NJWkUpOwogICAgIHZyYW1fbWFwcGVkID0gMDsKIH0KQEAgLTQzOSwzOSArNDM5LDM5IEBACiAgICAgaW50IHNpemU7CiAKICAgICBpZiAoKG1lbV9mZCA9IG9wZW4oTUVNX0ZJTEUsT19SRE9OTFkpKTwwKSB7Ci0gICAgICAgIHBlcnJvcigib3BlbmluZyBtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuICgwKTsKKwlwZXJyb3IoIm9wZW5pbmcgbWVtb3J5Iik7CisJcmV0dXJuICgwKTsKICAgICB9CiAKLSAgICBpZiAobHNlZWsobWVtX2ZkLChvZmZfdCkgdl9iYXNlLCBTRUVLX1NFVCkgIT0gKG9mZl90KSB2X2Jhc2UpIHsgCi0gICAgICAgICAgZnByaW50ZihzdGRlcnIsIkNhbm5vdCBsc2Vla1xuIik7Ci0gICAgICAgICAgZ290byBFcnJvcjsKKyAgICBpZiAobHNlZWsobWVtX2ZkLChvZmZfdCkgdl9iYXNlLCBTRUVLX1NFVCkgIT0gKG9mZl90KSB2X2Jhc2UpIHsKKwkgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgbHNlZWtcbiIpOworCSAgZ290byBFcnJvcjsKICAgICAgIH0KICAgICB0bXAgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYygzKTsKICAgICBpZiAocmVhZChtZW1fZmQsIChjaGFyICopdG1wLCAoc2l6ZV90KSAzKSAhPSAoc2l6ZV90KSAzKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwiQ2Fubm90IHJlYWRcbiIpOwotICAgICAgICBnb3RvIEVycm9yOworCSAgICBmcHJpbnRmKHN0ZGVyciwiQ2Fubm90IHJlYWRcbiIpOworCWdvdG8gRXJyb3I7CiAgICAgfQotICAgIGlmIChsc2VlayhtZW1fZmQsKG9mZl90KSB2X2Jhc2UsU0VFS19TRVQpICE9IChvZmZfdCkgdl9iYXNlKSAKLSAgICAgICAgZ290byBFcnJvcjsKKyAgICBpZiAobHNlZWsobWVtX2ZkLChvZmZfdCkgdl9iYXNlLFNFRUtfU0VUKSAhPSAob2ZmX3QpIHZfYmFzZSkKKwlnb3RvIEVycm9yOwogCiAgICAgaWYgKCp0bXAgIT0gMHg1NSB8fCAqKHRtcCsxKSAhPSAweEFBICkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwiTm8gYmlvcyBmb3VuZCBhdDogMHglbHhcbiIsdl9iYXNlKTsKLSAgICAgICAgZ290byBFcnJvcjsKKwlmcHJpbnRmKHN0ZGVyciwiTm8gYmlvcyBmb3VuZCBhdDogMHglbHhcbiIsdl9iYXNlKTsKKwlnb3RvIEVycm9yOwogICAgIH0KICNpZmRlZiBERUJVRwotICAgICAgICBkcHJpbnQoKHVuc2lnbmVkIGxvbmcpdG1wLDB4MTAwKTsKKwlkcHJpbnQoKHVuc2lnbmVkIGxvbmcpdG1wLDB4MTAwKTsKICNlbmRpZgogICAgIHNpemUgPSAqKHRtcCsyKSAqIDUxMjsKIAogICAgIGlmIChyZWFkKG1lbV9mZCwgKGNoYXIgKil2X2Jhc2UsIChzaXplX3QpIHNpemUpICE9IChzaXplX3QpIHNpemUpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgcmVhZFxuIik7Ci0gICAgICAgIGdvdG8gRXJyb3I7CisJICAgIGZwcmludGYoc3RkZXJyLCJDYW5ub3QgcmVhZFxuIik7CisJZ290byBFcnJvcjsKICAgICB9CiAgICAgZnJlZSh0bXApOwogICAgIGNsb3NlKG1lbV9mZCk7CiAgICAgaWYgKCFjaGtzdW0oKENBUkQ4Kil2X2Jhc2UpKQotICAgICAgICByZXR1cm4gKDApOworCXJldHVybiAoMCk7CiAKICAgICByZXR1cm4gKDEpOwogCkBAIC00ODgsMTQgKzQ4OCwxNCBAQAogICAgIGludCBtZW1fZmQ7CiAKICAgICBpZiAoKG1lbV9mZCA9IG9wZW4oTUVNX0ZJTEUsT19SRE9OTFkpKTwwKSB7Ci0gICAgICAgIHBlcnJvcigib3BlbmluZyBtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuICgwKTsKKwlwZXJyb3IoIm9wZW5pbmcgbWVtb3J5Iik7CisJcmV0dXJuICgwKTsKICAgICB9Ci0gIAotICAgIGlmIChsc2VlayhtZW1fZmQsKG9mZl90KSBTWVNfQklPUyxTRUVLX1NFVCkgIT0gKG9mZl90KSBTWVNfQklPUykgCi0gICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgaWYgKHJlYWQobWVtX2ZkLCAoY2hhciAqKVNZU19CSU9TLCAoc2l6ZV90KSAweEZGRkYpICE9IChzaXplX3QpIDB4RkZGRikgCi0gICAgICAgIGdvdG8gRXJyb3I7CisKKyAgICBpZiAobHNlZWsobWVtX2ZkLChvZmZfdCkgU1lTX0JJT1MsU0VFS19TRVQpICE9IChvZmZfdCkgU1lTX0JJT1MpCisJZ290byBFcnJvcjsKKyAgICBpZiAocmVhZChtZW1fZmQsIChjaGFyICopU1lTX0JJT1MsIChzaXplX3QpIDB4RkZGRikgIT0gKHNpemVfdCkgMHhGRkZGKQorCWdvdG8gRXJyb3I7CiAKICAgICBjbG9zZShtZW1fZmQpOwogICAgIHJldHVybiAoMSk7CkBAIC01MTIsMTUgKzUxMiwxNSBAQAogICAgIGludCBpOwogICAgIENBUkQ4IHZhbDsKICAgICBpbnQgc2l6ZSA9IGNvZGVbMF07Ci0gICAgCisKICAgICBmb3IgKCBpPTE7aTw9c2l6ZTtpKyspIHsKLSAgICAgICAgdmFsID0gY29kZVtpXTsKLSAgICAgICAgKnB0cisrID0gdmFsOworCXZhbCA9IGNvZGVbaV07CisJKnB0cisrID0gdmFsOwogICAgIH0KICAgICByZXR1cm47CiB9Ci0gICAgICAgIAotdm9pZCAKKwordm9pZAogZHByaW50KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKICAgICBpbnQgaSxqOwpAQCAtNTI5LDEzICs1MjksMTMgQEAKICAgICBmb3IgKGogPSAwOyBqIDwgKHNpemUgPj4gNCk7IGorKykgewogICAgIGNoYXIgKmQgPSBjOwogICAgIHByaW50ZigiXG4weCVseDogICIsKHVuc2lnbmVkIGxvbmcpYyk7Ci0gICAgZm9yIChpID0gMDsgaTwxNjsgaSsrKSAKLSAgICAgICAgcHJpbnRmKCIlMi4yeCAiLCh1bnNpZ25lZCBjaGFyKSAoKihjKyspKSk7CisgICAgZm9yIChpID0gMDsgaTwxNjsgaSsrKQorCXByaW50ZigiJTIuMnggIiwodW5zaWduZWQgY2hhcikgKCooYysrKSkpOwogICAgIGMgPSBkOwogICAgIGZvciAoaSA9IDA7IGk8MTY7IGkrKykgewotICAgICAgICBwcmludGYoIiVjIiwoKCgoQ0FSRDgpKCpjKSkgPiAzMikgJiYgKCgoQ0FSRDgpKCpjKSkgPCAxMjgpKSA/Ci0gICAgICAgICAgICh1bnNpZ25lZCBjaGFyKSAoKihjKSk6ICcuJyk7Ci0gICAgICAgIGMrKzsKKwlwcmludGYoIiVjIiwoKCgoQ0FSRDgpKCpjKSkgPiAzMikgJiYgKCgoQ0FSRDgpKCpjKSkgPCAxMjgpKSA/CisJICAgKHVuc2lnbmVkIGNoYXIpICgqKGMpKTogJy4nKTsKKwljKys7CiAgICAgfQogICAgIH0KICAgICBwcmludGYoIlxuIik7CkBAIC01NDgsMTYgKzU0OCwxNiBAQAogICAgIGludCBzaXplLCBjb3VudDsKICAgICBjaGFyIGZpbGVfbmFtZVsyNTZdOwogICAgIGludCBmZDsKLSAgICAKKwogICAgIHNwcmludGYoZmlsZV9uYW1lLCJiaW9zXyVpLmZpbCIsbnVtKTsKICAgICBpZiAoKGZkID0gIG9wZW4oZmlsZV9uYW1lLE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsMDA2NDQpKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICBzaXplID0gKCoodW5zaWduZWQgY2hhciopKFZfQklPUyArIDIpKSAqIDUxMjsKICNpZmRlZiBWODZCSU9TX0RFQlVHCiAgICAgZHByaW50KFZfQklPUywyMCk7CiAjZW5kaWYKICAgICBpZiAoKGNvdW50ID0gd3JpdGUoZmQsKHZvaWQgKikoVl9CSU9TKSxzaXplKSkgIT0gc2l6ZSkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsIm9ubHkgc2F2ZWQgJWkgb2YgJWkgYnl0ZXNcbiIsc2l6ZSxjb3VudCk7CisJZnByaW50ZihzdGRlcnIsIm9ubHkgc2F2ZWQgJWkgb2YgJWkgYnl0ZXNcbiIsc2l6ZSxjb3VudCk7CiAgICAgbnVtKys7CiB9CiAKQEAgLTYxMiwxNSArNjEyLDE1IEBACiAgICAgQ0FSRDMyIHZiYXNlOwogICAgIHZvaWQgKm1hcDsKIAotICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JEV1IpKTwwKSAKLSAgICAgICAgICAgIHsKKyAgICBpZiAoKG1lbV9mZCA9IG9wZW4oTUVNX0ZJTEUsT19SRFdSKSk8MCkKKwkgICAgewogICAgIHBlcnJvcigib3BlbmluZyBtZW1vcnkiKTsKICAgICByZXR1cm4gKDApOwogICAgIH0KLSAgCisKICAgICBpZiAoKG1hcCA9IG1tYXAoKHZvaWQgKikgMCwgKHNpemVfdCkgMHgyMDAwLAotICAgICAgICAgUFJPVF9FWEVDIHwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKLSAgICAgICAgIG1lbV9mZCwgMCkpID09ICh2b2lkICopLTEpICAgeworCSBQUk9UX0VYRUMgfCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAorCSBtZW1fZmQsIDApKSA9PSAodm9pZCAqKS0xKSAgIHsKICAgICBwZXJyb3IoIm1tYXAgZXJyb3IgaW4gbWFwX2hhcmR3YXJlX3JhbSAoMikiKTsKICAgICBjbG9zZShtZW1fZmQpOwogICAgIHJldHVybiAoMCk7CkBAIC02MzYsNyArNjM2LDcgQEAKICAgICBpZiAoIWJpb3NfdmFyKQogICAgIGJpb3NfdmFyID0gKGNoYXIgKiltYWxsb2MoQklPU19NRU0pOwogICAgIG1lbWNweShiaW9zX3ZhciwwLEJJT1NfTUVNKTsKLSAgICAKKwogICAgIHZiYXNlID0gKCooKENBUkQxNiopKDB4MTAgPDwgMikgKyAxKSkgPDwgNDsKICAgICBpZiAoQ29uZmlnLlZlcmJvc2UgPiAwKSBwcmludGYoInZiYXNlOiAweCV4XG4iLHZiYXNlKTsKICAgICByZXR1cm4gdmJhc2U7CkBAIC02NDksMTEgKzY0OSwxMSBAQAogICAgIGNvbnN0IENBUkQxNiBjcyA9IDB4MDsKICAgICBjb25zdCBDQVJEMTYgaXAgPSAweDA7CiAgICAgaW50IGk7Ci0gICAgCisKICAgICAvKiBsZXQgdGhlIGludCB2ZWN0cyBwb2ludCB0byB0aGUgU1lTX0JJT1Mgc2VnICovCiAgICAgZm9yIChpPTA7IGk8MHg4MDsgaSsrKSB7Ci0gICAgICAgICgoQ0FSRDE2KikwKVtpPDwxXSA9IGlwOwotICAgICAgICAoKENBUkQxNiopMClbKGk8PDEpKzFdID0gY3M7CisJKChDQVJEMTYqKTApW2k8PDFdID0gaXA7CisJKChDQVJEMTYqKTApWyhpPDwxKSsxXSA9IGNzOwogICAgIH0KICAgICAvKiB2aWRlbyBpbnRlcnJ1cHRzIGRlZmF1bHQgbG9jYXRpb24gKi8KICAgICAoKENBUkQxNiopMClbKDB4NDI8PDEpKzFdID0gMHhmMDAwOwpAQCAtNzA1LDQwICs3MDUsNDAgQEAKIHsKICAgICBjaGFyICpkYXRlID0gIjA2LzAxLzk5IjsKICAgICBjaGFyICplaXNhX2lkZW50ID0gIlBDSS9JU0EiOwotICAgIAorCiAgICAgaWYgKENvbmZpZy5NYXBTeXNCaW9zKSB7CiAKLSAgICAgICAgaWYgKCFjb3B5X3N5c19iaW9zKCkpIHJldHVybiAwOwotICAgICAgICByZXR1cm4gMTsKKwlpZiAoIWNvcHlfc3lzX2Jpb3MoKSkgcmV0dXJuIDA7CisJcmV0dXJuIDE7CiAKICAgICB9IGVsc2UgewogCi0vLyAgICBtZW1zZXQoKHZvaWQgKikweEYwMDAwLDB4ZjQsMHhmZmY3KTsKLSAgICAKLSAgICAgICAgLyoKLSAgICAgICAgICogd2UgdHJhcCB0aGUgImluZHVzdHJ5IHN0YW5kYXJkIGVudHJ5IHBvaW50cyIgdG8gdGhlIEJJT1MKLSAgICAgICAgICogYW5kIGFsbCBvdGhlciBsb2NhdGlvbnMgYnkgZmlsbGluZyB0aGVtIHdpdGggImhsdCIKLSAgICAgICAgICogVE9ETzogaW1wbGVtZW50IGhsdC1oYW5kbGVyIGZvciB0aGVzZQotICAgICAgICAgKi8KLSAgICAgICAgbWVtc2V0KCh2b2lkICopMHhGMDAwMCwweGY0LDB4MTAwMDApOwotICAgICAgICAKLSAgICAgICAgLyoKLSAgICAgICAgICogVE9ETzogd2Ugc2hvdWxkIGNvcHkgdGhlIGZkZCB0YWJsZSAoMHhmZWM1OS0weGZlYzViKQotICAgICAgICAgKiB0aGUgdmlkZW8gcGFyYW1ldGVyIHRhYmxlICgweGYwYWMtMHhmMGZiKQotICAgICAgICAgKiBhbmQgdGhlIGZvbnQgdGFibGVzICgweGZhNmUtMHhmZTZkKQotICAgICAgICAgKiBmcm9tIHRoZSBvcmlnaW5hbCBiaW9zIGhlcmUKLSAgICAgICAgICovCi0gICAgCi0gICAgICAgIC8qIHNldCBiaW9zIGRhdGUgKi8KLSAgICAgICAgc3RyY3B5KChjaGFyICopMHhGRkZGNSxkYXRlKTsKLSAgICAgICAgLyogc2V0IHVwIGVpc2EgaWRlbnQgc3RyaW5nICovCi0gICAgICAgIHN0cmNweSgoY2hhciAqKTB4RkZGRDksZWlzYV9pZGVudCk7Ci0gICAgICAgIC8qIHdyaXRlIHN5c3RlbSBtb2RlbCBpZCBmb3IgSUJNLUFUICovCi0gICAgICAgICgoY2hhciAqKTApWzB4RkZGRkVdID0gMHhmYzsKKy8qICAgIG1lbXNldCgodm9pZCAqKTB4RjAwMDAsMHhmNCwweGZmZjcpOyAqLwogCi0gICAgICAgIHJldHVybiAxOworCS8qCisJICogd2UgdHJhcCB0aGUgImluZHVzdHJ5IHN0YW5kYXJkIGVudHJ5IHBvaW50cyIgdG8gdGhlIEJJT1MKKwkgKiBhbmQgYWxsIG90aGVyIGxvY2F0aW9ucyBieSBmaWxsaW5nIHRoZW0gd2l0aCAiaGx0IgorCSAqIFRPRE86IGltcGxlbWVudCBobHQtaGFuZGxlciBmb3IgdGhlc2UKKwkgKi8KKwltZW1zZXQoKHZvaWQgKikweEYwMDAwLDB4ZjQsMHgxMDAwMCk7CisKKwkvKgorCSAqIFRPRE86IHdlIHNob3VsZCBjb3B5IHRoZSBmZGQgdGFibGUgKDB4ZmVjNTktMHhmZWM1YikKKwkgKiB0aGUgdmlkZW8gcGFyYW1ldGVyIHRhYmxlICgweGYwYWMtMHhmMGZiKQorCSAqIGFuZCB0aGUgZm9udCB0YWJsZXMgKDB4ZmE2ZS0weGZlNmQpCisJICogZnJvbSB0aGUgb3JpZ2luYWwgYmlvcyBoZXJlCisJICovCisKKwkvKiBzZXQgYmlvcyBkYXRlICovCisJc3RyY3B5KChjaGFyICopMHhGRkZGNSxkYXRlKTsKKwkvKiBzZXQgdXAgZWlzYSBpZGVudCBzdHJpbmcgKi8KKwlzdHJjcHkoKGNoYXIgKikweEZGRkQ5LGVpc2FfaWRlbnQpOworCS8qIHdyaXRlIHN5c3RlbSBtb2RlbCBpZCBmb3IgSUJNLUFUICovCisJKChjaGFyICopMClbMHhGRkZGRV0gPSAweGZjOworCisJcmV0dXJuIDE7CiAgICAgfQotICAgIAorCiB9CiAKIHN0YXRpYyB2b2lkCkBAIC03NDcsMjggKzc0NywyOCBAQAogICAgIGludCBtZW1fZmQ7CiAgICAgdm9pZCAqbWFwOwogICAgIG1lbVR5cGUgaTsKLSAgICAKKwogI2lmZGVmIF9faWE2NF9fCi0gICAgaWYgKChtZW1fZmQgPSBvcGVuKE1FTV9GSUxFLE9fUkRXUiB8IE9fU1lOQykpPDApIAorICAgIGlmICgobWVtX2ZkID0gb3BlbihNRU1fRklMRSxPX1JEV1IgfCBPX1NZTkMpKTwwKQogI2Vsc2UKLSAgICBpZiAoKG1lbV9mZCA9IG9wZW4oTUVNX0ZJTEUsT19SRFdSKSk8MCkgCisgICAgaWYgKChtZW1fZmQgPSBvcGVuKE1FTV9GSUxFLE9fUkRXUikpPDApCiAjZW5kaWYKLSAgICAgICAgICAgIHsKKwkgICAgewogICAgIHBlcnJvcigib3BlbmluZyBtZW1vcnkiKTsKICAgICByZXR1cm47CiAgICAgfQotICAKKwogICAgIGlmICgobWFwID0gbW1hcCgodm9pZCAqKSAwLCAoc2l6ZV90KSAweDIwMDAsCi0gICAgICAgICBQUk9UX0VYRUMgfCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELAotICAgICAgICAgbWVtX2ZkLCAwKSkgPT0gKHZvaWQgKiktMSkgICB7CisJIFBST1RfRVhFQyB8IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisJIG1lbV9mZCwgMCkpID09ICh2b2lkICopLTEpICAgewogICAgIHBlcnJvcigibW1hcCBlcnJvciBpbiBtYXBfaGFyZHdhcmVfcmFtICgzKSIpOwogICAgIGNsb3NlKG1lbV9mZCk7CiAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBCSU9TX01FTTsgaSsrKSB7Ci0gICAgaWYgKGJpb3NfdmFyW2ldICE9ICooQ0FSRDgqKWkpIAotICAgICAgICAqKChDQVJEOCopbWFwICsgaSkgPSAqKENBUkQ4KilpOworICAgIGlmIChiaW9zX3ZhcltpXSAhPSAqKENBUkQ4KilpKQorCSooKENBUkQ4KiltYXAgKyBpKSA9ICooQ0FSRDgqKWk7CiAgICAgfQogCiAgICAgbXVubWFwKG1hcCwweDIwMDApOwpAQCAtNzgyLDEwICs3ODIsMTAgQEAKICAgQ0FSRDggdmFsID0gMDsKICAgaW50IGk7CiAKLSAgc2l6ZSA9ICooc3RhcnQrMikgKiA1MTI7ICAKKyAgc2l6ZSA9ICooc3RhcnQrMikgKiA1MTI7CiAgIGZvciAoaSA9IDA7IGk8c2l6ZTsgaSsrKQogICAgIHZhbCArPSAqKHN0YXJ0ICsgaSk7Ci0gICAgCisKICAgaWYgKCF2YWwpCiAgICAgcmV0dXJuIDE7CiAKQEAgLTgwMCwxMCArODAwLDEwIEBACiAgICAgQ0FSRDggY29kZV9pbnRbXSA9IHsgMywgMHhjZCwgMHgwMCwgMHhmNCB9OwogCiAgICAgY29kZV9pbnRbMl0gPSAoQ0FSRDgpIG51bTsKLSAgICAKKwogICAgIGlmIChudW0gPT0gMHgxMCkKICAgICBpc1ZpZGVvID0gVFJVRTsKLSAgICAKKwogICAgIGlmICghc2V0dXBfc3lzdGVtX2Jpb3MoKSkKICAgICByZXR1cm47CiAKQEAgLTgxNSwxNiArODE1LDE2IEBACiAjZWxzZQogICAgIGlmICghKHZiaW9zX2Jhc2UgPSBzZXR1cF9pbnRfdmVjdCgpKSkKICNlbmRpZgotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogICAgIGlmICghY29weV92Ymlvcyh2Ymlvc19iYXNlKSkKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIW1hcF92cmFtKCkpCiAgICAgcmV0dXJuOwotICAgIAorCiAjaWZkZWYgVjg2QklPU19ERUJVRwotICAgICAgICBwcmludGYoInN0YXJ0aW5nIEJJT1NcbiIpOworCXByaW50Zigic3RhcnRpbmcgQklPU1xuIik7CiAjZW5kaWYKICAgICBsb2FkQ29kZVRvTWVtKCh1bnNpZ25lZCBjaGFyICopIEJJT1NfU1RBUlQsIGNvZGVfaW50KTsKICAgICBzZXR1cF9pbygpOwpAQCAtODM0LDEyICs4MzQsMTIgQEAKICAgICBkb194ODYoQklPU19TVEFSVCxSZWdzKTsKICAgICBzZXRfaGx0KEZBTFNFKTsKICAgICBwcmludF9yZWdzKFJlZ3MpOwotICAgIAorCiAjaWZkZWYgVjg2QklPU19ERUJVRwogICAgIHByaW50ZigiZG9uZVxuIik7CiAjZW5kaWYKIAotICAgIGlmICgoaXNWaWRlbyAmJiAoIUN1cnJlbnRQY2kgfHwgQ3VycmVudFBjaS0+YWN0aXZlKSkgfHwgIWlzVmlkZW8pIAorICAgIGlmICgoaXNWaWRlbyAmJiAoIUN1cnJlbnRQY2kgfHwgQ3VycmVudFBjaS0+YWN0aXZlKSkgfHwgIWlzVmlkZW8pCiAgICAgdXBkYXRlX2Jpb3NfdmFycygpOwogfQogCkBAIC04NjcsMTEgKzg2NywxMSBAQAogICAgIHByaW50ZigiYWRkcmVzcyBvdXQgb2YgcmFuZ2VcbiIpOwogICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBmb3IgKGk9MDsgaTwyMDsgaSsrKSB7CiAgICAgaWYgKGhsdHBbaV0uYWRkcmVzcyA9PSAwKSB7Ci0gICAgICAgIGhsdHBbaV0uYWRkcmVzcyA9ICh2b2lkKil2YWw7Ci0gICAgICAgIGJyZWFrOworCWhsdHBbaV0uYWRkcmVzcyA9ICh2b2lkKil2YWw7CisJYnJlYWs7CiAgICAgfQogICAgIH0KICAgICBpZiAoaSA9PSAyMCkgcHJpbnRmKCJubyBtb3JlIGhsdHBvaW50cyBhdmFpbGFibGVcbiIpOwpAQCAtODg0LDcgKzg4NCw3IEBACiAgICAgaW50IGk7CiAgICAgcHJpbnRmKCJjbGVhcmluZyBhbGwgaGx0cG9pbnRzXG4iKTsKICAgICBmb3IgKGk9MDsgaSA8MjA7IGkrKykKLSAgICAgICAgaGx0cFtpXS5hZGRyZXNzID0gTlVMTDsKKwlobHRwW2ldLmFkZHJlc3MgPSBOVUxMOwogICAgIH0gZWxzZSBpZiAodmFsID49IDAgJiYgIHZhbCA8MjApCiAgICAgaGx0cFt2YWxdLmFkZHJlc3MgPSBOVUxMOwogICAgIGVsc2UgcHJpbnRmKCJobHRwb2ludCAlaSBvdXQgb2YgcmFuZ2U6IHZhbGlkIHJhbmdlIDAtMTlcbiIsdmFsKTsKQEAgLTg5NCwyMiArODk0LDIyIEBACiBsaXN0X2hsdCgpCiB7CiAgICAgaW50IGk7Ci0gICAgZm9yIChpPTA7IGk8MjA7IGkrKykgCisgICAgZm9yIChpPTA7IGk8MjA7IGkrKykKICAgICBpZiAoaGx0cFtpXS5hZGRyZXNzKQotICAgICAgICBwcmludGYoImhsdHBvaW50WyVpXTogMHglbHhcbiIsaSwodW5zaWduZWQgbG9uZylobHRwW2ldLmFkZHJlc3MpOworCXByaW50ZigiaGx0cG9pbnRbJWldOiAweCVseFxuIixpLCh1bnNpZ25lZCBsb25nKWhsdHBbaV0uYWRkcmVzcyk7CiB9CiAKIHN0YXRpYyB2b2lkCiBzZXRfaGx0KEJvb2wgc2V0KQogewogICAgIGludCBpOwotICAgIGZvciAoaT0wOyBpPDIwOyBpKyspIAorICAgIGZvciAoaT0wOyBpPDIwOyBpKyspCiAgICAgaWYgKGhsdHBbaV0uYWRkcmVzcykgewotICAgICAgICBpZiAoc2V0KSB7Ci0gICAgICAgIGhsdHBbaV0ub3JndmFsID0gKihDQVJEOCopaGx0cFtpXS5hZGRyZXNzOwotICAgICAgICAqKENBUkQ4KilobHRwW2ldLmFkZHJlc3MgPSAweGY0OwotICAgICAgICB9IGVsc2UgCi0gICAgICAgICooQ0FSRDgqKWhsdHBbaV0uYWRkcmVzcyA9IGhsdHBbaV0ub3JndmFsOworCWlmIChzZXQpIHsKKwlobHRwW2ldLm9yZ3ZhbCA9ICooQ0FSRDgqKWhsdHBbaV0uYWRkcmVzczsKKwkqKENBUkQ4KilobHRwW2ldLmFkZHJlc3MgPSAweGY0OworCX0gZWxzZQorCSooQ0FSRDgqKWhsdHBbaV0uYWRkcmVzcyA9IGhsdHBbaV0ub3JndmFsOwogICAgIH0KIH0KIApAQCAtOTIyLDEyICs5MjIsMTIgQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCBJT1BFUk1fQklUUztpKyspCiAgICAgaWYgKGlvcGVybV9saXN0W2ldKSB7Ci0gICAgICAgIHN0YXJ0ID0gaTsKLSAgICAgICAgZm9yICg7aSA8IElPUEVSTV9CSVRTOyBpKyspIHsKLSAgICAgICAgaWYgKCFpb3Blcm1fbGlzdFtpXSkgewotICAgICAgICAgICAgaW9wZXJtKHN0YXJ0LGkgLSBzdGFydCwgMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9CisJc3RhcnQgPSBpOworCWZvciAoO2kgPCBJT1BFUk1fQklUUzsgaSsrKSB7CisJaWYgKCFpb3Blcm1fbGlzdFtpXSkgeworCSAgICBpb3Blcm0oc3RhcnQsaSAtIHN0YXJ0LCAxKTsKKwkgICAgYnJlYWs7CisJfQorCX0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL3Y4NmJpb3MuaCBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3Mvdjg2Ymlvcy5oCmluZGV4IDA2ZDBmOWYuLmE4ZjNmOGUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3Mvdjg2Ymlvcy5oCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3Mvdjg2Ymlvcy5oCkBAIC0zMSwxMSArMzEsMTEgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogCiAjZGVmaW5lIHBfcHJpbnRmKGYsYS4uLikgZG8ge2lmIChDb25maWcuUHJpbnRQb3J0KSBscHJpbnRmKGYsIyNhKTt9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgwKQorCQkJIHdoaWxlKDApCiAjZGVmaW5lIGlfcHJpbnRmKGYsYS4uLikgZG8gIHtpZiAoQ29uZmlnLlByaW50SXJxKSBscHJpbnRmKGYsIyNhKTt9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoMCkKKwkJCSAgd2hpbGUoMCkKICNkZWZpbmUgUF9wcmludGYoZixhLi4uKSBkbyB7aWYgKENvbmZpZy5QcmludFBjaSkgbHByaW50ZihmLCMjYSk7fSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKDApCisJCQkgIHdoaWxlKDApCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBDQVJEODsKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgQ0FSRDE2OwpAQCAtNjUsNyArNjUsNyBAQAogICAgIEJvb2wgTWFwU3lzQmlvczsKICAgICBCb29sIFJlc29ydDsKICAgICBCb29sIEZpeFJvbTsKLSAgICBCb29sIE5vQ29uc29sZTsgICAgICAgICAKKyAgICBCb29sIE5vQ29uc29sZTsKICAgICBCb29sIEJvb3RPbmx5OwogICAgIGludCAgVmVyYm9zZTsKIH07CkBAIC04MCwyMSArODAsMjEgQEAKIH07CiAKIHN0cnVjdCByZWdzODYgewotICAgICAgICBsb25nIGVieDsKLSAgICAgICAgbG9uZyBlY3g7Ci0gICAgICAgIGxvbmcgZWR4OwotICAgICAgICBsb25nIGVzaTsKLSAgICAgICAgbG9uZyBlZGk7Ci0gICAgICAgIGxvbmcgZWJwOwotICAgICAgICBsb25nIGVheDsKLSAgICAgICAgbG9uZyBlaXA7Ci0gICAgICAgIGxvbmcgZXNwOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBjczsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc3M7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IGVzOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBkczsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgZnM7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IGdzOworCWxvbmcgZWJ4OworCWxvbmcgZWN4OworCWxvbmcgZWR4OworCWxvbmcgZXNpOworCWxvbmcgZWRpOworCWxvbmcgZWJwOworCWxvbmcgZWF4OworCWxvbmcgZWlwOworCWxvbmcgZXNwOworCXVuc2lnbmVkIHNob3J0IGNzOworCXVuc2lnbmVkIHNob3J0IHNzOworCXVuc2lnbmVkIHNob3J0IGVzOworCXVuc2lnbmVkIHNob3J0IGRzOworCXVuc2lnbmVkIHNob3J0IGZzOworCXVuc2lnbmVkIHNob3J0IGdzOwogICAgIGxvbmcgZWZsYWdzOwogfTsKIApAQCAtMTI3LDkgKzEyNyw5IEBACiAgICAgdW5pb24gewogICAgICAgaW50IG5vbmU7CiAgICAgICBzdHJ1Y3QgcGNpIHsKLSAgICAgICAgaW50IGJ1czsKLSAgICAgICAgaW50IGRldjsKLSAgICAgICAgaW50IGZ1bmM7CisJaW50IGJ1czsKKwlpbnQgZGV2OworCWludCBmdW5jOwogICAgICAgfSBwY2k7CiAgICAgfSBsb2M7CiB9OwpAQCAtMjEyLDQgKzIxMiwzIEBACiAjZW5kaWYKIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MveDg2ZW11LmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy92ODZiaW9zL3g4NmVtdS5jCmluZGV4IDJjYzcyZGYuLmI1Yzk5ZDcgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3Y4NmJpb3MveDg2ZW11LmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMvdjg2Ymlvcy94ODZlbXUuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPC91c3IvaW5jbHVkZS91bmlzdGQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLS8vI2luY2x1ZGUgPHN5c2NhbGwtbGlzdC5oPgorLyojaW5jbHVkZSA8c3lzY2FsbC1saXN0Lmg+ICovCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTUwLDEwICs1MCwxMCBAQAogc3RydWN0IHBpbyBQOwogCiB2b2lkCi1zZXR1cF9pbyh2b2lkKSAKK3NldHVwX2lvKHZvaWQpCiB7CiAgICAgaWYgKCFDb25maWcuUHJpbnRQb3J0ICYmICFDb25maWcuSW9TdGF0aXN0aWNzKSB7Ci0gICAgCisKICNpZiBkZWZpbmVkIChfX2kzODZfXykKICAgICBQLmluYiA9ICh1OCgqKSh1MTYpKWluYjsKICAgICBQLmludyA9ICh1MTYoKikodTE2KSlpbnc7CkBAIC04NiwxOSArODYsMTkgQEAKIHg4NmVtdV9kb19pbnQoaW50IG51bSkKIHsKICAgICBzdHJ1Y3QgcmVnczg2IHJlZ3M7Ci0gICAgICAgIAorCiAgICAgaV9wcmludGYoImludCAweCV4IHJlY2VpdmVkOiBheDoweCV4IixudW0sQ1BVX1JFRyhBWCkpOwogICAgIGlmIChDb25maWcuUHJpbnRJcCkKLSAgICAgICAgaV9wcmludGYoIiBhdDogMHgleFxuIixnZXRJUCgpKTsKKwlpX3ByaW50ZigiIGF0OiAweCV4XG4iLGdldElQKCkpOwogICAgIGVsc2UKLSAgICAgICAgaV9wcmludGYoIlxuIik7Ci0gICAgCisJaV9wcmludGYoIlxuIik7CisKICAgICAvKiB0cnkgdG8gcnVuIGJpb3MgaW50ZXJydXB0ICovCi0gICAgCisKICAgICAvKiBpZiBub3QgaW5zdGFsbGVkIGZhbGwgYmFjayAqLwogI2RlZmluZSBDT1BZKHgseSkgcmVncy55ID0gTS54ODYueAogI2RlZmluZSBDT1BZX1IoeCx5KSBNLng4Ni54ID0gcmVncy55Ci0gICAgCisKICAgICBDT1BZKFJfRUFYLGVheCk7CiAgICAgQ09QWShSX0VCWCxlYngpOwogICAgIENPUFkoUl9FQ1gsZWN4KTsKQEAgLTExNywxMiArMTE3LDEyIEBACiAgICAgQ09QWShSX0VGTEcsZWZsYWdzKTsKIAogICAgIGlmICghKGludF9oYW5kbGVyKG51bSwmcmVncykpKSB7Ci0gICAgICAgIGlmICghcnVuX2Jpb3NfaW50KG51bSwmcmVncykpCi0gICAgICAgICAgICBnb3RvIHVua25vd25faW50OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm47CisJaWYgKCFydW5fYmlvc19pbnQobnVtLCZyZWdzKSkKKwkgICAgZ290byB1bmtub3duX2ludDsKKwllbHNlCisJICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBDT1BZX1IoUl9FQVgsZWF4KTsKICAgICBDT1BZX1IoUl9FQlgsZWJ4KTsKICAgICBDT1BZX1IoUl9FQ1gsZWN4KTsKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgIGZwcmludGYoc3RkZXJyLCJcblVua25vd24gdm04Nl9pbnQ6ICVYXG5cbiIsbnVtKTsKICAgICBYODZFTVVfaGFsdF9zeXMoKTsKICAgICByZXR1cm47Ci0gICAgCisKICN1bmRlZiBDT1BZCiAjdW5kZWYgQ09QWV9SCiB9CkBAIC0xNTksMTIgKzE1OSwxMiBAQAogICAgIFg4NkVNVV9pbnRyRnVuY3MgaW50RnVuY3NbMjU2XTsKIAogICAgIFg4NkVNVV9waW9GdW5jcyBwaW9GdW5jcyA9IHsKLSAgICAgICAgKHU4KCopKHUxNikpUC5pbmIsCi0gICAgICAgICh1MTYoKikodTE2KSlQLmludywKLSAgICAgICAgKHUzMigqKSh1MTYpKVAuaW5sLAotICAgICAgICAodm9pZCgqKSh1MTYsdTgpKVAub3V0YiwKLSAgICAgICAgKHZvaWQoKikodTE2LHUxNikpUC5vdXR3LAotICAgICAgICAodm9pZCgqKSh1MTYsdTMyKSlQLm91dGwKKwkodTgoKikodTE2KSlQLmluYiwKKwkodTE2KCopKHUxNikpUC5pbncsCisJKHUzMigqKSh1MTYpKVAuaW5sLAorCSh2b2lkKCopKHUxNix1OCkpUC5vdXRiLAorCSh2b2lkKCopKHUxNix1MTYpKVAub3V0dywKKwkodm9pZCgqKSh1MTYsdTMyKSlQLm91dGwKICAgICB9OwogI2lmZGVmIF9fYWxwaGFfXwogICAgIFg4NkVNVV9tZW1GdW5jcyBtZW1GdW5jcyA9IHsKQEAgLTE3OCwyOSArMTc4LDI5IEBACiAjZW5kaWYKICAgICBNLm1lbV9iYXNlID0gMDsKICAgICBNLm1lbV9zaXplID0gMTAyNCoxMDI0ICsgMTAyNDsKLSAgICAvLyAgTS54ODYuZGVidWcgPSBERUJVR19ESVNBU1NFTUJMRV9GIHwgREVCVUdfVFJBQ0VfRiB8IERFQlVHX0RFQ09ERV9GOwotICAgIC8vICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19ERUNPREVfRiB8ICBERUJVR19UUkFDRV9GOworICAgIC8qICBNLng4Ni5kZWJ1ZyA9IERFQlVHX0RJU0FTU0VNQkxFX0YgfCBERUJVR19UUkFDRV9GIHwgREVCVUdfREVDT0RFX0Y7ICovCisgICAgLyogIE0ueDg2LmRlYnVnIHw9IERFQlVHX0RFQ09ERV9GIHwgIERFQlVHX1RSQUNFX0Y7ICovCiAvKgogICogRm9yIHNpbmdsZSBzdGVwIHRyYWNpbmcgY29tcGlsZSB4ODZlbXUgd2l0aCBvcHRpb24gLURERUJVRwogICovCiAgICAgTS54ODYuZGVidWcgPSAwOwogICAgIGlmIChDb25maWcuUHJpbnRJcCkKLSAgICAgICAgTS54ODYuZGVidWcgPSBERUJVR19TQVZFX0NTX0lQOworCU0ueDg2LmRlYnVnID0gREVCVUdfU0FWRV9DU19JUDsKIAogICAgIGlmIChDb25maWcuVHJhY2UpCi0gICAgICAgIFg4NkVNVV90cmFjZV9vbigpOworCVg4NkVNVV90cmFjZV9vbigpOwogCiAgICAgWDg2RU1VX3NldHVwUGlvRnVuY3MoJnBpb0Z1bmNzKTsKICNpZmRlZiBfX2FscGhhX18KICAgICBYODZFTVVfc2V0dXBNZW1GdW5jcygmbWVtRnVuY3MpOwogI2VuZGlmCiAgICAgZm9yIChpPTA7aTwyNTY7aSsrKQotICAgICAgICBpbnRGdW5jc1tpXSA9IHg4NmVtdV9kb19pbnQ7CisJaW50RnVuY3NbaV0gPSB4ODZlbXVfZG9faW50OwogICAgIFg4NkVNVV9zZXR1cEludHJGdW5jcyhpbnRGdW5jcyk7CiAKICAgICBlaXAgPSBiaW9zX3N0YXJ0ICYgMHhGRkZGOwogICAgIGNzID0gKGJpb3Nfc3RhcnQgJiAweEZGMDAwMCkgPj4gNDsKLSAgICAKKwogICAgIENQVV9SRUcoRUFYKSA9IHJlZ3MtPmF4OwogICAgIENQVV9SRUcoRUJYKSA9IHJlZ3MtPmJ4OwogICAgIENQVV9SRUcoRUNYKSA9IHJlZ3MtPmN4OwpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgQ1BVX1JFRyhFREkpID0gcmVncy0+ZGk7CiAgICAgQ1BVX1JFRyhFQlApID0gMDsKICAgICBDUFVfUkVHKEVJUCkgPSBlaXA7Ci0gICAgQ1BVX1JFRyhDUykgPSBjczsgICAgICAgICAgICAgICAKKyAgICBDUFVfUkVHKENTKSA9IGNzOwogICAgIENQVV9SRUcoU1ApID0gMHgxMDA7CiAgICAgQ1BVX1JFRyhTUykgPSAweDMwOyAgICAgICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHBjIGJpb3Mgc3RhY2sgKi8KICAgICBDUFVfUkVHKEVTKSA9IHJlZ3MtPmVzOwpAQCAtMjUyLDE0ICsyNTIsMTQgQEAKIAogICAgIHNldHVwX3g4NmVtdShiaW9zX3N0YXJ0LHJlZ3MpOwogICAgIGlmIChzZXRqbXAoeDg2X2VzYykgPT0gMCkgewotICAgICAgICBvcmdfaGFuZGxlciA9IHNpZ25hbCgyLHZtZXhpdCk7Ci0gICAgICAgIGRvX3g4NmVtdSgpOwotICAgICAgICBzaWduYWwoMixvcmdfaGFuZGxlcik7Ci0gICAgICAgIGNvbGxlY3RfYmlvc19yZWdzKHJlZ3MpOworCW9yZ19oYW5kbGVyID0gc2lnbmFsKDIsdm1leGl0KTsKKwlkb194ODZlbXUoKTsKKwlzaWduYWwoMixvcmdfaGFuZGxlcik7CisJY29sbGVjdF9iaW9zX3JlZ3MocmVncyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2lnbmFsKDIsb3JnX2hhbmRsZXIpOwotICAgICAgICBwcmludGYoImludGVycnVwdGVkIGF0IDB4JXhcbiIsKChDQVJEMTYpQ1BVX1JFRyhDUykpIDw8IDQKLSAgICAgICAgICAgICAgIHwgKENBUkQxNilDUFVfUkVHKEVJUCkpOworCXNpZ25hbCgyLG9yZ19oYW5kbGVyKTsKKwlwcmludGYoImludGVycnVwdGVkIGF0IDB4JXhcbiIsKChDQVJEMTYpQ1BVX1JFRyhDUykpIDw8IDQKKwkgICAgICAgfCAoQ0FSRDE2KUNQVV9SRUcoRUlQKSk7CiAgICAgfQogfQogCkBAIC0yNzIsMjMgKzI3MiwyMyBAQAogICAgIC8qIGNoZWNrIGlmIGJpb3MgdmVjdG9yIGlzIGluaXRpYWxpemVkICovCiAgICAgaWYgKCgoQ0FSRDE2KikwKVsobnVtPDwxKSsxXSA9PSAweDAwMDApIHsgLyogU1lTX0JJT1NfU0VHID8qLwogI2lmZGVmIFY4NkJJT1NfREVCVUcKLSAgICAgICAgaV9wcmludGYoImNhcmQgQklPUyBub3QgbG9hZGVkXG4iKTsKKwlpX3ByaW50ZigiY2FyZCBCSU9TIG5vdCBsb2FkZWRcbiIpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIH0KLSAgICAKKwogI2lmZGVmIFY4NkJJT1NfREVCVUcKICAgICBpZiAoZmlyc3R0aW1lKSB7Ci0gICAgICAgIGRwcmludCgwLDB4M0QwKTsKLSAgICAgICAgZmlyc3R0aW1lID0gMDsKKwlkcHJpbnQoMCwweDNEMCk7CisJZmlyc3R0aW1lID0gMDsKICAgICB9CiAjZW5kaWYKLSAgICAKKwogICAgIGlfcHJpbnRmKCJjYWxsaW5nIGNhcmQgQklPUyBhdDogIik7CiAgICAgaV9wcmludGYoIjB4JXg6JXhcbiIsKChDQVJEMTYgKikgMClbKG51bSA8PCAxKSArIDFdLAotICAgICAgICAgICAgIChDQVJEMzIpKChDQVJEMTYgKikgMClbbnVtIDw8IDFdKTsKKwkgICAgIChDQVJEMzIpKChDQVJEMTYgKikgMClbbnVtIDw8IDFdKTsKICAgICBYODZFTVVfcHJlcGFyZUZvckludChudW0pOwotICAgIAorCiAgICAgcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS9kZWJ1Zy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L2RlYnVnLmMKaW5kZXggMDUwMDA4Yy4uMjM1ZTZhYyAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L2RlYnVnLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L2RlYnVnLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIHN0YXRpYyB2b2lkICAgICBwcmludF9lbmNvZGVkX2J5dGVzICh1MTYgcywgdTE2IG8pOwogc3RhdGljIHZvaWQgICAgIHByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24gKHZvaWQpOwogc3RhdGljIGludCAgICAgIHBhcnNlX2xpbmUgKGNoYXIgKnMsIGludCAqcHMsIGludCAqbik7Ci0gIAorCiAvKiBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlrZSBkZWJ1ZydzIG91dHB1dC4gKi8KIHZvaWQgWDg2RU1VX3RyYWNlX3JlZ3MgKHZvaWQpCiB7CkBAIC05NCwxMSArOTQsMTEgQEAKICAgICAgKiBTSU5HTEVfU1RFUChyLG0pOyB3aGljaCBkaXNhcHBlYXIgaWYgREVCVUcgaXMgbm90IGRlZmluZWQgdG8KICAgICAgKiB0aGUgcHJlcHJvY2Vzc29yLiAgVGhlIFRSQUNFX1JFR1MgbWFjcm8gZXhwYW5kcyB0bzoKICAgICAgKgotICAgICAqIGlmIChkZWJ1ZyZERUJVR19ESVNBU1NFTUJMRSkgCisgICAgICogaWYgKGRlYnVnJkRFQlVHX0RJU0FTU0VNQkxFKQogICAgICAqICAgICB7anVzdF9kaXNhc3NlbWJsZSgpOyBnb3RvIEVuZE9mSW5zdHJ1Y3Rpb247fQogICAgICAqICAgICBpZiAoZGVidWcmREVCVUdfVFJBQ0UpIHRyYWNlX3JlZ3MocixtKTsKICAgICAgKgotICAgICAqIC4uLi4uLiAgYW5kIGF0IHRoZSBsYXN0IGxpbmUgb2YgdGhlIHJvdXRpbmUuIAorICAgICAqIC4uLi4uLiAgYW5kIGF0IHRoZSBsYXN0IGxpbmUgb2YgdGhlIHJvdXRpbmUuCiAgICAgICoKICAgICAgKiBFbmRPZkluc3RydWN0aW9uOiBlbmRfaW5zdHIoKTsKICAgICAgKgpAQCAtMTEyLDE0ICsxMTIsMTQgQEAKIAl0cmVncyA9IE07CiAgICAgdHJlZ3MueDg2LlJfSVAgPSBvZmY7CiAgICAgdHJlZ3MueDg2LlJfQ1MgPSBzZWc7Ci0gICAgCisKICAgICAvKiByZXNldCB0aGUgZGVjb2RpbmcgYnVmZmVycyAqLwogICAgIHRyZWdzLng4Ni5lbmNfc3RyX3BvcyA9IDA7CiAgICAgdHJlZ3MueDg2LmVuY19wb3MgPSAwOwotICAgIAorCiAgICAgLyogdHVybiBvbiB0aGUgImRpc2Fzc2VtYmxlIG9ubHksIG5vIGV4ZWN1dGUiIGZsYWcgKi8KICAgICB0cmVncy54ODYuZGVidWcgfD0gREVCVUdfRElTQVNTRU1CTEVfRjsKLSAKKwogICAgIC8qIERVTVAgTkVYVCBuIGluc3RydWN0aW9ucyB0byBzY3JlZW4gaW4gc3RyYWlnaHRfbGluZSBmYXNoaW9uICovCiAgICAgLyoKICAgICAgKiBUaGlzIGxvb2tzIGxpa2UgdGhlIHJlZ3VsYXIgaW5zdHJ1Y3Rpb24gZmV0Y2ggc3RyZWFtLCBleGNlcHQKQEAgLTIxMCw3ICsyMTAsNyBAQAogICAgIHUzMiBlbmQgID0gKG9mZisxNikgJiAweGZmZmZmZmYwOwogICAgIHUzMiBpOwogICAgIHUzMiBjdXJyZW50OwotICAgIAorCiAgICAgY3VycmVudCA9IHN0YXJ0OwogICAgIHdoaWxlIChlbmQgPD0gb2ZmICsgYW10KSB7CiAJcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBzdGFydCk7CkBAIC0yMzUsNyArMjM1LDcgQEAKICAgICBpbnQgb2Zmc2V0OwogICAgIHN0YXRpYyBpbnQgYnJlYWtwb2ludDsKICAgICBzdGF0aWMgaW50IG5vRGVjb2RlID0gMTsKLSAgICAKKwogICAgIGNoYXIgKnA7CiAKICAgICBpZiAoREVCVUdfQlJFQUsoKSkgewpAQCAtMjQ5LDE5ICsyNDksMTkgQEAKIAkgICAgWDg2RU1VX3RyYWNlX3JlZ3MoKTsKIAl9CiAgICAgfQotICAgIAorCiAgICAgZG9uZT0wOwogICAgIG9mZnNldCA9IE0ueDg2LnNhdmVkX2lwOwogICAgIHdoaWxlICghZG9uZSkgewotICAgICAgICBwcmludGsoIi0iKTsKLSAgICAgICAgLy9wID0gZmdldHMocywgMTAyMywgc3RkaW4pOworCXByaW50aygiLSIpOworCS8qcCA9IGZnZXRzKHMsIDEwMjMsIHN0ZGluKTsgKi8KIAljb25zX2dldHMocyk7Ci0gICAgICAgIGNtZCA9IHBhcnNlX2xpbmUocywgcHMsICZudG9rKTsKLSAgICAgICAgc3dpdGNoKGNtZCkgeworCWNtZCA9IHBhcnNlX2xpbmUocywgcHMsICZudG9rKTsKKwlzd2l0Y2goY21kKSB7CiAJY2FzZSAndSc6CiAJICAgIGRpc2Fzc2VtYmxlX2ZvcndhcmQoTS54ODYuc2F2ZWRfY3MsKHUxNilvZmZzZXQsMTApOwotICAgICAgICAgICAgYnJlYWs7Ci0JY2FzZSAnZCc6ICAKKwkgICAgYnJlYWs7CisJY2FzZSAnZCc6CiAJICAgIGlmIChudG9rID09IDIpIHsKIAkJc2VnbWVudCA9IE0ueDg2LnNhdmVkX2NzOwogCQlvZmZzZXQgPSBwc1sxXTsKQEAgLTI3NywyMiArMjc3LDIyIEBACiAJCVg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCh1MTYpb2Zmc2V0LDE2KTsKIAkJb2Zmc2V0ICs9IDE2OwogCSAgICB9Ci0gICAgICAgICAgICBicmVhazsKKwkgICAgYnJlYWs7CiAJY2FzZSAnYyc6CiAJICAgIE0ueDg2LmRlYnVnIF49IERFQlVHX1RSQUNFQ0FMTF9GOwotICAgICAgICAgICAgYnJlYWs7CisJICAgIGJyZWFrOwogCWNhc2UgJ3MnOgogCSAgICBNLng4Ni5kZWJ1ZyBePSBERUJVR19TVkNfRiB8IERFQlVHX1NZU19GIHwgREVCVUdfU1lTSU5UX0Y7Ci0gICAgICAgICAgICBicmVhazsKKwkgICAgYnJlYWs7CiAJY2FzZSAncic6CiAJICAgIFg4NkVNVV90cmFjZV9yZWdzKCk7Ci0gICAgICAgICAgICBicmVhazsKKwkgICAgYnJlYWs7CiAJY2FzZSAneCc6CiAJICAgIFg4NkVNVV90cmFjZV94cmVncygpOwotICAgICAgICAgICAgYnJlYWs7CisJICAgIGJyZWFrOwogCWNhc2UgJ2cnOgotICAgICAgICAgICAgaWYgKG50b2sgPT0gMikgewotICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQgPSBwc1sxXTsKKwkgICAgaWYgKG50b2sgPT0gMikgeworCQlicmVha3BvaW50ID0gcHNbMV07CiAJCXByaW50aygiYnJlYWtwb2ludCBzZXQgdG8gMHglWFxuIiwgYnJlYWtwb2ludCk7CiAJCWlmIChub0RlY29kZSkgewogCQkgICAgTS54ODYuZGVidWcgfD0gREVCVUdfREVDT0RFX05PUFJJTlRfRjsKQEAgLTMwMiw4ICszMDIsOCBAQAogCQlNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfVFJBQ0VfRjsKIAkJTS54ODYuZGVidWcgfD0gREVCVUdfQlJFQUtfRjsKIAkJZG9uZSA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKwkgICAgfQorCSAgICBicmVhazsKIAljYXNlICdxJzoKIAkgICAgTS54ODYuZGVidWcgfD0gREVCVUdfRVhJVDsKIAkgICAgcmV0dXJuOwpAQCAtMzEzLDkgKzMxMyw5IEBACiAJICAgIGJyZWFrOwogCWNhc2UgJ3QnOgogCWNhc2UgMDoKLSAgICAgICAgICAgIGRvbmUgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gICAKKwkgICAgZG9uZSA9IDE7CisJICAgIGJyZWFrOworCX0KICAgICB9CiB9CiAKQEAgLTMzOCwyMyArMzM4LDIzIEBACiAgICAgcHNbKm5dID0gKnM7CiAgICAgc3dpdGNoICgqcykgewogICAgICAgY2FzZSAnXG4nOgotICAgICAgICAqbiArPSAxOwotICAgICAgICByZXR1cm4gMDsKKwkqbiArPSAxOworCXJldHVybiAwOwogICAgICAgZGVmYXVsdDoKLSAgICAgICAgY21kID0gKnM7Ci0gICAgICAgICpuICs9IDE7CisJY21kID0gKnM7CisJKm4gKz0gMTsKICAgICB9CiAKIAl3aGlsZSAoMSkgewogCQl3aGlsZSAoKnMgIT0gJyAnICYmICpzICE9ICdcdCcgJiYgKnMgIT0gJ1xuJykgIHMrKzsKLQkJCisKIAkJaWYgKCpzID09ICdcbicpCiAJCQlyZXR1cm4gY21kOwotCQkKKwogCQl3aGlsZSgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykgcysrOwotCQkKKwogCQlwc1sqbl09YXRvaShzKTsKLQkJLy9zc2NhbmYocywiJXgiLCZwc1sqbl0pOworCQkvKnNzY2FuZihzLCIleCIsJnBzWypuXSk7ICovCiAJCSpuICs9IDE7CiAJfQogfQpAQCAtNDA1LDcgKzQwNSw3IEBACiAJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSAgICBwcmludGsoIkNZICIpOwogCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIk5DICIpOwogCXByaW50aygiXG4iKTsKLQkvL3g4NmVtdV9kdW1wX3N0YWNrKCk7CisJLyp4ODZlbXVfZHVtcF9zdGFjaygpOyAqLwogfQogCiB2b2lkIHg4NmVtdV9kdW1wX3hyZWdzICh2b2lkKQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L2RlY29kZS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L2RlY29kZS5jCmluZGV4IGJiMjA0ZTYuLjgzMmIxZjUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS9kZWNvZGUuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUvZGVjb2RlLmMKQEAgLTkzLDcgKzkzLDcgQEAKIAogICAgIE0ueDg2LmludHIgPSAwOwogICAgIERCKHg4NmVtdV9lbmRfaW5zdHIoKTspCi0JCisKICAgICBmb3IgKDs7KSB7CiAJREIoaWYgKENIRUNLX0lQX0ZFVENIKCkpIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCiAJLyogSWYgZGVidWdnaW5nLCBzYXZlIHRoZSBJUCBhbmQgQ1MgdmFsdWVzLiAqLwpAQCAtNzQ1LDExICs3NDUsMTEgQEAKIAkJcmV0dXJuIE0ueDg2LlJfRUNYOwogCSAgICBjYXNlIDI6CiAJCURFQ09ERV9QUklOVEYoIltFRFhdIik7Ci0vLwkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKy8qCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOyAqLwogCQlyZXR1cm4gTS54ODYuUl9FRFg7CiAJICAgIGNhc2UgMzoKIAkJREVDT0RFX1BSSU5URigiW0VCWF0iKTsKLS8vCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworLyoJCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7ICovCiAJCXJldHVybiBNLng4Ni5SX0VCWDsKIAkgICAgY2FzZSA0OgogCQlwcmludGsoIlVuc3VwcG9ydGVkIFNJQiBlbmNvZGluZ1xuIik7CkBAIC05MzMsNyArOTMzLDcgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLQlpbnQgZGlzcGxhY2VtZW50ID0gKHMxNilmZXRjaF93b3JkX2ltbSgpOyAKKwlpbnQgZGlzcGxhY2VtZW50ID0gKHMxNilmZXRjaF93b3JkX2ltbSgpOwogCXN3aXRjaCAocm0pIHsKIAljYXNlIDA6CiAJICAgIERFQ09ERV9QUklOVEYyKCIlZFtCWCtTSV0iLCBkaXNwbGFjZW1lbnQpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L2ZwdS5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L2ZwdS5jCmluZGV4IDA4YWVhNDIuLjdmN2MzNDUgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS9mcHUuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUvZnB1LmMKQEAgLTEwMiwyNCArMTAyLDI0IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICNpZmRlZiBERUJVRwogICAgIGlmIChtb2QgIT0gMykgewotICAgICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZDlfdGFiLCBtb2QsIHJoLCBybCk7CisJREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2Q5X3RhYiwgbW9kLCByaCwgcmwpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoeDg2ZW11X2ZwdV9vcF9kOV90YWIxWyhyaCA8PCAzKSArIHJsXSk7CisJREVDT0RFX1BSSU5URih4ODZlbXVfZnB1X29wX2Q5X3RhYjFbKHJoIDw8IDMpICsgcmxdKTsKICAgICB9CiAjZW5kaWYKICAgICBzd2l0Y2ggKG1vZCkgewogICAgICAgY2FzZSAwOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAxOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAyOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwogCQlzdGtlbGVtID0gKHU4KXJsOwogCQlpZiAocmggPCA0KSB7CkBAIC0xMjcsMTY3ICsxMjcsMTY3IEBACiAJCX0gZWxzZSB7CiAJCQkJREVDT0RFX1BSSU5URigiXG4iKTsKIAkJfQotICAgICAgICBicmVhazsKKwlicmVhazsKICAgICB9CiAjaWZkZWYgWDg2RU1VX0ZQVV9QUkVTRU5UCiAgICAgLyogZXhlY3V0ZSAqLwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgICBjYXNlIDM6Ci0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkKFg4NkVNVV9GUFVfU1RLVE9QLCBzdGtlbGVtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meGNoKFg4NkVNVV9GUFVfU1RLVE9QLCBzdGtlbGVtKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHN3aXRjaCAocmwpIHsKLSAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9ub3AoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0cChYODZFTVVfRlBVX1NUS1RPUCwgc3RrZWxlbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKHJsKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZjaHMoWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mYWJzKFg4NkVNVV9GUFVfU1RLVE9QKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnRzdChYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z4YW0oWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAvKiAyLDMsNiw3ICovCi0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKwlzd2l0Y2ggKHJoKSB7CisJICBjYXNlIDA6CisJICAgIHg4NmVtdV9mcHVfUl9mbGQoWDg2RU1VX0ZQVV9TVEtUT1AsIHN0a2VsZW0pOworCSAgICBicmVhazsKKwkgIGNhc2UgMToKKwkgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goWDg2RU1VX0ZQVV9TVEtUT1AsIHN0a2VsZW0pOworCSAgICBicmVhazsKKwkgIGNhc2UgMjoKKwkgICAgc3dpdGNoIChybCkgeworCSAgICAgIGNhc2UgMDoKKwkJeDg2ZW11X2ZwdV9SX25vcCgpOworCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgorCQl4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgIGNhc2UgMzoKKwkgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoWDg2RU1VX0ZQVV9TVEtUT1AsIHN0a2VsZW0pOworCSAgICBicmVhazsKKwkgIGNhc2UgNDoKKwkgICAgc3dpdGNoIChybCkgeworCSAgICBjYXNlIDA6CisJCXg4NmVtdV9mcHVfUl9mY2hzKFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMToKKwkJeDg2ZW11X2ZwdV9SX2ZhYnMoWDg2RU1VX0ZQVV9TVEtUT1ApOworCQlicmVhazsKKwkgICAgY2FzZSA0OgorCQl4ODZlbXVfZnB1X1JfZnRzdChYODZFTVVfRlBVX1NUS1RPUCk7CisJCWJyZWFrOworCSAgICBjYXNlIDU6CisJCXg4NmVtdV9mcHVfUl9meGFtKFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCS8qIDIsMyw2LDcgKi8KKwkJeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGJyZWFrOwogCi0gICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgc3dpdGNoIChybCkgewotICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZDEoWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGwydChYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbDJlKFg4NkVNVV9GUFVfU1RLVE9QKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbGRwaShYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbGcyKFg4NkVNVV9GUFVfU1RLVE9QKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbGRsbjIoWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZHooWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIC8qIDcgKi8KLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworCSAgY2FzZSA1OgorCSAgICBzd2l0Y2ggKHJsKSB7CisJICAgICAgY2FzZSAwOgorCQl4ODZlbXVfZnB1X1JfZmxkMShYODZFTVVfRlBVX1NUS1RPUCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgMToKKwkJeDg2ZW11X2ZwdV9SX2ZsZGwydChYODZFTVVfRlBVX1NUS1RPUCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgMjoKKwkJeDg2ZW11X2ZwdV9SX2ZsZGwyZShYODZFTVVfRlBVX1NUS1RPUCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgMzoKKwkJeDg2ZW11X2ZwdV9SX2ZsZHBpKFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSA0OgorCQl4ODZlbXVfZnB1X1JfZmxkbGcyKFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSA1OgorCQl4ODZlbXVfZnB1X1JfZmxkbG4yKFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSA2OgorCQl4ODZlbXVfZnB1X1JfZmxkeihYODZFTVVfRlBVX1NUS1RPUCk7CisJCWJyZWFrOworCSAgICAgIGRlZmF1bHQ6CisJCS8qIDcgKi8KKwkJeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGJyZWFrOwogCi0gICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgc3dpdGNoIChybCkgewotICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2YyeG0xKFg4NkVNVV9GUFVfU1RLVE9QKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meWwyeChYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnB0YW4oWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZwYXRhbihYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnh0cmFjdChYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9kZWNzdHAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9pbmNzdHAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworCSAgY2FzZSA2OgorCSAgICBzd2l0Y2ggKHJsKSB7CisJICAgICAgY2FzZSAwOgorCQl4ODZlbXVfZnB1X1JfZjJ4bTEoWDg2RU1VX0ZQVV9TVEtUT1ApOworCQlicmVhazsKKwkgICAgICBjYXNlIDE6CisJCXg4NmVtdV9mcHVfUl9meWwyeChYODZFTVVfRlBVX1NUS1RPUCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgMjoKKwkJeDg2ZW11X2ZwdV9SX2ZwdGFuKFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAzOgorCQl4ODZlbXVfZnB1X1JfZnBhdGFuKFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSA0OgorCQl4ODZlbXVfZnB1X1JfZnh0cmFjdChYODZFTVVfRlBVX1NUS1RPUCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgNToKKwkJeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgNjoKKwkJeDg2ZW11X2ZwdV9SX2RlY3N0cCgpOworCQlicmVhazsKKwkgICAgICBjYXNlIDc6CisJCXg4NmVtdV9mcHVfUl9pbmNzdHAoKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CiAKLSAgICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBzd2l0Y2ggKHJsKSB7Ci0gICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnByZW0oWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z5bDJ4cDEoWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzcXJ0KFg4NkVNVV9GUFVfU1RLVE9QKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZybmRpbnQoWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzY2FsZShYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisJICBjYXNlIDc6CisJICAgIHN3aXRjaCAocmwpIHsKKwkgICAgICBjYXNlIDA6CisJCXg4NmVtdV9mcHVfUl9mcHJlbShYODZFTVVfRlBVX1NUS1RPUCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgMToKKwkJeDg2ZW11X2ZwdV9SX2Z5bDJ4cDEoWDg2RU1VX0ZQVV9TVEtUT1ApOworCQlicmVhazsKKwkgICAgICBjYXNlIDI6CisJCXg4NmVtdV9mcHVfUl9mc3FydChYODZFTVVfRlBVX1NUS1RPUCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgMzoKKwkJeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgNDoKKwkJeDg2ZW11X2ZwdV9SX2ZybmRpbnQoWDg2RU1VX0ZQVV9TVEtUT1ApOworCQlicmVhazsKKwkgICAgICBjYXNlIDU6CisJCXg4NmVtdV9mcHVfUl9mc2NhbGUoWDg2RU1VX0ZQVV9TVEtUT1ApOworCQlicmVhazsKKwkgICAgICBjYXNlIDY6CisJICAgICAgY2FzZSA3OgorCSAgICAgIGRlZmF1bHQ6CisJCXg4NmVtdV9mcHVfaWxsZWdhbCgpOworCQlicmVhazsKKwkgICAgfQorCSAgICBicmVhazsKIAotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkKFg4NkVNVV9GUFVfRkxPQVQsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0KFg4NkVNVV9GUFVfRkxPQVQsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdHAoWDg2RU1VX0ZQVV9GTE9BVCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkZW52KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkY3coWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RlbnYoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RjdyhYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJICBkZWZhdWx0OgorCSAgICBzd2l0Y2ggKHJoKSB7CisJICAgICAgY2FzZSAwOgorCQl4ODZlbXVfZnB1X01fZmxkKFg4NkVNVV9GUFVfRkxPQVQsIGRlc3RvZmZzZXQpOworCQlicmVhazsKKwkgICAgICBjYXNlIDE6CisJCXg4NmVtdV9mcHVfaWxsZWdhbCgpOworCQlicmVhazsKKwkgICAgICBjYXNlIDI6CisJCXg4NmVtdV9mcHVfTV9mc3QoWDg2RU1VX0ZQVV9GTE9BVCwgZGVzdG9mZnNldCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgMzoKKwkJeDg2ZW11X2ZwdV9NX2ZzdHAoWDg2RU1VX0ZQVV9GTE9BVCwgZGVzdG9mZnNldCk7CisJCWJyZWFrOworCSAgICAgIGNhc2UgNDoKKwkJeDg2ZW11X2ZwdV9NX2ZsZGVudihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworCQlicmVhazsKKwkgICAgICBjYXNlIDU6CisJCXg4NmVtdV9mcHVfTV9mbGRjdyhYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworCQlicmVhazsKKwkgICAgICBjYXNlIDY6CisJCXg4NmVtdV9mcHVfTV9mc3RlbnYoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSA3OgorCQl4ODZlbXVfZnB1X01fZnN0Y3coWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CiAgICAgfQogI2VuZGlmIC8qIFg4NkVNVV9GUFVfUFJFU0VOVCAqLwogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKQEAgLTMwNiw3ICszMDYsNyBAQAogICAgICJGSUNPTVBcdERXT1JEIFBUUiAiLAogICAgICJGSVNVQlx0RFdPUkQgUFRSICIsICJGSVNVQlJcdERXT1JEIFBUUiAiLCAiRklESVZcdERXT1JEIFBUUiAiLAogICAgICJGSURJVlJcdERXT1JEIFBUUiAiLAotICAgIAorCiAgICAgIkZJQUREXHREV09SRCBQVFIgIiwgIkZJTVVMXHREV09SRCBQVFIgIiwgIkZJQ09NXHREV09SRCBQVFIgIiwKICAgICAiRklDT01QXHREV09SRCBQVFIgIiwKICAgICAiRklTVUJcdERXT1JEIFBUUiAiLCAiRklTVUJSXHREV09SRCBQVFIgIiwgIkZJRElWXHREV09SRCBQVFIgIiwKQEAgLTMzMCw1NCArMzMwLDU0IEBACiAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RhX3RhYiwgbW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgICBjYXNlIDA6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJYnJlYWs7CiAgICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJYnJlYWs7CiAgICAgICBjYXNlIDI6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJYnJlYWs7CiAgICAgICBjYXNlIDM6ICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwogCQlzdGtlbGVtID0gKHU4KXJsOwotICAgICAgICBERUNPREVfUFJJTlRGMigiXHRTVCglZCksU1RcbiIsIHN0a2VsZW0pOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGMigiXHRTVCglZCksU1RcbiIsIHN0a2VsZW0pOworCWJyZWFrOwogICAgIH0KICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKICAgICBzd2l0Y2ggKG1vZCkgewogICAgICAgY2FzZSAzOgotICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKLSAgICAgICAgYnJlYWs7CisJeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisJYnJlYWs7CiAgICAgICBkZWZhdWx0OgotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lhZGQoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01faW11bChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pY29tKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ljb21wKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lzdWIoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01faXN1YnIoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01faWRpdihYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pZGl2cihYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJc3dpdGNoIChyaCkgeworCSAgY2FzZSAwOgorCSAgICB4ODZlbXVfZnB1X01faWFkZChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDE6CisJICAgIHg4NmVtdV9mcHVfTV9pbXVsKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwkgIGNhc2UgMjoKKwkgICAgeDg2ZW11X2ZwdV9NX2ljb20oWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSAzOgorCSAgICB4ODZlbXVfZnB1X01faWNvbXAoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSA0OgorCSAgICB4ODZlbXVfZnB1X01faXN1YihYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDU6CisJICAgIHg4NmVtdV9mcHVfTV9pc3VicihYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDY6CisJICAgIHg4NmVtdV9mcHVfTV9pZGl2KFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwkgIGNhc2UgNzoKKwkgICAgeDg2ZW11X2ZwdV9NX2lkaXZyKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwl9CiAgICAgfQogI2VuZGlmCiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwpAQCAtNDA5LDk1ICs0MDksOTUgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogI2lmZGVmIERFQlVHCiAgICAgaWYgKG1vZCAhPSAzKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kYl90YWIsIG1vZCwgcmgsIHJsKTsKKwlERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGJfdGFiLCBtb2QsIHJoLCBybCk7CiAgICAgfSBlbHNlIGlmIChyaCA9PSA0KSB7ICAgICAgIC8qID09PSAxMSAxMCAwIG5ubiAqLwotICAgICAgICBzd2l0Y2ggKHJsKSB7Ci0gICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRkVOSVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGRElTSVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGQ0xFWFxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGSU5JVFxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCXN3aXRjaCAocmwpIHsKKwkgIGNhc2UgMDoKKwkgICAgREVDT0RFX1BSSU5URigiRkVOSVxuIik7CisJICAgIGJyZWFrOworCSAgY2FzZSAxOgorCSAgICBERUNPREVfUFJJTlRGKCJGRElTSVxuIik7CisJICAgIGJyZWFrOworCSAgY2FzZSAyOgorCSAgICBERUNPREVfUFJJTlRGKCJGQ0xFWFxuIik7CisJICAgIGJyZWFrOworCSAgY2FzZSAzOgorCSAgICBERUNPREVfUFJJTlRGKCJGSU5JVFxuIik7CisJICAgIGJyZWFrOworCX0KICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGMigiRVNDX0RCICUweFxuIiwgKG1vZCA8PCA2KSArIChyaCA8PCAzKSArIChybCkpOworCURFQ09ERV9QUklOVEYyKCJFU0NfREIgJTB4XG4iLCAobW9kIDw8IDYpICsgKHJoIDw8IDMpICsgKHJsKSk7CiAgICAgfQogI2VuZGlmIC8qIERFQlVHICovCiAgICAgc3dpdGNoIChtb2QpIHsKICAgICAgIGNhc2UgMDoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJYnJlYWs7CiAgICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCWJyZWFrOwogICAgICAgY2FzZSAyOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlicmVhazsKICAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgfQogI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAogICAgIC8qIGV4ZWN1dGUgKi8KICAgICBzd2l0Y2ggKG1vZCkgewogICAgICAgY2FzZSAzOgotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgc3dpdGNoIChybCkgewotICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZlbmkoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZGlzaSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZjbGV4KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmluaXQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCXN3aXRjaCAocmgpIHsKKwkgIGNhc2UgNDoKKwkgICAgc3dpdGNoIChybCkgeworCSAgICAgIGNhc2UgMDoKKwkJeDg2ZW11X2ZwdV9SX2ZlbmkoKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAxOgorCQl4ODZlbXVfZnB1X1JfZmRpc2koKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAyOgorCQl4ODZlbXVfZnB1X1JfZmNsZXgoKTsKKwkJYnJlYWs7CisJICAgICAgY2FzZSAzOgorCQl4ODZlbXVfZnB1X1JfZmluaXQoKTsKKwkJYnJlYWs7CisJICAgICAgZGVmYXVsdDoKKwkJeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisJCWJyZWFrOworCSAgICB9CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisJICAgIGJyZWFrOworCX0KKwlicmVhazsKICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlsZChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3QoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdHAoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9MREJMLCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdHAoWDg2RU1VX0ZQVV9MREJMLCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJc3dpdGNoIChyaCkgeworCSAgY2FzZSAwOgorCSAgICB4ODZlbXVfZnB1X01fZmlsZChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDE6CisJICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworCSAgICBicmVhazsKKwkgIGNhc2UgMjoKKwkgICAgeDg2ZW11X2ZwdV9NX2Zpc3QoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSAzOgorCSAgICB4ODZlbXVfZnB1X01fZmlzdHAoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSA0OgorCSAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDU6CisJICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9MREJMLCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJCSAgICAgIGNhc2UgNjoKKwkgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisJICAgIGJyZWFrOworCSAgY2FzZSA3OgorCSAgICB4ODZlbXVfZnB1X01fZnN0cChYODZFTVVfRlBVX0xEQkwsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwl9CiAgICAgfQogI2VuZGlmCiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwpAQCAtNTM4LDgwICs1MzgsODAgQEAKICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGNfdGFiLCBtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICAgIGNhc2UgMDoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlicmVhazsKICAgICAgIGNhc2UgMToKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlicmVhazsKICAgICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlicmVhazsKICAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KIAkJc3RrZWxlbSA9ICh1OClybDsKLSAgICAgICAgREVDT0RFX1BSSU5URjIoIlx0U1QoJWQpLFNUXG4iLCBzdGtlbGVtKTsKLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URjIoIlx0U1QoJWQpLFNUXG4iLCBzdGtlbGVtKTsKKwlicmVhazsKICAgICB9CiAjaWZkZWYgWDg2RU1VX0ZQVV9QUkVTRU5UCiAgICAgLyogZXhlY3V0ZSAqLwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgICBjYXNlIDM6Ci0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmFkZChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZm11bChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbShzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbXAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdWJyKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3ViKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZGl2cihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwlzd2l0Y2ggKHJoKSB7CisJICBjYXNlIDA6CisJICAgIHg4NmVtdV9mcHVfUl9mYWRkKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDE6CisJICAgIHg4NmVtdV9mcHVfUl9mbXVsKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDI6CisJICAgIHg4NmVtdV9mcHVfUl9mY29tKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDM6CisJICAgIHg4NmVtdV9mcHVfUl9mY29tcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisJICAgIGJyZWFrOworCSAgY2FzZSA0OgorCSAgICB4ODZlbXVfZnB1X1JfZnN1YnIoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworCSAgICBicmVhazsKKwkgIGNhc2UgNToKKwkgICAgeDg2ZW11X2ZwdV9SX2ZzdWIoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworCSAgICBicmVhazsKKwkgIGNhc2UgNjoKKwkgICAgeDg2ZW11X2ZwdV9SX2ZkaXZyKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDc6CisJICAgIHg4NmVtdV9mcHVfUl9mZGl2KHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOwogICAgICAgZGVmYXVsdDoKLSAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYWRkKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbXVsKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mY29tKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mY29tcChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN1YihYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN1YnIoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZkaXYoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZkaXZyKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJc3dpdGNoIChyaCkgeworCSAgY2FzZSAwOgorCSAgICB4ODZlbXVfZnB1X01fZmFkZChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSAxOgorCSAgICB4ODZlbXVfZnB1X01fZm11bChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSAyOgorCSAgICB4ODZlbXVfZnB1X01fZmNvbShYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSAzOgorCSAgICB4ODZlbXVfZnB1X01fZmNvbXAoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwkgIGNhc2UgNDoKKwkgICAgeDg2ZW11X2ZwdV9NX2ZzdWIoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwkgIGNhc2UgNToKKwkgICAgeDg2ZW11X2ZwdV9NX2ZzdWJyKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDY6CisJICAgIHg4NmVtdV9mcHVfTV9mZGl2KFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDc6CisJICAgIHg4NmVtdV9mcHVfTV9mZGl2cihYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAjZW5kaWYKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CkBAIC02NDgsNzAgKzY0OCw3MCBAQAogICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kZF90YWIsIG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgICAgY2FzZSAwOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAxOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAyOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwogCQlzdGtlbGVtID0gKHU4KXJsOwotICAgICAgICBERUNPREVfUFJJTlRGMigiXHRTVCglZCksU1RcbiIsIHN0a2VsZW0pOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGMigiXHRTVCglZCksU1RcbiIsIHN0a2VsZW0pOworCWJyZWFrOwogICAgIH0KICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKICAgICBzd2l0Y2ggKG1vZCkgewogICAgICAgY2FzZSAzOgotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZmcmVlKHN0a2VsZW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goc3RrZWxlbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0KHN0a2VsZW0pOyAgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoc3RrZWxlbSk7IC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCXN3aXRjaCAocmgpIHsKKwkgIGNhc2UgMDoKKwkgICAgeDg2ZW11X2ZwdV9SX2ZmcmVlKHN0a2VsZW0pOworCSAgICBicmVhazsKKwkgIGNhc2UgMToKKwkgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goc3RrZWxlbSk7CisJICAgIGJyZWFrOworCSAgY2FzZSAyOgorCSAgICB4ODZlbXVfZnB1X1JfZnN0KHN0a2VsZW0pOyAgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLworCSAgICBicmVhazsKKwkgIGNhc2UgMzoKKwkgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoc3RrZWxlbSk7IC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKwkgICAgYnJlYWs7CisJICBkZWZhdWx0OgorCSAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOwogICAgICAgZGVmYXVsdDoKLSAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0KFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RwKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mcnN0b3IoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzYXZlKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0c3coWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJc3dpdGNoIChyaCkgeworCSAgY2FzZSAwOgorCSAgICB4ODZlbXVfZnB1X01fZmxkKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDE6CisJICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworCSAgICBicmVhazsKKwkgIGNhc2UgMjoKKwkgICAgeDg2ZW11X2ZwdV9NX2ZzdChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSAzOgorCSAgICB4ODZlbXVfZnB1X01fZnN0cChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSA0OgorCSAgICB4ODZlbXVfZnB1X01fZnJzdG9yKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSA1OgorCSAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDY6CisJICAgIHg4NmVtdV9mcHVfTV9mc2F2ZShYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwkgIGNhc2UgNzoKKwkgICAgeDg2ZW11X2ZwdV9NX2ZzdHN3KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAjZW5kaWYKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CkBAIC03NTUsODIgKzc1NSw4MiBAQAogICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kZV90YWIsIG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgICAgY2FzZSAwOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAxOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAyOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwogCQlzdGtlbGVtID0gKHU4KXJsOwotICAgICAgICBERUNPREVfUFJJTlRGMigiXHRTVCglZCksU1RcbiIsIHN0a2VsZW0pOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGMigiXHRTVCglZCksU1RcbiIsIHN0a2VsZW0pOworCWJyZWFrOwogICAgIH0KICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKICAgICBzd2l0Y2ggKG1vZCkgewogICAgICAgY2FzZSAzOgotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZhZGRwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mbXVscChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbXAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgaWYgKHN0a2VsZW0gPT0gMSkKLSAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdWJycChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXZycChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJc3dpdGNoIChyaCkgeworCSAgY2FzZSAwOgorCSAgICB4ODZlbXVfZnB1X1JfZmFkZHAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworCSAgICBicmVhazsKKwkgIGNhc2UgMToKKwkgICAgeDg2ZW11X2ZwdV9SX2ZtdWxwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDI6CisJICAgIHg4NmVtdV9mcHVfUl9mY29tcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisJICAgIGJyZWFrOworCSAgY2FzZSAzOgorCSAgICBpZiAoc3RrZWxlbSA9PSAxKQorCSAgICAgIHg4NmVtdV9mcHVfUl9mY29tcHAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworCSAgICBlbHNlCisJICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisJICAgIGJyZWFrOworCSAgY2FzZSA0OgorCSAgICB4ODZlbXVfZnB1X1JfZnN1YnJwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDU6CisJICAgIHg4NmVtdV9mcHVfUl9mc3VicChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisJICAgIGJyZWFrOworCSAgY2FzZSA2OgorCSAgICB4ODZlbXVfZnB1X1JfZmRpdnJwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDc6CisJICAgIHg4NmVtdV9mcHVfUl9mZGl2cChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisJICAgIGJyZWFrOworCX0KKwlicmVhazsKICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlhZGQoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maW11bChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpY29tKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZmljb21wKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdWIoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN1YnIoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWRpdihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpZGl2cihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlzd2l0Y2ggKHJoKSB7CisJICBjYXNlIDA6CisJICAgIHg4NmVtdV9mcHVfTV9maWFkZChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwkgIGNhc2UgMToKKwkgICAgeDg2ZW11X2ZwdV9NX2ZpbXVsKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSAyOgorCSAgICB4ODZlbXVfZnB1X01fZmljb20oWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDM6CisJICAgIHg4NmVtdV9mcHVfTV9maWNvbXAoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDQ6CisJICAgIHg4NmVtdV9mcHVfTV9maXN1YihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwkgIGNhc2UgNToKKwkgICAgeDg2ZW11X2ZwdV9NX2Zpc3VicihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwkgIGNhc2UgNjoKKwkgICAgeDg2ZW11X2ZwdV9NX2ZpZGl2KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSA3OgorCSAgICB4ODZlbXVfZnB1X01fZmlkaXZyKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAjZW5kaWYKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CkBAIC04NzQsNzAgKzg3NCw3MCBAQAogICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kZl90YWIsIG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgICAgY2FzZSAwOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAxOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAyOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCWJyZWFrOwogICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwogCQlzdGtlbGVtID0gKHU4KXJsOwotICAgICAgICBERUNPREVfUFJJTlRGMigiXHRTVCglZClcbiIsIHN0a2VsZW0pOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGMigiXHRTVCglZClcbiIsIHN0a2VsZW0pOworCWJyZWFrOwogICAgIH0KICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKICAgICBzd2l0Y2ggKG1vZCkgewogICAgICAgY2FzZSAzOgotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZmcmVlKHN0a2VsZW0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goc3RrZWxlbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0KHN0a2VsZW0pOyAgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoc3RrZWxlbSk7IC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCXN3aXRjaCAocmgpIHsKKwkgIGNhc2UgMDoKKwkgICAgeDg2ZW11X2ZwdV9SX2ZmcmVlKHN0a2VsZW0pOworCSAgICBicmVhazsKKwkgIGNhc2UgMToKKwkgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goc3RrZWxlbSk7CisJICAgIGJyZWFrOworCSAgY2FzZSAyOgorCSAgICB4ODZlbXVfZnB1X1JfZnN0KHN0a2VsZW0pOyAgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLworCSAgICBicmVhazsKKwkgIGNhc2UgMzoKKwkgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoc3RrZWxlbSk7IC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKwkgICAgYnJlYWs7CisJICBkZWZhdWx0OgorCSAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOwogICAgICAgZGVmYXVsdDoKLSAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWxkKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdHAoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYmxkKFg4NkVNVV9GUFVfQlNELCBkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWxkKFg4NkVNVV9GUFVfTE9ORywgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICB4ODZlbXVfZnB1X01fZmJzdHAoWDg2RU1VX0ZQVV9CU0QsIGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3RwKFg4NkVNVV9GUFVfTE9ORywgZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCXN3aXRjaCAocmgpIHsKKwkgIGNhc2UgMDoKKwkgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDE6CisJICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworCSAgICBicmVhazsKKwkgIGNhc2UgMjoKKwkgICAgeDg2ZW11X2ZwdV9NX2Zpc3QoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDM6CisJICAgIHg4NmVtdV9mcHVfTV9maXN0cChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwkgIGNhc2UgNDoKKwkgICAgeDg2ZW11X2ZwdV9NX2ZibGQoWDg2RU1VX0ZQVV9CU0QsIGRlc3RvZmZzZXQpOworCSAgICBicmVhazsKKwkgIGNhc2UgNToKKwkgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9MT05HLCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJICBjYXNlIDY6CisJICAgIHg4NmVtdV9mcHVfTV9mYnN0cChYODZFTVVfRlBVX0JTRCwgZGVzdG9mZnNldCk7CisJICAgIGJyZWFrOworCSAgY2FzZSA3OgorCSAgICB4ODZlbXVfZnB1X01fZmlzdHAoWDg2RU1VX0ZQVV9MT05HLCBkZXN0b2Zmc2V0KTsKKwkgICAgYnJlYWs7CisJfQogICAgIH0KICNlbmRpZgogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS9vcHMuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS9vcHMuYwppbmRleCAwZDc5Nzc2Li4yZDRmOTNlIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUvb3BzLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L29wcy5jCkBAIC04OCw3ICs4OCw3IEBACiAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBYODYgT1BDT0RFXG4iKTsKICAgICBUUkFDRV9SRUdTKCk7CiAgICAgcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlggSUxMRUdBTCBYODYgT1BDT0RFIVxuIiwKLSAgICAgICAgTS54ODYuUl9DUywgTS54ODYuUl9JUC0xLG9wMSk7CisJTS54ODYuUl9DUywgTS54ODYuUl9JUC0xLG9wMSk7CiAgICAgSEFMVF9TWVMoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKIH0KQEAgLTEwOSw0MyArMTA5LDQzIEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9IGFkZF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSBhZGRfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gYWRkX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9IGFkZF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSBhZGRfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gYWRkX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSBhZGRfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBhZGRfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTE2NSwxMDcgKzE2NSwxMDcgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGFkZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGFkZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gYWRkX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBhZGRfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gYWRkX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc3JjcmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gYWRkX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBhZGRfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGFkZF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBhZGRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBhZGRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGFkZF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gYWRkX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gYWRkX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBhZGRfd29yZCgqZGVzdHJlZywgKnNyY3JlZyk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0yODcsNDAgKzI4Nyw0MCBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IGFkZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBhZGRfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IGFkZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBhZGRfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IGFkZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBhZGRfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gYWRkX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gYWRkX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zNDAsMTAxICszNDAsMTAxIEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRkX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRkX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRkX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF93b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRkX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNDY4LDE4ICs0NjgsMTggQEAKIAogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0RUFYLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworCURFQ09ERV9QUklOVEYoIkFERFx0RUFYLCIpOworCXNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiQUREXHRBWCwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJBRERcdEFYLCIpOworCXNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CiAgICAgfQogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VBWCA9IGFkZF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworCU0ueDg2LlJfRUFYID0gYWRkX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9BWCA9IGFkZF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKwlNLng4Ni5SX0FYID0gYWRkX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC01MjksNDMgKzUyOSw0MyBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSBvcl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSBvcl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSBvcl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSBvcl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSBvcl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSBvcl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gb3JfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBvcl9ieXRlKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNTg1LDEwNyArNTg1LDEwNyBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gb3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gb3Jfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IG9yX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc3JjcmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gb3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IG9yX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBvcl93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBvcl93b3JkKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gb3Jfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gb3Jfd29yZCgqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IG9yX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNzA3LDQwICs3MDcsNDAgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSBvcl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBvcl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gb3JfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gb3JfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IG9yX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IG9yX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IG9yX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gb3JfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTc2MCwxMDEgKzc2MCwxMDEgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBvcl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IG9yX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IG9yX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gb3Jfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gb3Jfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IG9yX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBvcl93b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTg4OCwxOCArODg4LDE4IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJPUlx0RUFYLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworCURFQ09ERV9QUklOVEYoIk9SXHRFQVgsIik7CisJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJPUlx0QVgsIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisJREVDT0RFX1BSSU5URigiT1JcdEFYLCIpOworCXNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CiAgICAgfQogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VBWCA9IG9yX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CisJTS54ODYuUl9FQVggPSBvcl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQVggPSBvcl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKwlNLng4Ni5SX0FYID0gb3Jfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTk0Niw0MyArOTQ2LDQzIEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9IGFkY19ieXRlKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSBhZGNfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gYWRjX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9IGFkY19ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSBhZGNfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gYWRjX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSBhZGNfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBhZGNfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTEwMDIsMTA3ICsxMDAyLDEwNyBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gYWRjX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc3JjcmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gYWRjX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBhZGNfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGFkY193b3JkKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBhZGNfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBhZGNfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGFkY193b3JkKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gYWRjX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGFkY19sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGFkY19sb25nKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gYWRjX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBhZGNfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gYWRjX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfd29yZCgqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IGFkY193b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTExMjQsNDAgKzExMjQsNDAgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSBhZGNfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gYWRjX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSBhZGNfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gYWRjX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSBhZGNfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gYWRjX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IGFkY19ieXRlKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IGFkY19ieXRlKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMTE3NywxMDEgKzExNzcsMTAxIEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRjX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRjX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRjX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRjX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRjX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRjX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRjX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFkY193b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYWRjX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMTMwNSwxOCArMTMwNSwxOCBAQAogCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiQURDXHRFQVgsIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CisJREVDT0RFX1BSSU5URigiQURDXHRFQVgsIik7CisJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJBRENcdEFYLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworCURFQ09ERV9QUklOVEYoIkFEQ1x0QVgsIik7CisJc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKICAgICB9CiAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRUFYID0gYWRjX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CisJTS54ODYuUl9FQVggPSBhZGNfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0FYID0gYWRjX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworCU0ueDg2LlJfQVggPSBhZGNfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTEzNjYsNDMgKzEzNjYsNDMgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gc2JiX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9IHNiYl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSBzYmJfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gc2JiX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9IHNiYl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSBzYmJfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHNiYl9ieXRlKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IHNiYl9ieXRlKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMTQyMiwxMDcgKzE0MjIsMTA3IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzYmJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBzYmJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHNiYl93b3JkKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gc2JiX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHNiYl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IHNiYl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc2JiX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBzYmJfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc2JiX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc3JjcmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gc2JiX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzYmJfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IHNiYl93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl93b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gc2JiX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMTU0NCw0MCArMTU0NCw0MCBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHNiYl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzYmJfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHNiYl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzYmJfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHNiYl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzYmJfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gc2JiX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gc2JiX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0xNTk3LDEwMSArMTU5NywxMDEgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzYmJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzYmJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzYmJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNiYl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzYmJfd29yZCgqZGVzdHJlZywgKnNyY3JlZyk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0xNzI1LDE4ICsxNzI1LDE4IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJTQkJcdEVBWCwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJTQkJcdEVBWCwiKTsKKwlzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlNCQlx0QVgsIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisJREVDT0RFX1BSSU5URigiU0JCXHRBWCwiKTsKKwlzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOwogICAgIH0KICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHNyY3ZhbCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FQVggPSBzYmJfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKwlNLng4Ni5SX0VBWCA9IHNiYl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQVggPSBzYmJfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisJTS54ODYuUl9BWCA9IHNiYl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMTc4Nyw0NiArMTc4Nyw0NiBAQAogCiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSBhbmRfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gYW5kX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogCiAgICAgY2FzZSAxOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gYW5kX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9IGFuZF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKIAogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9IGFuZF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSBhbmRfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gYW5kX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gYW5kX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0xODQ2LDEwNyArMTg0NiwxMDcgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGFuZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGFuZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gYW5kX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBhbmRfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gYW5kX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc3JjcmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gYW5kX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBhbmRfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGFuZF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBhbmRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBhbmRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGFuZF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gYW5kX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gYW5kX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBhbmRfd29yZCgqZGVzdHJlZywgKnNyY3JlZyk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0xOTY4LDQwICsxOTY4LDQwIEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gYW5kX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IGFuZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gYW5kX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IGFuZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gYW5kX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IGFuZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSBhbmRfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBhbmRfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTIwMjEsMTAyICsyMDIxLDEwMiBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gYW5kX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IGFuZF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYW5kX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJICAgIGJyZWFrOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gYW5kX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBhbmRfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKwkgICAgYnJlYWs7CisJfQogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYW5kX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYW5kX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYW5kX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF93b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gYW5kX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMjE1MCwxOCArMjE1MCwxOCBAQAogCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiQU5EXHRFQVgsIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CisJREVDT0RFX1BSSU5URigiQU5EXHRFQVgsIik7CisJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJBTkRcdEFYLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworCURFQ09ERV9QUklOVEYoIkFORFx0QVgsIik7CisJc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKICAgICB9CiAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRUFYID0gYW5kX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CisJTS54ODYuUl9FQVggPSBhbmRfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0FYID0gYW5kX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworCU0ueDg2LlJfQVggPSBhbmRfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTIyMTQsNDMgKzIyMTQsNDMgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gc3ViX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9IHN1Yl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSBzdWJfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gc3ViX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9IHN1Yl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSBzdWJfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHN1Yl9ieXRlKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IHN1Yl9ieXRlKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMjI3MCwxMDcgKzIyNzAsMTA3IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzdWJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBzdWJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHN1Yl93b3JkKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gc3ViX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHN1Yl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IHN1Yl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc3ViX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBzdWJfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc3ViX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc3JjcmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gc3ViX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzdWJfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IHN1Yl93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl93b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gc3ViX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMjM5Miw0MCArMjM5Miw0MCBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHN1Yl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzdWJfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHN1Yl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzdWJfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHN1Yl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzdWJfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gc3ViX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gc3ViX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0yNDQ1LDEwMSArMjQ0NSwxMDEgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzdWJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzdWJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzdWJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHN1Yl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzdWJfd29yZCgqZGVzdHJlZywgKnNyY3JlZyk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0yNTczLDE4ICsyNTczLDE4IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJTVUJcdEVBWCwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJTVUJcdEVBWCwiKTsKKwlzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0QVgsIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisJREVDT0RFX1BSSU5URigiU1VCXHRBWCwiKTsKKwlzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOwogICAgIH0KICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHNyY3ZhbCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FQVggPSBzdWJfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKwlNLng4Ni5SX0VBWCA9IHN1Yl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQVggPSBzdWJfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisJTS54ODYuUl9BWCA9IHN1Yl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMjYzNCw0MyArMjYzNCw0MyBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSB4b3JfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0geG9yX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9IHhvcl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSB4b3JfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0geG9yX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9IHhvcl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0geG9yX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0geG9yX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0yNjkwLDEwNyArMjY5MCwxMDcgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHhvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IHhvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0geG9yX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSB4b3Jfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0geG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc3JjcmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0geG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSB4b3Jfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IHhvcl93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSB4b3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSB4b3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHhvcl93b3JkKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0geG9yX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSB4b3JfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0geG9yX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSB4b3Jfd29yZCgqZGVzdHJlZywgKnNyY3JlZyk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0yODEyLDQwICsyODEyLDQwIEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0geG9yX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IHhvcl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0geG9yX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IHhvcl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0geG9yX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IHhvcl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSB4b3JfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSB4b3JfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTI4NjUsMTAxICsyODY1LDEwMSBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSB4b3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0geG9yX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHhvcl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSB4b3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0geG9yX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHhvcl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSB4b3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0geG9yX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHhvcl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0geG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSB4b3Jfd29yZCgqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHhvcl93b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTI5OTMsMTggKzI5OTMsMTggQEAKIAogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlhPUlx0RUFYLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworCURFQ09ERV9QUklOVEYoIlhPUlx0RUFYLCIpOworCXNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiWE9SXHRBWCwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJYT1JcdEFYLCIpOworCXNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CiAgICAgfQogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VBWCA9IHhvcl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworCU0ueDg2LlJfRUFYID0geG9yX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9BWCA9IHhvcl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKwlNLng4Ni5SX0FYID0geG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zMDU0LDQwICszMDU0LDQwIEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgY21wX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWNtcF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgY21wX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWNtcF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgY21wX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWNtcF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgY21wX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWNtcF9ieXRlKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMzEwNywxMDEgKzMxMDcsMTAxIEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGNtcF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgY21wX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBjbXBfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgY21wX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGNtcF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgY21wX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBjbXBfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgY21wX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGNtcF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgY21wX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBjbXBfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgY21wX3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBjbXBfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGNtcF93b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGNtcF93b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTMyMjMsNDAgKzMyMjMsNDAgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgY21wX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwljbXBfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBjbXBfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWNtcF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGNtcF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJY21wX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBjbXBfYnl0ZSgqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJY21wX2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zMjc2LDEwMSArMzI3NiwxMDEgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGNtcF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGNtcF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGNtcF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgY21wX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBjbXBfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBjbXBfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGNtcF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgY21wX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgY21wX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBjbXBfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGNtcF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgY21wX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgY21wX3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMzQwNCwxOCArMzQwNCwxOCBAQAogCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiQ01QXHRFQVgsIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CisJREVDT0RFX1BSSU5URigiQ01QXHRFQVgsIik7CisJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJDTVBcdEFYLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworCURFQ09ERV9QUklOVEYoIkNNUFx0QVgsIik7CisJc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKICAgICB9CiAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIGNtcF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworCWNtcF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKwljbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTM0NTcsMTUgKzM0NTcsMTUgQEAKIHsKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVBWFxuIik7CisJREVDT0RFX1BSSU5URigiSU5DXHRFQVhcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QVhcbiIpOworCURFQ09ERV9QUklOVEYoIklOQ1x0QVhcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VBWCA9IGluY19sb25nKE0ueDg2LlJfRUFYKTsKKwlNLng4Ni5SX0VBWCA9IGluY19sb25nKE0ueDg2LlJfRUFYKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0FYID0gaW5jX3dvcmQoTS54ODYuUl9BWCk7CisJTS54ODYuUl9BWCA9IGluY193b3JkKE0ueDg2LlJfQVgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zNDc5LDE1ICszNDc5LDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFQ1hcbiIpOworCURFQ09ERV9QUklOVEYoIklOQ1x0RUNYXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdENYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJJTkNcdENYXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FQ1ggPSBpbmNfbG9uZyhNLng4Ni5SX0VDWCk7CisJTS54ODYuUl9FQ1ggPSBpbmNfbG9uZyhNLng4Ni5SX0VDWCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9DWCA9IGluY193b3JkKE0ueDg2LlJfQ1gpOworCU0ueDg2LlJfQ1ggPSBpbmNfd29yZChNLng4Ni5SX0NYKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMzUwMSwxNSArMzUwMSwxNSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RURYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJJTkNcdEVEWFxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHREWFxuIik7CisJREVDT0RFX1BSSU5URigiSU5DXHREWFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRURYID0gaW5jX2xvbmcoTS54ODYuUl9FRFgpOworCU0ueDg2LlJfRURYID0gaW5jX2xvbmcoTS54ODYuUl9FRFgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfRFggPSBpbmNfd29yZChNLng4Ni5SX0RYKTsKKwlNLng4Ni5SX0RYID0gaW5jX3dvcmQoTS54ODYuUl9EWCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTM1MjMsMTUgKzM1MjMsMTUgQEAKIHsKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVCWFxuIik7CisJREVDT0RFX1BSSU5URigiSU5DXHRFQlhcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QlhcbiIpOworCURFQ09ERV9QUklOVEYoIklOQ1x0QlhcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VCWCA9IGluY19sb25nKE0ueDg2LlJfRUJYKTsKKwlNLng4Ni5SX0VCWCA9IGluY19sb25nKE0ueDg2LlJfRUJYKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0JYID0gaW5jX3dvcmQoTS54ODYuUl9CWCk7CisJTS54ODYuUl9CWCA9IGluY193b3JkKE0ueDg2LlJfQlgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zNTQ1LDE1ICszNTQ1LDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFU1BcbiIpOworCURFQ09ERV9QUklOVEYoIklOQ1x0RVNQXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdFNQXG4iKTsKKwlERUNPREVfUFJJTlRGKCJJTkNcdFNQXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FU1AgPSBpbmNfbG9uZyhNLng4Ni5SX0VTUCk7CisJTS54ODYuUl9FU1AgPSBpbmNfbG9uZyhNLng4Ni5SX0VTUCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9TUCA9IGluY193b3JkKE0ueDg2LlJfU1ApOworCU0ueDg2LlJfU1AgPSBpbmNfd29yZChNLng4Ni5SX1NQKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMzU2NywxNSArMzU2NywxNSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUJQXG4iKTsKKwlERUNPREVfUFJJTlRGKCJJTkNcdEVCUFxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRCUFxuIik7CisJREVDT0RFX1BSSU5URigiSU5DXHRCUFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRUJQID0gaW5jX2xvbmcoTS54ODYuUl9FQlApOworCU0ueDg2LlJfRUJQID0gaW5jX2xvbmcoTS54ODYuUl9FQlApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQlAgPSBpbmNfd29yZChNLng4Ni5SX0JQKTsKKwlNLng4Ni5SX0JQID0gaW5jX3dvcmQoTS54ODYuUl9CUCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTM1ODksMTUgKzM1ODksMTUgQEAKIHsKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVTSVxuIik7CisJREVDT0RFX1BSSU5URigiSU5DXHRFU0lcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0U0lcbiIpOworCURFQ09ERV9QUklOVEYoIklOQ1x0U0lcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VTSSA9IGluY19sb25nKE0ueDg2LlJfRVNJKTsKKwlNLng4Ni5SX0VTSSA9IGluY19sb25nKE0ueDg2LlJfRVNJKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX1NJID0gaW5jX3dvcmQoTS54ODYuUl9TSSk7CisJTS54ODYuUl9TSSA9IGluY193b3JkKE0ueDg2LlJfU0kpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zNjExLDE1ICszNjExLDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFRElcbiIpOworCURFQ09ERV9QUklOVEYoIklOQ1x0RURJXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdERJXG4iKTsKKwlERUNPREVfUFJJTlRGKCJJTkNcdERJXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FREkgPSBpbmNfbG9uZyhNLng4Ni5SX0VESSk7CisJTS54ODYuUl9FREkgPSBpbmNfbG9uZyhNLng4Ni5SX0VESSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9ESSA9IGluY193b3JkKE0ueDg2LlJfREkpOworCU0ueDg2LlJfREkgPSBpbmNfd29yZChNLng4Ni5SX0RJKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMzYzMywxNSArMzYzMywxNSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RUFYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJERUNcdEVBWFxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRBWFxuIik7CisJREVDT0RFX1BSSU5URigiREVDXHRBWFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRUFYID0gZGVjX2xvbmcoTS54ODYuUl9FQVgpOworCU0ueDg2LlJfRUFYID0gZGVjX2xvbmcoTS54ODYuUl9FQVgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQVggPSBkZWNfd29yZChNLng4Ni5SX0FYKTsKKwlNLng4Ni5SX0FYID0gZGVjX3dvcmQoTS54ODYuUl9BWCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTM2NTUsMTUgKzM2NTUsMTUgQEAKIHsKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVDWFxuIik7CisJREVDT0RFX1BSSU5URigiREVDXHRFQ1hcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0Q1hcbiIpOworCURFQ09ERV9QUklOVEYoIkRFQ1x0Q1hcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VDWCA9IGRlY19sb25nKE0ueDg2LlJfRUNYKTsKKwlNLng4Ni5SX0VDWCA9IGRlY19sb25nKE0ueDg2LlJfRUNYKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0NYID0gZGVjX3dvcmQoTS54ODYuUl9DWCk7CisJTS54ODYuUl9DWCA9IGRlY193b3JkKE0ueDg2LlJfQ1gpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zNjc3LDE1ICszNjc3LDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFRFhcbiIpOworCURFQ09ERV9QUklOVEYoIkRFQ1x0RURYXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdERYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJERUNcdERYXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FRFggPSBkZWNfbG9uZyhNLng4Ni5SX0VEWCk7CisJTS54ODYuUl9FRFggPSBkZWNfbG9uZyhNLng4Ni5SX0VEWCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9EWCA9IGRlY193b3JkKE0ueDg2LlJfRFgpOworCU0ueDg2LlJfRFggPSBkZWNfd29yZChNLng4Ni5SX0RYKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMzY5OSwxNSArMzY5OSwxNSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RUJYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJERUNcdEVCWFxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRCWFxuIik7CisJREVDT0RFX1BSSU5URigiREVDXHRCWFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRUJYID0gZGVjX2xvbmcoTS54ODYuUl9FQlgpOworCU0ueDg2LlJfRUJYID0gZGVjX2xvbmcoTS54ODYuUl9FQlgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQlggPSBkZWNfd29yZChNLng4Ni5SX0JYKTsKKwlNLng4Ni5SX0JYID0gZGVjX3dvcmQoTS54ODYuUl9CWCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTM3MjEsMTUgKzM3MjEsMTUgQEAKIHsKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVTUFxuIik7CisJREVDT0RFX1BSSU5URigiREVDXHRFU1BcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0U1BcbiIpOworCURFQ09ERV9QUklOVEYoIkRFQ1x0U1BcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VTUCA9IGRlY19sb25nKE0ueDg2LlJfRVNQKTsKKwlNLng4Ni5SX0VTUCA9IGRlY19sb25nKE0ueDg2LlJfRVNQKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX1NQID0gZGVjX3dvcmQoTS54ODYuUl9TUCk7CisJTS54ODYuUl9TUCA9IGRlY193b3JkKE0ueDg2LlJfU1ApOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zNzQzLDE1ICszNzQzLDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQlBcbiIpOworCURFQ09ERV9QUklOVEYoIkRFQ1x0RUJQXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEJQXG4iKTsKKwlERUNPREVfUFJJTlRGKCJERUNcdEJQXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FQlAgPSBkZWNfbG9uZyhNLng4Ni5SX0VCUCk7CisJTS54ODYuUl9FQlAgPSBkZWNfbG9uZyhNLng4Ni5SX0VCUCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9CUCA9IGRlY193b3JkKE0ueDg2LlJfQlApOworCU0ueDg2LlJfQlAgPSBkZWNfd29yZChNLng4Ni5SX0JQKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMzc2NSwxNSArMzc2NSwxNSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RVNJXG4iKTsKKwlERUNPREVfUFJJTlRGKCJERUNcdEVTSVxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRTSVxuIik7CisJREVDT0RFX1BSSU5URigiREVDXHRTSVxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRVNJID0gZGVjX2xvbmcoTS54ODYuUl9FU0kpOworCU0ueDg2LlJfRVNJID0gZGVjX2xvbmcoTS54ODYuUl9FU0kpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfU0kgPSBkZWNfd29yZChNLng4Ni5SX1NJKTsKKwlNLng4Ni5SX1NJID0gZGVjX3dvcmQoTS54ODYuUl9TSSk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTM3ODcsMTUgKzM3ODcsMTUgQEAKIHsKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVESVxuIik7CisJREVDT0RFX1BSSU5URigiREVDXHRFRElcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RElcbiIpOworCURFQ09ERV9QUklOVEYoIkRFQ1x0RElcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VESSA9IGRlY19sb25nKE0ueDg2LlJfRURJKTsKKwlNLng4Ni5SX0VESSA9IGRlY19sb25nKE0ueDg2LlJfRURJKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0RJID0gZGVjX3dvcmQoTS54ODYuUl9ESSk7CisJTS54ODYuUl9ESSA9IGRlY193b3JkKE0ueDg2LlJfREkpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zODA5LDE1ICszODA5LDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUFYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRFQVhcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEFYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRBWFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VBWCk7CisJcHVzaF9sb25nKE0ueDg2LlJfRUFYKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9BWCk7CisJcHVzaF93b3JkKE0ueDg2LlJfQVgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zODMxLDE1ICszODMxLDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUNYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRFQ1hcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdENYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRDWFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VDWCk7CisJcHVzaF9sb25nKE0ueDg2LlJfRUNYKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DWCk7CisJcHVzaF93b3JkKE0ueDg2LlJfQ1gpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zODUzLDE1ICszODUzLDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RURYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRFRFhcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdERYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHREWFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VEWCk7CisJcHVzaF9sb25nKE0ueDg2LlJfRURYKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9EWCk7CisJcHVzaF93b3JkKE0ueDg2LlJfRFgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zODc1LDE1ICszODc1LDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUJYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRFQlhcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEJYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRCWFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VCWCk7CisJcHVzaF9sb25nKE0ueDg2LlJfRUJYKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9CWCk7CisJcHVzaF93b3JkKE0ueDg2LlJfQlgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zODk3LDkgKzM4OTcsOSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVTUFxuIik7CisJREVDT0RFX1BSSU5URigiUFVTSFx0RVNQXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRTUFxuIik7CisJREVDT0RFX1BSSU5URigiUFVTSFx0U1BcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogCS8qIEFsd2F5cyBwdXNoIChFKVNQLCBzaW5jZSB3ZSBhcmUgZW11bGF0aW5nIGFuIGkzODYgYW5kIGFib3ZlCkBAIC0zOTIzLDE1ICszOTIzLDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUJQXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRFQlBcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEJQXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRCUFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VCUCk7CisJcHVzaF9sb25nKE0ueDg2LlJfRUJQKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9CUCk7CisJcHVzaF93b3JkKE0ueDg2LlJfQlApOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zOTQ1LDE1ICszOTQ1LDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RVNJXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRFU0lcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdFNJXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRTSVxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VTSSk7CisJcHVzaF9sb25nKE0ueDg2LlJfRVNJKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9TSSk7CisJcHVzaF93b3JkKE0ueDg2LlJfU0kpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zOTY3LDE1ICszOTY3LDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RURJXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRFRElcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdERJXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQVVNIXHRESVxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VESSk7CisJcHVzaF9sb25nKE0ueDg2LlJfRURJKTsKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9ESSk7CisJcHVzaF93b3JkKE0ueDg2LlJfREkpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0zOTg5LDE1ICszOTg5LDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQVhcbiIpOworCURFQ09ERV9QUklOVEYoIlBPUFx0RUFYXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEFYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQT1BcdEFYXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FQVggPSBwb3BfbG9uZygpOworCU0ueDg2LlJfRUFYID0gcG9wX2xvbmcoKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0FYID0gcG9wX3dvcmQoKTsKKwlNLng4Ni5SX0FYID0gcG9wX3dvcmQoKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNDAxMSwxNSArNDAxMSwxNSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RUNYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQT1BcdEVDWFxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRDWFxuIik7CisJREVDT0RFX1BSSU5URigiUE9QXHRDWFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRUNYID0gcG9wX2xvbmcoKTsKKwlNLng4Ni5SX0VDWCA9IHBvcF9sb25nKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9DWCA9IHBvcF93b3JkKCk7CisJTS54ODYuUl9DWCA9IHBvcF93b3JkKCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTQwMzMsMTUgKzQwMzMsMTUgQEAKIHsKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVEWFxuIik7CisJREVDT0RFX1BSSU5URigiUE9QXHRFRFhcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RFhcbiIpOworCURFQ09ERV9QUklOVEYoIlBPUFx0RFhcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VEWCA9IHBvcF9sb25nKCk7CisJTS54ODYuUl9FRFggPSBwb3BfbG9uZygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfRFggPSBwb3Bfd29yZCgpOworCU0ueDg2LlJfRFggPSBwb3Bfd29yZCgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC00MDU1LDE1ICs0MDU1LDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQlhcbiIpOworCURFQ09ERV9QUklOVEYoIlBPUFx0RUJYXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEJYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQT1BcdEJYXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FQlggPSBwb3BfbG9uZygpOworCU0ueDg2LlJfRUJYID0gcG9wX2xvbmcoKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0JYID0gcG9wX3dvcmQoKTsKKwlNLng4Ni5SX0JYID0gcG9wX3dvcmQoKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNDA3NywxNSArNDA3NywxNSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RVNQXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQT1BcdEVTUFxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRTUFxuIik7CisJREVDT0RFX1BSSU5URigiUE9QXHRTUFxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRVNQID0gcG9wX2xvbmcoKTsKKwlNLng4Ni5SX0VTUCA9IHBvcF9sb25nKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9TUCA9IHBvcF93b3JkKCk7CisJTS54ODYuUl9TUCA9IHBvcF93b3JkKCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTQwOTksMTUgKzQwOTksMTUgQEAKIHsKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVCUFxuIik7CisJREVDT0RFX1BSSU5URigiUE9QXHRFQlBcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0QlBcbiIpOworCURFQ09ERV9QUklOVEYoIlBPUFx0QlBcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VCUCA9IHBvcF9sb25nKCk7CisJTS54ODYuUl9FQlAgPSBwb3BfbG9uZygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQlAgPSBwb3Bfd29yZCgpOworCU0ueDg2LlJfQlAgPSBwb3Bfd29yZCgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC00MTIxLDE1ICs0MTIxLDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFU0lcbiIpOworCURFQ09ERV9QUklOVEYoIlBPUFx0RVNJXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdFNJXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQT1BcdFNJXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FU0kgPSBwb3BfbG9uZygpOworCU0ueDg2LlJfRVNJID0gcG9wX2xvbmcoKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX1NJID0gcG9wX3dvcmQoKTsKKwlNLng4Ni5SX1NJID0gcG9wX3dvcmQoKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNDE0MywxNSArNDE0MywxNSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RURJXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQT1BcdEVESVxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRESVxuIik7CisJREVDT0RFX1BSSU5URigiUE9QXHRESVxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRURJID0gcG9wX2xvbmcoKTsKKwlNLng4Ni5SX0VESSA9IHBvcF9sb25nKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CisJTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTQxNjUsMzMgKzQxNjUsMzMgQEAKIHsKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIQURcbiIpOworCURFQ09ERV9QUklOVEYoIlBVU0hBRFxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEFcbiIpOworCURFQ09ERV9QUklOVEYoIlBVU0hBXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgdTMyIG9sZF9zcCA9IE0ueDg2LlJfRVNQOworCXUzMiBvbGRfc3AgPSBNLng4Ni5SX0VTUDsKIAotICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQVgpOwotICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQ1gpOwotICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FRFgpOwotICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQlgpOwotICAgICAgICBwdXNoX2xvbmcob2xkX3NwKTsKLSAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUJQKTsKLSAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRVNJKTsKLSAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRURJKTsKKwlwdXNoX2xvbmcoTS54ODYuUl9FQVgpOworCXB1c2hfbG9uZyhNLng4Ni5SX0VDWCk7CisJcHVzaF9sb25nKE0ueDg2LlJfRURYKTsKKwlwdXNoX2xvbmcoTS54ODYuUl9FQlgpOworCXB1c2hfbG9uZyhvbGRfc3ApOworCXB1c2hfbG9uZyhNLng4Ni5SX0VCUCk7CisJcHVzaF9sb25nKE0ueDg2LlJfRVNJKTsKKwlwdXNoX2xvbmcoTS54ODYuUl9FREkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHUxNiBvbGRfc3AgPSBNLng4Ni5SX1NQOworCXUxNiBvbGRfc3AgPSBNLng4Ni5SX1NQOwogCi0gICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0FYKTsKLSAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1gpOwotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9EWCk7Ci0gICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0JYKTsKLSAgICAgICAgcHVzaF93b3JkKG9sZF9zcCk7Ci0gICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0JQKTsKLSAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfU0kpOwotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9ESSk7CisJcHVzaF93b3JkKE0ueDg2LlJfQVgpOworCXB1c2hfd29yZChNLng4Ni5SX0NYKTsKKwlwdXNoX3dvcmQoTS54ODYuUl9EWCk7CisJcHVzaF93b3JkKE0ueDg2LlJfQlgpOworCXB1c2hfd29yZChvbGRfc3ApOworCXB1c2hfd29yZChNLng4Ni5SX0JQKTsKKwlwdXNoX3dvcmQoTS54ODYuUl9TSSk7CisJcHVzaF93b3JkKE0ueDg2LlJfREkpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC00MjA1LDI5ICs0MjA1LDI5IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUE9QQURcbiIpOworCURFQ09ERV9QUklOVEYoIlBPUEFEXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BBXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQT1BBXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FREkgPSBwb3BfbG9uZygpOwotICAgICAgICBNLng4Ni5SX0VTSSA9IHBvcF9sb25nKCk7Ci0gICAgICAgIE0ueDg2LlJfRUJQID0gcG9wX2xvbmcoKTsKLSAgICAgICAgTS54ODYuUl9FU1AgKz0gNDsgICAgICAgICAgICAgIC8qIHNraXAgRVNQICovCi0gICAgICAgIE0ueDg2LlJfRUJYID0gcG9wX2xvbmcoKTsKLSAgICAgICAgTS54ODYuUl9FRFggPSBwb3BfbG9uZygpOwotICAgICAgICBNLng4Ni5SX0VDWCA9IHBvcF9sb25nKCk7Ci0gICAgICAgIE0ueDg2LlJfRUFYID0gcG9wX2xvbmcoKTsKKwlNLng4Ni5SX0VESSA9IHBvcF9sb25nKCk7CisJTS54ODYuUl9FU0kgPSBwb3BfbG9uZygpOworCU0ueDg2LlJfRUJQID0gcG9wX2xvbmcoKTsKKwlNLng4Ni5SX0VTUCArPSA0OyAgICAgICAgICAgICAgLyogc2tpcCBFU1AgKi8KKwlNLng4Ni5SX0VCWCA9IHBvcF9sb25nKCk7CisJTS54ODYuUl9FRFggPSBwb3BfbG9uZygpOworCU0ueDg2LlJfRUNYID0gcG9wX2xvbmcoKTsKKwlNLng4Ni5SX0VBWCA9IHBvcF9sb25nKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7Ci0gICAgICAgIE0ueDg2LlJfU0kgPSBwb3Bfd29yZCgpOwotICAgICAgICBNLng4Ni5SX0JQID0gcG9wX3dvcmQoKTsKLSAgICAgICAgTS54ODYuUl9TUCArPSAyOyAgICAgICAgICAgICAgIC8qIHNraXAgU1AgKi8KLSAgICAgICAgTS54ODYuUl9CWCA9IHBvcF93b3JkKCk7Ci0gICAgICAgIE0ueDg2LlJfRFggPSBwb3Bfd29yZCgpOwotICAgICAgICBNLng4Ni5SX0NYID0gcG9wX3dvcmQoKTsKLSAgICAgICAgTS54ODYuUl9BWCA9IHBvcF93b3JkKCk7CisJTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CisJTS54ODYuUl9TSSA9IHBvcF93b3JkKCk7CisJTS54ODYuUl9CUCA9IHBvcF93b3JkKCk7CisJTS54ODYuUl9TUCArPSAyOyAgICAgICAgICAgICAgIC8qIHNraXAgU1AgKi8KKwlNLng4Ni5SX0JYID0gcG9wX3dvcmQoKTsKKwlNLng4Ni5SX0RYID0gcG9wX3dvcmQoKTsKKwlNLng4Ni5SX0NYID0gcG9wX3dvcmQoKTsKKwlNLng4Ni5SX0FYID0gcG9wX3dvcmQoKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNDMwOCwxNiArNDMwOCwxNiBAQAogCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwlpbW0gPSBmZXRjaF9sb25nX2ltbSgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisJaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKICAgICB9CiAgICAgREVDT0RFX1BSSU5URjIoIlBVU0hcdCV4XG4iLCBpbW0pOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIHB1c2hfbG9uZyhpbW0pOworCXB1c2hfbG9uZyhpbW0pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1c2hfd29yZCgodTE2KWltbSk7CisJcHVzaF93b3JkKCh1MTYpaW1tKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNDMzNywxODggKzQzMzcsMTg4IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOwotICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7Ci0gICAgICAgICAgICBzMzIgaW1tOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CisJICAgIHUzMiByZXNfbG8scmVzX2hpOworCSAgICBzMzIgaW1tOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOwotICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOwotICAgICAgICAgICAgdTMyIHJlczsKLSAgICAgICAgICAgIHMxNiBpbW07CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKKwkgICAgaWYgKHJlc19oaSAhPSAwKSB7CisJCVNFVF9GTEFHKEZfQ0YpOworCQlTRVRfRkxBRyhGX09GKTsKKwkgICAgfSBlbHNlIHsKKwkJQ0xFQVJfRkxBRyhGX0NGKTsKKwkJQ0xFQVJfRkxBRyhGX09GKTsKKwkgICAgfQorCSAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKKwkgICAgdTMyIHJlczsKKwkgICAgczE2IGltbTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07Ci0gICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07CisJICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKwkJU0VUX0ZMQUcoRl9DRik7CisJCVNFVF9GTEFHKEZfT0YpOworCSAgICB9IGVsc2UgeworCQlDTEVBUl9GTEFHKEZfQ0YpOworCQlDTEVBUl9GTEFHKEZfT0YpOworCSAgICB9CisJICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOwotICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7Ci0gICAgICAgICAgICBzMzIgaW1tOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CisJICAgIHUzMiByZXNfbG8scmVzX2hpOworCSAgICBzMzIgaW1tOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOwotICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOwotICAgICAgICAgICAgdTMyIHJlczsKLSAgICAgICAgICAgIHMxNiBpbW07CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKKwkgICAgaWYgKHJlc19oaSAhPSAwKSB7CisJCVNFVF9GTEFHKEZfQ0YpOworCQlTRVRfRkxBRyhGX09GKTsKKwkgICAgfSBlbHNlIHsKKwkJQ0xFQVJfRkxBRyhGX0NGKTsKKwkJQ0xFQVJfRkxBRyhGX09GKTsKKwkgICAgfQorCSAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKKwkgICAgdTMyIHJlczsKKwkgICAgczE2IGltbTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07Ci0gICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07CisJICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKwkJU0VUX0ZMQUcoRl9DRik7CisJCVNFVF9GTEFHKEZfT0YpOworCSAgICB9IGVsc2UgeworCQlDTEVBUl9GTEFHKEZfQ0YpOworCQlDTEVBUl9GTEFHKEZfT0YpOworCSAgICB9CisJICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOwotICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7Ci0gICAgICAgICAgICBzMzIgaW1tOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CisJICAgIHUzMiByZXNfbG8scmVzX2hpOworCSAgICBzMzIgaW1tOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOwotICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOwotICAgICAgICAgICAgdTMyIHJlczsKLSAgICAgICAgICAgIHMxNiBpbW07CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKKwkgICAgaWYgKHJlc19oaSAhPSAwKSB7CisJCVNFVF9GTEFHKEZfQ0YpOworCQlTRVRfRkxBRyhGX09GKTsKKwkgICAgfSBlbHNlIHsKKwkJQ0xFQVJfRkxBRyhGX0NGKTsKKwkJQ0xFQVJfRkxBRyhGX09GKTsKKwkgICAgfQorCSAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKKwkgICAgdTMyIHJlczsKKwkgICAgczE2IGltbTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07Ci0gICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07CisJICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKwkJU0VUX0ZMQUcoRl9DRik7CisJCVNFVF9GTEFHKEZfT0YpOworCSAgICB9IGVsc2UgeworCQlDTEVBUl9GTEFHKEZfQ0YpOworCQlDTEVBUl9GTEFHKEZfT0YpOworCSAgICB9CisJICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOwotICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7Ci0gICAgICAgICAgICBzMzIgaW1tOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgdTMyIHJlc19sbyxyZXNfaGk7CisJICAgIHMzMiBpbW07CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKnNyY3JlZywoczMyKWltbSk7Ci0gICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOwotICAgICAgICAgICAgdTMyIHJlczsKLSAgICAgICAgICAgIHMxNiBpbW07CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCSAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKnNyY3JlZywoczMyKWltbSk7CisJICAgIGlmIChyZXNfaGkgIT0gMCkgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgdTMyIHJlczsKKwkgICAgczE2IGltbTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7Ci0gICAgICAgICAgICByZXMgPSAoczE2KSpzcmNyZWcgKiAoczE2KWltbTsKLSAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKwkgICAgcmVzID0gKHMxNikqc3JjcmVnICogKHMxNilpbW07CisJICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKwkJU0VUX0ZMQUcoRl9DRik7CisJCVNFVF9GTEFHKEZfT0YpOworCSAgICB9IGVsc2UgeworCQlDTEVBUl9GTEFHKEZfQ0YpOworCQlDTEVBUl9GTEFHKEZfT0YpOworCSAgICB9CisJICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC00NTU2LDE4MCArNDU1NiwxODAgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7Ci0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOworCSAgICB1MzIgcmVzX2xvLHJlc19oaTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKLSAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgewotICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOwotICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOwotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKLSAgICAgICAgICAgIHUzMiByZXM7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpc3JjdmFsLChzMzIpaW1tKTsKKwkgICAgaWYgKHJlc19oaSAhPSAwKSB7CisJCVNFVF9GTEFHKEZfQ0YpOworCQlTRVRfRkxBRyhGX09GKTsKKwkgICAgfSBlbHNlIHsKKwkJQ0xFQVJfRkxBRyhGX0NGKTsKKwkJQ0xFQVJfRkxBRyhGX09GKTsKKwkgICAgfQorCSAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKKwkgICAgdTMyIHJlczsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07Ci0gICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHJlcyA9IChzMTYpc3JjdmFsICogKHMxNilpbW07CisJICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKwkJU0VUX0ZMQUcoRl9DRik7CisJCVNFVF9GTEFHKEZfT0YpOworCSAgICB9IGVsc2UgeworCQlDTEVBUl9GTEFHKEZfQ0YpOworCQlDTEVBUl9GTEFHKEZfT0YpOworCSAgICB9CisJICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOwotICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKKwkgICAgdTMyIHJlc19sbyxyZXNfaGk7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKXNyY3ZhbCwoczMyKWltbSk7Ci0gICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7Ci0gICAgICAgICAgICB1MzIgcmVzOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKXNyY3ZhbCwoczMyKWltbSk7CisJICAgIGlmIChyZXNfaGkgIT0gMCkgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CisJICAgIHUzMiByZXM7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOwotICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgewotICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOwotICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOwotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworCSAgICBpZiAocmVzID4gMHhGRkZGKSB7CisJCVNFVF9GTEFHKEZfQ0YpOworCQlTRVRfRkxBRyhGX09GKTsKKwkgICAgfSBlbHNlIHsKKwkJQ0xFQVJfRkxBRyhGX0NGKTsKKwkJQ0xFQVJfRkxBRyhGX09GKTsKKwkgICAgfQorCSAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CisJICAgIHUzMiByZXNfbG8scmVzX2hpOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOwotICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOwotICAgICAgICAgICAgdTMyIHJlczsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworCSAgICBpZiAocmVzX2hpICE9IDApIHsKKwkJU0VUX0ZMQUcoRl9DRik7CisJCVNFVF9GTEFHKEZfT0YpOworCSAgICB9IGVsc2UgeworCQlDTEVBUl9GTEFHKEZfQ0YpOworCQlDTEVBUl9GTEFHKEZfT0YpOworCSAgICB9CisJICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOworCSAgICB1MzIgcmVzOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgcmVzID0gKHMxNilzcmN2YWwgKiAoczE2KWltbTsKLSAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgcmVzID0gKHMxNilzcmN2YWwgKiAoczE2KWltbTsKKwkgICAgaWYgKHJlcyA+IDB4RkZGRikgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7Ci0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisJICAgIHUzMiByZXNfbG8scmVzX2hpOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKSpzcmNyZWcsKHMzMilpbW0pOwotICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKLSAgICAgICAgICAgIHUzMiByZXM7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCSAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKnNyY3JlZywoczMyKWltbSk7CisJICAgIGlmIChyZXNfaGkgIT0gMCkgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgdTMyIHJlczsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7Ci0gICAgICAgICAgICByZXMgPSAoczE2KSpzcmNyZWcgKiAoczE2KWltbTsKLSAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKwkgICAgcmVzID0gKHMxNikqc3JjcmVnICogKHMxNilpbW07CisJICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKwkJU0VUX0ZMQUcoRl9DRik7CisJCVNFVF9GTEFHKEZfT0YpOworCSAgICB9IGVsc2UgeworCQlDTEVBUl9GTEFHKEZfQ0YpOworCQlDTEVBUl9GTEFHKEZfT0YpOworCSAgICB9CisJICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC00NzU3LDExICs0NzU3LDExIEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiSU5TRFxuIik7Ci0gICAgICAgIGlucyg0KTsKKwlERUNPREVfUFJJTlRGKCJJTlNEXG4iKTsKKwlpbnMoNCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiSU5TV1xuIik7Ci0gICAgICAgIGlucygyKTsKKwlERUNPREVfUFJJTlRGKCJJTlNXXG4iKTsKKwlpbnMoMik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwpAQCAtNDc5MCwxMSArNDc5MCwxMSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFNEXG4iKTsKLSAgICAgICAgb3V0cyg0KTsKKwlERUNPREVfUFJJTlRGKCJPVVRTRFxuIik7CisJb3V0cyg0KTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJPVVRTV1xuIik7Ci0gICAgICAgIG91dHMoMik7CisJREVDT0RFX1BSSU5URigiT1VUU1dcbiIpOworCW91dHMoMik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwpAQCAtNDgxOCw3ICs0ODE4LDcgQEAKICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9PRikpCi0gICAgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CisJTS54ODYuUl9JUCA9IHRhcmdldDsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CiB9CkBAIC00ODQwLDcgKzQ4NDAsNyBAQAogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmICghQUNDRVNTX0ZMQUcoRl9PRikpCi0gICAgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CisJTS54ODYuUl9JUCA9IHRhcmdldDsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CiB9CkBAIC00ODYyLDcgKzQ4NjIsNyBAQAogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKLSAgICAgICAgTS54ODYuUl9JUCA9IHRhcmdldDsKKwlNLng4Ni5SX0lQID0gdGFyZ2V0OwogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKIH0KQEAgLTQ4ODQsNyArNDg4NCw3IEBACiAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX0NGKSkKLSAgICAgICAgTS54ODYuUl9JUCA9IHRhcmdldDsKKwlNLng4Ni5SX0lQID0gdGFyZ2V0OwogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKIH0KQEAgLTQ5MDYsNyArNDkwNiw3IEBACiAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQotICAgICAgICBNLng4Ni5SX0lQID0gdGFyZ2V0OworCU0ueDg2LlJfSVAgPSB0YXJnZXQ7CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwogfQpAQCAtNDkyOCw3ICs0OTI4LDcgQEAKICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoIUFDQ0VTU19GTEFHKEZfWkYpKQotICAgICAgICBNLng4Ni5SX0lQID0gdGFyZ2V0OworCU0ueDg2LlJfSVAgPSB0YXJnZXQ7CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwogfQpAQCAtNDk1MSw3ICs0OTUxLDcgQEAKICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRikpCi0gICAgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CisJTS54ODYuUl9JUCA9IHRhcmdldDsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CiB9CkBAIC00OTc0LDcgKzQ5NzQsNyBAQAogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmICghKEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpKSkKLSAgICAgICAgTS54ODYuUl9JUCA9IHRhcmdldDsKKwlNLng4Ni5SX0lQID0gdGFyZ2V0OwogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKIH0KQEAgLTQ5OTYsNyArNDk5Niw3IEBACiAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKEFDQ0VTU19GTEFHKEZfU0YpKQotICAgICAgICBNLng4Ni5SX0lQID0gdGFyZ2V0OworCU0ueDg2LlJfSVAgPSB0YXJnZXQ7CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwogfQpAQCAtNTAxOCw3ICs1MDE4LDcgQEAKICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoIUFDQ0VTU19GTEFHKEZfU0YpKQotICAgICAgICBNLng4Ni5SX0lQID0gdGFyZ2V0OworCU0ueDg2LlJfSVAgPSB0YXJnZXQ7CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwogfQpAQCAtNTA0MCw3ICs1MDQwLDcgQEAKICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9QRikpCi0gICAgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CisJTS54ODYuUl9JUCA9IHRhcmdldDsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CiB9CkBAIC01MDYyLDcgKzUwNjIsNyBAQAogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmICghQUNDRVNTX0ZMQUcoRl9QRikpCi0gICAgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CisJTS54ODYuUl9JUCA9IHRhcmdldDsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CiB9CkBAIC01MDg3LDcgKzUwODcsNyBAQAogICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKICAgICBvZiA9IEFDQ0VTU19GTEFHKEZfT0YpICE9IDA7CiAgICAgaWYgKHNmIF4gb2YpCi0gICAgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CisJTS54ODYuUl9JUCA9IHRhcmdldDsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CiB9CkBAIC01MTEzLDcgKzUxMTMsNyBAQAogICAgIG9mID0gQUNDRVNTX0ZMQUcoRl9PRikgIT0gMDsKICAgICAvKiBub3RlOiBpbnZlcnNlIG9mIGFib3ZlLCBidXQgdXNpbmcgPT0gaW5zdGVhZCBvZiB4b3IuICovCiAgICAgaWYgKHNmID09IG9mKQotICAgICAgICBNLng4Ni5SX0lQID0gdGFyZ2V0OworCU0ueDg2LlJfSVAgPSB0YXJnZXQ7CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwogfQpAQCAtNTEzOSw3ICs1MTM5LDcgQEAKICAgICBzZiA9IEFDQ0VTU19GTEFHKEZfU0YpICE9IDA7CiAgICAgb2YgPSBBQ0NFU1NfRkxBRyhGX09GKSAhPSAwOwogICAgIGlmICgoc2YgXiBvZikgfHwgQUNDRVNTX0ZMQUcoRl9aRikpCi0gICAgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CisJTS54ODYuUl9JUCA9IHRhcmdldDsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CiB9CkBAIC01MTY1LDcgKzUxNjUsNyBAQAogICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKICAgICBvZiA9IEFDQ0VTU19GTEFHKEZfT0YpICE9IDA7CiAgICAgaWYgKChzZiA9PSBvZikgJiYgIUFDQ0VTU19GTEFHKEZfWkYpKQotICAgICAgICBNLng4Ni5SX0lQID0gdGFyZ2V0OworCU0ueDg2LlJfSVAgPSB0YXJnZXQ7CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwogfQpAQCAtNTIwMyw4OCArNTIwMyw4OCBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAjaWZkZWYgREVCVUcKICAgICBpZiAoREVCVUdfREVDT0RFKCkpIHsKLSAgICAgICAgLyogWFhYIERFQ09ERV9QUklOVEYgbWF5IGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUKLSAgICAgICAgICAgZ2VuZXJhbCwgc28gdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gbGVhdmUgdGhlIHN0cmluZ3MKLSAgICAgICAgICAgaW4gdGhlIHNhbWUgZm9ybWF0LCBldmVuIHRob3VnaCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlIAotICAgICAgICAgICBhYm92ZSB0ZXN0IGlzIGRvbmUgdHdpY2UuICovCisJLyogWFhYIERFQ09ERV9QUklOVEYgbWF5IGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUKKwkgICBnZW5lcmFsLCBzbyB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBsZWF2ZSB0aGUgc3RyaW5ncworCSAgIGluIHRoZSBzYW1lIGZvcm1hdCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBpcyB0aGF0IHRoZQorCSAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KIAotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiT1JcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkFEQ1x0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0JCXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJBTkRcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiWE9SXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJDTVBcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlzd2l0Y2ggKHJoKSB7CisJY2FzZSAwOgorCSAgICBERUNPREVfUFJJTlRGKCJBRERcdCIpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIERFQ09ERV9QUklOVEYoIk9SXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBERUNPREVfUFJJTlRGKCJBRENcdCIpOworCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIERFQ09ERV9QUklOVEYoIlNCQlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNDoKKwkgICAgREVDT0RFX1BSSU5URigiQU5EXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA1OgorCSAgICBERUNPREVfUFJJTlRGKCJTVUJcdCIpOworCSAgICBicmVhazsKKwljYXNlIDY6CisJICAgIERFQ09ERV9QUklOVEYoIlhPUlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNzoKKwkgICAgREVDT0RFX1BSSU5URigiQ01QXHQiKTsKKwkgICAgYnJlYWs7CisJfQogICAgIH0KICNlbmRpZgogICAgIC8qIGtub3cgb3BlcmF0aW9uLCBkZWNvZGUgdGhlIG1vZCBieXRlIHRvIGZpbmQgdGhlIGFkZHJlc3NpbmcKICAgICAgICBtb2RlLiAqLwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgaW1tKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9ICgqb3BjODBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKLSAgICAgICAgaWYgKHJoICE9IDcpCi0gICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCURFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworCURFQ09ERV9QUklOVEYyKCIleFxuIiwgaW1tKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSAoKm9wYzgwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisJaWYgKHJoICE9IDcpCisJICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOwotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gKCpvcGM4MF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOwotICAgICAgICBpZiAocmggIT0gNykKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCWltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9ICgqb3BjODBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKwlpZiAocmggIT0gNykKKwkgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSAoKm9wYzgwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7Ci0gICAgICAgIGlmIChyaCAhPSA3KQotICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwlERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gKCpvcGM4MF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworCWlmIChyaCAhPSA3KQorCSAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gKCpvcGM4MF9ieXRlX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgaW1tKTsKLSAgICAgICAgaWYgKHJoICE9IDcpCi0gICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9ICgqb3BjODBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7CisJaWYgKHJoICE9IDcpCisJICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNTMzMiwxNTggKzUzMzIsMTU4IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICNpZmRlZiBERUJVRwogICAgIGlmIChERUJVR19ERUNPREUoKSkgewotICAgICAgICAvKiBYWFggREVDT0RFX1BSSU5URiBtYXkgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZQotICAgICAgICAgICBnZW5lcmFsLCBzbyB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBsZWF2ZSB0aGUgc3RyaW5ncwotICAgICAgICAgICBpbiB0aGUgc2FtZSBmb3JtYXQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgaXMgdGhhdCB0aGUgCi0gICAgICAgICAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KKwkvKiBYWFggREVDT0RFX1BSSU5URiBtYXkgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZQorCSAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCisJICAgaW4gdGhlIHNhbWUgZm9ybWF0LCBldmVuIHRob3VnaCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlCisJICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLwogCi0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiQUREXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJPUlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiQURDXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJTQkJcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkFORFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU1VCXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJYT1JcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCXN3aXRjaCAocmgpIHsKKwljYXNlIDA6CisJICAgIERFQ09ERV9QUklOVEYoIkFERFx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgREVDT0RFX1BSSU5URigiT1JcdCIpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIERFQ09ERV9QUklOVEYoIkFEQ1x0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgREVDT0RFX1BSSU5URigiU0JCXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA0OgorCSAgICBERUNPREVfUFJJTlRGKCJBTkRcdCIpOworCSAgICBicmVhazsKKwljYXNlIDU6CisJICAgIERFQ09ERV9QUklOVEYoIlNVQlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNjoKKwkgICAgREVDT0RFX1BSSU5URigiWE9SXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA3OgorCSAgICBERUNPREVfUFJJTlRGKCJDTVBcdCIpOworCSAgICBicmVhazsKKwl9CiAgICAgfQogI2VuZGlmCiAgICAgLyoKLSAgICAgKiBLbm93IG9wZXJhdGlvbiwgZGVjb2RlIHRoZSBtb2QgYnl0ZSB0byBmaW5kIHRoZSBhZGRyZXNzaW5nIAorICAgICAqIEtub3cgb3BlcmF0aW9uLCBkZWNvZGUgdGhlIG1vZCBieXRlIHRvIGZpbmQgdGhlIGFkZHJlc3NpbmcKICAgICAgKiBtb2RlLgogICAgICAqLwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWwsaW1tOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgaW1tKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4MV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOwotICAgICAgICAgICAgaWYgKHJoICE9IDcpCi0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworCSAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisJICAgIGlmIChyaCAhPSA3KQorCQlzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWwsaW1tOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX3dvcmRfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7Ci0gICAgICAgICAgICBpZiAocmggIT0gNykKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGM4MV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworCSAgICBpZiAocmggIT0gNykKKwkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbCxpbW07CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7Ci0gICAgICAgICAgICBpZiAocmggIT0gNykKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisJICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgaW1tKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9ICgqb3BjODFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKwkgICAgaWYgKHJoICE9IDcpCisJCXN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbCxpbW07CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODFfd29yZF9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKLSAgICAgICAgICAgIGlmIChyaCAhPSA3KQotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wYzgxX3dvcmRfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisJICAgIGlmIChyaCAhPSA3KQorCQlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsLGltbTsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKLSAgICAgICAgICAgIGlmIChyaCAhPSA3KQotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKwkgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGM4MV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworCSAgICBpZiAocmggIT0gNykKKwkJc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsLGltbTsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgaW1tKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4MV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOwotICAgICAgICAgICAgaWYgKHJoICE9IDcpCi0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgaW1tKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9ICgqb3BjODFfd29yZF9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKwkgICAgaWYgKHJoICE9IDcpCisJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBkZXN0dmFsLGltbTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7Ci0gICAgICAgICAgICBpZiAocmggIT0gNykKLSAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGM4MV9sb25nX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgaW1tKTsKKwkgICAgaWYgKHJoICE9IDcpCisJCSpkZXN0cmVnID0gZGVzdHZhbDsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBkZXN0dmFsLGltbTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODFfd29yZF9vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7Ci0gICAgICAgICAgICBpZiAocmggIT0gNykKLSAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGM4MV93b3JkX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgaW1tKTsKKwkgICAgaWYgKHJoICE9IDcpCisJCSpkZXN0cmVnID0gZGVzdHZhbDsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTU0OTIsMTIgKzU0OTIsMTIgQEAKIHN0YXRpYyB1OCAoKm9wYzgyX2J5dGVfb3BlcmF0aW9uW10pKHU4IHMsIHU4IGQpID0KIHsKICAgICBhZGRfYnl0ZSwgICAgICAgICAgIC8qMDAgKi8KLSAgICBvcl9ieXRlLCAgICAgICAgICAgIC8qMDEgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworICAgIG9yX2J5dGUsICAgICAgICAgICAgLyowMSAqLyAvKllZWSBVTlVTRUQgPz8/PyAqLwogICAgIGFkY19ieXRlLCAgICAgICAgICAgLyowMiAqLwogICAgIHNiYl9ieXRlLCAgICAgICAgICAgLyowMyAqLwotICAgIGFuZF9ieXRlLCAgICAgICAgICAgLyowNCAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisgICAgYW5kX2J5dGUsICAgICAgICAgICAvKjA0ICovIC8qWVlZIFVOVVNFRCA/Pz8/ICovCiAgICAgc3ViX2J5dGUsICAgICAgICAgICAvKjA1ICovCi0gICAgeG9yX2J5dGUsICAgICAgICAgICAvKjA2ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKyAgICB4b3JfYnl0ZSwgICAgICAgICAgIC8qMDYgKi8gLypZWVkgVU5VU0VEID8/Pz8gKi8KICAgICBjbXBfYnl0ZSwgICAgICAgICAgIC8qMDcgKi8KIH07CiAKQEAgLTU1MjMsODMgKzU1MjMsODMgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogI2lmZGVmIERFQlVHCiAgICAgaWYgKERFQlVHX0RFQ09ERSgpKSB7Ci0gICAgICAgIC8qIFhYWCBERUNPREVfUFJJTlRGIG1heSBiZSBjaGFuZ2VkIHRvIHNvbWV0aGluZyBtb3JlCi0gICAgICAgICAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCi0gICAgICAgICAgIGluIHRoZSBzYW1lIGZvcm1hdCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBpcyB0aGF0IHRoZSAKLSAgICAgICAgICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiT1JcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkFEQ1x0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0JCXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJBTkRcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiWE9SXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJDTVBcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkvKiBYWFggREVDT0RFX1BSSU5URiBtYXkgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZQorCSAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCisJICAgaW4gdGhlIHNhbWUgZm9ybWF0LCBldmVuIHRob3VnaCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlCisJICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLworCXN3aXRjaCAocmgpIHsKKwljYXNlIDA6CisJICAgIERFQ09ERV9QUklOVEYoIkFERFx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgREVDT0RFX1BSSU5URigiT1JcdCIpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIERFQ09ERV9QUklOVEYoIkFEQ1x0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgREVDT0RFX1BSSU5URigiU0JCXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA0OgorCSAgICBERUNPREVfUFJJTlRGKCJBTkRcdCIpOworCSAgICBicmVhazsKKwljYXNlIDU6CisJICAgIERFQ09ERV9QUklOVEYoIlNVQlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNjoKKwkgICAgREVDT0RFX1BSSU5URigiWE9SXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA3OgorCSAgICBERUNPREVfUFJJTlRGKCJDTVBcdCIpOworCSAgICBicmVhazsKKwl9CiAgICAgfQogI2VuZGlmCiAgICAgLyoga25vdyBvcGVyYXRpb24sIGRlY29kZSB0aGUgbW9kIGJ5dGUgdG8gZmluZCB0aGUgYWRkcmVzc2luZwogICAgICAgIG1vZGUuICovCiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOwotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSAoKm9wYzgyX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7Ci0gICAgICAgIGlmIChyaCAhPSA3KQotICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworCURFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gKCpvcGM4Ml9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworCWlmIChyaCAhPSA3KQorCSAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gKCpvcGM4Ml9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOwotICAgICAgICBpZiAocmggIT0gNykKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwlERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9ICgqb3BjODJfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKwlpZiAocmggIT0gNykKKwkgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9ICgqb3BjODJfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKLSAgICAgICAgaWYgKHJoICE9IDcpCi0gICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCURFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCWltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSAoKm9wYzgyX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisJaWYgKHJoICE9IDcpCisJICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9ICgqb3BjODJfYnl0ZV9vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7Ci0gICAgICAgIGlmIChyaCAhPSA3KQotICAgICAgICAgICAgKmRlc3RyZWcgPSBkZXN0dmFsOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCWltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSAoKm9wYzgyX2J5dGVfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBpbW0pOworCWlmIChyaCAhPSA3KQorCSAgICAqZGVzdHJlZyA9IGRlc3R2YWw7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTU2MDgsMjQgKzU2MDgsMjQgQEAKIHN0YXRpYyB1MTYgKCpvcGM4M193b3JkX29wZXJhdGlvbltdKSh1MTYgcywgdTE2IGQpID0KIHsKICAgICBhZGRfd29yZCwgICAgICAgICAgIC8qMDAgKi8KLSAgICBvcl93b3JkLCAgICAgICAgICAgIC8qMDEgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworICAgIG9yX3dvcmQsICAgICAgICAgICAgLyowMSAqLyAvKllZWSBVTlVTRUQgPz8/PyAqLwogICAgIGFkY193b3JkLCAgICAgICAgICAgLyowMiAqLwogICAgIHNiYl93b3JkLCAgICAgICAgICAgLyowMyAqLwotICAgIGFuZF93b3JkLCAgICAgICAgICAgLyowNCAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisgICAgYW5kX3dvcmQsICAgICAgICAgICAvKjA0ICovIC8qWVlZIFVOVVNFRCA/Pz8/ICovCiAgICAgc3ViX3dvcmQsICAgICAgICAgICAvKjA1ICovCi0gICAgeG9yX3dvcmQsICAgICAgICAgICAvKjA2ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKyAgICB4b3Jfd29yZCwgICAgICAgICAgIC8qMDYgKi8gLypZWVkgVU5VU0VEID8/Pz8gKi8KICAgICBjbXBfd29yZCwgICAgICAgICAgIC8qMDcgKi8KIH07CiAKIHN0YXRpYyB1MzIgKCpvcGM4M19sb25nX29wZXJhdGlvbltdKSh1MzIgcywgdTMyIGQpID0KIHsKICAgICBhZGRfbG9uZywgICAgICAgICAgIC8qMDAgKi8KLSAgICBvcl9sb25nLCAgICAgICAgICAgIC8qMDEgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworICAgIG9yX2xvbmcsICAgICAgICAgICAgLyowMSAqLyAvKllZWSBVTlVTRUQgPz8/PyAqLwogICAgIGFkY19sb25nLCAgICAgICAgICAgLyowMiAqLwogICAgIHNiYl9sb25nLCAgICAgICAgICAgLyowMyAqLwotICAgIGFuZF9sb25nLCAgICAgICAgICAgLyowNCAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisgICAgYW5kX2xvbmcsICAgICAgICAgICAvKjA0ICovIC8qWVlZIFVOVVNFRCA/Pz8/ICovCiAgICAgc3ViX2xvbmcsICAgICAgICAgICAvKjA1ICovCi0gICAgeG9yX2xvbmcsICAgICAgICAgICAvKjA2ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKyAgICB4b3JfbG9uZywgICAgICAgICAgIC8qMDYgKi8gLypZWVkgVU5VU0VEID8/Pz8gKi8KICAgICBjbXBfbG9uZywgICAgICAgICAgIC8qMDcgKi8KIH07CiAKQEAgLTU2NDgsMTQ3ICs1NjQ4LDE0NyBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAjaWZkZWYgREVCVUcKICAgICBpZiAoREVCVUdfREVDT0RFKCkpIHsKLSAgICAgICAgLyogWFhYIERFQ09ERV9QUklOVEYgbWF5IGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUKLSAgICAgICAgICAgZ2VuZXJhbCwgc28gdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gbGVhdmUgdGhlIHN0cmluZ3MKLSAgICAgICAgICAgaW4gdGhlIHNhbWUgZm9ybWF0LCBldmVuIHRob3VnaCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlIAotICAgICAgICAgICBhYm92ZSB0ZXN0IGlzIGRvbmUgdHdpY2UuICovCisJLyogWFhYIERFQ09ERV9QUklOVEYgbWF5IGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUKKwkgICBnZW5lcmFsLCBzbyB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBsZWF2ZSB0aGUgc3RyaW5ncworCSAgIGluIHRoZSBzYW1lIGZvcm1hdCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBpcyB0aGF0IHRoZQorCSAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiT1JcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkFEQ1x0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0JCXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJBTkRcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiWE9SXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJDTVBcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwljYXNlIDA6CisJICAgIERFQ09ERV9QUklOVEYoIkFERFx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgREVDT0RFX1BSSU5URigiT1JcdCIpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIERFQ09ERV9QUklOVEYoIkFEQ1x0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgREVDT0RFX1BSSU5URigiU0JCXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA0OgorCSAgICBERUNPREVfUFJJTlRGKCJBTkRcdCIpOworCSAgICBicmVhazsKKwljYXNlIDU6CisJICAgIERFQ09ERV9QUklOVEYoIlNVQlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNjoKKwkgICAgREVDT0RFX1BSSU5URigiWE9SXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA3OgorCSAgICBERUNPREVfUFJJTlRGKCJDTVBcdCIpOworCSAgICBicmVhazsKKwl9CiAgICAgfQogI2VuZGlmCiAgICAgLyoga25vdyBvcGVyYXRpb24sIGRlY29kZSB0aGUgbW9kIGJ5dGUgdG8gZmluZCB0aGUgYWRkcmVzc2luZwogICAgICAgIG1vZGUuICovCiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbCxpbW07CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBpbW0gPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7Ci0gICAgICAgICAgICBpZiAocmggIT0gNykKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisJICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBpbW0gPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisJICAgIGlmIChyaCAhPSA3KQorCQlzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWwsaW1tOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBpbW0gPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgzX3dvcmRfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7Ci0gICAgICAgICAgICBpZiAocmggIT0gNykKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIGltbSA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9ICgqb3BjODNfd29yZF9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKwkgICAgaWYgKHJoICE9IDcpCisJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWwsaW1tOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4M19sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOwotICAgICAgICAgICAgaWYgKHJoICE9IDcpCi0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworCSAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGM4M19sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworCSAgICBpZiAocmggIT0gNykKKwkJc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsLGltbTsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4M193b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOwotICAgICAgICAgICAgaWYgKHJoICE9IDcpCi0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBpbW0gPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wYzgzX3dvcmRfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisJICAgIGlmIChyaCAhPSA3KQorCQlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsLGltbTsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGltbSA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKLSAgICAgICAgICAgIGlmIChyaCAhPSA3KQotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKwkgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIGltbSA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKwkgICAgaWYgKHJoICE9IDcpCisJCXN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbCxpbW07CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGltbSA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfd29yZF9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKLSAgICAgICAgICAgIGlmIChyaCAhPSA3KQotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGM4M193b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBpbW0pOworCSAgICBpZiAocmggIT0gNykKKwkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIGRlc3R2YWwsaW1tOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGM4M19sb25nX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgaW1tKTsKLSAgICAgICAgICAgIGlmIChyaCAhPSA3KQotICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGM4M19sb25nX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgaW1tKTsKKwkgICAgaWYgKHJoICE9IDcpCisJCSpkZXN0cmVnID0gZGVzdHZhbDsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBkZXN0dmFsLGltbTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIGltbSA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfd29yZF9vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7Ci0gICAgICAgICAgICBpZiAocmggIT0gNykKLSAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIGltbSA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9ICgqb3BjODNfd29yZF9vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7CisJICAgIGlmIChyaCAhPSA3KQorCQkqZGVzdHJlZyA9IGRlc3R2YWw7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC01ODEwLDQwICs1ODEwLDQwIEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgdGVzdF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwl0ZXN0X2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICB0ZXN0X2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCXRlc3RfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIHRlc3RfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJdGVzdF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgdGVzdF9ieXRlKCpkZXN0cmVnLCAqc3JjcmVnKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwl0ZXN0X2J5dGUoKmRlc3RyZWcsICpzcmNyZWcpOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC01ODYzLDEwMSArNTg2MywxMDEgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgdGVzdF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgdGVzdF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICB0ZXN0X3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHRlc3Rfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgdGVzdF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc3JjcmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICB0ZXN0X3dvcmQoZGVzdHZhbCwgKnNyY3JlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHRlc3Rfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICB0ZXN0X2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICB0ZXN0X2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICB0ZXN0X3dvcmQoKmRlc3RyZWcsICpzcmNyZWcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgdGVzdF93b3JkKCpkZXN0cmVnLCAqc3JjcmVnKTsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTU5ODAsNTEgKzU5ODAsNTEgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICB0bXAgPSAqc3JjcmVnOwotICAgICAgICAqc3JjcmVnID0gZGVzdHZhbDsKLSAgICAgICAgZGVzdHZhbCA9IHRtcDsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwl0bXAgPSAqc3JjcmVnOworCSpzcmNyZWcgPSBkZXN0dmFsOworCWRlc3R2YWwgPSB0bXA7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgdG1wID0gKnNyY3JlZzsKLSAgICAgICAgKnNyY3JlZyA9IGRlc3R2YWw7Ci0gICAgICAgIGRlc3R2YWwgPSB0bXA7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJdG1wID0gKnNyY3JlZzsKKwkqc3JjcmVnID0gZGVzdHZhbDsKKwlkZXN0dmFsID0gdG1wOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIHRtcCA9ICpzcmNyZWc7Ci0gICAgICAgICpzcmNyZWcgPSBkZXN0dmFsOwotICAgICAgICBkZXN0dmFsID0gdG1wOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCXRtcCA9ICpzcmNyZWc7CisJKnNyY3JlZyA9IGRlc3R2YWw7CisJZGVzdHZhbCA9IHRtcDsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICB0bXAgPSAqc3JjcmVnOwotICAgICAgICAqc3JjcmVnID0gKmRlc3RyZWc7Ci0gICAgICAgICpkZXN0cmVnID0gdG1wOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCXRtcCA9ICpzcmNyZWc7CisJKnNyY3JlZyA9ICpkZXN0cmVnOworCSpkZXN0cmVnID0gdG1wOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02MDQ0LDEyNSArNjA0NCwxMjUgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOwotICAgICAgICAgICAgdTMyIGRlc3R2YWwsdG1wOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKnNyY3JlZzsKKwkgICAgdTMyIGRlc3R2YWwsdG1wOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICB0bXAgPSAqc3JjcmVnOwotICAgICAgICAgICAgKnNyY3JlZyA9IGRlc3R2YWw7Ci0gICAgICAgICAgICBkZXN0dmFsID0gdG1wOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpzcmNyZWc7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbCx0bXA7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHRtcCA9ICpzcmNyZWc7CisJICAgICpzcmNyZWcgPSBkZXN0dmFsOworCSAgICBkZXN0dmFsID0gdG1wOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpzcmNyZWc7CisJICAgIHUxNiBkZXN0dmFsLHRtcDsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgdG1wID0gKnNyY3JlZzsKLSAgICAgICAgICAgICpzcmNyZWcgPSBkZXN0dmFsOwotICAgICAgICAgICAgZGVzdHZhbCA9IHRtcDsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgdG1wID0gKnNyY3JlZzsKKwkgICAgKnNyY3JlZyA9IGRlc3R2YWw7CisJICAgIGRlc3R2YWwgPSB0bXA7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOwotICAgICAgICAgICAgdTMyIGRlc3R2YWwsdG1wOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKnNyY3JlZzsKKwkgICAgdTMyIGRlc3R2YWwsdG1wOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICB0bXAgPSAqc3JjcmVnOwotICAgICAgICAgICAgKnNyY3JlZyA9IGRlc3R2YWw7Ci0gICAgICAgICAgICBkZXN0dmFsID0gdG1wOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpzcmNyZWc7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbCx0bXA7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHRtcCA9ICpzcmNyZWc7CisJICAgICpzcmNyZWcgPSBkZXN0dmFsOworCSAgICBkZXN0dmFsID0gdG1wOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpzcmNyZWc7CisJICAgIHUxNiBkZXN0dmFsLHRtcDsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgdG1wID0gKnNyY3JlZzsKLSAgICAgICAgICAgICpzcmNyZWcgPSBkZXN0dmFsOwotICAgICAgICAgICAgZGVzdHZhbCA9IHRtcDsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgdG1wID0gKnNyY3JlZzsKKwkgICAgKnNyY3JlZyA9IGRlc3R2YWw7CisJICAgIGRlc3R2YWwgPSB0bXA7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOwotICAgICAgICAgICAgdTMyIGRlc3R2YWwsdG1wOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKnNyY3JlZzsKKwkgICAgdTMyIGRlc3R2YWwsdG1wOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICB0bXAgPSAqc3JjcmVnOwotICAgICAgICAgICAgKnNyY3JlZyA9IGRlc3R2YWw7Ci0gICAgICAgICAgICBkZXN0dmFsID0gdG1wOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpzcmNyZWc7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbCx0bXA7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHRtcCA9ICpzcmNyZWc7CisJICAgICpzcmNyZWcgPSBkZXN0dmFsOworCSAgICBkZXN0dmFsID0gdG1wOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpzcmNyZWc7CisJICAgIHUxNiBkZXN0dmFsLHRtcDsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgdG1wID0gKnNyY3JlZzsKLSAgICAgICAgICAgICpzcmNyZWcgPSBkZXN0dmFsOwotICAgICAgICAgICAgZGVzdHZhbCA9IHRtcDsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgdG1wID0gKnNyY3JlZzsKKwkgICAgKnNyY3JlZyA9IGRlc3R2YWw7CisJICAgIGRlc3R2YWwgPSB0bXA7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7Ci0gICAgICAgICAgICB1MzIgdG1wOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgdTMyIHRtcDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgdG1wID0gKnNyY3JlZzsKLSAgICAgICAgICAgICpzcmNyZWcgPSAqZGVzdHJlZzsKLSAgICAgICAgICAgICpkZXN0cmVnID0gdG1wOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7Ci0gICAgICAgICAgICB1MTYgdG1wOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgdG1wID0gKnNyY3JlZzsKKwkgICAgKnNyY3JlZyA9ICpkZXN0cmVnOworCSAgICAqZGVzdHJlZyA9IHRtcDsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKwkgICAgdTE2IHRtcDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgdG1wID0gKnNyY3JlZzsKLSAgICAgICAgICAgICpzcmNyZWcgPSAqZGVzdHJlZzsKLSAgICAgICAgICAgICpkZXN0cmVnID0gdG1wOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgdG1wID0gKnNyY3JlZzsKKwkgICAgKnNyY3JlZyA9ICpkZXN0cmVnOworCSAgICAqZGVzdHJlZyA9IHRtcDsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTYxODMsMzcgKzYxODMsMzcgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgKnNyY3JlZyk7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgKnNyY3JlZyk7CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgKnNyY3JlZyk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgKnNyY3JlZyk7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9ICpzcmNyZWc7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSAqc3JjcmVnOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02MjMzLDg5ICs2MjMzLDg5IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsICpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgKnNyY3JlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgKnNyY3JlZyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKnNyY3JlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsICpzcmNyZWcpOworCX0gZWxzZSB7CisJICAgIHUxNiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsICpzcmNyZWcpOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqc3JjcmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgKnNyY3JlZyk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsICpzcmNyZWcpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgKnNyY3JlZyk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSAqc3JjcmVnOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9ICpzcmNyZWc7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gKnNyY3JlZzsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTYzMzcsNDAgKzYzMzcsNDAgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IHNyY3ZhbDsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gc3JjdmFsOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gc3JjdmFsOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzcmN2YWw7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9ICpzcmNyZWc7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSAqc3JjcmVnOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02MzkwLDEwMSArNjM5MCwxMDEgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gc3JjdmFsOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gc3JjdmFsOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gKnNyY3JlZzsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gKnNyY3JlZzsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTY1MDYsNDAgKzY1MDYsNDAgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSAqc3JjcmVnOwotICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSAqc3JjcmVnOworCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNyZWcgPSBkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9ICpzcmNyZWc7Ci0gICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNyZWcgPSBkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKHJoKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9ICpzcmNyZWc7CisJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY3JlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gKnNyY3JlZzsKLSAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY3JlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gKnNyY3JlZzsKKwlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3JjcmVnID0gZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihyaCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gKnNyY3JlZzsKKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNjU2MCwzOCArNjU2MCwzOCBAQAogICoKICAqIGxlYSAgZWF4LFtlYXgrZWJ4KjJdID8/CiAgKi8KLSAgICAKKwogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgREVDT0RFX1BSSU5URigiTEVBXHQiKTsKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqc3JjcmVnID0gKHUxNilkZXN0b2Zmc2V0OwotICAgICAgICBicmVhazsKKwlzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKnNyY3JlZyA9ICh1MTYpZGVzdG9mZnNldDsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpzcmNyZWcgPSAodTE2KWRlc3RvZmZzZXQ7Ci0gICAgICAgIGJyZWFrOworCXNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqc3JjcmVnID0gKHUxNilkZXN0b2Zmc2V0OworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKnNyY3JlZyA9ICh1MTYpZGVzdG9mZnNldDsKLSAgICAgICAgYnJlYWs7CisJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpzcmNyZWcgPSAodTE2KWRlc3RvZmZzZXQ7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIC8qIHVuZGVmaW5lZC4gIERvIG5vdGhpbmcuICovCi0gICAgICAgIGJyZWFrOworCS8qIHVuZGVmaW5lZC4gIERvIG5vdGhpbmcuICovCisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTY2MTMsNDAgKzY2MTMsNDAgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0cmVnID0gZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzcmN2YWw7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBkZXN0cmVnID0gZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzcmN2YWw7CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBkZXN0cmVnID0gZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzcmN2YWw7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gKnNyY3JlZzsKKwlicmVhazsKICAgICB9CiAgICAgLyoKICAgICAgKiBDbGVhbiB1cCwgYW5kIHJlc2V0IGFsbCB0aGUgUl94U1AgcG9pbnRlcnMgdG8gdGhlIGNvcnJlY3QKQEAgLTY2NzEsODQgKzY2NzEsODQgQEAKICAgICBERUNPREVfUFJJTlRGKCJQT1BcdCIpOwogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgaWYgKHJoICE9IDApIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBERUNPREUgT0YgT1BDT0RFIDhGXG4iKTsKLSAgICAgICAgSEFMVF9TWVMoKTsKKwlERUNPREVfUFJJTlRGKCJJTExFR0FMIERFQ09ERSBPRiBPUENPREUgOEZcbiIpOworCUhBTFRfU1lTKCk7CiAgICAgfQogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBwb3BfbG9uZygpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHBvcF93b3JkKCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IHBvcF93b3JkKCk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBwb3BfbG9uZygpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHBvcF93b3JkKCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IHBvcF93b3JkKCk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBwb3BfbG9uZygpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHBvcF93b3JkKCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IHBvcF93b3JkKCk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gcG9wX2xvbmcoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBwb3BfbG9uZygpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBwb3Bfd29yZCgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHBvcF93b3JkKCk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02Nzc3LDE5ICs2Nzc3LDE5IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUNYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUNYXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxDWFxuIik7CisJREVDT0RFX1BSSU5URigiWENIR1x0QVgsQ1hcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKLSAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VDWDsKLSAgICAgICAgTS54ODYuUl9FQ1ggPSB0bXA7CisJdG1wID0gTS54ODYuUl9FQVg7CisJTS54ODYuUl9FQVggPSBNLng4Ni5SX0VDWDsKKwlNLng4Ni5SX0VDWCA9IHRtcDsKICAgICB9IGVsc2UgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOwotICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9DWDsKLSAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpdG1wOworCXRtcCA9IE0ueDg2LlJfQVg7CisJTS54ODYuUl9BWCA9IE0ueDg2LlJfQ1g7CisJTS54ODYuUl9DWCA9ICh1MTYpdG1wOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02ODA1LDE5ICs2ODA1LDE5IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURYXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxEWFxuIik7CisJREVDT0RFX1BSSU5URigiWENIR1x0QVgsRFhcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKLSAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VEWDsKLSAgICAgICAgTS54ODYuUl9FRFggPSB0bXA7CisJdG1wID0gTS54ODYuUl9FQVg7CisJTS54ODYuUl9FQVggPSBNLng4Ni5SX0VEWDsKKwlNLng4Ni5SX0VEWCA9IHRtcDsKICAgICB9IGVsc2UgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOwotICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9EWDsKLSAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpdG1wOworCXRtcCA9IE0ueDg2LlJfQVg7CisJTS54ODYuUl9BWCA9IE0ueDg2LlJfRFg7CisJTS54ODYuUl9EWCA9ICh1MTYpdG1wOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02ODMzLDE5ICs2ODMzLDE5IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJYXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxCWFxuIik7CisJREVDT0RFX1BSSU5URigiWENIR1x0QVgsQlhcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKLSAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCWDsKLSAgICAgICAgTS54ODYuUl9FQlggPSB0bXA7CisJdG1wID0gTS54ODYuUl9FQVg7CisJTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCWDsKKwlNLng4Ni5SX0VCWCA9IHRtcDsKICAgICB9IGVsc2UgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOwotICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9CWDsKLSAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpdG1wOworCXRtcCA9IE0ueDg2LlJfQVg7CisJTS54ODYuUl9BWCA9IE0ueDg2LlJfQlg7CisJTS54ODYuUl9CWCA9ICh1MTYpdG1wOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02ODYxLDE5ICs2ODYxLDE5IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNQXG4iKTsKKwlERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNQXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxTUFxuIik7CisJREVDT0RFX1BSSU5URigiWENIR1x0QVgsU1BcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKLSAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTUDsKLSAgICAgICAgTS54ODYuUl9FU1AgPSB0bXA7CisJdG1wID0gTS54ODYuUl9FQVg7CisJTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTUDsKKwlNLng4Ni5SX0VTUCA9IHRtcDsKICAgICB9IGVsc2UgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOwotICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9TUDsKLSAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpdG1wOworCXRtcCA9IE0ueDg2LlJfQVg7CisJTS54ODYuUl9BWCA9IE0ueDg2LlJfU1A7CisJTS54ODYuUl9TUCA9ICh1MTYpdG1wOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02ODg5LDE5ICs2ODg5LDE5IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJQXG4iKTsKKwlERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJQXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxCUFxuIik7CisJREVDT0RFX1BSSU5URigiWENIR1x0QVgsQlBcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKLSAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCUDsKLSAgICAgICAgTS54ODYuUl9FQlAgPSB0bXA7CisJdG1wID0gTS54ODYuUl9FQVg7CisJTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCUDsKKwlNLng4Ni5SX0VCUCA9IHRtcDsKICAgICB9IGVsc2UgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOwotICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9CUDsKLSAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpdG1wOworCXRtcCA9IE0ueDg2LlJfQVg7CisJTS54ODYuUl9BWCA9IE0ueDg2LlJfQlA7CisJTS54ODYuUl9CUCA9ICh1MTYpdG1wOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02OTE3LDE5ICs2OTE3LDE5IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNJXG4iKTsKKwlERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNJXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxTSVxuIik7CisJREVDT0RFX1BSSU5URigiWENIR1x0QVgsU0lcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKLSAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTSTsKLSAgICAgICAgTS54ODYuUl9FU0kgPSB0bXA7CisJdG1wID0gTS54ODYuUl9FQVg7CisJTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTSTsKKwlNLng4Ni5SX0VTSSA9IHRtcDsKICAgICB9IGVsc2UgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOwotICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9TSTsKLSAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpdG1wOworCXRtcCA9IE0ueDg2LlJfQVg7CisJTS54ODYuUl9BWCA9IE0ueDg2LlJfU0k7CisJTS54ODYuUl9TSSA9ICh1MTYpdG1wOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02OTQ1LDE5ICs2OTQ1LDE5IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURJXG4iKTsKKwlERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURJXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRBWCxESVxuIik7CisJREVDT0RFX1BSSU5URigiWENIR1x0QVgsRElcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0VBWDsKLSAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VESTsKLSAgICAgICAgTS54ODYuUl9FREkgPSB0bXA7CisJdG1wID0gTS54ODYuUl9FQVg7CisJTS54ODYuUl9FQVggPSBNLng4Ni5SX0VESTsKKwlNLng4Ni5SX0VESSA9IHRtcDsKICAgICB9IGVsc2UgewotICAgICAgICB0bXAgPSBNLng4Ni5SX0FYOwotICAgICAgICBNLng4Ni5SX0FYID0gTS54ODYuUl9ESTsKLSAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpdG1wOworCXRtcCA9IE0ueDg2LlJfQVg7CisJTS54ODYuUl9BWCA9IE0ueDg2LlJfREk7CisJTS54ODYuUl9ESSA9ICh1MTYpdG1wOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC02OTcxLDIzICs2OTcxLDIzIEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiQ1dERVxuIik7CisJREVDT0RFX1BSSU5URigiQ1dERVxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiQ0JXXG4iKTsKKwlERUNPREVfUFJJTlRGKCJDQldcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBpZiAoTS54ODYuUl9BWCAmIDB4ODAwMCkgewotICAgICAgICAgICAgTS54ODYuUl9FQVggfD0gMHhmZmZmMDAwMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE0ueDg2LlJfRUFYICY9IDB4MDAwMGZmZmY7Ci0gICAgICAgIH0KKwlpZiAoTS54ODYuUl9BWCAmIDB4ODAwMCkgeworCSAgICBNLng4Ni5SX0VBWCB8PSAweGZmZmYwMDAwOworCX0gZWxzZSB7CisJICAgIE0ueDg2LlJfRUFYICY9IDB4MDAwMGZmZmY7CisJfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChNLng4Ni5SX0FMICYgMHg4MCkgewotICAgICAgICAgICAgTS54ODYuUl9BSCA9IDB4ZmY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBNLng4Ni5SX0FIID0gMHgwOwotICAgICAgICB9CisJaWYgKE0ueDg2LlJfQUwgJiAweDgwKSB7CisJICAgIE0ueDg2LlJfQUggPSAweGZmOworCX0gZWxzZSB7CisJICAgIE0ueDg2LlJfQUggPSAweDA7CisJfQogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC03MDAxLDI0ICs3MDAxLDI0IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiQ0RRXG4iKTsKKwlERUNPREVfUFJJTlRGKCJDRFFcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkNXRFxuIik7CisJREVDT0RFX1BSSU5URigiQ1dEXG4iKTsKICAgICB9CiAgICAgREVDT0RFX1BSSU5URigiQ1dEXG4iKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBpZiAoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSB7Ci0gICAgICAgICAgICBNLng4Ni5SX0VEWCA9IDB4ZmZmZmZmZmY7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBNLng4Ni5SX0VEWCA9IDB4MDsKLSAgICAgICAgfQorCWlmIChNLng4Ni5SX0VBWCAmIDB4ODAwMDAwMDApIHsKKwkgICAgTS54ODYuUl9FRFggPSAweGZmZmZmZmZmOworCX0gZWxzZSB7CisJICAgIE0ueDg2LlJfRURYID0gMHgwOworCX0KICAgICB9IGVsc2UgewotICAgICAgICBpZiAoTS54ODYuUl9BWCAmIDB4ODAwMCkgewotICAgICAgICAgICAgTS54ODYuUl9EWCA9IDB4ZmZmZjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE0ueDg2LlJfRFggPSAweDA7Ci0gICAgICAgIH0KKwlpZiAoTS54ODYuUl9BWCAmIDB4ODAwMCkgeworCSAgICBNLng4Ni5SX0RYID0gMHhmZmZmOworCX0gZWxzZSB7CisJICAgIE0ueDg2LlJfRFggPSAweDA7CisJfQogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC03MDQxLDcgKzcwNDEsNyBAQAogCUNBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBmYXJzZWcsIGZhcm9mZiwgIkZBUiAiKTsKIAogICAgIC8qIFhYWAotICAgICAqIAorICAgICAqCiAgICAgICogSG9va2VkIGludGVycnVwdCB2ZWN0b3JzIGNhbGxpbmcgaW50byBvdXIgIkJJT1MiIHdpbGwgY2F1c2UKICAgICAgKiBwcm9ibGVtcyB1bmxlc3MgYWxsIGludGVyc2VnbWVudCBzdHVmZiBpcyBjaGVja2VkIGZvciBCSU9TCiAgICAgICogYWNjZXNzLiAgQ2hlY2sgbmVlZGVkIGhlcmUuICBGb3IgbW9tZW50LCBsZXQgaXQgYWxvbmUuCkBAIC03MDc5LDE4ICs3MDc5LDE4IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIRkRcbiIpOworCURFQ09ERV9QUklOVEYoIlBVU0hGRFxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEZcbiIpOworCURFQ09ERV9QUklOVEYoIlBVU0hGXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKIAogICAgIC8qIGNsZWFyIG91dCAqYWxsKiBiaXRzIG5vdCByZXByZXNlbnRpbmcgZmxhZ3MsIGFuZCB0dXJuIG9uIHJlYWwgYml0cyAqLwogICAgIGZsYWdzID0gKE0ueDg2LlJfRUZMRyAmIEZfTVNLKSB8IEZfQUxXQVlTX09OOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBwdXNoX2xvbmcoZmxhZ3MpOworCXB1c2hfbG9uZyhmbGFncyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaF93b3JkKCh1MTYpZmxhZ3MpOworCXB1c2hfd29yZCgodTE2KWZsYWdzKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNzEwNCwxNSArNzEwNCwxNSBAQAogewogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlBPUEZEXG4iKTsKKwlERUNPREVfUFJJTlRGKCJQT1BGRFxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiUE9QRlxuIik7CisJREVDT0RFX1BSSU5URigiUE9QRlxuIik7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRUZMRyA9IHBvcF9sb25nKCk7CisJTS54ODYuUl9FRkxHID0gcG9wX2xvbmcoKTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0ZMRyA9IHBvcF93b3JkKCk7CisJTS54ODYuUl9GTEcgPSBwb3Bfd29yZCgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC03MTgxLDE1ICs3MTgxLDE1IEBACiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRFQVgsWyUwNHhdXG4iLCBvZmZzZXQpOworCURFQ09ERV9QUklOVEYyKCJNT1ZcdEVBWCxbJTA0eF1cbiIsIG9mZnNldCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URjIoIk1PVlx0QVgsWyUwNHhdXG4iLCBvZmZzZXQpOworCURFQ09ERV9QUklOVEYyKCJNT1ZcdEFYLFslMDR4XVxuIiwgb2Zmc2V0KTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FQVggPSBmZXRjaF9kYXRhX2xvbmcob2Zmc2V0KTsKKwlNLng4Ni5SX0VBWCA9IGZldGNoX2RhdGFfbG9uZyhvZmZzZXQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQVggPSBmZXRjaF9kYXRhX3dvcmQob2Zmc2V0KTsKKwlNLng4Ni5SX0FYID0gZmV0Y2hfZGF0YV93b3JkKG9mZnNldCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTcyMjQsMTUgKzcyMjQsMTUgQEAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIG9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdFslMDR4XSxFQVhcbiIsIG9mZnNldCk7CisJREVDT0RFX1BSSU5URjIoIk1PVlx0WyUwNHhdLEVBWFxuIiwgb2Zmc2V0KTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRbJTA0eF0sQVhcbiIsIG9mZnNldCk7CisJREVDT0RFX1BSSU5URjIoIk1PVlx0WyUwNHhdLEFYXG4iLCBvZmZzZXQpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBzdG9yZV9kYXRhX2xvbmcob2Zmc2V0LCBNLng4Ni5SX0VBWCk7CisJc3RvcmVfZGF0YV9sb25nKG9mZnNldCwgTS54ODYuUl9FQVgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0b3JlX2RhdGFfd29yZChvZmZzZXQsIE0ueDg2LlJfQVgpOworCXN0b3JlX2RhdGFfd29yZChvZmZzZXQsIE0ueDg2LlJfQVgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC03MjUxLDIzICs3MjUxLDIzIEBACiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHRCWVRFXG4iKTsKICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLwotICAgICAgICBpbmMgPSAtMTsKKwlpbmMgPSAtMTsKICAgICBlbHNlCi0gICAgICAgIGluYyA9IDE7CisJaW5jID0gMTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGNvdW50ID0gMTsKICAgICBpZiAoTS54ODYubW9kZSAmIChTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpKSB7Ci0gICAgICAgIC8qIGRvbnQgY2FyZSB3aGV0aGVyIFJFUEUgb3IgUkVQTkUgKi8KLSAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCi0gICAgICAgIGNvdW50ID0gTS54ODYuUl9DWDsKLSAgICAgICAgTS54ODYuUl9DWCA9IDA7Ci0gICAgICAgIE0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworCS8qIGRvbnQgY2FyZSB3aGV0aGVyIFJFUEUgb3IgUkVQTkUgKi8KKwkvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKwljb3VudCA9IE0ueDg2LlJfQ1g7CisJTS54ODYuUl9DWCA9IDA7CisJTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CiAgICAgfQogICAgIHdoaWxlIChjb3VudC0tKSB7Ci0gICAgICAgIHZhbCA9IGZldGNoX2RhdGFfYnl0ZShNLng4Ni5SX1NJKTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCB2YWwpOwotICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKLSAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CisJdmFsID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworCXN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgdmFsKTsKKwlNLng4Ni5SX1NJICs9IGluYzsKKwlNLng4Ni5SX0RJICs9IGluYzsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNzI4NSwzNyArNzI4NSwzNyBAQAogCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiTU9WU1x0RFdPUkRcbiIpOwotICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLwotICAgICAgICAgICAgaW5jID0gLTQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluYyA9IDQ7CisJREVDT0RFX1BSSU5URigiTU9WU1x0RFdPUkRcbiIpOworCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisJICAgIGluYyA9IC00OworCWVsc2UKKwkgICAgaW5jID0gNDsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHRXT1JEXG4iKTsKLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KLSAgICAgICAgICAgIGluYyA9IC0yOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbmMgPSAyOworCURFQ09ERV9QUklOVEYoIk1PVlNcdFdPUkRcbiIpOworCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisJICAgIGluYyA9IC0yOworCWVsc2UKKwkgICAgaW5jID0gMjsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBjb3VudCA9IDE7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgewotICAgICAgICAvKiBkb250IGNhcmUgd2hldGhlciBSRVBFIG9yIFJFUE5FICovCi0gICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLwotICAgICAgICBjb3VudCA9IE0ueDg2LlJfQ1g7Ci0gICAgICAgIE0ueDg2LlJfQ1ggPSAwOwotICAgICAgICBNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKwkvKiBkb250IGNhcmUgd2hldGhlciBSRVBFIG9yIFJFUE5FICovCisJLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisJY291bnQgPSBNLng4Ni5SX0NYOworCU0ueDg2LlJfQ1ggPSAwOworCU0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOwogICAgIH0KICAgICB3aGlsZSAoY291bnQtLSkgewotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgdmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfd29yZChNLng4Ni5SX1NJKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgKHUxNil2YWwpOwotICAgICAgICB9Ci0gICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOwotICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdmFsID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworCSAgICBzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksIHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworCSAgICBzdG9yZV9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksICh1MTYpdmFsKTsKKwl9CisJTS54ODYuUl9TSSArPSBpbmM7CisJTS54ODYuUl9ESSArPSBpbmM7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTczMzQsNDQgKzczMzQsNDQgQEAKICAgICBERUNPREVfUFJJTlRGKCJDTVBTXHRCWVRFXG4iKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCi0gICAgICAgIGluYyA9IC0xOworCWluYyA9IC0xOwogICAgIGVsc2UKLSAgICAgICAgaW5jID0gMTsKKwlpbmMgPSAxOwogCiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBFKSB7Ci0gICAgICAgIC8qIFJFUEUgICovCi0gICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLwotICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7Ci0gICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOwotICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7Ci0gICAgICAgICAgICAgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKLSAgICAgICAgICAgIE0ueDg2LlJfQ1ggLT0gMTsKLSAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOwotICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7Ci0gICAgICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikgPT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOworCS8qIFJFUEUgICovCisJLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisJd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworCSAgICB2YWwxID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworCSAgICB2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKwkJICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKKwkgICAgTS54ODYuUl9DWCAtPSAxOworCSAgICBNLng4Ni5SX1NJICs9IGluYzsKKwkgICAgTS54ODYuUl9ESSArPSBpbmM7CisJICAgIGlmIChBQ0NFU1NfRkxBRyhGX1pGKSA9PSAwKQorCQlicmVhazsKKwl9CisJTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKICAgICB9IGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgewotICAgICAgICAvKiBSRVBORSAgKi8KLSAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCi0gICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKLSAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX2J5dGUoTS54ODYuUl9TSSk7Ci0gICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKLSAgICAgICAgICAgIGNtcF9ieXRlKHZhbDEsIHZhbDIpOwotICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOwotICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7Ci0gICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKLSAgICAgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX1pGKSkKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLwotICAgICAgICB9Ci0gICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUE5FOworCS8qIFJFUE5FICAqLworCS8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworCXdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKKwkgICAgdmFsMSA9IGZldGNoX2RhdGFfYnl0ZShNLng4Ni5SX1NJKTsKKwkgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisJICAgIGNtcF9ieXRlKHZhbDEsIHZhbDIpOworCSAgICBNLng4Ni5SX0NYIC09IDE7CisJICAgIE0ueDg2LlJfU0kgKz0gaW5jOworCSAgICBNLng4Ni5SX0RJICs9IGluYzsKKwkgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQorCQlicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworCX0KKwlNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBORTsKICAgICB9IGVsc2UgewotICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOwotICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKLSAgICAgICAgY21wX2J5dGUodmFsMSwgdmFsMik7Ci0gICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOwotICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKwl2YWwxID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworCXZhbDIgPSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworCWNtcF9ieXRlKHZhbDEsIHZhbDIpOworCU0ueDg2LlJfU0kgKz0gaW5jOworCU0ueDg2LlJfREkgKz0gaW5jOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC03Mzg4LDcxICs3Mzg4LDcxIEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJDTVBTXHREV09SRFxuIik7Ci0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCi0gICAgICAgICAgICBpbmMgPSAtNDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5jID0gNDsKKwlERUNPREVfUFJJTlRGKCJDTVBTXHREV09SRFxuIik7CisJaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKwkgICAgaW5jID0gLTQ7CisJZWxzZQorCSAgICBpbmMgPSA0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFNcdFdPUkRcbiIpOwotICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLwotICAgICAgICAgICAgaW5jID0gLTI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluYyA9IDI7CisJREVDT0RFX1BSSU5URigiQ01QU1x0V09SRFxuIik7CisJaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKwkgICAgaW5jID0gLTI7CisJZWxzZQorCSAgICBpbmMgPSAyOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQRSkgewotICAgICAgICAvKiBSRVBFICAqLwotICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KLSAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgewotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKLSAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKLSAgICAgICAgICAgICAgICBjbXBfbG9uZyh2YWwxLCB2YWwyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfd29yZChNLng4Ni5SX1NJKTsKLSAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKLSAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KXZhbDEsICh1MTYpdmFsMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7Ci0gICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKLSAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOwotICAgICAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpID09IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKwkvKiBSRVBFICAqLworCS8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworCXdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXZhbDEgPSBmZXRjaF9kYXRhX2xvbmcoTS54ODYuUl9TSSk7CisJCXZhbDIgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworCQljbXBfbG9uZyh2YWwxLCB2YWwyKTsKKwkgICAgfSBlbHNlIHsKKwkJdmFsMSA9IGZldGNoX2RhdGFfd29yZChNLng4Ni5SX1NJKTsKKwkJdmFsMiA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisJCWNtcF93b3JkKCh1MTYpdmFsMSwgKHUxNil2YWwyKTsKKwkgICAgfQorCSAgICBNLng4Ni5SX0NYIC09IDE7CisJICAgIE0ueDg2LlJfU0kgKz0gaW5jOworCSAgICBNLng4Ni5SX0RJICs9IGluYzsKKwkgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpID09IDApCisJCWJyZWFrOworCX0KKwlNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOwogICAgIH0gZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7Ci0gICAgICAgIC8qIFJFUE5FICAqLwotICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KLSAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgewotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKLSAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKLSAgICAgICAgICAgICAgICBjbXBfbG9uZyh2YWwxLCB2YWwyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfd29yZChNLng4Ni5SX1NJKTsKLSAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKLSAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KXZhbDEsICh1MTYpdmFsMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7Ci0gICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKLSAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOwotICAgICAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiB6ZXJvIGZsYWcgc2V0IG1lYW5zIGVxdWFsICovCi0gICAgICAgIH0KLSAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CisJLyogUkVQTkUgICovCisJLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisJd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworCSAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkJdmFsMSA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKwkJdmFsMiA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisJCWNtcF9sb25nKHZhbDEsIHZhbDIpOworCSAgICB9IGVsc2UgeworCQl2YWwxID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworCQl2YWwyID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKwkJY21wX3dvcmQoKHUxNil2YWwxLCAodTE2KXZhbDIpOworCSAgICB9CisJICAgIE0ueDg2LlJfQ1ggLT0gMTsKKwkgICAgTS54ODYuUl9TSSArPSBpbmM7CisJICAgIE0ueDg2LlJfREkgKz0gaW5jOworCSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikpCisJCWJyZWFrOyAgICAgICAgICAvKiB6ZXJvIGZsYWcgc2V0IG1lYW5zIGVxdWFsICovCisJfQorCU0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUE5FOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKLSAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOwotICAgICAgICAgICAgY21wX2xvbmcodmFsMSwgdmFsMik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOwotICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7Ci0gICAgICAgICAgICBjbXBfd29yZCgodTE2KXZhbDEsICh1MTYpdmFsMik7Ci0gICAgICAgIH0KLSAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7Ci0gICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB2YWwxID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworCSAgICB2YWwyID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKwkgICAgY21wX2xvbmcodmFsMSwgdmFsMik7CisJfSBlbHNlIHsKKwkgICAgdmFsMSA9IGZldGNoX2RhdGFfd29yZChNLng4Ni5SX1NJKTsKKwkgICAgdmFsMiA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisJICAgIGNtcF93b3JkKCh1MTYpdmFsMSwgKHUxNil2YWwyKTsKKwl9CisJTS54ODYuUl9TSSArPSBpbmM7CisJTS54ODYuUl9ESSArPSBpbmM7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTc0ODYsMTggKzc0ODYsMTggQEAKIAogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEVBWCwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJURVNUXHRFQVgsIik7CisJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRBWCwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJURVNUXHRBWCwiKTsKKwlzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOwogICAgIH0KICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHNyY3ZhbCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgdGVzdF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworCXRlc3RfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKICAgICB9IGVsc2UgewotICAgICAgICB0ZXN0X3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworCXRlc3Rfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTc1MTQsMjIgKzc1MTQsMjIgQEAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIERFQ09ERV9QUklOVEYoIlNUT1NcdEJZVEVcbiIpOwogICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCi0gICAgICAgIGluYyA9IC0xOworCWluYyA9IC0xOwogICAgIGVsc2UKLSAgICAgICAgaW5jID0gMTsKKwlpbmMgPSAxOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgewotICAgICAgICAvKiBkb250IGNhcmUgd2hldGhlciBSRVBFIG9yIFJFUE5FICovCi0gICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLwotICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksIE0ueDg2LlJfQUwpOwotICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOwotICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7Ci0gICAgICAgIH0KLSAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CisJLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworCS8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworCXdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKKwkgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FMKTsKKwkgICAgTS54ODYuUl9DWCAtPSAxOworCSAgICBNLng4Ni5SX0RJICs9IGluYzsKKwl9CisJTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FMKTsKLSAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CisJc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FMKTsKKwlNLng4Ni5SX0RJICs9IGluYzsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNzU0NiwzNCArNzU0NiwzNCBAQAogCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiU1RPU1x0RFdPUkRcbiIpOwotICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLwotICAgICAgICAgICAgaW5jID0gLTQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluYyA9IDQ7CisJREVDT0RFX1BSSU5URigiU1RPU1x0RFdPUkRcbiIpOworCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisJICAgIGluYyA9IC00OworCWVsc2UKKwkgICAgaW5jID0gNDsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJTVE9TXHRXT1JEXG4iKTsKLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KLSAgICAgICAgICAgIGluYyA9IC0yOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbmMgPSAyOworCURFQ09ERV9QUklOVEYoIlNUT1NcdFdPUkRcbiIpOworCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisJICAgIGluYyA9IC0yOworCWVsc2UKKwkgICAgaW5jID0gMjsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBjb3VudCA9IDE7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgewotICAgICAgICAvKiBkb250IGNhcmUgd2hldGhlciBSRVBFIG9yIFJFUE5FICovCi0gICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLwotICAgICAgICBjb3VudCA9IE0ueDg2LlJfQ1g7Ci0gICAgICAgIE0ueDg2LlJfQ1ggPSAwOwotICAgICAgICBNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKwkvKiBkb250IGNhcmUgd2hldGhlciBSRVBFIG9yIFJFUE5FICovCisJLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisJY291bnQgPSBNLng4Ni5SX0NYOworCU0ueDg2LlJfQ1ggPSAwOworCU0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOwogICAgIH0KICAgICB3aGlsZSAoY291bnQtLSkgewotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgTS54ODYuUl9FQVgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FYKTsKLSAgICAgICAgfQotICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0VBWCk7CisJfSBlbHNlIHsKKwkgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FYKTsKKwl9CisJTS54ODYuUl9ESSArPSBpbmM7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTc1OTEsMjEgKzc1OTEsMjEgQEAKICAgICBERUNPREVfUFJJTlRGKCJMT0RTXHRCWVRFXG4iKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCi0gICAgICAgIGluYyA9IC0xOworCWluYyA9IC0xOwogICAgIGVsc2UKLSAgICAgICAgaW5jID0gMTsKKwlpbmMgPSAxOwogICAgIGlmIChNLng4Ni5tb2RlICYgKFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSkpIHsKLSAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLwotICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KLSAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgewotICAgICAgICAgICAgTS54ODYuUl9BTCA9IGZldGNoX2RhdGFfYnl0ZShNLng4Ni5SX1NJKTsKLSAgICAgICAgICAgIE0ueDg2LlJfQ1ggLT0gMTsKLSAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOwotICAgICAgICB9Ci0gICAgICAgIE0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworCS8qIGRvbnQgY2FyZSB3aGV0aGVyIFJFUEUgb3IgUkVQTkUgKi8KKwkvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKwl3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CisJICAgIE0ueDg2LlJfQUwgPSBmZXRjaF9kYXRhX2J5dGUoTS54ODYuUl9TSSk7CisJICAgIE0ueDg2LlJfQ1ggLT0gMTsKKwkgICAgTS54ODYuUl9TSSArPSBpbmM7CisJfQorCU0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQUwgPSBmZXRjaF9kYXRhX2J5dGUoTS54ODYuUl9TSSk7Ci0gICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworCU0ueDg2LlJfQUwgPSBmZXRjaF9kYXRhX2J5dGUoTS54ODYuUl9TSSk7CisJTS54ODYuUl9TSSArPSBpbmM7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTc2MjIsMzQgKzc2MjIsMzQgQEAKIAogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkxPRFNcdERXT1JEXG4iKTsKLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KLSAgICAgICAgICAgIGluYyA9IC00OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbmMgPSA0OworCURFQ09ERV9QUklOVEYoIkxPRFNcdERXT1JEXG4iKTsKKwlpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworCSAgICBpbmMgPSAtNDsKKwllbHNlCisJICAgIGluYyA9IDQ7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiTE9EU1x0V09SRFxuIik7Ci0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCi0gICAgICAgICAgICBpbmMgPSAtMjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5jID0gMjsKKwlERUNPREVfUFJJTlRGKCJMT0RTXHRXT1JEXG4iKTsKKwlpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworCSAgICBpbmMgPSAtMjsKKwllbHNlCisJICAgIGluYyA9IDI7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgY291bnQgPSAxOwogICAgIGlmIChNLng4Ni5tb2RlICYgKFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSkpIHsKLSAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLwotICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KLSAgICAgICAgY291bnQgPSBNLng4Ni5SX0NYOwotICAgICAgICBNLng4Ni5SX0NYID0gMDsKLSAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CisJLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworCS8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworCWNvdW50ID0gTS54ODYuUl9DWDsKKwlNLng4Ni5SX0NYID0gMDsKKwlNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKICAgICB9CiAgICAgd2hpbGUgKGNvdW50LS0pIHsKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICBNLng4Ni5SX0VBWCA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIE0ueDg2LlJfQVggPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7Ci0gICAgICAgIH0KLSAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIE0ueDg2LlJfRUFYID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworCX0gZWxzZSB7CisJICAgIE0ueDg2LlJfQVggPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisJfQorCU0ueDg2LlJfU0kgKz0gaW5jOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC03NjY4LDM3ICs3NjY4LDM3IEBACiAgICAgREVDT0RFX1BSSU5URigiU0NBU1x0QllURVxuIik7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLwotICAgICAgICBpbmMgPSAtMTsKKwlpbmMgPSAtMTsKICAgICBlbHNlCi0gICAgICAgIGluYyA9IDE7CisJaW5jID0gMTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUEUpIHsKLSAgICAgICAgLyogUkVQRSAgKi8KLSAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCi0gICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKLSAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOwotICAgICAgICAgICAgY21wX2J5dGUoTS54ODYuUl9BTCwgdmFsMik7Ci0gICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7Ci0gICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKLSAgICAgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX1pGKSA9PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUEU7CisJLyogUkVQRSAgKi8KKwkvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKwl3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CisJICAgIHZhbDIgPSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworCSAgICBjbXBfYnl0ZShNLng4Ni5SX0FMLCB2YWwyKTsKKwkgICAgTS54ODYuUl9DWCAtPSAxOworCSAgICBNLng4Ni5SX0RJICs9IGluYzsKKwkgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpID09IDApCisJCWJyZWFrOworCX0KKwlNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOwogICAgIH0gZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7Ci0gICAgICAgIC8qIFJFUE5FICAqLwotICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KLSAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgewotICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7Ci0gICAgICAgICAgICBjbXBfYnl0ZShNLng4Ni5SX0FMLCB2YWwyKTsKLSAgICAgICAgICAgIE0ueDg2LlJfQ1ggLT0gMTsKLSAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOwotICAgICAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiB6ZXJvIGZsYWcgc2V0IG1lYW5zIGVxdWFsICovCi0gICAgICAgIH0KLSAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CisJLyogUkVQTkUgICovCisJLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisJd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworCSAgICB2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKwkgICAgY21wX2J5dGUoTS54ODYuUl9BTCwgdmFsMik7CisJICAgIE0ueDg2LlJfQ1ggLT0gMTsKKwkgICAgTS54ODYuUl9ESSArPSBpbmM7CisJICAgIGlmIChBQ0NFU1NfRkxBRyhGX1pGKSkKKwkJYnJlYWs7ICAgICAgICAgIC8qIHplcm8gZmxhZyBzZXQgbWVhbnMgZXF1YWwgKi8KKwl9CisJTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7Ci0gICAgICAgIGNtcF9ieXRlKE0ueDg2LlJfQUwsIHZhbDIpOwotICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKwl2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKwljbXBfYnl0ZShNLng4Ni5SX0FMLCB2YWwyKTsKKwlNLng4Ni5SX0RJICs9IGluYzsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNzcxNSw2MiArNzcxNSw2MiBAQAogCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiU0NBU1x0RFdPUkRcbiIpOwotICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLwotICAgICAgICAgICAgaW5jID0gLTQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluYyA9IDQ7CisJREVDT0RFX1BSSU5URigiU0NBU1x0RFdPUkRcbiIpOworCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisJICAgIGluYyA9IC00OworCWVsc2UKKwkgICAgaW5jID0gNDsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJTQ0FTXHRXT1JEXG4iKTsKLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KLSAgICAgICAgICAgIGluYyA9IC0yOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbmMgPSAyOworCURFQ09ERV9QUklOVEYoIlNDQVNcdFdPUkRcbiIpOworCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisJICAgIGluYyA9IC0yOworCWVsc2UKKwkgICAgaW5jID0gMjsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUEUpIHsKLSAgICAgICAgLyogUkVQRSAgKi8KLSAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCi0gICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7Ci0gICAgICAgICAgICAgICAgY21wX2xvbmcoTS54ODYuUl9FQVgsIHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7Ci0gICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOwotICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7Ci0gICAgICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikgPT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOworCS8qIFJFUEUgICovCisJLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisJd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworCSAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkJdmFsID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKwkJY21wX2xvbmcoTS54ODYuUl9FQVgsIHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXZhbCA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisJCWNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpdmFsKTsKKwkgICAgfQorCSAgICBNLng4Ni5SX0NYIC09IDE7CisJICAgIE0ueDg2LlJfREkgKz0gaW5jOworCSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikgPT0gMCkKKwkJYnJlYWs7CisJfQorCU0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUEU7CiAgICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKLSAgICAgICAgLyogUkVQTkUgICovCi0gICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLwotICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOwotICAgICAgICAgICAgICAgIGNtcF9sb25nKE0ueDg2LlJfRUFYLCB2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOwotICAgICAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpdmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE0ueDg2LlJfQ1ggLT0gMTsKLSAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOwotICAgICAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiB6ZXJvIGZsYWcgc2V0IG1lYW5zIGVxdWFsICovCi0gICAgICAgIH0KLSAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CisJLyogUkVQTkUgICovCisJLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisJd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworCSAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkJdmFsID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKwkJY21wX2xvbmcoTS54ODYuUl9FQVgsIHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXZhbCA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisJCWNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpdmFsKTsKKwkgICAgfQorCSAgICBNLng4Ni5SX0NYIC09IDE7CisJICAgIE0ueDg2LlJfREkgKz0gaW5jOworCSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikpCisJCWJyZWFrOyAgICAgICAgICAvKiB6ZXJvIGZsYWcgc2V0IG1lYW5zIGVxdWFsICovCisJfQorCU0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUE5FOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKLSAgICAgICAgICAgIGNtcF9sb25nKE0ueDg2LlJfRUFYLCB2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKLSAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpdmFsKTsKLSAgICAgICAgfQotICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdmFsID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKwkgICAgY21wX2xvbmcoTS54ODYuUl9FQVgsIHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKwkgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworCX0KKwlNLng4Ni5SX0RJICs9IGluYzsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtNzkzMCwxOCArNzkzMCwxOCBAQAogCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFQVgsIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CisJREVDT0RFX1BSSU5URigiTU9WXHRFQVgsIik7CisJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEFYLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworCURFQ09ERV9QUklOVEYoIk1PVlx0QVgsIik7CisJc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKICAgICB9CiAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRUFYID0gc3JjdmFsOworCU0ueDg2LlJfRUFYID0gc3JjdmFsOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQVggPSAodTE2KXNyY3ZhbDsKKwlNLng4Ni5SX0FYID0gKHUxNilzcmN2YWw7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTc5NTcsMTggKzc5NTcsMTggQEAKIAogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUNYLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworCURFQ09ERV9QUklOVEYoIk1PVlx0RUNYLCIpOworCXNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRDWCwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJNT1ZcdENYLCIpOworCXNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CiAgICAgfQogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VDWCA9IHNyY3ZhbDsKKwlNLng4Ni5SX0VDWCA9IHNyY3ZhbDsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0NYID0gKHUxNilzcmN2YWw7CisJTS54ODYuUl9DWCA9ICh1MTYpc3JjdmFsOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC03OTg0LDE4ICs3OTg0LDE4IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVEWCwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJNT1ZcdEVEWCwiKTsKKwlzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RFgsIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisJREVDT0RFX1BSSU5URigiTU9WXHREWCwiKTsKKwlzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOwogICAgIH0KICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHNyY3ZhbCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FRFggPSBzcmN2YWw7CisJTS54ODYuUl9FRFggPSBzcmN2YWw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpc3JjdmFsOworCU0ueDg2LlJfRFggPSAodTE2KXNyY3ZhbDsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtODAxMSwxOCArODAxMSwxOCBAQAogCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFQlgsIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CisJREVDT0RFX1BSSU5URigiTU9WXHRFQlgsIik7CisJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEJYLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworCURFQ09ERV9QUklOVEYoIk1PVlx0QlgsIik7CisJc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKICAgICB9CiAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRUJYID0gc3JjdmFsOworCU0ueDg2LlJfRUJYID0gc3JjdmFsOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQlggPSAodTE2KXNyY3ZhbDsKKwlNLng4Ni5SX0JYID0gKHUxNilzcmN2YWw7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTgwMzgsMTggKzgwMzgsMTggQEAKIAogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RVNQLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworCURFQ09ERV9QUklOVEYoIk1PVlx0RVNQLCIpOworCXNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRTUCwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJNT1ZcdFNQLCIpOworCXNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CiAgICAgfQogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VTUCA9IHNyY3ZhbDsKKwlNLng4Ni5SX0VTUCA9IHNyY3ZhbDsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX1NQID0gKHUxNilzcmN2YWw7CisJTS54ODYuUl9TUCA9ICh1MTYpc3JjdmFsOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC04MDY1LDE4ICs4MDY1LDE4IEBACiAKICAgICBTVEFSVF9PRl9JTlNUUigpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVCUCwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJNT1ZcdEVCUCwiKTsKKwlzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0QlAsIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisJREVDT0RFX1BSSU5URigiTU9WXHRCUCwiKTsKKwlzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOwogICAgIH0KICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHNyY3ZhbCk7CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FQlAgPSBzcmN2YWw7CisJTS54ODYuUl9FQlAgPSBzcmN2YWw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpc3JjdmFsOworCU0ueDg2LlJfQlAgPSAodTE2KXNyY3ZhbDsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtODA5MiwxOCArODA5MiwxOCBAQAogCiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFU0ksIik7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CisJREVDT0RFX1BSSU5URigiTU9WXHRFU0ksIik7CisJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdFNJLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworCURFQ09ERV9QUklOVEYoIk1PVlx0U0ksIik7CisJc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKICAgICB9CiAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOwogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIE0ueDg2LlJfRVNJID0gc3JjdmFsOworCU0ueDg2LlJfRVNJID0gc3JjdmFsOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KXNyY3ZhbDsKKwlNLng4Ni5SX1NJID0gKHUxNilzcmN2YWw7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTgxMTksMTggKzgxMTksMTggQEAKIAogICAgIFNUQVJUX09GX0lOU1RSKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RURJLCIpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworCURFQ09ERV9QUklOVEYoIk1PVlx0RURJLCIpOworCXNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRESSwiKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKwlERUNPREVfUFJJTlRGKCJNT1ZcdERJLCIpOworCXNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CiAgICAgfQogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VESSA9IHNyY3ZhbDsKKwlNLng4Ni5SX0VESSA9IHNyY3ZhbDsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0RJID0gKHUxNilzcmN2YWw7CisJTS54ODYuUl9ESSA9ICh1MTYpc3JjdmFsOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC04MTcwLDgwICs4MTcwLDgwIEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICNpZmRlZiBERUJVRwogICAgIGlmIChERUJVR19ERUNPREUoKSkgewotICAgICAgICAvKiBYWFggREVDT0RFX1BSSU5URiBtYXkgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZQotICAgICAgICAgICBnZW5lcmFsLCBzbyB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBsZWF2ZSB0aGUgc3RyaW5ncwotICAgICAgICAgICBpbiB0aGUgc2FtZSBmb3JtYXQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgaXMgdGhhdCB0aGUgCi0gICAgICAgICAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KKwkvKiBYWFggREVDT0RFX1BSSU5URiBtYXkgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZQorCSAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCisJICAgaW4gdGhlIHNhbWUgZm9ybWF0LCBldmVuIHRob3VnaCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlCisJICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLwogCi0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiUk9MXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJST1JcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlJDTFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiUkNSXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJTSExcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlNIUlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0FMXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJTQVJcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlzd2l0Y2ggKHJoKSB7CisJY2FzZSAwOgorCSAgICBERUNPREVfUFJJTlRGKCJST0xcdCIpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIERFQ09ERV9QUklOVEYoIlJPUlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMjoKKwkgICAgREVDT0RFX1BSSU5URigiUkNMXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBERUNPREVfUFJJTlRGKCJSQ1JcdCIpOworCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIERFQ09ERV9QUklOVEYoIlNITFx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgREVDT0RFX1BSSU5URigiU0hSXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA2OgorCSAgICBERUNPREVfUFJJTlRGKCJTQUxcdCIpOworCSAgICBicmVhazsKKwljYXNlIDc6CisJICAgIERFQ09ERV9QUklOVEYoIlNBUlx0Iik7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAjZW5kaWYKICAgICAvKiBrbm93IG9wZXJhdGlvbiwgZGVjb2RlIHRoZSBtb2QgYnl0ZSB0byBmaW5kIHRoZSBhZGRyZXNzaW5nCiAgICAgICAgbW9kZS4gKi8KICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgYW10KTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwlERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOwotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIGFtdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCWFtdCA9IGZldGNoX2J5dGVfaW1tKCk7CisJREVDT0RFX1BSSU5URjIoIiwleFxuIiwgYW10KTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9ICgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBhbXQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCURFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlhbXQgPSBmZXRjaF9ieXRlX2ltbSgpOworCURFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBhbXQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgYW10KTsKLSAgICAgICAgKmRlc3RyZWcgPSBkZXN0dmFsOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCWFtdCA9IGZldGNoX2J5dGVfaW1tKCk7CisJREVDT0RFX1BSSU5URjIoIiwleFxuIiwgYW10KTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBhbXQpOworCSpkZXN0cmVnID0gZGVzdHZhbDsKKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtODI5NCwxMzYgKzgyOTQsMTM2IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICNpZmRlZiBERUJVRwogICAgIGlmIChERUJVR19ERUNPREUoKSkgewotICAgICAgICAvKiBYWFggREVDT0RFX1BSSU5URiBtYXkgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZQotICAgICAgICAgICBnZW5lcmFsLCBzbyB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBsZWF2ZSB0aGUgc3RyaW5ncwotICAgICAgICAgICBpbiB0aGUgc2FtZSBmb3JtYXQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgaXMgdGhhdCB0aGUgCi0gICAgICAgICAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KKwkvKiBYWFggREVDT0RFX1BSSU5URiBtYXkgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZQorCSAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCisJICAgaW4gdGhlIHNhbWUgZm9ybWF0LCBldmVuIHRob3VnaCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlCisJICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLwogCi0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiUk9MXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJST1JcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlJDTFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiUkNSXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJTSExcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlNIUlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0FMXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJTQVJcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlzd2l0Y2ggKHJoKSB7CisJY2FzZSAwOgorCSAgICBERUNPREVfUFJJTlRGKCJST0xcdCIpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIERFQ09ERV9QUklOVEYoIlJPUlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMjoKKwkgICAgREVDT0RFX1BSSU5URigiUkNMXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBERUNPREVfUFJJTlRGKCJSQ1JcdCIpOworCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIERFQ09ERV9QUklOVEYoIlNITFx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgREVDT0RFX1BSSU5URigiU0hSXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA2OgorCSAgICBERUNPREVfUFJJTlRGKCJTQUxcdCIpOworCSAgICBicmVhazsKKwljYXNlIDc6CisJICAgIERFQ09ERV9QUklOVEYoIlNBUlx0Iik7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAjZW5kaWYKICAgICAvKiBrbm93IG9wZXJhdGlvbiwgZGVjb2RlIHRoZSBtb2QgYnl0ZSB0byBmaW5kIHRoZSBhZGRyZXNzaW5nCiAgICAgICAgbW9kZS4gKi8KICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIGFtdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBhbXQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX3dvcmRfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIGFtdCA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wY0QxX3dvcmRfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIGFtdCA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBhbXQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgYW10KTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfd29yZF9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgYW10KTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9ICgqb3BjRDFfd29yZF9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBhbXQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgYW10KTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCSAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgYW10KTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIGFtdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBhbXQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBhbXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCSAgICBhbXQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGFtdCk7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSAoKm9wY0QxX3dvcmRfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBhbXQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBhbXQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9ICgqb3BjRDFfd29yZF9vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGFtdCk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC04NDc5LDM1ICs4NDc5LDM1IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgIE0ueDg2LlJfRVMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7Ci0gICAgICAgIGJyZWFrOworCWRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwlNLng4Ni5SX0VTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgIE0ueDg2LlJfRVMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7Ci0gICAgICAgIGJyZWFrOworCWRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwlNLng4Ni5SX0VTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgIE0ueDg2LlJfRVMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7Ci0gICAgICAgIGJyZWFrOworCWRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwlNLng4Ni5SX0VTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICAvKiBVTkRFRklORUQhICovCi0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisJLyogVU5ERUZJTkVEISAqLworCVRSQUNFX0FORF9TVEVQKCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTg1MjgsMzUgKzg1MjgsMzUgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgTS54ODYuUl9EUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKLSAgICAgICAgYnJlYWs7CisJZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCU0ueDg2LlJfRFMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgTS54ODYuUl9EUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKLSAgICAgICAgYnJlYWs7CisJZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCU0ueDg2LlJfRFMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgTS54ODYuUl9EUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKLSAgICAgICAgYnJlYWs7CisJZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCU0ueDg2LlJfRFMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIC8qIFVOREVGSU5FRCEgKi8KLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkvKiBVTkRFRklORUQhICovCisJVFJBQ0VfQU5EX1NURVAoKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtODU3Nyw0MSArODU3Nyw0MSBAQAogICAgIERFQ09ERV9QUklOVEYoIk1PVlx0Iik7CiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBpZiAocmggIT0gMCkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIERFQ09ERSBPRiBPUENPREUgYzZcbiIpOwotICAgICAgICBIQUxUX1NZUygpOworCURFQ09ERV9QUklOVEYoIklMTEVHQUwgREVDT0RFIE9GIE9QQ09ERSBjNlxuIik7CisJSEFMVF9TWVMoKTsKICAgICB9CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOwotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYyKCIsJTJ4XG4iLCBpbW0pOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgaW1tKTsKLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCWltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJREVDT0RFX1BSSU5URjIoIiwlMnhcbiIsIGltbSk7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgaW1tKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOwotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYyKCIsJTJ4XG4iLCBpbW0pOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgaW1tKTsKLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCWltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJREVDT0RFX1BSSU5URjIoIiwlMnhcbiIsIGltbSk7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgaW1tKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOwotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYyKCIsJTJ4XG4iLCBpbW0pOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgaW1tKTsKLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCWltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJREVDT0RFX1BSSU5URjIoIiwlMnhcbiIsIGltbSk7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgaW1tKTsKKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlMnhcbiIsIGltbSk7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gaW1tOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCWltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisJREVDT0RFX1BSSU5URjIoIiwlMnhcbiIsIGltbSk7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IGltbTsKKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtODYzMCw5NCArODYzMCw5NCBAQAogICAgIERFQ09ERV9QUklOVEYoIk1PVlx0Iik7CiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBpZiAocmggIT0gMCkgewotICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIERFQ09ERSBPRiBPUENPREUgOEZcbiIpOwotICAgICAgICBIQUxUX1NZUygpOworCURFQ09ERV9QUklOVEYoIklMTEVHQUwgREVDT0RFIE9GIE9QQ09ERSA4RlxuIik7CisJSEFMVF9TWVMoKTsKICAgICB9CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGltbTsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGltbTsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGltbSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgaW1tOworCSAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGltbSk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGltbTsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgaW1tKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGltbSk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgaW1tOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgaW1tOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgaW1tKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBpbW07CisJICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgaW1tKTsKKwl9IGVsc2UgeworCSAgICB1MTYgaW1tOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBpbW0pOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgaW1tKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBpbW07CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBpbW07CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBpbW0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGltbTsKKwkgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBpbW0pOworCX0gZWxzZSB7CisJICAgIHUxNiBpbW07CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGltbSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBpbW0pOworCX0KKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CiAJCQl1MzIgKmRlc3RyZWc7CiAJCQl1MzIgaW1tOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBpbW07Ci0gICAgICAgIH0gZWxzZSB7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIGltbSA9IGZldGNoX2xvbmdfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gaW1tOworCX0gZWxzZSB7CiAJCQl1MTYgKmRlc3RyZWc7CiAJCQl1MTYgaW1tOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBpbW07Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gaW1tOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtODc0MiwxMiArODc0MiwxMiBAQAogICAgIHB1c2hfd29yZChNLng4Ni5SX0JQKTsKICAgICBmcmFtZV9wb2ludGVyID0gTS54ODYuUl9TUDsKICAgICBpZiAobmVzdGluZyA+IDApIHsKLSAgICAgICAgZm9yIChpID0gMTsgaSA8IG5lc3Rpbmc7IGkrKykgewotICAgICAgICAgICAgTS54ODYuUl9CUCAtPSAyOwotICAgICAgICAgICAgcHVzaF93b3JkKGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9TUywgTS54ODYuUl9CUCkpOwotICAgICAgICAgICAgfQotICAgICAgICBwdXNoX3dvcmQoZnJhbWVfcG9pbnRlcik7Ci0gICAgICAgIH0KKwlmb3IgKGkgPSAxOyBpIDwgbmVzdGluZzsgaSsrKSB7CisJICAgIE0ueDg2LlJfQlAgLT0gMjsKKwkgICAgcHVzaF93b3JkKGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9TUywgTS54ODYuUl9CUCkpOworCSAgICB9CisJcHVzaF93b3JkKGZyYW1lX3BvaW50ZXIpOworCX0KICAgICBNLng4Ni5SX0JQID0gZnJhbWVfcG9pbnRlcjsKICAgICBNLng4Ni5SX1NQID0gKHUxNikoTS54ODYuUl9TUCAtIGxvY2FsKTsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CkBAIC04ODIyLDEzICs4ODIyLDEzIEBACiAJaWYgKF9YODZFTVVfaW50clRhYlszXSkgewogCQkoKl9YODZFTVVfaW50clRhYlszXSkoMyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOwotICAgICAgICBDTEVBUl9GTEFHKEZfSUYpOwotICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOwotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7Ci0gICAgICAgIE0ueDg2LlJfQ1MgPSBtZW1fYWNjZXNzX3dvcmQoMyAqIDQgKyAyKTsKLSAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOwotICAgICAgICBNLng4Ni5SX0lQID0gbWVtX2FjY2Vzc193b3JkKDMgKiA0KTsKKwlwdXNoX3dvcmQoKHUxNilNLng4Ni5SX0ZMRyk7CisJQ0xFQVJfRkxBRyhGX0lGKTsKKwlDTEVBUl9GTEFHKEZfVEYpOworCXB1c2hfd29yZChNLng4Ni5SX0NTKTsKKwlNLng4Ni5SX0NTID0gbWVtX2FjY2Vzc193b3JkKDMgKiA0ICsgMik7CisJcHVzaF93b3JkKE0ueDg2LlJfSVApOworCU0ueDg2LlJfSVAgPSBtZW1fYWNjZXNzX3dvcmQoMyAqIDQpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC04ODUyLDEzICs4ODUyLDEzIEBACiAJaWYgKF9YODZFTVVfaW50clRhYltpbnRudW1dKSB7CiAJCSgqX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pKGludG51bSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOwotICAgICAgICBDTEVBUl9GTEFHKEZfSUYpOwotICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOwotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7Ci0gICAgICAgIE0ueDg2LlJfQ1MgPSBtZW1fYWNjZXNzX3dvcmQoaW50bnVtICogNCArIDIpOwotICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7Ci0gICAgICAgIE0ueDg2LlJfSVAgPSBtZW1fYWNjZXNzX3dvcmQoaW50bnVtICogNCk7CisJcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOworCUNMRUFSX0ZMQUcoRl9JRik7CisJQ0xFQVJfRkxBRyhGX1RGKTsKKwlwdXNoX3dvcmQoTS54ODYuUl9DUyk7CisJTS54ODYuUl9DUyA9IG1lbV9hY2Nlc3Nfd29yZChpbnRudW0gKiA0ICsgMik7CisJcHVzaF93b3JkKE0ueDg2LlJfSVApOworCU0ueDg2LlJfSVAgPSBtZW1fYWNjZXNzX3dvcmQoaW50bnVtICogNCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTg4NzYsMTggKzg4NzYsMTggQEAKICAgICBERUNPREVfUFJJTlRGKCJJTlRPXG4iKTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChBQ0NFU1NfRkxBRyhGX09GKSkgewotICAgICAgICB0bXAgPSBtZW1fYWNjZXNzX3dvcmQoNCAqIDQgKyAyKTsKKwl0bXAgPSBtZW1fYWNjZXNzX3dvcmQoNCAqIDQgKyAyKTsKIAkJaWYgKF9YODZFTVVfaW50clRhYls0XSkgewogCQkJKCpfWDg2RU1VX2ludHJUYWJbNF0pKDQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOwotICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKLSAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7Ci0gICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7Ci0gICAgICAgICAgICBNLng4Ni5SX0NTID0gbWVtX2FjY2Vzc193b3JkKDQgKiA0ICsgMik7Ci0gICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7Ci0gICAgICAgICAgICBNLng4Ni5SX0lQID0gbWVtX2FjY2Vzc193b3JkKDQgKiA0KTsKLSAgICAgICAgfQorCX0gZWxzZSB7CisJICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKwkgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKwkgICAgQ0xFQVJfRkxBRyhGX1RGKTsKKwkgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworCSAgICBNLng4Ni5SX0NTID0gbWVtX2FjY2Vzc193b3JkKDQgKiA0ICsgMik7CisJICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKwkgICAgTS54ODYuUl9JUCA9IG1lbV9hY2Nlc3Nfd29yZCg0ICogNCk7CisJfQogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC04OTMxLDc1ICs4OTMxLDc1IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICNpZmRlZiBERUJVRwogICAgIGlmIChERUJVR19ERUNPREUoKSkgewotICAgICAgICAvKiBYWFggREVDT0RFX1BSSU5URiBtYXkgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZQotICAgICAgICAgICBnZW5lcmFsLCBzbyB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBsZWF2ZSB0aGUgc3RyaW5ncwotICAgICAgICAgICBpbiB0aGUgc2FtZSBmb3JtYXQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgaXMgdGhhdCB0aGUKLSAgICAgICAgICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlJPTFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiUk9SXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJSQ0xcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlJDUlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0hMXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJTSFJcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlNBTFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0FSXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJLyogWFhYIERFQ09ERV9QUklOVEYgbWF5IGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUKKwkgICBnZW5lcmFsLCBzbyB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBsZWF2ZSB0aGUgc3RyaW5ncworCSAgIGluIHRoZSBzYW1lIGZvcm1hdCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBpcyB0aGF0IHRoZQorCSAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KKwlzd2l0Y2ggKHJoKSB7CisJY2FzZSAwOgorCSAgICBERUNPREVfUFJJTlRGKCJST0xcdCIpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIERFQ09ERV9QUklOVEYoIlJPUlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMjoKKwkgICAgREVDT0RFX1BSSU5URigiUkNMXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBERUNPREVfUFJJTlRGKCJSQ1JcdCIpOworCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIERFQ09ERV9QUklOVEYoIlNITFx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgREVDT0RFX1BSSU5URigiU0hSXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA2OgorCSAgICBERUNPREVfUFJJTlRGKCJTQUxcdCIpOworCSAgICBicmVhazsKKwljYXNlIDc6CisJICAgIERFQ09ERV9QUklOVEYoIlNBUlx0Iik7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAjZW5kaWYKICAgICAvKiBrbm93IG9wZXJhdGlvbiwgZGVjb2RlIHRoZSBtb2QgYnl0ZSB0byBmaW5kIHRoZSBhZGRyZXNzaW5nCiAgICAgICAgbW9kZS4gKi8KICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLDFcbiIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCURFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsMVxuIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOwotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwxXG4iKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgMSk7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIiwxXG4iKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9ICgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgMSk7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCAxKTsKLSAgICAgICAgKmRlc3RyZWcgPSBkZXN0dmFsOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCURFQ09ERV9QUklOVEYoIiwxXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCAxKTsKKwkqZGVzdHJlZyA9IGRlc3R2YWw7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTkwMjMsMTMxICs5MDIzLDEzMSBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAjaWZkZWYgREVCVUcKICAgICBpZiAoREVCVUdfREVDT0RFKCkpIHsKLSAgICAgICAgLyogWFhYIERFQ09ERV9QUklOVEYgbWF5IGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUKLSAgICAgICAgICAgZ2VuZXJhbCwgc28gdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gbGVhdmUgdGhlIHN0cmluZ3MKLSAgICAgICAgICAgaW4gdGhlIHNhbWUgZm9ybWF0LCBldmVuIHRob3VnaCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlCi0gICAgICAgICAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KLSAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJST0xcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlJPUlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiUkNMXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJSQ1JcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlNITFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0hSXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJTQUxcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlNBUlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCS8qIFhYWCBERUNPREVfUFJJTlRGIG1heSBiZSBjaGFuZ2VkIHRvIHNvbWV0aGluZyBtb3JlCisJICAgZ2VuZXJhbCwgc28gdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gbGVhdmUgdGhlIHN0cmluZ3MKKwkgICBpbiB0aGUgc2FtZSBmb3JtYXQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgaXMgdGhhdCB0aGUKKwkgICBhYm92ZSB0ZXN0IGlzIGRvbmUgdHdpY2UuICovCisJc3dpdGNoIChyaCkgeworCWNhc2UgMDoKKwkgICAgREVDT0RFX1BSSU5URigiUk9MXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBERUNPREVfUFJJTlRGKCJST1JcdCIpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIERFQ09ERV9QUklOVEYoIlJDTFx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgREVDT0RFX1BSSU5URigiUkNSXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA0OgorCSAgICBERUNPREVfUFJJTlRGKCJTSExcdCIpOworCSAgICBicmVhazsKKwljYXNlIDU6CisJICAgIERFQ09ERV9QUklOVEYoIlNIUlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNjoKKwkgICAgREVDT0RFX1BSSU5URigiU0FMXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA3OgorCSAgICBERUNPREVfUFJJTlRGKCJTQVJcdCIpOworCSAgICBicmVhazsKKwl9CiAgICAgfQogI2VuZGlmCiAgICAgLyoga25vdyBvcGVyYXRpb24sIGRlY29kZSB0aGUgbW9kIGJ5dGUgdG8gZmluZCB0aGUgYWRkcmVzc2luZwogICAgICAgIG1vZGUuICovCiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJEV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CiAJCQl1MzIgZGVzdHZhbDsKIAkJCXUzMiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwxXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgMSk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7Ci0gICAgICAgIH0gZWxzZSB7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwxXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIDEpOworCSAgICAqZGVzdHJlZyA9IGRlc3R2YWw7CisJfSBlbHNlIHsKIAkJCXUxNiBkZXN0dmFsOwogCQkJdTE2ICpkZXN0cmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX3dvcmRfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCAxKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgMSk7CisJICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTkxNzQsMzYgKzkxNzQsMzYgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogI2lmZGVmIERFQlVHCiAgICAgaWYgKERFQlVHX0RFQ09ERSgpKSB7Ci0gICAgICAgIC8qIFhYWCBERUNPREVfUFJJTlRGIG1heSBiZSBjaGFuZ2VkIHRvIHNvbWV0aGluZyBtb3JlCi0gICAgICAgICAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCi0gICAgICAgICAgIGluIHRoZSBzYW1lIGZvcm1hdCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBpcyB0aGF0IHRoZSAKLSAgICAgICAgICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlJPTFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiUk9SXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJSQ0xcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlJDUlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0hMXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJTSFJcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlNBTFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0FSXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJLyogWFhYIERFQ09ERV9QUklOVEYgbWF5IGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUKKwkgICBnZW5lcmFsLCBzbyB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBsZWF2ZSB0aGUgc3RyaW5ncworCSAgIGluIHRoZSBzYW1lIGZvcm1hdCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBpcyB0aGF0IHRoZQorCSAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KKwlzd2l0Y2ggKHJoKSB7CisJY2FzZSAwOgorCSAgICBERUNPREVfUFJJTlRGKCJST0xcdCIpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIERFQ09ERV9QUklOVEYoIlJPUlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMjoKKwkgICAgREVDT0RFX1BSSU5URigiUkNMXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBERUNPREVfUFJJTlRGKCJSQ1JcdCIpOworCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIERFQ09ERV9QUklOVEYoIlNITFx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgREVDT0RFX1BSSU5URigiU0hSXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA2OgorCSAgICBERUNPREVfUFJJTlRGKCJTQUxcdCIpOworCSAgICBicmVhazsKKwljYXNlIDc6CisJICAgIERFQ09ERV9QUklOVEYoIlNBUlx0Iik7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAjZW5kaWYKICAgICAvKiBrbm93IG9wZXJhdGlvbiwgZGVjb2RlIHRoZSBtb2QgYnl0ZSB0byBmaW5kIHRoZSBhZGRyZXNzaW5nCkBAIC05MjExLDM5ICs5MjExLDM5IEBACiAgICAgYW10ID0gTS54ODYuUl9DTDsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKLSAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiLENMXG4iKTsKKwlkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCVRSQUNFX0FORF9TVEVQKCk7CisJZGVzdHZhbCA9ICgqb3BjRDBfYnl0ZV9vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOwotICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIGJyZWFrOworCURFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOwotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIixDTFxuIik7CisJZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCWRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgYW10KTsKLSAgICAgICAgKmRlc3RyZWcgPSBkZXN0dmFsOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCURFQ09ERV9QUklOVEYoIixDTFxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgYW10KTsKKwkqZGVzdHJlZyA9IGRlc3R2YWw7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTkyNjgsMzYgKzkyNjgsMzYgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogI2lmZGVmIERFQlVHCiAgICAgaWYgKERFQlVHX0RFQ09ERSgpKSB7Ci0gICAgICAgIC8qIFhYWCBERUNPREVfUFJJTlRGIG1heSBiZSBjaGFuZ2VkIHRvIHNvbWV0aGluZyBtb3JlCi0gICAgICAgICAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCi0gICAgICAgICAgIGluIHRoZSBzYW1lIGZvcm1hdCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBpcyB0aGF0IHRoZSAKLSAgICAgICAgICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlJPTFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiUk9SXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJSQ0xcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlJDUlx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0hMXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJTSFJcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlNBTFx0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiU0FSXHQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJLyogWFhYIERFQ09ERV9QUklOVEYgbWF5IGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUKKwkgICBnZW5lcmFsLCBzbyB0aGF0IGl0IGlzIGltcG9ydGFudCB0byBsZWF2ZSB0aGUgc3RyaW5ncworCSAgIGluIHRoZSBzYW1lIGZvcm1hdCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBpcyB0aGF0IHRoZQorCSAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KKwlzd2l0Y2ggKHJoKSB7CisJY2FzZSAwOgorCSAgICBERUNPREVfUFJJTlRGKCJST0xcdCIpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIERFQ09ERV9QUklOVEYoIlJPUlx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgMjoKKwkgICAgREVDT0RFX1BSSU5URigiUkNMXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBERUNPREVfUFJJTlRGKCJSQ1JcdCIpOworCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIERFQ09ERV9QUklOVEYoIlNITFx0Iik7CisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgREVDT0RFX1BSSU5URigiU0hSXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA2OgorCSAgICBERUNPREVfUFJJTlRGKCJTQUxcdCIpOworCSAgICBicmVhazsKKwljYXNlIDc6CisJICAgIERFQ09ERV9QUklOVEYoIlNBUlx0Iik7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAjZW5kaWYKICAgICAvKiBrbm93IG9wZXJhdGlvbiwgZGVjb2RlIHRoZSBtb2QgYnl0ZSB0byBmaW5kIHRoZSBhZGRyZXNzaW5nCkBAIC05MzA1LDkxICs5MzA1LDkxIEBACiAgICAgYW10ID0gTS54ODYuUl9DTDsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CiAKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGFtdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgYW10KTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gKCpvcGNEMV93b3JkX29wZXJhdGlvbltyaF0pICgqZGVzdHJlZywgYW10KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSAoKm9wY0QxX3dvcmRfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBhbXQpOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtOTQwNyw5ICs5NDA3LDkgQEAKICAgICBERUNPREVfUFJJTlRGKCJBQU1cbiIpOwogICAgIGEgPSBmZXRjaF9ieXRlX2ltbSgpOyAgICAgIC8qIHRoaXMgaXMgYSBzdHVwaWQgZW5jb2RpbmcuICovCiAgICAgaWYgKGEgIT0gMTApIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiRVJST1IgREVDT0RJTkcgQUFNXG4iKTsKLSAgICAgICAgVFJBQ0VfUkVHUygpOwotICAgICAgICBIQUxUX1NZUygpOworCURFQ09ERV9QUklOVEYoIkVSUk9SIERFQ09ESU5HIEFBTVxuIik7CisJVFJBQ0VfUkVHUygpOworCUhBTFRfU1lTKCk7CiAgICAgfQogICAgIFRSQUNFX0FORF9TVEVQKCk7CiAgICAgLyogbm90ZSB0aGUgdHlwZSBjaGFuZ2UgaGVyZSAtLS0gcmV0dXJuaW5nIEFMIGFuZCBBSCBpbiBBWC4gKi8KQEAgLTk0NzIsNyArOTQ3Miw3IEBACiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBNLng4Ni5SX0NYIC09IDE7CiAgICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiAhQUNDRVNTX0ZMQUcoRl9aRikpICAgICAgLyogQ1ggIT0gMCBhbmQgIVpGICovCi0gICAgICAgIE0ueDg2LlJfSVAgPSBpcDsKKwlNLng4Ni5SX0lQID0gaXA7CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwogfQpAQCAtOTQ5Myw3ICs5NDkzLDcgQEAKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIE0ueDg2LlJfQ1ggLT0gMTsKICAgICBpZiAoTS54ODYuUl9DWCAhPSAwICYmIEFDQ0VTU19GTEFHKEZfWkYpKSAgICAgICAvKiBDWCAhPSAwIGFuZCBaRiAqLwotICAgICAgICBNLng4Ni5SX0lQID0gaXA7CisJTS54ODYuUl9JUCA9IGlwOwogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKIH0KQEAgLTk1MTQsNyArOTUxNCw3IEBACiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBNLng4Ni5SX0NYIC09IDE7CiAgICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCkKLSAgICAgICAgTS54ODYuUl9JUCA9IGlwOworCU0ueDg2LlJfSVAgPSBpcDsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CiB9CkBAIC05NTM2LDcgKzk1MzYsNyBAQAogICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5SX0NYID09IDApCi0gICAgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CisJTS54ODYuUl9JUCA9IHRhcmdldDsKICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CiB9CkBAIC05NTcxLDE1ICs5NTcxLDE1IEBACiAgICAgREVDT0RFX1BSSU5URigiSU5cdCIpOwogCXBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CiAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYyKCJFQVgsJXhcbiIsIHBvcnQpOworCURFQ09ERV9QUklOVEYyKCJFQVgsJXhcbiIsIHBvcnQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERFQ09ERV9QUklOVEYyKCJBWCwleFxuIiwgcG9ydCk7CisJREVDT0RFX1BSSU5URjIoIkFYLCV4XG4iLCBwb3J0KTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgTS54ODYuUl9FQVggPSAoKnN5c19pbmwpKHBvcnQpOworCU0ueDg2LlJfRUFYID0gKCpzeXNfaW5sKShwb3J0KTsKICAgICB9IGVsc2UgewotICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KShwb3J0KTsKKwlNLng4Ni5SX0FYID0gKCpzeXNfaW53KShwb3J0KTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtOTYxNSwxNSArOTYxNSwxNSBAQAogICAgIERFQ09ERV9QUklOVEYoIk9VVFx0Iik7CiAJcG9ydCA9ICh1OCkgZmV0Y2hfYnl0ZV9pbW0oKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4LEVBWFxuIiwgcG9ydCk7CisJREVDT0RFX1BSSU5URjIoIiV4LEVBWFxuIiwgcG9ydCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4LEFYXG4iLCBwb3J0KTsKKwlERUNPREVfUFJJTlRGMigiJXgsQVhcbiIsIHBvcnQpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAoKnN5c19vdXRsKShwb3J0LCBNLng4Ni5SX0VBWCk7CisJKCpzeXNfb3V0bCkocG9ydCwgTS54ODYuUl9FQVgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgICgqc3lzX291dHcpKHBvcnQsIE0ueDg2LlJfQVgpOworCSgqc3lzX291dHcpKHBvcnQsIE0ueDg2LlJfQVgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC05NzMyLDE1ICs5NzMyLDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiSU5cdEVBWCxEWFxuIik7CisJREVDT0RFX1BSSU5URigiSU5cdEVBWCxEWFxuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiSU5cdEFYLERYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJJTlx0QVgsRFhcbiIpOwogICAgIH0KICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkoTS54ODYuUl9EWCk7CisJTS54ODYuUl9FQVggPSAoKnN5c19pbmwpKE0ueDg2LlJfRFgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIE0ueDg2LlJfQVggPSAoKnN5c19pbncpKE0ueDg2LlJfRFgpOworCU0ueDg2LlJfQVggPSAoKnN5c19pbncpKE0ueDg2LlJfRFgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC05NzY4LDE1ICs5NzY4LDE1IEBACiB7CiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgREVDT0RFX1BSSU5URigiT1VUXHREWCxFQVhcbiIpOworCURFQ09ERV9QUklOVEYoIk9VVFx0RFgsRUFYXG4iKTsKICAgICB9IGVsc2UgewotICAgICAgICBERUNPREVfUFJJTlRGKCJPVVRcdERYLEFYXG4iKTsKKwlERUNPREVfUFJJTlRGKCJPVVRcdERYLEFYXG4iKTsKICAgICB9CiAgICAgVFJBQ0VfQU5EX1NURVAoKTsKICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwgTS54ODYuUl9FQVgpOworCSgqc3lzX291dGwpKE0ueDg2LlJfRFgsIE0ueDg2LlJfRUFYKTsKICAgICB9IGVsc2UgewotICAgICAgICAoKnN5c19vdXR3KShNLng4Ni5SX0RYLCBNLng4Ni5SX0FYKTsKKwkoKnN5c19vdXR3KShNLng4Ni5SX0RYLCBNLng4Ni5SX0FYKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtOTg3MSwyNjggKzk4NzEsMjY4IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KLSAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0QllURSBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwMnhcbiIsIHNyY3ZhbCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHRlc3RfYnl0ZShkZXN0dmFsLCBzcmN2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgT1AgTU9EPTAwIFJIPTAxIE9QPUY2XG4iKTsKLSAgICAgICAgICAgIEhBTFRfU1lTKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHRCWVRFIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBub3RfYnl0ZShkZXN0dmFsKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJORUdcdEJZVEUgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IG5lZ19ieXRlKGRlc3R2YWwpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0QllURSBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBtdWxfYnl0ZShkZXN0dmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHRCWVRFIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGltdWxfYnl0ZShkZXN0dmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJESVZcdEJZVEUgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGl2X2J5dGUoZGVzdHZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA3OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0QllURSBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBpZGl2X2J5dGUoZGVzdHZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0wMCAqLworCXN3aXRjaCAocmgpIHsKKwljYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworCSAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3ZhbCA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIlMDJ4XG4iLCBzcmN2YWwpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICB0ZXN0X2J5dGUoZGVzdHZhbCwgc3JjdmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIE9QIE1PRD0wMCBSSD0wMSBPUD1GNlxuIik7CisJICAgIEhBTFRfU1lTKCk7CisJICAgIGJyZWFrOworCWNhc2UgMjoKKwkgICAgREVDT0RFX1BSSU5URigiTk9UXHRCWVRFIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gbm90X2J5dGUoZGVzdHZhbCk7CisJICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBERUNPREVfUFJJTlRGKCJORUdcdEJZVEUgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBuZWdfYnl0ZShkZXN0dmFsKTsKKwkgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIERFQ09ERV9QUklOVEYoIk1VTFx0QllURSBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgbXVsX2J5dGUoZGVzdHZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgREVDT0RFX1BSSU5URigiSU1VTFx0QllURSBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgaW11bF9ieXRlKGRlc3R2YWwpOworCSAgICBicmVhazsKKwljYXNlIDY6CisJICAgIERFQ09ERV9QUklOVEYoIkRJVlx0QllURSBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGl2X2J5dGUoZGVzdHZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgNzoKKwkgICAgREVDT0RFX1BSSU5URigiSURJVlx0QllURSBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgaWRpdl9ieXRlKGRlc3R2YWwpOworCSAgICBicmVhazsKKwl9CisJYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDAgKi8KICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAxICovCi0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEJZVEUgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDJ4XG4iLCBzcmN2YWwpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICB0ZXN0X2J5dGUoZGVzdHZhbCwgc3JjdmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIE9QIE1PRD0wMSBSSD0wMSBPUD1GNlxuIik7Ci0gICAgICAgICAgICBIQUxUX1NZUygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0QllURSBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gbm90X2J5dGUoZGVzdHZhbCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHRCWVRFIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBuZWdfYnl0ZShkZXN0dmFsKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJNVUxcdEJZVEUgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgbXVsX2J5dGUoZGVzdHZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0QllURSBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBpbXVsX2J5dGUoZGVzdHZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRElWXHRCWVRFIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRpdl9ieXRlKGRlc3R2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdEJZVEUgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgaWRpdl9ieXRlKGRlc3R2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDEgKi8KKwlzd2l0Y2ggKHJoKSB7CisJY2FzZSAwOiAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKwkgICAgREVDT0RFX1BSSU5URigiVEVTVFx0QllURSBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmN2YWwgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiJTAyeFxuIiwgc3JjdmFsKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgdGVzdF9ieXRlKGRlc3R2YWwsIHNyY3ZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBPUCBNT0Q9MDEgUkg9MDEgT1A9RjZcbiIpOworCSAgICBIQUxUX1NZUygpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIERFQ09ERV9QUklOVEYoIk5PVFx0QllURSBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IG5vdF9ieXRlKGRlc3R2YWwpOworCSAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgREVDT0RFX1BSSU5URigiTkVHXHRCWVRFIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gbmVnX2J5dGUoZGVzdHZhbCk7CisJICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSA0OgorCSAgICBERUNPREVfUFJJTlRGKCJNVUxcdEJZVEUgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIG11bF9ieXRlKGRlc3R2YWwpOworCSAgICBicmVhazsKKwljYXNlIDU6CisJICAgIERFQ09ERV9QUklOVEYoIklNVUxcdEJZVEUgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGltdWxfYnl0ZShkZXN0dmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSA2OgorCSAgICBERUNPREVfUFJJTlRGKCJESVZcdEJZVEUgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRpdl9ieXRlKGRlc3R2YWwpOworCSAgICBicmVhazsKKwljYXNlIDc6CisJICAgIERFQ09ERV9QUklOVEYoIklESVZcdEJZVEUgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGlkaXZfYnl0ZShkZXN0dmFsKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTAxICovCiAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCi0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTAyeFxuIiwgc3JjdmFsKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgdGVzdF9ieXRlKGRlc3R2YWwsIHNyY3ZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBPUCBNT0Q9MTAgUkg9MDEgT1A9RjZcbiIpOwotICAgICAgICAgICAgSEFMVF9TWVMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdEJZVEUgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IG5vdF9ieXRlKGRlc3R2YWwpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0QllURSBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gbmVnX2J5dGUoZGVzdHZhbCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTVVMXHRCWVRFIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIG11bF9ieXRlKGRlc3R2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdEJZVEUgUFRSICIpOwotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgaW11bF9ieXRlKGRlc3R2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0QllURSBQVFIgIik7Ci0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkaXZfYnl0ZShkZXN0dmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHRCWVRFIFBUUiAiKTsKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGlkaXZfYnl0ZShkZXN0dmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTEwICovCisJc3dpdGNoIChyaCkgeworCWNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisJICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEJZVEUgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiUwMnhcbiIsIHNyY3ZhbCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHRlc3RfYnl0ZShkZXN0dmFsLCBzcmN2YWwpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgT1AgTU9EPTEwIFJIPTAxIE9QPUY2XG4iKTsKKwkgICAgSEFMVF9TWVMoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBERUNPREVfUFJJTlRGKCJOT1RcdEJZVEUgUFRSICIpOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBub3RfYnl0ZShkZXN0dmFsKTsKKwkgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIERFQ09ERV9QUklOVEYoIk5FR1x0QllURSBQVFIgIik7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IG5lZ19ieXRlKGRlc3R2YWwpOworCSAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgNDoKKwkgICAgREVDT0RFX1BSSU5URigiTVVMXHRCWVRFIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBtdWxfYnl0ZShkZXN0dmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSA1OgorCSAgICBERUNPREVfUFJJTlRGKCJJTVVMXHRCWVRFIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBpbXVsX2J5dGUoZGVzdHZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgNjoKKwkgICAgREVDT0RFX1BSSU5URigiRElWXHRCWVRFIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkaXZfYnl0ZShkZXN0dmFsKTsKKwkgICAgYnJlYWs7CisJY2FzZSA3OgorCSAgICBERUNPREVfUFJJTlRGKCJJRElWXHRCWVRFIFBUUiAiKTsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBpZGl2X2J5dGUoZGVzdHZhbCk7CisJICAgIGJyZWFrOworCX0KKwlicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMCAqLwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTEgKi8KLSAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0Iik7Ci0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDJ4XG4iLCBzcmN2YWwpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHRlc3RfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIE9QIE1PRD0wMCBSSD0wMSBPUD1GNlxuIik7Ci0gICAgICAgICAgICBIQUxUX1NZUygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0Iik7Ci0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IG5vdF9ieXRlKCpkZXN0cmVnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJORUdcdCIpOwotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBuZWdfYnl0ZSgqZGVzdHJlZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTVVMXHQiKTsKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIG11bF9ieXRlKCpkZXN0cmVnKTsgICAgICAvKiEhISAgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHQiKTsKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGltdWxfYnl0ZSgqZGVzdHJlZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRElWXHQiKTsKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRpdl9ieXRlKCpkZXN0cmVnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHQiKTsKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGlkaXZfYnl0ZSgqZGVzdHJlZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMSAqLworCXN3aXRjaCAocmgpIHsKKwljYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworCSAgICBERUNPREVfUFJJTlRGKCJURVNUXHQiKTsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmN2YWwgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiJTAyeFxuIiwgc3JjdmFsKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgdGVzdF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgT1AgTU9EPTAwIFJIPTAxIE9QPUY2XG4iKTsKKwkgICAgSEFMVF9TWVMoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBERUNPREVfUFJJTlRGKCJOT1RcdCIpOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IG5vdF9ieXRlKCpkZXN0cmVnKTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBERUNPREVfUFJJTlRGKCJORUdcdCIpOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IG5lZ19ieXRlKCpkZXN0cmVnKTsKKwkgICAgYnJlYWs7CisJY2FzZSA0OgorCSAgICBERUNPREVfUFJJTlRGKCJNVUxcdCIpOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBtdWxfYnl0ZSgqZGVzdHJlZyk7ICAgICAgLyohISEgICovCisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGltdWxfYnl0ZSgqZGVzdHJlZyk7CisJICAgIGJyZWFrOworCWNhc2UgNjoKKwkgICAgREVDT0RFX1BSSU5URigiRElWXHQiKTsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGl2X2J5dGUoKmRlc3RyZWcpOworCSAgICBicmVhazsKKwljYXNlIDc6CisJICAgIERFQ09ERV9QUklOVEYoIklESVZcdCIpOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBpZGl2X2J5dGUoKmRlc3RyZWcpOworCSAgICBicmVhazsKKwl9CisJYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MTEgKi8KICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMTAxNTMsNjQxICsxMDE1Myw2NDEgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMCAqLwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCi0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCxzcmN2YWw7CisJc3dpdGNoIChyaCkgeworCWNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbCxzcmN2YWw7CiAKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHREV09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsIHNyY3ZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLHNyY3ZhbDsKKwkJREVDT0RFX1BSSU5URigiVEVTVFx0RFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIiwiKTsKKwkJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwkJREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQl0ZXN0X2xvbmcoZGVzdHZhbCwgc3JjdmFsKTsKKwkgICAgfSBlbHNlIHsKKwkJdTE2IGRlc3R2YWwsc3JjdmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgdGVzdF93b3JkKGRlc3R2YWwsIHNyY3ZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBPUCBNT0Q9MDAgUkg9MDEgT1A9RjdcbiIpOwotICAgICAgICAgICAgSEFMVF9TWVMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiLCIpOworCQlzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworCQlERUNPREVfUFJJTlRGMigiJXhcbiIsIHNyY3ZhbCk7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCXRlc3Rfd29yZChkZXN0dmFsLCBzcmN2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBPUCBNT0Q9MDAgUkg9MDEgT1A9RjdcbiIpOworCSAgICBIQUxUX1NZUygpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gbm90X2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTk9UXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGVzdHZhbCA9IG5vdF9sb25nKGRlc3R2YWwpOworCQlzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXUxNiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5vdF93b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKKwkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkZXN0dmFsID0gbm90X3dvcmQoZGVzdHZhbCk7CisJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gbmVnX2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTkVHXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGVzdHZhbCA9IG5lZ19sb25nKGRlc3R2YWwpOworCQlzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXUxNiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5lZ193b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKKwkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkZXN0dmFsID0gbmVnX3dvcmQoZGVzdHZhbCk7CisJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBtdWxfbG9uZyhkZXN0dmFsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJCURFQ09ERV9QUklOVEYoIk1VTFx0RFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCW11bF9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIG11bF93b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJNVUxcdFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCW11bF93b3JkKGRlc3R2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpbXVsX2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJJTVVMXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJaW11bF9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpbXVsX3dvcmQoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJCURFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWltdWxfd29yZChkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDY6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkaXZfbG9uZyhkZXN0dmFsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJCURFQ09ERV9QUklOVEYoIkRJVlx0RFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWRpdl9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGRpdl93b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJESVZcdFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWRpdl93b3JkKGRlc3R2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgNzoKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpZGl2X2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJJRElWXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJaWRpdl9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpZGl2X3dvcmQoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0wMCAqLworCQlERUNPREVfUFJJTlRGKCJJRElWXHRXT1JEIFBUUiAiKTsKKwkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlpZGl2X3dvcmQoZGVzdHZhbCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTAwICovCiAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMSAqLwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCi0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCxzcmN2YWw7CisJc3dpdGNoIChyaCkgeworCWNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbCxzcmN2YWw7CiAKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHREV09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsIHNyY3ZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLHNyY3ZhbDsKKwkJREVDT0RFX1BSSU5URigiVEVTVFx0RFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIiwiKTsKKwkJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwkJREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQl0ZXN0X2xvbmcoZGVzdHZhbCwgc3JjdmFsKTsKKwkgICAgfSBlbHNlIHsKKwkJdTE2IGRlc3R2YWwsc3JjdmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgdGVzdF93b3JkKGRlc3R2YWwsIHNyY3ZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBPUCBNT0Q9MDEgUkg9MDEgT1A9RjZcbiIpOwotICAgICAgICAgICAgSEFMVF9TWVMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiLCIpOworCQlzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworCQlERUNPREVfUFJJTlRGMigiJXhcbiIsIHNyY3ZhbCk7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCXRlc3Rfd29yZChkZXN0dmFsLCBzcmN2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBPUCBNT0Q9MDEgUkg9MDEgT1A9RjZcbiIpOworCSAgICBIQUxUX1NZUygpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gbm90X2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTk9UXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGVzdHZhbCA9IG5vdF9sb25nKGRlc3R2YWwpOworCQlzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXUxNiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5vdF93b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKKwkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkZXN0dmFsID0gbm90X3dvcmQoZGVzdHZhbCk7CisJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gbmVnX2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTkVHXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGVzdHZhbCA9IG5lZ19sb25nKGRlc3R2YWwpOworCQlzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXUxNiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5lZ193b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKKwkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkZXN0dmFsID0gbmVnX3dvcmQoZGVzdHZhbCk7CisJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBtdWxfbG9uZyhkZXN0dmFsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJCURFQ09ERV9QUklOVEYoIk1VTFx0RFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCW11bF9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIG11bF93b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJNVUxcdFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCW11bF93b3JkKGRlc3R2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpbXVsX2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJJTVVMXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJaW11bF9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpbXVsX3dvcmQoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJCURFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWltdWxfd29yZChkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDY6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkaXZfbG9uZyhkZXN0dmFsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJCURFQ09ERV9QUklOVEYoIkRJVlx0RFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWRpdl9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGRpdl93b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJESVZcdFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWRpdl93b3JkKGRlc3R2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgNzoKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpZGl2X2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJJRElWXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJaWRpdl9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpZGl2X3dvcmQoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0wMSAqLworCQlERUNPREVfUFJJTlRGKCJJRElWXHRXT1JEIFBUUiAiKTsKKwkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlpZGl2X3dvcmQoZGVzdHZhbCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTAxICovCiAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCi0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCxzcmN2YWw7CisJc3dpdGNoIChyaCkgeworCWNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbCxzcmN2YWw7CiAKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHREV09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsIHNyY3ZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLHNyY3ZhbDsKKwkJREVDT0RFX1BSSU5URigiVEVTVFx0RFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIiwiKTsKKwkJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwkJREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQl0ZXN0X2xvbmcoZGVzdHZhbCwgc3JjdmFsKTsKKwkgICAgfSBlbHNlIHsKKwkJdTE2IGRlc3R2YWwsc3JjdmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgc3JjdmFsKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgdGVzdF93b3JkKGRlc3R2YWwsIHNyY3ZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBPUCBNT0Q9MTAgUkg9MDEgT1A9RjZcbiIpOwotICAgICAgICAgICAgSEFMVF9TWVMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiLCIpOworCQlzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworCQlERUNPREVfUFJJTlRGMigiJXhcbiIsIHNyY3ZhbCk7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCXRlc3Rfd29yZChkZXN0dmFsLCBzcmN2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBPUCBNT0Q9MTAgUkg9MDEgT1A9RjZcbiIpOworCSAgICBIQUxUX1NZUygpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gbm90X2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTk9UXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGVzdHZhbCA9IG5vdF9sb25nKGRlc3R2YWwpOworCQlzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXUxNiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5vdF93b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKKwkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkZXN0dmFsID0gbm90X3dvcmQoZGVzdHZhbCk7CisJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gbmVnX2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTkVHXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGVzdHZhbCA9IG5lZ19sb25nKGRlc3R2YWwpOworCQlzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXUxNiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKLSAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5lZ193b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKKwkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkZXN0dmFsID0gbmVnX3dvcmQoZGVzdHZhbCk7CisJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBtdWxfbG9uZyhkZXN0dmFsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJCURFQ09ERV9QUklOVEYoIk1VTFx0RFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCW11bF9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIG11bF93b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJNVUxcdFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCW11bF93b3JkKGRlc3R2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpbXVsX2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJJTVVMXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJaW11bF9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpbXVsX3dvcmQoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJCURFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWltdWxfd29yZChkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDY6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkaXZfbG9uZyhkZXN0dmFsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJCURFQ09ERV9QUklOVEYoIkRJVlx0RFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWRpdl9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGRpdl93b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJESVZcdFdPUkQgUFRSICIpOworCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWRpdl93b3JkKGRlc3R2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgNzoKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0RFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpZGl2X2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCQlERUNPREVfUFJJTlRGKCJJRElWXHREV09SRCBQVFIgIik7CisJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJaWRpdl9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdFdPUkQgUFRSICIpOwotICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBpZGl2X3dvcmQoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMCAqLworCQlERUNPREVfUFJJTlRGKCJJRElWXHRXT1JEIFBUUiAiKTsKKwkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlpZGl2X3dvcmQoZGVzdHZhbCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTEwICovCiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCi0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKwlzd2l0Y2ggKHJoKSB7CisJY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiAqZGVzdHJlZzsKKwkJdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdCIpOwotICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgdGVzdF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkJREVDT0RFX1BSSU5URigiVEVTVFx0Iik7CisJCWRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJCURFQ09ERV9QUklOVEYoIiwiKTsKKwkJc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKwkJREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQl0ZXN0X2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CisJICAgIH0gZWxzZSB7CisJCXUxNiAqZGVzdHJlZzsKKwkJdTE2IHNyY3ZhbDsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdCIpOwotICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgdGVzdF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgT1AgTU9EPTAwIFJIPTAxIE9QPUY2XG4iKTsKLSAgICAgICAgICAgIEhBTFRfU1lTKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworCQlERUNPREVfUFJJTlRGKCJURVNUXHQiKTsKKwkJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkJREVDT0RFX1BSSU5URigiLCIpOworCQlzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworCQlERUNPREVfUFJJTlRGMigiJXhcbiIsIHNyY3ZhbCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCXRlc3Rfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgT1AgTU9EPTAwIFJIPTAxIE9QPUY2XG4iKTsKKwkgICAgSEFMVF9TWVMoKTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkJdTMyICpkZXN0cmVnOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHQiKTsKLSAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IG5vdF9sb25nKCpkZXN0cmVnKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworCQlERUNPREVfUFJJTlRGKCJOT1RcdCIpOworCQlkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQkqZGVzdHJlZyA9IG5vdF9sb25nKCpkZXN0cmVnKTsKKwkgICAgfSBlbHNlIHsKKwkJdTE2ICpkZXN0cmVnOwogCi0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHQiKTsKLSAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IG5vdF93b3JkKCpkZXN0cmVnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisJCURFQ09ERV9QUklOVEYoIk5PVFx0Iik7CisJCWRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCSpkZXN0cmVnID0gbm90X3dvcmQoKmRlc3RyZWcpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0Iik7Ci0gICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBuZWdfbG9uZygqZGVzdHJlZyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKwkJREVDT0RFX1BSSU5URigiTkVHXHQiKTsKKwkJZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJKmRlc3RyZWcgPSBuZWdfbG9uZygqZGVzdHJlZyk7CisJICAgIH0gZWxzZSB7CisJCXUxNiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0Iik7Ci0gICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBuZWdfd29yZCgqZGVzdHJlZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworCQlERUNPREVfUFJJTlRGKCJORUdcdCIpOworCQlkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQkqZGVzdHJlZyA9IG5lZ193b3JkKCpkZXN0cmVnKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDQ6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgKmRlc3RyZWc7CiAKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJNVUxcdCIpOwotICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIG11bF9sb25nKCpkZXN0cmVnKTsgICAgICAvKiEhISAgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworCQlERUNPREVfUFJJTlRGKCJNVUxcdCIpOworCQlkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQltdWxfbG9uZygqZGVzdHJlZyk7ICAgICAgLyohISEgICovCisJICAgIH0gZWxzZSB7CisJCXUxNiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0Iik7Ci0gICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgbXVsX3dvcmQoKmRlc3RyZWcpOyAgICAgIC8qISEhICAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKwkJREVDT0RFX1BSSU5URigiTVVMXHQiKTsKKwkJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJbXVsX3dvcmQoKmRlc3RyZWcpOyAgICAgIC8qISEhICAqLworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgNToKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdCIpOwotICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGltdWxfbG9uZygqZGVzdHJlZyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKwkJREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CisJCWRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWltdWxfbG9uZygqZGVzdHJlZyk7CisJICAgIH0gZWxzZSB7CisJCXUxNiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdCIpOwotICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGltdWxfd29yZCgqZGVzdHJlZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworCQlERUNPREVfUFJJTlRGKCJJTVVMXHQiKTsKKwkJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJaW11bF93b3JkKCpkZXN0cmVnKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDY6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgKmRlc3RyZWc7CiAKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJESVZcdCIpOwotICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGRpdl9sb25nKCpkZXN0cmVnKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworCQlERUNPREVfUFJJTlRGKCJESVZcdCIpOworCQlkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkaXZfbG9uZygqZGVzdHJlZyk7CisJICAgIH0gZWxzZSB7CisJCXUxNiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0Iik7Ci0gICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGl2X3dvcmQoKmRlc3RyZWcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKwkJREVDT0RFX1BSSU5URigiRElWXHQiKTsKKwkJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGl2X3dvcmQoKmRlc3RyZWcpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgNzoKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdCIpOwotICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGlkaXZfbG9uZygqZGVzdHJlZyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKwkJREVDT0RFX1BSSU5URigiSURJVlx0Iik7CisJCWRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWlkaXZfbG9uZygqZGVzdHJlZyk7CisJICAgIH0gZWxzZSB7CisJCXUxNiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdCIpOwotICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGlkaXZfd29yZCgqZGVzdHJlZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMSAqLworCQlERUNPREVfUFJJTlRGKCJJRElWXHQiKTsKKwkJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJaWRpdl93b3JkKCpkZXN0cmVnKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MTEgKi8KICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMTA4OTksMTAyICsxMDg5OSwxMDIgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogI2lmZGVmIERFQlVHCiAgICAgaWYgKERFQlVHX0RFQ09ERSgpKSB7Ci0gICAgICAgIC8qIFhYWCBERUNPREVfUFJJTlRGIG1heSBiZSBjaGFuZ2VkIHRvIHNvbWV0aGluZyBtb3JlCi0gICAgICAgICAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCi0gICAgICAgICAgIGluIHRoZSBzYW1lIGZvcm1hdCwgZXZlbiB0aG91Z2ggdGhlIHJlc3VsdCBpcyB0aGF0IHRoZSAKLSAgICAgICAgICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLworCS8qIFhYWCBERUNPREVfUFJJTlRGIG1heSBiZSBjaGFuZ2VkIHRvIHNvbWV0aGluZyBtb3JlCisJICAgZ2VuZXJhbCwgc28gdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gbGVhdmUgdGhlIHN0cmluZ3MKKwkgICBpbiB0aGUgc2FtZSBmb3JtYXQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgaXMgdGhhdCB0aGUKKwkgICBhYm92ZSB0ZXN0IGlzIGRvbmUgdHdpY2UuICovCiAKLSAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICBjYXNlIDM6Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgY2FzZSA1OgotICAgICAgICBjYXNlIDY6Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCJJTExFR0FMIE9QIE1BSk9SIE9QIDB4RkUgTUlOT1IgT1AgJXggXG4iLCBtb2QpOwotICAgICAgICAgICAgSEFMVF9TWVMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJc3dpdGNoIChyaCkgeworCWNhc2UgMDoKKwkgICAgREVDT0RFX1BSSU5URigiSU5DXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBERUNPREVfUFJJTlRGKCJERUNcdCIpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCWNhc2UgNDoKKwljYXNlIDU6CisJY2FzZSA2OgorCWNhc2UgNzoKKwkgICAgREVDT0RFX1BSSU5URjIoIklMTEVHQUwgT1AgTUFKT1IgT1AgMHhGRSBNSU5PUiBPUCAleCBcbiIsIG1vZCk7CisJICAgIEhBTFRfU1lTKCk7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAjZW5kaWYKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gaW5jX2J5dGUoZGVzdHZhbCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOiAgICAgICAgIC8qIGRlYyB3b3JkIHB0ciAuLi4gKi8KLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGRlY19ieXRlKGRlc3R2YWwpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJc3dpdGNoIChyaCkgeworCWNhc2UgMDogICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBpbmNfYnl0ZShkZXN0dmFsKTsKKwkgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCSAgICBicmVhazsKKwljYXNlIDE6ICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gZGVjX2J5dGUoZGVzdHZhbCk7CisJICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfYnl0ZShkZXN0dmFsKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9ieXRlKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBkZWNfYnl0ZShkZXN0dmFsKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCURFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCXN3aXRjaCAocmgpIHsKKwljYXNlIDA6CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBpbmNfYnl0ZShkZXN0dmFsKTsKKwkgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBkZWNfYnl0ZShkZXN0dmFsKTsKKwkgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCSAgICBicmVhazsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBERUNPREVfUFJJTlRGKCJCWVRFIFBUUiAiKTsKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGluY19ieXRlKGRlc3R2YWwpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2J5dGUoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGRlY19ieXRlKGRlc3R2YWwpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQllURSBQVFIgIik7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJc3dpdGNoIChyaCkgeworCWNhc2UgMDoKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGluY19ieXRlKGRlc3R2YWwpOworCSAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGRlY19ieXRlKGRlc3R2YWwpOworCSAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIGJyZWFrOworCX0KKwlicmVhazsKICAgICBjYXNlIDM6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gaW5jX2J5dGUoKmRlc3RyZWcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IGRlY19ieXRlKCpkZXN0cmVnKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlzd2l0Y2ggKHJoKSB7CisJY2FzZSAwOgorCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IGluY19ieXRlKCpkZXN0cmVnKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IGRlY19ieXRlKCpkZXN0cmVnKTsKKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0xMTAxNiwzNzQgKzExMDE2LDM3NCBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAjaWZkZWYgREVCVUcKICAgICBpZiAoREVCVUdfREVDT0RFKCkpIHsKLSAgICAgICAgLyogWFhYIERFQ09ERV9QUklOVEYgbWF5IGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUKLSAgICAgICAgICAgZ2VuZXJhbCwgc28gdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gbGVhdmUgdGhlIHN0cmluZ3MKLSAgICAgICAgICAgaW4gdGhlIHNhbWUgZm9ybWF0LCBldmVuIHRob3VnaCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlCi0gICAgICAgICAgIGFib3ZlIHRlc3QgaXMgZG9uZSB0d2ljZS4gKi8KKwkvKiBYWFggREVDT0RFX1BSSU5URiBtYXkgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZQorCSAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCisJICAgaW4gdGhlIHNhbWUgZm9ybWF0LCBldmVuIHRob3VnaCB0aGUgcmVzdWx0IGlzIHRoYXQgdGhlCisJICAgYWJvdmUgdGVzdCBpcyBkb25lIHR3aWNlLiAqLwogCi0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHREV09SRCBQVFIgIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHREV09SRCBQVFIgIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0V09SRCBQVFIgIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiQ0FMTFx0ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkNBTExcdEZBUiAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJKTVBcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkpNUFx0RkFSICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgREVDT0RJTkcgT0YgT1BDT0RFIEZGXHQiKTsKLSAgICAgICAgICAgIEhBTFRfU1lTKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCXN3aXRjaCAocmgpIHsKKwljYXNlIDA6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQlERUNPREVfUFJJTlRGKCJJTkNcdERXT1JEIFBUUiAiKTsKKwkgICAgfSBlbHNlIHsKKwkJREVDT0RFX1BSSU5URigiSU5DXHRXT1JEIFBUUiAiKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQlERUNPREVfUFJJTlRGKCJERUNcdERXT1JEIFBUUiAiKTsKKwkgICAgfSBlbHNlIHsKKwkJREVDT0RFX1BSSU5URigiREVDXHRXT1JEIFBUUiAiKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIERFQ09ERV9QUklOVEYoIkNBTExcdCAiKTsKKwkgICAgYnJlYWs7CisJY2FzZSAzOgorCSAgICBERUNPREVfUFJJTlRGKCJDQUxMXHRGQVIgIik7CisJICAgIGJyZWFrOworCWNhc2UgNDoKKwkgICAgREVDT0RFX1BSSU5URigiSk1QXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA1OgorCSAgICBERUNPREVfUFJJTlRGKCJKTVBcdEZBUiAiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA2OgorCSAgICBERUNPREVfUFJJTlRGKCJQVVNIXHQiKTsKKwkgICAgYnJlYWs7CisJY2FzZSA3OgorCSAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIERFQ09ESU5HIE9GIE9QQ09ERSBGRlx0Iik7CisJICAgIEhBTFRfU1lTKCk7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAjZW5kaWYKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCi0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlzd2l0Y2ggKHJoKSB7CisJY2FzZSAwOiAgICAgICAgIC8qIGluYyB3b3JkIHB0ciAuLi4gKi8KKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkZXN0dmFsID0gaW5jX2xvbmcoZGVzdHZhbCk7CisJCXN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgfSBlbHNlIHsKKwkJdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGluY193b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6ICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLwotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWRlc3R2YWwgPSBpbmNfd29yZChkZXN0dmFsKTsKKwkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgMTogICAgICAgICAvKiBkZWMgd29yZCBwdHIgLi4uICovCisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGVzdHZhbCA9IGRlY19sb25nKGRlc3R2YWwpOworCQlzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXUxNiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBkZWNfd29yZChkZXN0dmFsKTsKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCi0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKLSAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCi0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgZGVzdHZhbDIgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCArIDIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKLSAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKLSAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKLSAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDogICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCi0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNTogICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBkZXN0dmFsMiA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7Ci0gICAgICAgICAgICBNLng4Ni5SX0NTID0gZGVzdHZhbDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OiAgICAgICAgIC8qICBwdXNoIHdvcmQgcHRyIC4uLiAqLwotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWRlc3R2YWwgPSBkZWNfd29yZChkZXN0dmFsKTsKKwkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgMjogICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisJICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworCSAgICBicmVhazsKKwljYXNlIDM6ICAgICAgICAgLyogY2FsbCBmYXIgcHRyIC4uLiAqLworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBkZXN0dmFsMiA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0ICsgMik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKKwkgICAgTS54ODYuUl9DUyA9IGRlc3R2YWwyOworCSAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisJICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworCSAgICBicmVhazsKKwljYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKwkgICAgYnJlYWs7CisJY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBkZXN0dmFsMiA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0ICsgMik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworCSAgICBNLng4Ni5SX0NTID0gZGVzdHZhbDI7CisJICAgIGJyZWFrOworCWNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIHB1c2hfbG9uZyhkZXN0dmFsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCXB1c2hfbG9uZyhkZXN0dmFsKTsKKwkgICAgfSBlbHNlIHsKKwkJdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgcHVzaF93b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCXB1c2hfd29yZChkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJc3dpdGNoIChyaCkgeworCWNhc2UgMDoKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkZXN0dmFsID0gaW5jX2xvbmcoZGVzdHZhbCk7CisJCXN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgfSBlbHNlIHsKKwkJdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGluY193b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGVzdHZhbCA9IGluY193b3JkKGRlc3R2YWwpOworCQlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkJdTMyIGRlc3R2YWw7CiAKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGRlY19sb25nKGRlc3R2YWwpOwotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWRlc3R2YWwgPSBkZWNfbG9uZyhkZXN0dmFsKTsKKwkJc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX3dvcmQoZGVzdHZhbCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjogICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7Ci0gICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6ICAgICAgICAgLyogY2FsbCBmYXIgcHRyIC4uLiAqLwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7Ci0gICAgICAgICAgICBNLng4Ni5SX0NTID0gZGVzdHZhbDI7Ci0gICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7Ci0gICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDU6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCi0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgZGVzdHZhbDIgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCArIDIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOwotICAgICAgICAgICAgTS54ODYuUl9DUyA9IGRlc3R2YWwyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkZXN0dmFsID0gZGVjX3dvcmQoZGVzdHZhbCk7CisJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDI6ICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworCSAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKwkgICAgYnJlYWs7CisJY2FzZSAzOiAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgZGVzdHZhbDIgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCArIDIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CisJICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKwkgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworCSAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKwkgICAgYnJlYWs7CisJY2FzZSA0OiAgICAgICAgIC8qIGptcCB3b3JkIHB0ciAuLi4gKi8KKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisJICAgIGJyZWFrOworCWNhc2UgNTogICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgZGVzdHZhbDIgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCArIDIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKwkgICAgTS54ODYuUl9DUyA9IGRlc3R2YWwyOworCSAgICBicmVhazsKKwljYXNlIDY6ICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlwdXNoX2xvbmcoZGVzdHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXUxNiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIHB1c2hfd29yZChkZXN0dmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlwdXNoX3dvcmQoZGVzdHZhbCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCXN3aXRjaCAocmgpIHsKKwljYXNlIDA6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gaW5jX2xvbmcoZGVzdHZhbCk7Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGVzdHZhbCA9IGluY19sb25nKGRlc3R2YWwpOworCQlzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIH0gZWxzZSB7CisJCXUxNiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfd29yZChkZXN0dmFsKTsKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisJCWRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCWRlc3R2YWwgPSBpbmNfd29yZChkZXN0dmFsKTsKKwkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCWNhc2UgMToKKwkgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJCXUzMiBkZXN0dmFsOwogCi0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBkZWNfbG9uZyhkZXN0dmFsKTsKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworCQlkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQlkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisJCXN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwkgICAgfSBlbHNlIHsKKwkJdTE2IGRlc3R2YWw7CiAKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgZGVzdHZhbCA9IGRlY193b3JkKGRlc3R2YWwpOwotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6ICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOwotICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOiAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBkZXN0dmFsMiA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0ICsgMik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOwotICAgICAgICAgICAgTS54ODYuUl9DUyA9IGRlc3R2YWwyOwotICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOwotICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OiAgICAgICAgIC8qIGptcCB3b3JkIHB0ciAuLi4gKi8KLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKLSAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDY6ICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCi0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJZGVzdHZhbCA9IGRlY193b3JkKGRlc3R2YWwpOworCQlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKwkgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisJICAgIGJyZWFrOworCWNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworCSAgICBNLng4Ni5SX0NTID0gZGVzdHZhbDI7CisJICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKwkgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisJICAgIGJyZWFrOworCWNhc2UgNDogICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworCSAgICBicmVhazsKKwljYXNlIDU6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisJICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKwkgICAgYnJlYWs7CisJY2FzZSA2OiAgICAgICAgIC8qICBwdXNoIHdvcmQgcHRyIC4uLiAqLworCSAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkJdTMyIGRlc3R2YWw7CiAKLSAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgcHVzaF9sb25nKGRlc3R2YWwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJcHVzaF9sb25nKGRlc3R2YWwpOworCSAgICB9IGVsc2UgeworCQl1MTYgZGVzdHZhbDsKIAotICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBwdXNoX3dvcmQoZGVzdHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkJZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJcHVzaF93b3JkKGRlc3R2YWwpOworCSAgICB9CisJICAgIGJyZWFrOworCX0KKwlicmVhazsKICAgICBjYXNlIDM6Ci0gICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworCXN3aXRjaCAocmgpIHsKKwljYXNlIDA6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgKmRlc3RyZWc7CiAKLSAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGluY19sb25nKCpkZXN0cmVnKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworCQlkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQkqZGVzdHJlZyA9IGluY19sb25nKCpkZXN0cmVnKTsKKwkgICAgfSBlbHNlIHsKKwkJdTE2ICpkZXN0cmVnOwogCi0gICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBpbmNfd29yZCgqZGVzdHJlZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworCQlkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQkqZGVzdHJlZyA9IGluY193b3JkKCpkZXN0cmVnKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDE6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgKmRlc3RyZWc7CiAKLSAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlY19sb25nKCpkZXN0cmVnKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworCQlkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQkqZGVzdHJlZyA9IGRlY19sb25nKCpkZXN0cmVnKTsKKwkgICAgfSBlbHNlIHsKKwkJdTE2ICpkZXN0cmVnOwogCi0gICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBkZWNfd29yZCgqZGVzdHJlZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7Ci0gICAgICAgICAgICBNLng4Ni5SX0lQID0gKmRlc3RyZWc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiT1BFUkFUSU9OIFVOREVGSU5FRCAwWEZGIFxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgSEFMVF9TWVMoKTsKLSAgICAgICAgICAgIGJyZWFrOworCQlkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCQlERUNPREVfUFJJTlRGKCJcbiIpOworCQlUUkFDRV9BTkRfU1RFUCgpOworCQkqZGVzdHJlZyA9IGRlY193b3JkKCpkZXN0cmVnKTsKKwkgICAgfQorCSAgICBicmVhazsKKwljYXNlIDI6ICAgICAgICAgLyogY2FsbCB3b3JkIHB0ciAuLi4gKi8KKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworCSAgICBNLng4Ni5SX0lQID0gKmRlc3RyZWc7CisJICAgIGJyZWFrOworCWNhc2UgMzogICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKwkgICAgREVDT0RFX1BSSU5URigiT1BFUkFUSU9OIFVOREVGSU5FRCAwWEZGIFxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIEhBTFRfU1lTKCk7CisJICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgNDogICAgICAgICAvKiBqbXAgIC4uLiAqLwotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpICgqZGVzdHJlZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiT1BFUkFUSU9OIFVOREVGSU5FRCAwWEZGIFxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgSEFMVF9TWVMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisJY2FzZSA0OiAgICAgICAgIC8qIGptcCAgLi4uICovCisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIE0ueDg2LlJfSVAgPSAodTE2KSAoKmRlc3RyZWcpOworCSAgICBicmVhazsKKwljYXNlIDU6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisJICAgIERFQ09ERV9QUklOVEYoIk9QRVJBVElPTiBVTkRFRklORUQgMFhGRiBcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBIQUxUX1NZUygpOworCSAgICBicmVhazsKKwljYXNlIDY6CisJICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCQl1MzIgKmRlc3RyZWc7CiAKLSAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICAgICBwdXNoX2xvbmcoKmRlc3RyZWcpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisJCWRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJCURFQ09ERV9QUklOVEYoIlxuIik7CisJCVRSQUNFX0FORF9TVEVQKCk7CisJCXB1c2hfbG9uZygqZGVzdHJlZyk7CisJICAgIH0gZWxzZSB7CisJCXUxNiAqZGVzdHJlZzsKIAotICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgICAgIHB1c2hfd29yZCgqZGVzdHJlZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkJREVDT0RFX1BSSU5URigiXG4iKTsKKwkJVFJBQ0VfQU5EX1NURVAoKTsKKwkJcHVzaF93b3JkKCpkZXN0cmVnKTsKKwkgICAgfQorCSAgICBicmVhazsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS9vcHMyLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUvb3BzMi5jCmluZGV4IDJhZGE0NGUuLmQzODEzMDcgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS9vcHMyLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L29wczIuYwpAQCAtNzcsNzEgKzc3LDcxIEBACiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBzd2l0Y2ggKG9wMikgewogICAgICAgY2FzZSAweDgwOgotICAgICAgICBuYW1lID0gIkpPXHQiOwotICAgICAgICBjb25kID0gIEFDQ0VTU19GTEFHKEZfT0YpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIkpPXHQiOworCWNvbmQgPSAgQUNDRVNTX0ZMQUcoRl9PRik7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4ODE6Ci0gICAgICAgIG5hbWUgPSAiSk5PXHQiOwotICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfT0YpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIkpOT1x0IjsKKwljb25kID0gIUFDQ0VTU19GTEFHKEZfT0YpOworCWJyZWFrOwogICAgICAgY2FzZSAweDgyOgotICAgICAgICBuYW1lID0gIkpCXHQiOwotICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9DRik7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiSkJcdCI7CisJY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOworCWJyZWFrOwogICAgICAgY2FzZSAweDgzOgotICAgICAgICBuYW1lID0gIkpOQlx0IjsKLSAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX0NGKTsKLSAgICAgICAgYnJlYWs7CisJbmFtZSA9ICJKTkJcdCI7CisJY29uZCA9ICFBQ0NFU1NfRkxBRyhGX0NGKTsKKwlicmVhazsKICAgICAgIGNhc2UgMHg4NDoKLSAgICAgICAgbmFtZSA9ICJKWlx0IjsKLSAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfWkYpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIkpaXHQiOworCWNvbmQgPSBBQ0NFU1NfRkxBRyhGX1pGKTsKKwlicmVhazsKICAgICAgIGNhc2UgMHg4NToKLSAgICAgICAgbmFtZSA9ICJKTlpcdCI7Ci0gICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9aRik7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiSk5aXHQiOworCWNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9aRik7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4ODY6Ci0gICAgICAgIG5hbWUgPSAiSkJFXHQiOwotICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRik7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiSkJFXHQiOworCWNvbmQgPSBBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKTsKKwlicmVhazsKICAgICAgIGNhc2UgMHg4NzoKLSAgICAgICAgbmFtZSA9ICJKTkJFXHQiOwotICAgICAgICBjb25kID0gIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSk7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiSk5CRVx0IjsKKwljb25kID0gIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSk7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4ODg6Ci0gICAgICAgIG5hbWUgPSAiSlNcdCI7Ci0gICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1NGKTsKLSAgICAgICAgYnJlYWs7CisJbmFtZSA9ICJKU1x0IjsKKwljb25kID0gQUNDRVNTX0ZMQUcoRl9TRik7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4ODk6Ci0gICAgICAgIG5hbWUgPSAiSk5TXHQiOwotICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfU0YpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIkpOU1x0IjsKKwljb25kID0gIUFDQ0VTU19GTEFHKEZfU0YpOworCWJyZWFrOwogICAgICAgY2FzZSAweDhhOgotICAgICAgICBuYW1lID0gIkpQXHQiOwotICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9QRik7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiSlBcdCI7CisJY29uZCA9IEFDQ0VTU19GTEFHKEZfUEYpOworCWJyZWFrOwogICAgICAgY2FzZSAweDhiOgotICAgICAgICBuYW1lID0gIkpOUFx0IjsKLSAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1BGKTsKLSAgICAgICAgYnJlYWs7CisJbmFtZSA9ICJKTlBcdCI7CisJY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1BGKTsKKwlicmVhazsKICAgICAgIGNhc2UgMHg4YzoKLSAgICAgICAgbmFtZSA9ICJKTFx0IjsKLSAgICAgICAgY29uZCA9IHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKTsKLSAgICAgICAgYnJlYWs7CisJbmFtZSA9ICJKTFx0IjsKKwljb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworCWJyZWFrOwogICAgICAgY2FzZSAweDhkOgotICAgICAgICBuYW1lID0gIkpOTFx0IjsKLSAgICAgICAgY29uZCA9IHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKTsKLSAgICAgICAgYnJlYWs7CisJbmFtZSA9ICJKTkxcdCI7CisJY29uZCA9IHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKTsKKwlicmVhazsKICAgICAgIGNhc2UgMHg4ZToKLSAgICAgICAgbmFtZSA9ICJKTEVcdCI7Ci0gICAgICAgIGNvbmQgPSAoeG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpIHx8Ci0gICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIkpMRVx0IjsKKwljb25kID0gKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAorCQlBQ0NFU1NfRkxBRyhGX1pGKSk7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4OGY6Ci0gICAgICAgIG5hbWUgPSAiSk5MRVx0IjsKLSAgICAgICAgY29uZCA9ICEoeG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpIHx8Ci0gICAgICAgICAgICAgICAgIEFDQ0VTU19GTEFHKEZfWkYpKTsKLSAgICAgICAgYnJlYWs7CisJbmFtZSA9ICJKTkxFXHQiOworCWNvbmQgPSAhKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAorCQkgQUNDRVNTX0ZMQUcoRl9aRikpOworCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfUFJJTlRGKG5hbWUpOwogICAgIHRhcmdldCA9IChzMTYpIGZldGNoX3dvcmRfaW1tKCk7CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgdGFyZ2V0KTsKICAgICBUUkFDRV9BTkRfU1RFUCgpOwogICAgIGlmIChjb25kKQotICAgICAgICBNLng4Ni5SX0lQID0gKHUxNil0YXJnZXQ7CisJTS54ODYuUl9JUCA9ICh1MTYpdGFyZ2V0OwogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKIH0KQEAgLTE2OSw5NSArMTY5LDk1IEBACiAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKICAgICBzd2l0Y2ggKG9wMikgewogICAgICAgY2FzZSAweDkwOgotICAgICAgICBuYW1lID0gIlNFVE9cdCI7Ci0gICAgICAgIGNvbmQgPSAgQUNDRVNTX0ZMQUcoRl9PRik7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiU0VUT1x0IjsKKwljb25kID0gIEFDQ0VTU19GTEFHKEZfT0YpOworCWJyZWFrOwogICAgICAgY2FzZSAweDkxOgotICAgICAgICBuYW1lID0gIlNFVE5PXHQiOwotICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfT0YpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIlNFVE5PXHQiOworCWNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9PRik7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4OTI6Ci0gICAgICAgIG5hbWUgPSAiU0VUQlx0IjsKLSAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIlNFVEJcdCI7CisJY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOworCWJyZWFrOwogICAgICAgY2FzZSAweDkzOgotICAgICAgICBuYW1lID0gIlNFVE5CXHQiOwotICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfQ0YpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIlNFVE5CXHQiOworCWNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9DRik7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4OTQ6Ci0gICAgICAgIG5hbWUgPSAiU0VUWlx0IjsKLSAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfWkYpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIlNFVFpcdCI7CisJY29uZCA9IEFDQ0VTU19GTEFHKEZfWkYpOworCWJyZWFrOwogICAgICAgY2FzZSAweDk1OgotICAgICAgICBuYW1lID0gIlNFVE5aXHQiOwotICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfWkYpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIlNFVE5aXHQiOworCWNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9aRik7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4OTY6Ci0gICAgICAgIG5hbWUgPSAiU0VUQkVcdCI7Ci0gICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKTsKLSAgICAgICAgYnJlYWs7CisJbmFtZSA9ICJTRVRCRVx0IjsKKwljb25kID0gQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRik7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4OTc6Ci0gICAgICAgIG5hbWUgPSAiU0VUTkJFXHQiOwotICAgICAgICBjb25kID0gIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSk7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiU0VUTkJFXHQiOworCWNvbmQgPSAhKEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpKTsKKwlicmVhazsKICAgICAgIGNhc2UgMHg5ODoKLSAgICAgICAgbmFtZSA9ICJTRVRTXHQiOwotICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9TRik7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiU0VUU1x0IjsKKwljb25kID0gQUNDRVNTX0ZMQUcoRl9TRik7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4OTk6Ci0gICAgICAgIG5hbWUgPSAiU0VUTlNcdCI7Ci0gICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9TRik7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiU0VUTlNcdCI7CisJY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1NGKTsKKwlicmVhazsKICAgICAgIGNhc2UgMHg5YToKLSAgICAgICAgbmFtZSA9ICJTRVRQXHQiOwotICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9QRik7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiU0VUUFx0IjsKKwljb25kID0gQUNDRVNTX0ZMQUcoRl9QRik7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4OWI6Ci0gICAgICAgIG5hbWUgPSAiU0VUTlBcdCI7Ci0gICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9QRik7Ci0gICAgICAgIGJyZWFrOworCW5hbWUgPSAiU0VUTlBcdCI7CisJY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1BGKTsKKwlicmVhazsKICAgICAgIGNhc2UgMHg5YzoKLSAgICAgICAgbmFtZSA9ICJTRVRMXHQiOwotICAgICAgICBjb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIlNFVExcdCI7CisJY29uZCA9IHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKTsKKwlicmVhazsKICAgICAgIGNhc2UgMHg5ZDoKLSAgICAgICAgbmFtZSA9ICJTRVROTFx0IjsKLSAgICAgICAgY29uZCA9IHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKTsKLSAgICAgICAgYnJlYWs7CisJbmFtZSA9ICJTRVROTFx0IjsKKwljb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworCWJyZWFrOwogICAgICAgY2FzZSAweDllOgotICAgICAgICBuYW1lID0gIlNFVExFXHQiOwotICAgICAgICBjb25kID0gKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAotICAgICAgICAgICAgICAgIEFDQ0VTU19GTEFHKEZfWkYpKTsKLSAgICAgICAgYnJlYWs7CisJbmFtZSA9ICJTRVRMRVx0IjsKKwljb25kID0gKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAorCQlBQ0NFU1NfRkxBRyhGX1pGKSk7CisJYnJlYWs7CiAgICAgICBjYXNlIDB4OWY6Ci0gICAgICAgIG5hbWUgPSAiU0VUTkxFXHQiOwotICAgICAgICBjb25kID0gISh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKLSAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOwotICAgICAgICBicmVhazsKKwluYW1lID0gIlNFVE5MRVx0IjsKKwljb25kID0gISh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKwkJIEFDQ0VTU19GTEFHKEZfWkYpKTsKKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX1BSSU5URihuYW1lKTsKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBjb25kID8gMHgwMSA6IDB4MDApOwotICAgICAgICBicmVhazsKKwlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwlzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgY29uZCA/IDB4MDEgOiAweDAwKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGNvbmQgPyAweDAxIDogMHgwMCk7Ci0gICAgICAgIGJyZWFrOworCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCXN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBjb25kID8gMHgwMSA6IDB4MDApOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgY29uZCA/IDB4MDEgOiAweDAwKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCVRSQUNFX0FORF9TVEVQKCk7CisJc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGNvbmQgPyAweDAxIDogMHgwMCk7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gY29uZCA/IDB4MDEgOiAweDAwOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBjb25kID8gMHgwMSA6IDB4MDA7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTMwNiwxMDcgKzMwNiwxMDcgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7Ci0gICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgc3JjdmFsOworCSAgICB1MzIgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7Ci0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOwotICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisJICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CisJfSBlbHNlIHsKKwkgICAgdTE2IHNyY3ZhbDsKKwkgICAgdTE2ICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7Ci0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisJICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOwotICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIHNyY3ZhbDsKKwkgICAgdTMyICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOwotICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOwotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKLSAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworCSAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworCX0gZWxzZSB7CisJICAgIHUxNiBzcmN2YWw7CisJICAgIHUxNiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOwotICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOwotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworCSAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworCX0KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKLSAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBzcmN2YWw7CisJICAgIHUzMiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7Ci0gICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKwkgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKwl9IGVsc2UgeworCSAgICB1MTYgc3JjdmFsOworCSAgICB1MTYgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKwkgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKnNyY3JlZywqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgKDB4MSA8PCBiaXQpLEZfQ0YpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpzcmNyZWcsKnNoaWZ0cmVnOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksRl9DRik7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpzcmNyZWcsKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgKDB4MSA8PCBiaXQpLEZfQ0YpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSxGX0NGKTsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTQyNywxMjMgKzQyNywxMjMgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzaGlmdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnLCpzaGlmdHJlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWcsKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsc2hpZnQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gc2hsZF93b3JkKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC01NjMsMTA3ICs1NjMsMTA3IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzaGlmdHJlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC03MTIsODUgKzcxMiw4NSBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOwotICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIHNyY3ZhbCxtYXNrOworCSAgICB1MzIgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7Ci0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7Ci0gICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOwotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7Ci0gICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKwkgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisJICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CisJfSBlbHNlIHsKKwkgICAgdTE2IHNyY3ZhbCxtYXNrOworCSAgICB1MTYgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKwkgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CiAJCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKLSAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBzcmN2YWwsbWFzazsKKwkgICAgdTMyICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOwotICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOwotICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOwotICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisJICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworCX0gZWxzZSB7CisJICAgIHUxNiBzcmN2YWwsbWFzazsKKwkgICAgdTE2ICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7Ci0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisJICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOwogCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOwotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CisJICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7Ci0gICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgc3JjdmFsLG1hc2s7CisJICAgIHUzMiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKLSAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKLSAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworCSAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKwkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKwl9IGVsc2UgeworCSAgICB1MTYgc3JjdmFsLG1hc2s7CisJICAgIHUxNiAqc2hpZnRyZWc7CiAKIAkJCXNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwogCQkJREVDT0RFX1BSSU5URigiLCIpOwpAQCAtODI3LDEwICs4MjcsMTAgQEAKIAkJCVRSQUNFX0FORF9TVEVQKCk7CiAJCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CiAJCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKLSAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CisJICAgICpzcmNyZWcgfD0gbWFzazsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTg1MSwxMjMgKzg1MSwxMjMgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzaGlmdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnLCpzaGlmdHJlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWcsKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsc2hpZnQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC05ODcsMTA3ICs5ODcsMTA3IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgZGVzdHZhbDsKLSAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBkZXN0dmFsOworCSAgICB1MzIgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgZGVzdHZhbDsKLSAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKwkgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0gZWxzZSB7CisJICAgIHUxNiBkZXN0dmFsOworCSAgICB1MTYgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKwkgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKwkgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIGRlc3R2YWw7Ci0gICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgZGVzdHZhbDsKKwkgICAgdTMyICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IGRlc3R2YWw7Ci0gICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisJICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9IGVsc2UgeworCSAgICB1MTYgZGVzdHZhbDsKKwkgICAgdTE2ICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CisJICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisJICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBkZXN0dmFsOwotICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIGRlc3R2YWw7CisJICAgIHUzMiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBkZXN0dmFsOwotICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworCSAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfSBlbHNlIHsKKwkgICAgdTE2IGRlc3R2YWw7CisJICAgIHUxNiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOwotICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworCSAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworCSAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzaGlmdHJlZzsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNocmRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0xMTA3LDE2NCArMTEwNywxNjQgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7Ci0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOworCSAgICB1MzIgcmVzX2xvLHJlc19oaTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7Ci0gICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7Ci0gICAgICAgICAgICB1MzIgcmVzOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7CisJICAgIGlmIChyZXNfaGkgIT0gMCkgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CisJICAgIHUzMiByZXM7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKLSAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKKwkgICAgaWYgKHJlcyA+IDB4RkZGRikgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7Ci0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOworCSAgICB1MzIgcmVzX2xvLHJlc19oaTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7Ci0gICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7Ci0gICAgICAgICAgICB1MzIgcmVzOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7CisJICAgIGlmIChyZXNfaGkgIT0gMCkgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CisJICAgIHUzMiByZXM7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKLSAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKKwkgICAgaWYgKHJlcyA+IDB4RkZGRikgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7Ci0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOworCSAgICB1MzIgcmVzX2xvLHJlc19oaTsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7Ci0gICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7Ci0gICAgICAgICAgICB1MzIgcmVzOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7CisJICAgIGlmIChyZXNfaGkgIT0gMCkgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CisJICAgIHUzMiByZXM7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKLSAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKKwkgICAgaWYgKHJlcyA+IDB4RkZGRikgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7Ci0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisJICAgIHUzMiByZXNfbG8scmVzX2hpOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKmRlc3RyZWcsKHMzMikqc3JjcmVnKTsKLSAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgewotICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOwotICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOwotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7Ci0gICAgICAgICAgICB1MzIgcmVzOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKSpzcmNyZWcpOworCSAgICBpZiAocmVzX2hpICE9IDApIHsKKwkJU0VUX0ZMQUcoRl9DRik7CisJCVNFVF9GTEFHKEZfT0YpOworCSAgICB9IGVsc2UgeworCQlDTEVBUl9GTEFHKEZfQ0YpOworCQlDTEVBUl9GTEFHKEZfT0YpOworCSAgICB9CisJICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisJICAgIHUzMiByZXM7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICByZXMgPSAoczE2KSpkZXN0cmVnICogKHMxNikqc3JjcmVnOwotICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgewotICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOwotICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOwotICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKwkgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpKnNyY3JlZzsKKwkgICAgaWYgKHJlcyA+IDB4RkZGRikgeworCQlTRVRfRkxBRyhGX0NGKTsKKwkJU0VUX0ZMQUcoRl9PRik7CisJICAgIH0gZWxzZSB7CisJCUNMRUFSX0ZMQUcoRl9DRik7CisJCUNMRUFSX0ZMQUcoRl9PRik7CisJICAgIH0KKwkgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKwl9CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTEyODUsMzUgKzEyODUsMzUgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgTS54ODYuUl9TUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKLSAgICAgICAgYnJlYWs7CisJZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCU0ueDg2LlJfU1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgTS54ODYuUl9TUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKLSAgICAgICAgYnJlYWs7CisJZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCU0ueDg2LlJfU1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgTS54ODYuUl9TUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKLSAgICAgICAgYnJlYWs7CisJZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCU0ueDg2LlJfU1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIC8qIFVOREVGSU5FRCEgKi8KLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkvKiBVTkRFRklORUQhICovCisJVFJBQ0VfQU5EX1NURVAoKTsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMTQ3MywzNSArMTQ3MywzNSBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICBNLng4Ni5SX0ZTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOwotICAgICAgICBicmVhazsKKwlkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJTS54ODYuUl9GUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICBNLng4Ni5SX0ZTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOwotICAgICAgICBicmVhazsKKwlkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJTS54ODYuUl9GUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICBNLng4Ni5SX0ZTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOwotICAgICAgICBicmVhazsKKwlkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJTS54ODYuUl9GUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgLyogVU5ERUZJTkVEISAqLwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworCS8qIFVOREVGSU5FRCEgKi8KKwlUUkFDRV9BTkRfU1RFUCgpOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0xNTIyLDM1ICsxNTIyLDM1IEBACiAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgIE0ueDg2LlJfR1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7Ci0gICAgICAgIGJyZWFrOworCWRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwlNLng4Ni5SX0dTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgIE0ueDg2LlJfR1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7Ci0gICAgICAgIGJyZWFrOworCWRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwlNLng4Ni5SX0dTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZHN0cmVnID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgIE0ueDg2LlJfR1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7Ci0gICAgICAgIGJyZWFrOworCWRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwlNLng4Ni5SX0dTID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIDIpOworCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICAvKiBVTkRFRklORUQhICovCi0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisJLyogVU5ERUZJTkVEISAqLworCVRSQUNFX0FORF9TVEVQKCk7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTE1NzAsMTAzICsxNTcwLDEwMyBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1MzIgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1MTYgc3JjdmFsOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gc3JjdmFsOworCX0gZWxzZSB7CisJICAgIHUxNiAqZGVzdHJlZzsKKwkgICAgdTE2IHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgKmRlc3RyZWc7CisJICAgIHUzMiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUxNiBzcmN2YWw7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gc3JjdmFsOworCX0KKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpkZXN0cmVnOworCSAgICB1OCAgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSAqc3JjcmVnOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTggICpzcmNyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9ICpzcmNyZWc7CisJfSBlbHNlIHsKKwkgICAgdTE2ICpkZXN0cmVnOworCSAgICB1OCAgKnNyY3JlZzsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSAqc3JjcmVnOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgKmRlc3RyZWcgPSAqc3JjcmVnOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMTY4OSw0MCArMTY4OSw0MCBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gc3JjdmFsOworCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gc3JjdmFsOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzcmN2YWw7CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IHNyY3ZhbDsKKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9ICpzcmNyZWc7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKQEAgLTE3NDIsMjM3ICsxNzQyLDIzNyBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChyaCkgewogICAgIGNhc2UgMzoKLSAgICAgICAgREVDT0RFX1BSSU5URigiQlRcdCIpOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGKCJCVFx0Iik7CisJYnJlYWs7CiAgICAgY2FzZSA0OgotICAgICAgICBERUNPREVfUFJJTlRGKCJCVFNcdCIpOwotICAgICAgICBicmVhazsKKwlERUNPREVfUFJJTlRGKCJCVFNcdCIpOworCWJyZWFrOwogICAgIGNhc2UgNToKLSAgICAgICAgREVDT0RFX1BSSU5URigiQlRSXHQiKTsKLSAgICAgICAgYnJlYWs7CisJREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKwlicmVhazsKICAgICBjYXNlIDY6Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIkJUQ1x0Iik7Ci0gICAgICAgIGJyZWFrOworCURFQ09ERV9QUklOVEYoIkJUQ1x0Iik7CisJYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFXG4iKTsKLSAgICAgICAgVFJBQ0VfUkVHUygpOwotICAgICAgICBwcmludGsoIiUwNHg6JTA0eDogJTAyWCUwMlggSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFIEVYVEVOU0lPTiFcbiIsCi0gICAgICAgICAgICAgICAgTS54ODYuUl9DUywgTS54ODYuUl9JUC0zLG9wMiwgKG1vZDw8Nil8KHJoPDwzKXxybCk7Ci0gICAgICAgIEhBTFRfU1lTKCk7CisJREVDT0RFX1BSSU5URigiSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFXG4iKTsKKwlUUkFDRV9SRUdTKCk7CisJcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlglMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSBFWFRFTlNJT04hXG4iLAorCQlNLng4Ni5SX0NTLCBNLng4Ni5SX0lQLTMsb3AyLCAobW9kPDw2KXwocmg8PDMpfHJsKTsKKwlIQUxUX1NZUygpOwogICAgIH0KICAgICBzd2l0Y2ggKG1vZCkgewogICAgIGNhc2UgMDoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOwotICAgICAgICAgICAgdTggc2hpZnQ7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBzcmN2YWwsIG1hc2s7CisJICAgIHU4IHNoaWZ0OwogCi0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOwotICAgICAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOwotICAgICAgICAgICAgdTggc2hpZnQ7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgYml0ID0gc2hpZnQgJiAweDFGOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKwkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKwkgICAgc3dpdGNoIChyaCkgeworCSAgICBjYXNlIDQ6CisJCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworCQlicmVhazsKKwkgICAgY2FzZSA1OgorCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisJCWJyZWFrOworCSAgICBjYXNlIDY6CisJCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJYnJlYWs7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICB1MTYgc3JjdmFsLCBtYXNrOworCSAgICB1OCBzaGlmdDsKIAotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweEY7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKLSAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOwotICAgICAgICAgICAgc3dpdGNoIChyaCkgewotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgYml0ID0gc2hpZnQgJiAweEY7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworCSAgICBzd2l0Y2ggKHJoKSB7CisJICAgIGNhc2UgNDoKKwkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisJCWJyZWFrOworCSAgICBjYXNlIDU6CisJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgNjoKKwkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlicmVhazsKKwkgICAgfQorCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKLSAgICAgICAgICAgIHU4IHNoaWZ0OworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgc3JjdmFsLCBtYXNrOworCSAgICB1OCBzaGlmdDsKIAotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweDFGOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOwotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKLSAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKLSAgICAgICAgICAgIHU4IHNoaWZ0OworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGJpdCA9IHNoaWZ0ICYgMHgxRjsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisJICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CisJICAgIHN3aXRjaCAocmgpIHsKKwkgICAgY2FzZSA0OgorCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgNToKKwkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworCQlicmVhazsKKwkgICAgY2FzZSA2OgorCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgdTE2IHNyY3ZhbCwgbWFzazsKKwkgICAgdTggc2hpZnQ7CiAKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHhGOwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7Ci0gICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOwotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKLSAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDY6Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGJpdCA9IHNoaWZ0ICYgMHhGOworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKwkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKwkgICAgc3dpdGNoIChyaCkgeworCSAgICBjYXNlIDQ6CisJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworCQlicmVhazsKKwkgICAgY2FzZSA1OgorCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisJCWJyZWFrOworCSAgICBjYXNlIDY6CisJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJYnJlYWs7CisJICAgIH0KKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7Ci0gICAgICAgICAgICB1OCBzaGlmdDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIHNyY3ZhbCwgbWFzazsKKwkgICAgdTggc2hpZnQ7CiAKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHgxRjsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOwotICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7Ci0gICAgICAgICAgICB1OCBzaGlmdDsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworCSAgICBzd2l0Y2ggKHJoKSB7CisJICAgIGNhc2UgNDoKKwkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisJCWJyZWFrOworCSAgICBjYXNlIDU6CisJCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgNjoKKwkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlicmVhazsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHUxNiBzcmN2YWwsIG1hc2s7CisJICAgIHU4IHNoaWZ0OwogCi0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOwotICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7Ci0gICAgICAgICAgICBzd2l0Y2ggKHJoKSB7Ci0gICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisJICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CisJICAgIHN3aXRjaCAocmgpIHsKKwkgICAgY2FzZSA0OgorCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgNToKKwkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworCQlicmVhazsKKwkgICAgY2FzZSA2OgorCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCSAgICB9CisJfQorCWJyZWFrOwogICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLwotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqc3JjcmVnOwotICAgICAgICAgICAgdTMyIG1hc2s7Ci0gICAgICAgICAgICB1OCBzaGlmdDsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyICpzcmNyZWc7CisJICAgIHUzMiBtYXNrOworCSAgICB1OCBzaGlmdDsKIAotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHgxRjsKLSAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKLSAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAqc3JjcmVnIHw9IG1hc2s7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgKnNyY3JlZyAmPSB+bWFzazsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAgICAqc3JjcmVnIF49IG1hc2s7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpzcmNyZWc7Ci0gICAgICAgICAgICB1MTYgbWFzazsKLSAgICAgICAgICAgIHU4IHNoaWZ0OworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CisJICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworCSAgICBzd2l0Y2ggKHJoKSB7CisJICAgIGNhc2UgNDoKKwkJKnNyY3JlZyB8PSBtYXNrOworCQlicmVhazsKKwkgICAgY2FzZSA1OgorCQkqc3JjcmVnICY9IH5tYXNrOworCQlicmVhazsKKwkgICAgY2FzZSA2OgorCQkqc3JjcmVnIF49IG1hc2s7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlicmVhazsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHUxNiAqc3JjcmVnOworCSAgICB1MTYgbWFzazsKKwkgICAgdTggc2hpZnQ7CiAKLSAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKLSAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKLSAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAqc3JjcmVnIHw9IG1hc2s7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgICAgICAgKnNyY3JlZyAmPSB+bWFzazsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAgICAqc3JjcmVnIF49IG1hc2s7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKwkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CisJICAgIHN3aXRjaCAocmgpIHsKKwkgICAgY2FzZSA0OgorCQkqc3JjcmVnIHw9IG1hc2s7CisJCWJyZWFrOworCSAgICBjYXNlIDU6CisJCSpzcmNyZWcgJj0gfm1hc2s7CisJCWJyZWFrOworCSAgICBjYXNlIDY6CisJCSpzcmNyZWcgXj0gbWFzazsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCWJyZWFrOworCSAgICB9CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0xOTkzLDEwOSArMTk5MywxMDkgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKLSAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiBzcmN2YWwsbWFzazsKKwkgICAgdTMyICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOwotICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOwotICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7Ci0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCBeIG1hc2spOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOwotICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisJICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworCSAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCBeIG1hc2spOworCX0gZWxzZSB7CisJICAgIHUxNiBzcmN2YWwsbWFzazsKKwkgICAgdTE2ICpzaGlmdHJlZzsKIAotICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7Ci0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisJICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOwogCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOwotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKIAkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsIF4gbWFzaykpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCX0KKwlicmVhazsKICAgICBjYXNlIDE6Ci0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOwotICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKwlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKwkgICAgdTMyIHNyY3ZhbCxtYXNrOworCSAgICB1MzIgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7Ci0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7Ci0gICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOwotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIF4gbWFzayk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7Ci0gICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKwkgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisJICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CisJICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIF4gbWFzayk7CisJfSBlbHNlIHsKKwkgICAgdTE2IHNyY3ZhbCxtYXNrOworCSAgICB1MTYgKnNoaWZ0cmVnOwogCi0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKwkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKwkgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CisJICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CiAJCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CiAJCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOwogCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgXiBtYXNrKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJfQorCWJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7Ci0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7Ci0gICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCSAgICB1MzIgc3JjdmFsLG1hc2s7CisJICAgIHUzMiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OwotICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKLSAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7Ci0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOwotICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgXiBtYXNrKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKLSAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworCSAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKwkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKwkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKwkgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKwl9IGVsc2UgeworCSAgICB1MTYgc3JjdmFsLG1hc2s7CisJICAgIHUxNiAqc2hpZnRyZWc7CiAKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOwotICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7Ci0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKwkgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworCSAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKwkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKIAkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKIAkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CiAJCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCBeIG1hc2spKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewogCQkJdTMyICpzcmNyZWcsKnNoaWZ0cmVnOwotICAgICAgICAgICAgdTMyIG1hc2s7CisJICAgIHUzMiBtYXNrOwogCi0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOwotICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOwogCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CiAJCQkqc3JjcmVnIF49IG1hc2s7CiAJCX0gZWxzZSB7CkBAIC0yMTA4LDEwICsyMTA4LDEwIEBACiAJCQlUUkFDRV9BTkRfU1RFUCgpOwogCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOwogCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOwotICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7Ci0gICAgICAgICAgICAqc3JjcmVnIF49IG1hc2s7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworCSAgICAqc3JjcmVnIF49IG1hc2s7CisJfQorCWJyZWFrOwogICAgIH0KICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CiAgICAgRU5EX09GX0lOU1RSKCk7CkBAIC0yMzYzLDEwMyArMjM2MywxMDMgQEAKICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOwogICAgIHN3aXRjaCAobW9kKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gKHMzMikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSAoczMyKSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSAoczE2KSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gKHMzMikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSAoczMyKSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSAoczE2KSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKLSAgICAgICAgICAgIHUzMiBzcmN2YWw7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTMyIHNyY3ZhbDsKIAotICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICAgICAgc3JjdmFsID0gKHMzMikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1MTYgKmRlc3RyZWc7Ci0gICAgICAgICAgICB1MTYgc3JjdmFsOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSAoczMyKSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHUxNiBzcmN2YWw7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworCSAgICBERUNPREVfUFJJTlRGKCIsIik7CisJICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCSAgICBzcmN2YWwgPSAoczE2KSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCi0gICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewotICAgICAgICAgICAgdTMyICpkZXN0cmVnOwotICAgICAgICAgICAgdTggICpzcmNyZWc7CisJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisJICAgIHUzMiAqZGVzdHJlZzsKKwkgICAgdTggICpzcmNyZWc7CiAKLSAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7Ci0gICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgICAgICpkZXN0cmVnID0gKHMzMikoKHM4KSpzcmNyZWcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdTE2ICpkZXN0cmVnOwotICAgICAgICAgICAgdTggICpzcmNyZWc7CisJICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKwkgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworCSAgICBERUNPREVfUFJJTlRGKCJcbiIpOworCSAgICBUUkFDRV9BTkRfU1RFUCgpOworCSAgICAqZGVzdHJlZyA9IChzMzIpKChzOCkqc3JjcmVnKTsKKwl9IGVsc2UgeworCSAgICB1MTYgKmRlc3RyZWc7CisJICAgIHU4ICAqc3JjcmVnOwogCi0gICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOwotICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICAgICAqZGVzdHJlZyA9IChzMTYpKChzOCkqc3JjcmVnKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKwkgICAgREVDT0RFX1BSSU5URigiLCIpOworCSAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisJICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisJICAgIFRSQUNFX0FORF9TVEVQKCk7CisJICAgICpkZXN0cmVnID0gKHMxNikoKHM4KSpzcmNyZWcpOworCX0KKwlicmVhazsKICAgICB9CiAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOwogICAgIEVORF9PRl9JTlNUUigpOwpAQCAtMjQ4Miw0MCArMjQ4Miw0MCBAQAogICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CiAgICAgc3dpdGNoIChtb2QpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKLSAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7Ci0gICAgICAgIHNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOwotICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOwotICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOwotICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisJc3JjdmFsID0gKHMzMikoKHMxNilmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7CisJREVDT0RFX1BSSU5URigiXG4iKTsKKwlUUkFDRV9BTkRfU1RFUCgpOworCSpkZXN0cmVnID0gc3JjdmFsOworCWJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKLSAgICAgICAgc3JjdmFsID0gKHMzMikoKHMxNilmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gc3JjdmFsOwotICAgICAgICBicmVhazsKKwlkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworCURFQ09ERV9QUklOVEYoIiwiKTsKKwlzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKwlzcmN2YWwgPSAoczMyKSgoczE2KWZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKwlERUNPREVfUFJJTlRGKCJcbiIpOworCVRSQUNFX0FORF9TVEVQKCk7CisJKmRlc3RyZWcgPSBzcmN2YWw7CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOwotICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7Ci0gICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOwotICAgICAgICBzcmN2YWwgPSAoczMyKSgoczE2KWZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKLSAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7Ci0gICAgICAgIGJyZWFrOworCWRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisJREVDT0RFX1BSSU5URigiLCIpOworCXNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworCXNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IHNyY3ZhbDsKKwlicmVhazsKICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOwotICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7Ci0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7Ci0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7Ci0gICAgICAgICpkZXN0cmVnID0gKHMzMikoKHMxNikqc3JjcmVnKTsKLSAgICAgICAgYnJlYWs7CisJZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKwlERUNPREVfUFJJTlRGKCIsIik7CisJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworCURFQ09ERV9QUklOVEYoIlxuIik7CisJVFJBQ0VfQU5EX1NURVAoKTsKKwkqZGVzdHJlZyA9IChzMzIpKChzMTYpKnNyY3JlZyk7CisJYnJlYWs7CiAgICAgfQogICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKICAgICBFTkRfT0ZfSU5TVFIoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS9wcmltX29wcy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L3ByaW1fb3BzLmMKaW5kZXggYmE0ZmZkZS4uNzJiMWJmMiAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L3ByaW1fb3BzLmMKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L3ByaW1fb3BzLmMKQEAgLTg0Myw5ICs4NDMsOSBAQAogICAgIC8qIHMgaXMgdGhlIHJvdGF0ZSBkaXN0YW5jZS4gIEl0IHZhcmllcyBmcm9tIDAgLSA4LiAqLwogCS8qIGhhdmUKIAotICAgICAgIENGICBCXzcgQl82IEJfNSBCXzQgQl8zIEJfMiBCXzEgQl8wIAorICAgICAgIENGICBCXzcgQl82IEJfNSBCXzQgQl8zIEJfMiBCXzEgQl8wCiAKLSAgICAgICB3YW50IHRvIHJvdGF0ZSB0aHJvdWdoIHRoZSBjYXJyeSBieSAicyIgYml0cy4gIFdlIGNvdWxkIAorICAgICAgIHdhbnQgdG8gcm90YXRlIHRocm91Z2ggdGhlIGNhcnJ5IGJ5ICJzIiBiaXRzLiAgV2UgY291bGQKICAgICAgICBsb29wLCBidXQgdGhhdCdzIGluZWZmaWNpZW50LiAgU28gdGhlIHdpZHRoIGlzIDksCiAgICAgICAgYW5kIHdlIHNwbGl0IGludG8gdGhyZWUgcGFydHM6CiAKQEAgLTg1NSwxMiArODU1LDEyIEBACiAKICAgICAgICBUaGUgbmV3IHJvdGF0ZSBpcyBkb25lIG1vZCA5LCBhbmQgZ2l2ZW4gdGhpcywKICAgICAgICBmb3IgYSByb3RhdGlvbiBvZiBuIGJpdHMgKG1vZCA5KSB0aGUgbmV3IGNhcnJ5IGZsYWcgaXMKLSAgICAgICB0aGVuIGxvY2F0ZWQgbiBiaXRzIGZyb20gdGhlIE1TQi4gIFRoZSBsb3cgcGFydCBpcyAKKyAgICAgICB0aGVuIGxvY2F0ZWQgbiBiaXRzIGZyb20gdGhlIE1TQi4gIFRoZSBsb3cgcGFydCBpcwogICAgICAgIHRoZW4gc2hpZnRlZCB1cCBjbnQgYml0cywgYW5kIHRoZSBoaWdoIHBhcnQgaXMgb3InZAotICAgICAgIGluLiAgVXNpbmcgQ0FQUyBmb3IgbmV3IHZhbHVlcywgYW5kIGxvd2VyY2FzZSBmb3IgdGhlIAorICAgICAgIGluLiAgVXNpbmcgQ0FQUyBmb3IgbmV3IHZhbHVlcywgYW5kIGxvd2VyY2FzZSBmb3IgdGhlCiAgICAgICAgb3JpZ2luYWwgdmFsdWVzLCB0aGlzIGNhbiBiZSBleHByZXNzZWQgYXM6CiAKLSAgICAgICBJRiBuID4gMCAKKyAgICAgICBJRiBuID4gMAogICAgICAgIDEpIENGIDwtICBiXyg4LW4pCiAgICAgICAgMikgQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXzAKICAgICAgICAzKSBCXyhuLTEpIDwtIGNmCkBAIC04NjgsMzcgKzg2OCwzNyBAQAogCSAqLwogCXJlcyA9IGQ7CiAJaWYgKChjbnQgPSBzICUgOSkgIT0gMCkgewotICAgICAgICAvKiBleHRyYWN0IHRoZSBuZXcgQ0FSUlkgRkxBRy4gKi8KLSAgICAgICAgLyogQ0YgPC0gIGJfKDgtbikgICAgICAgICAgICAgKi8KLSAgICAgICAgY2YgPSAoZCA+PiAoOCAtIGNudCkpICYgMHgxOworCS8qIGV4dHJhY3QgdGhlIG5ldyBDQVJSWSBGTEFHLiAqLworCS8qIENGIDwtICBiXyg4LW4pICAgICAgICAgICAgICovCisJY2YgPSAoZCA+PiAoOCAtIGNudCkpICYgMHgxOwogCi0gICAgICAgIC8qIGdldCB0aGUgbG93IHN0dWZmIHdoaWNoIHJvdGF0ZWQgCi0gICAgICAgICAgIGludG8gdGhlIHJhbmdlIEJfNyAuLiBCX2NudCAqLwotICAgICAgICAvKiBCXyg3KSAuLiBCXyhuKSAgPC0gIGJfKDgtKG4rMSkpIC4uIGJfMCAgKi8KLSAgICAgICAgLyogbm90ZSB0aGF0IHRoZSByaWdodCBoYW5kIHNpZGUgZG9uZSBieSB0aGUgbWFzayAqLworCS8qIGdldCB0aGUgbG93IHN0dWZmIHdoaWNoIHJvdGF0ZWQKKwkgICBpbnRvIHRoZSByYW5nZSBCXzcgLi4gQl9jbnQgKi8KKwkvKiBCXyg3KSAuLiBCXyhuKSAgPC0gIGJfKDgtKG4rMSkpIC4uIGJfMCAgKi8KKwkvKiBub3RlIHRoYXQgdGhlIHJpZ2h0IGhhbmQgc2lkZSBkb25lIGJ5IHRoZSBtYXNrICovCiAJCXJlcyA9IChkIDw8IGNudCkgJiAweGZmOwogCi0gICAgICAgIC8qIG5vdyB0aGUgaGlnaCBzdHVmZiB3aGljaCByb3RhdGVkIGFyb3VuZCAKLSAgICAgICAgICAgaW50byB0aGUgcG9zaXRpb25zIEJfY250LTIgLi4gQl8wICovCi0gICAgICAgIC8qIEJfKG4tMikgLi4gQl8wIDwtICBiXzcgLi4gYl8oOC0obi0xKSkgKi8KLSAgICAgICAgLyogc2hpZnQgaXQgZG93bndhcmQsIDctKG4tMikgPSA5LW4gcG9zaXRpb25zLiAKLSAgICAgICAgICAgYW5kIG1hc2sgb2ZmIHRoZSByZXN1bHQgYmVmb3JlIG9yJ2luZyBpbi4gCi0gICAgICAgICAqLwotICAgICAgICBtYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7Ci0gICAgICAgIHJlcyB8PSAoZCA+PiAoOSAtIGNudCkpICYgbWFzazsKKwkvKiBub3cgdGhlIGhpZ2ggc3R1ZmYgd2hpY2ggcm90YXRlZCBhcm91bmQKKwkgICBpbnRvIHRoZSBwb3NpdGlvbnMgQl9jbnQtMiAuLiBCXzAgKi8KKwkvKiBCXyhuLTIpIC4uIEJfMCA8LSAgYl83IC4uIGJfKDgtKG4tMSkpICovCisJLyogc2hpZnQgaXQgZG93bndhcmQsIDctKG4tMikgPSA5LW4gcG9zaXRpb25zLgorCSAgIGFuZCBtYXNrIG9mZiB0aGUgcmVzdWx0IGJlZm9yZSBvcidpbmcgaW4uCisJICovCisJbWFzayA9ICgxIDw8IChjbnQgLSAxKSkgLSAxOworCXJlcyB8PSAoZCA+PiAoOSAtIGNudCkpICYgbWFzazsKIAotICAgICAgICAvKiBpZiB0aGUgY2FycnkgZmxhZyB3YXMgc2V0LCBvciBpdCBpbi4gICovCisJLyogaWYgdGhlIGNhcnJ5IGZsYWcgd2FzIHNldCwgb3IgaXQgaW4uICAqLwogCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCi0gICAgICAgICAgICAvKiAgQl8obi0xKSA8LSBjZiAqLwotICAgICAgICAgICAgcmVzIHw9IDEgPDwgKGNudCAtIDEpOwotICAgICAgICB9Ci0gICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSAiY2YiICovCisJICAgIC8qICBCXyhuLTEpIDwtIGNmICovCisJICAgIHJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKwl9CisJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgYmFzZWQgb24gdGhlIHZhcmlhYmxlICJjZiIgKi8KIAkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOwotICAgICAgICAvKiBPVkVSRkxPVyBpcyBzZXQgKklGRiogY250PT0xLCB0aGVuIGl0IGlzIHRoZSAKLSAgICAgICAgICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCi0gICAgICAgIC8qIHBhcmVudGhlc2l6ZWQgdGhpcyBleHByZXNzaW9uIHNpbmNlIGl0IGFwcGVhcnMgdG8KLSAgICAgICAgICAgYmUgY2F1c2luZyBPRiB0byBiZSBtaXNzZXQgKi8KLSAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY250ID09IDEgJiYgWE9SMihjZiArICgocmVzID4+IDYpICYgMHgyKSksCisJLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIGNudD09MSwgdGhlbiBpdCBpcyB0aGUKKwkgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKwkvKiBwYXJlbnRoZXNpemVkIHRoaXMgZXhwcmVzc2lvbiBzaW5jZSBpdCBhcHBlYXJzIHRvCisJICAgYmUgY2F1c2luZyBPRiB0byBiZSBtaXNzZXQgKi8KKwlDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gNikgJiAweDIpKSwKIAkJCQkJCQkgRl9PRik7CiAKICAgICB9CkBAIC05NjMsMjIgKzk2MywyMiBAQAogCXUzMgltYXNrLCBjZiwgb2NmID0gMDsKIAogCS8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCi0gICAgLyogCisgICAgLyoKICAgICAgICBzIGlzIHRoZSByb3RhdGUgZGlzdGFuY2UuICBJdCB2YXJpZXMgZnJvbSAwIC0gOC4KLSAgICAgICBkIGlzIHRoZSBieXRlIG9iamVjdCByb3RhdGVkLiAgCisgICAgICAgZCBpcyB0aGUgYnl0ZSBvYmplY3Qgcm90YXRlZC4KIAotICAgICAgIGhhdmUgCisgICAgICAgaGF2ZQogCi0gICAgICAgQ0YgIEJfNyBCXzYgQl81IEJfNCBCXzMgQl8yIEJfMSBCXzAgCisgICAgICAgQ0YgIEJfNyBCXzYgQl81IEJfNCBCXzMgQl8yIEJfMSBCXzAKIAogICAgICAgIFRoZSBuZXcgcm90YXRlIGlzIGRvbmUgbW9kIDksIGFuZCBnaXZlbiB0aGlzLAogICAgICAgIGZvciBhIHJvdGF0aW9uIG9mIG4gYml0cyAobW9kIDkpIHRoZSBuZXcgY2FycnkgZmxhZyBpcwotICAgICAgIHRoZW4gbG9jYXRlZCBuIGJpdHMgZnJvbSB0aGUgTFNCLiAgVGhlIGxvdyBwYXJ0IGlzIAorICAgICAgIHRoZW4gbG9jYXRlZCBuIGJpdHMgZnJvbSB0aGUgTFNCLiAgVGhlIGxvdyBwYXJ0IGlzCiAgICAgICAgdGhlbiBzaGlmdGVkIHVwIGNudCBiaXRzLCBhbmQgdGhlIGhpZ2ggcGFydCBpcyBvcidkCi0gICAgICAgaW4uICBVc2luZyBDQVBTIGZvciBuZXcgdmFsdWVzLCBhbmQgbG93ZXJjYXNlIGZvciB0aGUgCisgICAgICAgaW4uICBVc2luZyBDQVBTIGZvciBuZXcgdmFsdWVzLCBhbmQgbG93ZXJjYXNlIGZvciB0aGUKICAgICAgICBvcmlnaW5hbCB2YWx1ZXMsIHRoaXMgY2FuIGJlIGV4cHJlc3NlZCBhczoKIAotICAgICAgIElGIG4gPiAwIAorICAgICAgIElGIG4gPiAwCiAgICAgICAgMSkgQ0YgPC0gIGJfKG4tMSkKICAgICAgICAyKSBCXyg4LShuKzEpKSAuLiBCXygwKSAgPC0gIGJfKDcpIC4uIGJfKG4pCiAgICAgICAgMykgQl8oOC1uKSA8LSBjZgpAQCAtOTg2LDQ5ICs5ODYsNDkgQEAKIAkgKi8KIAlyZXMgPSBkOwogCWlmICgoY250ID0gcyAlIDkpICE9IDApIHsKLSAgICAgICAgLyogZXh0cmFjdCB0aGUgbmV3IENBUlJZIEZMQUcuICovCi0gICAgICAgIC8qIENGIDwtICBiXyhuLTEpICAgICAgICAgICAgICAqLwotICAgICAgICBpZiAoY250ID09IDEpIHsKLSAgICAgICAgICAgIGNmID0gZCAmIDB4MTsKLSAgICAgICAgICAgIC8qIG5vdGUgaGFja2VyeSBoZXJlLiAgQWNjZXNzX2ZsYWcoLi4pIGV2YWx1YXRlcyB0byBlaXRoZXIKLSAgICAgICAgICAgICAgIDAgaWYgZmxhZyBub3Qgc2V0Ci0gICAgICAgICAgICAgICBub24temVybyBpZiBmbGFnIGlzIHNldC4KLSAgICAgICAgICAgICAgIGRvaW5nIGFjY2Vzc19mbGFnKC4uKSAhPSAwIGNhc3RzIHRoYXQgaW50byBlaXRoZXIgCisJLyogZXh0cmFjdCB0aGUgbmV3IENBUlJZIEZMQUcuICovCisJLyogQ0YgPC0gIGJfKG4tMSkgICAgICAgICAgICAgICovCisJaWYgKGNudCA9PSAxKSB7CisJICAgIGNmID0gZCAmIDB4MTsKKwkgICAgLyogbm90ZSBoYWNrZXJ5IGhlcmUuICBBY2Nlc3NfZmxhZyguLikgZXZhbHVhdGVzIHRvIGVpdGhlcgorCSAgICAgICAwIGlmIGZsYWcgbm90IHNldAorCSAgICAgICBub24temVybyBpZiBmbGFnIGlzIHNldC4KKwkgICAgICAgZG9pbmcgYWNjZXNzX2ZsYWcoLi4pICE9IDAgY2FzdHMgdGhhdCBpbnRvIGVpdGhlcgogCQkJICAgMC4uMSBpbiBhbnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZsYWdzIHJlZ2lzdGVyCi0gICAgICAgICAgICAgICAoaS5lLiBwYWNrZWQgYml0IGFycmF5IG9yIHVucGFja2VkLikKLSAgICAgICAgICAgICAqLworCSAgICAgICAoaS5lLiBwYWNrZWQgYml0IGFycmF5IG9yIHVucGFja2VkLikKKwkgICAgICovCiAJCQlvY2YgPSBBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKwl9IGVsc2UKKwkgICAgY2YgPSAoZCA+PiAoY250IC0gMSkpICYgMHgxOwogCi0gICAgICAgIC8qIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl9uICAqLwotICAgICAgICAvKiBub3RlIHRoYXQgdGhlIHJpZ2h0IGhhbmQgc2lkZSBkb25lIGJ5IHRoZSBtYXNrCi0gICAgICAgICAgIFRoaXMgaXMgZWZmZWN0aXZlbHkgZG9uZSBieSBzaGlmdGluZyB0aGUgCi0gICAgICAgICAgIG9iamVjdCB0byB0aGUgcmlnaHQuICBUaGUgcmVzdWx0IG11c3QgYmUgbWFza2VkLAotICAgICAgICAgICBpbiBjYXNlIHRoZSBvYmplY3QgY2FtZSBpbiBhbmQgd2FzIHRyZWF0ZWQgCi0gICAgICAgICAgIGFzIGEgbmVnYXRpdmUgbnVtYmVyLiAgTmVlZGVkPz8/ICovCisJLyogQl8oOC0obisxKSkgLi4gQl8oMCkgIDwtICBiXyg3KSAuLiBiX24gICovCisJLyogbm90ZSB0aGF0IHRoZSByaWdodCBoYW5kIHNpZGUgZG9uZSBieSB0aGUgbWFzaworCSAgIFRoaXMgaXMgZWZmZWN0aXZlbHkgZG9uZSBieSBzaGlmdGluZyB0aGUKKwkgICBvYmplY3QgdG8gdGhlIHJpZ2h0LiAgVGhlIHJlc3VsdCBtdXN0IGJlIG1hc2tlZCwKKwkgICBpbiBjYXNlIHRoZSBvYmplY3QgY2FtZSBpbiBhbmQgd2FzIHRyZWF0ZWQKKwkgICBhcyBhIG5lZ2F0aXZlIG51bWJlci4gIE5lZWRlZD8/PyAqLwogCi0gICAgICAgIG1hc2sgPSAoMSA8PCAoOCAtIGNudCkpIC0gMTsKLSAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CisJbWFzayA9ICgxIDw8ICg4IC0gY250KSkgLSAxOworCXJlcyA9IChkID4+IGNudCkgJiBtYXNrOwogCi0gICAgICAgIC8qIG5vdyB0aGUgaGlnaCBzdHVmZiB3aGljaCByb3RhdGVkIGFyb3VuZCAKLSAgICAgICAgICAgaW50byB0aGUgcG9zaXRpb25zIEJfY250LTIgLi4gQl8wICovCi0gICAgICAgIC8qIEJfKDcpIC4uIEJfKDgtKG4tMSkpIDwtICBiXyhuLTIpIC4uIGJfKDApICovCi0gICAgICAgIC8qIHNoaWZ0IGl0IGRvd253YXJkLCA3LShuLTIpID0gOS1uIHBvc2l0aW9ucy4gCi0gICAgICAgICAgIGFuZCBtYXNrIG9mZiB0aGUgcmVzdWx0IGJlZm9yZSBvcidpbmcgaW4uIAotICAgICAgICAgKi8KLSAgICAgICAgcmVzIHw9IChkIDw8ICg5IC0gY250KSk7CisJLyogbm93IHRoZSBoaWdoIHN0dWZmIHdoaWNoIHJvdGF0ZWQgYXJvdW5kCisJICAgaW50byB0aGUgcG9zaXRpb25zIEJfY250LTIgLi4gQl8wICovCisJLyogQl8oNykgLi4gQl8oOC0obi0xKSkgPC0gIGJfKG4tMikgLi4gYl8oMCkgKi8KKwkvKiBzaGlmdCBpdCBkb3dud2FyZCwgNy0obi0yKSA9IDktbiBwb3NpdGlvbnMuCisJICAgYW5kIG1hc2sgb2ZmIHRoZSByZXN1bHQgYmVmb3JlIG9yJ2luZyBpbi4KKwkgKi8KKwlyZXMgfD0gKGQgPDwgKDkgLSBjbnQpKTsKIAotICAgICAgICAvKiBpZiB0aGUgY2FycnkgZmxhZyB3YXMgc2V0LCBvciBpdCBpbi4gICovCisJLyogaWYgdGhlIGNhcnJ5IGZsYWcgd2FzIHNldCwgb3IgaXQgaW4uICAqLwogCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCi0gICAgICAgICAgICAvKiAgQl8oOC1uKSA8LSBjZiAqLwotICAgICAgICAgICAgcmVzIHw9IDEgPDwgKDggLSBjbnQpOwotICAgICAgICB9Ci0gICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIGJhc2VkIG9uIHRoZSB2YXJpYWJsZSAiY2YiICovCisJICAgIC8qICBCXyg4LW4pIDwtIGNmICovCisJICAgIHJlcyB8PSAxIDw8ICg4IC0gY250KTsKKwl9CisJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgYmFzZWQgb24gdGhlIHZhcmlhYmxlICJjZiIgKi8KIAkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOwotICAgICAgICAvKiBPVkVSRkxPVyBpcyBzZXQgKklGRiogY250PT0xLCB0aGVuIGl0IGlzIHRoZSAKLSAgICAgICAgICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCi0gICAgICAgIC8qIHBhcmVudGhlc2l6ZWQuLi4gKi8KKwkvKiBPVkVSRkxPVyBpcyBzZXQgKklGRiogY250PT0xLCB0aGVuIGl0IGlzIHRoZQorCSAgIHhvciBvZiBDRiBhbmQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0LiAgQmxlY2NrLiAqLworCS8qIHBhcmVudGhlc2l6ZWQuLi4gKi8KIAkJaWYgKGNudCA9PSAxKSB7CiAJCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiA2KSAmIDB4MikpLAogCQkJCQkJCQkgRl9PRik7CkBAIC0xMTExLDE4ICsxMTExLDE4IEBACiAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrOwogCiAgICAgLyogcm90YXRlIGxlZnQgKi8KLSAgICAvKiAKKyAgICAvKgogICAgICAgIHMgaXMgdGhlIHJvdGF0ZSBkaXN0YW5jZS4gIEl0IHZhcmllcyBmcm9tIDAgLSA4LgotICAgICAgIGQgaXMgdGhlIGJ5dGUgb2JqZWN0IHJvdGF0ZWQuICAKKyAgICAgICBkIGlzIHRoZSBieXRlIG9iamVjdCByb3RhdGVkLgogCi0gICAgICAgaGF2ZSAKKyAgICAgICBoYXZlCiAKLSAgICAgICBDRiAgQl83IC4uLiBCXzAgCisgICAgICAgQ0YgIEJfNyAuLi4gQl8wCiAKICAgICAgICBUaGUgbmV3IHJvdGF0ZSBpcyBkb25lIG1vZCA4LgogICAgICAgIE11Y2ggc2ltcGxlciB0aGFuIHRoZSAicmNsIiBvciAicmNyIiBvcGVyYXRpb25zLgogCi0gICAgICAgSUYgbiA+IDAgCisgICAgICAgSUYgbiA+IDAKICAgICAgICAxKSBCXyg3KSAuLiBCXyhuKSAgPC0gIGJfKDgtKG4rMSkpIC4uIGJfKDApCiAgICAgICAgMikgQl8obi0xKSAuLiBCXygwKSA8LSAgYl8oNykgLi4gYl8oOC1uKQogCSAqLwpAQCAtMTIxMCwzNCArMTIxMCwzNCBAQAogICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKIAogICAgIC8qIHJvdGF0ZSByaWdodCAqLwotICAgIC8qIAorICAgIC8qCiAgICAgICAgcyBpcyB0aGUgcm90YXRlIGRpc3RhbmNlLiAgSXQgdmFyaWVzIGZyb20gMCAtIDguCi0gICAgICAgZCBpcyB0aGUgYnl0ZSBvYmplY3Qgcm90YXRlZC4gIAorICAgICAgIGQgaXMgdGhlIGJ5dGUgb2JqZWN0IHJvdGF0ZWQuCiAKLSAgICAgICBoYXZlIAorICAgICAgIGhhdmUKIAotICAgICAgIEJfNyAuLi4gQl8wIAorICAgICAgIEJfNyAuLi4gQl8wCiAKICAgICAgICBUaGUgcm90YXRlIGlzIGRvbmUgbW9kIDguCiAKLSAgICAgICBJRiBuID4gMCAKKyAgICAgICBJRiBuID4gMAogICAgICAgIDEpIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl8obikKICAgICAgICAyKSBCXyg3KSAuLiBCXyg4LW4pIDwtICBiXyhuLTEpIC4uIGJfKDApCiAJICovCiAJcmVzID0gZDsKIAlpZiAoKGNudCA9IHMgJSA4KSAhPSAwKSB7ICAgICAgICAgICAvKiBub3QgYSB0eXBvLCBkbyBuYWRhIGlmIGNudD09MCAqLwotICAgICAgICAvKiBCXyg3KSAuLiBCXyg4LW4pIDwtICBiXyhuLTEpIC4uIGJfKDApICovCi0gICAgICAgIHJlcyA9IChkIDw8ICg4IC0gY250KSk7CisJLyogQl8oNykgLi4gQl8oOC1uKSA8LSAgYl8obi0xKSAuLiBiXygwKSAqLworCXJlcyA9IChkIDw8ICg4IC0gY250KSk7CiAKLSAgICAgICAgLyogQl8oOC0obisxKSkgLi4gQl8oMCkgIDwtICBiXyg3KSAuLiBiXyhuKSAqLwotICAgICAgICBtYXNrID0gKDEgPDwgKDggLSBjbnQpKSAtIDE7Ci0gICAgICAgIHJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworCS8qIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl8obikgKi8KKwltYXNrID0gKDEgPDwgKDggLSBjbnQpKSAtIDE7CisJcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CiAKLSAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIgCi0gICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKwkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKIAkJLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCi0gICAgICAgICAgIHhvciBvZiB0aGUgdHdvIG1vc3Qgc2lnbmlmaWNhbnQgYml0cy4gIEJsZWNjay4gKi8KKwkgICB4b3Igb2YgdGhlIHR3byBtb3N0IHNpZ25pZmljYW50IGJpdHMuICBCbGVjY2suICovCiAJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiA2KSwgRl9PRik7CiAJfSBlbHNlIGlmIChzICE9IDApIHsKIAkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKQEAgLTEzNjMsOSArMTM2Myw5IEBACiAJCQkJCQkJCQkoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgogCQkJCQkJCQkJIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksCiAJCQkJCQkJCQlGX09GKTsKLSAgICAgICAgfSBlbHNlIHsKKwl9IGVsc2UgewogCQkJQ0xFQVJfRkxBRyhGX09GKTsKLSAgICAgICAgfQorCX0KICAgICB9IGVsc2UgewogCQlyZXMgPSAwOwogCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAsIEZfQ0YpOwpAQCAtMTQ3NCw5ICsxNDc0LDkgQEAKIAogCQlpZiAoY250ID09IDEpIHsKIAkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDE0KSwgRl9PRik7Ci0gICAgICAgIH0gZWxzZSB7CisJfSBlbHNlIHsKIAkJCUNMRUFSX0ZMQUcoRl9PRik7Ci0gICAgICAgIH0KKwl9CiAJfSBlbHNlIHsKIAkJcmVzID0gMDsKIAkJQ0xFQVJfRkxBRyhGX0NGKTsKQEAgLTE1MDUsMTYgKzE1MDUsMTYgQEAKIAkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKIAkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOwogCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlcyA9IGQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNudCA9PSAxKSB7CisJfSBlbHNlIHsKKwkgICAgcmVzID0gZDsKKwl9CisJaWYgKGNudCA9PSAxKSB7CiAJCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAzMCksIEZfT0YpOwotICAgICAgICB9IGVsc2UgeworCX0gZWxzZSB7CiAJCQlDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICB9CisJfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcyA9IDA7CisJcmVzID0gMDsKIAkJQ0xFQVJfRkxBRyhGX0NGKTsKIAkJQ0xFQVJfRkxBRyhGX09GKTsKIAkJU0VUX0ZMQUcoRl9aRik7CkBAIC0xNTQ3LDggKzE1NDcsOCBAQAogCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOwogCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKICAgICB9IGVsc2UgaWYgKGNudCA+PSA4KSB7Ci0gICAgICAgIGlmIChzZikgewotICAgICAgICAgICAgcmVzID0gMHhmZjsKKwlpZiAoc2YpIHsKKwkgICAgcmVzID0gMHhmZjsKIAkJCVNFVF9GTEFHKEZfQ0YpOwogCQkJQ0xFQVJfRkxBRyhGX1pGKTsKIAkJCVNFVF9GTEFHKEZfU0YpOwpAQCAtMTU3NiwzMCArMTU3NiwzMCBAQAogICAgIGNudCA9IHMgJSAxNjsKIAlyZXMgPSBkOwogCWlmIChjbnQgPiAwICYmIGNudCA8IDE2KSB7Ci0gICAgICAgIG1hc2sgPSAoMSA8PCAoMTYgLSBjbnQpKSAtIDE7Ci0gICAgICAgIGNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7Ci0gICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworCW1hc2sgPSAoMSA8PCAoMTYgLSBjbnQpKSAtIDE7CisJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKwlyZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKIAkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOwotICAgICAgICBpZiAoc2YpIHsKLSAgICAgICAgICAgIHJlcyB8PSB+bWFzazsKLSAgICAgICAgfQorCWlmIChzZikgeworCSAgICByZXMgfD0gfm1hc2s7CisJfQogCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKIAkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKIAkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKICAgICB9IGVsc2UgaWYgKGNudCA+PSAxNikgewotICAgICAgICBpZiAoc2YpIHsKLSAgICAgICAgICAgIHJlcyA9IDB4ZmZmZjsKKwlpZiAoc2YpIHsKKwkgICAgcmVzID0gMHhmZmZmOwogCQkJU0VUX0ZMQUcoRl9DRik7CiAJCQlDTEVBUl9GTEFHKEZfWkYpOwogCQkJU0VUX0ZMQUcoRl9TRik7CiAJCQlTRVRfRkxBRyhGX1BGKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlcyA9IDA7CisJfSBlbHNlIHsKKwkgICAgcmVzID0gMDsKIAkJCUNMRUFSX0ZMQUcoRl9DRik7CiAJCQlTRVRfRkxBRyhGX1pGKTsKIAkJCUNMRUFSX0ZMQUcoRl9TRik7CiAJCQlDTEVBUl9GTEFHKEZfUEYpOwotICAgICAgICB9CisJfQogICAgIH0KIAlyZXR1cm4gKHUxNilyZXM7CiB9CkBAIC0xNjE2LDE5ICsxNjE2LDE5IEBACiAgICAgY250ID0gcyAlIDMyOwogCXJlcyA9IGQ7CiAJaWYgKGNudCA+IDAgJiYgY250IDwgMzIpIHsKLSAgICAgICAgbWFzayA9ICgxIDw8ICgzMiAtIGNudCkpIC0gMTsKKwltYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOwogCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOwotICAgICAgICByZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKwlyZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKIAkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOwotICAgICAgICBpZiAoc2YpIHsKLSAgICAgICAgICAgIHJlcyB8PSB+bWFzazsKLSAgICAgICAgfQorCWlmIChzZikgeworCSAgICByZXMgfD0gfm1hc2s7CisJfQogCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CiAJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOwogCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOwogICAgIH0gZWxzZSBpZiAoY250ID49IDMyKSB7Ci0gICAgICAgIGlmIChzZikgewotICAgICAgICAgICAgcmVzID0gMHhmZmZmZmZmZjsKKwlpZiAoc2YpIHsKKwkgICAgcmVzID0gMHhmZmZmZmZmZjsKIAkJCVNFVF9GTEFHKEZfQ0YpOwogCQkJQ0xFQVJfRkxBRyhGX1pGKTsKIAkJCVNFVF9GTEFHKEZfU0YpOwpAQCAtMTc0MSw5ICsxNzQxLDkgQEAKIAogCQlpZiAoY250ID09IDEpIHsKIAkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDE0KSwgRl9PRik7Ci0gICAgICAgIH0gZWxzZSB7CisJfSBlbHNlIHsKIAkJCUNMRUFSX0ZMQUcoRl9PRik7Ci0gICAgICAgIH0KKwl9CiAJfSBlbHNlIHsKIAkJcmVzID0gMDsKIAkJQ0xFQVJfRkxBRyhGX0NGKTsKQEAgLTE3NzcsOSArMTc3Nyw5IEBACiAJCX0KIAkJaWYgKGNudCA9PSAxKSB7CiAJCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAzMCksIEZfT0YpOwotICAgICAgICB9IGVsc2UgeworCX0gZWxzZSB7CiAJCQlDTEVBUl9GTEFHKEZfT0YpOwotICAgICAgICB9CisJfQogCX0gZWxzZSB7CiAJCXJlcyA9IDA7CiAJCUNMRUFSX0ZMQUcoRl9DRik7CkBAIC0xODI2LDkgKzE4MjYsOSBAQAogICAgIHJlZ2lzdGVyIHUzMiBiYzsKIAogCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKLSAgICAgICAgcmVzID0gZCAtIHMgLSAxOworCXJlcyA9IGQgLSBzIC0gMTsKICAgICBlbHNlCi0gICAgICAgIHJlcyA9IGQgLSBzOworCXJlcyA9IGQgLSBzOwogCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CiAJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CiAJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKQEAgLTE4NTEsOSArMTg1MSw5IEBACiAJcmVnaXN0ZXIgdTMyIGJjOwogCiAJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQotICAgICAgICByZXMgPSBkIC0gcyAtIDE7CisJcmVzID0gZCAtIHMgLSAxOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gZCAtIHM7CisJcmVzID0gZCAtIHM7CiAJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CiAJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOwogCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CkBAIC0yMjE5LDcgKzIyMTksNyBAQAogCWR2ZCA9IChzMTYpTS54ODYuUl9BWDsKIAlpZiAocyA9PSAwKSB7CiAJCXg4NmVtdV9pbnRyX3JhaXNlKDApOwotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogCX0KIAlkaXYgPSBkdmQgLyAoczgpczsKIAltb2QgPSBkdmQgJSAoczgpczsKQEAgLTIyOTcsNyArMjI5Nyw3IEBACiAJZG8gewogCQlkaXYgPDw9IDE7CiAJCWNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKLQkJCisKIAkJaWYgKGFic19oX2R2ZCA8IChoX3MgKyBjYXJyeSkpIHsKIAkJCWhfcyA+Pj0gMTsKIAkJCWxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOwpAQCAtMjMxMSw3ICsyMzExLDcgQEAKIAkJCWRpdiB8PSAxOwogCQkJY29udGludWU7CiAJCX0KLQkJCisKIAl9IHdoaWxlIChjb3VudGVyID4gLTEpOwogCS8qIG92ZXJmbG93ICovCiAJaWYgKGFic19oX2R2ZCB8fCAobF9kdmQgPiBhYnNfcykpIHsKQEAgLTIzNDQsMTMgKzIzNDQsMTMgQEAKIAlkdmQgPSBNLng4Ni5SX0FYOwogICAgIGlmIChzID09IDApIHsKIAkJeDg2ZW11X2ludHJfcmFpc2UoMCk7Ci0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAgICAgfQogCWRpdiA9IGR2ZCAvICh1OClzOwogCW1vZCA9IGR2ZCAlICh1OClzOwogCWlmIChhYnMoZGl2KSA+IDB4ZmYpIHsKIAkJeDg2ZW11X2ludHJfcmFpc2UoMCk7Ci0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAJfQogCU0ueDg2LlJfQUwgPSAodTgpZGl2OwogCU0ueDg2LlJfQUggPSAodTgpbW9kOwpAQCAtMjM2Nyw3ICsyMzY3LDcgQEAKIAlkdmQgPSAoKCh1MzIpTS54ODYuUl9EWCkgPDwgMTYpIHwgTS54ODYuUl9BWDsKIAlpZiAocyA9PSAwKSB7CiAJCXg4NmVtdV9pbnRyX3JhaXNlKDApOwotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogICAgIH0KIAlkaXYgPSBkdmQgLyAodTE2KXM7CiAJbW9kID0gZHZkICUgKHUxNilzOwpAQCAtMjQxMyw3ICsyNDEzLDcgQEAKIAl1MzIgbF9zID0gMDsKIAlpbnQgY291bnRlciA9IDMyOwogCWludCBjYXJyeTsKLQkJCisKIAlpZiAocyA9PSAwKSB7CiAJCXg4NmVtdV9pbnRyX3JhaXNlKDApOwogCQlyZXR1cm47CkBAIC0yNDIxLDcgKzI0MjEsNyBAQAogCWRvIHsKIAkJZGl2IDw8PSAxOwogCQljYXJyeSA9IChsX2R2ZCA+PSBsX3MpID8gMCA6IDE7Ci0JCQorCiAJCWlmIChoX2R2ZCA8IChoX3MgKyBjYXJyeSkpIHsKIAkJCWhfcyA+Pj0gMTsKIAkJCWxfcyA9IHMgPDwgKC0tY291bnRlcik7CkBAIC0yNDM1LDcgKzI0MzUsNyBAQAogCQkJZGl2IHw9IDE7CiAJCQljb250aW51ZTsKIAkJfQotCQkKKwogCX0gd2hpbGUgKGNvdW50ZXIgPiAtMSk7CiAJLyogb3ZlcmZsb3cgKi8KIAlpZiAoaF9kdmQgfHwgKGxfZHZkID4gcykpIHsKQEAgLTI0NjgsNTQgKzI0NjgsNTQgQEAKIAkJaW5jID0gLXNpemU7CiAJfQogCWlmIChNLng4Ni5tb2RlICYgKFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSkpIHsKLSAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLwotICAgICAgICAvKiBpbiB1bnRpbCBDWCBpcyBaRVJPLiAqLworCS8qIGRvbnQgY2FyZSB3aGV0aGVyIFJFUEUgb3IgUkVQTkUgKi8KKwkvKiBpbiB1bnRpbCBDWCBpcyBaRVJPLiAqLwogCQl1MzIgY291bnQgPSAoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSA/CiAJCQkJCSBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOwotICAgICAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworCXN3aXRjaCAoc2l6ZSkgeworCSAgY2FzZSAxOgorCSAgICB3aGlsZSAoY291bnQtLSkgewogCQkJCXN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKIAkJCQkJCQkJCSgqc3lzX2luYikoTS54ODYuUl9EWCkpOwogCQkJCU0ueDg2LlJfREkgKz0gaW5jOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisJICAgIH0KKwkgICAgYnJlYWs7CiAKLSAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworCSAgY2FzZSAyOgorCSAgICB3aGlsZSAoY291bnQtLSkgewogCQkJCXN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKIAkJCQkJCQkJCSgqc3lzX2ludykoTS54ODYuUl9EWCkpOwogCQkJCU0ueDg2LlJfREkgKz0gaW5jOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIGNhc2UgNDoKKwkgICAgd2hpbGUgKGNvdW50LS0pIHsKIAkJCQlzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCiAJCQkJCQkJCQkoKnN5c19pbmwpKE0ueDg2LlJfRFgpKTsKIAkJCQlNLng4Ni5SX0RJICs9IGluYzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQlicmVhazsKKwkgICAgfQorCX0KIAkJTS54ODYuUl9DWCA9IDA7CiAJCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewogCQkJTS54ODYuUl9FQ1ggPSAwOwotICAgICAgICB9CisJfQogCQlNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKICAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICAgICAgICBjYXNlIDE6CisJc3dpdGNoIChzaXplKSB7CisJICBjYXNlIDE6CiAJCQlzdG9yZV9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksCiAJCQkJCQkJCSgqc3lzX2luYikoTS54ODYuUl9EWCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAyOgorCSAgICBicmVhazsKKwkgIGNhc2UgMjoKIAkJCXN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKIAkJCQkJCQkJKCpzeXNfaW53KShNLng4Ni5SX0RYKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDQ6CisJICAgIGJyZWFrOworCSAgY2FzZSA0OgogCQkJc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAogCQkJCQkJCQkoKnN5c19pbmwpKE0ueDg2LlJfRFgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJICAgIGJyZWFrOworCX0KIAkJTS54ODYuUl9ESSArPSBpbmM7CiAgICAgfQogfQpAQCAtMjUyOSw1NyArMjUyOSw1NyBAQAogICAgIGludCBpbmMgPSBzaXplOwogCiAJaWYgKEFDQ0VTU19GTEFHKEZfREYpKSB7Ci0gICAgICAgIGluYyA9IC1zaXplOworCWluYyA9IC1zaXplOwogICAgIH0KIAlpZiAoTS54ODYubW9kZSAmIChTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpKSB7Ci0gICAgICAgIC8qIGRvbnQgY2FyZSB3aGV0aGVyIFJFUEUgb3IgUkVQTkUgKi8KLSAgICAgICAgLyogb3V0IHVudGlsIENYIGlzIFpFUk8uICovCisJLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworCS8qIG91dCB1bnRpbCBDWCBpcyBaRVJPLiAqLwogCQl1MzIgY291bnQgPSAoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSA/CiAJCQkJCSBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOwotICAgICAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworCXN3aXRjaCAoc2l6ZSkgeworCSAgY2FzZSAxOgorCSAgICB3aGlsZSAoY291bnQtLSkgewogCQkJCSgqc3lzX291dGIpKE0ueDg2LlJfRFgsCiAJCQkJCQkgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CiAJCQkJTS54ODYuUl9TSSArPSBpbmM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKwkgICAgfQorCSAgICBicmVhazsKIAotICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CisJICBjYXNlIDI6CisJICAgIHdoaWxlIChjb3VudC0tKSB7CiAJCQkJKCpzeXNfb3V0dykoTS54ODYuUl9EWCwKIAkJCQkJCSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKIAkJCQlNLng4Ni5SX1NJICs9IGluYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CisJICAgIH0KKwkgICAgYnJlYWs7CisJICBjYXNlIDQ6CisJICAgIHdoaWxlIChjb3VudC0tKSB7CiAJCQkJKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwKIAkJCQkJCSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKIAkJCQlNLng4Ni5SX1NJICs9IGluYzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQlicmVhazsKKwkgICAgfQorCX0KIAkJTS54ODYuUl9DWCA9IDA7CiAJCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgewogCQkJTS54ODYuUl9FQ1ggPSAwOwotICAgICAgICB9CisJfQogCQlNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKICAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKHNpemUpIHsKLSAgICAgICAgICBjYXNlIDE6CisJc3dpdGNoIChzaXplKSB7CisJICBjYXNlIDE6CiAJCQkoKnN5c19vdXRiKShNLng4Ni5SX0RYLAogCQkJCQkgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIDI6CisJICAgIGJyZWFrOworCSAgY2FzZSAyOgogCQkJKCpzeXNfb3V0dykoTS54ODYuUl9EWCwKIAkJCQkJIGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSA0OgorCSAgICBicmVhazsKKwkgIGNhc2UgNDoKIAkJCSgqc3lzX291dGwpKE0ueDg2LlJfRFgsCiAJCQkJCSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJICAgIGJyZWFrOworCX0KIAkJTS54ODYuUl9TSSArPSBpbmM7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L3N5cy5jIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L3N5cy5jCmluZGV4IGQ1NGNhNzkuLmFmZTU4ZjggMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS9zeXMuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUvc3lzLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogfQogCiAvKgotICogRWxlbWVudGFsIHVuYWxpZ25lZCBzdG9yZXMgCisgKiBFbGVtZW50YWwgdW5hbGlnbmVkIHN0b3JlcwogICovCiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc3RxX3UodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgbG9uZyAqIHIxMSkKQEAgLTI2OCw3ICsyNjgsNyBAQAogQnl0ZSB2YWx1ZSByZWFkIGZyb20gZW11bGF0b3IgbWVtb3J5LgogCiBSRU1BUktTOgotUmVhZHMgYSBieXRlIHZhbHVlIGZyb20gdGhlIGVtdWxhdG9yIG1lbW9yeS4gCitSZWFkcyBhIGJ5dGUgdmFsdWUgZnJvbSB0aGUgZW11bGF0b3IgbWVtb3J5LgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHU4IFg4NkFQSSByZGIoCiAgICAgdTMyIGFkZHIpCkBAIC0zMzAsNyArMzMwLDcgQEAKIFJFVFVSTlM6CiBMb25nIHZhbHVlIHJlYWQgZnJvbSBlbXVsYXRvciBtZW1vcnkuCiBSRU1BUktTOgotUmVhZHMgYSBsb25nIHZhbHVlIGZyb20gdGhlIGVtdWxhdG9yIG1lbW9yeS4gCitSZWFkcyBhIGxvbmcgdmFsdWUgZnJvbSB0aGUgZW11bGF0b3IgbWVtb3J5LgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHUzMiBYODZBUEkgcmRsKAogCXUzMiBhZGRyKQpAQCAtNDIzLDcgKzQyMyw3IEBACiB2YWwJCS0gVmFsdWUgdG8gc3RvcmUKIAogUkVNQVJLUzoKLVdyaXRlcyBhIGxvbmcgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LiAKK1dyaXRlcyBhIGxvbmcgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgWDg2QVBJIHdybCgKIAl1MzIgYWRkciwKQEAgLTYyMyw3ICs2MjMsNyBAQAogCVg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSkKIHsKICAgICBpbnQgaTsKLSAgICAKKwogCWZvciAoaT0wOyBpIDwgMjU2OyBpKyspCiAJCV9YODZFTVVfaW50clRhYltpXSA9IE5VTEw7CiAJaWYgKGZ1bmNzKSB7CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUvdmFsaWRhdGUuYyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS92YWxpZGF0ZS5jCmluZGV4IDIzOWY2YzEuLmM5NTEzMDEgMTAwNjQ0Ci0tLSBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS92YWxpZGF0ZS5jCisrKyBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS92YWxpZGF0ZS5jCkBAIC02Myw2MyArNjMsNjMgQEAKIAlpbnQgICAgICAgICBmLGZhaWxlZCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNoYXIgICAgICAgIGJ1ZjFbODBdLGJ1ZjJbODBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZm9yIChkID0gMDsgZCA8IGRtYXg7IGQgKz0gZGluY3IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZm9yIChzID0gMDsgcyA8IHNtYXg7IHMgKz0gc2luY3IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKGYgPSAwOyBmIDwgMjsgZisrKSB7CisJZm9yIChzID0gMDsgcyA8IHNtYXg7IHMgKz0gc2luY3IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3M7ICAgICAgICAgICAgIFwKKwkgICAgZm9yIChmID0gMDsgZiA8IDI7IGYrKykgewogCiAjZGVmaW5lIFZBTF9URVNUX0JJTkFSWShuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgcl9hc20gPSBuYW1lIyNfYXNtKCZmbGFncyxkLHMpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgciA9IG5hbWUoZCxzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmIChyICE9IHJfYXNtIHx8IE0ueDg2LlJfRUZMRyAhPSBmbGFncykgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmIChmYWlsZWQgfHwgdHJhY2UpIHsKKwkJcl9hc20gPSBuYW1lIyNfYXNtKCZmbGFncyxkLHMpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXIgPSBuYW1lKGQscyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKHIgIT0gcl9hc20gfHwgTS54ODYuUl9FRkxHICE9IGZsYWdzKSAgICAgICAgICAgICAgICBcCisJCSAgICBmYWlsZWQgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoZmFpbGVkIHx8IHRyYWNlKSB7CiAKICNkZWZpbmUgVkFMX1RFU1RfQklOQVJZX1ZPSUQobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBuYW1lIyNfYXNtKCZmbGFncyxkLHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBuYW1lKGQscyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgciA9IHJfYXNtID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKE0ueDg2LlJfRUZMRyAhPSBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCB8fCB0cmFjZSkgeworCQluYW1lIyNfYXNtKCZmbGFncyxkLHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJbmFtZShkLHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlyID0gcl9hc20gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKE0ueDg2LlJfRUZMRyAhPSBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBmYWlsZWQgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoZmFpbGVkIHx8IHRyYWNlKSB7CiAKICNkZWZpbmUgVkFMX0ZBSUxfQllURV9CWVRFX0JJTkFSWShuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIweCUwMlggPSAlLTE1cygweCUwMlgsMHglMDJYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgciwgI25hbWUsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDJYID0gJS0xNXMoMHglMDJYLDB4JTAyWCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJfYXNtLCAjbmFtZSJfYXNtIiwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixmbGFncykpOworCQkgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcHJpbnRrKCJmYWlsXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBwcmludGsoIjB4JTAyWCA9ICUtMTVzKDB4JTAyWCwweCUwMlgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlyLCAjbmFtZSwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixNLng4Ni5SX0VGTEcpKTsgICAgIFwKKwkJICAgIHByaW50aygiMHglMDJYID0gJS0xNXMoMHglMDJYLDB4JTAyWCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXJfYXNtLCAjbmFtZSJfYXNtIiwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixmbGFncykpOwogCiAjZGVmaW5lIFZBTF9GQUlMX1dPUkRfV09SRF9CSU5BUlkobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJmYWlsXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDRYID0gJS0xNXMoMHglMDRYLDB4JTA0WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHIsICNuYW1lLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLE0ueDg2LlJfRUZMRykpOyAgIFwKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIweCUwNFggPSAlLTE1cygweCUwNFgsMHglMDRYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgcl9hc20sICNuYW1lIl9hc20iLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLGZsYWdzKSk7CisJCSAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICAgIHByaW50aygiMHglMDRYID0gJS0xNXMoMHglMDRYLDB4JTA0WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXIsICNuYW1lLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLE0ueDg2LlJfRUZMRykpOyAgIFwKKwkJICAgIHByaW50aygiMHglMDRYID0gJS0xNXMoMHglMDRYLDB4JTA0WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXJfYXNtLCAjbmFtZSJfYXNtIiwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixmbGFncykpOwogCiAjZGVmaW5lIFZBTF9GQUlMX0xPTkdfTE9OR19CSU5BUlkobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJmYWlsXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDhYID0gJS0xNXMoMHglMDhYLDB4JTA4WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHIsICNuYW1lLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLE0ueDg2LlJfRUZMRykpOyBcCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDhYID0gJS0xNXMoMHglMDhYLDB4JTA4WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJfYXNtLCAjbmFtZSJfYXNtIiwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixmbGFncykpOworCQkgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcHJpbnRrKCJmYWlsXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBwcmludGsoIjB4JTA4WCA9ICUtMTVzKDB4JTA4WCwweCUwOFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlyLCAjbmFtZSwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixNLng4Ni5SX0VGTEcpKTsgXAorCQkgICAgcHJpbnRrKCIweCUwOFggPSAlLTE1cygweCUwOFgsMHglMDhYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcl9hc20sICNuYW1lIl9hc20iLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLGZsYWdzKSk7CiAKICNkZWZpbmUgVkFMX0VORF9CSU5BUlkoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIE0ueDg2LlJfRUZMRyA9IGluZmxhZ3MgPSBmbGFncyA9IGRlZl9mbGFncyB8IChBTExfRkxBR1MgJiB+Rl9PRik7ICAgXAotICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCU0ueDg2LlJfRUZMRyA9IGluZmxhZ3MgPSBmbGFncyA9IGRlZl9mbGFncyB8IChBTExfRkxBR1MgJiB+Rl9PRik7ICAgXAorCQlpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBwcmludGsoInBhc3NlZFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwcmludGsoInBhc3NlZFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBWQUxfQllURV9CWVRFX0JJTkFSWShuYW1lKSAgICAgICAgICBcCkBAIC0xOTQsNTEgKzE5NCw1MSBAQAogICAgIGludCAgICAgICAgIGYsZmFpbGVkID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2hhciAgICAgICAgYnVmMVs4MF0sYnVmMls4MF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBmb3IgKGQgPSAwOyBkIDwgZG1heDsgZCArPSBkaW5jcikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBmb3IgKHMgPSAwOyBzIDwgc21heDsgcyArPSBzaW5jcikgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKHNoaWZ0ID0gMDsgc2hpZnQgPCBtYXhzaGlmdDsgc2hpZnQgKz0gMSkgeyAgICAgICAgXAotICAgICAgICAgICAgICAgIE0ueDg2LlJfRUZMRyA9IGluZmxhZ3MgPSBmbGFncyA9IGRlZl9mbGFnczsgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeworCWZvciAocyA9IDA7IHMgPCBzbWF4OyBzICs9IHNpbmNyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgZm9yIChzaGlmdCA9IDA7IHNoaWZ0IDwgbWF4c2hpZnQ7IHNoaWZ0ICs9IDEpIHsgICAgICAgIFwKKwkJTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzOyAgICAgICAgIFwKKwkJZm9yIChmID0gMDsgZiA8IDI7IGYrKykgewogCiAjZGVmaW5lIFZBTF9URVNUX1RFUk5BUlkobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHJfYXNtID0gbmFtZSMjX2FzbSgmZmxhZ3MsZCxzLHNoaWZ0KTsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHIgPSBuYW1lKGQscyxzaGlmdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBpZiAociAhPSByX2FzbSB8fCBNLng4Ni5SX0VGTEcgIT0gZmxhZ3MpICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBpZiAoZmFpbGVkIHx8IHRyYWNlKSB7CisJCSAgICByX2FzbSA9IG5hbWUjI19hc20oJmZsYWdzLGQscyxzaGlmdCk7ICAgICAgICAgICAgICAgXAorCQkgICAgciA9IG5hbWUoZCxzLHNoaWZ0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBpZiAociAhPSByX2FzbSB8fCBNLng4Ni5SX0VGTEcgIT0gZmxhZ3MpICAgICAgICAgICAgXAorCQkJZmFpbGVkID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgaWYgKGZhaWxlZCB8fCB0cmFjZSkgewogCiAjZGVmaW5lIFZBTF9GQUlMX1dPUkRfV09SRF9URVJOQVJZKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDRYID0gJS0xNXMoMHglMDRYLDB4JTA0WCwlZCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByLCAjbmFtZSwgZCwgcywgc2hpZnQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIweCUwNFggPSAlLTE1cygweCUwNFgsMHglMDRYLCVkKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJfYXNtLCAjbmFtZSJfYXNtIiwgZCwgcywgc2hpZnQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsZmxhZ3MpKTsKKwkJCWlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByaW50aygiMHglMDRYID0gJS0xNXMoMHglMDRYLDB4JTA0WCwlZCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgICByLCAjbmFtZSwgZCwgcywgc2hpZnQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgXAorCQkJcHJpbnRrKCIweCUwNFggPSAlLTE1cygweCUwNFgsMHglMDRYLCVkKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgXAorCQkJICAgIHJfYXNtLCAjbmFtZSJfYXNtIiwgZCwgcywgc2hpZnQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsZmxhZ3MpKTsKIAogI2RlZmluZSBWQUxfRkFJTF9MT05HX0xPTkdfVEVSTkFSWShuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJmYWlsXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIjB4JTA4WCA9ICUtMTVzKDB4JTA4WCwweCUwOFgsJWQpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgciwgI25hbWUsIGQsIHMsIHNoaWZ0LCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLE0ueDg2LlJfRUZMRykpOyAgXAotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIweCUwOFggPSAlLTE1cygweCUwOFgsMHglMDhYLCVkKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJfYXNtLCAjbmFtZSJfYXNtIiwgZCwgcywgc2hpZnQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsZmxhZ3MpKTsKKwkJCWlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByaW50aygiMHglMDhYID0gJS0xNXMoMHglMDhYLDB4JTA4WCwlZCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCSAgICByLCAjbmFtZSwgZCwgcywgc2hpZnQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICBcCisJCQlwcmludGsoIjB4JTA4WCA9ICUtMTVzKDB4JTA4WCwweCUwOFgsJWQpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICBcCisJCQkgICAgcl9hc20sICNuYW1lIl9hc20iLCBkLCBzLCBzaGlmdCwgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixmbGFncykpOwogCiAjZGVmaW5lIFZBTF9FTkRfVEVSTkFSWSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIE0ueDg2LlJfRUZMRyA9IGluZmxhZ3MgPSBmbGFncyA9IGRlZl9mbGFncyB8IChBTExfRkxBR1MgJiB+Rl9PRik7ICAgXAotICAgICAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3MgfCAoQUxMX0ZMQUdTICYgfkZfT0YpOyAgIFwKKwkJICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBwcmludGsoInBhc3NlZFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwcmludGsoInBhc3NlZFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBWQUxfV09SRF9ST1RBVEVfREJMKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjYyLDQ3ICsyNjIsNDcgQEAKICAgICBpbnQgICAgICAgICBmLGZhaWxlZCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjaGFyICAgICAgICBidWYxWzgwXSxidWYyWzgwXTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBmb3IgKGQgPSAwOyBkIDwgbWF4OyBkICs9IGluY3IpIHsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzOyAgICAgICAgIFwKLSAgICAgICAgZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeworCU0ueDg2LlJfRUZMRyA9IGluZmxhZ3MgPSBmbGFncyA9IGRlZl9mbGFnczsgICAgICAgICBcCisJZm9yIChmID0gMDsgZiA8IDI7IGYrKykgewogCiAjZGVmaW5lIFZBTF9URVNUX1VOQVJZKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByX2FzbSA9IG5hbWUjI19hc20oJmZsYWdzLGQpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByID0gbmFtZShkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmIChyICE9IHJfYXNtIHx8IE0ueDg2LlJfRUZMRyAhPSBmbGFncykgeyAgICAgIFwKLSAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworCSAgICByX2FzbSA9IG5hbWUjI19hc20oJmZsYWdzLGQpOyAgICAgICAgICAgICAgICAgICBcCisJICAgIHIgPSBuYW1lKGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBpZiAociAhPSByX2FzbSB8fCBNLng4Ni5SX0VGTEcgIT0gZmxhZ3MpIHsgICAgICBcCisJCWZhaWxlZCA9IHRydWU7CiAKICNkZWZpbmUgVkFMX0ZBSUxfQllURV9VTkFSWShuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBwcmludGsoIjB4JTAyWCA9ICUtMTVzKDB4JTAyWCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgciwgI25hbWUsIGQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgIFwKLSAgICAgICAgICAgICAgICBwcmludGsoIjB4JTAyWCA9ICUtMTVzKDB4JTAyWCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgcl9hc20sICNuYW1lIl9hc20iLCBkLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLGZsYWdzKSk7CisJCXByaW50aygiZmFpbFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlwcmludGsoIjB4JTAyWCA9ICUtMTVzKDB4JTAyWCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICAgIHIsICNuYW1lLCBkLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLE0ueDg2LlJfRUZMRykpOyAgICBcCisJCXByaW50aygiMHglMDJYID0gJS0xNXMoMHglMDJYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgcl9hc20sICNuYW1lIl9hc20iLCBkLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLGZsYWdzKSk7CiAKICNkZWZpbmUgVkFMX0ZBSUxfV09SRF9VTkFSWShuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBwcmludGsoIjB4JTA0WCA9ICUtMTVzKDB4JTA0WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgciwgI25hbWUsIGQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICBcCi0gICAgICAgICAgICAgICAgcHJpbnRrKCIweCUwNFggPSAlLTE1cygweCUwNFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHJfYXNtLCAjbmFtZSJfYXNtIiwgZCwgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixmbGFncykpOworCQlwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJcHJpbnRrKCIweCUwNFggPSAlLTE1cygweCUwNFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICByLCAjbmFtZSwgZCwgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixNLng4Ni5SX0VGTEcpKTsgIFwKKwkJcHJpbnRrKCIweCUwNFggPSAlLTE1cygweCUwNFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICByX2FzbSwgI25hbWUiX2FzbSIsIGQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsZmxhZ3MpKTsKIAogI2RlZmluZSBWQUxfRkFJTF9MT05HX1VOQVJZKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHByaW50aygiZmFpbFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHByaW50aygiMHglMDhYID0gJS0xNXMoMHglMDhYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICByLCAjbmFtZSwgZCwgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixNLng4Ni5SX0VGTEcpKTsgICAgXAotICAgICAgICAgICAgICAgIHByaW50aygiMHglMDhYID0gJS0xNXMoMHglMDhYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICByX2FzbSwgI25hbWUiX2FzbSIsIGQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsZmxhZ3MpKTsKKwkJcHJpbnRrKCJmYWlsXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXByaW50aygiMHglMDhYID0gJS0xNXMoMHglMDhYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgciwgI25hbWUsIGQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgIFwKKwkJcHJpbnRrKCIweCUwOFggPSAlLTE1cygweCUwOFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICByX2FzbSwgI25hbWUiX2FzbSIsIGQsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsZmxhZ3MpKTsKIAogI2RlZmluZSBWQUxfRU5EX1VOQVJZKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzIHwgQUxMX0ZMQUdTOyAgICAgXAotICAgICAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzIHwgQUxMX0ZMQUdTOyAgICAgXAorCSAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHByaW50aygicGFzc2VkXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBWQUxfQllURV9VTkFSWShuYW1lKSAgICAgICAgICAgICAgICBcCkBAIC0zNDIsMzUgKzM0MiwzNSBAQAogICAgIGludCAgICAgICAgIGYsZmFpbGVkID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNoYXIgICAgICAgIGJ1ZjFbODBdLGJ1ZjJbODBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGZvciAoZCA9IDA7IGQgPCAweEZGOyBkICs9IDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBmb3IgKHMgPSAwOyBzIDwgMHhGRjsgcyArPSAxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzOyAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIG5hbWUjI19hc20oJmZsYWdzLCZyX2FzbSxkLHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIE0ueDg2LlJfQUwgPSBkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIG5hbWUocyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgciA9IE0ueDg2LlJfQVg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKHIgIT0gcl9hc20gfHwgTS54ODYuUl9FRkxHICE9IGZsYWdzKSAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCB8fCB0cmFjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDRYID0gJS0xNXMoMHglMDJYLDB4JTAyWCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHIsICNuYW1lLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLE0ueDg2LlJfRUZMRykpOyAgICAgXAotICAgICAgICAgICAgICAgICAgICBwcmludGsoIjB4JTA0WCA9ICUtMTVzKDB4JTAyWCwweCUwMlgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICByX2FzbSwgI25hbWUiX2FzbSIsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsZmxhZ3MpKTsgIFwKLSAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzIHwgKEFMTF9GTEFHUyAmIH5GX09GKTsgICBcCi0gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIChzID0gMDsgcyA8IDB4RkY7IHMgKz0gMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzOyAgICAgICAgICAgICAgICAgXAorCSAgICBmb3IgKGYgPSAwOyBmIDwgMjsgZisrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW5hbWUjI19hc20oJmZsYWdzLCZyX2FzbSxkLHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlNLng4Ni5SX0FMID0gZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJbmFtZShzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJciA9IE0ueDg2LlJfQVg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChyICE9IHJfYXNtIHx8IE0ueDg2LlJfRUZMRyAhPSBmbGFncykgICAgICAgICAgICAgICAgXAorCQkgICAgZmFpbGVkID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKGZhaWxlZCB8fCB0cmFjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcHJpbnRrKCJmYWlsXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgcHJpbnRrKCIweCUwNFggPSAlLTE1cygweCUwMlgsMHglMDJYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJciwgI25hbWUsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgICBcCisJCSAgICBwcmludGsoIjB4JTA0WCA9ICUtMTVzKDB4JTAyWCwweCUwMlgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlyX2FzbSwgI25hbWUiX2FzbSIsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsZmxhZ3MpKTsgIFwKKwkJICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3MgfCAoQUxMX0ZMQUdTICYgfkZfT0YpOyAgIFwKKwkJaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICghZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKICNkZWZpbmUgVkFMX1dPUkRfTVVMKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTM4MywzNiArMzgzLDM2IEBACiAgICAgaW50ICAgICAgICAgZixmYWlsZWQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2hhciAgICAgICAgYnVmMVs4MF0sYnVmMls4MF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZm9yIChkID0gMDsgZCA8IDB4RkYwMDsgZCArPSAweDEwMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGZvciAocyA9IDA7IHMgPCAweEZGMDA7IHMgKz0gMHgxMDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3M7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKGYgPSAwOyBmIDwgMjsgZisrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbmFtZSMjX2FzbSgmZmxhZ3MsJnJfYXNtX2xvLCZyX2FzbV9oaSxkLHMpOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgTS54ODYuUl9BWCA9IGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbmFtZShzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICByX2xvID0gTS54ODYuUl9BWDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICByX2hpID0gTS54ODYuUl9EWDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAocl9sbyAhPSByX2FzbV9sbyB8fCByX2hpICE9IHJfYXNtX2hpIHx8IE0ueDg2LlJfRUZMRyAhPSBmbGFncylcCi0gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCB8fCB0cmFjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDRYOjB4JTA0WCA9ICUtMTVzKDB4JTA0WCwweCUwNFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJfaGkscl9sbywgI25hbWUsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIweCUwNFg6MHglMDRYID0gJS0xNXMoMHglMDRYLDB4JTA0WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgcl9hc21faGkscl9hc21fbG8sICNuYW1lIl9hc20iLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLGZsYWdzKSk7ICBcCi0gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3MgfCAoQUxMX0ZMQUdTICYgfkZfT0YpOyAgIFwKLSAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmb3IgKHMgPSAwOyBzIDwgMHhGRjAwOyBzICs9IDB4MTAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3M7ICAgICAgICAgICAgICAgICBcCisJICAgIGZvciAoZiA9IDA7IGYgPCAyOyBmKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJbmFtZSMjX2FzbSgmZmxhZ3MsJnJfYXNtX2xvLCZyX2FzbV9oaSxkLHMpOyAgICAgICAgICAgICBcCisJCU0ueDg2LlJfQVggPSBkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQluYW1lKHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlyX2xvID0gTS54ODYuUl9BWDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJcl9oaSA9IE0ueDg2LlJfRFg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChyX2xvICE9IHJfYXNtX2xvIHx8IHJfaGkgIT0gcl9hc21faGkgfHwgTS54ODYuUl9FRkxHICE9IGZsYWdzKVwKKwkJICAgIGZhaWxlZCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChmYWlsZWQgfHwgdHJhY2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByaW50aygiZmFpbFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICAgIHByaW50aygiMHglMDRYOjB4JTA0WCA9ICUtMTVzKDB4JTA0WCwweCUwNFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXJfaGkscl9sbywgI25hbWUsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgICAgIFwKKwkJICAgIHByaW50aygiMHglMDRYOjB4JTA0WCA9ICUtMTVzKDB4JTA0WCwweCUwNFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXJfYXNtX2hpLHJfYXNtX2xvLCAjbmFtZSJfYXNtIiwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixmbGFncykpOyAgXAorCQkgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3MgfCAoQUxMX0ZMQUdTICYgfkZfT0YpOyAgIFwKKwkJaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICghZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKICNkZWZpbmUgVkFMX0xPTkdfTVVMKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTQyNSwzNiArNDI1LDM2IEBACiAgICAgaW50ICAgICAgICAgZixmYWlsZWQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2hhciAgICAgICAgYnVmMVs4MF0sYnVmMls4MF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZm9yIChkID0gMDsgZCA8IDB4RkYwMDAwMDA7IGQgKz0gMHgxMDAwMDAwKSB7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGZvciAocyA9IDA7IHMgPCAweEZGMDAwMDAwOyBzICs9IDB4MTAwMDAwMCkgeyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3M7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKGYgPSAwOyBmIDwgMjsgZisrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbmFtZSMjX2FzbSgmZmxhZ3MsJnJfYXNtX2xvLCZyX2FzbV9oaSxkLHMpOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgTS54ODYuUl9FQVggPSBkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbmFtZShzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICByX2xvID0gTS54ODYuUl9FQVg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICByX2hpID0gTS54ODYuUl9FRFg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAocl9sbyAhPSByX2FzbV9sbyB8fCByX2hpICE9IHJfYXNtX2hpIHx8IE0ueDg2LlJfRUZMRyAhPSBmbGFncylcCi0gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCB8fCB0cmFjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDhYOjB4JTA4WCA9ICUtMTVzKDB4JTA4WCwweCUwOFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJfaGkscl9sbywgI25hbWUsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIweCUwOFg6MHglMDhYID0gJS0xNXMoMHglMDhYLDB4JTA4WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgcl9hc21faGkscl9hc21fbG8sICNuYW1lIl9hc20iLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLGZsYWdzKSk7ICBcCi0gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3MgfCAoQUxMX0ZMQUdTICYgfkZfT0YpOyAgIFwKLSAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmb3IgKHMgPSAwOyBzIDwgMHhGRjAwMDAwMDsgcyArPSAweDEwMDAwMDApIHsgICAgICAgICAgICAgICAgICAgXAorCSAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3M7ICAgICAgICAgICAgICAgICBcCisJICAgIGZvciAoZiA9IDA7IGYgPCAyOyBmKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJbmFtZSMjX2FzbSgmZmxhZ3MsJnJfYXNtX2xvLCZyX2FzbV9oaSxkLHMpOyAgICAgICAgICAgICBcCisJCU0ueDg2LlJfRUFYID0gZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQluYW1lKHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlyX2xvID0gTS54ODYuUl9FQVg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJcl9oaSA9IE0ueDg2LlJfRURYOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChyX2xvICE9IHJfYXNtX2xvIHx8IHJfaGkgIT0gcl9hc21faGkgfHwgTS54ODYuUl9FRkxHICE9IGZsYWdzKVwKKwkJICAgIGZhaWxlZCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChmYWlsZWQgfHwgdHJhY2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByaW50aygiZmFpbFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICAgIHByaW50aygiMHglMDhYOjB4JTA4WCA9ICUtMTVzKDB4JTA4WCwweCUwOFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXJfaGkscl9sbywgI25hbWUsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgICAgIFwKKwkJICAgIHByaW50aygiMHglMDhYOjB4JTA4WCA9ICUtMTVzKDB4JTA4WCwweCUwOFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXJfYXNtX2hpLHJfYXNtX2xvLCAjbmFtZSJfYXNtIiwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixmbGFncykpOyAgXAorCQkgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3MgfCAoQUxMX0ZMQUdTICYgfkZfT0YpOyAgIFwKKwkJaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICghZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKICNkZWZpbmUgVkFMX0JZVEVfRElWKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTQ2NiwzOSArNDY2LDM5IEBACiAgICAgaW50ICAgICAgICAgZixmYWlsZWQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2hhciAgICAgICAgYnVmMVs4MF0sYnVmMls4MF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZm9yIChkID0gMDsgZCA8IDB4RkYwMDsgZCArPSAweDEwMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGZvciAocyA9IDE7IHMgPCAweEZGOyBzICs9IDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3M7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBmb3IgKGYgPSAwOyBmIDwgMjsgZisrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgTS54ODYuaW50ciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgTS54ODYuUl9BWCA9IGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbmFtZShzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICByX3F1b3QgPSBNLng4Ni5SX0FMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICByX3JlbSA9IE0ueDg2LlJfQUg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAoTS54ODYuaW50ciAmIElOVFJfU1lOQ0gpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBuYW1lIyNfYXNtKCZmbGFncywmcl9hc21fcXVvdCwmcl9hc21fcmVtLGQscyk7ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAocl9xdW90ICE9IHJfYXNtX3F1b3QgfHwgcl9yZW0gIT0gcl9hc21fcmVtIHx8IE0ueDg2LlJfRUZMRyAhPSBmbGFncykgXAotICAgICAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmIChmYWlsZWQgfHwgdHJhY2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJmYWlsXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBwcmludGsoIjB4JTAyWDoweCUwMlggPSAlLTE1cygweCUwNFgsMHglMDJYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgcl9xdW90LCByX3JlbSwgI25hbWUsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDJYOjB4JTAyWCA9ICUtMTVzKDB4JTA0WCwweCUwMlgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICByX2FzbV9xdW90LCByX2FzbV9yZW0sICNuYW1lIl9hc20iLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLGZsYWdzKSk7ICBcCi0gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIE0ueDg2LlJfRUZMRyA9IGluZmxhZ3MgPSBmbGFncyA9IGRlZl9mbGFncyB8IChBTExfRkxBR1MgJiB+Rl9PRik7ICAgXAotICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWZvciAocyA9IDE7IHMgPCAweEZGOyBzICs9IDEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIE0ueDg2LlJfRUZMRyA9IGluZmxhZ3MgPSBmbGFncyA9IGRlZl9mbGFnczsgICAgICAgICAgICAgICAgIFwKKwkgICAgZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlNLng4Ni5pbnRyID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJTS54ODYuUl9BWCA9IGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW5hbWUocyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXJfcXVvdCA9IE0ueDg2LlJfQUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlyX3JlbSA9IE0ueDg2LlJfQUg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQluYW1lIyNfYXNtKCZmbGFncywmcl9hc21fcXVvdCwmcl9hc21fcmVtLGQscyk7ICAgICAgICAgIFwKKwkJaWYgKHJfcXVvdCAhPSByX2FzbV9xdW90IHx8IHJfcmVtICE9IHJfYXNtX3JlbSB8fCBNLng4Ni5SX0VGTEcgIT0gZmxhZ3MpIFwKKwkJICAgIGZhaWxlZCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChmYWlsZWQgfHwgdHJhY2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCXByaW50aygiZmFpbFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICAgIHByaW50aygiMHglMDJYOjB4JTAyWCA9ICUtMTVzKDB4JTA0WCwweCUwMlgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICBcCisJCQlyX3F1b3QsIHJfcmVtLCAjbmFtZSwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixNLng4Ni5SX0VGTEcpKTsgICAgIFwKKwkJICAgIHByaW50aygiMHglMDJYOjB4JTAyWCA9ICUtMTVzKDB4JTA0WCwweCUwMlgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICBcCisJCQlyX2FzbV9xdW90LCByX2FzbV9yZW0sICNuYW1lIl9hc20iLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLGZsYWdzKSk7ICBcCisJCSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzIHwgKEFMTF9GTEFHUyAmIH5GX09GKTsgICBcCisJCWlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoIWZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHByaW50aygicGFzc2VkXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXByaW50aygicGFzc2VkXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCiAjZGVmaW5lIFZBTF9XT1JEX0RJVihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC01MTAsNDAgKzUxMCw0MCBAQAogICAgIGludCAgICAgICAgIGYsZmFpbGVkID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNoYXIgICAgICAgIGJ1ZjFbODBdLGJ1ZjJbODBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGZvciAoZCA9IDA7IGQgPCAweEZGMDAwMDAwOyBkICs9IDB4MTAwMDAwMCkgeyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBmb3IgKHMgPSAweDEwMDsgcyA8IDB4RkYwMDsgcyArPSAweDEwMCkgeyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzOyAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yIChmID0gMDsgZiA8IDI7IGYrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIE0ueDg2LmludHIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIE0ueDg2LlJfQVggPSBkICYgMHhGRkZGOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIE0ueDg2LlJfRFggPSBkID4+IDE2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIG5hbWUocyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgcl9xdW90ID0gTS54ODYuUl9BWDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgcl9yZW0gPSBNLng4Ni5SX0RYOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbmFtZSMjX2FzbSgmZmxhZ3MsJnJfYXNtX3F1b3QsJnJfYXNtX3JlbSxkICYgMHhGRkZGLGQgPj4gMTYscyk7XAotICAgICAgICAgICAgICAgIGlmIChyX3F1b3QgIT0gcl9hc21fcXVvdCB8fCByX3JlbSAhPSByX2FzbV9yZW0gfHwgTS54ODYuUl9FRkxHICE9IGZsYWdzKSBcCi0gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCB8fCB0cmFjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDRYOjB4JTA0WCA9ICUtMTVzKDB4JTA4WCwweCUwNFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICByX3F1b3QsIHJfcmVtLCAjbmFtZSwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixNLng4Ni5SX0VGTEcpKTsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIweCUwNFg6MHglMDRYID0gJS0xNXMoMHglMDhYLDB4JTA0WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJfYXNtX3F1b3QsIHJfYXNtX3JlbSwgI25hbWUiX2FzbSIsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsZmxhZ3MpKTsgIFwKLSAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzIHwgKEFMTF9GTEFHUyAmIH5GX09GKTsgICBcCi0gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIChzID0gMHgxMDA7IHMgPCAweEZGMDA7IHMgKz0gMHgxMDApIHsgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgTS54ODYuUl9FRkxHID0gaW5mbGFncyA9IGZsYWdzID0gZGVmX2ZsYWdzOyAgICAgICAgICAgICAgICAgXAorCSAgICBmb3IgKGYgPSAwOyBmIDwgMjsgZisrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCU0ueDg2LmludHIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlNLng4Ni5SX0FYID0gZCAmIDB4RkZGRjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJTS54ODYuUl9EWCA9IGQgPj4gMTY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW5hbWUocyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXJfcXVvdCA9IE0ueDg2LlJfQVg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlyX3JlbSA9IE0ueDg2LlJfRFg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQluYW1lIyNfYXNtKCZmbGFncywmcl9hc21fcXVvdCwmcl9hc21fcmVtLGQgJiAweEZGRkYsZCA+PiAxNixzKTtcCisJCWlmIChyX3F1b3QgIT0gcl9hc21fcXVvdCB8fCByX3JlbSAhPSByX2FzbV9yZW0gfHwgTS54ODYuUl9FRkxHICE9IGZsYWdzKSBcCisJCSAgICBmYWlsZWQgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoZmFpbGVkIHx8IHRyYWNlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBwcmludGsoIjB4JTA0WDoweCUwNFggPSAlLTE1cygweCUwOFgsMHglMDRYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcl9xdW90LCByX3JlbSwgI25hbWUsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICAgICBcCisJCSAgICBwcmludGsoIjB4JTA0WDoweCUwNFggPSAlLTE1cygweCUwOFgsMHglMDRYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcl9hc21fcXVvdCwgcl9hc21fcmVtLCAjbmFtZSJfYXNtIiwgZCwgcywgcHJpbnRfZmxhZ3MoYnVmMSxpbmZsYWdzKSwgcHJpbnRfZmxhZ3MoYnVmMixmbGFncykpOyAgXAorCQkgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCU0ueDg2LlJfRUZMRyA9IGluZmxhZ3MgPSBmbGFncyA9IGRlZl9mbGFncyB8IChBTExfRkxBR1MgJiB+Rl9PRik7ICAgXAorCQlpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBwcmludGsoInBhc3NlZFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwcmludGsoInBhc3NlZFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogI2RlZmluZSBWQUxfTE9OR19ESVYobmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTU1LDQwICs1NTUsNDAgQEAKICAgICBpbnQgICAgICAgICBmLGZhaWxlZCA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBjaGFyICAgICAgICBidWYxWzgwXSxidWYyWzgwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBmb3IgKGQgPSAwOyBkIDwgMHhGRjAwMDAwMDsgZCArPSAweDEwMDAwMDApIHsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZm9yIChzID0gMHgxMDA7IHMgPCAweEZGMDA7IHMgKz0gMHgxMDApIHsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE0ueDg2LlJfRUZMRyA9IGluZmxhZ3MgPSBmbGFncyA9IGRlZl9mbGFnczsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZvciAoZiA9IDA7IGYgPCAyOyBmKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBNLng4Ni5pbnRyID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBNLng4Ni5SX0VBWCA9IGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBNLng4Ni5SX0VEWCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBuYW1lKHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHJfcXVvdCA9IE0ueDg2LlJfRUFYOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHJfcmVtID0gTS54ODYuUl9FRFg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmIChNLng4Ni5pbnRyICYgSU5UUl9TWU5DSCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIG5hbWUjI19hc20oJmZsYWdzLCZyX2FzbV9xdW90LCZyX2FzbV9yZW0sZCwwLHMpOyAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmIChyX3F1b3QgIT0gcl9hc21fcXVvdCB8fCByX3JlbSAhPSByX2FzbV9yZW0gfHwgTS54ODYuUl9FRkxHICE9IGZsYWdzKSBcCi0gICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKGZhaWxlZCB8fCB0cmFjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImZhaWxcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIHByaW50aygiMHglMDhYOjB4JTA4WCA9ICUtMTVzKDB4JTA4WDoweCUwOFgsMHglMDhYKSwgZmxhZ3MgPSAlcyAtPiAlc1xuIiwgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJfcXVvdCwgcl9yZW0sICNuYW1lLCAwLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLE0ueDg2LlJfRUZMRykpOyAgXAotICAgICAgICAgICAgICAgICAgICBwcmludGsoIjB4JTA4WDoweCUwOFggPSAlLTE1cygweCUwOFg6MHglMDhYLDB4JTA4WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICByX2FzbV9xdW90LCByX2FzbV9yZW0sICNuYW1lIl9hc20iLCAwLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLGZsYWdzKSk7ICAgXAotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3MgfCAoQUxMX0ZMQUdTICYgfkZfT0YpOyAgIFwKLSAgICAgICAgICAgICAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmIChmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmb3IgKHMgPSAweDEwMDsgcyA8IDB4RkYwMDsgcyArPSAweDEwMCkgeyAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBNLng4Ni5SX0VGTEcgPSBpbmZsYWdzID0gZmxhZ3MgPSBkZWZfZmxhZ3M7ICAgICAgICAgICAgICAgICBcCisJICAgIGZvciAoZiA9IDA7IGYgPCAyOyBmKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJTS54ODYuaW50ciA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCU0ueDg2LlJfRUFYID0gZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlNLng4Ni5SX0VEWCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJbmFtZShzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJcl9xdW90ID0gTS54ODYuUl9FQVg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCXJfcmVtID0gTS54ODYuUl9FRFg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoTS54ODYuaW50ciAmIElOVFJfU1lOQ0gpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW5hbWUjI19hc20oJmZsYWdzLCZyX2FzbV9xdW90LCZyX2FzbV9yZW0sZCwwLHMpOyAgICAgICAgXAorCQlpZiAocl9xdW90ICE9IHJfYXNtX3F1b3QgfHwgcl9yZW0gIT0gcl9hc21fcmVtIHx8IE0ueDg2LlJfRUZMRyAhPSBmbGFncykgXAorCQkgICAgZmFpbGVkID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKGZhaWxlZCB8fCB0cmFjZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcHJpbnRrKCJmYWlsXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgcHJpbnRrKCIweCUwOFg6MHglMDhYID0gJS0xNXMoMHglMDhYOjB4JTA4WCwweCUwOFgpLCBmbGFncyA9ICVzIC0+ICVzXG4iLCAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJcl9xdW90LCByX3JlbSwgI25hbWUsIDAsIGQsIHMsIHByaW50X2ZsYWdzKGJ1ZjEsaW5mbGFncyksIHByaW50X2ZsYWdzKGJ1ZjIsTS54ODYuUl9FRkxHKSk7ICBcCisJCSAgICBwcmludGsoIjB4JTA4WDoweCUwOFggPSAlLTE1cygweCUwOFg6MHglMDhYLDB4JTA4WCksIGZsYWdzID0gJXMgLT4gJXNcbiIsICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlyX2FzbV9xdW90LCByX2FzbV9yZW0sICNuYW1lIl9hc20iLCAwLCBkLCBzLCBwcmludF9mbGFncyhidWYxLGluZmxhZ3MpLCBwcmludF9mbGFncyhidWYyLGZsYWdzKSk7ICAgXAorCQkgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCU0ueDg2LlJfRUZMRyA9IGluZmxhZ3MgPSBmbGFncyA9IGRlZl9mbGFncyB8IChBTExfRkxBR1MgJiB+Rl9PRik7ICAgXAorCQlpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICBpZiAoZmFpbGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKGZhaWxlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFmYWlsZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBwcmludGsoInBhc3NlZFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwcmludGsoInBhc3NlZFxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAogdm9pZCBwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCkBAIC02MDYsMzcgKzYwNiwzNyBAQAogCiAgICAgYnVmWzBdID0gMDsKICAgICBpZiAoZmxhZ3MgJiBGX0NGKSB7Ci0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKLSAgICAgICAgc3RyY2F0KGJ1ZiwiQ0YiKTsKLSAgICAgICAgc2VwYXJhdG9yID0gIiwiOwotICAgICAgICB9CisJc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworCXN0cmNhdChidWYsIkNGIik7CisJc2VwYXJhdG9yID0gIiwiOworCX0KICAgICBpZiAoZmxhZ3MgJiBGX1BGKSB7Ci0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKLSAgICAgICAgc3RyY2F0KGJ1ZiwiUEYiKTsKLSAgICAgICAgc2VwYXJhdG9yID0gIiwiOwotICAgICAgICB9CisJc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworCXN0cmNhdChidWYsIlBGIik7CisJc2VwYXJhdG9yID0gIiwiOworCX0KICAgICBpZiAoZmxhZ3MgJiBGX0FGKSB7Ci0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKLSAgICAgICAgc3RyY2F0KGJ1ZiwiQUYiKTsKLSAgICAgICAgc2VwYXJhdG9yID0gIiwiOwotICAgICAgICB9CisJc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworCXN0cmNhdChidWYsIkFGIik7CisJc2VwYXJhdG9yID0gIiwiOworCX0KICAgICBpZiAoZmxhZ3MgJiBGX1pGKSB7Ci0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKLSAgICAgICAgc3RyY2F0KGJ1ZiwiWkYiKTsKLSAgICAgICAgc2VwYXJhdG9yID0gIiwiOwotICAgICAgICB9CisJc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworCXN0cmNhdChidWYsIlpGIik7CisJc2VwYXJhdG9yID0gIiwiOworCX0KICAgICBpZiAoZmxhZ3MgJiBGX1NGKSB7Ci0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKLSAgICAgICAgc3RyY2F0KGJ1ZiwiU0YiKTsKLSAgICAgICAgc2VwYXJhdG9yID0gIiwiOwotICAgICAgICB9CisJc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworCXN0cmNhdChidWYsIlNGIik7CisJc2VwYXJhdG9yID0gIiwiOworCX0KICAgICBpZiAoZmxhZ3MgJiBGX09GKSB7Ci0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKLSAgICAgICAgc3RyY2F0KGJ1ZiwiT0YiKTsKLSAgICAgICAgc2VwYXJhdG9yID0gIiwiOwotICAgICAgICB9CisJc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworCXN0cmNhdChidWYsIk9GIik7CisJc2VwYXJhdG9yID0gIiwiOworCX0KICAgICBpZiAoc2VwYXJhdG9yWzBdID09IDApCi0gICAgICAgIHN0cmNweShidWYsIk5vbmUiKTsKKwlzdHJjcHkoYnVmLCJOb25lIik7CiAgICAgcmV0dXJuIGJ1ZjsKIH0KIApAQCAtNjQ2LDcgKzY0Niw3IEBACiAgICAgaW50IHRyYWNlID0gZmFsc2U7CiAKICAgICBpZiAoYXJnYyA+IDEpCi0gICAgICAgIHRyYWNlID0gdHJ1ZTsKKwl0cmFjZSA9IHRydWU7CiAgICAgbWVtc2V0KCZNLCAwLCBzaXplb2YoTSkpOwogICAgIGRlZl9mbGFncyA9IGdldF9mbGFnc19hc20oKSAmIH5BTExfRkxBR1M7CiAKQEAgLTY3Myw3ICs2NzMsNyBAQAogICAgIFZBTF9MT05HX0xPTkdfQklOQVJZKGNtcF9sb25nKTsKIAogICAgIFZBTF9CWVRFX1VOQVJZKGRhYV9ieXRlKTsKLSAgICBWQUxfQllURV9VTkFSWShkYXNfYnl0ZSk7ICAgLy8gRmFpbHMgZm9yIDB4OUEgKG91dCBvZiByYW5nZSBhbnl3YXkpCisgICAgVkFMX0JZVEVfVU5BUlkoZGFzX2J5dGUpOyAgIC8qIEZhaWxzIGZvciAweDlBIChvdXQgb2YgcmFuZ2UgYW55d2F5KSAqLwogCiAgICAgVkFMX0JZVEVfVU5BUlkoZGVjX2J5dGUpOwogICAgIFZBTF9XT1JEX1VOQVJZKGRlY193b3JkKTsKZGlmZiAtLWdpdCBhL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS94ODZlbXUvZGVidWcuaCBiL2JvYXJkL01BSS9iaW9zX2VtdWxhdG9yL3NjaXRlY2gvc3JjL3g4NmVtdS94ODZlbXUvZGVidWcuaAppbmRleCBiNGEzZWQ1Li45YTRhMDk2IDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci9zY2l0ZWNoL3NyYy94ODZlbXUveDg2ZW11L2RlYnVnLmgKKysrIGIvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3Ivc2NpdGVjaC9zcmMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogI2RlZmluZSBTQVZFX0lQX0NTKHgseSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAogCWlmIChERUJVR19ERUNPREUoKSB8IERFQlVHX1RSQUNFQ0FMTCgpIHwgREVCVUdfQlJFQUsoKSBcCi0gICAgICAgICAgICAgIHwgREVCVUdfSU9fVFJBQ0UoKSB8IERFQlVHX1NBVkVfSVBfQ1MoKSkgeyBcCisJICAgICAgfCBERUJVR19JT19UUkFDRSgpIHwgREVCVUdfU0FWRV9JUF9DUygpKSB7IFwKIAkJTS54ODYuc2F2ZWRfY3MgPSB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAogCQlNLng4Ni5zYXZlZF9pcCA9IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCiAJfQpkaWZmIC0tZ2l0IGEvYm9hcmQvTUFJL2Jpb3NfZW11bGF0b3IveDg2aW50ZXJmYWNlLmMgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci94ODZpbnRlcmZhY2UuYwppbmRleCBlOTBlYzVhLi45MDljYjNjIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci94ODZpbnRlcmZhY2UuYworKysgYi9ib2FyZC9NQUkvYmlvc19lbXVsYXRvci94ODZpbnRlcmZhY2UuYwpAQCAtNSw3ICs1LDcgQEAKIC8qCiAgKiBUaGlzIGlzbid0IG5pY2UsIGJ1dCB0aGVyZSBhcmUgYSBsb3Qgb2YgaW5jb21wYXRpYmlsaXRpZXMgaW4gdGhlIFUtQm9vdCBhbmQgc2NpdGVjaCBpbmNsdWRlCiAgKiBmaWxlcyB0aGF0IHRoaXMgaXMgdGhlIG9ubHkgcmVhbGx5IHdvcmthYmxlIHNvbHV0aW9uLgotICogTWlnaHQgYmUgY2xlYW5lZCBvdXQgbGF0ZXIuIAorICogTWlnaHQgYmUgY2xlYW5lZCBvdXQgbGF0ZXIuCiAgKi8KIAogI2lmZGVmIERFQlVHCkBAIC00NSw3ICs0NSw3IEBACiAjZGVmaW5lIEVNVUxBVE9SX0JJT1NfT0ZGU0VUICAgIDB4QzAwMDAKICNkZWZpbmUgRU1VTEFUT1JfU1RSQVBfT0ZGU0VUICAgMHgzMDAwMAogI2RlZmluZSBFTVVMQVRPUl9TVEFDS19PRkZTRVQgICAweDIwMDAwCi0jZGVmaW5lIEVNVUxBVE9SX0xPR09fT0ZGU0VUICAgIDB4NDAwMDAgLy8gSWYgeW91IGNoYW5nZSB0aGlzLCBjaGFuZ2UgdGhlIHN0cmFwIGNvZGUsIHRvbworI2RlZmluZSBFTVVMQVRPUl9MT0dPX09GRlNFVCAgICAweDQwMDAwIC8qIElmIHlvdSBjaGFuZ2UgdGhpcywgY2hhbmdlIHRoZSBzdHJhcCBjb2RlLCB0b28gKi8KICNkZWZpbmUgVklERU9fQkFTRSAodm9pZCAqKTB4RkQwQjgwMDAKIAogZXh0ZXJuIGNoYXIgKmdldGVudihjaGFyICopOwpAQCAtNzIsNyArNzIsNyBAQAogICAgIGNoYXIgYyA9IDA7CiAKICAgICBidWZmZXJbMF0gPSAwOwotICAgIGlmIChnZXRlbnYoIng4Nl9ydW50aHJ1IikpIHJldHVybjsgLy9GSVhNRToKKyAgICBpZiAoZ2V0ZW52KCJ4ODZfcnVudGhydSIpKSByZXR1cm47IC8qRklYTUU6ICovCiAgICAgd2hpbGUgKGMgIT0gMHgwRCAmJiBjICE9IDB4MEEpCiAgICAgewogCXdoaWxlICghdHN0YygpKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCiBpbnQgZG9sb2coaW50IHBvcnQpCiB7Ci0gICAgaWYgKGxvZ19pbml0ICYmIGxvZ19kbykgCisgICAgaWYgKGxvZ19pbml0ICYmIGxvZ19kbykKICAgICB7CiAJaWYgKGxvZ19sb3cgJiYgcG9ydCA+IDB4NDAwKSByZXR1cm4gMDsKIAlyZXR1cm4gMTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogCWxvZ19pbml0ID0gMTsKIAlsb2dfZG8gPSAoZ2V0ZW52KCJ4ODZfbG9naW8iKSAhPSAoY2hhciAqKTApOwogCWxvZ19sb3cgPSAoZ2V0ZW52KCJ4ODZfbG9nbG93IikgIT0gKGNoYXIgKikwKTsKLQlpZiAobG9nX2RvKSAKKwlpZiAobG9nX2RvKQogCXsKIAkgICAgaWYgKGxvZ19sb3cgJiYgcG9ydCA+IDB4NDAwKSByZXR1cm4gMDsKIAkgICAgcmV0dXJuIDE7CkBAIC0xODcsMTIgKzE4NywxMiBAQAogICAgIHJldHVybiAwOwogfQogCi0vLyBDb252ZXJ0cyBhbiBlbXVsYXRvciBhZGRyZXNzIHRvIGEgcGh5c2ljYWwgYWRkcmVzcy4KLS8vIEhhbmRsZXMgYWxsIHNwZWNpYWwgY2FzZXMgKGJpb3MgZGF0ZSwgbW9kZWwgZXRjKSwgYW5kIG1pZ2h0IG5lZWQgd29yaworLyogQ29udmVydHMgYW4gZW11bGF0b3IgYWRkcmVzcyB0byBhIHBoeXNpY2FsIGFkZHJlc3MuICovCisvKiBIYW5kbGVzIGFsbCBzcGVjaWFsIGNhc2VzIChiaW9zIGRhdGUsIG1vZGVsIGV0YyksIGFuZCBtaWdodCBuZWVkIHdvcmsgKi8KIHUzMiBtZW1hZGRyKHUzMiBhZGRyKQogewotLy8gICAgaWYgKGFkZHIgPj0gMHhGMDAwMCAmJiBhZGRyIDwgMHhGRkZGRikgcHJpbnRmKCJXQVJOSU5HOiBTZWdtZW50IEYgYWNjZXNzICgweCV4KVxuIiwgYWRkcik7Ci0vLyAgICBwcmludGYoIk1lbUFkZHI9JXBcbiIsIGFkZHIpOworLyogICAgaWYgKGFkZHIgPj0gMHhGMDAwMCAmJiBhZGRyIDwgMHhGRkZGRikgcHJpbnRmKCJXQVJOSU5HOiBTZWdtZW50IEYgYWNjZXNzICgweCV4KVxuIiwgYWRkcik7ICovCisvKiAgICBwcmludGYoIk1lbUFkZHI9JXBcbiIsIGFkZHIpOyAqLwogICAgIGlmIChhZGRyID49IDB4QTAwMDAgJiYgYWRkciA8IDB4QzAwMDApCiAJcmV0dXJuIDB4RkQwMDAwMDAgKyBhZGRyOwogICAgIGVsc2UgaWYgKGFkZHIgPj0gMHhGRkZGNSAmJiBhZGRyIDwgMHhGRkZGRSkKQEAgLTIwNSw3ICsyMDUsNyBAQAogCXJldHVybiAodTMyKSZzdWJtb2RlbDsKICAgICBlbHNlIGlmIChhZGRyID49IDB4ODAwMDAwMDApCiAgICAgewotCS8vcHJpbnRmKCJXYXJuaW5nOiBIaWdoIG1lbW9yeSBhY2Nlc3MgYXQgMHgleFxuIiwgYWRkcik7CisJLypwcmludGYoIldhcm5pbmc6IEhpZ2ggbWVtb3J5IGFjY2VzcyBhdCAweCV4XG4iLCBhZGRyKTsgKi8KIAlyZXR1cm4gYWRkcjsKICAgICB9CiAgICAgZWxzZQpAQCAtMjUxLDcgKzI1MSw3IEBACiAgICAgd3JpdGVfbG9uZ19saXR0bGUoKFVMT05HICopbWVtYWRkcihhZGRyKSwgdmFsKTsKIH0KIAotWDg2RU1VX21lbUZ1bmNzIF9BMV9tZW0gPSAKK1g4NkVNVV9tZW1GdW5jcyBfQTFfbWVtID0KIHsKICAgICBBMV9yZGIsCiAgICAgQTFfcmR3LApAQCAtMjgyLDcgKzI4Miw3IEBACiB1OCBBMV9pbmIoaW50IHBvcnQpCiB7CiAgICAgdTggYTsKLSAgICAvL2lmIChwb3J0ID09IDB4M0JBKSByZXR1cm4gMDsKKyAgICAvKmlmIChwb3J0ID09IDB4M0JBKSByZXR1cm4gMDsgKi8KICAgICBhID0gaW5fYnl0ZShwb3J0KTsKICAgICBMT0dJTyhwb3J0LCAiaW5iOiAlWGggLT4gJWQgKCVYaClcbiIsIHBvcnQsIGEsIGEpOwogICAgIHJldHVybiBhOwpAQCAtMzI0LDcgKzMyNCw3IEBACiAgICAgb3V0X2xvbmcocG9ydCwgdmFsKTsKIH0KIAotWDg2RU1VX3Bpb0Z1bmNzIF9BMV9waW8gPSAKK1g4NkVNVV9waW9GdW5jcyBfQTFfcGlvID0KIHsKICAgICBBMV9pbmIsCiAgICAgQTFfaW53LApAQCAtMzUzLDcgKzM1Myw3IEBACiAJeDg2ZW11X29wdGFiW2ldIC09IGRlbHRhOwogCXg4NmVtdV9vcHRhYjJbaV0gLT0gZGVsdGE7CiAgICAgfQotICAgIAorCiAgICAgX0ExX21lbS5yZGIgPSBBMV9yZGI7CiAgICAgX0ExX21lbS5yZHcgPSBBMV9yZHc7CiAgICAgX0ExX21lbS5yZGwgPSBBMV9yZGw7CkBAIC0zNjcsNyArMzY3LDcgQEAKICAgICBfQTFfcGlvLm91dGIgPSBBMV9vdXRiOwogICAgIF9BMV9waW8ub3V0dyA9IEExX291dHc7CiAgICAgX0ExX3Bpby5vdXRsID0gQTFfb3V0bDsKLSAgICAKKwogICAgIHRhYmxlc19yZWxvY2F0ZShkZWx0YSk7CiAKIH0KQEAgLTM3OSw5ICszNzksOSBAQAogCiAKIHVuc2lnbmVkIGNoYXIgbW9yZV9zdHJhcFtdID0gewotICAgICAgICAweGI0LCAweDAsIDB4YjAsIDB4MiwgMHhjZCwgMHgxMCwKKwkweGI0LCAweDAsIDB4YjAsIDB4MiwgMHhjZCwgMHgxMCwKIH07Ci0jZGVmaW5lIE1PUkVfU1RSQVBfQllURVMgNiAvLyBBZGRpdGlvbmFsIGJ5dGVzIG9mIHN0cmFwIGNvZGUKKyNkZWZpbmUgTU9SRV9TVFJBUF9CWVRFUyA2IC8qIEFkZGl0aW9uYWwgYnl0ZXMgb2Ygc3RyYXAgY29kZSAqLwogCiAKIHVuc2lnbmVkIGNoYXIgKmRvbmVfbXNnPSJWR0EgSW5pdGlhbGl6ZWRcMCI7CkBAIC00MTUsMTIgKzQxNSwxMiBAQAogICAgIFBSSU5URigiQXR0ZW1wdGluZyB0byBydW4gZW11bGF0b3Igb24gJTAyeDolMDJ4OiUwMnhcbiIsCiAJICAgUENJX0JVUyhncl9kZXYpLCBQQ0lfREVWKGdyX2RldiksIFBDSV9GVU5DKGdyX2RldikpOwogCi0gICAgLy8gRW5hYmxlIGNvbXBhdGliaWxpdHkgaG9sZSBmb3IgZW11bGF0b3IgYWNjZXNzIHRvIGZyYW1lIGJ1ZmZlcgorICAgIC8qIEVuYWJsZSBjb21wYXRpYmlsaXR5IGhvbGUgZm9yIGVtdWxhdG9yIGFjY2VzcyB0byBmcmFtZSBidWZmZXIgKi8KICAgICBQUklOVEYoIkVuYWJsaW5nIGNvbXBhdGliaWxpdHkgaG9sZVxuIik7CiAgICAgZW5hYmxlX2NvbXBhdGliaWxpdHlfaG9sZSgpOwogCi0gICAgLy8gQWxsb2NhdGUgbWVtb3J5Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCB1c2UgdGhpcyBtdWNoIG1lbW9yeSByZWFsbHkuCisgICAgLyogQWxsb2NhdGUgbWVtb3J5ICovCisgICAgLyogRklYTUU6IFdlIHNob3VsZG4ndCB1c2UgdGhpcyBtdWNoIG1lbW9yeSByZWFsbHkuICovCiAgICAgbWVtc2V0KCZNLCAwLCBzaXplb2YoWDg2RU1VX3N5c0VudikpOwogICAgIE0ubWVtX2Jhc2UgPSBtYWxsb2MoRU1VTEFUT1JfTUVNX1NJWkUpOwogICAgIE0ubWVtX3NpemUgPSBFTVVMQVRPUl9NRU1fU0laRTsKQEAgLTQ3MCwxMCArNDcwLDEwIEBACiAgICAgewogCWVhc3RlcmVnZ19hY3RpdmUgPSAxOwogICAgIH0KLSAgICAKKwogICAgIGlmIChlYXN0ZXJlZ2dfYWN0aXZlKQogICAgIHsKLQkvLyBZYXkhCisJLyogWWF5ISAqLwogCXNldGVudigieDg2X21vZGUiLCAiMSIpOwogCXNldGVudigidmdhX2ZnX2NvbG9yIiwgIjExIik7CiAJc2V0ZW52KCJ2Z2FfYmdfY29sb3IiLCAiMSIpOwpAQCAtNDkzLDkgKzQ5Myw5IEBACiAJfQogICAgIH0KIAotICAgIC8qIAorICAgIC8qCiAgICAgICogUG9rZSB0aGUgc3RyYXAgcm91dGluZS4gVGhpcyBtaWdodCBuZWVkIGEgYml0IG9mIGV4dGVuZGluZwotICAgICAqIGlmIHRoZXJlIGlzIGEgbW9kZSBzd2l0Y2ggaW52b2x2ZWQsIGkuZS4gd2Ugd2FudCB0byBpbnQxMCAKKyAgICAgKiBpZiB0aGVyZSBpcyBhIG1vZGUgc3dpdGNoIGludm9sdmVkLCBpLmUuIHdlIHdhbnQgdG8gaW50MTAKICAgICAgKiBhZnRlcndhcmRzIHRvIHNldCBhIGRpZmZlcmVudCBncmFwaGljcyBtb2RlLCBvciBhbHRlcm5hdGl2ZWx5CiAgICAgICogdGhlcmUgbWlnaHQgYmUgYSBkaWZmZXJlbnQgc3RhcnQgYWRkcmVzcyByZXF1aXJlbWVudCBpZiB0aGUKICAgICAgKiBST00gZG9lc24ndCBoYXZlIGFuIHg4NiBpbWFnZSBpbiBpdHMgZmlyc3QgaW1hZ2UuCkBAIC01MDMsMTkgKzUwMywxOSBAQAogCiAgICAgUFJJTlRGKCJQb2tpbmcgc3RyYXAuLi5cbiIpOwogCi0gICAgLy8gRkFSIENBTEwgYzAwMDowMDAzCisgICAgLyogRkFSIENBTEwgYzAwMDowMDAzICovCiAgICAgKnN0cmFwKysgPSAweDlBOyAqc3RyYXArKyA9IDB4MDM7ICpzdHJhcCsrID0gMHgwMDsKLSAgICAqc3RyYXArKyA9IDB4MDA7ICpzdHJhcCsrID0gMHhDMDsgCisgICAgKnN0cmFwKysgPSAweDAwOyAqc3RyYXArKyA9IDB4QzA7CiAKICNpZiAxCi0gICAgLy8gaW5zZXJ0IGFkZGl0aW9uYWwgc3RyYXAgY29kZQorICAgIC8qIGluc2VydCBhZGRpdGlvbmFsIHN0cmFwIGNvZGUgKi8KICAgICBmb3IgKGk9MDsgaSA8IE1PUkVfU1RSQVBfQllURVM7IGkrKykKICAgICB7CiAJKnN0cmFwKysgPSBtb3JlX3N0cmFwW2ldOwogICAgIH0KICNlbmRpZgotICAgIC8vIEhBTFQKLSAgICAqc3RyYXArKyA9IDB4RjQ7IAorICAgIC8qIEhBTFQgKi8KKyAgICAqc3RyYXArKyA9IDB4RjQ7CiAKICAgICBQUklOVEYoIlNldHRpbmcgdXAgbG9nbyBkYXRhXG4iKTsKICAgICBsb2dvID0gKHVuc2lnbmVkIGNoYXIgKilNLm1lbV9iYXNlICsgRU1VTEFUT1JfTE9HT19PRkZTRVQ7CkBAIC01MzAsMjggKzUzMCwyOCBAQAogICAgICAqIG11c3QgY29udGFpbiB0aGUgZGV2Zm4sIGVuY29kZWQgYXMgKGRldjw8Myl8Zm4KICAgICAgKi8KIAotICAgIC8vIEV4ZWN1dGlvbiBzdGFydHMgaGVyZQotICAgIE0ueDg2LlJfQ1MgPSBTRUcoRU1VTEFUT1JfU1RSQVBfT0ZGU0VUKTsgCi0gICAgTS54ODYuUl9JUCA9IE9GRihFTVVMQVRPUl9TVFJBUF9PRkZTRVQpOyAKKyAgICAvKiBFeGVjdXRpb24gc3RhcnRzIGhlcmUgKi8KKyAgICBNLng4Ni5SX0NTID0gU0VHKEVNVUxBVE9SX1NUUkFQX09GRlNFVCk7CisgICAgTS54ODYuUl9JUCA9IE9GRihFTVVMQVRPUl9TVFJBUF9PRkZTRVQpOwogCi0gICAgLy8gU3RhY2sgYXQgdG9wIG9mIHJhbQorICAgIC8qIFN0YWNrIGF0IHRvcCBvZiByYW0gKi8KICAgICBNLng4Ni5SX1NTID0gU0VHKEVNVUxBVE9SX1NUQUNLX09GRlNFVCk7CiAgICAgTS54ODYuUl9TUCA9IE9GRihFTVVMQVRPUl9TVEFDS19PRkZTRVQpOwogCi0gICAgLy8gSW5wdXQgcGFyYW1ldGVycworICAgIC8qIElucHV0IHBhcmFtZXRlcnMgKi8KICAgICBNLng4Ni5SX0FIID0gUENJX0JVUyhncl9kZXYpOwogICAgIE0ueDg2LlJfQUwgPSAoUENJX0RFVihncl9kZXYpPDwzKSB8IFBDSV9GVU5DKGdyX2Rldik7CiAKLSAgICAvLyBTZXQgdGhlIEkvTyBhbmQgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKKyAgICAvKiBTZXQgdGhlIEkvTyBhbmQgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMgKi8KICAgICBYODZFTVVfc2V0dXBNZW1GdW5jcygmX0ExX21lbSk7CiAgICAgWDg2RU1VX3NldHVwUGlvRnVuY3MoJl9BMV9waW8pOwogCi0gICAgLy8gRW5hYmxlIHRpbWVyIDIKLSAgICBjZmcgPSBpbl9ieXRlKDB4NjEpOyAvLyBHZXQgTWlzYyBjb250cm9sCi0gICAgY2ZnIHw9IDB4MDE7ICAgICAgICAgLy8gRW5hYmxlIHRpbWVyIDIKLSAgICBvdXRfYnl0ZSgweDYxLCBjZmcpOyAvLyBvdXRwdXQgYWdhaW4KKyAgICAvKiBFbmFibGUgdGltZXIgMiAqLworICAgIGNmZyA9IGluX2J5dGUoMHg2MSk7IC8qIEdldCBNaXNjIGNvbnRyb2wgKi8KKyAgICBjZmcgfD0gMHgwMTsgICAgICAgICAvKiBFbmFibGUgdGltZXIgMiAqLworICAgIG91dF9ieXRlKDB4NjEsIGNmZyk7IC8qIG91dHB1dCBhZ2FpbiAqLwogCi0gICAgLy8gU2V0IHVwIHRoZSB0aW1lcnMKKyAgICAvKiBTZXQgdXAgdGhlIHRpbWVycyAqLwogICAgIG91dF9ieXRlKDB4NDMsIDB4NTQpOwogICAgIG91dF9ieXRlKDB4NDEsIDB4MTgpOwogCkBAIC01NjMsMTAgKzU2MywxMCBAQAogICAgIG91dF9ieXRlKDB4NDIsIDB4MzEpOwogICAgIG91dF9ieXRlKDB4NDIsIDB4MTMpOwogCi0gICAgLy8gSW5pdCB0aGUgIkJJT1MiLgorICAgIC8qIEluaXQgdGhlICJCSU9TIi4gKi8KICAgICBiaW9zX2luaXQoKTsKIAotICAgIC8vIFZpZGVvIENhcmQgUmVzZXQKKyAgICAvKiBWaWRlbyBDYXJkIFJlc2V0ICovCiAgICAgb3V0X2J5dGUoMHgzRDgsIDApOwogICAgIG91dF9ieXRlKDB4M0I4LCAxKTsKICAgICAodm9pZClpbl9ieXRlKDB4M0JBKTsKQEAgLTU4Myw3ICs1ODMsNyBAQAogICAgIH0KICNlbmRpZgogCi0gICAgLy8gUmVhZHkgc2V0IGdvLi4uCisgICAgLyogUmVhZHkgc2V0IGdvLi4uICovCiAgICAgUFJJTlRGKCJSdW5uaW5nIGVtdWxhdG9yXG4iKTsKICAgICBYODZFTVVfZXhlYygpOwogICAgIFBSSU5URigiRG9uZSBydW5uaW5nIGVtdWxhdG9yXG4iKTsKQEAgLTU5Myw4ICs1OTMsOCBAQAogICAgIGlmIChwYWxfcmVzZXQgJiYgc3RyY21wKHBhbF9yZXNldCwgIm9uIikgPT0gMCkKICAgICB7CiAJUFJJTlRGKCJQYWxldHRlIHJlc2V0XG4iKTsKLQkvLyh2b2lkKWluX2J5dGUoMHgzZGEpOwotCS8vb3V0X2J5dGUoMHgzYzAsIDApOworCS8qKHZvaWQpaW5fYnl0ZSgweDNkYSk7ICovCisJLypvdXRfYnl0ZSgweDNjMCwgMCk7ICovCiAKIAlvdXRfYnl0ZSgweDNDOCwgMCk7CiAJb3V0X2J5dGUoMHgzQzksIDApOwpAQCAtNjQ1LDE1ICs2NDUsMTUgQEAKICAgICBpZiAoZ2V0ZW52KCJ4ODZfZG9faW5vdXQiKSkgZG9faW5vdXQoKTsKICNlbmRpZgogCi0vL0ZJWE1FOiAgICBkY2FjaGVfZGlzYWJsZSgpOworLypGSVhNRTogICAgZGNhY2hlX2Rpc2FibGUoKTsgKi8KICAgICByZXR1cm4gMTsKIH0KIAotLy8gQ2xlYW4gdXAgdGhlIHg4NiBtZXNzCisvKiBDbGVhbiB1cCB0aGUgeDg2IG1lc3MgKi8KIHZvaWQgc2h1dGRvd25fYmlvcyh2b2lkKQogewotLy8gICAgZGlzYWJsZV9jb21wYXRpYmlsaXR5X2hvbGUoKTsKLSAgICAvLyBGcmVlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZAorLyogICAgZGlzYWJsZV9jb21wYXRpYmlsaXR5X2hvbGUoKTsgKi8KKyAgICAvKiBGcmVlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCAqLwogICAgIGZyZWUoTS5tZW1fYmFzZSk7CiAKIH0KQEAgLTY2Myw3ICs2NjMsNyBAQAogICAgIGludCBiYXNlID0gMDsKICAgICBpbnQgcmVzICA9IDA7CiAKLSAgICBpZiAoKmJ1ZmZlciA9PSAnJCcpIAorICAgIGlmICgqYnVmZmVyID09ICckJykKICAgICB7CiAJYmFzZSA9IDE2OwogCWJ1ZmZlcisrOwpAQCAtNjg3LDI3ICs2ODcsMjcgQEAKIAljYXNlICdiJzoKIAkgICAgcmVzICo9IGJhc2U7CiAJICAgIHJlcyArPSAxMTsKLQkgICAgYnJlYWs7CSAgICAKKwkgICAgYnJlYWs7CiAJY2FzZSAnQyc6CiAJY2FzZSAnYyc6CiAJICAgIHJlcyAqPSBiYXNlOwogCSAgICByZXMgKz0gMTI7Ci0JICAgIGJyZWFrOwkgICAgCisJICAgIGJyZWFrOwogCWNhc2UgJ0QnOgogCWNhc2UgJ2QnOgogCSAgICByZXMgKj0gYmFzZTsKIAkgICAgcmVzICs9IDEzOwotCSAgICBicmVhazsJICAgIAorCSAgICBicmVhazsKIAljYXNlICdFJzoKIAljYXNlICdlJzoKIAkgICAgcmVzICo9IGJhc2U7CiAJICAgIHJlcyArPSAxNDsKLQkgICAgYnJlYWs7CSAgICAKKwkgICAgYnJlYWs7CiAJY2FzZSAnRic6CiAJY2FzZSAnZic6CiAJICAgIHJlcyAqPSBiYXNlOwogCSAgICByZXMgKz0gMTU7Ci0JICAgIGJyZWFrOwkKKwkgICAgYnJlYWs7CiAJZGVmYXVsdDoKIAkgICAgcmV0dXJuIHJlczsKIAl9CmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvbWVudS9jbWRfbWVudS5jIGIvYm9hcmQvTUFJL21lbnUvY21kX21lbnUuYwppbmRleCAxNzg4MTczLi40YzE3YzZhIDEwMDY0NAotLS0gYS9ib2FyZC9NQUkvbWVudS9jbWRfbWVudS5jCisrKyBiL2JvYXJkL01BSS9tZW51L2NtZF9tZW51LmMKQEAgLTEsOSArMSwxNiBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfbWVudS5oPgogCiBpbnQgZG9fbWVudSggY21kX3RibF90ICpjbWR0cCwgLypiZF90ICpiZCwqLyBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApCiB7Ci0vLyAgICBwcmludGYoIjxOT1QgWUVUIElNUExFTUVOVEVEPlxuIik7Ci0gICAgcmV0dXJuIDA7CisvKglwcmludGYoIjxOT1QgWUVUIElNUExFTUVOVEVEPlxuIik7ICovCisJcmV0dXJuIDA7CiB9CisKKyNpZiBkZWZpbmVkKENPTkZJR19BTUlHQU9ORUczU0UpICYmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JTUCkKK2NtZF90YmxfdCBVX0JPT1RfQ01EKE1FTlUpID0gTUtfQ01EX0VOVFJZKAorCSJtZW51IiwgICAxLCAgICAgIDEsICAgICAgZG9fbWVudSwKKwkibWVudSAgICAtIGRpc3BsYXkgQklPUyBzZXR1cCBtZW51XG4iLAorCSIiCispOworI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvbWVudS9tZW51LmMgYi9ib2FyZC9NQUkvbWVudS9tZW51LmMKaW5kZXggMzEzMDE0Mi4uYzBjNjNhOCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL21lbnUvbWVudS5jCisrKyBiL2JvYXJkL01BSS9tZW51L21lbnUuYwpAQCAtNDEsOSArNDEsOSBAQAogCiAgICAgcyA9IGdldGVudigibWVudV9kaXNhYmxlZCIpOwogICAgIGlmIChzKSBkaXNhYmxlZF9hdHRyID0gYXRvaShzKTsKLSAgICAKKwogICAgIGZvciAoaT0wOyBpPE1BWF9NRU5VX09QVElPTlM7IGkrKykgb2RhdGFbaV0udXNlZCA9IDA7Ci0gICAgCisKICAgICByb290X21lbnUgPSByb290OwogfQogCmRpZmYgLS1naXQgYS9ib2FyZC9NQUkvbWVudS9tZW51LmggYi9ib2FyZC9NQUkvbWVudS9tZW51LmgKaW5kZXggZTU4ODZiOC4uOGFlYmI3ZCAxMDA2NDQKLS0tIGEvYm9hcmQvTUFJL21lbnUvbWVudS5oCisrKyBiL2JvYXJkL01BSS9tZW51L21lbnUuaApAQCAtNDgsNyArNDgsNyBAQAogICogVGV4dDoKICAqICAgQSBzaW5nbGUgbGluZS9saW1pdGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRleHQgZW50cnkgYm94LiBUZXh0IGNhbiBiZSByZXN0cmljdGVkCiAgKiAgIHRvIGEgY2VydGFpbiBjaGFyc2V0IChkaWdpdHMvaGV4IGRpZ2l0cy9hbGwvY3VzdG9tKS4gUmVzdWx0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGFuCi0gKiAgIGludCBpZiBudW1lcmljLiAKKyAqICAgaW50IGlmIG51bWVyaWMuCiAgKgogICogU2VsZWN0aW9uOgogICogICBPbmUtb2YtbWFueSB0eXBlIG9mIHNlbGVjdGlvbiBlbnRyeS4gVXNlciBtYXkgY2hvb3NlIG9uIG9mIGEgc2V0IG9mIHN0cmluZ3MsIHdoaWNoCkBAIC0xMjIsNyArMTIyLDcgQEAKIAogICAgIGludCBudW1fb3B0aW9uczsgICAgICAgICAgICAgLyogTnVtYmVyIG9mIG1hcHBpbmdzICovCiAgICAgbWVudV9zZWxlY3Rfb3B0aW9uX3QgKipvcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3B0aW9uIGxpc3QgYXJyYXkgKi8KKwkJCQkgLyogT3B0aW9uIGxpc3QgYXJyYXkgKi8KIH0gbWVudV9zZWxlY3RfdDsKIAogCkBAIC0xMzMsMTAgKzEzMywxMCBAQAogewogICAgIE9QVElPTl9QUkVBTUJMRQogICAgIG1lbnVfcm91dGluZV9jYWxsYmFjayBjYWxsYmFjazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJvdXRpbmUgdG8gYmUgY2FsbGVkICovIAorCQkJCSAvKiByb3V0aW5lIHRvIGJlIGNhbGxlZCAqLwogICAgIHZvaWQgKnVzZXJfZGF0YTsgICAgICAgICAgICAgLyogVXNlciBkYXRhLCBkb24ndCBjYXJlIGZvciBzeXN0ZW0gKi8KIH0gbWVudV9yb3V0aW5lX3Q7Ci0gICAgCisKIAogI2RlZmluZSBNRU5VX0NVU1RPTV9UWVBFIDUKIHR5cGVkZWYgdm9pZCAoKm1lbnVfY3VzdG9tX2RyYXcpKHN0cnVjdCBtZW51X2N1c3RvbV9zICopOwpkaWZmIC0tZ2l0IGEvYm9hcmQvUlBYQ2xhc3NpYy9NYWtlZmlsZSBiL2JvYXJkL1JQWENsYXNzaWMvTWFrZWZpbGUKaW5kZXggODU3ZTlhOC4uOTM5MDdiYSAxMDA2NDQKLS0tIGEvYm9hcmQvUlBYQ2xhc3NpYy9NYWtlZmlsZQorKysgYi9ib2FyZC9SUFhDbGFzc2ljL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGVjY3gubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvUlBYQ2xhc3NpYy9SUFhDbGFzc2ljLmMgYi9ib2FyZC9SUFhDbGFzc2ljL1JQWENsYXNzaWMuYwppbmRleCBhZWQ5NDc5Li41Njg5MzM0IDEwMDY0NAotLS0gYS9ib2FyZC9SUFhDbGFzc2ljL1JQWENsYXNzaWMuYworKysgYi9ib2FyZC9SUFhDbGFzc2ljL1JQWENsYXNzaWMuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJcmV0dXJuIChtYXhzaXplKTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGFzY2hleF90b19ieXRlIC0tIAorICogYXNjaGV4X3RvX2J5dGUgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgYXNjaGV4X3RvX2J5dGUgKHVuc2lnbmVkIGNoYXIgKmNwKQpkaWZmIC0tZ2l0IGEvYm9hcmQvUlBYQ2xhc3NpYy9lY2N4LmMgYi9ib2FyZC9SUFhDbGFzc2ljL2VjY3guYwppbmRleCBkNWVkYzJiLi5jYzc2YmJkIDEwMDY0NAotLS0gYS9ib2FyZC9SUFhDbGFzc2ljL2VjY3guYworKysgYi9ib2FyZC9SUFhDbGFzc2ljL2VjY3guYwpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgPHNlZDEzODA2Lmg+CiAKIAotCiAvKiBTY3JlZW4gY29uZmlndXJhdGlvbnM6IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgU0QxMzgwNiBkZXBlbmRzIG9uCiAgICBzY3JlZW4gYW5kIG9uIGRpc3BsYXkgbW9kZS4gV2UgaGFuZGxlIG9ubHkgOGJwcCBhbmQgMTYgYnBwIG1vZGVzICAgICAgICAgICovCiAKQEAgLTQxLDIzMiArNDAsMjMyIEBACiAjZGVmaW5lIERJU1BMQVlfSEVJR0hUICA0ODAKIAogI2lmZGVmIENPTkZJR19WSURFT19TRUQxMzgwNl84QlBQCi1zdGF0aWMgY29uc3QgUzFEX1JFR1MgaW5pdF9yZWdzIFtdID0gCitzdGF0aWMgY29uc3QgUzFEX1JFR1MgaW5pdF9yZWdzIFtdID0KIHsKLSAgICB7MHgwMDAxLDB4MDB9LCAgIC8vIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIKLSAgICB7MHgwMUZDLDB4MDB9LCAgIC8vIERpc3BsYXkgTW9kZSBSZWdpc3RlcgotICAgIHsweDAwMDQsMHgxYn0sICAgLy8gR2VuZXJhbCBJTyBQaW5zIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAotICAgIHsweDAwMDUsMHgwMH0sICAgLy8gR2VuZXJhbCBJTyBQaW5zIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQotICAgIHsweDAwMDgsMHhlNX0sICAgLy8gR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIgMAotICAgIHsweDAwMDksMHgxZn0sICAgLy8gR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIgMQotICAgIHsweDAwMTAsMHgwMn0sICAgLy8gTWVtb3J5IENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSAgICB7MHgwMDE0LDB4MTB9LCAgIC8vIExDRCBQaXhlbCBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0gICAgezB4MDAxOCwweDAyfSwgICAvLyBDUlQvVFYgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotICAgIHsweDAwMUMsMHgwMn0sICAgLy8gTWVkaWFQbHVnIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSAgICB7MHgwMDFFLDB4MDF9LCAgIC8vIENQVSBUbyBNZW1vcnkgV2FpdCBTdGF0ZSBTZWxlY3QgUmVnaXN0ZXIKLSAgICB7MHgwMDIxLDB4MDR9LCAgIC8vIERSQU0gUmVmcmVzaCBSYXRlIFJlZ2lzdGVyCi0gICAgezB4MDAyQSwweDAwfSwgICAvLyBEUkFNIFRpbWluZ3MgQ29udHJvbCBSZWdpc3RlciAwCi0gICAgezB4MDAyQiwweDAxfSwgICAvLyBEUkFNIFRpbWluZ3MgQ29udHJvbCBSZWdpc3RlciAxCi0gICAgezB4MDAyMCwweDgwfSwgICAvLyBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotICAgIHsweDAwMzAsMHgyNX0sICAgLy8gUGFuZWwgVHlwZSBSZWdpc3RlcgotICAgIHsweDAwMzEsMHgwMH0sICAgLy8gTU9EIFJhdGUgUmVnaXN0ZXIKLSAgICB7MHgwMDMyLDB4NEZ9LCAgIC8vIExDRCBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIKLSAgICB7MHgwMDM0LDB4MTN9LCAgIC8vIExDRCBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlcgotICAgIHsweDAwMzUsMHgwMX0sICAgLy8gVEZUIEZQTElORSBTdGFydCBQb3NpdGlvbiBSZWdpc3RlcgotICAgIHsweDAwMzYsMHgwQn0sICAgLy8gVEZUIEZQTElORSBQdWxzZSBXaWR0aCBSZWdpc3RlcgotICAgIHsweDAwMzgsMHhERn0sICAgLy8gTENEIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDAKLSAgICB7MHgwMDM5LDB4MDF9LCAgIC8vIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAxCi0gICAgezB4MDAzQSwweDJDfSwgICAvLyBMQ0QgVmVydGljYWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyCi0gICAgezB4MDAzQiwweDAwfSwgICAvLyBURlQgRlBGUkFNRSBTdGFydCBQb3NpdGlvbiBSZWdpc3RlcgotICAgIHsweDAwM0MsMHgwMX0sICAgLy8gVEZUIEZQRlJBTUUgUHVsc2UgV2lkdGggUmVnaXN0ZXIKLSAgICB7MHgwMDQwLDB4MDN9LCAgIC8vIExDRCBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIKLSAgICB7MHgwMDQxLDB4MDJ9LCAgIC8vIExDRCBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyCi0gICAgezB4MDA0MiwweDAwfSwgICAvLyBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAKLSAgICB7MHgwMDQzLDB4MDB9LCAgIC8vIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMQotICAgIHsweDAwNDQsMHgwMH0sICAgLy8gTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyCi0gICAgezB4MDA0NiwweDQwfSwgICAvLyBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAKLSAgICB7MHgwMDQ3LDB4MDF9LCAgIC8vIExDRCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMQotICAgIHsweDAwNDgsMHgwMH0sICAgLy8gTENEIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIKLSAgICB7MHgwMDRBLDB4MDB9LCAgIC8vIExDRCBEaXNwbGF5IEZJRk8gSGlnaCBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlcgotICAgIHsweDAwNEIsMHgwMH0sICAgLy8gTENEIERpc3BsYXkgRklGTyBMb3cgVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIKLSAgICB7MHgwMDUwLDB4NEZ9LCAgIC8vIENSVC9UViBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIKLSAgICB7MHgwMDUyLDB4MTN9LCAgIC8vIENSVC9UViBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlcgotICAgIHsweDAwNTMsMHgwMX0sICAgLy8gQ1JUL1RWIEhSVEMgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIKLSAgICB7MHgwMDU0LDB4MEJ9LCAgIC8vIENSVC9UViBIUlRDIFB1bHNlIFdpZHRoIFJlZ2lzdGVyCi0gICAgezB4MDA1NiwweERGfSwgICAvLyBDUlQvVFYgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMAotICAgIHsweDAwNTcsMHgwMX0sICAgLy8gQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEKLSAgICB7MHgwMDU4LDB4MkJ9LCAgIC8vIENSVC9UViBWZXJ0aWNhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIKLSAgICB7MHgwMDU5LDB4MDl9LCAgIC8vIENSVC9UViBWUlRDIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyCi0gICAgezB4MDA1QSwweDAxfSwgICAvLyBDUlQvVFYgVlJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlcgotICAgIHsweDAwNUIsMHgwMH0sICAgLy8gVFYgT3V0cHV0IENvbnRyb2wgUmVnaXN0ZXIKLSAgICB7MHgwMDYwLDB4MDN9LCAgIC8vIENSVC9UViBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIKLSAgICB7MHgwMDYyLDB4MDB9LCAgIC8vIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMAotICAgIHsweDAwNjMsMHgwMH0sICAgLy8gQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxCi0gICAgezB4MDA2NCwweDAwfSwgICAvLyBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIKLSAgICB7MHgwMDY2LDB4NDB9LCAgIC8vIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMAotICAgIHsweDAwNjcsMHgwMX0sICAgLy8gQ1JUL1RWIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxCi0gICAgezB4MDA2OCwweDAwfSwgICAvLyBDUlQvVFYgUGl4ZWwgUGFubmluZyBSZWdpc3RlcgotICAgIHsweDAwNkEsMHgwMH0sICAgLy8gQ1JUL1RWIERpc3BsYXkgRklGTyBIaWdoIFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyCi0gICAgezB4MDA2QiwweDAwfSwgICAvLyBDUlQvVFYgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlcgotICAgIHsweDAwNzAsMHgwMH0sICAgLy8gTENEIEluay9DdXJzb3IgQ29udHJvbCBSZWdpc3RlcgotICAgIHsweDAwNzEsMHgwMH0sICAgLy8gTENEIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlcgotICAgIHsweDAwNzIsMHgwMH0sICAgLy8gTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAKLSAgICB7MHgwMDczLDB4MDB9LCAgIC8vIExDRCBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAxCi0gICAgezB4MDA3NCwweDAwfSwgICAvLyBMQ0QgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMAotICAgIHsweDAwNzUsMHgwMH0sICAgLy8gTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEKLSAgICB7MHgwMDc2LDB4MDB9LCAgIC8vIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMCBSZWdpc3RlcgotICAgIHsweDAwNzcsMHgwMH0sICAgLy8gTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlcgotICAgIHsweDAwNzgsMHgwMH0sICAgLy8gTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIKLSAgICB7MHgwMDdBLDB4MUZ9LCAgIC8vIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMSBSZWdpc3RlcgotICAgIHsweDAwN0IsMHgzRn0sICAgLy8gTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlcgotICAgIHsweDAwN0MsMHgxRn0sICAgLy8gTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIKLSAgICB7MHgwMDdFLDB4MDB9LCAgIC8vIExDRCBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyCi0gICAgezB4MDA4MCwweDAwfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBDb250cm9sIFJlZ2lzdGVyCi0gICAgezB4MDA4MSwweDAwfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCi0gICAgezB4MDA4MiwweDAwfSwgICAvLyBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMAotICAgIHsweDAwODMsMHgwMH0sICAgLy8gQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDEKLSAgICB7MHgwMDg0LDB4MDB9LCAgIC8vIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwCi0gICAgezB4MDA4NSwweDAwfSwgICAvLyBDUlQvVFYgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMQotICAgIHsweDAwODYsMHgwMH0sICAgLy8gQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAwIFJlZ2lzdGVyCi0gICAgezB4MDA4NywweDAwfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyCi0gICAgezB4MDA4OCwweDAwfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMCBSZWdpc3RlcgotICAgIHsweDAwOEEsMHgxRn0sICAgLy8gQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAxIFJlZ2lzdGVyCi0gICAgezB4MDA4QiwweDNGfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyCi0gICAgezB4MDA4QywweDFGfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMSBSZWdpc3RlcgotICAgIHsweDAwOEUsMHgwMH0sICAgLy8gQ1JUL1RWIEluay9DdXJzb3IgRklGTyBUaHJlc2hvbGQgUmVnaXN0ZXIKLSAgICB7MHgwMTAwLDB4MDB9LCAgIC8vIEJpdEJsdCBDb250cm9sIFJlZ2lzdGVyIDAKLSAgICB7MHgwMTAxLDB4MDB9LCAgIC8vIEJpdEJsdCBDb250cm9sIFJlZ2lzdGVyIDEKLSAgICB7MHgwMTAyLDB4MDB9LCAgIC8vIEJpdEJsdCBST1AgQ29kZS9Db2xvciBFeHBhbnNpb24gUmVnaXN0ZXIKLSAgICB7MHgwMTAzLDB4MDB9LCAgIC8vIEJpdEJsdCBPcGVyYXRpb24gUmVnaXN0ZXIKLSAgICB7MHgwMTA0LDB4MDB9LCAgIC8vIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwCi0gICAgezB4MDEwNSwweDAwfSwgICAvLyBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMQotICAgIHsweDAxMDYsMHgwMH0sICAgLy8gQml0Qmx0IFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIKLSAgICB7MHgwMTA4LDB4MDB9LCAgIC8vIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAKLSAgICB7MHgwMTA5LDB4MDB9LCAgIC8vIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEKLSAgICB7MHgwMTBBLDB4MDB9LCAgIC8vIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIKLSAgICB7MHgwMTBDLDB4MDB9LCAgIC8vIEJpdEJsdCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMAotICAgIHsweDAxMEQsMHgwMH0sICAgLy8gQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxCi0gICAgezB4MDExMCwweDAwfSwgICAvLyBCaXRCbHQgV2lkdGggUmVnaXN0ZXIgMAotICAgIHsweDAxMTEsMHgwMH0sICAgLy8gQml0Qmx0IFdpZHRoIFJlZ2lzdGVyIDEKLSAgICB7MHgwMTEyLDB4MDB9LCAgIC8vIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMAotICAgIHsweDAxMTMsMHgwMH0sICAgLy8gQml0Qmx0IEhlaWdodCBSZWdpc3RlciAxCi0gICAgezB4MDExNCwweDAwfSwgICAvLyBCaXRCbHQgQmFja2dyb3VuZCBDb2xvciBSZWdpc3RlciAwCi0gICAgezB4MDExNSwweDAwfSwgICAvLyBCaXRCbHQgQmFja2dyb3VuZCBDb2xvciBSZWdpc3RlciAxCi0gICAgezB4MDExOCwweDAwfSwgICAvLyBCaXRCbHQgRm9yZWdyb3VuZCBDb2xvciBSZWdpc3RlciAwCi0gICAgezB4MDExOSwweDAwfSwgICAvLyBCaXRCbHQgRm9yZWdyb3VuZCBDb2xvciBSZWdpc3RlciAxCi0gICAgezB4MDFFMCwweDAwfSwgICAvLyBMb29rLVVwIFRhYmxlIE1vZGUgUmVnaXN0ZXIKLSAgICB7MHgwMUUyLDB4MDB9LCAgIC8vIExvb2stVXAgVGFibGUgQWRkcmVzcyBSZWdpc3RlcgotICAgIHsweDAxRTQsMHgwMH0sICAgLy8gTG9vay1VcCBUYWJsZSBEYXRhIFJlZ2lzdGVyCi0gICAgezB4MDFGMCwweDEwfSwgICAvLyBQb3dlciBTYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSAgICB7MHgwMUYxLDB4MDB9LCAgIC8vIFBvd2VyIFNhdmUgU3RhdHVzIFJlZ2lzdGVyCi0gICAgezB4MDFGNCwweDAwfSwgICAvLyBDUFUtdG8tTWVtb3J5IEFjY2VzcyBXYXRjaGRvZyBUaW1lciBSZWdpc3RlcgotICAgIHsweDAxRkMsMHgwMX0sICAgLy8gRGlzcGxheSBNb2RlIFJlZ2lzdGVyCisgICAgezB4MDAwMSwweDAwfSwgICAvKiBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyICovCisgICAgezB4MDFGQywweDAwfSwgICAvKiBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDA0LDB4MWJ9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDA1LDB4MDB9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMDA4LDB4ZTV9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDA5LDB4MWZ9LCAgIC8qIEdlbmVyYWwgSU8gUGlucyBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMDEwLDB4MDJ9LCAgIC8qIE1lbW9yeSBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisgICAgezB4MDAxNCwweDEwfSwgICAvKiBMQ0QgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworICAgIHsweDAwMTgsMHgwMn0sICAgLyogQ1JUL1RWIFBpeGVsIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDFDLDB4MDJ9LCAgIC8qIE1lZGlhUGx1ZyBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisgICAgezB4MDAxRSwweDAxfSwgICAvKiBDUFUgVG8gTWVtb3J5IFdhaXQgU3RhdGUgU2VsZWN0IFJlZ2lzdGVyICovCisgICAgezB4MDAyMSwweDA0fSwgICAvKiBEUkFNIFJlZnJlc2ggUmF0ZSBSZWdpc3RlciAqLworICAgIHsweDAwMkEsMHgwMH0sICAgLyogRFJBTSBUaW1pbmdzIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworICAgIHsweDAwMkIsMHgwMX0sICAgLyogRFJBTSBUaW1pbmdzIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworICAgIHsweDAwMjAsMHg4MH0sICAgLyogTWVtb3J5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDMwLDB4MjV9LCAgIC8qIFBhbmVsIFR5cGUgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDMxLDB4MDB9LCAgIC8qIE1PRCBSYXRlIFJlZ2lzdGVyICovCisgICAgezB4MDAzMiwweDRGfSwgICAvKiBMQ0QgSG9yaXpvbnRhbCBEaXNwbGF5IFdpZHRoIFJlZ2lzdGVyICovCisgICAgezB4MDAzNCwweDEzfSwgICAvKiBMQ0QgSG9yaXpvbnRhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDM1LDB4MDF9LCAgIC8qIFRGVCBGUExJTkUgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDM2LDB4MEJ9LCAgIC8qIFRGVCBGUExJTkUgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDM4LDB4REZ9LCAgIC8qIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwICovCisgICAgezB4MDAzOSwweDAxfSwgICAvKiBMQ0QgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMSAqLworICAgIHsweDAwM0EsMHgyQ30sICAgLyogTENEIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciAqLworICAgIHsweDAwM0IsMHgwMH0sICAgLyogVEZUIEZQRlJBTUUgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDNDLDB4MDF9LCAgIC8qIFRGVCBGUEZSQU1FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCisgICAgezB4MDA0MCwweDAzfSwgICAvKiBMQ0QgRGlzcGxheSBNb2RlIFJlZ2lzdGVyICovCisgICAgezB4MDA0MSwweDAyfSwgICAvKiBMQ0QgTWlzY2VsbGFuZW91cyBSZWdpc3RlciAqLworICAgIHsweDAwNDIsMHgwMH0sICAgLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCisgICAgezB4MDA0MywweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMDQ0LDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMiAqLworICAgIHsweDAwNDYsMHg0MH0sICAgLyogTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwICovCisgICAgezB4MDA0NywweDAxfSwgICAvKiBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMDQ4LDB4MDB9LCAgIC8qIExDRCBQaXhlbCBQYW5uaW5nIFJlZ2lzdGVyICovCisgICAgezB4MDA0QSwweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDRCLDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IEZJRk8gTG93IFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyICovCisgICAgezB4MDA1MCwweDRGfSwgICAvKiBDUlQvVFYgSG9yaXpvbnRhbCBEaXNwbGF5IFdpZHRoIFJlZ2lzdGVyICovCisgICAgezB4MDA1MiwweDEzfSwgICAvKiBDUlQvVFYgSG9yaXpvbnRhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDUzLDB4MDF9LCAgIC8qIENSVC9UViBIUlRDIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyICovCisgICAgezB4MDA1NCwweDBCfSwgICAvKiBDUlQvVFYgSFJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLworICAgIHsweDAwNTYsMHhERn0sICAgLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDU3LDB4MDF9LCAgIC8qIENSVC9UViBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAxICovCisgICAgezB4MDA1OCwweDJCfSwgICAvKiBDUlQvVFYgVmVydGljYWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyICovCisgICAgezB4MDA1OSwweDA5fSwgICAvKiBDUlQvVFYgVlJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciAqLworICAgIHsweDAwNUEsMHgwMX0sICAgLyogQ1JUL1RWIFZSVEMgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDVCLDB4MDB9LCAgIC8qIFRWIE91dHB1dCBDb250cm9sIFJlZ2lzdGVyICovCisgICAgezB4MDA2MCwweDAzfSwgICAvKiBDUlQvVFYgRGlzcGxheSBNb2RlIFJlZ2lzdGVyICovCisgICAgezB4MDA2MiwweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDYzLDB4MDB9LCAgIC8qIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworICAgIHsweDAwNjQsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCisgICAgezB4MDA2NiwweDQwfSwgICAvKiBDUlQvVFYgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDY3LDB4MDF9LCAgIC8qIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLworICAgIHsweDAwNjgsMHgwMH0sICAgLyogQ1JUL1RWIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDZBLDB4MDB9LCAgIC8qIENSVC9UViBEaXNwbGF5IEZJRk8gSGlnaCBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciAqLworICAgIHsweDAwNkIsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgRklGTyBMb3cgVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDcwLDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDcxLDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDcyLDB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAwICovCisgICAgezB4MDA3MywweDAwfSwgICAvKiBMQ0QgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMSAqLworICAgIHsweDAwNzQsMHgwMH0sICAgLyogTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDc1LDB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAxICovCisgICAgezB4MDA3NiwweDAwfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDc3LDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEdyZWVuIENvbG9yIDAgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDc4LDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIFJlZCBDb2xvciAwIFJlZ2lzdGVyICovCisgICAgezB4MDA3QSwweDFGfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDdCLDB4M0Z9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEdyZWVuIENvbG9yIDEgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDdDLDB4MUZ9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIFJlZCBDb2xvciAxIFJlZ2lzdGVyICovCisgICAgezB4MDA3RSwweDAwfSwgICAvKiBMQ0QgSW5rL0N1cnNvciBGSUZPIFRocmVzaG9sZCBSZWdpc3RlciAqLworICAgIHsweDAwODAsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgQ29udHJvbCBSZWdpc3RlciAqLworICAgIHsweDAwODEsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworICAgIHsweDAwODIsMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDgzLDB4MDB9LCAgIC8qIENSVC9UViBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAxICovCisgICAgezB4MDA4NCwweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMCAqLworICAgIHsweDAwODUsMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMDg2LDB4MDB9LCAgIC8qIENSVC9UViBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMCBSZWdpc3RlciAqLworICAgIHsweDAwODcsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlciAqLworICAgIHsweDAwODgsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDhBLDB4MUZ9LCAgIC8qIENSVC9UViBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMSBSZWdpc3RlciAqLworICAgIHsweDAwOEIsMHgzRn0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlciAqLworICAgIHsweDAwOEMsMHgxRn0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDhFLDB4MDB9LCAgIC8qIENSVC9UViBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyICovCisgICAgezB4MDEwMCwweDAwfSwgICAvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAwICovCisgICAgezB4MDEwMSwweDAwfSwgICAvKiBCaXRCbHQgQ29udHJvbCBSZWdpc3RlciAxICovCisgICAgezB4MDEwMiwweDAwfSwgICAvKiBCaXRCbHQgUk9QIENvZGUvQ29sb3IgRXhwYW5zaW9uIFJlZ2lzdGVyICovCisgICAgezB4MDEwMywweDAwfSwgICAvKiBCaXRCbHQgT3BlcmF0aW9uIFJlZ2lzdGVyICovCisgICAgezB4MDEwNCwweDAwfSwgICAvKiBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCAqLworICAgIHsweDAxMDUsMHgwMH0sICAgLyogQml0Qmx0IFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMTA2LDB4MDB9LCAgIC8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCisgICAgezB4MDEwOCwweDAwfSwgICAvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCisgICAgezB4MDEwOSwweDAwfSwgICAvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxICovCisgICAgezB4MDEwQSwweDAwfSwgICAvKiBCaXRCbHQgRGVzdGluYXRpb24gU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCisgICAgezB4MDEwQywweDAwfSwgICAvKiBCaXRCbHQgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMTBELDB4MDB9LCAgIC8qIEJpdEJsdCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLworICAgIHsweDAxMTAsMHgwMH0sICAgLyogQml0Qmx0IFdpZHRoIFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMTExLDB4MDB9LCAgIC8qIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAxICovCisgICAgezB4MDExMiwweDAwfSwgICAvKiBCaXRCbHQgSGVpZ2h0IFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMTEzLDB4MDB9LCAgIC8qIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMSAqLworICAgIHsweDAxMTQsMHgwMH0sICAgLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCAqLworICAgIHsweDAxMTUsMHgwMH0sICAgLyogQml0Qmx0IEJhY2tncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSAqLworICAgIHsweDAxMTgsMHgwMH0sICAgLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMCAqLworICAgIHsweDAxMTksMHgwMH0sICAgLyogQml0Qmx0IEZvcmVncm91bmQgQ29sb3IgUmVnaXN0ZXIgMSAqLworICAgIHsweDAxRTAsMHgwMH0sICAgLyogTG9vay1VcCBUYWJsZSBNb2RlIFJlZ2lzdGVyICovCisgICAgezB4MDFFMiwweDAwfSwgICAvKiBMb29rLVVwIFRhYmxlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMUU0LDB4MDB9LCAgIC8qIExvb2stVXAgVGFibGUgRGF0YSBSZWdpc3RlciAqLworICAgIHsweDAxRjAsMHgxMH0sICAgLyogUG93ZXIgU2F2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisgICAgezB4MDFGMSwweDAwfSwgICAvKiBQb3dlciBTYXZlIFN0YXR1cyBSZWdpc3RlciAqLworICAgIHsweDAxRjQsMHgwMH0sICAgLyogQ1BVLXRvLU1lbW9yeSBBY2Nlc3MgV2F0Y2hkb2cgVGltZXIgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMUZDLDB4MDF9LCAgIC8qIERpc3BsYXkgTW9kZSBSZWdpc3RlciAqLwogICAgIHswLCAwfQogfTsKICNlbmRpZiAvKiBDT05GSUdfVklERU9fU0VEMTM4MDZfOEJQUCAqLwogCiAjaWZkZWYgQ09ORklHX1ZJREVPX1NFRDEzODA2XzE2QlBQCiAKLXN0YXRpYyBjb25zdCBTMURfUkVHUyBpbml0X3JlZ3MgW10gPSAKK3N0YXRpYyBjb25zdCBTMURfUkVHUyBpbml0X3JlZ3MgW10gPQogewotICAgIHsweDAwMDEsMHgwMH0sICAgLy8gTWlzY2VsbGFuZW91cyBSZWdpc3RlcgotICAgIHsweDAxRkMsMHgwMH0sICAgLy8gRGlzcGxheSBNb2RlIFJlZ2lzdGVyCi0gICAgezB4MDAwNCwweDFifSwgICAvLyBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwCi0gICAgezB4MDAwNSwweDAwfSwgICAvLyBHZW5lcmFsIElPIFBpbnMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCi0gICAgezB4MDAwOCwweGU1fSwgICAvLyBHZW5lcmFsIElPIFBpbnMgQ29udHJvbCBSZWdpc3RlciAwCi0gICAgezB4MDAwOSwweDFmfSwgICAvLyBHZW5lcmFsIElPIFBpbnMgQ29udHJvbCBSZWdpc3RlciAxCi0gICAgezB4MDAxMCwweDAyfSwgICAvLyBNZW1vcnkgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotICAgIHsweDAwMTQsMHgxMH0sICAgLy8gTENEIFBpeGVsIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSAgICB7MHgwMDE4LDB4MDJ9LCAgIC8vIENSVC9UViBQaXhlbCBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0gICAgezB4MDAxQywweDAyfSwgICAvLyBNZWRpYVBsdWcgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotICAgIHsweDAwMUUsMHgwMX0sICAgLy8gQ1BVIFRvIE1lbW9yeSBXYWl0IFN0YXRlIFNlbGVjdCBSZWdpc3RlcgotICAgIHsweDAwMjEsMHgwNH0sICAgLy8gRFJBTSBSZWZyZXNoIFJhdGUgUmVnaXN0ZXIKLSAgICB7MHgwMDJBLDB4MDB9LCAgIC8vIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDAKLSAgICB7MHgwMDJCLDB4MDF9LCAgIC8vIERSQU0gVGltaW5ncyBDb250cm9sIFJlZ2lzdGVyIDEKLSAgICB7MHgwMDIwLDB4ODB9LCAgIC8vIE1lbW9yeSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0gICAgezB4MDAzMCwweDI1fSwgICAvLyBQYW5lbCBUeXBlIFJlZ2lzdGVyCi0gICAgezB4MDAzMSwweDAwfSwgICAvLyBNT0QgUmF0ZSBSZWdpc3RlcgotICAgIHsweDAwMzIsMHg0Rn0sICAgLy8gTENEIEhvcml6b250YWwgRGlzcGxheSBXaWR0aCBSZWdpc3RlcgotICAgIHsweDAwMzQsMHgxM30sICAgLy8gTENEIEhvcml6b250YWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyCi0gICAgezB4MDAzNSwweDAxfSwgICAvLyBURlQgRlBMSU5FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyCi0gICAgezB4MDAzNiwweDBCfSwgICAvLyBURlQgRlBMSU5FIFB1bHNlIFdpZHRoIFJlZ2lzdGVyCi0gICAgezB4MDAzOCwweERGfSwgICAvLyBMQ0QgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMAotICAgIHsweDAwMzksMHgwMX0sICAgLy8gTENEIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEKLSAgICB7MHgwMDNBLDB4MkN9LCAgIC8vIExDRCBWZXJ0aWNhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIKLSAgICB7MHgwMDNCLDB4MDB9LCAgIC8vIFRGVCBGUEZSQU1FIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyCi0gICAgezB4MDAzQywweDAxfSwgICAvLyBURlQgRlBGUkFNRSBQdWxzZSBXaWR0aCBSZWdpc3RlcgotICAgIHsweDAwNDAsMHgwNX0sICAgLy8gTENEIERpc3BsYXkgTW9kZSBSZWdpc3RlcgotICAgIHsweDAwNDEsMHgwMn0sICAgLy8gTENEIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIKLSAgICB7MHgwMDQyLDB4MDB9LCAgIC8vIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMAotICAgIHsweDAwNDMsMHgwMH0sICAgLy8gTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxCi0gICAgezB4MDA0NCwweDAwfSwgICAvLyBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIKLSAgICB7MHgwMDQ2LDB4ODB9LCAgIC8vIExDRCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMAotICAgIHsweDAwNDcsMHgwMn0sICAgLy8gTENEIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxCi0gICAgezB4MDA0OCwweDAwfSwgICAvLyBMQ0QgUGl4ZWwgUGFubmluZyBSZWdpc3RlcgotICAgIHsweDAwNEEsMHgwMH0sICAgLy8gTENEIERpc3BsYXkgRklGTyBIaWdoIFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyCi0gICAgezB4MDA0QiwweDAwfSwgICAvLyBMQ0QgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlcgotICAgIHsweDAwNTAsMHg0Rn0sICAgLy8gQ1JUL1RWIEhvcml6b250YWwgRGlzcGxheSBXaWR0aCBSZWdpc3RlcgotICAgIHsweDAwNTIsMHgxM30sICAgLy8gQ1JUL1RWIEhvcml6b250YWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyCi0gICAgezB4MDA1MywweDAxfSwgICAvLyBDUlQvVFYgSFJUQyBTdGFydCBQb3NpdGlvbiBSZWdpc3RlcgotICAgIHsweDAwNTQsMHgwQn0sICAgLy8gQ1JUL1RWIEhSVEMgUHVsc2UgV2lkdGggUmVnaXN0ZXIKLSAgICB7MHgwMDU2LDB4REZ9LCAgIC8vIENSVC9UViBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAwCi0gICAgezB4MDA1NywweDAxfSwgICAvLyBDUlQvVFYgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMQotICAgIHsweDAwNTgsMHgyQn0sICAgLy8gQ1JUL1RWIFZlcnRpY2FsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlcgotICAgIHsweDAwNTksMHgwOX0sICAgLy8gQ1JUL1RWIFZSVEMgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIKLSAgICB7MHgwMDVBLDB4MDF9LCAgIC8vIENSVC9UViBWUlRDIFB1bHNlIFdpZHRoIFJlZ2lzdGVyCi0gICAgezB4MDA1QiwweDAwfSwgICAvLyBUViBPdXRwdXQgQ29udHJvbCBSZWdpc3RlcgotICAgIHsweDAwNjAsMHgwNX0sICAgLy8gQ1JUL1RWIERpc3BsYXkgTW9kZSBSZWdpc3RlcgotICAgIHsweDAwNjIsMHgwMH0sICAgLy8gQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwCi0gICAgezB4MDA2MywweDAwfSwgICAvLyBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEKLSAgICB7MHgwMDY0LDB4MDB9LCAgIC8vIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMgotICAgIHsweDAwNjYsMHg4MH0sICAgLy8gQ1JUL1RWIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwCi0gICAgezB4MDA2NywweDAyfSwgICAvLyBDUlQvVFYgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEKLSAgICB7MHgwMDY4LDB4MDB9LCAgIC8vIENSVC9UViBQaXhlbCBQYW5uaW5nIFJlZ2lzdGVyCi0gICAgezB4MDA2QSwweDAwfSwgICAvLyBDUlQvVFYgRGlzcGxheSBGSUZPIEhpZ2ggVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIKLSAgICB7MHgwMDZCLDB4MDB9LCAgIC8vIENSVC9UViBEaXNwbGF5IEZJRk8gTG93IFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyCi0gICAgezB4MDA3MCwweDAwfSwgICAvLyBMQ0QgSW5rL0N1cnNvciBDb250cm9sIFJlZ2lzdGVyCi0gICAgezB4MDA3MSwweDAwfSwgICAvLyBMQ0QgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyCi0gICAgezB4MDA3MiwweDAwfSwgICAvLyBMQ0QgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMAotICAgIHsweDAwNzMsMHgwMH0sICAgLy8gTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDEKLSAgICB7MHgwMDc0LDB4MDB9LCAgIC8vIExDRCBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwCi0gICAgezB4MDA3NSwweDAwfSwgICAvLyBMQ0QgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMQotICAgIHsweDAwNzYsMHgwMH0sICAgLy8gTENEIEluay9DdXJzb3IgQmx1ZSBDb2xvciAwIFJlZ2lzdGVyCi0gICAgezB4MDA3NywweDAwfSwgICAvLyBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyCi0gICAgezB4MDA3OCwweDAwfSwgICAvLyBMQ0QgSW5rL0N1cnNvciBSZWQgQ29sb3IgMCBSZWdpc3RlcgotICAgIHsweDAwN0EsMHgxRn0sICAgLy8gTENEIEluay9DdXJzb3IgQmx1ZSBDb2xvciAxIFJlZ2lzdGVyCi0gICAgezB4MDA3QiwweDNGfSwgICAvLyBMQ0QgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyCi0gICAgezB4MDA3QywweDFGfSwgICAvLyBMQ0QgSW5rL0N1cnNvciBSZWQgQ29sb3IgMSBSZWdpc3RlcgotICAgIHsweDAwN0UsMHgwMH0sICAgLy8gTENEIEluay9DdXJzb3IgRklGTyBUaHJlc2hvbGQgUmVnaXN0ZXIKLSAgICB7MHgwMDgwLDB4MDB9LCAgIC8vIENSVC9UViBJbmsvQ3Vyc29yIENvbnRyb2wgUmVnaXN0ZXIKLSAgICB7MHgwMDgxLDB4MDB9LCAgIC8vIENSVC9UViBJbmsvQ3Vyc29yIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIKLSAgICB7MHgwMDgyLDB4MDB9LCAgIC8vIENSVC9UViBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAwCi0gICAgezB4MDA4MywweDAwfSwgICAvLyBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMQotICAgIHsweDAwODQsMHgwMH0sICAgLy8gQ1JUL1RWIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDAKLSAgICB7MHgwMDg1LDB4MDB9LCAgIC8vIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAxCi0gICAgezB4MDA4NiwweDAwfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDAgUmVnaXN0ZXIKLSAgICB7MHgwMDg3LDB4MDB9LCAgIC8vIENSVC9UViBJbmsvQ3Vyc29yIEdyZWVuIENvbG9yIDAgUmVnaXN0ZXIKLSAgICB7MHgwMDg4LDB4MDB9LCAgIC8vIENSVC9UViBJbmsvQ3Vyc29yIFJlZCBDb2xvciAwIFJlZ2lzdGVyCi0gICAgezB4MDA4QSwweDFGfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBCbHVlIENvbG9yIDEgUmVnaXN0ZXIKLSAgICB7MHgwMDhCLDB4M0Z9LCAgIC8vIENSVC9UViBJbmsvQ3Vyc29yIEdyZWVuIENvbG9yIDEgUmVnaXN0ZXIKLSAgICB7MHgwMDhDLDB4MUZ9LCAgIC8vIENSVC9UViBJbmsvQ3Vyc29yIFJlZCBDb2xvciAxIFJlZ2lzdGVyCi0gICAgezB4MDA4RSwweDAwfSwgICAvLyBDUlQvVFYgSW5rL0N1cnNvciBGSUZPIFRocmVzaG9sZCBSZWdpc3RlcgotICAgIHsweDAxMDAsMHgwMH0sICAgLy8gQml0Qmx0IENvbnRyb2wgUmVnaXN0ZXIgMAotICAgIHsweDAxMDEsMHgwMH0sICAgLy8gQml0Qmx0IENvbnRyb2wgUmVnaXN0ZXIgMQotICAgIHsweDAxMDIsMHgwMH0sICAgLy8gQml0Qmx0IFJPUCBDb2RlL0NvbG9yIEV4cGFuc2lvbiBSZWdpc3RlcgotICAgIHsweDAxMDMsMHgwMH0sICAgLy8gQml0Qmx0IE9wZXJhdGlvbiBSZWdpc3RlcgotICAgIHsweDAxMDQsMHgwMH0sICAgLy8gQml0Qmx0IFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAKLSAgICB7MHgwMTA1LDB4MDB9LCAgIC8vIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxCi0gICAgezB4MDEwNiwweDAwfSwgICAvLyBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMgotICAgIHsweDAxMDgsMHgwMH0sICAgLy8gQml0Qmx0IERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMAotICAgIHsweDAxMDksMHgwMH0sICAgLy8gQml0Qmx0IERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMQotICAgIHsweDAxMEEsMHgwMH0sICAgLy8gQml0Qmx0IERlc3RpbmF0aW9uIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMgotICAgIHsweDAxMEMsMHgwMH0sICAgLy8gQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAwCi0gICAgezB4MDEwRCwweDAwfSwgICAvLyBCaXRCbHQgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDEKLSAgICB7MHgwMTEwLDB4MDB9LCAgIC8vIEJpdEJsdCBXaWR0aCBSZWdpc3RlciAwCi0gICAgezB4MDExMSwweDAwfSwgICAvLyBCaXRCbHQgV2lkdGggUmVnaXN0ZXIgMQotICAgIHsweDAxMTIsMHgwMH0sICAgLy8gQml0Qmx0IEhlaWdodCBSZWdpc3RlciAwCi0gICAgezB4MDExMywweDAwfSwgICAvLyBCaXRCbHQgSGVpZ2h0IFJlZ2lzdGVyIDEKLSAgICB7MHgwMTE0LDB4MDB9LCAgIC8vIEJpdEJsdCBCYWNrZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDAKLSAgICB7MHgwMTE1LDB4MDB9LCAgIC8vIEJpdEJsdCBCYWNrZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDEKLSAgICB7MHgwMTE4LDB4MDB9LCAgIC8vIEJpdEJsdCBGb3JlZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDAKLSAgICB7MHgwMTE5LDB4MDB9LCAgIC8vIEJpdEJsdCBGb3JlZ3JvdW5kIENvbG9yIFJlZ2lzdGVyIDEKLSAgICB7MHgwMUUwLDB4MDF9LCAgIC8vIExvb2stVXAgVGFibGUgTW9kZSBSZWdpc3RlcgotICAgIHsweDAxRTIsMHgwMH0sICAgLy8gTG9vay1VcCBUYWJsZSBBZGRyZXNzIFJlZ2lzdGVyCi0gICAgezB4MDFFNCwweDAwfSwgICAvLyBMb29rLVVwIFRhYmxlIERhdGEgUmVnaXN0ZXIKLSAgICB7MHgwMUYwLDB4MTB9LCAgIC8vIFBvd2VyIFNhdmUgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotICAgIHsweDAxRjEsMHgwMH0sICAgLy8gUG93ZXIgU2F2ZSBTdGF0dXMgUmVnaXN0ZXIKLSAgICB7MHgwMUY0LDB4MDB9LCAgIC8vIENQVS10by1NZW1vcnkgQWNjZXNzIFdhdGNoZG9nIFRpbWVyIFJlZ2lzdGVyCi0gICAgezB4MDFGQywweDAxfSwgICAvLyBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIKKyAgICB7MHgwMDAxLDB4MDB9LCAgIC8qIE1pc2NlbGxhbmVvdXMgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMUZDLDB4MDB9LCAgIC8qIERpc3BsYXkgTW9kZSBSZWdpc3RlciAqLworICAgIHsweDAwMDQsMHgxYn0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLworICAgIHsweDAwMDUsMHgwMH0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworICAgIHsweDAwMDgsMHhlNX0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIgMCAqLworICAgIHsweDAwMDksMHgxZn0sICAgLyogR2VuZXJhbCBJTyBQaW5zIENvbnRyb2wgUmVnaXN0ZXIgMSAqLworICAgIHsweDAwMTAsMHgwMn0sICAgLyogTWVtb3J5IENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDE0LDB4MTB9LCAgIC8qIExDRCBQaXhlbCBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisgICAgezB4MDAxOCwweDAyfSwgICAvKiBDUlQvVFYgUGl4ZWwgQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworICAgIHsweDAwMUMsMHgwMn0sICAgLyogTWVkaWFQbHVnIENsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDFFLDB4MDF9LCAgIC8qIENQVSBUbyBNZW1vcnkgV2FpdCBTdGF0ZSBTZWxlY3QgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDIxLDB4MDR9LCAgIC8qIERSQU0gUmVmcmVzaCBSYXRlIFJlZ2lzdGVyICovCisgICAgezB4MDAyQSwweDAwfSwgICAvKiBEUkFNIFRpbWluZ3MgQ29udHJvbCBSZWdpc3RlciAwICovCisgICAgezB4MDAyQiwweDAxfSwgICAvKiBEUkFNIFRpbWluZ3MgQ29udHJvbCBSZWdpc3RlciAxICovCisgICAgezB4MDAyMCwweDgwfSwgICAvKiBNZW1vcnkgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworICAgIHsweDAwMzAsMHgyNX0sICAgLyogUGFuZWwgVHlwZSBSZWdpc3RlciAqLworICAgIHsweDAwMzEsMHgwMH0sICAgLyogTU9EIFJhdGUgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDMyLDB4NEZ9LCAgIC8qIExDRCBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDM0LDB4MTN9LCAgIC8qIExDRCBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciAqLworICAgIHsweDAwMzUsMHgwMX0sICAgLyogVEZUIEZQTElORSBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciAqLworICAgIHsweDAwMzYsMHgwQn0sICAgLyogVEZUIEZQTElORSBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLworICAgIHsweDAwMzgsMHhERn0sICAgLyogTENEIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDM5LDB4MDF9LCAgIC8qIExDRCBWZXJ0aWNhbCBEaXNwbGF5IEhlaWdodCBSZWdpc3RlciAxICovCisgICAgezB4MDAzQSwweDJDfSwgICAvKiBMQ0QgVmVydGljYWwgTm9uLURpc3BsYXkgUGVyaW9kIFJlZ2lzdGVyICovCisgICAgezB4MDAzQiwweDAwfSwgICAvKiBURlQgRlBGUkFNRSBTdGFydCBQb3NpdGlvbiBSZWdpc3RlciAqLworICAgIHsweDAwM0MsMHgwMX0sICAgLyogVEZUIEZQRlJBTUUgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDQwLDB4MDV9LCAgIC8qIExDRCBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDQxLDB4MDJ9LCAgIC8qIExDRCBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyICovCisgICAgezB4MDA0MiwweDAwfSwgICAvKiBMQ0QgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDQzLDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworICAgIHsweDAwNDQsMHgwMH0sICAgLyogTENEIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAyICovCisgICAgezB4MDA0NiwweDgwfSwgICAvKiBMQ0QgTWVtb3J5IEFkZHJlc3MgT2Zmc2V0IFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDQ3LDB4MDJ9LCAgIC8qIExDRCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMSAqLworICAgIHsweDAwNDgsMHgwMH0sICAgLyogTENEIFBpeGVsIFBhbm5pbmcgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDRBLDB4MDB9LCAgIC8qIExDRCBEaXNwbGF5IEZJRk8gSGlnaCBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciAqLworICAgIHsweDAwNEIsMHgwMH0sICAgLyogTENEIERpc3BsYXkgRklGTyBMb3cgVGhyZXNob2xkIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDUwLDB4NEZ9LCAgIC8qIENSVC9UViBIb3Jpem9udGFsIERpc3BsYXkgV2lkdGggUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDUyLDB4MTN9LCAgIC8qIENSVC9UViBIb3Jpem9udGFsIE5vbi1EaXNwbGF5IFBlcmlvZCBSZWdpc3RlciAqLworICAgIHsweDAwNTMsMHgwMX0sICAgLyogQ1JUL1RWIEhSVEMgU3RhcnQgUG9zaXRpb24gUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDU0LDB4MEJ9LCAgIC8qIENSVC9UViBIUlRDIFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCisgICAgezB4MDA1NiwweERGfSwgICAvKiBDUlQvVFYgVmVydGljYWwgRGlzcGxheSBIZWlnaHQgUmVnaXN0ZXIgMCAqLworICAgIHsweDAwNTcsMHgwMX0sICAgLyogQ1JUL1RWIFZlcnRpY2FsIERpc3BsYXkgSGVpZ2h0IFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMDU4LDB4MkJ9LCAgIC8qIENSVC9UViBWZXJ0aWNhbCBOb24tRGlzcGxheSBQZXJpb2QgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDU5LDB4MDl9LCAgIC8qIENSVC9UViBWUlRDIFN0YXJ0IFBvc2l0aW9uIFJlZ2lzdGVyICovCisgICAgezB4MDA1QSwweDAxfSwgICAvKiBDUlQvVFYgVlJUQyBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLworICAgIHsweDAwNUIsMHgwMH0sICAgLyogVFYgT3V0cHV0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDYwLDB4MDV9LCAgIC8qIENSVC9UViBEaXNwbGF5IE1vZGUgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDYyLDB4MDB9LCAgIC8qIENSVC9UViBEaXNwbGF5IFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMCAqLworICAgIHsweDAwNjMsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAxICovCisgICAgezB4MDA2NCwweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKyAgICB7MHgwMDY2LDB4ODB9LCAgIC8qIENSVC9UViBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLworICAgIHsweDAwNjcsMHgwMn0sICAgLyogQ1JUL1RWIE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxICovCisgICAgezB4MDA2OCwweDAwfSwgICAvKiBDUlQvVFYgUGl4ZWwgUGFubmluZyBSZWdpc3RlciAqLworICAgIHsweDAwNkEsMHgwMH0sICAgLyogQ1JUL1RWIERpc3BsYXkgRklGTyBIaWdoIFRocmVzaG9sZCBDb250cm9sIFJlZ2lzdGVyICovCisgICAgezB4MDA2QiwweDAwfSwgICAvKiBDUlQvVFYgRGlzcGxheSBGSUZPIExvdyBUaHJlc2hvbGQgQ29udHJvbCBSZWdpc3RlciAqLworICAgIHsweDAwNzAsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgQ29udHJvbCBSZWdpc3RlciAqLworICAgIHsweDAwNzEsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAqLworICAgIHsweDAwNzIsMHgwMH0sICAgLyogTENEIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMDczLDB4MDB9LCAgIC8qIExDRCBDdXJzb3IgWCBQb3NpdGlvbiBSZWdpc3RlciAxICovCisgICAgezB4MDA3NCwweDAwfSwgICAvKiBMQ0QgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMCAqLworICAgIHsweDAwNzUsMHgwMH0sICAgLyogTENEIEN1cnNvciBZIFBvc2l0aW9uIFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMDc2LDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMCBSZWdpc3RlciAqLworICAgIHsweDAwNzcsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMCBSZWdpc3RlciAqLworICAgIHsweDAwNzgsMHgwMH0sICAgLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDAgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDdBLDB4MUZ9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEJsdWUgQ29sb3IgMSBSZWdpc3RlciAqLworICAgIHsweDAwN0IsMHgzRn0sICAgLyogTENEIEluay9DdXJzb3IgR3JlZW4gQ29sb3IgMSBSZWdpc3RlciAqLworICAgIHsweDAwN0MsMHgxRn0sICAgLyogTENEIEluay9DdXJzb3IgUmVkIENvbG9yIDEgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMDdFLDB4MDB9LCAgIC8qIExDRCBJbmsvQ3Vyc29yIEZJRk8gVGhyZXNob2xkIFJlZ2lzdGVyICovCisgICAgezB4MDA4MCwweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBDb250cm9sIFJlZ2lzdGVyICovCisgICAgezB4MDA4MSwweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyICovCisgICAgezB4MDA4MiwweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFggUG9zaXRpb24gUmVnaXN0ZXIgMCAqLworICAgIHsweDAwODMsMHgwMH0sICAgLyogQ1JUL1RWIEN1cnNvciBYIFBvc2l0aW9uIFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMDg0LDB4MDB9LCAgIC8qIENSVC9UViBDdXJzb3IgWSBQb3NpdGlvbiBSZWdpc3RlciAwICovCisgICAgezB4MDA4NSwweDAwfSwgICAvKiBDUlQvVFYgQ3Vyc29yIFkgUG9zaXRpb24gUmVnaXN0ZXIgMSAqLworICAgIHsweDAwODYsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAwIFJlZ2lzdGVyICovCisgICAgezB4MDA4NywweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAwIFJlZ2lzdGVyICovCisgICAgezB4MDA4OCwweDAwfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMCBSZWdpc3RlciAqLworICAgIHsweDAwOEEsMHgxRn0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgQmx1ZSBDb2xvciAxIFJlZ2lzdGVyICovCisgICAgezB4MDA4QiwweDNGfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBHcmVlbiBDb2xvciAxIFJlZ2lzdGVyICovCisgICAgezB4MDA4QywweDFGfSwgICAvKiBDUlQvVFYgSW5rL0N1cnNvciBSZWQgQ29sb3IgMSBSZWdpc3RlciAqLworICAgIHsweDAwOEUsMHgwMH0sICAgLyogQ1JUL1RWIEluay9DdXJzb3IgRklGTyBUaHJlc2hvbGQgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMTAwLDB4MDB9LCAgIC8qIEJpdEJsdCBDb250cm9sIFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMTAxLDB4MDB9LCAgIC8qIEJpdEJsdCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMTAyLDB4MDB9LCAgIC8qIEJpdEJsdCBST1AgQ29kZS9Db2xvciBFeHBhbnNpb24gUmVnaXN0ZXIgKi8KKyAgICB7MHgwMTAzLDB4MDB9LCAgIC8qIEJpdEJsdCBPcGVyYXRpb24gUmVnaXN0ZXIgKi8KKyAgICB7MHgwMTA0LDB4MDB9LCAgIC8qIEJpdEJsdCBTb3VyY2UgU3RhcnQgQWRkcmVzcyBSZWdpc3RlciAwICovCisgICAgezB4MDEwNSwweDAwfSwgICAvKiBCaXRCbHQgU291cmNlIFN0YXJ0IEFkZHJlc3MgUmVnaXN0ZXIgMSAqLworICAgIHsweDAxMDYsMHgwMH0sICAgLyogQml0Qmx0IFNvdXJjZSBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKyAgICB7MHgwMTA4LDB4MDB9LCAgIC8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDAgKi8KKyAgICB7MHgwMTA5LDB4MDB9LCAgIC8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMTBBLDB4MDB9LCAgIC8qIEJpdEJsdCBEZXN0aW5hdGlvbiBTdGFydCBBZGRyZXNzIFJlZ2lzdGVyIDIgKi8KKyAgICB7MHgwMTBDLDB4MDB9LCAgIC8qIEJpdEJsdCBNZW1vcnkgQWRkcmVzcyBPZmZzZXQgUmVnaXN0ZXIgMCAqLworICAgIHsweDAxMEQsMHgwMH0sICAgLyogQml0Qmx0IE1lbW9yeSBBZGRyZXNzIE9mZnNldCBSZWdpc3RlciAxICovCisgICAgezB4MDExMCwweDAwfSwgICAvKiBCaXRCbHQgV2lkdGggUmVnaXN0ZXIgMCAqLworICAgIHsweDAxMTEsMHgwMH0sICAgLyogQml0Qmx0IFdpZHRoIFJlZ2lzdGVyIDEgKi8KKyAgICB7MHgwMTEyLDB4MDB9LCAgIC8qIEJpdEJsdCBIZWlnaHQgUmVnaXN0ZXIgMCAqLworICAgIHsweDAxMTMsMHgwMH0sICAgLyogQml0Qmx0IEhlaWdodCBSZWdpc3RlciAxICovCisgICAgezB4MDExNCwweDAwfSwgICAvKiBCaXRCbHQgQmFja2dyb3VuZCBDb2xvciBSZWdpc3RlciAwICovCisgICAgezB4MDExNSwweDAwfSwgICAvKiBCaXRCbHQgQmFja2dyb3VuZCBDb2xvciBSZWdpc3RlciAxICovCisgICAgezB4MDExOCwweDAwfSwgICAvKiBCaXRCbHQgRm9yZWdyb3VuZCBDb2xvciBSZWdpc3RlciAwICovCisgICAgezB4MDExOSwweDAwfSwgICAvKiBCaXRCbHQgRm9yZWdyb3VuZCBDb2xvciBSZWdpc3RlciAxICovCisgICAgezB4MDFFMCwweDAxfSwgICAvKiBMb29rLVVwIFRhYmxlIE1vZGUgUmVnaXN0ZXIgKi8KKyAgICB7MHgwMUUyLDB4MDB9LCAgIC8qIExvb2stVXAgVGFibGUgQWRkcmVzcyBSZWdpc3RlciAqLworICAgIHsweDAxRTQsMHgwMH0sICAgLyogTG9vay1VcCBUYWJsZSBEYXRhIFJlZ2lzdGVyICovCisgICAgezB4MDFGMCwweDEwfSwgICAvKiBQb3dlciBTYXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyAgICB7MHgwMUYxLDB4MDB9LCAgIC8qIFBvd2VyIFNhdmUgU3RhdHVzIFJlZ2lzdGVyICovCisgICAgezB4MDFGNCwweDAwfSwgICAvKiBDUFUtdG8tTWVtb3J5IEFjY2VzcyBXYXRjaGRvZyBUaW1lciBSZWdpc3RlciAqLworICAgIHsweDAxRkMsMHgwMX0sICAgLyogRGlzcGxheSBNb2RlIFJlZ2lzdGVyICovCiAgICAgezAsIDB9CiB9OwogCkBAIC0yNzQsNyArMjczLDYgQEAKICNlbmRpZiAvKiBDT05GSUdfTkVDX05MNjQ0OEJDMjAgKi8KIAogCi0KICNpZmRlZiBDT05GSUdfQ09OU09MRV9FWFRSQV9JTkZPCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI4NiwxMCArMjg0LDEwIEBACiB2b2lkIHZpZGVvX2dldF9pbmZvX3N0ciAoaW50IGxpbmVfbnVtYmVyLCBjaGFyICppbmZvKQogewogICAgIGlmIChsaW5lX251bWJlciA9PSAxKSB7Ci0gICAgICAgIHN0cmNweSAoaW5mbywgIiBSUFhDbGFzc2ljIGJvYXJkIik7CisJc3RyY3B5IChpbmZvLCAiIFJQWENsYXNzaWMgYm9hcmQiKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGluZm8gWzBdID0gJ1wwJzsKKwlpbmZvIFswXSA9ICdcMCc7CiAgICAgfQogCiB9CkBAIC0zMDgsNyArMzA2LDcgQEAKICAgICAqKEVDQ1hfQ1NSMTIpIHw9IEVDQ1hfODYwOwogICAgICooRUNDWF9DU1I4KSB8PSBFQ0NYX0JFIHwgRUNDWF9DUzI7CiAgICAgKihFQ0NYX0NTUjgpIHw9IEVDQ1hfRU5FUFNPTjsKLSAgICAKKwogICAgIG1lbWN0bC0+bWVtY19vcjIgPSBTRUQxMzgwNl9PUjsKICAgICBtZW1jdGwtPm1lbWNfYnIyID0gU0VEMTM4MDZfUkVHX0FERFIgfCBTRUQxMzgwNl9BQ0NFUzsKIApAQCAtMzE2LDcgKzMxNCw3IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGJvYXJkX3ZhbGlkYXRlX3NjcmVlbiAtLSAKKyAqIGJvYXJkX3ZhbGlkYXRlX3NjcmVlbiAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkIGJvYXJkX3ZhbGlkYXRlX3NjcmVlbiAodW5zaWduZWQgaW50IGJhc2UpCkBAIC0zMjUsNyArMzIzLDcgQEAKICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoYmFzZSArIFJFR19HUElPX0NUUkwpID0gMHg4MDsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGJvYXJkX2dldF9yZWdzIC0tIAorICogYm9hcmRfZ2V0X3JlZ3MgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogY29uc3QgUzFEX1JFR1MgKmJvYXJkX2dldF9yZWdzICh2b2lkKQpAQCAtMzMzLDcgKzMzMSw3IEBACiAgICAgcmV0dXJuIChpbml0X3JlZ3MpOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogYm9hcmRfZ2V0X3dpZHRoIC0tIAorICogYm9hcmRfZ2V0X3dpZHRoIC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIGludCBib2FyZF9nZXRfd2lkdGggKHZvaWQpCkBAIC0zNDIsNyArMzQwLDcgQEAKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogYm9hcmRfZ2V0X2hlaWdodCAtLSAKKyAqIGJvYXJkX2dldF9oZWlnaHQgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogaW50IGJvYXJkX2dldF9oZWlnaHQgKHZvaWQpCmRpZmYgLS1naXQgYS9ib2FyZC9SUFhDbGFzc2ljL2ZsYXNoLmMgYi9ib2FyZC9SUFhDbGFzc2ljL2ZsYXNoLmMKaW5kZXggZmRmOTBjZi4uMmUwYjhmOSAxMDA2NDQKLS0tIGEvYm9hcmQvUlBYQ2xhc3NpYy9mbGFzaC5jCisrKyBiL2JvYXJkL1JQWENsYXNzaWMvZmxhc2guYwpAQCAtNTgsNyArNTgsNyBAQAogCXNpemVfYjAgPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKUNGR19GTEFTSF9CQVNFLCAmZmxhc2hfaW5mb1swXSk7CiAKIAotICAgICAgICBmbGFzaF9nZXRfb2Zmc2V0cyAoQ0ZHX0ZMQVNIX0JBU0UsICZmbGFzaF9pbmZvWzBdKTsKKwlmbGFzaF9nZXRfb2Zmc2V0cyAoQ0ZHX0ZMQVNIX0JBU0UsICZmbGFzaF9pbmZvWzBdKTsKIAogI2lmIENGR19NT05JVE9SX0JBU0UgPj0gQ0ZHX0ZMQVNIX0JBU0UKIAkvKiBtb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwpAQCAtMTEyLDEyICsxMTIsMTIgQEAKIAl9CiAKIAlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKLSAgICAgICAgY2FzZSBGTEFTSF9BTURMMzIzQjoKLSAgICAgICAgICAgIHByaW50ZiAoIkFNREwzMjNEQiAoMTYgTWJ5dGVzLCBib3R0b20gYm9vdCBzZWN0KVxuIik7Ci0gICAgICAgICAgICBicmVhazsKKwljYXNlIEZMQVNIX0FNREwzMjNCOgorCSAgICBwcmludGYgKCJBTURMMzIzREIgKDE2IE1ieXRlcywgYm90dG9tIGJvb3Qgc2VjdClcbiIpOworCSAgICBicmVhazsKIAlkZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGVcbiIpOwotICAgICAgICAgICAgYnJlYWs7CisJICAgIHByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKKwkgICAgYnJlYWs7CiAJfQogCiAJcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKQEAgLTE1MiwxMSArMTUyLDExIEBACiAJdWxvbmcgdmFsdWU7CiAJdWxvbmcgYmFzZSA9ICh1bG9uZylhZGRyOwogCi0gICAgICAgIC8qIFJlc2V0IGZsYXNoIGNvbXBvbmVueSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGFkZHIgWzBdID0gMHhmMGYwZjBmMDsKKwkvKiBSZXNldCBmbGFzaCBjb21wb25lbnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWFkZHIgWzBdID0gMHhmMGYwZjBmMDsKIAotICAgICAgICAvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLwotICAgICAgICBhZGRyWzB4QUFBXSA9IDB4QUFBQUFBQUEgOworCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCisJYWRkclsweEFBQV0gPSAweEFBQUFBQUFBIDsKIAlhZGRyWzB4NTU1XSA9IDB4NTU1NTU1NTUgOwogCWFkZHJbMHhBQUFdID0gMHg5MDkwOTA5MCA7CiAKQEAgLTE3Niw0OCArMTc2LDQ4IEBACiAJdmFsdWUgPSBhZGRyWzJdIDsJCS8qIGRldmljZSBJRAkJKi8KIAogCXN3aXRjaCAodmFsdWUgJiAweDAwRkYwMEZGKSB7Ci0gICAgICAgIGNhc2UgKEFNRF9JRF9ETDMyM0IgJiAweDAwRkYwMEZGKToKLSAgICAgICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNREwzMjNCOwotICAgICAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7Ci0gICAgICAgICAgICBpbmZvLT5zaXplID0gMHgwMTAwMDAwMDsgICAgICAgICAgICAvKiAxNiBNYiAgICAgICAgICAgICAgICAgICAgICovCisJY2FzZSAoQU1EX0lEX0RMMzIzQiAmIDB4MDBGRjAwRkYpOgorCSAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTURMMzIzQjsKKwkgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7CisJICAgIGluZm8tPnNpemUgPSAweDAxMDAwMDAwOyAgICAgICAgICAgIC8qIDE2IE1iICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgYnJlYWs7CisJICAgIGJyZWFrOwogCWRlZmF1bHQ6CiAJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKIAkJcmV0dXJuICgwKTsJCQkvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCiAKIAl9CiAJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCi0gICAgICAgIC8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgYm90dG9tIGJvb3QgYmxvY2sgdHlwZQkqLwotICAgICAgICBpbmZvLT5zdGFydFswXSA9IGJhc2UgKyAweDAwMDAwMDAwOwotICAgICAgICBpbmZvLT5zdGFydFsxXSA9IGJhc2UgKyAweDAwMDA4MDAwOwotICAgICAgICBpbmZvLT5zdGFydFsyXSA9IGJhc2UgKyAweDAwMDEwMDAwOwotICAgICAgICBpbmZvLT5zdGFydFszXSA9IGJhc2UgKyAweDAwMDE4MDAwOwotICAgICAgICBpbmZvLT5zdGFydFs0XSA9IGJhc2UgKyAweDAwMDIwMDAwOwotICAgICAgICBpbmZvLT5zdGFydFs1XSA9IGJhc2UgKyAweDAwMDI4MDAwOwotICAgICAgICBpbmZvLT5zdGFydFs2XSA9IGJhc2UgKyAweDAwMDMwMDAwOwotICAgICAgICBpbmZvLT5zdGFydFs3XSA9IGJhc2UgKyAweDAwMDM4MDAwOwotICAgICAgICBmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArICgoaS03KSAqIDB4MDAwNDAwMDApIDsKLSAgICAgICAgfQorCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgYm90dG9tIGJvb3QgYmxvY2sgdHlwZQkqLworCWluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7CisJaW5mby0+c3RhcnRbMV0gPSBiYXNlICsgMHgwMDAwODAwMDsKKwlpbmZvLT5zdGFydFsyXSA9IGJhc2UgKyAweDAwMDEwMDAwOworCWluZm8tPnN0YXJ0WzNdID0gYmFzZSArIDB4MDAwMTgwMDA7CisJaW5mby0+c3RhcnRbNF0gPSBiYXNlICsgMHgwMDAyMDAwMDsKKwlpbmZvLT5zdGFydFs1XSA9IGJhc2UgKyAweDAwMDI4MDAwOworCWluZm8tPnN0YXJ0WzZdID0gYmFzZSArIDB4MDAwMzAwMDA7CisJaW5mby0+c3RhcnRbN10gPSBiYXNlICsgMHgwMDAzODAwMDsKKwlmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKKwkgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKChpLTcpICogMHgwMDA0MDAwMCkgOworCX0KIAogCS8qIGNoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjM7IGkrKykgewotICAgICAgICAgICAgLyogcmVhZCBzZWN0b3IgcHJvdGVjdGlvbiBhdCBzZWN0b3IgYWRkcmVzcywgKEE3IC4uIEEwKSA9IDB4MDIgKi8KLSAgICAgICAgICAgIC8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KLSAgICAgICAgICAgIGFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShpbmZvLT5zdGFydFtpXSk7Ci0gICAgICAgICAgICBpbmZvLT5wcm90ZWN0W2ldID0gYWRkcls0XSAmIDEgOworCWZvciAoaSA9IDA7IGkgPCAyMzsgaSsrKSB7CisJICAgIC8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBNyAuLiBBMCkgPSAweDAyICovCisJICAgIC8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KKwkgICAgYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKGluZm8tPnN0YXJ0W2ldKTsKKwkgICAgaW5mby0+cHJvdGVjdFtpXSA9IGFkZHJbNF0gJiAxIDsKIAl9Ci0gICAgICAgIC8qIENoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyBpbiB0aGUgMm5kIGJhbmsgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGFkZHJbMHgxMDBBQUFdID0gMHhBQUFBQUFBQSA7Ci0gICAgICAgIGFkZHJbMHgxMDA1NTVdID0gMHg1NTU1NTU1NSA7Ci0gICAgICAgIGFkZHJbMHgxMDBBQUFdID0gMHg5MDkwOTA5MCA7CisJLyogQ2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzIGluIHRoZSAybmQgYmFuayAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlhZGRyWzB4MTAwQUFBXSA9IDB4QUFBQUFBQUEgOworCWFkZHJbMHgxMDA1NTVdID0gMHg1NTU1NTU1NSA7CisJYWRkclsweDEwMEFBQV0gPSAweDkwOTA5MDkwIDsKIAotICAgICAgICBmb3IgKGkgPSAyMzsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLwotICAgICAgICAgICAgLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLwotICAgICAgICAgICAgYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKGluZm8tPnN0YXJ0W2ldKTsKLSAgICAgICAgICAgIGluZm8tPnByb3RlY3RbaV0gPSBhZGRyWzRdICYgMSA7CisJZm9yIChpID0gMjM7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCSAgICAvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLworCSAgICAvKiBEMCA9IDEgaWYgcHJvdGVjdGVkICovCisJICAgIGFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShpbmZvLT5zdGFydFtpXSk7CisJICAgIGluZm8tPnByb3RlY3RbaV0gPSBhZGRyWzRdICYgMSA7CiAJfQogCiAJLyoKQEAgLTMzMCw3ICszMzAsNyBAQAogCWFkZHJbMF0gPSAweEYwRjBGMEYwOwkvKiByZXNldCBiYW5rICovCiAKIAlwcmludGYgKCIgZG9uZVxuIik7Ci0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9ib2FyZC9SUFhDbGFzc2ljL3UtYm9vdC5sZHMgYi9ib2FyZC9SUFhDbGFzc2ljL3UtYm9vdC5sZHMKaW5kZXggYTMxYzM2Mi4uMDgyZDhiMCAxMDA2NDQKLS0tIGEvYm9hcmQvUlBYQ2xhc3NpYy91LWJvb3QubGRzCisrKyBiL2JvYXJkL1JQWENsYXNzaWMvdS1ib290LmxkcwpAQCAtMTEwLDYgKzExMCwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTMyLDQgKzEzNywzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL1JQWENsYXNzaWMvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL1JQWENsYXNzaWMvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCAyMjEzOGY4Li5jMGVlODQ5IDEwMDY0NAotLS0gYS9ib2FyZC9SUFhDbGFzc2ljL3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvUlBYQ2xhc3NpYy91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDYsNiArMTA2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjgsNCArMTMzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvUlBYbGl0ZS9NYWtlZmlsZSBiL2JvYXJkL1JQWGxpdGUvTWFrZWZpbGUKaW5kZXggZWYxNzNkMC4uMTNjZTlmYyAxMDA2NDQKLS0tIGEvYm9hcmQvUlBYbGl0ZS9NYWtlZmlsZQorKysgYi9ib2FyZC9SUFhsaXRlL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9SUFhsaXRlL3UtYm9vdC5sZHMgYi9ib2FyZC9SUFhsaXRlL3UtYm9vdC5sZHMKaW5kZXggYTMxYzM2Mi4uMDgyZDhiMCAxMDA2NDQKLS0tIGEvYm9hcmQvUlBYbGl0ZS91LWJvb3QubGRzCisrKyBiL2JvYXJkL1JQWGxpdGUvdS1ib290LmxkcwpAQCAtMTEwLDYgKzExMCwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTMyLDQgKzEzNywzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL1JQWGxpdGUvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL1JQWGxpdGUvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCAyMjEzOGY4Li5jMGVlODQ5IDEwMDY0NAotLS0gYS9ib2FyZC9SUFhsaXRlL3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvUlBYbGl0ZS91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDYsNiArMTA2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjgsNCArMTMzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvUlJ2aXNpb24vTWFrZWZpbGUgYi9ib2FyZC9SUnZpc2lvbi9NYWtlZmlsZQppbmRleCBjNzQ4ZDM1Li5mZGM2ZmQ1IDEwMDY0NAotLS0gYS9ib2FyZC9SUnZpc2lvbi9NYWtlZmlsZQorKysgYi9ib2FyZC9SUnZpc2lvbi9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvUlJ2aXNpb24vdS1ib290LmxkcyBiL2JvYXJkL1JSdmlzaW9uL3UtYm9vdC5sZHMKaW5kZXggYjJkODA5MC4uZjgxYTEwZSAxMDA2NDQKLS0tIGEvYm9hcmQvUlJ2aXNpb24vdS1ib290LmxkcworKysgYi9ib2FyZC9SUnZpc2lvbi91LWJvb3QubGRzCkBAIC0xMTIsNiArMTEyLDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMzQsNCArMTM5LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvYTMwMDAvTWFrZWZpbGUgYi9ib2FyZC9hMzAwMC9NYWtlZmlsZQppbmRleCAwMmUyYjRiLi41ZmRlMzYyIDEwMDY0NAotLS0gYS9ib2FyZC9hMzAwMC9NYWtlZmlsZQorKysgYi9ib2FyZC9hMzAwMC9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUyAJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2EzMDAwL1JFQURNRSBiL2JvYXJkL2EzMDAwL1JFQURNRQppbmRleCA0MTc5NjlmLi5mMGU5MmM1IDEwMDY0NAotLS0gYS9ib2FyZC9hMzAwMC9SRUFETUUKKysrIGIvYm9hcmQvYTMwMDAvUkVBRE1FCkBAIC0xNSw0ICsxNSwzIEBACiBVLUJvb3QsIGF0IHRoZSBhZGRyZXNzIG9mIDB4RkZGRTAwMDAuCiAKIFRoZXJlIGlzIGEgTmF0aW9uYWwgbnM4MzgxNSAxMC8xMDBNIGV0aGVybmV0IGNvbnRyb2xsZXIgb24tYm9hcmQuCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2EzMDAwL2ZsYXNoLmMgYi9ib2FyZC9hMzAwMC9mbGFzaC5jCmluZGV4IGNiZmQxZDEuLjEzYTVjYTUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2EzMDAwL2ZsYXNoLmMKKysrIGIvYm9hcmQvYTMwMDAvZmxhc2guYwpAQCAtNzEsNyArNzEsNyBAQAogCWludCBpOwogCiAJLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLwotCWZvciAoaT0wOyBpPENGR19NQVhfRkxBU0hfQkFOS1M7ICsraSkgCisJZm9yIChpPTA7IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKQogCXsKIAkJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CiAKQEAgLTgxLDcgKzgxLDcgQEAKICovCiAJCXNpemVfYltpXSA9IGZsYXNoX2dldF9zaXplKCh2dV9jaGFyICopIDB4ZmY4MDAwMDAgLCAmZmxhc2hfaW5mb1tpXSk7CiAKLQkJaWYgKGZsYXNoX2luZm9baV0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgCisJCWlmIChmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pCiAJCXsKIAkJCXByaW50ZiAoIiMjIFVua25vd24gRkxBU0ggb24gQmFuayAlZDogIgogCQkJCSJJRCAweCVseCwgU2l6ZSA9IDB4JTA4bHggPSAlbGQgTUJcbiIsCkBAIC0xMTksNyArMTE5LDcgQEAKIAogCXNpemUgPSAwOwogCURFQlVHRigiIyMgRmluYWwgRmxhc2ggYmFuayBzaXplczogIik7Ci0JZm9yIChpPTA7IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKSAKKwlmb3IgKGk9MDsgaTxDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2kpCiAJewogCQlERUJVR0YoIiUwOGx4ICIsIHNpemVfYltpXSk7CiAJCXNpemUgKz0gc2l6ZV9iW2ldOwpAQCAtMTc0LDE2ICsxNzQsMTYgQEAKIAl9CiAKIAlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKLQljYXNlIEZMQVNIXzI4RjMyMEozQToJCisJY2FzZSBGTEFTSF8yOEYzMjBKM0E6CiAJCQlwcmludGYgKCIyOEYzMjBKM0EgKDMyTWJpdCA9IDEyOEsgeCAzMilcbiIpOwogCQkJYnJlYWs7Ci0JY2FzZSBGTEFTSF8yOEY2NDBKM0E6CQorCWNhc2UgRkxBU0hfMjhGNjQwSjNBOgogCQkJcHJpbnRmICgiMjhGNjQwSjNBICg2NE1iaXQgPSAxMjhLIHggNjQpXG4iKTsKIAkJCWJyZWFrOwotCWNhc2UgRkxBU0hfMjhGMTI4SjNBOgkKKwljYXNlIEZMQVNIXzI4RjEyOEozQToKIAkJCXByaW50ZiAoIjI4RjEyOEozQSAoMTI4TWJpdCA9IDEyOEsgeCAxMjgpXG4iKTsKIAkJCWJyZWFrOwotCWRlZmF1bHQ6CQkKKwlkZWZhdWx0OgogCQkJcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGVcbiIpOwogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYTMwMDAvdS1ib290LmxkcyBiL2JvYXJkL2EzMDAwL3UtYm9vdC5sZHMKaW5kZXggNjI3YTUzYi4uNmJkODY1ZSAxMDA2NDQKLS0tIGEvYm9hcmQvYTMwMDAvdS1ib290LmxkcworKysgYi9ib2FyZC9hMzAwMC91LWJvb3QubGRzCkBAIC0xMDIsNiArMTAyLDEwIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTI1LDQgKzEyOSwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2F0OTFybTkyMDBkay9NYWtlZmlsZSBiL2JvYXJkL2F0OTFybTkyMDBkay9NYWtlZmlsZQppbmRleCBkOTI1ZDMzLi45M2JhNjk5IDEwMDY0NAotLS0gYS9ib2FyZC9hdDkxcm05MjAwZGsvTWFrZWZpbGUKKysrIGIvYm9hcmQvYXQ5MXJtOTIwMGRrL01ha2VmaWxlCkBAIC0yOSw3ICsyOSw3IEBACiBTT0JKUwk6PQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9hdDkxcm05MjAwZGsvY29uZmlnLm1rIGIvYm9hcmQvYXQ5MXJtOTIwMGRrL2NvbmZpZy5tawppbmRleCAwMDliNGQ3Li45Y2UxNjFlIDEwMDY0NAotLS0gYS9ib2FyZC9hdDkxcm05MjAwZGsvY29uZmlnLm1rCisrKyBiL2JvYXJkL2F0OTFybTkyMDBkay9jb25maWcubWsKQEAgLTEsMiArMSBAQAogVEVYVF9CQVNFID0gMHgyMWYwMDAwMAotCmRpZmYgLS1naXQgYS9ib2FyZC9hdDkxcm05MjAwZGsvZmxhc2guYyBiL2JvYXJkL2F0OTFybTkyMDBkay9mbGFzaC5jCmluZGV4IDRkNDUyNGYuLmViYmQ2ZjQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2F0OTFybTkyMDBkay9mbGFzaC5jCisrKyBiL2JvYXJkL2F0OTFybTkyMDBkay9mbGFzaC5jCkBAIC00MywxNCArNDMsMTQgQEAKIE9yZ0RlZiBPcmdBVDQ5QlYxNng0W10gPQogewogCXsgOCwgOCoxMDI0IH0sIC8qIDggKiA4a0J5dGVzIHNlY3RvcnMgKi8KLQl7IDIsIDMyKjEwMjQgfSwgLyogMiAqIDMya0J5dGVzIHNlY3RvcnMgKi8JCi0JeyAzMCwgNjQqMTAyNCB9IC8qIDMwICogNjRrQnl0ZXMgc2VjdG9ycyAqLwkKKwl7IDIsIDMyKjEwMjQgfSwgLyogMiAqIDMya0J5dGVzIHNlY3RvcnMgKi8KKwl7IDMwLCA2NCoxMDI0IH0gLyogMzAgKiA2NGtCeXRlcyBzZWN0b3JzICovCiB9OwogCiBPcmdEZWYgT3JnQVQ0OUJWMTZ4NEFbXSA9CiB7Ci0JeyA4LCA4KjEwMjQgfSwgLyogOCAqIDhrQnl0ZXMgc2VjdG9ycyAqLwkKLQl7IDMxLCA2NCoxMDI0IH0gLyogMzEgKiA2NGtCeXRlcyBzZWN0b3JzICovCQorCXsgOCwgOCoxMDI0IH0sIC8qIDggKiA4a0J5dGVzIHNlY3RvcnMgKi8KKwl7IDMxLCA2NCoxMDI0IH0gLyogMzEgKiA2NGtCeXRlcyBzZWN0b3JzICovCiB9OwogCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2F0OTFybTkyMDBkay91LWJvb3QubGRzIGIvYm9hcmQvYXQ5MXJtOTIwMGRrL3UtYm9vdC5sZHMKaW5kZXggMjQ0N2JjYS4uMTdhODViOCAxMDA2NDQKLS0tIGEvYm9hcmQvYXQ5MXJtOTIwMGRrL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvYXQ5MXJtOTIwMGRrL3UtYm9vdC5sZHMKQEAgLTI3LDI4ICsyNywzMiBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSAgICAgICAgLiA9IDB4MDAwMDAwMDA7CisJLiA9IDB4MDAwMDAwMDA7CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAkudGV4dCAgICAgIDoKIAl7CiAJICBjcHUvYXQ5MXJtOTIwMC9zdGFydC5vCSgudGV4dCkKIAkgICooLnRleHQpCiAJfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmRhdGEgOiB7ICooLmRhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5nb3QgOiB7ICooLmdvdCkgfQorCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKIAogCWFybWJvb3RfZW5kX2RhdGEgPSAuOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmJzcyA6IHsgKiguYnNzKSB9CisJLiA9IEFMSUdOKDQpOworCS5ic3MgOiB7ICooLmJzcykgfQogCiAJYXJtYm9vdF9lbmQgPSAuOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYXRjL01ha2VmaWxlIGIvYm9hcmQvYXRjL01ha2VmaWxlCmluZGV4IDM1Yjg0MjguLjdhMjAxNGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2F0Yy9NYWtlZmlsZQorKysgYi9ib2FyZC9hdGMvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2F0Yy9hdGMuYyBiL2JvYXJkL2F0Yy9hdGMuYwppbmRleCBlYTc0MTZhLi40MmFiY2RhIDEwMDY0NAotLS0gYS9ib2FyZC9hdGMvYXRjLmMKKysrIGIvYm9hcmQvYXRjL2F0Yy5jCkBAIC0yMDcsMTQgKzIwNywxNCBAQAogICogVVBNQiBpbml0aWFsaXphdGlvbiB0YWJsZQogICovCiAjZGVmaW5lCV9OT1RfVVNFRF8JMHhGRkZGRkZGRgotICAKKwogc3RhdGljIGNvbnN0IHVpbnQgcnRjX3RhYmxlW10gPQogewogCS8qCiAJICogU2luZ2xlIFJlYWQuIChPZmZzZXQgMCBpbiBVUE1BIFJBTSkKIAkgKi8KLQkweGZmZmVjMDAsIDB4ZmZmYWMwMCwgMHhmZmYyZDAwLCAweGZlZjI4MDAsIAotCTB4ZmFmMjA4MCwgMHhmYWYyMDgwLCAweGZmZjI0MDAsIDB4MWZmZjZjMDUsIC8qIGxhc3QgKi8JICAgIAorCTB4ZmZmZWMwMCwgMHhmZmZhYzAwLCAweGZmZjJkMDAsIDB4ZmVmMjgwMCwKKwkweGZhZjIwODAsIDB4ZmFmMjA4MCwgMHhmZmYyNDAwLCAweDFmZmY2YzA1LCAvKiBsYXN0ICovCiAJLyoKIAkgKiBCdXJzdCBSZWFkLiAoT2Zmc2V0IDggaW4gVVBNQSBSQU0pCiAJICovCkBAIC0yMjUsNyArMjI1LDcgQEAKIAkvKgogCSAqIFNpbmdsZSBXcml0ZS4gKE9mZnNldCAxOCBpbiBVUE1BIFJBTSkKIAkgKi8KLQkweGZmZmVjMDAsIDB4ZmZmYWMwMCwgMHhmZmYyZDAwLCAweGZlZjI4MDAsIAorCTB4ZmZmZWMwMCwgMHhmZmZhYzAwLCAweGZmZjJkMDAsIDB4ZmVmMjgwMCwKIAkweGZhZjIwODAsIDB4ZmFmMjA4MCwgMHhmYWYyNDAwLCAweDFmYmY2YzA1LCAvKiBsYXN0ICovCiAJLyoKIAkgKiBCdXJzdCBXcml0ZS4gKE9mZnNldCAyMCBpbiBVUE1BIFJBTSkKQEAgLTI0NCw4ICsyNDQsOCBAQAogCSAqIEV4Y2VwdGlvbi4gKE9mZnNldCAzYyBpbiBVUE1BIFJBTSkKIAkgKi8KIAlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAotfTsJCQkJCQkJCQkJCQkKLQkJCQkJCQkJCQkJCQkJCQkJCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIENoZWNrIEJvYXJkIElkZW50aXR5OgpAQCAtMzY2LDEzICszNjYsMTMgQEAKIHsKIAl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOwogCXZvbGF0aWxlIG1lbWN0bDgyNjBfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7Ci0JCisKIAl1cG1jb25maWcoVVBNQSwgKHVpbnQgKilydGNfdGFibGUsIHNpemVvZihydGNfdGFibGUpIC8gc2l6ZW9mKHVpbnQpKTsKLQltZW1jdGwtPm1lbWNfbWFtciA9IE14TVJfUkxGeF82WCB8IE14TVJfV0xGeF82WCB8IE14TVJfT1BfTk9STTsJCisJbWVtY3RsLT5tZW1jX21hbXIgPSBNeE1SX1JMRnhfNlggfCBNeE1SX1dMRnhfNlggfCBNeE1SX09QX05PUk07CiAKIAlyZXR1cm4gKDApOwogfQotCQkJCisKIGxvbmcgaW50IGluaXRkcmFtIChpbnQgYm9hcmRfdHlwZSkKIHsKIAl2b2xhdGlsZSBpbW1hcF90ICppbW1hcCA9IChpbW1hcF90ICopIENGR19JTU1SOwpkaWZmIC0tZ2l0IGEvYm9hcmQvYXRjL2ZsYXNoLmMgYi9ib2FyZC9hdGMvZmxhc2guYwppbmRleCA2ZDdiMzhiLi4yNmI3YzgwIDEwMDY0NAotLS0gYS9ib2FyZC9hdGMvZmxhc2guYworKysgYi9ib2FyZC9hdGMvZmxhc2guYwpAQCAtNzYsMTQgKzc2LDE0IEBACiAKIAkJbWVtc2V0KCZmbGFzaF9pbmZvW2ldLCAwLCBzaXplb2YoZmxhc2hfaW5mb190KSk7CiAKLQkJZmxhc2hfaW5mb1tpXS5zaXplID0gCisJCWZsYXNoX2luZm9baV0uc2l6ZSA9CiAJCQlmbGFzaF9nZXRfc2l6ZSgoRlBXICopZmxhc2hiYXNlLCAmZmxhc2hfaW5mb1tpXSk7CiAKIAkJaWYgKGZsYXNoX2luZm9baV0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewogCQkJcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rICVkIC0gU2l6ZSA9IDB4JTA4bHhcbiIsCiAJCQlpLCBmbGFzaF9pbmZvW2ldLnNpemUpOwogCQl9Ci0JCQorCiAJCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOwogCX0KIApAQCAtMTYzLDEzICsxNjMsMTMgQEAKIHsKIAlpbnQgaTsKIAlmbGFzaF9pbmZvX3QgKiBpbmZvOwotCQorCiAJZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkgKyspIHsKIAkJaW5mbyA9ICYgZmxhc2hfaW5mb1tpXTsKIAkJaWYgKGluZm8tPnN0YXJ0WzBdIDw9IGJhc2UgJiYgYmFzZSA8IGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSkKIAkJCWJyZWFrOwogCX0KLQkKKwogCXJldHVybiBpID09IENGR19NQVhfRkxBU0hfQkFOS1MgPyAwIDogaW5mbzsKIH0KIApAQCAtMjE2LDMyICsyMTYsMzIgQEAKIAljYXNlIEZMQVNIX0FNNjQwVToKIAkJZm10ID0gIjI5TFY2NDFEICg2NCBNYml0LCB1bmlmb3JtIHNlY3RvcnMpXG4iOwogCQlicmVhazsKLSAgICAgICAgY2FzZSBGTEFTSF8yOEY4MDBDM0I6Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGODAwQzNUOgorCWNhc2UgRkxBU0hfMjhGODAwQzNCOgorCWNhc2UgRkxBU0hfMjhGODAwQzNUOgogCQlmbXQgPSAiMjhGODAwQzMlcyAoOCBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfSU5URUw4MDBCOgogCWNhc2UgRkxBU0hfSU5URUw4MDBUOgogCQlmbXQgPSAiMjhGODAwQjMlcyAoOCBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwotICAgICAgICBjYXNlIEZMQVNIXzI4RjE2MEMzQjoKLSAgICAgICAgY2FzZSBGTEFTSF8yOEYxNjBDM1Q6CisJY2FzZSBGTEFTSF8yOEYxNjBDM0I6CisJY2FzZSBGTEFTSF8yOEYxNjBDM1Q6CiAJCWZtdCA9ICIyOEYxNjBDMyVzICgxNiBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfSU5URUwxNjBCOgogCWNhc2UgRkxBU0hfSU5URUwxNjBUOgogCQlmbXQgPSAiMjhGMTYwQjMlcyAoMTYgTWJpdCwgJXMpXG4iOwogCQlicmVhazsKLSAgICAgICAgY2FzZSBGTEFTSF8yOEYzMjBDM0I6Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGMzIwQzNUOgorCWNhc2UgRkxBU0hfMjhGMzIwQzNCOgorCWNhc2UgRkxBU0hfMjhGMzIwQzNUOgogCQlmbXQgPSAiMjhGMzIwQzMlcyAoMzIgTWJpdCwgJXMpXG4iOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0lOVEVMMzIwQjoKIAljYXNlIEZMQVNIX0lOVEVMMzIwVDoKIAkJZm10ID0gIjI4RjMyMEIzJXMgKDMyIE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGNjQwQzNCOgotICAgICAgICBjYXNlIEZMQVNIXzI4RjY0MEMzVDoKKwljYXNlIEZMQVNIXzI4RjY0MEMzQjoKKwljYXNlIEZMQVNIXzI4RjY0MEMzVDoKIAkJZm10ID0gIjI4RjY0MEMzJXMgKDY0IE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9JTlRFTDY0MEI6CmRpZmYgLS1naXQgYS9ib2FyZC9hdGMvdS1ib290LmxkcyBiL2JvYXJkL2F0Yy91LWJvb3QubGRzCmluZGV4IDlkNTZmMTMuLjdhYzI5YTAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2F0Yy91LWJvb3QubGRzCisrKyBiL2JvYXJkL2F0Yy91LWJvb3QubGRzCkBAIC05NCw2ICs5NCwxMCBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTExNiw0ICsxMjAsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9ibXcvTWFrZWZpbGUgYi9ib2FyZC9ibXcvTWFrZWZpbGUKaW5kZXggNDZmZTc5MS4uNjIxNjQwYiAxMDA2NDQKLS0tIGEvYm9hcmQvYm13L01ha2VmaWxlCisrKyBiL2JvYXJkL2Jtdy9NYWtlZmlsZQpAQCAtMzEsNyArMzEsNyBAQAogU09CSlMJPSBlYXJseV9pbml0Lm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2Jtdy9SRUFETUUgYi9ib2FyZC9ibXcvUkVBRE1FCmluZGV4IDU1ZWY1NmUuLjcwYmM4MTMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Jtdy9SRUFETUUKKysrIGIvYm9hcmQvYm13L1JFQURNRQpAQCAtMjAsMzkgKzIwLDM5IEBACiBvbmJvYXJkIHRoZSBwcm9jZXNzb3IgbW9kdWxlIGFyZSBsaXN0ZWQgYnJpZWZseSBiZWxvdzoKIAogMHgwMDAwMDAwMCAtIDB4NDAwMDAwMDAgLSA2NE1CIFNEUkFNIFNJTU0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgKFVucmVnaXN0ZXJlZCBQQy0xMDAgU0RSQU0gRElNTSBNb2R1bGUpCisJCQkgIChVbnJlZ2lzdGVyZWQgUEMtMTAwIFNEUkFNIERJTU0gTW9kdWxlKQogCiAweEZGMDAwMDAwIC0gMHhGRjAwMUZGRiAtIE0tU3lzdGVtcyBEaXNrT25DaGlwIChUTSkgMjAwMAotICAgICAgICAgICAgICAgICAgICAgICAgICBUU09QIDE2TUIgKE1EMjIxMS1EMTYtVjMpCisJCQkgIFRTT1AgMTZNQiAoTUQyMjExLUQxNi1WMykKIAogMHg3MDAwMDAwMCAtIDB4NzAwMDFGRkYgLSBNLVN5c3RlbXMgRGlza09uQ2hpcCAoVE0pIDIwMDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRElQMzIgKFNvY2tldGVkIDE2TUIgLSAxR0IgKSAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IHRoaXMgaXMgbm90IHBvcHVsYXRlZCBvbiBhbGwgc3lzdGVtcy4KKwkJCSAgRElQMzIgKFNvY2tldGVkIDE2TUIgLSAxR0IgKSAqCisJCQkgIE5PVEU6IHRoaXMgaXMgbm90IHBvcHVsYXRlZCBvbiBhbGwgc3lzdGVtcy4KIAogMHg3YzAwMDAwMCAtIDB4N2MwMDAwMDAgLSBSZXNldCBSZWdpc3RlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAoV3JpdGUgMCB0byByZXNldCkKKwkJCSAgKFdyaXRlIDAgdG8gcmVzZXQpCiAKIDB4N2MwMDAwMDEgLSAweDdjMDAwMDAxIC0gU3lzdGVtIExFRAotICAgICAgICAgICAgICAgICAgICAgICAgICAoQ2xlYXIgQml0IDcgdG8gdHVybiBvbiwgc2V0IHRvIHNodXQgb2ZmKQorCQkJICAoQ2xlYXIgQml0IDcgdG8gdHVybiBvbiwgc2V0IHRvIHNodXQgb2ZmKQogCiAweDdjMDAwMDAyIC0gMHg3YzAwMDAwMiAtIE00OFQ1OSBXYXRjaGRvZyBJUlEzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChDbGVhciBiaXQgNyB0byByZXNldCwgc2V0IHRvIGFzc2VydCBJUlEzKQorCQkJICAoQ2xlYXIgYml0IDcgdG8gcmVzZXQsIHNldCB0byBhc3NlcnQgSVJRMykKIAogMHg3YzAwMDAwMyAtIDB4N2MwMDAwMDMgLSBNNDhUNTkgV3JpdGUtUHJvdGVjdCBSZWdpc3RlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAoQ2xlYXIgYml0IDcgdG8gbWFrZSBSL1csIHNldCB0byBtYWtlIFIvTykKKwkJCSAgKENsZWFyIGJpdCA3IHRvIG1ha2UgUi9XLCBzZXQgdG8gbWFrZSBSL08pCiAKIDB4N2MwMDIwMDAgLSAweDdjMDAyMDAzIC0gSW5maW5lb24gT1NSQU0gRExSMjQxNiA0IENoYXJhY3RlcgotICAgICAgICAgICAgICAgICAgICAgICAgICA1eDcgRG90IE1hdHJpeCBBbHBoYW51bWVyaWMgRGlzcGxheQotICAgICAgICAgICAgICAgICAgICAgICAgICAoRWFjaCBieXRlIHNldHMgdGhlIGFwcHJvcHJpYXRlIGNoYXJhY3RlcikKKwkJCSAgNXg3IERvdCBNYXRyaXggQWxwaGFudW1lcmljIERpc3BsYXkKKwkJCSAgKEVhY2ggYnl0ZSBzZXRzIHRoZSBhcHByb3ByaWF0ZSBjaGFyYWN0ZXIpCiAKIDB4N2MwMDQwMDAgLSAweDdjMDA1RkYwIC0gU0dTLVRIT01TT04gTTQ4VDU5WSA4SyBOVlJBTS9SVEMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlZSQU0gTWVtb3J5IFJlZ2lvbgorCQkJICBOVlJBTSBNZW1vcnkgUmVnaW9uCiAKIDB4N2MwMDVGRjAgLSAweDdjMDA1RkZGIC0gU0dTLVRIT01TT04gTTQ4VDU5WSA4SyBOVlJBTS9SVEMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbHRpbWUgQ2xvY2sgUmVnaXN0ZXJzCisJCQkgIFJlYWx0aW1lIENsb2NrIFJlZ2lzdGVycwogCiAweEZGRjAwMDAwIC0gMHhGRkY4MDAwMCAtIDUxMksgUExDQzMyIEJvb3RSb20KLSAgICAgICAgICAgICAgICAgICAgICAgICAgKEFNRCBBTTI5RjA0MCwgU1QgMjlXMDQwQikKKwkJCSAgKEFNRCBBTTI5RjA0MCwgU1QgMjlXMDQwQikKIAogMHhGRkYwMDEwMCAtICAgICAgICAgICAgICBTeXN0ZW0gUmVzZXQgVmVjdG9yCiAKQEAgLTEzMSw3ICsxMzEsNiBAQAogLSBET0MgU3VwcG9ydCAtICh1bmRlcndheSkKIAogCi0KIFUtQm9vdCAxLjIuMCAoQXVnICA2IDIwMDIgLSAxNzo0NDo0OCkKIAogQ1BVOiAgIE1QQzgyNDUgUmV2aXNpb24gMTYuMjAgYXQgMjY0IE1IejogMTYga0IgSS1DYWNoZSAxNiBrQiBELUNhY2hlCkBAIC0xNjcsMTUgKzE2NiwxMCBAQAogPT5ib290CiAKIAotCi0KLQotCi0KIERldlRvb2xzCiA9PT09PT09PQogRUxESwotICAgICAgICBERU5YIEVtYmVkZGVkIExpbnV4IERldmVsb3BtZW50IEtpdAorCURFTlggRW1iZWRkZWQgTGludXggRGV2ZWxvcG1lbnQgS2l0CiAKIFJPTSBFbXVsYXRvcgogCUdyYW1tYXIgRW5naW5lIFBST01JQ0UgUDExNjAtOTAtQUkyMUUgKDJNQng4Yml0LCA5MG5zIGFjY2VzcyB0aW1lKQpAQCAtMTg3LDcgKzE4MSw2IEBACiAJV1JTL0VTVCBWaXNpb25JQ0UtSUkgKFBQQzgyNDApCiAKIAotCiA9PnJlc2V0CiAKIApAQCAtMjE2LDggKzIwOSw4IEBACiBGaWxlbmFtZSAndm1saW51eC5pbWcnLgogTG9hZCBhZGRyZXNzOiAweDEwMDAwMAogTG9hZGluZzogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1QgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBkb25lCiBCeXRlcyB0cmFuc2ZlcnJlZCA9IDc3NzE5OSAoYmRiZWYgaGV4KQogCkBAIC0zMTcsNyArMzEwLDYgQEAKIE1QQzgyNDUvQk1XCiAKIAotCiBzd2l0Y2gtMiBsb2dpbjogcm9vdAogUGFzc3dvcmQ6CiBQQU1fdW5peFs0OV06IChsb2dpbikgc2Vzc2lvbiBvcGVuZWQgZm9yIHVzZXIgcm9vdCBieSBMT0dJTih1aWQ9MCkKQEAgLTMyOCw3ICszMjAsNiBAQAogTVBDODI0NS9CTVcKIAogCi0KIGxvZ2luWzQ5XTogUk9PVCBMT0dJTiBvbiBgY29uc29sZScKIAogcm9vdEBzd2l0Y2gtMjp+IyBjYXQgL3Byb2MvY3B1aW5mbwpkaWZmIC0tZ2l0IGEvYm9hcmQvYm13L2Jtdy5jIGIvYm9hcmQvYm13L2Jtdy5jCmluZGV4IDI2ODU2NjIuLmYyZDMzZmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Jtdy9ibXcuYworKysgYi9ib2FyZC9ibXcvYm13LmMKQEAgLTk0LDkgKzk0LDYgQEAKIH0KIAogCi0KLQotCiAvKgogICogSW5pdGlhbGl6ZSBQQ0kgRGV2aWNlcywgcmVwb3J0IGRldmljZXMgZm91bmQuCiAgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2Jtdy9ibXcuaCBiL2JvYXJkL2Jtdy9ibXcuaAppbmRleCA2Yjc1NzFjLi5kZDk3NTY5IDEwMDY0NAotLS0gYS9ib2FyZC9ibXcvYm13LmgKKysrIGIvYm9hcmQvYm13L2Jtdy5oCkBAIC00NiwxMyArNDYsMTMgQEAKICNkZWZpbmUgTEVEX1JFR19CQVNFCQkoWFJPTV9CQVNFX0FERFIgfCAweDIwMDApCiAjZGVmaW5lIFRPRF9CQVNFCQkoWFJPTV9CQVNFX0FERFIgfCAweDQwMDApCiAjZGVmaW5lIExFRF9SRUcoeCkgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMRURfUkVHX0JBU0UgKyAoeCkpKQorCQkJCSAgKExFRF9SRUdfQkFTRSArICh4KSkpCiAjZGVmaW5lIFhST01fREVWX1NJWkUJCTB4MDAwMDYwMDAKIAogI2RlZmluZSBFTkVUX0RFVl9CQVNFCQkweDgwMDAwMDAwCiAKICNkZWZpbmUgUExEX1JFRyhvZmYpCQkoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQTERfUkVHX0JBU0UgKyAob2ZmKSkpCisJCQkJICAoUExEX1JFR19CQVNFICsgKG9mZikpKQogCiAjZGVmaW5lIFBMRF9SRVZJRF9CMQkJMHg3ZgkvKiBGaXggbWUgKi8KICNkZWZpbmUgUExEX1JFVklEX0IyCQkweDAxCS8qIEZpeCBtZSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvYm13L2NvbmZpZy5tayBiL2JvYXJkL2Jtdy9jb25maWcubWsKaW5kZXggN2ZhY2FkZi4uZjk5MTU0OSAxMDA2NDQKLS0tIGEvYm9hcmQvYm13L2NvbmZpZy5taworKysgYi9ib2FyZC9ibXcvY29uZmlnLm1rCkBAIC0yOCw1ICsyOCw1IEBACiBURVhUX0JBU0UgPSAweEZGRjAwMDAwCiAjIE5PVEU6IFRoZSBmbGFncyBiZWxvdyBhZmZlY3QgaG93IHRoZSBCQ001NzB4IGRyaXZlciBpcyBjb21waWxlZAogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURFTUJFRERFRCAtREJJR19FTkRJQU5fSE9TVCAtRElOQ0xVREVfNTcwMV9BWF9GSVg9MVwKLSAgICAgICAgICAgICAgICAgICAgIC1EREJHPTAgLURUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UPTI1NlwKLSAgICAgICAgICAgICAgICAgICAgIC1EVEVYVF9CQVNFPSQoVEVYVF9CQVNFKQorCQkgICAgIC1EREJHPTAgLURUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UPTI1NlwKKwkJICAgICAtRFRFWFRfQkFTRT0kKFRFWFRfQkFTRSkKZGlmZiAtLWdpdCBhL2JvYXJkL2Jtdy9lYXJseV9pbml0LlMgYi9ib2FyZC9ibXcvZWFybHlfaW5pdC5TCmluZGV4IGVjMjBhNjcuLmU2NDAwYzMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Jtdy9lYXJseV9pbml0LlMKKysrIGIvYm9hcmQvYm13L2Vhcmx5X2luaXQuUwpAQCAtMTYsNyArMTYsNyBAQAogCS5nbG9iYWwJaW9tbXVfc2V0dXAKIAkvKiBJbml0aWFsaXplIElPL01NVSBtYXBwaW5ncyB2aWEgQkFUIG1ldGhvZCBDaC4gNywKIAkgKiBQUEMgUHJvZ3JhbW1pbmcgUmVmZXJlbmNlCi0gICAgICAgICAqLworCSAqLwogaW9tbXVfc2V0dXA6CiAKIC8qIGluaXRpYWxpemUgdGhlIEJBVCByZWdpc3RlcnMgKFNQUnMgNTI4IC0gNTQzICovCkBAIC02NCw3ICs2NCw3IEBACiAgICBCQVQgbWFya2VkIHZhbGlkIHRoYXQgaXMgaW4gYW4gdW5rbm93biBvciB0cmFuc2llbnQgc3RhdGUKICovCiAKLSAgICAgICAgYWRkaXMgICByNSwwLDB4MDAwMAorCWFkZGlzICAgcjUsMCwweDAwMDAKIAltdGliYXQwdShyNSkKIAltdGliYXQwbChyNSkKIAltdGliYXQxdShyNSkKQEAgLTgxLDEwNiArODEsMTA2IEBACiAJbXRkYmF0MmwocjUpCiAJbXRkYmF0M3UocjUpCiAJbXRkYmF0M2wocjUpCi0gICAgICAgIGlzeW5jCisJaXN5bmMKIAogLyoKICAqICBTZXQgdXAgSS9EIEJBVDAKICAqLwotICAgICAgICBsaXMgICAgIHI0LCBDRkdfREJBVDBMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19EQkFUMExAbAotICAgICAgICBsaXMgICAgIHIzLCBDRkdfREJBVDBVQGgKLSAgICAgICAgb3JpICAgICByMywgcjMsIENGR19EQkFUMFVAbAorCWxpcyAgICAgcjQsIENGR19EQkFUMExAaAorCW9yaSAgICAgcjQsIHI0LCBDRkdfREJBVDBMQGwKKwlsaXMgICAgIHIzLCBDRkdfREJBVDBVQGgKKwlvcmkgICAgIHIzLCByMywgQ0ZHX0RCQVQwVUBsCiAKLSAgICAgICAgbXRkYmF0MGwocjQpCi0gICAgICAgIGlzeW5jCi0gICAgICAgIG10ZGJhdDB1KHIzKQotICAgICAgICBpc3luYwotICAgICAgICBzeW5jCisJbXRkYmF0MGwocjQpCisJaXN5bmMKKwltdGRiYXQwdShyMykKKwlpc3luYworCXN5bmMKIAotICAgICAgICBsaXMgICAgIHI0LCBDRkdfSUJBVDBMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19JQkFUMExAbAotICAgICAgICBsaXMgICAgIHIzLCBDRkdfSUJBVDBVQGgKLSAgICAgICAgb3JpICAgICByMywgcjMsIENGR19JQkFUMFVAbAorCWxpcyAgICAgcjQsIENGR19JQkFUMExAaAorCW9yaSAgICAgcjQsIHI0LCBDRkdfSUJBVDBMQGwKKwlsaXMgICAgIHIzLCBDRkdfSUJBVDBVQGgKKwlvcmkgICAgIHIzLCByMywgQ0ZHX0lCQVQwVUBsCiAKLSAgICAgICAgaXN5bmMKLSAgICAgICAgbXRpYmF0MGwocjQpCi0gICAgICAgIGlzeW5jCisJaXN5bmMKKwltdGliYXQwbChyNCkKKwlpc3luYwogCW10aWJhdDB1KHIzKQotICAgICAgICBpc3luYworCWlzeW5jCiAKIC8qCiAgKiAgU2V0IHVwIEkvRCBCQVQxCiAgKi8KLSAgICAgICAgbGlzICAgICByNCwgQ0ZHX0lCQVQxTEBoCi0gICAgICAgIG9yaSAgICAgcjQsIHI0LCBDRkdfSUJBVDFMQGwKLSAgICAgICAgbGlzICAgICByMywgQ0ZHX0lCQVQxVUBoCi0gICAgICAgIG9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDFVQGwKKwlsaXMgICAgIHI0LCBDRkdfSUJBVDFMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0lCQVQxTEBsCisJbGlzICAgICByMywgQ0ZHX0lCQVQxVUBoCisJb3JpICAgICByMywgcjMsIENGR19JQkFUMVVAbAogCi0gICAgICAgIGlzeW5jCi0gICAgICAgIG10aWJhdDFsKHI0KQotICAgICAgICBpc3luYwotICAgICAgICBtdGliYXQxdShyMykKLSAgICAgICAgaXN5bmMKLSAgICAgICAgbXRkYmF0MWwocjQpCi0gICAgICAgIGlzeW5jCi0gICAgICAgIG10ZGJhdDF1KHIzKQotICAgICAgICBpc3luYwotICAgICAgICBzeW5jCisJaXN5bmMKKwltdGliYXQxbChyNCkKKwlpc3luYworCW10aWJhdDF1KHIzKQorCWlzeW5jCisJbXRkYmF0MWwocjQpCisJaXN5bmMKKwltdGRiYXQxdShyMykKKwlpc3luYworCXN5bmMKIAogLyoKICAqICBTZXQgdXAgSS9EIEJBVDIKICAqLwotICAgICAgICBsaXMgICAgIHI0LCBDRkdfSUJBVDJMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19JQkFUMkxAbAotICAgICAgICBsaXMgICAgIHIzLCBDRkdfSUJBVDJVQGgKLSAgICAgICAgb3JpICAgICByMywgcjMsIENGR19JQkFUMlVAbAorCWxpcyAgICAgcjQsIENGR19JQkFUMkxAaAorCW9yaSAgICAgcjQsIHI0LCBDRkdfSUJBVDJMQGwKKwlsaXMgICAgIHIzLCBDRkdfSUJBVDJVQGgKKwlvcmkgICAgIHIzLCByMywgQ0ZHX0lCQVQyVUBsCiAKLSAgICAgICAgaXN5bmMKLSAgICAgICAgbXRpYmF0MmwocjQpCi0gICAgICAgIGlzeW5jCi0gICAgICAgIG10aWJhdDJ1KHIzKQotICAgICAgICBpc3luYwotICAgICAgICBtdGRiYXQybChyNCkKLSAgICAgICAgaXN5bmMKLSAgICAgICAgbXRkYmF0MnUocjMpCi0gICAgICAgIGlzeW5jCi0gICAgICAgIHN5bmMKKwlpc3luYworCW10aWJhdDJsKHI0KQorCWlzeW5jCisJbXRpYmF0MnUocjMpCisJaXN5bmMKKwltdGRiYXQybChyNCkKKwlpc3luYworCW10ZGJhdDJ1KHIzKQorCWlzeW5jCisJc3luYwogCiAvKgogICogIFNldHVwIEkvRCBCQVQzCiAgKi8KLSAgICAgICAgbGlzICAgICByNCwgQ0ZHX0lCQVQzTEBoCi0gICAgICAgIG9yaSAgICAgcjQsIHI0LCBDRkdfSUJBVDNMQGwKLSAgICAgICAgbGlzICAgICByMywgQ0ZHX0lCQVQzVUBoCi0gICAgICAgIG9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDNVQGwKKwlsaXMgICAgIHI0LCBDRkdfSUJBVDNMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0lCQVQzTEBsCisJbGlzICAgICByMywgQ0ZHX0lCQVQzVUBoCisJb3JpICAgICByMywgcjMsIENGR19JQkFUM1VAbAogCi0gICAgICAgIGlzeW5jCi0gICAgICAgIG10aWJhdDNsKHI0KQotICAgICAgICBpc3luYwotICAgICAgICBtdGliYXQzdShyMykKLSAgICAgICAgaXN5bmMKLSAgICAgICAgbXRkYmF0M2wocjQpCi0gICAgICAgIGlzeW5jCi0gICAgICAgIG10ZGJhdDN1KHIzKQotICAgICAgICBpc3luYwotICAgICAgICBzeW5jCisJaXN5bmMKKwltdGliYXQzbChyNCkKKwlpc3luYworCW10aWJhdDN1KHIzKQorCWlzeW5jCisJbXRkYmF0M2wocjQpCisJaXN5bmMKKwltdGRiYXQzdShyMykKKwlpc3luYworCXN5bmMKIAogCiAvKgogICogIEludmFsaWRhdGUgYWxsIDY0IFRMQidzCiAgKi8KLSAgICAgICAgbGlzICAgICByMywgMAotICAgICAgICBtdGN0ciAgIHIzCi0gICAgICAgIGxpcyAgICAgcjUsIDQKKwlsaXMgICAgIHIzLCAwCisJbXRjdHIgICByMworCWxpcyAgICAgcjUsIDQKIAogdGxibHA6Ci0gICAgICAgIHRsYmllICAgcjMKLSAgICAgICAgc3luYwotICAgICAgICBhZGRpICAgIHIzLCByMywgMHgxMDAwCi0gICAgICAgIGNtcGx3ICAgcjMsIHI1Ci0gICAgICAgIGJsdCAgICAgdGxibHAKKwl0bGJpZSAgIHIzCisJc3luYworCWFkZGkgICAgcjMsIHIzLCAweDEwMDAKKwljbXBsdyAgIHIzLCByNQorCWJsdCAgICAgdGxibHAKIAotICAgICAgICBzeW5jCisJc3luYwogCiAvKgogICogIEVuYWJsZSBEYXRhIFRyYW5zbGF0aW9uCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlpc3luYwogCXN5bmMKIAotICAgICAgICBibHIKKwlibHIKIAogCiAjaWZkZWYgVVNFX1YyX0lOSVQKQEAgLTIxMyw4ICsyMTMsOCBAQAogLyogTVBDODI0NS9CTVcgQ1BDSSBTeXN0ZW0gSW5pdAogICogSmltbXkgQmxhaXIsIEJyb2FkY29tIENvcnAsIDIwMDIuCiAgKi8KLSAgICAgICAgbWZsciAgICByMTEKLSAJLyogWmVyby1vdXQgcmVnaXN0ZXJzICovCisJbWZsciAgICByMTEKKwkvKiBaZXJvLW91dCByZWdpc3RlcnMgKi8KIAogCWFkZGlzCXIwLHIwLDAKIAltdHNwcglTUFJHMCxyMApAQCAtMjQ0LDcgKzI0NCw3IEBACiAJLyogU2V0IE1QVS9NU1IgdG8gYSBrbm93biBzdGF0ZS4gVHVybiBvZmYgRlAgKi8KIAogI2lmIDEJLyogVHVybiBvZmYgZmxvYXRpbmcgcG9pbnQgKHJlbW92ZSB0byBrZWVwIEZQIG9uKSAqLwotICAgICAgICBhbmRpLglyMywgcjMsIDAKKwlhbmRpLglyMywgcjMsIDAKIAlzeW5jCiAJbXRtc3IgCXIzCiAJaXN5bmMKQEAgLTM2OCwxMCArMzY4LDEwIEBACiAJcmx3aW5tCXIzLCByNCwgMCwgMjEsIDE5CS8qIGNsZWFyIHRoZSBJQ0ZJIGJpdCAqLwogCiAJLyoKLSAgICAgICAgICogVGhlIHNldHRpbmcgb2YgdGhlIGluc3RydWN0aW9uIGNhY2hlIGVuYWJsZSAoSUNFKSBiaXQgbXVzdCBiZQotICAgICAgICAgKiBwcmVjZWRlZCBieSBhbiBpc3luYyBpbnN0cnVjdGlvbiB0byBwcmV2ZW50IHRoZSBjYWNoZSBmcm9tIGJlaW5nCi0gICAgICAgICAqIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2hpbGUgYW4gaW5zdHJ1Y3Rpb24gYWNjZXNzIGlzIGluIHByb2dyZXNzLgotICAgICAgICAgKi8KKwkgKiBUaGUgc2V0dGluZyBvZiB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgZW5hYmxlIChJQ0UpIGJpdCBtdXN0IGJlCisJICogcHJlY2VkZWQgYnkgYW4gaXN5bmMgaW5zdHJ1Y3Rpb24gdG8gcHJldmVudCB0aGUgY2FjaGUgZnJvbSBiZWluZworCSAqIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2hpbGUgYW4gaW5zdHJ1Y3Rpb24gYWNjZXNzIGlzIGluIHByb2dyZXNzLgorCSAqLwogCWlzeW5jCiB3cml0ZVJlZzQ6CiAJbXRzcHIJSElEMCwgcjQJCS8qIEVuYWJsZSBJbnN0ciBDYWNoZSAmIEludmFsIGNhY2hlICovCkBAIC0zOTcsMTMgKzM5NywxMyBAQAogCWNtcAkwLDAscjMscjcKIAliZXEJY3IwLCBYNF9LQUhMVUFfU1RBUlQKIAotICAgICAgICAvKiBJdCdzIG5vdCBhbiA4MjQwLCBpcyBpdCBhbiA4MjQ1PyAqLworCS8qIEl0J3Mgbm90IGFuIDgyNDAsIGlzIGl0IGFuIDgyNDU/ICovCiAKIAlMT0FEUFRSIChyNywgS0FITFVBMl9JRCkJLyogS2FobHVhIFBDSSBjb250cm9sbGVyIElEICovCiAJY21wCTAsMCxyMyxyNwogCWJlcQljcjAsIFg0X0tBSExVQV9TVEFSVAogCi0gICAgICAgIC8qIFNhdmUgdGhlIFBDSSBjb250cm9sbGVyIHR5cGUgaW4gcjcgKi8KKwkvKiBTYXZlIHRoZSBQQ0kgY29udHJvbGxlciB0eXBlIGluIHI3ICovCiAJbXIJcjcsIHIzCiAKIAlMT0FEUFRSIChyNSwgUFJFUF9SRUdfQUREUikKQEAgLTQzMywzMyArNDMzLDMzIEBACiAKIAlMT0FEUFRSIChyMywgUFJPQ19JTlQyX0FEUikJLyogUHJvY2Vzc29yIEkvRiBDb25maWcgMiByZWcuICovCiAJc3R3YnJ4CXIzLDAscjUKLSAgICAgICAgbGlzCXI0LCAweDIwMDAJCS8qIEZsdXNoIFBDSSBjb25maWcgd3JpdGVzICovCisJbGlzCXI0LCAweDIwMDAJCS8qIEZsdXNoIFBDSSBjb25maWcgd3JpdGVzICovCiAJc3R3YnJ4CXI0LDAscjYKIAogCUxPQURQVFIgKHI5LCBLQUhMVUEyX0lEKQotICAgICAgICBjbXBsCTAsIDAsIHI3LCByOQotICAgICAgICBibmUgICAgIEwxbm90ODI0NQorCWNtcGwJMCwgMCwgcjcsIHI5CisJYm5lICAgICBMMW5vdDgyNDUKIAotICAgICAgICAvKiBNSU9DUjEgLS0gdHVybiBvbiBiaXQgZm9yIERMTCBkZWxheSAqLworCS8qIE1JT0NSMSAtLSB0dXJuIG9uIGJpdCBmb3IgRExMIGRlbGF5ICovCiAKIAlMT0FEUFRSIChyMywgTUlPQ1IxX0FEUl9YKQogCXN0d2JyeAlyMywwLHI1Ci0gICAgICAgIGxpICAgICAgcjQsIDB4MDQKKwlsaSAgICAgIHI0LCAweDA0CiAJc3RiCXI0LCBNSU9DUjFfU0hJRlQocjYpCiAKLSAgICAgICAgLyogRm9yIHRoZSBNUEM4MjQ1LCBzZXQgcmVnaXN0ZXIgNzcgdG8gJTAwMTAwMDAwIChzZWUgRXJyYXRhICMxNSkgKi8KLSAgICAgICAgLyogU0RSQU1fQ0xLX0RFTCAoMHg3NykqLworCS8qIEZvciB0aGUgTVBDODI0NSwgc2V0IHJlZ2lzdGVyIDc3IHRvICUwMDEwMDAwMCAoc2VlIEVycmF0YSAjMTUpICovCisJLyogU0RSQU1fQ0xLX0RFTCAoMHg3NykqLwogCiAJTE9BRFBUUiAocjMsIE1JT0NSMl9BRFJfWCkKIAlzdHdicngJcjMsMCxyNQotICAgICAgICBsaSAgICAgIHI0LCAweDEwCisJbGkgICAgICByNCwgMHgxMAogCXN0YglyNCwgTUlPQ1IyX1NISUZUKHI2KQogCi0gICAgICAgIC8qIFBNQ1IyIC0tIHNldCBQQ0kgaG9sZCBkZWxheSB0byA8MTA+YiBmb3IgMzMgTUh6ICovCisJLyogUE1DUjIgLS0gc2V0IFBDSSBob2xkIGRlbGF5IHRvIDwxMD5iIGZvciAzMyBNSHogKi8KIAogCUxPQURQVFIgKHIzLCBQTUNSMl9BRFJfWCkKIAlzdHdicngJcjMsMCxyNQotICAgICAgICBsaSAgICAgIHI0LCAweDIwCisJbGkgICAgICByNCwgMHgyMAogCXN0YglyNCwgUE1DUjJfU0hJRlQocjYpCiAKIAkvKiBJbml0aWFsaXplIEVVTUJCQVIgZWFybHkgc2luY2UgODI0NSBoYXMgaW50ZXJuYWwgVUFSVCBpbiBFVU1CICovCkBAIC00NzEsMjEgKzQ3MSwyMSBAQAogCiBMMW5vdDgyNDU6CiAKLSAgICAgICAgLyogVG9nZ2xlIHRoZSBETEwgcmVzZXQgYml0IGluIEFNQk9SICovCisJLyogVG9nZ2xlIHRoZSBETEwgcmVzZXQgYml0IGluIEFNQk9SICovCiAKIAlMT0FEUFRSIChyMywgQU1CT1IpCiAJc3R3YnJ4CXIzLDAscjUKIAlsYnoJcjQsIDAocjYpCiAKLSAgICAgICAgYW5kaS4gICByNCwgcjQsIDB4ZGYKKwlhbmRpLiAgIHI0LCByNCwgMHhkZgogCXN0YglyNCwgMChyNikJCS8qIENsZWFyIERMTF9SRVNFVCAqLwotICAgICAgICBzeW5jCisJc3luYwogCi0gICAgICAgIG9yaSAgICAgcjQsIHI0LCAweDIwCQkvKiBTZXQgRExMX1JFU0VUICovCisJb3JpICAgICByNCwgcjQsIDB4MjAJCS8qIFNldCBETExfUkVTRVQgKi8KIAlzdGIJcjQsIDAocjYpCi0gICAgICAgIHN5bmMKKwlzeW5jCiAKLSAgICAgICAgYW5kaS4gICByNCwgcjQsIDB4ZGYKKwlhbmRpLiAgIHI0LCByNCwgMHhkZgogCXN0YglyNCwgMChyNikJCS8qIENsZWFyIERMTF9SRVNFVCAqLwogCiAKQEAgLTUzMywxMCArNTMzLDEwIEBACiAJCU1DMV9NRU1HTyA8PCAxOSB8IE1DMV9TUkVOIDw8IDE4IHwgXAogCQlNQzFfUkFNX1RZUEUgPDwgMTcgfCBNQzFfUENLRU4gPDwgMTYgKQogCWxpCXIzLCBNQzFfQkFOS0JJVFMKLSAgICAgICAgY21wbAkwLCAwLCByNywgcjkJCS8qIENoZWNrIGZvciBLYWhsdWEyICovCi0gICAgICAgIGJuZSAgICAgQmFua0JpdHNBZGQKLSAgICAgICAgY21wbGkgICAwLCAwLCByMywgMHg1NTU1Ci0gICAgICAgIGJlcSAgICAgSzJCYW5rQml0c0hhY2sJCS8qIE9uIDgyNDUsIDU1NTUgPT0+IDAgKi8KKwljbXBsCTAsIDAsIHI3LCByOQkJLyogQ2hlY2sgZm9yIEthaGx1YTIgKi8KKwlibmUgICAgIEJhbmtCaXRzQWRkCisJY21wbGkgICAwLCAwLCByMywgMHg1NTU1CisJYmVxICAgICBLMkJhbmtCaXRzSGFjawkJLyogT24gODI0NSwgNTU1NSA9PT4gMCAqLwogQmFua0JpdHNBZGQ6CiAJb3JpCXI0LCByMywgMAogSzJCYW5rQml0c0hhY2s6CkBAIC01NjksOSArNTY5LDkgQEAKIAkJTUMyX0lOTFJEX1BBUkVDQ19DSEtfRU4gPDwgMTggfCBcCiAJCU1DMl9FQ0NfRU4gPDwgMTcgfCBNQzJfRURPIDw8IDE2IHwgXAogCQlNQzJfUkVGSU5UIDw8IDIgfCBNQzJfUlNWX1BHIDw8IDEgfCBNQzJfUk1XX1BBUikKLSAgICAgICAgY21wbAkwLCAwLCByNywgcjkJCS8qIENoZWNrIGZvciBLYWhsdWEyICovCi0gICAgICAgIGJuZSAgICAgbm90SzIKLSAgICAgICAgLyogY2xlYXIgS2FobHVhMiByZXNlcnZlZCBiaXRzICovCisJY21wbAkwLCAwLCByNywgcjkJCS8qIENoZWNrIGZvciBLYWhsdWEyICovCisJYm5lICAgICBub3RLMgorCS8qIGNsZWFyIEthaGx1YTIgcmVzZXJ2ZWQgYml0cyAqLwogCUxPQURQVFIgKHIzLCAweGZmZmNmZmZmKQogCWFuZAlyNCwgcjQsIHIzCiBub3RLMjoKQEAgLTU5OSw5ICs1OTksOSBAQAogCQlNQzNfUkRMQVQgPDwgMjAgfCBNQzNfQ1BYIDw8IDE5IHwgXAogCQlNQzNfUkFTNlAgPDwgMTUgfCBNQzNfQ0FTNSA8PCAxMiB8IE1DM19DUDQgPDwgOSB8IFwKIAkJTUMzX0NBUzMgPDwgNiB8IE1DM19SQ0QyIDw8IDMgfCBNQzNfUlAxKQotICAgICAgICBjbXBsCTAsIDAsIHI3LCByOSAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIEthaGx1YTIgKi8KLSAgICAgICAgYm5lICAgICBub3RLMmIKLSAgICAgICAgLyogY2xlYXIgS2FobHVhMiByZXNlcnZlZCBiaXRzICovCisJY21wbAkwLCAwLCByNywgcjkgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBLYWhsdWEyICovCisJYm5lICAgICBub3RLMmIKKwkvKiBjbGVhciBLYWhsdWEyIHJlc2VydmVkIGJpdHMgKi8KIAlMT0FEUFRSIChyMywgMHhmZjAwMDAwMCkKIAlhbmQJcjQsIHI0LCByMwogbm90SzJiOgpAQCAtNjMzLDkgKzYzMyw5IEBACiAJCU1DNF9SRUdESU1NIDw8IDE1IHwgTUM0X1NETU9ERV9DQVMgPDwgMTIgfCBcCiAJCU1DNF9TRE1PREVfV1JBUCA8PCAxMSB8IE1DNF9TRE1PREVfQlVSU1QgPDwgOCB8IFwKIAkJTUM0X0FDVE9SVyA8PCA0IHwgTUM0X0JTVE9QUkVfTCkKLSAgICAgICAgY21wbAkwLCAwLCByNywgcjkgICAgICAgICAgICAgICAgLyogQ2hlY2sgZm9yIEthaGx1YSAyICovCi0gICAgICAgIGJuZSAgICAgbm90SzJjCi0gICAgICAgIC8qIFR1cm4gb24gS2FobHVhMiBleHRlbmRlZCBST00gc3BhY2UgKi8KKwljbXBsCTAsIDAsIHI3LCByOSAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgS2FobHVhIDIgKi8KKwlibmUgICAgIG5vdEsyYworCS8qIFR1cm4gb24gS2FobHVhMiBleHRlbmRlZCBST00gc3BhY2UgKi8KIAlMT0FEUFRSIChyMywgMHgwMDIwMDAwMCkKIAlvcglyNCwgcjQsIHIzCiBub3RLMmM6CkBAIC03NDUsMTMgKzc0NSwxMiBAQAogCiAJc3luYwogCWVpZWlvCi0gICAgICAgIG10bHIgICAgcjExCisJbXRsciAgICByMTEKIAlibHIKIAogI2Vsc2UgLyogVVNFX1YyX0lOSVQgKi8KIAogCi0KIC8qIFUtQm9vdCB3b3JrcywgYnV0IG1lbW9yeSB3aWxsIG5vdCBydW4gcmVsaWFibHkgZm9yIGFsbCBhZGRyZXNzIHJhbmdlcy4KICAqIEVhcmx5IFUtQm9vdCBXb3JraW5nIGluaXQsIGJ1dCAyLjQuMTkga2VybmVsIHdpbGwgY3Jhc2ggc2luY2UgbWVtb3J5IGlzIG5vdAogICogaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBDb3VsZCB3b3JrIGlmIGRlYnVnZ2VkLgpAQCAtODk4LDEwNiArODk3LDEwNiBAQAogLmdsb2JsICBlYXJseV9pbml0X2YKIAogZWFybHlfaW5pdF9mOgotICAgICAgICBtZmxyICAgIHIxMQotICAgICAgICBsaXMgICAgIHIxMCwgMHg4MDAwCisJbWZsciAgICByMTEKKwlsaXMgICAgIHIxMCwgMHg4MDAwCiAKLSAgICAgICAgLyogUENJIExhdGVuY3kgVGltZXIgKi8KLSAgICAgICAgbGkgICAgICByNCwgMHgwZAotICAgICAgICBvcmkgICAgIHIzLCByMTAsIFBMVFJAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV84CisJLyogUENJIExhdGVuY3kgVGltZXIgKi8KKwlsaSAgICAgIHI0LCAweDBkCisJb3JpICAgICByMywgcjEwLCBQTFRSQGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV84CiAKLSAgICAgICAgLyogQ2FjaGUgTGluZSBTaXplICovCi0gICAgICAgIGxpICAgICAgcjQsIDB4MDgKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBQQ0xTUkBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzgKKwkvKiBDYWNoZSBMaW5lIFNpemUgKi8KKwlsaSAgICAgIHI0LCAweDA4CisJb3JpICAgICByMywgcjEwLCBQQ0xTUkBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfOAogCi0gICAgICAgIC8qIFBDSSBDbWQgKi8KLSAgICAgICAgbGkgICAgICByNCwgNgotICAgICAgICBvcmkgICAgIHIzLCByMTAsIFBDSUNSQGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMTYKKwkvKiBQQ0kgQ21kICovCisJbGkgICAgICByNCwgNgorCW9yaSAgICAgcjMsIHIxMCwgUENJQ1JAbAorCWJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzE2CiAKICNpZiAxCi0gICAgICAgIC8qIFBDSSBTdGF0ICovCi0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgUENJU1JAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ19yZWFkXzE2Ci0gICAgICAgIG9yaSAgICAgcjQsIHI0LCAweGZmZmYKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBQQ0lTUkBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzE2CisJLyogUENJIFN0YXQgKi8KKwlvcmkgICAgIHIzLCByMTAsIFBDSVNSQGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ19yZWFkXzE2CisJb3JpICAgICByNCwgcjQsIDB4ZmZmZgorCW9yaSAgICAgcjMsIHIxMCwgUENJU1JAbAorCWJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzE2CiAjZW5kaWYKIAotICAgICAgICAvKiBQSUNSMSAqLwotICAgICAgICBsaXMgICAgIHI0LCAweGZmMTQKLSAgICAgICAgb3JpICAgICByNCwgcjQsIDB4MWI5OAotICAgICAgICBvcmkgICAgIHIzLCByMTAsIFBJQ1IxQGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKKwkvKiBQSUNSMSAqLworCWxpcyAgICAgcjQsIDB4ZmYxNAorCW9yaSAgICAgcjQsIHI0LCAweDFiOTgKKwlvcmkgICAgIHIzLCByMTAsIFBJQ1IxQGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8zMgogCiAKLSAgICAgICAgLyogUElDUjIgKi8KLSAgICAgICAgbGlzICAgICByNCwgMHgwNDA0Ci0gICAgICAgIG9yaSAgICAgcjQsIHI0LCAweDAwMDQKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBQSUNSMkBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzMyCisJLyogUElDUjIgKi8KKwlsaXMgICAgIHI0LCAweDA0MDQKKwlvcmkgICAgIHI0LCByNCwgMHgwMDA0CisJb3JpICAgICByMywgcjEwLCBQSUNSMkBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKIAogCS8qIE1JT0NSMSAqLwotICAgICAgICBsaSAgICAgIHI0LCAweDA0Ci0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgTUlPQ1IxQGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfOAorCWxpICAgICAgcjQsIDB4MDQKKwlvcmkgICAgIHIzLCByMTAsIE1JT0NSMUBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfOAogCiAJLyogRm9yIHRoZSBNUEM4MjQ1LCBzZXQgcmVnaXN0ZXIgNzcgdG8gJTAwMTAwMDAwIChzZWUgRXJyYXRhICMxNSkgKi8KIAkvKiBTRFJBTV9DTEtfREVMICgweDc3KSovCi0gICAgICAgIGxpICAgICAgcjQsIDB4MTAKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBNSU9DUjJAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV84CisJbGkgICAgICByNCwgMHgxMAorCW9yaSAgICAgcjMsIHIxMCwgTUlPQ1IyQGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV84CiAKLSAgICAgICAgLyogRVVNQkJBUiAqLwotICAgICAgICBsaXMgICAgIHI0LCAweGZjMDAKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBFVU1CQkFSQGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKKwkvKiBFVU1CQkFSICovCisJbGlzICAgICByNCwgMHhmYzAwCisJb3JpICAgICByMywgcjEwLCBFVU1CQkFSQGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8zMgogCiAJLyogQU1CT1IgKi8KIAogICAgICAgIC8qIEV2ZW4gaWYgQWRkcmVzcyBNYXAgQiBpcyBub3QgYmVpbmcgdXNlZCAodGhvdWdoIGl0IHNob3VsZCksCi0gICAgICAgICogdGhlIG1lbW9yeSBETEwgbmVlZHMgdG8gYmUgY2xlYXJlZC9zZXQvY2xlYXJlZCBiZWZvcmUgdXNpbmcgbWVtb3J5LgorCSogdGhlIG1lbW9yeSBETEwgbmVlZHMgdG8gYmUgY2xlYXJlZC9zZXQvY2xlYXJlZCBiZWZvcmUgdXNpbmcgbWVtb3J5LgogCSovCiAKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBBTUJPUkBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3JlYWRfOAkvKiBnZXQgQ3VycmVudCBiaXRzICovCisJb3JpICAgICByMywgcjEwLCBBTUJPUkBsCisJYmwgICAgICBfX3BjaV9jb25maWdfcmVhZF84CS8qIGdldCBDdXJyZW50IGJpdHMgKi8KIAotICAgICAgICBhbmRpLiAgIHI0LCByNCwgMHhmZmRmCi0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgQU1CT1JAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8xNgkvKiBDbGVhciBETExfUkVTRVQgKi8KKwlhbmRpLiAgIHI0LCByNCwgMHhmZmRmCisJb3JpICAgICByMywgcjEwLCBBTUJPUkBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMTYJLyogQ2xlYXIgRExMX1JFU0VUICovCiAKLSAgICAgICAgb3JpICAgIHI0LCByNCwgMHgwMDIwCi0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgQU1CT1JAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8xNgkvKiBTZXQgRExMX1JFU0VUICovCisJb3JpICAgIHI0LCByNCwgMHgwMDIwCisJb3JpICAgICByMywgcjEwLCBBTUJPUkBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMTYJLyogU2V0IERMTF9SRVNFVCAqLwogCi0gICAgICAgIGFuZGkuICAgcjQsIHI0LCAweGZmZGYKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBBTUJPUkBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzE2CS8qIENsZWFyIERMTF9SRVNFVCAqLworCWFuZGkuICAgcjQsIHI0LCAweGZmZGYKKwlvcmkgICAgIHIzLCByMTAsIEFNQk9SQGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8xNgkvKiBDbGVhciBETExfUkVTRVQgKi8KIAotICAgICAgICAvKiBFUkNSMSAqLwotICAgICAgICBsaXMgICAgIHI0LCAweDgwNDAJCS8qIEVuYWJsZSBSQ1MyLCB1c2Ugc3VwcGxpZWQgdGltaW5ncyAqLwotICAgICAgICBvcmkgICAgIHI0LCByNCwgMHg4MDAwCi0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgRVJDUjFAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8zMgorCS8qIEVSQ1IxICovCisJbGlzICAgICByNCwgMHg4MDQwCQkvKiBFbmFibGUgUkNTMiwgdXNlIHN1cHBsaWVkIHRpbWluZ3MgKi8KKwlvcmkgICAgIHI0LCByNCwgMHg4MDAwCisJb3JpICAgICByMywgcjEwLCBFUkNSMUBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKIAotICAgICAgICAvKiBFUkNSMiAqLwotICAgICAgICBsaXMgICAgIHI0LCAweDAwMDAJCS8qIERpc2FibGUgUkNTMyBwYXJtcyAqLwotICAgICAgICBvcmkgICAgIHI0LCByNCwgMHgwMDAwCi0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgRVJDUjJAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8zMgorCS8qIEVSQ1IyICovCisJbGlzICAgICByNCwgMHgwMDAwCQkvKiBEaXNhYmxlIFJDUzMgcGFybXMgKi8KKwlvcmkgICAgIHI0LCByNCwgMHgwMDAwCisJb3JpICAgICByMywgcjEwLCBFUkNSMkBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKIAotICAgICAgICAvKiBFUkNSMyAqLwotICAgICAgICBsaXMgICAgIHI0LCAweDAwMDAJCS8qIFJDUzMgYXQgMHg3MDAwMDAwMCwgNjRLIGJ5dGVzICovCi0gICAgICAgIG9yaSAgICAgcjQsIHI0LCAweDAwMDQKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBFUkNSMkBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzMyCisJLyogRVJDUjMgKi8KKwlsaXMgICAgIHI0LCAweDAwMDAJCS8qIFJDUzMgYXQgMHg3MDAwMDAwMCwgNjRLIGJ5dGVzICovCisJb3JpICAgICByNCwgcjQsIDB4MDAwNAorCW9yaSAgICAgcjMsIHIxMCwgRVJDUjJAbAorCWJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzMyCiAKIAkvKiBQcmVzZXJ2ZSBtZW1nbyBiaXQgKi8KLSAgICAgICAgLyogTUNDUjEgKi8KKwkvKiBNQ0NSMSAqLwogCiAvKglsaXMgICAgIHI0LCAweDc1YTgJCS8gIFNhZmUgTG9jYWwgUk9NID0gMTErMyBjbG9ja3MgKi8KLSAgCWxpcyAgICAgcjQsIDB4NzVhMCAgICAgICAgICAgICAgLyogU2FmZSBMb2NhbCBST00gPSAxMSszIGNsb2NrcyAqLworCWxpcyAgICAgcjQsIDB4NzVhMCAgICAgICAgICAgICAgLyogU2FmZSBMb2NhbCBST00gPSAxMSszIGNsb2NrcyAqLwogLyogICAgICBsaXMgICAgIHI0LCAweDczYTAgICAgICAgICAgICAgIC8gIEZhc3QgTG9jYWwgUk9NID0gNyszIGNsb2NrcyAqLwogLyogICAgICBvcmlzICAgIHI0LCByNCwgMHgwMDEwICAgICAgICAgIC8gIEJ1cnN0IFJPTS9GbGFzaCBlbmFibGUgKi8KIC8qICAgICAgb3JpcyAgICByNCwgcjQsIDB4MDAwNCAgICAgICAgICAvICBTZWxmLXJlZnJlc2ggZW5hYmxlICovCkBAIC0xMDA1LDE3ICsxMDA0LDE3IEBACiAvKiAgICAgIG9yaSAgICAgcjQscjQsMHhGRkZGICAgICAgICAgICAgLyAgMTZNYml0ICAyYmFuayBTRFJBTSAqLwogLyogICAgICBvcmkgICAgIHI0LHI0LDB4QUFBQSAgICAgICAgICAgIC8gIDI1Nk1iaXQgNGJhbmsgU0RSQU0gKDgyNDUgb25seSkgKi8KIC8qICAgICAgb3JpICAgICByNCxyNCwweDU1NTUgICAgICAgICAgICAvICA2NE1iaXQgIDJiYW5rIFNEUkFNICovCi0gICAgICAgIG9yaSAgICAgcjQscjQsMHgwMDAwICAgICAgICAgICAgLyogNjRNYml0ICA0YmFuayBTRFJBTSAqLworCW9yaSAgICAgcjQscjQsMHgwMDAwICAgICAgICAgICAgLyogNjRNYml0ICA0YmFuayBTRFJBTSAqLwogCi0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgTUNDUjFAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8zMgorCW9yaSAgICAgcjMsIHIxMCwgTUNDUjFAbAorCWJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzMyCiAKLSAgICAgICAgLyogTUNDUjIgKi8KKwkvKiBNQ0NSMiAqLwogCi0gICAgICAgIGxpcyAgICAgcjQsMHgwMDAwCisJbGlzICAgICByNCwweDAwMDAKIC8qICAgICAgb3JpcyAgICByNCxyNCwweDQwMDAgICAgICAgICAgICAvICBUU19XQUlUX1RJTUVSID0gMyBjbG9ja3MgKi8KLSAgICAgICAgb3JpcyAgICByNCxyNCwweDEwMDAgICAgICAgICAgICAvKiBBU1JJU0UgPSA4IGNsb2NrcyAqLwotICAgICAgICBvcmlzICAgIHI0LHI0LDB4MDA4MCAgICAgICAgICAgIC8qIEFTRkFMTCA9IDggY2xvY2tzICovCisJb3JpcyAgICByNCxyNCwweDEwMDAgICAgICAgICAgICAvKiBBU1JJU0UgPSA4IGNsb2NrcyAqLworCW9yaXMgICAgcjQscjQsMHgwMDgwICAgICAgICAgICAgLyogQVNGQUxMID0gOCBjbG9ja3MgKi8KIC8qICAgICAgb3JpcyAgICByNCxyNCwweDAwMTAgICAgICAgICAgICAvICBTRFJBTSBQYXJpdHkgKGVsc2UgRUNDKSAqLwogLyogICAgICBvcmlzICAgIHI0LHI0LDB4MDAwOCAgICAgICAgICAgIC8gIFdyaXRlIHBhcml0eSBjaGVjayAqLwogLyogICAgICBvcmlzICAgIHI0LHI0LDB4MDAwNCAgICAgICAgICAgIC8gIFNEUkFNIGlubGluZSByZWFkcyAqLwpAQCAtMTAzMCwxNDMgKzEwMjksMTQyIEBACiAvKiAgICAgIG9yaSAgICAgcjQscjQsMHgxNTBjICAgICAgICAgICAgLyAgMTAwIE1IeiBtZW0gYnVzICAgICAgICA9IDEzNDcgKi8KIC8qICAgICAgb3JpICAgICByNCxyNCwweDEwZmMgICAgICAgICAgICAvICAgODMgTUh6IG1lbSBidXMgICAgICAgID0gMTA4NyAqLwogLyogICAgICBvcmkgICAgIHI0LHI0LDB4MGNjNCAgICAgICAgICAgIC8gICA2NiBNSHogbWVtIGJ1cyAgICAgICAgPSAgODE3ICovCi0gICAgICAgIG9yaSAgICAgcjQscjQsMHgwNGNjICAgICAgICAgICAgLyogIDMzIE1IeiBtZW0gYnVzIChTQUZFKSA9ICAzMDcgKi8KKwlvcmkgICAgIHI0LHI0LDB4MDRjYyAgICAgICAgICAgIC8qICAzMyBNSHogbWVtIGJ1cyAoU0FGRSkgPSAgMzA3ICovCiAvKiAgICAgIG9yaSAgICAgcjQscjQsMHgwMDAyICAgICAgICAgICAgLyAgUmVzZXJ2ZSBhIHBhZ2UgKi8KIC8qICAgICAgb3JpICAgICByNCxyNCwweDAwMDEgICAgICAgICAgICAvICBSV00gcGFyaXR5ICovCiAKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBNQ0NSMkBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzMyCisJb3JpICAgICByMywgcjEwLCBNQ0NSMkBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKIAogCi0gICAgICAgIC8qIE1DQ1IzICovCi0gICAgICAgIGxpcyAgICAgcjQsMHgwMDAwICAgICAgICAgICAgICAgLyogQlNUT1BSRV9NID0gNyAoc2VlIEEvTikgKi8KLSAgICAgICAgb3JpcyAgICByNCxyNCwweDA1MDAgICAgICAgICAgICAvKiBSRUZSRUMgICAgPSA4IGNsb2NrcyAqLwotICAgICAgICBvcmkgICAgIHIzLCByMTAsIE1DQ1IzQGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKKwkvKiBNQ0NSMyAqLworCWxpcyAgICAgcjQsMHgwMDAwICAgICAgICAgICAgICAgLyogQlNUT1BSRV9NID0gNyAoc2VlIEEvTikgKi8KKwlvcmlzICAgIHI0LHI0LDB4MDUwMCAgICAgICAgICAgIC8qIFJFRlJFQyAgICA9IDggY2xvY2tzICovCisJb3JpICAgICByMywgcjEwLCBNQ0NSM0BsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKIAotICAgICAgICAvKiBNQ0NSNCAqLyAgICAgICAgICAgICAgICAgICAgIC8qIFR1cm4gb24gcmVnaXN0ZXJlZCBidWZmZXIgbW9kZSAqLwotICAgICAgICBsaXMgICAgIHI0LCAweDIwMDAgICAgICAgICAgICAgIC8qIFBSRVRPQUNUID0gMyBjbG9ja3MgKi8KLSAgICAgICAgb3JpcyAgICByNCxyNCwweDA0MDAgICAgICAgICAgICAvKiBBQ1RPUFJFICA9IDUgY2xvY2tzICovCisJLyogTUNDUjQgKi8gICAgICAgICAgICAgICAgICAgICAvKiBUdXJuIG9uIHJlZ2lzdGVyZWQgYnVmZmVyIG1vZGUgKi8KKwlsaXMgICAgIHI0LCAweDIwMDAgICAgICAgICAgICAgIC8qIFBSRVRPQUNUID0gMyBjbG9ja3MgKi8KKwlvcmlzICAgIHI0LHI0LDB4MDQwMCAgICAgICAgICAgIC8qIEFDVE9QUkUgID0gNSBjbG9ja3MgKi8KIC8qICAgICAgb3JpcyAgICByNCxyNCwweDAwODAgICAgICAgICAgICAvICBFbmFibGUgOC1iZWF0IGJ1cnN0ICgzMi1iaXQgYnVzKSAqLwogLyogICAgICBvcmlzICAgIHI0LHI0LDB4MDA0MCAgICAgICAgICAgIC8gIEVuYWJsZSBJbmxpbmUgRUNDL1Bhcml0eSAqLwotICAgICAgICBvcmlzICAgIHI0LHI0LDB4MDAyMCAgICAgICAgICAgIC8qIEVYVFJPTSBlbmFibGVkICovCi0gICAgICAgIG9yaXMgICAgcjQscjQsMHgwMDEwICAgICAgICAgICAgLyogUmVnaXN0ZXJlZCBidWZmZXJzICovCisJb3JpcyAgICByNCxyNCwweDAwMjAgICAgICAgICAgICAvKiBFWFRST00gZW5hYmxlZCAqLworCW9yaXMgICAgcjQscjQsMHgwMDEwICAgICAgICAgICAgLyogUmVnaXN0ZXJlZCBidWZmZXJzICovCiAvKiAgICAgIG9yaXMgICAgcjQscjQsMHgwMDAwICAgICAgICAgICAgLyAgQlNUT1BSRV9VID0gMCAoc2VlIEEvTikgKi8KLSAgICAgICAgb3JpcyAgICByNCxyNCwweDAwMDIgICAgICAgICAgICAvKiBEQlVTX1NJWlsyXSAoOCBiaXQgb24gUkNTMSkgKi8KKwlvcmlzICAgIHI0LHI0LDB4MDAwMiAgICAgICAgICAgIC8qIERCVVNfU0laWzJdICg4IGJpdCBvbiBSQ1MxKSAqLwogCiAvKiAgICAgIG9yaSAgICAgcjQscjQsMHg4MDAwICAgICAgICAgICAgLyAgUmVnaXN0ZXJlZCBESU1NcyAqLwotICAgICAgICBvcmkgICAgIHI0LHI0LDB4MjAwMCAgICAgICAgICAgIC8qQ0FTIExhdGVuY3kgKENMPTMpIChzZWUgUkRMQVQpICovCisJb3JpICAgICByNCxyNCwweDIwMDAgICAgICAgICAgICAvKkNBUyBMYXRlbmN5IChDTD0zKSAoc2VlIFJETEFUKSAqLwogLyogICAgICBvcmkgICAgIHI0LHI0LDB4MjAwMCAgICAgICAgICAgIC8gIENBUyBMYXRlbmN5IChDTD0yKSAoc2VlIFJETEFUKSAqLwogLyogICAgICBvcmkgICAgIHI0LHI0LDB4MDMwMCAgICAgICAgICAgIC8gIFNlcXVlbnRpYWwgd3JhcC84LWJlYXQgYnVyc3QgKi8KLSAgICAgICAgb3JpICAgICByNCxyNCwweDAyMDAgICAgICAgICAgICAvKiBTZXF1ZW50aWFsIHdyYXAvNC1iZWF0IGJ1cnN0ICovCi0gICAgICAgIG9yaSAgICAgcjQscjQsMHgwMDMwICAgICAgICAgICAgLyogQUNUT1JXICA9IDMgY2xvY2tzICovCi0gICAgICAgIG9yaSAgICAgcjQscjQsMHgwMDA5ICAgICAgICAgICAgLyogQlNUT1BSRV9MID0gOSAoc2VlIEEvTikgKi8KKwlvcmkgICAgIHI0LHI0LDB4MDIwMCAgICAgICAgICAgIC8qIFNlcXVlbnRpYWwgd3JhcC80LWJlYXQgYnVyc3QgKi8KKwlvcmkgICAgIHI0LHI0LDB4MDAzMCAgICAgICAgICAgIC8qIEFDVE9SVyAgPSAzIGNsb2NrcyAqLworCW9yaSAgICAgcjQscjQsMHgwMDA5ICAgICAgICAgICAgLyogQlNUT1BSRV9MID0gOSAoc2VlIEEvTikgKi8KIAotICAgICAgICBvcmkgICAgIHIzLCByMTAsIE1DQ1I0QGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKKwlvcmkgICAgIHIzLCByMTAsIE1DQ1I0QGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8zMgogCiAJLyogTVNBUjEgKi8KLSAgICAgICAgbGlzICAgICByNCwgMHhjMDgwNDAwMEBoCi0gICAgICAgIG9yaSAgICAgcjQsIHI0LCAweGMwODA0MDAwQGwKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBNU0FSMUBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzMyCisJbGlzICAgICByNCwgMHhjMDgwNDAwMEBoCisJb3JpICAgICByNCwgcjQsIDB4YzA4MDQwMDBAbAorCW9yaSAgICAgcjMsIHIxMCwgTVNBUjFAbAorCWJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzMyCiAKIAkvKiBNU0FSMiAqLwotICAgICAgICBsaXMgICAgIHI0LCAweGMwODA0MDAwQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIDB4YzA4MDQwMDBAbAotICAgICAgICBvcmkgICAgIHIzLCByMTAsIE1TQVIyQGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKKwlsaXMgICAgIHI0LCAweGMwODA0MDAwQGgKKwlvcmkgICAgIHI0LCByNCwgMHhjMDgwNDAwMEBsCisJb3JpICAgICByMywgcjEwLCBNU0FSMkBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKIAogCS8qIE1FU0FSMSAqLwotICAgICAgICBsaXMgICAgIHI0LCAweDAwMDAwMDAwQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIDB4MDAwMDAwMDBAbAotICAgICAgICBvcmkgICAgIHIzLCByMTAsIEVNU0FSMUBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzMyCisJbGlzICAgICByNCwgMHgwMDAwMDAwMEBoCisJb3JpICAgICByNCwgcjQsIDB4MDAwMDAwMDBAbAorCW9yaSAgICAgcjMsIHIxMCwgRU1TQVIxQGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8zMgogCiAJLyogTUVTQVIyICovCi0gICAgICAgIGxpcyAgICAgcjQsIDB4MDEwMTAxMDFAaAotICAgICAgICBvcmkgICAgIHI0LCByNCwgMHgwMTAxMDEwMUBsCi0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgRU1TQVIyQGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKKwlsaXMgICAgIHI0LCAweDAxMDEwMTAxQGgKKwlvcmkgICAgIHI0LCByNCwgMHgwMTAxMDEwMUBsCisJb3JpICAgICByMywgcjEwLCBFTVNBUjJAbAorCWJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzMyCiAKIAkvKiBNRUFSMSAqLwotICAgICAgICBsaXMgICAgIHI0LCAweGZmYmY3ZjNmQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIDB4ZmZiZjdmM2ZAbAotICAgICAgICBvcmkgICAgIHIzLCByMTAsIE1FQVIxQGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKKwlsaXMgICAgIHI0LCAweGZmYmY3ZjNmQGgKKwlvcmkgICAgIHI0LCByNCwgMHhmZmJmN2YzZkBsCisJb3JpICAgICByMywgcjEwLCBNRUFSMUBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKIAogCS8qIE1FQVIyICovCi0gICAgICAgIGxpcyAgICAgcjQsIDB4ZmZiZjdmM2ZAaAotICAgICAgICBvcmkgICAgIHI0LCByNCwgMHhmZmJmN2YzZkBsCi0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgTUVBUjJAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8zMgorCWxpcyAgICAgcjQsIDB4ZmZiZjdmM2ZAaAorCW9yaSAgICAgcjQsIHI0LCAweGZmYmY3ZjNmQGwKKwlvcmkgICAgIHIzLCByMTAsIE1FQVIyQGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8zMgogCiAJLyogTUVFQVIxICovCi0gICAgICAgIGxpcyAgICAgcjQsIDB4MDAwMDAwMDBAaAotICAgICAgICBvcmkgICAgIHI0LCByNCwgMHgwMDAwMDAwMEBsCi0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgRU1FQVIxQGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKKwlsaXMgICAgIHI0LCAweDAwMDAwMDAwQGgKKwlvcmkgICAgIHI0LCByNCwgMHgwMDAwMDAwMEBsCisJb3JpICAgICByMywgcjEwLCBFTUVBUjFAbAorCWJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzMyCiAKIAkvKiBNRUVBUjIgKi8KLSAgICAgICAgbGlzICAgICByNCwgMHgwMTAxMDEwMUBoCi0gICAgICAgIG9yaSAgICAgcjQsIHI0LCAweDAxMDEwMTAxQGwKLSAgICAgICAgb3JpICAgICByMywgcjEwLCBFTUVBUjJAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV8zMgorCWxpcyAgICAgcjQsIDB4MDEwMTAxMDFAaAorCW9yaSAgICAgcjQsIHI0LCAweDAxMDEwMTAxQGwKKwlvcmkgICAgIHIzLCByMTAsIEVNRUFSMkBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKIAogCS8qIE9EQ1IgKi8KLSAgICAgICAgbGkgICAgICByNCwgMHg3ZgotICAgICAgICBvcmkgICAgIHIzLCByMTAsIE9EQ1JAbAotICAgICAgICBibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV84CisJbGkgICAgICByNCwgMHg3ZgorCW9yaSAgICAgcjMsIHIxMCwgT0RDUkBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfOAogCiAJLyogTUJFUiAqLwotICAgICAgICBsaSAgICAgIHI0LCAweDAxCi0gICAgICAgIG9yaSAgICAgcjMsIHIxMCwgTUJFUkBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzgKKwlsaSAgICAgIHI0LCAweDAxCisJb3JpICAgICByMywgcjEwLCBNQkVSQGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ193cml0ZV84CiAKLSAgICAgICAgLyogUGFnZSBDVFIgYWthIFBHTUFYICovCi0gICAgICAgIGxpICAgICAgcjQsIDB4MzIKLSAgICAgICAgb3JpICAgICByMywgcjEwLCAweDcwCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzgKKwkvKiBQYWdlIENUUiBha2EgUEdNQVggKi8KKwlsaSAgICAgIHI0LCAweDMyCisJb3JpICAgICByMywgcjEwLCAweDcwCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfOAogCiAjaWYgMAogCS8qIENMSyBEcml2ZSAqLwotICAgICAgICBvcmkgICAgIHI0LCByMTAsIDB4ZmMwMSAvKiBUb3AgYml0IHdpbGwgYmUgaWdub3JlZCAqLwotICAgICAgICBvcmkgICAgIHIzLCByMTAsIDB4NzQKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMTYKKwlvcmkgICAgIHI0LCByMTAsIDB4ZmMwMSAvKiBUb3AgYml0IHdpbGwgYmUgaWdub3JlZCAqLworCW9yaSAgICAgcjMsIHIxMCwgMHg3NAorCWJsICAgICAgX19wY2lfY29uZmlnX3dyaXRlXzE2CiAjZW5kaWYKIAogCS8qIGRlbGF5ICovCi0gICAgICAgIGxpcyAgICAgcjcsIDEKLSAgICAgICAgbXRjdHIgICByNworCWxpcyAgICAgcjcsIDEKKwltdGN0ciAgIHI3CiBsYWJlbDE6IAliZG56ICAgIGxhYmVsMQogCi0gICAgICAgIC8qIFNldCBtZW1nbyBiaXQgKi8KLSAgICAgICAgLyogTUNDUjEgKi8KLSAgICAgICAgb3JpICAgICByMywgcjEwLCBNQ0NSMUBsCi0gICAgICAgIGJsICAgICAgX19wY2lfY29uZmlnX3JlYWRfMzIKLSAgICAgICAgbGlzCXI3LCAweDAwMDgKLSAgICAgICAgb3IJcjQsIHIzLCByNwotICAgICAgICBvcmkgICAgIHIzLCByMTAsIE1DQ1IxQGwKLSAgICAgICAgYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKKwkvKiBTZXQgbWVtZ28gYml0ICovCisJLyogTUNDUjEgKi8KKwlvcmkgICAgIHIzLCByMTAsIE1DQ1IxQGwKKwlibCAgICAgIF9fcGNpX2NvbmZpZ19yZWFkXzMyCisJbGlzCXI3LCAweDAwMDgKKwlvcglyNCwgcjMsIHI3CisJb3JpICAgICByMywgcjEwLCBNQ0NSMUBsCisJYmwgICAgICBfX3BjaV9jb25maWdfd3JpdGVfMzIKIAogCS8qIGRlbGF5IGFnYWluICovCi0gICAgICAgIGxpcyAgICAgcjcsIDEKLSAgICAgICAgbXRjdHIgICByNworCWxpcyAgICAgcjcsIDEKKwltdGN0ciAgIHI3CiBsYWJlbDI6IAliZG56ICAgIGxhYmVsMgogI2lmIDAKIC8qIERFQlVHOiBJbmZpbml0ZSBsb29wLCB3cml0ZSB0aGVuIHJlYWQgKi8KIGxvb3A6Ci0gICAgICAgIGxpcyAgICAgcjcsIDB4ZmZmZgotICAgICAgICBtdGN0ciAgIHI3Ci0gICAgICAgIGxpCXIzLCAweDUwMDQKLSAgICAgICAgbGlzCXI0LCAweGEwYTAKLSAgICAgICAgb3JpCXI0LCByNCwgMHg1MDUwCisJbGlzICAgICByNywgMHhmZmZmCisJbXRjdHIgICByNworCWxpCXIzLCAweDUwMDQKKwlsaXMJcjQsIDB4YTBhMAorCW9yaQlyNCwgcjQsIDB4NTA1MAogCWJsIHdyaXRlXzMyX25lCi0gICAgICAgIGxpCXIzLCAweDUwMDQKKwlsaQlyMywgMHg1MDA0CiAJYmwgcmVhZF8zMl9uZQotICAgICAgCWJkbnogICAgbG9vcAorCWJkbnogICAgbG9vcAogI2VuZGlmCi0gICAgICAgIG10bHIgICAgcjExCi0gICAgICAgIGJscgorCW10bHIgICAgcjExCisJYmxyCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvYm13L2ZsYXNoLmMgYi9ib2FyZC9ibXcvZmxhc2guYwppbmRleCBiZTYyMjc0Li5lMDRhZjk3IDEwMDY0NAotLS0gYS9ib2FyZC9ibXcvZmxhc2guYworKysgYi9ib2FyZC9ibXcvZmxhc2guYwpAQCAtOTEsNyArOTEsNiBAQAogI2VuZGlmIC8qIDAgKi8KIAogCi0KIHN0YXRpYyB1bnNpZ25lZCBsb25nCiBmbGFzaF9pZCh1bnNpZ25lZCBjaGFyIG1mY3QsIHVuc2lnbmVkIGNoYXIgY2hpcCkKIHsKQEAgLTEzNSw3ICsxMzQsNiBAQAogfQogCiAKLQogdW5zaWduZWQgbG9uZwogZmxhc2hfaW5pdCh2b2lkKQogewpAQCAtMTgxLDkgKzE3OSw5IEBACiAgICAgc3dpdGNoKHBmbGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spCiAgICAgewogICAgICAgY2FzZSBGTEFTSF9BTTA0MDoKLSAgICAgICAgcGZsaW5mby0+c2l6ZSA9IDB4MDAwODAwMDA7CisJcGZsaW5mby0+c2l6ZSA9IDB4MDAwODAwMDA7CiAJcGZsaW5mby0+c2VjdG9yX2NvdW50ID0gODsKLSAgICAgICAgZm9yKGogPSAwOyBqIDwgODsgaisrKQorCWZvcihqID0gMDsgaiA8IDg7IGorKykKIAl7CiAJICBwZmxpbmZvLT5zdGFydFtqXSA9IGJhc2VfYWRkcmVzcyArIDB4MDAwMTAwMDAgKiBqOwogCSAgcGZsaW5mby0+cHJvdGVjdFtqXSA9IGZsYXNoWyhqIDw8IDE2KSB8IDB4Ml07CkBAIC0yMDEsMTYgKzE5OSwxNiBAQAogCSAgcGZsaW5mby0+c3RhcnRbaiszXSA9IGJhc2VfYWRkcmVzcyArIDB4MDAwMTAwMDAgKiBqOwogCX0KICNpZiAwCi0gICAgICAgIC8qIGNoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyAqLwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgcGZsaW5mby0+c2VjdG9yX2NvdW50OyBqKyspIHsKLSAgICAgICAgICAvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLwotICAgICAgICAgIC8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KLSAgICAgICAgICBhZGRyMiA9ICh2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKikocGZsaW5mby0+c3RhcnRbal0pOwotICAgICAgICAgICAgaWYgKHBmbGluZm8tPmZsYXNoX2lkICYgRkxBU0hfTUFOX1NTVCkKLSAgICAgICAgICAgICAgcGZsaW5mby0+cHJvdGVjdFtqXSA9IDA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHBmbGluZm8tPnByb3RlY3Rbal0gPSBhZGRyMlsyXSAmIDE7Ci0gICAgICAgIH0KKwkvKiBjaGVjayBmb3IgcHJvdGVjdGVkIHNlY3RvcnMgKi8KKwlmb3IgKGogPSAwOyBqIDwgcGZsaW5mby0+c2VjdG9yX2NvdW50OyBqKyspIHsKKwkgIC8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBNyAuLiBBMCkgPSAweDAyICovCisJICAvKiBEMCA9IDEgaWYgcHJvdGVjdGVkICovCisJICBhZGRyMiA9ICh2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKikocGZsaW5mby0+c3RhcnRbal0pOworCSAgICBpZiAocGZsaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9NQU5fU1NUKQorCSAgICAgIHBmbGluZm8tPnByb3RlY3Rbal0gPSAwOworCSAgICBlbHNlCisJICAgICAgcGZsaW5mby0+cHJvdGVjdFtqXSA9IGFkZHIyWzJdICYgMTsKKwl9CiAjZW5kaWYKIAlicmVhazsKICAgICB9CkBAIC0yNDUsMzAgKzI0MywzMCBAQAogICAgIGludCBpOwogCiAgICAgLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCi0gICAgICAgIGlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX01BTl9TU1QpCi0gICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQotICAgICAgICAgICAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMTAwMDApOwotICAgICAgICAgIH0KLSAgICAgICAgZWxzZQorCWlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX01BTl9TU1QpCisJICB7CisJICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKKwkgICAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMTAwMDApOworCSAgfQorCWVsc2UKICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9CVFlQRSkgewotICAgICAgICAvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUgICAgKi8KLSAgICAgICAgaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKLSAgICAgICAgaW5mby0+c3RhcnRbMV0gPSBiYXNlICsgMHgwMDAwNDAwMDsKLSAgICAgICAgaW5mby0+c3RhcnRbMl0gPSBiYXNlICsgMHgwMDAwNjAwMDsKLSAgICAgICAgaW5mby0+c3RhcnRbM10gPSBiYXNlICsgMHgwMDAwODAwMDsKLSAgICAgICAgZm9yIChpID0gNDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMTAwMDApIC0gMHgwMDAzMDAwMDsKLSAgICAgICAgfQorCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgYm90dG9tIGJvb3QgYmxvY2sgdHlwZSAgICAqLworCWluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7CisJaW5mby0+c3RhcnRbMV0gPSBiYXNlICsgMHgwMDAwNDAwMDsKKwlpbmZvLT5zdGFydFsyXSA9IGJhc2UgKyAweDAwMDA2MDAwOworCWluZm8tPnN0YXJ0WzNdID0gYmFzZSArIDB4MDAwMDgwMDA7CisJZm9yIChpID0gNDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCkgLSAweDAwMDMwMDAwOworCX0KICAgICB9IGVsc2UgewotICAgICAgICAvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIHRvcCBib290IGJsb2NrIHR5cGUgICAgICAgKi8KLSAgICAgICAgaSA9IGluZm8tPnNlY3Rvcl9jb3VudCAtIDE7Ci0gICAgICAgIGluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDQwMDA7Ci0gICAgICAgIGluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDYwMDA7Ci0gICAgICAgIGluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDgwMDA7Ci0gICAgICAgIGZvciAoOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgaSAqIDB4MDAwMTAwMDA7Ci0gICAgICAgIH0KKwkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIHRvcCBib290IGJsb2NrIHR5cGUgICAgICAgKi8KKwlpID0gaW5mby0+c2VjdG9yX2NvdW50IC0gMTsKKwlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA0MDAwOworCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDYwMDA7CisJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwODAwMDsKKwlmb3IgKDsgaSA+PSAwOyBpLS0pIHsKKwkgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgaSAqIDB4MDAwMTAwMDA7CisJfQogICAgIH0KIAogfQpAQCAtMzY3LDcgKzM2NSw3IEBACiAgICBzaG9ydCBpOwogICAgIEZMQVNIX1dPUkRfU0laRSB2YWx1ZTsKICAgICB1bG9uZyBiYXNlID0gKHVsb25nKWFkZHI7Ci0gICAgICAgIHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYWRkcjIgPSAoRkxBU0hfV09SRF9TSVpFICopYWRkcjsKKwl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSAqKWFkZHI7CiAKICAgICBwcmludGYoImZsYXNoX2dldF9zaXplOiBcbiIpOwogICAgIC8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCkBAIC0zNzksMTIzICszNzcsMTIzIEBACiAKICAgICBzd2l0Y2ggKHZhbHVlKSB7CiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9NQU5VRkFDVDoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EOwotICAgICAgICBicmVhazsKKwlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7CisJYnJlYWs7CiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUZVSl9NQU5VRkFDVDoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fRlVKOwotICAgICAgICBicmVhazsKKwlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9GVUo7CisJYnJlYWs7CiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKVNTVF9NQU5VRkFDVDoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fU1NUOwotICAgICAgICBicmVhazsKKwlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9TU1Q7CisJYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSAwOwotICAgICAgICBpbmZvLT5zaXplID0gMDsKLSAgICAgICAgcmV0dXJuICgwKTsgICAgICAgICAvKiBubyBvciB1bmtub3duIGZsYXNoICAqLworCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSAwOworCWluZm8tPnNpemUgPSAwOworCXJldHVybiAoMCk7ICAgICAgICAgLyogbm8gb3IgdW5rbm93biBmbGFzaCAgKi8KICAgICB9CiAgICAgcHJpbnRmKCJyZWNvZ25pc2VkIG1hbnVmYWN0dXJlciIpOwogCiAgICAgdmFsdWUgPSBhZGRyMltBRERSM107ICAgICAgICAgIC8qIGRldmljZSBJRCAgICAgICAgKi8KLSAgICAgICAgZGVidWcgKCJcbmRldl9jb2RlPSV4XG4iLCB2YWx1ZSk7CisJZGVidWcgKCJcbmRldl9jb2RlPSV4XG4iLCB2YWx1ZSk7CiAKICAgICBzd2l0Y2ggKHZhbHVlKSB7CiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9MVjQwMFQ6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNNDAwVDsKLSAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gMTE7Ci0gICAgICAgIGluZm8tPnNpemUgPSAweDAwMDgwMDAwOwotICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qID0+IDAuNSBNQiAgICAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTQwMFQ7CisJaW5mby0+c2VjdG9yX2NvdW50ID0gMTE7CisJaW5mby0+c2l6ZSA9IDB4MDAwODAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAwLjUgTUIgICAgICAgICovCiAKICAgICBjYXNlIChGTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0xWNDAwQjoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU00MDBCOwotICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSAxMTsKLSAgICAgICAgaW5mby0+c2l6ZSA9IDB4MDAwODAwMDA7Ci0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogPT4gMC41IE1CICAgICAgICAqLworCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNNDAwQjsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSAxMTsKKwlpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKKwlicmVhazsgICAgICAgICAgICAgIC8qID0+IDAuNSBNQiAgICAgICAgKi8KIAogICAgIGNhc2UgKEZMQVNIX1dPUkRfU0laRSlBTURfSURfTFY4MDBUOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTgwMFQ7Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDE5OwotICAgICAgICBpbmZvLT5zaXplID0gMHgwMDEwMDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAxIE1CICAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTgwMFQ7CisJaW5mby0+c2VjdG9yX2NvdW50ID0gMTk7CisJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAxIE1CICAgICAgKi8KIAogICAgIGNhc2UgKEZMQVNIX1dPUkRfU0laRSlBTURfSURfTFY4MDBCOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTgwMEI7Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDE5OwotICAgICAgICBpbmZvLT5zaXplID0gMHgwMDEwMDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAxIE1CICAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTgwMEI7CisJaW5mby0+c2VjdG9yX2NvdW50ID0gMTk7CisJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAxIE1CICAgICAgKi8KIAogICAgIGNhc2UgKEZMQVNIX1dPUkRfU0laRSlBTURfSURfTFYxNjBUOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTE2MFQ7Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDM1OwotICAgICAgICBpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAyIE1CICAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTE2MFQ7CisJaW5mby0+c2VjdG9yX2NvdW50ID0gMzU7CisJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAyIE1CICAgICAgKi8KIAogICAgIGNhc2UgKEZMQVNIX1dPUkRfU0laRSlBTURfSURfTFYxNjBCOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTE2MEI7Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDM1OwotICAgICAgICBpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAyIE1CICAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTE2MEI7CisJaW5mby0+c2VjdG9yX2NvdW50ID0gMzU7CisJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAyIE1CICAgICAgKi8KIAogICAgIGNhc2UgKEZMQVNIX1dPUkRfU0laRSlTU1RfSURfeEY4MDBBOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9TU1Q4MDBBOwotICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSAxNjsKLSAgICAgICAgaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDA7Ci0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogPT4gMSBNQiAgICAgICovCisJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfU1NUODAwQTsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSAxNjsKKwlpbmZvLT5zaXplID0gMHgwMDEwMDAwMDsKKwlicmVhazsgICAgICAgICAgICAgIC8qID0+IDEgTUIgICAgICAqLwogCiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKVNTVF9JRF94RjE2MEE6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX1NTVDE2MEE7Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDMyOwotICAgICAgICBpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAyIE1CICAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9TU1QxNjBBOworCWluZm8tPnNlY3Rvcl9jb3VudCA9IDMyOworCWluZm8tPnNpemUgPSAweDAwMjAwMDAwOworCWJyZWFrOyAgICAgICAgICAgICAgLyogPT4gMiBNQiAgICAgICovCiAKICAgICBjYXNlIChGTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0YwNDBCOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsKLSAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gODsKLSAgICAgICAgaW5mby0+c2l6ZSA9IDB4MDAwODAwMDA7Ci0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogPT4gMC41IE1CICAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSA4OworCWluZm8tPnNpemUgPSAweDAwMDgwMDAwOworCWJyZWFrOyAgICAgICAgICAgICAgLyogPT4gMC41IE1CICAgICAgKi8KIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLSAgICAgICAgcmV0dXJuICgwKTsgICAgICAgICAvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCisJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCXJldHVybiAoMCk7ICAgICAgICAgLyogPT4gbm8gb3IgdW5rbm93biBmbGFzaCAqLwogCiAgICAgfQogCiAgICAgcHJpbnRmKCJmbGFzaCBpZCAlbHg7IHNlY3RvciBjb3VudCAleCwgc2l6ZSAlbHhcbiIsIGluZm8tPmZsYXNoX2lkLGluZm8tPnNlY3Rvcl9jb3VudCxpbmZvLT5zaXplKTsKICAgICAvKiBzZXQgdXAgc2VjdG9yIHN0YXJ0IGFkZHJlc3MgdGFibGUgKi8KLSAgICAgICAgaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfTUFOX1NTVCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCi0gICAgICAgICAgICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCk7Ci0gICAgICAgICAgfQotICAgICAgICBlbHNlCisJaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfTUFOX1NTVCkKKwkgIHsKKwkgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQorCSAgICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCk7CisJICB9CisJZWxzZQogICAgIGlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX0JUWVBFKSB7Ci0gICAgICAgIC8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgYm90dG9tIGJvb3QgYmxvY2sgdHlwZSAgICAqLwotICAgICAgICBpbmZvLT5zdGFydFswXSA9IGJhc2UgKyAweDAwMDAwMDAwOwotICAgICAgICBpbmZvLT5zdGFydFsxXSA9IGJhc2UgKyAweDAwMDA0MDAwOwotICAgICAgICBpbmZvLT5zdGFydFsyXSA9IGJhc2UgKyAweDAwMDA2MDAwOwotICAgICAgICBpbmZvLT5zdGFydFszXSA9IGJhc2UgKyAweDAwMDA4MDAwOwotICAgICAgICBmb3IgKGkgPSA0OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCkgLSAweDAwMDMwMDAwOwotICAgICAgICB9CisJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlICAgICovCisJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKKwlpbmZvLT5zdGFydFsxXSA9IGJhc2UgKyAweDAwMDA0MDAwOworCWluZm8tPnN0YXJ0WzJdID0gYmFzZSArIDB4MDAwMDYwMDA7CisJaW5mby0+c3RhcnRbM10gPSBiYXNlICsgMHgwMDAwODAwMDsKKwlmb3IgKGkgPSA0OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKKwkgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKSAtIDB4MDAwMzAwMDA7CisJfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgdG9wIGJvb3QgYmxvY2sgdHlwZSAgICAgICAqLwotICAgICAgICBpID0gaW5mby0+c2VjdG9yX2NvdW50IC0gMTsKLSAgICAgICAgaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNDAwMDsKLSAgICAgICAgaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNjAwMDsKLSAgICAgICAgaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwODAwMDsKLSAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyBpICogMHgwMDAxMDAwMDsKLSAgICAgICAgfQorCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgdG9wIGJvb3QgYmxvY2sgdHlwZSAgICAgICAqLworCWkgPSBpbmZvLT5zZWN0b3JfY291bnQgLSAxOworCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDQwMDA7CisJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNjAwMDsKKwlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA4MDAwOworCWZvciAoOyBpID49IDA7IGktLSkgeworCSAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyBpICogMHgwMDAxMDAwMDsKKwl9CiAgICAgfQogCiAgICAgLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCiAgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0gICAgICAgIC8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBNyAuLiBBMCkgPSAweDAyICovCi0gICAgICAgIC8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KLSAgICAgICAgYWRkcjIgPSAodm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0W2ldKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9NQU5fU1NUKQotICAgICAgICAgICAgICAgICAgaW5mby0+cHJvdGVjdFtpXSA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgaW5mby0+cHJvdGVjdFtpXSA9IGFkZHIyWzJdICYgMTsKKwkvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLworCS8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KKwlhZGRyMiA9ICh2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbaV0pOworCQlpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9NQU5fU1NUKQorCQkgIGluZm8tPnByb3RlY3RbaV0gPSAwOworCQllbHNlCisJCSAgaW5mby0+cHJvdGVjdFtpXSA9IGFkZHIyWzJdICYgMTsKICAgICB9CiAKICAgICAvKgpAQCAtNTAzLDcgKzUwMSw3IEBACiAgICAgICovCiAgICAgaWYgKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04pIHsKICAgICAgICBhZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKilpbmZvLT5zdGFydFswXTsKLSAgICAgICAgKmFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSkweDAwRjAwMEYwOyAgIC8qIHJlc2V0IGJhbmsgKi8KKwkqYWRkcjIgPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBGMDAwRjA7ICAgLyogcmVzZXQgYmFuayAqLwogICAgIH0KIAogICAgIHJldHVybiAoaW5mby0+c2l6ZSk7CkBAIC01MjEsMzIgKzUxOSwzMiBAQAogICAgIHVuc2lnbmVkIGNoYXIgc2g4YjsKIAogICAgIGlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewotICAgICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotICAgICAgICAgICAgcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDE7CisJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkgICAgcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKKwl9IGVsc2UgeworCSAgICBwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOworCX0KKwlyZXR1cm4gMTsKICAgICB9CiAKICAgICBpZiAoKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHx8Ci0gICAgICAgIChpbmZvLT5mbGFzaF9pZCA+IChGTEFTSF9NQU5fU1RNIHwgRkxBU0hfQU1EX0NPTVApKSkgewotICAgICAgICBwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgLSBhYm9ydGVkXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7CisJKGluZm8tPmZsYXNoX2lkID4gKEZMQVNIX01BTl9TVE0gfCBGTEFTSF9BTURfQ09NUCkpKSB7CisJcHJpbnRmICgiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlIC0gYWJvcnRlZFxuIik7CisJcmV0dXJuIDE7CiAgICAgfQogCiAgICAgcHJvdCA9IDA7CiAgICAgZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KSB7Ci0gICAgICAgIGlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7Ci0gICAgICAgICAgICBwcm90Kys7Ci0gICAgICAgIH0KKwlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgeworCSAgICBwcm90Kys7CisJfQogICAgIH0KIAogICAgIGlmIChwcm90KSB7Ci0gICAgICAgIHByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKLSAgICAgICAgICAgIHByb3QpOworCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKKwkgICAgcHJvdCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmICgiXG4iKTsKKwlwcmludGYgKCJcbiIpOwogICAgIH0KIAogICAgIGxfc2VjdCA9IC0xOwpAQCAtNTY4LDI4ICs1NjYsMjggQEAKIAogICAgIC8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KICAgICBmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7IHNlY3QrKykgewotICAgICAgICBpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7IC8qIG5vdCBwcm90ZWN0ZWQgKi8KLSAgICAgICAgICAgIGFkZHIgPSAoRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0WzBdICsgKAorCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsgLyogbm90IHByb3RlY3RlZCAqLworCSAgICBhZGRyID0gKEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFswXSArICgKIAkJCQkoaW5mby0+c3RhcnRbc2VjdF0gLSBpbmZvLT5zdGFydFswXSkgPDwgc2g4YikpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfTUFOX1NTVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJbQUREUjAgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcltBRERSMSA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyW0FERFIwIDw8IHNoOGJdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJbQUREUjAgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcltBRERSMSA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyWzBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTAwMDUwOyAgLyogYmxvY2sgZXJhc2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGVsYXkoMzAwMDApOyAgLyogd2FpdCAzMCBtcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJbMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDAzMDAwMzA7ICAvKiBzZWN0b3IgZXJhc2UgKi8KLSAgICAgICAgICAgIGxfc2VjdCA9IHNlY3Q7Ci0gICAgICAgIH0KKwkJCWlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX01BTl9TU1QpCisJCQkgIHsKKwkJCSAgICBhZGRyW0FERFIwIDw8IHNoOGJdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOworCQkJICAgIGFkZHJbQUREUjEgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7CisJCQkgICAgYWRkcltBRERSMCA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MDsKKwkJCSAgICBhZGRyW0FERFIwIDw8IHNoOGJdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOworCQkJICAgIGFkZHJbQUREUjEgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7CisJCQkgICAgYWRkclswXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDUwMDA1MDsgIC8qIGJsb2NrIGVyYXNlICovCisJCQkgICAgdWRlbGF5KDMwMDAwKTsgIC8qIHdhaXQgMzAgbXMgKi8KKwkJCSAgfQorCQkJZWxzZQorCQkJICBhZGRyWzBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwMzAwMDMwOyAgLyogc2VjdG9yIGVyYXNlICovCisJICAgIGxfc2VjdCA9IHNlY3Q7CisJfQogICAgIH0KIAogICAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwogICAgIGlmIChmbGFnKQotICAgICAgICBlbmFibGVfaW50ZXJydXB0cygpOworCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAKICAgICAvKiB3YWl0IGF0IGxlYXN0IDgwdXMgLSBsZXQncyB3YWl0IDEgbXMgKi8KICAgICB1ZGVsYXkgKDEwMDApOwpAQCAtNTk4LDIyICs1OTYsMjIgQEAKICAgICAgKiBXZSB3YWl0IGZvciB0aGUgbGFzdCB0cmlnZ2VyZWQgc2VjdG9yCiAgICAgICovCiAgICAgaWYgKGxfc2VjdCA8IDApCi0gICAgICAgIGdvdG8gRE9ORTsKKwlnb3RvIERPTkU7CiAKICAgICBzdGFydCA9IGdldF90aW1lciAoMCk7CiAgICAgbGFzdCAgPSBzdGFydDsKICAgICBhZGRyID0gKEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFswXSArICgKIAkJCShpbmZvLT5zdGFydFtsX3NlY3RdIC0gaW5mby0+c3RhcnRbMF0pIDw8IHNoOGIpKTsKICAgICB3aGlsZSAoKGFkZHJbMF0gJiAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApICE9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgewotICAgICAgICBpZiAoKG5vdyA9IGdldF90aW1lcihzdGFydCkpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKLSAgICAgICAgICAgIHByaW50ZiAoIlRpbWVvdXRcbiIpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KLSAgICAgICAgaWYgKChub3cgLSBsYXN0KSA+IDEwMDApIHsgIC8qIGV2ZXJ5IHNlY29uZCAqLwotICAgICAgICAgICAgc2VyaWFsX3B1dGMgKCcuJyk7Ci0gICAgICAgICAgICBsYXN0ID0gbm93OwotICAgICAgICB9CisJaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJICAgIHByaW50ZiAoIlRpbWVvdXRcbiIpOworCSAgICByZXR1cm4gMTsKKwl9CisJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KKwlpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgeyAgLyogZXZlcnkgc2Vjb25kICovCisJICAgIHNlcmlhbF9wdXRjICgnLicpOworCSAgICBsYXN0ID0gbm93OworCX0KICAgICB9CiAKIERPTkU6CkBAIC02NDMsNDIgKzY0MSw0MiBAQAogICAgICAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKICAgICAgKi8KICAgICBpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKLSAgICAgICAgZGF0YSA9IDA7Ci0gICAgICAgIGZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApIHsKLSAgICAgICAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoOyBpPDQgJiYgY250PjA7ICsraSkgewotICAgICAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotICAgICAgICAgICAgLS1jbnQ7Ci0gICAgICAgICAgICArK2NwOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoOyBjbnQ9PTAgJiYgaTw0OyArK2ksICsrY3ApIHsKLSAgICAgICAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotICAgICAgICB9CisJZGF0YSA9IDA7CisJZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgeworCSAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwl9CisJZm9yICg7IGk8NCAmJiBjbnQ+MDsgKytpKSB7CisJICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkgICAgLS1jbnQ7CisJICAgICsrY3A7CisJfQorCWZvciAoOyBjbnQ9PTAgJiYgaTw0OyArK2ksICsrY3ApIHsKKwkgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CisJfQogCi0gICAgICAgIGlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIChyYyk7Ci0gICAgICAgIH0KLSAgICAgICAgd3AgKz0gNDsKKwlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKKwkgICAgcmV0dXJuIChyYyk7CisJfQorCXdwICs9IDQ7CiAgICAgfQogCiAgICAgLyoKICAgICAgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKICAgICAgKi8KICAgICB3aGlsZSAoY250ID49IDQpIHsKLSAgICAgICAgZGF0YSA9IDA7Ci0gICAgICAgIGZvciAoaT0wOyBpPDQ7ICsraSkgewotICAgICAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIChyYyk7Ci0gICAgICAgIH0KLSAgICAgICAgd3AgICs9IDQ7Ci0gICAgICAgIGNudCAtPSA0OworCWRhdGEgPSAwOworCWZvciAoaT0wOyBpPDQ7ICsraSkgeworCSAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJfQorCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgeworCSAgICByZXR1cm4gKHJjKTsKKwl9CisJd3AgICs9IDQ7CisJY250IC09IDQ7CiAgICAgfQogCiAgICAgaWYgKGNudCA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAoMCk7CisJcmV0dXJuICgwKTsKICAgICB9CiAKICAgICAvKgpAQCAtNjg2LDExICs2ODQsMTEgQEAKICAgICAgKi8KICAgICBkYXRhID0gMDsKICAgICBmb3IgKGk9MCwgY3A9d3A7IGk8NCAmJiBjbnQ+MDsgKytpLCArK2NwKSB7Ci0gICAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLSAgICAgICAgLS1jbnQ7CisJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCS0tY250OwogICAgIH0KICAgICBmb3IgKDsgaTw0OyArK2ksICsrY3ApIHsKLSAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CisJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CiAgICAgfQogCiAgICAgcmV0dXJuICh3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSk7CkBAIC03MDQsMTIgKzcwMiwxMiBAQAogICovCiBzdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSkKIHsKLSAgICAgICAgdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKilpbmZvLT5zdGFydFswXTsKLSAgICAgICAgdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpkZXN0MjsKLSAgICAgICAgdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpkYXRhMiA9IChGTEFTSF9XT1JEX1NJWkUgKikmZGF0YTsKKwl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSAqKWluZm8tPnN0YXJ0WzBdOworCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqZGVzdDI7CisJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpkYXRhMiA9IChGTEFTSF9XT1JEX1NJWkUgKikmZGF0YTsKICAgICB1bG9uZyBzdGFydDsKICAgICBpbnQgZmxhZzsKLSAgICAgICAgaW50IGk7CisJaW50IGk7CiAgICAgdW5zaWduZWQgY2hhciBzaDhiOwogCiAgICAgLyogQ2hlY2sgdGhlIFJPTSBDUyAqLwpAQCAtNzIzLDMyICs3MjEsMzIgQEAKIAogICAgIC8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwogICAgIGlmICgoKmRlc3QyICYgKEZMQVNIX1dPUkRfU0laRSlkYXRhKSAhPSAoRkxBU0hfV09SRF9TSVpFKWRhdGEpIHsKLSAgICAgICAgcmV0dXJuICgyKTsKKwlyZXR1cm4gKDIpOwogICAgIH0KICAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KICAgICBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKLSAgICAgICAgZm9yIChpPTA7IGk8NC9zaXplb2YoRkxBU0hfV09SRF9TSVpFKTsgaSsrKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGFkZHIyW0FERFIwIDw8IHNoOGJdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwotICAgICAgICAgICAgYWRkcjJbQUREUjEgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7Ci0gICAgICAgICAgICBhZGRyMltBRERSMCA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMEEwMDBBMDsKKwlmb3IgKGk9MDsgaTw0L3NpemVvZihGTEFTSF9XT1JEX1NJWkUpOyBpKyspCisJICB7CisJICAgIGFkZHIyW0FERFIwIDw8IHNoOGJdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOworCSAgICBhZGRyMltBRERSMSA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKKwkgICAgYWRkcjJbQUREUjAgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBMDAwQTA7CiAKLSAgICAgICAgICAgIGRlc3QyW2kgPDwgc2g4Yl0gPSBkYXRhMltpXTsKKwkgICAgZGVzdDJbaSA8PCBzaDhiXSA9IGRhdGEyW2ldOwogCi0gICAgICAgICAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgICAgIGlmIChmbGFnKQotICAgICAgICAgICAgICBlbmFibGVfaW50ZXJydXB0cygpOworCSAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwkgICAgaWYgKGZsYWcpCisJICAgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKIAotICAgICAgICAgICAgLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLwotICAgICAgICAgICAgc3RhcnQgPSBnZXRfdGltZXIgKDApOwotICAgICAgICAgICAgd2hpbGUgKChkZXN0MltpIDw8IHNoOGJdICYgKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSAhPQotICAgICAgICAgICAgICAgICAgIChkYXRhMltpXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkpIHsKLSAgICAgICAgICAgICAgaWYgKGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgewotICAgICAgICAgICAgICAgIHJldHVybiAoMSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9CisJICAgIC8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KKwkgICAgc3RhcnQgPSBnZXRfdGltZXIgKDApOworCSAgICB3aGlsZSAoKGRlc3QyW2kgPDwgc2g4Yl0gJiAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApICE9CisJCSAgIChkYXRhMltpXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkpIHsKKwkgICAgICBpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7CisJCXJldHVybiAoMSk7CisJICAgICAgfQorCSAgICB9CisJICB9CiAKICAgICByZXR1cm4gKDApOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYm13L200OHQ1OXkuYyBiL2JvYXJkL2Jtdy9tNDh0NTl5LmMKaW5kZXggNDY5ZjFhZC4uZDcyYzg2MSAxMDA2NDQKLS0tIGEvYm9hcmQvYm13L200OHQ1OXkuYworKysgYi9ib2FyZC9ibXcvbTQ4dDU5eS5jCkBAIC0zMjAsNCArMzIwLDMgQEAKIHsKICAgbTQ4X3RvZF9pbml0KCk7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2Jtdy9uczE2NTUwLmMgYi9ib2FyZC9ibXcvbnMxNjU1MC5jCmluZGV4IGI2YjZmNGMuLmIxYzI4ZWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Jtdy9uczE2NTUwLmMKKysrIGIvYm9hcmQvYm13L25zMTY1NTAuYwpAQCAtNTUsNiArNTUsMyBAQAogewogIHJldHVybiAoKGNvbV9wb3J0LT5sc3IgJiBMU1JfRFIpICE9IDApOwogfQotCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvYm13L25zMTY1NTAuaCBiL2JvYXJkL2Jtdy9uczE2NTUwLmgKaW5kZXggYjgwYWMwMi4uMGI3YjM4OSAxMDA2NDQKLS0tIGEvYm9hcmQvYm13L25zMTY1NTAuaAorKysgYi9ib2FyZC9ibXcvbnMxNjU1MC5oCkBAIC03OCw0ICs3OCwzIEBACiB1bnNpZ25lZCBjaGFyIE5TMTY1NTBfZ2V0Yyh2b2xhdGlsZSBzdHJ1Y3QgTlMxNjU1MCAqY29tX3BvcnQpOwogaW50IE5TMTY1NTBfdHN0Yyh2b2xhdGlsZSBzdHJ1Y3QgTlMxNjU1MCAqY29tX3BvcnQpOwogdm9pZCBOUzE2NTUwX3JlaW5pdCh2b2xhdGlsZSBzdHJ1Y3QgTlMxNjU1MCAqY29tX3BvcnQsIGludCBiYXVkX2Rpdmlzb3IpOwotCmRpZmYgLS1naXQgYS9ib2FyZC9ibXcvdS1ib290LmxkcyBiL2JvYXJkL2Jtdy91LWJvb3QubGRzCmluZGV4IDViYTk5YjEuLjk4NTg0ZGMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Jtdy91LWJvb3QubGRzCisrKyBiL2JvYXJkL2Jtdy91LWJvb3QubGRzCkBAIC0xMDMsNiArMTAzLDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjYsNCArMTMxLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvYnViaW5nYTQwNWVwL01ha2VmaWxlIGIvYm9hcmQvYnViaW5nYTQwNWVwL01ha2VmaWxlCmluZGV4IDEyYjJmYTguLjk3ZDZhMWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2J1YmluZ2E0MDVlcC9NYWtlZmlsZQorKysgYi9ib2FyZC9idWJpbmdhNDA1ZXAvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIFNPQkpTCT0gaW5pdC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL2J1YmluZ2E0MDVlcC9mbGFzaC5jIGIvYm9hcmQvYnViaW5nYTQwNWVwL2ZsYXNoLmMKaW5kZXggZjkzZGNkNC4uNmE5OTA3YyAxMDA2NDQKLS0tIGEvYm9hcmQvYnViaW5nYTQwNWVwL2ZsYXNoLmMKKysrIGIvYm9hcmQvYnViaW5nYTQwNWVwL2ZsYXNoLmMKQEAgLTczLDggKzczLDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIHNpemVfYjAsIHNpemVfYjE7CiAJaW50IGk7Ci0gICAgICAgIHVpbnQgcGJjcjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX2IwLCBiYXNlX2IxOworCXVpbnQgcGJjcjsKKwl1bnNpZ25lZCBsb25nIGJhc2VfYjAsIGJhc2VfYjE7CiAKIAkvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCiAJZm9yIChpPTA7IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7CkBAIC0xNzIsNyArMTcyLDYgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbykKQEAgLTE4MCwxMSArMTc5LDExIEBACiAJaW50IGk7CiAKIAkvKiBzZXQgdXAgc2VjdG9yIHN0YXJ0IGFkZHJlc3MgdGFibGUgKi8KLSAgICAgICAgaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX1NTVCkgfHwKKwlpZiAoKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1NUKSB8fAogCSAgICAoaW5mby0+Zmxhc2hfaWQgID09IEZMQVNIX0FNMDQwKSl7CiAJICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKIAkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKTsKLSAgICAgICAgfSBlbHNlIHsKKwl9IGVsc2UgewogCSAgICBpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9CVFlQRSkgewogCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KIAkJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKQEAgLTIxMiwxMCArMjExLDEwIEBACiB2b2lkIGZsYXNoX3ByaW50X2luZm8gIChmbGFzaF9pbmZvX3QgKmluZm8pCiB7CiAJaW50IGk7Ci0gICAgICAgIGludCBrOwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaW50IGVyYXNlZDsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqZmxhc2g7CisJaW50IGs7CisJaW50IHNpemU7CisJaW50IGVyYXNlZDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpmbGFzaDsKIAogCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CiAJCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKQEAgLTI2MSwyNCArMjYwLDI0IEBACiAKIAlwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CiAJZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIENoZWNrIGlmIHdob2xlIHNlY3RvciBpcyBlcmFzZWQKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoaSAhPSAoaW5mby0+c2VjdG9yX2NvdW50LTEpKQotICAgICAgICAgICAgICAgICAgc2l6ZSA9IGluZm8tPnN0YXJ0W2krMV0gLSBpbmZvLT5zdGFydFtpXTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzaXplID0gaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gaW5mby0+c3RhcnRbaV07Ci0gICAgICAgICAgICAgICAgZXJhc2VkID0gMTsKLSAgICAgICAgICAgICAgICBmbGFzaCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopaW5mby0+c3RhcnRbaV07Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHNpemUgPj4gMjsgICAgICAgIC8qIGRpdmlkZSBieSA0IGZvciBsb25nd29yZCBhY2Nlc3MgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGs9MDsgazxzaXplOyBrKyspCi0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqZmxhc2grKyAhPSAweGZmZmZmZmZmKQotICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyYXNlZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9CisJCS8qCisJCSAqIENoZWNrIGlmIHdob2xlIHNlY3RvciBpcyBlcmFzZWQKKwkJICovCisJCWlmIChpICE9IChpbmZvLT5zZWN0b3JfY291bnQtMSkpCisJCSAgc2l6ZSA9IGluZm8tPnN0YXJ0W2krMV0gLSBpbmZvLT5zdGFydFtpXTsKKwkJZWxzZQorCQkgIHNpemUgPSBpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUgLSBpbmZvLT5zdGFydFtpXTsKKwkJZXJhc2VkID0gMTsKKwkJZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0W2ldOworCQlzaXplID0gc2l6ZSA+PiAyOyAgICAgICAgLyogZGl2aWRlIGJ5IDQgZm9yIGxvbmd3b3JkIGFjY2VzcyAqLworCQlmb3IgKGs9MDsgazxzaXplOyBrKyspCisJCSAgeworCQkgICAgaWYgKCpmbGFzaCsrICE9IDB4ZmZmZmZmZmYpCisJCSAgICAgIHsKKwkJCWVyYXNlZCA9IDA7CisJCQlicmVhazsKKwkJICAgICAgfQorCQkgIH0KIAogCQlpZiAoKGkgJSA1KSA9PSAwKQogCQkJcHJpbnRmICgiXG4gICAiKTsKQEAgLTMxMyw3ICszMTIsNyBAQAogCXNob3J0IGk7CiAJRkxBU0hfV09SRF9TSVpFIHZhbHVlOwogCXVsb25nIGJhc2UgPSAodWxvbmcpYWRkcjsKLSAgICAgICAgdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKilhZGRyOworCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYWRkcjIgPSAoRkxBU0hfV09SRF9TSVpFICopYWRkcjsKIAogCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCiAJYWRkcjJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwpAQCAtMzQ1LDE0ICszNDQsMTQgQEAKIAogI2lmZGVmIENPTkZJR19BRENJT1AKIAl2YWx1ZSA9IGFkZHIyWzBdOwkJCS8qIGRldmljZSBJRAkJKi8KLSAgICAgICAgLyogICAgICAgIHByaW50ZigiXG5kZXZfY29kZT0leFxuIiwgdmFsdWUpOyAqLworCS8qICAgICAgICBwcmludGYoIlxuZGV2X2NvZGU9JXhcbiIsIHZhbHVlKTsgKi8KICNlbHNlCiAJdmFsdWUgPSBhZGRyMlsxXTsJCQkvKiBkZXZpY2UgSUQJCSovCiAjZW5kaWYKIAogCXN3aXRjaCAodmFsdWUpIHsKIAljYXNlIChGTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0YwNDBCOgotCSAgICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU0wNDA7CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMDQwOwogCQlpbmZvLT5zZWN0b3JfY291bnQgPSA4OwogCQlpbmZvLT5zaXplID0gMHgwMDgwMDAwOyAvKiA9PiA1MTIga28gKi8KIAkJYnJlYWs7CkBAIC00MjMsMTEgKzQyMiwxMSBAQAogCX0KIAogCS8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRkcmVzcyB0YWJsZSAqLwotICAgICAgICBpZiAoKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1NUKSB8fAorCWlmICgoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TU1QpIHx8CiAJICAgIChpbmZvLT5mbGFzaF9pZCAgPT0gRkxBU0hfQU0wNDApKXsKIAkgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQogCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMTAwMDApOwotICAgICAgICB9IGVsc2UgeworCX0gZWxzZSB7CiAJICAgIGlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX0JUWVBFKSB7CiAJCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgYm90dG9tIGJvb3QgYmxvY2sgdHlwZQkqLwogCQlpbmZvLT5zdGFydFswXSA9IGJhc2UgKyAweDAwMDAwMDAwOwpAQCAtNDU4LDEwICs0NTcsMTAgQEAKIAkJaW5mby0+cHJvdGVjdFtpXSA9IGFkZHIyWzRdICYgMTsKICNlbHNlCiAJCWFkZHIyID0gKHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFtpXSk7Ci0gICAgICAgICAgICAgICAgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1NUKQotICAgICAgICAgICAgICAgICAgaW5mby0+cHJvdGVjdFtpXSA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgaW5mby0+cHJvdGVjdFtpXSA9IGFkZHIyWzJdICYgMTsKKwkJaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1NUKQorCQkgIGluZm8tPnByb3RlY3RbaV0gPSAwOworCQllbHNlCisJCSAgaW5mby0+cHJvdGVjdFtpXSA9IGFkZHIyWzJdICYgMTsKICNlbmRpZgogCX0KIApAQCAtNDcyLDkgKzQ3MSw5IEBACiAjaWYgMCAvKiB0ZXN0LW9ubHkgKi8KICNpZmRlZiBDT05GSUdfQURDSU9QCiAJCWFkZHIyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilpbmZvLT5zdGFydFswXTsKLSAgICAgICAgICAgICAgICBhZGRyMltBRERSMF0gPSAweEFBOwotICAgICAgICAgICAgICAgIGFkZHIyW0FERFIxXSA9IDB4NTU7Ci0gICAgICAgICAgICAgICAgYWRkcjJbQUREUjBdID0gMHhGMDsgIC8qIHJlc2V0IGJhbmsgKi8KKwkJYWRkcjJbQUREUjBdID0gMHhBQTsKKwkJYWRkcjJbQUREUjFdID0gMHg1NTsKKwkJYWRkcjJbQUREUjBdID0gMHhGMDsgIC8qIHJlc2V0IGJhbmsgKi8KICNlbHNlCiAJCWFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSAqKWluZm8tPnN0YXJ0WzBdOwogCQkqYWRkcjIgPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBGMDAwRjA7CS8qIHJlc2V0IGJhbmsgKi8KQEAgLTQ5NiwxNSArNDk1LDE1IEBACiAJc3RhcnQgPSBnZXRfdGltZXIgKDApOwogICAgIGxhc3QgID0gc3RhcnQ7CiAgICAgd2hpbGUgKChhZGRyWzBdICYgKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSAhPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApIHsKLSAgICAgICAgaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7Ci0gICAgICAgICAgICBwcmludGYgKCJUaW1lb3V0XG4iKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICAvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotICAgICAgICBpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgeyAgLyogZXZlcnkgc2Vjb25kICovCi0gICAgICAgICAgICBwdXRjICgnLicpOwotICAgICAgICAgICAgbGFzdCA9IG5vdzsKLSAgICAgICAgfQorCWlmICgobm93ID0gZ2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCSAgICBwcmludGYgKCJUaW1lb3V0XG4iKTsKKwkgICAgcmV0dXJuIC0xOworCX0KKwkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLworCWlmICgobm93IC0gbGFzdCkgPiAxMDAwKSB7ICAvKiBldmVyeSBzZWNvbmQgKi8KKwkgICAgcHV0YyAoJy4nKTsKKwkgICAgbGFzdCA9IG5vdzsKKwl9CiAgICAgfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYnViaW5nYTQwNWVwL2luaXQuUyBiL2JvYXJkL2J1YmluZ2E0MDVlcC9pbml0LlMKaW5kZXggMTJjNTFlOC4uZTQ3ODUyNSAxMDA2NDQKLS0tIGEvYm9hcmQvYnViaW5nYTQwNWVwL2luaXQuUworKysgYi9ib2FyZC9idWJpbmdhNDA1ZXAvaW5pdC5TCkBAIC01MCw2ICs1MCw2IEBACiAvKiBGdW5jdGlvbjogICAgIHNkcmFtX2luaXQgKi8KIC8qIERlc2NyaXB0aW9uOiAgRHVtbXkgaW1wbGVtZW50YXRpb24gaGVyZSAtIGRvbmUgaW4gQyBsYXRlciAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICAuZ2xvYmwgIHNkcmFtX2luaXQKKwkuZ2xvYmwgIHNkcmFtX2luaXQKIHNkcmFtX2luaXQ6Ci0gICAgICAgIGJscgorCWJscgpkaWZmIC0tZ2l0IGEvYm9hcmQvYnViaW5nYTQwNWVwL3UtYm9vdC5sZHMgYi9ib2FyZC9idWJpbmdhNDA1ZXAvdS1ib290LmxkcwppbmRleCBhMWRkZDg0Li4zODk0NjE0IDEwMDY0NAotLS0gYS9ib2FyZC9idWJpbmdhNDA1ZXAvdS1ib290LmxkcworKysgYi9ib2FyZC9idWJpbmdhNDA1ZXAvdS1ib290LmxkcwpAQCAtMTIxLDYgKzEyMSwxMCBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL2J1YmluZ2E0MDVlcC91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvYnViaW5nYTQwNWVwL3UtYm9vdC5sZHMuZGVidWcKaW5kZXggNjliNzg3Mi4uZGY1MGI3ZCAxMDA2NDQKLS0tIGEvYm9hcmQvYnViaW5nYTQwNWVwL3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvYnViaW5nYTQwNWVwL3UtYm9vdC5sZHMuZGVidWcKQEAgLTE0NCw0ICsxNDQsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9jMm1vbi9NYWtlZmlsZSBiL2JvYXJkL2MybW9uL01ha2VmaWxlCmluZGV4IDM1Yjg0MjguLjdhMjAxNGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2MybW9uL01ha2VmaWxlCisrKyBiL2JvYXJkL2MybW9uL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9jMm1vbi91LWJvb3QubGRzIGIvYm9hcmQvYzJtb24vdS1ib290LmxkcwppbmRleCA0YjAxMjlmLi44NmU1ODdmIDEwMDY0NAotLS0gYS9ib2FyZC9jMm1vbi91LWJvb3QubGRzCisrKyBiL2JvYXJkL2MybW9uL3UtYm9vdC5sZHMKQEAgLTEwOSw2ICsxMDksMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzMSw0ICsxMzYsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9jMm1vbi91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvYzJtb24vdS1ib290Lmxkcy5kZWJ1ZwppbmRleCA4ZGM2ZDQwLi5mNmY3Y2Y0IDEwMDY0NAotLS0gYS9ib2FyZC9jMm1vbi91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL2MybW9uL3UtYm9vdC5sZHMuZGVidWcKQEAgLTEwNiw2ICsxMDYsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyOCw0ICsxMzMsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9jbWkvTWFrZWZpbGUgYi9ib2FyZC9jbWkvTWFrZWZpbGUKaW5kZXggMGE5MmRhOC4uMjMyNGQ4NyAxMDA2NDQKLS0tIGEvYm9hcmQvY21pL01ha2VmaWxlCisrKyBiL2JvYXJkL2NtaS9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogU09CSlMJOj0KIAogJChMSUIpOgkkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvY21pL2ZsYXNoLmMgYi9ib2FyZC9jbWkvZmxhc2guYwppbmRleCA5YzgwMmI5Li5mN2MyNWY0IDEwMDY0NAotLS0gYS9ib2FyZC9jbWkvZmxhc2guYworKysgYi9ib2FyZC9jbWkvZmxhc2guYwpAQCAtNDU4LDcgKzQ1OCw3IEBACiAJaWYgKCEoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykpIHsKIAkJcmV0dXJuIDQ7CiAJfQotICAgICAgICAqYWRkciA9IEZMQVNIX0NNRF9FUkFTRV9DT05GSVJNOworCSphZGRyID0gRkxBU0hfQ01EX0VSQVNFX0NPTkZJUk07CiAJKmFkZHIgPSBGTEFTSF9DTURfV1JJVEU7CiAKIAkqKCh2dV9zaG9ydCAqKWRlc3QpID0gZGF0YTsKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCS8qIHdhaXQgZm9yIGVycm9yIG9yIGZpbmlzaCAqLwogCXdoaWxlKCEoYWRkclswXSAmIEZMQVNIX1NUQVRVU19ET05FKSl7CiAJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKLQkJICAJYWRkclswXSA9IEZMQVNIX0NNRF9SRVNFVDsKKwkJCWFkZHJbMF0gPSBGTEFTSF9DTURfUkVTRVQ7CiAJCQlyZXR1cm4gKDEpOwogCQl9CiAJfQpAQCAtNTA1LDcgKzUwNSw3IEBACiAJc3RhcnQgPSBnZXRfdGltZXIgKDApOwogCXdoaWxlKCEoYWRkclswXSAmIEZMQVNIX1NUQVRVU19ET05FKSl7CiAJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKLQkJICAJcHJpbnRmKCJGbGFzaCBwcm90ZWN0IHRpbWVvdXQgYXQgYWRkcmVzcyAlbHhcbiIsICBpbmZvLT5zdGFydFtzZWN0b3JdKTsKKwkJCXByaW50ZigiRmxhc2ggcHJvdGVjdCB0aW1lb3V0IGF0IGFkZHJlc3MgJWx4XG4iLCAgaW5mby0+c3RhcnRbc2VjdG9yXSk7CiAJCQlhZGRyWzBdID0gRkxBU0hfQ01EX1JFU0VUOwogCQkJcmV0dXJuICgxKTsKIAkJfQpkaWZmIC0tZ2l0IGEvYm9hcmQvY21pL3UtYm9vdC5sZHMgYi9ib2FyZC9jbWkvdS1ib290LmxkcwppbmRleCAwNGNjODdhLi4zMTg4ODAxIDEwMDY0NAotLS0gYS9ib2FyZC9jbWkvdS1ib290LmxkcworKysgYi9ib2FyZC9jbWkvdS1ib290LmxkcwpAQCAtMTAxLDYgKzEwMSwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTIzLDEwICsxMjgsMTAgQEAKIAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwotICAgIC4gPSBlbnZfc3RhcnQ7CisvKiAgIC4gPSBlbnZfc3RhcnQ7CiAJLnBwY2Vudgk6CiAJewogCQljb21tb24vZW52aXJvbm1lbnQubyAoLnBwY2VudikKIAl9Ci0KKyovCiB9CmRpZmYgLS1naXQgYS9ib2FyZC9jb2dlbnQvTWFrZWZpbGUgYi9ib2FyZC9jb2dlbnQvTWFrZWZpbGUKaW5kZXggMGNmNjQxMS4uNDA4NGM3ZSAxMDA2NDQKLS0tIGEvYm9hcmQvY29nZW50L01ha2VmaWxlCisrKyBiL2JvYXJkL2NvZ2VudC9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogU09CSlMJOj0KIAogJChMSUIpOgkkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvY29nZW50L2xjZC5jIGIvYm9hcmQvY29nZW50L2xjZC5jCmluZGV4IDk0MWVhNjUuLmMxYjRkMTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NvZ2VudC9sY2QuYworKysgYi9ib2FyZC9jb2dlbnQvbGNkLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogCiAgICAgbGNkX3dyaXRlX2NvbW1hbmQoY2xwLCBMQ0RfQ01EX0FERCArIGFkZHIpOwogICAgIGZvciAocG9zID0gMDsgKnN0cmluZyAhPSAnXDAnICYmIHBvcyA8IGxpbmVsZW47IHBvcysrKQotICAgICAgICBsY2Rfd3JpdGVfZGF0YShjbHAsICpzdHJpbmcrKyk7CisJbGNkX3dyaXRlX2RhdGEoY2xwLCAqc3RyaW5nKyspOwogfQogCiB2b2lkCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICBsaW5lcG9zID0gMDsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBMQ0RfTElORV9MRU5HVEg7IGkrKykgewotICAgICAgICBsaW5lc1swXVtpXSA9IGluaXRfbGluZTBbaV07CisJbGluZXNbMF1baV0gPSBpbml0X2xpbmUwW2ldOwogCWxpbmVzWzFdW2ldID0gaW5pdF9saW5lMVtpXTsKICAgICB9CiAKQEAgLTE1NywyNSArMTU3LDI1IEBACiAJbGluZWxlbi0tOwogCiAgICAgaWYgKGMgPT0gJ1xuJykgewotICAgICAgICBsY2RfZGlzKExDRF9MSU5FMCwgJmxpbmVzW2N1cmxpbmVeMV1bMF0pOwotICAgICAgICBsY2RfZGlzKExDRF9MSU5FMSwgJmxpbmVzW2N1cmxpbmVdWzBdKTsKKwlsY2RfZGlzKExDRF9MSU5FMCwgJmxpbmVzW2N1cmxpbmVeMV1bMF0pOworCWxjZF9kaXMoTENEX0xJTkUxLCAmbGluZXNbY3VybGluZV1bMF0pOwogCi0gICAgICAgIC8qIERvIGEgbGluZSBmZWVkICovCi0gICAgICAgIGN1cmxpbmUgXj0gMTsKKwkvKiBEbyBhIGxpbmUgZmVlZCAqLworCWN1cmxpbmUgXj0gMTsKIAlsaW5lbGVuID0gTENEX0xJTkVfTEVOR1RIOwogCWlmIChoZWFydGJlYXRfYWN0aXZlICYmIGN1cmxpbmUgPT0gMCkKIAkgICAgbGluZWxlbi0tOwotICAgICAgICBsaW5lcG9zID0gMDsKKwlsaW5lcG9zID0gMDsKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZWxlbjsgaSsrKQotICAgICAgICAgICAgbGluZXNbY3VybGluZV1baV0gPSAnICc7CisJZm9yIChpID0gMDsgaSA8IGxpbmVsZW47IGkrKykKKwkgICAgbGluZXNbY3VybGluZV1baV0gPSAnICc7CiAKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICB9CiAKICAgICAvKiBPbmx5IGFsbG93IHRvIGJlIG91dHB1dCBpZiB0aGVyZSBpcyByb29tIG9uIHRoZSBMQ0QgbGluZSAqLwogICAgIGlmIChsaW5lcG9zIDwgbGluZWxlbikKLSAgICAgICAgbGluZXNbY3VybGluZV1bbGluZXBvcysrXSA9IGM7CisJbGluZXNbY3VybGluZV1bbGluZXBvcysrXSA9IGM7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2JvYXJkL2NvZ2VudC91LWJvb3QubGRzIGIvYm9hcmQvY29nZW50L3UtYm9vdC5sZHMKaW5kZXggYzM0NzRiNC4uZDlhMWI2OCAxMDA2NDQKLS0tIGEvYm9hcmQvY29nZW50L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvY29nZW50L3UtYm9vdC5sZHMKQEAgLTk2LDYgKzk2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMTgsNCArMTIzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvY29nZW50L3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9jb2dlbnQvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCAyMjEzOGY4Li5jMGVlODQ5IDEwMDY0NAotLS0gYS9ib2FyZC9jb2dlbnQvdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9jb2dlbnQvdS1ib290Lmxkcy5kZWJ1ZwpAQCAtMTA2LDYgKzEwNiwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTI4LDQgKzEzMywzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2NwYzQ1L01ha2VmaWxlIGIvYm9hcmQvY3BjNDUvTWFrZWZpbGUKaW5kZXggY2M2NmUzMi4uZGI1YTgzYiAxMDA2NDQKLS0tIGEvYm9hcmQvY3BjNDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvY3BjNDUvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gcGx4OTAzMC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9jcGM0NS9jcGM0NS5jIGIvYm9hcmQvY3BjNDUvY3BjNDUuYwppbmRleCAwMTA2N2Y1Li4wOGJmZjQ5IDEwMDY0NAotLS0gYS9ib2FyZC9jcGM0NS9jcGM0NS5jCisrKyBiL2JvYXJkL2NwYzQ1L2NwYzQ1LmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8cGNpLmg+CiAKLWludCBzeXNDb250cm9sRGlzcGxheShpbnQgZGlnaXQsIHVjaGFyIGFzY2lpX2NvZGUpOwkJCQoraW50IHN5c0NvbnRyb2xEaXNwbGF5KGludCBkaWdpdCwgdWNoYXIgYXNjaWlfY29kZSk7CiBleHRlcm4gdm9pZCBQbHg5MDMwSW5pdCh2b2lkKTsKIAogCS8qIFdlIGhhdmUgdG8gY2xlYXIgdGhlIGluaXRpYWwgZGF0YSBhcmVhIGhlcmUuIENvdWxkbid0IGhhdmUgZG9uZSBpdApAQCAtMTcwLDQgKzE3MCwzIEBACiAKIAlyZXR1cm4gKDApOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9jcGM0NS9mbGFzaC5jIGIvYm9hcmQvY3BjNDUvZmxhc2guYwppbmRleCBhMjg5ZDA4Li45MDQ5MjM1IDEwMDY0NAotLS0gYS9ib2FyZC9jcGM0NS9mbGFzaC5jCisrKyBiL2JvYXJkL2NwYzQ1L2ZsYXNoLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAogCiAgICAgZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkrKykgewotICAgIAl2dV9sb25nICphZGRyID0gKHZ1X2xvbmcgKikoQ0ZHX0ZMQVNIX0JBU0UgKyBpICogRkxBU0hfQkFOS19TSVpFKTsKKwl2dV9sb25nICphZGRyID0gKHZ1X2xvbmcgKikoQ0ZHX0ZMQVNIX0JBU0UgKyBpICogRkxBU0hfQkFOS19TSVpFKTsKIAogCWFkZHJbMF0gPSAweDAwOTAwMDkwOwogCkBAIC05Nyw3ICs5Nyw3IEBACiAJewogCiAJICAgIGZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSAoRkxBU0hfTUFOX0lOVEVMICYgRkxBU0hfVkVORE1BU0spIHwKLQkgICAgCQkJICAgICAoSU5URUxfSURfMjhGMTYwRjNUICYgRkxBU0hfVFlQRU1BU0spOworCQkJCSAgICAgKElOVEVMX0lEXzI4RjE2MEYzVCAmIEZMQVNIX1RZUEVNQVNLKTsKIAogCX0gZWxzZSB7CiAJICAgIGZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwpAQCAtMTE1LDEyICsxMTUsMTIgQEAKIAlmb3IgKGogPSAwOyBqIDwgZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQ7IGorKykgewogCQlpZiAoaiA+IDMwKSB7CiAJCQlmbGFzaF9pbmZvW2ldLnN0YXJ0W2pdID0gQ0ZHX0ZMQVNIX0JBU0UgKwotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGkgKiBGTEFTSF9CQU5LX1NJWkUgKwotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIChNQUlOX1NFQ1RfU0laRSAqIDMxKSArIChqIC0gMzEpICogUEFSQU1fU0VDVF9TSVpFOworCQkJCQkJIGkgKiBGTEFTSF9CQU5LX1NJWkUgKworCQkJCQkJIChNQUlOX1NFQ1RfU0laRSAqIDMxKSArIChqIC0gMzEpICogUEFSQU1fU0VDVF9TSVpFOwogCQl9IGVsc2UgewogCQkJZmxhc2hfaW5mb1tpXS5zdGFydFtqXSA9IENGR19GTEFTSF9CQVNFICsKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBpICogRkxBU0hfQkFOS19TSVpFICsKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBqICogTUFJTl9TRUNUX1NJWkU7CisJCQkJCQkgaSAqIEZMQVNIX0JBTktfU0laRSArCisJCQkJCQkgaiAqIE1BSU5fU0VDVF9TSVpFOwogCQl9CiAJfQogCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOwpAQCAtMTMxLDI4ICsxMzEsMjggQEAKICNpZiBDRkdfTU9OSVRPUl9CQVNFID49IENGR19GTEFTSF9CQVNFCiAjaWYgQ0ZHX01PTklUT1JfQkFTRSA+PSBDRkdfRkxBU0hfQkFTRSArIEZMQVNIX0JBTktfU0laRQogICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgQ0ZHX01PTklUT1JfQkFTRSwKLSAgICAgICAgICAgICAgQ0ZHX01PTklUT1JfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKLSAgICAgICAgICAgICAgJmZsYXNoX2luZm9bMV0pOworCSAgICAgIENGR19NT05JVE9SX0JBU0UsCisJICAgICAgQ0ZHX01PTklUT1JfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKKwkgICAgICAmZmxhc2hfaW5mb1sxXSk7CiAjZWxzZQogICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgQ0ZHX01PTklUT1JfQkFTRSwKLSAgICAgICAgICAgICAgQ0ZHX01PTklUT1JfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKLSAgICAgICAgICAgICAgJmZsYXNoX2luZm9bMF0pOworCSAgICAgIENGR19NT05JVE9SX0JBU0UsCisJICAgICAgQ0ZHX01PTklUT1JfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKKwkgICAgICAmZmxhc2hfaW5mb1swXSk7CiAjZW5kaWYKICNlbmRpZgogCiAjaWYgKENGR19FTlZfSVNfSU5fRkxBU0ggPT0gMSkgJiYgZGVmaW5lZChDRkdfRU5WX0FERFIpCiAjaWYgQ0ZHX0VOVl9BRERSID49IENGR19GTEFTSF9CQVNFICsgRkxBU0hfQkFOS19TSVpFCiAgICAgZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotICAgICAgICAgICAgICBDRkdfRU5WX0FERFIsCi0gICAgICAgICAgICAgIENGR19FTlZfQUREUiArIENGR19FTlZfU0laRSAtIDEsCi0gICAgICAgICAgICAgICZmbGFzaF9pbmZvWzFdKTsKKwkgICAgICBDRkdfRU5WX0FERFIsCisJICAgICAgQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TSVpFIC0gMSwKKwkgICAgICAmZmxhc2hfaW5mb1sxXSk7CiAjZWxzZQogICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgQ0ZHX0VOVl9BRERSLAotICAgICAgICAgICAgICBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLAotICAgICAgICAgICAgICAmZmxhc2hfaW5mb1swXSk7CisJICAgICAgQ0ZHX0VOVl9BRERSLAorCSAgICAgIENGR19FTlZfQUREUiArIENGR19FTlZfU0laRSAtIDEsCisJICAgICAgJmZsYXNoX2luZm9bMF0pOwogI2VuZGlmCiAjZW5kaWYKIApAQCAtMjc1LDcgKzI3NSw3IEBACiAJCQl3aGlsZSAoKChhZGRyWzBdICYgMHgwMDgwMDA4MCkgIT0gMHgwMDgwMDA4MCkgfHwKIAkJCSAgICAgICAoKGFkZHJbMV0gJiAweDAwODAwMDgwKSAhPSAweDAwODAwMDgwKSApIHsKIAkJCQlpZiAoKG5vdz1nZXRfdGltZXIoc3RhcnQpKSA+Ci0JCQkJICAgICAgICAgICBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJCQkgICBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgewogCQkJCQlwcmludGYgKCJUaW1lb3V0XG4iKTsKIAkJCQkJYWRkclswXSA9IDB4MDBCMDAwQjA7IC8qIHN1c3BlbmQgZXJhc2UgKi8KIAkJCQkJYWRkclswXSA9IDB4MDBGRjAwRkY7IC8qIHRvIHJlYWQgbW9kZSAgKi8KQEAgLTMzNSw3ICszMzUsNyBAQAogCQlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgbDsgaSsrLCBjcCsrKSB7CiAJCQlpZiAoaSA+PSA0KSB7CiAJCQkJKmRhdGFoID0gKCpkYXRhaCA8PCA4KSB8Ci0JCQkJICAgICAgICAgICAgICAgICgoKmRhdGFsICYgMHhGRjAwMDAwMCkgPj4gMjQpOworCQkJCQkJKCgqZGF0YWwgJiAweEZGMDAwMDAwKSA+PiAyNCk7CiAJCQl9CiAKIAkJCSpkYXRhbCA9ICgqZGF0YWwgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKQEAgLTM0OSw3ICszNDksNyBAQAogCiAJCQlpZiAoaSA+PSA0KSB7CiAJCQkJKmRhdGFoID0gKCpkYXRhaCA8PCA4KSB8Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgICAoKCpkYXRhbCAmIDB4RkYwMDAwMDApID4+IDI0KTsKKwkJCQkJCSgoKmRhdGFsICYgMHhGRjAwMDAwMCkgPj4gMjQpOwogCQkJfQogCiAJCQkqZGF0YWwgPSAoKmRhdGFsIDw8IDgpIHwgdG1wOwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCWZvciAoOyBjbnQgPT0gMCAmJiBpIDwgRkxBU0hfV0lEVEg7ICsraSwgKytjcCkgewogCQkJaWYgKGkgPj0gNCkgewogCQkJCSpkYXRhaCA9ICgqZGF0YWggPDwgOCkgfAotCQkJCSAgICAgICAgICAgICAgICAoKCpkYXRhbCAmIDB4RkYwMDAwMDApID4+IDI0KTsKKwkJCQkJCSgoKmRhdGFsICYgMHhGRjAwMDAwMCkgPj4gMjQpOwogCQkJfQogCiAJCQkqZGF0YWwgPSAoKmRhdGFoIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CkBAIC00MDEsNyArNDAxLDcgQEAKIAlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgRkxBU0hfV0lEVEggJiYgY250ID4gMDsgKytpLCArK2NwKSB7CiAJCWNoYXIgdG1wOwogCi0gICAgICAJCXRtcCA9ICpzcmM7CisJCXRtcCA9ICpzcmM7CiAKIAkJc3JjKys7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2NwYzQ1L3BseDkwMzAuYyBiL2JvYXJkL2NwYzQ1L3BseDkwMzAuYwppbmRleCBlMzM3YmQyLi45OWVjMzlhIDEwMDY0NAotLS0gYS9ib2FyZC9jcGM0NS9wbHg5MDMwLmMKKysrIGIvYm9hcmQvY3BjNDUvcGx4OTAzMC5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAlzeXNPdXRMb25nKChtZW1iYXNlQ3NyICsgUDkwMzBfTEFTMEJBKSwgIDB4MDAwMDAwMDEpOwkJLyogZW5hYmxlIHNwYWNlIGJhc2UgKi8KIAlzeXNPdXRMb25nKChtZW1iYXNlQ3NyICsgUDkwMzBfTEFTMFJSKSwgIDB4MEZFMDAwMDApOwkJLyogMiBNQnl0ZSAqLwogCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMwQlJEKSwgMHg1MTkyODkwMCk7CQkvKiA0IHdhaXQgc3RhdGVzICovCi0Jc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0NTMEJBU0UpLCAweDAwMTAwMDAxKTsJCS8qIGVuYWJsZSAyIE1CeXRlICovCQorCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9DUzBCQVNFKSwgMHgwMDEwMDAwMSk7CQkvKiBlbmFibGUgMiBNQnl0ZSAqLwogCS8qIHJlbWFwIENTMCAoU1JBTSkgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldm5vLCBQQ0lfQkFTRV9BRERSRVNTXzIsIFNSQU1fQkFTRSk7CiAKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMxQkEpLCAgMHgwMDQwMDAwMSk7CQkvKiBlbmFibGUgc3BhY2UgYmFzZSAqLwogCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMxUlIpLCAgMHgwRkZGRkYwMCk7CQkvKiAyNTYgYnl0ZSAqLwogCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMxQlJEKSwgMHg1NTEyMjkwMCk7CQkvKiA0IHdhaXQgc3RhdGVzICovCi0Jc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0NTMUJBU0UpLCAweDAwNDAwMDgxKTsJCS8qIGVuYWJsZSAyNTYgQnl0ZSAqLwkKKwlzeXNPdXRMb25nKChtZW1iYXNlQ3NyICsgUDkwMzBfQ1MxQkFTRSksIDB4MDA0MDAwODEpOwkJLyogZW5hYmxlIDI1NiBCeXRlICovCiAJLyogcmVtYXAgQ1MxIChTVDE2NTUyIC8gQ0hBTiBBKSAqLwogCS8qIHJlbWFwIENTMSAoU1QxNjU1MiAvIENIQU4gQSkgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldm5vLCBQQ0lfQkFTRV9BRERSRVNTXzMsIFNUMTY1NTJfQV9CQVNFKTsKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMyQkEpLCAgMHgwMDgwMDAwMSk7CQkvKiBlbmFibGUgc3BhY2UgYmFzZSAqLwogCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMyUlIpLCAgMHgwRkZGRkYwMCk7CQkvKiAyNTYgYnl0ZSAqLwogCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9MQVMyQlJEKSwgMHg1NTEyMjkwMCk7CQkvKiA0IHdhaXQgc3RhdGVzICovCi0Jc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0NTMkJBU0UpLCAweDAwODAwMDgxKTsJCS8qIGVuYWJsZSAyNTYgQnl0ZSAqLwkKKwlzeXNPdXRMb25nKChtZW1iYXNlQ3NyICsgUDkwMzBfQ1MyQkFTRSksIDB4MDA4MDAwODEpOwkJLyogZW5hYmxlIDI1NiBCeXRlICovCiAJLyogcmVtYXAgQ1MyIChTVDE2NTUyIC8gQ0hBTiBCKSAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2bm8sIFBDSV9CQVNFX0FERFJFU1NfNCwgU1QxNjU1Ml9CX0JBU0UpOwogCkBAIC0xNjIsNyArMTYyLDcgQEAKIAlzeXNPdXRMb25nKChtZW1iYXNlQ3NyICsgUDkwMzBfTEFTM0JBKSwgIDB4MDBDMDAwMDEpOwkJLyogZW5hYmxlIHNwYWNlIGJhc2UgKi8KIAlzeXNPdXRMb25nKChtZW1iYXNlQ3NyICsgUDkwMzBfTEFTM1JSKSwgIDB4MEZGRkZGMDApOwkJLyogMjU2IGJ5dGUgKi8KIAlzeXNPdXRMb25nKChtZW1iYXNlQ3NyICsgUDkwMzBfTEFTM0JSRCksIDB4NTUzNTdBODApOwkJLyogOSB3YWl0IHN0YXRlcyAqLwotCXN5c091dExvbmcoKG1lbWJhc2VDc3IgKyBQOTAzMF9DUzNCQVNFKSwgMHgwMEMwMDA4MSk7CQkvKiBlbmFibGUgMjU2IEJ5dGUgKi8JCisJc3lzT3V0TG9uZygobWVtYmFzZUNzciArIFA5MDMwX0NTM0JBU0UpLCAweDAwQzAwMDgxKTsJCS8qIGVuYWJsZSAyNTYgQnl0ZSAqLwogCS8qIHJlbWFwIENTMyAoRElTUExBWSBhbmQgQkNTUikgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldm5vLCBQQ0lfQkFTRV9BRERSRVNTXzUsIEJDU1JfQkFTRSk7CiB9CkBAIC0xNzEsNCArMTcxLDMgQEAKIHsKIAkqKHVsb25nKilhZGRyZXNzID0gY3B1X3RvX2xlMzIodmFsdWUpOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9jcGM0NS91LWJvb3QubGRzIGIvYm9hcmQvY3BjNDUvdS1ib290LmxkcwppbmRleCA1OWRkYjQyLi5iMTgwN2RkIDEwMDY0NAotLS0gYS9ib2FyZC9jcGM0NS91LWJvb3QubGRzCisrKyBiL2JvYXJkL2NwYzQ1L3UtYm9vdC5sZHMKQEAgLTEwMyw2ICsxMDMsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyNiw0ICsxMzEsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9jcHU4Ni9NYWtlZmlsZSBiL2JvYXJkL2NwdTg2L01ha2VmaWxlCmluZGV4IDM1Yjg0MjguLjdhMjAxNGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NwdTg2L01ha2VmaWxlCisrKyBiL2JvYXJkL2NwdTg2L01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9jcHU4Ni91LWJvb3QubGRzIGIvYm9hcmQvY3B1ODYvdS1ib290LmxkcwppbmRleCA5ZDU2ZjEzLi5jZTZjNDU0IDEwMDY0NAotLS0gYS9ib2FyZC9jcHU4Ni91LWJvb3QubGRzCisrKyBiL2JvYXJkL2NwdTg2L3UtYm9vdC5sZHMKQEAgLTk0LDYgKzk0LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMTYsNCArMTIxLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvY3JhZGxlL01ha2VmaWxlIGIvYm9hcmQvY3JhZGxlL01ha2VmaWxlCmluZGV4IGI2OTRlMTAuLjVhMzIxZWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NyYWRsZS9NYWtlZmlsZQorKysgYi9ib2FyZC9jcmFkbGUvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIFNPQkpTCTo9IG1lbXNldHVwLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvY3JhZGxlL2NvbmZpZy5tayBiL2JvYXJkL2NyYWRsZS9jb25maWcubWsKaW5kZXggMjk3NzU3Mi4uM2ZmY2ZlOCAxMDA2NDQKLS0tIGEvYm9hcmQvY3JhZGxlL2NvbmZpZy5taworKysgYi9ib2FyZC9jcmFkbGUvY29uZmlnLm1rCkBAIC0xLDMgKzEsMiBAQAogVEVYVF9CQVNFID0gMHhhMGYwODAwMAogI1RFWFRfQkFTRSA9IDAKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvY3JhZGxlL2ZsYXNoLmMgYi9ib2FyZC9jcmFkbGUvZmxhc2guYwppbmRleCA0NjMwMjZkLi5lMmQxNzRlIDEwMDY0NAotLS0gYS9ib2FyZC9jcmFkbGUvZmxhc2guYworKysgYi9ib2FyZC9jcmFkbGUvZmxhc2guYwpAQCAtNDUsMjYgKzQ1LDI2IEBACiAgICB7CiAgICAgICB1bG9uZyBmbGFzaGJhc2UgPSAwOwogICAgICAgZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9Ci0gICAgICAgICAgKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spIHwKLSAgICAgICAgICAoSU5URUxfSURfMjhGMTI4SjMgJiBGTEFTSF9UWVBFTUFTSyk7CisJICAoSU5URUxfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSykgfAorCSAgKElOVEVMX0lEXzI4RjEyOEozICYgRkxBU0hfVFlQRU1BU0spOwogICAgICAgZmxhc2hfaW5mb1tpXS5zaXplID0gRkxBU0hfQkFOS19TSVpFOwogICAgICAgZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQgPSBDRkdfTUFYX0ZMQVNIX1NFQ1Q7CiAgICAgICBtZW1zZXQoZmxhc2hfaW5mb1tpXS5wcm90ZWN0LCAwLCBDRkdfTUFYX0ZMQVNIX1NFQ1QpOwogICAgICAgc3dpdGNoIChpKQogICAgICAgewotICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIGZsYXNoYmFzZSA9IFBIWVNfRkxBU0hfMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBmbGFzaGJhc2UgPSBQSFlTX0ZMQVNIXzI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHBhbmljKCJjb25maWd1cmVkIHRvIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkgY2FzZSAwOgorCQlmbGFzaGJhc2UgPSBQSFlTX0ZMQVNIXzE7CisJCWJyZWFrOworCSBjYXNlIDE6CisJCWZsYXNoYmFzZSA9IFBIWVNfRkxBU0hfMjsKKwkJYnJlYWs7CisJIGRlZmF1bHQ6CisJCXBhbmljKCJjb25maWd1cmVkIHRvIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKKwkJYnJlYWs7CiAgICAgICB9CiAgICAgICBmb3IgKGogPSAwOyBqIDwgZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQ7IGorKykKICAgICAgIHsKLSAgICAgICAgIGZsYXNoX2luZm9baV0uc3RhcnRbal0gPSBmbGFzaGJhc2UgKyBqKk1BSU5fU0VDVF9TSVpFOworCSBmbGFzaF9pbmZvW2ldLnN0YXJ0W2pdID0gZmxhc2hiYXNlICsgaipNQUlOX1NFQ1RfU0laRTsKICAgICAgIH0KICAgICAgIHNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOwogICAgfQpAQCAtNzIsMTQgKzcyLDE0IEBACiAgICAvKiBQcm90ZWN0IG1vbml0b3IgYW5kIGVudmlyb25tZW50IHNlY3RvcnMKICAgICAqLwogICAgZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotICAgICAgICAgICAgICAgICAgQ0ZHX0ZMQVNIX0JBU0UsCi0gICAgICAgICAgICAgICAgICBDRkdfRkxBU0hfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKLSAgICAgICAgICAgICAgICAgICZmbGFzaF9pbmZvWzBdKTsKKwkJICBDRkdfRkxBU0hfQkFTRSwKKwkJICBDRkdfRkxBU0hfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKKwkJICAmZmxhc2hfaW5mb1swXSk7CiAKICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgICAgIENGR19FTlZfQUREUiwKLSAgICAgICAgICAgICAgICAgIENGR19FTlZfQUREUiArIENGR19FTlZfU0laRSAtIDEsCi0gICAgICAgICAgICAgICAgICAmZmxhc2hfaW5mb1swXSk7CisJCSAgQ0ZHX0VOVl9BRERSLAorCQkgIENGR19FTlZfQUREUiArIENGR19FTlZfU0laRSAtIDEsCisJCSAgJmZsYXNoX2luZm9bMF0pOwogCiAgICByZXR1cm4gc2l6ZTsKIH0KQEAgLTk0LDQwICs5NCw0MCBAQAogICAgewogICAgICAgc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKQogICAgICAgewotICAgICAgICAgY2FzZSAoSU5URUxfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSyk6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJJbnRlbDogIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHByaW50ZigiVW5rbm93biBWZW5kb3IgIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJIGNhc2UgKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spOgorCQlwcmludGYoIkludGVsOiAiKTsKKwkJYnJlYWs7CisJIGRlZmF1bHQ6CisJCXByaW50ZigiVW5rbm93biBWZW5kb3IgIik7CisJCWJyZWFrOwogICAgICAgfQogCiAgICAgICBzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spCiAgICAgICB7Ci0gICAgICAgICBjYXNlIChJTlRFTF9JRF8yOEYzMjBKM0EgJiBGTEFTSF9UWVBFTUFTSyk6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIyOEYzMjBKM0EgKDMyTWJpdClcbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgY2FzZSAoSU5URUxfSURfMjhGMTI4SjMgJiBGTEFTSF9UWVBFTUFTSyk6Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCIyOEYxMjhKMyAoMTI4TWJpdClcbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBwcmludGYoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJIGNhc2UgKElOVEVMX0lEXzI4RjMyMEozQSAmIEZMQVNIX1RZUEVNQVNLKToKKwkJcHJpbnRmKCIyOEYzMjBKM0EgKDMyTWJpdClcbiIpOworCQlicmVhazsKKwkgY2FzZSAoSU5URUxfSURfMjhGMTI4SjMgJiBGTEFTSF9UWVBFTUFTSyk6CisJCXByaW50ZigiMjhGMTI4SjMgKDEyOE1iaXQpXG4iKTsKKwkJYnJlYWs7CisJIGRlZmF1bHQ6CisJCXByaW50ZigiVW5rbm93biBDaGlwIFR5cGVcbiIpOworCQlnb3RvIERvbmU7CisJCWJyZWFrOwogICAgICAgfQogCiAgICAgICBwcmludGYoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCi0gICAgICAgICAgICAgICAgaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKKwkJaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKIAogICAgICAgcHJpbnRmKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCiAgICAgICB7Ci0gICAgICAgICBpZiAoKGkgJSA1KSA9PSAwKQotICAgICAgICAgewotICAgICAgICAgICAgcHJpbnRmICgiXG4gICAiKTsKLSAgICAgICAgIH0KLSAgICAgICAgIHByaW50ZiAoIiAlMDhsWCVzIiwgaW5mby0+c3RhcnRbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIpOworCSBpZiAoKGkgJSA1KSA9PSAwKQorCSB7CisJICAgIHByaW50ZiAoIlxuICAgIik7CisJIH0KKwkgcHJpbnRmICgiICUwOGxYJXMiLCBpbmZvLT5zdGFydFtpXSwKKwkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7CiAgICAgICB9CiAgICAgICBwcmludGYgKCJcbiIpOwogICAgICAgaW5mbysrOwpAQCAtMTQ1LDI1ICsxNDUsMjUgQEAKICAgIGludCByYyA9IEVSUl9PSzsKIAogICAgaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pCi0gICAgICAgIHJldHVybiBFUlJfVU5LTk9XTl9GTEFTSF9UWVBFOworCXJldHVybiBFUlJfVU5LTk9XTl9GTEFTSF9UWVBFOwogCiAgICBpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLSAgICAgICAgcmV0dXJuIEVSUl9JTlZBTDsKKwlyZXR1cm4gRVJSX0lOVkFMOwogICAgfQogCiAgICBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9Ci0gICAgICAgIChJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSkgewotICAgICAgICByZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVkVORE9SOworCShJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSkgeworCXJldHVybiBFUlJfVU5LTk9XTl9GTEFTSF9WRU5ET1I7CiAgICB9CiAKICAgIHByb3QgPSAwOwogICAgZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KSB7CiAgICAgICBpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewotICAgICAgICAgICAgcHJvdCsrOworCSAgICBwcm90Kys7CiAgICAgICB9CiAgICB9CiAgICBpZiAocHJvdCkKLSAgICAgICAgcmV0dXJuIEVSUl9QUk9URUNURUQ7CisJcmV0dXJuIEVSUl9QUk9URUNURUQ7CiAKICAgIC8qCiAgICAgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0CkBAIC0xODMsMjQgKzE4MywyNCBAQAogICAgICAgcmVzZXRfdGltZXJfbWFza2VkKCk7CiAKICAgICAgIGlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsgICAgICAgIC8qIG5vdCBwcm90ZWN0ZWQgKi8KLSAgICAgICAgICB2dV9zaG9ydCAqYWRkciA9ICh2dV9zaG9ydCAqKShpbmZvLT5zdGFydFtzZWN0XSk7CisJICB2dV9zaG9ydCAqYWRkciA9ICh2dV9zaG9ydCAqKShpbmZvLT5zdGFydFtzZWN0XSk7CiAKLSAgICAgICAgICAqYWRkciA9IDB4MjA7ICAgICAgICAvKiBlcmFzZSBzZXR1cCAqLwotICAgICAgICAgICphZGRyID0gMHhEMDsgICAgICAgIC8qIGVyYXNlIGNvbmZpcm0gKi8KKwkgICphZGRyID0gMHgyMDsgICAgICAgIC8qIGVyYXNlIHNldHVwICovCisJICAqYWRkciA9IDB4RDA7ICAgICAgICAvKiBlcmFzZSBjb25maXJtICovCiAKLSAgICAgICAgICB3aGlsZSAoKCphZGRyICYgMHg4MCkgIT0gMHg4MCkgewotICAgICAgICAgICAgIGlmIChnZXRfdGltZXJfbWFza2VkKCkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgewotICAgICAgICAgICAgICAgICphZGRyID0gMHhCMDsgLyogc3VzcGVuZCBlcmFzZSAqLwotICAgICAgICAgICAgICAgICphZGRyID0gMHhGRjsgICAgICAgIC8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotICAgICAgICAgICAgICAgIHJjID0gRVJSX1RJTU9VVDsKLSAgICAgICAgICAgICAgICBnb3RvIG91dGFoZXJlOwotICAgICAgICAgICAgIH0KLSAgICAgICAgICB9CisJICB3aGlsZSAoKCphZGRyICYgMHg4MCkgIT0gMHg4MCkgeworCSAgICAgaWYgKGdldF90aW1lcl9tYXNrZWQoKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJCSphZGRyID0gMHhCMDsgLyogc3VzcGVuZCBlcmFzZSAqLworCQkqYWRkciA9IDB4RkY7ICAgICAgICAvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwkJcmMgPSBFUlJfVElNT1VUOworCQlnb3RvIG91dGFoZXJlOworCSAgICAgfQorCSAgfQogCi0gICAgICAgICAgLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGNvbW1hbmQgKi8KLSAgICAgICAgICAqYWRkciA9IDB4NTA7Ci0gICAgICAgICAgLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCi0gICAgICAgICAgKmFkZHIgPSAweEZGOworCSAgLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyIGNvbW1hbmQgKi8KKwkgICphZGRyID0gMHg1MDsKKwkgIC8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLworCSAgKmFkZHIgPSAweEZGOwogICAgICAgfQogICAgICAgcHJpbnRmKCJvay5cbiIpOwogICAgfQpAQCAtMjU4LDMwICsyNTgsMzAgQEAKICAgIHdoaWxlKCgodmFsID0gKmFkZHIpICYgMHg4MCkgIT0gMHg4MCkKICAgIHsKICAgICAgIGlmIChnZXRfdGltZXJfbWFza2VkKCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgewotICAgICAgICAgIHJjID0gRVJSX1RJTU9VVDsKLSAgICAgICAgICAvKiBzdXNwZW5kIHByb2dyYW0gY29tbWFuZCAqLwotICAgICAgICAgICphZGRyID0gMHhCMDsKLSAgICAgICAgICBnb3RvIG91dGFoZXJlOworCSAgcmMgPSBFUlJfVElNT1VUOworCSAgLyogc3VzcGVuZCBwcm9ncmFtIGNvbW1hbmQgKi8KKwkgICphZGRyID0gMHhCMDsKKwkgIGdvdG8gb3V0YWhlcmU7CiAgICAgICB9CiAgICB9CiAKICAgIGlmKHZhbCAmIDB4MUEpIHsgICAgICAgIC8qIGNoZWNrIGZvciBlcnJvciAqLwogICAgICAgcHJpbnRmKCJcbkZsYXNoIHdyaXRlIGVycm9yICUwMnggYXQgYWRkcmVzcyAlMDhseFxuIiwKLSAgICAgICAgICAgICAgIChpbnQpdmFsLCAodW5zaWduZWQgbG9uZylkZXN0KTsKKwkgICAgICAgKGludCl2YWwsICh1bnNpZ25lZCBsb25nKWRlc3QpOwogICAgICAgaWYodmFsICYgKDE8PDMpKSB7Ci0gICAgICAgICBwcmludGYoIlZvbHRhZ2UgcmFuZ2UgZXJyb3IuXG4iKTsKLSAgICAgICAgIHJjID0gRVJSX1BST0dfRVJST1I7Ci0gICAgICAgICBnb3RvIG91dGFoZXJlOworCSBwcmludGYoIlZvbHRhZ2UgcmFuZ2UgZXJyb3IuXG4iKTsKKwkgcmMgPSBFUlJfUFJPR19FUlJPUjsKKwkgZ290byBvdXRhaGVyZTsKICAgICAgIH0KICAgICAgIGlmKHZhbCAmICgxPDwxKSkgewotICAgICAgICAgcHJpbnRmKCJEZXZpY2UgcHJvdGVjdCBlcnJvci5cbiIpOwotICAgICAgICAgcmMgPSBFUlJfUFJPVEVDVEVEOwotICAgICAgICAgZ290byBvdXRhaGVyZTsKKwkgcHJpbnRmKCJEZXZpY2UgcHJvdGVjdCBlcnJvci5cbiIpOworCSByYyA9IEVSUl9QUk9URUNURUQ7CisJIGdvdG8gb3V0YWhlcmU7CiAgICAgICB9CiAgICAgICBpZih2YWwgJiAoMTw8NCkpIHsKLSAgICAgICAgIHByaW50ZigiUHJvZ3JhbW1pbmcgZXJyb3IuXG4iKTsKLSAgICAgICAgIHJjID0gRVJSX1BST0dfRVJST1I7Ci0gICAgICAgICBnb3RvIG91dGFoZXJlOworCSBwcmludGYoIlByb2dyYW1taW5nIGVycm9yLlxuIik7CisJIHJjID0gRVJSX1BST0dfRVJST1I7CisJIGdvdG8gb3V0YWhlcmU7CiAgICAgICB9CiAgICAgICByYyA9IEVSUl9QUk9HX0VSUk9SOwogICAgICAgZ290byBvdXRhaGVyZTsKQEAgLTMxNywxOSArMzE3LDE5IEBACiAgICB7CiAgICAgICBkYXRhID0gMDsKICAgICAgIGZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApIHsKLSAgICAgICAgICAgZGF0YSA9IChkYXRhID4+IDgpIHwgKCoodWNoYXIgKiljcCA8PCA4KTsKKwkgICBkYXRhID0gKGRhdGEgPj4gOCkgfCAoKih1Y2hhciAqKWNwIDw8IDgpOwogICAgICAgfQogICAgICAgZm9yICg7IGk8MiAmJiBjbnQ+MDsgKytpKSB7Ci0gICAgICAgICBkYXRhID0gKGRhdGEgPj4gOCkgfCAoKnNyYysrIDw8IDgpOwotICAgICAgICAgLS1jbnQ7Ci0gICAgICAgICArK2NwOworCSBkYXRhID0gKGRhdGEgPj4gOCkgfCAoKnNyYysrIDw8IDgpOworCSAtLWNudDsKKwkgKytjcDsKICAgICAgIH0KICAgICAgIGZvciAoOyBjbnQ9PTAgJiYgaTwyOyArK2ksICsrY3ApIHsKLSAgICAgICAgIGRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopY3AgPDwgOCk7CisJIGRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopY3AgPDwgOCk7CiAgICAgICB9CiAKICAgICAgIGlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotICAgICAgICAgcmV0dXJuIChyYyk7CisJIHJldHVybiAocmMpOwogICAgICAgfQogICAgICAgd3AgKz0gMjsKICAgIH0KQEAgLTM0MCw3ICszNDAsNyBAQAogICAgd2hpbGUgKGNudCA+PSAyKSB7CiAgICAgICBkYXRhID0gKigodnVfc2hvcnQqKXNyYyk7CiAgICAgICBpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLSAgICAgICAgICByZXR1cm4gKHJjKTsKKwkgIHJldHVybiAocmMpOwogICAgICAgfQogICAgICAgc3JjICs9IDI7CiAgICAgICB3cCAgKz0gMjsKZGlmZiAtLWdpdCBhL2JvYXJkL2NyYWRsZS9tZW1zZXR1cC5TIGIvYm9hcmQvY3JhZGxlL21lbXNldHVwLlMKaW5kZXggMmYxZTA0Mi4uODgwMGNiMCAxMDA2NDQKLS0tIGEvYm9hcmQvY3JhZGxlL21lbXNldHVwLlMKKysrIGIvYm9hcmQvY3JhZGxlL21lbXNldHVwLlMKQEAgLTE3MCw4ICsxNzAsOCBAQAogICAgU0VUX0xFRCAyCiAKIG1lbV9pbml0OgotICAgICAgICBAIGdldCBtZW1vcnkgY29udHJvbGxlciBiYXNlIGFkZHJlc3MKLSAgICAgICAgbGRyICAgICByMSwgID1NRU1DX0JBU0UKKwlAIGdldCBtZW1vcnkgY29udHJvbGxlciBiYXNlIGFkZHJlc3MKKwlsZHIgICAgIHIxLCAgPU1FTUNfQkFTRQogCiAKIEAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9ib2FyZC9jcmFkbGUvdS1ib290LmxkcyBiL2JvYXJkL2NyYWRsZS91LWJvb3QubGRzCmluZGV4IDQ2YmViMTUuLmQzMjFiNjIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NyYWRsZS91LWJvb3QubGRzCisrKyBiL2JvYXJkL2NyYWRsZS91LWJvb3QubGRzCkBAIC0yNiwzMCArMjYsMzUgQEAKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7Ci0gICAgICAgIC4gPSAweDAwMDAwMDAwOworCS4gPSAweDAwMDAwMDAwOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKKwkuID0gQUxJR04oNCk7CiAJLnRleHQgICAgICA6CiAJewogCSAgY3B1L3B4YS9zdGFydC5vCSgudGV4dCkKIAkgICooLnRleHQpCiAJfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmRhdGEgOiB7ICooLmRhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5nb3QgOiB7ICooLmdvdCkgfQorCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworICAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKIAogCWFybWJvb3RfZW5kX2RhdGEgPSAuOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKKwkuID0gQUxJR04oNCk7CiAJYnNzX3N0YXJ0ID0gLjsKLSAgICAgICAgLmJzcyA6IHsgKiguYnNzKSB9CisJLmJzcyA6IHsgKiguYnNzKSB9CiAJYnNzX2VuZCA9IC47CiAKIAlhcm1ib290X2VuZCA9IC47CisKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2NyYXkvTDEvTDEuYyBiL2JvYXJkL2NyYXkvTDEvTDEuYwppbmRleCBiMWUyNzgzLi5hZjA0NTZkIDEwMDY0NAotLS0gYS9ib2FyZC9jcmF5L0wxL0wxLmMKKysrIGIvYm9hcmQvY3JheS9MMS9MMS5jCkBAIC0yNSw5ICsyNSw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPDQwNWdwX2kyYy5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfbnZlZGl0Lmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3RtLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KICNpbmNsdWRlIDxydGMuaD4KICNpbmNsdWRlIDxwb3N0Lmg+CiAjaW5jbHVkZSA8bmV0Lmg+CkBAIC0yNDksNyArMjQ2LDcgQEAKIAkJCSpwID0gMHhhYWFhYWFhYTsKIAkJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKSB7CiAJCQlpZiAoKnAgIT0gMHhhYWFhYWFhYSkgewotCQkJCXByaW50ZiAoIlNEUkFNIHRlc3QgZmFpbHMgYXQ6ICUwOHgsIHdhcyAlMDh4IGV4cGVjdGVkICUwOHhcbiIsIAorCQkJCXByaW50ZiAoIlNEUkFNIHRlc3QgZmFpbHMgYXQ6ICUwOHgsIHdhcyAlMDh4IGV4cGVjdGVkICUwOHhcbiIsCiAJCQkJCQkodWludCkgcCwgKnAsIDB4YWFhYWFhYWEpOwogCQkJCXJldHVybiAxOwogCQkJfQpAQCAtMjU5LDcgKzI1Niw3IEBACiAJCQkqcCA9IDB4NTU1NTU1NTU7CiAJCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykgewogCQkJaWYgKCpwICE9IDB4NTU1NTU1NTUpIHsKLQkJCQlwcmludGYgKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4LCB3YXMgJTA4eCBleHBlY3RlZCAlMDh4XG4iLCAKKwkJCQlwcmludGYgKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4LCB3YXMgJTA4eCBleHBlY3RlZCAlMDh4XG4iLAogCQkJCQkJKHVpbnQpIHAsICpwLCAweDU1NTU1NTU1KTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KQEAgLTI2OSw3ICsyNjYsNyBAQAogCQkJKnAgPSAodW5zaWduZWQpcDsKIAkJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKSB7CiAJCQlpZiAoKnAgIT0gKHVuc2lnbmVkKXApIHsKLQkJCQlwcmludGYgKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4LCB3YXMgJTA4eCBleHBlY3RlZCAlMDh4XG4iLCAKKwkJCQlwcmludGYgKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4LCB3YXMgJTA4eCBleHBlY3RlZCAlMDh4XG4iLAogCQkJCQkJKHVpbnQpIHAsICpwLCAodWludClwKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KZGlmZiAtLWdpdCBhL2JvYXJkL2NyYXkvTDEvTWFrZWZpbGUgYi9ib2FyZC9jcmF5L0wxL01ha2VmaWxlCmluZGV4IGU3ZGMwYTguLmJmZTA5MjIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NyYXkvTDEvTWFrZWZpbGUKKysrIGIvYm9hcmQvY3JheS9MMS9NYWtlZmlsZQpAQCAtMjYsNyArMjYsNyBAQAogTElCCT0gbGliJChCT0FSRCkuYQogCiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCi1TT0JKUwk9IGluaXQubyAKK1NPQkpTCT0gaW5pdC5vCiAKICMgSEFDSzogZGVwZW5kIG5lZWRzIGJvb3RzY3JpcHQuYywgd2hpY2ggbmVlZHMgdG9vbHMvbWtpbWFnZSwgd2hpY2ggaXMgbm90CiAjIGJ1aWx0IGluIHRoZSBkZXBlbmQgc3RhZ2UuICBTby4uLiBwdXQgYm9vdHNjcmlwdC5vIGhlcmUsIG5vdCBpbiBPQkpTCmRpZmYgLS1naXQgYS9ib2FyZC9jcmF5L0wxL2ZsYXNoLmMgYi9ib2FyZC9jcmF5L0wxL2ZsYXNoLmMKaW5kZXggODI5ZGJhZS4uZjMxMzI3NCAxMDA2NDQKLS0tIGEvYm9hcmQvY3JheS9MMS9mbGFzaC5jCisrKyBiL2JvYXJkL2NyYXkvTDEvZmxhc2guYwpAQCAtOTksNyArOTksNiBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICppbmZvKQpAQCAtMTE2LDEwICsxMTUsMTAgQEAKIHZvaWQgZmxhc2hfcHJpbnRfaW5mbyAgKGZsYXNoX2luZm9fdCAqaW5mbykKIHsKIAlpbnQgaTsKLSAgICAgICAgaW50IGs7Ci0gICAgICAgIGludCBzaXplOwotICAgICAgICBpbnQgZXJhc2VkOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpmbGFzaDsKKwlpbnQgazsKKwlpbnQgc2l6ZTsKKwlpbnQgZXJhc2VkOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmZsYXNoOwogCiAJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKIAkJcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOwpAQCAtMTQzLDI0ICsxNDIsMjQgQEAKIAogCXByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKIAlmb3IgKGk9MDsgaTxpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogQ2hlY2sgaWYgd2hvbGUgc2VjdG9yIGlzIGVyYXNlZAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmIChpICE9IChpbmZvLT5zZWN0b3JfY291bnQtMSkpCi0gICAgICAgICAgICAgICAgICBzaXplID0gaW5mby0+c3RhcnRbaSsxXSAtIGluZm8tPnN0YXJ0W2ldOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHNpemUgPSBpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUgLSBpbmZvLT5zdGFydFtpXTsKLSAgICAgICAgICAgICAgICBlcmFzZWQgPSAxOwotICAgICAgICAgICAgICAgIGZsYXNoID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilpbmZvLT5zdGFydFtpXTsKLSAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSA+PiAyOyAgICAgICAgLyogZGl2aWRlIGJ5IDQgZm9yIGxvbmd3b3JkIGFjY2VzcyAqLwotICAgICAgICAgICAgICAgIGZvciAoaz0wOyBrPHNpemU7IGsrKykKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpmbGFzaCsrICE9IDB4ZmZmZmZmZmYpCi0gICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZXJhc2VkID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0KKwkJLyoKKwkJICogQ2hlY2sgaWYgd2hvbGUgc2VjdG9yIGlzIGVyYXNlZAorCQkgKi8KKwkJaWYgKGkgIT0gKGluZm8tPnNlY3Rvcl9jb3VudC0xKSkKKwkJICBzaXplID0gaW5mby0+c3RhcnRbaSsxXSAtIGluZm8tPnN0YXJ0W2ldOworCQllbHNlCisJCSAgc2l6ZSA9IGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSAtIGluZm8tPnN0YXJ0W2ldOworCQllcmFzZWQgPSAxOworCQlmbGFzaCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopaW5mby0+c3RhcnRbaV07CisJCXNpemUgPSBzaXplID4+IDI7ICAgICAgICAvKiBkaXZpZGUgYnkgNCBmb3IgbG9uZ3dvcmQgYWNjZXNzICovCisJCWZvciAoaz0wOyBrPHNpemU7IGsrKykKKwkJICB7CisJCSAgICBpZiAoKmZsYXNoKysgIT0gMHhmZmZmZmZmZikKKwkJICAgICAgeworCQkJZXJhc2VkID0gMDsKKwkJCWJyZWFrOworCQkgICAgICB9CisJCSAgfQogCiAJCWlmICgoaSAlIDUpID09IDApCiAJCQlwcmludGYgKCJcbiAgICIpOwpAQCAtMTg5LDcgKzE4OCw3IEBACiAJc2hvcnQgaTsKIAlGTEFTSF9XT1JEX1NJWkUgdmFsdWU7CiAJdWxvbmcgYmFzZSA9ICh1bG9uZylhZGRyOwotICAgICAgICB2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSAqKWFkZHI7CisJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKilhZGRyOwogCiAJLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KIAlhZGRyMltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7CkBAIC0yMzIsNyArMjMxLDcgQEAKIAkJLyogcmVhZCBzZWN0b3IgcHJvdGVjdGlvbiBhdCBzZWN0b3IgYWRkcmVzcywgKEE3IC4uIEEwKSA9IDB4MDIgKi8KIAkJLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLwogCQlhZGRyMiA9ICh2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbaV0pOwotICAgICAgICBpbmZvLT5wcm90ZWN0W2ldID0gYWRkcjJbMl0gJiAxOworCWluZm8tPnByb3RlY3RbaV0gPSBhZGRyMlsyXSAmIDE7CiAJfQogCiAJLyoKQEAgLTI1NCwxNSArMjUzLDE1IEBACiAJc3RhcnQgPSBnZXRfdGltZXIgKDApOwogICAgIGxhc3QgID0gc3RhcnQ7CiAgICAgd2hpbGUgKChhZGRyWzBdICYgKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSAhPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApIHsKLSAgICAgICAgaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7Ci0gICAgICAgICAgICBwcmludGYgKCJUaW1lb3V0XG4iKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICAvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotICAgICAgICBpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgeyAgLyogZXZlcnkgc2Vjb25kICovCi0gICAgICAgICAgICBwdXRjICgnLicpOwotICAgICAgICAgICAgbGFzdCA9IG5vdzsKLSAgICAgICAgfQorCWlmICgobm93ID0gZ2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCSAgICBwcmludGYgKCJUaW1lb3V0XG4iKTsKKwkgICAgcmV0dXJuIC0xOworCX0KKwkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLworCWlmICgobm93IC0gbGFzdCkgPiAxMDAwKSB7ICAvKiBldmVyeSBzZWNvbmQgKi8KKwkgICAgcHV0YyAoJy4nKTsKKwkgICAgbGFzdCA9IG5vdzsKKwl9CiAgICAgfQogCXJldHVybiAwOwogfQpAQCAtNDI3LDQyICs0MjYsNDIgQEAKICAqLwogc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCiB7Ci0gICAgICAgIHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYWRkcjIgPSAoRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0WzBdKTsKLSAgICAgICAgdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpkZXN0MiA9IChGTEFTSF9XT1JEX1NJWkUgKilkZXN0OwotICAgICAgICB2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmRhdGEyID0gKEZMQVNIX1dPUkRfU0laRSAqKSZkYXRhOworCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYWRkcjIgPSAoRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0WzBdKTsKKwl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmRlc3QyID0gKEZMQVNIX1dPUkRfU0laRSAqKWRlc3Q7CisJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpkYXRhMiA9IChGTEFTSF9XT1JEX1NJWkUgKikmZGF0YTsKIAl1bG9uZyBzdGFydDsKIAlpbnQgZmxhZzsKLSAgICAgICAgaW50IGk7CisJaW50IGk7CiAKIAkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KIAlpZiAoKCooKHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqKWRlc3QpICYKLSAgICAgICAgICAgICAoRkxBU0hfV09SRF9TSVpFKWRhdGEpICE9IChGTEFTSF9XT1JEX1NJWkUpZGF0YSkgeworCSAgICAgKEZMQVNIX1dPUkRfU0laRSlkYXRhKSAhPSAoRkxBU0hfV09SRF9TSVpFKWRhdGEpIHsKIAkJcmV0dXJuICgyKTsKIAl9CiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCiAJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCi0gICAgICAgIGZvciAoaT0wOyBpPDQvc2l6ZW9mKEZMQVNIX1dPUkRfU0laRSk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBhZGRyMltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7Ci0gICAgICAgICAgICBhZGRyMltBRERSMV0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7Ci0gICAgICAgICAgICBhZGRyMltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBMDAwQTA7CisJZm9yIChpPTA7IGk8NC9zaXplb2YoRkxBU0hfV09SRF9TSVpFKTsgaSsrKQorCSAgeworCSAgICBhZGRyMltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7CisJICAgIGFkZHIyW0FERFIxXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKKwkgICAgYWRkcjJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQTAwMEEwOwogCi0gICAgICAgICAgICBkZXN0MltpXSA9IGRhdGEyW2ldOworCSAgICBkZXN0MltpXSA9IGRhdGEyW2ldOwogCi0gICAgICAgICAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgICAgIGlmIChmbGFnKQotICAgICAgICAgICAgICBlbmFibGVfaW50ZXJydXB0cygpOworCSAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwkgICAgaWYgKGZsYWcpCisJICAgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKIAotICAgICAgICAgICAgLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLwotICAgICAgICAgICAgc3RhcnQgPSBnZXRfdGltZXIgKDApOwotICAgICAgICAgICAgd2hpbGUgKChkZXN0MltpXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgIT0KLSAgICAgICAgICAgICAgICAgICAoZGF0YTJbaV0gJiAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApKSB7Ci0gICAgICAgICAgICAgIGlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQorCSAgICAvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCisJICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwkgICAgd2hpbGUgKChkZXN0MltpXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgIT0KKwkJICAgKGRhdGEyW2ldICYgKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSkgeworCSAgICAgIGlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKKwkJcmV0dXJuICgxKTsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KIAogCXJldHVybiAoMCk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9jcmF5L0wxL2luaXQuUyBiL2JvYXJkL2NyYXkvTDEvaW5pdC5TCmluZGV4IGFjYzUyMDUuLjcyYTEwZDMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NyYXkvTDEvaW5pdC5TCisrKyBiL2JvYXJkL2NyYXkvTDEvaW5pdC5TCkBAIC01Miw1MyArNTIsNTMgQEAKIC8qCWNvbnRyb2wgcmVnaXN0ZXJzIHRvIHNldCB0aGF0IHVwIGFyZSBkZXRlcm1pbmVkIGJ5IHdoYXQgd2UndmUgKi8KIC8qCWVtcGlyaWNhbGx5IGRpc2NvdmVyZWQgd29yayB0aGVyZS4gKi8KIAotICAgICAJLmdsb2JsCWV4dF9idXNfY250bHJfaW5pdAorCS5nbG9ibAlleHRfYnVzX2NudGxyX2luaXQKIGV4dF9idXNfY250bHJfaW5pdDoKLSAgICAgICAgbWZsciAgICByNCAgICAgICAgICAgICAgICAgICAgICAvKiBzYXZlIGxpbmsgcmVnaXN0ZXIgKi8KLSAgICAgICAgYmwgICAgICAuLmdldEFkZHIKKwltZmxyICAgIHI0ICAgICAgICAgICAgICAgICAgICAgIC8qIHNhdmUgbGluayByZWdpc3RlciAqLworCWJsICAgICAgLi5nZXRBZGRyCiAuLmdldEFkZHI6Ci0gICAgICAgIG1mbHIgICAgcjMgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IGFkZHJlc3Mgb2YgLi5nZXRBZGRyICovCi0gICAgICAgIG10bHIgICAgcjQgICAgICAgICAgICAgICAgICAgICAgLyogcmVzdG9yZSBsaW5rIHJlZ2lzdGVyICovCi0gICAgICAgIGFkZGkgICAgcjQsMCwxNCAgICAgICAgICAgICAgICAgLyogc2V0IGN0ciB0byAxMDsgdXNlZCB0byBwcmVmZXRjaCAqLwotICAgICAgICBtdGN0ciAgIHI0ICAgICAgICAgICAgICAgICAgICAgIC8qIDEwIGNhY2hlIGxpbmVzIHRvIGZpdCB0aGlzIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gY2FjaGUgKGdpdmVzIHVzIDh4MTA9ODAgaW5zdHJjdG5zKSAqLworCW1mbHIgICAgcjMgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IGFkZHJlc3Mgb2YgLi5nZXRBZGRyICovCisJbXRsciAgICByNCAgICAgICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIGxpbmsgcmVnaXN0ZXIgKi8KKwlhZGRpICAgIHI0LDAsMTQgICAgICAgICAgICAgICAgIC8qIHNldCBjdHIgdG8gMTA7IHVzZWQgdG8gcHJlZmV0Y2ggKi8KKwltdGN0ciAgIHI0ICAgICAgICAgICAgICAgICAgICAgIC8qIDEwIGNhY2hlIGxpbmVzIHRvIGZpdCB0aGlzIGZ1bmN0aW9uICovCisJCQkJCS8qIGluIGNhY2hlIChnaXZlcyB1cyA4eDEwPTgwIGluc3RyY3RucykgKi8KIC4uZWJjbG9vcDoKLSAgICAgICAgaWNidCAgICByMCxyMyAgICAgICAgICAgICAgICAgICAvKiBwcmVmZXRjaCBjYWNoZSBsaW5lIGZvciBhZGRyIGluIHIzICovCi0gICAgICAgIGFkZGkgICAgcjMscjMsMzIJCS8qIG1vdmUgdG8gbmV4dCBjYWNoZSBsaW5lICovCi0gICAgICAgIGJkbnogICAgLi5lYmNsb29wICAgICAgICAgICAgICAgLyogY29udGludWUgZm9yIDEwIGNhY2hlIGxpbmVzICovCisJaWNidCAgICByMCxyMyAgICAgICAgICAgICAgICAgICAvKiBwcmVmZXRjaCBjYWNoZSBsaW5lIGZvciBhZGRyIGluIHIzICovCisJYWRkaSAgICByMyxyMywzMgkJLyogbW92ZSB0byBuZXh0IGNhY2hlIGxpbmUgKi8KKwliZG56ICAgIC4uZWJjbG9vcCAgICAgICAgICAgICAgIC8qIGNvbnRpbnVlIGZvciAxMCBjYWNoZSBsaW5lcyAqLwogCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICAvKiBEZWxheSB0byBlbnN1cmUgYWxsIGFjY2Vzc2VzIHRvIFJPTSBhcmUgY29tcGxldGUgYmVmb3JlIGNoYW5naW5nICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogRGVsYXkgdG8gZW5zdXJlIGFsbCBhY2Nlc3NlcyB0byBST00gYXJlIGNvbXBsZXRlIGJlZm9yZSBjaGFuZ2luZyAqLwogCSAgICAvKiBiYW5rIDAgdGltaW5ncy4gMjAwdXNlYyBzaG91bGQgYmUgZW5vdWdoLiAqLwotICAgICAgICAvKiAgIDIwMCwwMDAsMDAwIChjeWNsZXMvc2VjKSBYIC4wMDAyMDAgKHNlYykgPSAweDlDNDAgY3ljbGVzICovCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qICAgMjAwLDAwMCwwMDAgKGN5Y2xlcy9zZWMpIFggLjAwMDIwMCAoc2VjKSA9IDB4OUM0MCBjeWNsZXMgKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlhZGRpcwlyMywwLDB4MAotICAgICAgICBvcmkgICAgIHIzLHIzLDB4QTAwMCAgICAgICAgICAvKiBlbnN1cmUgMjAwdXNlYyBoYXZlIHBhc3NlZCBzaW5jZSByZXNldCAqLwotICAgICAgICBtdGN0ciAgIHIzCisJb3JpICAgICByMyxyMywweEEwMDAgICAgICAgICAgLyogZW5zdXJlIDIwMHVzZWMgaGF2ZSBwYXNzZWQgc2luY2UgcmVzZXQgKi8KKwltdGN0ciAgIHIzCiAuLnNwaW5scDoKLSAgICAgICAgYmRueiAgICAuLnNwaW5scCAgICAgICAgICAgICAgICAvKiBzcGluIGxvb3AgKi8KKwliZG56ICAgIC4uc3BpbmxwICAgICAgICAgICAgICAgIC8qIHNwaW4gbG9vcCAqLwogCiAKLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIFBlcmlwaGVyYWwgQmFuayAwIChGbGFzaCkgaW5pdGlhbGl6YXRpb24gKi8KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogUGVyaXBoZXJhbCBCYW5rIDAgKEZsYXNoKSBpbml0aWFsaXphdGlvbiAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCQkvKiAweDdGOEZGRTgwIHNsb3dlc3QgYm9vdCAqLwotICAgICAgICBhZGRpICAgIHI0LDAscGIwYXAKLSAgICAgICAgbXRkY3IgICBlYmNjZmdhLHI0Ci0gICAgICAgIGFkZGlzICAgcjQsMCwweDlCMDEKLSAgICAgICAgb3JpICAgICByNCxyNCwweDU0ODAKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiMGFwCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLDB4OUIwMQorCW9yaSAgICAgcjQscjQsMHg1NDgwCisJbXRkY3IgICBlYmNjZmdkLHI0CiAKLSAgICAgICAgYWRkaSAgICByNCwwLHBiMGNyCi0gICAgICAgIG10ZGNyICAgZWJjY2ZnYSxyNAotICAgICAgICBhZGRpcyAgIHI0LDAsMHhGRkM1ICAgICAgICAgICAvKiBCQVM9MHhGRkMsQlM9MHg0KDRNQiksQlU9MHgzKFIvVyksICovCi0gICAgICAgIG9yaSAgICAgcjQscjQsMHg4MDAwICAgICAgICAgIC8qIEJXPTB4MCggOCBiaXRzKSAqLwotICAgICAgICBtdGRjciAgIGViY2NmZ2QscjQKKwlhZGRpICAgIHI0LDAscGIwY3IKKwltdGRjciAgIGViY2NmZ2EscjQKKwlhZGRpcyAgIHI0LDAsMHhGRkM1ICAgICAgICAgICAvKiBCQVM9MHhGRkMsQlM9MHg0KDRNQiksQlU9MHgzKFIvVyksICovCisJb3JpICAgICByNCxyNCwweDgwMDAgICAgICAgICAgLyogQlc9MHgwKCA4IGJpdHMpICovCisJbXRkY3IgICBlYmNjZmdkLHI0CiAKLSAgICAgICAgYmxyCisJYmxyCiAKLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIFBlcmlwaGVyYWwgQmFuayAxIChOVlJBTS9SVEMpIGluaXRpYWxpemF0aW9uICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogUGVyaXBoZXJhbCBCYW5rIDEgKE5WUkFNL1JUQykgaW5pdGlhbGl6YXRpb24gKi8KIAkJLyogQ1JBWTp0aGUgTDEgaGFzIE5PVCB0aGlzIGJhbmssIGl0IGlzIHRpZWQgdG8gU1YyL0lPQ0EvZXRjLyBpbnN0ZWFkICovCiAJCS8qIGFuZCB3ZSBkbyBETUEgb24gaXQuICBUaGUgQ29uZmlndXJhdGlvblJlZ2lzdGVyIHBhcnQgaXMgdGhyZWZvcmUgKi8KIAkJLyogYWxtb3N0IGFyYml0cmFyeSwgZXhjZXB0IHRoYXQgb3VyIGxpbnV4IGRyaXZlciBuZWVkcyB0byBrbm93IHRoZSAqLwpAQCAtMTE5LDIxICsxMTksMjEgQEAKIAkJLyogQnl0ZUVuYWJsZU1vZGUJCQlCRU09MCAqLwogCQkvKiBQYXJpdHlFbmFibGUJCQkJUEVOPTAgKi8KIAkJLyogYWxsIHJlc2VydmVkIGJpdHM9MCAqLwotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjFhcAotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLDB4MDE4NQkJLyogaGl3b3JkICovCi0gICAgICAgIG9yaSAgICAgcjQscjQsMHg0MzgwCS8qIGxvd29yZCAqLwotICAgICAgICBtdGRjciAgIGViY2NmZ2QscjQKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlhZGRpICAgIHI0LDAscGIxYXAKKwltdGRjciAgIGViY2NmZ2EscjQKKwlhZGRpcyAgIHI0LDAsMHgwMTg1CQkvKiBoaXdvcmQgKi8KKwlvcmkgICAgIHI0LHI0LDB4NDM4MAkvKiBsb3dvcmQgKi8KKwltdGRjciAgIGViY2NmZ2QscjQKIAotICAgICAgICBhZGRpICAgIHI0LDAscGIxY3IKLSAgICAgICAgbXRkY3IgICBlYmNjZmdhLHI0Ci0gICAgICAgIGFkZGlzICAgcjQsMCwweEYwMDEgICAgICAgICAgIC8qIEJBUz0weEYwMCxCUz0weDAoMU1CKSxCVT0weDMoUi9XKSwgKi8KLSAgICAgICAgb3JpICAgICByNCxyNCwweDgwMDAgICAgICAgICAgLyogQlc9MHgwKCA4IGJpdHMpICovCi0gICAgICAgIG10ZGNyICAgZWJjY2ZnZCxyNAorCWFkZGkgICAgcjQsMCxwYjFjcgorCW10ZGNyICAgZWJjY2ZnYSxyNAorCWFkZGlzICAgcjQsMCwweEYwMDEgICAgICAgICAgIC8qIEJBUz0weEYwMCxCUz0weDAoMU1CKSxCVT0weDMoUi9XKSwgKi8KKwlvcmkgICAgIHI0LHI0LDB4ODAwMCAgICAgICAgICAvKiBCVz0weDAoIDggYml0cykgKi8KKwltdGRjciAgIGViY2NmZ2QscjQKIAotICAgICAgICBibHIKKwlibHIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb246CXNkcmFtX2luaXQgKi8KQEAgLTE0MSw3ICsxNDEsNyBAQAogLyoJCQkJTk9URTogZm9yIENyYXlMMSB3ZSBoYXZlIEVDQyBtZW1vcnksIHNvIGVuYWJsZSBpdC4gKi8KIC8qLi4uLm5vdyBkb25lIGluIEMgaW4gTDEuYzppbml0X3NkcmFtIGZvciByZWFkYWJpbGl0eS4gKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLmdsb2JsICBzZHJhbV9pbml0CisJLmdsb2JsICBzZHJhbV9pbml0CiAKIHNkcmFtX2luaXQ6CiAgYmxyCmRpZmYgLS1naXQgYS9ib2FyZC9jcmF5L0wxL3UtYm9vdC5sZHMgYi9ib2FyZC9jcmF5L0wxL3UtYm9vdC5sZHMKaW5kZXggYTcwOTE1OC4uODhjODgwZSAxMDA2NDQKLS0tIGEvYm9hcmQvY3JheS9MMS91LWJvb3QubGRzCisrKyBiL2JvYXJkL2NyYXkvTDEvdS1ib290LmxkcwpAQCAtMTIxLDYgKzEyMSwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3JheS9MMS91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvY3JheS9MMS91LWJvb3QubGRzLmRlYnVnCmluZGV4IGY0Zjk3NDMuLmQ0ODM0MjQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NyYXkvTDEvdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9jcmF5L0wxL3UtYm9vdC5sZHMuZGVidWcKQEAgLTEwNiw2ICsxMDYsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyOCw0ICsxMzMsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9jc2IyMjYvTWFrZWZpbGUgYi9ib2FyZC9jc2IyMjYvTWFrZWZpbGUKaW5kZXggZTZiZjRlYS4uYWM5NDY0MiAxMDA2NDQKLS0tIGEvYm9hcmQvY3NiMjI2L01ha2VmaWxlCisrKyBiL2JvYXJkL2NzYjIyNi9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogU09CSlMJOj0gbWVtc2V0dXAubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9jc2IyMjYvY29uZmlnLm1rIGIvYm9hcmQvY3NiMjI2L2NvbmZpZy5tawppbmRleCA5MzlmZmZmLi4yMzU0MzkyIDEwMDY0NAotLS0gYS9ib2FyZC9jc2IyMjYvY29uZmlnLm1rCisrKyBiL2JvYXJkL2NzYjIyNi9jb25maWcubWsKQEAgLTEzLDQgKzEzLDMgQEAKICMgZm9yIHRoZSBhZGRyZXNzZXMgX2FmdGVyXyByZWxvY2F0aW9uIHRvIFJBTSEhIE90aGVyd2hpc2UgdGhlCiAjIC5ic3Mgc2VnbWVudCBpcyBhc3N1bWVkIGluIGZsYXNoLi4uCiBURVhUX0JBU0UgPSAweGExZmUwMDAwCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2NzYjIyNi9jc2IyMjYuYyBiL2JvYXJkL2NzYjIyNi9jc2IyMjYuYwppbmRleCBhNzlkMTY4Li5iZjliNGY4IDEwMDY0NAotLS0gYS9ib2FyZC9jc2IyMjYvY3NiMjI2LmMKKysrIGIvYm9hcmQvY3NiMjI2L2NzYjIyNi5jCkBAIC0zMiwxNSArMzIsMTUgQEAKICMgZGVmaW5lIFNIT1dfQk9PVF9QUk9HUkVTUyhhcmcpCiAjZW5kaWYKIAotLyoqIAorLyoqCiAgKiBtaXNjX2luaXRfcjogLSBtaXNjIGluaXRpYWxpc2F0aW9uIHJvdXRpbmVzCiAgKi8KIAogaW50IG1pc2NfaW5pdF9yKHZvaWQpCiB7Ci0jaWYgMAkKKyNpZiAwCiAJdWNoYXIgKnN0cjsKLQkKKwogCS8qIGRldGVybWluZSBpZiB0aGUgc29mdHdhcmUgdXBkYXRlIGtleSBpcyBwcmVzc2VkIGR1cmluZyBzdGFydHVwICovCiAJLyogbm90IHBvcnRlZCB5ZXQuLi4gKi8KIAlpZiAoR1BMUjAgJiAweDAwMDAwODAwKSB7CkBAIC01MiwxNSArNTIsMTUgQEAKIAl9CiAKIAlzZXRlbnYoImJvb3RjbWQiLHN0cik7Ci0jZW5kaWYJCisjZW5kaWYKIAlyZXR1cm4gMDsKLX0JCit9CiAKIAotLyoqIAorLyoqCiAgKiBib2FyZF9pbml0OiAtIHNldHVwIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzCiAgKgotICogQHJldHVybjogMCBpbiBjYXNlIG9mIHN1Y2Nlc3MJCisgKiBAcmV0dXJuOiAwIGluIGNhc2Ugb2Ygc3VjY2VzcwogICovCiAKIGludCBib2FyZF9pbml0ICh2b2lkKQpAQCAtODAsNyArODAsNyBAQAogfQogCiAKLS8qKiAKKy8qKgogICogZHJhbV9pbml0OiAtIHNldHVwIGR5bmFtaWMgUkFNCiAgKgogICogQHJldHVybjogMCBpbiBjYXNlIG9mIHN1Y2Nlc3MKQEAgLTk3LDcgKzk3LDcgQEAKIH0KIAogCi0vKiogCisvKioKICAqIGNzYjIyNl9zZXRfbGVkOiAtIHN3aXRjaCBMRURzIG9uIG9yIG9mZgogICoKICAqIEBwYXJhbSBsZWQ6ICAgTEVEIHRvIHN3aXRjaCAoMCwxLDIpCkBAIC0xMDgsMjYgKzEwOCwyNiBAQAogewogCXN3aXRjaChsZWQpIHsKIAotCQljYXNlIDA6IGlmIChzdGF0ZT09MSkgeyAKLQkJCQlHUENSMCB8PSBDU0IyMjZfVVNFUl9MRUQwOyAKKwkJY2FzZSAwOiBpZiAoc3RhdGU9PTEpIHsKKwkJCQlHUENSMCB8PSBDU0IyMjZfVVNFUl9MRUQwOwogCQkJfSBlbHNlIGlmIChzdGF0ZT09MCkgewogCQkJCUdQU1IwIHw9IENTQjIyNl9VU0VSX0xFRDA7CiAJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIDE6IGlmIChzdGF0ZT09MSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUENSMCB8PSBDU0IyMjZfVVNFUl9MRUQxOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZT09MCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUFNSMCB8PSBDU0IyMjZfVVNFUl9MRUQxOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCQkJR1BDUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMTsKKwkJCX0gZWxzZSBpZiAoc3RhdGU9PTApIHsKKwkJCQlHUFNSMCB8PSBDU0IyMjZfVVNFUl9MRUQxOworCQkJfQorCQkJYnJlYWs7CiAKIAkJY2FzZSAyOiBpZiAoc3RhdGU9PTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BDUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGU9PTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BTUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkJCUdQQ1IwIHw9IENTQjIyNl9VU0VSX0xFRDI7CisJCQl9IGVsc2UgaWYgKHN0YXRlPT0wKSB7CisJCQkJR1BTUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMjsKKwkJCX0KKwkJCWJyZWFrOwogCX0KIAogCXJldHVybjsKQEAgLTEzNywxMCArMTM3LDEwIEBACiAvKioKICAqIHNob3dfYm9vdF9wcm9ncmVzczogLSBpbmRpY2F0ZSBzdGF0ZSBvZiB0aGUgYm9vdCBwcm9jZXNzCiAgKgotICogQHBhcmFtIHN0YXR1czogU3RhdHVzIG51bWJlciAtIHNlZSBSRUFETUUgZm9yIGRldGFpbHMuIAorICogQHBhcmFtIHN0YXR1czogU3RhdHVzIG51bWJlciAtIHNlZSBSRUFETUUgZm9yIGRldGFpbHMuCiAgKgotICogVGhlIENTQjIyNiBkb2VzIG9ubHkgaGF2ZSAzIExFRHMsIHNvIHdlIHN3aXRjaCB0aGVtIG9uIGF0IHRoZSBtb3N0IAotICogaW1wb3J0YW50IHN0YXRlcyAoMSwgNSwgMTUpLiAgCisgKiBUaGUgQ1NCMjI2IGRvZXMgb25seSBoYXZlIDMgTEVEcywgc28gd2Ugc3dpdGNoIHRoZW0gb24gYXQgdGhlIG1vc3QKKyAqIGltcG9ydGFudCBzdGF0ZXMgKDEsIDUsIDE1KS4KICAqLwogCiB2b2lkIHNob3dfYm9vdF9wcm9ncmVzcyAoaW50IHN0YXR1cykKQEAgLTE1Myw0ICsxNTMsMyBAQAogCiAJcmV0dXJuOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9jc2IyMjYvZmxhc2guYyBiL2JvYXJkL2NzYjIyNi9mbGFzaC5jCmluZGV4IDBlZTc4ZTYuLjk4MDE3NzMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NzYjIyNi9mbGFzaC5jCisrKyBiL2JvYXJkL2NzYjIyNi9mbGFzaC5jCkBAIC03LDcgKzcsNyBAQAogICogTWFyaXVzIEdyb2VnZXIgPG1ncm9lZ2VyQHN5c2dvLmRlPgogICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peCwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+IAorICogUm9iZXJ0IFNjaHdlYmVsLCBQZW5ndXRyb25peCwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+CiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCkBAIC04OSw3ICs4OSw3IEBACiAvKioKICAqIGZsYXNoX3ByaW50X2luZm86IC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsYXNoIHNpdHVhdGlvbgogICoKLSAqIEBwYXJhbSBpbmZvOiAKKyAqIEBwYXJhbSBpbmZvOgogICovCiAKIHZvaWQgZmxhc2hfcHJpbnRfaW5mbyAgKGZsYXNoX2luZm9fdCAqaW5mbykKQEAgLTExOCwxMyArMTE4LDEzIEBACiAJCQkJcmV0dXJuOwogCQl9CiAKLQkJcHJpbnRmKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLCAKKwkJcHJpbnRmKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAogCQkJaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKIAogCQlwcmludGYoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKIAkJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CiAJCQlpZiAoKGkgJSA1KSA9PSAwKSBwcmludGYgKCJcbiAgICIpOwotCSAgICAgICAgCisKIAkJCXByaW50ZiAoIiAlMDhsWCVzIiwgaW5mby0+c3RhcnRbaV0sCiAJCQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiKTsKIAkJfQpAQCAtMTUzLDcgKzE1Myw3IEBACiAKIAlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9IChJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSkKIAkJcmV0dXJuIEVSUl9VTktOT1dOX0ZMQVNIX1ZFTkRPUjsKLQkKKwogCXByb3QgPSAwOwogCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgewogCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgcHJvdCsrOwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJCQkqYWRkciA9IDB4MDBGRjAwRkY7IC8qIHJlc2VzdCB0byByZWFkIG1vZGUgICAgICAgICAgKi8KIAogCQl9Ci0JCQorCiAJCXByaW50Zigib2suXG4iKTsKIAl9CiAKQEAgLTIyMiwxMCArMjIyLDEwIEBACiAKIC8qKgogICogd3JpdGVfd29yZDogLSBjb3B5IG1lbW9yeSB0byBmbGFzaAotICogCisgKgogICogQHBhcmFtIGluZm86CiAgKiBAcGFyYW0gZGVzdDoKLSAqIEBwYXJhbSBkYXRhOiAKKyAqIEBwYXJhbSBkYXRhOgogICogQHJldHVybjoKICAqLwogCkBAIC0zMDEsOCArMzAxLDggQEAKIAogLyoqCiAgKiB3cml0ZV9idWY6IC0gQ29weSBtZW1vcnkgdG8gZmxhc2guCi0gKiAKLSAqIEBwYXJhbSBpbmZvOgkgCisgKgorICogQHBhcmFtIGluZm86CiAgKiBAcGFyYW0gc3JjOglzb3VyY2Ugb2YgY29weSB0cmFuc2FjdGlvbgogICogQHBhcmFtIGFkZHI6CXdoZXJlIHRvIGNvcHkgdG8KICAqIEBwYXJhbSBjbnQ6IAludW1iZXIgb2YgYnl0ZXMgdG8gY29weQpAQCAtMzcyLDQgKzM3MiwzIEBACiAKIAlyZXR1cm4gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2NzYjIyNi9tZW1zZXR1cC5TIGIvYm9hcmQvY3NiMjI2L21lbXNldHVwLlMKaW5kZXggNjBmOWQ1MC4uNjg1NzdjYSAxMDA2NDQKLS0tIGEvYm9hcmQvY3NiMjI2L21lbXNldHVwLlMKKysrIGIvYm9hcmQvY3NiMjI2L21lbXNldHVwLlMKQEAgLTE1OSw3ICsxNTksNyBAQAogCiBtZW1faW5pdDoKIAotICAgICAgICBsZHIgICAgIHIxLCAgPU1FTUNfQkFTRQkJLyogZ2V0IG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkci4gKi8KKwlsZHIgICAgIHIxLCAgPU1FTUNfQkFTRQkJLyogZ2V0IG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkci4gKi8KIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiBTdGVwIDJhOiBJbml0aWFsaXplIEFzeW5jaHJvbm91cyBzdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgICAgICAgICovCkBAIC0xNjcsNjUgKzE2Nyw2NSBAQAogCiAJLyogTVNDIHJlZ2lzdGVyczogdGltaW5nLCBidXMgd2lkdGgsIG1lbSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgIC8qIE1TQzA6IG5DUygwLDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgICA9Q0ZHX01TQzBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICAgW3IxLCAjTVNDMF9PRkZTRVRdCi0gICAgICAgIGxkciAgICAgcjIsICAgW3IxLCAjTVNDMF9PRkZTRVRdCS8qIHJlYWQgYmFjayB0byBlbnN1cmUgICAgICAqLworCS8qIE1TQzA6IG5DUygwLDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIyLCAgID1DRkdfTVNDMF9WQUwKKwlzdHIgICAgIHIyLCAgIFtyMSwgI01TQzBfT0ZGU0VUXQorCWxkciAgICAgcjIsICAgW3IxLCAjTVNDMF9PRkZTRVRdCS8qIHJlYWQgYmFjayB0byBlbnN1cmUgICAgICAqLwogCQkJCQkJLyogdGhhdCBkYXRhIGxhdGNoZXMgICAgICAgICovCi0gICAgICAgIC8qIE1TQzE6IG5DUygyLDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTVNDMV9WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01TQzFfT0ZGU0VUXQotICAgICAgICBsZHIgICAgIHIyLCAgW3IxLCAjTVNDMV9PRkZTRVRdCisJLyogTVNDMTogbkNTKDIsMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsICA9Q0ZHX01TQzFfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01TQzFfT0ZGU0VUXQorCWxkciAgICAgcjIsICBbcjEsICNNU0MxX09GRlNFVF0KIAogCS8qIE1TQzI6IG5DUyg0LDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTVNDMl9WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01TQzJfT0ZGU0VUXQotICAgICAgICBsZHIgICAgIHIyLCAgW3IxLCAjTVNDMl9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTVNDMl9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTVNDMl9PRkZTRVRdCisJbGRyICAgICByMiwgIFtyMSwgI01TQzJfT0ZGU0VUXQogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIFN0ZXAgMmI6IEluaXRpYWxpemUgQ2FyZCBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBNRUNSOiBNZW1vcnkgRXhwYW5zaW9uIENhcmQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01FQ1JfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNRUNSX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgPUNGR19NRUNSX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNRUNSX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01FQ1JfT0ZGU0VUXQogCiAJLyogTUNNRU0wOiBDYXJkIEludGVyZmFjZSBzbG90IDAgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ01FTTBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ01FTTBfT0ZGU0VUXQorCWxkciAgICAgcjIsICA9Q0ZHX01DTUVNMF9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTUNNRU0wX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DTUVNMF9PRkZTRVRdCiAKLSAgICAgICAgLyogTUNNRU0xOiBDYXJkIEludGVyZmFjZSBzbG90IDEgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ01FTTFfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ01FTTFfT0ZGU0VUXQorCS8qIE1DTUVNMTogQ2FyZCBJbnRlcmZhY2Ugc2xvdCAxIHRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIyLCAgPUNGR19NQ01FTTFfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DTUVNMV9PRkZTRVRdCiAJbGRyCXIyLAlbcjEsICNNQ01FTTFfT0ZGU0VUXQogCiAJLyogTUNBVFQwOiBDYXJkIEludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ0FUVDBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0FUVDBfT0ZGU0VUXQorCWxkciAgICAgcjIsICA9Q0ZHX01DQVRUMF9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTUNBVFQwX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DQVRUMF9PRkZTRVRdCiAKIAkvKiBNQ0FUVDE6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01DQVRUMV9WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01DQVRUMV9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTUNBVFQxX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNQ0FUVDFfT0ZGU0VUXQogCWxkcglyMiwJW3IxLCAjTUNBVFQxX09GRlNFVF0KIAogCS8qIE1DSU8wOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNJTzBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0lPMF9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTUNJTzBfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DSU8wX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DSU8wX09GRlNFVF0KIAogCS8qIE1DSU8xOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDEgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNJTzFfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0lPMV9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTUNJTzFfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DSU8xX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DSU8xX09GRlNFVF0KIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogU3RlcCAyYzogV3JpdGUgRkxZQ05GRyAgRklYTUU6IHdoYXQncyB0aGF0Pz8/ICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyYzogV3JpdGUgRkxZQ05GRyAgRklYTUU6IHdoYXQncyB0aGF0Pz8/ICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotICAgICAgICAvKiB0ZXN0IGlmIHdlIHJ1biBmcm9tIGZsYXNoIG9yIFJBTSAtIFJBTS9CREk6IGRvbid0IHNldHVwIFJBTSAgICAgICovCisJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gLSBSQU0vQkRJOiBkb24ndCBzZXR1cCBSQU0gICAgICAqLwogCWFkcglyMywgbWVtX2luaXQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCiAJbGRyCXIyLCA9bWVtX2luaXQKIAljbXAJcjMsIHIyCQkJLyogc2tpcCBpbml0IGlmIGluIHBsYWNlICAgICAgICAgICAgKi8KQEAgLTIzMyw4ICsyMzMsOCBAQAogCiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIFN0ZXAgMmQ6IEluaXRpYWxpemUgVGltaW5nIGZvciBTeW5jIE1lbW9yeSAoU0RDTEswKSAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgMmQ6IEluaXRpYWxpemUgVGltaW5nIGZvciBTeW5jIE1lbW9yeSAoU0RDTEswKSAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBCZWZvcmUgYWNjZXNzaW5nIE1EUkVGUiB3ZSBuZWVkIGEgdmFsaWQgRFJJIGZpZWxkLCBzbyB3ZSBzZXQgICAgICovCiAJLyogdGhpcyB0byBwb3dlciBvbiBkZWZhdWx0cyArIERSSSBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJb3JyCXI0LAlyNCwgIHIzCiAKIAlzdHIJcjQsCVtyMSwgI01EUkVGUl9PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHI0LAlbcjEsICNNRFJFRlJfT0ZGU0VUXQorCWxkciAgICAgcjQsCVtyMSwgI01EUkVGUl9PRkZTRVRdCiAKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI2Miw5ICsyNjIsOSBAQAogCS8qIEZJWE1FOiB3ZSB1c2UgYXN5bmMgbW9kZSBmb3Igbm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogU3RlcCA0OiBJbml0aWFsaXplIFNEUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgNDogSW5pdGlhbGl6ZSBTRFJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBTdGVwIDRhOiBhc3NlcnQgTURSRUZSOks/UlVOIGFuZCBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICovCiAJLyogICAgICAgICAgTURSRUZSOksxREIyIGFuZCBNRFJFRlI6SzJEQjIgYXMgZGVzaXJlZC4gICAgICAgICAgICAgICAqLwpAQCAtMjc3LDE2ICsyNzcsMTYgQEAKIAogCWJpYwlyNCwJcjQsICMoTURSRUZSX1NMRlJTSCkKIAotICAgICAgICBzdHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0gICAgLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCXN0ciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KKwlsZHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0KIAogCiAJLyogU3RlcCA0YzogYXNzZXJ0IE1EUkVGUjpFMVBJTiBhbmQgRTBQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAJb3JyCXI0LAlyNCwJIyhNRFJFRlJfRTFQSU58TURSRUZSX0UwUElOKQogCi0gICAgICAgIHN0ciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdCisJc3RyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdICAgIC8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLworCWxkciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXQogCiAKIAkvKiBTdGVwIDRkOiB3cml0ZSBNRENORkcgd2l0aCBNRENORkc6REV4IGRlYXNzZXJ0ZWQgKHNldCB0byAwKSwgdG8gICovCkBAIC0yOTUsOCArMjk1LDggQEAKIAlsZHIJcjQsCT1DRkdfTURDTkZHX1ZBTAogCWJpYwlyNCwJcjQsCSMoTURDTkZHX0RFMHxNRENORkdfREUxKQogCi0gICAgICAgIHN0ciAgICAgcjQsICAgICBbcjEsICNNRENORkdfT0ZGU0VUXQkvKiB3cml0ZSBiYWNrIE1EQ05GRyAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByNCwgICAgIFtyMSwgI01EQ05GR19PRkZTRVRdCisJc3RyICAgICByNCwgICAgIFtyMSwgI01EQ05GR19PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURDTkZHICAgICAgICAqLworCWxkciAgICAgcjQsICAgICBbcjEsICNNRENORkdfT0ZGU0VUXQogCiAKIAkvKiBTdGVwIDRlOiBXYWl0IGZvciB0aGUgY2xvY2sgdG8gdGhlIFNEUkFNcyB0byBzdGFiaWxpemUsICAgICAgICAgICovCkBAIC0zNDUsOCArMzQ1LDggQEAKIAogCS8qIFN0ZXAgNGg6IFdyaXRlIE1ETVJTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NRE1SU19WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01ETVJTX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgPUNGR19NRE1SU19WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTURNUlNfT0ZGU0VUXQogCiAKIAkvKiBXZSBhcmUgZmluaXNoZWQgd2l0aCBJbnRlbCdzIG1lbW9yeSBjb250cm9sbGVyIGluaXRpYWxpc2F0aW9uICAgICovCkBAIC0zNTcsMTcgKzM1NywxNyBAQAogCiBpbml0aXJxczoKIAotICAgICAgICBtb3YgICAgIHIxLCAjMAkJLyogY2xlYXIgaW50LiBsZXZlbCByZWdpc3RlciAoSVJRLCBub3QgRklRKSAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUlDTFIKLSAgICAgICAgc3RyICAgICByMSwgIFtyMl0KKwltb3YgICAgIHIxLCAjMAkJLyogY2xlYXIgaW50LiBsZXZlbCByZWdpc3RlciAoSVJRLCBub3QgRklRKSAqLworCWxkciAgICAgcjIsICA9SUNMUgorCXN0ciAgICAgcjEsICBbcjJdCiAKLSAgICAgICAgbGRyICAgICByMiwgID1JQ01SCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIGNvbnRyb2xsZXIgICAgKi8KLSAgICAgICAgc3RyICAgICByMSwgIFtyMl0KKwlsZHIgICAgIHIyLCAgPUlDTVIJLyogbWFzayBhbGwgaW50ZXJydXB0cyBhdCB0aGUgY29udHJvbGxlciAgICAqLworCXN0ciAgICAgcjEsICBbcjJdCiAKIAotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIENsb2NrIGluaXRpYWxpc2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogaW5pdGNsa3M6CiAKQEAgLTM3NiwzNCArMzc2LDM0IEBACiAKIAkvKiBUdXJuIE9mZiBBTEwgb24tY2hpcCBwZXJpcGhlcmFsIGNsb2NrcyBmb3IgcmUtY29uZmlndXJhdGlvbiAgICAgICovCiAJLyogTm90ZTogU2VlIGxhYmVsICdFTkFCTEVDTEtTJyBmb3IgdGhlIHJlLWVuYWJsaW5nICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIxLCAgPUNLRU4KLSAgICAgICAgbW92ICAgICByMiwgICMwCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjFdCisJbGRyICAgICByMSwgID1DS0VOCisJbW92ICAgICByMiwgICMwCisJc3RyICAgICByMiwgIFtyMV0KIAogCi0gICAgICAgIC8qIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB2YWxpZCByb3Rhcnkgc3dpdGNoIHNldHRpbmcgaXMgZm91bmQgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgPShDQ0NSX0wyN3xDQ0NSX00yfENDQ1JfTjEwKSAgLyogREVGQVVMVDogezIwMC8yMDAvMTAwfSAqLworCS8qIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB2YWxpZCByb3Rhcnkgc3dpdGNoIHNldHRpbmcgaXMgZm91bmQgICAgKi8KKwlsZHIgICAgIHIyLCA9KENDQ1JfTDI3fENDQ1JfTTJ8Q0NDUl9OMTApICAvKiBERUZBVUxUOiB7MjAwLzIwMC8xMDB9ICovCiAKLSAgICAgICAgLyogLi4uIGFuZCB3cml0ZSB0aGUgY29yZSBjbG9jayBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIxLCAgPUNDQ1IKLSAgICAgICAgc3RyICAgICByMiwgIFtyMV0KKwkvKiAuLi4gYW5kIHdyaXRlIHRoZSBjb3JlIGNsb2NrIGNvbmZpZyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMSwgID1DQ0NSCisJc3RyICAgICByMiwgIFtyMV0KIAogCS8qIGVuYWJsZSB0aGUgMzJLaHogb3NjaWxsYXRvciBmb3IgUlRDIGFuZCBQb3dlck1hbmFnZXIgICAgICAgICAgICAgKi8KIC8qCi0gICAgICAgIGxkciAgICAgcjEsICA9T1NDQwotICAgICAgICBtb3YgICAgIHIyLCAgI09TQ0NfT09OCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjFdCisJbGRyICAgICByMSwgID1PU0NDCisJbW92ICAgICByMiwgICNPU0NDX09PTgorCXN0ciAgICAgcjIsICBbcjFdCiAqLwogCS8qIE5PVEU6ICBzcGluIGhlcmUgdW50aWwgT1NDQy5PT0sgZ2V0IHNldCwgbWVhbmluZyB0aGUgUExMICAgICAgICAgKi8KIAkvKiBoYXMgc2V0dGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiA2MDoKLSAgICAgICAgbGRyICAgICByMiwgW3IxXQotICAgICAgICBhbmRzICAgIHIyLCByMiwgIzEKLSAgICAgICAgYmVxICAgICA2MGIKKwlsZHIgICAgIHIyLCBbcjFdCisJYW5kcyAgICByMiwgcjIsICMxCisJYmVxICAgICA2MGIKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBTYXZlIFNEUkFNIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJbGRyCXIxLCA9RFJBTV9TSVpFCkBAIC00MjgsMTEgKzQyOCwxMCBAQAogCW1jcglwMTQsMCxyMCxjMTAsYzAsMCAgLyogZGNzciAqLwogI2VuZGlmCiAKLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiBFbmQgbWVtc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIGVuZG1lbXNldHVwOgogCiAgICAgbW92ICAgICBwYywgbHIKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvY3NiMjI2L3UtYm9vdC5sZHMgYi9ib2FyZC9jc2IyMjYvdS1ib290LmxkcwppbmRleCA0NmJlYjE1Li40YzRjYWJmIDEwMDY0NAotLS0gYS9ib2FyZC9jc2IyMjYvdS1ib290LmxkcworKysgYi9ib2FyZC9jc2IyMjYvdS1ib290LmxkcwpAQCAtMjYsMjkgKzI2LDMzIEBACiBFTlRSWShfc3RhcnQpCiBTRUNUSU9OUwogewotICAgICAgICAuID0gMHgwMDAwMDAwMDsKKwkuID0gMHgwMDAwMDAwMDsKIAotICAgICAgICAuID0gQUxJR04oNCk7CisJLiA9IEFMSUdOKDQpOwogCS50ZXh0ICAgICAgOgogCXsKIAkgIGNwdS9weGEvc3RhcnQubwkoLnRleHQpCiAJICAqKC50ZXh0KQogCX0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5kYXRhIDogeyAqKC5kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZ290IDogeyAqKC5nb3QpIH0KKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKyAgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICAgX191X2Jvb3RfY21kX2VuZCA9IC47CiAKIAlhcm1ib290X2VuZF9kYXRhID0gLjsKIAotICAgICAgICAuID0gQUxJR04oNCk7CisJLiA9IEFMSUdOKDQpOwogCWJzc19zdGFydCA9IC47Ci0gICAgICAgIC5ic3MgOiB7ICooLmJzcykgfQorCS5ic3MgOiB7ICooLmJzcykgfQogCWJzc19lbmQgPSAuOwogCiAJYXJtYm9vdF9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvY3U4MjQvTWFrZWZpbGUgYi9ib2FyZC9jdTgyNC9NYWtlZmlsZQppbmRleCAzNWI4NDI4Li43YTIwMTRkIDEwMDY0NAotLS0gYS9ib2FyZC9jdTgyNC9NYWtlZmlsZQorKysgYi9ib2FyZC9jdTgyNC9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvY3U4MjQvUkVBRE1FIGIvYm9hcmQvY3U4MjQvUkVBRE1FCmluZGV4IGQzOGM0OGUuLmNjMGQyMDcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2N1ODI0L1JFQURNRQorKysgYi9ib2FyZC9jdTgyNC9SRUFETUUKQEAgLTM4LDcgKzM4LDcgQEAKIGJvb3RtICAgLSBib290IGFwcGxpY2F0aW9uIGltYWdlIGZyb20gbWVtb3J5CiBib290cCAgIC0gYm9vdCBpbWFnZSB2aWEgbmV0d29yayB1c2luZyBCb290UC9URlRQIHByb3RvY29sCiB0ZnRwYm9vdC0gYm9vdCBpbWFnZSB2aWEgbmV0d29yayB1c2luZyBURlRQIHByb3RvY29sCi0gICAgICAgICAgICAgICBhbmQgZW52IHZhcmlhYmxlcyBpcGFkZHIgYW5kIHNlcnZlcmlwCisJICAgICAgIGFuZCBlbnYgdmFyaWFibGVzIGlwYWRkciBhbmQgc2VydmVyaXAKIHJhcnBib290LSBib290IGltYWdlIHZpYSBuZXR3b3JrIHVzaW5nIFJBUlAvVEZUUCBwcm90b2NvbAogYm9vdGQgICAtIGJvb3QgZGVmYXVsdCwgaS5lLiwgcnVuICdib290Y21kJwogbG9hZHMgICAtIGxvYWQgUy1SZWNvcmQgZmlsZSBvdmVyIHNlcmlhbCBsaW5lCmRpZmYgLS1naXQgYS9ib2FyZC9jdTgyNC9mbGFzaC5jIGIvYm9hcmQvY3U4MjQvZmxhc2guYwppbmRleCA2MWI3NTllLi43MzY4MTc2IDEwMDY0NAotLS0gYS9ib2FyZC9jdTgyNC9mbGFzaC5jCisrKyBiL2JvYXJkL2N1ODI0L2ZsYXNoLmMKQEAgLTc2LDcgKzc2LDcgQEAKICAgICBERUJVR0YoIldyaXRlIHByb3RlY3QgaXM6ICAweCUwMlhcbiIsICpiY3IpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkrKykgewotICAgIAl2dV9sb25nICphZGRyID0gKHZ1X2xvbmcgKikoQ0ZHX0ZMQVNIX0JBU0UgKyBpICogRkxBU0hfQkFOS19TSVpFKTsKKwl2dV9sb25nICphZGRyID0gKHZ1X2xvbmcgKikoQ0ZHX0ZMQVNIX0JBU0UgKyBpICogRkxBU0hfQkFOS19TSVpFKTsKIAogCWFkZHJbMF0gPSAweDAwOTAwMDkwOwogCkBAIC05MSw3ICs5MSw3IEBACiAJICAgIChhZGRyWzJdID09IGFkZHJbM10pICYmIChhZGRyWzJdID09IElOVEVMX0lEXzI4RjE2MEYzQikpCiAJewogCSAgICBmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gKEZMQVNIX01BTl9JTlRFTCAmIEZMQVNIX1ZFTkRNQVNLKSB8Ci0JICAgIAkJCSAgICAgKElOVEVMX0lEXzI4RjE2MEYzQiAmIEZMQVNIX1RZUEVNQVNLKTsKKwkJCQkgICAgIChJTlRFTF9JRF8yOEYxNjBGM0IgJiBGTEFTSF9UWVBFTUFTSyk7CiAJfSBlbHNlIHsKIAkgICAgZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CiAJICAgIGFkZHJbMF0gPSAweEZGRkZGRkZGOwpAQCAtMTA4LDEyICsxMDgsMTIgQEAKIAlmb3IgKGogPSAwOyBqIDwgZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQ7IGorKykgewogCQlpZiAoaiA8PSA3KSB7CiAJCQlmbGFzaF9pbmZvW2ldLnN0YXJ0W2pdID0gQ0ZHX0ZMQVNIX0JBU0UgKwotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGkgKiBGTEFTSF9CQU5LX1NJWkUgKwotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIGogKiBQQVJBTV9TRUNUX1NJWkU7CisJCQkJCQkgaSAqIEZMQVNIX0JBTktfU0laRSArCisJCQkJCQkgaiAqIFBBUkFNX1NFQ1RfU0laRTsKIAkJfSBlbHNlIHsKIAkJCWZsYXNoX2luZm9baV0uc3RhcnRbal0gPSBDRkdfRkxBU0hfQkFTRSArCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgaSAqIEZMQVNIX0JBTktfU0laRSArCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgKGogLSA3KSpNQUlOX1NFQ1RfU0laRTsKKwkJCQkJCSBpICogRkxBU0hfQkFOS19TSVpFICsKKwkJCQkJCSAoaiAtIDcpKk1BSU5fU0VDVF9TSVpFOwogCQl9CiAJfQogCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOwpAQCAtMTI0LDI4ICsxMjQsMjggQEAKICNpZiBDRkdfTU9OSVRPUl9CQVNFID49IENGR19GTEFTSF9CQVNFCiAjaWYgQ0ZHX01PTklUT1JfQkFTRSA+PSBDRkdfRkxBU0hfQkFTRSArIEZMQVNIX0JBTktfU0laRQogICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgQ0ZHX01PTklUT1JfQkFTRSwKLSAgICAgICAgICAgICAgQ0ZHX01PTklUT1JfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKLSAgICAgICAgICAgICAgJmZsYXNoX2luZm9bMV0pOworCSAgICAgIENGR19NT05JVE9SX0JBU0UsCisJICAgICAgQ0ZHX01PTklUT1JfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKKwkgICAgICAmZmxhc2hfaW5mb1sxXSk7CiAjZWxzZQogICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgQ0ZHX01PTklUT1JfQkFTRSwKLSAgICAgICAgICAgICAgQ0ZHX01PTklUT1JfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKLSAgICAgICAgICAgICAgJmZsYXNoX2luZm9bMF0pOworCSAgICAgIENGR19NT05JVE9SX0JBU0UsCisJICAgICAgQ0ZHX01PTklUT1JfQkFTRSArIG1vbml0b3JfZmxhc2hfbGVuIC0gMSwKKwkgICAgICAmZmxhc2hfaW5mb1swXSk7CiAjZW5kaWYKICNlbmRpZgogCiAjaWYgKENGR19FTlZfSVNfSU5fRkxBU0ggPT0gMSkgJiYgZGVmaW5lZChDRkdfRU5WX0FERFIpCiAjaWYgQ0ZHX0VOVl9BRERSID49IENGR19GTEFTSF9CQVNFICsgRkxBU0hfQkFOS19TSVpFCiAgICAgZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotICAgICAgICAgICAgICBDRkdfRU5WX0FERFIsCi0gICAgICAgICAgICAgIENGR19FTlZfQUREUiArIENGR19FTlZfU0laRSAtIDEsCi0gICAgICAgICAgICAgICZmbGFzaF9pbmZvWzFdKTsKKwkgICAgICBDRkdfRU5WX0FERFIsCisJICAgICAgQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TSVpFIC0gMSwKKwkgICAgICAmZmxhc2hfaW5mb1sxXSk7CiAjZWxzZQogICAgIGZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgQ0ZHX0VOVl9BRERSLAotICAgICAgICAgICAgICBDRkdfRU5WX0FERFIgKyBDRkdfRU5WX1NJWkUgLSAxLAotICAgICAgICAgICAgICAmZmxhc2hfaW5mb1swXSk7CisJICAgICAgQ0ZHX0VOVl9BRERSLAorCSAgICAgIENGR19FTlZfQUREUiArIENGR19FTlZfU0laRSAtIDEsCisJICAgICAgJmZsYXNoX2luZm9bMF0pOwogI2VuZGlmCiAjZW5kaWYKIApAQCAtMjY4LDcgKzI2OCw3IEBACiAJCQl3aGlsZSAoKChhZGRyWzBdICYgMHgwMDgwMDA4MCkgIT0gMHgwMDgwMDA4MCkgfHwKIAkJCSAgICAgICAoKGFkZHJbMV0gJiAweDAwODAwMDgwKSAhPSAweDAwODAwMDgwKSApIHsKIAkJCQlpZiAoKG5vdz1nZXRfdGltZXIoc3RhcnQpKSA+Ci0JCQkJICAgICAgICAgICBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJCQkgICBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgewogCQkJCQlwcmludGYgKCJUaW1lb3V0XG4iKTsKIAkJCQkJYWRkclswXSA9IDB4MDBCMDAwQjA7IC8qIHN1c3BlbmQgZXJhc2UgKi8KIAkJCQkJYWRkclswXSA9IDB4MDBGRjAwRkY7IC8qIHRvIHJlYWQgbW9kZSAgKi8KQEAgLTMyOCw3ICszMjgsNyBAQAogCQlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgbDsgaSsrLCBjcCsrKSB7CiAJCQlpZiAoaSA+PSA0KSB7CiAJCQkJKmRhdGFoID0gKCpkYXRhaCA8PCA4KSB8Ci0JCQkJICAgICAgICAgICAgICAgICgoKmRhdGFsICYgMHhGRjAwMDAwMCkgPj4gMjQpOworCQkJCQkJKCgqZGF0YWwgJiAweEZGMDAwMDAwKSA+PiAyNCk7CiAJCQl9CiAKIAkJCSpkYXRhbCA9ICgqZGF0YWwgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKQEAgLTM0Miw3ICszNDIsNyBAQAogCiAJCQlpZiAoaSA+PSA0KSB7CiAJCQkJKmRhdGFoID0gKCpkYXRhaCA8PCA4KSB8Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgICAoKCpkYXRhbCAmIDB4RkYwMDAwMDApID4+IDI0KTsKKwkJCQkJCSgoKmRhdGFsICYgMHhGRjAwMDAwMCkgPj4gMjQpOwogCQkJfQogCiAJCQkqZGF0YWwgPSAoKmRhdGFsIDw8IDgpIHwgdG1wOwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJCWZvciAoOyBjbnQgPT0gMCAmJiBpIDwgRkxBU0hfV0lEVEg7ICsraSwgKytjcCkgewogCQkJaWYgKGkgPj0gNCkgewogCQkJCSpkYXRhaCA9ICgqZGF0YWggPDwgOCkgfAotCQkJCSAgICAgICAgICAgICAgICAoKCpkYXRhbCAmIDB4RkYwMDAwMDApID4+IDI0KTsKKwkJCQkJCSgoKmRhdGFsICYgMHhGRjAwMDAwMCkgPj4gMjQpOwogCQkJfQogCiAJCQkqZGF0YWwgPSAoKmRhdGFoIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CkBAIC0zOTQsNyArMzk0LDcgQEAKIAlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgRkxBU0hfV0lEVEggJiYgY250ID4gMDsgKytpLCArK2NwKSB7CiAJCWNoYXIgdG1wOwogCi0gICAgICAJCXRtcCA9ICpzcmM7CisJCXRtcCA9ICpzcmM7CiAKIAkJc3JjKys7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2N1ODI0L3UtYm9vdC5sZHMgYi9ib2FyZC9jdTgyNC91LWJvb3QubGRzCmluZGV4IDQwMWE5YWEuLjdlNjA1M2EgMTAwNjQ0Ci0tLSBhL2JvYXJkL2N1ODI0L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvY3U4MjQvdS1ib290LmxkcwpAQCAtMTAzLDYgKzEwMywxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTI2LDQgKzEzMSwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2RucDExMTAvTWFrZWZpbGUgYi9ib2FyZC9kbnAxMTEwL01ha2VmaWxlCmluZGV4IDI0MzdiMjIuLjMxZWY2OTUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RucDExMTAvTWFrZWZpbGUKKysrIGIvYm9hcmQvZG5wMTExMC9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogU09CSlMJOj0gbWVtc2V0dXAubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9kbnAxMTEwL2ZsYXNoLmMgYi9ib2FyZC9kbnAxMTEwL2ZsYXNoLmMKaW5kZXggZjRhOGI5OS4uNDQxNjM5MyAxMDA2NDQKLS0tIGEvYm9hcmQvZG5wMTExMC9mbGFzaC5jCisrKyBiL2JvYXJkL2RucDExMTAvZmxhc2guYwpAQCAtNjcsMTYgKzY3LDE2IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgaSsrKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChpKQotICAgICAgICB7Ci0gICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIGZsYXNoX2dldF9zaXplKChGUFcgKilQSFlTX0ZMQVNIXzEsICZmbGFzaF9pbmZvW2ldKTsKLQkgICAgICAgICBmbGFzaF9nZXRfb2Zmc2V0cyhQSFlTX0ZMQVNIXzEsICZmbGFzaF9pbmZvW2ldKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgZGVmYXVsdDoKLQkgICAgICAgIHBhbmljKCJjb25maWd1cmVkIHRvIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCXN3aXRjaCAoaSkKKwl7CisJICAgY2FzZSAwOgorCSAgICBmbGFzaF9nZXRfc2l6ZSgoRlBXICopUEhZU19GTEFTSF8xLCAmZmxhc2hfaW5mb1tpXSk7CisJCSBmbGFzaF9nZXRfb2Zmc2V0cyhQSFlTX0ZMQVNIXzEsICZmbGFzaF9pbmZvW2ldKTsKKwkJYnJlYWs7CisJICAgZGVmYXVsdDoKKwkJcGFuaWMoImNvbmZpZ3VyZWQgdG8gbWFueSBmbGFzaCBiYW5rcyFcbiIpOworCQlicmVhazsKKwl9CiAJc2l6ZSArPSBmbGFzaF9pbmZvW2ldLnNpemU7CiAgICAgfQogCkBAIC0xMjIsNyArMTIyLDcgQEAKIAlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewogCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CiAJCXJldHVybjsKLSAgICAgICAgfQorCX0KIAogCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewogCQljYXNlIEZMQVNIX01BTl9JTlRFTDoJcHJpbnRmICgiSU5URUwgIik7CQlicmVhazsKQEAgLTEzMywyMSArMTMzLDIxIEBACiAgICBjYXNlIEZMQVNIXzI4RjEyOEozQToKIAkJCQlwcmludGYgKCIyOEYxMjhKM0FcbiIpOyBicmVhazsKIAlkZWZhdWx0OgkJcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGVcbiIpOyBicmVhazsKLSAgICAgICAgfQorCX0KIAogCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCi0JICAgICAgICBpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCQlpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOwogCiAJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwogCWZvciAoaT0wOyBpPGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7Ci0JICAgICAgICBpZiAoKGkgJSA1KSA9PSAwKQotCSAgICAgICAgcHJpbnRmICgiXG4gICAiKTsKKwkJaWYgKChpICUgNSkgPT0gMCkKKwkJcHJpbnRmICgiXG4gICAiKTsKIAkJcHJpbnRmICgiICUwOGxYJXMiLAogCQkJaW5mby0+c3RhcnRbaV0sCiAJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIKIAkJKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYgKCJcbiIpOworCX0KKwlwcmludGYgKCJcbiIpOwogCXJldHVybjsKIH0KIApAQCAtMTY0LDcgKzE2NCw3IEBACiAKICAgIG1iKCk7CiAJdmFsdWUgPSBhZGRyWzBdOwotCQorCiAgICBzd2l0Y2ggKHZhbHVlKSB7CiAKICAgIGNhc2UgKEZQVylJTlRFTF9NQU5VRkFDVDoKQEAgLTI4MCw4ICsyODAsOCBAQAogCQkJKmFkZHIgPSAoRlBXKTB4MDBGRjAwRkY7IC8qIHJlc2VzdCB0byByZWFkIG1vZGUgICAgICAgICAgKi8KIAogCQkJcHJpbnRmICgiIGRvbmVcbiIpOwotICAgICAgICB9Ci0gICAgICAgIH0KKwl9CisJfQogCXJldHVybiByY29kZTsKIH0KIApAQCAtMzUwLDcgKzM1MCw3IEBACiAJCWNudCAtPSBwb3J0X3dpZHRoOwogCQlpZiAoY291bnQrKyA+IDB4ODAwKQogCQl7Ci0gICAgICAgICBzcGluX3doZWVsKCk7CisJIHNwaW5fd2hlZWwoKTsKIAkJCWNvdW50ID0gMDsKIAkJfQogICAgIH0KQEAgLTQyMiw0ICs0MjIsMyBAQAogICAgcHJpbnRmKCJcMDEwJWMiLCB3W3BdKTsKICAgICgrK3AgPT0gMykgPyAocCA9IDApIDogMDsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZG5wMTExMC9tZW1zZXR1cC5TIGIvYm9hcmQvZG5wMTExMC9tZW1zZXR1cC5TCmluZGV4IDY1MzljMjAuLjE2MjJhZWEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RucDExMTAvbWVtc2V0dXAuUworKysgYi9ib2FyZC9kbnAxMTEwL21lbXNldHVwLlMKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiAKLQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInZlcnNpb24uaCIKIApAQCAtMzksNyArMzgsNyBAQAogI2RlZmluZSBNRENBUzAxCQkweDA4CQkvKiBDQVMgd2F2ZWZvcm0gcm90YXRlIHJlZyAxIGJhbmsgICovCiAjZGVmaW5lIE1EQ0FTMDIJCTB4MEMJCS8qIENBUyB3YXZlZm9ybSByb3RhdGUgcmVnIDIgYmFuayAgKi8KICNkZWZpbmUgTURSRUZSCQkweDFDCQkvKiBEUkFNIHJlZnJlc2ggY29udHJvbCByZWcgICAgICAgICovCi0jZGVmaW5lIE1EQ0FTMjAJCTB4MjAJCS8qIENBUyB3YXZlZm9ybSByb3RhdGUgcmVnIDAgYmFuayAgKi8gCisjZGVmaW5lIE1EQ0FTMjAJCTB4MjAJCS8qIENBUyB3YXZlZm9ybSByb3RhdGUgcmVnIDAgYmFuayAgKi8KICNkZWZpbmUgTURDQVMyMQkJMHgyNAkJLyogQ0FTIHdhdmVmb3JtIHJvdGF0ZSByZWcgMSBiYW5rICAqLwogI2RlZmluZSBNRENBUzIyCQkweDI4CQkvKiBDQVMgd2F2ZWZvcm0gcm90YXRlIHJlZyAyIGJhbmsgICovCiAjZGVmaW5lIE1FQ1IJCTB4MTgJCS8qIEV4cGFuc2lvbiBtZW1vcnkgKFBDTUNJQSkgYnVzIGNvbmZpZ3VyYXRpb24gIHJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9ib2FyZC9kbnAxMTEwL3UtYm9vdC5sZHMgYi9ib2FyZC9kbnAxMTEwL3UtYm9vdC5sZHMKaW5kZXggZjRiMGFkZS4uN2FjMTY1ZSAxMDA2NDQKLS0tIGEvYm9hcmQvZG5wMTExMC91LWJvb3QubGRzCisrKyBiL2JvYXJkL2RucDExMTAvdS1ib290LmxkcwpAQCAtMjYsMjggKzI2LDM0IEBACiBFTlRSWShfc3RhcnQpCiBTRUNUSU9OUwogewotICAgICAgICAuID0gMHgwMDAwMDAwMDsKKwkuID0gMHgwMDAwMDAwMDsKIAotICAgICAgICAuID0gQUxJR04oNCk7CisJLiA9IEFMSUdOKDQpOwogCS50ZXh0ICAgICAgOgogCXsKIAkgIGNwdS9zYTExMDAvc3RhcnQubwkoLnRleHQpCiAJICAqKC50ZXh0KQogCX0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5kYXRhIDogeyAqKC5kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZ290IDogeyAqKC5nb3QpIH0KKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKwogCiAJYXJtYm9vdF9lbmRfZGF0YSA9IC47CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuYnNzIDogeyAqKC5ic3MpIH0KKwkuID0gQUxJR04oNCk7CisJLmJzcyA6IHsgKiguYnNzKSB9CiAKIAlhcm1ib290X2VuZCA9IC47CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9lYm9ueS9NYWtlZmlsZSBiL2JvYXJkL2Vib255L01ha2VmaWxlCmluZGV4IDYxYWVlNjguLjRhMzkyN2IgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Vib255L01ha2VmaWxlCisrKyBiL2JvYXJkL2Vib255L01ha2VmaWxlCkBAIC0yOSw3ICsyOSw3IEBACiBTT0JKUwk9IGluaXQubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9lYm9ueS9lYm9ueS5jIGIvYm9hcmQvZWJvbnkvZWJvbnkuYwppbmRleCBiMzZkNTQyLi5iYjI4NGFlIDEwMDY0NAotLS0gYS9ib2FyZC9lYm9ueS9lYm9ueS5jCisrKyBiL2JvYXJkL2Vib255L2Vib255LmMKQEAgLTkyLDcgKzkyLDYgQEAKIH0KIAogCi0KIGludCBjaGVja2JvYXJkICh2b2lkKQogewogCXN5c19pbmZvX3Qgc3lzaW5mbzsKQEAgLTIyNSw4ICsyMjQsOCBAQAogCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgIHN0cmFwID0gbWZkY3IoY3BjMF9zdHJwMSk7CiAgICAgaWYoIChzdHJhcCAmIDB4MDAxMDAwMDApID09IDAgKXsKLSAgICAgICAgcHJpbnRmKCJQQ0k6IENQQzBfU1RSUDFbUEFFXSBub3Qgc2V0LlxuIik7Ci0gICAgICAgIHJldHVybiAwOworCXByaW50ZigiUENJOiBDUEMwX1NUUlAxW1BBRV0gbm90IHNldC5cbiIpOworCXJldHVybiAwOwogICAgIH0KIAogICAgIHJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZWJvbnkvZmxhc2guYyBiL2JvYXJkL2Vib255L2ZsYXNoLmMKaW5kZXggOTYxYzYxNi4uZDhiNDc1NyAxMDA2NDQKLS0tIGEvYm9hcmQvZWJvbnkvZmxhc2guYworKysgYi9ib2FyZC9lYm9ueS9mbGFzaC5jCkBAIC01NSwxNCArNTUsMTQgQEAKIGZsYXNoX2luZm9fdAlmbGFzaF9pbmZvW0NGR19NQVhfRkxBU0hfQkFOS1NdOyAvKiBpbmZvIGZvciBGTEFTSCBjaGlwcwkqLwogCiBzdGF0aWMgIHVuc2lnbmVkICAgIGxvbmcgICAgZmxhc2hfYWRkcl90YWJsZVs4XVtDRkdfTUFYX0ZMQVNIX0JBTktTXSA9IHsKLSAgICAgICAgezB4ZmZjMDAwMDAsIDB4ZmZlMDAwMDAsIDB4ZmY4ODAwMDB9LCAgIC8qIDA6MDAwOiBjb25maWd1cmF0b24gMyAqLwotICAgICAgICB7MHhmZmMwMDAwMCwgMHhmZmUwMDAwMCwgMHhmZjgwMDAwMH0sICAgLyogMTowMDE6IGNvbmZpZ3VyYXRvbiA0ICovCi0gICAgICAgIHsweGZmYzAwMDAwLCAweGZmZTAwMDAwLCAweDAwMDAwMDAwfSwgICAvKiAyOjAxMDogY29uZmlndXJhdG9uIDcgKi8KLSAgICAgICAgezB4ZmZjMDAwMDAsIDB4ZmZlMDAwMDAsIDB4MDAwMDAwMDB9LCAgIC8qIDM6MDExOiBjb25maWd1cmF0b24gOCAqLwotICAgICAgICB7MHhmZjgwMDAwMCwgMHhmZmEwMDAwMCwgMHhmZmY4MDAwMH0sICAgLyogNDoxMDA6IGNvbmZpZ3VyYXRvbiAxICovCi0gICAgICAgIHsweGZmODAwMDAwLCAweGZmYTAwMDAwLCAweGZmZjAwMDAwfSwgICAvKiA1OjEwMTogY29uZmlndXJhdG9uIDIgKi8KLSAgICAgICAgezB4ZmZjMDAwMDAsIDB4ZmZlMDAwMDAsIDB4MDAwMDAwMDB9LCAgIC8qIDY6MTEwOiBjb25maWd1cmF0b24gNSAqLwotICAgICAgICB7MHhmZmMwMDAwMCwgMHhmZmUwMDAwMCwgMHgwMDAwMDAwMH0gICAgLyogNzoxMTE6IGNvbmZpZ3VyYXRvbiA2ICovCisJezB4ZmZjMDAwMDAsIDB4ZmZlMDAwMDAsIDB4ZmY4ODAwMDB9LCAgIC8qIDA6MDAwOiBjb25maWd1cmF0b24gMyAqLworCXsweGZmYzAwMDAwLCAweGZmZTAwMDAwLCAweGZmODAwMDAwfSwgICAvKiAxOjAwMTogY29uZmlndXJhdG9uIDQgKi8KKwl7MHhmZmMwMDAwMCwgMHhmZmUwMDAwMCwgMHgwMDAwMDAwMH0sICAgLyogMjowMTA6IGNvbmZpZ3VyYXRvbiA3ICovCisJezB4ZmZjMDAwMDAsIDB4ZmZlMDAwMDAsIDB4MDAwMDAwMDB9LCAgIC8qIDM6MDExOiBjb25maWd1cmF0b24gOCAqLworCXsweGZmODAwMDAwLCAweGZmYTAwMDAwLCAweGZmZjgwMDAwfSwgICAvKiA0OjEwMDogY29uZmlndXJhdG9uIDEgKi8KKwl7MHhmZjgwMDAwMCwgMHhmZmEwMDAwMCwgMHhmZmYwMDAwMH0sICAgLyogNToxMDE6IGNvbmZpZ3VyYXRvbiAyICovCisJezB4ZmZjMDAwMDAsIDB4ZmZlMDAwMDAsIDB4MDAwMDAwMDB9LCAgIC8qIDY6MTEwOiBjb25maWd1cmF0b24gNSAqLworCXsweGZmYzAwMDAwLCAweGZmZTAwMDAwLCAweDAwMDAwMDAwfSAgICAvKiA3OjExMTogY29uZmlndXJhdG9uIDYgKi8KIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1Niw3ICsxNTYsNiBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAjaWYgMApAQCAtMTk5LDEwICsxOTgsMTAgQEAKIHZvaWQgZmxhc2hfcHJpbnRfaW5mbyAgKGZsYXNoX2luZm9fdCAqaW5mbykKIHsKIAlpbnQgaTsKLSAgICAgICAgaW50IGs7Ci0gICAgICAgIGludCBzaXplOwotICAgICAgICBpbnQgZXJhc2VkOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpmbGFzaDsKKwlpbnQgazsKKwlpbnQgc2l6ZTsKKwlpbnQgZXJhc2VkOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmZsYXNoOwogCiAJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKIAkJcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOwpAQCAtMjUwLDE3ICsyNDksMTcgQEAKIAogCXByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKIAlmb3IgKGk9MDsgaTxpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogQ2hlY2sgaWYgd2hvbGUgc2VjdG9yIGlzIGVyYXNlZAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmIChpICE9IChpbmZvLT5zZWN0b3JfY291bnQtMSkpCisJCS8qCisJCSAqIENoZWNrIGlmIHdob2xlIHNlY3RvciBpcyBlcmFzZWQKKwkJICovCisJCWlmIChpICE9IChpbmZvLT5zZWN0b3JfY291bnQtMSkpCiAJCQlzaXplID0gaW5mby0+c3RhcnRbaSsxXSAtIGluZm8tPnN0YXJ0W2ldOwotICAgICAgICAgICAgICAgIGVsc2UKKwkJZWxzZQogCQkJc2l6ZSA9IGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSAtIGluZm8tPnN0YXJ0W2ldOwotICAgICAgICAgICAgICAgIGVyYXNlZCA9IDE7Ci0gICAgICAgICAgICAgICAgZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0W2ldOwotICAgICAgICAgICAgICAgIHNpemUgPSBzaXplID4+IDI7ICAgICAgICAvKiBkaXZpZGUgYnkgNCBmb3IgbG9uZ3dvcmQgYWNjZXNzICovCi0gICAgICAgICAgICAgICAgZm9yIChrPTA7IGs8c2l6ZTsgaysrKQorCQllcmFzZWQgPSAxOworCQlmbGFzaCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopaW5mby0+c3RhcnRbaV07CisJCXNpemUgPSBzaXplID4+IDI7ICAgICAgICAvKiBkaXZpZGUgYnkgNCBmb3IgbG9uZ3dvcmQgYWNjZXNzICovCisJCWZvciAoaz0wOyBrPHNpemU7IGsrKykKIAkJewogCQkJaWYgKCpmbGFzaCsrICE9IDB4ZmZmZmZmZmYpCiAJCQl7CkBAIC0yOTgsMTYgKzI5NywxNiBAQAogCQkJdWxvbmcgYmFzZSA9ICh1bG9uZylhZGRyOwogCQkJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKilhZGRyOwogCi0gICAgICAgICAgICBERUJVR0YoIkZMQVNIIEFERFI6ICUwOHhcbiIsICh1bnNpZ25lZClhZGRyICk7CisJICAgIERFQlVHRigiRkxBU0ggQUREUjogJTA4eFxuIiwgKHVuc2lnbmVkKWFkZHIgKTsKIAogCQkJLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KLSAgICAgICAgICAgIHVkZWxheSgxMDAwMCk7CisJICAgIHVkZWxheSgxMDAwMCk7CiAJCQlhZGRyMltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7Ci0gICAgICAgICAgICB1ZGVsYXkoMTAwMCk7CisJICAgIHVkZWxheSgxMDAwKTsKIAkJCWFkZHIyW0FERFIxXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKLSAgICAgICAgICAgIHVkZWxheSgxMDAwKTsKKwkgICAgdWRlbGF5KDEwMDApOwogCQkJYWRkcjJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwOTAwMDkwOwotICAgICAgICAgICAgdWRlbGF5KDEwMDApOworCSAgICB1ZGVsYXkoMTAwMCk7CiAKICNpZmRlZiBDT05GSUdfQURDSU9QCiAJCQl2YWx1ZSA9IGFkZHIyWzJdOwpAQCAtMzUyLDExICszNTEsMTEgQEAKIAkJCQlpbmZvLT5zZWN0b3JfY291bnQgPSAzMjsKIAkJCQlpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsKIAkJCQlicmVhazsJCQkJLyogPT4gMiBNQgkJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKEZMQVNIX1dPUkRfU0laRSlTVE1fSURfRjA0MEI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMDQwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSA4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5zaXplID0gMHgwMDgwMDAwOyAvKiA9PiA1MTIga28gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CQkJCQorCQkJY2FzZSAoRkxBU0hfV09SRF9TSVpFKVNUTV9JRF9GMDQwQjoKKwkJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsKKwkJCQlpbmZvLT5zZWN0b3JfY291bnQgPSA4OworCQkJCWluZm8tPnNpemUgPSAweDAwODAwMDA7IC8qID0+IDUxMiBrbyAqLworCQkJCWJyZWFrOwogCQkJY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9GMDQwQjoKIAkJCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsKIAkJCQlpbmZvLT5zZWN0b3JfY291bnQgPSA4OwpkaWZmIC0tZ2l0IGEvYm9hcmQvZWJvbnkvaW5pdC5TIGIvYm9hcmQvZWJvbnkvaW5pdC5TCmluZGV4IDNhZTkzZDYuLmNjOGY4YjQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2Vib255L2luaXQuUworKysgYi9ib2FyZC9lYm9ueS9pbml0LlMKQEAgLTk0LDUgKzk0LDMgQEAKICAgICB0bGJlbnRyeSggQ0ZHX1BDSV9CQVNFLCBTWl8yNTZNLCAweDAwMDAwMDAwLCAyLCBBQ19SfEFDX1d8U0FfR3xTQV9JICkKICAgICB0bGJlbnRyeSggQ0ZHX1BDSV9NRU1CQVNFLCBTWl8yNTZNLCAweDAwMDAwMDAwLCAzLCBBQ19SfEFDX1d8U0FfR3xTQV9JICkKICAgICB0bGJ0YWJfZW5kCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZWJvbnkvdS1ib290LmxkcyBiL2JvYXJkL2Vib255L3UtYm9vdC5sZHMKaW5kZXggYWI4YWY3ZC4uN2VhN2NhZiAxMDA2NDQKLS0tIGEvYm9hcmQvZWJvbnkvdS1ib290LmxkcworKysgYi9ib2FyZC9lYm9ueS91LWJvb3QubGRzCkBAIC0xMjYsNiArMTI2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CmRpZmYgLS1naXQgYS9ib2FyZC9lYm9ueS91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvZWJvbnkvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCBjMjkwYTQzLi5hZjQ5N2IxIDEwMDY0NAotLS0gYS9ib2FyZC9lYm9ueS91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL2Vib255L3UtYm9vdC5sZHMuZGVidWcKQEAgLTEwNiw2ICsxMDYsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyOCw0ICsxMzMsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9lbHRlYy9iYWI3eHgvTWFrZWZpbGUgYi9ib2FyZC9lbHRlYy9iYWI3eHgvTWFrZWZpbGUKaW5kZXggNmU0MTJjMi4uN2Q4ZWQyNiAxMDA2NDQKLS0tIGEvYm9hcmQvZWx0ZWMvYmFiN3h4L01ha2VmaWxlCisrKyBiL2JvYXJkL2VsdGVjL2JhYjd4eC9NYWtlZmlsZQpAQCAtMzAsNyArMzAsNyBAQAogU09CSlMJPSBhc21faW5pdC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpAQCAtNDYsMTIgKzQ2LDMgQEAKIHNpbmNsdWRlIC5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0KLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZWx0ZWMvYmFiN3h4L2FzbV9pbml0LlMgYi9ib2FyZC9lbHRlYy9iYWI3eHgvYXNtX2luaXQuUwppbmRleCA5MzRmYWJlLi4zZjg4YmMyIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9iYWI3eHgvYXNtX2luaXQuUworKysgYi9ib2FyZC9lbHRlYy9iYWI3eHgvYXNtX2luaXQuUwpAQCAtMjA0LDcgKzIwNCw3IEBACiAgICAgYmVxICAgICBTRDE2TUIyQgogCiAgICAgbGkgICAgICByMywgMHgwMDExICAgICAgICAgIC8qIGdldCBudW1iZXIgb2YgaW50ZXJuYWwgYmFua3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJvbSBzcGQgZm9yIGJhbmswLzEgKi8KKwkJCQkvKiBmcm9tIHNwZCBmb3IgYmFuazAvMSAqLwogICAgIGJsICAgICAgc3BkUmVhZAogCiAgICAgY21wbGkgICAwLCAwLCByMywgMHgwMgpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgKiBzZXQgdGhlIE1lbW9yeSBDb25maWd1cmF0aW9uIFJlZy4gMgogICovCiAgICAgbGkgICAgICByMywgMHgwMTExICAgICAgICAgIC8qIGdldCBudW1iZXIgb2YgaW50ZXJuYWwgYmFua3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnJvbSBzcGQgZm9yIGJhbmsyLzMgKi8KKwkJCQkvKiBmcm9tIHNwZCBmb3IgYmFuazIvMyAqLwogICAgIGJsICAgICAgc3BkUmVhZAogCiAgICAgY21wbGkgICAwLCAwLCByMywgMHgwMgpAQCAtMjY5LDEzICsyNjksMTMgQEAKICAqLwogUzJENjRNQjRCOgogICAgIGxpcyAgICAgcjIxLCAweDg2MzAgICAgICAgICAvKiBCU1RPUFJFID0gMHg4MCwgUkVGUkVDID0gNiwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkRMQVQgPSAzICovCisJCQkJLyogUkRMQVQgPSAzICovCiAKIC8qCiAgKiBzZXQgdGhlIE1lbW9yeSBDb25maWd1cmF0aW9uIFJlZy4gNAogICovCiAgICAgbGlzICAgICByMjIsIDB4MjQzMCAgICAgICAgIC8qIFBSRVRPQUNUID0gMiwgQUNUT1BSRSA9IDQsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdDQlVGID0gMSwgUkNCVUYgPSAxICovCisJCQkJLyogV0NCVUYgPSAxLCBSQ0JVRiA9IDEgKi8KICAgICBvcmkgICAgIHIyMiwgcjIyLCAweDIyMjAgICAgLyogU0RNT0RFID0gMHgwMjIsIEFDVE9SVyA9IDIgKi8KIAogLyoKQEAgLTI4NSwxMCArMjg1LDEwIEBACiAgICAgYmwgICAgICBzcGRSZWFkCiAKICAgICBybHdpbm0gIHIxNiwgcjMsIDIsIDI0LCAyOSAgLyogY2FsY3VsYXRlIHNpemUgaW4gTUJ5dGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKDEyOCBNQiBtYXguKSAqLworCQkJCS8qICgxMjggTUIgbWF4LikgKi8KIAogICAgIGxpICAgICAgcjMsIDB4MDAwNSAgICAgICAgICAvKiBnZXQgbnVtYmVyIG9mIGJhbmtzIGZyb20gc3BkICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBiYW5rMC8xICovCisJCQkJLyogZm9yIGJhbmswLzEgKi8KICAgICBibCAgICAgIHNwZFJlYWQKIAogICAgIGNtcGkgICAgMCwgMCwgcjMsIDIgICAgICAgICAvKiAyIGJhbmtzID8gKi8KQEAgLTMzNiwxMCArMzM2LDEwIEBACiAgICAgYmwgICAgICBzcGRSZWFkCiAKICAgICBybHdpbm0gIHIxOCwgcjMsIDIsIDI0LCAyOSAgLyogY2FsY3VsYXRlIHNpemUgaW4gTUJ5dGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKDEyOCBNQiBtYXguKSAqLworCQkJCS8qICgxMjggTUIgbWF4LikgKi8KIAogICAgIGxpICAgICAgcjMsIDB4MDEwNSAgICAgICAgICAvKiBnZXQgbnVtYmVyIG9mIGJhbmtzIGZyb20gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3BkIGJhbmswLzEgKi8KKwkJCQkvKiBzcGQgYmFuazAvMSAqLwogICAgIGJsICAgICAgc3BkUmVhZAogCiAgICAgY21waSAgICAwLCAwLCByMywgMiAgICAgICAgIC8qIDIgYmFua3MgPyAqLwpAQCAtMzY1LDcgKzM2NSw3IEBACiAKIGdldFNwZFJvd0JhbmswMToKICAgICBsaSAgICAgIHIzLCAweDAwMDMgICAgICAgICAgLyogZ2V0IG51bWJlciBvZiByb3cgYml0cyBmcm9tICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNwZCBmcm9tIGJhbmswLzEgKi8KKwkJCQkvKiBzcGQgZnJvbSBiYW5rMC8xICovCiAgICAgYmwgICAgICBzcGRSZWFkCiAgICAgb3JpICAgICByMjAsIHIyMCwgKE1DQ1IxX0JLMF85QklUUyB8IE1DQ1IxX0JLMV85QklUUykKICAgICBjbXBsaSAgIDAsIDAsIHIzLCAweDAwMDkgICAgLyogYmFuazAgLSAgOSByb3cgYml0cyAqLwpAQCAtMzkyLDcgKzM5Miw3IEBACiAKIGdldFNwZFJvd0JhbmsyMzoKICAgICBsaSAgICAgcjMsIDB4MDEwMyAgICAgICAgICAgLyogZ2V0IG51bWJlciBvZiByb3cgYml0cyBmcm9tICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNwZCBmb3IgYmFuazIvMyAqLworCQkJCS8qIHNwZCBmb3IgYmFuazIvMyAqLwogICAgIGJsICAgICAgc3BkUmVhZAogCiAgICAgb3JpICAgICByMjAsIHIyMCwgKE1DQ1IxX0JLMl85QklUUyB8IE1DQ1IxX0JLM185QklUUykKQEAgLTQxNSwxMyArNDE1LDEzIEBACiB3cml0ZVJvd0JpdHM6CiAgICAgbGlzICAgICByMjEsIDB4MDAwYSAgICAgICAgIC8qIENQWCA9IDEsIFJBUzZQID0gNCAqLwogICAgIG9yaSAgICAgcjIxLCByMjEsIDB4MjI5MyAgICAvKiBDQVM1ID0gMiwgQ1A0ID0gMSwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ0FTMyA9IDIsIFJDRDIgPSAyLCBSUCA9IDMgKi8KKwkJCQkvKiBDQVMzID0gMiwgUkNEMiA9IDIsIFJQID0gMyAqLwogLyoKICAqIHNldCB0aGUgTWVtb3J5IENvbmZpZ3VyYXRpb24gUmVnLiA0CiAgKi8KICAgICBsaXMgICAgIHIyMiwgMHgwMDEwICAgICAgICAgLyogYWxsIFNEUkFNIHBhcmFtZXRlciAwLCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXQ0JVRiBmbG93IHRocm91Z2gsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJDQlVGIHJlZ2lzdGVyZWQgKi8KKwkJCQkvKiBXQ0JVRiBmbG93IHRocm91Z2gsICovCisJCQkJLyogUkNCVUYgcmVnaXN0ZXJlZCAqLwogLyoKICAqIGdldCB0aGUgc2l6ZSBvZiBiYW5rIDAtMwogICovCkBAIC00MjksNyArNDI5LDcgQEAKICAgICBibCAgICAgIHNwZFJlYWQKIAogICAgIGxpICAgICAgcjE2LCAwICAgICAgICAgICAgICAvKiBiYW5rIHNpemUgaXM6ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICg4KjJecm93KjJeY29sdW1uKS8weDEwMDAwMCBNQiAqLworCQkJCS8qICg4KjJecm93KjJeY29sdW1uKS8weDEwMDAwMCBNQiAqLwogICAgIG9yaSAgICAgcjE2LCByMTYsIDB4ODAwMAogICAgIHJsd25tICAgcjE2LCByMTYsIHIzLCAwLCAzMQogCkBAIC00MzksNyArNDM5LDcgQEAKICAgICBybHdubSAgIHIxNiwgcjE2LCByMywgMCwgMzEKIAogICAgIGxpICAgICAgcjMsIDB4MDAwNSAgICAgICAgICAvKiBnZXQgbnVtYmVyIG9mIGJhbmtzIGZyb20gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3BkIGZvciBiYW5rMC8xICovCisJCQkJLyogc3BkIGZvciBiYW5rMC8xICovCiAgICAgYmwgICAgICBzcGRSZWFkCiAKICAgICBjbXBpICAgIDAsIDAsIHIzLCAyICAgICAgICAgLyogMiBiYW5rcyA/ICovCkBAIC00ODcsNyArNDg3LDcgQEAKICAgICBibCAgICAgIHNwZFJlYWQKIAogICAgIGxpICAgICAgcjE4LCAwICAgICAgICAgICAgICAvKiBiYW5rIHNpemUgaXM6ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICg4KjJecm93KjJeY29sdW1uKS8weDEwMDAwMCBNQiAqLworCQkJCS8qICg4KjJecm93KjJeY29sdW1uKS8weDEwMDAwMCBNQiAqLwogICAgIG9yaSAgICAgcjE4LCByMTgsIDB4ODAwMAogICAgIHJsd25tICAgcjE4LCByMTgsIHIzLCAwLCAzMQogCkBAIC00OTcsNyArNDk3LDcgQEAKICAgICBybHdubSAgIHIxOCwgcjE4LCByMywgMCwgMzEKIAogICAgIGxpICAgICAgcjMsIDB4MDEwNSAgICAgICAgICAvKiBnZXQgbnVtYmVyIG9mIGJhbmtzIGZyb20gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3BkIGZvciBiYW5rMi8zICovCisJCQkJLyogc3BkIGZvciBiYW5rMi8zICovCiAgICAgYmwgICAgICBzcGRSZWFkCiAKICAgICBjbXBpICAgIDAsIDAsIHIzLCAyICAgICAgICAgLyogMiBiYW5rcyA/ICovCkBAIC03MDEsMjggKzcwMSwyOCBAQAogCiBjb21tb24zOgogICAgIGxpICAgICAgcjQsIDB4MTAxMCAgICAgICAgICAvKiByZWZlc2ggY3ljbGUgMTAyOCBjbG9ja3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIGxlZnQgc2hpZnRlZCAyICovCisJCQkJLyogIGxlZnQgc2hpZnRlZCAyICovCiAgICAgY21wbGkgICAwLCAwLCByMywgMHgwMDAwICAgIC8qIDE1LjYgdXMgPyAqLwogICAgIGJlcSAgICAgd3JpdGVSZWZyZXNoCiAKICAgICBsaSAgICAgIHI0LCAweDA4MDggICAgICAgICAgLyogcmVmZXNoIGN5Y2xlIDUxNCBjbG9ja3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVmdCBzaGlmdGVkIDIgKi8KKwkJCQkvKiBsZWZ0IHNoaWZ0ZWQgMiAqLwogICAgIGNtcGxpICAgMCwgMCwgcjMsIDB4MDAwMiAgICAvKiA3LjggdXMgPyAqLwogICAgIGJlcSAgICAgd3JpdGVSZWZyZXNoCiAKICAgICBsaSAgICAgIHI0LCAweDIwMjAgICAgICAgICAgLyogcmVmZXNoIGN5Y2xlIDIwNTYgY2xvY2tzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxlZnQgc2hpZnRlZCAyICovCisJCQkJLyogbGVmdCBzaGlmdGVkIDIgKi8KICAgICBjbXBsaSAgIDAsIDAsIHIzLCAweDAwMDMgICAgLyogMzEuMyB1cyA/ICovCiAgICAgYmVxICAgICB3cml0ZVJlZnJlc2gKIAogICAgIGxpICAgICAgcjQsIDB4NDA0MCAgICAgICAgICAvKiByZWZlc2ggY3ljbGUgNDExMiBjbG9ja3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVmdCBzaGlmdGVkIDIgKi8KKwkJCQkvKiBsZWZ0IHNoaWZ0ZWQgMiAqLwogICAgIGNtcGxpICAgMCwgMCwgcjMsIDB4MDAwNCAgICAvKiA2Mi41IHVzID8gKi8KICAgICBiZXEgICAgIHdyaXRlUmVmcmVzaAogCiAgICAgbGkgICAgICByNCwgMAogICAgIG9yaSAgICAgcjQsIHI0LCAweDgwODAgICAgICAvKiByZWZlc2ggY3ljbGUgODIyNCBjbG9ja3MgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGVmdCBzaGlmdGVkIDIgKi8KKwkJCQkvKiBsZWZ0IHNoaWZ0ZWQgMiAqLwogICAgIGNtcGxpICAgMCwgMCwgcjMsIDB4MDAwNSAgICAvKiAxMjUgdXMgPyAqLwogICAgIGJlcSAgICAgd3JpdGVSZWZyZXNoCiAKQEAgLTkxNiw3ICs5MTYsNyBAQAogICAgIGVpZWlvCiAgICAgbGkgICAgICByOSwgMHgwMwogICAgIHN0YiAgICAgcjksIDMocjgpICAgICAgICAgICAvKiA4IGRhdGEgYml0cywgMSBzdG9wIGJpdCwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gcGFyaXR5ICovCisJCQkJLyogbm8gcGFyaXR5ICovCiAgICAgZWllaW8KICAgICBsaSAgICAgIHI5LCAweDBiCiAgICAgc3RiICAgICByOSwgNChyOCkgICAgICAgICAgIC8qIGVuYWJsZSB0aGUgcmVjZWl2ZXIgYW5kIHRyYW5zbWl0dGVyICovCkBAIC05MjgsNyArOTI4LDcgQEAKICAgICBiZXEgICAgIHdhaXRFbXB0eQogICAgIGxpICAgICAgcjksIDB4NDcKICAgICBzdGIgICAgIHI5LCAzKHI4KSAgICAgICAgICAgLyogc2VuZCBicmVhaywgOCBkYXRhIGJpdHMsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgc3RvcCBiaXRzLCBubyBwYXJpdHkgKi8KKwkJCQkvKiAyIHN0b3AgYml0cywgbm8gcGFyaXR5ICovCiAgICAgZWllaW8KIAogICAgIGxpcyAgICAgcjAsIDB4MDAwMQpAQCAtOTQ0LDcgKzk0NCw3IEBACiAgICAgYmVxICAgICB3YWl0RW1wdHkxCiAgICAgbGkgICAgICByOSwgMHgwNwogICAgIHN0YiAgICAgcjksIDMocjgpICAgICAgICAgICAvKiA4IGRhdGEgYml0cywgMiBzdG9wIGJpdHMsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHBhcml0eSAqLworCQkJCS8qIG5vIHBhcml0eSAqLwogICAgIGVpZWlvCiAKIC8qCkBAIC0xNDczLDE1ICsxNDczLDMgQEAKIE1tYnl0ZToKICAgICAuYXNjaWkgICIgTUIgLi4uLi4uLi4uLiBcMDAwIgogICAgIC5hbGlnbiAgNAotCi0KLQotCi0KLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZWx0ZWMvYmFiN3h4L2JhYjd4eC5jIGIvYm9hcmQvZWx0ZWMvYmFiN3h4L2JhYjd4eC5jCmluZGV4IDZmNmY5NzcuLmI3NGIwNTUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL2JhYjd4eC9iYWI3eHguYworKysgYi9ib2FyZC9lbHRlYy9iYWI3eHgvYmFiN3h4LmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICB1bnNpZ25lZCBjaGFyIGRhdGEgPSBncGlvLT5kdGExOwogCiAgICAgaWYgKGRhdGEgJiAweDAyKQotICAgICAgICByZXR1cm4gNjY2NjY2NjY7CisJcmV0dXJuIDY2NjY2NjY2OwogCiAgICAgcmV0dXJuIDgzMzMzMzMzOwogfQpAQCAtNTgsNyArNTgsNyBAQAogdWxvbmcgYmFiN3h4X2dldF9nY2xrX2ZyZXEgKHZvaWQpCiB7CiAgICAgc3RhdGljIGNvbnN0IGludCBwbGxyYXRpb190b19mYWN0b3JbXSA9IHsKLSAgICAgICAgMDAsIDc1LCA3MCwgMDAsIDIwLCA2NSwgMTAwLCA0NSwgMzAsIDU1LCA0MCwgNTAsIDgwLCA2MCwgMzUsIDAwLAorCTAwLCA3NSwgNzAsIDAwLCAyMCwgNjUsIDEwMCwgNDUsIDMwLCA1NSwgNDAsIDUwLCA4MCwgNjAsIDM1LCAwMCwKICAgICB9OwogCiAgICAgcmV0dXJuIHBsbHJhdGlvX3RvX2ZhY3RvcltnZXRfaGlkMSAoKSA+PiAyOF0gKiAoYmFiN3h4X2dldF9idXNfZnJlcSgpIC8gMTApOwpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgcHJpbnRmICgiTVBDN3h4IFYlZC4lZCIsKHB2ciA+PiA4KSAmIDB4RkYsIHB2ciAmIDB4RkYpOwogICAgIHByaW50ZiAoIiBhdCAlbGQgLyAlbGQgTUh6XG4iLCAgYmFiN3h4X2dldF9nY2xrX2ZyZXEoKS8xMDAwMDAwLAotICAgICAgICAgICAgYmFiN3h4X2dldF9idXNfZnJlcSgpLzEwMDAwMDApOworCSAgICBiYWI3eHhfZ2V0X2J1c19mcmVxKCkvMTAwMDAwMCk7CiAKICAgICByZXR1cm4gKDApOwogfQpAQCAtMTMxLDggKzEzMSw4IEBACiAKICAgICBmb3IgKHJlZyA9IENGR19NRU1URVNUX1NUQVJUOyByZWcgPCBDRkdfTUVNVEVTVF9FTkQ7IHJlZys9NCkKICAgICB7Ci0gICAgICAgIGlmICgqcmVnICE9IHJlZykKLSAgICAgICAgICAgIHJldHVybiAtMTsKKwlpZiAoKnJlZyAhPSByZWcpCisJICAgIHJldHVybiAtMTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTQ3LDExICsxNDcsMTEgQEAKIAogICAgIGRvCiAgICAgewotICAgICAgICBpZiAoaSAmIDB4MDEpICAgLyogaXMgYmFuayBlbmFibGVkID8gKi8KLSAgICAgICAgICAgIG1lbVNpemUgKz0gKG1lYXIxICYgMHhmZikgLSAobXNhcjEgJiAweGZmKSArIDE7Ci0gICAgICAgIG1zYXIxID4+PSA4OwotICAgICAgICBtZWFyMSA+Pj0gODsKLSAgICAgICAgaSAgICAgPj49IDE7CisJaWYgKGkgJiAweDAxKSAgIC8qIGlzIGJhbmsgZW5hYmxlZCA/ICovCisJICAgIG1lbVNpemUgKz0gKG1lYXIxICYgMHhmZikgLSAobXNhcjEgJiAweGZmKSArIDE7CisJbXNhcjEgPj49IDg7CisJbWVhcjEgPj49IDg7CisJaSAgICAgPj49IDE7CiAgICAgfSB3aGlsZSAoaSk7CiAKICAgICByZXR1cm4gKG1lbVNpemUgKiAweDEwMDAwMCk7CkBAIC0yMjIsMjAgKzIyMiwyMCBAQAogICAgIHN3aXRjaCAobGluZV9udW1iZXIpCiAgICAgewogICAgIGNhc2UgMToKLSAgICAgICAgc3ByaW50ZiAoaW5mbywiIE1QQzd4eCBWJWQuJWQgYXQgJWxkIC8gJWxkIE1IeiIsCi0gICAgICAgICAgICAoZ2V0X3B2cigpID4+IDgpICYgMHhGRiwKLSAgICAgICAgICAgIGdldF9wdnIoKSAmIDB4RkYsCi0gICAgICAgICAgICBiYWI3eHhfZ2V0X2djbGtfZnJlcSgpLzEwMDAwMDAsCi0gICAgICAgICAgICBiYWI3eHhfZ2V0X2J1c19mcmVxKCkvMTAwMDAwMCk7Ci0gICAgICAgIHJldHVybjsKKwlzcHJpbnRmIChpbmZvLCIgTVBDN3h4IFYlZC4lZCBhdCAlbGQgLyAlbGQgTUh6IiwKKwkgICAgKGdldF9wdnIoKSA+PiA4KSAmIDB4RkYsCisJICAgIGdldF9wdnIoKSAmIDB4RkYsCisJICAgIGJhYjd4eF9nZXRfZ2Nsa19mcmVxKCkvMTAwMDAwMCwKKwkgICAgYmFiN3h4X2dldF9idXNfZnJlcSgpLzEwMDAwMDApOworCXJldHVybjsKICAgICBjYXNlIDI6Ci0gICAgICAgIHNwcmludGYgKGluZm8sICIgRUxURUMgQkFCN3h4IHdpdGggJWxkIE1CIERSQU0gYW5kICVsZCBNQiBGTEFTSCIsCi0gICAgICAgICAgICBkcmFtX3NpemUoMCkvMHgxMDAwMDAsCi0gICAgICAgICAgICBmbGFzaF9pbml0KCkvMHgxMDAwMDApOwotICAgICAgICByZXR1cm47CisJc3ByaW50ZiAoaW5mbywgIiBFTFRFQyBCQUI3eHggd2l0aCAlbGQgTUIgRFJBTSBhbmQgJWxkIE1CIEZMQVNIIiwKKwkgICAgZHJhbV9zaXplKDApLzB4MTAwMDAwLAorCSAgICBmbGFzaF9pbml0KCkvMHgxMDAwMDApOworCXJldHVybjsKICAgICBjYXNlIDM6Ci0gICAgICAgIHNwcmludGYgKGluZm8sICIgJXMiLCBzbWkubW9kZUlkZW50KTsKLSAgICAgICAgcmV0dXJuOworCXNwcmludGYgKGluZm8sICIgJXMiLCBzbWkubW9kZUlkZW50KTsKKwlyZXR1cm47CiAgICAgfQogCiAgICAgLyogbm8gbW9yZSBpbmZvIGxpbmVzICovCmRpZmYgLS1naXQgYS9ib2FyZC9lbHRlYy9iYWI3eHgvZGNfc3JvbS5jIGIvYm9hcmQvZWx0ZWMvYmFiN3h4L2RjX3Nyb20uYwppbmRleCBlZjk1NmU2Li5hNDRhZjZlIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9iYWI3eHgvZGNfc3JvbS5jCisrKyBiL2JvYXJkL2VsdGVjL2JhYjd4eC9kY19zcm9tLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgIGEgPSAoY2hhcikob2Zmc2V0IDw8IDIpOwogICAgIGZvciAoaT0wOyBpPDY7IGkrKywgYSA8PD0gMSkKICAgICB7Ci0gICAgICAgIHNyb21fbGF0Y2goY29tbWFuZCB8ICgoYSA8IDApID8gRFRfSU4gOiAwKSwgYWRkcik7CisJc3JvbV9sYXRjaChjb21tYW5kIHwgKChhIDwgMCkgPyBEVF9JTiA6IDApLCBhZGRyKTsKICAgICB9CiAgICAgdWRlbGF5KDEpOwogCkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogCiAgICAgZm9yIChpPTA7IGk8MTY7IGkrKykKICAgICB7Ci0gICAgICAgIHNlbmR0b19zcm9tKGNvbW1hbmQgIHwgRFRfQ0xLLCBhZGRyKTsKLSAgICAgICAgdG1wID0gZ2V0ZnJvbV9zcm9tKGFkZHIpOwotICAgICAgICBzZW5kdG9fc3JvbShjb21tYW5kLCBhZGRyKTsKKwlzZW5kdG9fc3JvbShjb21tYW5kICB8IERUX0NMSywgYWRkcik7CisJdG1wID0gZ2V0ZnJvbV9zcm9tKGFkZHIpOworCXNlbmR0b19zcm9tKGNvbW1hbmQsIGFkZHIpOwogCi0gICAgICAgIHdvcmQgPSAod29yZCA8PCAxKSB8ICgodG1wID4+IDMpICYgMHgwMSk7CisJd29yZCA9ICh3b3JkIDw8IDEpIHwgKCh0bXAgPj4gMykgJiAweDAxKTsKICAgICB9CiAKICAgICBzZW5kdG9fc3JvbShjb21tYW5kICYgMHgwMDAwZmYwMCwgYWRkcik7CkBAIC0xNjAsMTMgKzE2MCwxMyBAQAogCiAgICAgZm9yIChpPTA7IGk8MTY7IGkrKykKICAgICB7Ci0gICAgICAgIHRtcCA9IChsb25nVmFsICYgMHg4MDAwKT4+MTM7CisJdG1wID0gKGxvbmdWYWwgJiAweDgwMDApPj4xMzsKIAotICAgICAgICBzZW5kdG9fc3JvbSAodG1wIHwgY29tbWFuZCwgYWRkcik7Ci0gICAgICAgIHNlbmR0b19zcm9tICh0bXAgfCBjb21tYW5kICB8IERUX0NMSywgYWRkcik7Ci0gICAgICAgIHNlbmR0b19zcm9tICh0bXAgfCBjb21tYW5kLCBhZGRyKTsKKwlzZW5kdG9fc3JvbSAodG1wIHwgY29tbWFuZCwgYWRkcik7CisJc2VuZHRvX3Nyb20gKHRtcCB8IGNvbW1hbmQgIHwgRFRfQ0xLLCBhZGRyKTsKKwlzZW5kdG9fc3JvbSAodG1wIHwgY29tbWFuZCwgYWRkcik7CiAKLSAgICAgICAgbG9uZ1ZhbCA9IGxvbmdWYWw8PDE7CisJbG9uZ1ZhbCA9IGxvbmdWYWw8PDE7CiAgICAgfQogCiAgICAgc2VuZHRvX3Nyb20oY29tbWFuZCAmIDB4MDAwMGZmMDAsIGFkZHIpOwpAQCAtMTc1LDE1ICsxNzUsMTUgQEAKICAgICB0bXAgPSAxMDA7CiAgICAgZG8KICAgICB7Ci0gICAgICAgIGlmICgoZ2V0ZnJvbV9zcm9tKGRjX3Nyb21faW9iYXNlKSAmIDB4OCkgPT0gMHg4KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHVkZWxheSgxMDAwKTsKKwlpZiAoKGdldGZyb21fc3JvbShkY19zcm9tX2lvYmFzZSkgJiAweDgpID09IDB4OCkKKwkgICAgYnJlYWs7CisJdWRlbGF5KDEwMDApOwogICAgIH0gd2hpbGUgKC0tdG1wKTsKIAogICAgIGlmICh0bXAgPT0gMCkKICAgICB7Ci0gICAgICAgIHByaW50ZigiV3JpdGUgREVDMjExNDMgU1JvbSB0aW1lZCBvdXQgIVxuIik7Ci0gICAgICAgIHJldHVybiAoLTEpOworCXByaW50ZigiV3JpdGUgREVDMjExNDMgU1JvbSB0aW1lZCBvdXQgIVxuIik7CisJcmV0dXJuICgtMSk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0yMTgsNyArMjE4LDcgQEAKIAogICAgIGZvciAoaT0wOyBpPDY7IGkrKykKICAgICB7Ci0gICAgICAgIHNyb21fbGF0Y2ggKFNST01fV1IgfCBTUk9NX1NSIHwgRFRfSU4gfCBEVF9DUywgYWRkcik7CisJc3JvbV9sYXRjaCAoU1JPTV9XUiB8IFNST01fU1IgfCBEVF9JTiB8IERUX0NTLCBhZGRyKTsKICAgICB9CiB9CiAKQEAgLTI1Niw4ICsyNTYsOCBAQAogICAgIG1lbXNldCAoZGVzdCwgMCwgMTI4KTsKICAgICBmb3IgKG9mZnNldD0wOyBvZmZzZXQ8NjQ7IG9mZnNldCsrKQogICAgIHsKLSAgICAgICAgdG1wID0gc3JvbV9yZCAoZGNfc3JvbV9pb2Jhc2UsIG9mZnNldCk7Ci0gICAgICAgICpkZXN0KysgPSBsZTE2X3RvX2NwdSh0bXApOworCXRtcCA9IHNyb21fcmQgKGRjX3Nyb21faW9iYXNlLCBvZmZzZXQpOworCSpkZXN0KysgPSBsZTE2X3RvX2NwdSh0bXApOwogICAgIH0KIAogICAgIHJldHVybiAoMCk7CkBAIC0yODAsOSArMjgwLDkgQEAKIAogICAgIGZvciAob2Zmc2V0PTA7IG9mZnNldDw2NDsgb2Zmc2V0KyspCiAgICAgewotICAgICAgICBpZiAoc3JvbV93ciAoZGNfc3JvbV9pb2Jhc2UsIG9mZnNldCwgKnNyYykgPT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIHNyYysrOworCWlmIChzcm9tX3dyIChkY19zcm9tX2lvYmFzZSwgb2Zmc2V0LCAqc3JjKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisJc3JjKys7CiAgICAgfQogCiAgICAgcmV0dXJuICgwKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2JhYjd4eC9lbF9zcm9tLmMgYi9ib2FyZC9lbHRlYy9iYWI3eHgvZWxfc3JvbS5jCmluZGV4IDU2YWJkYzcuLjczZjgwNjYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL2JhYjd4eC9lbF9zcm9tLmMKKysrIGIvYm9hcmQvZWx0ZWMvYmFiN3h4L2VsX3Nyb20uYwpAQCAtODMsMTQgKzgzLDE0IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogICAgIHsKLSAgICAgICAgb3V0OChJMkNfQlVTX0RBVCwgMHgwMCk7ICAgIC8qIFNDTEsgPSBsb3cgICBTRElPID0gaGlnaCAqLwotICAgICAgICB1ZGVsYXkoMTApOwotICAgICAgICBvdXQ4KEkyQ19CVVNfREFULCAweDQwKTsgICAgLyogU0NMSyA9IGhpZ2ggIFNESU8gPSBoaWdoICovCi0gICAgICAgIHVkZWxheSgxNSk7Ci0gICAgICAgIGJ1ZiA8PD0gMTsKLSAgICAgICAgYnVmID0gKGluOChJMkNfQlVTX0RBVCkgJiAweDIwKSA/IChidWYgfCAweDAxKSA6IChidWYgJiAweEZFKTsKLSAgICAgICAgb3V0OChJMkNfQlVTX0RBVCwgMHgwMCk7ICAgIC8qIFNDTEsgPSBsb3cgICBTRElPID0gaGlnaCAqLwotICAgICAgICB1ZGVsYXkoMTApOworCW91dDgoSTJDX0JVU19EQVQsIDB4MDApOyAgICAvKiBTQ0xLID0gbG93ICAgU0RJTyA9IGhpZ2ggKi8KKwl1ZGVsYXkoMTApOworCW91dDgoSTJDX0JVU19EQVQsIDB4NDApOyAgICAvKiBTQ0xLID0gaGlnaCAgU0RJTyA9IGhpZ2ggKi8KKwl1ZGVsYXkoMTUpOworCWJ1ZiA8PD0gMTsKKwlidWYgPSAoaW44KEkyQ19CVVNfREFUKSAmIDB4MjApID8gKGJ1ZiB8IDB4MDEpIDogKGJ1ZiAmIDB4RkUpOworCW91dDgoSTJDX0JVU19EQVQsIDB4MDApOyAgICAvKiBTQ0xLID0gbG93ICAgU0RJTyA9IGhpZ2ggKi8KKwl1ZGVsYXkoMTApOwogICAgIH0KICAgICByZXR1cm4oYnVmKTsKIH0KQEAgLTExMywxMyArMTEzLDEzIEBACiAKICAgICBmb3IgKGkgPSA3OyBpID49IDA7IGktLSkKICAgICB7Ci0gICAgICAgIChidWYgJiAweDgwKSA/IG91dDgoSTJDX0JVU19EQVQsIDB4MjApIDogb3V0OChJMkNfQlVTX0RBVCwgMHgwMCk7IC8qIFNDTEs9bG93ICBTRElPPWRhdGEgKi8KLSAgICAgICAgdWRlbGF5KDEwKTsKLSAgICAgICAgKGJ1ZiAmIDB4ODApID8gb3V0OChJMkNfQlVTX0RBVCwgMHg2MCkgOiBvdXQ4KEkyQ19CVVNfREFULCAweDQwKTsgLyogU0NMSz1oaWdoIFNESU89ZGF0YSAqLwotICAgICAgICB1ZGVsYXkoMTUpOwotICAgICAgICAoYnVmICYgMHg4MCkgPyBvdXQ4KEkyQ19CVVNfREFULCAweDIwKSA6IG91dDgoSTJDX0JVU19EQVQsIDB4MDApOyAvKiBTQ0xLPWxvdyAgU0RJTz1kYXRhICovCi0gICAgICAgIHVkZWxheSgxMCk7Ci0gICAgICAgIGJ1ZiA8PD0gMTsKKwkoYnVmICYgMHg4MCkgPyBvdXQ4KEkyQ19CVVNfREFULCAweDIwKSA6IG91dDgoSTJDX0JVU19EQVQsIDB4MDApOyAvKiBTQ0xLPWxvdyAgU0RJTz1kYXRhICovCisJdWRlbGF5KDEwKTsKKwkoYnVmICYgMHg4MCkgPyBvdXQ4KEkyQ19CVVNfREFULCAweDYwKSA6IG91dDgoSTJDX0JVU19EQVQsIDB4NDApOyAvKiBTQ0xLPWhpZ2ggU0RJTz1kYXRhICovCisJdWRlbGF5KDE1KTsKKwkoYnVmICYgMHg4MCkgPyBvdXQ4KEkyQ19CVVNfREFULCAweDIwKSA6IG91dDgoSTJDX0JVU19EQVQsIDB4MDApOyAvKiBTQ0xLPWxvdyAgU0RJTz1kYXRhICovCisJdWRlbGF5KDEwKTsKKwlidWYgPDw9IDE7CiAgICAgfQogfQogCkBAIC0xODQsMzkgKzE4NCwzOSBAQAogCiAgICAgZm9yIChpPTA7aTxjbnQ7aSsrKQogICAgIHsKLSAgICAgICAgZWVwU3RhcnQoKTsKLSAgICAgICAgZWVwV3JpdGVCeXRlKDB4QTAgfCBkZXZpY2UgfCBibG9jayk7Ci0gICAgICAgIGlmIChlZXBSZWFkQWNrKCkgPT0gRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICAgZWVwU3RvcCgpOwotICAgICAgICAgICAgcmV0dXJuKEVSUk9SKTsKLSAgICAgICAgfQotICAgICAgICBlZXBXcml0ZUJ5dGUoYWRkcisrKTsKLSAgICAgICAgaWYgKGVlcFJlYWRBY2soKSA9PSBFUlJPUikKLSAgICAgICAgewotICAgICAgICAgICAgZWVwU3RvcCgpOwotICAgICAgICAgICAgcmV0dXJuKEVSUk9SKTsKLSAgICAgICAgfQotICAgICAgICBlZXBTdGFydCgpOworCWVlcFN0YXJ0KCk7CisJZWVwV3JpdGVCeXRlKDB4QTAgfCBkZXZpY2UgfCBibG9jayk7CisJaWYgKGVlcFJlYWRBY2soKSA9PSBFUlJPUikKKwl7CisJICAgZWVwU3RvcCgpOworCSAgICByZXR1cm4oRVJST1IpOworCX0KKwllZXBXcml0ZUJ5dGUoYWRkcisrKTsKKwlpZiAoZWVwUmVhZEFjaygpID09IEVSUk9SKQorCXsKKwkgICAgZWVwU3RvcCgpOworCSAgICByZXR1cm4oRVJST1IpOworCX0KKwllZXBTdGFydCgpOwogCi0gICAgICAgIGVlcFdyaXRlQnl0ZSgweEExIHwgZGV2aWNlIHwgYmxvY2spOwotICAgICAgICBpZiAoZWVwUmVhZEFjaygpID09IEVSUk9SKQotICAgICAgICB7Ci0gICAgICAgICAgICBlZXBTdG9wKCk7Ci0gICAgICAgICAgICByZXR1cm4oRVJST1IpOwotICAgICAgICB9CisJZWVwV3JpdGVCeXRlKDB4QTEgfCBkZXZpY2UgfCBibG9jayk7CisJaWYgKGVlcFJlYWRBY2soKSA9PSBFUlJPUikKKwl7CisJICAgIGVlcFN0b3AoKTsKKwkgICAgcmV0dXJuKEVSUk9SKTsKKwl9CiAKLSAgICAgICAgKmJ1ZisrID0gZWVwUmVhZEJ5dGUoKTsKLSAgICAgICAgZWVwV3JpdGVBY2soMSk7Ci0gICAgICAgIGVlcFN0b3AoKTsKKwkqYnVmKysgPSBlZXBSZWFkQnl0ZSgpOworCWVlcFdyaXRlQWNrKDEpOworCWVlcFN0b3AoKTsKIAotICAgICAgICBpZiAoKGFkZHIgPT0gMCkgJiYgKGkgIT0gKGNudC0xKSkpICAgIC8qIGlzIGl0IHRoZSBzYW1lIGJsb2NrID8gKi8KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGJsb2NrID09IEZJUlNUX0JMT0NLKQotICAgICAgICAgICAgICAgIGJsb2NrID0gU0VDT05EX0JMT0NLOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybihFUlJPUik7Ci0gICAgICAgIH0KKwlpZiAoKGFkZHIgPT0gMCkgJiYgKGkgIT0gKGNudC0xKSkpICAgIC8qIGlzIGl0IHRoZSBzYW1lIGJsb2NrID8gKi8KKwl7CisJICAgIGlmIChibG9jayA9PSBGSVJTVF9CTE9DSykKKwkJYmxvY2sgPSBTRUNPTkRfQkxPQ0s7CisJICAgIGVsc2UKKwkJcmV0dXJuKEVSUk9SKTsKKwl9CiAgICAgfQogICAgIHJldHVybihjbnQpOwogfQpAQCAtMjM1LDMxICsyMzUsMzEgQEAKIAogICAgIGZvciAoaT0wO2k8Y250O2krKykKICAgICB7Ci0gICAgICAgIHJldFZhbCA9IEVSUk9SOwotICAgICAgICBkbwotICAgICAgICB7Ci0gICAgICAgICAgICBlZXBTdGFydCgpOwotICAgICAgICAgICAgZWVwV3JpdGVCeXRlKDB4QTAgfCBkZXZpY2UgfCBibG9jayk7Ci0gICAgICAgICAgICBpZiAoKHJldFZhbCA9IGVlcFJlYWRBY2soKSkgPT0gRVJST1IpCi0gICAgICAgICAgICAgICAgZWVwU3RvcCgpOwotICAgICAgICB9IHdoaWxlIChyZXRWYWwgPT0gRVJST1IpOworCXJldFZhbCA9IEVSUk9SOworCWRvCisJeworCSAgICBlZXBTdGFydCgpOworCSAgICBlZXBXcml0ZUJ5dGUoMHhBMCB8IGRldmljZSB8IGJsb2NrKTsKKwkgICAgaWYgKChyZXRWYWwgPSBlZXBSZWFkQWNrKCkpID09IEVSUk9SKQorCQllZXBTdG9wKCk7CisJfSB3aGlsZSAocmV0VmFsID09IEVSUk9SKTsKIAotICAgICAgICBlZXBXcml0ZUJ5dGUoYWRkcisrKTsKLSAgICAgICAgaWYgKGVlcFJlYWRBY2soKSA9PSBFUlJPUikgIHJldHVybihFUlJPUik7CisJZWVwV3JpdGVCeXRlKGFkZHIrKyk7CisJaWYgKGVlcFJlYWRBY2soKSA9PSBFUlJPUikgIHJldHVybihFUlJPUik7CiAKLSAgICAgICAgaWYgKChhZGRyID09IDApICYmIChpICE9IChjbnQtMSkpKSAgICAvKiBpcyBpdCB0aGUgc2FtZSBibG9jayA/ICovCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChibG9jayA9PSBGSVJTVF9CTE9DSykKLSAgICAgICAgICAgICAgICBibG9jayA9IFNFQ09ORF9CTE9DSzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybihFUlJPUik7Ci0gICAgICAgIH0KKwlpZiAoKGFkZHIgPT0gMCkgJiYgKGkgIT0gKGNudC0xKSkpICAgIC8qIGlzIGl0IHRoZSBzYW1lIGJsb2NrID8gKi8KKwl7CisJICAgIGlmIChibG9jayA9PSBGSVJTVF9CTE9DSykKKwkJYmxvY2sgPSBTRUNPTkRfQkxPQ0s7CisJICAgIGVsc2UKKwkgICAgcmV0dXJuKEVSUk9SKTsKKwl9CiAKLSAgICAgICAgZWVwV3JpdGVCeXRlKCpidWYrKyk7Ci0gICAgICAgIGlmIChlZXBSZWFkQWNrKCkgPT0gRVJST1IpCi0gICAgICAgICAgICByZXR1cm4oRVJST1IpOworCWVlcFdyaXRlQnl0ZSgqYnVmKyspOworCWlmIChlZXBSZWFkQWNrKCkgPT0gRVJST1IpCisJICAgIHJldHVybihFUlJPUik7CiAKLSAgICAgICAgZWVwU3RvcCgpOworCWVlcFN0b3AoKTsKICAgICB9CiAgICAgcmV0dXJuKGNudCk7CiB9CkBAIC0yNzgsMTMgKzI3OCwxMyBAQAogCiAgICAgZm9yICg7IHNpemU7IHNpemUtLSkKICAgICB7Ci0gICAgICAgIGJ5dGUgPSAqcHRyKys7Ci0gICAgICAgIGZvciAoaSA9IDg7IGk7IGktLSkKLSAgICAgICAgewotICAgICAgICAgICAgZiA9ICAoKGJ5dGUgJiAxKSBeIChhY2N1ICYgMSkpID8gMHg4NDA4MzAwMSA6IDA7Ci0gICAgICAgICAgICBhY2N1ID4+PSAxOyBhY2N1IF49IGY7Ci0gICAgICAgICAgICBieXRlID4+PSAxOwotICAgICAgICB9CisJYnl0ZSA9ICpwdHIrKzsKKwlmb3IgKGkgPSA4OyBpOyBpLS0pCisJeworCSAgICBmID0gICgoYnl0ZSAmIDEpIF4gKGFjY3UgJiAxKSkgPyAweDg0MDgzMDAxIDogMDsKKwkgICAgYWNjdSA+Pj0gMTsgYWNjdSBePSBmOworCSAgICBieXRlID4+PSAxOworCX0KICAgICB9CiAgICAgcmV0dXJuKGFjY3UpOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZWx0ZWMvYmFiN3h4L2ZsYXNoLmMgYi9ib2FyZC9lbHRlYy9iYWI3eHgvZmxhc2guYwppbmRleCA3MzQ5NmExLi40NDJkZDAwIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9iYWI3eHgvZmxhc2guYworKysgYi9ib2FyZC9lbHRlYy9iYWI3eHgvZmxhc2guYwpAQCAtNTcsNyArNTcsNyBAQAogICAgIC8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KICAgICBmb3IgKGk9MDsgaTxDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2kpCiAgICAgewotICAgICAgICBmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKICAgICB9CiAKICAgICAvKiBpbml0aWFsaXNlIDFzdCBmbGFzaCAqLwpAQCAtNjUsOCArNjUsOCBAQAogCiAgICAgaWYgKGZsYXNoX2luZm9bMF0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikKICAgICB7Ci0gICAgICAgIHByaW50ZiAoIiMjIFVua25vd24gRkxBU0ggb24gQmFuayAwIC0gU2l6ZSA9IDB4JTA4bHggPSAlbGQgTUJcbiIsCi0gICAgICAgICAgICBzaXplMSwgc2l6ZTE8PDIwKTsKKwlwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgMCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAorCSAgICBzaXplMSwgc2l6ZTE8PDIwKTsKICAgICB9CiAKICAgICAvKiBpbml0aWFsaXNlIDJuZCBmbGFzaCAqLwpAQCAtNzQsMzEgKzc0LDMxIEBACiAKICAgICBpZiAoZmxhc2hfaW5mb1sxXS5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQogICAgIHsKLSAgICAgICAgcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rIDEgLSBTaXplID0gMHglMDhseCA9ICVsZCBNQlxuIiwKLSAgICAgICAgICAgIHNpemUyLCBzaXplMjw8MjApOworCXByaW50ZiAoIiMjIFVua25vd24gRkxBU0ggb24gQmFuayAxIC0gU2l6ZSA9IDB4JTA4bHggPSAlbGQgTUJcbiIsCisJICAgIHNpemUyLCBzaXplMjw8MjApOwogICAgIH0KIAogICAgIC8qIG1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCiAgICAgaWYgKHNpemUxID09IDUxMioxMDI0KQogICAgIHsKLSAgICAgICAgKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotICAgICAgICAgICAgICAgIEZMQVNIX0JBU0UwX1BSRUxJTSwKLSAgICAgICAgICAgICAgICBGTEFTSF9CQVNFMF9QUkVMSU0rbW9uaXRvcl9mbGFzaF9sZW4tMSwKLSAgICAgICAgICAgICAgICAmZmxhc2hfaW5mb1swXSk7CisJKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAorCQlGTEFTSF9CQVNFMF9QUkVMSU0sCisJCUZMQVNIX0JBU0UwX1BSRUxJTSttb25pdG9yX2ZsYXNoX2xlbi0xLAorCQkmZmxhc2hfaW5mb1swXSk7CiAgICAgfQogICAgIGlmIChzaXplMiA9PSA1MTIqMTAyNCkKICAgICB7Ci0gICAgICAgICh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgICBGTEFTSF9CQVNFMV9QUkVMSU0sCi0gICAgICAgICAgICAgICAgRkxBU0hfQkFTRTFfUFJFTElNK21vbml0b3JfZmxhc2hfbGVuLTEsCi0gICAgICAgICAgICAgICAgJmZsYXNoX2luZm9bMV0pOworCSh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKwkJRkxBU0hfQkFTRTFfUFJFTElNLAorCQlGTEFTSF9CQVNFMV9QUkVMSU0rbW9uaXRvcl9mbGFzaF9sZW4tMSwKKwkJJmZsYXNoX2luZm9bMV0pOwogICAgIH0KICAgICBpZiAoc2l6ZTIgPT0gNCoxMDI0KjEwMjQpCiAgICAgewotICAgICAgICAodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0gICAgICAgICAgICAgICAgQ0ZHX0ZMQVNIX0JBU0UsCi0gICAgICAgICAgICAgICAgQ0ZHX0ZMQVNIX0JBU0UrbW9uaXRvcl9mbGFzaF9sZW4tMSwKLSAgICAgICAgICAgICAgICAmZmxhc2hfaW5mb1sxXSk7CisJKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAorCQlDRkdfRkxBU0hfQkFTRSwKKwkJQ0ZHX0ZMQVNIX0JBU0UrbW9uaXRvcl9mbGFzaF9sZW4tMSwKKwkJJmZsYXNoX2luZm9bMV0pOwogICAgIH0KIAogICAgIHJldHVybiAoc2l6ZTEgKyBzaXplMik7CkBAIC0xMTUsNzIgKzExNSw3MiBAQAogICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmZsYXNoOwogCiAgICAgaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLSAgICAgICAgcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOwotICAgICAgICBmbGFzaF9pbml0KCk7CisJcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOworCWZsYXNoX2luaXQoKTsKICAgICB9CiAKICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotICAgICAgICBwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0gICAgICAgIHJldHVybjsKKwlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisJcmV0dXJuOwogICAgIH0KIAogICAgIHN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewogICAgIGNhc2UgRkxBU0hfTUFOX0FNRDoKLSAgICAgICAgcHJpbnRmICgiQU1EICIpOwotICAgICAgICBicmVhazsKKwlwcmludGYgKCJBTUQgIik7CisJYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7Ci0gICAgICAgIGJyZWFrOworCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOworCWJyZWFrOwogICAgIH0KIAogICAgIHN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewogICAgIGNhc2UgQU1EX0lEX0YwNDBCOgotICAgICAgICBwcmludGYgKCJBTTI5RjA0MEIgKDQgTWJpdClcbiIpOwotICAgICAgICBicmVhazsKKwlwcmludGYgKCJBTTI5RjA0MEIgKDQgTWJpdClcbiIpOworCWJyZWFrOwogICAgIGNhc2UgQU1EX0lEX0YwMTZEOgotICAgICAgICBwcmludGYgKCJBTTI5RjAxNkQgKDE2IE1iaXQpXG4iKTsKLSAgICAgICAgYnJlYWs7CisJcHJpbnRmICgiQU0yOUYwMTZEICgxNiBNYml0KVxuIik7CisJYnJlYWs7CiAgICAgY2FzZSBBTURfSURfRjAzMkI6Ci0gICAgICAgIHByaW50ZiAoIkFNMjlGMDMyQiAoMzIgTWJpdClcbiIpOwotICAgICAgICBicmVhazsKKwlwcmludGYgKCJBTTI5RjAzMkIgKDMyIE1iaXQpXG4iKTsKKwlicmVhazsKICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKLSAgICAgICAgYnJlYWs7CisJcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGVcbiIpOworCWJyZWFrOwogICAgIH0KIAogICAgIGlmIChpbmZvLT5zaXplID49ICgxIDw8IDIwKSkgewotICAgICAgICBwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLCBpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCXByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsIGluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmICgiICBTaXplOiAlbGQga0IgaW4gJWQgU2VjdG9yc1xuIiwgaW5mby0+c2l6ZSA+PiAxMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKKwlwcmludGYgKCIgIFNpemU6ICVsZCBrQiBpbiAlZCBTZWN0b3JzXG4iLCBpbmZvLT5zaXplID4+IDEwLCBpbmZvLT5zZWN0b3JfY291bnQpOwogICAgIH0KIAogICAgIHByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKICAgICBmb3IgKGk9MDsgaTxpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewotICAgICAgICAvKgotICAgICAgICAqIENoZWNrIGlmIHdob2xlIHNlY3RvciBpcyBlcmFzZWQKLSAgICAgICAgKi8KLSAgICAgICAgaWYgKGkgIT0gKGluZm8tPnNlY3Rvcl9jb3VudC0xKSkKLSAgICAgICAgICAgIHNpemUgPSBpbmZvLT5zdGFydFtpKzFdIC0gaW5mby0+c3RhcnRbaV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpemUgPSBpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUgLSBpbmZvLT5zdGFydFtpXTsKKwkvKgorCSogQ2hlY2sgaWYgd2hvbGUgc2VjdG9yIGlzIGVyYXNlZAorCSovCisJaWYgKGkgIT0gKGluZm8tPnNlY3Rvcl9jb3VudC0xKSkKKwkgICAgc2l6ZSA9IGluZm8tPnN0YXJ0W2krMV0gLSBpbmZvLT5zdGFydFtpXTsKKwllbHNlCisJICAgIHNpemUgPSBpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUgLSBpbmZvLT5zdGFydFtpXTsKIAotICAgICAgICBlcmFzZWQgPSAxOwotICAgICAgICBmbGFzaCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopaW5mby0+c3RhcnRbaV07Ci0gICAgICAgIHNpemUgPSBzaXplID4+IDI7ICAgICAgICAvKiBkaXZpZGUgYnkgNCBmb3IgbG9uZ3dvcmQgYWNjZXNzICovCi0gICAgICAgIGZvciAoaz0wOyBrPHNpemU7IGsrKykgewotICAgICAgICAgICAgaWYgKCpmbGFzaCsrICE9IDB4ZmZmZmZmZmYpIHsKLSAgICAgICAgICAgICAgICBlcmFzZWQgPSAwOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJZXJhc2VkID0gMTsKKwlmbGFzaCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopaW5mby0+c3RhcnRbaV07CisJc2l6ZSA9IHNpemUgPj4gMjsgICAgICAgIC8qIGRpdmlkZSBieSA0IGZvciBsb25nd29yZCBhY2Nlc3MgKi8KKwlmb3IgKGs9MDsgazxzaXplOyBrKyspIHsKKwkgICAgaWYgKCpmbGFzaCsrICE9IDB4ZmZmZmZmZmYpIHsKKwkJZXJhc2VkID0gMDsKKwkJYnJlYWs7CisJICAgIH0KKwl9CiAKLSAgICAgICAgaWYgKChpICUgNSkgPT0gMCkKLSAgICAgICAgICAgIHByaW50ZiAoIlxuICAgIik7CisJaWYgKChpICUgNSkgPT0gMCkKKwkgICAgcHJpbnRmICgiXG4gICAiKTsKIAotICAgICAgICBwcmludGYgKCIgJTA4bFglcyVzIiwKLSAgICAgICAgICAgIGluZm8tPnN0YXJ0W2ldLAotICAgICAgICAgICAgZXJhc2VkID8gIiBFIiA6ICIgICIsCi0gICAgICAgICAgICBpbmZvLT5wcm90ZWN0W2ldID8gIlJPICIgOiAiICAgIik7CisJcHJpbnRmICgiICUwOGxYJXMlcyIsCisJICAgIGluZm8tPnN0YXJ0W2ldLAorCSAgICBlcmFzZWQgPyAiIEUiIDogIiAgIiwKKwkgICAgaW5mby0+cHJvdGVjdFtpXSA/ICJSTyAiIDogIiAgICIpOwogICAgIH0KICAgICBwcmludGYgKCJcbiIpOwogfQpAQCAtMjI2LDM3ICsyMjYsMzcgQEAKICAgICAvKiBXZSBhY2NlcHQgb25seSB0d28gQU1EIHR5cGVzICovCiAgICAgc3dpdGNoICh2ZW5kb3IpIHsKICAgICBjYXNlIChGTEFTSF9XT1JEX1NJWkUpQU1EX01BTlVGQUNUOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7Ci0gICAgICAgIGJyZWFrOworCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRDsKKwlicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDA7Ci0gICAgICAgIGluZm8tPnNpemUgPSAwOwotICAgICAgICByZXR1cm4gKDApOyAgICAgICAgIC8qIG5vIG9yIHVua25vd24gZmxhc2ggICovCisJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CisJaW5mby0+c2l6ZSA9IDA7CisJcmV0dXJuICgwKTsgICAgICAgICAvKiBubyBvciB1bmtub3duIGZsYXNoICAqLwogICAgIH0KIAogICAgIHN3aXRjaCAoZGV2aWQpIHsKICAgICBjYXNlIChGTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0YwNDBCOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCB8PSBBTURfSURfRjA0MEI7Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDg7Ci0gICAgICAgIGluZm8tPnNpemUgPSAweDAwMDgwMDAwOwotICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qID0+IDAuNSBNQiAgICAgICovCisJaW5mby0+Zmxhc2hfaWQgfD0gQU1EX0lEX0YwNDBCOworCWluZm8tPnNlY3Rvcl9jb3VudCA9IDg7CisJaW5mby0+c2l6ZSA9IDB4MDAwODAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAwLjUgTUIgICAgICAqLwogCiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9GMDE2RDoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgfD0gQU1EX0lEX0YwMTZEOwotICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSAzMjsKLSAgICAgICAgaW5mby0+c2l6ZSAgICAgICAgID0gMHgwMDIwMDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAyIE1CICAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCB8PSBBTURfSURfRjAxNkQ7CisJaW5mby0+c2VjdG9yX2NvdW50ID0gMzI7CisJaW5mby0+c2l6ZSAgICAgICAgID0gMHgwMDIwMDAwMDsKKwlicmVhazsgICAgICAgICAgICAgIC8qID0+IDIgTUIgICAgICAqLwogCiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9GMDMyQjoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgfD0gQU1EX0lEX0YwMzJCOwotICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSA2NDsKLSAgICAgICAgaW5mby0+c2l6ZSAgICAgICAgID0gMHgwMDQwMDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiA0IE1CICAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCB8PSBBTURfSURfRjAzMkI7CisJaW5mby0+c2VjdG9yX2NvdW50ID0gNjQ7CisJaW5mby0+c2l6ZSAgICAgICAgID0gMHgwMDQwMDAwMDsKKwlicmVhazsgICAgICAgICAgICAgIC8qID0+IDQgTUIgICAgICAqLwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotICAgICAgICByZXR1cm4gKDApOyAgICAgICAgIC8qID0+IG5vIG9yIHVua25vd24gZmxhc2ggKi8KKwlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJcmV0dXJuICgwKTsgICAgICAgICAvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCiAKICAgICB9CiAKQEAgLTI2NiwyMCArMjY2LDIwIEBACiAKICAgICAvKiBjaGVjayBmb3IgcHJvdGVjdGVkIHNlY3RvcnMgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLSAgICAgICAgLyogc2VjdG9yIGJhc2UgYWRkcmVzcyAqLwotICAgICAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyBpICogKGluZm8tPnNpemUgLyBpbmZvLT5zZWN0b3JfY291bnQpOwotICAgICAgICAvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLwotICAgICAgICAvKiBEMCA9IDEgaWYgcHJvdGVjdGVkICovCi0gICAgICAgIGNhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoaW5mby0+c3RhcnRbaV0pOwotICAgICAgICBpbmZvLT5wcm90ZWN0W2ldID0gY2FkZHJbMl0gJiAxOworCS8qIHNlY3RvciBiYXNlIGFkZHJlc3MgKi8KKwlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyBpICogKGluZm8tPnNpemUgLyBpbmZvLT5zZWN0b3JfY291bnQpOworCS8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBNyAuLiBBMCkgPSAweDAyICovCisJLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLworCWNhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoaW5mby0+c3RhcnRbaV0pOworCWluZm8tPnByb3RlY3RbaV0gPSBjYWRkclsyXSAmIDE7CiAgICAgfQogCiAgICAgLyoKICAgICAgKiBQcmV2ZW50IHdyaXRlcyB0byB1bmluaXRpYWxpemVkIEZMQVNILgogICAgICAqLwogICAgIGlmIChpbmZvLT5mbGFzaF9pZCAhPSBGTEFTSF9VTktOT1dOKSB7Ci0gICAgICAgIGNhZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilpbmZvLT5zdGFydFswXTsKLSAgICAgICAgY2FkZHJbMF0gPSAweEYwOyAgIC8qIHJlc2V0IGJhbmsgKi8KKwljYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopaW5mby0+c3RhcnRbMF07CisJY2FkZHJbMF0gPSAweEYwOyAgIC8qIHJlc2V0IGJhbmsgKi8KICAgICB9CiAKICAgICByZXR1cm4gKGluZm8tPnNpemUpOwpAQCAtMjk1LDMyICsyOTUsMzIgQEAKICAgICBpbnQgcmMgPSAwOwogCiAgICAgaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7Ci0gICAgICAgIGlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0gICAgICAgICAgICBwcmludGYgKCItIG1pc3NpbmdcbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMTsKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCSAgICBwcmludGYgKCItIG1pc3NpbmdcbiIpOworCX0gZWxzZSB7CisJICAgIHByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJfQorCXJldHVybiAxOwogICAgIH0KIAogICAgIGlmICgoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgfHwKLSAgICAgICAgKGluZm8tPmZsYXNoX2lkID4gRkxBU0hfQU1EX0NPTVApKSB7Ci0gICAgICAgIHByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOwotICAgICAgICByZXR1cm4gMTsKKwkoaW5mby0+Zmxhc2hfaWQgPiBGTEFTSF9BTURfQ09NUCkpIHsKKwlwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgLSBhYm9ydGVkXG4iKTsKKwlyZXR1cm4gMTsKICAgICB9CiAKICAgICBwcm90ID0gMDsKICAgICBmb3IgKHNlY3Q9c19maXJzdDsgc2VjdDw9c19sYXN0OyArK3NlY3QpIHsKLSAgICAgICAgaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKLSAgICAgICAgICAgIHByb3QrKzsKLSAgICAgICAgfQorCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7CisJICAgIHByb3QrKzsKKwl9CiAgICAgfQogCiAgICAgaWYgKHByb3QpIHsKLSAgICAgICAgcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAotICAgICAgICAgICAgcHJvdCk7CisJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAorCSAgICBwcm90KTsKICAgICB9IGVsc2UgewotICAgICAgICBwcmludGYgKCJcbiIpOworCXByaW50ZiAoIlxuIik7CiAgICAgfQogCiAgICAgbF9zZWN0ID0gLTE7CkBAIC0zMzYsMjYgKzMzNiwyNiBAQAogCiAgICAgLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwogICAgIGZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgc2VjdCsrKSB7Ci0gICAgICAgIGlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsgLyogbm90IHByb3RlY3RlZCAqLwotICAgICAgICAgICAgYWRkciA9IChGTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbc2VjdF0pOwotICAgICAgICAgICAgaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfTUFOX1NTVCkgewotICAgICAgICAgICAgICAgIGFkZHJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwotICAgICAgICAgICAgICAgIGFkZHJbQUREUjFdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OwotICAgICAgICAgICAgICAgIGFkZHJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwOwotICAgICAgICAgICAgICAgIGFkZHJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwotICAgICAgICAgICAgICAgIGFkZHJbQUREUjFdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OwotICAgICAgICAgICAgICAgIGFkZHJbMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA1MDAwNTA7ICAvKiBibG9jayBlcmFzZSAqLwotICAgICAgICAgICAgICAgIHVkZWxheSgzMDAwMCk7ICAvKiB3YWl0IDMwIG1zICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWRkclswXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDMwMDAzMDsgIC8qIHNlY3RvciBlcmFzZSAqLwotICAgICAgICAgICAgbF9zZWN0ID0gc2VjdDsKLSAgICAgICAgfQorCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsgLyogbm90IHByb3RlY3RlZCAqLworCSAgICBhZGRyID0gKEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFtzZWN0XSk7CisJICAgIGlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX01BTl9TU1QpIHsKKwkJYWRkcltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7CisJCWFkZHJbQUREUjFdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OworCQlhZGRyW0FERFIwXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MDsKKwkJYWRkcltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7CisJCWFkZHJbQUREUjFdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OworCQlhZGRyWzBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTAwMDUwOyAgLyogYmxvY2sgZXJhc2UgKi8KKwkJdWRlbGF5KDMwMDAwKTsgIC8qIHdhaXQgMzAgbXMgKi8KKwkgICAgfQorCSAgICBlbHNlCisJCWFkZHJbMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDAzMDAwMzA7ICAvKiBzZWN0b3IgZXJhc2UgKi8KKwkgICAgbF9zZWN0ID0gc2VjdDsKKwl9CiAgICAgfQogCiAgICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCiAgICAgaWYgKGZsYWcpCi0gICAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJZW5hYmxlX2ludGVycnVwdHMoKTsKIAogICAgIC8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwogICAgIHVkZWxheSAoMTAwMCk7CkBAIC0zNjQsMjEgKzM2NCwyMSBAQAogICAgICAqIFdlIHdhaXQgZm9yIHRoZSBsYXN0IHRyaWdnZXJlZCBzZWN0b3IKICAgICAgKi8KICAgICBpZiAobF9zZWN0IDwgMCkKLSAgICAgICAgZ290byBET05FOworCWdvdG8gRE9ORTsKIAogICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKICAgICBsYXN0ICA9IHN0YXJ0OwogICAgIGFkZHIgPSAoRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0W2xfc2VjdF0pOwogICAgIHdoaWxlICgoYWRkclswXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgIT0gKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSB7Ci0gICAgICAgIGlmICgobm93ID0gZ2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgewotICAgICAgICAgICAgcHJpbnRmICgiVGltZW91dFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICAvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotICAgICAgICBpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgeyAgLyogZXZlcnkgc2Vjb25kICovCi0gICAgICAgICAgICBzZXJpYWxfcHV0YyAoJy4nKTsKLSAgICAgICAgICAgIGxhc3QgPSBub3c7Ci0gICAgICAgIH0KKwlpZiAoKG5vdyA9IGdldF90aW1lcihzdGFydCkpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKKwkgICAgcHJpbnRmICgiVGltZW91dFxuIik7CisJICAgIHJldHVybiAxOworCX0KKwkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLworCWlmICgobm93IC0gbGFzdCkgPiAxMDAwKSB7ICAvKiBldmVyeSBzZWNvbmQgKi8KKwkgICAgc2VyaWFsX3B1dGMgKCcuJyk7CisJICAgIGxhc3QgPSBub3c7CisJfQogICAgIH0KIAogRE9ORToKQEAgLTQwOCw0MiArNDA4LDQyIEBACiAgICAgICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcwogICAgICAqLwogICAgIGlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgewotICAgICAgICBkYXRhID0gMDsKLSAgICAgICAgZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgewotICAgICAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7IGk8NCAmJiBjbnQ+MDsgKytpKSB7Ci0gICAgICAgICAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0gICAgICAgICAgICAtLWNudDsKLSAgICAgICAgICAgICsrY3A7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7IGNudD09MCAmJiBpPDQ7ICsraSwgKytjcCkgewotICAgICAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7Ci0gICAgICAgIH0KKwlkYXRhID0gMDsKKwlmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKSB7CisJICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOworCX0KKwlmb3IgKDsgaTw0ICYmIGNudD4wOyArK2kpIHsKKwkgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCSAgICAtLWNudDsKKwkgICAgKytjcDsKKwl9CisJZm9yICg7IGNudD09MCAmJiBpPDQ7ICsraSwgKytjcCkgeworCSAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwl9CiAKLSAgICAgICAgaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gKHJjKTsKLSAgICAgICAgfQotICAgICAgICB3cCArPSA0OworCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgeworCSAgICByZXR1cm4gKHJjKTsKKwl9CisJd3AgKz0gNDsKICAgICB9CiAKICAgICAvKgogICAgICAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAogICAgICAqLwogICAgIHdoaWxlIChjbnQgPj0gNCkgewotICAgICAgICBkYXRhID0gMDsKLSAgICAgICAgZm9yIChpPTA7IGk8NDsgKytpKSB7Ci0gICAgICAgICAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gKHJjKTsKLSAgICAgICAgfQotICAgICAgICB3cCAgKz0gNDsKLSAgICAgICAgY250IC09IDQ7CisJZGF0YSA9IDA7CisJZm9yIChpPTA7IGk8NDsgKytpKSB7CisJICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwl9CisJaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJICAgIHJldHVybiAocmMpOworCX0KKwl3cCAgKz0gNDsKKwljbnQgLT0gNDsKICAgICB9CiAKICAgICBpZiAoY250ID09IDApIHsKLSAgICAgICAgcmV0dXJuICgwKTsKKwlyZXR1cm4gKDApOwogICAgIH0KIAogICAgIC8qCkBAIC00NTEsMTEgKzQ1MSwxMSBAQAogICAgICAqLwogICAgIGRhdGEgPSAwOwogICAgIGZvciAoaT0wLCBjcD13cDsgaTw0ICYmIGNudD4wOyArK2ksICsrY3ApIHsKLSAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotICAgICAgICAtLWNudDsKKwlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJLS1jbnQ7CiAgICAgfQogICAgIGZvciAoOyBpPDQ7ICsraSwgKytjcCkgewotICAgICAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKICAgICB9CiAKICAgICByZXR1cm4gKHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKTsKQEAgLTQ2OSw0NSArNDY5LDQ0IEBACiAgKi8KIHN0YXRpYyBpbnQgd3JpdGVfd29yZCAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKQogewotICAgICAgICB2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFswXSk7Ci0gICAgICAgIHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqZGVzdDIgPSAoRkxBU0hfV09SRF9TSVpFICopZGVzdDsKLSAgICAgICAgdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpkYXRhMiA9IChGTEFTSF9XT1JEX1NJWkUgKikmZGF0YTsKKwl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFswXSk7CisJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpkZXN0MiA9IChGTEFTSF9XT1JEX1NJWkUgKilkZXN0OworCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqZGF0YTIgPSAoRkxBU0hfV09SRF9TSVpFICopJmRhdGE7CiAgICAgdWxvbmcgc3RhcnQ7CiAgICAgaW50IGZsYWc7Ci0gICAgICAgIGludCBpOworCWludCBpOwogCiAgICAgLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCiAgICAgaWYgKCgqKCh2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKilkZXN0KSAmCi0gICAgICAgICAgICAgKEZMQVNIX1dPUkRfU0laRSlkYXRhKSAhPSAoRkxBU0hfV09SRF9TSVpFKWRhdGEpIHsKLSAgICAgICAgcmV0dXJuICgyKTsKKwkgICAgIChGTEFTSF9XT1JEX1NJWkUpZGF0YSkgIT0gKEZMQVNIX1dPUkRfU0laRSlkYXRhKSB7CisJcmV0dXJuICgyKTsKICAgICB9CiAgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCiAgICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCi0gICAgICAgIGZvciAoaT0wOyBpPDQvc2l6ZW9mKEZMQVNIX1dPUkRfU0laRSk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBhZGRyMltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7Ci0gICAgICAgICAgICBhZGRyMltBRERSMV0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7Ci0gICAgICAgICAgICBhZGRyMltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBMDAwQTA7CisJZm9yIChpPTA7IGk8NC9zaXplb2YoRkxBU0hfV09SRF9TSVpFKTsgaSsrKQorCSAgeworCSAgICBhZGRyMltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7CisJICAgIGFkZHIyW0FERFIxXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKKwkgICAgYWRkcjJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQTAwMEEwOwogCi0gICAgICAgICAgICBkZXN0MltpXSA9IGRhdGEyW2ldOworCSAgICBkZXN0MltpXSA9IGRhdGEyW2ldOwogCi0gICAgICAgICAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgICAgIGlmIChmbGFnKQotICAgICAgICAgICAgICBlbmFibGVfaW50ZXJydXB0cygpOworCSAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwkgICAgaWYgKGZsYWcpCisJICAgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKIAotICAgICAgICAgICAgLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLwotICAgICAgICAgICAgc3RhcnQgPSBnZXRfdGltZXIgKDApOwotICAgICAgICAgICAgd2hpbGUgKChkZXN0MltpXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgIT0KLSAgICAgICAgICAgICAgICAgICAoZGF0YTJbaV0gJiAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApKSB7Ci0gICAgICAgICAgICAgIGlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQorCSAgICAvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCisJICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwkgICAgd2hpbGUgKChkZXN0MltpXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgIT0KKwkJICAgKGRhdGEyW2ldICYgKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSkgeworCSAgICAgIGlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKKwkJcmV0dXJuICgxKTsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KIAogICAgIHJldHVybiAoMCk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2JhYjd4eC9sMmNhY2hlLmMgYi9ib2FyZC9lbHRlYy9iYWI3eHgvbDJjYWNoZS5jCmluZGV4IDc0OGQ1MTUuLjA3N2YyYzkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL2JhYjd4eC9sMmNhY2hlLmMKKysrIGIvYm9hcmQvZWx0ZWMvYmFiN3h4L2wyY2FjaGUuYwpAQCAtNTEsMTA0ICs1MSwxMDQgQEAKIHsKICAgICBpZiAobDJjb250cm9sKSAgICAgICAgICAgICAgLyogQkFCNzUwICovCiAgICAgewotICAgICAgICBtdHNwcihTUFJOX0wyQ1IsIGwyY29udHJvbCk7Ci0gICAgICAgIG10c3ByKFNQUk5fTDJDUiwgKGwyY29udHJvbCB8IEwyQ1JfSSkpOwotICAgICAgICB3aGlsZSAobWZzcHIoU1BSTl9MMkNSKSAmIEwyQ1JfSVApCi0gICAgICAgICAgICA7Ci0gICAgICAgIG10c3ByKFNQUk5fTDJDUiwgKGwyY29udHJvbCB8IEwyQ1JfRSkpOwotICAgICAgICByZXR1cm4gKDApOworCW10c3ByKFNQUk5fTDJDUiwgbDJjb250cm9sKTsKKwltdHNwcihTUFJOX0wyQ1IsIChsMmNvbnRyb2wgfCBMMkNSX0kpKTsKKwl3aGlsZSAobWZzcHIoU1BSTl9MMkNSKSAmIEwyQ1JfSVApCisJICAgIDsKKwltdHNwcihTUFJOX0wyQ1IsIChsMmNvbnRyb2wgfCBMMkNSX0UpKTsKKwlyZXR1cm4gKDApOwogICAgIH0KICAgICBlbHNlIC8qIEJBQjc0MCAqLwogICAgIHsKLSAgICAgICAgaW50IHBpY3IxLCBwaWNyMiwgbWFzazsKLSAgICAgICAgaW50IHBpY3IyQ2FjaGVTaXplLCBjYWNoZVNpemU7Ci0gICAgICAgIGludCAqZDsKLSAgICAgICAgaW50IGRldmJ1c2ZuOwotICAgICAgICB1MzIgcmVnMzI7CisJaW50IHBpY3IxLCBwaWNyMiwgbWFzazsKKwlpbnQgcGljcjJDYWNoZVNpemUsIGNhY2hlU2l6ZTsKKwlpbnQgKmQ7CisJaW50IGRldmJ1c2ZuOworCXUzMiByZWczMjsKIAotICAgICAgICBkZXZidXNmbiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX01PVE9ST0xBLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX01QQzEwNiwgMCk7Ci0gICAgICAgIGlmIChkZXZidXNmbiA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAoLTEpOworCWRldmJ1c2ZuID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfTU9UT1JPTEEsCisJCQkJICAgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9NUEMxMDYsIDApOworCWlmIChkZXZidXNmbiA9PSAtMSkKKwkgICAgcmV0dXJuICgtMSk7CiAKLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkICAoZGV2YnVzZm4sIFBDSV9QSUNSMiwgJnJlZzMyKTsKLSAgICAgICAgcmVnMzIgJj0gflBJQ1IyX0wyX0VOOwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkIChkZXZidXNmbiwgUENJX1BJQ1IyLCByZWczMik7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkICAoZGV2YnVzZm4sIFBDSV9QSUNSMiwgJnJlZzMyKTsKKwlyZWczMiAmPSB+UElDUjJfTDJfRU47CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoZGV2YnVzZm4sIFBDSV9QSUNSMiwgcmVnMzIpOwogCi0gICAgICAgIC8qIGNhY2hlIHNpemUgKi8KLSAgICAgICAgaWYgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoQ0ZHX0lTQV9JTyArIDB4MjIwKSAmIDB4MDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIGNhY2hlIHNpemUgaXMgNTEyIEtCICovCi0gICAgICAgICAgICBwaWNyMkNhY2hlU2l6ZSA9IFBJQ1IyX0wyX1NJWkVfNTEySzsKLSAgICAgICAgICAgIGNhY2hlU2l6ZSA9IDB4ODAwMDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvKiBjYWNoZSBzaXplIGlzIDI1NiBLQiAqLwotICAgICAgICAgICAgcGljcjJDYWNoZVNpemUgPSBQSUNSMl9MMl9TSVpFXzI1Nks7Ci0gICAgICAgICAgICBjYWNoZVNpemUgPSAweDQwMDAwOwotICAgICAgICB9CisJLyogY2FjaGUgc2l6ZSAqLworCWlmICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKENGR19JU0FfSU8gKyAweDIyMCkgJiAweDA0KQorCXsKKwkgICAgLyogY2FjaGUgc2l6ZSBpcyA1MTIgS0IgKi8KKwkgICAgcGljcjJDYWNoZVNpemUgPSBQSUNSMl9MMl9TSVpFXzUxMks7CisJICAgIGNhY2hlU2l6ZSA9IDB4ODAwMDA7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIGNhY2hlIHNpemUgaXMgMjU2IEtCICovCisJICAgIHBpY3IyQ2FjaGVTaXplID0gUElDUjJfTDJfU0laRV8yNTZLOworCSAgICBjYWNoZVNpemUgPSAweDQwMDAwOworCX0KIAotICAgICAgICAvKiBzZXR1cCBQSUNSMSAqLwotICAgICAgICBtYXNrID0KLSAgICAgICAgfihQSUNSMV9DRl9CUkVBRF9XUygxKSB8Ci0gICAgICAgICAgUElDUjFfQ0ZfQlJFQURfV1MoMikgfAotICAgICAgICAgIFBJQ1IxX0NGX0NCQSgweGZmKSB8Ci0gICAgICAgICAgUElDUjFfQ0ZfQ0FDSEVfMUcgfAotICAgICAgICAgIFBJQ1IxX0NGX0RQQVJLIHwKLSAgICAgICAgICBQSUNSMV9DRl9BUEFSSyB8Ci0gICAgICAgICAgUElDUjFfQ0ZfTDJfQ0FDSEVfTUFTSyk7CisJLyogc2V0dXAgUElDUjEgKi8KKwltYXNrID0KKwl+KFBJQ1IxX0NGX0JSRUFEX1dTKDEpIHwKKwkgIFBJQ1IxX0NGX0JSRUFEX1dTKDIpIHwKKwkgIFBJQ1IxX0NGX0NCQSgweGZmKSB8CisJICBQSUNSMV9DRl9DQUNIRV8xRyB8CisJICBQSUNSMV9DRl9EUEFSSyB8CisJICBQSUNSMV9DRl9BUEFSSyB8CisJICBQSUNSMV9DRl9MMl9DQUNIRV9NQVNLKTsKIAotICAgICAgICBwaWNyMSA9Ci0gICAgICAgIChQSUNSMV9DRl9DQkEoMHgzZikgfAotICAgICAgICAgUElDUjFfQ0ZfQ0FDSEVfMUcgfAotICAgICAgICAgUElDUjFfQ0ZfQVBBUksgfAotICAgICAgICAgUElDUjFfQ0ZfRFBBUksgfAotICAgICAgICAgUElDUjFfQ0ZfTDJfQ09QWV9CQUNLKTsgLyogUElDUjFfQ0ZfTDJfV1JJVEVfVEhST1VHSCAqLworCXBpY3IxID0KKwkoUElDUjFfQ0ZfQ0JBKDB4M2YpIHwKKwkgUElDUjFfQ0ZfQ0FDSEVfMUcgfAorCSBQSUNSMV9DRl9BUEFSSyB8CisJIFBJQ1IxX0NGX0RQQVJLIHwKKwkgUElDUjFfQ0ZfTDJfQ09QWV9CQUNLKTsgLyogUElDUjFfQ0ZfTDJfV1JJVEVfVEhST1VHSCAqLwogCi0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ19kd29yZCAgKGRldmJ1c2ZuLCBQQ0lfUElDUjEsICZyZWczMik7Ci0gICAgICAgIHJlZzMyICY9IG1hc2s7Ci0gICAgICAgIHJlZzMyIHw9IHBpY3IxOwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkIChkZXZidXNmbiwgUENJX1BJQ1IxLCByZWczMik7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkICAoZGV2YnVzZm4sIFBDSV9QSUNSMSwgJnJlZzMyKTsKKwlyZWczMiAmPSBtYXNrOworCXJlZzMyIHw9IHBpY3IxOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQgKGRldmJ1c2ZuLCBQQ0lfUElDUjEsIHJlZzMyKTsKIAotICAgICAgICAvKgotICAgICAgICAgKiBpbnZhbGlkYXRlIGFsbCBMMiBjYWNoZQotICAgICAgICAgKi8KLSAgICAgICAgcGljcjIgPQotICAgICAgICAoUElDUjJfQ0ZfSU5WX01PREUgfAotICAgICAgICAgUElDUjJfQ0ZfSElUX0hJR0ggfAotICAgICAgICAgUElDUjJfQ0ZfTU9EX0hJR0ggfAotICAgICAgICAgUElDUjJfQ0ZfTDJfSElUX0RFTEFZKDEpIHwKLSAgICAgICAgIFBJQ1IyX0NGX0FQSEFTRV9XUygxKSB8Ci0gICAgICAgICBwaWNyMkNhY2hlU2l6ZSk7CisJLyoKKwkgKiBpbnZhbGlkYXRlIGFsbCBMMiBjYWNoZQorCSAqLworCXBpY3IyID0KKwkoUElDUjJfQ0ZfSU5WX01PREUgfAorCSBQSUNSMl9DRl9ISVRfSElHSCB8CisJIFBJQ1IyX0NGX01PRF9ISUdIIHwKKwkgUElDUjJfQ0ZfTDJfSElUX0RFTEFZKDEpIHwKKwkgUElDUjJfQ0ZfQVBIQVNFX1dTKDEpIHwKKwkgcGljcjJDYWNoZVNpemUpOwogCi0gICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQgKGRldmJ1c2ZuLCBQQ0lfUElDUjIsIHBpY3IyKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkIChkZXZidXNmbiwgUENJX1BJQ1IyLCBwaWNyMik7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogZHVtbXkgdHJhbnNhY3Rpb25zCi0gICAgICAgICAqLwotICAgICAgICBmb3IgKGQ9MDsgZDwoaW50ICopKDIqY2FjaGVTaXplKTsgZCsrKQotICAgICAgICAgICAgZHVtbXkoKmQpOworCS8qCisJICogZHVtbXkgdHJhbnNhY3Rpb25zCisJICovCisJZm9yIChkPTA7IGQ8KGludCAqKSgyKmNhY2hlU2l6ZSk7IGQrKykKKwkgICAgZHVtbXkoKmQpOwogCi0gICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQgKGRldmJ1c2ZuLCBQQ0lfUElDUjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwaWNyMiB8IFBJQ1IyX0NGX0ZMVVNIX0wyKSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoZGV2YnVzZm4sIFBDSV9QSUNSMiwKKwkJCQkocGljcjIgfCBQSUNSMl9DRl9GTFVTSF9MMikpOwogCi0gICAgICAgIC8qIHNldHVwIFBJQ1IyICovCi0gICAgICAgIHBpY3IyID0KLSAgICAgICAgKFBJQ1IyX0NGX0ZBU1RfQ0FTVE9VVCB8Ci0gICAgICAgICBQSUNSMl9DRl9XREFUQSB8Ci0gICAgICAgICBQSUNSMl9DRl9BRERSX09OTFlfRElTQUJMRSB8Ci0gICAgICAgICBQSUNSMl9DRl9ISVRfSElHSCB8Ci0gICAgICAgICBQSUNSMl9DRl9NT0RfSElHSCB8Ci0gICAgICAgICBQSUNSMl9MMl9VUERBVEVfRU4gfAotICAgICAgICAgUElDUjJfTDJfRU4gfAotICAgICAgICAgUElDUjJfQ0ZfQVBIQVNFX1dTKDEpIHwKLSAgICAgICAgIFBJQ1IyX0NGX0RBVEFfUkFNX1BCVVJTVCB8Ci0gICAgICAgICBQSUNSMl9DRl9MMl9ISVRfREVMQVkoMSkgfAotICAgICAgICAgUElDUjJfQ0ZfU05PT1BfV1MoMikgfAotICAgICAgICAgcGljcjJDYWNoZVNpemUpOworCS8qIHNldHVwIFBJQ1IyICovCisJcGljcjIgPQorCShQSUNSMl9DRl9GQVNUX0NBU1RPVVQgfAorCSBQSUNSMl9DRl9XREFUQSB8CisJIFBJQ1IyX0NGX0FERFJfT05MWV9ESVNBQkxFIHwKKwkgUElDUjJfQ0ZfSElUX0hJR0ggfAorCSBQSUNSMl9DRl9NT0RfSElHSCB8CisJIFBJQ1IyX0wyX1VQREFURV9FTiB8CisJIFBJQ1IyX0wyX0VOIHwKKwkgUElDUjJfQ0ZfQVBIQVNFX1dTKDEpIHwKKwkgUElDUjJfQ0ZfREFUQV9SQU1fUEJVUlNUIHwKKwkgUElDUjJfQ0ZfTDJfSElUX0RFTEFZKDEpIHwKKwkgUElDUjJfQ0ZfU05PT1BfV1MoMikgfAorCSBwaWNyMkNhY2hlU2l6ZSk7CiAKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoZGV2YnVzZm4sIFBDSV9QSUNSMiwgcGljcjIpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQgKGRldmJ1c2ZuLCBQQ0lfUElDUjIsIHBpY3IyKTsKICAgICB9CiAgICAgcmV0dXJuICgwKTsKIH0KQEAgLTE1Niw0ICsxNTYsMyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2VuZGlmIC8qIChDRkdfTDJfQkFCN3h4KSAqLwotCmRpZmYgLS1naXQgYS9ib2FyZC9lbHRlYy9iYWI3eHgvbWlzYy5jIGIvYm9hcmQvZWx0ZWMvYmFiN3h4L21pc2MuYwppbmRleCAxYjQzNzZkLi5iNTBkMTFiIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9iYWI3eHgvbWlzYy5jCisrKyBiL2JvYXJkL2VsdGVjL2JhYjd4eC9taXNjLmMKQEAgLTYyLDcgKzYyLDcgQEAKICAgICB1X2ludCAgaSwgbCwgaW5pdFNyb20sIGNvcHlOdjsKICAgICBjaGFyIGJ1ZlsyNTZdOwogICAgIGNoYXIgaGV4WzIzXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAwLCAwLCAwLCAwLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1IH07CisJICAgICAwLCAwLCAwLCAwLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1IH07CiAgICAgcGNpX2Rldl90IGJkZjsKIAogICAgIGNoYXIgc3JvbVNZTVtdID0gewpAQCAtMTMxLDIwNCArMTMxLDIwNCBAQAogCiAgICAgLyogcmVhZCBvdXQgY3VycmVudCByZXZpc2lvbiBzcm9tIGNvbnRlbnMgKi8KICAgICBlbF9zcm9tX2xvYWQgKDB4MDAwMCwgKHVfY2hhciopJmVlcmV2LCBzaXplb2YocmV2aW5mbyksCi0gICAgICAgICAgICAgICAgU0VDT05EX0RFVklDRSwgRklSU1RfQkxPQ0spOworCQlTRUNPTkRfREVWSUNFLCBGSVJTVF9CTE9DSyk7CiAKICAgICAvKiByZWFkIG91dCBjdXJyZW50IG52cmFtIHNoYWRvdyBpbWFnZSAqLwogICAgIG52cmFtX3JlYWQgKGJ1ZiwgQ0ZHX05WX1NST01fQ09QWV9BRERSLCBDRkdfU1JPTV9TSVpFKTsKIAogICAgIGlmIChzdHJjbXAgKGVlcmV2Lm1hZ2ljLCAiRUxURUMiKSAhPSAwKQogICAgIHsKLSAgICAgICAgLyogc3JvbSBpcyBub3QgaW5pdGlhbGl6ZWQgLT4gY3JlYXRlIGEgZGVmYXVsdCByZXZpc2lvbiBpbmZvICovCi0gICAgICAgIGZvciAoaSA9IDAsIHB0ciA9ICh1X2NoYXIgKikmZWVyZXY7IGkgPCBzaXplb2YocmV2aW5mbyk7IGkrKykKLSAgICAgICAgICAgICpwdHIrKyA9IDB4MDA7Ci0gICAgICAgIHN0cmNweShlZXJldi5tYWdpYywgIkVMVEVDIik7Ci0gICAgICAgIGVlcmV2LnJldnJldlswXSA9IDE7Ci0gICAgICAgIGVlcmV2LnJldnJldlsxXSA9IDA7Ci0gICAgICAgIGVlcmV2LnNpemUgPSAweDAwRTA7Ci0gICAgICAgIGVlcmV2LmNhdGVnb3J5WzBdID0gMHgwMTsKKwkvKiBzcm9tIGlzIG5vdCBpbml0aWFsaXplZCAtPiBjcmVhdGUgYSBkZWZhdWx0IHJldmlzaW9uIGluZm8gKi8KKwlmb3IgKGkgPSAwLCBwdHIgPSAodV9jaGFyICopJmVlcmV2OyBpIDwgc2l6ZW9mKHJldmluZm8pOyBpKyspCisJICAgICpwdHIrKyA9IDB4MDA7CisJc3RyY3B5KGVlcmV2Lm1hZ2ljLCAiRUxURUMiKTsKKwllZXJldi5yZXZyZXZbMF0gPSAxOworCWVlcmV2LnJldnJldlsxXSA9IDA7CisJZWVyZXYuc2l6ZSA9IDB4MDBFMDsKKwllZXJldi5jYXRlZ29yeVswXSA9IDB4MDE7CiAKLSAgICAgICAgLyogbm9kZSBpZCBmcm9tIGRlYWQgZTEyOCBhcyBkZWZhdWx0ICovCi0gICAgICAgIGVlcmV2LmV0aGVyYWRkclswXSA9IDB4MDA7Ci0gICAgICAgIGVlcmV2LmV0aGVyYWRkclsxXSA9IDB4MDA7Ci0gICAgICAgIGVlcmV2LmV0aGVyYWRkclsyXSA9IDB4NUI7Ci0gICAgICAgIGVlcmV2LmV0aGVyYWRkclszXSA9IDB4MDA7Ci0gICAgICAgIGVlcmV2LmV0aGVyYWRkcls0XSA9IDB4MkU7Ci0gICAgICAgIGVlcmV2LmV0aGVyYWRkcls1XSA9IDB4NEQ7CisJLyogbm9kZSBpZCBmcm9tIGRlYWQgZTEyOCBhcyBkZWZhdWx0ICovCisJZWVyZXYuZXRoZXJhZGRyWzBdID0gMHgwMDsKKwllZXJldi5ldGhlcmFkZHJbMV0gPSAweDAwOworCWVlcmV2LmV0aGVyYWRkclsyXSA9IDB4NUI7CisJZWVyZXYuZXRoZXJhZGRyWzNdID0gMHgwMDsKKwllZXJldi5ldGhlcmFkZHJbNF0gPSAweDJFOworCWVlcmV2LmV0aGVyYWRkcls1XSA9IDB4NEQ7CiAKLSAgICAgICAgLyogY2FjaGUgY29uZmlnIHdvcmQgZm9yIGJhYjc1MCAqLwotICAgICAgICAqKGludCopJmVlcmV2LnJlc1swXSA9IENMSzJQMFRPMV8xTUJfUEJfMFA1REg7CisJLyogY2FjaGUgY29uZmlnIHdvcmQgZm9yIGJhYjc1MCAqLworCSooaW50KikmZWVyZXYucmVzWzBdID0gQ0xLMlAwVE8xXzFNQl9QQl8wUDVESDsKIAotICAgICAgICBpbml0U3JvbSA9IDE7ICAvKiBmb3JjZSBkaWFsb2cgKi8KLSAgICAgICAgY29weU52ICAgPSAxOyAgLyogY29weSB0byBudnJhbSAqLworCWluaXRTcm9tID0gMTsgIC8qIGZvcmNlIGRpYWxvZyAqLworCWNvcHlOdiAgID0gMTsgIC8qIGNvcHkgdG8gbnZyYW0gKi8KICAgICB9CiAKICAgICBpZiAoKGNvcHlOdiA9PSAwKSAmJiAgIChlbF9zcm9tX2NoZWNrc3VtKCh1X2NoYXIqKSZlZXJldiwgQ0ZHX1NST01fU0laRSkgIT0KLSAgICAgICAgICAgICAgICBlbF9zcm9tX2NoZWNrc3VtKCh1X2NoYXIqKWJ1ZiwgQ0ZHX1NST01fU0laRSkpKQorCQllbF9zcm9tX2NoZWNrc3VtKCh1X2NoYXIqKWJ1ZiwgQ0ZHX1NST01fU0laRSkpKQogICAgIHsKLSAgICAgICAgcHJpbnRmICgiSW52YWxpZCByZXZpc2lvbiBpbmZvIGNvcHkgaW4gbnZyYW0gIVxuIik7Ci0gICAgICAgIHByaW50ZiAoIlByZXNzIGtleTpcbiAgPGM+IHRvIGNvcHkgY3VycmVudCByZXZpc2lvbiBpbmZvIHRvIG52cmFtLlxuIik7Ci0gICAgICAgIHByaW50ZiAoIiAgPHI+IHRvIHJlZW50ZXIgcmV2aXNpb24gaW5mby5cbiIpOwotICAgICAgICBwcmludGYgKCI9PiAiKTsKLSAgICAgICAgaWYgKDAgIT0gcmVhZGxpbmUgKE5VTEwpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKChjaGFyKXRvdXBwZXIoY29uc29sZV9idWZmZXJbMF0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSAnQyc6Ci0gICAgICAgICAgICAgICAgY29weU52ID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ1InOgotICAgICAgICAgICAgICAgIGNvcHlOdiA9IDE7Ci0gICAgICAgICAgICAgICAgaW5pdFNyb20gPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJcHJpbnRmICgiSW52YWxpZCByZXZpc2lvbiBpbmZvIGNvcHkgaW4gbnZyYW0gIVxuIik7CisJcHJpbnRmICgiUHJlc3Mga2V5OlxuICA8Yz4gdG8gY29weSBjdXJyZW50IHJldmlzaW9uIGluZm8gdG8gbnZyYW0uXG4iKTsKKwlwcmludGYgKCIgIDxyPiB0byByZWVudGVyIHJldmlzaW9uIGluZm8uXG4iKTsKKwlwcmludGYgKCI9PiAiKTsKKwlpZiAoMCAhPSByZWFkbGluZSAoTlVMTCkpCisJeworCSAgICBzd2l0Y2ggKChjaGFyKXRvdXBwZXIoY29uc29sZV9idWZmZXJbMF0pKQorCSAgICB7CisJICAgIGNhc2UgJ0MnOgorCQljb3B5TnYgPSAxOworCQlicmVhazsKKwkgICAgY2FzZSAnUic6CisJCWNvcHlOdiA9IDE7CisJCWluaXRTcm9tID0gMTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CiAgICAgfQogCiAgICAgaWYgKGluaXRTcm9tKQogICAgIHsKLSAgICAgICAgbWVtY3B5IChidWYsICZlZXJldi5yZXZpc2lvblswXVswXSwgMTQpOyAgICAgLyogc2F2ZSBhbGwgcmV2aXNpb24gaW5mbyAqLwotICAgICAgICBwcmludGYgKCJFbnRlciByZXZpc2lvbiBudW1iZXIgKDAtOSk6ICVjICAiLCBlZXJldi5yZXZpc2lvblswXVswXSk7Ci0gICAgICAgIGlmICgwICE9IHJlYWRsaW5lIChOVUxMKSkKLSAgICAgICAgewotICAgICAgICAgICAgZWVyZXYucmV2aXNpb25bMF1bMF0gPSAoY2hhcil0b3VwcGVyKGNvbnNvbGVfYnVmZmVyWzBdKTsKLSAgICAgICAgICAgIG1lbWNweSAoJmVlcmV2LnJldmlzaW9uWzFdWzBdLCBidWYsIDEyKTsgLyogc2hpZnQgcmVzdCBvZiByZXYgaW5mbyAqLwotICAgICAgICB9CisJbWVtY3B5IChidWYsICZlZXJldi5yZXZpc2lvblswXVswXSwgMTQpOyAgICAgLyogc2F2ZSBhbGwgcmV2aXNpb24gaW5mbyAqLworCXByaW50ZiAoIkVudGVyIHJldmlzaW9uIG51bWJlciAoMC05KTogJWMgICIsIGVlcmV2LnJldmlzaW9uWzBdWzBdKTsKKwlpZiAoMCAhPSByZWFkbGluZSAoTlVMTCkpCisJeworCSAgICBlZXJldi5yZXZpc2lvblswXVswXSA9IChjaGFyKXRvdXBwZXIoY29uc29sZV9idWZmZXJbMF0pOworCSAgICBtZW1jcHkgKCZlZXJldi5yZXZpc2lvblsxXVswXSwgYnVmLCAxMik7IC8qIHNoaWZ0IHJlc3Qgb2YgcmV2IGluZm8gKi8KKwl9CiAKLSAgICAgICAgcHJpbnRmICgiRW50ZXIgcmV2aXNpb24gY2hhcmFjdGVyIChBLVopOiAlYyAgIiwgZWVyZXYucmV2aXNpb25bMF1bMV0pOwotICAgICAgICBpZiAoMSA9PSByZWFkbGluZSAoTlVMTCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVlcmV2LnJldmlzaW9uWzBdWzFdID0gKGNoYXIpdG91cHBlcihjb25zb2xlX2J1ZmZlclswXSk7Ci0gICAgICAgIH0KKwlwcmludGYgKCJFbnRlciByZXZpc2lvbiBjaGFyYWN0ZXIgKEEtWik6ICVjICAiLCBlZXJldi5yZXZpc2lvblswXVsxXSk7CisJaWYgKDEgPT0gcmVhZGxpbmUgKE5VTEwpKQorCXsKKwkgICAgZWVyZXYucmV2aXNpb25bMF1bMV0gPSAoY2hhcil0b3VwcGVyKGNvbnNvbGVfYnVmZmVyWzBdKTsKKwl9CiAKLSAgICAgICAgcHJpbnRmICgiRW50ZXIgYm9hcmQgbmFtZSAoVi1YWFhYLVhYWFgpOiAlcyAgIiwgKGNoYXIgKikmZWVyZXYuYm9hcmQpOwotICAgICAgICBpZiAoMTEgPT0gcmVhZGxpbmUgKE5VTEwpKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGk9MDsgaTwxMTsgaSsrKQotICAgICAgICAgICAgICAgIGVlcmV2LmJvYXJkW2ldID0gIChjaGFyKXRvdXBwZXIoY29uc29sZV9idWZmZXJbaV0pOwotICAgICAgICAgICAgZWVyZXYuYm9hcmRbMTFdID0gJ1wwJzsKLSAgICAgICAgfQorCXByaW50ZiAoIkVudGVyIGJvYXJkIG5hbWUgKFYtWFhYWC1YWFhYKTogJXMgICIsIChjaGFyICopJmVlcmV2LmJvYXJkKTsKKwlpZiAoMTEgPT0gcmVhZGxpbmUgKE5VTEwpKQorCXsKKwkgICAgZm9yIChpPTA7IGk8MTE7IGkrKykKKwkJZWVyZXYuYm9hcmRbaV0gPSAgKGNoYXIpdG91cHBlcihjb25zb2xlX2J1ZmZlcltpXSk7CisJICAgIGVlcmV2LmJvYXJkWzExXSA9ICdcMCc7CisJfQogCi0gICAgICAgIHByaW50ZiAoIkVudGVyIHNlcmlhbCBudW1iZXI6ICVzICIsIChjaGFyICopJmVlcmV2LnNlcmlhbCApOwotICAgICAgICBpZiAoNiA9PSByZWFkbGluZSAoTlVMTCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaT0wOyBpPDY7IGkrKykKLSAgICAgICAgICAgICAgICBlZXJldi5zZXJpYWxbaV0gPSBjb25zb2xlX2J1ZmZlcltpXTsKLSAgICAgICAgICAgIGVlcmV2LnNlcmlhbFs2XSA9ICdcMCc7Ci0gICAgICAgIH0KKwlwcmludGYgKCJFbnRlciBzZXJpYWwgbnVtYmVyOiAlcyAiLCAoY2hhciAqKSZlZXJldi5zZXJpYWwgKTsKKwlpZiAoNiA9PSByZWFkbGluZSAoTlVMTCkpCisJeworCSAgICBmb3IgKGk9MDsgaTw2OyBpKyspCisJCWVlcmV2LnNlcmlhbFtpXSA9IGNvbnNvbGVfYnVmZmVyW2ldOworCSAgICBlZXJldi5zZXJpYWxbNl0gPSAnXDAnOworCX0KIAotICAgICAgICBwcmludGYgKCJFbnRlciBldGhlciBub2RlIElEIHdpdGggbGVhZGluZyB6ZXJvIChIRVgpOiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggICIsCi0gICAgICAgICAgICBlZXJldi5ldGhlcmFkZHJbMF0sIGVlcmV2LmV0aGVyYWRkclsxXSwKLSAgICAgICAgICAgIGVlcmV2LmV0aGVyYWRkclsyXSwgZWVyZXYuZXRoZXJhZGRyWzNdLAotICAgICAgICAgICAgZWVyZXYuZXRoZXJhZGRyWzRdLCBlZXJldi5ldGhlcmFkZHJbNV0pOwotICAgICAgICBpZiAoMTIgPT0gcmVhZGxpbmUgKE5VTEwpKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGk9MDsgaTwxMjsgaSs9MikKLSAgICAgICAgICAgIGVlcmV2LmV0aGVyYWRkcltpPj4xXSA9IChjaGFyKSgxNipoZXhbdG91cHBlcihjb25zb2xlX2J1ZmZlcltpXSktJzAnXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4W3RvdXBwZXIoY29uc29sZV9idWZmZXJbaSsxXSktJzAnXSk7Ci0gICAgICAgIH0KKwlwcmludGYgKCJFbnRlciBldGhlciBub2RlIElEIHdpdGggbGVhZGluZyB6ZXJvIChIRVgpOiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggICIsCisJICAgIGVlcmV2LmV0aGVyYWRkclswXSwgZWVyZXYuZXRoZXJhZGRyWzFdLAorCSAgICBlZXJldi5ldGhlcmFkZHJbMl0sIGVlcmV2LmV0aGVyYWRkclszXSwKKwkgICAgZWVyZXYuZXRoZXJhZGRyWzRdLCBlZXJldi5ldGhlcmFkZHJbNV0pOworCWlmICgxMiA9PSByZWFkbGluZSAoTlVMTCkpCisJeworCSAgICBmb3IgKGk9MDsgaTwxMjsgaSs9MikKKwkgICAgZWVyZXYuZXRoZXJhZGRyW2k+PjFdID0gKGNoYXIpKDE2KmhleFt0b3VwcGVyKGNvbnNvbGVfYnVmZmVyW2ldKS0nMCddICsKKwkJCSAgICAgICBoZXhbdG91cHBlcihjb25zb2xlX2J1ZmZlcltpKzFdKS0nMCddKTsKKwl9CiAKLSAgICAgICAgbCA9IHN0cmxlbiAoKGNoYXIgKikmZWVyZXYudGV4dCk7Ci0gICAgICAgIHByaW50ZigiQWRkIHRvIHRleHQgc2VjdGlvbiAobWF4IDY0IGNocik6ICVzICIsIChjaGFyICopJmVlcmV2LnRleHQgKTsKLSAgICAgICAgaWYgKDAgIT0gcmVhZGxpbmUgKE5VTEwpKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGkgPSBsOyBpPDYzOyBpKyspCi0gICAgICAgICAgICAgICAgZWVyZXYudGV4dFtpXSA9IGNvbnNvbGVfYnVmZmVyW2ktbF07Ci0gICAgICAgICAgICBlZXJldi50ZXh0WzYzXSA9ICdcMCc7Ci0gICAgICAgIH0KKwlsID0gc3RybGVuICgoY2hhciAqKSZlZXJldi50ZXh0KTsKKwlwcmludGYoIkFkZCB0byB0ZXh0IHNlY3Rpb24gKG1heCA2NCBjaHIpOiAlcyAiLCAoY2hhciAqKSZlZXJldi50ZXh0ICk7CisJaWYgKDAgIT0gcmVhZGxpbmUgKE5VTEwpKQorCXsKKwkgICAgZm9yIChpID0gbDsgaTw2MzsgaSsrKQorCQllZXJldi50ZXh0W2ldID0gY29uc29sZV9idWZmZXJbaS1sXTsKKwkgICAgZWVyZXYudGV4dFs2M10gPSAnXDAnOworCX0KIAotICAgICAgICBpZiAoc3Ryc3RyICgoY2hhciAqKSZlZXJldi5ib2FyZCwgIjc1IikgIT0gTlVMTCkKLSAgICAgICAgICAgIGVsdGVjX2JvYXJkID0gNzUwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbHRlY19ib2FyZCA9IDc0MDsKKwlpZiAoc3Ryc3RyICgoY2hhciAqKSZlZXJldi5ib2FyZCwgIjc1IikgIT0gTlVMTCkKKwkgICAgZWx0ZWNfYm9hcmQgPSA3NTA7CisJZWxzZQorCSAgICBlbHRlY19ib2FyZCA9IDc0MDsKIAotICAgICAgICBpZiAoZWx0ZWNfYm9hcmQgPT0gNzUwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoQ1BVX1RZUEUgPT0gQ1BVX1RZUEVfNzUwKQotICAgICAgICAgICAgICAgICooaW50KikmZWVyZXYucmVzWzBdID0gQ0xLMlAwVE8xXzFNQl9QQl8wUDVESDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgKihpbnQqKSZlZXJldi5yZXNbMF0gPSBDTEsyUDVUTzFfMU1CX1BCXzBQNURIOworCWlmIChlbHRlY19ib2FyZCA9PSA3NTApCisJeworCSAgICBpZiAoQ1BVX1RZUEUgPT0gQ1BVX1RZUEVfNzUwKQorCQkqKGludCopJmVlcmV2LnJlc1swXSA9IENMSzJQMFRPMV8xTUJfUEJfMFA1REg7CisJCWVsc2UKKwkJKihpbnQqKSZlZXJldi5yZXNbMF0gPSBDTEsyUDVUTzFfMU1CX1BCXzBQNURIOwogCi0gICAgICAgICAgICBwcmludGYoIkVudGVyIEwyQ2FjaGUgY29uZmlnIHdvcmQgd2l0aCBsZWFkaW5nIHplcm8gKEhFWCk6ICUwOFggICIsCi0gICAgICAgICAgICAgICAgICAgICooaW50KikmZWVyZXYucmVzWzBdICk7Ci0gICAgICAgICAgICBpZiAoMCAhPSByZWFkbGluZSAoTlVMTCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8NzsgaSs9MikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGVlcmV2LnJlc1tpPj4xXSA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyKSgxNipoZXhbdG91cHBlcihjb25zb2xlX2J1ZmZlcltpXSktJzAnXSArCi0gICAgICAgICAgICAgICAgICAgIGhleFt0b3VwcGVyKGNvbnNvbGVfYnVmZmVyW2krMV0pLScwJ10pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkgICAgcHJpbnRmKCJFbnRlciBMMkNhY2hlIGNvbmZpZyB3b3JkIHdpdGggbGVhZGluZyB6ZXJvIChIRVgpOiAlMDhYICAiLAorCQkgICAgKihpbnQqKSZlZXJldi5yZXNbMF0gKTsKKwkgICAgaWYgKDAgIT0gcmVhZGxpbmUgKE5VTEwpKQorCSAgICB7CisJCWZvciAoaT0wOyBpPDc7IGkrPTIpCisJCXsKKwkJICAgIGVlcmV2LnJlc1tpPj4xXSA9CisJCSAgICAoY2hhcikoMTYqaGV4W3RvdXBwZXIoY29uc29sZV9idWZmZXJbaV0pLScwJ10gKworCQkgICAgaGV4W3RvdXBwZXIoY29uc29sZV9idWZmZXJbaSsxXSktJzAnXSk7CisJCX0KKwkgICAgfQogCi0gICAgICAgICAgICAvKiBwcmVwYXJlIG5ldHdvcmsgZWVwcm9tICovCi0gICAgICAgICAgICBzcm9tTUlJWzIwXSA9IGVlcmV2LmV0aGVyYWRkclswXTsKLSAgICAgICAgICAgIHNyb21NSUlbMjFdID0gZWVyZXYuZXRoZXJhZGRyWzFdOwotICAgICAgICAgICAgc3JvbU1JSVsyMl0gPSBlZXJldi5ldGhlcmFkZHJbMl07Ci0gICAgICAgICAgICBzcm9tTUlJWzIzXSA9IGVlcmV2LmV0aGVyYWRkclszXTsKLSAgICAgICAgICAgIHNyb21NSUlbMjRdID0gZWVyZXYuZXRoZXJhZGRyWzRdOwotICAgICAgICAgICAgc3JvbU1JSVsyNV0gPSBlZXJldi5ldGhlcmFkZHJbNV07Ci0gICAgICAgICAgICBwcmludGYoIlxuU1JvbTogIFdyaXRpbmcgREVDMjExNDMgTUlJIGluZm8gLi4gIik7CisJICAgIC8qIHByZXBhcmUgbmV0d29yayBlZXByb20gKi8KKwkgICAgc3JvbU1JSVsyMF0gPSBlZXJldi5ldGhlcmFkZHJbMF07CisJICAgIHNyb21NSUlbMjFdID0gZWVyZXYuZXRoZXJhZGRyWzFdOworCSAgICBzcm9tTUlJWzIyXSA9IGVlcmV2LmV0aGVyYWRkclsyXTsKKwkgICAgc3JvbU1JSVsyM10gPSBlZXJldi5ldGhlcmFkZHJbM107CisJICAgIHNyb21NSUlbMjRdID0gZWVyZXYuZXRoZXJhZGRyWzRdOworCSAgICBzcm9tTUlJWzI1XSA9IGVlcmV2LmV0aGVyYWRkcls1XTsKKwkgICAgcHJpbnRmKCJcblNSb206ICBXcml0aW5nIERFQzIxMTQzIE1JSSBpbmZvIC4uICIpOwogCi0gICAgICAgICAgICBpZiAoZGNfc3JvbV9zdG9yZSAoKHVfc2hvcnQgKilzcm9tTUlJKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBwcmludGYoIkZBSUxFRFxuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJPS1xuIik7Ci0gICAgICAgIH0KKwkgICAgaWYgKGRjX3Nyb21fc3RvcmUgKCh1X3Nob3J0ICopc3JvbU1JSSkgPT0gLTEpCisJCXByaW50ZigiRkFJTEVEXG4iKTsKKwkgICAgZWxzZQorCQlwcmludGYoIk9LXG4iKTsKKwl9CiAKLSAgICAgICAgaWYgKGVsdGVjX2JvYXJkID09IDc0MCkKLSAgICAgICAgewotICAgICAgICAgICAgKihpbnQgKikmZWVyZXYucmVzWzBdID0gMDsKLSAgICAgICAgICAgIHNyb21TWU1bMjBdID0gZWVyZXYuZXRoZXJhZGRyWzBdOwotICAgICAgICAgICAgc3JvbVNZTVsyMV0gPSBlZXJldi5ldGhlcmFkZHJbMV07Ci0gICAgICAgICAgICBzcm9tU1lNWzIyXSA9IGVlcmV2LmV0aGVyYWRkclsyXTsKLSAgICAgICAgICAgIHNyb21TWU1bMjNdID0gZWVyZXYuZXRoZXJhZGRyWzNdOwotICAgICAgICAgICAgc3JvbVNZTVsyNF0gPSBlZXJldi5ldGhlcmFkZHJbNF07Ci0gICAgICAgICAgICBzcm9tU1lNWzI1XSA9IGVlcmV2LmV0aGVyYWRkcls1XTsKLSAgICAgICAgICAgIHByaW50ZigiXG5TUm9tOiAgV3JpdGluZyBERUMyMTE0MyBTWU0gaW5mbyAuLiAiKTsKKwlpZiAoZWx0ZWNfYm9hcmQgPT0gNzQwKQorCXsKKwkgICAgKihpbnQgKikmZWVyZXYucmVzWzBdID0gMDsKKwkgICAgc3JvbVNZTVsyMF0gPSBlZXJldi5ldGhlcmFkZHJbMF07CisJICAgIHNyb21TWU1bMjFdID0gZWVyZXYuZXRoZXJhZGRyWzFdOworCSAgICBzcm9tU1lNWzIyXSA9IGVlcmV2LmV0aGVyYWRkclsyXTsKKwkgICAgc3JvbVNZTVsyM10gPSBlZXJldi5ldGhlcmFkZHJbM107CisJICAgIHNyb21TWU1bMjRdID0gZWVyZXYuZXRoZXJhZGRyWzRdOworCSAgICBzcm9tU1lNWzI1XSA9IGVlcmV2LmV0aGVyYWRkcls1XTsKKwkgICAgcHJpbnRmKCJcblNSb206ICBXcml0aW5nIERFQzIxMTQzIFNZTSBpbmZvIC4uICIpOwogCi0gICAgICAgICAgICBpZiAoZGNfc3JvbV9zdG9yZSAoKHVfc2hvcnQgKilzcm9tU1lNKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBwcmludGYoIkZBSUxFRFxuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJPS1xuIik7Ci0gICAgICAgIH0KKwkgICAgaWYgKGRjX3Nyb21fc3RvcmUgKCh1X3Nob3J0ICopc3JvbVNZTSkgPT0gLTEpCisJCXByaW50ZigiRkFJTEVEXG4iKTsKKwkgICAgZWxzZQorCQlwcmludGYoIk9LXG4iKTsKKwl9CiAKLSAgICAgICAgLyogdXBkYXRlIENSQyAqLwotICAgICAgICBlZXJldi5jcmMgPSBlbF9zcm9tX2NoZWNrc3VtKCh1X2NoYXIgKillZXJldi5ib2FyZCwgZWVyZXYuc2l6ZSk7CisJLyogdXBkYXRlIENSQyAqLworCWVlcmV2LmNyYyA9IGVsX3Nyb21fY2hlY2tzdW0oKHVfY2hhciAqKWVlcmV2LmJvYXJkLCBlZXJldi5zaXplKTsKIAotICAgICAgICAvKiB3cml0ZSBuZXcgdmFsdWVzICovCi0gICAgICAgIHByaW50ZigiXG5TUm9tOiAgV3JpdGluZyByZXZpc2lvbiBpbmZvIC4uLi4uLiAiKTsKLSAgICAgICAgaWYgKGVsX3Nyb21fc3RvcmUoKEJMT0NLX1NJWkUtc2l6ZW9mKHJldmluZm8pKSwgKHVfY2hhciAqKSZlZXJldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocmV2aW5mbyksIFNFQ09ORF9ERVZJQ0UsIEZJUlNUX0JMT0NLKSA9PSAtMSkKLSAgICAgICAgICAgIHByaW50ZigiRkFJTEVEXG5cbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGYoIk9LXG5cbiIpOworCS8qIHdyaXRlIG5ldyB2YWx1ZXMgKi8KKwlwcmludGYoIlxuU1JvbTogIFdyaXRpbmcgcmV2aXNpb24gaW5mbyAuLi4uLi4gIik7CisJaWYgKGVsX3Nyb21fc3RvcmUoKEJMT0NLX1NJWkUtc2l6ZW9mKHJldmluZm8pKSwgKHVfY2hhciAqKSZlZXJldiwKKwkJCSAgICBzaXplb2YocmV2aW5mbyksIFNFQ09ORF9ERVZJQ0UsIEZJUlNUX0JMT0NLKSA9PSAtMSkKKwkgICAgcHJpbnRmKCJGQUlMRURcblxuIik7CisJZWxzZQorCSAgICBwcmludGYoIk9LXG5cbiIpOwogCi0gICAgICAgIC8qIHdyaXRlIG5ldyB2YWx1ZXMgYXMgc2hhZG93IGltYWdlIHRvIG52cmFtICovCi0gICAgICAgIG52cmFtX3dyaXRlIChDRkdfTlZfU1JPTV9DT1BZX0FERFIsICh2b2lkICopJmVlcmV2LCBDRkdfU1JPTV9TSVpFKTsKKwkvKiB3cml0ZSBuZXcgdmFsdWVzIGFzIHNoYWRvdyBpbWFnZSB0byBudnJhbSAqLworCW52cmFtX3dyaXRlIChDRkdfTlZfU1JPTV9DT1BZX0FERFIsICh2b2lkICopJmVlcmV2LCBDRkdfU1JPTV9TSVpFKTsKIAogICAgIH0gLyppZiAoaW5pdFNyb20pICovCiAKICAgICAvKiBjb3B5IGN1cnJlbnQgdmFsdWVzIGFzIHNoYWRvdyBpbWFnZSB0byBudnJhbSAqLwogICAgIGlmIChpbml0U3JvbSA9PSAwICYmIGNvcHlOdiA9PSAxKQotICAgICAgICBudnJhbV93cml0ZSAoQ0ZHX05WX1NST01fQ09QWV9BRERSLCAodm9pZCAqKSZlZXJldiwgQ0ZHX1NST01fU0laRSk7CisJbnZyYW1fd3JpdGUgKENGR19OVl9TUk9NX0NPUFlfQUREUiwgKHZvaWQgKikmZWVyZXYsIENGR19TUk9NX1NJWkUpOwogCiAgICAgLyogdXBkYXRlIGVudmlyb25tZW50ICovCiAgICAgc3ByaW50ZiAoYnVmLCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAotICAgICAgICAgICAgZWVyZXYuZXRoZXJhZGRyWzBdLCBlZXJldi5ldGhlcmFkZHJbMV0sCi0gICAgICAgICAgICBlZXJldi5ldGhlcmFkZHJbMl0sIGVlcmV2LmV0aGVyYWRkclszXSwKLSAgICAgICAgICAgIGVlcmV2LmV0aGVyYWRkcls0XSwgZWVyZXYuZXRoZXJhZGRyWzVdKTsKKwkgICAgZWVyZXYuZXRoZXJhZGRyWzBdLCBlZXJldi5ldGhlcmFkZHJbMV0sCisJICAgIGVlcmV2LmV0aGVyYWRkclsyXSwgZWVyZXYuZXRoZXJhZGRyWzNdLAorCSAgICBlZXJldi5ldGhlcmFkZHJbNF0sIGVlcmV2LmV0aGVyYWRkcls1XSk7CiAgICAgc2V0ZW52ICgiZXRoYWRkciIsIGJ1Zik7CiAKICAgICAvKiBwcmludCBhY3R1YWwgYm9hcmQgaWRlbnRpZmljYXRpb24gKi8KICAgICBwcmludGYoIklkZW50OiAlcyAgU2VyICVzICBSZXYgJWMlY1xuIiwKLSAgICAgICAgICAgIGVlcmV2LmJvYXJkLCAoY2hhciAqKSZlZXJldi5zZXJpYWwsCi0gICAgICAgICAgICBlZXJldi5yZXZpc2lvblswXVswXSwgZWVyZXYucmV2aXNpb25bMF1bMV0pOworCSAgICBlZXJldi5ib2FyZCwgKGNoYXIgKikmZWVyZXYuc2VyaWFsLAorCSAgICBlZXJldi5yZXZpc2lvblswXVswXSwgZWVyZXYucmV2aXNpb25bMF1bMV0pOwogCiAgICAgLyogZ2xvYmFsIGJvYXJkIGlkZW50ICovCiAgICAgaWYgKHN0cnN0ciAoKGNoYXIgKikmZWVyZXYuYm9hcmQsICI3NSIpICE9IE5VTEwpCi0gICAgICAgIGVsdGVjX2JvYXJkID0gNzUwOworCWVsdGVjX2JvYXJkID0gNzUwOwogICAgIGVsc2UKLSAgICAgICAgZWx0ZWNfYm9hcmQgPSA3NDA7CisJZWx0ZWNfYm9hcmQgPSA3NDA7CiAKICAgIC8qCiAgICAgKiBMMiBjYWNoZSBjb25maWd1cmF0aW9uCkBAIC0zMzcsMTIgKzMzNywxMiBAQAogICAgIHB0ciA9IGdldGVudigibDJjYWNoZSIpOwogICAgIGlmICgqcHRyID09ICcwJykKICAgICB7Ci0gICAgICAgIHByaW50ZiAoIkNhY2hlOiBMMiBOT1QgYWN0aXZhdGVkIG9uIEJBQiVkXG4iLCBlbHRlY19ib2FyZCk7CisJcHJpbnRmICgiQ2FjaGU6IEwyIE5PVCBhY3RpdmF0ZWQgb24gQkFCJWRcbiIsIGVsdGVjX2JvYXJkKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcHJpbnRmICgiQ2FjaGU6IEwyIGFjdGl2YXRlZCBvbiBCQUIlZFxuIiwgZWx0ZWNfYm9hcmQpOwotICAgICAgICBsMl9jYWNoZV9lbmFibGUoKihpbnQqKSZlZXJldi5yZXNbMF0pOworCXByaW50ZiAoIkNhY2hlOiBMMiBhY3RpdmF0ZWQgb24gQkFCJWRcbiIsIGVsdGVjX2JvYXJkKTsKKwlsMl9jYWNoZV9lbmFibGUoKihpbnQqKSZlZXJldi5yZXNbMF0pOwogICAgIH0KICNlbmRpZgogCkBAIC0zNTEsMTIgKzM1MSwxMiBAQAogICAgICovCiAgICAgaWYgKChwdHIgPSBnZXRlbnYgKCJhdGFfcmVzZXRfdGltZSIpKSAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgYXRhX3Jlc2V0X3RpbWUgPSAoaW50KXNpbXBsZV9zdHJ0b3VsIChwdHIsIE5VTEwsIDEwKTsKKwlhdGFfcmVzZXRfdGltZSA9IChpbnQpc2ltcGxlX3N0cnRvdWwgKHB0ciwgTlVMTCwgMTApOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBzcHJpbnRmIChidWYsICIlZCIsIGF0YV9yZXNldF90aW1lKTsKLSAgICAgICAgc2V0ZW52ICgiYXRhX3Jlc2V0X3RpbWUiLCBidWYpOworCXNwcmludGYgKGJ1ZiwgIiVkIiwgYXRhX3Jlc2V0X3RpbWUpOworCXNldGVudiAoImF0YV9yZXNldF90aW1lIiwgYnVmKTsKICAgICB9CiAKICAgIC8qCkBAIC0zNjQsNTUgKzM2NCw1NSBAQAogICAgICovCiAgICAgaWYgKChwdHIgPSBnZXRlbnYgKCJzY3NpX3Jlc2V0X3RpbWUiKSkgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIHNjc2lfcmVzZXRfdGltZSA9IChpbnQpc2ltcGxlX3N0cnRvdWwgKHB0ciwgTlVMTCwgMTApOworCXNjc2lfcmVzZXRfdGltZSA9IChpbnQpc2ltcGxlX3N0cnRvdWwgKHB0ciwgTlVMTCwgMTApOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBzcHJpbnRmIChidWYsICIlZCIsIHNjc2lfcmVzZXRfdGltZSk7Ci0gICAgICAgIHNldGVudiAoInNjc2lfcmVzZXRfdGltZSIsIGJ1Zik7CisJc3ByaW50ZiAoYnVmLCAiJWQiLCBzY3NpX3Jlc2V0X3RpbWUpOworCXNldGVudiAoInNjc2lfcmVzZXRfdGltZSIsIGJ1Zik7CiAgICAgfQogCiAKICAgICBpZiAoKGJkZiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1dJTkJPTkQsIFBDSV9ERVZJQ0VfSURfV0lOQk9ORF84M0M1NTMsIDApKSA+IDApCiAgICAgewotICAgICAgICBpZiAocGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfTkNSLCBQQ0lfREVWSUNFX0lEX05DUl81M0M4NjAsIDApID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgLyogQkFCNzQwIHdpdGggU0NTST1JUlEgMTE7IFNDQz1JUlEgOTsgbm8gSURFOyBOQ1I4NjAgYXQgODAgTWh6ICovCi0gICAgICAgICAgICBzY3NpX2Rldl9pZCA9IFBDSV9ERVZJQ0VfSURfTkNSXzUzQzg2MDsKLSAgICAgICAgICAgIHNjc2lfbWF4X3Njc2lfaWQgPSA3OwotICAgICAgICAgICAgc2NzaV9zeW01M2M4eHhfY2NmID0gMHgxNTsKLSAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfYnl0ZSAoYmRmLCBXSU5CT05EX0lERUlSQ1IsIDB4YjApOwotICAgICAgICB9CisJaWYgKHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX05DUiwgUENJX0RFVklDRV9JRF9OQ1JfNTNDODYwLCAwKSA+IDApCisJeworCSAgICAvKiBCQUI3NDAgd2l0aCBTQ1NJPUlSUSAxMTsgU0NDPUlSUSA5OyBubyBJREU7IE5DUjg2MCBhdCA4MCBNaHogKi8KKwkgICAgc2NzaV9kZXZfaWQgPSBQQ0lfREVWSUNFX0lEX05DUl81M0M4NjA7CisJICAgIHNjc2lfbWF4X3Njc2lfaWQgPSA3OworCSAgICBzY3NpX3N5bTUzYzh4eF9jY2YgPSAweDE1OworCSAgICBwY2lfd3JpdGVfY29uZmlnX2J5dGUgKGJkZiwgV0lOQk9ORF9JREVJUkNSLCAweGIwKTsKKwl9CiAKLSAgICAgICAgaWYgKChwdHIgPSBnZXRlbnYgKCJpZGVfZG1hX29mZiIpKSAhPSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICB1X2xvbmcgZG1hX29mZiA9IHNpbXBsZV9zdHJ0b3VsIChwdHIsIE5VTEwsIDEwKTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAqIHNldHVwIHVzZXIgZGVmaW5lZCByZWdpc3RlcnMKLSAgICAgICAgICAgICogcy5hLiBsaW51eC9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgYmRmIHw9IFBDSV9CREYoMCwwLDEpOyAgICAgICAgICAgIC8qIGlkZSB1c2VyIHJlZyBhdCBiZGYgZnVuY3Rpb24gMSAqLwotICAgICAgICAgICAgaWYgKGRtYV9vZmYgJiAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfYnl0ZSAoYmRmLCAweDQ2LCAxKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIklERTogICBETUEgb2ZmIGZsYWcgc2V0OiBCdXMgMCA6IERldiAwXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChkbWFfb2ZmICYgMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2J5dGUgKGJkZiwgMHg0YSwgMSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJJREU6ICAgRE1BIG9mZiBmbGFnIHNldDogQnVzIDAgOiBEZXYgMVxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZG1hX29mZiAmIDQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChiZGYsIDB4NGUsIDEpOwotICAgICAgICAgICAgICAgIHByaW50ZigiSURFOiAgIERNQSBvZmYgZmxhZyBzZXQ6IEJ1cyAxIDogRGV2IDBcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGRtYV9vZmYgJiA4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfYnl0ZSAoYmRmLCAweDUyLCAxKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIklERTogICBETUEgb2ZmIGZsYWcgc2V0OiBCdXMgMSA6IERldiAxXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmICgocHRyID0gZ2V0ZW52ICgiaWRlX2RtYV9vZmYiKSkgIT0gTlVMTCkKKwl7CisJICAgIHVfbG9uZyBkbWFfb2ZmID0gc2ltcGxlX3N0cnRvdWwgKHB0ciwgTlVMTCwgMTApOworCSAgICAvKgorCSAgICAqIHNldHVwIHVzZXIgZGVmaW5lZCByZWdpc3RlcnMKKwkgICAgKiBzLmEuIGxpbnV4L2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKKwkgICAgKi8KKwkgICAgYmRmIHw9IFBDSV9CREYoMCwwLDEpOyAgICAgICAgICAgIC8qIGlkZSB1c2VyIHJlZyBhdCBiZGYgZnVuY3Rpb24gMSAqLworCSAgICBpZiAoZG1hX29mZiAmIDEpCisJICAgIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChiZGYsIDB4NDYsIDEpOworCQlwcmludGYoIklERTogICBETUEgb2ZmIGZsYWcgc2V0OiBCdXMgMCA6IERldiAwXG4iKTsKKwkgICAgfQorCSAgICBpZiAoZG1hX29mZiAmIDIpCisJICAgIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChiZGYsIDB4NGEsIDEpOworCQlwcmludGYoIklERTogICBETUEgb2ZmIGZsYWcgc2V0OiBCdXMgMCA6IERldiAxXG4iKTsKKwkgICAgfQorCSAgICBpZiAoZG1hX29mZiAmIDQpCisJICAgIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChiZGYsIDB4NGUsIDEpOworCQlwcmludGYoIklERTogICBETUEgb2ZmIGZsYWcgc2V0OiBCdXMgMSA6IERldiAwXG4iKTsKKwkgICAgfQorCSAgICBpZiAoZG1hX29mZiAmIDgpCisJICAgIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlIChiZGYsIDB4NTIsIDEpOworCQlwcmludGYoIklERTogICBETUEgb2ZmIGZsYWcgc2V0OiBCdXMgMSA6IERldiAxXG4iKTsKKwkgICAgfQorCX0KICAgICB9CiAgICAgcmV0dXJuICgwKTsKIH0KQEAgLTQ5OCw0OCArNDk4LDQ4IEBACiAKICAgICBpZiAoZWx0ZWNfYm9hcmQgPT0gNzQwKQogICAgIHsKLSAgICAgICAgcHJpbnRmKCJTWU0gbWVkaWEgc2VsZWN0ICIpOyAvKiBCQUI3NDAgKi8KLSAgICAgICAgLyogc3RhcnQgYXV0b25lZy4gd2l0aCAxMCBtYml0ICovCi0gICAgICAgIG1lZGlhX3JlZ19pbml0IChkZXYsIDB4M2ZmZmYsIDB4MDhhZjAwMDgsIDB4MDBhMTAwMDgsIDB4MDBhNTAwMDgsIDB4MDI0MDAwODApOwotICAgICAgICBleHQgPSBzdGF0dXMgPSAwOwotICAgICAgICBmb3IgKGk9MDsgaTwyMDAwK2V4dDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBJTkwoZGV2LCBERTRYNV9TSVNSKTsKLSAgICAgICAgICAgIHVkZWxheSgxMDAwKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgJiAweDIwMDApIGV4dCA9IDIwMDA7Ci0gICAgICAgICAgICBpZiAoKHN0YXR1cyAmIDB4NzAwMCkgPT0gMHg1MDAwKSBicmVhazsKLSAgICAgICAgfQorCXByaW50ZigiU1lNIG1lZGlhIHNlbGVjdCAiKTsgLyogQkFCNzQwICovCisJLyogc3RhcnQgYXV0b25lZy4gd2l0aCAxMCBtYml0ICovCisJbWVkaWFfcmVnX2luaXQgKGRldiwgMHgzZmZmZiwgMHgwOGFmMDAwOCwgMHgwMGExMDAwOCwgMHgwMGE1MDAwOCwgMHgwMjQwMDA4MCk7CisJZXh0ID0gc3RhdHVzID0gMDsKKwlmb3IgKGk9MDsgaTwyMDAwK2V4dDsgaSsrKQorCXsKKwkgICAgc3RhdHVzID0gSU5MKGRldiwgREU0WDVfU0lTUik7CisJICAgIHVkZWxheSgxMDAwKTsKKwkgICAgaWYgKHN0YXR1cyAmIDB4MjAwMCkgZXh0ID0gMjAwMDsKKwkgICAgaWYgKChzdGF0dXMgJiAweDcwMDApID09IDB4NTAwMCkgYnJlYWs7CisJfQogCi0gICAgICAgIC8qIGF1dG9uZWcuIG9rIC0+IDEwME1CIEZEICovCi0gICAgICAgIGlmICgoc3RhdHVzICYgMHgwMTAwZjAwMCkgPT0gMHgwMTAwZDAwMCkKLSAgICAgICAgewotICAgICAgICAgICAgbWVkaWFfcmVnX2luaXQgKGRldiwgMHgzN2Y3ZiwgMHgwODI3MDAwOCwgMHgwMDIxMDAwOCwgMHgwMDI1MDAwOCwgMHgwM2M0MDI4MCk7Ci0gICAgICAgICAgICBwcmludGYoIjEwMGJhc2VUeC1GRFxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgLyogYXV0b25lZy4gb2sgLT4gMTAwTUIgSEQgKi8KLSAgICAgICAgZWxzZSBpZiAoKHN0YXR1cyAmIDB4MDA4MGYwMDApID09IDB4MDA4MGQwMDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lZGlhX3JlZ19pbml0IChkZXYsIDB4MTdmN2YsIDB4MDgyNzAwMDgsIDB4MDAyMTAwMDgsIDB4MDAyNTAwMDgsIDB4MDNjNDAwODApOwotICAgICAgICAgICAgcHJpbnRmKCIxMDBiYXNlVHhcbiIpOwotICAgICAgICB9Ci0gICAgICAgIC8qIGF1dG9uZWcuIG9rIC0+IDEwTUIgRkQgKi8KLSAgICAgICAgZWxzZSBpZiAoKHN0YXR1cyAmIDB4MDA0MGYwMDApID09IDB4MDA0MGQwMDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lZGlhX3JlZ19pbml0IChkZXYsIDB4MDdmN2YsIDB4MDhhZjAwMDgsIDB4MDBhMTAwMDgsIDB4MDBhNTAwMDgsIDB4MDI0MDAyODApOwotICAgICAgICAgICAgcHJpbnRmKCIxMGJhc2VULUZEXG4iKTsKLSAgICAgICAgfQotICAgICAgICAvKiBhdXRvbmVnLiBmYWlsIC0+IDEwTUIgSEQgKi8KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtZWRpYV9yZWdfaW5pdCAoZGV2LCAweDdmN2YsIDB4MDhhZjAwMDgsIDB4MDBhMTAwMDgsIDB4MDBhNTAwMDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAoT01SX1NEUCB8IE9NUl9UVE0gfCBPTVJfUE0pKTsKLSAgICAgICAgICAgIHByaW50ZigiMTBiYXNlVFxuIik7Ci0gICAgICAgIH0KKwkvKiBhdXRvbmVnLiBvayAtPiAxMDBNQiBGRCAqLworCWlmICgoc3RhdHVzICYgMHgwMTAwZjAwMCkgPT0gMHgwMTAwZDAwMCkKKwl7CisJICAgIG1lZGlhX3JlZ19pbml0IChkZXYsIDB4MzdmN2YsIDB4MDgyNzAwMDgsIDB4MDAyMTAwMDgsIDB4MDAyNTAwMDgsIDB4MDNjNDAyODApOworCSAgICBwcmludGYoIjEwMGJhc2VUeC1GRFxuIik7CisJfQorCS8qIGF1dG9uZWcuIG9rIC0+IDEwME1CIEhEICovCisJZWxzZSBpZiAoKHN0YXR1cyAmIDB4MDA4MGYwMDApID09IDB4MDA4MGQwMDApCisJeworCSAgICBtZWRpYV9yZWdfaW5pdCAoZGV2LCAweDE3ZjdmLCAweDA4MjcwMDA4LCAweDAwMjEwMDA4LCAweDAwMjUwMDA4LCAweDAzYzQwMDgwKTsKKwkgICAgcHJpbnRmKCIxMDBiYXNlVHhcbiIpOworCX0KKwkvKiBhdXRvbmVnLiBvayAtPiAxME1CIEZEICovCisJZWxzZSBpZiAoKHN0YXR1cyAmIDB4MDA0MGYwMDApID09IDB4MDA0MGQwMDApCisJeworCSAgICBtZWRpYV9yZWdfaW5pdCAoZGV2LCAweDA3ZjdmLCAweDA4YWYwMDA4LCAweDAwYTEwMDA4LCAweDAwYTUwMDA4LCAweDAyNDAwMjgwKTsKKwkgICAgcHJpbnRmKCIxMGJhc2VULUZEXG4iKTsKKwl9CisJLyogYXV0b25lZy4gZmFpbCAtPiAxME1CIEhEICovCisJZWxzZQorCXsKKwkgICAgbWVkaWFfcmVnX2luaXQgKGRldiwgMHg3ZjdmLCAweDA4YWYwMDA4LCAweDAwYTEwMDA4LCAweDAwYTUwMDA4LAorCQkJKE9NUl9TRFAgfCBPTVJfVFRNIHwgT01SX1BNKSk7CisJICAgIHByaW50ZigiMTBiYXNlVFxuIik7CisJfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBwcmludGYoIk1JSSBtZWRpYSBzZWxlY3RlZFxuIik7ICAgICAgICAgICAgICAgICAgICAgLyogQkFCNzUwICovCi0gICAgICAgIE9VVEwoZGV2LCBPTVJfU0RQIHwgT01SX1BTIHwgT01SX1BNLCBERTRYNV9PTVIpOyAgICAvKiBDU1I2ICovCisJcHJpbnRmKCJNSUkgbWVkaWEgc2VsZWN0ZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgIC8qIEJBQjc1MCAqLworCU9VVEwoZGV2LCBPTVJfU0RQIHwgT01SX1BTIHwgT01SX1BNLCBERTRYNV9PTVIpOyAgICAvKiBDU1I2ICovCiAgICAgfQogfQogI2VuZGlmIC8qIENPTkZJR19UVUxJUF9TRUxFQ1RfTUVESUEgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2JhYjd4eC9wY2kuYyBiL2JvYXJkL2VsdGVjL2JhYjd4eC9wY2kuYwppbmRleCBhNWZjZmVmLi5lZGJkM2RkIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9iYWI3eHgvcGNpLmMKKysrIGIvYm9hcmQvZWx0ZWMvYmFiN3h4L3BjaS5jCkBAIC00Myw0OCArNDMsNDggQEAKICAgICBob3NlLT5sYXN0X2J1c25vID0gMHhmZjsKIAogICAgIHBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAwLAotICAgICAgICBDRkdfUENJX01FTU9SWV9CVVMsCi0gICAgICAgIENGR19QQ0lfTUVNT1JZX1BIWVMsCisJQ0ZHX1BDSV9NRU1PUllfQlVTLAorCUNGR19QQ0lfTUVNT1JZX1BIWVMsCiAgICAgLyoKICAgICAqIEF0dGVudGlvbjogcGNpX2hvc2VfcGh5c190b19idXMoKSBmYWlsZXMgaW4gYWRkcmVzcyBjb21wYXJlLAogICAgICogc28gd2UgbmVlZCAoQ0ZHX1BDSV9NRU1PUllfU0laRS0xKQogICAgICovCi0gICAgICAgIENGR19QQ0lfTUVNT1JZX1NJWkUtMSwKLSAgICAgICAgUENJX1JFR0lPTl9NRU0gfCBQQ0lfUkVHSU9OX01FTU9SWSk7CisJQ0ZHX1BDSV9NRU1PUllfU0laRS0xLAorCVBDSV9SRUdJT05fTUVNIHwgUENJX1JFR0lPTl9NRU1PUlkpOwogCiAgICAgLyogUENJIG1lbW9yeSBzcGFjZSAqLwogICAgIHBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAxLAotICAgICAgICBDRkdfUENJX01FTV9CVVMsCi0gICAgICAgIENGR19QQ0lfTUVNX1BIWVMsCi0gICAgICAgIENGR19QQ0lfTUVNX1NJWkUsCi0gICAgICAgIFBDSV9SRUdJT05fTUVNKTsKKwlDRkdfUENJX01FTV9CVVMsCisJQ0ZHX1BDSV9NRU1fUEhZUywKKwlDRkdfUENJX01FTV9TSVpFLAorCVBDSV9SRUdJT05fTUVNKTsKIAogICAgIC8qIElTQS9QQ0kgbWVtb3J5IHNwYWNlICovCiAgICAgcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDIsCi0gICAgICAgIENGR19JU0FfTUVNX0JVUywKLSAgICAgICAgQ0ZHX0lTQV9NRU1fUEhZUywKLSAgICAgICAgQ0ZHX0lTQV9NRU1fU0laRSwKLSAgICAgICAgUENJX1JFR0lPTl9NRU0pOworCUNGR19JU0FfTUVNX0JVUywKKwlDRkdfSVNBX01FTV9QSFlTLAorCUNGR19JU0FfTUVNX1NJWkUsCisJUENJX1JFR0lPTl9NRU0pOwogCiAgICAgLyogUENJIEkvTyBzcGFjZSAqLwogICAgIHBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAzLAotICAgICAgICBDRkdfUENJX0lPX0JVUywKLSAgICAgICAgQ0ZHX1BDSV9JT19QSFlTLAotICAgICAgICBDRkdfUENJX0lPX1NJWkUsCi0gICAgICAgIFBDSV9SRUdJT05fSU8pOworCUNGR19QQ0lfSU9fQlVTLAorCUNGR19QQ0lfSU9fUEhZUywKKwlDRkdfUENJX0lPX1NJWkUsCisJUENJX1JFR0lPTl9JTyk7CiAKICAgICAvKiBJU0EvUENJIEkvTyBzcGFjZSAqLwogICAgIHBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyA0LAotICAgICAgICBDRkdfSVNBX0lPX0JVUywKLSAgICAgICAgQ0ZHX0lTQV9JT19QSFlTLAotICAgICAgICBDRkdfSVNBX0lPX1NJWkUsCi0gICAgICAgIFBDSV9SRUdJT05fSU8pOworCUNGR19JU0FfSU9fQlVTLAorCUNGR19JU0FfSU9fUEhZUywKKwlDRkdfSVNBX0lPX1NJWkUsCisJUENJX1JFR0lPTl9JTyk7CiAKICAgICBob3NlLT5yZWdpb25fY291bnQgPSA1OwogCiAgICAgcGNpX3NldHVwX2luZGlyZWN0KGhvc2UsCi0gICAgICAgIE1QQzEwNl9SRUdfQUREUiwKLSAgICAgICAgTVBDMTA2X1JFR19EQVRBKTsKKwlNUEMxMDZfUkVHX0FERFIsCisJTVBDMTA2X1JFR19EQVRBKTsKIAogICAgIHBjaV9yZWdpc3Rlcl9ob3NlKGhvc2UpOwogCkBAIC05Myw5ICs5Myw5IEBACiAgICAgLyogSW5pdGlhbGlzZXMgdGhlIE1QQzEweCBQQ0kgQ29uZmlndXJhdGlvbiByZWdzLiAqLwogICAgIHBjaV9yZWFkX2NvbmZpZ19kd29yZCAoUENJX0JERigwLDAsMCksIFBDSV9QSUNSMiwgJnJlZzMyKTsKICAgICByZWczMiB8PSBQSUNSMl9DRl9TTk9PUF9XUygzKSB8Ci0gICAgICAgICAgICAgUElDUjJfQ0ZfRkxVU0hfTDIgfAotICAgICAgICAgICAgIFBJQ1IyX0NGX0wyX0hJVF9ERUxBWSgzKSB8Ci0gICAgICAgICAgICAgUElDUjJfQ0ZfQVBIQVNFX1dTKDMpOworCSAgICAgUElDUjJfQ0ZfRkxVU0hfTDIgfAorCSAgICAgUElDUjJfQ0ZfTDJfSElUX0RFTEFZKDMpIHwKKwkgICAgIFBJQ1IyX0NGX0FQSEFTRV9XUygzKTsKICAgICByZWczMiAmPSB+KFBJQ1IyX0wyX0VOIHwgUElDUjJfTDJfVVBEQVRFX0VOKTsKICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkIChQQ0lfQkRGKDAsMCwwKSwgUENJX1BJQ1IyLCByZWczMik7CiAKQEAgLTEwOCwxMiArMTA4LDEyIEBACiAKICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQgKFBDSV9CREYoMCwwLDApLCBQQ0lfUElDUjEsICZyZWczMik7CiAgICAgcmVnMzIgfD0gUElDUjFfQ0ZfQ0JBKDYzKSB8Ci0gICAgICAgICAgICAgUElDUjFfQ0ZfQlJFQURfV1MoMikgfAotICAgICAgICAgICAgIFBJQ1IxX01DUF9FTiB8Ci0gICAgICAgICAgICAgUElDUjFfQ0ZfRFBBUksgfAotICAgICAgICAgICAgIFBJQ1IxX1BST0NfVFlQRV82MDQgfAotICAgICAgICAgICAgIFBJQ1IxX0NGX0xPT1BfU05PT1AgfAotICAgICAgICAgICAgIFBJQ1IxX0NGX0FQQVJLOworCSAgICAgUElDUjFfQ0ZfQlJFQURfV1MoMikgfAorCSAgICAgUElDUjFfTUNQX0VOIHwKKwkgICAgIFBJQ1IxX0NGX0RQQVJLIHwKKwkgICAgIFBJQ1IxX1BST0NfVFlQRV82MDQgfAorCSAgICAgUElDUjFfQ0ZfTE9PUF9TTk9PUCB8CisJICAgICBQSUNSMV9DRl9BUEFSSzsKICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkIChQQ0lfQkRGKDAsMCwwKSwgUENJX1BJQ1IxLCByZWczMik7CiB9CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2JhYjd4eC9zcm9tLmggYi9ib2FyZC9lbHRlYy9iYWI3eHgvc3JvbS5oCmluZGV4IDc5MjRiY2QuLmMxOGFiOTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL2JhYjd4eC9zcm9tLmgKKysrIGIvYm9hcmQvZWx0ZWMvYmFiN3h4L3Nyb20uaApAQCAtODEsMTggKzgxLDE4IEBACiAKIHVuc2lnbmVkIGxvbmcgZWxfc3JvbV9jaGVja3N1bSAodW5zaWduZWQgY2hhciAqcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpOwogaW50IGVsX3Nyb21fbG9hZCAgKHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY250LAotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJsb2NrKTsKKwkJICAgdW5zaWduZWQgY2hhciBkZXZpY2UsIHVuc2lnbmVkIGNoYXIgYmxvY2spOwogaW50IGVsX3Nyb21fc3RvcmUgKHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY250LAotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJsb2NrKTsKKwkJICAgdW5zaWduZWQgY2hhciBkZXZpY2UsIHVuc2lnbmVkIGNoYXIgYmxvY2spOwogCiBpbnQgbXBjMTA3X2kyY19pbml0ICh1bnNpZ25lZCBsb25nIGV1bWJfYWRkciwgdW5zaWduZWQgbG9uZyBkaXZpZGVyKTsKIGludCBtcGMxMDdfaTJjX3JlYWRfYnl0ZSAodW5zaWduZWQgY2hhciBkZXZpY2UsIHVuc2lnbmVkIGNoYXIgYmxvY2ssIHVuc2lnbmVkIGNoYXIgb2Zmc2V0KTsKIGludCBtcGMxMDdfaTJjX3dyaXRlX2J5dGUgKHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgdmFsKTsKKwkJCSAgIHVuc2lnbmVkIGNoYXIgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyIHZhbCk7CiBpbnQgbXBjMTA3X3Nyb21fbG9hZCAodW5zaWduZWQgY2hhciBhZGRyLCB1bnNpZ25lZCBjaGFyICpwQnVmLCBpbnQgY250LAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJsb2NrKTsKKwkJICAgICAgdW5zaWduZWQgY2hhciBkZXZpY2UsIHVuc2lnbmVkIGNoYXIgYmxvY2spOwogaW50IG1wYzEwN19zcm9tX3N0b3JlICh1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGNoYXIgKnBCdWYsIGludCBjbnQsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJsb2NrKTsKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJsb2NrKTsKIAogaW50IGRjX3Nyb21fbG9hZCAodW5zaWduZWQgc2hvcnQgKmRlc3QpOwogaW50IGRjX3Nyb21fc3RvcmUgKHVuc2lnbmVkIHNob3J0ICpzcmMpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZWx0ZWMvYmFiN3h4L3UtYm9vdC5sZHMgYi9ib2FyZC9lbHRlYy9iYWI3eHgvdS1ib290LmxkcwppbmRleCBkZTUwYmY0Li4wZGZhOGMwIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9iYWI3eHgvdS1ib290LmxkcworKysgYi9ib2FyZC9lbHRlYy9iYWI3eHgvdS1ib290LmxkcwpAQCAtMTA2LDYgKzEwNiwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZWx0ZWMvZWxwcGMvTWFrZWZpbGUgYi9ib2FyZC9lbHRlYy9lbHBwYy9NYWtlZmlsZQppbmRleCAxZWQxYTI0Li43NmIyY2ZlIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9lbHBwYy9NYWtlZmlsZQorKysgYi9ib2FyZC9lbHRlYy9lbHBwYy9NYWtlZmlsZQpAQCAtMzAsNyArMzAsNyBAQAogU09CSlMJPSBhc21faW5pdC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKQEAgLTQ2LDEyICs0NiwzIEBACiBzaW5jbHVkZSAuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotCi0KLQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2VscHBjL2VlcHJvMTAwX3Nyb20uYyBiL2JvYXJkL2VsdGVjL2VscHBjL2VlcHJvMTAwX3Nyb20uYwppbmRleCBhNWU0N2NmLi45NzU0YzFkIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9lbHBwYy9lZXBybzEwMF9zcm9tLmMKKysrIGIvYm9hcmQvZWx0ZWMvZWxwcGMvZWVwcm8xMDBfc3JvbS5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAic3JvbS5oIgogCiBleHRlcm4gaW50IGVlcHJvMTAwX3dyaXRlX2VlcHJvbSAoc3RydWN0IGV0aF9kZXZpY2UqIGRldiwKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvY2F0aW9uLCBpbnQgYWRkcl9sZW4sIHVuc2lnbmVkIHNob3J0IGRhdGEpOworCQkgICAgaW50IGxvY2F0aW9uLCBpbnQgYWRkcl9sZW4sIHVuc2lnbmVkIHNob3J0IGRhdGEpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgKEVFX1NJWkUtMSk7IGkrKykKICAgICB7Ci0gICAgICAgIHN1bSArPSBzcm9tZGF0YVtpXTsKKwlzdW0gKz0gc3JvbWRhdGFbaV07CiAgICAgfQogICAgIHJldHVybiAoRUVfQ0hFQ0tTVU0gLSBzdW0pOwogfQpAQCAtNTcsNyArNTcsNyBAQAogCiAgICAgLyogZ2V0IG9uYm9hcmQgbmV0d29yayBpb2Jhc2UgKi8KICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoUENJX0JERigwLDB4MTAsMCksIFBDSV9CQVNFX0FERFJFU1NfMCwKLSAgICAgICAgICAgICAgICAgJm9uYm9hcmRfZGV2LmlvYmFzZSk7CisJCSAmb25ib2FyZF9kZXYuaW9iYXNlKTsKICAgICBvbmJvYXJkX2Rldi5pb2Jhc2UgJj0gfjB4ZjsKIAogICAgIHNvdXJjZVs2M10gPSBlZXBybzEwMF9zcm9tX2NoZWNrc3VtIChzb3VyY2UpOwpAQCAtNjUsOCArNjUsOCBAQAogICAgIGZvciAoY291bnQ9MDsgY291bnQgPCBFRV9TSVpFOyBjb3VudCsrKQogICAgIHsKICAgICBpZiAoIGVlcHJvMTAwX3dyaXRlX2VlcHJvbSAoKHN0cnVjdCBldGhfZGV2aWNlKikmb25ib2FyZF9kZXYsCi0gICAgICAgICAgICAgY291bnQsIEVFX0FERFJfQklUUywgU1JPTV9TSE9SVChzb3VyY2UpKSA9PSAtMSApCi0gICAgICAgIHJldHVybiAtMTsKKwkgICAgIGNvdW50LCBFRV9BRERSX0JJVFMsIFNST01fU0hPUlQoc291cmNlKSkgPT0gLTEgKQorCXJldHVybiAtMTsKICAgICBzb3VyY2UrKzsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC04OSwyMiArODksMjIgQEAKIAogICAgIC8qIGdldCBvbmJvYXJkIG5ldHdvcmsgaW9iYXNlICovCiAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKFBDSV9CREYoMCwweDEwLDApLCBQQ0lfQkFTRV9BRERSRVNTXzAsCi0gICAgICAgICAgICAgICAgICZvbmJvYXJkX2Rldi5pb2Jhc2UpOworCQkgJm9uYm9hcmRfZGV2LmlvYmFzZSk7CiAgICAgb25ib2FyZF9kZXYuaW9iYXNlICY9IH4weGY7CiAKICAgICBtZW1zZXQgKGRlc3RpbmF0aW9uLCAweDY1LCAxMjgpOwogCiAgICAgZm9yIChjb3VudD0wOyBjb3VudCA8IDB4NDA7IGNvdW50KyspCiAgICAgewotICAgICAgICAqZGVzdGluYXRpb24rKyA9IHJlYWRfZWVwcm9tIChzdHJ1Y3QgZXRoX2RldmljZSopJm9uYm9hcmRfZGV2LAotICAgICAgICAgICAgICAgICBjb3VudCwgRUVfQUREUl9CSVRTKTsKKwkqZGVzdGluYXRpb24rKyA9IHJlYWRfZWVwcm9tIChzdHJ1Y3QgZXRoX2RldmljZSopJm9uYm9hcmRfZGV2LAorCQkgY291bnQsIEVFX0FERFJfQklUUyk7CiAjaWZkZWYgREVCVUcKLSAgICAgICAgcHJpbnRmICgiJTA0eCAiLCAqKGRlc3RpbmF0aW9uIC0gMSkpOwotICAgICAgICBpZiAobHIrKyA9PSA3KQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgICAgICBsciA9IDA7Ci0gICAgICAgIH0KKwlwcmludGYgKCIlMDR4ICIsICooZGVzdGluYXRpb24gLSAxKSk7CisJaWYgKGxyKysgPT0gNykKKwl7CisJICAgIHByaW50ZigiXG4iKTsKKwkgICAgbHIgPSAwOworCX0KICNlbmRpZgogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2VscHBjL2VscHBjLmMgYi9ib2FyZC9lbHRlYy9lbHBwYy9lbHBwYy5jCmluZGV4IDk3YjcwYTQuLjdiNGQ3ZDIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL2VscHBjL2VscHBjLmMKKysrIGIvYm9hcmQvZWx0ZWMvZWxwcGMvZWxwcGMuYwpAQCAtMzAsODIgKzMwLDgxIEBACiAKIGludCBjaGVja2JvYXJkICh2b2lkKQogewotICAgIHB1dHMgKCJCb2FyZDogRUxURUMgUG93ZXJQQ1xuIik7Ci0gICAgcmV0dXJuICgwKTsKKwlwdXRzICgiQm9hcmQ6IEVMVEVDIFBvd2VyUENcbiIpOworCXJldHVybiAoMCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogaW50IGNoZWNrZmxhc2ggKHZvaWQpCiB7Ci0gICAgLyogVE9ETyAqLwotICAgIHByaW50ZiAoIlRlc3Qgbm90IGltcGxlbWVudGVkICFcbiIpOwotICAgIHJldHVybiAoMCk7CisJLyogVE9ETyAqLworCXByaW50ZiAoIlRlc3Qgbm90IGltcGxlbWVudGVkICFcbiIpOworCXJldHVybiAoMCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBtcGMxMDZfcmVhZF9jZmdfZHdvcmQgKHVuc2lnbmVkIGludCByZWcpCiB7Ci0gICAgdW5zaWduZWQgaW50IHJlZ19hZGRyID0gTVBDMTA2X1JFRyB8IChyZWcgJiAweEZGRkZGRkZDKTsKKwl1bnNpZ25lZCBpbnQgcmVnX2FkZHIgPSBNUEMxMDZfUkVHIHwgKHJlZyAmIDB4RkZGRkZGRkMpOwogCi0gICAgb3V0MzJyKE1QQzEwNl9SRUdfQUREUiwgcmVnX2FkZHIpOworCW91dDMyciAoTVBDMTA2X1JFR19BRERSLCByZWdfYWRkcik7CiAKLSAgICByZXR1cm4gKGluMzJyKE1QQzEwNl9SRUdfREFUQSB8IChyZWcgJiAweDMpKSk7CisJcmV0dXJuIChpbjMyciAoTVBDMTA2X1JFR19EQVRBIHwgKHJlZyAmIDB4MykpKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBsb25nIGludCBkcmFtX3NpemUgKGludCBib2FyZF90eXBlKQogewotICAgIC8qCi0gICAgKiBObyBhY3R1YWwgaW5pdGlhbGlzYXRpb24gdG8gZG8gLSBkb25lIHdoZW4gc2V0dGluZyB1cAotICAgICogUElDUnMgTUNDUnMgTUUvU0FScyBldGMgaW4gYXNtX2luaXQuUy4KLSAgICAqLworCS8qCisJICogTm8gYWN0dWFsIGluaXRpYWxpc2F0aW9uIHRvIGRvIC0gZG9uZSB3aGVuIHNldHRpbmcgdXAKKwkgKiBQSUNScyBNQ0NScyBNRS9TQVJzIGV0YyBpbiBhc21faW5pdC5TLgorCSAqLwogCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpLCBtc2FyMSwgbWVhcjEsIG1lbVNpemU7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpLCBtc2FyMSwgbWVhcjEsIG1lbVNpemU7CiAKICNpZiBkZWZpbmVkKENGR19NRU1URVNUKQotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnOwogCi0gICAgcHJpbnRmKCJUZXN0aW5nIERSQU1cbiIpOworCXByaW50ZiAoIlRlc3RpbmcgRFJBTVxuIik7CiAKLSAgICAvKiB3cml0ZSBlYWNoIG1lbSBhZGRyIHdpdGggaXQncyBhZGRyZXNzICovCi0gICAgZm9yIChyZWcgPSBDRkdfTUVNVEVTVF9TVEFSVDsgcmVnIDwgQ0ZHX01FTVRFU1RfRU5EOyByZWcrPTQpCi0gICAgICAgICpyZWcgPSByZWc7CisJLyogd3JpdGUgZWFjaCBtZW0gYWRkciB3aXRoIGl0J3MgYWRkcmVzcyAqLworCWZvciAocmVnID0gQ0ZHX01FTVRFU1RfU1RBUlQ7IHJlZyA8IENGR19NRU1URVNUX0VORDsgcmVnICs9IDQpCisJCSpyZWcgPSByZWc7CiAKLSAgICBmb3IgKHJlZyA9IENGR19NRU1URVNUX1NUQVJUOyByZWcgPCBDRkdfTUVNVEVTVF9FTkQ7IHJlZys9NCkKLSAgICB7Ci0gICAgICAgIGlmICgqcmVnICE9IHJlZykKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwlmb3IgKHJlZyA9IENGR19NRU1URVNUX1NUQVJUOyByZWcgPCBDRkdfTUVNVEVTVF9FTkQ7IHJlZyArPSA0KSB7CisJCWlmICgqcmVnICE9IHJlZykKKwkJCXJldHVybiAtMTsKKwl9CiAjZW5kaWYKIAotICAgIC8qCi0gICAgKiBTaW5jZSBNUEMxMDcgbWVtb3J5IGNvbnRyb2xsZXIgY2hpcCBoYXMgYWxyZWFkeSBiZWVuIHNldCB0bwotICAgICogY29udHJvbCBhbGwgbWVtb3J5LCBqdXN0IHJlYWQgYW5kIGludGVycHJldCBpdHMgbWVtb3J5IGJvdW5kZXJ5IHJlZ2lzdGVyLgotICAgICovCi0gICAgbWVtU2l6ZSA9IDA7Ci0gICAgbXNhcjEgPSBtcGMxMDZfcmVhZF9jZmdfZHdvcmQoTVBDMTA2X01TQVIxKTsKLSAgICBtZWFyMSA9IG1wYzEwNl9yZWFkX2NmZ19kd29yZChNUEMxMDZfTUVBUjEpOwotICAgIGkgICAgID0gbXBjMTA2X3JlYWRfY2ZnX2R3b3JkKE1QQzEwNl9NQkVSKSAmIDB4ZjsKKwkvKgorCSAqIFNpbmNlIE1QQzEwNyBtZW1vcnkgY29udHJvbGxlciBjaGlwIGhhcyBhbHJlYWR5IGJlZW4gc2V0IHRvCisJICogY29udHJvbCBhbGwgbWVtb3J5LCBqdXN0IHJlYWQgYW5kIGludGVycHJldCBpdHMgbWVtb3J5IGJvdW5kZXJ5IHJlZ2lzdGVyLgorCSAqLworCW1lbVNpemUgPSAwOworCW1zYXIxID0gbXBjMTA2X3JlYWRfY2ZnX2R3b3JkIChNUEMxMDZfTVNBUjEpOworCW1lYXIxID0gbXBjMTA2X3JlYWRfY2ZnX2R3b3JkIChNUEMxMDZfTUVBUjEpOworCWkgPSBtcGMxMDZfcmVhZF9jZmdfZHdvcmQgKE1QQzEwNl9NQkVSKSAmIDB4ZjsKIAotICAgIGRvCi0gICAgewotICAgICAgICBpZiAoaSAmIDB4MDEpICAgLyogaXMgYmFuayBlbmFibGVkID8gKi8KLSAgICAgICAgICAgIG1lbVNpemUgKz0gKG1lYXIxICYgMHhmZikgLSAobXNhcjEgJiAweGZmKSArIDE7Ci0gICAgICAgIG1zYXIxID4+PSA4OwotICAgICAgICBtZWFyMSA+Pj0gODsKLSAgICAgICAgaSAgICAgPj49IDE7Ci0gICAgfSB3aGlsZSAoaSk7CisJZG8geworCQlpZiAoaSAmIDB4MDEpCQkJLyogaXMgYmFuayBlbmFibGVkID8gKi8KKwkJCW1lbVNpemUgKz0gKG1lYXIxICYgMHhmZikgLSAobXNhcjEgJiAweGZmKSArIDE7CisJCW1zYXIxID4+PSA4OworCQltZWFyMSA+Pj0gODsKKwkJaSA+Pj0gMTsKKwl9IHdoaWxlIChpKTsKIAotICAgIHJldHVybiAobWVtU2l6ZSAqIDB4MTAwMDAwKTsKKwlyZXR1cm4gKG1lbVNpemUgKiAweDEwMDAwMCk7CiB9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotbG9uZyBpbnQgaW5pdGRyYW0oaW50IGJvYXJkX3R5cGUpCitsb25nIGludCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCiB7Ci0gICAgcmV0dXJuIGRyYW1fc2l6ZShib2FyZF90eXBlKTsKKwlyZXR1cm4gZHJhbV9zaXplIChib2FyZF90eXBlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTE1LDkgKzExNCwxMCBAQAogICogUmVnaXN0ZXIgUEkgaW4gdGhlIE1QQyAxMDcgKGF0IG9mZnNldCAweDQxMDkwIG9mIHRoZSBFbWJlZGRlZCBVdGlsaXRpZXMKICAqIE1lbW9yeSBCbG9jaykuCiAgKi8KLXZvaWQgZG9fcmVzZXQgKGNtZF90YmxfdCAqY21kdHAsIGJkX3QgKmJkLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2ludCBkb19yZXNldCAoY21kX3RibF90ICogY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotICAgIG91dDgoTVBDMTA3X0VVTUJfUEksIDEpOworCW91dDggKE1QQzEwN19FVU1CX1BJLCAxKTsKKwlyZXR1cm4gKDApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMjgsMjEgKzEyOCwyMSBAQAogICogU2luY2UgdGhlIDd4eCBDUFVzIGRvbid0IGhhdmUgYW4gaW50ZXJuYWwgd2F0Y2hkb2csIHRoaXMgZnVuY3Rpb24gaXMKICAqIGJvYXJkIHNwZWNpZmljLgogICovCi12b2lkIHdhdGNoZG9nX3Jlc2V0KHZvaWQpCit2b2lkIHdhdGNoZG9nX3Jlc2V0ICh2b2lkKQogewogfQotI2VuZGlmICAgIC8qIENPTkZJR19XQVRDSERPRyAqLworI2VuZGlmCQkJCQkJCS8qIENPTkZJR19XQVRDSERPRyAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHZvaWQgYWZ0ZXJfcmVsb2MgKHVsb25nIGRlc3RfYWRkcikKIHsKLSAgICBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAotICAgIC8qCi0gICAgICogSnVtcCB0byB0aGUgbWFpbiBVLUJvb3QgYm9hcmQgaW5pdCBjb2RlCi0gICAgICovCi0gICAgYm9hcmRfaW5pdF9yKGdkLCBkZXN0X2FkZHIpOworCS8qCisJICogSnVtcCB0byB0aGUgbWFpbiBVLUJvb3QgYm9hcmQgaW5pdCBjb2RlCisJICovCisJYm9hcmRfaW5pdF9yIChnZCwgZGVzdF9hZGRyKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTUyLDM4ICsxNTIsMjMgQEAKIAogdm9pZCB2aWRlb19nZXRfaW5mb19zdHIgKGludCBsaW5lX251bWJlciwgY2hhciAqaW5mbykKIHsKLSAgICAvKiBpbml0IHZpZGVvIGluZm8gc3RyaW5ncyBmb3IgZ3JhcGhpYyBjb25zb2xlICovCi0gICAgc3dpdGNoIChsaW5lX251bWJlcikKLSAgICB7Ci0gICAgY2FzZSAxOgotICAgICAgICBzcHJpbnRmIChpbmZvLCIgTVBDN3h4IFYlZC4lZCBhdCAlZCAvICVkIE1IeiIsCi0gICAgICAgICAgICAoZ2V0X3B2cigpID4+IDgpICYgMHhGRiwKLSAgICAgICAgICAgIGdldF9wdnIoKSAmIDB4RkYsCi0gICAgICAgICAgICA0MDAsCi0gICAgICAgICAgICAxMDApOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSAyOgotICAgICAgICBzcHJpbnRmIChpbmZvLCAiIEVMVEVDIEVMUFBDIHdpdGggJWxkIE1CIERSQU0gYW5kICVsZCBNQiBGTEFTSCIsCi0gICAgICAgICAgICBkcmFtX3NpemUoMCkvMHgxMDAwMDAsCi0gICAgICAgICAgICBmbGFzaF9pbml0KCkvMHgxMDAwMDApOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSAzOgotICAgICAgICBzcHJpbnRmIChpbmZvLCAiICVzIiwgc21pLm1vZGVJZGVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJLyogaW5pdCB2aWRlbyBpbmZvIHN0cmluZ3MgZm9yIGdyYXBoaWMgY29uc29sZSAqLworCXN3aXRjaCAobGluZV9udW1iZXIpIHsKKwljYXNlIDE6CisJCXNwcmludGYgKGluZm8sICIgTVBDN3h4IFYlZC4lZCBhdCAlZCAvICVkIE1IeiIsCisJCQkJIChnZXRfcHZyICgpID4+IDgpICYgMHhGRiwgZ2V0X3B2ciAoKSAmIDB4RkYsIDQwMCwgMTAwKTsKKwkJcmV0dXJuOworCWNhc2UgMjoKKwkJc3ByaW50ZiAoaW5mbywgIiBFTFRFQyBFTFBQQyB3aXRoICVsZCBNQiBEUkFNIGFuZCAlbGQgTUIgRkxBU0giLAorCQkJCSBkcmFtX3NpemUgKDApIC8gMHgxMDAwMDAsIGZsYXNoX2luaXQgKCkgLyAweDEwMDAwMCk7CisJCXJldHVybjsKKwljYXNlIDM6CisJCXNwcmludGYgKGluZm8sICIgJXMiLCBzbWkubW9kZUlkZW50KTsKKwkJcmV0dXJuOworCX0KIAotICAgIC8qIG5vIG1vcmUgaW5mbyBsaW5lcyAqLwotICAgICppbmZvID0gMDsKLSAgICByZXR1cm47CisJLyogbm8gbW9yZSBpbmZvIGxpbmVzICovCisJKmluZm8gPSAwOworCXJldHVybjsKIH0KICNlbmRpZgotCi0KLQotCi0KLQotCi0KLQotCmRpZmYgLS1naXQgYS9ib2FyZC9lbHRlYy9lbHBwYy9mbGFzaC5jIGIvYm9hcmQvZWx0ZWMvZWxwcGMvZmxhc2guYwppbmRleCA3MzQ5NmExLi40NDJkZDAwIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9lbHBwYy9mbGFzaC5jCisrKyBiL2JvYXJkL2VsdGVjL2VscHBjL2ZsYXNoLmMKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCiAgICAgZm9yIChpPTA7IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKQogICAgIHsKLSAgICAgICAgZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CiAgICAgfQogCiAgICAgLyogaW5pdGlhbGlzZSAxc3QgZmxhc2ggKi8KQEAgLTY1LDggKzY1LDggQEAKIAogICAgIGlmIChmbGFzaF9pbmZvWzBdLmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pCiAgICAgewotICAgICAgICBwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgMCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAotICAgICAgICAgICAgc2l6ZTEsIHNpemUxPDwyMCk7CisJcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rIDAgLSBTaXplID0gMHglMDhseCA9ICVsZCBNQlxuIiwKKwkgICAgc2l6ZTEsIHNpemUxPDwyMCk7CiAgICAgfQogCiAgICAgLyogaW5pdGlhbGlzZSAybmQgZmxhc2ggKi8KQEAgLTc0LDMxICs3NCwzMSBAQAogCiAgICAgaWYgKGZsYXNoX2luZm9bMV0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikKICAgICB7Ci0gICAgICAgIHByaW50ZiAoIiMjIFVua25vd24gRkxBU0ggb24gQmFuayAxIC0gU2l6ZSA9IDB4JTA4bHggPSAlbGQgTUJcbiIsCi0gICAgICAgICAgICBzaXplMiwgc2l6ZTI8PDIwKTsKKwlwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgMSAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAorCSAgICBzaXplMiwgc2l6ZTI8PDIwKTsKICAgICB9CiAKICAgICAvKiBtb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwogICAgIGlmIChzaXplMSA9PSA1MTIqMTAyNCkKICAgICB7Ci0gICAgICAgICh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgICBGTEFTSF9CQVNFMF9QUkVMSU0sCi0gICAgICAgICAgICAgICAgRkxBU0hfQkFTRTBfUFJFTElNK21vbml0b3JfZmxhc2hfbGVuLTEsCi0gICAgICAgICAgICAgICAgJmZsYXNoX2luZm9bMF0pOworCSh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKwkJRkxBU0hfQkFTRTBfUFJFTElNLAorCQlGTEFTSF9CQVNFMF9QUkVMSU0rbW9uaXRvcl9mbGFzaF9sZW4tMSwKKwkJJmZsYXNoX2luZm9bMF0pOwogICAgIH0KICAgICBpZiAoc2l6ZTIgPT0gNTEyKjEwMjQpCiAgICAgewotICAgICAgICAodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0gICAgICAgICAgICAgICAgRkxBU0hfQkFTRTFfUFJFTElNLAotICAgICAgICAgICAgICAgIEZMQVNIX0JBU0UxX1BSRUxJTSttb25pdG9yX2ZsYXNoX2xlbi0xLAotICAgICAgICAgICAgICAgICZmbGFzaF9pbmZvWzFdKTsKKwkodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCUZMQVNIX0JBU0UxX1BSRUxJTSwKKwkJRkxBU0hfQkFTRTFfUFJFTElNK21vbml0b3JfZmxhc2hfbGVuLTEsCisJCSZmbGFzaF9pbmZvWzFdKTsKICAgICB9CiAgICAgaWYgKHNpemUyID09IDQqMTAyNCoxMDI0KQogICAgIHsKLSAgICAgICAgKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotICAgICAgICAgICAgICAgIENGR19GTEFTSF9CQVNFLAotICAgICAgICAgICAgICAgIENGR19GTEFTSF9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTEsCi0gICAgICAgICAgICAgICAgJmZsYXNoX2luZm9bMV0pOworCSh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKwkJQ0ZHX0ZMQVNIX0JBU0UsCisJCUNGR19GTEFTSF9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTEsCisJCSZmbGFzaF9pbmZvWzFdKTsKICAgICB9CiAKICAgICByZXR1cm4gKHNpemUxICsgc2l6ZTIpOwpAQCAtMTE1LDcyICsxMTUsNzIgQEAKICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpmbGFzaDsKIAogICAgIGlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0gICAgICAgIHByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKLSAgICAgICAgZmxhc2hfaW5pdCgpOworCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwlmbGFzaF9pbml0KCk7CiAgICAgfQogCiAgICAgaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLSAgICAgICAgcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOwotICAgICAgICByZXR1cm47CisJcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOworCXJldHVybjsKICAgICB9CiAKICAgICBzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKICAgICBjYXNlIEZMQVNIX01BTl9BTUQ6Ci0gICAgICAgIHByaW50ZiAoIkFNRCAiKTsKLSAgICAgICAgYnJlYWs7CisJcHJpbnRmICgiQU1EICIpOworCWJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwotICAgICAgICBicmVhazsKKwlwcmludGYgKCJVbmtub3duIFZlbmRvciAiKTsKKwlicmVhazsKICAgICB9CiAKICAgICBzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKICAgICBjYXNlIEFNRF9JRF9GMDQwQjoKLSAgICAgICAgcHJpbnRmICgiQU0yOUYwNDBCICg0IE1iaXQpXG4iKTsKLSAgICAgICAgYnJlYWs7CisJcHJpbnRmICgiQU0yOUYwNDBCICg0IE1iaXQpXG4iKTsKKwlicmVhazsKICAgICBjYXNlIEFNRF9JRF9GMDE2RDoKLSAgICAgICAgcHJpbnRmICgiQU0yOUYwMTZEICgxNiBNYml0KVxuIik7Ci0gICAgICAgIGJyZWFrOworCXByaW50ZiAoIkFNMjlGMDE2RCAoMTYgTWJpdClcbiIpOworCWJyZWFrOwogICAgIGNhc2UgQU1EX0lEX0YwMzJCOgotICAgICAgICBwcmludGYgKCJBTTI5RjAzMkIgKDMyIE1iaXQpXG4iKTsKLSAgICAgICAgYnJlYWs7CisJcHJpbnRmICgiQU0yOUYwMzJCICgzMiBNYml0KVxuIik7CisJYnJlYWs7CiAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYgKCJVbmtub3duIENoaXAgVHlwZVxuIik7Ci0gICAgICAgIGJyZWFrOworCXByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKKwlicmVhazsKICAgICB9CiAKICAgICBpZiAoaW5mby0+c2l6ZSA+PSAoMSA8PCAyMCkpIHsKLSAgICAgICAgcHJpbnRmICgiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwgaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKKwlwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLCBpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHByaW50ZiAoIiAgU2l6ZTogJWxkIGtCIGluICVkIFNlY3RvcnNcbiIsIGluZm8tPnNpemUgPj4gMTAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CisJcHJpbnRmICgiICBTaXplOiAlbGQga0IgaW4gJWQgU2VjdG9yc1xuIiwgaW5mby0+c2l6ZSA+PiAxMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKICAgICB9CiAKICAgICBwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CiAgICAgZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLSAgICAgICAgLyoKLSAgICAgICAgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkCi0gICAgICAgICovCi0gICAgICAgIGlmIChpICE9IChpbmZvLT5zZWN0b3JfY291bnQtMSkpCi0gICAgICAgICAgICBzaXplID0gaW5mby0+c3RhcnRbaSsxXSAtIGluZm8tPnN0YXJ0W2ldOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaXplID0gaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gaW5mby0+c3RhcnRbaV07CisJLyoKKwkqIENoZWNrIGlmIHdob2xlIHNlY3RvciBpcyBlcmFzZWQKKwkqLworCWlmIChpICE9IChpbmZvLT5zZWN0b3JfY291bnQtMSkpCisJICAgIHNpemUgPSBpbmZvLT5zdGFydFtpKzFdIC0gaW5mby0+c3RhcnRbaV07CisJZWxzZQorCSAgICBzaXplID0gaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gaW5mby0+c3RhcnRbaV07CiAKLSAgICAgICAgZXJhc2VkID0gMTsKLSAgICAgICAgZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0W2ldOwotICAgICAgICBzaXplID0gc2l6ZSA+PiAyOyAgICAgICAgLyogZGl2aWRlIGJ5IDQgZm9yIGxvbmd3b3JkIGFjY2VzcyAqLwotICAgICAgICBmb3IgKGs9MDsgazxzaXplOyBrKyspIHsKLSAgICAgICAgICAgIGlmICgqZmxhc2grKyAhPSAweGZmZmZmZmZmKSB7Ci0gICAgICAgICAgICAgICAgZXJhc2VkID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWVyYXNlZCA9IDE7CisJZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0W2ldOworCXNpemUgPSBzaXplID4+IDI7ICAgICAgICAvKiBkaXZpZGUgYnkgNCBmb3IgbG9uZ3dvcmQgYWNjZXNzICovCisJZm9yIChrPTA7IGs8c2l6ZTsgaysrKSB7CisJICAgIGlmICgqZmxhc2grKyAhPSAweGZmZmZmZmZmKSB7CisJCWVyYXNlZCA9IDA7CisJCWJyZWFrOworCSAgICB9CisJfQogCi0gICAgICAgIGlmICgoaSAlIDUpID09IDApCi0gICAgICAgICAgICBwcmludGYgKCJcbiAgICIpOworCWlmICgoaSAlIDUpID09IDApCisJICAgIHByaW50ZiAoIlxuICAgIik7CiAKLSAgICAgICAgcHJpbnRmICgiICUwOGxYJXMlcyIsCi0gICAgICAgICAgICBpbmZvLT5zdGFydFtpXSwKLSAgICAgICAgICAgIGVyYXNlZCA/ICIgRSIgOiAiICAiLAotICAgICAgICAgICAgaW5mby0+cHJvdGVjdFtpXSA/ICJSTyAiIDogIiAgICIpOworCXByaW50ZiAoIiAlMDhsWCVzJXMiLAorCSAgICBpbmZvLT5zdGFydFtpXSwKKwkgICAgZXJhc2VkID8gIiBFIiA6ICIgICIsCisJICAgIGluZm8tPnByb3RlY3RbaV0gPyAiUk8gIiA6ICIgICAiKTsKICAgICB9CiAgICAgcHJpbnRmICgiXG4iKTsKIH0KQEAgLTIyNiwzNyArMjI2LDM3IEBACiAgICAgLyogV2UgYWNjZXB0IG9ubHkgdHdvIEFNRCB0eXBlcyAqLwogICAgIHN3aXRjaCAodmVuZG9yKSB7CiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9NQU5VRkFDVDoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EOwotICAgICAgICBicmVhazsKKwlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7CisJYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSAwOwotICAgICAgICBpbmZvLT5zaXplID0gMDsKLSAgICAgICAgcmV0dXJuICgwKTsgICAgICAgICAvKiBubyBvciB1bmtub3duIGZsYXNoICAqLworCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSAwOworCWluZm8tPnNpemUgPSAwOworCXJldHVybiAoMCk7ICAgICAgICAgLyogbm8gb3IgdW5rbm93biBmbGFzaCAgKi8KICAgICB9CiAKICAgICBzd2l0Y2ggKGRldmlkKSB7CiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9GMDQwQjoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgfD0gQU1EX0lEX0YwNDBCOwotICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSA4OwotICAgICAgICBpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAwLjUgTUIgICAgICAqLworCWluZm8tPmZsYXNoX2lkIHw9IEFNRF9JRF9GMDQwQjsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSA4OworCWluZm8tPnNpemUgPSAweDAwMDgwMDAwOworCWJyZWFrOyAgICAgICAgICAgICAgLyogPT4gMC41IE1CICAgICAgKi8KIAogICAgIGNhc2UgKEZMQVNIX1dPUkRfU0laRSlBTURfSURfRjAxNkQ6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkIHw9IEFNRF9JRF9GMDE2RDsKLSAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gMzI7Ci0gICAgICAgIGluZm8tPnNpemUgICAgICAgICA9IDB4MDAyMDAwMDA7Ci0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogPT4gMiBNQiAgICAgICovCisJaW5mby0+Zmxhc2hfaWQgfD0gQU1EX0lEX0YwMTZEOworCWluZm8tPnNlY3Rvcl9jb3VudCA9IDMyOworCWluZm8tPnNpemUgICAgICAgICA9IDB4MDAyMDAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAyIE1CICAgICAgKi8KIAogICAgIGNhc2UgKEZMQVNIX1dPUkRfU0laRSlBTURfSURfRjAzMkI6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkIHw9IEFNRF9JRF9GMDMyQjsKLSAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gNjQ7Ci0gICAgICAgIGluZm8tPnNpemUgICAgICAgICA9IDB4MDA0MDAwMDA7Ci0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogPT4gNCBNQiAgICAgICovCisJaW5mby0+Zmxhc2hfaWQgfD0gQU1EX0lEX0YwMzJCOworCWluZm8tPnNlY3Rvcl9jb3VudCA9IDY0OworCWluZm8tPnNpemUgICAgICAgICA9IDB4MDA0MDAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiA0IE1CICAgICAgKi8KIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKLSAgICAgICAgcmV0dXJuICgwKTsgICAgICAgICAvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCisJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCXJldHVybiAoMCk7ICAgICAgICAgLyogPT4gbm8gb3IgdW5rbm93biBmbGFzaCAqLwogCiAgICAgfQogCkBAIC0yNjYsMjAgKzI2NiwyMCBAQAogCiAgICAgLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCiAgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0gICAgICAgIC8qIHNlY3RvciBiYXNlIGFkZHJlc3MgKi8KLSAgICAgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgaSAqIChpbmZvLT5zaXplIC8gaW5mby0+c2VjdG9yX2NvdW50KTsKLSAgICAgICAgLyogcmVhZCBzZWN0b3IgcHJvdGVjdGlvbiBhdCBzZWN0b3IgYWRkcmVzcywgKEE3IC4uIEEwKSA9IDB4MDIgKi8KLSAgICAgICAgLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLwotICAgICAgICBjYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGluZm8tPnN0YXJ0W2ldKTsKLSAgICAgICAgaW5mby0+cHJvdGVjdFtpXSA9IGNhZGRyWzJdICYgMTsKKwkvKiBzZWN0b3IgYmFzZSBhZGRyZXNzICovCisJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgaSAqIChpbmZvLT5zaXplIC8gaW5mby0+c2VjdG9yX2NvdW50KTsKKwkvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLworCS8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KKwljYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGluZm8tPnN0YXJ0W2ldKTsKKwlpbmZvLT5wcm90ZWN0W2ldID0gY2FkZHJbMl0gJiAxOwogICAgIH0KIAogICAgIC8qCiAgICAgICogUHJldmVudCB3cml0ZXMgdG8gdW5pbml0aWFsaXplZCBGTEFTSC4KICAgICAgKi8KICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTikgewotICAgICAgICBjYWRkciA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopaW5mby0+c3RhcnRbMF07Ci0gICAgICAgIGNhZGRyWzBdID0gMHhGMDsgICAvKiByZXNldCBiYW5rICovCisJY2FkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKWluZm8tPnN0YXJ0WzBdOworCWNhZGRyWzBdID0gMHhGMDsgICAvKiByZXNldCBiYW5rICovCiAgICAgfQogCiAgICAgcmV0dXJuIChpbmZvLT5zaXplKTsKQEAgLTI5NSwzMiArMjk1LDMyIEBACiAgICAgaW50IHJjID0gMDsKIAogICAgIGlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewotICAgICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotICAgICAgICAgICAgcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDE7CisJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkgICAgcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKKwl9IGVsc2UgeworCSAgICBwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOworCX0KKwlyZXR1cm4gMTsKICAgICB9CiAKICAgICBpZiAoKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHx8Ci0gICAgICAgIChpbmZvLT5mbGFzaF9pZCA+IEZMQVNIX0FNRF9DT01QKSkgewotICAgICAgICBwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgLSBhYm9ydGVkXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7CisJKGluZm8tPmZsYXNoX2lkID4gRkxBU0hfQU1EX0NPTVApKSB7CisJcHJpbnRmICgiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlIC0gYWJvcnRlZFxuIik7CisJcmV0dXJuIDE7CiAgICAgfQogCiAgICAgcHJvdCA9IDA7CiAgICAgZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KSB7Ci0gICAgICAgIGlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7Ci0gICAgICAgICAgICBwcm90Kys7Ci0gICAgICAgIH0KKwlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgeworCSAgICBwcm90Kys7CisJfQogICAgIH0KIAogICAgIGlmIChwcm90KSB7Ci0gICAgICAgIHByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKLSAgICAgICAgICAgIHByb3QpOworCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKKwkgICAgcHJvdCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmICgiXG4iKTsKKwlwcmludGYgKCJcbiIpOwogICAgIH0KIAogICAgIGxfc2VjdCA9IC0xOwpAQCAtMzM2LDI2ICszMzYsMjYgQEAKIAogICAgIC8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KICAgICBmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7IHNlY3QrKykgewotICAgICAgICBpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7IC8qIG5vdCBwcm90ZWN0ZWQgKi8KLSAgICAgICAgICAgIGFkZHIgPSAoRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0W3NlY3RdKTsKLSAgICAgICAgICAgIGlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX01BTl9TU1QpIHsKLSAgICAgICAgICAgICAgICBhZGRyW0FERFIwXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMEFBMDBBQTsKLSAgICAgICAgICAgICAgICBhZGRyW0FERFIxXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKLSAgICAgICAgICAgICAgICBhZGRyW0FERFIwXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MDsKLSAgICAgICAgICAgICAgICBhZGRyW0FERFIwXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMEFBMDBBQTsKLSAgICAgICAgICAgICAgICBhZGRyW0FERFIxXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKLSAgICAgICAgICAgICAgICBhZGRyWzBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTAwMDUwOyAgLyogYmxvY2sgZXJhc2UgKi8KLSAgICAgICAgICAgICAgICB1ZGVsYXkoMzAwMDApOyAgLyogd2FpdCAzMCBtcyAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFkZHJbMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDAzMDAwMzA7ICAvKiBzZWN0b3IgZXJhc2UgKi8KLSAgICAgICAgICAgIGxfc2VjdCA9IHNlY3Q7Ci0gICAgICAgIH0KKwlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7IC8qIG5vdCBwcm90ZWN0ZWQgKi8KKwkgICAgYWRkciA9IChGTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbc2VjdF0pOworCSAgICBpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9NQU5fU1NUKSB7CisJCWFkZHJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOworCQlhZGRyW0FERFIxXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKKwkJYWRkcltBRERSMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODA7CisJCWFkZHJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOworCQlhZGRyW0FERFIxXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKKwkJYWRkclswXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDUwMDA1MDsgIC8qIGJsb2NrIGVyYXNlICovCisJCXVkZWxheSgzMDAwMCk7ICAvKiB3YWl0IDMwIG1zICovCisJICAgIH0KKwkgICAgZWxzZQorCQlhZGRyWzBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwMzAwMDMwOyAgLyogc2VjdG9yIGVyYXNlICovCisJICAgIGxfc2VjdCA9IHNlY3Q7CisJfQogICAgIH0KIAogICAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwogICAgIGlmIChmbGFnKQotICAgICAgICBlbmFibGVfaW50ZXJydXB0cygpOworCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAKICAgICAvKiB3YWl0IGF0IGxlYXN0IDgwdXMgLSBsZXQncyB3YWl0IDEgbXMgKi8KICAgICB1ZGVsYXkgKDEwMDApOwpAQCAtMzY0LDIxICszNjQsMjEgQEAKICAgICAgKiBXZSB3YWl0IGZvciB0aGUgbGFzdCB0cmlnZ2VyZWQgc2VjdG9yCiAgICAgICovCiAgICAgaWYgKGxfc2VjdCA8IDApCi0gICAgICAgIGdvdG8gRE9ORTsKKwlnb3RvIERPTkU7CiAKICAgICBzdGFydCA9IGdldF90aW1lciAoMCk7CiAgICAgbGFzdCAgPSBzdGFydDsKICAgICBhZGRyID0gKEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFtsX3NlY3RdKTsKICAgICB3aGlsZSAoKGFkZHJbMF0gJiAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApICE9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgewotICAgICAgICBpZiAoKG5vdyA9IGdldF90aW1lcihzdGFydCkpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKLSAgICAgICAgICAgIHByaW50ZiAoIlRpbWVvdXRcbiIpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KLSAgICAgICAgaWYgKChub3cgLSBsYXN0KSA+IDEwMDApIHsgIC8qIGV2ZXJ5IHNlY29uZCAqLwotICAgICAgICAgICAgc2VyaWFsX3B1dGMgKCcuJyk7Ci0gICAgICAgICAgICBsYXN0ID0gbm93OwotICAgICAgICB9CisJaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJICAgIHByaW50ZiAoIlRpbWVvdXRcbiIpOworCSAgICByZXR1cm4gMTsKKwl9CisJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KKwlpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgeyAgLyogZXZlcnkgc2Vjb25kICovCisJICAgIHNlcmlhbF9wdXRjICgnLicpOworCSAgICBsYXN0ID0gbm93OworCX0KICAgICB9CiAKIERPTkU6CkBAIC00MDgsNDIgKzQwOCw0MiBAQAogICAgICAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKICAgICAgKi8KICAgICBpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKLSAgICAgICAgZGF0YSA9IDA7Ci0gICAgICAgIGZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApIHsKLSAgICAgICAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoOyBpPDQgJiYgY250PjA7ICsraSkgewotICAgICAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotICAgICAgICAgICAgLS1jbnQ7Ci0gICAgICAgICAgICArK2NwOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoOyBjbnQ9PTAgJiYgaTw0OyArK2ksICsrY3ApIHsKLSAgICAgICAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotICAgICAgICB9CisJZGF0YSA9IDA7CisJZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgeworCSAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwl9CisJZm9yICg7IGk8NCAmJiBjbnQ+MDsgKytpKSB7CisJICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkgICAgLS1jbnQ7CisJICAgICsrY3A7CisJfQorCWZvciAoOyBjbnQ9PTAgJiYgaTw0OyArK2ksICsrY3ApIHsKKwkgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CisJfQogCi0gICAgICAgIGlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIChyYyk7Ci0gICAgICAgIH0KLSAgICAgICAgd3AgKz0gNDsKKwlpZiAoKHJjID0gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKKwkgICAgcmV0dXJuIChyYyk7CisJfQorCXdwICs9IDQ7CiAgICAgfQogCiAgICAgLyoKICAgICAgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKICAgICAgKi8KICAgICB3aGlsZSAoY250ID49IDQpIHsKLSAgICAgICAgZGF0YSA9IDA7Ci0gICAgICAgIGZvciAoaT0wOyBpPDQ7ICsraSkgewotICAgICAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotICAgICAgICB9Ci0gICAgICAgIGlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIChyYyk7Ci0gICAgICAgIH0KLSAgICAgICAgd3AgICs9IDQ7Ci0gICAgICAgIGNudCAtPSA0OworCWRhdGEgPSAwOworCWZvciAoaT0wOyBpPDQ7ICsraSkgeworCSAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJfQorCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgeworCSAgICByZXR1cm4gKHJjKTsKKwl9CisJd3AgICs9IDQ7CisJY250IC09IDQ7CiAgICAgfQogCiAgICAgaWYgKGNudCA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAoMCk7CisJcmV0dXJuICgwKTsKICAgICB9CiAKICAgICAvKgpAQCAtNDUxLDExICs0NTEsMTEgQEAKICAgICAgKi8KICAgICBkYXRhID0gMDsKICAgICBmb3IgKGk9MCwgY3A9d3A7IGk8NCAmJiBjbnQ+MDsgKytpLCArK2NwKSB7Ci0gICAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLSAgICAgICAgLS1jbnQ7CisJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCS0tY250OwogICAgIH0KICAgICBmb3IgKDsgaTw0OyArK2ksICsrY3ApIHsKLSAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CisJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CiAgICAgfQogCiAgICAgcmV0dXJuICh3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSk7CkBAIC00NjksNDUgKzQ2OSw0NCBAQAogICovCiBzdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSkKIHsKLSAgICAgICAgdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbMF0pOwotICAgICAgICB2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmRlc3QyID0gKEZMQVNIX1dPUkRfU0laRSAqKWRlc3Q7Ci0gICAgICAgIHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqZGF0YTIgPSAoRkxBU0hfV09SRF9TSVpFICopJmRhdGE7CisJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbMF0pOworCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqZGVzdDIgPSAoRkxBU0hfV09SRF9TSVpFICopZGVzdDsKKwl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmRhdGEyID0gKEZMQVNIX1dPUkRfU0laRSAqKSZkYXRhOwogICAgIHVsb25nIHN0YXJ0OwogICAgIGludCBmbGFnOwotICAgICAgICBpbnQgaTsKKwlpbnQgaTsKIAogICAgIC8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwogICAgIGlmICgoKigodm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICopZGVzdCkgJgotICAgICAgICAgICAgIChGTEFTSF9XT1JEX1NJWkUpZGF0YSkgIT0gKEZMQVNIX1dPUkRfU0laRSlkYXRhKSB7Ci0gICAgICAgIHJldHVybiAoMik7CisJICAgICAoRkxBU0hfV09SRF9TSVpFKWRhdGEpICE9IChGTEFTSF9XT1JEX1NJWkUpZGF0YSkgeworCXJldHVybiAoMik7CiAgICAgfQogICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwogICAgIGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAotICAgICAgICBmb3IgKGk9MDsgaTw0L3NpemVvZihGTEFTSF9XT1JEX1NJWkUpOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgYWRkcjJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwotICAgICAgICAgICAgYWRkcjJbQUREUjFdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OwotICAgICAgICAgICAgYWRkcjJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQTAwMEEwOworCWZvciAoaT0wOyBpPDQvc2l6ZW9mKEZMQVNIX1dPUkRfU0laRSk7IGkrKykKKwkgIHsKKwkgICAgYWRkcjJbQUREUjBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOworCSAgICBhZGRyMltBRERSMV0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7CisJICAgIGFkZHIyW0FERFIwXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMEEwMDBBMDsKIAotICAgICAgICAgICAgZGVzdDJbaV0gPSBkYXRhMltpXTsKKwkgICAgZGVzdDJbaV0gPSBkYXRhMltpXTsKIAotICAgICAgICAgICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgICAgICBpZiAoZmxhZykKLSAgICAgICAgICAgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKKwkgICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisJICAgIGlmIChmbGFnKQorCSAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAKLSAgICAgICAgICAgIC8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KLSAgICAgICAgICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLSAgICAgICAgICAgIHdoaWxlICgoZGVzdDJbaV0gJiAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApICE9Ci0gICAgICAgICAgICAgICAgICAgKGRhdGEyW2ldICYgKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSkgewotICAgICAgICAgICAgICBpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KKwkgICAgLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLworCSAgICBzdGFydCA9IGdldF90aW1lciAoMCk7CisJICAgIHdoaWxlICgoZGVzdDJbaV0gJiAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApICE9CisJCSAgIChkYXRhMltpXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkpIHsKKwkgICAgICBpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7CisJCXJldHVybiAoMSk7CisJICAgICAgfQorCSAgICB9CisJICB9CiAKICAgICByZXR1cm4gKDApOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCmRpZmYgLS1naXQgYS9ib2FyZC9lbHRlYy9lbHBwYy9taXNjLmMgYi9ib2FyZC9lbHRlYy9lbHBwYy9taXNjLmMKaW5kZXggN2JmYjNhNC4uZjMzYWVmNyAxMDA2NDQKLS0tIGEvYm9hcmQvZWx0ZWMvZWxwcGMvbWlzYy5jCisrKyBiL2JvYXJkL2VsdGVjL2VscHBjL21pc2MuYwpAQCAtMzIsNyArMzIsNyBAQAogZXh0ZXJuIGNoYXIgY29uc29sZV9idWZmZXJbQ0ZHX0NCU0laRV07CiBleHRlcm4gaW50IGwyX2NhY2hlX2VuYWJsZSAoaW50IGwyY29udHJvbCk7CiBleHRlcm4gaW50IGVlcHJvMTAwX3dyaXRlX2VlcHJvbSAoc3RydWN0IGV0aF9kZXZpY2UqIGRldiwgaW50IGxvY2F0aW9uLAotICAgICAgICAgICAgICAgICBpbnQgYWRkcl9sZW4sIHVuc2lnbmVkIHNob3J0IGRhdGEpOworCQkgaW50IGFkZHJfbGVuLCB1bnNpZ25lZCBzaG9ydCBkYXRhKTsKIGV4dGVybiBpbnQgcmVhZF9lZXByb20gKHN0cnVjdCBldGhfZGV2aWNlKiBkZXYsIGludCBsb2NhdGlvbiwgaW50IGFkZHJfbGVuKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICB1Y2hhciAqcyA9ICh1Y2hhciAqKSAoQ0ZHX0VOVl9NQVBfQURSUyArIHNyYyk7CiAKICAgICB3aGlsZSAoY291bnQtLSkKLSAgICAgICAgKmQrKyA9ICpzKys7CisJKmQrKyA9ICpzKys7CiAKICAgICByZXR1cm4gZGVzdDsKIH0KQEAgLTU2LDcgKzU2LDcgQEAKICAgICB1Y2hhciAqcyA9ICh1Y2hhciAqKSBzcmM7CiAKICAgICB3aGlsZSAoY291bnQtLSkKLSAgICAgICAgKmQrKyA9ICpzKys7CisJKmQrKyA9ICpzKys7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03Miw3ICs3Miw3IEBACiAgICAgdV9pbnQgIGksIGwsIGluaXRTcm9tLCBjb3B5TnY7CiAgICAgY2hhciBidWZbMjU2XTsKICAgICBjaGFyIGhleFsyM10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1IH07CisJCSAgICAgMCwgMCwgMCwgMCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSB9OwogCiAgICAgLyogQ2xvY2sgc2V0dGluZyBmb3IgTVBDMTA3IGkyYyAqLwogICAgIG1wYzEwN19pMmNfaW5pdCAoTVBDMTA3X0VVTUJfQUREUiwgMHgyYik7CkBAIC05MSwxNjYgKzkxLDE2NiBAQAogCiAgICAgLyogcmVhZCBvdXQgY3VycmVudCByZXZpc2lvbiBzcm9tIGNvbnRlbnMgKi8KICAgICBtcGMxMDdfc3JvbV9sb2FkICgweDAwMDAsICh1X2NoYXIqKSZlZXJldiwgc2l6ZW9mKHJldmluZm8pLAotICAgICAgICAgICAgICAgIFNFQ09ORF9ERVZJQ0UsIEZJUlNUX0JMT0NLKTsKKwkJU0VDT05EX0RFVklDRSwgRklSU1RfQkxPQ0spOwogCiAgICAgLyogcmVhZCBvdXQgY3VycmVudCBudnJhbSBzaGFkb3cgaW1hZ2UgKi8KICAgICBudnJhbV9yZWFkIChidWYsIENGR19OVl9TUk9NX0NPUFlfQUREUiwgQ0ZHX1NST01fU0laRSk7CiAKICAgICBpZiAoc3RyY21wIChlZXJldi5tYWdpYywgIkVMVEVDIikgIT0gMCkKICAgICB7Ci0gICAgICAgIC8qIHNyb20gaXMgbm90IGluaXRpYWxpemVkIC0+IGNyZWF0ZSBhIGRlZmF1bHQgcmV2aXNpb24gaW5mbyAqLwotICAgICAgICBmb3IgKGkgPSAwLCBwdHIgPSAodV9jaGFyICopJmVlcmV2OyBpIDwgc2l6ZW9mKHJldmluZm8pOyBpKyspCi0gICAgICAgICAgICAqcHRyKysgPSAweDAwOwotICAgICAgICBzdHJjcHkoZWVyZXYubWFnaWMsICJFTFRFQyIpOwotICAgICAgICBlZXJldi5yZXZyZXZbMF0gPSAxOwotICAgICAgICBlZXJldi5yZXZyZXZbMV0gPSAwOwotICAgICAgICBlZXJldi5zaXplID0gMHgwMEUwOwotICAgICAgICBlZXJldi5jYXRlZ29yeVswXSA9IDB4MDE7CisJLyogc3JvbSBpcyBub3QgaW5pdGlhbGl6ZWQgLT4gY3JlYXRlIGEgZGVmYXVsdCByZXZpc2lvbiBpbmZvICovCisJZm9yIChpID0gMCwgcHRyID0gKHVfY2hhciAqKSZlZXJldjsgaSA8IHNpemVvZihyZXZpbmZvKTsgaSsrKQorCSAgICAqcHRyKysgPSAweDAwOworCXN0cmNweShlZXJldi5tYWdpYywgIkVMVEVDIik7CisJZWVyZXYucmV2cmV2WzBdID0gMTsKKwllZXJldi5yZXZyZXZbMV0gPSAwOworCWVlcmV2LnNpemUgPSAweDAwRTA7CisJZWVyZXYuY2F0ZWdvcnlbMF0gPSAweDAxOwogCi0gICAgICAgIC8qIG5vZGUgaWQgZnJvbSBkZWFkIGUxMjggYXMgZGVmYXVsdCAqLwotICAgICAgICBlZXJldi5ldGhlcmFkZHJbMF0gPSAweDAwOwotICAgICAgICBlZXJldi5ldGhlcmFkZHJbMV0gPSAweDAwOwotICAgICAgICBlZXJldi5ldGhlcmFkZHJbMl0gPSAweDVCOwotICAgICAgICBlZXJldi5ldGhlcmFkZHJbM10gPSAweDAwOwotICAgICAgICBlZXJldi5ldGhlcmFkZHJbNF0gPSAweDJFOwotICAgICAgICBlZXJldi5ldGhlcmFkZHJbNV0gPSAweDREOworCS8qIG5vZGUgaWQgZnJvbSBkZWFkIGUxMjggYXMgZGVmYXVsdCAqLworCWVlcmV2LmV0aGVyYWRkclswXSA9IDB4MDA7CisJZWVyZXYuZXRoZXJhZGRyWzFdID0gMHgwMDsKKwllZXJldi5ldGhlcmFkZHJbMl0gPSAweDVCOworCWVlcmV2LmV0aGVyYWRkclszXSA9IDB4MDA7CisJZWVyZXYuZXRoZXJhZGRyWzRdID0gMHgyRTsKKwllZXJldi5ldGhlcmFkZHJbNV0gPSAweDREOwogCi0gICAgICAgIC8qIGNhY2hlIGNvbmZpZyB3b3JkIGZvciBFTFBQQyAqLwotICAgICAgICAqKGludCopJmVlcmV2LnJlc1swXSA9IDA7CisJLyogY2FjaGUgY29uZmlnIHdvcmQgZm9yIEVMUFBDICovCisJKihpbnQqKSZlZXJldi5yZXNbMF0gPSAwOwogCi0gICAgICAgIGluaXRTcm9tID0gMTsgIC8qIGZvcmNlIGRpYWxvZyAqLwotICAgICAgICBjb3B5TnYgICA9IDE7ICAvKiBjb3B5IHRvIG52cmFtICovCisJaW5pdFNyb20gPSAxOyAgLyogZm9yY2UgZGlhbG9nICovCisJY29weU52ICAgPSAxOyAgLyogY29weSB0byBudnJhbSAqLwogICAgIH0KIAogICAgIGlmICgoY29weU52ID09IDApICYmICAgKGVsX3Nyb21fY2hlY2tzdW0oKHVfY2hhciopJmVlcmV2LCBDRkdfU1JPTV9TSVpFKSAhPQotICAgICAgICAgICAgICAgIGVsX3Nyb21fY2hlY2tzdW0oKHVfY2hhciopYnVmLCBDRkdfU1JPTV9TSVpFKSkpCisJCWVsX3Nyb21fY2hlY2tzdW0oKHVfY2hhciopYnVmLCBDRkdfU1JPTV9TSVpFKSkpCiAgICAgewotICAgICAgICBwcmludGYgKCJJbnZhbGlkIHJldmlzaW9uIGluZm8gY29weSBpbiBudnJhbSAhXG4iKTsKLSAgICAgICAgcHJpbnRmICgiUHJlc3Mga2V5OlxuICA8Yz4gdG8gY29weSBjdXJyZW50IHJldmlzaW9uIGluZm8gdG8gbnZyYW0uXG4iKTsKLSAgICAgICAgcHJpbnRmICgiICA8cj4gdG8gcmVlbnRlciByZXZpc2lvbiBpbmZvLlxuIik7Ci0gICAgICAgIHByaW50ZiAoIj0+ICIpOwotICAgICAgICBpZiAoMCAhPSByZWFkbGluZSAoTlVMTCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoKGNoYXIpdG91cHBlcihjb25zb2xlX2J1ZmZlclswXSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlICdDJzoKLSAgICAgICAgICAgICAgICBjb3B5TnYgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnUic6Ci0gICAgICAgICAgICAgICAgY29weU52ID0gMTsKLSAgICAgICAgICAgICAgICBpbml0U3JvbSA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlwcmludGYgKCJJbnZhbGlkIHJldmlzaW9uIGluZm8gY29weSBpbiBudnJhbSAhXG4iKTsKKwlwcmludGYgKCJQcmVzcyBrZXk6XG4gIDxjPiB0byBjb3B5IGN1cnJlbnQgcmV2aXNpb24gaW5mbyB0byBudnJhbS5cbiIpOworCXByaW50ZiAoIiAgPHI+IHRvIHJlZW50ZXIgcmV2aXNpb24gaW5mby5cbiIpOworCXByaW50ZiAoIj0+ICIpOworCWlmICgwICE9IHJlYWRsaW5lIChOVUxMKSkKKwl7CisJICAgIHN3aXRjaCAoKGNoYXIpdG91cHBlcihjb25zb2xlX2J1ZmZlclswXSkpCisJICAgIHsKKwkgICAgY2FzZSAnQyc6CisJCWNvcHlOdiA9IDE7CisJCWJyZWFrOworCSAgICBjYXNlICdSJzoKKwkJY29weU52ID0gMTsKKwkJaW5pdFNyb20gPSAxOworCQlicmVhazsKKwkgICAgfQorCX0KICAgICB9CiAKICAgICBpZiAoaW5pdFNyb20pCiAgICAgewotICAgICAgICBtZW1jcHkgKGJ1ZiwgJmVlcmV2LnJldmlzaW9uWzBdWzBdLCAxNCk7ICAgICAvKiBzYXZlIGFsbCByZXZpc2lvbiBpbmZvICovCi0gICAgICAgIHByaW50ZiAoIkVudGVyIHJldmlzaW9uIG51bWJlciAoMC05KTogJWMgICIsIGVlcmV2LnJldmlzaW9uWzBdWzBdKTsKLSAgICAgICAgaWYgKDAgIT0gcmVhZGxpbmUgKE5VTEwpKQotICAgICAgICB7Ci0gICAgICAgICAgICBlZXJldi5yZXZpc2lvblswXVswXSA9IChjaGFyKXRvdXBwZXIoY29uc29sZV9idWZmZXJbMF0pOwotICAgICAgICAgICAgbWVtY3B5ICgmZWVyZXYucmV2aXNpb25bMV1bMF0sIGJ1ZiwgMTIpOyAvKiBzaGlmdCByZXN0IG9mIHJldiBpbmZvICovCi0gICAgICAgIH0KKwltZW1jcHkgKGJ1ZiwgJmVlcmV2LnJldmlzaW9uWzBdWzBdLCAxNCk7ICAgICAvKiBzYXZlIGFsbCByZXZpc2lvbiBpbmZvICovCisJcHJpbnRmICgiRW50ZXIgcmV2aXNpb24gbnVtYmVyICgwLTkpOiAlYyAgIiwgZWVyZXYucmV2aXNpb25bMF1bMF0pOworCWlmICgwICE9IHJlYWRsaW5lIChOVUxMKSkKKwl7CisJICAgIGVlcmV2LnJldmlzaW9uWzBdWzBdID0gKGNoYXIpdG91cHBlcihjb25zb2xlX2J1ZmZlclswXSk7CisJICAgIG1lbWNweSAoJmVlcmV2LnJldmlzaW9uWzFdWzBdLCBidWYsIDEyKTsgLyogc2hpZnQgcmVzdCBvZiByZXYgaW5mbyAqLworCX0KIAotICAgICAgICBwcmludGYgKCJFbnRlciByZXZpc2lvbiBjaGFyYWN0ZXIgKEEtWik6ICVjICAiLCBlZXJldi5yZXZpc2lvblswXVsxXSk7Ci0gICAgICAgIGlmICgxID09IHJlYWRsaW5lIChOVUxMKSkKLSAgICAgICAgewotICAgICAgICAgICAgZWVyZXYucmV2aXNpb25bMF1bMV0gPSAoY2hhcil0b3VwcGVyKGNvbnNvbGVfYnVmZmVyWzBdKTsKLSAgICAgICAgfQorCXByaW50ZiAoIkVudGVyIHJldmlzaW9uIGNoYXJhY3RlciAoQS1aKTogJWMgICIsIGVlcmV2LnJldmlzaW9uWzBdWzFdKTsKKwlpZiAoMSA9PSByZWFkbGluZSAoTlVMTCkpCisJeworCSAgICBlZXJldi5yZXZpc2lvblswXVsxXSA9IChjaGFyKXRvdXBwZXIoY29uc29sZV9idWZmZXJbMF0pOworCX0KIAotICAgICAgICBwcmludGYgKCJFbnRlciBib2FyZCBuYW1lIChWLVhYWFgtWFhYWCk6ICVzICAiLCAoY2hhciAqKSZlZXJldi5ib2FyZCk7Ci0gICAgICAgIGlmICgxMSA9PSByZWFkbGluZSAoTlVMTCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaT0wOyBpPDExOyBpKyspCi0gICAgICAgICAgICAgICAgZWVyZXYuYm9hcmRbaV0gPSAgKGNoYXIpdG91cHBlcihjb25zb2xlX2J1ZmZlcltpXSk7Ci0gICAgICAgICAgICBlZXJldi5ib2FyZFsxMV0gPSAnXDAnOwotICAgICAgICB9CisJcHJpbnRmICgiRW50ZXIgYm9hcmQgbmFtZSAoVi1YWFhYLVhYWFgpOiAlcyAgIiwgKGNoYXIgKikmZWVyZXYuYm9hcmQpOworCWlmICgxMSA9PSByZWFkbGluZSAoTlVMTCkpCisJeworCSAgICBmb3IgKGk9MDsgaTwxMTsgaSsrKQorCQllZXJldi5ib2FyZFtpXSA9ICAoY2hhcil0b3VwcGVyKGNvbnNvbGVfYnVmZmVyW2ldKTsKKwkgICAgZWVyZXYuYm9hcmRbMTFdID0gJ1wwJzsKKwl9CiAKLSAgICAgICAgcHJpbnRmICgiRW50ZXIgc2VyaWFsIG51bWJlcjogJXMgIiwgKGNoYXIgKikmZWVyZXYuc2VyaWFsICk7Ci0gICAgICAgIGlmICg2ID09IHJlYWRsaW5lIChOVUxMKSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpPTA7IGk8NjsgaSsrKQotICAgICAgICAgICAgICAgIGVlcmV2LnNlcmlhbFtpXSA9IGNvbnNvbGVfYnVmZmVyW2ldOwotICAgICAgICAgICAgZWVyZXYuc2VyaWFsWzZdID0gJ1wwJzsKLSAgICAgICAgfQorCXByaW50ZiAoIkVudGVyIHNlcmlhbCBudW1iZXI6ICVzICIsIChjaGFyICopJmVlcmV2LnNlcmlhbCApOworCWlmICg2ID09IHJlYWRsaW5lIChOVUxMKSkKKwl7CisJICAgIGZvciAoaT0wOyBpPDY7IGkrKykKKwkJZWVyZXYuc2VyaWFsW2ldID0gY29uc29sZV9idWZmZXJbaV07CisJICAgIGVlcmV2LnNlcmlhbFs2XSA9ICdcMCc7CisJfQogCi0gICAgICAgIHByaW50ZiAoIkVudGVyIGV0aGVyIG5vZGUgSUQgd2l0aCBsZWFkaW5nIHplcm8gKEhFWCk6ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAgIiwKLSAgICAgICAgICAgIGVlcmV2LmV0aGVyYWRkclswXSwgZWVyZXYuZXRoZXJhZGRyWzFdLAotICAgICAgICAgICAgZWVyZXYuZXRoZXJhZGRyWzJdLCBlZXJldi5ldGhlcmFkZHJbM10sCi0gICAgICAgICAgICBlZXJldi5ldGhlcmFkZHJbNF0sIGVlcmV2LmV0aGVyYWRkcls1XSk7Ci0gICAgICAgIGlmICgxMiA9PSByZWFkbGluZSAoTlVMTCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaT0wOyBpPDEyOyBpKz0yKQotICAgICAgICAgICAgZWVyZXYuZXRoZXJhZGRyW2k+PjFdID0gKGNoYXIpKDE2KmhleFt0b3VwcGVyKGNvbnNvbGVfYnVmZmVyW2ldKS0nMCddICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhbdG91cHBlcihjb25zb2xlX2J1ZmZlcltpKzFdKS0nMCddKTsKLSAgICAgICAgfQorCXByaW50ZiAoIkVudGVyIGV0aGVyIG5vZGUgSUQgd2l0aCBsZWFkaW5nIHplcm8gKEhFWCk6ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAgIiwKKwkgICAgZWVyZXYuZXRoZXJhZGRyWzBdLCBlZXJldi5ldGhlcmFkZHJbMV0sCisJICAgIGVlcmV2LmV0aGVyYWRkclsyXSwgZWVyZXYuZXRoZXJhZGRyWzNdLAorCSAgICBlZXJldi5ldGhlcmFkZHJbNF0sIGVlcmV2LmV0aGVyYWRkcls1XSk7CisJaWYgKDEyID09IHJlYWRsaW5lIChOVUxMKSkKKwl7CisJICAgIGZvciAoaT0wOyBpPDEyOyBpKz0yKQorCSAgICBlZXJldi5ldGhlcmFkZHJbaT4+MV0gPSAoY2hhcikoMTYqaGV4W3RvdXBwZXIoY29uc29sZV9idWZmZXJbaV0pLScwJ10gKworCQkJICAgICAgIGhleFt0b3VwcGVyKGNvbnNvbGVfYnVmZmVyW2krMV0pLScwJ10pOworCX0KIAotICAgICAgICBsID0gc3RybGVuICgoY2hhciAqKSZlZXJldi50ZXh0KTsKLSAgICAgICAgcHJpbnRmKCJBZGQgdG8gdGV4dCBzZWN0aW9uIChtYXggNjQgY2hyKTogJXMgIiwgKGNoYXIgKikmZWVyZXYudGV4dCApOwotICAgICAgICBpZiAoMCAhPSByZWFkbGluZSAoTlVMTCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaSA9IGw7IGk8NjM7IGkrKykKLSAgICAgICAgICAgICAgICBlZXJldi50ZXh0W2ldID0gY29uc29sZV9idWZmZXJbaS1sXTsKLSAgICAgICAgICAgIGVlcmV2LnRleHRbNjNdID0gJ1wwJzsKLSAgICAgICAgfQorCWwgPSBzdHJsZW4gKChjaGFyICopJmVlcmV2LnRleHQpOworCXByaW50ZigiQWRkIHRvIHRleHQgc2VjdGlvbiAobWF4IDY0IGNocik6ICVzICIsIChjaGFyICopJmVlcmV2LnRleHQgKTsKKwlpZiAoMCAhPSByZWFkbGluZSAoTlVMTCkpCisJeworCSAgICBmb3IgKGkgPSBsOyBpPDYzOyBpKyspCisJCWVlcmV2LnRleHRbaV0gPSBjb25zb2xlX2J1ZmZlcltpLWxdOworCSAgICBlZXJldi50ZXh0WzYzXSA9ICdcMCc7CisJfQogCi0gICAgICAgIC8qIHByZXBhcmUgbmV0d29yayBlZXByb20gKi8KLSAgICAgICAgbWVtc2V0IChidWYsIDAsIDEyOCk7CisJLyogcHJlcGFyZSBuZXR3b3JrIGVlcHJvbSAqLworCW1lbXNldCAoYnVmLCAwLCAxMjgpOwogCi0gICAgICAgIGJ1ZlswXSA9IGVlcmV2LmV0aGVyYWRkclsxXTsKLSAgICAgICAgYnVmWzFdID0gZWVyZXYuZXRoZXJhZGRyWzBdOwotICAgICAgICBidWZbMl0gPSBlZXJldi5ldGhlcmFkZHJbM107Ci0gICAgICAgIGJ1ZlszXSA9IGVlcmV2LmV0aGVyYWRkclsyXTsKLSAgICAgICAgYnVmWzRdID0gZWVyZXYuZXRoZXJhZGRyWzVdOwotICAgICAgICBidWZbNV0gPSBlZXJldi5ldGhlcmFkZHJbNF07CisJYnVmWzBdID0gZWVyZXYuZXRoZXJhZGRyWzFdOworCWJ1ZlsxXSA9IGVlcmV2LmV0aGVyYWRkclswXTsKKwlidWZbMl0gPSBlZXJldi5ldGhlcmFkZHJbM107CisJYnVmWzNdID0gZWVyZXYuZXRoZXJhZGRyWzJdOworCWJ1Zls0XSA9IGVlcmV2LmV0aGVyYWRkcls1XTsKKwlidWZbNV0gPSBlZXJldi5ldGhlcmFkZHJbNF07CiAKLSAgICAgICAgKih1bnNpZ25lZCBzaG9ydCAqKSZidWZbMjBdID0gMHg0OEIyOwotICAgICAgICAqKHVuc2lnbmVkIHNob3J0ICopJmJ1ZlsyMl0gPSAweDAwMDQ7Ci0gICAgICAgICoodW5zaWduZWQgc2hvcnQgKikmYnVmWzI0XSA9IDB4MTQzMzsKKwkqKHVuc2lnbmVkIHNob3J0ICopJmJ1ZlsyMF0gPSAweDQ4QjI7CisJKih1bnNpZ25lZCBzaG9ydCAqKSZidWZbMjJdID0gMHgwMDA0OworCSoodW5zaWduZWQgc2hvcnQgKikmYnVmWzI0XSA9IDB4MTQzMzsKIAotICAgICAgICBwcmludGYoIlxuU1JvbTogIFdyaXRpbmcgaTgyNTU5IGluZm8gLi4uLi4uLi4gIik7Ci0gICAgICAgIGlmIChlZXBybzEwMF9zcm9tX3N0b3JlICgodW5zaWduZWQgc2hvcnQgKilidWYpID09IC0xKQotICAgICAgICAgICAgcHJpbnRmKCJGQUlMRURcbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGYoIk9LXG4iKTsKKwlwcmludGYoIlxuU1JvbTogIFdyaXRpbmcgaTgyNTU5IGluZm8gLi4uLi4uLi4gIik7CisJaWYgKGVlcHJvMTAwX3Nyb21fc3RvcmUgKCh1bnNpZ25lZCBzaG9ydCAqKWJ1ZikgPT0gLTEpCisJICAgIHByaW50ZigiRkFJTEVEXG4iKTsKKwllbHNlCisJICAgIHByaW50ZigiT0tcbiIpOwogCi0gICAgICAgIC8qIHVwZGF0ZSBDUkMgKi8KLSAgICAgICAgZWVyZXYuY3JjID0gZWxfc3JvbV9jaGVja3N1bSgodV9jaGFyICopZWVyZXYuYm9hcmQsIGVlcmV2LnNpemUpOworCS8qIHVwZGF0ZSBDUkMgKi8KKwllZXJldi5jcmMgPSBlbF9zcm9tX2NoZWNrc3VtKCh1X2NoYXIgKillZXJldi5ib2FyZCwgZWVyZXYuc2l6ZSk7CiAKLSAgICAgICAgLyogd3JpdGUgbmV3IHZhbHVlcyAqLwotICAgICAgICBwcmludGYoIlxuU1JvbTogIFdyaXRpbmcgcmV2aXNpb24gaW5mbyAuLi4uLi4gIik7Ci0gICAgICAgIGlmIChtcGMxMDdfc3JvbV9zdG9yZSgoQkxPQ0tfU0laRS1zaXplb2YocmV2aW5mbykpLCAodV9jaGFyICopJmVlcmV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyZXZpbmZvKSwgU0VDT05EX0RFVklDRSwgRklSU1RfQkxPQ0spID09IC0xKQotICAgICAgICAgICAgcHJpbnRmKCJGQUlMRURcblxuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiT0tcblxuIik7CisJLyogd3JpdGUgbmV3IHZhbHVlcyAqLworCXByaW50ZigiXG5TUm9tOiAgV3JpdGluZyByZXZpc2lvbiBpbmZvIC4uLi4uLiAiKTsKKwlpZiAobXBjMTA3X3Nyb21fc3RvcmUoKEJMT0NLX1NJWkUtc2l6ZW9mKHJldmluZm8pKSwgKHVfY2hhciAqKSZlZXJldiwKKwkJCSAgICBzaXplb2YocmV2aW5mbyksIFNFQ09ORF9ERVZJQ0UsIEZJUlNUX0JMT0NLKSA9PSAtMSkKKwkgICAgcHJpbnRmKCJGQUlMRURcblxuIik7CisJZWxzZQorCSAgICBwcmludGYoIk9LXG5cbiIpOwogCi0gICAgICAgIC8qIHdyaXRlIG5ldyB2YWx1ZXMgYXMgc2hhZG93IGltYWdlIHRvIG52cmFtICovCi0gICAgICAgIG52cmFtX3dyaXRlIChDRkdfTlZfU1JPTV9DT1BZX0FERFIsICh2b2lkICopJmVlcmV2LCBDRkdfU1JPTV9TSVpFKTsKKwkvKiB3cml0ZSBuZXcgdmFsdWVzIGFzIHNoYWRvdyBpbWFnZSB0byBudnJhbSAqLworCW52cmFtX3dyaXRlIChDRkdfTlZfU1JPTV9DT1BZX0FERFIsICh2b2lkICopJmVlcmV2LCBDRkdfU1JPTV9TSVpFKTsKIAogICAgIH0gLyppZiAoaW5pdFNyb20pICovCiAKICAgICAvKiBjb3B5IGN1cnJlbnQgdmFsdWVzIGFzIHNoYWRvdyBpbWFnZSB0byBudnJhbSAqLwogICAgIGlmIChpbml0U3JvbSA9PSAwICYmIGNvcHlOdiA9PSAxKQotICAgICAgICBudnJhbV93cml0ZSAoQ0ZHX05WX1NST01fQ09QWV9BRERSLCAodm9pZCAqKSZlZXJldiwgQ0ZHX1NST01fU0laRSk7CisJbnZyYW1fd3JpdGUgKENGR19OVl9TUk9NX0NPUFlfQUREUiwgKHZvaWQgKikmZWVyZXYsIENGR19TUk9NX1NJWkUpOwogCiAgICAgLyogdXBkYXRlIGVudmlyb25tZW50ICovCiAgICAgc3ByaW50ZiAoYnVmLCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAotICAgICAgICAgICAgZWVyZXYuZXRoZXJhZGRyWzBdLCBlZXJldi5ldGhlcmFkZHJbMV0sCi0gICAgICAgICAgICBlZXJldi5ldGhlcmFkZHJbMl0sIGVlcmV2LmV0aGVyYWRkclszXSwKLSAgICAgICAgICAgIGVlcmV2LmV0aGVyYWRkcls0XSwgZWVyZXYuZXRoZXJhZGRyWzVdKTsKKwkgICAgZWVyZXYuZXRoZXJhZGRyWzBdLCBlZXJldi5ldGhlcmFkZHJbMV0sCisJICAgIGVlcmV2LmV0aGVyYWRkclsyXSwgZWVyZXYuZXRoZXJhZGRyWzNdLAorCSAgICBlZXJldi5ldGhlcmFkZHJbNF0sIGVlcmV2LmV0aGVyYWRkcls1XSk7CiAgICAgc2V0ZW52ICgiZXRoYWRkciIsIGJ1Zik7CiAKICAgICAvKiBzZXQgc2VyaWFsIGNvbnNvbGUgYXMgZGVmYXVsdCAqLwogICAgIGlmICgocHRyID0gZ2V0ZW52ICgiY29uc29sZSIpKSA9PSBOVUxMKQotICAgICAgICBzZXRlbnYgKCJjb25zb2xlIiwgInNlcmlhbCIpOworCXNldGVudiAoImNvbnNvbGUiLCAic2VyaWFsIik7CiAKICAgICAvKiBwcmludCBhY3R1YWwgYm9hcmQgaWRlbnRpZmljYXRpb24gKi8KICAgICBwcmludGYoIklkZW50OiAlcyAgU2VyICVzICBSZXYgJWMlY1xuIiwKLSAgICAgICAgICAgIGVlcmV2LmJvYXJkLCAoY2hhciAqKSZlZXJldi5zZXJpYWwsCi0gICAgICAgICAgICBlZXJldi5yZXZpc2lvblswXVswXSwgZWVyZXYucmV2aXNpb25bMF1bMV0pOworCSAgICBlZXJldi5ib2FyZCwgKGNoYXIgKikmZWVyZXYuc2VyaWFsLAorCSAgICBlZXJldi5yZXZpc2lvblswXVswXSwgZWVyZXYucmV2aXNpb25bMF1bMV0pOwogCiAgICAgcmV0dXJuICgwKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2VscHBjL21wYzEwN19pMmMuYyBiL2JvYXJkL2VsdGVjL2VscHBjL21wYzEwN19pMmMuYwppbmRleCBhNGJmNTk5Li5hZTY2NDJlIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9lbHBwYy9tcGMxMDdfaTJjLmMKKysrIGIvYm9hcmQvZWx0ZWMvZWxwcGMvbXBjMTA3X2kyYy5jCkBAIC00MywxMyArNDMsMTMgQEAKIAogICAgIGZvciAoOyBzaXplOyBzaXplLS0pCiAgICAgewotICAgICAgICBieXRlID0gKnB0cisrOwotICAgICAgICBmb3IgKGkgPSA4OyBpOyBpLS0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGYgPSAgKChieXRlICYgMSkgXiAoYWNjdSAmIDEpKSA/IDB4ODQwODMwMDEgOiAwOwotICAgICAgICAgICAgYWNjdSA+Pj0gMTsgYWNjdSBePSBmOwotICAgICAgICAgICAgYnl0ZSA+Pj0gMTsKLSAgICAgICAgfQorCWJ5dGUgPSAqcHRyKys7CisJZm9yIChpID0gODsgaTsgaS0tKQorCXsKKwkgICAgZiA9ICAoKGJ5dGUgJiAxKSBeIChhY2N1ICYgMSkpID8gMHg4NDA4MzAwMSA6IDA7CisJICAgIGFjY3UgPj49IDE7IGFjY3UgXj0gZjsKKwkgICAgYnl0ZSA+Pj0gMTsKKwl9CiAgICAgfQogICAgIHJldHVybihhY2N1KTsKIH0KQEAgLTYyLDEzICs2MiwxMyBAQAogCiAgICAgd2hpbGUgKCgoeCA9IGluMzJyKE1QQzEwN19JMkNTUikpICYgMHg4MikgIT0gMHg4MikKICAgICB7Ci0gICAgICAgIGlmICghdGltZW91dC0tKQotICAgICAgICAgICAgcmV0dXJuIC0xOworCWlmICghdGltZW91dC0tKQorCSAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgaWYgKHggJiAweDEwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICAgICB9CiAgICAgb3V0MzJyKE1QQzEwN19JMkNTUiwgMCk7CiAKQEAgLTgxLDggKzgxLDggQEAKIHsKICAgICB3aGlsZSAoaW4zMnIoTVBDMTA3X0kyQ1NSKSAmIDB4MjApCiAgICAgewotICAgICAgICBpZiAoIXRpbWVvdXQtLSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKwlpZiAoIXRpbWVvdXQtLSkKKwkgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTk5LDcgKzk5LDcgQEAKICAgICBpbnQgZGF0YTsKIAogICAgIGlmICghbXBjMTA3X2V1bWJfYWRkcikKLSAgICAgICAgcmV0dXJuIC02OworCXJldHVybiAtNjsKIAogICAgIG1wYzEwN19pMmNfd2FpdF9pZGxlICh0aW1lb3V0KTsKIApAQCAtMTEyLDE1ICsxMTIsMTUgQEAKIAogICAgIGlmIChtcGMxMDdfaTJjX3dhaXQodGltZW91dCkgPCAwKQogICAgIHsKLSAgICAgICAgcHJpbnRmKCJtcGMxMDdfaTJjX3JlYWQgRXJyb3IgMVxuIik7Ci0gICAgICAgIHJldHVybiAtMjsKKwlwcmludGYoIm1wYzEwN19pMmNfcmVhZCBFcnJvciAxXG4iKTsKKwlyZXR1cm4gLTI7CiAgICAgfQogCiAgICAgaWYgKGluMzJyKE1QQzEwN19JMkNTUikmMHgxKQogICAgIHsKLSAgICAgICAgLyogR2VuZXJhdGUgU1RPUCBjb25kaXRpb247IGRldmljZSBidXN5IG9yIG5vdCBleGlzdGluZyAqLwotICAgICAgICBvdXQzMnIoTVBDMTA3X0kyQ0NSLCAweDgwKTsKLSAgICAgICAgcmV0dXJuIC0xOworCS8qIEdlbmVyYXRlIFNUT1AgY29uZGl0aW9uOyBkZXZpY2UgYnVzeSBvciBub3QgZXhpc3RpbmcgKi8KKwlvdXQzMnIoTVBDMTA3X0kyQ0NSLCAweDgwKTsKKwlyZXR1cm4gLTE7CiAgICAgfQogCiAgICAgLyogRGF0YSBhZGRyZXNzICovCkBAIC0xMjgsOCArMTI4LDggQEAKIAogICAgIGlmIChtcGMxMDdfaTJjX3dhaXQodGltZW91dCkgPCAwKQogICAgIHsKLSAgICAgICAgcHJpbnRmKCJtcGMxMDdfaTJjX3JlYWQgRXJyb3IgMlxuIik7Ci0gICAgICAgIHJldHVybiAtMzsKKwlwcmludGYoIm1wYzEwN19pMmNfcmVhZCBFcnJvciAyXG4iKTsKKwlyZXR1cm4gLTM7CiAgICAgfQogCiAgICAgLyogU3dpdGNoIHRvIHJlYWQgLSByZXN0YXJ0ICovCkBAIC0xMzgsOCArMTM4LDggQEAKIAogICAgIGlmIChtcGMxMDdfaTJjX3dhaXQodGltZW91dCkgPCAwKQogICAgIHsKLSAgICAgICAgcHJpbnRmKCJtcGMxMDdfaTJjX3JlYWQgRXJyb3IgM1xuIik7Ci0gICAgICAgIHJldHVybiAtNDsKKwlwcmludGYoIm1wYzEwN19pMmNfcmVhZCBFcnJvciAzXG4iKTsKKwlyZXR1cm4gLTQ7CiAgICAgfQogCiAgICAgb3V0MzJyKE1QQzEwN19JMkNDUiwgMHhBOCk7IC8qIG5vIEFDSyAqLwpAQCAtMTQ3LDggKzE0Nyw4IEBACiAKICAgICBpZiAobXBjMTA3X2kyY193YWl0KHRpbWVvdXQpIDwgMCkKICAgICB7Ci0gICAgICAgIHByaW50ZigibXBjMTA3X2kyY19yZWFkIEVycm9yIDRcbiIpOwotICAgICAgICByZXR1cm4gLTU7CisJcHJpbnRmKCJtcGMxMDdfaTJjX3JlYWQgRXJyb3IgNFxuIik7CisJcmV0dXJuIC01OwogICAgIH0KICAgICAvKiBHZW5lcmF0ZSBTVE9QIGNvbmRpdGlvbiAqLwogICAgIG91dDMycihNUEMxMDdfSTJDQ1IsIDB4ODgpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gTVBDMTA3X0kyQ19USU1FT1VUOwogCiAgICAgaWYgKCFtcGMxMDdfZXVtYl9hZGRyKQotICAgICAgICByZXR1cm4gLTY7CisJcmV0dXJuIC02OwogCiAgICAgbXBjMTA3X2kyY193YWl0X2lkbGUodGltZW91dCk7CiAKQEAgLTE4NCw4ICsxODQsOCBAQAogCiAgICAgaWYgKG1wYzEwN19pMmNfd2FpdCh0aW1lb3V0KSA8IDApCiAgICAgewotICAgICAgICBwcmludGYoIm1wYzEwN19pMmNfd3JpdGUgRXJyb3IgMVxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKKwlwcmludGYoIm1wYzEwN19pMmNfd3JpdGUgRXJyb3IgMVxuIik7CisJcmV0dXJuIC0xOwogICAgIH0KIAogICAgIC8qIERhdGEgYWRkcmVzcyAqLwpAQCAtMTkzLDE2ICsxOTMsMTYgQEAKIAogICAgIGlmIChtcGMxMDdfaTJjX3dhaXQodGltZW91dCkgPCAwKQogICAgIHsKLSAgICAgICAgcHJpbnRmKCJtcGMxMDdfaTJjX3dyaXRlIEVycm9yIDJcbiIpOwotICAgICAgICByZXR1cm4gLTE7CisJcHJpbnRmKCJtcGMxMDdfaTJjX3dyaXRlIEVycm9yIDJcbiIpOworCXJldHVybiAtMTsKICAgICB9CiAKICAgICAvKiBXcml0ZSAqLwogICAgIG91dDMycihNUEMxMDdfSTJDRFIsIHZhbCk7CiAgICAgaWYgKG1wYzEwN19pMmNfd2FpdCh0aW1lb3V0KSA8IDApCiAgICAgewotICAgICAgICBwcmludGYoIm1wYzEwN19pMmNfd3JpdGUgRXJyb3IgM1xuIik7Ci0gICAgICAgIHJldHVybiAtMTsKKwlwcmludGYoIm1wYzEwN19pMmNfd3JpdGUgRXJyb3IgM1xuIik7CisJcmV0dXJuIC0xOwogICAgIH0KIAogICAgIC8qIEdlbmVyYXRlIFN0b3AgQ29uZGl0aW9uICovCkBAIC0yMjcsMzggKzIyNywzOCBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQogICAgIHsKLSAgICAgICAgdGltZW91dD0xMDA7Ci0gICAgICAgIGRvCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbCA9IG1wYzEwN19pMmNfcmVhZF9ieXRlIChkZXZpY2UsIGJsb2NrLCBhZGRyKTsKLSAgICAgICAgICAgIGlmICh2YWwgPCAtMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHByaW50ZigiaTJjX3JlYWRfZXJyb3IgJWQgYXQgZGV2ICV4IGJsb2NrICV4IGFkZHIgJXhcbiIsCi0gICAgICAgICAgICAgICAgICAgdmFsLCBkZXZpY2UsIGJsb2NrLCBhZGRyKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVvdXQ9PTApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmICgiaTJjX3JlYWRfZXJyb3I6IHRpbWVvdXQgYXQgZGV2ICV4IGJsb2NrICV4IGFkZHIgJXhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UsIGJsb2NrLCBhZGRyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aW1lb3V0LS07Ci0gICAgICAgIH0gd2hpbGUgKHZhbCA9PSAtMSk7IC8qIGlmIG5vIGFjazogdHJ5IGFnYWluISAqLworCXRpbWVvdXQ9MTAwOworCWRvCisJeworCSAgICB2YWwgPSBtcGMxMDdfaTJjX3JlYWRfYnl0ZSAoZGV2aWNlLCBibG9jaywgYWRkcik7CisJICAgIGlmICh2YWwgPCAtMSkKKwkgICAgeworCSAgICBwcmludGYoImkyY19yZWFkX2Vycm9yICVkIGF0IGRldiAleCBibG9jayAleCBhZGRyICV4XG4iLAorCQkgICB2YWwsIGRldmljZSwgYmxvY2ssIGFkZHIpOworCSAgICByZXR1cm4gLTE7CisJICAgIH0KKwkgICAgZWxzZSBpZiAodGltZW91dD09MCkKKwkgICAgeworCQlwcmludGYgKCJpMmNfcmVhZF9lcnJvcjogdGltZW91dCBhdCBkZXYgJXggYmxvY2sgJXggYWRkciAleFxuIiwKKwkJCWRldmljZSwgYmxvY2ssIGFkZHIpOworCQlyZXR1cm4gLTE7CisJICAgIH0KKwkgICAgdGltZW91dC0tOworCX0gd2hpbGUgKHZhbCA9PSAtMSk7IC8qIGlmIG5vIGFjazogdHJ5IGFnYWluISAqLwogCi0gICAgICAgICpwQnVmKysgPSAodW5zaWduZWQgY2hhcil2YWw7Ci0gICAgICAgIGFkZHIrKzsKKwkqcEJ1ZisrID0gKHVuc2lnbmVkIGNoYXIpdmFsOworCWFkZHIrKzsKIAotICAgICAgICBpZiAoKGFkZHIgPT0gMCkgJiYgKGkgIT0gY250LTEpKSAgICAvKiBpcyBpdCB0aGUgc2FtZSBibG9jayA/ICovCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChibG9jayA9PSBGSVJTVF9CTE9DSykKLSAgICAgICAgICAgICAgICBibG9jayA9IFNFQ09ORF9CTE9DSzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGYgKCJpYzJfcmVhZF9lcnJvcjogcmVhZCBiZXlvbmQgMi4gYmxvY2sgIVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKChhZGRyID09IDApICYmIChpICE9IGNudC0xKSkgICAgLyogaXMgaXQgdGhlIHNhbWUgYmxvY2sgPyAqLworCXsKKwkgICAgaWYgKGJsb2NrID09IEZJUlNUX0JMT0NLKQorCQlibG9jayA9IFNFQ09ORF9CTE9DSzsKKwkgICAgZWxzZQorCSAgICB7CisJCXByaW50ZiAoImljMl9yZWFkX2Vycm9yOiByZWFkIGJleW9uZCAyLiBibG9jayAhXG4iKTsKKwkJcmV0dXJuIC0xOworCSAgICB9CisJfQogICAgIH0KICAgICB1ZGVsYXkoMTAwMDAwKTsKICAgICByZXR1cm4gKGNudCk7CkBAIC0yNzcsMjAgKzI3NywyMCBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQogICAgIHsKLSAgICAgICAgd2hpbGUgKG1wYzEwN19pMmNfd3JpdGVfYnl0ZSAoZGV2aWNlLGJsb2NrLGFkZHIsKnBCdWYpID09IDEpOwotICAgICAgICBhZGRyKys7Ci0gICAgICAgIHBCdWYrKzsKKwl3aGlsZSAobXBjMTA3X2kyY193cml0ZV9ieXRlIChkZXZpY2UsYmxvY2ssYWRkciwqcEJ1ZikgPT0gMSk7CisJYWRkcisrOworCXBCdWYrKzsKIAotICAgICAgICBpZiAoKGFkZHIgPT0gMCkgJiYgKGkgIT0gY250LTEpKSAgICAgLyogaXMgaXQgdGhlIHNhbWUgYmxvY2sgPyAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYmxvY2sgPT0gRklSU1RfQkxPQ0spCi0gICAgICAgICAgICAgICAgYmxvY2sgPSBTRUNPTkRfQkxPQ0s7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmICgiaWMyX3dyaXRlX2Vycm9yOiB3cml0ZSBiZXlvbmQgMi4gYmxvY2sgIVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKChhZGRyID09IDApICYmIChpICE9IGNudC0xKSkgICAgIC8qIGlzIGl0IHRoZSBzYW1lIGJsb2NrID8gKi8KKwl7CisJICAgIGlmIChibG9jayA9PSBGSVJTVF9CTE9DSykKKwkJYmxvY2sgPSBTRUNPTkRfQkxPQ0s7CisJICAgIGVsc2UKKwkgICAgeworCQlwcmludGYgKCJpYzJfd3JpdGVfZXJyb3I6IHdyaXRlIGJleW9uZCAyLiBibG9jayAhXG4iKTsKKwkJcmV0dXJuIC0xOworCSAgICB9CisJfQogICAgIH0KICAgICB1ZGVsYXkoMTAwMDAwKTsKICAgICByZXR1cm4oY250KTsKQEAgLTMwMyw5ICszMDMsOSBAQAogICAgIHVuc2lnbmVkIGxvbmcgeDsKIAogICAgIGlmIChldW1iX2FkZHIpCi0gICAgICAgIG1wYzEwN19ldW1iX2FkZHIgPSBldW1iX2FkZHI7CisJbXBjMTA3X2V1bWJfYWRkciA9IGV1bWJfYWRkcjsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiAtMTsKKwlyZXR1cm4gLTE7CiAKICAgICAvKiBTZXQgSTJDIGNsb2NrICovCiAgICAgeCA9IGluMzJyKE1QQzEwN19JMkNGRFIpICYgMHhmZmZmZmYwMDsKZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2VscHBjL3BjaS5jIGIvYm9hcmQvZWx0ZWMvZWxwcGMvcGNpLmMKaW5kZXggMmJiYjVmMi4uNWIxMTVlYSAxMDA2NDQKLS0tIGEvYm9hcmQvZWx0ZWMvZWxwcGMvcGNpLmMKKysrIGIvYm9hcmQvZWx0ZWMvZWxwcGMvcGNpLmMKQEAgLTQyLDQ0ICs0Miw0NCBAQAogICAgIGhvc2UtPmxhc3RfYnVzbm8gPSAweGZmOwogCiAgICAgcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDAsCi0gICAgICAgIENGR19QQ0lfTUVNT1JZX0JVUywKLSAgICAgICAgQ0ZHX1BDSV9NRU1PUllfUEhZUywKLSAgICAgICAgQ0ZHX1BDSV9NRU1PUllfU0laRSwKLSAgICAgICAgUENJX1JFR0lPTl9NRU0gfCBQQ0lfUkVHSU9OX01FTU9SWSk7CisJQ0ZHX1BDSV9NRU1PUllfQlVTLAorCUNGR19QQ0lfTUVNT1JZX1BIWVMsCisJQ0ZHX1BDSV9NRU1PUllfU0laRSwKKwlQQ0lfUkVHSU9OX01FTSB8IFBDSV9SRUdJT05fTUVNT1JZKTsKIAogICAgIC8qIFBDSSBtZW1vcnkgc3BhY2UgKi8KICAgICBwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMSwKLSAgICAgICAgQ0ZHX1BDSV9NRU1fQlVTLAotICAgICAgICBDRkdfUENJX01FTV9QSFlTLAotICAgICAgICBDRkdfUENJX01FTV9TSVpFLAotICAgICAgICBQQ0lfUkVHSU9OX01FTSk7CisJQ0ZHX1BDSV9NRU1fQlVTLAorCUNGR19QQ0lfTUVNX1BIWVMsCisJQ0ZHX1BDSV9NRU1fU0laRSwKKwlQQ0lfUkVHSU9OX01FTSk7CiAKICAgICAvKiBJU0EvUENJIG1lbW9yeSBzcGFjZSAqLwogICAgIHBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAyLAotICAgICAgICBDRkdfSVNBX01FTV9CVVMsCi0gICAgICAgIENGR19JU0FfTUVNX1BIWVMsCi0gICAgICAgIENGR19JU0FfTUVNX1NJWkUsCi0gICAgICAgIFBDSV9SRUdJT05fTUVNKTsKKwlDRkdfSVNBX01FTV9CVVMsCisJQ0ZHX0lTQV9NRU1fUEhZUywKKwlDRkdfSVNBX01FTV9TSVpFLAorCVBDSV9SRUdJT05fTUVNKTsKIAogICAgIC8qIFBDSSBJL08gc3BhY2UgKi8KICAgICBwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMywKLSAgICAgICAgQ0ZHX1BDSV9JT19CVVMsCi0gICAgICAgIENGR19QQ0lfSU9fUEhZUywKLSAgICAgICAgQ0ZHX1BDSV9JT19TSVpFLAotICAgICAgICBQQ0lfUkVHSU9OX0lPKTsKKwlDRkdfUENJX0lPX0JVUywKKwlDRkdfUENJX0lPX1BIWVMsCisJQ0ZHX1BDSV9JT19TSVpFLAorCVBDSV9SRUdJT05fSU8pOwogCiAgICAgLyogSVNBL1BDSSBJL08gc3BhY2UgKi8KICAgICBwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgNCwKLSAgICAgICAgQ0ZHX0lTQV9JT19CVVMsCi0gICAgICAgIENGR19JU0FfSU9fUEhZUywKLSAgICAgICAgQ0ZHX0lTQV9JT19TSVpFLAotICAgICAgICBQQ0lfUkVHSU9OX0lPKTsKKwlDRkdfSVNBX0lPX0JVUywKKwlDRkdfSVNBX0lPX1BIWVMsCisJQ0ZHX0lTQV9JT19TSVpFLAorCVBDSV9SRUdJT05fSU8pOwogCiAgICAgaG9zZS0+cmVnaW9uX2NvdW50ID0gNTsKIAogICAgIHBjaV9zZXR1cF9pbmRpcmVjdChob3NlLAotICAgICAgICBNUEMxMDZfUkVHX0FERFIsCi0gICAgICAgIE1QQzEwNl9SRUdfREFUQSk7CisJTVBDMTA2X1JFR19BRERSLAorCU1QQzEwNl9SRUdfREFUQSk7CiAKICAgICBwY2lfcmVnaXN0ZXJfaG9zZShob3NlKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZWx0ZWMvZWxwcGMvc3JvbS5oIGIvYm9hcmQvZWx0ZWMvZWxwcGMvc3JvbS5oCmluZGV4IDc5MjRiY2QuLmMxOGFiOTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL2VscHBjL3Nyb20uaAorKysgYi9ib2FyZC9lbHRlYy9lbHBwYy9zcm9tLmgKQEAgLTgxLDE4ICs4MSwxOCBAQAogCiB1bnNpZ25lZCBsb25nIGVsX3Nyb21fY2hlY2tzdW0gKHVuc2lnbmVkIGNoYXIgKnB0ciwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGludCBlbF9zcm9tX2xvYWQgICh1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNudCwKLSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRldmljZSwgdW5zaWduZWQgY2hhciBibG9jayk7CisJCSAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJsb2NrKTsKIGludCBlbF9zcm9tX3N0b3JlICh1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNudCwKLSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRldmljZSwgdW5zaWduZWQgY2hhciBibG9jayk7CisJCSAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJsb2NrKTsKIAogaW50IG1wYzEwN19pMmNfaW5pdCAodW5zaWduZWQgbG9uZyBldW1iX2FkZHIsIHVuc2lnbmVkIGxvbmcgZGl2aWRlcik7CiBpbnQgbXBjMTA3X2kyY19yZWFkX2J5dGUgKHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJsb2NrLCB1bnNpZ25lZCBjaGFyIG9mZnNldCk7CiBpbnQgbXBjMTA3X2kyY193cml0ZV9ieXRlICh1bnNpZ25lZCBjaGFyIGRldmljZSwgdW5zaWduZWQgY2hhciBibG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyIHZhbCk7CisJCQkgICB1bnNpZ25lZCBjaGFyIG9mZnNldCwgdW5zaWduZWQgY2hhciB2YWwpOwogaW50IG1wYzEwN19zcm9tX2xvYWQgKHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciAqcEJ1ZiwgaW50IGNudCwKLSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRldmljZSwgdW5zaWduZWQgY2hhciBibG9jayk7CisJCSAgICAgIHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGJsb2NrKTsKIGludCBtcGMxMDdfc3JvbV9zdG9yZSAodW5zaWduZWQgY2hhciBhZGRyLCB1bnNpZ25lZCBjaGFyICpwQnVmLCBpbnQgY250LAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRldmljZSwgdW5zaWduZWQgY2hhciBibG9jayk7CisJCSAgICAgICB1bnNpZ25lZCBjaGFyIGRldmljZSwgdW5zaWduZWQgY2hhciBibG9jayk7CiAKIGludCBkY19zcm9tX2xvYWQgKHVuc2lnbmVkIHNob3J0ICpkZXN0KTsKIGludCBkY19zcm9tX3N0b3JlICh1bnNpZ25lZCBzaG9ydCAqc3JjKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL2VscHBjL3UtYm9vdC5sZHMgYi9ib2FyZC9lbHRlYy9lbHBwYy91LWJvb3QubGRzCmluZGV4IGRlNTBiZjQuLjBkZmE4YzAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL2VscHBjL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZWx0ZWMvZWxwcGMvdS1ib290LmxkcwpAQCAtMTA2LDYgKzEwNiwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZWx0ZWMvbWhwYy9NYWtlZmlsZSBiL2JvYXJkL2VsdGVjL21ocGMvTWFrZWZpbGUKaW5kZXggZWYxNzNkMC4uMTNjZTlmYyAxMDA2NDQKLS0tIGEvYm9hcmQvZWx0ZWMvbWhwYy9NYWtlZmlsZQorKysgYi9ib2FyZC9lbHRlYy9taHBjL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9lbHRlYy9taHBjL2NvbmZpZy5tayBiL2JvYXJkL2VsdGVjL21ocGMvY29uZmlnLm1rCmluZGV4IDYwN2ViYmMuLjAzOTM0ZGUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VsdGVjL21ocGMvY29uZmlnLm1rCisrKyBiL2JvYXJkL2VsdGVjL21ocGMvY29uZmlnLm1rCkBAIC0zMSwxOSArMzEsMyBAQAogCiBURVhUX0JBU0UgPSAweGZlMDAwMDAwCiAvKlRFWFRfQkFTRSAgPSAweDAwMjAwMDAwICovCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL21ocGMvZmxhc2guYyBiL2JvYXJkL2VsdGVjL21ocGMvZmxhc2guYwppbmRleCBlOWM4Zjk4Li40Y2M2NmE5IDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9taHBjL2ZsYXNoLmMKKysrIGIvYm9hcmQvZWx0ZWMvbWhwYy9mbGFzaC5jCkBAIC0xOTMsMTMgKzE5MywxMyBAQAogCiAgICBzd2l0Y2ggKHZhbHVlKSB7CiAgICBjYXNlIChGUFcpSU5URUxfSURfMjhGNjQwSjUgOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEY2NDBKNSA7Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDY0OwotICAgICAgICBpbmZvLT5zaXplID0gMHgwMDgwMDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgLyogPT4gOCBNQiAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEY2NDBKNSA7CisJaW5mby0+c2VjdG9yX2NvdW50ID0gNjQ7CisJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgLyogPT4gOCBNQiAgICAgKi8KIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwlkZWZhdWx0OgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CiAJCWJyZWFrOwogCX0KIApAQCAtNDI5LDI1ICs0MjksMyBAQAogCiAJcmV0dXJuICgwKTsKIH0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZWx0ZWMvbWhwYy9taHBjLmMgYi9ib2FyZC9lbHRlYy9taHBjL21ocGMuYwppbmRleCA4MWY4MjBhLi44Mzk1MmQ4IDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9taHBjL21ocGMuYworKysgYi9ib2FyZC9lbHRlYy9taHBjL21ocGMuYwpAQCAtNDAsMTcgKzQwLDE3IEBACiAKIGV4dGVybiB2b2lkIGVlcHJvbV9pbml0ICAodm9pZCk7CiBleHRlcm4gaW50ICBlZXByb21fcmVhZCAgKHVuc2lnbmVkIGRldl9hZGRyLCB1bnNpZ25lZCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgY250KTsKKwkJCSAgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBjbnQpOwogZXh0ZXJuIGludCAgZWVwcm9tX3dyaXRlICh1bnNpZ25lZCBkZXZfYWRkciwgdW5zaWduZWQgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGNudCk7CisJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgY250KTsKIAogLyogZ2xvYmFscyAqLwogdm9pZCAqdmlkZW9faHdfaW5pdCh2b2lkKTsKIHZvaWQgdmlkZW9fc2V0X2x1dCAodW5zaWduZWQgaW50IGluZGV4LCAgICAgLyogY29sb3IgbnVtYmVyICovCi0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgciwgICAgICAgIC8qIHJlZCAqLwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGcsICAgICAgICAvKiBncmVlbiAqLwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGIgICAgICAgICAvKiBibHVlICovCi0gICAgICAgICAgICAgICAgICAgICk7CisJCSAgICB1bnNpZ25lZCBjaGFyIHIsICAgICAgICAvKiByZWQgKi8KKwkJICAgIHVuc2lnbmVkIGNoYXIgZywgICAgICAgIC8qIGdyZWVuICovCisJCSAgICB1bnNpZ25lZCBjaGFyIGIgICAgICAgICAvKiBibHVlICovCisJCSAgICApOwogCiBHcmFwaGljRGV2aWNlIGdkZXY7CiAKQEAgLTE1Myw5ICsxNTMsOSBAQAogICAgIHJldmluZm8gIG1ocGNSZXZJbmZvOwogICAgIGNoYXIgICAgIG5pZFszMl07CiAgICAgY2hhciAgICAgKm1ocGNTZW5zb3JUeXBlc1tdID0geyAiT01OSVZJU09OIE9WNzYxMC83NjIwIGNvbG9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPTU5JVklTT04gT1Y3MTEwIGImdyIsIE5VTEwgfTsKKwkJCQkgICAgIk9NTklWSVNPTiBPVjcxMTAgYiZ3IiwgTlVMTCB9OwogICAgIGNoYXIgICAgIGhleFsyM10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSB9OworCQkJIDAsIDAsIDAsIDAsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUgfTsKICAgICBpbnQgICAgICBpOwogCiAgICAgLyogY2hlY2sgcmV2aXNpb24gZGF0YSAqLwpAQCAtMTY2LDYyICsxNjYsNjIgQEAKICAgICBwcmludGYgKCJFbnRlciByZXZpc2lvbiBudW1iZXIgKDAtOSk6ICVjICAiLCBtaHBjUmV2SW5mby5yZXZpc2lvblswXSk7CiAgICAgaWYgKDAgIT0gcmVhZGxpbmUgKE5VTEwpKQogICAgIHsKLSAgICAgICAgbWhwY1JldkluZm8ucmV2aXNpb25bMF0gPSAoY2hhcil0b3VwcGVyKGNvbnNvbGVfYnVmZmVyWzBdKTsKKwltaHBjUmV2SW5mby5yZXZpc2lvblswXSA9IChjaGFyKXRvdXBwZXIoY29uc29sZV9idWZmZXJbMF0pOwogICAgIH0KIAogICAgIHByaW50ZiAoIkVudGVyIHJldmlzaW9uIGNoYXJhY3RlciAoQS1aKTogJWMgICIsIG1ocGNSZXZJbmZvLnJldmlzaW9uWzFdKTsKICAgICBpZiAoMSA9PSByZWFkbGluZSAoTlVMTCkpCiAgICAgewotICAgICAgICBtaHBjUmV2SW5mby5yZXZpc2lvblsxXSA9IChjaGFyKXRvdXBwZXIoY29uc29sZV9idWZmZXJbMF0pOworCW1ocGNSZXZJbmZvLnJldmlzaW9uWzFdID0gKGNoYXIpdG91cHBlcihjb25zb2xlX2J1ZmZlclswXSk7CiAgICAgfQogCiAgICAgcHJpbnRmKCJFbnRlciBib2FyZCBuYW1lIChWLVhYWFgtWFhYWCk6ICVzICAiLCAoY2hhciAqKSZtaHBjUmV2SW5mby5ib2FyZCk7CiAgICAgaWYgKDExID09IHJlYWRsaW5lIChOVUxMKSkKICAgICB7Ci0gICAgICAgIGZvciAoaT0wOyBpPDExOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1ocGNSZXZJbmZvLmJvYXJkW2ldID0gIChjaGFyKXRvdXBwZXIoY29uc29sZV9idWZmZXJbaV0pOwotICAgICAgICAgICAgbWhwY1JldkluZm8uYm9hcmRbMTFdID0gJ1wwJzsKLSAgICAgICAgfQorCWZvciAoaT0wOyBpPDExOyBpKyspCisJeworCSAgICBtaHBjUmV2SW5mby5ib2FyZFtpXSA9ICAoY2hhcil0b3VwcGVyKGNvbnNvbGVfYnVmZmVyW2ldKTsKKwkgICAgbWhwY1JldkluZm8uYm9hcmRbMTFdID0gJ1wwJzsKKwl9CiAgICAgfQogCiAgICAgcHJpbnRmKCJTdXBwb3J0ZWQgc2Vuc29yIHR5cGVzOlxuIik7CiAgICAgaT0wOwogICAgIGRvCiAgICAgewotICAgICAgICBwcmludGYoIlxuICAgIFwnJWRcJyA6ICVzXG4iLCBpLCBtaHBjU2Vuc29yVHlwZXNbaV0pOworCXByaW50ZigiXG4gICAgXCclZFwnIDogJXNcbiIsIGksIG1ocGNTZW5zb3JUeXBlc1tpXSk7CiAgICAgfSB3aGlsZSAoIG1ocGNTZW5zb3JUeXBlc1srK2ldICE9IE5VTEwgKTsKIAogICAgIGRvCiAgICAgewotICAgICAgICBwcmludGYoIlxuRW50ZXIgc2Vuc29yIG51bWJlciAoMC0yNTUpOiAlZCAgIiwgKGludCltaHBjUmV2SW5mby5zZW5zb3IgKTsKLSAgICAgICAgaWYgKDAgIT0gcmVhZGxpbmUgKE5VTEwpKQotICAgICAgICB7Ci0gICAgICAgIG1ocGNSZXZJbmZvLnNlbnNvciA9ICh1bnNpZ25lZCBjaGFyKXNpbXBsZV9zdHJ0b3VsKGNvbnNvbGVfYnVmZmVyLCBOVUxMLCAxMCk7Ci0gICAgICAgIH0KKwlwcmludGYoIlxuRW50ZXIgc2Vuc29yIG51bWJlciAoMC0yNTUpOiAlZCAgIiwgKGludCltaHBjUmV2SW5mby5zZW5zb3IgKTsKKwlpZiAoMCAhPSByZWFkbGluZSAoTlVMTCkpCisJeworCW1ocGNSZXZJbmZvLnNlbnNvciA9ICh1bnNpZ25lZCBjaGFyKXNpbXBsZV9zdHJ0b3VsKGNvbnNvbGVfYnVmZmVyLCBOVUxMLCAxMCk7CisJfQogICAgIH0gd2hpbGUgKCBtaHBjUmV2SW5mby5zZW5zb3IgPj0gaSApOwogCiAgICAgcHJpbnRmKCJFbnRlciBzZXJpYWwgbnVtYmVyOiAlcyAiLCAoY2hhciAqKSZtaHBjUmV2SW5mby5zZXJpYWwgKTsKICAgICBpZiAoNiA9PSByZWFkbGluZSAoTlVMTCkpCiAgICAgewotICAgICAgICBmb3IgKGk9MDsgaTw2OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgbWhwY1JldkluZm8uc2VyaWFsW2ldID0gY29uc29sZV9idWZmZXJbaV07Ci0gICAgICAgIH0KLSAgICAgICAgbWhwY1JldkluZm8uc2VyaWFsWzZdID0gJ1wwJzsKKwlmb3IgKGk9MDsgaTw2OyBpKyspCisJeworCW1ocGNSZXZJbmZvLnNlcmlhbFtpXSA9IGNvbnNvbGVfYnVmZmVyW2ldOworCX0KKwltaHBjUmV2SW5mby5zZXJpYWxbNl0gPSAnXDAnOwogICAgIH0KIAogICAgIHByaW50ZigiRW50ZXIgZXRoZXIgbm9kZSBJRCB3aXRoIGxlYWRpbmcgemVybyAoSEVYKTogJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICAiLAotICAgICAgICAgICAgICBtaHBjUmV2SW5mby5ldGhlcmFkZHJbMF0sIG1ocGNSZXZJbmZvLmV0aGVyYWRkclsxXSwKLSAgICAgICAgICAgICAgbWhwY1JldkluZm8uZXRoZXJhZGRyWzJdLCBtaHBjUmV2SW5mby5ldGhlcmFkZHJbM10sCi0gICAgICAgICAgICAgIG1ocGNSZXZJbmZvLmV0aGVyYWRkcls0XSwgbWhwY1JldkluZm8uZXRoZXJhZGRyWzVdICApOworCSAgICAgIG1ocGNSZXZJbmZvLmV0aGVyYWRkclswXSwgbWhwY1JldkluZm8uZXRoZXJhZGRyWzFdLAorCSAgICAgIG1ocGNSZXZJbmZvLmV0aGVyYWRkclsyXSwgbWhwY1JldkluZm8uZXRoZXJhZGRyWzNdLAorCSAgICAgIG1ocGNSZXZJbmZvLmV0aGVyYWRkcls0XSwgbWhwY1JldkluZm8uZXRoZXJhZGRyWzVdICApOwogICAgIGlmICgxMiA9PSByZWFkbGluZSAoTlVMTCkpCiAgICAgewotICAgICAgICBmb3IgKGk9MDsgaTwxMjsgaSs9MikKLSAgICAgICAgewotICAgICAgICBtaHBjUmV2SW5mby5ldGhlcmFkZHJbaT4+MV0gPSAoY2hhcikoMTYqaGV4W3RvdXBwZXIoY29uc29sZV9idWZmZXJbaV0pLScwJ10gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhbdG91cHBlcihjb25zb2xlX2J1ZmZlcltpKzFdKS0nMCddKTsKLSAgICAgICAgfQorCWZvciAoaT0wOyBpPDEyOyBpKz0yKQorCXsKKwltaHBjUmV2SW5mby5ldGhlcmFkZHJbaT4+MV0gPSAoY2hhcikoMTYqaGV4W3RvdXBwZXIoY29uc29sZV9idWZmZXJbaV0pLScwJ10gKworCQkJICAgICBoZXhbdG91cHBlcihjb25zb2xlX2J1ZmZlcltpKzFdKS0nMCddKTsKKwl9CiAgICAgfQogCiAgICAgLyogc2V0dXAgbmV3IHJldmlzaW9uIGRhdGEgKi8KQEAgLTIzMCwxNiArMjMwLDE2IEBACiAKICAgICAvKiBzZXQgZW52aXJvbm1lbnQgKi8KICAgICBzcHJpbnRmKCBuaWQsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsCi0gICAgICAgICAgICAgICAgICBtaHBjUmV2SW5mby5ldGhlcmFkZHJbMF0sIG1ocGNSZXZJbmZvLmV0aGVyYWRkclsxXSwKLSAgICAgICAgICAgICAgICAgIG1ocGNSZXZJbmZvLmV0aGVyYWRkclsyXSwgbWhwY1JldkluZm8uZXRoZXJhZGRyWzNdLAotICAgICAgICAgICAgICAgICAgbWhwY1JldkluZm8uZXRoZXJhZGRyWzRdLCBtaHBjUmV2SW5mby5ldGhlcmFkZHJbNV0pOworCQkgIG1ocGNSZXZJbmZvLmV0aGVyYWRkclswXSwgbWhwY1JldkluZm8uZXRoZXJhZGRyWzFdLAorCQkgIG1ocGNSZXZJbmZvLmV0aGVyYWRkclsyXSwgbWhwY1JldkluZm8uZXRoZXJhZGRyWzNdLAorCQkgIG1ocGNSZXZJbmZvLmV0aGVyYWRkcls0XSwgbWhwY1JldkluZm8uZXRoZXJhZGRyWzVdKTsKICAgICBzZXRlbnYoImV0aGFkZHIiLCBuaWQpOwogCiAgICAgLyogcHJpbnQgYWN0dWFsIGJvYXJkIGlkZW50aWZpY2F0aW9uICovCiAgICAgcHJpbnRmKCJJZGVudDogJXMgJXMgU2VyICVzIFJldiAlYyVjXG4iLAotICAgICAgICAgICAgbWhwY1JldkluZm8uYm9hcmQsIChtaHBjUmV2SW5mby5zZW5zb3I9PTA/ImNvbG9yIjoiYiZ3IiksCi0gICAgICAgICAgICAoY2hhciAqKSZtaHBjUmV2SW5mby5zZXJpYWwsCi0gICAgICAgICAgICBtaHBjUmV2SW5mby5yZXZpc2lvblswXSwgbWhwY1JldkluZm8ucmV2aXNpb25bMV0pOworCSAgICBtaHBjUmV2SW5mby5ib2FyZCwgKG1ocGNSZXZJbmZvLnNlbnNvcj09MD8iY29sb3IiOiJiJnciKSwKKwkgICAgKGNoYXIgKikmbWhwY1JldkluZm8uc2VyaWFsLAorCSAgICBtaHBjUmV2SW5mby5yZXZpc2lvblswXSwgbWhwY1JldkluZm8ucmV2aXNpb25bMV0pOwogCiAgICAgcmV0dXJuICgwKTsKIH0KQEAgLTMwOCwyOSArMzA4LDI5IEBACiAgICAgKihjZW50ZXIteCt5KnBpdGNoKSA9IGNvbG9yOwogICAgIHdoaWxlKHk+eCkKICAgICB7Ci0gICAgICAgIGlmIChkPDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGQgICArPSBkRTsKLSAgICAgICAgICAgIGRFICArPSAyOwotICAgICAgICAgICAgZFNFICs9IDI7Ci0gICAgICAgICAgICB4Kys7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBkICAgKz0gZFNFOwotICAgICAgICAgICAgZEUgICs9IDI7Ci0gICAgICAgICAgICBkU0UgKz0gNDsKLSAgICAgICAgICAgIHgrKzsKLSAgICAgICAgICAgIHktLTsKLSAgICAgICAgfQotICAgICAgICAqKGNlbnRlcit4K3kqcGl0Y2gpID0gY29sb3I7Ci0gICAgICAgICooY2VudGVyK3kreCpwaXRjaCkgPSBjb2xvcjsKLSAgICAgICAgKihjZW50ZXIreS14KnBpdGNoKSA9IGNvbG9yOwotICAgICAgICAqKGNlbnRlcit4LXkqcGl0Y2gpID0gY29sb3I7Ci0gICAgICAgICooY2VudGVyLXgteSpwaXRjaCkgPSBjb2xvcjsKLSAgICAgICAgKihjZW50ZXIteS14KnBpdGNoKSA9IGNvbG9yOwotICAgICAgICAqKGNlbnRlci15K3gqcGl0Y2gpID0gY29sb3I7Ci0gICAgICAgICooY2VudGVyLXgreSpwaXRjaCkgPSBjb2xvcjsKKwlpZiAoZDwwKQorCXsKKwkgICAgZCAgICs9IGRFOworCSAgICBkRSAgKz0gMjsKKwkgICAgZFNFICs9IDI7CisJICAgIHgrKzsKKwl9CisJZWxzZQorCXsKKwkgICAgZCAgICs9IGRTRTsKKwkgICAgZEUgICs9IDI7CisJICAgIGRTRSArPSA0OworCSAgICB4Kys7CisJICAgIHktLTsKKwl9CisJKihjZW50ZXIreCt5KnBpdGNoKSA9IGNvbG9yOworCSooY2VudGVyK3kreCpwaXRjaCkgPSBjb2xvcjsKKwkqKGNlbnRlcit5LXgqcGl0Y2gpID0gY29sb3I7CisJKihjZW50ZXIreC15KnBpdGNoKSA9IGNvbG9yOworCSooY2VudGVyLXgteSpwaXRjaCkgPSBjb2xvcjsKKwkqKGNlbnRlci15LXgqcGl0Y2gpID0gY29sb3I7CisJKihjZW50ZXIteSt4KnBpdGNoKSA9IGNvbG9yOworCSooY2VudGVyLXgreSpwaXRjaCkgPSBjb2xvcjsKICAgICB9CiB9CiAKQEAgLTM0NCwzMSArMzQ0LDMxIEBACiAgICAgLyogZHJhdyByYXN0ZXIgKi8KICAgICBmb3IgKGk9MDsgaTxMQ0RfVklERU9fUk9XUzsgaSs9MzIpCiAgICAgewotICAgICAgICBtZW1zZXQoKGNoYXIqKShMQ0RfVklERU9fQUREUitpKkxDRF9WSURFT19DT0xTKSwgTENEX1ZJREVPX0ZHLCBMQ0RfVklERU9fQ09MUyk7Ci0gICAgICAgIGZvciAobj1pKzE7bjxpKzMyO24rKykKLSAgICAgICAgICAgIG1lbXNldCgoY2hhciopKExDRF9WSURFT19BRERSK24qTENEX1ZJREVPX0NPTFMpLCBMQ0RfVklERU9fQkcsIExDRF9WSURFT19DT0xTKTsKKwltZW1zZXQoKGNoYXIqKShMQ0RfVklERU9fQUREUitpKkxDRF9WSURFT19DT0xTKSwgTENEX1ZJREVPX0ZHLCBMQ0RfVklERU9fQ09MUyk7CisJZm9yIChuPWkrMTtuPGkrMzI7bisrKQorCSAgICBtZW1zZXQoKGNoYXIqKShMQ0RfVklERU9fQUREUituKkxDRF9WSURFT19DT0xTKSwgTENEX1ZJREVPX0JHLCBMQ0RfVklERU9fQ09MUyk7CiAgICAgfQogCiAgICAgZm9yIChpPTA7IGk8TENEX1ZJREVPX0NPTFM7IGkrPTMyKQogICAgIHsKLSAgICAgICAgZm9yIChuPTA7IG48TENEX1ZJREVPX1JPV1M7IG4rKykKLSAgICAgICAgICAgICooY2hhciopKExDRF9WSURFT19BRERSK24qTENEX1ZJREVPX0NPTFMraSkgPSBMQ0RfVklERU9fRkc7CisJZm9yIChuPTA7IG48TENEX1ZJREVPX1JPV1M7IG4rKykKKwkgICAgKihjaGFyKikoTENEX1ZJREVPX0FERFIrbipMQ0RfVklERU9fQ09MUytpKSA9IExDRF9WSURFT19GRzsKICAgICB9CiAKICAgICAvKiBkcmF3IGdyYXkgYmFyICovCiAgICAgZGkgPSAoY2hhciAqKShMQ0RfVklERU9fQUREUiArIChMQ0RfVklERU9fQ09MUy0yNTYpLzY0KjMyICsgOTcqTENEX1ZJREVPX0NPTFMpOwogICAgIGZvciAobj0wOyBuPDYzOyBuKyspCiAgICAgewotICAgICAgICBmb3IgKGk9MDsgaTwyNTY7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgKmRpKysgPSAoY2hhcilpOwotICAgICAgICAgICAgKihkaStMQ0RfVklERU9fQ09MUyo2NCkgPSAoaSYxKSoyNTU7Ci0gICAgICAgIH0KLSAgICAgICAgZGkgKz0gTENEX1ZJREVPX0NPTFMtMjU2OworCWZvciAoaT0wOyBpPDI1NjsgaSsrKQorCXsKKwkgICAgKmRpKysgPSAoY2hhcilpOworCSAgICAqKGRpK0xDRF9WSURFT19DT0xTKjY0KSA9IChpJjEpKjI1NTsKKwl9CisJZGkgKz0gTENEX1ZJREVPX0NPTFMtMjU2OwogICAgIH0KIAogICAgIHZpZGVvX2NpcmNsZSAoKGNoYXIqKUxDRF9WSURFT19BRERSK0xDRF9WSURFT19DT0xTLzIrTENEX1ZJREVPX1JPV1MvMipMQ0RfVklERU9fQ09MUywKLSAgICAgICAgICAgICAgICAgIExDRF9WSURFT19ST1dTLzIsTENEX1ZJREVPX0ZHLCBMQ0RfVklERU9fQ09MUyk7CisJCSAgTENEX1ZJREVPX1JPV1MvMixMQ0RfVklERU9fRkcsIExDRF9WSURFT19DT0xTKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMzc3LDM2ICszNzcsMzYgQEAKIHsKICAgICB1bnNpZ25lZCBpbnQgaTsKICAgICB1bnNpZ25lZCBjaGFyIFJHQltdID0KLSAgICAgICAgewotICAgICAgICAweDAwLCAweDAwLCAweDAwLCAgIC8qIGJsYWNrICovCi0gICAgICAgIDB4ODAsIDB4ODAsIDB4ODAsICAgLyogZ3JheSAqLwotICAgICAgICAweGZmLCAweDAwLCAweDAwLCAgIC8qIHJlZCAqLwotICAgICAgICAweDAwLCAweGZmLCAweDAwLCAgIC8qIGdyZWVuICovCi0gICAgICAgIDB4MDAsIDB4MDAsIDB4ZmYsICAgLyogYmx1ZSAqLwotICAgICAgICAweDAwLCAweGZmLCAweGZmLCAgIC8qIGN5YW4gKi8KLSAgICAgICAgMHhmZiwgMHgwMCwgMHhmZiwgICAvKiBtYWdlbnRhICovCi0gICAgICAgIDB4ZmYsIDB4ZmYsIDB4MDAsICAgLyogeWVsbG93ICovCi0gICAgICAgIDB4ODAsIDB4MDAsIDB4MDAsICAgLyogZGFyayByZWQgKi8KLSAgICAgICAgMHgwMCwgMHg4MCwgMHgwMCwgICAvKiBkYXJrIGdyZWVuICovCi0gICAgICAgIDB4MDAsIDB4MDAsIDB4ODAsICAgLyogZGFyayBibHVlICovCi0gICAgICAgIDB4MDAsIDB4ODAsIDB4ODAsICAgLyogZGFyayBjeWFuICovCi0gICAgICAgIDB4ODAsIDB4MDAsIDB4ODAsICAgLyogZGFyayBtYWdlbnRhICovCi0gICAgICAgIDB4ODAsIDB4ODAsIDB4MDAsICAgLyogZGFyayB5ZWxsb3cgKi8KLSAgICAgICAgMHhjMCwgMHhjMCwgMHhjMCwgICAvKiBsaWdodCBncmF5ICovCi0gICAgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsICAgLyogd2hpdGUgKi8KLSAgICAgICAgfTsKKwl7CisJMHgwMCwgMHgwMCwgMHgwMCwgICAvKiBibGFjayAqLworCTB4ODAsIDB4ODAsIDB4ODAsICAgLyogZ3JheSAqLworCTB4ZmYsIDB4MDAsIDB4MDAsICAgLyogcmVkICovCisJMHgwMCwgMHhmZiwgMHgwMCwgICAvKiBncmVlbiAqLworCTB4MDAsIDB4MDAsIDB4ZmYsICAgLyogYmx1ZSAqLworCTB4MDAsIDB4ZmYsIDB4ZmYsICAgLyogY3lhbiAqLworCTB4ZmYsIDB4MDAsIDB4ZmYsICAgLyogbWFnZW50YSAqLworCTB4ZmYsIDB4ZmYsIDB4MDAsICAgLyogeWVsbG93ICovCisJMHg4MCwgMHgwMCwgMHgwMCwgICAvKiBkYXJrIHJlZCAqLworCTB4MDAsIDB4ODAsIDB4MDAsICAgLyogZGFyayBncmVlbiAqLworCTB4MDAsIDB4MDAsIDB4ODAsICAgLyogZGFyayBibHVlICovCisJMHgwMCwgMHg4MCwgMHg4MCwgICAvKiBkYXJrIGN5YW4gKi8KKwkweDgwLCAweDAwLCAweDgwLCAgIC8qIGRhcmsgbWFnZW50YSAqLworCTB4ODAsIDB4ODAsIDB4MDAsICAgLyogZGFyayB5ZWxsb3cgKi8KKwkweGMwLCAweGMwLCAweGMwLCAgIC8qIGxpZ2h0IGdyYXkgKi8KKwkweGZmLCAweGZmLCAweGZmLCAgIC8qIHdoaXRlICovCisJfTsKIAogICAgIHN3aXRjaCAoY2x1dF90eXBlKQogICAgIHsKICAgICBjYXNlIDE6Ci0gICAgICAgIGZvciAoaT0wOyBpPDI0MDsgaSsrKQotICAgICAgICAgICAgdmlkZW9fc2V0X2x1dCAoaSwgaSwgaSwgaSk7Ci0gICAgICAgIGZvciAoaT0wOyBpPDE2OyBpKyspCi0gICAgICAgICAgICB2aWRlb19zZXRfbHV0IChpKzI0MCwgUkdCW2kqM10sIFJHQltpKjMrMV0sIFJHQltpKjMrMl0pOwotICAgICAgICBicmVhazsKKwlmb3IgKGk9MDsgaTwyNDA7IGkrKykKKwkgICAgdmlkZW9fc2V0X2x1dCAoaSwgaSwgaSwgaSk7CisJZm9yIChpPTA7IGk8MTY7IGkrKykKKwkgICAgdmlkZW9fc2V0X2x1dCAoaSsyNDAsIFJHQltpKjNdLCBSR0JbaSozKzFdLCBSR0JbaSozKzJdKTsKKwlicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBmb3IgKGk9MDsgaTwyNTY7IGkrKykKLSAgICAgICAgICAgIHZpZGVvX3NldF9sdXQgKGksIGksIGksIGkpOworCWZvciAoaT0wOyBpPDI1NjsgaSsrKQorCSAgICB2aWRlb19zZXRfbHV0IChpLCBpLCBpLCBpKTsKICAgICB9CiB9CiAKQEAgLTQyMCw5ICs0MjAsOSBAQAogCiAgICAgLyogZW5hYmxlIHZpZGVvIG9ubHkgb24gQ0xVVCB2YWx1ZSAqLwogICAgIGlmICgocGVudiA9IGdldGVudiAoImNsdXQiKSkgIT0gTlVMTCkKLSAgICAgICAgY2x1dCA9ICh1X2ludClzaW1wbGVfc3RydG91bCAocGVudiwgTlVMTCwgMTApOworCWNsdXQgPSAodV9pbnQpc2ltcGxlX3N0cnRvdWwgKHBlbnYsIE5VTEwsIDEwKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBOVUxMOworCXJldHVybiBOVUxMOwogCiAgICAgLyogZGlzYWJsZSBncmFwaGljIGJlZm9yZSB3cml0ZSBMQ0QgcmVncy4gKi8KICAgICBpbW1yLT5pbV9sY2QubGNkX2xjY3IgPSAweDk2MDAwODY2OwpAQCAtNDMzLDcgKzQzMyw3IEBACiAgICAgaW1tci0+aW1fbGNkLmxjZF9sY3ZjciA9IDB4OTAwZjAwMjQ7CiAKICAgICBwcmludGYgKCJWaWRlbzogNjQweDQ4MCA4Qml0IEluZGV4IEx1dCAlc1xuIiwKLSAgICAgICAgICAgIChjbHV0PT0xPyIyNDAvMTYgKGdyYXkvdmdhKSI6IjI1NihncmF5KSIpKTsKKwkgICAgKGNsdXQ9PTE/IjI0MC8xNiAoZ3JheS92Z2EpIjoiMjU2KGdyYXkpIikpOwogCiAgICAgdmlkZW9fZGVmYXVsdF9sdXQgKGNsdXQpOwogCkBAIC00NTEsMTEgKzQ1MSwxMSBAQAogICAgIGdkZXYuZ2RmSW5kZXggPSBHREZfXzhCSVRfSU5ERVg7CiAKICAgICBpZiAoY2x1dCA+IDEpCi0gICAgICAgIC8qIHJldHVybiBHcmFwaGljIERldmljZSBmb3IgY29uc29sZSAqLwotICAgICAgICByZXR1cm4gKHZvaWQgKikmZ2RldjsKKwkvKiByZXR1cm4gR3JhcGhpYyBEZXZpY2UgZm9yIGNvbnNvbGUgKi8KKwlyZXR1cm4gKHZvaWQgKikmZ2RldjsKICAgICBlbHNlCi0gICAgICAgIC8qIGp1c3QgZ3JhcGhpYyBlbmFibGVkIC0gZHJhdyBzb21ldGhpbmcgYmVhdXRpZnVsICovCi0gICAgICAgIHZpZGVvX3Rlc3RfaW1hZ2UoKTsKKwkvKiBqdXN0IGdyYXBoaWMgZW5hYmxlZCAtIGRyYXcgc29tZXRoaW5nIGJlYXV0aWZ1bCAqLworCXZpZGVvX3Rlc3RfaW1hZ2UoKTsKIAogICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIHRoaXMgZGlzYWJlbHMgY2ZiIC0gY29uc29sZSAqLwogfQpAQCAtNDYzLDcgKzQ2Myw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHZvaWQgdmlkZW9fc2V0X2x1dCAodW5zaWduZWQgaW50IGluZGV4LAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHIsIHVuc2lnbmVkIGNoYXIgZywgdW5zaWduZWQgY2hhciBiKQorCQkgICAgdW5zaWduZWQgY2hhciByLCB1bnNpZ25lZCBjaGFyIGcsIHVuc2lnbmVkIGNoYXIgYikKIHsKICAgICB1bnNpZ25lZCBpbnQgbHVtOwogICAgIHVuc2lnbmVkIHNob3J0ICpwTHV0ID0gKHVuc2lnbmVkIHNob3J0ICopKENGR19JTU1SICsgMHgwZTAwKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL21ocGMvdS1ib290LmxkcyBiL2JvYXJkL2VsdGVjL21ocGMvdS1ib290LmxkcwppbmRleCA3MTI4MTU1Li41MjYxOThjIDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9taHBjL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZWx0ZWMvbWhwYy91LWJvb3QubGRzCkBAIC05OSw2ICs5OSwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTIxLDQgKzEyNiwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2VsdGVjL21ocGMvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2VsdGVjL21ocGMvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCA4ZGM2ZDQwLi5mNmY3Y2Y0IDEwMDY0NAotLS0gYS9ib2FyZC9lbHRlYy9taHBjL3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvZWx0ZWMvbWhwYy91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDYsNiArMTA2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjgsNCArMTMzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZW1rL3RvcDg2MC9NYWtlZmlsZSBiL2JvYXJkL2Vtay90b3A4NjAvTWFrZWZpbGUKaW5kZXggZWYxNzNkMC4uMTNjZTlmYyAxMDA2NDQKLS0tIGEvYm9hcmQvZW1rL3RvcDg2MC9NYWtlZmlsZQorKysgYi9ib2FyZC9lbWsvdG9wODYwL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9lbWsvdG9wODYwL2ZsYXNoLmMgYi9ib2FyZC9lbWsvdG9wODYwL2ZsYXNoLmMKaW5kZXggYTlhOTc3MS4uMGY4MjdkZiAxMDA2NDQKLS0tIGEvYm9hcmQvZW1rL3RvcDg2MC9mbGFzaC5jCisrKyBiL2JvYXJkL2Vtay90b3A4NjAvZmxhc2guYwpAQCAtMiwxMSArMiwxMSBAQAogICogKEMpIENvcHlyaWdodCAyMDAzCiAgKiBFTUsgRWxla3Ryb25payBHbWJIIDx3d3cuZW1rLWVsZWt0cm9uaWsuZGU+CiAgKiBSZWluaGFyZCBNZXllciA8ci5tZXllckBlbWstZWxla3Ryb25pay5kZT4KLSAqDQotICogY29waWVkIGZyb20gdGhlIEJNVyBQb3J0IC0gc2VlbXMgdGhhdCBpdHMgc2ltaWxpYXIgZW5vdWdoDQotICogdG8gYmUgZWFzaWx5IGFkYXBlZCA7KSAtLS0gV2VsbCwgaXQgdHVybmVkIG91dCB0byBiZWNvbWUgYQ0KLSAqIG1lcmdlciBiZXR3ZWVuIHBhcnRzIG9mIHRoZSBFTUtzdGF4IEZsYXNoIHJvdXRpbmVzIGFuZCB0aGUNCi0gKiBCTVcgZnVudGlvbiBmcmFtZXMuLi4NCisgKgorICogY29waWVkIGZyb20gdGhlIEJNVyBQb3J0IC0gc2VlbXMgdGhhdCBpdHMgc2ltaWxpYXIgZW5vdWdoCisgKiB0byBiZSBlYXNpbHkgYWRhcGVkIDspIC0tLSBXZWxsLCBpdCB0dXJuZWQgb3V0IHRvIGJlY29tZSBhCisgKiBtZXJnZXIgYmV0d2VlbiBwYXJ0cyBvZiB0aGUgRU1Lc3RheCBGbGFzaCByb3V0aW5lcyBhbmQgdGhlCisgKiBCTVcgZnVudGlvbiBmcmFtZXMuLi4KICAqCiAgKiAoQykgQ29weXJpZ2h0IDIwMDAKICAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCkBAIC0zNCw0NTcgKzM0LDQ1NiBAQAogI2luY2x1ZGUgPG1wYzh4eC5oPgogCiAjZGVmaW5lCUZMQVNIX1dPUkRfU0laRQkJdW5zaWduZWQgc2hvcnQKLSNkZWZpbmUgRkxBU0hfV09SRF9XSURUSAkoc2l6ZW9mIChGTEFTSF9XT1JEX1NJWkUpKQ0KLQ0KKyNkZWZpbmUgRkxBU0hfV09SRF9XSURUSAkoc2l6ZW9mIChGTEFTSF9XT1JEX1NJWkUpKQorCiBmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tDRkdfTUFYX0ZMQVNIX0JBTktTXTsgLyogaW5mbyBmb3IgRkxBU0ggY2hpcHMgICAgKi8KLQ0KKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogRnVuY3Rpb25zCiAgKi8KIHN0YXRpYyBpbnQgd3JpdGVfd29yZCAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKTsKIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBzb2Z0d2FyZSBwcm9kdWN0IElEIGVudHJ5L2V4aXQNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotc3RhdGljIHZvaWQgRmxhc2hQcm9kdWN0SWRNb2RlICgNCi0Jdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpiLA0KLQlpbnQgb25fb2ZmKQ0KLXsNCi0JYlsweDU1NTVdID0gMHhhYTsNCi0JYlsweDJhYWFdID0gMHg1NTsNCi0JYlsweDU1NTVdID0gb25fb2ZmID8gMHg5MCA6IDB4ZjA7DQotfQ0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIHNlY3RvciBlcmFzZSBzdGFydA0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1zdGF0aWMgdm9pZCBGbGFzaFNlY3RvckVyYXNlICgNCi0Jdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpiLA0KLQl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmEpDQotew0KLQliWzB4NTU1NV0gPSAweGFhOw0KLQliWzB4MmFhYV0gPSAweDU1Ow0KLQliWzB4NTU1NV0gPSAweDgwOw0KLQliWzB4NTU1NV0gPSAweGFhOw0KLQliWzB4MmFhYV0gPSAweDU1Ow0KLQlhWzBdID0gMHgzMDsNCi19DQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogcHJvZ3JhbSBhIHdvcmQNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotc3RhdGljIHZvaWQgRmxhc2hQcm9nV29yZCAoDQotCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYiwNCi0Jdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICphLA0KLQlGTEFTSF9XT1JEX1NJWkUgdikNCi17DQotCWJbMHg1NTU1XSA9IDB4YWE7DQotCWJbMHgyYWFhXSA9IDB4NTU7DQotCWJbMHg1NTU1XSA9IDB4YTA7DQotCWFbMF0gPSB2Ow0KLX0NCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiByZXNldCBiYW5rLCBiYWNrIHRvIHJlYWQgbW9kZQ0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1zdGF0aWMgdm9pZCBGbGFzaFJlc2V0ICh2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmIpDQotew0KLQliWzBdID0gMHhmMDsNCi19DQotDQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogaWRlbnRpZnkgRkxBU0ggY2hpcA0KLSAqIHRoaXMgY29kZSBpcyBhIHN0cmlwcGVkIHZlcnNpb24gb2YgdGhlIEZsYXNoR2V0VHlwZSgpIGZ1bmN0aW9uIGluIEVNS3N0YXgNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBzb2Z0d2FyZSBwcm9kdWN0IElEIGVudHJ5L2V4aXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIEZsYXNoUHJvZHVjdElkTW9kZSAoCisJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpiLAorCWludCBvbl9vZmYpCit7CisJYlsweDU1NTVdID0gMHhhYTsKKwliWzB4MmFhYV0gPSAweDU1OworCWJbMHg1NTU1XSA9IG9uX29mZiA/IDB4OTAgOiAweGYwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHNlY3RvciBlcmFzZSBzdGFydAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgRmxhc2hTZWN0b3JFcmFzZSAoCisJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpiLAorCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYSkKK3sKKwliWzB4NTU1NV0gPSAweGFhOworCWJbMHgyYWFhXSA9IDB4NTU7CisJYlsweDU1NTVdID0gMHg4MDsKKwliWzB4NTU1NV0gPSAweGFhOworCWJbMHgyYWFhXSA9IDB4NTU7CisJYVswXSA9IDB4MzA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHJvZ3JhbSBhIHdvcmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIEZsYXNoUHJvZ1dvcmQgKAorCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYiwKKwl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmEsCisJRkxBU0hfV09SRF9TSVpFIHYpCit7CisJYlsweDU1NTVdID0gMHhhYTsKKwliWzB4MmFhYV0gPSAweDU1OworCWJbMHg1NTU1XSA9IDB4YTA7CisJYVswXSA9IHY7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcmVzZXQgYmFuaywgYmFjayB0byByZWFkIG1vZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIEZsYXNoUmVzZXQgKHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYikKK3sKKwliWzBdID0gMHhmMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpZGVudGlmeSBGTEFTSCBjaGlwCisgKiB0aGlzIGNvZGUgaXMgYSBzdHJpcHBlZCB2ZXJzaW9uIG9mIHRoZSBGbGFzaEdldFR5cGUoKSBmdW5jdGlvbiBpbiBFTUtzdGF4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1bnNpZ25lZCBsb25nIGZsYXNoX2luaXQgKHZvaWQpCi17DQotCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqIGNvbnN0IGZsYXNoID0gKHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqKSBDRkdfRkxBU0hfQkFTRTsNCi0JRkxBU0hfV09SRF9TSVpFCW1hbnUsIGRldjsNCi0JZmxhc2hfaW5mb190ICogY29uc3QgcGZsaW5mbyA9ICZmbGFzaF9pbmZvWzBdOw0KLQlpbnQgajsNCi0NCi0JLyogZ2V0IElkIEJ5dGVzICovDQotCUZsYXNoUHJvZHVjdElkTW9kZSAoZmxhc2gsIDEpOw0KLQltYW51ID0gZmxhc2hbMF07DQotCWRldiAgPSBmbGFzaFsxXTsNCi0JRmxhc2hQcm9kdWN0SWRNb2RlIChmbGFzaCwgMCk7DQotDQotCXBmbGluZm8tPnNpemUgPSAwOw0KLQlwZmxpbmZvLT5zZWN0b3JfY291bnQgPSAwOw0KLQlwZmxpbmZvLT5mbGFzaF9pZCA9IDB4ZmZmZmZmZmY7DQotCXBmbGluZm8tPnBvcnR3aWR0aCA9IEZMQVNIX0NGSV8xNkJJVDsNCi0JcGZsaW5mby0+Y2hpcHdpZHRoID0gRkxBU0hfQ0ZJX0JZMTY7DQotDQotCXN3aXRjaCAobWFudSYweGZmKQ0KLQl7DQotCWNhc2UgMHgwMToJLyogQU1EICovDQotCQlwZmxpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7DQotCQlzd2l0Y2ggKGRldiYweGZmKQ0KLQkJew0KLQkJY2FzZSAweDQ5Og0KLQkJCXBmbGluZm8tPnNpemUgPSAweDAwMjAwMDAwOw0KLQkJCXBmbGluZm8tPnNlY3Rvcl9jb3VudCA9IDM1Ow0KLQkJCXBmbGluZm8tPmZsYXNoX2lkIHw9IEZMQVNIX0FNMTYwQjsNCi0JCQlwZmxpbmZvLT5zdGFydFswXSA9IENGR19GTEFTSF9CQVNFOw0KLQkJCXBmbGluZm8tPnN0YXJ0WzFdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDQwMDA7DQotCQkJcGZsaW5mby0+c3RhcnRbMl0gPSBDRkdfRkxBU0hfQkFTRSArIDB4NjAwMDsNCi0JCQlwZmxpbmZvLT5zdGFydFszXSA9IENGR19GTEFTSF9CQVNFICsgMHg4MDAwOw0KLQkJCWZvciAoaiA9IDQ7IGogPCAzNTsgaisrKQ0KLQkJCXsNCi0JCQkJcGZsaW5mby0+c3RhcnRbal0gPSBDRkdfRkxBU0hfQkFTRSArIDB4MDAwMTAwMDAgKiAoai0zKTsNCi0JCQl9DQotCQkJYnJlYWs7DQotDQotCQljYXNlIDB4Zjk6DQotCQkJcGZsaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7DQotCQkJcGZsaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7DQotCQkJcGZsaW5mby0+Zmxhc2hfaWQgfD0gRkxBU0hfQU0zMjBCOw0KLQkJCXBmbGluZm8tPnN0YXJ0WzBdID0gQ0ZHX0ZMQVNIX0JBU0U7DQotCQkJcGZsaW5mby0+c3RhcnRbMV0gPSBDRkdfRkxBU0hfQkFTRSArIDB4NDAwMDsNCi0JCQlwZmxpbmZvLT5zdGFydFsyXSA9IENGR19GTEFTSF9CQVNFICsgMHg2MDAwOw0KLQkJCXBmbGluZm8tPnN0YXJ0WzNdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDgwMDA7DQotCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykNCi0JCQl7DQotCQkJCXBmbGluZm8tPnN0YXJ0W2pdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDAwMDAyMDAwICogKGopOw0KLQkJCX0NCi0JCQlmb3IgKGogPSA4OyBqIDwgNzE7IGorKykNCi0JCQl7DQotCQkJCXBmbGluZm8tPnN0YXJ0W2pdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDAwMDEwMDAwICogKGotNyk7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQ0KLQkJZGVmYXVsdDoNCi0JCQlwcmludGYgKCJ1bmtub3duIEFNRCBkZXY9JXggIiwgZGV2KTsNCi0JCQlwZmxpbmZvLT5mbGFzaF9pZCB8PSBGTEFTSF9VTktOT1dOOw0KLQkJfQ0KLQkJYnJlYWs7DQotDQotCWRlZmF1bHQ6DQotCQlwcmludGYgKCJ1bmtub3duIG1hbnU9JXggIiwgbWFudSk7DQotCX0NCi0JcmV0dXJuIHBmbGluZm8tPnNpemU7DQoreworCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqIGNvbnN0IGZsYXNoID0gKHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqKSBDRkdfRkxBU0hfQkFTRTsKKwlGTEFTSF9XT1JEX1NJWkUJbWFudSwgZGV2OworCWZsYXNoX2luZm9fdCAqIGNvbnN0IHBmbGluZm8gPSAmZmxhc2hfaW5mb1swXTsKKwlpbnQgajsKKworCS8qIGdldCBJZCBCeXRlcyAqLworCUZsYXNoUHJvZHVjdElkTW9kZSAoZmxhc2gsIDEpOworCW1hbnUgPSBmbGFzaFswXTsKKwlkZXYgID0gZmxhc2hbMV07CisJRmxhc2hQcm9kdWN0SWRNb2RlIChmbGFzaCwgMCk7CisKKwlwZmxpbmZvLT5zaXplID0gMDsKKwlwZmxpbmZvLT5zZWN0b3JfY291bnQgPSAwOworCXBmbGluZm8tPmZsYXNoX2lkID0gMHhmZmZmZmZmZjsKKwlwZmxpbmZvLT5wb3J0d2lkdGggPSBGTEFTSF9DRklfMTZCSVQ7CisJcGZsaW5mby0+Y2hpcHdpZHRoID0gRkxBU0hfQ0ZJX0JZMTY7CisKKwlzd2l0Y2ggKG1hbnUmMHhmZikKKwl7CisJY2FzZSAweDAxOgkvKiBBTUQgKi8KKwkJcGZsaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EOworCQlzd2l0Y2ggKGRldiYweGZmKQorCQl7CisJCWNhc2UgMHg0OToKKwkJCXBmbGluZm8tPnNpemUgPSAweDAwMjAwMDAwOworCQkJcGZsaW5mby0+c2VjdG9yX2NvdW50ID0gMzU7CisJCQlwZmxpbmZvLT5mbGFzaF9pZCB8PSBGTEFTSF9BTTE2MEI7CisJCQlwZmxpbmZvLT5zdGFydFswXSA9IENGR19GTEFTSF9CQVNFOworCQkJcGZsaW5mby0+c3RhcnRbMV0gPSBDRkdfRkxBU0hfQkFTRSArIDB4NDAwMDsKKwkJCXBmbGluZm8tPnN0YXJ0WzJdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDYwMDA7CisJCQlwZmxpbmZvLT5zdGFydFszXSA9IENGR19GTEFTSF9CQVNFICsgMHg4MDAwOworCQkJZm9yIChqID0gNDsgaiA8IDM1OyBqKyspCisJCQl7CisJCQkJcGZsaW5mby0+c3RhcnRbal0gPSBDRkdfRkxBU0hfQkFTRSArIDB4MDAwMTAwMDAgKiAoai0zKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgMHhmOToKKwkJCXBmbGluZm8tPnNpemUgPSAweDAwNDAwMDAwOworCQkJcGZsaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7CisJCQlwZmxpbmZvLT5mbGFzaF9pZCB8PSBGTEFTSF9BTTMyMEI7CisJCQlwZmxpbmZvLT5zdGFydFswXSA9IENGR19GTEFTSF9CQVNFOworCQkJcGZsaW5mby0+c3RhcnRbMV0gPSBDRkdfRkxBU0hfQkFTRSArIDB4NDAwMDsKKwkJCXBmbGluZm8tPnN0YXJ0WzJdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDYwMDA7CisJCQlwZmxpbmZvLT5zdGFydFszXSA9IENGR19GTEFTSF9CQVNFICsgMHg4MDAwOworCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykKKwkJCXsKKwkJCQlwZmxpbmZvLT5zdGFydFtqXSA9IENGR19GTEFTSF9CQVNFICsgMHgwMDAwMjAwMCAqIChqKTsKKwkJCX0KKwkJCWZvciAoaiA9IDg7IGogPCA3MTsgaisrKQorCQkJeworCQkJCXBmbGluZm8tPnN0YXJ0W2pdID0gQ0ZHX0ZMQVNIX0JBU0UgKyAweDAwMDEwMDAwICogKGotNyk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRmICgidW5rbm93biBBTUQgZGV2PSV4ICIsIGRldik7CisJCQlwZmxpbmZvLT5mbGFzaF9pZCB8PSBGTEFTSF9VTktOT1dOOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRmICgidW5rbm93biBtYW51PSV4ICIsIG1hbnUpOworCX0KKwlyZXR1cm4gcGZsaW5mby0+c2l6ZTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogcHJpbnQgaW5mbyBhYm91dCBhIEZMQVNIDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHJpbnQgaW5mbyBhYm91dCBhIEZMQVNICisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqaW5mbykKLXsNCi0Jc3RhdGljIGNvbnN0IGNoYXIJdW5rW10gPSAiVW5rbm93biI7DQotCXVuc2lnbmVkIGludAkJaTsNCi0JY29uc3QgY2hhcgkJCSptZmN0PXVuaywNCi0JCQkJCQkqdHlwZT11bms7DQotDQotCWlmKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04pDQotCXsNCi0JCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykNCi0JCXsNCi0JCWNhc2UgRkxBU0hfTUFOX0FNRDoNCi0JCQltZmN0ID0gIkFNRCI7DQotCQkJYnJlYWs7DQotCQl9DQotDQotCQlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spDQotCQl7DQotCQljYXNlIEZMQVNIX0FNMTYwQjoNCi0JCQl0eXBlID0gIkFNMjlMVjE2MEIgKDE2IE1iaXQsIGJvdHRvbSBib290IHNlY3QpIjsNCi0JCQlicmVhazsNCi0JCWNhc2UgRkxBU0hfQU0zMjBCOg0KLQkJCXR5cGUgPSAiQU0yOUxWMzIwQiAoMzIgTWJpdCwgYm90dG9tIGJvb3Qgc2VjdCkiOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotDQotCXByaW50ZiAoDQotCQkiXG4gIEJyYW5kOiAlcyBUeXBlOiAlc1xuIg0KLQkJIiAgU2l6ZTogJWx1IEtCIGluICVkIFNlY3RvcnNcbiIsDQotCQltZmN0LA0KLQkJdHlwZSwNCi0JCWluZm8tPnNpemUgPj4gMTAsDQotCQlpbmZvLT5zZWN0b3JfY291bnQNCi0JCSk7DQotDQotCXByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQ0KLQl7DQotCQl1bnNpZ25lZCBsb25nCXNpemU7DQotCQl1bnNpZ25lZCBpbnQJZXJhc2VkOw0KLQkJdW5zaWduZWQgbG9uZwkqZmxhc2ggPSAodW5zaWduZWQgbG9uZyAqKSBpbmZvLT5zdGFydFtpXTsNCi0NCi0JCS8qDQotCQkgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkDQotCQkgKi8NCi0JCXNpemUgPQ0KLQkJCShpICE9IChpbmZvLT5zZWN0b3JfY291bnQgLSAxKSkgPw0KLQkJCShpbmZvLT5zdGFydFtpICsgMV0gLSBpbmZvLT5zdGFydFtpXSkgPj4gMiA6DQotCQkoaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gaW5mby0+c3RhcnRbaV0pID4+IDI7DQotDQotCQlmb3IgKA0KLQkJCWZsYXNoID0gKHVuc2lnbmVkIGxvbmcgKikgaW5mby0+c3RhcnRbaV0sIGVyYXNlZCA9IDE7DQotCQkJCShmbGFzaCAhPSAodW5zaWduZWQgbG9uZyAqKSBpbmZvLT5zdGFydFtpXSArIHNpemUpICYmIGVyYXNlZDsNCi0JCQkJCWZsYXNoKysNCi0JCQkpDQotCQkJZXJhc2VkID0gKmZsYXNoID09IH4weDBVTDsNCi0NCi0JCXByaW50ZiAoDQotCQkJIiVzICUwOGxYICVzICVzIiwNCi0JCQkoaSAlIDUpID8gIiIgOiAiXG4gICAiLA0KLQkJCWluZm8tPnN0YXJ0W2ldLA0KLQkJCWVyYXNlZCA/ICJFIiA6ICIgIiwNCi0JCQlpbmZvLT5wcm90ZWN0W2ldID8gIlJPIiA6ICIgICINCi0JCQkpOw0KLQl9DQotDQotCXB1dHMgKCJcbiIpOw0KLQlyZXR1cm47DQoreworCXN0YXRpYyBjb25zdCBjaGFyCXVua1tdID0gIlVua25vd24iOworCXVuc2lnbmVkIGludAkJaTsKKwljb25zdCBjaGFyCQkJKm1mY3Q9dW5rLAorCQkJCQkJKnR5cGU9dW5rOworCisJaWYoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTikKKwl7CisJCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykKKwkJeworCQljYXNlIEZMQVNIX01BTl9BTUQ6CisJCQltZmN0ID0gIkFNRCI7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykKKwkJeworCQljYXNlIEZMQVNIX0FNMTYwQjoKKwkJCXR5cGUgPSAiQU0yOUxWMTYwQiAoMTYgTWJpdCwgYm90dG9tIGJvb3Qgc2VjdCkiOworCQkJYnJlYWs7CisJCWNhc2UgRkxBU0hfQU0zMjBCOgorCQkJdHlwZSA9ICJBTTI5TFYzMjBCICgzMiBNYml0LCBib3R0b20gYm9vdCBzZWN0KSI7CisJCQlicmVhazsKKwkJfQorCX0KKworCXByaW50ZiAoCisJCSJcbiAgQnJhbmQ6ICVzIFR5cGU6ICVzXG4iCisJCSIgIFNpemU6ICVsdSBLQiBpbiAlZCBTZWN0b3JzXG4iLAorCQltZmN0LAorCQl0eXBlLAorCQlpbmZvLT5zaXplID4+IDEwLAorCQlpbmZvLT5zZWN0b3JfY291bnQKKwkJKTsKKworCXByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKKwl7CisJCXVuc2lnbmVkIGxvbmcJc2l6ZTsKKwkJdW5zaWduZWQgaW50CWVyYXNlZDsKKwkJdW5zaWduZWQgbG9uZwkqZmxhc2ggPSAodW5zaWduZWQgbG9uZyAqKSBpbmZvLT5zdGFydFtpXTsKKworCQkvKgorCQkgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkCisJCSAqLworCQlzaXplID0KKwkJCShpICE9IChpbmZvLT5zZWN0b3JfY291bnQgLSAxKSkgPworCQkJKGluZm8tPnN0YXJ0W2kgKyAxXSAtIGluZm8tPnN0YXJ0W2ldKSA+PiAyIDoKKwkJKGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSAtIGluZm8tPnN0YXJ0W2ldKSA+PiAyOworCisJCWZvciAoCisJCQlmbGFzaCA9ICh1bnNpZ25lZCBsb25nICopIGluZm8tPnN0YXJ0W2ldLCBlcmFzZWQgPSAxOworCQkJCShmbGFzaCAhPSAodW5zaWduZWQgbG9uZyAqKSBpbmZvLT5zdGFydFtpXSArIHNpemUpICYmIGVyYXNlZDsKKwkJCQkJZmxhc2grKworCQkJKQorCQkJZXJhc2VkID0gKmZsYXNoID09IH4weDBVTDsKKworCQlwcmludGYgKAorCQkJIiVzICUwOGxYICVzICVzIiwKKwkJCShpICUgNSkgPyAiIiA6ICJcbiAgICIsCisJCQlpbmZvLT5zdGFydFtpXSwKKwkJCWVyYXNlZCA/ICJFIiA6ICIgIiwKKwkJCWluZm8tPnByb3RlY3RbaV0gPyAiUk8iIDogIiAgIgorCQkJKTsKKwl9CisKKwlwdXRzICgiXG4iKTsKKwlyZXR1cm47CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIGVyYXNlIG9uZSBvciBtb3JlIHNlY3RvcnMNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBlcmFzZSBvbmUgb3IgbW9yZSBzZWN0b3JzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQJZmxhc2hfZXJhc2UgKGZsYXNoX2luZm9fdCAqaW5mbywgaW50IHNfZmlyc3QsIGludCBzX2xhc3QpCi17DQotCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRQkqYWRkciA9IChGTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbMF0pOw0KLQlpbnQJCQkJCQkJZmxhZywNCi0JCQkJCQkJCXByb3QsDQotCQkJCQkJCQlzZWN0LA0KLQkJCQkJCQkJbF9zZWN0Ow0KLQl1bG9uZwkJCQkJCXN0YXJ0LA0KLQkJCQkJCQkJbm93LA0KLQkJCQkJCQkJbGFzdDsNCi0NCi0JaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKQ0KLQl7DQotCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikNCi0JCXsNCi0JCQlwcmludGYgKCItIG1pc3NpbmdcbiIpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7DQotCQl9DQotCQlyZXR1cm4gMTsNCi0JfQ0KLQ0KLQlpZiAoKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHx8DQotCQkoaW5mby0+Zmxhc2hfaWQgPiAoRkxBU0hfTUFOX1NUTSB8IEZMQVNIX0FNRF9DT01QKSkpDQotCXsNCi0JCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOw0KLQkJcmV0dXJuIDE7DQotCX0NCi0NCi0JcHJvdCA9IDA7DQotCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkNCi0Jew0KLQkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pDQotCQl7DQotCQkJcHJvdCsrOw0KLQkJfQ0KLQl9DQotDQotCWlmIChwcm90KQ0KLQl7DQotCQlwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsDQotCQkJcHJvdCk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlwcmludGYgKCJcbiIpOw0KLQl9DQotDQotCWxfc2VjdCA9IC0xOw0KLQ0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8NCi0JZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOw0KLQ0KLQkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovDQotCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgc2VjdCsrKQ0KLQl7DQotCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKQ0KLQkJeyAvKiBub3QgcHJvdGVjdGVkICovDQotCQkJRmxhc2hTZWN0b3JFcmFzZSAoKEZMQVNIX1dPUkRfU0laRSAqKWluZm8tPnN0YXJ0WzBdLCAoRkxBU0hfV09SRF9TSVpFICopaW5mby0+c3RhcnRbc2VjdF0pOw0KLQkJCWxfc2VjdCA9IHNlY3Q7DQotCQl9DQotCX0NCi0NCi0JLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovDQotCWlmIChmbGFnKQ0KLQkJZW5hYmxlX2ludGVycnVwdHMoKTsNCi0NCi0JLyogd2FpdCBhdCBsZWFzdCA4MHVzIC0gbGV0J3Mgd2FpdCAxIG1zICovDQotCXVkZWxheSAoMTAwMCk7DQotDQotCS8qDQotCSogV2Ugd2FpdCBmb3IgdGhlIGxhc3QgdHJpZ2dlcmVkIHNlY3Rvcg0KLQkqLw0KLQlpZiAobF9zZWN0IDwgMCkNCi0JCWdvdG8gRE9ORTsNCi0NCi0Jc3RhcnQgPSBnZXRfdGltZXIgKDApOw0KLQlsYXN0ICA9IHN0YXJ0Ow0KLQlhZGRyID0gKEZMQVNIX1dPUkRfU0laRSAqKWluZm8tPnN0YXJ0W2xfc2VjdF07DQotCXdoaWxlICgoYWRkclswXSAmIDB4MDA4MCkgIT0gMHgwMDgwKQ0KLQl7DQotCQlpZiAoKG5vdyA9IGdldF90aW1lciAoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKQ0KLQkJew0KLQkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOw0KLQkJCXJldHVybiAxOw0KLQkJfQ0KLQkJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8NCi0JCWlmICgobm93IC0gbGFzdCkgPiAxMDAwKQ0KLQkJeyAgLyogZXZlcnkgc2Vjb25kICovDQotCQkJc2VyaWFsX3B1dGMgKCcuJyk7DQotCQkJbGFzdCA9IG5vdzsNCi0JCX0NCi0JfQ0KLQ0KLQlET05FOg0KLQkvKiByZXNldCB0byByZWFkIG1vZGUgKi8NCi0JRmxhc2hSZXNldCAoKEZMQVNIX1dPUkRfU0laRSAqKWluZm8tPnN0YXJ0WzBdKTsNCi0NCi0JcHJpbnRmICgiIGRvbmVcbiIpOw0KLQlyZXR1cm4gMDsNCit7CisJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFCSphZGRyID0gKEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFswXSk7CisJaW50CQkJCQkJCWZsYWcsCisJCQkJCQkJCXByb3QsCisJCQkJCQkJCXNlY3QsCisJCQkJCQkJCWxfc2VjdDsKKwl1bG9uZwkJCQkJCXN0YXJ0LAorCQkJCQkJCQlub3csCisJCQkJCQkJCWxhc3Q7CisKKwlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpCisJeworCQlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikKKwkJeworCQkJcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB8fAorCQkoaW5mby0+Zmxhc2hfaWQgPiAoRkxBU0hfTUFOX1NUTSB8IEZMQVNIX0FNRF9DT01QKSkpCisJeworCQlwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgLSBhYm9ydGVkXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJvdCA9IDA7CisJZm9yIChzZWN0PXNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgKytzZWN0KQorCXsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pCisJCXsKKwkJCXByb3QrKzsKKwkJfQorCX0KKworCWlmIChwcm90KQorCXsKKwkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAorCQkJcHJvdCk7CisJfQorCWVsc2UKKwl7CisJCXByaW50ZiAoIlxuIik7CisJfQorCisJbF9zZWN0ID0gLTE7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisKKwkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCisJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdDw9c19sYXN0OyBzZWN0KyspCisJeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKQorCQl7IC8qIG5vdCBwcm90ZWN0ZWQgKi8KKwkJCUZsYXNoU2VjdG9yRXJhc2UgKChGTEFTSF9XT1JEX1NJWkUgKilpbmZvLT5zdGFydFswXSwgKEZMQVNIX1dPUkRfU0laRSAqKWluZm8tPnN0YXJ0W3NlY3RdKTsKKwkJCWxfc2VjdCA9IHNlY3Q7CisJCX0KKwl9CisKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoZmxhZykKKwkJZW5hYmxlX2ludGVycnVwdHMoKTsKKworCS8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLworCXVkZWxheSAoMTAwMCk7CisKKwkvKgorCSogV2Ugd2FpdCBmb3IgdGhlIGxhc3QgdHJpZ2dlcmVkIHNlY3RvcgorCSovCisJaWYgKGxfc2VjdCA8IDApCisJCWdvdG8gRE9ORTsKKworCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwlsYXN0ICA9IHN0YXJ0OworCWFkZHIgPSAoRkxBU0hfV09SRF9TSVpFICopaW5mby0+c3RhcnRbbF9zZWN0XTsKKwl3aGlsZSAoKGFkZHJbMF0gJiAweDAwODApICE9IDB4MDA4MCkKKwl7CisJCWlmICgobm93ID0gZ2V0X3RpbWVyIChzdGFydCkpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpCisJCXsKKwkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KKwkJaWYgKChub3cgLSBsYXN0KSA+IDEwMDApCisJCXsgIC8qIGV2ZXJ5IHNlY29uZCAqLworCQkJc2VyaWFsX3B1dGMgKCcuJyk7CisJCQlsYXN0ID0gbm93OworCQl9CisJfQorCisJRE9ORToKKwkvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwlGbGFzaFJlc2V0ICgoRkxBU0hfV09SRF9TSVpFICopaW5mby0+c3RhcnRbMF0pOworCisJcHJpbnRmICgiIGRvbmVcbiIpOworCXJldHVybiAwOwogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgogICogMCAtIE9LCiAgKiAxIC0gd3JpdGUgdGltZW91dAogICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCi17DQotCXVsb25nCQljcCwNCi0JCQkJd3AsDQotCQkJCWRhdGE7DQotCWludAkJCWksDQotCQkJCWwsDQotCQkJCXJjOw0KLQ0KLQl3cCA9IChhZGRyICYgfihGTEFTSF9XT1JEX1dJRFRILTEpKTsgICAvKiBnZXQgbG93ZXIgd29yZCBhbGlnbmVkIGFkZHJlc3MgKi8NCi0NCi0JLyoNCi0JICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcywgaWYgdGhlcmUgYXJlLi4uDQotCSAqLw0KLQlpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApDQotCXsNCi0JCWRhdGEgPSAwOw0KLQkJDQotCQkvKiBnZXQgdGhlIGN1cnJlbnQgYmVmb3JlIHRoZSBuZXcgZGF0YSBpbnRvIG91ciBkYXRhIHdvcmQgKi8NCi0JCWZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApDQotCQl7DQotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7DQotCQl9DQotCQkNCi0JCS8qIG5vdyBtZXJnZSB0aGUgdG8gYmUgcHJvZ3JhbW1lZCB2YWx1ZXMgKi8NCi0JCWZvciAoOyBpPDQgJiYgY250PjA7ICsraSwgKytjcCwgLS1jbnQpDQotCQl7DQotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOw0KLQkJfQ0KLQ0KLQkJLyogZ2V0IHRoZSBjdXJyZW50IGFmdGVyIHRoZSBuZXcgZGF0YSBpbnRvIG91ciBkYXRhIHdvcmQgKi8NCi0JCWZvciAoOyBjbnQ9PTAgJiYgaTxGTEFTSF9XT1JEX1dJRFRIOyArK2ksICsrY3ApDQotCQl7DQotCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7DQotCQl9DQotDQotCQkvKiBub3cgd3JpdGUgdGhlIGNvbWJpbmVkIHdvcmQgKi8NCi0JCWlmICgocmMgPSB3cml0ZV93b3JkIChpbmZvLCB3cCwgZGF0YSkpICE9IDApDQotCQl7DQotCQkJcmV0dXJuIChyYyk7DQotCQl9DQotCQl3cCArPSBGTEFTSF9XT1JEX1dJRFRIOw0KLQl9DQotDQotCS8qDQotCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydA0KLQkgKi8NCi0Jd2hpbGUgKGNudCA+PSBGTEFTSF9XT1JEX1dJRFRIKQ0KLQl7DQotCQlkYXRhID0gMDsNCi0JCWZvciAoaT0wOyBpPEZMQVNIX1dPUkRfV0lEVEg7ICsraSkNCi0JCXsNCi0JCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7DQotCQl9DQotCQlpZiAoKHJjID0gd3JpdGVfd29yZCAoaW5mbywgd3AsIGRhdGEpKSAhPSAwKQ0KLQkJew0KLQkJCXJldHVybiAocmMpOw0KLQkJfQ0KLQkJd3AgICs9IEZMQVNIX1dPUkRfV0lEVEg7DQotCQljbnQgLT0gRkxBU0hfV09SRF9XSURUSDsNCi0JfQ0KLQ0KLQlpZiAoY250ID09IDApDQotCXsNCi0JCXJldHVybiAoMCk7DQotCX0NCi0NCi0JLyoNCi0JICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzLCBpZiB0aGVyZSBhcmUuLi4NCi0JICovDQotCWRhdGEgPSAwOw0KLQ0KLQkvKiBub3cgbWVyZ2UgdGhlIHRvIGJlIHByb2dyYW1tZWQgdmFsdWVzICovDQotCWZvciAoaT0wLCBjcD13cDsgaTxGTEFTSF9XT1JEX1dJRFRIICYmIGNudD4wOyArK2ksICsrY3ApDQotCXsNCi0JCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsNCi0JCS0tY250Ow0KLQl9DQotDQotCS8qIGdldCB0aGUgY3VycmVudCBhZnRlciB0aGUgbmV3IGRhdGEgaW50byBvdXIgZGF0YSB3b3JkICovDQotCWZvciAoOyBpPEZMQVNIX1dPUkRfV0lEVEg7ICsraSwgKytjcCkNCi0Jew0KLQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7DQotCX0NCi0NCi0JLyogbm93IHdyaXRlIHRoZSBjb21iaW5lZCB3b3JkICovDQotCXJldHVybiAod3JpdGVfd29yZCAoaW5mbywgd3AsIGRhdGEpKTsNCit7CisJdWxvbmcJCWNwLAorCQkJCXdwLAorCQkJCWRhdGE7CisJaW50CQkJaSwKKwkJCQlsLAorCQkJCXJjOworCisJd3AgPSAoYWRkciAmIH4oRkxBU0hfV09SRF9XSURUSC0xKSk7ICAgLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMsIGlmIHRoZXJlIGFyZS4uLgorCSAqLworCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkKKwl7CisJCWRhdGEgPSAwOworCisJCS8qIGdldCB0aGUgY3VycmVudCBiZWZvcmUgdGhlIG5ldyBkYXRhIGludG8gb3VyIGRhdGEgd29yZCAqLworCQlmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKQorCQl7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwkJfQorCisJCS8qIG5vdyBtZXJnZSB0aGUgdG8gYmUgcHJvZ3JhbW1lZCB2YWx1ZXMgKi8KKwkJZm9yICg7IGk8NCAmJiBjbnQ+MDsgKytpLCArK2NwLCAtLWNudCkKKwkJeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCQl9CisKKwkJLyogZ2V0IHRoZSBjdXJyZW50IGFmdGVyIHRoZSBuZXcgZGF0YSBpbnRvIG91ciBkYXRhIHdvcmQgKi8KKwkJZm9yICg7IGNudD09MCAmJiBpPEZMQVNIX1dPUkRfV0lEVEg7ICsraSwgKytjcCkKKwkJeworCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CisJCX0KKworCQkvKiBub3cgd3JpdGUgdGhlIGNvbWJpbmVkIHdvcmQgKi8KKwkJaWYgKChyYyA9IHdyaXRlX3dvcmQgKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkKKwkJeworCQkJcmV0dXJuIChyYyk7CisJCX0KKwkJd3AgKz0gRkxBU0hfV09SRF9XSURUSDsKKwl9CisKKwkvKgorCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAorCSAqLworCXdoaWxlIChjbnQgPj0gRkxBU0hfV09SRF9XSURUSCkKKwl7CisJCWRhdGEgPSAwOworCQlmb3IgKGk9MDsgaTxGTEFTSF9XT1JEX1dJRFRIOyArK2kpCisJCXsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJfQorCQlpZiAoKHJjID0gd3JpdGVfd29yZCAoaW5mbywgd3AsIGRhdGEpKSAhPSAwKQorCQl7CisJCQlyZXR1cm4gKHJjKTsKKwkJfQorCQl3cCAgKz0gRkxBU0hfV09SRF9XSURUSDsKKwkJY250IC09IEZMQVNIX1dPUkRfV0lEVEg7CisJfQorCisJaWYgKGNudCA9PSAwKQorCXsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKgorCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcywgaWYgdGhlcmUgYXJlLi4uCisJICovCisJZGF0YSA9IDA7CisKKwkvKiBub3cgbWVyZ2UgdGhlIHRvIGJlIHByb2dyYW1tZWQgdmFsdWVzICovCisJZm9yIChpPTAsIGNwPXdwOyBpPEZMQVNIX1dPUkRfV0lEVEggJiYgY250PjA7ICsraSwgKytjcCkKKwl7CisJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJLS1jbnQ7CisJfQorCisJLyogZ2V0IHRoZSBjdXJyZW50IGFmdGVyIHRoZSBuZXcgZGF0YSBpbnRvIG91ciBkYXRhIHdvcmQgKi8KKwlmb3IgKDsgaTxGTEFTSF9XT1JEX1dJRFRIOyArK2ksICsrY3ApCisJeworCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwl9CisKKwkvKiBub3cgd3JpdGUgdGhlIGNvbWJpbmVkIHdvcmQgKi8KKwlyZXR1cm4gKHdyaXRlX3dvcmQgKGluZm8sIHdwLCBkYXRhKSk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogV3JpdGUgYSB3b3JkIHRvIEZsYXNoLCByZXR1cm5zOgogICogMCAtIE9LCiAgKiAxIC0gd3JpdGUgdGltZW91dAogICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHdyaXRlX3dvcmQgKGZsYXNoX2luZm9fdCAqaW5mbywgdWxvbmcgZGVzdCwgdWxvbmcgZGF0YSkKLXsNCi0Jdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFCSphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKilpbmZvLT5zdGFydFswXTsNCi0Jdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFCSpkZXN0MiA9IChGTEFTSF9XT1JEX1NJWkUgKilkZXN0Ow0KLQlGTEFTSF9XT1JEX1NJWkUJCQkJZGF0YTIgPSBkYXRhOw0KLQl1bG9uZwkJCQkJCXN0YXJ0Ow0KLQlpbnQJCQkJCQkJZmxhZzsNCi0NCi0JLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovDQotCWlmICgoKmRlc3QyICYgZGF0YTIpICE9IGRhdGEyKQ0KLQl7DQotCQlyZXR1cm4gKDIpOw0KLQl9DQotCQ0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8NCi0JZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsNCi0NCi0JRmxhc2hQcm9nV29yZCAoYWRkcjIsIGRlc3QyLCBkYXRhMik7DQotDQotCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLw0KLQlpZiAoZmxhZykNCi0JCWVuYWJsZV9pbnRlcnJ1cHRzICgpOw0KLQ0KLQkvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovDQotCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsNCi0Jd2hpbGUgKCgqZGVzdDIgJiAweDAwODApICE9IChkYXRhMiAmIDB4MDA4MCkpDQotCXsNCi0JCWlmIChnZXRfdGltZXIgKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKQ0KLQkJew0KLQkJCXJldHVybiAoMSk7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuICgwKTsNCit7CisJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFCSphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKilpbmZvLT5zdGFydFswXTsKKwl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUJKmRlc3QyID0gKEZMQVNIX1dPUkRfU0laRSAqKWRlc3Q7CisJRkxBU0hfV09SRF9TSVpFCQkJCWRhdGEyID0gZGF0YTsKKwl1bG9uZwkJCQkJCXN0YXJ0OworCWludAkJCQkJCQlmbGFnOworCisJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCisJaWYgKCgqZGVzdDIgJiBkYXRhMikgIT0gZGF0YTIpCisJeworCQlyZXR1cm4gKDIpOworCX0KKworCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CisKKwlGbGFzaFByb2dXb3JkIChhZGRyMiwgZGVzdDIsIGRhdGEyKTsKKworCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCWlmIChmbGFnKQorCQllbmFibGVfaW50ZXJydXB0cyAoKTsKKworCS8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KKwlzdGFydCA9IGdldF90aW1lciAoMCk7CisJd2hpbGUgKCgqZGVzdDIgJiAweDAwODApICE9IChkYXRhMiAmIDB4MDA4MCkpCisJeworCQlpZiAoZ2V0X3RpbWVyIChzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkKKwkJeworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKworCXJldHVybiAoMCk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotDQpkaWZmIC0tZ2l0IGEvYm9hcmQvZW1rL3RvcDg2MC90b3A4NjAuYyBiL2JvYXJkL2Vtay90b3A4NjAvdG9wODYwLmMKaW5kZXggYjk5YmYwZS4uZDEzYmU5OCAxMDA2NDQKLS0tIGEvYm9hcmQvZW1rL3RvcDg2MC90b3A4NjAuYworKysgYi9ib2FyZC9lbWsvdG9wODYwL3RvcDg2MC5jCkBAIC0zNSw0NyArMzUsNDcgQEAKICNpbmNsdWRlIDxjb21tcHJvYy5oPgogI2luY2x1ZGUgPG1wYzh4eC5oPgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBVUE0gdGFibGUgZm9yIDYwbnMgRURPIFJBTSBhdCAyNSBNSHogYnVzL2V4dGVybmFsIGNsb2NrDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVVBNIHRhYmxlIGZvciA2MG5zIEVETyBSQU0gYXQgMjUgTUh6IGJ1cy9leHRlcm5hbCBjbG9jaworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGNvbnN0IHVpbnQgZWRvXzYwbnNfMjVNSHpfdGJsW10gPSB7Ci0NCi0vKiBzaW5nbGUgcmVhZCAgIChvZmZzZXQgMHgwMCBpbiB1cG0gcmFtKSAqLw0KLSAgICAweDBmZjNmYzA0LDB4MDhmM2ZjMDQsMHgwMGYzZmMwNCwweDAwZjNmYzAwLA0KLSAgICAweDMzZjdmYzA3LDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwweGZmZmZmYzA1LA0KLS8qIGJ1cnN0IHJlYWQgICAgKG9mZnNldCAweDA4IGluIHVwbSByYW0pICovDQotICAgIDB4MGZmM2ZjMDQsMHgwOGYzZmMwNCwweDAwZjNmYzBjLDB4MGZmM2ZjNDAsDQotICAgIDB4MGNmM2ZjMDQsMHgwM2YzZmM0OCwweDBjZjNmYzA0LDB4MDNmM2ZjNDgsDQotICAgIDB4MGNmM2ZjMDQsMHgwM2YzZmMwMCwweDNmZjdmYzA3LDB4ZmZmZmZjMDUsDQotICAgIDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwweGZmZmZmYzA1LDB4ZmZmZmZjMDUsDQotLyogc2luZ2xlIHdyaXRlICAob2Zmc2V0IDB4MTggaW4gdXBtIHJhbSkgKi8NCi0gICAgMHgwZmZmZmMwNCwweDA4ZmZmYzA0LDB4MzBmZmZjMDAsMHhmMWZmZmMwNywNCi0gICAgMHhmZmZmZmMwNSwweGZmZmZmYzA1LDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwNCi0vKiBidXJzdCB3cml0ZSAgIChvZmZzZXQgMHgyMCBpbiB1cG0gcmFtKSAqLw0KLSAgICAweDBmZmZmYzA0LDB4MDhmZmZjMDAsMHgwMGZmZmMwNCwweDAzZmZmYzRjLA0KLSAgICAweDAwZmZmYzAwLDB4MDdmZmZjNGMsMHgwMGZmZmMwMCwweDBmZmZmYzRjLA0KLSAgICAweDAwZmZmYzAwLDB4M2ZmZmZjMDcsMHhmZmZmZmMwNSwweGZmZmZmYzA1LA0KLSAgICAweGZmZmZmYzA1LDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwweGZmZmZmYzA1LA0KLS8qIHJlZnJlc2ggICAgICAgKG9mZnNldCAweDMwIGluIHVwbSByYW0pICovDQotICAgIDB4YzBmZmZjMDQsMHgwN2ZmZmMwNCwweDBmZmZmYzA0LDB4MGZmZmZjMDQsDQotICAgIDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwweGZmZmZmYzA1LDB4ZmZmZmZjMDUsDQotICAgIDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwweGZmZmZmYzA1LDB4ZmZmZmZjMDUsDQotLyogZXhjZXB0aW9uICAgICAob2Zmc2V0IDB4M0MgaW4gdXBtIHJhbSkgKi8NCi0gICAgMHhmZmZmZmMwNywweGZmZmZmYzAzLDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwNCisKKy8qIHNpbmdsZSByZWFkICAgKG9mZnNldCAweDAwIGluIHVwbSByYW0pICovCisgICAgMHgwZmYzZmMwNCwweDA4ZjNmYzA0LDB4MDBmM2ZjMDQsMHgwMGYzZmMwMCwKKyAgICAweDMzZjdmYzA3LDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwweGZmZmZmYzA1LAorLyogYnVyc3QgcmVhZCAgICAob2Zmc2V0IDB4MDggaW4gdXBtIHJhbSkgKi8KKyAgICAweDBmZjNmYzA0LDB4MDhmM2ZjMDQsMHgwMGYzZmMwYywweDBmZjNmYzQwLAorICAgIDB4MGNmM2ZjMDQsMHgwM2YzZmM0OCwweDBjZjNmYzA0LDB4MDNmM2ZjNDgsCisgICAgMHgwY2YzZmMwNCwweDAzZjNmYzAwLDB4M2ZmN2ZjMDcsMHhmZmZmZmMwNSwKKyAgICAweGZmZmZmYzA1LDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwweGZmZmZmYzA1LAorLyogc2luZ2xlIHdyaXRlICAob2Zmc2V0IDB4MTggaW4gdXBtIHJhbSkgKi8KKyAgICAweDBmZmZmYzA0LDB4MDhmZmZjMDQsMHgzMGZmZmMwMCwweGYxZmZmYzA3LAorICAgIDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwweGZmZmZmYzA1LDB4ZmZmZmZjMDUsCisvKiBidXJzdCB3cml0ZSAgIChvZmZzZXQgMHgyMCBpbiB1cG0gcmFtKSAqLworICAgIDB4MGZmZmZjMDQsMHgwOGZmZmMwMCwweDAwZmZmYzA0LDB4MDNmZmZjNGMsCisgICAgMHgwMGZmZmMwMCwweDA3ZmZmYzRjLDB4MDBmZmZjMDAsMHgwZmZmZmM0YywKKyAgICAweDAwZmZmYzAwLDB4M2ZmZmZjMDcsMHhmZmZmZmMwNSwweGZmZmZmYzA1LAorICAgIDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwweGZmZmZmYzA1LDB4ZmZmZmZjMDUsCisvKiByZWZyZXNoICAgICAgIChvZmZzZXQgMHgzMCBpbiB1cG0gcmFtKSAqLworICAgIDB4YzBmZmZjMDQsMHgwN2ZmZmMwNCwweDBmZmZmYzA0LDB4MGZmZmZjMDQsCisgICAgMHhmZmZmZmMwNSwweGZmZmZmYzA1LDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwKKyAgICAweGZmZmZmYzA1LDB4ZmZmZmZjMDUsMHhmZmZmZmMwNSwweGZmZmZmYzA1LAorLyogZXhjZXB0aW9uICAgICAob2Zmc2V0IDB4M0MgaW4gdXBtIHJhbSkgKi8KKyAgICAweGZmZmZmYzA3LDB4ZmZmZmZjMDMsMHhmZmZmZmMwNSwweGZmZmZmYzA1LAogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogUHJpbnQgQm9hcmQgSWRlbnRpdHkNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQcmludCBCb2FyZCBJZGVudGl0eQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGNoZWNrYm9hcmQgKHZvaWQpCiB7CiAJcHV0cyAoIkJvYXJkOiJDT05GSUdfSURFTlRfU1RSSU5HIlxuIik7CiAJcmV0dXJuICgwKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogSW5pdGlhbGl6ZSBEUkFNIGNvbnRyb2xsZXINCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbml0aWFsaXplIERSQU0gY29udHJvbGxlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogbG9uZyBpbnQgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQogewogCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgQ0ZHX0lNTVI7CkBAIC04NSwxMDMgKzg1LDkzIEBACiAJICogT25seSBpbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIHdoZW4gcnVubmluZyBmcm9tIEZMQVNILgogCSAqIFdoZW4gcnVubmluZyBmcm9tIFJBTSwgZG9uJ3QgdG91Y2ggaXQuCiAJICovCi0JaWYgKCh1bG9uZykgaW5pdGRyYW0gJiAweGZmMDAwMDAwKQ0KLQl7DQotCQl2b2xhdGlsZSB1aW50CSphZGRyMSwgKmFkZHIyOw0KLQkJdWludAkJCWksIGo7DQorCWlmICgodWxvbmcpIGluaXRkcmFtICYgMHhmZjAwMDAwMCkgeworCQl2b2xhdGlsZSB1aW50ICphZGRyMSwgKmFkZHIyOworCQl1aW50IGksIGo7CiAKLQkJdXBtY29uZmlnIChVUE1BLCAodWludCAqKSBlZG9fNjBuc18yNU1Iel90YmwsDQotCQkJc2l6ZW9mIChlZG9fNjBuc18yNU1Iel90YmwpIC8gc2l6ZW9mICh1aW50KSk7CisJCXVwbWNvbmZpZyAoVVBNQSwgKHVpbnQgKikgZWRvXzYwbnNfMjVNSHpfdGJsLAorCQkJICAgc2l6ZW9mIChlZG9fNjBuc18yNU1Iel90YmwpIC8gc2l6ZW9mICh1aW50KSk7CiAJCW1lbWN0bC0+bWVtY19tcHRwciA9IDB4MDIwMDsKIAkJbWVtY3RsLT5tZW1jX21hbXIgPSAweDBjYTIwMzMwOwogCQltZW1jdGwtPm1lbWNfb3IyID0gLUNGR19EUkFNX01BWCB8IE9SX0NTTlRfU0FNOwogCQltZW1jdGwtPm1lbWNfYnIyID0gQ0ZHX0RSQU1fQkFTRSB8IEJSX01TX1VQTUEgfCBCUl9WOwotCQkvKg0KLQkJICogRG8gOCByZWFkIGFjY2Vzc2VzIHRvIERSQU0NCi0JCSAqLw0KLQkJYWRkcjEgPSAodm9sYXRpbGUgdWludCopIDA7DQotCQlhZGRyMiA9ICh2b2xhdGlsZSB1aW50KikgMHgwMDQwMDAwMDsNCi0JCWZvciAoaT0wLCBqPTA7IGk8ODsgaSsrKQ0KLQkJCWogPSBhZGRyMVswXTsNCi0JCQ0KLQkJLyoNCi0JCSAqIE5vdyBjaGVjayB3aGV0aGVyIHdlIGdvdCA0TUIgb3IgMTZNQiBwb3B1bGF0ZWQNCi0JCSAqLw0KLQkJYWRkcjFbMF0gPSAweDEyMzQ1Njc4Ow0KLQkJYWRkcjFbMV0gPSAweDlhYmNkZWYwOw0KLQkJYWRkcjJbMF0gPSAweGZlZWRjMGRlOw0KLQkJYWRkcjJbMV0gPSAweDQ3MTEwODE1Ow0KLQkJaWYgKGFkZHIxWzBdID09IDB4ZmVlZGMwZGUgJiYgYWRkcjFbMV0gPT0gMHg0NzExMDgxNSkNCi0JCXsNCi0JCQkvKiBvbmx5IDRNQiBwb3B1bGF0ZWQgKi8NCi0JCQltZW1jdGwtPm1lbWNfb3IyID0gLShDRkdfRFJBTV9NQVgvNCkgfCBPUl9DU05UX1NBTTsNCi0JCX0NCi0JfQ0KLQ0KKwkJLyoKKwkJICogRG8gOCByZWFkIGFjY2Vzc2VzIHRvIERSQU0KKwkJICovCisJCWFkZHIxID0gKHZvbGF0aWxlIHVpbnQgKikgMDsKKwkJYWRkcjIgPSAodm9sYXRpbGUgdWludCAqKSAweDAwNDAwMDAwOworCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDg7IGkrKykKKwkJCWogPSBhZGRyMVswXTsKKworCQkvKgorCQkgKiBOb3cgY2hlY2sgd2hldGhlciB3ZSBnb3QgNE1CIG9yIDE2TUIgcG9wdWxhdGVkCisJCSAqLworCQlhZGRyMVswXSA9IDB4MTIzNDU2Nzg7CisJCWFkZHIxWzFdID0gMHg5YWJjZGVmMDsKKwkJYWRkcjJbMF0gPSAweGZlZWRjMGRlOworCQlhZGRyMlsxXSA9IDB4NDcxMTA4MTU7CisJCWlmIChhZGRyMVswXSA9PSAweGZlZWRjMGRlICYmIGFkZHIxWzFdID09IDB4NDcxMTA4MTUpIHsKKwkJCS8qIG9ubHkgNE1CIHBvcHVsYXRlZCAqLworCQkJbWVtY3RsLT5tZW1jX29yMiA9IC0oQ0ZHX0RSQU1fTUFYIC8gNCkgfCBPUl9DU05UX1NBTTsKKwkJfQorCX0KKwogCXJldHVybiAtKG1lbWN0bC0+bWVtY19vcjIgJiAweGZmZmYwMDAwKTsKIH0KLQ0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIG90aGVyaW5pdHMgYWZ0ZXIgUkFNIGlzIHRoZXJlIGFuZCB3ZSBhcmUgcmVsb2NhdGVkIHRvIFJBTQ0KLSAqIG5vdGU6IHRob3VnaCB0aGlzIGlzIGFuIGludCBmdW5jdGlvbiwgbm9ib2R5IGNhcmVzIGZvciB0aGUgcmVzdWx0IQ0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogb3RoZXJpbml0cyBhZnRlciBSQU0gaXMgdGhlcmUgYW5kIHdlIGFyZSByZWxvY2F0ZWQgdG8gUkFNCisgKiBub3RlOiB0aG91Z2ggdGhpcyBpcyBhbiBpbnQgZnVuY3Rpb24sIG5vYm9keSBjYXJlcyBmb3IgdGhlIHJlc3VsdCEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGludCBtaXNjX2luaXRfciAodm9pZCkKLXsNCi0JLyogcmVhZCAnZmFjdG9yeScgcGFydCBvZiBFRVBST00gKi8NCi0JdWNoYXIJCQkJYnVmWzgxXTsNCi0JdWNoYXIJCQkJKnA7DQotCXVpbnQJCQkJbGVuZ3RoOw0KLQl1aW50CQkJCWFkZHI7DQotCXVpbnQJCQkJbGVuOw0KLQ0KLQkvKiBnZXQgbGVuZ3RoIGZpcnN0ICovDQotCWFkZHIgPSBDRkdfRkFDVF9PRkZTRVQ7DQotCWlmIChlZXByb21fcmVhZCAoQ0ZHX0kyQ19GQUNUX0FERFIsIGFkZHIsIGJ1ZiwgMikpDQotCXsNCi1iYWlsb3V0Og0KLQkJcHJpbnRmICgiY2Fubm90IHJlYWQgZmFjdG9yeSBjb25maWd1cmF0aW9uXG4iKTsNCi0JCXByaW50ZiAoImJlIHN1cmUgdG8gc2V0IGV0aGFkZHIJeW91cnNlbGYhXG4iKTsNCi0JCXJldHVybiAwOw0KK3sKKwkvKiByZWFkICdmYWN0b3J5JyBwYXJ0IG9mIEVFUFJPTSAqLworCXVjaGFyIGJ1Zls4MV07CisJdWNoYXIgKnA7CisJdWludCBsZW5ndGg7CisJdWludCBhZGRyOworCXVpbnQgbGVuOworCisJLyogZ2V0IGxlbmd0aCBmaXJzdCAqLworCWFkZHIgPSBDRkdfRkFDVF9PRkZTRVQ7CisJaWYgKGVlcHJvbV9yZWFkIChDRkdfSTJDX0ZBQ1RfQUREUiwgYWRkciwgYnVmLCAyKSkgeworCSAgYmFpbG91dDoKKwkJcHJpbnRmICgiY2Fubm90IHJlYWQgZmFjdG9yeSBjb25maWd1cmF0aW9uXG4iKTsKKwkJcHJpbnRmICgiYmUgc3VyZSB0byBzZXQgZXRoYWRkcgl5b3Vyc2VsZiFcbiIpOworCQlyZXR1cm4gMDsKIAl9Ci0JbGVuZ3RoID0gYnVmWzBdICsgKGJ1ZlsxXTw8OCk7DQotCWFkZHIgKz0gMjsNCi0NCi0JLyogc2FuaXR5IGNoZWNrICovDQotCWlmIChsZW5ndGggPCAyMCB8fCBsZW5ndGggPiBDRkdfRkFDVF9TSVpFLTIpDQotCQlnb3RvIGJhaWxvdXQ7DQotDQotCS8qIHJlYWQgbGluZXMgKi8NCi0Jd2hpbGUgKGxlbmd0aCA+IDApDQotCXsNCi0JCS8qIHJlYWQgb25lIGxpbmUgKi8NCi0JCWxlbiA9IGxlbmd0aCA+IDgwID8gODAgOiBsZW5ndGg7DQotCQlpZiAoZWVwcm9tX3JlYWQgKENGR19JMkNfRkFDVF9BRERSLCBhZGRyLCBidWYsIGxlbikpDQotCQkJZ290byBiYWlsb3V0Ow0KLQkJLyogbWFyayBlbmQgb2YgYnVmZmVyICovDQotCQlidWZbbGVuXSA9IDA7DQotCQkvKiBzZWFyY2ggZW5kIG9mIGxpbmUgKi8NCi0JCWZvciAocD1idWY7ICpwICYmICpwICE9IDB4MGE7IHArKykgOw0KLQkJaWYgKCEqcCkNCi0JCQlnb3RvIGJhaWxvdXQ7DQotCQkqcCsrID0gMDsNCi0JCS8qIGFkdmFuY2UgdG8gbmV4dCBsaW5lIHN0YXJ0ICovDQotCQlsZW5ndGggLT0gcC1idWY7DQotCQlhZGRyICs9IHAtYnVmOw0KLQkJLypwcmludGYgKCIlc1xuIiwgYnVmKTsqLw0KLQkJLyogc2VhcmNoIGZvciBvdXIgc3BlY2lmaWMgZW50cnkgKi8NCi0JCWlmICghc3RybmNtcCAoKGNoYXIgKilidWYsICJbUkxBL2xhbi9FdGhlcm5ldF0gIiwgMTkpKQ0KLQkJew0KLQkJCXNldGVudiAoImV0aGFkZHIiLCBidWYrMTkpOwotCQl9IA0KLQkJZWxzZSBpZiAoIXN0cm5jbXAgKChjaGFyICopYnVmLCAiW0JPQVJEL1NFUklBTF0gIiwgMTUpKQ0KLQkJew0KLQkJCXNldGVudiAoInNlcmlhbCMiLCBidWYrMTUpOwotCQl9IA0KLQkJZWxzZSBpZiAoIXN0cm5jbXAgKChjaGFyICopYnVmLCAiW0JPQVJEL1RZUEVdICIsIDEzKSkNCi0JCXsNCi0JCQlzZXRlbnYgKCJib2FyZF9pZCIsIGJ1ZisxMyk7Ci0JCX0gDQotCX0NCisJbGVuZ3RoID0gYnVmWzBdICsgKGJ1ZlsxXSA8PCA4KTsKKwlhZGRyICs9IDI7CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAobGVuZ3RoIDwgMjAgfHwgbGVuZ3RoID4gQ0ZHX0ZBQ1RfU0laRSAtIDIpCisJCWdvdG8gYmFpbG91dDsKKworCS8qIHJlYWQgbGluZXMgKi8KKwl3aGlsZSAobGVuZ3RoID4gMCkgeworCQkvKiByZWFkIG9uZSBsaW5lICovCisJCWxlbiA9IGxlbmd0aCA+IDgwID8gODAgOiBsZW5ndGg7CisJCWlmIChlZXByb21fcmVhZCAoQ0ZHX0kyQ19GQUNUX0FERFIsIGFkZHIsIGJ1ZiwgbGVuKSkKKwkJCWdvdG8gYmFpbG91dDsKKwkJLyogbWFyayBlbmQgb2YgYnVmZmVyICovCisJCWJ1ZltsZW5dID0gMDsKKwkJLyogc2VhcmNoIGVuZCBvZiBsaW5lICovCisJCWZvciAocCA9IGJ1ZjsgKnAgJiYgKnAgIT0gMHgwYTsgcCsrKTsKKwkJaWYgKCEqcCkKKwkJCWdvdG8gYmFpbG91dDsKKwkJKnArKyA9IDA7CisJCS8qIGFkdmFuY2UgdG8gbmV4dCBsaW5lIHN0YXJ0ICovCisJCWxlbmd0aCAtPSBwIC0gYnVmOworCQlhZGRyICs9IHAgLSBidWY7CisJCS8qcHJpbnRmICgiJXNcbiIsIGJ1Zik7ICovCisJCS8qIHNlYXJjaCBmb3Igb3VyIHNwZWNpZmljIGVudHJ5ICovCisJCWlmICghc3RybmNtcCAoKGNoYXIgKikgYnVmLCAiW1JMQS9sYW4vRXRoZXJuZXRdICIsIDE5KSkgeworCQkJc2V0ZW52ICgiZXRoYWRkciIsIGJ1ZiArIDE5KTsKKwkJfSBlbHNlIGlmICghc3RybmNtcCAoKGNoYXIgKikgYnVmLCAiW0JPQVJEL1NFUklBTF0gIiwgMTUpKSB7CisJCQlzZXRlbnYgKCJzZXJpYWwjIiwgYnVmICsgMTUpOworCQl9IGVsc2UgaWYgKCFzdHJuY21wICgoY2hhciAqKSBidWYsICJbQk9BUkQvVFlQRV0gIiwgMTMpKSB7CisJCQlzZXRlbnYgKCJib2FyZF9pZCIsIGJ1ZiArIDEzKTsKKwkJfQorCX0KIAlyZXR1cm4gKDApOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9lbWsvdG9wODYwL3UtYm9vdC5sZHMgYi9ib2FyZC9lbWsvdG9wODYwL3UtYm9vdC5sZHMKaW5kZXggNjM3MTExMC4uZjZmNTQ4NSAxMDA2NDQKLS0tIGEvYm9hcmQvZW1rL3RvcDg2MC91LWJvb3QubGRzCisrKyBiL2JvYXJkL2Vtay90b3A4NjAvdS1ib290LmxkcwpAQCAtOTgsNiArOTgsMTIgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTIwLDQgKzEyNiwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2Vtay90b3A4NjAvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2Vtay90b3A4NjAvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCBiZDEzYjdiLi44ZDkxYmU1IDEwMDY0NAotLS0gYS9ib2FyZC9lbWsvdG9wODYwL3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvZW1rL3RvcDg2MC91LWJvb3QubGRzLmRlYnVnCkBAIC0xMjksNCArMTI5LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXA3MzEyL01ha2VmaWxlIGIvYm9hcmQvZXA3MzEyL01ha2VmaWxlCmluZGV4IDYwYjMzNjMuLjJiNGM5NzUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VwNzMxMi9NYWtlZmlsZQorKysgYi9ib2FyZC9lcDczMTIvTWFrZWZpbGUKQEAgLTMwLDcgKzMwLDcgQEAKIFNPQkpTCTo9IG1lbXNldHVwLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXA3MzEyL21lbXNldHVwLlMgYi9ib2FyZC9lcDczMTIvbWVtc2V0dXAuUwppbmRleCBkY2ExZWQ0Li42MDc4OTM3IDEwMDY0NAotLS0gYS9ib2FyZC9lcDczMTIvbWVtc2V0dXAuUworKysgYi9ib2FyZC9lcDczMTIvbWVtc2V0dXAuUwpAQCAtMjEsNyArMjEsNiBAQAogICovCiAKIAotCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogCkBAIC05NCw0ICs5MywzIEBACiAKIAkvKiBldmVyeXRoaW5nIGlzIGZpbmUgbm93ICovCiAJbW92CXBjLCBscgotCmRpZmYgLS1naXQgYS9ib2FyZC9lcDczMTIvdS1ib290LmxkcyBiL2JvYXJkL2VwNzMxMi91LWJvb3QubGRzCmluZGV4IDA4NDk2NDguLjkxNWU3YzQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VwNzMxMi91LWJvb3QubGRzCisrKyBiL2JvYXJkL2VwNzMxMi91LWJvb3QubGRzCkBAIC0yNiwyOCArMjYsMzIgQEAKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7Ci0gICAgICAgIC4gPSAweDAwMDAwMDAwOworCS4gPSAweDAwMDAwMDAwOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKKwkuID0gQUxJR04oNCk7CiAJLnRleHQgICAgICA6CiAJewogCSAgY3B1L2FybTcyMHQvc3RhcnQubwkoLnRleHQpCiAJICAqKC50ZXh0KQogCX0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5kYXRhIDogeyAqKC5kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZ290IDogeyAqKC5nb3QpIH0KKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CiAKIAlhcm1ib290X2VuZF9kYXRhID0gLjsKIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5ic3MgOiB7ICooLmJzcykgfQorCS4gPSBBTElHTig0KTsKKwkuYnNzIDogeyAqKC5ic3MpIH0KIAogCWFybWJvb3RfZW5kID0gLjsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2VwODI2MC9NYWtlZmlsZSBiL2JvYXJkL2VwODI2MC9NYWtlZmlsZQppbmRleCAxYzYzMWRjLi40NzdlNWVlIDEwMDY0NAotLS0gYS9ib2FyZC9lcDgyNjAvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXA4MjYwL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIG1paV9waHkubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL2VwODI2MC9lcDgyNjAuYyBiL2JvYXJkL2VwODI2MC9lcDgyNjAuYwppbmRleCBkYzMzZWRiLi5hNDljNTNlIDEwMDY0NAotLS0gYS9ib2FyZC9lcDgyNjAvZXA4MjYwLmMKKysrIGIvYm9hcmQvZXA4MjYwL2VwODI2MC5jCkBAIC0zMDcsNCArMzA3LDMgQEAKICNlbmRpZiAvKiBDRkdfUkFNQk9PVCAqLwogCXJldHVybiAoc2l6ZSAqIDEwMjQgKiAxMDI0KTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXA4MjYwL2ZsYXNoLmMgYi9ib2FyZC9lcDgyNjAvZmxhc2guYwppbmRleCBkOWRiZGJlLi5jZGZkY2YyIDEwMDY0NAotLS0gYS9ib2FyZC9lcDgyNjAvZmxhc2guYworKysgYi9ib2FyZC9lcDgyNjAvZmxhc2guYwpAQCAtNjcsNyArNjcsNyBAQAogICBmbGFzaHRlc3RfbCA9IFZfVUxPTkcoYmFzZWFkZHIgKyA0KTsKIAogICBpZiAoKGludClmbGFzaHRlc3RfaCA9PSBBTURfTUFOVUZBQ1QpIHsKLSAgCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRDsKKwlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7CiAgIH0gZWxzZSB7CiAJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwogCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CkBAIC0xMDIsMTAgKzEwMiwxMCBAQAogICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKICAgICAvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQTcgLi4gQTApID0gMHgwMiAqLwogICAgIGlmICgoVl9VTE9ORyggaW5mby0+c3RhcnRbaV0gKyAxNiApICYgMHgwMDAxMDAwMSkgfHwKLSAgICAgICAgKFZfVUxPTkcoIGluZm8tPnN0YXJ0W2ldICsgMjAgKSAmIDB4MDAwMTAwMDEpKSB7CisJKFZfVUxPTkcoIGluZm8tPnN0YXJ0W2ldICsgMjAgKSAmIDB4MDAwMTAwMDEpKSB7CiAJaW5mby0+cHJvdGVjdFtpXSA9IDE7CQkvKiBEMCA9IDEgaWYgcHJvdGVjdGVkICovCiAgICAgfSBlbHNlIHsKLSAgICAJaW5mby0+cHJvdGVjdFtpXSA9IDA7CisJaW5mby0+cHJvdGVjdFtpXSA9IDA7CiAgICAgfQogICB9CiAKQEAgLTM4Nyw3ICszODcsNyBAQAogICAgIC8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KICAgICBzdGFydCA9IGdldF90aW1lciAoMCk7CiAgICAgd2hpbGUgKCgoVl9VTE9ORyggZGVzdCApICYgMHgwMDgwMDA4MCkgIT0gKGNoICYgMHgwMDgwMDA4MCkpIHx8Ci0gICAgICAgICAgICgoVl9VTE9ORyggZGVzdCArIDQgKSAmIDB4MDA4MDAwODApICE9IChjbCAmIDB4MDA4MDAwODApKSkgeworCSAgICgoVl9VTE9ORyggZGVzdCArIDQgKSAmIDB4MDA4MDAwODApICE9IChjbCAmIDB4MDA4MDAwODApKSkgewogCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKIAkgICAgcmV0dXJuICgxKTsKIAl9CmRpZmYgLS1naXQgYS9ib2FyZC9lcDgyNjAvbWlpX3BoeS5jIGIvYm9hcmQvZXA4MjYwL21paV9waHkuYwppbmRleCBlM2I3ODc4Li44MTNmMDIwIDEwMDY0NAotLS0gYS9ib2FyZC9lcDgyNjAvbWlpX3BoeS5jCisrKyBiL2JvYXJkL2VwODI2MC9taWlfcGh5LmMKQEAgLTM4LDcgKzM4LDcgQEAKIAlpZiAocGh5X3JlZyAmIDB4MDQwMCkKIAkgICAgcHJpbnRmKCJQaHkgb3BlcmF0aW5nIGF0ICVkIE1CaXQvcyBpbiAlcy1kdXBsZXggbW9kZVxuIiwKIAkJcGh5X3JlZyAmIDB4NDAwMCA/IDEwMCA6IDEwLAotCSAgICAJcGh5X3JlZyAmIDB4MDIwMCA/ICJmdWxsIiA6ICJoYWxmIik7CisJCXBoeV9yZWcgJiAweDAyMDAgPyAiZnVsbCIgOiAiaGFsZiIpOwogCWVsc2UKIAkgICAgcHJpbnRmKCJiYWQgbGluayEhXG4iKTsKIC8qCkBAIC01OSw3ICs1OSw3IEBACiAgICAgdG1wID0gMHg2MDAyIHwgKGFkciA8PCA3KSB8IChyZWcgPDwgMik7CiAgICAgcmVncy0+YmNzcjQgPSAweEMzOwogICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0gICAgICAgIHJlZ3MtPmJjc3I0IF49IE1JSV9NRENLOworCXJlZ3MtPmJjc3I0IF49IE1JSV9NRENLOwogICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCXJlZ3MtPmJjc3I0ICY9IH5NSUlfTURDSzsKQEAgLTkyLDcgKzkyLDcgQEAKICAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAlyZWdzLT5iY3NyNCAmPSB+TUlJX01EQ0s7Ci0gICAgICAgIGlmICh0bXAgJiAweDgwMDApIHJlZ3MtPmJjc3I0IHw9IE1JSV9NRElPOworCWlmICh0bXAgJiAweDgwMDApIHJlZ3MtPmJjc3I0IHw9IE1JSV9NRElPOwogCWVsc2UgcmVncy0+YmNzcjQgJj0gfk1JSV9NRElPOwogCXJlZ3MtPmJjc3I0IHw9IE1JSV9NRENLOwogCXRtcCA8PD0gMTsKQEAgLTEwNSw0ICsxMDUsMyBAQAogCXZhbCA8PD0gMTsKICAgICB9CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2VwODI2MC91LWJvb3QubGRzIGIvYm9hcmQvZXA4MjYwL3UtYm9vdC5sZHMKaW5kZXggYTZjMmVmNS4uNGVhM2M4NiAxMDA2NDQKLS0tIGEvYm9hcmQvZXA4MjYwL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXA4MjYwL3UtYm9vdC5sZHMKQEAgLTk1LDYgKzk1LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMTcsNCArMTIyLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXJpYy9NYWtlZmlsZSBiL2JvYXJkL2VyaWMvTWFrZWZpbGUKaW5kZXggN2E5ZDI1YS4uZjU1ZTdlMiAxMDA2NDQKLS0tIGEvYm9hcmQvZXJpYy9NYWtlZmlsZQorKysgYi9ib2FyZC9lcmljL01ha2VmaWxlCkBAIC0yOSw3ICsyOSw3IEBACiBTT0JKUwk9IGluaXQubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9lcmljL2ZsYXNoLmMgYi9ib2FyZC9lcmljL2ZsYXNoLmMKaW5kZXggNWRmYjYyMC4uYzA4YTc2MCAxMDA2NDQKLS0tIGEvYm9hcmQvZXJpYy9mbGFzaC5jCisrKyBiL2JvYXJkL2VyaWMvZmxhc2guYwpAQCAtNTcsOCArNTcsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgc2l6ZV9iMCwgc2l6ZV9iMTsKIAlpbnQgaTsKLSAgICAgICAgdWludCBwYmNyOwotICAgICAgICB1bnNpZ25lZCBsb25nIGJhc2VfYjAsIGJhc2VfYjE7CisJdWludCBwYmNyOworCXVuc2lnbmVkIGxvbmcgYmFzZV9iMCwgYmFzZV9iMTsKIAogCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KIAlmb3IgKGk9MDsgaTxDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2kpIHsKQEAgLTg4LDkgKzg4LDkgQEAKIAkJCQkmZmxhc2hfaW5mb1swXSk7CiAjZWxzZQogCSAgICAodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0JCSAgICAgIAkJQ0ZHX01PTklUT1JfQkFTRSwKLQkJICAgICAgCQlDRkdfTU9OSVRPUl9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTEsCi0JCSAgICAgIAkJJmZsYXNoX2luZm9bMF0pOworCQkJCUNGR19NT05JVE9SX0JBU0UsCisJCQkJQ0ZHX01PTklUT1JfQkFTRSttb25pdG9yX2ZsYXNoX2xlbi0xLAorCQkJCSZmbGFzaF9pbmZvWzBdKTsKICNlbmRpZgogCSAgICBzaXplX2IxID0gMCA7CiAJICAgIGZsYXNoX2luZm9bMF0uc2l6ZSA9IHNpemVfYjA7CkBAIC0xMzcsOSArMTM3LDkgQEAKIAkJCQkmZmxhc2hfaW5mb1swXSk7CiAjZWxzZQogCSAgICAodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0JCSAgICAgIAkJQ0ZHX01PTklUT1JfQkFTRSwKLQkJICAgICAgCQlDRkdfTU9OSVRPUl9CQVNFK21vbml0b3JfZmxhc2hfbGVuLTEsCi0JCSAgICAgIAkJJmZsYXNoX2luZm9bMF0pOworCQkJCUNGR19NT05JVE9SX0JBU0UsCisJCQkJQ0ZHX01PTklUT1JfQkFTRSttb25pdG9yX2ZsYXNoX2xlbi0xLAorCQkJCSZmbGFzaF9pbmZvWzBdKTsKICNlbmRpZgogCiAJICAgIGlmIChzaXplX2IxKSB7CkBAIC0xNzAsNyArMTcwLDYgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0xODYsNyArMTg1LDcgQEAKIAkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiBpbmZvLT5zaXplL2luZm8tPnNlY3Rvcl9jb3VudCk7CiAJICAgIH0KIAl9IGVsc2UgaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfQlRZUEUpIHsKLSAgICAgICAgICAgICBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9JTlRFTCkgeworCSAgICAgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUwpIHsKIAogI2lmbmRlZiBDRkdfRkxBU0hfMTZCSVQKIAkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCkBAIC0yMDAsOSArMTk5LDkgQEAKIAkJaW5mby0+c3RhcnRbN10gPSBiYXNlICsgMHgwMDAxQzAwMDsKIAkJZm9yIChpID0gODsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CiAJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMjAwMDApIC0gMHgwMDBFMDAwMDsKLQkgICAgICAgIH0KLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICBlbHNlIHsKKwkJfQorCSAgICAgICB9CisJICAgICBlbHNlIHsKIAkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCiAJCWluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7CiAJCWluZm8tPnN0YXJ0WzFdID0gYmFzZSArIDB4MDAwMDgwMDA7CkBAIC0yMjQsOSArMjIzLDkgQEAKIAkJaW5mby0+c3RhcnRbN10gPSBiYXNlICsgMHgwMDAwRTAwMDsKIAkJZm9yIChpID0gODsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CiAJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMTAwMDApIC0gMHgwMDA3MDAwMDsKLQkgICAgICAgIH0KKwkJfQogCSAgICAgICB9Ci0gICAgICAgICAgICAgZWxzZSB7CisJICAgICBlbHNlIHsKIAkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCiAJCWluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7CiAJCWluZm8tPnN0YXJ0WzFdID0gYmFzZSArIDB4MDAwMDQwMDA7CkBAIC0yNDAsNyArMjM5LDcgQEAKIAl9IGVsc2UgewogCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIHRvcCBib290IGJsb2NrIHR5cGUJCSovCiAJCWkgPSBpbmZvLT5zZWN0b3JfY291bnQgLSAxOwotICAgICAgICAgICAgIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMKSB7CisJICAgICBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9JTlRFTCkgewogCiAjaWZuZGVmIENGR19GTEFTSF8xNkJJVAogCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA0MDAwOwpAQCAtMjU0LDcgKzI1Myw3IEBACiAJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyBpICogMHgwMDAyMDAwMDsKIAkJfQogCi0gICAgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICB9IGVsc2UgewogCiAJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDgwMDA7CiAJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMEMwMDA7CkBAIC0yNzUsNyArMjc0LDcgQEAKIAkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIGkgKiAweDAwMDEwMDAwOwogCQl9CiAKLSAgICAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgIH0gZWxzZSB7CiAKIAkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNDAwMDsKIAkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNjAwMDsKQEAgLTQwOCw4ICs0MDcsOCBAQAogCiAJLyoKIAkgKiBOb3RlOiBpZiBpdCBpcyBhbiBBTUQgZmxhc2ggYW5kIHRoZSB3b3JkIGF0IGFkZHJbMDAwMF0KLSAgICAgICAgICogaXMgMHgwMDg5MDA4OSB0aGlzIHJvdXRpbmUgd2lsbCB0aGluayBpdCBpcyBhbiBJbnRlbAotICAgICAgICAgKiBmbGFzaCBkZXZpY2UgYW5kIG1heShtb3N0IGxpa2VseSkgY2F1c2UgdHJvdWJsZS4KKwkgKiBpcyAweDAwODkwMDg5IHRoaXMgcm91dGluZSB3aWxsIHRoaW5rIGl0IGlzIGFuIEludGVsCisJICogZmxhc2ggZGV2aWNlIGFuZCBtYXkobW9zdCBsaWtlbHkpIGNhdXNlIHRyb3VibGUuCiAJICovCiAKIAlhZGRyWzB4MDAwMF0gPSAweDAwOTAwMDkwOwpAQCAtNDIxLDggKzQyMCw4IEBACiAKIAkvKgogCSAqIE5vdGU6IGlmIGl0IGlzIGFuIEFNRCBmbGFzaCBhbmQgdGhlIHdvcmQgYXQgYWRkclswMDAwXQotICAgICAgICAgKiBpcyAweDAwODkgdGhpcyByb3V0aW5lIHdpbGwgdGhpbmsgaXQgaXMgYW4gSW50ZWwKLSAgICAgICAgICogZmxhc2ggZGV2aWNlIGFuZCBtYXkobW9zdCBsaWtlbHkpIGNhdXNlIHRyb3VibGUuCisJICogaXMgMHgwMDg5IHRoaXMgcm91dGluZSB3aWxsIHRoaW5rIGl0IGlzIGFuIEludGVsCisJICogZmxhc2ggZGV2aWNlIGFuZCBtYXkobW9zdCBsaWtlbHkpIGNhdXNlIHRyb3VibGUuCiAJICovCiAKIAlhZGRyWzB4MDAwMF0gPSAweDAwOTA7CkBAIC02MzEsNyArNjMwLDcgQEAKIAogCWlmICgoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgfHwKIAkgICAgKChpbmZvLT5mbGFzaF9pZCA+IEZMQVNIX0FNRF9DT01QKSAmJgotICAgICAgICAgICAgICggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9IEZMQVNIX01BTl9JTlRFTCApICkgKXsKKwkgICAgICggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9IEZMQVNIX01BTl9JTlRFTCApICkgKXsKIAkJcHJpbnRmICgiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlIC0gYWJvcnRlZFxuIik7CiAJCXJldHVybiAxOwogCX0KQEAgLTEwMzUsMTMgKzEwMzQsMTMgQEAKIAkJaWYoIGJhcmYgKSB7CiAJCQliYXJmID4+PTE2OwogCQl9IGVsc2UgewotCQkgICAgICAgIGJhcmYgPSBhZGRyWzBdICYgMHgwMDAwMDAzQTsKKwkJCWJhcmYgPSBhZGRyWzBdICYgMHgwMDAwMDAzQTsKIAkJfQogCQlwcmludGYoIlxuRmxhc2ggd3JpdGUgZXJyb3IgYXQgYWRkcmVzcyAlbHhcbiIsKHVuc2lnbmVkIGxvbmcpZGVzdCk7CiAJCWlmKGJhcmYgJiAweDAwMDIpIHByaW50ZigiQmxvY2sgbG9ja2VkLCBub3QgZXJhc2VkLlxuIik7CiAJCWlmKGJhcmYgJiAweDAwMTApIHByaW50ZigiUHJvZ3JhbW1pbmcgZXJyb3IuXG4iKTsKIAkJaWYoYmFyZiAmIDB4MDAwOCkgcHJpbnRmKCJWcHAgTG93IGVycm9yLlxuIik7Ci0JICAJcmV0dXJuKDIpOworCQlyZXR1cm4oMik7CiAJfQogCiAKQEAgLTEwNzQsNyArMTA3Myw3IEBACiAJYWRkclsweDA1NTVdID0gMHgwMEEwOwogICAgICB9IGVsc2UgewogCS8qIGludGVsIHN0dWZmICovCi0gICAgICAgICphZGRyID0gMHgwMEQwOworCSphZGRyID0gMHgwMEQwOwogCSphZGRyID0gMHgwMDQwOwogICAgICB9CiAJKigodnVfc2hvcnQgKilkZXN0KSA9IGRhdGE7CkBAIC0xMDg3LDcgKzEwODYsNyBAQAogCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKIAogICAgICBpZihpbmZvLT5mbGFzaF9pZCA8IEZMQVNIX0FNRF9DT01QKSB7Ci0gICAgICAgICAgLyogQU1EIHN0dWZmICovCisJICAvKiBBTUQgc3R1ZmYgKi8KIAl3aGlsZSAoKCooKHZ1X3Nob3J0ICopZGVzdCkgJiAweDAwODApICE9IChkYXRhICYgMHgwMDgwKSkgewogCQlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7CiAJCQlyZXR1cm4gKDEpOwpAQCAtMTEwNiw3ICsxMTA1LDcgQEAKIAkJaWYoYmFyZiAmIDB4MDAwMikgcHJpbnRmKCJCbG9jayBsb2NrZWQsIG5vdCBlcmFzZWQuXG4iKTsKIAkJaWYoYmFyZiAmIDB4MDAxMCkgcHJpbnRmKCJQcm9ncmFtbWluZyBlcnJvci5cbiIpOwogCQlpZihiYXJmICYgMHgwMDA4KSBwcmludGYoIlZwcCBMb3cgZXJyb3IuXG4iKTsKLQkgIAlyZXR1cm4oMik7CisJCXJldHVybigyKTsKIAl9CiAJKmFkZHIgPSAweDAwQjA7CiAJKmFkZHIgPSAweDAwNzA7CkBAIC0xMTI3LDQgKzExMjYsMyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXJpYy9pbml0LlMgYi9ib2FyZC9lcmljL2luaXQuUwppbmRleCBiZGY5MGE1Li45ZDRlN2ZmIDEwMDY0NAotLS0gYS9ib2FyZC9lcmljL2luaXQuUworKysgYi9ib2FyZC9lcmljL2luaXQuUwpAQCAtNDIsMTY5ICs0MiwxNjkgQEAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKIAotICAgICAJLmdsb2JsCWV4dF9idXNfY250bHJfaW5pdAorCS5nbG9ibAlleHRfYnVzX2NudGxyX2luaXQKIGV4dF9idXNfY250bHJfaW5pdDoKLSAgICAgICAgbWZsciAgICByNCAgICAgICAgICAgICAgICAgICAgICAvKiBzYXZlIGxpbmsgcmVnaXN0ZXIgKi8KLSAgICAgICAgYmwgICAgICAuLmdldEFkZHIKKwltZmxyICAgIHI0ICAgICAgICAgICAgICAgICAgICAgIC8qIHNhdmUgbGluayByZWdpc3RlciAqLworCWJsICAgICAgLi5nZXRBZGRyCiAuLmdldEFkZHI6Ci0gICAgICAgIG1mbHIgICAgcjMgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IGFkZHJlc3Mgb2YgLi5nZXRBZGRyICovCi0gICAgICAgIG10bHIgICAgcjQgICAgICAgICAgICAgICAgICAgICAgLyogcmVzdG9yZSBsaW5rIHJlZ2lzdGVyICovCi0gICAgICAgIGFkZGkgICAgcjQsMCwxNCAgICAgICAgICAgICAgICAgLyogc2V0IGN0ciB0byAxMDsgdXNlZCB0byBwcmVmZXRjaCAqLwotICAgICAgICBtdGN0ciAgIHI0ICAgICAgICAgICAgICAgICAgICAgIC8qIDEwIGNhY2hlIGxpbmVzIHRvIGZpdCB0aGlzIGZ1bmN0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gY2FjaGUgKGdpdmVzIHVzIDh4MTA9ODAgaW5zdHJjdG5zKSAqLworCW1mbHIgICAgcjMgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IGFkZHJlc3Mgb2YgLi5nZXRBZGRyICovCisJbXRsciAgICByNCAgICAgICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIGxpbmsgcmVnaXN0ZXIgKi8KKwlhZGRpICAgIHI0LDAsMTQgICAgICAgICAgICAgICAgIC8qIHNldCBjdHIgdG8gMTA7IHVzZWQgdG8gcHJlZmV0Y2ggKi8KKwltdGN0ciAgIHI0ICAgICAgICAgICAgICAgICAgICAgIC8qIDEwIGNhY2hlIGxpbmVzIHRvIGZpdCB0aGlzIGZ1bmN0aW9uICovCisJCQkJCS8qIGluIGNhY2hlIChnaXZlcyB1cyA4eDEwPTgwIGluc3RyY3RucykgKi8KIC4uZWJjbG9vcDoKLSAgICAgICAgaWNidCAgICByMCxyMyAgICAgICAgICAgICAgICAgICAvKiBwcmVmZXRjaCBjYWNoZSBsaW5lIGZvciBhZGRyIGluIHIzICovCi0gICAgICAgIGFkZGkgICAgcjMscjMsMzIJCS8qIG1vdmUgdG8gbmV4dCBjYWNoZSBsaW5lICovCi0gICAgICAgIGJkbnogICAgLi5lYmNsb29wICAgICAgICAgICAgICAgLyogY29udGludWUgZm9yIDEwIGNhY2hlIGxpbmVzICovCisJaWNidCAgICByMCxyMyAgICAgICAgICAgICAgICAgICAvKiBwcmVmZXRjaCBjYWNoZSBsaW5lIGZvciBhZGRyIGluIHIzICovCisJYWRkaSAgICByMyxyMywzMgkJLyogbW92ZSB0byBuZXh0IGNhY2hlIGxpbmUgKi8KKwliZG56ICAgIC4uZWJjbG9vcCAgICAgICAgICAgICAgIC8qIGNvbnRpbnVlIGZvciAxMCBjYWNoZSBsaW5lcyAqLwogCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICAvKiBEZWxheSB0byBlbnN1cmUgYWxsIGFjY2Vzc2VzIHRvIFJPTSBhcmUgY29tcGxldGUgYmVmb3JlIGNoYW5naW5nICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogRGVsYXkgdG8gZW5zdXJlIGFsbCBhY2Nlc3NlcyB0byBST00gYXJlIGNvbXBsZXRlIGJlZm9yZSBjaGFuZ2luZyAqLwogCS8qIGJhbmsgMCB0aW1pbmdzLiAyMDB1c2VjIHNob3VsZCBiZSBlbm91Z2guICovCi0gICAgICAgIC8qICAgMjAwLDAwMCwwMDAgKGN5Y2xlcy9zZWMpIFggLjAwMDIwMCAoc2VjKSA9IDB4OUM0MCBjeWNsZXMgKi8KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogICAyMDAsMDAwLDAwMCAoY3ljbGVzL3NlYykgWCAuMDAwMjAwIChzZWMpID0gMHg5QzQwIGN5Y2xlcyAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCWFkZGlzCXIzLDAsMHgwCi0gICAgICAgIG9yaSAgICAgcjMscjMsMHhBMDAwICAgICAgICAgIC8qIGVuc3VyZSAyMDB1c2VjIGhhdmUgcGFzc2VkIHNpbmNlIHJlc2V0ICovCi0gICAgICAgIG10Y3RyICAgcjMKKwlvcmkgICAgIHIzLHIzLDB4QTAwMCAgICAgICAgICAvKiBlbnN1cmUgMjAwdXNlYyBoYXZlIHBhc3NlZCBzaW5jZSByZXNldCAqLworCW10Y3RyICAgcjMKIC4uc3BpbmxwOgotICAgICAgICBiZG56ICAgIC4uc3BpbmxwICAgICAgICAgICAgICAgIC8qIHNwaW4gbG9vcCAqLworCWJkbnogICAgLi5zcGlubHAgICAgICAgICAgICAgICAgLyogc3BpbiBsb29wICovCiAKLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICAvKiBNZW1vcnkgQmFuayAwIChGbGFzaCkgaW5pdGlhbGl6YXRpb24gKGZyb20gb3BlbmJpb3MpICovCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogTWVtb3J5IEJhbmsgMCAoRmxhc2gpIGluaXRpYWxpemF0aW9uIChmcm9tIG9wZW5iaW9zKSAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotICAgICAgICBhZGRpICAgIHI0LDAscGIwYXAKLSAgICAgICAgbXRkY3IgICBlYmNjZmdhLHI0Ci0gICAgICAgIGFkZGlzICAgcjQsMCxDUzBfQVBAaAotICAgICAgICBvcmkgICAgIHI0LHI0LENTMF9BUEBsCi0gICAgICAgIG10ZGNyICAgZWJjY2ZnZCxyNAorCWFkZGkgICAgcjQsMCxwYjBhcAorCW10ZGNyICAgZWJjY2ZnYSxyNAorCWFkZGlzICAgcjQsMCxDUzBfQVBAaAorCW9yaSAgICAgcjQscjQsQ1MwX0FQQGwKKwltdGRjciAgIGViY2NmZ2QscjQKIAotICAgICAgICBhZGRpICAgIHI0LDAscGIwY3IKLSAgICAgICAgbXRkY3IgICBlYmNjZmdhLHI0Ci0gICAgICAgIGFkZGlzICAgcjQsMCxDUzBfQ1JAaAotICAgICAgICBvcmkgICAgIHI0LHI0LENTMF9DUkBsCi0gICAgICAgIG10ZGNyICAgZWJjY2ZnZCxyNAorCWFkZGkgICAgcjQsMCxwYjBjcgorCW10ZGNyICAgZWJjY2ZnYSxyNAorCWFkZGlzICAgcjQsMCxDUzBfQ1JAaAorCW9yaSAgICAgcjQscjQsQ1MwX0NSQGwKKwltdGRjciAgIGViY2NmZ2QscjQKIAotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIE1lbW9yeSBCYW5rIDEgKE5WUkFNL1JUQykgaW5pdGlhbGl6YXRpb24gKi8KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBNZW1vcnkgQmFuayAxIChOVlJBTS9SVEMpIGluaXRpYWxpemF0aW9uICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjFhcAotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTMV9BUEBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1MxX0FQQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiMWFwCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTMV9BUEBoCisJb3JpICAgICByNCxyNCxDUzFfQVBAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjFjcgotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTMV9DUkBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1MxX0NSQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiMWNyCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTMV9DUkBoCisJb3JpICAgICByNCxyNCxDUzFfQ1JAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogTWVtb3J5IEJhbmsgMiAoQS9EIGNvbnZlcnRlcikgaW5pdGlhbGl6YXRpb24gKi8KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBNZW1vcnkgQmFuayAyIChBL0QgY29udmVydGVyKSBpbml0aWFsaXphdGlvbiAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotICAgICAgICBhZGRpICAgIHI0LDAscGIyYXAKLSAgICAgICAgbXRkY3IgICBlYmNjZmdhLHI0Ci0gICAgICAgIGFkZGlzICAgcjQsMCxDUzJfQVBAaAotICAgICAgICBvcmkgICAgIHI0LHI0LENTMl9BUEBsCi0gICAgICAgIG10ZGNyICAgZWJjY2ZnZCxyNAorCWFkZGkgICAgcjQsMCxwYjJhcAorCW10ZGNyICAgZWJjY2ZnYSxyNAorCWFkZGlzICAgcjQsMCxDUzJfQVBAaAorCW9yaSAgICAgcjQscjQsQ1MyX0FQQGwKKwltdGRjciAgIGViY2NmZ2QscjQKIAotICAgICAgICBhZGRpICAgIHI0LDAscGIyY3IKLSAgICAgICAgbXRkY3IgICBlYmNjZmdhLHI0Ci0gICAgICAgIGFkZGlzICAgcjQsMCxDUzJfQ1JAaAotICAgICAgICBvcmkgICAgIHI0LHI0LENTMl9DUkBsCi0gICAgICAgIG10ZGNyICAgZWJjY2ZnZCxyNAorCWFkZGkgICAgcjQsMCxwYjJjcgorCW10ZGNyICAgZWJjY2ZnYSxyNAorCWFkZGlzICAgcjQsMCxDUzJfQ1JAaAorCW9yaSAgICAgcjQscjQsQ1MyX0NSQGwKKwltdGRjciAgIGViY2NmZ2QscjQKIAotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIE1lbW9yeSBCYW5rIDMgKEV0aGVybmV0IFBIWSBSZXNldCkgaW5pdGlhbGl6YXRpb24gKi8KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBNZW1vcnkgQmFuayAzIChFdGhlcm5ldCBQSFkgUmVzZXQpIGluaXRpYWxpemF0aW9uICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjNhcAotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTM19BUEBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1MzX0FQQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiM2FwCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTM19BUEBoCisJb3JpICAgICByNCxyNCxDUzNfQVBAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjNjcgotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTM19DUkBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1MzX0NSQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiM2NyCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTM19DUkBoCisJb3JpICAgICByNCxyNCxDUzNfQ1JAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogTWVtb3J5IEJhbmsgNCAoUEMtTUlQIFBSU05UMSMpIGluaXRpYWxpemF0aW9uICovCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogTWVtb3J5IEJhbmsgNCAoUEMtTUlQIFBSU05UMSMpIGluaXRpYWxpemF0aW9uICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjRhcAotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTNF9BUEBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1M0X0FQQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiNGFwCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTNF9BUEBoCisJb3JpICAgICByNCxyNCxDUzRfQVBAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjRjcgotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTNF9DUkBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1M0X0NSQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiNGNyCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTNF9DUkBoCisJb3JpICAgICByNCxyNCxDUzRfQ1JAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogTWVtb3J5IEJhbmsgNSAoUEMtTUlQIFBSU05UMiMpIGluaXRpYWxpemF0aW9uICovCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogTWVtb3J5IEJhbmsgNSAoUEMtTUlQIFBSU05UMiMpIGluaXRpYWxpemF0aW9uICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjVhcAotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTNV9BUEBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1M1X0FQQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiNWFwCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTNV9BUEBoCisJb3JpICAgICByNCxyNCxDUzVfQVBAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjVjcgotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTNV9DUkBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1M1X0NSQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiNWNyCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTNV9DUkBoCisJb3JpICAgICByNCxyNCxDUzVfQ1JAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogTWVtb3J5IEJhbmsgNiAoQ1BVIExFRDApIGluaXRpYWxpemF0aW9uICovCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogTWVtb3J5IEJhbmsgNiAoQ1BVIExFRDApIGluaXRpYWxpemF0aW9uICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjZhcAotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTNl9BUEBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1M2X0FQQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiNmFwCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTNl9BUEBoCisJb3JpICAgICByNCxyNCxDUzZfQVBAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjZjcgotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTNl9DUkBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1M1X0NSQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiNmNyCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTNl9DUkBoCisJb3JpICAgICByNCxyNCxDUzVfQ1JAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogTWVtb3J5IEJhbmsgNyAoQ1BVIExFRDEpIGluaXRpYWxpemF0aW9uICovCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogTWVtb3J5IEJhbmsgNyAoQ1BVIExFRDEpIGluaXRpYWxpemF0aW9uICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjdhcAotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTN19BUEBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1M3X0FQQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiN2FwCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTN19BUEBoCisJb3JpICAgICByNCxyNCxDUzdfQVBAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCi0gICAgICAgIGFkZGkgICAgcjQsMCxwYjdjcgotICAgICAgICBtdGRjciAgIGViY2NmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLENTN19DUkBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsQ1M3X0NSQGwKLSAgICAgICAgbXRkY3IgICBlYmNjZmdkLHI0CisJYWRkaSAgICByNCwwLHBiN2NyCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLENTN19DUkBoCisJb3JpICAgICByNCxyNCxDUzdfQ1JAbAorCW10ZGNyICAgZWJjY2ZnZCxyNAogCiAvKglhZGRpcyAgIHI0LHIwLEZQR0FfQlJEQ0BoICovCi0vKiAgICAgICAgb3JpICAgICByNCxyNCxGUEdBX0JSRENAbCAqLwotLyogICAgICAgIGxieiAgICAgcjMsMChyNCkgICAgICAgICAgICAgICAgLy9nZXQgRlBHQSBib2FyZCBjb250cm9sIHJlZyAqLwotLyogICAgICAgIGVpZWlvICovCi0vKiAgICAgICAgb3JpCXIzLHIzLDB4MDEgICAgICAgICAgICAgIC8vc2V0IFVBUlQxIGNvbnRyb2wgdG8gc2VsZWN0IENUUy9SVFMgKi8KKy8qCW9yaSAgICAgcjQscjQsRlBHQV9CUkRDQGwgKi8KKy8qCWxieiAgICAgcjMsMChyNCkgICAgICAgICAgICAgICAgLyMjIypnZXQgRlBHQSBib2FyZCBjb250cm9sIHJlZyAqLworLyoJZWllaW8gKi8KKy8qCW9yaQlyMyxyMywweDAxICAgICAgICAgICAgICAvIyMjKnNldCBVQVJUMSBjb250cm9sIHRvIHNlbGVjdCBDVFMvUlRTICovCiAvKglzdGIgICAgIHIzLDAocjQpICovCiAKIAlub3AJCQkJLyogcGFzczIgRENSIGVycmF0YSAjOCAqLwotICAgICAgICBibHIKKwlibHIKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb246ICAgICBzZHJhbV9pbml0ICovCkBAIC0yMTMsNTYgKzIxMyw1NiBAQAogLyogICAgICAgICAgICAgICBJZiB3ZSBoYXZlIHR3byBTRFJBTSBiYW5rcywgc2ltcGx5IHVuZGVmIFNJTkdMRV9CQU5LIChST0xGIDotKSAqLwogLyoJCSBJdCBpcyBhc3N1bWVkIHRoYXQgYSAzMk1CIDEyeDgoMikgU0RSQU0gaXMgdXNlZC4gKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLmdsb2JsICBzZHJhbV9pbml0CisJLmdsb2JsICBzZHJhbV9pbml0CiAKIHNkcmFtX2luaXQ6CiAKIAltZmxyCXIzMQogCiAjaWZkZWYgQ0ZHX1NEUkFNX01BTlVBTExZCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICAvKiBTZXQgTUIwQ0YgZm9yIGJhbmsgMC4gKDAtMzJNQikgQWRkcmVzcyBNb2RlIDQgc2luY2UgMTJ4OCgyKSAqLwotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTZXQgTUIwQ0YgZm9yIGJhbmsgMC4gKDAtMzJNQikgQWRkcmVzcyBNb2RlIDQgc2luY2UgMTJ4OCgyKSAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0gICAgICAgIGFkZGkgICAgcjQsMCxtZW1fbWIwY2YKLSAgICAgICAgbXRkY3IgICBtZW1jZmdhLHI0Ci0gICAgICAgIGFkZGlzICAgcjQsMCxNQjBDRkBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsTUIwQ0ZAbAotICAgICAgICBtdGRjciAgIG1lbWNmZ2QscjQKKwlhZGRpICAgIHI0LDAsbWVtX21iMGNmCisJbXRkY3IgICBtZW1jZmdhLHI0CisJYWRkaXMgICByNCwwLE1CMENGQGgKKwlvcmkgICAgIHI0LHI0LE1CMENGQGwKKwltdGRjciAgIG1lbWNmZ2QscjQKIAotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogU2V0IE1CMUNGIGZvciBiYW5rIDEuICgzMk1CLTY0TUIpIEFkZHJlc3MgTW9kZSA0IHNpbmNlIDEyeDgoMikgKi8KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU2V0IE1CMUNGIGZvciBiYW5rIDEuICgzMk1CLTY0TUIpIEFkZHJlc3MgTW9kZSA0IHNpbmNlIDEyeDgoMikgKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotICAgICAgICBhZGRpICAgIHI0LDAsbWVtX21iMWNmCi0gICAgICAgIG10ZGNyICAgbWVtY2ZnYSxyNAotICAgICAgICBhZGRpcyAgIHI0LDAsTUIxQ0ZAaAotICAgICAgICBvcmkgICAgIHI0LHI0LE1CMUNGQGwKLSAgICAgICAgbXRkY3IgICBtZW1jZmdkLHI0CisJYWRkaSAgICByNCwwLG1lbV9tYjFjZgorCW10ZGNyICAgbWVtY2ZnYSxyNAorCWFkZGlzICAgcjQsMCxNQjFDRkBoCisJb3JpICAgICByNCxyNCxNQjFDRkBsCisJbXRkY3IgICBtZW1jZmdkLHI0CiAKLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIFNldCBNQjJDRiBmb3IgYmFuayAyLiBvZmYgKi8KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU2V0IE1CMkNGIGZvciBiYW5rIDIuIG9mZiAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0gICAgICAgIGFkZGkgICAgcjQsMCxtZW1fbWIyY2YKLSAgICAgICAgbXRkY3IgICBtZW1jZmdhLHI0Ci0gICAgICAgIGFkZGlzICAgcjQsMCxNQjJDRkBoCi0gICAgICAgIG9yaSAgICAgcjQscjQsTUIyQ0ZAbAotICAgICAgICBtdGRjciAgIG1lbWNmZ2QscjQKKwlhZGRpICAgIHI0LDAsbWVtX21iMmNmCisJbXRkY3IgICBtZW1jZmdhLHI0CisJYWRkaXMgICByNCwwLE1CMkNGQGgKKwlvcmkgICAgIHI0LHI0LE1CMkNGQGwKKwltdGRjciAgIG1lbWNmZ2QscjQKIAotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogU2V0IE1CM0NGIGZvciBiYW5rIDMuIG9mZiAqLwotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTZXQgTUIzQ0YgZm9yIGJhbmsgMy4gb2ZmICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSAgICAgICAgYWRkaSAgICByNCwwLG1lbV9tYjNjZgotICAgICAgICBtdGRjciAgIG1lbWNmZ2EscjQKLSAgICAgICAgYWRkaXMgICByNCwwLE1CM0NGQGgKLSAgICAgICAgb3JpICAgICByNCxyNCxNQjNDRkBsCi0gICAgICAgIG10ZGNyICAgbWVtY2ZnZCxyNAorCWFkZGkgICAgcjQsMCxtZW1fbWIzY2YKKwltdGRjciAgIG1lbWNmZ2EscjQKKwlhZGRpcyAgIHI0LDAsTUIzQ0ZAaAorCW9yaSAgICAgcjQscjQsTUIzQ0ZAbAorCW10ZGNyICAgbWVtY2ZnZCxyNAogCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICAvKiBTZXQgdGhlIFNEUkFNIFRpbWluZyByZWcsIFNEVFIxIGFuZCB0aGUgcmVmcmVzaCB0aW1lciByZWcsIFJUUi4gKi8KLSAgICAgICAgLyogVG8gc2V0IHRoZSBhcHByb3ByaWF0ZSB0aW1pbmdzLCB3ZSBuZWVkIHRvIGtub3cgdGhlIFNEUkFNIHNwZWVkLiAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFNldCB0aGUgU0RSQU0gVGltaW5nIHJlZywgU0RUUjEgYW5kIHRoZSByZWZyZXNoIHRpbWVyIHJlZywgUlRSLiAqLworCS8qIFRvIHNldCB0aGUgYXBwcm9wcmlhdGUgdGltaW5ncywgd2UgbmVlZCB0byBrbm93IHRoZSBTRFJBTSBzcGVlZC4gKi8KIAkvKiBXZSBjYW4gdXNlIHRoZSBQTEIgc3BlZWQgc2luY2UgdGhlIFNEUkFNIHNwZWVkIGlzIHRoZSBzYW1lIGFzICovCiAJLyogdGhlIFBMQiBzcGVlZC4gVGhlIFBMQiBzcGVlZCBpcyB0aGUgRkJLIGRpdmlkZXIgdGltZXMgdGhlICovCiAJLyogNDA1R1AgcmVmZXJlbmNlIGNsb2NrLCB3aGljaCBvbiB0aGUgV2FsbnV0IGJvYXJkIGlzIDMzTWh6LiAqLwpAQCAtMjcwLDg2ICsyNzAsODYgQEAKIAkvKiAxMDBNaHo7IGlmIEZCSyBpcyAzLCBTRFJBTSBpcyAxMzNNaHouICovCiAJLyogTk9URTogVGhlIFdhbG51dCBib2FyZCBzdXBwb3J0cyBTRFJBTSBzcGVlZHMgb2YgNjZNaHosIDEwME1oeiwgYW5kICovCiAJLyogbWF5YmUgMTMzTWh6LiAqLwotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotICAgICAgICBtZmRjciAgIHI1LHN0cmFwICAgICAgICAgICAgICAgICAvKiBkZXRlcm1pbmUgRkJLIGRpdmlkZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZpYSBTVFJBUCByZWcgdG8gY2FsYyBQTEIgc3BlZWQuICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTRFJBTSBzcGVlZCBpcyB0aGUgc2FtZSBhcyB0aGUgUExCICovCi0JCQkJICAgICAgICAgIC8qIHNwZWVkLiAqLwotICAgICAgICBybHdpbm0gIHI0LHI1LDQsMHgzICAgICAgICAgICAgIC8qIGdldCBGQksgZGl2aWRlIGJpdHMgKi8KKwltZmRjciAgIHI1LHN0cmFwICAgICAgICAgICAgICAgICAvKiBkZXRlcm1pbmUgRkJLIGRpdmlkZXIgKi8KKwkJCQkJICAvKiB2aWEgU1RSQVAgcmVnIHRvIGNhbGMgUExCIHNwZWVkLiAqLworCQkJCQkgIC8qIFNEUkFNIHNwZWVkIGlzIHRoZSBzYW1lIGFzIHRoZSBQTEIgKi8KKwkJCQkJICAvKiBzcGVlZC4gKi8KKwlybHdpbm0gIHI0LHI1LDQsMHgzICAgICAgICAgICAgIC8qIGdldCBGQksgZGl2aWRlIGJpdHMgKi8KIAogLi5jaGtfNjY6Ci0gICAgICAgIGNtcGkgICAgJWNyMCwwLHI0LDB4MQotICAgICAgICBibmUgICAgIC4uY2hrXzEwMAorCWNtcGkgICAgJWNyMCwwLHI0LDB4MQorCWJuZSAgICAgLi5jaGtfMTAwCiAJYWRkaXMJcjYsMCxTRFRSXzY2QGgJCS8qIFNEVFIxIHZhbHVlIGZvciA2Nk1oeiAqLwogCW9yaSAgICAgcjYscjYsU0RUUl82NkBsCiAJYWRkaXMJcjcsMCxSVFJfNjYJCS8qIFJUUiB2YWx1ZSBmb3IgNjZNaHogKi8KLSAgICAgICAgYgkuLnNkcmFtX29rCisJYgkuLnNkcmFtX29rCiAuLmNoa18xMDA6Ci0gICAgICAgIGNtcGkgICAgJWNyMCwwLHI0LDB4MgotICAgICAgICBibmUgICAgIC4uY2hrXzEzMwotICAgICAgICBhZGRpcyAgIHI2LDAsU0RUUl8xMDBAaCAgICAgICAgLyogU0RUUjEgdmFsdWUgZm9yIDEwME1oeiAqLwotICAgICAgICBvcmkgICAgIHI2LHI2LFNEVFJfMTAwQGwKLSAgICAgICAgYWRkaXMgICByNywwLFJUUl8xMDAgICAgICAgICAgIC8qIFJUUiB2YWx1ZSBmb3IgMTAwTWh6ICovCi0gICAgICAgIGIgICAgICAgLi5zZHJhbV9vaworCWNtcGkgICAgJWNyMCwwLHI0LDB4MgorCWJuZSAgICAgLi5jaGtfMTMzCisJYWRkaXMgICByNiwwLFNEVFJfMTAwQGggICAgICAgIC8qIFNEVFIxIHZhbHVlIGZvciAxMDBNaHogKi8KKwlvcmkgICAgIHI2LHI2LFNEVFJfMTAwQGwKKwlhZGRpcyAgIHI3LDAsUlRSXzEwMCAgICAgICAgICAgLyogUlRSIHZhbHVlIGZvciAxMDBNaHogKi8KKwliICAgICAgIC4uc2RyYW1fb2sKIC4uY2hrXzEzMzoKLSAgICAgICAgYWRkaXMgICByNiwwLDB4MDEwNyAgICAgICAgICAgIC8qIFNEVFIxIHZhbHVlIGZvciAxMzNNaHogKi8KLSAgICAgICAgb3JpICAgICByNixyNiwweDQwMTUKLSAgICAgICAgYWRkaXMgICByNywwLDB4MDdGMCAgICAgICAgICAgIC8qIFJUUiB2YWx1ZSBmb3IgMTMzTWh6ICovCisJYWRkaXMgICByNiwwLDB4MDEwNyAgICAgICAgICAgIC8qIFNEVFIxIHZhbHVlIGZvciAxMzNNaHogKi8KKwlvcmkgICAgIHI2LHI2LDB4NDAxNQorCWFkZGlzICAgcjcsMCwweDA3RjAgICAgICAgICAgICAvKiBSVFIgdmFsdWUgZm9yIDEzM01oeiAqLwogCiAuLnNkcmFtX29rOgotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogU2V0IFNEVFIxICovCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICBhZGRpICAgIHI0LDAsbWVtX3NkdHIxCi0gICAgICAgIG10ZGNyICAgbWVtY2ZnYSxyNAotICAgICAgICBtdGRjciAgIG1lbWNmZ2QscjYKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTZXQgU0RUUjEgKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlhZGRpICAgIHI0LDAsbWVtX3NkdHIxCisJbXRkY3IgICBtZW1jZmdhLHI0CisJbXRkY3IgICBtZW1jZmdkLHI2CiAKLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIFNldCBSVFIgKi8KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIGFkZGkgICAgcjQsMCxtZW1fcnRyCi0gICAgICAgIG10ZGNyICAgbWVtY2ZnYSxyNAotICAgICAgICBtdGRjciAgIG1lbWNmZ2QscjcKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBTZXQgUlRSICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJYWRkaSAgICByNCwwLG1lbV9ydHIKKwltdGRjciAgIG1lbWNmZ2EscjQKKwltdGRjciAgIG1lbWNmZ2QscjcKIAotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogRGVsYXkgdG8gZW5zdXJlIDIwMHVzZWMgaGF2ZSBlbGFwc2VkIHNpbmNlIHJlc2V0LiBBc3N1bWUgd29yc3QgKi8KLSAgICAgICAgLyogY2FzZSB0aGF0IHRoZSBjb3JlIGlzIHJ1bm5pbmcgMjAwTWh6OiAqLwotICAgICAgICAvKiAgIDIwMCwwMDAsMDAwIChjeWNsZXMvc2VjKSBYIC4wMDAyMDAgKHNlYykgPSAweDlDNDAgY3ljbGVzICovCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICBhZGRpcyAgIHIzLDAsMHgwMDAwCi0gICAgICAgIG9yaSAgICAgcjMscjMsMHhBMDAwICAgICAgICAgIC8qIGVuc3VyZSAyMDB1c2VjIGhhdmUgcGFzc2VkIHNpbmNlIHJlc2V0ICovCi0gICAgICAgIG10Y3RyICAgcjMKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBEZWxheSB0byBlbnN1cmUgMjAwdXNlYyBoYXZlIGVsYXBzZWQgc2luY2UgcmVzZXQuIEFzc3VtZSB3b3JzdCAqLworCS8qIGNhc2UgdGhhdCB0aGUgY29yZSBpcyBydW5uaW5nIDIwME1oejogKi8KKwkvKiAgIDIwMCwwMDAsMDAwIChjeWNsZXMvc2VjKSBYIC4wMDAyMDAgKHNlYykgPSAweDlDNDAgY3ljbGVzICovCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJYWRkaXMgICByMywwLDB4MDAwMAorCW9yaSAgICAgcjMscjMsMHhBMDAwICAgICAgICAgIC8qIGVuc3VyZSAyMDB1c2VjIGhhdmUgcGFzc2VkIHNpbmNlIHJlc2V0ICovCisJbXRjdHIgICByMwogLi5zcGlubHAyOgotICAgICAgICBiZG56ICAgIC4uc3BpbmxwMiAgICAgICAgICAgICAgIC8qIHNwaW4gbG9vcCAqLworCWJkbnogICAgLi5zcGlubHAyICAgICAgICAgICAgICAgLyogc3BpbiBsb29wICovCiAKLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIFNldCBtZW1vcnkgY29udHJvbGxlciBvcHRpb25zIHJlZywgTUNPUFQxLiAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFNldCBtZW1vcnkgY29udHJvbGxlciBvcHRpb25zIHJlZywgTUNPUFQxLiAqLwogCS8qIFNldCBEQ19FTiB0byAnMScgYW5kIEJSRF9QUkYgdG8gJzAxJyBmb3IgMTYgYnl0ZSBQTEIgQnVyc3QgKi8KIAkvKiByZWFkL3ByZWZldGNoLiAqLwotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgYWRkaSAgICByNCwwLG1lbV9tY29wdDEKLSAgICAgICAgbXRkY3IgICBtZW1jZmdhLHI0Ci0gICAgICAgIGFkZGlzICAgcjQsMCwweDgwODAgICAgICAgICAgICAgLyogc2V0IERDX0VOPTEgKi8KLSAgICAgICAgb3JpICAgICByNCxyNCwweDAwMDAKLSAgICAgICAgbXRkY3IgICBtZW1jZmdkLHI0CisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJYWRkaSAgICByNCwwLG1lbV9tY29wdDEKKwltdGRjciAgIG1lbWNmZ2EscjQKKwlhZGRpcyAgIHI0LDAsMHg4MDgwICAgICAgICAgICAgIC8qIHNldCBEQ19FTj0xICovCisJb3JpICAgICByNCxyNCwweDAwMDAKKwltdGRjciAgIG1lbWNmZ2QscjQKIAotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogRGVsYXkgdG8gZW5zdXJlIDEwbXNlYyBoYXZlIGVsYXBzZWQgc2luY2UgcmVzZXQuIFRoaXMgaXMgKi8KLSAgICAgICAgLyogcmVxdWlyZWQgZm9yIHRoZSBNUEM5NTIgdG8gc3RhYmFsaXplLiBBc3N1bWUgd29yc3QgKi8KLSAgICAgICAgLyogY2FzZSB0aGF0IHRoZSBjb3JlIGlzIHJ1bm5pbmcgMjAwTWh6OiAqLwotICAgICAgICAvKiAgIDIwMCwwMDAsMDAwIChjeWNsZXMvc2VjKSBYIC4wMTAgKHNlYykgPSAweDFFODQ4MCBjeWNsZXMgKi8KLSAgICAgICAgLyogVGhpcyBkZWxheSBzaG91bGQgb2NjdXIgYmVmb3JlIGFjY2Vzc2luZyBTRFJBTS4gKi8KLSAgICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIGFkZGlzICAgcjMsMCwweDAwMUUKLSAgICAgICAgb3JpICAgICByMyxyMywweDg0ODAgICAgICAgICAgLyogZW5zdXJlIDEwbXNlYyBoYXZlIHBhc3NlZCBzaW5jZSByZXNldCAqLwotICAgICAgICBtdGN0ciAgIHIzCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogRGVsYXkgdG8gZW5zdXJlIDEwbXNlYyBoYXZlIGVsYXBzZWQgc2luY2UgcmVzZXQuIFRoaXMgaXMgKi8KKwkvKiByZXF1aXJlZCBmb3IgdGhlIE1QQzk1MiB0byBzdGFiYWxpemUuIEFzc3VtZSB3b3JzdCAqLworCS8qIGNhc2UgdGhhdCB0aGUgY29yZSBpcyBydW5uaW5nIDIwME1oejogKi8KKwkvKiAgIDIwMCwwMDAsMDAwIChjeWNsZXMvc2VjKSBYIC4wMTAgKHNlYykgPSAweDFFODQ4MCBjeWNsZXMgKi8KKwkvKiBUaGlzIGRlbGF5IHNob3VsZCBvY2N1ciBiZWZvcmUgYWNjZXNzaW5nIFNEUkFNLiAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCWFkZGlzICAgcjMsMCwweDAwMUUKKwlvcmkgICAgIHIzLHIzLDB4ODQ4MCAgICAgICAgICAvKiBlbnN1cmUgMTBtc2VjIGhhdmUgcGFzc2VkIHNpbmNlIHJlc2V0ICovCisJbXRjdHIgICByMwogLi5zcGlubHAzOgotICAgICAgICBiZG56ICAgIC4uc3BpbmxwMyAgICAgICAgICAgICAgICAvKiBzcGluIGxvb3AgKi8KKwliZG56ICAgIC4uc3BpbmxwMyAgICAgICAgICAgICAgICAvKiBzcGluIGxvb3AgKi8KIAogI2Vsc2UKIC8qZml4bWU6IGRvIFNEUkFNIEF1dG9jb25maWcgZnJvbSBFRVBST00gaGVyZSAqLwogCiAjZW5kaWYKLSAgICAgICAgbXRsciAgICByMzEgICAgICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIGxyICovCi0gICAgICAgIGJscgorCW10bHIgICAgcjMxICAgICAgICAgICAgICAgICAgICAgLyogcmVzdG9yZSBsciAqLworCWJscgpkaWZmIC0tZ2l0IGEvYm9hcmQvZXJpYy91LWJvb3QubGRzIGIvYm9hcmQvZXJpYy91LWJvb3QubGRzCmluZGV4IGUxMzczZmQuLjEwZjU3ZDggMTAwNjQ0Ci0tLSBhL2JvYXJkL2VyaWMvdS1ib290LmxkcworKysgYi9ib2FyZC9lcmljL3UtYm9vdC5sZHMKQEAgLTEyMSw2ICsxMjEsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9hZGNpb3AvTWFrZWZpbGUgYi9ib2FyZC9lc2QvYWRjaW9wL01ha2VmaWxlCmluZGV4IGQ0YTRlNjUuLjQ3NGM5MzYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9hZGNpb3AvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2FkY2lvcC9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKKwogIwogIyAoQykgQ29weXJpZ2h0IDIwMDAKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KQEAgLTI4LDcgKzI5LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gLi4vY29tbW9uL3BjaS5vCiAKICQoTElCKToJJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9hZGNpb3AvZmxhc2guYyBiL2JvYXJkL2VzZC9hZGNpb3AvZmxhc2guYwppbmRleCA2OTYxOGRlLi5kOWVjY2JhIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvYWRjaW9wL2ZsYXNoLmMKKysrIGIvYm9hcmQvZXNkL2FkY2lvcC9mbGFzaC5jCkBAIC05Niw4ICs5Niw4IEBACiAJCQkgICAgICBGTEFTSF9CQVNFMF9QUkVMSU0rc2l6ZV9iMCtzaXplX2IxLW1vbml0b3JfZmxhc2hfbGVuLAogCQkJICAgICAgRkxBU0hfQkFTRTBfUFJFTElNK3NpemVfYjArc2l6ZV9iMS0xLAogCQkJICAgICAgJmZsYXNoX2luZm9bMV0pOwotICAgICAgICAgICAgICAgIC8qIG1vbml0b3IgcHJvdGVjdGlvbiBPRkYgYnkgZGVmYXVsdCAob25lIGlzIGVub3VnaCkgKi8KLSAgICAgICAgICAgICAgICBmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9DTEVBUiwKKwkJLyogbW9uaXRvciBwcm90ZWN0aW9uIE9GRiBieSBkZWZhdWx0IChvbmUgaXMgZW5vdWdoKSAqLworCQlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9DTEVBUiwKIAkJCSAgICAgIEZMQVNIX0JBU0UwX1BSRUxJTStzaXplX2IwLW1vbml0b3JfZmxhc2hfbGVuLAogCQkJICAgICAgRkxBU0hfQkFTRTBfUFJFTElNK3NpemVfYjAtMSwKIAkJCSAgICAgICZmbGFzaF9pbmZvWzBdKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9hZGNpb3AvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9hZGNpb3AvdS1ib290LmxkcwppbmRleCBkZGYxMzA3Li5iMDdkMTE3IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvYWRjaW9wL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXNkL2FkY2lvcC91LWJvb3QubGRzCkBAIC0xMDcsNiArMTA3LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvYXI0MDUvTWFrZWZpbGUgYi9ib2FyZC9lc2QvYXI0MDUvTWFrZWZpbGUKaW5kZXggMzlkMmZlYy4uZjViZGE1NSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2FyNDA1L01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC9hcjQwNS9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvYXI0MDUvYXI0MDUuYyBiL2JvYXJkL2VzZC9hcjQwNS9hcjQwNS5jCmluZGV4IGYyM2I4MjIuLmQwYjA2ZTYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9hcjQwNS9hcjQwNS5jCisrKyBiL2JvYXJkL2VzZC9hcjQwNS9hcjQwNS5jCkBAIC0yNSw4ICsyNSw5IEBACiAjaW5jbHVkZSAiYXI0MDUuaCIKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ib290Lmg+CiAKKy8qY21kX2Jvb3QuYyovCitleHRlcm4gaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2FyNDA1L2ZsYXNoLmMgYi9ib2FyZC9lc2QvYXI0MDUvZmxhc2guYwppbmRleCAzYTY0NGY5Li5hNjUxYjZmIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvYXI0MDUvZmxhc2guYworKysgYi9ib2FyZC9lc2QvYXI0MDUvZmxhc2guYwpAQCAtNDMsOCArNDMsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgc2l6ZV9iMCwgc2l6ZV9iMTsKIAlpbnQgaTsKLSAgICAgICAgdWludCBwYmNyOwotICAgICAgICB1bnNpZ25lZCBsb25nIGJhc2VfYjAsIGJhc2VfYjE7CisJdWludCBwYmNyOworCXVuc2lnbmVkIGxvbmcgYmFzZV9iMCwgYmFzZV9iMTsKIAogCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KIAlmb3IgKGk9MDsgaTxDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2kpIHsKQEAgLTY2LDI3ICs2NiwyNyBAQAogCiAJLyogUmUtZG8gc2l6aW5nIHRvIGdldCBmdWxsIGNvcnJlY3QgaW5mbyAqLwogCi0gICAgICAgIGlmIChzaXplX2IxKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIG10ZGNyKGViY2NmZ2EsIHBiMGNyKTsKLSAgICAgICAgICAgIHBiY3IgPSBtZmRjcihlYmNjZmdkKTsKLSAgICAgICAgICAgIG10ZGNyKGViY2NmZ2EsIHBiMGNyKTsKLSAgICAgICAgICAgIGJhc2VfYjEgPSAtc2l6ZV9iMTsKLSAgICAgICAgICAgIHBiY3IgPSAocGJjciAmIDB4MDAwMWZmZmYpIHwgYmFzZV9iMSB8ICgoKHNpemVfYjEvMTAyNC8xMDI0KS0xKTw8MTcpOwotICAgICAgICAgICAgbXRkY3IoZWJjY2ZnZCwgcGJjcik7Ci0gICAgICAgICAgICAvKiAgICAgICAgICBwcmludGYoInBiMWNyID0gJXhcbiIsIHBiY3IpOyAqLwotICAgICAgICAgIH0KKwlpZiAoc2l6ZV9iMSkKKwkgIHsKKwkgICAgbXRkY3IoZWJjY2ZnYSwgcGIwY3IpOworCSAgICBwYmNyID0gbWZkY3IoZWJjY2ZnZCk7CisJICAgIG10ZGNyKGViY2NmZ2EsIHBiMGNyKTsKKwkgICAgYmFzZV9iMSA9IC1zaXplX2IxOworCSAgICBwYmNyID0gKHBiY3IgJiAweDAwMDFmZmZmKSB8IGJhc2VfYjEgfCAoKChzaXplX2IxLzEwMjQvMTAyNCktMSk8PDE3KTsKKwkgICAgbXRkY3IoZWJjY2ZnZCwgcGJjcik7CisJICAgIC8qICAgICAgICAgIHByaW50ZigicGIxY3IgPSAleFxuIiwgcGJjcik7ICovCisJICB9CiAKLSAgICAgICAgaWYgKHNpemVfYjApCi0gICAgICAgICAgewotICAgICAgICAgICAgbXRkY3IoZWJjY2ZnYSwgcGIxY3IpOwotICAgICAgICAgICAgcGJjciA9IG1mZGNyKGViY2NmZ2QpOwotICAgICAgICAgICAgbXRkY3IoZWJjY2ZnYSwgcGIxY3IpOwotICAgICAgICAgICAgYmFzZV9iMCA9IGJhc2VfYjEgLSBzaXplX2IwOwotICAgICAgICAgICAgcGJjciA9IChwYmNyICYgMHgwMDAxZmZmZikgfCBiYXNlX2IwIHwgKCgoc2l6ZV9iMC8xMDI0LzEwMjQpLTEpPDwxNyk7Ci0gICAgICAgICAgICBtdGRjcihlYmNjZmdkLCBwYmNyKTsKLSAgICAgICAgICAgIC8qICAgICAgICAgICAgcHJpbnRmKCJwYjBjciA9ICV4XG4iLCBwYmNyKTsgKi8KLSAgICAgICAgICB9CisJaWYgKHNpemVfYjApCisJICB7CisJICAgIG10ZGNyKGViY2NmZ2EsIHBiMWNyKTsKKwkgICAgcGJjciA9IG1mZGNyKGViY2NmZ2QpOworCSAgICBtdGRjcihlYmNjZmdhLCBwYjFjcik7CisJICAgIGJhc2VfYjAgPSBiYXNlX2IxIC0gc2l6ZV9iMDsKKwkgICAgcGJjciA9IChwYmNyICYgMHgwMDAxZmZmZikgfCBiYXNlX2IwIHwgKCgoc2l6ZV9iMC8xMDI0LzEwMjQpLTEpPDwxNyk7CisJICAgIG10ZGNyKGViY2NmZ2QsIHBiY3IpOworCSAgICAvKiAgICAgICAgICAgIHByaW50ZigicGIwY3IgPSAleFxuIiwgcGJjcik7ICovCisJICB9CiAKIAlzaXplX2IwID0gZmxhc2hfZ2V0X3NpemUoKHZ1X2xvbmcgKiliYXNlX2IwLCAmZmxhc2hfaW5mb1swXSk7CiAKQEAgLTEwOSwxMSArMTA5LDExIEBACiAJCQkJICAgIGJhc2VfYjErc2l6ZV9iMS1tb25pdG9yX2ZsYXNoX2xlbiwKIAkJCQkgICAgYmFzZV9iMStzaXplX2IxLTEsCiAJCQkJICAgICZmbGFzaF9pbmZvWzFdKTsKLSAgICAgICAgICAgICAgICAvKiBtb25pdG9yIHByb3RlY3Rpb24gT0ZGIGJ5IGRlZmF1bHQgKG9uZSBpcyBlbm91Z2gpICovCi0gICAgICAgICAgICAgICAgKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfQ0xFQVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2IwK3NpemVfYjAtbW9uaXRvcl9mbGFzaF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2IwK3NpemVfYjAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbGFzaF9pbmZvWzBdKTsKKwkJLyogbW9uaXRvciBwcm90ZWN0aW9uIE9GRiBieSBkZWZhdWx0IChvbmUgaXMgZW5vdWdoKSAqLworCQkodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9DTEVBUiwKKwkJCQkgICAgYmFzZV9iMCtzaXplX2IwLW1vbml0b3JfZmxhc2hfbGVuLAorCQkJCSAgICBiYXNlX2IwK3NpemVfYjAtMSwKKwkJCQkgICAgJmZsYXNoX2luZm9bMF0pOwogCX0gZWxzZSB7CiAJCWZsYXNoX2luZm9bMV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwogCQlmbGFzaF9pbmZvWzFdLnNlY3Rvcl9jb3VudCA9IC0xOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2FyNDA1L3UtYm9vdC5sZHMgYi9ib2FyZC9lc2QvYXI0MDUvdS1ib290LmxkcwppbmRleCA3Yjg2YTNkLi4zYmI0MzA0IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvYXI0MDUvdS1ib290LmxkcworKysgYi9ib2FyZC9lc2QvYXI0MDUvdS1ib290LmxkcwpAQCAtMTI5LDYgKzEyOSwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2FzaDQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9hc2g0MDUvTWFrZWZpbGUKaW5kZXggMzlkMmZlYy4uZjViZGE1NSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2FzaDQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvYXNoNDA1L01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9hc2g0MDUvYXNoNDA1LmMgYi9ib2FyZC9lc2QvYXNoNDA1L2FzaDQwNS5jCmluZGV4IDRjYjUxODMuLmY0NWVjZjEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9hc2g0MDUvYXNoNDA1LmMKKysrIGIvYm9hcmQvZXNkL2FzaDQwNS9hc2g0MDUuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMzMsNiArMzIsOCBAQAogI2RlZmluZSBGUEdBX0RFQlVHCiAjZW5kaWYKIAorZXh0ZXJuIGludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworCiAvKiBmcGdhIGNvbmZpZ3VyYXRpb24gZGF0YSAtIGd6aXAgY29tcHJlc3NlZCBhbmQgZ2VuZXJhdGVkIGJ5IGJpbjJjICovCiBjb25zdCB1bnNpZ25lZCBjaGFyIGZwZ2FkYXRhW10gPQogewpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2FzaDQwNS9mbGFzaC5jIGIvYm9hcmQvZXNkL2FzaDQwNS9mbGFzaC5jCmluZGV4IGY5MDRhZmYuLjg5YWYxMTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9hc2g0MDUvZmxhc2guYworKysgYi9ib2FyZC9lc2QvYXNoNDA1L2ZsYXNoLmMKQEAgLTQzLDggKzQzLDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIHNpemVfYjA7CiAJaW50IGk7Ci0gICAgICAgIHVpbnQgcGJjcjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX2IwOworCXVpbnQgcGJjcjsKKwl1bnNpZ25lZCBsb25nIGJhc2VfYjA7CiAJaW50IHNpemVfdmFsID0gMDsKIAogCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KQEAgLTYxLDE0ICs2MSwxNCBAQAogCQkJc2l6ZV9iMCwgc2l6ZV9iMDw8MjApOwogCX0KIAotICAgICAgICAvKiBTZXR1cCBvZmZzZXRzICovCi0gICAgICAgIGZsYXNoX2dldF9vZmZzZXRzICgtc2l6ZV9iMCwgJmZsYXNoX2luZm9bMF0pOworCS8qIFNldHVwIG9mZnNldHMgKi8KKwlmbGFzaF9nZXRfb2Zmc2V0cyAoLXNpemVfYjAsICZmbGFzaF9pbmZvWzBdKTsKIAotICAgICAgICAvKiBSZS1kbyBzaXppbmcgdG8gZ2V0IGZ1bGwgY29ycmVjdCBpbmZvICovCi0gICAgICAgIG10ZGNyKGViY2NmZ2EsIHBiMGNyKTsKLSAgICAgICAgcGJjciA9IG1mZGNyKGViY2NmZ2QpOwotICAgICAgICBtdGRjcihlYmNjZmdhLCBwYjBjcik7Ci0gICAgICAgIGJhc2VfYjAgPSAtc2l6ZV9iMDsKKwkvKiBSZS1kbyBzaXppbmcgdG8gZ2V0IGZ1bGwgY29ycmVjdCBpbmZvICovCisJbXRkY3IoZWJjY2ZnYSwgcGIwY3IpOworCXBiY3IgPSBtZmRjcihlYmNjZmdkKTsKKwltdGRjcihlYmNjZmdhLCBwYjBjcik7CisJYmFzZV9iMCA9IC1zaXplX2IwOwogCXN3aXRjaCAoc2l6ZV9iMCkgewogCWNhc2UgMSA8PCAyMDoKIAkJc2l6ZV92YWwgPSAwOwpAQCAtODcsMTUgKzg3LDE1IEBACiAJCWJyZWFrOwogCX0KIAlwYmNyID0gKHBiY3IgJiAweDAwMDFmZmZmKSB8IGJhc2VfYjAgfCAoc2l6ZV92YWwgPDwgMTcpOwotICAgICAgICBtdGRjcihlYmNjZmdkLCBwYmNyKTsKKwltdGRjcihlYmNjZmdkLCBwYmNyKTsKIAotICAgICAgICAvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwotICAgICAgICAodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLUNGR19NT05JVE9SX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbGFzaF9pbmZvWzBdKTsKKwkvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLworCSh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKwkJCSAgICAtQ0ZHX01PTklUT1JfTEVOLAorCQkJICAgIDB4ZmZmZmZmZmYsCisJCQkgICAgJmZsYXNoX2luZm9bMF0pOwogCi0gICAgICAgIGZsYXNoX2luZm9bMF0uc2l6ZSA9IHNpemVfYjA7CisJZmxhc2hfaW5mb1swXS5zaXplID0gc2l6ZV9iMDsKIAogCXJldHVybiAoc2l6ZV9iMCk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvYXNoNDA1L3UtYm9vdC5sZHMgYi9ib2FyZC9lc2QvYXNoNDA1L3UtYm9vdC5sZHMKaW5kZXggOTc4NTFmMS4uYmE1NTU1MCAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2FzaDQwNS91LWJvb3QubGRzCisrKyBiL2JvYXJkL2VzZC9hc2g0MDUvdS1ib290LmxkcwpAQCAtMTE5LDYgKzExOSwxMCBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jYW5idC9NYWtlZmlsZSBiL2JvYXJkL2VzZC9jYW5idC9NYWtlZmlsZQppbmRleCAzOWQyZmVjLi5mNWJkYTU1IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY2FuYnQvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2NhbmJ0L01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jYW5idC9jYW5idC5jIGIvYm9hcmQvZXNkL2NhbmJ0L2NhbmJ0LmMKaW5kZXggNzA4MTAxZS4uYWUwZTg4MCAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NhbmJ0L2NhbmJ0LmMKKysrIGIvYm9hcmQvZXNkL2NhbmJ0L2NhbmJ0LmMKQEAgLTI1LDcgKzI1LDExIEBACiAjaW5jbHVkZSAiY2FuYnQuaCIKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ib290Lmg+CisKKworLypjbWRfYm9vdC5jKi8KK2V4dGVybiBpbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKKwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jYW5idC9mbGFzaC5jIGIvYm9hcmQvZXNkL2NhbmJ0L2ZsYXNoLmMKaW5kZXggNjg1ODUwZS4uZGU4NDdmOSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NhbmJ0L2ZsYXNoLmMKKysrIGIvYm9hcmQvZXNkL2NhbmJ0L2ZsYXNoLmMKQEAgLTQzLDggKzQzLDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIHNpemVfYjA7CiAJaW50IGk7Ci0gICAgICAgIHVpbnQgcGJjcjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX2IwOworCXVpbnQgcGJjcjsKKwl1bnNpZ25lZCBsb25nIGJhc2VfYjA7CiAKIAkvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCiAJZm9yIChpPTA7IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7CkBAIC02MCwyNSArNjAsMjUgQEAKIAkJCXNpemVfYjAsIHNpemVfYjA8PDIwKTsKIAl9CiAKLSAgICAgICAgLyogU2V0dXAgb2Zmc2V0cyAqLwotICAgICAgICBmbGFzaF9nZXRfb2Zmc2V0cyAoLXNpemVfYjAsICZmbGFzaF9pbmZvWzBdKTsKKwkvKiBTZXR1cCBvZmZzZXRzICovCisJZmxhc2hfZ2V0X29mZnNldHMgKC1zaXplX2IwLCAmZmxhc2hfaW5mb1swXSk7CiAKLSAgICAgICAgLyogUmUtZG8gc2l6aW5nIHRvIGdldCBmdWxsIGNvcnJlY3QgaW5mbyAqLwotICAgICAgICBtdGRjcihlYmNjZmdhLCBwYjBjcik7Ci0gICAgICAgIHBiY3IgPSBtZmRjcihlYmNjZmdkKTsKLSAgICAgICAgbXRkY3IoZWJjY2ZnYSwgcGIwY3IpOwotICAgICAgICBiYXNlX2IwID0gLXNpemVfYjA7Ci0gICAgICAgIHBiY3IgPSAocGJjciAmIDB4MDAwMWZmZmYpIHwgYmFzZV9iMCB8ICgoKHNpemVfYjAvMTAyNC8xMDI0KS0xKTw8MTcpOwotICAgICAgICBtdGRjcihlYmNjZmdkLCBwYmNyKTsKLSAgICAgICAgLyogICAgICAgICAgcHJpbnRmKCJwYjFjciA9ICV4XG4iLCBwYmNyKTsgKi8KKwkvKiBSZS1kbyBzaXppbmcgdG8gZ2V0IGZ1bGwgY29ycmVjdCBpbmZvICovCisJbXRkY3IoZWJjY2ZnYSwgcGIwY3IpOworCXBiY3IgPSBtZmRjcihlYmNjZmdkKTsKKwltdGRjcihlYmNjZmdhLCBwYjBjcik7CisJYmFzZV9iMCA9IC1zaXplX2IwOworCXBiY3IgPSAocGJjciAmIDB4MDAwMWZmZmYpIHwgYmFzZV9iMCB8ICgoKHNpemVfYjAvMTAyNC8xMDI0KS0xKTw8MTcpOworCW10ZGNyKGViY2NmZ2QsIHBiY3IpOworCS8qICAgICAgICAgIHByaW50ZigicGIxY3IgPSAleFxuIiwgcGJjcik7ICovCiAKLSAgICAgICAgLyogTW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KLSAgICAgICAgKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tb25pdG9yX2ZsYXNoX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbGFzaF9pbmZvWzBdKTsKKwkvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLworCSh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKwkJCSAgICAtbW9uaXRvcl9mbGFzaF9sZW4sCisJCQkgICAgMHhmZmZmZmZmZiwKKwkJCSAgICAmZmxhc2hfaW5mb1swXSk7CiAKLSAgICAgICAgZmxhc2hfaW5mb1swXS5zaXplID0gc2l6ZV9iMDsKKwlmbGFzaF9pbmZvWzBdLnNpemUgPSBzaXplX2IwOwogCiAJcmV0dXJuIChzaXplX2IwKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jYW5idC91LWJvb3QubGRzIGIvYm9hcmQvZXNkL2NhbmJ0L3UtYm9vdC5sZHMKaW5kZXggNDdiMGFhZS4uZDczOWNlYSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NhbmJ0L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXNkL2NhbmJ0L3UtYm9vdC5sZHMKQEAgLTEzMSw2ICsxMzEsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jb21tb24vZmxhc2guYyBiL2JvYXJkL2VzZC9jb21tb24vZmxhc2guYwppbmRleCA3OGExZTBmLi5kMDMyYjAwIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY29tbW9uL2ZsYXNoLmMKKysrIGIvYm9hcmQvZXNkL2NvbW1vbi9mbGFzaC5jCkBAIC00MCwxMSArNDAsMTEgQEAKIAlzaG9ydCBuOwogCiAJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCi0gICAgICAgIGlmICgoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TU1QpIHx8CisJaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX1NTVCkgfHwKIAkgICAgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTTY0MFUpKSB7CiAJICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKIAkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKTsKLSAgICAgICAgfSBlbHNlIGlmICgoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNREwzMjJCKSB8fAorCX0gZWxzZSBpZiAoKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTURMMzIyQikgfHwKIAkJICAgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTURMMzIzQikgfHwKIAkJICAgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTTMyMEIpIHx8CiAJCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyNEIpKSB7CkBAIC01OCw3ICs1OCw3IEBACiAJCQliYXNlICs9IDY0IDw8IDEwOwogCQkJKytpOwogCQl9Ci0gICAgICAgIH0gZWxzZSBpZiAoKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTURMMzIyVCkgfHwKKwl9IGVsc2UgaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyMlQpIHx8CiAJCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyM1QpIHx8CiAJCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0zMjBUKSB8fAogCQkgICAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNREwzMjRUKSkgewpAQCAtNzUsNyArNzUsNyBAQAogCQkJLS1pOwogCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlOwogCQl9Ci0gICAgICAgIH0gZWxzZSB7CisJfSBlbHNlIHsKIAkgICAgaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfQlRZUEUpIHsKIAkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCiAJCWluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7CkBAIC0xMDMsMTAgKzEwMywxMCBAQAogdm9pZCBmbGFzaF9wcmludF9pbmZvICAoZmxhc2hfaW5mb190ICppbmZvKQogewogCWludCBpOwotICAgICAgICBpbnQgazsKLSAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIGludCBlcmFzZWQ7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmZsYXNoOworCWludCBrOworCWludCBzaXplOworCWludCBlcmFzZWQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqZmxhc2g7CiAKIAlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewogCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CkBAIC0xNjEsMjggKzE2MSwyOCBAQAogCXByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKIAlmb3IgKGk9MDsgaTxpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewogI2lmZGVmIENGR19GTEFTSF9FTVBUWV9JTkZPCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKGkgIT0gKGluZm8tPnNlY3Rvcl9jb3VudC0xKSkKLSAgICAgICAgICAgICAgICAgIHNpemUgPSBpbmZvLT5zdGFydFtpKzFdIC0gaW5mby0+c3RhcnRbaV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc2l6ZSA9IGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSAtIGluZm8tPnN0YXJ0W2ldOwotICAgICAgICAgICAgICAgIGVyYXNlZCA9IDE7Ci0gICAgICAgICAgICAgICAgZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0W2ldOwotICAgICAgICAgICAgICAgIHNpemUgPSBzaXplID4+IDI7ICAgICAgICAvKiBkaXZpZGUgYnkgNCBmb3IgbG9uZ3dvcmQgYWNjZXNzICovCi0gICAgICAgICAgICAgICAgZm9yIChrPTA7IGs8c2l6ZTsgaysrKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKmZsYXNoKysgIT0gMHhmZmZmZmZmZikKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcmFzZWQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQorCQkvKgorCQkgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkCisJCSAqLworCQlpZiAoaSAhPSAoaW5mby0+c2VjdG9yX2NvdW50LTEpKQorCQkgIHNpemUgPSBpbmZvLT5zdGFydFtpKzFdIC0gaW5mby0+c3RhcnRbaV07CisJCWVsc2UKKwkJICBzaXplID0gaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gaW5mby0+c3RhcnRbaV07CisJCWVyYXNlZCA9IDE7CisJCWZsYXNoID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilpbmZvLT5zdGFydFtpXTsKKwkJc2l6ZSA9IHNpemUgPj4gMjsgICAgICAgIC8qIGRpdmlkZSBieSA0IGZvciBsb25nd29yZCBhY2Nlc3MgKi8KKwkJZm9yIChrPTA7IGs8c2l6ZTsgaysrKQorCQkgIHsKKwkJICAgIGlmICgqZmxhc2grKyAhPSAweGZmZmZmZmZmKQorCQkgICAgICB7CisJCQllcmFzZWQgPSAwOworCQkJYnJlYWs7CisJCSAgICAgIH0KKwkJICB9CiAKIAkJaWYgKChpICUgNSkgPT0gMCkKIAkJCXByaW50ZiAoIlxuICAgIik7Ci0gICAgICAgICAgICAgICAgLyogcHJpbnQgZW1wdHkgYW5kIHJlYWQtb25seSBpbmZvICovCisJCS8qIHByaW50IGVtcHR5IGFuZCByZWFkLW9ubHkgaW5mbyAqLwogCQlwcmludGYgKCIgJTA4bFglcyVzIiwKIAkJCWluZm8tPnN0YXJ0W2ldLAogCQkJZXJhc2VkID8gIiBFIiA6ICIgICIsCkBAIC0yMTYsNyArMjE2LDcgQEAKIAlzaG9ydCBuOwogCUNGR19GTEFTSF9XT1JEX1NJWkUgdmFsdWU7CiAJdWxvbmcgYmFzZSA9ICh1bG9uZylhZGRyOwotICAgICAgICB2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopYWRkcjsKKwl2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopYWRkcjsKIAogCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCiAJYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7CkBAIC0yODIsMzcgKzI4MiwzNyBAQAogCQlicmVhazsJCQkJLyogPT4gMiBNQgkJKi8KIAogCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0xWMzIwVDoKLQkgICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMzIwVDsKLQkgICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOworCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTMyMFQ7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOwogCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsgIGJyZWFrOwkvKiA9PiA0IE1CCSovCiAKIAljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9MVjMyMEI6Ci0JICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTMyMEI7CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMzIwQjsKIAkJaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7CiAJCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOyAgYnJlYWs7CS8qID0+IDQgTUIJKi8KIAogCWNhc2UgKENGR19GTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0RMMzIyVDoKLQkgICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNREwzMjJUOwotCSAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNREwzMjJUOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKIAkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7ICBicmVhazsJLyogPT4gNCBNQgkqLwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfREwzMjJCOgotCSAgICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU1ETDMyMkI7CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNREwzMjJCOwogCQlpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKIAkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7ICBicmVhazsJLyogPT4gNCBNQgkqLwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfREwzMjNUOgotCSAgICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU1ETDMyM1Q7CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNREwzMjNUOwogCQlpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKIAkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7ICBicmVhazsJLyogPT4gNCBNQgkqLwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfREwzMjNCOgotCSAgICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU1ETDMyM0I7CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNREwzMjNCOwogCQlpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKIAkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDA7ICBicmVhazsJLyogPT4gNCBNQgkqLwogCiAJY2FzZSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSlBTURfSURfTFY2NDBVOgotCSAgICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU02NDBVOworCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTY0MFU7CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDEyODsKIAkJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDA7ICBicmVhazsJLyogPT4gOCBNQgkqLwogCkBAIC0zMzUsMTEgKzMzNSwxMSBAQAogCX0KIAogCS8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRkcmVzcyB0YWJsZSAqLwotICAgICAgICBpZiAoKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1NUKSB8fAorCWlmICgoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TU1QpIHx8CiAJICAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU02NDBVKSkgewogCSAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCiAJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTURMMzIyQikgfHwKKwl9IGVsc2UgaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyMkIpIHx8CiAJCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyM0IpIHx8CiAJCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0zMjBCKSB8fAogCQkgICAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNREwzMjRCKSkgewpAQCAtMzUzLDcgKzM1Myw3IEBACiAJCQliYXNlICs9IDY0IDw8IDEwOwogCQkJKytpOwogCQl9Ci0gICAgICAgIH0gZWxzZSBpZiAoKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTURMMzIyVCkgfHwKKwl9IGVsc2UgaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyMlQpIHx8CiAJCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU1ETDMyM1QpIHx8CiAJCSAgICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgPT0gRkxBU0hfQU0zMjBUKSB8fAogCQkgICAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNREwzMjRUKSkgewpAQCAtMzcwLDcgKzM3MCw3IEBACiAJCQktLWk7CiAJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2U7CiAJCX0KLSAgICAgICAgfSBlbHNlIHsKKwl9IGVsc2UgewogCSAgICBpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9CVFlQRSkgewogCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KIAkJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKQEAgLTM5NywxMCArMzk3LDEwIEBACiAJCS8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBNyAuLiBBMCkgPSAweDAyICovCiAJCS8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KIAkJYWRkcjIgPSAodm9sYXRpbGUgQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFtpXSk7Ci0gICAgICAgICAgICAgICAgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1NUKQotICAgICAgICAgICAgICAgICAgaW5mby0+cHJvdGVjdFtpXSA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgaW5mby0+cHJvdGVjdFtpXSA9IGFkZHIyW0NGR19GTEFTSF9SRUFEMl0gJiAxOworCQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TU1QpCisJCSAgaW5mby0+cHJvdGVjdFtpXSA9IDA7CisJCWVsc2UKKwkJICBpbmZvLT5wcm90ZWN0W2ldID0gYWRkcjJbQ0ZHX0ZMQVNIX1JFQUQyXSAmIDE7CiAJfQogCiAJLyoKQEAgLTQyNCw3ICs0MjQsNyBAQAogCXZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmFkZHIyOwogCWludCBmbGFnLCBwcm90LCBzZWN0LCBsX3NlY3Q7CiAJdWxvbmcgc3RhcnQsIG5vdywgbGFzdDsKLSAgICAgICAgaW50IGk7CisJaW50IGk7CiAKIAlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKIAkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKQEAgLTQ2MywyNSArNDYzLDI1IEBACiAJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdDw9c19sYXN0OyBzZWN0KyspIHsKIAkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCiAJCSAgICBhZGRyMiA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0W3NlY3RdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1NUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkcltDRkdfRkxBU0hfQUREUjFdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkcltDRkdfRkxBU0hfQUREUjFdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIyWzBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMDUwMDA1MDsgIC8qIGJsb2NrIGVyYXNlICovCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTw1MDsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGVsYXkoMTAwMCk7ICAvKiB3YWl0IDEgbXMgKi8KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWN0ID09IHNfZmlyc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJbQ0ZHX0ZMQVNIX0FERFIxXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJbQ0ZHX0ZMQVNIX0FERFIxXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDA1NTAwNTU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyMlswXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDAzMDAwMzA7ICAvKiBzZWN0b3IgZXJhc2UgKi8KLSAgICAgICAgICAgICAgICAgICAgfQorCQkgICAgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1NUKSB7CisJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOworCQkJYWRkcltDRkdfRkxBU0hfQUREUjFdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKKwkJCWFkZHJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODA7CisJCQlhZGRyW0NGR19GTEFTSF9BRERSMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwQUEwMEFBOworCQkJYWRkcltDRkdfRkxBU0hfQUREUjFdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKKwkJCWFkZHIyWzBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMDUwMDA1MDsgIC8qIGJsb2NrIGVyYXNlICovCisJCQlmb3IgKGk9MDsgaTw1MDsgaSsrKQorCQkJICB1ZGVsYXkoMTAwMCk7ICAvKiB3YWl0IDEgbXMgKi8KKwkJICAgIH0gZWxzZSB7CisJCQlpZiAoc2VjdCA9PSBzX2ZpcnN0KSB7CisJCQkgICAgYWRkcltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMEFBMDBBQTsKKwkJCSAgICBhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OworCQkJICAgIGFkZHJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODA7CisJCQkgICAgYWRkcltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMEFBMDBBQTsKKwkJCSAgICBhZGRyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OworCQkJfQorCQkJYWRkcjJbMF0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwMzAwMDMwOyAgLyogc2VjdG9yIGVyYXNlICovCisJCSAgICB9CiAJCSAgICBsX3NlY3QgPSBzZWN0OwogCQl9CiAJfQpAQCAtNjAyLDQyICs2MDIsNDIgQEAKICAqLwogc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKmluZm8sIHVsb25nIGRlc3QsIHVsb25nIGRhdGEpCiB7Ci0gICAgICAgIHZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbMF0pOwotICAgICAgICB2b2xhdGlsZSBDRkdfRkxBU0hfV09SRF9TSVpFICpkZXN0MiA9IChDRkdfRkxBU0hfV09SRF9TSVpFICopZGVzdDsKLSAgICAgICAgdm9sYXRpbGUgQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqZGF0YTIgPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSAqKSZkYXRhOworCXZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbMF0pOworCXZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmRlc3QyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKilkZXN0OworCXZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKmRhdGEyID0gKENGR19GTEFTSF9XT1JEX1NJWkUgKikmZGF0YTsKIAl1bG9uZyBzdGFydDsKIAlpbnQgZmxhZzsKLSAgICAgICAgaW50IGk7CisJaW50IGk7CiAKIAkvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KIAlpZiAoKCooKHZvbGF0aWxlIENGR19GTEFTSF9XT1JEX1NJWkUgKilkZXN0KSAmCi0gICAgICAgICAgICAgKENGR19GTEFTSF9XT1JEX1NJWkUpZGF0YSkgIT0gKENGR19GTEFTSF9XT1JEX1NJWkUpZGF0YSkgeworCSAgICAgKENGR19GTEFTSF9XT1JEX1NJWkUpZGF0YSkgIT0gKENGR19GTEFTSF9XT1JEX1NJWkUpZGF0YSkgewogCQlyZXR1cm4gKDIpOwogCX0KIAkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KIAlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKLSAgICAgICAgZm9yIChpPTA7IGk8NC9zaXplb2YoQ0ZHX0ZMQVNIX1dPUkRfU0laRSk7IGkrKykKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBhZGRyMltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMEFBMDBBQTsKLSAgICAgICAgICAgIGFkZHIyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OwotICAgICAgICAgICAgYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDBBMDAwQTA7CisJZm9yIChpPTA7IGk8NC9zaXplb2YoQ0ZHX0ZMQVNIX1dPUkRfU0laRSk7IGkrKykKKwkgIHsKKwkgICAgYWRkcjJbQ0ZHX0ZMQVNIX0FERFIwXSA9IChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7CisJICAgIGFkZHIyW0NGR19GTEFTSF9BRERSMV0gPSAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OworCSAgICBhZGRyMltDRkdfRkxBU0hfQUREUjBdID0gKENGR19GTEFTSF9XT1JEX1NJWkUpMHgwMEEwMDBBMDsKIAotICAgICAgICAgICAgZGVzdDJbaV0gPSBkYXRhMltpXTsKKwkgICAgZGVzdDJbaV0gPSBkYXRhMltpXTsKIAotICAgICAgICAgICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgICAgICBpZiAoZmxhZykKLSAgICAgICAgICAgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKKwkgICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisJICAgIGlmIChmbGFnKQorCSAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAKLSAgICAgICAgICAgIC8qIGRhdGEgcG9sbGluZyBmb3IgRDcgKi8KLSAgICAgICAgICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKLSAgICAgICAgICAgIHdoaWxlICgoZGVzdDJbaV0gJiAoQ0ZHX0ZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSAhPQotICAgICAgICAgICAgICAgICAgIChkYXRhMltpXSAmIChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApKSB7Ci0gICAgICAgICAgICAgIGlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKDEpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQorCSAgICAvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCisJICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwkgICAgd2hpbGUgKChkZXN0MltpXSAmIChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApICE9CisJCSAgIChkYXRhMltpXSAmIChDRkdfRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApKSB7CisJICAgICAgaWYgKGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgeworCQlyZXR1cm4gKDEpOworCSAgICAgIH0KKwkgICAgfQorCSAgfQogCiAJcmV0dXJuICgwKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jb21tb24vZnBnYS5jIGIvYm9hcmQvZXNkL2NvbW1vbi9mcGdhLmMKaW5kZXggNTBiY2UyZS4uZjI3OTQzZiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NvbW1vbi9mcGdhLmMKKysrIGIvYm9hcmQvZXNkL2NvbW1vbi9mcGdhLmMKQEAgLTU3LDE2ICs1NywxNiBAQAogI2RlZmluZSBTRVRfRlBHQShkYXRhKSAgICAgICAgIG91dDMyKEdQSU8wX09SLCBkYXRhKQogCiAjZGVmaW5lIEZQR0FfV1JJVEVfMSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgU0VUX0ZQR0EoRlBHQV9QUkcgfCAgICAgICAgICAgIEZQR0FfREFUQSk7ICAvKiBzZXQgY2xvY2sgdG8gMCAqLyAgXAotICAgICAgICBTRVRfRlBHQShGUEdBX1BSRyB8ICAgICAgICAgICAgRlBHQV9EQVRBKTsgIC8qIHNldCBkYXRhIHRvIDEgICovICBcCi0gICAgICAgIFNFVF9GUEdBKEZQR0FfUFJHIHwgRlBHQV9DTEsgfCBGUEdBX0RBVEEpOyAgLyogc2V0IGNsb2NrIHRvIDEgKi8gIFwKLSAgICAgICAgU0VUX0ZQR0EoRlBHQV9QUkcgfCBGUEdBX0NMSyB8IEZQR0FfREFUQSk7fSAvKiBzZXQgZGF0YSB0byAxICAqLworCVNFVF9GUEdBKEZQR0FfUFJHIHwgICAgICAgICAgICBGUEdBX0RBVEEpOyAgLyogc2V0IGNsb2NrIHRvIDAgKi8gIFwKKwlTRVRfRlBHQShGUEdBX1BSRyB8ICAgICAgICAgICAgRlBHQV9EQVRBKTsgIC8qIHNldCBkYXRhIHRvIDEgICovICBcCisJU0VUX0ZQR0EoRlBHQV9QUkcgfCBGUEdBX0NMSyB8IEZQR0FfREFUQSk7ICAvKiBzZXQgY2xvY2sgdG8gMSAqLyAgXAorCVNFVF9GUEdBKEZQR0FfUFJHIHwgRlBHQV9DTEsgfCBGUEdBX0RBVEEpO30gLyogc2V0IGRhdGEgdG8gMSAgKi8KIAogI2RlZmluZSBGUEdBX1dSSVRFXzAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFNFVF9GUEdBKEZQR0FfUFJHIHwgICAgICAgICAgICBGUEdBX0RBVEEpOyAgLyogc2V0IGNsb2NrIHRvIDAgKi8gIFwKLSAgICAgICAgU0VUX0ZQR0EoRlBHQV9QUkcpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgZGF0YSB0byAwICAqLyAgXAotICAgICAgICBTRVRfRlBHQShGUEdBX1BSRyB8IEZQR0FfQ0xLKTsgICAgICAgICAgICAgIC8qIHNldCBjbG9jayB0byAxICovICBcCi0gICAgICAgIFNFVF9GUEdBKEZQR0FfUFJHIHwgRlBHQV9DTEsgfCBGUEdBX0RBVEEpO30gLyogc2V0IGRhdGEgdG8gMSAgKi8KKwlTRVRfRlBHQShGUEdBX1BSRyB8ICAgICAgICAgICAgRlBHQV9EQVRBKTsgIC8qIHNldCBjbG9jayB0byAwICovICBcCisJU0VUX0ZQR0EoRlBHQV9QUkcpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgZGF0YSB0byAwICAqLyAgXAorCVNFVF9GUEdBKEZQR0FfUFJHIHwgRlBHQV9DTEspOyAgICAgICAgICAgICAgLyogc2V0IGNsb2NrIHRvIDEgKi8gIFwKKwlTRVRfRlBHQShGUEdBX1BSRyB8IEZQR0FfQ0xLIHwgRlBHQV9EQVRBKTt9IC8qIHNldCBkYXRhIHRvIDEgICovCiAKIAogc3RhdGljIGludCBmcGdhX2Jvb3QodW5zaWduZWQgY2hhciAqZnBnYWRhdGEsIGludCBzaXplKQpAQCAtOTQsMTAgKzk0LDEwIEBACiAgIHdoaWxlICgxKQogICAgIHsKICAgICAgIGlmICgoZnBnYWRhdGFbaW5kZXhdID09IDB4ZmYpICYmIChmcGdhZGF0YVtpbmRleCsxXSA9PSAweGZmKSAmJgotICAgICAgICAgIChmcGdhZGF0YVtpbmRleCsyXSA9PSAweGZmKSAmJiAoZnBnYWRhdGFbaW5kZXgrM10gPT0gMHhmZikpCi0gICAgICAgIGJyZWFrOyAvKiBwcmVhbWJsZSBmb3VuZCAqLworCSAgKGZwZ2FkYXRhW2luZGV4KzJdID09IDB4ZmYpICYmIChmcGdhZGF0YVtpbmRleCszXSA9PSAweGZmKSkKKwlicmVhazsgLyogcHJlYW1ibGUgZm91bmQgKi8KICAgICAgIGVsc2UKLSAgICAgICAgaW5kZXgrKzsKKwlpbmRleCsrOwogICAgIH0KICNlbHNlCiAgIC8qIHNlYXJjaCBmb3IgcHJlYW1ibGUgMHhGRjJYICovCkBAIC0xMzQsMTAgKzEzNCwxMCBAQAogICAgICAgdWRlbGF5KDEwMDApOyAvKiB3YWl0IDFtcyAqLwogICAgICAgLyogQ2hlY2sgZm9yIHRpbWVvdXQgLSAxMDB1cyBtYXgsIHNvIHVzZSAzbXMgKi8KICAgICAgIGlmIChjb3VudCsrID4gMykKLSAgICAgICAgewotICAgICAgICAgIERCRygiRlBHQTogQm9vdGluZyBmYWlsZWQhXG4iKTsKLSAgICAgICAgICByZXR1cm4gRVJST1JfRlBHQV9QUkdfSU5JVF9MT1c7Ci0gICAgICAgIH0KKwl7CisJICBEQkcoIkZQR0E6IEJvb3RpbmcgZmFpbGVkIVxuIik7CisJICByZXR1cm4gRVJST1JfRlBHQV9QUkdfSU5JVF9MT1c7CisJfQogICAgIH0KIAogICBEQkcoIiVzLCAiLCgoaW4zMihHUElPMF9JUikgJiBGUEdBX0RPTkUpID09IDApID8gIk5PVCBET05FIiA6ICJET05FIiApOwpAQCAtMTUzLDEwICsxNTMsMTAgQEAKICAgICAgIHVkZWxheSgxMDAwKTsgLyogd2FpdCAxbXMgKi8KICAgICAgIC8qIENoZWNrIGZvciB0aW1lb3V0ICovCiAgICAgICBpZiAoY291bnQrKyA+IDMpCi0gICAgICAgIHsKLSAgICAgICAgICBEQkcoIkZQR0E6IEJvb3RpbmcgZmFpbGVkIVxuIik7Ci0gICAgICAgICAgcmV0dXJuIEVSUk9SX0ZQR0FfUFJHX0lOSVRfSElHSDsKLSAgICAgICAgfQorCXsKKwkgIERCRygiRlBHQTogQm9vdGluZyBmYWlsZWQhXG4iKTsKKwkgIHJldHVybiBFUlJPUl9GUEdBX1BSR19JTklUX0hJR0g7CisJfQogICAgIH0KIAogICBEQkcoIiVzLCAiLCgoaW4zMihHUElPMF9JUikgJiBGUEdBX0RPTkUpID09IDApID8gIk5PVCBET05FIiA6ICJET05FIiApOwpAQCAtMTcyLDE3ICsxNzIsMTcgQEAKICAgZm9yIChpPWluZGV4OyBpPHNpemU7IGkrKykKICAgICB7CiAgICAgICBmb3IgKGo9MDsgajw4OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoKGZwZ2FkYXRhW2ldICYgMHg4MCkgPT0gMHg4MCkKKwl7CisJICBpZiAoKGZwZ2FkYXRhW2ldICYgMHg4MCkgPT0gMHg4MCkKIAkgICAgewotICAgICAgICAgICAgICBGUEdBX1dSSVRFXzE7CisJICAgICAgRlBHQV9XUklURV8xOwogCSAgICB9Ci0gICAgICAgICAgZWxzZQorCSAgZWxzZQogCSAgICB7Ci0gICAgICAgICAgICAgIEZQR0FfV1JJVEVfMDsKKwkgICAgICBGUEdBX1dSSVRFXzA7CiAJICAgIH0KLSAgICAgICAgICBmcGdhZGF0YVtpXSA8PD0gMTsKLSAgICAgICAgfQorCSAgZnBnYWRhdGFbaV0gPDw9IDE7CisJfQogICAgIH0KICNlbHNlCiAgIC8qIHNlbmQgMHhmZiAweDIwICovCkBAIC0yMDUsMzAgKzIwNSwzMCBAQAogICAgICAgaWYgKChiID49IDEpICYmIChiIDw9IE1BWF9PTkVTKSkKIAl7CiAJICBmb3IoYml0PTA7IGJpdDxiOyBiaXQrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRlBHQV9XUklURV8xOwotICAgICAgICAgICAgfQorCSAgICB7CisJICAgICAgRlBHQV9XUklURV8xOworCSAgICB9CiAJICBGUEdBX1dSSVRFXzA7CiAJfQogICAgICAgZWxzZSBpZiAoYiA9PSAoTUFYX09ORVMrMSkpCiAJewogCSAgZm9yKGJpdD0xOyBiaXQ8YjsgYml0KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZQR0FfV1JJVEVfMTsKLSAgICAgICAgICAgIH0KKwkgICAgeworCSAgICAgIEZQR0FfV1JJVEVfMTsKKwkgICAgfQogCX0KICAgICAgIGVsc2UgaWYgKChiID49IChNQVhfT05FUysyKSkgJiYgKGIgPD0gMjU0KSkKIAl7CiAJICBmb3IoYml0PTA7IGJpdDwoYi0oTUFYX09ORVMrMikpOyBiaXQrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRlBHQV9XUklURV8wOwotICAgICAgICAgICAgfQotICAgICAgICAgIEZQR0FfV1JJVEVfMTsKKwkgICAgeworCSAgICAgIEZQR0FfV1JJVEVfMDsKKwkgICAgfQorCSAgRlBHQV9XUklURV8xOwogCX0KICAgICAgIGVsc2UgaWYgKGIgPT0gMjU1KQotICAgICAgICB7Ci0gICAgICAgICAgRlBHQV9XUklURV8xOwotICAgICAgICB9CisJeworCSAgRlBHQV9XUklURV8xOworCX0KICAgICB9CiAjZW5kaWYKIApAQCAtMjQ2LDEwICsyNDYsMTAgQEAKICAgICAgIHVkZWxheSgxMDAwKTsgLyogd2FpdCAxbXMgKi8KICAgICAgIC8qIENoZWNrIGZvciB0aW1lb3V0ICovCiAgICAgICBpZiAoY291bnQrKyA+IDMpCi0gICAgICAgIHsKLSAgICAgICAgICBEQkcoIkZQR0E6IEJvb3RpbmcgZmFpbGVkIVxuIik7Ci0gICAgICAgICAgcmV0dXJuIEVSUk9SX0ZQR0FfUFJHX0RPTkU7Ci0gICAgICAgIH0KKwl7CisJICBEQkcoIkZQR0E6IEJvb3RpbmcgZmFpbGVkIVxuIik7CisJICByZXR1cm4gRVJST1JfRlBHQV9QUkdfRE9ORTsKKwl9CiAgICAgfQogCiAgIERCRygiRlBHQTogQm9vdGluZyBzdWNjZXNzZnVsIVxuIik7CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY3BjaTQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9jcGNpNDA1L01ha2VmaWxlCmluZGV4IDM5ZDJmZWMuLmY1YmRhNTUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9jcGNpNDA1L01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC9jcGNpNDA1L01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpNDA1L2NwY2k0MDUuYyBiL2JvYXJkL2VzZC9jcGNpNDA1L2NwY2k0MDUuYwppbmRleCA1YTZhMjdjLi4zZjBlZjFlIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaTQwNS9jcGNpNDA1LmMKKysrIGIvYm9hcmQvZXNkL2NwY2k0MDUvY3BjaTQwNS5jCkBAIC0yNCwxMSArMjQsMTAgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ib290Lmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQorZXh0ZXJuIGludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOyAgICAgICAvKmNtZF9ib290LmMqLwogI2lmIDAKICNkZWZpbmUgRlBHQV9ERUJVRwogI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY3BjaTQwNS91LWJvb3QubGRzIGIvYm9hcmQvZXNkL2NwY2k0MDUvdS1ib290LmxkcwppbmRleCA5Nzg1MWYxLi4zMTFhNWZlIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaTQwNS91LWJvb3QubGRzCisrKyBiL2JvYXJkL2VzZC9jcGNpNDA1L3UtYm9vdC5sZHMKQEAgLTExOSw2ICsxMTksMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpNDQwL01ha2VmaWxlIGIvYm9hcmQvZXNkL2NwY2k0NDAvTWFrZWZpbGUKaW5kZXggNGUxZjcwMS4uZjcwNmViYyAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2k0NDAvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2NwY2k0NDAvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIFNPQkpTCT0gaW5pdC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpNDQwL2NwY2k0NDAuYyBiL2JvYXJkL2VzZC9jcGNpNDQwL2NwY2k0NDAuYwppbmRleCA1MWE1ZWRkLi42NmNmZTA2IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaTQ0MC9jcGNpNDQwLmMKKysrIGIvYm9hcmQvZXNkL2NwY2k0NDAvY3BjaTQ0MC5jCkBAIC02Niw3ICs2Niw2IEBACiB9CiAKIAotCiBpbnQgY2hlY2tib2FyZCAodm9pZCkKIHsKIAlzeXNfaW5mb190IHN5c2luZm87CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY3BjaTQ0MC9pbml0LlMgYi9ib2FyZC9lc2QvY3BjaTQ0MC9pbml0LlMKaW5kZXggMmRhYjlmOS4uODJmMzdmZCAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2k0NDAvaW5pdC5TCisrKyBiL2JvYXJkL2VzZC9jcGNpNDQwL2luaXQuUwpAQCAtOTIsNSArOTIsMyBAQAogICAgIHRsYmVudHJ5KCBDRkdfSVNSQU1fQkFTRSArIDB4MTAwMCwgU1pfNEssIDB4ODAwMDEwMDAsIDAsIEFDX1J8QUNfV3xBQ19YICkKICAgICB0bGJlbnRyeSggQ0ZHX1NEUkFNX0JBU0UsIFNaXzI1Nk0sIDB4MDAwMDAwMDAsIDAsIEFDX1J8QUNfV3xBQ19YICkKICAgICB0bGJ0YWJfZW5kCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2NwY2k0NDAvc3RyYXRhZmxhc2guYyBiL2JvYXJkL2VzZC9jcGNpNDQwL3N0cmF0YWZsYXNoLmMKaW5kZXggZGU1NzMxOC4uMmYwNTVjMiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2k0NDAvc3RyYXRhZmxhc2guYworKysgYi9ib2FyZC9lc2QvY3BjaTQ0MC9zdHJhdGFmbGFzaC5jCkBAIC04OSw4ICs4OSw2IEBACiAjZGVmaW5lIEZMQVNIX01BTl9DRkkJCQkweDAxMDAwMDAwCiAKIAotCi0KIHR5cGVkZWYgdW5pb24gewogCXVuc2lnbmVkIGNoYXIgYzsKIAl1bnNpZ25lZCBzaG9ydCB3OwpAQCAtMTEzLDcgKzExMSw2IEBACiAgKi8KIAogCi0KIHN0YXRpYyB2b2lkIGZsYXNoX2FkZF9ieXRlKGZsYXNoX2luZm9fdCAqaW5mbywgY2Zpd29yZF90ICogY3dvcmQsIHVjaGFyIGMpOwogc3RhdGljIHZvaWQgZmxhc2hfbWFrZV9jbWQoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgY21kLCB2b2lkICogY21kYnVmKTsKIHN0YXRpYyB2b2lkIGZsYXNoX3dyaXRlX2NtZChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2VjdCwgdWNoYXIgb2Zmc2V0LCB1Y2hhciBjbWQpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2NwY2k0NDAvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9jcGNpNDQwL3UtYm9vdC5sZHMKaW5kZXggMzVkOTkzMS4uNDZjY2YzMSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2k0NDAvdS1ib290LmxkcworKysgYi9ib2FyZC9lc2QvY3BjaTQ0MC91LWJvb3QubGRzCkBAIC0xMjYsNiArMTI2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY3BjaWlzZXI0L01ha2VmaWxlIGIvYm9hcmQvZXNkL2NwY2lpc2VyNC9NYWtlZmlsZQppbmRleCAzOWQyZmVjLi5mNWJkYTU1IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaWlzZXI0L01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC9jcGNpaXNlcjQvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2NwY2lpc2VyNC9jcGNpaXNlcjQuYyBiL2JvYXJkL2VzZC9jcGNpaXNlcjQvY3BjaWlzZXI0LmMKaW5kZXggMmUxMDQxMi4uNzI1YWJlOSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2NwY2lpc2VyNC9jcGNpaXNlcjQuYworKysgYi9ib2FyZC9lc2QvY3BjaWlzZXI0L2NwY2lpc2VyNC5jCkBAIC0yNSw3ICsyNSwxMSBAQAogI2luY2x1ZGUgImNwY2lpc2VyNC5oIgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KKworLypjbWRfYm9vdC5jKi8KKworZXh0ZXJuIGludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2NwY2lpc2VyNC9mbGFzaC5jIGIvYm9hcmQvZXNkL2NwY2lpc2VyNC9mbGFzaC5jCmluZGV4IDY4NTg1MGUuLmRlODQ3ZjkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9jcGNpaXNlcjQvZmxhc2guYworKysgYi9ib2FyZC9lc2QvY3BjaWlzZXI0L2ZsYXNoLmMKQEAgLTQzLDggKzQzLDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIHNpemVfYjA7CiAJaW50IGk7Ci0gICAgICAgIHVpbnQgcGJjcjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX2IwOworCXVpbnQgcGJjcjsKKwl1bnNpZ25lZCBsb25nIGJhc2VfYjA7CiAKIAkvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCiAJZm9yIChpPTA7IGk8Q0ZHX01BWF9GTEFTSF9CQU5LUzsgKytpKSB7CkBAIC02MCwyNSArNjAsMjUgQEAKIAkJCXNpemVfYjAsIHNpemVfYjA8PDIwKTsKIAl9CiAKLSAgICAgICAgLyogU2V0dXAgb2Zmc2V0cyAqLwotICAgICAgICBmbGFzaF9nZXRfb2Zmc2V0cyAoLXNpemVfYjAsICZmbGFzaF9pbmZvWzBdKTsKKwkvKiBTZXR1cCBvZmZzZXRzICovCisJZmxhc2hfZ2V0X29mZnNldHMgKC1zaXplX2IwLCAmZmxhc2hfaW5mb1swXSk7CiAKLSAgICAgICAgLyogUmUtZG8gc2l6aW5nIHRvIGdldCBmdWxsIGNvcnJlY3QgaW5mbyAqLwotICAgICAgICBtdGRjcihlYmNjZmdhLCBwYjBjcik7Ci0gICAgICAgIHBiY3IgPSBtZmRjcihlYmNjZmdkKTsKLSAgICAgICAgbXRkY3IoZWJjY2ZnYSwgcGIwY3IpOwotICAgICAgICBiYXNlX2IwID0gLXNpemVfYjA7Ci0gICAgICAgIHBiY3IgPSAocGJjciAmIDB4MDAwMWZmZmYpIHwgYmFzZV9iMCB8ICgoKHNpemVfYjAvMTAyNC8xMDI0KS0xKTw8MTcpOwotICAgICAgICBtdGRjcihlYmNjZmdkLCBwYmNyKTsKLSAgICAgICAgLyogICAgICAgICAgcHJpbnRmKCJwYjFjciA9ICV4XG4iLCBwYmNyKTsgKi8KKwkvKiBSZS1kbyBzaXppbmcgdG8gZ2V0IGZ1bGwgY29ycmVjdCBpbmZvICovCisJbXRkY3IoZWJjY2ZnYSwgcGIwY3IpOworCXBiY3IgPSBtZmRjcihlYmNjZmdkKTsKKwltdGRjcihlYmNjZmdhLCBwYjBjcik7CisJYmFzZV9iMCA9IC1zaXplX2IwOworCXBiY3IgPSAocGJjciAmIDB4MDAwMWZmZmYpIHwgYmFzZV9iMCB8ICgoKHNpemVfYjAvMTAyNC8xMDI0KS0xKTw8MTcpOworCW10ZGNyKGViY2NmZ2QsIHBiY3IpOworCS8qICAgICAgICAgIHByaW50ZigicGIxY3IgPSAleFxuIiwgcGJjcik7ICovCiAKLSAgICAgICAgLyogTW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KLSAgICAgICAgKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tb25pdG9yX2ZsYXNoX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbGFzaF9pbmZvWzBdKTsKKwkvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLworCSh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKwkJCSAgICAtbW9uaXRvcl9mbGFzaF9sZW4sCisJCQkgICAgMHhmZmZmZmZmZiwKKwkJCSAgICAmZmxhc2hfaW5mb1swXSk7CiAKLSAgICAgICAgZmxhc2hfaW5mb1swXS5zaXplID0gc2l6ZV9iMDsKKwlmbGFzaF9pbmZvWzBdLnNpemUgPSBzaXplX2IwOwogCiAJcmV0dXJuIChzaXplX2IwKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpaXNlcjQvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9jcGNpaXNlcjQvdS1ib290LmxkcwppbmRleCA5Nzg1MWYxLi4zMTFhNWZlIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvY3BjaWlzZXI0L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXNkL2NwY2lpc2VyNC91LWJvb3QubGRzCkBAIC0xMTksNiArMTE5LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvZGFzYV9zaW0vTWFrZWZpbGUgYi9ib2FyZC9lc2QvZGFzYV9zaW0vTWFrZWZpbGUKaW5kZXggMjlhYWYzYi4uZTNiMWM4NyAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC9kYXNhX3NpbS9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKKwogIwogIyAoQykgQ29weXJpZ2h0IDIwMDAKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KQEAgLTI4LDcgKzI5LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gY21kX2Rhc2Ffc2ltLm8gZWVwcm9tLm8gLi4vY29tbW9uL3BjaS5vCiAKICQoTElCKToJJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kYXNhX3NpbS9jbWRfZGFzYV9zaW0uYyBiL2JvYXJkL2VzZC9kYXNhX3NpbS9jbWRfZGFzYV9zaW0uYwppbmRleCA0NjA4ZGE3Li4wZWJlMDllIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvZGFzYV9zaW0vY21kX2Rhc2Ffc2ltLmMKKysrIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL2NtZF9kYXNhX3NpbS5jCkBAIC00MiwxOTUgKzQyLDE5NCBAQAogICoKICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IFBjaUVlcHJvbVJlYWRMb25nVlBEKGludCBvZmZzKQorc3RhdGljIHVuc2lnbmVkIGludCBQY2lFZXByb21SZWFkTG9uZ1ZQRCAoaW50IG9mZnMpCiB7Ci0gIHVuc2lnbmVkIGludCB2YWx1ZTsKLSAgdW5zaWduZWQgaW50IHJldDsKLSAgaW50IGNvdW50OworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgcmV0OworCWludCBjb3VudDsKIAotICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKENGR19QQ0k5MDU0X0RFVl9GTiwgMHg0YywgKG9mZnM8PDE2KSB8IDB4MDAwMyk7Ci0gIGNvdW50ID0gMDsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkIChDRkdfUENJOTA1NF9ERVZfRk4sIDB4NGMsCisJCQkJKG9mZnMgPDwgMTYpIHwgMHgwMDAzKTsKKwljb3VudCA9IDA7CiAKLSAgZm9yICg7OykKLSAgICB7Ci0gICAgICB1ZGVsYXkoMTAgKiAxMDAwKTsKLSAgICAgIHBjaV9yZWFkX2NvbmZpZ19kd29yZChDRkdfUENJOTA1NF9ERVZfRk4sIDB4NGMsICZyZXQpOwotICAgICAgaWYgKChyZXQgJiAweDgwMDAwMDAwKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgaWYgKGNvdW50ID4gMTApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHByaW50ZigiXG5UaW1lb3V0OiByZXQ9JTA4eCAtIFBsZWFzZSB0cnkgYWdhaW4hXG4iLCByZXQpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKwlmb3IgKDs7KSB7CisJCXVkZWxheSAoMTAgKiAxMDAwKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChDRkdfUENJOTA1NF9ERVZfRk4sIDB4NGMsICZyZXQpOworCQlpZiAoKHJldCAmIDB4ODAwMDAwMDApICE9IDApIHsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJY291bnQrKzsKKwkJCWlmIChjb3VudCA+IDEwKSB7CisJCQkJcHJpbnRmICgiXG5UaW1lb3V0OiByZXQ9JTA4eCAtIFBsZWFzZSB0cnkgYWdhaW4hXG4iLCByZXQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQogCi0gIHBjaV9yZWFkX2NvbmZpZ19kd29yZChDRkdfUENJOTA1NF9ERVZfRk4sIDB4NTAsICZ2YWx1ZSk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChDRkdfUENJOTA1NF9ERVZfRk4sIDB4NTAsICZ2YWx1ZSk7CiAKLSAgcmV0dXJuIHZhbHVlOworCXJldHVybiB2YWx1ZTsKIH0KIAogCi1zdGF0aWMgaW50IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRChpbnQgb2ZmcywgdW5zaWduZWQgaW50IHZhbHVlKQorc3RhdGljIGludCBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKGludCBvZmZzLCB1bnNpZ25lZCBpbnQgdmFsdWUpCiB7Ci0gIHVuc2lnbmVkIGludCByZXQ7Ci0gIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgcmV0OworCWludCBjb3VudDsKIAotICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKENGR19QQ0k5MDU0X0RFVl9GTiwgMHg1MCwgdmFsdWUpOwotICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKENGR19QQ0k5MDU0X0RFVl9GTiwgMHg0YywgKG9mZnM8PDE2KSB8IDB4ODAwMDAwMDMpOwotICBjb3VudCA9IDA7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoQ0ZHX1BDSTkwNTRfREVWX0ZOLCAweDUwLCB2YWx1ZSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoQ0ZHX1BDSTkwNTRfREVWX0ZOLCAweDRjLAorCQkJCShvZmZzIDw8IDE2KSB8IDB4ODAwMDAwMDMpOworCWNvdW50ID0gMDsKIAotICBmb3IgKDs7KQotICAgIHsKLSAgICAgIHVkZWxheSgxMCAqIDEwMDApOwotICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKENGR19QQ0k5MDU0X0RFVl9GTiwgMHg0YywgJnJldCk7Ci0gICAgICBpZiAoKHJldCAmIDB4ODAwMDAwMDApID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICBpZiAoY291bnQgPiAxMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgcHJpbnRmKCJcblRpbWVvdXQ6IHJldD0lMDh4IC0gUGxlYXNlIHRyeSBhZ2FpbiFcbiIsIHJldCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorCWZvciAoOzspIHsKKwkJdWRlbGF5ICgxMCAqIDEwMDApOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQgKENGR19QQ0k5MDU0X0RFVl9GTiwgMHg0YywgJnJldCk7CisJCWlmICgocmV0ICYgMHg4MDAwMDAwMCkgPT0gMCkgeworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQljb3VudCsrOworCQkJaWYgKGNvdW50ID4gMTApIHsKKwkJCQlwcmludGYgKCJcblRpbWVvdXQ6IHJldD0lMDh4IC0gUGxlYXNlIHRyeSBhZ2FpbiFcbiIsIHJldCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CiAKLSAgcmV0dXJuIFRSVUU7CisJcmV0dXJuIFRSVUU7CiB9CiAKIAotc3RhdGljIHZvaWQgc2hvd1BjaTkwNTQodm9pZCkKK3N0YXRpYyB2b2lkIHNob3dQY2k5MDU0ICh2b2lkKQogewotICBpbnQgdmFsOwotICBpbnQgbCwgaTsKKwlpbnQgdmFsOworCWludCBsLCBpOwogCi0gIC8qIHJlYWQgOTA1NC12YWx1ZXMgKi8KLSAgZm9yIChsPTA7IGw8NjsgbCsrKQotICAgIHsKLSAgICAgIHByaW50ZigiJTAyeDogIiwgbCoweDEwKTsKLSAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKLSAgICAgICAgewotCSAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKENGR19QQ0k5MDU0X0RFVl9GTiwgbCoxNitpKjQsICZ2YWwpOwotICAgICAgICAgIHByaW50ZigiJTA4eCAiLCB2YWwpOwotICAgICAgICB9Ci0gICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotICBwcmludGYoIlxuIik7CisJLyogcmVhZCA5MDU0LXZhbHVlcyAqLworCWZvciAobCA9IDA7IGwgPCA2OyBsKyspIHsKKwkJcHJpbnRmICgiJTAyeDogIiwgbCAqIDB4MTApOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQgKENGR19QQ0k5MDU0X0RFVl9GTiwKKwkJCQkJCWwgKiAxNiArIGkgKiA0LAorCQkJCQkJJnZhbCk7CisJCQlwcmludGYgKCIlMDh4ICIsIHZhbCk7CisJCX0KKwkJcHJpbnRmICgiXG4iKTsKKwl9CisJcHJpbnRmICgiXG4iKTsKIAotICBmb3IgKGw9MDsgbDw3OyBsKyspCi0gICAgewotICAgICAgcHJpbnRmKCIlMDJ4OiAiLCBsKjB4MTApOwotICAgICAgZm9yIChpPTA7IGk8NDsgaSsrKQotICAgICAgICBwcmludGYoIiUwOHggIiwgUGNpRWVwcm9tUmVhZExvbmdWUEQoKGkrbCo0KSo0KSk7Ci0gICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotICBwcmludGYoIlxuIik7CisJZm9yIChsID0gMDsgbCA8IDc7IGwrKykgeworCQlwcmludGYgKCIlMDJ4OiAiLCBsICogMHgxMCk7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCQlwcmludGYgKCIlMDh4ICIsCisJCQkJUGNpRWVwcm9tUmVhZExvbmdWUEQgKChpICsgbCAqIDQpICogNCkpOworCQlwcmludGYgKCJcbiIpOworCX0KKwlwcmludGYgKCJcbiIpOwogfQogCiAKLXN0YXRpYyB2b2lkIHVwZGF0ZVBjaTkwNTQodm9pZCkKK3N0YXRpYyB2b2lkIHVwZGF0ZVBjaTkwNTQgKHZvaWQpCiB7Ci0gIGludCB2YWw7CisJaW50IHZhbDsKIAotICAvKgotICAgKiBTZXQgRUVQUk9NIHdyaXRlLXByb3RlY3QgcmVnaXN0ZXIgdG8gMAotICAgKi8KLSAgb3V0MzIocGNpOTA1NF9pb2Jhc2UrMHgwYywgaW4zMihwY2k5MDU0X2lvYmFzZSsweDBjKSAmIDB4ZmZmZjAwZmYpOworCS8qCisJICogU2V0IEVFUFJPTSB3cml0ZS1wcm90ZWN0IHJlZ2lzdGVyIHRvIDAKKwkgKi8KKwlvdXQzMiAocGNpOTA1NF9pb2Jhc2UgKyAweDBjLAorCQkgICBpbjMyIChwY2k5MDU0X2lvYmFzZSArIDB4MGMpICYgMHhmZmZmMDBmZik7CiAKLSAgLyogTG9uZyBTZXJpYWwgRUVQUk9NIExvYWQgUmVnaXN0ZXJzLi4uICovCi0gIHZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCgweDAwLCAweDkwNTQxMGI1KTsKLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4MDQsIDB4MDk4MDAwMDEpOyAvKiBvdGhlciBpbnB1dCBjb250cm9sbGVyICovCi0gIHZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCgweDA4LCAweDI4MTQwMTAwKTsKKwkvKiBMb25nIFNlcmlhbCBFRVBST00gTG9hZCBSZWdpc3RlcnMuLi4gKi8KKwl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDAsIDB4OTA1NDEwYjUpOworCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwNCwgMHgwOTgwMDAwMSk7CS8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KKwl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDgsIDB4MjgxNDAxMDApOwogCi0gIHZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCgweDBjLCAweDAwMDAwMDAwKTsgLyogTUJPWDAuLi4gKi8KLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4MTAsIDB4MDAwMDAwMDApOworCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwYywgMHgwMDAwMDAwMCk7CS8qIE1CT1gwLi4uICovCisJdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDEwLCAweDAwMDAwMDAwKTsKIAotICAvKiBsYXMwOiBmcGdhIGFjY2VzcyAoMHgwMDAwLjAwMDAgLi4uIDB4MDAwMy5mZmZmKSAqLwotICB2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQoMHgxNCwgMHhmZmZjMDAwMCk7IC8qIExBUzBSUi4uLiAqLwotICB2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQoMHgxOCwgMHgwMDAwMDAwMSk7IC8qIExBUzBCQSAqLworCS8qIGxhczA6IGZwZ2EgYWNjZXNzICgweDAwMDAuMDAwMCAuLi4gMHgwMDAzLmZmZmYpICovCisJdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDE0LCAweGZmZmMwMDAwKTsJLyogTEFTMFJSLi4uICovCisJdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDE4LCAweDAwMDAwMDAxKTsJLyogTEFTMEJBICovCiAKLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4MWMsIDB4MDAyMDAwMDApOyAvKiBNQVJCUi4uLiAqLwotICB2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQoMHgyMCwgMHgwMDMwMDUwMCk7IC8qIExNSVNDL0JJR0VORCAqLworCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgxYywgMHgwMDIwMDAwMCk7CS8qIE1BUkJSLi4uICovCisJdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDIwLCAweDAwMzAwNTAwKTsJLyogTE1JU0MvQklHRU5EICovCiAKLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4MjQsIDB4MDAwMDAwMDApOyAvKiBFUk9NUlIuLi4gKi8KLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4MjgsIDB4MDAwMDAwMDApOyAvKiBFUk9NQkEgKi8KKwl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjQsIDB4MDAwMDAwMDApOwkvKiBFUk9NUlIuLi4gKi8KKwl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MjgsIDB4MDAwMDAwMDApOwkvKiBFUk9NQkEgKi8KIAotICB2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQoMHgyYywgMHg0MzAzMDAwMCk7IC8qIExCUkQwLi4uICovCisJdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDJjLCAweDQzMDMwMDAwKTsJLyogTEJSRDAuLi4gKi8KIAotICB2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQoMHgzMCwgMHgwMDAwMDAwMCk7IC8qIERNUlIuLi4gKi8KLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4MzQsIDB4MDAwMDAwMDApOwotICB2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQoMHgzOCwgMHgwMDAwMDAwMCk7CisJdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDMwLCAweDAwMDAwMDAwKTsJLyogRE1SUi4uLiAqLworCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgzNCwgMHgwMDAwMDAwMCk7CisJdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDM4LCAweDAwMDAwMDAwKTsKIAotICB2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQoMHgzYywgMHgwMDAwMDAwMCk7IC8qIERNUEJBTS4uLiAqLwotICB2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQoMHg0MCwgMHgwMDAwMDAwMCk7CisJdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDNjLCAweDAwMDAwMDAwKTsJLyogRE1QQkFNLi4uICovCisJdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDQwLCAweDAwMDAwMDAwKTsKIAotICAvKiBFeHRyYSBMb25nIFNlcmlhbCBFRVBST00gTG9hZCBSZWdpc3RlcnMuLi4gKi8KLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4NDQsIDB4MDEwMjEyZmUpOyAvKiBQQ0lTSUQuLi4gKi8KKwkvKiBFeHRyYSBMb25nIFNlcmlhbCBFRVBST00gTG9hZCBSZWdpc3RlcnMuLi4gKi8KKwl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4NDQsIDB4MDEwMjEyZmUpOwkvKiBQQ0lTSUQuLi4gKi8KIAotICAvKiBsYXMxOiA1MDUtc3JhbSBhY2Nlc3MgKDB4MDAwNC4wMDAwIC4uLiAweDAwMWYuZmZmZikgKi8KLSAgLyogT2Zmc2V0IHRvIExBUzE6IEdyb3VwIDE6IDB4MDAwNDAwMDAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICBHcm91cCAyOiAweDAwMDgwMDAwICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgR3JvdXAgMzogMHgwMDBjMDAwMCAgICAgICAgICAgICAgICAgKi8KLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4NDgsIDB4ZmZlMDAwMDApOyAvKiBMQVMxUlIgKi8KLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4NGMsIDB4MDAwNDAwMDEpOyAvKiBMQVMxQkEgKi8KLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4NTAsIDB4MDAwMDAyMDgpOyAvKiBMQlJEMSAqLyAvKiBzbyB3YXJzIGJpc2hlciAqLworCS8qIGxhczE6IDUwNS1zcmFtIGFjY2VzcyAoMHgwMDA0LjAwMDAgLi4uIDB4MDAxZi5mZmZmKSAqLworCS8qIE9mZnNldCB0byBMQVMxOiBHcm91cCAxOiAweDAwMDQwMDAwICAgICAgICAgICAgICAgICAqLworCS8qICAgICAgICAgICAgICAgICBHcm91cCAyOiAweDAwMDgwMDAwICAgICAgICAgICAgICAgICAqLworCS8qICAgICAgICAgICAgICAgICBHcm91cCAzOiAweDAwMGMwMDAwICAgICAgICAgICAgICAgICAqLworCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg0OCwgMHhmZmUwMDAwMCk7CS8qIExBUzFSUiAqLworCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg0YywgMHgwMDA0MDAwMSk7CS8qIExBUzFCQSAqLworCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHg1MCwgMHgwMDAwMDIwOCk7CS8qIExCUkQxICovIC8qIHNvIHdhcnMgYmlzaGVyICovCiAKLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4NTQsIDB4MDAwMDRjMDYpOyAvKiBIb3RTd2FwLi4uICovCisJdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEICgweDU0LCAweDAwMDA0YzA2KTsJLyogSG90U3dhcC4uLiAqLwogCi0gIHByaW50ZigiRmluaXNoZWQgd3JpdGluZyBkZWZhdWx0cyBpbnRvIFBMWCBQQ0k5MDU0IEVFUFJPTSFcbiIpOworCXByaW50ZiAoIkZpbmlzaGVkIHdyaXRpbmcgZGVmYXVsdHMgaW50byBQTFggUENJOTA1NCBFRVBST00hXG4iKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBjbGVhclBjaTkwNTQodm9pZCkKK3N0YXRpYyB2b2lkIGNsZWFyUGNpOTA1NCAodm9pZCkKIHsKLSAgaW50IHZhbDsKKwlpbnQgdmFsOwogCi0gIC8qCi0gICAqIFNldCBFRVBST00gd3JpdGUtcHJvdGVjdCByZWdpc3RlciB0byAwCi0gICAqLwotICBvdXQzMihwY2k5MDU0X2lvYmFzZSsweDBjLCBpbjMyKHBjaTkwNTRfaW9iYXNlKzB4MGMpICYgMHhmZmZmMDBmZik7CisJLyoKKwkgKiBTZXQgRUVQUk9NIHdyaXRlLXByb3RlY3QgcmVnaXN0ZXIgdG8gMAorCSAqLworCW91dDMyIChwY2k5MDU0X2lvYmFzZSArIDB4MGMsCisJCWluMzIgKHBjaTkwNTRfaW9iYXNlICsgMHgwYykgJiAweGZmZmYwMGZmKTsKIAotICAvKiBMb25nIFNlcmlhbCBFRVBST00gTG9hZCBSZWdpc3RlcnMuLi4gKi8KLSAgdmFsID0gUGNpRWVwcm9tV3JpdGVMb25nVlBEKDB4MDAsIDB4ZmZmZmZmZmYpOwotICB2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQoMHgwNCwgMHhmZmZmZmZmZik7IC8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KKwkvKiBMb25nIFNlcmlhbCBFRVBST00gTG9hZCBSZWdpc3RlcnMuLi4gKi8KKwl2YWwgPSBQY2lFZXByb21Xcml0ZUxvbmdWUEQgKDB4MDAsIDB4ZmZmZmZmZmYpOworCXZhbCA9IFBjaUVlcHJvbVdyaXRlTG9uZ1ZQRCAoMHgwNCwgMHhmZmZmZmZmZik7CS8qIG90aGVyIGlucHV0IGNvbnRyb2xsZXIgKi8KIAotICBwcmludGYoIkZpbmlzaGVkIGNsZWFyaW5nIFBMWCBQQ0k5MDU0IEVFUFJPTSFcbiIpOworCXByaW50ZiAoIkZpbmlzaGVkIGNsZWFyaW5nIFBMWCBQQ0k5MDU0IEVFUFJPTSFcbiIpOwogfQogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBkb19wY2k5MDU0KGNtZF90YmxfdCAqY21kdHAsIGJkX3QgKmJkLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK2ludCBkb19wY2k5MDU0IChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLAorCQkJCWNoYXIgKmFyZ3ZbXSkKIHsKLSAgaWYgKHN0cmNtcChhcmd2WzFdLCAiaW5mbyIpID09IDApCi0gICAgewotICAgICAgc2hvd1BjaTkwNTQoKTsKLSAgICAgIHJldHVybiAwOwotICAgIH0KKwlpZiAoc3RyY21wIChhcmd2WzFdLCAiaW5mbyIpID09IDApIHsKKwkJc2hvd1BjaTkwNTQgKCk7CisJCXJldHVybiAwOworCX0KIAotICBpZiAoc3RyY21wKGFyZ3ZbMV0sICJ1cGRhdGUiKSA9PSAwKQotICAgIHsKLSAgICAgIHVwZGF0ZVBjaTkwNTQoKTsKLSAgICAgIHJldHVybiAwOwotICAgIH0KKwlpZiAoc3RyY21wIChhcmd2WzFdLCAidXBkYXRlIikgPT0gMCkgeworCQl1cGRhdGVQY2k5MDU0ICgpOworCQlyZXR1cm4gMDsKKwl9CiAKLSAgaWYgKHN0cmNtcChhcmd2WzFdLCAiY2xlYXIiKSA9PSAwKQotICAgIHsKLSAgICAgIGNsZWFyUGNpOTA1NCgpOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQorCWlmIChzdHJjbXAgKGFyZ3ZbMV0sICJjbGVhciIpID09IDApIHsKKwkJY2xlYXJQY2k5MDU0ICgpOworCQlyZXR1cm4gMDsKKwl9CiAKLSAgcHJpbnRmKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwotICByZXR1cm4gMTsKKwlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOworCXJldHVybiAxOwogCiB9CiAKK2NtZF90YmxfdCBVX0JPT1RfQ01EIChwY2k5MDU0KSA9IE1LX0NNRF9FTlRSWSgKKwkicGNpOTA1NCIsIDMsIDEsIGRvX3BjaTkwNTQsCisJInBjaTkwNTQgLSBQTFggUENJOTA1NCBFRVBST00gYWNjZXNzXG4iLAorCSJwY2k5MDU0IGluZm8gLSBwcmludCBFRVBST00gdmFsdWVzXG4iCisJInBjaTkwNTQgdXBkYXRlIC0gdXBkYXRlcyBFRVBST00gd2l0aCBkZWZhdWx0IHZhbHVlc1xuIgorKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL2VlcHJvbS5jIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL2VlcHJvbS5jCmluZGV4IDU5ZWYxZDYuLjFiNGM3YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9kYXNhX3NpbS9lZXByb20uYworKysgYi9ib2FyZC9lc2QvZGFzYV9zaW0vZWVwcm9tLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICAgIHJldCA9ICoodW5zaWduZWQgc2hvcnQgKilFRVBST01fQ0FQOwogCiAgICAgICBpZiAoKHJldCAmIDB4ODAwMCkgIT0gMCkKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgfQogCiAgIHZhbHVlID0gKih1bnNpZ25lZCBsb25nICopRUVQUk9NX0RBVEE7CkBAIC04Myw3ICs4Myw3IEBACiAgICAgICByZXQgPSAqKHVuc2lnbmVkIHNob3J0ICopRUVQUk9NX0NBUDsKIAogICAgICAgaWYgKChyZXQgJiAweDgwMDApID09IDApCi0gICAgICAgIGJyZWFrOworCWJyZWFrOwogICAgIH0KIH0KIApAQCAtMTA3LDcgKzEwNyw3IEBACiAgIGludCBpOwogICBpbnQgbGVuMiwgcHRyOwogCi0gIC8qICBwcmludGYoIlxuYWRkcj0leCBhbGVuPSV4IGJ1ZmZlcj0leCBsZW49JXgiLCBhZGRyWzBdLCBhZGRyWzFdLCAqKHNob3J0ICopYWRkciwgYWxlbiwgYnVmZmVyLCBsZW4pOyAvLyB0ZXN0LW9ubHkgKi8KKyAgLyogIHByaW50ZigiXG5hZGRyPSV4IGFsZW49JXggYnVmZmVyPSV4IGxlbj0leCIsIGFkZHJbMF0sIGFkZHJbMV0sICooc2hvcnQgKilhZGRyLCBhbGVuLCBidWZmZXIsIGxlbik7IC8jIyMqIHRlc3Qtb25seSAqLwogCiAgIHB0ciA9ICooc2hvcnQgKilhZGRyOwogCkBAIC0xNDYsNyArMTQ2LDcgQEAKICAgaW50IGk7CiAgIGludCBsZW4yLCBwdHI7CiAKLSAgLyogIHByaW50ZigiXG5hZGRyPSV4IGFsZW49JXggYnVmZmVyPSV4IGxlbj0leCIsIGFkZHJbMF0sIGFkZHJbMV0sICooc2hvcnQgKilhZGRyLCBhbGVuLCBidWZmZXIsIGxlbik7IC8vIHRlc3Qtb25seSAqLworICAvKiAgcHJpbnRmKCJcbmFkZHI9JXggYWxlbj0leCBidWZmZXI9JXggbGVuPSV4IiwgYWRkclswXSwgYWRkclsxXSwgKihzaG9ydCAqKWFkZHIsIGFsZW4sIGJ1ZmZlciwgbGVuKTsgLyMjIyogdGVzdC1vbmx5ICovCiAKICAgcHRyID0gKihzaG9ydCAqKWFkZHI7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kYXNhX3NpbS9mbGFzaC5jIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL2ZsYXNoLmMKaW5kZXggMzJjZDY0Yy4uZDJhYzEzZiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL2ZsYXNoLmMKKysrIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL2ZsYXNoLmMKQEAgLTQzLDggKzQzLDggQEAKIHVuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHNpemVfYjA7Ci0gICAgICAgIGludCBpOwotICAgICAgICB1bnNpZ25lZCBsb25nIGJhc2VfYjA7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBiYXNlX2IwOwogCiAJLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLwogCWZvciAoaT0wOyBpPENGR19NQVhfRkxBU0hfQkFOS1M7ICsraSkgewpAQCAtNjAsMTggKzYwLDE4IEBACiAJCQlzaXplX2IwLCBzaXplX2IwPDwyMCk7CiAJfQogCi0gICAgICAgIC8qIFNldHVwIG9mZnNldHMgKi8KLSAgICAgICAgZmxhc2hfZ2V0X29mZnNldHMgKC1zaXplX2IwLCAmZmxhc2hfaW5mb1swXSk7CisJLyogU2V0dXAgb2Zmc2V0cyAqLworCWZsYXNoX2dldF9vZmZzZXRzICgtc2l6ZV9iMCwgJmZsYXNoX2luZm9bMF0pOwogCi0gICAgICAgIGJhc2VfYjAgPSAtc2l6ZV9iMDsKKwliYXNlX2IwID0gLXNpemVfYjA7CiAKLSAgICAgICAgLyogTW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KLSAgICAgICAgKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1tb25pdG9yX2ZsYXNoX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbGFzaF9pbmZvWzBdKTsKKwkvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLworCSh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKKwkJCSAgICAtbW9uaXRvcl9mbGFzaF9sZW4sCisJCQkgICAgMHhmZmZmZmZmZiwKKwkJCSAgICAmZmxhc2hfaW5mb1swXSk7CiAKLSAgICAgICAgZmxhc2hfaW5mb1swXS5zaXplID0gc2l6ZV9iMDsKKwlmbGFzaF9pbmZvWzBdLnNpemUgPSBzaXplX2IwOwogCiAJcmV0dXJuIChzaXplX2IwKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kYXNhX3NpbS91LWJvb3QubGRzIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL3UtYm9vdC5sZHMKaW5kZXggMDNjMGNlZi4uNWU3YjIyNSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXNkL2Rhc2Ffc2ltL3UtYm9vdC5sZHMKQEAgLTEzMyw2ICsxMzMsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kdTQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9kdTQwNS9NYWtlZmlsZQppbmRleCAxMTIzNjczLi5lNmQ3ZGQwIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvZHU0MDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL2R1NDA1L01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kdTQwNS9kdTQwNS5jIGIvYm9hcmQvZXNkL2R1NDA1L2R1NDA1LmMKaW5kZXggMTg0Y2RhOC4uN2I0MzBlYSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2R1NDA1L2R1NDA1LmMKKysrIGIvYm9hcmQvZXNkL2R1NDA1L2R1NDA1LmMKQEAgLTI3LDcgKzI3LDEwIEBACiAjaW5jbHVkZSA8cHBjNHh4Lmg+CiAjaW5jbHVkZSA8NDA1Z3BfaTJjLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ib290Lmg+CisKKy8qY21kX2Jvb3QuYyovCisKK2V4dGVybiBpbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvZHU0MDUvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9kdTQwNS91LWJvb3QubGRzCmluZGV4IDQ2M2UzODguLmIxNzkzYTIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9kdTQwNS91LWJvb3QubGRzCisrKyBiL2JvYXJkL2VzZC9kdTQwNS91LWJvb3QubGRzCkBAIC0xMTksNiArMTE5LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CmRpZmYgLS1naXQgYS9ib2FyZC9lc2Qvb2NydGMvTWFrZWZpbGUgYi9ib2FyZC9lc2Qvb2NydGMvTWFrZWZpbGUKaW5kZXggNDVkM2Q4ZC4uYjA1OWY3MyAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL29jcnRjL01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC9vY3J0Yy9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9lc2Qvb2NydGMvb2NydGMuYyBiL2JvYXJkL2VzZC9vY3J0Yy9vY3J0Yy5jCmluZGV4IDNjM2Q1NmUuLjA2MDAyNzMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9vY3J0Yy9vY3J0Yy5jCisrKyBiL2JvYXJkL2VzZC9vY3J0Yy9vY3J0Yy5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGkyYy5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9vY3J0Yy91LWJvb3QubGRzIGIvYm9hcmQvZXNkL29jcnRjL3UtYm9vdC5sZHMKaW5kZXggOGU5NDBhOC4uMjUxYTRjYyAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL29jcnRjL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXNkL29jcnRjL3UtYm9vdC5sZHMKQEAgLTExOSw2ICsxMTksMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9wY2k0MDUvTWFrZWZpbGUgYi9ib2FyZC9lc2QvcGNpNDA1L01ha2VmaWxlCmluZGV4IDYyZDdiZjkuLmZkNzJiMTggMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9wY2k0MDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXNkL3BjaTQwNS9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBjbWRfcGNpNDA1Lm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BjaTQwNS9jbWRfcGNpNDA1LmMgYi9ib2FyZC9lc2QvcGNpNDA1L2NtZF9wY2k0MDUuYwppbmRleCA1NTVkYzBjLi5kZjkxY2Q0IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvcGNpNDA1L2NtZF9wY2k0MDUuYworKysgYi9ib2FyZC9lc2QvcGNpNDA1L2NtZF9wY2k0MDUuYwpAQCAtMjIsMTIgKzIyLDEyIEBACiAgKi8KIAogI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDxuZXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxwY2kuaD4KICNpbmNsdWRlIDw0MDVncF9wY2kuaD4KLSNpbmNsdWRlIDxjbWRfYnNwLmg+CiAKICNpbmNsdWRlICJwY2k0MDUuaCIKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BjaTQwNS9mbGFzaC5jIGIvYm9hcmQvZXNkL3BjaTQwNS9mbGFzaC5jCmluZGV4IDE3MDdkY2YuLjNiMjE3ODEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9wY2k0MDUvZmxhc2guYworKysgYi9ib2FyZC9lc2QvcGNpNDA1L2ZsYXNoLmMKQEAgLTQzLDggKzQzLDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIHNpemVfYjA7CiAJaW50IGk7Ci0gICAgICAgIHVpbnQgcGJjcjsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX2IwOworCXVpbnQgcGJjcjsKKwl1bnNpZ25lZCBsb25nIGJhc2VfYjA7CiAJaW50IHNpemVfdmFsID0gMDsKIAogCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KQEAgLTYxLDE0ICs2MSwxNCBAQAogCQkJc2l6ZV9iMCwgc2l6ZV9iMDw8MjApOwogCX0KIAotICAgICAgICAvKiBTZXR1cCBvZmZzZXRzICovCi0gICAgICAgIGZsYXNoX2dldF9vZmZzZXRzICgtc2l6ZV9iMCwgJmZsYXNoX2luZm9bMF0pOworCS8qIFNldHVwIG9mZnNldHMgKi8KKwlmbGFzaF9nZXRfb2Zmc2V0cyAoLXNpemVfYjAsICZmbGFzaF9pbmZvWzBdKTsKIAotICAgICAgICAvKiBSZS1kbyBzaXppbmcgdG8gZ2V0IGZ1bGwgY29ycmVjdCBpbmZvICovCi0gICAgICAgIG10ZGNyKGViY2NmZ2EsIHBiMGNyKTsKLSAgICAgICAgcGJjciA9IG1mZGNyKGViY2NmZ2QpOwotICAgICAgICBtdGRjcihlYmNjZmdhLCBwYjBjcik7Ci0gICAgICAgIGJhc2VfYjAgPSAtc2l6ZV9iMDsKKwkvKiBSZS1kbyBzaXppbmcgdG8gZ2V0IGZ1bGwgY29ycmVjdCBpbmZvICovCisJbXRkY3IoZWJjY2ZnYSwgcGIwY3IpOworCXBiY3IgPSBtZmRjcihlYmNjZmdkKTsKKwltdGRjcihlYmNjZmdhLCBwYjBjcik7CisJYmFzZV9iMCA9IC1zaXplX2IwOwogCXN3aXRjaCAoc2l6ZV9iMCkgewogCWNhc2UgMSA8PCAyMDoKIAkJc2l6ZV92YWwgPSAwOwpAQCAtODcsMTUgKzg3LDE1IEBACiAJCWJyZWFrOwogCX0KIAlwYmNyID0gKHBiY3IgJiAweDAwMDFmZmZmKSB8IGJhc2VfYjAgfCAoc2l6ZV92YWwgPDwgMTcpOwotICAgICAgICBtdGRjcihlYmNjZmdkLCBwYmNyKTsKKwltdGRjcihlYmNjZmdkLCBwYmNyKTsKIAotICAgICAgICAvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwotICAgICAgICAodm9pZClmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1vbml0b3JfZmxhc2hfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZsYXNoX2luZm9bMF0pOworCS8qIE1vbml0b3IgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCisJKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAorCQkJICAgIC1tb25pdG9yX2ZsYXNoX2xlbiwKKwkJCSAgICAweGZmZmZmZmZmLAorCQkJICAgICZmbGFzaF9pbmZvWzBdKTsKIAotICAgICAgICBmbGFzaF9pbmZvWzBdLnNpemUgPSBzaXplX2IwOworCWZsYXNoX2luZm9bMF0uc2l6ZSA9IHNpemVfYjA7CiAKIAlyZXR1cm4gKHNpemVfYjApOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BjaTQwNS9wY2k0MDUuYyBiL2JvYXJkL2VzZC9wY2k0MDUvcGNpNDA1LmMKaW5kZXggMThkMjRhOC4uY2M0NWZhOSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL3BjaTQwNS9wY2k0MDUuYworKysgYi9ib2FyZC9lc2QvcGNpNDA1L3BjaTQwNS5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgogI2luY2x1ZGUgPHBjaS5oPgogI2luY2x1ZGUgPDQwNWdwX3BjaS5oPgpAQCAtMzMsNyArMzIsNyBAQAogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQorZXh0ZXJuIGludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOy8qY21kX2Jvb3QuYyovCiAjaWYgMAogI2RlZmluZSBGUEdBX0RFQlVHCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9wY2k0MDUvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9wY2k0MDUvdS1ib290LmxkcwppbmRleCA5Nzg1MWYxLi4zMTFhNWZlIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvcGNpNDA1L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXNkL3BjaTQwNS91LWJvb3QubGRzCkBAIC0xMTksNiArMTE5LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvcG1jNDA1L01ha2VmaWxlIGIvYm9hcmQvZXNkL3BtYzQwNS9NYWtlZmlsZQppbmRleCAyZmEwOTdhLi5jNDE5OGM0IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvcG1jNDA1L01ha2VmaWxlCisrKyBiL2JvYXJkL2VzZC9wbWM0MDUvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIHN0cmF0YWZsYXNoLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BtYzQwNS9wbWM0MDUuYyBiL2JvYXJkL2VzZC9wbWM0MDUvcG1jNDA1LmMKaW5kZXggNzhlZWQ5Zi4uNWMyZTk4YyAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL3BtYzQwNS9wbWM0MDUuYworKysgYi9ib2FyZC9lc2QvcG1jNDA1L3BtYzQwNS5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvcG1jNDA1L3N0cmF0YWZsYXNoLmMgYi9ib2FyZC9lc2QvcG1jNDA1L3N0cmF0YWZsYXNoLmMKaW5kZXggNjU3OGVkOS4uZDIxZDg4NSAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL3BtYzQwNS9zdHJhdGFmbGFzaC5jCisrKyBiL2JvYXJkL2VzZC9wbWM0MDUvc3RyYXRhZmxhc2guYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAotI3VuZGVmICBERUJVR19GTEFTSCAKKyN1bmRlZiAgREVCVUdfRkxBU0gKIC8qCiAgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIENvbW1vbiBGbGFzaCBJbnRlcmZhY2UgKENGSSkgZHJpdmVyIGZvciBwcGNib290LgogICogVGhlIHdpZHRoIG9mIHRoZSBwb3J0IGFuZCB0aGUgd2lkdGggb2YgdGhlIGNoaXBzIGFyZSBkZXRlcm1pbmVkIGF0IGluaXRpYWxpemF0aW9uLgpAQCAtODksOCArODksNiBAQAogI2RlZmluZSBGTEFTSF9NQU5fQ0ZJCQkJMHgwMTAwMDAwMAogCiAKLQotCiB0eXBlZGVmIHVuaW9uIHsKIAl1bnNpZ25lZCBjaGFyIGM7CiAJdW5zaWduZWQgc2hvcnQgdzsKQEAgLTExMyw3ICsxMTEsNiBAQAogICovCiAKIAotCiBzdGF0aWMgdm9pZCBmbGFzaF9hZGRfYnl0ZShmbGFzaF9pbmZvX3QgKmluZm8sIGNmaXdvcmRfdCAqIGN3b3JkLCB1Y2hhciBjKTsKIHN0YXRpYyB2b2lkIGZsYXNoX21ha2VfY21kKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyIGNtZCwgdm9pZCAqIGNtZGJ1Zik7CiBzdGF0aWMgdm9pZCBmbGFzaF93cml0ZV9jbWQoZmxhc2hfaW5mb190ICogaW5mbywgaW50IHNlY3QsIHVjaGFyIG9mZnNldCwgdWNoYXIgY21kKTsKQEAgLTI0OSw3ICsyNDYsNyBAQAogCQkJZmxhc2hfd3JpdGVfY21kKGluZm8sIHNlY3QsIDAsIEZMQVNIX0NNRF9DTEVBUl9TVEFUVVMpOwogCQkJZmxhc2hfd3JpdGVfY21kKGluZm8sIHNlY3QsIDAsIEZMQVNIX0NNRF9CTE9DS19FUkFTRSk7CiAJCQlmbGFzaF93cml0ZV9jbWQoaW5mbywgc2VjdCwgMCwgRkxBU0hfQ01EX0VSQVNFX0NPTkZJUk0pOwotCQkJCisKIAkJCWlmKGZsYXNoX2Z1bGxfc3RhdHVzX2NoZWNrKGluZm8sIHNlY3QsIGluZm8tPmVyYXNlX2Jsa190b3V0LCAiZXJhc2UiKSkgewogCQkJCXJjb2RlID0gMTsKIAkJCX0gZWxzZQpAQCAtMjc3LDcgKzI3NCw3IEBACiAJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CiAJcHJpbnRmKCIgRXJhc2UgdGltZW91dCAlbGQgbXMsIHdyaXRlIHRpbWVvdXQgJWxkIG1zLCBidWZmZXIgd3JpdGUgdGltZW91dCAlbGQgbXMsIGJ1ZmZlciBzaXplICVkXG4iLAogCSAgICAgICBpbmZvLT5lcmFzZV9ibGtfdG91dCwgaW5mby0+d3JpdGVfdG91dCwgaW5mby0+YnVmZmVyX3dyaXRlX3RvdXQsIGluZm8tPmJ1ZmZlcl9zaXplKTsKLSAgICAgIAorCiAJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwogCWZvciAoaT0wOyBpPGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7CiAjaWZkZWYgQ0ZHX0ZMQVNIX0VNUFRZX0lORk8KQEAgLTI4NiwyOCArMjgzLDI4IEBACiAJCWludCBlcmFzZWQ7CiAJCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmZsYXNoOwogCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKGkgIT0gKGluZm8tPnNlY3Rvcl9jb3VudC0xKSkKLSAgICAgICAgICAgICAgICAgIHNpemUgPSBpbmZvLT5zdGFydFtpKzFdIC0gaW5mby0+c3RhcnRbaV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc2l6ZSA9IGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSAtIGluZm8tPnN0YXJ0W2ldOwotICAgICAgICAgICAgICAgIGVyYXNlZCA9IDE7Ci0gICAgICAgICAgICAgICAgZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0W2ldOwotICAgICAgICAgICAgICAgIHNpemUgPSBzaXplID4+IDI7ICAgICAgICAvKiBkaXZpZGUgYnkgNCBmb3IgbG9uZ3dvcmQgYWNjZXNzICovCi0gICAgICAgICAgICAgICAgZm9yIChrPTA7IGs8c2l6ZTsgaysrKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKmZsYXNoKysgIT0gMHhmZmZmZmZmZikKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcmFzZWQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQorCQkvKgorCQkgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkCisJCSAqLworCQlpZiAoaSAhPSAoaW5mby0+c2VjdG9yX2NvdW50LTEpKQorCQkgIHNpemUgPSBpbmZvLT5zdGFydFtpKzFdIC0gaW5mby0+c3RhcnRbaV07CisJCWVsc2UKKwkJICBzaXplID0gaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gaW5mby0+c3RhcnRbaV07CisJCWVyYXNlZCA9IDE7CisJCWZsYXNoID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilpbmZvLT5zdGFydFtpXTsKKwkJc2l6ZSA9IHNpemUgPj4gMjsgICAgICAgIC8qIGRpdmlkZSBieSA0IGZvciBsb25nd29yZCBhY2Nlc3MgKi8KKwkJZm9yIChrPTA7IGs8c2l6ZTsgaysrKQorCQkgIHsKKwkJICAgIGlmICgqZmxhc2grKyAhPSAweGZmZmZmZmZmKQorCQkgICAgICB7CisJCQllcmFzZWQgPSAwOworCQkJYnJlYWs7CisJCSAgICAgIH0KKwkJICB9CiAKIAkJaWYgKChpICUgNSkgPT0gMCkKIAkJCXByaW50ZiAoIlxuICAgIik7Ci0gICAgICAgICAgICAgICAgLyogcHJpbnQgZW1wdHkgYW5kIHJlYWQtb25seSBpbmZvICovCisJCS8qIHByaW50IGVtcHR5IGFuZCByZWFkLW9ubHkgaW5mbyAqLwogCQlwcmludGYgKCIgJTA4bFglcyVzIiwKIAkJCWluZm8tPnN0YXJ0W2ldLAogCQkJZXJhc2VkID8gIiBFIiA6ICIgICIsCkBAIC00MTQsNyArNDExLDcgQEAKIAllbHNlCiAJCWZsYXNoX3dyaXRlX2NtZChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9QUk9URUNUX0NMRUFSKTsKIAotCWlmKChyZXRjb2RlID0gZmxhc2hfZnVsbF9zdGF0dXNfY2hlY2soaW5mbywgc2VjdG9yLCBpbmZvLT5lcmFzZV9ibGtfdG91dCwgCisJaWYoKHJldGNvZGUgPSBmbGFzaF9mdWxsX3N0YXR1c19jaGVjayhpbmZvLCBzZWN0b3IsIGluZm8tPmVyYXNlX2Jsa190b3V0LAogCQkJCQkgcHJvdD8icHJvdGVjdCI6InVucHJvdGVjdCIpKSA9PSAwKSB7CiAKIAkJaW5mby0+cHJvdGVjdFtzZWN0b3JdID0gcHJvdDsKQEAgLTQ2NCw3ICs0NjEsNyBAQAogCQkJcHJpbnRmKCJDb21tYW5kIFNlcXVlbmNlIEVycm9yLlxuIik7CiAJCX0gZWxzZSBpZihmbGFzaF9pc3NldChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX1NUQVRVU19FQ0xCUykpewogCQkJcHJpbnRmKCJCbG9jayBFcmFzZSBFcnJvci5cbiIpOwotCQkgICAgICAgIHJldGNvZGUgPSBFUlJfTk9UX0VSQVNFRDsKKwkJCXJldGNvZGUgPSBFUlJfTk9UX0VSQVNFRDsKIAkJfSBlbHNlIGlmIChmbGFzaF9pc3NldChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX1NUQVRVU19QU0xCUykpIHsKIAkJCXByaW50ZigiTG9ja2luZyBFcnJvclxuIik7CiAJCX0KQEAgLTczMyw3ICs3MzAsNyBAQAogewogCWludCBzZWN0b3I7CiAJZm9yKHNlY3RvciA9IGluZm8tPnNlY3Rvcl9jb3VudCAtIDE7IHNlY3RvciA+PSAwOyBzZWN0b3ItLSkgewotCQlpZihhZGRyID49IGluZm8tPnN0YXJ0W3NlY3Rvcl0pIAorCQlpZihhZGRyID49IGluZm8tPnN0YXJ0W3NlY3Rvcl0pCiAJCQlicmVhazsKIAl9CiAJcmV0dXJuIHNlY3RvcjsKQEAgLTc0MSw3ICs3MzgsNyBAQAogCiBzdGF0aWMgaW50IGZsYXNoX3dyaXRlX2NmaWJ1ZmZlcihmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBkZXN0LCB1Y2hhciAqIGNwLCBpbnQgbGVuKQogewotCQorCiAJaW50IHNlY3RvcjsKIAlpbnQgY250OwogCWludCByZXRjb2RlOwpAQCAtNzg5LDggKzc4Niw4IEBACiAJCWZsYXNoX3dyaXRlX2NtZChpbmZvLCBzZWN0b3IsIDAsIEZMQVNIX0NNRF9XUklURV9CVUZGRVJfQ09ORklSTSk7CiAJCXJldGNvZGUgPSBmbGFzaF9mdWxsX3N0YXR1c19jaGVjayhpbmZvLCBzZWN0b3IsIGluZm8tPmJ1ZmZlcl93cml0ZV90b3V0LAogCQkJCQkgICAgICJidWZmZXIgd3JpdGUiKTsKLQl9IAorCX0KIAlmbGFzaF93cml0ZV9jbWQoaW5mbywgc2VjdG9yLCAwLCBGTEFTSF9DTURfQ0xFQVJfU1RBVFVTKTsKIAlyZXR1cm4gcmV0Y29kZTsKLX0JCit9CiAjZW5kaWYgLyogQ0ZHX1VTRV9GTEFTSF9CVUZGRVJfV1JJVEUgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9wbWM0MDUvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9wbWM0MDUvdS1ib290LmxkcwppbmRleCA0NjNlMzg4Li5iZmQ3MWRiIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvcG1jNDA1L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXNkL3BtYzQwNS91LWJvb3QubGRzCkBAIC0xMTksNiArMTE5LDEwIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXN0ZWVtMTkyZS9NYWtlZmlsZSBiL2JvYXJkL2VzdGVlbTE5MmUvTWFrZWZpbGUKaW5kZXggZWYxNzNkMC4uMTNjZTlmYyAxMDA2NDQKLS0tIGEvYm9hcmQvZXN0ZWVtMTkyZS9NYWtlZmlsZQorKysgYi9ib2FyZC9lc3RlZW0xOTJlL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9lc3RlZW0xOTJlL2VzdGVlbTE5MmUuYyBiL2JvYXJkL2VzdGVlbTE5MmUvZXN0ZWVtMTkyZS5jCmluZGV4IDc5MmE2MWMuLjk4Njk2NGIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzdGVlbTE5MmUvZXN0ZWVtMTkyZS5jCisrKyBiL2JvYXJkL2VzdGVlbTE5MmUvZXN0ZWVtMTkyZS5jCkBAIC00NywxNCArNDcsMTQgQEAKIAkvKgogCSAqIFNEUkFNIEluaXRpYWxpemF0aW9uIChvZmZzZXQgNSBpbiBVUE1BIFJBTSkKIAkgKgotICAgICAgICAgKiBUaGlzIGlzIG5vIFVQTSBlbnRyeSBwb2ludC4gVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHVzZXMKLSAgICAgICAgICogdGhlIHJlbWFpbmluZyBzcGFjZSB0byBlc3RhYmxpc2ggYW4gaW5pdGlhbGl6YXRpb24KLSAgICAgICAgICogc2VxdWVuY2UsIHdoaWNoIGlzIGV4ZWN1dGVkIGJ5IGEgUlVOIGNvbW1hbmQuCisJICogVGhpcyBpcyBubyBVUE0gZW50cnkgcG9pbnQuIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiB1c2VzCisJICogdGhlIHJlbWFpbmluZyBzcGFjZSB0byBlc3RhYmxpc2ggYW4gaW5pdGlhbGl6YXRpb24KKwkgKiBzZXF1ZW5jZSwgd2hpY2ggaXMgZXhlY3V0ZWQgYnkgYSBSVU4gY29tbWFuZC4KIAkgKiBOT1AsIFByb2dyYW0KIAkgKi8KLSAgICAgICAgMHgwRjBBOEMzNCwgMHgxRjM1NEMzNywgLyogbGFzdCAqLworCTB4MEYwQThDMzQsIDB4MUYzNTRDMzcsIC8qIGxhc3QgKi8KIAotICAgICAgICBfTk9UX1VTRURfLCAgLyogTm90IHVzZWQgKi8KKwlfTk9UX1VTRURfLCAgLyogTm90IHVzZWQgKi8KIAogCS8qCiAJICogQnVyc3QgUmVhZC4gKE9mZnNldCA4IGluIFVQTUEgUkFNKQpAQCAtODcsNyArODcsNyBAQAogCSAqIEV4Y2VwdGlvbi4gKE9mZnNldCAzYyBpbiBVUE1BIFJBTSkKIAkgKi8KIAkweDBGRkI4QzAwLCAweDFGRjc0QzAzLCAvKiBsYXN0ICovCi0JICAgICAgICAgICAgICAgICAgICAgICAgX05PVF9VU0VEXywgX05PVF9VU0VEXworCQkJCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8KIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE4NiwzOCArMTg2LDM4IEBACiAgICAgZWxzZSB7CiAKICAgICAgICBpZihzaXplX2IwIDwgc2l6ZV9iMSkgewotICAgICAgICAgIG1lbWN0bC0+bWVtY19icjIgJj0gMHgwMDAwN0ZGRTsKLSAgICAgICAgICBtZW1jdGwtPm1lbWNfYnIzICY9IDB4MDAwMDdGRkY7CisJICBtZW1jdGwtPm1lbWNfYnIyICY9IDB4MDAwMDdGRkU7CisJICBtZW1jdGwtPm1lbWNfYnIzICY9IDB4MDAwMDdGRkY7CiAKLSAgICAgICAgIC8qCi0gICAgICAgICAgKiBBZGp1c3QgT1IzIGZvciBzaXplIG9mIGJhbmsgMQotICAgICAgICAgICovCi0gICAgICAgICAgbWVtY3RsLT5tZW1jX29yMyB8PSAxNSAqIHNpemVfYjE7CisJIC8qCisJICAqIEFkanVzdCBPUjMgZm9yIHNpemUgb2YgYmFuayAxCisJICAqLworCSAgbWVtY3RsLT5tZW1jX29yMyB8PSAxNSAqIHNpemVfYjE7CiAKLSAgICAgICAgIC8qCi0gICAgICAgICAgKiBBZGp1c3QgT1IyIGZvciBzaXplIG9mIGJhbmsgMAotICAgICAgICAgICovCi0gICAgICAgICAgbWVtY3RsLT5tZW1jX29yMiB8PSAxNSAqIHNpemVfYjA7CisJIC8qCisJICAqIEFkanVzdCBPUjIgZm9yIHNpemUgb2YgYmFuayAwCisJICAqLworCSAgbWVtY3RsLT5tZW1jX29yMiB8PSAxNSAqIHNpemVfYjA7CiAKLSAgICAgICAgICBtZW1jdGwtPm1lbWNfYnIyICs9IChzaXplX2IxICsgMSk7CisJICBtZW1jdGwtPm1lbWNfYnIyICs9IChzaXplX2IxICsgMSk7CiAKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAKLSAgICAgICAgICBtZW1jdGwtPm1lbWNfYnIzICY9IDB4MDAwMDdGRkU7CisJICBtZW1jdGwtPm1lbWNfYnIzICY9IDB4MDAwMDdGRkU7CiAKIAotICAgICAgICAgLyoKLSAgICAgICAgICAqIEFkanVzdCBPUjIgZm9yIHNpemUgb2YgYmFuayAwCi0gICAgICAgICAgKi8KLSAgICAgICAgICBtZW1jdGwtPm1lbWNfb3IyIHw9IDE1ICogc2l6ZV9iMDsKKwkgLyoKKwkgICogQWRqdXN0IE9SMiBmb3Igc2l6ZSBvZiBiYW5rIDAKKwkgICovCisJICBtZW1jdGwtPm1lbWNfb3IyIHw9IDE1ICogc2l6ZV9iMDsKIAotICAgICAgICAgLyoKLSAgICAgICAgICAqIEFkanVzdCBPUjMgZm9yIHNpemUgb2YgYmFuayAxCi0gICAgICAgICAgKi8KLSAgICAgICAgICBtZW1jdGwtPm1lbWNfb3IzIHw9IDE1ICogc2l6ZV9iMTsKKwkgLyoKKwkgICogQWRqdXN0IE9SMyBmb3Igc2l6ZSBvZiBiYW5rIDEKKwkgICovCisJICBtZW1jdGwtPm1lbWNfb3IzIHw9IDE1ICogc2l6ZV9iMTsKIAotICAgICAgICAgIG1lbWN0bC0+bWVtY19icjMgKz0gKHNpemVfYjAgKyAxKTsKKwkgIG1lbWN0bC0+bWVtY19icjMgKz0gKHNpemVfYjAgKyAxKTsKIAogCiAgICAgICAgfQpAQCAtMjY5LDggKzI2OSw2IEBACiAgICAgaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRkYXQgPSAweDAwNTU7ICAgICAgLyogc2V0IGFsdGVybmF0aW5nIHBhdHRlcm4gb24gdGVzdCBwb3J0ICovCiAKIAotCi0KICAgICByZXR1cm4gKHNpemVfYjAgKyBzaXplX2IxKTsKIH0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvZXN0ZWVtMTkyZS9mbGFzaC5jIGIvYm9hcmQvZXN0ZWVtMTkyZS9mbGFzaC5jCmluZGV4IDUzMjI0MzAuLjU0NjVkZWEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzdGVlbTE5MmUvZmxhc2guYworKysgYi9ib2FyZC9lc3RlZW0xOTJlL2ZsYXNoLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCWlmIChzaXplX2IxKSB7CiAJCW1lbWN0bC0+bWVtY19vcjEgPSBDRkdfT1JfVElNSU5HX0ZMQVNIIHwgKC1zaXplX2IxICYgMHhGRkZGODAwMCk7CiAJCW1lbWN0bC0+bWVtY19icjEgPSAoQ0ZHX0ZMQVNIX0JBU0UgfCAweDAwMDAwODAxKSArIChzaXplX2IwICYgQlJfQkFfTVNLKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKChDRkdfRkxBU0hfQkFTRSArIHNpemVfYjApICYgQlJfQkFfTVNLKSB8CisJCQkgICAgICAvKigoQ0ZHX0ZMQVNIX0JBU0UgKyBzaXplX2IwKSAmIEJSX0JBX01TSykgfAogCQkJCSAgICBCUl9NU19HUENNIHwgQlJfVjsqLwogCiAJCS8qIFJlLWRvIHNpemluZyB0byBnZXQgZnVsbCBjb3JyZWN0IGluZm8gKi8KQEAgLTE0OCw3ICsxNDgsNyBAQAogCiAJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZHJlc3MgdGFibGUgKi8KIAlpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9CVFlQRSkgewotICAgICAgICAgICAgIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMKSB7CisJICAgICBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9JTlRFTCkgewogCiAjaWZuZGVmIENPTkZJR19GTEFTSF8xNkJJVAogCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KQEAgLTE2Miw5ICsxNjIsOSBAQAogCQlpbmZvLT5zdGFydFs3XSA9IGJhc2UgKyAweDAwMDFDMDAwOwogCQlmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKIAkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAyMDAwMCkgLSAweDAwMEUwMDAwOwotCSAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIGVsc2UgeworCQl9CisJICAgICAgIH0KKwkgICAgIGVsc2UgewogCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KIAkJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKIAkJaW5mby0+c3RhcnRbMV0gPSBiYXNlICsgMHgwMDAwODAwMDsKQEAgLTE4Niw5ICsxODYsOSBAQAogCQlpbmZvLT5zdGFydFs3XSA9IGJhc2UgKyAweDAwMDBFMDAwOwogCQlmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKIAkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCkgLSAweDAwMDcwMDAwOwotCSAgICAgICAgfQorCQl9CiAJICAgICAgIH0KLSAgICAgICAgICAgICBlbHNlIHsKKwkgICAgIGVsc2UgewogCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KIAkJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKIAkJaW5mby0+c3RhcnRbMV0gPSBiYXNlICsgMHgwMDAwNDAwMDsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCX0gZWxzZSB7CiAJCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgdG9wIGJvb3QgYmxvY2sgdHlwZQkJKi8KIAkJaSA9IGluZm8tPnNlY3Rvcl9jb3VudCAtIDE7Ci0gICAgICAgICAgICAgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUwpIHsKKwkgICAgIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMKSB7CiAKICNpZm5kZWYgQ09ORklHX0ZMQVNIXzE2QklUCiAJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDQwMDA7CkBAIC0yMTYsNyArMjE2LDcgQEAKIAkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIGkgKiAweDAwMDIwMDAwOwogCQl9CiAKLSAgICAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgIH0gZWxzZSB7CiAKIAkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwODAwMDsKIAkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwQzAwMDsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgaSAqIDB4MDAwMTAwMDA7CiAJCX0KIAotICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgfSBlbHNlIHsKIAogCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA0MDAwOwogCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA2MDAwOwpAQCAtMzYyLDggKzM2Miw4IEBACiAKIAkvKgogCSAqIE5vdGU6IGlmIGl0IGlzIGFuIEFNRCBmbGFzaCBhbmQgdGhlIHdvcmQgYXQgYWRkclswMDAwXQotICAgICAgICAgKiBpcyAweDAwODkwMDg5IHRoaXMgcm91dGluZSB3aWxsIHRoaW5rIGl0IGlzIGFuIEludGVsCi0gICAgICAgICAqIGZsYXNoIGRldmljZSBhbmQgbWF5KG1vc3QgbGlrZWx5KSBjYXVzZSB0cm91YmxlLgorCSAqIGlzIDB4MDA4OTAwODkgdGhpcyByb3V0aW5lIHdpbGwgdGhpbmsgaXQgaXMgYW4gSW50ZWwKKwkgKiBmbGFzaCBkZXZpY2UgYW5kIG1heShtb3N0IGxpa2VseSkgY2F1c2UgdHJvdWJsZS4KIAkgKi8KIAogCWFkZHJbMHgwMDAwXSA9IDB4MDA5MDAwOTA7CkBAIC0zNzUsOCArMzc1LDggQEAKIAogCS8qCiAJICogTm90ZTogaWYgaXQgaXMgYW4gQU1EIGZsYXNoIGFuZCB0aGUgd29yZCBhdCBhZGRyWzAwMDBdCi0gICAgICAgICAqIGlzIDB4MDA4OSB0aGlzIHJvdXRpbmUgd2lsbCB0aGluayBpdCBpcyBhbiBJbnRlbAotICAgICAgICAgKiBmbGFzaCBkZXZpY2UgYW5kIG1heShtb3N0IGxpa2VseSkgY2F1c2UgdHJvdWJsZS4KKwkgKiBpcyAweDAwODkgdGhpcyByb3V0aW5lIHdpbGwgdGhpbmsgaXQgaXMgYW4gSW50ZWwKKwkgKiBmbGFzaCBkZXZpY2UgYW5kIG1heShtb3N0IGxpa2VseSkgY2F1c2UgdHJvdWJsZS4KIAkgKi8KIAogCWFkZHJbMHgwMDAwXSA9IDB4MDA5MDsKQEAgLTUyMyw3ICs1MjMsNyBAQAogCiAJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZHJlc3MgdGFibGUgKi8KIAlpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9CVFlQRSkgewotICAgICAgICAgICAgIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMKSB7CisJICAgICBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9JTlRFTCkgewogCiAjaWZuZGVmIENPTkZJR19GTEFTSF8xNkJJVAogCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KQEAgLTUzNyw5ICs1MzcsOSBAQAogCQlpbmZvLT5zdGFydFs3XSA9IGJhc2UgKyAweDAwMDFDMDAwOwogCQlmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKIAkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAyMDAwMCkgLSAweDAwMEUwMDAwOwotCSAgICAgICAgfQotICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgIGVsc2UgeworCQl9CisJICAgICAgIH0KKwkgICAgIGVsc2UgewogCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KIAkJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKIAkJaW5mby0+c3RhcnRbMV0gPSBiYXNlICsgMHgwMDAwODAwMDsKQEAgLTU2MSw5ICs1NjEsOSBAQAogCQlpbmZvLT5zdGFydFs3XSA9IGJhc2UgKyAweDAwMDBFMDAwOwogCQlmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKIAkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCkgLSAweDAwMDcwMDAwOwotCSAgICAgICAgfQorCQl9CiAJICAgICAgIH0KLSAgICAgICAgICAgICBlbHNlIHsKKwkgICAgIGVsc2UgewogCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KIAkJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKIAkJaW5mby0+c3RhcnRbMV0gPSBiYXNlICsgMHgwMDAwNDAwMDsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCX0gZWxzZSB7CiAJCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgdG9wIGJvb3QgYmxvY2sgdHlwZQkJKi8KIAkJaSA9IGluZm8tPnNlY3Rvcl9jb3VudCAtIDE7Ci0gICAgICAgICAgICAgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUwpIHsKKwkgICAgIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMKSB7CiAKICNpZm5kZWYgQ09ORklHX0ZMQVNIXzE2QklUCiAJCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDQwMDA7CkBAIC01OTEsNyArNTkxLDcgQEAKIAkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIGkgKiAweDAwMDIwMDAwOwogCQl9CiAKLSAgICAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgIH0gZWxzZSB7CiAKIAkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwODAwMDsKIAkJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwQzAwMDsKQEAgLTYxMiw3ICs2MTIsNyBAQAogCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgaSAqIDB4MDAwMTAwMDA7CiAJCX0KIAotICAgICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgfSBlbHNlIHsKIAogCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA0MDAwOwogCQlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA2MDAwOwpAQCAtNjcwLDcgKzY3MCw3IEBACiAKIAlpZiAoKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHx8CiAJICAgICgoaW5mby0+Zmxhc2hfaWQgPiBGTEFTSF9BTURfQ09NUCkgJiYKLSAgICAgICAgICAgICAoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSAhPSBGTEFTSF9NQU5fSU5URUwgKSApICl7CisJICAgICAoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSAhPSBGTEFTSF9NQU5fSU5URUwgKSApICl7CiAJCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0xMDAxLDEzICsxMDAxLDEzIEBACiAJCWlmKCBiYXJmICkgewogCQkJYmFyZiA+Pj0xNjsKIAkJfSBlbHNlIHsKLQkJICAgICAgICBiYXJmID0gYWRkclswXSAmIDB4MDAwMDAwM0E7CisJCQliYXJmID0gYWRkclswXSAmIDB4MDAwMDAwM0E7CiAJCX0KIAkJcHJpbnRmKCJcbkZsYXNoIHdyaXRlIGVycm9yIGF0IGFkZHJlc3MgJWx4XG4iLCh1bnNpZ25lZCBsb25nKWRlc3QpOwogCQlpZihiYXJmICYgMHgwMDAyKSBwcmludGYoIkJsb2NrIGxvY2tlZCwgbm90IGVyYXNlZC5cbiIpOwogCQlpZihiYXJmICYgMHgwMDEwKSBwcmludGYoIlByb2dyYW1taW5nIGVycm9yLlxuIik7CiAJCWlmKGJhcmYgJiAweDAwMDgpIHByaW50ZigiVnBwIExvdyBlcnJvci5cbiIpOwotCSAgCXJldHVybigyKTsKKwkJcmV0dXJuKDIpOwogCX0KIAogCkBAIC0xMDQwLDcgKzEwNDAsNyBAQAogCWFkZHJbMHgwNTU1XSA9IDB4MDBBMDsKICAgICAgfSBlbHNlIHsKIAkvKiBpbnRlbCBzdHVmZiAqLwotICAgICAgICAqYWRkciA9IDB4MDBEMDsKKwkqYWRkciA9IDB4MDBEMDsKIAkqYWRkciA9IDB4MDA0MDsKICAgICAgfQogCSooKHZ1X3Nob3J0ICopZGVzdCkgPSBkYXRhOwpAQCAtMTA1Myw3ICsxMDUzLDcgQEAKIAlzdGFydCA9IGdldF90aW1lciAoMCk7CiAKICAgICAgaWYoaW5mby0+Zmxhc2hfaWQgPCBGTEFTSF9BTURfQ09NUCkgewotICAgICAgICAgIC8qIEFNRCBzdHVmZiAqLworCSAgLyogQU1EIHN0dWZmICovCiAJd2hpbGUgKCgqKCh2dV9zaG9ydCAqKWRlc3QpICYgMHgwMDgwKSAhPSAoZGF0YSAmIDB4MDA4MCkpIHsKIAkJaWYgKGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgewogCQkJcmV0dXJuICgxKTsKQEAgLTEwNzIsNyArMTA3Miw3IEBACiAJCWlmKGJhcmYgJiAweDAwMDIpIHByaW50ZigiQmxvY2sgbG9ja2VkLCBub3QgZXJhc2VkLlxuIik7CiAJCWlmKGJhcmYgJiAweDAwMTApIHByaW50ZigiUHJvZ3JhbW1pbmcgZXJyb3IuXG4iKTsKIAkJaWYoYmFyZiAmIDB4MDAwOCkgcHJpbnRmKCJWcHAgTG93IGVycm9yLlxuIik7Ci0JICAJcmV0dXJuKDIpOworCQlyZXR1cm4oMik7CiAJfQogCSphZGRyID0gMHgwMEIwOwogCSphZGRyID0gMHgwMDcwOwpAQCAtMTA5Myw0ICsxMDkzLDMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzdGVlbTE5MmUvdS1ib290LmxkcyBiL2JvYXJkL2VzdGVlbTE5MmUvdS1ib290LmxkcwppbmRleCBmZmU3NDk1Li43MTdjODk1IDEwMDY0NAotLS0gYS9ib2FyZC9lc3RlZW0xOTJlL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXN0ZWVtMTkyZS91LWJvb3QubGRzCkBAIC0xMDksNiArMTA5LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMzEsNCArMTM2LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXR4MDk0L01ha2VmaWxlIGIvYm9hcmQvZXR4MDk0L01ha2VmaWxlCmluZGV4IGVmMTczZDAuLjEzY2U5ZmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V0eDA5NC9NYWtlZmlsZQorKysgYi9ib2FyZC9ldHgwOTQvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2V0eDA5NC91LWJvb3QubGRzIGIvYm9hcmQvZXR4MDk0L3UtYm9vdC5sZHMKaW5kZXggMmZkMTVjOS4uM2QyMDJlMyAxMDA2NDQKLS0tIGEvYm9hcmQvZXR4MDk0L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXR4MDk0L3UtYm9vdC5sZHMKQEAgLTExMSw2ICsxMTEsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzMyw0ICsxMzgsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9ldHgwOTQvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2V0eDA5NC91LWJvb3QubGRzLmRlYnVnCmluZGV4IDE3ZWMzNzQuLjdjZDY4MDkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V0eDA5NC91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL2V0eDA5NC91LWJvb3QubGRzLmRlYnVnCkBAIC0xMTMsNiArMTEzLDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMzUsNCArMTQwLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvTWFrZWZpbGUgYi9ib2FyZC9ldmI2NDI2MC9NYWtlZmlsZQppbmRleCAzMWUyNGRmLi5jNDkzZDZjIDEwMDY0NAotLS0gYS9ib2FyZC9ldmI2NDI2MC9NYWtlZmlsZQorKysgYi9ib2FyZC9ldmI2NDI2MC9NYWtlZmlsZQpAQCAtMzIsNyArMzIsNyBAQAogCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9ldmI2NDI2MC9ldGguYyBiL2JvYXJkL2V2YjY0MjYwL2V0aC5jCmluZGV4IDc2Y2YzOGEuLjhiM2EzNTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V2YjY0MjYwL2V0aC5jCisrKyBiL2JvYXJkL2V2YjY0MjYwL2V0aC5jCkBAIC0xMTcsMTIgKzExNywxMiBAQAogICAgIHByaW50ZigiU01JIGludGVycnVwdDogIik7CiAKICAgICBpZihpY3ImMHgyMDAwMDAwMCkgewotICAgIAlwcmludGYoIlNNSSBkb25lXG4iKTsKKwlwcmludGYoIlNNSSBkb25lXG4iKTsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmKGljciYweDEwMDAwMDAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBwc3I7CisJdW5zaWduZWQgaW50IHBzcjsKIAlwc3I9R1RSRUdSRUFEKEVUSEVSTkVUMF9QT1JUX1NUQVRVU19SRUdJU1RFUiArIHAtPnJlZ19iYXNlKTsKICNpZmRlZiBERUJVRwogCXByaW50ZigiUEhZIHN0YXRlIGNoYW5nZTpcbiIKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiAjaWZkZWYgQ09ORklHX0lOVEVMX0xYVDk3WCAvKiBub24tc3RhbmRhcmQgbWlpIHJlZyAoaW50ZWwgbHh0OTcyYSkgKi8KIAl7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IG1paV8xMTsKKwl1bnNpZ25lZCBzaG9ydCBtaWlfMTE7CiAJbWlpXzExPW1paXBoeV9yZWFkX3JldChldGhlcl9wb3J0X3BoeV9hZGRyW3AtPmRldl0sMHgxMSk7CiAKIAlwcmludGYoIiBtaWk6JXM6JXM6JXM6JXMgJXM6JXMgJXNcbiIsCkBAIC0zODEsNyArMzgxLDcgQEAKIGd0NjQyNnhfZHVtcF9taWkoYmRfdCAqYmlzLCB1bnNpZ25lZCBzaG9ydCBwaHkpCiB7CiAJcHJpbnRmKCJtaWkgcmVnIDAgLSAzOiAgICUwNHggJTA0eCAlMDR4ICUwNHhcbiIsCi0gCQltaWlwaHlfcmVhZF9yZXQocGh5LCAweDApLAorCQltaWlwaHlfcmVhZF9yZXQocGh5LCAweDApLAogCQltaWlwaHlfcmVhZF9yZXQocGh5LCAweDEpLAogCQltaWlwaHlfcmVhZF9yZXQocGh5LCAweDIpLAogCQltaWlwaHlfcmVhZF9yZXQocGh5LCAweDMpCmRpZmYgLS1naXQgYS9ib2FyZC9ldmI2NDI2MC9ldGhfYWRkcnRibC5jIGIvYm9hcmQvZXZiNjQyNjAvZXRoX2FkZHJ0YmwuYwppbmRleCBlYTQ5MjVhLi5lZjQ2M2MzIDEwMDY0NAotLS0gYS9ib2FyZC9ldmI2NDI2MC9ldGhfYWRkcnRibC5jCisrKyBiL2JvYXJkL2V2YjY0MjYwL2V0aF9hZGRydGJsLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAl0YWJsZUJhc2UgPSAodW5zaWduZWQgaW50KWFkZHJlc3NUYWJsZUJhc2VbcG9ydF07CiAJLyogd2UgZ2V0IGNhbGxlZCBmb3IgZXZlcnkgcHJvYmUsIHNvIG9ubHkgZG8gdGhpcyBvbmNlICovCiAJaWYgKCAhdGFibGVCYXNlICkgewotICAgIAlpbnQgYnl0ZXMgPSBoYXNoTGVuZ3RoW2hhc2hTaXplU2VsZWN0b3JdICogc2l6ZW9mKGFkZHJUYmxFbnRyeSk7CisJaW50IGJ5dGVzID0gaGFzaExlbmd0aFtoYXNoU2l6ZVNlbGVjdG9yXSAqIHNpemVvZihhZGRyVGJsRW50cnkpOwogCiAJCXRhYmxlQmFzZSA9ICh1bnNpZ25lZCBpbnQpcmVhbEFkZHJUYWJsZUJhc2VbcG9ydF0gPSBtYWxsb2MoYnl0ZXMrNjQpOwogCkBAIC02MiwxMiArNjIsMTIgQEAKIAkJCXJldHVybiAwOwogCQl9CiAKLSAgICAJLyogYWxpZ24gdG8gb2N0YWwgYnl0ZSAqLworCS8qIGFsaWduIHRvIG9jdGFsIGJ5dGUgKi8KIAkgICAgaWYodGFibGVCYXNlJjYzKSB0YWJsZUJhc2U9KHRhYmxlQmFzZSs2MykgJiB+NjM7CiAKLSAgICAJYWRkcmVzc1RhYmxlSGFzaE1vZGVbcG9ydF0gPSBoYXNoTW9kZTsKKwlhZGRyZXNzVGFibGVIYXNoTW9kZVtwb3J0XSA9IGhhc2hNb2RlOwogCSAgICBhZGRyZXNzVGFibGVIYXNoU2l6ZVtwb3J0XSA9IGhhc2hTaXplU2VsZWN0b3I7Ci0gICAgCWFkZHJlc3NUYWJsZUJhc2VbcG9ydF0gPSAoYWRkclRibEVudHJ5ICopdGFibGVCYXNlOworCWFkZHJlc3NUYWJsZUJhc2VbcG9ydF0gPSAoYWRkclRibEVudHJ5ICopdGFibGVCYXNlOwogCiAJICAgIG1lbXNldCgodm9pZCAqKXRhYmxlQmFzZSwwLGJ5dGVzKTsKIAl9CkBAIC0xMDUsNDAgKzEwNSw0MCBAQAogICAgIGFkZHJMID0gTklCQkxFX1NXQVBQSU5HXzMyX0JJVCggbWFjTCApOwogCiAgICAgYWRkckhTd2FwcGVkID0gICBGTElQXzRfQklUUyggIGFkZHJIICAgICAgICAmIDB4ZiApCi0gICAgICAgICAgICAgICAgICsgKChGTElQXzRfQklUUyggKGFkZHJIID4+ICA0KSAmIDB4ZikpIDw8ICA0KQotICAgICAgICAgICAgICAgICArICgoRkxJUF80X0JJVFMoIChhZGRySCA+PiAgOCkgJiAweGYpKSA8PCAgOCkKLSAgICAgICAgICAgICAgICAgKyAoKEZMSVBfNF9CSVRTKCAoYWRkckggPj4gMTIpICYgMHhmKSkgPDwgMTIpOworCQkgKyAoKEZMSVBfNF9CSVRTKCAoYWRkckggPj4gIDQpICYgMHhmKSkgPDwgIDQpCisJCSArICgoRkxJUF80X0JJVFMoIChhZGRySCA+PiAgOCkgJiAweGYpKSA8PCAgOCkKKwkJICsgKChGTElQXzRfQklUUyggKGFkZHJIID4+IDEyKSAmIDB4ZikpIDw8IDEyKTsKIAogICAgIGFkZHJMU3dhcHBlZCA9ICAgRkxJUF80X0JJVFMoICBhZGRyTCAgICAgICAgJiAweGYgKQotICAgICAgICAgICAgICAgICArICgoRkxJUF80X0JJVFMoIChhZGRyTCA+PiAgNCkgJiAweGYpKSA8PCAgNCkKLSAgICAgICAgICAgICAgICAgKyAoKEZMSVBfNF9CSVRTKCAoYWRkckwgPj4gIDgpICYgMHhmKSkgPDwgIDgpCi0gICAgICAgICAgICAgICAgICsgKChGTElQXzRfQklUUyggKGFkZHJMID4+IDEyKSAmIDB4ZikpIDw8IDEyKQotICAgICAgICAgICAgICAgICArICgoRkxJUF80X0JJVFMoIChhZGRyTCA+PiAxNikgJiAweGYpKSA8PCAxNikKLSAgICAgICAgICAgICAgICAgKyAoKEZMSVBfNF9CSVRTKCAoYWRkckwgPj4gMjApICYgMHhmKSkgPDwgMjApCi0gICAgICAgICAgICAgICAgICsgKChGTElQXzRfQklUUyggKGFkZHJMID4+IDI0KSAmIDB4ZikpIDw8IDI0KQotICAgICAgICAgICAgICAgICArICgoRkxJUF80X0JJVFMoIChhZGRyTCA+PiAyOCkgJiAweGYpKSA8PCAyOCk7CisJCSArICgoRkxJUF80X0JJVFMoIChhZGRyTCA+PiAgNCkgJiAweGYpKSA8PCAgNCkKKwkJICsgKChGTElQXzRfQklUUyggKGFkZHJMID4+ICA4KSAmIDB4ZikpIDw8ICA4KQorCQkgKyAoKEZMSVBfNF9CSVRTKCAoYWRkckwgPj4gMTIpICYgMHhmKSkgPDwgMTIpCisJCSArICgoRkxJUF80X0JJVFMoIChhZGRyTCA+PiAxNikgJiAweGYpKSA8PCAxNikKKwkJICsgKChGTElQXzRfQklUUyggKGFkZHJMID4+IDIwKSAmIDB4ZikpIDw8IDIwKQorCQkgKyAoKEZMSVBfNF9CSVRTKCAoYWRkckwgPj4gMjQpICYgMHhmKSkgPDwgMjQpCisJCSArICgoRkxJUF80X0JJVFMoIChhZGRyTCA+PiAyOCkgJiAweGYpKSA8PCAyOCk7CiAKICAgICBhZGRySCA9IGFkZHJIU3dhcHBlZDsKICAgICBhZGRyTCA9IGFkZHJMU3dhcHBlZDsKIAogICAgIGlmKCBoYXNoX21vZGUgPT0gMCApICB7Ci0gICAgICAgIGFkZHIwID0gIChhZGRyTCA+PiAgMikgJiAweDAzZjsKLSAgICAgICAgYWRkcjEgPSAgKGFkZHJMICAgICAgICAmIDB4MDAzKSB8ICgoYWRkckwgPj4gOCkgJiAweDdmKSA8PCAyOwotICAgICAgICBhZGRyMiA9ICAoYWRkckwgPj4gMTUpICYgMHgxZmY7Ci0gICAgICAgIGFkZHIzID0gKChhZGRyTCA+PiAyNCkgJiAweDBmZikgfCAoKGFkZHJIICYgIDEpICAgICAgICAgPDwgOCk7CisJYWRkcjAgPSAgKGFkZHJMID4+ICAyKSAmIDB4MDNmOworCWFkZHIxID0gIChhZGRyTCAgICAgICAgJiAweDAwMykgfCAoKGFkZHJMID4+IDgpICYgMHg3ZikgPDwgMjsKKwlhZGRyMiA9ICAoYWRkckwgPj4gMTUpICYgMHgxZmY7CisJYWRkcjMgPSAoKGFkZHJMID4+IDI0KSAmIDB4MGZmKSB8ICgoYWRkckggJiAgMSkgICAgICAgICA8PCA4KTsKICAgICB9IGVsc2UgIHsKLSAgICAgICAgYWRkcjAgPSBGTElQXzZfQklUUyggICAgYWRkckwgICAgICAgICYgMHgwM2YgKTsKLSAgICAgICAgYWRkcjEgPSBGTElQXzlfQklUUyggICgoYWRkckwgPj4gIDYpICYgMHgxZmYpKTsKLSAgICAgICAgYWRkcjIgPSBGTElQXzlfQklUUyggICAoYWRkckwgPj4gMTUpICYgMHgxZmYpOwotICAgICAgICBhZGRyMyA9IEZMSVBfOV9CSVRTKCAoKChhZGRyTCA+PiAyNCkgJiAweDBmZikgfCAoKGFkZHJIICYgMHgxKSA8PCA4KSkpOworCWFkZHIwID0gRkxJUF82X0JJVFMoICAgIGFkZHJMICAgICAgICAmIDB4MDNmICk7CisJYWRkcjEgPSBGTElQXzlfQklUUyggICgoYWRkckwgPj4gIDYpICYgMHgxZmYpKTsKKwlhZGRyMiA9IEZMSVBfOV9CSVRTKCAgIChhZGRyTCA+PiAxNSkgJiAweDFmZik7CisJYWRkcjMgPSBGTElQXzlfQklUUyggKCgoYWRkckwgPj4gMjQpICYgMHgwZmYpIHwgKChhZGRySCAmIDB4MSkgPDwgOCkpKTsKICAgICB9CiAKICAgICBoYXNoUmVzdWx0ID0gKGFkZHIwIDw8IDkpIHwgKGFkZHIxIF4gYWRkcjIgXiBhZGRyMyk7CiAKICAgICBpZiggSGFzaFNpemUgPT0gXzhLX1RBQkxFICkgIHsKLSAgICAgICAgaGFzaFJlc3VsdCA9IGhhc2hSZXN1bHQgJiAweGZmZmY7CisJaGFzaFJlc3VsdCA9IGhhc2hSZXN1bHQgJiAweGZmZmY7CiAgICAgfSBlbHNlICB7Ci0gICAgICAgIGhhc2hSZXN1bHQgPSBoYXNoUmVzdWx0ICYgMHgwN2ZmOworCWhhc2hSZXN1bHQgPSBoYXNoUmVzdWx0ICYgMHgwN2ZmOwogICAgIH0KIAogICAgIHJldHVybiggaGFzaFJlc3VsdCApOwpAQCAtMTc0LDIwICsxNzQsMjAgQEAKICAgICB1MzIgICAgICAgICAgIGk7CiAKICAgICBuZXdMbyA9ICgoKG1hY0ggPj4gIDQpICYgMHhmKSA8PCAxNSkKLSAgICAgICAgICB8ICgoKG1hY0ggPj4gIDApICYgMHhmKSA8PCAxMSkKLSAgICAgICAgICB8ICgoKG1hY0ggPj4gMTIpICYgMHhmKSA8PCAgNykKLSAgICAgICAgICB8ICgoKG1hY0ggPj4gIDgpICYgMHhmKSA8PCAgMykKLSAgICAgICAgICB8ICgoKG1hY0wgPj4gMjApICYgMHgxKSA8PCAzMSkKLSAgICAgICAgICB8ICgoKG1hY0wgPj4gMTYpICYgMHhmKSA8PCAyNykKLSAgICAgICAgICB8ICgoKG1hY0wgPj4gMjgpICYgMHhmKSA8PCAyMykKLSAgICAgICAgICB8ICgoKG1hY0wgPj4gMjQpICYgMHhmKSA8PCAxOSkKLSAgICAgICAgICB8ICAgKHNraXAgPDwgU0tJUF9CSVQpICB8ICAocmQgPDwgMikgfCBWQUxJRDsKKwkgIHwgKCgobWFjSCA+PiAgMCkgJiAweGYpIDw8IDExKQorCSAgfCAoKChtYWNIID4+IDEyKSAmIDB4ZikgPDwgIDcpCisJICB8ICgoKG1hY0ggPj4gIDgpICYgMHhmKSA8PCAgMykKKwkgIHwgKCgobWFjTCA+PiAyMCkgJiAweDEpIDw8IDMxKQorCSAgfCAoKChtYWNMID4+IDE2KSAmIDB4ZikgPDwgMjcpCisJICB8ICgoKG1hY0wgPj4gMjgpICYgMHhmKSA8PCAyMykKKwkgIHwgKCgobWFjTCA+PiAyNCkgJiAweGYpIDw8IDE5KQorCSAgfCAgIChza2lwIDw8IFNLSVBfQklUKSAgfCAgKHJkIDw8IDIpIHwgVkFMSUQ7CiAKICAgICBuZXdIaSA9ICgoKG1hY0wgPj4gIDQpICYgMHhmKSA8PCAxNSkKLSAgICAgICAgICB8ICgoKG1hY0wgPj4gIDApICYgMHhmKSA8PCAxMSkKLSAgICAgICAgICB8ICgoKG1hY0wgPj4gMTIpICYgMHhmKSA8PCAgNykKLSAgICAgICAgICB8ICgoKG1hY0wgPj4gIDgpICYgMHhmKSA8PCAgMykKLSAgICAgICAgICB8ICgoKG1hY0wgPj4gMjEpICYgMHg3KSA8PCAgMCk7CisJICB8ICgoKG1hY0wgPj4gIDApICYgMHhmKSA8PCAxMSkKKwkgIHwgKCgobWFjTCA+PiAxMikgJiAweGYpIDw8ICA3KQorCSAgfCAoKChtYWNMID4+ICA4KSAmIDB4ZikgPDwgIDMpCisJICB8ICgoKG1hY0wgPj4gMjEpICYgMHg3KSA8PCAgMCk7CiAKICAgICAvKgogICAgICAqIFBpY2sgdGhlIGFwcHJvcHJpYXRlIHRhYmxlLCBzdGFydCBzY2FubmluZyBmb3IgZnJlZS9yZXVzYWJsZQpAQCAtMTk1LDIyICsxOTUsMjIgQEAKICAgICAgKi8KICAgICBlbnRyeSAgPSBhZGRyZXNzVGFibGVCYXNlW3BvcnRdOwogICAgIGVudHJ5ICs9IGhhc2hUYWJsZUZ1bmN0aW9uKCBtYWNILCBtYWNMLCBhZGRyZXNzVGFibGVIYXNoU2l6ZVtwb3J0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc1RhYmxlSGFzaE1vZGVbcG9ydF0gICk7CisJCQkJCSAgICBhZGRyZXNzVGFibGVIYXNoTW9kZVtwb3J0XSAgKTsKICAgICBmb3IoIGkgPSAwOyAgaSA8IEhPUF9OVU1CRVI7ICBpKyssIGVudHJ5KysgKSAgewotICAgICAgICBpZiggIShlbnRyeS0+bG8gJiBWQUxJRCkgICAvKnx8IChlbnRyeS0+bG8gJiBTS0lQKSovICAgKSAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSAgeyAgICAgICAgICAgICAgICAgICAgLyogaWYgc2FtZSBhZGRyZXNzIHB1dCBpbiBzYW1lIHBvc2l0aW9uICovCi0gICAgICAgICAgICBpZiggICAoKGVudHJ5LT5sbyAmIDB4ZmZmZmZmZjgpID09IChuZXdMbyAmIDB4ZmZmZmZmZjgpKQotICAgICAgICAgICAgICAgICYmIChlbnRyeS0+aGkgICAgICAgICAgICAgICA9PSAgbmV3SGkpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZiggIShlbnRyeS0+bG8gJiBWQUxJRCkgICAvKnx8IChlbnRyeS0+bG8gJiBTS0lQKSovICAgKSAgeworCSAgICBicmVhazsKKwl9IGVsc2UgIHsgICAgICAgICAgICAgICAgICAgIC8qIGlmIHNhbWUgYWRkcmVzcyBwdXQgaW4gc2FtZSBwb3NpdGlvbiAqLworCSAgICBpZiggICAoKGVudHJ5LT5sbyAmIDB4ZmZmZmZmZjgpID09IChuZXdMbyAmIDB4ZmZmZmZmZjgpKQorCQkmJiAoZW50cnktPmhpICAgICAgICAgICAgICAgPT0gIG5ld0hpKSApCisJICAgIHsKKwkJICAgIGJyZWFrOworCSAgICB9CisJfQogICAgIH0KIAogICAgIGlmKCBpID09IEhPUF9OVU1CRVIgKSAgewotICAgICAgICBQUklOVEYoICJhZGRHVDY0MjYwYWRkcmVzc1RhYmxlRW50cnk6IHRhYmxlIHNlY3Rpb24gaXMgZnVsbFxuIiApOwotICAgICAgICByZXR1cm4oIEZBTFNFICk7CisJUFJJTlRGKCAiYWRkR1Q2NDI2MGFkZHJlc3NUYWJsZUVudHJ5OiB0YWJsZSBzZWN0aW9uIGlzIGZ1bGxcbiIgKTsKKwlyZXR1cm4oIEZBTFNFICk7CiAgICAgfQogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2JvYXJkL2V2YjY0MjYwL2V0aF9hZGRydGJsLmggYi9ib2FyZC9ldmI2NDI2MC9ldGhfYWRkcnRibC5oCmluZGV4IDYwMzgwYzYuLjVhNjJjNjcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V2YjY0MjYwL2V0aF9hZGRydGJsLmgKKysrIGIvYm9hcmQvZXZiNjQyNjAvZXRoX2FkZHJ0YmwuaApAQCAtMjUsMjIgKzI1LDIyIEBACiAgKiBYWFhfTUlLRSAtIHBvdGVudGlhbCBzaWduLWV4dGVuc2lvbiBidWdzIGx1cmsgaGVyZS4uLgogICovCiAjZGVmaW5lIE5JQkJMRV9TV0FQUElOR18zMl9CSVQoWCkgKCAoKChYKSAmIDB4ZjBmMGYwZjApID4+IDQpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgoKFgpICYgMHgwZjBmMGYwZikgPDwgNCkgKQorCQkJCSAgfCAoKChYKSAmIDB4MGYwZjBmMGYpIDw8IDQpICkKIAogI2RlZmluZSBOSUJCTEVfU1dBUFBJTkdfMTZfQklUKFgpICggKCgoWCkgJiAweDAwMDBmMGYwKSA+PiA0KSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKChYKSAmIDB4MDAwMDBmMGYpIDw8IDQpICkKKwkJCQkgIHwgKCgoWCkgJiAweDAwMDAwZjBmKSA8PCA0KSApCiAKICNkZWZpbmUgRkxJUF80X0JJVFMoWCkgICggKCgoWCkgJiAweDAxKSA8PCAzKSB8ICgoKFgpICYgMHgwMDIpIDw8IDEpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKCgoWCkgJiAweDA0KSA+PiAxKSB8ICgoKFgpICYgMHgwMDgpID4+IDMpICkKKwkJCXwgKCgoWCkgJiAweDA0KSA+PiAxKSB8ICgoKFgpICYgMHgwMDgpID4+IDMpICkKIAogI2RlZmluZSBGTElQXzZfQklUUyhYKSAgKCAoKChYKSAmIDB4MDEpIDw8IDUpIHwgKCgoWCkgJiAweDAyMCkgPj4gNSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgfCAoKChYKSAmIDB4MDIpIDw8IDMpIHwgKCgoWCkgJiAweDAxMCkgPj4gMykgXAotICAgICAgICAgICAgICAgICAgICAgICAgfCAoKChYKSAmIDB4MDQpIDw8IDEpIHwgKCgoWCkgJiAweDAwOCkgPj4gMSkgKQorCQkJfCAoKChYKSAmIDB4MDIpIDw8IDMpIHwgKCgoWCkgJiAweDAxMCkgPj4gMykgXAorCQkJfCAoKChYKSAmIDB4MDQpIDw8IDEpIHwgKCgoWCkgJiAweDAwOCkgPj4gMSkgKQogCiAjZGVmaW5lIEZMSVBfOV9CSVRTKFgpICAoICgoKFgpICYgMHgwMSkgPDwgOCkgfCAoKChYKSAmIDB4MTAwKSA+PiA4KSBcCi0gICAgICAgICAgICAgICAgICAgICAgICB8ICgoKFgpICYgMHgwMikgPDwgNikgfCAoKChYKSAmIDB4MDgwKSA+PiA2KSBcCi0gICAgICAgICAgICAgICAgICAgICAgICB8ICgoKFgpICYgMHgwNCkgPDwgNCkgfCAoKChYKSAmIDB4MDQwKSA+PiA0KSBcCi0gICAgICAgICB8ICgoWCkgJiAweDEwKSB8ICgoKFgpICYgMHgwOCkgPDwgMikgfCAoKChYKSAmIDB4MDIwKSA+PiAyKSApCisJCQl8ICgoKFgpICYgMHgwMikgPDwgNikgfCAoKChYKSAmIDB4MDgwKSA+PiA2KSBcCisJCQl8ICgoKFgpICYgMHgwNCkgPDwgNCkgfCAoKChYKSAmIDB4MDQwKSA+PiA0KSBcCisJIHwgKChYKSAmIDB4MTApIHwgKCgoWCkgJiAweDA4KSA8PCAyKSB8ICgoKFgpICYgMHgwMjApID4+IDIpICkKIAogLyoKICAqIFY6IHZhbHVlIHdlJ3JlIG9wZXJhdGluZyBvbgpAQCAtNjQsNyArNjQsNiBAQAogI2RlZmluZSBEQ0FDSEVfRkxVU0hfTl9TWU5DKCBBLCBOICkgICAgICAgIGZsdXNoX2RjYWNoZV9yYW5nZSggKEEpLCAoKEEpKyhOKSkgKQogCiAKLQogdHlwZWRlZiBzdHJ1Y3QgYWRkcmVzc1RhYmxlRW50cnlTdHJ1Y3QgIHsKICAgICB1MzIgaGk7CiAgICAgdTMyIGxvOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvZXZiNjQyNjAuYyBiL2JvYXJkL2V2YjY0MjYwL2V2YjY0MjYwLmMKaW5kZXggMDI0MzFkYS4uZmQwOTY5MCAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNjQyNjAvZXZiNjQyNjAuYworKysgYi9ib2FyZC9ldmI2NDI2MC9ldmI2NDI2MC5jCkBAIC0yMTgsMTggKzIxOCwxOCBAQAogCiAJLyogLS0tLS0gREVWSUNFIEJVUyBTRVRUSU5HUyAtLS0tLS0gKi8KIAotICAgICAgICAvKgorCS8qCiAJICogRVZCCi0gICAgICAgICAqIDAgLSBTUkFNCi0gICAgICAgICAqIDEgLSBSVEMKLSAgICAgICAgICogMiAtIFVBUlQKLSAgICAgICAgICogMyAtIEZsYXNoCi0gICAgICAgICAqIGJvb3QgLSBCb290Q1MKKwkgKiAwIC0gU1JBTQorCSAqIDEgLSBSVEMKKwkgKiAyIC0gVUFSVAorCSAqIDMgLSBGbGFzaAorCSAqIGJvb3QgLSBCb290Q1MKIAkgKgogCSAqIFp1bWEKIAkgKiAwIC0gRmxhc2gKIAkgKiBib290IC0gQm9vdENTCi0gICAgICAgICAqLworCSAqLwogCiAJLyoKIAkgKiB0aGUgZHVhbCA3NDUwIG1vZHVsZSByZXF1aXJlcyBidXJzdCBhY2Nlc3MgdG8gdGhlIGJvb3QKQEAgLTM1Miw0MCArMzUyLDQwIEBACiBkZWJ1Z19sZWQoaW50IGxlZCwgaW50IG1vZGUpCiB7CiAjaWZuZGVmIENPTkZJR19aVU1BX1YyCi0gICAgICAgIHZvbGF0aWxlIGludCAqYWRkciA9IE5VTEw7Ci0gICAgICAgIGludCBkdW1teTsKKwl2b2xhdGlsZSBpbnQgKmFkZHIgPSBOVUxMOworCWludCBkdW1teTsKIAotICAgICAgICBpZiAobW9kZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChsZWQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyID0gKGludCAqKSgodW5zaWduZWQgaW50KUNGR19ERVYxX1NQQUNFIHwgMHgwODAwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwlpZiAobW9kZSA9PSAxKSB7CisJCXN3aXRjaCAobGVkKSB7CisJCWNhc2UgMDoKKwkJCWFkZHIgPSAoaW50ICopKCh1bnNpZ25lZCBpbnQpQ0ZHX0RFVjFfU1BBQ0UgfCAweDA4MDAwKTsKKwkJCWJyZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkciA9IChpbnQgKikoKHVuc2lnbmVkIGludClDRkdfREVWMV9TUEFDRSB8IDB4MGMwMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgMToKKwkJCWFkZHIgPSAoaW50ICopKCh1bnNpZ25lZCBpbnQpQ0ZHX0RFVjFfU1BBQ0UgfCAweDBjMDAwKTsKKwkJCWJyZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkciA9IChpbnQgKikoKHVuc2lnbmVkIGludClDRkdfREVWMV9TUEFDRSB8IDB4MTAwMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gMCkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobGVkKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkciA9IChpbnQgKikoKHVuc2lnbmVkIGludClDRkdfREVWMV9TUEFDRSB8IDB4MTQwMDApOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgMjoKKwkJCWFkZHIgPSAoaW50ICopKCh1bnNpZ25lZCBpbnQpQ0ZHX0RFVjFfU1BBQ0UgfCAweDEwMDAwKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChtb2RlID09IDApIHsKKwkJc3dpdGNoIChsZWQpIHsKKwkJY2FzZSAwOgorCQkJYWRkciA9IChpbnQgKikoKHVuc2lnbmVkIGludClDRkdfREVWMV9TUEFDRSB8IDB4MTQwMDApOworCQkJYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyID0gKGludCAqKSgodW5zaWduZWQgaW50KUNGR19ERVYxX1NQQUNFIHwgMHgxODAwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAxOgorCQkJYWRkciA9IChpbnQgKikoKHVuc2lnbmVkIGludClDRkdfREVWMV9TUEFDRSB8IDB4MTgwMDApOworCQkJYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyID0gKGludCAqKSgodW5zaWduZWQgaW50KUNGR19ERVYxX1NQQUNFIHwgMHgxYzAwMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkJY2FzZSAyOgorCQkJYWRkciA9IChpbnQgKikoKHVuc2lnbmVkIGludClDRkdfREVWMV9TUEFDRSB8IDB4MWMwMDApOworCQkJYnJlYWs7CisJCX0KKwl9CiAJV1JJVEVfQ0hBUihhZGRyLCAwKTsKLSAgICAgICAgZHVtbXkgPSAqYWRkcjsKKwlkdW1teSA9ICphZGRyOwogI2VuZGlmIC8qIENPTkZJR19aVU1BX1YyICovCiB9CiAKQEAgLTQzNiw0ICs0MzYsMyBAQAogICAgIHByaW50ZigiIEJPT1Q6ICBiYXNlIC0gMHglMDh4XHRzaXplIC0gJWRNIGJ5dGVzXHR3aWR0aCAtICVkIGJpdHNcbiIsCiAJICAgYmFzZSwgc2l6ZT4+MjAsIHdpZHRoKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvZmxhc2guYyBiL2JvYXJkL2V2YjY0MjYwL2ZsYXNoLmMKaW5kZXggMmQyYmYxYy4uYzg5NzM5MyAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNjQyNjAvZmxhc2guYworKysgYi9ib2FyZC9ldmI2NDI2MC9mbGFzaC5jCkBAIC0yNDAsOCArMjQwLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGZsYXNoX2NtZChpbnQgd2lkdGgsIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGNoYXIgY21kKQogewotICAgICAgICAvKiBzdXBwb3J0cyAxeDgsIDF4MTYsIGFuZCAyeDE2ICovCi0gICAgICAgIC8qIDJ4OCBhbmQgNHg4IGFyZSBub3Qgc3VwcG9ydGVkICovCisJLyogc3VwcG9ydHMgMXg4LCAxeDE2LCBhbmQgMngxNiAqLworCS8qIDJ4OCBhbmQgNHg4IGFyZSBub3Qgc3VwcG9ydGVkICovCiAJaWYod2lkdGg9PTQpIHsKIAkgICAgLyogYXNzdW1pbmcgY2hpcHMgYXJlIGluIDE2IGJpdCBtb2RlICovCiAJICAgIC8qIDJ4MTYgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2V2YjY0MjYwL21lbW9yeS5jIGIvYm9hcmQvZXZiNjQyNjAvbWVtb3J5LmMKaW5kZXggOWQzMDFmOC4uZTMzOTg1NCAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNjQyNjAvbWVtb3J5LmMKKysrIGIvYm9hcmQvZXZiNjQyNjAvbWVtb3J5LmMKQEAgLTEwMyw5ICsxMDMsOSBAQAogICAgIEdUX1JFR19SRUFEKGhpZ2hBZGRyZXNzLCZoaWdoVmFsdWUpOwogICAgIGhpZ2hWYWx1ZSA9IChoaWdoVmFsdWUgKyAxKSA8PCAyMDsKICAgICBpZihiYXNlID4gaGlnaFZhbHVlKQotICAgICAgICBzaXplPTA7CisJc2l6ZT0wOwogICAgIGVsc2UKLSAgICAgICAgc2l6ZSA9IGhpZ2hWYWx1ZSAtIGJhc2U7CisJc2l6ZSA9IGhpZ2hWYWx1ZSAtIGJhc2U7CiAgICAgcmV0dXJuIHNpemU7CiB9CiAKQEAgLTEyNywxNiArMTI3LDE2IEBACiAgICAgR1RfUkVHX1JFQUQoaGlnaEFkZHJlc3MsJmhpZ2hWYWx1ZSk7CiAgICAgaWYgKGhpZ2hWYWx1ZSA9PSAweGZmZikKICAgICB7Ci0gICAgICAgIHNpemUgPSAofmJhc2UpICsgMTsJLyogd2hhdCB0aGUgaGVjayBpcyB0aGlzPyAqLwotICAgICAgICByZXR1cm4gc2l6ZTsKKwlzaXplID0gKH5iYXNlKSArIDE7CS8qIHdoYXQgdGhlIGhlY2sgaXMgdGhpcz8gKi8KKwlyZXR1cm4gc2l6ZTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICBoaWdoVmFsdWUgPSAoaGlnaFZhbHVlICsgMSkgPDwgMjA7CisJaGlnaFZhbHVlID0gKGhpZ2hWYWx1ZSArIDEpIDw8IDIwOwogCiAgICAgaWYoYmFzZSA+IGhpZ2hWYWx1ZSkKLSAgICAgICAgc2l6ZT0wOworCXNpemU9MDsKICAgICBlbHNlCi0gICAgICAgIHNpemUgPSBoaWdoVmFsdWUgLSBiYXNlOworCXNpemUgPSBoaWdoVmFsdWUgLSBiYXNlOwogICAgIHJldHVybiBzaXplOwogfQogCkBAIC0xNTksMTYgKzE1OSwxNiBAQAogICAgIHdpZHRoID0gIChyZWdWYWx1ZSAmIDB4MDAzMDAwMDApID4+IDIwOwogICAgIHN3aXRjaCAod2lkdGgpCiAgICAgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHJldHVybiA0OwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICByZXR1cm4gODsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAwOworCWNhc2UgMDoKKwkgICAgcmV0dXJuIDE7CisJY2FzZSAxOgorCSAgICByZXR1cm4gMjsKKwljYXNlIDI6CisJICAgIHJldHVybiA0OworCWNhc2UgMzoKKwkgICAgcmV0dXJuIDg7CisJZGVmYXVsdDoKKwkgICAgcmV0dXJuIDA7CiAgICAgfQogfQogCkBAIC0yNjUsMjMgKzI2NSwyMyBAQAogKiBSZXR1cm5zOiBmYWxzZSBpZiBvbmUgb2YgdGhlIHBhcmFtZXRlcnMgaXMgd3JvbmcgYW5kIHRydWUgZWxzZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogYm9vbCBtZW1vcnlTZXRQcm90ZWN0UmVnaW9uKE1FTU9SWV9QUk9URUNUX1JFR0lPTiByZWdpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX0FDQ0VTUyBtZW1BY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX0FDQ0VTU19XUklURSBtZW1Xcml0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfQ0FDSEVfUFJPVEVDVCBjYWNoZVByb3RlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2VBZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWdpb25MZW5ndGgpCisJCQkgICAgTUVNT1JZX0FDQ0VTUyBtZW1BY2Nlc3MsCisJCQkgICAgTUVNT1JZX0FDQ0VTU19XUklURSBtZW1Xcml0ZSwKKwkJCSAgICBNRU1PUllfQ0FDSEVfUFJPVEVDVCBjYWNoZVByb3RlY3Rpb24sCisJCQkgICAgdW5zaWduZWQgaW50IGJhc2VBZGRyZXNzLAorCQkJICAgIHVuc2lnbmVkIGludCByZWdpb25MZW5ndGgpCiB7CiAgICAgdW5zaWduZWQgaW50IHByb3RlY3RIaWdoID0gYmFzZUFkZHJlc3MgKyByZWdpb25MZW5ndGg7CiAKICAgICBpZihyZWdpb25MZW5ndGggPT0gMCkgLyogY2xvc2luZyB0aGUgcmVnaW9uICovCiAgICAgewotICAgICAgICBHVF9SRUdfV1JJVEUoQ1BVX0xPV19QUk9URUNUX0FERFJFU1NfMCArIDB4MTAqcmVnaW9uLDB4MDAwMGZmZmYpOwotICAgICAgICBHVF9SRUdfV1JJVEUoQ1BVX0hJR0hfUFJPVEVDVF9BRERSRVNTXzAgKyAweDEwKnJlZ2lvbiwwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisJR1RfUkVHX1dSSVRFKENQVV9MT1dfUFJPVEVDVF9BRERSRVNTXzAgKyAweDEwKnJlZ2lvbiwweDAwMDBmZmZmKTsKKwlHVF9SRUdfV1JJVEUoQ1BVX0hJR0hfUFJPVEVDVF9BRERSRVNTXzAgKyAweDEwKnJlZ2lvbiwwKTsKKwlyZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgYmFzZUFkZHJlc3MgPSAgKGJhc2VBZGRyZXNzICYgMHhmZmYwMDAwMCkgPj4gMjA7CiAgICAgYmFzZUFkZHJlc3MgPSBiYXNlQWRkcmVzcyB8IG1lbUFjY2VzcyA8PCAxNiB8ICBtZW1Xcml0ZSA8PCAxNwotICAgICAgICAgICAgICAgICAgICAgfCBjYWNoZVByb3RlY3Rpb24gPDwgMTg7CisJCSAgICAgfCBjYWNoZVByb3RlY3Rpb24gPDwgMTg7CiAgICAgR1RfUkVHX1dSSVRFKENQVV9MT1dfUFJPVEVDVF9BRERSRVNTXzAgKyAweDEwKnJlZ2lvbixiYXNlQWRkcmVzcyk7CiAgICAgcHJvdGVjdEhpZ2ggPSAocHJvdGVjdEhpZ2ggJiAweGZmZjAwMDAwKSA+PiAyMDsKICAgICBHVF9SRUdfV1JJVEUoQ1BVX0hJR0hfUFJPVEVDVF9BRERSRVNTXzAgKyAweDEwKnJlZ2lvbixwcm90ZWN0SGlnaCAtIDEpOwpAQCAtMzA0LDkgKzMwNCw5IEBACiAqIFJldHVybnM6IGZhbHNlIGlmIG9uZSBvZiB0aGUgcGFyYW1ldGVycyBpcyB3cm9uZyBhbmQgdHJ1ZSBlbHNlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBib29sIG1lbW9yeVNldFJlZ2lvblNub29wTW9kZShNRU1PUllfU05PT1BfUkVHSU9OIHJlZ2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWV9TTk9PUF9UWVBFIHNub29wVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWdpb25MZW5ndGgpCisJCQkgICAgICBNRU1PUllfU05PT1BfVFlQRSBzbm9vcFR5cGUsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgYmFzZUFkZHJlc3MsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVnaW9uTGVuZ3RoKQogewogICAgIHVuc2lnbmVkIGludCBzbm9vcFhiYXNlQWRkcmVzczsKICAgICB1bnNpZ25lZCBpbnQgc25vb3BYdG9wQWRkcmVzczsKQEAgLTMxNCwxNCArMzE0LDE0IEBACiAgICAgdW5zaWduZWQgaW50IHNub29wSGlnaCA9IGJhc2VBZGRyZXNzICsgcmVnaW9uTGVuZ3RoOwogCiAgICAgaWYoIChyZWdpb24gPiBNRU1fU05PT1BfUkVHSU9OMykgfHwgKHNub29wVHlwZSA+IE1FTV9TTk9PUF9XQikgKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogICAgIHNub29wWGJhc2VBZGRyZXNzID0gU05PT1BfQkFTRV9BRERSRVNTXzAgKyAweDEwICogcmVnaW9uOwogICAgIHNub29wWHRvcEFkZHJlc3MgPSBTTk9PUF9UT1BfQUREUkVTU18wICsgMHgxMCAqIHJlZ2lvbjsKICAgICBpZihyZWdpb25MZW5ndGggPT0gMCkgLyogY2xvc2luZyB0aGUgcmVnaW9uICovCiAgICAgewotICAgICAgICBHVF9SRUdfV1JJVEUoc25vb3BYYmFzZUFkZHJlc3MsMHgwMDAwZmZmZik7Ci0gICAgICAgIEdUX1JFR19XUklURShzbm9vcFh0b3BBZGRyZXNzLDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlHVF9SRUdfV1JJVEUoc25vb3BYYmFzZUFkZHJlc3MsMHgwMDAwZmZmZik7CisJR1RfUkVHX1dSSVRFKHNub29wWHRvcEFkZHJlc3MsMCk7CisJcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGJhc2VBZGRyZXNzID0gYmFzZUFkZHJlc3MgJiAweGZmZmYwMDAwOwogICAgIGRhdGEgPSAoYmFzZUFkZHJlc3MgPj4gMTYpIHwgc25vb3BUeXBlIDw8IDE2OwpAQCAtMzg1LDIwICszODUsMjAgQEAKICAgICBzd2l0Y2ggKGNhbGNEYXRhKQogICAgIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGRldmljZVBhcmFtIC0+IGRldmljZVdpZHRoID0gMTsgICAgICAgICAvKiBvbmUgQnl0ZSAtIDgtYml0ICovCi0gICAgICAgIGJyZWFrOworCWRldmljZVBhcmFtIC0+IGRldmljZVdpZHRoID0gMTsgICAgICAgICAvKiBvbmUgQnl0ZSAtIDgtYml0ICovCisJYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBkZXZpY2VQYXJhbSAtPiBkZXZpY2VXaWR0aCA9IDI7ICAgICAgICAgLyogdHdvIEJ5dGVzIC0gMTYtYml0ICovCi0gICAgICAgIGJyZWFrOworCWRldmljZVBhcmFtIC0+IGRldmljZVdpZHRoID0gMjsgICAgICAgICAvKiB0d28gQnl0ZXMgLSAxNi1iaXQgKi8KKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGRldmljZVBhcmFtIC0+IGRldmljZVdpZHRoID0gNDsgICAgICAgICAvKiBmb3VyIEJ5dGVzIC0gMzItYml0ICovCi0gICAgICAgIGJyZWFrOworCWRldmljZVBhcmFtIC0+IGRldmljZVdpZHRoID0gNDsgICAgICAgICAvKiBmb3VyIEJ5dGVzIC0gMzItYml0ICovCisJYnJlYWs7CiAgICAgY2FzZSAzOgotICAgICAgICBkZXZpY2VQYXJhbSAtPiBkZXZpY2VXaWR0aCA9IDg7ICAgICAgICAgLyogZWlnaHQgQnl0ZXMgLSA2NC1iaXQgKi8KLSAgICAgICAgYnJlYWs7CisJZGV2aWNlUGFyYW0gLT4gZGV2aWNlV2lkdGggPSA4OyAgICAgICAgIC8qIGVpZ2h0IEJ5dGVzIC0gNjQtYml0ICovCisJYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgZGV2aWNlUGFyYW0gLT4gZGV2aWNlV2lkdGggPSAxOwotICAgICAgICBicmVhazsKKwlkZXZpY2VQYXJhbSAtPiBkZXZpY2VXaWR0aCA9IDE7CisJYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDE5LDM4ICs0MTksMzggQEAKIAogICAgIGlmKChkZXZpY2VQYXJhbSAtPiB0dXJuT2ZmID49IDB4ZikgfHwgKGRldmljZVBhcmFtIC0+IGFjYzJGaXJzdCA+PSAweDFmKSB8fAogICAgICAgIChkZXZpY2VQYXJhbSAtPiBhY2MyTmV4dCA+PSAweDFmKSB8fCAoZGV2aWNlUGFyYW0gLT4gYWxlMldyID49IDB4ZikgfHwKLSAgICAgICAgKGRldmljZVBhcmFtIC0+IHdyTG93ID49IDB4ZikgfHwgKGRldmljZVBhcmFtIC0+IHdySGlnaCA+PSAweGYpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJKGRldmljZVBhcmFtIC0+IHdyTG93ID49IDB4ZikgfHwgKGRldmljZVBhcmFtIC0+IHdySGlnaCA+PSAweGYpKQorCXJldHVybiBmYWxzZTsKICAgICB2YWx1ZUZvclJlZyA9ICgoKGRldmljZVBhcmFtIC0+IHR1cm5PZmYpICYgMHg3KSB8Ci0gICAgICAgICAgICAgICAgICAgKCgoZGV2aWNlUGFyYW0gLT4gdHVybk9mZikgJiAweDgpIDw8IDE5KSB8Ci0gICAgICAgICAgICAgICAgICAgKCgoZGV2aWNlUGFyYW0gLT4gYWNjMkZpcnN0KSAmIDB4ZikgPDwgMykgfAotICAgICAgICAgICAgICAgICAgICgoKGRldmljZVBhcmFtIC0+IGFjYzJGaXJzdCkgJiAweDEwKSA8PCAxOSkgfAotICAgICAgICAgICAgICAgICAgICgoKGRldmljZVBhcmFtIC0+IGFjYzJOZXh0KSAmIDB4ZikgPDwgNykgfAotICAgICAgICAgICAgICAgICAgICgoKGRldmljZVBhcmFtIC0+IGFjYzJOZXh0KSAmIDB4MTApIDw8IDIwKSB8Ci0gICAgICAgICAgICAgICAgICAgKCgoZGV2aWNlUGFyYW0gLT4gYWxlMldyKSAmIDB4NykgPDwgMTEpIHwKLSAgICAgICAgICAgICAgICAgICAoKChkZXZpY2VQYXJhbSAtPiBhbGUyV3IpICYgMHhmKSA8PCAyMikgfAotICAgICAgICAgICAgICAgICAgICgoKGRldmljZVBhcmFtIC0+IHdyTG93KSAmIDB4NykgPDwgMTQpIHwKLSAgICAgICAgICAgICAgICAgICAoKChkZXZpY2VQYXJhbSAtPiB3ckxvdykgJiAweGYpIDw8IDIzKSB8Ci0gICAgICAgICAgICAgICAgICAgKCgoZGV2aWNlUGFyYW0gLT4gd3JIaWdoKSAmIDB4NykgPDwgMTcpIHwKLSAgICAgICAgICAgICAgICAgICAoKChkZXZpY2VQYXJhbSAtPiB3ckhpZ2gpICYgMHhmKSA8PCAyNCkpOworCQkgICAoKChkZXZpY2VQYXJhbSAtPiB0dXJuT2ZmKSAmIDB4OCkgPDwgMTkpIHwKKwkJICAgKCgoZGV2aWNlUGFyYW0gLT4gYWNjMkZpcnN0KSAmIDB4ZikgPDwgMykgfAorCQkgICAoKChkZXZpY2VQYXJhbSAtPiBhY2MyRmlyc3QpICYgMHgxMCkgPDwgMTkpIHwKKwkJICAgKCgoZGV2aWNlUGFyYW0gLT4gYWNjMk5leHQpICYgMHhmKSA8PCA3KSB8CisJCSAgICgoKGRldmljZVBhcmFtIC0+IGFjYzJOZXh0KSAmIDB4MTApIDw8IDIwKSB8CisJCSAgICgoKGRldmljZVBhcmFtIC0+IGFsZTJXcikgJiAweDcpIDw8IDExKSB8CisJCSAgICgoKGRldmljZVBhcmFtIC0+IGFsZTJXcikgJiAweGYpIDw8IDIyKSB8CisJCSAgICgoKGRldmljZVBhcmFtIC0+IHdyTG93KSAmIDB4NykgPDwgMTQpIHwKKwkJICAgKCgoZGV2aWNlUGFyYW0gLT4gd3JMb3cpICYgMHhmKSA8PCAyMykgfAorCQkgICAoKChkZXZpY2VQYXJhbSAtPiB3ckhpZ2gpICYgMHg3KSA8PCAxNykgfAorCQkgICAoKChkZXZpY2VQYXJhbSAtPiB3ckhpZ2gpICYgMHhmKSA8PCAyNCkpOwogICAgIC8qIGluc2VydCB0aGUgZGV2aWNlIHdpZHRoOiAqLwogICAgIHN3aXRjaChkZXZpY2VQYXJhbS0+ZGV2aWNlV2lkdGgpCiAgICAgewogICAgIGNhc2UgMToKLSAgICAgICAgdmFsdWVGb3JSZWcgPSB2YWx1ZUZvclJlZyB8IF84QklUOwotICAgICAgICBicmVhazsKKwl2YWx1ZUZvclJlZyA9IHZhbHVlRm9yUmVnIHwgXzhCSVQ7CisJYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICB2YWx1ZUZvclJlZyA9IHZhbHVlRm9yUmVnIHwgXzE2QklUOwotICAgICAgICBicmVhazsKKwl2YWx1ZUZvclJlZyA9IHZhbHVlRm9yUmVnIHwgXzE2QklUOworCWJyZWFrOwogICAgIGNhc2UgNDoKLSAgICAgICAgdmFsdWVGb3JSZWcgPSB2YWx1ZUZvclJlZyB8IF8zMkJJVDsKLSAgICAgICAgYnJlYWs7CisJdmFsdWVGb3JSZWcgPSB2YWx1ZUZvclJlZyB8IF8zMkJJVDsKKwlicmVhazsKICAgICBjYXNlIDg6Ci0gICAgICAgIHZhbHVlRm9yUmVnID0gdmFsdWVGb3JSZWcgfCBfNjRCSVQ7Ci0gICAgICAgIGJyZWFrOworCXZhbHVlRm9yUmVnID0gdmFsdWVGb3JSZWcgfCBfNjRCSVQ7CisJYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgdmFsdWVGb3JSZWcgPSB2YWx1ZUZvclJlZyB8IF84QklUOwotICAgICAgICBicmVhazsKKwl2YWx1ZUZvclJlZyA9IHZhbHVlRm9yUmVnIHwgXzhCSVQ7CisJYnJlYWs7CiAgICAgfQogICAgIEdUX1JFR19XUklURShERVZJQ0VfQkFOSzBQQVJBTUVURVJTICsgNCAqIGRldmljZU51bSwgdmFsdWVGb3JSZWcpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvbWlzYy5TIGIvYm9hcmQvZXZiNjQyNjAvbWlzYy5TCmluZGV4IDRiYmY2ZWYuLjQzOGRlYTYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V2YjY0MjYwL21pc2MuUworKysgYi9ib2FyZC9ldmI2NDI2MC9taXNjLlMKQEAgLTE1NCwyOSArMTU0LDI5IEBACiAjZW5kaWYKIAogLyogRm9yIHVzZSBvZiB0aGUgZGVidWcgTEVEcyAqLwotICAgICAgICAuZ2xvYmFsIGxlZF9vbjAKKwkuZ2xvYmFsIGxlZF9vbjAKIGxlZF9vbjA6Ci0gICAgICAgIHhvciAgICAgcjE4LCByMTgsIHIxOAotICAgICAgICBsaXMgICAgIHIxOCwgMHgxYzgwCi0gICAgICAgIG9yaSAgICAgcjE4LCByMTgsIDB4ODAwMAotICAgICAgICBzdHcgICAgIHIxOCwgMHgwKHIxOCkKLSAgICAgICAgc3luYwotICAgICAgICBibHIKKwl4b3IgICAgIHIxOCwgcjE4LCByMTgKKwlsaXMgICAgIHIxOCwgMHgxYzgwCisJb3JpICAgICByMTgsIHIxOCwgMHg4MDAwCisJc3R3ICAgICByMTgsIDB4MChyMTgpCisJc3luYworCWJscgogCi0gICAgICAgIC5nbG9iYWwgbGVkX29uMQorCS5nbG9iYWwgbGVkX29uMQogbGVkX29uMToKLSAgICAgICAgeG9yICAgICByMTgsIHIxOCwgcjE4Ci0gICAgICAgIGxpcyAgICAgcjE4LCAweDFjODAKLSAgICAgICAgb3JpICAgICByMTgsIHIxOCwgMHhjMDAwCi0gICAgICAgIHN0dyAgICAgcjE4LCAweDAocjE4KQotICAgICAgICBzeW5jCi0gICAgICAgIGJscgorCXhvciAgICAgcjE4LCByMTgsIHIxOAorCWxpcyAgICAgcjE4LCAweDFjODAKKwlvcmkgICAgIHIxOCwgcjE4LCAweGMwMDAKKwlzdHcgICAgIHIxOCwgMHgwKHIxOCkKKwlzeW5jCisJYmxyCiAKLSAgICAgICAgLmdsb2JhbCBsZWRfb24yCisJLmdsb2JhbCBsZWRfb24yCiBsZWRfb24yOgotICAgICAgICB4b3IgICAgIHIxOCwgcjE4LCByMTgKLSAgICAgICAgbGlzICAgICByMTgsIDB4MWM4MQotICAgICAgICBvcmkgICAgIHIxOCwgcjE4LCAweDAwMDAKLSAgICAgICAgc3R3ICAgICByMTgsIDB4MChyMTgpCi0gICAgICAgIHN5bmMKLSAgICAgICAgYmxyCisJeG9yICAgICByMTgsIHIxOCwgcjE4CisJbGlzICAgICByMTgsIDB4MWM4MQorCW9yaSAgICAgcjE4LCByMTgsIDB4MDAwMAorCXN0dyAgICAgcjE4LCAweDAocjE4KQorCXN5bmMKKwlibHIKZGlmZiAtLWdpdCBhL2JvYXJkL2V2YjY0MjYwL21wc2MuYyBiL2JvYXJkL2V2YjY0MjYwL21wc2MuYwppbmRleCAzMWE2YTBkLi43MThmZTA1IDEwMDY0NAotLS0gYS9ib2FyZC9ldmI2NDI2MC9tcHNjLmMKKysrIGIvYm9hcmQvZXZiNjQyNjAvbXBzYy5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIHN0YXRpYyBpbnQKIG1wc2NfcHV0Y2hhcl9zZG1hKGNoYXIgY2gpCiB7Ci0gICAgCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcDsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKnA7CiAJdW5zaWduZWQgaW50IHRlbXA7CiAKIApAQCAtMjM3LDcgKzIzNyw3IEBACiAJfQogCiAJaWYgKGRvbmUgPT0gbGVuKSB7Ci0JICAgIAkvKiBub3RoaW5nIGxlZnQgaW4gdGhpcyBkZXNjcmlwdG9yLgorCQkvKiBub3RoaW5nIGxlZnQgaW4gdGhpcyBkZXNjcmlwdG9yLgogCQkgKiBnbyB0byBuZXh0IG9uZQogCQkgKi8KIAkJcFsxXSA9IERFU0NfT1dORVIgfCBERVNDX0ZJUlNUIHwgREVTQ19MQVNUOwpAQCAtNDg4LDcgKzQ4OCw3IEBACiB7CiAJdW5zaWduZWQgaW50IHRlbXA7CiAKLSAgICAgICAgdGVtcCA9IEdUUkVHUkVBRChHQUxTRE1BXzBfQ09ORl9SRUcrKGNoYW5uZWwqR0FMU0RNQV9SRUdfRElGRikpOworCXRlbXAgPSBHVFJFR1JFQUQoR0FMU0RNQV8wX0NPTkZfUkVHKyhjaGFubmVsKkdBTFNETUFfUkVHX0RJRkYpKTsKIAl0ZW1wIHw9IDB4MDAwMDAwMDE7CiAJR1RfUkVHX1dSSVRFKEdBTFNETUFfMF9DT05GX1JFRysoY2hhbm5lbCpHQUxTRE1BX1JFR19ESUZGKSwgdGVtcCk7CiAKQEAgLTUwMCw3ICs1MDAsNyBAQAogewogCXVuc2lnbmVkIGludCB0ZW1wOwogCi0gICAgICAgIHRlbXAgPSBHVFJFR1JFQUQoR0FMU0RNQV8wX0NPTkZfUkVHKyhjaGFubmVsKkdBTFNETUFfUkVHX0RJRkYpKTsKKwl0ZW1wID0gR1RSRUdSRUFEKEdBTFNETUFfMF9DT05GX1JFRysoY2hhbm5lbCpHQUxTRE1BX1JFR19ESUZGKSk7CiAJdGVtcCB8PSAweDAwMDAwMDAyOwogCUdUX1JFR19XUklURShHQUxTRE1BXzBfQ09ORl9SRUcrKGNoYW5uZWwqR0FMU0RNQV9SRUdfRElGRiksIHRlbXApOwogCkBAIC01MTIsNyArNTEyLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdGVtcDsKIAotICAgICAgICB0ZW1wID0gR1RSRUdSRUFEKEdBTFNETUFfMF9DT05GX1JFRysoY2hhbm5lbCpHQUxTRE1BX1JFR19ESUZGKSk7CisJdGVtcCA9IEdUUkVHUkVBRChHQUxTRE1BXzBfQ09ORl9SRUcrKGNoYW5uZWwqR0FMU0RNQV9SRUdfRElGRikpOwogCXRlbXAgfD0gMHgwMDAwMDA0MDsKIAlHVF9SRUdfV1JJVEUoR0FMU0RNQV8wX0NPTkZfUkVHKyhjaGFubmVsKkdBTFNETUFfUkVHX0RJRkYpLCB0ZW1wKTsKIApAQCAtNTI0LDcgKzUyNCw3IEBACiB7CiAJdW5zaWduZWQgaW50IHRlbXA7CiAKLSAgICAgICAgdGVtcCA9IEdUUkVHUkVBRChHQUxTRE1BXzBfQ09ORl9SRUcrKGNoYW5uZWwqR0FMU0RNQV9SRUdfRElGRikpOworCXRlbXAgPSBHVFJFR1JFQUQoR0FMU0RNQV8wX0NPTkZfUkVHKyhjaGFubmVsKkdBTFNETUFfUkVHX0RJRkYpKTsKIAl0ZW1wIHw9IDB4MDAwMDAwODA7CiAJR1RfUkVHX1dSSVRFKEdBTFNETUFfMF9DT05GX1JFRysoY2hhbm5lbCpHQUxTRE1BX1JFR19ESUZGKSwgdGVtcCk7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2V2YjY0MjYwL3BjaS5jIGIvYm9hcmQvZXZiNjQyNjAvcGNpLmMKaW5kZXggNWYzYjE1NC4uMjJkYTc0NiAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNjQyNjAvcGNpLmMKKysrIGIvYm9hcmQvZXZiNjQyNjAvcGNpLmMKQEAgLTc5LDExICs3OSwxMSBAQAogICAgIHVuc2lnbmVkIGludCBhZGRyOwogCiAgICAgaWYocGNpRGV2TnVtID4gMzIpIC8qIGlsbGVnYWwgZGV2aWNlIE51bWJlciAqLwotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogICAgIGlmKHBjaURldk51bSA9PSBTRUxGKSAvKiBjb25maWd1cmUgb3VyIGNvbmZpZ3VyYXRpb24gc3BhY2UuICovCiAgICAgewotICAgICAgICBwY2lEZXZOdW0gPSAoR1RSRUdSRUFEKHBjaV9wMnBfY29uZmlndXJhdGlvbl9yZWdbaG9zdF0pID4+IDI0KSAmIDB4MWY7Ci0gICAgICAgIGJ1c051bSA9IEdUUkVHUkVBRChwY2lfcDJwX2NvbmZpZ3VyYXRpb25fcmVnW2hvc3RdKSAmIDB4ZmYwMDAwOworCXBjaURldk51bSA9IChHVFJFR1JFQUQocGNpX3AycF9jb25maWd1cmF0aW9uX3JlZ1tob3N0XSkgPj4gMjQpICYgMHgxZjsKKwlidXNOdW0gPSBHVFJFR1JFQUQocGNpX3AycF9jb25maWd1cmF0aW9uX3JlZ1tob3N0XSkgJiAweGZmMDAwMDsKICAgICB9CiAgICAgZnVuY3Rpb25OdW0gPSAgcmVnT2Zmc2V0ICYgMHgwMDAwMDcwMDsKICAgICBwY2lEZXZOdW0gPSBwY2lEZXZOdW0gPDwgMTE7CkBAIC0xMTYsMTYgKzExNiwxNiBAQAogdW5zaWduZWQgaW50IHBjaVJlYWRDb25maWdSZWcgKFBDSV9IT1NUIGhvc3QsIHVuc2lnbmVkIGludCByZWdPZmZzZXQsdW5zaWduZWQgaW50IHBjaURldk51bSkKIHsKICAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgRGF0YUZvckFkZHJSZWc7Ci0gICAJdW5zaWduZWQgaW50IGRhdGE7CisJdW5zaWduZWQgaW50IGRhdGE7CiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uTnVtOwogICAgIHVuc2lnbmVkIGludCBidXNOdW0gPSBQQ0lfQlVTKHBjaURldk51bSk7CiAKICAgICBpZihwY2lEZXZOdW0gPiAzMikgLyogaWxsZWdhbCBkZXZpY2UgTnVtYmVyICovCi0gICAgICAgIHJldHVybiAweGZmZmZmZmZmOworCXJldHVybiAweGZmZmZmZmZmOwogICAgIGlmKHBjaURldk51bSA9PSBTRUxGKSAvKiBjb25maWd1cmUgb3VyIGNvbmZpZ3VyYXRpb24gc3BhY2UuICovCiAgICAgewotICAgICAgICBwY2lEZXZOdW0gPSAoR1RSRUdSRUFEKHBjaV9wMnBfY29uZmlndXJhdGlvbl9yZWdbaG9zdF0pID4+IDI0KSAmIDB4MWY7Ci0gICAgICAgIGJ1c051bSA9IEdUUkVHUkVBRChwY2lfcDJwX2NvbmZpZ3VyYXRpb25fcmVnW2hvc3RdKSAmIDB4ZmYwMDAwOworCXBjaURldk51bSA9IChHVFJFR1JFQUQocGNpX3AycF9jb25maWd1cmF0aW9uX3JlZ1tob3N0XSkgPj4gMjQpICYgMHgxZjsKKwlidXNOdW0gPSBHVFJFR1JFQUQocGNpX3AycF9jb25maWd1cmF0aW9uX3JlZ1tob3N0XSkgJiAweGZmMDAwMDsKICAgICB9CiAgICAgZnVuY3Rpb25OdW0gPSByZWdPZmZzZXQgJiAweDAwMDAwNzAwOwogICAgIHBjaURldk51bSA9IHBjaURldk51bSA8PCAxMTsKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgIEdUX1JFR19XUklURShwY2lfY29uZmlndXJhdGlvbl9hZGRyZXNzW2hvc3RdLERhdGFGb3JBZGRyUmVnKTsKICAgICBHVF9SRUdfUkVBRChwY2lfY29uZmlndXJhdGlvbl9hZGRyZXNzW2hvc3RdLCAmZGF0YSk7CiAgICAgaWYgKGRhdGEgIT0gRGF0YUZvckFkZHJSZWcpCi0gICAgICAgIHJldHVybiAweGZmZmZmZmZmOworCXJldHVybiAweGZmZmZmZmZmOwogICAgIEdUX1JFR19SRUFEKHBjaV9jb25maWd1cmF0aW9uX2RhdGFbaG9zdF0sICZkYXRhKTsKICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTE2MywzNCArMTYzLDM0IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIHBjaU92ZXJCcmlkZ2VXcml0ZUNvbmZpZ1JlZyhQQ0lfSE9TVCBob3N0LAogCQkJCSB1bnNpZ25lZCBpbnQgcmVnT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBjaURldk51bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBidXNOdW0sdW5zaWduZWQgaW50IGRhdGEpCisJCQkJIHVuc2lnbmVkIGludCBwY2lEZXZOdW0sCisJCQkJIHVuc2lnbmVkIGludCBidXNOdW0sdW5zaWduZWQgaW50IGRhdGEpCiB7Ci0gICAJdW5zaWduZWQgaW50ICAgRGF0YUZvclJlZzsKKwl1bnNpZ25lZCBpbnQgICBEYXRhRm9yUmVnOwogICAgIHVuc2lnbmVkIGludCAgIGZ1bmN0aW9uTnVtOwogCi0gICAJZnVuY3Rpb25OdW0gPSAgcmVnT2Zmc2V0ICYgMHgwMDAwMDcwMDsKKwlmdW5jdGlvbk51bSA9ICByZWdPZmZzZXQgJiAweDAwMDAwNzAwOwogICAgIHBjaURldk51bSA9IHBjaURldk51bSA8PCAxMTsKICAgICByZWdPZmZzZXQgPSByZWdPZmZzZXQgJiAweGZmOwogICAgIGJ1c051bSA9IGJ1c051bSA8PCAxNjsKICAgICBpZihwY2lEZXZOdW0gPT0gU0VMRikgLyogVGhpcyBib2FyZCAqLwogICAgIHsKLSAgICAgICAgRGF0YUZvclJlZyA9ICggcmVnT2Zmc2V0IHwgcGNpRGV2TnVtIHwgZnVuY3Rpb25OdW0pIHwgQklUMDsKKwlEYXRhRm9yUmVnID0gKCByZWdPZmZzZXQgfCBwY2lEZXZOdW0gfCBmdW5jdGlvbk51bSkgfCBCSVQwOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBEYXRhRm9yUmVnID0gKCByZWdPZmZzZXQgfCBwY2lEZXZOdW0gfCBmdW5jdGlvbk51bSB8IGJ1c051bSkgfAotICAgICAgICAgICAgQklUMzEgfCBCSVQwOworCURhdGFGb3JSZWcgPSAoIHJlZ09mZnNldCB8IHBjaURldk51bSB8IGZ1bmN0aW9uTnVtIHwgYnVzTnVtKSB8CisJICAgIEJJVDMxIHwgQklUMDsKICAgICB9CiAgICAgR1RfUkVHX1dSSVRFKHBjaV9jb25maWd1cmF0aW9uX2FkZHJlc3NbaG9zdF0sRGF0YUZvclJlZyk7CiAgICAgaWYocGNpRGV2TnVtID09IFNFTEYpIC8qIFRoaXMgYm9hcmQgKi8KICAgICB7Ci0gICAgICAgIEdUX1JFR19XUklURShwY2lfY29uZmlndXJhdGlvbl9kYXRhW2hvc3RdLGRhdGEpOworCUdUX1JFR19XUklURShwY2lfY29uZmlndXJhdGlvbl9kYXRhW2hvc3RdLGRhdGEpOwogICAgIH0KICAgICBlbHNlIC8qIGNvbmZpZ3VyYXRpb24gVHJhbnNhY3Rpb24gb3ZlciB0aGUgcGNpLiAqLwogICAgIHsKLSAgICAgICAgLyogVGhlIFBDSSBpcyB3b3JraW5nIGluIExFIE1vZGUgU28gaXQgc3dhcCB0aGUgRGF0YS4gKi8KLSAgICAgICAgR1RfUkVHX1dSSVRFKHBjaV9jb25maWd1cmF0aW9uX2RhdGFbaG9zdF0sV09SRF9TV0FQKGRhdGEpKTsKKwkvKiBUaGUgUENJIGlzIHdvcmtpbmcgaW4gTEUgTW9kZSBTbyBpdCBzd2FwIHRoZSBEYXRhLiAqLworCUdUX1JFR19XUklURShwY2lfY29uZmlndXJhdGlvbl9kYXRhW2hvc3RdLFdPUkRfU1dBUChkYXRhKSk7CiAgICAgfQogfQogCkBAIC0yMTgsOCArMjE4LDggQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHVuc2lnbmVkIGludCBwY2lPdmVyQnJpZGdlUmVhZENvbmZpZ1JlZyhQQ0lfSE9TVCBob3N0LAogCQkJCQl1bnNpZ25lZCBpbnQgcmVnT2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwY2lEZXZOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ1c051bSkKKwkJCQkJdW5zaWduZWQgaW50IHBjaURldk51bSwKKwkJCQkJdW5zaWduZWQgaW50IGJ1c051bSkKIHsKICAgICB1bnNpZ25lZCBpbnQgRGF0YUZvclJlZzsKICAgICB1bnNpZ25lZCBpbnQgZGF0YTsKQEAgLTIzMSwyMyArMjMxLDIzIEBACiAgICAgYnVzTnVtID0gYnVzTnVtIDw8IDE2OwogICAgIGlmIChwY2lEZXZOdW0gPT0gU0VMRikgLyogVGhpcyBib2FyZCAqLwogICAgIHsKLSAgICAgICAgRGF0YUZvclJlZyA9IChyZWdPZmZzZXQgfCBwY2lEZXZOdW0gfCBmdW5jdGlvbk51bSkgfCBCSVQzMSA7CisJRGF0YUZvclJlZyA9IChyZWdPZmZzZXQgfCBwY2lEZXZOdW0gfCBmdW5jdGlvbk51bSkgfCBCSVQzMSA7CiAgICAgfQogICAgIGVsc2UgLyogYWdlbnQgb24gYW5vdGhlciBidXMgKi8KICAgICB7Ci0gICAgICAgIERhdGFGb3JSZWcgPSAocmVnT2Zmc2V0IHwgcGNpRGV2TnVtIHwgZnVuY3Rpb25OdW0gfCBidXNOdW0pIHwKLSAgICAgICAgQklUMCB8IEJJVDMxIDsKKwlEYXRhRm9yUmVnID0gKHJlZ09mZnNldCB8IHBjaURldk51bSB8IGZ1bmN0aW9uTnVtIHwgYnVzTnVtKSB8CisJQklUMCB8IEJJVDMxIDsKICAgICB9CiAgICAgR1RfUkVHX1dSSVRFKHBjaV9jb25maWd1cmF0aW9uX2FkZHJlc3NbaG9zdF0sRGF0YUZvclJlZyk7CiAgICAgaWYgKHBjaURldk51bSA9PSBTRUxGKSAvKiBUaGlzIGJvYXJkICovCi0gICAJewotICAgICAgICBHVF9SRUdfUkVBRChwY2lfY29uZmlndXJhdGlvbl9kYXRhW2hvc3RdLCAmZGF0YSk7Ci0gICAgCXJldHVybiBkYXRhOworCXsKKwlHVF9SRUdfUkVBRChwY2lfY29uZmlndXJhdGlvbl9kYXRhW2hvc3RdLCAmZGF0YSk7CisJcmV0dXJuIGRhdGE7CiAgICAgfQogICAgIGVsc2UgLyogVGhlIFBDSSBpcyB3b3JraW5nIGluIExFIE1vZGUgU28gaXQgc3dhcCB0aGUgRGF0YS4gKi8KICAgICB7Ci0gICAgICAgIEdUX1JFR19SRUFEKHBjaV9jb25maWd1cmF0aW9uX2RhdGFbaG9zdF0sICZkYXRhKTsKLSAgICAJcmV0dXJuIFdPUkRfU1dBUChkYXRhKTsKKwlHVF9SRUdfUkVBRChwY2lfY29uZmlndXJhdGlvbl9kYXRhW2hvc3RdLCAmZGF0YSk7CisJcmV0dXJuIFdPUkRfU1dBUChkYXRhKTsKICAgICB9CiB9CiAKQEAgLTM1NiwxMiArMzU2LDEyIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIHBjaU1hcE1lbW9yeUJhbmsoUENJX0hPU1QgaG9zdCwgTUVNT1JZX0JBTksgYmFuaywgdW5zaWduZWQgaW50IHBjaURyYW1CYXNlLHVuc2lnbmVkIGludCBwY2lEcmFtU2l6ZSkKIHsKLSAgCXBjaURyYW1CYXNlID0gcGNpRHJhbUJhc2UgJiAweGZmZmZmMDAwOworCXBjaURyYW1CYXNlID0gcGNpRHJhbUJhc2UgJiAweGZmZmZmMDAwOwogICAgIHBjaURyYW1CYXNlID0gcGNpRHJhbUJhc2UgfCAocGNpUmVhZENvbmZpZ1JlZyhob3N0LAotICAgICAgICBQQ0lfU0NTXzBfQkFTRV9BRERSRVNTICsgNCpiYW5rLFNFTEYpICYgMHgwMDAwMGZmZik7CisJUENJX1NDU18wX0JBU0VfQUREUkVTUyArIDQqYmFuayxTRUxGKSAmIDB4MDAwMDBmZmYpOwogICAgIHBjaVdyaXRlQ29uZmlnUmVnKGhvc3QsUENJX1NDU18wX0JBU0VfQUREUkVTUyArIDQqYmFuayxTRUxGLHBjaURyYW1CYXNlKTsKICAgICBpZihwY2lEcmFtU2l6ZSA9PSAwKQotICAgICAgICBwY2lEcmFtU2l6ZSArKzsKKwlwY2lEcmFtU2l6ZSArKzsKICAgICBHVF9SRUdfV1JJVEUocGNpX3Njc19iYW5rX3NpemVbaG9zdF1bYmFua10sIHBjaURyYW1TaXplLTEpOwogfQogCkBAIC0zNzgsNyArMzc4LDcgQEAKICogUmV0dXJuczogZmFsc2UgaWYgb25lIG9mIHRoZSBwYXJhbWV0ZXJzIGlzIGVycm9uZW91cyB0cnVlIG90aGVyd2lzZS4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGJvb2wgcGNpU2V0UmVnaW9uRmVhdHVyZXMoUENJX0hPU1QgaG9zdCwgUENJX0FDQ0VTU19SRUdJT05TIHJlZ2lvbix1bnNpZ25lZCBpbnQgZmVhdHVyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZUFkZHJlc3MsdW5zaWduZWQgaW50IHJlZ2lvbkxlbmd0aCkKKwkJCSAgIHVuc2lnbmVkIGludCBiYXNlQWRkcmVzcyx1bnNpZ25lZCBpbnQgcmVnaW9uTGVuZ3RoKQogewogICAgIHVuc2lnbmVkIGludCBhY2Nlc3NMb3c7CiAgICAgdW5zaWduZWQgaW50IGFjY2Vzc0hpZ2g7CkBAIC0zODYsOCArMzg2LDggQEAKIAogICAgIGlmKHJlZ2lvbkxlbmd0aCA9PSAwKSAvKiBjbG9zZSB0aGUgcmVnaW9uLiAqLwogICAgIHsKLSAgICAgICAgcGNpRGlzYWJsZUFjY2Vzc1JlZ2lvbihob3N0LCByZWdpb24pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlwY2lEaXNhYmxlQWNjZXNzUmVnaW9uKGhvc3QsIHJlZ2lvbik7CisJcmV0dXJuIHRydWU7CiAgICAgfQogICAgIC8qIGJhc2UgQWRkcmVzcyBpcyBzdG9yZSBpcyBiaXRzIFsxMTowXSAqLwogICAgIGFjY2Vzc0xvdyA9IChiYXNlQWRkcmVzcyAmIDB4ZmZmMDAwMDApID4+IDIwOwpAQCAtNDY0LDIxICs0NjQsMjEgQEAKICogUmV0dXJuczogIHRydWUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIGJvb2wgcGNpUGFya2luZ0Rpc2FibGUoUENJX0hPU1QgaG9zdCwgUENJX0FHRU5UX1BBUksgaW50ZXJuYWxBZ2VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9BR0VOVF9QQVJLIGV4dGVybmFsQWdlbnQwLAotICAgICAgICAgICAgICAgICAgICAgICAgUENJX0FHRU5UX1BBUksgZXh0ZXJuYWxBZ2VudDEsCi0gICAgICAgICAgICAgICAgICAgICAgICBQQ0lfQUdFTlRfUEFSSyBleHRlcm5hbEFnZW50MiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9BR0VOVF9QQVJLIGV4dGVybmFsQWdlbnQzLAotICAgICAgICAgICAgICAgICAgICAgICAgUENJX0FHRU5UX1BBUksgZXh0ZXJuYWxBZ2VudDQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQQ0lfQUdFTlRfUEFSSyBleHRlcm5hbEFnZW50NSkKKwkJCVBDSV9BR0VOVF9QQVJLIGV4dGVybmFsQWdlbnQwLAorCQkJUENJX0FHRU5UX1BBUksgZXh0ZXJuYWxBZ2VudDEsCisJCQlQQ0lfQUdFTlRfUEFSSyBleHRlcm5hbEFnZW50MiwKKwkJCVBDSV9BR0VOVF9QQVJLIGV4dGVybmFsQWdlbnQzLAorCQkJUENJX0FHRU5UX1BBUksgZXh0ZXJuYWxBZ2VudDQsCisJCQlQQ0lfQUdFTlRfUEFSSyBleHRlcm5hbEFnZW50NSkKIHsKICAgICB1bnNpZ25lZCBpbnQgcmVnRGF0YTsKICAgICB1bnNpZ25lZCBpbnQgd3JpdGVEYXRhOwogCiAgICAgR1RfUkVHX1JFQUQocGNpX2FyYml0ZXJfY29udHJvbFtob3N0XSwmcmVnRGF0YSk7CiAgICAgd3JpdGVEYXRhID0gKGludGVybmFsQWdlbnQgPDwgMTQpICsgKGV4dGVybmFsQWdlbnQwIDw8IDE1KSArICAgICBcCi0gICAgICAgICAgICAgICAgKGV4dGVybmFsQWdlbnQxIDw8IDE2KSArIChleHRlcm5hbEFnZW50MiA8PCAxNykgKyAgICBcCi0gICAgICAgICAgICAgICAgKGV4dGVybmFsQWdlbnQzIDw8IDE4KSArIChleHRlcm5hbEFnZW50NCA8PCAxOSkgKyAgICBcCi0gICAgICAgICAgICAgICAgKGV4dGVybmFsQWdlbnQ1IDw8IDIwKTsKKwkJKGV4dGVybmFsQWdlbnQxIDw8IDE2KSArIChleHRlcm5hbEFnZW50MiA8PCAxNykgKyAgICBcCisJCShleHRlcm5hbEFnZW50MyA8PCAxOCkgKyAoZXh0ZXJuYWxBZ2VudDQgPDwgMTkpICsgICAgXAorCQkoZXh0ZXJuYWxBZ2VudDUgPDwgMjApOwogICAgIHJlZ0RhdGEgPSAocmVnRGF0YSAmIH4oMHg3Zjw8MTQpKSB8IHdyaXRlRGF0YTsKICAgICBHVF9SRUdfV1JJVEUocGNpX2FyYml0ZXJfY29udHJvbFtob3N0XSxyZWdEYXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ5OCw4ICs0OTgsOCBAQAogKiBSZXR1cm5zOiBmYWxzZSBpZiBvbmUgb2YgdGhlIHBhcmFtZXRlcnMgaXMgd3Jvbmcgb3RoZXJ3aXNlIHJldHVybiB0cnVlLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogYm9vbCBwY2lTZXRSZWdpb25Tbm9vcE1vZGUoUENJX0hPU1QgaG9zdCwgUENJX1NOT09QX1JFR0lPTiByZWdpb24sUENJX1NOT09QX1RZUEUgc25vb3BUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaW9uTGVuZ3RoKQorCQkJICAgIHVuc2lnbmVkIGludCBiYXNlQWRkcmVzcywKKwkJCSAgICB1bnNpZ25lZCBpbnQgcmVnaW9uTGVuZ3RoKQogewogICAgIHVuc2lnbmVkIGludCBzbm9vcFhiYXNlQWRkcmVzczsKICAgICB1bnNpZ25lZCBpbnQgc25vb3BYdG9wQWRkcmVzczsKQEAgLTUwNywxNCArNTA3LDE0IEBACiAgICAgdW5zaWduZWQgaW50IHNub29wSGlnaCA9IGJhc2VBZGRyZXNzICsgcmVnaW9uTGVuZ3RoOwogCiAgICAgaWYoIChyZWdpb24gPiBQQ0lfU05PT1BfUkVHSU9OMykgfHwgKHNub29wVHlwZSA+IFBDSV9TTk9PUF9XQikgKQotICAgICAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogICAgIHNub29wWGJhc2VBZGRyZXNzID0gcGNpX3Nub29wX2NvbnRyb2xfYmFzZV8wX2xvd1tob3N0XSArIDB4MTAgKiByZWdpb247CiAgICAgc25vb3BYdG9wQWRkcmVzcyA9IHBjaV9zbm9vcF9jb250cm9sX3RvcF8wW2hvc3RdICsgMHgxMCAqIHJlZ2lvbjsKICAgICBpZihyZWdpb25MZW5ndGggPT0gMCkgLyogY2xvc2luZyB0aGUgcmVnaW9uICovCiAgICAgewotICAgICAgICBHVF9SRUdfV1JJVEUoc25vb3BYYmFzZUFkZHJlc3MsMHgwMDAwZmZmZik7Ci0gICAgICAgIEdUX1JFR19XUklURShzbm9vcFh0b3BBZGRyZXNzLDApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKwlHVF9SRUdfV1JJVEUoc25vb3BYYmFzZUFkZHJlc3MsMHgwMDAwZmZmZik7CisJR1RfUkVHX1dSSVRFKHNub29wWHRvcEFkZHJlc3MsMCk7CisJcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGJhc2VBZGRyZXNzID0gYmFzZUFkZHJlc3MgJiAweGZmZjAwMDAwOyAvKiBHcmFudWxhcml0eSBvZiAxTUJ5dGUgKi8KICAgICBkYXRhID0gKGJhc2VBZGRyZXNzID4+IDIwKSB8IHNub29wVHlwZSA8PCAxMjsKQEAgLTUzMywxMiArNTMzLDEyIEBACiAJCQkJaW50IG9mZnNldCwgdTMyKiB2YWx1ZSkKIHsKIAlpbnQgYnVzID0gUENJX0JVUyhkZXYpOwotCQorCiAJaWYgKChidXMgPT0gbG9jYWxfYnVzZXNbMF0pIHx8IChidXMgPT0gbG9jYWxfYnVzZXNbMV0pKXsKLQkJKnZhbHVlID0gcGNpUmVhZENvbmZpZ1JlZygoUENJX0hPU1QpIGhvc2UtPmNmZ19hZGRyLCBvZmZzZXQsIAorCQkqdmFsdWUgPSBwY2lSZWFkQ29uZmlnUmVnKChQQ0lfSE9TVCkgaG9zZS0+Y2ZnX2FkZHIsIG9mZnNldCwKIAkJCQkJICBQQ0lfREVWKGRldikpOwogCX0gZWxzZSB7Ci0JCSp2YWx1ZSA9IHBjaU92ZXJCcmlkZ2VSZWFkQ29uZmlnUmVnKChQQ0lfSE9TVCkgaG9zZS0+Y2ZnX2FkZHIsIAorCQkqdmFsdWUgPSBwY2lPdmVyQnJpZGdlUmVhZENvbmZpZ1JlZygoUENJX0hPU1QpIGhvc2UtPmNmZ19hZGRyLAogCQkJCQkJICAgIG9mZnNldCwgUENJX0RFVihkZXYpLCBidXMpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTU1MSwxMCArNTUxLDEwIEBACiAJaW50IGJ1cyA9IFBDSV9CVVMoZGV2KTsKIAogCWlmICgoYnVzID09IGxvY2FsX2J1c2VzWzBdKSB8fCAoYnVzID09IGxvY2FsX2J1c2VzWzFdKSl7Ci0JCXBjaVdyaXRlQ29uZmlnUmVnKChQQ0lfSE9TVClob3NlLT5jZmdfYWRkciwgb2Zmc2V0LCAKKwkJcGNpV3JpdGVDb25maWdSZWcoKFBDSV9IT1NUKWhvc2UtPmNmZ19hZGRyLCBvZmZzZXQsCiAJCQkJICBQQ0lfREVWKGRldiksIHZhbHVlKTsKIAl9IGVsc2UgewotCQlwY2lPdmVyQnJpZGdlV3JpdGVDb25maWdSZWcoKFBDSV9IT1NUKWhvc2UtPmNmZ19hZGRyLCBvZmZzZXQsIAorCQlwY2lPdmVyQnJpZGdlV3JpdGVDb25maWdSZWcoKFBDSV9IT1NUKWhvc2UtPmNmZ19hZGRyLCBvZmZzZXQsCiAJCQkJCSAgICBQQ0lfREVWKGRldiksIHZhbHVlLCBidXMpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2JvYXJkL2V2YjY0MjYwL3NkcmFtX2luaXQuYyBiL2JvYXJkL2V2YjY0MjYwL3NkcmFtX2luaXQuYwppbmRleCBmZjk4ZTRkLi4zNjE2NTY1IDEwMDY0NAotLS0gYS9ib2FyZC9ldmI2NDI2MC9zZHJhbV9pbml0LmMKKysrIGIvYm9hcmQvZXZiNjQyNjAvc2RyYW1faW5pdC5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIHN0YXRpYyBpbnQKIGNoZWNrX2RpbW0odWNoYXIgc2xvdCwgc2RyYW1faW5mb190ICppbmZvKQogewotICAgICAgICAvKiBhc3N1bWUgMiBkaW1tcywgMiBiYW5rcyBlYWNoIDI1Nk0gLSB3ZSBkb250IGhhdmUgYW4KKwkvKiBhc3N1bWUgMiBkaW1tcywgMiBiYW5rcyBlYWNoIDI1Nk0gLSB3ZSBkb250IGhhdmUgYW4KIAkgKiBkaW1tIGkyYyBzbyByZWx5IG9uIHRoZSBkZXRlY3Rpb24gcm91dGluZXMgbGF0ZXIgKi8KIAogCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCiAJZ2V0X2Nsb2NrcyAoKTsKIAotIAl0bWVtY2xrID0gMTAwMDAwMDAwMCAvIChnZC0+YnVzX2NsayAvIDEwMCk7ICAvKiBpbiAxMCBwcyB1bml0cyAqLworCXRtZW1jbGsgPSAxMDAwMDAwMDAwIC8gKGdkLT5idXNfY2xrIC8gMTAwKTsgIC8qIGluIDEwIHBzIHVuaXRzICovCiAKICNpZmRlZiBDT05GSUdfRVZCNjQyNjBfNzUwQ1gKIAlpZiAoMCAhPSBzbG90KSB7CkBAIC0yODQsNyArMjg0LDcgQEAKICNpZmRlZiBDRkdfQlJPS0VOX0NMMgogCWlmIChpbmZvLT50cGFyID09IDIpewogCQlpbmZvLT50cGFyID0gMzsKLQkgICAgICAgIERQKHByaW50ZigidHBhciBmaXhlZC11cCB0bzogJWRcbiIsIGluZm8tPnRwYXIpKTsKKwkJRFAocHJpbnRmKCJ0cGFyIGZpeGVkLXVwIHRvOiAlZFxuIiwgaW5mby0+dHBhcikpOwogCX0KICNlbmRpZgogCS8qIGNvbXB1dGUgdGhlIG1vZHVsZSBEUkIgc2l6ZSAqLwpAQCAtMzEwLDcgKzMxMCw3IEBACiBzdGF0aWMgaW50CiBzZXR1cF9zZHJhbV9jb21tb24oc2RyYW1faW5mb190IGluZm9bMl0pCiB7Ci0gICAgCXVsb25nIHRtcDsKKwl1bG9uZyB0bXA7CiAJaW50IHRwYXI9MiwgdHJhc19jbG9ja3M9NSwgcmVnaXN0ZXJlZD0xLCBlY2M9MjsKIAogCWlmKCFpbmZvWzBdLmJhbmtzICYmICFpbmZvWzFdLmJhbmtzKSByZXR1cm4gMDsKQEAgLTUwMCw3ICs1MDAsNyBAQAogewogCXVsb25nIGNoZWNrYmFua1s0XSA9IHsgWzAgLi4uIDNdID0gMCB9OwogCWludCBiYW5rX25vOwotICAgICAgICB1bG9uZyB0b3RhbDsKKwl1bG9uZyB0b3RhbDsKIAlpbnQgbmhyOwogCXNkcmFtX2luZm9fdCBkaW1tX2luZm9bMl07CiAKQEAgLTYwOCw3ICs2MDgsNyBAQAogCSAqIGNoaXBzKQogCSAqLwogCWlmIChjaGVja2JhbmtbMl09PTAgJiYgY2hlY2tiYW5rWzNdPT0wKSB7Ci0JICAgIAlkaW1tX2luZm9bMF0uZWNjPTI7CisJCWRpbW1faW5mb1swXS5lY2M9MjsKIAkJR1RfUkVHX1dSSVRFKFNEUkFNX1RJTUlORywgR1RSRUdSRUFEKFNEUkFNX1RJTUlORykgfCAoMSA8PCAxMykpOwogCQkvKiBUT0RPOiBkbyB3ZSBoYXZlIHRvIHJ1biBNUlMgY3ljbGVzIGFnYWluPyAqLwogCX0KQEAgLTYyNCw2ICs2MjQsNiBAQAogCWR1bXBfZGltbV9pbmZvKCZkaW1tX2luZm9bMV0pOwogI2VuZGlmCiAJLyogVE9ETzogcmV0dXJuIGF0IE1PU1QgMjU2TT8gKi8KLSAgICAgICAgLyogcmV0dXJuIHRvdGFsID4gR0IvNCA/IEdCLzQgOiB0b3RhbDsgKi8KKwkvKiByZXR1cm4gdG90YWwgPiBHQi80ID8gR0IvNCA6IHRvdGFsOyAqLwogCXJldHVybiB0b3RhbDsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL2V2YjY0MjYwL3UtYm9vdC5sZHMgYi9ib2FyZC9ldmI2NDI2MC91LWJvb3QubGRzCmluZGV4IGRlNTBiZjQuLjBkZmE4YzAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2V2YjY0MjYwL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZXZiNjQyNjAvdS1ib290LmxkcwpAQCAtMTA2LDYgKzEwNiwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZXZiNjQyNjAvenVtYV9wYmIuYyBiL2JvYXJkL2V2YjY0MjYwL3p1bWFfcGJiLmMKaW5kZXggMTBjNDg0NS4uNTMxYjE2YiAxMDA2NDQKLS0tIGEvYm9hcmQvZXZiNjQyNjAvenVtYV9wYmIuYworKysgYi9ib2FyZC9ldmI2NDI2MC96dW1hX3BiYi5jCkBAIC0zLDcgKzMsNiBAQAogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQlNQKQogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYnNwLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPHBjaS5oPgpAQCAtMTYsOSArMTUsMTEgQEAKICNkZWZpbmUgUEFUX0hJIDB4MDQwNTA2MDcKIAogc3RhdGljIFBCQl9ETUFfUkVHX01BUCAqenVtYV9wYmJfcmVnID0gTlVMTDsKLQogc3RhdGljIGNoYXIgdGVzdF9idWYxWzIwNDhdOwogc3RhdGljIGNoYXIgdGVzdF9idWYyWzIwNDhdOwordm9pZCB6dW1hX2luaXRfcGJiKHZvaWQpOworaW50IHp1bWFfbWJveF9pbml0KHZvaWQpOworaW50IHp1bWFfdGVzdF9kbWEoaW50IGNtZCwgaW50IHNpemUpOwogCiBpbnQgenVtYV90ZXN0X2RtYSAoaW50IGNtZCwgaW50IHNpemUpCiB7CkBAIC0xOTcsNCArMTk4LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK2NtZF90YmxfdCBVX0JPT1RfQ01EKHp1bWFfaW5pdF9wYmIpID0gTUtfQ01EX0VOVFJZKAorCSJ6aW5pdCIsCSAxLAkgMCwJIGRvX3p1bWFfaW5pdF9wYmIsCisJInppbml0ICAgLSBpbml0IHp1bWEgcGJiXG4iLAorCSJcbiIKKwkiICAgIC0gaW5pdCB6dW1hIHBiYlxuIgorKTsKK2NtZF90YmxfdCBVX0JPT1RfQ01EKHp1bWFfdGVzdF9kbWEpID0gTUtfQ01EX0VOVFJZKAorCSJ6ZHRlc3QiLAkgIDMsCSAgMSwJICBkb196dW1hX3Rlc3RfZG1hLAorCSJ6ZHRlc3QgIC0gcnVuIGRtYSB0ZXN0XG4iLAorCSJbY21kIFtjb3VudF1dXG4iCisJIiAgICAtIHJ1biBkbWEgY21kICh3PTAsdj0xLGNwPTIsY21wPTMsd2k9NCx2aT01KSwgY291bnQgYnl0ZXNcbiIKKyk7CitjbWRfdGJsX3QgVV9CT09UX0NNRCh6dW1hX2luaXRfbWJveCkgPSBNS19DTURfRU5UUlkoCisJInptaW5pdCIsCSAgMSwJICAwLAkgIGRvX3p1bWFfaW5pdF9tYm94LAorCSJ6bWluaXQgIC0gaW5pdCB6dW1hIG1ib3hcbiIsCisJIlxuIgorCSIgICAgLSBpbml0IHp1bWEgbWJveFxuIgorKTsKKwogI2VuZGlmIC8qIENGR19DTURfQlNQICovCmRpZmYgLS1naXQgYS9ib2FyZC9ldmI2NDI2MC96dW1hX3BiYi5oIGIvYm9hcmQvZXZiNjQyNjAvenVtYV9wYmIuaAppbmRleCA2NjNlMTBjLi4zMDBiMmZlIDEwMDY0NAotLS0gYS9ib2FyZC9ldmI2NDI2MC96dW1hX3BiYi5oCisrKyBiL2JvYXJkL2V2YjY0MjYwL3p1bWFfcGJiLmgKQEAgLTE3OCw3ICsxNzgsNyBAQAogCSAgICBWMzIgcmVzMTo4OwkvKiBiaXRzIDI0LTMxICovCiAJfSBfbGVfYml0czsKIAlWOCBieXRlWzRdOwotICAgIAlWMzIgd29yZDsKKwlWMzIgd29yZDsKICAgICB9IGRlc2M7CiAgICAgVjMyIHBhZDE7CiB9IERNQV9ERVNDX0xFVkVMOwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKICAgICAvKiAzOS80MCAoMHgxMzgvMHgxNDApICovCiAgICAgdW5pb24gewotICAgICAgICAvKiBOT1RFISEgNCBkd29yZHMgKi8KKwkvKiBOT1RFISEgNCBkd29yZHMgKi8KIAlzdHJ1Y3QgewogCSAgICBWMzIgY2hhbm5lbF8zOjg7CiAJICAgIFYzMiBjaGFubmVsXzI6ODsKZGlmZiAtLWdpdCBhL2JvYXJkL2ZhZHMvTWFrZWZpbGUgYi9ib2FyZC9mYWRzL01ha2VmaWxlCmluZGV4IDIwYTE5YjkuLmJhYTZjMmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZhZHMvTWFrZWZpbGUKKysrIGIvYm9hcmQvZmFkcy9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBsYW1wLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2ZhZHMvZmFkcy5jIGIvYm9hcmQvZmFkcy9mYWRzLmMKaW5kZXggODcxNDY4OS4uMDUxOTc3MSAxMDA2NDQKLS0tIGEvYm9hcmQvZmFkcy9mYWRzLmMKKysrIGIvYm9hcmQvZmFkcy9mYWRzLmMKQEAgLTI3Miw3ICsyNzIsNyBAQAogCiAgIHN3aXRjaChrKSB7CiAgIGNhc2UgMHgwMCA6IHB1dHMgKCJFTkcgLSB0aGlzIGJvYXJkIHN1Y2tzLCBjaGVjayB0aGUgZXJyYXRhLCBub3Qgc3VwcG9ydGVkXG4iKTsKLSAgICAgICAgICAgICAgcmV0dXJuIC0xOworCSAgICAgIHJldHVybiAtMTsKICAgY2FzZSAweDAxIDogcHV0cyAoIlBJTE9UIC0gd2FybmluZywgcmVhZCBlcnJhdGEgXG4iKTsgYnJlYWs7CiAgIGNhc2UgMHgwMiA6IHB1dHMgKCJBIC0gd2FybmluZywgcmVhZCBlcnJhdGEgXG4iKTsgYnJlYWs7CiAgIGNhc2UgMHgwMyA6IHB1dHMgKCJCIFxuIik7IGJyZWFrOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZmFkcy91LWJvb3QubGRzIGIvYm9hcmQvZmFkcy91LWJvb3QubGRzCmluZGV4IGE3NmIwZmYuLjQxNzc2ZDEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZhZHMvdS1ib290LmxkcworKysgYi9ib2FyZC9mYWRzL3UtYm9vdC5sZHMKQEAgLTExMiw2ICsxMTIsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzOSw0ICsxNDQsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9mYWRzL3UtYm9vdC5sZHMuZGFuIGIvYm9hcmQvZmFkcy91LWJvb3QubGRzLmRhbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgyOWFhOS4uMDAwMDAwMAotLS0gYS9ib2FyZC9mYWRzL3UtYm9vdC5sZHMuZGFuCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLVNFQVJDSF9ESVIoL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL3Bvd2VycGMtYW55LWVsZi9saWIpOwotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KSAJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpIAl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKSAJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpIAl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvbXBjOHh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGNvbW1vbi9kbG1hbGxvYy5vCSgudGV4dCkKLSAgICBsaWJfcHBjL3BwY3N0cmluZy5vCSgudGV4dCkKLSAgICBsaWJfZ2VuZXJpYy92c3ByaW50Zi5vCSgudGV4dCkKLSAgICBsaWJfZ2VuZXJpYy9jcmMzMi5vCQkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCi0KLQotICAgICooLnRleHQpCi0gICAgKiguZml4dXApCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLnJvZGF0YSkKLSAgICAqKC5yb2RhdGExKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MEZGRikgJiAweEZGRkZGMDAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gIH0KLSAgLiA9IDB4Mjg0MDAwMDsKLSAgLnBwY2VudiAJOgotICB7Ci0vKgotICAgIC4gPSBlbnZfb2Zmc2V0OwotKi8KLSAgICBjb21tb24vZW52aXJvbm1lbnQubygucHBjZW52KQotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2ZhZHMvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2ZhZHMvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCBiZDEzYjdiLi4wMjQ1Zjc4IDEwMDY0NAotLS0gYS9ib2FyZC9mYWRzL3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvZmFkcy91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDcsNiArMTA3LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjksNCArMTM0LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZmxhZ2FkbS9NYWtlZmlsZSBiL2JvYXJkL2ZsYWdhZG0vTWFrZWZpbGUKaW5kZXggMzViODQyOC4uN2EyMDE0ZCAxMDA2NDQKLS0tIGEvYm9hcmQvZmxhZ2FkbS9NYWtlZmlsZQorKysgYi9ib2FyZC9mbGFnYWRtL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9mbGFnYWRtL3UtYm9vdC5sZHMgYi9ib2FyZC9mbGFnYWRtL3UtYm9vdC5sZHMKaW5kZXggODM0OGZlNy4uODdlMzIzYiAxMDA2NDQKLS0tIGEvYm9hcmQvZmxhZ2FkbS91LWJvb3QubGRzCisrKyBiL2JvYXJkL2ZsYWdhZG0vdS1ib290LmxkcwpAQCAtOTgsNiArOTgsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyMCw0ICsxMjUsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9mbGFnYWRtL3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9mbGFnYWRtL3UtYm9vdC5sZHMuZGVidWcKaW5kZXggOGRjNmQ0MC4uZjZmN2NmNCAxMDA2NDQKLS0tIGEvYm9hcmQvZmxhZ2FkbS91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL2ZsYWdhZG0vdS1ib290Lmxkcy5kZWJ1ZwpAQCAtMTA2LDYgKzEwNiwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTI4LDQgKzEzMywzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2dlbjg2MHQvTWFrZWZpbGUgYi9ib2FyZC9nZW44NjB0L01ha2VmaWxlCmluZGV4IDIxYmYwNDAuLmRkN2VjZjEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2dlbjg2MHQvTWFrZWZpbGUKKysrIGIvYm9hcmQvZ2VuODYwdC9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBiZWVwZXIubyBmcGdhLm8gaW9wb3J0Lm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2dlbjg2MHQvUkVBRE1FIGIvYm9hcmQvZ2VuODYwdC9SRUFETUUKaW5kZXggN2MwM2Y5My4uNzIwNWFmYiAxMDA2NDQKLS0tIGEvYm9hcmQvZ2VuODYwdC9SRUFETUUKKysrIGIvYm9hcmQvZ2VuODYwdC9SRUFETUUKQEAgLTE0NCw0ICsxNDQsMyBAQAogPG91dHdhdGVyQGVza2ltby5jb20+CiAKIHZpbTogc2V0IHRzPTQgc3c9NCB0dz03ODoKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZ2VuODYwdC91LWJvb3QtZmxhc2hlbnYubGRzIGIvYm9hcmQvZ2VuODYwdC91LWJvb3QtZmxhc2hlbnYubGRzCmluZGV4IGU5NWE2YTEuLmY0NmMzMTQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2dlbjg2MHQvdS1ib290LWZsYXNoZW52LmxkcworKysgYi9ib2FyZC9nZW44NjB0L3UtYm9vdC1mbGFzaGVudi5sZHMKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgKiguYnNzKQogICAgKihDT01NT04pCiAgIH0KLSAgCisKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZ2VuODYwdC91LWJvb3QubGRzIGIvYm9hcmQvZ2VuODYwdC91LWJvb3QubGRzCmluZGV4IGI3YjE5MGUuLmQ0YzI1OGYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2dlbjg2MHQvdS1ib290LmxkcworKysgYi9ib2FyZC9nZW44NjB0L3UtYm9vdC5sZHMKQEAgLTEwMSw2ICsxMDEsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL2dlbmlldHYvTWFrZWZpbGUgYi9ib2FyZC9nZW5pZXR2L01ha2VmaWxlCmluZGV4IGVmMTczZDAuLjEzY2U5ZmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2dlbmlldHYvTWFrZWZpbGUKKysrIGIvYm9hcmQvZ2VuaWV0di9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZ2VuaWV0di9nZW5pZXR2LmMgYi9ib2FyZC9nZW5pZXR2L2dlbmlldHYuYwppbmRleCA4ZjMyYWQ3Li5hNWU2NGIzIDEwMDY0NAotLS0gYS9ib2FyZC9nZW5pZXR2L2dlbmlldHYuYworKysgYi9ib2FyZC9nZW5pZXR2L2dlbmlldHYuYwpAQCAtNDksOSArNDksOSBAQAogCS8qCiAJICogU0RSQU0gSW5pdGlhbGl6YXRpb24gKG9mZnNldCA1IGluIFVQTUIgUkFNKQogCSAqCi0gICAgICAgICAqIFRoaXMgaXMgbm8gVVBNIGVudHJ5IHBvaW50LiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gdXNlcwotICAgICAgICAgKiB0aGUgcmVtYWluaW5nIHNwYWNlIHRvIGVzdGFibGlzaCBhbiBpbml0aWFsaXphdGlvbgotICAgICAgICAgKiBzZXF1ZW5jZSwgd2hpY2ggaXMgZXhlY3V0ZWQgYnkgYSBSVU4gY29tbWFuZC4KKwkgKiBUaGlzIGlzIG5vIFVQTSBlbnRyeSBwb2ludC4gVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHVzZXMKKwkgKiB0aGUgcmVtYWluaW5nIHNwYWNlIHRvIGVzdGFibGlzaCBhbiBpbml0aWFsaXphdGlvbgorCSAqIHNlcXVlbmNlLCB3aGljaCBpcyBleGVjdXRlZCBieSBhIFJVTiBjb21tYW5kLgogCSAqCiAJICovCiAJCSAgICAweDFGRkREQzM0LCAweEVGRUVBQzM0LCAweDFGQkQ1QzM1LCAvKiBsYXN0ICovCkBAIC0xOTgsMjEgKzE5OCwyMSBAQAogCiAgICAgaWYgKHNpemVfYjEgPiAwKQogICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogUG9zaXRpb24gQmFuayAxIGltbWVkaWF0ZWx5IGFib3ZlIEJhbmsgMAotICAgICAgICAgKi8KLSAgICAgICAgbWVtY3RsLT5tZW1jX29yMiA9ICgoLXNpemVfYjEpICYgMHhGRkZGMDAwMCkgfCBDRkdfT1JfVElNSU5HX1NEUkFNOwotICAgICAgICBtZW1jdGwtPm1lbWNfYnIyID0gKChDRkdfU0RSQU1fQkFTRSAmIEJSX0JBX01TSykgfCBCUl9NU19VUE1CIHwgQlJfVikgKwotCSAgICAgICAgICAgICAgICAgICAoc2l6ZV9iMCAmIEJSX0JBX01TSyk7CisJLyoKKwkgKiBQb3NpdGlvbiBCYW5rIDEgaW1tZWRpYXRlbHkgYWJvdmUgQmFuayAwCisJICovCisJbWVtY3RsLT5tZW1jX29yMiA9ICgoLXNpemVfYjEpICYgMHhGRkZGMDAwMCkgfCBDRkdfT1JfVElNSU5HX1NEUkFNOworCW1lbWN0bC0+bWVtY19icjIgPSAoKENGR19TRFJBTV9CQVNFICYgQlJfQkFfTVNLKSB8IEJSX01TX1VQTUIgfCBCUl9WKSArCisJCQkgICAoc2l6ZV9iMCAmIEJSX0JBX01TSyk7CiAgICAgfQogCWVsc2UKICAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIE5vIGJhbmsgMQotICAgICAgICAgKgotICAgICAgICAgKiBpbnZhbGlkYXRlIGJhbmsKLSAgICAgICAgICovCi0gICAgICAgIG1lbWN0bC0+bWVtY19icjIgPSAwOworCS8qCisJICogTm8gYmFuayAxCisJICoKKwkgKiBpbnZhbGlkYXRlIGJhbmsKKwkgKi8KKwltZW1jdGwtPm1lbWNfYnIyID0gMDsKIAkvKiBhZGp1c3QgcmVmcmVzaCByYXRlIGRlcGVuZGluZyBvbiBTRFJBTSB0eXBlLCBvbmUgYmFuayAqLwogCW1lbWN0bC0+bWVtY19tcHRwciA9IENGR19NUFRQUl8xQktfNEs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZ2VuaWV0di91LWJvb3QubGRzIGIvYm9hcmQvZ2VuaWV0di91LWJvb3QubGRzCmluZGV4IDQ1MWQ4NTMuLjI3NmUyYjQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2dlbmlldHYvdS1ib290LmxkcworKysgYi9ib2FyZC9nZW5pZXR2L3UtYm9vdC5sZHMKQEAgLTEwOCw2ICsxMDgsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzNSw0ICsxNDAsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9nZW5pZXR2L3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9nZW5pZXR2L3UtYm9vdC5sZHMuZGVidWcKaW5kZXggYWFmNThmMC4uNzQ5ODE3ZCAxMDA2NDQKLS0tIGEvYm9hcmQvZ2VuaWV0di91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL2dlbmlldHYvdS1ib290Lmxkcy5kZWJ1ZwpAQCAtMTA3LDYgKzEwNywxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTM0LDQgKzEzOSwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2d0aC9NYWtlZmlsZSBiL2JvYXJkL2d0aC9NYWtlZmlsZQppbmRleCA0NTcxYTA1Li5lMTRjMTJlIDEwMDY0NAotLS0gYS9ib2FyZC9ndGgvTWFrZWZpbGUKKysrIGIvYm9hcmQvZ3RoL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGVlX2FjY2Vzcy5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9ndGgvUkVBRE1FIGIvYm9hcmQvZ3RoL1JFQURNRQppbmRleCA0NGNhZjNhLi4yNDFjNzBiIDEwMDY0NAotLS0gYS9ib2FyZC9ndGgvUkVBRE1FCisrKyBiL2JvYXJkL2d0aC9SRUFETUUKQEAgLTE2LDUgKzE2LDMgQEAKIGZyb20gbWluaWJvb3QgdGhhdCBib290cyB0aGUgZmlyc3QgVS1Cb290IGltYWdlIGZvdW5kIGluCiBmbGFzaC4KIEZvciBtaW5pYm9vdCBjb2RlLCBkZXNjcmlwdGlvbiwgc2VlIHd3dy5vcGVuc291cmNlLnNlCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZ3RoL2NvbmZpZy5tayBiL2JvYXJkL2d0aC9jb25maWcubWsKaW5kZXggYjc0ZGZmMy4uM2M4MDE1NiAxMDA2NDQKLS0tIGEvYm9hcmQvZ3RoL2NvbmZpZy5taworKysgYi9ib2FyZC9ndGgvY29uZmlnLm1rCkBAIC0zOCw0ICszOCwzIEBACiBlbmRpZgogCiBPQkpDRkxBR1MgPQktLXNldC1zZWN0aW9uLWZsYWdzPS5wcGNlbnY9Y29udGVudHMsYWxsb2MsbG9hZCxkYXRhCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2d0aC91LWJvb3QubGRzIGIvYm9hcmQvZ3RoL3UtYm9vdC5sZHMKaW5kZXggYTVkNGJlZC4uNTBmNDFiNSAxMDA2NDQKLS0tIGEvYm9hcmQvZ3RoL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZ3RoL3UtYm9vdC5sZHMKQEAgLTk4LDYgKzk4LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjAsNCArMTI1LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvZ3c4MjYwL01ha2VmaWxlIGIvYm9hcmQvZ3c4MjYwL01ha2VmaWxlCmluZGV4IGZiNTBiMzguLjgyN2E2YWMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2d3ODI2MC9NYWtlZmlsZQorKysgYi9ib2FyZC9ndzgyNjAvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIFNPQkpTICAgOj0KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvZ3c4MjYwL3UtYm9vdC5sZHMgYi9ib2FyZC9ndzgyNjAvdS1ib290LmxkcwppbmRleCA2ZGI5YTY3Li4zMmU4ZjM5IDEwMDY0NAotLS0gYS9ib2FyZC9ndzgyNjAvdS1ib290LmxkcworKysgYi9ib2FyZC9ndzgyNjAvdS1ib290LmxkcwpAQCAtOTMsNiArOTMsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTExNSw0ICsxMjAsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9oZXJtZXMvTWFrZWZpbGUgYi9ib2FyZC9oZXJtZXMvTWFrZWZpbGUKaW5kZXggZWYxNzNkMC4uMTNjZTlmYyAxMDA2NDQKLS0tIGEvYm9hcmQvaGVybWVzL01ha2VmaWxlCisrKyBiL2JvYXJkL2hlcm1lcy9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvaGVybWVzL3UtYm9vdC5sZHMgYi9ib2FyZC9oZXJtZXMvdS1ib290LmxkcwppbmRleCBlNzEzMDU1Li40ZGJmN2E2IDEwMDY0NAotLS0gYS9ib2FyZC9oZXJtZXMvdS1ib290LmxkcworKysgYi9ib2FyZC9oZXJtZXMvdS1ib290LmxkcwpAQCAtMTA5LDYgKzEwOSwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvaGVybWVzL3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9oZXJtZXMvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCAxNTY4YTQ3Li40OWU4NGMwIDEwMDY0NAotLS0gYS9ib2FyZC9oZXJtZXMvdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9oZXJtZXMvdS1ib290Lmxkcy5kZWJ1ZwpAQCAtMTA2LDYgKzEwNiwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTI4LDQgKzEzMywzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2h5bW9kL01ha2VmaWxlIGIvYm9hcmQvaHltb2QvTWFrZWZpbGUKaW5kZXggNGQzMDk3Yy4uYjUyYWY5YSAxMDA2NDQKLS0tIGEvYm9hcmQvaHltb2QvTWFrZWZpbGUKKysrIGIvYm9hcmQvaHltb2QvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gYnNwLm8gZWVwcm9tLm8gZmV0Y2gubyBpbnB1dC5vIGVudi5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9oeW1vZC9ic3AuYyBiL2JvYXJkL2h5bW9kL2JzcC5jCmluZGV4IDAyYjY0MjEuLmYxMzFlNTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2h5bW9kL2JzcC5jCisrKyBiL2JvYXJkL2h5bW9kL2JzcC5jCkBAIC0yNzYsNyArMjc2LDMwIEBACiAJcHJpbnRmICgiVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKIAlyZXR1cm4gMTsKIH0KLQorY21kX3RibF90IFVfQk9PVF9DTUQoZnBnYSkgPSBNS19DTURfRU5UUlkoCisJImZwZ2EiLAk2LAkxLAlkb19mcGdhLAorCSJmcGdhICAgIC0gRlBHQSBzdWItc3lzdGVtXG4iLAorCSJsb2FkIFt0eXBlXSBhZGRyIHNpemVcbiIKKwkiICAtIHdyaXRlIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYXQgbWVtb3J5IGFkZHJlc3MgYGFkZHInLFxuIgorCSIgICAgc2l6ZSBgc2l6ZScgYnl0ZXMsIGludG8gdGhlIEZQR0Egb2YgdHlwZSBgdHlwZScgKGVpdGhlclxuIgorCSIgICAgYG1haW4nIG9yIGBtZXp6JywgZGVmYXVsdCBgbWFpbicpLiBlLmcuXG4iCisJIiAgICAgICAgYGZwZ2EgbG9hZCAxMDAwMDAgN2Q4ZidcbiIKKwkiICAgIGxvYWRzIHRoZSBtYWluIEZQR0Egd2l0aCBjb25maWcgZGF0YSBhdCBhZGRyZXNzIDEwMDAwMFxuIgorCSIgICAgSEVYLCBzaXplIDdkOGYgSEVYICgzMjE0MyBERUMpIGJ5dGVzXG4iCisJImZwZ2EgdGZ0cCBmaWxlIGFkZHJcbiIKKwkiICAtIHRyYW5zZmVycyBgZmlsZScgZnJvbSB0aGUgdGZ0cCBzZXJ2ZXIgaW50byBtZW1vcnkgYXRcbiIKKwkiICAgIGFkZHJlc3MgYGFkZHInLCB0aGVuIHdyaXRlcyB0aGUgZW50aXJlIGZpbGUgY29udGVudHNcbiIKKwkiICAgIGludG8gdGhlIG1haW4gRlBHQVxuIgorCSJmcGdhIHN0b3JlIGFkZHJcbiIKKwkiICAtIHJlYWQgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gdGhlIG1haW4gRlBHQSAodGhlIG1lenpcbiIKKwkiICAgIEZQR0EgaXMgd3JpdGUtb25seSksIGludG8gYWRkcmVzcyBgYWRkcicuIFRoZXJlIG11c3QgYmVcbiIKKwkiICAgIGVub3VnaCBtZW1vcnkgYXZhaWxhYmxlIGF0IGBhZGRyJyB0byBob2xkIGFsbCB0aGUgY29uZmlnXG4iCisJIiAgICBkYXRhIC0gdGhlIHNpemUgb2Ygd2hpY2ggaXMgZGV0ZXJtaW5lZCBieSBWQzo/Pz9cbiIKKwkiZnBnYSBpbmZvXG4iCisJIiAgLSBwcmludCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSHltb2QgRlBHQSwgbmFtZWx5IHRoZVxuIgorCSIgICAgbWVtb3J5IGFkZHJlc3NlcyBhdCB3aGljaCB0aGUgZm91ciBGUEdBIGxvY2FsIGJ1c1xuIgorCSIgICAgYWRkcmVzcyBzcGFjZXMgYXBwZWFyIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXG4iCispOwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogaW50CiBkb19lZWNsIChjbWRfdGJsX3QgKiBjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0zMTIsMTUgKzMzNSwxNyBAQAogCiAJcmV0dXJuIDA7CiB9CitjbWRfdGJsX3QgVV9CT09UX0NNRChlZWMpID0gTUtfQ01EX0VOVFJZKAorCSJlZWNsZWFyIiwJMSwJMCwJZG9fZWVjbCwKKwkiZWVjbGVhciAtIENsZWFyIHRoZSBlZXByb20gb24gYSBIeW1vZCBib2FyZCBcbiIsCisJIlt0eXBlXVxuIgorCSIgIC0gd3JpdGUgemVyb2VzIGludG8gdGhlIEVFUFJPTSBvbiB0aGUgYm9hcmQgb2YgdHlwZSBgdHlwZSdcbiIKKwkiICAgIChgdHlwZScgaXMgZWl0aGVyIGBtYWluJyBvciBgbWV6eicgLSBkZWZhdWx0IGBtYWluJylcbiIKKwkiICAgIE5vdGU6IHRoZSBFRVBST00gd3JpdGUgZW5hYmxlIGp1bXBlciBtdXN0IGJlIGluc3RhbGxlZFxuIgorKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgMAotc3RhdGljIHVjaGFyIHRlc3RfYml0ZmlsZVtdID0gewotCS8qIG9uZSBkYXkgLi4uICovCi19OwotI2VuZGlmCi0KIGludAogZG9faHRlc3QgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewpkaWZmIC0tZ2l0IGEvYm9hcmQvaHltb2QvdS1ib290LmxkcyBiL2JvYXJkL2h5bW9kL3UtYm9vdC5sZHMKaW5kZXggZDcxODU5Yy4uMWUyMDQyNSAxMDA2NDQKLS0tIGEvYm9hcmQvaHltb2QvdS1ib290LmxkcworKysgYi9ib2FyZC9oeW1vZC91LWJvb3QubGRzCkBAIC0xMTEsNiArMTExLDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMzgsNCArMTQzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaHltb2QvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2h5bW9kL3UtYm9vdC5sZHMuZGVidWcKaW5kZXggMjIxMzhmOC4uYzBlZTg0OSAxMDA2NDQKLS0tIGEvYm9hcmQvaHltb2QvdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9oeW1vZC91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDYsNiArMTA2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjgsNCArMTMzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaWN1ODYyL01ha2VmaWxlIGIvYm9hcmQvaWN1ODYyL01ha2VmaWxlCmluZGV4IDM1Yjg0MjguLjdhMjAxNGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ljdTg2Mi9NYWtlZmlsZQorKysgYi9ib2FyZC9pY3U4NjIvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2ljdTg2Mi91LWJvb3QubGRzIGIvYm9hcmQvaWN1ODYyL3UtYm9vdC5sZHMKaW5kZXggZTE0NTIwYi4uNDk2YzU5OCAxMDA2NDQKLS0tIGEvYm9hcmQvaWN1ODYyL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvaWN1ODYyL3UtYm9vdC5sZHMKQEAgLTExMiw2ICsxMTIsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzOSw0ICsxNDQsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9pY3U4NjIvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2ljdTg2Mi91LWJvb3QubGRzLmRlYnVnCmluZGV4IDIzNjUxMTYuLjdiODRmZDMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2ljdTg2Mi91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL2ljdTg2Mi91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDcsNiArMTA3LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjksNCArMTM0LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaW1wYTcvTWFrZWZpbGUgYi9ib2FyZC9pbXBhNy9NYWtlZmlsZQppbmRleCBkOTM2MzA4Li5mODMyM2UwIDEwMDY0NAotLS0gYS9ib2FyZC9pbXBhNy9NYWtlZmlsZQorKysgYi9ib2FyZC9pbXBhNy9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogU09CSlMJOj0gbWVtc2V0dXAubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9pbXBhNy9mbGFzaC5jIGIvYm9hcmQvaW1wYTcvZmxhc2guYwppbmRleCA3ZGIwYjMyLi5kYTRkMzFlIDEwMDY0NAotLS0gYS9ib2FyZC9pbXBhNy9mbGFzaC5jCisrKyBiL2JvYXJkL2ltcGE3L2ZsYXNoLmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgIC8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZAogICAgICAqLwogICAgIGlmICgoKmFkZHIgJiBkYXRhKSAhPSBkYXRhKQotICAgICAgICByZXR1cm4gRVJSX05PVF9FUkFTRUQ7CisJcmV0dXJuIEVSUl9OT1RfRVJBU0VEOwogCiAgICAgLyoKICAgICAgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0CmRpZmYgLS1naXQgYS9ib2FyZC9pbXBhNy9tZW1zZXR1cC5TIGIvYm9hcmQvaW1wYTcvbWVtc2V0dXAuUwppbmRleCBkMWQxYTU3Li41Y2I1ZmE4IDEwMDY0NAotLS0gYS9ib2FyZC9pbXBhNy9tZW1zZXR1cC5TCisrKyBiL2JvYXJkL2ltcGE3L21lbXNldHVwLlMKQEAgLTIxLDcgKzIxLDYgQEAKICAqLwogCiAKLQogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgPHZlcnNpb24uaD4KIApAQCAtODQsNCArODMsMyBAQAogCiAJLyogZXZlcnl0aGluZyBpcyBmaW5lIG5vdyAqLwogCW1vdglwYywgbHIKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaW1wYTcvdS1ib290LmxkcyBiL2JvYXJkL2ltcGE3L3UtYm9vdC5sZHMKaW5kZXggMDg0OTY0OC4uMzY1MjFiOCAxMDA2NDQKLS0tIGEvYm9hcmQvaW1wYTcvdS1ib290LmxkcworKysgYi9ib2FyZC9pbXBhNy91LWJvb3QubGRzCkBAIC0yNiwyOCArMjYsMzMgQEAKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7Ci0gICAgICAgIC4gPSAweDAwMDAwMDAwOworCS4gPSAweDAwMDAwMDAwOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKKwkuID0gQUxJR04oNCk7CiAJLnRleHQgICAgICA6CiAJewogCSAgY3B1L2FybTcyMHQvc3RhcnQubwkoLnRleHQpCiAJICAqKC50ZXh0KQogCX0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5kYXRhIDogeyAqKC5kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZ290IDogeyAqKC5nb3QpIH0KKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CiAKIAlhcm1ib290X2VuZF9kYXRhID0gLjsKIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5ic3MgOiB7ICooLmJzcykgfQorCS4gPSBBTElHTig0KTsKKwkuYnNzIDogeyAqKC5ic3MpIH0KIAogCWFybWJvb3RfZW5kID0gLjsKKwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5jYWlwL01ha2VmaWxlIGIvYm9hcmQvaW5jYWlwL01ha2VmaWxlCmluZGV4IGFkNTliZjAuLmQxY2RjNmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2luY2FpcC9NYWtlZmlsZQorKysgYi9ib2FyZC9pbmNhaXAvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIFNPQkpTCT0gbWVtc2V0dXAubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvaW5jYWlwL2ZsYXNoLmMgYi9ib2FyZC9pbmNhaXAvZmxhc2guYwppbmRleCBlN2ZkNTQwLi42ODZmMmU5IDEwMDY0NAotLS0gYS9ib2FyZC9pbmNhaXAvZmxhc2guYworKysgYi9ib2FyZC9pbmNhaXAvZmxhc2guYwpAQCAtODUsMTQgKzg1LDE0IEBACiAJCW1lbXNldCgmZmxhc2hfaW5mb1tpXSwgMCwgc2l6ZW9mKGZsYXNoX2luZm9fdCkpOwogI2VuZGlmCiAKLQkJZmxhc2hfaW5mb1tpXS5zaXplID0gCisJCWZsYXNoX2luZm9baV0uc2l6ZSA9CiAJCQlmbGFzaF9nZXRfc2l6ZSgoRlBXICopZmxhc2hiYXNlLCAmZmxhc2hfaW5mb1tpXSk7CiAKIAkJaWYgKGZsYXNoX2luZm9baV0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewogCQkJcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rICVkIC0gU2l6ZSA9IDB4JTA4bHhcbiIsCiAJCQlpLCBmbGFzaF9pbmZvW2ldLnNpemUpOwogCQl9Ci0JCQorCiAJCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOwogCX0KIApAQCAtMTcyLDEzICsxNzIsMTMgQEAKIHsKIAlpbnQgaTsKIAlmbGFzaF9pbmZvX3QgKiBpbmZvOwotCQorCiAJZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkgKyspIHsKIAkJaW5mbyA9ICYgZmxhc2hfaW5mb1tpXTsKIAkJaWYgKGluZm8tPnN0YXJ0WzBdIDw9IGJhc2UgJiYgYmFzZSA8IGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSkKIAkJCWJyZWFrOwogCX0KLQkKKwogCXJldHVybiBpID09IENGR19NQVhfRkxBU0hfQkFOS1MgPyAwIDogaW5mbzsKIH0KIApAQCAtMjI1LDMyICsyMjUsMzIgQEAKIAljYXNlIEZMQVNIX0FNNjQwVToKIAkJZm10ID0gIjI5TFY2NDFEICg2NCBNYml0LCB1bmlmb3JtIHNlY3RvcnMpXG4iOwogCQlicmVhazsKLSAgICAgICAgY2FzZSBGTEFTSF8yOEY4MDBDM0I6Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGODAwQzNUOgorCWNhc2UgRkxBU0hfMjhGODAwQzNCOgorCWNhc2UgRkxBU0hfMjhGODAwQzNUOgogCQlmbXQgPSAiMjhGODAwQzMlcyAoOCBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfSU5URUw4MDBCOgogCWNhc2UgRkxBU0hfSU5URUw4MDBUOgogCQlmbXQgPSAiMjhGODAwQjMlcyAoOCBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwotICAgICAgICBjYXNlIEZMQVNIXzI4RjE2MEMzQjoKLSAgICAgICAgY2FzZSBGTEFTSF8yOEYxNjBDM1Q6CisJY2FzZSBGTEFTSF8yOEYxNjBDM0I6CisJY2FzZSBGTEFTSF8yOEYxNjBDM1Q6CiAJCWZtdCA9ICIyOEYxNjBDMyVzICgxNiBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfSU5URUwxNjBCOgogCWNhc2UgRkxBU0hfSU5URUwxNjBUOgogCQlmbXQgPSAiMjhGMTYwQjMlcyAoMTYgTWJpdCwgJXMpXG4iOwogCQlicmVhazsKLSAgICAgICAgY2FzZSBGTEFTSF8yOEYzMjBDM0I6Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGMzIwQzNUOgorCWNhc2UgRkxBU0hfMjhGMzIwQzNCOgorCWNhc2UgRkxBU0hfMjhGMzIwQzNUOgogCQlmbXQgPSAiMjhGMzIwQzMlcyAoMzIgTWJpdCwgJXMpXG4iOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0lOVEVMMzIwQjoKIAljYXNlIEZMQVNIX0lOVEVMMzIwVDoKIAkJZm10ID0gIjI4RjMyMEIzJXMgKDMyIE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGNjQwQzNCOgotICAgICAgICBjYXNlIEZMQVNIXzI4RjY0MEMzVDoKKwljYXNlIEZMQVNIXzI4RjY0MEMzQjoKKwljYXNlIEZMQVNIXzI4RjY0MEMzVDoKIAkJZm10ID0gIjI4RjY0MEMzJXMgKDY0IE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9JTlRFTDY0MEI6CkBAIC01MzQsMTUgKzUzNCwxNSBAQAogCSBsZWZ0ID4gMCAmJiByZXMgPT0gMDsKIAkgYWRkciArPSBzaXplb2YoZGF0YSksIGxlZnQgLT0gc2l6ZW9mKGRhdGEpIC0gYnl0ZXMpIHsKIAotICAgICAgICBieXRlcyA9IGFkZHIgJiAoc2l6ZW9mKGRhdGEpIC0gMSk7Ci0gICAgICAgIGFkZHIgJj0gfihzaXplb2YoZGF0YSkgLSAxKTsKKwlieXRlcyA9IGFkZHIgJiAoc2l6ZW9mKGRhdGEpIC0gMSk7CisJYWRkciAmPSB+KHNpemVvZihkYXRhKSAtIDEpOwogCiAJLyogY29tYmluZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRhdGEgc28gY2FuIHByb2dyYW0KIAkgKiBhbiBlbnRpcmUgd29yZCBvZiAxNiBvciAzMiBiaXRzCiAJICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGF0YSk7IGkrKykgewotICAgICAgICAgICAgZGF0YSA8PD0gODsKLSAgICAgICAgICAgIGlmIChpIDwgYnl0ZXMgfHwgaSAtIGJ5dGVzID49IGxlZnQgKQorCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGF0YSk7IGkrKykgeworCSAgICBkYXRhIDw8PSA4OworCSAgICBpZiAoaSA8IGJ5dGVzIHx8IGkgLSBieXRlcyA+PSBsZWZ0ICkKIAkJZGF0YSArPSAqKCh1Y2hhciAqKWFkZHIgKyBpKTsKIAkgICAgZWxzZQogCQlkYXRhICs9ICpzcmMrKzsKZGlmZiAtLWdpdCBhL2JvYXJkL2luY2FpcC9tZW1zZXR1cC5TIGIvYm9hcmQvaW5jYWlwL21lbXNldHVwLlMKaW5kZXggZjFhZmI1Yy4uMjQ1YWI3MiAxMDA2NDQKLS0tIGEvYm9hcmQvaW5jYWlwL21lbXNldHVwLlMKKysrIGIvYm9hcmQvaW5jYWlwL21lbXNldHVwLlMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCXN3CXQxLCBNQ19NUlNDT0RFKHQwKQogCiAJLyogU2V0IHdvcmQgd2lkdGggdG8gMTYgYml0ICovCi0JbGkJdDEsIDB4MiAgCisJbGkJdDEsIDB4MgogCXN3CXQxLCBNQ19DRkdEVyh0MCkKIAogCS8qIFNldCBDUzAgdG8gU0RSQU0gcGFyYW1ldGVycyAqLwpAQCAtMTU0LDQgKzE1NCwzIEBACiAKIAlqCXJhCiAJbm9wCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2luY2FpcC91LWJvb3QubGRzIGIvYm9hcmQvaW5jYWlwL3UtYm9vdC5sZHMKaW5kZXggM2M5Y2E4OS4uYTJkMTlhOCAxMDA2NDQKLS0tIGEvYm9hcmQvaW5jYWlwL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvaW5jYWlwL3UtYm9vdC5sZHMKQEAgLTI5LDE5ICsyOSwxOSBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSAgICAgICAgLiA9IDB4MDAwMDAwMDA7CisJLiA9IDB4MDAwMDAwMDA7CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAkudGV4dCAgICAgICA6CiAJewogCSAgKigudGV4dCkKIAl9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAucm9kYXRhICA6IHsgKigucm9kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgIDogeyAqKC5yb2RhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5kYXRhICA6IHsgKiguZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkuZGF0YSAgOiB7ICooLmRhdGEpIH0KIAogCS4gPSBBTElHTig0KTsKIAkuc2RhdGEgIDogeyAqKC5zZGF0YSkgfQpAQCAtNTQsMTEgKzU0LDE1IEBACiAKIAkuc2RhdGEgIDogeyAqKC5zZGF0YSkgfQogCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOworCiAJdWJvb3RfZW5kX2RhdGEgPSAuOwogCW51bV9nb3RfZW50cmllcyA9IChfX2dvdF9lbmQgLSBfX2dvdF9zdGFydCkgPj4gMjsKIAotICAgICAgICAuID0gQUxJR04oNCk7CisJLiA9IEFMSUdOKDQpOwogCS5zYnNzICA6IHsgKiguc2JzcykgfQotICAgICAgICAuYnNzICA6IHsgKiguYnNzKSB9CisJLmJzcyAgOiB7ICooLmJzcykgfQogCXVib290X2VuZCA9IC47CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9pbm5va29tL01ha2VmaWxlIGIvYm9hcmQvaW5ub2tvbS9NYWtlZmlsZQppbmRleCA3ZmJlNzZiLi41OWVhZWU1IDEwMDY0NAotLS0gYS9ib2FyZC9pbm5va29tL01ha2VmaWxlCisrKyBiL2JvYXJkL2lubm9rb20vTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIFNPQkpTCTo9IG1lbXNldHVwLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5ub2tvbS9jb25maWcubWsgYi9ib2FyZC9pbm5va29tL2NvbmZpZy5tawppbmRleCA5MzlmZmZmLi4yMzU0MzkyIDEwMDY0NAotLS0gYS9ib2FyZC9pbm5va29tL2NvbmZpZy5taworKysgYi9ib2FyZC9pbm5va29tL2NvbmZpZy5tawpAQCAtMTMsNCArMTMsMyBAQAogIyBmb3IgdGhlIGFkZHJlc3NlcyBfYWZ0ZXJfIHJlbG9jYXRpb24gdG8gUkFNISEgT3RoZXJ3aGlzZSB0aGUKICMgLmJzcyBzZWdtZW50IGlzIGFzc3VtZWQgaW4gZmxhc2guLi4KIFRFWFRfQkFTRSA9IDB4YTFmZTAwMDAKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5ub2tvbS9mbGFzaC5jIGIvYm9hcmQvaW5ub2tvbS9mbGFzaC5jCmluZGV4IGI3YzIwNzIuLjNjYWY0M2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL2lubm9rb20vZmxhc2guYworKysgYi9ib2FyZC9pbm5va29tL2ZsYXNoLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqIFJvYmVydCBTY2h3ZWJlbCwgUGVuZ3V0cm9uaXgsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPgogICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogQXVlcnN3YWxkIEdtYkggJiBDbyBLRywgR2VybWFueSAKKyAqIEF1ZXJzd2FsZCBHbWJIICYgQ28gS0csIEdlcm1hbnkKICAqIEthaS1Vd2UgQmxvZW0gPGthaS11d2UuYmxvZW1AYXVlcnN3YWxkLmRlPgogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC00Miw3ICs0Miw2IEBACiAvKiBEZWJ1Z2dpbmcgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgKi8KIAogI3VuZGVmIEZMQVNIX0RFQlVHCi0vLyNkZWZpbmUgRkxBU0hfREVCVUcgMQogCiAvKiBTb21lIGRlYnVnIG1hY3JvcyAqLwogI2lmIChGTEFTSF9ERUJVRyA+IDIgKQpAQCAtMTA3LDEwICsxMDYsMTAgQEAKIAkvKiB1LWJvb3QgcGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJaWYocGFydF9udW09PTApewogCQltZW1zZXQoJnBhcnQsIDAsIHNpemVvZihwYXJ0KSk7Ci0JCQorCiAJCXBhcnQub2Zmc2V0PShjaGFyKikweDAwMDAwMDAwOwogCQlwYXJ0LnNpemU9MjU2KjEwMjQ7Ci0JCQorCiAJCS8qIE1hcmsgdGhlIHN0cnVjdCBhcyByZWFkeSAqLwogCQljdXJyZW50X3BhcnQgPSBwYXJ0X251bTsKIApAQCAtMTIxLDI0ICsxMjAsMjQgQEAKIAkvKiBwcmltYXJ5IE9TK2Zpcm13YXJlIHBhcnRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJaWYocGFydF9udW09PTEpewogCQltZW1zZXQoJnBhcnQsIDAsIHNpemVvZihwYXJ0KSk7Ci0JCQorCiAJCXBhcnQub2Zmc2V0PShjaGFyKikweDAwMDQwMDAwOwogCQlwYXJ0LnNpemU9NzY4KjEwMjQ7Ci0JCQorCiAJCS8qIE1hcmsgdGhlIHN0cnVjdCBhcyByZWFkeSAqLwogCQljdXJyZW50X3BhcnQgPSBwYXJ0X251bTsKIAogCQlQUklOVEsoInBhcnQub2Zmc2V0ID0gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpcGFydC5vZmZzZXQpOwogCQlQUklOVEsoInBhcnQuc2l6ZSAgID0gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpcGFydC5zaXplKTsKIAl9Ci0JCisKIAkvKiBzZWNvbmRhcnkgT1MrZmlybXdhcmUgcGFydGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJaWYocGFydF9udW09PTIpewogCQltZW1zZXQoJnBhcnQsIDAsIHNpemVvZihwYXJ0KSk7Ci0JCQorCiAJCXBhcnQub2Zmc2V0PShjaGFyKikweDAwMTAwMDAwOwogCQlwYXJ0LnNpemU9OCoxMDI0KjEwMjQ7Ci0JCQorCiAJCS8qIE1hcmsgdGhlIHN0cnVjdCBhcyByZWFkeSAqLwogCQljdXJyZW50X3BhcnQgPSBwYXJ0X251bTsKIApAQCAtMTQ5LDE3ICsxNDgsMTcgQEAKIAkvKiBkYXRhIHBhcnRpdGlvbiAqLwogCWlmKHBhcnRfbnVtPT0zKXsKIAkJbWVtc2V0KCZwYXJ0LCAwLCBzaXplb2YocGFydCkpOwotCQkKKwogCQlwYXJ0Lm9mZnNldD0oY2hhciopMHgwMDkwMDAwMDsKIAkJcGFydC5zaXplPTcqMTAyNCoxMDI0OwotCQkKKwogCQkvKiBNYXJrIHRoZSBzdHJ1Y3QgYXMgcmVhZHkgKi8KIAkJY3VycmVudF9wYXJ0ID0gcGFydF9udW07CiAKIAkJUFJJTlRLKCJwYXJ0Lm9mZnNldCA9IDB4JTA4eFxuIiwodW5zaWduZWQgaW50KXBhcnQub2Zmc2V0KTsKIAkJUFJJTlRLKCJwYXJ0LnNpemUgICA9IDB4JTA4eFxuIiwodW5zaWduZWQgaW50KXBhcnQuc2l6ZSk7CiAJfQotCQorCiAJaWYgKGN1cnJlbnRfcGFydCA9PSBwYXJ0X251bSkgewogCQlwYXJ0LnVzcl9wcml2ID0gJmN1cnJlbnRfcGFydDsKIAkJcGFydC5qZmZzMl9wcml2ID0gamZmczJfcHJpdl9zYXZlZDsKQEAgLTE4NiwxMCArMTg1LDEwIEBACiAJLyogdS1ib290IHBhcnRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCWlmKHBhcnRfbnVtPT0wKXsKIAkJbWVtc2V0KCZwYXJ0LCAwLCBzaXplb2YocGFydCkpOwotCQkKKwogCQlwYXJ0Lm9mZnNldD0oY2hhciopMHgwMDAwMDAwMDsKIAkJcGFydC5zaXplPTI1NioxMDI0OwotCQkKKwogCQkvKiBNYXJrIHRoZSBzdHJ1Y3QgYXMgcmVhZHkgKi8KIAkJY3VycmVudF9wYXJ0ID0gcGFydF9udW07CiAKQEAgLTIwMCwyNCArMTk5LDI0IEBACiAJLyogcHJpbWFyeSBPUytmaXJtd2FyZSBwYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCWlmKHBhcnRfbnVtPT0xKXsKIAkJbWVtc2V0KCZwYXJ0LCAwLCBzaXplb2YocGFydCkpOwotCQkKKwogCQlwYXJ0Lm9mZnNldD0oY2hhciopMHgwMDA0MDAwMDsKIAkJcGFydC5zaXplPTE2KjEwMjQqMTAyNC0xMjgqMTAyNDsKLQkJCisKIAkJLyogTWFyayB0aGUgc3RydWN0IGFzIHJlYWR5ICovCiAJCWN1cnJlbnRfcGFydCA9IHBhcnRfbnVtOwogCiAJCVBSSU5USygicGFydC5vZmZzZXQgPSAweCUwOHhcbiIsKHVuc2lnbmVkIGludClwYXJ0Lm9mZnNldCk7CiAJCVBSSU5USygicGFydC5zaXplICAgPSAweCUwOHhcbiIsKHVuc2lnbmVkIGludClwYXJ0LnNpemUpOwogCX0KLQkKKwogCS8qIHNlY29uZGFyeSBPUytmaXJtd2FyZSBwYXJ0aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAlpZihwYXJ0X251bT09Mil7CiAJCW1lbXNldCgmcGFydCwgMCwgc2l6ZW9mKHBhcnQpKTsKLQkJCisKIAkJcGFydC5vZmZzZXQ9KGNoYXIqKTB4MDEwMjAwMDA7CiAJCXBhcnQuc2l6ZT0xNioxMDI0KjEwMjQtMTI4KjEwMjQ7Ci0JCQorCiAJCS8qIE1hcmsgdGhlIHN0cnVjdCBhcyByZWFkeSAqLwogCQljdXJyZW50X3BhcnQgPSBwYXJ0X251bTsKIApAQCAtMjI4LDE3ICsyMjcsMTcgQEAKIAkvKiBkYXRhIHBhcnRpdGlvbiAqLwogCWlmKHBhcnRfbnVtPT0zKXsKIAkJbWVtc2V0KCZwYXJ0LCAwLCBzaXplb2YocGFydCkpOwotCQkKKwogCQlwYXJ0Lm9mZnNldD0oY2hhciopMHgwMjAwMDAwMDsKIAkJcGFydC5zaXplPTMyKjEwMjQqMTAyNDsKLQkJCisKIAkJLyogTWFyayB0aGUgc3RydWN0IGFzIHJlYWR5ICovCiAJCWN1cnJlbnRfcGFydCA9IHBhcnRfbnVtOwogCiAJCVBSSU5USygicGFydC5vZmZzZXQgPSAweCUwOHhcbiIsKHVuc2lnbmVkIGludClwYXJ0Lm9mZnNldCk7CiAJCVBSSU5USygicGFydC5zaXplICAgPSAweCUwOHhcbiIsKHVuc2lnbmVkIGludClwYXJ0LnNpemUpOwogCX0KLQkKKwogCWlmIChjdXJyZW50X3BhcnQgPT0gcGFydF9udW0pIHsKIAkJcGFydC51c3JfcHJpdiA9ICZjdXJyZW50X3BhcnQ7CiAJCXBhcnQuamZmczJfcHJpdiA9IGpmZnMyX3ByaXZfc2F2ZWQ7CkBAIC0zMzUsMTMgKzMzNCwxMyBAQAogCQkJCXJldHVybjsKIAkJfQogCi0JCXByaW50ZigiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwgCisJCXByaW50ZigiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKIAkJCWluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CiAKIAkJcHJpbnRmKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CiAJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewogCQkJaWYgKChpICUgNSkgPT0gMCkgcHJpbnRmICgiXG4gICAiKTsKLQkgICAgICAgIAorCiAJCQlwcmludGYgKCIgJTA4bFglcyIsIGluZm8tPnN0YXJ0W2ldLAogCQkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7CiAJCX0KQEAgLTM3MCw3ICszNjksNyBAQAogCiAJaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSAhPSAoSU5URUxfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSykpCiAJCXJldHVybiBFUlJfVU5LTk9XTl9GTEFTSF9WRU5ET1I7Ci0JCisKIAlwcm90ID0gMDsKIAlmb3IgKHNlY3Q9c19maXJzdDsgc2VjdDw9c19sYXN0OyArK3NlY3QpIHsKIAkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHByb3QrKzsKQEAgLTQyMCwxMyArNDE5LDEzIEBACiAJCQkJCWdvdG8gb3V0YWhlcmU7CiAJCQkJfQogCQkJfQotCQkJCisKIAkJCVBSSU5USygiY2xlYXJpbmcgc3RhdHVzIHJlZ2lzdGVyXG4iKTsKLQkJCSphZGRyID0gMHgwMDUwOyAKKwkJCSphZGRyID0gMHgwMDUwOwogCQkJUFJJTlRLKCJyZXNldHRpbmcgdG8gcmVhZCBtb2RlIik7Ci0JCQkqYWRkciA9IDB4MDBGRjsgCisJCQkqYWRkciA9IDB4MDBGRjsKIAkJfQotCQkKKwogCQlwcmludGYoIm9rLlxuIik7CiAJfQogCkBAIC01OTUsNCArNTk0LDMgQEAKIAogCXJldHVybiB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5ub2tvbS9pbm5va29tLmMgYi9ib2FyZC9pbm5va29tL2lubm9rb20uYwppbmRleCBkYTIzOGRhLi5hZTU0MDJlIDEwMDY0NAotLS0gYS9ib2FyZC9pbm5va29tL2lubm9rb20uYworKysgYi9ib2FyZC9pbm5va29tL2lubm9rb20uYwpAQCAtNDYsMTAgKzQ2LDEwIEBACiAJLyogZGlzYWJsZSBJMkMgY29udHJvbGxlciBmaXJzdCwgb3RoZXJ3aGlzZSBpdCB0aGlua3Mgd2Ugd2FudCB0byAgICAqLwogCS8qIHRhbGsgdG8gdGhlIHNsYXZlIHBvcnQuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAlpY3IgPSBJQ1I7IElDUiAmPSB+KElDUl9TQ0xFIHwgSUNSX0lVRSk7Ci0JCisKIAkvKiBzZXQgZ3BpbyBwaW4gbG93IF9iZWZvcmVfIHdlIGNoYW5nZSBkaXJlY3Rpb24gdG8gb3V0cHV0ICAgICAgICAgICovCiAJR1BDUig3MCkgPSBHUElPX2JpdCg3MCk7Ci0JCisKIAkvKiBub3cgdG9nZ2xlIGJldHdlZW4gb3V0cHV0PWxvdyBhbmQgaGlnaC1pbXBlZGFuY2UgICAgICAgICAgICAgICAgICovCiAJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKIAkJR1BEUig3MCkgfD0gR1BJT19iaXQoNzApOyAgLyogb3V0cHV0ICovCkBAIC0xNDQsMTggKzE0NCwxOCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSAxOiBpZiAoc3RhdGU9PTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BDUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGU9PTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BTUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQkJCUdQQ1IwIHw9IENTQjIyNl9VU0VSX0xFRDE7CisJCQl9IGVsc2UgaWYgKHN0YXRlPT0wKSB7CisJCQkJR1BTUjAgfD0gQ1NCMjI2X1VTRVJfTEVEMTsKKwkJCX0KKwkJCWJyZWFrOwogCiAJCWNhc2UgMjogaWYgKHN0YXRlPT0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQQ1IwIHw9IENTQjIyNl9VU0VSX0xFRDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlPT0wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQU1IwIHw9IENTQjIyNl9VU0VSX0xFRDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJCQlHUENSMCB8PSBDU0IyMjZfVVNFUl9MRUQyOworCQkJfSBlbHNlIGlmIChzdGF0ZT09MCkgeworCQkJCUdQU1IwIHw9IENTQjIyNl9VU0VSX0xFRDI7CisJCQl9CisJCQlicmVhazsKICovCiAJfQogCkBAIC0xODQsNCArMTg0LDMgQEAKIAogCXJldHVybjsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5ub2tvbS9tZW1zZXR1cC5TIGIvYm9hcmQvaW5ub2tvbS9tZW1zZXR1cC5TCmluZGV4IDYwZjlkNTAuLjY4NTc3Y2EgMTAwNjQ0Ci0tLSBhL2JvYXJkL2lubm9rb20vbWVtc2V0dXAuUworKysgYi9ib2FyZC9pbm5va29tL21lbXNldHVwLlMKQEAgLTE1OSw3ICsxNTksNyBAQAogCiBtZW1faW5pdDoKIAotICAgICAgICBsZHIgICAgIHIxLCAgPU1FTUNfQkFTRQkJLyogZ2V0IG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkci4gKi8KKwlsZHIgICAgIHIxLCAgPU1FTUNfQkFTRQkJLyogZ2V0IG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkci4gKi8KIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiBTdGVwIDJhOiBJbml0aWFsaXplIEFzeW5jaHJvbm91cyBzdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgICAgICAgICovCkBAIC0xNjcsNjUgKzE2Nyw2NSBAQAogCiAJLyogTVNDIHJlZ2lzdGVyczogdGltaW5nLCBidXMgd2lkdGgsIG1lbSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgIC8qIE1TQzA6IG5DUygwLDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgICA9Q0ZHX01TQzBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICAgW3IxLCAjTVNDMF9PRkZTRVRdCi0gICAgICAgIGxkciAgICAgcjIsICAgW3IxLCAjTVNDMF9PRkZTRVRdCS8qIHJlYWQgYmFjayB0byBlbnN1cmUgICAgICAqLworCS8qIE1TQzA6IG5DUygwLDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIyLCAgID1DRkdfTVNDMF9WQUwKKwlzdHIgICAgIHIyLCAgIFtyMSwgI01TQzBfT0ZGU0VUXQorCWxkciAgICAgcjIsICAgW3IxLCAjTVNDMF9PRkZTRVRdCS8qIHJlYWQgYmFjayB0byBlbnN1cmUgICAgICAqLwogCQkJCQkJLyogdGhhdCBkYXRhIGxhdGNoZXMgICAgICAgICovCi0gICAgICAgIC8qIE1TQzE6IG5DUygyLDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTVNDMV9WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01TQzFfT0ZGU0VUXQotICAgICAgICBsZHIgICAgIHIyLCAgW3IxLCAjTVNDMV9PRkZTRVRdCisJLyogTVNDMTogbkNTKDIsMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsICA9Q0ZHX01TQzFfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01TQzFfT0ZGU0VUXQorCWxkciAgICAgcjIsICBbcjEsICNNU0MxX09GRlNFVF0KIAogCS8qIE1TQzI6IG5DUyg0LDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTVNDMl9WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01TQzJfT0ZGU0VUXQotICAgICAgICBsZHIgICAgIHIyLCAgW3IxLCAjTVNDMl9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTVNDMl9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTVNDMl9PRkZTRVRdCisJbGRyICAgICByMiwgIFtyMSwgI01TQzJfT0ZGU0VUXQogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIFN0ZXAgMmI6IEluaXRpYWxpemUgQ2FyZCBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBNRUNSOiBNZW1vcnkgRXhwYW5zaW9uIENhcmQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01FQ1JfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNRUNSX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgPUNGR19NRUNSX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNRUNSX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01FQ1JfT0ZGU0VUXQogCiAJLyogTUNNRU0wOiBDYXJkIEludGVyZmFjZSBzbG90IDAgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ01FTTBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ01FTTBfT0ZGU0VUXQorCWxkciAgICAgcjIsICA9Q0ZHX01DTUVNMF9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTUNNRU0wX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DTUVNMF9PRkZTRVRdCiAKLSAgICAgICAgLyogTUNNRU0xOiBDYXJkIEludGVyZmFjZSBzbG90IDEgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ01FTTFfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ01FTTFfT0ZGU0VUXQorCS8qIE1DTUVNMTogQ2FyZCBJbnRlcmZhY2Ugc2xvdCAxIHRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIyLCAgPUNGR19NQ01FTTFfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DTUVNMV9PRkZTRVRdCiAJbGRyCXIyLAlbcjEsICNNQ01FTTFfT0ZGU0VUXQogCiAJLyogTUNBVFQwOiBDYXJkIEludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ0FUVDBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0FUVDBfT0ZGU0VUXQorCWxkciAgICAgcjIsICA9Q0ZHX01DQVRUMF9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTUNBVFQwX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DQVRUMF9PRkZTRVRdCiAKIAkvKiBNQ0FUVDE6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01DQVRUMV9WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01DQVRUMV9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTUNBVFQxX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNQ0FUVDFfT0ZGU0VUXQogCWxkcglyMiwJW3IxLCAjTUNBVFQxX09GRlNFVF0KIAogCS8qIE1DSU8wOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNJTzBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0lPMF9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTUNJTzBfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DSU8wX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DSU8wX09GRlNFVF0KIAogCS8qIE1DSU8xOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDEgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNJTzFfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0lPMV9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTUNJTzFfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DSU8xX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DSU8xX09GRlNFVF0KIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogU3RlcCAyYzogV3JpdGUgRkxZQ05GRyAgRklYTUU6IHdoYXQncyB0aGF0Pz8/ICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyYzogV3JpdGUgRkxZQ05GRyAgRklYTUU6IHdoYXQncyB0aGF0Pz8/ICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotICAgICAgICAvKiB0ZXN0IGlmIHdlIHJ1biBmcm9tIGZsYXNoIG9yIFJBTSAtIFJBTS9CREk6IGRvbid0IHNldHVwIFJBTSAgICAgICovCisJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gLSBSQU0vQkRJOiBkb24ndCBzZXR1cCBSQU0gICAgICAqLwogCWFkcglyMywgbWVtX2luaXQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCiAJbGRyCXIyLCA9bWVtX2luaXQKIAljbXAJcjMsIHIyCQkJLyogc2tpcCBpbml0IGlmIGluIHBsYWNlICAgICAgICAgICAgKi8KQEAgLTIzMyw4ICsyMzMsOCBAQAogCiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIFN0ZXAgMmQ6IEluaXRpYWxpemUgVGltaW5nIGZvciBTeW5jIE1lbW9yeSAoU0RDTEswKSAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgMmQ6IEluaXRpYWxpemUgVGltaW5nIGZvciBTeW5jIE1lbW9yeSAoU0RDTEswKSAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBCZWZvcmUgYWNjZXNzaW5nIE1EUkVGUiB3ZSBuZWVkIGEgdmFsaWQgRFJJIGZpZWxkLCBzbyB3ZSBzZXQgICAgICovCiAJLyogdGhpcyB0byBwb3dlciBvbiBkZWZhdWx0cyArIERSSSBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJb3JyCXI0LAlyNCwgIHIzCiAKIAlzdHIJcjQsCVtyMSwgI01EUkVGUl9PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHI0LAlbcjEsICNNRFJFRlJfT0ZGU0VUXQorCWxkciAgICAgcjQsCVtyMSwgI01EUkVGUl9PRkZTRVRdCiAKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI2Miw5ICsyNjIsOSBAQAogCS8qIEZJWE1FOiB3ZSB1c2UgYXN5bmMgbW9kZSBmb3Igbm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogU3RlcCA0OiBJbml0aWFsaXplIFNEUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgNDogSW5pdGlhbGl6ZSBTRFJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBTdGVwIDRhOiBhc3NlcnQgTURSRUZSOks/UlVOIGFuZCBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICovCiAJLyogICAgICAgICAgTURSRUZSOksxREIyIGFuZCBNRFJFRlI6SzJEQjIgYXMgZGVzaXJlZC4gICAgICAgICAgICAgICAqLwpAQCAtMjc3LDE2ICsyNzcsMTYgQEAKIAogCWJpYwlyNCwJcjQsICMoTURSRUZSX1NMRlJTSCkKIAotICAgICAgICBzdHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0gICAgLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCXN0ciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KKwlsZHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0KIAogCiAJLyogU3RlcCA0YzogYXNzZXJ0IE1EUkVGUjpFMVBJTiBhbmQgRTBQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAJb3JyCXI0LAlyNCwJIyhNRFJFRlJfRTFQSU58TURSRUZSX0UwUElOKQogCi0gICAgICAgIHN0ciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdCisJc3RyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdICAgIC8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLworCWxkciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXQogCiAKIAkvKiBTdGVwIDRkOiB3cml0ZSBNRENORkcgd2l0aCBNRENORkc6REV4IGRlYXNzZXJ0ZWQgKHNldCB0byAwKSwgdG8gICovCkBAIC0yOTUsOCArMjk1LDggQEAKIAlsZHIJcjQsCT1DRkdfTURDTkZHX1ZBTAogCWJpYwlyNCwJcjQsCSMoTURDTkZHX0RFMHxNRENORkdfREUxKQogCi0gICAgICAgIHN0ciAgICAgcjQsICAgICBbcjEsICNNRENORkdfT0ZGU0VUXQkvKiB3cml0ZSBiYWNrIE1EQ05GRyAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByNCwgICAgIFtyMSwgI01EQ05GR19PRkZTRVRdCisJc3RyICAgICByNCwgICAgIFtyMSwgI01EQ05GR19PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURDTkZHICAgICAgICAqLworCWxkciAgICAgcjQsICAgICBbcjEsICNNRENORkdfT0ZGU0VUXQogCiAKIAkvKiBTdGVwIDRlOiBXYWl0IGZvciB0aGUgY2xvY2sgdG8gdGhlIFNEUkFNcyB0byBzdGFiaWxpemUsICAgICAgICAgICovCkBAIC0zNDUsOCArMzQ1LDggQEAKIAogCS8qIFN0ZXAgNGg6IFdyaXRlIE1ETVJTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NRE1SU19WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01ETVJTX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgPUNGR19NRE1SU19WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTURNUlNfT0ZGU0VUXQogCiAKIAkvKiBXZSBhcmUgZmluaXNoZWQgd2l0aCBJbnRlbCdzIG1lbW9yeSBjb250cm9sbGVyIGluaXRpYWxpc2F0aW9uICAgICovCkBAIC0zNTcsMTcgKzM1NywxNyBAQAogCiBpbml0aXJxczoKIAotICAgICAgICBtb3YgICAgIHIxLCAjMAkJLyogY2xlYXIgaW50LiBsZXZlbCByZWdpc3RlciAoSVJRLCBub3QgRklRKSAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUlDTFIKLSAgICAgICAgc3RyICAgICByMSwgIFtyMl0KKwltb3YgICAgIHIxLCAjMAkJLyogY2xlYXIgaW50LiBsZXZlbCByZWdpc3RlciAoSVJRLCBub3QgRklRKSAqLworCWxkciAgICAgcjIsICA9SUNMUgorCXN0ciAgICAgcjEsICBbcjJdCiAKLSAgICAgICAgbGRyICAgICByMiwgID1JQ01SCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIGNvbnRyb2xsZXIgICAgKi8KLSAgICAgICAgc3RyICAgICByMSwgIFtyMl0KKwlsZHIgICAgIHIyLCAgPUlDTVIJLyogbWFzayBhbGwgaW50ZXJydXB0cyBhdCB0aGUgY29udHJvbGxlciAgICAqLworCXN0ciAgICAgcjEsICBbcjJdCiAKIAotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIENsb2NrIGluaXRpYWxpc2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogaW5pdGNsa3M6CiAKQEAgLTM3NiwzNCArMzc2LDM0IEBACiAKIAkvKiBUdXJuIE9mZiBBTEwgb24tY2hpcCBwZXJpcGhlcmFsIGNsb2NrcyBmb3IgcmUtY29uZmlndXJhdGlvbiAgICAgICovCiAJLyogTm90ZTogU2VlIGxhYmVsICdFTkFCTEVDTEtTJyBmb3IgdGhlIHJlLWVuYWJsaW5nICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIxLCAgPUNLRU4KLSAgICAgICAgbW92ICAgICByMiwgICMwCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjFdCisJbGRyICAgICByMSwgID1DS0VOCisJbW92ICAgICByMiwgICMwCisJc3RyICAgICByMiwgIFtyMV0KIAogCi0gICAgICAgIC8qIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB2YWxpZCByb3Rhcnkgc3dpdGNoIHNldHRpbmcgaXMgZm91bmQgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgPShDQ0NSX0wyN3xDQ0NSX00yfENDQ1JfTjEwKSAgLyogREVGQVVMVDogezIwMC8yMDAvMTAwfSAqLworCS8qIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB2YWxpZCByb3Rhcnkgc3dpdGNoIHNldHRpbmcgaXMgZm91bmQgICAgKi8KKwlsZHIgICAgIHIyLCA9KENDQ1JfTDI3fENDQ1JfTTJ8Q0NDUl9OMTApICAvKiBERUZBVUxUOiB7MjAwLzIwMC8xMDB9ICovCiAKLSAgICAgICAgLyogLi4uIGFuZCB3cml0ZSB0aGUgY29yZSBjbG9jayBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIxLCAgPUNDQ1IKLSAgICAgICAgc3RyICAgICByMiwgIFtyMV0KKwkvKiAuLi4gYW5kIHdyaXRlIHRoZSBjb3JlIGNsb2NrIGNvbmZpZyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMSwgID1DQ0NSCisJc3RyICAgICByMiwgIFtyMV0KIAogCS8qIGVuYWJsZSB0aGUgMzJLaHogb3NjaWxsYXRvciBmb3IgUlRDIGFuZCBQb3dlck1hbmFnZXIgICAgICAgICAgICAgKi8KIC8qCi0gICAgICAgIGxkciAgICAgcjEsICA9T1NDQwotICAgICAgICBtb3YgICAgIHIyLCAgI09TQ0NfT09OCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjFdCisJbGRyICAgICByMSwgID1PU0NDCisJbW92ICAgICByMiwgICNPU0NDX09PTgorCXN0ciAgICAgcjIsICBbcjFdCiAqLwogCS8qIE5PVEU6ICBzcGluIGhlcmUgdW50aWwgT1NDQy5PT0sgZ2V0IHNldCwgbWVhbmluZyB0aGUgUExMICAgICAgICAgKi8KIAkvKiBoYXMgc2V0dGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiA2MDoKLSAgICAgICAgbGRyICAgICByMiwgW3IxXQotICAgICAgICBhbmRzICAgIHIyLCByMiwgIzEKLSAgICAgICAgYmVxICAgICA2MGIKKwlsZHIgICAgIHIyLCBbcjFdCisJYW5kcyAgICByMiwgcjIsICMxCisJYmVxICAgICA2MGIKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBTYXZlIFNEUkFNIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJbGRyCXIxLCA9RFJBTV9TSVpFCkBAIC00MjgsMTEgKzQyOCwxMCBAQAogCW1jcglwMTQsMCxyMCxjMTAsYzAsMCAgLyogZGNzciAqLwogI2VuZGlmCiAKLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiBFbmQgbWVtc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIGVuZG1lbXNldHVwOgogCiAgICAgbW92ICAgICBwYywgbHIKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaW5ub2tvbS91LWJvb3QubGRzIGIvYm9hcmQvaW5ub2tvbS91LWJvb3QubGRzCmluZGV4IDQ2YmViMTUuLjExMzAwMTMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2lubm9rb20vdS1ib290LmxkcworKysgYi9ib2FyZC9pbm5va29tL3UtYm9vdC5sZHMKQEAgLTI2LDI5ICsyNiwzMyBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSAgICAgICAgLiA9IDB4MDAwMDAwMDA7CisJLiA9IDB4MDAwMDAwMDA7CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAkudGV4dCAgICAgIDoKIAl7CiAJICBjcHUvcHhhL3N0YXJ0Lm8JKC50ZXh0KQogCSAgKigudGV4dCkKIAl9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZGF0YSA6IHsgKiguZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmdvdCA6IHsgKiguZ290KSB9CisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOwogCiAJYXJtYm9vdF9lbmRfZGF0YSA9IC47CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAlic3Nfc3RhcnQgPSAuOwotICAgICAgICAuYnNzIDogeyAqKC5ic3MpIH0KKwkuYnNzIDogeyAqKC5ic3MpIH0KIAlic3NfZW5kID0gLjsKIAogCWFybWJvb3RfZW5kID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL2lwODYwL01ha2VmaWxlIGIvYm9hcmQvaXA4NjAvTWFrZWZpbGUKaW5kZXggZWYxNzNkMC4uMTNjZTlmYyAxMDA2NDQKLS0tIGEvYm9hcmQvaXA4NjAvTWFrZWZpbGUKKysrIGIvYm9hcmQvaXA4NjAvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2lwODYwL3UtYm9vdC5sZHMgYi9ib2FyZC9pcDg2MC91LWJvb3QubGRzCmluZGV4IDdiYzc0ZjMuLmQxOTY3MzEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2lwODYwL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvaXA4NjAvdS1ib290LmxkcwpAQCAtMTA5LDYgKzEwOSwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvaXA4NjAvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2lwODYwL3UtYm9vdC5sZHMuZGVidWcKaW5kZXggY2IzNmFkMy4uYjRkNjU3OSAxMDA2NDQKLS0tIGEvYm9hcmQvaXA4NjAvdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9pcDg2MC91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDcsNiArMTA3LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjksNCArMTM0LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaXBoYXNlNDUzOS9NYWtlZmlsZSBiL2JvYXJkL2lwaGFzZTQ1MzkvTWFrZWZpbGUKaW5kZXggNWZjY2U2Zi4uMTlkYTVkMCAxMDA2NDQKLS0tIGEvYm9hcmQvaXBoYXNlNDUzOS9NYWtlZmlsZQorKysgYi9ib2FyZC9pcGhhc2U0NTM5L01ha2VmaWxlCkBAIC0yNyw3ICsyNyw3IEBACiBPQkpTCTo9ICQoQk9BUkQpLm8gZmxhc2gubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9pcGhhc2U0NTM5L3UtYm9vdC5sZHMgYi9ib2FyZC9pcGhhc2U0NTM5L3UtYm9vdC5sZHMKaW5kZXggNWQ3OGQ0YS4uNjFmYjE1YzYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2lwaGFzZTQ1MzkvdS1ib290LmxkcworKysgYi9ib2FyZC9pcGhhc2U0NTM5L3UtYm9vdC5sZHMKQEAgLTkzLDYgKzkzLDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMTUsNCArMTIwLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaXZtL01ha2VmaWxlIGIvYm9hcmQvaXZtL01ha2VmaWxlCmluZGV4IGVmMTczZDAuLjEzY2U5ZmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2l2bS9NYWtlZmlsZQorKysgYi9ib2FyZC9pdm0vTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2l2bS9pdm0uYyBiL2JvYXJkL2l2bS9pdm0uYwppbmRleCAxMTdkYmU2Li43M2EzOTg3IDEwMDY0NAotLS0gYS9ib2FyZC9pdm0vaXZtLmMKKysrIGIvYm9hcmQvaXZtL2l2bS5jCkBAIC00OCw3ICs0OCw3IEBACiAJICovCiAJMHgwRkYzRkMwNCwgMHgwRkYzRUMwMCwgMHg3RkZGRUMwNCwgMHhGRkZGRUMwNCwKIAkweEZGRkZFQzA1LCAvKiBsYXN0ICovCi0JICAgICAgICAgICAgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwkJICAgIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCiAJLyoKIAkgKiBCdXJzdCBSZWFkLiAoT2Zmc2V0IDggaW4gVVBNIFJBTSkKIAkgKi8KQEAgLTYyLDcgKzYyLDcgQEAKIAkgKi8KIAkweDBGQUZGQzA0LCAweDBGQUZFQzAwLCAweDdGRkZFQzA0LCAweEZGRkZFQzA0LAogCTB4RkZGRkVDMDUsIC8qIGxhc3QgKi8KLQkgICAgICAgICAgICBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorCQkgICAgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAkvKgogCSAqIEJ1cnN0IFdyaXRlLiAoT2Zmc2V0IDIwIGluIFVQTSBSQU0pCiAJICovCkBAIC05OSw5ICs5OSw5IEBACiAJLyoKIAkgKiBTRFJBTSBJbml0aWFsaXphdGlvbiAob2Zmc2V0IDUgaW4gVVBNIFJBTSkKIAkgKgotICAgICAgICAgKiBUaGlzIGlzIG5vIFVQTSBlbnRyeSBwb2ludC4gVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHVzZXMKLSAgICAgICAgICogdGhlIHJlbWFpbmluZyBzcGFjZSB0byBlc3RhYmxpc2ggYW4gaW5pdGlhbGl6YXRpb24KLSAgICAgICAgICogc2VxdWVuY2UsIHdoaWNoIGlzIGV4ZWN1dGVkIGJ5IGEgUlVOIGNvbW1hbmQuCisJICogVGhpcyBpcyBubyBVUE0gZW50cnkgcG9pbnQuIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiB1c2VzCisJICogdGhlIHJlbWFpbmluZyBzcGFjZSB0byBlc3RhYmxpc2ggYW4gaW5pdGlhbGl6YXRpb24KKwkgKiBzZXF1ZW5jZSwgd2hpY2ggaXMgZXhlY3V0ZWQgYnkgYSBSVU4gY29tbWFuZC4KIAkgKgogCSAqLwogCQkgICAgMHgxRkY3N0MzNSwgMHhFRkVBQkMzNCwgMHgxRkI1N0MzNSwgLyogbGFzdCAqLwpAQCAtMzI0LDggKzMyNCw4IEBACiAJdWRlbGF5KDEwMDApOwogCiAJLyoKLSAgICAgICAgICogUkVTRVQgaXMgaW1wbGVtZW50ZWQgYnkgYSBwb3NpdGl2ZSBwdWxzZSBvZiBhdCBsZWFzdCAxIHVzCi0gICAgICAgICAqIGF0IHRoZSByZXNldCBwaW4uCisJICogUkVTRVQgaXMgaW1wbGVtZW50ZWQgYnkgYSBwb3NpdGl2ZSBwdWxzZSBvZiBhdCBsZWFzdCAxIHVzCisJICogYXQgdGhlIHJlc2V0IHBpbi4KIAkgKgogCSAqIENvbmZpZ3VyZSBSRVNFVCBwaW5zIGZvciBOUyBEUDgzODQzIFBIWSwgYW5kIFJFU0VUIGNoaXAuCiAJICoKZGlmZiAtLWdpdCBhL2JvYXJkL2l2bS91LWJvb3QubGRzIGIvYm9hcmQvaXZtL3UtYm9vdC5sZHMKaW5kZXggZDFlMTIxZS4uZWE0ZmM4ZiAxMDA2NDQKLS0tIGEvYm9hcmQvaXZtL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvaXZtL3UtYm9vdC5sZHMKQEAgLTk4LDYgKzk4LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjAsNCArMTI1LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvaXZtL3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9pdm0vdS1ib290Lmxkcy5kZWJ1ZwppbmRleCBlNjIxNTJhLi43YjUzMjE3IDEwMDY0NAotLS0gYS9ib2FyZC9pdm0vdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9pdm0vdS1ib290Lmxkcy5kZWJ1ZwpAQCAtMTA3LDYgKzEwNywxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTI5LDQgKzEzNCwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL2t1cDRrL01ha2VmaWxlIGIvYm9hcmQva3VwNGsvTWFrZWZpbGUKaW5kZXggYzc0OGQzNS4uZmRjNmZkNSAxMDA2NDQKLS0tIGEvYm9hcmQva3VwNGsvTWFrZWZpbGUKKysrIGIvYm9hcmQva3VwNGsvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2t1cDRrL2t1cDRrLmMgYi9ib2FyZC9rdXA0ay9rdXA0ay5jCmluZGV4IDc5ODFkZjMuLjNjMDgyMTQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2t1cDRrL2t1cDRrLmMKKysrIGIvYm9hcmQva3VwNGsva3VwNGsuYwpAQCAtMzI5LDkgKzMyOSw2IEBACiAJbWVtY3RsLT5tZW1jX2JyNSA9IDB4ODAwODA4MDE7CS8qIFN0YXJ0IGF0IDB4ODAwODAwMDAgKi8KIAogCi0KLQotCiAJZmJfaW5mby5WbWVtQWRkciA9ICh1bnNpZ25lZCBjaGFyICopIChTMURfUEhZU0lDQUxfVk1FTV9BRERSKTsKIAlmYl9pbmZvLlJlZ0FkZHIgPSAodW5zaWduZWQgY2hhciAqKSAoUzFEX1BIWVNJQ0FMX1JFR19BRERSKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQva3VwNGsvdS1ib290LmxkcyBiL2JvYXJkL2t1cDRrL3UtYm9vdC5sZHMKaW5kZXggYjJkODA5MC4uZjgxYTEwZSAxMDA2NDQKLS0tIGEvYm9hcmQva3VwNGsvdS1ib290LmxkcworKysgYi9ib2FyZC9rdXA0ay91LWJvb3QubGRzCkBAIC0xMTIsNiArMTEyLDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMzQsNCArMTM5LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQva3VwNGsvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2t1cDRrL3UtYm9vdC5sZHMuZGVidWcKaW5kZXggZmRkODM2ZS4uODdmNzA0YSAxMDA2NDQKLS0tIGEvYm9hcmQva3VwNGsvdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9rdXA0ay91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDYsNiArMTA2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjgsNCArMTMzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbGFudGVjL01ha2VmaWxlIGIvYm9hcmQvbGFudGVjL01ha2VmaWxlCmluZGV4IDM1Yjg0MjguLjdhMjAxNGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2xhbnRlYy9NYWtlZmlsZQorKysgYi9ib2FyZC9sYW50ZWMvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2xhbnRlYy91LWJvb3QubGRzIGIvYm9hcmQvbGFudGVjL3UtYm9vdC5sZHMKaW5kZXggYWIzYmViNy4uMWY4NTgxYyAxMDA2NDQKLS0tIGEvYm9hcmQvbGFudGVjL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvbGFudGVjL3UtYm9vdC5sZHMKQEAgLTEwOSw2ICsxMDksMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzMSw0ICsxMzYsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9sYW50ZWMvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2xhbnRlYy91LWJvb3QubGRzLmRlYnVnCmluZGV4IGZkM2ExYzYuLmM2NDA4N2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL2xhbnRlYy91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL2xhbnRlYy91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDYsNiArMTA2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjgsNCArMTMzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbGFydC9NYWtlZmlsZSBiL2JvYXJkL2xhcnQvTWFrZWZpbGUKaW5kZXggMTJhMDM2Ny4uNDJjZWIwMyAxMDA2NDQKLS0tIGEvYm9hcmQvbGFydC9NYWtlZmlsZQorKysgYi9ib2FyZC9sYXJ0L01ha2VmaWxlCkBAIC0yOSw3ICsyOSw3IEBACiBTT0JKUwk6PSBmbGFzaGFzbS5vIG1lbXNldHVwLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvbGFydC9mbGFzaC5jIGIvYm9hcmQvbGFydC9mbGFzaC5jCmluZGV4IDg5YWI2MmMuLmFkNjEzNGIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2xhcnQvZmxhc2guYworKysgYi9ib2FyZC9sYXJ0L2ZsYXNoLmMKQEAgLTMxNyw3ICszMTcsNyBAQAogCSAgICAqYWRkciA9IFBVWlpMRV9UT19GTEFTSChDTURfUkVBRF9BUlJBWSk7CiAKIAkgICAgaWYgKChyYyA9IGZsYXNoX2Vycm9yKHJlc3VsdCkpICE9IEVSUl9PSykKLQkgICAgCWdvdG8gb3V0YWhlcmU7CisJCWdvdG8gb3V0YWhlcmU7CiAKIAkgICAgcHJpbnRmKCJvay5cbiIpOwogCX0KQEAgLTM1OCw3ICszNTgsNyBAQAogICAgICAqLwogICAgIHJlc3VsdCA9IFBVWlpMRV9GUk9NX0ZMQVNIKCphZGRyKTsKICAgICBpZiAoKHJlc3VsdCAmIGRhdGEpICE9IGRhdGEpCi0gICAgICAgIHJldHVybiBFUlJfTk9UX0VSQVNFRDsKKwlyZXR1cm4gRVJSX05PVF9FUkFTRUQ7CiAKICAgICAvKgogICAgICAqIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQKZGlmZiAtLWdpdCBhL2JvYXJkL2xhcnQvbWVtc2V0dXAuUyBiL2JvYXJkL2xhcnQvbWVtc2V0dXAuUwppbmRleCBiZWJkNjk3Li42MzVmMmEwIDEwMDY0NAotLS0gYS9ib2FyZC9sYXJ0L21lbXNldHVwLlMKKysrIGIvYm9hcmQvbGFydC9tZW1zZXR1cC5TCkBAIC0yNCw3ICsyNCw2IEBACiAgKi8KIAogCi0KICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDx2ZXJzaW9uLmg+CiAKQEAgLTkzLDQgKzkyLDMgQEAKIAogCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSBub3cgKi8KIAltb3YJcGMsIGxyCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2xhcnQvdS1ib290LmxkcyBiL2JvYXJkL2xhcnQvdS1ib290LmxkcwppbmRleCBmNGIwYWRlLi5iM2YzNGNhIDEwMDY0NAotLS0gYS9ib2FyZC9sYXJ0L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvbGFydC91LWJvb3QubGRzCkBAIC0yNiwyOCArMjYsMzIgQEAKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7Ci0gICAgICAgIC4gPSAweDAwMDAwMDAwOworCS4gPSAweDAwMDAwMDAwOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKKwkuID0gQUxJR04oNCk7CiAJLnRleHQgICAgICA6CiAJewogCSAgY3B1L3NhMTEwMC9zdGFydC5vCSgudGV4dCkKIAkgICooLnRleHQpCiAJfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmRhdGEgOiB7ICooLmRhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5nb3QgOiB7ICooLmdvdCkgfQorCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKIAogCWFybWJvb3RfZW5kX2RhdGEgPSAuOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmJzcyA6IHsgKiguYnNzKSB9CisJLiA9IEFMSUdOKDQpOworCS5ic3MgOiB7ICooLmJzcykgfQogCiAJYXJtYm9vdF9lbmQgPSAuOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbG9nb2RsL2NvbmZpZy5tayBiL2JvYXJkL2xvZ29kbC9jb25maWcubWsKaW5kZXggNDE2NjM1Ny4uNzZjMzgyZCAxMDA2NDQKLS0tIGEvYm9hcmQvbG9nb2RsL2NvbmZpZy5taworKysgYi9ib2FyZC9sb2dvZGwvY29uZmlnLm1rCkBAIC0xMSw1ICsxMSw1IEBACiAjIEZJWE1FOiBhcm1ib290IGRvZXMgb25seSB3b3JrIGNvcnJlY3RseSB3aGVuIGJlaW5nIGNvbXBpbGVkCiAjICMgZm9yIHRoZSBhZGRyZXNzZXMgX2FmdGVyXyByZWxvY2F0aW9uIHRvIFJBTSEhIE90aGVyd2hpc2UgdGhlCiAjICMgLmJzcyBzZWdtZW50IGlzIGFzc3VtZWQgaW4gZmxhc2guLi4KLSMgCisjCiBURVhUX0JBU0UgPSAweDA4M0UwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9sb2dvZGwvZmxhc2guYyBiL2JvYXJkL2xvZ29kbC9mbGFzaC5jCmluZGV4IDM4Mzc0MDEuLmNlZjBiNGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2xvZ29kbC9mbGFzaC5jCisrKyBiL2JvYXJkL2xvZ29kbC9mbGFzaC5jCkBAIC04MiwxOCArODIsMTggQEAKIAlmbGFzaF9pbmZvW2ldLnNpemUgPSBGTEFTSF9CQU5LX1NJWkU7CiAJZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQgPSBDRkdfTUFYX0ZMQVNIX1NFQ1Q7CiAJbWVtc2V0KGZsYXNoX2luZm9baV0ucHJvdGVjdCwgMCwgQ0ZHX01BWF9GTEFTSF9TRUNUKTsKLSAgICAgICAgc3dpdGNoIChpKQotICAgICAgICB7Ci0gICAgICAgICAgIGNhc2UgMDoKLQkgICAgICAgIGZsYXNoYmFzZSA9IFBIWVNfRkxBU0hfMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgY2FzZSAxOgotCSAgICAgICAgZmxhc2hiYXNlID0gUEhZU19GTEFTSF8yOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICBkZWZhdWx0OgotCSAgICAgICAgcGFuaWMoImNvbmZpZ3VyZWQgdG8gbWFueSBmbGFzaCBiYW5rcyFcbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJc3dpdGNoIChpKQorCXsKKwkgICBjYXNlIDA6CisJCWZsYXNoYmFzZSA9IFBIWVNfRkxBU0hfMTsKKwkJYnJlYWs7CisJICAgY2FzZSAxOgorCQlmbGFzaGJhc2UgPSBQSFlTX0ZMQVNIXzI7CisJCWJyZWFrOworCSAgIGRlZmF1bHQ6CisJCXBhbmljKCJjb25maWd1cmVkIHRvIG1hbnkgZmxhc2ggYmFua3MhXG4iKTsKKwkJYnJlYWs7CisJfQogCWZvciAoaiA9IDA7IGogPCBmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudDsgaisrKQogCXsKIAkgICAgZmxhc2hfaW5mb1tpXS5zdGFydFtqXSA9IGZsYXNoYmFzZSArIGoqTUFJTl9TRUNUX1NJWkU7CkBAIC0yMDgsMzIgKzIwOCwzMiBAQAogCWNhc2UgRkxBU0hfQU02NDBVOgogCQlmbXQgPSAiMjlMVjY0MUQgKDY0IE1iaXQsIHVuaWZvcm0gc2VjdG9ycylcbiI7CiAJCWJyZWFrOwotICAgICAgICBjYXNlIEZMQVNIXzI4RjgwMEMzQjoKLSAgICAgICAgY2FzZSBGTEFTSF8yOEY4MDBDM1Q6CisJY2FzZSBGTEFTSF8yOEY4MDBDM0I6CisJY2FzZSBGTEFTSF8yOEY4MDBDM1Q6CiAJCWZtdCA9ICIyOEY4MDBDMyVzICg4IE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9JTlRFTDgwMEI6CiAJY2FzZSBGTEFTSF9JTlRFTDgwMFQ6CiAJCWZtdCA9ICIyOEY4MDBCMyVzICg4IE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGMTYwQzNCOgotICAgICAgICBjYXNlIEZMQVNIXzI4RjE2MEMzVDoKKwljYXNlIEZMQVNIXzI4RjE2MEMzQjoKKwljYXNlIEZMQVNIXzI4RjE2MEMzVDoKIAkJZm10ID0gIjI4RjE2MEMzJXMgKDE2IE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9JTlRFTDE2MEI6CiAJY2FzZSBGTEFTSF9JTlRFTDE2MFQ6CiAJCWZtdCA9ICIyOEYxNjBCMyVzICgxNiBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwotICAgICAgICBjYXNlIEZMQVNIXzI4RjMyMEMzQjoKLSAgICAgICAgY2FzZSBGTEFTSF8yOEYzMjBDM1Q6CisJY2FzZSBGTEFTSF8yOEYzMjBDM0I6CisJY2FzZSBGTEFTSF8yOEYzMjBDM1Q6CiAJCWZtdCA9ICIyOEYzMjBDMyVzICgzMiBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfSU5URUwzMjBCOgogCWNhc2UgRkxBU0hfSU5URUwzMjBUOgogCQlmbXQgPSAiMjhGMzIwQjMlcyAoMzIgTWJpdCwgJXMpXG4iOwogCQlicmVhazsKLSAgICAgICAgY2FzZSBGTEFTSF8yOEY2NDBDM0I6Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGNjQwQzNUOgorCWNhc2UgRkxBU0hfMjhGNjQwQzNCOgorCWNhc2UgRkxBU0hfMjhGNjQwQzNUOgogCQlmbXQgPSAiMjhGNjQwQzMlcyAoNjQgTWJpdCwgJXMpXG4iOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0lOVEVMNjQwQjoKQEAgLTU1NCwxNSArNTU0LDE1IEBACiAJIGxlZnQgPiAwICYmIHJlcyA9PSAwOwogCSBhZGRyICs9IHNpemVvZihkYXRhKSwgbGVmdCAtPSBzaXplb2YoZGF0YSkgLSBieXRlcykgewogCi0gICAgICAgIGJ5dGVzID0gYWRkciAmIChzaXplb2YoZGF0YSkgLSAxKTsKLSAgICAgICAgYWRkciAmPSB+KHNpemVvZihkYXRhKSAtIDEpOworCWJ5dGVzID0gYWRkciAmIChzaXplb2YoZGF0YSkgLSAxKTsKKwlhZGRyICY9IH4oc2l6ZW9mKGRhdGEpIC0gMSk7CiAKIAkvKiBjb21iaW5lIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGF0YSBzbyBjYW4gcHJvZ3JhbQogCSAqIGFuIGVudGlyZSB3b3JkIG9mIDE2IG9yIDMyIGJpdHMKIAkgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihkYXRhKTsgaSsrKSB7Ci0gICAgICAgICAgICBkYXRhIDw8PSA4OwotICAgICAgICAgICAgaWYgKGkgPCBieXRlcyB8fCBpIC0gYnl0ZXMgPj0gbGVmdCApCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihkYXRhKTsgaSsrKSB7CisJICAgIGRhdGEgPDw9IDg7CisJICAgIGlmIChpIDwgYnl0ZXMgfHwgaSAtIGJ5dGVzID49IGxlZnQgKQogCQlkYXRhICs9ICooKHVjaGFyICopYWRkciArIGkpOwogCSAgICBlbHNlCiAJCWRhdGEgKz0gKnNyYysrOwpAQCAtNjYyLDcgKzY2Miw2IEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2ggZm9yIEFNRCBGTEFTSAogICogQSB3b3JkIGlzIDE2IG9yIDMyIGJpdHMsIHdoaWNoZXZlciB0aGUgYnVzIHdpZHRoIG9mIHRoZSBmbGFzaCBiYW5rCmRpZmYgLS1naXQgYS9ib2FyZC9sb2dvZGwvbG9nb2RsLmMgYi9ib2FyZC9sb2dvZGwvbG9nb2RsLmMKaW5kZXggZjE2YzA1Yi4uOTU2MzRhYyAxMDA2NDQKLS0tIGEvYm9hcmQvbG9nb2RsL2xvZ29kbC5jCisrKyBiL2JvYXJkL2xvZ29kbC9sb2dvZGwuYwpAQCAtNjIsNyArNjIsNyBAQAogCWdkLT5iZC0+YmlfZHJhbVswXS5zdGFydCA9IFBIWVNfU0RSQU1fMTsKIAlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOwogCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2xvZ29kbC9tZW1zZXR1cC5TIGIvYm9hcmQvbG9nb2RsL21lbXNldHVwLlMKaW5kZXggNjBmOWQ1MC4uNjg1NzdjYSAxMDA2NDQKLS0tIGEvYm9hcmQvbG9nb2RsL21lbXNldHVwLlMKKysrIGIvYm9hcmQvbG9nb2RsL21lbXNldHVwLlMKQEAgLTE1OSw3ICsxNTksNyBAQAogCiBtZW1faW5pdDoKIAotICAgICAgICBsZHIgICAgIHIxLCAgPU1FTUNfQkFTRQkJLyogZ2V0IG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkci4gKi8KKwlsZHIgICAgIHIxLCAgPU1FTUNfQkFTRQkJLyogZ2V0IG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkci4gKi8KIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiBTdGVwIDJhOiBJbml0aWFsaXplIEFzeW5jaHJvbm91cyBzdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgICAgICAgICovCkBAIC0xNjcsNjUgKzE2Nyw2NSBAQAogCiAJLyogTVNDIHJlZ2lzdGVyczogdGltaW5nLCBidXMgd2lkdGgsIG1lbSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgIC8qIE1TQzA6IG5DUygwLDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgICA9Q0ZHX01TQzBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICAgW3IxLCAjTVNDMF9PRkZTRVRdCi0gICAgICAgIGxkciAgICAgcjIsICAgW3IxLCAjTVNDMF9PRkZTRVRdCS8qIHJlYWQgYmFjayB0byBlbnN1cmUgICAgICAqLworCS8qIE1TQzA6IG5DUygwLDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIyLCAgID1DRkdfTVNDMF9WQUwKKwlzdHIgICAgIHIyLCAgIFtyMSwgI01TQzBfT0ZGU0VUXQorCWxkciAgICAgcjIsICAgW3IxLCAjTVNDMF9PRkZTRVRdCS8qIHJlYWQgYmFjayB0byBlbnN1cmUgICAgICAqLwogCQkJCQkJLyogdGhhdCBkYXRhIGxhdGNoZXMgICAgICAgICovCi0gICAgICAgIC8qIE1TQzE6IG5DUygyLDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTVNDMV9WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01TQzFfT0ZGU0VUXQotICAgICAgICBsZHIgICAgIHIyLCAgW3IxLCAjTVNDMV9PRkZTRVRdCisJLyogTVNDMTogbkNTKDIsMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWxkciAgICAgcjIsICA9Q0ZHX01TQzFfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01TQzFfT0ZGU0VUXQorCWxkciAgICAgcjIsICBbcjEsICNNU0MxX09GRlNFVF0KIAogCS8qIE1TQzI6IG5DUyg0LDUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTVNDMl9WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01TQzJfT0ZGU0VUXQotICAgICAgICBsZHIgICAgIHIyLCAgW3IxLCAjTVNDMl9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTVNDMl9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTVNDMl9PRkZTRVRdCisJbGRyICAgICByMiwgIFtyMSwgI01TQzJfT0ZGU0VUXQogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIFN0ZXAgMmI6IEluaXRpYWxpemUgQ2FyZCBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBNRUNSOiBNZW1vcnkgRXhwYW5zaW9uIENhcmQgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01FQ1JfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNRUNSX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgPUNGR19NRUNSX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNRUNSX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01FQ1JfT0ZGU0VUXQogCiAJLyogTUNNRU0wOiBDYXJkIEludGVyZmFjZSBzbG90IDAgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ01FTTBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ01FTTBfT0ZGU0VUXQorCWxkciAgICAgcjIsICA9Q0ZHX01DTUVNMF9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTUNNRU0wX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DTUVNMF9PRkZTRVRdCiAKLSAgICAgICAgLyogTUNNRU0xOiBDYXJkIEludGVyZmFjZSBzbG90IDEgdGltaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ01FTTFfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ01FTTFfT0ZGU0VUXQorCS8qIE1DTUVNMTogQ2FyZCBJbnRlcmZhY2Ugc2xvdCAxIHRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIyLCAgPUNGR19NQ01FTTFfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DTUVNMV9PRkZTRVRdCiAJbGRyCXIyLAlbcjEsICNNQ01FTTFfT0ZGU0VUXQogCiAJLyogTUNBVFQwOiBDYXJkIEludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ0FUVDBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0FUVDBfT0ZGU0VUXQorCWxkciAgICAgcjIsICA9Q0ZHX01DQVRUMF9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTUNBVFQwX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DQVRUMF9PRkZTRVRdCiAKIAkvKiBNQ0FUVDE6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01DQVRUMV9WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01DQVRUMV9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTUNBVFQxX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNQ0FUVDFfT0ZGU0VUXQogCWxkcglyMiwJW3IxLCAjTUNBVFQxX09GRlNFVF0KIAogCS8qIE1DSU8wOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNJTzBfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0lPMF9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTUNJTzBfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DSU8wX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DSU8wX09GRlNFVF0KIAogCS8qIE1DSU8xOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDEgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNJTzFfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0lPMV9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTUNJTzFfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DSU8xX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DSU8xX09GRlNFVF0KIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogU3RlcCAyYzogV3JpdGUgRkxZQ05GRyAgRklYTUU6IHdoYXQncyB0aGF0Pz8/ICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyYzogV3JpdGUgRkxZQ05GRyAgRklYTUU6IHdoYXQncyB0aGF0Pz8/ICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotICAgICAgICAvKiB0ZXN0IGlmIHdlIHJ1biBmcm9tIGZsYXNoIG9yIFJBTSAtIFJBTS9CREk6IGRvbid0IHNldHVwIFJBTSAgICAgICovCisJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gLSBSQU0vQkRJOiBkb24ndCBzZXR1cCBSQU0gICAgICAqLwogCWFkcglyMywgbWVtX2luaXQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCiAJbGRyCXIyLCA9bWVtX2luaXQKIAljbXAJcjMsIHIyCQkJLyogc2tpcCBpbml0IGlmIGluIHBsYWNlICAgICAgICAgICAgKi8KQEAgLTIzMyw4ICsyMzMsOCBAQAogCiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIFN0ZXAgMmQ6IEluaXRpYWxpemUgVGltaW5nIGZvciBTeW5jIE1lbW9yeSAoU0RDTEswKSAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgMmQ6IEluaXRpYWxpemUgVGltaW5nIGZvciBTeW5jIE1lbW9yeSAoU0RDTEswKSAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBCZWZvcmUgYWNjZXNzaW5nIE1EUkVGUiB3ZSBuZWVkIGEgdmFsaWQgRFJJIGZpZWxkLCBzbyB3ZSBzZXQgICAgICovCiAJLyogdGhpcyB0byBwb3dlciBvbiBkZWZhdWx0cyArIERSSSBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJb3JyCXI0LAlyNCwgIHIzCiAKIAlzdHIJcjQsCVtyMSwgI01EUkVGUl9PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHI0LAlbcjEsICNNRFJFRlJfT0ZGU0VUXQorCWxkciAgICAgcjQsCVtyMSwgI01EUkVGUl9PRkZTRVRdCiAKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI2Miw5ICsyNjIsOSBAQAogCS8qIEZJWE1FOiB3ZSB1c2UgYXN5bmMgbW9kZSBmb3Igbm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogU3RlcCA0OiBJbml0aWFsaXplIFNEUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgNDogSW5pdGlhbGl6ZSBTRFJBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBTdGVwIDRhOiBhc3NlcnQgTURSRUZSOks/UlVOIGFuZCBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICovCiAJLyogICAgICAgICAgTURSRUZSOksxREIyIGFuZCBNRFJFRlI6SzJEQjIgYXMgZGVzaXJlZC4gICAgICAgICAgICAgICAqLwpAQCAtMjc3LDE2ICsyNzcsMTYgQEAKIAogCWJpYwlyNCwJcjQsICMoTURSRUZSX1NMRlJTSCkKIAotICAgICAgICBzdHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0gICAgLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCXN0ciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KKwlsZHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0KIAogCiAJLyogU3RlcCA0YzogYXNzZXJ0IE1EUkVGUjpFMVBJTiBhbmQgRTBQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAJb3JyCXI0LAlyNCwJIyhNRFJFRlJfRTFQSU58TURSRUZSX0UwUElOKQogCi0gICAgICAgIHN0ciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdCisJc3RyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdICAgIC8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLworCWxkciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXQogCiAKIAkvKiBTdGVwIDRkOiB3cml0ZSBNRENORkcgd2l0aCBNRENORkc6REV4IGRlYXNzZXJ0ZWQgKHNldCB0byAwKSwgdG8gICovCkBAIC0yOTUsOCArMjk1LDggQEAKIAlsZHIJcjQsCT1DRkdfTURDTkZHX1ZBTAogCWJpYwlyNCwJcjQsCSMoTURDTkZHX0RFMHxNRENORkdfREUxKQogCi0gICAgICAgIHN0ciAgICAgcjQsICAgICBbcjEsICNNRENORkdfT0ZGU0VUXQkvKiB3cml0ZSBiYWNrIE1EQ05GRyAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByNCwgICAgIFtyMSwgI01EQ05GR19PRkZTRVRdCisJc3RyICAgICByNCwgICAgIFtyMSwgI01EQ05GR19PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURDTkZHICAgICAgICAqLworCWxkciAgICAgcjQsICAgICBbcjEsICNNRENORkdfT0ZGU0VUXQogCiAKIAkvKiBTdGVwIDRlOiBXYWl0IGZvciB0aGUgY2xvY2sgdG8gdGhlIFNEUkFNcyB0byBzdGFiaWxpemUsICAgICAgICAgICovCkBAIC0zNDUsOCArMzQ1LDggQEAKIAogCS8qIFN0ZXAgNGg6IFdyaXRlIE1ETVJTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NRE1SU19WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01ETVJTX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgPUNGR19NRE1SU19WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTURNUlNfT0ZGU0VUXQogCiAKIAkvKiBXZSBhcmUgZmluaXNoZWQgd2l0aCBJbnRlbCdzIG1lbW9yeSBjb250cm9sbGVyIGluaXRpYWxpc2F0aW9uICAgICovCkBAIC0zNTcsMTcgKzM1NywxNyBAQAogCiBpbml0aXJxczoKIAotICAgICAgICBtb3YgICAgIHIxLCAjMAkJLyogY2xlYXIgaW50LiBsZXZlbCByZWdpc3RlciAoSVJRLCBub3QgRklRKSAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUlDTFIKLSAgICAgICAgc3RyICAgICByMSwgIFtyMl0KKwltb3YgICAgIHIxLCAjMAkJLyogY2xlYXIgaW50LiBsZXZlbCByZWdpc3RlciAoSVJRLCBub3QgRklRKSAqLworCWxkciAgICAgcjIsICA9SUNMUgorCXN0ciAgICAgcjEsICBbcjJdCiAKLSAgICAgICAgbGRyICAgICByMiwgID1JQ01SCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIGNvbnRyb2xsZXIgICAgKi8KLSAgICAgICAgc3RyICAgICByMSwgIFtyMl0KKwlsZHIgICAgIHIyLCAgPUlDTVIJLyogbWFzayBhbGwgaW50ZXJydXB0cyBhdCB0aGUgY29udHJvbGxlciAgICAqLworCXN0ciAgICAgcjEsICBbcjJdCiAKIAotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIENsb2NrIGluaXRpYWxpc2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogaW5pdGNsa3M6CiAKQEAgLTM3NiwzNCArMzc2LDM0IEBACiAKIAkvKiBUdXJuIE9mZiBBTEwgb24tY2hpcCBwZXJpcGhlcmFsIGNsb2NrcyBmb3IgcmUtY29uZmlndXJhdGlvbiAgICAgICovCiAJLyogTm90ZTogU2VlIGxhYmVsICdFTkFCTEVDTEtTJyBmb3IgdGhlIHJlLWVuYWJsaW5nICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIxLCAgPUNLRU4KLSAgICAgICAgbW92ICAgICByMiwgICMwCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjFdCisJbGRyICAgICByMSwgID1DS0VOCisJbW92ICAgICByMiwgICMwCisJc3RyICAgICByMiwgIFtyMV0KIAogCi0gICAgICAgIC8qIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB2YWxpZCByb3Rhcnkgc3dpdGNoIHNldHRpbmcgaXMgZm91bmQgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgPShDQ0NSX0wyN3xDQ0NSX00yfENDQ1JfTjEwKSAgLyogREVGQVVMVDogezIwMC8yMDAvMTAwfSAqLworCS8qIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB2YWxpZCByb3Rhcnkgc3dpdGNoIHNldHRpbmcgaXMgZm91bmQgICAgKi8KKwlsZHIgICAgIHIyLCA9KENDQ1JfTDI3fENDQ1JfTTJ8Q0NDUl9OMTApICAvKiBERUZBVUxUOiB7MjAwLzIwMC8xMDB9ICovCiAKLSAgICAgICAgLyogLi4uIGFuZCB3cml0ZSB0aGUgY29yZSBjbG9jayBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIxLCAgPUNDQ1IKLSAgICAgICAgc3RyICAgICByMiwgIFtyMV0KKwkvKiAuLi4gYW5kIHdyaXRlIHRoZSBjb3JlIGNsb2NrIGNvbmZpZyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMSwgID1DQ0NSCisJc3RyICAgICByMiwgIFtyMV0KIAogCS8qIGVuYWJsZSB0aGUgMzJLaHogb3NjaWxsYXRvciBmb3IgUlRDIGFuZCBQb3dlck1hbmFnZXIgICAgICAgICAgICAgKi8KIC8qCi0gICAgICAgIGxkciAgICAgcjEsICA9T1NDQwotICAgICAgICBtb3YgICAgIHIyLCAgI09TQ0NfT09OCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjFdCisJbGRyICAgICByMSwgID1PU0NDCisJbW92ICAgICByMiwgICNPU0NDX09PTgorCXN0ciAgICAgcjIsICBbcjFdCiAqLwogCS8qIE5PVEU6ICBzcGluIGhlcmUgdW50aWwgT1NDQy5PT0sgZ2V0IHNldCwgbWVhbmluZyB0aGUgUExMICAgICAgICAgKi8KIAkvKiBoYXMgc2V0dGxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiA2MDoKLSAgICAgICAgbGRyICAgICByMiwgW3IxXQotICAgICAgICBhbmRzICAgIHIyLCByMiwgIzEKLSAgICAgICAgYmVxICAgICA2MGIKKwlsZHIgICAgIHIyLCBbcjFdCisJYW5kcyAgICByMiwgcjIsICMxCisJYmVxICAgICA2MGIKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAkvKiBTYXZlIFNEUkFNIHNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJbGRyCXIxLCA9RFJBTV9TSVpFCkBAIC00MjgsMTEgKzQyOCwxMCBAQAogCW1jcglwMTQsMCxyMCxjMTAsYzAsMCAgLyogZGNzciAqLwogI2VuZGlmCiAKLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiBFbmQgbWVtc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIGVuZG1lbXNldHVwOgogCiAgICAgbW92ICAgICBwYywgbHIKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbG9nb2RsL3UtYm9vdC5sZHMgYi9ib2FyZC9sb2dvZGwvdS1ib290LmxkcwppbmRleCA0NmJlYjE1Li41YWVmMTI3IDEwMDY0NAotLS0gYS9ib2FyZC9sb2dvZGwvdS1ib290LmxkcworKysgYi9ib2FyZC9sb2dvZGwvdS1ib290LmxkcwpAQCAtMjYsMjkgKzI2LDI5IEBACiBFTlRSWShfc3RhcnQpCiBTRUNUSU9OUwogewotICAgICAgICAuID0gMHgwMDAwMDAwMDsKKwkuID0gMHgwMDAwMDAwMDsKIAotICAgICAgICAuID0gQUxJR04oNCk7CisJLiA9IEFMSUdOKDQpOwogCS50ZXh0ICAgICAgOgogCXsKIAkgIGNwdS9weGEvc3RhcnQubwkoLnRleHQpCiAJICAqKC50ZXh0KQogCX0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5kYXRhIDogeyAqKC5kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZ290IDogeyAqKC5nb3QpIH0KKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CiAKIAlhcm1ib290X2VuZF9kYXRhID0gLjsKIAotICAgICAgICAuID0gQUxJR04oNCk7CisJLiA9IEFMSUdOKDQpOwogCWJzc19zdGFydCA9IC47Ci0gICAgICAgIC5ic3MgOiB7ICooLmJzcykgfQorCS5ic3MgOiB7ICooLmJzcykgfQogCWJzc19lbmQgPSAuOwogCiAJYXJtYm9vdF9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbHViYm9jay9NYWtlZmlsZSBiL2JvYXJkL2x1YmJvY2svTWFrZWZpbGUKaW5kZXggNmRkZDcyZS4uMGUyOWU3YiAxMDA2NDQKLS0tIGEvYm9hcmQvbHViYm9jay9NYWtlZmlsZQorKysgYi9ib2FyZC9sdWJib2NrL01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAorCiAjCiAjIChDKSBDb3B5cmlnaHQgMjAwMAogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgpAQCAtMjksNyArMzAsNyBAQAogU09CSlMJOj0gbWVtc2V0dXAubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9sdWJib2NrL2NvbmZpZy5tayBiL2JvYXJkL2x1YmJvY2svY29uZmlnLm1rCmluZGV4IDBmZmUxYmEuLmQyYTIwNDAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2x1YmJvY2svY29uZmlnLm1rCisrKyBiL2JvYXJkL2x1YmJvY2svY29uZmlnLm1rCkBAIC0xLDQgKzEsMyBAQAogI1RFWFRfQkFTRSA9IDB4YTE3MDAwMDAKIFRFWFRfQkFTRSA9IDB4YTMwMDAwMDAKICNURVhUX0JBU0UgPSAwCi0KZGlmZiAtLWdpdCBhL2JvYXJkL2x1YmJvY2svbWVtc2V0dXAuUyBiL2JvYXJkL2x1YmJvY2svbWVtc2V0dXAuUwppbmRleCA1YmJkODU5Li5kYzBiN2JlIDEwMDY0NAotLS0gYS9ib2FyZC9sdWJib2NrL21lbXNldHVwLlMKKysrIGIvYm9hcmQvbHViYm9jay9tZW1zZXR1cC5TCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogbWVtX2luaXQ6CiAKLSAgICAgICAgbGRyICAgICByMSwgID1NRU1DX0JBU0UJCS8qIGdldCBtZW1vcnkgY29udHJvbGxlciBiYXNlIGFkZHIuICovCisJbGRyICAgICByMSwgID1NRU1DX0JBU0UJCS8qIGdldCBtZW1vcnkgY29udHJvbGxlciBiYXNlIGFkZHIuICovCiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJLyogU3RlcCAyYTogSW5pdGlhbGl6ZSBBc3luY2hyb25vdXMgc3RhdGljIG1lbW9yeSBjb250cm9sbGVyICAgICAgICAqLwpAQCAtMTQ4LDgxICsxNDgsODEgQEAKIAogCS8qIE1TQyByZWdpc3RlcnM6IHRpbWluZywgYnVzIHdpZHRoLCBtZW0gdHlwZSAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAvKiBNU0MwOiBuQ1MoMCwxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICAgPUNGR19NU0MwX1ZBTAotICAgICAgICBzdHIgICAgIHIyLCAgIFtyMSwgI01TQzBfT0ZGU0VUXQotICAgICAgICBsZHIgICAgIHIyLCAgIFtyMSwgI01TQzBfT0ZGU0VUXQkvKiByZWFkIGJhY2sgdG8gZW5zdXJlICAgICAgKi8KKwkvKiBNU0MwOiBuQ1MoMCwxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMiwgICA9Q0ZHX01TQzBfVkFMCisJc3RyICAgICByMiwgICBbcjEsICNNU0MwX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgIFtyMSwgI01TQzBfT0ZGU0VUXQkvKiByZWFkIGJhY2sgdG8gZW5zdXJlICAgICAgKi8KIAkJCQkJCS8qIHRoYXQgZGF0YSBsYXRjaGVzICAgICAgICAqLwotICAgICAgICAvKiBNU0MxOiBuQ1MoMiwzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01TQzFfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNU0MxX09GRlNFVF0KLSAgICAgICAgbGRyICAgICByMiwgIFtyMSwgI01TQzFfT0ZGU0VUXQorCS8qIE1TQzE6IG5DUygyLDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlsZHIgICAgIHIyLCAgPUNGR19NU0MxX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNU0MxX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgW3IxLCAjTVNDMV9PRkZTRVRdCiAKIAkvKiBNU0MyOiBuQ1MoNCw1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01TQzJfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNU0MyX09GRlNFVF0KLSAgICAgICAgbGRyICAgICByMiwgIFtyMSwgI01TQzJfT0ZGU0VUXQorCWxkciAgICAgcjIsICA9Q0ZHX01TQzJfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01TQzJfT0ZGU0VUXQorCWxkciAgICAgcjIsICBbcjEsICNNU0MyX09GRlNFVF0KIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiBTdGVwIDJiOiBJbml0aWFsaXplIENhcmQgSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAJLyogTUVDUjogTWVtb3J5IEV4cGFuc2lvbiBDYXJkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NRUNSX1ZBTAotICAgICAgICBzdHIgICAgIHIyLCAgW3IxLCAjTUVDUl9PRkZTRVRdCisJbGRyICAgICByMiwgID1DRkdfTUVDUl9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTUVDUl9PRkZTRVRdCiAJbGRyCXIyLAlbcjEsICNNRUNSX09GRlNFVF0KIAogCS8qIE1DTUVNMDogQ2FyZCBJbnRlcmZhY2Ugc2xvdCAwIHRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNNRU0wX1ZBTAotICAgICAgICBzdHIgICAgIHIyLCAgW3IxLCAjTUNNRU0wX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgPUNGR19NQ01FTTBfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DTUVNMF9PRkZTRVRdCiAJbGRyCXIyLAlbcjEsICNNQ01FTTBfT0ZGU0VUXQogCi0gICAgICAgIC8qIE1DTUVNMTogQ2FyZCBJbnRlcmZhY2Ugc2xvdCAxIHRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNNRU0xX1ZBTAotICAgICAgICBzdHIgICAgIHIyLCAgW3IxLCAjTUNNRU0xX09GRlNFVF0KKwkvKiBNQ01FTTE6IENhcmQgSW50ZXJmYWNlIHNsb3QgMSB0aW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMiwgID1DRkdfTUNNRU0xX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNQ01FTTFfT0ZGU0VUXQogCWxkcglyMiwJW3IxLCAjTUNNRU0xX09GRlNFVF0KIAogCS8qIE1DQVRUMDogQ2FyZCBJbnRlcmZhY2UgQXR0cmlidXRlIFNwYWNlIFRpbWluZywgc2xvdCAwICAgICAgICAgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgID1DRkdfTUNBVFQwX1ZBTAotICAgICAgICBzdHIgICAgIHIyLCAgW3IxLCAjTUNBVFQwX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgPUNGR19NQ0FUVDBfVkFMCisJc3RyICAgICByMiwgIFtyMSwgI01DQVRUMF9PRkZTRVRdCiAJbGRyCXIyLAlbcjEsICNNQ0FUVDBfT0ZGU0VUXQogCiAJLyogTUNBVFQxOiBDYXJkIEludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgVGltaW5nLCBzbG90IDEgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NQ0FUVDFfVkFMCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjEsICNNQ0FUVDFfT0ZGU0VUXQorCWxkciAgICAgcjIsICA9Q0ZHX01DQVRUMV9WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTUNBVFQxX09GRlNFVF0KIAlsZHIJcjIsCVtyMSwgI01DQVRUMV9PRkZTRVRdCiAKIAkvKiBNQ0lPMDogQ2FyZCBJbnRlcmZhY2UgSS9PIFNwYWNlIFRpbWluZywgc2xvdCAwICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01DSU8wX1ZBTAotICAgICAgICBzdHIgICAgIHIyLCAgW3IxLCAjTUNJTzBfT0ZGU0VUXQorCWxkciAgICAgcjIsICA9Q0ZHX01DSU8wX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNQ0lPMF9PRkZTRVRdCiAJbGRyCXIyLAlbcjEsICNNQ0lPMF9PRkZTRVRdCiAKIAkvKiBNQ0lPMTogQ2FyZCBJbnRlcmZhY2UgSS9PIFNwYWNlIFRpbWluZywgc2xvdCAxICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjIsICA9Q0ZHX01DSU8xX1ZBTAotICAgICAgICBzdHIgICAgIHIyLCAgW3IxLCAjTUNJTzFfT0ZGU0VUXQorCWxkciAgICAgcjIsICA9Q0ZHX01DSU8xX1ZBTAorCXN0ciAgICAgcjIsICBbcjEsICNNQ0lPMV9PRkZTRVRdCiAJbGRyCXIyLAlbcjEsICNNQ0lPMV9PRkZTRVRdCiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC8qIFN0ZXAgMmM6IFdyaXRlIEZMWUNORkcgIEZJWE1FOiB3aGF0J3MgdGhhdD8/PyAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIFN0ZXAgMmM6IFdyaXRlIEZMWUNORkcgIEZJWE1FOiB3aGF0J3MgdGhhdD8/PyAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogU3RlcCAyZDogSW5pdGlhbGl6ZSBUaW1pbmcgZm9yIFN5bmMgTWVtb3J5IChTRENMSzApICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCAyZDogSW5pdGlhbGl6ZSBUaW1pbmcgZm9yIFN5bmMgTWVtb3J5IChTRENMSzApICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCS8qIEJlZm9yZSBhY2Nlc3NpbmcgTURSRUZSIHdlIG5lZWQgYSB2YWxpZCBEUkkgZmllbGQsIHNvIHdlIHNldCAgICAgKi8KIAkvKiB0aGlzIHRvIHBvd2VyIG9uIGRlZmF1bHRzICsgRFJJIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgbGRyICAgICByMywgICAgID1DRkdfTURSRUZSX1ZBTAotICAgICAgICBsZHIgICAgIHIyLCAgICAgPTB4RkZGCi0gICAgICAgIGFuZCAgICAgcjMsICAgICByMywgIHIyCisJbGRyICAgICByMywgICAgID1DRkdfTURSRUZSX1ZBTAorCWxkciAgICAgcjIsICAgICA9MHhGRkYKKwlhbmQgICAgIHIzLCAgICAgcjMsICByMgogCWxkcglyNCwJPTB4MDNjYTQwMDAKLSAgICAgICAgb3JyICAgICByNCwgICAgIHI0LCAgcjMKKwlvcnIgICAgIHI0LCAgICAgcjQsICByMwogCXN0cglyNCwJW3IxLCAjTURSRUZSX09GRlNFVF0JLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCWxkciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQogCi0gICAgICAgIC8qIE5vdGU6IHByZXNlcnZlIHRoZSBtZHJlZnIgdmFsdWUgaW4gcjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBOb3RlOiBwcmVzZXJ2ZSB0aGUgbWRyZWZyIHZhbHVlIGluIHI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIzOCwzMCArMjM4LDMwIEBACiAJLyogRklYTUU6IHdlIHVzZSBhc3luYyBtb2RlIGZvciBub3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAKLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICAvKiBTdGVwIDQ6IEluaXRpYWxpemUgU0RSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogU3RlcCA0OiBJbml0aWFsaXplIFNEUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotICAgICAgICAvKiBzZXQgTURSRUZSIGFjY29yZGluZyB0byB1c2VyIGRlZmluZSB3aXRoIGV4Y2VwdGlvbiBvZiBhIGZldyBiaXRzICovCisJLyogc2V0IE1EUkVGUiBhY2NvcmRpbmcgdG8gdXNlciBkZWZpbmUgd2l0aCBleGNlcHRpb24gb2YgYSBmZXcgYml0cyAqLwogCi0gICAgICAgIGxkciAgICAgcjQsICAgICA9Q0ZHX01EUkVGUl9WQUwKKwlsZHIgICAgIHI0LCAgICAgPUNGR19NRFJFRlJfVkFMCiAJb3JyCXI0LAlyNCwJIyhNRFJFRlJfU0xGUlNIKQogCWJpYwlyNCwJcjQsCSMoTURSRUZSX0UxUElOfE1EUkVGUl9FMFBJTikKIAlzdHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0gICAgLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCWxkciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQogCiAJLyogU3RlcCA0YjogZGUtYXNzZXJ0IE1EUkVGUjpTTEZSU0guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAJYmljCXI0LAlyNCwJIyhNRFJFRlJfU0xGUlNIKQotICAgICAgICBzdHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0gICAgLyogd3JpdGUgYmFjayBNRFJFRlIgICAgICAgICovCi0gICAgICAgIGxkciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQorCXN0ciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXSAgICAvKiB3cml0ZSBiYWNrIE1EUkVGUiAgICAgICAgKi8KKwlsZHIgICAgIHI0LCAgW3IxLCAjTURSRUZSX09GRlNFVF0KIAogCiAJLyogU3RlcCA0YzogYXNzZXJ0IE1EUkVGUjpFMVBJTiBhbmQgRTBQSU8gYXMgZGVzaXJlZCAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgIGxkciAgICAgcjQsICAgICA9Q0ZHX01EUkVGUl9WQUwKLSAgICAgICAgc3RyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdICAgIC8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHI0LCAgICAgW3IxLCAjTURSRUZSX09GRlNFVF0KKwlsZHIgICAgIHI0LCAgICAgPUNGR19NRFJFRlJfVkFMCisJc3RyICAgICByNCwgICAgIFtyMSwgI01EUkVGUl9PRkZTRVRdICAgIC8qIHdyaXRlIGJhY2sgTURSRUZSICAgICAgICAqLworCWxkciAgICAgcjQsICAgICBbcjEsICNNRFJFRlJfT0ZGU0VUXQogCiAKIAkvKiBTdGVwIDRkOiB3cml0ZSBNRENORkcgd2l0aCBNRENORkc6REV4IGRlYXNzZXJ0ZWQgKHNldCB0byAwKSwgdG8gICovCkBAIC0yNzAsMTUgKzI3MCwxNSBAQAogCWxkcglyNCwJPUNGR19NRENORkdfVkFMCiAJYmljCXI0LAlyNCwJIyhNRENORkdfREUwfE1EQ05GR19ERTEpCiAKLSAgICAgICAgc3RyICAgICByNCwgICAgIFtyMSwgI01EQ05GR19PRkZTRVRdCS8qIHdyaXRlIGJhY2sgTURDTkZHICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHI0LCAgICAgW3IxLCAjTURDTkZHX09GRlNFVF0KKwlzdHIgICAgIHI0LCAgICAgW3IxLCAjTURDTkZHX09GRlNFVF0JLyogd3JpdGUgYmFjayBNRENORkcgICAgICAgICovCisJbGRyICAgICByNCwgICAgIFtyMSwgI01EQ05GR19PRkZTRVRdCiAKIAogCS8qIFN0ZXAgNGU6IFdhaXQgZm9yIHRoZSBjbG9jayB0byB0aGUgU0RSQU1zIHRvIHN0YWJpbGl6ZSwgICAgICAgICAgKi8KIAkvKiAgICAgICAgICAxMDAuLjIwMCC1c2VjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKIAlsZHIgcjMsID1PU0NSCQkJLyogcmVzZXQgdGhlIE9TIFRpbWVyIENvdW50IHRvIHplcm8gKi8KLSAgICAJbW92IHIyLCAjMAorCW1vdiByMiwgIzAKIAkgICAgc3RyIHIyLCBbcjNdCiAJbGRyIHI0LCA9MHgzMDAJCQkvKiByZWFsbHkgMHgyRTEgaXMgYWJvdXQgMjAwdXNlYywgICAqLwogCQkJCQkvKiBzbyAweDMwMCBzaG91bGQgYmUgcGxlbnR5ICAgICAgICAqLwpAQCAtMzA4LDE0ICszMDgsMTQgQEAKIAkvKiBTdGVwIDRnOiBXcml0ZSBNRENORkcgd2l0aCBlbmFibGUgYml0cyBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICovCiAJLyogICAgICAgICAgKE1EQ05GRzpERXggc2V0IHRvIDEpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgIGxkciAgICAgcjMsICBbcjEsICNNRENORkdfT0ZGU0VUXQorCWxkciAgICAgcjMsICBbcjEsICNNRENORkdfT0ZGU0VUXQogCW9ycglyMywJcjMsCSMoTURDTkZHX0RFMHxNRENORkdfREUxKQotICAgICAgICBzdHIgICAgIHIzLCAgW3IxLCAjTURDTkZHX09GRlNFVF0KKwlzdHIgICAgIHIzLCAgW3IxLCAjTURDTkZHX09GRlNFVF0KIAogCS8qIFN0ZXAgNGg6IFdyaXRlIE1ETVJTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICBsZHIgICAgIHIyLCAgPUNGR19NRE1SU19WQUwKLSAgICAgICAgc3RyICAgICByMiwgIFtyMSwgI01ETVJTX09GRlNFVF0KKwlsZHIgICAgIHIyLCAgPUNGR19NRE1SU19WQUwKKwlzdHIgICAgIHIyLCAgW3IxLCAjTURNUlNfT0ZGU0VUXQogCiAKIAkvKiBXZSBhcmUgZmluaXNoZWQgd2l0aCBJbnRlbCdzIG1lbW9yeSBjb250cm9sbGVyIGluaXRpYWxpc2F0aW9uICAgICovCkBAIC0zMjcsMTcgKzMyNywxNyBAQAogCiBpbml0aXJxczoKIAotICAgICAgICBtb3YgICAgIHIxLCAjMAkJLyogY2xlYXIgaW50LiBsZXZlbCByZWdpc3RlciAoSVJRLCBub3QgRklRKSAqLwotICAgICAgICBsZHIgICAgIHIyLCAgPUlDTFIKLSAgICAgICAgc3RyICAgICByMSwgIFtyMl0KKwltb3YgICAgIHIxLCAjMAkJLyogY2xlYXIgaW50LiBsZXZlbCByZWdpc3RlciAoSVJRLCBub3QgRklRKSAqLworCWxkciAgICAgcjIsICA9SUNMUgorCXN0ciAgICAgcjEsICBbcjJdCiAKLSAgICAgICAgbGRyICAgICByMiwgID1JQ01SCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIGNvbnRyb2xsZXIgICAgKi8KLSAgICAgICAgc3RyICAgICByMSwgIFtyMl0KKwlsZHIgICAgIHIyLCAgPUlDTVIJLyogbWFzayBhbGwgaW50ZXJydXB0cyBhdCB0aGUgY29udHJvbGxlciAgICAqLworCXN0ciAgICAgcjEsICBbcjJdCiAKIAotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIENsb2NrIGluaXRpYWxpc2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogaW5pdGNsa3M6CiAKQEAgLTM0NiwzNiArMzQ2LDM2IEBACiAKIAkvKiBUdXJuIE9mZiBBTEwgb24tY2hpcCBwZXJpcGhlcmFsIGNsb2NrcyBmb3IgcmUtY29uZmlndXJhdGlvbiAgICAgICovCiAJLyogTm90ZTogU2VlIGxhYmVsICdFTkFCTEVDTEtTJyBmb3IgdGhlIHJlLWVuYWJsaW5nICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIxLCAgPUNLRU4KLSAgICAgICAgbW92ICAgICByMiwgICMwCi0gICAgICAgIHN0ciAgICAgcjIsICBbcjFdCisJbGRyICAgICByMSwgID1DS0VOCisJbW92ICAgICByMiwgICMwCisJc3RyICAgICByMiwgIFtyMV0KIAogCi0gICAgICAgIC8qIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB2YWxpZCByb3Rhcnkgc3dpdGNoIHNldHRpbmcgaXMgZm91bmQgICAgKi8KLSAgICAgICAgbGRyICAgICByMiwgPShDQ0NSX0wyN3xDQ0NSX00yfENDQ1JfTjEwKSAgLyogREVGQVVMVDogezIwMC8yMDAvMTAwfSAqLworCS8qIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSBubyB2YWxpZCByb3Rhcnkgc3dpdGNoIHNldHRpbmcgaXMgZm91bmQgICAgKi8KKwlsZHIgICAgIHIyLCA9KENDQ1JfTDI3fENDQ1JfTTJ8Q0NDUl9OMTApICAvKiBERUZBVUxUOiB7MjAwLzIwMC8xMDB9ICovCiAKLSAgICAgICAgLyogLi4uIGFuZCB3cml0ZSB0aGUgY29yZSBjbG9jayBjb25maWcgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBsZHIgICAgIHIxLCAgPUNDQ1IKLSAgICAgICAgc3RyICAgICByMiwgIFtyMV0KKwkvKiAuLi4gYW5kIHdyaXRlIHRoZSBjb3JlIGNsb2NrIGNvbmZpZyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCisJbGRyICAgICByMSwgID1DQ0NSCisJc3RyICAgICByMiwgIFtyMV0KIAogI2lmZGVmIFJUQwogCS8qIGVuYWJsZSB0aGUgMzJLaHogb3NjaWxsYXRvciBmb3IgUlRDIGFuZCBQb3dlck1hbmFnZXIgICAgICAgICAgICAgKi8KIAotICAgICAgICBsZHIgICAgIHIxLCAgPU9TQ0MKLSAgICAgICAgbW92ICAgICByMiwgICNPU0NDX09PTgotICAgICAgICBzdHIgICAgIHIyLCAgW3IxXQorCWxkciAgICAgcjEsICA9T1NDQworCW1vdiAgICAgcjIsICAjT1NDQ19PT04KKwlzdHIgICAgIHIyLCAgW3IxXQogCiAJLyogTk9URTogIHNwaW4gaGVyZSB1bnRpbCBPU0NDLk9PSyBnZXQgc2V0LCBtZWFuaW5nIHRoZSBQTEwgICAgICAgICAqLwogCS8qIGhhcyBzZXR0bGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIDYwOgotICAgICAgICBsZHIgICAgIHIyLCBbcjFdCi0gICAgICAgIGFuZHMgICAgcjIsIHIyLCAjMQotICAgICAgICBiZXEgICAgIDYwYgorCWxkciAgICAgcjIsIFtyMV0KKwlhbmRzICAgIHIyLCByMiwgIzEKKwliZXEgICAgIDYwYgogI2VuZGlmCiAKIAkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAJLyogU2F2ZSBTRFJBTSBzaXplICovCiAgICAgbGRyICAgICByMSwgPURSQU1fU0laRQpAQCAtNDAyLDExICs0MDIsMTAgQEAKIAogI2VuZGlmCiAKLSAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAkvKiBFbmQgbWVtc2V0dXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIGVuZG1lbXNldHVwOgogCiAgICAgbW92ICAgICBwYywgbHIKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbHViYm9jay91LWJvb3QubGRzIGIvYm9hcmQvbHViYm9jay91LWJvb3QubGRzCmluZGV4IDQ2YmViMTUuLjRjNGNhYmYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2x1YmJvY2svdS1ib290LmxkcworKysgYi9ib2FyZC9sdWJib2NrL3UtYm9vdC5sZHMKQEAgLTI2LDI5ICsyNiwzMyBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSAgICAgICAgLiA9IDB4MDAwMDAwMDA7CisJLiA9IDB4MDAwMDAwMDA7CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAkudGV4dCAgICAgIDoKIAl7CiAJICBjcHUvcHhhL3N0YXJ0Lm8JKC50ZXh0KQogCSAgKigudGV4dCkKIAl9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZGF0YSA6IHsgKiguZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmdvdCA6IHsgKiguZ290KSB9CisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisgICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgIF9fdV9ib290X2NtZF9lbmQgPSAuOwogCiAJYXJtYm9vdF9lbmRfZGF0YSA9IC47CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAlic3Nfc3RhcnQgPSAuOwotICAgICAgICAuYnNzIDogeyAqKC5ic3MpIH0KKwkuYnNzIDogeyAqKC5ic3MpIH0KIAlic3NfZW5kID0gLjsKIAogCWFybWJvb3RfZW5kID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL2x3bW9uL01ha2VmaWxlIGIvYm9hcmQvbHdtb24vTWFrZWZpbGUKaW5kZXggMzViODQyOC4uN2EyMDE0ZCAxMDA2NDQKLS0tIGEvYm9hcmQvbHdtb24vTWFrZWZpbGUKKysrIGIvYm9hcmQvbHdtb24vTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL2x3bW9uL1JFQURNRS5rZXliZCBiL2JvYXJkL2x3bW9uL1JFQURNRS5rZXliZAppbmRleCBiZjc1OWM2Li43ODhjODY0IDEwMDY0NAotLS0gYS9ib2FyZC9sd21vbi9SRUFETUUua2V5YmQKKysrIGIvYm9hcmQvbHdtb24vUkVBRE1FLmtleWJkCkBAIC0xNSw3ICsxNSw2IEBACiBlaW5lciBBcHBsaWthdGlvbiBhdXNnZXdlcnRldCB3ZXJkZW4uCiAKIAotCiBTb25kZXJmdW5rdGlvbmVuIGJlaW0gQm9vdGVuOgogCiBFcyBsYXNzZW4gc2ljaCBlaW5lIG9kZXIgbWVocmVyZSAoYmVsaWViaWcgdmllbGUpIFRhc3RlbiBvZGVyIFRhc3Rlbi0KZGlmZiAtLWdpdCBhL2JvYXJkL2x3bW9uL2x3bW9uLmMgYi9ib2FyZC9sd21vbi9sd21vbi5jCmluZGV4IGQ1YTYzN2YuLmIzNTllYzcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2x3bW9uL2x3bW9uLmMKKysrIGIvYm9hcmQvbHdtb24vbHdtb24uYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGNvbW1wcm9jLmg+CiAjaW5jbHVkZSA8aTJjLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ic3AuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDxwb3N0Lmg+CiAKQEAgLTczLDkgKzcyLDkgQEAKIAkvKgogCSAqIFNEUkFNIEluaXRpYWxpemF0aW9uIChvZmZzZXQgNSBpbiBVUE0gUkFNKQogCSAqCi0gICAgICAgICAqIFRoaXMgaXMgbm8gVVBNIGVudHJ5IHBvaW50LiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gdXNlcwotICAgICAgICAgKiB0aGUgcmVtYWluaW5nIHNwYWNlIHRvIGVzdGFibGlzaCBhbiBpbml0aWFsaXphdGlvbgotICAgICAgICAgKiBzZXF1ZW5jZSwgd2hpY2ggaXMgZXhlY3V0ZWQgYnkgYSBSVU4gY29tbWFuZC4KKwkgKiBUaGlzIGlzIG5vIFVQTSBlbnRyeSBwb2ludC4gVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHVzZXMKKwkgKiB0aGUgcmVtYWluaW5nIHNwYWNlIHRvIGVzdGFibGlzaCBhbiBpbml0aWFsaXphdGlvbgorCSAqIHNlcXVlbmNlLCB3aGljaCBpcyBleGVjdXRlZCBieSBhIFJVTiBjb21tYW5kLgogCSAqCiAJICovCiAJCSAgICAweDFGRjVGQzM0LCAweEVGRUFCQzM0LCAweDFGQjU3QzM1LCAvKiBsYXN0ICovCkBAIC0xMjEsOSArMTIwLDkgQEAKIAkvKgogCSAqIFNEUkFNIEluaXRpYWxpemF0aW9uIChvZmZzZXQgNSBpbiBVUE0gUkFNKQogCSAqCi0gICAgICAgICAqIFRoaXMgaXMgbm8gVVBNIGVudHJ5IHBvaW50LiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gdXNlcwotICAgICAgICAgKiB0aGUgcmVtYWluaW5nIHNwYWNlIHRvIGVzdGFibGlzaCBhbiBpbml0aWFsaXphdGlvbgotICAgICAgICAgKiBzZXF1ZW5jZSwgd2hpY2ggaXMgZXhlY3V0ZWQgYnkgYSBSVU4gY29tbWFuZC4KKwkgKiBUaGlzIGlzIG5vIFVQTSBlbnRyeSBwb2ludC4gVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIHVzZXMKKwkgKiB0aGUgcmVtYWluaW5nIHNwYWNlIHRvIGVzdGFibGlzaCBhbiBpbml0aWFsaXphdGlvbgorCSAqIHNlcXVlbmNlLCB3aGljaCBpcyBleGVjdXRlZCBieSBhIFJVTiBjb21tYW5kLgogCSAqCiAJICovCiAJCSAgICAweDFGRjVGQzM0LCAweEVGRUFCQzM0LCAweDFGQjU3QzM1LCAvKiBsYXN0ICovCkBAIC0xMzIsNyArMTMxLDcgQEAKIAkgKi8KIAkweDBFMkRCQzA0LCAweDEwQUY3QzA0LCAweEYwQUZGQzAwLCAweEYwQUZGQzAwLAogCTB4RjFBRkZDMDAsIDB4RUZCQUZDMDAsIDB4MUZGNUZDNDcsIC8qIGxhc3QgKi8KLQkJCQkgCSAgICBfTk9UX1VTRURfLAorCQkJCQkgICAgX05PVF9VU0VEXywKIAlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAogCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCiAJLyoKQEAgLTE0Niw3ICsxNDUsNyBAQAogCSAqLwogCTB4MEUyOUJDMDQsIDB4MTBBNzdDMDAsIDB4RjBBRkZDMDAsIDB4RjBBRkZDMDAsCiAJMHhFMUJBRkMwNCwgMHgxRkY1RkM0NywgLyogbGFzdCAqLwotCQkJICAgICAgICBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAorCQkJCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCiAJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAogCS8qCkBAIC01MTEsNyArNTEwLDcgQEAKIAlpbnQgaTsKIAogCWkyY19pbml0IChDRkdfSTJDX1NQRUVELCBDRkdfSTJDX1NMQVZFKTsKLQkKKwogCWdkLT5rYmRfc3RhdHVzID0gMDsKIAogCS8qIFJlYWQgaW5pdGlhbCBrZXlib2FyZCBlcnJvciBjb2RlICovCkBAIC01NDMsMTMgKzU0MiwxMyBAQAogCS8qCiAJICogUmVhZCBjdXJyZW50IGtleWJvYXJkIHN0YXRlLgogCSAqCi0gICAgICAgICAqIEFmdGVyIHRoZSBlcnJvciByZXNldCBpdCBtYXkgdGFrZSBzb21lIHRpbWUgYmVmb3JlIHRoZQotICAgICAgICAgKiBrZXlib2FyZCBQSUMgcGlja3MgdXAgYSB2YWxpZCBrZXlib2FyZCBzY2FuIC0gdGhlIHRvdGFsCi0gICAgICAgICAqIHNjYW4gdGltZSBpcyBhcHByb3guIDEuNiBtcyAoaW5mb3JtYXRpb24gYnkgTWFydGluIFJhamVrLAotICAgICAgICAgKiAyOCBTZXAgMjAwMikuIFdlIHJlYWQgYSBjb3VwbGUgb2YgdGltZXMgZm9yIHRoZSBrZXlib2FyZAotICAgICAgICAgKiB0byBzdGFiaWxpemUsIHVzaW5nIGEgYmlnIGVub3VnaCBkZWxheS4KLSAgICAgICAgICogMTAgdGltZXMgc2hvdWxkIGJlIGVub3VnaC4gSWYgdGhlIGRhdGEgaXMgc3RpbGwgY2hhbmdpbmcsCi0gICAgICAgICAqIHdlIHVzZSB3aGF0IHdlIGdldCA6LSgKKwkgKiBBZnRlciB0aGUgZXJyb3IgcmVzZXQgaXQgbWF5IHRha2Ugc29tZSB0aW1lIGJlZm9yZSB0aGUKKwkgKiBrZXlib2FyZCBQSUMgcGlja3MgdXAgYSB2YWxpZCBrZXlib2FyZCBzY2FuIC0gdGhlIHRvdGFsCisJICogc2NhbiB0aW1lIGlzIGFwcHJveC4gMS42IG1zIChpbmZvcm1hdGlvbiBieSBNYXJ0aW4gUmFqZWssCisJICogMjggU2VwIDIwMDIpLiBXZSByZWFkIGEgY291cGxlIG9mIHRpbWVzIGZvciB0aGUga2V5Ym9hcmQKKwkgKiB0byBzdGFiaWxpemUsIHVzaW5nIGEgYmlnIGVub3VnaCBkZWxheS4KKwkgKiAxMCB0aW1lcyBzaG91bGQgYmUgZW5vdWdoLiBJZiB0aGUgZGF0YSBpcyBzdGlsbCBjaGFuZ2luZywKKwkgKiB3ZSB1c2Ugd2hhdCB3ZSBnZXQgOi0oCiAJICovCiAKIAltZW1zZXQgKHRtcF9kYXRhLCAweEZGLCBLRVlCRF9EQVRBTEVOKTsJLyogaW1wb3NzaWJsZSB2YWx1ZSAqLwpAQCAtODQ5LDYgKzg0OCwxMiBAQAogCXByaW50ZiAoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7CiAJcmV0dXJuIDE7CiB9CitjbWRfdGJsX3QgVV9CT09UX0NNRChwaWMpID0gTUtfQ01EX0VOVFJZKAorCSJwaWMiLAk0LAkxLAlkb19waWMsCisJInBpYyAgICAgLSByZWFkIGFuZCB3cml0ZSBQSUMgcmVnaXN0ZXJzXG4iLAorCSJyZWFkICByZWcgICAgICAtIHJlYWQgUElDIHJlZ2lzdGVyIGByZWcnXG4iCisJInBpYyB3cml0ZSByZWcgdmFsICAtIHdyaXRlIHZhbHVlIGB2YWwnIHRvIFBJQyByZWdpc3RlciBgcmVnJ1xuIgorKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBGKiBGdW5jdGlvbjogICAgIGludCBkb19rYmQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLApAQCAtOTAyLDYgKzkwNywxMiBAQAogCXJldHVybiAwOwogfQogCitjbWRfdGJsX3QgVV9CT09UX0NNRChrZGIpID0gTUtfQ01EX0VOVFJZKAorCSJrYmQiLAkxLAkxLAlkb19rYmQsCisJImtiZCAgICAgLSByZWFkIGtleWJvYXJkIHN0YXR1c1xuIiwKKwlOVUxMCispOworCiAvKiBSZWFkIGFuZCBzZXQgTFNCIHN3aXRjaCAqLwogI2RlZmluZSBDRkdfUENfVFhEMV9FTkEJCTB4MDAwOAkJLyogUEMuMTIgKi8KIApAQCAtOTY4LDYgKzk3OSwxNCBAQAogCXJldHVybiAxOwogfQogCitjbWRfdGJsX3QgVV9CT09UX0NNRChsc2IpID0gTUtfQ01EX0VOVFJZKAorCSJsc2IiLAkyLAkxLAlkb19sc2IsCisJImxzYiAgICAgLSBjaGVjayBhbmQgc2V0IExTQiBzd2l0Y2hcbiIsCisJIm9uICAtIHN3aXRjaCBMU0Igb25cbiIKKwkibHNiIG9mZiAtIHN3aXRjaCBMU0Igb2ZmXG4iCisJImxzYiAgICAgLSBwcmludCBjdXJyZW50IHNldHRpbmdcbiIKKyk7CisKICNlbmRpZiAvKiBDRkdfQ01EX0JTUCAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFV0aWxpdGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9ib2FyZC9sd21vbi91LWJvb3QubGRzIGIvYm9hcmQvbHdtb24vdS1ib290LmxkcwppbmRleCAzNzY0ODc4Li5mZmZhNzllIDEwMDY0NAotLS0gYS9ib2FyZC9sd21vbi91LWJvb3QubGRzCisrKyBiL2JvYXJkL2x3bW9uL3UtYm9vdC5sZHMKQEAgLTk4LDYgKzk4LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjAsNCArMTI1LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbHdtb24vdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL2x3bW9uL3UtYm9vdC5sZHMuZGVidWcKaW5kZXggOTE4MzAxNi4uMTUzMjg2YiAxMDA2NDQKLS0tIGEvYm9hcmQvbHdtb24vdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9sd21vbi91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDcsNiArMTA3LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjksNCArMTM0LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWJ4OHh4L01ha2VmaWxlIGIvYm9hcmQvbWJ4OHh4L01ha2VmaWxlCmluZGV4IGY4ZmI1ODEuLjNlODM3NmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL21ieDh4eC9NYWtlZmlsZQorKysgYi9ib2FyZC9tYng4eHgvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8gdnBkLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL21ieDh4eC91LWJvb3QubGRzIGIvYm9hcmQvbWJ4OHh4L3UtYm9vdC5sZHMKaW5kZXggNjM3MTExMC4uYzFlZTU0NCAxMDA2NDQKLS0tIGEvYm9hcmQvbWJ4OHh4L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvbWJ4OHh4L3UtYm9vdC5sZHMKQEAgLTk4LDYgKzk4LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjAsNCArMTI1LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWJ4OHh4L3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9tYng4eHgvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCBiZDEzYjdiLi4wMjQ1Zjc4IDEwMDY0NAotLS0gYS9ib2FyZC9tYng4eHgvdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9tYng4eHgvdS1ib290Lmxkcy5kZWJ1ZwpAQCAtMTA3LDYgKzEwNywxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTI5LDQgKzEzNCwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL21sMi9NYWtlZmlsZSBiL2JvYXJkL21sMi9NYWtlZmlsZQppbmRleCBkZDkzZGVkLi40MGM2MGIxIDEwMDY0NAotLS0gYS9ib2FyZC9tbDIvTWFrZWZpbGUKKysrIGIvYm9hcmQvbWwyL01ha2VmaWxlCkBAIC0yOSw3ICsyOSw3IEBACiBTT0JKUwk9IGluaXQubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9tbDIvZmxhc2guYyBiL2JvYXJkL21sMi9mbGFzaC5jCmluZGV4IDc3ZTA5MzEuLjA5MDcyNWQgMTAwNjQ0Ci0tLSBhL2JvYXJkL21sMi9mbGFzaC5jCisrKyBiL2JvYXJkL21sMi9mbGFzaC5jCkBAIC0yOTgsNCArMjk4LDMgQEAKIAlyZXR1cm4gd3JpdGVfd29yZChpbmZvLCB3cCwgZGF0YSk7CiAKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWwyL2luaXQuUyBiL2JvYXJkL21sMi9pbml0LlMKaW5kZXggMjM4NmMyYS4uODBmOThjNSAxMDA2NDQKLS0tIGEvYm9hcmQvbWwyL2luaXQuUworKysgYi9ib2FyZC9tbDIvaW5pdC5TCkBAIC0yNSwxMCArMjUsMTAgQEAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKIAotICAgICAJLmdsb2JsCWV4dF9idXNfY250bHJfaW5pdAorCS5nbG9ibAlleHRfYnVzX2NudGxyX2luaXQKIGV4dF9idXNfY250bHJfaW5pdDoKLSAgICAgICAgYmxyCisJYmxyCiAKLSAgICAgICAgLmdsb2JsICBzZHJhbV9pbml0CisJLmdsb2JsICBzZHJhbV9pbml0CiBzZHJhbV9pbml0OgotICAgICAgICBibHIKKwlibHIKZGlmZiAtLWdpdCBhL2JvYXJkL21sMi9tbDIuYyBiL2JvYXJkL21sMi9tbDIuYwppbmRleCBhODlhOGY5Li42Y2MxYmVjIDEwMDY0NAotLS0gYS9ib2FyZC9tbDIvbWwyLmMKKysrIGIvYm9hcmQvbWwyL21sMi5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiAKLQogaW50IGJvYXJkX3ByZV9pbml0ICh2b2lkKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbWwyL3NlcmlhbC5jIGIvYm9hcmQvbWwyL3NlcmlhbC5jCmluZGV4IGRjOWE4ZWEuLjkyYmFiYTkgMTAwNjQ0Ci0tLSBhL2JvYXJkL21sMi9zZXJpYWwuYworKysgYi9ib2FyZC9tbDIvc2VyaWFsLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2lmIChkZWZpbmVkIENGR19JTklUX0NIQU4xKSB8fCAoZGVmaW5lZCBDRkdfSU5JVF9DSEFOMikKIGNvbnN0IE5TMTY1NTBfdCBDT01fUE9SVFNbXSA9IHsgKE5TMTY1NTBfdCkgQ0ZHX05TMTY1NTBfQ09NMSwKLQkJICAgICAgICAgICAgICAgIChOUzE2NTUwX3QpIENGR19OUzE2NTUwX0NPTTIgfTsKKwkJCQkoTlMxNjU1MF90KSBDRkdfTlMxNjU1MF9DT00yIH07CiAjZW5kaWYKIAogaW50CkBAIC01OSw3ICs1OSw3IEBACiBzZXJpYWxfcHV0Yyhjb25zdCBjaGFyIGMpCiB7CiAgICAgaWYgKGMgPT0gJ1xuJykKLSAgICAgICAgTlMxNjU1MF9wdXRjKENPTV9QT1JUU1tDRkdfRFVBUlRfQ0hBTl0sICdccicpOworCU5TMTY1NTBfcHV0YyhDT01fUE9SVFNbQ0ZHX0RVQVJUX0NIQU5dLCAnXHInKTsKIAogICAgIE5TMTY1NTBfcHV0YyhDT01fUE9SVFNbQ0ZHX0RVQVJUX0NIQU5dLCBjKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL21sMi91LWJvb3QubGRzIGIvYm9hcmQvbWwyL3UtYm9vdC5sZHMKaW5kZXggOTY4NWY4OS4uMDcyNzVkMyAxMDA2NDQKLS0tIGEvYm9hcmQvbWwyL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvbWwyL3UtYm9vdC5sZHMKQEAgLTExNiw2ICsxMTYsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL21sMi91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvbWwyL3UtYm9vdC5sZHMuZGVidWcKaW5kZXggZjRmOTc0My4uZDQ4MzQyNCAxMDA2NDQKLS0tIGEvYm9hcmQvbWwyL3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvbWwyL3UtYm9vdC5sZHMuZGVidWcKQEAgLTEwNiw2ICsxMDYsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyOCw0ICsxMzMsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9tb3Vzc2UvTWFrZWZpbGUgYi9ib2FyZC9tb3Vzc2UvTWFrZWZpbGUKaW5kZXggNmQ5ZGY4OS4uZGRjNTU0NiAxMDA2NDQKLS0tIGEvYm9hcmQvbW91c3NlL01ha2VmaWxlCisrKyBiL2JvYXJkL21vdXNzZS9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKKwogIwogIyAoQykgQ29weXJpZ2h0IDIwMDEKICMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KQEAgLTI4LDcgKzI5LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIG00OHQ1OXkubyBwY2kubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9tb3Vzc2UvUkVBRE1FIGIvYm9hcmQvbW91c3NlL1JFQURNRQppbmRleCBlZjA3MmJkLi42MWFhY2NlIDEwMDY0NAotLS0gYS9ib2FyZC9tb3Vzc2UvUkVBRE1FCisrKyBiL2JvYXJkL21vdXNzZS9SRUFETUUKQEAgLTIwLDcgKzIwLDYgQEAKIFUtQm9vdCBMb2FkaW5nLi4uCiAKIAotCiBVLUJvb3QgMS4wLjUgKFNlcCAxMCAyMDAxIC0gMDA6MjI6MjUpCiAKIENQVTogICBNUEM4MjQwIFJldmlzaW9uIDEuMSBhdCAxOTggTUh6OiAxNiBrQiBJLUNhY2hlIDE2IGtCIEQtQ2FjaGUKQEAgLTcwLDcgKzY5LDYgQEAKIHR5cGUgInNhdmVlbnYiIHRvIHdyaXRlIHRvIE5WUkFNLgogCiAKLQogSUkuIFRvIGJvb3QgZnJvbSBhIGhhcmQgZHJpdmU6CiAKIHNldGVudiByb290IC9kZXYvaGRhMQpAQCAtMTc0LDcgKzE3Miw2IEBACiBjcC5iIDEwMDAwMCBGRkY4MDAwMCBcJChmaWxlc2l6ZSlcCiAKIAotCiBDLiBGTEFTSCBLRVJORUwgUkVHSU9OICg5NjBLQikKIAogRkxBU0ggc3VwcG9ydCBpcyBwcm92aWRlZCBmb3IgdGhlIDk2MEtCIG9uYm9hcmQgRkxBU0gxIHNlZ21lbnQuCkBAIC0yMTUsNyArMjEyLDYgQEAKID0+CiAKIAotCiBXaGVuIGZpbmlzaGVkLCB1c2UgdGhlIGNvbW1hbmQ6CiAKIGJvb3RtIGZmZTEwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9tb3Vzc2UvZmxhc2guYyBiL2JvYXJkL21vdXNzZS9mbGFzaC5jCmluZGV4IDNjNGE4MDIuLjJjMzJiOGYgMTAwNjQ0Ci0tLSBhL2JvYXJkL21vdXNzZS9mbGFzaC5jCisrKyBiL2JvYXJkL21vdXNzZS9mbGFzaC5jCkBAIC0xMjAsMTQwICsxMjAsMTQxIEBACiAjZGVmaW5lIEZMQVNIMF9SRUFEKGRldiwgYWRkcikgXAogCSgqRkxBU0gwX0FERFIoZGV2LCBhZGRyKSkKIAotUFJJVkFURSBpbnQgZmxhc2hDaGVjayhmbGFzaF9kZXZfdCAqZGV2KQorUFJJVkFURSBpbnQgZmxhc2hDaGVjayAoZmxhc2hfZGV2X3QgKiBkZXYpCiB7Ci0gICAgaWYgKCEgZmxhc2hMaWJJbml0ZWQpIHsKLQlwcmludGYoImZsYXNoQ2hlY2s6IGZsYXNoTGliIG5vdCBpbml0aWFsaXplZFxuIik7Ci0JcmV0dXJuIEVSUk9SOwotICAgIH0KLQotICAgIGlmIChkZXYgPCAmZmxhc2hEZXZbMF0gfHwgZGV2ID49ICZmbGFzaERldltmbGFzaERldkNvdW50XSkgewotCXByaW50ZigiZmxhc2hDaGVjazogQmFkIGRldiBwYXJhbWV0ZXJcbiIpOwotCXJldHVybiBFUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoISBkZXYtPmZvdW5kKSB7Ci0JcHJpbnRmKCJmbGFzaENoZWNrOiBEZXZpY2UgJWQgbm90IGF2YWlsYWJsZVxuIiwgREVWX05PKGRldikpOwotCXJldHVybiBFUlJPUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gT0s7Ci19Ci0KLVBSSVZBVEUgdm9pZCBmbGFzaFJlc2V0KGZsYXNoX2Rldl90ICpkZXYpCi17Ci0gICAgUFJJTlRGKCJmbGFzaFJlc2V0OiBkZXY9JWRcbiIsIERFVl9OTyhkZXYpKTsKLQotICAgIGlmIChkZXYtPmJhbmsgPT0gRkxBU0gwX0JBTkspIHsKLQlGTEFTSDBfV1JJVEUoZGV2LCAweDU1NSwgMHhhYSk7Ci0JRkxBU0gwX1dSSVRFKGRldiwgMHhhYWEsIDB4NTUpOwotCUZMQVNIMF9XUklURShkZXYsIDB4NTU1LCAweGYwKTsKLSAgICB9Ci0KLSAgICB1ZGVsYXkoU0xFRVBfREVMQVkpOwotCi0gICAgUFJJTlRGKCJmbGFzaFJlc2V0OiBkb25lXG4iKTsKLX0KLQotUFJJVkFURSBpbnQgZmxhc2hQcm9iZShmbGFzaF9kZXZfdCAqZGV2KQotewotICAgIGludAkJCXJ2LCBkZXZpY2VJRCwgdmVuZG9ySUQ7Ci0KLSAgICBQUklOVEYoImZsYXNoUHJvYmU6IGRldj0lZFxuIiwgREVWX05PKGRldikpOwotCi0gICAgaWYgKGRldi0+YmFuayAhPSBGTEFTSDBfQkFOSykgewotICAgIAlydiA9IEVSUk9SOwotCWdvdG8gRE9ORTsKLSAgICB9Ci0KLSAgICBGTEFTSDBfV1JJVEUoZGV2LCAweGFhYSwgMHhhYSk7Ci0gICAgRkxBU0gwX1dSSVRFKGRldiwgMHg1NTUsIDB4NTUpOwotICAgIEZMQVNIMF9XUklURShkZXYsIDB4YWFhLCAweDkwKTsKLQotICAgIHVkZWxheShTTEVFUF9ERUxBWSk7Ci0KLSAgICB2ZW5kb3JJRCA9IEZMQVNIMF9SRUFEKGRldiwgMCk7Ci0gICAgZGV2aWNlSUQgPSBGTEFTSDBfUkVBRChkZXYsIDIpOwotCi0gICAgRkxBU0gwX1dSSVRFKGRldiwgMCwgMHhmMCk7Ci0KLSAgICBQUklOVEYoImZsYXNoUHJvYmU6IHZlbmRvcj0weCV4IGRldmljZT0weCV4XG4iLCB2ZW5kb3JJRCwgZGV2aWNlSUQpOwotCi0gICAgaWYgKHZlbmRvcklEID09IGRldi0+dmVuZG9ySUQgJiYgZGV2aWNlSUQgPT0gZGV2LT5kZXZpY2VJRCkKLQlydiA9IE9LOwotICAgIGVsc2UKLQlydiA9IEVSUk9SOwotCi1ET05FOgotICAgIFBSSU5URigiZmxhc2hQcm9iZTogcnY9JWRcbiIsIHJ2KTsKLQotICAgIHJldHVybiBydjsKLX0KLQotUFJJVkFURSBpbnQgZmxhc2hXYWl0KGZsYXNoX2Rldl90ICpkZXYsIGludCBhZGRyLCBpbnQgZXhwZWN0LCBpbnQgZXJhc2UpCi17Ci0gICAgaW50CQkJcnYgPSBFUlJPUjsKLSAgICBpbnQJCQlpLCBkYXRhOwotICAgIGludAkJCXBvbGxzOwotI2lmIDAKLSAgICBQUklOVEYoImZsYXNoV2FpdDogZGV2PSVkIGFkZHI9MHgleCBleHBlY3Q9MHgleCBlcmFzZT0lZFxuIiwKLQkgICBERVZfTk8oZGV2KSwgYWRkciwgZXhwZWN0LCBlcmFzZSk7Ci0jZW5kaWYKLQotICAgIGlmIChkZXYtPmJhbmsgIT0gRkxBU0gwX0JBTkspIHsKLQlydiA9IEVSUk9SOwotCWdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICBpZiAoZXJhc2UpCi0JcG9sbHMgPSBGTEFTSF9FUkFTRV9TRUNUT1JfVElNRU9VVDsJLyogVGlja3MgKi8KLSAgICBlbHNlCi0JcG9sbHMgPSBGTEFTSF9QUk9HUkFNX1BPTExTOwkJLyogTG9vcHMgKi8KLQotICAgIGZvciAoaSA9IDA7IGkgPCBwb2xsczsgaSsrKSB7Ci0JaWYgKGVyYXNlKQotCSAgICB1ZGVsYXkoU0xFRVBfREVMQVkpOwotCi0JZGF0YSA9IEZMQVNIMF9SRUFEKGRldiwgYWRkcik7Ci0KLQlpZiAoKChkYXRhIF4gZXhwZWN0KSAmIDB4ODApID09IDApIHsKLQkgICAgcnYgPSBPSzsKLQkgICAgZ290byBkb25lOworCWlmICghZmxhc2hMaWJJbml0ZWQpIHsKKwkJcHJpbnRmICgiZmxhc2hDaGVjazogZmxhc2hMaWIgbm90IGluaXRpYWxpemVkXG4iKTsKKwkJcmV0dXJuIEVSUk9SOwogCX0KIAotCWlmIChkYXRhICYgMHgyMCkgewotCSAgICAvKgotCSAgICAgKiBJZiB0aGUgMHgyMCBiaXQgaGFzIGNvbWUgb24sIGl0IGNvdWxkIGFjdHVhbGx5IGJlIGJlY2F1c2UKLQkgICAgICogdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQsIHNvIGNoZWNrIHRoZSBkb25lIGJpdCBhZ2Fpbi4KLQkgICAgICovCisJaWYgKGRldiA8ICZmbGFzaERldlswXSB8fCBkZXYgPj0gJmZsYXNoRGV2W2ZsYXNoRGV2Q291bnRdKSB7CisJCXByaW50ZiAoImZsYXNoQ2hlY2s6IEJhZCBkZXYgcGFyYW1ldGVyXG4iKTsKKwkJcmV0dXJuIEVSUk9SOworCX0KIAotCSAgICBkYXRhID0gRkxBU0gwX1JFQUQoZGV2LCBhZGRyKTsKKwlpZiAoIWRldi0+Zm91bmQpIHsKKwkJcHJpbnRmICgiZmxhc2hDaGVjazogRGV2aWNlICVkIG5vdCBhdmFpbGFibGVcbiIsIERFVl9OTyAoZGV2KSk7CisJCXJldHVybiBFUlJPUjsKKwl9CiAKLQkgICAgaWYgKCgoZGF0YSBeIGV4cGVjdCkgJiAweDgwKSA9PSAwKSB7CisJcmV0dXJuIE9LOworfQorCitQUklWQVRFIHZvaWQgZmxhc2hSZXNldCAoZmxhc2hfZGV2X3QgKiBkZXYpCit7CisJUFJJTlRGICgiZmxhc2hSZXNldDogZGV2PSVkXG4iLCBERVZfTk8gKGRldikpOworCisJaWYgKGRldi0+YmFuayA9PSBGTEFTSDBfQkFOSykgeworCQlGTEFTSDBfV1JJVEUgKGRldiwgMHg1NTUsIDB4YWEpOworCQlGTEFTSDBfV1JJVEUgKGRldiwgMHhhYWEsIDB4NTUpOworCQlGTEFTSDBfV1JJVEUgKGRldiwgMHg1NTUsIDB4ZjApOworCX0KKworCXVkZWxheSAoU0xFRVBfREVMQVkpOworCisJUFJJTlRGICgiZmxhc2hSZXNldDogZG9uZVxuIik7Cit9CisKK1BSSVZBVEUgaW50IGZsYXNoUHJvYmUgKGZsYXNoX2Rldl90ICogZGV2KQoreworCWludCBydiwgZGV2aWNlSUQsIHZlbmRvcklEOworCisJUFJJTlRGICgiZmxhc2hQcm9iZTogZGV2PSVkXG4iLCBERVZfTk8gKGRldikpOworCisJaWYgKGRldi0+YmFuayAhPSBGTEFTSDBfQkFOSykgeworCQlydiA9IEVSUk9SOworCQlnb3RvIERPTkU7CisJfQorCisJRkxBU0gwX1dSSVRFIChkZXYsIDB4YWFhLCAweGFhKTsKKwlGTEFTSDBfV1JJVEUgKGRldiwgMHg1NTUsIDB4NTUpOworCUZMQVNIMF9XUklURSAoZGV2LCAweGFhYSwgMHg5MCk7CisKKwl1ZGVsYXkgKFNMRUVQX0RFTEFZKTsKKworCXZlbmRvcklEID0gRkxBU0gwX1JFQUQgKGRldiwgMCk7CisJZGV2aWNlSUQgPSBGTEFTSDBfUkVBRCAoZGV2LCAyKTsKKworCUZMQVNIMF9XUklURSAoZGV2LCAwLCAweGYwKTsKKworCVBSSU5URiAoImZsYXNoUHJvYmU6IHZlbmRvcj0weCV4IGRldmljZT0weCV4XG4iLCB2ZW5kb3JJRCwgZGV2aWNlSUQpOworCisJaWYgKHZlbmRvcklEID09IGRldi0+dmVuZG9ySUQgJiYgZGV2aWNlSUQgPT0gZGV2LT5kZXZpY2VJRCkKIAkJcnYgPSBPSzsKLQkJZ290byBkb25lOwotCSAgICB9CisJZWxzZQorCQlydiA9IEVSUk9SOwogCi0JICAgIHByaW50ZigiZmxhc2hXYWl0OiBQcm9ncmFtIGVycm9yIChkZXY6ICVkLCBhZGRyOiAweCV4KVxuIiwKLQkJICAgREVWX05PKGRldiksIGFkZHIpOworICBET05FOgorCVBSSU5URiAoImZsYXNoUHJvYmU6IHJ2PSVkXG4iLCBydik7CiAKLQkgICAgZmxhc2hSZXNldChkZXYpOwotCSAgICBydiA9IEVSUk9SOwotCSAgICBnb3RvIGRvbmU7Ci0JfQotICAgIH0KKwlyZXR1cm4gcnY7Cit9CiAKLSAgICBwcmludGYoImZsYXNoV2FpdDogVGltZW91dCAlcyAoZGV2OiAlZCwgYWRkcjogMHgleClcbiIsCi0JICAgZXJhc2UgPyAiZXJhc2luZyBzZWN0b3IiIDogInByb2dyYW1taW5nIGJ5dGUiLAotCSAgIERFVl9OTyhkZXYpLCBhZGRyKTsKLQotZG9uZToKK1BSSVZBVEUgaW50IGZsYXNoV2FpdCAoZmxhc2hfZGV2X3QgKiBkZXYsIGludCBhZGRyLCBpbnQgZXhwZWN0LCBpbnQgZXJhc2UpCit7CisJaW50IHJ2ID0gRVJST1I7CisJaW50IGksIGRhdGE7CisJaW50IHBvbGxzOwogCiAjaWYgMAotICAgIFBSSU5URigiZmxhc2hXYWl0OiBydj0lZFxuIiwgcnYpOworCVBSSU5URiAoImZsYXNoV2FpdDogZGV2PSVkIGFkZHI9MHgleCBleHBlY3Q9MHgleCBlcmFzZT0lZFxuIiwKKwkJREVWX05PIChkZXYpLCBhZGRyLCBleHBlY3QsIGVyYXNlKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIHJ2OworCWlmIChkZXYtPmJhbmsgIT0gRkxBU0gwX0JBTkspIHsKKwkJcnYgPSBFUlJPUjsKKwkJZ290byBkb25lOworCX0KKworCWlmIChlcmFzZSkKKwkJcG9sbHMgPSBGTEFTSF9FUkFTRV9TRUNUT1JfVElNRU9VVDsJLyogVGlja3MgKi8KKwllbHNlCisJCXBvbGxzID0gRkxBU0hfUFJPR1JBTV9QT0xMUzsJLyogTG9vcHMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBwb2xsczsgaSsrKSB7CisJCWlmIChlcmFzZSkKKwkJCXVkZWxheSAoU0xFRVBfREVMQVkpOworCisJCWRhdGEgPSBGTEFTSDBfUkVBRCAoZGV2LCBhZGRyKTsKKworCQlpZiAoKChkYXRhIF4gZXhwZWN0KSAmIDB4ODApID09IDApIHsKKwkJCXJ2ID0gT0s7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlpZiAoZGF0YSAmIDB4MjApIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgMHgyMCBiaXQgaGFzIGNvbWUgb24sIGl0IGNvdWxkIGFjdHVhbGx5IGJlIGJlY2F1c2UKKwkJCSAqIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLCBzbyBjaGVjayB0aGUgZG9uZSBiaXQgYWdhaW4uCisJCQkgKi8KKworCQkJZGF0YSA9IEZMQVNIMF9SRUFEIChkZXYsIGFkZHIpOworCisJCQlpZiAoKChkYXRhIF4gZXhwZWN0KSAmIDB4ODApID09IDApIHsKKwkJCQlydiA9IE9LOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJcHJpbnRmICgiZmxhc2hXYWl0OiBQcm9ncmFtIGVycm9yIChkZXY6ICVkLCBhZGRyOiAweCV4KVxuIiwKKwkJCQkJREVWX05PIChkZXYpLCBhZGRyKTsKKworCQkJZmxhc2hSZXNldCAoZGV2KTsKKwkJCXJ2ID0gRVJST1I7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwlwcmludGYgKCJmbGFzaFdhaXQ6IFRpbWVvdXQgJXMgKGRldjogJWQsIGFkZHI6IDB4JXgpXG4iLAorCQllcmFzZSA/ICJlcmFzaW5nIHNlY3RvciIgOiAicHJvZ3JhbW1pbmcgYnl0ZSIsCisJCURFVl9OTyAoZGV2KSwgYWRkcik7CisKKyAgZG9uZToKKworI2lmIDAKKwlQUklOVEYgKCJmbGFzaFdhaXQ6IHJ2PSVkXG4iLCBydik7CisjZW5kaWYKKworCXJldHVybiBydjsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjIsNzcgKzI2Myw3OCBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotU1RBVFVTIGZsYXNoTGliSW5pdCh2b2lkKQorU1RBVFVTIGZsYXNoTGliSW5pdCAodm9pZCkKIHsKLSAgICBpbnQJCQlpOworCWludCBpOwogCi0gICAgUFJJTlRGKCJmbGFzaExpYkluaXQ6IGRldmljZXM9JWRcbiIsIGZsYXNoRGV2Q291bnQpOworCVBSSU5URiAoImZsYXNoTGliSW5pdDogZGV2aWNlcz0lZFxuIiwgZmxhc2hEZXZDb3VudCk7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgZmxhc2hEZXZDb3VudDsgaSsrKSB7Ci0JZmxhc2hfZGV2X3QJKmRldiA9ICZmbGFzaERldltpXTsKLQkvKgotCSAqIEZvciBiYW5rIDEsIHByb2JlIGJvdGggd2l0aG91dCBhbmQgd2l0aCBieXRlIHN3YXBwYWdlLAotCSAqIHNvIHRoYXQgdGhpcyBtb2R1bGUgd29ya3Mgb24gYm90aCBvbGQgYW5kIG5ldyBNb3Vzc2UgYm9hcmRzLgotCSAqLworCWZvciAoaSA9IDA7IGkgPCBmbGFzaERldkNvdW50OyBpKyspIHsKKwkJZmxhc2hfZGV2X3QgKmRldiA9ICZmbGFzaERldltpXTsKIAotCWZsYXNoUmVzZXQoZGV2KTsKKwkJLyoKKwkJICogRm9yIGJhbmsgMSwgcHJvYmUgYm90aCB3aXRob3V0IGFuZCB3aXRoIGJ5dGUgc3dhcHBhZ2UsCisJCSAqIHNvIHRoYXQgdGhpcyBtb2R1bGUgd29ya3Mgb24gYm90aCBvbGQgYW5kIG5ldyBNb3Vzc2UgYm9hcmRzLgorCQkgKi8KIAotCWlmIChmbGFzaFByb2JlKGRldikgIT0gRVJST1IpCi0JICAgIGRldi0+Zm91bmQgPSAxOworCQlmbGFzaFJlc2V0IChkZXYpOwogCi0JICAgIGZsYXNoUmVzZXQoZGV2KTsKKwkJaWYgKGZsYXNoUHJvYmUgKGRldikgIT0gRVJST1IpCisJCQlkZXYtPmZvdW5kID0gMTsKIAotCSAgICBpZiAoZmxhc2hQcm9iZShkZXYpICE9IEVSUk9SKQotCQlkZXYtPmZvdW5kID0gMTsKKwkJZmxhc2hSZXNldCAoZGV2KTsKIAotCSAgICBkZXYtPnN3YXAgPSAwOworCQlpZiAoZmxhc2hQcm9iZSAoZGV2KSAhPSBFUlJPUikKKwkJCWRldi0+Zm91bmQgPSAxOwogCi0JICAgIGlmKGRldi0+Zm91bmQpewotCSAgICAgIFBSSU5URigiXG4gIEZMQVNIICVzWyVkXTogaW9iYXNlPTB4JXggLSAlZCBzZWN0b3JzICVkIEtCIiwKLQkJICAgICBmbGFzaERldltpXS5uYW1lLGksZmxhc2hEZXZbaV0uYmFzZSwgZmxhc2hEZXZbaV0uc2VjdG9ycywKLQkJICAgICAoZmxhc2hEZXZbaV0uc2VjdG9ycyAqIEZMQVNIX1NFQ1RPUl9TSVpFKS8xMDI0KTsKKwkJZGV2LT5zd2FwID0gMDsKIAotCSAgICB9Ci0gICAgfQorCQlpZiAoZGV2LT5mb3VuZCkgeworCQkJUFJJTlRGICgiXG4gIEZMQVNIICVzWyVkXTogaW9iYXNlPTB4JXggLSAlZCBzZWN0b3JzICVkIEtCIiwKKwkJCQlmbGFzaERldltpXS5uYW1lLCBpLCBmbGFzaERldltpXS5iYXNlLAorCQkJCWZsYXNoRGV2W2ldLnNlY3RvcnMsCisJCQkJKGZsYXNoRGV2W2ldLnNlY3RvcnMgKiBGTEFTSF9TRUNUT1JfU0laRSkgLyAxMDI0KTsKIAotICAgIGZsYXNoTGliSW5pdGVkID0gMTsKKwkJfQorCX0KIAotICAgIFBSSU5URigiZmxhc2hMaWJJbml0OiBkb25lXG4iKTsKKwlmbGFzaExpYkluaXRlZCA9IDE7CiAKLSAgICByZXR1cm4gT0s7CisJUFJJTlRGICgiZmxhc2hMaWJJbml0OiBkb25lXG4iKTsKKworCXJldHVybiBPSzsKIH0KIAotU1RBVFVTIGZsYXNoRXJhc2VTZWN0b3IoZmxhc2hfZGV2X3QgKmRldiwgaW50IHNlY3RvcikKK1NUQVRVUyBmbGFzaEVyYXNlU2VjdG9yIChmbGFzaF9kZXZfdCAqIGRldiwgaW50IHNlY3RvcikKIHsKLSAgICBpbnQJCQlwb3MsIGFkZHI7CisJaW50IHBvcywgYWRkcjsKIAotICAgIFBSSU5URigiZmxhc2hFcmFzZXNlY3RvcjogZGV2PSVkIHNlY3Rvcj0lZFxuIiwgREVWX05PKGRldiksIHNlY3Rvcik7CisJUFJJTlRGICgiZmxhc2hFcmFzZXNlY3RvcjogZGV2PSVkIHNlY3Rvcj0lZFxuIiwgREVWX05PIChkZXYpLCBzZWN0b3IpOwogCi0gICAgaWYgKGZsYXNoQ2hlY2soZGV2KSA9PSBFUlJPUikKLQlyZXR1cm4gRVJST1I7CisJaWYgKGZsYXNoQ2hlY2sgKGRldikgPT0gRVJST1IpCisJCXJldHVybiBFUlJPUjsKIAotICAgIGlmIChzZWN0b3IgPCAwIHx8IHNlY3RvciA+PSBkZXYtPnNlY3RvcnMpIHsKLQlwcmludGYoImZsYXNoRXJhc2VTZWN0b3I6IFNlY3RvciBvdXQgb2YgcmFuZ2UgKGRldjogJWQsIHNlY3RvcjogJWQpXG4iLAotCSAgICAgICBERVZfTk8oZGV2KSwgc2VjdG9yKTsKLQlyZXR1cm4gRVJST1I7Ci0gICAgfQorCWlmIChzZWN0b3IgPCAwIHx8IHNlY3RvciA+PSBkZXYtPnNlY3RvcnMpIHsKKwkJcHJpbnRmICgiZmxhc2hFcmFzZVNlY3RvcjogU2VjdG9yIG91dCBvZiByYW5nZSAoZGV2OiAlZCwgc2VjdG9yOiAlZClcbiIsIERFVl9OTyAoZGV2KSwgc2VjdG9yKTsKKwkJcmV0dXJuIEVSUk9SOworCX0KIAotICAgIHBvcyA9IEZMQVNIX1NFQ1RPUl9QT1MoZGV2LCBzZWN0b3IpOworCXBvcyA9IEZMQVNIX1NFQ1RPUl9QT1MgKGRldiwgc2VjdG9yKTsKIAotICAgIGlmIChkZXYtPmJhbmsgIT0gRkxBU0gwX0JBTkspIHsKLQlyZXR1cm4gRVJST1I7Ci0gICAgfQorCWlmIChkZXYtPmJhbmsgIT0gRkxBU0gwX0JBTkspIHsKKwkJcmV0dXJuIEVSUk9SOworCX0KIAotICAgIGFkZHIgPSBwb3M7CisJYWRkciA9IHBvczsKIAotICAgIEZMQVNIMF9XUklURShkZXYsIDB4YWFhLCAweGFhKTsKLSAgICBGTEFTSDBfV1JJVEUoZGV2LCAweDU1NSwgMHg1NSk7Ci0gICAgRkxBU0gwX1dSSVRFKGRldiwgMHhhYWEsIDB4ODApOwotICAgIEZMQVNIMF9XUklURShkZXYsIDB4YWFhLCAweGFhKTsKLSAgICBGTEFTSDBfV1JJVEUoZGV2LCAweDU1NSwgMHg1NSk7Ci0gICAgRkxBU0gwX1dSSVRFKGRldiwgYWRkciwgMHgzMCk7CisJRkxBU0gwX1dSSVRFIChkZXYsIDB4YWFhLCAweGFhKTsKKwlGTEFTSDBfV1JJVEUgKGRldiwgMHg1NTUsIDB4NTUpOworCUZMQVNIMF9XUklURSAoZGV2LCAweGFhYSwgMHg4MCk7CisJRkxBU0gwX1dSSVRFIChkZXYsIDB4YWFhLCAweGFhKTsKKwlGTEFTSDBfV1JJVEUgKGRldiwgMHg1NTUsIDB4NTUpOworCUZMQVNIMF9XUklURSAoZGV2LCBhZGRyLCAweDMwKTsKIAotICAgIHJldHVybiBmbGFzaFdhaXQoZGV2LCBhZGRyLCAweGZmLCAxKTsKKwlyZXR1cm4gZmxhc2hXYWl0IChkZXYsIGFkZHIsIDB4ZmYsIDEpOwogfQogCiAvKgpAQCAtMzQyLDE1NiArMzQ0LDE1NiBAQAogICogdGhleSB3ZXJlIGNvbXBsZXRlIGRldmljZXMsIHdlIGRvbid0IHVzZSBDaGlwIEVyYXNlLgogICovCiAKLVNUQVRVUyBmbGFzaEVyYXNlKGZsYXNoX2Rldl90ICpkZXYpCitTVEFUVVMgZmxhc2hFcmFzZSAoZmxhc2hfZGV2X3QgKiBkZXYpCiB7Ci0gICAgaW50CQkJc2VjdG9yOworCWludCBzZWN0b3I7CiAKLSAgICBQUklOVEYoImZsYXNoRXJhc2U6IGRldj0lZCBzZWN0b3JzPSVkXG4iLCBERVZfTk8oZGV2KSwgZGV2LT5zZWN0b3JzKTsKKwlQUklOVEYgKCJmbGFzaEVyYXNlOiBkZXY9JWQgc2VjdG9ycz0lZFxuIiwgREVWX05PIChkZXYpLCBkZXYtPnNlY3RvcnMpOwogCi0gICAgaWYgKGZsYXNoQ2hlY2soZGV2KSA9PSBFUlJPUikKLQlyZXR1cm4gRVJST1I7CisJaWYgKGZsYXNoQ2hlY2sgKGRldikgPT0gRVJST1IpCisJCXJldHVybiBFUlJPUjsKIAotICAgIGZvciAoc2VjdG9yID0gMDsgc2VjdG9yIDwgZGV2LT5zZWN0b3JzOyBzZWN0b3IrKykgewotICAgICAgaWYgKGZsYXNoRXJhc2VTZWN0b3IoZGV2LCBzZWN0b3IpID09IEVSUk9SKQotCSAgICByZXR1cm4gRVJST1I7Ci0gICAgfQotICAgIHJldHVybiBPSzsKKwlmb3IgKHNlY3RvciA9IDA7IHNlY3RvciA8IGRldi0+c2VjdG9yczsgc2VjdG9yKyspIHsKKwkJaWYgKGZsYXNoRXJhc2VTZWN0b3IgKGRldiwgc2VjdG9yKSA9PSBFUlJPUikKKwkJCXJldHVybiBFUlJPUjsKKwl9CisJcmV0dXJuIE9LOwogfQogCiAvKgogICogUmVhZCBhbmQgd3JpdGUgYnl0ZXMKICAqLwogCi1TVEFUVVMgZmxhc2hSZWFkKGZsYXNoX2Rldl90ICpkZXYsIGludCBwb3MsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK1NUQVRVUyBmbGFzaFJlYWQgKGZsYXNoX2Rldl90ICogZGV2LCBpbnQgcG9zLCBjaGFyICpidWYsIGludCBsZW4pCiB7Ci0gICAgaW50CQkJYWRkciwgd29yZHM7CisJaW50IGFkZHIsIHdvcmRzOwogCi0gICAgUFJJTlRGKCJmbGFzaFJlYWQ6IGRldj0lZCBwb3M9MHgleCBidWY9MHgleCBsZW49MHgleFxuIiwKLQkgICBERVZfTk8oZGV2KSwgcG9zLCAoaW50KSBidWYsIGxlbik7CisJUFJJTlRGICgiZmxhc2hSZWFkOiBkZXY9JWQgcG9zPTB4JXggYnVmPTB4JXggbGVuPTB4JXhcbiIsCisJCURFVl9OTyAoZGV2KSwgcG9zLCAoaW50KSBidWYsIGxlbik7CiAKLSAgICBpZiAoZmxhc2hDaGVjayhkZXYpID09IEVSUk9SKQotCXJldHVybiBFUlJPUjsKKwlpZiAoZmxhc2hDaGVjayAoZGV2KSA9PSBFUlJPUikKKwkJcmV0dXJuIEVSUk9SOwogCi0gICAgaWYgKHBvcyA8IDAgfHwgbGVuIDwgMCB8fCBwb3MgKyBsZW4gPiBGTEFTSF9NQVhfUE9TKGRldikpIHsKLQlwcmludGYoImZsYXNoUmVhZDogUG9zaXRpb24gb3V0IG9mIHJhbmdlICIKLQkgICAgICAgIihkZXY6ICVkLCBwb3M6IDB4JXgsIGxlbjogMHgleClcbiIsCi0JICAgICAgIERFVl9OTyhkZXYpLCBwb3MsIGxlbik7Ci0JcmV0dXJuIEVSUk9SOwotICAgIH0KKwlpZiAocG9zIDwgMCB8fCBsZW4gPCAwIHx8IHBvcyArIGxlbiA+IEZMQVNIX01BWF9QT1MgKGRldikpIHsKKwkJcHJpbnRmICgiZmxhc2hSZWFkOiBQb3NpdGlvbiBvdXQgb2YgcmFuZ2UgIgorCQkJIihkZXY6ICVkLCBwb3M6IDB4JXgsIGxlbjogMHgleClcbiIsCisJCQlERVZfTk8gKGRldiksIHBvcywgbGVuKTsKKwkJcmV0dXJuIEVSUk9SOworCX0KIAotICAgIGlmIChsZW4gPT0gMCkKKwlpZiAobGVuID09IDApCisJCXJldHVybiBPSzsKKworCWlmIChkZXYtPmJhbmsgPT0gRkxBU0gwX0JBTkspIHsKKwkJYWRkciA9IHBvczsKKwkJd29yZHMgPSBsZW47CisKKwkJUFJJTlRGICgiZmxhc2hSZWFkOiBtZW1jcHkoMHgleCwgMHgleCwgMHgleClcbiIsCisJCQkoaW50KSBidWYsIChpbnQpIEZMQVNIMF9BRERSIChkZXYsIHBvcyksIGxlbik7CisKKwkJbWVtY3B5IChidWYsIEZMQVNIMF9BRERSIChkZXYsIGFkZHIpLCB3b3Jkcyk7CisKKwl9CisJUFJJTlRGICgiZmxhc2hSZWFkOiBydj1PS1xuIik7CisKIAlyZXR1cm4gT0s7Ci0KLSAgICBpZiAoZGV2LT5iYW5rID09IEZMQVNIMF9CQU5LKSB7Ci0JYWRkciA9IHBvczsKLQl3b3JkcyA9IGxlbjsKLQotCVBSSU5URigiZmxhc2hSZWFkOiBtZW1jcHkoMHgleCwgMHgleCwgMHgleClcbiIsCi0JICAgICAgIChpbnQpIGJ1ZiwgKGludCkgRkxBU0gwX0FERFIoZGV2LCBwb3MpLCBsZW4pOwotCi0JbWVtY3B5KGJ1ZiwgRkxBU0gwX0FERFIoZGV2LCBhZGRyKSwgd29yZHMpOwotCi0gICAgfQotICAgIFBSSU5URigiZmxhc2hSZWFkOiBydj1PS1xuIik7Ci0KLSAgICByZXR1cm4gT0s7CiB9CiAKLVNUQVRVUyBmbGFzaFdyaXRlKGZsYXNoX2Rldl90ICpkZXYsIGludCBwb3MsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK1NUQVRVUyBmbGFzaFdyaXRlIChmbGFzaF9kZXZfdCAqIGRldiwgaW50IHBvcywgY2hhciAqYnVmLCBpbnQgbGVuKQogewotICAgIGludCAJCWFkZHIsIHdvcmRzOworCWludCBhZGRyLCB3b3JkczsKIAotICAgIFBSSU5URigiZmxhc2hXcml0ZTogZGV2PSVkIHBvcz0weCV4IGJ1Zj0weCV4IGxlbj0weCV4XG4iLAotCSAgIERFVl9OTyhkZXYpLCBwb3MsIChpbnQpIGJ1ZiwgbGVuKTsKKwlQUklOVEYgKCJmbGFzaFdyaXRlOiBkZXY9JWQgcG9zPTB4JXggYnVmPTB4JXggbGVuPTB4JXhcbiIsCisJCURFVl9OTyAoZGV2KSwgcG9zLCAoaW50KSBidWYsIGxlbik7CiAKLSAgICBpZiAoZmxhc2hDaGVjayhkZXYpID09IEVSUk9SKQotCXJldHVybiBFUlJPUjsKLQotICAgIGlmIChwb3MgPCAwIHx8IGxlbiA8IDAgfHwgcG9zICsgbGVuID4gRkxBU0hfTUFYX1BPUyhkZXYpKSB7Ci0JcHJpbnRmKCJmbGFzaFdyaXRlOiBQb3NpdGlvbiBvdXQgb2YgcmFuZ2UgIgotCSAgICAgICAiKGRldjogJWQsIHBvczogMHgleCwgbGVuOiAweCV4KVxuIiwKLQkgICAgICAgREVWX05PKGRldiksIHBvcywgbGVuKTsKLQlyZXR1cm4gRVJST1I7Ci0gICAgfQotCi0gICAgaWYgKGxlbiA9PSAwKQotCXJldHVybiBPSzsKLQotICAgIGlmIChkZXYtPmJhbmsgPT0gRkxBU0gwX0JBTkspIHsKLQl1bnNpZ25lZCBjaGFyIHRtcDsKLQotCWFkZHIgPSBwb3M7Ci0Jd29yZHMgPSBsZW47Ci0KLQl3aGlsZSAod29yZHMtLSkgewotCSAgICB0bXAgPSAqYnVmOwotCSAgICBpZiAofkZMQVNIMF9SRUFEKGRldiwgYWRkcikgJiB0bXApIHsKLQkJcHJpbnRmKCJmbGFzaFdyaXRlOiBBdHRlbXB0IHRvIHByb2dyYW0gMCB0byAxICIKLQkJICAgICAgICIoZGV2OiAlZCwgYWRkcjogMHgleCwgZGF0YTogMHgleClcbiIsCi0JCSAgICAgICBERVZfTk8oZGV2KSwgYWRkciwgdG1wKTsKKwlpZiAoZmxhc2hDaGVjayAoZGV2KSA9PSBFUlJPUikKIAkJcmV0dXJuIEVSUk9SOwotCSAgICB9Ci0JICAgIEZMQVNIMF9XUklURShkZXYsIDB4YWFhLCAweGFhKTsKLQkgICAgRkxBU0gwX1dSSVRFKGRldiwgMHg1NTUsIDB4NTUpOwotCSAgICBGTEFTSDBfV1JJVEUoZGV2LCAweGFhYSwgMHhhMCk7Ci0JICAgIEZMQVNIMF9XUklURShkZXYsIGFkZHIsIHRtcCk7Ci0JICAgIGlmIChmbGFzaFdhaXQoZGV2LCBhZGRyLCB0bXAsIDApIDwgMCkKKworCWlmIChwb3MgPCAwIHx8IGxlbiA8IDAgfHwgcG9zICsgbGVuID4gRkxBU0hfTUFYX1BPUyAoZGV2KSkgeworCQlwcmludGYgKCJmbGFzaFdyaXRlOiBQb3NpdGlvbiBvdXQgb2YgcmFuZ2UgIgorCQkJIihkZXY6ICVkLCBwb3M6IDB4JXgsIGxlbjogMHgleClcbiIsCisJCQlERVZfTk8gKGRldiksIHBvcywgbGVuKTsKIAkJcmV0dXJuIEVSUk9SOwotCSAgICBidWYrKzsKLQkgICAgYWRkcisrOwogCX0KLSAgICB9CiAKLSAgICBQUklOVEYoImZsYXNoV3JpdGU6IHJ2PU9LXG4iKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBPSzsKIAotICAgIHJldHVybiBPSzsKKwlpZiAoZGV2LT5iYW5rID09IEZMQVNIMF9CQU5LKSB7CisJCXVuc2lnbmVkIGNoYXIgdG1wOworCisJCWFkZHIgPSBwb3M7CisJCXdvcmRzID0gbGVuOworCisJCXdoaWxlICh3b3Jkcy0tKSB7CisJCQl0bXAgPSAqYnVmOworCQkJaWYgKH5GTEFTSDBfUkVBRCAoZGV2LCBhZGRyKSAmIHRtcCkgeworCQkJCXByaW50ZiAoImZsYXNoV3JpdGU6IEF0dGVtcHQgdG8gcHJvZ3JhbSAwIHRvIDEgIgorCQkJCQkiKGRldjogJWQsIGFkZHI6IDB4JXgsIGRhdGE6IDB4JXgpXG4iLAorCQkJCQlERVZfTk8gKGRldiksIGFkZHIsIHRtcCk7CisJCQkJcmV0dXJuIEVSUk9SOworCQkJfQorCQkJRkxBU0gwX1dSSVRFIChkZXYsIDB4YWFhLCAweGFhKTsKKwkJCUZMQVNIMF9XUklURSAoZGV2LCAweDU1NSwgMHg1NSk7CisJCQlGTEFTSDBfV1JJVEUgKGRldiwgMHhhYWEsIDB4YTApOworCQkJRkxBU0gwX1dSSVRFIChkZXYsIGFkZHIsIHRtcCk7CisJCQlpZiAoZmxhc2hXYWl0IChkZXYsIGFkZHIsIHRtcCwgMCkgPCAwKQorCQkJCXJldHVybiBFUlJPUjsKKwkJCWJ1ZisrOworCQkJYWRkcisrOworCQl9CisJfQorCisJUFJJTlRGICgiZmxhc2hXcml0ZTogcnY9T0tcbiIpOworCisJcmV0dXJuIE9LOwogfQogCiAvKgogICogZmxhc2hXcml0YWJsZSByZXR1cm5zIFRSVUUgaWYgYSByYW5nZSBjb250YWlucyBhbGwgRidzLgogICovCiAKLVNUQVRVUyBmbGFzaFdyaXRhYmxlKGZsYXNoX2Rldl90ICpkZXYsIGludCBwb3MsIGludCBsZW4pCitTVEFUVVMgZmxhc2hXcml0YWJsZSAoZmxhc2hfZGV2X3QgKiBkZXYsIGludCBwb3MsIGludCBsZW4pCiB7Ci0gICAgaW50IAkJYWRkciwgd29yZHM7Ci0gICAgaW50CQkJcnYgPSBFUlJPUjsKKwlpbnQgYWRkciwgd29yZHM7CisJaW50IHJ2ID0gRVJST1I7CiAKLSAgICBQUklOVEYoImZsYXNoV3JpdGFibGU6IGRldj0lZCBwb3M9MHgleCBsZW49MHgleFxuIiwKLQkgICBERVZfTk8oZGV2KSwgcG9zLCBsZW4pOworCVBSSU5URiAoImZsYXNoV3JpdGFibGU6IGRldj0lZCBwb3M9MHgleCBsZW49MHgleFxuIiwKKwkJCURFVl9OTyAoZGV2KSwgcG9zLCBsZW4pOwogCi0gICAgaWYgKGZsYXNoQ2hlY2soZGV2KSA9PSBFUlJPUikKLQlnb3RvIGRvbmU7Ci0KLSAgICBpZiAocG9zIDwgMCB8fCBsZW4gPCAwIHx8IHBvcyArIGxlbiA+IEZMQVNIX01BWF9QT1MoZGV2KSkgewotCXByaW50ZigiZmxhc2hXcml0YWJsZTogUG9zaXRpb24gb3V0IG9mIHJhbmdlICIKLQkgICAgICAgIihkZXY6ICVkLCBwb3M6IDB4JXgsIGxlbjogMHgleClcbiIsCi0JICAgICAgIERFVl9OTyhkZXYpLCBwb3MsIGxlbik7Ci0JZ290byBkb25lOwotICAgIH0KLQotICAgIGlmIChsZW4gPT0gMCkgewotCXJ2ID0gMTsKLQlnb3RvIGRvbmU7Ci0gICAgfQotCi0gICAgaWYgKGRldi0+YmFuayA9PSBGTEFTSDBfQkFOSykgewotCWFkZHIgPSBwb3M7Ci0Jd29yZHMgPSBsZW47Ci0KLQl3aGlsZSAod29yZHMtLSkgewotCSAgICBpZiAoRkxBU0gwX1JFQUQoZGV2LCBhZGRyKSAhPSAweGZmKSB7Ci0JCXJ2ID0gMDsKKwlpZiAoZmxhc2hDaGVjayAoZGV2KSA9PSBFUlJPUikKIAkJZ290byBkb25lOwotCSAgICB9Ci0JICAgIGFkZHIrKzsKKworCWlmIChwb3MgPCAwIHx8IGxlbiA8IDAgfHwgcG9zICsgbGVuID4gRkxBU0hfTUFYX1BPUyAoZGV2KSkgeworCQlwcmludGYgKCJmbGFzaFdyaXRhYmxlOiBQb3NpdGlvbiBvdXQgb2YgcmFuZ2UgIgorCQkJIihkZXY6ICVkLCBwb3M6IDB4JXgsIGxlbjogMHgleClcbiIsCisJCQlERVZfTk8gKGRldiksIHBvcywgbGVuKTsKKwkJZ290byBkb25lOwogCX0KLSAgICB9CiAKLSAgICBydiA9IDE7CisJaWYgKGxlbiA9PSAwKSB7CisJCXJ2ID0gMTsKKwkJZ290byBkb25lOworCX0KIAotIGRvbmU6Ci0gICAgUFJJTlRGKCJmbGFzaFdyaXRlOiBydj0lZFxuIiwgcnYpOwotICAgIHJldHVybiBydjsKKwlpZiAoZGV2LT5iYW5rID09IEZMQVNIMF9CQU5LKSB7CisJCWFkZHIgPSBwb3M7CisJCXdvcmRzID0gbGVuOworCisJCXdoaWxlICh3b3Jkcy0tKSB7CisJCQlpZiAoRkxBU0gwX1JFQUQgKGRldiwgYWRkcikgIT0gMHhmZikgeworCQkJCXJ2ID0gMDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlhZGRyKys7CisJCX0KKwl9CisKKwlydiA9IDE7CisKKyAgZG9uZToKKwlQUklOVEYgKCJmbGFzaFdyaXRlOiBydj0lZFxuIiwgcnYpOworCXJldHVybiBydjsKIH0KIAogCkBAIC01MDQsMTI4ICs1MDYsMTI2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1TVEFUVVMgZmxhc2hEaWFnKGZsYXNoX2Rldl90ICpkZXYpCitTVEFUVVMgZmxhc2hEaWFnIChmbGFzaF9kZXZfdCAqIGRldikKIHsKLSAgICB1bnNpZ25lZCBpbnQJKmJ1ZiA9IDA7Ci0gICAgaW50CQkJaSwgbGVuLCBzZWN0b3I7Ci0gICAgaW50CQkJcnYgPSBFUlJPUjsKKwl1bnNpZ25lZCBpbnQgKmJ1ZiA9IDA7CisJaW50IGksIGxlbiwgc2VjdG9yOworCWludCBydiA9IEVSUk9SOwogCi0gICAgaWYgKGZsYXNoQ2hlY2soZGV2KSA9PSBFUlJPUikKLQlyZXR1cm4gRVJST1I7CisJaWYgKGZsYXNoQ2hlY2sgKGRldikgPT0gRVJST1IpCisJCXJldHVybiBFUlJPUjsKIAotICAgIHByaW50ZigiZmxhc2hEaWFnOiBUZXN0aW5nIGRldmljZSAlZCwgIgotCSAgICJiYXNlOiAweCV4LCAlZCBzZWN0b3JzIEAgJWQga0IgPSAlZCBrQlxuIiwKLQkgICBERVZfTk8oZGV2KSwgZGV2LT5iYXNlLAotCSAgIGRldi0+c2VjdG9ycywKLQkgICAxIDw8IChkZXYtPmxnU2VjdG9yU2l6ZSAtIDEwKSwKLQkgICBkZXYtPnNlY3RvcnMgPDwgKGRldi0+bGdTZWN0b3JTaXplIC0gMTApKTsKKwlwcmludGYgKCJmbGFzaERpYWc6IFRlc3RpbmcgZGV2aWNlICVkLCAiCisJCSJiYXNlOiAweCV4LCAlZCBzZWN0b3JzIEAgJWQga0IgPSAlZCBrQlxuIiwKKwkJREVWX05PIChkZXYpLCBkZXYtPmJhc2UsCisJCWRldi0+c2VjdG9ycywKKwkJMSA8PCAoZGV2LT5sZ1NlY3RvclNpemUgLSAxMCksCisJCWRldi0+c2VjdG9ycyA8PCAoZGV2LT5sZ1NlY3RvclNpemUgLSAxMCkpOwogCi0gICAgbGVuID0gMSA8PCBkZXYtPmxnU2VjdG9yU2l6ZTsKKwlsZW4gPSAxIDw8IGRldi0+bGdTZWN0b3JTaXplOwogCi0gICAgcHJpbnRmKCJmbGFzaERpYWc6IEVyYXNpbmdcbiIpOworCXByaW50ZiAoImZsYXNoRGlhZzogRXJhc2luZ1xuIik7CiAKLSAgICBpZiAoZmxhc2hFcmFzZShkZXYpID09IEVSUk9SKSB7Ci0JcHJpbnRmKCJmbGFzaERpYWc6IEVyYXNlIGZhaWxlZFxuIik7Ci0JZ290byBkb25lOwotICAgIH0KLSAgICBwcmludGYoIiVkIGJ5dGVzIHJlcXVlc3RlZCAuLi5cbiIsIGxlbik7Ci0gICAgYnVmID0gbWFsbG9jKGxlbik7Ci0gICAgcHJpbnRmKCJhbGxvY2F0ZWQgJWQgYnl0ZXMgLi4uXG4iLCBsZW4pOwotICAgIGlmIChidWYgPT0gMCkgewotCXByaW50ZigiZmxhc2hEaWFnOiBPdXQgb2YgbWVtb3J5XG4iKTsKLQlnb3RvIGRvbmU7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBXcml0ZSB1bmlxdWUgY291bnRpbmcgcGF0dGVybiB0byBlYWNoIHNlY3RvcgotICAgICAqLwotCi0gICAgZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgPCBkZXYtPnNlY3RvcnM7IHNlY3RvcisrKSB7Ci0JcHJpbnRmKCJmbGFzaERpYWc6IFdyaXRlIHNlY3RvciAlZFxuIiwgc2VjdG9yKTsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW4gLyA0OyBpKyspCi0JICAgIGJ1ZltpXSA9IHNlY3RvciA8PCAyNCB8IGk7Ci0KLQlpZiAoZmxhc2hXcml0ZShkZXYsCi0JCSAgICAgICBzZWN0b3IgPDwgZGV2LT5sZ1NlY3RvclNpemUsCi0JCSAgICAgICAoY2hhciAqKSBidWYsCi0JCSAgICAgICBsZW4pID09IEVSUk9SKSB7Ci0JICAgIHByaW50ZigiZmxhc2hEaWFnOiBXcml0ZSBmYWlsZWQgKGRldjogJWQsIHNlY3RvcjogJWQpXG4iLAotCQkgICBERVZfTk8oZGV2KSwgc2VjdG9yKTsKLQkgICAgZ290byBkb25lOwotCX0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFZlcmlmeQotICAgICAqLwotCi0gICAgZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgPCBkZXYtPnNlY3RvcnM7IHNlY3RvcisrKSB7Ci0JcHJpbnRmKCJmbGFzaERpYWc6IFZlcmlmeSBzZWN0b3IgJWRcbiIsIHNlY3Rvcik7Ci0KLQlpZiAoZmxhc2hSZWFkKGRldiwKLQkJICAgICAgc2VjdG9yIDw8IGRldi0+bGdTZWN0b3JTaXplLAotCQkgICAgICAoY2hhciAqKSBidWYsCi0JCSAgICAgIGxlbikgPT0gRVJST1IpIHsKLQkgICAgcHJpbnRmKCJmbGFzaERpYWc6IFJlYWQgZmFpbGVkIChkZXY6ICVkLCBzZWN0b3I6ICVkKVxuIiwKLQkJICAgREVWX05PKGRldiksIHNlY3Rvcik7Ci0JICAgIGdvdG8gZG9uZTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gNDsgaSsrKSB7Ci0JICAgIGlmIChidWZbaV0gIT0gKHNlY3RvciA8PCAyNCB8IGkpKSB7Ci0JCXByaW50ZigiZmxhc2hEaWFnOiBWZXJpZnkgZXJyb3IgIgotCQkgICAgICAgIihkZXY6ICVkLCBzZWN0b3I6ICVkLCBvZmZzZXQ6IDB4JXgpXG4iLAotCQkgICAgICAgREVWX05PKGRldiksIHNlY3RvciwgaSk7Ci0JCXByaW50ZigiZmxhc2hEaWFnOiBFeHBlY3RlZCAweCUwOHgsIGdvdCAweCUwOHhcbiIsCi0JCSAgICAgICBzZWN0b3IgPDwgMjQgfCBpLCBidWZbaV0pOwotCisJaWYgKGZsYXNoRXJhc2UgKGRldikgPT0gRVJST1IpIHsKKwkJcHJpbnRmICgiZmxhc2hEaWFnOiBFcmFzZSBmYWlsZWRcbiIpOwogCQlnb3RvIGRvbmU7Ci0JICAgIH0KIAl9Ci0gICAgfQorCXByaW50ZiAoIiVkIGJ5dGVzIHJlcXVlc3RlZCAuLi5cbiIsIGxlbik7CisJYnVmID0gbWFsbG9jIChsZW4pOworCXByaW50ZiAoImFsbG9jYXRlZCAlZCBieXRlcyAuLi5cbiIsIGxlbik7CisJaWYgKGJ1ZiA9PSAwKSB7CisJCXByaW50ZiAoImZsYXNoRGlhZzogT3V0IG9mIG1lbW9yeVxuIik7CisJCWdvdG8gZG9uZTsKKwl9CiAKLSAgICBwcmludGYoImZsYXNoRGlhZzogRXJhc2luZ1xuIik7CisJLyoKKwkgKiBXcml0ZSB1bmlxdWUgY291bnRpbmcgcGF0dGVybiB0byBlYWNoIHNlY3RvcgorCSAqLwogCi0gICAgaWYgKGZsYXNoRXJhc2UoZGV2KSA9PSBFUlJPUikgewotCXByaW50ZigiZmxhc2hEaWFnOiBGaW5hbCBlcmFzZSBmYWlsZWRcbiIpOwotCWdvdG8gZG9uZTsKLSAgICB9CisJZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgPCBkZXYtPnNlY3RvcnM7IHNlY3RvcisrKSB7CisJCXByaW50ZiAoImZsYXNoRGlhZzogV3JpdGUgc2VjdG9yICVkXG4iLCBzZWN0b3IpOwogCi0gICAgcnYgPSBPSzsKKwkJZm9yIChpID0gMDsgaSA8IGxlbiAvIDQ7IGkrKykKKwkJCWJ1ZltpXSA9IHNlY3RvciA8PCAyNCB8IGk7CiAKLSBkb25lOgotICAgIGlmIChidWYpCi0JZnJlZShidWYpOworCQlpZiAoZmxhc2hXcml0ZSAoZGV2LAorCQkJCXNlY3RvciA8PCBkZXYtPmxnU2VjdG9yU2l6ZSwKKwkJCQkoY2hhciAqKSBidWYsIGxlbikgPT0gRVJST1IpIHsKKwkJCXByaW50ZiAoImZsYXNoRGlhZzogV3JpdGUgZmFpbGVkIChkZXY6ICVkLCBzZWN0b3I6ICVkKVxuIiwKKwkJCQlERVZfTk8gKGRldiksIHNlY3Rvcik7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CiAKLSAgICBpZiAocnYgPT0gT0spCi0JcHJpbnRmKCJmbGFzaERpYWc6IERldmljZSAlZCBwYXNzZWRcbiIsIERFVl9OTyhkZXYpKTsKLSAgICBlbHNlCi0JcHJpbnRmKCJmbGFzaERpYWc6IERldmljZSAlZCBmYWlsZWRcbiIsIERFVl9OTyhkZXYpKTsKKwkvKgorCSAqIFZlcmlmeQorCSAqLwogCi0gICAgcmV0dXJuIHJ2OworCWZvciAoc2VjdG9yID0gMDsgc2VjdG9yIDwgZGV2LT5zZWN0b3JzOyBzZWN0b3IrKykgeworCQlwcmludGYgKCJmbGFzaERpYWc6IFZlcmlmeSBzZWN0b3IgJWRcbiIsIHNlY3Rvcik7CisKKwkJaWYgKGZsYXNoUmVhZCAoZGV2LAorCQkJCSAgIHNlY3RvciA8PCBkZXYtPmxnU2VjdG9yU2l6ZSwKKwkJCQkgICAoY2hhciAqKSBidWYsIGxlbikgPT0gRVJST1IpIHsKKwkJCXByaW50ZiAoImZsYXNoRGlhZzogUmVhZCBmYWlsZWQgKGRldjogJWQsIHNlY3RvcjogJWQpXG4iLAorCQkJCURFVl9OTyAoZGV2KSwgc2VjdG9yKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBsZW4gLyA0OyBpKyspIHsKKwkJCWlmIChidWZbaV0gIT0gKHNlY3RvciA8PCAyNCB8IGkpKSB7CisJCQkJcHJpbnRmICgiZmxhc2hEaWFnOiBWZXJpZnkgZXJyb3IgIgorCQkJCQkiKGRldjogJWQsIHNlY3RvcjogJWQsIG9mZnNldDogMHgleClcbiIsCisJCQkJCURFVl9OTyAoZGV2KSwgc2VjdG9yLCBpKTsKKwkJCQlwcmludGYgKCJmbGFzaERpYWc6IEV4cGVjdGVkIDB4JTA4eCwgZ290IDB4JTA4eFxuIiwKKwkJCQkJc2VjdG9yIDw8IDI0IHwgaSwgYnVmW2ldKTsKKworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCX0KKworCXByaW50ZiAoImZsYXNoRGlhZzogRXJhc2luZ1xuIik7CisKKwlpZiAoZmxhc2hFcmFzZSAoZGV2KSA9PSBFUlJPUikgeworCQlwcmludGYgKCJmbGFzaERpYWc6IEZpbmFsIGVyYXNlIGZhaWxlZFxuIik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlydiA9IE9LOworCisgIGRvbmU6CisJaWYgKGJ1ZikKKwkJZnJlZSAoYnVmKTsKKworCWlmIChydiA9PSBPSykKKwkJcHJpbnRmICgiZmxhc2hEaWFnOiBEZXZpY2UgJWQgcGFzc2VkXG4iLCBERVZfTk8gKGRldikpOworCWVsc2UKKwkJcHJpbnRmICgiZmxhc2hEaWFnOiBEZXZpY2UgJWQgZmFpbGVkXG4iLCBERVZfTk8gKGRldikpOworCisJcmV0dXJuIHJ2OwogfQogCi1TVEFUVVMgZmxhc2hEaWFnQWxsKHZvaWQpCitTVEFUVVMgZmxhc2hEaWFnQWxsICh2b2lkKQogewotICAgIGludAkJCWk7Ci0gICAgaW50CQkJcnYgPSBPSzsKKwlpbnQgaTsKKwlpbnQgcnYgPSBPSzsKIAotICAgIFBSSU5URigiZmxhc2hEaWFnQWxsOiBkZXZpY2VzPSVkXG4iLCBmbGFzaERldkNvdW50KTsKKwlQUklOVEYgKCJmbGFzaERpYWdBbGw6IGRldmljZXM9JWRcbiIsIGZsYXNoRGV2Q291bnQpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGZsYXNoRGV2Q291bnQ7IGkrKykgewotCWZsYXNoX2Rldl90CSpkZXYgPSAmZmxhc2hEZXZbaV07CisJZm9yIChpID0gMDsgaSA8IGZsYXNoRGV2Q291bnQ7IGkrKykgeworCQlmbGFzaF9kZXZfdCAqZGV2ID0gJmZsYXNoRGV2W2ldOwogCi0JaWYgKGRldi0+Zm91bmQgJiYgZmxhc2hEaWFnKGRldikgPT0gRVJST1IpCi0JICAgIHJ2ID0gRVJST1I7Ci0gICAgfQorCQlpZiAoZGV2LT5mb3VuZCAmJiBmbGFzaERpYWcgKGRldikgPT0gRVJST1IpCisJCQlydiA9IEVSUk9SOworCX0KIAotICAgIGlmIChydiA9PSBPSykKLQlwcmludGYoImZsYXNoRGlhZ0FsbDogUGFzc2VkXG4iKTsKLSAgICBlbHNlCi0JcHJpbnRmKCJmbGFzaERpYWdBbGw6IEZhaWxlZCBiZWNhdXNlIG9mIGVhcmxpZXIgZXJyb3JzXG4iKTsKKwlpZiAocnYgPT0gT0spCisJCXByaW50ZiAoImZsYXNoRGlhZ0FsbDogUGFzc2VkXG4iKTsKKwllbHNlCisJCXByaW50ZiAoImZsYXNoRGlhZ0FsbDogRmFpbGVkIGJlY2F1c2Ugb2YgZWFybGllciBlcnJvcnNcbiIpOwogCi0gICAgcmV0dXJuIE9LOworCXJldHVybiBPSzsKIH0KIAogCkBAIC02MzMsMTk4ICs2MzMsMTk3IEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgZmxhc2hfaW5pdCAodm9pZCkKIHsKLSAgICB1bnNpZ25lZCBsb25nIHNpemUgPSAwOwotICAgIGZsYXNoX2Rldl90CSpkZXYgPSBOVUxMOwotICAgIGZsYXNoTGliSW5pdCgpOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CisJZmxhc2hfZGV2X3QgKmRldiA9IE5VTEw7CiAKLSAgICAvKgotICAgICAqIFByb3ZpZGUgaW5mbyBmb3IgRkxBU0ggKHVwIHRvIDk2MEspIG9mIEtlcm5lbCBJbWFnZSBkYXRhLgotICAgICAqLwotICAgIGRldiA9IEZMQVNIX0RFVl9CQU5LMF9MT1c7Ci0gICAgZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0tFUk5FTF0uZmxhc2hfaWQgPQotICAgICAgKGRldi0+dmVuZG9ySUQgPDwgMTYpIHwgZGV2LT5kZXZpY2VJRDsKLSAgICBmbGFzaF9pbmZvW0ZMQVNIX0JBTktfS0VSTkVMXS5zZWN0b3JfY291bnQgPSBkZXYtPnNlY3RvcnM7Ci0gICAgZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0tFUk5FTF0uc2l6ZSA9Ci0gICAgICBmbGFzaF9pbmZvW0ZMQVNIX0JBTktfS0VSTkVMXS5zZWN0b3JfY291bnQgKiBGTEFTSF9TRUNUT1JfU0laRTsKLSAgICBmbGFzaF9pbmZvW0ZMQVNIX0JBTktfS0VSTkVMXS5zdGFydFtGSVJTVF9TRUNUT1JdID0gZGV2LT5iYXNlOwotICAgIHNpemUgKz0gZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0tFUk5FTF0uc2l6ZTsKKwlmbGFzaExpYkluaXQgKCk7CiAKLSAgICAvKgotICAgICAqIFByb3ZpZGUgaW5mbyBmb3IgNTEySyBQTENDIEZMQVNIIFJPTSAoVS1Cb290KQotICAgICAqLwotICAgIGRldiA9IEZMQVNIX0RFVl9CQU5LMF9CT09UOwotICAgIGZsYXNoX2luZm9bRkxBU0hfQkFOS19CT09UXS5mbGFzaF9pZCA9Ci0gICAgICAoZGV2LT52ZW5kb3JJRCA8PCAxNikgfCBkZXYtPmRldmljZUlEOwotICAgIGZsYXNoX2luZm9bRkxBU0hfQkFOS19CT09UXS5zZWN0b3JfY291bnQgPSBkZXYtPnNlY3RvcnM7Ci0gICAgZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0JPT1RdLnNpemUgPQotICAgICAgZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0JPT1RdLnNlY3Rvcl9jb3VudCAqIEZMQVNIX1NFQ1RPUl9TSVpFOwotICAgIGZsYXNoX2luZm9bRkxBU0hfQkFOS19CT09UXS5zdGFydFtGSVJTVF9TRUNUT1JdID0gZGV2LT5iYXNlOwotICAgIHNpemUgKz0gZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0JPT1RdLnNpemU7CisJLyoKKwkgKiBQcm92aWRlIGluZm8gZm9yIEZMQVNIICh1cCB0byA5NjBLKSBvZiBLZXJuZWwgSW1hZ2UgZGF0YS4KKwkgKi8KKwlkZXYgPSBGTEFTSF9ERVZfQkFOSzBfTE9XOworCWZsYXNoX2luZm9bRkxBU0hfQkFOS19LRVJORUxdLmZsYXNoX2lkID0KKwkJCShkZXYtPnZlbmRvcklEIDw8IDE2KSB8IGRldi0+ZGV2aWNlSUQ7CisJZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0tFUk5FTF0uc2VjdG9yX2NvdW50ID0gZGV2LT5zZWN0b3JzOworCWZsYXNoX2luZm9bRkxBU0hfQkFOS19LRVJORUxdLnNpemUgPQorCQkJZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0tFUk5FTF0uc2VjdG9yX2NvdW50ICogRkxBU0hfU0VDVE9SX1NJWkU7CisJZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0tFUk5FTF0uc3RhcnRbRklSU1RfU0VDVE9SXSA9IGRldi0+YmFzZTsKKwlzaXplICs9IGZsYXNoX2luZm9bRkxBU0hfQkFOS19LRVJORUxdLnNpemU7CisKKwkvKgorCSAqIFByb3ZpZGUgaW5mbyBmb3IgNTEySyBQTENDIEZMQVNIIFJPTSAoVS1Cb290KQorCSAqLworCWRldiA9IEZMQVNIX0RFVl9CQU5LMF9CT09UOworCWZsYXNoX2luZm9bRkxBU0hfQkFOS19CT09UXS5mbGFzaF9pZCA9CisJCQkoZGV2LT52ZW5kb3JJRCA8PCAxNikgfCBkZXYtPmRldmljZUlEOworCWZsYXNoX2luZm9bRkxBU0hfQkFOS19CT09UXS5zZWN0b3JfY291bnQgPSBkZXYtPnNlY3RvcnM7CisJZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0JPT1RdLnNpemUgPQorCQkJZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0JPT1RdLnNlY3Rvcl9jb3VudCAqIEZMQVNIX1NFQ1RPUl9TSVpFOworCWZsYXNoX2luZm9bRkxBU0hfQkFOS19CT09UXS5zdGFydFtGSVJTVF9TRUNUT1JdID0gZGV2LT5iYXNlOworCXNpemUgKz0gZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0JPT1RdLnNpemU7CiAKIAotICAgIC8qCi0gICAgICogUHJvdmlkZSBpbmZvIGZvciA1MTJLIEZMQVNIMCBzZWdtZW50IChVLUJvb3QpCi0gICAgICovCi0gICAgZGV2ID0gRkxBU0hfREVWX0JBTkswX0hJR0g7Ci0gICAgZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0FVWF0uZmxhc2hfaWQgPQotICAgICAgKGRldi0+dmVuZG9ySUQgPDwgMTYpIHwgZGV2LT5kZXZpY2VJRDsKLSAgICBmbGFzaF9pbmZvW0ZMQVNIX0JBTktfQVVYXS5zZWN0b3JfY291bnQgPSBkZXYtPnNlY3RvcnM7Ci0gICAgZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0FVWF0uc2l6ZSA9Ci0gICAgICBmbGFzaF9pbmZvW0ZMQVNIX0JBTktfQVVYXS5zZWN0b3JfY291bnQgKiBGTEFTSF9TRUNUT1JfU0laRTsKLSAgICBmbGFzaF9pbmZvW0ZMQVNIX0JBTktfQVVYXS5zdGFydFtGSVJTVF9TRUNUT1JdID0gZGV2LT5iYXNlOwotICAgIHNpemUgKz0gZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0FVWF0uc2l6ZTsKKwkvKgorCSAqIFByb3ZpZGUgaW5mbyBmb3IgNTEySyBGTEFTSDAgc2VnbWVudCAoVS1Cb290KQorCSAqLworCWRldiA9IEZMQVNIX0RFVl9CQU5LMF9ISUdIOworCWZsYXNoX2luZm9bRkxBU0hfQkFOS19BVVhdLmZsYXNoX2lkID0KKwkJCShkZXYtPnZlbmRvcklEIDw8IDE2KSB8IGRldi0+ZGV2aWNlSUQ7CisJZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0FVWF0uc2VjdG9yX2NvdW50ID0gZGV2LT5zZWN0b3JzOworCWZsYXNoX2luZm9bRkxBU0hfQkFOS19BVVhdLnNpemUgPQorCQkJZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0FVWF0uc2VjdG9yX2NvdW50ICogRkxBU0hfU0VDVE9SX1NJWkU7CisJZmxhc2hfaW5mb1tGTEFTSF9CQU5LX0FVWF0uc3RhcnRbRklSU1RfU0VDVE9SXSA9IGRldi0+YmFzZTsKKwlzaXplICs9IGZsYXNoX2luZm9bRkxBU0hfQkFOS19BVVhdLnNpemU7CiAKIAotICAgIHJldHVybiAgc2l6ZTsKKwlyZXR1cm4gc2l6ZTsKIH0KIAogLyoKICAqIEdldCBmbGFzaCBkZXZpY2UgZnJvbSBVLUJvb3QgZmxhc2ggaW5mby4KICAqLwotZmxhc2hfZGV2X3QqCi1nZXRGbGFzaERldkZyb21JbmZvKGZsYXNoX2luZm9fdCogaW5mbykKK2ZsYXNoX2Rldl90ICpnZXRGbGFzaERldkZyb21JbmZvIChmbGFzaF9pbmZvX3QgKiBpbmZvKQogewotICBpbnQgaTsKKwlpbnQgaTsKIAotICBpZighaW5mbykKLSAgICByZXR1cm4gTlVMTDsKKwlpZiAoIWluZm8pCisJCXJldHVybiBOVUxMOwogCi0gIGZvciAoaSA9IDA7IGkgPCBmbGFzaERldkNvdW50OyBpKyspIHsKLSAgICBmbGFzaF9kZXZfdAkqZGV2ID0gJmZsYXNoRGV2W2ldOwotICAgIGlmKGRldi0+Zm91bmQgJiYgKGRldi0+YmFzZSA9PSBpbmZvLT5zdGFydFswXSkpCi0gICAgICByZXR1cm4gZGV2OwotICB9Ci0gIHByaW50ZigiRVJST1I6IG5vdGljZSwgbm8gRkxBU0ggbWFwcGVkIGF0IGFkZHJlc3MgMHgleFxuIiwKLQkgKHVuc2lnbmVkIGludClpbmZvLT5zdGFydFswXSk7Ci0gIHJldHVybiBOVUxMOwotfQorCWZvciAoaSA9IDA7IGkgPCBmbGFzaERldkNvdW50OyBpKyspIHsKKwkJZmxhc2hfZGV2X3QgKmRldiA9ICZmbGFzaERldltpXTsKIAotdWxvbmcKLWZsYXNoX2dldF9zaXplICh2dV9sb25nICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pCi17Ci0gICAgaW50IGk7Ci0gICAgZm9yKGkgPSAwOyBpIDwgZmxhc2hEZXZDb3VudDsgaSsrKSB7Ci0gICAgICBmbGFzaF9kZXZfdAkqZGV2ID0gJmZsYXNoRGV2W2ldOwotICAgICAgaWYoZGV2LT5mb3VuZCl7Ci0JaWYoZGV2LT5iYXNlID09ICh1bnNpZ25lZCBpbnQpYWRkcil7Ci0JICBpbmZvLT5mbGFzaF9pZCA9IChkZXYtPnZlbmRvcklEIDw8IDE2KSB8IGRldi0+ZGV2aWNlSUQ7Ci0JICBpbmZvLT5zZWN0b3JfY291bnQgPSBkZXYtPnNlY3RvcnM7Ci0JICBpbmZvLT5zaXplID0gaW5mby0+c2VjdG9yX2NvdW50ICogRkxBU0hfU0VDVE9SX1NJWkU7Ci0JICByZXR1cm4gZGV2LT5zZWN0b3JzICogRkxBU0hfU0VDVE9SX1NJWkU7CisJCWlmIChkZXYtPmZvdW5kICYmIChkZXYtPmJhc2UgPT0gaW5mby0+c3RhcnRbMF0pKQorCQkJcmV0dXJuIGRldjsKIAl9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiAwOworCXByaW50ZiAoIkVSUk9SOiBub3RpY2UsIG5vIEZMQVNIIG1hcHBlZCBhdCBhZGRyZXNzIDB4JXhcbiIsCisJCQkodW5zaWduZWQgaW50KSBpbmZvLT5zdGFydFswXSk7CisJcmV0dXJuIE5VTEw7CiB9CiAKLXZvaWQKLWZsYXNoX3ByaW50X2luZm8gIChmbGFzaF9pbmZvX3QgKmluZm8pCit1bG9uZyBmbGFzaF9nZXRfc2l6ZSAodnVfbG9uZyAqIGFkZHIsIGZsYXNoX2luZm9fdCAqIGluZm8pCiB7Ci0gIGludCBpOwotICB1bnNpZ25lZCBpbnQgY2hpcDsKKwlpbnQgaTsKIAotICAgIGlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0JcHJpbnRmICgibWlzc2luZyBvciB1bmtub3duIEZMQVNIIHR5cGVcbiIpOwotCXJldHVybjsKLSAgICB9CisJZm9yIChpID0gMDsgaSA8IGZsYXNoRGV2Q291bnQ7IGkrKykgeworCQlmbGFzaF9kZXZfdCAqZGV2ID0gJmZsYXNoRGV2W2ldOwogCi0gICAgc3dpdGNoICgoaW5mby0+Zmxhc2hfaWQgPj4gMTYpICYgMHhmZikgewotICAgIGNhc2UgMHgxOgotCXByaW50ZiAoIkFNRCAiKTsKLQlicmVhazsKLSAgICBkZWZhdWx0OgotCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwotCWJyZWFrOwotICAgIH0KLSAgICBjaGlwID0gKHVuc2lnbmVkIGludCkgaW5mby0+Zmxhc2hfaWQgJiAweDAwMDAwMGZmOworCQlpZiAoZGV2LT5mb3VuZCkgeworCQkJaWYgKGRldi0+YmFzZSA9PSAodW5zaWduZWQgaW50KSBhZGRyKSB7CisJCQkJaW5mby0+Zmxhc2hfaWQgPSAoZGV2LT52ZW5kb3JJRCA8PCAxNikgfCBkZXYtPmRldmljZUlEOworCQkJCWluZm8tPnNlY3Rvcl9jb3VudCA9IGRldi0+c2VjdG9yczsKKwkJCQlpbmZvLT5zaXplID0gaW5mby0+c2VjdG9yX2NvdW50ICogRkxBU0hfU0VDVE9SX1NJWkU7CisJCQkJcmV0dXJuIGRldi0+c2VjdG9ycyAqIEZMQVNIX1NFQ1RPUl9TSVpFOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQogCi0gICAgc3dpdGNoIChjaGlwKSB7Cit2b2lkIGZsYXNoX3ByaW50X2luZm8gKGZsYXNoX2luZm9fdCAqIGluZm8pCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGNoaXA7CiAKLSAgICBjYXNlIEFNRF9JRF9GMDQwQjoKLQlwcmludGYgKCJBTTI5RjA0MEIgKDQgTWJpdClcbiIpOwotCWJyZWFrOworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwkJcmV0dXJuOworCX0KIAotICAgIGNhc2UgQU1EX0lEX0xWMTYwQjoKLSAgICBjYXNlIEZMQVNIX0FNMTYwTFY6Ci0gICAgY2FzZSAweDQ5OgotCXByaW50ZiAoIkFNMjlMVjE2MEIgKDE2IE1iaXQgLyAyTSB4IDhiaXQpXG4iKTsKLQlicmVhazsKKwlzd2l0Y2ggKChpbmZvLT5mbGFzaF9pZCA+PiAxNikgJiAweGZmKSB7CisJY2FzZSAweDE6CisJCXByaW50ZiAoIkFNRCAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CisJCWJyZWFrOworCX0KKwljaGlwID0gKHVuc2lnbmVkIGludCkgaW5mby0+Zmxhc2hfaWQgJiAweDAwMDAwMGZmOwogCi0gICAgZGVmYXVsdDoKLSAgICAgIHByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlOjB4JXhcbiIsIGNoaXApOwotCWJyZWFrOwotICAgIH0KKwlzd2l0Y2ggKGNoaXApIHsKIAotICAgIHByaW50ZiAoIiAgU2l6ZTogJWxkIGJ5dGVzIGluICVkIFNlY3RvcnNcbiIsCi0JICAgIGluZm8tPnNpemUsIGluZm8tPnNlY3Rvcl9jb3VudCk7CisJY2FzZSBBTURfSURfRjA0MEI6CisJCXByaW50ZiAoIkFNMjlGMDQwQiAoNCBNYml0KVxuIik7CisJCWJyZWFrOwogCi0gICAgcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwotICAgIGZvciAoaT0wOyBpPGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7Ci0gICAgICBpZiAoKGkgJSA1KSA9PSAwKQotCSAgcHJpbnRmICgiXG4gICAiKTsKLQlwcmludGYgKCIgJTA4bFglcyIsCi0JCWluZm8tPnN0YXJ0W0ZJUlNUX1NFQ1RPUl0gKyBpKkZMQVNIX1NFQ1RPUl9TSVpFLAotCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIKLQkJKTsKLSAgICB9Ci0gICAgcHJpbnRmICgiXG4iKTsKKwljYXNlIEFNRF9JRF9MVjE2MEI6CisJY2FzZSBGTEFTSF9BTTE2MExWOgorCWNhc2UgMHg0OToKKwkJcHJpbnRmICgiQU0yOUxWMTYwQiAoMTYgTWJpdCAvIDJNIHggOGJpdClcbiIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlOjB4JXhcbiIsIGNoaXApOworCQlicmVhazsKKwl9CisKKwlwcmludGYgKCIgIFNpemU6ICVsZCBieXRlcyBpbiAlZCBTZWN0b3JzXG4iLAorCQlpbmZvLT5zaXplLCBpbmZvLT5zZWN0b3JfY291bnQpOworCisJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgeworCQlpZiAoKGkgJSA1KSA9PSAwKQorCQkJcHJpbnRmICgiXG4gICAiKTsKKwkJcHJpbnRmICgiICUwOGxYJXMiLAorCQkJaW5mby0+c3RhcnRbRklSU1RfU0VDVE9SXSArIGkgKiBGTEFTSF9TRUNUT1JfU0laRSwKKwkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7CisJfQorCXByaW50ZiAoIlxuIik7CiB9CiAKIAogLyoKICAqIEVyYXNlIGEgcmFuZ2Ugb2YgZmxhc2ggc2VjdG9ycy4KICAqLwotaW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKmluZm8sIGludCBzX2ZpcnN0LCBpbnQgc19sYXN0KQoraW50IGZsYXNoX2VyYXNlIChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKIHsKLSAgICB2dV9sb25nICphZGRyID0gKHZ1X2xvbmcqKShpbmZvLT5zdGFydFswXSk7Ci0gICAgaW50IHByb3QsIHNlY3QsIGxfc2VjdDsKLSAgICBmbGFzaF9kZXZfdCogZGV2ID0gTlVMTDsKKwl2dV9sb25nICphZGRyID0gKHZ1X2xvbmcgKikgKGluZm8tPnN0YXJ0WzBdKTsKKwlpbnQgcHJvdCwgc2VjdCwgbF9zZWN0OworCWZsYXNoX2Rldl90ICpkZXYgPSBOVUxMOwogCi0gICAgaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7Ci0JaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLQkgICAgcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKKwlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKKwkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKKwkJCXByaW50ZiAoIi0gbWlzc2luZ1xuIik7CisJCX0gZWxzZSB7CisJCQlwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOworCQl9CisJCXJldHVybiAxOworCX0KKworCXByb3QgPSAwOworCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyBzZWN0KyspIHsKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKKwkJCXByb3QrKzsKKwkJfQorCX0KKworCWlmIChwcm90KSB7CisJCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwKKwkJCXByb3QpOwogCX0gZWxzZSB7Ci0JICAgIHByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJCXByaW50ZiAoIlxuIik7CiAJfQotCXJldHVybiAxOwotICAgIH0KIAotICAgIHByb3QgPSAwOwotICAgIGZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyBzZWN0KyspIHsKLQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewotCSAgICBwcm90Kys7CisJbF9zZWN0ID0gLTE7CisKKwkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCisJZGV2ID0gZ2V0Rmxhc2hEZXZGcm9tSW5mbyAoaW5mbyk7CisJaWYgKGRldikgeworCQlwcmludGYgKCJFcmFzZSBGTEFTSFslc10gLSVkIHNlY3RvcnM6IiwgZGV2LT5uYW1lLCBkZXYtPnNlY3RvcnMpOworCQlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7CisJCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KKwkJCQlhZGRyID0gKHZ1X2xvbmcgKikgKGRldi0+YmFzZSk7CisJCQkJLyogICBwcmludGYoImVyYXNlX3NlY3Rvcjogc2VjdG9yPSVkLCBhZGRyPTB4JXhcbiIsCisJCQkJICAgc2VjdCwgYWRkcik7ICovCisJCQkJcHJpbnRmICgiLiIpOworCQkJCWlmIChFUlJPUiA9PSBmbGFzaEVyYXNlU2VjdG9yIChkZXYsIHNlY3QpKSB7CisJCQkJCXByaW50ZiAoIkVSUk9SOiBjb3VsZCBub3QgZXJhc2Ugc2VjdG9yICVkIG9uIEZMQVNIWyVzXVxuIiwgc2VjdCwgZGV2LT5uYW1lKTsKKwkJCQkJcmV0dXJuIDE7CisJCQkJfQorCQkJfQorCQl9CiAJfQotICAgIH0KLQotICAgIGlmIChwcm90KSB7Ci0JcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAotCQlwcm90KTsKLSAgICB9IGVsc2UgewotCXByaW50ZiAoIlxuIik7Ci0gICAgfQotCi0gICAgbF9zZWN0ID0gLTE7Ci0KLSAgICAvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCi0gICAgZGV2ID0gZ2V0Rmxhc2hEZXZGcm9tSW5mbyhpbmZvKTsKLSAgICBpZihkZXYpewotICAgICAgcHJpbnRmKCJFcmFzZSBGTEFTSFslc10gLSVkIHNlY3RvcnM6IiwgZGV2LT5uYW1lLCBkZXYtPnNlY3RvcnMpOwotICAgICAgZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdDw9c19sYXN0OyBzZWN0KyspIHsKLQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7CS8qIG5vdCBwcm90ZWN0ZWQgKi8KLQkgIGFkZHIgPSAodnVfbG9uZyopKGRldi0+YmFzZSk7Ci0JICAvKiAgIHByaW50ZigiZXJhc2Vfc2VjdG9yOiBzZWN0b3I9JWQsIGFkZHI9MHgleFxuIiwKLQkgICAgICAgc2VjdCwgYWRkcik7ICovCi0JICBwcmludGYoIi4iKTsKLQkgIGlmKEVSUk9SID09IGZsYXNoRXJhc2VTZWN0b3IoZGV2LCBzZWN0KSl7Ci0JICAgIHByaW50ZigiRVJST1I6IGNvdWxkIG5vdCBlcmFzZSBzZWN0b3IgJWQgb24gRkxBU0hbJXNdXG4iLAotCQkgICBzZWN0LCBkZXYtPm5hbWUpOwotCSAgICByZXR1cm4gMTsKLQkgIH0KLQl9Ci0gICAgICB9Ci0gICAgfQotICAgIHByaW50ZiAoIiBkb25lXG4iKTsKLSAgICByZXR1cm4gMDsKKwlwcmludGYgKCIgZG9uZVxuIik7CisJcmV0dXJuIDA7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgzMywzNSArODMyLDMxIEBACiAgKiAxIC0gd3JpdGUgdGltZW91dAogICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKICAqLwotc3RhdGljIGludAotd3JpdGVfd29yZCAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKQorc3RhdGljIGludCB3cml0ZV93b3JkIChmbGFzaF9pbmZvX3QgKiBpbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKQogewogCi0gIGZsYXNoX2Rldl90KiBkZXYgPSBnZXRGbGFzaERldkZyb21JbmZvKGluZm8pOwotICBpbnQgYWRkciA9IGRlc3QgLSBpbmZvLT5zdGFydFswXTsKKwlmbGFzaF9kZXZfdCAqZGV2ID0gZ2V0Rmxhc2hEZXZGcm9tSW5mbyAoaW5mbyk7CisJaW50IGFkZHIgPSBkZXN0IC0gaW5mby0+c3RhcnRbMF07CiAKLSAgaWYgKCEgZGV2KQotICAgIHJldHVybiAxOworCWlmICghZGV2KQorCQlyZXR1cm4gMTsKIAotICBpZihPSyAhPSBmbGFzaFdyaXRlKGRldiwgYWRkciwgKGNoYXIqKSZkYXRhLCBzaXplb2YodWxvbmcpKSl7Ci0gICAgcHJpbnRmKCJFUlJPUjogY291bGQgbm90IHdyaXRlIHRvIGFkZHI9MHgleCwgZGF0YT0weCV4XG4iLAotCSAgICh1bnNpZ25lZCBpbnQpYWRkciwgKHVuc2lnbmVkKWRhdGEpOwotICAgIHJldHVybiAxOwotICB9CisJaWYgKE9LICE9IGZsYXNoV3JpdGUgKGRldiwgYWRkciwgKGNoYXIgKikgJmRhdGEsIHNpemVvZiAodWxvbmcpKSkgeworCQlwcmludGYgKCJFUlJPUjogY291bGQgbm90IHdyaXRlIHRvIGFkZHI9MHgleCwgZGF0YT0weCV4XG4iLAorCQkJKHVuc2lnbmVkIGludCkgYWRkciwgKHVuc2lnbmVkKSBkYXRhKTsKKwkJcmV0dXJuIDE7CisJfQogCi0gIGlmKChhZGRyICUgRkxBU0hfU0VDVE9SX1NJWkUpID09IDApCi0gICAgcHJpbnRmKCIuIik7CisJaWYgKChhZGRyICUgRkxBU0hfU0VDVE9SX1NJWkUpID09IDApCisJCXByaW50ZiAoIi4iKTsKIAogCi0gIFBSSU5URigid3JpdGVfd29yZDoweCV4LCBiYXNlPTB4JXgsIGFkZHI9MHgleCwgZGF0YT0weCV4XG4iLAotCSAodW5zaWduZWQpaW5mby0+c3RhcnRbMF0sCi0JICh1bnNpZ25lZClkZXN0LAotCSAodW5zaWduZWQpKGRlc3QgLSBpbmZvLT5zdGFydFswXSksCi0JICh1bnNpZ25lZClkYXRhKTsKKwlQUklOVEYgKCJ3cml0ZV93b3JkOjB4JXgsIGJhc2U9MHgleCwgYWRkcj0weCV4LCBkYXRhPTB4JXhcbiIsCisJCSh1bnNpZ25lZCkgaW5mby0+c3RhcnRbMF0sCisJCSh1bnNpZ25lZCkgZGVzdCwKKwkJKHVuc2lnbmVkKSAoZGVzdCAtIGluZm8tPnN0YXJ0WzBdKSwgKHVuc2lnbmVkKSBkYXRhKTsKIAotCi0KLSAgICByZXR1cm4gKDApOworCXJldHVybiAoMCk7CiB9CiAKIApAQCAtODcyLDcyICs4NjcsNzIgQEAKICAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCiAgKi8KIAotaW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqaW5mbywgdWNoYXIgKnNyYywgdWxvbmcgYWRkciwgdWxvbmcgY250KQoraW50IHdyaXRlX2J1ZmYgKGZsYXNoX2luZm9fdCAqIGluZm8sIHVjaGFyICogc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCiB7Ci0gICAgdWxvbmcgY3AsIHdwLCBkYXRhOwotICAgIGludCBpLCBsLCByYzsKLSAgICBmbGFzaF9kZXZfdCogZGV2ID0gZ2V0Rmxhc2hEZXZGcm9tSW5mbyhpbmZvKTsKKwl1bG9uZyBjcCwgd3AsIGRhdGE7CisJaW50IGksIGwsIHJjOworCWZsYXNoX2Rldl90ICpkZXYgPSBnZXRGbGFzaERldkZyb21JbmZvIChpbmZvKTsKIAotICAgIGlmKCBkZXYgKSB7Ci0gICAgICBwcmludGYoIkZMQVNIWyVzXToiLCBkZXYtPm5hbWUpOwotICAgICAgd3AgPSAoYWRkciAmIH4zKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCisJaWYgKGRldikgeworCQlwcmludGYgKCJGTEFTSFslc106IiwgZGV2LT5uYW1lKTsKKwkJd3AgPSAoYWRkciAmIH4zKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCiAKLSAgICAgIC8qCi0gICAgICAgKiBoYW5kbGUgdW5hbGlnbmVkIHN0YXJ0IGJ5dGVzCi0gICAgICAgKi8KLSAgICAgIGlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgewotCWRhdGEgPSAwOwotCWZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApIHsKLQkgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotCX0KLQlmb3IgKDsgaTw0ICYmIGNudD4wOyArK2kpIHsKLQkgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQkgIC0tY250OwotCSAgKytjcDsKLQl9Ci0JZm9yICg7IGNudD09MCAmJiBpPDQ7ICsraSwgKytjcCkgewotCSAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7Ci0JfQotCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCSAgcmV0dXJuIChyYyk7Ci0JfQotCXdwICs9IDQ7Ci0gICAgICB9CisJCS8qCisJCSAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKKwkJICovCisJCWlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgeworCQkJZGF0YSA9IDA7CisJCQlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgbDsgKytpLCArK2NwKSB7CisJCQkJZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKikgY3ApOworCQkJfQorCQkJZm9yICg7IGkgPCA0ICYmIGNudCA+IDA7ICsraSkgeworCQkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJCQktLWNudDsKKwkJCQkrK2NwOworCQkJfQorCQkJZm9yICg7IGNudCA9PSAwICYmIGkgPCA0OyArK2ksICsrY3ApIHsKKwkJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7CisJCQl9CisJCQlpZiAoKHJjID0gd3JpdGVfd29yZCAoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJCQkJcmV0dXJuIChyYyk7CisJCQl9CisJCQl3cCArPSA0OworCQl9CiAKLSAgICAgIC8qCi0gICAgICAgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKLSAgICAgICAqLwotICAgICAgd2hpbGUgKGNudCA+PSA0KSB7Ci0JZGF0YSA9IDA7Ci0JZm9yIChpPTA7IGk8NDsgKytpKSB7Ci0JICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCS8qCisJCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAorCQkgKi8KKwkJd2hpbGUgKGNudCA+PSA0KSB7CisJCQlkYXRhID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJCQl9CisJCQlpZiAoKHJjID0gd3JpdGVfd29yZCAoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJCQkJcmV0dXJuIChyYyk7CisJCQl9CisJCQl3cCArPSA0OworCQkJY250IC09IDQ7CisJCX0KKworCQlpZiAoY250ID09IDApIHsKKwkJCXJldHVybiAoMCk7CisJCX0KKworCQkvKgorCQkgKiBoYW5kbGUgdW5hbGlnbmVkIHRhaWwgYnl0ZXMKKwkJICovCisJCWRhdGEgPSAwOworCQlmb3IgKGkgPSAwLCBjcCA9IHdwOyBpIDwgNCAmJiBjbnQgPiAwOyArK2ksICsrY3ApIHsKKwkJCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkJCS0tY250OworCQl9CisJCWZvciAoOyBpIDwgNDsgKytpLCArK2NwKSB7CisJCQlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKSBjcCk7CisJCX0KKworCQlyZXR1cm4gKHdyaXRlX3dvcmQgKGluZm8sIHdwLCBkYXRhKSk7CiAJfQotCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCSAgcmV0dXJuIChyYyk7Ci0JfQotCXdwICArPSA0OwotCWNudCAtPSA0OwotICAgICAgfQotCi0gICAgICBpZiAoY250ID09IDApIHsKLQlyZXR1cm4gKDApOwotICAgICAgfQotCi0gICAgICAvKgotICAgICAgICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCi0gICAgICAgKi8KLSAgICAgIGRhdGEgPSAwOwotICAgICAgZm9yIChpPTAsIGNwPXdwOyBpPDQgJiYgY250PjA7ICsraSwgKytjcCkgewotCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKLQktLWNudDsKLSAgICAgIH0KLSAgICAgIGZvciAoOyBpPDQ7ICsraSwgKytjcCkgewotCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotICAgICAgfQotCi0gICAgICByZXR1cm4gKHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDE7CisJcmV0dXJuIDE7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2JvYXJkL21vdXNzZS9tNDh0NTl5LmMgYi9ib2FyZC9tb3Vzc2UvbTQ4dDU5eS5jCmluZGV4IDcyMDVhOTYuLjM3YTYyNDQgMTAwNjQ0Ci0tLSBhL2JvYXJkL21vdXNzZS9tNDh0NTl5LmMKKysrIGIvYm9hcmQvbW91c3NlL200OHQ1OXkuYwpAQCAtMzIwLDQgKzMyMCwzIEBACiB7CiAgIG00OF90b2RfaW5pdCgpOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9tb3Vzc2UvdS1ib290LmxkcyBiL2JvYXJkL21vdXNzZS91LWJvb3QubGRzCmluZGV4IDhlY2E0MTQuLjgyZWY1ZmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL21vdXNzZS91LWJvb3QubGRzCisrKyBiL2JvYXJkL21vdXNzZS91LWJvb3QubGRzCkBAIC05OCw2ICs5OCwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTIxLDQgKzEyNiwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL21vdXNzZS91LWJvb3QubGRzLnJhbSBiL2JvYXJkL21vdXNzZS91LWJvb3QubGRzLnJhbQppbmRleCA5MTY2YzljLi5lYjQ3YWU2IDEwMDY0NAotLS0gYS9ib2FyZC9tb3Vzc2UvdS1ib290Lmxkcy5yYW0KKysrIGIvYm9hcmQvbW91c3NlL3UtYm9vdC5sZHMucmFtCkBAIC04NSw2ICs4NSwxMSBAQAogICAgICooLmZpeHVwKQogICB9ID4gcmFtCiAgICovCisKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKICAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9ID4gcmFtCiAgICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtOTgsNCArMTAzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbW91c3NlL3UtYm9vdC5sZHMucm9tIGIvYm9hcmQvbW91c3NlL3UtYm9vdC5sZHMucm9tCmluZGV4IGEyMDU5ZGIuLjliNDY1NTQgMTAwNjQ0Ci0tLSBhL2JvYXJkL21vdXNzZS91LWJvb3QubGRzLnJvbQorKysgYi9ib2FyZC9tb3Vzc2UvdS1ib290Lmxkcy5yb20KQEAgLTEwMiw2ICsxMDIsMTAgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjUsNCArMTI5LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODI2MGFkcy9NYWtlZmlsZSBiL2JvYXJkL21wYzgyNjBhZHMvTWFrZWZpbGUKaW5kZXggOTI4MGJmNy4uY2M1MTlkMSAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODI2MGFkcy9NYWtlZmlsZQorKysgYi9ib2FyZC9tcGM4MjYwYWRzL01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAorCiAjCiAjIChDKSBDb3B5cmlnaHQgMjAwMQogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgpAQCAtMjgsNyArMjksNyBAQAogT0JKUwk6PSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBjODI2MGFkcy9tcGM4MjYwYWRzLmMgYi9ib2FyZC9tcGM4MjYwYWRzL21wYzgyNjBhZHMuYwppbmRleCAwYWE3NTUwLi42ZDE3NjRhIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4MjYwYWRzL21wYzgyNjBhZHMuYworKysgYi9ib2FyZC9tcGM4MjYwYWRzL21wYzgyNjBhZHMuYwpAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgLyogUG9ydCBBIGNvbmZpZ3VyYXRpb24gKi8KICAgICB7CS8qCSAgICAgIGNvbmYgcHBhciBwc29yIHBkaXIgcG9kciBwZGF0ICovCi0gICAgICAgIC8qIFBBMzEgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMSBUeEVOQiAqLworCS8qIFBBMzEgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMSBUeEVOQiAqLwogCS8qIFBBMzAgKi8geyAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBUeENsYXYgICAqLwogCS8qIFBBMjkgKi8geyAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMSBUeFNPQyAgKi8KIAkvKiBQQTI4ICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgUnhFTkIgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgyNjBhZHMvdS1ib290LmxkcyBiL2JvYXJkL21wYzgyNjBhZHMvdS1ib290LmxkcwppbmRleCA1ZDc4ZDRhLi42MWZiMTVjNiAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODI2MGFkcy91LWJvb3QubGRzCisrKyBiL2JvYXJkL21wYzgyNjBhZHMvdS1ib290LmxkcwpAQCAtOTMsNiArOTMsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTExNSw0ICsxMjAsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4MjY2YWRzL01ha2VmaWxlIGIvYm9hcmQvbXBjODI2NmFkcy9NYWtlZmlsZQppbmRleCA5MjgwYmY3Li5jZDBmNDBiIDEwMDY0NAotLS0gYS9ib2FyZC9tcGM4MjY2YWRzL01ha2VmaWxlCisrKyBiL2JvYXJkL21wYzgyNjZhZHMvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJOj0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL21wYzgyNjZhZHMvbXBjODI2NmFkcy5jIGIvYm9hcmQvbXBjODI2NmFkcy9tcGM4MjY2YWRzLmMKaW5kZXggYzZjOGQ3Ni4uZDk3YjVjMSAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODI2NmFkcy9tcGM4MjY2YWRzLmMKKysrIGIvYm9hcmQvbXBjODI2NmFkcy9tcGM4MjY2YWRzLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAogICAgIC8qIFBvcnQgQSBjb25maWd1cmF0aW9uICovCiAgICAgewkvKgkgICAgICBjb25mIHBwYXIgcHNvciBwZGlyIHBvZHIgcGRhdCAqLwotICAgICAgICAvKiBQQTMxICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgVHhFTkIgKi8KKwkvKiBQQTMxICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgVHhFTkIgKi8KIAkvKiBQQTMwICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgVHhDbGF2ICAgKi8KIAkvKiBQQTI5ICovIHsgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgVHhTT0MgICovCiAJLyogUEEyOCAqLyB7ICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MxIFJ4RU5CICovCkBAIC0yNDEsNyArMjQxLDcgQEAKIAogICAgIC8qIG1hc2sgYWxsIFBDSSBpbnRlcnJ1cHRzICovCiAgICAgcGNpX2ljLT5wY2lfaW50X21hc2sgfD0gMHhmZmYwMDAwMDsKLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0yOTEsNyArMjkxLDcgQEAKICAgICBpMmNfcmVhZChTRFJBTV9TUERfQUREUiwgMCwgMSwgJmRhdGEsIDEpOwogICAgIHNwZF9zaXplID0gZGF0YTsKICAgICBja3N1bSAgICA9IGRhdGE7Ci0gICAgZm9yKGogPSAxOyBqIDwgNjQ7IGorKykgCisgICAgZm9yKGogPSAxOyBqIDwgNjQ7IGorKykKIAl7CS8qIHJlYWQgb25seSB0aGUgY2hlY2tzdW1tZWQgYnl0ZXMgKi8KIAkvKiBub3RlOiB0aGUgSTJDIGFkZHJlc3MgYXV0b2luY3JlbWVudHMgd2hlbiBhbGVuID09IDAgKi8KIAkJaTJjX3JlYWQoU0RSQU1fU1BEX0FERFIsIDAsIDAsICZkYXRhLCAxKTsKQEAgLTMwMSwxNCArMzAxLDE0IEBACiAJCWVsc2UgaWYoaiA9PSAgNykgZGF0YV93aWR0aCB8PSBkYXRhIDw8IDg7CiAJCWVsc2UgaWYoaiA9PSAgMykgcm93cyAgICAgICAgPSBkYXRhICYgMHgwRjsKIAkJZWxzZSBpZihqID09ICA0KSBjb2xzICAgICAgICA9IGRhdGEgJiAweDBGOwotCQllbHNlIGlmKGogPT0gMTIpIAorCQllbHNlIGlmKGogPT0gMTIpCiAJCXsKIAkJCS8qCiAJCQkJICogUmVmcmVzaCByYXRlOiB0aGlzIGFzc3VtZXMgdGhlIHByZXNjYWxlciBpcyBzZXQgdG8KLQkJCSAqIGFwcHJveGltYXRlbHkgMC4zOXVTZWMgcGVyIHRpY2sgYW5kIHRoZSB0YXJnZXQgcmVmcmVzaCBwZXJpb2QgCisJCQkgKiBhcHByb3hpbWF0ZWx5IDAuMzl1U2VjIHBlciB0aWNrIGFuZCB0aGUgdGFyZ2V0IHJlZnJlc2ggcGVyaW9kCiAJCQkgKiBpcyBhYm91dCA4NSUgb2YgbWF4aW11bS4KIAkJCSAqLwotCQkJc3dpdGNoKGRhdGEgJiAweDdGKSAKKwkJCXN3aXRjaChkYXRhICYgMHg3RikKIAkJCXsKIAkJCQkJZGVmYXVsdDoKIAkJCQkJY2FzZSAwOiAgcHNydCA9IDB4MjE7IC8qICAxNS42MjV1UyAqLyAgYnJlYWs7CkBAIC0zMjAsNyArMzIwLDcgQEAKIAkJCX0KIAkJfQogCQllbHNlIGlmKGogPT0gMTcpIGJhbmtzICAgICAgID0gZGF0YTsKLQkJZWxzZSBpZihqID09IDE4KSAKKwkJZWxzZSBpZihqID09IDE4KQogCQl7CiAJCQljYXNsYXRlbmN5ID0gMzsgLyogZGVmYXVsdCBDTCAqLwogIwkJICAgIGlmKFBFU1NJTUlTVElDX1NEUkFNKQpAQCAtMzMyLDE1ICszMzIsMTUgQEAKIAkJCQllbHNlIGlmKChkYXRhICYgMHgwMikgIT0gMCkgY2FzbGF0ZW5jeSA9IDI7CiAJCQkJZWxzZSBpZigoZGF0YSAmIDB4MDQpICE9IDApIGNhc2xhdGVuY3kgPSAzOwogIwkJCWVuZGlmCi0JCQllbHNlIAorCQkJZWxzZQogCQkJewogCQkJcHJpbnRmICgiV0FSTklORzogVW5rbm93biBDQVMgbGF0ZW5jeSAweCUwMlgsIHVzaW5nIDNcbiIsCiAJCQkJCWRhdGEpOwogCQkJfQogCQl9Ci0JCWVsc2UgaWYoaiA9PSA2MykgCisJCWVsc2UgaWYoaiA9PSA2MykKIAkJewotCQkJaWYoZGF0YSAhPSBja3N1bSkgCisJCQlpZihkYXRhICE9IGNrc3VtKQogCQkJewogCQkJCXByaW50ZiAoIldBUk5JTkc6IENvbmZpZ3VyYXRpb24gZGF0YSBjaGVja3N1bSBmYWlsdXJlOiIKIAkJCQkJIiBpcyAweCUwMngsIGNhbGN1bGF0ZWQgMHglMDJ4XG4iLApAQCAtMzgxLDE3ICszODEsMTcgQEAKICAgICBzZHJhbV9zaXplID0gMSA8PCAocm93cyArIGNvbHMgKyBiYW5rcyArIHdpZHRoKTsKICAgICAvKiBoYWNrIGZvciBoaWdoIGRlbnNpdHkgbWVtb3J5ICg1MTJNQiBwZXIgQ1MpICovCiAgICAgLyogISEhISEgV2lsbCBPTkxZIHdvcmsgd2l0aCBQYWdlIEJhc2VkIEludGVybGVhdmUgISEhISEKLSAgICAgICAgICAgICAoIFBTRE1SW1BCSV0gPSAxICkgCisJICAgICAoIFBTRE1SW1BCSV0gPSAxICkKICAgICAqLwotICAgIC8qIG1hbW9yeSBhY3R1YWxseSBoYXMgMTEgY29sdW1uIGFkZHJlc3NlcywgYnV0IHRoZSBtZW1vcnkgY29udHJvbGxlciAKLSAgICAgICBkb2Vzbid0IHJlYWxseSBjYXJlLiAKLSAgICAgICB0aGUgY2FsY3VsYXRpb25zIHRoYXQgZm9sbG93IHdpbGwgaG93ZXZlciBtb3ZlIHRoZSByb3dzIHNvIHRoYXQgCi0gICAgICAgdGhleSBhcmUgbXV4ZWQgb25lIGJpdCBvZmYgaWYgeW91IHVzZSAxMSBiaXQgY29sdW1ucy4gCisgICAgLyogbWFtb3J5IGFjdHVhbGx5IGhhcyAxMSBjb2x1bW4gYWRkcmVzc2VzLCBidXQgdGhlIG1lbW9yeSBjb250cm9sbGVyCisgICAgICAgZG9lc24ndCByZWFsbHkgY2FyZS4KKyAgICAgICB0aGUgY2FsY3VsYXRpb25zIHRoYXQgZm9sbG93IHdpbGwgaG93ZXZlciBtb3ZlIHRoZSByb3dzIHNvIHRoYXQKKyAgICAgICB0aGV5IGFyZSBtdXhlZCBvbmUgYml0IG9mZiBpZiB5b3UgdXNlIDExIGJpdCBjb2x1bW5zLgogICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byB0ZWxsIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGUgY29ycmVjdCBzaXplIG9mIHRoZSBtZW1vcnkKICAgICAgICBidXQgY2hhbmdlIHRoZSBudW1iZXIgb2YgY29sdW1ucyB0byAxMCBhZnRlcndhcmRzLgogICAgICAgIFRoZSAxMXRoIGNvbHVtbiBhZGRyZSB3aWxsIHN0aWxsIGJlIG11Y3hlZCBjb3JyZWN0bHkgb250byB0aGUgYnVzLgogCi0gICAgICAgQWxzbyBiZSBhd2FyZSB0aGF0IHRoZSBNUEM4MjY2QURTIGJvYXJkIFJldiBCIGhhcyBub3QgY29ubmVjdGVkIAorICAgICAgIEFsc28gYmUgYXdhcmUgdGhhdCB0aGUgTVBDODI2NkFEUyBib2FyZCBSZXYgQiBoYXMgbm90IGNvbm5lY3RlZAogICAgICAgIFJvdyBhZGRyZXMgMTMgdG8gYW55dGhpbmcuCiAKICAgICAgICBUaGUgZml4IGlzIHRvIGNvbm5lY3QgQUREMTYgKGZyb20gVTM3LTQ3KSB0byBTQUREUjEyIChVMjgtMTI2KQpAQCAtNDM5LDcgKzQzOSw3IEBACiAJICAgICBQU0RNUl9BQ1RUT1JXXzhXICAgICAgICB8XAogCSAgICAgUFNETVJfV1JDXzRDICAgICAgICAgICAgfFwKIAkgICAgIFBTRE1SX0VBTVVYICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgUFNETVJfQlVGQ01EKSAgICAgICAgICAgfFwKKwkgICAgIFBTRE1SX0JVRkNNRCkgICAgICAgICAgIHxcCiAJICAgICBjYXNsYXRlbmN5ICAgICAgICAgICAgICB8XAogCSAgICAgKChjYXNsYXRlbmN5IC0gMSkgPDwgNikgfAkvKiBMRE9UT1BSRSBpcyBDTCAtIDEgKi8gXAogCSAgICAgKHNkYW0gPDwgMjQpICAgICAgICAgICAgfFwKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCSAgICAgUFNETVJfQUNUVE9SV18yVyAgICAgICAgfAkvKiAxIGZvciA3RSBwYXJ0cyAoZmFzdCBQQy0xMzMpICovIFwKIAkgICAgIFBTRE1SX1dSQ18xQyAgICAgICAgICAgIHwJLyogMSBjbG9jayArIDduU2VjICovCiAJICAgICBFQU1VWCAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgIEJVRkNNRCkgICAgICAgICAgICAgICAgIHxcCisJICAgICBCVUZDTUQpICAgICAgICAgICAgICAgICB8XAogCSAgICAgY2FzbGF0ZW5jeSAgICAgICAgICAgICAgfFwKIAkgICAgICgoY2FzbGF0ZW5jeSAtIDEpIDw8IDYpIHwJLyogTERPVE9QUkUgaXMgQ0wgLSAxICovIFwKIAkgICAgIChzZGFtIDw8IDI0KSAgICAgICAgICAgIHxcCkBAIC01MTQsNyArNTE0LDcgQEAKIAogICAgIG1lbWN0bC0+bWVtY19icjIgPSBDRkdfQlIyX1BSRUxJTTsKICAgICBtZW1jdGwtPm1lbWNfb3IyID0gb3I7Ci0gICAgCisKICAgICBtZW1jdGwtPm1lbWNfcHNkbXIgPSBwc2RtciB8IFBTRE1SX09QX1BSRUE7CiAgICAgKnJhbWFkZHIgPSBjOwogCkBAIC01MzIsOSArNTMyLDkgQEAKICAgICAgKiBEbyBpdCBhIHNlY29uZCB0aW1lIGZvciB0aGUgc2Vjb25kIHNldCBvZiBjaGlwcyBpZiB0aGUgRElNTSBoYXMKICAgICAgKiB0d28gY2hpcCBzZWxlY3RzIChkb3VibGUgc2lkZWQpLgogICAgICAqLwotICAgIGlmKGNoaXBzZWxlY3RzID4gMSkgCisgICAgaWYoY2hpcHNlbGVjdHMgPiAxKQogCXsKLSAgICAgICAgcmFtYWRkciArPSBzZHJhbV9zaXplOworCXJhbWFkZHIgKz0gc2RyYW1fc2l6ZTsKIAogCQltZW1jdGwtPm1lbWNfYnIzID0gQ0ZHX0JSM19QUkVMSU0gKyBzZHJhbV9zaXplOwogCQltZW1jdGwtPm1lbWNfb3IzID0gb3I7CmRpZmYgLS1naXQgYS9ib2FyZC9tcGM4MjY2YWRzL3UtYm9vdC5sZHMgYi9ib2FyZC9tcGM4MjY2YWRzL3UtYm9vdC5sZHMKaW5kZXggNWQ3OGQ0YS4uZDBiMWUwNCAxMDA2NDQKLS0tIGEvYm9hcmQvbXBjODI2NmFkcy91LWJvb3QubGRzCisrKyBiL2JvYXJkL21wYzgyNjZhZHMvdS1ib290LmxkcwpAQCAtOTMsNiArOTMsMTAgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMTUsNCArMTE5LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL2NvbW1vbi9jb21tb25fdXRpbC5jIGIvYm9hcmQvbXBsL2NvbW1vbi9jb21tb25fdXRpbC5jCmluZGV4IDUwMzY1NGUuLmUyNjcyZjcgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuYworKysgYi9ib2FyZC9tcGwvY29tbW9uL2NvbW1vbl91dGlsLmMKQEAgLTU2LDcgKzU2LDYgQEAKIHN0YXRpYyBpbWFnZV9oZWFkZXJfdCBoZWFkZXI7CiAKIAotCiBpbnQgbXBsX3ByZyh1bnNpZ25lZCBsb25nIHNyYyx1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKQEAgLTM0OCw3ICszNDcsNiBAQAogfQogCiAKLQogZXh0ZXJuIGRldmljZV90ICpzdGRpb19kZXZpY2VzW107CiBleHRlcm4gY2hhciAqc3RkaW9fbmFtZXNbXTsKIApAQCAtNDU0LDEwICs0NTIsMTAgQEAKIAl1bnNpZ25lZCBsb25nIHBiY3I7CiAJaW50IHJlcyA9IDA7CiAJcGJjciA9IG1mZGNyIChzdHJhcCk7Ci0JaWYgKChwYmNyICYgUFNSX1JPTV9XSURUSF9NQVNLKSA9PSAwKSAKKwlpZiAoKHBiY3IgJiBQU1JfUk9NX1dJRFRIX01BU0spID09IDApCiAJCS8qIGJvb3QgdmlhIE1QUyBvciBNUFMgbWFwcGluZyAqLwogCQlyZXMgPSBCT09UX01QUzsKLQlpZihwYmNyICYgUFNSX1JPTV9MT0MpIAorCWlmKHBiY3IgJiBQU1JfUk9NX0xPQykKIAkJLyogYm9vdCB2aWEgUENJLi4gKi8KIAkJcmVzIHw9IEJPT1RfUENJOwogCSByZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL2NvbW1vbi9jb21tb25fdXRpbC5oIGIvYm9hcmQvbXBsL2NvbW1vbi9jb21tb25fdXRpbC5oCmluZGV4IGNhZjdmOWIuLmJjYzc5MjIgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuaAorKysgYi9ib2FyZC9tcGwvY29tbW9uL2NvbW1vbl91dGlsLmgKQEAgLTQ2LDQgKzQ2LDMgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX0NPTU1PTl9VVElMX0hfICovCi0KZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9jb21tb24vZmxhc2guYyBiL2JvYXJkL21wbC9jb21tb24vZmxhc2guYwppbmRleCA1NjMwMzliLi4yOGY2ZjBhIDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvY29tbW9uL2ZsYXNoLmMKKysrIGIvYm9hcmQvbXBsL2NvbW1vbi9mbGFzaC5jCkBAIC0yNTEsNyArMjUxLDcgQEAKIAkvKglwcmludGYoIkRldmljZSB2YWx1ZSAleFxuIix2YWx1ZSk7ICovCiAJc3dpdGNoICh2YWx1ZSkgewogCWNhc2UgKEZMQVNIX1dPUkRfU0laRSlBTURfSURfRjA0MEI6Ci0JICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsKKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU0wNDA7CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDg7CiAJCWluZm8tPnNpemUgPSAweDAwODAwMDA7IC8qID0+IDUxMiBrbyAqLwogCQlicmVhazsKQEAgLTQ5NCw3ICs0OTQsNyBAQAogCQkJCXdhaXRfZm9yX0RRNyhpbmZvLCBzZWN0KTsKIAkJCX0KIAkJCWVsc2UgewotCQkgIAkJaWYoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9JTlRFTCl7CisJCQkJaWYoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9JTlRFTCl7CiAJCQkJCWFkZHIyWzBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNjAwMDYwOyAgLyogdW5sb2NrIHNlY3RvciAqLwogCQkJCQlhZGRyMlswXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMEQwMDBEMDsgIC8qIHNlY3RvciBlcmFzZSAqLwogCQkJCQlpbnRlbF93YWl0X2Zvcl9EUTcoaW5mbywgc2VjdCk7CkBAIC02NTksNyArNjU5LDcgQEAKIHsKIAl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFswXSk7CiAJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpkZXN0MiA9IChGTEFTSF9XT1JEX1NJWkUgKilkZXN0OwotIAl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmRhdGEyID0gKEZMQVNIX1dPUkRfU0laRSAqKSZkYXRhOworCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqZGF0YTIgPSAoRkxBU0hfV09SRF9TSVpFICopJmRhdGE7CiAJdWxvbmcgc3RhcnQ7CiAJaW50IGZsYWc7CiAJaW50IGk7CkBAIC03MDgsNyArNzA4LDcgQEAKIAkJCXdoaWxlICgoZGVzdDJbaV0gJiAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApICE9CiAJCQkJKGRhdGEyW2ldICYgKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSkgewogCQkJCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKLSAgICAgICAgCQkJCXJldHVybiAoMSk7CisJCQkJCXJldHVybiAoMSk7CiAJCQkJfQogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvY29tbW9uL2lzYS5jIGIvYm9hcmQvbXBsL2NvbW1vbi9pc2EuYwppbmRleCA0MDczMWZjLi4xNzg4ZDUxIDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvY29tbW9uL2lzYS5jCisrKyBiL2JvYXJkL21wbC9jb21tb24vaXNhLmMKQEAgLTUwLDcgKzUwLDYgQEAKICNlbmRpZgogCiAKLQogLyogZmRjIChsb2dpY2FsIGRldmljZSAwKSAqLwogY29uc3QgU0lPX0xPR0RFVl9UQUJMRSBzaW9fZmRjW10gPSB7CiAJezB4NjAsIDN9LAkJCS8qIHNldCBJTyB0byBGRFBvcnQgKDNGMCkgKi8KQEAgLTE4Niw3ICsxODUsNiBAQAogfQogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSVJRIENvbnRyb2xsZXIKICAqIHdlIHVzZSB0aGUgVmVjdG9yIG1vZGUKQEAgLTM5NiwxMiArMzk0LDEyIEBACiAJCS8qIHdlIHNob3VsZCBoYW5kbGUgY2FzY2FkZWQgaW50ZXJydXB0cyBoZXJlIGFsc28gKi8KIAkJLyogcHJpbnRmKCJJU0EgSXJxICVkXG4iLGlycSk7ICovCiAJCWlzYV9pcnFzW2lycV0uY291bnQrKzsKLSAgCWlmIChpc2FfaXJxc1tpcnFdLmhhbmRsZXIgIT0gTlVMTCkKLSAgCQkoKmlzYV9pcnFzW2lycV0uaGFuZGxlcikoaXNhX2lycXNbaXJxXS5hcmcpOyAgICAgIC8qIGNhbGwgaXNyICovCi0gIAllbHNlCi0gIAl7Ci0gICAgIAlQUklOVEYgKCJib2d1cyBpbnRlcnJ1cHQgdmVjdG9yIDB4JXhcbiIsIGlycSk7Ci0gIAl9CisJaWYgKGlzYV9pcnFzW2lycV0uaGFuZGxlciAhPSBOVUxMKQorCQkoKmlzYV9pcnFzW2lycV0uaGFuZGxlcikoaXNhX2lycXNbaXJxXS5hcmcpOyAgICAgIC8qIGNhbGwgaXNyICovCisJZWxzZQorCXsKKwlQUklOVEYgKCJib2d1cyBpbnRlcnJ1cHQgdmVjdG9yIDB4JXhcbiIsIGlycSk7CisJfQogCX0KIAkvKiBpc3N1ZSBFT0kgaW5zdHJ1Y3Rpb24gdG8gY2xlYXIgdGhlIElSUSAqLwogCW1hc2tfYW5kX2Fja184MjU5QShpcnEpOwpAQCAtNDA5LDcgKzQwNyw2IEBACiB9CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJbnN0YWxsIGFuZCBmcmVlIGFuIElTQSBpbnRlcnJ1cHQgaGFuZGxlci4KICAqLwpAQCAtNDE4LDEyICs0MTUsMTIgQEAKIHsKICAgaWYgKGlzYV9pcnFzW3ZlY10uaGFuZGxlciAhPSBOVUxMKSB7CiAgICBwcmludGYgKCJJU0EgSW50ZXJydXB0IHZlY3RvciAlZDogaGFuZGxlciAweCV4IHJlcGxhY2luZyAweCV4XG4iLAotICAgICAgICAgICB2ZWMsICh1aW50KWhhbmRsZXIsICh1aW50KWlzYV9pcnFzW3ZlY10uaGFuZGxlcik7CisJICAgdmVjLCAodWludCloYW5kbGVyLCAodWludClpc2FfaXJxc1t2ZWNdLmhhbmRsZXIpOwogICB9CiAgIGlzYV9pcnFzW3ZlY10uaGFuZGxlciA9IGhhbmRsZXI7CiAgIGlzYV9pcnFzW3ZlY10uYXJnICAgICA9IGFyZzsKICAgZW5hYmxlXzgyNTlBX2lycSh2ZWMpOwotIAlQUklOVEYgKCJJbnN0YWxsIElTQSBJUlEgJWQgPT0+ICVwLCBAICVwIG1hc2s9JTA0eFxuIiwgdmVjLCBoYW5kbGVyLCAmaXNhX2lycXNbdmVjXS5oYW5kbGVyLGNhY2hlZF9pcnFfbWFzayk7CisJUFJJTlRGICgiSW5zdGFsbCBJU0EgSVJRICVkID09PiAlcCwgQCAlcCBtYXNrPSUwNHhcbiIsIHZlYywgaGFuZGxlciwgJmlzYV9pcnFzW3ZlY10uaGFuZGxlcixjYWNoZWRfaXJxX21hc2spOwogCiB9CiAKQEAgLTQzMiw3ICs0MjksNyBAQAogCWRpc2FibGVfODI1OUFfaXJxKHZlYyk7CiAgIGlzYV9pcnFzW3ZlY10uaGFuZGxlciA9IE5VTEw7CiAgIGlzYV9pcnFzW3ZlY10uYXJnICAgICA9IE5VTEw7Ci0gCXByaW50ZiAoIkZyZWUgSVNBIElSUSAlZCBtYXNrPSUwNHhcbiIsIHZlYywgY2FjaGVkX2lycV9tYXNrKTsKKwlwcmludGYgKCJGcmVlIElTQSBJUlEgJWQgbWFzaz0lMDR4XG4iLCB2ZWMsIGNhY2hlZF9pcnFfbWFzayk7CiAKIH0KIApAQCAtNDY0LDYgKzQ2MSwzIEBACiAJZHJ2X2lzYV9rYmRfaW5pdCgpOwogCXJldHVybiAwOwogfQotCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL2NvbW1vbi9pc2EuaCBiL2JvYXJkL21wbC9jb21tb24vaXNhLmgKaW5kZXggNjZkZDJjOS4uNTc4MjIyZCAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL2NvbW1vbi9pc2EuaAorKysgYi9ib2FyZC9tcGwvY29tbW9uL2lzYS5oCkBAIC0yNyw3ICsyNyw2IEBACiAjZGVmaW5lIFNJT19DRkdfUE9SVAkweDNGMAkvKiBDb25maWcgUG9ydCBBZGRyZXNzICovCiAKIAotCiAvKiB0YWJsZSBmb3JlIFNJTyBpbml0aWFsaXphdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCWNvbnN0IHVjaGFyIGluZGV4OwpAQCAtNDAsOCArMzksNiBAQAogfSBTSU9fVEFCTEU7CiAKIAotCi0KIHVuc2lnbmVkIGNoYXIgb3Blbl9jZmdfc3VwZXJfSU8oaW50IGFkZHJlc3MpOwogdW5zaWduZWQgY2hhciByZWFkX2NmZ19zdXBlcl9JTyhpbnQgYWRkcmVzcywgdW5zaWduZWQgY2hhciBmdW5jdGlvbiwgdW5zaWduZWQgY2hhciByZWdhZGRyKTsKIHZvaWQgd3JpdGVfY2ZnX3N1cGVyX0lPKGludCBhZGRyZXNzLCB1bnNpZ25lZCBjaGFyIGZ1bmN0aW9uLCB1bnNpZ25lZCBjaGFyIHJlZ2FkZHIsIHVuc2lnbmVkIGNoYXIgZGF0YSk7CmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvY29tbW9uL2tiZC5jIGIvYm9hcmQvbXBsL2NvbW1vbi9rYmQuYwppbmRleCA1Yjg3Y2RiLi45YmQxZmY5IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvY29tbW9uL2tiZC5jCisrKyBiL2JvYXJkL21wbC9jb21tb24va2JkLmMKQEAgLTEzNyw4ICsxMzcsNiBAQAogI2RlZmluZSAJS0JEX0JVRkZFUl9MRU4gMHgyMCAgLyogc2l6ZSBvZiB0aGUga2V5Ym9hcmRidWZmZXIgKi8KIAogCi0KLQogc3RhdGljIHZvbGF0aWxlIGNoYXIga2JkX2J1ZmZlcltLQkRfQlVGRkVSX0xFTl07CiBzdGF0aWMgdm9sYXRpbGUgaW50IGluX3BvaW50ZXIgPSAwOwogc3RhdGljIHZvbGF0aWxlIGludCBvdXRfcG9pbnRlciA9IDA7CkBAIC00NTAsNyArNDQ4LDYgQEAKIH0KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIExvd2xldmVsIFBhcnQgb2Yga2V5Ym9hcmQgc2VjdGlvbgogICovCkBAIC02NDgsOCArNjQ1LDMgQEAKIHsKIAloYW5kbGVfa2JkX2V2ZW50KCk7CiB9Ci0KLQotCi0vKiBlb2YgKi8KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL2NvbW1vbi9tZW10c3QuYyBiL2JvYXJkL21wbC9jb21tb24vbWVtdHN0LmMKaW5kZXggMTIyYmEyZS4uYzk5NGE4YiAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL2NvbW1vbi9tZW10c3QuYworKysgYi9ib2FyZC9tcGwvY29tbW9uL21lbXRzdC5jCkBAIC02NSw5ICs2NSw2IEBACiAjZGVmaW5lIE1FR0FCWVRFICgxMDI0KjEwMjQpCiAKIAotCi0KLQogdHlwZWRlZiBzdHJ1Y3QgewogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgcGF0MTsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHBhdDI7CkBAIC00NDQsNyArNDQxLDYgQEAKIH0KIAogCi0KIHR5cGVkZWYgc3RydWN0IHsKIAl2b2lkICgqdGVzdF93cml0ZSkgKHVuc2lnbmVkIGxvbmcgc3RhcnRhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJCQl1bnNpZ25lZCBsb25nICpwYXQpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL2NvbW1vbi9wY2lfcGFydHMuaCBiL2JvYXJkL21wbC9jb21tb24vcGNpX3BhcnRzLmgKaW5kZXggYThlMzIzMi4uODI0MjZmMyAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL2NvbW1vbi9wY2lfcGFydHMuaAorKysgYi9ib2FyZC9tcGwvY29tbW9uL3BjaV9wYXJ0cy5oCkBAIC01OSw3ICs1OSw2IEBACiAjZGVmaW5lIFBDSV9JUlFfVkVDVE9SKHgpCSgoUENJX0RFVih4KSArIDEwKSAlIDQpICsgMjgKIAogCi0KIC8qIFBDSSBEZXZpY2UgTGlzdCBmb3IgUElQNDA1ICovCiAKIC8qIE1hcHBpbmc6CkBAIC0xOTEsOCArMTkwLDMgQEAKIAl7IH0KIH07CiAjZW5kaWYgLyogX1BDSV9QQVJUU19IXyAqLwotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9jb21tb24vcGlpeDRfcGNpLmggYi9ib2FyZC9tcGwvY29tbW9uL3BpaXg0X3BjaS5oCmluZGV4IDVhMGZkNWUuLjNjMDUyM2YgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9jb21tb24vcGlpeDRfcGNpLmgKKysrIGIvYm9hcmQvbXBsL2NvbW1vbi9waWl4NF9wY2kuaApAQCAtMjIsNyArMjIsNiBAQAogICovCiAKIAotCiAjaWZuZGVmIF9QSUlYNF9QQ0lfSAogI2RlZmluZSBfUElJWDRfUENJX0gKIApAQCAtMTYzLDUgKzE2Miw0IEBACiAjZGVmaW5lCVBDSV9DRkdfUElJWDRfU01CQkEJMHg5MAogCiAKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvY29tbW9uL3VzYl91aGNpLmMgYi9ib2FyZC9tcGwvY29tbW9uL3VzYl91aGNpLmMKaW5kZXggODM2MjRhOS4uNGExMGI3OSAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL2NvbW1vbi91c2JfdWhjaS5jCisrKyBiL2JvYXJkL21wbC9jb21tb24vdXNiX3VoY2kuYwpAQCAtMTA4OCw3ICsxMDg4LDYgQEAKICNlbmRpZgogCiAKLQogI2lmZGVmCVVTQl9VSENJX0RFQlVHCiAKIHN0YXRpYyBpbnQgdXNiX2Rpc3BsYXlfdGQodWhjaV90ZF90ICp0ZCkKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9jb21tb24vdXNiX3VoY2kuaCBiL2JvYXJkL21wbC9jb21tb24vdXNiX3VoY2kuaAppbmRleCA4YzhmMTYxLi5hZjgwODM3IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvY29tbW9uL3VzYl91aGNpLmgKKysrIGIvYm9hcmQvbXBsL2NvbW1vbi91c2JfdWhjaS5oCkBAIC0xODYsNSArMTg2LDMgQEAKIAogCiAjZW5kaWYgLyogX1VTQl9VSENJX0hfICovCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL21pcDQwNS9NYWtlZmlsZSBiL2JvYXJkL21wbC9taXA0MDUvTWFrZWZpbGUKaW5kZXggODM5Y2FmZS4uOTI3NmY2NCAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL21pcDQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9tcGwvbWlwNDA1L01ha2VmaWxlCkBAIC0zMSw3ICszMSw3IEBACiBTT0JKUwk9IGluaXQubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvbWlwNDA1L2NtZF9taXA0MDUuYyBiL2JvYXJkL21wbC9taXA0MDUvY21kX21pcDQwNS5jCmluZGV4IDZlYzEyOGYuLjIwNzVmYmQgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9taXA0MDUvY21kX21pcDQwNS5jCisrKyBiL2JvYXJkL21wbC9taXA0MDUvY21kX21pcDQwNS5jCkBAIC01Myw1ICs1MywxMSBAQAogICAgCX0KIAlyZXR1cm4gKGRvX21wbGNvbW1vbihjbWR0cCwgZmxhZywgYXJnYywgYXJndikpOwogfQorY21kX3RibF90IFVfQk9PVF9DTUQobWlwNDA1KSA9IE1LX0NNRF9FTlRSWSgKKwkibWlwNDA1IiwJNiwJMSwJZG9fbWlwNDA1LAorCSJtaXA0MDUgIC0gTUlQNDA1IHNwZWNpZmljIENtZHNcbiIsCisJImZsYXNoIG1lbSBbU3JjQWRkcl0gLSB1cGRhdGVzIFUtQm9vdCB3aXRoIGltYWdlIGluIG1lbW9yeVxuIgorCSJtaXA0MDUgZmxhc2ggbXBzIC0gdXBkYXRlcyBVLUJvb3Qgd2l0aCBpbWFnZSBmcm9tIE1QU1xuIgorKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL21pcDQwNS9pbml0LlMgYi9ib2FyZC9tcGwvbWlwNDA1L2luaXQuUwppbmRleCBhZDNmNzhkLi4wMGJmNzM5IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvbWlwNDA1L2luaXQuUworKysgYi9ib2FyZC9tcGwvbWlwNDA1L2luaXQuUwpAQCAtNjMsNyArNjMsNyBAQAogICBtdGxyICAgIHI0ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgbGluayByZWdpc3RlciAqLwogICBhZGRpICAgIHI0LDAsMTQgICAgICAgICAgICAgICAgIC8qIHNldCBjdHIgdG8gMTQ7IHVzZWQgdG8gcHJlZmV0Y2ggKi8KICAgbXRjdHIgICByNCAgICAgICAgICAgICAgICAgICAgICAvKiAxNCBjYWNoZSBsaW5lcyB0byBmaXQgdGhpcyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiBjYWNoZSAoZ2l2ZXMgdXMgOHgxND0xMTIgaW5zdHJjdG5zKSAqLworCQkJCSAgIC8qIGluIGNhY2hlIChnaXZlcyB1cyA4eDE0PTExMiBpbnN0cmN0bnMpICovCiAuLmViY2xvb3A6CiAgIGljYnQgICAgcjAscjMgICAgICAgICAgICAgICAgICAgLyogcHJlZmV0Y2ggY2FjaGUgbGluZSBmb3IgYWRkciBpbiByMyAqLwogICBhZGRpICAgIHIzLHIzLDMyCQkJCQkJCQkvKiBtb3ZlIHRvIG5leHQgY2FjaGUgbGluZSAqLwpAQCAtMTE2LDEwICsxMTYsMTAgQEAKIAogMDoKIAotICAJLyogOEJpdCBib290IG1vZGU6ICovCisJLyogOEJpdCBib290IG1vZGU6ICovCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgCSogTWVtb3J5IEJhbmsgMCBNdWx0aSBQdXJwb3NlIFNvY2tldCBpbml0aWFsaXphdGlvbgotICAgCSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCSogTWVtb3J5IEJhbmsgMCBNdWx0aSBQdXJwb3NlIFNvY2tldCBpbml0aWFsaXphdGlvbgorCSotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIDB4N0Y4RkZFODAgc2xvd2VzdCBib290ICovCiAJYWRkaSAgICByNCwwLHBiMGFwCiAJbXRkY3IgICBlYmNjZmdhLHI0CkBAIC0xMzMsNyArMTMzLDcgQEAKIAltdGRjciAgIGViY2NmZ2QscjQKIAogCWFkZGkgICAgcjQsMCxwYjBjcgotIAltdGRjciAgIGViY2NmZ2EscjQKKwltdGRjciAgIGViY2NmZ2EscjQKIAkvKiBCUz0weDAxMCg0TUIpLEJVPTB4MyhSL1cpLCAqLwogLyoJYWRkaXMgICByNCwwLCgoRkxBU0hfQkFTRTBfUFJFTElNICYgMHhGRkYwMDAwMCkgfCAweDAwMDUwMDAwKUBoICovCiAvKglvcmkgICAgIHI0LHI0LDB4ODAwMCAgICAgICAgICAvICogQlc9MHgwKCA4IGJpdHMpICovCkBAIC0xOTcsNyArMTk3LDcgQEAKICAqIERlc2NyaXB0aW9uOiAgQ29uZmlndXJlcyB0aGUgaW50ZXJuYWwgU1JBTSBtZW1vcnkuIGFuZCBzZXR1cCB0aGUKICAqICAgICAgICAgICAgICAgU3RhY2twb2ludGVyIGluIGl0LgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotICAgICAgICAuZ2xvYmwgIHNkcmFtX2luaXQKKwkuZ2xvYmwgIHNkcmFtX2luaXQKIAogc2RyYW1faW5pdDoKIApAQCAtMjQ1LDQgKzI0NSwzIEBACiAgIG5vcAogICBiCV9zdGFydAkJLyogbm9ybWFsIHN0YXJ0ICovCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL21pcDQwNS9taXA0MDUuYyBiL2JvYXJkL21wbC9taXA0MDUvbWlwNDA1LmMKaW5kZXggOTNkODY3OS4uMDc5MjJiYyAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL21pcDQwNS9taXA0MDUuYworKysgYi9ib2FyZC9tcGwvbWlwNDA1L21pcDQwNS5jCkBAIC01MTEsNyArNTExLDYgQEAKIH0KIAogCi0KIHZvaWQgdXNlcl9sZWQwICh1bnNpZ25lZCBjaGFyIG9uKQogewogCWlmIChvbikKQEAgLTc2Miw1ICs3NjEsMyBAQAogCXByaW50ZiAoIiAgUElJWCBJTklUOiAlc1xuIiwgKGlycV9yZWcgJiAweDgpID8gImluYWN0aXZlIiA6ICJhY3RpdmUiKTsKIAlwcmludGYgKCIgIFBJSVggTk1JOiAgJXNcbiIsIChpcnFfcmVnICYgMHg0KSA/ICJpbmFjdGl2ZSIgOiAiYWN0aXZlIik7CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL21pcDQwNS9taXA0MDUuaCBiL2JvYXJkL21wbC9taXA0MDUvbWlwNDA1LmgKaW5kZXggMTAxYjE3My4uZjFlMzdmZiAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL21pcDQwNS9taXA0MDUuaAorKysgYi9ib2FyZC9tcGwvbWlwNDA1L21pcDQwNS5oCkBAIC0zMiw3ICszMiw2IEBACiB2b2lkIHVzZXJfbGVkMCh1bnNpZ25lZCBjaGFyIG9uKTsKIAogCi0KICNlbmRpZgogLyogdGltaW5ncyAqLwogLyogUExEIChDUzcpICovCkBAIC0xMTQsNyArMTEzLDYgQEAKICNkZWZpbmUgVUFSVDFfQ1IJKChQRVJfVUFSVDFfQUREUiAmIDB4ZmZmMDAwMDApICsgKFVBUlQwX0JTIDw8IDE3KSArIChVQVJUMF9CVSA8PCAxNSkgKyAoVUFSVDBfQlcgPDwgMTMpKQogCiAKLQogLyogRmxhc2ggQ1MwIG9yIENTIDEgKi8KIC8qIDB4N0Y4RkZFODAgc2xvd2VzdCB0aW1pbmcgYXQgYWxsLi4uICovCiAjZGVmaW5lIEZMQVNIX0JNRV9CCTEgCS8qIEJ1cnN0IGVuYWJsZSAqLwpAQCAtMTgyLDYgKzE4MCwzIEBACiAjZGVmaW5lIE1QU19DUl9CCSgoRkxBU0hfQkFTRTBfUFJFTElNICYgMHhmZmYwMDAwMCkgKyAoTVBTX0JTIDw8IDE3KSArIChNUFNfQlUgPDwgMTUpICsgKE1QU19CVyA8PCAxMykpCiAvKiBDUiByZWdpc3RlciBmb3Igbm9uIEJvb3QgKi8KICNkZWZpbmUgTVBTX0NSCQkoKE1VTFRJX1BVUlBPU0VfU09DS0VUX0FERFIgJiAweGZmZjAwMDAwKSArIChNUFNfQlMgPDwgMTcpICsgKE1QU19CVSA8PCAxNSkgKyAoTVBTX0JXIDw8IDEzKSkKLQotCi0KZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9taXA0MDUvdS1ib290LmxkcyBiL2JvYXJkL21wbC9taXA0MDUvdS1ib290LmxkcwppbmRleCA3MTBhMTM5Li5iYjBmMTIyIDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvbWlwNDA1L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvbXBsL21pcDQwNS91LWJvb3QubGRzCkBAIC0xMjUsNiArMTI1LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvcGlwNDA1L01ha2VmaWxlIGIvYm9hcmQvbXBsL3BpcDQwNS9NYWtlZmlsZQppbmRleCBiNmNjNTMxLi5hODE4ZDA4IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvcGlwNDA1L01ha2VmaWxlCisrKyBiL2JvYXJkL21wbC9waXA0MDUvTWFrZWZpbGUKQEAgLTM0LDcgKzM0LDcgQEAKIFNPQkpTCT0gaW5pdC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9waXA0MDUvY21kX3BpcDQwNS5jIGIvYm9hcmQvbXBsL3BpcDQwNS9jbWRfcGlwNDA1LmMKaW5kZXggMGQxY2UxMS4uNGNjMzc3NiAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL3BpcDQwNS9jbWRfcGlwNDA1LmMKKysrIGIvYm9hcmQvbXBsL3BpcDQwNS9jbWRfcGlwNDA1LmMKQEAgLTMzLDcgKzMzLDYgQEAKIGV4dGVybiBpbnQgZG9fbXBsY29tbW9uKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKIAogCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogaW50IGRvX3BpcDQwNShjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKQEAgLTU5LDUgKzU4LDEyIEBACiAKIAlyZXR1cm4gKGRvX21wbGNvbW1vbihjbWR0cCwgZmxhZywgYXJnYywgYXJndikpOwogfQorY21kX3RibF90IFVfQk9PVF9DTUQocGlwNDA1KSA9IE1LX0NNRF9FTlRSWSgKKwkicGlwNDA1IiwJNiwJMSwJZG9fcGlwNDA1LAorCSJwaXA0MDUgIC0gUElQNDA1IHNwZWNpZmljIENtZHNcbiIsCisJImZsYXNoIG1lbSBbU3JjQWRkcl0gLSB1cGRhdGVzIFUtQm9vdCB3aXRoIGltYWdlIGluIG1lbW9yeVxuIgorCSJwaXA0MDUgZmxhc2ggZmxvcHB5IFtTcmNBZGRyXSAtIHVwZGF0ZXMgVS1Cb290IHdpdGggaW1hZ2UgZnJvbSBmbG9wcHlcbiIKKwkicGlwNDA1IGZsYXNoIG1wcyAtIHVwZGF0ZXMgVS1Cb290IHdpdGggaW1hZ2UgZnJvbSBNUFNcbiIKKyk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9waXA0MDUvaW5pdC5TIGIvYm9hcmQvbXBsL3BpcDQwNS9pbml0LlMKaW5kZXggNGE3MGVjOS4uYTBjNzZkZCAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL3BpcDQwNS9pbml0LlMKKysrIGIvYm9hcmQvbXBsL3BpcDQwNS9pbml0LlMKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKIAotIAkuZ2xvYmwJZXh0X2J1c19jbnRscl9pbml0CisJLmdsb2JsCWV4dF9idXNfY250bHJfaW5pdAogZXh0X2J1c19jbnRscl9pbml0OgogICBtZmxyICAgIHI0ICAgICAgICAgICAgICAgICAgICAgIC8qIHNhdmUgbGluayByZWdpc3RlciAqLwogICBibCAgICAgIC4uZ2V0QWRkcgpAQCAtNTgsNyArNTgsNyBAQAogICBtdGxyICAgIHI0ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgbGluayByZWdpc3RlciAqLwogICBhZGRpICAgIHI0LDAsMTQgICAgICAgICAgICAgICAgIC8qIHNldCBjdHIgdG8gMTQ7IHVzZWQgdG8gcHJlZmV0Y2ggKi8KICAgbXRjdHIgICByNCAgICAgICAgICAgICAgICAgICAgICAvKiAxNCBjYWNoZSBsaW5lcyB0byBmaXQgdGhpcyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiBjYWNoZSAoZ2l2ZXMgdXMgOHgxND0xMTIgaW5zdHJjdG5zKSAqLworCQkJCSAgIC8qIGluIGNhY2hlIChnaXZlcyB1cyA4eDE0PTExMiBpbnN0cmN0bnMpICovCiAuLmViY2xvb3A6CiAgIGljYnQgICAgcjAscjMgICAgICAgICAgICAgICAgICAgLyogcHJlZmV0Y2ggY2FjaGUgbGluZSBmb3IgYWRkciBpbiByMyAqLwogICBhZGRpICAgIHIzLHIzLDMyCQkJCQkJCQkvKiBtb3ZlIHRvIG5leHQgY2FjaGUgbGluZSAqLwpAQCAtMjExLDEwICsyMTEsOSBAQAogICogRGVzY3JpcHRpb246ICBDb25maWd1cmVzIHRoZSBpbnRlcm5hbCBTUkFNIG1lbW9yeS4gYW5kIHNldHVwIHRoZQogICogICAgICAgICAgICAgICBTdGFja3BvaW50ZXIgaW4gaXQuCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIC5nbG9ibCAgc2RyYW1faW5pdAorCS5nbG9ibCAgc2RyYW1faW5pdAogCiBzZHJhbV9pbml0OgogCiAKICAgYmxyCi0KZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9waXA0MDUvcGlwNDA1LmMgYi9ib2FyZC9tcGwvcGlwNDA1L3BpcDQwNS5jCmluZGV4IDg3Y2E2ZWYuLmE3N2UyYzkgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9waXA0MDUvcGlwNDA1LmMKKysrIGIvYm9hcmQvbXBsL3BpcDQwNS9waXA0MDUuYwpAQCAtNTMwLDcgKzUzMCw2IEBACiAJbXRkY3IgKG1lbWNmZ2QsIHRtcCk7CiAKIAotCiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IEludGVycnVwdCBjb250cm9sbGVyIHNldHVwIGZvciB0aGUgUElQNDA1IGJvYXJkLgogICAgfCBOb3RlOiBJUlEgMC0xNSAgNDA1R1AgaW50ZXJuYWxseSBnZW5lcmF0ZWQ7IGFjdGl2ZSBoaWdoOyBsZXZlbCBzZW5zaXRpdmUKQEAgLTY3Myw3ICs2NzIsNiBAQAogfQogCiAKLQogZXh0ZXJuIGludCBpc2FfaW5pdCAodm9pZCk7CiAKIApAQCAtOTQzLDUgKzk0MSwzIEBACiAJfQogCW91dDggKFBMRF9TQ1NJX1JTVF9SRUcsIHJlc3JlZyk7CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL3BpcDQwNS9waXA0MDUuaCBiL2JvYXJkL21wbC9waXA0MDUvcGlwNDA1LmgKaW5kZXggMTBmNjQ3OS4uYzI0MTFhMyAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL3BpcDQwNS9waXA0MDUuaAorKysgYi9ib2FyZC9tcGwvcGlwNDA1L3BpcDQwNS5oCkBAIC0xMzEsNyArMTMxLDYgQEAKICNkZWZpbmUgVUFSVDFfQ1IJKChQRVJfVUFSVDFfQUREUiAmIDB4ZmZmMDAwMDApICsgKFVBUlQwX0JTIDw8IDE3KSArIChVQVJUMF9CVSA8PCAxNSkgKyAoVUFSVDBfQlcgPDwgMTMpKQogCiAKLQogLyogRmxhc2ggQ1MwIG9yIENTIDEgKi8KIC8qIDB4N0Y4RkZFODAgc2xvd2VzdCB0aW1pbmcgYXQgYWxsLi4uICovCiAjZGVmaW5lIEZMQVNIX0JNRV9CCTEgCS8qIEJ1cnN0IGVuYWJsZSAqLwpAQCAtMTk5LDE0ICsxOTgsMyBAQAogI2RlZmluZSBNUFNfQ1JfQgkoKEZMQVNIX0JBU0UwX1BSRUxJTSAmIDB4ZmZmMDAwMDApICsgKE1QU19CUyA8PCAxNykgKyAoTVBTX0JVIDw8IDE1KSArIChNUFNfQlcgPDwgMTMpKQogLyogQ1IgcmVnaXN0ZXIgZm9yIG5vbiBCb290ICovCiAjZGVmaW5lIE1QU19DUgkJKChNVUxUSV9QVVJQT1NFX1NPQ0tFVF9BRERSICYgMHhmZmYwMDAwMCkgKyAoTVBTX0JTIDw8IDE3KSArIChNUFNfQlUgPDwgMTUpICsgKE1QU19CVyA8PCAxMykpCi0KLQotCi0KLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL3BpcDQwNS91LWJvb3QubGRzIGIvYm9hcmQvbXBsL3BpcDQwNS91LWJvb3QubGRzCmluZGV4IGYyMjEzNDMuLjliODNkZWQgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9waXA0MDUvdS1ib290LmxkcworKysgYi9ib2FyZC9tcGwvcGlwNDA1L3UtYm9vdC5sZHMKQEAgLTEyMSw2ICsxMjEsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9waXA0MDUvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL21wbC9waXA0MDUvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCBmNGY5NzQzLi5kNDgzNDI0IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvcGlwNDA1L3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvbXBsL3BpcDQwNS91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDYsNiArMTA2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjgsNCArMTMzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL3ZjbWE5L01ha2VmaWxlIGIvYm9hcmQvbXBsL3ZjbWE5L01ha2VmaWxlCmluZGV4IDQyOGVlYTIuLmY5Yjc4ZjkgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC92Y21hOS9NYWtlZmlsZQorKysgYi9ib2FyZC9tcGwvdmNtYTkvTWFrZWZpbGUKQEAgLTMxLDcgKzMxLDcgQEAKIFNPQkpTCTo9IG1lbXNldHVwLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL3ZjbWE5L2NtZF92Y21hOS5jIGIvYm9hcmQvbXBsL3ZjbWE5L2NtZF92Y21hOS5jCmluZGV4IDgwYmI2MWIyYi4uMzJmYTMzNCAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL3ZjbWE5L2NtZF92Y21hOS5jCisrKyBiL2JvYXJkL21wbC92Y21hOS9jbWRfdmNtYTkuYwpAQCAtMTQxLDQgKzE0MSwzIEBACiAKIAlyZXR1cm4gKGRvX21wbGNvbW1vbihjbWR0cCwgZmxhZywgYXJnYywgYXJndikpOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvdmNtYTkvZmxhc2guYyBiL2JvYXJkL21wbC92Y21hOS9mbGFzaC5jCmluZGV4IGI0NDJjOWQuLjkxNTE3YzQgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC92Y21hOS9mbGFzaC5jCisrKyBiL2JvYXJkL21wbC92Y21hOS9mbGFzaC5jCkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICAgKi8KICAgICByZXN1bHQgPSAqYWRkcjsKICAgICBpZiAoKHJlc3VsdCAmIGRhdGEpICE9IGRhdGEpCi0gICAgICAgIHJldHVybiBFUlJfTk9UX0VSQVNFRDsKKwlyZXR1cm4gRVJSX05PVF9FUkFTRUQ7CiAKIAogICAgIC8qCkBAIC0zNjUsNyArMzY1LDcgQEAKICAgICAqYWRkciA9IENNRF9SRUFEX0FSUkFZOwogCiAgICAgaWYgKGNoaXAgPT0gRVJSIHx8ICphZGRyICE9IGRhdGEpCi0gICAgICAgIHJjID0gRVJSX1BST0dfRVJST1I7CisJcmMgPSBFUlJfUFJPR19FUlJPUjsKIAogICAgIGlmIChpZmxhZykKICAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvdmNtYTkvbWVtc2V0dXAuUyBiL2JvYXJkL21wbC92Y21hOS9tZW1zZXR1cC5TCmluZGV4IDU1N2U1NTQuLjdiNDE5M2QgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC92Y21hOS9tZW1zZXR1cC5TCisrKyBiL2JvYXJkL21wbC92Y21hOS9tZW1zZXR1cC5TCkBAIC0yOCw3ICsyOCw2IEBACiAgKi8KIAogCi0KICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDx2ZXJzaW9uLmg+CiAKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC92Y21hOS91LWJvb3QubGRzIGIvYm9hcmQvbXBsL3ZjbWE5L3UtYm9vdC5sZHMKaW5kZXggOGM5YzIxOC4uM2E3YzRkNCAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL3ZjbWE5L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvbXBsL3ZjbWE5L3UtYm9vdC5sZHMKQEAgLTI3LDI4ICsyNywzMiBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSAgICAgICAgLiA9IDB4MDAwMDAwMDA7CisJLiA9IDB4MDAwMDAwMDA7CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAkudGV4dCAgICAgIDoKIAl7CiAJICBjcHUvYXJtOTIwdC9zdGFydC5vCSgudGV4dCkKIAkgICooLnRleHQpCiAJfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmRhdGEgOiB7ICooLmRhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5nb3QgOiB7ICooLmdvdCkgfQorCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKIAogCWFybWJvb3RfZW5kX2RhdGEgPSAuOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmJzcyA6IHsgKiguYnNzKSB9CisJLiA9IEFMSUdOKDQpOworCS5ic3MgOiB7ICooLmJzcykgfQogCiAJYXJtYm9vdF9lbmQgPSAuOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmMgYi9ib2FyZC9tcGwvdmNtYTkvdmNtYTkuYwppbmRleCBiMDUxYmZlLi4xZGY1YzM4IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvdmNtYTkvdmNtYTkuYworKysgYi9ib2FyZC9tcGwvdmNtYTkvdmNtYTkuYwpAQCAtMTY2LDkgKzE2Niw5IEBACiAjZGVmaW5lIFRXUlBIMCAgMwogI2RlZmluZSBUV1JQSDEgIDAKICAgICBORl9Db25mKCgxPDwxNSl8KDA8PDE0KXwoMDw8MTMpfCgxPDwxMil8KDE8PDExKXwoVEFDTFM8PDgpfChUV1JQSDA8PDQpfChUV1JQSDE8PDApKTsKLSAgICAvL25hbmQtPk5GQ09ORiA9ICgxPDwxNSl8KDE8PDE0KXwoMTw8MTMpfCgxPDwxMil8KDE8PDExKXwoVEFDTFM8PDgpfChUV1JQSDA8PDQpfChUV1JQSDE8PDApOwotICAgIC8vIDEgIDEgICAgMSAgICAgMSwgICAxICAgICAgeHh4LCAgciB4eHgsICAgciB4eHgKLSAgICAvLyBFbiA1MTJCIDRzdGVwIEVDQ1IgbkZDRT1IIHRBQ0xTICAgdFdSUEgwICAgdFdSUEgxCisgICAgLypuYW5kLT5ORkNPTkYgPSAoMTw8MTUpfCgxPDwxNCl8KDE8PDEzKXwoMTw8MTIpfCgxPDwxMSl8KFRBQ0xTPDw4KXwoVFdSUEgwPDw0KXwoVFdSUEgxPDwwKTsgKi8KKyAgICAvKiAxICAxICAgIDEgICAgIDEsICAgMSAgICAgIHh4eCwgIHIgeHh4LCAgIHIgeHh4ICovCisgICAgLyogRW4gNTEyQiA0c3RlcCBFQ0NSIG5GQ0U9SCB0QUNMUyAgIHRXUlBIMCAgIHRXUlBIMSAqLwogCiAgICAgTkZfUmVzZXQoKTsKIH0KQEAgLTI1Nyw3ICsyNTcsNiBAQAogfQogCiAKLQogdm9pZCBwcmludF92Y21hOV9yZXYodm9pZCkKIHsKIAlwcmludGYoIkJvYXJkOiBWQ01BOS0lZCBQQ0IgUmV2OiAlYyAoUExEIFZlcjogJWQsIFJldjogJWQpXG4iLApkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmggYi9ib2FyZC9tcGwvdmNtYTkvdmNtYTkuaAppbmRleCA0Mjk5ZDRlLi4wNjhlYjIxIDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvdmNtYTkvdmNtYTkuaAorKysgYi9ib2FyZC9tcGwvdmNtYTkvdmNtYTkuaApAQCAtMTI0LDQgKzEyNCwzIEBACiAjZGVmaW5lIFBMRF9NSVNDX1JFRwkJCShQTERfQkFTRV9BRERSRVNTICsgMykKICNkZWZpbmUgUExEX0dQQ0RfUkVHCQkJKFBMRF9CQVNFX0FERFJFU1MgKyA0KQogI2RlZmluZSBQTERfQk9BUkRfUkVHCQkJKFBMRF9CQVNFX0FERFJFU1MgKyA1KQotCmRpZmYgLS1naXQgYS9ib2FyZC9tdXNlbmtpL01ha2VmaWxlIGIvYm9hcmQvbXVzZW5raS9NYWtlZmlsZQppbmRleCAyNjEzMjkyLi4yNGRjMDI2IDEwMDY0NAotLS0gYS9ib2FyZC9tdXNlbmtpL01ha2VmaWxlCisrKyBiL2JvYXJkL211c2Vua2kvTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIFNPQkpTCT0KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL211c2Vua2kvUkVBRE1FIGIvYm9hcmQvbXVzZW5raS9SRUFETUUKaW5kZXggNGExOTU1ZC4uMTM1YTAxYSAxMDA2NDQKLS0tIGEvYm9hcmQvbXVzZW5raS9SRUFETUUKKysrIGIvYm9hcmQvbXVzZW5raS9SRUFETUUKQEAgLTY4LDEyICs2OCwxMSBAQAogc2F2ZWVudiAtIHNhdmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHBlcnNpc3RlbnQgc3RvcmFnZQogc2V0ZW52ICAtIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKIHRmdHBib290LSBib290IGltYWdlIHZpYSBuZXR3b3JrIHVzaW5nIFRGVFAgcHJvdG9jb2wKLSAgICAgICAgICAgICAgIGFuZCBlbnYgdmFyaWFibGVzIGlwYWRkciBhbmQgc2VydmVyaXAKKwkgICAgICAgYW5kIGVudiB2YXJpYWJsZXMgaXBhZGRyIGFuZCBzZXJ2ZXJpcAogdmVyc2lvbiAtIHByaW50IG1vbml0b3IgdmVyc2lvbgogPyAgICAgICAtIGFsaWFzIGZvciAnaGVscCcKIAogCi0KIHgueC54IENPTkZJR19DT05TX0lOREVYIDIKIAogKioqKiBOT1QgVEVTVEVEICoqKioKQEAgLTE2Nyw3ICsxNjYsNiBAQAogPT4KIAogCi0KIHgueC54IEZsYXNoIFByb2dyYW1taW5nCiAKIApAQCAtMjk4LDQgKzI5NiwzIEBACiB4LnggSW1hZ2UgZG93bmxvYWQgYW5kIHJ1biBvdmVyIGV0aGVybmV0IGludGVyZmFjZQogCiB1bnRlc3RlZCAobm90IHdvcmtpbmcgeWV0LCBhY3R1YWxseSkKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXVzZW5raS9mbGFzaC5jIGIvYm9hcmQvbXVzZW5raS9mbGFzaC5jCmluZGV4IDFlOGJmZmYuLmNkMzNkOGUgMTAwNjQ0Ci0tLSBhL2JvYXJkL211c2Vua2kvZmxhc2guYworKysgYi9ib2FyZC9tdXNlbmtpL2ZsYXNoLmMKQEAgLTU2LDcgKzU2LDYgQEAKIHN0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzICh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKmluZm8pOwogCiAKLQogLyoKICAqIGRvbid0IGFzay4gIGl0cyBzdHVwaWQsIGJ1dCBtb3JlIHRoYW4gb25lIHNvdWwgaGFzIGhhZCB0byBsaXZlIHdpdGggdGhpcyBtaXN0YWtlCiAgKiAic3dhcHRhYltpXSIgaXMgdGhlIHZhbHVlIG9mICJpIiB3aXRoIHRoZSBiaXRzIHJldmVyc2VkLgpkaWZmIC0tZ2l0IGEvYm9hcmQvbXVzZW5raS91LWJvb3QubGRzIGIvYm9hcmQvbXVzZW5raS91LWJvb3QubGRzCmluZGV4IGNmMjM0MDcuLjlkOTQ5YjUgMTAwNjQ0Ci0tLSBhL2JvYXJkL211c2Vua2kvdS1ib290LmxkcworKysgYi9ib2FyZC9tdXNlbmtpL3UtYm9vdC5sZHMKQEAgLTEwMyw2ICsxMDMsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyNiw0ICsxMzEsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9tdnMxL01ha2VmaWxlIGIvYm9hcmQvbXZzMS9NYWtlZmlsZQppbmRleCBlZjE3M2QwLi4xM2NlOWZjIDEwMDY0NAotLS0gYS9ib2FyZC9tdnMxL01ha2VmaWxlCisrKyBiL2JvYXJkL212czEvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL212czEvUkVBRE1FIGIvYm9hcmQvbXZzMS9SRUFETUUKaW5kZXggNmM2NmQ2Ny4uNjk1MjBiZCAxMDA2NDQKLS0tIGEvYm9hcmQvbXZzMS9SRUFETUUKKysrIGIvYm9hcmQvbXZzMS9SRUFETUUKQEAgLTEyLDQgKzEyLDMgQEAKIEQtNzE1NzAKIE9wcGVud2VpbGVyCiBHZXJtYW55Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL212czEvbXZzMS5jIGIvYm9hcmQvbXZzMS9tdnMxLmMKaW5kZXggZGE5OGRlNS4uY2Q1YTAxYyAxMDA2NDQKLS0tIGEvYm9hcmQvbXZzMS9tdnMxLmMKKysrIGIvYm9hcmQvbXZzMS9tdnMxLmMKQEAgLTk5LDcgKzk5LDYgQEAKIH0KIAogCi0KICNpZmRlZiBET19SQU1fVEVTVAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCmRpZmYgLS1naXQgYS9ib2FyZC9tdnMxL3UtYm9vdC5sZHMgYi9ib2FyZC9tdnMxL3UtYm9vdC5sZHMKaW5kZXggMTVhMTk2My4uN2ZlMjRkZiAxMDA2NDQKLS0tIGEvYm9hcmQvbXZzMS91LWJvb3QubGRzCisrKyBiL2JvYXJkL212czEvdS1ib290LmxkcwpAQCAtMTE1LDYgKzExNSwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTM3LDQgKzE0MiwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL212czEvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL212czEvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCAyMjEzOGY4Li5jMGVlODQ5IDEwMDY0NAotLS0gYS9ib2FyZC9tdnMxL3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvbXZzMS91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDYsNiArMTA2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjgsNCArMTMzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbmV0dmlhL01ha2VmaWxlIGIvYm9hcmQvbmV0dmlhL01ha2VmaWxlCmluZGV4IGVmMTczZDAuLjEzY2U5ZmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL25ldHZpYS9NYWtlZmlsZQorKysgYi9ib2FyZC9uZXR2aWEvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL25ldHZpYS91LWJvb3QubGRzIGIvYm9hcmQvbmV0dmlhL3UtYm9vdC5sZHMKaW5kZXggNWFjODhkYS4uMTRkNGJhMCAxMDA2NDQKLS0tIGEvYm9hcmQvbmV0dmlhL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvbmV0dmlhL3UtYm9vdC5sZHMKQEAgLTEwOSw2ICsxMDksMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL25ldHZpYS91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvbmV0dmlhL3UtYm9vdC5sZHMuZGVidWcKaW5kZXggZmE0OTRmYi4uNDRlYjJiNiAxMDA2NDQKLS0tIGEvYm9hcmQvbmV0dmlhL3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvbmV0dmlhL3UtYm9vdC5sZHMuZGVidWcKQEAgLTEwNiw2ICsxMDYsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyOCw0ICsxMzMsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9ueDgyMy9NYWtlZmlsZSBiL2JvYXJkL254ODIzL01ha2VmaWxlCmluZGV4IDM1Yjg0MjguLjdhMjAxNGQgMTAwNjQ0Ci0tLSBhL2JvYXJkL254ODIzL01ha2VmaWxlCisrKyBiL2JvYXJkL254ODIzL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9ueDgyMy9mbGFzaC5jIGIvYm9hcmQvbng4MjMvZmxhc2guYwppbmRleCAwNWVjNjg3Li41ODE5MjVlIDEwMDY0NAotLS0gYS9ib2FyZC9ueDgyMy9mbGFzaC5jCisrKyBiL2JvYXJkL254ODIzL2ZsYXNoLmMKQEAgLTQ2Miw0ICs0NjIsMyBAQAogCiAJcmV0dXJuICgwKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvbng4MjMvbng4MjMuYyBiL2JvYXJkL254ODIzL254ODIzLmMKaW5kZXggMzVjYzliMC4uMDdkMTczYiAxMDA2NDQKLS0tIGEvYm9hcmQvbng4MjMvbng4MjMuYworKysgYi9ib2FyZC9ueDgyMy9ueDgyMy5jCkBAIC00ODIsNCArNDgyLDMgQEAKIAliZC0+YmlfZW5ldGFkZHJbNF0gPSBiZC0+Ymlfc2VybnVtWzVdOwogCWJkLT5iaV9lbmV0YWRkcls1XSA9IGJkLT5iaV9zZXJudW1bNl07CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL254ODIzL3UtYm9vdC5sZHMgYi9ib2FyZC9ueDgyMy91LWJvb3QubGRzCmluZGV4IDcxMjgxNTUuLjUyNjE5OGMgMTAwNjQ0Ci0tLSBhL2JvYXJkL254ODIzL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvbng4MjMvdS1ib290LmxkcwpAQCAtOTksNiArOTksMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyMSw0ICsxMjYsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9ueDgyMy91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvbng4MjMvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCA4ZGM2ZDQwLi5mNmY3Y2Y0IDEwMDY0NAotLS0gYS9ib2FyZC9ueDgyMy91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL254ODIzL3UtYm9vdC5sZHMuZGVidWcKQEAgLTEwNiw2ICsxMDYsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyOCw0ICsxMzMsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9veGMvTWFrZWZpbGUgYi9ib2FyZC9veGMvTWFrZWZpbGUKaW5kZXggODYzOWUxNy4uYWU3YTkzMiAxMDA2NDQKLS0tIGEvYm9hcmQvb3hjL01ha2VmaWxlCisrKyBiL2JvYXJkL294Yy9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvb3hjL3UtYm9vdC5sZHMgYi9ib2FyZC9veGMvdS1ib290LmxkcwppbmRleCAwZTBiMGU2Li5kYjg5YTc4IDEwMDY0NAotLS0gYS9ib2FyZC9veGMvdS1ib290LmxkcworKysgYi9ib2FyZC9veGMvdS1ib290LmxkcwpAQCAtMTAwLDYgKzEwMCwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTIzLDQgKzEyOCwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3BjaXBwYzIvTWFrZWZpbGUgYi9ib2FyZC9wY2lwcGMyL01ha2VmaWxlCmluZGV4IGQ3NzExMDAuLjI5OThmMjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BjaXBwYzIvTWFrZWZpbGUKKysrIGIvYm9hcmQvcGNpcHBjMi9NYWtlZmlsZQpAQCAtMzMsNyArMzMsNyBAQAogT0JKUwk9ICQoQ09CSlMpICQoQU9CSlMpCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9wY2lwcGMyL2NwYzcxMF9wY2kuYyBiL2JvYXJkL3BjaXBwYzIvY3BjNzEwX3BjaS5jCmluZGV4IDk5NzVjZGEuLmJlZDhhZWEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BjaXBwYzIvY3BjNzEwX3BjaS5jCisrKyBiL2JvYXJkL3BjaXBwYzIvY3BjNzEwX3BjaS5jCkBAIC01Myw3ICs1Myw3IEBACiAgIHUzMgkJCXNkcmFtX3NpemUgPSBwY2lwcGMyX3NkcmFtX3NpemUoKTsKIAogICBjcGM3MTBfbWFwcGVkX3JhbSA9IHNkcmFtX3NpemUgPCBQQ0lfTUVNT1JZX01BWFNJWkUgPwotICAgICAgICAgICAgICAgICAgICAgIHNkcmFtX3NpemUgOiBQQ0lfTUVNT1JZX01BWFNJWkU7CisJCSAgICAgIHNkcmFtX3NpemUgOiBQQ0lfTUVNT1JZX01BWFNJWkU7CiAKICAgICAvKiBTZWxlY3QgdGhlIGxvY2FsIFBDSQogICAgICAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvcGNpcHBjMi9wY2lwcGMyLmMgYi9ib2FyZC9wY2lwcGMyL3BjaXBwYzIuYwppbmRleCBiYWIzYzIwLi5mZDNkNDc5IDEwMDY0NAotLS0gYS9ib2FyZC9wY2lwcGMyL3BjaXBwYzIuYworKysgYi9ib2FyZC9wY2lwcGMyL3BjaXBwYzIuYwpAQCAtNjYsMTEgKzY2LDEzIEBACiAJcmV0dXJuIGNwYzcxMF9yYW1faW5pdCAoKTsKIH0KIAotdm9pZCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgYmRfdCAqYmQsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoraW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlvdXQzMiAoUkVHIChDUEMwLCBTUE9SKSwgMCk7CiAJaW9iYXJyaWVyX3J3ICgpOwogCXdoaWxlICgxKTsKKwkvKiBub3RyZWFjaGVkICovCisJcmV0dXJuICgtMSk7CiB9CiAKIGludCBib2FyZF9wcmVfaW5pdCAodm9pZCkKQEAgLTIwMSw3ICsyMDMsNyBAQAogfQogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQlNQKQotaW50IGRvX3dkIChjbWRfdGJsX3QgKmNtZHRwLCBiZF90ICpiZCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCitpbnQgZG9fd2QgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXN3aXRjaCAoYXJnYykgewogCWNhc2UgMToKQEAgLTIzMSw1ICsyMzMsMTMgQEAKIAlyZXR1cm4gMTsKIH0KIAorY21kX3RibF90IFVfQk9PVF9DTUQod2QpID0gTUtfQ01EX0VOVFJZKAorCSJ3ZCIsCTIsCTEsCWRvX3dkLAorCSJ3ZCAgICAgIC0gY2hlY2sgYW5kIHNldCB3YXRjaGRvZ1xuIiwKKwkib24gICAtIHN3aXRjaCB3YXRjaERvZyBvblxuIgorCSJ3ZCBvZmYgIC0gc3dpdGNoIHdhdGNoZG9nIG9mZlxuIgorCSJ3ZCAgICAgIC0gcHJpbnQgY3VycmVudCBzdGF0dXNcbiIKKyk7CisKICNlbmRpZgkvKiBDRkdfQ01EX0JTUCAqLwogI2VuZGlmCS8qIENPTkZJR19XQVRDSERPRyAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvcGNpcHBjMi91LWJvb3QubGRzIGIvYm9hcmQvcGNpcHBjMi91LWJvb3QubGRzCmluZGV4IDhmNDgwNjguLjZlYWQ3ZjIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BjaXBwYzIvdS1ib290LmxkcworKysgYi9ib2FyZC9wY2lwcGMyL3UtYm9vdC5sZHMKQEAgLTEwOSw2ICsxMDksMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL3BtODI2L01ha2VmaWxlIGIvYm9hcmQvcG04MjYvTWFrZWZpbGUKaW5kZXggMzViODQyOC4uN2EyMDE0ZCAxMDA2NDQKLS0tIGEvYm9hcmQvcG04MjYvTWFrZWZpbGUKKysrIGIvYm9hcmQvcG04MjYvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3BtODI2L3UtYm9vdC5sZHMgYi9ib2FyZC9wbTgyNi91LWJvb3QubGRzCmluZGV4IDAxM2E4ZDEuLmNlNmM0NTQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BtODI2L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvcG04MjYvdS1ib290LmxkcwpAQCAtOTQsNiArOTQsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL3BuNjIvTWFrZWZpbGUgYi9ib2FyZC9wbjYyL01ha2VmaWxlCmluZGV4IDc3ZTIxNmIuLmU4NWQ0ZmQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BuNjIvTWFrZWZpbGUKKysrIGIvYm9hcmQvcG42Mi9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUyA9ICAkKEJPQVJEKS5vIGNtZF9wbjYyLm8gbWlzYy5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9wbjYyL2NtZF9wbjYyLmMgYi9ib2FyZC9wbjYyL2NtZF9wbjYyLmMKaW5kZXggOTI4ZjZjMC4uNDIxODI5YSAxMDA2NDQKLS0tIGEvYm9hcmQvcG42Mi9jbWRfcG42Mi5jCisrKyBiL2JvYXJkL3BuNjIvY21kX3BuNjIuYwpAQCAtMjYsOSArMjYsNyBAQAogI2luY2x1ZGUgPG5ldC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPHBjaS5oPgotI2luY2x1ZGUgPGNtZF9hdXRvc2NyaXB0Lmg+Ci0jaW5jbHVkZSA8Y21kX2JzcC5oPgotCisjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgInBuNjIuaCIKIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JTUCkKQEAgLTUzLDYgKzUxLDEyIEBACiAgICAgc2V0X2xlZCAobnVtYmVyLCBmdW5jdGlvbik7CiAgICAgcmV0dXJuIDA7CiB9CitjbWRfdGJsX3QgVV9CT09UX0NNRChsZWQpID0gTUtfQ01EX0VOVFJZKAorCSJsZWQiICAgICwJMywJMSwJZG9fbGVkLAorCSJsZWQgICAgIC0gc2V0IExFRCAwLi4xMSBvbiB0aGUgUE42MiBib2FyZFxuIiwKKwkiaSBmdW5cbiIKKwkiICAgIC0gc2V0ICdpJ3RoIExFRCB0byBmdW5jdGlvbiAnZnVuJ1xuIgorKTsKIAogLyoKICAqIENvbW1hbmQgbG9hZHBjaTogbG9hZHMgYSBpbWFnZSBvdmVyIFBDSS4KQEAgLTE2MSw0ICsxNjUsMTEgQEAKICAgICByZXR1cm4gcmNvZGU7CiB9CiAKK2NtZF90YmxfdCBVX0JPT1RfQ01EKGxvYWRwY2kpID0gTUtfQ01EX0VOVFJZKAorCSJsb2FkcGNpIiwJMiwJMSwJZG9fbG9hZHBjaSwKKwkibG9hZHBjaSAtIGxvYWQgYmluYXJ5IGZpbGUgb3ZlciBQQ0lcbiIsCisJIlthZGRyXVxuIgorCSIgICAgLSBsb2FkIGJpbmFyeSBmaWxlIG92ZXIgUENJIHRvIGFkZHJlc3MgJ2FkZHInXG4iCispOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL3BuNjIvbWlzYy5jIGIvYm9hcmQvcG42Mi9taXNjLmMKaW5kZXggNGY3MTk1MC4uZGNiMmRiNSAxMDA2NDQKLS0tIGEvYm9hcmQvcG42Mi9taXNjLmMKKysrIGIvYm9hcmQvcG42Mi9taXNjLmMKQEAgLTE1NCw4ICsxNTQsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW03OWM5NXhfaWRzIFtdID0gewotICAgICAgICB7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRSB9LAotICAgICAgICB7IH0KKwl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRSB9LAorCXsgfQogfTsKIAogCmRpZmYgLS1naXQgYS9ib2FyZC9wbjYyL3UtYm9vdC5sZHMgYi9ib2FyZC9wbjYyL3UtYm9vdC5sZHMKaW5kZXggNWJhOTliMS4uOTg1ODRkYyAxMDA2NDQKLS0tIGEvYm9hcmQvcG42Mi91LWJvb3QubGRzCisrKyBiL2JvYXJkL3BuNjIvdS1ib290LmxkcwpAQCAtMTAzLDYgKzEwMywxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTI2LDQgKzEzMSwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3BwbWM4MjYwL01ha2VmaWxlIGIvYm9hcmQvcHBtYzgyNjAvTWFrZWZpbGUKaW5kZXggNjMwODNhNC4uNDIwZWU5YyAxMDA2NDQKLS0tIGEvYm9hcmQvcHBtYzgyNjAvTWFrZWZpbGUKKysrIGIvYm9hcmQvcHBtYzgyNjAvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJOj0gcHBtYzgyNjAubyBzdHJhdGFmbGFzaC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL3BwbWM4MjYwL3BwbWM4MjYwLmMgYi9ib2FyZC9wcG1jODI2MC9wcG1jODI2MC5jCmluZGV4IGFiMzI2MjIuLmU5MmFkOGYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3BwbWM4MjYwL3BwbWM4MjYwLmMKKysrIGIvYm9hcmQvcHBtYzgyNjAvcHBtYzgyNjAuYwpAQCAtNDIsNyArNDIsNyBAQAogCiAgICAgLyogUG9ydCBBIGNvbmZpZ3VyYXRpb24gKi8KICAgICB7CS8qCSAgICAgIGNvbmYgcHBhciBwc29yIHBkaXIgcG9kciBwZGF0ICovCi0gICAgICAgIC8qIFBBMzEgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSAqQVRNVFhFTiAqLworCS8qIFBBMzEgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSAqQVRNVFhFTiAqLwogCS8qIFBBMzAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1UQ0EgICAqLwogCS8qIFBBMjkgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBBVE1UU09DICAqLwogCS8qIFBBMjggKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSAqQVRNUlhFTiAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvcHBtYzgyNjAvc3RyYXRhZmxhc2guYyBiL2JvYXJkL3BwbWM4MjYwL3N0cmF0YWZsYXNoLmMKaW5kZXggNmQ1YTg1My4uZjlhYmZhYyAxMDA2NDQKLS0tIGEvYm9hcmQvcHBtYzgyNjAvc3RyYXRhZmxhc2guYworKysgYi9ib2FyZC9wcG1jODI2MC9zdHJhdGFmbGFzaC5jCkBAIC05MCw4ICs5MCw2IEBACiAjZGVmaW5lIEZMQVNIX01BTl9DRkkJCQkweDAxMDAwMDAwCiAKIAotCi0KIHR5cGVkZWYgdW5pb24gewogCXVuc2lnbmVkIGNoYXIgYzsKIAl1bnNpZ25lZCBzaG9ydCB3OwpAQCAtMTE0LDcgKzExMiw2IEBACiAgKi8KIAogCi0KIHN0YXRpYyB2b2lkIGZsYXNoX2FkZF9ieXRlKGZsYXNoX2luZm9fdCAqaW5mbywgY2Zpd29yZF90ICogY3dvcmQsIHVjaGFyIGMpOwogc3RhdGljIHZvaWQgZmxhc2hfbWFrZV9jbWQoZmxhc2hfaW5mb190ICogaW5mbywgdWNoYXIgY21kLCB2b2lkICogY21kYnVmKTsKIHN0YXRpYyB2b2lkIGZsYXNoX3dyaXRlX2NtZChmbGFzaF9pbmZvX3QgKiBpbmZvLCBpbnQgc2VjdCwgdWNoYXIgb2Zmc2V0LCB1Y2hhciBjbWQpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvcHBtYzgyNjAvdS1ib290LmxkcyBiL2JvYXJkL3BwbWM4MjYwL3UtYm9vdC5sZHMKaW5kZXggMmVhYzM5Ny4uNDkyMDMzZSAxMDA2NDQKLS0tIGEvYm9hcmQvcHBtYzgyNjAvdS1ib290LmxkcworKysgYi9ib2FyZC9wcG1jODI2MC91LWJvb3QubGRzCkBAIC05NCw2ICs5NCwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTE2LDQgKzEyMSwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3B1cnBsZS9NYWtlZmlsZSBiL2JvYXJkL3B1cnBsZS9NYWtlZmlsZQppbmRleCBkMWIwMDU2Li5hOTQ2M2I2IDEwMDY0NAotLS0gYS9ib2FyZC9wdXJwbGUvTWFrZWZpbGUKKysrIGIvYm9hcmQvcHVycGxlL01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAorCiAjCiAjIChDKSBDb3B5cmlnaHQgMjAwMwogIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgpAQCAtMjksNyArMzAsNyBAQAogU09CSlMJPSBtZW1zZXR1cC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9wdXJwbGUvZmxhc2guYyBiL2JvYXJkL3B1cnBsZS9mbGFzaC5jCmluZGV4IDM0ZjFiOTEuLjc1MjI1ODAgMTAwNjQ0Ci0tLSBhL2JvYXJkL3B1cnBsZS9mbGFzaC5jCisrKyBiL2JvYXJkL3B1cnBsZS9mbGFzaC5jCkBAIC00Miw3ICs0Miw3IEBACiAKICNkZWZpbmUgRkxBU0gyOV9SRUdfRklSU1RfQ1lDTEUJCUZMQVNIMjlfUkVHX0FEUlMgKDB4MTU1NSkKICNkZWZpbmUgRkxBU0gyOV9SRUdfU0VDT05EX0NZQ0xFCUZMQVNIMjlfUkVHX0FEUlMgKDB4MmFhYSkKLSNkZWZpbmUgRkxBU0gyOV9SRUdfVEhJUkRfQ1lDTEUJCUZMQVNIMjlfUkVHX0FEUlMgKDB4MzU1NSkJCisjZGVmaW5lIEZMQVNIMjlfUkVHX1RISVJEX0NZQ0xFCQlGTEFTSDI5X1JFR19BRFJTICgweDM1NTUpCiAjZGVmaW5lCUZMQVNIMjlfUkVHX0ZPVVJUSF9DWUNMRQlGTEFTSDI5X1JFR19BRFJTICgweDQ1NTUpCiAjZGVmaW5lCUZMQVNIMjlfUkVHX0ZJRlRIX0NZQ0xFCQlGTEFTSDI5X1JFR19BRFJTICgweDVhYWEpCiAjZGVmaW5lCUZMQVNIMjlfUkVHX1NJWFRIX0NZQ0xFCQlGTEFTSDI5X1JFR19BRFJTICgweDY1NTUpCkBAIC02MCw3ICs2MCw3IEBACiAjZGVmaW5lCUZMQVNIMjlfQ01EX0NISVBfRVJBU0UJCTB4ODA4MDgwODAKICNkZWZpbmUJRkxBU0gyOV9DTURfUkVBRF9SRVNFVAkJMHhmMGYwZjBmMAogI2RlZmluZQlGTEFTSDI5X0NNRF9BVVRPU0VMRUNUCQkweDkwOTA5MDkwCi0jZGVmaW5lIEZMQVNIMjlfQ01EX1JFQUQJCTB4NzA3MDcwNzAJCisjZGVmaW5lIEZMQVNIMjlfQ01EX1JFQUQJCTB4NzA3MDcwNzAKIAogI2RlZmluZSBJTl9SQU1fQ01EX1JFQUQJCTB4MQogI2RlZmluZSBJTl9SQU1fQ01EX1dSSVRFCTB4MgpAQCAtODgsNDMgKzg4LDQzIEBACiAqIGNhbiBiZSByZWxvY2F0ZWQgdG8gc2NyYXRjaCByYW0KICovCiBzdGF0aWMgdm9pZCBmbGFzaF9yZWFkX2NtZChpbnQgY21kLCBGUFdWICogcEZBLCBjaGFyICogc3RyaW5nLCBpbnQgc3RyTGVuKQotewkJCQkJCit7CiAJaW50IGksajsKLQlGUFcgdGVtcCx0ZW1wMTsJCisJRlBXIHRlbXAsdGVtcDE7CiAJRlBXViAqc3RyOwogCiAJc3RyID0gKEZQV1YgKilzdHJpbmc7CiAKIAlqPSAgc3RyTGVuLzQ7Ci0JCisKIAlpZihjbWQgPT0gRkxBU0gyOV9DTURfQVVUT1NFTEVDVCkKIAkgICB7Ci0gICAgICAgICAgICAqKEZMQVNIMjlfUkVHX0ZJUlNUX0NZQ0xFKSAgPSBGTEFTSDI5X0NNRF9GSVJTVDsKLSAgICAgICAgICAgICooRkxBU0gyOV9SRUdfU0VDT05EX0NZQ0xFKSA9IEZMQVNIMjlfQ01EX1NFQ09ORDsKLSAgICAgICAgICAgICooRkxBU0gyOV9SRUdfVEhJUkRfQ1lDTEUpICA9IEZMQVNIMjlfQ01EX0FVVE9TRUxFQ1Q7Ci0gICAgICAgICAgIH0KKwkgICAgKihGTEFTSDI5X1JFR19GSVJTVF9DWUNMRSkgID0gRkxBU0gyOV9DTURfRklSU1Q7CisJICAgICooRkxBU0gyOV9SRUdfU0VDT05EX0NZQ0xFKSA9IEZMQVNIMjlfQ01EX1NFQ09ORDsKKwkgICAgKihGTEFTSDI5X1JFR19USElSRF9DWUNMRSkgID0gRkxBU0gyOV9DTURfQVVUT1NFTEVDVDsKKwkgICB9CiAKLSAgICAgICAgaWYoY21kID09IEZMQVNIMjlfQ01EX1JFQUQpCi0gICAgICAgICAgIHsgCi0JICAgIGkgPSAwOwkJCi0JICAgIHdoaWxlKGk8aikJCi0gICAgICAgICAgICB7CisJaWYoY21kID09IEZMQVNIMjlfQ01EX1JFQUQpCisJICAgeworCSAgICBpID0gMDsKKwkgICAgd2hpbGUoaTxqKQorCSAgICB7CiAJCXRlbXAgPSAqcEZBKys7CiAJCXRlbXAxID0gKihpbnQgKikweGEwMDAwMDAwOwotICAgICAgICAgICAgICAgICooaW50ICopMHhiZjAwODFmOCA9IHRlbXAxICsgdGVtcDsKKwkJKihpbnQgKikweGJmMDA4MWY4ID0gdGVtcDEgKyB0ZW1wOwogCQkqc3RyKysgPSB0ZW1wOwogCQlpKys7Ci0JICAgIH0gIAkJCi0gICAgICAgICAgIH0KKwkgICAgfQorCSAgIH0KIAotICAgICAgICAgaWYoY21kID09IEZMQVNIMjlfQ01EX1JFQURfUkVTRVQpIAotICAgICAgICAgewotICAgICAgICAgICAgKihGTEFTSDI5X1JFR19GSVJTVF9DWUNMRSkgID0gRkxBU0gyOV9DTURfRklSU1Q7Ci0gICAgICAgICAgICAqKEZMQVNIMjlfUkVHX1NFQ09ORF9DWUNMRSkgPSBGTEFTSDI5X0NNRF9TRUNPTkQ7Ci0gICAgICAgICAgICAqKEZMQVNIMjlfUkVHX1RISVJEX0NZQ0xFKSAgPSBGTEFTSDI5X0NNRF9SRUFEX1JFU0VUOwotICAgICAgICAgfSAJCQkgCQotCSAgICAJCi0JKihpbnQgKikweGJmMDA4MWY4ID0gKihpbnQgKikweGEwMDAwMDAwOwkvKiBkdW1teSByZWFkIHN3aXRjaCBiYWNrIHRvIHNkcmFtIGludGVyZmFjZSAqLwkKKwkgaWYoY21kID09IEZMQVNIMjlfQ01EX1JFQURfUkVTRVQpCisJIHsKKwkgICAgKihGTEFTSDI5X1JFR19GSVJTVF9DWUNMRSkgID0gRkxBU0gyOV9DTURfRklSU1Q7CisJICAgICooRkxBU0gyOV9SRUdfU0VDT05EX0NZQ0xFKSA9IEZMQVNIMjlfQ01EX1NFQ09ORDsKKwkgICAgKihGTEFTSDI5X1JFR19USElSRF9DWUNMRSkgID0gRkxBU0gyOV9DTURfUkVBRF9SRVNFVDsKKwkgfQorCisJKihpbnQgKikweGJmMDA4MWY4ID0gKihpbnQgKikweGEwMDAwMDAwOwkvKiBkdW1teSByZWFkIHN3aXRjaCBiYWNrIHRvIHNkcmFtIGludGVyZmFjZSAqLwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzQsMzggKzEzNCwzOCBAQAogKiBjYW4gYmUgcmVsb2NhdGVkIHRvIHNjcmF0Y2ggcmFtCiAqLwogc3RhdGljIHZvaWQgZmxhc2hfd3JpdGVfY21kKGludCBjbWQsIEZQV1YgKiBwRkEsIEZQVyB2YWx1ZSkKLXsJCQkJCQkKLSAgICAgICAgKihGTEFTSDI5X1JFR19GSVJTVF9DWUNMRSkgID0gRkxBU0gyOV9DTURfRklSU1Q7Ci0gICAgICAgICooRkxBU0gyOV9SRUdfU0VDT05EX0NZQ0xFKSA9IEZMQVNIMjlfQ01EX1NFQ09ORDsKK3sKKwkqKEZMQVNIMjlfUkVHX0ZJUlNUX0NZQ0xFKSAgPSBGTEFTSDI5X0NNRF9GSVJTVDsKKwkqKEZMQVNIMjlfUkVHX1NFQ09ORF9DWUNMRSkgPSBGTEFTSDI5X0NNRF9TRUNPTkQ7CiAKIAlpZiAoY21kID09IEZMQVNIMjlfQ01EX1NFQ1RPUikKIAkgICB7Ci0gICAgICAgICAgICAqKEZMQVNIMjlfUkVHX1RISVJEX0NZQ0xFKSAgPSBGTEFTSDI5X0NNRF9DSElQX0VSQVNFOwotICAgICAgICAgICAgKihGTEFTSDI5X1JFR19GT1VSVEhfQ1lDTEUpID0gRkxBU0gyOV9DTURfRk9VUlRIOwotICAgICAgICAgICAgKihGTEFTSDI5X1JFR19GSUZUSF9DWUNMRSkgID0gRkxBU0gyOV9DTURfRklGVEg7Ci0gICAgICAgICAgICAqcEZBCQkgICAgICAgID0gRkxBU0gyOV9DTURfU0VDVE9SOwotICAgICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNtZCA9PSBGTEFTSDI5X0NNRF9TSVhUSCkKLSAgICAgICAgICAgeyAKLSAgICAgICAgICAgICooRkxBU0gyOV9SRUdfVEhJUkRfQ1lDTEUpICA9IEZMQVNIMjlfQ01EX0NISVBfRVJBU0U7Ci0gICAgICAgICAgICAqKEZMQVNIMjlfUkVHX0ZPVVJUSF9DWUNMRSkgPSBGTEFTSDI5X0NNRF9GT1VSVEg7Ci0gICAgICAgICAgICAqKEZMQVNIMjlfUkVHX0ZJRlRIX0NZQ0xFKSAgPSBGTEFTSDI5X0NNRF9GSUZUSDsKLSAgICAgICAgICAgICooRkxBU0gyOV9SRUdfU0lYVEhfQ1lDTEUpICA9IEZMQVNIMjlfQ01EX1NJWFRIOworCSAgICAqKEZMQVNIMjlfUkVHX1RISVJEX0NZQ0xFKSAgPSBGTEFTSDI5X0NNRF9DSElQX0VSQVNFOworCSAgICAqKEZMQVNIMjlfUkVHX0ZPVVJUSF9DWUNMRSkgPSBGTEFTSDI5X0NNRF9GT1VSVEg7CisJICAgICooRkxBU0gyOV9SRUdfRklGVEhfQ1lDTEUpICA9IEZMQVNIMjlfQ01EX0ZJRlRIOworCSAgICAqcEZBCQkgICAgICAgID0gRkxBU0gyOV9DTURfU0VDVE9SOwogCSAgIH0KIAotICAgICAgICBpZiAoY21kID09IEZMQVNIMjlfQ01EX1BST0dSQU0pCi0gICAgICAgICAgIHsKLSAgICAgICAgICAgICooRkxBU0gyOV9SRUdfVEhJUkRfQ1lDTEUpICA9IEZMQVNIMjlfQ01EX1BST0dSQU07Ci0JICAgICpwRkEgPSB2YWx1ZTsKLSAgICAgICAgICAgfQorCWlmIChjbWQgPT0gRkxBU0gyOV9DTURfU0lYVEgpCisJICAgeworCSAgICAqKEZMQVNIMjlfUkVHX1RISVJEX0NZQ0xFKSAgPSBGTEFTSDI5X0NNRF9DSElQX0VSQVNFOworCSAgICAqKEZMQVNIMjlfUkVHX0ZPVVJUSF9DWUNMRSkgPSBGTEFTSDI5X0NNRF9GT1VSVEg7CisJICAgICooRkxBU0gyOV9SRUdfRklGVEhfQ1lDTEUpICA9IEZMQVNIMjlfQ01EX0ZJRlRIOworCSAgICAqKEZMQVNIMjlfUkVHX1NJWFRIX0NZQ0xFKSAgPSBGTEFTSDI5X0NNRF9TSVhUSDsKKwkgICB9CiAKLSAgICAgICAgaWYgKGNtZCA9PSBGTEFTSDI5X0NNRF9SRUFEX1JFU0VUKSAgICAKLSAgICAgICAgICAgewotICAgICAgICAgICAgKihGTEFTSDI5X1JFR19USElSRF9DWUNMRSkgID0gRkxBU0gyOV9DTURfUkVBRF9SRVNFVDsKLSAgICAgICAgICAgfSAJCQkgCQotCSAgICAJCi0JKihpbnQgKikweGJmMDA4MWY4ID0gKihpbnQgKikweGEwMDAwMDAwOwkvKiBkdW1teSByZWFkIHN3aXRjaCBiYWNrIHRvIHNkcmFtIGludGVyZmFjZSAqLwkKKwlpZiAoY21kID09IEZMQVNIMjlfQ01EX1BST0dSQU0pCisJICAgeworCSAgICAqKEZMQVNIMjlfUkVHX1RISVJEX0NZQ0xFKSAgPSBGTEFTSDI5X0NNRF9QUk9HUkFNOworCSAgICAqcEZBID0gdmFsdWU7CisJICAgfQorCisJaWYgKGNtZCA9PSBGTEFTSDI5X0NNRF9SRUFEX1JFU0VUKQorCSAgIHsKKwkgICAgKihGTEFTSDI5X1JFR19USElSRF9DWUNMRSkgID0gRkxBU0gyOV9DTURfUkVBRF9SRVNFVDsKKwkgICB9CisKKwkqKGludCAqKTB4YmYwMDgxZjggPSAqKGludCAqKTB4YTAwMDAwMDA7CS8qIGR1bW15IHJlYWQgc3dpdGNoIGJhY2sgdG8gc2RyYW0gaW50ZXJmYWNlICovCiB9CiAKIHN0YXRpYyB2b2lkIGxvYWRfY21kKHVsb25nIGNtZCkKQEAgLTE3NCw5ICsxNzQsOSBAQAogCXVsb25nICpkc3Q7CiAJRlVOQ1BUUl9DUCBhYnNFbnRyeTsKIAl1bG9uZyBmdW5jOwotCSAKKwogCWlmIChpbl9yYW1fY21kICYgY21kKSByZXR1cm47Ci0JCisKIAlpZiAoY21kID09IElOX1JBTV9DTURfUkVBRCkKIAl7CiAJCWZ1bmMgPSAodWxvbmcpZmxhc2hfcmVhZF9jbWQ7CkBAIC0xODYsMTIgKzE4NiwxMiBAQAogCQlmdW5jID0gKHVsb25nKWZsYXNoX3dyaXRlX2NtZDsKIAl9CiAKLSAgICAJc3JjID0gKHVsb25nICopKGZ1bmMgJiAweGZmZmZmZmY4KTsKLSAgICAJZHN0ID0gKHVsb25nICopMHhiZjAwODAwMDsKLSAgICAJYWJzRW50cnkgPSAoRlVOQ1BUUl9DUCkoMHhiZjAwODFkMCk7Ci0gICAgCWFic0VudHJ5KHNyYyxkc3QsMHgzOCk7CisJc3JjID0gKHVsb25nICopKGZ1bmMgJiAweGZmZmZmZmY4KTsKKwlkc3QgPSAodWxvbmcgKikweGJmMDA4MDAwOworCWFic0VudHJ5ID0gKEZVTkNQVFJfQ1ApKDB4YmYwMDgxZDApOworCWFic0VudHJ5KHNyYyxkc3QsMHgzOCk7CiAKLSAgICAgICAgaW5fcmFtX2NtZCA9IGNtZDsKKwlpbl9yYW1fY21kID0gY21kOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDMsMTQgKzIwMywxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiAJaW50IGk7Ci0JIAotICAgICAgICBsb2FkX2NtZChJTl9SQU1fQ01EX1JFQUQpOworCisJbG9hZF9jbWQoSU5fUkFNX0NNRF9SRUFEKTsKIAogCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KIAlmb3IgKGk9MDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7ICsraSkgewogCQl1bG9uZyBmbGFzaGJhc2UgPSBQSFlTX0ZMQVNIXzE7CiAJCXVsb25nICogYnVzY29uID0gKHVsb25nICopIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wOwotCQkKKwogCQkvKiBEaXNhYmxlIHdyaXRlIHByb3RlY3Rpb24gKi8KIAkJKmJ1c2NvbiAmPSB+SU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfV1JESVM7CiAKQEAgLTIxOCwxNCArMjE4LDE0IEBACiAJCW1lbXNldCgmZmxhc2hfaW5mb1tpXSwgMCwgc2l6ZW9mKGZsYXNoX2luZm9fdCkpOwogI2VuZGlmCiAKLQkJZmxhc2hfaW5mb1tpXS5zaXplID0gCisJCWZsYXNoX2luZm9baV0uc2l6ZSA9CiAJCQlmbGFzaF9nZXRfc2l6ZSgoRlBXICopZmxhc2hiYXNlLCAmZmxhc2hfaW5mb1tpXSk7CiAKIAkJaWYgKGZsYXNoX2luZm9baV0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewogCQkJcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rICVkIC0gU2l6ZSA9IDB4JTA4bHhcbiIsCiAJCQlpLCBmbGFzaF9pbmZvW2ldLnNpemUpOwogCQl9Ci0JCQorCiAJCXNpemUgKz0gZmxhc2hfaW5mb1tpXS5zaXplOwogCX0KIApAQCAtMjgxLDEzICsyODEsMTMgQEAKIHsKIAlpbnQgaTsKIAlmbGFzaF9pbmZvX3QgKiBpbmZvOwotCQorCiAJZm9yIChpID0gMDsgaSA8IENGR19NQVhfRkxBU0hfQkFOS1M7IGkgKyspIHsKIAkJaW5mbyA9ICYgZmxhc2hfaW5mb1tpXTsKIAkJaWYgKGluZm8tPnN0YXJ0WzBdIDw9IGJhc2UgJiYgYmFzZSA8IGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSkKIAkJCWJyZWFrOwogCX0KLQkKKwogCXJldHVybiBpID09IENGR19NQVhfRkxBU0hfQkFOS1MgPyAwIDogaW5mbzsKIH0KIApAQCAtMzM0LDMyICszMzQsMzIgQEAKIAljYXNlIEZMQVNIX0FNMTYwQjoKIAkJZm10ID0gIjI5TFYxNjBCJXMgKDE2IE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGODAwQzNCOgotICAgICAgICBjYXNlIEZMQVNIXzI4RjgwMEMzVDoKKwljYXNlIEZMQVNIXzI4RjgwMEMzQjoKKwljYXNlIEZMQVNIXzI4RjgwMEMzVDoKIAkJZm10ID0gIjI4RjgwMEMzJXMgKDggTWJpdCwgJXMpXG4iOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0lOVEVMODAwQjoKIAljYXNlIEZMQVNIX0lOVEVMODAwVDoKIAkJZm10ID0gIjI4RjgwMEIzJXMgKDggTWJpdCwgJXMpXG4iOwogCQlicmVhazsKLSAgICAgICAgY2FzZSBGTEFTSF8yOEYxNjBDM0I6Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGMTYwQzNUOgorCWNhc2UgRkxBU0hfMjhGMTYwQzNCOgorCWNhc2UgRkxBU0hfMjhGMTYwQzNUOgogCQlmbXQgPSAiMjhGMTYwQzMlcyAoMTYgTWJpdCwgJXMpXG4iOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0lOVEVMMTYwQjoKIAljYXNlIEZMQVNIX0lOVEVMMTYwVDoKIAkJZm10ID0gIjI4RjE2MEIzJXMgKDE2IE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGMzIwQzNCOgotICAgICAgICBjYXNlIEZMQVNIXzI4RjMyMEMzVDoKKwljYXNlIEZMQVNIXzI4RjMyMEMzQjoKKwljYXNlIEZMQVNIXzI4RjMyMEMzVDoKIAkJZm10ID0gIjI4RjMyMEMzJXMgKDMyIE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9JTlRFTDMyMEI6CiAJY2FzZSBGTEFTSF9JTlRFTDMyMFQ6CiAJCWZtdCA9ICIyOEYzMjBCMyVzICgzMiBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwotICAgICAgICBjYXNlIEZMQVNIXzI4RjY0MEMzQjoKLSAgICAgICAgY2FzZSBGTEFTSF8yOEY2NDBDM1Q6CisJY2FzZSBGTEFTSF8yOEY2NDBDM0I6CisJY2FzZSBGTEFTSF8yOEY2NDBDM1Q6CiAJCWZtdCA9ICIyOEY2NDBDMyVzICg2NCBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfSU5URUw2NDBCOgpAQCAtNDAxLDE2ICs0MDEsMTYgQEAKIHVsb25nIGZsYXNoX2dldF9zaXplIChGUFdWICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pCiB7CiAJRlVOQ1BUUl9SRCBhYnNFbnRyeTsKLQlGUFcgcmV0VmFsdWU7CQorCUZQVyByZXRWYWx1ZTsKIAlpbnQgZmxhZzsKIAotICAgICAgICBsb2FkX2NtZChJTl9SQU1fQ01EX1JFQUQpOworCWxvYWRfY21kKElOX1JBTV9DTURfUkVBRCk7CiAJYWJzRW50cnkgPSAoRlVOQ1BUUl9SRClGTEFTSF9SRUFEX0NNRDsKIAogCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAlhYnNFbnRyeShGTEFTSDI5X0NNRF9BVVRPU0VMRUNULDAsMCwwKTsKIAlpZiAoZmxhZykgZW5hYmxlX2ludGVycnVwdHMoKTsKLQkKKwogCXVkZWxheSgxMDApOwogCiAJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwpAQCAtNDUxLDcgKzQ1MSw3IEBACiAJaW50IHJjb2RlID0gMDsKIAlGVU5DUFRSX1dSIGFic0VudHJ5OwogCi0gICAgICAgIGxvYWRfY21kKElOX1JBTV9DTURfV1JJVEUpOworCWxvYWRfY21kKElOX1JBTV9DTURfV1JJVEUpOwogCWFic0VudHJ5ID0gKEZVTkNQVFJfV1IpRkxBU0hfV1JJVEVfQ01EOwogCiAJaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7CkBAIC01NDMsMTUgKzU0MywxNSBAQAogCSBsZWZ0ID4gMCAmJiByZXMgPT0gMDsKIAkgYWRkciArPSBzaXplb2YoZGF0YSksIGxlZnQgLT0gc2l6ZW9mKGRhdGEpIC0gYnl0ZXMpIHsKIAotICAgICAgICBieXRlcyA9IGFkZHIgJiAoc2l6ZW9mKGRhdGEpIC0gMSk7Ci0gICAgICAgIGFkZHIgJj0gfihzaXplb2YoZGF0YSkgLSAxKTsKKwlieXRlcyA9IGFkZHIgJiAoc2l6ZW9mKGRhdGEpIC0gMSk7CisJYWRkciAmPSB+KHNpemVvZihkYXRhKSAtIDEpOwogCiAJLyogY29tYmluZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRhdGEgc28gY2FuIHByb2dyYW0KIAkgKiBhbiBlbnRpcmUgd29yZCBvZiAxNiBvciAzMiBiaXRzCiAJICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGF0YSk7IGkrKykgewotICAgICAgICAgICAgZGF0YSA8PD0gODsKLSAgICAgICAgICAgIGlmIChpIDwgYnl0ZXMgfHwgaSAtIGJ5dGVzID49IGxlZnQgKQorCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGF0YSk7IGkrKykgeworCSAgICBkYXRhIDw8PSA4OworCSAgICBpZiAoaSA8IGJ5dGVzIHx8IGkgLSBieXRlcyA+PSBsZWZ0ICkKIAkJZGF0YSArPSAqKCh1Y2hhciAqKWFkZHIgKyBpKTsKIAkgICAgZWxzZQogCQlkYXRhICs9ICpzcmMrKzsKZGlmZiAtLWdpdCBhL2JvYXJkL3B1cnBsZS9tZW1zZXR1cC5TIGIvYm9hcmQvcHVycGxlL21lbXNldHVwLlMKaW5kZXggOWM5ODNjOS4uZDUzMmNlYiAxMDA2NDQKLS0tIGEvYm9hcmQvcHVycGxlL21lbXNldHVwLlMKKysrIGIvYm9hcmQvcHVycGxlL21lbXNldHVwLlMKQEAgLTM1LDQgKzM1LDMgQEAKIAlzdwl0MSwgMCh0MCkKIAlqCXJhCiAJbm9wCi0KZGlmZiAtLWdpdCBhL2JvYXJkL3B1cnBsZS9wdXJwbGUuYyBiL2JvYXJkL3B1cnBsZS9wdXJwbGUuYwppbmRleCBiMWViNzhmLi40YzNlNWI0IDEwMDY0NAotLS0gYS9ib2FyZC9wdXJwbGUvcHVycGxlLmMKKysrIGIvYm9hcmQvcHVycGxlL3B1cnBsZS5jCkBAIC0zNSw3ICszNSw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIgkgICAgICAgICAJXAogCQkuc2V0IG5vcmVvcmRlcjsJCSAgICAgICAgXAogCQkuc2V0IG1pcHMzOwkJICAgICAgICBcCi0gICAgICAgICAgICAgICAgY2FjaGUgJTEsICglMCk7CSAgICAgICAgICAgICAgICBcCisJCWNhY2hlICUxLCAoJTApOwkgICAgICAgICAgICAgICAgXAogCQkuc2V0IG1pcHMwOwkJCVwKIAkJLnNldCByZW9yZGVyIgkJCVwKIAkJOgkJCQlcCkBAIC0xODIsNyArMTgyLDcgQEAKIAkJKih1bG9uZyAqKTB4YmYwMDgxZjggPSB0ZW1wMSArIHRlbXA7CiAJCSpkZXN0aW5hdGlvbisrID0gdGVtcDsKIAotCX0gCisJfQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjE0LDggKzIxNCw4IEBACiAJc3JjID0gKHVsb25nICopKFRFWFRfQkFTRSArIDB4NDI4KTsKIAlkc3QgPSAodWxvbmcgKikweGJmMDA4MWQwOwogCi0JYWJzRW50cnkgPSAoRlVOQ1BUUikoVEVYVF9CQVNFICsgMHg0MDApOyAgIAotCWFic0VudHJ5KHNyYyxkc3QsMHg2KTsgICAgIAkKKwlhYnNFbnRyeSA9IChGVU5DUFRSKShURVhUX0JBU0UgKyAweDQwMCk7CisJYWJzRW50cnkoc3JjLGRzdCwweDYpOwogCiAJc3JjID0gKHVsb25nICopKCh1bG9uZyljb3B5ZHdvcmRzICYgMHhmZmZmZmZmOCk7CiAJZHN0ID0gKHVsb25nICopMHhiZjAwODAwMDsKZGlmZiAtLWdpdCBhL2JvYXJkL3B1cnBsZS91LWJvb3QubGRzIGIvYm9hcmQvcHVycGxlL3UtYm9vdC5sZHMKaW5kZXggNzUwODg2NS4uMjcwZmJlOCAxMDA2NDQKLS0tIGEvYm9hcmQvcHVycGxlL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvcHVycGxlL3UtYm9vdC5sZHMKQEAgLTI5LDkgKzI5LDkgQEAKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7Ci0gICAgICAgIC4gPSAweDAwMDAwMDAwOworCS4gPSAweDAwMDAwMDAwOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKKwkuID0gQUxJR04oNCk7CiAJLnRleHQgICAgICAgOgogCXsKIAkgIGNwdS9taXBzL3N0YXJ0Lm8JCSgudGV4dCkKQEAgLTQ3LDExICs0NywxMSBAQAogCSAgKigudGV4dCkKIAl9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAucm9kYXRhICA6IHsgKigucm9kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgIDogeyAqKC5yb2RhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5kYXRhICA6IHsgKiguZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkuZGF0YSAgOiB7ICooLmRhdGEpIH0KIAogCS4gPSBBTElHTig0KTsKIAkuc2RhdGEgIDogeyAqKC5zZGF0YSkgfQpAQCAtNjQsMTEgKzY0LDE1IEBACiAKIAkuc2RhdGEgIDogeyAqKC5zZGF0YSkgfQogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCiAJdWJvb3RfZW5kX2RhdGEgPSAuOwogCW51bV9nb3RfZW50cmllcyA9IChfX2dvdF9lbmQgLSBfX2dvdF9zdGFydCkgPj4gMjsKIAotICAgICAgICAuID0gQUxJR04oNCk7CisJLiA9IEFMSUdOKDQpOwogCS5zYnNzICA6IHsgKiguc2JzcykgfQotICAgICAgICAuYnNzICA6IHsgKiguYnNzKSB9CisJLmJzcyAgOiB7ICooLmJzcykgfQogCXVib290X2VuZCA9IC47CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9yMzYwbXBpL01ha2VmaWxlIGIvYm9hcmQvcjM2MG1waS9NYWtlZmlsZQppbmRleCBlZjE3M2QwLi4xM2NlOWZjIDEwMDY0NAotLS0gYS9ib2FyZC9yMzYwbXBpL01ha2VmaWxlCisrKyBiL2JvYXJkL3IzNjBtcGkvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3IzNjBtcGkvcjM2MG1waS5jIGIvYm9hcmQvcjM2MG1waS9yMzYwbXBpLmMKaW5kZXggOTFlMzIzNC4uY2E1NTZiZSAxMDA2NDQKLS0tIGEvYm9hcmQvcjM2MG1waS9yMzYwbXBpLmMKKysrIGIvYm9hcmQvcjM2MG1waS9yMzYwbXBpLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgPGNvbW1wcm9jLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ic3AuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC01NCwzNyArNTMsMzcgQEAKIAogY29uc3QgdWludCBzZHJhbV90YWJsZVtdPQogewotICAgICAgICAvKiBzaW5nbGUgcmVhZC4gKG9mZnNldCAwIGluIHVwbSBSQU0pICovCi0gICAgICAgIDB4MWYwN2ZjMDQsIDB4ZWVhZWZjMDQsIDB4MTFhZGZjMDQsIDB4ZWZiYmJjMDAsCi0gICAgICAgIDB4MWZmNzdjNDcsCisJLyogc2luZ2xlIHJlYWQuIChvZmZzZXQgMCBpbiB1cG0gUkFNKSAqLworCTB4MWYwN2ZjMDQsIDB4ZWVhZWZjMDQsIDB4MTFhZGZjMDQsIDB4ZWZiYmJjMDAsCisJMHgxZmY3N2M0NywKIAotICAgICAgICAvKiBNUlMgaW5pdGlhbGl6YXRpb24gKG9mZnNldCA1KSAqLworCS8qIE1SUyBpbml0aWFsaXphdGlvbiAob2Zmc2V0IDUpICovCiAKLSAgICAgICAgMHgxZmY3N2MzNCwgMHhlZmVhYmMzNCwgMHgxZmI1N2MzNSwKKwkweDFmZjc3YzM0LCAweGVmZWFiYzM0LCAweDFmYjU3YzM1LAogCi0gICAgICAgIC8qIGJ1cnN0IHJlYWQuIChvZmZzZXQgOCBpbiB1cG0gUkFNKSAqLwotICAgICAgICAweDFmMDdmYzA0LCAweGVlYWVmYzA0LCAweDEwYWRmYzA0LCAweGYwYWZmYzAwLAotICAgICAgICAweGYwYWZmYzAwLCAweGYxYWZmYzAwLCAweGVmYmJiYzAwLCAweDFmZjc3YzQ3LAotICAgICAgICBfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLAotICAgICAgICBfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLAorCS8qIGJ1cnN0IHJlYWQuIChvZmZzZXQgOCBpbiB1cG0gUkFNKSAqLworCTB4MWYwN2ZjMDQsIDB4ZWVhZWZjMDQsIDB4MTBhZGZjMDQsIDB4ZjBhZmZjMDAsCisJMHhmMGFmZmMwMCwgMHhmMWFmZmMwMCwgMHhlZmJiYmMwMCwgMHgxZmY3N2M0NywKKwlfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLAorCV9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sCiAKLSAgICAgICAgLyogc2luZ2xlIHdyaXRlLiAob2Zmc2V0IDE4IGluIHVwbSBSQU0pICovCi0gICAgICAgIDB4MWYyN2ZjMDQsIDB4ZWVhZWJjMDAsIDB4MDFiOTNjMDQsIDB4MWZmNzdjNDcsCi0gICAgICAgIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sCisJLyogc2luZ2xlIHdyaXRlLiAob2Zmc2V0IDE4IGluIHVwbSBSQU0pICovCisJMHgxZjI3ZmMwNCwgMHhlZWFlYmMwMCwgMHgwMWI5M2MwNCwgMHgxZmY3N2M0NywKKwlfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLAogCi0gICAgICAgIC8qIGJ1cnN0IHdyaXRlLiAob2Zmc2V0IDIwIGluIHVwbSBSQU0pICovCi0gICAgICAgIDB4MWYwN2ZjMDQsIDB4ZWVhZWJjMDAsIDB4MTBhZDdjMDAsIDB4ZjBhZmZjMDAsCi0gICAgICAgIDB4ZjBhZmZjMDAsIDB4ZTFiYmJjMDQsIDB4MWZmNzdjNDcsIF9ub3RfdXNlZF8sCi0gICAgICAgIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sCi0gICAgICAgIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sCisJLyogYnVyc3Qgd3JpdGUuIChvZmZzZXQgMjAgaW4gdXBtIFJBTSkgKi8KKwkweDFmMDdmYzA0LCAweGVlYWViYzAwLCAweDEwYWQ3YzAwLCAweGYwYWZmYzAwLAorCTB4ZjBhZmZjMDAsIDB4ZTFiYmJjMDQsIDB4MWZmNzdjNDcsIF9ub3RfdXNlZF8sCisJX25vdF91c2VkXywgX25vdF91c2VkXywgX25vdF91c2VkXywgX25vdF91c2VkXywKKwlfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLAogCi0gICAgICAgIC8qIHJlZnJlc2guIChvZmZzZXQgMzAgaW4gdXBtIFJBTSkgKi8KLSAgICAgICAgMHgxZmY1ZmM4NCwgMHhmZmZmZmMwNCwgMHhmZmZmZmMwNCwgMHhmZmZmZmMwNCwKLSAgICAgICAgMHhmZmZmZmM4NCwgMHhmZmZmZmMwNywgX25vdF91c2VkXywgX25vdF91c2VkXywKLSAgICAgICAgX25vdF91c2VkXywgX25vdF91c2VkXywgX25vdF91c2VkXywgX25vdF91c2VkXywKKwkvKiByZWZyZXNoLiAob2Zmc2V0IDMwIGluIHVwbSBSQU0pICovCisJMHgxZmY1ZmM4NCwgMHhmZmZmZmMwNCwgMHhmZmZmZmMwNCwgMHhmZmZmZmMwNCwKKwkweGZmZmZmYzg0LCAweGZmZmZmYzA3LCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLAorCV9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sCiAKLSAgICAgICAgLyogZXhjZXB0aW9uLiAob2Zmc2V0IDNjIGluIHVwbSBSQU0pICovCi0gICAgICAgIDB4N2ZmZmZjMDcsIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8sIF9ub3RfdXNlZF8gfTsKKwkvKiBleGNlcHRpb24uIChvZmZzZXQgM2MgaW4gdXBtIFJBTSkgKi8KKwkweDdmZmZmYzA3LCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNDQzLDMgKzQ0Miw5IEBACiAJc2V0ZW52ICgia2V5YmQiLCBrZXliZF9lbnYpOwogCXJldHVybiAwOwogfQorCitjbWRfdGJsX3QgVV9CT09UX0NNRChrYmQpID0gTUtfQ01EX0VOVFJZKAorCSJrYmQiLAkxLAkxLAlkb19rYmQsCisJImtiZCAgICAgLSByZWFkIGtleWJvYXJkIHN0YXR1c1xuIiwKKwlOVUxMCispOwpkaWZmIC0tZ2l0IGEvYm9hcmQvcjM2MG1waS91LWJvb3QubGRzIGIvYm9hcmQvcjM2MG1waS91LWJvb3QubGRzCmluZGV4IDVlNGVlZGYuLmY2NGIzMmYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3IzNjBtcGkvdS1ib290LmxkcworKysgYi9ib2FyZC9yMzYwbXBpL3UtYm9vdC5sZHMKQEAgLTEwNyw2ICsxMDcsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzNCw0ICsxMzksMyBAQAogICAgIGNvbW1vbi9lbnZpcm9ubWVudC5vICgucHBjZW52KQogICB9CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3JiYzgyMy9NYWtlZmlsZSBiL2JvYXJkL3JiYzgyMy9NYWtlZmlsZQppbmRleCBmOTEyNDUxLi4wMTIxZGRjIDEwMDY0NAotLS0gYS9ib2FyZC9yYmM4MjMvTWFrZWZpbGUKKysrIGIvYm9hcmQvcmJjODIzL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGtiZC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9yYmM4MjMva2JkLmMgYi9ib2FyZC9yYmM4MjMva2JkLmMKaW5kZXggZjE0MjRlNC4uYzI3OTI5ZCAxMDA2NDQKLS0tIGEvYm9hcmQvcmJjODIzL2tiZC5jCisrKyBiL2JvYXJkL3JiYzgyMy9rYmQuYwpAQCAtNDgsNyArNDgsNyBAQAogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCi0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgY3BtOHh4X3QgKmNwID0gJihpbS0+aW1fY3BtKTsKIAogCS8qIFNldCB1cCB0aGUgYmF1ZCByYXRlIGdlbmVyYXRvci4KQEAgLTY1LDcgKzY1LDcgQEAKIAogaW50IHNtYzFfaW5pdCAodm9pZCkKIHsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBzbWNfdCAqc3A7CiAJdm9sYXRpbGUgc21jX3VhcnRfdCAqdXA7CiAJdm9sYXRpbGUgY2JkX3QgKnRiZGYsICpyYmRmOwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJdm9sYXRpbGUgY2JkX3QJCSp0YmRmOwogCXZvbGF0aWxlIGNoYXIJCSpidWY7CiAJdm9sYXRpbGUgc21jX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgY3BtOHh4X3QJKmNwbXAgPSAmKGltLT5pbV9jcG0pOwogCiAJdXAgPSAoc21jX3VhcnRfdCAqKSZjcG1wLT5jcF9kcGFyYW1bUFJPRkZfU01DXTsKQEAgLTIxMCw3ICsyMTAsNyBAQAogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyCSpidWY7CiAJdm9sYXRpbGUgc21jX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgY3BtOHh4X3QJKmNwbXAgPSAmKGltLT5pbV9jcG0pOwogCXVuc2lnbmVkIGNoYXIJCWM7CiAKQEAgLTIzNSw3ICsyMzUsNyBAQAogewogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSBzbWNfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBjcG04eHhfdAkqY3BtcCA9ICYoaW0tPmltX2NwbSk7CiAKIAl1cCA9IChzbWNfdWFydF90ICopJmNwbXAtPmNwX2RwYXJhbVtQUk9GRl9TTUNdOwpkaWZmIC0tZ2l0IGEvYm9hcmQvcmJjODIzL3JiYzgyMy5jIGIvYm9hcmQvcmJjODIzL3JiYzgyMy5jCmluZGV4IDI0ZWQ1MDEuLjliYjFjMWQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3JiYzgyMy9yYmM4MjMuYworKysgYi9ib2FyZC9yYmM4MjMvcmJjODIzLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgIHVwbWNvbmZpZyhVUE1BLCAodWludCAqKXNkcmFtX3RhYmxlLCBzaXplb2Yoc2RyYW1fdGFibGUpL3NpemVvZih1aW50KSk7CiAKICAgICAvKgotICAgICAqIDEgQmFuayBvZiA2NE1iaXQgeCAyIGRldmljZXMgCisgICAgICogMSBCYW5rIG9mIDY0TWJpdCB4IDIgZGV2aWNlcwogICAgICAqLwogICAgIG1lbWN0bC0+bWVtY19tcHRwciA9IENGR19NUFRQUl8xQktfNEs7CiAgICAgbWVtY3RsLT5tZW1jX21hciAgPSAweDAwMDAwMDg4OwpAQCAtMTY0LDggKzE2NCw4IEBACiAgICAgbWVtY3RsLT5tZW1jX21hbXIgPSBDRkdfTUFNUl84Q09MICYgKH4oTUFNUl9QVEFFKSk7IC8qIG5vIHJlZnJlc2ggeWV0ICovCiAgICAgdWRlbGF5KDIwMCk7CiAKLSAgICAvKiAKLSAgICAgKiBQZXJmb3JtIFNEUkFNIGluaXRpYWxpenNhdGlvbiBzZXF1ZW5jZSAKKyAgICAvKgorICAgICAqIFBlcmZvcm0gU0RSQU0gaW5pdGlhbGl6c2F0aW9uIHNlcXVlbmNlCiAgICAgICovCiAgICAgbWVtY3RsLT5tZW1jX21jciAgPSAweDgwMDA4MTA1OwkvKiBTRFJBTSBiYW5rIDAgKi8KICAgICB1ZGVsYXkoMSk7CkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICBtZW1jdGwtPm1lbWNfbWNyICA9IDB4ODAwMDgxMzA7CS8qIFNEUkFNIGJhbmsgMCAtIGV4ZWN1dGUgdHdpY2UgKi8KICAgICB1ZGVsYXkoMSk7CiAgICAgbWVtY3RsLT5tZW1jX21hbXIgPSAoQ0ZHX01BTVJfOENPTCAmIH4oTUFNUl9UTEZBX01TSykpIHwgTUFNUl9UTEZBXzRYOwotICAgIHVkZWxheSgyMDApOyAKKyAgICB1ZGVsYXkoMjAwKTsKIAogICAgIG1lbWN0bC0+bWVtY19tYW1yIHw9IE1BTVJfUFRBRTsJLyogZW5hYmxlIHJlZnJlc2ggKi8KICAgICB1ZGVsYXkgKDEwMDApOwpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICogd2l0aCB0d28gU0RSQU0gYmFua3Mgb3IgZm91ciBjeWNsZXMgZXZlcnkgMzEuMiB1cyB3aXRoIG9uZQogICAgICAqIGJhbmsuIEl0IHdpbGwgYmUgYWRqdXN0ZWQgYWZ0ZXIgbWVtb3J5IHNpemluZy4KICAgICAgKi8KLSAgICBtZW1jdGwtPm1lbWNfbXB0cHIgPSBDRkdfTVBUUFJfMkJLXzRLOyAvLyAxNjogYnV0IHNob3VsZCBiZTogQ0ZHX01QVFBSXzFCS180SworICAgIG1lbWN0bC0+bWVtY19tcHRwciA9IENGR19NUFRQUl8yQktfNEs7IC8qIDE2OiBidXQgc2hvdWxkIGJlOiBDRkdfTVBUUFJfMUJLXzRLICovCiAKICAgICAvKgogICAgICAqIENoZWNrIEJhbmsgMCBNZW1vcnkgU2l6ZSBmb3IgcmUtY29uZmlndXJhdGlvbgpAQCAtMjg5LDQgKzI4OSwzIEBACiAKICAgICBkb2NfcHJvYmUoRkxBU0hfQkFTRTFfUFJFTElNKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvcmJjODIzL3UtYm9vdC5sZHMgYi9ib2FyZC9yYmM4MjMvdS1ib290LmxkcwppbmRleCBmZmU3NDk1Li4wNWY2NTU1IDEwMDY0NAotLS0gYS9ib2FyZC9yYmM4MjMvdS1ib290LmxkcworKysgYi9ib2FyZC9yYmM4MjMvdS1ib290LmxkcwpAQCAtMTA5LDYgKzEwOSwxMCBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzMSw0ICsxMzUsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9ybXUvTWFrZWZpbGUgYi9ib2FyZC9ybXUvTWFrZWZpbGUKaW5kZXggZWYxNzNkMC4uMTNjZTlmYyAxMDA2NDQKLS0tIGEvYm9hcmQvcm11L01ha2VmaWxlCisrKyBiL2JvYXJkL3JtdS9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvcm11L3UtYm9vdC5sZHMgYi9ib2FyZC9ybXUvdS1ib290LmxkcwppbmRleCBhMzFjMzYyLi4wODJkOGIwIDEwMDY0NAotLS0gYS9ib2FyZC9ybXUvdS1ib290LmxkcworKysgYi9ib2FyZC9ybXUvdS1ib290LmxkcwpAQCAtMTEwLDYgKzExMCwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTMyLDQgKzEzNywzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3JtdS91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvcm11L3UtYm9vdC5sZHMuZGVidWcKaW5kZXggMjIxMzhmOC4uZjM0YzJhNCAxMDA2NDQKLS0tIGEvYm9hcmQvcm11L3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvcm11L3UtYm9vdC5sZHMuZGVidWcKQEAgLTEyOCw0ICsxMjgsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9ycHhzdXBlci9NYWtlZmlsZSBiL2JvYXJkL3JweHN1cGVyL01ha2VmaWxlCmluZGV4IDg1ZWExZmMuLjQ1MzUxMDYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3JweHN1cGVyL01ha2VmaWxlCisrKyBiL2JvYXJkL3JweHN1cGVyL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCTo9IHJweHN1cGVyLm8gZmxhc2gubyBtaWlfcGh5Lm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvcnB4c3VwZXIvZmxhc2guYyBiL2JvYXJkL3JweHN1cGVyL2ZsYXNoLmMKaW5kZXggNzMyODFiZC4uZDgwZTc3OCAxMDA2NDQKLS0tIGEvYm9hcmQvcnB4c3VwZXIvZmxhc2guYworKysgYi9ib2FyZC9ycHhzdXBlci9mbGFzaC5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkqIEJhbmsgMiAoNDggU2VjdG9ycyk6IDIzLTcwPTY0a2J5dGUKIAkqLwogCWluZm8tPmZsYXNoX2lkICAgICA9IChBTURfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSykgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQU1EX0lEX0RMMzIzQiAmIEZMQVNIX1RZUEVNQVNLKTsKKwkJCSAgICAgKEFNRF9JRF9ETDMyM0IgJiBGTEFTSF9UWVBFTUFTSyk7CiAJaW5mby0+c2VjdG9yX2NvdW50ID0gNzE7CiAJaW5mby0+c2l6ZSAgICAgICAgID0gNCAqICg4ICogOCArIDYzICogNjQpICogMTAyNDsKICAgICB9CkBAIC0xODMsMjQgKzE4MywyNCBAQAogCiAgICAgLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCiAgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotICAgICAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4ODAwMCk7CisJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDgwMDApOwogICAgIH0KICAgICBmb3IgKGkgPSA4OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLSAgICAgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDQwMDAwKSArIDggKiAweDgwMDAgLSA4ICogMHg0MDAwMDsKKwlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4NDAwMDApICsgOCAqIDB4ODAwMCAtIDggKiAweDQwMDAwOwogICAgIH0KIAogICAgIC8qIGNoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewotICAgICAgICAvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzICovCisJLyogcmVhZCBzZWN0b3IgcHJvdGVjdGlvbiBhdCBzZWN0b3IgYWRkcmVzcyAqLwogCWFkZHIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShpbmZvLT5zdGFydFtpXSk7Ci0gICAgICAgIGFkZHJbMiAqIDB4MDU1NV0gPSAweEFBQUFBQUFBOworCWFkZHJbMiAqIDB4MDU1NV0gPSAweEFBQUFBQUFBOwogCWFkZHJbMiAqIDB4MDJBQV0gPSAweDU1NTU1NTU1OwogCWFkZHJbMiAqIDB4MDU1NV0gPSAweDkwOTA5MDkwOwogCWFkZHJbMiAqIDB4MDU1NSArIDFdID0gMHhBQUFBQUFBQTsKIAlhZGRyWzIgKiAweDAyQUEgKyAxXSA9IDB4NTU1NTU1NTU7CiAJYWRkclsyICogMHgwNTU1ICsgMV0gPSAweDkwOTA5MDkwOwogCXVkZWxheSAoMTAwMCk7Ci0gICAgCWJhc2UgPSBSRF9TV1AzMigmYWRkcls0XSk7CisJYmFzZSA9IFJEX1NXUDMyKCZhZGRyWzRdKTsKIAliYXNlIHw9IFJEX1NXUDMyKCZhZGRyWzVdKTsKIAlpbmZvLT5wcm90ZWN0W2ldID0gYmFzZSAmIDB4MDAwMTAwMDEgPyAxIDogMDsKICAgICB9CkBAIC00MDQsMTQgKzQwNCwxNCBAQAogICAgIGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAogICAgIGlmICgoZGVzdCAmIDB4MDAwMDAwMDQpID09IDApIHsKLSAgICAgICAgYWRkclsyICogMHgwNTU1XSA9IDB4QUFBQUFBQUE7CisJYWRkclsyICogMHgwNTU1XSA9IDB4QUFBQUFBQUE7CiAJYWRkclsyICogMHgwMkFBXSA9IDB4NTU1NTU1NTU7Ci0gICAgICAgIGFkZHJbMiAqIDB4MDU1NV0gPSAweEEwQTBBMEEwOworCWFkZHJbMiAqIDB4MDU1NV0gPSAweEEwQTBBMEEwOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgYWRkclsyICogMHgwNTU1ICsgMV0gPSAweEFBQUFBQUFBOworCWFkZHJbMiAqIDB4MDU1NSArIDFdID0gMHhBQUFBQUFBQTsKIAlhZGRyWzIgKiAweDAyQUEgKyAxXSA9IDB4NTU1NTU1NTU7Ci0gICAgICAgIGFkZHJbMiAqIDB4MDU1NSArIDFdID0gMHhBMEEwQTBBMDsKKwlhZGRyWzIgKiAweDA1NTUgKyAxXSA9IDB4QTBBMEEwQTA7CiAgICAgfQogCiAgICAgKigodnVfbG9uZyAqKWRlc3QpID0gZGF0YTsKZGlmZiAtLWdpdCBhL2JvYXJkL3JweHN1cGVyL21paV9waHkuYyBiL2JvYXJkL3JweHN1cGVyL21paV9waHkuYwppbmRleCAzMTlmOTU5Li5lZjk5YWZmIDEwMDY0NAotLS0gYS9ib2FyZC9ycHhzdXBlci9taWlfcGh5LmMKKysrIGIvYm9hcmQvcnB4c3VwZXIvbWlpX3BoeS5jCkBAIC0zOCw3ICszOCw3IEBACiAJaWYgKHBoeV9yZWcgJiAweDA0MDApCiAJICAgIHByaW50ZigiUGh5IG9wZXJhdGluZyBhdCAlZCBNQml0L3MgaW4gJXMtZHVwbGV4IG1vZGVcbiIsCiAJCXBoeV9yZWcgJiAweDQwMDAgPyAxMDAgOiAxMCwKLQkgICAgCXBoeV9yZWcgJiAweDAyMDAgPyAiZnVsbCIgOiAiaGFsZiIpOworCQlwaHlfcmVnICYgMHgwMjAwID8gImZ1bGwiIDogImhhbGYiKTsKIAllbHNlCiAJICAgIHByaW50ZigiYmFkIGxpbmshIVxuIik7CiAvKgpAQCAtNTksNyArNTksNyBAQAogICAgIHRtcCA9IDB4NjAwMiB8IChhZHIgPDwgNykgfCAocmVnIDw8IDIpOwogICAgIHJlZ3MtPmJjc3I0ID0gMHhDMzsKICAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotICAgICAgICByZWdzLT5iY3NyNCBePSBNSUlfTURDSzsKKwlyZWdzLT5iY3NyNCBePSBNSUlfTURDSzsKICAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAlyZWdzLT5iY3NyNCAmPSB+TUlJX01EQ0s7CkBAIC05Miw3ICs5Miw3IEBACiAgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJcmVncy0+YmNzcjQgJj0gfk1JSV9NRENLOwotICAgICAgICBpZiAodG1wICYgMHg4MDAwKSByZWdzLT5iY3NyNCB8PSBNSUlfTURJTzsKKwlpZiAodG1wICYgMHg4MDAwKSByZWdzLT5iY3NyNCB8PSBNSUlfTURJTzsKIAllbHNlIHJlZ3MtPmJjc3I0ICY9IH5NSUlfTURJTzsKIAlyZWdzLT5iY3NyNCB8PSBNSUlfTURDSzsKIAl0bXAgPDw9IDE7CkBAIC0xMDUsNCArMTA1LDMgQEAKIAl2YWwgPDw9IDE7CiAgICAgfQogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9ycHhzdXBlci9ycHhzdXBlci5jIGIvYm9hcmQvcnB4c3VwZXIvcnB4c3VwZXIuYwppbmRleCAyYzA3MTdlLi41MGIzYzVjIDEwMDY0NAotLS0gYS9ib2FyZC9ycHhzdXBlci9ycHhzdXBlci5jCisrKyBiL2JvYXJkL3JweHN1cGVyL3JweHN1cGVyLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAogICAgIC8qIFBvcnQgQSBjb25maWd1cmF0aW9uICovCiAgICAgewkvKgkgICAgICBjb25mIHBwYXIgcHNvciBwZGlyIHBvZHIgcGRhdCAqLwotICAgICAgICAvKiBQQTMxICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgKkFUTVRYRU4gKi8KKwkvKiBQQTMxICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgKkFUTVRYRU4gKi8KIAkvKiBQQTMwICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNVENBICAgKi8KIAkvKiBQQTI5ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgQVRNVFNPQyAgKi8KIAkvKiBQQTI4ICovIHsgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzEgKkFUTVJYRU4gKi8KQEAgLTI3MSw3ICsyNzEsNyBAQAogCiAgICAgbWVtY3RsLT5tZW1jX3BzZG1yID0gcHNkbXIgfCBQU0RNUl9PUF9DQlJSOwogICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0gICAgICAgICpyYW1hZGRyID0gYzsKKwkqcmFtYWRkciA9IGM7CiAKICAgICBtZW1jdGwtPm1lbWNfcHNkbXIgPSBwc2RtciB8IFBTRE1SX09QX01SVzsKICAgICAqcmFtYWRkciA9IGM7CmRpZmYgLS1naXQgYS9ib2FyZC9ycHhzdXBlci91LWJvb3QubGRzIGIvYm9hcmQvcnB4c3VwZXIvdS1ib290LmxkcwppbmRleCBiNGU1MDJiLi40NDIyNGNiIDEwMDY0NAotLS0gYS9ib2FyZC9ycHhzdXBlci91LWJvb3QubGRzCisrKyBiL2JvYXJkL3JweHN1cGVyL3UtYm9vdC5sZHMKQEAgLTkzLDYgKzkzLDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMTUsNCArMTIwLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvcnNkcHJvdG8vZmxhc2guYyBiL2JvYXJkL3JzZHByb3RvL2ZsYXNoLmMKaW5kZXggZDkwZTdkYi4uNWFkMzIxOCAxMDA2NDQKLS0tIGEvYm9hcmQvcnNkcHJvdG8vZmxhc2guYworKysgYi9ib2FyZC9yc2Rwcm90by9mbGFzaC5jCkBAIC01OSw5ICs1OSw5IEBACiAKIC8qIGZyb20gZmxhc2hfYXNtLlMgKi8KIGV4dGVybiB2b2lkIHVsbF93cml0ZSh1bnNpZ25lZCBsb25nIGxvbmcgdm9sYXRpbGUgKmFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZvbGF0aWxlICpkYXRhKTsKKwkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZvbGF0aWxlICpkYXRhKTsKIGV4dGVybiB2b2lkIHVsbF9yZWFkKHVuc2lnbmVkIGxvbmcgbG9uZyB2b2xhdGlsZSAqYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2b2xhdGlsZSAqZGF0YSk7CisJCSAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZvbGF0aWxlICpkYXRhKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCkBAIC0yNjgsNyArMjY4LDcgQEAKIAkJCXVsbF93cml0ZShmX2FkZHIsICZmX2NvbW1hbmQpOwogCQkJcHJpbnRmICgiIHRpbWVvdXRcbiIpOwogCQkJcmV0dXJuIDE7Ci0gICAgICAgIH0KKwl9CiAJfSB3aGlsZSgqZl9hZGRyICE9IDB4RkZGRkZGRkZGRkZGRkZGRlVMTCk7CiAKICAgICBwcmludGYgKCIgZG9uZVxuIik7CmRpZmYgLS1naXQgYS9ib2FyZC9yc2Rwcm90by91LWJvb3QubGRzIGIvYm9hcmQvcnNkcHJvdG8vdS1ib290LmxkcwppbmRleCA3ZDM4ODZkLi5iZGM3NWMxIDEwMDY0NAotLS0gYS9ib2FyZC9yc2Rwcm90by91LWJvb3QubGRzCisrKyBiL2JvYXJkL3JzZHByb3RvL3UtYm9vdC5sZHMKQEAgLTk4LDYgKzk4LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjAsNCArMTI1LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Fjc25nL01ha2VmaWxlIGIvYm9hcmQvc2Fjc25nL01ha2VmaWxlCmluZGV4IGU1OTNmMjcuLmJhZWZhNGEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NhY3NuZy9NYWtlZmlsZQorKysgYi9ib2FyZC9zYWNzbmcvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJOj0gc2Fjc25nLm8gZmxhc2gubyBjbGtpbml0Lm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Fjc25nL2Nsa2luaXQuYyBiL2JvYXJkL3NhY3NuZy9jbGtpbml0LmMKaW5kZXggNjM0YzFlMC4uZWE0YzY1ZCAxMDA2NDQKLS0tIGEvYm9hcmQvc2Fjc25nL2Nsa2luaXQuYworKysgYi9ib2FyZC9zYWNzbmcvY2xraW5pdC5jCkBAIC00MSw4ICs0MSw4IEBACiAgICAgIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjMTsKIAogICAgICBpZiAoYnJnID49IDUpIHsKLSAgICAgICAgIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjNTsKLSAgICAgICAgIGJyZyAtPSA0OworCSBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzU7CisJIGJyZyAtPSA0OwogICAgICB9CiAgICAgIGJyZ19wdHIgKz0gYnJnOwogICAgICAqYnJnX3B0ciB8PSAgQ1BNX0JSR19SU1Q7CkBAIC01Nyw4ICs1Nyw4IEBACiAgICAgIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjMTsKIAogICAgICBpZiAoYnJnID49IDUpIHsKLSAgICAgICAgIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjNTsKLSAgICAgICAgIGJyZyAtPSA0OworCSBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzU7CisJIGJyZyAtPSA0OwogICAgICB9CiAgICAgIGJyZ19wdHIgKz0gYnJnOwogICAgICAqYnJnX3B0ciAmPSB+Q1BNX0JSR19FTjsKQEAgLTcxLDggKzcxLDggQEAKIAogICAgICBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzE7CiAgICAgIGlmIChicmcgPj0gNSkgewotICAgICAgICAgYnJnX3B0ciA9ICh1aW50ICopJmltbXItPmltX2JyZ2M1OwotICAgICAgICAgYnJnIC09IDQ7CisJIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjNTsKKwkgYnJnIC09IDQ7CiAgICAgIH0KICAgICAgYnJnX3B0ciArPSBicmc7CiAgICAgICpicmdfcHRyIHw9IENQTV9CUkdfRU47CkBAIC04NSwxOCArODUsMTggQEAKIAogICAgICBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzE7CiAgICAgIGlmIChicmcgPj0gNSkgewotICAgICAgICAgYnJnX3B0ciA9ICh1aW50ICopJmltbXItPmltX2JyZ2M1OwotICAgICAgICAgYnJnIC09IDQ7CisJIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjNTsKKwkgYnJnIC09IDQ7CiAgICAgIH0KICAgICAgYnJnX3B0ciArPSBicmc7CiAKICAgICAgaWYgKCpicmdfcHRyICYgQ1BNX0JSR19ESVYxNikgewotICAgICAgICAgLyogRElWMTYgYWN0aXZlICovCi0gICAgICAgICByZXR1cm4gKFRSVUUpOworCSAvKiBESVYxNiBhY3RpdmUgKi8KKwkgcmV0dXJuIChUUlVFKTsKICAgICAgfQogICAgICBlbHNlIHsKLSAgICAgICAgIC8qIERJVjE2IGluYWN0aXZlICovCi0gICAgICAgICByZXR1cm4gKEZBTFNFKTsKKwkgLyogRElWMTYgaW5hY3RpdmUgKi8KKwkgcmV0dXJuIChGQUxTRSk7CiAgICAgIH0KIH0KIApAQCAtMTA3LDE4ICsxMDcsMTggQEAKIAogICAgICBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzE7CiAgICAgIGlmIChicmcgPj0gNSkgewotICAgICAgICAgYnJnX3B0ciA9ICh1aW50ICopJmltbXItPmltX2JyZ2M1OwotICAgICAgICAgYnJnIC09IDQ7CisJIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjNTsKKwkgYnJnIC09IDQ7CiAgICAgIH0KICAgICAgYnJnX3B0ciArPSBicmc7CiAKICAgICAgaWYgKGRpdjE2KSB7Ci0gICAgICAgICAvKiBESVYxNiBhY3RpdmUgKi8KLSAgICAgICAgICpicmdfcHRyIHw9ICBDUE1fQlJHX0RJVjE2OworCSAvKiBESVYxNiBhY3RpdmUgKi8KKwkgKmJyZ19wdHIgfD0gIENQTV9CUkdfRElWMTY7CiAgICAgIH0KICAgICAgZWxzZSB7Ci0gICAgICAgICAvKiBESVYxNiBpbmFjdGl2ZSAqLwotICAgICAgICAgKmJyZ19wdHIgJj0gfkNQTV9CUkdfRElWMTY7CisJIC8qIERJVjE2IGluYWN0aXZlICovCisJICpicmdfcHRyICY9IH5DUE1fQlJHX0RJVjE2OwogICAgICB9CiB9CiAKQEAgLTEzMCw4ICsxMzAsOCBAQAogCiAgICAgIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjMTsKICAgICAgaWYgKGJyZyA+PSA1KSB7Ci0gICAgICAgICBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzU7Ci0gICAgICAgICBicmcgLT0gNDsKKwkgYnJnX3B0ciA9ICh1aW50ICopJmltbXItPmltX2JyZ2M1OworCSBicmcgLT0gNDsKICAgICAgfQogICAgICBicmdfcHRyICs9IGJyZzsKIApAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgIGJyZ19jbnQgPSAoKmJyZ19wdHIgJiBDUE1fQlJHX0NEX01BU0spID4+IENQTV9CUkdfRElWMTZfU0hJRlQ7CiAgICAgIGJyZ19jbnQrKzsKICAgICAgaWYgKCpicmdfcHRyICYgQ1BNX0JSR19ESVYxNikgewotICAgICAgICAgYnJnX2NudCAqPSAxNjsKKwkgYnJnX2NudCAqPSAxNjsKICAgICAgfQogCiAgICAgcmV0dXJuIChicmdfY250KTsKQEAgLTE1Niw4ICsxNTYsOCBAQAogCiAgICAgIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjMTsKICAgICAgaWYgKGJyZyA+PSA1KSB7Ci0gICAgICAgICBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzU7Ci0gICAgICAgICBicmcgLT0gNDsKKwkgYnJnX3B0ciA9ICh1aW50ICopJmltbXItPmltX2JyZ2M1OworCSBicmcgLT0gNDsKICAgICAgfQogICAgICBicmdfcHRyICs9IGJyZzsKIApAQCAtMTY2LDE0ICsxNjYsMTQgQEAKICAgICAgICoJIHRoZXJlZm9yZSB3ZSBuZWVkIHRvIHN1YnRyYWN0IDEgZnJvbSB0aGUgY291bnQuCiAgICAgICAqLwogICAgICBpZiAoYnJnX2NudCA+IDQwOTYpIHsKLSAgICAgICAgIC8qIFByZXNjYWxlID0gRGl2aWRlIGJ5IDE2ICovCi0gICAgICAgICAqYnJnX3B0ciA9ICgqYnJnX3B0ciAmIH5DUE1fQlJHX0NEX01BU0spICAgfAorCSAvKiBQcmVzY2FsZSA9IERpdmlkZSBieSAxNiAqLworCSAqYnJnX3B0ciA9ICgqYnJnX3B0ciAmIH5DUE1fQlJHX0NEX01BU0spICAgfAogCSAgICAgKCgoYnJnX2NudCAvIDE2KSAtIDEpIDw8IENQTV9CUkdfRElWMTZfU0hJRlQpOwogCSAqYnJnX3B0ciB8PSBDUE1fQlJHX0RJVjE2OwogICAgICB9CiAgICAgIGVsc2UgewotICAgICAgICAgLyogUHJlc2NhbGUgPSBEaXZpZGUgYnkgMSAqLwotICAgICAgICAgKmJyZ19wdHIgPSAoKmJyZ19wdHIgJiB+Q1BNX0JSR19DRF9NQVNLKSB8CisJIC8qIFByZXNjYWxlID0gRGl2aWRlIGJ5IDEgKi8KKwkgKmJyZ19wdHIgPSAoKmJyZ19wdHIgJiB+Q1BNX0JSR19DRF9NQVNLKSB8CiAJICAgICAoKGJyZ19jbnQgLSAxKSA8PCBDUE1fQlJHX0RJVjE2X1NISUZUKTsKIAkgKmJyZ19wdHIgJj0gfkNQTV9CUkdfRElWMTY7CiAgICAgIH0KQEAgLTE4Niw4ICsxODYsOCBAQAogCiAgICAgIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjMTsKICAgICAgaWYgKGJyZyA+PSA1KSB7Ci0gICAgICAgICBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzU7Ci0gICAgICAgICBicmcgLT0gNDsKKwkgYnJnX3B0ciA9ICh1aW50ICopJmltbXItPmltX2JyZ2M1OworCSBicmcgLT0gNDsKICAgICAgfQogICAgICBicmdfcHRyICs9IGJyZzsKIApAQCAtMjAxLDQwICsyMDEsNDAgQEAKICAgICAgZXh0YyA9IERhcV9CUkdfR2V0X0V4dENsayhicmcpOwogCiAgICAgIHN3aXRjaCAoYnJnICsgMSkgewotICAgICAgICAgY2FzZSAxOgotICAgICAgICAgY2FzZSAyOgotICAgICAgICAgY2FzZSA1OgotICAgICAgICAgY2FzZSA2OiB7Ci0gICAgICAgICAgICAgc3dpdGNoIChleHRjKSB7Ci0gICAgICAgICAgICAgICAgIGNhc2UgMDogewotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiQlJHX0lOVCIpOwotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIGNhc2UgMTogewotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiQ0xLMyIpOwotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIGNhc2UgMjogewotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiQ0xLNSIpOwotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIHJldHVybiAoIj8/MTI0NT8/Iik7Ci0gICAgICAgICB9Ci0gICAgICAgICBjYXNlIDM6Ci0gICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICBjYXNlIDc6Ci0gICAgICAgICBjYXNlIDg6IHsKLSAgICAgICAgICAgICBzd2l0Y2ggKGV4dGMpIHsKLSAgICAgICAgICAgICAgICAgY2FzZSAwOiB7Ci0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCJCUkdfSU5UIik7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgY2FzZSAxOiB7Ci0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCJDTEs5Iik7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgY2FzZSAyOiB7Ci0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCJDTEsxNSIpOwotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIHJldHVybiAoIj8/MzQ3OD8/Iik7Ci0gICAgICAgICB9CisJIGNhc2UgMToKKwkgY2FzZSAyOgorCSBjYXNlIDU6CisJIGNhc2UgNjogeworCSAgICAgc3dpdGNoIChleHRjKSB7CisJCSBjYXNlIDA6IHsKKwkJICAgICByZXR1cm4gKCJCUkdfSU5UIik7CisJCSB9CisJCSBjYXNlIDE6IHsKKwkJICAgICByZXR1cm4gKCJDTEszIik7CisJCSB9CisJCSBjYXNlIDI6IHsKKwkJICAgICByZXR1cm4gKCJDTEs1Iik7CisJCSB9CisJICAgICB9CisJICAgICByZXR1cm4gKCI/PzEyNDU/PyIpOworCSB9CisJIGNhc2UgMzoKKwkgY2FzZSA0OgorCSBjYXNlIDc6CisJIGNhc2UgODogeworCSAgICAgc3dpdGNoIChleHRjKSB7CisJCSBjYXNlIDA6IHsKKwkJICAgICByZXR1cm4gKCJCUkdfSU5UIik7CisJCSB9CisJCSBjYXNlIDE6IHsKKwkJICAgICByZXR1cm4gKCJDTEs5Iik7CisJCSB9CisJCSBjYXNlIDI6IHsKKwkJICAgICByZXR1cm4gKCJDTEsxNSIpOworCQkgfQorCSAgICAgfQorCSAgICAgcmV0dXJuICgiPz8zNDc4Pz8iKTsKKwkgfQogICAgICB9CiAgICAgIHJldHVybiAoIj8/OTg3Nj8/Iik7CiB9CkBAIC0yNDYsMTMgKzI0NiwxMyBAQAogCiAgICAgIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjMTsKICAgICAgaWYgKGJyZyA+PSA1KSB7Ci0gICAgICAgICBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzU7Ci0gICAgICAgICBicmcgLT0gNDsKKwkgYnJnX3B0ciA9ICh1aW50ICopJmltbXItPmltX2JyZ2M1OworCSBicmcgLT0gNDsKICAgICAgfQogICAgICBicmdfcHRyICs9IGJyZzsKIAogICAgICAqYnJnX3B0ciA9ICgqYnJnX3B0ciAmIH5DUE1fQlJHX0VYVENfTUFTSykgfAotICAgICAgICAgICAgICAgICgoZXh0YyA8PCBDUE1fQlJHX0VYVENfU0hJRlQpICYgQ1BNX0JSR19FWFRDX01BU0spOworCQkoKGV4dGMgPDwgQ1BNX0JSR19FWFRDX1NISUZUKSAmIENQTV9CUkdfRVhUQ19NQVNLKTsKIH0KIAogdWludCBEYXFfQlJHX1JhdGUodWludCBicmcpCkBAIC0yNjYsMTUgKzI2NiwxNSBAQAogICAgICBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzE7CiAgICAgIGJyZ19wdHIgKz0gYnJnOwogICAgICBpZiAoYnJnID49IDUpIHsKLSAgICAgICAgIGJyZ19wdHIgPSAodWludCAqKSZpbW1yLT5pbV9icmdjNTsKLSAgICAgICAgIGJyZ19wdHIgKz0gKGJyZyAtIDQpOworCSBicmdfcHRyID0gKHVpbnQgKikmaW1tci0+aW1fYnJnYzU7CisJIGJyZ19wdHIgKz0gKGJyZyAtIDQpOwogICAgICB9CiAKICAgICBicmdfY250ID0gRGFxX0JSR19HZXRfQ291bnQoYnJnKTsKIAogICAgIHN3aXRjaCAoRGFxX0JSR19HZXRfRXh0Q2xrKGJyZykpIHsKLSAgICAgICAgY2FzZSBDUE1fQlJHX0VYVENfQ0xLMzoKLSAgICAgICAgY2FzZSBDUE1fQlJHX0VYVENfQ0xLNTogeworCWNhc2UgQ1BNX0JSR19FWFRDX0NMSzM6CisJY2FzZSBDUE1fQlJHX0VYVENfQ0xLNTogewogCSAgICBicmdfZnJlcSA9IGJyZ19jbnQ7CiAJICAgIGJyZWFrOwogCX0KQEAgLTI5OCw3ICsyOTgsNyBAQAogICAgIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogICAgIHZvbGF0aWxlIGlvcG9ydF90ICppb3BhID0gaW9wb3J0X2FkZHIoKGltbWFwX3QgKilDRkdfSU1NUiwgMCAvKiBwb3J0IEEgKi8pOwogICAgIHVpbnQgbWNsa19kaXZpc29yOyAvKiBNQ0xLIGRpdmlzb3IgKi8KLSAgICBpbnQgIGZsYWc7ICAgICAgICAgLyogSW50ZXJydXB0IHN0YXRlICovIAorICAgIGludCAgZmxhZzsgICAgICAgICAvKiBJbnRlcnJ1cHQgc3RhdGUgKi8KIAogICAgIC8qIFNhdmUgb2ZmIHRoZSBjbG9ja2luZyBkYXRhICovCiAgICAgRGFxNjR4U2FtcGxpbmcgPSBzYW1wbGVfNjR4OwpAQCAtMzA3LDEwICszMDcsMTAgQEAKICAgICAgKiBMaW1pdCB0aGUgc2FtcGxlIHJhdGUgdG8gc29tZSBzZW5zaWJsZSB2YWx1ZXMuCiAgICAgICovCiAgICAgaWYgKHNhbXBsZV9yYXRlID4gTUFYXzY0eF9TQU1QTEVfUkFURSkgewotICAgICAgICBzYW1wbGVfcmF0ZSA9IE1BWF82NHhfU0FNUExFX1JBVEU7CQorCXNhbXBsZV9yYXRlID0gTUFYXzY0eF9TQU1QTEVfUkFURTsKICAgICB9CiAgICAgaWYgKHNhbXBsZV9yYXRlIDwgTUlOX1NBTVBMRV9SQVRFKSB7Ci0gICAgICAgIHNhbXBsZV9yYXRlID0gTUlOX1NBTVBMRV9SQVRFOwkKKwlzYW1wbGVfcmF0ZSA9IE1JTl9TQU1QTEVfUkFURTsKICAgICB9CiAKICAgICAvKgpAQCAtMzIyLDE2ICszMjIsMTYgQEAKIAogICAgIC8qIFNldHVwIFNDTEsgKi8KICMgICBpZmRlZiBSVU5fU0NMS19PTl9CUkdfSU5UCi0gICAgICAgIERhcV9CUkdfU2V0X0V4dENsayhTQ0xLX0JSRywgQ1BNX0JSR19FWFRDX0JSR0NMSyk7CisJRGFxX0JSR19TZXRfRXh0Q2xrKFNDTEtfQlJHLCBDUE1fQlJHX0VYVENfQlJHQ0xLKTsKICMgICBlbHNlCi0gICAgICAgIERhcV9CUkdfU2V0X0V4dENsayhTQ0xLX0JSRywgQ1BNX0JSR19FWFRDX0NMSzkpOworCURhcV9CUkdfU2V0X0V4dENsayhTQ0xLX0JSRywgQ1BNX0JSR19FWFRDX0NMSzkpOwogIyAgIGVuZGlmCiAKICAgICAvKiBTZXR1cCBMUkNMSyAqLwogIyAgIGlmZGVmIFJVTl9MUkNMS19PTl9CUkdfSU5UCi0gICAgICAgIERhcV9CUkdfU2V0X0V4dENsayhMUkNMS19CUkcsIENQTV9CUkdfRVhUQ19CUkdDTEspOworCURhcV9CUkdfU2V0X0V4dENsayhMUkNMS19CUkcsIENQTV9CUkdfRVhUQ19CUkdDTEspOwogIyAgIGVsc2UKLSAgICAgICAgRGFxX0JSR19TZXRfRXh0Q2xrKExSQ0xLX0JSRywgQ1BNX0JSR19FWFRDX0NMSzUpOworCURhcV9CUkdfU2V0X0V4dENsayhMUkNMS19CUkcsIENQTV9CUkdfRVhUQ19DTEs1KTsKICMgICBlbmRpZgogCiAgICAgLyoKQEAgLTM1Nyw3ICszNTcsNyBAQAogIyAgIGVuZGlmCiAKICMgICBpZmRlZiBSVU5fTFJDTEtfT05fQlJHX0lOVAotCURhcV9CUkdfU2V0X0NvdW50KExSQ0xLX0JSRywgCisJRGFxX0JSR19TZXRfQ291bnQoTFJDTEtfQlJHLAogCQkJICBtY2xrX2Rpdmlzb3IgKiBNQ0xLX0RJVklTT1IgKiBTQ0xLX0RJVklTT1IpOwogIyAgIGVsc2UKIAlEYXFfQlJHX1NldF9Db3VudChMUkNMS19CUkcsIFNDTEtfRElWSVNPUik7CkBAIC0zNjcsNyArMzY3LDcgQEAKICAgICAgKiBSZXN0b3JlIHRoZSBJbnRlcnJ1cHQgc3RhdGUKICAgICAgKi8KICAgICAgaWYgKGZsYWcpIHsKLSAgICAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAgICAgIH0KIAogICAgIC8qIEVuYWJsZSB0aGUgY2xvY2sgZHJpdmVycyAqLwpAQCAtMzg2LDI3NiArMzg2LDI3NiBAQAogI2VuZGlmCiAKICMgICBpZmRlZiBUSUdIVEVOX1VQX0JSR19USU1JTkcKLSAgICAgICAgLyogCi0gICAgICAgICAqIE9idGFpbiBNQ0xLIEJSRyByZXNldC9kaXNhYmxlZCB2YWx1ZQotICAgICAgICAgKi8KKwkvKgorCSAqIE9idGFpbiBNQ0xLIEJSRyByZXNldC9kaXNhYmxlZCB2YWx1ZQorCSAqLwogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gMCkKLSAgICAgICAgICAgIG1jbGtfYnJnID0gKCpJTV9CUkdDMSB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOworCSAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzEgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDEpCi0gICAgICAgICAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzIgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKKwkgICAgbWNsa19icmcgPSAoKklNX0JSR0MyIHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSAyKQotICAgICAgICAgICAgbWNsa19icmcgPSAoKklNX0JSR0MzIHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CisJICAgIG1jbGtfYnJnID0gKCpJTV9CUkdDMyB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gMykKLSAgICAgICAgICAgIG1jbGtfYnJnID0gKCpJTV9CUkdDNCB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOworCSAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzQgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDQpCi0gICAgICAgICAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzUgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKKwkgICAgbWNsa19icmcgPSAoKklNX0JSR0M1IHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSA1KQotICAgICAgICAgICAgbWNsa19icmcgPSAoKklNX0JSR0M2IHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CisJICAgIG1jbGtfYnJnID0gKCpJTV9CUkdDNiB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gNikKLSAgICAgICAgICAgIG1jbGtfYnJnID0gKCpJTV9CUkdDNyB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOworCSAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzcgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDcpCi0gICAgICAgICAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzggfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKKwkgICAgbWNsa19icmcgPSAoKklNX0JSR0M4IHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAKLSAgICAgICAgLyogCi0gICAgICAgICAqIE9idGFpbiBTQ0xLIEJSRyByZXNldC9kaXNhYmxlZCB2YWx1ZQotICAgICAgICAgKi8KKwkvKgorCSAqIE9idGFpbiBTQ0xLIEJSRyByZXNldC9kaXNhYmxlZCB2YWx1ZQorCSAqLwogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gMCkKLSAgICAgICAgICAgIHNjbGtfYnJnID0gKCpJTV9CUkdDMSB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOworCSAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzEgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDEpCi0gICAgICAgICAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzIgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKKwkgICAgc2Nsa19icmcgPSAoKklNX0JSR0MyIHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSAyKQotICAgICAgICAgICAgc2Nsa19icmcgPSAoKklNX0JSR0MzIHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CisJICAgIHNjbGtfYnJnID0gKCpJTV9CUkdDMyB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gMykKLSAgICAgICAgICAgIHNjbGtfYnJnID0gKCpJTV9CUkdDNCB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOworCSAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzQgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDQpCi0gICAgICAgICAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzUgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKKwkgICAgc2Nsa19icmcgPSAoKklNX0JSR0M1IHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSA1KQotICAgICAgICAgICAgc2Nsa19icmcgPSAoKklNX0JSR0M2IHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CisJICAgIHNjbGtfYnJnID0gKCpJTV9CUkdDNiB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gNikKLSAgICAgICAgICAgIHNjbGtfYnJnID0gKCpJTV9CUkdDNyB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOworCSAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzcgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDcpCi0gICAgICAgICAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzggfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKKwkgICAgc2Nsa19icmcgPSAoKklNX0JSR0M4IHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAKLSAgICAgICAgLyogCi0gICAgICAgICAqIE9idGFpbiBMUkNMSyBCUkcgcmVzZXQvZGlzYWJsZWQgdmFsdWUKLSAgICAgICAgICovCisJLyoKKwkgKiBPYnRhaW4gTFJDTEsgQlJHIHJlc2V0L2Rpc2FibGVkIHZhbHVlCisJICovCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gMCkKLSAgICAgICAgICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzEgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKKwkgICAgbHJjbGtfYnJnID0gKCpJTV9CUkdDMSB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDEpCi0gICAgICAgICAgICBscmNsa19icmcgPSAoKklNX0JSR0MyIHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CisJICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzIgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSAyKQotICAgICAgICAgICAgbHJjbGtfYnJnID0gKCpJTV9CUkdDMyB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOworCSAgICBscmNsa19icmcgPSAoKklNX0JSR0MzIHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gMykKLSAgICAgICAgICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzQgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKKwkgICAgbHJjbGtfYnJnID0gKCpJTV9CUkdDNCB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDQpCi0gICAgICAgICAgICBscmNsa19icmcgPSAoKklNX0JSR0M1IHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CisJICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzUgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSA1KQotICAgICAgICAgICAgbHJjbGtfYnJnID0gKCpJTV9CUkdDNiB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOworCSAgICBscmNsa19icmcgPSAoKklNX0JSR0M2IHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gNikKLSAgICAgICAgICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzcgfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKKwkgICAgbHJjbGtfYnJnID0gKCpJTV9CUkdDNyB8IENQTV9CUkdfUlNUKSAmIH5DUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDcpCi0gICAgICAgICAgICBscmNsa19icmcgPSAoKklNX0JSR0M4IHwgQ1BNX0JSR19SU1QpICYgfkNQTV9CUkdfRU47CisJICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzggfCBDUE1fQlJHX1JTVCkgJiB+Q1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKLQkKKwogCS8qCiAJICogRGlzYWJsZSBpbnRlcnJ1cHQgYW5kIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUKIAkgKi8KIAlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKLSAgICAgICAgLyogCi0gICAgICAgICAqIFNldCByZXNldCBvbiBNQ0xLIEJSRwotICAgICAgICAgKi8KKwkvKgorCSAqIFNldCByZXNldCBvbiBNQ0xLIEJSRworCSAqLwogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gMCkKLSAgICAgICAgICAgICpJTV9CUkdDMSA9IG1jbGtfYnJnOworCSAgICAqSU1fQlJHQzEgPSBtY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDEpCi0gICAgICAgICAgICAqSU1fQlJHQzIgPSBtY2xrX2JyZzsKKwkgICAgKklNX0JSR0MyID0gbWNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSAyKQotICAgICAgICAgICAgKklNX0JSR0MzID0gbWNsa19icmc7CisJICAgICpJTV9CUkdDMyA9IG1jbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gMykKLSAgICAgICAgICAgICpJTV9CUkdDNCA9IG1jbGtfYnJnOworCSAgICAqSU1fQlJHQzQgPSBtY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDQpCi0gICAgICAgICAgICAqSU1fQlJHQzUgPSBtY2xrX2JyZzsKKwkgICAgKklNX0JSR0M1ID0gbWNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSA1KQotICAgICAgICAgICAgKklNX0JSR0M2ID0gbWNsa19icmc7CisJICAgICpJTV9CUkdDNiA9IG1jbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gNikKLSAgICAgICAgICAgICpJTV9CUkdDNyA9IG1jbGtfYnJnOworCSAgICAqSU1fQlJHQzcgPSBtY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDcpCi0gICAgICAgICAgICAqSU1fQlJHQzggPSBtY2xrX2JyZzsKKwkgICAgKklNX0JSR0M4ID0gbWNsa19icmc7CiAjICAgICAgIGVuZGlmCiAKLSAgICAgICAgLyogCi0gICAgICAgICAqIFNldCByZXNldCBvbiBTQ0xLIEJSRwotICAgICAgICAgKi8KKwkvKgorCSAqIFNldCByZXNldCBvbiBTQ0xLIEJSRworCSAqLwogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gMCkKLSAgICAgICAgICAgICpJTV9CUkdDMSA9IHNjbGtfYnJnOworCSAgICAqSU1fQlJHQzEgPSBzY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDEpCi0gICAgICAgICAgICAqSU1fQlJHQzIgPSBzY2xrX2JyZzsKKwkgICAgKklNX0JSR0MyID0gc2Nsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSAyKQotICAgICAgICAgICAgKklNX0JSR0MzID0gc2Nsa19icmc7CisJICAgICpJTV9CUkdDMyA9IHNjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gMykKLSAgICAgICAgICAgICpJTV9CUkdDNCA9IHNjbGtfYnJnOworCSAgICAqSU1fQlJHQzQgPSBzY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDQpCi0gICAgICAgICAgICAqSU1fQlJHQzUgPSBzY2xrX2JyZzsKKwkgICAgKklNX0JSR0M1ID0gc2Nsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSA1KQotICAgICAgICAgICAgKklNX0JSR0M2ID0gc2Nsa19icmc7CisJICAgICpJTV9CUkdDNiA9IHNjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gNikKLSAgICAgICAgICAgICpJTV9CUkdDNyA9IHNjbGtfYnJnOworCSAgICAqSU1fQlJHQzcgPSBzY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDcpCi0gICAgICAgICAgICAqSU1fQlJHQzggPSBzY2xrX2JyZzsKKwkgICAgKklNX0JSR0M4ID0gc2Nsa19icmc7CiAjICAgICAgIGVuZGlmCiAKLSAgICAgICAgLyogCi0gICAgICAgICAqIFNldCByZXNldCBvbiBMUkNMSyBCUkcKLSAgICAgICAgICovCisJLyoKKwkgKiBTZXQgcmVzZXQgb24gTFJDTEsgQlJHCisJICovCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gMCkKLSAgICAgICAgICAgICpJTV9CUkdDMSA9IGxyY2xrX2JyZzsKKwkgICAgKklNX0JSR0MxID0gbHJjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDEpCi0gICAgICAgICAgICAqSU1fQlJHQzIgPSBscmNsa19icmc7CisJICAgICpJTV9CUkdDMiA9IGxyY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSAyKQotICAgICAgICAgICAgKklNX0JSR0MzID0gbHJjbGtfYnJnOworCSAgICAqSU1fQlJHQzMgPSBscmNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gMykKLSAgICAgICAgICAgICpJTV9CUkdDNCA9IGxyY2xrX2JyZzsKKwkgICAgKklNX0JSR0M0ID0gbHJjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDQpCi0gICAgICAgICAgICAqSU1fQlJHQzUgPSBscmNsa19icmc7CisJICAgICpJTV9CUkdDNSA9IGxyY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSA1KQotICAgICAgICAgICAgKklNX0JSR0M2ID0gbHJjbGtfYnJnOworCSAgICAqSU1fQlJHQzYgPSBscmNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gNikKLSAgICAgICAgICAgICpJTV9CUkdDNyA9IGxyY2xrX2JyZzsKKwkgICAgKklNX0JSR0M3ID0gbHJjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDcpCi0gICAgICAgICAgICAqSU1fQlJHQzggPSBscmNsa19icmc7CisJICAgICpJTV9CUkdDOCA9IGxyY2xrX2JyZzsKICMgICAgICAgZW5kaWYKLQkKLSAgICAgICAgLyogCi0gICAgICAgICAqIENsZWFyIHJlc2V0IG9uIE1DTEsgQlJHCi0gICAgICAgICAqLworCisJLyoKKwkgKiBDbGVhciByZXNldCBvbiBNQ0xLIEJSRworCSAqLwogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gMCkKLSAgICAgICAgICAgICpJTV9CUkdDMSA9IG1jbGtfYnJnICYgfkNQTV9CUkdfUlNUOworCSAgICAqSU1fQlJHQzEgPSBtY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDEpCi0gICAgICAgICAgICAqSU1fQlJHQzIgPSBtY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKKwkgICAgKklNX0JSR0MyID0gbWNsa19icmcgJiB+Q1BNX0JSR19SU1Q7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSAyKQotICAgICAgICAgICAgKklNX0JSR0MzID0gbWNsa19icmcgJiB+Q1BNX0JSR19SU1Q7CisJICAgICpJTV9CUkdDMyA9IG1jbGtfYnJnICYgfkNQTV9CUkdfUlNUOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gMykKLSAgICAgICAgICAgICpJTV9CUkdDNCA9IG1jbGtfYnJnICYgfkNQTV9CUkdfUlNUOworCSAgICAqSU1fQlJHQzQgPSBtY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDQpCi0gICAgICAgICAgICAqSU1fQlJHQzUgPSBtY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKKwkgICAgKklNX0JSR0M1ID0gbWNsa19icmcgJiB+Q1BNX0JSR19SU1Q7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSA1KQotICAgICAgICAgICAgKklNX0JSR0M2ID0gbWNsa19icmcgJiB+Q1BNX0JSR19SU1Q7CisJICAgICpJTV9CUkdDNiA9IG1jbGtfYnJnICYgfkNQTV9CUkdfUlNUOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gNikKLSAgICAgICAgICAgICpJTV9CUkdDNyA9IG1jbGtfYnJnICYgfkNQTV9CUkdfUlNUOworCSAgICAqSU1fQlJHQzcgPSBtY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDcpCi0gICAgICAgICAgICAqSU1fQlJHQzggPSBtY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKKwkgICAgKklNX0JSR0M4ID0gbWNsa19icmcgJiB+Q1BNX0JSR19SU1Q7CiAjICAgICAgIGVuZGlmCiAKLSAgICAgICAgLyogCi0gICAgICAgICAqIENsZWFyIHJlc2V0IG9uIFNDTEsgQlJHCi0gICAgICAgICAqLworCS8qCisJICogQ2xlYXIgcmVzZXQgb24gU0NMSyBCUkcKKwkgKi8KICMgICAgICAgaWYgKFNDTEtfQlJHID09IDApCi0gICAgICAgICAgICAqSU1fQlJHQzEgPSBzY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKKwkgICAgKklNX0JSR0MxID0gc2Nsa19icmcgJiB+Q1BNX0JSR19SU1Q7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSAxKQotICAgICAgICAgICAgKklNX0JSR0MyID0gc2Nsa19icmcgJiB+Q1BNX0JSR19SU1Q7CisJICAgICpJTV9CUkdDMiA9IHNjbGtfYnJnICYgfkNQTV9CUkdfUlNUOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gMikKLSAgICAgICAgICAgICpJTV9CUkdDMyA9IHNjbGtfYnJnICYgfkNQTV9CUkdfUlNUOworCSAgICAqSU1fQlJHQzMgPSBzY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDMpCi0gICAgICAgICAgICAqSU1fQlJHQzQgPSBzY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKKwkgICAgKklNX0JSR0M0ID0gc2Nsa19icmcgJiB+Q1BNX0JSR19SU1Q7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSA0KQotICAgICAgICAgICAgKklNX0JSR0M1ID0gc2Nsa19icmcgJiB+Q1BNX0JSR19SU1Q7CisJICAgICpJTV9CUkdDNSA9IHNjbGtfYnJnICYgfkNQTV9CUkdfUlNUOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gNSkKLSAgICAgICAgICAgICpJTV9CUkdDNiA9IHNjbGtfYnJnICYgfkNQTV9CUkdfUlNUOworCSAgICAqSU1fQlJHQzYgPSBzY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDYpCi0gICAgICAgICAgICAqSU1fQlJHQzcgPSBzY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKKwkgICAgKklNX0JSR0M3ID0gc2Nsa19icmcgJiB+Q1BNX0JSR19SU1Q7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSA3KQotICAgICAgICAgICAgKklNX0JSR0M4ID0gc2Nsa19icmcgJiB+Q1BNX0JSR19SU1Q7CisJICAgICpJTV9CUkdDOCA9IHNjbGtfYnJnICYgfkNQTV9CUkdfUlNUOwogIyAgICAgICBlbmRpZgogCi0gICAgICAgIC8qIAotICAgICAgICAgKiBDbGVhciByZXNldCBvbiBMUkNMSyBCUkcKLSAgICAgICAgICovCisJLyoKKwkgKiBDbGVhciByZXNldCBvbiBMUkNMSyBCUkcKKwkgKi8KICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSAwKQotICAgICAgICAgICAgKklNX0JSR0MxID0gbHJjbGtfYnJnICYgfkNQTV9CUkdfUlNUOworCSAgICAqSU1fQlJHQzEgPSBscmNsa19icmcgJiB+Q1BNX0JSR19SU1Q7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gMSkKLSAgICAgICAgICAgICpJTV9CUkdDMiA9IGxyY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKKwkgICAgKklNX0JSR0MyID0gbHJjbGtfYnJnICYgfkNQTV9CUkdfUlNUOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDIpCi0gICAgICAgICAgICAqSU1fQlJHQzMgPSBscmNsa19icmcgJiB+Q1BNX0JSR19SU1Q7CisJICAgICpJTV9CUkdDMyA9IGxyY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSAzKQotICAgICAgICAgICAgKklNX0JSR0M0ID0gbHJjbGtfYnJnICYgfkNQTV9CUkdfUlNUOworCSAgICAqSU1fQlJHQzQgPSBscmNsa19icmcgJiB+Q1BNX0JSR19SU1Q7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gNCkKLSAgICAgICAgICAgICpJTV9CUkdDNSA9IGxyY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKKwkgICAgKklNX0JSR0M1ID0gbHJjbGtfYnJnICYgfkNQTV9CUkdfUlNUOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDUpCi0gICAgICAgICAgICAqSU1fQlJHQzYgPSBscmNsa19icmcgJiB+Q1BNX0JSR19SU1Q7CisJICAgICpJTV9CUkdDNiA9IGxyY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSA2KQotICAgICAgICAgICAgKklNX0JSR0M3ID0gbHJjbGtfYnJnICYgfkNQTV9CUkdfUlNUOworCSAgICAqSU1fQlJHQzcgPSBscmNsa19icmcgJiB+Q1BNX0JSR19SU1Q7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gNykKLSAgICAgICAgICAgICpJTV9CUkdDOCA9IGxyY2xrX2JyZyAmIH5DUE1fQlJHX1JTVDsKKwkgICAgKklNX0JSR0M4ID0gbHJjbGtfYnJnICYgfkNQTV9CUkdfUlNUOwogIyAgICAgICBlbmRpZgotCQorCiAJLyoKIAkgKiBSZXN0b3JlIHRoZSBJbnRlcnJ1cHQgc3RhdGUKIAkgKi8KIAlpZiAoZmxhZykgewotICAgICAgICAgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKKwkgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKIAl9CiAjICAgZWxzZQotICAgICAgICAvKgotICAgICAgICAgKiBSZXNldCB0aGUgY2xvY2tzCi0gICAgICAgICAqLwotICAgICAgICBEYXFfQlJHX1Jlc2V0KE1DTEtfQlJHKTsKLSAgICAgICAgRGFxX0JSR19SZXNldChTQ0xLX0JSRyk7Ci0gICAgICAgIERhcV9CUkdfUmVzZXQoTFJDTEtfQlJHKTsKKwkvKgorCSAqIFJlc2V0IHRoZSBjbG9ja3MKKwkgKi8KKwlEYXFfQlJHX1Jlc2V0KE1DTEtfQlJHKTsKKwlEYXFfQlJHX1Jlc2V0KFNDTEtfQlJHKTsKKwlEYXFfQlJHX1Jlc2V0KExSQ0xLX0JSRyk7CiAjICAgZW5kaWYKIH0KIApAQCAtNjc2LDg4ICs2NzYsODggQEAKICNlbmRpZgogCiAjICAgaWZkZWYgVElHSFRFTl9VUF9CUkdfVElNSU5HCi0gICAgICAgIC8qIAotICAgICAgICAgKiBPYnRhaW4gdGhlIGVuYWJsZWQgTUNMSyBCUkcgdmFsdWUKLSAgICAgICAgICovCisJLyoKKwkgKiBPYnRhaW4gdGhlIGVuYWJsZWQgTUNMSyBCUkcgdmFsdWUKKwkgKi8KICMgICAgICAgaWYgKE1DTEtfQlJHID09IDApCi0gICAgICAgICAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzEgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKKwkgICAgbWNsa19icmcgPSAoKklNX0JSR0MxICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSAxKQotICAgICAgICAgICAgbWNsa19icmcgPSAoKklNX0JSR0MyICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CisJICAgIG1jbGtfYnJnID0gKCpJTV9CUkdDMiAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gMikKLSAgICAgICAgICAgIG1jbGtfYnJnID0gKCpJTV9CUkdDMyAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOworCSAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzMgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDMpCi0gICAgICAgICAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzQgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKKwkgICAgbWNsa19icmcgPSAoKklNX0JSR0M0ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSA0KQotICAgICAgICAgICAgbWNsa19icmcgPSAoKklNX0JSR0M1ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CisJICAgIG1jbGtfYnJnID0gKCpJTV9CUkdDNSAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gNSkKLSAgICAgICAgICAgIG1jbGtfYnJnID0gKCpJTV9CUkdDNiAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOworCSAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzYgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDYpCi0gICAgICAgICAgICBtY2xrX2JyZyA9ICgqSU1fQlJHQzcgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKKwkgICAgbWNsa19icmcgPSAoKklNX0JSR0M3ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSA3KQotICAgICAgICAgICAgbWNsa19icmcgPSAoKklNX0JSR0M4ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CisJICAgIG1jbGtfYnJnID0gKCpJTV9CUkdDOCAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogCi0gICAgICAgIC8qIAotICAgICAgICAgKiBPYnRhaW4gdGhlIGVuYWJsZWQgU0NMSyBCUkcgdmFsdWUKLSAgICAgICAgICovCisJLyoKKwkgKiBPYnRhaW4gdGhlIGVuYWJsZWQgU0NMSyBCUkcgdmFsdWUKKwkgKi8KICMgICAgICAgaWYgKFNDTEtfQlJHID09IDApCi0gICAgICAgICAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzEgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKKwkgICAgc2Nsa19icmcgPSAoKklNX0JSR0MxICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSAxKQotICAgICAgICAgICAgc2Nsa19icmcgPSAoKklNX0JSR0MyICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CisJICAgIHNjbGtfYnJnID0gKCpJTV9CUkdDMiAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gMikKLSAgICAgICAgICAgIHNjbGtfYnJnID0gKCpJTV9CUkdDMyAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOworCSAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzMgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDMpCi0gICAgICAgICAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzQgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKKwkgICAgc2Nsa19icmcgPSAoKklNX0JSR0M0ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSA0KQotICAgICAgICAgICAgc2Nsa19icmcgPSAoKklNX0JSR0M1ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CisJICAgIHNjbGtfYnJnID0gKCpJTV9CUkdDNSAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gNSkKLSAgICAgICAgICAgIHNjbGtfYnJnID0gKCpJTV9CUkdDNiAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOworCSAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzYgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDYpCi0gICAgICAgICAgICBzY2xrX2JyZyA9ICgqSU1fQlJHQzcgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKKwkgICAgc2Nsa19icmcgPSAoKklNX0JSR0M3ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSA3KQotICAgICAgICAgICAgc2Nsa19icmcgPSAoKklNX0JSR0M4ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CisJICAgIHNjbGtfYnJnID0gKCpJTV9CUkdDOCAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogCi0gICAgICAgIC8qIAotICAgICAgICAgKiBPYnRhaW4gdGhlIGVuYWJsZWQgTFJDTEsgQlJHIHZhbHVlCi0gICAgICAgICAqLworCS8qCisJICogT2J0YWluIHRoZSBlbmFibGVkIExSQ0xLIEJSRyB2YWx1ZQorCSAqLwogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDApCi0gICAgICAgICAgICBscmNsa19icmcgPSAoKklNX0JSR0MxICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CisJICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzEgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSAxKQotICAgICAgICAgICAgbHJjbGtfYnJnID0gKCpJTV9CUkdDMiAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOworCSAgICBscmNsa19icmcgPSAoKklNX0JSR0MyICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gMikKLSAgICAgICAgICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzMgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKKwkgICAgbHJjbGtfYnJnID0gKCpJTV9CUkdDMyAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDMpCi0gICAgICAgICAgICBscmNsa19icmcgPSAoKklNX0JSR0M0ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CisJICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzQgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSA0KQotICAgICAgICAgICAgbHJjbGtfYnJnID0gKCpJTV9CUkdDNSAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOworCSAgICBscmNsa19icmcgPSAoKklNX0JSR0M1ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gNSkKLSAgICAgICAgICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzYgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKKwkgICAgbHJjbGtfYnJnID0gKCpJTV9CUkdDNiAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDYpCi0gICAgICAgICAgICBscmNsa19icmcgPSAoKklNX0JSR0M3ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CisJICAgIGxyY2xrX2JyZyA9ICgqSU1fQlJHQzcgJiB+Q1BNX0JSR19SU1QpIHwgQ1BNX0JSR19FTjsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSA3KQotICAgICAgICAgICAgbHJjbGtfYnJnID0gKCpJTV9CUkdDOCAmIH5DUE1fQlJHX1JTVCkgfCBDUE1fQlJHX0VOOworCSAgICBscmNsa19icmcgPSAoKklNX0JSR0M4ICYgfkNQTV9CUkdfUlNUKSB8IENQTV9CUkdfRU47CiAjICAgICAgIGVuZGlmCiAKIAkvKiBTYXZlIG9mZiB0aGUgcmVhbCBMUkNMSyB2YWx1ZSAqLwpAQCAtNzY3LDE1ICs3NjcsMTUgQEAKIAlzY2xrX2NudCAgPSAoKHNjbGtfYnJnICYgMHgwMDAwMUZGRSkgPj4gMSkgKyAxOwogCiAJLyogQ29tcHV0ZSB0aGUgZGVsYXkgYXMgYSBmdW5jdGlvbiBvZiBTQ0xLIGNvdW50ICovCi0gICAgICAgIGRlbGF5X2NudCA9ICgoc2Nsa19jbnQgLyA0KSAtIDIpICogMTAgKyA2OworCWRlbGF5X2NudCA9ICgoc2Nsa19jbnQgLyA0KSAtIDIpICogMTAgKyA2OwogCWlmIChEYXFTYW1wbGVSYXRlID09IDQzNDAyKSB7CiAJICBkZWxheV9jbnQrKzsKIAl9CiAKLSAgICAgICAgLyogQ2xlYXIgb3V0IHRoZSBjb3VudCAqLworCS8qIENsZWFyIG91dCB0aGUgY291bnQgKi8KIAl0ZW1wX2xyY2xrX2JyZyA9IHNjbGtfYnJnICYgfjB4MDAwMDFGRkU7CiAKLSAgICAgICAgLyogSW5zZXJ0IHRoZSBjb3VudCAqLworCS8qIEluc2VydCB0aGUgY291bnQgKi8KIAl0ZW1wX2xyY2xrX2JyZyB8PSAoKGRlbGF5X2NudCArIChzY2xrX2NudCAvIDIpIC0gMSkgPDwgMSkgJiAgMHgwMDAwMUZGRTsKIAogCS8qCkBAIC03ODMsMTE2ICs3ODMsMTE2IEBACiAJICovCiAJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCi0gICAgICAgIC8qIAotICAgICAgICAgKiBFbmFibGUgTUNMSyBCUkcKLSAgICAgICAgICovCisJLyoKKwkgKiBFbmFibGUgTUNMSyBCUkcKKwkgKi8KICMgICAgICAgaWYgKE1DTEtfQlJHID09IDApCi0gICAgICAgICAgICAqSU1fQlJHQzEgPSBtY2xrX2JyZzsKKwkgICAgKklNX0JSR0MxID0gbWNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSAxKQotICAgICAgICAgICAgKklNX0JSR0MyID0gbWNsa19icmc7CisJICAgICpJTV9CUkdDMiA9IG1jbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gMikKLSAgICAgICAgICAgICpJTV9CUkdDMyA9IG1jbGtfYnJnOworCSAgICAqSU1fQlJHQzMgPSBtY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDMpCi0gICAgICAgICAgICAqSU1fQlJHQzQgPSBtY2xrX2JyZzsKKwkgICAgKklNX0JSR0M0ID0gbWNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSA0KQotICAgICAgICAgICAgKklNX0JSR0M1ID0gbWNsa19icmc7CisJICAgICpJTV9CUkdDNSA9IG1jbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTUNMS19CUkcgPT0gNSkKLSAgICAgICAgICAgICpJTV9CUkdDNiA9IG1jbGtfYnJnOworCSAgICAqSU1fQlJHQzYgPSBtY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKE1DTEtfQlJHID09IDYpCi0gICAgICAgICAgICAqSU1fQlJHQzcgPSBtY2xrX2JyZzsKKwkgICAgKklNX0JSR0M3ID0gbWNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChNQ0xLX0JSRyA9PSA3KQotICAgICAgICAgICAgKklNX0JSR0M4ID0gbWNsa19icmc7CisJICAgICpJTV9CUkdDOCA9IG1jbGtfYnJnOwogIyAgICAgICBlbmRpZgogCi0gICAgICAgIC8qIAotICAgICAgICAgKiBFbmFibGUgU0NMSyBCUkcKLSAgICAgICAgICovCisJLyoKKwkgKiBFbmFibGUgU0NMSyBCUkcKKwkgKi8KICMgICAgICAgaWYgKFNDTEtfQlJHID09IDApCi0gICAgICAgICAgICAqSU1fQlJHQzEgPSBzY2xrX2JyZzsKKwkgICAgKklNX0JSR0MxID0gc2Nsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSAxKQotICAgICAgICAgICAgKklNX0JSR0MyID0gc2Nsa19icmc7CisJICAgICpJTV9CUkdDMiA9IHNjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gMikKLSAgICAgICAgICAgICpJTV9CUkdDMyA9IHNjbGtfYnJnOworCSAgICAqSU1fQlJHQzMgPSBzY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDMpCi0gICAgICAgICAgICAqSU1fQlJHQzQgPSBzY2xrX2JyZzsKKwkgICAgKklNX0JSR0M0ID0gc2Nsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSA0KQotICAgICAgICAgICAgKklNX0JSR0M1ID0gc2Nsa19icmc7CisJICAgICpJTV9CUkdDNSA9IHNjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoU0NMS19CUkcgPT0gNSkKLSAgICAgICAgICAgICpJTV9CUkdDNiA9IHNjbGtfYnJnOworCSAgICAqSU1fQlJHQzYgPSBzY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKFNDTEtfQlJHID09IDYpCi0gICAgICAgICAgICAqSU1fQlJHQzcgPSBzY2xrX2JyZzsKKwkgICAgKklNX0JSR0M3ID0gc2Nsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChTQ0xLX0JSRyA9PSA3KQotICAgICAgICAgICAgKklNX0JSR0M4ID0gc2Nsa19icmc7CisJICAgICpJTV9CUkdDOCA9IHNjbGtfYnJnOwogIyAgICAgICBlbmRpZgogCi0gICAgICAgIC8qIAotICAgICAgICAgKiBFbmFibGUgTFJDTEsgQlJHICgxc3QgdGltZSAtIHRlbXBvcmFyeSkKLSAgICAgICAgICovCisJLyoKKwkgKiBFbmFibGUgTFJDTEsgQlJHICgxc3QgdGltZSAtIHRlbXBvcmFyeSkKKwkgKi8KICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSAwKQotICAgICAgICAgICAgKklNX0JSR0MxID0gdGVtcF9scmNsa19icmc7CisJICAgICpJTV9CUkdDMSA9IHRlbXBfbHJjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDEpCi0gICAgICAgICAgICAqSU1fQlJHQzIgPSB0ZW1wX2xyY2xrX2JyZzsKKwkgICAgKklNX0JSR0MyID0gdGVtcF9scmNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gMikKLSAgICAgICAgICAgICpJTV9CUkdDMyA9IHRlbXBfbHJjbGtfYnJnOworCSAgICAqSU1fQlJHQzMgPSB0ZW1wX2xyY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSAzKQotICAgICAgICAgICAgKklNX0JSR0M0ID0gdGVtcF9scmNsa19icmc7CisJICAgICpJTV9CUkdDNCA9IHRlbXBfbHJjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDQpCi0gICAgICAgICAgICAqSU1fQlJHQzUgPSB0ZW1wX2xyY2xrX2JyZzsKKwkgICAgKklNX0JSR0M1ID0gdGVtcF9scmNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gNSkKLSAgICAgICAgICAgICpJTV9CUkdDNiA9IHRlbXBfbHJjbGtfYnJnOworCSAgICAqSU1fQlJHQzYgPSB0ZW1wX2xyY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSA2KQotICAgICAgICAgICAgKklNX0JSR0M3ID0gdGVtcF9scmNsa19icmc7CisJICAgICpJTV9CUkdDNyA9IHRlbXBfbHJjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDcpCi0gICAgICAgICAgICAqSU1fQlJHQzggPSB0ZW1wX2xyY2xrX2JyZzsKKwkgICAgKklNX0JSR0M4ID0gdGVtcF9scmNsa19icmc7CiAjICAgICAgIGVuZGlmCi0JCi0gICAgICAgIC8qIAotICAgICAgICAgKiBFbmFibGUgTFJDTEsgQlJHICgybmQgdGltZSAtIHBlcm1hbmVudCkKLSAgICAgICAgICovCisKKwkvKgorCSAqIEVuYWJsZSBMUkNMSyBCUkcgKDJuZCB0aW1lIC0gcGVybWFuZW50KQorCSAqLwogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDApCi0gICAgICAgICAgICAqSU1fQlJHQzEgPSByZWFsX2xyY2xrX2JyZzsKKwkgICAgKklNX0JSR0MxID0gcmVhbF9scmNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gMSkKLSAgICAgICAgICAgICpJTV9CUkdDMiA9IHJlYWxfbHJjbGtfYnJnOworCSAgICAqSU1fQlJHQzIgPSByZWFsX2xyY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSAyKQotICAgICAgICAgICAgKklNX0JSR0MzID0gcmVhbF9scmNsa19icmc7CisJICAgICpJTV9CUkdDMyA9IHJlYWxfbHJjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDMpCi0gICAgICAgICAgICAqSU1fQlJHQzQgPSByZWFsX2xyY2xrX2JyZzsKKwkgICAgKklNX0JSR0M0ID0gcmVhbF9scmNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gNCkKLSAgICAgICAgICAgICpJTV9CUkdDNSA9IHJlYWxfbHJjbGtfYnJnOworCSAgICAqSU1fQlJHQzUgPSByZWFsX2xyY2xrX2JyZzsKICMgICAgICAgZW5kaWYKICMgICAgICAgaWYgKExSQ0xLX0JSRyA9PSA1KQotICAgICAgICAgICAgKklNX0JSR0M2ID0gcmVhbF9scmNsa19icmc7CisJICAgICpJTV9CUkdDNiA9IHJlYWxfbHJjbGtfYnJnOwogIyAgICAgICBlbmRpZgogIyAgICAgICBpZiAoTFJDTEtfQlJHID09IDYpCi0gICAgICAgICAgICAqSU1fQlJHQzcgPSByZWFsX2xyY2xrX2JyZzsKKwkgICAgKklNX0JSR0M3ID0gcmVhbF9scmNsa19icmc7CiAjICAgICAgIGVuZGlmCiAjICAgICAgIGlmIChMUkNMS19CUkcgPT0gNykKLSAgICAgICAgICAgICpJTV9CUkdDOCA9IHJlYWxfbHJjbGtfYnJnOworCSAgICAqSU1fQlJHQzggPSByZWFsX2xyY2xrX2JyZzsKICMgICAgICAgZW5kaWYKIAogCS8qCkBAIC05MDAsMTQgKzkwMCwxNCBAQAogCSAqLwogCWlmIChmbGFnKSB7CiAJICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7Ci0gICAgICAgIH0KKwl9CiAjICAgZWxzZQotICAgICAgICAvKgotICAgICAgICAgKiBFbmFibGUgdGhlIGNsb2NrcwotICAgICAgICAgKi8KLSAgICAgICAgRGFxX0JSR19FbmFibGUoTFJDTEtfQlJHKTsKLSAgICAgICAgRGFxX0JSR19FbmFibGUoU0NMS19CUkcpOwotICAgICAgICBEYXFfQlJHX0VuYWJsZShNQ0xLX0JSRyk7CisJLyoKKwkgKiBFbmFibGUgdGhlIGNsb2NrcworCSAqLworCURhcV9CUkdfRW5hYmxlKExSQ0xLX0JSRyk7CisJRGFxX0JSR19FbmFibGUoU0NMS19CUkcpOworCURhcV9CUkdfRW5hYmxlKE1DTEtfQlJHKTsKICMgICBlbmRpZgogfQogCkBAIC05MjAsNyArOTIwLDcgQEAKIAogICAgIHByaW50ZigiXG5CUkc6XG4iKTsKICAgICBpZiAoaW1tci0+aW1fYnJnYzQgIT0gMCkgewotICAgICAgICBwcmludGYoIlx0YnJnYzRcdDB4JTA4eCBAIDB4JTA4eCwgJTVkIGNvdW50LCAlZCBleHRjLCAlOHMsICBNQ0xLXG4iLAorCXByaW50ZigiXHRicmdjNFx0MHglMDh4IEAgMHglMDh4LCAlNWQgY291bnQsICVkIGV4dGMsICU4cywgIE1DTEtcbiIsCiAJICAgICAgIGltbXItPmltX2JyZ2M0LAogCSAgICAgICAodWludCkmKGltbXItPmltX2JyZ2M0KSwKIAkgICAgICAgRGFxX0JSR19HZXRfQ291bnQoMyksCkBAIC05MjgsNyArOTI4LDcgQEAKIAkgICAgICAgRGFxX0JSR19HZXRfRXh0Q2xrX0Rlc2NyaXB0aW9uKDMpKTsKICAgICB9CiAgICAgaWYgKGltbXItPmltX2JyZ2M4ICE9IDApIHsKLSAgICAgICAgcHJpbnRmKCJcdGJyZ2M4XHQweCUwOHggQCAweCUwOHgsICU1ZCBjb3VudCwgJWQgZXh0YywgJThzLCAgU0NMS1xuIiwKKwlwcmludGYoIlx0YnJnYzhcdDB4JTA4eCBAIDB4JTA4eCwgJTVkIGNvdW50LCAlZCBleHRjLCAlOHMsICBTQ0xLXG4iLAogCSAgICAgICBpbW1yLT5pbV9icmdjOCwKIAkgICAgICAgKHVpbnQpJihpbW1yLT5pbV9icmdjOCksCiAJICAgICAgIERhcV9CUkdfR2V0X0NvdW50KDcpLApAQCAtOTM2LDcgKzkzNiw3IEBACiAJICAgICAgIERhcV9CUkdfR2V0X0V4dENsa19EZXNjcmlwdGlvbig3KSk7CiAgICAgfQogICAgIGlmIChpbW1yLT5pbV9icmdjNiAhPSAwKSB7Ci0gICAgICAgIHByaW50ZigiXHRicmdjNlx0MHglMDh4IEAgMHglMDh4LCAlNWQgY291bnQsICVkIGV4dGMsICU4cywgIExSQ0xLXG4iLAorCXByaW50ZigiXHRicmdjNlx0MHglMDh4IEAgMHglMDh4LCAlNWQgY291bnQsICVkIGV4dGMsICU4cywgIExSQ0xLXG4iLAogCSAgICAgICBpbW1yLT5pbV9icmdjNiwKIAkgICAgICAgKHVpbnQpJihpbW1yLT5pbV9icmdjNiksCiAJICAgICAgIERhcV9CUkdfR2V0X0NvdW50KDUpLApAQCAtOTQ0LDcgKzk0NCw3IEBACiAJICAgICAgIERhcV9CUkdfR2V0X0V4dENsa19EZXNjcmlwdGlvbig1KSk7CiAgICAgfQogICAgIGlmIChpbW1yLT5pbV9icmdjMSAhPSAwKSB7Ci0gICAgICAgIHByaW50ZigiXHRicmdjMVx0MHglMDh4IEAgMHglMDh4LCAlNWQgY291bnQsICVkIGV4dGMsICU4cywgIFNNQzFcbiIsCisJcHJpbnRmKCJcdGJyZ2MxXHQweCUwOHggQCAweCUwOHgsICU1ZCBjb3VudCwgJWQgZXh0YywgJThzLCAgU01DMVxuIiwKIAkgICAgICAgaW1tci0+aW1fYnJnYzEsCiAJICAgICAgICh1aW50KSYoaW1tci0+aW1fYnJnYzEpLAogCSAgICAgICBEYXFfQlJHX0dldF9Db3VudCgwKSwKQEAgLTk1Miw3ICs5NTIsNyBAQAogCSAgICAgICBEYXFfQlJHX0dldF9FeHRDbGtfRGVzY3JpcHRpb24oMCkpOwogICAgIH0KICAgICBpZiAoaW1tci0+aW1fYnJnYzIgIT0gMCkgewotICAgICAgICBwcmludGYoIlx0YnJnYzJcdDB4JTA4eCBAIDB4JTA4eCwgJTVkIGNvdW50LCAlZCBleHRjLCAlOHMsICBTTUMyXG4iLAorCXByaW50ZigiXHRicmdjMlx0MHglMDh4IEAgMHglMDh4LCAlNWQgY291bnQsICVkIGV4dGMsICU4cywgIFNNQzJcbiIsCiAJICAgICAgIGltbXItPmltX2JyZ2MyLAogCSAgICAgICAodWludCkmKGltbXItPmltX2JyZ2MyKSwKIAkgICAgICAgRGFxX0JSR19HZXRfQ291bnQoMSksCkBAIC05NjAsNyArOTYwLDcgQEAKIAkgICAgICAgRGFxX0JSR19HZXRfRXh0Q2xrX0Rlc2NyaXB0aW9uKDEpKTsKICAgICB9CiAgICAgaWYgKGltbXItPmltX2JyZ2MzICE9IDApIHsKLSAgICAgICAgcHJpbnRmKCJcdGJyZ2MzXHQweCUwOHggQCAweCUwOHgsICU1ZCBjb3VudCwgJWQgZXh0YywgJThzLCAgU0NDMVxuIiwKKwlwcmludGYoIlx0YnJnYzNcdDB4JTA4eCBAIDB4JTA4eCwgJTVkIGNvdW50LCAlZCBleHRjLCAlOHMsICBTQ0MxXG4iLAogCSAgICAgICBpbW1yLT5pbV9icmdjMywKIAkgICAgICAgKHVpbnQpJihpbW1yLT5pbV9icmdjMyksCiAJICAgICAgIERhcV9CUkdfR2V0X0NvdW50KDIpLApAQCAtOTY4LDcgKzk2OCw3IEBACiAJICAgICAgIERhcV9CUkdfR2V0X0V4dENsa19EZXNjcmlwdGlvbigyKSk7CiAgICAgfQogICAgIGlmIChpbW1yLT5pbV9icmdjNSAhPSAwKSB7Ci0gICAgICAgIHByaW50ZigiXHRicmdjNVx0MHglMDh4IEAgMHglMDh4LCAlNWQgY291bnQsICVkIGV4dGMsICU4c1xuIiwKKwlwcmludGYoIlx0YnJnYzVcdDB4JTA4eCBAIDB4JTA4eCwgJTVkIGNvdW50LCAlZCBleHRjLCAlOHNcbiIsCiAJICAgICAgIGltbXItPmltX2JyZ2M1LAogCSAgICAgICAodWludCkmKGltbXItPmltX2JyZ2M1KSwKIAkgICAgICAgRGFxX0JSR19HZXRfQ291bnQoNCksCkBAIC05NzYsNyArOTc2LDcgQEAKIAkgICAgICAgRGFxX0JSR19HZXRfRXh0Q2xrX0Rlc2NyaXB0aW9uKDQpKTsKICAgICB9CiAgICAgaWYgKGltbXItPmltX2JyZ2M3ICE9IDApIHsKLSAgICAgICAgcHJpbnRmKCJcdGJyZ2M3XHQweCUwOHggQCAweCUwOHgsICU1ZCBjb3VudCwgJWQgZXh0YywgJThzXG4iLAorCXByaW50ZigiXHRicmdjN1x0MHglMDh4IEAgMHglMDh4LCAlNWQgY291bnQsICVkIGV4dGMsICU4c1xuIiwKIAkgICAgICAgaW1tci0+aW1fYnJnYzcsCiAJICAgICAgICh1aW50KSYoaW1tci0+aW1fYnJnYzcpLAogCSAgICAgICBEYXFfQlJHX0dldF9Db3VudCg2KSwKQEAgLTk4NSwxNCArOTg1LDE0IEBACiAgICAgfQogCiAjICAgaWZkZWYgUlVOX1NDTEtfT05fQlJHX0lOVAotICAgICAgICBtY2xrX2Rpdmlzb3IgPSBEYXFfQlJHX1JhdGUoTUNMS19CUkcpIC8gRGFxX0JSR19SYXRlKFNDTEtfQlJHKTsKKwltY2xrX2Rpdmlzb3IgPSBEYXFfQlJHX1JhdGUoTUNMS19CUkcpIC8gRGFxX0JSR19SYXRlKFNDTEtfQlJHKTsKICMgICBlbHNlCi0gICAgICAgIG1jbGtfZGl2aXNvciA9IERhcV9CUkdfR2V0X0NvdW50KFNDTEtfQlJHKTsKKwltY2xrX2Rpdmlzb3IgPSBEYXFfQlJHX0dldF9Db3VudChTQ0xLX0JSRyk7CiAjICAgZW5kaWYKICMgICBpZmRlZiBSVU5fTFJDTEtfT05fQlJHX0lOVAotICAgICAgICBzY2xrX2Rpdmlzb3IgPSBEYXFfQlJHX1JhdGUoU0NMS19CUkcpIC8gRGFxX0JSR19SYXRlKExSQ0xLX0JSRyk7CisJc2Nsa19kaXZpc29yID0gRGFxX0JSR19SYXRlKFNDTEtfQlJHKSAvIERhcV9CUkdfUmF0ZShMUkNMS19CUkcpOwogIyAgIGVsc2UKLSAgICAgICAgc2Nsa19kaXZpc29yID0gRGFxX0JSR19HZXRfQ291bnQoTFJDTEtfQlJHKTsKKwlzY2xrX2Rpdmlzb3IgPSBEYXFfQlJHX0dldF9Db3VudChMUkNMS19CUkcpOwogIyAgIGVuZGlmCiAKICAgICBwcmludGYoIlxuQURDL0RBQyBDbG9ja2luZyAoJWQvJWQpOlxuIiwgc2Nsa19kaXZpc29yLCBtY2xrX2Rpdmlzb3IpOwpAQCAtMTAwMSwyMyArMTAwMSwyMyBAQAogCSAgIG1jbGtfZGl2aXNvciwKIAkgICBtY2xrX2Rpdmlzb3IgKiBzY2xrX2Rpdmlzb3IpOwogIyAgIGlmZGVmIFJVTl9TQ0xLX09OX0JSR19JTlQKLSAgICAgICAgcHJpbnRmKCJcdFNDTEsgICU4ZCBIeiwgb3IgJTNkeCBMUkNMS1xuIiwKKwlwcmludGYoIlx0U0NMSyAgJThkIEh6LCBvciAlM2R4IExSQ0xLXG4iLAogCSAgICAgICBEYXFfQlJHX1JhdGUoU0NMS19CUkcpLAogCSAgICAgICBzY2xrX2Rpdmlzb3IpOwogIyAgIGVsc2UKLSAgICAgICAgcHJpbnRmKCJcdFNDTEsgICU4ZCBIeiwgb3IgJTNkeCBMUkNMS1xuIiwKKwlwcmludGYoIlx0U0NMSyAgJThkIEh6LCBvciAlM2R4IExSQ0xLXG4iLAogCSAgICAgICBEYXFfQlJHX1JhdGUoTUNMS19CUkcpIC8gbWNsa19kaXZpc29yLAogCSAgICAgICBzY2xrX2Rpdmlzb3IpOwogIyAgIGVuZGlmCiAjICAgaWZkZWYgUlVOX0xSQ0xLX09OX0JSR19JTlQKLSAgICAgICAgcHJpbnRmKCJcdExSQ0xLICU4ZCBIelxuIiwKKwlwcmludGYoIlx0TFJDTEsgJThkIEh6XG4iLAogCSAgICAgICBEYXFfQlJHX1JhdGUoTFJDTEtfQlJHKSk7CiAjICAgZWxzZQogIyAgICAgICBpZmRlZiBSVU5fU0NMS19PTl9CUkdfSU5UCi0gICAgICAgICAgICBwcmludGYoIlx0TFJDTEsgJThkIEh6XG4iLAorCSAgICBwcmludGYoIlx0TFJDTEsgJThkIEh6XG4iLAogCQkgICBEYXFfQlJHX1JhdGUoU0NMS19CUkcpIC8gc2Nsa19kaXZpc29yKTsKICMgICAgICAgZWxzZQotICAgICAgICAgICAgcHJpbnRmKCJcdExSQ0xLICU4ZCBIelxuIiwKKwkgICAgcHJpbnRmKCJcdExSQ0xLICU4ZCBIelxuIiwKIAkJICAgRGFxX0JSR19SYXRlKE1DTEtfQlJHKSAvIChtY2xrX2Rpdmlzb3IgKiBzY2xrX2Rpdmlzb3IpKTsKICMgICAgICAgZW5kaWYKICMgICBlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvc2Fjc25nL2Nsa2luaXQuaCBiL2JvYXJkL3NhY3NuZy9jbGtpbml0LmgKaW5kZXggMjczMWYyZS4uMDExNjM4ZiAxMDA2NDQKLS0tIGEvYm9hcmQvc2Fjc25nL2Nsa2luaXQuaAorKysgYi9ib2FyZC9zYWNzbmcvY2xraW5pdC5oCkBAIC01MCwxNiArNTAsMTYgQEAKIAogI2RlZmluZSBNQ0xLX0RJVklTT1IgIDQgICAgICAgLyogIFNDTEsgPSBNQ0xLIC8gTUNMS19ESVZJU09SICovCiAjZGVmaW5lIFNDTEtfRElWSVNPUiAoRGFxNjR4U2FtcGxpbmcgPyA2NCA6IDEyOCkKLQkJICAgICAgICAgICAgICAvKiBMUkNMSyA9IFNDTEsgLyBTQ0xLX0RJVklTT1IgKi8KKwkJCSAgICAgIC8qIExSQ0xLID0gU0NMSyAvIFNDTEtfRElWSVNPUiAqLwogCiAjZGVmaW5lIFRJR0hURU5fVVBfQlJHX0VOX1RJTUlORyAvKiBUaWdodGVuIHVwIHRoZSBCUkcgZW5hYmxlIHRpbWluZyAgICAgICovCiAjZGVmaW5lIFJVTl9TQ0xLX09OX0JSR19JTlQgICAgICAvKiBSdW4gU0NMSyBvbiBCUkdfSU5UIGluc3RlYWQgb2YgTUNMSyAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgODI2MCAoTWFzayBCLjMpIHNlZW1zIHRvIGhhdmUgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9ibGVtcyBnZW5lcmF0aW5nIFNDTEsgZnJvbSBNQ0xLICAgICovCisJCQkJIC8qIFRoZSA4MjYwIChNYXNrIEIuMykgc2VlbXMgdG8gaGF2ZSAgICAgKi8KKwkJCQkgLyogcHJvYmxlbXMgZ2VuZXJhdGluZyBTQ0xLIGZyb20gTUNMSyAgICAqLwogCQkJCSAvKiB2aWEgQ0xLOS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFJVTl9MUkNMS19PTl9CUkdfSU5UICAgICAvKiBSdW4gTFJDTEsgb24gQlJHX0lOVCBpbnN0ZWFkIG9mIFNDTEsgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgODI2MCAoTWFzayBCLjMpIHNlZW1zIHRvIGhhdmUgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9ibGVtcyBnZW5lcmF0aW5nIExSQ0xLIGZyb20gU0NMSyAgICovCisJCQkJIC8qIFRoZSA4MjYwIChNYXNrIEIuMykgc2VlbXMgdG8gaGF2ZSAgICAgKi8KKwkJCQkgLyogcHJvYmxlbXMgZ2VuZXJhdGluZyBMUkNMSyBmcm9tIFNDTEsgICAqLwogCiAjZGVmaW5lIE5VTV9MUkNMS1NfVE9fU1RBQklMSVpFIDEgIC8qIE51bWJlciBvZiBMUkNMSyBwZXJpb2QgKHNhbXBsZSkgICAgICovCiAJCQkJICAgLyogdG8gd2FpdCBmb3IgdGhlIGNsb2NrIHRvIHN0YWJpbGl6ZSAgKi8KQEAgLTY3LDkgKzY3LDkgQEAKICNkZWZpbmUgQ1BNX0NMSyAgICAgIChnZC0+YmQtPmJpX2NwbWZyZXEpCiAjZGVmaW5lIERGQlJHICAgICAgICA0CiAjZGVmaW5lIEJSR19JTlRfQ0xLICAoQ1BNX0NMSyAqIDIgLyBERkJSRykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJSRyA9IENQTSAqIDIgLyBERkJSRyAoU2VjdCA5LjgpICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCUkcgPSBDUE0gKiAyIC8gNCAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQlJHID0gQ1BNIC8gMiAgICAgICAgICAgICAgICAgICAgKi8KKwkJCSAgICAgIC8qIEJSRyA9IENQTSAqIDIgLyBERkJSRyAoU2VjdCA5LjgpICovCisJCQkgICAgICAvKiBCUkcgPSBDUE0gKiAyIC8gNCAgICAgICAgICAgICAgICAqLworCQkJICAgICAgLyogQlJHID0gQ1BNIC8gMiAgICAgICAgICAgICAgICAgICAgKi8KIAogI2RlZmluZSBDUE1fQlJHX0VYVENfTUFTSwkoKHVpbnQpMHgwMDAwQzAwMCkKICNkZWZpbmUgQ1BNX0JSR19FWFRDX1NISUZUICAgICAgMTQKZGlmZiAtLWdpdCBhL2JvYXJkL3NhY3NuZy9pb2NvbmZpZy5oIGIvYm9hcmQvc2Fjc25nL2lvY29uZmlnLmgKaW5kZXggNjg1N2Y5OS4uYmUxY2U3YyAxMDA2NDQKLS0tIGEvYm9hcmQvc2Fjc25nL2lvY29uZmlnLmgKKysrIGIvYm9hcmQvc2Fjc25nL2lvY29uZmlnLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogI2RlZmluZSBHUElPIDAgIC8qIFBQQVJ4IDA6IEdlbmVyYWwgUHVycG9zZSBJL08gKi8KICNkZWZpbmUgU1BFQyAxICAvKiBQUEFSeCAxOiBkZWRpY2F0ZWQgdG8gYSBwZXJpcGhlcmFsIGZ1bmN0aW9uLCAqLwotICAgICAgICAgICAgICAgIC8qICAgICAgICAgIGkuZS4gdGhlIHBvcnQgaGFzIGEgU1BFQ2lhbCB1c2UuICovCisJCS8qICAgICAgICAgIGkuZS4gdGhlIHBvcnQgaGFzIGEgU1BFQ2lhbCB1c2UuICovCiAKICNkZWZpbmUgQUNUViAwICAvKiBQT0RSeCAwOiBBQ1RpVmVseSBkcml2ZW4gYXMgYW4gb3V0cHV0ICovCiAjZGVmaW5lIE9QRU4gMSAgLyogUE9EUnggMTogT1BFTi1kcmFpbiBkcml2ZXIgKi8KQEAgLTY3LDEyICs2NywxMiBAQAogCS8qIFBBMjEgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBTVExFRDFfRU4qICAgICAqLwogCS8qIFBBMjAgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBQTEVEM19FTiogICAgICAqLwogCS8qIFBBMTkgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBQTEVEMl9FTiogICAgICAqLwotICAgICAgICAvKiBQQTE4ICovIHsgQ09ORiwgR1BJTywgICAwLCAgRE9VVCwgQUNUViwgICAwICAgfSwgLyogUExFRDFfRU4qICAgICAgKi8KKwkvKiBQQTE4ICovIHsgQ09ORiwgR1BJTywgICAwLCAgRE9VVCwgQUNUViwgICAwICAgfSwgLyogUExFRDFfRU4qICAgICAgKi8KIAkvKiBQQTE3ICovIHsgQ09ORiwgR1BJTywgICAwLCAgRE9VVCwgQUNUViwgICAwICAgfSwgLyogTi9DICAgICAgICAgICAgKi8KIAkvKiBQQTE2ICovIHsgQ09ORiwgR1BJTywgICAwLCAgRE9VVCwgQUNUViwgICAwICAgfSwgLyogREFDX1JTVCogICAgICAgKi8KIAkvKiBQQTE1ICovIHsgQ09ORiwgR1BJTywgICAwLCAgRE9VVCwgQUNUViwgICAxICAgfSwgLyogQ0gzNFNEQVRBX1BVICAgKi8KLSAgICAgICAgLyogUEExNCAqLyB7IENPTkYsIEdQSU8sICAgMCwgIERPVVQsIEFDVFYsICAgMSAgIH0sIC8qIENIMTJTREFUQV9QVSAgICovCi0gICAgICAgIC8qIFBBMTMgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBTTFJDTEtfRU4qICAgICAqLworCS8qIFBBMTQgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBDSDEyU0RBVEFfUFUgICAqLworCS8qIFBBMTMgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBTTFJDTEtfRU4qICAgICAqLwogCS8qIFBBMTIgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBNVFJYXzRBQ0RDKiAgICAqLwogCS8qIFBBMTEgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBNVFJYXzRURURTKiAgICAqLwogCS8qIFBBMTAgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBNVFJYXzRYVERTKiAgICAqLwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJLyogUEMyMCAqLyB7IENPTkYsIEdQSU8sICAgMCwgIERPVVQsIEFDVFYsICAgMCAgIH0sIC8qIE4vQyAgICAgICAgICAgICovCiAJLyogUEMxOSAqLyB7IENPTkYsIFNQRUMsICAgMCwgIERJTiwgIEFDVFYsICAgMCAgIH0sIC8qIENMSzEzLCBNSUlfUlhDTEsgICovCiAJLyogUEMxOCAqLyB7IENPTkYsIFNQRUMsICAgMCwgIERJTiwgIEFDVFYsICAgMCAgIH0sIC8qIENMSzE0LCBNSUlfVFhDTEsgICovCi0gICAgICAgIC8qIFBDMTcgKi8geyBDT05GLCBTUEVDLCAgIDAsICBET1VULCBBQ1RWLCAgIDAgICB9LCAvKiBCUkdPOCAoU0NMSykgICAqLworCS8qIFBDMTcgKi8geyBDT05GLCBTUEVDLCAgIDAsICBET1VULCBBQ1RWLCAgIDAgICB9LCAvKiBCUkdPOCAoU0NMSykgICAqLwogCS8qIFBDMTYgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDAgICB9LCAvKiBOL0MgICAgICAgICAgICAqLwogCS8qIFBDMTUgKi8geyBDT05GLCBTUEVDLCAgIDAsICBET1VULCBBQ1RWLCAgIDAgICB9LCAvKiBTTUMyX1RYICAgICAgICAqLwogCS8qIFBDMTQgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDAgICB9LCAvKiBOL0MgICAgICAgICAgICAqLwpAQCAtMTU2LDExICsxNTYsMTEgQEAKIAkvKiBQQzcgICovIHsgQ09ORiwgR1BJTywgICAwLCAgRElOLCAgQUNUViwgICAwICAgfSwgLyogQlBESVNfSU4xICAgICAgKi8KIAkvKiBQQzYgICovIHsgQ09ORiwgR1BJTywgICAwLCAgRE9VVCwgQUNUViwgICAwICAgfSwgLyogTi9DICAgICAgICAgICAgKi8KIAkvKiBQQzUgICovIHsgQ09ORiwgR1BJTywgICAwLCAgRElOLCAgQUNUViwgICAwICAgfSwgLyogQlRTVF9JTjIqICAgICAgKi8KLSAgICAgICAgLyogUEM0ICAqLyB7IENPTkYsIEdQSU8sICAgMCwgIERJTiwgIEFDVFYsICAgMCAgIH0sIC8qIEJUU1RfSU4xKiAgICAgICovCisJLyogUEM0ICAqLyB7IENPTkYsIEdQSU8sICAgMCwgIERJTiwgIEFDVFYsICAgMCAgIH0sIC8qIEJUU1RfSU4xKiAgICAgICovCiAJLyogUEMzICAqLyB7IENPTkYsIEdQSU8sICAgMCwgIERJTiwgIEFDVFYsICAgMCAgIH0sIC8qIE1VU0hfU1RBVCAgICAgICovCiAJLyogUEMyICAqLyB7IENPTkYsIEdQSU8sICAgMCwgIERJTiwgIEFDVFYsICAgMCAgIH0sIC8qIE9VVERSVl9TVEFUICAgICovCiAJLyogUEMxICAqLyB7IENPTkYsIEdQSU8sICAgMCwgIERPVVQsIE9QRU4sICAgMSAgIH0sIC8qIFBIWV9NRElPICAgICAgICovCi0gICAgICAgIC8qIFBDMCAgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBQSFlfTURDICAgICAgICAqLworCS8qIFBDMCAgKi8geyBDT05GLCBHUElPLCAgIDAsICBET1VULCBBQ1RWLCAgIDEgICB9LCAvKiBQSFlfTURDICAgICAgICAqLwogICAgIH0sCiAKICAgICAvKiBQb3J0IEQgKi8KQEAgLTIxNSw0ICsyMTUsMyBAQAogCS8qIFBEMCAgKi8geyBTS0lQLCBHUElPLCAgIDAsICBESU4sICBBQ1RWLCAgIDAgICB9ICAvKiBwaW4gZG9lc24ndCBleGlzdCAqLwogICAgIH0KIH07Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3NhY3NuZy9zYWNzbmcuYyBiL2JvYXJkL3NhY3NuZy9zYWNzbmcuYwppbmRleCAxOWRiYjk3Li4wODZlNDJhIDEwMDY0NAotLS0gYS9ib2FyZC9zYWNzbmcvc2Fjc25nLmMKKysrIGIvYm9hcmQvc2Fjc25nL3NhY3NuZy5jCkBAIC03NSw3ICs3NSw3IEBACiAjZGVmaW5lIEFEQ19JTklUSUFMX0RFTEFZICgxMCAqIEFEQ19WUkVGX0NBUCkgLyogMTAgdXNlYyBwZXIgdUYsIGluIHVzZWMgKi8KICNkZWZpbmUgQURDX1NEQVRBX0RFTEFZICAgIDEwMCAgICAgICAgLyogQURDIFNEQVRBIHJlbGVhc2UgZGVsYXkgaW4gdXNlYyAqLwogI2RlZmluZSBBRENfQ0FMX0RFTEFZICgxMDAwMDAwIC8gSU5JVElBTF9TQU1QTEVfUkFURSAqIDQ1MDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgYXQgbGVhc3QgNDEwMCBMUkNMSydzICovCisJCQkJICAgICAgLyogV2FpdCBhdCBsZWFzdCA0MTAwIExSQ0xLJ3MgKi8KIAogI2RlZmluZSBBRENfUkVHMV9GUkFNRV9TVEFSVCAgICAweDgwICAvKiBGcmFtZSBzdGFydCAqLwogI2RlZmluZSBBRENfUkVHMV9HUk9VTkRfQ0FMICAgICAweDQwICAvKiBHcm91bmQgY2FsaWJyYXRpb24gZW5hYmxlICovCkBAIC0yMDEsMTcgKzIwMSwxNyBAQAogCWVsc2UgaWYoaiA9PSAgNCkgY29scyAgICAgICAgPSBkYXRhICYgMHgwRjsKIAllbHNlIGlmKGogPT0gMTIpIHsKIAkgICAgLyoKLSAgICAgICAgICAgICAqIFJlZnJlc2ggcmF0ZTogdGhpcyBhc3N1bWVzIHRoZSBwcmVzY2FsZXIgaXMgc2V0IHRvCisJICAgICAqIFJlZnJlc2ggcmF0ZTogdGhpcyBhc3N1bWVzIHRoZSBwcmVzY2FsZXIgaXMgc2V0IHRvCiAJICAgICAqIGFwcHJveGltYXRlbHkgMXVTZWMgcGVyIHRpY2suCiAJICAgICAqLwogCSAgICBzd2l0Y2goZGF0YSAmIDB4N0YpIHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGNhc2UgMDogIHBzcnQgPSAgMTQgOyAvKiAgMTUuNjI1dVMgKi8gIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMTogIHBzcnQgPSAgIDI7ICAvKiAgIDMuOXVTICAgKi8gIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogIHBzcnQgPSAgIDY7ICAvKiAgIDcuOHVTICAgKi8gIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogIHBzcnQgPSAgMjk7ICAvKiAgMzEuM3VTICAgKi8gIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogIHBzcnQgPSAgNjA7ICAvKiAgNjIuNXVTICAgKi8gIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNTogIHBzcnQgPSAxMjA7ICAvKiAxMjV1UyAgICAgKi8gIGJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIDA6ICBwc3J0ID0gIDE0IDsgLyogIDE1LjYyNXVTICovICBicmVhazsKKwkJY2FzZSAxOiAgcHNydCA9ICAgMjsgIC8qICAgMy45dVMgICAqLyAgYnJlYWs7CisJCWNhc2UgMjogIHBzcnQgPSAgIDY7ICAvKiAgIDcuOHVTICAgKi8gIGJyZWFrOworCQljYXNlIDM6ICBwc3J0ID0gIDI5OyAgLyogIDMxLjN1UyAgICovICBicmVhazsKKwkJY2FzZSA0OiAgcHNydCA9ICA2MDsgIC8qICA2Mi41dVMgICAqLyAgYnJlYWs7CisJCWNhc2UgNTogIHBzcnQgPSAxMjA7ICAvKiAxMjV1UyAgICAgKi8gIGJyZWFrOwogCSAgICB9CiAJfQogCWVsc2UgaWYoaiA9PSAxNykgYmFua3MgICAgICAgPSBkYXRhOwpAQCAtMjI4LDEzICsyMjgsMTMgQEAKICNlbmRpZgogCSAgICBlbHNlIHsKIAkJcHJpbnRmICgiV0FSTklORzogVW5rbm93biBDQVMgbGF0ZW5jeSAweCUwMlgsIHVzaW5nIDNcbiIsCi0JCSAgICAgICAgZGF0YSk7CisJCQlkYXRhKTsKIAkgICAgfQogCX0KIAllbHNlIGlmKGogPT0gNjMpIHsKIAkgICAgaWYoZGF0YSAhPSBja3N1bSkgewogCQlwcmludGYgKCJXQVJOSU5HOiBDb25maWd1cmF0aW9uIGRhdGEgY2hlY2tzdW0gZmFpbHVyZToiCi0JCSAgICAgICAgIiBpcyAweCUwMngsIGNhbGN1bGF0ZWQgMHglMDJ4XG4iLAorCQkJIiBpcyAweCUwMngsIGNhbGN1bGF0ZWQgMHglMDJ4XG4iLAogCQkJZGF0YSwgY2tzdW0pOwogCSAgICB9CiAJfQpAQCAtMzA5LDcgKzMwOSw3IEBACiAJICAgICBQU0RNUl9BQ1RUT1JXXzhXICAgICAgICB8XAogCSAgICAgUFNETVJfV1JDXzRDICAgICAgICAgICAgfFwKIAkgICAgIFBTRE1SX0VBTVVYICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgUFNETVJfQlVGQ01EKSAgICAgICAgICAgfFwKKwkgICAgIFBTRE1SX0JVRkNNRCkgICAgICAgICAgIHxcCiAJICAgICBjYXNsYXRlbmN5ICAgICAgICAgICAgICB8XAogCSAgICAgKChjYXNsYXRlbmN5IC0gMSkgPDwgNikgfAkvKiBMRE9UT1BSRSBpcyBDTCAtIDEgKi8gXAogCSAgICAgKHNkYW0gPDwgMjQpICAgICAgICAgICAgfFwKQEAgLTMyMyw3ICszMjMsNyBAQAogCSAgICAgUFNETVJfQUNUVE9SV18yVyAgICAgICAgfAkvKiAxIGZvciA3RSBwYXJ0cyAoZmFzdCBQQy0xMzMpICovIFwKIAkgICAgIFBTRE1SX1dSQ18xQyAgICAgICAgICAgIHwJLyogMSBjbG9jayArIDduU2VjICovCiAJICAgICBFQU1VWCAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgIEJVRkNNRCkgICAgICAgICAgICAgICAgIHxcCisJICAgICBCVUZDTUQpICAgICAgICAgICAgICAgICB8XAogCSAgICAgY2FzbGF0ZW5jeSAgICAgICAgICAgICAgfFwKIAkgICAgICgoY2FzbGF0ZW5jeSAtIDEpIDw8IDYpIHwJLyogTERPVE9QUkUgaXMgQ0wgLSAxICovIFwKIAkgICAgIChzZGFtIDw8IDI0KSAgICAgICAgICAgIHxcCkBAIC00MDAsNyArNDAwLDcgQEAKICAgICAgKiB0d28gY2hpcCBzZWxlY3RzIChkb3VibGUgc2lkZWQpLgogICAgICAqLwogICAgIGlmKGNoaXBzZWxlY3RzID4gMSkgewotICAgICAgICByYW1hZGRyICs9IHNkcmFtX3NpemU7CisJcmFtYWRkciArPSBzZHJhbV9zaXplOwogCiAJbWVtY3RsLT5tZW1jX2JyMyA9IENGR19CUjNfUFJFTElNICsgc2RyYW1fc2l6ZTsKIAltZW1jdGwtPm1lbWNfb3IzID0gb3I7CkBAIC00NTksMTMgKzQ1OSwxMyBAQAogCiAgICAgc2FtcGxlX3JhdGUgPSBJTklUSUFMX1NBTVBMRV9SQVRFOwogICAgIGlmICgoZXAgPSBnZXRlbnYoIkRhcVNhbXBsZVJhdGUiKSkgIT0gTlVMTCkgewotICAgICAgICBzYW1wbGVfcmF0ZSA9IHNpbXBsZV9zdHJ0b2woZXAsIE5VTEwsIDEwKTsKKwlzYW1wbGVfcmF0ZSA9IHNpbXBsZV9zdHJ0b2woZXAsIE5VTEwsIDEwKTsKICAgICB9CiAKICAgICBzYW1wbGVfNjR4ICA9IElOSVRJQUxfU0FNUExFXzY0WDsKICAgICBzYW1wbGVfMTI4eCA9IElOSVRJQUxfU0FNUExFXzEyOFg7CiAgICAgaWYgKChlcCA9IGdldGVudigiRGFxNjR4U2FtcGxpbmciKSkgIT0gTlVMTCkgewotICAgICAgICBzYW1wbGVfNjR4ID0gc2ltcGxlX3N0cnRvbChlcCwgTlVMTCwgMTApOworCXNhbXBsZV82NHggPSBzaW1wbGVfc3RydG9sKGVwLCBOVUxMLCAxMCk7CiAJaWYgKHNhbXBsZV82NHgpIHsKIAkgICAgc2FtcGxlXzEyOHggPSAwOwogCX0KQEAgLTQ3NCwxOCArNDc0LDE4IEBACiAJfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKChlcCA9IGdldGVudigiRGFxMTI4eFNhbXBsaW5nIikpICE9IE5VTEwpIHsKKwlpZiAoKGVwID0gZ2V0ZW52KCJEYXExMjh4U2FtcGxpbmciKSkgIT0gTlVMTCkgewogCSAgICBzYW1wbGVfMTI4eCA9IHNpbXBsZV9zdHJ0b2woZXAsIE5VTEwsIDEwKTsKIAkgICAgaWYgKHNhbXBsZV8xMjh4KSB7Ci0JICAgICAgICBzYW1wbGVfNjR4ID0gMDsKKwkJc2FtcGxlXzY0eCA9IDA7CiAJICAgIH0KIAkgICAgZWxzZSB7Ci0JICAgICAgICBzYW1wbGVfNjR4ID0gMTsKKwkJc2FtcGxlXzY0eCA9IDE7CiAJICAgIH0KIAl9CiAgICAgfQogCi0gICAgLyogCisgICAgLyoKICAgICAgKiBTdG9wIHRoZSBjbG9ja3MgYW5kIHdhaXQgZm9yIGF0IGxlYXN0IDEgTFJDTEsgcGVyaW9kCiAgICAgICogdG8gbWFrZSBzdXJlIHRoZSBjbG9ja2luZyBoYXMgcmVhbGx5IHN0b3BwZWQuCiAgICAgICovCkBAIC01MDksMTIgKzUwOSwxMiBAQAogICAgIHNldGVudigiRGFxU2FtcGxlUmF0ZSIsIHN0cl9idWYpOwogCiAgICAgaWYgKHNhbXBsZV82NHgpIHsKLSAgICAgICAgc2V0ZW52KCJEYXE2NHhTYW1wbGluZyIsICAiMSIpOwotICAgICAgICBzZXRlbnYoIkRhcTEyOHhTYW1wbGluZyIsIE5VTEwpOworCXNldGVudigiRGFxNjR4U2FtcGxpbmciLCAgIjEiKTsKKwlzZXRlbnYoIkRhcTEyOHhTYW1wbGluZyIsIE5VTEwpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgc2V0ZW52KCJEYXE2NHhTYW1wbGluZyIsICBOVUxMKTsKLSAgICAgICAgc2V0ZW52KCJEYXExMjh4U2FtcGxpbmciLCAiMSIpOworCXNldGVudigiRGFxNjR4U2FtcGxpbmciLCAgTlVMTCk7CisJc2V0ZW52KCJEYXExMjh4U2FtcGxpbmciLCAiMSIpOwogICAgIH0KIAogICAgIC8qIERpc3BsYXkgdGhlIEFEQy9EQUMgY2xvY2tpbmcgaW5mb3JtYXRpb24gKi8KQEAgLTUyNiw3ICs1MjYsNyBAQAogCiAgICAgcmlnaHRfanVzdCA9IElOSVRJQUxfUklHSFRfSlVTVDsKICAgICBpZiAoKGVwID0gZ2V0ZW52KCJEYXFEQUNSaWdodEp1c3RpZmllZCIpKSAhPSBOVUxMKSB7Ci0gICAgICAgIHJpZ2h0X2p1c3QgPSBzaW1wbGVfc3RydG9sKGVwLCBOVUxMLCAxMCk7CisJcmlnaHRfanVzdCA9IHNpbXBsZV9zdHJ0b2woZXAsIE5VTEwsIDEwKTsKICAgICB9CiAKICAgICBzcHJpbnRmKHN0cl9idWYsICIlZCIsIHJpZ2h0X2p1c3QpOwpAQCAtNTM4LDcgKzUzOCw3IEBACiAKICAgICBtY2xrX2RpdmlkZSA9IElOSVRJQUxfTUNMS19ESVZJREU7CiAgICAgaWYgKChlcCA9IGdldGVudigiRGFxREFDTUNsb2NrRGl2aWRlIikpICE9IE5VTEwpIHsKLSAgICAgICAgbWNsa19kaXZpZGUgPSBzaW1wbGVfc3RydG9sKGVwLCBOVUxMLCAxMCk7CisJbWNsa19kaXZpZGUgPSBzaW1wbGVfc3RydG9sKGVwLCBOVUxMLCAxMCk7CiAgICAgfQogCiAgICAgc3ByaW50ZihzdHJfYnVmLCAiJWQiLCBtY2xrX2RpdmlkZSk7CkBAIC02NjYsNyArNjY2LDcgQEAKICAgICAgKi8KICAgICBpMmNfcmVnX3dyaXRlKEkyQ19EQUNfQUREUiwgMHgwMSwKIAkJICAocmlnaHRfanVzdCA/IERBQ19SRUcxX1JJR0hUX0pVU1RfMjRCSVQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQUNfUkVHMV9MRUZUX0pVU1RfMjRfQklUKSB8CisJCQkJREFDX1JFRzFfTEVGVF9KVVNUXzI0X0JJVCkgfAogCQkgIERBQ19SRUcxX0RFTV9OTyB8CiAJCSAgKHNhbXBsZV9yYXRlID49IDUwMDAwID8gREFDX1JFRzFfRE9VQkxFIDogREFDX1JFRzFfU0lOR0xFKSk7CiAKQEAgLTcyNCw3ICs3MjQsNyBAQAogICAgICAqIFJlY3Vyc2l2ZWx5IGRvIHVwcGVyIGRpZ2l0cy4KICAgICAgKi8KICAgICBpZihkaWdpdHMgPiAxKSB7Ci0gICAgICAgIGZsYXNoX2NvZGUobnVtYmVyIC8gbW9kdWxvLCBtb2R1bG8sIGRpZ2l0cyAtIDEpOworCWZsYXNoX2NvZGUobnVtYmVyIC8gbW9kdWxvLCBtb2R1bG8sIGRpZ2l0cyAtIDEpOwogICAgIH0KIAogICAgIG51bWJlciA9IG51bWJlciAlIG1vZHVsbzsKQEAgLTczMywyMCArNzMzLDIwIEBACiAgICAgICogWmVybyBpcyBpbmRpY2F0ZWQgYnkgb25lIGxvbmcgZmxhc2ggKGRhc2gpLgogICAgICAqLwogICAgIGlmKG51bWJlciA9PSAwKSB7Ci0gICAgICAgIHN0YXR1c19sZWRfc2V0KFNUQVRVU19MRURfQk9PVCwgU1RBVFVTX0xFRF9PTik7Ci0gICAgICAgIHVkZWxheSgxMDAwMDAwKTsKLSAgICAgICAgc3RhdHVzX2xlZF9zZXQoU1RBVFVTX0xFRF9CT09ULCBTVEFUVVNfTEVEX09GRik7Ci0gICAgICAgIHVkZWxheSgyMDAwMDApOworCXN0YXR1c19sZWRfc2V0KFNUQVRVU19MRURfQk9PVCwgU1RBVFVTX0xFRF9PTik7CisJdWRlbGF5KDEwMDAwMDApOworCXN0YXR1c19sZWRfc2V0KFNUQVRVU19MRURfQk9PVCwgU1RBVFVTX0xFRF9PRkYpOworCXVkZWxheSgyMDAwMDApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIE5vbi16ZXJvIGlzIGluZGljYXRlZCBieSBzaG9ydCBmbGFzaGVzLCBvbmUgcGVyIGNvdW50LgotICAgICAgICAgKi8KLSAgICAgICAgZm9yKGogPSAwOyBqIDwgbnVtYmVyOyBqKyspIHsKLSAgICAgICAgICAgIHN0YXR1c19sZWRfc2V0KFNUQVRVU19MRURfQk9PVCwgU1RBVFVTX0xFRF9PTik7Ci0gICAgICAgICAgICB1ZGVsYXkoMTAwMDAwKTsKLSAgICAgICAgICAgIHN0YXR1c19sZWRfc2V0KFNUQVRVU19MRURfQk9PVCwgU1RBVFVTX0xFRF9PRkYpOwotICAgICAgICAgICAgdWRlbGF5KDIwMDAwMCk7Ci0gICAgICAgIH0KKwkvKgorCSAqIE5vbi16ZXJvIGlzIGluZGljYXRlZCBieSBzaG9ydCBmbGFzaGVzLCBvbmUgcGVyIGNvdW50LgorCSAqLworCWZvcihqID0gMDsgaiA8IG51bWJlcjsgaisrKSB7CisJICAgIHN0YXR1c19sZWRfc2V0KFNUQVRVU19MRURfQk9PVCwgU1RBVFVTX0xFRF9PTik7CisJICAgIHVkZWxheSgxMDAwMDApOworCSAgICBzdGF0dXNfbGVkX3NldChTVEFUVVNfTEVEX0JPT1QsIFNUQVRVU19MRURfT0ZGKTsKKwkgICAgdWRlbGF5KDIwMDAwMCk7CisJfQogICAgIH0KICAgICAvKgogICAgICAqIEludGVyLWRpZ2l0IHBhdXNlOiB3ZSd2ZSBhbHJlYWR5IHdhaXRlZCAyMDAgbVNlYywgd2FpdCAxIHNlYyB0b3RhbApAQCAtNzU5LDE2ICs3NTksMTYgQEAKIHZvaWQgc2hvd19ib290X3Byb2dyZXNzIChpbnQgc3RhdHVzKQogewogICAgIGlmKHN0YXR1cyAhPSAtMSkgewotICAgICAgICBsYXN0X2Jvb3RfcHJvZ3Jlc3MgPSBzdGF0dXM7CisJbGFzdF9ib290X3Byb2dyZXNzID0gc3RhdHVzOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEhvdXN0b24sIHdlIGhhdmUgYSBwcm9ibGVtLiAgQmxpbmsgdGhlIGxhc3QgT0sgc3RhdHVzIHdoaWNoCi0gICAgICAgICAqIGluZGljYXRlcyB3aGVyZSB0aGluZ3MgZmFpbGVkLgotICAgICAgICAgKi8KLSAgICAgICAgc3RhdHVzX2xlZF9zZXQoU1RBVFVTX0xFRF9SRUQsIFNUQVRVU19MRURfT04pOwotICAgICAgICBmbGFzaF9jb2RlKGxhc3RfYm9vdF9wcm9ncmVzcywgNSwgMyk7Ci0gICAgICAgIHVkZWxheSgxMDAwMDAwKTsKLSAgICAgICAgc3RhdHVzX2xlZF9zZXQoU1RBVFVTX0xFRF9SRUQsIFNUQVRVU19MRURfQkxJTktJTkcpOworCS8qCisJICogSG91c3Rvbiwgd2UgaGF2ZSBhIHByb2JsZW0uICBCbGluayB0aGUgbGFzdCBPSyBzdGF0dXMgd2hpY2gKKwkgKiBpbmRpY2F0ZXMgd2hlcmUgdGhpbmdzIGZhaWxlZC4KKwkgKi8KKwlzdGF0dXNfbGVkX3NldChTVEFUVVNfTEVEX1JFRCwgU1RBVFVTX0xFRF9PTik7CisJZmxhc2hfY29kZShsYXN0X2Jvb3RfcHJvZ3Jlc3MsIDUsIDMpOworCXVkZWxheSgxMDAwMDAwKTsKKwlzdGF0dXNfbGVkX3NldChTVEFUVVNfTEVEX1JFRCwgU1RBVFVTX0xFRF9CTElOS0lORyk7CiAgICAgfQogfQogI2VuZGlmIC8qIENPTkZJR19TSE9XX0JPT1RfUFJPR1JFU1MgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL3NhY3NuZy91LWJvb3QubGRzIGIvYm9hcmQvc2Fjc25nL3UtYm9vdC5sZHMKaW5kZXggYjRlNTAyYi4uNDQyMjRjYiAxMDA2NDQKLS0tIGEvYm9hcmQvc2Fjc25nL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvc2Fjc25nL3UtYm9vdC5sZHMKQEAgLTkzLDYgKzkzLDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMTUsNCArMTIwLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2FuZHBvaW50L01ha2VmaWxlIGIvYm9hcmQvc2FuZHBvaW50L01ha2VmaWxlCmluZGV4IDBhNGJmMGQuLmQ2YmJmMmYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NhbmRwb2ludC9NYWtlZmlsZQorKysgYi9ib2FyZC9zYW5kcG9pbnQvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMgPSAgJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9zYW5kcG9pbnQvZWFybHlfaW5pdC5TIGIvYm9hcmQvc2FuZHBvaW50L2Vhcmx5X2luaXQuUwppbmRleCAxMjdiZDM3Li4wN2RhZmI3IDEwMDY0NAotLS0gYS9ib2FyZC9zYW5kcG9pbnQvZWFybHlfaW5pdC5TCisrKyBiL2JvYXJkL3NhbmRwb2ludC9lYXJseV9pbml0LlMKQEAgLTQ3LDE1ICs0NywxNSBAQAogCQkoQ0ZHX1JFRlJFQyA8PCBNQ0NSM19SRUZSRUNfU0hJRlQpIHwgXAogCQkoQ0ZHX1JETEFUICA8PCBNQ0NSM19SRExBVF9TSElGVCkKIAkubG9uZwlNQ0NSNAotICAgICAgICAubG9uZwkoQ0ZHX1BSRVRPQUNUIDw8IE1DQ1I0X1BSRVRPQUNUX1NISUZUKSB8IChDRkdfQUNUVE9QUkUgPDwgTUNDUjRfQUNUVE9QUkVfU0hJRlQpIHwgXAorCS5sb25nCShDRkdfUFJFVE9BQ1QgPDwgTUNDUjRfUFJFVE9BQ1RfU0hJRlQpIHwgKENGR19BQ1RUT1BSRSA8PCBNQ0NSNF9BQ1RUT1BSRV9TSElGVCkgfCBcCiAJCShDRkdfUkVHSVNURVJEX1RZUEVfQlVGRkVSIDw8IDIwKSB8IFwKLSAgICAgICAgCSgoKENGR19CU1RPUFJFICYgMHgwMDAwMDMwMCkgPj4gOCkgPDwgTUNDUjRfQlNUT1BSRTBUTzFfU0hJRlQgKSB8IFwKLSAgICAgICAgCSgoQ0ZHX1NETU9ERV9DQVNfTEFUIDw8IDQpIHwgKENGR19TRE1PREVfV1JBUCA8PCAzKSB8IFwKKwkJKCgoQ0ZHX0JTVE9QUkUgJiAweDAwMDAwMzAwKSA+PiA4KSA8PCBNQ0NSNF9CU1RPUFJFMFRPMV9TSElGVCApIHwgXAorCQkoKENGR19TRE1PREVfQ0FTX0xBVCA8PCA0KSB8IChDRkdfU0RNT0RFX1dSQVAgPDwgMykgfCBcCiAJCShDRkdfU0RNT0RFX0JVUlNUTEVOKSA8PCBNQ0NSNF9TRE1PREVfU0hJRlQpIHwgXAogCQkoQ0ZHX0FDVFRPUlcgPDwgTUNDUjRfQUNUVE9SV19TSElGVCkgfCBcCi0gICAgICAgIAkoKENGR19CU1RPUFJFICYgMHgwMDAwMDAwZikgPDwgTUNDUjRfQlNUT1BSRTZUTzlfU0hJRlQgKQorCQkoKENGR19CU1RPUFJFICYgMHgwMDAwMDAwZikgPDwgTUNDUjRfQlNUT1BSRTZUTzlfU0hJRlQgKQogCS5sb25nCU1TQVIxCi0gICAgICAgIC5sb25nCSgoKENGR19CQU5LMF9TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8ICAwKSB8IFwKKwkubG9uZwkoKChDRkdfQkFOSzBfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgMCkgfCBcCiAJCSgoKENGR19CQU5LMV9TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8ICA4KSB8IFwKIAkJKCgoQ0ZHX0JBTksyX1NUQVJUICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfQUREUl9TSElGVCkgPDwgMTYpIHwgXAogCQkoKChDRkdfQkFOSzNfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAyNCkKQEAgLTY1LDcgKzY1LDcgQEAKIAkJKCgoQ0ZHX0JBTksyX1NUQVJUICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAxNikgfCBcCiAJCSgoKENGR19CQU5LM19TVEFSVCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgMjQpCiAJLmxvbmcJTVNBUjIKLSAgICAgICAgLmxvbmcJKCgoQ0ZHX0JBTks0X1NUQVJUICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfQUREUl9TSElGVCkgPDwgIDApIHwgXAorCS5sb25nCSgoKENGR19CQU5LNF9TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8ICAwKSB8IFwKIAkJKCgoQ0ZHX0JBTks1X1NUQVJUICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfQUREUl9TSElGVCkgPDwgIDgpIHwgXAogCQkoKChDRkdfQkFOSzZfU1RBUlQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAxNikgfCBcCiAJCSgoKENGR19CQU5LN19TVEFSVCAmIE1JQ1JfQUREUl9NQVNLKSA+PiBNSUNSX0FERFJfU0hJRlQpIDw8IDI0KQpAQCAtNzUsNyArNzUsNyBAQAogCQkoKChDRkdfQkFOSzZfU1RBUlQgJiBNSUNSX0VBRERSX01BU0spID4+IE1JQ1JfRUFERFJfU0hJRlQpIDw8IDE2KSB8IFwKIAkJKCgoQ0ZHX0JBTks3X1NUQVJUICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAyNCkKIAkubG9uZwlNRUFSMQotICAgICAgICAubG9uZwkoKChDRkdfQkFOSzBfRU5EICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfQUREUl9TSElGVCkgPDwgIDApIHwgXAorCS5sb25nCSgoKENGR19CQU5LMF9FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgMCkgfCBcCiAJCSgoKENGR19CQU5LMV9FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgOCkgfCBcCiAJCSgoKENGR19CQU5LMl9FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAxNikgfCBcCiAJCSgoKENGR19CQU5LM19FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAyNCkKQEAgLTg1LDcgKzg1LDcgQEAKIAkJKCgoQ0ZHX0JBTksyX0VORCAmIE1JQ1JfRUFERFJfTUFTSykgPj4gTUlDUl9FQUREUl9TSElGVCkgPDwgMTYpIHwgXAogCQkoKChDRkdfQkFOSzNfRU5EICYgTUlDUl9FQUREUl9NQVNLKSA+PiBNSUNSX0VBRERSX1NISUZUKSA8PCAyNCkKIAkubG9uZwlNRUFSMgotICAgICAgICAubG9uZwkoKChDRkdfQkFOSzRfRU5EICYgTUlDUl9BRERSX01BU0spID4+IE1JQ1JfQUREUl9TSElGVCkgPDwgIDApIHwgXAorCS5sb25nCSgoKENGR19CQU5LNF9FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgMCkgfCBcCiAJCSgoKENGR19CQU5LNV9FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAgOCkgfCBcCiAJCSgoKENGR19CQU5LNl9FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAxNikgfCBcCiAJCSgoKENGR19CQU5LN19FTkQgJiBNSUNSX0FERFJfTUFTSykgPj4gTUlDUl9BRERSX1NISUZUKSA8PCAyNCkKQEAgLTk3LDcgKzk3LDYgQEAKIAkubG9uZwkwCiAKIAotCiAJLyoKIAkgKiBFYXJseSBDUFUgaW5pdGlhbGl6YXRpb24uIFNldCB1cCBtZW1vcnkgY29udHJvbGxlciwgc28gd2UgY2FuIGFjY2VzcyBhbnkgUkFNIGF0IGFsbC4gVGhpcwogCSAqIG11c3QgYmUgZG9uZSBpbiBhc3NlbWJseSwgc2luY2Ugd2UgaGF2ZSBubyBzdGFjayBhdCB0aGlzIHBvaW50LgpAQCAtMTUxLDQgKzE1MCwzIEBACiAKIAltdGxyCXIxMAogCWJscgotCmRpZmYgLS1naXQgYS9ib2FyZC9zYW5kcG9pbnQvZmxhc2guYyBiL2JvYXJkL3NhbmRwb2ludC9mbGFzaC5jCmluZGV4IDRiNmYyZDAuLmE5ZjczZmYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NhbmRwb2ludC9mbGFzaC5jCisrKyBiL2JvYXJkL3NhbmRwb2ludC9mbGFzaC5jCkBAIC05Miw3ICs5Miw2IEBACiAjZW5kaWYgLyogMCAqLwogCiAKLQogc3RhdGljIHVuc2lnbmVkIGxvbmcKIGZsYXNoX2lkKHVuc2lnbmVkIGNoYXIgbWZjdCwgdW5zaWduZWQgY2hhciBjaGlwKQogewpAQCAtMTM2LDcgKzEzNSw2IEBACiB9CiAKIAotCiB1bnNpZ25lZCBsb25nCiBmbGFzaF9pbml0KHZvaWQpCiB7CkBAIC0xOTAsOSArMTg4LDkgQEAKICAgICBzd2l0Y2gocGZsaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykKICAgICB7CiAgICAgICBjYXNlIEZMQVNIX0FNMDQwOgotICAgICAgICBwZmxpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKKwlwZmxpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKIAlwZmxpbmZvLT5zZWN0b3JfY291bnQgPSA4OwotICAgICAgICBmb3IoaiA9IDA7IGogPCA4OyBqKyspCisJZm9yKGogPSAwOyBqIDwgODsgaisrKQogCXsKIAkgIHBmbGluZm8tPnN0YXJ0W2pdID0gYmFzZV9hZGRyZXNzICsgMHgwMDAxMDAwMCAqIGo7CiAJICBwZmxpbmZvLT5wcm90ZWN0W2pdID0gZmxhc2hbKGogPDwgMTYpIHwgMHgyXTsKQEAgLTIxMCwxNiArMjA4LDE2IEBACiAJICBwZmxpbmZvLT5zdGFydFtqKzNdID0gYmFzZV9hZGRyZXNzICsgMHgwMDAxMDAwMCAqIGo7CiAJfQogI2lmIDAKLSAgICAgICAgLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCi0gICAgICAgIGZvciAoaiA9IDA7IGogPCBwZmxpbmZvLT5zZWN0b3JfY291bnQ7IGorKykgewotICAgICAgICAgIC8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBNyAuLiBBMCkgPSAweDAyICovCi0gICAgICAgICAgLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLwotICAgICAgICAgIGFkZHIyID0gKHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqKShwZmxpbmZvLT5zdGFydFtqXSk7Ci0gICAgICAgICAgICBpZiAocGZsaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9NQU5fU1NUKQotICAgICAgICAgICAgICBwZmxpbmZvLT5wcm90ZWN0W2pdID0gMDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcGZsaW5mby0+cHJvdGVjdFtqXSA9IGFkZHIyWzJdICYgMTsKLSAgICAgICAgfQorCS8qIGNoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyAqLworCWZvciAoaiA9IDA7IGogPCBwZmxpbmZvLT5zZWN0b3JfY291bnQ7IGorKykgeworCSAgLyogcmVhZCBzZWN0b3IgcHJvdGVjdGlvbiBhdCBzZWN0b3IgYWRkcmVzcywgKEE3IC4uIEEwKSA9IDB4MDIgKi8KKwkgIC8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KKwkgIGFkZHIyID0gKHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqKShwZmxpbmZvLT5zdGFydFtqXSk7CisJICAgIGlmIChwZmxpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX01BTl9TU1QpCisJICAgICAgcGZsaW5mby0+cHJvdGVjdFtqXSA9IDA7CisJICAgIGVsc2UKKwkgICAgICBwZmxpbmZvLT5wcm90ZWN0W2pdID0gYWRkcjJbMl0gJiAxOworCX0KICNlbmRpZgogCWJyZWFrOwogICAgIH0KQEAgLTI1NCwzMCArMjUyLDMwIEBACiAgICAgaW50IGk7CiAKICAgICAvKiBzZXQgdXAgc2VjdG9yIHN0YXJ0IGFkZHJlc3MgdGFibGUgKi8KLSAgICAgICAgaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfTUFOX1NTVCkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCi0gICAgICAgICAgICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCk7Ci0gICAgICAgICAgfQotICAgICAgICBlbHNlCisJaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfTUFOX1NTVCkKKwkgIHsKKwkgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQorCSAgICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCk7CisJICB9CisJZWxzZQogICAgIGlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX0JUWVBFKSB7Ci0gICAgICAgIC8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgYm90dG9tIGJvb3QgYmxvY2sgdHlwZSAgICAqLwotICAgICAgICBpbmZvLT5zdGFydFswXSA9IGJhc2UgKyAweDAwMDAwMDAwOwotICAgICAgICBpbmZvLT5zdGFydFsxXSA9IGJhc2UgKyAweDAwMDA0MDAwOwotICAgICAgICBpbmZvLT5zdGFydFsyXSA9IGJhc2UgKyAweDAwMDA2MDAwOwotICAgICAgICBpbmZvLT5zdGFydFszXSA9IGJhc2UgKyAweDAwMDA4MDAwOwotICAgICAgICBmb3IgKGkgPSA0OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCkgLSAweDAwMDMwMDAwOwotICAgICAgICB9CisJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlICAgICovCisJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKKwlpbmZvLT5zdGFydFsxXSA9IGJhc2UgKyAweDAwMDA0MDAwOworCWluZm8tPnN0YXJ0WzJdID0gYmFzZSArIDB4MDAwMDYwMDA7CisJaW5mby0+c3RhcnRbM10gPSBiYXNlICsgMHgwMDAwODAwMDsKKwlmb3IgKGkgPSA0OyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKKwkgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKSAtIDB4MDAwMzAwMDA7CisJfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgdG9wIGJvb3QgYmxvY2sgdHlwZSAgICAgICAqLwotICAgICAgICBpID0gaW5mby0+c2VjdG9yX2NvdW50IC0gMTsKLSAgICAgICAgaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNDAwMDsKLSAgICAgICAgaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNjAwMDsKLSAgICAgICAgaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwODAwMDsKLSAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyBpICogMHgwMDAxMDAwMDsKLSAgICAgICAgfQorCS8qIHNldCBzZWN0b3Igb2Zmc2V0cyBmb3IgdG9wIGJvb3QgYmxvY2sgdHlwZSAgICAgICAqLworCWkgPSBpbmZvLT5zZWN0b3JfY291bnQgLSAxOworCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDQwMDA7CisJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNjAwMDsKKwlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA4MDAwOworCWZvciAoOyBpID49IDA7IGktLSkgeworCSAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyBpICogMHgwMDAxMDAwMDsKKwl9CiAgICAgfQogCiB9CkBAIC0zNzYsNyArMzc0LDcgQEAKICAgIHNob3J0IGk7CiAgICAgRkxBU0hfV09SRF9TSVpFIHZhbHVlOwogICAgIHVsb25nIGJhc2UgPSAodWxvbmcpYWRkcjsKLSAgICAgICAgdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKilhZGRyOworCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYWRkcjIgPSAoRkxBU0hfV09SRF9TSVpFICopYWRkcjsKIAogICAgIHByaW50ZigiZmxhc2hfZ2V0X3NpemU6IFxuIik7CiAgICAgLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KQEAgLTM4OCwxMjMgKzM4NiwxMjMgQEAKIAogICAgIHN3aXRjaCAodmFsdWUpIHsKICAgICBjYXNlIChGTEFTSF9XT1JEX1NJWkUpQU1EX01BTlVGQUNUOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7Ci0gICAgICAgIGJyZWFrOworCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRDsKKwlicmVhazsKICAgICBjYXNlIChGTEFTSF9XT1JEX1NJWkUpRlVKX01BTlVGQUNUOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9GVUo7Ci0gICAgICAgIGJyZWFrOworCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0ZVSjsKKwlicmVhazsKICAgICBjYXNlIChGTEFTSF9XT1JEX1NJWkUpU1NUX01BTlVGQUNUOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9TU1Q7Ci0gICAgICAgIGJyZWFrOworCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX1NTVDsKKwlicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDA7Ci0gICAgICAgIGluZm8tPnNpemUgPSAwOwotICAgICAgICByZXR1cm4gKDApOyAgICAgICAgIC8qIG5vIG9yIHVua25vd24gZmxhc2ggICovCisJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOworCWluZm8tPnNlY3Rvcl9jb3VudCA9IDA7CisJaW5mby0+c2l6ZSA9IDA7CisJcmV0dXJuICgwKTsgICAgICAgICAvKiBubyBvciB1bmtub3duIGZsYXNoICAqLwogICAgIH0KICAgICBwcmludGYoInJlY29nbmlzZWQgbWFudWZhY3R1cmVyIik7CiAKICAgICB2YWx1ZSA9IGFkZHIyW0FERFIzXTsgICAgICAgICAgLyogZGV2aWNlIElEICAgICAgICAqLwotICAgICAgICBkZWJ1ZyAoIlxuZGV2X2NvZGU9JXhcbiIsIHZhbHVlKTsKKwlkZWJ1ZyAoIlxuZGV2X2NvZGU9JXhcbiIsIHZhbHVlKTsKIAogICAgIHN3aXRjaCAodmFsdWUpIHsKICAgICBjYXNlIChGTEFTSF9XT1JEX1NJWkUpQU1EX0lEX0xWNDAwVDoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU00MDBUOwotICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSAxMTsKLSAgICAgICAgaW5mby0+c2l6ZSA9IDB4MDAwODAwMDA7Ci0gICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgLyogPT4gMC41IE1CICAgICAgICAqLworCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNNDAwVDsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSAxMTsKKwlpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKKwlicmVhazsgICAgICAgICAgICAgIC8qID0+IDAuNSBNQiAgICAgICAgKi8KIAogICAgIGNhc2UgKEZMQVNIX1dPUkRfU0laRSlBTURfSURfTFY0MDBCOgotICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTQwMEI7Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDExOwotICAgICAgICBpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAwLjUgTUIgICAgICAgICovCisJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU00MDBCOworCWluZm8tPnNlY3Rvcl9jb3VudCA9IDExOworCWluZm8tPnNpemUgPSAweDAwMDgwMDAwOworCWJyZWFrOyAgICAgICAgICAgICAgLyogPT4gMC41IE1CICAgICAgICAqLwogCiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9MVjgwMFQ6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNODAwVDsKLSAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gMTk7Ci0gICAgICAgIGluZm8tPnNpemUgPSAweDAwMTAwMDAwOwotICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qID0+IDEgTUIgICAgICAqLworCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNODAwVDsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSAxOTsKKwlpbmZvLT5zaXplID0gMHgwMDEwMDAwMDsKKwlicmVhazsgICAgICAgICAgICAgIC8qID0+IDEgTUIgICAgICAqLwogCiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9MVjgwMEI6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNODAwQjsKLSAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gMTk7Ci0gICAgICAgIGluZm8tPnNpemUgPSAweDAwMTAwMDAwOwotICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qID0+IDEgTUIgICAgICAqLworCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNODAwQjsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSAxOTsKKwlpbmZvLT5zaXplID0gMHgwMDEwMDAwMDsKKwlicmVhazsgICAgICAgICAgICAgIC8qID0+IDEgTUIgICAgICAqLwogCiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9MVjE2MFQ6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMTYwVDsKLSAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gMzU7Ci0gICAgICAgIGluZm8tPnNpemUgPSAweDAwMjAwMDAwOwotICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qID0+IDIgTUIgICAgICAqLworCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMTYwVDsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSAzNTsKKwlpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsKKwlicmVhazsgICAgICAgICAgICAgIC8qID0+IDIgTUIgICAgICAqLwogCiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9MVjE2MEI6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMTYwQjsKLSAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gMzU7Ci0gICAgICAgIGluZm8tPnNpemUgPSAweDAwMjAwMDAwOwotICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qID0+IDIgTUIgICAgICAqLworCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMTYwQjsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSAzNTsKKwlpbmZvLT5zaXplID0gMHgwMDIwMDAwMDsKKwlicmVhazsgICAgICAgICAgICAgIC8qID0+IDIgTUIgICAgICAqLwogCiAgICAgY2FzZSAoRkxBU0hfV09SRF9TSVpFKVNTVF9JRF94RjgwMEE6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX1NTVDgwMEE7Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDE2OwotICAgICAgICBpbmZvLT5zaXplID0gMHgwMDEwMDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAxIE1CICAgICAgKi8KKwlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9TU1Q4MDBBOworCWluZm8tPnNlY3Rvcl9jb3VudCA9IDE2OworCWluZm8tPnNpemUgPSAweDAwMTAwMDAwOworCWJyZWFrOyAgICAgICAgICAgICAgLyogPT4gMSBNQiAgICAgICovCiAKICAgICBjYXNlIChGTEFTSF9XT1JEX1NJWkUpU1NUX0lEX3hGMTYwQToKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfU1NUMTYwQTsKLSAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gMzI7Ci0gICAgICAgIGluZm8tPnNpemUgPSAweDAwMjAwMDAwOwotICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qID0+IDIgTUIgICAgICAqLworCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX1NTVDE2MEE7CisJaW5mby0+c2VjdG9yX2NvdW50ID0gMzI7CisJaW5mby0+c2l6ZSA9IDB4MDAyMDAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAyIE1CICAgICAgKi8KIAogICAgIGNhc2UgKEZMQVNIX1dPUkRfU0laRSlBTURfSURfRjA0MEI6Ci0gICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMDQwOwotICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSA4OwotICAgICAgICBpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKLSAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAwLjUgTUIgICAgICAqLworCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMDQwOworCWluZm8tPnNlY3Rvcl9jb3VudCA9IDg7CisJaW5mby0+c2l6ZSA9IDB4MDAwODAwMDA7CisJYnJlYWs7ICAgICAgICAgICAgICAvKiA9PiAwLjUgTUIgICAgICAqLwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwotICAgICAgICByZXR1cm4gKDApOyAgICAgICAgIC8qID0+IG5vIG9yIHVua25vd24gZmxhc2ggKi8KKwlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJcmV0dXJuICgwKTsgICAgICAgICAvKiA9PiBubyBvciB1bmtub3duIGZsYXNoICovCiAKICAgICB9CiAKICAgICBwcmludGYoImZsYXNoIGlkICVseDsgc2VjdG9yIGNvdW50ICV4LCBzaXplICVseFxuIiwgaW5mby0+Zmxhc2hfaWQsaW5mby0+c2VjdG9yX2NvdW50LGluZm8tPnNpemUpOwogICAgIC8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRkcmVzcyB0YWJsZSAqLwotICAgICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9NQU5fU1NUKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKLSAgICAgICAgICAgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKTsKLSAgICAgICAgICB9Ci0gICAgICAgIGVsc2UKKwlpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9NQU5fU1NUKQorCSAgeworCSAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCisJICAgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKTsKKwkgIH0KKwllbHNlCiAgICAgaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfQlRZUEUpIHsKLSAgICAgICAgLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlICAgICovCi0gICAgICAgIGluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7Ci0gICAgICAgIGluZm8tPnN0YXJ0WzFdID0gYmFzZSArIDB4MDAwMDQwMDA7Ci0gICAgICAgIGluZm8tPnN0YXJ0WzJdID0gYmFzZSArIDB4MDAwMDYwMDA7Ci0gICAgICAgIGluZm8tPnN0YXJ0WzNdID0gYmFzZSArIDB4MDAwMDgwMDA7Ci0gICAgICAgIGZvciAoaSA9IDQ7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewotICAgICAgICAgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKSAtIDB4MDAwMzAwMDA7Ci0gICAgICAgIH0KKwkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUgICAgKi8KKwlpbmZvLT5zdGFydFswXSA9IGJhc2UgKyAweDAwMDAwMDAwOworCWluZm8tPnN0YXJ0WzFdID0gYmFzZSArIDB4MDAwMDQwMDA7CisJaW5mby0+c3RhcnRbMl0gPSBiYXNlICsgMHgwMDAwNjAwMDsKKwlpbmZvLT5zdGFydFszXSA9IGJhc2UgKyAweDAwMDA4MDAwOworCWZvciAoaSA9IDQ7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgeworCSAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMTAwMDApIC0gMHgwMDAzMDAwMDsKKwl9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciB0b3AgYm9vdCBibG9jayB0eXBlICAgICAgICovCi0gICAgICAgIGkgPSBpbmZvLT5zZWN0b3JfY291bnQgLSAxOwotICAgICAgICBpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA0MDAwOwotICAgICAgICBpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA2MDAwOwotICAgICAgICBpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA4MDAwOwotICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArIGkgKiAweDAwMDEwMDAwOwotICAgICAgICB9CisJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciB0b3AgYm9vdCBibG9jayB0eXBlICAgICAgICovCisJaSA9IGluZm8tPnNlY3Rvcl9jb3VudCAtIDE7CisJaW5mby0+c3RhcnRbaS0tXSA9IGJhc2UgKyBpbmZvLT5zaXplIC0gMHgwMDAwNDAwMDsKKwlpbmZvLT5zdGFydFtpLS1dID0gYmFzZSArIGluZm8tPnNpemUgLSAweDAwMDA2MDAwOworCWluZm8tPnN0YXJ0W2ktLV0gPSBiYXNlICsgaW5mby0+c2l6ZSAtIDB4MDAwMDgwMDA7CisJZm9yICg7IGkgPj0gMDsgaS0tKSB7CisJICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArIGkgKiAweDAwMDEwMDAwOworCX0KICAgICB9CiAKICAgICAvKiBjaGVjayBmb3IgcHJvdGVjdGVkIHNlY3RvcnMgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLSAgICAgICAgLyogcmVhZCBzZWN0b3IgcHJvdGVjdGlvbiBhdCBzZWN0b3IgYWRkcmVzcywgKEE3IC4uIEEwKSA9IDB4MDIgKi8KLSAgICAgICAgLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLwotICAgICAgICBhZGRyMiA9ICh2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbaV0pOwotICAgICAgICAgICAgICAgIGlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX01BTl9TU1QpCi0gICAgICAgICAgICAgICAgICBpbmZvLT5wcm90ZWN0W2ldID0gMDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBpbmZvLT5wcm90ZWN0W2ldID0gYWRkcjJbMl0gJiAxOworCS8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBNyAuLiBBMCkgPSAweDAyICovCisJLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLworCWFkZHIyID0gKHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqKShpbmZvLT5zdGFydFtpXSk7CisJCWlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX01BTl9TU1QpCisJCSAgaW5mby0+cHJvdGVjdFtpXSA9IDA7CisJCWVsc2UKKwkJICBpbmZvLT5wcm90ZWN0W2ldID0gYWRkcjJbMl0gJiAxOwogICAgIH0KIAogICAgIC8qCkBAIC01MTIsNyArNTEwLDcgQEAKICAgICAgKi8KICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgIT0gRkxBU0hfVU5LTk9XTikgewogICAgICAgIGFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSAqKWluZm8tPnN0YXJ0WzBdOwotICAgICAgICAqYWRkcjIgPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBGMDAwRjA7ICAgLyogcmVzZXQgYmFuayAqLworCSphZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMEYwMDBGMDsgICAvKiByZXNldCBiYW5rICovCiAgICAgfQogCiAgICAgcmV0dXJuIChpbmZvLT5zaXplKTsKQEAgLTUzMCwzMiArNTI4LDMyIEBACiAgICAgdW5zaWduZWQgY2hhciBzaDhiOwogCiAgICAgaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7Ci0gICAgICAgIGlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0gICAgICAgICAgICBwcmludGYgKCItIG1pc3NpbmdcbiIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMTsKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCSAgICBwcmludGYgKCItIG1pc3NpbmdcbiIpOworCX0gZWxzZSB7CisJICAgIHByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJfQorCXJldHVybiAxOwogICAgIH0KIAogICAgIGlmICgoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgfHwKLSAgICAgICAgKGluZm8tPmZsYXNoX2lkID4gKEZMQVNIX01BTl9TVE0gfCBGTEFTSF9BTURfQ09NUCkpKSB7Ci0gICAgICAgIHByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOwotICAgICAgICByZXR1cm4gMTsKKwkoaW5mby0+Zmxhc2hfaWQgPiAoRkxBU0hfTUFOX1NUTSB8IEZMQVNIX0FNRF9DT01QKSkpIHsKKwlwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgLSBhYm9ydGVkXG4iKTsKKwlyZXR1cm4gMTsKICAgICB9CiAKICAgICBwcm90ID0gMDsKICAgICBmb3IgKHNlY3Q9c19maXJzdDsgc2VjdDw9c19sYXN0OyArK3NlY3QpIHsKLSAgICAgICAgaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKLSAgICAgICAgICAgIHByb3QrKzsKLSAgICAgICAgfQorCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKSB7CisJICAgIHByb3QrKzsKKwl9CiAgICAgfQogCiAgICAgaWYgKHByb3QpIHsKLSAgICAgICAgcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAotICAgICAgICAgICAgcHJvdCk7CisJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAorCSAgICBwcm90KTsKICAgICB9IGVsc2UgewotICAgICAgICBwcmludGYgKCJcbiIpOworCXByaW50ZiAoIlxuIik7CiAgICAgfQogCiAgICAgbF9zZWN0ID0gLTE7CkBAIC01NzcsMjggKzU3NSwyOCBAQAogCiAgICAgLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwogICAgIGZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdDsgc2VjdCsrKSB7Ci0gICAgICAgIGlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsgLyogbm90IHByb3RlY3RlZCAqLwotICAgICAgICAgICAgYWRkciA9IChGTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbMF0gKyAoCisJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgeyAvKiBub3QgcHJvdGVjdGVkICovCisJICAgIGFkZHIgPSAoRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0WzBdICsgKAogCQkJCShpbmZvLT5zdGFydFtzZWN0XSAtIGluZm8tPnN0YXJ0WzBdKSA8PCBzaDhiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9NQU5fU1NUKQotICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcltBRERSMCA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMEFBMDBBQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyW0FERFIxIDw8IHNoOGJdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJbQUREUjAgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcltBRERSMCA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMEFBMDBBQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyW0FERFIxIDw8IHNoOGJdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJbMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDA1MDAwNTA7ICAvKiBibG9jayBlcmFzZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkZWxheSgzMDAwMCk7ICAvKiB3YWl0IDMwIG1zICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkclswXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDMwMDAzMDsgIC8qIHNlY3RvciBlcmFzZSAqLwotICAgICAgICAgICAgbF9zZWN0ID0gc2VjdDsKLSAgICAgICAgfQorCQkJaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfTUFOX1NTVCkKKwkJCSAgeworCQkJICAgIGFkZHJbQUREUjAgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7CisJCQkgICAgYWRkcltBRERSMSA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKKwkJCSAgICBhZGRyW0FERFIwIDw8IHNoOGJdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwOworCQkJICAgIGFkZHJbQUREUjAgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7CisJCQkgICAgYWRkcltBRERSMSA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKKwkJCSAgICBhZGRyWzBdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTAwMDUwOyAgLyogYmxvY2sgZXJhc2UgKi8KKwkJCSAgICB1ZGVsYXkoMzAwMDApOyAgLyogd2FpdCAzMCBtcyAqLworCQkJICB9CisJCQllbHNlCisJCQkgIGFkZHJbMF0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDAzMDAwMzA7ICAvKiBzZWN0b3IgZXJhc2UgKi8KKwkgICAgbF9zZWN0ID0gc2VjdDsKKwl9CiAgICAgfQogCiAgICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCiAgICAgaWYgKGZsYWcpCi0gICAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJZW5hYmxlX2ludGVycnVwdHMoKTsKIAogICAgIC8qIHdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwogICAgIHVkZWxheSAoMTAwMCk7CkBAIC02MDcsMjIgKzYwNSwyMiBAQAogICAgICAqIFdlIHdhaXQgZm9yIHRoZSBsYXN0IHRyaWdnZXJlZCBzZWN0b3IKICAgICAgKi8KICAgICBpZiAobF9zZWN0IDwgMCkKLSAgICAgICAgZ290byBET05FOworCWdvdG8gRE9ORTsKIAogICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKICAgICBsYXN0ICA9IHN0YXJ0OwogICAgIGFkZHIgPSAoRkxBU0hfV09SRF9TSVpFICopKGluZm8tPnN0YXJ0WzBdICsgKAogCQkJKGluZm8tPnN0YXJ0W2xfc2VjdF0gLSBpbmZvLT5zdGFydFswXSkgPDwgc2g4YikpOwogICAgIHdoaWxlICgoYWRkclswXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgIT0gKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSB7Ci0gICAgICAgIGlmICgobm93ID0gZ2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgewotICAgICAgICAgICAgcHJpbnRmICgiVGltZW91dFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICAvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotICAgICAgICBpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgeyAgLyogZXZlcnkgc2Vjb25kICovCi0gICAgICAgICAgICBzZXJpYWxfcHV0YyAoJy4nKTsKLSAgICAgICAgICAgIGxhc3QgPSBub3c7Ci0gICAgICAgIH0KKwlpZiAoKG5vdyA9IGdldF90aW1lcihzdGFydCkpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKKwkgICAgcHJpbnRmICgiVGltZW91dFxuIik7CisJICAgIHJldHVybiAxOworCX0KKwkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLworCWlmICgobm93IC0gbGFzdCkgPiAxMDAwKSB7ICAvKiBldmVyeSBzZWNvbmQgKi8KKwkgICAgc2VyaWFsX3B1dGMgKCcuJyk7CisJICAgIGxhc3QgPSBub3c7CisJfQogICAgIH0KIAogRE9ORToKQEAgLTY1Miw0MiArNjUwLDQyIEBACiAgICAgICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcwogICAgICAqLwogICAgIGlmICgobCA9IGFkZHIgLSB3cCkgIT0gMCkgewotICAgICAgICBkYXRhID0gMDsKLSAgICAgICAgZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgewotICAgICAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7IGk8NCAmJiBjbnQ+MDsgKytpKSB7Ci0gICAgICAgICAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0gICAgICAgICAgICAtLWNudDsKLSAgICAgICAgICAgICsrY3A7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICg7IGNudD09MCAmJiBpPDQ7ICsraSwgKytjcCkgewotICAgICAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7Ci0gICAgICAgIH0KKwlkYXRhID0gMDsKKwlmb3IgKGk9MCwgY3A9d3A7IGk8bDsgKytpLCArK2NwKSB7CisJICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOworCX0KKwlmb3IgKDsgaTw0ICYmIGNudD4wOyArK2kpIHsKKwkgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCSAgICAtLWNudDsKKwkgICAgKytjcDsKKwl9CisJZm9yICg7IGNudD09MCAmJiBpPDQ7ICsraSwgKytjcCkgeworCSAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwl9CiAKLSAgICAgICAgaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gKHJjKTsKLSAgICAgICAgfQotICAgICAgICB3cCArPSA0OworCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgeworCSAgICByZXR1cm4gKHJjKTsKKwl9CisJd3AgKz0gNDsKICAgICB9CiAKICAgICAvKgogICAgICAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAogICAgICAqLwogICAgIHdoaWxlIChjbnQgPj0gNCkgewotICAgICAgICBkYXRhID0gMDsKLSAgICAgICAgZm9yIChpPTA7IGk8NDsgKytpKSB7Ci0gICAgICAgICAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gKHJjKTsKLSAgICAgICAgfQotICAgICAgICB3cCAgKz0gNDsKLSAgICAgICAgY250IC09IDQ7CisJZGF0YSA9IDA7CisJZm9yIChpPTA7IGk8NDsgKytpKSB7CisJICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwl9CisJaWYgKChyYyA9IHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJICAgIHJldHVybiAocmMpOworCX0KKwl3cCAgKz0gNDsKKwljbnQgLT0gNDsKICAgICB9CiAKICAgICBpZiAoY250ID09IDApIHsKLSAgICAgICAgcmV0dXJuICgwKTsKKwlyZXR1cm4gKDApOwogICAgIH0KIAogICAgIC8qCkBAIC02OTUsMTEgKzY5MywxMSBAQAogICAgICAqLwogICAgIGRhdGEgPSAwOwogICAgIGZvciAoaT0wLCBjcD13cDsgaTw0ICYmIGNudD4wOyArK2ksICsrY3ApIHsKLSAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotICAgICAgICAtLWNudDsKKwlkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7CisJLS1jbnQ7CiAgICAgfQogICAgIGZvciAoOyBpPDQ7ICsraSwgKytjcCkgewotICAgICAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwlkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKICAgICB9CiAKICAgICByZXR1cm4gKHdyaXRlX3dvcmQoaW5mbywgd3AsIGRhdGEpKTsKQEAgLTcxMywxMiArNzExLDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgd3JpdGVfd29yZCAoZmxhc2hfaW5mb190ICppbmZvLCB1bG9uZyBkZXN0LCB1bG9uZyBkYXRhKQogewotICAgICAgICB2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSAqKWluZm8tPnN0YXJ0WzBdOwotICAgICAgICB2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmRlc3QyOwotICAgICAgICB2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmRhdGEyID0gKEZMQVNIX1dPUkRfU0laRSAqKSZkYXRhOworCXZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYWRkcjIgPSAoRkxBU0hfV09SRF9TSVpFICopaW5mby0+c3RhcnRbMF07CisJdm9sYXRpbGUgRkxBU0hfV09SRF9TSVpFICpkZXN0MjsKKwl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmRhdGEyID0gKEZMQVNIX1dPUkRfU0laRSAqKSZkYXRhOwogICAgIHVsb25nIHN0YXJ0OwogICAgIGludCBmbGFnOwotICAgICAgICBpbnQgaTsKKwlpbnQgaTsKICAgICB1bnNpZ25lZCBjaGFyIHNoOGI7CiAKICAgICAvKiBDaGVjayB0aGUgUk9NIENTICovCkBAIC03MzIsMzIgKzczMCwzMiBAQAogCiAgICAgLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCiAgICAgaWYgKCgqZGVzdDIgJiAoRkxBU0hfV09SRF9TSVpFKWRhdGEpICE9IChGTEFTSF9XT1JEX1NJWkUpZGF0YSkgewotICAgICAgICByZXR1cm4gKDIpOworCXJldHVybiAoMik7CiAgICAgfQogICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwogICAgIGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAotICAgICAgICBmb3IgKGk9MDsgaTw0L3NpemVvZihGTEFTSF9XT1JEX1NJWkUpOyBpKyspCi0gICAgICAgICAgewotICAgICAgICAgICAgYWRkcjJbQUREUjAgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7Ci0gICAgICAgICAgICBhZGRyMltBRERSMSA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMDU1MDA1NTsKLSAgICAgICAgICAgIGFkZHIyW0FERFIwIDw8IHNoOGJdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwQTAwMEEwOworCWZvciAoaT0wOyBpPDQvc2l6ZW9mKEZMQVNIX1dPUkRfU0laRSk7IGkrKykKKwkgIHsKKwkgICAgYWRkcjJbQUREUjAgPDwgc2g4Yl0gPSAoRkxBU0hfV09SRF9TSVpFKTB4MDBBQTAwQUE7CisJICAgIGFkZHIyW0FERFIxIDw8IHNoOGJdID0gKEZMQVNIX1dPUkRfU0laRSkweDAwNTUwMDU1OworCSAgICBhZGRyMltBRERSMCA8PCBzaDhiXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMEEwMDBBMDsKIAotICAgICAgICAgICAgZGVzdDJbaSA8PCBzaDhiXSA9IGRhdGEyW2ldOworCSAgICBkZXN0MltpIDw8IHNoOGJdID0gZGF0YTJbaV07CiAKLSAgICAgICAgICAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwotICAgICAgICAgICAgaWYgKGZsYWcpCi0gICAgICAgICAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJICAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCSAgICBpZiAoZmxhZykKKwkgICAgICBlbmFibGVfaW50ZXJydXB0cygpOwogCi0gICAgICAgICAgICAvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCi0gICAgICAgICAgICBzdGFydCA9IGdldF90aW1lciAoMCk7Ci0gICAgICAgICAgICB3aGlsZSAoKGRlc3QyW2kgPDwgc2g4Yl0gJiAoRkxBU0hfV09SRF9TSVpFKTB4MDA4MDAwODApICE9Ci0gICAgICAgICAgICAgICAgICAgKGRhdGEyW2ldICYgKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSkgewotICAgICAgICAgICAgICBpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KKwkgICAgLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLworCSAgICBzdGFydCA9IGdldF90aW1lciAoMCk7CisJICAgIHdoaWxlICgoZGVzdDJbaSA8PCBzaDhiXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgIT0KKwkJICAgKGRhdGEyW2ldICYgKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSkgeworCSAgICAgIGlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKKwkJcmV0dXJuICgxKTsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KIAogICAgIHJldHVybiAoMCk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9zYW5kcG9pbnQvdS1ib290LmxkcyBiL2JvYXJkL3NhbmRwb2ludC91LWJvb3QubGRzCmluZGV4IDBlMGIwZTYuLmRiODlhNzggMTAwNjQ0Ci0tLSBhL2JvYXJkL3NhbmRwb2ludC91LWJvb3QubGRzCisrKyBiL2JvYXJkL3NhbmRwb2ludC91LWJvb3QubGRzCkBAIC0xMDAsNiArMTAwLDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjMsNCArMTI4LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2FuZHBvaW50L3UtYm9vdC5sZHMubXcuZGVidWcgYi9ib2FyZC9zYW5kcG9pbnQvdS1ib290Lmxkcy5tdy5kZWJ1ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAzNzhjYi4uMDAwMDAwMAotLS0gYS9ib2FyZC9zYW5kcG9pbnQvdS1ib290Lmxkcy5tdy5kZWJ1ZworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBSb2IgVGF5bG9yLCBGbHlpbmcgUGlnIFN5c3RlbXMgTHRkLiByb2J0QGZseWluZ3BpZy5jb20KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7Ci0KLU1FTU9SWSB7Ci0gCXJhbSAgKCFyeCkgOiBvcmcgPSAweDAwMDAwMDAwICwgTEVOR1RIID0gOE0KLSAJY29kZSAoIXJ4KSA6IG9yZyA9IDB4MDAwMDIwMDAgLCBMRU5HVEggPSAoNE0gLSAweDIwMDApCi0gCXJvbSAgIChyeCkgOiBvcmcgPSAweGZlMDAwMDAwICwgTEVOR1RIID0gKDB4MTAwMDAwMDAwIC0gMHhmZTAwMDAwMCkKLX0KLQotU0VDVElPTlMKLXsKLSAgX2ZfaW5pdCA9IC47Ci0gIFBST1ZJREUoX2ZfaW5pdCA9IC4pOwotICBfZl9pbml0X3JvbSA9IC47Ci0gIFBST1ZJREUoX2ZfaW5pdF9yb20gPSAuKTsKLQotICAuaW5pdCA6IHsKLSAgICAgIGNwdS9tcGM4MjR4L3N0YXJ0Lm8JKC50ZXh0KQotICAgICAgKiguaW5pdCkKLSAgfSA+IHJhbQotICBfaW5pdF9zaXplID0gU0laRU9GKC5pbml0KTsKLSAgUFJPVklERShfaW5pdF9zaXplID0gU0laRU9GKC5pbml0KSk7Ci0KLSAgRU5UUlkoX3N0YXJ0KQotCi0vKiAgX2Z0ZXh0ID0gLjsKLSAgX2Z0ZXh0X3JvbSA9IC47Ci0gIF90ZXh0X3NpemUgPSBTSVpFT0YoLnRleHQpOwotICovCi0gIC50ZXh0IDogewotICAgICAgKigudGV4dCkKLSAgICAgICooLmdvdDEpCi0gICAgICB9ID4gcmFtCi0gIC5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfSA+IHJhbQotICAuZHRvcnMgOiB7ICooLmR0b3JzKSB9ID4gcmFtCi0gIC5kYXRhIDogeyAqKC5kYXRhKSB9ID4gcmFtCi0gIC5zZGF0YSA6IHsgKiguc2RhdGEpIH0gPiByYW0KLSAgLnNkYXRhMiA6IHsgKiguc2RhdGEyKQotICAgICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgICB9ID4gcmFtCi0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuc2JzcyA6IHsgKiguc2JzcykgfSA+IHJhbQotICAuc2JzczIgOiB7ICooLnNic3MyKSB9ID4gcmFtCi0gIC5ic3MgOiB7ICooLmJzcykgfSA+IHJhbQotICAuZGVidWcgOiB7ICooLmRlYnVnKSB9ID4gcmFtCi0gIC5saW5lIDogeyAqKC5saW5lKSB9ID4gcmFtCi0gIC5zeW10YWIgOiB7ICooLnN5bXRhYikgfSA+IHJhbQotICAuc2hyc3RydGFiIDogeyAqKC5zaHN0cnRhYikgfSA+IHJhbQotICAuc3RydGFiIDogeyAqKC5zdHJ0YWIpIH0gPiByYW0KLSAvKiAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9ID4gcmFtCi0gICovCi0gICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfSA+IHJhbQotICAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotCi0gIC5wcGNlbnYJOgotICB7Ci0gICAgY29tbW9uL2Vudmlyb25tZW50Lm8gKC5wcGNlbnYpCi0gIH0gPiByYW0KLQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQotCmRpZmYgLS1naXQgYS9ib2FyZC9zYmM4MjYwL01ha2VmaWxlIGIvYm9hcmQvc2JjODI2MC9NYWtlZmlsZQppbmRleCAyNWMzYmMxLi4xNGVkNDU3IDEwMDY0NAotLS0gYS9ib2FyZC9zYmM4MjYwL01ha2VmaWxlCisrKyBiL2JvYXJkL3NiYzgyNjAvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJOj0gc2JjODI2MC5vIGZsYXNoLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjODI2MC91LWJvb3QubGRzIGIvYm9hcmQvc2JjODI2MC91LWJvb3QubGRzCmluZGV4IGI0ZTUwMmIuLjQ0MjI0Y2IgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NiYzgyNjAvdS1ib290LmxkcworKysgYi9ib2FyZC9zYmM4MjYwL3UtYm9vdC5sZHMKQEAgLTkzLDYgKzkzLDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMTUsNCArMTIwLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2M1MjBfY2RwL01ha2VmaWxlIGIvYm9hcmQvc2M1MjBfY2RwL01ha2VmaWxlCmluZGV4IDBmNTAzOTMuLmY5YTM2ZjkgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NjNTIwX2NkcC9NYWtlZmlsZQorKysgYi9ib2FyZC9zYzUyMF9jZHAvTWFrZWZpbGUKQEAgLTI1LDExICsyNSwxMSBAQAogCiBMSUIJPSBsaWIkKEJPQVJEKS5hCiAKLU9CSlMJOj0gc2M1MjBfY2RwLm8gZmxhc2gubyAKK09CSlMJOj0gc2M1MjBfY2RwLm8gZmxhc2gubwogU09CSlMJOj0gc2M1MjBfY2RwX2FzbS5vIHNjNTIwX2NkcF9hc20xNi5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL3NjNTIwX2NkcC9mbGFzaC5jIGIvYm9hcmQvc2M1MjBfY2RwL2ZsYXNoLmMKaW5kZXggMWViYjMyZS4uYTRkMzdlNSAxMDA2NDQKLS0tIGEvYm9hcmQvc2M1MjBfY2RwL2ZsYXNoLmMKKysrIGIvYm9hcmQvc2M1MjBfY2RwL2ZsYXNoLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDAyLCAyMDAzCiAgKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UKLSAqIAorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CiAgKiBBbGV4IFp1ZXBrZSA8YXp1QHN5c2dvLmRlPgpAQCAtNTUsMTIyICs1NSwxMjEgQEAKIHN0YXRpYyB1MzIgX3Byb2JlX2ZsYXNoKHUzMiBhZGRyLCB1MzIgYncsIGludCBpbCkKIHsKIAl1MzIgcmVzdWx0PTA7Ci0JCisKIAkvKiBGaXJzdCBkbyBhbiB1bmxvY2sgY3ljbGUgZm9yIHRoZSBiZW5lZml0IG9mCiAJICogZGV2aWNlcyB0aGF0IG5lZWQgaXQgKi8KLQkKKwogCXN3aXRjaCAoYncpIHsKLQkJCisKIAljYXNlIDE6CiAJCSoodm9sYXRpbGUgdTgqKShhZGRyKzB4NTU1NSkgPSAweGFhOwogCQkqKHZvbGF0aWxlIHU4KikoYWRkcisweDJhYWEpID0gMHg1NTsKIAkJKih2b2xhdGlsZSB1OCopKGFkZHIrMHg1NTU1KSA9IDB4OTA7Ci0JCQorCiAJCS8qIFJlYWQgdmVuZG9yICovCiAJCXJlc3VsdCA9ICoodm9sYXRpbGUgdTgqKWFkZHI7CiAJCXJlc3VsdCA8PD0gMTY7Ci0JCQorCiAJCS8qIFJlYWQgZGV2aWNlICovCiAJCXJlc3VsdCB8PSAqKHZvbGF0aWxlIHU4KikoYWRkcisyKTsKLQkJCisKIAkJLyogUmV0dXJuIGRldmljZSB0byBkYXRhIG1vZGUgKi8KIAkJKih2b2xhdGlsZSB1OCopYWRkciA9IDB4ZmY7Ci0JCSoodm9sYXRpbGUgdTgqKShhZGRyKzB4NTU1NSksIDB4ZjA7ICAKKwkJKih2b2xhdGlsZSB1OCopKGFkZHIrMHg1NTU1KSwgMHhmMDsKIAkJYnJlYWs7Ci0JCQorCiAJY2FzZSAyOgogCQkqKHZvbGF0aWxlIHUxNiopKGFkZHIrMHhhYWFhKSA9IDB4YWFhYTsKIAkJKih2b2xhdGlsZSB1MTYqKShhZGRyKzB4NTU1NCkgPSAweDU1NTU7Ci0JCQorCiAJCS8qIElzc3VlIGlkZW50aWZpY2F0aW9uIGNvbW1hbmQgKi8KIAkJaWYgKGlsID09IDIpIHsKIAkJCSoodm9sYXRpbGUgdTE2KikoYWRkcisweGFhYWEpID0gMHg5MDkwOwotCQkJCisKIAkJCS8qIFJlYWQgdmVuZG9yICovCiAJCQlyZXN1bHQgPSAqKHZvbGF0aWxlIHU4KilhZGRyOwogCQkJcmVzdWx0IDw8PSAxNjsKLQkJCQorCiAJCQkvKiBSZWFkIGRldmljZSAqLwogCQkJcmVzdWx0IHw9ICoodm9sYXRpbGUgdTgqKShhZGRyKzIpOwotCQkJCisKIAkJCS8qIFJldHVybiBkZXZpY2UgdG8gZGF0YSBtb2RlICovCiAJCQkqKHZvbGF0aWxlIHUxNiopYWRkciA9ICAweGZmZmY7Ci0JCQkqKHZvbGF0aWxlIHUxNiopKGFkZHIrMHhhYWFhKSwgMHhmMGYwOyAgCi0JCQkKKwkJCSoodm9sYXRpbGUgdTE2KikoYWRkcisweGFhYWEpLCAweGYwZjA7CisKIAkJfSBlbHNlIHsKIAkJCSoodm9sYXRpbGUgdTgqKShhZGRyKzB4YWFhYSkgPSAweDkwOwogCQkJLyogUmVhZCB2ZW5kb3IgKi8KIAkJCXJlc3VsdCA9ICoodm9sYXRpbGUgdTE2KilhZGRyOwogCQkJcmVzdWx0IDw8PSAxNjsKLQkJCQorCiAJCQkvKiBSZWFkIGRldmljZSAqLwogCQkJcmVzdWx0IHw9ICoodm9sYXRpbGUgdTE2KikoYWRkcisyKTsKLQkJCQorCiAJCQkvKiBSZXR1cm4gZGV2aWNlIHRvIGRhdGEgbW9kZSAqLwogCQkJKih2b2xhdGlsZSB1OCopYWRkciA9IDB4ZmY7Ci0JCQkqKHZvbGF0aWxlIHU4KikoYWRkcisweGFhYWEpLCAweGYwOyAgCQkJCisJCQkqKHZvbGF0aWxlIHU4KikoYWRkcisweGFhYWEpLCAweGYwOwogCQl9Ci0JCQorCiAJCWJyZWFrOwotCQkKKwogCSBjYXNlIDQ6CiAJCSoodm9sYXRpbGUgdTMyKikoYWRkcisweDU1NTQpID0gMHhhYWFhYWFhYTsKIAkJKih2b2xhdGlsZSB1MzIqKShhZGRyKzB4YWFhOCkgPSAweDU1NTU1NTU1OwotCQkKKwogCQlzd2l0Y2ggKGlsKSB7CiAJCWNhc2UgMToKIAkJCS8qIElzc3VlIGlkZW50aWZpY2F0aW9uIGNvbW1hbmQgKi8KIAkJCSoodm9sYXRpbGUgdTgqKShhZGRyKzB4NTU1NCkgPSAweDkwOwotCQkJCisKIAkJCS8qIFJlYWQgdmVuZG9yICovCiAJCQlyZXN1bHQgPSAqKHZvbGF0aWxlIHUxNiopYWRkcjsKIAkJCXJlc3VsdCA8PD0gMTY7Ci0JCQorCiAJCQkvKiBSZWFkIGRldmljZSAqLwogCQkJcmVzdWx0IHw9ICoodm9sYXRpbGUgdTE2KikoYWRkcis0KTsKLQkJCQorCiAJCQkvKiBSZXR1cm4gZGV2aWNlIHRvIGRhdGEgbW9kZSAqLwogCQkJKih2b2xhdGlsZSB1OCopYWRkciA9ICAweGZmOwotCQkJKih2b2xhdGlsZSB1OCopKGFkZHIrMHg1NTU0KSwgMHhmMDsgIAorCQkJKih2b2xhdGlsZSB1OCopKGFkZHIrMHg1NTU0KSwgMHhmMDsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSAyOgogCQkJLyogSXNzdWUgaWRlbnRpZmljYXRpb24gY29tbWFuZCAqLwogCQkJKih2b2xhdGlsZSB1MzIqKShhZGRyICsgMHg1NTU0KSA9IDB4MDA5MDAwOTA7Ci0JCQkKKwogCQkJLyogUmVhZCB2ZW5kb3IgKi8KIAkJCXJlc3VsdCA9ICoodm9sYXRpbGUgdTE2KilhZGRyOwogCQkJcmVzdWx0IDw8PSAxNjsKLQkJCQorCiAJCQkvKiBSZWFkIGRldmljZSAqLwogCQkJcmVzdWx0IHw9ICoodm9sYXRpbGUgdTE2KikoYWRkcis0KTsKLQkJCQorCiAJCQkvKiBSZXR1cm4gZGV2aWNlIHRvIGRhdGEgbW9kZSAqLwogCQkJKih2b2xhdGlsZSB1MzIqKWFkZHIgPSAgMHgwMGZmMDBmZjsKLQkJCSoodm9sYXRpbGUgdTMyKikoYWRkcisweDU1NTQpLCAweDAwZjAwMGYwOyAgCisJCQkqKHZvbGF0aWxlIHUzMiopKGFkZHIrMHg1NTU0KSwgMHgwMGYwMDBmMDsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSA0OgogCQkJLyogSXNzdWUgaWRlbnRpZmljYXRpb24gY29tbWFuZCAqLwogCQkJKih2b2xhdGlsZSB1MzIqKShhZGRyKzB4NTU1NCkgPSAweDkwOTA5MDkwOwotCQkJCisKIAkJCS8qIFJlYWQgdmVuZG9yICovCiAJCQlyZXN1bHQgPSAqKHZvbGF0aWxlIHU4KilhZGRyOwogCQkJcmVzdWx0IDw8PSAxNjsKLQkJCQorCiAJCQkvKiBSZWFkIGRldmljZSAqLwogCQkJcmVzdWx0IHw9ICoodm9sYXRpbGUgdTgqKShhZGRyKzQpOwotCQkJCisKIAkJCS8qIFJldHVybiBkZXZpY2UgdG8gZGF0YSBtb2RlICovCiAJCQkqKHZvbGF0aWxlIHUzMiopYWRkciA9ICAweGZmZmZmZmZmOwotCQkJKih2b2xhdGlsZSB1MzIqKShhZGRyKzB4NTU1NCksIDB4ZjBmMGYwZjA7IAorCQkJKih2b2xhdGlsZSB1MzIqKShhZGRyKzB4NTU1NCksIDB4ZjBmMGYwZjA7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAl9Ci0JCi0JCi0JCisKKwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE4MCwzNiArMTc5LDM2IEBACiAKIHN0YXRpYyBpbnQgaWRlbnRpZnlfZmxhc2godW5zaWduZWQgYWRkcmVzcywgaW50IHdpZHRoKQogewotCWludCBpczsJCisJaW50IGlzOwogCWludCBkZXZpY2U7Ci0JaW50IHZlbmRvcjsJCisJaW50IHZlbmRvcjsKIAlpbnQgc2l6ZTsKIAl1bnNpZ25lZCByZXM7Ci0JCisKIAl1MzIgKCpfcHJvYmVfZmxhc2hfcHRyKSh1MzIgYSwgdTMyIGJ3LCBpbnQgaWwpOwotCQotCXNpemUgPSAodW5zaWduZWQpJl9wcm9iZV9mbGFzaF9lbmQgLSAodW5zaWduZWQpX3Byb2JlX2ZsYXNoOyAKLQkKKworCXNpemUgPSAodW5zaWduZWQpJl9wcm9iZV9mbGFzaF9lbmQgLSAodW5zaWduZWQpX3Byb2JlX2ZsYXNoOworCiAJaWYgKHNpemUgPiBQUk9CRV9CVUZGRVJfU0laRSkgewogCQlwcmludGYoIl9wcm9iZV9mbGFzaCgpIHJvdXRpbmUgdG9vIGxhcmdlICglZCkgJXAgLSAlcFxuIiwKIAkJICAgICAgIHNpemUsICZfcHJvYmVfZmxhc2hfZW5kLCBfcHJvYmVfZmxhc2gpOwogCQlyZXR1cm4gMDsKIAl9Ci0JCisKIAltZW1jcHkoYnVmZmVyLCBfcHJvYmVfZmxhc2gsIHNpemUpOwogCV9wcm9iZV9mbGFzaF9wdHIgPSAodm9pZCopYnVmZmVyOwotCQorCiAJaXMgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAlyZXMgPSBfcHJvYmVfZmxhc2hfcHRyKGFkZHJlc3MsIHdpZHRoLCAxKTsKIAlpZiAoaXMpIHsKIAkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAl9Ci0JCi0JCi0gICAgICAgIHZlbmRvciA9IHJlcyA+PiAxNjsKKworCisJdmVuZG9yID0gcmVzID4+IDE2OwogCWRldmljZSA9IHJlcyAmIDB4ZmZmZjsKLQkKLQkJCisKKwogCXJldHVybiByZXM7CiB9CiAKQEAgLTIxNywxMiArMjE2LDEyIEBACiB7CiAJaW50IGksIGo7CiAJdWxvbmcgc2l6ZSA9IDA7Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgU0M1MjBfTUFYX0ZMQVNIX0JBTktTOyBpKyspIHsKIAkJdW5zaWduZWQgaWQ7CiAJCXVsb25nIGZsYXNoYmFzZSA9IDA7Ci0JCWludCBzZWN0c2l6ZSA9IDA7IAotCQkKKwkJaW50IHNlY3RzaXplID0gMDsKKwogCQltZW1zZXQoZmxhc2hfaW5mb1tpXS5wcm90ZWN0LCAwLCBDRkdfTUFYX0ZMQVNIX1NFQ1QpOwogCQlzd2l0Y2ggKGkpIHsKIAkJY2FzZSAwOgpAQCAtMjM3LDcgKzIzNiw3IEBACiAJCWRlZmF1bHQ6CiAJCQlwYW5pYygiY29uZmlndXJlZCB0byBtYW55IGZsYXNoIGJhbmtzIVxuIik7CiAJCX0KLQkJCisKIAkJaWQgPSBpZGVudGlmeV9mbGFzaChmbGFzaGJhc2UsIDQpOwogCQlzd2l0Y2ggKGlkICYgMHgwMGZmMDBmZikgewogCQljYXNlIDB4MDAwMTAwYzg6CkBAIC0yNDUsMzEgKzI0NCwzMSBAQAogCQkJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9CiAJCQkJKEFNRF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSB8CiAJCQkJKEFNRF9JRF9MVjAxNkIgJiBGTEFTSF9UWVBFTUFTSyk7Ci0JCQkKKwogCQkJZmxhc2hfaW5mb1tpXS5zaXplID0gQU1EMjlMVjAxNkJfU0laRSo0OwogCQkJZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQgPSBBTUQyOUxWMDE2Ql9TRUNUT1JTOwogCQkJc2VjdHNpemUgPSAoQU1EMjlMVjAxNkJfU0laRSo0KS9BTUQyOUxWMDE2Ql9TRUNUT1JTOwogCQkJcHJpbnRmKCJCYW5rICVkOiA0IHggQU1EIDI5TFYwMTdCXG4iLCBpKTsKIAkJCWJyZWFrOwotCQkJCi0JCQkKKworCiAJCWRlZmF1bHQ6CiAJCQlwcmludGYoIkJhbmsgJWQgaGF2ZSB1bmtub3duIGZsYXNoICUwOHhcbiIsIGksIGlkKTsKIAkJCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwogCQkJY29udGludWU7CiAJCX0KLQkJCisKIAkJZm9yIChqID0gMDsgaiA8IGZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50OyBqKyspIHsKIAkJCWZsYXNoX2luZm9baV0uc3RhcnRbal0gPSBmbGFzaGJhc2UgKyBqICogc2VjdHNpemU7CiAJCX0KIAkJc2l6ZSArPSBmbGFzaF9pbmZvW2ldLnNpemU7Ci0JCQorCiAJCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX0NMRUFSLAogCQkJICAgICAgZmxhc2hfaW5mb1tpXS5zdGFydFswXSwKIAkJCSAgICAgICBmbGFzaF9pbmZvW2ldLnN0YXJ0WzBdICsgZmxhc2hfaW5mb1tpXS5zaXplIC0gMSwKIAkJCSAgICAgICZmbGFzaF9pbmZvW2ldKTsKIAl9Ci0JCisKIAkvKgogCSAqIFByb3RlY3QgbW9uaXRvciBhbmQgZW52aXJvbm1lbnQgc2VjdG9ycwogCSAqLwpAQCAtMjgyLDcgKzI4MSw3IEBACiAJCSAgICAgIENGR19FTlZfQUREUiwKIAkJICAgICAgQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TSVpFIC0gMSwKIAkJICAgICAgJmZsYXNoX2luZm9bMF0pOwotI2VuZGlmCQorI2VuZGlmCiAJcmV0dXJuIHNpemU7CiB9CiAKQEAgLTI5MSw5ICsyOTAsOSBAQAogdm9pZCBmbGFzaF9wcmludF9pbmZvKGZsYXNoX2luZm9fdCAqaW5mbykKIHsKIAlpbnQgaTsKLQkKKwogCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewotCQkKKwogCWNhc2UgKEFNRF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKToKIAkJcHJpbnRmKCJBTUQ6ICAgIik7CiAJCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewpAQCAtMzA1LDE3ICszMDQsMTcgQEAKIAkJCWdvdG8gZG9uZTsKIAkJCWJyZWFrOwogCQl9Ci0JCQorCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ZigiVW5rbm93biBWZW5kb3IgIik7CiAJCWJyZWFrOwogCX0KLQkKLQkKKworCiAJcHJpbnRmKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAogCSAgICAgICBpbmZvLT5zaXplID4+IDIwLCBpbmZvLT5zZWN0b3JfY291bnQpOwotCQorCiAJcHJpbnRmKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CiAJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CiAJCWlmICgoaSAlIDUpID09IDApIHsKQEAgLTMyNSw3ICszMjQsNyBAQAogCQkJaW5mby0+cHJvdGVjdFtpXSA/ICIgKFJPKSIgOiAiICAgICAiKTsKIAl9CiAJcHJpbnRmICgiXG4iKTsKLQkKKwogCWRvbmU6CiB9CiAKQEAgLTMzOSw3ICszMzgsNyBAQAogCXVuc2lnbmVkIG1pbGxpPTA7IFwKIAlcCiAJbWljcm8gPSAqKHZvbGF0aWxlIHUxNiopKDB4ZmZmZWYwMDArU0M1MjBfU1dUTVJNSUxMSSk7IFwKLSAgICAgICAgIFwKKwkgXAogCWZvciAoOzspIHsgXAogCQlcCiAJCW1pbGxpICs9ICoodm9sYXRpbGUgdTE2KikoMHhmZmZlZjAwMCtTQzUyMF9TV1RNUk1JTExJKTsgXApAQCAtMzQ5LDEyICszNDgsMTIgQEAKIAkJCWJyZWFrOyBcCiAJCX0gXAogCX0gXAotfSB3aGlsZSAoMCkgCit9IHdoaWxlICgwKQogCiBzdGF0aWMgdTMyIF9hbWRfZXJhc2VfZmxhc2godTMyIGFkZHIsIHUzMiBzZWN0b3IpCiB7CiAJdW5zaWduZWQgZWxhcHNlZDsKLQkKKwogCS8qIElzc3VlIGVyYXNlICovCiAJKih2b2xhdGlsZSB1MzIqKShhZGRyICsgMHg1NTU0KSA9IDB4QUFBQUFBQUE7CiAJKih2b2xhdGlsZSB1MzIqKShhZGRyICsgMHhhYWE4KSA9IDB4NTU1NTU1NTU7CkBAIC0zNjQsMjEgKzM2MywyMSBAQAogCSoodm9sYXRpbGUgdTMyKikoYWRkciArIDB4YWFhOCkgPSAweDU1NTU1NTU1OwogCS8qIFNlY3RvciBlcmFzZSBjb21tYW5kIGNvbWVzIGxhc3QgKi8KIAkqKHZvbGF0aWxlIHUzMiopKGFkZHIgKyBzZWN0b3IpID0gMHgzMDMwMzAzMDsKLQkKKwogCWVsYXBzZWQgPSAqKHZvbGF0aWxlIHUxNiopKDB4ZmZmZWYwMDArU0M1MjBfU1dUTVJNSUxMSSk7IC8qIGR1bW15IHJlYWQgKi8KIAllbGFwc2VkID0gMDsKIAlfX3VkZWxheSg1MCk7CiAJd2hpbGUgKCgoKih2b2xhdGlsZSB1MzIqKShhZGRyICsgc2VjdG9yKSkgJiAweDgwODA4MDgwKSAhPSAweDgwODA4MDgwKSB7Ci0JCQorCiAJCWVsYXBzZWQgKz0gKih2b2xhdGlsZSB1MTYqKSgweGZmZmVmMDAwK1NDNTIwX1NXVE1STUlMTEkpOwogCQlpZiAoZWxhcHNlZCA+ICgoQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQvQ0ZHX0haKSAqIDEwMDApKSB7CiAJCQkqKHZvbGF0aWxlIHUzMiopKGFkZHIpID0gMHhmMGYwZjBmMDsKLQkJCXJldHVybiAxOwkJCQorCQkJcmV0dXJuIDE7CiAJCX0KIAl9Ci0JCisKIAkqKHZvbGF0aWxlIHUzMiopKGFkZHIpID0gMHhmMGYwZjBmMDsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0zOTIsNyArMzkxLDcgQEAKIAlpbnQgcHJvdDsKIAlpbnQgc2VjdDsKIAl1bnNpZ25lZCBzaXplOwotCQorCiAJaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7CiAJCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CiAJCQlwcmludGYoIi0gbWlzc2luZ1xuIik7CkBAIC00MDEsNjYgKzQwMCw2NiBAQAogCQl9CiAJCXJldHVybiAxOwogCX0KLQkKKwogCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gKEFNRF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSkgewotCQlzaXplID0gKHVuc2lnbmVkKSZfYW1kX2VyYXNlX2ZsYXNoX2VuZCAtICh1bnNpZ25lZClfYW1kX2VyYXNlX2ZsYXNoOyAKLQkJCisJCXNpemUgPSAodW5zaWduZWQpJl9hbWRfZXJhc2VfZmxhc2hfZW5kIC0gKHVuc2lnbmVkKV9hbWRfZXJhc2VfZmxhc2g7CisKIAkJaWYgKHNpemUgPiBQUk9CRV9CVUZGRVJfU0laRSkgewogCQkJcHJpbnRmKCJfYW1kX2VyYXNlX2ZsYXNoKCkgcm91dGluZSB0b28gbGFyZ2UgKCVkKSAlcCAtICVwXG4iLAogCQkJICAgICAgIHNpemUsICZfYW1kX2VyYXNlX2ZsYXNoX2VuZCwgX2FtZF9lcmFzZV9mbGFzaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQkKKwogCQltZW1jcHkoYnVmZmVyLCBfYW1kX2VyYXNlX2ZsYXNoLCBzaXplKTsKIAkJX2VyYXNlX2ZsYXNoX3B0ciA9ICh2b2lkKilidWZmZXI7Ci0JCisKIAl9ICBlbHNlIHsKIAkJcHJpbnRmICgiQ2FuJ3QgZXJhc2UgdW5rbm93biBmbGFzaCB0eXBlIC0gYWJvcnRlZFxuIik7CiAJCXJldHVybiAxOwogCX0KLQkKKwogCXByb3QgPSAwOwogCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgewogCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewogCQkJcHJvdCsrOwogCQl9CiAJfQotCQorCiAJaWYgKHByb3QpIHsKIAkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLCBwcm90KTsKIAl9IGVsc2UgewogCQlwcmludGYgKCJcbiIpOwogCX0KLQkJCi0JCisKKwogCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KIAlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7IHNlY3QrKykgewotCQkKKwogCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7IC8qIG5vdCBwcm90ZWN0ZWQgKi8KIAkJCWludCByZXM7CiAJCQlpbnQgZmxhZzsKLQkJCQorCiAJCQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KIAkJCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQkJCQorCiAJCQlyZXMgPSBfZXJhc2VfZmxhc2hfcHRyKGluZm8tPnN0YXJ0WzBdLCBpbmZvLT5zdGFydFtzZWN0XS1pbmZvLT5zdGFydFswXSk7Ci0JCQkKKwogCQkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCiAJCQlpZiAoZmxhZykgewogCQkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAJCQl9Ci0JCQkKLQkJCQorCisKIAkJCWlmIChyZXMpIHsKIAkJCQlwcmludGYoIkVyYXNlIHRpbWVkIG91dCwgc2VjdG9yICVkXG4iLCBzZWN0KTsKIAkJCQlyZXR1cm4gcmVzOwogCQkJfQotCQkJCi0JCQlwdXRjKCcuJyk7CQkJCi0JCX0JCQorCisJCQlwdXRjKCcuJyk7CisJCX0KIAl9CiAKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC00NzYsMzMgKzQ3NSwzMyBAQAogCXZvbGF0aWxlIHUzMiAqZGVzdDIgPSAodTMyKilkZXN0OwogCXZvbGF0aWxlIHUzMiAqZGF0YTIgPSAodTMyKikmZGF0YTsKIAl1bnNpZ25lZCBlbGFwc2VkOwotCQorCiAJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCiAJaWYgKCgqKCh2b2xhdGlsZSB1MzIqKWRlc3QpICYgKHUzMilkYXRhKSAhPSAodTMyKWRhdGEpIHsKIAkJcmV0dXJuIDI7CiAJfQotCQkKKwogCWFkZHIyWzB4NTU1NF0gPSAweEFBQUFBQUFBOwogCWFkZHIyWzB4YWFhOF0gPSAweDU1NTU1NTU1OwogCWFkZHIyWzB4NTU1NF0gPSAweEEwQTBBMEEwOwotCQorCiAJZGVzdDJbMF0gPSBkYXRhOwotCQorCiAJZWxhcHNlZCA9ICoodm9sYXRpbGUgdTE2KikoMHhmZmZlZjAwMCtTQzUyMF9TV1RNUk1JTExJKTsgLyogZHVtbXkgcmVhZCAqLwogCWVsYXBzZWQgPSAwOwotCQorCiAJLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLwogCXdoaWxlICgoZGVzdDJbMF0gJiAweDgwODA4MDgwKSAhPSAoZGF0YTJbMF0gJiAweDgwODA4MDgwKSkgewogCQllbGFwc2VkICs9ICoodm9sYXRpbGUgdTE2KikoMHhmZmZlZjAwMCtTQzUyMF9TV1RNUk1JTExJKTsKIAkJaWYgKGVsYXBzZWQgPiAoKENGR19GTEFTSF9XUklURV9UT1VUL0NGR19IWikgKiAxMDAwKSkgewogCQkJYWRkcjJbMF0gPSAweGYwZjBmMGYwOwotCQkJcmV0dXJuIDE7CQkJCisJCQlyZXR1cm4gMTsKIAkJfQogCX0KIAotCQorCiAJYWRkcjJbMF0gPSAweGYwZjBmMGYwOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUxMSw4ICs1MTAsNiBAQAogICAgICAiLmxvbmcgMFxuIik7CiAKIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENvcHkgbWVtb3J5IHRvIGZsYXNoLCByZXR1cm5zOgogICogMCAtIE9LCkBAIC01MjgsMTkgKzUyNSwxOSBAQAogCWludCBmbGFnOwogCXUzMiAoKl93cml0ZV93b3JkX3B0cikodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGRlc3QsIHVuc2lnbmVkIGRhdGEpOwogCXVuc2lnbmVkIHNpemU7Ci0JCisKIAlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IChBTURfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSykpIHsKLQkJc2l6ZSA9ICh1bnNpZ25lZCkmX2FtZF93cml0ZV93b3JkX2VuZCAtICh1bnNpZ25lZClfYW1kX3dyaXRlX3dvcmQ7IAotCQkKKwkJc2l6ZSA9ICh1bnNpZ25lZCkmX2FtZF93cml0ZV93b3JkX2VuZCAtICh1bnNpZ25lZClfYW1kX3dyaXRlX3dvcmQ7CisKIAkJaWYgKHNpemUgPiBQUk9CRV9CVUZGRVJfU0laRSkgewogCQkJcHJpbnRmKCJfYW1kX3dyaXRlX3dvcmQoKSByb3V0aW5lIHRvbyBsYXJnZSAoJWQpICVwIC0gJXBcbiIsCiAJCQkgICAgICAgc2l6ZSwgJl9hbWRfd3JpdGVfd29yZF9lbmQsIF9hbWRfd3JpdGVfd29yZCk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQkKKwogCQltZW1jcHkoYnVmZmVyLCBfYW1kX3dyaXRlX3dvcmQsIHNpemUpOwogCQlfd3JpdGVfd29yZF9wdHIgPSAodm9pZCopYnVmZmVyOwotCQorCiAJfSBlbHNlIHsKIAkJcHJpbnRmICgiQ2FuJ3QgcHJvZ3JhbSB1bmtub3duIGZsYXNoIHR5cGUgLSBhYm9ydGVkXG4iKTsKIAkJcmV0dXJuIDM7CkBAIC01NDgsNyArNTQ1LDcgQEAKIAogCiAJd3AgPSAoYWRkciAmIH4zKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCi0JCisKIAogCS8qCiAJICogaGFuZGxlIHVuYWxpZ25lZCBzdGFydCBieXRlcwpAQCAtNTY2LDEyICs1NjMsMTIgQEAKIAkJZm9yICg7IGNudD09MCAmJiBpPDQ7ICsraSwgKytjcCkgewogCQkJZGF0YSB8PSAoKih1Y2hhciAqKWNwKSAgPDwgKDgqaSk7CiAJCX0KLQkJCisKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCiAJCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKLQkJCisKIAkJcmMgPSBfd3JpdGVfd29yZF9wdHIoaW5mby0+c3RhcnRbMF0sIHdwLCBkYXRhKTsKLQkJCisKIAkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCiAJCWlmIChmbGFnKSB7CiAJCQllbmFibGVfaW50ZXJydXB0cygpOwpAQCAtNTgxLDIyICs1NzgsMjIgQEAKIAkJfQogCQl3cCArPSA0OwogCX0KLQkKKwogCS8qCiAJICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0CiAJICovCiAJd2hpbGUgKGNudCA+PSA0KSB7CiAJCWRhdGEgPSAwOwotCQkJICAgICAgIAorCiAJCWZvciAoaT0wOyBpPDQ7ICsraSkgewogCQkJZGF0YSB8PSAqc3JjKysgPDwgKDgqaSk7CiAJCX0KLQkJCisKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCiAJCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAogCQlyYyA9IF93cml0ZV93b3JkX3B0cihpbmZvLT5zdGFydFswXSwgd3AsIGRhdGEpOwotCQkKKwogCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KIAkJaWYgKGZsYWcpIHsKIAkJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CkBAIC02MDcsMTEgKzYwNCwxMSBAQAogCQl3cCAgKz0gNDsKIAkJY250IC09IDQ7CiAJfQotCQorCiAJaWYgKGNudCA9PSAwKSB7CiAJCXJldHVybiAwOwogCX0KLQkKKwogCS8qCiAJICogaGFuZGxlIHVuYWxpZ25lZCB0YWlsIGJ5dGVzCiAJICovCkBAIC02MjAsNyArNjE3LDcgQEAKIAkJZGF0YSB8PSAqc3JjKysgPDwgKDgqaSk7CiAJCS0tY250OwogCX0KLQkKKwogCWZvciAoOyBpPDQ7ICsraSwgKytjcCkgewogCQlkYXRhIHw9ICgqKHVjaGFyICopY3ApIDw8ICg4KmkpOwogCX0KQEAgLTYyOSwxNCArNjI2LDEyIEBACiAJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCiAJcmMgPSBfd3JpdGVfd29yZF9wdHIoaW5mby0+c3RhcnRbMF0sIHdwLCBkYXRhKTsKLQkKKwogCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwogCWlmIChmbGFnKSB7CiAJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAJfQotCQorCiAJcmV0dXJuIHJjOwotCQorCiB9Ci0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2M1MjBfY2RwL2ZsYXNoX29sZC5jIGIvYm9hcmQvc2M1MjBfY2RwL2ZsYXNoX29sZC5jCmluZGV4IGQ0MjA0YTguLjQxNmIwMWQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NjNTIwX2NkcC9mbGFzaF9vbGQuYworKysgYi9ib2FyZC9zYzUyMF9jZHAvZmxhc2hfb2xkLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDAyCiAgKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UKLSAqIAorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CiAgKiBBbGV4IFp1ZXBrZSA8YXp1QHN5c2dvLmRlPgpAQCAtNjcsMjIgKzY3LDIyIEBACiB7CiAJaW50IGksIGo7CiAJdWxvbmcgc2l6ZSA9IDA7Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgU0M1MjBfTUFYX0ZMQVNIX0JBTktTOyBpKyspIHsKIAkJdWxvbmcgZmxhc2hiYXNlID0gMDsKLQkJaW50IHNlY3RzaXplID0gMDsgCisJCWludCBzZWN0c2l6ZSA9IDA7CiAJCWlmIChpPT0wIHx8IGk9PTIpIHsKLQkJCS8qIEZpeE1lOiB0aGlzIGFzc3VtZXMgdGhhdCBiYW5rIDAgYW5kIDIgCisJCQkvKiBGaXhNZTogdGhpcyBhc3N1bWVzIHRoYXQgYmFuayAwIGFuZCAyCiAJCQkgKiBhcmUgbWFwcGVkIHRvIHRoZSB0d28gOE1iIGJhbmtzICovCiAJCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0KIAkJCQkoQU1EX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spIHwKIAkJCQkoQU1EX0lEX0xWMDE2QiAmIEZMQVNIX1RZUEVNQVNLKTsKLQkJCQorCiAJCQlmbGFzaF9pbmZvW2ldLnNpemUgPSBBTUQyOUxWMDE2X1NJWkUqNDsKIAkJCWZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50ID0gQU1EMjlMVjAxNl9TRUNUT1JTOwogCQkJc2VjdHNpemUgPSAoQU1EMjlMVjAxNl9TSVpFKjQpL0FNRDI5TFYwMTZfU0VDVE9SUzsKIAkJfSBlbHNlIHsKLQkJCS8qIEZpeE1lOiB0aGlzIGFzc3VtZXMgdGhhdCBiYW5rMSBpcyB1bm1hcHBlZCAKKwkJCS8qIEZpeE1lOiB0aGlzIGFzc3VtZXMgdGhhdCBiYW5rMSBpcyB1bm1hcHBlZAogCQkJICogKG9yIG1hcHBlZCB0byB0aGUgc2FtZSBmbGFzaCBiYW5rIGFzIEJPT1RDUykgKi8KIAkJCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSAwOwogCQkJZmxhc2hfaW5mb1tpXS5zaXplID0gMDsKQEAgLTEwMywxNCArMTAzLDE0IEBACiAJCWRlZmF1bHQ6CiAJCQlwYW5pYygiY29uZmlndXJlZCB0byBtYW55IGZsYXNoIGJhbmtzIVxuIik7CiAJCX0KLQkJCisKIAkJZm9yIChqID0gMDsgaiA8IGZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50OyBqKyspIHsKIAkJCWZsYXNoX2luZm9baV0uc3RhcnRbal0gPSBzZWN0c2l6ZTsKIAkJCWZsYXNoX2luZm9baV0uc3RhcnRbal0gPSBmbGFzaGJhc2UgKyBqICogc2VjdHNpemU7CiAJCX0KIAkJc2l6ZSArPSBmbGFzaF9pbmZvW2ldLnNpemU7CiAJfQotCQorCiAJLyoKIAkgKiBQcm90ZWN0IG1vbml0b3IgYW5kIGVudmlyb25tZW50IHNlY3RvcnMKIAkgKi8KQEAgLTExOCw3ICsxMTgsNyBAQAogCQkgICAgICBpMzg2Ym9vdF9zdGFydC1TQzUyMF9GTEFTSF9CQU5LMF9CQVNFLAogCQkgICAgICBpMzg2Ym9vdF9lbmQtU0M1MjBfRkxBU0hfQkFOSzBfQkFTRSwKIAkJICAgICAgJmZsYXNoX2luZm9bMF0pOwotCQorCiAjaWZkZWYgQ0ZHX0VOVl9BRERSCiAJZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAogCQkgICAgICBDRkdfRU5WX0FERFIsCkBAIC0xNDIsNyArMTQyLDcgQEAKIAkJcHJpbnRmKCJVbmtub3duIFZlbmRvciAiKTsKIAkJYnJlYWs7CiAJfQotCQorCiAJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CiAJY2FzZSAoQU1EX0lEX0xWMDE2QiAmIEZMQVNIX1RZUEVNQVNLKToKIAkJcHJpbnRmKCI0eCBBbWQyOUxWMDE2QiAoMTZNYml0KVxuIik7CkBAIC0xNTIsMTAgKzE1MiwxMCBAQAogCQlnb3RvIGRvbmU7CiAJCWJyZWFrOwogCX0KLQkKKwogCXByaW50ZigiICBTaXplOiAlbGQgTUIgaW4gJWQgU2VjdG9yc1xuIiwKIAkgICAgICAgaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKLQkKKwogCXByaW50ZigiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewogCQlpZiAoKGkgJSA1KSA9PSAwKSB7CkBAIC0xNjUsNyArMTY1LDcgQEAKIAkJCWluZm8tPnByb3RlY3RbaV0gPyAiIChSTykiIDogIiAgICAgIik7CiAJfQogCXByaW50ZiAoIlxuIik7Ci0JCisKIAlkb25lOgogfQogCkBAIC0xODAsMjAgKzE4MCwyMCBAQAogCWludCBjaGlwMSwgY2hpcDI7CiAKIAkvKiBmaXJzdCBsb29rIGZvciBwcm90ZWN0aW9uIGJpdHMgKi8KLQkKKwogCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CiAJCXJldHVybiBFUlJfVU5LTk9XTl9GTEFTSF9UWVBFOwogCX0KLQkKKwogCWlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewogCQlyZXR1cm4gRVJSX0lOVkFMOwogCX0KLQkKKwogCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgIT0KIAkgICAgKEFNRF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSkgewogCQlyZXR1cm4gRVJSX1VOS05PV05fRkxBU0hfVkVORE9SOwogCX0KLQkKKwogCXByb3QgPSAwOwogCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgewogCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgewpAQCAtMjAzLDcgKzIwMyw3IEBACiAJaWYgKHByb3QpIHsKIAkJcmV0dXJuIEVSUl9QUk9URUNURUQ7CiAJfQotCQorCiAJLyoKIAkgKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0CiAJICogaGVyZS4gUmVtZW1iZXIgdGhhdCBvdXIgZXhjZXB0aW9uIHZlY3RvcnMgYXJlCkBAIC0yMTIsNzcgKzIxMiw3NyBAQAogCSAqIGNoaXAgaXMgaW4gcHJvZ3JhbW1pbmcgbW9kZS4KIAkgKi8KIAlpZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwotCQorCiAJLyogU3RhcnQgZXJhc2Ugb24gdW5wcm90ZWN0ZWQgc2VjdG9ycyAqLwogCWZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3Q8PXNfbGFzdCAmJiAhY3RybGMoKTsgc2VjdCsrKSB7CiAJCXByaW50ZigiRXJhc2luZyBzZWN0b3IgJTJkIC4uLiAiLCBzZWN0KTsKLQkJCisKIAkJLyogYXJtIHNpbXBsZSwgbm9uIGludGVycnVwdCBkZXBlbmRlbnQgdGltZXIgKi8KIAkJcmVzZXRfdGltZXIoKTsKLQkJCi0JCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsJCisKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewogCQkJLyogbm90IHByb3RlY3RlZCAqLwogCQkJdWxvbmcgYWRkciA9IGluZm8tPnN0YXJ0W3NlY3RdOwotCQkJCisKIAkJCXdyaXRlbChDTURfVU5MT0NLMSwgYWRkciArIDEpOwogCQkJd3JpdGVsKENNRF9VTkxPQ0syLCBhZGRyICsgMik7CiAJCQl3cml0ZWwoQ01EX0VSQVNFX1NFVFVQLCBhZGRyICsgMSk7Ci0JCQkKKwogCQkJd3JpdGVsKENNRF9VTkxPQ0sxLCBhZGRyICsgMSk7CiAJCQl3cml0ZWwoQ01EX1VOTE9DSzIsIGFkZHIgKyAyKTsKIAkJCXdyaXRlbChDTURfRVJBU0VfQ09ORklSTSwgYWRkcik7CiAKLQkJCQorCiAJCQkvKiB3YWl0IHVudGlsIGZsYXNoIGlzIHJlYWR5ICovCiAJCQljaGlwMSA9IGNoaXAyID0gMDsKLQkJCQorCiAJCQlkbyB7CiAJCQkJcmVzdWx0ID0gcmVhZGwoYWRkcik7Ci0JCQkJCisKIAkJCQkvKiBjaGVjayB0aW1lb3V0ICovCiAJCQkJaWYgKGdldF90aW1lcigwKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CiAJCQkJCXdyaXRlbChDTURfUkVBRF9BUlJBWSwgYWRkciArIDEpOwogCQkJCQljaGlwMSA9IFRNTzsKIAkJCQkJYnJlYWs7CiAJCQkJfQotCQkJCQorCiAJCQkJaWYgKCFjaGlwMSAmJiAocmVzdWx0ICYgMHhGRkZGKSAmIEJJVF9FUkFTRV9ET05FKSB7CiAJCQkJCWNoaXAxID0gUkVBRFk7CiAJCQkJfQotCQkJCQorCiAJCQkJaWYgKCFjaGlwMSAmJiAocmVzdWx0ICYgMHhGRkZGKSAmIEJJVF9QUk9HUkFNX0VSUk9SKSB7CiAJCQkJCWNoaXAxID0gRVJSOwogCQkJCX0KLQkJCQkKKwogCQkJCWlmICghY2hpcDIgJiYgKHJlc3VsdCA+PiAxNikgJiBCSVRfRVJBU0VfRE9ORSkgewogCQkJCQljaGlwMiA9IFJFQURZOwogCQkJCX0KLQkJCQkKKwogCQkJCWlmICghY2hpcDIgJiYgKHJlc3VsdCA+PiAxNikgJiBCSVRfUFJPR1JBTV9FUlJPUikgewogCQkJCQljaGlwMiA9IEVSUjsKIAkJCQl9Ci0JCQkJCisKIAkJCX0gIHdoaWxlICghY2hpcDEgfHwgIWNoaXAyKTsKLQkJCQorCiAJCQl3cml0ZWwoQ01EX1JFQURfQVJSQVksIGFkZHIgKyAxKTsKLQkJCQorCiAJCQlpZiAoY2hpcDEgPT0gRVJSIHx8IGNoaXAyID09IEVSUikgewogCQkJCXJjID0gRVJSX1BST0dfRVJST1I7CiAJCQkJZ290byBvdXRhaGVyZTsKIAkJCX0KLQkJCQorCiAJCQlpZiAoY2hpcDEgPT0gVE1PKSB7CiAJCQkJcmMgPSBFUlJfVElNT1VUOwogCQkJCWdvdG8gb3V0YWhlcmU7CiAJCQl9Ci0JCQkKKwogCQkJcHJpbnRmKCJvay5cbiIpOwogCQl9IGVsc2UgeyAvKiBpdCB3YXMgcHJvdGVjdGVkICovCi0JCQkKKwogCQkJcHJpbnRmKCJwcm90ZWN0ZWQhXG4iKTsKIAkJfQogCX0KLQkKKwogCWlmIChjdHJsYygpKSB7CiAJCXByaW50ZigiVXNlciBJbnRlcnJ1cHQhXG4iKTsKIAl9CkBAIC0yOTAsMTEgKzI5MCwxMSBAQAogb3V0YWhlcmU6CiAJLyogYWxsb3cgZmxhc2ggdG8gc2V0dGxlIC0gd2FpdCAxMCBtcyAqLwogCXVkZWxheSgxMDAwMCk7Ci0JCisKIAlpZiAoaWZsYWcpIHsKIAkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAl9Ci0JCisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTMwOSw3ICszMDksNyBAQAogCWludCByYyA9IEVSUl9PSzsKIAlpbnQgaWZsYWc7CiAJaW50IGNoaXAxLCBjaGlwMjsKLQkKKwogCS8qCiAJICogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkCiAJICovCkBAIC0zMTcsNyArMzE3LDcgQEAKIAlpZiAoKHJlc3VsdCAmIGRhdGEpICE9IGRhdGEpIHsKIAkJcmV0dXJuIEVSUl9OT1RfRVJBU0VEOwogCX0KLQkKKwogCS8qCiAJICogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dAogCSAqIGhlcmUuIFJlbWVtYmVyIHRoYXQgb3VyIGV4Y2VwdGlvbiB2ZWN0b3JzIGFyZQpAQCAtMzMyLDYxICszMzIsNjEgQEAKIAl3cml0ZWwoQ01EX1VOTE9DS19CWVBBU1MsIGFkZHIgKyAxKTsKIAl3cml0ZWwoYWRkciwgQ01EX1BST0dSQU0pOwogCXdyaXRlbChhZGRyLCBkYXRhKTsKLQkKKwogCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCiAJcmVzZXRfdGltZXIoKTsKLQkKKwogCS8qIHdhaXQgdW50aWwgZmxhc2ggaXMgcmVhZHkgKi8KIAljaGlwMSA9IGNoaXAyID0gMDsKIAlkbyB7CiAJCXJlc3VsdCA9IHJlYWRsKGFkZHIpOwotCQkKKwogCQkvKiBjaGVjayB0aW1lb3V0ICovCiAJCWlmIChnZXRfdGltZXIoMCkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgewogCQkJY2hpcDEgPSBFUlIgfCBUTU87CiAJCQlicmVhazsKIAkJfQotCQkKKwogCQlpZiAoIWNoaXAxICYmICgocmVzdWx0ICYgMHg4MCkgPT0gKGRhdGEgJiAweDgwKSkpIHsKIAkJCWNoaXAxID0gUkVBRFk7CiAJCX0KLQkJCisKIAkJaWYgKCFjaGlwMSAmJiAoKHJlc3VsdCAmIDB4RkZGRikgJiBCSVRfUFJPR1JBTV9FUlJPUikpIHsKIAkJCXJlc3VsdCA9IHJlYWRsKGFkZHIpOwotCQkJCisKIAkJCWlmICgocmVzdWx0ICYgMHg4MCkgPT0gKGRhdGEgJiAweDgwKSkgewogCQkJCWNoaXAxID0gUkVBRFk7CiAJCQl9IGVsc2UgewogCQkJCWNoaXAxID0gRVJSOwogCQkJfQogCQl9Ci0JCQorCiAJCWlmICghY2hpcDIgJiYgKChyZXN1bHQgJiAoMHg4MCA8PCAxNikpID09IChkYXRhICYgKDB4ODAgPDwgMTYpKSkpIHsKIAkJCWNoaXAyID0gUkVBRFk7CiAJCX0KLQkJCisKIAkJaWYgKCFjaGlwMiAmJiAoKHJlc3VsdCA+PiAxNikgJiBCSVRfUFJPR1JBTV9FUlJPUikpIHsKIAkJCXJlc3VsdCA9IHJlYWRsKGFkZHIpOwotCQkJCisKIAkJCWlmICgocmVzdWx0ICYgKDB4ODAgPDwgMTYpKSA9PSAoZGF0YSAmICgweDgwIDw8IDE2KSkpIHsKIAkJCQljaGlwMiA9IFJFQURZOwogCQkJfSBlbHNlIHsKIAkJCQljaGlwMiA9IEVSUjsKIAkJCX0KIAkJfQotCQkKKwogCX0gIHdoaWxlICghY2hpcDEgfHwgIWNoaXAyKTsKLQkKKwogCXdyaXRlbChDTURfUkVBRF9BUlJBWSwgYWRkcik7Ci0JCisKIAlpZiAoY2hpcDEgPT0gRVJSIHx8IGNoaXAyID09IEVSUiB8fCByZWFkbChhZGRyKSAhPSBkYXRhKSB7CiAJCXJjID0gRVJSX1BST0dfRVJST1I7CiAJfQotCQorCiAJaWYgKGlmbGFnKSB7CiAJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAJfQotCQorCiAJcmV0dXJuIHJjOwogfQogCkBAIC0zOTksOSArMzk5LDkgQEAKIAl1bG9uZyBjcCwgd3AsIGRhdGE7CiAJaW50IGw7CiAJaW50IGksIHJjOwotCQorCiAJd3AgPSAoYWRkciAmIH4zKTsJLyogZ2V0IGxvd2VyIHdvcmQgYWxpZ25lZCBhZGRyZXNzICovCi0JCisKIAkvKgogCSAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKIAkgKi8KQEAgLTQxOCwxMyArNDE4LDEzIEBACiAJCWZvciAoOyBjbnQ9PTAgJiYgaTw0OyArK2ksICsrY3ApIHsKIAkJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopY3AgPDwgMjQpOwogCQl9Ci0JCQorCiAJCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewogCQkJcmV0dXJuIHJjOwogCQl9CiAJCXdwICs9IDQ7CiAJfQotCQorCiAJLyoKIAkgKiBoYW5kbGUgd29yZCBhbGlnbmVkIHBhcnQKIAkgKi8KQEAgLTQzNywxMSArNDM3LDExIEBACiAJCXdwICArPSA0OwogCQljbnQgLT0gNDsKIAl9Ci0JCisKIAlpZiAoY250ID09IDApIHsKIAkJcmV0dXJuIEVSUl9PSzsKIAl9Ci0JCisKIAkvKgogCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcwogCSAqLwpAQCAtNDUzLDYgKzQ1Myw2IEBACiAJZm9yICg7IGk8NDsgKytpLCArK2NwKSB7CiAJCWRhdGEgPSAoZGF0YSA+PiA4KSB8ICgqKHVjaGFyICopY3AgPDwgMjQpOwogCX0KLQkKKwogCXJldHVybiB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL3NjNTIwX2NkcC9zYzUyMF9jZHAuYyBiL2JvYXJkL3NjNTIwX2NkcC9zYzUyMF9jZHAuYwppbmRleCA1MGE0OWU2Li4wZmM4MzZjIDEwMDY0NAotLS0gYS9ib2FyZC9zYzUyMF9jZHAvc2M1MjBfY2RwLmMKKysrIGIvYm9hcmQvc2M1MjBfY2RwL3NjNTIwX2NkcC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIAorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIgPGRhbmllbEBvbWljcm9uLnNlPi4KICAqCkBAIC00MCwxMSArNDAsMTEgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0JCi0vKiAKKworLyoKICAqIFRoZW9yeToKICAqIFdlIGZpcnN0IHNldCB1cCBhbGwgSVJRcyB0byBiZSBub24tcGNpLCBlZGdlIHRyaWdnZXJlZCwKLSAqIHdoZW4gd2UgbGF0ZXIgZW51bWVyYXRlIHRoZSBwY2kgYnVzIGFuZCBwY2lfc2M1MjBfZml4dXBfaXJxKCkgZ2V0cyAKKyAqIHdoZW4gd2UgbGF0ZXIgZW51bWVyYXRlIHRoZSBwY2kgYnVzIGFuZCBwY2lfc2M1MjBfZml4dXBfaXJxKCkgZ2V0cwogICogY2FsbGVkIHdlIHJlYWxsb2NhdGUgaXJxcyB0byB0aGUgcGNpIGJ1cyB3aXRoIHNjNTIwX3BjaV9zZXRfaXJxKCkKICAqIGFzIG5lZWRlZC4gV2hlIGNob29zZSB0aGUgaXJxcyB0byBncmFtIGZyb20gYSBjb25maWd1cmFibGUgbGlzdAogICogaW5zaWRlIHBjaV9zYzUyMF9maXh1cF9pcnEoKSAoSWYgdGhpcyBsaXN0IGNvbnRhaW5zIHN0dXBpZCBpcnEncwpAQCAtNTQsNDggKzU0LDQ4IEBACiBzdGF0aWMgdm9pZCBpcnFfaW5pdCh2b2lkKQogewogCS8qIGRpc2FibGUgZ2xvYmFsIGludGVycnVwdCBtb2RlICovCi0Jd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1BJQ0lDUiwgMHg0MCk7IAotCQorCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QSUNJQ1IsIDB4NDApOworCiAJLyogc2V0IGFsbCBpcnFzIHRvIGVkZ2UgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfTVBJQ01PREUsIDB4MDApOwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9TTDFQSUNNT0RFLCAweDAwKTsKIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU0wyUElDTU9ERSwgMHgwMCk7Ci0JCi0JLyogYWN0aXZlIGxvdyBwb2xhcml0eSBvbiBQSUMgaW50ZXJydXB0IHBpbnMsIAorCisJLyogYWN0aXZlIGxvdyBwb2xhcml0eSBvbiBQSUMgaW50ZXJydXB0IHBpbnMsCiAJICogIGFjdGl2ZSBoaWdoIHBvbGFyaXR5IG9uIGFsbCBvdGhlciBpcnEgcGlucyAqLwogCXdyaXRlX21tY3Jfd29yZChTQzUyMF9JTlRQSU5QT0wsIDB4MDAwMCk7CiAKIAkvKiBzZXQgaXJxIG51bWJlciBtYXBwaW5nICovCi0Jd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQVE1SME1BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgICAvKiBkaXNhYmxlIEdQIHRpbWVyIDAgSU5UICovICAgICAgIAorCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUFRNUjBNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAgLyogZGlzYWJsZSBHUCB0aW1lciAwIElOVCAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUFRNUjFNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAgLyogZGlzYWJsZSBHUCB0aW1lciAxIElOVCAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUFRNUjJNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAgLyogZGlzYWJsZSBHUCB0aW1lciAyIElOVCAqLwotCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QSVQwTUFQLCBTQzUyMF9JUlEwKTsgICAgICAgICAgICAgLyogU2V0IFBJVCB0aW1lciAwIElOVCB0byBJUlEwICovIAorCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QSVQwTUFQLCBTQzUyMF9JUlEwKTsgICAgICAgICAgICAgLyogU2V0IFBJVCB0aW1lciAwIElOVCB0byBJUlEwICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1BJVDFNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAgICAvKiBkaXNhYmxlIFBJVCB0aW1lciAxIElOVCAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QSVQyTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgICAgLyogZGlzYWJsZSBQSVQgdGltZXIgMiBJTlQgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUENJSU5UQU1BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgIC8qIGRpc2FibGUgUENJIElOVCBBICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1BDSUlOVEJNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAvKiBkaXNhYmxlIFBDSSBJTlQgQiAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QQ0lJTlRDTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgLyogZGlzYWJsZSBQQ0kgSU5UIEMgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUENJSU5URE1BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgIC8qIGRpc2FibGUgUENJIElOVCBEICovCi0Jd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0RNQUJDSU5UTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAvKiBkaXNhYmxlIERNQSBJTlQgKi8gCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0RNQUJDSU5UTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAvKiBkaXNhYmxlIERNQSBJTlQgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1NJTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgICAgIC8qIGRpc2FibGUgU3luY2hyb25pdXMgc2VyaWFsIElOVCAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9XRFRNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAgICAgLyogZGlzYWJsZSBXYXRjaGRvZyBJTlQgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUlRDTUFQLCBTQzUyMF9JUlE4KTsgICAgICAgICAgICAgIC8qIFNldCBSVEMgaW50IHRvIDggKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfV1BWTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgICAgIC8qIGRpc2FibGUgd3JpdGUgcHJvdGVjdCBJTlQgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfSUNFTUFQLCBTQzUyMF9JUlExKTsgICAgICAgICAgICAgIC8qIFNldCBJQ0UgRGVidWcgU2VyaWVscG9ydCBJTlQgdG8gSVJRMSAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9GRVJSTUFQLFNDNTIwX0lSUTEzKTsgICAgICAgICAgICAgLyogU2V0IEZQIGVycm9yIElOVCB0byBJUlExMyAqLwotCQorCiAJaWYgKENGR19VU0VfU0lPX1VBUlQpIHsKIAkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1VBUlQxTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAvKiBkaXNhYmxlIGludGVybmFsIFVBUlQxIElOVCAqLwogCQl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfVUFSVDJNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7IC8qIGRpc2FibGUgaW50ZXJuYWwgVUFSVDIgSU5UICovCi0JCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDNJTUFQLCBTQzUyMF9JUlEzKTsgICAgICAgICAgLyogU2V0IEdQSVJRMyAoSVNBIElSUTMpIHRvIElSUTMgKi8gCisJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDNJTUFQLCBTQzUyMF9JUlEzKTsgICAgICAgICAgLyogU2V0IEdQSVJRMyAoSVNBIElSUTMpIHRvIElSUTMgKi8KIAkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQNElNQVAsIFNDNTIwX0lSUTQpOyAgICAgICAgICAvKiBTZXQgR1BJUlE0IChJU0EgSVJRNCkgdG8gSVJRNCAqLwogCX0gZWxzZSB7CiAJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9VQVJUMU1BUCwgU0M1MjBfSVJRNCk7ICAgICAgICAgLyogU2V0IGludGVybmFsIFVBUlQyIElOVCB0byBJUlE0ICovCiAJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9VQVJUMk1BUCwgU0M1MjBfSVJRMyk7ICAgICAgICAgLyogU2V0IGludGVybmFsIFVBUlQyIElOVCB0byBJUlEzICovCi0JCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDNJTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgLyogZGlzYWJsZSBHUElSUTMgKElTQSBJUlEzKSAqLyAKKwkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQM0lNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAvKiBkaXNhYmxlIEdQSVJRMyAoSVNBIElSUTMpICovCiAJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDRJTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgLyogZGlzYWJsZSBHUElSUTQgKElTQSBJUlE0KSAqLwogCX0KLQkKKwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDFJTUFQLCBTQzUyMF9JUlExKTsgICAgICAgICAgICAgLyogU2V0IEdQSVJRMSAoU0lPIElSUTEpIHRvIElSUTEgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1A1SU1BUCwgU0M1MjBfSVJRNSk7ICAgICAgICAgICAgIC8qIFNldCBHUElSUTUgKElTQSBJUlE1KSB0byBJUlE1ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQNklNQVAsIFNDNTIwX0lSUTYpOyAgICAgICAgICAgICAvKiBTZXQgR1BJUlE2IChJU0EgSVJRNikgdG8gSVJRNiAqLwpAQCAtMTA0LDE0ICsxMDQsMTQgQEAKIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1A5SU1BUCwgU0M1MjBfSVJROSk7ICAgICAgICAgICAgIC8qIFNldCBHUElSUTkgKElTQSBJUlEyKSB0byBJUlE5ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMElNQVAsIFNDNTIwX0lSUTExKTsgICAgICAgICAgICAvKiBTZXQgR1BJUlEwIChJU0EgSVJRMTEpIHRvIElSUTEwICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMklNQVAsIFNDNTIwX0lSUTEyKTsgICAgICAgICAgICAvKiBTZXQgR1BJUlEyIChJU0EgSVJRMTIpIHRvIElSUTEyICovCi0Jd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMTBJTUFQLFNDNTIwX0lSUTE0KTsgICAgICAgICAgICAvKiBTZXQgR1BJUlExMCAoSVNBIElSUTE0KSB0byBJUlExNCAqLyAgICAgICAgICAKLQkKKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1AxMElNQVAsU0M1MjBfSVJRMTQpOyAgICAgICAgICAgIC8qIFNldCBHUElSUTEwIChJU0EgSVJRMTQpIHRvIElSUTE0ICovCisKIAl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUENJSE9TVE1BUCwgMHgxMWYpOyAgICAgICAgICAgICAgICAvKiBNYXAgUENJIGhvc3RicmlkZ2UgSU5UIHRvIE5NSSAqLwogCXdyaXRlX21tY3Jfd29yZChTQzUyMF9FQ0NNQVAsIDB4MTAwKTsgICAgICAgICAgICAgICAgICAgIC8qIE1hcCBTRFJBTSBFQ0MgZmFpbHVyZSBJTlQgdG8gTk1JICovCi0gCisKIH0KIAotCQorCiAvKiBQQ0kgc3R1ZmYgKi8KIHN0YXRpYyB2b2lkIHBjaV9zYzUyMF9jZHBfZml4dXBfaXJxKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgcGNpX2Rldl90IGRldikKIHsKQEAgLTEyNSw2NCArMTI1LDYzIEBACiAJCUNGR19GT1JUSF9QQ0lfSVJRCiAJfTsKIAlzdGF0aWMgaW50IG5leHRfaXJxX2luZGV4PTA7Ci0JCi0JY2hhciB0bXBfcGluOwkKKworCWNoYXIgdG1wX3BpbjsKIAlpbnQgcGluOwotCQorCiAJcGNpX2hvc2VfcmVhZF9jb25maWdfYnl0ZShob3NlLCBkZXYsIFBDSV9JTlRFUlJVUFRfUElOLCAmdG1wX3Bpbik7CiAJcGluID0gdG1wX3BpbjsKLQkKKwogCXBpbi09MTsgLyogcGNpIGNvbmZpZyBzcGFjZSB1c2UgMS1iYXNlZCBudW1iZXJpbmcgKi8KIAlpZiAoLTEgPT0gcGluKSB7CiAJCXJldHVybjsgLyogZGV2aWNlIHVzZSBubyBpcnEgKi8KIAl9Ci0JCi0JCi0gICAgICAgCisKKwogCS8qIG1hcCBkZXZpY2UgbnVtYmVyICsgIHBpbiB0byBhIHBpbiBvbiB0aGUgc2M1MjAgKi8KIAlzd2l0Y2ggKFBDSV9ERVYoZGV2KSkgewogCWNhc2UgMjA6CiAJCXBpbis9U0M1MjBfUENJX0lOVEE7CiAJCWJyZWFrOwotCQkKKwogCWNhc2UgMTk6CiAJCXBpbis9U0M1MjBfUENJX0lOVEI7CiAJCWJyZWFrOwotCQkKKwogCWNhc2UgMTg6CiAJCXBpbis9U0M1MjBfUENJX0lOVEM7CiAJCWJyZWFrOwotCQkKKwogCWNhc2UgMTc6CiAJCXBpbis9U0M1MjBfUENJX0lOVEQ7CiAJCWJyZWFrOwotCQkKLQlkZWZhdWx0OiAKKworCWRlZmF1bHQ6CiAJCXJldHVybjsKIAl9Ci0JCisKIAlwaW4mPTM7IC8qIHdyYXAgYXJvdW5kICovCi0JCisKIAlpZiAoc2M1MjBfcGNpX2ludHNbcGluXSA9PSAtMSkgewotCQkvKiByZS1yb3V0ZSBvbmUgaW50ZXJydXB0IGZvciB1cyAqLwkJCisJCS8qIHJlLXJvdXRlIG9uZSBpbnRlcnJ1cHQgZm9yIHVzICovCiAJCWlmIChuZXh0X2lycV9pbmRleCA+IDMpIHsKIAkJCXJldHVybjsKIAkJfQotCQlpZiAocGNpX3NjNTIwX3NldF9pcnEocGluLCBpcnFfbGlzdFtuZXh0X2lycV9pbmRleF0pKSB7IAorCQlpZiAocGNpX3NjNTIwX3NldF9pcnEocGluLCBpcnFfbGlzdFtuZXh0X2lycV9pbmRleF0pKSB7CiAJCQlyZXR1cm47CiAJCX0KIAkJbmV4dF9pcnFfaW5kZXgrKzsKIAl9CiAKLQkKKwogCWlmICgtMSAhPSBzYzUyMF9wY2lfaW50c1twaW5dKSB7Ci0JCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCAKKwkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsCiAJCQkJCSAgIHNjNTIwX3BjaV9pbnRzW3Bpbl0pOwogCX0KLQlQUklOVEYoImZpeHVwX2lycTogZGV2aWNlICVkIHBpbiAlYyBpcnEgJWRcbiIsIAorCVBSSU5URigiZml4dXBfaXJxOiBkZXZpY2UgJWQgcGluICVjIGlycSAlZFxuIiwKIAkgICAgICAgUENJX0RFVihkZXYpLCAnQScgKyBwaW4sIHNjNTIwX3BjaV9pbnRzW3Bpbl0pOwogfQotIAorCiBzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIHNjNTIwX2NkcF9ob3NlID0gewogCWZpeHVwX2lycTogcGNpX3NjNTIwX2NkcF9maXh1cF9pcnEsCiB9OwpAQCAtMjAxLDcgKzIwMCw3IEBACiB2b2lkIHNldHVwX2FsaV9zaW8oaW50IHVhcnRfcHJpbWFyeSkKIHsKIAlhbGk1MTJ4X2luaXQoKTsKLQkKKwogCWFsaTUxMnhfc2V0X2ZkYyhBTElfRU5BQkxFRCwgMHgzZjIsIDYsIDApOwogCWFsaTUxMnhfc2V0X3BwKEFMSV9FTkFCTEVELCAweDI3OCwgNywgMyk7CiAJYWxpNTEyeF9zZXRfdWFydChBTElfRU5BQkxFRCwgQUxJX1VBUlQxLCB1YXJ0X3ByaW1hcnk/MHgzZjg6MHgzZTgsIDQpOwpAQCAtMjA5LDIxICsyMDgsMjEgQEAKIAlhbGk1MTJ4X3NldF9ydGMoQUxJX0RJU0FCTEVELCAwLCAwKTsKIAlhbGk1MTJ4X3NldF9rYmMoQUxJX0VOQUJMRUQsIDEsIDEyKTsKIAlhbGk1MTJ4X3NldF9jaW8oQUxJX0VOQUJMRUQpOwotCQorCiAJLyogSXJEYSBwaW5zICovCiAJYWxpNTEyeF9jaW9fZnVuY3Rpb24oMTIsIDEsIDAsIDApOwogCWFsaTUxMnhfY2lvX2Z1bmN0aW9uKDEzLCAxLCAwLCAwKTsKLQkKKwogCS8qIFNTSSBjaGlwIHNlbGVjdCBwaW5zICovCiAJYWxpNTEyeF9jaW9fZnVuY3Rpb24oMTQsIDAsIDAsIDApOyAgLyogU1NJX0NTICovCi0JYWxpNTEyeF9jaW9fZnVuY3Rpb24oMTUsIDAsIDAsIDApOyAgLyogU1NJX01WICovIAorCWFsaTUxMnhfY2lvX2Z1bmN0aW9uKDE1LCAwLCAwLCAwKTsgIC8qIFNTSV9NViAqLwogCWFsaTUxMnhfY2lvX2Z1bmN0aW9uKDE2LCAwLCAwLCAwKTsgIC8qIFNTSV9TUEkjICovCiAKIAkvKiBCb2FyZCBSRVYgcGlucyAqLwogCWFsaTUxMnhfY2lvX2Z1bmN0aW9uKDIwLCAwLCAwLCAxKTsKIAlhbGk1MTJ4X2Npb19mdW5jdGlvbigyMSwgMCwgMCwgMSk7CiAJYWxpNTEyeF9jaW9fZnVuY3Rpb24oMjIsIDAsIDAsIDEpOwotCWFsaTUxMnhfY2lvX2Z1bmN0aW9uKDIzLCAwLCAwLCAxKTsgICAgICAKKwlhbGk1MTJ4X2Npb19mdW5jdGlvbigyMywgMCwgMCwgMSk7CiB9CiAKIApAQCAtMjMyLDU0ICsyMzEsNTMgQEAKIHsKIAogCS8qIHNldCB1cCB0aGUgR1AgSU8gcGlucyAqLwotCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9QRlMzMV8xNiwgMHhmN2ZmKTsgCS8qIHNldCB0aGUgR1BJTyBwaW4gZnVuY3Rpb24gMzEtMTYgcmVnICovCQkgICAKKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPUEZTMzFfMTYsIDB4ZjdmZik7IAkvKiBzZXQgdGhlIEdQSU8gcGluIGZ1bmN0aW9uIDMxLTE2IHJlZyAqLwogCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9QRlMxNV8wLCAweGZmZmYpOyAgCS8qIHNldCB0aGUgR1BJTyBwaW4gZnVuY3Rpb24gMTUtMCByZWcgKi8KLQl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfQ1NQRlMsIDB4ZjgpOyAgCQkvKiBzZXQgdGhlIENTIHBpbiBmdW5jdGlvbiAgcmVnICovCQorCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9DU1BGUywgMHhmOCk7ICAJCS8qIHNldCB0aGUgQ1MgcGluIGZ1bmN0aW9uICByZWcgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfQ0xLU0VMLCAweDcwKTsKIAotCQotCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUENTUlQsIDEpOyAgIC8qIHNldCB0aGUgR1AgQ1Mgb2Zmc2V0ICovICAgIAkKKworCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUENTUlQsIDEpOyAgIC8qIHNldCB0aGUgR1AgQ1Mgb2Zmc2V0ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQQ1NQVywgMyk7ICAgLyogc2V0IHRoZSBHUCBDUyBwdWxzZSB3aWR0aCAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUENTT0ZGLCAxKTsgIC8qIHNldCB0aGUgR1AgQ1Mgb2Zmc2V0ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQUkRXLCAzKTsgICAgLyogc2V0IHRoZSBSRCBwdWxzZSB3aWR0aCAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUFJET0ZGLCAxKTsgIC8qIHNldCB0aGUgR1AgUkQgb2Zmc2V0ICovCi0gICAgICAgIHdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUFdSVywgMyk7ICAgIC8qIHNldCB0aGUgR1AgV1IgcHVsc2Ugd2lkdGggKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BXUlcsIDMpOyAgICAvKiBzZXQgdGhlIEdQIFdSIHB1bHNlIHdpZHRoICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQV1JPRkYsIDEpOyAgLyogc2V0IHRoZSBHUCBXUiBvZmZzZXQgKi8KIAotCXdyaXRlX21tY3Jfd29yZChTQzUyMF9CT09UQ1NDVEwsIDB4MTgyMyk7CQkvKiBzZXQgdXAgdGltaW5nIG9mIEJPT1RDUyAqLyAKKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfQk9PVENTQ1RMLCAweDE4MjMpOwkJLyogc2V0IHVwIHRpbWluZyBvZiBCT09UQ1MgKi8KIAl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUk9NQ1MxQ1RMLCAweDE4MjMpOwkJLyogc2V0IHVwIHRpbWluZyBvZiBST01DUzEgKi8KLQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUk9NQ1MyQ1RMLCAweDE4MjMpOwkJLyogc2V0IHVwIHRpbWluZyBvZiBST01DUzIgKi8gCi0JCisJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1JPTUNTMkNUTCwgMHgxODIzKTsJCS8qIHNldCB1cCB0aW1pbmcgb2YgUk9NQ1MyICovCisKIAkvKiBhZGp1c3QgdGhlIG1lbW9yeSBtYXA6CiAJICogYnkgZGVmYXVsdCB0aGUgZmlyc3QgMjU2TUIgKDB4MDAwMDAwMDAgLSAweDBmZmZmZmZmKSBpcyBtYXBwZWQgdG8gU0RSQU0KIAkgKiBhbmQgMjU2TUIgdG8gMUctMTI4ayAgKDB4MTAwMDAwMCAtIDB4MzdmZmZmZmYpIGlzIG1hcHBlZCB0byBQQ0kgbW1pbwotCSAqIHdlIG5lZWQgdG8gbWFwIDFHLTEyOGsgLSAxRyAoMHgzODAwMDAwMCAtIDB4M2ZmZmZmZmYpIHRvIENTMSAqLyAKLQkKLQkJCi0JCisJICogd2UgbmVlZCB0byBtYXAgMUctMTI4ayAtIDFHICgweDM4MDAwMDAwIC0gMHgzZmZmZmZmZikgdG8gQ1MxICovCisKKwogCS8qIFNSQU0gPSBHUENTMyAxMjhrIEAgZDAwMDAtZWZmZmYqLwotCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIyLCAgMHg0ZTAwNDAwZCk7CQkKLQkKKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMiwgIDB4NGUwMDQwMGQpOworCiAJLyogSURFMCA9IEdQQ1M2IDFmMC0xZjcgKi8KLQl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMywgIDB4MzgwODAxZjApOwkJCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjMsICAweDM4MDgwMWYwKTsKIAogCS8qIElERTEgPSBHUENTNyAzZjYgKi8KLQl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSNCwgIDB4M2MwMDAzZjYpOwkJCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjQsICAweDNjMDAwM2Y2KTsKIAkvKiBib290Y3MgKi8KLQl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMTIsIDB4OGJmZmU4MDApOwkJCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjEyLCAweDhiZmZlODAwKTsKIAkvKiByb21jczIgKi8KLQl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMTMsIDB4Y2JmZmYwMDApOwkJCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjEzLCAweGNiZmZmMDAwKTsKIAkvKiByb21jczEgKi8KLQl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMTQsIDB4YWJmZmY4MDApOwkJCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjE0LCAweGFiZmZmODAwKTsKIAkvKiA2ODAgTEVEUyAqLwotCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIxNSwgMHgzMDAwMDY0MCk7CQkKLQkKKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMTUsIDB4MzAwMDA2NDApOworCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0FERERFQ0NUTCwgMCk7Ci0JCi0JYXNtICgid2JpbnZkXG4iKTsgLyogRmx1c2ggY2FjaGUsIHJlcS4gYWZ0ZXIgc2V0dGluZyB0aGUgdW5jaGFjaGVkIGF0dHJpYnV0ZSBvbmEgUEFSICovCQorCisJYXNtICgid2JpbnZkXG4iKTsgLyogRmx1c2ggY2FjaGUsIHJlcS4gYWZ0ZXIgc2V0dGluZyB0aGUgdW5jaGFjaGVkIGF0dHJpYnV0ZSBvbmEgUEFSICovCiAKIAlpZiAoQ0ZHX1VTRV9TSU9fVUFSVCkgewotCQl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfQUREREVDQ1RMLCByZWFkX21tY3JfYnl0ZShTQzUyMF9BRERERUNDVEwpIHwgVUFSVDJfRElTfFVBUlQxX0RJUyk7CQorCQl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfQUREREVDQ1RMLCByZWFkX21tY3JfYnl0ZShTQzUyMF9BRERERUNDVEwpIHwgVUFSVDJfRElTfFVBUlQxX0RJUyk7CiAJCXNldHVwX2FsaV9zaW8oMSk7CiAJfSBlbHNlIHsKIAkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0FERERFQ0NUTCwgcmVhZF9tbWNyX2J5dGUoU0M1MjBfQUREREVDQ1RMKSAmIH4oVUFSVDJfRElTfFVBUlQxX0RJUykpOwpAQCAtMzIxLDIxICszMTksMjEgQEAKICAqIFBBUjE1ICBQb3J0IDB4NjgwIExFRCBkaXNwbGF5CiAgKi8KIAotLyogCisvKgogICogVGhpcyBmdW5jdGlvbiBzaG91bGQgbWFwIGEgY2h1bmsgb2Ygc2l6ZSBieXRlcwogICogb2YgdGhlIHN5c3RlbSBhZGRyZXNzIHNwYWNlIHRvIHRoZSBJU0EgYnVzCi0gKiAKKyAqCiAgKiBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIG1lbW9yeSBhZGRyZXNzCiAgKiBhcyBzZWVuIGJ5IHRoZSBob3N0ICh3aGljaCBtYXkgdmVyeSB3aWxsIGJlIHRoZQogICogc2FtZSBhcyB0aGUgYnVzIGFkZHJlc3MpCiAgKi8KLXUzMiBpc2FfbWFwX3JvbSh1MzIgYnVzX2FkZHIsIGludCBzaXplKSAKK3UzMiBpc2FfbWFwX3JvbSh1MzIgYnVzX2FkZHIsIGludCBzaXplKQogewogCXUzMiBwYXI7Ci0JCi0JUFJJTlRGKCJpc2FfbWFwX3JvbSBhc2tlZCB0byBtYXAgJWQgYnl0ZXMgYXQgJXhcbiIsIAorCisJUFJJTlRGKCJpc2FfbWFwX3JvbSBhc2tlZCB0byBtYXAgJWQgYnl0ZXMgYXQgJXhcbiIsCiAJICAgICAgIHNpemUsIGJ1c19hZGRyKTsKLQkKKwogCXBhciA9IHNpemU7CiAJaWYgKHBhciA8IDB4ODAwMDApIHsKIAkJcGFyID0gMHg4MDAwMDsKQEAgLTM0NiwxMiArMzQ0LDEyIEBACiAJcGFyIDw8PSAxODsKIAlwYXIgfD0gKGJ1c19hZGRyPj4xMik7CiAJcGFyIHw9IDB4NTAwMDAwMDA7Ci0JCisKIAlQUklOVEYgKCJzZXR0aW5nIFBBUjExIHRvICV4XG4iLCBwYXIpOwotCQorCiAJLyogTWFwIHJvbSAweDEwMDAwIHdpdGggUEFSMSAqLwogCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIxMSwgIHBhcik7Ci0JCisKIAlyZXR1cm4gYnVzX2FkZHI7CiB9CiAKQEAgLTM3MiwxOSArMzcwLDE5IEBACiAKICNpZmRlZiBDT05GSUdfUENJCiAjZGVmaW5lIFBDSV9ST01fVEVNUF9TUEFDRSAweDEwMDAwCi0vKiAKKy8qCiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXAgYSBjaHVuayBvZiBzaXplIGJ5dGVzCiAgKiBvZiB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UgdG8gdGhlIFBDSSBidXMsCiAgKiBzdWl0YWJsZSB0byBtYXAgUENJIFJPTVMgKGJ1cyBhZGRyZXNzIDwgMTZNKQogICogdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBob3N0IG1lbW9yeSBhZGRyZXNzCiAgKiB3aGljaCBzaG91bGQgYmUgY29udmVydGVkIGludG8gYSBidXMgYWRkcmVzcwotICogYmVmb3JlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBQQ0kgcm9tIGFkZHJlc3MgCisgKiBiZWZvcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIFBDSSByb20gYWRkcmVzcwogICogZGVjb2RlcgogICovCi11MzIgcGNpX2dldF9yb21fd2luZG93KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgaW50IHNpemUpIAordTMyIHBjaV9nZXRfcm9tX3dpbmRvdyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGludCBzaXplKQogewogCXUzMiBwYXI7Ci0JCisKIAlwYXIgPSBzaXplOwogCWlmIChwYXIgPCAweDgwMDAwKSB7CiAJCXBhciA9IDB4ODAwMDA7CkBAIC0zOTUsMTIgKzM5MywxMiBAQAogCXBhciA8PD0gMTQ7CiAJcGFyIHw9IChQQ0lfUk9NX1RFTVBfU1BBQ0U+PjE2KTsKIAlwYXIgfD0gMHg3MjAwMDAwMDsKLQkKKwogCVBSSU5URiAoInNldHRpbmcgUEFSMSB0byAleFxuIiwgcGFyKTsKLQkKKwogCS8qIE1hcCByb20gMHgxMDAwMCB3aXRoIFBBUjEgKi8KIAl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMSwgIHBhcik7Ci0JCisKIAlyZXR1cm4gUENJX1JPTV9URU1QX1NQQUNFOwogfQogCkBAIC00MTcsNjEgKzQxNSw2MSBAQAogCQlyZXR1cm47CiAJfQogCVBSSU5URigiIG5vdCBvdXJzXG4iKTsKLQkKKwogfQogCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gb3JkZXIgdG8gcHJvdmlkZSBhY2NlcyB0byB0aGUKLSAqIGxlZ2FjeSB2aWRlbyBJL08gcG9ydHMgb24gdGhlIFBDSSBidXMuIAotICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBhY2Nlc3NlcyB0byBJL08gcG9ydHMgMHgzYjAtMHgzYmIgYW5kIAorICogbGVnYWN5IHZpZGVvIEkvTyBwb3J0cyBvbiB0aGUgUENJIGJ1cy4KKyAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gYWNjZXNzZXMgdG8gSS9PIHBvcnRzIDB4M2IwLTB4M2JiIGFuZAogICogMHgzYzAtMHgzZGYgc2h1bGQgcmVzdWx0IGluIHRyYW5zYWN0aW9ucyBvbiB0aGUgUENJIGJ1cy4KLSAqIAorICoKICAqLwogaW50IHBjaV9lbmFibGVfbGVnYWN5X3ZpZGVvX3BvcnRzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKIAkvKiBNYXAgdmlkZW8gbWVtb3J5IHRvIDB4YTAwMDAqLwogCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIwLCAgMHg3MjAwNDAwYSk7Ci0JCisKIAkvKiBmb3J3YXJkIGFsbCBJL08gYWNjZXNzZXMgdG8gUENJICovCi0Jd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0FERERFQ0NUTCwgCi0JCQlyZWFkX21tY3JfYnl0ZShTQzUyMF9BRERERUNDVEwpIHwgSU9fSE9MRV9ERVNUX1BDSSk7CQotCQotCQorCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9BRERERUNDVEwsCisJCQlyZWFkX21tY3JfYnl0ZShTQzUyMF9BRERERUNDVEwpIHwgSU9fSE9MRV9ERVNUX1BDSSk7CisKKwogCS8qIHNvIHdlIG1hcCBhd2F5IGFsbCBpbyBwb3J0cyB0byBwY2kgKG9ubHkgd2F5IHRvIGFjY2VzcyBwY2kgaW8KIAkgKiBiZWxvdyAweDQwMC4gQnV0IHRoZW4gd2UgaGF2ZSB0byBtYXAgYmFjayB0aGUgcG9ydGlvbnMgdGhhdCB3ZSBkb250CiAJICogdXNlIHNvIHRoYXQgdGhlIGdlbmVyYXRlIGN5Y2xlcyBvbiB0aGUgR1BJTyBidXMgd2hlcmUgdGhlIHNpbyBhbmQKLQkgKiBJU0Egc2xvdHMgYXJlIGNvbm5lY3RlZCwgdGhpcyByZXF1cmUgdGhlIHVzZSBvZiBzZXZlcmFsIFBBUiByZWdpc3RlcnMgCisJICogSVNBIHNsb3RzIGFyZSBjb25uZWN0ZWQsIHRoaXMgcmVxdXJlIHRoZSB1c2Ugb2Ygc2V2ZXJhbCBQQVIgcmVnaXN0ZXJzCiAJICovCi0JCisKIAkvKiBicmluZyAweDEwMCAtIDB4MWVmIGJhY2sgdG8gSVNBIHVzaW5nIFBBUjUgKi8KLQl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSNSwgMHgzMGVmMDEwMCk7CQkKLQkKKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSNSwgMHgzMGVmMDEwMCk7CisKIAkvKiBJREUgdXNlIDFmMC0xZjcgKi8KLQkKKwogCS8qIGJyaW5nIDB4MWY4IC0gMHgyZjcgYmFjayB0byBJU0EgdXNpbmcgUEFSNiAqLwotCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVI2LCAweDMwZmYwMWY4KTsJCQotCQorCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVI2LCAweDMwZmYwMWY4KTsKKwogCS8qIGNvbTIgdXNlIDJmOC0yZmYgKi8KLQkKKwogCS8qIGJyaW5nIDB4MzAwIC0gMHgzYWYgYmFjayB0byBJU0EgdXNpbmcgUEFSNyAqLwotCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVI3LCAweDMwYWYwMzAwKTsJCQotCQorCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVI3LCAweDMwYWYwMzAwKTsKKwogCS8qIHZnYSB1c2UgM2IwLTNiYiAqLwotCQorCiAJLyogYnJpbmcgMHgzYmMgLSAweDNiZiBiYWNrIHRvIElTQSB1c2luZyBQQVI4ICovCi0Jd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjgsIDB4MzAwMzAzYmMpOwkJCi0JCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjgsIDB4MzAwMzAzYmMpOworCiAJLyogdmdhIHVzZSAzYzAtM2RmICovCi0JCisKIAkvKiBicmluZyAweDNlMCAtIDB4M2Y1IGJhY2sgdG8gSVNBIHVzaW5nIFBBUjkgKi8KLQl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSOSwgMHgzMDE1MDNlMCk7CQkKLQkKKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSOSwgMHgzMDE1MDNlMCk7CisKIAkvKiBpZGUgdXNlIDNmNiAqLwotCQorCiAJLyogYnJpbmcgMHgzZjcgIGJhY2sgdG8gSVNBIHVzaW5nIFBBUjEwICovCi0Jd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjEwLCAweDMwMDAwM2Y3KTsJCQotCQotCS8qIGNvbTEgdXNlIDNmOC0zZmYgKi8JCQorCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIxMCwgMHgzMDAwMDNmNyk7CisKKwkvKiBjb20xIHVzZSAzZjgtM2ZmICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4NCwyMCArNDgyLDIwIEBACiBpbnQgYm9hcmRfaW5pdCh2b2lkKQogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCQotCWluaXRfc2M1MjAoKTsJCisKKwlpbml0X3NjNTIwKCk7CiAJYnVzX2luaXQoKTsKIAlpcnFfaW5pdCgpOwotCQkKKwogCS8qIG1heCBkcml2ZSBjdXJyZW50IG9uIFNEUkFNICovCiAJd3JpdGVfbW1jcl93b3JkKFNDNTIwX0RTQ1RMLCAweDAxMDApOwotCQkKKwogCS8qIGVudGVyIGRlYnVnIG1vZGUgYWZ0ZXIgbmV4dCByZXNldCAob25seSBpZiBqdW1wZXIgaXMgYWxzbyBzZXQpICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1JFU0NGRywgMHgwOCk7CiAJLyogY29uZmlndXJlIHRoZSBzb2Z0d2FyZSB0aW1lciB0byAzMy4zMzNNSHogKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1dUTVJDRkcsIDApOwogCWdkLT5idXNfY2xrID0gMzMzMzMwMDA7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTE4LDk4ICs1MTYsOTYgQEAKIHsKIAlpbnQgbWlub3I7CiAJaW50IG1ham9yOwotCQorCiAJbWFqb3IgPSBtaW5vciA9IDA7CiAJbWFqb3IgfD0gYWxpNTEyeF9jaW9faW4oMjMpPzI6MDsKIAltYWpvciB8PSBhbGk1MTJ4X2Npb19pbigyMik/MTowOwogCW1pbm9yIHw9IGFsaTUxMnhfY2lvX2luKDIxKT8yOjA7CiAJbWlub3IgfD0gYWxpNTEyeF9jaW9faW4oMjApPzE6MDsKLQkKKwogCXByaW50ZigiQU1EIFNDNTIwIENEUCByZXZpc2lvbiAlZC4lZFxuIiwgbWFqb3IsIG1pbm9yKTsKLQkKKwogCXJldHVybiAwOwogfQogCiAKLQotdm9pZCBzc2lfY2hpcF9zZWxlY3QoaW50IGRldikgCit2b2lkIHNzaV9jaGlwX3NlbGVjdChpbnQgZGV2KQogewotCQorCiAJLyogU3B1bmsgYm9hcmQ6IFNQSSBFRVBST00gaXMgYWN0aXZlLWxvdywgTVcgRUVQUk9NIGFuZCBBVVggYXJlIGFjdGl2ZSBoaWdoICovCiAJc3dpdGNoIChkZXYpIHsKIAljYXNlIDE6IC8qIFNQSSBFRVBST00gKi8KIAkJYWxpNTEyeF9jaW9fb3V0KDE2LCAwKTsKIAkJYnJlYWs7Ci0JCQorCiAJY2FzZSAyOiAvKiBNVyBFRVBST00gKi8KIAkJYWxpNTEyeF9jaW9fb3V0KDE1LCAxKTsKIAkJYnJlYWs7Ci0JCQotCWNhc2UgMzogLyogQVVYICovCQkJCQorCisJY2FzZSAzOiAvKiBBVVggKi8KIAkJYWxpNTEyeF9jaW9fb3V0KDE0LCAxKTsKIAkJYnJlYWs7Ci0JCQorCiAJY2FzZSAwOgogCQlhbGk1MTJ4X2Npb19vdXQoMTYsIDEpOwogCQlhbGk1MTJ4X2Npb19vdXQoMTUsIDApOwogCQlhbGk1MTJ4X2Npb19vdXQoMTQsIDApOwogCQlicmVhazsKLQkJCisKIAlkZWZhdWx0OgogCQlwcmludGYoIklsbGVnYWwgU1NJIGRldmljZSByZXF1ZXN0ZWQ6ICVkXG4iLCBkZXYpOwogCX0KIH0KIAogCi12b2lkIHNwaV9pbml0X2Yodm9pZCkgCit2b2lkIHNwaV9pbml0X2Yodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfU0M1MjBfQ0RQX1VTRV9TUEkKLQlzcGlfZWVwcm9tX3Byb2JlKDEpOyAKLSNlbmRpZgkKKwlzcGlfZWVwcm9tX3Byb2JlKDEpOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NDNTIwX0NEUF9VU0VfTVcKIAltd19lZXByb21fcHJvYmUoMik7Ci0jZW5kaWYJCQorI2VuZGlmCiB9CiAKLXNzaXplX3Qgc3BpX3JlYWQodWNoYXIgKmFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKSAKK3NzaXplX3Qgc3BpX3JlYWQodWNoYXIgKmFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKQogewogCWludCBvZmZzZXQ7CiAJaW50IGk7CiAJc3NpemVfdCByZXM7Ci0JCisKIAlvZmZzZXQgPSAwOwogCWZvciAoaT0wO2k8YWxlbjtpKyspIHsKIAkJb2Zmc2V0IDw8PSA4OwogCQlvZmZzZXQgfD0gYWRkcltpXTsKIAl9Ci0gCisKICNpZmRlZiBDT05GSUdfU0M1MjBfQ0RQX1VTRV9TUEkKLQlyZXMgPSBzcGlfZWVwcm9tX3JlYWQoMSwgb2Zmc2V0LCBidWZmZXIsIGxlbik7IAotI2VuZGlmCQorCXJlcyA9IHNwaV9lZXByb21fcmVhZCgxLCBvZmZzZXQsIGJ1ZmZlciwgbGVuKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19TQzUyMF9DRFBfVVNFX01XCiAJcmVzID0gbXdfZWVwcm9tX3JlYWQoMiwgb2Zmc2V0LCBidWZmZXIsIGxlbik7Ci0jZW5kaWYJCisjZW5kaWYKIAlyZXR1cm4gcmVzOwogfQogCi1zc2l6ZV90IHNwaV93cml0ZSh1Y2hhciAqYWRkciwgaW50IGFsZW4sIHVjaGFyICpidWZmZXIsIGludCBsZW4pIAorc3NpemVfdCBzcGlfd3JpdGUodWNoYXIgKmFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKQogewogCWludCBvZmZzZXQ7CiAJaW50IGk7CiAJc3NpemVfdCByZXM7Ci0JCisKIAlvZmZzZXQgPSAwOwogCWZvciAoaT0wO2k8YWxlbjtpKyspIHsKIAkJb2Zmc2V0IDw8PSA4OwogCQlvZmZzZXQgfD0gYWRkcltpXTsKIAl9Ci0JCQorCiAjaWZkZWYgQ09ORklHX1NDNTIwX0NEUF9VU0VfU1BJCiAJcmVzID0gc3BpX2VlcHJvbV93cml0ZSgxLCBvZmZzZXQsIGJ1ZmZlciwgbGVuKTsKLSNlbmRpZgkKKyNlbmRpZgogI2lmZGVmIENPTkZJR19TQzUyMF9DRFBfVVNFX01XCiAJcmVzID0gbXdfZWVwcm9tX3dyaXRlKDIsIG9mZnNldCwgYnVmZmVyLCBsZW4pOwotI2VuZGlmCQorI2VuZGlmCiAJcmV0dXJuIHJlczsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2M1MjBfY2RwL3NjNTIwX2NkcF9hc20uUyBiL2JvYXJkL3NjNTIwX2NkcC9zYzUyMF9jZHBfYXNtLlMKaW5kZXggMWUyNTVmYS4uYmU3YjJiYiAxMDA2NDQKLS0tIGEvYm9hcmQvc2M1MjBfY2RwL3NjNTIwX2NkcF9hc20uUworKysgYi9ib2FyZC9zYzUyMF9jZHAvc2M1MjBfY2RwX2FzbS5TCkBAIC0yMyw3ICsyMyw3IEBACiAKIC8qIG5vdyBzZXR1cCB0aGUgR2VuZXJhbCBwdXJwb3NlIGJ1cyB0byBnaXZlIHVzIGFjY2VzcyB0byB0aGUgTEVEcy4KICAqIFdlIGNhbiB0aGVuIHVzZSB0aGUgbGVkcyB0byBkaXNwbGF5IHN0YXR1cyBpbmZvcm1hdGlvbi4KLSAqLyAKKyAqLwogCiBzYzUyMF9jZHBfcmVnaXN0ZXJzOgogLyogc2l6ZSAgICBvZmZzZXQgICAgICAgIHZhbHVlICovCkBAIC00NSwxMiArNDUsMTIgQEAKIC8qIGJvYXJkIGVhcmx5IGludGlhbGl6YXRpb24gKi8KIC5nbG9ibCBlYXJseV9ib2FyZF9pbml0CiBlYXJseV9ib2FyZF9pbml0OgotICAgICAgICBtb3ZsICAgICRzYzUyMF9jZHBfcmVnaXN0ZXJzLCVlc2kKLWluaXRfbG9vcDoJCi0gICAgICAgIG1vdmwgICAgJDB4ZmZmZWYwMDAsJWVkaSAgICAgLyogTU1DUiBiYXNlIHRvIGVkaSAqLwkJCQkJCisJbW92bCAgICAkc2M1MjBfY2RwX3JlZ2lzdGVycywlZXNpCitpbml0X2xvb3A6CisJbW92bCAgICAkMHhmZmZlZjAwMCwlZWRpICAgICAvKiBNTUNSIGJhc2UgdG8gZWRpICovCiAJbW92dwkoJWVzaSksICVieCAgICAgICAgICAvKiBsb2FkIHNpemVyIHRvIGJ4ICovCiAJY21wdwkkMCwgJWJ4ICAgICAgICAgICAgICAvKiBpZiBzaWUgaXMgMCB3ZSdyZSBkb25lICovCi0JamUJZG9uZSAKKwlqZQlkb25lCiAJeG9ybAklZWR4LCVlZHgKIAltb3Z3CTIoJWVzaSksICVkeCAgICAgICAgLyogbG9hZCBNTUNSIG9mZnNldCB0byBkeCAqLwogCWFkZGwJJWVkeCwgJWVkaSAgICAgICAgICAvKiBhZGQgb2Zmc2V0IHRvIGJhc2UgaW4gZWRpICovCkBAIC02MSw3ICs2MSw3IEBACiAJamUJd29yZCAgICAgICAgICAgICAgICAgLyogd29yZCBvcD8gKi8KIAltb3ZsCSVlYXgsICglZWRpKSAgICAgICAgIC8qIG11c3QgYmUgbG9uZywgdGhlbiAqLwogCWptcAluZXh0Ci1ieXRlOiAgIG1vdmIgICAgJWFsLCglZWRpKSAgICAgICAgCitieXRlOiAgIG1vdmIgICAgJWFsLCglZWRpKQogCWptcAluZXh0CiB3b3JkOgltb3Z3CSVheCwoJWVkaSkKIG5leHQ6CWFkZGwJJDgsICVlc2kgICAgICAgICAgICAgLyogYWR2YW5jZSBlc2kgKi8KQEAgLTgzLDQgKzgzLDMgQEAKIAltb3Z3CSQweDY4MCwgJWR4CiAJb3V0CSVhbCwgJWR4CiAJam1wCSolZWJwCi0JCmRpZmYgLS1naXQgYS9ib2FyZC9zYzUyMF9jZHAvc2M1MjBfY2RwX2FzbTE2LlMgYi9ib2FyZC9zYzUyMF9jZHAvc2M1MjBfY2RwX2FzbTE2LlMKaW5kZXggMGUwYjBjMC4uYTNlNzAwYSAxMDA2NDQKLS0tIGEvYm9hcmQvc2M1MjBfY2RwL3NjNTIwX2NkcF9hc20xNi5TCisrKyBiL2JvYXJkL3NjNTIwX2NkcC9zYzUyMF9jZHBfYXNtMTYuUwpAQCAtMzQsMzIgKzM0LDMyIEBACiBib2FyZF9pbml0MTY6CiAJLyogQWxpYXMgTU1DUiB0byAweGRmMDAwICovCiAJbW92dwkkMHhmZmZjLCAlZHgKLQltb3ZsCSQweDgwMGRmMGNiLCAlZWF4CQotCW91dGwJJWVheCwgJWR4CQkKLQkKKwltb3ZsCSQweDgwMGRmMGNiLCAlZWF4CisJb3V0bAklZWF4LCAlZHgKKwogCS8qIFNldCBkcyB0byBwb2ludCB0byBNTUNSIGFsaWFzICovCi0JbW92dwkkMHhkZjAwLCAlYXgJCQotCW1vdncJJWF4LCAlZHMJCSAKLQkJCi0JLyogTWFwIHRoZSBlbnRpcmUgZmxhc2ggYXQgMHgzODAwMDAwMCAgCisJbW92dwkkMHhkZjAwLCAlYXgKKwltb3Z3CSVheCwgJWRzCisKKwkvKiBNYXAgdGhlIGVudGlyZSBmbGFzaCBhdCAweDM4MDAwMDAwCiAJICogKHdpdGggQk9PVENTIGFuZCBQQVIxNCwgdXNlIDB4YWJmZmY4MDAgZm9yIFJPTUNTMSkgKi8KIAltb3ZsICAgICQweGMwLCAlZWRpCi0gICAgICAgIG1vdmwJJDB4OGJmZmY4MDAsICVlYXgKLSAgICAgICAgbW92bAklZWF4LCAoJWRpKQkJCisJbW92bAkkMHg4YmZmZjgwMCwgJWVheAorCW1vdmwJJWVheCwgKCVkaSkKIAogCS8qIERpc2FibGUgU0RSQU0gd3JpdGUgYnVmZmVyICovCiAJbW92dyAgICAkMHg0MCwlZGkKLSAgICAgICAgeG9ydyAgICAlYXgsJWF4Ci0gICAgICAgIG1vdmIgICAgJWFsLCAoJWRpKSAgICAgICAgICAgICAgCisJeG9ydyAgICAlYXgsJWF4CisJbW92YiAgICAlYWwsICglZGkpCiAKIAkvKiBEaXNhYmUgTU1DUiBhbGlhcyAqLwogCW1vdncJJDB4ZmZmYywgJWR4Ci0JbW92bAkkMHgwMDAwMDBjYiwgJWVheAkKLQlvdXRsCSVlYXgsICVkeAkJCi0JCisJbW92bAkkMHgwMDAwMDBjYiwgJWVheAorCW91dGwJJWVheCwgJWR4CisKIAkvKiB0aGUgcmV0dXJuIGFkZHJlc3MgaXMgdG9yZWQgaW4gYnAgKi8KIAlqbXAJKiVicAotCQorCiAKIC5zZWN0aW9uIC5iaW9zLCAiYXgiCiAuY29kZTE2CkBAIC02NywxOCArNjcsMTcgQEAKIHJlYWxtb2RlX3Jlc2V0OgogCS8qIEFsaWFzIE1NQ1IgdG8gMHhkZjAwMCAqLwogCW1vdncJJDB4ZmZmYywgJWR4Ci0JbW92bAkkMHg4MDBkZjBjYiwgJWVheAkKLQlvdXRsCSVlYXgsICVkeAkJCi0JCisJbW92bAkkMHg4MDBkZjBjYiwgJWVheAorCW91dGwJJWVheCwgJWR4CisKIAkvKiBTZXQgZHMgdG8gcG9pbnQgdG8gTU1DUiBhbGlhcyAqLwotCW1vdncJJDB4ZGYwMCwgJWF4CQkKLQltb3Z3CSVheCwgJWRzCQkgCi0JCQorCW1vdncJJDB4ZGYwMCwgJWF4CisJbW92dwklYXgsICVkcworCiAJLyogaXNzdWUgc29mdHdhcmUgcmVzZXQgdGhvcnVnaCBNTUNSICovCiAJbW92bCAgICAkMHhkNzIsICVlZGkKLSAgICAgICAgbW92YgkkMHgwMSwgJWFsCi0gICAgICAgIG1vdmIJJWFsLCAoJWRpKQkJCisJbW92YgkkMHgwMSwgJWFsCisJbW92YgklYWwsICglZGkpCiAKIDE6CWhsdAogCWptcAkxCi0JCmRpZmYgLS1naXQgYS9ib2FyZC9zYzUyMF9jZHAvdS1ib290LmxkcyBiL2JvYXJkL3NjNTIwX2NkcC91LWJvb3QubGRzCmluZGV4IGZiYWI5YjguLjE5NDRhNzQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NjNTIwX2NkcC91LWJvb3QubGRzCisrKyBiL2JvYXJkL3NjNTIwX2NkcC91LWJvb3QubGRzCkBAIC0yNiw2MCArMjYsNjUgQEAKIEVOVFJZKF9zdGFydCkKIAogU0VDVElPTlMKLXsJCit7CiAJLiA9IDB4Mzg3YzAwMDA7ICAgICAgICAgICAgICAgICAgICAgLyogV2hlcmUgYm9vdGNvZGUgaW4gdGhlIGZsYXNoIGlzIG1hcHBlZCAqLwogCS50ZXh0ICA6IHsgKigudGV4dCk7IH0KLQkKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KIAotICAgICAgICAuID0gMHg0MDAwMDA7IAkgICAgICAgICAgICAgICAgICAgIC8qIFJhbSBkYXRhIHNlZ21lbnQgdG8gdXNlICovCisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCisJLiA9IDB4NDAwMDAwOyAJICAgICAgICAgICAgICAgICAgICAvKiBSYW0gZGF0YSBzZWdtZW50IHRvIHVzZSAqLwogCV9pMzg2Ym9vdF9yb21kYXRhX2Rlc3QgPSBBQlNPTFVURSguKTsKLSAgICAgICAgLmRhdGEgOiBBVCAoIExPQURBRERSKC5yb2RhdGEpICsgU0laRU9GKC5yb2RhdGEpICkgeyAqKC5kYXRhKSB9Ci0JX2kzODZib290X3JvbWRhdGFfc3RhcnQgPSBMT0FEQUREUiguZGF0YSk7IAkKKwkuZGF0YSA6IEFUICggTE9BREFERFIoLnJvZGF0YSkgKyBTSVpFT0YoLnJvZGF0YSkgKSB7ICooLmRhdGEpIH0KKwlfaTM4NmJvb3Rfcm9tZGF0YV9zdGFydCA9IExPQURBRERSKC5kYXRhKTsKIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5nb3QgOiBBVCAoIExPQURBRERSKC5kYXRhKSArIFNJWkVPRiguZGF0YSkgKSB7ICooLmdvdCkgfQotCV9pMzg2Ym9vdF9yb21kYXRhX3NpemUgPSBTSVpFT0YoLmRhdGEpICsgU0laRU9GKC5nb3QpOyAJCisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiBBVCAoIExPQURBRERSKC5kYXRhKSArIFNJWkVPRiguZGF0YSkgKSB7ICooLmdvdCkgfQorCV9pMzg2Ym9vdF9yb21kYXRhX3NpemUgPSBTSVpFT0YoLmRhdGEpICsgU0laRU9GKC5nb3QpOwogCiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAlfaTM4NmJvb3RfYnNzX3N0YXJ0ID0gQUJTT0xVVEUoLik7Ci0gICAgICAgIC5ic3MgOiB7ICooLmJzcykgfQkKKwkuYnNzIDogeyAqKC5ic3MpIH0KIAlfaTM4NmJvb3RfYnNzX3NpemUgPSBTSVpFT0YoLmJzcyk7Ci0JCi0JCisKKwogCS8qIDE2Yml0IHJlYWxtb2RlIHRyYW1wb2xpbmUgY29kZSAqLwogCS5yZWFsbW9kZSAweDdjMCA6IEFUICggTE9BREFERFIoLmdvdCkgKyBTSVpFT0YoLmdvdCkgKSB7ICooLnJlYWxtb2RlKSB9Ci0gICAgCisKIAlfaTM4NmJvb3RfcmVhbG1vZGUgPSBMT0FEQUREUigucmVhbG1vZGUpOwogCV9pMzg2Ym9vdF9yZWFsbW9kZV9zaXplID0gU0laRU9GKC5yZWFsbW9kZSk7Ci0JCisKIAkvKiAxNmJpdCBCSU9TIGVtdWxhdGlvbiBjb2RlIChqdXN0IGVub3VnaCB0byBib290IExpbnV4KSAqLwogCS5iaW9zIDAgOiBBVCAoIExPQURBRERSKC5yZWFsbW9kZSkgKyBTSVpFT0YoLnJlYWxtb2RlKSApIHsgKiguYmlvcykgfQotICAgIAorCiAJX2kzODZib290X2Jpb3MgPSBMT0FEQUREUiguYmlvcyk7CiAJX2kzODZib290X2Jpb3Nfc2l6ZSA9IFNJWkVPRiguYmlvcyk7Ci0JCisKKworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKwogCiAJLyogVGhlIGxvYWQgYWRkcmVzc2VzIGJlbG93IGFzc3VtZXMgdGhhdCB0aGUgZmxhc2gKIAkgKiB3aWxsIGJlIG1hcHBlZCBzbyB0aGF0IDB4Mzg3ZjAwMDAgPT0gMHhmZmZmMDAwMAogCSAqIGF0IHJlc2V0IHRpbWUKIAkgKgotCSAqIFRoZSBmZTAwIGFuZCBmZjAwIG9mZnNldHMgb2YgdGhlIHN0YXJ0MzIgYW5kIHN0YXJ0MTYgCisJICogVGhlIGZlMDAgYW5kIGZmMDAgb2Zmc2V0cyBvZiB0aGUgc3RhcnQzMiBhbmQgc3RhcnQxNgogCSAqIHNlZ21lbnRzIGFyZSBhcmJpdHJhcnksIHRoZSBqdXN0IGhhdmUgdG8gYmUgbWFwcGVkCiAJICogYXQgcmVzZXQgYW5kIHRoZSBjb2RlIGhhdmUgdG8gZml0LgogCSAqIFRoZSBmZmYwIG9mZnNldCBvZiByZXNldCBpcyBpbXBvcnRhbnQsIGhvd2V2ZXIuCiAJICovCi0JIAotCSAKKworCiAJLiA9IDB4ZmZmZmZlMDA7Ci0JLnN0YXJ0MzIgOiBBVCAoMHgzODdmZmUwMCkgeyAqKC5zdGFydDMyKTsgfSAKLQkKKwkuc3RhcnQzMiA6IEFUICgweDM4N2ZmZTAwKSB7ICooLnN0YXJ0MzIpOyB9CisKIAkuID0gMHhmZjAwOwotCS5zdGFydDE2IDogQVQgKDB4Mzg3ZmZmMDApIHsgKiguc3RhcnQxNik7IH0gIAotCQorCS5zdGFydDE2IDogQVQgKDB4Mzg3ZmZmMDApIHsgKiguc3RhcnQxNik7IH0KKwogCS4gPSAweGZmZjA7Ci0JLnJlc2V0IDogQVQgKDB4Mzg3ZmZmZjApIHsgKigucmVzZXQpOyB9ICAKKwkucmVzZXQgOiBBVCAoMHgzODdmZmZmMCkgeyAqKC5yZXNldCk7IH0KIAlfaTM4NmJvb3RfZW5kID0gKExPQURBRERSKC5yZXNldCkgKyBTSVpFT0YoLnJlc2V0KSApOwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2M1MjBfc3B1bmsvTWFrZWZpbGUgYi9ib2FyZC9zYzUyMF9zcHVuay9NYWtlZmlsZQppbmRleCA1MzIxN2MzLi4yNDJkNTNjIDEwMDY0NAotLS0gYS9ib2FyZC9zYzUyMF9zcHVuay9NYWtlZmlsZQorKysgYi9ib2FyZC9zYzUyMF9zcHVuay9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogU09CSlMJOj0gc2M1MjBfc3B1bmtfYXNtLm8gc2M1MjBfc3B1bmtfYXNtMTYubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9zYzUyMF9zcHVuay9mbGFzaC5jIGIvYm9hcmQvc2M1MjBfc3B1bmsvZmxhc2guYwppbmRleCA2NmVmNzIwLi5kOTdkYzIxIDEwMDY0NAotLS0gYS9ib2FyZC9zYzUyMF9zcHVuay9mbGFzaC5jCisrKyBiL2JvYXJkL3NjNTIwX3NwdW5rL2ZsYXNoLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDAyLCAyMDAzCiAgKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UKLSAqIAorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CiAgKiBBbGV4IFp1ZXBrZSA8YXp1QHN5c2dvLmRlPgpAQCAtNjYsMTIyICs2NiwxMjEgQEAKIHN0YXRpYyB1MzIgX3Byb2JlX2ZsYXNoKHUzMiBhZGRyLCB1MzIgYncsIGludCBpbCkKIHsKIAl1MzIgcmVzdWx0PTA7Ci0JCisKIAkvKiBGaXJzdCBkbyBhbiB1bmxvY2sgY3ljbGUgZm9yIHRoZSBiZW5lZml0IG9mCiAJICogZGV2aWNlcyB0aGF0IG5lZWQgaXQgKi8KLQkKKwogCXN3aXRjaCAoYncpIHsKLQkJCisKIAljYXNlIDE6CiAJCSoodm9sYXRpbGUgdTgqKShhZGRyKzB4NTU1NSkgPSAweGFhOwogCQkqKHZvbGF0aWxlIHU4KikoYWRkcisweDJhYWEpID0gMHg1NTsKIAkJKih2b2xhdGlsZSB1OCopKGFkZHIrMHg1NTU1KSA9IDB4OTA7Ci0JCQorCiAJCS8qIFJlYWQgdmVuZG9yICovCiAJCXJlc3VsdCA9ICoodm9sYXRpbGUgdTgqKWFkZHI7CiAJCXJlc3VsdCA8PD0gMTY7Ci0JCQorCiAJCS8qIFJlYWQgZGV2aWNlICovCiAJCXJlc3VsdCB8PSAqKHZvbGF0aWxlIHU4KikoYWRkcisyKTsKLQkJCisKIAkJLyogUmV0dXJuIGRldmljZSB0byBkYXRhIG1vZGUgKi8KIAkJKih2b2xhdGlsZSB1OCopYWRkciA9IDB4ZmY7Ci0JCSoodm9sYXRpbGUgdTgqKShhZGRyKzB4NTU1NSksIDB4ZjA7ICAKKwkJKih2b2xhdGlsZSB1OCopKGFkZHIrMHg1NTU1KSwgMHhmMDsKIAkJYnJlYWs7Ci0JCQorCiAJY2FzZSAyOgogCQkqKHZvbGF0aWxlIHUxNiopKGFkZHIrMHhhYWFhKSA9IDB4YWFhYTsKIAkJKih2b2xhdGlsZSB1MTYqKShhZGRyKzB4NTU1NCkgPSAweDU1NTU7Ci0JCQorCiAJCS8qIElzc3VlIGlkZW50aWZpY2F0aW9uIGNvbW1hbmQgKi8KIAkJaWYgKGlsID09IDIpIHsKIAkJCSoodm9sYXRpbGUgdTE2KikoYWRkcisweGFhYWEpID0gMHg5MDkwOwotCQkJCisKIAkJCS8qIFJlYWQgdmVuZG9yICovCiAJCQlyZXN1bHQgPSAqKHZvbGF0aWxlIHU4KilhZGRyOwogCQkJcmVzdWx0IDw8PSAxNjsKLQkJCQorCiAJCQkvKiBSZWFkIGRldmljZSAqLwogCQkJcmVzdWx0IHw9ICoodm9sYXRpbGUgdTgqKShhZGRyKzIpOwotCQkJCisKIAkJCS8qIFJldHVybiBkZXZpY2UgdG8gZGF0YSBtb2RlICovCiAJCQkqKHZvbGF0aWxlIHUxNiopYWRkciA9ICAweGZmZmY7Ci0JCQkqKHZvbGF0aWxlIHUxNiopKGFkZHIrMHhhYWFhKSwgMHhmMGYwOyAgCi0JCQkKKwkJCSoodm9sYXRpbGUgdTE2KikoYWRkcisweGFhYWEpLCAweGYwZjA7CisKIAkJfSBlbHNlIHsKIAkJCSoodm9sYXRpbGUgdTgqKShhZGRyKzB4YWFhYSkgPSAweDkwOwogCQkJLyogUmVhZCB2ZW5kb3IgKi8KIAkJCXJlc3VsdCA9ICoodm9sYXRpbGUgdTE2KilhZGRyOwogCQkJcmVzdWx0IDw8PSAxNjsKLQkJCQorCiAJCQkvKiBSZWFkIGRldmljZSAqLwogCQkJcmVzdWx0IHw9ICoodm9sYXRpbGUgdTE2KikoYWRkcisyKTsKLQkJCQorCiAJCQkvKiBSZXR1cm4gZGV2aWNlIHRvIGRhdGEgbW9kZSAqLwogCQkJKih2b2xhdGlsZSB1OCopYWRkciA9IDB4ZmY7Ci0JCQkqKHZvbGF0aWxlIHU4KikoYWRkcisweGFhYWEpLCAweGYwOyAgCQkJCisJCQkqKHZvbGF0aWxlIHU4KikoYWRkcisweGFhYWEpLCAweGYwOwogCQl9Ci0JCQorCiAJCWJyZWFrOwotCQkKKwogCSBjYXNlIDQ6CiAJCSoodm9sYXRpbGUgdTMyKikoYWRkcisweDU1NTQpID0gMHhhYWFhYWFhYTsKIAkJKih2b2xhdGlsZSB1MzIqKShhZGRyKzB4YWFhOCkgPSAweDU1NTU1NTU1OwotCQkKKwogCQlzd2l0Y2ggKGlsKSB7CiAJCWNhc2UgMToKIAkJCS8qIElzc3VlIGlkZW50aWZpY2F0aW9uIGNvbW1hbmQgKi8KIAkJCSoodm9sYXRpbGUgdTgqKShhZGRyKzB4NTU1NCkgPSAweDkwOwotCQkJCisKIAkJCS8qIFJlYWQgdmVuZG9yICovCiAJCQlyZXN1bHQgPSAqKHZvbGF0aWxlIHUxNiopYWRkcjsKIAkJCXJlc3VsdCA8PD0gMTY7Ci0JCQorCiAJCQkvKiBSZWFkIGRldmljZSAqLwogCQkJcmVzdWx0IHw9ICoodm9sYXRpbGUgdTE2KikoYWRkcis0KTsKLQkJCQorCiAJCQkvKiBSZXR1cm4gZGV2aWNlIHRvIGRhdGEgbW9kZSAqLwogCQkJKih2b2xhdGlsZSB1OCopYWRkciA9ICAweGZmOwotCQkJKih2b2xhdGlsZSB1OCopKGFkZHIrMHg1NTU0KSwgMHhmMDsgIAorCQkJKih2b2xhdGlsZSB1OCopKGFkZHIrMHg1NTU0KSwgMHhmMDsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSAyOgogCQkJLyogSXNzdWUgaWRlbnRpZmljYXRpb24gY29tbWFuZCAqLwogCQkJKih2b2xhdGlsZSB1MzIqKShhZGRyICsgMHg1NTU0KSA9IDB4MDA5MDAwOTA7Ci0JCQkKKwogCQkJLyogUmVhZCB2ZW5kb3IgKi8KIAkJCXJlc3VsdCA9ICoodm9sYXRpbGUgdTE2KilhZGRyOwogCQkJcmVzdWx0IDw8PSAxNjsKLQkJCQorCiAJCQkvKiBSZWFkIGRldmljZSAqLwogCQkJcmVzdWx0IHw9ICoodm9sYXRpbGUgdTE2KikoYWRkcis0KTsKLQkJCQorCiAJCQkvKiBSZXR1cm4gZGV2aWNlIHRvIGRhdGEgbW9kZSAqLwogCQkJKih2b2xhdGlsZSB1MzIqKWFkZHIgPSAgMHgwMGZmMDBmZjsKLQkJCSoodm9sYXRpbGUgdTMyKikoYWRkcisweDU1NTQpLCAweDAwZjAwMGYwOyAgCisJCQkqKHZvbGF0aWxlIHUzMiopKGFkZHIrMHg1NTU0KSwgMHgwMGYwMDBmMDsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSA0OgogCQkJLyogSXNzdWUgaWRlbnRpZmljYXRpb24gY29tbWFuZCAqLwogCQkJKih2b2xhdGlsZSB1MzIqKShhZGRyKzB4NTU1NCkgPSAweDkwOTA5MDkwOwotCQkJCisKIAkJCS8qIFJlYWQgdmVuZG9yICovCiAJCQlyZXN1bHQgPSAqKHZvbGF0aWxlIHU4KilhZGRyOwogCQkJcmVzdWx0IDw8PSAxNjsKLQkJCQorCiAJCQkvKiBSZWFkIGRldmljZSAqLwogCQkJcmVzdWx0IHw9ICoodm9sYXRpbGUgdTgqKShhZGRyKzQpOwotCQkJCisKIAkJCS8qIFJldHVybiBkZXZpY2UgdG8gZGF0YSBtb2RlICovCiAJCQkqKHZvbGF0aWxlIHUzMiopYWRkciA9ICAweGZmZmZmZmZmOwotCQkJKih2b2xhdGlsZSB1MzIqKShhZGRyKzB4NTU1NCksIDB4ZjBmMGYwZjA7IAorCQkJKih2b2xhdGlsZSB1MzIqKShhZGRyKzB4NTU1NCksIDB4ZjBmMGYwZjA7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAl9Ci0JCi0JCi0JCisKKwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE5MSwzNiArMTkwLDM2IEBACiAKIHN0YXRpYyBpbnQgaWRlbnRpZnlfZmxhc2godW5zaWduZWQgYWRkcmVzcywgaW50IHdpZHRoKQogewotCWludCBpczsJCisJaW50IGlzOwogCWludCBkZXZpY2U7Ci0JaW50IHZlbmRvcjsJCisJaW50IHZlbmRvcjsKIAlpbnQgc2l6ZTsKIAl1bnNpZ25lZCByZXM7Ci0JCisKIAl1MzIgKCpfcHJvYmVfZmxhc2hfcHRyKSh1MzIgYSwgdTMyIGJ3LCBpbnQgaWwpOwotCQotCXNpemUgPSAodW5zaWduZWQpJl9wcm9iZV9mbGFzaF9lbmQgLSAodW5zaWduZWQpX3Byb2JlX2ZsYXNoOyAKLQkKKworCXNpemUgPSAodW5zaWduZWQpJl9wcm9iZV9mbGFzaF9lbmQgLSAodW5zaWduZWQpX3Byb2JlX2ZsYXNoOworCiAJaWYgKHNpemUgPiBQUk9CRV9CVUZGRVJfU0laRSkgewogCQlwcmludGYoIl9wcm9iZV9mbGFzaCgpIHJvdXRpbmUgdG9vIGxhcmdlICglZCkgJXAgLSAlcFxuIiwKIAkJICAgICAgIHNpemUsICZfcHJvYmVfZmxhc2hfZW5kLCBfcHJvYmVfZmxhc2gpOwogCQlyZXR1cm4gMDsKIAl9Ci0JCisKIAltZW1jcHkoYnVmZmVyLCBfcHJvYmVfZmxhc2gsIHNpemUpOwogCV9wcm9iZV9mbGFzaF9wdHIgPSAodm9pZCopYnVmZmVyOwotCQorCiAJaXMgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAlyZXMgPSBfcHJvYmVfZmxhc2hfcHRyKGFkZHJlc3MsIHdpZHRoLCAxKTsKIAlpZiAoaXMpIHsKIAkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAl9Ci0JCi0JCi0gICAgICAgIHZlbmRvciA9IHJlcyA+PiAxNjsKKworCisJdmVuZG9yID0gcmVzID4+IDE2OwogCWRldmljZSA9IHJlcyAmIDB4ZmZmZjsKLQkKLQkJCisKKwogCXJldHVybiByZXM7CiB9CiAKQEAgLTIyOCwxMiArMjI3LDEyIEBACiB7CiAJaW50IGksIGo7CiAJdWxvbmcgc2l6ZSA9IDA7Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgU0M1MjBfTUFYX0ZMQVNIX0JBTktTOyBpKyspIHsKIAkJdW5zaWduZWQgaWQ7CiAJCXVsb25nIGZsYXNoYmFzZSA9IDA7Ci0JCWludCBzZWN0c2l6ZSA9IDA7IAotCQkKKwkJaW50IHNlY3RzaXplID0gMDsKKwogCQltZW1zZXQoZmxhc2hfaW5mb1tpXS5wcm90ZWN0LCAwLCBDRkdfTUFYX0ZMQVNIX1NFQ1QpOwogCQlzd2l0Y2ggKGkpIHsKIAkJY2FzZSAwOgpAQCAtMjQyLDcgKzI0MSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlwYW5pYygiY29uZmlndXJlZCB0byBtYW55IGZsYXNoIGJhbmtzIVxuIik7CiAJCX0KLQkJCisKIAkJaWQgPSBpZGVudGlmeV9mbGFzaChmbGFzaGJhc2UsIDIpOwogCQlzd2l0Y2ggKGlkKSB7CiAJCWNhc2UgMHgwMDAxMjJkNzoKQEAgLTI1MCw3OCArMjQ5LDc4IEBACiAJCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0KIAkJCQkoQU1EX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spIHwKIAkJCQkoQU1EX0lEX0xWNjQwVSAmIEZMQVNIX1RZUEVNQVNLKTsKLQkJCQorCiAJCQlmbGFzaF9pbmZvW2ldLnNpemUgPSBBMjlMVjY0MURIX1NJWkU7CiAJCQlmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudCA9IEEyOUxWNjQxREhfU0VDVE9SUzsKIAkJCXNlY3RzaXplID0gQTI5TFY2NDFESF9TSVpFL0EyOUxWNjQxREhfU0VDVE9SUzsKIAkJCXByaW50ZigiQmFuayAlZDogQU1EIDI5TFY2NDFESFxuIiwgaSk7CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgMHgwMDAxMjI3RToKIAkJCS8qIDI5TFY2NDFNSCAqLwogCQkJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9CiAJCQkJKEFNRF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSB8CiAJCQkJKEFNRF9JRF9ETDY0MCAmIEZMQVNIX1RZUEVNQVNLKTsKLQkJCQorCiAJCQlmbGFzaF9pbmZvW2ldLnNpemUgPSBBMjlMVjY0MU1IX1NJWkU7CiAJCQlmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudCA9IEEyOUxWNjQxTUhfU0VDVE9SUzsKIAkJCXNlY3RzaXplID0gQTI5TFY2NDFNSF9TSVpFL0EyOUxWNjQxTUhfU0VDVE9SUzsKIAkJCXByaW50ZigiQmFuayAlZDogQU1EIDI5TFY2NDFNSFxuIiwgaSk7CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgMHgwMDg5MDAxNjoKIAkJCS8qIDI4RjMyMEozQSAqLwogCQkJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9CiAJCQkJKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spIHwKIAkJCQkoSU5URUxfSURfMjhGMzIwSjNBICYgRkxBU0hfVFlQRU1BU0spOwotCQkJCisKIAkJCWZsYXNoX2luZm9baV0uc2l6ZSA9IEkyOEYzMjBKM0FfU0laRTsKIAkJCWZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50ID0gSTI4RjMyMEozQV9TRUNUT1JTOwogCQkJc2VjdHNpemUgPSBJMjhGMzIwSjNBX1NJWkUvSTI4RjMyMEozQV9TRUNUT1JTOwogCQkJcHJpbnRmKCJCYW5rICVkOiBJbnRlbCAyOEYzMjBKM0FcbiIsIGkpOwogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIDB4MDA4OTAwMTc6CiAJCQkvKiAyOEY2NDBKM0EgKi8KIAkJCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPQogCQkJCShJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSB8CiAJCQkJKElOVEVMX0lEXzI4RjY0MEozQSAmIEZMQVNIX1RZUEVNQVNLKTsKLQkJCQorCiAJCQlmbGFzaF9pbmZvW2ldLnNpemUgPSBJMjhGNjQwSjNBX1NJWkU7CiAJCQlmbGFzaF9pbmZvW2ldLnNlY3Rvcl9jb3VudCA9IEkyOEY2NDBKM0FfU0VDVE9SUzsKIAkJCXNlY3RzaXplID0gSTI4RjY0MEozQV9TSVpFL0kyOEY2NDBKM0FfU0VDVE9SUzsKIAkJCXByaW50ZigiQmFuayAlZDogSW50ZWwgMjhGNjQwSjNBXG4iLCBpKTsKIAkJCWJyZWFrOwotCQkJCisKIAkJY2FzZSAweDAwODkwMDE4OgogCQkJLyogMjhGMTI4SjNBICovCiAJCQlmbGFzaF9pbmZvW2ldLmZsYXNoX2lkID0KIAkJCQkoSU5URUxfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSykgfAogCQkJCShJTlRFTF9JRF8yOEYxMjhKM0EgJiBGTEFTSF9UWVBFTUFTSyk7Ci0JCQkKKwogCQkJZmxhc2hfaW5mb1tpXS5zaXplID0gSTI4RjEyOEozQV9TSVpFOwogCQkJZmxhc2hfaW5mb1tpXS5zZWN0b3JfY291bnQgPSBJMjhGMTI4SjNBX1NFQ1RPUlM7CiAJCQlzZWN0c2l6ZSA9IEkyOEYxMjhKM0FfU0laRS9JMjhGMTI4SjNBX1NFQ1RPUlM7CiAJCQlwcmludGYoIkJhbmsgJWQ6IEludGVsIDI4RjEyOEozQVxuIiwgaSk7CiAJCQlicmVhazsKLQkJCQorCiAJCWRlZmF1bHQ6CiAJCQlwcmludGYoIkJhbmsgJWQgaGF2ZSB1bmtub3duIGZsYXNoICUwOHhcbiIsIGksIGlkKTsKIAkJCWZsYXNoX2luZm9baV0uZmxhc2hfaWQgPSBGTEFTSF9VTktOT1dOOwogCQkJY29udGludWU7CiAJCX0KLQkJCisKIAkJZm9yIChqID0gMDsgaiA8IGZsYXNoX2luZm9baV0uc2VjdG9yX2NvdW50OyBqKyspIHsKIAkJCWZsYXNoX2luZm9baV0uc3RhcnRbal0gPSBmbGFzaGJhc2UgKyBqICogc2VjdHNpemU7CiAJCX0KIAkJc2l6ZSArPSBmbGFzaF9pbmZvW2ldLnNpemU7Ci0JCQorCiAJCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX0NMRUFSLAogCQkJICAgICAgZmxhc2hfaW5mb1tpXS5zdGFydFswXSwKIAkJCSAgICAgICBmbGFzaF9pbmZvW2ldLnN0YXJ0WzBdICsgZmxhc2hfaW5mb1tpXS5zaXplIC0gMSwKIAkJCSAgICAgICZmbGFzaF9pbmZvW2ldKTsKIAl9Ci0JCisKIAkvKgogCSAqIFByb3RlY3QgbW9uaXRvciBhbmQgZW52aXJvbm1lbnQgc2VjdG9ycwogCSAqLwpAQCAtMzM0LDcgKzMzMyw3IEBACiAJCSAgICAgIENGR19FTlZfQUREUiwKIAkJICAgICAgQ0ZHX0VOVl9BRERSICsgQ0ZHX0VOVl9TSVpFIC0gMSwKIAkJICAgICAgJmZsYXNoX2luZm9bMF0pOwotI2VuZGlmCQorI2VuZGlmCiAJcmV0dXJuIHNpemU7CiB9CiAKQEAgLTM0Myw3ICszNDIsNyBAQAogdm9pZCBmbGFzaF9wcmludF9pbmZvKGZsYXNoX2luZm9fdCAqaW5mbykKIHsKIAlpbnQgaTsKLQkKKwogCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewogCWNhc2UgKElOVEVMX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spOgogCQlwcmludGYoIklOVEVMOiAiKTsKQEAgLTM2Miw5ICszNjEsOSBAQAogCQkJZ290byBkb25lOwogCQkJYnJlYWs7CiAJCX0KLQkJCisKIAkJYnJlYWs7Ci0JCQorCiAJY2FzZSAoQU1EX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spOgogCQlwcmludGYoIkFNRDogICAiKTsKIAkJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CkBAIC0zNzksMTcgKzM3OCwxNyBAQAogCQkJZ290byBkb25lOwogCQkJYnJlYWs7CiAJCX0KLQkJCisKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRmKCJVbmtub3duIFZlbmRvciAiKTsKIAkJYnJlYWs7CiAJfQotCQotCQorCisKIAlwcmludGYoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCiAJICAgICAgIGluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7Ci0JCisKIAlwcmludGYoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKIAlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKIAkJaWYgKChpICUgNSkgPT0gMCkgewpAQCAtMzk5LDcgKzM5OCw3IEBACiAJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIpOwogCX0KIAlwcmludGYgKCJcbiIpOwotCQorCiAJZG9uZToKIH0KIApAQCAtNDEwLDcgKzQwOSw3IEBACiBzdGF0aWMgdTMyIF9hbWRfZXJhc2VfZmxhc2godTMyIGFkZHIsIHUzMiBzZWN0b3IpCiB7CiAJdW5zaWduZWQgZWxhcHNlZDsKLQkKKwogCS8qIElzc3VlIGVyYXNlICovCiAJKih2b2xhdGlsZSB1MTYqKShhZGRyICsgMHhhYWFhKSA9IDB4MDBBQTsKIAkqKHZvbGF0aWxlIHUxNiopKGFkZHIgKyAweDU1NTQpID0gMHgwMDU1OwpAQCAtNDIwLDIwICs0MTksMjAgQEAKIAkqKHZvbGF0aWxlIHUxNiopKGFkZHIgKyAweDU1NTQpID0gMHgwMDU1OwogCS8qIFNlY3RvciBlcmFzZSBjb21tYW5kIGNvbWVzIGxhc3QgKi8KIAkqKHZvbGF0aWxlIHUxNiopKGFkZHIgKyBzZWN0b3IpID0gMHgwMDMwOwotCQorCiAJZWxhcHNlZCA9ICoodm9sYXRpbGUgdTE2KikoMHhmZmZlZjAwMCtTQzUyMF9TV1RNUk1JTExJKTsgLyogZHVtbXkgcmVhZCAqLwogCWVsYXBzZWQgPSAwOwogCXdoaWxlICgoKCoodm9sYXRpbGUgdTE2KikoYWRkciArIHNlY3RvcikpICYgMHgwMDgwKSAhPSAweDAwODApIHsKLQkJCisKIAkJZWxhcHNlZCArPSAqKHZvbGF0aWxlIHUxNiopKDB4ZmZmZWYwMDArU0M1MjBfU1dUTVJNSUxMSSk7CiAJCWlmIChlbGFwc2VkID4gKChDRkdfRkxBU0hfRVJBU0VfVE9VVC9DRkdfSFopICogMTAwMCkpIHsKIAkJCSoodm9sYXRpbGUgdTE2KikoYWRkcikgPSAweDAwZjA7Ci0JCQlyZXR1cm4gMTsJCQkKKwkJCXJldHVybiAxOwogCQl9CiAJfQotCQorCiAJKih2b2xhdGlsZSB1MTYqKShhZGRyKSA9IDB4MDBmMDsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC00NDgsNyArNDQ3LDcgQEAKIAl1bnNpZ25lZCBtaWxsaT0wOyBcCiAJXAogCW1pY3JvID0gKih2b2xhdGlsZSB1MTYqKSgweGZmZmVmMDAwK1NDNTIwX1NXVE1STUlMTEkpOyBcCi0gICAgICAgICBcCisJIFwKIAlmb3IgKDs7KSB7IFwKIAkJXAogCQltaWxsaSArPSAqKHZvbGF0aWxlIHUxNiopKDB4ZmZmZWYwMDArU0M1MjBfU1dUTVJNSUxMSSk7IFwKQEAgLTQ1OCwzMiArNDU3LDMyIEBACiAJCQlicmVhazsgXAogCQl9IFwKIAl9IFwKLX0gd2hpbGUgKDApIAorfSB3aGlsZSAoMCkKIAogc3RhdGljIHUzMiBfaW50ZWxfZXJhc2VfZmxhc2godTMyIGFkZHIsIHUzMiBzZWN0b3IpCi17CQorewogCXVuc2lnbmVkIGVsYXBzZWQ7Ci0JCisKIAkqKHZvbGF0aWxlIHUxNiopKGFkZHIgKyBzZWN0b3IpID0gMHgwMDUwOyAgIC8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLwogCSoodm9sYXRpbGUgdTE2KikoYWRkciArIHNlY3RvcikgPSAweDAwMjA7ICAgLyogZXJhc2Ugc2V0dXAgKi8KIAkqKHZvbGF0aWxlIHUxNiopKGFkZHIgKyBzZWN0b3IpID0gMHgwMEQwOyAgIC8qIGVyYXNlIGNvbmZpcm0gKi8KIAotCQorCiAJLyogV2FpdCBhdCBsZWFzdCA4MHVzIC0gbGV0J3Mgd2FpdCAxIG1zICovCiAJX191ZGVsYXkoMTAwMCk7Ci0JCisKIAllbGFwc2VkID0gMDsKIAl3aGlsZSAoKCgqKHZvbGF0aWxlIHUxNiopKGFkZHIgKyBzZWN0b3IpKSAmIDB4MDA4MCkgIT0gMHgwMDgwKSB7CiAJCWVsYXBzZWQgKz0gKih2b2xhdGlsZSB1MTYqKSgweGZmZmVmMDAwK1NDNTIwX1NXVE1STUlMTEkpOwogCQlpZiAoZWxhcHNlZCA+ICgoQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQvQ0ZHX0haKSAqIDEwMDApKSB7CiAJCQkqKHZvbGF0aWxlIHUxNiopKGFkZHIgKyBzZWN0b3IpID0gMHgwMEIwOyAgLyogc3VzcGVuZCBlcmFzZSAgICAgICovCiAJCQkqKHZvbGF0aWxlIHUxNiopKGFkZHIgKyBzZWN0b3IpID0gMHgwMEZGOyAgLyogcmVzZXQgdG8gcmVhZCBtb2RlICovCi0JCQlyZXR1cm4gMTsJCQkKKwkJCXJldHVybiAxOwogCQl9CiAJfQotCQorCiAJKih2b2xhdGlsZSB1MTYqKShhZGRyICsgc2VjdG9yKSA9IDB4MDBGRjsgIC8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5OCw3ICs0OTcsNyBAQAogCWludCBwcm90OwogCWludCBzZWN0OwogCXVuc2lnbmVkIHNpemU7Ci0JCisKIAlpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKIAkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKIAkJCXByaW50ZigiLSBtaXNzaW5nXG4iKTsKQEAgLTUwNyw3NyArNTA2LDc3IEBACiAJCX0KIAkJcmV0dXJuIDE7CiAJfQotCQorCiAJaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSAoQU1EX01BTlVGQUNUICYgRkxBU0hfVkVORE1BU0spKSB7Ci0JCXNpemUgPSAodW5zaWduZWQpJl9hbWRfZXJhc2VfZmxhc2hfZW5kIC0gKHVuc2lnbmVkKV9hbWRfZXJhc2VfZmxhc2g7IAotCQkKKwkJc2l6ZSA9ICh1bnNpZ25lZCkmX2FtZF9lcmFzZV9mbGFzaF9lbmQgLSAodW5zaWduZWQpX2FtZF9lcmFzZV9mbGFzaDsKKwogCQlpZiAoc2l6ZSA+IFBST0JFX0JVRkZFUl9TSVpFKSB7CiAJCQlwcmludGYoIl9hbWRfZXJhc2VfZmxhc2goKSByb3V0aW5lIHRvbyBsYXJnZSAoJWQpICVwIC0gJXBcbiIsCiAJCQkgICAgICAgc2l6ZSwgJl9hbWRfZXJhc2VfZmxhc2hfZW5kLCBfYW1kX2VyYXNlX2ZsYXNoKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCQorCiAJCW1lbWNweShidWZmZXIsIF9hbWRfZXJhc2VfZmxhc2gsIHNpemUpOwogCQlfZXJhc2VfZmxhc2hfcHRyID0gKHZvaWQqKWJ1ZmZlcjsKLQkKKwogCX0gZWxzZSBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IChJTlRFTF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSkgewotCQlzaXplID0gKHVuc2lnbmVkKSZfaW50ZWxfZXJhc2VfZmxhc2hfZW5kIC0gKHVuc2lnbmVkKV9pbnRlbF9lcmFzZV9mbGFzaDsgCi0JCQorCQlzaXplID0gKHVuc2lnbmVkKSZfaW50ZWxfZXJhc2VfZmxhc2hfZW5kIC0gKHVuc2lnbmVkKV9pbnRlbF9lcmFzZV9mbGFzaDsKKwogCQlpZiAoc2l6ZSA+IFBST0JFX0JVRkZFUl9TSVpFKSB7CiAJCQlwcmludGYoIl9pbnRlbF9lcmFzZV9mbGFzaCgpIHJvdXRpbmUgdG9vIGxhcmdlICglZCkgJXAgLSAlcFxuIiwKIAkJCSAgICAgICBzaXplLCAmX2ludGVsX2VyYXNlX2ZsYXNoX2VuZCwgX2ludGVsX2VyYXNlX2ZsYXNoKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCQorCiAJCW1lbWNweShidWZmZXIsIF9pbnRlbF9lcmFzZV9mbGFzaCwgc2l6ZSk7CiAJCV9lcmFzZV9mbGFzaF9wdHIgPSAodm9pZCopYnVmZmVyOwogCX0gZWxzZSB7CiAJCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOwogCQlyZXR1cm4gMTsKIAl9Ci0JCisKIAlwcm90ID0gMDsKIAlmb3IgKHNlY3Q9c19maXJzdDsgc2VjdDw9c19sYXN0OyArK3NlY3QpIHsKIAkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pIHsKIAkJCXByb3QrKzsKIAkJfQogCX0KLQkKKwogCWlmIChwcm90KSB7CiAJCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwgcHJvdCk7CiAJfSBlbHNlIHsKIAkJcHJpbnRmICgiXG4iKTsKIAl9Ci0JCQotCQorCisKIAkvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCiAJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdDw9c19sYXN0OyBzZWN0KyspIHsKLQkJCisKIAkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgeyAvKiBub3QgcHJvdGVjdGVkICovCiAJCQlpbnQgcmVzOwogCQkJaW50IGZsYWc7Ci0JCQkKKwogCQkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCiAJCQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0JCQkKKwogCQkJcmVzID0gX2VyYXNlX2ZsYXNoX3B0cihpbmZvLT5zdGFydFswXSwgaW5mby0+c3RhcnRbc2VjdF0taW5mby0+c3RhcnRbMF0pOwotCQkJCisKIAkJCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwogCQkJaWYgKGZsYWcpIHsKIAkJCQllbmFibGVfaW50ZXJydXB0cygpOwogCQkJfQotCQkJCi0JCQkKKworCiAJCQlpZiAocmVzKSB7CiAJCQkJcHJpbnRmKCJFcmFzZSB0aW1lZCBvdXQsIHNlY3RvciAlZFxuIiwgc2VjdCk7CiAJCQkJcmV0dXJuIHJlczsKIAkJCX0KLQkJCQotCQkJcHV0YygnLicpOwkJCQotCQl9CQkKKworCQkJcHV0YygnLicpOworCQl9CiAJfQogCi0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTk0LDM2ICs1OTMsMzYgQEAKIAl2b2xhdGlsZSB1MTYgKmRhdGEyID0gKHUxNiopJmRhdGE7CiAJaW50IGk7CiAJdW5zaWduZWQgZWxhcHNlZDsKLQkKKwogCS8qIENoZWNrIGlmIEZsYXNoIGlzIChzdWZmaWNpZW50bHkpIGVyYXNlZCAqLwogCWlmICgoKigodm9sYXRpbGUgdTE2KilkZXN0KSAmICh1MTYpZGF0YSkgIT0gKHUxNilkYXRhKSB7CiAJCXJldHVybiAyOwogCX0KLQkKKwogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJCi0JCQorCisKIAkJYWRkcjJbMHg1NTU1XSA9IDB4MDBBQTsKIAkJYWRkcjJbMHgyYWFhXSA9IDB4MDA1NTsKIAkJYWRkcjJbMHg1NTU1XSA9IDB4MDBBMDsKLQkJCisKIAkJZGVzdDJbaV0gPSAoZGF0YSA+PiAoaSoxNikpICYgMHhmZmZmOwotCQkKKwogCQllbGFwc2VkID0gKih2b2xhdGlsZSB1MTYqKSgweGZmZmVmMDAwK1NDNTIwX1NXVE1STUlMTEkpOyAvKiBkdW1teSByZWFkICovCiAJCWVsYXBzZWQgPSAwOwotCQkKKwogCQkvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCiAJCXdoaWxlICgoZGVzdDJbaV0gJiAweDAwODApICE9IChkYXRhMltpXSAmIDB4MDA4MCkpIHsKIAkJCWVsYXBzZWQgKz0gKih2b2xhdGlsZSB1MTYqKSgweGZmZmVmMDAwK1NDNTIwX1NXVE1STUlMTEkpOwogCQkJaWYgKGVsYXBzZWQgPiAoKENGR19GTEFTSF9XUklURV9UT1VUL0NGR19IWikgKiAxMDAwKSkgewogCQkJCWFkZHIyW2ldID0gMHgwMGYwOwotCQkJCXJldHVybiAxOwkJCQorCQkJCXJldHVybiAxOwogCQkJfQogCQl9CiAJfQotCQorCiAJYWRkcjJbaV0gPSAweDAwZjA7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjMyLDM4ICs2MzEsMzcgQEAKICAgICAgIi5sb25nIDBcbiIpOwogCiAKLQogc3RhdGljIGludCBfaW50ZWxfd3JpdGVfd29yZCh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGVzdCwgdW5zaWduZWQgZGF0YSkKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBlbGFwc2VkOwotCQorCiAJLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCiAJaWYgKCgqKCh2b2xhdGlsZSB1MTYqKWRlc3QpICYgKHUxNilkYXRhKSAhPSAodTE2KWRhdGEpIHsKIAkJcmV0dXJuIDI7CiAJfQotCQorCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQkKLQkJKih2b2xhdGlsZSB1MTYqKShkZXN0KzIqaSkgPSAweDAwNDA7IC8qIHdyaXRlIHNldHVwICovCQkKKworCQkqKHZvbGF0aWxlIHUxNiopKGRlc3QrMippKSA9IDB4MDA0MDsgLyogd3JpdGUgc2V0dXAgKi8KIAkJKih2b2xhdGlsZSB1MTYqKShkZXN0KzIqaSkgPSAoZGF0YSA+PiAoaSoxNikpICYgMHhmZmZmOwotCQkKKwogCQllbGFwc2VkID0gKih2b2xhdGlsZSB1MTYqKSgweGZmZmVmMDAwK1NDNTIwX1NXVE1STUlMTEkpOyAvKiBkdW1teSByZWFkICovCiAJCWVsYXBzZWQgPSAwOwotCQkKKwogCQkvKiBkYXRhIHBvbGxpbmcgZm9yIEQ3ICovCiAJCXdoaWxlICgoKih2b2xhdGlsZSB1MTYqKWRlc3QgJiAweDAwODApICE9IDB4MDA4MCkgewogCQkJZWxhcHNlZCArPSAqKHZvbGF0aWxlIHUxNiopKDB4ZmZmZWYwMDArU0M1MjBfU1dUTVJNSUxMSSk7CiAJCQlpZiAoZWxhcHNlZCA+ICgoQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQvQ0ZHX0haKSAqIDEwMDApKSB7CiAJCQkJKih2b2xhdGlsZSB1MTYqKWRlc3QgPSAweDAwZmY7Ci0JCQkJcmV0dXJuIDE7CQkJCisJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCX0KIAl9Ci0JCisKIAkqKHZvbGF0aWxlIHUxNiopZGVzdCA9IDB4MDBmZjsKLQkKLQkKKworCiAJcmV0dXJuIDA7CiAKIH0KQEAgLTY4OCwyOCArNjg2LDI4IEBACiAJaW50IGZsYWc7CiAJdTMyICgqX3dyaXRlX3dvcmRfcHRyKSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZGVzdCwgdW5zaWduZWQgZGF0YSk7CiAJdW5zaWduZWQgc2l6ZTsKLQkKKwogCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gKEFNRF9NQU5VRkFDVCAmIEZMQVNIX1ZFTkRNQVNLKSkgewotCQlzaXplID0gKHVuc2lnbmVkKSZfYW1kX3dyaXRlX3dvcmRfZW5kIC0gKHVuc2lnbmVkKV9hbWRfd3JpdGVfd29yZDsgCi0JCQorCQlzaXplID0gKHVuc2lnbmVkKSZfYW1kX3dyaXRlX3dvcmRfZW5kIC0gKHVuc2lnbmVkKV9hbWRfd3JpdGVfd29yZDsKKwogCQlpZiAoc2l6ZSA+IFBST0JFX0JVRkZFUl9TSVpFKSB7CiAJCQlwcmludGYoIl9hbWRfd3JpdGVfd29yZCgpIHJvdXRpbmUgdG9vIGxhcmdlICglZCkgJXAgLSAlcFxuIiwKIAkJCSAgICAgICBzaXplLCAmX2FtZF93cml0ZV93b3JkX2VuZCwgX2FtZF93cml0ZV93b3JkKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCQorCiAJCW1lbWNweShidWZmZXIsIF9hbWRfd3JpdGVfd29yZCwgc2l6ZSk7CiAJCV93cml0ZV93b3JkX3B0ciA9ICh2b2lkKilidWZmZXI7Ci0JCisKIAl9IGVsc2UgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSAoSU5URUxfTUFOVUZBQ1QgJiBGTEFTSF9WRU5ETUFTSykpIHsKLQkJc2l6ZSA9ICh1bnNpZ25lZCkmX2ludGVsX3dyaXRlX3dvcmRfZW5kIC0gKHVuc2lnbmVkKV9pbnRlbF93cml0ZV93b3JkOyAKLQkJCisJCXNpemUgPSAodW5zaWduZWQpJl9pbnRlbF93cml0ZV93b3JkX2VuZCAtICh1bnNpZ25lZClfaW50ZWxfd3JpdGVfd29yZDsKKwogCQlpZiAoc2l6ZSA+IFBST0JFX0JVRkZFUl9TSVpFKSB7CiAJCQlwcmludGYoIl9pbnRlbF93cml0ZV93b3JkKCkgcm91dGluZSB0b28gbGFyZ2UgKCVkKSAlcCAtICVwXG4iLAogCQkJICAgICAgIHNpemUsICZfaW50ZWxfd3JpdGVfd29yZF9lbmQsIF9pbnRlbF93cml0ZV93b3JkKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCQorCiAJCW1lbWNweShidWZmZXIsIF9pbnRlbF93cml0ZV93b3JkLCBzaXplKTsKIAkJX3dyaXRlX3dvcmRfcHRyID0gKHZvaWQqKWJ1ZmZlcjsKIAl9IGVsc2UgewpAQCAtNzE5LDcgKzcxNyw3IEBACiAKIAogCXdwID0gKGFkZHIgJiB+Myk7CS8qIGdldCBsb3dlciB3b3JkIGFsaWduZWQgYWRkcmVzcyAqLwotCQorCiAKIAkvKgogCSAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKQEAgLTczNywxMiArNzM1LDEyIEBACiAJCWZvciAoOyBjbnQ9PTAgJiYgaTw0OyArK2ksICsrY3ApIHsKIAkJCWRhdGEgfD0gKCoodWNoYXIgKiljcCkgIDw8ICg4KmkpOwogCQl9Ci0JCQorCiAJCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwogCQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0JCQorCiAJCXJjID0gX3dyaXRlX3dvcmRfcHRyKGluZm8tPnN0YXJ0WzBdLCB3cCwgZGF0YSk7Ci0JCQorCiAJCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLwogCQlpZiAoZmxhZykgewogCQkJZW5hYmxlX2ludGVycnVwdHMoKTsKQEAgLTc1MiwyMiArNzUwLDIyIEBACiAJCX0KIAkJd3AgKz0gNDsKIAl9Ci0JCisKIAkvKgogCSAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAogCSAqLwogCXdoaWxlIChjbnQgPj0gNCkgewogCQlkYXRhID0gMDsKLQkJCSAgICAgICAKKwogCQlmb3IgKGk9MDsgaTw0OyArK2kpIHsKIAkJCWRhdGEgfD0gKnNyYysrIDw8ICg4KmkpOwogCQl9Ci0JCQorCiAJCS8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLwogCQlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKIAkJcmMgPSBfd3JpdGVfd29yZF9wdHIoaW5mby0+c3RhcnRbMF0sIHdwLCBkYXRhKTsKLQkJCisKIAkJLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCiAJCWlmIChmbGFnKSB7CiAJCQllbmFibGVfaW50ZXJydXB0cygpOwpAQCAtNzc4LDExICs3NzYsMTEgQEAKIAkJd3AgICs9IDQ7CiAJCWNudCAtPSA0OwogCX0KLQkKKwogCWlmIChjbnQgPT0gMCkgewogCQlyZXR1cm4gMDsKIAl9Ci0JCisKIAkvKgogCSAqIGhhbmRsZSB1bmFsaWduZWQgdGFpbCBieXRlcwogCSAqLwpAQCAtNzkxLDcgKzc4OSw3IEBACiAJCWRhdGEgfD0gKnNyYysrIDw8ICg4KmkpOwogCQktLWNudDsKIAl9Ci0JCisKIAlmb3IgKDsgaTw0OyArK2ksICsrY3ApIHsKIAkJZGF0YSB8PSAoKih1Y2hhciAqKWNwKSA8PCAoOCppKTsKIAl9CkBAIC04MDAsMTQgKzc5OCwxMiBAQAogCWZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAogCXJjID0gX3dyaXRlX3dvcmRfcHRyKGluZm8tPnN0YXJ0WzBdLCB3cCwgZGF0YSk7Ci0JCisKIAkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoZmxhZykgewogCQllbmFibGVfaW50ZXJydXB0cygpOwogCX0KLQkKKwogCXJldHVybiByYzsKLQkKKwogfQotCi0KZGlmZiAtLWdpdCBhL2JvYXJkL3NjNTIwX3NwdW5rL3NjNTIwX3NwdW5rLmMgYi9ib2FyZC9zYzUyMF9zcHVuay9zYzUyMF9zcHVuay5jCmluZGV4IDk2MmUwNGUuLmU3YTdkNTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NjNTIwX3NwdW5rL3NjNTIwX3NwdW5rLmMKKysrIGIvYm9hcmQvc2M1MjBfc3B1bmsvc2M1MjBfc3B1bmsuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAKKyAqCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCiAgKgpAQCAtMzIsMTEgKzMyLDExIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotCQotLyogCisKKy8qCiAgKiBUaGVvcnk6CiAgKiBXZSBmaXJzdCBzZXQgdXAgYWxsIElSUXMgdG8gYmUgbm9uLXBjaSwgZWRnZSB0cmlnZ2VyZWQsCi0gKiB3aGVuIHdlIGxhdGVyIGVudW1lcmF0ZSB0aGUgcGNpIGJ1cyBhbmQgcGNpX3NjNTIwX2ZpeHVwX2lycSgpIGdldHMgCisgKiB3aGVuIHdlIGxhdGVyIGVudW1lcmF0ZSB0aGUgcGNpIGJ1cyBhbmQgcGNpX3NjNTIwX2ZpeHVwX2lycSgpIGdldHMKICAqIGNhbGxlZCB3ZSByZWFsbG9jYXRlIGlycXMgdG8gdGhlIHBjaSBidXMgd2l0aCBzYzUyMF9wY2lfc2V0X2lycSgpCiAgKiBhcyBuZWVkZWQuIFdoZSBjaG9vc2UgdGhlIGlycXMgdG8gZ3JhbSBmcm9tIGEgY29uZmlndXJhYmxlIGxpc3QKICAqIGluc2lkZSBwY2lfc2M1MjBfZml4dXBfaXJxKCkgKElmIHRoaXMgbGlzdCBjb250YWlucyBzdHVwaWQgaXJxJ3MKQEAgLTQ2LDQyICs0Niw0MiBAQAogc3RhdGljIHZvaWQgaXJxX2luaXQodm9pZCkKIHsKIAkvKiBkaXNhYmxlIGdsb2JhbCBpbnRlcnJ1cHQgbW9kZSAqLwotCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QSUNJQ1IsIDB4NDApOyAKLQkKKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUElDSUNSLCAweDQwKTsKKwogCS8qIHNldCBhbGwgaXJxcyB0byBlZGdlICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX01QSUNNT0RFLCAweDAwKTsKIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU0wxUElDTU9ERSwgMHgwMCk7CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NMMlBJQ01PREUsIDB4MDApOwotCQotCS8qIGFjdGl2ZSBsb3cgcG9sYXJpdHkgb24gUElDIGludGVycnVwdCBwaW5zLCAKKworCS8qIGFjdGl2ZSBsb3cgcG9sYXJpdHkgb24gUElDIGludGVycnVwdCBwaW5zLAogCSAqICBhY3RpdmUgaGlnaCBwb2xhcml0eSBvbiBhbGwgb3RoZXIgaXJxIHBpbnMgKi8KIAl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfSU5UUElOUE9MLCAweDAwMDApOwogCiAJLyogc2V0IGlycSBudW1iZXIgbWFwcGluZyAqLwotCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUFRNUjBNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAgLyogZGlzYWJsZSBHUCB0aW1lciAwIElOVCAqLyAgICAgICAKKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BUTVIwTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgIC8qIGRpc2FibGUgR1AgdGltZXIgMCBJTlQgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BUTVIxTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgIC8qIGRpc2FibGUgR1AgdGltZXIgMSBJTlQgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BUTVIyTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgIC8qIGRpc2FibGUgR1AgdGltZXIgMiBJTlQgKi8KLQl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUElUME1BUCwgU0M1MjBfSVJRMCk7ICAgICAgICAgICAgIC8qIFNldCBQSVQgdGltZXIgMCBJTlQgdG8gSVJRMCAqLyAKKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUElUME1BUCwgU0M1MjBfSVJRMCk7ICAgICAgICAgICAgIC8qIFNldCBQSVQgdGltZXIgMCBJTlQgdG8gSVJRMCAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QSVQxTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgICAgLyogZGlzYWJsZSBQSVQgdGltZXIgMSBJTlQgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUElUMk1BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgICAgIC8qIGRpc2FibGUgUElUIHRpbWVyIDIgSU5UICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1BDSUlOVEFNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAvKiBkaXNhYmxlIFBDSSBJTlQgQSAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QQ0lJTlRCTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgLyogZGlzYWJsZSBQQ0kgSU5UIEIgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfUENJSU5UQ01BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgIC8qIGRpc2FibGUgUENJIElOVCBDICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1BDSUlOVERNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAvKiBkaXNhYmxlIFBDSSBJTlQgRCAqLwotCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9ETUFCQ0lOVE1BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgLyogZGlzYWJsZSBETUEgSU5UICovIAorCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9ETUFCQ0lOVE1BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgLyogZGlzYWJsZSBETUEgSU5UICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NTSU1BUCwgU0M1MjBfSVJRNik7ICAgICAgICAgICAgICAvKiBTZXQgU3luY2hyb25pdXMgc2VyaWFsIElOVCB0byBJUlE2Ki8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfV0RUTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgICAgIC8qIGRpc2FibGUgV2F0Y2hkb2cgSU5UICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1JUQ01BUCwgU0M1MjBfSVJROCk7ICAgICAgICAgICAgICAvKiBTZXQgUlRDIGludCB0byA4ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1dQVk1BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgICAgICAvKiBkaXNhYmxlIHdyaXRlIHByb3RlY3QgSU5UICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0lDRU1BUCwgU0M1MjBfSVJRMSk7ICAgICAgICAgICAgICAvKiBTZXQgSUNFIERlYnVnIFNlcmllbHBvcnQgSU5UIHRvIElSUTEgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfRkVSUk1BUCxTQzUyMF9JUlExMyk7ICAgICAgICAgICAgIC8qIFNldCBGUCBlcnJvciBJTlQgdG8gSVJRMTMgKi8KLQkKKwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9VQVJUMU1BUCwgU0M1MjBfSVJRNCk7ICAgICAgICAgICAgLyogU2V0IGludGVybmFsIFVBUlQyIElOVCB0byBJUlE0ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1VBUlQyTUFQLCBTQzUyMF9JUlEzKTsgICAgICAgICAgICAvKiBTZXQgaW50ZXJuYWwgVUFSVDIgSU5UIHRvIElSUTMgKi8KLQkKKwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDBJTUFQLCBTQzUyMF9JUlE3KTsgICAgICAgICAgICAgLyogU2V0IEdQSVJRMCAoUEMtQ2FyZCBBVVggSVJRKSB0byBJUlE3ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMUlNQVAsIFNDNTIwX0lSUTE0KTsgICAgICAgICAgICAvKiBTZXQgR1BJUlExIChDRiBJUlEpIHRvIElSUTE0ICovCi0Jd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQM0lNQVAsIFNDNTIwX0lSUTUpOyAgICAgICAgICAgICAvKiBTZXQgR1BJUlEzICggQ0FOIElSUSApIHRpIElSUTUgKi8gCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQM0lNQVAsIFNDNTIwX0lSUTUpOyAgICAgICAgICAgICAvKiBTZXQgR1BJUlEzICggQ0FOIElSUSApIHRpIElSUTUgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1A0SU1BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgICAgIC8qIGRpc2JhbGUgR0lSUTQgKCBJUlIgSVJRICkgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1A1SU1BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgICAgIC8qIGRpc2FibGUgR1BJUlE1ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQNklNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAgICAvKiBkaXNhYmxlIEdQSVJRNiAqLwpAQCAtODksMTkgKzg5LDE5IEBACiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQOElNQVAsIFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAgICAvKiBkaXNhYmxlIEdQSVJROCAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUDlJTUFQLCBTQzUyMF9JUlFfRElTQUJMRUQpOyAgICAgLyogZGlzYWJsZSBHUElSUTkgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1AySU1BUCwgU0M1MjBfSVJRX0RJU0FCTEVEKTsgICAgIC8qIGRpc2FibGUgR1BJUlEyICovCi0Jd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMTBJTUFQLFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAgICAvKiBkaXNhYmxlIEdQSVJRMTAgKi8gICAgICAgICAgCi0JCisJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMTBJTUFQLFNDNTIwX0lSUV9ESVNBQkxFRCk7ICAgICAvKiBkaXNhYmxlIEdQSVJRMTAgKi8KKwogCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QQ0lIT1NUTUFQLCAweDExZik7ICAgICAgICAgICAgICAgLyogTWFwIFBDSSBob3N0YnJpZGdlIElOVCB0byBOTUkgKi8KIAl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfRUNDTUFQLCAweDEwMCk7ICAgICAgICAgICAgICAgICAgIC8qIE1hcCBTRFJBTSBFQ0MgZmFpbHVyZSBJTlQgdG8gTk1JICovCi0gCisKIH0KIAotCQorCiAvKiBQQ0kgc3R1ZmYgKi8KIHN0YXRpYyB2b2lkIHBjaV9zYzUyMF9zcHVua19maXh1cF9pcnEoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBwY2lfZGV2X3QgZGV2KQogewogCWludCB2ZXJzaW9uID0gcmVhZF9tbWNyX2J5dGUoU0M1MjBfU1lTSU5GTyk7Ci0JCisKIAkvKiBhIGNvbmZpZ3VyYWJsZSBsaXN0cyBvZiBpcnFzIHRvIHN0ZWFsCiAJICogd2hlbiB3ZSBuZWVkIG9uZSAoYSBib2FyZCB3aXRoIG1vcmUgcGNpIGludGVycnVwdCBwaW5zCiAJICogd291bGQgdXNlIGEgbGFyZ2VyIHRhYmxlICovCkBAIC0xMTIsODQgKzExMiw4MyBAQAogCQlDRkdfRk9SVEhfUENJX0lSUQogCX07CiAJc3RhdGljIGludCBuZXh0X2lycV9pbmRleD0wOwotCQotCWNoYXIgdG1wX3BpbjsJCisKKwljaGFyIHRtcF9waW47CiAJaW50IHBpbjsKLQkKKwogCXBjaV9ob3NlX3JlYWRfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJnRtcF9waW4pOwogCXBpbiA9IHRtcF9waW47Ci0JCisKIAlwaW4tPTE7IC8qIHBjaSBjb25maWcgc3BhY2UgdXNlIDEtYmFzZWQgbnVtYmVyaW5nICovCiAJaWYgKC0xID09IHBpbikgewogCQlyZXR1cm47IC8qIGRldmljZSB1c2Ugbm8gaXJxICovCiAJfQotCQotCQotICAgICAgIAorCisKIAkvKiBtYXAgZGV2aWNlIG51bWJlciArICBwaW4gdG8gYSBwaW4gb24gdGhlIHNjNTIwICovCiAJc3dpdGNoIChQQ0lfREVWKGRldikpIHsKLQljYXNlIDY6ICAvKiBFVEgwICovCQkgIAorCWNhc2UgNjogIC8qIEVUSDAgKi8KIAkJcGluKz1TQzUyMF9QQ0lfSU5UQTsKIAkJYnJlYWs7Ci0JCQorCiAJY2FzZSA3OiAgLyogRVRIMSAqLwogCQlwaW4rPVNDNTIwX1BDSV9JTlRCOwogCQlicmVhazsKLQkJCisKIAljYXNlIDg6ICAvKiBDcnlwdG8gKi8KIAkJcGluKz1TQzUyMF9QQ0lfSU5UQzsKIAkJYnJlYWs7Ci0JCQorCiAJY2FzZSA5OiAvKiBQTUMgc2xvdCAqLwogCQlwaW4rPVNDNTIwX1BDSV9JTlREOwogCQlicmVhazsKLQkJCisKIAljYXNlIDEwOiAvKiBQQy1DYXJkICovCi0JCQotCQlpZiAodmVyc2lvbiA8IDEwKSB7CQkJCisKKwkJaWYgKHZlcnNpb24gPCAxMCkgewogCQkJcGluKz1TQzUyMF9QQ0lfSU5URDsKIAkJfSBlbHNlIHsKIAkJCXBpbis9U0M1MjBfUENJX0lOVEM7CiAJCX0KIAkJYnJlYWs7Ci0JCQotCWRlZmF1bHQ6IAorCisJZGVmYXVsdDoKIAkJcmV0dXJuOwogCX0KLQkKKwogCXBpbiY9MzsgLyogd3JhcCBhcm91bmQgKi8KLQkKKwogCWlmIChzYzUyMF9wY2lfaW50c1twaW5dID09IC0xKSB7Ci0JCS8qIHJlLXJvdXRlIG9uZSBpbnRlcnJ1cHQgZm9yIHVzICovCQkKKwkJLyogcmUtcm91dGUgb25lIGludGVycnVwdCBmb3IgdXMgKi8KIAkJaWYgKG5leHRfaXJxX2luZGV4ID4gMykgewogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChwY2lfc2M1MjBfc2V0X2lycShwaW4sIGlycV9saXN0W25leHRfaXJxX2luZGV4XSkpIHsgCisJCWlmIChwY2lfc2M1MjBfc2V0X2lycShwaW4sIGlycV9saXN0W25leHRfaXJxX2luZGV4XSkpIHsKIAkJCXJldHVybjsKIAkJfQogCQluZXh0X2lycV9pbmRleCsrOwogCX0KIAotCQorCiAJaWYgKC0xICE9IHNjNTIwX3BjaV9pbnRzW3Bpbl0pIHsKLQkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIAorCQlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwKIAkJCQkJICAgc2M1MjBfcGNpX2ludHNbcGluXSk7CiAJfQotI2lmIDAJCi0JcHJpbnRmKCJmaXh1cF9pcnE6IGRldmljZSAlZCBwaW4gJWMgaXJxICVkXG4iLCAKKyNpZiAwCisJcHJpbnRmKCJmaXh1cF9pcnE6IGRldmljZSAlZCBwaW4gJWMgaXJxICVkXG4iLAogCSAgICAgICBQQ0lfREVWKGRldiksICdBJyArIHBpbiwgc2M1MjBfcGNpX2ludHNbcGluXSk7CiAjZW5kaWYKIH0KIAogCi1zdGF0aWMgdm9pZCBwY2lfc2M1MjBfc3B1bmtfY29uZmlndXJlX2NhcmRidXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCAKK3N0YXRpYyB2b2lkIHBjaV9zYzUyMF9zcHVua19jb25maWd1cmVfY2FyZGJ1cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCiAJCQkJCSAgICAgIHBjaV9kZXZfdCBkZXYsIHN0cnVjdCBwY2lfY29uZmlnX3RhYmxlICp0ZSkKIHsKIAl1MzIgaW9fYmFzZTsKIAl1MzIgdGVtcDsKLQkKKwogCXBjaWF1dG9fY29uZmlnX2RldmljZShob3NlLCBkZXYpOwotCQorCiAJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCBQQ0lfQ09NTUFORCwgMHgwNyk7ICAvKiBlbmFibGUgZGV2aWNlICovCiAJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCAweDBjLCAweDEwKTsgICAgICAgICAvKiBjYWNoZWxpbmUgc2l6ZSAqLwogCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgMHgwZCwgMHg0MCk7ICAgICAgICAgLyogbGF0ZW5jeSB0aW1lciAqLwpAQCAtMTk3LDE1ICsxOTYsMTUgQEAKIAlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgMHgwMDQwKTsgIC8qIHJlc2V0IGNhcmRidXMgKi8KIAlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgMHgwMDgwKTsgIC8qIHJvdXRlIGludGVycnVwdHMgdGhvdWdoIEV4Q0EgKi8KIAlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsICAweDQ0LCAweDNlMCk7IC8qIG1hcCBsZWdhY3kgSS9PIHBvcnQgdG8gMHgzZTAgKi8KLQkKLQlwY2lfaG9zZV9yZWFkX2NvbmZpZ19kd29yZChob3NlLCBkZXYsICAweDgwLCAmdGVtcCk7IC8qIFN5c3RlbSBjb250cm9sICovIAotCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19kd29yZChob3NlLCBkZXYsICAweDgwLCB0ZW1wIHwgMHg2MCk7IC8qIFN5c3RlbSBjb250cm9sOiBkaXNhYmxlIGNsb2NrcnVuICovIAotCS8qIHJvdXRlIE1GMCB0byB+SU5UIGFuZCBNRjMgdG8gSVJRNyAKKworCXBjaV9ob3NlX3JlYWRfY29uZmlnX2R3b3JkKGhvc2UsIGRldiwgIDB4ODAsICZ0ZW1wKTsgLyogU3lzdGVtIGNvbnRyb2wgKi8KKwlwY2lfaG9zZV93cml0ZV9jb25maWdfZHdvcmQoaG9zZSwgZGV2LCAgMHg4MCwgdGVtcCB8IDB4NjApOyAvKiBTeXN0ZW0gY29udHJvbDogZGlzYWJsZSBjbG9ja3J1biAqLworCS8qIHJvdXRlIE1GMCB0byB+SU5UIGFuZCBNRjMgdG8gSVJRNwogCSAqIHJlc2VydmUgYWxsIG90aGVycyAqLwotCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19kd29yZChob3NlLCBkZXYsIDB4OGMsIDB4MDAwMDcwMDIpOyAKKwlwY2lfaG9zZV93cml0ZV9jb25maWdfZHdvcmQoaG9zZSwgZGV2LCAweDhjLCAweDAwMDA3MDAyKTsKIAlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4OTEsIDB4MDApOyAgICAvKiBjYXJkIGNvbnRyb2wgKi8KIAlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4OTIsIDB4NjIpOyAgICAvKiBkZXZpY2UgY29udHJvbCAqLwotCQorCiAJaWYgKHRlLT5kZXZpY2UgIT0gMHhhYzU2KSB7CiAJCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgMHg5MywgMHgyMSk7ICAgIC8qIGFzeW5jIGludGVycnVwdCBlbmFibGUgKi8KIAkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCAweGE4LCAweDAwMDApOyAgLyogcmVzZXQgR1BJTyAqLwpAQCAtMjE2LDIyICsyMTUsMjEgQEAKIAkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCAweDkzLCAweDIwKTsgICAgLyogICovCiAJfQogCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgMHhhNCwgMHg4MDAwKTsgIC8qIHJlc2V0IHBvd2VyIG1hbmFnZW1lbnQgKi8KLQkKLQkKKworCiAJcGNpX2hvc2VfcmVhZF9jb25maWdfZHdvcmQoaG9zZSwgZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsICZpb19iYXNlKTsKIAlpb19iYXNlICY9IH4weGZMOwotCQorCiAJd3JpdGViKDB4MDcsIGlvX2Jhc2UrMHg4MDMpOyAvKiByb3V0ZSBDU0MgaXJxIHRob3VnaCBFeENBIGFuZCBlbmFibGUgSVJRNyAqLwogCXdyaXRlbCgwLCBpb19iYXNlKzB4MTApOyAgICAgLyogQ0xLUlVOIGRlZmF1bHQgKi8KIAl3cml0ZWwoMCwgaW9fYmFzZSsweDIwKTsgICAgIC8qIENMS1JVTiBkZWZhdWx0ICovCi0JCisKIH0KIAogCi0KIHN0YXRpYyBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSBwY2lfc2M1MjBfc3B1bmtfY29uZmlnX3RhYmxlW10gPSB7Ci0JeyAweDEwNGMsIDB4YWM1MCwgUENJX0FOWV9JRCwgMCwgMHgwYSwgMCwgcGNpX3NjNTIwX3NwdW5rX2NvbmZpZ3VyZV9jYXJkYnVzLCB7IDAsIDAsIDB9IH0sIAotCXsgMHgxMDRjLCAweGFjNTYsIFBDSV9BTllfSUQsIDAsIDB4MGEsIDAsIHBjaV9zYzUyMF9zcHVua19jb25maWd1cmVfY2FyZGJ1cywgeyAwLCAwLCAwfSB9LCAKKwl7IDB4MTA0YywgMHhhYzUwLCBQQ0lfQU5ZX0lELCAwLCAweDBhLCAwLCBwY2lfc2M1MjBfc3B1bmtfY29uZmlndXJlX2NhcmRidXMsIHsgMCwgMCwgMH0gfSwKKwl7IDB4MTA0YywgMHhhYzU2LCBQQ0lfQU5ZX0lELCAwLCAweDBhLCAwLCBwY2lfc2M1MjBfc3B1bmtfY29uZmlndXJlX2NhcmRidXMsIHsgMCwgMCwgMH0gfSwKIAl7IDAsIDAsIDAsIDAsIDAsIDAsIE5VTEwsIHswLDAsMH19CiB9OwogCkBAIC0yNTEsMjIgKzI0OSwyMiBAQAogLyogc2V0IHVwIHRoZSBJU0EgYnVzIHRpbWluZyBhbmQgc3lzdGVtIGFkZHJlc3MgbWFwcGluZ3MgKi8KIHN0YXRpYyB2b2lkIGJ1c19pbml0KHZvaWQpCiB7Ci0JLyogdmVyc2lvbnMgCisJLyogdmVyc2lvbnMKIAkgKiAwICAgSHlnbG8gdmVyc2lvbnMgMC45NSBhbmQgMC45NiAobGFyZ2UgYmFvcmRzKQogCSAqID8/ICBIeWdsbyB2ZXJzaW9uIDAuOTcgKHNtYWxsIGJvYXJkKQogCSAqIDEwICBTcHVuayBib2FyZAogCSAqLwogCWludCB2ZXJzaW9uID0gcmVhZF9tbWNyX2J5dGUoU0M1MjBfU1lTSU5GTyk7Ci0JCisKIAlpZiAodmVyc2lvbikgewogCQkvKiBzZXQgdXAgdGhlIEdQIElPIHBpbnMgKGZvciB0aGUgU3B1bmsgYm9hcmQpICovCiAJCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9QRlMzMV8xNiwgMHhmZmYwKTsgCS8qIHNldCB0aGUgR1BJTyBwaW4gZnVuY3Rpb24gMzEtMTYgcmVnICovCiAJCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9QRlMxNV8wLCAgMHgwMDBmKTsgIAkvKiBzZXQgdGhlIEdQSU8gcGluIGZ1bmN0aW9uIDE1LTAgcmVnICovCiAJCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9ESVIzMV8xNiwgMHgwMDBmKTsgCS8qIHNldCB0aGUgR1BJTyBkaXJlY3Rpb24gMzEtMTYgcmVnICovCiAJCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9ESVIxNV8wLCAgMHgxZmYwKTsgIAkvKiBzZXQgdGhlIEdQSU8gZGlyZWN0aW9uIDE1LTAgcmVnICovCi0JCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9DU1BGUywgMHhjMCk7ICAJCS8qIHNldCB0aGUgQ1MgcGluIGZ1bmN0aW9uIHJlZyAqLwkKKwkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0NTUEZTLCAweGMwKTsgIAkJLyogc2V0IHRoZSBDUyBwaW4gZnVuY3Rpb24gcmVnICovCiAJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9DTEtTRUwsIDB4NzApOwotCQkKKwogCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPQ0xSMzFfMTYsIDB4MDAwMyk7ICAgICAvKiByZXNldCBTU0kgY2hpcC1zZWxlY3RzICovCiAJCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9TRVQzMV8xNiwgMHgwMDBjKTsKIApAQCAtMjc2LDU0ICsyNzQsNTIgQEAKIAkJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1BJT1BGUzE1XzAsIDB4MWU3Zik7ICAJLyogc2V0IHRoZSBHUElPIHBpbiBmdW5jdGlvbiAxNS0wIHJlZyAqLwogCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPRElSMzFfMTYsIDB4MDAzZik7IAkvKiBzZXQgdGhlIEdQSU8gZGlyZWN0aW9uIDMxLTE2IHJlZyAqLwogCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPRElSMTVfMCwgMHhlMTgwKTsgIAkvKiBzZXQgdGhlIEdQSU8gZGlyZWN0aW9uIDE1LTAgcmVnICovCi0JCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9DU1BGUywgMHgwMCk7ICAJCS8qIHNldCB0aGUgQ1MgcGluIGZ1bmN0aW9uIHJlZyAqLwkKKwkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0NTUEZTLCAweDAwKTsgIAkJLyogc2V0IHRoZSBDUyBwaW4gZnVuY3Rpb24gcmVnICovCiAJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9DTEtTRUwsIDB4NzApOwotCQkKKwogCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPQ0xSMTVfMCwgMHgwMTgwKTsgICAgICAvKiByZXNldCBTU0kgY2hpcC1zZWxlY3RzICovCiAJfQotCQotCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUENTUlQsIDEpOyAgIC8qIHNldCB0aGUgR1AgQ1Mgb2Zmc2V0ICovICAgIAkKKworCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUENTUlQsIDEpOyAgIC8qIHNldCB0aGUgR1AgQ1Mgb2Zmc2V0ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQQ1NQVywgMyk7ICAgLyogc2V0IHRoZSBHUCBDUyBwdWxzZSB3aWR0aCAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUENTT0ZGLCAxKTsgIC8qIHNldCB0aGUgR1AgQ1Mgb2Zmc2V0ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQUkRXLCAzKTsgICAgLyogc2V0IHRoZSBSRCBwdWxzZSB3aWR0aCAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUFJET0ZGLCAxKTsgIC8qIHNldCB0aGUgR1AgUkQgb2Zmc2V0ICovCi0gICAgICAgIHdyaXRlX21tY3JfYnl0ZShTQzUyMF9HUFdSVywgMyk7ICAgIC8qIHNldCB0aGUgR1AgV1IgcHVsc2Ugd2lkdGggKi8KKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfR1BXUlcsIDMpOyAgICAvKiBzZXQgdGhlIEdQIFdSIHB1bHNlIHdpZHRoICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQV1JPRkYsIDEpOyAgLyogc2V0IHRoZSBHUCBXUiBvZmZzZXQgKi8KIAotCXdyaXRlX21tY3Jfd29yZChTQzUyMF9CT09UQ1NDVEwsIDB4MDQwNyk7CQkvKiBzZXQgdXAgdGltaW5nIG9mIEJPT1RDUyAqLyAKLQkKKwl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfQk9PVENTQ1RMLCAweDA0MDcpOwkJLyogc2V0IHVwIHRpbWluZyBvZiBCT09UQ1MgKi8KKwogCS8qIGFkanVzdCB0aGUgbWVtb3J5IG1hcDoKIAkgKiBieSBkZWZhdWx0IHRoZSBmaXJzdCAyNTZNQiAoMHgwMDAwMDAwMCAtIDB4MGZmZmZmZmYpIGlzIG1hcHBlZCB0byBTRFJBTQogCSAqIGFuZCAyNTZNQiB0byAxRy0xMjhrICAoMHgxMDAwMDAwIC0gMHgzN2ZmZmZmZikgaXMgbWFwcGVkIHRvIFBDSSBtbWlvCi0JICogd2UgbmVlZCB0byBtYXAgMUctMTI4ayAtIDFHICgweDM4MDAwMDAwIC0gMHgzZmZmZmZmZikgdG8gQ1MxICovIAotCQotCQkKLQkKKwkgKiB3ZSBuZWVkIHRvIG1hcCAxRy0xMjhrIC0gMUcgKDB4MzgwMDAwMDAgLSAweDNmZmZmZmZmKSB0byBDUzEgKi8KKworCiAJLyogYm9vdGNzICovCi0Jd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjEyLCAweDhiZmZlODAwKTsJCQotCQorCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIxMiwgMHg4YmZmZTgwMCk7CisKIAkvKiBJREUwID0gR1BDUzYgMWYwLTFmNyAqLwotCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVIzLCAgMHgzODA4MDFmMCk7CQkKKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMywgIDB4MzgwODAxZjApOwogCiAJLyogSURFMSA9IEdQQ1M3IDNmNiAqLwotCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVI0LCAgMHgzYzAwMDNmNik7CQkKKwl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSNCwgIDB4M2MwMDAzZjYpOwogCi0JYXNtICgid2JpbnZkXG4iKTsgLyogRmx1c2ggY2FjaGUsIHJlcS4gYWZ0ZXIgc2V0dGluZyB0aGUgdW5jaGFjaGVkIGF0dHJpYnV0ZSBvbmEgUEFSICovCQorCWFzbSAoIndiaW52ZFxuIik7IC8qIEZsdXNoIGNhY2hlLCByZXEuIGFmdGVyIHNldHRpbmcgdGhlIHVuY2hhY2hlZCBhdHRyaWJ1dGUgb25hIFBBUiAqLwogCi0Jd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0FERERFQ0NUTCwgcmVhZF9tbWNyX2J5dGUoU0M1MjBfQUREREVDQ1RMKSAmIH4oVUFSVDJfRElTfFVBUlQxX0RJUykpOwkKKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfQUREREVDQ1RMLCByZWFkX21tY3JfYnl0ZShTQzUyMF9BRERERUNDVEwpICYgfihVQVJUMl9ESVN8VUFSVDFfRElTKSk7CiAKIH0KIAogCi0KIC8qIHBhciB1c2FnZToKICAqIFBBUjAgICAobGVnYWN5X3ZpZGVvKQogICogUEFSMSAgIChQQ0kgUk9NIG1hcHBpbmcpCi0gKiBQQVIyIAotICogUEFSMyAgIElERSAKKyAqIFBBUjIKKyAqIFBBUjMgICBJREUKICAqIFBBUjQgICBJREUKICAqIFBBUjUgICAobGVnYWN5X3ZpZGVvKQotICogUEFSNiAKKyAqIFBBUjYKICAqIFBBUjcgICAobGVnYWN5X3ZpZGVvKQogICogUEFSOCAgIChsZWdhY3lfdmlkZW8pCiAgKiBQQVI5ICAgKGxlZ2FjeV92aWRlbykKQEAgLTMzNSwyMSArMzMxLDIxIEBACiAgKiBQQVIxNQogICovCiAKLS8qIAorLyoKICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG1hcCBhIGNodW5rIG9mIHNpemUgYnl0ZXMKICAqIG9mIHRoZSBzeXN0ZW0gYWRkcmVzcyBzcGFjZSB0byB0aGUgSVNBIGJ1cwotICogCisgKgogICogVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBtZW1vcnkgYWRkcmVzcwogICogYXMgc2VlbiBieSB0aGUgaG9zdCAod2hpY2ggbWF5IHZlcnkgd2lsbCBiZSB0aGUKICAqIHNhbWUgYXMgdGhlIGJ1cyBhZGRyZXNzKQogICovCi11MzIgaXNhX21hcF9yb20odTMyIGJ1c19hZGRyLCBpbnQgc2l6ZSkgCit1MzIgaXNhX21hcF9yb20odTMyIGJ1c19hZGRyLCBpbnQgc2l6ZSkKIHsKIAl1MzIgcGFyOwotCQotCXByaW50ZigiaXNhX21hcF9yb20gYXNrZWQgdG8gbWFwICVkIGJ5dGVzIGF0ICV4XG4iLCAKKworCXByaW50ZigiaXNhX21hcF9yb20gYXNrZWQgdG8gbWFwICVkIGJ5dGVzIGF0ICV4XG4iLAogCSAgICAgICBzaXplLCBidXNfYWRkcik7Ci0JCisKIAlwYXIgPSBzaXplOwogCWlmIChwYXIgPCAweDgwMDAwKSB7CiAJCXBhciA9IDB4ODAwMDA7CkBAIC0zNjAsMTIgKzM1NiwxMiBAQAogCXBhciA8PD0gMTg7CiAJcGFyIHw9IChidXNfYWRkcj4+MTIpOwogCXBhciB8PSAweDUwMDAwMDAwOwotCQorCiAJcHJpbnRmICgic2V0dGluZyBQQVIxMSB0byAleFxuIiwgcGFyKTsKLQkKKwogCS8qIE1hcCByb20gMHgxMDAwMCB3aXRoIFBBUjEgKi8KIAl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMTEsICBwYXIpOwotCQorCiAJcmV0dXJuIGJ1c19hZGRyOwogfQogCkBAIC0zODYsMTkgKzM4MiwxOSBAQAogCiAjaWZkZWYgQ09ORklHX1BDSQogI2RlZmluZSBQQ0lfUk9NX1RFTVBfU1BBQ0UgMHgxMDAwMAotLyogCisvKgogICogVGhpcyBmdW5jdGlvbiBzaG91bGQgbWFwIGEgY2h1bmsgb2Ygc2l6ZSBieXRlcwogICogb2YgdGhlIHN5c3RlbSBhZGRyZXNzIHNwYWNlIHRvIHRoZSBQQ0kgYnVzLAogICogc3VpdGFibGUgdG8gbWFwIFBDSSBST01TIChidXMgYWRkcmVzcyA8IDE2TSkKICAqIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgaG9zdCBtZW1vcnkgYWRkcmVzcwogICogd2hpY2ggc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgYnVzIGFkZHJlc3MKLSAqIGJlZm9yZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgUENJIHJvbSBhZGRyZXNzIAorICogYmVmb3JlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBQQ0kgcm9tIGFkZHJlc3MKICAqIGRlY29kZXIKICAqLwotdTMyIHBjaV9nZXRfcm9tX3dpbmRvdyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIGludCBzaXplKSAKK3UzMiBwY2lfZ2V0X3JvbV93aW5kb3coc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgc2l6ZSkKIHsKIAl1MzIgcGFyOwotCQorCiAJcGFyID0gc2l6ZTsKIAlpZiAocGFyIDwgMHg4MDAwMCkgewogCQlwYXIgPSAweDgwMDAwOwpAQCAtNDA5LDEyICs0MDUsMTIgQEAKIAlwYXIgPDw9IDE0OwogCXBhciB8PSAoUENJX1JPTV9URU1QX1NQQUNFPj4xNik7CiAJcGFyIHw9IDB4NzIwMDAwMDA7Ci0JCisKIAlwcmludGYgKCJzZXR0aW5nIFBBUjEgdG8gJXhcbiIsIHBhcik7Ci0JCisKIAkvKiBNYXAgcm9tIDB4MTAwMDAgd2l0aCBQQVIxICovCiAJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjEsICBwYXIpOwotCQorCiAJcmV0dXJuIFBDSV9ST01fVEVNUF9TUEFDRTsKIH0KIApAQCAtNDMxLDUxICs0MjcsNTEgQEAKIAkJcmV0dXJuOwogCX0KIAlwcmludGYoIiBub3Qgb3Vyc1xuIik7Ci0JCisKIH0KIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIG9yZGVyIHRvIHByb3ZpZGUgYWNjZXMgdG8gdGhlCi0gKiBsZWdhY3kgdmlkZW8gSS9PIHBvcnRzIG9uIHRoZSBQQ0kgYnVzLiAKLSAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gYWNjZXNzZXMgdG8gSS9PIHBvcnRzIDB4M2IwLTB4M2JiIGFuZCAKKyAqIGxlZ2FjeSB2aWRlbyBJL08gcG9ydHMgb24gdGhlIFBDSSBidXMuCisgKiBBZnRlciB0aGlzIGZ1bmN0aW9uIGFjY2Vzc2VzIHRvIEkvTyBwb3J0cyAweDNiMC0weDNiYiBhbmQKICAqIDB4M2MwLTB4M2RmIHNodWxkIHJlc3VsdCBpbiB0cmFuc2FjdGlvbnMgb24gdGhlIFBDSSBidXMuCi0gKiAKKyAqCiAgKi8KIGludCBwY2lfZW5hYmxlX2xlZ2FjeV92aWRlb19wb3J0cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCiB7CiAJLyogTWFwIHZpZGVvIG1lbW9yeSB0byAweGEwMDAwKi8KIAl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSMCwgIDB4NzIwMDQwMGEpOwotCQorCiAJLyogZm9yd2FyZCBhbGwgSS9PIGFjY2Vzc2VzIHRvIFBDSSAqLwotCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9BRERERUNDVEwsIAotCQkJcmVhZF9tbWNyX2J5dGUoU0M1MjBfQUREREVDQ1RMKSB8IElPX0hPTEVfREVTVF9QQ0kpOwkKLQkKLQkKKwl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfQUREREVDQ1RMLAorCQkJcmVhZF9tbWNyX2J5dGUoU0M1MjBfQUREREVDQ1RMKSB8IElPX0hPTEVfREVTVF9QQ0kpOworCisKIAkvKiBzbyB3ZSBtYXAgYXdheSBhbGwgaW8gcG9ydHMgdG8gcGNpIChvbmx5IHdheSB0byBhY2Nlc3MgcGNpIGlvCiAJICogYmVsb3cgMHg0MDAuIEJ1dCB0aGVuIHdlIGhhdmUgdG8gbWFwIGJhY2sgdGhlIHBvcnRpb25zIHRoYXQgd2UgZG9udAogCSAqIHVzZSBzbyB0aGF0IHRoZSBnZW5lcmF0ZSBjeWNsZXMgb24gdGhlIEdQSU8gYnVzIHdoZXJlIHRoZSBzaW8gYW5kCi0JICogSVNBIHNsb3RzIGFyZSBjb25uZWN0ZWQsIHRoaXMgcmVxdXJlIHRoZSB1c2Ugb2Ygc2V2ZXJhbCBQQVIgcmVnaXN0ZXJzIAorCSAqIElTQSBzbG90cyBhcmUgY29ubmVjdGVkLCB0aGlzIHJlcXVyZSB0aGUgdXNlIG9mIHNldmVyYWwgUEFSIHJlZ2lzdGVycwogCSAqLwotCQorCiAJLyogYnJpbmcgMHgxMDAgLSAweDJmNyBiYWNrIHRvIElTQSB1c2luZyBQQVI1ICovCi0Jd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjUsIDB4MzFmNzAxMDApOwkJCi0JCQorCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVI1LCAweDMxZjcwMTAwKTsKKwogCS8qIGNvbTIgdXNlIDJmOC0yZmYgKi8KLQkKKwogCS8qIGJyaW5nIDB4MzAwIC0gMHgzYWYgYmFjayB0byBJU0EgdXNpbmcgUEFSNyAqLwotCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVI3LCAweDMwYWYwMzAwKTsJCQotCQorCXdyaXRlX21tY3JfbG9uZyhTQzUyMF9QQVI3LCAweDMwYWYwMzAwKTsKKwogCS8qIHZnYSB1c2UgM2IwLTNiYiAqLwotCQorCiAJLyogYnJpbmcgMHgzYmMgLSAweDNiZiBiYWNrIHRvIElTQSB1c2luZyBQQVI4ICovCi0Jd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjgsIDB4MzAwMzAzYmMpOwkJCi0JCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjgsIDB4MzAwMzAzYmMpOworCiAJLyogdmdhIHVzZSAzYzAtM2RmICovCi0JCisKIAkvKiBicmluZyAweDNlMCAtIDB4M2Y3IGJhY2sgdG8gSVNBIHVzaW5nIFBBUjkgKi8KLQl3cml0ZV9tbWNyX2xvbmcoU0M1MjBfUEFSOSwgMHgzMDE3MDNlMCk7CQkKLQkJCi0JLyogY29tMSB1c2UgM2Y4LTNmZiAqLwkJCisJd3JpdGVfbW1jcl9sb25nKFNDNTIwX1BBUjksIDB4MzAxNzAzZTApOworCisJLyogY29tMSB1c2UgM2Y4LTNmZiAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC00ODgsMjAgKzQ4NCwyMCBAQAogaW50IGJvYXJkX2luaXQodm9pZCkKIHsKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQkKLQlpbml0X3NjNTIwKCk7CQorCisJaW5pdF9zYzUyMCgpOwogCWJ1c19pbml0KCk7CiAJaXJxX2luaXQoKTsKLQkJCisKIAkvKiBtYXggZHJpdmUgY3VycmVudCBvbiBTRFJBTSAqLwogCXdyaXRlX21tY3Jfd29yZChTQzUyMF9EU0NUTCwgMHgwMTAwKTsKLQkJCisKIAkvKiBlbnRlciBkZWJ1ZyBtb2RlIGFmdGVyIG5leHQgcmVzZXQgKG9ubHkgaWYganVtcGVyIGlzIGFsc28gc2V0KSAqLwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9SRVNDRkcsIDB4MDgpOwogCS8qIGNvbmZpZ3VyZSB0aGUgc29mdHdhcmUgdGltZXIgdG8gMzMuMDAwTUh6ICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NXVE1SQ0ZHLCAxKTsKIAlnZC0+YnVzX2NsayA9IDMzMDAwMDAwOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUxMywyNSArNTA5LDI1IEBACiAKIHZvaWQgc2hvd19ib290X3Byb2dyZXNzKGludCB2YWwpCiB7Ci0gCWludCB2ZXJzaW9uID0gcmVhZF9tbWNyX2J5dGUoU0M1MjBfU1lTSU5GTyk7Ci0JCisJaW50IHZlcnNpb24gPSByZWFkX21tY3JfYnl0ZShTQzUyMF9TWVNJTkZPKTsKKwogCWlmICh2ZXJzaW9uID09IDApIHsKIAkJLyogUElPMzEtUElPMTYgRGF0YSAqLwotCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPREFUQTMxXzE2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1BJT0RBVEEzMV8xNiwKIAkJCQkocmVhZF9tbWNyX3dvcmQoU0M1MjBfUElPREFUQTMxXzE2KSAmIDB4ZmZjMCl8ICgodmFsJjB4N2UpPj4xKSk7IC8qIDB4MWY4ID4+IDMgKi8KLQkJCisKIAkJLyogUElPMC1QSU8xNSBEYXRhICovCi0JCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9EQVRBMTVfMCwgCisJCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9EQVRBMTVfMCwKIAkJCQkocmVhZF9tbWNyX3dvcmQoU0M1MjBfUElPREFUQTE1XzApICYgMHgxZmZmKXwgKCh2YWwmMHg3KTw8MTMpKTsKIAl9IGVsc2UgewogCQkvKiBuZXdlciBib2FyZHMgdXNlIFBJTzQtUElPMTIgKi8KIAkJLyogUElPMC1QSU8xNSBEYXRhICovCi0jaWYgMAkJCi0JCXZhbCA9ICh2YWwgJiAweDAwNykgfCAoKHZhbCAmIDB4MDM4KSA8PCAzKSB8ICgodmFsICYgMHgxYzApID4+IDMpOyAKKyNpZiAwCisJCXZhbCA9ICh2YWwgJiAweDAwNykgfCAoKHZhbCAmIDB4MDM4KSA8PCAzKSB8ICgodmFsICYgMHgxYzApID4+IDMpOwogI2Vsc2UKLQkJdmFsID0gKHZhbCAmIDB4MDA3KSB8ICgodmFsICYgMHgwN2UpIDw8IDIpOyAKKwkJdmFsID0gKHZhbCAmIDB4MDA3KSB8ICgodmFsICYgMHgwN2UpIDw8IDIpOwogI2VuZGlmCi0JCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9EQVRBMTVfMCwgCisJCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9EQVRBMTVfMCwKIAkJCQkocmVhZF9tbWNyX3dvcmQoU0M1MjBfUElPREFUQTE1XzApICYgMHhlMDBmKSB8ICgodmFsJjB4MDFmZik8PDQpKTsKIAl9CiB9CkBAIC01MzksMTcgKzUzNSwxNyBAQAogCiBpbnQgbGFzdF9zdGFnZV9pbml0KHZvaWQpCiB7Ci0JCisKIAlpbnQgdmVyc2lvbiA9IHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NZU0lORk8pOwotCQorCiAJcHJpbnRmKCJPbWljcm9uIENldGkgU0M1MjAgU3B1bmsgcmV2aXNpb24gJXhcbiIsIHZlcnNpb24pOwotCQorCiAjaWYgMAogCWlmICh2ZXJzaW9uKSB7CiAJCWludCB4LCB5OwotCQkKKwogCQlwcmludGYoImVlcHJvbSBwcm9iZSAlZFxuIiwgc3BpX2VlcHJvbV9wcm9iZSgxKSk7Ci0JCQorCiAJCXNwaV9lZXByb21fcmVhZCgxLCAwLCAodTgqKSZ4LCAyKTsKIAkJc3BpX2VlcHJvbV9yZWFkKDEsIDEsICh1OCopJnksIDIpOwogCQlwcmludGYoImVlcHJvbSBieXRlcyAlMDR4JTA0eFxuIiwgeCwgeSk7CkBAIC01NTcsMTMwICs1NTMsMTI5IEBACiAJCXkgXj0gMHhmZmZmOwogCQlzcGlfZWVwcm9tX3dyaXRlKDEsIDAsICh1OCopJngsIDIpOwogCQlzcGlfZWVwcm9tX3dyaXRlKDEsIDEsICh1OCopJnksIDIpOwotCQkKKwogCQlzcGlfZWVwcm9tX3JlYWQoMSwgMCwgKHU4KikmeCwgMik7CiAJCXNwaV9lZXByb21fcmVhZCgxLCAxLCAodTgqKSZ5LCAyKTsKIAkJcHJpbnRmKCJlZXByb20gYnl0ZXMgJTA0eCUwNHhcbiIsIHgsIHkpOwotCQkKKwogCX0gZWxzZSB7CiAJCWludCB4LCB5OwotCQkKKwogCQlwcmludGYoImVlcHJvbSBwcm9iZSAlZFxuIiwgbXdfZWVwcm9tX3Byb2JlKDEpKTsKLQkJCisKIAkJbXdfZWVwcm9tX3JlYWQoMSwgMCwgKHU4KikmeCwgMik7CiAJCW13X2VlcHJvbV9yZWFkKDEsIDEsICh1OCopJnksIDIpOwogCQlwcmludGYoImVlcHJvbSBieXRlcyAlMDR4JTA0eFxuIiwgeCwgeSk7Ci0JCQorCiAJCXggXj0gMHhmZmZmOwogCQl5IF49IDB4ZmZmZjsKIAkJbXdfZWVwcm9tX3dyaXRlKDEsIDAsICh1OCopJngsIDIpOwogCQltd19lZXByb21fd3JpdGUoMSwgMSwgKHU4KikmeSwgMik7Ci0JCQorCiAJCW13X2VlcHJvbV9yZWFkKDEsIDAsICh1OCopJngsIDIpOwogCQltd19lZXByb21fcmVhZCgxLCAxLCAodTgqKSZ5LCAyKTsKIAkJcHJpbnRmKCJlZXByb20gYnl0ZXMgJTA0eCUwNHhcbiIsIHgsIHkpOwotCQkKLQkJCisKKwogCX0KICNlbmRpZgogCiAJZHMxNzIyX3Byb2JlKDIpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgc3NpX2NoaXBfc2VsZWN0KGludCBkZXYpIAordm9pZCBzc2lfY2hpcF9zZWxlY3QoaW50IGRldikKIHsKIAlpbnQgdmVyc2lvbiA9IHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NZU0lORk8pOwotCQorCiAJaWYgKHZlcnNpb24pIHsKIAkJLyogU3B1bmsgYm9hcmQ6IEVFUFJPTSBhbmQgQ0FOIGFyZSBhY3RvdmUtbG93LCBURU1QIGFuZCBBVVggYXJlIGFjdGl2ZSBoaWdoICovCiAJCXN3aXRjaCAoZGV2KSB7CiAJCWNhc2UgMTogLyogRUVQUk9NICovCiAJCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPQ0xSMzFfMTYsIDB4MDAwNCk7CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgMjogLyogVGVtcCBQcm9iZSAqLwogCQkJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1BJT1NFVDMxXzE2LCAweDAwMDIpOwogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIDM6IC8qIENBTiAqLwogCQkJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1BJT0NMUjMxXzE2LCAweDAwMDgpOwogCQkJYnJlYWs7Ci0JCQkKLQkJY2FzZSA0OiAvKiBBVVggKi8JCQkJCisKKwkJY2FzZSA0OiAvKiBBVVggKi8KIAkJCXdyaXRlX21tY3Jfd29yZChTQzUyMF9QSU9TRVQzMV8xNiwgMHgwMDAxKTsKIAkJCWJyZWFrOwotCQkKKwogCQljYXNlIDA6CiAJCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPQ0xSMzFfMTYsIDB4MDAwMyk7CiAJCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfUElPU0VUMzFfMTYsIDB4MDAwYyk7CiAJCQlicmVhazsKLQkJCQorCiAJCWRlZmF1bHQ6CiAJCQlwcmludGYoIklsbGVnYWwgU1NJIGRldmljZSByZXF1ZXN0ZWQ6ICVkXG4iLCBkZXYpOwogCQl9CiAJfSBlbHNlIHsKLQkJCisKIAkJLyogR2xvYm94IGJvYXJkOiBCb3RoIEVFUFJPTSBhbmQgVEVNUCBhcmUgYWN0aXZlLWhpZ2ggKi8KIAogCQlzd2l0Y2ggKGRldikgewogCQljYXNlIDE6IC8qIEVFUFJPTSAqLwogCQkJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1BJT1NFVDE1XzAsIDB4MDEwMCk7CiAJCQlicmVhazsKLQkJCQorCiAJCWNhc2UgMjogLyogVGVtcCBQcm9iZSAqLwogCQkJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1BJT1NFVDE1XzAsIDB4MDA4MCk7CiAJCQlicmVhazsKLQkJCisKIAkJY2FzZSAwOgogCQkJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1BJT0NMUjE1XzAsIDB4MDE4MCk7CiAJCQlicmVhazsKLQkJCQorCiAJCWRlZmF1bHQ6CiAJCQlwcmludGYoIklsbGVnYWwgU1NJIGRldmljZSByZXF1ZXN0ZWQ6ICVkXG4iLCBkZXYpOwogCQl9Ci0JfQkKKwl9CiB9CiAKIAotdm9pZCBzcGlfaW5pdF9mKHZvaWQpIAordm9pZCBzcGlfaW5pdF9mKHZvaWQpCiB7CiAJcmVhZF9tbWNyX2J5dGUoU0M1MjBfU1lTSU5GTykgPwotCQlzcGlfZWVwcm9tX3Byb2JlKDEpIDogCisJCXNwaV9lZXByb21fcHJvYmUoMSkgOgogCW13X2VlcHJvbV9wcm9iZSgxKTsKLQkKKwogfQogCi1zc2l6ZV90IHNwaV9yZWFkKHVjaGFyICphZGRyLCBpbnQgYWxlbiwgdWNoYXIgKmJ1ZmZlciwgaW50IGxlbikgCitzc2l6ZV90IHNwaV9yZWFkKHVjaGFyICphZGRyLCBpbnQgYWxlbiwgdWNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgb2Zmc2V0OwogCWludCBpOwotCQorCiAJb2Zmc2V0ID0gMDsKIAlmb3IgKGk9MDtpPGFsZW47aSsrKSB7CiAJCW9mZnNldCA8PD0gODsKIAkJb2Zmc2V0IHw9IGFkZHJbaV07CiAJfQotCQorCiAJcmV0dXJuIAlyZWFkX21tY3JfYnl0ZShTQzUyMF9TWVNJTkZPKSA/Ci0JCXNwaV9lZXByb21fcmVhZCgxLCBvZmZzZXQsIGJ1ZmZlciwgbGVuKSA6IAorCQlzcGlfZWVwcm9tX3JlYWQoMSwgb2Zmc2V0LCBidWZmZXIsIGxlbikgOgogCW13X2VlcHJvbV9yZWFkKDEsIG9mZnNldCwgYnVmZmVyLCBsZW4pOwogfQogCi1zc2l6ZV90IHNwaV93cml0ZSh1Y2hhciAqYWRkciwgaW50IGFsZW4sIHVjaGFyICpidWZmZXIsIGludCBsZW4pIAorc3NpemVfdCBzcGlfd3JpdGUodWNoYXIgKmFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKQogewogCWludCBvZmZzZXQ7CiAJaW50IGk7Ci0JCisKIAlvZmZzZXQgPSAwOwogCWZvciAoaT0wO2k8YWxlbjtpKyspIHsKIAkJb2Zmc2V0IDw8PSA4OwogCQlvZmZzZXQgfD0gYWRkcltpXTsKIAl9Ci0JCisKIAlyZXR1cm4gCXJlYWRfbW1jcl9ieXRlKFNDNTIwX1NZU0lORk8pID8KLQkJc3BpX2VlcHJvbV93cml0ZSgxLCBvZmZzZXQsIGJ1ZmZlciwgbGVuKSA6IAorCQlzcGlfZWVwcm9tX3dyaXRlKDEsIG9mZnNldCwgYnVmZmVyLCBsZW4pIDoKIAltd19lZXByb21fd3JpdGUoMSwgb2Zmc2V0LCBidWZmZXIsIGxlbik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3NjNTIwX3NwdW5rL3NjNTIwX3NwdW5rX2FzbS5TIGIvYm9hcmQvc2M1MjBfc3B1bmsvc2M1MjBfc3B1bmtfYXNtLlMKaW5kZXggZTE5ODEyNS4uOGIzNDEwMyAxMDA2NDQKLS0tIGEvYm9hcmQvc2M1MjBfc3B1bmsvc2M1MjBfc3B1bmtfYXNtLlMKKysrIGIvYm9hcmQvc2M1MjBfc3B1bmsvc2M1MjBfc3B1bmtfYXNtLlMKQEAgLTIzLDcgKzIzLDcgQEAKIAogLyogbm93IHNldHVwIHRoZSBHZW5lcmFsIHB1cnBvc2UgYnVzIHRvIGdpdmUgdXMgYWNjZXNzIHRvIHRoZSBMRURzLgogICogV2UgY2FuIHRoZW4gdXNlIHRoZSBsZWRzIHRvIGRpc3BsYXkgc3RhdHVzIGluZm9ybWF0aW9uLgotICovIAorICovCiAKIHNjNTIwX2NkcF9yZWdpc3RlcnM6CiAvKiBzaXplICAgIG9mZnNldCAgICAgICAgdmFsdWUgKi8KQEAgLTQ0LDEyICs0NCwxMiBAQAogLyogYm9hcmQgZWFybHkgaW50aWFsaXphdGlvbiAqLwogLmdsb2JsIGVhcmx5X2JvYXJkX2luaXQKIGVhcmx5X2JvYXJkX2luaXQ6Ci0gICAgICAgIG1vdmwgICAgJHNjNTIwX2NkcF9yZWdpc3RlcnMsJWVzaQotaW5pdF9sb29wOgkKLSAgICAgICAgbW92bCAgICAkMHhmZmZlZjAwMCwlZWRpICAgICAvKiBNTUNSIGJhc2UgdG8gZWRpICovCQkJCQkKKwltb3ZsICAgICRzYzUyMF9jZHBfcmVnaXN0ZXJzLCVlc2kKK2luaXRfbG9vcDoKKwltb3ZsICAgICQweGZmZmVmMDAwLCVlZGkgICAgIC8qIE1NQ1IgYmFzZSB0byBlZGkgKi8KIAltb3Z3CSglZXNpKSwgJWJ4ICAgICAgICAgIC8qIGxvYWQgc2l6ZSB0byBieCAqLwogCWNtcHcJJDAsICVieCAgICAgICAgICAgICAgLyogaWYgc2l6ZSBpcyAwIHdlJ3JlIGRvbmUgKi8KLQlqZQlkb25lIAorCWplCWRvbmUKIAl4b3JsCSVlZHgsJWVkeAogCW1vdncJMiglZXNpKSwgJWR4ICAgICAgICAvKiBsb2FkIE1NQ1Igb2Zmc2V0IHRvIGR4ICovCiAJYWRkbAklZWR4LCAlZWRpICAgICAgICAgIC8qIGFkZCBvZmZzZXQgdG8gYmFzZSBpbiBlZGkgKi8KQEAgLTYwLDIzICs2MCwyMiBAQAogCWplCXdvcmQgICAgICAgICAgICAgICAgIC8qIHdvcmQgb3A/ICovCiAJbW92bAklZWF4LCAoJWVkaSkgICAgICAgICAvKiBtdXN0IGJlIGxvbmcsIHRoZW4gKi8KIAlqbXAJbmV4dAotYnl0ZTogICBtb3ZiICAgICVhbCwoJWVkaSkgICAgICAgIAorYnl0ZTogICBtb3ZiICAgICVhbCwoJWVkaSkKIAlqbXAJbmV4dAogd29yZDoJbW92dwklYXgsKCVlZGkpCiBuZXh0OglhZGRsCSQ4LCAlZXNpICAgICAgICAgICAgIC8qIGFkdmFuY2UgZXNpICovCiAJam1wCWluaXRfbG9vcAogCiAJLyogbGlnaHQgYWxsIGxlZHMgKi8KLWRvbmU6ICAgbW92bCAgICAkMHhmZmZlZmMzMiwlZWR4IAotCW1vdncgICAgJDAwMDAsKCVlZHgpICAgICAgICAgICAgICAKK2RvbmU6ICAgbW92bCAgICAkMHhmZmZlZmMzMiwlZWR4CisJbW92dyAgICAkMDAwMCwoJWVkeCkKIAogCWptcCAJKiVlYnAJCSAgICAgLyogcmV0dXJuIHRvIGNhbGxlciAqLwogCiAKIC5nbG9ibCBfX3Nob3dfYm9vdF9wcm9ncmVzcwogX19zaG93X2Jvb3RfcHJvZ3Jlc3M6Ci0JbW92bCAgICAkMHhmZmZlZmMzMiwlZWR4IAotCXhvcncgICAgJDB4ZmZmZiwgJWF4IAotCW1vdncgICAgJWF4LCglZWR4KSAgICAgICAgICAgICAgCisJbW92bCAgICAkMHhmZmZlZmMzMiwlZWR4CisJeG9ydyAgICAkMHhmZmZmLCAlYXgKKwltb3Z3ICAgICVheCwoJWVkeCkKIAlqbXAJKiVlYnAKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2M1MjBfc3B1bmsvc2M1MjBfc3B1bmtfYXNtMTYuUyBiL2JvYXJkL3NjNTIwX3NwdW5rL3NjNTIwX3NwdW5rX2FzbTE2LlMKaW5kZXggY2RjYmJiZS4uOGJiMTc2NiAxMDA2NDQKLS0tIGEvYm9hcmQvc2M1MjBfc3B1bmsvc2M1MjBfc3B1bmtfYXNtMTYuUworKysgYi9ib2FyZC9zYzUyMF9zcHVuay9zYzUyMF9zcHVua19hc20xNi5TCkBAIC0zNCwzMiArMzQsMzIgQEAKIGJvYXJkX2luaXQxNjoKIAkvKiBBbGlhcyBNTUNSIHRvIDB4ZGYwMDAgKi8KIAltb3Z3CSQweGZmZmMsICVkeAotCW1vdmwJJDB4ODAwZGYwY2IsICVlYXgJCi0Jb3V0bAklZWF4LCAlZHgJCQotCQorCW1vdmwJJDB4ODAwZGYwY2IsICVlYXgKKwlvdXRsCSVlYXgsICVkeAorCiAJLyogU2V0IGRzIHRvIHBvaW50IHRvIE1NQ1IgYWxpYXMgKi8KLQltb3Z3CSQweGRmMDAsICVheAkJCi0JbW92dwklYXgsICVkcwkJIAotCQkKLQkvKiBNYXAgdGhlIGVudGlyZSBmbGFzaCBhdCAweDM4MDAwMDAwICAKKwltb3Z3CSQweGRmMDAsICVheAorCW1vdncJJWF4LCAlZHMKKworCS8qIE1hcCB0aGUgZW50aXJlIGZsYXNoIGF0IDB4MzgwMDAwMDAKIAkgKiAod2l0aCBCT09UQ1MgYW5kIFBBUjE0LCB1c2UgMHhhYmZmZjgwMCBmb3IgUk9NQ1MxKSAqLwogCW1vdmwgICAgJDB4YzAsICVlZGkKLSAgICAgICAgbW92bAkkMHg4YmZmZjgwMCwgJWVheAotICAgICAgICBtb3ZsCSVlYXgsICglZGkpCQkKKwltb3ZsCSQweDhiZmZmODAwLCAlZWF4CisJbW92bAklZWF4LCAoJWRpKQogCiAJLyogRGlzYWJsZSBTRFJBTSB3cml0ZSBidWZmZXIgKi8KIAltb3Z3ICAgICQweDQwLCVkaQotICAgICAgICB4b3J3ICAgICVheCwlYXgKLSAgICAgICAgbW92YiAgICAlYWwsICglZGkpICAgICAgICAgICAgICAKKwl4b3J3ICAgICVheCwlYXgKKwltb3ZiICAgICVhbCwgKCVkaSkKIAogCS8qIERpc2FiZSBNTUNSIGFsaWFzICovCiAJbW92dwkkMHhmZmZjLCAlZHgKLQltb3ZsCSQweDAwMDAwMGNiLCAlZWF4CQotCW91dGwJJWVheCwgJWR4CQkKLQkKKwltb3ZsCSQweDAwMDAwMGNiLCAlZWF4CisJb3V0bAklZWF4LCAlZHgKKwogCS8qIHRoZSByZXR1cm4gYWRkcmVzcyBpcyBzdG9yZWQgaW4gYnAgKi8KIAlqbXAJKiVicAotCQorCiAKIC5zZWN0aW9uIC5iaW9zLCAiYXgiCiAuY29kZTE2CkBAIC02NywxOCArNjcsMTcgQEAKIHJlYWxtb2RlX3Jlc2V0OgogCS8qIEFsaWFzIE1NQ1IgdG8gMHhkZjAwMCAqLwogCW1vdncJJDB4ZmZmYywgJWR4Ci0JbW92bAkkMHg4MDBkZjBjYiwgJWVheAkKLQlvdXRsCSVlYXgsICVkeAkJCi0JCisJbW92bAkkMHg4MDBkZjBjYiwgJWVheAorCW91dGwJJWVheCwgJWR4CisKIAkvKiBTZXQgZHMgdG8gcG9pbnQgdG8gTU1DUiBhbGlhcyAqLwotCW1vdncJJDB4ZGYwMCwgJWF4CQkKLQltb3Z3CSVheCwgJWRzCQkgCi0JCQorCW1vdncJJDB4ZGYwMCwgJWF4CisJbW92dwklYXgsICVkcworCiAJLyogaXNzdWUgc29mdHdhcmUgcmVzZXQgdGhvcnVnaCBNTUNSICovCiAJbW92bCAgICAkMHhkNzIsICVlZGkKLSAgICAgICAgbW92YgkkMHgwMSwgJWFsCi0gICAgICAgIG1vdmIJJWFsLCAoJWRpKQkJCisJbW92YgkkMHgwMSwgJWFsCisJbW92YgklYWwsICglZGkpCiAKIDE6CWhsdAogCWptcAkxCi0JCmRpZmYgLS1naXQgYS9ib2FyZC9zYzUyMF9zcHVuay91LWJvb3QubGRzIGIvYm9hcmQvc2M1MjBfc3B1bmsvdS1ib290LmxkcwppbmRleCBmYmFiOWI4Li5kYTdlYTE4IDEwMDY0NAotLS0gYS9ib2FyZC9zYzUyMF9zcHVuay91LWJvb3QubGRzCisrKyBiL2JvYXJkL3NjNTIwX3NwdW5rL3UtYm9vdC5sZHMKQEAgLTEsMyArMSw0IEBACisKIC8qCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KQEAgLTI2LDYwICsyNyw2NSBAQAogRU5UUlkoX3N0YXJ0KQogCiBTRUNUSU9OUwotewkKK3sKIAkuID0gMHgzODdjMDAwMDsgICAgICAgICAgICAgICAgICAgICAvKiBXaGVyZSBib290Y29kZSBpbiB0aGUgZmxhc2ggaXMgbWFwcGVkICovCiAJLnRleHQgIDogeyAqKC50ZXh0KTsgfQotCQotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQogCi0gICAgICAgIC4gPSAweDQwMDAwMDsgCSAgICAgICAgICAgICAgICAgICAgLyogUmFtIGRhdGEgc2VnbWVudCB0byB1c2UgKi8KKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisKKwkuID0gMHg0MDAwMDA7IAkgICAgICAgICAgICAgICAgICAgIC8qIFJhbSBkYXRhIHNlZ21lbnQgdG8gdXNlICovCiAJX2kzODZib290X3JvbWRhdGFfZGVzdCA9IEFCU09MVVRFKC4pOwotICAgICAgICAuZGF0YSA6IEFUICggTE9BREFERFIoLnJvZGF0YSkgKyBTSVpFT0YoLnJvZGF0YSkgKSB7ICooLmRhdGEpIH0KLQlfaTM4NmJvb3Rfcm9tZGF0YV9zdGFydCA9IExPQURBRERSKC5kYXRhKTsgCQorCS5kYXRhIDogQVQgKCBMT0FEQUREUigucm9kYXRhKSArIFNJWkVPRigucm9kYXRhKSApIHsgKiguZGF0YSkgfQorCV9pMzg2Ym9vdF9yb21kYXRhX3N0YXJ0ID0gTE9BREFERFIoLmRhdGEpOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmdvdCA6IEFUICggTE9BREFERFIoLmRhdGEpICsgU0laRU9GKC5kYXRhKSApIHsgKiguZ290KSB9Ci0JX2kzODZib290X3JvbWRhdGFfc2l6ZSA9IFNJWkVPRiguZGF0YSkgKyBTSVpFT0YoLmdvdCk7IAkKKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IEFUICggTE9BREFERFIoLmRhdGEpICsgU0laRU9GKC5kYXRhKSApIHsgKiguZ290KSB9CisJX2kzODZib290X3JvbWRhdGFfc2l6ZSA9IFNJWkVPRiguZGF0YSkgKyBTSVpFT0YoLmdvdCk7CiAKIAotICAgICAgICAuID0gQUxJR04oNCk7CisJLiA9IEFMSUdOKDQpOwogCV9pMzg2Ym9vdF9ic3Nfc3RhcnQgPSBBQlNPTFVURSguKTsKLSAgICAgICAgLmJzcyA6IHsgKiguYnNzKSB9CQorCS5ic3MgOiB7ICooLmJzcykgfQogCV9pMzg2Ym9vdF9ic3Nfc2l6ZSA9IFNJWkVPRiguYnNzKTsKLQkKLQkKKworCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKIAkvKiAxNmJpdCByZWFsbW9kZSB0cmFtcG9saW5lIGNvZGUgKi8KIAkucmVhbG1vZGUgMHg3YzAgOiBBVCAoIExPQURBRERSKC5nb3QpICsgU0laRU9GKC5nb3QpICkgeyAqKC5yZWFsbW9kZSkgfQotICAgIAorCiAJX2kzODZib290X3JlYWxtb2RlID0gTE9BREFERFIoLnJlYWxtb2RlKTsKIAlfaTM4NmJvb3RfcmVhbG1vZGVfc2l6ZSA9IFNJWkVPRigucmVhbG1vZGUpOwotCQorCiAJLyogMTZiaXQgQklPUyBlbXVsYXRpb24gY29kZSAoanVzdCBlbm91Z2ggdG8gYm9vdCBMaW51eCkgKi8KIAkuYmlvcyAwIDogQVQgKCBMT0FEQUREUigucmVhbG1vZGUpICsgU0laRU9GKC5yZWFsbW9kZSkgKSB7ICooLmJpb3MpIH0KLSAgICAKKwogCV9pMzg2Ym9vdF9iaW9zID0gTE9BREFERFIoLmJpb3MpOwogCV9pMzg2Ym9vdF9iaW9zX3NpemUgPSBTSVpFT0YoLmJpb3MpOwotCQorCiAKIAkvKiBUaGUgbG9hZCBhZGRyZXNzZXMgYmVsb3cgYXNzdW1lcyB0aGF0IHRoZSBmbGFzaAogCSAqIHdpbGwgYmUgbWFwcGVkIHNvIHRoYXQgMHgzODdmMDAwMCA9PSAweGZmZmYwMDAwCiAJICogYXQgcmVzZXQgdGltZQogCSAqCi0JICogVGhlIGZlMDAgYW5kIGZmMDAgb2Zmc2V0cyBvZiB0aGUgc3RhcnQzMiBhbmQgc3RhcnQxNiAKKwkgKiBUaGUgZmUwMCBhbmQgZmYwMCBvZmZzZXRzIG9mIHRoZSBzdGFydDMyIGFuZCBzdGFydDE2CiAJICogc2VnbWVudHMgYXJlIGFyYml0cmFyeSwgdGhlIGp1c3QgaGF2ZSB0byBiZSBtYXBwZWQKIAkgKiBhdCByZXNldCBhbmQgdGhlIGNvZGUgaGF2ZSB0byBmaXQuCiAJICogVGhlIGZmZjAgb2Zmc2V0IG9mIHJlc2V0IGlzIGltcG9ydGFudCwgaG93ZXZlci4KIAkgKi8KLQkgCi0JIAorCisKIAkuID0gMHhmZmZmZmUwMDsKLQkuc3RhcnQzMiA6IEFUICgweDM4N2ZmZTAwKSB7ICooLnN0YXJ0MzIpOyB9IAotCQorCS5zdGFydDMyIDogQVQgKDB4Mzg3ZmZlMDApIHsgKiguc3RhcnQzMik7IH0KKwogCS4gPSAweGZmMDA7Ci0JLnN0YXJ0MTYgOiBBVCAoMHgzODdmZmYwMCkgeyAqKC5zdGFydDE2KTsgfSAgCi0JCisJLnN0YXJ0MTYgOiBBVCAoMHgzODdmZmYwMCkgeyAqKC5zdGFydDE2KTsgfQorCiAJLiA9IDB4ZmZmMDsKLQkucmVzZXQgOiBBVCAoMHgzODdmZmZmMCkgeyAqKC5yZXNldCk7IH0gIAorCS5yZXNldCA6IEFUICgweDM4N2ZmZmYwKSB7ICooLnJlc2V0KTsgfQogCV9pMzg2Ym9vdF9lbmQgPSAoTE9BREFERFIoLnJlc2V0KSArIFNJWkVPRigucmVzZXQpICk7CiB9CmRpZmYgLS1naXQgYS9ib2FyZC9zaGFubm9uL01ha2VmaWxlIGIvYm9hcmQvc2hhbm5vbi9NYWtlZmlsZQppbmRleCBhYzViZjgxLi44NjA5OGEzIDEwMDY0NAotLS0gYS9ib2FyZC9zaGFubm9uL01ha2VmaWxlCisrKyBiL2JvYXJkL3NoYW5ub24vTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIFNPQkpTCTo9IG1lbXNldHVwLm8KIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2hhbm5vbi9mbGFzaC5jIGIvYm9hcmQvc2hhbm5vbi9mbGFzaC5jCmluZGV4IGMzNDBmZWEuLjc0ZjVmNjkgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NoYW5ub24vZmxhc2guYworKysgYi9ib2FyZC9zaGFubm9uL2ZsYXNoLmMKQEAgLTMyNyw3ICszMjcsNyBAQAogICAgICAqLwogICAgIHJlc3VsdCA9ICphZGRyOwogICAgIGlmICgocmVzdWx0ICYgZGF0YSkgIT0gZGF0YSkKLSAgICAgICAgcmV0dXJuIEVSUl9OT1RfRVJBU0VEOworCXJldHVybiBFUlJfTk9UX0VSQVNFRDsKIAogCiAgICAgLyoKQEAgLTM5Myw3ICszOTMsNyBAQAogICAgICphZGRyID0gQ01EX1JFQURfQVJSQVk7CiAKICAgICBpZiAoY2hpcDEgPT0gRVJSIHx8IGNoaXAyID09IEVSUiB8fCAqYWRkciAhPSBkYXRhKQotICAgICAgICByYyA9IEVSUl9QUk9HX0VSUk9SOworCXJjID0gRVJSX1BST0dfRVJST1I7CiAKICAgICBpZiAoaWZsYWcpCiAgICAgICBlbmFibGVfaW50ZXJydXB0cygpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2hhbm5vbi9tZW1zZXR1cC5TIGIvYm9hcmQvc2hhbm5vbi9tZW1zZXR1cC5TCmluZGV4IDRmMGM0NjQuLmE5YTg3NzcgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NoYW5ub24vbWVtc2V0dXAuUworKysgYi9ib2FyZC9zaGFubm9uL21lbXNldHVwLlMKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiAKLQogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgPHZlcnNpb24uaD4KIApAQCAtOTEsNCArOTAsMyBAQAogCiAJLyogZXZlcnl0aGluZyBpcyBmaW5lIG5vdyAqLwogCW1vdglwYywgbHIKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2hhbm5vbi9zaGFubm9uLmMgYi9ib2FyZC9zaGFubm9uL3NoYW5ub24uYwppbmRleCBhNTU2MjZkLi4xODc2ZTNlIDEwMDY0NAotLS0gYS9ib2FyZC9zaGFubm9uL3NoYW5ub24uYworKysgYi9ib2FyZC9zaGFubm9uL3NoYW5ub24uYwpAQCAtNDAsMjQgKzQwLDI0IEBACiAKICNpZmRlZiBDT05GSUdfSU5GRVJOTwogCXsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB0ZW1wOwotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygvKiBkaXNhYmxlIE1NVSwgZW5hYmxlIGljYWNoZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXJjIHAxNSwgMCwgJTAsIGMxLCBjMFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmljICUwLCAlMCwgIzB4MDAwMDIwMDBcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpYyAlMCwgJTAsICMweDAwMDAwMDBmXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcnIgJTAsICUwLCAjMHgwMDAwMTAwMFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JyICUwLCAlMCwgIzB4MDAwMDAwMDJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1jciBwMTUsIDAsICUwLCBjMSwgYzBcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZmx1c2ggY2FjaGVzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3YgJTAsICMwXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtY3IgcDE1LCAwLCAlMCwgYzcsIGM3LCAwXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtY3IgcDE1LCAwLCAlMCwgYzgsIGM3LCAwXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAodGVtcCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKLSAgICAgICAgLyogc2V0dXAgUENNQ0lBIHRpbWluZyAqLwotICAgICAgICB0ZW1wID0gMHhhMDAwMDAxODsKLSAgICAgICAgKih1bnNpZ25lZCBsb25nICopdGVtcCA9IDB4MDAwNjAwMDY7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCV9fYXNtX18gX192b2xhdGlsZV9fKC8qIGRpc2FibGUgTU1VLCBlbmFibGUgaWNhY2hlICovCisJCQkgICAgICJtcmMgcDE1LCAwLCAlMCwgYzEsIGMwXG4iCisJCQkgICAgICJiaWMgJTAsICUwLCAjMHgwMDAwMjAwMFxuIgorCQkJICAgICAiYmljICUwLCAlMCwgIzB4MDAwMDAwMGZcbiIKKwkJCSAgICAgIm9yciAlMCwgJTAsICMweDAwMDAxMDAwXG4iCisJCQkgICAgICJvcnIgJTAsICUwLCAjMHgwMDAwMDAwMlxuIgorCQkJICAgICAibWNyIHAxNSwgMCwgJTAsIGMxLCBjMFxuIgorCQkJICAgICAvKiBmbHVzaCBjYWNoZXMgKi8KKwkJCSAgICAgIm1vdiAlMCwgIzBcbiIKKwkJCSAgICAgIm1jciBwMTUsIDAsICUwLCBjNywgYzcsIDBcbiIKKwkJCSAgICAgIm1jciBwMTUsIDAsICUwLCBjOCwgYzcsIDBcbiIKKwkJCSAgICAgOiAiPXIiICh0ZW1wKQorCQkJICAgICA6CisJCQkgICAgIDogIm1lbW9yeSIpOworCS8qIHNldHVwIFBDTUNJQSB0aW1pbmcgKi8KKwl0ZW1wID0gMHhhMDAwMDAxODsKKwkqKHVuc2lnbmVkIGxvbmcgKil0ZW1wID0gMHgwMDA2MDAwNjsKIAogCX0KICNlbmRpZiAvKiBDT05GSUdfSU5JVF9DUklUSUNBTCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2hhbm5vbi91LWJvb3QubGRzIGIvYm9hcmQvc2hhbm5vbi91LWJvb3QubGRzCmluZGV4IGY0YjBhZGUuLmQxZmU4YWEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NoYW5ub24vdS1ib290LmxkcworKysgYi9ib2FyZC9zaGFubm9uL3UtYm9vdC5sZHMKQEAgLTI2LDI4ICsyNiwzMyBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSAgICAgICAgLiA9IDB4MDAwMDAwMDA7CisJLiA9IDB4MDAwMDAwMDA7CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAkudGV4dCAgICAgIDoKIAl7CiAJICBjcHUvc2ExMTAwL3N0YXJ0Lm8JKC50ZXh0KQogCSAgKigudGV4dCkKIAl9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZGF0YSA6IHsgKiguZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmdvdCA6IHsgKiguZ290KSB9CisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOwogCiAJYXJtYm9vdF9lbmRfZGF0YSA9IC47CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuYnNzIDogeyAqKC5ic3MpIH0KKwkuID0gQUxJR04oNCk7CisJLmJzcyA6IHsgKiguYnNzKSB9CiAKIAlhcm1ib290X2VuZCA9IC47CisKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL3NpZW1lbnMvQ0NNL01ha2VmaWxlIGIvYm9hcmQvc2llbWVucy9DQ00vTWFrZWZpbGUKaW5kZXggNTQ4NjQ3YS4uZWUyZmM1MyAxMDA2NDQKLS0tIGEvYm9hcmQvc2llbWVucy9DQ00vTWFrZWZpbGUKKysrIGIvYm9hcmQvc2llbWVucy9DQ00vTWFrZWZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIAkgIC4uLy4uL3RxbTh4eC9sb2FkX3Nlcm51bV9ldGhhZGRyLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3NpZW1lbnMvQ0NNL2ZwZ2FfY2NtLmMgYi9ib2FyZC9zaWVtZW5zL0NDTS9mcGdhX2NjbS5jCmluZGV4IDI5MjM4N2IuLjExYjk3YmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NpZW1lbnMvQ0NNL2ZwZ2FfY2NtLmMKKysrIGIvYm9hcmQvc2llbWVucy9DQ00vZnBnYV9jY20uYwpAQCAtMTY3LDQgKzE2NywzIEBACiAgICAgfQogICAgIHJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9zaWVtZW5zL0NDTS91LWJvb3QubGRzIGIvYm9hcmQvc2llbWVucy9DQ00vdS1ib290LmxkcwppbmRleCA0YjAxMjlmLi44NmU1ODdmIDEwMDY0NAotLS0gYS9ib2FyZC9zaWVtZW5zL0NDTS91LWJvb3QubGRzCisrKyBiL2JvYXJkL3NpZW1lbnMvQ0NNL3UtYm9vdC5sZHMKQEAgLTEwOSw2ICsxMDksMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzMSw0ICsxMzYsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9zaWVtZW5zL0NDTS91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvc2llbWVucy9DQ00vdS1ib290Lmxkcy5kZWJ1ZwppbmRleCA4NGM0MjQ4Li40ZTY3NzIxIDEwMDY0NAotLS0gYS9ib2FyZC9zaWVtZW5zL0NDTS91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL3NpZW1lbnMvQ0NNL3UtYm9vdC5sZHMuZGVidWcKQEAgLTEwNiw2ICsxMDYsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyOCw0ICsxMzMsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9zaWVtZW5zL0lBRDIxMC9JQUQyMTAuYyBiL2JvYXJkL3NpZW1lbnMvSUFEMjEwL0lBRDIxMC5jCmluZGV4IDQ4OTcwNDYuLjMwYWRiZmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NpZW1lbnMvSUFEMjEwL0lBRDIxMC5jCisrKyBiL2JvYXJkL3NpZW1lbnMvSUFEMjEwL0lBRDIxMC5jCkBAIC01NywyNyArNTcsMjcgQEAKIAkgKgogCSAqLwogCQkgICAgMHhGRkZBRjgzNCwgMHhGRkU1QjQzNSwgLyogbGFzdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTk9UX1VTRURfLAorCQkJCQkgICAgX05PVF9VU0VEXywKIAkvKgogCSAqIEJ1cnN0IFJlYWQuIChPZmZzZXQgOCBpbiBVUE1BIFJBTSkKIAkgKi8KIAkweEZFMkRCMDA0LCAweEYwQUY3NDA0LCAweEYwQUZGQzAwLCAweEYwQUZGQzAwLAogCTB4RjBBRkZDMDAsIDB4RjBBQUY4MDAsIDB4RjFBNUU0NDcsIC8qIGxhc3QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX05PVF9VU0VEXywKKwkJCQkJICAgIF9OT1RfVVNFRF8sCiAJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAlfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAogCS8qCiAJICogU2luZ2xlIFdyaXRlLiAoT2Zmc2V0IDE4IGluIFVQTUEgUkFNKQogCSAqLwogCTB4RkUyOUIzMDAsIDB4RjFBMjczMDQsIDB4RkZBNUY3NDcsICAvKiBsYXN0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9OT1RfVVNFRF8sCisJCQkJCSAgICBfTk9UX1VTRURfLAogCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCiAJLyoKIAkgKiBCdXJzdCBXcml0ZS4gKE9mZnNldCAyMCBpbiBVUE1BIFJBTSkKIAkgKi8KIAkweDFGMERGQzA0LCAweEVFQUJCQzAwLCAweDEwQTc3QzAwLCAweEYwQUZGQzAwLAogCTB4RjFBQUY4MDQsIDB4RkZBNUY0NDcsIC8qIGxhc3QgKi8KLQkJCSAgICAgICAgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwkJCQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLAogCV9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCiAJX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKIAkvKgpAQCAtOTAsMTggKzkwLDE3IEBACiAJICogTVJTIHNlcXVlbmNlICAoT2Zmc2V0IDM4IGluIFVQTUEgUkFNKQogCSAqLwogCTB4RkZBQUI4MzQsIDB4RkZBNTc0MzQsIDB4RkZBRkZDMDUsIC8qIGxhc3QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX05PVF9VU0VEXywKKwkJCQkJICAgIF9OT1RfVVNFRF8sCiAJLyoKIAkgKiBFeGNlcHRpb24uIChPZmZzZXQgM2MgaW4gVVBNQSBSQU0pCiAJICovCiAJMHhGRkFGRkMwNCwgMHhGRkFGRkMwNSwgLyogbGFzdCAqLwotCQkgICAgICAgICAgICAgICAgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwkJCQlfTk9UX1VTRURfLCBfTk9UX1VTRURfLAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAKLQogbG9uZyBpbnQgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQogewogICAgIHZvbGF0aWxlIGltbWFwX3QgICAgICppbW1hcCAgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2llbWVucy9JQUQyMTAvTWFrZWZpbGUgYi9ib2FyZC9zaWVtZW5zL0lBRDIxMC9NYWtlZmlsZQppbmRleCAwOTgyZTdjLi44N2E2ODkzIDEwMDY0NAotLS0gYS9ib2FyZC9zaWVtZW5zL0lBRDIxMC9NYWtlZmlsZQorKysgYi9ib2FyZC9zaWVtZW5zL0lBRDIxMC9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBhdG0ubwogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvc2llbWVucy9JQUQyMTAvZmxhc2guYyBiL2JvYXJkL3NpZW1lbnMvSUFEMjEwL2ZsYXNoLmMKaW5kZXggMWVkNTI2Mi4uMTEwODU4ZCAxMDA2NDQKLS0tIGEvYm9hcmQvc2llbWVucy9JQUQyMTAvZmxhc2guYworKysgYi9ib2FyZC9zaWVtZW5zL0lBRDIxMC9mbGFzaC5jCkBAIC0xNDAsNyArMTQwLDcgQEAKICAgfQogCiAgIHByaW50ZiAoIiAgU2l6ZTogJWxkIE1CIGluICVkIFNlY3RvcnNcbiIsCi0gICAgICAgICAgaW5mby0+c2l6ZSA+PiAyMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKKwkgIGluZm8tPnNpemUgPj4gMjAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CiAKICAgcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwogICBmb3IgKGk9MDsgaTxpbmZvLT5zZWN0b3JfY291bnQ7ICsraSkgewpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgcHJpbnRmICgiICUwOGxYJXMiLAogCQkJaW5mby0+c3RhcnRbaV0sCiAJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIKLSAgICAgICAgICAgICk7CisJICAgICk7CiAgIH0KICAgcHJpbnRmICgiXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL3NpZW1lbnMvSUFEMjEwL3UtYm9vdC5sZHMgYi9ib2FyZC9zaWVtZW5zL0lBRDIxMC91LWJvb3QubGRzCmluZGV4IDE1MzY2ZDUuLmQyZjI4NDggMTAwNjQ0Ci0tLSBhL2JvYXJkL3NpZW1lbnMvSUFEMjEwL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvc2llbWVucy9JQUQyMTAvdS1ib290LmxkcwpAQCAtMTA3LDYgKzEwNywxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2llbWVucy9TQ00vTWFrZWZpbGUgYi9ib2FyZC9zaWVtZW5zL1NDTS9NYWtlZmlsZQppbmRleCBiN2UyNmZmLi5hZjY0NmU0IDEwMDY0NAotLS0gYS9ib2FyZC9zaWVtZW5zL1NDTS9NYWtlZmlsZQorKysgYi9ib2FyZC9zaWVtZW5zL1NDTS9NYWtlZmlsZQpAQCAtMzAsNyArMzAsNyBAQAogCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9zaWVtZW5zL1NDTS9zY20uYyBiL2JvYXJkL3NpZW1lbnMvU0NNL3NjbS5jCmluZGV4IGFhNjE4MWQuLjk0NjdiMWYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NpZW1lbnMvU0NNL3NjbS5jCisrKyBiL2JvYXJkL3NpZW1lbnMvU0NNL3NjbS5jCkBAIC05NywyMCArOTcsMjAgQEAKIAkvKiBQQjIwICovIHsgICAxLCAgIDEsICAgMSwgICAwLCAgIDAsICAgMCAgIH0sIC8qIFRETV9EMiBMMVJTWU5DICovCiAJLyogUEIxOSAqLyB7ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBVSUQgKi8KIAkvKiBQQjE4ICovIHsgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sCi0gICAgICAgIC8qIFBCMTcgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgUlhfRFYgKi8KLSAgICAgICAgLyogUEIxNiAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSWF9FUiAqLwotICAgICAgICAvKiBQQjE1ICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFRYX0VSICovCi0gICAgICAgIC8qIFBCMTQgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgVFhfRU4gKi8KLSAgICAgICAgLyogUEIxMyAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBDT0wgKi8KLSAgICAgICAgLyogUEIxMiAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBDUlMgKi8KLSAgICAgICAgLyogUEIxMSAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSeERbM10gKi8KLSAgICAgICAgLyogUEIxMCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSeERbMl0gKi8KLSAgICAgICAgLyogUEI5ICAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSeERbMV0gKi8KLSAgICAgICAgLyogUEI4ICAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSeERbMF0gKi8KLSAgICAgICAgLyogUEI3ICAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBUeERbM10gKi8KLSAgICAgICAgLyogUEI2ICAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBUeERbMl0gKi8KLSAgICAgICAgLyogUEI1ICAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBUeERbMV0gKi8KLSAgICAgICAgLyogUEI0ICAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBUeERbMF0gKi8KKwkvKiBQQjE3ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFJYX0RWICovCisJLyogUEIxNiAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSWF9FUiAqLworCS8qIFBCMTUgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgVFhfRVIgKi8KKwkvKiBQQjE0ICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFRYX0VOICovCisJLyogUEIxMyAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBDT0wgKi8KKwkvKiBQQjEyICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIENSUyAqLworCS8qIFBCMTEgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgUnhEWzNdICovCisJLyogUEIxMCAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSeERbMl0gKi8KKwkvKiBQQjkgICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFJ4RFsxXSAqLworCS8qIFBCOCAgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgUnhEWzBdICovCisJLyogUEI3ICAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBUeERbM10gKi8KKwkvKiBQQjYgICovIHsgICAxLCAgIDEsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFR4RFsyXSAqLworCS8qIFBCNSAgKi8geyAgIDEsICAgMSwgICAwLCAgIDEsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgVHhEWzFdICovCisJLyogUEI0ICAqLyB7ICAgMSwgICAxLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBUeERbMF0gKi8KIAkvKiBQQjMgICovIHsgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIHBpbiBkb2Vzbid0IGV4aXN0ICovCiAJLyogUEIyICAqLyB7ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBwaW4gZG9lc24ndCBleGlzdCAqLwogCS8qIFBCMSAgKi8geyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogcGluIGRvZXNuJ3QgZXhpc3QgKi8KQEAgLTEzMyw4ICsxMzMsOCBAQAogCS8qIFBDMjAgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMSBNSUkgUlhfQ0xLICovCiAJLyogUEMxOSAqLyB7ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LAogCS8qIFBDMTggKi8geyAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKLSAgICAgICAgLyogUEMxNyAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBSWF9DTEsgKi8KLSAgICAgICAgLyogUEMxNiAqLyB7ICAgMSwgICAxLCAgIDAsICAgMCwgICAwLCAgIDAgICB9LCAvKiBGQ0MzIE1JSSBUWF9DTEsgKi8KKwkvKiBQQzE3ICovIHsgICAxLCAgIDEsICAgMCwgICAwLCAgIDAsICAgMCAgIH0sIC8qIEZDQzMgTUlJIFJYX0NMSyAqLworCS8qIFBDMTYgKi8geyAgIDEsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwgLyogRkNDMyBNSUkgVFhfQ0xLICovCiAJLyogUEMxNSAqLyB7ICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAgICB9LAogCS8qIFBDMTQgKi8geyAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgICAwICAgfSwKIAkvKiBQQzEzICovIHsgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCAgIH0sIC8qIFJFU19QSFlfTCAqLwpAQCAtMzYwLDcgKzM2MCw3IEBACiAgICAgdWxvbmcgc3RhcnQgPSAgbWVtY3RsLT5tZW1jXyAjIyBiclggJiAweEZGRkY4MDAwOwlcCiAgICAgdWxvbmcgc2l6ZW0gPSB+bWVtY3RsLT5tZW1jXyAjIyBvclggfCAweDAwMDA3RkZGOwlcCiAgICAgcHJpbnRmICgiXG4iCQkJCQlcCi0gICAgCSAgICAjYnJYICIgMHglMDh4ICAiICNvclggIiAweCUwOHggIgkJXAorCSAgICAjYnJYICIgMHglMDh4ICAiICNvclggIiAweCUwOHggIgkJXAogCSAgICAiPT0+IDB4JTA4bHggLi4uIDB4JTA4bHggPSAlbGQgTUJcbiIsCVwKIAltZW1jdGwtPm1lbWNfICMjIGJyWCwgbWVtY3RsLT5tZW1jXyAjIyBvclgsCVwKIAlzdGFydCwgc3RhcnQrc2l6ZW0sIChzaXplbSsxKT4+MjApOwkJXApkaWZmIC0tZ2l0IGEvYm9hcmQvc2llbWVucy9TQ00vdS1ib290LmxkcyBiL2JvYXJkL3NpZW1lbnMvU0NNL3UtYm9vdC5sZHMKaW5kZXggOWQ1NmYxMy4uY2U2YzQ1NCAxMDA2NDQKLS0tIGEvYm9hcmQvc2llbWVucy9TQ00vdS1ib290LmxkcworKysgYi9ib2FyZC9zaWVtZW5zL1NDTS91LWJvb3QubGRzCkBAIC05NCw2ICs5NCwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTE2LDQgKzEyMSwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3NpZW1lbnMvY29tbW9uL2ZwZ2EuYyBiL2JvYXJkL3NpZW1lbnMvY29tbW9uL2ZwZ2EuYwppbmRleCBhMTdkZTVhLi43ZWRlYjBhIDEwMDY0NAotLS0gYS9ib2FyZC9zaWVtZW5zL2NvbW1vbi9mcGdhLmMKKysrIGIvYm9hcmQvc2llbWVucy9jb21tb24vZnBnYS5jCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KLSNpbmNsdWRlIDxjbWRfYnNwLmg+CiAKICNpbmNsdWRlICJmcGdhLmgiCiAKQEAgLTE0Niw3ICsxNDQsNyBAQAogCiAgICAgaWYgKGhkci5paF9tYWdpYyAhPSBJSF9NQUdJQykgewogCXN0cmNweSAobXNnLCAiQmFkIEltYWdlIE1hZ2ljIE51bWJlciIpOwotICAgICAgICBnb3RvIGZhaWx1cmU7CisJZ290byBmYWlsdXJlOwogICAgIH0KIAogICAgIGxlbiAgPSBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpOwpAQCAtMjkzLDYgKzI5MSwxNCBAQAogICAgIHJldHVybiAxOwogfQogCitjbWRfdGJsX3QgVV9CT09UX0NNRChmcGdhKSA9IE1LX0NNRF9FTlRSWSgKKwkiZnBnYSIsCTQsCTEsCWRvX2ZwZ2EsCisJImZwZ2EgICAgLSBhY2Nlc3MgRlBHQShzKVxuIiwKKwkiZnBnYSBzdGF0dXMgW25hbWVdIC0gcHJpbnQgRlBHQSBzdGF0dXNcbiIKKwkiZnBnYSByZXNldCAgW25hbWVdIC0gcmVzZXQgRlBHQVxuIgorCSJmcGdhIGxvYWQgW25hbWVdIGFkZHIgLSBsb2FkIEZQR0EgY29uZmlndXJhdGlvbiBkYXRhXG4iCispOworCiAjZW5kaWYJLyogQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9CU1AgKi8KIAogLyogLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvc2llbWVucy9wY3VfZS9NYWtlZmlsZSBiL2JvYXJkL3NpZW1lbnMvcGN1X2UvTWFrZWZpbGUKaW5kZXggMzViODQyOC4uN2EyMDE0ZCAxMDA2NDQKLS0tIGEvYm9hcmQvc2llbWVucy9wY3VfZS9NYWtlZmlsZQorKysgYi9ib2FyZC9zaWVtZW5zL3BjdV9lL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9zaWVtZW5zL3BjdV9lL3BjdV9lLmMgYi9ib2FyZC9zaWVtZW5zL3BjdV9lL3BjdV9lLmMKaW5kZXggNmMwYjVlYi4uYThkNzNjYyAxMDA2NDQKLS0tIGEvYm9hcmQvc2llbWVucy9wY3VfZS9wY3VfZS5jCisrKyBiL2JvYXJkL3NpZW1lbnMvcGN1X2UvcGN1X2UuYwpAQCAtNTMsOSArNTMsOSBAQAogCS8qCiAJICogU0RSQU0gSW5pdGlhbGl6YXRpb24gKG9mZnNldCA1IGluIFVQTSBSQU0pCiAJICoKLSAgICAgICAgICogVGhpcyBpcyBubyBVUE0gZW50cnkgcG9pbnQuIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiB1c2VzCi0gICAgICAgICAqIHRoZSByZW1haW5pbmcgc3BhY2UgdG8gZXN0YWJsaXNoIGFuIGluaXRpYWxpemF0aW9uCi0gICAgICAgICAqIHNlcXVlbmNlLCB3aGljaCBpcyBleGVjdXRlZCBieSBhIFJVTiBjb21tYW5kLgorCSAqIFRoaXMgaXMgbm8gVVBNIGVudHJ5IHBvaW50LiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gdXNlcworCSAqIHRoZSByZW1haW5pbmcgc3BhY2UgdG8gZXN0YWJsaXNoIGFuIGluaXRpYWxpemF0aW9uCisJICogc2VxdWVuY2UsIHdoaWNoIGlzIGV4ZWN1dGVkIGJ5IGEgUlVOIGNvbW1hbmQuCiAJICoKIAkgKi8KIAkJICAgIDB4MWZmZGRjMzUsIDB4ZWZjZWFjMzQsIDB4MWYzZDVjMzUsIC8qIGxhc3QgKi8KQEAgLTQzMyw2ICs0MzMsMTIgQEAKIAlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwogCXJldHVybiAxOwogfQorY21kX3RibF90IFVfQk9PVF9DTUQocHVtYSkgPSBNS19DTURfRU5UUlkoCisJInB1bWEiLAk0LAkxLAlkb19wdW1hLAorCSJwdW1hICAgIC0gYWNjZXNzIFBVTUEgRlBHQVxuIiwKKwkic3RhdHVzIC0gcHJpbnQgUFVNQSBzdGF0dXNcbiIKKwkicHVtYSBsb2FkIGFkZHIgbGVuIC0gbG9hZCBQVU1BIGNvbmZpZ3VyYXRpb24gZGF0YVxuIgorKTsKIAogI2VuZGlmCS8qIENGR19DTURfQlNQICovCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3NpZW1lbnMvcGN1X2UvdS1ib290LmxkcyBiL2JvYXJkL3NpZW1lbnMvcGN1X2UvdS1ib290LmxkcwppbmRleCAzNzY0ODc4Li5mZmZhNzllIDEwMDY0NAotLS0gYS9ib2FyZC9zaWVtZW5zL3BjdV9lL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvc2llbWVucy9wY3VfZS91LWJvb3QubGRzCkBAIC05OCw2ICs5OCwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTIwLDQgKzEyNSwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3NpZW1lbnMvcGN1X2UvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL3NpZW1lbnMvcGN1X2UvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCA5MTgzMDE2Li4xNTMyODZiIDEwMDY0NAotLS0gYS9ib2FyZC9zaWVtZW5zL3BjdV9lL3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvc2llbWVucy9wY3VfZS91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDcsNiArMTA3LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjksNCArMTM0LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2l4bmV0L01ha2VmaWxlIGIvYm9hcmQvc2l4bmV0L01ha2VmaWxlCmluZGV4IGVmMTczZDAuLjEzY2U5ZmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NpeG5ldC9NYWtlZmlsZQorKysgYi9ib2FyZC9zaXhuZXQvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3NpeG5ldC9mbGFzaC5jIGIvYm9hcmQvc2l4bmV0L2ZsYXNoLmMKaW5kZXggM2JmMmZmOC4uMjI1NTEzYSAxMDA2NDQKLS0tIGEvYm9hcmQvc2l4bmV0L2ZsYXNoLmMKKysrIGIvYm9hcmQvc2l4bmV0L2ZsYXNoLmMKQEAgLTE5OSwzMiArMTk5LDMyIEBACiAJY2FzZSBGTEFTSF9BTTY0MFU6CiAJCWZtdCA9ICIyOUxWNjQxRCAoNjQgTWJpdCwgdW5pZm9ybSBzZWN0b3JzKVxuIjsKIAkJYnJlYWs7Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGODAwQzNCOgotICAgICAgICBjYXNlIEZMQVNIXzI4RjgwMEMzVDoKKwljYXNlIEZMQVNIXzI4RjgwMEMzQjoKKwljYXNlIEZMQVNIXzI4RjgwMEMzVDoKIAkJZm10ID0gIjI4RjgwMEMzJXMgKDggTWJpdCwgJXMpXG4iOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0lOVEVMODAwQjoKIAljYXNlIEZMQVNIX0lOVEVMODAwVDoKIAkJZm10ID0gIjI4RjgwMEIzJXMgKDggTWJpdCwgJXMpXG4iOwogCQlicmVhazsKLSAgICAgICAgY2FzZSBGTEFTSF8yOEYxNjBDM0I6Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGMTYwQzNUOgorCWNhc2UgRkxBU0hfMjhGMTYwQzNCOgorCWNhc2UgRkxBU0hfMjhGMTYwQzNUOgogCQlmbXQgPSAiMjhGMTYwQzMlcyAoMTYgTWJpdCwgJXMpXG4iOwogCQlicmVhazsKIAljYXNlIEZMQVNIX0lOVEVMMTYwQjoKIAljYXNlIEZMQVNIX0lOVEVMMTYwVDoKIAkJZm10ID0gIjI4RjE2MEIzJXMgKDE2IE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGMzIwQzNCOgotICAgICAgICBjYXNlIEZMQVNIXzI4RjMyMEMzVDoKKwljYXNlIEZMQVNIXzI4RjMyMEMzQjoKKwljYXNlIEZMQVNIXzI4RjMyMEMzVDoKIAkJZm10ID0gIjI4RjMyMEMzJXMgKDMyIE1iaXQsICVzKVxuIjsKIAkJYnJlYWs7CiAJY2FzZSBGTEFTSF9JTlRFTDMyMEI6CiAJY2FzZSBGTEFTSF9JTlRFTDMyMFQ6CiAJCWZtdCA9ICIyOEYzMjBCMyVzICgzMiBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwotICAgICAgICBjYXNlIEZMQVNIXzI4RjY0MEMzQjoKLSAgICAgICAgY2FzZSBGTEFTSF8yOEY2NDBDM1Q6CisJY2FzZSBGTEFTSF8yOEY2NDBDM0I6CisJY2FzZSBGTEFTSF8yOEY2NDBDM1Q6CiAJCWZtdCA9ICIyOEY2NDBDMyVzICg2NCBNYml0LCAlcylcbiI7CiAJCWJyZWFrOwogCWNhc2UgRkxBU0hfSU5URUw2NDBCOgpAQCAtNTQ1LDE1ICs1NDUsMTUgQEAKIAkgbGVmdCA+IDAgJiYgcmVzID09IDA7CiAJIGFkZHIgKz0gc2l6ZW9mKGRhdGEpLCBsZWZ0IC09IHNpemVvZihkYXRhKSAtIGJ5dGVzKSB7CiAKLSAgICAgICAgYnl0ZXMgPSBhZGRyICYgKHNpemVvZihkYXRhKSAtIDEpOwotICAgICAgICBhZGRyICY9IH4oc2l6ZW9mKGRhdGEpIC0gMSk7CisJYnl0ZXMgPSBhZGRyICYgKHNpemVvZihkYXRhKSAtIDEpOworCWFkZHIgJj0gfihzaXplb2YoZGF0YSkgLSAxKTsKIAogCS8qIGNvbWJpbmUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkYXRhIHNvIGNhbiBwcm9ncmFtCiAJICogYW4gZW50aXJlIHdvcmQgb2YgMTYgb3IgMzIgYml0cwogCSAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRhdGEpOyBpKyspIHsKLSAgICAgICAgICAgIGRhdGEgPDw9IDg7Ci0gICAgICAgICAgICBpZiAoaSA8IGJ5dGVzIHx8IGkgLSBieXRlcyA+PSBsZWZ0ICkKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRhdGEpOyBpKyspIHsKKwkgICAgZGF0YSA8PD0gODsKKwkgICAgaWYgKGkgPCBieXRlcyB8fCBpIC0gYnl0ZXMgPj0gbGVmdCApCiAJCWRhdGEgKz0gKigodWNoYXIgKilhZGRyICsgaSk7CiAJICAgIGVsc2UKIAkJZGF0YSArPSAqc3JjKys7CmRpZmYgLS1naXQgYS9ib2FyZC9zaXhuZXQvZnBnYWRhdGEuYyBiL2JvYXJkL3NpeG5ldC9mcGdhZGF0YS5jCmluZGV4IGI3NTZhNjUuLjJkM2E3YjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NpeG5ldC9mcGdhZGF0YS5jCisrKyBiL2JvYXJkL3NpeG5ldC9mcGdhZGF0YS5jCkBAIC0xLDE3MTkgKzEsMTcxOSBAQAotICAgICAgICAweGZmLCAweDg3LCAweGZmLCAweDg4LCAweDdmLCAweGZmLCAweGY5LCAweGZmLAotICAgICAgICAweGZmLCAweGY1LCAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweDhmLCAweGY5LAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGYxLCAweGNmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweDdmLCAweDdiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDc3LCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDg2LCAweGY2LCAweGYwLCAweGZmLAotICAgICAgICAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweDBmLCAweDdmLAotICAgICAgICAweGMxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGY2LCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDhmLCAweDdmLCAweGYwLCAweGZmLCAweDBmLCAweDdmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweGY4LCAweGY3LCAweDhmLCAweGNmLCAweGYwLCAweGY2LCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGZiLCAweDdmLCAweDJmLCAweDFmLCAweDcxLAotICAgICAgICAweGY1LCAweGZmLCAweGZmLCAweGVmLCAweDdmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGY3LCAweGY2LCAweGZlLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweDdmLCAweDc3LCAweGY3LCAweGZmLCAweGZiLAotICAgICAgICAweDBmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweGZmLCAweDhmLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweGZhLCAweGNlLCAweGZmLCAweGZkLCAweGZmLCAweGZmLAotICAgICAgICAweDlmLCAweGZmLCAweDhlLCAweGZmLCAweGYwLCAweGJmLCAweDdmLCAweGY1LAotICAgICAgICAweGZmLCAweGVmLCAweDlmLCAweGZkLCAweDgxLAotICAgICAgICAweGZmLCAweGY5LCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweDlmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAotICAgICAgICAweGZmLCAweDc3LCAweGZhLCAweGI2LCAweGZmLCAweDc4LCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZkLCAweDBmLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGY2LCAweGY3LCAweGY2LCAweDdmLCAweGJmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGJmLCAweGYyLCAweDdmLCAweGVmLCAweGZmLAotICAgICAgICAweGZlLCAweGZiLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAotICAgICAgICAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGY3LCAweGNmLCAweDhmLCAweGZmLCAweGYwLAotICAgICAgICAweGVmLCAweGY5LCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweDlmLCAweDBmLAotICAgICAgICAweDY1LCAweGUxLCAweGZiLCAweDdiLCAweGYzLAotICAgICAgICAweGZmLCAweGY3LCAweGY2LCAweGZlLCAweGZmLCAweDhmLCAweGY2LCAweGU4LAotICAgICAgICAweGY2LCAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGY5LCAweGZmLCAweGZmLAotICAgICAgICAweDZmLCAweDYxLCAweGYxLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweGRlLCAweDhmLCAweDhmLCAweGYwLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweGJmLCAweGZmLCAweGQ0LCAweDhmLCAweDBmLCAweDcxLCAweGMxLAotICAgICAgICAweDZmLCAweGQxLCAweGViLCAweDVmLCAweGZkLAotICAgICAgICAweGZmLCAweDlmLCAweGZmLCAweGZiLCAweGZmLCAweDhmLCAweDlmLCAweGY3LAotICAgICAgICAweDlmLCAweGZmLCAweGY0LCAweGI3LCAweGZkLCAweGZmLCAweGZlLCAweDhmLAotICAgICAgICAweGJmLCAweDcxLCAweDFmLCAweGZmLCAweDdmLAotICAgICAgICAweGZmLCAweGZkLCAweDg3LCAweDg3LCAweGYwLCAweDcwLCAweDFmLCAweGY3LAotICAgICAgICAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDBmLCAweDcxLCAweDgxLAotICAgICAgICAweGJmLCAweDNlLCAweDdmLCAweDdmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweDdmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweDA3LCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweGZmLCAweGZmLCAweGY3LCAweDhkLCAweDdmLCAweGYxLCAweGZmLAotICAgICAgICAweGZmLCAweDlmLCAweDZmLCAweGYxLCAweGZmLAotICAgICAgICAweGJmLCAweDcxLCAweDg3LCAweGZlLCAweGYwLCAweDhmLCAweDhmLCAweGYwLAotICAgICAgICAweGZiLCAweGNiLCAweGZmLCAweGYwLCAweDhmLCAweDdmLCAweGYxLCAweDhmLAotICAgICAgICAweDFlLCAweGUxLCAweDdlLCAweDkxLCAweDdmLAotICAgICAgICAweGJmLCAweDFhLCAweGZmLCAweDcxLCAweGZmLCAweDlmLCAweDhmLCAweGY2LAotICAgICAgICAweGY4LCAweGRmLCAweGY3LCAweGY0LCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweDFmLCAweGYwLCAweDdmLCAweDk3LCAweGZmLAotICAgICAgICAweGJmLCAweDk3LCAweGZmLCAweGZiLCAweGJmLCAweGRmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGFmLCAweGRmLAotICAgICAgICAweGY5LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGRmLCAweGZmLCAweGYxLCAweGZmLAotICAgICAgICAweGZmLCAweDlmLCAweGZjLCAweGZiLCAweGZmLCAweGYwLCAweGZlLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDlkLCAweGZmLCAweGY0LCAweGNmLCAweGZmLCAweDdmLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGNmLAotICAgICAgICAweGZmLCAweDk3LCAweGZmLCAweGZhLCAweGZmLCAweDhmLCAweGY4LCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZkLCAweGZmLCAweDBmLAotICAgICAgICAweDdmLCAweGUxLCAweGZmLCAweGYxLCAweGZmLAotICAgICAgICAweGZmLCAweDgzLCAweDdmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDZmLCAweDdmLCAweDc3LCAweDdkLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDZmLCAweGYxLAotICAgICAgICAweGZmLCAweGQ3LCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweDlmLCAweGZkLAotICAgICAgICAweDc4LCAweGVmLCAweGZmLCAweGJmLCAweGZmLCAweGY1LCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDBmLCAweDc5LCAweGQxLCAweGZmLAotICAgICAgICAweGZmLCAweGQyLCAweGZmLCAweDcyLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZlLCAweDcwLCAweDlkLCAweGZmLCAweGY0LCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweDdmLAotICAgICAgICAweGZmLCAweDA3LCAweGZmLCAweDc4LCAweGZmLCAweDlmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweDc3LCAweDdmLCAweDhmLCAweDdmLCAweGYwLCAweGZmLCAweDhmLAotICAgICAgICAweDdmLCAweGUxLCAweDBmLCAweDcxLCAweGYxLAotICAgICAgICAweGZmLCAweGZlLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZkLCAweGZmLCAweGJhLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweDdmLCAweGExLCAweDdmLAotICAgICAgICAweGZmLCAweGJkLCAweDdmLCAweGY3LCAweGY5LCAweGZkLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGJmLCAweGI3LCAweDhmLCAweGFmLCAweGRmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDVmLCAweGViLAotICAgICAgICAweGJmLCAweGZkLCAweGY4LCAweGZmLCAweGZmLCAweGZiLCAweGZmLCAweGZiLAotICAgICAgICAweGZmLCAweGY3LCAweGNmLCAweGZiLCAweGYwLCAweGZmLCAweGZmLCAweGRmLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweDdmLCAweGFiLAotICAgICAgICAweGZmLCAweGZkLCAweGZhLCAweGJmLCAweDhmLCAweGJmLCAweGNhLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGRmLCAweDZmLCAweGQ0LCAweGY2LCAweDBmLCAweDNmLAotICAgICAgICAweDExLCAweGY5LCAweGZmLCAweDdmLCAweDhiLAotICAgICAgICAweGJmLCAweGZmLCAweDhmLCAweGZmLCAweGMwLCAweGZiLCAweGY1LCAweGVmLAotICAgICAgICAweGY3LCAweDdmLCAweGZmLCAweGZmLCAweGZiLCAweDdmLCAweGZmLCAweDdmLAotICAgICAgICAweGZmLCAweDZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDg3LCAweGJiLCAweGY4LCAweGZiLCAweGNmLCAweGZlLCAweGZlLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGZiLCAweDdmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGUxLCAweDdmLCAweDdiLCAweGZmLAotICAgICAgICAweGJmLCAweDgwLCAweDg5LCAweDg4LCAweGIwLCAweGY1LCAweGYwLCAweGZmLAotICAgICAgICAweGY3LCAweGRmLCAweGZlLCAweDdjLCAweDhmLCAweDBmLCAweDcxLCAweGUxLAotICAgICAgICAweGZmLCAweGYxLCAweGU1LCAweDBlLCAweDJiLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGNmLCAweGY1LCAweDlmLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweDhmLCAweDdmLCAweDcxLCAweDhmLAotICAgICAgICAweGZmLCAweDkxLCAweDdmLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweDdmLCAweGNmLCAweDhhLCAweGZmLCAweGYwLCAweGZmLAotICAgICAgICAweDU3LCAweGZlLCAweGZiLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweDdlLAotICAgICAgICAweGZmLCAweGZmLCAweDlhLCAweGZmLCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweGNmLCAweGI3LCAweGNlLCAweGZmLCAweGY0LCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGY3LCAweGZiLCAweGZmLCAweGZlLCAweGZmLCAweDdmLAotICAgICAgICAweGZmLCAweGZkLCAweGZlLCAweDc1LCAweGZkLAotICAgICAgICAweGZmLCAweGVmLCAweGNmLCAweGZmLCAweGY1LCAweGZmLCAweGY1LCAweGZmLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweDdmLCAweGZmLAotICAgICAgICAweGNmLCAweDdmLCAweDMxLCAweDdmLCAweGZmLAotICAgICAgICAweDNmLCAweDc4LCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDBmLCAweDBmLCAweGYxLCAweGYxLCAweGRmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDlmLCAweGZmLCAweDg0LCAweDBlLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGY3LCAweDdmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweDhmLCAweDgwLCAweGYxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweDlmLCAweDhlLCAweDA1LCAweDcxLAotICAgICAgICAweGJmLCAweGY4LCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDhmLCAweGYxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDhmLCAweGYxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGY3LCAweGZmLCAweGZmLCAweDhmLCAweGZmLAotICAgICAgICAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGY4LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDlmLCAweGZmLCAweDhmLCAweDdlLAotICAgICAgICAweGJmLCAweGZmLCAweDc4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweDg3LCAweDdmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGYwLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhlLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweDNmLCAweGZmLCAweGY4LCAweGZmLCAweDhmLCAweDdmLCAweGYwLCAweDhmLAotICAgICAgICAweGZmLCAweGYwLCAweDBmLCAweGZmLCAweDcwLCAweGZmLCAweDhmLCAweDdlLAotICAgICAgICAweGYxLCAweGRmLCAweGZmLCAweGZiLCAweDhlLAotICAgICAgICAweGZmLCAweDgwLCAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGFmLCAweDdmLCAweDg0LCAweGZmLCAweGYxLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDgwLCAweGZmLCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDhmLCAweGZmLCAweDgxLCAweDdmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweGYwLCAweGRmLCAweGRmLCAweGZmLCAweGRmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweDBmLCAweGZmLCAweDgwLAotICAgICAgICAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGRmLCAweDhlLAotICAgICAgICAweDBmLCAweDAxLCAweDcxLCAweGYxLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGRmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGJmLCAweDg3LCAweGY4LCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweDhmLCAweDhmLCAweGQwLCAweGYwLCAweGRmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGRmLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGFmLCAweGZlLCAweGY1LCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDBmLCAweDhmLCAweGYwLCAweDgwLCAweGZmLCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGFmLCAweDcxLCAweGE3LAotICAgICAgICAweDZmLCAweGY1LCAweGZlLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDc3LCAweDc5LCAweDhmLCAweGZmLCAweGYwLCAweDhmLCAweGZmLAotICAgICAgICAweDAwLCAweGZmLCAweGQwLCAweDRmLCAweDNkLCAweGYwLCAweGY3LCAweGZkLAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDdmLCAweGQxLAotICAgICAgICAweGZmLCAweGNkLCAweGZmLCAweGZmLCAweDhmLCAweDBmLCAweDcwLCAweGYwLAotICAgICAgICAweGZmLCAweDdmLCAweDdmLCAweGZmLCAweGZmLCAweGRiLCAweDhkLCAweDRiLAotICAgICAgICAweDczLCAweGY5LCAweGZmLCAweGRmLCAweGZmLAotICAgICAgICAweDNmLCAweGZjLCAweGZmLCAweDhmLCAweGZmLCAweGYyLCAweDhmLCAweDhmLAotICAgICAgICAweDcwLCAweDdhLCAweDNmLCAweGJjLCAweGY3LCAweGRiLCAweGZmLCAweGY5LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVlLAotICAgICAgICAweGZmLCAweGU4LCAweGY3LCAweDhmLCAweGZkLCAweDgwLCAweGZmLCAweGYwLAotICAgICAgICAweDlmLCAweGE1LCAweDdhLCAweGY0LCAweDZmLCAweDNmLCAweGNmLCAweDA3LAotICAgICAgICAweDZhLCAweGUxLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweDc3LCAweGYxLCAweDhmLCAweDhmLCAweGYwLCAweGYwLAotICAgICAgICAweGJmLCAweGZmLCAweGU3LCAweDdmLCAweDhmLCAweDI0LCAweDAzLCAweDc3LAotICAgICAgICAweGYzLCAweGZmLCAweGZlLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDlmLCAweDc3LCAweDhiLCAweGZmLCAweGYwLCAweGZmLCAweGVmLAotICAgICAgICAweDdkLCAweDdmLCAweGZmLCAweDlmLCAweGViLCAweDNkLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweGZiLCAweGZlLCAweGZmLCAweGRmLAotICAgICAgICAweGZmLCAweGZmLCAweDc3LCAweGZmLCAweDhmLCAweDhmLCAweGYwLCAweGYwLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJiLCAweDVkLAotICAgICAgICAweGY1LCAweGJiLCAweGVmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweDhmLCAweDhmLCAweGYwLCAweGY4LCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweDdmLCAweGZmLCAweGZmLCAweGFmLCAweGJmLCAweDc1LCAweGI3LAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweDg3LCAweDdmLCAweGY4LCAweGZmLCAweGY3LCAweGY3LAotICAgICAgICAweDhmLCAweGZmLCAweGYwLCAweDdmLCAweGY3LCAweGZmLCAweGFkLCAweGZmLAotICAgICAgICAweGY3LCAweGVlLCAweDlmLCAweGZmLCAweGY1LAotICAgICAgICAweGZmLCAweGY4LCAweDA3LCAweGZmLCAweDgwLCAweDhmLCAweDgwLCAweDgwLAotICAgICAgICAweGYwLCAweDhmLCAweDdmLCAweDcwLCAweDRmLCAweDBmLCAweDc5LCAweGYxLAotICAgICAgICAweGZkLCAweGZmLCAweGVmLCAweDhmLCAweDdmLAotICAgICAgICAweGJmLCAweDdmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGQwLCAweGJmLCAweGRiLCAweGU1LAotICAgICAgICAweDNiLCAweGZlLCAweGY3LCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDc3LCAweDgwLCAweGZmLCAweGYwLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGJkLCAweGVmLCAweDA3LCAweDdmLAotICAgICAgICAweGYxLCAweGZlLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweDdmLCAweDdmLCAweGZmLCAweGY3LCAweGY3LCAweGZmLCAweGY3LCAweDhmLAotICAgICAgICAweGJmLCAweDcwLCAweGY1LCAweDdmLCAweGZmLCAweGVmLCAweDNmLCAweDdkLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZlLCAweGZlLAotICAgICAgICAweGZmLCAweDk3LCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdlLCAweGZmLCAweGZmLCAweDlmLCAweGRmLCAweGY3LCAweDNiLCAweGZmLAotICAgICAgICAweGY3LCAweGZmLCAweDdmLCAweGZlLCAweGZmLAotICAgICAgICAweDNmLCAweDc4LCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDFmLCAweDFmLCAweGYxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDgwLCAweDBlLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweDlmLCAweDgwLCAweGUxLCAweGYxLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZlLCAweDlmLCAweDBlLCAweDAxLCAweDcxLAotICAgICAgICAweGJmLCAweGY4LCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDhmLCAweGYxLCAweGYxLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweGZlLCAweGVmLCAweGZmLCAweDhmLCAweDBmLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDlmLCAweDhmLCAweGYxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGVmLCAweGZlLCAweGVmLAotICAgICAgICAweGVmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweGZmLAotICAgICAgICAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweGUwLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdlLAotICAgICAgICAweGJmLCAweGZmLCAweDc4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGVmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGVlLCAweGVmLCAweDlmLAotICAgICAgICAweGZmLCAweDA3LCAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGYwLCAweDhmLCAweGZmLCAweGUwLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweDhlLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGVmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAotICAgICAgICAweDNmLCAweGZmLCAweGY4LCAweGZmLCAweDhmLCAweDdmLCAweGYwLCAweGRmLAotICAgICAgICAweGZmLCAweGYwLCAweDBmLCAweGZmLCAweDcwLCAweGZmLCAweDhmLCAweDdlLAotICAgICAgICAweGUxLCAweGRmLCAweGZmLCAweGY3LCAweDhlLAotICAgICAgICAweGZmLCAweDgwLCAweDdmLCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDdmLCAweDgwLCAweGZmLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweGZlLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDgwLCAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDhmLCAweGZmLCAweDgxLCAweDdmLCAweGYwLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDFmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDdlLCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweDBmLCAweDhmLCAweDgwLAotICAgICAgICAweGY3LCAweGUwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDllLAotICAgICAgICAweDZmLCAweDkxLCAweDcxLCAweGYxLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDg3LCAweGY4LCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDhmLCAweGYwLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweDhmLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZlLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGQ3LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweDhmLCAweGZmLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZmLCAweGZlLCAweGY5LCAweGRmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGJmLCAweGY3LCAweDlmLCAweGY4LCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweDc3LCAweGZmLCAweDBlLCAweDFmLCAweDYxLCAweDgxLAotICAgICAgICAweDdmLCAweGYxLCAweGZlLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGI5LCAweGNmLCAweGZmLCAweGZmLCAweDBmLCAweGZmLAotICAgICAgICAweDAwLCAweGZmLCAweGQwLCAweDdmLCAweDc1LCAweDhiLCAweDdmLCAweGYxLAotICAgICAgICAweDhmLCAweDdmLCAweDgwLCAweDdlLCAweDkxLAotICAgICAgICAweGZmLCAweGJmLCAweGRmLCAweGZmLCAweGE3LCAweDQ3LCAweDcwLCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAotICAgICAgICAweDYxLCAweGYxLCAweGVmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZlLCAweGVmLCAweDVmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGU3LCAweGI3LCAweGZjLCAweGViLCAweDlmLCAweDdmLCAweGYxLAotICAgICAgICAweDlmLCAweDBmLCAweDcxLCAweGYxLCAweGVlLAotICAgICAgICAweGZmLCAweGYwLCAweGY3LCAweDNmLCAweGVmLCAweDk3LCAweGY4LCAweGU4LAotICAgICAgICAweGZmLCAweDlmLCAweDdmLCAweGYwLCAweDdmLCAweDlmLCAweDZmLCAweDkxLAotICAgICAgICAweDdlLCAweGYxLCAweDlmLCAweDhmLCAweDU3LAotICAgICAgICAweGZmLCAweGZmLCAweDI2LCAweGI5LCAweGI4LCAweGZmLCAweGYwLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweDdmLCAweDZmLCAweGY0LCAweDlmLCAweDFmLAotICAgICAgICAweDcxLCAweGUxLCAweGZlLCAweDdmLCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweDcxLCAweGJiLCAweGU4LCAweGZmLCAweGZmLCAweGY4LAotICAgICAgICAweGJmLCAweGZmLCAweGFmLCAweGZmLCAweGY4LCAweDlkLCAweDZmLCAweGYxLAotICAgICAgICAweGJmLCAweGZmLCAweGI3LCAweGZmLCAweGJkLAotICAgICAgICAweGJmLCAweGZmLCAweGZmLCAweGRmLCAweDk3LCAweGM3LCAweGY3LCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweDkzLCAweGZmLCAweGZmLCAweGVmLCAweGNmLCAweDVmLAotICAgICAgICAweGYxLCAweGY3LCAweGRmLCAweGY1LCAweDlmLAotICAgICAgICAweGZmLCAweGZmLCAweDg3LCAweGJmLCAweGUwLCAweGJmLCAweGY3LCAweGZmLAotICAgICAgICAweGY3LCAweDdmLCAweGZmLCAweGZmLCAweDhmLCAweDVmLCAweDIxLCAweGIxLAotICAgICAgICAweGZmLCAweDZkLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGQ3LCAweGZmLCAweGI4LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweGVmLCAweGYwLCAweDdmLCAweGQ3LCAweDdmLCAweGYxLCAweGZmLAotICAgICAgICAweGVmLCAweGVlLCAweGJmLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGY4LCAweDQ3LCAweDBmLCAweGM3LCAweGYwLCAweDdmLCAweGYwLAotICAgICAgICAweGYwLCAweDkwLCAweDdmLCAweDcwLCAweDhmLCAweDJmLCAweGMxLCAweDBmLAotICAgICAgICAweDExLCAweDFmLCAweGVmLCAweGFmLCAweDdmLAotICAgICAgICAweGJmLCAweDdmLCAweGYwLCAweDlmLCAweGU3LCAweGY3LCAweDM4LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGYwLCAweGFmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweGZlLCAweGZkLCAweGRmLCAweDhmLAotICAgICAgICAweGZmLCAweGZmLCAweGJmLCAweGY3LCAweDhmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGViLCAweGZmLCAweGZmLCAweGZmLCAweDhkLCAweDNmLCAweDgxLCAweDdmLAotICAgICAgICAweGQxLCAweGZlLCAweGRmLCAweGZlLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGRmLCAweGE4LCAweGZmLCAweGYwLCAweGZmLAotICAgICAgICAweGZmLCAweGYwLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGVmLAotICAgICAgICAweGVmLCAweDlmLCAweDdmLCAweDdlLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGE3LCAweDc3LCAweGZmLCAweGZmLAotICAgICAgICAweGVmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGU3LCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweDNmLCAweDc4LCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAotICAgICAgICAweGZmLCAweDBmLCAweDBmLCAweGYxLCAweGUxLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweGVmLCAweGZmLCAweGZmLCAweDhlLCAweDBlLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweDhmLCAweDgwLCAweGYxLCAweGYxLCAweGVmLCAweGFmLCAweGFmLCAweGZmLAotICAgICAgICAweGVlLCAweGRmLCAweDBlLCAweDAxLCAweDcxLAotICAgICAgICAweGJmLCAweGY4LCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGVmLCAweDhmLCAweDlmLCAweGYxLCAweGUxLCAweGZmLCAweGFmLCAweGVmLAotICAgICAgICAweGZlLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDlmLCAweDlmLCAweGYxLCAweGYxLCAweGVmLCAweGZmLCAweGFmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGJmLCAweGVmLCAweGZmLAotICAgICAgICAweGVmLCAweGJmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweGZmLAotICAgICAgICAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGVmLCAweGZlLAotICAgICAgICAweGNmLCAweDNmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAotICAgICAgICAweGZmLCAweDg4LCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGVmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDZlLAotICAgICAgICAweGJmLCAweGZmLCAweDc4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGUwLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGVlLCAweGVmLCAweDlmLAotICAgICAgICAweGZmLCAweDhmLCAweDdmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGYwLCAweDhmLCAweGZmLCAweGEwLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGJmLCAweDhlLCAweDZmLCAweGYxLAotICAgICAgICAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDZmLAotICAgICAgICAweDNmLCAweGZmLCAweGY4LCAweGZmLCAweDhmLCAweDdmLCAweGYwLCAweGNmLAotICAgICAgICAweGZmLCAweGIwLCAweDBmLCAweGFmLCAweDcwLCAweGZmLCAweDhmLCAweDdlLAotICAgICAgICAweGYxLCAweGZmLCAweGZmLCAweGYxLCAweDllLAotICAgICAgICAweGZmLCAweDgwLCAweDdmLCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGVmLCAweDhmLCAweDdmLCAweDkwLCAweGZmLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGFmLCAweGZlLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDgwLCAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweGRmLCAweGZmLCAweDgxLCAweDdmLCAweGYwLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDlmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGJmLCAweDdlLCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweDBmLCAweGFmLCAweDgwLAotICAgICAgICAweGYwLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRlLAotICAgICAgICAweDBmLCAweDkxLCAweDdmLCAweGYxLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYzLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZiLAotICAgICAgICAweGJmLCAweDg3LCAweGY4LCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGRmLCAweDhmLCAweDhmLCAweGYwLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGRmLCAweGJmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZmLCAweGFmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGFmLCAweGZmLAotICAgICAgICAweGYwLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGZmLAotICAgICAgICAweGRmLCAweGZlLCAweGZlLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDBmLCAweDhmLCAweGYwLCAweDhmLCAweGZmLCAweGYwLAotICAgICAgICAweGY5LCAweGZmLCAweGY3LCAweGZmLCAweDBmLCAweDVmLCAweDI5LCAweDg5LAotICAgICAgICAweDc3LCAweGYxLCAweGZhLCAweGZmLCAweGRlLAotICAgICAgICAweGZmLCAweGMzLCAweDNmLCAweDRiLCAweDdmLCAweGU5LCAweDBmLCAweGZmLAotICAgICAgICAweDAwLCAweGZmLCAweDkwLCAweDBmLCAweGQ3LCAweGZmLCAweDdmLCAweGY5LAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDdmLCAweDgxLAotICAgICAgICAweGZmLCAweGZmLCAweGZiLCAweDdkLCAweDgwLCAweDQ2LCAweDc2LCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweDZmLCAweGZmLCAweGZmLCAweGFkLCAweGNmLCAweDNmLAotICAgICAgICAweDcxLCAweGY5LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweGJhLCAweGZmLCAweGM3LCAweGY3LCAweGI5LCAweGNmLCAweGRlLAotICAgICAgICAweDc3LCAweGI3LCAweDc3LCAweGZlLCAweGZmLCAweGJmLCAweDZmLCAweGY5LAotICAgICAgICAweGZmLCAweDdlLCAweDc5LCAweGI5LCAweGZlLAotICAgICAgICAweGZmLCAweGU0LCAweGY3LCAweDhmLCAweGZlLCAweDA3LCAweGZlLCAweGY4LAotICAgICAgICAweGZmLCAweDg5LCAweDdmLCAweGU4LCAweDdmLCAweGQ3LCAweDdmLCAweDk5LAotICAgICAgICAweDc2LCAweGYxLCAweGZmLCAweDBmLCAweDdiLAotICAgICAgICAweGJmLCAweGZmLCAweGI2LCAweGI5LCAweDhmLCAweGRmLCAweGY2LCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDhmLCAweGRkLCAweDg3LCAweDdmLAotICAgICAgICAweDcxLCAweGYxLCAweGZlLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGYxLCAweDhhLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweGNmLCAweGZiLCAweGU4LCAweDlkLCAweDc3LCAweGE5LAotICAgICAgICAweGZmLCAweDc3LCAweGRhLCAweDdmLCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweGY3LCAweGY3LCAweDg2LCAweGU1LCAweGYwLCAweGUwLAotICAgICAgICAweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGVmLCAweDhmLCAweDdmLAotICAgICAgICAweGJkLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGVmLCAweDg2LCAweDhmLCAweGYwLCAweGZmLCAweGY2LCAweDlmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGNmLCAweDFmLCAweDcxLCAweGRkLAotICAgICAgICAweDdmLCAweGUxLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGM3LCAweGY3LCAweGI5LCAweGZmLCAweGZmLCAweGZhLAotICAgICAgICAweDNmLCAweGVmLCAweGYwLCAweGZmLCAweGVmLCAweDdmLCAweGQ1LCAweGZmLAotICAgICAgICAweGZiLCAweGZmLCAweGY3LCAweDZlLCAweGYxLAotICAgICAgICAweGZmLCAweGZjLCAweGM3LCAweGJmLCAweGM4LCAweGMwLCAweDU5LCAweGZmLAotICAgICAgICAweGRmLCAweGZmLCAweDdiLCAweGYwLCAweGE3LCAweDFmLCAweGE5LCAweDc3LAotICAgICAgICAweDc5LCAweDcxLCAweDExLCAweGZmLCAweDc5LAotICAgICAgICAweGJmLCAweGZiLCAweDcwLCAweGJmLCAweGZmLCAweGY5LCAweDM3LCAweGJlLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGY0LCAweDlmLCAweGZmLCAweGZmLAotICAgICAgICAweGQ3LCAweDdmLCAweGZmLCAweGZmLCAweGFmLAotICAgICAgICAweGZmLCAweGZmLCAweDllLCAweGY3LCAweDlmLCAweGZlLCAweGU0LCAweGZmLAotICAgICAgICAweGNmLCAweGNmLCAweGZmLCAweGZmLCAweGRmLCAweDdmLCAweDhkLCAweDdmLAotICAgICAgICAweGY5LCAweGZhLCAweGRmLCAweDlmLCAweGVmLAotICAgICAgICAweDdmLCAweGVmLCAweGZmLCAweGZmLCAweGJlLCAweGZkLCAweGQyLCAweGRmLAotICAgICAgICAweGZmLCAweDdlLCAweGY3LCAweGZmLCAweGZmLCAweGFiLCAweDk3LCAweGVmLAotICAgICAgICAweGYzLCAweGZlLCAweDdmLCAweDcxLCAweGZlLAotICAgICAgICAweGZmLCAweDlmLCAweGZmLCAweGZmLCAweGI2LCAweGZiLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGJmLCAweGZmLCAweGI3LCAweGRiLCAweGZmLAotICAgICAgICAweGJiLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweDY4LCAweGZlLCAweGZkLCAweGZiLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweGYxLCAweDFlLCAweDFiLCAweGYxLCAweGY1LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDlmLCAweGZiLCAweDlhLCAweDM2LAotICAgICAgICAweGZmLCAweGZjLCAweDdkLCAweGZmLCAweDczLCAweGY3LCAweGZmLCAweGFmLAotICAgICAgICAweDlmLCAweDk0LCAweGZkLCAweGY1LCAweGZmLCAweGY3LCAweGZmLCAweGZiLAotICAgICAgICAweGZlLCAweGVmLCAweDNlLCAweDA3LCAweDRkLAotICAgICAgICAweGJmLCAweGU4LCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGY3LCAweGY3LAotICAgICAgICAweGYxLCAweDhmLCAweGFmLCAweGQxLCAweGY3LCAweGY5LCAweGZkLCAweGZmLAotICAgICAgICAweGY4LCAweGRmLCAweGZiLCAweDhmLCAweDJmLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGY3LCAweGY3LCAweGZmLCAweGZmLAotICAgICAgICAweGE3LCAweGFmLCAweGY3LCAweGYzLCAweGRmLCAweGZmLCAweGZkLCAweGZmLAotICAgICAgICAweGZkLCAweGZmLCAweGFlLCAweDBmLCAweDcxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY5LCAweGZmLCAweGZmLCAweGYzLCAweGYzLAotICAgICAgICAweGZmLCAweGYzLCAweGZmLCAweGY3LCAweGZiLCAweGYzLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGViLCAweGZmLCAweGYzLCAweGRiLAotICAgICAgICAweGZmLCAweGViLCAweDdiLCAweGZiLCAweGY3LCAweGZmLCAweDhiLCAweGY3LAotICAgICAgICAweGZjLCAweGY3LCAweGZiLCAweGZmLCAweGZiLCAweGYzLCAweGZmLCAweGZmLAotICAgICAgICAweDhiLCAweDdmLCAweGQ0LCAweGZiLCAweGZmLAotICAgICAgICAweDdmLCAweGVjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGY3LAotICAgICAgICAweGZmLCAweDhlLCAweGZmLCAweGY4LCAweGY3LCAweGZiLCAweGZkLCAweGZmLAotICAgICAgICAweGZkLCAweDlmLCAweGY3LCAweDlmLCAweDdlLAotICAgICAgICAweGJmLCAweGZiLCAweDdjLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZiLAotICAgICAgICAweGZiLCAweGYxLCAweDhmLCAweGYzLCAweGRjLCAweGY3LCAweGZkLCAweGZmLAotICAgICAgICAweGU5LCAweGViLCAweGVmLCAweGMzLCAweGI3LAotICAgICAgICAweGZmLCAweDA3LCAweGZmLCAweGZjLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweDhmLCAweGZmLCAweGY0LCAweDhmLCAweGZiLCAweGZjLCAweGZmLCAweGVmLAotICAgICAgICAweGZmLCAweGY3LCAweDhmLCAweDdmLCAweGQxLAotICAgICAgICAweGZmLCAweGZhLCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGYzLCAweDg5LCAweGVmLCAweGY4LCAweGZmLCAweGY3LCAweGZmLCAweGVmLAotICAgICAgICAweGVmLCAweGY3LCAweGYzLCAweGFiLCAweDdmLAotICAgICAgICAweDNmLCAweGY5LCAweDdlLCAweGY5LCAweDhmLCAweDdmLCAweGYwLCAweGVmLAotICAgICAgICAweGZmLCAweGZjLCAweDFiLCAweGZmLCAweDdjLCAweGZmLCAweDhmLCAweDZlLAotICAgICAgICAweGYxLCAweGY3LCAweDczLCAweGZmLCAweGE2LAotICAgICAgICAweGZmLCAweDgwLCAweDdmLCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGY5LCAweDhmLCAweDdmLCAweDg0LCAweGZmLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZhLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDk2LCAweGZmLCAweGZjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDU3LCAweGFmLCAweGZiLCAweDg1LCAweDdmLCAweGY0LCAweGZmLCAweGZlLAotICAgICAgICAweGVmLCAweGZmLCAweGVmLCAweGJmLCAweDUzLAotICAgICAgICAweGZmLCAweDdkLCAweGZmLCAweGZmLCAweGUzLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDk3LCAweDcxLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGRiLCAweGVmLAotICAgICAgICAweGVmLCAweGU3LCAweDk3LCAweDcyLCAweGZkLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYzLCAweDBmLCAweGUzLCAweDg2LAotICAgICAgICAweGYwLCAweGY0LCAweGZiLCAweGZmLCAweGRmLCAweGZmLCAweGZiLCAweDhlLAotICAgICAgICAweDBiLCAweGE1LCAweDcyLCAweGY5LCAweGZmLAotICAgICAgICAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGYzLCAweGZmLAotICAgICAgICAweGY3LCAweGZmLCAweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGVlLAotICAgICAgICAweGZiLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDgyLCAweGY4LCAweGY4LCAweGY3LCAweDdmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweDg3LCAweDg3LCAweGYwLCAweGYwLCAweGZiLCAweGZmLAotICAgICAgICAweGZiLCAweGY3LCAweGVmLCAweGVmLCAweDg3LAotICAgICAgICAweGZmLCAweGY2LCAweGZmLCAweGZhLCAweGYxLCAweGVmLCAweGYzLCAweGY3LAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLAotICAgICAgICAweGZiLCAweGY3LCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGZiLCAweGYyLCAweGYzLCAweGZmLCAweGYxLCAweGY3LAotICAgICAgICAweGZmLCAweGVmLCAweGY3LCAweGVmLCAweGY3LCAweGY3LCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGU3LAotICAgICAgICAweGZmLCAweGZiLCAweGZiLCAweGZmLCAweGY1LCAweGVmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweDc3LCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGVmLCAweGVmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGVmLCAweGU1LCAweGZmLAotICAgICAgICAweGZlLCAweDYxLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDlmLCAweGVmLCAweGVmLCAweGYzLCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweDBmLCAweDlmLCAweGZhLCAweDg3LCAweGZmLCAweGY2LAotICAgICAgICAweGViLCAweGZmLCAweGZmLCAweGVmLCAweDBmLCAweDZmLCAweGZkLCAweDBkLAotICAgICAgICAweDUzLCAweGYxLCAweGYzLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDFiLCAweDdmLCAweDk2LCAweGZlLCAweGZmLCAweDhmLCAweGZiLAotICAgICAgICAweDAwLCAweGZmLCAweGIwLCAweDE3LCAweDdjLCAweDhmLCAweGZmLCAweGZkLAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDdlLCAweGYxLAotICAgICAgICAweGZmLCAweGZkLCAweGVkLCAweGVlLCAweDllLCAweDBiLCAweDc5LCAweGZmLAotICAgICAgICAweGZiLCAweDc3LCAweDViLCAweGZmLCAweDlmLCAweGZmLCAweDRmLCAweDBmLAotICAgICAgICAweDcxLCAweGYwLCAweGRiLCAweGZmLCAweGY3LAotICAgICAgICAweDdmLCAweGU3LCAweGVmLCAweDE4LCAweGZmLCAweGZmLCAweDlkLCAweDhlLAotICAgICAgICAweDY3LCAweGJmLCAweDRmLCAweGZmLCAweGZmLCAweGFlLCAweGZmLCAweGYxLAotICAgICAgICAweGViLCAweGVmLCAweGZkLCAweGFkLCAweGY2LAotICAgICAgICAweGZmLCAweGZjLCAweGY3LCAweDFmLCAweGZmLCAweDlmLCAweGZiLCAweGZjLAotICAgICAgICAweGZmLCAweDhmLCAweDc3LCAweGVjLCAweDVmLCAweDZmLCAweGRmLCAweDI1LAotICAgICAgICAweDdlLCAweGQ5LCAweGU2LCAweDk3LCAweDNmLAotICAgICAgICAweGZmLCAweGY3LCAweDY3LCAweGVjLCAweDkyLCAweGJlLCAweGYxLCAweGZiLAotICAgICAgICAweGZmLCAweDdmLCAweGRmLCAweDdiLCAweDVlLCAweDdkLCAweGU3LCAweDVmLAotICAgICAgICAweGYxLCAweGYxLCAweGZiLCAweGZmLCAweGY3LAotICAgICAgICAweGJmLCAweGY3LCAweDcxLCAweDlhLCAweGZkLCAweGZmLCAweGY3LCAweGZiLAotICAgICAgICAweDVmLCAweDdmLCAweGFmLCAweGRmLCAweGY5LCAweGU3LCAweDc3LCAweGRkLAotICAgICAgICAweDZmLCAweGY3LCAweGJiLCAweGZmLCAweDhiLAotICAgICAgICAweGJmLCAweGZmLCAweDc3LCAweGZmLCAweDkzLCAweGZlLCAweGY4LCAweGZlLAotICAgICAgICAweGJmLCAweGZlLCAweGJmLCAweGZmLCAweGZmLCAweGJmLCAweGFiLCAweDdmLAotICAgICAgICAweGZkLCAweGZmLCAweGNmLCAweDY3LCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweDA3LCAweDlmLCAweGU0LCAweGRiLCAweGZmLCAweGYxLAotICAgICAgICAweGY3LCAweDdmLCAweGZmLCAweGZmLCAweDhmLCAweDZmLCAweGQxLCAweDZkLAotICAgICAgICAweDczLCAweGZmLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweDZmLCAweDlmLCAweDdiLCAweGZkLCAweGZmLCAweGY2LCAweGZkLAotICAgICAgICAweDI3LCAweGZmLCAweGZjLCAweGZmLCAweGFmLCAweGZmLCAweGZkLCAweGZlLAotICAgICAgICAweDdmLCAweGRmLCAweGZmLCAweDdmLCAweGVmLAotICAgICAgICAweGZmLCAweGZlLCAweDgxLCAweGU3LCAweDkzLCAweDkxLCAweDgzLCAweDg1LAotICAgICAgICAweGVmLCAweDhmLCAweDdmLCAweDc0LCAweDhkLCAweDFiLCAweDJkLCAweGUyLAotICAgICAgICAweGNkLCAweGU1LCAweGI1LCAweDlmLCAweDc3LAotICAgICAgICAweGJmLCAweDdmLCAweGU0LCAweGVmLCAweGZmLCAweGY3LCAweGRiLCAweGZkLAotICAgICAgICAweDdmLCAweGZlLCAweGFiLCAweDdmLCAweGZjLCAweGJmLCAweGZmLCAweGRlLAotICAgICAgICAweDc3LCAweGZiLCAweGRmLCAweGVmLCAweGJmLAotICAgICAgICAweGZmLCAweGZmLCAweDFlLCAweDdmLCAweDhmLCAweGZmLCAweDkyLCAweGYzLAotICAgICAgICAweGRmLCAweDdiLCAweGZmLCAweDdiLCAweGZmLCAweGRiLCAweDNkLCAweDVmLAotICAgICAgICAweGY5LCAweGY2LCAweGZmLCAweGYyLCAweGY3LAotICAgICAgICAweDdmLCAweDdmLCAweGZmLCAweGZmLCAweGVmLCAweGQyLCAweGYwLCAweGI3LAotICAgICAgICAweGZiLCAweDdmLCAweGZjLCAweDc3LCAweGQ3LCAweDNmLCAweGM3LCAweDdmLAotICAgICAgICAweGYzLCAweGU3LCAweGZmLCAweGZkLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweDdiLCAweGVmLCAweGY1LCAweGRhLCAweGZmLAotICAgICAgICAweDdjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdiLCAweGViLCAweGZiLAotICAgICAgICAweGVmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweDYwLCAweGZjLCAweGZiLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZiLCAweDAwLCAweDBmLCAweGYxLCAweGY1LCAweGZiLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGYzLCAweDg2LCAweDNlLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZiLCAweDczLCAweGZmLCAweGZmLCAweDlmLAotICAgICAgICAweGFiLCAweDhjLCAweGY1LCAweGQxLCAweGZmLCAweGZiLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweGViLCAweDM2LCAweDBkLCAweDQ5LAotICAgICAgICAweGJmLCAweGYwLCAweGZjLCAweGZiLCAweDczLCAweGZmLCAweGYzLCAweGZmLAotICAgICAgICAweGZmLCAweGFiLCAweGE3LCAweGYxLCAweGY5LCAweGZmLCAweGY3LCAweGRmLAotICAgICAgICAweGZhLCAweGZiLCAweGZmLCAweGE3LCAweDNmLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGZiLCAweGZiLCAweGZiLCAweGZmLAotICAgICAgICAweGFmLCAweDhmLCAweGY5LCAweGY5LCAweGRmLCAweGRmLCAweGY3LCAweGRiLAotICAgICAgICAweGZmLCAweGZmLCAweGJhLCAweDJmLCAweDY5LAotICAgICAgICAweGZmLCAweGU3LCAweGZiLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZiLAotICAgICAgICAweGZmLCAweGZiLCAweGQ3LCAweGZmLCAweGRmLCAweGY3LCAweGQ3LCAweGRmLAotICAgICAgICAweGYzLCAweGRiLCAweGZmLCAweGRiLCAweGZmLAotICAgICAgICAweGZmLCAweGUzLCAweDdiLCAweGY5LCAweGZiLCAweGZmLCAweDhmLCAweGZiLAotICAgICAgICAweGY4LCAweGZmLCAweGZmLCAweGVmLCAweGRmLCAweGYzLCAweGQ3LCAweGRmLAotICAgICAgICAweGEzLCAweDViLCAweGM0LCAweGZiLCAweGVmLAotICAgICAgICAweDdmLCAweGUwLCAweGZkLCAweGZiLCAweGZiLCAweGZmLCAweGZiLCAweGViLAotICAgICAgICAweGZmLCAweDhjLCAweGViLCAweGYwLCAweGQzLCAweGZmLCAweGQ3LCAweGZmLAotICAgICAgICAweGY3LCAweGJiLCAweDdmLCAweDhmLCAweDdlLAotICAgICAgICAweGJmLCAweGZiLCAweDZjLCAweGZiLCAweGZiLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGZiLCAweGYzLCAweDhiLCAweGYzLCAweGY0LCAweGY3LCAweGQ3LCAweGZmLAotICAgICAgICAweGYzLCAweGZmLCAweGZlLCAweGMyLCAweGJmLAotICAgICAgICAweGZmLCAweDg3LCAweDdmLCAweGZhLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGYwLCAweDhmLCAweGZmLCAweGY0LCAweGZmLCAweGRmLAotICAgICAgICAweGZmLCAweGZiLCAweDhmLCAweDdmLCAweGM1LAotICAgICAgICAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLAotICAgICAgICAweGYzLCAweDg3LCAweGVmLCAweGZjLCAweGZkLCAweGZiLCAweGZmLCAweGZmLAotICAgICAgICAweGRmLCAweGZmLCAweGZiLCAweGFiLCAweDdmLAotICAgICAgICAweDNmLCAweGYzLCAweGZhLCAweGY5LCAweDhmLCAweDdmLCAweGYwLCAweGViLAotICAgICAgICAweGZiLCAweGVjLCAweDFmLCAweGNmLCAweDdlLCAweGZmLCAweDhmLCAweDVlLAotICAgICAgICAweGQxLCAweGJmLCAweGZmLCAweGZlLCAweGFhLAotICAgICAgICAweGZmLCAweDgwLCAweDdkLCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweDhmLCAweDVmLCAweDhjLCAweGZmLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZhLCAweDlmLCAweDZmLAotICAgICAgICAweGZmLCAweDlhLCAweGZkLCAweGZjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDZmLCAweGJmLCAweGQ3LCAweDg5LCAweDdmLCAweGY0LCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGRmLCAweGJmLCAweDZmLAotICAgICAgICAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweDJiLCAweDczLCAweGYwLCAweGYzLCAweGZmLCAweGZmLCAweGMzLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhiLCAweDYyLCAweGZkLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZiLCAweDBmLCAweDhiLCAweDhlLAotICAgICAgICAweGYwLCAweGRjLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGFlLAotICAgICAgICAweDQzLCAweGE5LCAweDczLCAweGY5LCAweGZiLAotICAgICAgICAweDdmLCAweGY5LCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGY5LCAweGZmLAotICAgICAgICAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGYzLCAweGZlLAotICAgICAgICAweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDg3LCAweGY4LCAweGY4LCAweGY5LCAweDdmLCAweGY5LCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweDhmLCAweDhmLCAweGYwLCAweGYwLCAweGYzLCAweGZmLAotICAgICAgICAweGYzLCAweGZiLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY5LCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYzLCAweGZmLAotICAgICAgICAweGZiLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGY3LCAweGY5LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZlLAotICAgICAgICAweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY1LCAweGZmLCAweGYxLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYzLCAweGZlLAotICAgICAgICAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGYxLCAweGZmLCAweDg1LCAweGZmLAotICAgICAgICAweGZlLCAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGYzLCAweGRlLCAweGZmLCAweGYzLCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweDBmLCAweDlmLCAweGZhLCAweDlmLCAweGViLCAweGYyLAotICAgICAgICAweGU3LCAweGZmLCAweDdiLCAweGZmLCAweDRmLCAweDczLCAweDMxLCAweDgxLAotICAgICAgICAweDVmLCAweGYxLCAweGZlLCAweGZmLCAweGJmLAotICAgICAgICAweGZmLCAweGFmLCAweDdmLCAweDk0LCAweGZiLCAweGZlLCAweDhmLCAweGZmLAotICAgICAgICAweDAwLCAweGZmLCAweGYwLCAweGVmLCAweGVmLCAweDVmLCAweGZiLCAweGY1LAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDVlLCAweGYxLAotICAgICAgICAweGZmLCAweGY5LCAweGZmLCAweGVmLCAweDg2LCAweDBmLCAweDcxLCAweGY2LAotICAgICAgICAweGZmLCAweDdmLCAweDdmLCAweDk3LCAweGNmLCAweGZkLCAweGJmLCAweDVmLAotICAgICAgICAweGY5LCAweGYxLCAweGYzLCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweGRiLCAweGVkLCAweDFlLCAweGZmLCAweGY2LCAweDk1LCAweDlhLAotICAgICAgICAweDZmLCAweDNkLCAweGZmLCAweGY4LCAweGZiLCAweGRmLCAweGY3LCAweGZkLAotICAgICAgICAweGZiLCAweGY3LCAweGZkLCAweGVkLCAweGRlLAotICAgICAgICAweDdmLCAweGYwLCAweGY3LCAweDg3LCAweDdmLCAweDliLCAweGZmLCAweGVjLAotICAgICAgICAweDlmLCAweGJmLCAweDdmLCAweGNkLCAweDdmLCAweGY3LCAweDNiLCAweGFkLAotICAgICAgICAweDdlLCAweGY4LCAweGZmLCAweGJiLCAweDc5LAotICAgICAgICAweGZmLCAweGZmLCAweGUzLCAweDdjLCAweDAxLCAweDhkLCAweGY1LCAweGZiLAotICAgICAgICAweGU3LCAweGY3LCAweGZmLCAweGZmLCAweDllLCAweDdkLCAweDBmLCAweDdmLAotICAgICAgICAweGYxLCAweGNkLCAweGZlLCAweGY3LCAweGZmLAotICAgICAgICAweDNmLCAweGQ3LCAweGY0LCAweDlhLCAweGY3LCAweGVkLCAweGZmLCAweGYzLAotICAgICAgICAweGI3LCAweGZmLCAweGVmLCAweGZmLCAweGJkLCAweGU3LCAweDVmLCAweGJkLAotICAgICAgICAweGZmLCAweGVmLCAweGZlLCAweDdmLCAweGYxLAotICAgICAgICAweDNmLCAweGZmLCAweGU3LCAweGZmLCAweGNmLCAweGZhLCAweGY4LCAweGZmLAotICAgICAgICAweGZmLCAweGRmLCAweGJmLCAweGZlLCAweGRmLCAweGZmLCAweGQzLCAweDFmLAotICAgICAgICAweGZkLCAweGVmLCAweDdmLCAweGZmLCAweGNmLAotICAgICAgICAweDdmLCAweGZmLCAweDkzLCAweGRmLCAweGYwLCAweGVmLCAweGYzLCAweGQ0LAotICAgICAgICAweDc3LCAweDZmLCAweGZmLCAweGZmLCAweGJmLCAweDdmLCAweDdkLCAweGZkLAotICAgICAgICAweDdmLCAweDdkLCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweGY3LCAweGRmLCAweGZiLCAweGJjLCAweGVmLCAweGZmLCAweGZkLAotICAgICAgICAweGZmLCAweGZmLCAweGZjLCAweDdmLCAweGI3LCAweGZmLCAweGZkLCAweDVmLAotICAgICAgICAweGNmLCAweGZmLCAweGVmLCAweDdmLCAweGZkLAotICAgICAgICAweGZmLCAweGVlLCAweDg3LCAweGVmLCAweDkyLCAweGYwLCAweDdlLCAweGU1LAotICAgICAgICAweGJmLCAweDhmLCAweDdmLCAweDYwLCAweGQ5LCAweGRiLCAweDcxLCAweGIzLAotICAgICAgICAweDJkLCAweDQ5LCAweDZjLCAweDI5LCAweDdmLAotICAgICAgICAweGJmLCAweGZmLCAweGU0LCAweDZmLCAweGYzLCAweGZhLCAweDU3LCAweGZkLAotICAgICAgICAweGZmLCAweGZlLCAweGI3LCAweDdmLCAweGZjLCAweGZmLCAweDczLCAweGRmLAotICAgICAgICAweGYzLCAweDdmLCAweGZkLCAweGZmLCAweGJmLAotICAgICAgICAweGZmLCAweGVmLCAweDhiLCAweDdmLCAweDhmLCAweGZmLCAweGYyLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGZiLCAweGZmLCAweGZmLCAweGRmLCAweGVkLCAweGVmLAotICAgICAgICAweGYxLCAweGY3LCAweGZkLCAweGRmLCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGU3LCAweGU2LCAweGYxLCAweGZmLAotICAgICAgICAweGRmLCAweGZiLCAweGU5LCAweGZlLCAweGJmLCAweGZmLCAweGJmLCAweDVmLAotICAgICAgICAweGZmLCAweGJmLCAweDBlLCAweDc1LCAweGZhLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDZmLCAweGZiLCAweGY5LCAweGZmLCAweGZmLAotICAgICAgICAweGYzLCAweGZmLCAweGZiLCAweGJmLCAweGVmLCAweGZmLCAweGYzLCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweDM4LCAweGY4LCAweGY3LCAweGZmLCAweGZmLCAweGRmLCAweDlmLAotICAgICAgICAweGY3LCAweDBiLCAweDBmLCAweGY1LCAweGY1LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweGY3LCAweGYzLCAweDhlLCAweDBlLAotICAgICAgICAweGJmLCAweGU4LCAweDZmLCAweGVmLCAweDdmLCAweGZmLCAweGRmLCAweGRmLAotICAgICAgICAweGVmLCAweDg4LCAweGY1LCAweDkxLCAweGZiLCAweGZmLCAweGZmLCAweGJmLAotICAgICAgICAweGZlLCAweGJmLCAweGE2LCAweDgxLCAweDcxLAotICAgICAgICAweGZmLCAweGYwLCAweGY4LCAweGZmLCAweDY3LCAweGVmLCAweGZmLCAweGI3LAotICAgICAgICAweGY3LCAweDhmLCAweDJmLCAweGQxLCAweDQxLCAweGZmLCAweGNmLCAweDVmLAotICAgICAgICAweGZlLCAweGZmLCAweDdiLCAweDhmLCAweDlmLAotICAgICAgICAweGZmLCAweGY4LCAweDZmLCAweGVmLCAweGY3LCAweGU3LCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDhmLCAweGQxLCAweGYxLCAweGNmLCAweGRmLCAweGNmLCAweGRmLAotICAgICAgICAweGZmLCAweGZmLCAweDlmLCAweDhmLCAweGUxLAotICAgICAgICAweGZmLCAweGU3LCAweGZmLCAweGY3LCAweGU3LCAweDZmLCAweGY3LCAweGU3LAotICAgICAgICAweGU3LCAweDc3LCAweGVmLCAweGVmLCAweDZmLCAweGZmLCAweGZmLCAweGRmLAotICAgICAgICAweGZmLCAweGRmLCAweGRmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGE3LCAweDZmLCAweGZmLCAweGY3LCAweGVmLCAweDk3LCAweGU3LAotICAgICAgICAweGYwLCAweGVmLCAweDdmLCAweGFmLCAweDRmLCAweGZmLCAweGZmLCAweGRmLAotICAgICAgICAweGJmLCAweDVmLCAweGUwLCAweDdmLCAweGVmLAotICAgICAgICAweDdmLCAweGEwLCAweGVmLCAweGZmLCAweGU3LCAweGZmLCAweGY3LCAweGY3LAotICAgICAgICAweGZmLCAweDhiLCAweGJmLCAweGY4LCAweGRmLCAweGZmLCAweGNmLCAweDdlLAotICAgICAgICAweGZmLCAweGRmLCAweDdmLCAweDhlLCAweDVmLAotICAgICAgICAweGZmLCAweGZmLCAweDM4LCAweGZmLCAweGY3LCAweGZmLCAweGY3LCAweGY3LAotICAgICAgICAweGY3LCAweGY3LCAweDhmLCAweGY3LCAweGY4LCAweGY3LCAweGNmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweGNiLCAweDNmLAotICAgICAgICAweDNmLCAweDlmLCAweDdmLCAweGY4LCAweGZmLCAweGVmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGYwLCAweGFmLCAweGZmLCAweGYwLCAweGZmLCAweGRmLAotICAgICAgICAweGZmLCAweGZmLCAweGFlLCAweDdmLCAweGMxLAotICAgICAgICAweDdmLCAweGYwLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGY3LCAweGJmLCAweGJmLCAweGQwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGZmLCAweDliLCAweGZmLAotICAgICAgICAweDdmLCAweGNmLCAweGY4LCAweGZmLCAweDhmLCAweDZmLCAweGUwLCAweGQ3LAotICAgICAgICAweGY3LCAweGY3LCAweGZmLCAweGZlLCAweGYwLCAweGZlLCAweDhmLCAweDVlLAotICAgICAgICAweGQxLCAweGZmLCAweGRmLCAweGRmLCAweGJlLAotICAgICAgICAweGZmLCAweDg0LCAweDdmLCAweGY4LCAweGZmLCAweDdmLCAweGRmLCAweGZmLAotICAgICAgICAweGZmLCAweGFmLCAweDdmLCAweDgxLCAweDdmLCAweGY1LCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZhLCAweDlmLCAweDNmLAotICAgICAgICAweGZmLCAweGQ4LCAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDBmLCAweGZmLCAweDg1LCAweDdmLCAweGYwLCAweGZmLCAweGZlLAotICAgICAgICAweGJmLCAweGZmLCAweGRmLCAweDZmLCAweGJmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGFmLCAweGZmLCAweGY3LCAweGRmLAotICAgICAgICAweGY3LCAweDQ3LCAweGY0LCAweGZmLCAweGVmLCAweGZmLCAweGRmLCAweDdmLAotICAgICAgICAweGZmLCAweGJmLCAweGNmLCAweDVhLCAweGYxLAotICAgICAgICAweGZmLCAweGJmLCAweGJmLCAweGZmLCAweGZmLCAweDNmLCAweDhmLCAweGMwLAotICAgICAgICAweGYzLCAweGQxLCAweGZmLCAweGZiLCAweGVmLCAweGZmLCAweGRmLCAweGJlLAotICAgICAgICAweDBmLCAweDI1LCAweGU5LCAweGQxLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGY3LAotICAgICAgICAweDJmLCAweGFmLCAweGYzLCAweGZiLCAweGVmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGNmLCAweGJmLCAweGZiLAotICAgICAgICAweGJmLCAweDg3LCAweGY4LCAweGY4LCAweGRmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDhmLCAweGUwLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGViLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZlLAotICAgICAgICAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGRmLCAweGY3LCAweGZmLCAweGZmLCAweGNmLCAweGZmLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGViLCAweGZlLAotICAgICAgICAweGNmLCAweGZmLCAweDdiLCAweGZkLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGRmLCAweGZmLCAweGJmLCAweGZmLAotICAgICAgICAweGZiLCAweGZmLCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZiLCAweGJlLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGQ0LCAweGJmLCAweGYwLAotICAgICAgICAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweDkzLCAweDJmLCAweGZkLCAweGFkLAotICAgICAgICAweGY3LCAweDc1LCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGJmLCAweDdmLCAweGZmLCAweDlhLCAweGZmLCAweGY0LCAweDBmLCAweGZmLAotICAgICAgICAweDAwLCAweGRlLCAweGYwLCAweGYzLCAweGY5LCAweGJmLCAweDdkLCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDBmLCAweGQxLAotICAgICAgICAweGZmLCAweGZiLCAweGRmLCAweGVlLCAweDhiLCAweDBiLCAweDc4LCAweGYwLAotICAgICAgICAweGZmLCAweGZhLCAweDdmLCAweGJmLCAweGZmLCAweGQ1LCAweDhmLCAweDhmLAotICAgICAgICAweGUxLCAweGY3LCAweGZiLCAweGZiLCAweGZmLAotICAgICAgICAweDdmLCAweGI3LCAweDk5LCAweGVmLCAweGRmLCAweGY0LCAweGZmLCAweGZmLAotICAgICAgICAweGU0LCAweGY0LCAweDVkLCAweGY2LCAweGVmLCAweDlmLCAweGVmLCAweGY3LAotICAgICAgICAweDNiLCAweDNmLCAweGRmLCAweGJmLCAweGVjLAotICAgICAgICAweGZmLCAweGVjLCAweGY3LCAweGI5LCAweDZiLCAweGJjLCAweGZiLCAweGY3LAotICAgICAgICAweGVmLCAweGZmLCAweDdlLCAweGZkLCAweDdlLCAweGJiLCAweGRmLCAweDg1LAotICAgICAgICAweGZlLCAweGY3LCAweGZmLCAweDdiLCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweGE3LCAweGVlLCAweGU3LCAweDVmLCAweGUwLCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDVmLCAweGU2LCAweDZmLCAweDgxLCAweDhkLAotICAgICAgICAweGQ1LCAweGY3LCAweGJmLCAweGVmLCAweGI2LAotICAgICAgICAweGZmLCAweGQ3LCAweGY0LCAweGVlLCAweGI3LCAweDdjLCAweGZmLCAweGQ3LAotICAgICAgICAweGFmLCAweDdmLCAweGVkLCAweDlmLCAweGU1LCAweGJmLCAweGY3LCAweDdkLAotICAgICAgICAweGZiLCAweGI3LCAweGFkLCAweGQ3LCAweGZkLAotICAgICAgICAweGJmLCAweGZmLCAweGZmLCAweGM3LCAweDhiLCAweGZmLCAweGYwLCAweGY2LAotICAgICAgICAweGZmLCAweGZkLCAweGZiLCAweGZmLCAweGRmLCAweGJlLCAweDBmLCAweDdmLAotICAgICAgICAweGQ1LCAweGY3LCAweGZmLCAweGYyLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGM1LCAweGZmLCAweGYwLCAweDdjLCAweGZmLCAweGFkLAotICAgICAgICAweDdmLCAweDdmLCAweGVmLCAweGZmLCAweGNmLCAweDRmLCAweGYxLCAweGY1LAotICAgICAgICAweDdiLCAweGRkLCAweGZmLCAweGRmLCAweGZmLAotICAgICAgICAweGZmLCAweDc3LCAweGVmLCAweGZmLCAweGQ4LCAweGJmLCAweGY3LCAweGYzLAotICAgICAgICAweDVmLCAweGZiLCAweGY5LCAweDdmLCAweGU3LCAweGZmLCAweGQ3LCAweDdmLAotICAgICAgICAweGFkLCAweGZmLCAweGZiLCAweGZiLCAweGYzLAotICAgICAgICAweGZmLCAweGNjLCAweDk1LCAweDhmLCAweGQ4LCAweGYzLCAweGZjLCAweGJjLAotICAgICAgICAweGRjLCAweGRmLCAweGJiLCAweDQ0LCAweDhiLCAweGNiLCAweDg3LCAweGIxLAotICAgICAgICAweGI3LCAweGE3LCAweDk3LCAweGVlLCAweGYzLAotICAgICAgICAweGZmLCAweDdmLCAweGI0LCAweGJmLCAweGZmLCAweGM3LCAweDdmLCAweGNiLAotICAgICAgICAweGZkLCAweGJmLCAweDdmLCAweDdmLCAweDc0LCAweGU3LCAweGRmLCAweGY1LAotICAgICAgICAweGJiLCAweGNmLCAweGVkLCAweGZlLCAweGZkLAotICAgICAgICAweGZmLCAweDNmLCAweGZiLCAweDc3LCAweGNjLCAweGJiLCAweGYwLCAweGZiLAotICAgICAgICAweGZmLCAweGVmLCAweGJlLCAweGZmLCAweGNmLCAweGZmLCAweDg1LCAweDNmLAotICAgICAgICAweGI1LCAweGZmLCAweGY3LCAweDM3LCAweDdmLAotICAgICAgICAweDNmLCAweGY3LCAweGJmLCAweGNmLCAweDlmLCAweGQ3LCAweGY3LCAweGVmLAotICAgICAgICAweGZmLCAweDc4LCAweGU3LCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweDdmLAotICAgICAgICAweDY1LCAweGJmLCAweGJmLCAweGZmLCAweGU3LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRiLCAweGY3LCAweGRmLCAweGZmLAotICAgICAgICAweDc3LCAweDdmLCAweGZmLCAweGZmLCAweGJmLCAweGJmLCAweGRlLCAweDc3LAotICAgICAgICAweGRkLCAweGZmLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweGJmLCAweDY4LCAweGY4LCAweGZmLCAweGY3LCAweGZmLCAweGNmLCAweGNmLAotICAgICAgICAweGYzLCAweDE3LCAweDNmLCAweGQ1LCAweGRkLCAweGY3LCAweGZmLCAweGZmLAotICAgICAgICAweGNmLCAweGRmLCAweDczLCAweDk1LCAweDNmLAotICAgICAgICAweGZmLCAweGFjLCAweDZmLCAweGVmLCAweDc3LCAweGRmLCAweGZmLCAweGY3LAotICAgICAgICAweGJiLCAweDg1LCAweGRkLCAweGUxLCAweGY3LCAweGZiLCAweDdiLCAweGRmLAotICAgICAgICAweGZlLCAweGZmLCAweGI3LCAweDlmLCAweDc5LAotICAgICAgICAweGZmLCAweGQ4LCAweGFjLCAweGZiLCAweDQ3LCAweGFmLCAweGViLCAweGY3LAotICAgICAgICAweGZmLCAweGFmLCAweDJlLCAweDcwLCAweGQ5LCAweGY3LCAweGZiLCAweGRmLAotICAgICAgICAweGVhLCAweGZiLCAweGZiLCAweDFiLCAweDVmLAotICAgICAgICAweGZmLCAweGY4LCAweDZmLCAweGFmLCAweGQ3LCAweGI3LCAweGViLCAweGZmLAotICAgICAgICAweGU3LCAweGFmLCAweDdjLCAweDcwLCAweGZiLCAweGRmLCAweGZmLCAweDdiLAotICAgICAgICAweGZiLCAweGZmLCAweGRhLCAweDlmLCAweGY5LAotICAgICAgICAweGZmLCAweDk1LCAweGJiLCAweGZkLCAweGM3LCAweGNmLCAweGZiLCAweDgzLAotICAgICAgICAweGVmLCAweGYzLCAweGJmLCAweGNmLCAweDQ3LCAweGY3LCAweGU3LCAweDFmLAotICAgICAgICAweGQ3LCAweDhiLCAweDZmLCAweDMzLCAweGJlLAotICAgICAgICAweGZmLCAweGM3LCAweDZmLCAweGZkLCAweDk3LCAweDJmLCAweGViLCAweGI3LAotICAgICAgICAweGRjLCAweDc3LCAweGQ3LCAweDFmLCAweDY3LCAweGY3LCAweGU3LCAweDllLAotICAgICAgICAweGU3LCAweGRiLCAweDM0LCAweGRiLCAweGZiLAotICAgICAgICAweDdmLCAweGE4LCAweGVmLCAweGZmLCAweGU3LCAweGVmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweDhiLCAweGJmLCAweGQ4LCAweGVmLCAweGZmLCAweGU3LCAweGRmLAotICAgICAgICAweGY3LCAweGZiLCAweGY3LCAweDlmLCAweDY2LAotICAgICAgICAweGZmLCAweGZiLCAweDZjLCAweGZmLCAweGI3LCAweDlmLCAweGNmLCAweGNiLAotICAgICAgICAweGJiLCAweDkzLCAweGFmLCAweGZmLCAweGE4LCAweGZmLCAweGM3LCAweDNmLAotICAgICAgICAweGE3LCAweGNmLCAweGZlLCAweGUzLCAweDNmLAotICAgICAgICAweDNmLCAweGRmLCAweDdiLCAweGZhLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweDhmLCAweDNmLCAweGQwLCAweGQzLCAweDdmLCAweGZjLCAweGZmLCAweDhlLAotICAgICAgICAweGZmLCAweGYzLCAweDhmLCAweDRlLCAweGU0LAotICAgICAgICAweDdmLCAweGI4LCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweDhmLCAweGRmLAotICAgICAgICAweGYzLCAweGJiLCAweDNmLCAweGUwLCAweGYzLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweDhmLCAweGQ3LCAweGYzLCAweGFiLCAweGVmLAotICAgICAgICAweDdmLCAweDhmLCAweGY4LCAweGZiLCAweDhmLCAweDZmLCAweGEwLCAweGZmLAotICAgICAgICAweGZmLCAweGRjLCAweGZmLCAweDVmLCAweGZjLCAweGYzLCAweDhmLCAweDZlLAotICAgICAgICAweGIxLCAweGY3LCAweGY3LCAweGY3LCAweDNlLAotICAgICAgICAweGZmLCAweDkwLCAweDdiLCAweGY4LCAweGZmLCAweDdmLCAweGRmLCAweGZmLAotICAgICAgICAweGZiLCAweDlmLCAweDdmLCAweGEwLCAweGYzLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGRmLCAweGZmLCAweGRiLCAweGJmLCAweDNmLAotICAgICAgICAweGZmLCAweGRjLCAweGZiLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDc3LCAweGFmLCAweGZmLCAweGFkLCAweGYzLCAweGY4LCAweGZmLCAweGZlLAotICAgICAgICAweGVmLCAweGZmLCAweGZmLCAweDZmLCAweGJmLAotICAgICAgICAweGZmLCAweGZmLCAweGNmLCAweGZmLCAweGEzLCAweGZmLCAweGFmLCAweGNmLAotICAgICAgICAweDkzLCAweGMzLCAweDc0LCAweGVmLCAweGRmLCAweGZmLCAweGFiLCAweDJmLAotICAgICAgICAweGU3LCAweGM3LCAweGYzLCAweDczLCAweDc5LAotICAgICAgICAweGZmLCAweGZmLCAweGNmLCAweGZmLCAweGMzLCAweDdmLCAweDgzLCAweGU0LAotICAgICAgICAweGQzLCAweGJjLCAweDdiLCAweGRiLCAweGRmLCAweDdmLCAweDhiLCAweDhlLAotICAgICAgICAweDgzLCAweDAxLCAweDUxLCAweGQ1LCAweDdiLAotICAgICAgICAweGZmLCAweGZiLCAweGRmLCAweGZmLCAweGMzLCAweGVmLCAweGIzLCAweGZmLAotICAgICAgICAweGI3LCAweGZmLCAweGZlLCAweGJmLCAweGRmLCAweGZmLCAweDhiLCAweDZlLAotICAgICAgICAweGYzLCAweGZiLCAweGI3LCAweDFmLCAweGZlLAotICAgICAgICAweGJmLCAweDgyLCAweGM4LCAweGY4LCAweGQzLCAweDdmLCAweGYzLCAweGZiLAotICAgICAgICAweGZmLCAweGVmLCAweDg3LCAweDg3LCAweGQwLCAweDcwLCAweDhiLCAweGZmLAotICAgICAgICAweGYzLCAweGZmLCAweGVmLCAweGVmLCAweDg3LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDQ3LCAweGZmLCAweGYzLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweDdmLCAweGNiLCAweGVmLAotICAgICAgICAweGYyLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGVmLCAweGYyLCAweGY3LCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGVmLCAweGRmLCAweGY3LCAweGNhLCAweDdmLAotICAgICAgICAweGYzLCAweGY3LCAweGVmLCAweGZmLCAweGY2LAotICAgICAgICAweGZmLCAweGZhLCAweGZiLCAweGZmLCAweGU3LCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGY3LCAweDU3LCAweDdmLCAweGNhLCAweGVmLAotICAgICAgICAweGYzLCAweGZmLCAweGZmLCAweGVmLCAweGVmLAotICAgICAgICAweGZmLCAweGY2LCAweGViLCAweGZhLCAweGY3LCAweGZmLCAweGY3LCAweDhmLAotICAgICAgICAweGZmLCAweGUzLCAweGY3LCAweGVmLCAweGQ3LCAweGY3LCAweGNiLCAweDdmLAotICAgICAgICAweGYzLCAweDhmLCAweDZjLCAweGYyLCAweGU3LAotICAgICAgICAweGZmLCAweGZmLCAweDJmLCAweGZmLCAweGYxLCAweDlkLCAweDllLCAweGY0LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweDBmLCAweGZmLCAweGYxLCAweDA5LAotICAgICAgICAweDNmLCAweGY5LCAweGJmLCAweGY3LCAweGZiLAotICAgICAgICAweGZmLCAweGVmLCAweDdmLCAweGY2LCAweGZiLCAweGY1LCAweDBmLCAweGRmLAotICAgICAgICAweDAwLCAweGZmLCAweGQwLCAweGJmLCAweGMwLCAweGJmLCAweGY5LCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDZmLCAweGUxLAotICAgICAgICAweGZmLCAweGZmLCAweDllLCAweGFmLCAweGY3LCAweDBmLCAweDE4LCAweGQ5LAotICAgICAgICAweGJmLCAweDZmLCAweDM3LCAweGVmLCAweDhmLCAweGZmLCAweDllLCAweDA2LAotICAgICAgICAweDc1LCAweGY3LCAweGY2LCAweGZmLCAweGVmLAotICAgICAgICAweDdmLCAweGY3LCAweGNmLCAweGJiLCAweGZiLCAweDZkLCAweGZiLCAweGVmLAotICAgICAgICAweDdkLCAweGU5LCAweGZmLCAweGZmLCAweGJmLCAweGMyLCAweGY3LCAweDZmLAotICAgICAgICAweGZmLCAweGRjLCAweGZmLCAweGYzLCAweGZhLAotICAgICAgICAweDdmLCAweDZmLCAweGY3LCAweGY5LCAweGZmLCAweDZkLCAweGZlLCAweDljLAotICAgICAgICAweGJmLCAweGJmLCAweDdkLCAweGUyLCAweDdmLCAweDc3LCAweDlmLCAweGNkLAotICAgICAgICAweGI3LCAweGI1LCAweGZmLCAweGZmLCAweDdmLAotICAgICAgICAweDdmLCAweGZmLCAweDg3LCAweGFlLCAweDg2LCAweGRmLCAweGMwLCAweGZkLAotICAgICAgICAweGZiLCAweGZhLCAweGZmLCAweGZmLCAweDhlLCAweDZkLCAweGQ1LCAweDNkLAotICAgICAgICAweGYxLCAweGZmLCAweGZlLCAweGVmLCAweGZmLAotICAgICAgICAweGZmLCAweDNmLCAweGQyLCAweGE0LCAweGZlLCAweGQ5LCAweGY3LCAweGZlLAotICAgICAgICAweGRmLCAweGZmLCAweGNiLCAweGZmLCAweGRkLCAweDdlLCAweGJiLCAweGRkLAotICAgICAgICAweDVmLCAweGY3LCAweGJmLCAweGZmLCAweGVkLAotICAgICAgICAweGZmLCAweGZlLCAweGY1LCAweGZmLCAweGI3LCAweGY2LCAweGI0LCAweGFlLAotICAgICAgICAweGZlLCAweGVmLCAweGY3LCAweGZmLCAweGZmLCAweDhmLCAweDA3LCAweDdiLAotICAgICAgICAweGZiLCAweGZmLCAweDdmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweDdiLCAweGEzLCAweGJmLCAweGUzLCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweGY3LCAweGZkLCAweGRmLCAweGZmLCAweDhmLCAweDdmLCAweDliLCAweGRmLAotICAgICAgICAweGZiLCAweGVmLCAweGZlLCAweGZmLCAweDNmLAotICAgICAgICAweGZmLCAweDZmLCAweGZmLCAweDdmLCAweGIzLCAweDdmLCAweGRmLCAweGJkLAotICAgICAgICAweDc4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGVmLCAweGZmLAotICAgICAgICAweGRmLCAweGVlLCAweDlkLCAweGZkLCAweGVmLAotICAgICAgICAweGZmLCAweGY4LCAweDA1LCAweDhlLCAweGIwLCAweDU4LCAweGY3LCAweGZjLAotICAgICAgICAweGE0LCAweDg1LCAweGRkLCAweGJjLCAweDBiLCAweDA1LCAweDYxLCAweGY4LAotICAgICAgICAweGI3LCAweGZmLCAweGViLCAweGVmLCAweDdmLAotICAgICAgICAweGJmLCAweGZmLCAweGM3LCAweGJiLCAweGQ4LCAweDZmLCAweDc5LCAweGRlLAotICAgICAgICAweGZmLCAweGZmLCAweGNmLCAweGZmLCAweGJhLCAweGFmLCAweGQ5LCAweDdiLAotICAgICAgICAweGZkLCAweGZmLCAweGY1LCAweGRmLCAweGJmLAotICAgICAgICAweGZmLCAweGZmLCAweGFmLCAweDdmLCAweDg4LCAweDdmLCAweGYwLCAweGVhLAotICAgICAgICAweGZlLCAweDdmLCAweGYyLCAweGZmLCAweGRmLCAweGQ3LCAweDRmLCAweDdmLAotICAgICAgICAweGUzLCAweGRlLCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweDdkLCAweDZmLCAweDVmLCAweGFiLCAweGZmLCAweDdhLCAweGI2LAotICAgICAgICAweGJmLCAweDc4LCAweGRkLCAweDdmLCAweGRlLCAweGVmLCAweDRiLCAweDliLAotICAgICAgICAweGViLCAweDdmLCAweDc2LCAweDlmLCAweGFjLAotICAgICAgICAweGZmLCAweGNmLCAweGZmLCAweGZmLCAweGI3LCAweDdmLCAweGFlLCAweGVmLAotICAgICAgICAweGRiLCAweGVmLCAweGZmLCAweGY3LCAweGZmLCAweGZiLCAweGU3LCAweGZlLAotICAgICAgICAweGJmLCAweDdlLCAweGZiLCAweGY3LCAweGZiLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGNmLCAweGJmLCAweGZmLCAweGZmLAotICAgICAgICAweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGQ3LCAweGZmLAotICAgICAgICAweGU5LCAweGVmLCAweGYyLCAweGZlLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweDhkLCAweGFmLCAweGYyLAotICAgICAgICAweDcxLCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGNmLAotICAgICAgICAweDBmLCAweDc1LCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweDc4LCAweGJjLCAweGZiLCAweGZlLCAweGZmLCAweGZmLCAweGJmLAotICAgICAgICAweGYzLCAweDBmLCAweDNmLCAweGM5LCAweGU5LCAweDdmLCAweGY3LCAweGRmLAotICAgICAgICAweGZmLCAweGZmLCAweDU3LCAweDgyLCAweDJlLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZiLCAweDdhLCAweGZiLCAweGZmLCAweGZmLAotICAgICAgICAweGViLCAweDg3LCAweDliLCAweGYxLCAweGU1LCAweDdmLCAweDc1LCAweDdmLAotICAgICAgICAweGZlLCAweGZmLCAweGJlLCAweDM5LCAweDc5LAotICAgICAgICAweGZmLCAweGNkLCAweGJmLCAweGZkLCAweDdlLCAweGZmLCAweGZiLCAweGY0LAotICAgICAgICAweGY3LCAweGVkLCAweDZmLCAweGYzLCAweDZiLCAweGY3LCAweGQ3LCAweGJmLAotICAgICAgICAweGZlLCAweGZkLCAweGY3LCAweDhmLCAweGVmLAotICAgICAgICAweGZmLCAweGY4LCAweDdhLCAweGZmLCAweGZhLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGU2LCAweDhmLCAweDliLCAweGYxLCAweGFkLCAweGJmLCAweGY3LCAweGZkLAotICAgICAgICAweGJmLCAweGZkLCAweGVmLCAweDhmLCAweDNmLAotICAgICAgICAweGJmLCAweGZmLCAweGFkLCAweGZiLCAweGY0LCAweGJmLCAweGYzLCAweDkwLAotICAgICAgICAweGRkLCAweGYwLCAweGZhLCAweGNmLCAweGU3LCAweGYyLCAweGY3LCAweDdmLAotICAgICAgICAweGZmLCAweGFkLCAweGZmLCAweGY1LCAweGRmLAotICAgICAgICAweGZmLCAweGNiLCAweDdiLCAweGZhLCAweGQyLCAweDdmLCAweGM3LCAweGYzLAotICAgICAgICAweGE5LCAweGY3LCAweGU3LCAweDhiLCAweGU3LCAweGYxLCAweGY3LCAweDNmLAotICAgICAgICAweDhmLCAweDdmLCAweGIwLCAweGRmLCAweGZkLAotICAgICAgICAweDdmLCAweGY4LCAweGZmLCAweGZiLCAweGYyLCAweGZmLCAweGQyLCAweGUzLAotICAgICAgICAweGRmLCAweDg3LCAweGQzLCAweGYwLCAweGVkLCAweGZmLCAweGY3LCAweDdmLAotICAgICAgICAweGZmLCAweGVmLCAweDc3LCAweGFhLCAweDdmLAotICAgICAgICAweGJmLCAweGVhLCAweGZjLCAweGZiLCAweGIzLCAweGJmLCAweGIzLCAweGZmLAotICAgICAgICAweGQ4LCAweDkzLCAweGFiLCAweGYxLCAweGFjLCAweGZmLCAweGY3LCAweDNmLAotICAgICAgICAweGFmLCAweGVmLCAweGVkLCAweGM3LCAweGFkLAotICAgICAgICAweGZmLCAweGQ2LCAweGZmLCAweGZkLCAweGZmLCAweGRmLCAweGZmLCAweGY0LAotICAgICAgICAweDhmLCAweGJmLCAweGIxLCAweGVkLCAweGY1LCAweGZiLCAweGZmLCAweGVmLAotICAgICAgICAweGZmLCAweGY1LCAweDhmLCAweGRmLCAweGYxLAotICAgICAgICAweGZmLCAweGY4LCAweGZlLCAweGZiLCAweGZmLCAweGRmLCAweDlmLCAweGY4LAotICAgICAgICAweGYwLCAweGVmLCAweGZmLCAweGQwLCAweGZkLCAweGY3LCAweGZmLCAweGVmLAotICAgICAgICAweGFmLCAweGY1LCAweGY3LCAweGNlLCAweDdmLAotICAgICAgICAweDdmLCAweDgzLCAweDdkLCAweGZhLCAweDhmLCAweDVmLCAweGQwLCAweGNiLAotICAgICAgICAweGU5LCAweGJiLCAweDc2LCAweDlmLCAweDdiLCAweGY3LCAweDhmLCAweDZlLAotICAgICAgICAweGIxLCAweGQ1LCAweGY3LCAweDVmLCAweGM2LAotICAgICAgICAweGZmLCAweGEzLCAweDdmLCAweGZjLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGRmLCAweDlmLCAweDdmLCAweGE4LCAweDc3LCAweGY1LCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweDdmLCAweDJkLAotICAgICAgICAweGZmLCAweDk2LCAweGZmLCAweGZjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDM3LCAweDZmLCAweGZkLCAweGFmLCAweDc3LCAweGY4LCAweGZmLCAweGZmLAotICAgICAgICAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweDRiLAotICAgICAgICAweGZmLCAweDcyLCAweGFmLCAweGZmLCAweGU1LCAweGRmLCAweDk5LCAweGZjLAotICAgICAgICAweDEwLCAweDYzLCAweGYwLCAweGVmLCAweGVmLCAweDdmLCAweDhiLCAweGVmLAotICAgICAgICAweGFmLCAweGU3LCAweGY1LCAweGY3LCAweDdkLAotICAgICAgICAweGZmLCAweGVmLCAweDhmLCAweGZmLCAweGExLCAweDRmLCAweDgxLCAweGU3LAotICAgICAgICAweGIwLCAweGZhLCAweGZlLCAweGQ3LCAweGNmLCAweGZmLCAweGNhLCAweGNmLAotICAgICAgICAweDBiLCAweDg1LCAweDcxLCAweGZhLCAweGZmLAotICAgICAgICAweGZmLCAweGRkLCAweGVmLCAweGZmLCAweGE0LCAweGRmLCAweGIxLCAweGRjLAotICAgICAgICAweGQzLCAweGZmLCAweGY4LCAweGZmLCAweGNmLCAweDdmLCAweGNiLCAweDdmLAotICAgICAgICAweGZmLCAweGY1LCAweGZmLCAweGJmLCAweGZkLAotICAgICAgICAweGJmLCAweDgyLCAweGM4LCAweGY4LCAweGUxLCAweDdmLCAweGYwLCAweGRmLAotICAgICAgICAweGZmLCAweGVmLCAweDg3LCAweDg3LCAweGMwLCAweGYwLCAweGNhLCAweDJmLAotICAgICAgICAweGZiLCAweGZmLCAweGVmLCAweGVlLCAweDk3LAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZhLCAweGE1LCAweGRmLCAweGQxLCAweGY3LAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDc3LCAweGRiLCAweGVmLAotICAgICAgICAweGZmLCAweGY1LCAweGZkLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGY2LCAweDhiLCAweGYyLCAweDk0LCAweGZmLCAweGYxLCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGVmLCAweGQ3LCAweGY3LCAweGRmLCAweGVlLAotICAgICAgICAweGZiLCAweGZmLCAweGVmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweGYzLCAweGNiLCAweGZmLCAweGU2LCAweGZmLCAweGYxLCAweGVmLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGU3LCAweGQ3LCAweDdmLCAweGRiLCAweDdlLAotICAgICAgICAweGZkLCAweGY3LCAweGZmLCAweGVmLCAweGVmLAotICAgICAgICAweGZmLCAweGZlLCAweGNmLCAweGZmLCAweGM0LCAweGZmLCAweGYyLCAweDlmLAotICAgICAgICAweGZmLCAweGUwLCAweGY3LCAweGZmLCAweGRmLCAweGZmLCAweGRmLCAweDdmLAotICAgICAgICAweGRiLCAweGFjLCAweGVmLCAweGYxLCAweGY3LAotICAgICAgICAweDdmLCAweGVmLCAweDBmLCAweDVmLCAweGI0LCAweDhmLCAweGZmLCAweGY2LAotICAgICAgICAweGZkLCAweGZmLCAweDZmLCAweGZmLCAweDhmLCAweGZmLCAweGU5LCAweDhkLAotICAgICAgICAweDdmLCAweGYxLCAweGQxLCAweGY3LCAweGZlLAotICAgICAgICAweGZmLCAweGU3LCAweDdmLCAweDg3LCAweGZkLCAweGU3LCAweDhmLCAweDliLAotICAgICAgICAweDAwLCAweGZmLCAweGIwLCAweDdkLCAweGZkLCAweGNmLCAweGZiLCAweGZkLAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDZkLCAweGQxLAotICAgICAgICAweGZmLCAweGJjLCAweGVkLCAweGZmLCAweDg2LCAweDZlLCAweDEwLCAweGYxLAotICAgICAgICAweGY0LCAweDVmLCAweDdmLCAweGZlLCAweDlmLCAweDM3LCAweGMzLCAweDhmLAotICAgICAgICAweGY3LCAweGU1LCAweGZiLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZlLCAweGZmLCAweGZkLCAweDk3LCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweDNmLCAweGZmLCAweGY5LCAweGMzLCAweDFmLCAweGY4LCAweGZmLCAweGI1LAotICAgICAgICAweDVmLCAweGVmLCAweGRjLCAweGZmLCAweGJlLAotICAgICAgICAweGZmLCAweGNiLCAweGU3LCAweGZkLCAweDY5LCAweGU3LCAweGZjLCAweGI2LAotICAgICAgICAweGVmLCAweDlhLCAweDc3LCAweGI2LCAweDY3LCAweGRmLCAweGVmLCAweGY3LAotICAgICAgICAweGZlLCAweGRmLCAweGZmLCAweGY1LCAweDdmLAotICAgICAgICAweGZmLCAweGY3LCAweDk3LCAweGJlLCAweGY0LCAweGZmLCAweGYxLCAweGJhLAotICAgICAgICAweGZlLCAweGZmLCAweDk3LCAweDdmLCAweGJmLCAweDc3LCAweDU1LCAweGRmLAotICAgICAgICAweGQ5LCAweGYxLCAweGZmLCAweGRmLCAweGZmLAotICAgICAgICAweGJmLCAweGJmLCAweDcyLCAweGYyLCAweGRkLCAweGZmLCAweGU0LCAweGZmLAotICAgICAgICAweDdmLCAweGVmLCAweGZmLCAweGY3LCAweGZlLCAweGZiLCAweGI5LCAweGZmLAotICAgICAgICAweGZmLCAweGY1LCAweGZmLCAweGZiLCAweDk2LAotICAgICAgICAweGZmLCAweDdmLCAweGY3LCAweGVmLCAweDgzLCAweGY3LCAweGY3LCAweGZmLAotICAgICAgICAweGRmLCAweGZmLCAweGY3LCAweGZkLCAweGQ1LCAweDlmLCAweDBmLCAweDdmLAotICAgICAgICAweGYwLCAweGZiLCAweGFlLCAweGZmLCAweGVjLAotICAgICAgICAweGZmLCAweDdiLCAweDg1LCAweGY3LCAweGYzLCAweGVmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweGVkLCAweGZmLCAweGU3LCAweDhmLCAweDdmLCAweGM3LCAweDk3LAotICAgICAgICAweDNmLCAweGZjLCAweGZmLCAweGY3LCAweGRlLAotICAgICAgICAweGZmLCAweGZkLCAweDhiLCAweGZmLCAweGY3LCAweDFmLCAweGZiLCAweGZmLAotICAgICAgICAweDJmLCAweGZiLCAweGY3LCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweDZmLAotICAgICAgICAweGY3LCAweGY5LCAweGU3LCAweGZmLCAweDMzLAotICAgICAgICAweGZmLCAweDllLCAweGU3LCAweDhiLCAweGYwLCAweDUwLCAweGYxLCAweGRlLAotICAgICAgICAweGZmLCAweDlmLCAweDFiLCAweDI4LCAweDFiLCAweDhkLCAweGI0LCAweGUxLAotICAgICAgICAweGY1LCAweGYzLCAweGZlLCAweGVmLCAweGZhLAotICAgICAgICAweGZmLCAweDdmLCAweGY2LCAweGZmLCAweGZlLCAweDA3LCAweGVjLCAweGZiLAotICAgICAgICAweDdmLCAweGZmLCAweGZkLCAweGZmLCAweGQ2LCAweDhmLCAweGZmLCAweGY5LAotICAgICAgICAweGZmLCAweDM3LCAweDdmLCAweGZiLCAweGRkLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDYzLCAweGVmLCAweGRmLCAweGZhLCAweGYxLAotICAgICAgICAweGZmLCAweGZjLCAweGZlLCAweGRmLCAweGZiLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGY5LCAweGViLCAweGVmLCAweGZkLCAweGZmLAotICAgICAgICAweDdmLCAweDdmLCAweGZiLCAweGU3LCAweDlmLCAweDliLCAweGU1LCAweGNmLAotICAgICAgICAweGZkLCAweGY3LCAweGNmLCAweGZmLCAweGYzLCAweGJmLCAweDVmLCAweDVkLAotICAgICAgICAweDY3LCAweDlmLCAweGRmLCAweDdmLCAweGY5LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZlLCAweGZmLCAweGY1LCAweGRmLAotICAgICAgICAweDVmLCAweGZiLCAweGZiLCAweGJmLCAweGNmLCAweGRmLCAweGZiLCAweDdmLAotICAgICAgICAweGI3LCAweGZmLCAweGZiLCAweGZmLCAweGY3LAotICAgICAgICAweDNmLCAweDc4LCAweGZjLCAweGYzLCAweGZmLCAweGZmLCAweGRmLCAweGJmLAotICAgICAgICAweGYzLCAweDA1LCAweDNmLCAweGMxLCAweGYxLCAweGZmLCAweGY3LCAweGVmLAotICAgICAgICAweGVmLCAweGZmLCAweGZiLCAweDk3LCAweDFmLAotICAgICAgICAweGZmLCAweGQ4LCAweDdmLCAweGZiLCAweDdiLCAweGZiLCAweGY3LCAweGJmLAotICAgICAgICAweGJiLCAweDhlLCAweGQzLCAweGUxLCAweGZmLCAweGZkLCAweGY3LCAweGVkLAotICAgICAgICAweGZlLCAweDhiLCAweDVlLCAweDBmLCAweDY5LAotICAgICAgICAweGJmLCAweGY4LCAweGZjLCAweGZiLCAweDdiLCAweGZmLCAweGRmLCAweGVkLAotICAgICAgICAweGY3LCAweDhmLCAweGJmLCAweGNlLCAweGZlLCAweGZmLCAweGYzLCAweGZmLAotICAgICAgICAweGY2LCAweGZmLCAweGZlLCAweDhmLCAweDBmLAotICAgICAgICAweGZmLCAweGZjLCAweDdkLCAweGZmLCAweGZmLCAweGZkLCAweGYzLCAweGZmLAotICAgICAgICAweGJmLCAweDhmLCAweGUzLCAweGYwLCAweGZlLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGFlLCAweDBmLCAweDVkLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGQxLAotICAgICAgICAweGZkLCAweGYxLCAweGQzLCAweGRkLCAweGZkLCAweGYxLCAweGZiLCAweGZmLAotICAgICAgICAweGZiLCAweGZkLCAweGZmLCAweGZkLCAweGY2LAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZlLCAweGZkLCAweGZmLCAweDg3LCAweGZmLAotICAgICAgICAweGNjLCAweGYzLCAweGRmLCAweGNiLCAweGZmLCAweGZiLCAweGZiLCAweGZmLAotICAgICAgICAweDhiLCAweDdmLCAweGZhLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGY4LCAweGZlLCAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGU4LCAweGZmLCAweGZmLCAweGY5LCAweGZmLAotICAgICAgICAweGZiLCAweGFmLCAweDdmLCAweDhmLCAweDdlLAotICAgICAgICAweGJmLCAweGZiLCAweDc4LCAweGZmLCAweGZmLCAweGZmLCAweGQ3LCAweGQzLAotICAgICAgICAweGZkLCAweGMzLCAweDk1LCAweGM1LCAweGY4LCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGZiLCAweGZmLCAweGZjLCAweGYyLCAweDhmLAotICAgICAgICAweGZmLCAweDhiLCAweDdiLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZkLAotICAgICAgICAweDhmLCAweGVmLCAweGY0LCAweGI3LCAweGZmLCAweGZlLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDZmLCAweGY0LAotICAgICAgICAweGZmLCAweGZkLCAweGZmLCAweGZlLCAweGZmLCAweGRmLCAweGRmLCAweGZkLAotICAgICAgICAweGYxLCAweGIzLCAweGZmLCAweGQ4LCAweGZmLCAweGZkLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZkLCAweGY1LCAweDg3LCAweDdmLAotICAgICAgICAweDNmLCAweGVmLCAweGZmLCAweGZmLCAweDhmLCAweDVmLCAweGYwLCAweGZmLAotICAgICAgICAweGYxLCAweGVmLCAweDM5LCAweGM3LCAweDdlLCAweGYzLCAweDhmLCAweDdlLAotICAgICAgICAweGYxLCAweGJkLCAweGVkLCAweGZhLCAweDlhLAotICAgICAgICAweGZmLCAweDk4LCAweDdmLCAweGZhLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGYzLCAweDhmLCAweDVmLCAweDhhLCAweGZiLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGFmLCAweDVmLAotICAgICAgICAweGZmLCAweDg2LCAweGZmLCAweGZjLCAweGZmLCAweGZmLCAweGRmLCAweGZmLAotICAgICAgICAweDdmLCAweGJmLCAweGNiLCAweGJkLCAweDc3LCAweGYyLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweDc3LAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGVkLCAweGRmLCAweGZmLCAweGRkLAotICAgICAgICAweDExLCAweDczLCAweGZjLCAweGZjLCAweGVmLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGZkLCAweGZkLCAweDlkLCAweGYzLCAweGZmLAotICAgICAgICAweGZmLCAweGY5LCAweGVmLCAweGZmLCAweGYzLCAweDBmLCAweDgzLCAweDllLAotICAgICAgICAweGYwLCAweGYwLCAweGZmLCAweGVkLCAweGVmLCAweGZmLCAweGU5LCAweDhlLAotICAgICAgICAweDdiLCAweDlkLCAweDcwLCAweGU5LCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGVmLCAweGZmLCAweGYzLCAweGY5LAotICAgICAgICAweGY3LCAweGZmLCAweGZiLCAweGYzLCAweGVmLCAweGZkLCAweGViLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY4LAotICAgICAgICAweDNmLCAweDg3LCAweGVjLCAweGY4LCAweGU1LCAweDdmLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDg3LCAweGU4LCAweGYwLCAweGViLCAweGZmLAotICAgICAgICAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweDk3LAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGVkLCAweGRmLCAweGQzLCAweGJmLAotICAgICAgICAweDdmLCAweGZlLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGUzLCAweGVmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweGZmLCAweDc3LCAweGVmLCAweGZhLCAweGU3LCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGVmLCAweGVmLCAweGY3LCAweGVhLCAweGZlLAotICAgICAgICAweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGY3LCAweGViLCAweGYzLCAweGVmLCAweGZmLCAweGYzLCAweGZmLAotICAgICAgICAweGYxLCAweDdmLCAweGZmLCAweGU3LCAweGU3LCAweGY3LCAweGVhLCAweGVlLAotICAgICAgICAweGY3LCAweGZmLCAweGYxLCAweGZmLCAweGU3LAotICAgICAgICAweGZmLCAweGZiLCAweDZmLCAweGY2LCAweGU1LCAweGZmLCAweGViLCAweGRmLAotICAgICAgICAweGVmLCAweGZmLCAweGZmLCAweGY3LCAweGVmLCAweGZmLCAweGUzLCAweGVmLAotICAgICAgICAweGZmLCAweGZlLCAweGZmLCAweGZlLCAweGY3LAotICAgICAgICAweDdmLCAweGZmLCAweDRmLCAweDVmLCAweGUxLCAweGM3LCAweGVmLCAweGYxLAotICAgICAgICAweGZlLCAweDdmLCAweDdiLCAweGZmLCAweDZmLCAweGZmLCAweDkzLCAweDBiLAotICAgICAgICAweDdmLCAweGYxLCAweGZhLCAweGRmLCAweGZmLAotICAgICAgICAweGZmLCAweGZiLCAweDdmLCAweGRmLCAweGY3LCAweGVmLCAweDhmLCAweGZmLAotICAgICAgICAweDAwLCAweGVmLCAweGYwLCAweGRmLCAweDdmLCAweGVmLCAweGZmLCAweGZiLAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDZmLCAweGQxLAotICAgICAgICAweGZmLCAweGRlLCAweGZmLCAweGVmLCAweGI5LCAweDQ5LCAweDc0LCAweGYzLAotICAgICAgICAweGVmLCAweDdiLCAweDdmLCAweGZmLCAweGViLCAweGY3LCAweDg1LCAweDY3LAotICAgICAgICAweGYxLCAweGYwLCAweGUxLCAweGZmLCAweGY3LAotICAgICAgICAweDNmLCAweGFiLCAweGZmLCAweGM0LCAweGJiLCAweGZmLCAweDhjLCAweDlkLAotICAgICAgICAweDdlLCAweDNhLCAweGI1LCAweGJiLCAweGUzLCAweGZiLCAweGYzLCAweGNkLAotICAgICAgICAweGUzLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGRjLCAweGY3LCAweGY4LCAweDc3LCAweDhmLCAweGY3LCAweGZlLAotICAgICAgICAweDlmLCAweDk3LCAweDdhLCAweGYyLCAweDdmLCAweGZiLCAweDhmLCAweDFmLAotICAgICAgICAweDdkLCAweGZkLCAweGVmLCAweGIxLCAweDdkLAotICAgICAgICAweGZmLCAweGVmLCAweGE2LCAweGVmLCAweDk4LCAweDlkLCAweGYwLCAweGY0LAotICAgICAgICAweGY0LCAweGZmLCAweGZmLCAweDdmLCAweDhmLCAweDdmLCAweDg5LCAweDdmLAotICAgICAgICAweGU3LCAweGZmLCAweGZmLCAweGY3LCAweGZiLAotICAgICAgICAweGJmLCAweGE3LCAweGI3LCAweGRmLCAweGJhLCAweGZkLCAweGZlLCAweGViLAotICAgICAgICAweGZmLCAweGZmLCAweGM0LCAweGVmLCAweDhmLCAweDdjLCAweGY3LCAweDhmLAotICAgICAgICAweDdmLCAweGY5LCAweGZiLCAweGZmLCAweGZiLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGViLCAweDg3LCAweGZkLCAweGY0LCAweGY3LAotICAgICAgICAweDZmLCAweGZmLCAweGJmLCAweGZmLCAweGZmLCAweGVmLCAweGVmLCAweGRmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweDg1LCAweGRiLCAweGYyLCAweGJmLCAweGQ3LCAweGZmLAotICAgICAgICAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGYxLCAweGFmLAotICAgICAgICAweDdkLCAweGZmLCAweGY3LCAweGViLCAweGZmLAotICAgICAgICAweGJmLCAweGZkLCAweDhmLCAweGZmLCAweGZhLCAweDNmLCAweGZmLCAweGY2LAotICAgICAgICAweGI3LCAweGZmLCAweGZlLCAweGZiLCAweDhmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGYzLCAweGVlLCAweGJmLCAweDdmLCAweGZmLAotICAgICAgICAweGZmLCAweDY3LCAweGM2LCAweGFmLCAweGMzLCAweDc0LCAweGY3LCAweGZlLAotICAgICAgICAweGVlLCAweDhhLCAweDM3LCAweDZlLCAweGVjLCAweDg3LCAweDcxLCAweDkxLAotICAgICAgICAweDEzLCAweDdkLCAweGVjLCAweDg3LCAweGZmLAotICAgICAgICAweGJmLCAweDdiLCAweGYwLCAweGVmLCAweGZiLCAweDNmLCAweGI3LCAweGZjLAotICAgICAgICAweGZmLCAweGZmLCAweDk3LCAweDdkLCAweGU4LCAweGVmLCAweDlkLCAweDc3LAotICAgICAgICAweGZkLCAweGZiLCAweGZmLCAweGZiLCAweGJmLAotICAgICAgICAweGZmLCAweGZmLCAweGRlLCAweDc3LCAweGNkLCAweGZmLCAweGYxLCAweGZiLAotICAgICAgICAweGZmLCAweGZmLCAweGY5LCAweGUzLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZmLCAweGZjLCAweGNmLCAweGZmLCAweGYzLAotICAgICAgICAweDdmLCAweGZmLCAweGZlLCAweDc3LCAweGFmLCAweGY3LCAweGY4LCAweGVmLAotICAgICAgICAweGZmLCAweDc2LCAweGZhLCAweGZmLCAweDk5LCAweDZkLCAweDlmLCAweDZmLAotICAgICAgICAweGYxLCAweGJmLCAweDdmLCAweDdmLCAweGZjLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGJmLCAweGViLCAweGZhLCAweGRkLCAweGVmLAotICAgICAgICAweGJjLCAweGZkLCAweGZkLCAweGRmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLAotICAgICAgICAweGQxLCAweGZlLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweDNmLCAweDcwLCAweGY4LCAweGZmLCAweGY1LCAweGZmLCAweGZmLCAweDlmLAotICAgICAgICAweGYzLCAweDA5LCAweDFmLCAweGUxLCAweGYzLCAweGZkLCAweGZkLCAweGZmLAotICAgICAgICAweGVmLCAweGZmLCAweGY3LCAweDhlLCAweDFlLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweDc3LCAweGZmLCAweGZmLCAweDliLAotICAgICAgICAweDhmLCAweDhlLCAweGZiLCAweGYxLCAweGVmLCAweGU1LCAweGZkLCAweGVmLAotICAgICAgICAweGZlLCAweDlmLCAweDE2LCAweDAzLCAweDYxLAotICAgICAgICAweGJmLCAweGY4LCAweGZhLCAweGZkLCAweDczLCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweGY3LCAweDhkLCAweDlmLCAweGUxLCAweGYxLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGZjLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGY3LCAweGY3LCAweGZkLCAweGZmLAotICAgICAgICAweDlmLCAweDhmLCAweGUxLCAweGYxLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZkLCAweGZmLCAweDhlLCAweDBmLCAweDdkLAotICAgICAgICAweGZmLCAweGY3LCAweGY5LCAweGZlLCAweGYzLCAweDdmLCAweGZmLCAweGY3LAotICAgICAgICAweGY3LCAweGYzLCAweGZkLCAweGVmLCAweGZmLCAweGY5LCAweGVkLCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweDdlLCAweGZlLCAweGY3LCAweGZmLCAweDhiLCAweGY3LAotICAgICAgICAweGZjLCAweGViLCAweGViLCAweGVkLCAweGViLCAweGY5LCAweGZkLCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweGYyLCAweGZlLCAweGVkLAotICAgICAgICAweDdmLCAweGY4LCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweGY3LCAweDhkLCAweGZmLCAweGU4LCAweGZmLCAweGZkLCAweGVmLCAweGZlLAotICAgICAgICAweGZkLCAweGRmLCAweGY2LCAweDhmLCAweDZmLAotICAgICAgICAweGJmLCAweGZmLCAweDc4LCAweGZmLCAweGY3LCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweGUzLCAweDlmLCAweGU1LCAweGVhLCAweGY1LCAweGZkLCAweGZmLAotICAgICAgICAweGVkLCAweGVmLCAweGZmLCAweGY3LCAweDhmLAotICAgICAgICAweGZmLCAweDA3LCAweGZmLCAweGY5LCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweDhmLCAweGZmLCAweGYzLCAweDkzLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweGZmLCAweGY3LCAweDhmLCAweDdmLCAweGYzLAotICAgICAgICAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweDhiLCAweGZmLCAweGU4LCAweGZiLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweGVmLCAweGY3LCAweGY1LCAweDhlLCAweDdmLAotICAgICAgICAweDNmLCAweGVjLCAweGY5LCAweGZjLCAweDhmLCAweDdmLCAweGYwLCAweGVmLAotICAgICAgICAweGVmLCAweGZmLCAweDFkLCAweGVkLCAweDdlLCAweGZkLCAweDhmLCAweDZlLAotICAgICAgICAweGYxLCAweGQ3LCAweGY3LCAweGRlLCAweDhjLAotICAgICAgICAweGZmLCAweDgwLCAweDdmLCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZiLCAweDhmLCAweDZmLCAweDkwLCAweGZmLCAweGYzLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDg3LCAweGZiLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDlmLCAweGZmLCAweDkzLCAweDdmLCAweGYyLCAweGZmLCAweGZlLAotICAgICAgICAweGVmLCAweGZmLCAweGZmLCAweDlmLCAweDY5LAotICAgICAgICAweGZmLCAweGZiLCAweGVmLCAweGZmLCAweGY2LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDFmLCAweDczLCAweGZlLCAweGY2LCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweGVmLCAweGU3LCAweDk3LCAweDc3LCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGU3LCAweDFmLCAweDg2LCAweDk1LAotICAgICAgICAweGYwLCAweGY2LCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDhmLAotICAgICAgICAweDZkLCAweDkzLCAweDcxLCAweGY4LCAweGZkLAotICAgICAgICAweGZmLCAweGZlLCAweGVmLCAweGZkLCAweGYyLCAweGZmLCAweGY2LCAweGZmLAotICAgICAgICAweDZmLCAweGVmLCAweGY3LCAweGZkLCAweGZmLCAweGZmLCAweGZkLCAweGZmLAotICAgICAgICAweGZkLCAweGZmLCAweGVmLCAweGZmLCAweGY1LAotICAgICAgICAweDNmLCAweDgyLCAweGY4LCAweGY4LCAweGU2LCAweDdmLCAweGYyLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDg3LCAweDg3LCAweGYwLCAweGYwLCAweGZjLCAweGVmLAotICAgICAgICAweGZkLCAweGY3LCAweGVmLCAweGVlLCAweDg3LAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGU3LCAweGZmLCAweGY2LCAweGY3LAotICAgICAgICAweDdmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGYyLCAweGU2LCAweGZmLCAweGY1LCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGU3LCAweGZmLCAweGY3LCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGY3LCAweGVmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweGZhLCAweGViLCAweGZmLCAweGUzLCAweGZmLCAweGY1LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGVmLCAweGY3LCAweGZmLCAweGZkLCAweGVlLAotICAgICAgICAweGZkLCAweGZmLCAweGZmLCAweGVmLCAweGVmLAotICAgICAgICAweGZmLCAweGY2LCAweGZiLCAweDdhLCAweGU3LCAweGZmLCAweDkxLCAweGVmLAotICAgICAgICAweGZmLCAweGUyLCAweGZmLCAweGY3LCAweGY3LCAweGY3LCAweGZkLCAweGZmLAotICAgICAgICAweGZkLCAweGVmLCAweGViLCAweGY1LCAweGU3LAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGJlLCAweGYxLCAweDkzLCAweGZkLCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDJlLCAweDJmLCAweDU5LCAweDhmLAotICAgICAgICAweDZmLCAweGY5LCAweGY3LCAweGZmLCAweGZhLAotICAgICAgICAweGZmLCAweDRmLCAweGJmLCAweGM0LCAweGZiLCAweGY1LCAweDBmLCAweGZmLAotICAgICAgICAweDAwLCAweGZmLCAweGQwLCAweDdmLCAweDcwLCAweGFmLCAweDdmLCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDdmLCAweGIxLAotICAgICAgICAweGZmLCAweGZmLCAweGRhLCAweGZmLCAweDJmLCAweDRmLCAweDdlLCAweGY5LAotICAgICAgICAweGZiLCAweGZmLCAweDVmLCAweGVmLCAweGZmLCAweGZmLCAweDk5LCAweDI5LAotICAgICAgICAweDcxLCAweGYxLCAweGVkLCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweGI3LCAweGVmLCAweGRmLCAweGZmLCAweGY5LCAweGZlLCAweGZkLAotICAgICAgICAweGZmLCAweGZmLCAweGI3LCAweDlmLCAweGZmLCAweGFiLCAweDczLCAweGZkLAotICAgICAgICAweGFkLCAweDNjLCAweDZiLCAweGZmLCAweGZhLAotICAgICAgICAweGZmLCAweGU4LCAweGY3LCAweGJmLCAweDZmLCAweDhmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweDg3LCAweDdmLCAweGUwLCAweDdmLCAweGJmLCAweDVmLCAweDkzLAotICAgICAgICAweDdlLCAweGU0LCAweGY2LCAweDk3LCAweDdiLAotICAgICAgICAweGZmLCAweGRmLCAweDI3LCAweGFmLCAweGE3LCAweGZmLCAweGY0LCAweGY2LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDVmLCAweGRmLCAweGZiLCAweDg3LCAweDFmLAotICAgICAgICAweDcwLCAweGYzLCAweGZlLCAweDdmLCAweGZiLAotICAgICAgICAweGJmLCAweGI3LCAweDYxLCAweGI1LCAweGZjLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweGEyLCAweGZmLCAweGQ4LCAweGExLCAweDc3LCAweGRmLAotICAgICAgICAweGU2LCAweGZmLCAweGZmLCAweDdlLCAweGM0LAotICAgICAgICAweGZmLCAweGZmLCAweGY2LCAweGQ3LCAweDk3LCAweGRiLCAweGU4LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweGZmLCAweGI5LCAweDNiLAotICAgICAgICAweGY4LCAweGZmLCAweGVmLCAweGU3LCAweGJlLAotICAgICAgICAweGZmLCAweGZmLCAweDg2LCAweGJmLCAweGUyLCAweGFkLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDlmLCAweGZmLCAweDhmLCAweDNmLCAweDYzLCAweGNmLAotICAgICAgICAweDdiLCAweGZlLCAweGZmLCAweGZkLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGJhLCAweDdmLCAweGY3LCAweGVlLAotICAgICAgICAweDE3LCAweGY3LCAweGVlLCAweGVmLCAweDk3LCAweDdmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGZkLCAweDllLCAweDc3LCAweGYzLAotICAgICAgICAweGZmLCAweGZiLCAweGMzLCAweDhmLCAweGMxLCAweDcwLCAweDcxLCAweGZmLAotICAgICAgICAweGY3LCAweDlmLCAweDc3LCAweDdlLCAweGI2LCAweDRmLCAweGI5LCAweDAxLAotICAgICAgICAweDFmLCAweDFiLCAweDdhLCAweDlhLCAweDdlLAotICAgICAgICAweGJmLCAweGZmLCAweGYwLCAweDlmLCAweGVmLCAweDc5LCAweDNmLCAweGY2LAotICAgICAgICAweGZmLCAweGZkLCAweDlkLCAweDdiLCAweGYyLCAweGZmLCAweGM5LCAweGYzLAotICAgICAgICAweGZmLCAweDdkLCAweGZiLCAweGZkLCAweGJmLAotICAgICAgICAweGZmLCAweGZkLCAweGJmLCAweDc3LCAweDhmLCAweGZmLCAweGYxLCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweGJiLCAweDdmLCAweGJmLCAweDZmLAotICAgICAgICAweGYzLCAweGZlLCAweGZmLCAweGU3LCAweGJmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweDVmLCAweGFmLCAweGYxLCAweGZjLCAweGY3LAotICAgICAgICAweGZmLCAweDc3LCAweGZlLCAweGZmLCAweGRmLCAweGZmLCAweGRmLCAweGZmLAotICAgICAgICAweGUzLCAweDllLCAweDdmLCAweDdhLCAweGUzLAotICAgICAgICAweGZmLCAweGZmLCAweDZmLCAweGZmLCAweGFmLCAweGZjLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweGZlLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGYzLCAweGZiLAotICAgICAgICAweGY3LCAweGZmLCAweGY5LCAweGZlLCAweGZmLAotICAgICAgICAweDNmLCAweDcwLCAweGY4LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDBmLCAweDBmLCAweGYxLCAweGYxLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGVmLCAweGZmLCAweGY3LCAweDhjLCAweDFlLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweDdmLCAweGY3LCAweGZmLCAweDhmLAotICAgICAgICAweDhmLCAweDg4LCAweGYxLCAweGYxLCAweGVmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGVlLCAweDk3LCAweDFlLCAweDAxLCAweDYxLAotICAgICAgICAweGJmLCAweGYwLCAweGZhLCAweGZkLCAweDc1LCAweGZmLCAweGY1LCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDlmLCAweGUxLCAweGYxLCAweGZmLCAweGY3LCAweGVmLAotICAgICAgICAweGZlLCAweGZmLCAweGZmLCAweDhmLCAweDFmLAotICAgICAgICAweGZmLCAweGZhLCAweDdmLCAweGZmLCAweGZkLCAweGZmLCAweGZkLCAweGZmLAotICAgICAgICAweDlmLCAweDlmLCAweGY5LCAweGY5LCAweGZmLCAweGVmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDllLCAweDBmLCAweDc1LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweGY3LCAweGY3LCAweGZmLCAweGVmLCAweGY3LCAweGU3LCAweGVmLAotICAgICAgICAweGVmLCAweGVmLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweGZmLAotICAgICAgICAweGY4LCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGY3LCAweGU3LCAweGVmLAotICAgICAgICAweDlmLCAweDZmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGY4LCAweGZmLCAweGZmLCAweGZkLCAweGZmLCAweGZkLCAweDhmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGY3LCAweGVmLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweDlkLCAweDdlLAotICAgICAgICAweGJmLCAweGZmLCAweDc4LCAweGZmLCAweGZkLCAweGZmLCAweGZkLCAweGY3LAotICAgICAgICAweGZmLCAweGY3LCAweDhmLCAweGY3LCAweGYwLCAweGY3LCAweGY3LCAweGZmLAotICAgICAgICAweGY3LCAweGVmLCAweGZlLCAweGU3LCAweDlmLAotICAgICAgICAweGZmLCAweDhmLCAweDdmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGY4LCAweDhmLCAweGZmLCAweGY4LCAweGZmLCAweGVmLAotICAgICAgICAweGZmLCAweGZmLCAweDhlLCAweDZmLCAweGUxLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweDg3LCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGVmLCAweGVmLCAweGZmLCAweDlmLCAweDdmLAotICAgICAgICAweDNmLCAweGZmLCAweGY4LCAweGZmLCAweDhmLCAweDdmLCAweGYwLCAweDlmLAotICAgICAgICAweGY3LCAweGZiLCAweDA3LCAweGU3LCAweDc4LCAweGY3LCAweDhmLCAweDdlLAotICAgICAgICAweGYxLCAweDlmLCAweDdmLCAweGZmLCAweDllLAotICAgICAgICAweGZmLCAweDgwLCAweDdmLCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweDhmLCAweDZmLCAweDgwLCAweGZmLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGVmLCAweGZmLCAweGZlLCAweDlmLCAweDdmLAotICAgICAgICAweGZmLCAweDg4LCAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDlmLCAweGVmLCAweDgxLCAweDdmLCAweGYwLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweDlmLCAweDdmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDk3LCAweDc3LCAweGY4LCAweGZmLCAweGVmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGVmLCAweGVmLCAweDhmLCAweDc2LCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweDBmLCAweGY3LCAweDg4LAotICAgICAgICAweGY3LCAweGYwLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGVmLCAweDhlLAotICAgICAgICAweDA3LCAweDk5LCAweDYxLCAweGUxLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGY3LCAweGVmLCAweGZmLCAweGU3LCAweGVlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDg3LCAweGY4LCAweGY4LCAweGZmLCAweDdmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDhmLCAweGUwLCAweGYwLCAweGVmLCAweGZmLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGU3LCAweGZmLAotICAgICAgICAweGY2LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDZmLCAweGZmLCAweGU3LCAweGZmLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweDk3LCAweGVlLCAweGY5LCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDgwLCAweDg4LCAweGZmLCAweGY4LAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweDBmLCAweDFmLCAweDc5LCAweDliLAotICAgICAgICAweDdmLCAweGYwLCAweGZlLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDRmLCAweDdiLCAweGY3LCAweGY3LCAweGY4LCAweDBmLCAweGZmLAotICAgICAgICAweDAwLCAweGZmLCAweGQwLCAweDRmLCAweDc1LCAweDhjLCAweDc5LCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDdlLCAweGIxLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGZlLCAweDhmLCAweDdmLCAweDcwLCAweGYwLAotICAgICAgICAweGZmLCAweGY3LCAweDdmLCAweGZmLCAweGY3LCAweGZmLCAweDg0LCAweDBlLAotICAgICAgICAweDczLCAweGZmLCAweGY3LCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweGJkLCAweGZkLCAweGZiLCAweGY3LCAweGU4LCAweGZmLCAweGZmLAotICAgICAgICAweDc4LCAweGYwLCAweDNmLCAweGJmLCAweGUzLCAweDliLCAweDZmLCAweGZmLAotICAgICAgICAweDk3LCAweDFmLCAweDdmLCAweGNmLCAweGZlLAotICAgICAgICAweGZmLCAweGY4LCAweGY3LCAweGZmLCAweDhmLCAweDgwLCAweGZmLCAweGY4LAotICAgICAgICAweGZmLCAweDhmLCAweDc4LCAweGYwLCAweDdmLCAweDlmLCAweDdmLCAweDliLAotICAgICAgICAweDdmLCAweGYxLCAweGZmLCAweDk3LCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweDA3LCAweGZmLCAweDg3LCAweDdmLCAweGYwLCAweGY4LAotICAgICAgICAweGZmLCAweDdmLCAweGZiLCAweDdmLCAweGVlLCAweGZiLCAweDk5LCAweDE5LAotICAgICAgICAweDczLCAweGVmLCAweGY3LCAweGVmLCAweGZmLAotICAgICAgICAweGJmLCAweDg3LCAweDA0LCAweGZjLCAweGZmLCAweDA4LCAweGY3LCAweGZmLAotICAgICAgICAweDdiLCAweDdmLCAweDhlLCAweDhmLCAweGY5LCAweDk4LCAweDZmLCAweGYzLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGRmLAotICAgICAgICAweGZmLCAweGZmLCAweDczLCAweGZmLCAweGY3LCAweDlmLCAweGY4LCAweGZiLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDNkLAotICAgICAgICAweDYxLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweDA3LCAweGZmLCAweGY4LCAweDc4LCAweGZmLCAweGVlLAotICAgICAgICAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweDg3LCAweDFmLCAweDcxLCAweGUzLAotICAgICAgICAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDc3LCAweDhiLCAweDdmLCAweGY4LCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweDA3LCAweGU3LCAweGZhLCAweDc3LCAweDhmLCAweDdmLCAweGZmLCAweGVmLAotICAgICAgICAweGYxLCAweGVmLCAweDlmLCAweDc3LCAweGY5LAotICAgICAgICAweGZmLCAweGY4LCAweDczLCAweDhmLCAweGY4LCAweDBmLCAweDg4LCAweDg4LAotICAgICAgICAweGY4LCAweDk4LCAweDc3LCAweDc4LCAweDhmLCAweDZmLCAweDg3LCAweDdiLAotICAgICAgICAweGY3LCAweGZmLCAweGVmLCAweDg3LCAweDZmLAotICAgICAgICAweGJmLCAweDdmLCAweGYwLCAweGZmLCAweDhmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweDdlLCAweGZmLCAweDlmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweGViLAotICAgICAgICAweGVmLCAweGZmLCAweGZiLCAweGZmLCAweDlmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDc3LCAweGY4LCAweDdmLCAweGY4LCAweGY3LAotICAgICAgICAweGZmLCAweDdmLCAweGY3LCAweGZmLCAweDlmLCAweDdmLCAweDliLCAweDZmLAotICAgICAgICAweGYxLCAweGZlLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweDdmLCAweDdmLCAweDhmLCAweGZmLCAweDhmLCAweGZmLCAweDdmLCAweDhmLAotICAgICAgICAweGZmLCAweDcwLCAweGZiLCAweDZmLCAweGZmLCAweGZmLCAweGZmLCAweGY1LAotICAgICAgICAweGY5LCAweGZmLCAweGZmLCAweGZmLCAweGY0LAotICAgICAgICAweGZmLCAweDg3LCAweGZmLCAweDc0LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweDdlLCAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGU5LCAweGZmLCAweGY3LCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDc4LCAweGY4LCAweDdmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweDA3LCAweDFmLCAweGUxLCAweGYxLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGVmLCAweGVmLCAweGZmLCAweDhlLCAweDBmLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDg3LAotICAgICAgICAweDlmLCAweDg4LCAweGYxLCAweGUxLCAweGZmLCAweGVmLCAweGY3LCAweGVmLAotICAgICAgICAweGZlLCAweDlmLCAweDBmLCAweDA5LCAweDcxLAotICAgICAgICAweGJmLCAweGYwLCAweGY4LCAweGZmLCAweDc3LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDhmLCAweGYwLCAweGYwLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGZlLCAweGY3LCAweGZmLCAweDhlLCAweDFmLAotICAgICAgICAweDdmLCAweGY4LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDhmLCAweGY5LCAweGY4LCAweGZlLCAweGZmLCAweGU3LCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweDk2LCAweDBmLCAweDYxLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGVmLCAweGZmLCAweGY3LCAweGU3LCAweGVmLAotICAgICAgICAweGZmLCAweGU3LCAweGZmLCAweGY3LCAweGZlLAotICAgICAgICAweGZmLCAweGY3LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweGZmLAotICAgICAgICAweGY4LCAweGVmLCAweGVmLCAweGVmLCAweGZmLCAweGY3LCAweGY3LCAweGZmLAotICAgICAgICAweDlmLCAweDY3LCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGUwLCAweGY3LCAweGZmLCAweGY3LCAweGZlLAotICAgICAgICAweGY3LCAweGY3LCAweGZmLCAweDhmLCAweDZlLAotICAgICAgICAweDNmLCAweGZiLCAweDdjLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGU3LCAweDlmLCAweGVmLCAweGYwLCAweGZmLCAweGU3LCAweGVmLAotICAgICAgICAweGY3LCAweGVmLCAweGY2LCAweGY2LCAweDg3LAotICAgICAgICAweGZmLCAweDA3LCAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGY0LCAweDlmLCAweGZmLCAweGZjLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGYwLAotICAgICAgICAweDdmLCAweGZjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweDg3LCAweGZmLCAweGU4LCAweGZmLCAweGY3LCAweGZmLCAweGZmLAotICAgICAgICAweGVmLCAweGU3LCAweGY3LCAweDhmLCAweDZmLAotICAgICAgICAweDNmLCAweGZmLCAweGZjLCAweGZmLCAweDhmLCAweDdmLCAweGYwLCAweGNmLAotICAgICAgICAweGVmLCAweGU4LCAweDFiLCAweGVmLCAweDdjLCAweGZmLCAweDhmLCAweDdlLAotICAgICAgICAweGUxLCAweDk3LCAweDc3LCAweGZmLCAweDllLAotICAgICAgICAweGZmLCAweDgwLCAweDdmLCAweGZjLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweDhmLCAweDdmLCAweDgwLCAweGZmLCAweGYxLCAweGZmLCAweGZlLAotICAgICAgICAweGVmLCAweGZmLCAweGZmLCAweDlmLCAweDdmLAotICAgICAgICAweGZmLCAweDg0LCAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDZmLCAweDlmLCAweGZmLCAweDkxLCAweDdmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDFmLCAweDc3LCAweGY4LCAweGY3LCAweGVmLCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGY3LCAweGVmLCAweDg3LCAweDY3LCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDBmLCAweDhiLCAweDhjLAotICAgICAgICAweGYwLCAweGY4LCAweGY3LCAweGZmLCAweGVmLCAweGZmLCAweGU3LCAweDllLAotICAgICAgICAweDY3LCAweDg5LCAweDc3LCAweGYxLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYzLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweGZiLCAweGZmLCAweGVmLCAweGZmLCAweGU3LCAweGZmLAotICAgICAgICAweGY3LCAweGY3LCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweGJmLCAweDg3LCAweGY4LCAweGY4LCAweGY3LCAweDdmLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDhmLCAweGUwLCAweGYwLCAweGU3LCAweGZlLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweDhlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZiLCAweGZmLCAweGZiLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGYzLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGY3LCAweGZmLCAweDhiLCAweGZmLAotICAgICAgICAweGZjLCAweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGVlLCAweGZmLCAweGY2LCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweDhmLCAweGJmLCAweGY5LCAweDhmLCAweGZmLCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweDFmLCAweDFmLCAweDcxLCAweDg5LAotICAgICAgICAweDdmLCAweGYxLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDRmLCAweGI4LCAweGM2LCAweGZiLCAweGZkLCAweDBmLCAweGZmLAotICAgICAgICAweDAwLCAweGZmLCAweGQwLCAweDdmLCAweDc5LCAweDkwLCAweDdmLCAweGY5LAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDdmLCAweDgxLAotICAgICAgICAweGZmLCAweGZmLCAweGNmLCAweGZmLCAweGIwLCAweDRmLCAweDc3LCAweGY0LAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGU3LCAweGVlLCAweGZmLCAweDk3LCAweDA3LAotICAgICAgICAweDY5LCAweGYxLCAweGY3LCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweGJhLCAweGZmLCAweDRkLCAweGZlLCAweGU1LCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGVmLCAweGJmLCAweDlmLCAweGU3LCAweDlmLCAweDc3LCAweGU5LAotICAgICAgICAweDlmLCAweDFmLCAweDc5LCAweGMxLCAweGZlLAotICAgICAgICAweGZmLCAweGY4LCAweGY3LCAweDNmLCAweGZmLCAweDlmLCAweGY3LCAweGY4LAotICAgICAgICAweGZmLCAweDg3LCAweDdmLCAweGYwLCAweDdmLCAweDk3LCAweDdmLCAweDg5LAotICAgICAgICAweDdlLCAweGYxLCAweGZmLCAweDlmLCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweDM3LCAweGJmLCAweGIzLCAweDdmLCAweGYyLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweDdmLCAweDdiLCAweGZlLCAweDg3LCAweDFmLAotICAgICAgICAweDcxLCAweGYxLCAweGZmLCAweDdmLCAweGZiLAotICAgICAgICAweGZmLCAweGZmLCAweDcwLCAweGI3LCAweGZlLCAweDdiLCAweGZmLCAweGYzLAotICAgICAgICAweGJmLCAweGY3LCAweGZmLCAweGZmLCAweGY5LCAweDlmLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZiLAotICAgICAgICAweGJmLCAweGZmLCAweGY0LCAweGNmLCAweDg3LCAweGQ4LCAweGY4LCAweGY4LAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGU5LCAweGZmLCAweDhmLCAweDFmLAotICAgICAgICAweDcxLCAweGZmLCAweGVmLCAweGZmLCAweDhkLAotICAgICAgICAweGZmLCAweGZmLCAweDg3LCAweGJmLCAweGY5LCAweDNmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDlmLCAweDFmLCAweDcxLCAweGY5LAotICAgICAgICAweGZmLCAweDdiLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGNiLCAweGZmLCAweGJkLCAweDdmLCAweGZiLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGY4LCAweDdmLCAweDlmLCAweDdmLCAweGYxLCAweGVmLAotICAgICAgICAweGZmLCAweGY3LCAweDhmLCAweDdmLCAweGY5LAotICAgICAgICAweGZmLCAweGY4LCAweDQzLCAweDhmLCAweGM0LCAweDc1LCAweDdkLCAweGZmLAotICAgICAgICAweGZmLCAweDk3LCAweDdmLCAweDc4LCAweDhmLCAweDZmLCAweDk5LCAweDE3LAotICAgICAgICAweDE5LCAweDcxLCAweGY5LCAweDhmLCAweDZmLAotICAgICAgICAweGJmLCAweDdmLCAweGYwLCAweDhmLCAweGY2LCAweDdkLCAweDM3LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDlmLCAweDdmLCAweGUwLCAweGZmLCAweGZmLCAweGVmLAotICAgICAgICAweGZmLCAweGY3LCAweGZiLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGZmLCAweGJmLCAweDc3LCAweDhlLCAweGZmLCAweGYwLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGY3LCAweDdmLCAweDk3LCAweDdmLCAweDk5LCAweDdmLAotICAgICAgICAweGY5LCAweGZlLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGNmLCAweGJmLCAweGY5LCAweGZhLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweDhmLCAweDdmLCAweDcxLCAweGY2LAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGI3LCAweGZlLCAweGZiLCAweGZmLAotICAgICAgICAweGY2LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweDc4LCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweDA4LCAweDBmLCAweGYxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhlLCAweDBlLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweDhmLCAweDgwLCAweGYxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweDhmLCAweDBlLCAweDAxLCAweDcxLAotICAgICAgICAweGJmLCAweGY4LCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDhmLCAweGYxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDhmLCAweGYxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweGZmLAotICAgICAgICAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweDg4LCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdlLAotICAgICAgICAweGJmLCAweGZmLCAweDc4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweDhmLCAweGY3LCAweGYwLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweDg3LCAweDdmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGY4LCAweDhmLCAweGY3LCAweGY4LCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhlLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDg3LCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweDNmLCAweGZmLCAweGY4LCAweGZmLCAweDhmLCAweDdmLCAweGYwLCAweGRmLAotICAgICAgICAweGZmLCAweGY2LCAweDA3LCAweGZmLCAweDc4LCAweGZmLCAweDhmLCAweDdlLAotICAgICAgICAweGYxLCAweDlmLCAweDdmLCAweGZkLCAweDhlLAotICAgICAgICAweGZmLCAweDgwLCAweDdmLCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGY3LCAweDhmLCAweDdmLCAweDgwLCAweGZmLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDgwLCAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDhmLCAweGZmLCAweDgxLCAweDdmLCAweGYwLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDc3LCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDZlLCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDBmLCAweDhmLCAweDg4LAotICAgICAgICAweGYwLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhlLAotICAgICAgICAweDdmLCAweDgxLCAweDdmLCAweGYxLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweDg3LCAweGY4LCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDhmLCAweGYwLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweDg3LCAweGZmLAotICAgICAgICAweGY4LCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweGZlLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDNmLCAweDhmLCAweGYwLCAweDg1LCAweGZmLCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweDBkLCAweDBmLCAweDcxLCAweDgxLAotICAgICAgICAweDdlLCAweGYxLCAweGZlLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDVmLCAweDNkLCAweGYwLCAweGY1LCAweGZhLCAweDBmLCAweGZmLAotICAgICAgICAweDAwLCAweGZmLCAweDgwLCAweDBmLCAweGYxLCAweDg4LCAweDdmLCAweGYxLAotICAgICAgICAweDhmLCAweDdlLCAweDgxLCAweDdlLCAweGMxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJhLCAweDRmLCAweDc1LCAweGZhLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAotICAgICAgICAweDcxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDNmLCAweGJmLCAweGZmLCAweGNmLCAweGZmLCAweGZhLCAweGZmLCAweGZlLAotICAgICAgICAweDdmLCAweGRmLCAweDdmLCAweGY0LCAweGZmLCAweDhmLCAweDdmLCAweGYxLAotICAgICAgICAweDhmLCAweDBmLCAweDcxLCAweGYxLCAweGJlLAotICAgICAgICAweGZmLCAweGY4LCAweGY3LCAweGJiLCAweDdmLCAweDg1LCAweGZmLCAweGYwLAotICAgICAgICAweGZmLCAweDhmLCAweDdmLCAweGYwLCAweDdmLCAweDg3LCAweDdmLCAweDgxLAotICAgICAgICAweDdlLCAweGYxLCAweDhmLCAweDBmLCAweDcxLAotICAgICAgICAweGZmLCAweGZmLCAweDg3LCAweDhmLCAweDhkLCAweGZkLCAweGY1LCAweGZmLAotICAgICAgICAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZlLCAweDhmLCAweDBmLAotICAgICAgICAweDcxLCAweGYxLCAweGZlLCAweDdmLCAweGY3LAotICAgICAgICAweGJmLCAweDA3LCAweGMwLCAweGJmLCAweGY3LCAweGZkLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweDg1LCAweDhmLCAweGY5LCAweDhmLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweDdmLCAweGY2LCAweGZmLCAweDgzLAotICAgICAgICAweGZmLCAweGZmLCAweGY0LCAweGZmLCAweDhmLCAweGRhLCAweGYwLCAweGI2LAotICAgICAgICAweGRmLCAweGZkLCAweGY2LCAweGZmLCAweGY5LCAweGZmLCAweDhmLCAweDFmLAotICAgICAgICAweDcxLCAweGZkLCAweDhmLCAweDdiLCAweGZkLAotICAgICAgICAweGZmLCAweGZmLCAweGI3LCAweDhmLCAweGYwLCAweGJkLCAweGZmLCAweGZkLAotICAgICAgICAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDBmLCAweDcxLCAweGYxLAotICAgICAgICAweGZmLCAweDdiLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJhLCAweDdmLCAweGY1LCAweGY3LAotICAgICAgICAweDBmLCAweGY3LCAweGYwLCAweDdmLCAweDg3LCAweDdmLCAweGYxLCAweGZmLAotICAgICAgICAweGZmLCAweGZlLCAweDhmLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGY4LCAweDQ3LCAweDhmLCAweGNhLCAweDcwLCAweDdhLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDdmLCAweDcwLCAweDhmLCAweDdmLCAweDgxLCAweDBlLAotICAgICAgICAweDAxLCAweDAxLCAweDcxLCAweDgxLCAweDdmLAotICAgICAgICAweGJmLCAweDdmLCAweGYwLCAweDhmLCAweGZmLCAweDcwLCAweDNmLCAweGZmLAotICAgICAgICAweGZkLCAweGZlLCAweDhmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZlLCAweGZiLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweGZmLCAweGJmLCAweDdmLCAweDg1LCAweDdmLCAweGYwLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLCAweDgxLCAweDdmLAotICAgICAgICAweDgxLCAweGZlLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGZmLCAweGZmLCAweGNmLCAweDg3LCAweGZhLCAweDc1LCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDdmLCAweDcwLCAweGZlLAotICAgICAgICAweGZmLCAweDg3LCAweGZmLCAweDRiLCAweGJmLCAweDdmLCAweGZkLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZlLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweDNmLCAweDc4LCAweGY4LCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDBmLCAweDcxLCAweGYxLCAweGZmLCAweDdmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhlLCAweDBlLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweDdmLCAweGZmLCAweDdmLCAweDhmLAotICAgICAgICAweDhmLCAweDAwLCAweDcxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweDhmLCAweDBlLCAweDAxLCAweDcxLAotICAgICAgICAweGJmLCAweGY4LCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweDdmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDBmLCAweDcxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZlLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAotICAgICAgICAweGZmLCAweGY4LCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDBmLCAweDcxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDdmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweDdmLCAweDhmLCAweGZmLAotICAgICAgICAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweDdmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdlLAotICAgICAgICAweGJmLCAweGZmLCAweDc4LCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweDhmLAotICAgICAgICAweGZmLCAweDA3LCAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweGZmLCAweGYwLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhlLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweDNmLCAweGZmLCAweGY4LCAweGZmLCAweDhmLCAweDdmLCAweGYwLCAweDhmLAotICAgICAgICAweGZmLCAweGZjLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweDhmLCAweDdlLAotICAgICAgICAweGYxLCAweDhmLCAweDdmLCAweGYzLCAweDhlLAotICAgICAgICAweGZmLCAweDgwLCAweDdmLCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweDdmLCAweDgwLCAweDdmLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDgwLCAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDhmLCAweDdmLCAweDgxLCAweDdmLCAweGYwLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDhmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDBmLCAweGZmLCAweDgwLAotICAgICAgICAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDhlLAotICAgICAgICAweDBmLCAweDAxLCAweDcxLCAweGYwLCAweGZmLAotICAgICAgICAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGVmLCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAotICAgICAgICAweGJmLCAweDg3LCAweGY4LCAweGY4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDdmLCAweDhmLCAweDhmLCAweGYwLCAweGYwLCAweGZlLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDhmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweDdlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweDdlLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweDdmLAotICAgICAgICAweDhmLCAweGZlLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweDBlLCAweDhmLCAweDcwLCAweDgwLCAweGZmLCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDBmLCAweDdmLCAweGYxLCAweDBmLAotICAgICAgICAweDdmLCAweGYxLCAweGZlLCAweGZmLCAweDlmLAotICAgICAgICAweGJmLCAweDFmLCAweGZiLCAweDBjLCAweGZmLCAweGYwLCAweDhmLCAweGZmLAotICAgICAgICAweDAwLCAweGZmLCAweGIwLCAweDNmLCAweDcxLCAweDgwLCAweGZmLCAweGYxLAotICAgICAgICAweDhmLCAweDdmLCAweDgxLCAweDdlLCAweGMxLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweDhmLCAweDBmLCAweDcwLCAweGYwLAotICAgICAgICAweDhmLCAweDdmLCAweDcwLCAweGNmLCAweDhmLCAweGZmLCAweDcxLCAweDBmLAotICAgICAgICAweDdlLCAweGYxLCAweDhmLCAweDdmLCAweGYxLAotICAgICAgICAweDdmLCAweGZmLCAweDdmLCAweDBmLCAweGZmLCAweDc4LCAweDhmLCAweDhmLAotICAgICAgICAweDcwLCAweDcwLCAweDdmLCAweGZlLCAweGZmLCAweDhmLCAweGZmLCAweDcwLAotICAgICAgICAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGJlLAotICAgICAgICAweGZmLCAweGY4LCAweGY3LCAweDBiLCAweGY3LCAweDg4LCAweGY3LCAweGYwLAotICAgICAgICAweDhmLCAweDhmLCAweDcwLCAweGYwLCAweDdlLCAweDczLCAweGZmLCAweDhmLAotICAgICAgICAweDdlLCAweGYwLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweDc4LCAweDc3LCAweGZmLCAweDhmLCAweDhmLCAweGYwLCAweGYwLAotICAgICAgICAweGZmLCAweDhmLCAweDc3LCAweDcwLCAweDc3LCAweDdmLCAweGZmLCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweDc3LCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweDc3LCAweDdmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGVmLCAweDdmLCAweGZmLCAweGJmLAotICAgICAgICAweGJmLCAweGZmLCAweDc0LCAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGZjLAotICAgICAgICAweDBmLCAweGYzLCAweDhjLCAweGZmLCAweGZkLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweDdmLCAweGYxLCAweDhmLCAweDdkLCAweDgzLAotICAgICAgICAweGZmLCAweDdmLCAweDc3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZiLAotICAgICAgICAweGY3LCAweDdmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDc4LCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDBmLCAweDhmLCAweDcwLCAweDcwLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAotICAgICAgICAweGZmLCAweGY4LCAweGY3LCAweDdmLCAweGZmLCAweDhmLCAweDhmLCAweDgwLAotICAgICAgICAweDgwLCAweDgxLCAweDcwLCAweDcwLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDZmLCAweDhmLCAweDBmLCAweDcxLAotICAgICAgICAweGJmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdiLCAweGZmLCAweDlmLCAweGZmLCAweDcwLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZlLCAweDhmLAotICAgICAgICAweGZmLCAweDg3LCAweDdmLCAweDc4LCAweGZlLCAweGZmLCAweDllLCAweGZmLAotICAgICAgICAweGYyLCAweDdmLCAweGZmLCAweDBmLCAweGZmLCAweGYwLCAweGZmLCAweGVmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweDdmLCAweDdmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZlLCAweDhmLAotICAgICAgICAweGZmLCAweDcwLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGY3LCAweGZmLCAweGZlLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweDdmLCAweDhmLCAweDhmLCAweGYwLCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZkLCAweGFmLCAweDBmLAotICAgICAgICAweDcwLCAweGQxLCAweGZmLCAweGY4LCAweGZlLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGFmLCAweDhmLCAweGZhLCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDlmLCAweDhmLCAweDBmLAotICAgICAgICAweDc5LCAweGUxLCAweGZmLCAweGZlLCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweGZmLCAweDdhLCAweDhmLCAweGZmLCAweGYwLCAweGVmLAotICAgICAgICAweGZmLCAweGZiLCAweGZmLCAweGFmLCAweGZmLCAweGZiLCAweDhmLCAweDdmLAotICAgICAgICAweGYxLCAweGRmLCAweGZmLCAweGY5LCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGFmLCAweGZmLCAweGJhLAotICAgICAgICAweGFmLCAweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGRmLAotICAgICAgICAweGZmLCAweGZkLCAweGJlLCAweGY3LCAweGY1LAotICAgICAgICAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGY3LCAweGYwLCAweGZmLCAweGZmLCAweDhmLCAweDNmLAotICAgICAgICAweDExLCAweGViLCAweGRiLCAweGNmLCAweDdmLAotICAgICAgICAweGJmLCAweGYwLCAweDhmLCAweDg3LCAweGYwLCAweGYwLCAweGZmLCAweGJmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYxLCAweDhmLCAweDBmLCAweDMxLCAweGYxLAotICAgICAgICAweDlmLCAweGRmLCAweGY5LCAweDg1LCAweDdmLAotICAgICAgICAweGJmLCAweGZmLCAweDhmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGVlLCAweGZmLCAweGZiLCAweGY3LCAweDhmLCAweDdmLCAweGIxLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZkLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDhmLCAweGYwLCAweDgwLCAweGZmLAotICAgICAgICAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDJmLCAweDcxLAotICAgICAgICAweGMxLCAweDdmLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLCAweGJmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGQxLAotICAgICAgICAweDlmLCAweGZmLCAweDdiLCAweGI3LCAweGZmLAotICAgICAgICAweGJmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZlLCAweDhmLCAweGZmLCAweGYxLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGJmLCAweGI3LCAweGZmLAotICAgICAgICAweGZmLCAweGE0LCAweGY3LCAweDg4LCAweGZmLCAweGYwLCAweGFmLCAweGJmLAotICAgICAgICAweGZiLCAweGVmLCAweGZmLCAweGY3LCAweGZmLCAweDhmLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGRkLCAweGY3LCAweDk3LCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZmLAotICAgICAgICAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGFmLCAweDBmLCAweGEwLCAweGYwLAotICAgICAgICAweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAotICAgICAgICAweDcxLCAweGIxLCAweDM3LCAweGY3LCAweGZmLAotICAgICAgICAweGZmLCAweGI4LCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGZlLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAotICAgICAgICAweGJmLCAweGZmLCAweGY4LCAweGY3LCAweGZmLCAweGE3LCAweGZmLCAweGYwLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZlLCAweGYwLCAweGZmLCAweGZmLCAweDhmLAotICAgICAgICAweDdmLCAweGYxLCAweGZmLCAweGZmLCAweGNmLAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweDlmLCAweGY3LCAweGYzLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGJmLCAweDdmLCAweGY5LAotICAgICAgICAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGRmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGJmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGFmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLAotICAgICAgICAweDlmLCAweGZlLCAweGYxLCAweGZmLCAweGZmLCAweGNmLCAweDdmLCAweGYxLAotICAgICAgICAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGYxLAotICAgICAgICAweGJmLCAweGZmLCAweGYwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGYwLCAweGJmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDZmLAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAotICAgICAgICAweGZmLCAweGY4LCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGZmLCAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGNmLCAweGZmLAotICAgICAgICAweGZmLCAweGQ4LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweDhmLCAweGVmLCAweGUwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDNmLAotICAgICAgICAweGZmLCAweGRmLCAweGY3LCAweGZmLCAweDBmLCAweGZlLCAweGYwLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGRmLCAweDhlLCAweDdmLAotICAgICAgICAweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGJmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweDhmLCAweGZmLCAweGYxLCAweGZmLCAweGZmLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGJmLCAweDdmLCAweGUxLCAweGZmLAotICAgICAgICAweGRmLCAweGZmLCAweDdmLCAweGZmLCAweGJmLAotICAgICAgICAweGZmLCAweGE3LCAweGZmLCAweDg4LCAweGZmLCAweGYxLCAweGZlLCAweGZmLAotICAgICAgICAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLCAweGYwLCAweGNmLCAweGIxLAotICAgICAgICAweGZmLCAweGVmLCAweGZmLCAweDdmLCAweGZmLAorCTB4ZmYsIDB4ODcsIDB4ZmYsIDB4ODgsIDB4N2YsIDB4ZmYsIDB4ZjksIDB4ZmYsCisJMHhmZiwgMHhmNSwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHg4ZiwgMHhmOSwKKwkweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHg3ZiwgMHhmMSwgMHhjZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsCisJMHg3ZiwgMHg3YiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDc3LCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ODYsIDB4ZjYsIDB4ZjAsIDB4ZmYsCisJMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHgwZiwgMHg3ZiwKKwkweGMxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZjYsIDB4ZjAsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHg4ZiwgMHg3ZiwgMHhmMCwgMHhmZiwgMHgwZiwgMHg3ZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ZjgsIDB4ZjcsIDB4OGYsIDB4Y2YsIDB4ZjAsIDB4ZjYsIDB4ZmYsCisJMHhmZiwgMHhlZiwgMHhmZiwgMHhmYiwgMHg3ZiwgMHgyZiwgMHgxZiwgMHg3MSwKKwkweGY1LCAweGZmLCAweGZmLCAweGVmLCAweDdmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZjYsIDB4ZmUsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4N2YsIDB4NzcsIDB4ZjcsIDB4ZmYsIDB4ZmIsCisJMHgwZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwKKwkweGZlLCAweGZmLCAweDhmLCAweDdmLCAweGYxLAorCTB4ZmYsIDB4ZmYsIDB4ZmEsIDB4Y2UsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsCisJMHg5ZiwgMHhmZiwgMHg4ZSwgMHhmZiwgMHhmMCwgMHhiZiwgMHg3ZiwgMHhmNSwKKwkweGZmLCAweGVmLCAweDlmLCAweGZkLCAweDgxLAorCTB4ZmYsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhlZiwgMHg5ZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAorCTB4ZmYsIDB4NzcsIDB4ZmEsIDB4YjYsIDB4ZmYsIDB4NzgsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZCwgMHgwZiwgMHg3ZiwgMHhmMSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ZjYsIDB4ZjcsIDB4ZjYsIDB4N2YsIDB4YmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhlZiwgMHhiZiwgMHhmMiwgMHg3ZiwgMHhlZiwgMHhmZiwKKwkweGZlLCAweGZiLCAweGZmLCAweGVmLCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsCisJMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4Y2YsIDB4OGYsIDB4ZmYsIDB4ZjAsCisJMHhlZiwgMHhmOSwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwgMHgwZiwKKwkweDY1LCAweGUxLCAweGZiLCAweDdiLCAweGYzLAorCTB4ZmYsIDB4ZjcsIDB4ZjYsIDB4ZmUsIDB4ZmYsIDB4OGYsIDB4ZjYsIDB4ZTgsCisJMHhmNiwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmOSwgMHhmZiwgMHhmZiwKKwkweDZmLCAweDYxLCAweGYxLCAweGZiLCAweGZmLAorCTB4ZmYsIDB4ZGUsIDB4OGYsIDB4OGYsIDB4ZjAsIDB4ZjAsIDB4ZmYsIDB4ZmYsCisJMHhmNywgMHhiZiwgMHhmZiwgMHhkNCwgMHg4ZiwgMHgwZiwgMHg3MSwgMHhjMSwKKwkweDZmLCAweGQxLCAweGViLCAweDVmLCAweGZkLAorCTB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4OGYsIDB4OWYsIDB4ZjcsCisJMHg5ZiwgMHhmZiwgMHhmNCwgMHhiNywgMHhmZCwgMHhmZiwgMHhmZSwgMHg4ZiwKKwkweGJmLCAweDcxLCAweDFmLCAweGZmLCAweDdmLAorCTB4ZmYsIDB4ZmQsIDB4ODcsIDB4ODcsIDB4ZjAsIDB4NzAsIDB4MWYsIDB4ZjcsCisJMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHgwZiwgMHg3MSwgMHg4MSwKKwkweGJmLCAweDNlLCAweDdmLCAweDdmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4N2YsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4YmYsIDB4ZmYsIDB4MDcsIDB4ZmYsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZSwgMHhmZiwgMHhmZiwgMHhmNywgMHg4ZCwgMHg3ZiwgMHhmMSwgMHhmZiwKKwkweGZmLCAweDlmLCAweDZmLCAweGYxLCAweGZmLAorCTB4YmYsIDB4NzEsIDB4ODcsIDB4ZmUsIDB4ZjAsIDB4OGYsIDB4OGYsIDB4ZjAsCisJMHhmYiwgMHhjYiwgMHhmZiwgMHhmMCwgMHg4ZiwgMHg3ZiwgMHhmMSwgMHg4ZiwKKwkweDFlLCAweGUxLCAweDdlLCAweDkxLCAweDdmLAorCTB4YmYsIDB4MWEsIDB4ZmYsIDB4NzEsIDB4ZmYsIDB4OWYsIDB4OGYsIDB4ZjYsCisJMHhmOCwgMHhkZiwgMHhmNywgMHhmNCwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwKKwkweDFmLCAweGYwLCAweDdmLCAweDk3LCAweGZmLAorCTB4YmYsIDB4OTcsIDB4ZmYsIDB4ZmIsIDB4YmYsIDB4ZGYsIDB4ZmYsIDB4ZjcsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhhZiwgMHhkZiwKKwkweGY5LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGRmLCAweGZmLCAweGYxLCAweGZmLAorCTB4ZmYsIDB4OWYsIDB4ZmMsIDB4ZmIsIDB4ZmYsIDB4ZjAsIDB4ZmUsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg5ZCwgMHhmZiwgMHhmNCwgMHhjZiwgMHhmZiwgMHg3ZiwKKwkweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGNmLAorCTB4ZmYsIDB4OTcsIDB4ZmYsIDB4ZmEsIDB4ZmYsIDB4OGYsIDB4ZjgsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHgwZiwKKwkweDdmLCAweGUxLCAweGZmLCAweGYxLCAweGZmLAorCTB4ZmYsIDB4ODMsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHg2ZiwgMHg3ZiwgMHg3NywgMHg3ZCwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhmLCAweDZmLCAweGYxLAorCTB4ZmYsIDB4ZDcsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4OWYsIDB4ZmQsCisJMHg3OCwgMHhlZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmNSwgMHhmZiwgMHhmZiwKKwkweGJmLCAweDBmLCAweDc5LCAweGQxLCAweGZmLAorCTB4ZmYsIDB4ZDIsIDB4ZmYsIDB4NzIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHhmZSwgMHg3MCwgMHg5ZCwgMHhmZiwgMHhmNCwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGJmLCAweDdmLAorCTB4ZmYsIDB4MDcsIDB4ZmYsIDB4NzgsIDB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZmUsCisJMHhmZiwgMHg3NywgMHg3ZiwgMHg4ZiwgMHg3ZiwgMHhmMCwgMHhmZiwgMHg4ZiwKKwkweDdmLCAweGUxLCAweDBmLCAweDcxLCAweGYxLAorCTB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHhmZCwgMHhmZiwgMHhiYSwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGVmLCAweDdmLCAweGExLCAweDdmLAorCTB4ZmYsIDB4YmQsIDB4N2YsIDB4ZjcsIDB4ZjksIDB4ZmQsIDB4ZmIsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhiZiwgMHhiNywgMHg4ZiwgMHhhZiwgMHhkZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDVmLCAweGViLAorCTB4YmYsIDB4ZmQsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmIsCisJMHhmZiwgMHhmNywgMHhjZiwgMHhmYiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhkZiwKKwkweGZmLCAweGZmLCAweGVmLCAweDdmLCAweGFiLAorCTB4ZmYsIDB4ZmQsIDB4ZmEsIDB4YmYsIDB4OGYsIDB4YmYsIDB4Y2EsIDB4ZmUsCisJMHhmZiwgMHhmZiwgMHhkZiwgMHg2ZiwgMHhkNCwgMHhmNiwgMHgwZiwgMHgzZiwKKwkweDExLCAweGY5LCAweGZmLCAweDdmLCAweDhiLAorCTB4YmYsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4YzAsIDB4ZmIsIDB4ZjUsIDB4ZWYsCisJMHhmNywgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHg3ZiwgMHhmZiwgMHg3ZiwKKwkweGZmLCAweDZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4YmYsIDB4ODcsIDB4YmIsIDB4ZjgsIDB4ZmIsIDB4Y2YsIDB4ZmUsIDB4ZmUsCisJMHhmZiwgMHhlZiwgMHhmZiwgMHhmYiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHg4ZiwKKwkweGZmLCAweGUxLCAweDdmLCAweDdiLCAweGZmLAorCTB4YmYsIDB4ODAsIDB4ODksIDB4ODgsIDB4YjAsIDB4ZjUsIDB4ZjAsIDB4ZmYsCisJMHhmNywgMHhkZiwgMHhmZSwgMHg3YywgMHg4ZiwgMHgwZiwgMHg3MSwgMHhlMSwKKwkweGZmLCAweGYxLCAweGU1LCAweDBlLCAweDJiLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZmYsIDB4Y2YsIDB4ZjUsIDB4OWYsCisJMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHg4ZiwgMHg3ZiwgMHg3MSwgMHg4ZiwKKwkweGZmLCAweDkxLCAweDdmLCAweGZiLCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4N2YsIDB4Y2YsIDB4OGEsIDB4ZmYsIDB4ZjAsIDB4ZmYsCisJMHg1NywgMHhmZSwgMHhmYiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHg3ZSwKKwkweGZmLCAweGZmLCAweDlhLCAweGZmLCAweGYxLAorCTB4ZmYsIDB4ZmYsIDB4Y2YsIDB4YjcsIDB4Y2UsIDB4ZmYsIDB4ZjQsIDB4ZmYsCisJMHhmZiwgMHg3ZiwgMHhmNywgMHhmYiwgMHhmZiwgMHhmZSwgMHhmZiwgMHg3ZiwKKwkweGZmLCAweGZkLCAweGZlLCAweDc1LCAweGZkLAorCTB4ZmYsIDB4ZWYsIDB4Y2YsIDB4ZmYsIDB4ZjUsIDB4ZmYsIDB4ZjUsIDB4ZmYsCisJMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHg3ZiwgMHhmZiwKKwkweGNmLCAweDdmLCAweDMxLCAweDdmLCAweGZmLAorCTB4M2YsIDB4NzgsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHgwZiwgMHgwZiwgMHhmMSwgMHhmMSwgMHhkZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweDlmLCAweGZmLCAweDg0LCAweDBlLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZjcsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4OGYsCisJMHg4ZiwgMHg4MCwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZlLCAweDlmLCAweDhlLCAweDA1LCAweDcxLAorCTB4YmYsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHg4ZiwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZlLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHg4ZiwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsCisJMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweDhmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweDlmLCAweGZmLCAweDhmLCAweDdlLAorCTB4YmYsIDB4ZmYsIDB4NzgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZlLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ODcsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHhmZiwgMHhmMCwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhlLCAweDdmLCAweGYxLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4M2YsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4OGYsIDB4N2YsIDB4ZjAsIDB4OGYsCisJMHhmZiwgMHhmMCwgMHgwZiwgMHhmZiwgMHg3MCwgMHhmZiwgMHg4ZiwgMHg3ZSwKKwkweGYxLCAweGRmLCAweGZmLCAweGZiLCAweDhlLAorCTB4ZmYsIDB4ODAsIDB4N2YsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhhZiwgMHg3ZiwgMHg4NCwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ODAsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHg4ZiwgMHhmZiwgMHg4MSwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHg3ZiwgMHhmMCwgMHhkZiwgMHhkZiwgMHhmZiwgMHhkZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGYxLAorCTB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MGYsIDB4ZmYsIDB4ODAsCisJMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhkZiwgMHg4ZSwKKwkweDBmLCAweDAxLCAweDcxLCAweGYxLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhkZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAorCTB4YmYsIDB4ODcsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHg4ZiwgMHg4ZiwgMHhkMCwgMHhmMCwgMHhkZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsCisJMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGRmLCAweGZmLCAweGZiLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmQsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGFmLCAweGZlLCAweGY1LCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4MGYsIDB4OGYsIDB4ZjAsIDB4ODAsIDB4ZmYsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgxZiwgMHhhZiwgMHg3MSwgMHhhNywKKwkweDZmLCAweGY1LCAweGZlLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4NzcsIDB4NzksIDB4OGYsIDB4ZmYsIDB4ZjAsIDB4OGYsIDB4ZmYsCisJMHgwMCwgMHhmZiwgMHhkMCwgMHg0ZiwgMHgzZCwgMHhmMCwgMHhmNywgMHhmZCwKKwkweDhmLCAweDdmLCAweDgxLCAweDdmLCAweGQxLAorCTB4ZmYsIDB4Y2QsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4MGYsIDB4NzAsIDB4ZjAsCisJMHhmZiwgMHg3ZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhkYiwgMHg4ZCwgMHg0YiwKKwkweDczLCAweGY5LCAweGZmLCAweGRmLCAweGZmLAorCTB4M2YsIDB4ZmMsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4ZjIsIDB4OGYsIDB4OGYsCisJMHg3MCwgMHg3YSwgMHgzZiwgMHhiYywgMHhmNywgMHhkYiwgMHhmZiwgMHhmOSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGVlLAorCTB4ZmYsIDB4ZTgsIDB4ZjcsIDB4OGYsIDB4ZmQsIDB4ODAsIDB4ZmYsIDB4ZjAsCisJMHg5ZiwgMHhhNSwgMHg3YSwgMHhmNCwgMHg2ZiwgMHgzZiwgMHhjZiwgMHgwNywKKwkweDZhLCAweGUxLCAweGZmLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ZmYsIDB4NzcsIDB4ZjEsIDB4OGYsIDB4OGYsIDB4ZjAsIDB4ZjAsCisJMHhiZiwgMHhmZiwgMHhlNywgMHg3ZiwgMHg4ZiwgMHgyNCwgMHgwMywgMHg3NywKKwkweGYzLCAweGZmLCAweGZlLCAweGZmLCAweGZmLAorCTB4YmYsIDB4OWYsIDB4NzcsIDB4OGIsIDB4ZmYsIDB4ZjAsIDB4ZmYsIDB4ZWYsCisJMHg3ZCwgMHg3ZiwgMHhmZiwgMHg5ZiwgMHhlYiwgMHgzZCwgMHhmZiwgMHhmNywKKwkweGZmLCAweGZiLCAweGZlLCAweGZmLCAweGRmLAorCTB4ZmYsIDB4ZmYsIDB4NzcsIDB4ZmYsIDB4OGYsIDB4OGYsIDB4ZjAsIDB4ZjAsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiYiwgMHg1ZCwKKwkweGY1LCAweGJiLCAweGVmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4OGYsIDB4OGYsIDB4ZjAsIDB4ZjgsIDB4ZmYsIDB4ZmYsCisJMHhmNywgMHg3ZiwgMHhmZiwgMHhmZiwgMHhhZiwgMHhiZiwgMHg3NSwgMHhiNywKKwkweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4ODcsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZjcsCisJMHg4ZiwgMHhmZiwgMHhmMCwgMHg3ZiwgMHhmNywgMHhmZiwgMHhhZCwgMHhmZiwKKwkweGY3LCAweGVlLCAweDlmLCAweGZmLCAweGY1LAorCTB4ZmYsIDB4ZjgsIDB4MDcsIDB4ZmYsIDB4ODAsIDB4OGYsIDB4ODAsIDB4ODAsCisJMHhmMCwgMHg4ZiwgMHg3ZiwgMHg3MCwgMHg0ZiwgMHgwZiwgMHg3OSwgMHhmMSwKKwkweGZkLCAweGZmLCAweGVmLCAweDhmLCAweDdmLAorCTB4YmYsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhkMCwgMHhiZiwgMHhkYiwgMHhlNSwKKwkweDNiLCAweGZlLCAweGY3LCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ZmYsIDB4OGYsIDB4NzcsIDB4ODAsIDB4ZmYsIDB4ZjAsIDB4ZmYsCisJMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhiZCwgMHhlZiwgMHgwNywgMHg3ZiwKKwkweGYxLCAweGZlLCAweGZmLCAweGZlLCAweGZmLAorCTB4N2YsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4OGYsCisJMHhiZiwgMHg3MCwgMHhmNSwgMHg3ZiwgMHhmZiwgMHhlZiwgMHgzZiwgMHg3ZCwKKwkweGY3LCAweGZmLCAweGZmLCAweGZlLCAweGZlLAorCTB4ZmYsIDB4OTcsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZSwgMHhmZiwgMHhmZiwgMHg5ZiwgMHhkZiwgMHhmNywgMHgzYiwgMHhmZiwKKwkweGY3LCAweGZmLCAweDdmLCAweGZlLCAweGZmLAorCTB4M2YsIDB4NzgsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHgxZiwgMHgxZiwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDgwLCAweDBlLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4OGYsCisJMHg5ZiwgMHg4MCwgMHhlMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweGZlLCAweDlmLCAweDBlLCAweDAxLCAweDcxLAorCTB4YmYsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHg4ZiwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhlZiwKKwkweGZlLCAweGVmLCAweGZmLCAweDhmLCAweDBmLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg5ZiwgMHg4ZiwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAorCTB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZSwgMHhlZiwKKwkweGVmLCAweGZmLCAweGZmLCAweGVmLCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsCisJMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweDhmLCAweDdmLCAweGUwLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdlLAorCTB4YmYsIDB4ZmYsIDB4NzgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhlZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGVlLCAweGVmLCAweDlmLAorCTB4ZmYsIDB4MDcsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHhmZiwgMHhmMCwgMHg4ZiwgMHhmZiwgMHhlMCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGVmLCAweDhlLCAweDdmLCAweGYxLAorCTB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGVmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAorCTB4M2YsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4OGYsIDB4N2YsIDB4ZjAsIDB4ZGYsCisJMHhmZiwgMHhmMCwgMHgwZiwgMHhmZiwgMHg3MCwgMHhmZiwgMHg4ZiwgMHg3ZSwKKwkweGUxLCAweGRmLCAweGZmLCAweGY3LCAweDhlLAorCTB4ZmYsIDB4ODAsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHg3ZiwgMHg4MCwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGVmLCAweGZlLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ODAsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHg4ZiwgMHhmZiwgMHg4MSwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHgxZiwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhmLCAweDdlLCAweGYxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4MGYsIDB4OGYsIDB4ODAsCisJMHhmNywgMHhlMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZSwKKwkweDZmLCAweDkxLCAweDcxLCAweGYxLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAorCTB4YmYsIDB4ODcsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHg4ZiwgMHhmMCwgMHhmMCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGRmLCAweDhmLAorCTB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZSwKKwkweGZmLCAweGVmLCAweGZmLCAweGQ3LCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsCisJMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweGZmLCAweGZlLCAweGY5LCAweGRmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4OGYsIDB4YmYsIDB4ZjcsIDB4OWYsIDB4ZjgsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHg3NywgMHhmZiwgMHgwZSwgMHgxZiwgMHg2MSwgMHg4MSwKKwkweDdmLCAweGYxLCAweGZlLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4YjksIDB4Y2YsIDB4ZmYsIDB4ZmYsIDB4MGYsIDB4ZmYsCisJMHgwMCwgMHhmZiwgMHhkMCwgMHg3ZiwgMHg3NSwgMHg4YiwgMHg3ZiwgMHhmMSwKKwkweDhmLCAweDdmLCAweDgwLCAweDdlLCAweDkxLAorCTB4ZmYsIDB4YmYsIDB4ZGYsIDB4ZmYsIDB4YTcsIDB4NDcsIDB4NzAsIDB4ZjcsCisJMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHgwZiwKKwkweDYxLCAweGYxLCAweGVmLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZmUsIDB4ZWYsIDB4NWYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhlNywgMHhiNywgMHhmYywgMHhlYiwgMHg5ZiwgMHg3ZiwgMHhmMSwKKwkweDlmLCAweDBmLCAweDcxLCAweGYxLCAweGVlLAorCTB4ZmYsIDB4ZjAsIDB4ZjcsIDB4M2YsIDB4ZWYsIDB4OTcsIDB4ZjgsIDB4ZTgsCisJMHhmZiwgMHg5ZiwgMHg3ZiwgMHhmMCwgMHg3ZiwgMHg5ZiwgMHg2ZiwgMHg5MSwKKwkweDdlLCAweGYxLCAweDlmLCAweDhmLCAweDU3LAorCTB4ZmYsIDB4ZmYsIDB4MjYsIDB4YjksIDB4YjgsIDB4ZmYsIDB4ZjAsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmNywgMHg3ZiwgMHg2ZiwgMHhmNCwgMHg5ZiwgMHgxZiwKKwkweDcxLCAweGUxLCAweGZlLCAweDdmLCAweGZmLAorCTB4YmYsIDB4ZmYsIDB4NzEsIDB4YmIsIDB4ZTgsIDB4ZmYsIDB4ZmYsIDB4ZjgsCisJMHhiZiwgMHhmZiwgMHhhZiwgMHhmZiwgMHhmOCwgMHg5ZCwgMHg2ZiwgMHhmMSwKKwkweGJmLCAweGZmLCAweGI3LCAweGZmLCAweGJkLAorCTB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4OTcsIDB4YzcsIDB4ZjcsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHg5MywgMHhmZiwgMHhmZiwgMHhlZiwgMHhjZiwgMHg1ZiwKKwkweGYxLCAweGY3LCAweGRmLCAweGY1LCAweDlmLAorCTB4ZmYsIDB4ZmYsIDB4ODcsIDB4YmYsIDB4ZTAsIDB4YmYsIDB4ZjcsIDB4ZmYsCisJMHhmNywgMHg3ZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHg1ZiwgMHgyMSwgMHhiMSwKKwkweGZmLCAweDZkLCAweGZmLCAweGVmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZDcsIDB4ZmYsIDB4YjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHgzZiwgMHhlZiwgMHhmMCwgMHg3ZiwgMHhkNywgMHg3ZiwgMHhmMSwgMHhmZiwKKwkweGVmLCAweGVlLCAweGJmLCAweDdmLCAweGYxLAorCTB4ZmYsIDB4ZjgsIDB4NDcsIDB4MGYsIDB4YzcsIDB4ZjAsIDB4N2YsIDB4ZjAsCisJMHhmMCwgMHg5MCwgMHg3ZiwgMHg3MCwgMHg4ZiwgMHgyZiwgMHhjMSwgMHgwZiwKKwkweDExLCAweDFmLCAweGVmLCAweGFmLCAweDdmLAorCTB4YmYsIDB4N2YsIDB4ZjAsIDB4OWYsIDB4ZTcsIDB4ZjcsIDB4MzgsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHg3ZiwgMHhmMCwgMHhhZiwgMHhmZiwgMHhmZiwKKwkweGJmLCAweGZlLCAweGZkLCAweGRmLCAweDhmLAorCTB4ZmYsIDB4ZmYsIDB4YmYsIDB4ZjcsIDB4OGYsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisJMHhlYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZCwgMHgzZiwgMHg4MSwgMHg3ZiwKKwkweGQxLCAweGZlLCAweGRmLCAweGZlLCAweGZmLAorCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4YTgsIDB4ZmYsIDB4ZjAsIDB4ZmYsCisJMHhmZiwgMHhmMCwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhlZiwKKwkweGVmLCAweDlmLCAweDdmLCAweDdlLCAweGZlLAorCTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4YTcsIDB4NzcsIDB4ZmYsIDB4ZmYsCisJMHhlZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhlNywgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLAorCTB4M2YsIDB4NzgsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsCisJMHhmZiwgMHgwZiwgMHgwZiwgMHhmMSwgMHhlMSwgMHhmZiwgMHhmZiwgMHhlZiwKKwkweGVmLCAweGZmLCAweGZmLCAweDhlLCAweDBlLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4OGYsCisJMHg4ZiwgMHg4MCwgMHhmMSwgMHhmMSwgMHhlZiwgMHhhZiwgMHhhZiwgMHhmZiwKKwkweGVlLCAweGRmLCAweDBlLCAweDAxLCAweDcxLAorCTB4YmYsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhlZiwgMHg4ZiwgMHg5ZiwgMHhmMSwgMHhlMSwgMHhmZiwgMHhhZiwgMHhlZiwKKwkweGZlLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg5ZiwgMHg5ZiwgMHhmMSwgMHhmMSwgMHhlZiwgMHhmZiwgMHhhZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAorCTB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhiZiwgMHhlZiwgMHhmZiwKKwkweGVmLCAweGJmLCAweGZmLCAweGVmLCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsCisJMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhlZiwgMHhmZSwKKwkweGNmLCAweDNmLCAweGYwLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmYsCisJMHhmZiwgMHg4OCwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDZlLAorCTB4YmYsIDB4ZmYsIDB4NzgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhlMCwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGVlLCAweGVmLCAweDlmLAorCTB4ZmYsIDB4OGYsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHhmZiwgMHhmMCwgMHg4ZiwgMHhmZiwgMHhhMCwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGJmLCAweDhlLCAweDZmLCAweGYxLAorCTB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDZmLAorCTB4M2YsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4OGYsIDB4N2YsIDB4ZjAsIDB4Y2YsCisJMHhmZiwgMHhiMCwgMHgwZiwgMHhhZiwgMHg3MCwgMHhmZiwgMHg4ZiwgMHg3ZSwKKwkweGYxLCAweGZmLCAweGZmLCAweGYxLCAweDllLAorCTB4ZmYsIDB4ODAsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhlZiwgMHg4ZiwgMHg3ZiwgMHg5MCwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGFmLCAweGZlLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ODAsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHgzZiwgMHhkZiwgMHhmZiwgMHg4MSwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg5ZiwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGJmLCAweDdlLCAweGYxLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4MGYsIDB4YWYsIDB4ODAsCisJMHhmMCwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZSwKKwkweDBmLCAweDkxLCAweDdmLCAweGYxLCAweGZmLAorCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMywgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGJmLCAweGZmLCAweGZiLAorCTB4YmYsIDB4ODcsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhkZiwgMHg4ZiwgMHg4ZiwgMHhmMCwgMHhmMCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhiZiwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweGZmLCAweGFmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4YWYsIDB4ZmYsCisJMHhmMCwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwKKwkweGRmLCAweGZlLCAweGZlLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4MGYsIDB4OGYsIDB4ZjAsIDB4OGYsIDB4ZmYsIDB4ZjAsCisJMHhmOSwgMHhmZiwgMHhmNywgMHhmZiwgMHgwZiwgMHg1ZiwgMHgyOSwgMHg4OSwKKwkweDc3LCAweGYxLCAweGZhLCAweGZmLCAweGRlLAorCTB4ZmYsIDB4YzMsIDB4M2YsIDB4NGIsIDB4N2YsIDB4ZTksIDB4MGYsIDB4ZmYsCisJMHgwMCwgMHhmZiwgMHg5MCwgMHgwZiwgMHhkNywgMHhmZiwgMHg3ZiwgMHhmOSwKKwkweDhmLCAweDdmLCAweDgxLCAweDdmLCAweDgxLAorCTB4ZmYsIDB4ZmYsIDB4ZmIsIDB4N2QsIDB4ODAsIDB4NDYsIDB4NzYsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHg2ZiwgMHhmZiwgMHhmZiwgMHhhZCwgMHhjZiwgMHgzZiwKKwkweDcxLCAweGY5LCAweGZmLCAweGZmLCAweGZmLAorCTB4M2YsIDB4YmEsIDB4ZmYsIDB4YzcsIDB4ZjcsIDB4YjksIDB4Y2YsIDB4ZGUsCisJMHg3NywgMHhiNywgMHg3NywgMHhmZSwgMHhmZiwgMHhiZiwgMHg2ZiwgMHhmOSwKKwkweGZmLCAweDdlLCAweDc5LCAweGI5LCAweGZlLAorCTB4ZmYsIDB4ZTQsIDB4ZjcsIDB4OGYsIDB4ZmUsIDB4MDcsIDB4ZmUsIDB4ZjgsCisJMHhmZiwgMHg4OSwgMHg3ZiwgMHhlOCwgMHg3ZiwgMHhkNywgMHg3ZiwgMHg5OSwKKwkweDc2LCAweGYxLCAweGZmLCAweDBmLCAweDdiLAorCTB4YmYsIDB4ZmYsIDB4YjYsIDB4YjksIDB4OGYsIDB4ZGYsIDB4ZjYsIDB4ZmYsCisJMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHg4ZiwgMHhkZCwgMHg4NywgMHg3ZiwKKwkweDcxLCAweGYxLCAweGZlLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4ZjEsIDB4OGEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhiZiwgMHhmZiwgMHhjZiwgMHhmYiwgMHhlOCwgMHg5ZCwgMHg3NywgMHhhOSwKKwkweGZmLCAweDc3LCAweGRhLCAweDdmLCAweGZmLAorCTB4YmYsIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ODYsIDB4ZTUsIDB4ZjAsIDB4ZTAsCisJMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHg4ZiwgMHg3ZiwKKwkweGJkLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ZWYsIDB4ODYsIDB4OGYsIDB4ZjAsIDB4ZmYsIDB4ZjYsIDB4OWYsCisJMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhjZiwgMHgxZiwgMHg3MSwgMHhkZCwKKwkweDdmLCAweGUxLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4YzcsIDB4ZjcsIDB4YjksIDB4ZmYsIDB4ZmYsIDB4ZmEsCisJMHgzZiwgMHhlZiwgMHhmMCwgMHhmZiwgMHhlZiwgMHg3ZiwgMHhkNSwgMHhmZiwKKwkweGZiLCAweGZmLCAweGY3LCAweDZlLCAweGYxLAorCTB4ZmYsIDB4ZmMsIDB4YzcsIDB4YmYsIDB4YzgsIDB4YzAsIDB4NTksIDB4ZmYsCisJMHhkZiwgMHhmZiwgMHg3YiwgMHhmMCwgMHhhNywgMHgxZiwgMHhhOSwgMHg3NywKKwkweDc5LCAweDcxLCAweDExLCAweGZmLCAweDc5LAorCTB4YmYsIDB4ZmIsIDB4NzAsIDB4YmYsIDB4ZmYsIDB4ZjksIDB4MzcsIDB4YmUsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHg3ZiwgMHhmNCwgMHg5ZiwgMHhmZiwgMHhmZiwKKwkweGQ3LCAweDdmLCAweGZmLCAweGZmLCAweGFmLAorCTB4ZmYsIDB4ZmYsIDB4OWUsIDB4ZjcsIDB4OWYsIDB4ZmUsIDB4ZTQsIDB4ZmYsCisJMHhjZiwgMHhjZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHg3ZiwgMHg4ZCwgMHg3ZiwKKwkweGY5LCAweGZhLCAweGRmLCAweDlmLCAweGVmLAorCTB4N2YsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4YmUsIDB4ZmQsIDB4ZDIsIDB4ZGYsCisJMHhmZiwgMHg3ZSwgMHhmNywgMHhmZiwgMHhmZiwgMHhhYiwgMHg5NywgMHhlZiwKKwkweGYzLCAweGZlLCAweDdmLCAweDcxLCAweGZlLAorCTB4ZmYsIDB4OWYsIDB4ZmYsIDB4ZmYsIDB4YjYsIDB4ZmIsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhmNywgMHhmZiwgMHhiZiwgMHhmZiwgMHhiNywgMHhkYiwgMHhmZiwKKwkweGJiLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAorCTB4M2YsIDB4NjgsIDB4ZmUsIDB4ZmQsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZWYsCisJMHhmMSwgMHgxZSwgMHgxYiwgMHhmMSwgMHhmNSwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweDlmLCAweGZiLCAweDlhLCAweDM2LAorCTB4ZmYsIDB4ZmMsIDB4N2QsIDB4ZmYsIDB4NzMsIDB4ZjcsIDB4ZmYsIDB4YWYsCisJMHg5ZiwgMHg5NCwgMHhmZCwgMHhmNSwgMHhmZiwgMHhmNywgMHhmZiwgMHhmYiwKKwkweGZlLCAweGVmLCAweDNlLCAweDA3LCAweDRkLAorCTB4YmYsIDB4ZTgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZjcsCisJMHhmMSwgMHg4ZiwgMHhhZiwgMHhkMSwgMHhmNywgMHhmOSwgMHhmZCwgMHhmZiwKKwkweGY4LCAweGRmLCAweGZiLCAweDhmLCAweDJmLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ZmYsIDB4ZmYsCisJMHhhNywgMHhhZiwgMHhmNywgMHhmMywgMHhkZiwgMHhmZiwgMHhmZCwgMHhmZiwKKwkweGZkLCAweGZmLCAweGFlLCAweDBmLCAweDcxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZjMsCisJMHhmZiwgMHhmMywgMHhmZiwgMHhmNywgMHhmYiwgMHhmMywgMHhmZiwgMHhmZiwKKwkweGZmLCAweGViLCAweGZmLCAweGYzLCAweGRiLAorCTB4ZmYsIDB4ZWIsIDB4N2IsIDB4ZmIsIDB4ZjcsIDB4ZmYsIDB4OGIsIDB4ZjcsCisJMHhmYywgMHhmNywgMHhmYiwgMHhmZiwgMHhmYiwgMHhmMywgMHhmZiwgMHhmZiwKKwkweDhiLCAweDdmLCAweGQ0LCAweGZiLCAweGZmLAorCTB4N2YsIDB4ZWMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZjcsCisJMHhmZiwgMHg4ZSwgMHhmZiwgMHhmOCwgMHhmNywgMHhmYiwgMHhmZCwgMHhmZiwKKwkweGZkLCAweDlmLCAweGY3LCAweDlmLCAweDdlLAorCTB4YmYsIDB4ZmIsIDB4N2MsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmIsCisJMHhmYiwgMHhmMSwgMHg4ZiwgMHhmMywgMHhkYywgMHhmNywgMHhmZCwgMHhmZiwKKwkweGU5LCAweGViLCAweGVmLCAweGMzLCAweGI3LAorCTB4ZmYsIDB4MDcsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCisJMHg4ZiwgMHhmZiwgMHhmNCwgMHg4ZiwgMHhmYiwgMHhmYywgMHhmZiwgMHhlZiwKKwkweGZmLCAweGY3LCAweDhmLCAweDdmLCAweGQxLAorCTB4ZmYsIDB4ZmEsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmMywgMHg4OSwgMHhlZiwgMHhmOCwgMHhmZiwgMHhmNywgMHhmZiwgMHhlZiwKKwkweGVmLCAweGY3LCAweGYzLCAweGFiLCAweDdmLAorCTB4M2YsIDB4ZjksIDB4N2UsIDB4ZjksIDB4OGYsIDB4N2YsIDB4ZjAsIDB4ZWYsCisJMHhmZiwgMHhmYywgMHgxYiwgMHhmZiwgMHg3YywgMHhmZiwgMHg4ZiwgMHg2ZSwKKwkweGYxLCAweGY3LCAweDczLCAweGZmLCAweGE2LAorCTB4ZmYsIDB4ODAsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmOSwgMHg4ZiwgMHg3ZiwgMHg4NCwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZhLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4OTYsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg1NywgMHhhZiwgMHhmYiwgMHg4NSwgMHg3ZiwgMHhmNCwgMHhmZiwgMHhmZSwKKwkweGVmLCAweGZmLCAweGVmLCAweGJmLCAweDUzLAorCTB4ZmYsIDB4N2QsIDB4ZmYsIDB4ZmYsIDB4ZTMsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg5NywgMHg3MSwgMHhmOCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkYiwgMHhlZiwKKwkweGVmLCAweGU3LCAweDk3LCAweDcyLCAweGZkLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4MGYsIDB4ZTMsIDB4ODYsCisJMHhmMCwgMHhmNCwgMHhmYiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmYiwgMHg4ZSwKKwkweDBiLCAweGE1LCAweDcyLCAweGY5LCAweGZmLAorCTB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZjMsIDB4ZmYsCisJMHhmNywgMHhmZiwgMHhmMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhlZSwKKwkweGZiLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAorCTB4YmYsIDB4ODIsIDB4ZjgsIDB4ZjgsIDB4ZjcsIDB4N2YsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhlZiwgMHg4NywgMHg4NywgMHhmMCwgMHhmMCwgMHhmYiwgMHhmZiwKKwkweGZiLCAweGY3LCAweGVmLCAweGVmLCAweDg3LAorCTB4ZmYsIDB4ZjYsIDB4ZmYsIDB4ZmEsIDB4ZjEsIDB4ZWYsIDB4ZjMsIDB4ZjcsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwKKwkweGZiLCAweGY3LCAweGZmLCAweGZlLCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4ZmIsIDB4ZjIsIDB4ZjMsIDB4ZmYsIDB4ZjEsIDB4ZjcsCisJMHhmZiwgMHhlZiwgMHhmNywgMHhlZiwgMHhmNywgMHhmNywgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGVmLCAweGZmLCAweGU3LAorCTB4ZmYsIDB4ZmIsIDB4ZmIsIDB4ZmYsIDB4ZjUsIDB4ZWYsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHg3NywgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGY3LCAweGZmLCAweGVmLCAweGVmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZWYsIDB4ZTUsIDB4ZmYsCisJMHhmZSwgMHg2MSwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweDlmLCAweGVmLCAweGVmLCAweGYzLCAweGY3LAorCTB4ZmYsIDB4ZmYsIDB4MGYsIDB4OWYsIDB4ZmEsIDB4ODcsIDB4ZmYsIDB4ZjYsCisJMHhlYiwgMHhmZiwgMHhmZiwgMHhlZiwgMHgwZiwgMHg2ZiwgMHhmZCwgMHgwZCwKKwkweDUzLCAweGYxLCAweGYzLCAweGZmLCAweGZmLAorCTB4YmYsIDB4MWIsIDB4N2YsIDB4OTYsIDB4ZmUsIDB4ZmYsIDB4OGYsIDB4ZmIsCisJMHgwMCwgMHhmZiwgMHhiMCwgMHgxNywgMHg3YywgMHg4ZiwgMHhmZiwgMHhmZCwKKwkweDhmLCAweDdmLCAweDgxLCAweDdlLCAweGYxLAorCTB4ZmYsIDB4ZmQsIDB4ZWQsIDB4ZWUsIDB4OWUsIDB4MGIsIDB4NzksIDB4ZmYsCisJMHhmYiwgMHg3NywgMHg1YiwgMHhmZiwgMHg5ZiwgMHhmZiwgMHg0ZiwgMHgwZiwKKwkweDcxLCAweGYwLCAweGRiLCAweGZmLCAweGY3LAorCTB4N2YsIDB4ZTcsIDB4ZWYsIDB4MTgsIDB4ZmYsIDB4ZmYsIDB4OWQsIDB4OGUsCisJMHg2NywgMHhiZiwgMHg0ZiwgMHhmZiwgMHhmZiwgMHhhZSwgMHhmZiwgMHhmMSwKKwkweGViLCAweGVmLCAweGZkLCAweGFkLCAweGY2LAorCTB4ZmYsIDB4ZmMsIDB4ZjcsIDB4MWYsIDB4ZmYsIDB4OWYsIDB4ZmIsIDB4ZmMsCisJMHhmZiwgMHg4ZiwgMHg3NywgMHhlYywgMHg1ZiwgMHg2ZiwgMHhkZiwgMHgyNSwKKwkweDdlLCAweGQ5LCAweGU2LCAweDk3LCAweDNmLAorCTB4ZmYsIDB4ZjcsIDB4NjcsIDB4ZWMsIDB4OTIsIDB4YmUsIDB4ZjEsIDB4ZmIsCisJMHhmZiwgMHg3ZiwgMHhkZiwgMHg3YiwgMHg1ZSwgMHg3ZCwgMHhlNywgMHg1ZiwKKwkweGYxLCAweGYxLCAweGZiLCAweGZmLCAweGY3LAorCTB4YmYsIDB4ZjcsIDB4NzEsIDB4OWEsIDB4ZmQsIDB4ZmYsIDB4ZjcsIDB4ZmIsCisJMHg1ZiwgMHg3ZiwgMHhhZiwgMHhkZiwgMHhmOSwgMHhlNywgMHg3NywgMHhkZCwKKwkweDZmLCAweGY3LCAweGJiLCAweGZmLCAweDhiLAorCTB4YmYsIDB4ZmYsIDB4NzcsIDB4ZmYsIDB4OTMsIDB4ZmUsIDB4ZjgsIDB4ZmUsCisJMHhiZiwgMHhmZSwgMHhiZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhhYiwgMHg3ZiwKKwkweGZkLCAweGZmLCAweGNmLCAweDY3LCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4MDcsIDB4OWYsIDB4ZTQsIDB4ZGIsIDB4ZmYsIDB4ZjEsCisJMHhmNywgMHg3ZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHg2ZiwgMHhkMSwgMHg2ZCwKKwkweDczLCAweGZmLCAweGZmLCAweGZiLCAweGZmLAorCTB4ZmYsIDB4NmYsIDB4OWYsIDB4N2IsIDB4ZmQsIDB4ZmYsIDB4ZjYsIDB4ZmQsCisJMHgyNywgMHhmZiwgMHhmYywgMHhmZiwgMHhhZiwgMHhmZiwgMHhmZCwgMHhmZSwKKwkweDdmLCAweGRmLCAweGZmLCAweDdmLCAweGVmLAorCTB4ZmYsIDB4ZmUsIDB4ODEsIDB4ZTcsIDB4OTMsIDB4OTEsIDB4ODMsIDB4ODUsCisJMHhlZiwgMHg4ZiwgMHg3ZiwgMHg3NCwgMHg4ZCwgMHgxYiwgMHgyZCwgMHhlMiwKKwkweGNkLCAweGU1LCAweGI1LCAweDlmLCAweDc3LAorCTB4YmYsIDB4N2YsIDB4ZTQsIDB4ZWYsIDB4ZmYsIDB4ZjcsIDB4ZGIsIDB4ZmQsCisJMHg3ZiwgMHhmZSwgMHhhYiwgMHg3ZiwgMHhmYywgMHhiZiwgMHhmZiwgMHhkZSwKKwkweDc3LCAweGZiLCAweGRmLCAweGVmLCAweGJmLAorCTB4ZmYsIDB4ZmYsIDB4MWUsIDB4N2YsIDB4OGYsIDB4ZmYsIDB4OTIsIDB4ZjMsCisJMHhkZiwgMHg3YiwgMHhmZiwgMHg3YiwgMHhmZiwgMHhkYiwgMHgzZCwgMHg1ZiwKKwkweGY5LCAweGY2LCAweGZmLCAweGYyLCAweGY3LAorCTB4N2YsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZDIsIDB4ZjAsIDB4YjcsCisJMHhmYiwgMHg3ZiwgMHhmYywgMHg3NywgMHhkNywgMHgzZiwgMHhjNywgMHg3ZiwKKwkweGYzLCAweGU3LCAweGZmLCAweGZkLCAweGZlLAorCTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4N2IsIDB4ZWYsIDB4ZjUsIDB4ZGEsIDB4ZmYsCisJMHg3YywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3YiwgMHhlYiwgMHhmYiwKKwkweGVmLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAorCTB4M2YsIDB4NjAsIDB4ZmMsIDB4ZmIsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmYiwgMHgwMCwgMHgwZiwgMHhmMSwgMHhmNSwgMHhmYiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGYzLCAweDg2LCAweDNlLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmIsIDB4NzMsIDB4ZmYsIDB4ZmYsIDB4OWYsCisJMHhhYiwgMHg4YywgMHhmNSwgMHhkMSwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwKKwkweGZlLCAweGViLCAweDM2LCAweDBkLCAweDQ5LAorCTB4YmYsIDB4ZjAsIDB4ZmMsIDB4ZmIsIDB4NzMsIDB4ZmYsIDB4ZjMsIDB4ZmYsCisJMHhmZiwgMHhhYiwgMHhhNywgMHhmMSwgMHhmOSwgMHhmZiwgMHhmNywgMHhkZiwKKwkweGZhLCAweGZiLCAweGZmLCAweGE3LCAweDNmLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmIsIDB4ZmIsIDB4ZmIsIDB4ZmYsCisJMHhhZiwgMHg4ZiwgMHhmOSwgMHhmOSwgMHhkZiwgMHhkZiwgMHhmNywgMHhkYiwKKwkweGZmLCAweGZmLCAweGJhLCAweDJmLCAweDY5LAorCTB4ZmYsIDB4ZTcsIDB4ZmIsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsCisJMHhmZiwgMHhmYiwgMHhkNywgMHhmZiwgMHhkZiwgMHhmNywgMHhkNywgMHhkZiwKKwkweGYzLCAweGRiLCAweGZmLCAweGRiLCAweGZmLAorCTB4ZmYsIDB4ZTMsIDB4N2IsIDB4ZjksIDB4ZmIsIDB4ZmYsIDB4OGYsIDB4ZmIsCisJMHhmOCwgMHhmZiwgMHhmZiwgMHhlZiwgMHhkZiwgMHhmMywgMHhkNywgMHhkZiwKKwkweGEzLCAweDViLCAweGM0LCAweGZiLCAweGVmLAorCTB4N2YsIDB4ZTAsIDB4ZmQsIDB4ZmIsIDB4ZmIsIDB4ZmYsIDB4ZmIsIDB4ZWIsCisJMHhmZiwgMHg4YywgMHhlYiwgMHhmMCwgMHhkMywgMHhmZiwgMHhkNywgMHhmZiwKKwkweGY3LCAweGJiLCAweDdmLCAweDhmLCAweDdlLAorCTB4YmYsIDB4ZmIsIDB4NmMsIDB4ZmIsIDB4ZmIsIDB4ZmYsIDB4ZmIsIDB4ZmYsCisJMHhmYiwgMHhmMywgMHg4YiwgMHhmMywgMHhmNCwgMHhmNywgMHhkNywgMHhmZiwKKwkweGYzLCAweGZmLCAweGZlLCAweGMyLCAweGJmLAorCTB4ZmYsIDB4ODcsIDB4N2YsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHhmZiwgMHhmMCwgMHg4ZiwgMHhmZiwgMHhmNCwgMHhmZiwgMHhkZiwKKwkweGZmLCAweGZiLCAweDhmLCAweDdmLCAweGM1LAorCTB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsCisJMHhmMywgMHg4NywgMHhlZiwgMHhmYywgMHhmZCwgMHhmYiwgMHhmZiwgMHhmZiwKKwkweGRmLCAweGZmLCAweGZiLCAweGFiLCAweDdmLAorCTB4M2YsIDB4ZjMsIDB4ZmEsIDB4ZjksIDB4OGYsIDB4N2YsIDB4ZjAsIDB4ZWIsCisJMHhmYiwgMHhlYywgMHgxZiwgMHhjZiwgMHg3ZSwgMHhmZiwgMHg4ZiwgMHg1ZSwKKwkweGQxLCAweGJmLCAweGZmLCAweGZlLCAweGFhLAorCTB4ZmYsIDB4ODAsIDB4N2QsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmNywgMHg4ZiwgMHg1ZiwgMHg4YywgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZhLCAweDlmLCAweDZmLAorCTB4ZmYsIDB4OWEsIDB4ZmQsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg2ZiwgMHhiZiwgMHhkNywgMHg4OSwgMHg3ZiwgMHhmNCwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGRmLCAweGJmLCAweDZmLAorCTB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmIsIDB4ZmYsCisJMHgyYiwgMHg3MywgMHhmMCwgMHhmMywgMHhmZiwgMHhmZiwgMHhjMywgMHhmZiwKKwkweGZmLCAweGZmLCAweDhiLCAweDYyLCAweGZkLAorCTB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4MGYsIDB4OGIsIDB4OGUsCisJMHhmMCwgMHhkYywgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhhZSwKKwkweDQzLCAweGE5LCAweDczLCAweGY5LCAweGZiLAorCTB4N2YsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZjksIDB4ZmYsCisJMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmMywgMHhmZSwKKwkweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4YmYsIDB4ODcsIDB4ZjgsIDB4ZjgsIDB4ZjksIDB4N2YsIDB4ZjksIDB4ZmYsCisJMHhmZiwgMHg3ZiwgMHg4ZiwgMHg4ZiwgMHhmMCwgMHhmMCwgMHhmMywgMHhmZiwKKwkweGYzLCAweGZiLCAweGZmLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjksIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMywgMHhmZiwKKwkweGZiLCAweGVmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZSwKKwkweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjUsIDB4ZmYsIDB4ZjEsIDB4ZmYsCisJMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMywgMHhmZSwKKwkweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZjEsIDB4ZmYsIDB4ODUsIDB4ZmYsCisJMHhmZSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwKKwkweGYzLCAweGRlLCAweGZmLCAweGYzLCAweGZmLAorCTB4YmYsIDB4ZmYsIDB4MGYsIDB4OWYsIDB4ZmEsIDB4OWYsIDB4ZWIsIDB4ZjIsCisJMHhlNywgMHhmZiwgMHg3YiwgMHhmZiwgMHg0ZiwgMHg3MywgMHgzMSwgMHg4MSwKKwkweDVmLCAweGYxLCAweGZlLCAweGZmLCAweGJmLAorCTB4ZmYsIDB4YWYsIDB4N2YsIDB4OTQsIDB4ZmIsIDB4ZmUsIDB4OGYsIDB4ZmYsCisJMHgwMCwgMHhmZiwgMHhmMCwgMHhlZiwgMHhlZiwgMHg1ZiwgMHhmYiwgMHhmNSwKKwkweDhmLCAweDdmLCAweDgxLCAweDVlLCAweGYxLAorCTB4ZmYsIDB4ZjksIDB4ZmYsIDB4ZWYsIDB4ODYsIDB4MGYsIDB4NzEsIDB4ZjYsCisJMHhmZiwgMHg3ZiwgMHg3ZiwgMHg5NywgMHhjZiwgMHhmZCwgMHhiZiwgMHg1ZiwKKwkweGY5LCAweGYxLCAweGYzLCAweGZmLCAweGZmLAorCTB4M2YsIDB4ZGIsIDB4ZWQsIDB4MWUsIDB4ZmYsIDB4ZjYsIDB4OTUsIDB4OWEsCisJMHg2ZiwgMHgzZCwgMHhmZiwgMHhmOCwgMHhmYiwgMHhkZiwgMHhmNywgMHhmZCwKKwkweGZiLCAweGY3LCAweGZkLCAweGVkLCAweGRlLAorCTB4N2YsIDB4ZjAsIDB4ZjcsIDB4ODcsIDB4N2YsIDB4OWIsIDB4ZmYsIDB4ZWMsCisJMHg5ZiwgMHhiZiwgMHg3ZiwgMHhjZCwgMHg3ZiwgMHhmNywgMHgzYiwgMHhhZCwKKwkweDdlLCAweGY4LCAweGZmLCAweGJiLCAweDc5LAorCTB4ZmYsIDB4ZmYsIDB4ZTMsIDB4N2MsIDB4MDEsIDB4OGQsIDB4ZjUsIDB4ZmIsCisJMHhlNywgMHhmNywgMHhmZiwgMHhmZiwgMHg5ZSwgMHg3ZCwgMHgwZiwgMHg3ZiwKKwkweGYxLCAweGNkLCAweGZlLCAweGY3LCAweGZmLAorCTB4M2YsIDB4ZDcsIDB4ZjQsIDB4OWEsIDB4ZjcsIDB4ZWQsIDB4ZmYsIDB4ZjMsCisJMHhiNywgMHhmZiwgMHhlZiwgMHhmZiwgMHhiZCwgMHhlNywgMHg1ZiwgMHhiZCwKKwkweGZmLCAweGVmLCAweGZlLCAweDdmLCAweGYxLAorCTB4M2YsIDB4ZmYsIDB4ZTcsIDB4ZmYsIDB4Y2YsIDB4ZmEsIDB4ZjgsIDB4ZmYsCisJMHhmZiwgMHhkZiwgMHhiZiwgMHhmZSwgMHhkZiwgMHhmZiwgMHhkMywgMHgxZiwKKwkweGZkLCAweGVmLCAweDdmLCAweGZmLCAweGNmLAorCTB4N2YsIDB4ZmYsIDB4OTMsIDB4ZGYsIDB4ZjAsIDB4ZWYsIDB4ZjMsIDB4ZDQsCisJMHg3NywgMHg2ZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHg3ZiwgMHg3ZCwgMHhmZCwKKwkweDdmLCAweDdkLCAweGZmLCAweGZmLCAweGY3LAorCTB4ZmYsIDB4ZjcsIDB4ZGYsIDB4ZmIsIDB4YmMsIDB4ZWYsIDB4ZmYsIDB4ZmQsCisJMHhmZiwgMHhmZiwgMHhmYywgMHg3ZiwgMHhiNywgMHhmZiwgMHhmZCwgMHg1ZiwKKwkweGNmLCAweGZmLCAweGVmLCAweDdmLCAweGZkLAorCTB4ZmYsIDB4ZWUsIDB4ODcsIDB4ZWYsIDB4OTIsIDB4ZjAsIDB4N2UsIDB4ZTUsCisJMHhiZiwgMHg4ZiwgMHg3ZiwgMHg2MCwgMHhkOSwgMHhkYiwgMHg3MSwgMHhiMywKKwkweDJkLCAweDQ5LCAweDZjLCAweDI5LCAweDdmLAorCTB4YmYsIDB4ZmYsIDB4ZTQsIDB4NmYsIDB4ZjMsIDB4ZmEsIDB4NTcsIDB4ZmQsCisJMHhmZiwgMHhmZSwgMHhiNywgMHg3ZiwgMHhmYywgMHhmZiwgMHg3MywgMHhkZiwKKwkweGYzLCAweDdmLCAweGZkLCAweGZmLCAweGJmLAorCTB4ZmYsIDB4ZWYsIDB4OGIsIDB4N2YsIDB4OGYsIDB4ZmYsIDB4ZjIsIDB4ZmYsCisJMHhmZiwgMHhmNywgMHhmYiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhlZCwgMHhlZiwKKwkweGYxLCAweGY3LCAweGZkLCAweGRmLCAweGY3LAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZTcsIDB4ZTYsIDB4ZjEsIDB4ZmYsCisJMHhkZiwgMHhmYiwgMHhlOSwgMHhmZSwgMHhiZiwgMHhmZiwgMHhiZiwgMHg1ZiwKKwkweGZmLCAweGJmLCAweDBlLCAweDc1LCAweGZhLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NmYsIDB4ZmIsIDB4ZjksIDB4ZmYsIDB4ZmYsCisJMHhmMywgMHhmZiwgMHhmYiwgMHhiZiwgMHhlZiwgMHhmZiwgMHhmMywgMHg3ZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZiLCAweGZmLAorCTB4ZmYsIDB4MzgsIDB4ZjgsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4OWYsCisJMHhmNywgMHgwYiwgMHgwZiwgMHhmNSwgMHhmNSwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGJmLCAweGY3LCAweGYzLCAweDhlLCAweDBlLAorCTB4YmYsIDB4ZTgsIDB4NmYsIDB4ZWYsIDB4N2YsIDB4ZmYsIDB4ZGYsIDB4ZGYsCisJMHhlZiwgMHg4OCwgMHhmNSwgMHg5MSwgMHhmYiwgMHhmZiwgMHhmZiwgMHhiZiwKKwkweGZlLCAweGJmLCAweGE2LCAweDgxLCAweDcxLAorCTB4ZmYsIDB4ZjAsIDB4ZjgsIDB4ZmYsIDB4NjcsIDB4ZWYsIDB4ZmYsIDB4YjcsCisJMHhmNywgMHg4ZiwgMHgyZiwgMHhkMSwgMHg0MSwgMHhmZiwgMHhjZiwgMHg1ZiwKKwkweGZlLCAweGZmLCAweDdiLCAweDhmLCAweDlmLAorCTB4ZmYsIDB4ZjgsIDB4NmYsIDB4ZWYsIDB4ZjcsIDB4ZTcsIDB4ZmYsIDB4ZmYsCisJMHhiZiwgMHg4ZiwgMHhkMSwgMHhmMSwgMHhjZiwgMHhkZiwgMHhjZiwgMHhkZiwKKwkweGZmLCAweGZmLCAweDlmLCAweDhmLCAweGUxLAorCTB4ZmYsIDB4ZTcsIDB4ZmYsIDB4ZjcsIDB4ZTcsIDB4NmYsIDB4ZjcsIDB4ZTcsCisJMHhlNywgMHg3NywgMHhlZiwgMHhlZiwgMHg2ZiwgMHhmZiwgMHhmZiwgMHhkZiwKKwkweGZmLCAweGRmLCAweGRmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4YTcsIDB4NmYsIDB4ZmYsIDB4ZjcsIDB4ZWYsIDB4OTcsIDB4ZTcsCisJMHhmMCwgMHhlZiwgMHg3ZiwgMHhhZiwgMHg0ZiwgMHhmZiwgMHhmZiwgMHhkZiwKKwkweGJmLCAweDVmLCAweGUwLCAweDdmLCAweGVmLAorCTB4N2YsIDB4YTAsIDB4ZWYsIDB4ZmYsIDB4ZTcsIDB4ZmYsIDB4ZjcsIDB4ZjcsCisJMHhmZiwgMHg4YiwgMHhiZiwgMHhmOCwgMHhkZiwgMHhmZiwgMHhjZiwgMHg3ZSwKKwkweGZmLCAweGRmLCAweDdmLCAweDhlLCAweDVmLAorCTB4ZmYsIDB4ZmYsIDB4MzgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZjcsCisJMHhmNywgMHhmNywgMHg4ZiwgMHhmNywgMHhmOCwgMHhmNywgMHhjZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZlLCAweGNiLCAweDNmLAorCTB4M2YsIDB4OWYsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHhmZiwgMHhmMCwgMHhhZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhkZiwKKwkweGZmLCAweGZmLCAweGFlLCAweDdmLCAweGMxLAorCTB4N2YsIDB4ZjAsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsCisJMHhmNywgMHhiZiwgMHhiZiwgMHhkMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweDhmLCAweGZmLCAweGZmLCAweDliLCAweGZmLAorCTB4N2YsIDB4Y2YsIDB4ZjgsIDB4ZmYsIDB4OGYsIDB4NmYsIDB4ZTAsIDB4ZDcsCisJMHhmNywgMHhmNywgMHhmZiwgMHhmZSwgMHhmMCwgMHhmZSwgMHg4ZiwgMHg1ZSwKKwkweGQxLCAweGZmLCAweGRmLCAweGRmLCAweGJlLAorCTB4ZmYsIDB4ODQsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmYsCisJMHhmZiwgMHhhZiwgMHg3ZiwgMHg4MSwgMHg3ZiwgMHhmNSwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZhLCAweDlmLCAweDNmLAorCTB4ZmYsIDB4ZDgsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHgwZiwgMHhmZiwgMHg4NSwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZSwKKwkweGJmLCAweGZmLCAweGRmLCAweDZmLCAweGJmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YWYsIDB4ZmYsIDB4ZjcsIDB4ZGYsCisJMHhmNywgMHg0NywgMHhmNCwgMHhmZiwgMHhlZiwgMHhmZiwgMHhkZiwgMHg3ZiwKKwkweGZmLCAweGJmLCAweGNmLCAweDVhLCAweGYxLAorCTB4ZmYsIDB4YmYsIDB4YmYsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4OGYsIDB4YzAsCisJMHhmMywgMHhkMSwgMHhmZiwgMHhmYiwgMHhlZiwgMHhmZiwgMHhkZiwgMHhiZSwKKwkweDBmLCAweDI1LCAweGU5LCAweGQxLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZjcsCisJMHgyZiwgMHhhZiwgMHhmMywgMHhmYiwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGNmLCAweGJmLCAweGZiLAorCTB4YmYsIDB4ODcsIDB4ZjgsIDB4ZjgsIDB4ZGYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHg4ZiwgMHhlMCwgMHhmMCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhlYiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZSwKKwkweGZiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4Y2YsIDB4ZmYsCisJMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYiwgMHhmZSwKKwkweGNmLCAweGZmLCAweDdiLCAweGZkLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZGYsIDB4ZmYsIDB4YmYsIDB4ZmYsCisJMHhmYiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweGZiLCAweGJlLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4ZjAsIDB4ZDQsIDB4YmYsIDB4ZjAsCisJMHhiZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5MywgMHgyZiwgMHhmZCwgMHhhZCwKKwkweGY3LCAweDc1LCAweGZmLCAweGZmLCAweGZlLAorCTB4YmYsIDB4N2YsIDB4ZmYsIDB4OWEsIDB4ZmYsIDB4ZjQsIDB4MGYsIDB4ZmYsCisJMHgwMCwgMHhkZSwgMHhmMCwgMHhmMywgMHhmOSwgMHhiZiwgMHg3ZCwgMHhmZiwKKwkweDhmLCAweDdmLCAweDgxLCAweDBmLCAweGQxLAorCTB4ZmYsIDB4ZmIsIDB4ZGYsIDB4ZWUsIDB4OGIsIDB4MGIsIDB4NzgsIDB4ZjAsCisJMHhmZiwgMHhmYSwgMHg3ZiwgMHhiZiwgMHhmZiwgMHhkNSwgMHg4ZiwgMHg4ZiwKKwkweGUxLCAweGY3LCAweGZiLCAweGZiLCAweGZmLAorCTB4N2YsIDB4YjcsIDB4OTksIDB4ZWYsIDB4ZGYsIDB4ZjQsIDB4ZmYsIDB4ZmYsCisJMHhlNCwgMHhmNCwgMHg1ZCwgMHhmNiwgMHhlZiwgMHg5ZiwgMHhlZiwgMHhmNywKKwkweDNiLCAweDNmLCAweGRmLCAweGJmLCAweGVjLAorCTB4ZmYsIDB4ZWMsIDB4ZjcsIDB4YjksIDB4NmIsIDB4YmMsIDB4ZmIsIDB4ZjcsCisJMHhlZiwgMHhmZiwgMHg3ZSwgMHhmZCwgMHg3ZSwgMHhiYiwgMHhkZiwgMHg4NSwKKwkweGZlLCAweGY3LCAweGZmLCAweDdiLCAweDdmLAorCTB4ZmYsIDB4ZmYsIDB4YTcsIDB4ZWUsIDB4ZTcsIDB4NWYsIDB4ZTAsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHg1ZiwgMHhlNiwgMHg2ZiwgMHg4MSwgMHg4ZCwKKwkweGQ1LCAweGY3LCAweGJmLCAweGVmLCAweGI2LAorCTB4ZmYsIDB4ZDcsIDB4ZjQsIDB4ZWUsIDB4YjcsIDB4N2MsIDB4ZmYsIDB4ZDcsCisJMHhhZiwgMHg3ZiwgMHhlZCwgMHg5ZiwgMHhlNSwgMHhiZiwgMHhmNywgMHg3ZCwKKwkweGZiLCAweGI3LCAweGFkLCAweGQ3LCAweGZkLAorCTB4YmYsIDB4ZmYsIDB4ZmYsIDB4YzcsIDB4OGIsIDB4ZmYsIDB4ZjAsIDB4ZjYsCisJMHhmZiwgMHhmZCwgMHhmYiwgMHhmZiwgMHhkZiwgMHhiZSwgMHgwZiwgMHg3ZiwKKwkweGQ1LCAweGY3LCAweGZmLCAweGYyLCAweGZlLAorCTB4ZmYsIDB4ZmYsIDB4YzUsIDB4ZmYsIDB4ZjAsIDB4N2MsIDB4ZmYsIDB4YWQsCisJMHg3ZiwgMHg3ZiwgMHhlZiwgMHhmZiwgMHhjZiwgMHg0ZiwgMHhmMSwgMHhmNSwKKwkweDdiLCAweGRkLCAweGZmLCAweGRmLCAweGZmLAorCTB4ZmYsIDB4NzcsIDB4ZWYsIDB4ZmYsIDB4ZDgsIDB4YmYsIDB4ZjcsIDB4ZjMsCisJMHg1ZiwgMHhmYiwgMHhmOSwgMHg3ZiwgMHhlNywgMHhmZiwgMHhkNywgMHg3ZiwKKwkweGFkLCAweGZmLCAweGZiLCAweGZiLCAweGYzLAorCTB4ZmYsIDB4Y2MsIDB4OTUsIDB4OGYsIDB4ZDgsIDB4ZjMsIDB4ZmMsIDB4YmMsCisJMHhkYywgMHhkZiwgMHhiYiwgMHg0NCwgMHg4YiwgMHhjYiwgMHg4NywgMHhiMSwKKwkweGI3LCAweGE3LCAweDk3LCAweGVlLCAweGYzLAorCTB4ZmYsIDB4N2YsIDB4YjQsIDB4YmYsIDB4ZmYsIDB4YzcsIDB4N2YsIDB4Y2IsCisJMHhmZCwgMHhiZiwgMHg3ZiwgMHg3ZiwgMHg3NCwgMHhlNywgMHhkZiwgMHhmNSwKKwkweGJiLCAweGNmLCAweGVkLCAweGZlLCAweGZkLAorCTB4ZmYsIDB4M2YsIDB4ZmIsIDB4NzcsIDB4Y2MsIDB4YmIsIDB4ZjAsIDB4ZmIsCisJMHhmZiwgMHhlZiwgMHhiZSwgMHhmZiwgMHhjZiwgMHhmZiwgMHg4NSwgMHgzZiwKKwkweGI1LCAweGZmLCAweGY3LCAweDM3LCAweDdmLAorCTB4M2YsIDB4ZjcsIDB4YmYsIDB4Y2YsIDB4OWYsIDB4ZDcsIDB4ZjcsIDB4ZWYsCisJMHhmZiwgMHg3OCwgMHhlNywgMHhmZiwgMHhmZiwgMHhmZiwgMHgxZiwgMHg3ZiwKKwkweDY1LCAweGJmLCAweGJmLCAweGZmLCAweGU3LAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZGIsIDB4ZjcsIDB4ZGYsIDB4ZmYsCisJMHg3NywgMHg3ZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHhiZiwgMHhkZSwgMHg3NywKKwkweGRkLCAweGZmLCAweGZmLCAweGZlLCAweGZmLAorCTB4YmYsIDB4NjgsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4Y2YsIDB4Y2YsCisJMHhmMywgMHgxNywgMHgzZiwgMHhkNSwgMHhkZCwgMHhmNywgMHhmZiwgMHhmZiwKKwkweGNmLCAweGRmLCAweDczLCAweDk1LCAweDNmLAorCTB4ZmYsIDB4YWMsIDB4NmYsIDB4ZWYsIDB4NzcsIDB4ZGYsIDB4ZmYsIDB4ZjcsCisJMHhiYiwgMHg4NSwgMHhkZCwgMHhlMSwgMHhmNywgMHhmYiwgMHg3YiwgMHhkZiwKKwkweGZlLCAweGZmLCAweGI3LCAweDlmLCAweDc5LAorCTB4ZmYsIDB4ZDgsIDB4YWMsIDB4ZmIsIDB4NDcsIDB4YWYsIDB4ZWIsIDB4ZjcsCisJMHhmZiwgMHhhZiwgMHgyZSwgMHg3MCwgMHhkOSwgMHhmNywgMHhmYiwgMHhkZiwKKwkweGVhLCAweGZiLCAweGZiLCAweDFiLCAweDVmLAorCTB4ZmYsIDB4ZjgsIDB4NmYsIDB4YWYsIDB4ZDcsIDB4YjcsIDB4ZWIsIDB4ZmYsCisJMHhlNywgMHhhZiwgMHg3YywgMHg3MCwgMHhmYiwgMHhkZiwgMHhmZiwgMHg3YiwKKwkweGZiLCAweGZmLCAweGRhLCAweDlmLCAweGY5LAorCTB4ZmYsIDB4OTUsIDB4YmIsIDB4ZmQsIDB4YzcsIDB4Y2YsIDB4ZmIsIDB4ODMsCisJMHhlZiwgMHhmMywgMHhiZiwgMHhjZiwgMHg0NywgMHhmNywgMHhlNywgMHgxZiwKKwkweGQ3LCAweDhiLCAweDZmLCAweDMzLCAweGJlLAorCTB4ZmYsIDB4YzcsIDB4NmYsIDB4ZmQsIDB4OTcsIDB4MmYsIDB4ZWIsIDB4YjcsCisJMHhkYywgMHg3NywgMHhkNywgMHgxZiwgMHg2NywgMHhmNywgMHhlNywgMHg5ZSwKKwkweGU3LCAweGRiLCAweDM0LCAweGRiLCAweGZiLAorCTB4N2YsIDB4YTgsIDB4ZWYsIDB4ZmYsIDB4ZTcsIDB4ZWYsIDB4ZmYsIDB4ZjcsCisJMHhmZiwgMHg4YiwgMHhiZiwgMHhkOCwgMHhlZiwgMHhmZiwgMHhlNywgMHhkZiwKKwkweGY3LCAweGZiLCAweGY3LCAweDlmLCAweDY2LAorCTB4ZmYsIDB4ZmIsIDB4NmMsIDB4ZmYsIDB4YjcsIDB4OWYsIDB4Y2YsIDB4Y2IsCisJMHhiYiwgMHg5MywgMHhhZiwgMHhmZiwgMHhhOCwgMHhmZiwgMHhjNywgMHgzZiwKKwkweGE3LCAweGNmLCAweGZlLCAweGUzLCAweDNmLAorCTB4M2YsIDB4ZGYsIDB4N2IsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCisJMHg4ZiwgMHgzZiwgMHhkMCwgMHhkMywgMHg3ZiwgMHhmYywgMHhmZiwgMHg4ZSwKKwkweGZmLCAweGYzLCAweDhmLCAweDRlLCAweGU0LAorCTB4N2YsIDB4YjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4OGYsIDB4ZGYsCisJMHhmMywgMHhiYiwgMHgzZiwgMHhlMCwgMHhmMywgMHhmZiwgMHhmZiwgMHhlZiwKKwkweDhmLCAweGQ3LCAweGYzLCAweGFiLCAweGVmLAorCTB4N2YsIDB4OGYsIDB4ZjgsIDB4ZmIsIDB4OGYsIDB4NmYsIDB4YTAsIDB4ZmYsCisJMHhmZiwgMHhkYywgMHhmZiwgMHg1ZiwgMHhmYywgMHhmMywgMHg4ZiwgMHg2ZSwKKwkweGIxLCAweGY3LCAweGY3LCAweGY3LCAweDNlLAorCTB4ZmYsIDB4OTAsIDB4N2IsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZGYsIDB4ZmYsCisJMHhmYiwgMHg5ZiwgMHg3ZiwgMHhhMCwgMHhmMywgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGRmLCAweGZmLCAweGRiLCAweGJmLCAweDNmLAorCTB4ZmYsIDB4ZGMsIDB4ZmIsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3NywgMHhhZiwgMHhmZiwgMHhhZCwgMHhmMywgMHhmOCwgMHhmZiwgMHhmZSwKKwkweGVmLCAweGZmLCAweGZmLCAweDZmLCAweGJmLAorCTB4ZmYsIDB4ZmYsIDB4Y2YsIDB4ZmYsIDB4YTMsIDB4ZmYsIDB4YWYsIDB4Y2YsCisJMHg5MywgMHhjMywgMHg3NCwgMHhlZiwgMHhkZiwgMHhmZiwgMHhhYiwgMHgyZiwKKwkweGU3LCAweGM3LCAweGYzLCAweDczLCAweDc5LAorCTB4ZmYsIDB4ZmYsIDB4Y2YsIDB4ZmYsIDB4YzMsIDB4N2YsIDB4ODMsIDB4ZTQsCisJMHhkMywgMHhiYywgMHg3YiwgMHhkYiwgMHhkZiwgMHg3ZiwgMHg4YiwgMHg4ZSwKKwkweDgzLCAweDAxLCAweDUxLCAweGQ1LCAweDdiLAorCTB4ZmYsIDB4ZmIsIDB4ZGYsIDB4ZmYsIDB4YzMsIDB4ZWYsIDB4YjMsIDB4ZmYsCisJMHhiNywgMHhmZiwgMHhmZSwgMHhiZiwgMHhkZiwgMHhmZiwgMHg4YiwgMHg2ZSwKKwkweGYzLCAweGZiLCAweGI3LCAweDFmLCAweGZlLAorCTB4YmYsIDB4ODIsIDB4YzgsIDB4ZjgsIDB4ZDMsIDB4N2YsIDB4ZjMsIDB4ZmIsCisJMHhmZiwgMHhlZiwgMHg4NywgMHg4NywgMHhkMCwgMHg3MCwgMHg4YiwgMHhmZiwKKwkweGYzLCAweGZmLCAweGVmLCAweGVmLCAweDg3LAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NDcsIDB4ZmYsIDB4ZjMsIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHg3ZiwgMHhjYiwgMHhlZiwKKwkweGYyLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4ZWYsIDB4ZjIsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmNywgMHhlZiwgMHhkZiwgMHhmNywgMHhjYSwgMHg3ZiwKKwkweGYzLCAweGY3LCAweGVmLCAweGZmLCAweGY2LAorCTB4ZmYsIDB4ZmEsIDB4ZmIsIDB4ZmYsIDB4ZTcsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhlZiwgMHhmZiwgMHhmNywgMHg1NywgMHg3ZiwgMHhjYSwgMHhlZiwKKwkweGYzLCAweGZmLCAweGZmLCAweGVmLCAweGVmLAorCTB4ZmYsIDB4ZjYsIDB4ZWIsIDB4ZmEsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4OGYsCisJMHhmZiwgMHhlMywgMHhmNywgMHhlZiwgMHhkNywgMHhmNywgMHhjYiwgMHg3ZiwKKwkweGYzLCAweDhmLCAweDZjLCAweGYyLCAweGU3LAorCTB4ZmYsIDB4ZmYsIDB4MmYsIDB4ZmYsIDB4ZjEsIDB4OWQsIDB4OWUsIDB4ZjQsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHgwZiwgMHhmZiwgMHhmMSwgMHgwOSwKKwkweDNmLCAweGY5LCAweGJmLCAweGY3LCAweGZiLAorCTB4ZmYsIDB4ZWYsIDB4N2YsIDB4ZjYsIDB4ZmIsIDB4ZjUsIDB4MGYsIDB4ZGYsCisJMHgwMCwgMHhmZiwgMHhkMCwgMHhiZiwgMHhjMCwgMHhiZiwgMHhmOSwgMHhmZiwKKwkweDhmLCAweDdmLCAweDgxLCAweDZmLCAweGUxLAorCTB4ZmYsIDB4ZmYsIDB4OWUsIDB4YWYsIDB4ZjcsIDB4MGYsIDB4MTgsIDB4ZDksCisJMHhiZiwgMHg2ZiwgMHgzNywgMHhlZiwgMHg4ZiwgMHhmZiwgMHg5ZSwgMHgwNiwKKwkweDc1LCAweGY3LCAweGY2LCAweGZmLCAweGVmLAorCTB4N2YsIDB4ZjcsIDB4Y2YsIDB4YmIsIDB4ZmIsIDB4NmQsIDB4ZmIsIDB4ZWYsCisJMHg3ZCwgMHhlOSwgMHhmZiwgMHhmZiwgMHhiZiwgMHhjMiwgMHhmNywgMHg2ZiwKKwkweGZmLCAweGRjLCAweGZmLCAweGYzLCAweGZhLAorCTB4N2YsIDB4NmYsIDB4ZjcsIDB4ZjksIDB4ZmYsIDB4NmQsIDB4ZmUsIDB4OWMsCisJMHhiZiwgMHhiZiwgMHg3ZCwgMHhlMiwgMHg3ZiwgMHg3NywgMHg5ZiwgMHhjZCwKKwkweGI3LCAweGI1LCAweGZmLCAweGZmLCAweDdmLAorCTB4N2YsIDB4ZmYsIDB4ODcsIDB4YWUsIDB4ODYsIDB4ZGYsIDB4YzAsIDB4ZmQsCisJMHhmYiwgMHhmYSwgMHhmZiwgMHhmZiwgMHg4ZSwgMHg2ZCwgMHhkNSwgMHgzZCwKKwkweGYxLCAweGZmLCAweGZlLCAweGVmLCAweGZmLAorCTB4ZmYsIDB4M2YsIDB4ZDIsIDB4YTQsIDB4ZmUsIDB4ZDksIDB4ZjcsIDB4ZmUsCisJMHhkZiwgMHhmZiwgMHhjYiwgMHhmZiwgMHhkZCwgMHg3ZSwgMHhiYiwgMHhkZCwKKwkweDVmLCAweGY3LCAweGJmLCAweGZmLCAweGVkLAorCTB4ZmYsIDB4ZmUsIDB4ZjUsIDB4ZmYsIDB4YjcsIDB4ZjYsIDB4YjQsIDB4YWUsCisJMHhmZSwgMHhlZiwgMHhmNywgMHhmZiwgMHhmZiwgMHg4ZiwgMHgwNywgMHg3YiwKKwkweGZiLCAweGZmLCAweDdmLCAweGZmLCAweGY3LAorCTB4ZmYsIDB4N2IsIDB4YTMsIDB4YmYsIDB4ZTMsIDB4ZmYsIDB4ZmYsIDB4ZjcsCisJMHhmNywgMHhmZCwgMHhkZiwgMHhmZiwgMHg4ZiwgMHg3ZiwgMHg5YiwgMHhkZiwKKwkweGZiLCAweGVmLCAweGZlLCAweGZmLCAweDNmLAorCTB4ZmYsIDB4NmYsIDB4ZmYsIDB4N2YsIDB4YjMsIDB4N2YsIDB4ZGYsIDB4YmQsCisJMHg3OCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhlZiwgMHhmZiwKKwkweGRmLCAweGVlLCAweDlkLCAweGZkLCAweGVmLAorCTB4ZmYsIDB4ZjgsIDB4MDUsIDB4OGUsIDB4YjAsIDB4NTgsIDB4ZjcsIDB4ZmMsCisJMHhhNCwgMHg4NSwgMHhkZCwgMHhiYywgMHgwYiwgMHgwNSwgMHg2MSwgMHhmOCwKKwkweGI3LCAweGZmLCAweGViLCAweGVmLCAweDdmLAorCTB4YmYsIDB4ZmYsIDB4YzcsIDB4YmIsIDB4ZDgsIDB4NmYsIDB4NzksIDB4ZGUsCisJMHhmZiwgMHhmZiwgMHhjZiwgMHhmZiwgMHhiYSwgMHhhZiwgMHhkOSwgMHg3YiwKKwkweGZkLCAweGZmLCAweGY1LCAweGRmLCAweGJmLAorCTB4ZmYsIDB4ZmYsIDB4YWYsIDB4N2YsIDB4ODgsIDB4N2YsIDB4ZjAsIDB4ZWEsCisJMHhmZSwgMHg3ZiwgMHhmMiwgMHhmZiwgMHhkZiwgMHhkNywgMHg0ZiwgMHg3ZiwKKwkweGUzLCAweGRlLCAweGZmLCAweGZmLCAweGY3LAorCTB4ZmYsIDB4N2QsIDB4NmYsIDB4NWYsIDB4YWIsIDB4ZmYsIDB4N2EsIDB4YjYsCisJMHhiZiwgMHg3OCwgMHhkZCwgMHg3ZiwgMHhkZSwgMHhlZiwgMHg0YiwgMHg5YiwKKwkweGViLCAweDdmLCAweDc2LCAweDlmLCAweGFjLAorCTB4ZmYsIDB4Y2YsIDB4ZmYsIDB4ZmYsIDB4YjcsIDB4N2YsIDB4YWUsIDB4ZWYsCisJMHhkYiwgMHhlZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmYiwgMHhlNywgMHhmZSwKKwkweGJmLCAweDdlLCAweGZiLCAweGY3LCAweGZiLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4Y2YsIDB4YmYsIDB4ZmYsIDB4ZmYsCisJMHhmMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhkNywgMHhmZiwKKwkweGU5LCAweGVmLCAweGYyLCAweGZlLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4OGQsIDB4YWYsIDB4ZjIsCisJMHg3MSwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhjZiwKKwkweDBmLCAweDc1LCAweGYxLCAweGZmLCAweGZmLAorCTB4M2YsIDB4NzgsIDB4YmMsIDB4ZmIsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4YmYsCisJMHhmMywgMHgwZiwgMHgzZiwgMHhjOSwgMHhlOSwgMHg3ZiwgMHhmNywgMHhkZiwKKwkweGZmLCAweGZmLCAweDU3LCAweDgyLCAweDJlLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmIsIDB4N2EsIDB4ZmIsIDB4ZmYsIDB4ZmYsCisJMHhlYiwgMHg4NywgMHg5YiwgMHhmMSwgMHhlNSwgMHg3ZiwgMHg3NSwgMHg3ZiwKKwkweGZlLCAweGZmLCAweGJlLCAweDM5LCAweDc5LAorCTB4ZmYsIDB4Y2QsIDB4YmYsIDB4ZmQsIDB4N2UsIDB4ZmYsIDB4ZmIsIDB4ZjQsCisJMHhmNywgMHhlZCwgMHg2ZiwgMHhmMywgMHg2YiwgMHhmNywgMHhkNywgMHhiZiwKKwkweGZlLCAweGZkLCAweGY3LCAweDhmLCAweGVmLAorCTB4ZmYsIDB4ZjgsIDB4N2EsIDB4ZmYsIDB4ZmEsIDB4ZjAsIDB4ZmYsIDB4ZmYsCisJMHhlNiwgMHg4ZiwgMHg5YiwgMHhmMSwgMHhhZCwgMHhiZiwgMHhmNywgMHhmZCwKKwkweGJmLCAweGZkLCAweGVmLCAweDhmLCAweDNmLAorCTB4YmYsIDB4ZmYsIDB4YWQsIDB4ZmIsIDB4ZjQsIDB4YmYsIDB4ZjMsIDB4OTAsCisJMHhkZCwgMHhmMCwgMHhmYSwgMHhjZiwgMHhlNywgMHhmMiwgMHhmNywgMHg3ZiwKKwkweGZmLCAweGFkLCAweGZmLCAweGY1LCAweGRmLAorCTB4ZmYsIDB4Y2IsIDB4N2IsIDB4ZmEsIDB4ZDIsIDB4N2YsIDB4YzcsIDB4ZjMsCisJMHhhOSwgMHhmNywgMHhlNywgMHg4YiwgMHhlNywgMHhmMSwgMHhmNywgMHgzZiwKKwkweDhmLCAweDdmLCAweGIwLCAweGRmLCAweGZkLAorCTB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmIsIDB4ZjIsIDB4ZmYsIDB4ZDIsIDB4ZTMsCisJMHhkZiwgMHg4NywgMHhkMywgMHhmMCwgMHhlZCwgMHhmZiwgMHhmNywgMHg3ZiwKKwkweGZmLCAweGVmLCAweDc3LCAweGFhLCAweDdmLAorCTB4YmYsIDB4ZWEsIDB4ZmMsIDB4ZmIsIDB4YjMsIDB4YmYsIDB4YjMsIDB4ZmYsCisJMHhkOCwgMHg5MywgMHhhYiwgMHhmMSwgMHhhYywgMHhmZiwgMHhmNywgMHgzZiwKKwkweGFmLCAweGVmLCAweGVkLCAweGM3LCAweGFkLAorCTB4ZmYsIDB4ZDYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZjQsCisJMHg4ZiwgMHhiZiwgMHhiMSwgMHhlZCwgMHhmNSwgMHhmYiwgMHhmZiwgMHhlZiwKKwkweGZmLCAweGY1LCAweDhmLCAweGRmLCAweGYxLAorCTB4ZmYsIDB4ZjgsIDB4ZmUsIDB4ZmIsIDB4ZmYsIDB4ZGYsIDB4OWYsIDB4ZjgsCisJMHhmMCwgMHhlZiwgMHhmZiwgMHhkMCwgMHhmZCwgMHhmNywgMHhmZiwgMHhlZiwKKwkweGFmLCAweGY1LCAweGY3LCAweGNlLCAweDdmLAorCTB4N2YsIDB4ODMsIDB4N2QsIDB4ZmEsIDB4OGYsIDB4NWYsIDB4ZDAsIDB4Y2IsCisJMHhlOSwgMHhiYiwgMHg3NiwgMHg5ZiwgMHg3YiwgMHhmNywgMHg4ZiwgMHg2ZSwKKwkweGIxLCAweGQ1LCAweGY3LCAweDVmLCAweGM2LAorCTB4ZmYsIDB4YTMsIDB4N2YsIDB4ZmMsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhkZiwgMHg5ZiwgMHg3ZiwgMHhhOCwgMHg3NywgMHhmNSwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZlLCAweDdmLCAweDJkLAorCTB4ZmYsIDB4OTYsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHgzNywgMHg2ZiwgMHhmZCwgMHhhZiwgMHg3NywgMHhmOCwgMHhmZiwgMHhmZiwKKwkweGVmLCAweGZmLCAweGZmLCAweGZmLCAweDRiLAorCTB4ZmYsIDB4NzIsIDB4YWYsIDB4ZmYsIDB4ZTUsIDB4ZGYsIDB4OTksIDB4ZmMsCisJMHgxMCwgMHg2MywgMHhmMCwgMHhlZiwgMHhlZiwgMHg3ZiwgMHg4YiwgMHhlZiwKKwkweGFmLCAweGU3LCAweGY1LCAweGY3LCAweDdkLAorCTB4ZmYsIDB4ZWYsIDB4OGYsIDB4ZmYsIDB4YTEsIDB4NGYsIDB4ODEsIDB4ZTcsCisJMHhiMCwgMHhmYSwgMHhmZSwgMHhkNywgMHhjZiwgMHhmZiwgMHhjYSwgMHhjZiwKKwkweDBiLCAweDg1LCAweDcxLCAweGZhLCAweGZmLAorCTB4ZmYsIDB4ZGQsIDB4ZWYsIDB4ZmYsIDB4YTQsIDB4ZGYsIDB4YjEsIDB4ZGMsCisJMHhkMywgMHhmZiwgMHhmOCwgMHhmZiwgMHhjZiwgMHg3ZiwgMHhjYiwgMHg3ZiwKKwkweGZmLCAweGY1LCAweGZmLCAweGJmLCAweGZkLAorCTB4YmYsIDB4ODIsIDB4YzgsIDB4ZjgsIDB4ZTEsIDB4N2YsIDB4ZjAsIDB4ZGYsCisJMHhmZiwgMHhlZiwgMHg4NywgMHg4NywgMHhjMCwgMHhmMCwgMHhjYSwgMHgyZiwKKwkweGZiLCAweGZmLCAweGVmLCAweGVlLCAweDk3LAorCTB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmEsIDB4YTUsIDB4ZGYsIDB4ZDEsIDB4ZjcsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3NywgMHhkYiwgMHhlZiwKKwkweGZmLCAweGY1LCAweGZkLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZjYsIDB4OGIsIDB4ZjIsIDB4OTQsIDB4ZmYsIDB4ZjEsIDB4ZjcsCisJMHhmZiwgMHhmZiwgMHhmNywgMHhlZiwgMHhkNywgMHhmNywgMHhkZiwgMHhlZSwKKwkweGZiLCAweGZmLCAweGVmLCAweGZmLCAweGY3LAorCTB4ZmYsIDB4ZjMsIDB4Y2IsIDB4ZmYsIDB4ZTYsIDB4ZmYsIDB4ZjEsIDB4ZWYsCisJMHhmZiwgMHhlZiwgMHhmZiwgMHhlNywgMHhkNywgMHg3ZiwgMHhkYiwgMHg3ZSwKKwkweGZkLCAweGY3LCAweGZmLCAweGVmLCAweGVmLAorCTB4ZmYsIDB4ZmUsIDB4Y2YsIDB4ZmYsIDB4YzQsIDB4ZmYsIDB4ZjIsIDB4OWYsCisJMHhmZiwgMHhlMCwgMHhmNywgMHhmZiwgMHhkZiwgMHhmZiwgMHhkZiwgMHg3ZiwKKwkweGRiLCAweGFjLCAweGVmLCAweGYxLCAweGY3LAorCTB4N2YsIDB4ZWYsIDB4MGYsIDB4NWYsIDB4YjQsIDB4OGYsIDB4ZmYsIDB4ZjYsCisJMHhmZCwgMHhmZiwgMHg2ZiwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhlOSwgMHg4ZCwKKwkweDdmLCAweGYxLCAweGQxLCAweGY3LCAweGZlLAorCTB4ZmYsIDB4ZTcsIDB4N2YsIDB4ODcsIDB4ZmQsIDB4ZTcsIDB4OGYsIDB4OWIsCisJMHgwMCwgMHhmZiwgMHhiMCwgMHg3ZCwgMHhmZCwgMHhjZiwgMHhmYiwgMHhmZCwKKwkweDhmLCAweDdmLCAweDgxLCAweDZkLCAweGQxLAorCTB4ZmYsIDB4YmMsIDB4ZWQsIDB4ZmYsIDB4ODYsIDB4NmUsIDB4MTAsIDB4ZjEsCisJMHhmNCwgMHg1ZiwgMHg3ZiwgMHhmZSwgMHg5ZiwgMHgzNywgMHhjMywgMHg4ZiwKKwkweGY3LCAweGU1LCAweGZiLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZmUsIDB4ZmYsIDB4ZmQsIDB4OTcsIDB4ZmYsIDB4ZmIsIDB4ZmYsCisJMHgzZiwgMHhmZiwgMHhmOSwgMHhjMywgMHgxZiwgMHhmOCwgMHhmZiwgMHhiNSwKKwkweDVmLCAweGVmLCAweGRjLCAweGZmLCAweGJlLAorCTB4ZmYsIDB4Y2IsIDB4ZTcsIDB4ZmQsIDB4NjksIDB4ZTcsIDB4ZmMsIDB4YjYsCisJMHhlZiwgMHg5YSwgMHg3NywgMHhiNiwgMHg2NywgMHhkZiwgMHhlZiwgMHhmNywKKwkweGZlLCAweGRmLCAweGZmLCAweGY1LCAweDdmLAorCTB4ZmYsIDB4ZjcsIDB4OTcsIDB4YmUsIDB4ZjQsIDB4ZmYsIDB4ZjEsIDB4YmEsCisJMHhmZSwgMHhmZiwgMHg5NywgMHg3ZiwgMHhiZiwgMHg3NywgMHg1NSwgMHhkZiwKKwkweGQ5LCAweGYxLCAweGZmLCAweGRmLCAweGZmLAorCTB4YmYsIDB4YmYsIDB4NzIsIDB4ZjIsIDB4ZGQsIDB4ZmYsIDB4ZTQsIDB4ZmYsCisJMHg3ZiwgMHhlZiwgMHhmZiwgMHhmNywgMHhmZSwgMHhmYiwgMHhiOSwgMHhmZiwKKwkweGZmLCAweGY1LCAweGZmLCAweGZiLCAweDk2LAorCTB4ZmYsIDB4N2YsIDB4ZjcsIDB4ZWYsIDB4ODMsIDB4ZjcsIDB4ZjcsIDB4ZmYsCisJMHhkZiwgMHhmZiwgMHhmNywgMHhmZCwgMHhkNSwgMHg5ZiwgMHgwZiwgMHg3ZiwKKwkweGYwLCAweGZiLCAweGFlLCAweGZmLCAweGVjLAorCTB4ZmYsIDB4N2IsIDB4ODUsIDB4ZjcsIDB4ZjMsIDB4ZWYsIDB4ZmYsIDB4ZjcsCisJMHhmZiwgMHhlZCwgMHhmZiwgMHhlNywgMHg4ZiwgMHg3ZiwgMHhjNywgMHg5NywKKwkweDNmLCAweGZjLCAweGZmLCAweGY3LCAweGRlLAorCTB4ZmYsIDB4ZmQsIDB4OGIsIDB4ZmYsIDB4ZjcsIDB4MWYsIDB4ZmIsIDB4ZmYsCisJMHgyZiwgMHhmYiwgMHhmNywgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHg2ZiwKKwkweGY3LCAweGY5LCAweGU3LCAweGZmLCAweDMzLAorCTB4ZmYsIDB4OWUsIDB4ZTcsIDB4OGIsIDB4ZjAsIDB4NTAsIDB4ZjEsIDB4ZGUsCisJMHhmZiwgMHg5ZiwgMHgxYiwgMHgyOCwgMHgxYiwgMHg4ZCwgMHhiNCwgMHhlMSwKKwkweGY1LCAweGYzLCAweGZlLCAweGVmLCAweGZhLAorCTB4ZmYsIDB4N2YsIDB4ZjYsIDB4ZmYsIDB4ZmUsIDB4MDcsIDB4ZWMsIDB4ZmIsCisJMHg3ZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhkNiwgMHg4ZiwgMHhmZiwgMHhmOSwKKwkweGZmLCAweDM3LCAweDdmLCAweGZiLCAweGRkLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NjMsIDB4ZWYsIDB4ZGYsIDB4ZmEsIDB4ZjEsCisJMHhmZiwgMHhmYywgMHhmZSwgMHhkZiwgMHhmYiwgMHhmZiwgMHg4ZiwgMHg3ZiwKKwkweGY5LCAweGViLCAweGVmLCAweGZkLCAweGZmLAorCTB4N2YsIDB4N2YsIDB4ZmIsIDB4ZTcsIDB4OWYsIDB4OWIsIDB4ZTUsIDB4Y2YsCisJMHhmZCwgMHhmNywgMHhjZiwgMHhmZiwgMHhmMywgMHhiZiwgMHg1ZiwgMHg1ZCwKKwkweDY3LCAweDlmLCAweGRmLCAweDdmLCAweGY5LAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MWYsIDB4ZmUsIDB4ZmYsIDB4ZjUsIDB4ZGYsCisJMHg1ZiwgMHhmYiwgMHhmYiwgMHhiZiwgMHhjZiwgMHhkZiwgMHhmYiwgMHg3ZiwKKwkweGI3LCAweGZmLCAweGZiLCAweGZmLCAweGY3LAorCTB4M2YsIDB4NzgsIDB4ZmMsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4YmYsCisJMHhmMywgMHgwNSwgMHgzZiwgMHhjMSwgMHhmMSwgMHhmZiwgMHhmNywgMHhlZiwKKwkweGVmLCAweGZmLCAweGZiLCAweDk3LCAweDFmLAorCTB4ZmYsIDB4ZDgsIDB4N2YsIDB4ZmIsIDB4N2IsIDB4ZmIsIDB4ZjcsIDB4YmYsCisJMHhiYiwgMHg4ZSwgMHhkMywgMHhlMSwgMHhmZiwgMHhmZCwgMHhmNywgMHhlZCwKKwkweGZlLCAweDhiLCAweDVlLCAweDBmLCAweDY5LAorCTB4YmYsIDB4ZjgsIDB4ZmMsIDB4ZmIsIDB4N2IsIDB4ZmYsIDB4ZGYsIDB4ZWQsCisJMHhmNywgMHg4ZiwgMHhiZiwgMHhjZSwgMHhmZSwgMHhmZiwgMHhmMywgMHhmZiwKKwkweGY2LCAweGZmLCAweGZlLCAweDhmLCAweDBmLAorCTB4ZmYsIDB4ZmMsIDB4N2QsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZjMsIDB4ZmYsCisJMHhiZiwgMHg4ZiwgMHhlMywgMHhmMCwgMHhmZSwgMHhmZiwgMHhmYiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGFlLCAweDBmLCAweDVkLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDEsCisJMHhmZCwgMHhmMSwgMHhkMywgMHhkZCwgMHhmZCwgMHhmMSwgMHhmYiwgMHhmZiwKKwkweGZiLCAweGZkLCAweGZmLCAweGZkLCAweGY2LAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmUsIDB4ZmQsIDB4ZmYsIDB4ODcsIDB4ZmYsCisJMHhjYywgMHhmMywgMHhkZiwgMHhjYiwgMHhmZiwgMHhmYiwgMHhmYiwgMHhmZiwKKwkweDhiLCAweDdmLCAweGZhLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZjgsIDB4ZmUsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhlOCwgMHhmZiwgMHhmZiwgMHhmOSwgMHhmZiwKKwkweGZiLCAweGFmLCAweDdmLCAweDhmLCAweDdlLAorCTB4YmYsIDB4ZmIsIDB4NzgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZDcsIDB4ZDMsCisJMHhmZCwgMHhjMywgMHg5NSwgMHhjNSwgMHhmOCwgMHhmZiwgMHhmYiwgMHhmZiwKKwkweGZiLCAweGZmLCAweGZjLCAweGYyLCAweDhmLAorCTB4ZmYsIDB4OGIsIDB4N2IsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmQsCisJMHg4ZiwgMHhlZiwgMHhmNCwgMHhiNywgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweDhmLCAweDZmLCAweGY0LAorCTB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZGYsIDB4ZGYsIDB4ZmQsCisJMHhmMSwgMHhiMywgMHhmZiwgMHhkOCwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZkLCAweGY1LCAweDg3LCAweDdmLAorCTB4M2YsIDB4ZWYsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4NWYsIDB4ZjAsIDB4ZmYsCisJMHhmMSwgMHhlZiwgMHgzOSwgMHhjNywgMHg3ZSwgMHhmMywgMHg4ZiwgMHg3ZSwKKwkweGYxLCAweGJkLCAweGVkLCAweGZhLCAweDlhLAorCTB4ZmYsIDB4OTgsIDB4N2YsIDB4ZmEsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmMywgMHg4ZiwgMHg1ZiwgMHg4YSwgMHhmYiwgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGY3LCAweGFmLCAweDVmLAorCTB4ZmYsIDB4ODYsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsCisJMHg3ZiwgMHhiZiwgMHhjYiwgMHhiZCwgMHg3NywgMHhmMiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGJmLCAweDc3LAorCTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZWQsIDB4ZGYsIDB4ZmYsIDB4ZGQsCisJMHgxMSwgMHg3MywgMHhmYywgMHhmYywgMHhlZiwgMHhmZiwgMHhmYiwgMHhmZiwKKwkweGZkLCAweGZkLCAweDlkLCAweGYzLCAweGZmLAorCTB4ZmYsIDB4ZjksIDB4ZWYsIDB4ZmYsIDB4ZjMsIDB4MGYsIDB4ODMsIDB4OWUsCisJMHhmMCwgMHhmMCwgMHhmZiwgMHhlZCwgMHhlZiwgMHhmZiwgMHhlOSwgMHg4ZSwKKwkweDdiLCAweDlkLCAweDcwLCAweGU5LCAweGY3LAorCTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZjMsIDB4ZjksCisJMHhmNywgMHhmZiwgMHhmYiwgMHhmMywgMHhlZiwgMHhmZCwgMHhlYiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY4LAorCTB4M2YsIDB4ODcsIDB4ZWMsIDB4ZjgsIDB4ZTUsIDB4N2YsIDB4ZmIsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHg4NywgMHhlOCwgMHhmMCwgMHhlYiwgMHhmZiwKKwkweGZmLCAweGZkLCAweGZmLCAweGZmLCAweDk3LAorCTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZWQsIDB4ZGYsIDB4ZDMsIDB4YmYsCisJMHg3ZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhlMywgMHhlZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLAorCTB4ZmYsIDB4NzcsIDB4ZWYsIDB4ZmEsIDB4ZTcsIDB4ZmYsIDB4ZmIsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhlZiwgMHhlZiwgMHhlZiwgMHhmNywgMHhlYSwgMHhmZSwKKwkweGYzLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAorCTB4ZmYsIDB4ZjcsIDB4ZWIsIDB4ZjMsIDB4ZWYsIDB4ZmYsIDB4ZjMsIDB4ZmYsCisJMHhmMSwgMHg3ZiwgMHhmZiwgMHhlNywgMHhlNywgMHhmNywgMHhlYSwgMHhlZSwKKwkweGY3LCAweGZmLCAweGYxLCAweGZmLCAweGU3LAorCTB4ZmYsIDB4ZmIsIDB4NmYsIDB4ZjYsIDB4ZTUsIDB4ZmYsIDB4ZWIsIDB4ZGYsCisJMHhlZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhlZiwgMHhmZiwgMHhlMywgMHhlZiwKKwkweGZmLCAweGZlLCAweGZmLCAweGZlLCAweGY3LAorCTB4N2YsIDB4ZmYsIDB4NGYsIDB4NWYsIDB4ZTEsIDB4YzcsIDB4ZWYsIDB4ZjEsCisJMHhmZSwgMHg3ZiwgMHg3YiwgMHhmZiwgMHg2ZiwgMHhmZiwgMHg5MywgMHgwYiwKKwkweDdmLCAweGYxLCAweGZhLCAweGRmLCAweGZmLAorCTB4ZmYsIDB4ZmIsIDB4N2YsIDB4ZGYsIDB4ZjcsIDB4ZWYsIDB4OGYsIDB4ZmYsCisJMHgwMCwgMHhlZiwgMHhmMCwgMHhkZiwgMHg3ZiwgMHhlZiwgMHhmZiwgMHhmYiwKKwkweDhmLCAweDdmLCAweDgxLCAweDZmLCAweGQxLAorCTB4ZmYsIDB4ZGUsIDB4ZmYsIDB4ZWYsIDB4YjksIDB4NDksIDB4NzQsIDB4ZjMsCisJMHhlZiwgMHg3YiwgMHg3ZiwgMHhmZiwgMHhlYiwgMHhmNywgMHg4NSwgMHg2NywKKwkweGYxLCAweGYwLCAweGUxLCAweGZmLCAweGY3LAorCTB4M2YsIDB4YWIsIDB4ZmYsIDB4YzQsIDB4YmIsIDB4ZmYsIDB4OGMsIDB4OWQsCisJMHg3ZSwgMHgzYSwgMHhiNSwgMHhiYiwgMHhlMywgMHhmYiwgMHhmMywgMHhjZCwKKwkweGUzLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAorCTB4ZmYsIDB4ZGMsIDB4ZjcsIDB4ZjgsIDB4NzcsIDB4OGYsIDB4ZjcsIDB4ZmUsCisJMHg5ZiwgMHg5NywgMHg3YSwgMHhmMiwgMHg3ZiwgMHhmYiwgMHg4ZiwgMHgxZiwKKwkweDdkLCAweGZkLCAweGVmLCAweGIxLCAweDdkLAorCTB4ZmYsIDB4ZWYsIDB4YTYsIDB4ZWYsIDB4OTgsIDB4OWQsIDB4ZjAsIDB4ZjQsCisJMHhmNCwgMHhmZiwgMHhmZiwgMHg3ZiwgMHg4ZiwgMHg3ZiwgMHg4OSwgMHg3ZiwKKwkweGU3LCAweGZmLCAweGZmLCAweGY3LCAweGZiLAorCTB4YmYsIDB4YTcsIDB4YjcsIDB4ZGYsIDB4YmEsIDB4ZmQsIDB4ZmUsIDB4ZWIsCisJMHhmZiwgMHhmZiwgMHhjNCwgMHhlZiwgMHg4ZiwgMHg3YywgMHhmNywgMHg4ZiwKKwkweDdmLCAweGY5LCAweGZiLCAweGZmLCAweGZiLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4ODcsIDB4ZmQsIDB4ZjQsIDB4ZjcsCisJMHg2ZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhlZiwgMHhkZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGY3LCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4ODUsIDB4ZGIsIDB4ZjIsIDB4YmYsIDB4ZDcsIDB4ZmYsCisJMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHg4ZiwgMHg3ZiwgMHhmMSwgMHhhZiwKKwkweDdkLCAweGZmLCAweGY3LCAweGViLCAweGZmLAorCTB4YmYsIDB4ZmQsIDB4OGYsIDB4ZmYsIDB4ZmEsIDB4M2YsIDB4ZmYsIDB4ZjYsCisJMHhiNywgMHhmZiwgMHhmZSwgMHhmYiwgMHg4ZiwgMHg3ZiwgMHhmZiwgMHhmZiwKKwkweGYzLCAweGVlLCAweGJmLCAweDdmLCAweGZmLAorCTB4ZmYsIDB4NjcsIDB4YzYsIDB4YWYsIDB4YzMsIDB4NzQsIDB4ZjcsIDB4ZmUsCisJMHhlZSwgMHg4YSwgMHgzNywgMHg2ZSwgMHhlYywgMHg4NywgMHg3MSwgMHg5MSwKKwkweDEzLCAweDdkLCAweGVjLCAweDg3LCAweGZmLAorCTB4YmYsIDB4N2IsIDB4ZjAsIDB4ZWYsIDB4ZmIsIDB4M2YsIDB4YjcsIDB4ZmMsCisJMHhmZiwgMHhmZiwgMHg5NywgMHg3ZCwgMHhlOCwgMHhlZiwgMHg5ZCwgMHg3NywKKwkweGZkLCAweGZiLCAweGZmLCAweGZiLCAweGJmLAorCTB4ZmYsIDB4ZmYsIDB4ZGUsIDB4NzcsIDB4Y2QsIDB4ZmYsIDB4ZjEsIDB4ZmIsCisJMHhmZiwgMHhmZiwgMHhmOSwgMHhlMywgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweGZmLCAweGZjLCAweGNmLCAweGZmLCAweGYzLAorCTB4N2YsIDB4ZmYsIDB4ZmUsIDB4NzcsIDB4YWYsIDB4ZjcsIDB4ZjgsIDB4ZWYsCisJMHhmZiwgMHg3NiwgMHhmYSwgMHhmZiwgMHg5OSwgMHg2ZCwgMHg5ZiwgMHg2ZiwKKwkweGYxLCAweGJmLCAweDdmLCAweDdmLCAweGZjLAorCTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4YmYsIDB4ZWIsIDB4ZmEsIDB4ZGQsIDB4ZWYsCisJMHhiYywgMHhmZCwgMHhmZCwgMHhkZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwKKwkweGQxLCAweGZlLCAweGZmLCAweGZiLCAweGZmLAorCTB4M2YsIDB4NzAsIDB4ZjgsIDB4ZmYsIDB4ZjUsIDB4ZmYsIDB4ZmYsIDB4OWYsCisJMHhmMywgMHgwOSwgMHgxZiwgMHhlMSwgMHhmMywgMHhmZCwgMHhmZCwgMHhmZiwKKwkweGVmLCAweGZmLCAweGY3LCAweDhlLCAweDFlLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4NzcsIDB4ZmYsIDB4ZmYsIDB4OWIsCisJMHg4ZiwgMHg4ZSwgMHhmYiwgMHhmMSwgMHhlZiwgMHhlNSwgMHhmZCwgMHhlZiwKKwkweGZlLCAweDlmLCAweDE2LCAweDAzLCAweDYxLAorCTB4YmYsIDB4ZjgsIDB4ZmEsIDB4ZmQsIDB4NzMsIDB4ZmYsIDB4ZmYsIDB4ZjcsCisJMHhmNywgMHg4ZCwgMHg5ZiwgMHhlMSwgMHhmMSwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweGZjLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ZmQsIDB4ZmYsCisJMHg5ZiwgMHg4ZiwgMHhlMSwgMHhmMSwgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZkLCAweGZmLCAweDhlLCAweDBmLCAweDdkLAorCTB4ZmYsIDB4ZjcsIDB4ZjksIDB4ZmUsIDB4ZjMsIDB4N2YsIDB4ZmYsIDB4ZjcsCisJMHhmNywgMHhmMywgMHhmZCwgMHhlZiwgMHhmZiwgMHhmOSwgMHhlZCwgMHhmZiwKKwkweGZmLCAweGVmLCAweGZmLCAweGY3LCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4N2UsIDB4ZmUsIDB4ZjcsIDB4ZmYsIDB4OGIsIDB4ZjcsCisJMHhmYywgMHhlYiwgMHhlYiwgMHhlZCwgMHhlYiwgMHhmOSwgMHhmZCwgMHhmZiwKKwkweDhmLCAweDdmLCAweGYyLCAweGZlLCAweGVkLAorCTB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZjcsCisJMHhmNywgMHg4ZCwgMHhmZiwgMHhlOCwgMHhmZiwgMHhmZCwgMHhlZiwgMHhmZSwKKwkweGZkLCAweGRmLCAweGY2LCAweDhmLCAweDZmLAorCTB4YmYsIDB4ZmYsIDB4NzgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmIsIDB4ZmYsCisJMHhmZiwgMHhlMywgMHg5ZiwgMHhlNSwgMHhlYSwgMHhmNSwgMHhmZCwgMHhmZiwKKwkweGVkLCAweGVmLCAweGZmLCAweGY3LCAweDhmLAorCTB4ZmYsIDB4MDcsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCisJMHg4ZiwgMHhmZiwgMHhmMywgMHg5MywgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwKKwkweGZmLCAweGY3LCAweDhmLCAweDdmLCAweGYzLAorCTB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmNywgMHg4YiwgMHhmZiwgMHhlOCwgMHhmYiwgMHhmZiwgMHhmZiwgMHhlZiwKKwkweGVmLCAweGY3LCAweGY1LCAweDhlLCAweDdmLAorCTB4M2YsIDB4ZWMsIDB4ZjksIDB4ZmMsIDB4OGYsIDB4N2YsIDB4ZjAsIDB4ZWYsCisJMHhlZiwgMHhmZiwgMHgxZCwgMHhlZCwgMHg3ZSwgMHhmZCwgMHg4ZiwgMHg2ZSwKKwkweGYxLCAweGQ3LCAweGY3LCAweGRlLCAweDhjLAorCTB4ZmYsIDB4ODAsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmYiwgMHg4ZiwgMHg2ZiwgMHg5MCwgMHhmZiwgMHhmMywgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ODcsIDB4ZmIsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHg5ZiwgMHhmZiwgMHg5MywgMHg3ZiwgMHhmMiwgMHhmZiwgMHhmZSwKKwkweGVmLCAweGZmLCAweGZmLCAweDlmLCAweDY5LAorCTB4ZmYsIDB4ZmIsIDB4ZWYsIDB4ZmYsIDB4ZjYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHgxZiwgMHg3MywgMHhmZSwgMHhmNiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwKKwkweGVmLCAweGU3LCAweDk3LCAweDc3LCAweGY3LAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZTcsIDB4MWYsIDB4ODYsIDB4OTUsCisJMHhmMCwgMHhmNiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHg4ZiwKKwkweDZkLCAweDkzLCAweDcxLCAweGY4LCAweGZkLAorCTB4ZmYsIDB4ZmUsIDB4ZWYsIDB4ZmQsIDB4ZjIsIDB4ZmYsIDB4ZjYsIDB4ZmYsCisJMHg2ZiwgMHhlZiwgMHhmNywgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwKKwkweGZkLCAweGZmLCAweGVmLCAweGZmLCAweGY1LAorCTB4M2YsIDB4ODIsIDB4ZjgsIDB4ZjgsIDB4ZTYsIDB4N2YsIDB4ZjIsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4NywgMHg4NywgMHhmMCwgMHhmMCwgMHhmYywgMHhlZiwKKwkweGZkLCAweGY3LCAweGVmLCAweGVlLCAweDg3LAorCTB4ZmYsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZTcsIDB4ZmYsIDB4ZjYsIDB4ZjcsCisJMHg3ZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwKKwkweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZjIsIDB4ZTYsIDB4ZmYsIDB4ZjUsIDB4ZjcsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhlNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZSwKKwkweGZmLCAweGY3LCAweGVmLCAweGZmLCAweGY3LAorCTB4ZmYsIDB4ZmEsIDB4ZWIsIDB4ZmYsIDB4ZTMsIDB4ZmYsIDB4ZjUsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmNywgMHhlZiwgMHhmNywgMHhmZiwgMHhmZCwgMHhlZSwKKwkweGZkLCAweGZmLCAweGZmLCAweGVmLCAweGVmLAorCTB4ZmYsIDB4ZjYsIDB4ZmIsIDB4N2EsIDB4ZTcsIDB4ZmYsIDB4OTEsIDB4ZWYsCisJMHhmZiwgMHhlMiwgMHhmZiwgMHhmNywgMHhmNywgMHhmNywgMHhmZCwgMHhmZiwKKwkweGZkLCAweGVmLCAweGViLCAweGY1LCAweGU3LAorCTB4ZmYsIDB4ZmYsIDB4OGYsIDB4YmUsIDB4ZjEsIDB4OTMsIDB4ZmQsIDB4ZjEsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgyZSwgMHgyZiwgMHg1OSwgMHg4ZiwKKwkweDZmLCAweGY5LCAweGY3LCAweGZmLCAweGZhLAorCTB4ZmYsIDB4NGYsIDB4YmYsIDB4YzQsIDB4ZmIsIDB4ZjUsIDB4MGYsIDB4ZmYsCisJMHgwMCwgMHhmZiwgMHhkMCwgMHg3ZiwgMHg3MCwgMHhhZiwgMHg3ZiwgMHhmZiwKKwkweDhmLCAweDdmLCAweDgxLCAweDdmLCAweGIxLAorCTB4ZmYsIDB4ZmYsIDB4ZGEsIDB4ZmYsIDB4MmYsIDB4NGYsIDB4N2UsIDB4ZjksCisJMHhmYiwgMHhmZiwgMHg1ZiwgMHhlZiwgMHhmZiwgMHhmZiwgMHg5OSwgMHgyOSwKKwkweDcxLCAweGYxLCAweGVkLCAweGZmLCAweGZmLAorCTB4M2YsIDB4YjcsIDB4ZWYsIDB4ZGYsIDB4ZmYsIDB4ZjksIDB4ZmUsIDB4ZmQsCisJMHhmZiwgMHhmZiwgMHhiNywgMHg5ZiwgMHhmZiwgMHhhYiwgMHg3MywgMHhmZCwKKwkweGFkLCAweDNjLCAweDZiLCAweGZmLCAweGZhLAorCTB4ZmYsIDB4ZTgsIDB4ZjcsIDB4YmYsIDB4NmYsIDB4OGYsIDB4ZmYsIDB4ZmUsCisJMHhmZiwgMHg4NywgMHg3ZiwgMHhlMCwgMHg3ZiwgMHhiZiwgMHg1ZiwgMHg5MywKKwkweDdlLCAweGU0LCAweGY2LCAweDk3LCAweDdiLAorCTB4ZmYsIDB4ZGYsIDB4MjcsIDB4YWYsIDB4YTcsIDB4ZmYsIDB4ZjQsIDB4ZjYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHg1ZiwgMHhkZiwgMHhmYiwgMHg4NywgMHgxZiwKKwkweDcwLCAweGYzLCAweGZlLCAweDdmLCAweGZiLAorCTB4YmYsIDB4YjcsIDB4NjEsIDB4YjUsIDB4ZmMsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisJMHhiZiwgMHhmZiwgMHhhMiwgMHhmZiwgMHhkOCwgMHhhMSwgMHg3NywgMHhkZiwKKwkweGU2LCAweGZmLCAweGZmLCAweDdlLCAweGM0LAorCTB4ZmYsIDB4ZmYsIDB4ZjYsIDB4ZDcsIDB4OTcsIDB4ZGIsIDB4ZTgsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhiOSwgMHgzYiwKKwkweGY4LCAweGZmLCAweGVmLCAweGU3LCAweGJlLAorCTB4ZmYsIDB4ZmYsIDB4ODYsIDB4YmYsIDB4ZTIsIDB4YWQsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg5ZiwgMHhmZiwgMHg4ZiwgMHgzZiwgMHg2MywgMHhjZiwKKwkweDdiLCAweGZlLCAweGZmLCAweGZkLCAweGZlLAorCTB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4YmEsIDB4N2YsIDB4ZjcsIDB4ZWUsCisJMHgxNywgMHhmNywgMHhlZSwgMHhlZiwgMHg5NywgMHg3ZiwgMHhmNywgMHhmZiwKKwkweGZmLCAweGZkLCAweDllLCAweDc3LCAweGYzLAorCTB4ZmYsIDB4ZmIsIDB4YzMsIDB4OGYsIDB4YzEsIDB4NzAsIDB4NzEsIDB4ZmYsCisJMHhmNywgMHg5ZiwgMHg3NywgMHg3ZSwgMHhiNiwgMHg0ZiwgMHhiOSwgMHgwMSwKKwkweDFmLCAweDFiLCAweDdhLCAweDlhLCAweDdlLAorCTB4YmYsIDB4ZmYsIDB4ZjAsIDB4OWYsIDB4ZWYsIDB4NzksIDB4M2YsIDB4ZjYsCisJMHhmZiwgMHhmZCwgMHg5ZCwgMHg3YiwgMHhmMiwgMHhmZiwgMHhjOSwgMHhmMywKKwkweGZmLCAweDdkLCAweGZiLCAweGZkLCAweGJmLAorCTB4ZmYsIDB4ZmQsIDB4YmYsIDB4NzcsIDB4OGYsIDB4ZmYsIDB4ZjEsIDB4ZjcsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhiYiwgMHg3ZiwgMHhiZiwgMHg2ZiwKKwkweGYzLCAweGZlLCAweGZmLCAweGU3LCAweGJmLAorCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4NWYsIDB4YWYsIDB4ZjEsIDB4ZmMsIDB4ZjcsCisJMHhmZiwgMHg3NywgMHhmZSwgMHhmZiwgMHhkZiwgMHhmZiwgMHhkZiwgMHhmZiwKKwkweGUzLCAweDllLCAweDdmLCAweDdhLCAweGUzLAorCTB4ZmYsIDB4ZmYsIDB4NmYsIDB4ZmYsIDB4YWYsIDB4ZmMsIDB4ZmYsIDB4ZmYsCisJMHhmZSwgMHhmZSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmMywgMHhmYiwKKwkweGY3LCAweGZmLCAweGY5LCAweGZlLCAweGZmLAorCTB4M2YsIDB4NzAsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHgwZiwgMHgwZiwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmNywgMHhmZiwKKwkweGVmLCAweGZmLCAweGY3LCAweDhjLCAweDFlLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4ZjcsIDB4ZmYsIDB4OGYsCisJMHg4ZiwgMHg4OCwgMHhmMSwgMHhmMSwgMHhlZiwgMHhmZiwgMHhmNywgMHhmZiwKKwkweGVlLCAweDk3LCAweDFlLCAweDAxLCAweDYxLAorCTB4YmYsIDB4ZjAsIDB4ZmEsIDB4ZmQsIDB4NzUsIDB4ZmYsIDB4ZjUsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHg5ZiwgMHhlMSwgMHhmMSwgMHhmZiwgMHhmNywgMHhlZiwKKwkweGZlLCAweGZmLCAweGZmLCAweDhmLCAweDFmLAorCTB4ZmYsIDB4ZmEsIDB4N2YsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmQsIDB4ZmYsCisJMHg5ZiwgMHg5ZiwgMHhmOSwgMHhmOSwgMHhmZiwgMHhlZiwgMHhmNywgMHhmZiwKKwkweGZmLCAweGZmLCAweDllLCAweDBmLCAweDc1LAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsCisJMHhmZiwgMHhmNywgMHhmNywgMHhmZiwgMHhlZiwgMHhmNywgMHhlNywgMHhlZiwKKwkweGVmLCAweGVmLCAweGZmLCAweGZmLCAweGVmLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsCisJMHhmOCwgMHhmNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmNywgMHhlNywgMHhlZiwKKwkweDlmLCAweDZmLCAweGYwLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmQsIDB4OGYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmNywgMHhlZiwKKwkweGY3LCAweGZmLCAweGZmLCAweDlkLCAweDdlLAorCTB4YmYsIDB4ZmYsIDB4NzgsIDB4ZmYsIDB4ZmQsIDB4ZmYsIDB4ZmQsIDB4ZjcsCisJMHhmZiwgMHhmNywgMHg4ZiwgMHhmNywgMHhmMCwgMHhmNywgMHhmNywgMHhmZiwKKwkweGY3LCAweGVmLCAweGZlLCAweGU3LCAweDlmLAorCTB4ZmYsIDB4OGYsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHhmZiwgMHhmOCwgMHg4ZiwgMHhmZiwgMHhmOCwgMHhmZiwgMHhlZiwKKwkweGZmLCAweGZmLCAweDhlLCAweDZmLCAweGUxLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmNywgMHg4NywgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGVmLCAweGVmLCAweGZmLCAweDlmLCAweDdmLAorCTB4M2YsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4OGYsIDB4N2YsIDB4ZjAsIDB4OWYsCisJMHhmNywgMHhmYiwgMHgwNywgMHhlNywgMHg3OCwgMHhmNywgMHg4ZiwgMHg3ZSwKKwkweGYxLCAweDlmLCAweDdmLCAweGZmLCAweDllLAorCTB4ZmYsIDB4ODAsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmNywgMHg4ZiwgMHg2ZiwgMHg4MCwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGVmLCAweGZmLCAweGZlLCAweDlmLCAweDdmLAorCTB4ZmYsIDB4ODgsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHg5ZiwgMHhlZiwgMHg4MSwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGVmLCAweDlmLCAweDdmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg5NywgMHg3NywgMHhmOCwgMHhmZiwgMHhlZiwgMHhmZiwgMHhmNywgMHhmZiwKKwkweGVmLCAweGVmLCAweDhmLCAweDc2LCAweGYxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4MGYsIDB4ZjcsIDB4ODgsCisJMHhmNywgMHhmMCwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhlZiwgMHg4ZSwKKwkweDA3LCAweDk5LCAweDYxLCAweGUxLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZjcsCisJMHhmZiwgMHhmZiwgMHhmNywgMHhmNywgMHhlZiwgMHhmZiwgMHhlNywgMHhlZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4YmYsIDB4ODcsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHg4ZiwgMHhlMCwgMHhmMCwgMHhlZiwgMHhmZiwKKwkweGY3LCAweGZmLCAweGZmLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhlNywgMHhmZiwKKwkweGY2LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg2ZiwgMHhmZiwgMHhlNywgMHhmZiwKKwkweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweDk3LCAweGVlLCAweGY5LCAweGY3LCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4ODgsIDB4ZmYsIDB4ZjgsCisJMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwgMHgwZiwgMHgxZiwgMHg3OSwgMHg5YiwKKwkweDdmLCAweGYwLCAweGZlLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4NGYsIDB4N2IsIDB4ZjcsIDB4ZjcsIDB4ZjgsIDB4MGYsIDB4ZmYsCisJMHgwMCwgMHhmZiwgMHhkMCwgMHg0ZiwgMHg3NSwgMHg4YywgMHg3OSwgMHhmZiwKKwkweDhmLCAweDdmLCAweDgxLCAweDdlLCAweGIxLAorCTB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmUsIDB4OGYsIDB4N2YsIDB4NzAsIDB4ZjAsCisJMHhmZiwgMHhmNywgMHg3ZiwgMHhmZiwgMHhmNywgMHhmZiwgMHg4NCwgMHgwZSwKKwkweDczLCAweGZmLCAweGY3LCAweGZmLCAweGZmLAorCTB4M2YsIDB4YmQsIDB4ZmQsIDB4ZmIsIDB4ZjcsIDB4ZTgsIDB4ZmYsIDB4ZmYsCisJMHg3OCwgMHhmMCwgMHgzZiwgMHhiZiwgMHhlMywgMHg5YiwgMHg2ZiwgMHhmZiwKKwkweDk3LCAweDFmLCAweDdmLCAweGNmLCAweGZlLAorCTB4ZmYsIDB4ZjgsIDB4ZjcsIDB4ZmYsIDB4OGYsIDB4ODAsIDB4ZmYsIDB4ZjgsCisJMHhmZiwgMHg4ZiwgMHg3OCwgMHhmMCwgMHg3ZiwgMHg5ZiwgMHg3ZiwgMHg5YiwKKwkweDdmLCAweGYxLCAweGZmLCAweDk3LCAweDdmLAorCTB4ZmYsIDB4ZmYsIDB4MDcsIDB4ZmYsIDB4ODcsIDB4N2YsIDB4ZjAsIDB4ZjgsCisJMHhmZiwgMHg3ZiwgMHhmYiwgMHg3ZiwgMHhlZSwgMHhmYiwgMHg5OSwgMHgxOSwKKwkweDczLCAweGVmLCAweGY3LCAweGVmLCAweGZmLAorCTB4YmYsIDB4ODcsIDB4MDQsIDB4ZmMsIDB4ZmYsIDB4MDgsIDB4ZjcsIDB4ZmYsCisJMHg3YiwgMHg3ZiwgMHg4ZSwgMHg4ZiwgMHhmOSwgMHg5OCwgMHg2ZiwgMHhmMywKKwkweGZmLCAweGVmLCAweGZmLCAweGZmLCAweGRmLAorCTB4ZmYsIDB4ZmYsIDB4NzMsIDB4ZmYsIDB4ZjcsIDB4OWYsIDB4ZjgsIDB4ZmIsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHgzZCwKKwkweDYxLCAweGZmLCAweGVmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4MDcsIDB4ZmYsIDB4ZjgsIDB4NzgsIDB4ZmYsIDB4ZWUsCisJMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4NywgMHgxZiwgMHg3MSwgMHhlMywKKwkweGZmLCAweGZiLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4NzcsIDB4OGIsIDB4N2YsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHgwNywgMHhlNywgMHhmYSwgMHg3NywgMHg4ZiwgMHg3ZiwgMHhmZiwgMHhlZiwKKwkweGYxLCAweGVmLCAweDlmLCAweDc3LCAweGY5LAorCTB4ZmYsIDB4ZjgsIDB4NzMsIDB4OGYsIDB4ZjgsIDB4MGYsIDB4ODgsIDB4ODgsCisJMHhmOCwgMHg5OCwgMHg3NywgMHg3OCwgMHg4ZiwgMHg2ZiwgMHg4NywgMHg3YiwKKwkweGY3LCAweGZmLCAweGVmLCAweDg3LCAweDZmLAorCTB4YmYsIDB4N2YsIDB4ZjAsIDB4ZmYsIDB4OGYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHg3ZSwgMHhmZiwgMHg5ZiwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhlYiwKKwkweGVmLCAweGZmLCAweGZiLCAweGZmLCAweDlmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NzcsIDB4ZjgsIDB4N2YsIDB4ZjgsIDB4ZjcsCisJMHhmZiwgMHg3ZiwgMHhmNywgMHhmZiwgMHg5ZiwgMHg3ZiwgMHg5YiwgMHg2ZiwKKwkweGYxLCAweGZlLCAweGZmLCAweGZlLCAweGZmLAorCTB4N2YsIDB4N2YsIDB4OGYsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4N2YsIDB4OGYsCisJMHhmZiwgMHg3MCwgMHhmYiwgMHg2ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNSwKKwkweGY5LCAweGZmLCAweGZmLCAweGZmLCAweGY0LAorCTB4ZmYsIDB4ODcsIDB4ZmYsIDB4NzQsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHg3ZSwgMHhmZiwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGU5LCAweGZmLCAweGY3LCAweGZmLCAweGZmLAorCTB4YmYsIDB4NzgsIDB4ZjgsIDB4N2YsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmNywgMHgwNywgMHgxZiwgMHhlMSwgMHhmMSwgMHhmZiwgMHhmNywgMHhmZiwKKwkweGVmLCAweGVmLCAweGZmLCAweDhlLCAweDBmLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ODcsCisJMHg5ZiwgMHg4OCwgMHhmMSwgMHhlMSwgMHhmZiwgMHhlZiwgMHhmNywgMHhlZiwKKwkweGZlLCAweDlmLCAweDBmLCAweDA5LCAweDcxLAorCTB4YmYsIDB4ZjAsIDB4ZjgsIDB4ZmYsIDB4NzcsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHg4ZiwgMHhmMCwgMHhmMCwgMHhmZiwgMHhmNywgMHhmZiwKKwkweGZlLCAweGY3LCAweGZmLCAweDhlLCAweDFmLAorCTB4N2YsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHg4ZiwgMHhmOSwgMHhmOCwgMHhmZSwgMHhmZiwgMHhlNywgMHhmNywKKwkweGZmLCAweGZmLCAweDk2LCAweDBmLCAweDYxLAorCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmNywgMHhlZiwgMHhmZiwgMHhmNywgMHhlNywgMHhlZiwKKwkweGZmLCAweGU3LCAweGZmLCAweGY3LCAweGZlLAorCTB4ZmYsIDB4ZjcsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsCisJMHhmOCwgMHhlZiwgMHhlZiwgMHhlZiwgMHhmZiwgMHhmNywgMHhmNywgMHhmZiwKKwkweDlmLCAweDY3LCAweGYwLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhlMCwgMHhmNywgMHhmZiwgMHhmNywgMHhmZSwKKwkweGY3LCAweGY3LCAweGZmLCAweDhmLCAweDZlLAorCTB4M2YsIDB4ZmIsIDB4N2MsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhlNywgMHg5ZiwgMHhlZiwgMHhmMCwgMHhmZiwgMHhlNywgMHhlZiwKKwkweGY3LCAweGVmLCAweGY2LCAweGY2LCAweDg3LAorCTB4ZmYsIDB4MDcsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHhmZiwgMHhmNCwgMHg5ZiwgMHhmZiwgMHhmYywgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGYwLAorCTB4N2YsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmNywgMHg4NywgMHhmZiwgMHhlOCwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwKKwkweGVmLCAweGU3LCAweGY3LCAweDhmLCAweDZmLAorCTB4M2YsIDB4ZmYsIDB4ZmMsIDB4ZmYsIDB4OGYsIDB4N2YsIDB4ZjAsIDB4Y2YsCisJMHhlZiwgMHhlOCwgMHgxYiwgMHhlZiwgMHg3YywgMHhmZiwgMHg4ZiwgMHg3ZSwKKwkweGUxLCAweDk3LCAweDc3LCAweGZmLCAweDllLAorCTB4ZmYsIDB4ODAsIDB4N2YsIDB4ZmMsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmNywgMHg4ZiwgMHg3ZiwgMHg4MCwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZSwKKwkweGVmLCAweGZmLCAweGZmLCAweDlmLCAweDdmLAorCTB4ZmYsIDB4ODQsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg2ZiwgMHg5ZiwgMHhmZiwgMHg5MSwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHgxZiwgMHg3NywgMHhmOCwgMHhmNywgMHhlZiwgMHhmZiwgMHhmNywgMHhmZiwKKwkweGY3LCAweGVmLCAweDg3LCAweDY3LCAweGYxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MGYsIDB4OGIsIDB4OGMsCisJMHhmMCwgMHhmOCwgMHhmNywgMHhmZiwgMHhlZiwgMHhmZiwgMHhlNywgMHg5ZSwKKwkweDY3LCAweDg5LCAweDc3LCAweGYxLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhlZiwgMHhmYiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhlNywgMHhmZiwKKwkweGY3LCAweGY3LCAweGZmLCAweGZmLCAweGY3LAorCTB4YmYsIDB4ODcsIDB4ZjgsIDB4ZjgsIDB4ZjcsIDB4N2YsIDB4ZmIsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHg4ZiwgMHhlMCwgMHhmMCwgMHhlNywgMHhmZSwKKwkweGY3LCAweGZmLCAweGZmLCAweGZmLCAweDhlLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmIsIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwKKwkweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmIsIDB4ZmYsIDB4ZmIsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwKKwkweGY3LCAweGZmLCAweGZmLCAweGZmLCAweGZlLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZjcsIDB4ZmYsIDB4OGIsIDB4ZmYsCisJMHhmYywgMHhmMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGVlLCAweGZmLCAweGY2LCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4OGYsIDB4YmYsIDB4ZjksIDB4OGYsIDB4ZmYsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHgxZiwgMHgxZiwgMHg3MSwgMHg4OSwKKwkweDdmLCAweGYxLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4NGYsIDB4YjgsIDB4YzYsIDB4ZmIsIDB4ZmQsIDB4MGYsIDB4ZmYsCisJMHgwMCwgMHhmZiwgMHhkMCwgMHg3ZiwgMHg3OSwgMHg5MCwgMHg3ZiwgMHhmOSwKKwkweDhmLCAweDdmLCAweDgxLCAweDdmLCAweDgxLAorCTB4ZmYsIDB4ZmYsIDB4Y2YsIDB4ZmYsIDB4YjAsIDB4NGYsIDB4NzcsIDB4ZjQsCisJMHhmZiwgMHhmZiwgMHg3ZiwgMHhlNywgMHhlZSwgMHhmZiwgMHg5NywgMHgwNywKKwkweDY5LCAweGYxLCAweGY3LCAweGZmLCAweGZmLAorCTB4M2YsIDB4YmEsIDB4ZmYsIDB4NGQsIDB4ZmUsIDB4ZTUsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHhlZiwgMHhiZiwgMHg5ZiwgMHhlNywgMHg5ZiwgMHg3NywgMHhlOSwKKwkweDlmLCAweDFmLCAweDc5LCAweGMxLCAweGZlLAorCTB4ZmYsIDB4ZjgsIDB4ZjcsIDB4M2YsIDB4ZmYsIDB4OWYsIDB4ZjcsIDB4ZjgsCisJMHhmZiwgMHg4NywgMHg3ZiwgMHhmMCwgMHg3ZiwgMHg5NywgMHg3ZiwgMHg4OSwKKwkweDdlLCAweGYxLCAweGZmLCAweDlmLCAweDdmLAorCTB4ZmYsIDB4ZmYsIDB4MzcsIDB4YmYsIDB4YjMsIDB4N2YsIDB4ZjIsIDB4ZmYsCisJMHhmZiwgMHhmNywgMHhmZiwgMHg3ZiwgMHg3YiwgMHhmZSwgMHg4NywgMHgxZiwKKwkweDcxLCAweGYxLCAweGZmLCAweDdmLCAweGZiLAorCTB4ZmYsIDB4ZmYsIDB4NzAsIDB4YjcsIDB4ZmUsIDB4N2IsIDB4ZmYsIDB4ZjMsCisJMHhiZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmOSwgMHg5ZiwgMHg3ZiwgMHhmMSwKKwkweGZmLCAweGY3LCAweGZmLCAweGZmLCAweGZiLAorCTB4YmYsIDB4ZmYsIDB4ZjQsIDB4Y2YsIDB4ODcsIDB4ZDgsIDB4ZjgsIDB4ZjgsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhlOSwgMHhmZiwgMHg4ZiwgMHgxZiwKKwkweDcxLCAweGZmLCAweGVmLCAweGZmLCAweDhkLAorCTB4ZmYsIDB4ZmYsIDB4ODcsIDB4YmYsIDB4ZjksIDB4M2YsIDB4ZmYsIDB4ZjcsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwgMHgxZiwgMHg3MSwgMHhmOSwKKwkweGZmLCAweDdiLCAweGZmLCAweGZlLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4Y2IsIDB4ZmYsIDB4YmQsIDB4N2YsIDB4ZmIsIDB4ZmYsCisJMHg4ZiwgMHhmZiwgMHhmOCwgMHg3ZiwgMHg5ZiwgMHg3ZiwgMHhmMSwgMHhlZiwKKwkweGZmLCAweGY3LCAweDhmLCAweDdmLCAweGY5LAorCTB4ZmYsIDB4ZjgsIDB4NDMsIDB4OGYsIDB4YzQsIDB4NzUsIDB4N2QsIDB4ZmYsCisJMHhmZiwgMHg5NywgMHg3ZiwgMHg3OCwgMHg4ZiwgMHg2ZiwgMHg5OSwgMHgxNywKKwkweDE5LCAweDcxLCAweGY5LCAweDhmLCAweDZmLAorCTB4YmYsIDB4N2YsIDB4ZjAsIDB4OGYsIDB4ZjYsIDB4N2QsIDB4MzcsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg5ZiwgMHg3ZiwgMHhlMCwgMHhmZiwgMHhmZiwgMHhlZiwKKwkweGZmLCAweGY3LCAweGZiLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ZmYsIDB4YmYsIDB4NzcsIDB4OGUsIDB4ZmYsIDB4ZjAsIDB4ZmYsCisJMHhmZiwgMHhmNywgMHhmNywgMHg3ZiwgMHg5NywgMHg3ZiwgMHg5OSwgMHg3ZiwKKwkweGY5LCAweGZlLCAweGZmLCAweGZlLCAweGZmLAorCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4Y2YsIDB4YmYsIDB4ZjksIDB4ZmEsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGY3LCAweDhmLCAweDdmLCAweDcxLCAweGY2LAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4YjcsIDB4ZmUsIDB4ZmIsIDB4ZmYsCisJMHhmNiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywKKwkweGZmLCAweGZmLCAweGY3LCAweGZmLCAweGZmLAorCTB4M2YsIDB4NzgsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsCisJMHhmZiwgMHgwOCwgMHgwZiwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhlLCAweDBlLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4OGYsCisJMHg4ZiwgMHg4MCwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZlLCAweDhmLCAweDBlLCAweDAxLCAweDcxLAorCTB4YmYsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHg4ZiwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZlLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHg4ZiwgMHhmMSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsCisJMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweDhmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsCisJMHhmZiwgMHg4OCwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdlLAorCTB4YmYsIDB4ZmYsIDB4NzgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmNywgMHg4ZiwgMHhmNywgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZlLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ODcsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHhmZiwgMHhmOCwgMHg4ZiwgMHhmNywgMHhmOCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhlLCAweDdmLCAweGYxLAorCTB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4NywgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4M2YsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4OGYsIDB4N2YsIDB4ZjAsIDB4ZGYsCisJMHhmZiwgMHhmNiwgMHgwNywgMHhmZiwgMHg3OCwgMHhmZiwgMHg4ZiwgMHg3ZSwKKwkweGYxLCAweDlmLCAweDdmLCAweGZkLCAweDhlLAorCTB4ZmYsIDB4ODAsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmNywgMHg4ZiwgMHg3ZiwgMHg4MCwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ODAsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHg4ZiwgMHhmZiwgMHg4MSwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHg3NywgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhmLCAweDZlLCAweGYxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MGYsIDB4OGYsIDB4ODgsCisJMHhmMCwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZSwKKwkweDdmLCAweDgxLCAweDdmLCAweGYxLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4YmYsIDB4ODcsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHg4ZiwgMHhmMCwgMHhmMCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ODcsIDB4ZmYsCisJMHhmOCwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZlLCAweGZlLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4M2YsIDB4OGYsIDB4ZjAsIDB4ODUsIDB4ZmYsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHgwZCwgMHgwZiwgMHg3MSwgMHg4MSwKKwkweDdlLCAweGYxLCAweGZlLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4NWYsIDB4M2QsIDB4ZjAsIDB4ZjUsIDB4ZmEsIDB4MGYsIDB4ZmYsCisJMHgwMCwgMHhmZiwgMHg4MCwgMHgwZiwgMHhmMSwgMHg4OCwgMHg3ZiwgMHhmMSwKKwkweDhmLCAweDdlLCAweDgxLCAweDdlLCAweGMxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmEsIDB4NGYsIDB4NzUsIDB4ZmEsCisJMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHgwZiwKKwkweDcxLCAweGYxLCAweGZmLCAweGZmLCAweGZmLAorCTB4M2YsIDB4YmYsIDB4ZmYsIDB4Y2YsIDB4ZmYsIDB4ZmEsIDB4ZmYsIDB4ZmUsCisJMHg3ZiwgMHhkZiwgMHg3ZiwgMHhmNCwgMHhmZiwgMHg4ZiwgMHg3ZiwgMHhmMSwKKwkweDhmLCAweDBmLCAweDcxLCAweGYxLCAweGJlLAorCTB4ZmYsIDB4ZjgsIDB4ZjcsIDB4YmIsIDB4N2YsIDB4ODUsIDB4ZmYsIDB4ZjAsCisJMHhmZiwgMHg4ZiwgMHg3ZiwgMHhmMCwgMHg3ZiwgMHg4NywgMHg3ZiwgMHg4MSwKKwkweDdlLCAweGYxLCAweDhmLCAweDBmLCAweDcxLAorCTB4ZmYsIDB4ZmYsIDB4ODcsIDB4OGYsIDB4OGQsIDB4ZmQsIDB4ZjUsIDB4ZmYsCisJMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZSwgMHg4ZiwgMHgwZiwKKwkweDcxLCAweGYxLCAweGZlLCAweDdmLCAweGY3LAorCTB4YmYsIDB4MDcsIDB4YzAsIDB4YmYsIDB4ZjcsIDB4ZmQsIDB4ZmYsIDB4ZmYsCisJMHhiZiwgMHhmZiwgMHg4NSwgMHg4ZiwgMHhmOSwgMHg4ZiwgMHg3ZiwgMHhmMSwKKwkweGZmLCAweDdmLCAweGY2LCAweGZmLCAweDgzLAorCTB4ZmYsIDB4ZmYsIDB4ZjQsIDB4ZmYsIDB4OGYsIDB4ZGEsIDB4ZjAsIDB4YjYsCisJMHhkZiwgMHhmZCwgMHhmNiwgMHhmZiwgMHhmOSwgMHhmZiwgMHg4ZiwgMHgxZiwKKwkweDcxLCAweGZkLCAweDhmLCAweDdiLCAweGZkLAorCTB4ZmYsIDB4ZmYsIDB4YjcsIDB4OGYsIDB4ZjAsIDB4YmQsIDB4ZmYsIDB4ZmQsCisJMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHgwZiwgMHg3MSwgMHhmMSwKKwkweGZmLCAweDdiLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmEsIDB4N2YsIDB4ZjUsIDB4ZjcsCisJMHgwZiwgMHhmNywgMHhmMCwgMHg3ZiwgMHg4NywgMHg3ZiwgMHhmMSwgMHhmZiwKKwkweGZmLCAweGZlLCAweDhmLCAweDdmLCAweGYxLAorCTB4ZmYsIDB4ZjgsIDB4NDcsIDB4OGYsIDB4Y2EsIDB4NzAsIDB4N2EsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHg3ZiwgMHg3MCwgMHg4ZiwgMHg3ZiwgMHg4MSwgMHgwZSwKKwkweDAxLCAweDAxLCAweDcxLCAweDgxLCAweDdmLAorCTB4YmYsIDB4N2YsIDB4ZjAsIDB4OGYsIDB4ZmYsIDB4NzAsIDB4M2YsIDB4ZmYsCisJMHhmZCwgMHhmZSwgMHg4ZiwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZlLCAweGZiLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4ZmYsIDB4YmYsIDB4N2YsIDB4ODUsIDB4N2YsIDB4ZjAsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHg3ZiwgMHg4MSwgMHg3ZiwKKwkweDgxLCAweGZlLCAweGYxLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4Y2YsIDB4ODcsIDB4ZmEsIDB4NzUsIDB4ZmYsCisJMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweDhmLCAweDdmLCAweDcwLCAweGZlLAorCTB4ZmYsIDB4ODcsIDB4ZmYsIDB4NGIsIDB4YmYsIDB4N2YsIDB4ZmQsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZlLCAweGZmLCAweGZlLCAweGZmLAorCTB4M2YsIDB4NzgsIDB4ZjgsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHgwZiwgMHg3MSwgMHhmMSwgMHhmZiwgMHg3ZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhlLCAweDBlLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4OGYsCisJMHg4ZiwgMHgwMCwgMHg3MSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZlLCAweDhmLCAweDBlLCAweDAxLCAweDcxLAorCTB4YmYsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHgwZiwgMHg3MSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZlLCAweGZmLCAweGZmLCAweDhmLCAweDBmLAorCTB4ZmYsIDB4ZjgsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHgwZiwgMHg3MSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4OGYsIDB4ZmYsCisJMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweDhmLCAweDdmLCAweGYwLCAweGZmLCAweGZmLAorCTB4N2YsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4N2YsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdlLAorCTB4YmYsIDB4ZmYsIDB4NzgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZlLCAweGZmLCAweDhmLAorCTB4ZmYsIDB4MDcsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHhmZiwgMHhmMCwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhlLCAweDdmLCAweGYxLAorCTB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4M2YsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4OGYsIDB4N2YsIDB4ZjAsIDB4OGYsCisJMHhmZiwgMHhmYywgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHg4ZiwgMHg3ZSwKKwkweGYxLCAweDhmLCAweDdmLCAweGYzLCAweDhlLAorCTB4ZmYsIDB4ODAsIDB4N2YsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHg3ZiwgMHg4MCwgMHg3ZiwgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ODAsIDB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHg4ZiwgMHg3ZiwgMHg4MSwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg4ZiwgMHg3ZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhmLCAweDdmLCAweGYxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MGYsIDB4ZmYsIDB4ODAsCisJMHhmZiwgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHg4ZSwKKwkweDBmLCAweDAxLCAweDcxLCAweGYwLCAweGZmLAorCTB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhlZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGY3LAorCTB4YmYsIDB4ODcsIDB4ZjgsIDB4ZjgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHg3ZiwgMHg4ZiwgMHg4ZiwgMHhmMCwgMHhmMCwgMHhmZSwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZlLCAweDhmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZSwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZSwKKwkweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3ZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3ZiwKKwkweDhmLCAweGZlLCAweGYwLCAweGZmLCAweGZmLAorCTB4YmYsIDB4ZmYsIDB4MGUsIDB4OGYsIDB4NzAsIDB4ODAsIDB4ZmYsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwZiwgMHg3ZiwgMHhmMSwgMHgwZiwKKwkweDdmLCAweGYxLCAweGZlLCAweGZmLCAweDlmLAorCTB4YmYsIDB4MWYsIDB4ZmIsIDB4MGMsIDB4ZmYsIDB4ZjAsIDB4OGYsIDB4ZmYsCisJMHgwMCwgMHhmZiwgMHhiMCwgMHgzZiwgMHg3MSwgMHg4MCwgMHhmZiwgMHhmMSwKKwkweDhmLCAweDdmLCAweDgxLCAweDdlLCAweGMxLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4OGYsIDB4MGYsIDB4NzAsIDB4ZjAsCisJMHg4ZiwgMHg3ZiwgMHg3MCwgMHhjZiwgMHg4ZiwgMHhmZiwgMHg3MSwgMHgwZiwKKwkweDdlLCAweGYxLCAweDhmLCAweDdmLCAweGYxLAorCTB4N2YsIDB4ZmYsIDB4N2YsIDB4MGYsIDB4ZmYsIDB4NzgsIDB4OGYsIDB4OGYsCisJMHg3MCwgMHg3MCwgMHg3ZiwgMHhmZSwgMHhmZiwgMHg4ZiwgMHhmZiwgMHg3MCwKKwkweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGJlLAorCTB4ZmYsIDB4ZjgsIDB4ZjcsIDB4MGIsIDB4ZjcsIDB4ODgsIDB4ZjcsIDB4ZjAsCisJMHg4ZiwgMHg4ZiwgMHg3MCwgMHhmMCwgMHg3ZSwgMHg3MywgMHhmZiwgMHg4ZiwKKwkweDdlLCAweGYwLCAweGZmLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4NzgsIDB4NzcsIDB4ZmYsIDB4OGYsIDB4OGYsIDB4ZjAsIDB4ZjAsCisJMHhmZiwgMHg4ZiwgMHg3NywgMHg3MCwgMHg3NywgMHg3ZiwgMHhmZiwgMHg3ZiwKKwkweGZmLCAweGZmLCAweGZlLCAweDhmLCAweDdmLAorCTB4ZmYsIDB4ZmYsIDB4NzcsIDB4OGYsIDB4ZmYsIDB4ZjAsIDB4ZmYsIDB4ZmYsCisJMHg3NywgMHg3ZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGVmLCAweDdmLCAweGZmLCAweGJmLAorCTB4YmYsIDB4ZmYsIDB4NzQsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4ZmMsCisJMHgwZiwgMHhmMywgMHg4YywgMHhmZiwgMHhmZCwgMHhmZiwgMHhmZiwgMHg4ZiwKKwkweDdmLCAweGYxLCAweDhmLCAweDdkLCAweDgzLAorCTB4ZmYsIDB4N2YsIDB4NzcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmIsCisJMHhmNywgMHg3ZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4NzgsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHgwZiwgMHg4ZiwgMHg3MCwgMHg3MCwgMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweDhlLCAweDBmLCAweDcxLAorCTB4ZmYsIDB4ZjgsIDB4ZjcsIDB4N2YsIDB4ZmYsIDB4OGYsIDB4OGYsIDB4ODAsCisJMHg4MCwgMHg4MSwgMHg3MCwgMHg3MCwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweDZmLCAweDhmLCAweDBmLCAweDcxLAorCTB4YmYsIDB4N2YsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHg3YiwgMHhmZiwgMHg5ZiwgMHhmZiwgMHg3MCwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweDdmLCAweGZmLCAweGZlLCAweDhmLAorCTB4ZmYsIDB4ODcsIDB4N2YsIDB4NzgsIDB4ZmUsIDB4ZmYsIDB4OWUsIDB4ZmYsCisJMHhmMiwgMHg3ZiwgMHhmZiwgMHgwZiwgMHhmZiwgMHhmMCwgMHhmZiwgMHhlZiwKKwkweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAorCTB4N2YsIDB4N2YsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4OGYsCisJMHhmZiwgMHg3MCwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZjcsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4N2YsIDB4N2YsIDB4OGYsIDB4OGYsIDB4ZjAsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZCwgMHhhZiwgMHgwZiwKKwkweDcwLCAweGQxLCAweGZmLCAweGY4LCAweGZlLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4YWYsIDB4OGYsIDB4ZmEsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg5ZiwgMHg4ZiwgMHgwZiwKKwkweDc5LCAweGUxLCAweGZmLCAweGZlLCAweGZmLAorCTB4YmYsIDB4ZmYsIDB4ZmYsIDB4N2EsIDB4OGYsIDB4ZmYsIDB4ZjAsIDB4ZWYsCisJMHhmZiwgMHhmYiwgMHhmZiwgMHhhZiwgMHhmZiwgMHhmYiwgMHg4ZiwgMHg3ZiwKKwkweGYxLCAweGRmLCAweGZmLCAweGY5LCAweGZmLAorCTB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4YWYsIDB4ZmYsIDB4YmEsCisJMHhhZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhkZiwKKwkweGZmLCAweGZkLCAweGJlLCAweGY3LCAweGY1LAorCTB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4ZjAsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmNywgMHhmMCwgMHhmZiwgMHhmZiwgMHg4ZiwgMHgzZiwKKwkweDExLCAweGViLCAweGRiLCAweGNmLCAweDdmLAorCTB4YmYsIDB4ZjAsIDB4OGYsIDB4ODcsIDB4ZjAsIDB4ZjAsIDB4ZmYsIDB4YmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMSwgMHg4ZiwgMHgwZiwgMHgzMSwgMHhmMSwKKwkweDlmLCAweGRmLCAweGY5LCAweDg1LCAweDdmLAorCTB4YmYsIDB4ZmYsIDB4OGYsIDB4N2YsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhlZSwgMHhmZiwgMHhmYiwgMHhmNywgMHg4ZiwgMHg3ZiwgMHhiMSwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGRmLCAweGZkLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4OGYsIDB4ZjAsIDB4ODAsIDB4ZmYsCisJMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHgyZiwgMHg3MSwKKwkweGMxLCAweDdmLCAweGYxLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4ZjAsIDB4ZmYsIDB4YmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHg3ZiwgMHhkMSwKKwkweDlmLCAweGZmLCAweDdiLCAweGI3LCAweGZmLAorCTB4YmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZSwgMHg4ZiwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGJmLCAweGI3LCAweGZmLAorCTB4ZmYsIDB4YTQsIDB4ZjcsIDB4ODgsIDB4ZmYsIDB4ZjAsIDB4YWYsIDB4YmYsCisJMHhmYiwgMHhlZiwgMHhmZiwgMHhmNywgMHhmZiwgMHg4ZiwgMHg3ZiwgMHhmMSwKKwkweGZmLCAweGRkLCAweGY3LCAweDk3LCAweDdmLAorCTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4ZjAsIDB4ZmYsCisJMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHg3ZiwKKwkweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4YWYsIDB4MGYsIDB4YTAsIDB4ZjAsCisJMHhmYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg4ZiwgMHgwZiwKKwkweDcxLCAweGIxLCAweDM3LCAweGY3LCAweGZmLAorCTB4ZmYsIDB4YjgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDdmLAorCTB4YmYsIDB4ZmYsIDB4ZjgsIDB4ZjcsIDB4ZmYsIDB4YTcsIDB4ZmYsIDB4ZjAsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHhmZSwgMHhmMCwgMHhmZiwgMHhmZiwgMHg4ZiwKKwkweDdmLCAweGYxLCAweGZmLCAweGZmLCAweGNmLAorCTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4OWYsIDB4ZjcsIDB4ZjMsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhiZiwgMHg3ZiwgMHhmOSwKKwkweGZmLCAweGZlLCAweGZmLCAweGZmLCAweGRmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4N2YsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGJmLCAweGJmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YWYsIDB4ZmYsIDB4ZjAsIDB4ZmYsIDB4ZmYsCisJMHg5ZiwgMHhmZSwgMHhmMSwgMHhmZiwgMHhmZiwgMHhjZiwgMHg3ZiwgMHhmMSwKKwkweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGYxLAorCTB4YmYsIDB4ZmYsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMCwgMHhiZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDZmLAorCTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGJmLAorCTB4ZmYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhmZiwgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGNmLCAweGZmLAorCTB4ZmYsIDB4ZDgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg4ZiwgMHhlZiwgMHhlMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweDhmLCAweDNmLAorCTB4ZmYsIDB4ZGYsIDB4ZjcsIDB4ZmYsIDB4MGYsIDB4ZmUsIDB4ZjAsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhkZiwgMHg4ZSwgMHg3ZiwKKwkweGYxLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGJmLCAweGJmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4OGYsIDB4ZmYsIDB4ZjEsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhlZiwgMHhmZiwgMHhiZiwgMHg3ZiwgMHhlMSwgMHhmZiwKKwkweGRmLCAweGZmLCAweDdmLCAweGZmLCAweGJmLAorCTB4ZmYsIDB4YTcsIDB4ZmYsIDB4ODgsIDB4ZmYsIDB4ZjEsIDB4ZmUsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHgxZiwgMHhmZiwgMHhmMCwgMHhjZiwgMHhiMSwKKwkweGZmLCAweGVmLCAweGZmLCAweDdmLCAweGZmLApkaWZmIC0tZ2l0IGEvYm9hcmQvc2l4bmV0L3NpeG5ldC5jIGIvYm9hcmQvc2l4bmV0L3NpeG5ldC5jCmluZGV4IGVjMWNiOGIuLmUzMzkyNWMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NpeG5ldC9zaXhuZXQuYworKysgYi9ib2FyZC9zaXhuZXQvc2l4bmV0LmMKQEAgLTE3NCw3ICsxNzQsNyBAQAogCiAJLyogd3JpdGUgcHJvZ3JhbSBkYXRhIHRvIEZQR0EgYXQgdGhlIHByb2dyYW1taW5nIGFkZHJlc3MKIAkgKiBzbyBleHRyYSAvQ1MxIHN0cm9iZXMgYXQgZW5kIG9mIGNvbmZpZ3VyYXRpb24gZG9uJ3QgYWN0dWFsbHkKLSAgICAgICAgICogd3JpdGUgdG8gYW55IHJlZ2lzdGVycy4KKwkgKiB3cml0ZSB0byBhbnkgcmVnaXN0ZXJzLgogCSAqLwogCWZwZ2EgPSAweGZmOwkJLyogZmlyc3Qgd3JpdGUgaXMgaWdub3JlZAkqLwogCWZwZ2EgPSAweGZmOwkJLyogZmlsbCBieXRlCQkJKi8KQEAgLTM3OCw3ICszNzgsNyBAQAogCXJhbXNpemUgPSAwOwkJLyogbm8gUkFNIHByZXNlbnQsIG9yIGRlZmVjdGl2ZSAqLwogICAgIGVsc2UgewogCSpiYXNlX2FkZHIgPSAweGFhYWE1NTU1OwotICAgICAgICAqKGJhc2VfYWRkciArIDEpID0gMHg1NTU1YWFhYTsJLyogdXNlIHdyaXRlIHRvIG1vZGlmeSBkYXRhIGJ1cyAqLworCSooYmFzZV9hZGRyICsgMSkgPSAweDU1NTVhYWFhOwkvKiB1c2Ugd3JpdGUgdG8gbW9kaWZ5IGRhdGEgYnVzICovCiAJaWYgKCpiYXNlX2FkZHIgIT0gMHhhYWFhNTU1NSkKIAkgICAgcmFtc2l6ZSA9IDA7CS8qIG5vIFJBTSBwcmVzZW50LCBvciBkZWZlY3RpdmUgKi8KICAgICB9CkBAIC00MjIsNyArNDIyLDcgQEAKIAlfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLCBfbm90X3VzZWRfLAogCiAJLyogc2luZ2xlIHdyaXRlLiAob2Zmc2V0IDE4IGluIHVwbSBSQU0pICovCi0gICAgICAgIC8qIEZBRFMgaGFkIDB4MWYyN2ZjMDQsIC4uLgorCS8qIEZBRFMgaGFkIDB4MWYyN2ZjMDQsIC4uLgogCSAqIGJ1dCBtb3N0IG90aGVyIGJvYXJkcyBoYXZlIDB4MWYwN2ZjMDQsIHdoaWNoCiAJICogc2V0cyBHUEwwIGZyb20gQTExTVBDIHRvIDAgMS80IGNsb2NrIGVhcmxpZXIsCiAJICogbGlrZSB0aGUgc2luZ2xlIHJlYWQuCkBAIC01MTgsNyArNTE4LDcgQEAKIAkgKiBUaGlzIG1heSBiZSB0b28gZmFzdCwgYnV0IHdvcmtzIGZvciBhbnkgbWVtb3J5LgogCSAqIEl0IGlzIGFkanVzdGVkIHRvIDQwOTYgY3ljbGVzIGluIDY0IG1pbGxpc2Vjb25kcyBpZgogCSAqIHBvc3NpYmxlIG9uY2Ugd2Uga25vdyB3aGF0IG1lbW9yeSB3ZSBoYXZlLgotICAgICAgICAgKgorCSAqCiAJICogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIGNoYW5naW5nIFVQTSByZWdpc3RlcnMgYWZ0ZXIgd2UKIAkgKiBhc2sgaXQgdG8gcnVuIHRoZXNlIGNvbW1hbmRzLgogCSAqCkBAIC01MzIsNyArNTMyLDcgQEAKIAkgKiAgICBTQ0NSW0RGQlJHXSAwCiAJICogICAgUFRQIGRpdmlkZSBieSA4CiAJICogICAgMSBjaGlwIHNlbGVjdAotICAgICAgICAgKi8KKwkgKi8KIAltZW1jdGwtPm1lbWNfbXB0cHIgPSBNUFRQUl9QVFBfRElWODsJLyogMHgwODAwICovCiAJbWVtY3RsLT5tZW1jX21hbXIgPSBTRFJBTV9NQU1SXzhDT0wgJiAofk1BTVJfUFRBRSk7IC8qIG5vIHJlZnJlc2ggeWV0ICovCiAKQEAgLTYwMiw0ICs2MDIsMyBAQAogCiAJcmV0dXJuIChzaXplX3NkcmFtKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2l4bmV0L3UtYm9vdC5sZHMgYi9ib2FyZC9zaXhuZXQvdS1ib290LmxkcwppbmRleCA2NGQ1MzkxLi5mMzUzMjhhIDEwMDY0NAotLS0gYS9ib2FyZC9zaXhuZXQvdS1ib290LmxkcworKysgYi9ib2FyZC9zaXhuZXQvdS1ib290LmxkcwpAQCAtOTgsNiArOTgsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyMCw0ICsxMjUsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9zbWRrMjQwMC9NYWtlZmlsZSBiL2JvYXJkL3NtZGsyNDAwL01ha2VmaWxlCmluZGV4IDZkYmQ0ZTcuLjM2N2VhYmQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NtZGsyNDAwL01ha2VmaWxlCisrKyBiL2JvYXJkL3NtZGsyNDAwL01ha2VmaWxlCkBAIC0yOSw3ICsyOSw3IEBACiBTT0JKUwk6PSBtZW1zZXR1cC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL3NtZGsyNDAwL21lbXNldHVwLlMgYi9ib2FyZC9zbWRrMjQwMC9tZW1zZXR1cC5TCmluZGV4IGI1M2U5OTYuLmI1MDdkODEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NtZGsyNDAwL21lbXNldHVwLlMKKysrIGIvYm9hcmQvc21kazI0MDAvbWVtc2V0dXAuUwpAQCAtMjgsNyArMjgsNiBAQAogICovCiAKIAotCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogCkBAIC0xNjIsNCArMTYxLDMgQEAKIAkud29yZAkweDEwCS8qIEJVU1dJRFRIPTMyLCBTQ0xLIHBvd2VyIHNhdmluZyBtb2RlLCBCQU5LU0laRSAzMk0vMzJNICovCiAJLndvcmQJMHgzMAkvKiBNUlNSNiwgQ0w9M2NsayAqLwogCS53b3JkCTB4MzAJLyogTVJTUjcgKi8KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc21kazI0MDAvdS1ib290LmxkcyBiL2JvYXJkL3NtZGsyNDAwL3UtYm9vdC5sZHMKaW5kZXggOGM5YzIxOC4uYWYzY2QxOSAxMDA2NDQKLS0tIGEvYm9hcmQvc21kazI0MDAvdS1ib290LmxkcworKysgYi9ib2FyZC9zbWRrMjQwMC91LWJvb3QubGRzCkBAIC0yNywyOCArMjcsMzMgQEAKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7Ci0gICAgICAgIC4gPSAweDAwMDAwMDAwOworCS4gPSAweDAwMDAwMDAwOwogCi0gICAgICAgIC4gPSBBTElHTig0KTsKKwkuID0gQUxJR04oNCk7CiAJLnRleHQgICAgICA6CiAJewogCSAgY3B1L2FybTkyMHQvc3RhcnQubwkoLnRleHQpCiAJICAqKC50ZXh0KQogCX0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5kYXRhIDogeyAqKC5kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5kYXRhIDogeyAqKC5kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZ290IDogeyAqKC5nb3QpIH0KKwkuID0gQUxJR04oNCk7CisJLmdvdCA6IHsgKiguZ290KSB9CisKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CiAKIAlhcm1ib290X2VuZF9kYXRhID0gLjsKIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5ic3MgOiB7ICooLmJzcykgfQorCS4gPSBBTElHTig0KTsKKwkuYnNzIDogeyAqKC5ic3MpIH0KIAogCWFybWJvb3RfZW5kID0gLjsKKwogfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc21kazI0MTAvTWFrZWZpbGUgYi9ib2FyZC9zbWRrMjQxMC9NYWtlZmlsZQppbmRleCA3OWFiMzNhLi5hZjFlNmU2IDEwMDY0NAotLS0gYS9ib2FyZC9zbWRrMjQxMC9NYWtlZmlsZQorKysgYi9ib2FyZC9zbWRrMjQxMC9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogU09CSlMJOj0gbWVtc2V0dXAubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9zbWRrMjQxMC9mbGFzaC5jIGIvYm9hcmQvc21kazI0MTAvZmxhc2guYwppbmRleCA1ZDA0ZWQ0Li5kNzQ3OWYwIDEwMDY0NAotLS0gYS9ib2FyZC9zbWRrMjQxMC9mbGFzaC5jCisrKyBiL2JvYXJkL3NtZGsyNDEwL2ZsYXNoLmMKQEAgLTMxMyw3ICszMTMsNyBAQAogICAgICAqLwogICAgIHJlc3VsdCA9ICphZGRyOwogICAgIGlmICgocmVzdWx0ICYgZGF0YSkgIT0gZGF0YSkKLSAgICAgICAgcmV0dXJuIEVSUl9OT1RfRVJBU0VEOworCXJldHVybiBFUlJfTk9UX0VSQVNFRDsKIAogCiAgICAgLyoKQEAgLTM2Niw3ICszNjYsNyBAQAogICAgICphZGRyID0gQ01EX1JFQURfQVJSQVk7CiAKICAgICBpZiAoY2hpcCA9PSBFUlIgfHwgKmFkZHIgIT0gZGF0YSkKLSAgICAgICAgcmMgPSBFUlJfUFJPR19FUlJPUjsKKwlyYyA9IEVSUl9QUk9HX0VSUk9SOwogCiAgICAgaWYgKGlmbGFnKQogICAgICAgZW5hYmxlX2ludGVycnVwdHMoKTsKZGlmZiAtLWdpdCBhL2JvYXJkL3NtZGsyNDEwL21lbXNldHVwLlMgYi9ib2FyZC9zbWRrMjQxMC9tZW1zZXR1cC5TCmluZGV4IDNhODRiZTUuLmMwMGU3NzIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3NtZGsyNDEwL21lbXNldHVwLlMKKysrIGIvYm9hcmQvc21kazI0MTAvbWVtc2V0dXAuUwpAQCAtMjgsNyArMjgsNiBAQAogICovCiAKIAotCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogCmRpZmYgLS1naXQgYS9ib2FyZC9zbWRrMjQxMC91LWJvb3QubGRzIGIvYm9hcmQvc21kazI0MTAvdS1ib290LmxkcwppbmRleCA4YzljMjE4Li4wY2YwNzZhIDEwMDY0NAotLS0gYS9ib2FyZC9zbWRrMjQxMC91LWJvb3QubGRzCisrKyBiL2JvYXJkL3NtZGsyNDEwL3UtYm9vdC5sZHMKQEAgLTI3LDI4ICsyNywzNCBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSAgICAgICAgLiA9IDB4MDAwMDAwMDA7CisJLiA9IDB4MDAwMDAwMDA7CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAkudGV4dCAgICAgIDoKIAl7CiAJICBjcHUvYXJtOTIwdC9zdGFydC5vCSgudGV4dCkKIAkgICooLnRleHQpCiAJfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CisJLiA9IEFMSUdOKDQpOworCS5yb2RhdGEgOiB7ICooLnJvZGF0YSkgfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmRhdGEgOiB7ICooLmRhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLmRhdGEgOiB7ICooLmRhdGEpIH0KIAotICAgICAgICAuID0gQUxJR04oNCk7Ci0gICAgICAgIC5nb3QgOiB7ICooLmdvdCkgfQorCS4gPSBBTElHTig0KTsKKwkuZ290IDogeyAqKC5nb3QpIH0KKworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKwogCiAJYXJtYm9vdF9lbmRfZGF0YSA9IC47CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuYnNzIDogeyAqKC5ic3MpIH0KKwkuID0gQUxJR04oNCk7CisJLmJzcyA6IHsgKiguYnNzKSB9CiAKIAlhcm1ib290X2VuZCA9IC47CisKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL3NwZDh4eC9NYWtlZmlsZSBiL2JvYXJkL3NwZDh4eC9NYWtlZmlsZQppbmRleCBlZjE3M2QwLi4xM2NlOWZjIDEwMDY0NAotLS0gYS9ib2FyZC9zcGQ4eHgvTWFrZWZpbGUKKysrIGIvYm9hcmQvc3BkOHh4L01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC9zcGQ4eHgvc3BkOHh4LmMgYi9ib2FyZC9zcGQ4eHgvc3BkOHh4LmMKaW5kZXggNjQyODg5Ni4uNjEyMDFkNyAxMDA2NDQKLS0tIGEvYm9hcmQvc3BkOHh4L3NwZDh4eC5jCisrKyBiL2JvYXJkL3NwZDh4eC9zcGQ4eHguYwpAQCAtNDEsNyArNDEsNyBAQAogCSAqLwogCTB4MEZGM0ZDMDQsIDB4MEZGM0VDMDAsIDB4N0ZGRkVDMDQsIDB4RkZGRkVDMDQsCiAJMHhGRkZGRUMwNSwgLyogbGFzdCAqLwotCSAgICAgICAgICAgIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCisJCSAgICBfTk9UX1VTRURfLCBfTk9UX1VTRURfLCBfTk9UX1VTRURfLAogCS8qCiAJICogQnVyc3QgUmVhZC4gKE9mZnNldCA4IGluIFVQTSBSQU0pCiAJICovCkBAIC01NSw3ICs1NSw3IEBACiAJICovCiAJMHgwRkFGRkMwNCwgMHgwRkFGRUMwMCwgMHg3RkZGRUMwNCwgMHhGRkZGRUMwNCwKIAkweEZGRkZFQzA1LCAvKiBsYXN0ICovCi0JICAgICAgICAgICAgX05PVF9VU0VEXywgX05PVF9VU0VEXywgX05PVF9VU0VEXywKKwkJICAgIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sIF9OT1RfVVNFRF8sCiAJLyoKIAkgKiBCdXJzdCBXcml0ZS4gKE9mZnNldCAyMCBpbiBVUE0gUkFNKQogCSAqLwpAQCAtODksOSArODksOSBAQAogCS8qCiAJICogU0RSQU0gSW5pdGlhbGl6YXRpb24gKG9mZnNldCA1IGluIFVQTSBSQU0pCiAJICoKLSAgICAgICAgICogVGhpcyBpcyBubyBVUE0gZW50cnkgcG9pbnQuIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiB1c2VzCi0gICAgICAgICAqIHRoZSByZW1haW5pbmcgc3BhY2UgdG8gZXN0YWJsaXNoIGFuIGluaXRpYWxpemF0aW9uCi0gICAgICAgICAqIHNlcXVlbmNlLCB3aGljaCBpcyBleGVjdXRlZCBieSBhIFJVTiBjb21tYW5kLgorCSAqIFRoaXMgaXMgbm8gVVBNIGVudHJ5IHBvaW50LiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gdXNlcworCSAqIHRoZSByZW1haW5pbmcgc3BhY2UgdG8gZXN0YWJsaXNoIGFuIGluaXRpYWxpemF0aW9uCisJICogc2VxdWVuY2UsIHdoaWNoIGlzIGV4ZWN1dGVkIGJ5IGEgUlVOIGNvbW1hbmQuCiAJICoKIAkgKi8KIAkJICAgIDB4MUZGNzdDMzUsIDB4RUZFQUJDMzQsIDB4MUZCNTdDMzUsIC8qIGxhc3QgKi8KQEAgLTI4Miw4ICsyODIsOCBAQAogCWltbXItPmltX2lvcG9ydC5pb3BfcGFkYXQgJj0gfihQQV9FTkVUX01EQyk7CS8qIHNldCBNREMgPSAwICovCiAKIAkvKgotICAgICAgICAgKiBSRVNFVCBpbiBpbXBsZW1lbnRlZCBieSBhIHBvc2l0aXZlIHB1bHNlIG9mIGF0IGxlYXN0IDEgdXMKLSAgICAgICAgICogYXQgdGhlIHJlc2V0IHBpbi4KKwkgKiBSRVNFVCBpbiBpbXBsZW1lbnRlZCBieSBhIHBvc2l0aXZlIHB1bHNlIG9mIGF0IGxlYXN0IDEgdXMKKwkgKiBhdCB0aGUgcmVzZXQgcGluLgogCSAqCiAJICogQ29uZmlndXJlIFJFU0VUIHBpbnMgZm9yIE5TIERQODM4NDMgUEhZLCBhbmQgUkVTRVQgY2hpcC4KIAkgKgpkaWZmIC0tZ2l0IGEvYm9hcmQvc3BkOHh4L3UtYm9vdC5sZHMgYi9ib2FyZC9zcGQ4eHgvdS1ib290LmxkcwppbmRleCBkZWJjZDQ5Li5mODAxZDNiIDEwMDY0NAotLS0gYS9ib2FyZC9zcGQ4eHgvdS1ib290LmxkcworKysgYi9ib2FyZC9zcGQ4eHgvdS1ib290LmxkcwpAQCAtOTgsNiArOTgsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyMCw0ICsxMjUsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC9zcGQ4eHgvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL3NwZDh4eC91LWJvb3QubGRzLmRlYnVnCmluZGV4IGJkMTNiN2IuLjAyNDVmNzggMTAwNjQ0Ci0tLSBhL2JvYXJkL3NwZDh4eC91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL3NwZDh4eC91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDcsNiArMTA3LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjksNCArMTM0LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc3ZtX3NjOHh4L01ha2VmaWxlIGIvYm9hcmQvc3ZtX3NjOHh4L01ha2VmaWxlCmluZGV4IGVmMTczZDAuLjEzY2U5ZmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3N2bV9zYzh4eC9NYWtlZmlsZQorKysgYi9ib2FyZC9zdm1fc2M4eHgvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3N2bV9zYzh4eC9mbGFzaC5jIGIvYm9hcmQvc3ZtX3NjOHh4L2ZsYXNoLmMKaW5kZXggYjUwZjc3Yi4uMjVlNjFkZCAxMDA2NDQKLS0tIGEvYm9hcmQvc3ZtX3NjOHh4L2ZsYXNoLmMKKysrIGIvYm9hcmQvc3ZtX3NjOHh4L2ZsYXNoLmMKQEAgLTEsNSArMSw0IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDAwCiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC02OCw0NCArNjcsNDQgQEAKIAl9CiAjaWZkZWYgQ0ZHX0RPQ19CQVNFCiAjaWZuZGVmIENPTkZJR19GRUw4eHhfQVQKLSAgICAgICAgbWVtY3RsLT5tZW1jX29yNSA9ICgweGZmZmY4MDAwIHwgQ0ZHX09SX1RJTUlOR19ET0MgKTsgLyogMzJrIGJ5dGVzICovCi0gICAgICAgIG1lbWN0bC0+bWVtY19icjUgPSBDRkdfRE9DX0JBU0UgfCAweDQwMTsKKwltZW1jdGwtPm1lbWNfb3I1ID0gKDB4ZmZmZjgwMDAgfCBDRkdfT1JfVElNSU5HX0RPQyApOyAvKiAzMmsgYnl0ZXMgKi8KKwltZW1jdGwtPm1lbWNfYnI1ID0gQ0ZHX0RPQ19CQVNFIHwgMHg0MDE7CiAjZWxzZQotICAgICAgICBtZW1jdGwtPm1lbWNfb3IzID0gKDB4ZmZmZjgwMDAgfCBDRkdfT1JfVElNSU5HX0RPQyApOyAvKiAzMmsgYnl0ZXMgKi8KLSAgICAgICAgbWVtY3RsLT5tZW1jX2JyMyA9IENGR19ET0NfQkFTRSB8IDB4NDAxOworCW1lbWN0bC0+bWVtY19vcjMgPSAoMHhmZmZmODAwMCB8IENGR19PUl9USU1JTkdfRE9DICk7IC8qIDMyayBieXRlcyAqLworCW1lbWN0bC0+bWVtY19icjMgPSBDRkdfRE9DX0JBU0UgfCAweDQwMTsKICNlbmRpZgogI2VuZGlmCiAjaWYgZGVmaW5lZCggQ09ORklHX0JPT1RfOEIpCi0vLyAgICAgICAgbWVtY3RsLT5tZW1jX29yMCA9IDB4ZmZmODBmZjQ7IC8qIDRNQiBieXRlcyAqLwotLy8gICAgICAgIG1lbWN0bC0+bWVtY19icjAgPSAweDQwMDAwNDAxOwotICAgICAgICBzaXplX2IwID0gMHg4MDAwMDsgIC8qIDUxMiBLICovCi0gICAgICAgIGZsYXNoX2luZm9bMF0uZmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EIHwgRkxBU0hfQU0wNDA7Ci0gICAgICAgIGZsYXNoX2luZm9bMF0uc2VjdG9yX2NvdW50ID0gODsKLSAgICAgICAgZmxhc2hfaW5mb1swXS5zaXplID0gMHgwMDA4MDAwMDsKLSAgICAgICAgLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmbGFzaF9pbmZvWzBdLnNlY3Rvcl9jb3VudDsgaSsrKQotICAgICAgICBmbGFzaF9pbmZvWzBdLnN0YXJ0W2ldID0gMHg0MDAwMDAwMCArIChpICogMHgxMDAwMCk7Ci0gICAgICAgIC8qIHByb3RlY3QgYWxsIHNlY3RvcnMgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGZsYXNoX2luZm9bMF0uc2VjdG9yX2NvdW50OyBpKyspCi0gICAgICAgIGZsYXNoX2luZm9bMF0ucHJvdGVjdFtpXSA9IDB4MTsKKy8qICAgICAgICBtZW1jdGwtPm1lbWNfb3IwID0gMHhmZmY4MGZmNDsgLyMjIyogNE1CIGJ5dGVzICovCisvKiAgICAgICAgbWVtY3RsLT5tZW1jX2JyMCA9IDB4NDAwMDA0MDE7ICovCisJc2l6ZV9iMCA9IDB4ODAwMDA7ICAvKiA1MTIgSyAqLworCWZsYXNoX2luZm9bMF0uZmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EIHwgRkxBU0hfQU0wNDA7CisJZmxhc2hfaW5mb1swXS5zZWN0b3JfY291bnQgPSA4OworCWZsYXNoX2luZm9bMF0uc2l6ZSA9IDB4MDAwODAwMDA7CisJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IGZsYXNoX2luZm9bMF0uc2VjdG9yX2NvdW50OyBpKyspCisJZmxhc2hfaW5mb1swXS5zdGFydFtpXSA9IDB4NDAwMDAwMDAgKyAoaSAqIDB4MTAwMDApOworCS8qIHByb3RlY3QgYWxsIHNlY3RvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZmxhc2hfaW5mb1swXS5zZWN0b3JfY291bnQ7IGkrKykKKwlmbGFzaF9pbmZvWzBdLnByb3RlY3RbaV0gPSAweDE7CiAjZWxpZiBkZWZpbmVkIChDT05GSUdfQk9PVF8xNkIpCi0vLyAgICAgICAgbWVtY3RsLT5tZW1jX29yMCA9IDB4ZmZmODBmZjQ7IC8qIDRNQiBieXRlcyAqLwotLy8gICAgICAgIG1lbWN0bC0+bWVtY19icjAgPSAweDQwMDAwNDAxOwotICAgICAgICBzaXplX2IwID0gMHg0MDAwMDA7ICAvKiA0TUIgLCBhc3N1bWUgQU1EMjlMVjMyMEIgKi8KLSAgICAgICAgZmxhc2hfaW5mb1swXS5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQgfCBGTEFTSF9BTTMyMEI7Ci0gICAgICAgIGZsYXNoX2luZm9bMF0uc2VjdG9yX2NvdW50ID0gNjc7Ci0gICAgICAgIGZsYXNoX2luZm9bMF0uc2l6ZSA9IDB4MDA0MDAwMDA7Ci0gICAgICAgIC8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRkcmVzcyB0YWJsZSAqLwotICAgICAgICBmbGFzaF9pbmZvWzBdLnN0YXJ0WzBdID0gMHg0MDAwMDAwMCAgOwotICAgICAgICBmbGFzaF9pbmZvWzBdLnN0YXJ0WzFdID0gMHg0MDAwMDAwMCArIDB4NDAwMDsKLSAgICAgICAgZmxhc2hfaW5mb1swXS5zdGFydFsyXSA9IDB4NDAwMDAwMDAgKyAweDYwMDA7Ci0gICAgICAgIGZsYXNoX2luZm9bMF0uc3RhcnRbM10gPSAweDQwMDAwMDAwICsgMHg4MDAwOwotICAgICAgICBmb3IgKGkgPSA0OyBpIDwgZmxhc2hfaW5mb1swXS5zZWN0b3JfY291bnQ7IGkrKykKLSAgICAgICAgZmxhc2hfaW5mb1swXS5zdGFydFtpXSA9IDB4NDAwMDAwMDAgKyAweDEwMDAwICsgKChpLTQpICogMHgxMDAwMCk7Ci0gICAgICAgIC8qIHByb3RlY3QgYWxsIHNlY3RvcnMgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGZsYXNoX2luZm9bMF0uc2VjdG9yX2NvdW50OyBpKyspCi0gICAgICAgIGZsYXNoX2luZm9bMF0ucHJvdGVjdFtpXSA9IDB4MTsKLSNlbmRpZgkJCQkJCQkJCQorLyogICAgICAgIG1lbWN0bC0+bWVtY19vcjAgPSAweGZmZjgwZmY0OyAvIyMjKiA0TUIgYnl0ZXMgKi8KKy8qICAgICAgICBtZW1jdGwtPm1lbWNfYnIwID0gMHg0MDAwMDQwMTsgKi8KKwlzaXplX2IwID0gMHg0MDAwMDA7ICAvKiA0TUIgLCBhc3N1bWUgQU1EMjlMVjMyMEIgKi8KKwlmbGFzaF9pbmZvWzBdLmZsYXNoX2lkID0gRkxBU0hfTUFOX0FNRCB8IEZMQVNIX0FNMzIwQjsKKwlmbGFzaF9pbmZvWzBdLnNlY3Rvcl9jb3VudCA9IDY3OworCWZsYXNoX2luZm9bMF0uc2l6ZSA9IDB4MDA0MDAwMDA7CisJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCisJZmxhc2hfaW5mb1swXS5zdGFydFswXSA9IDB4NDAwMDAwMDAgIDsKKwlmbGFzaF9pbmZvWzBdLnN0YXJ0WzFdID0gMHg0MDAwMDAwMCArIDB4NDAwMDsKKwlmbGFzaF9pbmZvWzBdLnN0YXJ0WzJdID0gMHg0MDAwMDAwMCArIDB4NjAwMDsKKwlmbGFzaF9pbmZvWzBdLnN0YXJ0WzNdID0gMHg0MDAwMDAwMCArIDB4ODAwMDsKKwlmb3IgKGkgPSA0OyBpIDwgZmxhc2hfaW5mb1swXS5zZWN0b3JfY291bnQ7IGkrKykKKwlmbGFzaF9pbmZvWzBdLnN0YXJ0W2ldID0gMHg0MDAwMDAwMCArIDB4MTAwMDAgKyAoKGktNCkgKiAweDEwMDAwKTsKKwkvKiBwcm90ZWN0IGFsbCBzZWN0b3JzICovCisJZm9yIChpID0gMDsgaSA8IGZsYXNoX2luZm9bMF0uc2VjdG9yX2NvdW50OyBpKyspCisJZmxhc2hfaW5mb1swXS5wcm90ZWN0W2ldID0gMHgxOworI2VuZGlmCiAKIAogI2lmZGVmIENPTkZJR19CT09UXzMyQgpAQCAtNDgyLDcgKzQ4MSw3IEBACiAJZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdDw9c19sYXN0OyBzZWN0KyspIHsKIAkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gPT0gMCkgewkvKiBub3QgcHJvdGVjdGVkICovCiAJCQlhZGRyID0gKHZ1X2xvbmcqKShpbmZvLT5zdGFydFtzZWN0XSk7Ci0JCQkvL2FkZHJbMF0gPSAweDAwMzAwMDMwOworCQkJLyphZGRyWzBdID0gMHgwMDMwMDAzMDsgKi8KIAkJCW15X291dF84KCAgICAgKHVuc2lnbmVkIGNoYXIgKikgKCh1bG9uZylhZGRyKSwweDMwICk7CiAJCQlsX3NlY3QgPSBzZWN0OwogCQl9CkBAIC01NTMsMTEgKzU1MiwxMSBAQAogCWxhc3QgID0gc3RhcnQ7CiAJYWRkciA9ICh2dV9sb25nKikoaW5mby0+c3RhcnRbbF9zZWN0XSk7CiAjaWYgZGVmaW5lZCAoQ09ORklHX0JPT1RfOEIpCi0Jd2hpbGUgKCAgKG15X2luXzgoKHVuc2lnbmVkIGNoYXIgKilhZGRyKSAmIDB4ODApICE9IDB4ODAgKSAKKwl3aGlsZSAoICAobXlfaW5fOCgodW5zaWduZWQgY2hhciAqKWFkZHIpICYgMHg4MCkgIT0gMHg4MCApCiAjZWxpZiBkZWZpbmVkKENPTkZJR19CT09UXzE2QiApCi0Jd2hpbGUgKCAgKG15X2luX2JlMTYoKHVuc2lnbmVkIHNob3J0ICopYWRkcikgJiAweDAwODApICE9IDB4MDA4MCApIAorCXdoaWxlICggIChteV9pbl9iZTE2KCh1bnNpZ25lZCBzaG9ydCAqKWFkZHIpICYgMHgwMDgwKSAhPSAweDAwODAgKQogI2VsaWYgZGVmaW5lZChDT05GSUdfQk9PVF8zMkIpCi0Jd2hpbGUgKCAgKG15X2luX2JlMzIoKHVuc2lnbmVkICAqKWFkZHIpICYgMHgwMDgwMDA4MCkgIT0gMHgwMDgwMDA4MCApIAorCXdoaWxlICggIChteV9pbl9iZTMyKCh1bnNpZ25lZCAgKilhZGRyKSAmIDB4MDA4MDAwODApICE9IDB4MDA4MDAwODAgKQogI2Vsc2UKICMgZXJyb3IgQ09ORklHX0JPT1RfKHNpemUpQiBtaXNzaW5nLgogI2VuZGlmCkBAIC02ODgsNyArNjg3LDcgQEAKIAlteV9vdXRfOCggKHVuc2lnbmVkIGNoYXIgKiApICAoYWRkcisweDU1NSkgLCAweDkwICk7CiAJaW5fbWlkPW15X2luXzgoICh1bnNpZ25lZCBjaGFyICogKSBhZGRyICk7CiAJaW5fZGlkPW15X2luXzgoICh1bnNpZ25lZCBjaGFyICogKSAoYWRkcisxKSApOwotICAJcHJpbnRmKCIgbWFuIElEPTB4JXgsIGRldiBJRD0weCV4LlxuIixpbl9taWQsaW5fZGlkICk7CisJcHJpbnRmKCIgbWFuIElEPTB4JXgsIGRldiBJRD0weCV4LlxuIixpbl9taWQsaW5fZGlkICk7CiAJbXlfb3V0XzgoICh1bnNpZ25lZCBjaGFyICopYWRkciwgMHhmMCk7CiAJdWRlbGF5KDEpOwogCX0KQEAgLTY5Niw3ICs2OTUsNyBAQAogICAgICAgewogCWludCAgZGF0YV9jaFs0XTsKIAlkYXRhX2NoWzBdPShpbnQgKSAoKGRhdGE+PjI0KSAmIDB4ZmYpOwotCWRhdGFfY2hbMV09KGludCApICgoZGF0YT4+MTYpICYweGZmICk7IAorCWRhdGFfY2hbMV09KGludCApICgoZGF0YT4+MTYpICYweGZmICk7CiAJZGF0YV9jaFsyXT0oaW50ICkgKChkYXRhID4+OCkgJiAweGZmKTsKIAlkYXRhX2NoWzNdPShpbnQgKSAoZGF0YSAmIDB4ZmYpOwogCWZvciAoaT0wO2k8NDtpKysgKXsKQEAgLTcwOCw3ICs3MDcsNyBAQAogCWlmIChmbGFnKQogCQllbmFibGVfaW50ZXJydXB0cygpOwogCi0gIAkgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKwkgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKIAlsYXN0ICA9IHN0YXJ0OwogCSAgd2hpbGUoICAoIG15X2luXzgoKHVuc2lnbmVkIGNoYXIgKikgKGRlc3QraSkpICkgIT0gKCBkYXRhX2NoW2ldICApICkgewogCQkgIGlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQgKSB7CkBAIC03MTksNyArNzE4LDcgQEAKICAgICAgfQogI2VsaWYgZGVmaW5lZCggQ09ORklHX0JPT1RfMTZCKQogCWRhdGFfc2hvcnRbMF09KGludCkgKGRhdGE+PjE2KSAmIDB4ZmZmZjsKLQlkYXRhX3Nob3J0WzFdPShpbnQgKSBkYXRhICYgMHhmZmZmIDsgCisJZGF0YV9zaG9ydFsxXT0oaW50ICkgZGF0YSAmIDB4ZmZmZiA7CiAJZm9yIChpPTA7aTwyO2krKyApewogCW15X291dF9iZTE2KCAgICAgKHVuc2lnbmVkIHNob3J0ICopICgodWxvbmcpYWRkcisgMHhhYWEpLDB4YWEgKTsKIAlteV9vdXRfYmUxNiggICAgICh1bnNpZ25lZCBzaG9ydCAqKSAoKHVsb25nKWFkZHIrIDB4NTU0KSwweDU1ICk7CkBAIC03MjgsNyArNzI3LDcgQEAKIAkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoZmxhZykKIAkJZW5hYmxlX2ludGVycnVwdHMoKTsKLSAgCSAgc3RhcnQgPSBnZXRfdGltZXIgKDApOworCSAgc3RhcnQgPSBnZXRfdGltZXIgKDApOwogCWxhc3QgID0gc3RhcnQ7CiAJICB3aGlsZSggICggbXlfaW5fYmUxNigodW5zaWduZWQgc2hvcnQgKikgKGRlc3QrKGkqMikpKSApICE9ICggZGF0YV9zaG9ydFtpXSAgKSApIHsKIAkJICBpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IENGR19GTEFTSF9XUklURV9UT1VUICkgewpAQCAtNzU1LDggKzc1NCw4IEBACiAJCX0KIAl9CiAjZW5kaWYKLQkKLQkKKworCiAJcmV0dXJuICgwKTsKIH0KICNpZmRlZiAgQ09ORklHX0JPT1RfOEIKQEAgLTc3Niw4ICs3NzUsOCBAQAogc3RhdGljIGludCBteV9pbl9iZTE2KCB1bnNpZ25lZCBzaG9ydCAqYWRkcikKIHsKICAgICAgICBpbnQgcmV0OwotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibGh6JVUxJVgxICUwLCUxOyBlaWVpbyIgOiAiPXIiIChyZXQpIDogIm0iICgqYWRkcikpOwotCQkJICAgICAgICByZXR1cm4gcmV0OworCV9fYXNtX18gX192b2xhdGlsZV9fKCJsaHolVTElWDEgJTAsJTE7IGVpZWlvIiA6ICI9ciIgKHJldCkgOiAibSIgKCphZGRyKSk7CisJCQkJcmV0dXJuIHJldDsKIH0KIHN0YXRpYyB2b2lkIG15X291dF9iZTE2KCB1bnNpZ25lZCBzaG9ydCAqYWRkciwgaW50IHZhbCkKIHsKQEAgLTc4NywxNSArNzg2LDEyIEBACiAjaWZkZWYgIENPTkZJR19CT09UXzMyQgogc3RhdGljICB1bnNpZ25lZCBteV9pbl9iZTMyKCB1bnNpZ25lZCAqYWRkcikKIHsKLSAgICAgICAgdW5zaWduZWQgcmV0OwotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibHd6JVUxJVgxICUwLCUxOyBlaWVpbyIgOiAiPXIiIChyZXQpIDogIm0iICgqYWRkcikpOwotCQkJICAgICAgICByZXR1cm4gcmV0OworCXVuc2lnbmVkIHJldDsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibHd6JVUxJVgxICUwLCUxOyBlaWVpbyIgOiAiPXIiIChyZXQpIDogIm0iICgqYWRkcikpOworCQkJCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgIHZvaWQgbXlfb3V0X2JlMzIoIHVuc2lnbmVkICphZGRyLCBpbnQgdmFsKQogewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdHclVTAlWDAgJTEsJTA7IGVpZWlvIiA6ICI9bSIgKCphZGRyKSA6ICJyIiAodmFsKSk7CiB9CiAjZW5kaWYKLQotCi0KZGlmZiAtLWdpdCBhL2JvYXJkL3N2bV9zYzh4eC9zdm1fc2M4eHguYyBiL2JvYXJkL3N2bV9zYzh4eC9zdm1fc2M4eHguYwppbmRleCBkYjMxNjJhLi4xMzExZWE5IDEwMDY0NAotLS0gYS9ib2FyZC9zdm1fc2M4eHgvc3ZtX3NjOHh4LmMKKysrIGIvYm9hcmQvc3ZtX3NjOHh4L3N2bV9zYzh4eC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogbG9uZyBpbnQgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQoteyAgICAKK3sKIAl2b2xhdGlsZSBpbW1hcF90ICAgICAqaW1tYXAgID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7CiAJbG9uZyBpbnQgc2l6ZV9iMCA9IDA7CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAl1ZGVsYXkoMSk7CiAJbWVtY3RsLT5tZW1jX29yMSA9ICAweGZjMDAwYTAwOwogCXNpemVfYjAgPSAweDA0MDAwMDAwOwotI2Vsc2UgCisjZWxzZQogI2Vycm9yIFNEUkFNIHNpemUgY29uZmlndXJhdGlvbiBtaXNzaW5nLgogI2VuZGlmCiAJbWVtY3RsLT5tZW1jX2JyMSA9ICAweDAwMDAwMDgxOwpAQCAtMTYwLDQgKzE2MCwzIEBACiAJICAgICAgICBkb2NfcHJvYmUgKENGR19ET0NfQkFTRSk7CiB9CiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc3ZtX3NjOHh4L3UtYm9vdC5sZHMgYi9ib2FyZC9zdm1fc2M4eHgvdS1ib290LmxkcwppbmRleCAwMjI1ZjBiLi4zNmU0ODM2IDEwMDY0NAotLS0gYS9ib2FyZC9zdm1fc2M4eHgvdS1ib290LmxkcworKysgYi9ib2FyZC9zdm1fc2M4eHgvdS1ib290LmxkcwpAQCAtMTEyLDYgKzExMiwxMiBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMzQsNCArMTQwLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvc3ZtX3NjOHh4L3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC9zdm1fc2M4eHgvdS1ib290Lmxkcy5kZWJ1ZwppbmRleCAyMjEzOGY4Li5mMzRjMmE0IDEwMDY0NAotLS0gYS9ib2FyZC9zdm1fc2M4eHgvdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC9zdm1fc2M4eHgvdS1ib290Lmxkcy5kZWJ1ZwpAQCAtMTI4LDQgKzEyOCwzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3RxbTgyNjAvTWFrZWZpbGUgYi9ib2FyZC90cW04MjYwL01ha2VmaWxlCmluZGV4IDJhMTUwYTEuLmMxMGI5ZmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxbTgyNjAvTWFrZWZpbGUKKysrIGIvYm9hcmQvdHFtODI2MC9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyAuLi90cW04eHgvbG9hZF9zZXJudW1fZXRoYWRkci5vCiAKICQoTElCKToJLmRlcGVuZCAkKE9CSlMpCi0JJChBUikgY3J2ICRAICReCisJJChBUikgY3J2ICRAICQoT0JKUykKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCmRpZmYgLS1naXQgYS9ib2FyZC90cW04MjYwL3UtYm9vdC5sZHMgYi9ib2FyZC90cW04MjYwL3UtYm9vdC5sZHMKaW5kZXggOWQ1NmYxMy4uY2U2YzQ1NCAxMDA2NDQKLS0tIGEvYm9hcmQvdHFtODI2MC91LWJvb3QubGRzCisrKyBiL2JvYXJkL3RxbTgyNjAvdS1ib290LmxkcwpAQCAtOTQsNiArOTQsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTExNiw0ICsxMjEsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC90cW04eHgvTWFrZWZpbGUgYi9ib2FyZC90cW04eHgvTWFrZWZpbGUKaW5kZXggOTljMGY4NS4uYTAxZmQ4NiAxMDA2NDQKLS0tIGEvYm9hcmQvdHFtOHh4L01ha2VmaWxlCisrKyBiL2JvYXJkL3RxbTh4eC9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBsb2FkX3Nlcm51bV9ldGhhZGRyLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3RxbTh4eC91LWJvb3QubGRzIGIvYm9hcmQvdHFtOHh4L3UtYm9vdC5sZHMKaW5kZXggNzFlOGY3Zi4uMTBkYzdkMiAxMDA2NDQKLS0tIGEvYm9hcmQvdHFtOHh4L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvdHFtOHh4L3UtYm9vdC5sZHMKQEAgLTExMiw2ICsxMTIsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzNCw0ICsxMzksMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC90cW04eHgvdS1ib290Lmxkcy5kZWJ1ZyBiL2JvYXJkL3RxbTh4eC91LWJvb3QubGRzLmRlYnVnCmluZGV4IDIyMTM4ZjguLmMwZWU4NDkgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RxbTh4eC91LWJvb3QubGRzLmRlYnVnCisrKyBiL2JvYXJkL3RxbTh4eC91LWJvb3QubGRzLmRlYnVnCkBAIC0xMDYsNiArMTA2LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMjgsNCArMTMzLDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9NYWtlZmlsZSBiL2JvYXJkL3RyYWIvTWFrZWZpbGUKaW5kZXggYmI2OTMwZC4uZDU4YWM5MSAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi9NYWtlZmlsZQorKysgYi9ib2FyZC90cmFiL01ha2VmaWxlCkBAIC0yOSw3ICsyOSw3IEBACiBTT0JKUwk6PSBtZW1zZXR1cC5vCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvZmxhc2guYyBiL2JvYXJkL3RyYWIvZmxhc2guYwppbmRleCBhMmEyMWM2Li5hYmEwNjMxIDEwMDY0NAotLS0gYS9ib2FyZC90cmFiL2ZsYXNoLmMKKysrIGIvYm9hcmQvdHJhYi9mbGFzaC5jCkBAIC00MzksNyArNDM5LDcgQEAKIAkJZWxzZSB7CiAJCQlkYXRhID0gKigodnVfbG9uZyAqKSBzcmMpOwogCQl9Ci0JCQkKKwogCQlpZiAoKHJjID0gd3JpdGVfd29yZCAoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CiAJCQlyZXR1cm4gKHJjKTsKIAkJfQpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9tZW1zZXR1cC5TIGIvYm9hcmQvdHJhYi9tZW1zZXR1cC5TCmluZGV4IGVhNGJjY2MuLjc5MTQ1MTMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RyYWIvbWVtc2V0dXAuUworKysgYi9ib2FyZC90cmFiL21lbXNldHVwLlMKQEAgLTI4LDcgKzI4LDYgQEAKICAqLwogCiAKLQogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgPHZlcnNpb24uaD4KIApAQCAtMTY1LDQgKzE2NCwzIEBACiAJLndvcmQJMHgxNwkvKiBCVVNXSURUSD0zMiwgU0NMSyBwb3dlciBzYXZpbmcgbW9kZSwgQkFOS1NJWkUgMTZNLzE2TSAqLwogCS53b3JkCTB4MzAJLyogTVJTUjYsIENMPTNjbGsgKi8KIAkud29yZAkweDMwCS8qIE1SU1I3ICovCi0KZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvdHJhYi5jIGIvYm9hcmQvdHJhYi90cmFiLmMKaW5kZXggZGQ0MTA1ZC4uMWE0ZjVjNSAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi90cmFiLmMKKysrIGIvYm9hcmQvdHJhYi90cmFiLmMKQEAgLTI0LDkgKzI0LDkgQEAKIC8qICNkZWZpbmUgREVCVUcgKi8KIAogI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGNtZF9ic3AuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDxzM2MyNDAwLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTI5OCw2ICsyOTgsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorY21kX3RibF90IFVfQk9PVF9DTUQoa2JkKSA9IE1LX0NNRF9FTlRSWSgKKyAJImtiZCIsCTEsCTEsCWRvX2tiZCwKKyAJImtiZCAgICAgLSByZWFkIGtleWJvYXJkIHN0YXR1c1xuIiwKKyAJTlVMTAorKTsKKwogI2lmZGVmIENPTkZJR19NT0RFTV9TVVBQT1JUCiBzdGF0aWMgaW50IGtleV9wcmVzc2VkKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9ib2FyZC90cmFiL3UtYm9vdC5sZHMgYi9ib2FyZC90cmFiL3UtYm9vdC5sZHMKaW5kZXggNWVhMTgyOS4uY2NmZmIxOSAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi91LWJvb3QubGRzCisrKyBiL2JvYXJkL3RyYWIvdS1ib290LmxkcwpAQCAtMjcsOSArMjcsOSBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSAgICAgICAgLiA9IDB4MDAwMDAwMDA7CisJLiA9IDB4MDAwMDAwMDA7CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAkudGV4dCAgICAgIDoKIAl7CiAJICBjcHUvYXJtOTIwdC9zdGFydC5vCSgudGV4dCkKQEAgLTQ0LDE5ICs0NCwyNCBAQAogCSAgKigudGV4dCkKIAl9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZGF0YSA6IHsgKiguZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmdvdCA6IHsgKiguZ290KSB9CisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOwogCiAJYXJtYm9vdF9lbmRfZGF0YSA9IC47CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuYnNzIDogeyAqKC5ic3MpIH0KKwkuID0gQUxJR04oNCk7CisJLmJzcyA6IHsgKiguYnNzKSB9CisKIAogCWFybWJvb3RfZW5kID0gLjsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL3V0eDgyNDUvTWFrZWZpbGUgYi9ib2FyZC91dHg4MjQ1L01ha2VmaWxlCmluZGV4IGQwNDBlMDAuLmU2OThhZmMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3V0eDgyNDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvdXR4ODI0NS9NYWtlZmlsZQpAQCAtMzUsNyArMzUsNyBAQAogU09CSlMJPQogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpIGNydiAkQCAkXgorCSQoQVIpIGNydiAkQCAkKE9CSlMpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvYm9hcmQvdXR4ODI0NS91LWJvb3QubGRzIGIvYm9hcmQvdXR4ODI0NS91LWJvb3QubGRzCmluZGV4IGI0NWY4ZmEuLmFlNjI0ODQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3V0eDgyNDUvdS1ib290LmxkcworKysgYi9ib2FyZC91dHg4MjQ1L3UtYm9vdC5sZHMKQEAgLTEwOCw2ICsxMDgsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzMSw0ICsxMzYsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC91dHg4MjQ1L3V0eDgyNDUuYyBiL2JvYXJkL3V0eDgyNDUvdXR4ODI0NS5jCmluZGV4IGE4YzgyZTQuLjM4YzQyN2EgMTAwNjQ0Ci0tLSBhL2JvYXJkL3V0eDgyNDUvdXR4ODI0NS5jCisrKyBiL2JvYXJkL3V0eDgyNDUvdXR4ODI0NS5jCkBAIC0xNjIsNCArMTYyLDMgQEAKIAogCWljYWNoZV9lbmFibGUoKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvdjM3L01ha2VmaWxlIGIvYm9hcmQvdjM3L01ha2VmaWxlCmluZGV4IGJhZWNhYzkuLjdhMTcwNjcgMTAwNjQ0Ci0tLSBhL2JvYXJkL3YzNy9NYWtlZmlsZQorKysgYi9ib2FyZC92MzcvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3YzNy9mbGFzaC5jIGIvYm9hcmQvdjM3L2ZsYXNoLmMKaW5kZXggYjQyZjMzNS4uNmEzMTk3MiAxMDA2NDQKLS0tIGEvYm9hcmQvdjM3L2ZsYXNoLmMKKysrIGIvYm9hcmQvdjM3L2ZsYXNoLmMKQEAgLTU3LDggKzU3LDggQEAKIAl2b2xhdGlsZSBpbW1hcF90ICAgICAqaW1tYXAgID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBtZW1jdGw4eHhfdCAqbWVtY3RsID0gJmltbWFwLT5pbV9tZW1jdGw7CiAJdW5zaWduZWQgbG9uZyBzaXplX2IwLCBzaXplX2IxOwotICAgICAgICBzaG9ydCBtYW51LCBkZXZfaWQ7Ci0gICAgICAgIGludCBpOworCXNob3J0IG1hbnUsIGRldl9pZDsKKwlpbnQgaTsKIAogCS8qIEluaXQ6IG5vIEZMQVNIZXMga25vd24gKi8KIAlmb3IgKGk9MDsgaTxDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2kpIHsKQEAgLTY3LDExICs2NywxMSBAQAogCiAJLyogRG8gc2l6aW5nIHRvIGdldCBmdWxsIGNvcnJlY3QgaW5mbyAqLwogCi0gICAgICAgIGZsYXNoX2dldF9pZF93b3JkKCh2b2lkKilDRkdfRkxBU0hfQkFTRTAsJm1hbnUsJmRldl9pZCk7CisJZmxhc2hfZ2V0X2lkX3dvcmQoKHZvaWQqKUNGR19GTEFTSF9CQVNFMCwmbWFudSwmZGV2X2lkKTsKIAotICAgICAgICBzaXplX2IwID0gZmxhc2hfZ2V0X3NpemUobWFudSwgZGV2X2lkLCAmZmxhc2hfaW5mb1swXSk7CisJc2l6ZV9iMCA9IGZsYXNoX2dldF9zaXplKG1hbnUsIGRldl9pZCwgJmZsYXNoX2luZm9bMF0pOwogCi0gICAgICAgIGZsYXNoX2dldF9vZmZzZXRzIChDRkdfRkxBU0hfQkFTRTAsICZmbGFzaF9pbmZvWzBdLDApOworCWZsYXNoX2dldF9vZmZzZXRzIChDRkdfRkxBU0hfQkFTRTAsICZmbGFzaF9pbmZvWzBdLDApOwogCiAJbWVtY3RsLT5tZW1jX29yMCA9IENGR19PUl9USU1JTkdfRkxBU0ggfCAoMCAtIHNpemVfYjApOwogCkBAIC04MywzMiArODMsMzIgQEAKIAkJICAgICAgJmZsYXNoX2luZm9bMF0pOwogI2VuZGlmCiAKLSAgICAgICAgZmxhc2hfZ2V0X2lkX2xvbmcoKHZvaWQqKUNGR19GTEFTSF9CQVNFMSwmbWFudSwmZGV2X2lkKTsKKwlmbGFzaF9nZXRfaWRfbG9uZygodm9pZCopQ0ZHX0ZMQVNIX0JBU0UxLCZtYW51LCZkZXZfaWQpOwogCi0gICAgICAgIHNpemVfYjEgPSAyICogZmxhc2hfZ2V0X3NpemUobWFudSwgZGV2X2lkLCAmZmxhc2hfaW5mb1sxXSk7CisJc2l6ZV9iMSA9IDIgKiBmbGFzaF9nZXRfc2l6ZShtYW51LCBkZXZfaWQsICZmbGFzaF9pbmZvWzFdKTsKIAotICAgICAgICBmbGFzaF9nZXRfb2Zmc2V0cyhDRkdfRkxBU0hfQkFTRTEsICZmbGFzaF9pbmZvWzFdLDEpOworCWZsYXNoX2dldF9vZmZzZXRzKENGR19GTEFTSF9CQVNFMSwgJmZsYXNoX2luZm9bMV0sMSk7CiAKIAltZW1jdGwtPm1lbWNfb3IxID0gQ0ZHX09SX1RJTUlOR19GTEFTSCB8ICgwIC0gc2l6ZV9iMSk7CiAKIAlmbGFzaF9pbmZvWzBdLnNpemUgPSBzaXplX2IwOwogCWZsYXNoX2luZm9bMV0uc2l6ZSA9IHNpemVfYjE7CiAKLSAgICAgICAgcmV0dXJuIChzaXplX2IwK3NpemVfYjEpOworCXJldHVybiAoc2l6ZV9iMCtzaXplX2IxKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyAodWxvbmcgYmFzZSwgZmxhc2hfaW5mb190ICppbmZvLCBpbnQgdHdvX2NoaXBzKQogewotICAgICAgICBpbnQgaSwgYWRkcl9zaGlmdDsKLSAgICAgICAgdnVfc2hvcnQgKmFkZHIgPSAodnVfc2hvcnQqKWJhc2U7CisJaW50IGksIGFkZHJfc2hpZnQ7CisJdnVfc2hvcnQgKmFkZHIgPSAodnVfc2hvcnQqKWJhc2U7CiAKIAlhZGRyWzB4NTU1XSA9IDB4MDBBQSA7CiAJYWRkclsweEFBQV0gPSAweDAwNTUgOwogCWFkZHJbMHg1NTVdID0gMHgwMDkwIDsKIAotICAgICAgICBhZGRyX3NoaWZ0ID0gKHR3b19jaGlwcyA/IDIgOiAxICk7CisJYWRkcl9zaGlmdCA9ICh0d29fY2hpcHMgPyAyIDogMSApOwogCiAJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCiAJaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfQlRZUEUpIHsKQEAgLTIxMCw3ICsyMTAsNyBAQAogCiBzdGF0aWMgdm9pZCBmbGFzaF9nZXRfaWRfd29yZCggdm9pZCAqcHRyLCAgc2hvcnQgKnB0cl9tYW51Ziwgc2hvcnQgKnB0cl9kZXZfaWQpCiB7Ci0gICAgICAgIHZ1X3Nob3J0ICphZGRyID0gKHZ1X3Nob3J0KilwdHI7CisJdnVfc2hvcnQgKmFkZHIgPSAodnVfc2hvcnQqKXB0cjsKIAogCWFkZHJbMHg1NTVdID0gMHgwMEFBIDsKIAlhZGRyWzB4QUFBXSA9IDB4MDA1NSA7CkBAIC0yMTksMjYgKzIxOSwyNiBAQAogCSpwdHJfbWFudWYgID0gYWRkclswXTsKIAkqcHRyX2Rldl9pZCA9IGFkZHJbMV07CiAKLSAgICAgICAgYWRkclswXSA9IDB4ZjBmMDsgICAgICAgLyogcmV0dXJuIHRvIG5vcm1hbCAqLworCWFkZHJbMF0gPSAweGYwZjA7ICAgICAgIC8qIHJldHVybiB0byBub3JtYWwgKi8KIH0KIAogc3RhdGljIHZvaWQgZmxhc2hfZ2V0X2lkX2xvbmcoIHZvaWQgKnB0ciwgIHNob3J0ICpwdHJfbWFudWYsIHNob3J0ICpwdHJfZGV2X2lkKQogewotICAgICAgICB2dV9zaG9ydCAqYWRkciA9ICh2dV9zaG9ydCopcHRyOwotICAgICAgICB2dV9zaG9ydCAqYWRkcjEsICphZGRyMiwgKmFkZHIzOworCXZ1X3Nob3J0ICphZGRyID0gKHZ1X3Nob3J0KilwdHI7CisJdnVfc2hvcnQgKmFkZHIxLCAqYWRkcjIsICphZGRyMzsKIAotICAgICAgICBhZGRyMSA9ICh2dV9zaG9ydCopICggKChpbnQpcHRyKSArICgweDU1NTU8PDIpICk7Ci0gICAgICAgIGFkZHIyID0gKHZ1X3Nob3J0KikgKCAoKGludClwdHIpICsgKDB4MkFBQTw8MikgKTsKLSAgICAgICAgYWRkcjMgPSAodnVfc2hvcnQqKSAoICgoaW50KXB0cikgKyAoMHg1NTU1PDwyKSApOworCWFkZHIxID0gKHZ1X3Nob3J0KikgKCAoKGludClwdHIpICsgKDB4NTU1NTw8MikgKTsKKwlhZGRyMiA9ICh2dV9zaG9ydCopICggKChpbnQpcHRyKSArICgweDJBQUE8PDIpICk7CisJYWRkcjMgPSAodnVfc2hvcnQqKSAoICgoaW50KXB0cikgKyAoMHg1NTU1PDwyKSApOwogCi0gICAgICAgICphZGRyMSA9IDB4QUFBQTsKLSAgICAgICAgKmFkZHIyID0gMHg1NTU1OwotICAgICAgICAqYWRkcjMgPSAweDkwOTA7CisJKmFkZHIxID0gMHhBQUFBOworCSphZGRyMiA9IDB4NTU1NTsKKwkqYWRkcjMgPSAweDkwOTA7CiAKIAkqcHRyX21hbnVmICA9IGFkZHJbMF07CiAJKnB0cl9kZXZfaWQgPSBhZGRyWzJdOwogCi0gICAgICAgIGFkZHJbMF0gPSAweGYwZjA7ICAgICAgIC8qIHJldHVybiB0byBub3JtYWwgKi8KKwlhZGRyWzBdID0gMHhmMGYwOyAgICAgICAvKiByZXR1cm4gdG8gbm9ybWFsICovCiB9CiAKIHN0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZSAoIHNob3J0IG1hbnUsIHNob3J0IGRldl9pZCwgZmxhc2hfaW5mb190ICppbmZvKQpAQCAtMjk1LDcgKzI5NSw3IEBACiAJY2FzZSAoKHNob3J0KUFNRF9JRF9MVjgwMEIpOgogCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTgwMEI7CiAJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDE5OwotCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMDsJLy8lJSUgU2l6ZSBkb3VibGVkIGJ5IHlvb3RoCisJCWluZm8tPnNpemUgPSAweDAwNDAwMDAwOwkvKiUlJSBTaXplIGRvdWJsZWQgYnkgeW9vdGggKi8KIAkJYnJlYWs7CQkJCS8qID0+IDQgTUIJCSovCiAKIAljYXNlICgoc2hvcnQpQU1EX0lEX0xWMTYwVCk6CkBAIC0zMTUsNyArMzE1LDcgQEAKIAogCX0KIAotICAgICAgICByZXR1cm4oaW5mby0+c2l6ZSk7CisJcmV0dXJuKGluZm8tPnNpemUpOwogfQogCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3YzNy91LWJvb3QubGRzIGIvYm9hcmQvdjM3L3UtYm9vdC5sZHMKaW5kZXggMzAzNDI1YS4uYWIxYmJjOSAxMDA2NDQKLS0tIGEvYm9hcmQvdjM3L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvdjM3L3UtYm9vdC5sZHMKQEAgLTExNCw2ICsxMTQsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEzNiw4ICsxNDEsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2JvYXJkL3YzNy92MzcuYyBiL2JvYXJkL3YzNy92MzcuYwppbmRleCBmNDYzYWY4Li4zYjc4NmVmIDEwMDY0NAotLS0gYS9ib2FyZC92MzcvdjM3LmMKKysrIGIvYm9hcmQvdjM3L3YzNy5jCkBAIC00NCwzMyArNDQsMzMgQEAKIAogY29uc3QgdWludCBzZHJhbV90YWJsZVtdID0KIHsKLSAgICAgICAgLyogIHNpbmdsZSByZWFkLiAob2Zmc2V0IDAgaW4gdXBtIFJBTSkgKi8KLSAgICAgICAgMHgxRjA3RDAwNCwgMHhFRUFFRTAwNCwgMHgxMUFERDAwNCwgMHhFRkJCQTAwMCwKLSAgICAgICAgMHgxRkY3NTQ0NywgMHgxRkY3N0MzNCwgMHhFRkVBQkMzNCwgMHgxRkI1N0MzNSwKKwkvKiAgc2luZ2xlIHJlYWQuIChvZmZzZXQgMCBpbiB1cG0gUkFNKSAqLworCTB4MUYwN0QwMDQsIDB4RUVBRUUwMDQsIDB4MTFBREQwMDQsIDB4RUZCQkEwMDAsCisJMHgxRkY3NTQ0NywgMHgxRkY3N0MzNCwgMHhFRkVBQkMzNCwgMHgxRkI1N0MzNSwKIAotICAgICAgICAvKiBidXJzdCByZWFkLiAoT2Zmc2V0IDggaW4gdXBtIFJBTSkgICAqLwotICAgICAgICAweDFGMDdEMDA0LCAweEVFQUVFMDA0LCAweDAwQURDMDA0LCAweDAwQUZDMDAwLAotICAgICAgICAweDAwQUZDMDAwLCAweDAxQUZDMDAwLCAweDBGQkI4MDAwLCAweDFGRjc1NDQ3LAotICAgICAgICAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAotICAgICAgICAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAorCS8qIGJ1cnN0IHJlYWQuIChPZmZzZXQgOCBpbiB1cG0gUkFNKSAgICovCisJMHgxRjA3RDAwNCwgMHhFRUFFRTAwNCwgMHgwMEFEQzAwNCwgMHgwMEFGQzAwMCwKKwkweDAwQUZDMDAwLCAweDAxQUZDMDAwLCAweDBGQkI4MDAwLCAweDFGRjc1NDQ3LAorCTB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCisJMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKIAotICAgICAgICAvKiBzaW5nbGUgd3JpdGUuIChPZmZzZXQgMHgxOCBpbiB1cG0gUkFNKSAqLwotICAgICAgICAweDFGMjdEMDA0LCAweEVFQUVBMDAwLCAweDAxQjkwMDA0LCAweDFGRjc1NDQ3LAotICAgICAgICAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAorCS8qIHNpbmdsZSB3cml0ZS4gKE9mZnNldCAweDE4IGluIHVwbSBSQU0pICovCisJMHgxRjI3RDAwNCwgMHhFRUFFQTAwMCwgMHgwMUI5MDAwNCwgMHgxRkY3NTQ0NywKKwkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAogCi0gICAgICAgIC8qICBidXJzdCB3cml0ZS4gKE9mZnNldCAweDIwIGluIHVwbSBSQU0pICovCi0gICAgICAgIDB4MUYwN0QwMDQsIDB4RUVBRUEwMDAsIDB4MDBBRDQwMDAsIDB4MDBBRkMwMDAsCi0gICAgICAgIDB4MDBBRkMwMDAsIDB4MDFCQjgwMDQsIDB4MUZGNzU0NDcsIDB4RkZGRkZGRkYsCi0gICAgICAgIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0gICAgICAgIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCisJLyogIGJ1cnN0IHdyaXRlLiAoT2Zmc2V0IDB4MjAgaW4gdXBtIFJBTSkgKi8KKwkweDFGMDdEMDA0LCAweEVFQUVBMDAwLCAweDAwQUQ0MDAwLCAweDAwQUZDMDAwLAorCTB4MDBBRkMwMDAsIDB4MDFCQjgwMDQsIDB4MUZGNzU0NDcsIDB4RkZGRkZGRkYsCisJMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKKwkweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLCAweEZGRkZGRkZGLAogCi0gICAgICAgIC8qIFJlZnJlc2ggY3ljbGUsIG9mZnNldCAweDMwICovCi0gICAgICAgIDB4MUZGNURDODQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsIDB4RkZGRkZDMDQsCi0gICAgICAgIDB4RkZGRkZDODQsIDB4RkZGRkZDMDcsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCi0gICAgICAgIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCisJLyogUmVmcmVzaCBjeWNsZSwgb2Zmc2V0IDB4MzAgKi8KKwkweDFGRjVEQzg0LCAweEZGRkZGQzA0LCAweEZGRkZGQzA0LCAweEZGRkZGQzA0LAorCTB4RkZGRkZDODQsIDB4RkZGRkZDMDcsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCisJMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiwKIAotICAgICAgICAvKiBFeGNlcHRpb24sIDBmZnNldCAweDNDICovCi0gICAgICAgIDB4N0ZGRkZDMDcsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCisJLyogRXhjZXB0aW9uLCAwZmZzZXQgMHgzQyAqLworCTB4N0ZGRkZDMDcsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYsCiB9OwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogICAgIGRlbGF5X2NudCA9IDA7CiAgICAgd2hpbGUoIGRlbGF5X2NudCsrIDwgRFJBTV9ERUxBWSApCi0gICAgICAgIDsKKwk7CiAKICAgICAvKiBSdW4gTVJTIGNvbW1hbmQgaW4gbG9jYXRpb24gNS04IG9mIFVQTUIgKi8KIApAQCAtMTMyLDcgKzEzMiw3IEBACiAKICAgICBkZWxheV9jbnQgPSAwOwogICAgIHdoaWxlKCBkZWxheV9jbnQrKyA8IERSQU1fREVMQVkgKQotICAgICAgICA7CisJOwogCiAjaWZkZWYJQ09ORklHX0NBTl9EUklWRVIKICAgICAvKiBJbml0aWFsaXplIE9SMyAvIEJSMyAqLwpAQCAtMjA3LDEyICsyMDcsMTIgQEAKIAogICAgIHN3aXRjaCggbWVtb3J5ICkKICAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHJldHVybiggMzIqTUJZVEUgKTsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgcmV0dXJuKCA2NCpNQllURSApOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICByZXR1cm4oIDMyKk1CWVRFICk7CisJY2FzZSAyOgorCSAgICByZXR1cm4oIDY0Kk1CWVRFICk7CisJZGVmYXVsdDoKKwkgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiggMTYqTUJZVEUgKTsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL3c3by9jbWRfdnBkLmMgYi9ib2FyZC93N28vY21kX3ZwZC5jCmluZGV4IDMwMjU2OTkuLjI3NjNhNTMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3c3by9jbWRfdnBkLmMKKysrIGIvYm9hcmQvdzdvL2NtZF92cGQuYwpAQCAtNTcsNCArNTcsMTEgQEAKIAlyZXR1cm4gMTsKIH0KIAorY21kX3RibF90IFVfQk9PVF9DTUQodnBkKSA9IE1LX0NNRF9FTlRSWSgKKwkgICJ2cGQiLAkyLAkxLAlkb192cGQsCisJICAidnBkICAgICAtIFJlYWQgVml0YWwgUHJvZHVjdCBEYXRhXG4iLAorCSAgIltkZXZfYWRkcl1cbiIKKwkgICIgICAgICAgIC0gUmVhZCBWUEQgRGF0YSBmcm9tIGRlZmF1bHQgYWRkcmVzcywgb3IgZGV2aWNlIGFkZHJlc3MgJ2Rldl9hZGRyJy5cbiIKKyk7CisKICNlbmRpZiAvKiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9CU1ApICovCmRpZmYgLS1naXQgYS9ib2FyZC93N28vY29uZmlnLm1rIGIvYm9hcmQvdzdvL2NvbmZpZy5tawppbmRleCBjNzMzMjllLi5iYzM0MWNhIDEwMDY0NAotLS0gYS9ib2FyZC93N28vY29uZmlnLm1rCisrKyBiL2JvYXJkL3c3by9jb25maWcubWsKQEAgLTI5LDQgKzI5LDMgQEAKIFRFWFRfQkFTRSA9IDB4RkZGQzAwMDAKIAogI1BMQVRGT1JNX0NQUEZMQUdTICs9IC1JJChUT1BESVIpL2JvYXJkLyQoQk9BUkQpCi0KZGlmZiAtLWdpdCBhL2JvYXJkL3c3by9lcnJvcnMuaCBiL2JvYXJkL3c3by9lcnJvcnMuaAppbmRleCBkMWU1Y2FmLi4wNWI0ZWFlIDEwMDY0NAotLS0gYS9ib2FyZC93N28vZXJyb3JzLmgKKysrIGIvYm9hcmQvdzdvL2Vycm9ycy5oCkBAIC05NSw0ICs5NSwzIEBACiAoMTMpIFNEUkFNIGFkZHJlc3Mgc2hvcnRlZCBvciB1bmNvbm5lY3RlZCwgY2hlY2sgc2RyYW0gY2FwcwogKi8KICNlbmRpZiAvKiBfRVJST1JTX0hfICovCi0KZGlmZiAtLWdpdCBhL2JvYXJkL3c3by9mbGFzaC5jIGIvYm9hcmQvdzdvL2ZsYXNoLmMKaW5kZXggNTY1MWUxYy4uZDZlYTYzNSAxMDA2NDQKLS0tIGEvYm9hcmQvdzdvL2ZsYXNoLmMKKysrIGIvYm9hcmQvdzdvL2ZsYXNoLmMKQEAgLTUwLDIxICs1MCwyMSBAQAogCiAgICAgLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2kpIHsKLSAgICAgICAgZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CiAgICAgfQogCiAgICAgLyogR2V0IFNpemUgb2YgQm9vdCBhbmQgTWFpbiBGbGFzaGVzICovCiAgICAgc2l6ZV9iMCA9IGZsYXNoX2dldF9zaXplKCh2dV9sb25nICopRkxBU0hfQkFTRTBfUFJFTElNLCAmZmxhc2hfaW5mb1swXSk7CiAgICAgaWYgKGZsYXNoX2luZm9bMF0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotICAgICAgICBwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgMCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAotICAgICAgICAgICAgc2l6ZV9iMCwgc2l6ZV9iMDw8MjApOwotICAgICAgICByZXR1cm4gMDsKKwlwcmludGYgKCIjIyBVbmtub3duIEZMQVNIIG9uIEJhbmsgMCAtIFNpemUgPSAweCUwOGx4ID0gJWxkIE1CXG4iLAorCSAgICBzaXplX2IwLCBzaXplX2IwPDwyMCk7CisJcmV0dXJuIDA7CiAgICAgfQogICAgIHNpemVfYjEgPSBmbGFzaF9nZXRfc2l6ZSgodnVfbG9uZyAqKUZMQVNIX0JBU0UxX1BSRUxJTSwgJmZsYXNoX2luZm9bMV0pOwogICAgIGlmIChmbGFzaF9pbmZvWzFdLmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKLSAgICAgICAgcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rIDEgLSBTaXplID0gMHglMDhseCA9ICVsZCBNQlxuIiwKLSAgICAgICAgICAgIHNpemVfYjEsIHNpemVfYjE8PDIwKTsKLSAgICAgICAgcmV0dXJuIDA7CisJcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rIDEgLSBTaXplID0gMHglMDhseCA9ICVsZCBNQlxuIiwKKwkgICAgc2l6ZV9iMSwgc2l6ZV9iMTw8MjApOworCXJldHVybiAwOwogICAgIH0KIAogICAgIC8qIENhbGN1bGF0ZSBiYXNlIGFkZHJlc3NlcyAqLwpAQCAtODMsMjEgKzgzLDIxIEBACiAKICAgICAvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLwogICAgICh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfYjAgKyBzaXplX2IwIC0gbW9uaXRvcl9mbGFzaF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2IwICsgc2l6ZV9iMCAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAmZmxhc2hfaW5mb1swXSk7CisJCQliYXNlX2IwICsgc2l6ZV9iMCAtIG1vbml0b3JfZmxhc2hfbGVuLAorCQkJYmFzZV9iMCArIHNpemVfYjAgLSAxLAorCQkJJmZsYXNoX2luZm9bMF0pOwogCiAgICAgLyogUHJvdGVjdCB0aGUgRlBHQSBpbWFnZSAqLwogICAgICh2b2lkKWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0JBU0UxX1BSRUxJTSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0JBU0UxX1BSRUxJTSArIENGR19GUEdBX0lNQUdFX0xFTiAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAmZmxhc2hfaW5mb1sxXSk7CisJCQlGTEFTSF9CQVNFMV9QUkVMSU0sCisJCQlGTEFTSF9CQVNFMV9QUkVMSU0gKyBDRkdfRlBHQV9JTUFHRV9MRU4gLSAxLAorCQkJJmZsYXNoX2luZm9bMV0pOwogCiAgICAgLyogUHJvdGVjdCB0aGUgZGVmYXVsdCBib290IGltYWdlICovCiAgICAgKHZvaWQpZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAotICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQkFTRTFfUFJFTElNICsgQ0ZHX0ZQR0FfSU1BR0VfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfQkFTRTFfUFJFTElNICsgQ0ZHX0ZQR0FfSU1BR0VfTEVOICsgMHg2MDAwMDAgLSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgJmZsYXNoX2luZm9bMV0pOworCQkJRkxBU0hfQkFTRTFfUFJFTElNICsgQ0ZHX0ZQR0FfSU1BR0VfTEVOLAorCQkJRkxBU0hfQkFTRTFfUFJFTElNICsgQ0ZHX0ZQR0FfSU1BR0VfTEVOICsgMHg2MDAwMDAgLSAxLAorCQkJJmZsYXNoX2luZm9bMV0pOwogCiAgICAgLyogU2V0dXAgb2Zmc2V0cyBmb3IgTWFpbiBGbGFzaCAqLwogICAgIGZsYXNoX2dldF9vZmZzZXRzIChGTEFTSF9CQVNFMV9QUkVMSU0sICZmbGFzaF9pbmZvWzFdKTsKQEAgLTExMyw4ICsxMTMsOCBAQAogCiAgICAgLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlIC0gRk9SIEJPT1QgUk9NIE9OTFkhISEgKi8KICAgICBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spICA9PSBGTEFTSF9BTTA0MCkgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCi0gICAgICAgICAgICBpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoaSAqIDB4MDAwMTAwMDApOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKKwkgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKTsKICAgICB9CiB9IC8qIGVuZCBmbGFzaF9nZXRfb2Zmc2V0cygpICovCiAKQEAgLTEyOSw3NSArMTI5LDc1IEBACiAgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqZmxhc2g7CiAKICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewotICAgICAgICBwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7Ci0gICAgICAgIHJldHVybjsKKwlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CisJcmV0dXJuOwogICAgIH0KIAogICAgIHN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgewotICAgICAgICBjYXNlIEZMQVNIX01BTl9BTUQ6ICAgICBwcmludGYgKCIxIHggQU1EICIpOyAgICBicmVhazsKKwljYXNlIEZMQVNIX01BTl9BTUQ6ICAgICBwcmludGYgKCIxIHggQU1EICIpOyAgICBicmVhazsKIAljYXNlIEZMQVNIX01BTl9TVE06CXByaW50ZiAoIjEgeCBTVE0gIik7CWJyZWFrOwotICAgICAgICBjYXNlIEZMQVNIX01BTl9JTlRFTDogICBwcmludGYgKCIyIHggSW50ZWwgIik7ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CisJY2FzZSBGTEFTSF9NQU5fSU5URUw6ICAgcHJpbnRmICgiMiB4IEludGVsICIpOyAgYnJlYWs7CisJZGVmYXVsdDogICAgICAgICAgICAgICAgcHJpbnRmICgiVW5rbm93biBWZW5kb3IgIik7CiAgICAgfQogCiAgICAgc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7Ci0gICAgICAgIGNhc2UgRkxBU0hfQU0wNDA6CisJY2FzZSBGTEFTSF9BTTA0MDoKIAkgICAgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fQU1EKQotICAgICAgICAgICAgCXByaW50ZiAoIkFNMjlMVjA0MCAoNDA5NiBLYml0LCB1bmlmb3JtIHNlY3RvciBzaXplKVxuIik7CisJCXByaW50ZiAoIkFNMjlMVjA0MCAoNDA5NiBLYml0LCB1bmlmb3JtIHNlY3RvciBzaXplKVxuIik7CiAJICAgIGVsc2UgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1RNKQotICAgICAgICAgICAgCXByaW50ZiAoIk0yOVcwNDBCICg0MDk2IEtiaXQsIHVuaWZvcm0gYmxvY2sgc2l6ZSlcbiIpOworCQlwcmludGYgKCJNMjlXMDQwQiAoNDA5NiBLYml0LCB1bmlmb3JtIGJsb2NrIHNpemUpXG4iKTsKIAkgICAgZWxzZQotICAgICAgICAgICAgCXByaW50ZiAoIlVOS05PV04gMjl4MDQweCAoNDA5NiBLYml0LCB1bmlmb3JtIHNlY3RvciBzaXplKVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGTEFTSF8yOEYzMjBKM0E6Ci0gICAgICAgICAgICBwcmludGYgKCIyOEYzMjBKM0EgKDMyIE1iaXQgPSAxMjhLIHggMzIpXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZMQVNIXzI4RjY0MEozQToKLSAgICAgICAgICAgIHByaW50ZiAoIjI4RjY0MEozQSAoNjQgTWJpdCA9IDEyOEsgeCA2NClcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGMTI4SjNBOgotICAgICAgICAgICAgcHJpbnRmICgiMjhGMTI4SjNBICgxMjggTWJpdCA9IDEyOEsgeCAxMjgpXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcHJpbnRmICgiVW5rbm93biBDaGlwIFR5cGVcbiIpOworCQlwcmludGYgKCJVTktOT1dOIDI5eDA0MHggKDQwOTYgS2JpdCwgdW5pZm9ybSBzZWN0b3Igc2l6ZSlcbiIpOworCSAgICBicmVhazsKKwljYXNlIEZMQVNIXzI4RjMyMEozQToKKwkgICAgcHJpbnRmICgiMjhGMzIwSjNBICgzMiBNYml0ID0gMTI4SyB4IDMyKVxuIik7CisJICAgIGJyZWFrOworCWNhc2UgRkxBU0hfMjhGNjQwSjNBOgorCSAgICBwcmludGYgKCIyOEY2NDBKM0EgKDY0IE1iaXQgPSAxMjhLIHggNjQpXG4iKTsKKwkgICAgYnJlYWs7CisJY2FzZSBGTEFTSF8yOEYxMjhKM0E6CisJICAgIHByaW50ZiAoIjI4RjEyOEozQSAoMTI4IE1iaXQgPSAxMjhLIHggMTI4KVxuIik7CisJICAgIGJyZWFrOworCWRlZmF1bHQ6CisJICAgIHByaW50ZiAoIlVua25vd24gQ2hpcCBUeXBlXG4iKTsKICAgICB9CiAKICAgICBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TVE0pIHsKLSAgICAJcHJpbnRmICgiICBTaXplOiAlbGQgS0IgaW4gJWQgQmxvY2tzXG4iLAotICAgICAgICAJaW5mby0+c2l6ZSA+PiAxMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKKwlwcmludGYgKCIgIFNpemU6ICVsZCBLQiBpbiAlZCBCbG9ja3NcbiIsCisJCWluZm8tPnNpemUgPj4gMTAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CiAgICAgfSBlbHNlIHsKLSAgICAJcHJpbnRmICgiICBTaXplOiAlbGQgS0IgaW4gJWQgU2VjdG9yc1xuIiwKLSAgICAgICAgCWluZm8tPnNpemUgPj4gMTAsIGluZm8tPnNlY3Rvcl9jb3VudCk7CisJcHJpbnRmICgiICBTaXplOiAlbGQgS0IgaW4gJWQgU2VjdG9yc1xuIiwKKwkJaW5mby0+c2l6ZSA+PiAxMCwgaW5mby0+c2VjdG9yX2NvdW50KTsKICAgICB9CiAKICAgICBwcmludGYgKCIgIFNlY3RvciBTdGFydCBBZGRyZXNzZXM6Iik7CiAgICAgZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogQ2hlY2sgaWYgd2hvbGUgc2VjdG9yIGlzIGVyYXNlZAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGkgIT0gKGluZm8tPnNlY3Rvcl9jb3VudC0xKSkKLSAgICAgICAgICAgIHNpemUgPSBpbmZvLT5zdGFydFtpKzFdIC0gaW5mby0+c3RhcnRbaV07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpemUgPSBpbmZvLT5zdGFydFswXSArIGluZm8tPnNpemUgLSBpbmZvLT5zdGFydFtpXTsKLSAgICAgICAgZXJhc2VkID0gMTsKLSAgICAgICAgZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0W2ldOwotICAgICAgICBzaXplID0gc2l6ZSA+PiAyOyAgICAgICAgLyogZGl2aWRlIGJ5IDQgZm9yIGxvbmd3b3JkIGFjY2VzcyAqLwotICAgICAgICBmb3IgKGs9MDsgazxzaXplOyBrKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgqZmxhc2grKyAhPSAweGZmZmZmZmZmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVyYXNlZCA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKgorCSAqIENoZWNrIGlmIHdob2xlIHNlY3RvciBpcyBlcmFzZWQKKwkgKi8KKwlpZiAoaSAhPSAoaW5mby0+c2VjdG9yX2NvdW50LTEpKQorCSAgICBzaXplID0gaW5mby0+c3RhcnRbaSsxXSAtIGluZm8tPnN0YXJ0W2ldOworCWVsc2UKKwkgICAgc2l6ZSA9IGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSAtIGluZm8tPnN0YXJ0W2ldOworCWVyYXNlZCA9IDE7CisJZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0W2ldOworCXNpemUgPSBzaXplID4+IDI7ICAgICAgICAvKiBkaXZpZGUgYnkgNCBmb3IgbG9uZ3dvcmQgYWNjZXNzICovCisJZm9yIChrPTA7IGs8c2l6ZTsgaysrKQorCXsKKwkgICAgaWYgKCpmbGFzaCsrICE9IDB4ZmZmZmZmZmYpCisJICAgIHsKKwkJZXJhc2VkID0gMDsKKwkJYnJlYWs7CisJICAgIH0KKwl9CiAKLSAgICAgICAgaWYgKChpICUgNSkgPT0gMCkKLSAgICAgICAgICAgIHByaW50ZiAoIlxuICAgIik7Ci0gICAgICAgIHByaW50ZiAoIiAlMDhsWCVzJXMiLAotICAgICAgICAgICAgaW5mby0+c3RhcnRbaV0sCi0gICAgICAgICAgICBlcmFzZWQgPyAiIEUiIDogIiAgIiwKLSAgICAgICAgICAgIGluZm8tPnByb3RlY3RbaV0gPyAiUk8gIiA6ICIgICAiCi0gICAgICAgICk7CisJaWYgKChpICUgNSkgPT0gMCkKKwkgICAgcHJpbnRmICgiXG4gICAiKTsKKwlwcmludGYgKCIgJTA4bFglcyVzIiwKKwkgICAgaW5mby0+c3RhcnRbaV0sCisJICAgIGVyYXNlZCA/ICIgRSIgOiAiICAiLAorCSAgICBpbmZvLT5wcm90ZWN0W2ldID8gIlJPICIgOiAiICAgIgorCSk7CiAgICAgfQogICAgIHByaW50ZiAoIlxuIik7CiB9IC8qIGVuZCBmbGFzaF9wcmludF9pbmZvKCkgKi8KQEAgLTIxNywxMzAgKzIxNywxMzAgQEAKIAogICAgIC8qIFRlc3QgZm9yIEJvb3QgRmxhc2ggKi8KICAgICBpZiAoYmFzZSA9PSBGTEFTSF9CQVNFMF9QUkVMSU0pIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciB2YWx1ZTsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqIGFkZHIyID0gKHVuc2lnbmVkIGNoYXIgKilhZGRyOworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqIGFkZHIyID0gKHVuc2lnbmVkIGNoYXIgKilhZGRyOwogCi0gICAgICAgIC8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCi0gICAgICAgICooYWRkcjIgKyAweDU1NSkgPSAweGFhOwotICAgICAgICAqKGFkZHIyICsgMHgyYWEpID0gMHg1NTsKLSAgICAgICAgKihhZGRyMiArIDB4NTU1KSA9IDB4OTA7CisJLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KKwkqKGFkZHIyICsgMHg1NTUpID0gMHhhYTsKKwkqKGFkZHIyICsgMHgyYWEpID0gMHg1NTsKKwkqKGFkZHIyICsgMHg1NTUpID0gMHg5MDsKIAotICAgICAgICAvKiBNYW51ZmFjdHVyZSBJRCAqLwotICAgICAgICB2YWx1ZSA9ICphZGRyMjsKLSAgICAgICAgc3dpdGNoICh2YWx1ZSkgewotICAgICAgICAgICAgY2FzZSAodW5zaWduZWQgY2hhcilBTURfTUFOVUZBQ1Q6Ci0gICAgICAgICAgICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EOwotICAgICAgICAgICAgICAgIGJyZWFrOworCS8qIE1hbnVmYWN0dXJlIElEICovCisJdmFsdWUgPSAqYWRkcjI7CisJc3dpdGNoICh2YWx1ZSkgeworCSAgICBjYXNlICh1bnNpZ25lZCBjaGFyKUFNRF9NQU5VRkFDVDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fQU1EOworCQlicmVhazsKIAkgICAgY2FzZSAodW5zaWduZWQgY2hhcilTVE1fTUFOVUZBQ1Q6CiAJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX1NUTTsKIAkJYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICphZGRyMiA9IDB4ZjA7ICAgICAgICAgICAgICAvKiBubyBvciB1bmtub3duIGZsYXNoICAqLwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisJICAgIGRlZmF1bHQ6CisJCSphZGRyMiA9IDB4ZjA7ICAgICAgICAgICAgICAvKiBubyBvciB1bmtub3duIGZsYXNoICAqLworCQlyZXR1cm4gMDsKKwl9CiAKLSAgICAgICAgLyogRGV2aWNlIElEICovCi0gICAgICAgIHZhbHVlID0gKihhZGRyMiArIDEpOwotICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7Ci0gICAgICAgICAgICBjYXNlICh1bnNpZ25lZCBjaGFyKUFNRF9JRF9MVjA0MEI6CisJLyogRGV2aWNlIElEICovCisJdmFsdWUgPSAqKGFkZHIyICsgMSk7CisJc3dpdGNoICh2YWx1ZSkgeworCSAgICBjYXNlICh1bnNpZ25lZCBjaGFyKUFNRF9JRF9MVjA0MEI6CiAJICAgIGNhc2UgKHVuc2lnbmVkIGNoYXIpU1RNX0lEXzI5VzA0MEI6Ci0gICAgICAgICAgICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfQU0wNDA7Ci0gICAgICAgICAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gODsKLSAgICAgICAgICAgICAgICBpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgIC8qID0+IDUxMktiICovCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICphZGRyMiA9IDB4ZjA7ICAgICAgICAgICAgICAgLyogPT4gbm8gb3IgdW5rbm93biBmbGFzaCAqLwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMDQwOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSA4OworCQlpbmZvLT5zaXplID0gMHgwMDA4MDAwMDsKKwkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAvKiA9PiA1MTJLYiAqLworCSAgICBkZWZhdWx0OgorCQkqYWRkcjIgPSAweGYwOyAgICAgICAgICAgICAgIC8qID0+IG5vIG9yIHVua25vd24gZmxhc2ggKi8KKwkJcmV0dXJuIDA7CisJfQogICAgIH0KICAgICBlbHNlIHsgLyogTUFJTiBGbGFzaCAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcjIgPSAodW5zaWduZWQgbG9uZyAqKWFkZHI7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRkcjIgPSAodW5zaWduZWQgbG9uZyAqKWFkZHI7CiAKLSAgICAgICAgLyogV3JpdGUgYXV0byBzZWxlY3QgY29tbWFuZDogcmVhZCBNYW51ZmFjdHVyZXIgSUQgKi8KLSAgICAgICAgKmFkZHIyID0gMHg5MDkwOTA5MDsKKwkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLworCSphZGRyMiA9IDB4OTA5MDkwOTA7CiAKLSAgICAgICAgLyogTWFudWZhY3R1cmUgSUQgKi8KLSAgICAgICAgdmFsdWUgPSAqYWRkcjI7Ci0gICAgICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICAgICAgICAgIGNhc2UgKHVuc2lnbmVkIGxvbmcpSU5URUxfTUFOVUZBQ1Q6Ci0gICAgICAgICAgICAgICAgaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fSU5URUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICphZGRyMiA9IDB4ZmY7ICAgICAgICAgICAgICAvKiBubyBvciB1bmtub3duIGZsYXNoICAqLwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisJLyogTWFudWZhY3R1cmUgSUQgKi8KKwl2YWx1ZSA9ICphZGRyMjsKKwlzd2l0Y2ggKHZhbHVlKSB7CisJICAgIGNhc2UgKHVuc2lnbmVkIGxvbmcpSU5URUxfTUFOVUZBQ1Q6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0lOVEVMOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJKmFkZHIyID0gMHhmZjsgICAgICAgICAgICAgIC8qIG5vIG9yIHVua25vd24gZmxhc2ggICovCisJCXJldHVybiAwOworCX0KIAotICAgICAgICAvKiBEZXZpY2UgSUQgLSBUaGlzIHNoaXQgaXMgaW50ZXJsZWF2ZWQuLi4gKi8KLSAgICAgICAgdmFsdWUgPSAqKGFkZHIyICsgMSk7Ci0gICAgICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICAgICAgICAgIGNhc2UgKHVuc2lnbmVkIGxvbmcpSU5URUxfSURfMjhGMzIwSjNBOgotICAgICAgICAgICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjMyMEozQTsKLSAgICAgICAgICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQgPSAzMjsKLSAgICAgICAgICAgICAgICBpbmZvLT5zaXplID0gMHgwMDQwMDAwMCAqIDI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAvKiA9PiAyIFggNCBNQiAqLwotICAgICAgICAgICAgY2FzZSAodW5zaWduZWQgbG9uZylJTlRFTF9JRF8yOEY2NDBKM0E6Ci0gICAgICAgICAgICAgICAgaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGNjQwSjNBOwotICAgICAgICAgICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IDY0OwotICAgICAgICAgICAgICAgIGluZm8tPnNpemUgPSAweDAwODAwMDAwICogMjsKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgIC8qID0+IDIgWCA4IE1CICovCi0gICAgICAgICAgICBjYXNlICh1bnNpZ25lZCBsb25nKUlOVEVMX0lEXzI4RjEyOEozQToKLSAgICAgICAgICAgICAgICBpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYxMjhKM0E7Ci0gICAgICAgICAgICAgICAgaW5mby0+c2VjdG9yX2NvdW50ID0gMTI4OwotICAgICAgICAgICAgICAgIGluZm8tPnNpemUgPSAweDAxMDAwMDAwICogMjsKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgIC8qID0+IDIgWCAxNiBNQiAqLwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAqYWRkcjIgPSAweGZmOyAgICAgICAgICAgICAgIC8qID0+IG5vIG9yIHVua25vd24gZmxhc2ggKi8KLSAgICAgICAgfQorCS8qIERldmljZSBJRCAtIFRoaXMgc2hpdCBpcyBpbnRlcmxlYXZlZC4uLiAqLworCXZhbHVlID0gKihhZGRyMiArIDEpOworCXN3aXRjaCAodmFsdWUpIHsKKwkgICAgY2FzZSAodW5zaWduZWQgbG9uZylJTlRFTF9JRF8yOEYzMjBKM0E6CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjMyMEozQTsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMzI7CisJCWluZm8tPnNpemUgPSAweDAwNDAwMDAwICogMjsKKwkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAvKiA9PiAyIFggNCBNQiAqLworCSAgICBjYXNlICh1bnNpZ25lZCBsb25nKUlOVEVMX0lEXzI4RjY0MEozQToKKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGNjQwSjNBOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSA2NDsKKwkJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDAgKiAyOworCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgIC8qID0+IDIgWCA4IE1CICovCisJICAgIGNhc2UgKHVuc2lnbmVkIGxvbmcpSU5URUxfSURfMjhGMTI4SjNBOgorCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYxMjhKM0E7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDEyODsKKwkJaW5mby0+c2l6ZSA9IDB4MDEwMDAwMDAgKiAyOworCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgIC8qID0+IDIgWCAxNiBNQiAqLworCSAgICBkZWZhdWx0OgorCQkqYWRkcjIgPSAweGZmOyAgICAgICAgICAgICAgIC8qID0+IG5vIG9yIHVua25vd24gZmxhc2ggKi8KKwl9CiAgICAgfQogCiAgICAgLyogTWFrZSBzdXJlIHdlIGRvbid0IGV4Y2VlZCBDRkdfTUFYX0ZMQVNIX1NFQ1QgKi8KICAgICBpZiAoaW5mby0+c2VjdG9yX2NvdW50ID4gQ0ZHX01BWF9GTEFTSF9TRUNUKSB7Ci0gICAgICAgIHByaW50ZiAoIioqIEVSUk9SOiBzZWN0b3IgY291bnQgJWQgPiBtYXggKCVkKSAqKlxuIiwKLSAgICAgICAgICAgICAgICBpbmZvLT5zZWN0b3JfY291bnQsIENGR19NQVhfRkxBU0hfU0VDVCk7Ci0gICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudCA9IENGR19NQVhfRkxBU0hfU0VDVDsKKwlwcmludGYgKCIqKiBFUlJPUjogc2VjdG9yIGNvdW50ICVkID4gbWF4ICglZCkgKipcbiIsCisJCWluZm8tPnNlY3Rvcl9jb3VudCwgQ0ZHX01BWF9GTEFTSF9TRUNUKTsKKwlpbmZvLT5zZWN0b3JfY291bnQgPSBDRkdfTUFYX0ZMQVNIX1NFQ1Q7CiAgICAgfQogCiAgICAgLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCiAgICAgc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7Ci0gICAgICAgIGNhc2UgRkxBU0hfQU0wNDA6Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZMQVNIXzI4RjMyMEozQToKLSAgICAgICAgY2FzZSBGTEFTSF8yOEY2NDBKM0E6Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGMTI4SjNBOgotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIGluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAyMDAwMCAqIDIpOyAvKiAyIEJhbmtzICovCi0gICAgICAgICAgICBicmVhazsKKwljYXNlIEZMQVNIX0FNMDQwOgorCSAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCisJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCk7CisJICAgIGJyZWFrOworCWNhc2UgRkxBU0hfMjhGMzIwSjNBOgorCWNhc2UgRkxBU0hfMjhGNjQwSjNBOgorCWNhc2UgRkxBU0hfMjhGMTI4SjNBOgorCSAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCisJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAyMDAwMCAqIDIpOyAvKiAyIEJhbmtzICovCisJICAgIGJyZWFrOwogICAgIH0KIAogICAgIC8qIFRlc3QgZm9yIEJvb3QgRmxhc2ggKi8KICAgICBpZiAoYmFzZSA9PSBGTEFTSF9CQVNFMF9QUkVMSU0pIHsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkcjI7Ci0gICAgICAgIC8qIGNoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLSAgICAgICAgICAgIC8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBWCAuLiBBMCkgPSAweDAyICovCi0gICAgICAgICAgICAvKiBEMCA9IDEgaWYgcHJvdGVjdGVkICovCi0gICAgICAgICAgICBhZGRyMiA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGluZm8tPnN0YXJ0W2ldKTsKLSAgICAgICAgICAgIGluZm8tPnByb3RlY3RbaV0gPSAqKGFkZHIyICsgMikgJiAxOwotICAgICAgICB9CisJdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYWRkcjI7CisJLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCisJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJICAgIC8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBWCAuLiBBMCkgPSAweDAyICovCisJICAgIC8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KKwkgICAgYWRkcjIgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShpbmZvLT5zdGFydFtpXSk7CisJICAgIGluZm8tPnByb3RlY3RbaV0gPSAqKGFkZHIyICsgMikgJiAxOworCX0KIAotICAgICAgICAvKiBSZXN0b3JlIHJlYWQgbW9kZSAqLwotICAgICAgICAqKHVuc2lnbmVkIGNoYXIgKiliYXNlID0gMHhGMDsgICAgICAgLyogUmVzZXQgTk9STUFMIEZsYXNoICovCisJLyogUmVzdG9yZSByZWFkIG1vZGUgKi8KKwkqKHVuc2lnbmVkIGNoYXIgKiliYXNlID0gMHhGMDsgICAgICAgLyogUmVzZXQgTk9STUFMIEZsYXNoICovCiAgICAgfQogICAgIGVsc2UgeyAvKiBNYWluIEZsYXNoICovCi0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIyOwotICAgICAgICAvKiBjaGVjayBmb3IgcHJvdGVjdGVkIHNlY3RvcnMgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAvKiByZWFkIHNlY3RvciBwcm90ZWN0aW9uIGF0IHNlY3RvciBhZGRyZXNzLCAoQVggLi4gQTApID0gMHgwMiAqLwotICAgICAgICAgICAgLyogRDAgPSAxIGlmIHByb3RlY3RlZCAqLwotICAgICAgICAgICAgYWRkcjIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShpbmZvLT5zdGFydFtpXSk7Ci0gICAgICAgICAgICBpbmZvLT5wcm90ZWN0W2ldID0gKihhZGRyMiArIDIpICYgMHgxOwotICAgICAgICB9CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcjI7CisJLyogY2hlY2sgZm9yIHByb3RlY3RlZCBzZWN0b3JzICovCisJZm9yIChpID0gMDsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJICAgIC8qIHJlYWQgc2VjdG9yIHByb3RlY3Rpb24gYXQgc2VjdG9yIGFkZHJlc3MsIChBWCAuLiBBMCkgPSAweDAyICovCisJICAgIC8qIEQwID0gMSBpZiBwcm90ZWN0ZWQgKi8KKwkgICAgYWRkcjIgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKShpbmZvLT5zdGFydFtpXSk7CisJICAgIGluZm8tPnByb3RlY3RbaV0gPSAqKGFkZHIyICsgMikgJiAweDE7CisJfQogCi0gICAgICAgIC8qIFJlc3RvcmUgcmVhZCBtb2RlICovCi0gICAgICAgICoodW5zaWduZWQgbG9uZyAqKWJhc2UgPSAweEZGRkZGRkZGOyAvKiBSZXNldCAgRmxhc2ggKi8KKwkvKiBSZXN0b3JlIHJlYWQgbW9kZSAqLworCSoodW5zaWduZWQgbG9uZyAqKWJhc2UgPSAweEZGRkZGRkZGOyAvKiBSZXNldCAgRmxhc2ggKi8KICAgICB9CiAKICAgICByZXR1cm4gKGluZm8tPnNpemUpOwpAQCAtMzU3LDIwICszNTcsMjAgQEAKIAogICAgIC8qIExvb3AgWCB0aW1lcyAqLwogICAgIGZvciAoaSA9IDE7IGkgPD0gKDEwMCAqIHRvdXQpOyBpKyspIHsgICAgLyogV2FpdCB1cCB0byB0b3V0IG1zICovCi0gICAgICAgIHVkZWxheSgxMCk7Ci0gICAgICAgIC8qIFBhdXNlIDEwIHVzICovCisJdWRlbGF5KDEwKTsKKwkvKiBQYXVzZSAxMCB1cyAqLwogCi0gICAgICAgIC8qIENoZWNrIGZvciBjb21wbGV0aW9uICovCi0gICAgICAgIGlmICgodmFkZHJbMF0gJiAweDgwKSA9PSAoY21wX3ZhbCAmIDB4ODApKSB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorCS8qIENoZWNrIGZvciBjb21wbGV0aW9uICovCisJaWYgKCh2YWRkclswXSAmIDB4ODApID09IChjbXBfdmFsICYgMHg4MCkpIHsKKwkgICAgcmV0dXJuIDA7CisJfQogCi0gICAgICAgIC8qIEtFRVAgVEhFIExVU0VSIEhBUFBZIC0gUHJpbnQgYSBkb3QgZXZlcnkgMS4xIHNlY29uZHMgKi8KLSAgICAgICAgaWYgKCEoaSAlIDExMDAwMCkpCi0gICAgICAgICAgICBwdXRjKCcuJyk7CisJLyogS0VFUCBUSEUgTFVTRVIgSEFQUFkgLSBQcmludCBhIGRvdCBldmVyeSAxLjEgc2Vjb25kcyAqLworCWlmICghKGkgJSAxMTAwMDApKQorCSAgICBwdXRjKCcuJyk7CiAKLSAgICAgICAgLyogS2ljayB0aGUgZG9nIGlmIG5lZWRlZCAqLwotICAgICAgICBXQVRDSERPR19SRVNFVCgpOworCS8qIEtpY2sgdGhlIGRvZyBpZiBuZWVkZWQgKi8KKwlXQVRDSERPR19SRVNFVCgpOwogICAgIH0KIAogICAgIHJldHVybiAxOwpAQCAtMzg4LDcwICszODgsNzAgQEAKIAogICAgIC8qIFZhbGlkYXRlIGFyZ3VtZW50cyAqLwogICAgIGlmICgoc19maXJzdCA8IDApIHx8IChzX2ZpcnN0ID4gc19sYXN0KSkgewotICAgICAgICBpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikKLSAgICAgICAgICAgIHByaW50ZiAoIi0gbWlzc2luZ1xuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7Ci0gICAgICAgIHJldHVybiAxOworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKQorCSAgICBwcmludGYgKCItIG1pc3NpbmdcbiIpOworCWVsc2UKKwkgICAgcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKKwlyZXR1cm4gMTsKICAgICB9CiAKICAgICAvKiBDaGVjayBmb3IgS05PV04gZmxhc2ggdHlwZSAqLwogICAgIGlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7Ci0gICAgICAgIHByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAtIGFib3J0ZWRcbiIpOwotICAgICAgICByZXR1cm4gMTsKKwlwcmludGYgKCJDYW4ndCBlcmFzZSB1bmtub3duIGZsYXNoIHR5cGUgLSBhYm9ydGVkXG4iKTsKKwlyZXR1cm4gMTsKICAgICB9CiAKICAgICAvKiBDaGVjayBmb3IgcHJvdGVjdGVkIHNlY3RvcnMgKi8KICAgICBwcm90ID0gMDsKICAgICBmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgKytzZWN0KSB7Ci0gICAgICAgIGlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKQotICAgICAgICAgICAgcHJvdCsrOworCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdKQorCSAgICBwcm90Kys7CiAgICAgfQogICAgIGlmIChwcm90KQotICAgICAgICBwcmludGYgKCItIFdhcm5pbmc6ICVkIHByb3RlY3RlZCBzZWN0b3JzIHdpbGwgbm90IGJlIGVyYXNlZCFcbiIsIHByb3QpOworCXByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwgcHJvdCk7CiAgICAgZWxzZQotICAgICAgICBwcmludGYgKCJcbiIpOworCXByaW50ZiAoIlxuIik7CiAKICAgICAvKiBTdGFydCBlcmFzZSBvbiB1bnByb3RlY3RlZCBzZWN0b3JzICovCiAgICAgZm9yIChzZWN0ID0gc19maXJzdDsgc2VjdCA8PSBzX2xhc3Q7IHNlY3QrKykgewotICAgICAgICBpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7ICAgICAgLyogbm90IHByb3RlY3RlZCAqLwotICAgICAgICAgICAgc2VjdG9yX2FkZHIgPSAodWNoYXIgKikoaW5mby0+c3RhcnRbc2VjdF0pOworCWlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsgICAgICAvKiBub3QgcHJvdGVjdGVkICovCisJICAgIHNlY3Rvcl9hZGRyID0gKHVjaGFyICopKGluZm8tPnN0YXJ0W3NlY3RdKTsKIAotICAgIAkJaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1RNKQorCQlpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TVE0pCiAJCSAgICBwcmludGYoIkVyYXNpbmcgYmxvY2sgJXBcbiIsIHNlY3Rvcl9hZGRyKTsKIAkJZWxzZQogCQkgICAgcHJpbnRmKCJFcmFzaW5nIHNlY3RvciAlcFxuIiwgc2VjdG9yX2FkZHIpOwogCi0gICAgICAgICAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgRmxhc2ggdG8gdGltZW91dCAqLwotICAgICAgICAgICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCSAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgRmxhc2ggdG8gdGltZW91dCAqLworCSAgICBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKLSAgICAgICAgICAgICooYWRkciArIDB4NTU1KSA9ICh1Y2hhcikweEFBOwotICAgICAgICAgICAgKihhZGRyICsgMHgyYWEpID0gKHVjaGFyKTB4NTU7Ci0gICAgICAgICAgICAqKGFkZHIgKyAweDU1NSkgPSAodWNoYXIpMHg4MDsKLSAgICAgICAgICAgICooYWRkciArIDB4NTU1KSA9ICh1Y2hhcikweEFBOwotICAgICAgICAgICAgKihhZGRyICsgMHgyYWEpID0gKHVjaGFyKTB4NTU7Ci0gICAgICAgICAgICAqc2VjdG9yX2FkZHIgPSAodWNoYXIpMHgzMDsgICAgICAvKiBzZWN0b3IgZXJhc2UgKi8KKwkgICAgKihhZGRyICsgMHg1NTUpID0gKHVjaGFyKTB4QUE7CisJICAgICooYWRkciArIDB4MmFhKSA9ICh1Y2hhcikweDU1OworCSAgICAqKGFkZHIgKyAweDU1NSkgPSAodWNoYXIpMHg4MDsKKwkgICAgKihhZGRyICsgMHg1NTUpID0gKHVjaGFyKTB4QUE7CisJICAgICooYWRkciArIDB4MmFhKSA9ICh1Y2hhcikweDU1OworCSAgICAqc2VjdG9yX2FkZHIgPSAodWNoYXIpMHgzMDsgICAgICAvKiBzZWN0b3IgZXJhc2UgKi8KIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFdhaXQgZm9yIGVhY2ggc2VjdG9yIHRvIGNvbXBsZXRlLCBpdCdzIG1vcmUKLSAgICAgICAgICAgICAqIHJlbGlhYmxlLiAgQWNjb3JkaW5nIHRvIEFNRCBTcGVjLCB5b3UgbXVzdAotICAgICAgICAgICAgICogaXNzdWUgYWxsIGVyYXNlIGNvbW1hbmRzIHdpdGhpbiBhIHNwZWNpZmllZAotICAgICAgICAgICAgICogdGltZW91dC4gIFRoaXMgaGFzIGJlZW4gc2VlbiB0byBmYWlsLCBlc3BlY2lhbGx5Ci0gICAgICAgICAgICAgKiBpZiBwcmludGYoKXMgYXJlIGluY2x1ZGVkIChmb3IgZGVidWcpISEKLSAgICAgICAgICAgICAqIFRha2VzIHVwIHRvIDYgc2Vjb25kcy4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdGNvZGUgID0gd2FpdF9mb3JfRFE3KCh1bG9uZylzZWN0b3JfYWRkciwgMHg4MCwgNjAwMCk7CisJICAgIC8qCisJICAgICAqIFdhaXQgZm9yIGVhY2ggc2VjdG9yIHRvIGNvbXBsZXRlLCBpdCdzIG1vcmUKKwkgICAgICogcmVsaWFibGUuICBBY2NvcmRpbmcgdG8gQU1EIFNwZWMsIHlvdSBtdXN0CisJICAgICAqIGlzc3VlIGFsbCBlcmFzZSBjb21tYW5kcyB3aXRoaW4gYSBzcGVjaWZpZWQKKwkgICAgICogdGltZW91dC4gIFRoaXMgaGFzIGJlZW4gc2VlbiB0byBmYWlsLCBlc3BlY2lhbGx5CisJICAgICAqIGlmIHByaW50ZigpcyBhcmUgaW5jbHVkZWQgKGZvciBkZWJ1ZykhIQorCSAgICAgKiBUYWtlcyB1cCB0byA2IHNlY29uZHMuCisJICAgICAqLworCSAgICB0Y29kZSAgPSB3YWl0X2Zvcl9EUTcoKHVsb25nKXNlY3Rvcl9hZGRyLCAweDgwLCA2MDAwKTsKIAotICAgICAgICAgICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgICAgICBpZiAoZmxhZykKLSAgICAgICAgICAgICAgICBlbmFibGVfaW50ZXJydXB0cygpOworCSAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwkgICAgaWYgKGZsYWcpCisJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAKLSAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgdGltZW91dCAqLwotICAgICAgICAgICAgaWYgKHRjb2RlKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmICgiVGltZW91dFxuIik7Ci0gICAgICAgICAgICAgICAgcmNvZGUgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJICAgIC8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgdGltZW91dCAqLworCSAgICBpZiAodGNvZGUpIHsKKwkJcHJpbnRmICgiVGltZW91dFxuIik7CisJCXJjb2RlID0gMTsKKwkgICAgfQorCX0KICAgICB9CiAKICAgICAvKiB3YWl0IGF0IGxlYXN0IDgwdXMgLSBsZXQncyB3YWl0IDEgbXMgKi8KQEAgLTQ3Myw2OCArNDczLDY4IEBACiAKICAgICAvKiBWYWxpZGF0ZSBhcmd1bWVudHMgKi8KICAgICBpZiAoKHNfZmlyc3QgPCAwKSB8fCAoc19maXJzdCA+IHNfbGFzdCkpIHsKLSAgICAgICAgaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pCi0gICAgICAgICAgICBwcmludGYgKCItIG1pc3NpbmdcbiIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGYgKCItIG5vIHNlY3RvcnMgdG8gZXJhc2VcbiIpOwotICAgICAgICByZXR1cm4gMTsKKwlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikKKwkgICAgcHJpbnRmICgiLSBtaXNzaW5nXG4iKTsKKwllbHNlCisJICAgIHByaW50ZiAoIi0gbm8gc2VjdG9ycyB0byBlcmFzZVxuIik7CisJcmV0dXJuIDE7CiAgICAgfQogCiAgICAgLyogQ2hlY2sgZm9yIEtOT1dOIGZsYXNoIHR5cGUgKi8KICAgICBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spICE9IEZMQVNIX01BTl9JTlRFTCkgewotICAgICAgICBwcmludGYgKCJDYW4gZXJhc2Ugb25seSBJbnRlbCBmbGFzaCB0eXBlcyAtIGFib3J0ZWRcbiIpOwotICAgICAgICByZXR1cm4gMTsKKwlwcmludGYgKCJDYW4gZXJhc2Ugb25seSBJbnRlbCBmbGFzaCB0eXBlcyAtIGFib3J0ZWRcbiIpOworCXJldHVybiAxOwogICAgIH0KIAogICAgIC8qIENoZWNrIGZvciBwcm90ZWN0ZWQgc2VjdG9ycyAqLwogICAgIGZvciAoc2VjdCA9IHNfZmlyc3Q7IHNlY3QgPD0gc19sYXN0OyArK3NlY3QpIHsKLSAgICAgICAgaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pCi0gICAgICAgICAgICBwcm90Kys7CisJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0pCisJICAgIHByb3QrKzsKICAgICB9CiAgICAgaWYgKHByb3QpCi0gICAgICAgIHByaW50ZiAoIi0gV2FybmluZzogJWQgcHJvdGVjdGVkIHNlY3RvcnMgd2lsbCBub3QgYmUgZXJhc2VkIVxuIiwgcHJvdCk7CisJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLCBwcm90KTsKICAgICBlbHNlCi0gICAgICAgIHByaW50ZiAoIlxuIik7CisJcHJpbnRmICgiXG4iKTsKIAogICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKICAgICBsYXN0ICA9IHN0YXJ0OwogICAgIC8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KICAgICBmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0IDw9IHNfbGFzdDsgc2VjdCsrKSB7Ci0gICAgICAgIFdBVENIRE9HX1JFU0VUKCk7Ci0gICAgICAgIGlmIChpbmZvLT5wcm90ZWN0W3NlY3RdID09IDApIHsgICAgICAvKiBub3QgcHJvdGVjdGVkICovCi0gICAgICAgICAgICB2dV9sb25nICphZGRyID0gKHZ1X2xvbmcgKikoaW5mby0+c3RhcnRbc2VjdF0pOwotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzdGF0dXM7CisJV0FUQ0hET0dfUkVTRVQoKTsKKwlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSA9PSAwKSB7ICAgICAgLyogbm90IHByb3RlY3RlZCAqLworCSAgICB2dV9sb25nICphZGRyID0gKHZ1X2xvbmcgKikoaW5mby0+c3RhcnRbc2VjdF0pOworCSAgICB1bnNpZ25lZCBsb25nIHN0YXR1czsKIAotICAgICAgICAgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCi0gICAgICAgICAgICBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisJICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBhIHRpbWVvdXQgaGVyZSAqLworCSAgICBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKLSAgICAgICAgICAgICphZGRyID0gMHgwMDUwMDA1MDsgICAgICAgICAgICAgIC8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLwotICAgICAgICAgICAgKmFkZHIgPSAweDAwMjAwMDIwOyAgICAgICAgICAgICAgLyogZXJhc2Ugc2V0dXAgKi8KLSAgICAgICAgICAgICphZGRyID0gMHgwMEQwMDBEMDsgICAgICAgICAgICAgIC8qIGVyYXNlIGNvbmZpcm0gKi8KKwkgICAgKmFkZHIgPSAweDAwNTAwMDUwOyAgICAgICAgICAgICAgLyogY2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCisJICAgICphZGRyID0gMHgwMDIwMDAyMDsgICAgICAgICAgICAgIC8qIGVyYXNlIHNldHVwICovCisJICAgICphZGRyID0gMHgwMEQwMDBEMDsgICAgICAgICAgICAgIC8qIGVyYXNlIGNvbmZpcm0gKi8KIAotICAgICAgICAgICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgICAgICBpZiAoZmxhZykKLSAgICAgICAgICAgICAgICBlbmFibGVfaW50ZXJydXB0cygpOworCSAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwkgICAgaWYgKGZsYWcpCisJCWVuYWJsZV9pbnRlcnJ1cHRzKCk7CiAKLSAgICAgICAgICAgIC8qIFdhaXQgYXQgbGVhc3QgODB1cyAtIGxldCdzIHdhaXQgMSBtcyAqLwotICAgICAgICAgICAgdWRlbGF5ICgxMDAwKTsKKwkgICAgLyogV2FpdCBhdCBsZWFzdCA4MHVzIC0gbGV0J3Mgd2FpdCAxIG1zICovCisJICAgIHVkZWxheSAoMTAwMCk7CiAKLSAgICAgICAgICAgIHdoaWxlICgoKHN0YXR1cyA9ICphZGRyKSAmIDB4MDA4MDAwODApICE9IDB4MDA4MDAwODApIHsKLSAgICAgICAgICAgICAgICBpZiAoKG5vdyA9IGdldF90aW1lcihzdGFydCkpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiVGltZW91dFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICphZGRyID0gMHgwMEIwMDBCMDsgICAgICAvKiBzdXNwZW5kIGVyYXNlICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgKmFkZHIgPSAweDAwRkYwMEZGOyAgICAgIC8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9CisJICAgIHdoaWxlICgoKHN0YXR1cyA9ICphZGRyKSAmIDB4MDA4MDAwODApICE9IDB4MDA4MDAwODApIHsKKwkJaWYgKChub3cgPSBnZXRfdGltZXIoc3RhcnQpKSA+IENGR19GTEFTSF9FUkFTRV9UT1VUKSB7CisJCSAgICBwcmludGYgKCJUaW1lb3V0XG4iKTsKKwkJICAgICphZGRyID0gMHgwMEIwMDBCMDsgICAgICAvKiBzdXNwZW5kIGVyYXNlICAgICAgKi8KKwkJICAgICphZGRyID0gMHgwMEZGMDBGRjsgICAgICAvKiByZXNldCB0byByZWFkIG1vZGUgKi8KKwkJICAgIHJldHVybiAxOworCQl9CiAKLSAgICAgICAgICAgICAgICAvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLwotICAgICAgICAgICAgICAgIGlmICgobm93IC0gbGFzdCkgPiA5OTApIHsgICAvKiBldmVyeSBzZWNvbmQgKi8KLSAgICAgICAgICAgICAgICAgICAgcHV0YyAoJy4nKTsKLSAgICAgICAgICAgICAgICAgICAgbGFzdCA9IG5vdzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqYWRkciA9IDB4MDBGRjAwRkY7ICAgICAgICAgICAgICAvKiByZXNldCB0byByZWFkIG1vZGUgKi8KLSAgICAgICAgfQorCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLworCQlpZiAoKG5vdyAtIGxhc3QpID4gOTkwKSB7ICAgLyogZXZlcnkgc2Vjb25kICovCisJCSAgICBwdXRjICgnLicpOworCQkgICAgbGFzdCA9IG5vdzsKKwkJfQorCSAgICB9CisJICAgICphZGRyID0gMHgwMEZGMDBGRjsgICAgICAgICAgICAgIC8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLworCX0KICAgICB9CiAgICAgcHJpbnRmICgiIGRvbmVcbiIpOwogICAgIHJldHVybiAwOwpAQCAtNTQzLDkgKzU0Myw5IEBACiBpbnQgZmxhc2hfZXJhc2UoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKIHsKICAgICBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spID09IEZMQVNIX0FNMDQwKQotICAgICAgICByZXR1cm4gZmxhc2hfZXJhc2U4KGluZm8sIHNfZmlyc3QsIHNfbGFzdCk7CisJcmV0dXJuIGZsYXNoX2VyYXNlOChpbmZvLCBzX2ZpcnN0LCBzX2xhc3QpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZsYXNoX2VyYXNlMzIoaW5mbywgc19maXJzdCwgc19sYXN0KTsKKwlyZXR1cm4gZmxhc2hfZXJhc2UzMihpbmZvLCBzX2ZpcnN0LCBzX2xhc3QpOwogfSAvKiBlbmQgZmxhc2hfZXJhc2UoKSAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NjMsNTMgKzU2Myw1MyBAQAogICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKIAogICAgIHdwID0gKGFkZHIgJiB+Myk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2V0IGxvd2VyIHdvcmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduZWQgYWRkcmVzcyAqLworCQkJCQkJYWxpZ25lZCBhZGRyZXNzICovCiAKICAgICAvKgogICAgICAqIGhhbmRsZSB1bmFsaWduZWQgc3RhcnQgYnl0ZXMKICAgICAgKi8KICAgICBpZiAoKGwgPSBhZGRyIC0gd3ApICE9IDApIHsKLSAgICAgICAgZGF0YSA9IDA7Ci0gICAgICAgIGZvciAoaT0wLCBjcD13cDsgaTxsOyArK2ksICsrY3ApIHsKLSAgICAgICAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoOyBpPDQgJiYgY250PjA7ICsraSkgewotICAgICAgICAgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOwotICAgICAgICAgICAgLS1jbnQ7Ci0gICAgICAgICAgICArK2NwOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoOyBjbnQ9PTAgJiYgaTw0OyArK2ksICsrY3ApIHsKLSAgICAgICAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwotICAgICAgICB9CisJZGF0YSA9IDA7CisJZm9yIChpPTAsIGNwPXdwOyBpPGw7ICsraSwgKytjcCkgeworCSAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAoKih1Y2hhciAqKWNwKTsKKwl9CisJZm9yICg7IGk8NCAmJiBjbnQ+MDsgKytpKSB7CisJICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwkgICAgLS1jbnQ7CisJICAgICsrY3A7CisJfQorCWZvciAoOyBjbnQ9PTAgJiYgaTw0OyArK2ksICsrY3ApIHsKKwkgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKCoodWNoYXIgKiljcCk7CisJfQogCi0gICAgICAgIGlmICgocmMgPSB3cml0ZV93b3JkOChpbmZvLCB3cCwgZGF0YSkpICE9IDApIHsKLSAgICAgICAgICAgIHJldHVybiAocmMpOwotICAgICAgICB9Ci0gICAgICAgIHdwICs9IDQ7CisJaWYgKChyYyA9IHdyaXRlX3dvcmQ4KGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgeworCSAgICByZXR1cm4gKHJjKTsKKwl9CisJd3AgKz0gNDsKICAgICB9CiAKICAgICAvKgogICAgICAqIGhhbmRsZSB3b3JkIGFsaWduZWQgcGFydAogICAgICAqLwogICAgIHdoaWxlIChjbnQgPj0gNCkgewotICAgICAgICBkYXRhID0gMDsKLSAgICAgICAgZm9yIChpPTA7IGk8NDsgKytpKSB7Ci0gICAgICAgICAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChyYyA9IHdyaXRlX3dvcmQ4KGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIChyYyk7Ci0gICAgICAgIH0KLSAgICAgICAgd3AgICs9IDQ7Ci0gICAgICAgIGNudCAtPSA0OwotICAgICAgICBpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IDEwMDApIHsgICAvKiBldmVyeSBzZWNvbmQgKi8KLSAgICAgICAgICAgV0FUQ0hET0dfUkVTRVQoKTsKLSAgICAgICAgICAgcHV0YyAoJy4nKTsKLSAgICAgICAgICAgc3RhcnQgPSBnZXRfdGltZXIoMCk7Ci0gICAgICAgIH0KKwlkYXRhID0gMDsKKwlmb3IgKGk9MDsgaTw0OyArK2kpIHsKKwkgICAgZGF0YSA9IChkYXRhIDw8IDgpIHwgKnNyYysrOworCX0KKwlpZiAoKHJjID0gd3JpdGVfd29yZDgoaW5mbywgd3AsIGRhdGEpKSAhPSAwKSB7CisJICAgIHJldHVybiAocmMpOworCX0KKwl3cCAgKz0gNDsKKwljbnQgLT0gNDsKKwlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IDEwMDApIHsgICAvKiBldmVyeSBzZWNvbmQgKi8KKwkgICBXQVRDSERPR19SRVNFVCgpOworCSAgIHB1dGMgKCcuJyk7CisJICAgc3RhcnQgPSBnZXRfdGltZXIoMCk7CisJfQogICAgIH0KIAogICAgIGlmIChjbnQgPT0gMCkgewotICAgICAgICByZXR1cm4gKDApOworCXJldHVybiAoMCk7CiAgICAgfQogCiAgICAgLyoKQEAgLTYxNywxMSArNjE3LDExIEBACiAgICAgICovCiAgICAgZGF0YSA9IDA7CiAgICAgZm9yIChpPTAsIGNwPXdwOyBpPDQgJiYgY250PjA7ICsraSwgKytjcCkgewotICAgICAgICBkYXRhID0gKGRhdGEgPDwgOCkgfCAqc3JjKys7Ci0gICAgICAgIC0tY250OworCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICpzcmMrKzsKKwktLWNudDsKICAgICB9CiAgICAgZm9yICg7IGk8NDsgKytpLCArK2NwKSB7Ci0gICAgICAgIGRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOworCWRhdGEgPSAoZGF0YSA8PCA4KSB8ICgqKHVjaGFyICopY3ApOwogICAgIH0KIAogICAgIHJldHVybiAod3JpdGVfd29yZDgoaW5mbywgd3AsIGRhdGEpKTsKQEAgLTY3OCw3ICs2NzgsNyBAQAogCQl9CiAJCXdwICArPSBGTEFTSF9XSURUSDsKIAkJY250IC09IEZMQVNIX1dJRFRIOwotICAgICAgICAgIGlmIChnZXRfdGltZXIoc3RhcnQpID4gOTkwKSB7ICAgLyogZXZlcnkgc2Vjb25kICovCisJICBpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IDk5MCkgeyAgIC8qIGV2ZXJ5IHNlY29uZCAqLwogCQkJcHV0YyAoJy4nKTsKIAkJCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOwogCQl9CkBAIC03MDgsOSArNzA4LDkgQEAKICAgICBpbnQgcmV0dmFsOwogCiAgICAgaWYgKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTTA0MCkKLSAgICAgICAgcmV0dmFsID0gd3JpdGVfYnVmZjgoaW5mbywgc3JjLCBhZGRyLCBjbnQpOworCXJldHZhbCA9IHdyaXRlX2J1ZmY4KGluZm8sIHNyYywgYWRkciwgY250KTsKICAgICBlbHNlCi0gICAgICAgIHJldHZhbCA9IHdyaXRlX2J1ZmYzMihpbmZvLCBzcmMsIGFkZHIsIGNudCk7CisJcmV0dmFsID0gd3JpdGVfYnVmZjMyKGluZm8sIHNyYywgYWRkciwgY250KTsKIAogICAgIHJldHVybiByZXR2YWw7CiB9IC8qIGVuZCB3cml0ZV9idWZmKCkgKi8KQEAgLTczMiwzMSArNzMyLDMxIEBACiAKICAgICAvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljZW50bHkpIGVyYXNlZCAqLwogICAgIGlmICgoKigodm9sYXRpbGUgdWNoYXIgKilkZXN0KSAmCi0gICAgICAgICh1Y2hhcilkYXRhKSAhPSAodWNoYXIpZGF0YSkgewotICAgICAgICByZXR1cm4gKDIpOworCSh1Y2hhcilkYXRhKSAhPSAodWNoYXIpZGF0YSkgeworCXJldHVybiAoMik7CiAgICAgfQogCiAgICAgZm9yIChpPTA7IGkgPCAoNCAvIHNpemVvZih1Y2hhcikpOyBpKyspIHsKLSAgICAgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCi0gICAgICAgIGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwlmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKLSAgICAgICAgKihhZGRyMiArIDB4NTU1KSA9ICh1Y2hhcikweEFBOwotICAgICAgICAqKGFkZHIyICsgMHgyYWEpID0gKHVjaGFyKTB4NTU7Ci0gICAgICAgICooYWRkcjIgKyAweDU1NSkgPSAodWNoYXIpMHhBMDsKKwkqKGFkZHIyICsgMHg1NTUpID0gKHVjaGFyKTB4QUE7CisJKihhZGRyMiArIDB4MmFhKSA9ICh1Y2hhcikweDU1OworCSooYWRkcjIgKyAweDU1NSkgPSAodWNoYXIpMHhBMDsKIAotICAgICAgICBkZXN0MltpXSA9IGRhdGEyW2ldOworCWRlc3QyW2ldID0gZGF0YTJbaV07CiAKLSAgICAgICAgLyogV2FpdCBmb3Igd3JpdGUgdG8gY29tcGxldGUsIHVwIHRvIDFtcyAqLwotICAgICAgICB0Y29kZSA9IHdhaXRfZm9yX0RRNygodWxvbmcpJmRlc3QyW2ldLCBkYXRhMltpXSwgMSk7CisJLyogV2FpdCBmb3Igd3JpdGUgdG8gY29tcGxldGUsIHVwIHRvIDFtcyAqLworCXRjb2RlID0gd2FpdF9mb3JfRFE3KCh1bG9uZykmZGVzdDJbaV0sIGRhdGEyW2ldLCAxKTsKIAotICAgICAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgaWYgKGZsYWcpCi0gICAgICAgICAgICBlbmFibGVfaW50ZXJydXB0cygpOworCS8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCWlmIChmbGFnKQorCSAgICBlbmFibGVfaW50ZXJydXB0cygpOwogCi0gICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgdGltZW91dCAqLwotICAgICAgICBpZiAodGNvZGUpIHsKLSAgICAgICAgICAgIHJjb2RlID0gMTsKLSAgICAgICAgfQorCS8qIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgdGltZW91dCAqLworCWlmICh0Y29kZSkgeworCSAgICByY29kZSA9IDE7CisJfQogICAgIH0KIAogICAgIHJldHVybiByY29kZTsKQEAgLTc3MSw3ICs3NzEsNyBAQAogCiAgICAgLyogQ2hlY2sgaWYgRmxhc2ggaXMgKHN1ZmZpY2llbnRseSkgZXJhc2VkICovCiAgICAgaWYgKCgqYWRkciAmIGRhdGEpICE9IGRhdGEpIHsKLSAgICAgICAgcmV0dXJuICgyKTsKKwlyZXR1cm4gKDIpOwogICAgIH0KICAgICAvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KICAgICBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CkBAIC03ODEsMTYgKzc4MSwxNiBAQAogCiAgICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCiAgICAgaWYgKGZsYWcpCi0gICAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJZW5hYmxlX2ludGVycnVwdHMoKTsKIAogICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKIAogICAgIHdoaWxlICgoKHN0YXR1cyA9ICphZGRyKSAmIDB4MDA4MDAwODApICE9IDB4MDA4MDAwODApIHsKLSAgICAgICAgV0FUQ0hET0dfUkVTRVQoKTsKLSAgICAgICAgaWYgKGdldF90aW1lcihzdGFydCkgPiBDRkdfRkxBU0hfV1JJVEVfVE9VVCkgewotICAgICAgICAgICAgKmFkZHIgPSAweDAwRkYwMEZGOyAgICAgICAgICAgICAgLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KLSAgICAgICAgICAgIHJldHVybiAoMSk7Ci0gICAgICAgIH0KKwlXQVRDSERPR19SRVNFVCgpOworCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKKwkgICAgKmFkZHIgPSAweDAwRkYwMEZGOyAgICAgICAgICAgICAgLyogcmVzdG9yZSByZWFkIG1vZGUgKi8KKwkgICAgcmV0dXJuICgxKTsKKwl9CiAgICAgfQogCiAgICAgKmFkZHIgPSAweDAwRkYwMEZGOyAgICAgICAgICAgICAgICAgICAgICAvKiByZXN0b3JlIHJlYWQgbW9kZSAqLwpAQCAtODA4LDUwICs4MDgsNTAgQEAKICAgICB2b2xhdGlsZSBsb25nICphZGRyID0gKHVuc2lnbmVkIGxvbmcgKilzZWN0b3I7CiAKICAgICBzd2l0Y2goaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9UWVBFTUFTSykgewotICAgICAgICBjYXNlIEZMQVNIXzI4RjMyMEozQToKLSAgICAgICAgY2FzZSBGTEFTSF8yOEY2NDBKM0E6Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGMTI4SjNBOgotICAgICAgICAgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIEZsYXNoIHRvIHRpbWVvdXQgKi8KLSAgICAgICAgICAgIGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKKwljYXNlIEZMQVNIXzI4RjMyMEozQToKKwljYXNlIEZMQVNIXzI4RjY0MEozQToKKwljYXNlIEZMQVNIXzI4RjEyOEozQToKKwkgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIEZsYXNoIHRvIHRpbWVvdXQgKi8KKwkgICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCi0gICAgICAgICAgICAvKiBJc3N1ZSBjb21tYW5kICovCi0gICAgICAgICAgICAqYWRkciA9IDB4MDA1MDAwNTBMOyAgICAgICAgICAgICAvKiBDbGVhciB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCi0gICAgICAgICAgICAqYWRkciA9IDB4MDA2MDAwNjBMOyAgICAgICAgICAgICAvKiBTZXQgbG9jayBiaXQgc2V0dXAgKi8KLSAgICAgICAgICAgICphZGRyID0gMHgwMDAxMDAwMUw7ICAgICAgICAgICAgIC8qIFNldCBsb2NrIGJpdCBjb25maXJtICovCisJICAgIC8qIElzc3VlIGNvbW1hbmQgKi8KKwkgICAgKmFkZHIgPSAweDAwNTAwMDUwTDsgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHN0YXR1cyByZWdpc3RlciAqLworCSAgICAqYWRkciA9IDB4MDA2MDAwNjBMOyAgICAgICAgICAgICAvKiBTZXQgbG9jayBiaXQgc2V0dXAgKi8KKwkgICAgKmFkZHIgPSAweDAwMDEwMDAxTDsgICAgICAgICAgICAgLyogU2V0IGxvY2sgYml0IGNvbmZpcm0gKi8KIAotICAgICAgICAgICAgLyogV2FpdCBmb3IgY29tbWFuZCBjb21wbGV0aW9uICovCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeyAgICAgICAvKiA3NXVzIHRpbWVvdXQsIHdhaXQgMTAwdXMgKi8KLSAgICAgICAgICAgICAgICB1ZGVsYXkoMTApOwotICAgICAgICAgICAgICAgIGlmICgoKmFkZHIgJiAweDAwODAwMDgwTCkgPT0gMHgwMDgwMDA4MEwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorCSAgICAvKiBXYWl0IGZvciBjb21tYW5kIGNvbXBsZXRpb24gKi8KKwkgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsgICAgICAgLyogNzV1cyB0aW1lb3V0LCB3YWl0IDEwMHVzICovCisJCXVkZWxheSgxMCk7CisJCWlmICgoKmFkZHIgJiAweDAwODAwMDgwTCkgPT0gMHgwMDgwMDA4MEwpCisJCSAgICBicmVhazsKKwkgICAgfQogCi0gICAgICAgICAgICAvKiBOb3Qgc3VjY2Vzc2Z1bD8gKi8KLSAgICAgICAgICAgIHN0YXR1cyA9ICphZGRyOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAweDAwODAwMDgwTCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiUHJvdGVjdCAleCBzZWN0b3IgZmFpbGVkOiAleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQpc2VjdG9yLCAodWludClzdGF0dXMpOwotICAgICAgICAgICAgICAgIHJjb2RlID0gMTsKLSAgICAgICAgICAgIH0KKwkgICAgLyogTm90IHN1Y2Nlc3NmdWw/ICovCisJICAgIHN0YXR1cyA9ICphZGRyOworCSAgICBpZiAoc3RhdHVzICE9IDB4MDA4MDAwODBMKSB7CisJCXByaW50ZigiUHJvdGVjdCAleCBzZWN0b3IgZmFpbGVkOiAleFxuIiwKKwkJICAgICAgICh1aW50KXNlY3RvciwgKHVpbnQpc3RhdHVzKTsKKwkJcmNvZGUgPSAxOworCSAgICB9CiAKLSAgICAgICAgICAgIC8qIFJlc3RvcmUgcmVhZCBtb2RlICovCi0gICAgICAgICAgICAqYWRkciA9IDB4MDBmZjAwZmZMOworCSAgICAvKiBSZXN0b3JlIHJlYWQgbW9kZSAqLworCSAgICAqYWRkciA9IDB4MDBmZjAwZmZMOwogCi0gICAgICAgICAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgICAgIGlmIChmbGFnKQotICAgICAgICAgICAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJICAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCSAgICBpZiAoZmxhZykKKwkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkxBU0hfQU0wNDA6ICAgICAgICAgICAgICAgICAgICAvKiBObyBzb2Z0IHNlY3RvciBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICBicmVhazsKKwkgICAgYnJlYWs7CisJY2FzZSBGTEFTSF9BTTA0MDogICAgICAgICAgICAgICAgICAgIC8qIE5vIHNvZnQgc2VjdG9yIHByb3RlY3Rpb24gKi8KKwkgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLyogVHVybiBwcm90ZWN0aW9uIG9uIGZvciB0aGlzIHNlY3RvciAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykgewotICAgICAgICBpZiAoaW5mby0+c3RhcnRbaV0gPT0gc2VjdG9yKSB7Ci0gICAgICAgICAgICBpbmZvLT5wcm90ZWN0W2ldID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJaWYgKGluZm8tPnN0YXJ0W2ldID09IHNlY3RvcikgeworCSAgICBpbmZvLT5wcm90ZWN0W2ldID0gMTsKKwkgICAgYnJlYWs7CisJfQogICAgIH0KIAogICAgIHJldHVybiByY29kZTsKQEAgLTg2Niw0MiArODY2LDQyIEBACiAgICAgdm9sYXRpbGUgbG9uZyAqYWRkciA9ICh1bnNpZ25lZCBsb25nICopc2VjdG9yOwogCiAgICAgc3dpdGNoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKLSAgICAgICAgY2FzZSBGTEFTSF8yOEYzMjBKM0E6Ci0gICAgICAgIGNhc2UgRkxBU0hfMjhGNjQwSjNBOgotICAgICAgICBjYXNlIEZMQVNIXzI4RjEyOEozQToKLSAgICAgICAgICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBGbGFzaCB0byB0aW1lb3V0ICovCi0gICAgICAgICAgICBmbGFnID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CisJY2FzZSBGTEFTSF8yOEYzMjBKM0E6CisJY2FzZSBGTEFTSF8yOEY2NDBKM0E6CisJY2FzZSBGTEFTSF8yOEYxMjhKM0E6CisJICAgIC8qIERpc2FibGUgaW50ZXJydXB0cyB3aGljaCBtaWdodCBjYXVzZSBGbGFzaCB0byB0aW1lb3V0ICovCisJICAgIGZsYWcgPSBkaXNhYmxlX2ludGVycnVwdHMoKTsKIAotICAgICAgICAgICAgKmFkZHIgPSAweDAwNTAwMDUwTDsgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHN0YXR1cyByZWdpc3RlciAqLwotICAgICAgICAgICAgKmFkZHIgPSAweDAwNjAwMDYwTDsgICAgICAgICAgICAgLyogQ2xlYXIgbG9jayBiaXQgc2V0dXAgKi8KLSAgICAgICAgICAgICphZGRyID0gMHgwMEQwMDBEMEw7ICAgICAgICAgICAgIC8qIENsZWFyIGxvY2sgYml0IGNvbmZpcm0gKi8KKwkgICAgKmFkZHIgPSAweDAwNTAwMDUwTDsgICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHN0YXR1cyByZWdpc3RlciAqLworCSAgICAqYWRkciA9IDB4MDA2MDAwNjBMOyAgICAgICAgICAgICAvKiBDbGVhciBsb2NrIGJpdCBzZXR1cCAqLworCSAgICAqYWRkciA9IDB4MDBEMDAwRDBMOyAgICAgICAgICAgICAvKiBDbGVhciBsb2NrIGJpdCBjb25maXJtICovCiAKLSAgICAgICAgICAgIC8qIFdhaXQgZm9yIGNvbW1hbmQgY29tcGxldGlvbiAqLwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDgwIDsgaSsrKSB7ICAgICAgLyogNzAwbXMgdGltZW91dCwgd2FpdCA4MDAgKi8KLSAgICAgICAgICAgICAgICB1ZGVsYXkoMTAwMDApOyAgICAgICAgICAgICAgIC8qIERlbGF5IDEwbXMgKi8KLSAgICAgICAgICAgICAgICBpZiAoKCphZGRyICYgMHgwMDgwMDA4MEwpID09IDB4MDA4MDAwODBMKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKwkgICAgLyogV2FpdCBmb3IgY29tbWFuZCBjb21wbGV0aW9uICovCisJICAgIGZvciAoaSA9IDA7IGkgPCA4MCA7IGkrKykgeyAgICAgIC8qIDcwMG1zIHRpbWVvdXQsIHdhaXQgODAwICovCisJCXVkZWxheSgxMDAwMCk7ICAgICAgICAgICAgICAgLyogRGVsYXkgMTBtcyAqLworCQlpZiAoKCphZGRyICYgMHgwMDgwMDA4MEwpID09IDB4MDA4MDAwODBMKQorCQkgICAgYnJlYWs7CisJICAgIH0KIAotICAgICAgICAgICAgLyogTm90IHN1Y2Nlc3NmdWw/ICovCi0gICAgICAgICAgICBzdGF0dXMgPSAqYWRkcjsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMHgwMDgwMDA4MEwpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlVuLXByb3RlY3QgJXggc2VjdG9yIGZhaWxlZDogJXhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICh1aW50KXNlY3RvciwgKHVpbnQpc3RhdHVzKTsKLSAgICAgICAgICAgICAgICAqYWRkciA9IDB4MDBmZjAwZmZMOwotICAgICAgICAgICAgICAgIHJjb2RlID0gMTsKLSAgICAgICAgICAgIH0KKwkgICAgLyogTm90IHN1Y2Nlc3NmdWw/ICovCisJICAgIHN0YXR1cyA9ICphZGRyOworCSAgICBpZiAoc3RhdHVzICE9IDB4MDA4MDAwODBMKSB7CisJCXByaW50ZigiVW4tcHJvdGVjdCAleCBzZWN0b3IgZmFpbGVkOiAleFxuIiwKKwkJICAgICAgICh1aW50KXNlY3RvciwgKHVpbnQpc3RhdHVzKTsKKwkJKmFkZHIgPSAweDAwZmYwMGZmTDsKKwkJcmNvZGUgPSAxOworCSAgICB9CiAKLSAgICAgICAgICAgIC8qIHJlc3RvcmUgcmVhZCBtb2RlICovCi0gICAgICAgICAgICAqYWRkciA9IDB4MDBmZjAwZmZMOworCSAgICAvKiByZXN0b3JlIHJlYWQgbW9kZSAqLworCSAgICAqYWRkciA9IDB4MDBmZjAwZmZMOwogCi0gICAgICAgICAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KLSAgICAgICAgICAgIGlmIChmbGFnKQotICAgICAgICAgICAgICAgIGVuYWJsZV9pbnRlcnJ1cHRzKCk7CisJICAgIC8qIHJlLWVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lY2Vzc2FyeSAqLworCSAgICBpZiAoZmxhZykKKwkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRkxBU0hfQU0wNDA6ICAgICAgICAgICAgICAgICAgICAvKiBObyBzb2Z0IHNlY3RvciBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICBicmVhazsKKwkgICAgYnJlYWs7CisJY2FzZSBGTEFTSF9BTTA0MDogICAgICAgICAgICAgICAgICAgIC8qIE5vIHNvZnQgc2VjdG9yIHByb3RlY3Rpb24gKi8KKwkgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLyoKQEAgLTkxMCwxNCArOTEwLDE0IEBACiAgICAgICogcHJvdGVjdGlvbiBvbiBhIHNwZWNpZmljIHNlY3Rvci4KICAgICAgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKLSAgICAgICAgaWYgKGluZm8tPnN0YXJ0W2ldICE9IHNlY3RvcikgewotICAgICAgICAgICAgaWYgKGluZm8tPnByb3RlY3RbaV0pIHsKLSAgICAgICAgICAgICAgICBpZiAoX2ZsYXNoX3Byb3RlY3QoaW5mbywgaW5mby0+c3RhcnRbaV0pKQotICAgICAgICAgICAgICAgICAgICByY29kZSA9IDE7CisJaWYgKGluZm8tPnN0YXJ0W2ldICE9IHNlY3RvcikgeworCSAgICBpZiAoaW5mby0+cHJvdGVjdFtpXSkgeworCQlpZiAoX2ZsYXNoX3Byb3RlY3QoaW5mbywgaW5mby0+c3RhcnRbaV0pKQorCQkgICAgcmNvZGUgPSAxOwogCSAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAvKiBUdXJuIHByb3RlY3Rpb24gb2ZmIGZvciB0aGlzIHNlY3RvciAqLwotICAgICAgICAgICAgaW5mby0+cHJvdGVjdFtpXSA9IDA7CisJfQorCWVsc2UgLyogVHVybiBwcm90ZWN0aW9uIG9mZiBmb3IgdGhpcyBzZWN0b3IgKi8KKwkgICAgaW5mby0+cHJvdGVjdFtpXSA9IDA7CiAgICAgfQogCiAgICAgcmV0dXJuIHJjb2RlOwpAQCAtOTI5LDEzICs5MjksMTIgQEAKICAgICBpbnQgcmNvZGU7CiAKICAgICBpZiAocHJvdCkKLSAgICAgICAgcmNvZGUgPSBfZmxhc2hfcHJvdGVjdChpbmZvLCBpbmZvLT5zdGFydFtzZWN0b3JdKTsKKwlyY29kZSA9IF9mbGFzaF9wcm90ZWN0KGluZm8sIGluZm8tPnN0YXJ0W3NlY3Rvcl0pOwogICAgIGVsc2UKLSAgICAgICAgcmNvZGUgPSBfZmxhc2hfdW5wcm90ZWN0KGluZm8sIGluZm8tPnN0YXJ0W3NlY3Rvcl0pOworCXJjb2RlID0gX2ZsYXNoX3VucHJvdGVjdChpbmZvLCBpbmZvLT5zdGFydFtzZWN0b3JdKTsKIAogICAgIHJldHVybiByY29kZTsKIH0gLyogZW5kIGZsYXNoX3JlYWxfcHJvdGVjdCgpICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwotCmRpZmYgLS1naXQgYS9ib2FyZC93N28vZnBnYS5jIGIvYm9hcmQvdzdvL2ZwZ2EuYwppbmRleCBlODQxMjNiLi45N2FmOTI0IDEwMDY0NAotLS0gYS9ib2FyZC93N28vZnBnYS5jCisrKyBiL2JvYXJkL3c3by9mcGdhLmMKQEAgLTM2LDExICszNiwxMSBAQAogICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gZGFkZHI7CS8qIHZvbGF0aWxlLWJ5cGFzcyBvcHRpbWl6ZXIgKi8KIAogICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgc3JjKyspIHsKLSAgICAgICAgdmFsID0gKnNyYzsKLSAgICAgICAgKmRlc3QgPSAodW5zaWduZWQgc2hvcnQpKCh2YWwgJiAweGZmMDAwMDAwTCkgPj4gMTYpOwotICAgICAgICAqZGVzdCA9ICh1bnNpZ25lZCBzaG9ydCkoKHZhbCAmIDB4MDBmZjAwMDBMKSA+PiA4KTsKLSAgICAgICAgKmRlc3QgPSAodW5zaWduZWQgc2hvcnQpKHZhbCAmIDB4MDAwMGZmMDBMKTsKLSAgICAgICAgKmRlc3QgPSAodW5zaWduZWQgc2hvcnQpKCh2YWwgJiAweDAwMDAwMGZmTCkgPDwgOCk7CisJdmFsID0gKnNyYzsKKwkqZGVzdCA9ICh1bnNpZ25lZCBzaG9ydCkoKHZhbCAmIDB4ZmYwMDAwMDBMKSA+PiAxNik7CisJKmRlc3QgPSAodW5zaWduZWQgc2hvcnQpKCh2YWwgJiAweDAwZmYwMDAwTCkgPj4gOCk7CisJKmRlc3QgPSAodW5zaWduZWQgc2hvcnQpKHZhbCAmIDB4MDAwMGZmMDBMKTsKKwkqZGVzdCA9ICh1bnNpZ25lZCBzaG9ydCkoKHZhbCAmIDB4MDAwMDAwZmZMKSA8PCA4KTsKICAgICB9CiAKICAgICAvKiBUZXJtaW5hdGUgcHJvZ3JhbW1pbmcgd2l0aCA0IEMgY2xvY2tzICovCkBAIC04OCwxNCArODgsMTQgQEAKIAogICAgIC8qIFdhaXQgZm9yIEZQR0EgaW5pdCBsaW5lICovCiAgICAgd2hpbGUoaW4zMihJQk00MDVHUF9HUElPMF9JUikgJiBHUElPX1hDVl9JTklUKSB7IC8qIFdhaXQgSU5JVCBsaW5lIGxvdyAqLwotICAgICAgICAvKiBDaGVjayBmb3IgdGltZW91dCAtIDEwMHVzIG1heCwgc28gdXNlIDNtcyAqLwotICAgICAgICBpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IDMpIHsKLSAgICAgICAgICAgIHByaW50ZigiICAgICBmYWlsZWQgdG8gc3RhcnQgaW5pdC5cbiIpOwotICAgICAgICAgICAgbG9nX3dhcm4oRVJSX1hJTklUMCk7CQkvKiBEb24ndCBoYWx0ICovCisJLyogQ2hlY2sgZm9yIHRpbWVvdXQgLSAxMDB1cyBtYXgsIHNvIHVzZSAzbXMgKi8KKwlpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IDMpIHsKKwkgICAgcHJpbnRmKCIgICAgIGZhaWxlZCB0byBzdGFydCBpbml0LlxuIik7CisJICAgIGxvZ193YXJuKEVSUl9YSU5JVDApOwkJLyogRG9uJ3QgaGFsdCAqLwogCi0gICAgICAgICAgICAvKiBSZXNldCBsaW5lIHN0YXlzIGxvdyAqLwotICAgICAgICAgICAgZ290byBkb25lOwkJCQkvKiBJIGxpa2UgZ290b3MuLi4gKi8KLSAgICAgICAgfQorCSAgICAvKiBSZXNldCBsaW5lIHN0YXlzIGxvdyAqLworCSAgICBnb3RvIGRvbmU7CQkJCS8qIEkgbGlrZSBnb3Rvcy4uLiAqLworCX0KICAgICB9CiAKICAgICAvKiBVbnJlc2V0IEZQR0EgKi8KQEAgLTEwNSw3NSArMTA1LDc1IEBACiAgICAgLyogV2FpdCBmb3IgRlBHQSBlbmQgb2YgaW5pdCBwZXJpb2QgLiAgKi8KICAgICB3aGlsZSghKGluMzIoSUJNNDA1R1BfR1BJTzBfSVIpICYgR1BJT19YQ1ZfSU5JVCkpIHsgLyogV2FpdCBmb3IgSU5JVCBoaSAqLwogCi0gICAgICAgIC8qIENoZWNrIGZvciB0aW1lb3V0ICovCi0gICAgICAgIGlmIChnZXRfdGltZXIoc3RhcnQpID4gMykgewotICAgICAgICAgICAgcHJpbnRmKCIgICAgIGZhaWxlZCB0byBleGl0IGluaXQuXG4iKTsKLSAgICAgICAgICAgIGxvZ193YXJuKEVSUl9YSU5JVDEpOworCS8qIENoZWNrIGZvciB0aW1lb3V0ICovCisJaWYgKGdldF90aW1lcihzdGFydCkgPiAzKSB7CisJICAgIHByaW50ZigiICAgICBmYWlsZWQgdG8gZXhpdCBpbml0LlxuIik7CisJICAgIGxvZ193YXJuKEVSUl9YSU5JVDEpOwogCi0gICAgICAgICAgICAvKiBSZXNldCBGUEdBICovCi0gICAgICAgICAgICBncmVnbyAmPSB+R1BJT19YQ1ZfUFJPRzsJCS8qIFBST0cgbGluZSBsb3cgKi8KLSAgICAgICAgICAgIG91dDMyKElCTTQwNUdQX0dQSU8wX09SLCBncmVnbyk7CisJICAgIC8qIFJlc2V0IEZQR0EgKi8KKwkgICAgZ3JlZ28gJj0gfkdQSU9fWENWX1BST0c7CQkvKiBQUk9HIGxpbmUgbG93ICovCisJICAgIG91dDMyKElCTTQwNUdQX0dQSU8wX09SLCBncmVnbyk7CiAKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgfQorCSAgICBnb3RvIGRvbmU7CisJfQogICAgIH0KIAogICAgIC8qIE5vdyBwcm9ncmFtIEZQR0EgLi4uICovCiAgICAgbmRlc3QgPSBkZXN0OwogICAgIGZvciAoaSA9IDA7IGkgPCBDT05GSUdfTlVNX0ZQR0FTOyBpKyspIHsKLSAgICAgICAgLyogVG9nZ2xlIElSUS9HUElPICovCi0gICAgICAgIGdyZWcgPSBtZmRjcihDUEMwX0NSMCk7CQkJLyogZ2V0IGNoaXAgY3RybCByZWdpc3RlciAqLwotICAgICAgICBncmVnIHw9IGVpcnE7CQkJCS8qIHRvZ2dsZSBpcnEvZ3BpbyAqLwotICAgICAgICBtdGRjcihDUEMwX0NSMCwgZ3JlZyk7CQkJLyogIC4uLiBqdXN0IGRvIGl0ICovCisJLyogVG9nZ2xlIElSUS9HUElPICovCisJZ3JlZyA9IG1mZGNyKENQQzBfQ1IwKTsJCQkvKiBnZXQgY2hpcCBjdHJsIHJlZ2lzdGVyICovCisJZ3JlZyB8PSBlaXJxOwkJCQkvKiB0b2dnbGUgaXJxL2dwaW8gKi8KKwltdGRjcihDUEMwX0NSMCwgZ3JlZyk7CQkJLyogIC4uLiBqdXN0IGRvIGl0ICovCiAKLSAgICAgICAgLyogdHVybiBvbiBvcGVuIGRyYWluIGZvciBDTkZHICovCi0gICAgICAgIGdyZWcgPSBpbjMyKElCTTQwNUdQX0dQSU8wX09EUik7CS8qIGdldCBvcGVuIGRyYWluIHJlZ2lzdGVyICovCi0gICAgICAgIGdyZWcgfD0gY25mZzsJCQkJLyogQ05GRyBvcGVuIGRyYWluICovCi0gICAgICAgIG91dDMyKElCTTQwNUdQX0dQSU8wX09EUiwgZ3JlZyk7CS8qICAuLiBqdXN0IGRvIGl0ICovCisJLyogdHVybiBvbiBvcGVuIGRyYWluIGZvciBDTkZHICovCisJZ3JlZyA9IGluMzIoSUJNNDA1R1BfR1BJTzBfT0RSKTsJLyogZ2V0IG9wZW4gZHJhaW4gcmVnaXN0ZXIgKi8KKwlncmVnIHw9IGNuZmc7CQkJCS8qIENORkcgb3BlbiBkcmFpbiAqLworCW91dDMyKElCTTQwNUdQX0dQSU8wX09EUiwgZ3JlZyk7CS8qICAuLiBqdXN0IGRvIGl0ICovCiAKLSAgICAgICAgLyogVHVybiBvdXRwdXQgZW5hYmxlIG9uIGZvciBDTkZHICovCi0gICAgICAgIGdyZWcgPSBpbjMyKElCTTQwNUdQX0dQSU8wX1RDUik7CS8qIGdldCB0cmlzdGF0ZSByZWdpc3RlciAqLwotICAgICAgICBncmVnIHw9IGNuZmc7CQkJCS8qIENORkcgdHJpc3RhdGUgaW5hY3RpdmUgKi8KLSAgICAgICAgb3V0MzIoSUJNNDA1R1BfR1BJTzBfVENSLCBncmVnKTsJLyogIC4uLiBqdXN0IGRvIGl0ICovCisJLyogVHVybiBvdXRwdXQgZW5hYmxlIG9uIGZvciBDTkZHICovCisJZ3JlZyA9IGluMzIoSUJNNDA1R1BfR1BJTzBfVENSKTsJLyogZ2V0IHRyaXN0YXRlIHJlZ2lzdGVyICovCisJZ3JlZyB8PSBjbmZnOwkJCQkvKiBDTkZHIHRyaXN0YXRlIGluYWN0aXZlICovCisJb3V0MzIoSUJNNDA1R1BfR1BJTzBfVENSLCBncmVnKTsJLyogIC4uLiBqdXN0IGRvIGl0ICovCiAKLSAgICAgICAgLyogU2V0dXAgRlBHQSBmb3IgcHJvZ3JhbW1pbmcgKi8KLSAgICAgICAgZ3JlZ28gJj0gfmNuZmc7CQkJCS8qIENPTkZJRyBsaW5lIGxvdyAqLwotICAgICAgICBvdXQzMihJQk00MDVHUF9HUElPMF9PUiwgZ3JlZ28pOworCS8qIFNldHVwIEZQR0EgZm9yIHByb2dyYW1taW5nICovCisJZ3JlZ28gJj0gfmNuZmc7CQkJCS8qIENPTkZJRyBsaW5lIGxvdyAqLworCW91dDMyKElCTTQwNUdQX0dQSU8wX09SLCBncmVnbyk7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogUHJvZ3JhbSB0aGUgRlBHQQotICAgICAgICAgKi8KLSAgICAgICAgcHJpbnRmKCJcbiAgICAgICBkZXN0aW5hdGlvbjogMHglbHggIiwgKHVuc2lnbmVkIGxvbmcpbmRlc3QpOworCS8qCisJICogUHJvZ3JhbSB0aGUgRlBHQQorCSAqLworCXByaW50ZigiXG4gICAgICAgZGVzdGluYXRpb246IDB4JWx4ICIsICh1bnNpZ25lZCBsb25nKW5kZXN0KTsKIAotICAgICAgICBmcGdhX2ltZ193cml0ZShzb3VyY2UsICBsZW5ndGgsICAodW5zaWduZWQgc2hvcnQgKiluZGVzdCk7CisJZnBnYV9pbWdfd3JpdGUoc291cmNlLCAgbGVuZ3RoLCAgKHVuc2lnbmVkIHNob3J0ICopbmRlc3QpOwogCi0gICAgICAgIC8qIERvbmUgcHJvZ3JhbW1pbmcgKi8KLSAgICAgICAgZ3JlZ28gfD0gY25mZzsJCQkJLyogQ09ORklHIGxpbmUgaGlnaCAqLwotICAgICAgICBvdXQzMihJQk00MDVHUF9HUElPMF9PUiwgZ3JlZ28pOworCS8qIERvbmUgcHJvZ3JhbW1pbmcgKi8KKwlncmVnbyB8PSBjbmZnOwkJCQkvKiBDT05GSUcgbGluZSBoaWdoICovCisJb3V0MzIoSUJNNDA1R1BfR1BJTzBfT1IsIGdyZWdvKTsKIAotICAgICAgICAvKiBUdXJuIG91dHB1dCBlbmFibGUgT0ZGIGZvciBDTkZHICovCi0gICAgICAgIGdyZWcgPSBpbjMyKElCTTQwNUdQX0dQSU8wX1RDUik7CS8qIGdldCB0cmlzdGF0ZSByZWdpc3RlciAqLwotICAgICAgICBncmVnICY9IH5jbmZnOwkJCQkvKiBDTkZHIHRyaXN0YXRlIGluYWN0aXZlICovCi0gICAgICAgIG91dDMyKElCTTQwNUdQX0dQSU8wX1RDUiwgZ3JlZyk7CS8qICAuLi4ganVzdCBkbyBpdCAqLworCS8qIFR1cm4gb3V0cHV0IGVuYWJsZSBPRkYgZm9yIENORkcgKi8KKwlncmVnID0gaW4zMihJQk00MDVHUF9HUElPMF9UQ1IpOwkvKiBnZXQgdHJpc3RhdGUgcmVnaXN0ZXIgKi8KKwlncmVnICY9IH5jbmZnOwkJCQkvKiBDTkZHIHRyaXN0YXRlIGluYWN0aXZlICovCisJb3V0MzIoSUJNNDA1R1BfR1BJTzBfVENSLCBncmVnKTsJLyogIC4uLiBqdXN0IGRvIGl0ICovCiAKLSAgICAgICAgLyogVG9nZ2xlIElSUS9HUElPICovCi0gICAgICAgIGdyZWcgPSBtZmRjcihDUEMwX0NSMCk7CQkJLyogZ2V0IGNoaXAgY3RybCByZWdpc3RlciAqLwotICAgICAgICBncmVnICY9IH5laXJxOwkJCQkvKiB0b2dnbGUgaXJxL2dwaW8gKi8KLSAgICAgICAgbXRkY3IoQ1BDMF9DUjAsIGdyZWcpOwkJCS8qICAuLi4ganVzdCBkbyBpdCAqLworCS8qIFRvZ2dsZSBJUlEvR1BJTyAqLworCWdyZWcgPSBtZmRjcihDUEMwX0NSMCk7CQkJLyogZ2V0IGNoaXAgY3RybCByZWdpc3RlciAqLworCWdyZWcgJj0gfmVpcnE7CQkJCS8qIHRvZ2dsZSBpcnEvZ3BpbyAqLworCW10ZGNyKENQQzBfQ1IwLCBncmVnKTsJCQkvKiAgLi4uIGp1c3QgZG8gaXQgKi8KIAotICAgICAgICBuZGVzdCA9ICh1bnNpZ25lZCBzaG9ydCAqKSgoY2hhciAqKW5kZXN0ICsgMHgwMDEwMDAwMEwpOyAvKiBYWFggLSBOZXh0IEZQR0EgYWRkciAqLwotICAgICAgICBjbmZnID4+PSAxOwkJCQkvKiBYWFggLSBOZXh0ICAqLwotICAgICAgICBlaXJxID4+PSAxOworCW5kZXN0ID0gKHVuc2lnbmVkIHNob3J0ICopKChjaGFyICopbmRlc3QgKyAweDAwMTAwMDAwTCk7IC8qIFhYWCAtIE5leHQgRlBHQSBhZGRyICovCisJY25mZyA+Pj0gMTsJCQkJLyogWFhYIC0gTmV4dCAgKi8KKwllaXJxID4+PSAxOwogICAgIH0KIAogICAgIC8qIFRlcm1pbmF0ZSBwcm9ncmFtbWluZyB3aXRoIDQgQyBjbG9ja3MgKi8KICAgICBuZGVzdCA9IGRlc3Q7CiAgICAgZm9yIChpID0gMDsgaSA8IENPTkZJR19OVU1fRlBHQVM7IGkrKykgewotICAgICAgICB2YWwgPSAqbmRlc3Q7Ci0gICAgICAgIHZhbCA9ICpuZGVzdDsKLSAgICAgICAgdmFsID0gKm5kZXN0OwotICAgICAgICB2YWwgPSAqbmRlc3Q7Ci0gICAgICAgIG5kZXN0ID0gKHVuc2lnbmVkIHNob3J0ICopKChjaGFyICopbmRlc3QgKyAweDAwMTAwMDAwTCk7CisJdmFsID0gKm5kZXN0OworCXZhbCA9ICpuZGVzdDsKKwl2YWwgPSAqbmRlc3Q7CisJdmFsID0gKm5kZXN0OworCW5kZXN0ID0gKHVuc2lnbmVkIHNob3J0ICopKChjaGFyICopbmRlc3QgKyAweDAwMTAwMDAwTCk7CiAgICAgfQogCiAgICAgLyogU2V0dXAgdGltZXIgKi8KQEAgLTE4MiwxNyArMTgyLDE3IEBACiAgICAgLyogV2FpdCBmb3IgRlBHQSBlbmQgb2YgcHJvZ3JhbW1pbmcgcGVyaW9kIC4gICovCiAgICAgd2hpbGUoIShpbjMyKElCTTQwNUdQX0dQSU8wX0lSKSAmIEdQSU9fWENWX0RPTkUpKSB7IC8qIFRlc3QgRE9ORSBsb3cgKi8KIAotICAgICAgICAvKiBDaGVjayBmb3IgdGltZW91dCAqLwotICAgICAgICBpZiAoZ2V0X3RpbWVyKHN0YXJ0KSA+IDMpIHsKLSAgICAgICAgICAgIHByaW50ZigiICAgICBkb25lIGZhaWxlZCB0byBjb21lIGhpZ2guXG4iKTsKLSAgICAgICAgICAgIGxvZ193YXJuKEVSUl9YRE9ORTEpOworCS8qIENoZWNrIGZvciB0aW1lb3V0ICovCisJaWYgKGdldF90aW1lcihzdGFydCkgPiAzKSB7CisJICAgIHByaW50ZigiICAgICBkb25lIGZhaWxlZCB0byBjb21lIGhpZ2guXG4iKTsKKwkgICAgbG9nX3dhcm4oRVJSX1hET05FMSk7CiAKLSAgICAgICAgICAgIC8qIFJlc2V0IEZQR0EgKi8KLSAgICAgICAgICAgIGdyZWdvICY9IH5HUElPX1hDVl9QUk9HOwkJLyogUFJPRyBsaW5lIGxvdyAqLwotICAgICAgICAgICAgb3V0MzIoSUJNNDA1R1BfR1BJTzBfT1IsIGdyZWdvKTsKKwkgICAgLyogUmVzZXQgRlBHQSAqLworCSAgICBncmVnbyAmPSB+R1BJT19YQ1ZfUFJPRzsJCS8qIFBST0cgbGluZSBsb3cgKi8KKwkgICAgb3V0MzIoSUJNNDA1R1BfR1BJTzBfT1IsIGdyZWdvKTsKIAotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9CisJICAgIGdvdG8gZG9uZTsKKwl9CiAgICAgfQogCiAgICAgcHJpbnRmKCJcbiAgICAgICBGUEdBIGxvYWQgc3VjY2VlZGVkXG4iKTsKQEAgLTIzNiw3ICsyMzYsNyBAQAogCiAgICAgLyogUGVkYW50aWMgKi8KICAgICBpZiAoKGxlbiA8IDB4MTMzQTQpIHx8IChsZW4gPiAweDgwMDAwKSkKLSAgICAgICAgZ290byBiYWRfaW1hZ2U7CisJZ290byBiYWRfaW1hZ2U7CiAKICAgICAvKgogICAgICAqIEdldCB0aGUgZmlsZSBuYW1lIHBvaW50ZXIgYW5kIGxlbmd0aC4KQEAgLTI2MCwxNiArMjYwLDE2IEBACiAgICAgICovCiAgICAgY2FsY19jcmMgPSBjcmMzMigwLCB4Y3ZfYnVmLCB4Y3ZfbGVuKTsKICAgICBpZiAoY3JjICE9IGNhbGNfY3JjKSB7Ci0gICAgICAgIHByaW50ZigiXG5mYWlsZWQgLSBiYWQgQ1JDXG4iKTsKLSAgICAgICAgZ290byBkb25lOworCXByaW50ZigiXG5mYWlsZWQgLSBiYWQgQ1JDXG4iKTsKKwlnb3RvIGRvbmU7CiAgICAgfQogCiAgICAgLyogT3V0cHV0IHRoZSBmaWxlIG5hbWUgKi8KICAgICBwcmludGYoImZpbGUgbmFtZSAgOiAiKTsKICAgICBmb3IgKGk9MDtpPGZuX2xlbjtpKyspIHsKLSAgICAgICAgYnVmY2hhciA9IGZuX2J1ZlsraV07Ci0gICAgICAgIGlmIChidWZjaGFyPCcgJyB8fCBidWZjaGFyPid+JykgYnVmY2hhciA9ICcuJzsKLSAgICAgICAgcHV0YyhidWZjaGFyKTsKKwlidWZjaGFyID0gZm5fYnVmWytpXTsKKwlpZiAoYnVmY2hhcjwnICcgfHwgYnVmY2hhcj4nficpIGJ1ZmNoYXIgPSAnLic7CisJcHV0YyhidWZjaGFyKTsKICAgICB9CiAKICAgICAvKgpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgICogUHJvZ3JhbSB0aGUgRlBHQS4KICAgICAgKi8KICAgICByZXR2YWwgPSBmcGdhRG93bmxvYWQoKHVuc2lnbmVkIGNoYXIqKXhjdl9idWYsIHhjdl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBzaG9ydCAqKTB4ZmQwMDAwMDBMKTsKKwkJCSAgKHVuc2lnbmVkIHNob3J0ICopMHhmZDAwMDAwMEwpOwogICAgIHJldHVybiByZXR2YWw7CiAKIGJhZF9pbWFnZToKQEAgLTM3Nyw0ICszNzcsMyBAQAogICAgIHByaW50ZigiICAgICAgIEZQR0EgcmVhZHlcbiIpOwogICAgIHJldHVybjsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvdzdvL2ZzYm9vdC5jIGIvYm9hcmQvdzdvL2ZzYm9vdC5jCmluZGV4IDgwMDU4M2QuLjBlZjlhNjEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3c3by9mc2Jvb3QuYworKysgYi9ib2FyZC93N28vZnNib290LmMKQEAgLTI0LDExICsyNCwxMiBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfZWxmLmg+CiAKIC8qCiAgKiBGSVhNRTogQWRkIGNvZGUgdG8gdGVzdCBpbWFnZSBhbmQgaXQncyBoZWFkZXIuCiAgKi8KK2V4dGVybiBpbnQgdmFsaWRfZWxmX2ltYWdlICh1bnNpZ25lZCBsb25nIGFkZHIpOworCiBzdGF0aWMgaW50CiBpbWFnZV9jaGVjayh1bG9uZyBhZGRyKQogewpAQCAtODcsNCArODgsMyBAQAogCiAgICAgcmV0dXJuOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC93N28vaW5pdC5TIGIvYm9hcmQvdzdvL2luaXQuUwppbmRleCA1MTFhMWJiLi4zNWQ3ZGJjIDEwMDY0NAotLS0gYS9ib2FyZC93N28vaW5pdC5TCisrKyBiL2JvYXJkL3c3by9pbml0LlMKQEAgLTI2Miw0ICsyNjIsMyBAQAogCWJscgkJCQkvKiBSZXR1cm4gdG8gY2FsbGluZyBmdW5jdGlvbiAqLwogLkxmZTE6CS5zaXplCXNkcmFtX2luaXQsLkxmZTEtc2RyYW1faW5pdAogLyogZW5kIHNkcmFtX2luaXQoKSAqLwotCmRpZmYgLS1naXQgYS9ib2FyZC93N28vcG9zdDEuUyBiL2JvYXJkL3c3by9wb3N0MS5TCmluZGV4IGQ1MTBjY2EuLjIxZDIwNmUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3c3by9wb3N0MS5TCisrKyBiL2JvYXJkL3c3by9wb3N0MS5TCkBAIC0yODIsNyArMjgyLDcgQEAKIAlhZGRpCXIzMSwgMCwgMHgwMGZmCQkvKiByMzEgPSBvbmUgYnl0ZSBvZiBzZXQgYml0cyAqLwogCXN0YiAgICAgcjMxLDAocjI4KQkJLyogc2F2ZSBmZiBpbiByZWZlcmFuY2UgYWRkcmVzcyAqLwogCi0gICAgICAgIC8qIGdob3N0IChpbm5lcikgbG9vcCwgbm93IGNoZWNrIGFsbCBwb3NpYmxlIGdob3N0ZWQgYWRkcmVzc2VzICovCisJLyogZ2hvc3QgKGlubmVyKSBsb29wLCBub3cgY2hlY2sgYWxsIHBvc2libGUgZ2hvc3RlZCBhZGRyZXNzZXMgKi8KIAlhZGRpCXIyOSwgMCwgMAkJLyogc3RhcnQgZ2hvc3RlZCBsb29wIGNvdW50ZXIgYXQgMCAqLwogaW5zaWRlOgogCS8qCkBAIC0zMjMsMTEgKzMyMywxMSBAQAogCWFkZGkJcjMsIDAsIEVSUl9BRERGCQkvKiBnZXQgaW5kZXhlZCBlcnJvciBtZXNzYWdlICovCiAJYmwJbG9nX2VycgkJCS8qIGxvZyBlcnJvciBsZWQgZXJyb3IgY29kZSAqLwogZ2JfZG9uZTogLyogIHBhY2sgeW91ciBiYWdzLCBhbmQgZ28gaG9tZSAqLwotICAgICAgICBsbXcgICAgIHIyNSwgOChyMSkgICAgICAgICAgICAgIC8qIHJlc3RvcmUgcjI1IC0gcjMxIGZyb20gc3RhY2sgKi8KLSAgICAgICAgbHd6ICAgICByMCwgKzQwKHIxKSAgICAgICAgICAgICAvKiBHZXQgc2F2ZWQgbGluayByZWdpc3RlciAqLwotICAgICAgICBhZGRpICAgIHIxLCByMSwgKzM2ICAgICAgICAgICAgIC8qIFJlbW92ZSBmcmFtZSBmcm9tIHN0YWNrICovCi0gICAgICAgIG10bHIgICAgcjAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBsaW5rIHJlZ2lzdGVyICovCi0gICAgICAgIGJsciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHRvIGNhbGxpbmcgZnVuY3Rpb24gKi8KKwlsbXcgICAgIHIyNSwgOChyMSkgICAgICAgICAgICAgIC8qIHJlc3RvcmUgcjI1IC0gcjMxIGZyb20gc3RhY2sgKi8KKwlsd3ogICAgIHIwLCArNDAocjEpICAgICAgICAgICAgIC8qIEdldCBzYXZlZCBsaW5rIHJlZ2lzdGVyICovCisJYWRkaSAgICByMSwgcjEsICszNiAgICAgICAgICAgICAvKiBSZW1vdmUgZnJhbWUgZnJvbSBzdGFjayAqLworCW10bHIgICAgcjAgICAgICAgICAgICAgICAgICAgICAgLyogUmVzdG9yZSBsaW5rIHJlZ2lzdGVyICovCisJYmxyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXR1cm4gdG8gY2FsbGluZyBmdW5jdGlvbiAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqICAgICAgU0RSQU0gZGF0YSBmaWxsIHRlc3RzICAgICAgICoqKioqKioqKioKQEAgLTM3Myw3ICszNzMsNiBAQAogCWJscgkJCQkvKiBSZXR1cm4gdG8gY2FsbGluZyBmdW5jdGlvbiAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKiAgICAgICAgICAgICBmaWxsIHRlc3QgICAgICAgICAgICAgICoqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzgyLDEyICszODEsMTIgQEAKIC8qCXI0ID0gVmFsdWUgdG8gd3JpdGUgKi8KIC8qCXIzID0gRXJyb3IgY29kZSAqLwogZmlsbF90ZXN0OgotICAgICAgICBtZmxyICAgIHIwICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBsaW5rIHJlZ2lzdGVyICovCi0gICAgICAgIHN0d3UgICAgcjEsIC0zMihyMSkgICAgICAgICAgICAgLyogU2F2ZSBiYWNrIGNoYWluIGFuZCBtb3ZlIFNQICovCi0gICAgICAgIHN0dyAgICAgcjAsICszNihyMSkgICAgICAgICAgICAgLyogU2F2ZSBsaW5rIHJlZ2lzdGVyICovCi0gICAgICAgIHN0bXcgICAgcjI3LCA4KHIxKSAgICAgICAgICAgICAgLyogc2F2ZSByMjcgLSByMzEgb24gc3RhY2sgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByMzEgLSBzY3JhdGNoIHJlZ2lzdGVyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcjMwIC0gbWVtb3J5IGFkZHJlc3MgKi8KKwltZmxyICAgIHIwICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCBsaW5rIHJlZ2lzdGVyICovCisJc3R3dSAgICByMSwgLTMyKHIxKSAgICAgICAgICAgICAvKiBTYXZlIGJhY2sgY2hhaW4gYW5kIG1vdmUgU1AgKi8KKwlzdHcgICAgIHIwLCArMzYocjEpICAgICAgICAgICAgIC8qIFNhdmUgbGluayByZWdpc3RlciAqLworCXN0bXcgICAgcjI3LCA4KHIxKSAgICAgICAgICAgICAgLyogc2F2ZSByMjcgLSByMzEgb24gc3RhY2sgKi8KKwkJCQkJLyogcjMxIC0gc2NyYXRjaCByZWdpc3RlciAqLworCQkJCQkvKiByMzAgLSBtZW1vcnkgYWRkcmVzcyAqLwogCW1yCXIyNywgcjMKIAltcglyMjgsIHI0CiAJbXIJcjI5LCByNQpAQCAtNDEyLDggKzQxMSw4IEBACiAJbXRjdHIJcjMxCQkJLyogc2V0dXAgY291bnRlciAqLwogCWFkZGkJcjMwLCAwLCAwCQkvKiBNYWtlIHIzMCA9IGFkZHIgMCAqLwogZnRfMToJbHd6CXIzMSwgMChyMzApCQkvKiBnZXQgdmFsdWUgZnJvbSBtZW1vcnkgKi8KLSAgICAgICAgeG9yLglyMzEsIHIzMSwgcjI4CQkvKiBXcml0ZW4gPSBSZWFkID8gKi8KLSAgICAgICAgYm5lCWZ0X2VycgkJCS8qIElmIGJhZCwgdGhhbiBoYWx0ICovCisJeG9yLglyMzEsIHIzMSwgcjI4CQkvKiBXcml0ZW4gPSBSZWFkID8gKi8KKwlibmUJZnRfZXJyCQkJLyogSWYgYmFkLCB0aGFuIGhhbHQgKi8KIAlhZGRpCXIzMCwgcjMwLCA0CQkvKiBJbmNyZW1lbnQgdG8gbmV4dCB3b3JkICovCiAJYW5kaS4JcjMxLCByMzAsIDB4ZmZmZgkvKiBjaGVjayBmb3IgMl4xNiBsb29wcyovCiAJYm5lCWZ0XzFhCQkJLyogaWYgbm90IHRoZXJlLCB0aGVuIHNraXAgKi8KQEAgLTQzMSwxMSArNDMwLDExIEBACiAJYmwJbG9nX2VycgkJCS8qIG91dHB1dCBsZWQgZXJyIGNvZGUsIGhhbHQgQ1BVICovCiAKIGZpbGxfZG9uZToKLSAgICAgICAgbG13ICAgICByMjcsIDgocjEpICAgICAgICAgICAgICAvKiByZXN0b3JlIHIyNyAtIHIzMSBmcm9tIHN0YWNrICovCi0gICAgICAgIGx3eiAgICAgcjAsICszNihyMSkgICAgICAgICAgICAgLyogR2V0IHNhdmVkIGxpbmsgcmVnaXN0ZXIgKi8KLSAgICAgICAgYWRkaSAgICByMSwgcjEsICszMiAgICAgICAgICAgICAvKiBSZW1vdmUgZnJhbWUgZnJvbSBzdGFjayAqLwotICAgICAgICBtdGxyICAgIHIwICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgbGluayByZWdpc3RlciAqLwotICAgICAgICBibHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiB0byBjYWxsaW5nIGZ1bmN0aW9uICovCisJbG13ICAgICByMjcsIDgocjEpICAgICAgICAgICAgICAvKiByZXN0b3JlIHIyNyAtIHIzMSBmcm9tIHN0YWNrICovCisJbHd6ICAgICByMCwgKzM2KHIxKSAgICAgICAgICAgICAvKiBHZXQgc2F2ZWQgbGluayByZWdpc3RlciAqLworCWFkZGkgICAgcjEsIHIxLCArMzIgICAgICAgICAgICAgLyogUmVtb3ZlIGZyYW1lIGZyb20gc3RhY2sgKi8KKwltdGxyICAgIHIwICAgICAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgbGluayByZWdpc3RlciAqLworCWJsciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIHRvIGNhbGxpbmcgZnVuY3Rpb24gKi8KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTYzLDcgKzU2Miw3IEBACiAJbXRjdHIJcjMKIGxvZ18yOgogCVdBVENIRE9HX1JFU0VUCQkJLyogdGhpcyBrZWVwcyBkb2cgZnJvbSBiYXJraW5nLCAqLwotCQkJCSAgICAgCS8qICAgYW5kIHRha2VzIHRpbWUgKi8KKwkJCQkJLyogICBhbmQgdGFrZXMgdGltZSAqLwogCWJkbnoJbG9nXzIJCQkvKiBsb29wIHRpbGwgdGltZSBleHBpcmVzICovCiAKIAkvKiByZXN0b3JlIHN0YWNrIGFuZCByZXR1cm4gKi8KQEAgLTU4NSwyNyArNTg0LDI3IEBACiAJc3R3dQlyMSwgLTgocjEpCQkvKiBTYXZlIGJhY2sgY2hhaW4gYW5kIG1vdmUgU1AgKi8KIAlzdHcJcjAsICsxMihyMSkJCS8qIFNhdmUgbGluayByZWdpc3RlciAqLwogCi0gICAgICAgIGFkZGlzICAgcjMsIDAsIDB4ZWY2MAotICAgICAgICBvcmkgICAgIHIzLCByMywgMHgwMzAzICAgICAgICAgIC8qIHIzID0gVUFSVDBfTENSICovCi0gICAgICAgIGFkZGkgICAgcjQsIDAsIDB4ODMgICAgICAgICAgICAgLyogbjgxIGZvcm1hdCwgZGl2aXNvciByZWdzIGVuYWJsZWQgKi8KLSAgICAgICAgc3RiICAgICByNCwgMChyMykKKwlhZGRpcyAgIHIzLCAwLCAweGVmNjAKKwlvcmkgICAgIHIzLCByMywgMHgwMzAzICAgICAgICAgIC8qIHIzID0gVUFSVDBfTENSICovCisJYWRkaSAgICByNCwgMCwgMHg4MyAgICAgICAgICAgICAvKiBuODEgZm9ybWF0LCBkaXZpc29yIHJlZ3MgZW5hYmxlZCAqLworCXN0YiAgICAgcjQsIDAocjMpCiAKIAkvKiBzZXQgYmF1ZCByYXRlIHRvIHVzZSBpbnRlcm5hbCBjbG9jaywKIAkgICBiYXVkID0gKDIwMGU2LzE2KS8zMS80MiA9IDk2MDAgKi8KIAotICAgICAgICBhZGRpcyAgIHIzLCAwLCAweGVmNjAJCS8qIEFkZHJlc3Mgb2YgYmF1ZCBkaXZpc29yIHJlZyAqLwotICAgICAgICBvcmkgICAgIHIzLCByMywgMHgwMzAwCQkvKiAgIFVBUlQwX0RMTSAqLwotICAgICAgICBhZGRpICAgIHI0LCAwLCArNDIJCS8qIHVhcnQgYmF1ZCBkaXZpc29yIExTQiA9IDkzICovCi0gICAgICAgIHN0YiAgICAgcjQsIDAocjMpICAgICAgICAgICAgICAgLyogYmF1ZCA9ICgyMDAgLzE2KS8xNC85MyAqLworCWFkZGlzICAgcjMsIDAsIDB4ZWY2MAkJLyogQWRkcmVzcyBvZiBiYXVkIGRpdmlzb3IgcmVnICovCisJb3JpICAgICByMywgcjMsIDB4MDMwMAkJLyogICBVQVJUMF9ETE0gKi8KKwlhZGRpICAgIHI0LCAwLCArNDIJCS8qIHVhcnQgYmF1ZCBkaXZpc29yIExTQiA9IDkzICovCisJc3RiICAgICByNCwgMChyMykgICAgICAgICAgICAgICAvKiBiYXVkID0gKDIwMCAvMTYpLzE0LzkzICovCiAKLSAgICAgICAgYWRkaSAgICByMywgcjMsIDB4MDAwMQkJLyogdWFydCBiYXVkIGRpdmlzb3IgYWRkciAqLwotICAgICAgICBhZGRpICAgIHI0LCAwLCAwCi0gICAgICAgIHN0YiAgICAgcjQsIDAocjMpICAgICAgICAgICAgICAgLyogRGl2aXNvciBMYXRjaCBNU0IgPSAwICovCisJYWRkaSAgICByMywgcjMsIDB4MDAwMQkJLyogdWFydCBiYXVkIGRpdmlzb3IgYWRkciAqLworCWFkZGkgICAgcjQsIDAsIDAKKwlzdGIgICAgIHI0LCAwKHIzKSAgICAgICAgICAgICAgIC8qIERpdmlzb3IgTGF0Y2ggTVNCID0gMCAqLwogCi0gICAgICAgIGFkZGlzICAgcjMsIDAsIDB4ZWY2MAotICAgICAgICBvcmkgICAgIHIzLCByMywgMHgwMzAzICAgICAgICAgIC8qIHIzID0gVUFSVDBfTENSICovCi0gICAgICAgIGFkZGkgICAgcjQsIDAsIDB4MDMgICAgICAgICAgICAgLyogbjgxIGZvcm1hdCwgdHgvcnggcmVncyBlbmFibGVkICovCi0gICAgICAgIHN0YiAgICAgcjQsIDAocjMpCisJYWRkaXMgICByMywgMCwgMHhlZjYwCisJb3JpICAgICByMywgcjMsIDB4MDMwMyAgICAgICAgICAvKiByMyA9IFVBUlQwX0xDUiAqLworCWFkZGkgICAgcjQsIDAsIDB4MDMgICAgICAgICAgICAgLyogbjgxIGZvcm1hdCwgdHgvcnggcmVncyBlbmFibGVkICovCisJc3RiICAgICByNCwgMChyMykKIAogCS8qIG91dHB1dCBhIGZldyBsaW5lIGZlZWRzICovCiAJYWRkaQlyMywgMCwgJ1xuJwkJLyogbG9hZCBsaW5lIGZlZWQgKi8KQEAgLTYxMyw3ICs2MTIsNyBAQAogCWFkZGkJcjMsIDAsICdcbicJCS8qIGxvYWQgbGluZSBmZWVkICovCiAJYmwgCXBvc3RfcHV0YwkJLyogb3V0cHV0IHRoZSBjaGFyICovCiAKLSAgICAgICAgLyogcmVzdG9yZSBzdGFjayBhbmQgcmV0dXJuICovCisJLyogcmVzdG9yZSBzdGFjayBhbmQgcmV0dXJuICovCiAJbHd6CXIwLCArMTIocjEpCQkvKiBHZXQgc2F2ZWQgbGluayByZWdpc3RlciAqLwogCW10bHIJcjAJCQkvKiBSZXN0b3JlIGxpbmsgcmVnaXN0ZXIgKi8KIAlhZGRpCXIxLCByMSwgKzgJCS8qIFJlbW92ZSBmcmFtZSBmcm9tIHN0YWNrICovCkBAIC02MzMsNyArNjMyLDcgQEAKIAlzdHcJcjAsICsyNChyMSkJCS8qIFNhdmUgbGluayByZWdpc3RlciAqLwogCXN0bXcJcjI5LCA4KHIxKQkJLyogc2F2ZQlyMjkgLSByMzEgb24gc3RhY2sKIAkJCQkJICAgcjMxIC0gdWFydCBiYXNlIGFkZHJlc3MKLSAgICAgICAJCQkJCSAgIHIzMCAtIGRlbGF5IGNvdW50ZXIKKwkJCQkJICAgcjMwIC0gZGVsYXkgY291bnRlcgogCQkJCQkgICByMjkgLSBzY3JhdGNoIHJlZyAqLwogCiAgICAgIGFkZGlzICAgcjMxLCAwLCAweGVmNjAJCS8qIFBvaW50IHRvIHVhcnQgYmFzZSAqLwpAQCAtNjg3LDcgKzY4Niw3IEBACiAJYglwcHV0c19lbmQJCS8qIHdlcmUgb3V0YSBoZXJlICovCiBwcHV0c190ZXJtOgogCWFkZGkgCXIzLCAwLCAxCQkvKiBzZXQgc3VjY2VzcyBjb2RlICovCi0gCS8qIHJlc3RvcmUgc3RhY2sgYW5kIHJldHVybiAqLworCS8qIHJlc3RvcmUgc3RhY2sgYW5kIHJldHVybiAqLwogcHB1dHNfZW5kOgogCWx3eglyMzEsIDgocjEpCQkvKiByZXN0b3JlIHIyNyAtIHIzMSBmcm9tIHN0YWNrICovCiAJbHd6CXIwLCArMTYocjEpCQkvKiBHZXQgc2F2ZWQgbGluayByZWdpc3RlciAqLwpAQCAtNjk2LDcgKzY5NSw2IEBACiAJYmxyCQkJCS8qIFJldHVybiB0byBjYWxsaW5nIGZ1bmN0aW9uICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKglkaXNwX2hleAogICoqKioqCVJvdXRpbmUgdG8gZGlzcGxheSBhIGhleCB2YWx1ZSBmcm9tIGEgcmVnaXN0ZXIuCkBAIC03MzYsMTAgKzczNCw5IEBACiBwcHV0aF9lcnI6CiAJYWRkaSAJcjMsIDAsIC0xIAkJLyogc2V0IGVycm9yIGNvZGUgKi8KIHBwdXRoX2RvbmU6Ci0gICAgICAgIC8qIHJlc3RvcmUgc3RhY2sgYW5kIHJldHVybiAqLworCS8qIHJlc3RvcmUgc3RhY2sgYW5kIHJldHVybiAqLwogCWxtdwlyMzAsIDgocjEpCQkvKiAgcmVzdG9yZSByMzAgLSByMzEgZnJvbSBzdGFjayAqLwogCWx3eglyMCwgKzIwKHIxKQkJLyogR2V0IHNhdmVkIGxpbmsgcmVnaXN0ZXIgKi8KIAlhZGRpCXIxLCByMSwgKzE2CQkvKiBSZW1vdmUgZnJhbWUgZnJvbSBzdGFjayAqLwogCW10bHIJcjAJCQkvKiBSZXN0b3JlIGxpbmsgcmVnaXN0ZXIgKi8KIAlibHIJCQkJLyogUmV0dXJuIHRvIGNhbGxpbmcgZnVuY3Rpb24gKi8KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvdzdvL3Bvc3QyLmMgYi9ib2FyZC93N28vcG9zdDIuYwppbmRleCAyNzFjMTk3Li5lNTkwMTI4IDEwMDY0NAotLS0gYS9ib2FyZC93N28vcG9zdDIuYworKysgYi9ib2FyZC93N28vcG9zdDIuYwpAQCAtMTA2LDQgKzEwNiwzIEBACiAgICAgaWYoZHR0X3Rlc3QoNCkgIT0gMCkgbG9nX3dhcm4oRVJSX1R0ZXN0MSk7CiAjZW5kaWYgLyogQ09ORklHX0RUVF9MTTc1ICovCiB9IC8qIHBvc3QyKCkgKi8KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvdzdvL3UtYm9vdC5sZHMgYi9ib2FyZC93N28vdS1ib290LmxkcwppbmRleCA0Yzc1M2ZjLi41NTc2YWI5IDEwMDY0NAotLS0gYS9ib2FyZC93N28vdS1ib290LmxkcworKysgYi9ib2FyZC93N28vdS1ib290LmxkcwpAQCAtMTAzLDYgKzEwMywxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpkaWZmIC0tZ2l0IGEvYm9hcmQvdzdvL3UtYm9vdC5sZHMuZGVidWcgYi9ib2FyZC93N28vdS1ib290Lmxkcy5kZWJ1ZwppbmRleCA2ZjY1YWE1Li5mOTk2ZGIzIDEwMDY0NAotLS0gYS9ib2FyZC93N28vdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC93N28vdS1ib290Lmxkcy5kZWJ1ZwpAQCAtMTA2LDYgKzEwNiwxMSBAQAogICBfZWRhdGEgID0gIC47CiAgIFBST1ZJREUgKGVkYXRhID0gLik7CiAKKyAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKyAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKyAgX191X2Jvb3RfY21kX2VuZCA9IC47CisKKwogICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwogICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KICAgX19zdG9wX19fZXhfdGFibGUgPSAuOwpAQCAtMTI4LDQgKzEzMywzIEBACiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9Ci0KZGlmZiAtLWdpdCBhL2JvYXJkL3c3by92cGQuYyBiL2JvYXJkL3c3by92cGQuYwppbmRleCBjMjRiMTI3Li5mYzJjZDk4IDEwMDY0NAotLS0gYS9ib2FyZC93N28vdnBkLmMKKysrIGIvYm9hcmQvdzdvL3ZwZC5jCkBAIC00MDUsNCArNDA1LDMgQEAKIAlwcmludGYoZHNmbXQsIHNwLCAiV0UgRGF0YSBXaWR0aCIsICB2cGRJbmZvLT5mbGFzaENmZy53ZURhdGFXaWR0aCk7CiAgICAgfQogfSAvKiB2cGRfcHJpbnQoKSAqLwotCmRpZmYgLS1naXQgYS9ib2FyZC93N28vdnBkLmggYi9ib2FyZC93N28vdnBkLmgKaW5kZXggMzViYmUzZS4uMWI3MWM4ZCAxMDA2NDQKLS0tIGEvYm9hcmQvdzdvL3ZwZC5oCisrKyBiL2JvYXJkL3c3by92cGQuaApAQCAtOTMsNyArOTMsNyBAQAogCiAKICNkZWZpbmUgVlBEX0RBVEFfU0laRSAoVlBEX01BWF9FRVBST01fU0laRSAtIFNEUkFNX1NQRF9EQVRBX1NJWkUgLSBcCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodnBkX2hlYWRlcl90KSkKKwkJCXNpemVvZih2cGRfaGVhZGVyX3QpKQogdHlwZWRlZiBzdHJ1Y3QgdnBkX3MgewogICAgIHZwZF9oZWFkZXJfdCBoZWFkZXI7CiAgICAgdW5zaWduZWQgY2hhciBwYWNrZXRzW1ZQRF9EQVRBX1NJWkVdOwpAQCAtMTMyLDQgKzEzMiwzIEBACiBleHRlcm4gdm9pZCB2cGRfcHJpbnQoVlBEICp2cGRJbmZvKTsKIAogI2VuZGlmIC8qIF9WUERfSF8gKi8KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvdzdvL3c3by5jIGIvYm9hcmQvdzdvL3c3by5jCmluZGV4IGI0MDRkNjEuLmJiNTIyMzYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3c3by93N28uYworKysgYi9ib2FyZC93N28vdzdvLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgInc3by5oIgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIApAQCAtMjY4LDQgKzI2OSwzIEBACiAKIAlyZXR1cm4gKDApOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC93N28vdzdvLmggYi9ib2FyZC93N28vdzdvLmgKaW5kZXggZjBhZjJkNi4uODQ1ODE2NiAxMDA2NDQKLS0tIGEvYm9hcmQvdzdvL3c3by5oCisrKyBiL2JvYXJkL3c3by93N28uaApAQCAtOTAsNCArOTAsMyBAQAogZXh0ZXJuIHZvaWQgaW5pdF9mc2Jvb3Qodm9pZCk7CiAKICNlbmRpZiAvKiBfVzdPX0hfICovCi0KZGlmZiAtLWdpdCBhL2JvYXJkL3c3by93YXRjaGRvZy5jIGIvYm9hcmQvdzdvL3dhdGNoZG9nLmMKaW5kZXggM2ZjYTVkMy4uNGJiZDk0ZiAxMDA2NDQKLS0tIGEvYm9hcmQvdzdvL3dhdGNoZG9nLmMKKysrIGIvYm9hcmQvdzdvL3dhdGNoZG9nLmMKQEAgLTQ1LDQgKzQ1LDMgQEAKIH0gLyogaHdfd2F0Y2hkb2dfcmVzZXQoKSAqLwogCiAjZW5kaWYgLyogQ09ORklHX0hXX1dBVENIRE9HICovCi0KZGlmZiAtLWdpdCBhL2JvYXJkL3dhbG51dDQwNS9NYWtlZmlsZSBiL2JvYXJkL3dhbG51dDQwNS9NYWtlZmlsZQppbmRleCAxMmIyZmE4Li45N2Q2YTFlIDEwMDY0NAotLS0gYS9ib2FyZC93YWxudXQ0MDUvTWFrZWZpbGUKKysrIGIvYm9hcmQvd2FsbnV0NDA1L01ha2VmaWxlCkBAIC0yOSw3ICsyOSw3IEBACiBTT0JKUwk9IGluaXQubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC93YWxudXQ0MDUvZmxhc2guYyBiL2JvYXJkL3dhbG51dDQwNS9mbGFzaC5jCmluZGV4IGM5YzdjYmYuLjQ2MmMwOWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL3dhbG51dDQwNS9mbGFzaC5jCisrKyBiL2JvYXJkL3dhbG51dDQwNS9mbGFzaC5jCkBAIC02Niw4ICs2Niw4IEBACiB7CiAJdW5zaWduZWQgbG9uZyBzaXplX2IwLCBzaXplX2IxOwogCWludCBpOwotICAgICAgICB1aW50IHBiY3I7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9iMCwgYmFzZV9iMTsKKwl1aW50IHBiY3I7CisJdW5zaWduZWQgbG9uZyBiYXNlX2IwLCBiYXNlX2IxOwogCiAJLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLwogCWZvciAoaT0wOyBpPENGR19NQVhfRkxBU0hfQkFOS1M7ICsraSkgewpAQCAtMTY1LDcgKzE2NSw2IEBACiB9CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyB2b2lkIGZsYXNoX2dldF9vZmZzZXRzICh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKmluZm8pCkBAIC0xNzMsMTEgKzE3MiwxMSBAQAogCWludCBpOwogCiAJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICovCi0gICAgICAgIGlmICgoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9TU1QpIHx8CisJaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX1NTVCkgfHwKIAkgICAgKGluZm8tPmZsYXNoX2lkICA9PSBGTEFTSF9BTTA0MCkpewogCSAgICBmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspCiAJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogMHgwMDAxMDAwMCk7Ci0gICAgICAgIH0gZWxzZSB7CisJfSBlbHNlIHsKIAkgICAgaWYgKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfQlRZUEUpIHsKIAkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCiAJCWluZm8tPnN0YXJ0WzBdID0gYmFzZSArIDB4MDAwMDAwMDA7CkBAIC0yMDUsMTAgKzIwNCwxMCBAQAogdm9pZCBmbGFzaF9wcmludF9pbmZvICAoZmxhc2hfaW5mb190ICppbmZvKQogewogCWludCBpOwotICAgICAgICBpbnQgazsKLSAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIGludCBlcmFzZWQ7Ci0gICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmZsYXNoOworCWludCBrOworCWludCBzaXplOworCWludCBlcmFzZWQ7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqZmxhc2g7CiAKIAlpZiAoaW5mby0+Zmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgewogCQlwcmludGYgKCJtaXNzaW5nIG9yIHVua25vd24gRkxBU0ggdHlwZVxuIik7CkBAIC0yNTQsMjQgKzI1MywyNCBAQAogCiAJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOwogCWZvciAoaT0wOyBpPGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKGkgIT0gKGluZm8tPnNlY3Rvcl9jb3VudC0xKSkKLSAgICAgICAgICAgICAgICAgIHNpemUgPSBpbmZvLT5zdGFydFtpKzFdIC0gaW5mby0+c3RhcnRbaV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc2l6ZSA9IGluZm8tPnN0YXJ0WzBdICsgaW5mby0+c2l6ZSAtIGluZm8tPnN0YXJ0W2ldOwotICAgICAgICAgICAgICAgIGVyYXNlZCA9IDE7Ci0gICAgICAgICAgICAgICAgZmxhc2ggPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKWluZm8tPnN0YXJ0W2ldOwotICAgICAgICAgICAgICAgIHNpemUgPSBzaXplID4+IDI7ICAgICAgICAvKiBkaXZpZGUgYnkgNCBmb3IgbG9uZ3dvcmQgYWNjZXNzICovCi0gICAgICAgICAgICAgICAgZm9yIChrPTA7IGs8c2l6ZTsgaysrKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKmZsYXNoKysgIT0gMHhmZmZmZmZmZikKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcmFzZWQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfQorCQkvKgorCQkgKiBDaGVjayBpZiB3aG9sZSBzZWN0b3IgaXMgZXJhc2VkCisJCSAqLworCQlpZiAoaSAhPSAoaW5mby0+c2VjdG9yX2NvdW50LTEpKQorCQkgIHNpemUgPSBpbmZvLT5zdGFydFtpKzFdIC0gaW5mby0+c3RhcnRbaV07CisJCWVsc2UKKwkJICBzaXplID0gaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplIC0gaW5mby0+c3RhcnRbaV07CisJCWVyYXNlZCA9IDE7CisJCWZsYXNoID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilpbmZvLT5zdGFydFtpXTsKKwkJc2l6ZSA9IHNpemUgPj4gMjsgICAgICAgIC8qIGRpdmlkZSBieSA0IGZvciBsb25nd29yZCBhY2Nlc3MgKi8KKwkJZm9yIChrPTA7IGs8c2l6ZTsgaysrKQorCQkgIHsKKwkJICAgIGlmICgqZmxhc2grKyAhPSAweGZmZmZmZmZmKQorCQkgICAgICB7CisJCQllcmFzZWQgPSAwOworCQkJYnJlYWs7CisJCSAgICAgIH0KKwkJICB9CiAKIAkJaWYgKChpICUgNSkgPT0gMCkKIAkJCXByaW50ZiAoIlxuICAgIik7CkBAIC0zMDYsNyArMzA1LDcgQEAKIAlzaG9ydCBpOwogCUZMQVNIX1dPUkRfU0laRSB2YWx1ZTsKIAl1bG9uZyBiYXNlID0gKHVsb25nKWFkZHI7Ci0gICAgICAgIHZvbGF0aWxlIEZMQVNIX1dPUkRfU0laRSAqYWRkcjIgPSAoRkxBU0hfV09SRF9TSVpFICopYWRkcjsKKwl2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKmFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSAqKWFkZHI7CiAKIAkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kOiByZWFkIE1hbnVmYWN0dXJlciBJRCAqLwogCWFkZHIyW0FERFIwXSA9IChGTEFTSF9XT1JEX1NJWkUpMHgwMEFBMDBBQTsKQEAgLTMzOCwxNCArMzM3LDE0IEBACiAKICNpZmRlZiBDT05GSUdfQURDSU9QCiAJdmFsdWUgPSBhZGRyMlswXTsJCQkvKiBkZXZpY2UgSUQJCSovCi0gICAgICAgIC8qICAgICAgICBwcmludGYoIlxuZGV2X2NvZGU9JXhcbiIsIHZhbHVlKTsgKi8KKwkvKiAgICAgICAgcHJpbnRmKCJcbmRldl9jb2RlPSV4XG4iLCB2YWx1ZSk7ICovCiAjZWxzZQogCXZhbHVlID0gYWRkcjJbMV07CQkJLyogZGV2aWNlIElECQkqLwogI2VuZGlmCiAKIAlzd2l0Y2ggKHZhbHVlKSB7CiAJY2FzZSAoRkxBU0hfV09SRF9TSVpFKUFNRF9JRF9GMDQwQjoKLQkgICAgICAgIGluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNMDQwOworCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9BTTA0MDsKIAkJaW5mby0+c2VjdG9yX2NvdW50ID0gODsKIAkJaW5mby0+c2l6ZSA9IDB4MDA4MDAwMDsgLyogPT4gNTEyIGtvICovCiAJCWJyZWFrOwpAQCAtNDE2LDExICs0MTUsMTEgQEAKIAl9CiAKIAkvKiBzZXQgdXAgc2VjdG9yIHN0YXJ0IGFkZHJlc3MgdGFibGUgKi8KLSAgICAgICAgaWYgKCgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX1NTVCkgfHwKKwlpZiAoKChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fU1NUKSB8fAogCSAgICAoaW5mby0+Zmxhc2hfaWQgID09IEZMQVNIX0FNMDQwKSl7CiAJICAgIGZvciAoaSA9IDA7IGkgPCBpbmZvLT5zZWN0b3JfY291bnQ7IGkrKykKIAkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiAweDAwMDEwMDAwKTsKLSAgICAgICAgfSBlbHNlIHsKKwl9IGVsc2UgewogCSAgICBpZiAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9CVFlQRSkgewogCQkvKiBzZXQgc2VjdG9yIG9mZnNldHMgZm9yIGJvdHRvbSBib290IGJsb2NrIHR5cGUJKi8KIAkJaW5mby0+c3RhcnRbMF0gPSBiYXNlICsgMHgwMDAwMDAwMDsKQEAgLTQ1MSwxMCArNDUwLDEwIEBACiAJCWluZm8tPnByb3RlY3RbaV0gPSBhZGRyMls0XSAmIDE7CiAjZWxzZQogCQlhZGRyMiA9ICh2b2xhdGlsZSBGTEFTSF9XT1JEX1NJWkUgKikoaW5mby0+c3RhcnRbaV0pOwotICAgICAgICAgICAgICAgIGlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX1NTVCkKLSAgICAgICAgICAgICAgICAgIGluZm8tPnByb3RlY3RbaV0gPSAwOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIGluZm8tPnByb3RlY3RbaV0gPSBhZGRyMlsyXSAmIDE7CisJCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX1NTVCkKKwkJICBpbmZvLT5wcm90ZWN0W2ldID0gMDsKKwkJZWxzZQorCQkgIGluZm8tPnByb3RlY3RbaV0gPSBhZGRyMlsyXSAmIDE7CiAjZW5kaWYKIAl9CiAKQEAgLTQ2NSw5ICs0NjQsOSBAQAogI2lmIDAgLyogdGVzdC1vbmx5ICovCiAjaWZkZWYgQ09ORklHX0FEQ0lPUAogCQlhZGRyMiA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopaW5mby0+c3RhcnRbMF07Ci0gICAgICAgICAgICAgICAgYWRkcjJbQUREUjBdID0gMHhBQTsKLSAgICAgICAgICAgICAgICBhZGRyMltBRERSMV0gPSAweDU1OwotICAgICAgICAgICAgICAgIGFkZHIyW0FERFIwXSA9IDB4RjA7ICAvKiByZXNldCBiYW5rICovCisJCWFkZHIyW0FERFIwXSA9IDB4QUE7CisJCWFkZHIyW0FERFIxXSA9IDB4NTU7CisJCWFkZHIyW0FERFIwXSA9IDB4RjA7ICAvKiByZXNldCBiYW5rICovCiAjZWxzZQogCQlhZGRyMiA9IChGTEFTSF9XT1JEX1NJWkUgKilpbmZvLT5zdGFydFswXTsKIAkJKmFkZHIyID0gKEZMQVNIX1dPUkRfU0laRSkweDAwRjAwMEYwOwkvKiByZXNldCBiYW5rICovCkBAIC00ODksMTUgKzQ4OCwxNSBAQAogCXN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKICAgICBsYXN0ICA9IHN0YXJ0OwogICAgIHdoaWxlICgoYWRkclswXSAmIChGTEFTSF9XT1JEX1NJWkUpMHgwMDgwMDA4MCkgIT0gKEZMQVNIX1dPUkRfU0laRSkweDAwODAwMDgwKSB7Ci0gICAgICAgIGlmICgobm93ID0gZ2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgewotICAgICAgICAgICAgcHJpbnRmICgiVGltZW91dFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KLSAgICAgICAgaWYgKChub3cgLSBsYXN0KSA+IDEwMDApIHsgIC8qIGV2ZXJ5IHNlY29uZCAqLwotICAgICAgICAgICAgcHV0YyAoJy4nKTsKLSAgICAgICAgICAgIGxhc3QgPSBub3c7Ci0gICAgICAgIH0KKwlpZiAoKG5vdyA9IGdldF90aW1lcihzdGFydCkpID4gQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQpIHsKKwkgICAgcHJpbnRmICgiVGltZW91dFxuIik7CisJICAgIHJldHVybiAtMTsKKwl9CisJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KKwlpZiAoKG5vdyAtIGxhc3QpID4gMTAwMCkgeyAgLyogZXZlcnkgc2Vjb25kICovCisJICAgIHB1dGMgKCcuJyk7CisJICAgIGxhc3QgPSBub3c7CisJfQogICAgIH0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2JvYXJkL3dhbG51dDQwNS9pbml0LlMgYi9ib2FyZC93YWxudXQ0MDUvaW5pdC5TCmluZGV4IGQxNDE3MDcuLjcwZDAyOWEgMTAwNjQ0Ci0tLSBhL2JvYXJkL3dhbG51dDQwNS9pbml0LlMKKysrIGIvYm9hcmQvd2FsbnV0NDA1L2luaXQuUwpAQCAtNDYsNTQgKzQ2LDU0IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAKLSAgICAgCS5nbG9ibAlleHRfYnVzX2NudGxyX2luaXQKKwkuZ2xvYmwJZXh0X2J1c19jbnRscl9pbml0CiBleHRfYnVzX2NudGxyX2luaXQ6Ci0gICAgICAgIG1mbHIgICAgcjQgICAgICAgICAgICAgICAgICAgICAgLyogc2F2ZSBsaW5rIHJlZ2lzdGVyICovCi0gICAgICAgIGJsICAgICAgLi5nZXRBZGRyCisJbWZsciAgICByNCAgICAgICAgICAgICAgICAgICAgICAvKiBzYXZlIGxpbmsgcmVnaXN0ZXIgKi8KKwlibCAgICAgIC4uZ2V0QWRkcgogLi5nZXRBZGRyOgotICAgICAgICBtZmxyICAgIHIzICAgICAgICAgICAgICAgICAgICAgIC8qIGdldCBhZGRyZXNzIG9mIC4uZ2V0QWRkciAqLwotICAgICAgICBtdGxyICAgIHI0ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgbGluayByZWdpc3RlciAqLwotICAgICAgICBhZGRpICAgIHI0LDAsMTQgICAgICAgICAgICAgICAgIC8qIHNldCBjdHIgdG8gMTA7IHVzZWQgdG8gcHJlZmV0Y2ggKi8KLSAgICAgICAgbXRjdHIgICByNCAgICAgICAgICAgICAgICAgICAgICAvKiAxMCBjYWNoZSBsaW5lcyB0byBmaXQgdGhpcyBmdW5jdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluIGNhY2hlIChnaXZlcyB1cyA4eDEwPTgwIGluc3RyY3RucykgKi8KKwltZmxyICAgIHIzICAgICAgICAgICAgICAgICAgICAgIC8qIGdldCBhZGRyZXNzIG9mIC4uZ2V0QWRkciAqLworCW10bHIgICAgcjQgICAgICAgICAgICAgICAgICAgICAgLyogcmVzdG9yZSBsaW5rIHJlZ2lzdGVyICovCisJYWRkaSAgICByNCwwLDE0ICAgICAgICAgICAgICAgICAvKiBzZXQgY3RyIHRvIDEwOyB1c2VkIHRvIHByZWZldGNoICovCisJbXRjdHIgICByNCAgICAgICAgICAgICAgICAgICAgICAvKiAxMCBjYWNoZSBsaW5lcyB0byBmaXQgdGhpcyBmdW5jdGlvbiAqLworCQkJCQkvKiBpbiBjYWNoZSAoZ2l2ZXMgdXMgOHgxMD04MCBpbnN0cmN0bnMpICovCiAuLmViY2xvb3A6Ci0gICAgICAgIGljYnQgICAgcjAscjMgICAgICAgICAgICAgICAgICAgLyogcHJlZmV0Y2ggY2FjaGUgbGluZSBmb3IgYWRkciBpbiByMyAqLwotICAgICAgICBhZGRpICAgIHIzLHIzLDMyCQkvKiBtb3ZlIHRvIG5leHQgY2FjaGUgbGluZSAqLwotICAgICAgICBiZG56ICAgIC4uZWJjbG9vcCAgICAgICAgICAgICAgIC8qIGNvbnRpbnVlIGZvciAxMCBjYWNoZSBsaW5lcyAqLworCWljYnQgICAgcjAscjMgICAgICAgICAgICAgICAgICAgLyogcHJlZmV0Y2ggY2FjaGUgbGluZSBmb3IgYWRkciBpbiByMyAqLworCWFkZGkgICAgcjMscjMsMzIJCS8qIG1vdmUgdG8gbmV4dCBjYWNoZSBsaW5lICovCisJYmRueiAgICAuLmViY2xvb3AgICAgICAgICAgICAgICAvKiBjb250aW51ZSBmb3IgMTAgY2FjaGUgbGluZXMgKi8KIAotICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogRGVsYXkgdG8gZW5zdXJlIGFsbCBhY2Nlc3NlcyB0byBST00gYXJlIGNvbXBsZXRlIGJlZm9yZSBjaGFuZ2luZyAqLworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qIERlbGF5IHRvIGVuc3VyZSBhbGwgYWNjZXNzZXMgdG8gUk9NIGFyZSBjb21wbGV0ZSBiZWZvcmUgY2hhbmdpbmcgKi8KIAkvKiBiYW5rIDAgdGltaW5ncy4gMjAwdXNlYyBzaG91bGQgYmUgZW5vdWdoLiAqLwotICAgICAgICAvKiAgIDIwMCwwMDAsMDAwIChjeWNsZXMvc2VjKSBYIC4wMDAyMDAgKHNlYykgPSAweDlDNDAgY3ljbGVzICovCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCS8qICAgMjAwLDAwMCwwMDAgKGN5Y2xlcy9zZWMpIFggLjAwMDIwMCAoc2VjKSA9IDB4OUM0MCBjeWNsZXMgKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlhZGRpcwlyMywwLDB4MAotICAgICAgICBvcmkgICAgIHIzLHIzLDB4QTAwMCAgICAgICAgICAvKiBlbnN1cmUgMjAwdXNlYyBoYXZlIHBhc3NlZCBzaW5jZSByZXNldCAqLwotICAgICAgICBtdGN0ciAgIHIzCisJb3JpICAgICByMyxyMywweEEwMDAgICAgICAgICAgLyogZW5zdXJlIDIwMHVzZWMgaGF2ZSBwYXNzZWQgc2luY2UgcmVzZXQgKi8KKwltdGN0ciAgIHIzCiAuLnNwaW5scDoKLSAgICAgICAgYmRueiAgICAuLnNwaW5scCAgICAgICAgICAgICAgICAvKiBzcGluIGxvb3AgKi8KKwliZG56ICAgIC4uc3BpbmxwICAgICAgICAgICAgICAgIC8qIHNwaW4gbG9vcCAqLwogCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLyogTWVtb3J5IEJhbmsgMCAoRmxhc2ggYW5kIFNSQU0pIGluaXRpYWxpemF0aW9uICovCi0gICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgYWRkaSAgICByNCwwLHBiMGFwCi0gICAgICAgIG10ZGNyICAgZWJjY2ZnYSxyNAotICAgICAgICBhZGRpcyAgIHI0LDAsMHg5QjAxCi0gICAgICAgIG9yaSAgICAgcjQscjQsMHg1NDgwCi0gICAgICAgIG10ZGNyICAgZWJjY2ZnZCxyNAorCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBNZW1vcnkgQmFuayAwIChGbGFzaCBhbmQgU1JBTSkgaW5pdGlhbGl6YXRpb24gKi8KKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJYWRkaSAgICByNCwwLHBiMGFwCisJbXRkY3IgICBlYmNjZmdhLHI0CisJYWRkaXMgICByNCwwLDB4OUIwMQorCW9yaSAgICAgcjQscjQsMHg1NDgwCisJbXRkY3IgICBlYmNjZmdkLHI0CiAKLSAgICAgICAgYWRkaSAgICByNCwwLHBiMGNyCi0gICAgICAgIG10ZGNyICAgZWJjY2ZnYSxyNAotICAgICAgICBhZGRpcyAgIHI0LDAsMHhGRkYxICAgICAgICAgICAvKiBCQVM9MHhGRkYsQlM9MHgwKDFNQiksQlU9MHgzKFIvVyksICovCi0gICAgICAgIG9yaSAgICAgcjQscjQsMHg4MDAwICAgICAgICAgIC8qIEJXPTB4MCggOCBiaXRzKSAqLwotICAgICAgICBtdGRjciAgIGViY2NmZ2QscjQKKwlhZGRpICAgIHI0LDAscGIwY3IKKwltdGRjciAgIGViY2NmZ2EscjQKKwlhZGRpcyAgIHI0LDAsMHhGRkYxICAgICAgICAgICAvKiBCQVM9MHhGRkYsQlM9MHgwKDFNQiksQlU9MHgzKFIvVyksICovCisJb3JpICAgICByNCxyNCwweDgwMDAgICAgICAgICAgLyogQlc9MHgwKCA4IGJpdHMpICovCisJbXRkY3IgICBlYmNjZmdkLHI0CiAKLSAgICAgICAgYmxyCisJYmxyCiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb246ICAgICBzZHJhbV9pbml0ICovCiAvKiBEZXNjcmlwdGlvbjogIER1bW15IGltcGxlbWVudGF0aW9uIGhlcmUgLSBkb25lIGluIEMgbGF0ZXIgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSAgICAgICAgLmdsb2JsICBzZHJhbV9pbml0CisJLmdsb2JsICBzZHJhbV9pbml0CiBzZHJhbV9pbml0OgotICAgICAgICBibHIKKwlibHIKZGlmZiAtLWdpdCBhL2JvYXJkL3dhbG51dDQwNS91LWJvb3QubGRzIGIvYm9hcmQvd2FsbnV0NDA1L3UtYm9vdC5sZHMKaW5kZXggNzJlOTlmYy4uN2E3NWY2YSAxMDA2NDQKLS0tIGEvYm9hcmQvd2FsbnV0NDA1L3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvd2FsbnV0NDA1L3UtYm9vdC5sZHMKQEAgLTEyMSw2ICsxMjEsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL3dhbG51dDQwNS91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvd2FsbnV0NDA1L3UtYm9vdC5sZHMuZGVidWcKaW5kZXggZjRmOTc0My4uZDQ4MzQyNCAxMDA2NDQKLS0tIGEvYm9hcmQvd2FsbnV0NDA1L3UtYm9vdC5sZHMuZGVidWcKKysrIGIvYm9hcmQvd2FsbnV0NDA1L3UtYm9vdC5sZHMuZGVidWcKQEAgLTEwNiw2ICsxMDYsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyOCw0ICsxMzMsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC93YWxudXQ0MDUvd2FsbnV0NDA1LmMgYi9ib2FyZC93YWxudXQ0MDUvd2FsbnV0NDA1LmMKaW5kZXggNTk4NTA5Zi4uMWQwMmFkNCAxMDA2NDQKLS0tIGEvYm9hcmQvd2FsbnV0NDA1L3dhbG51dDQwNS5jCisrKyBiL2JvYXJkL3dhbG51dDQwNS93YWxudXQ0MDUuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAgIHRoZSBuZWNlc3NhcnkgaW5mbyBmb3IgU0RSQU0gY29udHJvbGxlciBjb25maWd1cmF0aW9uCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBsb25nIGludCBpbml0ZHJhbSAoaW50IGJvYXJkX3R5cGUpCi17CQorewogCXJldHVybiAgc3BkX3NkcmFtICgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYm9hcmQvd2VwZXAyNTAvTWFrZWZpbGUgYi9ib2FyZC93ZXBlcDI1MC9NYWtlZmlsZQppbmRleCBkNDMxNGQ3Li44MDJjY2I5IDEwMDY0NAotLS0gYS9ib2FyZC93ZXBlcDI1MC9NYWtlZmlsZQorKysgYi9ib2FyZC93ZXBlcDI1MC9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogU09CSlMJOj0gbWVtc2V0dXAubwogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC93ZXBlcDI1MC9mbGFzaC5jIGIvYm9hcmQvd2VwZXAyNTAvZmxhc2guYwppbmRleCA1YzlkMzQ2Li4yYTMyMjkwIDEwMDY0NAotLS0gYS9ib2FyZC93ZXBlcDI1MC9mbGFzaC5jCisrKyBiL2JvYXJkL3dlcGVwMjUwL2ZsYXNoLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRmICgiRXJhc2luZyBzZWN0b3IgJTJkIC4uLiAiLCBzZWN0b3IpOwogCQl9Ci0JCisKIAkJYWRkcmVzcyA9IChGTEFTSF9CVVMgKikgKGluZm8tPnN0YXJ0W3NlY3Rvcl0pOwogCiAJCSphZGRyZXNzID0gRkxBU0hfQ01EIChDRklfSU5URUxfQ01EX0JMT0NLX0VSQVNFKTsKZGlmZiAtLWdpdCBhL2JvYXJkL3dlcGVwMjUwL2ludGVsLmggYi9ib2FyZC93ZXBlcDI1MC9pbnRlbC5oCmluZGV4IGY2MjI1OTAuLjc3NDk4YjYgMTAwNjQ0Ci0tLSBhL2JvYXJkL3dlcGVwMjUwL2ludGVsLmgKKysrIGIvYm9hcmQvd2VwZXAyNTAvaW50ZWwuaApAQCAtOTcsNCArOTcsMyBAQAogI2RlZmluZQlDRklfQ0hJUE5fSU5URUxfMjhGMjU2SzE4CQkiMjhGMjU2SzE4IgogCiAjZW5kaWYgLyogRkxBU0hfSU5URUxfSCAqLwotCmRpZmYgLS1naXQgYS9ib2FyZC93ZXBlcDI1MC9tZW1zZXR1cC5TIGIvYm9hcmQvd2VwZXAyNTAvbWVtc2V0dXAuUwppbmRleCA4YTVkNDJmLi4yNmZjMGVhIDEwMDY0NAotLS0gYS9ib2FyZC93ZXBlcDI1MC9tZW1zZXR1cC5TCisrKyBiL2JvYXJkL3dlcGVwMjUwL21lbXNldHVwLlMKQEAgLTUsMTcgKzUsMTcgQEAKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgogICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICogCisgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKICAqIDAyMTExLTEzMDcsIFVTQS4KLSAqIAorICoKICAqIFdyaXR0ZW4gYnkgTWFyY2VsIFRlbGthIDxtYXJjZWxAdGVsa2Euc2s+LCAyMDAxLCAyMDAyLgogICogQ2hhbmdlcyBmb3IgVS1Cb290IFBldGVyIEZpZ3VsaSA8cGVwb3NoQGV0Yy5zaz4sIDIwMDMuCiAgKgpAQCAtMjgsNyArMjgsNyBAQAogICogICAgIFJldmlzaW9uIDEuMCwgRmVicnVhcnkgMjAwMgogICogWzNdIFNhbXN1bmcgRWxlY3Ryb25pY3MsICIxNk14MTYgU0RSQU0gNTRDU1AgSzRTNTYxNjMzQy1STChOKSIsCiAgKiAgICAgUmV2aXNpb24gMS4wLCBGZWJydWFyeSAyMDAyCi0gKiAKKyAqCiAqLwogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CkBAIC01MSw3ICs1MSw2IEBACiAJbGRyCXIwLCA9MHg0ODAwMDAwMAkJCS8qIE1DX0JBU0UgKi8KIAogCi0KIC8qIAlzdGVwIDEuYSAtIHNldHVwIE1TQ3gKICAqLwogCWxkcglyMSwgPTB4MDAwMDEyQjMJCQkvKiBNU0MwX1JSUjAoMSkgfCBNU0MwX1JETjAoMikgfCBNU0MwX1JERjAoMTEpIHwgTVNDMF9SVDAoMykgKi8KQEAgLTE0NCw0ICsxNDMsMyBAQAogLyoJU3RlcCAxMSAtIG9wdGlvbmFsIChUT0RPKSAqLwogCiAJbW92CXBjLHIxMAotCmRpZmYgLS1naXQgYS9ib2FyZC93ZXBlcDI1MC91LWJvb3QubGRzIGIvYm9hcmQvd2VwZXAyNTAvdS1ib290LmxkcwppbmRleCA0NmJlYjE1Li4zOGVjMjVmIDEwMDY0NAotLS0gYS9ib2FyZC93ZXBlcDI1MC91LWJvb3QubGRzCisrKyBiL2JvYXJkL3dlcGVwMjUwL3UtYm9vdC5sZHMKQEAgLTI2LDI5ICsyNiwzMyBAQAogRU5UUlkoX3N0YXJ0KQogU0VDVElPTlMKIHsKLSAgICAgICAgLiA9IDB4MDAwMDAwMDA7CisJLiA9IDB4MDAwMDAwMDA7CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAkudGV4dCAgICAgIDoKIAl7CiAJICBjcHUvcHhhL3N0YXJ0Lm8JKC50ZXh0KQogCSAgKigudGV4dCkKIAl9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAucm9kYXRhIDogeyAqKC5yb2RhdGEpIH0KKwkuID0gQUxJR04oNCk7CisJLnJvZGF0YSA6IHsgKigucm9kYXRhKSB9CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOwotICAgICAgICAuZGF0YSA6IHsgKiguZGF0YSkgfQorCS4gPSBBTElHTig0KTsKKwkuZGF0YSA6IHsgKiguZGF0YSkgfQogCi0gICAgICAgIC4gPSBBTElHTig0KTsKLSAgICAgICAgLmdvdCA6IHsgKiguZ290KSB9CisJLiA9IEFMSUdOKDQpOworCS5nb3QgOiB7ICooLmdvdCkgfQorCisJX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKKwkudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorCV9fdV9ib290X2NtZF9lbmQgPSAuOwogCiAJYXJtYm9vdF9lbmRfZGF0YSA9IC47CiAKLSAgICAgICAgLiA9IEFMSUdOKDQpOworCS4gPSBBTElHTig0KTsKIAlic3Nfc3RhcnQgPSAuOwotICAgICAgICAuYnNzIDogeyAqKC5ic3MpIH0KKwkuYnNzIDogeyAqKC5ic3MpIH0KIAlic3NfZW5kID0gLjsKIAogCWFybWJvb3RfZW5kID0gLjsKZGlmZiAtLWdpdCBhL2JvYXJkL3dlcGVwMjUwL3dlcGVwMjUwLmMgYi9ib2FyZC93ZXBlcDI1MC93ZXBlcDI1MC5jCmluZGV4IGViZjc1ZDcuLjA4YjFiZmQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3dlcGVwMjUwL3dlcGVwMjUwLmMKKysrIGIvYm9hcmQvd2VwZXAyNTAvd2VwZXAyNTAuYwpAQCAtMjYsNyArMjYsNyBAQAogaW50IGJvYXJkX2luaXQoIHZvaWQgKXsKICAgREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKLSAgZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IDI4ODsJCisgIGdkLT5iZC0+YmlfYXJjaF9udW1iZXIgPSAyODg7CiAgIGdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSAweGEwMDAwMDAwOwogLyoKICAqIFNldHVwIEdQSU8gc3R1ZmYgdG8gZ2V0IHNlcmlhbCB3b3JraW5nCkBAIC01OSwxMSArNTksMTEgQEAKICAgZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gV0VQX1NEUkFNXzE7CiAgIGdkLT5iZC0+YmlfZHJhbVswXS5zaXplICA9IFdFUF9TRFJBTV8xX1NJWkU7CiAjZW5kaWYKLSNpZiAoIENPTkZJR19OUl9EUkFNX0JBTktTID4gMSApICAKKyNpZiAoIENPTkZJR19OUl9EUkFNX0JBTktTID4gMSApCiAgIGdkLT5iZC0+YmlfZHJhbVsxXS5zdGFydCA9IFdFUF9TRFJBTV8yOwogICBnZC0+YmQtPmJpX2RyYW1bMV0uc2l6ZSAgPSBXRVBfU0RSQU1fMl9TSVpFOwogI2VuZGlmCi0jaWYgKCBDT05GSUdfTlJfRFJBTV9CQU5LUyA+IDIgKSAgCisjaWYgKCBDT05GSUdfTlJfRFJBTV9CQU5LUyA+IDIgKQogICBnZC0+YmQtPmJpX2RyYW1bMl0uc3RhcnQgPSBXRVBfU0RSQU1fMzsKICAgZ2QtPmJkLT5iaV9kcmFtWzJdLnNpemUgID0gV0VQX1NEUkFNXzNfU0laRTsKICNlbmRpZgpAQCAtNzEsNyArNzEsNiBAQAogICBnZC0+YmQtPmJpX2RyYW1bM10uc3RhcnQgPSBXRVBfU0RSQU1fNDsKICAgZ2QtPmJkLT5iaV9kcmFtWzNdLnNpemUgID0gV0VQX1NEUkFNXzRfU0laRTsKICNlbmRpZgotCQorCiAgIHJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9ib2FyZC93ZXN0ZWwvYW14ODYwL01ha2VmaWxlIGIvYm9hcmQvd2VzdGVsL2FteDg2MC9NYWtlZmlsZQppbmRleCAzNWI4NDI4Li43YTIwMTRkIDEwMDY0NAotLS0gYS9ib2FyZC93ZXN0ZWwvYW14ODYwL01ha2VmaWxlCisrKyBiL2JvYXJkL3dlc3RlbC9hbXg4NjAvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIE9CSlMJPSAkKEJPQVJEKS5vIGZsYXNoLm8KIAogJChMSUIpOgkuZGVwZW5kICQoT0JKUykKLQkkKEFSKSBjcnYgJEAgJF4KKwkkKEFSKSBjcnYgJEAgJChPQkpTKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3dlc3RlbC9hbXg4NjAvdS1ib290LmxkcyBiL2JvYXJkL3dlc3RlbC9hbXg4NjAvdS1ib290LmxkcwppbmRleCA0YjAxMjlmLi44NmU1ODdmIDEwMDY0NAotLS0gYS9ib2FyZC93ZXN0ZWwvYW14ODYwL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvd2VzdGVsL2FteDg2MC91LWJvb3QubGRzCkBAIC0xMDksNiArMTA5LDExIEBACiAgIF9lZGF0YSAgPSAgLjsKICAgUFJPVklERSAoZWRhdGEgPSAuKTsKIAorICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCiAgIF9fc3RhcnRfX19leF90YWJsZSA9IC47CiAgIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQogICBfX3N0b3BfX19leF90YWJsZSA9IC47CkBAIC0xMzEsNCArMTM2LDMgQEAKICAgX2VuZCA9IC4gOwogICBQUk9WSURFIChlbmQgPSAuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYm9hcmQvd2VzdGVsL2FteDg2MC91LWJvb3QubGRzLmRlYnVnIGIvYm9hcmQvd2VzdGVsL2FteDg2MC91LWJvb3QubGRzLmRlYnVnCmluZGV4IDIzNjUxMTYuLjdiODRmZDMgMTAwNjQ0Ci0tLSBhL2JvYXJkL3dlc3RlbC9hbXg4NjAvdS1ib290Lmxkcy5kZWJ1ZworKysgYi9ib2FyZC93ZXN0ZWwvYW14ODYwL3UtYm9vdC5sZHMuZGVidWcKQEAgLTEwNyw2ICsxMDcsMTEgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogCisgIF9fdV9ib290X2NtZF9zdGFydCA9IC47CisgIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9CisgIF9fdV9ib290X2NtZF9lbmQgPSAuOworCisKICAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKICAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9CiAgIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKQEAgLTEyOSw0ICsxMzQsMyBAQAogICBfZW5kID0gLiA7CiAgIFBST1ZJREUgKGVuZCA9IC4pOwogfQotCmRpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUgYi9jb21tb24vTWFrZWZpbGUKaW5kZXggZDkzZGJiMy4uM2FhOWI2NSAxMDA2NDQKLS0tIGEvY29tbW9uL01ha2VmaWxlCisrKyBiL2NvbW1vbi9NYWtlZmlsZQpAQCAtMjgsMjEgKzI4LDI0IEBACiBBT0JKUwk9CiAKIENPQkpTCT0gbWFpbi5vIGFsdGVyYS5vIGJlZGJ1Zy5vIFwKLQkgIGNtZF9hdXRvc2NyaXB0Lm8gY21kX2JlZGJ1Zy5vIGNtZF9ibXAubyBjbWRfYm9vdC5vIFwKLQkgIGNtZF9ib290bS5vIGNtZF9jYWNoZS5vIGNtZF9jb25zb2xlLm8gY21kX2RhdGUubyBcCi0JICBjbWRfZGNyLm8gY21kX2RpYWcubyBjbWRfZG9jLm8gY21kX25hbmQubyBjbWRfZHR0Lm8gXAorCSAgY21kX2F1dG9zY3JpcHQubyBcCisJICBjbWRfYmRpbmZvLm8gY21kX2JlZGJ1Zy5vIGNtZF9ibXAubyBjbWRfYm9vdC5vIGNtZF9ib290bS5vIFwKKwkgIGNtZF9jYWNoZS5vIGNtZF9jb25zb2xlLm8gXAorCSAgY21kX2RhdGUubyBjbWRfZGNyLm8gY21kX2RpYWcubyBjbWRfZG9jLm8gY21kX2R0dC5vIFwKIAkgIGNtZF9lZXByb20ubyBjbWRfZWxmLm8gXAotCSAgY21kX2ZhdC5vIGNtZF9mZGMubyBjbWRfZmRvcy5vIGNtZF9mbGFzaC5vIFwKLQkgIGNtZF9mcGdhLm8gY21kX2kyYy5vIGNtZF9pZGUubyBjbWRfaW1tYXAubyBcCi0JICBjbWRfamZmczIubyBjbWRfbG9nLm8gY21kX21lbS5vIGNtZF9taWkubyBjbWRfbWlzYy5vIFwKLQkgIGNtZF9tbWMubyBjbWRfbmV0Lm8gY21kX252ZWRpdC5vIGVudl9jb21tb24ubyBcCi0JICBlbnZfZmxhc2gubyBlbnZfZWVwcm9tLm8gZW52X252cmFtLm8gZW52X25vd2hlcmUubyBcCisJICBjbWRfZmF0Lm8gY21kX2ZkYy5vIGNtZF9mZG9zLm8gY21kX2ZsYXNoLm8gY21kX2ZwZ2EubyBcCisJICBjbWRfaTJjLm8gY21kX2lkZS5vIGNtZF9pbW1hcC5vIGNtZF9qZmZzMi5vIFwKKwkgIGNtZF9sb2FkLm8gY21kX2xvZy5vIFwKKwkgIGNtZF9tZW0ubyBjbWRfbWlpLm8gY21kX21pc2MubyBjbWRfbW1jLm8gXAorCSAgY21kX25hbmQubyBjbWRfbmV0Lm8gY21kX252ZWRpdC5vIFwKIAkgIGNtZF9wY2kubyBjbWRfcGNtY2lhLm8gY21kX3BvcnRpby5vIFwKLQkgIGNtZF9yZWdpbmZvLm8gY21kX3Njc2kubyBjbWRfdmZkLm8gY21kX3VzYi5vIFwKLQkgIGNvbW1hbmQubyBjb25zb2xlLm8gZGV2aWNlcy5vIGRsbWFsbG9jLm8gXAotCSAgZG9jZWNjLm8gZW52aXJvbm1lbnQubyBmbGFzaC5vIGZwZ2EubyBcCisJICBjbWRfcmVnaW5mby5vIGNtZF9zY3NpLm8gY21kX3NwaS5vIGNtZF91c2IubyBjbWRfdmZkLm8gXAorCSAgY29tbWFuZC5vIGNvbnNvbGUubyBkZXZpY2VzLm8gZGxtYWxsb2MubyBkb2NlY2MubyBcCisJICBlbnZpcm9ubWVudC5vIGVudl9jb21tb24ubyBcCisJICBlbnZfZmxhc2gubyBlbnZfZWVwcm9tLm8gZW52X252cmFtLm8gZW52X25vd2hlcmUubyBcCisJICBmbGFzaC5vIGZwZ2EubyBcCiAJICBodXNoLm8ga2dkYi5vIGxpc3RzLm8gbWlpcGh5YmIubyBtaWlwaHl1dGlsLm8gXAotCSAgc19yZWNvcmQubyBzb2Z0X2kyYy5vIHNvZnRfc3BpLm8gY21kX3NwaS5vIHNwYXJ0YW4yLm8gXAorCSAgc19yZWNvcmQubyBzb2Z0X2kyYy5vIHNvZnRfc3BpLm8gc3BhcnRhbjIubyBcCiAJICB1c2IubyB1c2Jfa2JkLm8gdXNiX3N0b3JhZ2UubyBcCiAJICB2aXJ0ZXgyLm8geGlsaW54Lm8KIApkaWZmIC0tZ2l0IGEvY29tbW9uL2JlZGJ1Zy5jIGIvY29tbW9uL2JlZGJ1Zy5jCmluZGV4IGZlNTRkMTcuLjY5NjZkZTcgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9iZWRidWcuYworKysgYi9jb21tb24vYmVkYnVnLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAogaW50IHByaW50X29wZXJhbmRzIF9fUCAoKHN0cnVjdCBwcGNfY3R4ICopKTsKIGludCBnZXRfb3BlcmFuZF92YWx1ZSBfX1AgKChzdHJ1Y3Qgb3Bjb2RlICosIHVuc2lnbmVkIGxvbmcsCi0JCQkJCQkJZW51bSBPUF9GSUVMRCwgdW5zaWduZWQgbG9uZyAqKSk7CisJCQkJZW51bSBPUF9GSUVMRCwgdW5zaWduZWQgbG9uZyAqKSk7CiBzdHJ1Y3Qgb3Bjb2RlICpmaW5kX29wY29kZSBfX1AgKCh1bnNpZ25lZCBsb25nKSk7CiBzdHJ1Y3Qgb3Bjb2RlICpmaW5kX29wY29kZV9ieV9uYW1lIF9fUCAoKGNoYXIgKikpOwogY2hhciAqc3ByX25hbWUgX19QICgoaW50KSk7CkBAIC0zNSw3ICszNSw3IEBACiBjaGFyICp0YnJfbmFtZSBfX1AgKChpbnQpKTsKIGludCB0YnJfdmFsdWUgX19QICgoY2hhciAqKSk7CiBpbnQgcGFyc2Vfb3BlcmFuZCBfX1AgKCh1bnNpZ25lZCBsb25nLCBzdHJ1Y3Qgb3Bjb2RlICosCi0JCQkJCQlzdHJ1Y3Qgb3BlcmFuZCAqLCBjaGFyICosIGludCAqKSk7CisJCQlzdHJ1Y3Qgb3BlcmFuZCAqLCBjaGFyICosIGludCAqKSk7CiBpbnQgZ2V0X3dvcmQgX19QICgoY2hhciAqKiwgY2hhciAqKSk7CiBsb25nIHJlYWRfbnVtYmVyIF9fUCAoKGNoYXIgKikpOwogaW50IGRvd25zdHJpbmcgX19QICgoY2hhciAqKSk7CmRpZmYgLS1naXQgYS9jb21tb24vY21kX2F1dG9zY3JpcHQuYyBiL2NvbW1vbi9jbWRfYXV0b3NjcmlwdC5jCmluZGV4IDdlNzA2YzkuLmQzZDA0YzMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfYXV0b3NjcmlwdC5jCisrKyBiL2NvbW1vbi9jbWRfYXV0b3NjcmlwdC5jCkBAIC00MCw4ICs0MCw2IEBACiAjaW5jbHVkZSA8aW1hZ2UuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KLSNpbmNsdWRlIDxjbWRfYXV0b3NjcmlwdC5oPgogI2lmIGRlZmluZWQoQ09ORklHXzh4eCkKICNpbmNsdWRlIDxtcGM4eHguaD4KICNlbmRpZgpAQCAtNDksOCArNDcsOSBAQAogI2luY2x1ZGUgPGh1c2guaD4KICNlbmRpZgogCisjZGVmaW5lIEFVVE9TQ1JJUFRfTUFHSUMJMHgwOTAxMTk2MgogI2lmIGRlZmluZWQoQ09ORklHX0FVVE9TQ1JJUFQpIHx8IFwKLQkgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQVVUT1NDUklQVCkKKwkgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQVVUT1NDUklQVCApCiAKIGV4dGVybiBpbWFnZV9oZWFkZXJfdCBoZWFkZXI7CQkvKiBmcm9tIGNtZF9ib290bS5jICovCiBpbnQKQEAgLTExOCw3ICsxMTcsNyBAQAogCW1lbW1vdmUgKGNtZCwgKGNoYXIgKilsZW5fcHRyLCBsZW4pOwogCSooY21kICsgbGVuKSA9IDA7CiAKLSNpZmRlZiBDRkdfSFVTSF9QQVJTRVIKKyNpZmRlZiBDRkdfSFVTSF9QQVJTRVIgLyo/PyAqLwogCXJjb2RlID0gcGFyc2Vfc3RyaW5nX291dGVyIChjbWQsIEZMQUdfUEFSU0VfU0VNSUNPTE9OKTsKICNlbHNlCiAJewpAQCAtMTUzLDcgKzE1Miw3IEBACiB9CiAKICNlbmRpZgkvKiBDT05GSUdfQVVUT1NDUklQVCB8fCBDRkdfQ01EX0FVVE9TQ1JJUFQgKi8KLQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0FVVE9TQ1JJUFQpCiBpbnQKIGRvX2F1dG9zY3JpcHQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQpAQCAtMTcxLDQgKzE3MCwxNCBAQAogCXJjb2RlID0gYXV0b3NjcmlwdCAoYWRkcik7CiAJcmV0dXJuIHJjb2RlOwogfQorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQVVUT1NDUklQVCkKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEFVVE9TQ1JJUFQpID0gTUtfQ01EX0VOVFJZKAorCSJhdXRvc2NyIiwgMiwgMCwJZG9fYXV0b3NjcmlwdCwKKwkiYXV0b3NjciAtIHJ1biBzY3JpcHQgZnJvbSBtZW1vcnlcbiIsCisJIlthZGRyXSAtIHJ1biBzY3JpcHQgc3RhcnRpbmcgYXQgYWRkciIKKwkiIC0gQSB2YWxpZCBhdXRvc2NyIGhlYWRlciBtdXN0IGJlIHByZXNlbnRcbiIKKyk7CiAjZW5kaWYgLyogQ0ZHX0NNRF9BVVRPU0NSSVBUICovCisKKyNlbmRpZiAvKiBDT05GSUdfQVVUT1NDUklQVCB8fCBDRkdfQ01EX0FVVE9TQ1JJUFQgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYmRpbmZvLmMgYi9jb21tb24vY21kX2JkaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNzNjZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vY21kX2JkaW5mby5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBCb290IHN1cHBvcnQKKyAqLworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQkRJKQorc3RhdGljIHZvaWQgcHJpbnRfbnVtKGNvbnN0IGNoYXIgKiwgdWxvbmcpOworCisjaWZuZGVmIENPTkZJR19BUk0JLyogUG93ZXJQQyBhbmQgb3RoZXIgKi8KKworI2lmZGVmIENPTkZJR19QUEMKK3N0YXRpYyB2b2lkIHByaW50X3N0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKK2ludCBkb19iZGluZm8gKCBjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCWludCBpOworCWJkX3QgKmJkID0gZ2QtPmJkOworCWNoYXIgYnVmWzMyXTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRfbnVtICgiYmQgYWRkcmVzcyIsICAgICh1bG9uZyliZAkJKTsKKyNlbmRpZgorCXByaW50X251bSAoIm1lbXN0YXJ0IiwJICAgIGJkLT5iaV9tZW1zdGFydAkpOworCXByaW50X251bSAoIm1lbXNpemUiLAkgICAgYmQtPmJpX21lbXNpemUJKTsKKwlwcmludF9udW0gKCJmbGFzaHN0YXJ0IiwgICAgYmQtPmJpX2ZsYXNoc3RhcnQJKTsKKwlwcmludF9udW0gKCJmbGFzaHNpemUiLAkgICAgYmQtPmJpX2ZsYXNoc2l6ZQkpOworCXByaW50X251bSAoImZsYXNob2Zmc2V0IiwgICBiZC0+YmlfZmxhc2hvZmZzZXQJKTsKKwlwcmludF9udW0gKCJzcmFtc3RhcnQiLAkgICAgYmQtPmJpX3NyYW1zdGFydAkpOworCXByaW50X251bSAoInNyYW1zaXplIiwJICAgIGJkLT5iaV9zcmFtc2l6ZQkpOworI2lmIGRlZmluZWQoQ09ORklHXzV4eCkgfHwgZGVmaW5lZChDT05GSUdfOHh4KSB8fCBkZWZpbmVkKENPTkZJR184MjYwKQorCXByaW50X251bSAoImltbXJfYmFzZSIsCSAgICBiZC0+YmlfaW1tcl9iYXNlCSk7CisjZW5kaWYKKwlwcmludF9udW0gKCJib290ZmxhZ3MiLAkgICAgYmQtPmJpX2Jvb3RmbGFncwkpOworI2lmIGRlZmluZWQoQ09ORklHXzQwNUdQKSB8fCBkZWZpbmVkKENPTkZJR180MDVDUikgfHwgZGVmaW5lZChDT05GSUdfNDA1RVApCisJcHJpbnRfc3RyICgicHJvY2ZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX3Byb2NmcmVxKSk7CisJcHJpbnRfc3RyICgicGxiX2J1c2ZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX3BsYl9idXNmcmVxKSk7CisjaWYgZGVmaW5lZChDT05GSUdfNDA1R1ApIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKQorCXByaW50X3N0ciAoInBjaV9idXNmcmVxIiwJICAgIHN0cm1oeihidWYsIGJkLT5iaV9wY2lfYnVzZnJlcSkpOworI2VuZGlmCisjZWxzZQkvKiAhIENPTkZJR180MDVHUCwgQ09ORklHXzQwNUNSLCBDT05GSUdfNDA1RVAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR184MjYwKQorCXByaW50X3N0ciAoInZjbyIsCSAgICBzdHJtaHooYnVmLCBiZC0+YmlfdmNvKSk7CisJcHJpbnRfc3RyICgic2NjZnJlcSIsCSAgICBzdHJtaHooYnVmLCBiZC0+Ymlfc2NjZnJlcSkpOworCXByaW50X3N0ciAoImJyZ2ZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX2JyZ2ZyZXEpKTsKKyNlbmRpZgorCXByaW50X3N0ciAoImludGZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX2ludGZyZXEpKTsKKyNpZiBkZWZpbmVkKENPTkZJR184MjYwKQorCXByaW50X3N0ciAoImNwbWZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX2NwbWZyZXEpKTsKKyNlbmRpZgorCXByaW50X3N0ciAoImJ1c2ZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX2J1c2ZyZXEpKTsKKyNlbmRpZiAvKiBDT05GSUdfNDA1R1AsIENPTkZJR180MDVDUiwgQ09ORklHXzQwNUVQICovCisJcHJpbnRmICgiZXRoYWRkciAgICAgPSIpOworCWZvciAoaT0wOyBpPDY7ICsraSkgeworCQlwcmludGYgKCIlYyUwMlgiLCBpID8gJzonIDogJyAnLCBiZC0+YmlfZW5ldGFkZHJbaV0pOworCX0KKyNpZmRlZiBDT05GSUdfUE42MgorCXByaW50ZiAoIlxuZXRoMWFkZHIgICAgPSIpOworCWZvciAoaT0wOyBpPDY7ICsraSkgeworCQlwcmludGYgKCIlYyUwMlgiLCBpID8gJzonIDogJyAnLCBiZC0+YmlfZW5ldDFhZGRyW2ldKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX1BONjIgKi8KKyNpZmRlZiBDT05GSUdfSEVSTUVTCisJcHJpbnRfc3RyICgiZXRoc3BlZWQiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX2V0aHNwZWVkKSk7CisjZW5kaWYKKwlwcmludGYgKCJcbklQIGFkZHIgICAgID0gIik7CXByaW50X0lQYWRkciAoYmQtPmJpX2lwX2FkZHIpOworCXByaW50ZiAoIlxuYmF1ZHJhdGUgICAgPSAlNmxkIGJwc1xuIiwgYmQtPmJpX2JhdWRyYXRlICAgKTsKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UgLyogISBQUEMsIHdoaWNoIGxlYXZlcyBNSVBTICovCisKK2ludCBkb19iZGluZm8gKCBjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCWludCBpOworCWJkX3QgKmJkID0gZ2QtPmJkOworCisJcHJpbnRfbnVtICgiYm9vdF9wYXJhbXMiLAkodWxvbmcpYmQtPmJpX2Jvb3RfcGFyYW1zKTsKKwlwcmludF9udW0gKCJtZW1zdGFydCIsCQkodWxvbmcpYmQtPmJpX21lbXN0YXJ0KTsKKwlwcmludF9udW0gKCJtZW1zaXplIiwJCSh1bG9uZyliZC0+YmlfbWVtc2l6ZSk7CisJcHJpbnRfbnVtICgiZmxhc2hzdGFydCIsCSh1bG9uZyliZC0+YmlfZmxhc2hzdGFydCk7CisJcHJpbnRfbnVtICgiZmxhc2hzaXplIiwJCSh1bG9uZyliZC0+YmlfZmxhc2hzaXplKTsKKwlwcmludF9udW0gKCJmbGFzaG9mZnNldCIsCSh1bG9uZyliZC0+YmlfZmxhc2hvZmZzZXQpOworCisJcHJpbnRmICgiZXRoYWRkciAgICAgPSIpOworCWZvciAoaT0wOyBpPDY7ICsraSkgeworCQlwcmludGYgKCIlYyUwMlgiLCBpID8gJzonIDogJyAnLCBiZC0+YmlfZW5ldGFkZHJbaV0pOworCX0KKwlwcmludGYgKCJcbmlwX2FkZHIgICAgID0gIik7CisJcHJpbnRfSVBhZGRyIChiZC0+YmlfaXBfYWRkcik7CisJcHJpbnRmICgiXG5iYXVkcmF0ZSAgICA9ICVkIGJwc1xuIiwgYmQtPmJpX2JhdWRyYXRlKTsKKworCXJldHVybiAwOworfQorI2VuZGlmICAvKiBNSVBTICovCisKKyNlbHNlCS8qIEFSTSAqLworCitpbnQgZG9fYmRpbmZvICggY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwlpbnQgaTsKKwliZF90ICpiZCA9IGdkLT5iZDsKKworCXByaW50X251bSAoImFyY2hfbnVtYmVyIiwJYmQtPmJpX2FyY2hfbnVtYmVyKTsKKwlwcmludF9udW0gKCJlbnZfdCIsCQkodWxvbmcpYmQtPmJpX2Vudik7CisJcHJpbnRfbnVtICgiYm9vdF9wYXJhbXMiLAkodWxvbmcpYmQtPmJpX2Jvb3RfcGFyYW1zKTsKKworCWZvciAoaT0wOyBpPENPTkZJR19OUl9EUkFNX0JBTktTOyArK2kpIHsKKwkJcHJpbnRfbnVtKCJEUkFNIGJhbmsiLAlpKTsKKwkJcHJpbnRfbnVtKCItPiBzdGFydCIsCWJkLT5iaV9kcmFtW2ldLnN0YXJ0KTsKKwkJcHJpbnRfbnVtKCItPiBzaXplIiwJYmQtPmJpX2RyYW1baV0uc2l6ZSk7CisJfQorCisJcHJpbnRmICgiZXRoYWRkciAgICAgPSIpOworCWZvciAoaT0wOyBpPDY7ICsraSkgeworCQlwcmludGYgKCIlYyUwMlgiLCBpID8gJzonIDogJyAnLCBiZC0+YmlfZW5ldGFkZHJbaV0pOworCX0KKwlwcmludGYgKCJcbiIKKwkJImlwX2FkZHIgICAgID0gIik7CisJcHJpbnRfSVBhZGRyIChiZC0+YmlfaXBfYWRkcik7CisJcHJpbnRmICgiXG4iCisJCSJiYXVkcmF0ZSAgICA9ICVkIGJwc1xuIiwgYmQtPmJpX2JhdWRyYXRlKTsKKworCXJldHVybiAwOworfQorCisjZW5kaWYgLyogQ09ORklHX0FSTSBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFggKi8KKworc3RhdGljIHZvaWQgcHJpbnRfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVsb25nIHZhbHVlKQoreworCXByaW50ZiAoIiUtMTJzPSAweCUwOGxYXG4iLCBuYW1lLCB2YWx1ZSk7Cit9CisKKyNpZmRlZiBDT05GSUdfUFBDCitzdGF0aWMgdm9pZCBwcmludF9zdHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3RyKQoreworCXByaW50ZiAoIiUtMTJzPSAlNnMgTUh6XG4iLCBuYW1lLCBzdHIpOworfQorI2VuZGlmCS8qIENPTkZJR19QUEMgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitjbWRfdGJsX3QgVV9CT09UX0NNRChCRElORk8pID0gIE1LX0NNRF9FTlRSWSgKKwkiYmRpbmZvIiwJMSwJMSwJZG9fYmRpbmZvLAorCSJiZGluZm8gIC0gcHJpbnQgQm9hcmQgSW5mbyBzdHJ1Y3R1cmVcbiIsCisJTlVMTAorKTsKKyNlbmRpZgkvKiBDRkdfQ01EX0JESSAqLworCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2JlZGJ1Zy5jIGIvY29tbW9uL2NtZF9iZWRidWcuYwppbmRleCBmM2I1Zjg4Li42ZWUwMWQ1IDEwMDY0NAotLS0gYS9jb21tb24vY21kX2JlZGJ1Zy5jCisrKyBiL2NvbW1vbi9jbWRfYmVkYnVnLmMKQEAgLTYsMTIgKzYsMTAgQEAKICNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxuZXQuaD4KLQotI2luY2x1ZGUgPGNtZF9iZWRidWcuaD4KKyNpbmNsdWRlIDxiZWRidWcvdHlwZS5oPgogI2luY2x1ZGUgPGJlZGJ1Zy9iZWRidWcuaD4KICNpbmNsdWRlIDxiZWRidWcvcmVncy5oPgogI2luY2x1ZGUgPGJlZGJ1Zy9wcGMuaD4KLSNpbmNsdWRlIDxlbGYuaD4KIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JFREJVRykKIApAQCAtMTEwLDggKzEwOCwxMSBAQAogICBkaXNfbGFzdF9sZW4gPSBsZW47CiAgIHJldHVybiAwOwogfSAvKiBkb19iZWRidWdfZGlzICovCi0KLQorY21kX3RibF90IFVfQk9PVF9DTUQoRElTKSA9IE1LX0NNRF9FTlRSWSgKKwkiZHMiLCAgICAgIDMsICAgICAgMSwgICAgICBkb19iZWRidWdfZGlzLAorCSJkcyAgICAgIC0gZGlzYXNzZW1ibGUgbWVtb3J5XG4iLAorCSJkcyA8YWRkcmVzcz4gWyMgaW5zdHJ1Y3Rpb25zXVxuIgorKTsKIAwKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEVudHJ5IHBvaW50IGZyb20gdGhlIGludGVycHJldGVyIHRvIHRoZSBhc3NlbWJsZXIuICBBc3NlbWJsZXMKQEAgLTE1NCw3ICsxNTUsNyBAQAogICAgICAgZWxzZQogICAgICAgewogCXByaW50ZiggIioqKiBFcnJvcjogJXMgKioqXG4iLCBhc21fZXJyb3Jfc3RyKCBhc21fZXJyICkpOwotICAgICAgICByY29kZSA9IDE7CisJcmNvZGUgPSAxOwogICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0xNjQsOCArMTY1LDExIEBACiAgIH0KICAgcmV0dXJuIHJjb2RlOwogfSAvKiBkb19iZWRidWdfYXNtICovCi0KLQorY21kX3RibF90IFVfQk9PVF9DTUQoQVNNKSA9IE1LX0NNRF9FTlRSWSgKKwkiYXMiLCAgICAgIDIsICAgICAgMCwgICAgICBkb19iZWRidWdfYXNtLAorCSJhcyAgICAgIC0gYXNzZW1ibGUgbWVtb3J5XG4iLAorCSJhcyA8YWRkcmVzcz5cbiIKKyk7CiAMCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBVc2VkIHRvIHNldCBhIGJyZWFrIHBvaW50IGZyb20gdGhlIGludGVycHJldGVyLiAgU2ltcGx5IGNhbGxzIGludG8gdGhlCkBAIC0xODAsOCArMTg0LDE0IEBACiAgICAgcmV0dXJuIDA7CiAKIH0gLyogZG9fYmVkYnVnX2JyZWFrICovCi0KLQorY21kX3RibF90IFVfQk9PVF9DTUQoQlJFQUspID0gTUtfQ01EX0VOVFJZKAorCSJicmVhayIsICAgICAgMywgICAgICAwLCAgICAgIGRvX2JlZGJ1Z19icmVhaywKKwkiYnJlYWsgICAtIHNldCBvciBjbGVhciBhIGJyZWFrcG9pbnRcbiIsCisJIiAtIFNldCBvciBjbGVhciBhIGJyZWFrcG9pbnRcbiIKKwkiYnJlYWsgPGFkZHJlc3M+IC0gQnJlYWsgYXQgYW4gYWRkcmVzc1xuIgorCSJicmVhayBvZmYgPGJwIz4gLSBEaXNhYmxlIGJyZWFrcG9pbnQuXG4iCisJImJyZWFrIHNob3cgICAgICAtIExpc3QgYnJlYWtwb2ludHMuXG4iCispOwogDAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ2FsbGVkIGZyb20gdGhlIGRlYnVnIGludGVycnVwdCByb3V0aW5lLiAgU2ltcGx5IGNhbGxzIHRoZSBDUFUtc3BlY2lmaWMKQEAgLTI3OCw4ICsyODgsMTEgQEAKICAgYnVnX2N0eC5zdG9wcGVkID0gMDsKICAgcmV0dXJuIDA7CiB9IC8qIGRvX2JlZGJ1Z19jb250aW51ZSAqLwotCi0KK2NtZF90YmxfdCBVX0JPT1RfQ01EKENPTlRJTlVFKSA9IE1LX0NNRF9FTlRSWSgKKwkiY29udGludWUiLCAgICAgIDEsICAgICAgMCwgICAgICBkb19iZWRidWdfY29udGludWUsCisJImNvbnRpbnVlLSBjb250aW51ZSBmcm9tIGEgYnJlYWtwb2ludFxuIiwKKwkiIC0gY29udGludWUgZnJvbSBhIGJyZWFrcG9pbnQuXG4iCispOwogDAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogSW50ZXJwcmV0ZXIgY29tbWFuZCB0byBjb250aW51ZSB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiwgc3RlcHBpbmcgaW50bwpAQCAtMzA3LDggKzMyMCwxMSBAQAogICBidWdfY3R4LnN0b3BwZWQgPSAwOwogICByZXR1cm4gMDsKIH0gLyogZG9fYmVkYnVnX3N0ZXAgKi8KLQotCitjbWRfdGJsX3QgVV9CT09UX0NNRChTVEVQKSA9IE1LX0NNRF9FTlRSWSgKKwkic3RlcCIsICAgICAgMSwgICAgICAxLCAgICAgIGRvX2JlZGJ1Z19zdGVwLAorCSJzdGVwICAgIC0gc2luZ2xlIHN0ZXAgZXhlY3V0aW9uLlxuIiwKKwkiIC0gc2luZ2xlIHN0ZXAgZXhlY3V0aW9uLlxuIgorKTsKIAwKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIEludGVycHJldGVyIGNvbW1hbmQgdG8gY29udGludWUgdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24sIHN0ZXBwaW5nIG92ZXIKQEAgLTMzNiw4ICszNTIsMTEgQEAKICAgYnVnX2N0eC5zdG9wcGVkID0gMDsKICAgcmV0dXJuIDA7CiB9IC8qIGRvX2JlZGJ1Z19uZXh0ICovCi0KLQorY21kX3RibF90IFVfQk9PVF9DTUQoTkVYVCkgPSBNS19DTURfRU5UUlkoCisJIm5leHQiLCAgICAgIDEsICAgICAgMSwgICAgICBkb19iZWRidWdfbmV4dCwKKwkibmV4dCAgICAtIHNpbmdsZSBzdGVwIGV4ZWN1dGlvbiwgc3RlcHBpbmcgb3ZlciBzdWJyb3V0aW5lcy5cbiIsCisJIiAtIHNpbmdsZSBzdGVwIGV4ZWN1dGlvbiwgc3RlcHBpbmcgb3ZlciBzdWJyb3V0aW5lcy5cbiIKKyk7CiAMCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBJbnRlcnByZXRlciBjb21tYW5kIHRvIHByaW50IHRoZSBjdXJyZW50IHN0YWNrLiAgVGhpcyBhc3N1bWVzIGFuIEVBQkkKQEAgLTM4Miw4ICs0MDEsMTEgQEAKICAgfQogICByZXR1cm4gMDsKIH0gLyogZG9fYmVkYnVnX3N0YWNrICovCi0KLQorY21kX3RibF90IFVfQk9PVF9DTUQoU1RBQ0spID0gTUtfQ01EX0VOVFJZKAorCSJ3aGVyZSIsICAgICAxLCAgICAgIDEsICAgICAgZG9fYmVkYnVnX3N0YWNrLAorCSJ3aGVyZSAgIC0gUHJpbnQgdGhlIHJ1bm5pbmcgc3RhY2suXG4iLAorCSIgLSBQcmludCB0aGUgcnVubmluZyBzdGFjay5cbiIKKyk7CiAMCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBJbnRlcnByZXRlciBjb21tYW5kIHRvIGR1bXAgdGhlIHJlZ2lzdGVycy4gIENhbGxzIHRoZSBDUFUtc3BlY2lmaWMKQEAgLTQwMiw4ICs0MjQsMTEgQEAKICAgc2hvd19yZWdzKCBidWdfY3R4LnJlZ3MgKTsKICAgcmV0dXJuIDA7CiB9IC8qIGRvX2JlZGJ1Z19yZHVtcCAqLwotCi0KK2NtZF90YmxfdCBVX0JPT1RfQ01EKFJEVU1QKSA9IE1LX0NNRF9FTlRSWSgKKwkicmR1bXAiLCAgICAgMSwgICAgICAxLCAgICAgIGRvX2JlZGJ1Z19yZHVtcCwKKwkicmR1bXAgICAtIFNob3cgcmVnaXN0ZXJzLlxuIiwKKwkiIC0gU2hvdyByZWdpc3RlcnMuXG4iCispOwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogI2VuZGlmCS8qIENGR19DTURfQkVEQlVHICovCiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYm9vdC5jIGIvY29tbW9uL2NtZF9ib290LmMKaW5kZXggZmVmODQ1OS4uYTBiYzA0YiAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9ib290LmMKKysrIGIvY29tbW9uL2NtZF9ib290LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yMiwxNzAgKzIyLDE2IEBACiAgKi8KIAogLyoKLSAqIEJvb3Qgc3VwcG9ydAorICogTWlzYyBib290IHN1cHBvcnQKICAqLwogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgogI2luY2x1ZGUgPGNtZF9hdXRvc2NyaXB0Lmg+Ci0jaW5jbHVkZSA8c19yZWNvcmQuaD4KICNpbmNsdWRlIDxuZXQuaD4KICNpbmNsdWRlIDxzeXNjYWxsLmg+CiAKIAotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0xPQURTKQotc3RhdGljIHVsb25nIGxvYWRfc2VyaWFsICh1bG9uZyBvZmZzZXQpOwotc3RhdGljIGludCByZWFkX3JlY29yZCAoY2hhciAqYnVmLCB1bG9uZyBsZW4pOwotIyBpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TQVZFUykKLXN0YXRpYyBpbnQgc2F2ZV9zZXJpYWwgKHVsb25nIG9mZnNldCwgdWxvbmcgc2l6ZSk7Ci1zdGF0aWMgaW50IHdyaXRlX3JlY29yZCAoY2hhciAqYnVmKTsKLSMgZW5kaWYgLyogQ0ZHX0NNRF9TQVZFUyAqLwotCi1zdGF0aWMgaW50IGRvX2VjaG8gPSAxOwotI2VuZGlmIC8qIENGR19DTURfTE9BRFMgKi8KLQotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQkRJKQotc3RhdGljIHZvaWQgcHJpbnRfbnVtKGNvbnN0IGNoYXIgKiwgdWxvbmcpOwotCi0jaWZuZGVmIENPTkZJR19BUk0JLyogUG93ZXJQQyBhbmQgb3RoZXIgKi8KLQotI2lmZGVmIENPTkZJR19QUEMKLXN0YXRpYyB2b2lkIHByaW50X3N0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci0KLWludCBkb19iZGluZm8gKCBjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQotCWludCBpOwotCWJkX3QgKmJkID0gZ2QtPmJkOwotCWNoYXIgYnVmWzMyXTsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRfbnVtICgiYmQgYWRkcmVzcyIsICAgICh1bG9uZyliZAkJKTsKLSNlbmRpZgotCXByaW50X251bSAoIm1lbXN0YXJ0IiwJICAgIGJkLT5iaV9tZW1zdGFydAkpOwotCXByaW50X251bSAoIm1lbXNpemUiLAkgICAgYmQtPmJpX21lbXNpemUJKTsKLQlwcmludF9udW0gKCJmbGFzaHN0YXJ0IiwgICAgYmQtPmJpX2ZsYXNoc3RhcnQJKTsKLQlwcmludF9udW0gKCJmbGFzaHNpemUiLAkgICAgYmQtPmJpX2ZsYXNoc2l6ZQkpOwotCXByaW50X251bSAoImZsYXNob2Zmc2V0IiwgICBiZC0+YmlfZmxhc2hvZmZzZXQJKTsKLQlwcmludF9udW0gKCJzcmFtc3RhcnQiLAkgICAgYmQtPmJpX3NyYW1zdGFydAkpOwotCXByaW50X251bSAoInNyYW1zaXplIiwJICAgIGJkLT5iaV9zcmFtc2l6ZQkpOwotI2lmIGRlZmluZWQoQ09ORklHXzV4eCkgfHwgZGVmaW5lZChDT05GSUdfOHh4KSB8fCBkZWZpbmVkKENPTkZJR184MjYwKQotCXByaW50X251bSAoImltbXJfYmFzZSIsCSAgICBiZC0+YmlfaW1tcl9iYXNlCSk7Ci0jZW5kaWYKLQlwcmludF9udW0gKCJib290ZmxhZ3MiLAkgICAgYmQtPmJpX2Jvb3RmbGFncwkpOwotI2lmIGRlZmluZWQoQ09ORklHXzQwNUdQKSB8fCBkZWZpbmVkKENPTkZJR180MDVDUikgfHwgZGVmaW5lZChDT05GSUdfNDA1RVApCi0JcHJpbnRfc3RyICgicHJvY2ZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX3Byb2NmcmVxKSk7Ci0JcHJpbnRfc3RyICgicGxiX2J1c2ZyZXEiLAkgICAgc3RybWh6KGJ1ZiwgYmQtPmJpX3BsYl9idXNmcmVxKSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfNDA1R1ApIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKQotCXByaW50X3N0ciAoInBjaV9idXNmcmVxIiwJICAgIHN0cm1oeihidWYsIGJkLT5iaV9wY2lfYnVzZnJlcSkpOwotI2VuZGlmCi0jZWxzZQotI2lmIGRlZmluZWQoQ09ORklHXzgyNjApCi0JcHJpbnRfc3RyICgidmNvIiwJICAgIHN0cm1oeihidWYsIGJkLT5iaV92Y28pKTsKLQlwcmludF9zdHIgKCJzY2NmcmVxIiwJICAgIHN0cm1oeihidWYsIGJkLT5iaV9zY2NmcmVxKSk7Ci0JcHJpbnRfc3RyICgiYnJnZnJlcSIsCSAgICBzdHJtaHooYnVmLCBiZC0+YmlfYnJnZnJlcSkpOwotI2VuZGlmCi0JcHJpbnRfc3RyICgiaW50ZnJlcSIsCSAgICBzdHJtaHooYnVmLCBiZC0+YmlfaW50ZnJlcSkpOwotI2lmIGRlZmluZWQoQ09ORklHXzgyNjApCi0JcHJpbnRfc3RyICgiY3BtZnJlcSIsCSAgICBzdHJtaHooYnVmLCBiZC0+YmlfY3BtZnJlcSkpOwotI2VuZGlmCi0JcHJpbnRfc3RyICgiYnVzZnJlcSIsCSAgICBzdHJtaHooYnVmLCBiZC0+YmlfYnVzZnJlcSkpOwotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzQwNUdQKSB8fCBkZWZpbmVkKENPTkZJR180MDVDUikgKi8KLQlwcmludGYgKCJldGhhZGRyICAgICA9Iik7Ci0JZm9yIChpPTA7IGk8NjsgKytpKSB7Ci0JCXByaW50ZiAoIiVjJTAyWCIsIGkgPyAnOicgOiAnICcsIGJkLT5iaV9lbmV0YWRkcltpXSk7Ci0JfQotI2lmZGVmIENPTkZJR19QTjYyCi0JcHJpbnRmICgiXG5ldGgxYWRkciAgICA9Iik7Ci0JZm9yIChpPTA7IGk8NjsgKytpKSB7Ci0JCXByaW50ZiAoIiVjJTAyWCIsIGkgPyAnOicgOiAnICcsIGJkLT5iaV9lbmV0MWFkZHJbaV0pOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfUE42MiAqLwotI2lmZGVmIENPTkZJR19IRVJNRVMKLQlwcmludF9zdHIgKCJldGhzcGVlZCIsCSAgICBzdHJtaHooYnVmLCBiZC0+YmlfZXRoc3BlZWQpKTsKLSNlbmRpZgotCXByaW50ZiAoIlxuSVAgYWRkciAgICAgPSAiKTsJcHJpbnRfSVBhZGRyIChiZC0+YmlfaXBfYWRkcik7Ci0JcHJpbnRmICgiXG5iYXVkcmF0ZSAgICA9ICU2bGQgYnBzXG4iLCBiZC0+YmlfYmF1ZHJhdGUgICApOwotCXJldHVybiAwOwotfQotCi0jZWxzZSAvKiBNSVBTICovCi0KLWludCBkb19iZGluZm8gKCBjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQotCWludCBpOwotCWJkX3QgKmJkID0gZ2QtPmJkOwotCi0JcHJpbnRfbnVtICgiYm9vdF9wYXJhbXMiLAkodWxvbmcpYmQtPmJpX2Jvb3RfcGFyYW1zKTsKLQlwcmludF9udW0gKCJtZW1zdGFydCIsCQkodWxvbmcpYmQtPmJpX21lbXN0YXJ0KTsKLQlwcmludF9udW0gKCJtZW1zaXplIiwJCSh1bG9uZyliZC0+YmlfbWVtc2l6ZSk7Ci0JcHJpbnRfbnVtICgiZmxhc2hzdGFydCIsCSh1bG9uZyliZC0+YmlfZmxhc2hzdGFydCk7Ci0JcHJpbnRfbnVtICgiZmxhc2hzaXplIiwJCSh1bG9uZyliZC0+YmlfZmxhc2hzaXplKTsKLQlwcmludF9udW0gKCJmbGFzaG9mZnNldCIsCSh1bG9uZyliZC0+YmlfZmxhc2hvZmZzZXQpOwotCi0JcHJpbnRmICgiZXRoYWRkciAgICAgPSIpOwotCWZvciAoaT0wOyBpPDY7ICsraSkgewotCQlwcmludGYgKCIlYyUwMlgiLCBpID8gJzonIDogJyAnLCBiZC0+YmlfZW5ldGFkZHJbaV0pOwotCX0KLQlwcmludGYgKCJcbmlwX2FkZHIgICAgID0gIik7Ci0JcHJpbnRfSVBhZGRyIChiZC0+YmlfaXBfYWRkcik7Ci0JcHJpbnRmICgiXG5iYXVkcmF0ZSAgICA9ICVkIGJwc1xuIiwgYmQtPmJpX2JhdWRyYXRlKTsKLQotCXJldHVybiAwOwotfQotI2VuZGlmICAvKiBNSVBTICovCi0KLSNlbHNlCS8qIEFSTSAqLwotCi1pbnQgZG9fYmRpbmZvICggY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0KLQlpbnQgaTsKLQliZF90ICpiZCA9IGdkLT5iZDsKLQotCXByaW50X251bSAoImFyY2hfbnVtYmVyIiwJYmQtPmJpX2FyY2hfbnVtYmVyKTsKLQlwcmludF9udW0gKCJlbnZfdCIsCQkodWxvbmcpYmQtPmJpX2Vudik7Ci0JcHJpbnRfbnVtICgiYm9vdF9wYXJhbXMiLAkodWxvbmcpYmQtPmJpX2Jvb3RfcGFyYW1zKTsKLQotCWZvciAoaT0wOyBpPENPTkZJR19OUl9EUkFNX0JBTktTOyArK2kpIHsKLQkJcHJpbnRfbnVtKCJEUkFNIGJhbmsiLAlpKTsKLQkJcHJpbnRfbnVtKCItPiBzdGFydCIsCWJkLT5iaV9kcmFtW2ldLnN0YXJ0KTsKLQkJcHJpbnRfbnVtKCItPiBzaXplIiwJYmQtPmJpX2RyYW1baV0uc2l6ZSk7Ci0JfQotCi0JcHJpbnRmICgiZXRoYWRkciAgICAgPSIpOwotCWZvciAoaT0wOyBpPDY7ICsraSkgewotCQlwcmludGYgKCIlYyUwMlgiLCBpID8gJzonIDogJyAnLCBiZC0+YmlfZW5ldGFkZHJbaV0pOwotCX0KLQlwcmludGYgKCJcbiIKLQkJImlwX2FkZHIgICAgID0gIik7Ci0JcHJpbnRfSVBhZGRyIChiZC0+YmlfaXBfYWRkcik7Ci0JcHJpbnRmICgiXG4iCi0JCSJiYXVkcmF0ZSAgICA9ICVkIGJwc1xuIiwgYmQtPmJpX2JhdWRyYXRlKTsKLQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX0FSTSBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFggKi8KLQotc3RhdGljIHZvaWQgcHJpbnRfbnVtKGNvbnN0IGNoYXIgKm5hbWUsIHVsb25nIHZhbHVlKQotewotCXByaW50ZiAoIiUtMTJzPSAweCUwOGxYXG4iLCBuYW1lLCB2YWx1ZSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUFBDCi1zdGF0aWMgdm9pZCBwcmludF9zdHIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3RyKQotewotCXByaW50ZiAoIiUtMTJzPSAlNnMgTUh6XG4iLCBuYW1lLCBzdHIpOwotfQotI2VuZGlmCS8qIENPTkZJR19QUEMgKi8KLQotI2VuZGlmCS8qIENGR19DTURfQkRJICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBpbnQgZG9fZ28gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewpAQCAtMjEyLDk0NyArNTgsMTkgQEAKIAlyZXR1cm4gcmNvZGU7CiB9CiAKLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9MT0FEUykKLWludCBkb19sb2FkX3NlcmlhbCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JdWxvbmcgb2Zmc2V0ID0gMDsKLQl1bG9uZyBhZGRyOwotCWludCBpOwotCWNoYXIgKmVudl9lY2hvOwotCWludCByY29kZSA9IDA7Ci0jaWZkZWYJQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCi0JREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0JaW50IGxvYWRfYmF1ZHJhdGUsIGN1cnJlbnRfYmF1ZHJhdGU7CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0JbG9hZF9iYXVkcmF0ZSA9IGN1cnJlbnRfYmF1ZHJhdGUgPSBnZC0+YmF1ZHJhdGU7Ci0jZW5kaWYKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEdPKSA9IE1LX0NNRF9FTlRSWSgKKwkiZ28iLCBDRkdfTUFYQVJHUywgMSwJZG9fZ28sCisJImdvICAgICAgLSBzdGFydCBhcHBsaWNhdGlvbiBhdCBhZGRyZXNzICdhZGRyJ1xuIiwKKwkiYWRkciBbYXJnIC4uLl1cbiAgICAtIHN0YXJ0IGFwcGxpY2F0aW9uIGF0IGFkZHJlc3MgJ2FkZHInXG4iCisJIiAgICAgIHBhc3NpbmcgJ2FyZycgYXMgYXJndW1lbnRzXG4iCispOwogCi0JaWYgKCgoZW52X2VjaG8gPSBnZXRlbnYoImxvYWRzX2VjaG8iKSkgIT0gTlVMTCkgJiYgKCplbnZfZWNobyA9PSAnMScpKSB7Ci0JCWRvX2VjaG8gPSAxOwotCX0gZWxzZSB7Ci0JCWRvX2VjaG8gPSAwOwotCX0KK2V4dGVybiBpbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKIAotI2lmZGVmCUNGR19MT0FEU19CQVVEX0NIQU5HRQotCWlmIChhcmdjID49IDIpIHsKLQkJb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwoYXJndlsxXSwgTlVMTCwgMTYpOwotCX0KLQlpZiAoYXJnYyA9PSAzKSB7Ci0JCWxvYWRfYmF1ZHJhdGUgPSAoaW50KXNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDEwKTsKLQotCQkvKiBkZWZhdWx0IHRvIGN1cnJlbnQgYmF1ZHJhdGUgKi8KLQkJaWYgKGxvYWRfYmF1ZHJhdGUgPT0gMCkKLQkJCWxvYWRfYmF1ZHJhdGUgPSBjdXJyZW50X2JhdWRyYXRlOwotCX0KLSNlbHNlCS8qICEgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFICovCi0JaWYgKGFyZ2MgPT0gMikgewotCQlvZmZzZXQgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxNik7Ci0JfQotI2VuZGlmCS8qIENGR19MT0FEU19CQVVEX0NIQU5HRSAqLwotCi0jaWZkZWYJQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCi0JaWYgKGxvYWRfYmF1ZHJhdGUgIT0gY3VycmVudF9iYXVkcmF0ZSkgewotCQlwcmludGYgKCIjIyBTd2l0Y2ggYmF1ZHJhdGUgdG8gJWQgYnBzIGFuZCBwcmVzcyBFTlRFUiAuLi5cbiIsCi0JCQlsb2FkX2JhdWRyYXRlKTsKLQkJdWRlbGF5KDUwMDAwKTsKLQkJZ2QtPmJhdWRyYXRlID0gbG9hZF9iYXVkcmF0ZTsKLQkJc2VyaWFsX3NldGJyZyAoKTsKLQkJdWRlbGF5KDUwMDAwKTsKLQkJZm9yICg7OykgewotCQkJaWYgKGdldGMoKSA9PSAnXHInKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotI2VuZGlmCS8qIENGR19MT0FEU19CQVVEX0NIQU5HRSAqLwotCXByaW50ZiAoIiMjIFJlYWR5IGZvciBTLVJlY29yZCBkb3dubG9hZCAuLi5cbiIpOwotCi0JYWRkciA9IGxvYWRfc2VyaWFsIChvZmZzZXQpOwotCi0JLyoKLQkgKiBHYXRoZXIgYW55IHRyYWlsaW5nIGNoYXJhY3RlcnMgKGZvciBpbnN0YW5jZSwgdGhlIF5EIHdoaWNoCi0JICogaXMgc2VudCBieSAnY3UnIGFmdGVyIHNlbmRpbmcgYSBmaWxlKSwgYW5kIGdpdmUgdGhlCi0JICogYm94IHNvbWUgdGltZSAoMTAwICogMSBtcykKLQkgKi8KLQlmb3IgKGk9MDsgaTwxMDA7ICsraSkgewotCQlpZiAoc2VyaWFsX3RzdGMoKSkgewotCQkJKHZvaWQpIHNlcmlhbF9nZXRjKCk7Ci0JCX0KLQkJdWRlbGF5KDEwMDApOwotCX0KLQotCWlmIChhZGRyID09IH4wKSB7Ci0JCXByaW50ZiAoIiMjIFMtUmVjb3JkIGRvd25sb2FkIGFib3J0ZWRcbiIpOwotCQlyY29kZSA9IDE7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmICgiIyMgU3RhcnQgQWRkciAgICAgID0gMHglMDhsWFxuIiwgYWRkcik7Ci0JCWxvYWRfYWRkciA9IGFkZHI7Ci0JfQotCi0jaWZkZWYJQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCi0JaWYgKGxvYWRfYmF1ZHJhdGUgIT0gY3VycmVudF9iYXVkcmF0ZSkgewotCQlwcmludGYgKCIjIyBTd2l0Y2ggYmF1ZHJhdGUgdG8gJWQgYnBzIGFuZCBwcmVzcyBFU0MgLi4uXG4iLAotCQkJY3VycmVudF9iYXVkcmF0ZSk7Ci0JCXVkZWxheSAoNTAwMDApOwotCQlnZC0+YmF1ZHJhdGUgPSBjdXJyZW50X2JhdWRyYXRlOwotCQlzZXJpYWxfc2V0YnJnICgpOwotCQl1ZGVsYXkgKDUwMDAwKTsKLQkJZm9yICg7OykgewotCQkJaWYgKGdldGMoKSA9PSAweDFCKSAvKiBFU0MgKi8KLQkJCQlicmVhazsKLQkJfQotCX0KLSNlbmRpZgotCXJldHVybiByY29kZTsKLX0KLQotc3RhdGljIHVsb25nCi1sb2FkX3NlcmlhbCAodWxvbmcgb2Zmc2V0KQotewotCWNoYXIJcmVjb3JkW1NSRUNfTUFYUkVDTEVOICsgMV07CS8qIGJ1ZmZlciBmb3Igb25lIFMtUmVjb3JkCSovCi0JY2hhcgliaW5idWZbU1JFQ19NQVhCSU5MRU5dOwkJLyogYnVmZmVyIGZvciBiaW5hcnkgZGF0YQkqLwotCWludAliaW5sZW47CQkJCS8qIG5vLiBvZiBkYXRhIGJ5dGVzIGluIFMtUmVjLgkqLwotCWludAl0eXBlOwkJCQkvKiByZXR1cm4gY29kZSBmb3IgcmVjb3JkIHR5cGUJKi8KLQl1bG9uZwlhZGRyOwkJCQkvKiBsb2FkIGFkZHJlc3MgZnJvbSBTLVJlY29yZAkqLwotCXVsb25nCXNpemU7CQkJCS8qIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZAkqLwotCWNoYXIJYnVmWzMyXTsKLQl1bG9uZwlzdG9yZV9hZGRyOwotCXVsb25nCXN0YXJ0X2FkZHIgPSB+MDsKLQl1bG9uZwllbmRfYWRkciAgID0gIDA7Ci0JaW50CWxpbmVfY291bnQgPSAgMDsKLQotCXdoaWxlIChyZWFkX3JlY29yZChyZWNvcmQsIFNSRUNfTUFYUkVDTEVOICsgMSkgPj0gMCkgewotCQl0eXBlID0gc3JlY19kZWNvZGUgKHJlY29yZCwgJmJpbmxlbiwgJmFkZHIsIGJpbmJ1Zik7Ci0KLQkJaWYgKHR5cGUgPCAwKSB7Ci0JCQlyZXR1cm4gKH4wKTsJCS8qIEludmFsaWQgUy1SZWNvcmQJCSovCi0JCX0KLQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBTUkVDX0RBVEEyOgotCQljYXNlIFNSRUNfREFUQTM6Ci0JCWNhc2UgU1JFQ19EQVRBNDoKLQkJICAgIHN0b3JlX2FkZHIgPSBhZGRyICsgb2Zmc2V0OwotI2lmbmRlZiBDRkdfTk9fRkxBU0gKLQkJICAgIGlmIChhZGRyMmluZm8oc3RvcmVfYWRkcikpIHsKLQkJCWludCByYzsKLQotCQkJcmMgPSBmbGFzaF93cml0ZSgodWNoYXIgKiliaW5idWYsc3RvcmVfYWRkcixiaW5sZW4pOwotCQkJaWYgKHJjICE9IDApIHsKLQkJCQlmbGFzaF9wZXJyb3IgKHJjKTsKLQkJCQlyZXR1cm4gKH4wKTsKLQkJCX0KLQkJICAgIH0gZWxzZQotI2VuZGlmCi0JCSAgICB7Ci0JCQltZW1jcHkgKChjaGFyICopKHN0b3JlX2FkZHIpLCBiaW5idWYsIGJpbmxlbik7Ci0JCSAgICB9Ci0JCSAgICBpZiAoKHN0b3JlX2FkZHIpIDwgc3RhcnRfYWRkcikKLQkJCXN0YXJ0X2FkZHIgPSBzdG9yZV9hZGRyOwotCQkgICAgaWYgKChzdG9yZV9hZGRyICsgYmlubGVuIC0gMSkgPiBlbmRfYWRkcikKLQkJCWVuZF9hZGRyID0gc3RvcmVfYWRkciArIGJpbmxlbiAtIDE7Ci0JCSAgICBicmVhazsKLQkJY2FzZSBTUkVDX0VORDI6Ci0JCWNhc2UgU1JFQ19FTkQzOgotCQljYXNlIFNSRUNfRU5ENDoKLQkJICAgIHVkZWxheSAoMTAwMDApOwotCQkgICAgc2l6ZSA9IGVuZF9hZGRyIC0gc3RhcnRfYWRkciArIDE7Ci0JCSAgICBwcmludGYgKCJcbiIKLQkJCSAgICAiIyMgRmlyc3QgTG9hZCBBZGRyID0gMHglMDhsWFxuIgotCQkJICAgICIjIyBMYXN0ICBMb2FkIEFkZHIgPSAweCUwOGxYXG4iCi0JCQkgICAgIiMjIFRvdGFsIFNpemUgICAgICA9IDB4JTA4bFggPSAlbGQgQnl0ZXNcbiIsCi0JCQkgICAgc3RhcnRfYWRkciwgZW5kX2FkZHIsIHNpemUsIHNpemUKLQkJICAgICk7Ci0JCSAgICBmbHVzaF9jYWNoZSAoYWRkciwgc2l6ZSk7Ci0JCSAgICBzcHJpbnRmKGJ1ZiwgIiVsWCIsIHNpemUpOwotCQkgICAgc2V0ZW52KCJmaWxlc2l6ZSIsIGJ1Zik7Ci0JCSAgICByZXR1cm4gKGFkZHIpOwotCQljYXNlIFNSRUNfU1RBUlQ6Ci0JCSAgICBicmVhazsKLQkJZGVmYXVsdDoKLQkJICAgIGJyZWFrOwotCQl9Ci0JCWlmICghZG9fZWNobykgewkvKiBwcmludCBhICcuJyBldmVyeSAxMDAgbGluZXMgKi8KLQkJCWlmICgoKytsaW5lX2NvdW50ICUgMTAwKSA9PSAwKQotCQkJCXB1dGMgKCcuJyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKH4wKTsJCQkvKiBEb3dubG9hZCBhYm9ydGVkCQkqLwotfQotCi1zdGF0aWMgaW50Ci1yZWFkX3JlY29yZCAoY2hhciAqYnVmLCB1bG9uZyBsZW4pCi17Ci0JY2hhciAqcDsKLQljaGFyIGM7Ci0KLQktLWxlbjsJLyogYWx3YXlzIGxlYXZlIHJvb20gZm9yIHRlcm1pbmF0aW5nICdcMCcgYnl0ZSAqLwotCi0JZm9yIChwPWJ1ZjsgcCA8IGJ1ZitsZW47ICsrcCkgewotCQljID0gc2VyaWFsX2dldGMoKTsJCS8qIHJlYWQgY2hhcmFjdGVyCQkqLwotCQlpZiAoZG9fZWNobykKLQkJCXNlcmlhbF9wdXRjIChjKTsJLyogLi4uIGFuZCBlY2hvIGl0CQkqLwotCi0JCXN3aXRjaCAoYykgewotCQljYXNlICdccic6Ci0JCWNhc2UgJ1xuJzoKLQkJCSpwID0gJ1wwJzsKLQkJCXJldHVybiAocCAtIGJ1Zik7Ci0JCWNhc2UgJ1wwJzoKLQkJY2FzZSAweDAzOgkJCS8qIF5DIC0gQ29udHJvbCBDCQkqLwotCQkJcmV0dXJuICgtMSk7Ci0JCWRlZmF1bHQ6Ci0JCQkqcCA9IGM7Ci0JCX0KLQotCSAgICAvKiBDaGVjayBmb3IgdGhlIGNvbnNvbGUgaGFuZ3VwIChpZiBhbnkgZGlmZmVyZW50IGZyb20gc2VyaWFsKSAqLwotI2lmZGVmIENPTkZJR19QUEMJLyogd2UgZG9uJ3QgaGF2ZSBzeXNjYWxsX3RibCBhbnl3aGVyZSBlbHNlICovCi0JICAgIGlmIChzeXNjYWxsX3RibFtTWVNDQUxMX0dFVENdICE9IHNlcmlhbF9nZXRjKSB7Ci0JCWlmIChjdHJsYygpKSB7Ci0JCSAgICByZXR1cm4gKC0xKTsKLQkJfQotCSAgICB9Ci0jZW5kaWYKLQl9Ci0KLQkvKiBsaW5lIHRvbyBsb25nIC0gdHJ1bmNhdGUgKi8KLQkqcCA9ICdcMCc7Ci0JcmV0dXJuIChwIC0gYnVmKTsKLX0KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NBVkVTKQotCi1pbnQgZG9fc2F2ZV9zZXJpYWwgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCXVsb25nIG9mZnNldCA9IDA7Ci0JdWxvbmcgc2l6ZSAgID0gMDsKLSNpZmRlZglDRkdfTE9BRFNfQkFVRF9DSEFOR0UKLQlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQlpbnQgc2F2ZV9iYXVkcmF0ZSwgY3VycmVudF9iYXVkcmF0ZTsKLQotCXNhdmVfYmF1ZHJhdGUgPSBjdXJyZW50X2JhdWRyYXRlID0gZ2QtPmJhdWRyYXRlOwotI2VuZGlmCi0KLQlpZiAoYXJnYyA+PSAyKSB7Ci0JCW9mZnNldCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKLQl9Ci0jaWZkZWYJQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCi0JaWYgKGFyZ2MgPj0gMykgewotCQlzaXplID0gc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTYpOwotCX0KLQlpZiAoYXJnYyA9PSA0KSB7Ci0JCXNhdmVfYmF1ZHJhdGUgPSAoaW50KXNpbXBsZV9zdHJ0b3VsKGFyZ3ZbM10sIE5VTEwsIDEwKTsKLQotCQkvKiBkZWZhdWx0IHRvIGN1cnJlbnQgYmF1ZHJhdGUgKi8KLQkJaWYgKHNhdmVfYmF1ZHJhdGUgPT0gMCkKLQkJCXNhdmVfYmF1ZHJhdGUgPSBjdXJyZW50X2JhdWRyYXRlOwotCX0KLSNlbHNlCS8qICEgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFICovCi0JaWYgKGFyZ2MgPT0gMykgewotCQlzaXplID0gc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTYpOwotCX0KLSNlbmRpZgkvKiBDRkdfTE9BRFNfQkFVRF9DSEFOR0UgKi8KLQotI2lmZGVmCUNGR19MT0FEU19CQVVEX0NIQU5HRQotCWlmIChzYXZlX2JhdWRyYXRlICE9IGN1cnJlbnRfYmF1ZHJhdGUpIHsKLQkJcHJpbnRmICgiIyMgU3dpdGNoIGJhdWRyYXRlIHRvICVkIGJwcyBhbmQgcHJlc3MgRU5URVIgLi4uXG4iLAotCQkJc2F2ZV9iYXVkcmF0ZSk7Ci0JCXVkZWxheSg1MDAwMCk7Ci0JCWdkLT5iYXVkcmF0ZSA9IHNhdmVfYmF1ZHJhdGU7Ci0JCXNlcmlhbF9zZXRicmcgKCk7Ci0JCXVkZWxheSg1MDAwMCk7Ci0JCWZvciAoOzspIHsKLQkJCWlmIChnZXRjKCkgPT0gJ1xyJykKLQkJCQlicmVhazsKLQkJfQotCX0KLSNlbmRpZgkvKiBDRkdfTE9BRFNfQkFVRF9DSEFOR0UgKi8KLQlwcmludGYgKCIjIyBSZWFkeSBmb3IgUy1SZWNvcmQgdXBsb2FkLCBwcmVzcyBFTlRFUiB0byBwcm9jZWVkIC4uLlxuIik7Ci0JZm9yICg7OykgewotCQlpZiAoZ2V0YygpID09ICdccicpCi0JCQlicmVhazsKLQl9Ci0JaWYoc2F2ZV9zZXJpYWwgKG9mZnNldCwgc2l6ZSkpIHsKLQkJcHJpbnRmICgiIyMgUy1SZWNvcmQgdXBsb2FkIGFib3J0ZWRcbiIpOwotCX0gZWxzZSB7Ci0JCXByaW50ZiAoIiMjIFMtUmVjb3JkIHVwbG9hZCBjb21wbGV0ZVxuIik7Ci0JfQotI2lmZGVmCUNGR19MT0FEU19CQVVEX0NIQU5HRQotCWlmIChzYXZlX2JhdWRyYXRlICE9IGN1cnJlbnRfYmF1ZHJhdGUpIHsKLQkJcHJpbnRmICgiIyMgU3dpdGNoIGJhdWRyYXRlIHRvICVkIGJwcyBhbmQgcHJlc3MgRVNDIC4uLlxuIiwKLQkJCShpbnQpY3VycmVudF9iYXVkcmF0ZSk7Ci0JCXVkZWxheSAoNTAwMDApOwotCQlnZC0+YmF1ZHJhdGUgPSBjdXJyZW50X2JhdWRyYXRlOwotCQlzZXJpYWxfc2V0YnJnICgpOwotCQl1ZGVsYXkgKDUwMDAwKTsKLQkJZm9yICg7OykgewotCQkJaWYgKGdldGMoKSA9PSAweDFCKSAvKiBFU0MgKi8KLQkJCQlicmVhazsKLQkJfQotCX0KLSNlbmRpZgotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIFNSRUMzX1NUQVJUCQkJCSJTMDAzMDAwMEZDXG4iCi0jZGVmaW5lIFNSRUMzX0ZPUk1BVAkJCSJTMyUwMlglMDhsWCVzJTAyWFxuIgotI2RlZmluZSBTUkVDM19FTkQJCQkJIlM3MDUwMDAwMDAwMEZBXG4iCi0jZGVmaW5lIFNSRUNfQllURVNfUEVSX1JFQ09SRAkxNgotCi1zdGF0aWMgaW50IHNhdmVfc2VyaWFsICh1bG9uZyBhZGRyZXNzLCB1bG9uZyBjb3VudCkKLXsKLQlpbnQgaSwgYywgcmVjbGVuLCBjaGVja3N1bSwgbGVuZ3RoOwotCWNoYXIgKmhleCA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKLQljaGFyCXJlY29yZFsyKlNSRUNfQllURVNfUEVSX1JFQ09SRCsxNl07CS8qIGJ1ZmZlciBmb3Igb25lIFMtUmVjb3JkCSovCi0JY2hhcglkYXRhWzIqU1JFQ19CWVRFU19QRVJfUkVDT1JEKzFdOwkvKiBidWZmZXIgZm9yIGhleCBkYXRhCSovCi0KLQlyZWNsZW4gPSAwOwotCWNoZWNrc3VtICA9IDA7Ci0KLQlpZih3cml0ZV9yZWNvcmQoU1JFQzNfU1RBUlQpKQkJCS8qIHdyaXRlIHRoZSBoZWFkZXIgKi8KLQkJcmV0dXJuICgtMSk7Ci0JZG8gewotCQlpZihjb3VudCkgewkJCQkJCS8qIGNvbGxlY3QgaGV4IGRhdGEgaW4gdGhlIGJ1ZmZlciAgKi8KLQkJCWMgPSAqKHZvbGF0aWxlIHVjaGFyKikoYWRkcmVzcyArIHJlY2xlbik7CS8qIGdldCBvbmUgYnl0ZSAgICAqLwotCQkJY2hlY2tzdW0gKz0gYzsJCQkJCQkJLyogYWNjdW11bGF0ZSBjaGVja3N1bSAqLwotCQkJZGF0YVsyKnJlY2xlbl0gICA9IGhleFsoYz4+NCkmMHgwZl07Ci0JCQlkYXRhWzIqcmVjbGVuKzFdID0gaGV4W2MgJiAweDBmXTsKLQkJCWRhdGFbMipyZWNsZW4rMl0gPSAnXDAnOwotCQkJKytyZWNsZW47Ci0JCQktLWNvdW50OwotCQl9Ci0JCWlmKHJlY2xlbiA9PSBTUkVDX0JZVEVTX1BFUl9SRUNPUkQgfHwgY291bnQgPT0gMCkgewotCQkJLyogZW5vdWdoIGRhdGEgY29sbGVjdGVkIGZvciBvbmUgcmVjb3JkOiBkdW1wIGl0ICovCi0JCQlpZihyZWNsZW4pIHsJLyogYnVpbGQgJiB3cml0ZSBhIGRhdGEgcmVjb3JkOiAqLwotCQkJCS8qIGFkZHJlc3MgKyBkYXRhICsgY2hlY2tzdW0gKi8KLQkJCQlsZW5ndGggPSA0ICsgcmVjbGVuICsgMTsKLQotCQkJCS8qIGFjY3VtdWxhdGUgbGVuZ3RoIGJ5dGVzIGludG8gY2hlY2tzdW0gKi8KLQkJCQlmb3IoaSA9IDA7IGkgPCAyOyBpKyspCi0JCQkJCWNoZWNrc3VtICs9IChsZW5ndGggPj4gKDgqaSkpICYgMHhmZjsKLQotCQkJCS8qIGFjY3VtdWxhdGUgYWRkcmVzcyBieXRlcyBpbnRvIGNoZWNrc3VtOiAqLwotCQkJCWZvcihpID0gMDsgaSA8IDQ7IGkrKykKLQkJCQkJY2hlY2tzdW0gKz0gKGFkZHJlc3MgPj4gKDgqaSkpICYgMHhmZjsKLQotCQkJCS8qIG1ha2UgcHJvcGVyIGNoZWNrc3VtIGJ5dGU6ICovCi0JCQkJY2hlY2tzdW0gPSB+Y2hlY2tzdW0gJiAweGZmOwotCi0JCQkJLyogb3V0cHV0IG9uZSByZWNvcmQ6ICovCi0JCQkJc3ByaW50ZihyZWNvcmQsIFNSRUMzX0ZPUk1BVCwgbGVuZ3RoLCBhZGRyZXNzLCBkYXRhLCBjaGVja3N1bSk7Ci0JCQkJaWYod3JpdGVfcmVjb3JkKHJlY29yZCkpCi0JCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQkJYWRkcmVzcyAgKz0gcmVjbGVuOyAgLyogaW5jcmVtZW50IGFkZHJlc3MgKi8KLQkJCWNoZWNrc3VtICA9IDA7Ci0JCQlyZWNsZW4gICAgPSAwOwotCQl9Ci0JfQotCXdoaWxlKGNvdW50KTsKLQlpZih3cml0ZV9yZWNvcmQoU1JFQzNfRU5EKSkJLyogd3JpdGUgdGhlIGZpbmFsIHJlY29yZCAqLwotCQlyZXR1cm4gKC0xKTsKLQlyZXR1cm4oMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXdyaXRlX3JlY29yZCAoY2hhciAqYnVmKQotewotCWNoYXIgYzsKLQotCXdoaWxlKChjID0gKmJ1ZisrKSkKLQkJc2VyaWFsX3B1dGMoYyk7Ci0KLQkvKiBDaGVjayBmb3IgdGhlIGNvbnNvbGUgaGFuZ3VwIChpZiBhbnkgZGlmZmVyZW50IGZyb20gc2VyaWFsKSAqLwotCi0JaWYgKGN0cmxjKCkpIHsKLQkgICAgcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0jIGVuZGlmIC8qIENGR19DTURfU0FWRVMgKi8KLQotI2VuZGlmCS8qIENGR19DTURfTE9BRFMgKi8KLQotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTE9BREIpICAvKiBsb2FkYiBjb21tYW5kIChsb2FkIGJpbmFyeSkgaW5jbHVkZWQgKi8KLQotI2RlZmluZSBYT05fQ0hBUiAgICAgICAgMTcKLSNkZWZpbmUgWE9GRl9DSEFSICAgICAgIDE5Ci0jZGVmaW5lIFNUQVJUX0NIQVIgICAgICAweDAxCi0jZGVmaW5lIEVUWF9DSEFSCTB4MDMKLSNkZWZpbmUgRU5EX0NIQVIgICAgICAgIDB4MEQKLSNkZWZpbmUgU1BBQ0UgICAgICAgICAgIDB4MjAKLSNkZWZpbmUgS19FU0NBUEUgICAgICAgIDB4MjMKLSNkZWZpbmUgU0VORF9UWVBFICAgICAgICdTJwotI2RlZmluZSBEQVRBX1RZUEUgICAgICAgJ0QnCi0jZGVmaW5lIEFDS19UWVBFICAgICAgICAnWScKLSNkZWZpbmUgTkFDS19UWVBFICAgICAgICdOJwotI2RlZmluZSBCUkVBS19UWVBFICAgICAgJ0InCi0jZGVmaW5lIHRvY2hhcih4KSAoKGNoYXIpICgoKHgpICsgU1BBQ0UpICYgMHhmZikpCi0jZGVmaW5lIHVudG9jaGFyKHgpICgoaW50KSAoKCh4KSAtIFNQQUNFKSAmIDB4ZmYpKQotCi1leHRlcm4gaW50IG9zX2RhdGFfY291bnQ7Ci1leHRlcm4gaW50IG9zX2RhdGFfaGVhZGVyWzhdOwotCi1zdGF0aWMgdm9pZCBzZXRfa2VybV9iaW5fbW9kZSh1bnNpZ25lZCBsb25nICopOwotc3RhdGljIGludCBrX3JlY3Yodm9pZCk7Ci1zdGF0aWMgdWxvbmcgbG9hZF9zZXJpYWxfYmluICh1bG9uZyBvZmZzZXQpOwotCi0KLWNoYXIgaGlzX2VvbDsgICAgICAgIC8qIGNoYXJhY3RlciBoZSBuZWVkcyBhdCBlbmQgb2YgcGFja2V0ICovCi1pbnQgIGhpc19wYWRfY291bnQ7ICAvKiBudW1iZXIgb2YgcGFkIGNoYXJzIGhlIG5lZWRzICovCi1jaGFyIGhpc19wYWRfY2hhcjsgICAvKiBwYWQgY2hhcnMgaGUgbmVlZHMgKi8KLWNoYXIgaGlzX3F1b3RlOyAgICAgIC8qIHF1b3RlIGNoYXJzIGhlJ2xsIHVzZSAqLwotCi1pbnQgZG9fbG9hZF9zZXJpYWxfYmluIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQotCXVsb25nIG9mZnNldCA9IDA7Ci0JdWxvbmcgYWRkcjsKLQlpbnQgbG9hZF9iYXVkcmF0ZSwgY3VycmVudF9iYXVkcmF0ZTsKLQlpbnQgcmNvZGUgPSAwOwotCWNoYXIgKnM7Ci0KLQkvKiBwcmUtc2V0IG9mZnNldCBmcm9tIENGR19MT0FEX0FERFIgKi8KLQlvZmZzZXQgPSBDRkdfTE9BRF9BRERSOwotCi0JLyogcHJlLXNldCBvZmZzZXQgZnJvbSAkbG9hZGFkZHIgKi8KLQlpZiAoKHMgPSBnZXRlbnYoImxvYWRhZGRyIikpICE9IE5VTEwpIHsKLQkJb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwocywgTlVMTCwgMTYpOwotCX0KLQotCWxvYWRfYmF1ZHJhdGUgPSBjdXJyZW50X2JhdWRyYXRlID0gZ2QtPmJhdWRyYXRlOwotCi0JaWYgKGFyZ2MgPj0gMikgewotCQlvZmZzZXQgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxNik7Ci0JfQotCWlmIChhcmdjID09IDMpIHsKLQkJbG9hZF9iYXVkcmF0ZSA9IChpbnQpc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTApOwotCi0JCS8qIGRlZmF1bHQgdG8gY3VycmVudCBiYXVkcmF0ZSAqLwotCQlpZiAobG9hZF9iYXVkcmF0ZSA9PSAwKQotCQkJbG9hZF9iYXVkcmF0ZSA9IGN1cnJlbnRfYmF1ZHJhdGU7Ci0JfQotCi0JaWYgKGxvYWRfYmF1ZHJhdGUgIT0gY3VycmVudF9iYXVkcmF0ZSkgewotCQlwcmludGYgKCIjIyBTd2l0Y2ggYmF1ZHJhdGUgdG8gJWQgYnBzIGFuZCBwcmVzcyBFTlRFUiAuLi5cbiIsCi0JCQlsb2FkX2JhdWRyYXRlKTsKLQkJdWRlbGF5KDUwMDAwKTsKLQkJZ2QtPmJhdWRyYXRlID0gbG9hZF9iYXVkcmF0ZTsKLQkJc2VyaWFsX3NldGJyZyAoKTsKLQkJdWRlbGF5KDUwMDAwKTsKLQkJZm9yICg7OykgewotCQkJaWYgKGdldGMoKSA9PSAnXHInKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcHJpbnRmICgiIyMgUmVhZHkgZm9yIGJpbmFyeSAoa2VybWl0KSBkb3dubG9hZCAiCi0JCSJ0byAweCUwOGxYIGF0ICVkIGJwcy4uLlxuIiwKLQkJb2Zmc2V0LAotCQljdXJyZW50X2JhdWRyYXRlKTsKLQlhZGRyID0gbG9hZF9zZXJpYWxfYmluIChvZmZzZXQpOwotCi0JaWYgKGFkZHIgPT0gfjApIHsKLQkJbG9hZF9hZGRyID0gMDsKLQkJcHJpbnRmICgiIyMgQmluYXJ5IChrZXJtaXQpIGRvd25sb2FkIGFib3J0ZWRcbiIpOwotCQlyY29kZSA9IDE7Ci0JfSBlbHNlIHsKLQkJcHJpbnRmICgiIyMgU3RhcnQgQWRkciAgICAgID0gMHglMDhsWFxuIiwgYWRkcik7Ci0JCWxvYWRfYWRkciA9IGFkZHI7Ci0JfQotCi0JaWYgKGxvYWRfYmF1ZHJhdGUgIT0gY3VycmVudF9iYXVkcmF0ZSkgewotCQlwcmludGYgKCIjIyBTd2l0Y2ggYmF1ZHJhdGUgdG8gJWQgYnBzIGFuZCBwcmVzcyBFU0MgLi4uXG4iLAotCQkJY3VycmVudF9iYXVkcmF0ZSk7Ci0JCXVkZWxheSAoNTAwMDApOwotCQlnZC0+YmF1ZHJhdGUgPSBjdXJyZW50X2JhdWRyYXRlOwotCQlzZXJpYWxfc2V0YnJnICgpOwotCQl1ZGVsYXkgKDUwMDAwKTsKLQkJZm9yICg7OykgewotCQkJaWYgKGdldGMoKSA9PSAweDFCKSAvKiBFU0MgKi8KLQkJCQlicmVhazsKLQkJfQotCX0KLQotI2lmZGVmIENPTkZJR19BVVRPU0NSSVBUCi0JaWYgKGxvYWRfYWRkcikgewotCQljaGFyICpzOwotCi0JCWlmICgoKHMgPSBnZXRlbnYoImF1dG9zY3JpcHQiKSkgIT0gTlVMTCkgJiYgKHN0cmNtcChzLCJ5ZXMiKSA9PSAwKSkgewotCQkJcHJpbnRmKCJSdW5uaW5nIGF1dG9zY3JpcHQgYXQgYWRkciAweCUwOGxYIC4uLlxuIiwgbG9hZF9hZGRyKTsKLQkJCXJjb2RlID0gYXV0b3NjcmlwdCAobG9hZF9hZGRyKTsKLQkJfQotCX0KLSNlbmRpZgotCXJldHVybiByY29kZTsKLX0KLQotCi1zdGF0aWMgdWxvbmcgbG9hZF9zZXJpYWxfYmluICh1bG9uZyBvZmZzZXQpCi17Ci0JaW50IHNpemUsIGk7Ci0JY2hhciBidWZbMzJdOwotCi0Jc2V0X2tlcm1fYmluX21vZGUgKCh1bG9uZyAqKSBvZmZzZXQpOwotCXNpemUgPSBrX3JlY3YgKCk7Ci0KLQkvKgotCSAqIEdhdGhlciBhbnkgdHJhaWxpbmcgY2hhcmFjdGVycyAoZm9yIGluc3RhbmNlLCB0aGUgXkQgd2hpY2gKLQkgKiBpcyBzZW50IGJ5ICdjdScgYWZ0ZXIgc2VuZGluZyBhIGZpbGUpLCBhbmQgZ2l2ZSB0aGUKLQkgKiBib3ggc29tZSB0aW1lICgxMDAgKiAxIG1zKQotCSAqLwotCWZvciAoaT0wOyBpPDEwMDsgKytpKSB7Ci0JCWlmIChzZXJpYWxfdHN0YygpKSB7Ci0JCQkodm9pZCkgc2VyaWFsX2dldGMoKTsKLQkJfQotCQl1ZGVsYXkoMTAwMCk7Ci0JfQotCQotCWZsdXNoX2NhY2hlIChvZmZzZXQsIHNpemUpOwotCi0JcHJpbnRmKCIjIyBUb3RhbCBTaXplICAgICAgPSAweCUwOHggPSAlZCBCeXRlc1xuIiwgc2l6ZSwgc2l6ZSk7Ci0Jc3ByaW50ZihidWYsICIlWCIsIHNpemUpOwotCXNldGVudigiZmlsZXNpemUiLCBidWYpOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotdm9pZCBzZW5kX3BhZCAodm9pZCkKLXsKLQlpbnQgY291bnQgPSBoaXNfcGFkX2NvdW50OwotCi0Jd2hpbGUgKGNvdW50LS0gPiAwKQotCQlzZXJpYWxfcHV0YyAoaGlzX3BhZF9jaGFyKTsKLX0KLQotLyogY29udmVydHMgZXNjYXBlZCBrZXJtaXQgY2hhciB0byBiaW5hcnkgY2hhciAqLwotY2hhciBrdHJhbnMgKGNoYXIgaW4pCi17Ci0JaWYgKChpbiAmIDB4NjApID09IDB4NDApIHsKLQkJcmV0dXJuIChjaGFyKSAoaW4gJiB+MHg0MCk7Ci0JfSBlbHNlIGlmICgoaW4gJiAweDdmKSA9PSAweDNmKSB7Ci0JCXJldHVybiAoY2hhcikgKGluIHwgMHg0MCk7Ci0JfSBlbHNlCi0JCXJldHVybiBpbjsKLX0KLQotaW50IGNoazEgKGNoYXIgKmJ1ZmZlcikKLXsKLQlpbnQgdG90YWwgPSAwOwotCi0Jd2hpbGUgKCpidWZmZXIpIHsKLQkJdG90YWwgKz0gKmJ1ZmZlcisrOwotCX0KLQlyZXR1cm4gKGludCkgKCh0b3RhbCArICgodG90YWwgPj4gNikgJiAweDAzKSkgJiAweDNmKTsKLX0KLQotdm9pZCBzMV9zZW5kcGFja2V0IChjaGFyICpwYWNrZXQpCi17Ci0Jc2VuZF9wYWQgKCk7Ci0Jd2hpbGUgKCpwYWNrZXQpIHsKLQkJc2VyaWFsX3B1dGMgKCpwYWNrZXQrKyk7Ci0JfQotfQotCi1zdGF0aWMgY2hhciBhX2JbMjRdOwotdm9pZCBzZW5kX2FjayAoaW50IG4pCi17Ci0JYV9iWzBdID0gU1RBUlRfQ0hBUjsKLQlhX2JbMV0gPSB0b2NoYXIgKDMpOwotCWFfYlsyXSA9IHRvY2hhciAobik7Ci0JYV9iWzNdID0gQUNLX1RZUEU7Ci0JYV9iWzRdID0gJ1wwJzsKLQlhX2JbNF0gPSB0b2NoYXIgKGNoazEgKCZhX2JbMV0pKTsKLQlhX2JbNV0gPSBoaXNfZW9sOwotCWFfYls2XSA9ICdcMCc7Ci0JczFfc2VuZHBhY2tldCAoYV9iKTsKLX0KLQotdm9pZCBzZW5kX25hY2sgKGludCBuKQotewotCWFfYlswXSA9IFNUQVJUX0NIQVI7Ci0JYV9iWzFdID0gdG9jaGFyICgzKTsKLQlhX2JbMl0gPSB0b2NoYXIgKG4pOwotCWFfYlszXSA9IE5BQ0tfVFlQRTsKLQlhX2JbNF0gPSAnXDAnOwotCWFfYls0XSA9IHRvY2hhciAoY2hrMSAoJmFfYlsxXSkpOwotCWFfYls1XSA9IGhpc19lb2w7Ci0JYV9iWzZdID0gJ1wwJzsKLQlzMV9zZW5kcGFja2V0IChhX2IpOwotfQotCi0KLQotLyogb3NfZGF0YV8qIHRha2VzIGFuIE9TIE9wZW4gaW1hZ2UgYW5kIHB1dHMgaXQgaW50byBtZW1vcnksIGFuZAotICAgcHV0cyB0aGUgYm9vdCBoZWFkZXIgaW4gYW4gYXJyYXkgbmFtZWQgb3NfZGF0YV9oZWFkZXIKLQotICAgaWYgaW1hZ2UgaXMgYmluYXJ5LCBubyBoZWFkZXIgaXMgc3RvcmVkIGluIG9zX2RhdGFfaGVhZGVyLgotKi8KLXZvaWQgKCpvc19kYXRhX2luaXQpICh2b2lkKTsKLXZvaWQgKCpvc19kYXRhX2NoYXIpIChjaGFyIG5ld19jaGFyKTsKLXN0YXRpYyBpbnQgb3NfZGF0YV9zdGF0ZSwgb3NfZGF0YV9zdGF0ZV9zYXZlZDsKLWludCBvc19kYXRhX2NvdW50Owotc3RhdGljIGludCBvc19kYXRhX2NvdW50X3NhdmVkOwotc3RhdGljIGNoYXIgKm9zX2RhdGFfYWRkciwgKm9zX2RhdGFfYWRkcl9zYXZlZDsKLXN0YXRpYyBjaGFyICpiaW5fc3RhcnRfYWRkcmVzczsKLWludCBvc19kYXRhX2hlYWRlcls4XTsKLXN0YXRpYyB2b2lkIGJpbl9kYXRhX2luaXQgKHZvaWQpCi17Ci0Jb3NfZGF0YV9zdGF0ZSA9IDA7Ci0Jb3NfZGF0YV9jb3VudCA9IDA7Ci0Jb3NfZGF0YV9hZGRyID0gYmluX3N0YXJ0X2FkZHJlc3M7Ci19Ci1zdGF0aWMgdm9pZCBvc19kYXRhX3NhdmUgKHZvaWQpCi17Ci0Jb3NfZGF0YV9zdGF0ZV9zYXZlZCA9IG9zX2RhdGFfc3RhdGU7Ci0Jb3NfZGF0YV9jb3VudF9zYXZlZCA9IG9zX2RhdGFfY291bnQ7Ci0Jb3NfZGF0YV9hZGRyX3NhdmVkID0gb3NfZGF0YV9hZGRyOwotfQotc3RhdGljIHZvaWQgb3NfZGF0YV9yZXN0b3JlICh2b2lkKQotewotCW9zX2RhdGFfc3RhdGUgPSBvc19kYXRhX3N0YXRlX3NhdmVkOwotCW9zX2RhdGFfY291bnQgPSBvc19kYXRhX2NvdW50X3NhdmVkOwotCW9zX2RhdGFfYWRkciA9IG9zX2RhdGFfYWRkcl9zYXZlZDsKLX0KLXN0YXRpYyB2b2lkIGJpbl9kYXRhX2NoYXIgKGNoYXIgbmV3X2NoYXIpCi17Ci0Jc3dpdGNoIChvc19kYXRhX3N0YXRlKSB7Ci0JY2FzZSAwOgkJCQkJLyogZGF0YSAqLwotCQkqb3NfZGF0YV9hZGRyKysgPSBuZXdfY2hhcjsKLQkJLS1vc19kYXRhX2NvdW50OwotCQlicmVhazsKLQl9Ci19Ci1zdGF0aWMgdm9pZCBzZXRfa2VybV9iaW5fbW9kZSAodW5zaWduZWQgbG9uZyAqYWRkcikKLXsKLQliaW5fc3RhcnRfYWRkcmVzcyA9IChjaGFyICopIGFkZHI7Ci0Jb3NfZGF0YV9pbml0ID0gYmluX2RhdGFfaW5pdDsKLQlvc19kYXRhX2NoYXIgPSBiaW5fZGF0YV9jaGFyOwotfQotCi0KLS8qIGtfZGF0YV8qIHNpbXBseSBoYW5kbGVzIHRoZSBrZXJtaXQgZXNjYXBlIHRyYW5zbGF0aW9ucyAqLwotc3RhdGljIGludCBrX2RhdGFfZXNjYXBlLCBrX2RhdGFfZXNjYXBlX3NhdmVkOwotdm9pZCBrX2RhdGFfaW5pdCAodm9pZCkKLXsKLQlrX2RhdGFfZXNjYXBlID0gMDsKLQlvc19kYXRhX2luaXQgKCk7Ci19Ci12b2lkIGtfZGF0YV9zYXZlICh2b2lkKQotewotCWtfZGF0YV9lc2NhcGVfc2F2ZWQgPSBrX2RhdGFfZXNjYXBlOwotCW9zX2RhdGFfc2F2ZSAoKTsKLX0KLXZvaWQga19kYXRhX3Jlc3RvcmUgKHZvaWQpCi17Ci0Ja19kYXRhX2VzY2FwZSA9IGtfZGF0YV9lc2NhcGVfc2F2ZWQ7Ci0Jb3NfZGF0YV9yZXN0b3JlICgpOwotfQotdm9pZCBrX2RhdGFfY2hhciAoY2hhciBuZXdfY2hhcikKLXsKLQlpZiAoa19kYXRhX2VzY2FwZSkgewotCQkvKiBsYXN0IGNoYXIgd2FzIGVzY2FwZSAtIHRyYW5zbGF0ZSB0aGlzIGNoYXJhY3RlciAqLwotCQlvc19kYXRhX2NoYXIgKGt0cmFucyAobmV3X2NoYXIpKTsKLQkJa19kYXRhX2VzY2FwZSA9IDA7Ci0JfSBlbHNlIHsKLQkJaWYgKG5ld19jaGFyID09IGhpc19xdW90ZSkgewotCQkJLyogdGhpcyBjaGFyIGlzIGVzY2FwZSAtIHJlbWVtYmVyICovCi0JCQlrX2RhdGFfZXNjYXBlID0gMTsKLQkJfSBlbHNlIHsKLQkJCS8qIG90aGVyd2lzZSBzZW5kIHRoaXMgY2hhciBhcy1pcyAqLwotCQkJb3NfZGF0YV9jaGFyIChuZXdfY2hhcik7Ci0JCX0KLQl9Ci19Ci0KLSNkZWZpbmUgU0VORF9EQVRBX1NJWkUgIDIwCi1jaGFyIHNlbmRfcGFybXNbU0VORF9EQVRBX1NJWkVdOwotY2hhciAqc2VuZF9wdHI7Ci0KLS8qIGhhbmRsZV9zZW5kX3BhY2tldCBpbnRlcnByaXRzIHRoZSBwcm90b2NvbCBpbmZvIGFuZCBidWlsZHMgYW5kCi0gICBzZW5kcyBhbiBhcHByb3ByaWF0ZSBhY2sgZm9yIHdoYXQgd2UgY2FuIGRvICovCi12b2lkIGhhbmRsZV9zZW5kX3BhY2tldCAoaW50IG4pCi17Ci0JaW50IGxlbmd0aCA9IDM7Ci0JaW50IGJ5dGVzOwotCi0JLyogaW5pdGlhbGl6ZSBzb21lIHByb3RvY29sIHBhcmFtZXRlcnMgKi8KLQloaXNfZW9sID0gRU5EX0NIQVI7CQkvKiBkZWZhdWx0IGVuZCBvZiBsaW5lIGNoYXJhY3RlciAqLwotCWhpc19wYWRfY291bnQgPSAwOwotCWhpc19wYWRfY2hhciA9ICdcMCc7Ci0JaGlzX3F1b3RlID0gS19FU0NBUEU7Ci0KLQkvKiBpZ25vcmUgbGFzdCBjaGFyYWN0ZXIgaWYgaXQgZmlsbGVkIHRoZSBidWZmZXIgKi8KLQlpZiAoc2VuZF9wdHIgPT0gJnNlbmRfcGFybXNbU0VORF9EQVRBX1NJWkUgLSAxXSkKLQkJLS1zZW5kX3B0cjsKLQlieXRlcyA9IHNlbmRfcHRyIC0gc2VuZF9wYXJtczsJLyogaG93IG1hbnkgYnl0ZXMgd2UnbGwgcHJvY2VzcyAqLwotCWRvIHsKLQkJaWYgKGJ5dGVzLS0gPD0gMCkKLQkJCWJyZWFrOwotCQkvKiBoYW5kbGUgTUFYTCAtIG1heCBsZW5ndGggKi8KLQkJLyogaWdub3JlIHdoYXQgaGUgc2F5cyAtIG1vc3QgSSdsbCB0YWtlIChoZXJlKSBpcyA5NCAqLwotCQlhX2JbKytsZW5ndGhdID0gdG9jaGFyICg5NCk7Ci0JCWlmIChieXRlcy0tIDw9IDApCi0JCQlicmVhazsKLQkJLyogaGFuZGxlIFRJTUUgLSB0aW1lIHlvdSBzaG91bGQgd2FpdCBmb3IgbXkgcGFja2V0cyAqLwotCQkvKiBpZ25vcmUgd2hhdCBoZSBzYXlzIC0gZG9uJ3Qgd2FpdCBmb3IgbXkgYWNrIGxvbmdlciB0aGFuIDEgc2Vjb25kICovCi0JCWFfYlsrK2xlbmd0aF0gPSB0b2NoYXIgKDEpOwotCQlpZiAoYnl0ZXMtLSA8PSAwKQotCQkJYnJlYWs7Ci0JCS8qIGhhbmRsZSBOUEFEIC0gbnVtYmVyIG9mIHBhZCBjaGFycyBJIG5lZWQgKi8KLQkJLyogcmVtZW1iZXIgd2hhdCBoZSBzYXlzIC0gSSBuZWVkIG5vbmUgKi8KLQkJaGlzX3BhZF9jb3VudCA9IHVudG9jaGFyIChzZW5kX3Bhcm1zWzJdKTsKLQkJYV9iWysrbGVuZ3RoXSA9IHRvY2hhciAoMCk7Ci0JCWlmIChieXRlcy0tIDw9IDApCi0JCQlicmVhazsKLQkJLyogaGFuZGxlIFBBREMgLSBwYWQgY2hhcnMgSSBuZWVkICovCi0JCS8qIHJlbWVtYmVyIHdoYXQgaGUgc2F5cyAtIEkgbmVlZCBub25lICovCi0JCWhpc19wYWRfY2hhciA9IGt0cmFucyAoc2VuZF9wYXJtc1szXSk7Ci0JCWFfYlsrK2xlbmd0aF0gPSAweDQwOwkvKiBIZSBzaG91bGQgaWdub3JlIHRoaXMgKi8KLQkJaWYgKGJ5dGVzLS0gPD0gMCkKLQkJCWJyZWFrOwotCQkvKiBoYW5kbGUgRU9MIC0gZW5kIG9mIGxpbmUgaGUgbmVlZHMgKi8KLQkJLyogcmVtZW1iZXIgd2hhdCBoZSBzYXlzIC0gSSBuZWVkIENSICovCi0JCWhpc19lb2wgPSB1bnRvY2hhciAoc2VuZF9wYXJtc1s0XSk7Ci0JCWFfYlsrK2xlbmd0aF0gPSB0b2NoYXIgKEVORF9DSEFSKTsKLQkJaWYgKGJ5dGVzLS0gPD0gMCkKLQkJCWJyZWFrOwotCQkvKiBoYW5kbGUgUUNUTCAtIHF1b3RlIGNvbnRyb2wgY2hhciBoZSdsbCB1c2UgKi8KLQkJLyogcmVtZW1iZXIgd2hhdCBoZSBzYXlzIC0gSSdsbCB1c2UgJyMnICovCi0JCWhpc19xdW90ZSA9IHNlbmRfcGFybXNbNV07Ci0JCWFfYlsrK2xlbmd0aF0gPSAnIyc7Ci0JCWlmIChieXRlcy0tIDw9IDApCi0JCQlicmVhazsKLQkJLyogaGFuZGxlIFFCSU4gLSA4LXRoIGJpdCBwcmVmaXhpbmcgKi8KLQkJLyogaWdub3JlIHdoYXQgaGUgc2F5cyAtIEkgcmVmdXNlICovCi0JCWFfYlsrK2xlbmd0aF0gPSAnTic7Ci0JCWlmIChieXRlcy0tIDw9IDApCi0JCQlicmVhazsKLQkJLyogaGFuZGxlIENIS1QgLSB0aGUgY2xvY2sgY2hlY2sgdHlwZSAqLwotCQkvKiBpZ25vcmUgd2hhdCBoZSBzYXlzIC0gSSBkbyB0eXBlIDEgKGZvciBub3cpICovCi0JCWFfYlsrK2xlbmd0aF0gPSAnMSc7Ci0JCWlmIChieXRlcy0tIDw9IDApCi0JCQlicmVhazsKLQkJLyogaGFuZGxlIFJFUFQgLSB0aGUgcmVwZWF0IHByZWZpeCAqLwotCQkvKiBpZ25vcmUgd2hhdCBoZSBzYXlzIC0gSSByZWZ1c2UgKGZvciBub3cpICovCi0JCWFfYlsrK2xlbmd0aF0gPSAnTic7Ci0JCWlmIChieXRlcy0tIDw9IDApCi0JCQlicmVhazsKLQkJLyogaGFuZGxlIENBUEFTIC0gdGhlIGNhcGFiaWxpdGllcyBtYXNrICovCi0JCS8qIGlnbm9yZSB3aGF0IGhlIHNheXMgLSBJIG9ubHkgZG8gbG9uZyBwYWNrZXRzIC0gSSBkb24ndCBkbyB3aW5kb3dzICovCi0JCWFfYlsrK2xlbmd0aF0gPSB0b2NoYXIgKDIpOwkvKiBvbmx5IGxvbmcgcGFja2V0cyAqLwotCQlhX2JbKytsZW5ndGhdID0gdG9jaGFyICgwKTsJLyogbm8gd2luZG93cyAqLwotCQlhX2JbKytsZW5ndGhdID0gdG9jaGFyICg5NCk7CS8qIGxhcmdlIHBhY2tldCBtc2IgKi8KLQkJYV9iWysrbGVuZ3RoXSA9IHRvY2hhciAoOTQpOwkvKiBsYXJnZSBwYWNrZXQgbHNiICovCi0JfSB3aGlsZSAoMCk7Ci0KLQlhX2JbMF0gPSBTVEFSVF9DSEFSOwotCWFfYlsxXSA9IHRvY2hhciAobGVuZ3RoKTsKLQlhX2JbMl0gPSB0b2NoYXIgKG4pOwotCWFfYlszXSA9IEFDS19UWVBFOwotCWFfYlsrK2xlbmd0aF0gPSAnXDAnOwotCWFfYltsZW5ndGhdID0gdG9jaGFyIChjaGsxICgmYV9iWzFdKSk7Ci0JYV9iWysrbGVuZ3RoXSA9IGhpc19lb2w7Ci0JYV9iWysrbGVuZ3RoXSA9ICdcMCc7Ci0JczFfc2VuZHBhY2tldCAoYV9iKTsKLX0KLQotLyoga19yZWN2IHJlY2VpdmVzIGEgT1MgT3BlbiBpbWFnZSBmaWxlIG92ZXIga2VybWl0IGxpbmUgKi8KLXN0YXRpYyBpbnQga19yZWN2ICh2b2lkKQotewotCWNoYXIgbmV3X2NoYXI7Ci0JY2hhciBrX3N0YXRlLCBrX3N0YXRlX3NhdmVkOwotCWludCBzdW07Ci0JaW50IGRvbmU7Ci0JaW50IGxlbmd0aDsKLQlpbnQgbiwgbGFzdF9uOwotCWludCB6ID0gMDsKLQlpbnQgbGVuX2xvLCBsZW5faGk7Ci0KLQkvKiBpbml0aWFsaXplIHNvbWUgcHJvdG9jb2wgcGFyYW1ldGVycyAqLwotCWhpc19lb2wgPSBFTkRfQ0hBUjsJCS8qIGRlZmF1bHQgZW5kIG9mIGxpbmUgY2hhcmFjdGVyICovCi0JaGlzX3BhZF9jb3VudCA9IDA7Ci0JaGlzX3BhZF9jaGFyID0gJ1wwJzsKLQloaXNfcXVvdGUgPSBLX0VTQ0FQRTsKLQotCS8qIGluaXRpYWxpemUgdGhlIGtfcmVjdiBhbmQga19kYXRhIHN0YXRlIG1hY2hpbmUgKi8KLQlkb25lID0gMDsKLQlrX3N0YXRlID0gMDsKLQlrX2RhdGFfaW5pdCAoKTsKLQlrX3N0YXRlX3NhdmVkID0ga19zdGF0ZTsKLQlrX2RhdGFfc2F2ZSAoKTsKLQluID0gMDsJCQkJLyoganVzdCB0byBnZXQgcmlkIG9mIGEgd2FybmluZyAqLwotCWxhc3RfbiA9IC0xOwotCi0JLyogZXhwZWN0IHRoaXMgInR5cGUiIHNlcXVlbmNlIChidXQgZG9uJ3QgY2hlY2spOgotCSAgIFM6IHNlbmQgaW5pdGlhdGUKLQkgICBGOiBmaWxlIGhlYWRlcgotCSAgIEQ6IGRhdGEgKG11bHRpcGxlKQotCSAgIFo6IGVuZCBvZiBmaWxlCi0JICAgQjogYnJlYWsgdHJhbnNtaXNzaW9uCi0JICovCi0KLQkvKiBlbnRlciBtYWluIGxvb3AgKi8KLQl3aGlsZSAoIWRvbmUpIHsKLQkJLyogc2V0IHRoZSBzZW5kIHBhY2tldCBwb2ludGVyIHRvIGJlZ2luaW5nIG9mIHNlbmQgcGFja2V0IHBhcm1zICovCi0JCXNlbmRfcHRyID0gc2VuZF9wYXJtczsKLQotCQkvKiBXaXRoIGVhY2ggcGFja2V0LCBzdGFydCBzdW1taW5nIHRoZSBieXRlcyBzdGFydGluZyB3aXRoIHRoZSBsZW5ndGguCi0JCSAgIFNhdmUgdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyLgotCQkgICBOb3RlIHRoZSB0eXBlIG9mIHRoZSBwYWNrZXQuCi0JCSAgIElmIGEgY2hhcmFjdGVyIGxlc3MgdGhhbiBTUEFDRSAoMHgyMCkgaXMgcmVjZWl2ZWQgLSBlcnJvci4KLQkJICovCi0KLSNpZiAwCi0JCS8qIE9MRCBDT0RFLCBQcmlvciB0byBjaGVja2luZyBzZXF1ZW5jZSBudW1iZXJzICovCi0JCS8qIGZpcnN0IGhhdmUgYWxsIHN0YXRlIG1hY2hpbmVzIHNhdmUgY3VycmVudCBzdGF0ZXMgKi8KLQkJa19zdGF0ZV9zYXZlZCA9IGtfc3RhdGU7Ci0JCWtfZGF0YV9zYXZlICgpOwotI2VuZGlmCi0KLQkJLyogZ2V0IGEgcGFja2V0ICovCi0JCS8qIHdhaXQgZm9yIHRoZSBzdGFydGluZyBjaGFyYWN0ZXIgb3IgXkMgKi8KLQkJZm9yICg7OykgewotCQkJc3dpdGNoIChzZXJpYWxfZ2V0YyAoKSkgewotCQkJY2FzZSBTVEFSVF9DSEFSOgkvKiBzdGFydCBwYWNrZXQgKi8KLQkJCQlnb3RvIFNUQVJUOwotCQkJY2FzZSBFVFhfQ0hBUjoJCS8qIF5DIHdhaXRpbmcgZm9yIHBhY2tldCAqLwotCQkJCXJldHVybiAoMCk7Ci0JCQlkZWZhdWx0OgotCQkJCTsKLQkJCX0KLQkJfQotU1RBUlQ6Ci0JCS8qIGdldCBsZW5ndGggb2YgcGFja2V0ICovCi0JCXN1bSA9IDA7Ci0JCW5ld19jaGFyID0gc2VyaWFsX2dldGMgKCk7Ci0JCWlmICgobmV3X2NoYXIgJiAweEUwKSA9PSAwKQotCQkJZ290byBwYWNrZXRfZXJyb3I7Ci0JCXN1bSArPSBuZXdfY2hhciAmIDB4ZmY7Ci0JCWxlbmd0aCA9IHVudG9jaGFyIChuZXdfY2hhcik7Ci0JCS8qIGdldCBzZXF1ZW5jZSBudW1iZXIgKi8KLQkJbmV3X2NoYXIgPSBzZXJpYWxfZ2V0YyAoKTsKLQkJaWYgKChuZXdfY2hhciAmIDB4RTApID09IDApCi0JCQlnb3RvIHBhY2tldF9lcnJvcjsKLQkJc3VtICs9IG5ld19jaGFyICYgMHhmZjsKLQkJbiA9IHVudG9jaGFyIChuZXdfY2hhcik7Ci0JCS0tbGVuZ3RoOwotCi0JCS8qIE5FVyBDT0RFIC0gY2hlY2sgc2VxdWVuY2UgbnVtYmVycyBmb3IgcmV0cmllZCBwYWNrZXRzICovCi0JCS8qIE5vdGUgLSB0aGlzIG5ldyBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgc2VxdWVuY2UgbnVtYmVyIGlzIGNvcnJlY3RseQotCQkgKiByZWNlaXZlZC4gIEhhbmRsaW5nIGFuIGludmFsaWQgc2VxdWVuY2UgbnVtYmVyIGFkZHMgYW5vdGhlciBsYXllcgotCQkgKiBvZiBjb21wbGV4aXR5IHRoYXQgbWF5IG5vdCBiZSBuZWVkZWQgLSB5ZXQhICBBdCB0aGlzIHRpbWUsIEknbSBob3BpbmcKLQkJICogdGhhdCBJIGRvbid0IG5lZWQgdG8gYnVmZmVyIHRoZSBpbmNvbWluZyBkYXRhIHBhY2tldHMgYW5kIGNhbiB3cml0ZQotCQkgKiB0aGUgZGF0YSBpbnRvIG1lbW9yeSBpbiByZWFsIHRpbWUuCi0JCSAqLwotCQlpZiAobiA9PSBsYXN0X24pIHsKLQkJCS8qIHNhbWUgc2VxdWVuY2UgbnVtYmVyLCByZXN0b3JlIHRoZSBwcmV2aW91cyBzdGF0ZSAqLwotCQkJa19zdGF0ZSA9IGtfc3RhdGVfc2F2ZWQ7Ci0JCQlrX2RhdGFfcmVzdG9yZSAoKTsKLQkJfSBlbHNlIHsKLQkJCS8qIG5ldyBzZXF1ZW5jZSBudW1iZXIsIGNoZWNrcG9pbnQgdGhlIGRvd25sb2FkICovCi0JCQlsYXN0X24gPSBuOwotCQkJa19zdGF0ZV9zYXZlZCA9IGtfc3RhdGU7Ci0JCQlrX2RhdGFfc2F2ZSAoKTsKLQkJfQotCQkvKiBFTkQgTkVXIENPREUgKi8KLQotCQkvKiBnZXQgcGFja2V0IHR5cGUgKi8KLQkJbmV3X2NoYXIgPSBzZXJpYWxfZ2V0YyAoKTsKLQkJaWYgKChuZXdfY2hhciAmIDB4RTApID09IDApCi0JCQlnb3RvIHBhY2tldF9lcnJvcjsKLQkJc3VtICs9IG5ld19jaGFyICYgMHhmZjsKLQkJa19zdGF0ZSA9IG5ld19jaGFyOwotCQktLWxlbmd0aDsKLQkJLyogY2hlY2sgZm9yIGV4dGVuZGVkIGxlbmd0aCAqLwotCQlpZiAobGVuZ3RoID09IC0yKSB7Ci0JCQkvKiAobGVuZ3RoIGJ5dGUgd2FzIDAsIGRlY3JlbWVudGVkIHR3aWNlKSAqLwotCQkJLyogZ2V0IHRoZSB0d28gbGVuZ3RoIGJ5dGVzICovCi0JCQluZXdfY2hhciA9IHNlcmlhbF9nZXRjICgpOwotCQkJaWYgKChuZXdfY2hhciAmIDB4RTApID09IDApCi0JCQkJZ290byBwYWNrZXRfZXJyb3I7Ci0JCQlzdW0gKz0gbmV3X2NoYXIgJiAweGZmOwotCQkJbGVuX2hpID0gdW50b2NoYXIgKG5ld19jaGFyKTsKLQkJCW5ld19jaGFyID0gc2VyaWFsX2dldGMgKCk7Ci0JCQlpZiAoKG5ld19jaGFyICYgMHhFMCkgPT0gMCkKLQkJCQlnb3RvIHBhY2tldF9lcnJvcjsKLQkJCXN1bSArPSBuZXdfY2hhciAmIDB4ZmY7Ci0JCQlsZW5fbG8gPSB1bnRvY2hhciAobmV3X2NoYXIpOwotCQkJbGVuZ3RoID0gbGVuX2hpICogOTUgKyBsZW5fbG87Ci0JCQkvKiBjaGVjayBoZWFkZXIgY2hlY2tzdW0gKi8KLQkJCW5ld19jaGFyID0gc2VyaWFsX2dldGMgKCk7Ci0JCQlpZiAoKG5ld19jaGFyICYgMHhFMCkgPT0gMCkKLQkJCQlnb3RvIHBhY2tldF9lcnJvcjsKLQkJCWlmIChuZXdfY2hhciAhPSB0b2NoYXIgKChzdW0gKyAoKHN1bSA+PiA2KSAmIDB4MDMpKSAmIDB4M2YpKQotCQkJCWdvdG8gcGFja2V0X2Vycm9yOwotCQkJc3VtICs9IG5ld19jaGFyICYgMHhmZjsKLS8qIC0tbGVuZ3RoOyAqLyAvKiBuZXcgbGVuZ3RoIGluY2x1ZGVzIG9ubHkgZGF0YSBhbmQgYmxvY2sgY2hlY2sgdG8gY29tZSAqLwotCQl9Ci0JCS8qIGJyaW5nIGluIHJlc3Qgb2YgcGFja2V0ICovCi0JCXdoaWxlIChsZW5ndGggPiAxKSB7Ci0JCQluZXdfY2hhciA9IHNlcmlhbF9nZXRjICgpOwotCQkJaWYgKChuZXdfY2hhciAmIDB4RTApID09IDApCi0JCQkJZ290byBwYWNrZXRfZXJyb3I7Ci0JCQlzdW0gKz0gbmV3X2NoYXIgJiAweGZmOwotCQkJLS1sZW5ndGg7Ci0JCQlpZiAoa19zdGF0ZSA9PSBEQVRBX1RZUEUpIHsKLQkJCQkvKiBwYXNzIG9uIHRoZSBkYXRhIGlmIHRoaXMgaXMgYSBkYXRhIHBhY2tldCAqLwotCQkJCWtfZGF0YV9jaGFyIChuZXdfY2hhcik7Ci0JCQl9IGVsc2UgaWYgKGtfc3RhdGUgPT0gU0VORF9UWVBFKSB7Ci0JCQkJLyogc2F2ZSBzZW5kIHBhY2sgaW4gYnVmZmVyIGFzIGlzICovCi0JCQkJKnNlbmRfcHRyKysgPSBuZXdfY2hhcjsKLQkJCQkvKiBpZiB0b28gbXVjaCBkYXRhLCBiYWNrIG9mZiB0aGUgcG9pbnRlciAqLwotCQkJCWlmIChzZW5kX3B0ciA+PSAmc2VuZF9wYXJtc1tTRU5EX0RBVEFfU0laRV0pCi0JCQkJCS0tc2VuZF9wdHI7Ci0JCQl9Ci0JCX0KLQkJLyogZ2V0IGFuZCB2YWxpZGF0ZSBjaGVja3N1bSBjaGFyYWN0ZXIgKi8KLQkJbmV3X2NoYXIgPSBzZXJpYWxfZ2V0YyAoKTsKLQkJaWYgKChuZXdfY2hhciAmIDB4RTApID09IDApCi0JCQlnb3RvIHBhY2tldF9lcnJvcjsKLQkJaWYgKG5ld19jaGFyICE9IHRvY2hhciAoKHN1bSArICgoc3VtID4+IDYpICYgMHgwMykpICYgMHgzZikpCi0JCQlnb3RvIHBhY2tldF9lcnJvcjsKLQkJLyogZ2V0IEVORF9DSEFSICovCi0JCW5ld19jaGFyID0gc2VyaWFsX2dldGMgKCk7Ci0JCWlmIChuZXdfY2hhciAhPSBFTkRfQ0hBUikgewotCQkgIHBhY2tldF9lcnJvcjoKLQkJCS8qIHJlc3RvcmUgc3RhdGUgbWFjaGluZXMgKi8KLQkJCWtfc3RhdGUgPSBrX3N0YXRlX3NhdmVkOwotCQkJa19kYXRhX3Jlc3RvcmUgKCk7Ci0JCQkvKiBzZW5kIGEgbmVnYXRpdmUgYWNrbm93bGVkZ2UgcGFja2V0IGluICovCi0JCQlzZW5kX25hY2sgKG4pOwotCQl9IGVsc2UgaWYgKGtfc3RhdGUgPT0gU0VORF9UWVBFKSB7Ci0JCQkvKiBjcmFjayB0aGUgcHJvdG9jb2wgcGFybXMsIGJ1aWxkIGFuIGFwcHJvcHJpYXRlIGFjayBwYWNrZXQgKi8KLQkJCWhhbmRsZV9zZW5kX3BhY2tldCAobik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBzZW5kIHNpbXBsZSBhY2tub3dsZWRnZSBwYWNrZXQgaW4gKi8KLQkJCXNlbmRfYWNrIChuKTsKLQkJCS8qIHF1aXQgaWYgZW5kIG9mIHRyYW5zbWlzc2lvbiAqLwotCQkJaWYgKGtfc3RhdGUgPT0gQlJFQUtfVFlQRSkKLQkJCQlkb25lID0gMTsKLQkJfQotCQkrK3o7Ci0JfQotCXJldHVybiAoKHVsb25nKSBvc19kYXRhX2FkZHIgLSAodWxvbmcpIGJpbl9zdGFydF9hZGRyZXNzKTsKLX0KLSNlbmRpZgkvKiBDRkdfQ01EX0xPQURCICovCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSFdGTE9XKQotaW50IGRvX2h3ZmxvdyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JZXh0ZXJuIGludCBod2Zsb3dfb25vZmYoaW50KTsKLQotCWlmIChhcmdjID09IDIpIHsKLQkJaWYgKHN0cmNtcChhcmd2WzFdLCAib2ZmIikgPT0gMCkKLQkJCWh3Zmxvd19vbm9mZigtMSk7Ci0JCWVsc2UKLQkJCWlmIChzdHJjbXAoYXJndlsxXSwgIm9uIikgPT0gMCkKLQkJCQlod2Zsb3dfb25vZmYoMSk7Ci0JCQllbHNlCi0JCQkJcHJpbnRmKCJVc2FnZTogJXNcbiIsIGNtZHRwLT51c2FnZSk7Ci0JfQotCXByaW50ZigiUlRTL0NUUyBoYXJkd2FyZSBmbG93IGNvbnRyb2w6ICVzXG4iLCBod2Zsb3dfb25vZmYoMCkgPyAib24iIDogIm9mZiIpOwotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENGR19DTURfSFdGTE9XICovCitjbWRfdGJsX3QgVV9CT09UX0NNRChSRVNFVCkgPSBNS19DTURfRU5UUlkoCisJInJlc2V0IiwgMSwgMCwJZG9fcmVzZXQsCisJInJlc2V0ICAgLSBQZXJmb3JtIFJFU0VUIG9mIHRoZSBDUFVcbiIsCisJTlVMTAorKTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYm9vdG0uYyBiL2NvbW1vbi9jbWRfYm9vdG0uYwppbmRleCA4YWY3YzdjLi43YWRlMDY4IDEwMDY0NAotLS0gYS9jb21tb24vY21kX2Jvb3RtLmMKKysrIGIvY29tbW9uL2NtZF9ib290bS5jCkBAIC0yNywxMiArMjcsMTUgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDx3YXRjaGRvZy5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgogI2luY2x1ZGUgPGltYWdlLmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjaW5jbHVkZSA8emxpYi5oPgogI2luY2x1ZGUgPGVudmlyb25tZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisgLypjbWRfYm9vdC5jKi8KKyBleHRlcm4gaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9EQVRFKSB8fCBkZWZpbmVkKENPTkZJR19USU1FU1RBTVApCiAjaW5jbHVkZSA8cnRjLmg+CiAjZW5kaWYKQEAgLTk3LDYgKzEwMCwxMCBAQAogCQkJICB1bG9uZwkqbGVuX3B0ciwJLyogbXVsdGktZmlsZSBpbWFnZSBsZW5ndGggdGFibGUgKi8KIAkJCSAgaW50CXZlcmlmeSk7CS8qIGdldGVudigidmVyaWZ5IilbMF0gIT0gJ24nICovCiAKKyNpZmRlZglERUJVRworZXh0ZXJuIGludCBkb19iZGluZm8gKCBjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QUEMKIHN0YXRpYyBib290X29zX0ZjbiBkb19ib290bV9saW51eDsKICNlbHNlCkBAIC0xOTIsNyArMTk5LDcgQEAKIAkJcmVhZF9kYXRhZmxhc2goZGF0YSwgbGVuLCAoY2hhciAqKUNGR19MT0FEX0FERFIpOwogCQlkYXRhID0gQ0ZHX0xPQURfQUREUjsKIAl9Ci0jZW5kaWYJCisjZW5kaWYKIAogCWlmICh2ZXJpZnkpIHsKIAkJcHJpbnRmICgiICAgVmVyaWZ5aW5nIENoZWNrc3VtIC4uLiAiKTsKQEAgLTIxNCw3ICsyMjEsNyBAQAogI2VsaWYgZGVmaW5lZChfX0kzODZfXykKIAlpZiAoaGRyLT5paF9hcmNoICE9IElIX0NQVV9JMzg2KQogI2VsaWYgZGVmaW5lZChfX21pcHNfXykKLQlpZiAoaGRyLT5paF9hcmNoICE9IElIX0NQVV9NSVBTKQkKKwlpZiAoaGRyLT5paF9hcmNoICE9IElIX0NQVV9NSVBTKQogI2Vsc2UKICMgZXJyb3IgVW5rbm93biBDUFUgdHlwZQogI2VuZGlmCkBAIC0yNTMsNyArMjYwLDcgQEAKIAogI2lmZGVmIENPTkZJR19BTUlHQU9ORUczU0UKIAkvKgotCSAqIFdlJ3ZlIHBvc3NpYmxlIGxlZnQgdGhlIGNhY2hlcyBlbmFibGVkIGR1cmluZyAKKwkgKiBXZSd2ZSBwb3NzaWJsZSBsZWZ0IHRoZSBjYWNoZXMgZW5hYmxlZCBkdXJpbmcKIAkgKiBiaW9zIGVtdWxhdGlvbiwgc28gdHVybiB0aGVtIG9mZiBhZ2FpbgogCSAqLwogCWljYWNoZV9kaXNhYmxlKCk7CkBAIC0zNDIsMTIgKzM0OSwxMiBAQAogCSAgICBkb19ib290bV9uZXRic2QgKGNtZHRwLCBmbGFnLCBhcmdjLCBhcmd2LAogCQkJICAgICBhZGRyLCBsZW5fcHRyLCB2ZXJpZnkpOwogCSAgICBicmVhazsKLQkgICAgCisKIAljYXNlIElIX09TX1JURU1TOgogCSAgICBkb19ib290bV9ydGVtcyAoY21kdHAsIGZsYWcsIGFyZ2MsIGFyZ3YsCiAJCQkgICAgIGFkZHIsIGxlbl9wdHIsIHZlcmlmeSk7CiAJICAgIGJyZWFrOwotCSAgICAgCisKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9FTEYpCiAJY2FzZSBJSF9PU19WWFdPUktTOgogCSAgICBkb19ib290bV92eHdvcmtzIChjbWR0cCwgZmxhZywgYXJnYywgYXJndiwKQEAgLTM3NCw2ICszODEsMTQgQEAKIAlyZXR1cm4gMTsKIH0KIAorY21kX3RibF90IFVfQk9PVF9DTUQoQk9PVE0pID0gIE1LX0NNRF9FTlRSWSgKKyAJImJvb3RtIiwJQ0ZHX01BWEFSR1MsCTEsCWRvX2Jvb3RtLAorIAkiYm9vdG0gICAtIGJvb3QgYXBwbGljYXRpb24gaW1hZ2UgZnJvbSBtZW1vcnlcbiIsCisgCSJbYWRkciBbYXJnIC4uLl1dXG4gICAgLSBib290IGFwcGxpY2F0aW9uIGltYWdlIHN0b3JlZCBpbiBtZW1vcnlcbiIKKyAJIiAgICAgICAgcGFzc2luZyBhcmd1bWVudHMgJ2FyZyAuLi4nOyB3aGVuIGJvb3RpbmcgYSBMaW51eCBrZXJuZWwsXG4iCisgCSIgICAgICAgICdhcmcnIGNhbiBiZSB0aGUgYWRkcmVzcyBvZiBhbiBpbml0cmQgaW1hZ2VcbiIKKyk7CisKICNpZmRlZiBDT05GSUdfUFBDCiBzdGF0aWMgdm9pZAogZG9fYm9vdG1fbGludXggKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLApAQCAtODU2LDYgKzg3MSwxMyBAQAogI2VuZGlmCiAJcmV0dXJuIHJjb2RlOwogfQorCitjbWRfdGJsX3QgVV9CT09UX0NNRChCT09URCkgPSBNS19DTURfRU5UUlkoCisgCSJib290ZCIsCTEsCTEsCWRvX2Jvb3RkLAorIAkiYm9vdGQgICAtIGJvb3QgZGVmYXVsdCwgaS5lLiwgcnVuICdib290Y21kJ1xuIiwKKwlOVUxMCispOworCiAjZW5kaWYKIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lNSSkKQEAgLTkxNiw2ICs5MzgsMTUgQEAKIAlwcmludGYgKCJPS1xuIik7CiAJcmV0dXJuIDA7CiB9CitjbWRfdGJsX3QgVV9CT09UX0NNRChJTUlORk8pID0gTUtfQ01EX0VOVFJZKAorCSJpbWluZm8iLAlDRkdfTUFYQVJHUywJMSwJZG9faW1pbmZvLAorCSJpbWluZm8gIC0gcHJpbnQgaGVhZGVyIGluZm9ybWF0aW9uIGZvciBhcHBsaWNhdGlvbiBpbWFnZVxuIiwKKwkiYWRkciBbYWRkciAuLi5dXG4iCisJIiAgICAtIHByaW50IGhlYWRlciBpbmZvcm1hdGlvbiBmb3IgYXBwbGljYXRpb24gaW1hZ2Ugc3RhcnRpbmcgYXRcbiIKKwkiICAgICAgYWRkcmVzcyAnYWRkcicgaW4gbWVtb3J5OyB0aGlzIGluY2x1ZGVzIHZlcmlmaWNhdGlvbiBvZiB0aGVcbiIKKwkiICAgICAgaW1hZ2UgY29udGVudHMgKG1hZ2ljIG51bWJlciwgaGVhZGVyIGFuZCBwYXlsb2FkIGNoZWNrc3VtcylcbiIKKyk7CisKICNlbmRpZgkvKiBDRkdfQ01EX0lNSSAqLwogCiB2b2lkCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2NhY2hlLmMgYi9jb21tb24vY21kX2NhY2hlLmMKaW5kZXggZjIwMTViMy4uMDAxNmI3MiAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9jYWNoZS5jCisrKyBiL2NvbW1vbi9jbWRfY2FjaGUuYwpAQCAtMjYsNyArMjYsNiBAQAogICovCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9jYWNoZS5oPgogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQ0FDSEUpCiAKQEAgLTk1LDQgKzk0LDE5IEBACiAJcmV0dXJuICgtMSk7CiB9CiAKKworY21kX3RibF90IFVfQk9PVF9DTUQoSUNBQ0hFKSA9IE1LX0NNRF9FTlRSWSgKKwkiaWNhY2hlIiwgICAyLCAgIDEsICAgICBkb19pY2FjaGUsCisJImljYWNoZSAgLSBlbmFibGUgb3IgZGlzYWJsZSBpbnN0cnVjdGlvbiBjYWNoZVxuIiwKKwkiW29uLCBvZmZdXG4iCisJIiAgICAtIGVuYWJsZSBvciBkaXNhYmxlIGluc3RydWN0aW9uIGNhY2hlXG4iCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChEQ0FDSEUpID0gTUtfQ01EX0VOVFJZKAorCSJkY2FjaGUiLCAgIDIsICAgMSwgICAgIGRvX2RjYWNoZSwKKwkiZGNhY2hlICAtIGVuYWJsZSBvciBkaXNhYmxlIGRhdGEgY2FjaGVcbiIsCisJIltvbiwgb2ZmXVxuIgorCSIgICAgLSBlbmFibGUgb3IgZGlzYWJsZSBkYXRhICh3cml0ZXRocm91Z2gpIGNhY2hlXG4iCispOworCiAjZW5kaWYJLyogQ0ZHX0NNRF9DQUNIRSAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9jb25zb2xlLmMgYi9jb21tb24vY21kX2NvbnNvbGUuYwppbmRleCBhNWY3OTJiLi5lNmIwMDFhIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2NvbnNvbGUuYworKysgYi9jb21tb24vY21kX2NvbnNvbGUuYwpAQCAtNTgsNCArNTgsMTQgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworY21kX3RibF90IFVfQk9PVF9DTUQoQ09OSU5GTykgPSBNS19DTURfRU5UUlkoCisJImNvbmluZm8iLAkzLAkxLAlkb19jb25pbmZvLAorCSJjb25pbmZvIC0gcHJpbnQgY29uc29sZSBkZXZpY2VzIGFuZCBpbmZvcm1hdGlvbnNcbiIsCisJIiIKKyk7CisKICNlbmRpZiAvKiBDRkdfQ01EX0NPTlNPTEUgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZGF0ZS5jIGIvY29tbW9uL2NtZF9kYXRlLmMKaW5kZXggMjEzOWNlYi4uNmI3NTIxMCAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9kYXRlLmMKKysrIGIvY29tbW9uL2NtZF9kYXRlLmMKQEAgLTE4OSw0ICsxODksMTUgQEAKIAlyZXR1cm4gKC0xKTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworY21kX3RibF90IFVfQk9PVF9DTUQoREFURSkgPSBNS19DTURfRU5UUlkoCisJImRhdGUiLAkyLAkxLAlkb19kYXRlLAorCSJkYXRlICAgIC0gZ2V0L3NldC9yZXNldCBkYXRlICYgdGltZVxuIiwKKwkiW01NRERoaG1tW1tDQ11ZWV1bLnNzXV1cbmRhdGUgcmVzZXRcbiIKKwkiICAtIHdpdGhvdXQgYXJndW1lbnRzOiBwcmludCBkYXRlICYgdGltZVxuIgorCSIgIC0gd2l0aCBudW1lcmljIGFyZ3VtZW50OiBzZXQgdGhlIHN5c3RlbSBkYXRlICYgdGltZVxuIgorCSIgIC0gd2l0aCAncmVzZXQnIGFyZ3VtZW50OiByZXNldCB0aGUgUlRDXG4iCispOworCiAjZW5kaWYJLyogQ0ZHX0NNRF9EQVRFICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2Rjci5jIGIvY29tbW9uL2NtZF9kY3IuYwppbmRleCAwNzI2ODVlLi4zZWMxMWIwIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2Rjci5jCisrKyBiL2NvbW1vbi9jbWRfZGNyLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2Rjci5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfNHh4KSAmJiBkZWZpbmVkKENGR19DTURfU0VUR0VURENSKQogCkBAIC00MSwxMCArNDAsMTIgQEAKICAgICB1bnNpZ25lZCBzaG9ydCBkY3JuOyAgICAgICAgICAgICAgICAgICAgIC8qIERldmljZSBDb250cm9sIFJlZ2lzdGVyIE51bSAqLwogICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgLyogRENSJ3MgdmFsdWUgKi8KIAorICAgIHVuc2lnbmVkIGxvbmcgZ2V0X2Rjcih1bnNpZ25lZCBzaG9ydCk7CisKICAgICAvKiBWYWxpZGF0ZSBhcmd1bWVudHMgKi8KICAgICBpZiAoYXJnYyA8IDIpIHsKLSAgICAgICAgcHJpbnRmKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwotICAgICAgICByZXR1cm4gMTsKKwlwcmludGYoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7CisJcmV0dXJuIDE7CiAgICAgfQogCiAgICAgLyogR2V0IGEgRENSICovCkBAIC02Myw0MSArNjQsNTcgQEAKICovCiBpbnQgZG9fc2V0ZGNyICggY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CisgICB1bnNpZ25lZCBsb25nIGdldF9kY3IodW5zaWduZWQgc2hvcnQgKTsKKyAgIHVuc2lnbmVkIGxvbmcgc2V0X2Rjcih1bnNpZ25lZCBzaG9ydCAsIHVuc2lnbmVkIGxvbmcgKTsKICAgICB1bnNpZ25lZCBzaG9ydCBkY3JuOyAgICAgICAgICAgICAgICAgICAgIC8qIERldmljZSBDb250cm9sIFJlZ2lzdGVyIE51bSAqLwotICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgLyogRENSJ3MgdmFsdWUgKi8KKyAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisJCSAgICAvKiBEQ1IncyB2YWx1ZSAqLwogICAgIGludCBuYnl0ZXM7CiAgICAgZXh0ZXJuIGNoYXIgY29uc29sZV9idWZmZXJbXTsKIAogICAgIC8qIFZhbGlkYXRlIGFyZ3VtZW50cyAqLwogICAgIGlmIChhcmdjIDwgMikgewotICAgICAgICBwcmludGYoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7Ci0gICAgICAgIHJldHVybiAxOworCXByaW50ZigiVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKKwlyZXR1cm4gMTsKICAgICB9CiAKICAgICAvKiBTZXQgYSBEQ1IgKi8KICAgICBkY3JuID0gKHVuc2lnbmVkIHNob3J0KXNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKICAgICBkbyB7Ci0gICAgICAgIHZhbHVlID0gZ2V0X2RjcihkY3JuKTsKLSAgICAgICAgcHJpbnRmKCIlMDR4OiAlMDhseCIsIGRjcm4sIHZhbHVlKTsKLSAgICAgICAgbmJ5dGVzID0gcmVhZGxpbmUoIiA/ICIpOwotICAgICAgICBpZiAobmJ5dGVzID09IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiA8Q1I+IHByZXNzZWQgYXMgb25seSBpbnB1dCwgZG9uJ3QgbW9kaWZ5IGN1cnJlbnQKLSAgICAgICAgICAgICAqIGxvY2F0aW9uIGFuZCBleGl0IGNvbW1hbmQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG5ieXRlcyA9IDE7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaTsKLSAgICAgICAgICAgIGNoYXIgKmVuZHA7Ci0gICAgICAgICAgICBpID0gc2ltcGxlX3N0cnRvdWwoY29uc29sZV9idWZmZXIsICZlbmRwLCAxNik7Ci0gICAgICAgICAgICBuYnl0ZXMgPSBlbmRwIC0gY29uc29sZV9idWZmZXI7Ci0gICAgICAgICAgICBpZiAobmJ5dGVzKQotICAgICAgICAgICAgICAgIHNldF9kY3IoZGNybiwgaSk7Ci0gICAgICAgIH0KKwl2YWx1ZSA9IGdldF9kY3IoZGNybik7CisJcHJpbnRmKCIlMDR4OiAlMDhseCIsIGRjcm4sIHZhbHVlKTsKKwluYnl0ZXMgPSByZWFkbGluZSgiID8gIik7CisJaWYgKG5ieXRlcyA9PSAwKSB7CisJICAgIC8qCisJICAgICAqIDxDUj4gcHJlc3NlZCBhcyBvbmx5IGlucHV0LCBkb24ndCBtb2RpZnkgY3VycmVudAorCSAgICAgKiBsb2NhdGlvbiBhbmQgZXhpdCBjb21tYW5kLgorCSAgICAgKi8KKwkgICAgbmJ5dGVzID0gMTsKKwkgICAgcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkgICAgdW5zaWduZWQgbG9uZyBpOworCSAgICBjaGFyICplbmRwOworCSAgICBpID0gc2ltcGxlX3N0cnRvdWwoY29uc29sZV9idWZmZXIsICZlbmRwLCAxNik7CisJICAgIG5ieXRlcyA9IGVuZHAgLSBjb25zb2xlX2J1ZmZlcjsKKwkgICAgaWYgKG5ieXRlcykKKwkJc2V0X2RjcihkY3JuLCBpKTsKKwl9CiAgICAgfSB3aGlsZSAobmJ5dGVzKTsKIAogICAgIHJldHVybiAwOwogfSAvKiBkb19zZXRkY3IgKi8KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworY21kX3RibF90IFVfQk9PVF9DTUQoR0VURENSKSA9IE1LX0NNRF9FTlRSWSgKKwkiZ2V0ZGNyIiwJMiwJMSwJZG9fZ2V0ZGNyLAorCSJnZXRkY3IgIC0gR2V0IGFuIElCTSBQUEMgNHh4IERDUidzIHZhbHVlXG4iLAorCSJkY3JuIC0gcmV0dXJuIGEgRENSJ3MgdmFsdWUuXG4iCispOworY21kX3RibF90IFVfQk9PVF9DTUQoU0VURENSKSA9IE1LX0NNRF9FTlRSWSgKKwkic2V0ZGNyIiwJMiwJMSwJZG9fc2V0ZGNyLAorCSJzZXRkY3IgIC0gU2V0IGFuIElCTSBQUEMgNHh4IERDUidzIHZhbHVlXG4iLAorCSJkY3JuIC0gc2V0IGEgRENSJ3MgdmFsdWUuXG4iCispOworCiAjZW5kaWYgLyogQ09ORklHXzR4eCAmIENGR19DTURfU0VUR0VURENSICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2RpYWcuYyBiL2NvbW1vbi9jbWRfZGlhZy5jCmluZGV4IDMxNDcxYmEuLjBiYjZjN2YgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfZGlhZy5jCisrKyBiL2NvbW1vbi9jbWRfZGlhZy5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKi8KICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2RpYWcuaD4KICNpbmNsdWRlIDxwb3N0Lmg+CiAKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9ESUFHKSAmJiBkZWZpbmVkKENPTkZJR19QT1NUKQpAQCAtNjUsNSArNjQsMTcgQEAKIAogCXJldHVybiAwOwogfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworY21kX3RibF90IFVfQk9PVF9DTUQoRElBRykgPSBNS19DTURfRU5UUlkoCisJImRpYWciLAlDRkdfTUFYQVJHUywJMCwJZG9fZGlhZywKKwkiZGlhZyAgICAtIHBlcmZvcm0gYm9hcmQgZGlhZ25vc3RpY3NcbiIsCisJICAgICAiICAgIC0gcHJpbnQgbGlzdCBvZiBhdmFpbGFibGUgdGVzdHNcbiIKKwkiZGlhZyBbdGVzdDEgW3Rlc3QyXV1cbiIKKwkiICAgICAgICAgLSBwcmludCBpbmZvcm1hdGlvbiBhYm91dCBzcGVjaWZpZWQgdGVzdHNcbiIKKwkiZGlhZyBydW4gLSBydW4gYWxsIGF2YWlsYWJsZSB0ZXN0c1xuIgorCSJkaWFnIHJ1biBbdGVzdDEgW3Rlc3QyXV1cbiIKKwkiICAgICAgICAgLSBydW4gc3BlY2lmaWVkIHRlc3RzXG4iCispOwogCiAjZW5kaWYgLyogQ0ZHX0NNRF9ESUFHICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2RvYy5jIGIvY29tbW9uL2NtZF9kb2MuYwppbmRleCA2MTJhNmQ1Li4xN2M5ZDBkIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2RvYy5jCisrKyBiL2NvbW1vbi9jbWRfZG9jLmMKQEAgLTgwLDcgKzgwLDcgQEAKIAlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwogCXJldHVybiAxOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHN0cmNtcChhcmd2WzFdLCJpbmZvIikgPT0gMCkgeworCWlmIChzdHJjbXAoYXJndlsxXSwiaW5mbyIpID09IDApIHsKIAkJaW50IGk7CiAKIAkJcHV0YyAoJ1xuJyk7CkBAIC0xNzAsNiArMTcwLDE3IEBACiAJcmV0dXJuIHJjb2RlOwogICAgIH0KIH0KK2NtZF90YmxfdCBVX0JPT1RfQ01EKERPQykgPSBNS19DTURfRU5UUlkoCisJImRvYyIsCTUsCTEsCWRvX2RvYywKKwkiZG9jICAgICAtIERpc2stT24tQ2hpcCBzdWItc3lzdGVtXG4iLAorCSJpbmZvICAtIHNob3cgYXZhaWxhYmxlIERPQyBkZXZpY2VzXG4iCisJImRvYyBkZXZpY2UgW2Rldl0gLSBzaG93IG9yIHNldCBjdXJyZW50IGRldmljZVxuIgorCSJkb2MgcmVhZCAgYWRkciBvZmYgc2l6ZVxuIgorCSJkb2Mgd3JpdGUgYWRkciBvZmYgc2l6ZSAtIHJlYWQvd3JpdGUgYHNpemUnIgorCSIgYnl0ZXMgc3RhcnRpbmcgYXQgb2Zmc2V0IGBvZmYnXG4iCisJIiAgICB0by9mcm9tIG1lbW9yeSBhZGRyZXNzIGBhZGRyJ1xuIgorCSJkb2MgZXJhc2Ugb2ZmIHNpemUgLSBlcmFzZSBgc2l6ZScgYnl0ZXMgb2YgRE9DIGZyb20gb2Zmc2V0IGBvZmYnXG4iCispOwogCiBpbnQgZG9fZG9jYm9vdCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CkBAIC0yNzMsNiArMjg0LDEyIEBACiAJcmV0dXJuIHJjb2RlOwogfQogCitjbWRfdGJsX3QgVV9CT09UX0NNRChET0NCT09UKSA9IE1LX0NNRF9FTlRSWSgKKwkiZG9jYm9vdCIsCTQsCTEsCWRvX2RvY2Jvb3QsCisJImRvY2Jvb3QgLSBib290IGZyb20gRE9DIGRldmljZVxuIiwKKwkibG9hZEFkZHIgZGV2XG4iCispOworCiBpbnQgZG9jX3J3IChzdHJ1Y3QgRGlza09uQ2hpcCogdGhpcywgaW50IGNtZCwKIAkgICAgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCiAJICAgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKQpAQCAtMzg1LDcgKzQwMiw3IEBACiAJCX0KICNlbmRpZgogCQl1ZGVsYXkoMSk7Ci0gICAgICAgIH0KKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkzOCw3ICs5NTUsNyBAQAogCiAJLyogR2V0IHBoeXNpY2FsIHBhcmFtZXRlcnMgKi8KIAluZnRsLT5FcmFzZVNpemUgPSB0aGlzLT5lcmFzZXNpemU7Ci0gICAgICAgIG5mdGwtPm5iX2Jsb2NrcyA9IHRoaXMtPnRvdGxlbiAvIHRoaXMtPmVyYXNlc2l6ZTsKKwluZnRsLT5uYl9ibG9ja3MgPSB0aGlzLT50b3RsZW4gLyB0aGlzLT5lcmFzZXNpemU7CiAJbmZ0bC0+bXRkID0gdGhpczsKIAogCWlmIChmaW5kX2Jvb3RfcmVjb3JkKG5mdGwpICE9IDApCkBAIC0xMDU0LDE4ICsxMDcxLDE4IEBACiAJCQkJc3luZHJvbWVbaV0gPQogCQkJCSAgICBSZWFkRE9DKGRvY3B0ciwgRUNDU3luZHJvbWUwICsgaSk7CiAJCQl9Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYl9lcnJvcnMgPSBkb2NfZGVjb2RlX2VjYyhidWYsIHN5bmRyb21lKTsKKwkJCW5iX2Vycm9ycyA9IGRvY19kZWNvZGVfZWNjKGJ1Ziwgc3luZHJvbWUpOwogCiAjaWZkZWYgRUNDX0RFQlVHCiAJCQlwcmludGYoIkVycm9ycyBjb3JyZWN0ZWQ6ICV4XG4iLCBuYl9lcnJvcnMpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmJfZXJyb3JzIDwgMCkgeworCQkJaWYgKG5iX2Vycm9ycyA8IDApIHsKIAkJCQkvKiBXZSByZXR1cm4gZXJyb3IsIGJ1dCBoYXZlIGFjdHVhbGx5IGRvbmUgdGhlIHJlYWQuIE5vdCB0aGF0CiAJCQkJICAgdGhpcyBjYW4gYmUgdG9sZCB0byB1c2VyLXNwYWNlLCB2aWEgc3lzX3JlYWQoKSwgYnV0IGF0IGxlYXN0CiAJCQkJICAgTVRELWF3YXJlIHN0dWZmIGNhbiBrbm93IGFib3V0IGl0IGJ5IGNoZWNraW5nICpyZXRsZW4gKi8KIAkJCQlwcmludGYoIkVDQyBFcnJvcnMgYXQgJWx4XG4iLCAobG9uZylmcm9tKTsKIAkJCQlyZXQgPSBET0NfRUVDQzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCX0KIAkJfQogCiAjaWZkZWYgUFNZQ0hPX0RFQlVHCkBAIC0xMDc5LDcgKzEwOTYsNyBAQAogCX0KIAogCS8qIGFjY29yZGluZyB0byAxMS40LjEsIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGJ1c3kgbGluZQotICAgICAgICAgKiBkcm9wIGlmIHdlIHJlYWQgdG8gdGhlIGVuZCBvZiB0aGUgcGFnZS4gICovCisJICogZHJvcCBpZiB3ZSByZWFkIHRvIHRoZSBlbmQgb2YgdGhlIHBhZ2UuICAqLwogCWlmKDAgPT0gKChmcm9tICsgKnJldGxlbikgJiAweDFmZikpCiAJewogCSAgICBEb0NfV2FpdFJlYWR5KHRoaXMpOwpAQCAtMTI5MSw4ICsxMzA4LDggQEAKIAogCSpyZXRsZW4gPSBsZW47CiAJLyogUmVhZGluZyB0aGUgZnVsbCBPT0IgZGF0YSBkcm9wcyB1cyBvZmYgb2YgdGhlIGVuZCBvZiB0aGUgcGFnZSwKLSAgICAgICAgICogY2F1c2luZyB0aGUgZmxhc2ggZGV2aWNlIHRvIGdvIGludG8gYnVzeSBtb2RlLCBzbyB3ZSBuZWVkCi0gICAgICAgICAqIHRvIHdhaXQgdW50aWwgcmVhZHkgMTEuNC4xIGFuZCBUb3NoaWJhIFRDNTgyNTZGVCBkb2NzICovCisJICogY2F1c2luZyB0aGUgZmxhc2ggZGV2aWNlIHRvIGdvIGludG8gYnVzeSBtb2RlLCBzbyB3ZSBuZWVkCisJICogdG8gd2FpdCB1bnRpbCByZWFkeSAxMS40LjEgYW5kIFRvc2hpYmEgVEM1ODI1NkZUIGRvY3MgKi8KIAogCXJldCA9IERvQ19XYWl0UmVhZHkodGhpcyk7CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZHR0LmMgYi9jb21tb24vY21kX2R0dC5jCmluZGV4IDk0M2IwYzcuLjQ0NzA3NmMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfZHR0LmMKKysrIGIvY29tbW9uL2NtZF9kdHQuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfZHR0Lmg+CiAKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9EVFQpCiAKQEAgLTQ2LDQgKzQ1LDEyIEBACiAJcmV0dXJuIDA7CiB9CS8qIGRvX2R0dCgpICovCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKERUVCkgPSBNS19DTURfRU5UUlkoCisJICAiZHR0IiwJMSwJMSwJZG9fZHR0LAorCSAgImR0dCAgICAgLSBEaWdpdGFsIFRoZXJtb21ldGVyIGFuZCBUaGVtb3N0YXRcbiIsCisJICAiICAgICAgICAtIFJlYWQgdGVtcGVyYXR1cmUgZnJvbSBkaWdpdGFsIHRoZXJtb21ldGVyIGFuZCB0aGVybW9zdGF0LlxuIgorKTsKKwogI2VuZGlmIC8qIENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRFRUICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2VlcHJvbS5jIGIvY29tbW9uL2NtZF9lZXByb20uYwppbmRleCAzZGIwYmNhLi4wYTc4MzE5IDEwMDY0NAotLS0gYS9jb21tb24vY21kX2VlcHJvbS5jCisrKyBiL2NvbW1vbi9jbWRfZWVwcm9tLmMKQEAgLTM3MSwzICszNzEsMjYgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogI2VuZGlmCS8qIENGR19DTURfRUVQUk9NICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRUVQUk9NKQorCisjaWZkZWYgQ0ZHX0kyQ19NVUxUSV9FRVBST01TCitjbWRfdGJsX3QgVV9CT09UX0NNRChFRVBST00pID0gTUtfQ01EX0VOVFJZKAorCSJlZXByb20iLAk2LAkxLAlkb19lZXByb20sCisJImVlcHJvbSAgLSBFRVBST00gc3ViLXN5c3RlbVxuIiwKKwkicmVhZCAgZGV2YWRkciBhZGRyIG9mZiBjbnRcbiIKKwkiZWVwcm9tIHdyaXRlIGRldmFkZHIgYWRkciBvZmYgY250XG4iCisJIiAgICAgICAtIHJlYWQvd3JpdGUgYGNudCcgYnl0ZXMgZnJvbSBgZGV2YWRkcmAgRUVQUk9NIGF0IG9mZnNldCBgb2ZmJ1xuIgorKTsKKyNlbHNlIC8qIE9uZSBFRVBST00gKi8KK2NtZF90YmxfdCBVX0JPT1RfQ01EKEVFUFJPTSkgPSBNS19DTURfRU5UUlkoCisJImVlcHJvbSIsCTUsCTEsCWRvX2VlcHJvbSwKKwkiZWVwcm9tICAtIEVFUFJPTSBzdWItc3lzdGVtXG4iLAorCSJyZWFkICBhZGRyIG9mZiBjbnRcbiIKKwkiZWVwcm9tIHdyaXRlIGFkZHIgb2ZmIGNudFxuIgorCSIgICAgICAgLSByZWFkL3dyaXRlIGBjbnQnIGJ5dGVzIGF0IEVFUFJPTSBvZmZzZXQgYG9mZidcbiIKKyk7CisjZW5kaWYgLyogQ0ZHX0kyQ19NVUxUSV9FRVBST01TICovCisKKyNlbmRpZgkvKiBDRkdfQ01EX0VFUFJPTSAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9lbGYuYyBiL2NvbW1vbi9jbWRfZWxmLmMKaW5kZXggNzQ5NTc2Mi4uYzA2OGMxMCAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9lbGYuYworKysgYi9jb21tb24vY21kX2VsZi5jCkBAIC0xNyw4ICsxNyw2IEBACiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bmV0Lmg+Ci0KLSNpbmNsdWRlIDxjbWRfZWxmLmg+CiAjaW5jbHVkZSA8ZWxmLmg+CiAKIApAQCAtMjgsNiArMjYsOCBAQAogI2RlZmluZSBNQVgoYSxiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQogI2VuZGlmCiAKK2ludCB2YWxpZF9lbGZfaW1hZ2UgKHVuc2lnbmVkIGxvbmcgYWRkcik7Cit1bnNpZ25lZCBsb25nIGxvYWRfZWxmX2ltYWdlICh1bnNpZ25lZCBsb25nIGFkZHIpOwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBJbnRlcnByZXRlciBjb21tYW5kIHRvIGJvb3QgYW4gYXJiaXRyYXJ5IEVMRiBpbWFnZSBmcm9tIG1lbW9yeS4KQEAgLTEzNiwxMSArMTM2LDExIEBACiAJcHJpbnRmICgiIyMgRXRoZXJuZXQgTUFDIGFkZHJlc3Mgbm90IGNvcGllZCB0byBOViBSQU1cbiIpOwogI2VuZGlmCiAKLSAgICAgICAgLyoKLSAgICAgICAgICogVXNlIGJvb3RhZGRyIHRvIGZpbmQgdGhlIGxvY2F0aW9uIGluIG1lbW9yeSB0aGF0IFZ4V29ya3MKLSAgICAgICAgICogd2lsbCBsb29rIGZvciB0aGUgYm9vdGxpbmUgc3RyaW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IKLSAgICAgICAgICogUG93ZXJQQyBpcyBMT0NBTF9NRU1fTE9DQUxfQURSUyArIEJPT1RfTElORV9PRkZTRVQgd2hpY2gKLSAgICAgICAgICogZGVmYXVsdHMgdG8gMHg0MjAwCisJLyoKKwkgKiBVc2UgYm9vdGFkZHIgdG8gZmluZCB0aGUgbG9jYXRpb24gaW4gbWVtb3J5IHRoYXQgVnhXb3JrcworCSAqIHdpbGwgbG9vayBmb3IgdGhlIGJvb3RsaW5lIHN0cmluZy4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yCisJICogUG93ZXJQQyBpcyBMT0NBTF9NRU1fTE9DQUxfQURSUyArIEJPT1RfTElORV9PRkZTRVQgd2hpY2gKKwkgKiBkZWZhdWx0cyB0byAweDQyMDAKIAkgKi8KIAogCWlmICgodG1wID0gZ2V0ZW52ICgiYm9vdGFkZHIiKSkgPT0gTlVMTCkKQEAgLTE0OCwxMCArMTQ4LDEwIEBACiAJZWxzZQogCQlib290YWRkciA9IHNpbXBsZV9zdHJ0b3VsICh0bXAsIE5VTEwsIDE2KTsKIAotICAgICAgICAvKgotICAgICAgICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIGJvb3RsaW5lIGlzIGRlZmluZWQgaW4gdGhlICdib290YXJncycKLSAgICAgICAgICogcGFyYW1ldGVyLiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgd2UgbWF5IGJlIGFibGUgdG8KLSAgICAgICAgICogY29uc3RydWN0IHRoZSBpbmZvCisJLyoKKwkgKiBDaGVjayB0byBzZWUgaWYgdGhlIGJvb3RsaW5lIGlzIGRlZmluZWQgaW4gdGhlICdib290YXJncycKKwkgKiBwYXJhbWV0ZXIuIElmIGl0IGlzIG5vdCBkZWZpbmVkLCB3ZSBtYXkgYmUgYWJsZSB0bworCSAqIGNvbnN0cnVjdCB0aGUgaW5mbwogCSAqLwogCiAJaWYgKChib290bGluZSA9IGdldGVudiAoImJvb3RhcmdzIikpICE9IE5VTEwpIHsKQEAgLTE5NCwxMCArMTk0LDEwIEBACiAJCWZsdXNoX2NhY2hlIChib290YWRkciwgTUFYKHN0cmxlbihidWlsZF9idWYpLCAyNTUpKTsKICNlbHNlCiAKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIEknbSBub3Qgc3VyZSB3aGF0IHRoZSBkZXZpY2Ugc2hvdWxkIGJlIGZvciBvdGhlcgotICAgICAgICAgICAgICAgICAqIFBQQyBmbGF2b3JzLCB0aGUgaG9zdG5hbWUgYW5kIGlwYWRkciBzaG91bGQgYmUgb2sKLSAgICAgICAgICAgICAgICAgKiB0byBqdXN0IGNvcHkKKwkJLyoKKwkJICogSSdtIG5vdCBzdXJlIHdoYXQgdGhlIGRldmljZSBzaG91bGQgYmUgZm9yIG90aGVyCisJCSAqIFBQQyBmbGF2b3JzLCB0aGUgaG9zdG5hbWUgYW5kIGlwYWRkciBzaG91bGQgYmUgb2sKKwkJICogdG8ganVzdCBjb3B5CiAJCSAqLwogCiAJCXByaW50ZiAoIk5vIGJvb3RhcmdzIGRlZmluZWRcbiIpOwpAQCAtMjA1LDEwICsyMDUsMTAgQEAKICNlbmRpZgogCX0KIAotICAgICAgICAvKgotICAgICAgICAgKiBJZiB0aGUgZGF0YSBhdCB0aGUgbG9hZCBhZGRyZXNzIGlzIGFuIGVsZiBpbWFnZSwgdGhlbgotICAgICAgICAgKiB0cmVhdCBpdCBsaWtlIGFuIGVsZiBpbWFnZS4gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBpdCBpcyBhCi0gICAgICAgICAqIGJpbmFyeSBpbWFnZQorCS8qCisJICogSWYgdGhlIGRhdGEgYXQgdGhlIGxvYWQgYWRkcmVzcyBpcyBhbiBlbGYgaW1hZ2UsIHRoZW4KKwkgKiB0cmVhdCBpdCBsaWtlIGFuIGVsZiBpbWFnZS4gT3RoZXJ3aXNlLCBhc3N1bWUgdGhhdCBpdCBpcyBhCisJICogYmluYXJ5IGltYWdlCiAJICovCiAKIAlpZiAodmFsaWRfZWxmX2ltYWdlIChhZGRyKSkgewpAQCAtMzIxLDQgKzMyMSwxNiBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitjbWRfdGJsX3QgVV9CT09UX0NNRChCT09URUxGKSA9IE1LX0NNRF9FTlRSWSgKKwkiYm9vdGVsZiIsICAgICAgMiwgICAgICAwLCAgICAgIGRvX2Jvb3RlbGYsCisJImJvb3RlbGYgLSBCb290IGZyb20gYW4gRUxGIGltYWdlIGluIG1lbW9yeVxuIiwKKwkiIFthZGRyZXNzXSAtIGxvYWQgYWRkcmVzcyBvZiBFTEYgaW1hZ2UuXG4iCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChCT09UVlgpID0gTUtfQ01EX0VOVFJZKAorCSJib290dngiLCAgICAgIDIsICAgICAgMCwgICAgICBkb19ib290dngsCisJImJvb3R2eCAgLSBCb290IHZ4V29ya3MgZnJvbSBhbiBFTEYgaW1hZ2VcbiIsCisJIiBbYWRkcmVzc10gLSBsb2FkIGFkZHJlc3Mgb2YgdnhXb3JrcyBFTEYgaW1hZ2UuXG4iCispOworCiAjZW5kaWYJLyogQ0ZHX0NNRF9FTEYgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZmF0LmMgYi9jb21tb24vY21kX2ZhdC5jCmluZGV4IDRkYjcwZTEuLjEyZWI3NjQgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfZmF0LmMKKysrIGIvY29tbW9uL2NtZF9mYXQuYwpAQCAtMjYsNyArMjYsNiBAQAogICovCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ib290Lmg+CiAjaW5jbHVkZSA8Y21kX2F1dG9zY3JpcHQuaD4KICNpbmNsdWRlIDxzX3JlY29yZC5oPgogI2luY2x1ZGUgPG5ldC5oPgpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9mZGMuYyBiL2NvbW1vbi9jbWRfZmRjLmMKaW5kZXggM2VlMzQyZi4uMzAzMDc1MCAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9mZGMuYworKysgYi9jb21tb24vY21kX2ZkYy5jCkBAIC00Nyw5ICs0Nyw5IEBACiAjZW5kaWYKIAogCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfREFURSkKLSNpbmNsdWRlIDxydGMuaD4KLSNlbmRpZgorLyojaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfREFURSkgKi8KKy8qI2luY2x1ZGUgPHJ0Yy5oPiAqLworLyojZW5kaWYgKi8KIAogI2lmICgoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GREMpIHx8IChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZET1MpKQogCkBAIC0yMTEsNyArMjExLDcgQEAKIAlyZXR1cm4gVFJVRTsKIH0KICNlbmRpZgotICAgCisKIC8qIFN1cHBvcnRpbmcgRnVuY3Rpb25zICovCiAvKiByZWFkcyBhIFJlZ2lzdGVyIG9mIHRoZSBGREMgKi8KIHVuc2lnbmVkIGNoYXIgcmVhZF9mZGNfcmVnKHVuc2lnbmVkIGludCBhZGRyKQpAQCAtMjIwLDE0ICsyMjAsMTQgQEAKIAkJKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoQ0ZHX0lTQV9JT19CQVNFX0FERFJFU1MgKwogCQkJCQkgICAoYWRkciAqIENGR19JU0FfSU9fU1RSSURFKSArCiAJCQkJCSAgIENGR19JU0FfSU9fT0ZGU0VUKTsKLSAgICAgICAgCisKIAlyZXR1cm4gdmFsIFswXTsKIH0KIAogLyogd3JpdGVzIGEgUmVnaXN0ZXIgb2YgdGhlIEZEQyAqLwogdm9pZCB3cml0ZV9mZGNfcmVnKHVuc2lnbmVkIGludCBhZGRyLCB1bnNpZ25lZCBjaGFyIHZhbCkKIHsKLSAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqdG1wID0KKwl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICp0bXAgPQogCQkodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShDRkdfSVNBX0lPX0JBU0VfQUREUkVTUyArCiAJCQkJCSAgIChhZGRyICogQ0ZHX0lTQV9JT19TVFJJREUpICsKIAkJCQkJICAgQ0ZHX0lTQV9JT19PRkZTRVQpOwpAQCAtNjQyLDcgKzY0Miw2IEBACiB9CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogaW50IGZkY19zZXR1cAogKiBzZXR1cCB0aGUgZmRjIGFjY29yZGluZyB0aGUgZGF0YXNoZWV0CkBAIC02NTgsNyArNjU3LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ0ZHX0ZEQ19IV19JTklUCi0gICAgICAgIGZkY19od19pbml0ICgpOworCWZkY19od19pbml0ICgpOwogI2VuZGlmCiAJLyogZmlyc3QsIHdlIHJlc2V0IHRoZSBGREMgdmlhIHRoZSBET1IgKi8KIAl3cml0ZV9mZGNfcmVnKEZEQ19ET1IsMHgwMCk7CkBAIC03MTYsMTQgKzcxNSwxNCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogaW50IGZkY19mZG9zX2luaXQKLSogaW5pdGlhbGl6ZSB0aGUgRkRDIGxheWVyIAotKiAKKyogaW5pdGlhbGl6ZSB0aGUgRkRDIGxheWVyCisqCiAqLwogaW50IGZkY19mZG9zX2luaXQgKGludCBkcml2ZSkKIHsKIAlGRF9HRU9fU1RSVUNUICpwRkcgPSAoRkRfR0VPX1NUUlVDVCAqKWZsb3BweV90eXBlOwogCUZEQ19DT01NQU5EX1NUUlVDVCAqcENNRCA9ICZjbWQ7Ci0gICAgCisKIAkvKiBzZXR1cCBGREMgYW5kIHNjYW4gZm9yIGRyaXZlcyAgKi8KIAlpZihmZGNfc2V0dXAoZHJpdmUscENNRCxwRkcpPT1GQUxTRSkgewogCQlwcmludGYoIlxuKiogRXJyb3IgaW4gc2V0dXAgRkRDICoqXG4iKTsKQEAgLTc0OCwxOSArNzQ3LDE5IEBACiAKIAkvKiByZWFkIGZpcnN0IGJsb2NrICovCiAJcENNRC0+Ymxucj0wOwotICAgICAgICByZXR1cm4gVFJVRTsKKwlyZXR1cm4gVFJVRTsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBpbnQgZmRjX2Zkb3Nfc2VlawotKiBwYXJhbWV0ZXIgaXMgYSBibG9jayBudW1iZXIgCisqIHBhcmFtZXRlciBpcyBhIGJsb2NrIG51bWJlcgogKi8KIGludCBmZGNfZmRvc19zZWVrIChpbnQgd2hlcmUpCiB7CiAJRkRfR0VPX1NUUlVDVCAqcEZHID0gKEZEX0dFT19TVFJVQ1QgKilmbG9wcHlfdHlwZTsKIAlGRENfQ09NTUFORF9TVFJVQ1QgKnBDTUQgPSAmY21kOwogCi0gICAgICAgIHBDTUQgLT4gYmxuciA9IHdoZXJlIDsKLSAgICAgICAgcmV0dXJuIChmZGNfc2VlayAocENNRCwgcEZHKSk7CisJcENNRCAtPiBibG5yID0gd2hlcmUgOworCXJldHVybiAoZmRjX3NlZWsgKHBDTUQsIHBGRykpOwogfQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIGludCBmZGNfZmRvc19yZWFkCkBAIC03NzEsNyArNzcwLDcgQEAKIAlGRF9HRU9fU1RSVUNUICpwRkcgPSAoRkRfR0VPX1NUUlVDVCAqKWZsb3BweV90eXBlOwogCUZEQ19DT01NQU5EX1NUUlVDVCAqcENNRCA9ICZjbWQ7CiAKLSAgICAgICAgcmV0dXJuIChmZGNfcmVhZF9kYXRhIChidWZmZXIsIGxlbiwgcENNRCwgcEZHKSk7CisJcmV0dXJuIChmZGNfcmVhZF9kYXRhIChidWZmZXIsIGxlbiwgcENNRCwgcEZHKSk7CiB9CiAjZW5kaWYgIC8qIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZET1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTc4Myw3ICs3ODIsNyBAQAogewogCUZEX0dFT19TVFJVQ1QgKnBGRyA9IChGRF9HRU9fU1RSVUNUICopZmxvcHB5X3R5cGU7CiAJRkRDX0NPTU1BTkRfU1RSVUNUICpwQ01EID0gJmNtZDsKLSAJdW5zaWduZWQgbG9uZyBhZGRyLGltc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGFkZHIsaW1zaXplOwogCWltYWdlX2hlYWRlcl90ICpoZHI7ICAvKiB1c2VkIGZvciBmZGMgYm9vdCAqLwogCXVuc2lnbmVkIGNoYXIgYm9vdF9kcml2ZTsKIAlpbnQgaSxucm9mYmxrOwpAQCAtNzkzLDcgKzc5Miw3IEBACiAJc3dpdGNoIChhcmdjKSB7CiAJY2FzZSAxOgogCQlhZGRyID0gQ0ZHX0xPQURfQUREUjsKLQkJYm9vdF9kcml2ZT1DRkdfRkRDX0RSSVZFX05VTUJFUjsgCisJCWJvb3RfZHJpdmU9Q0ZHX0ZEQ19EUklWRV9OVU1CRVI7CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKQEAgLTg4MSw3ICs4ODAsMTcgQEAKIH0KIAogCi0KICNlbmRpZiAvKiBDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZEQyAqLwogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZEQykKKworY21kX3RibF90IFVfQk9PVF9DTUQoRkRDKSA9IE1LX0NNRF9FTlRSWSgKKwkiZmRjYm9vdCIsCTMsCTEsCWRvX2ZkY2Jvb3QsCisJImZkY2Jvb3QgLSBib290IGZyb20gZmxvcHB5IGRldmljZVxuIiwKKwkibG9hZEFkZHIgZHJpdmVcbiIKKyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZmRvcy5jIGIvY29tbW9uL2NtZF9mZG9zLmMKaW5kZXggNGI0MTFiMy4uODI1N2U3MCAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9mZG9zLmMKKysrIGIvY29tbW9uL2NtZF9mZG9zLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GRE9TKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBkb19mZG9zYm9vdCAtLSAKKyAqIGRvX2Zkb3Nib290IC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIGludCBkb19mZG9zYm9vdChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKQEAgLTQ1LDUzICs0NSw1MyBAQAogICAgIGludCByY29kZSA9IDA7CiAgICAgY2hhciBidWYgWzEwXTsKICAgICBpbnQgZHJpdmUgPSBDRkdfRkRDX0RSSVZFX05VTUJFUjsKLSAgICAKKwogICAgIC8qIHByZS1zZXQgbG9hZF9hZGRyICovCiAgICAgaWYgKChlcCA9IGdldGVudigibG9hZGFkZHIiKSkgIT0gTlVMTCkgewotICAgICAgICBsb2FkX2FkZHIgPSBzaW1wbGVfc3RydG91bChlcCwgTlVMTCwgMTYpOworCWxvYWRfYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGVwLCBOVUxMLCAxNik7CiAgICAgfQogCiAgICAgLyogcHJlLXNldCBCb290IGZpbGUgbmFtZSAqLwogICAgIGlmICgobmFtZSA9IGdldGVudigiYm9vdGZpbGUiKSkgPT0gTlVMTCkgewotICAgICAgICBuYW1lID0gInVJbWFnZSI7CisJbmFtZSA9ICJ1SW1hZ2UiOwogICAgIH0KIAogICAgIHN3aXRjaCAoYXJnYykgewogICAgIGNhc2UgMToKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgY2FzZSAyOgogCS8qIG9ubHkgb25lIGFyZyAtIGFjY2VwdCB0d28gZm9ybXM6Ci0gICAgICAgICAqIGp1c3QgbG9hZCBhZGRyZXNzLCBvciBqdXN0IGJvb3QgZmlsZSBuYW1lLgotICAgICAgICAgKiBUaGUgbGF0dGVyIGZvcm0gbXVzdCBiZSB3cml0dGVuICJmaWxlbmFtZSIgaGVyZS4KLSAgICAgICAgICovICAgICAgICAKLSAgICAgICAgaWYgKGFyZ3ZbMV1bMF0gPT0gJyInKSB7CS8qIGp1c3QgYm9vdCBmaWxlbmFtZSAqLwotICAgICAgICAgICAgbmFtZSA9IGFyZ3YgWzFdOwotICAgICAgICB9IGVsc2UgewkJCS8qIGxvYWQgYWRkcmVzcwkqLwotICAgICAgICAgICAgbG9hZF9hZGRyID0gc2ltcGxlX3N0cnRvdWwoYXJndlsxXSwgTlVMTCwgMTYpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCSAqIGp1c3QgbG9hZCBhZGRyZXNzLCBvciBqdXN0IGJvb3QgZmlsZSBuYW1lLgorCSAqIFRoZSBsYXR0ZXIgZm9ybSBtdXN0IGJlIHdyaXR0ZW4gImZpbGVuYW1lIiBoZXJlLgorCSAqLworCWlmIChhcmd2WzFdWzBdID09ICciJykgewkvKiBqdXN0IGJvb3QgZmlsZW5hbWUgKi8KKwkgICAgbmFtZSA9IGFyZ3YgWzFdOworCX0gZWxzZSB7CQkJLyogbG9hZCBhZGRyZXNzCSovCisJICAgIGxvYWRfYWRkciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKKwl9CisJYnJlYWs7CiAgICAgY2FzZSAzOgotICAgICAgICBsb2FkX2FkZHIgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxNik7Ci0gICAgICAgIG5hbWUgPSBhcmd2IFsyXTsKLSAgICAgICAgYnJlYWs7CisJbG9hZF9hZGRyID0gc2ltcGxlX3N0cnRvdWwoYXJndlsxXSwgTlVMTCwgMTYpOworCW5hbWUgPSBhcmd2IFsyXTsKKwlicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwotICAgICAgICBicmVhazsKKwlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOworCWJyZWFrOwogICAgIH0KIAogICAgIC8qIEluaXQgcGh5c2ljYWwgbGF5ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICghZmRjX2Zkb3NfaW5pdCAoZHJpdmUpKSB7Ci0gICAgICAgIHJldHVybiAoLTEpOworCXJldHVybiAoLTEpOwogICAgIH0KLSAgICAKKwogICAgIC8qIE9wZW4gZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmIChkb3Nfb3BlbiAobmFtZSkgPCAwKSB7Ci0gICAgICAgIHByaW50ZiAoIlVuYWJsZSB0byBvcGVuICVzXG4iLCBuYW1lKTsKLSAgICAgICAgcmV0dXJuIDE7CisJcHJpbnRmICgiVW5hYmxlIHRvIG9wZW4gJXNcbiIsIG5hbWUpOworCXJldHVybiAxOwogICAgIH0KICAgICBpZiAoKHNpemUgPSBkb3NfcmVhZCAobG9hZF9hZGRyKSkgPCAwKSB7Ci0gICAgICAgIHByaW50ZiAoImJvb3QgZXJyb3JcbiIpOwotICAgICAgICByZXR1cm4gMTsKKwlwcmludGYgKCJib290IGVycm9yXG4iKTsKKwlyZXR1cm4gMTsKICAgICB9CiAgICAgZmx1c2hfY2FjaGUgKGxvYWRfYWRkciwgc2l6ZSk7CiAKQEAgLTk5LDQ3ICs5OSw1OSBAQAogICAgIHNldGVudigiZmlsZXNpemUiLCBidWYpOwogCiAgICAgcHJpbnRmKCJGbG9wcHkgRE9TIGxvYWQgY29tcGxldGU6ICVkIGJ5dGVzIGxvYWRlZCB0byAweCVseFxuIiwKLSAgICAgICAgICAgc2l6ZSwgbG9hZF9hZGRyKTsKLSAgICAKKwkgICBzaXplLCBsb2FkX2FkZHIpOworCiAgICAgLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIGF0dGVtcHQgYW4gYXV0by1zdGFydCAqLwogICAgIGlmICgoKGVwID0gZ2V0ZW52KCJhdXRvc3RhcnQiKSkgIT0gTlVMTCkgJiYgKHN0cmNtcChlcCwieWVzIikgPT0gMCkpIHsKLSAgICAgICAgY2hhciAqbG9jYWxfYXJnc1syXTsKLSAgICAgICAgZXh0ZXJuIGludCBkb19ib290bSAoY21kX3RibF90ICosIGludCwgaW50LCBjaGFyICpbXSk7Ci0gICAgICAgIGxvY2FsX2FyZ3NbMF0gPSBhcmd2WzBdOwotICAgICAgICBsb2NhbF9hcmdzWzFdID0gTlVMTDsKLSAgICAgICAgcHJpbnRmICgiQXV0b21hdGljIGJvb3Qgb2YgaW1hZ2UgYXQgYWRkciAweCUwOGxYIC4uLlxuIiwgbG9hZF9hZGRyKTsKLSAgICAgICAgcmNvZGUgPSBkb19ib290bSAoY21kdHAsIDAsIDEsIGxvY2FsX2FyZ3MpOworCWNoYXIgKmxvY2FsX2FyZ3NbMl07CisJZXh0ZXJuIGludCBkb19ib290bSAoY21kX3RibF90ICosIGludCwgaW50LCBjaGFyICpbXSk7CisJbG9jYWxfYXJnc1swXSA9IGFyZ3ZbMF07CisJbG9jYWxfYXJnc1sxXSA9IE5VTEw7CisJcHJpbnRmICgiQXV0b21hdGljIGJvb3Qgb2YgaW1hZ2UgYXQgYWRkciAweCUwOGxYIC4uLlxuIiwgbG9hZF9hZGRyKTsKKwlyY29kZSA9IGRvX2Jvb3RtIChjbWR0cCwgMCwgMSwgbG9jYWxfYXJncyk7CiAgICAgfQogICAgIHJldHVybiByY29kZTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogZG9fZmRvc2xzIC0tIAorICogZG9fZmRvc2xzIC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIGludCBkb19mZG9zbHMoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAgICAgY2hhciAqcGF0aCA9ICIiOwogICAgIGludCBkcml2ZSA9IENGR19GRENfRFJJVkVfTlVNQkVSOwotICAgIAorCiAgICAgc3dpdGNoIChhcmdjKSB7CiAgICAgY2FzZSAxOgotICAgICAgICBicmVhazsKKwlicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIHBhdGggPSBhcmd2IFsxXTsKLSAgICAgICAgYnJlYWs7CisJcGF0aCA9IGFyZ3YgWzFdOworCWJyZWFrOwogICAgIH0KIAogICAgIC8qIEluaXQgcGh5c2ljYWwgbGF5ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICghZmRjX2Zkb3NfaW5pdCAoZHJpdmUpKSB7Ci0gICAgICAgIHJldHVybiAoLTEpOworCXJldHVybiAoLTEpOwogICAgIH0KICAgICAvKiBPcGVuIGRpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoZG9zX29wZW4gKHBhdGgpIDwgMCkgewotICAgICAgICBwcmludGYgKCJVbmFibGUgdG8gb3BlbiAlc1xuIiwgcGF0aCk7Ci0gICAgICAgIHJldHVybiAxOworCXByaW50ZiAoIlVuYWJsZSB0byBvcGVuICVzXG4iLCBwYXRoKTsKKwlyZXR1cm4gMTsKICAgICB9CiAgICAgcmV0dXJuIChkb3NfZGlyICgpKTsKIH0KIAotI2VuZGlmCitjbWRfdGJsX3QgVV9CT09UX0NNRChGRE9TX0JPT1QpID0gTUtfQ01EX0VOVFJZKAorCSJmZG9zYm9vdCIsCTMsCTAsCWRvX2Zkb3Nib290LAorCSJmZG9zYm9vdC0gYm9vdCBmcm9tIGEgZG9zIGZsb3BweSBmaWxlXG4iLAorCSJbbG9hZEFkZHJdIFtmaWxlbmFtZV1cbiIKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEZET1NfTFMpID0gTUtfQ01EX0VOVFJZKAorCSJmZG9zbHMiLAkyLAkwLAlkb19mZG9zbHMsCisJImZkb3NscyAgLSBsaXN0IGZpbGVzIGluIGEgZGlyZWN0b3J5XG4iLAorCSJbZGlyZWN0b3J5XVxuIgorKTsKKworI2VuZGlmCS8qIENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkRPUyAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9mbGFzaC5jIGIvY29tbW9uL2NtZF9mbGFzaC5jCmluZGV4IGVmYzg5ZGMuLjY5MTRmNTkgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfZmxhc2guYworKysgYi9jb21tb24vY21kX2ZsYXNoLmMKQEAgLTI2LDggKzI2LDcgQEAKICAqLwogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgotI2luY2x1ZGUgPGZsYXNoLmg+CisKIAogI2lmZGVmIENPTkZJR19IQVNfREFUQUZMQVNICiAjaW5jbHVkZSA8ZGF0YWZsYXNoLmg+CkBAIC00MzgsNCArNDM3LDQxIEBACiAJcmV0dXJuIHJjb2RlOwogfQogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworY21kX3RibF90IFVfQk9PVF9DTUQoRkxJTkZPKSA9IE1LX0NNRF9FTlRSWSgKKwkiZmxpbmZvIiwgICAgMiwgICAgMSwgICAgZG9fZmxpbmZvLAorCSJmbGluZm8gIC0gcHJpbnQgRkxBU0ggbWVtb3J5IGluZm9ybWF0aW9uXG4iLAorCSJcbiAgICAtIHByaW50IGluZm9ybWF0aW9uIGZvciBhbGwgRkxBU0ggbWVtb3J5IGJhbmtzXG4iCisJImZsaW5mbyBOXG4gICAgLSBwcmludCBpbmZvcm1hdGlvbiBmb3IgRkxBU0ggbWVtb3J5IGJhbmsgIyBOXG4iCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChFUkFTRSkgPSBNS19DTURfRU5UUlkoCisJImVyYXNlIiwgICAzLCAgIDEsICBkb19mbGVyYXNlLAorCSJlcmFzZSAgIC0gZXJhc2UgRkxBU0ggbWVtb3J5XG4iLAorCSJzdGFydCBlbmRcbiIKKwkiICAgIC0gZXJhc2UgRkxBU0ggZnJvbSBhZGRyICdzdGFydCcgdG8gYWRkciAnZW5kJ1xuIgorCSJlcmFzZSBOOlNGWy1TTF1cbiAgICAtIGVyYXNlIHNlY3RvcnMgU0YtU0wgaW4gRkxBU0ggYmFuayAjIE5cbiIKKwkiZXJhc2UgYmFuayBOXG4gICAgLSBlcmFzZSBGTEFTSCBiYW5rICMgTlxuIgorCSJlcmFzZSBhbGxcbiAgICAtIGVyYXNlIGFsbCBGTEFTSCBiYW5rc1xuIgorKTsKKworY21kX3RibF90IFVfQk9PVF9DTUQoUFJPVEVDVCkgPSBNS19DTURfRU5UUlkoCisJInByb3RlY3QiLCAgNCwgIDEsICAgZG9fcHJvdGVjdCwKKwkicHJvdGVjdCAtIGVuYWJsZSBvciBkaXNhYmxlIEZMQVNIIHdyaXRlIHByb3RlY3Rpb25cbiIsCisJIm9uICBzdGFydCBlbmRcbiIKKwkiICAgIC0gcHJvdGVjdCBGTEFTSCBmcm9tIGFkZHIgJ3N0YXJ0JyB0byBhZGRyICdlbmQnXG4iCisJInByb3RlY3Qgb24gIE46U0ZbLVNMXVxuIgorCSIgICAgLSBwcm90ZWN0IHNlY3RvcnMgU0YtU0wgaW4gRkxBU0ggYmFuayAjIE5cbiIKKwkicHJvdGVjdCBvbiAgYmFuayBOXG4gICAgLSBwcm90ZWN0IEZMQVNIIGJhbmsgIyBOXG4iCisJInByb3RlY3Qgb24gIGFsbFxuICAgIC0gcHJvdGVjdCBhbGwgRkxBU0ggYmFua3NcbiIKKwkicHJvdGVjdCBvZmYgc3RhcnQgZW5kXG4iCisJIiAgICAtIG1ha2UgRkxBU0ggZnJvbSBhZGRyICdzdGFydCcgdG8gYWRkciAnZW5kJyB3cml0YWJsZVxuIgorCSJwcm90ZWN0IG9mZiBOOlNGWy1TTF1cbiIKKwkiICAgIC0gbWFrZSBzZWN0b3JzIFNGLVNMIHdyaXRhYmxlIGluIEZMQVNIIGJhbmsgIyBOXG4iCisJInByb3RlY3Qgb2ZmIGJhbmsgTlxuICAgIC0gbWFrZSBGTEFTSCBiYW5rICMgTiB3cml0YWJsZVxuIgorCSJwcm90ZWN0IG9mZiBhbGxcbiAgICAtIG1ha2UgYWxsIEZMQVNIIGJhbmtzIHdyaXRhYmxlXG4iCispOworCiAjZW5kaWYJLyogQ0ZHX0NNRF9GTEFTSCAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9mcGdhLmMgYi9jb21tb24vY21kX2ZwZ2EuYwppbmRleCA0ZTRjNGFiLi5mOGFlNTJhIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2ZwZ2EuYworKysgYi9jb21tb24vY21kX2ZwZ2EuYwpAQCAtMjcsMTEgKzI3LDExIEBACiAgKi8KICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2ZwZ2EuaD4KLSNpbmNsdWRlIDxmcGdhLmg+CisjaW5jbHVkZSA8Y21kX2JzcC5oPgogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05FVCkKICNpbmNsdWRlIDxuZXQuaD4KICNlbmRpZgorI2luY2x1ZGUgPGZwZ2EuaD4KIAogI2lmIDAKICNkZWZpbmUJRlBHQV9ERUJVRwpAQCAtMTU1LDQgKzE1NSwxMyBAQAogCXJldHVybiBvcDsKIH0KIAorY21kX3RibF90IFVfQk9PVF9DTUQoRlBHQSkgPSBNS19DTURfRU5UUlkoCisJImZwZ2EiLCAgICA2LCAgICAgMSwgICAgIGRvX2ZwZ2EsCisJImZwZ2EgICAtIGxvYWRhYmxlIEZQR0EgaW1hZ2Ugc3VwcG9ydFxuIiwKKwkiZnBnYSBbb3BlcmF0aW9uIHR5cGVdIFtkZXZpY2UgbnVtYmVyXSBbaW1hZ2UgYWRkcmVzc10gW2ltYWdlIHNpemVdXG4iCisJImZwZ2Egb3BlcmF0aW9uczpcbiIKKwkiXHRpbmZvXHRsaXN0IGtub3duIGRldmljZSBpbmZvcm1hdGlvbi5cbiIKKwkiXHRsb2FkXHRMb2FkIGRldmljZSBmcm9tIG1lbW9yeSBidWZmZXIuXG4iCisJIlx0ZHVtcFx0TG9hZCBkZXZpY2UgdG8gbWVtb3J5IGJ1ZmZlci5cbiIKKyk7CiAjZW5kaWYJLyogQ09ORklHX0ZQR0EgJiYgQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GUEdBICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2kyYy5jIGIvY29tbW9uL2NtZF9pMmMuYwppbmRleCBmZTU4NDFlLi4yMDNlODAzIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2kyYy5jCisrKyBiL2NvbW1vbi9jbWRfaTJjLmMKQEAgLTgzLDcgKzgzLDYgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfaTJjLmg+CiAjaW5jbHVkZSA8aTJjLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCkBAIC04NjUsNCArODY0LDYxIEBACiB9CiAjZW5kaWYJLyogQ0ZHX0NNRF9TRFJBTSAqLwogCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKElNRCkgPSBNS19DTURfRU5UUlkoCisJImltZCIsCTQsCTEsCWRvX2kyY19tZCwJCVwKKwkiaW1kICAgICAtIGkyYyBtZW1vcnkgZGlzcGxheVxuIiwJCQkJXAorCSJjaGlwIGFkZHJlc3NbLjAsIC4xLCAuMl0gWyMgb2Ygb2JqZWN0c11cbiAgICAtIGkyYyBtZW1vcnkgZGlzcGxheVxuIiBcCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChJTU0pID0gTUtfQ01EX0VOVFJZKAorIAkiaW1tIiwJMywJMSwJZG9faTJjX21tLAorCSJpbW0gICAgIC0gaTJjIG1lbW9yeSBtb2RpZnkgKGF1dG8taW5jcmVtZW50aW5nKVxuIiwKKwkiY2hpcCBhZGRyZXNzWy4wLCAuMSwgLjJdXG4iCisJIiAgICAtIG1lbW9yeSBtb2RpZnksIGF1dG8gaW5jcmVtZW50IGFkZHJlc3NcbiIKKyk7CitjbWRfdGJsX3QgVV9CT09UX0NNRChJTk0pID0gTUtfQ01EX0VOVFJZKAorCSJpbm0iLAkzLAkxLAlkb19pMmNfbm0sCisJImlubSAgICAgLSBtZW1vcnkgbW9kaWZ5IChjb25zdGFudCBhZGRyZXNzKVxuIiwKKwkiY2hpcCBhZGRyZXNzWy4wLCAuMSwgLjJdXG4gICAgLSBtZW1vcnkgbW9kaWZ5LCByZWFkIGFuZCBrZWVwIGFkZHJlc3NcbiIKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKElNVykgPSBNS19DTURfRU5UUlkoCisJImltdyIsCTUsCTEsCWRvX2kyY19tdywKKwkiaW13ICAgICAtIG1lbW9yeSB3cml0ZSAoZmlsbClcbiIsCisJImNoaXAgYWRkcmVzc1suMCwgLjEsIC4yXSB2YWx1ZSBbY291bnRdXG4gICAgLSBtZW1vcnkgd3JpdGUgKGZpbGwpXG4iCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChJQ1JDKSA9IE1LX0NNRF9FTlRSWSgKKwkiaWNyYzMyIiwJNSwJMSwJZG9faTJjX2NyYywKKwkiaWNyYzMyICAtIGNoZWNrc3VtIGNhbGN1bGF0aW9uXG4iLAorCSJjaGlwIGFkZHJlc3NbLjAsIC4xLCAuMl0gY291bnRcbiAgICAtIGNvbXB1dGUgQ1JDMzIgY2hlY2tzdW1cbiIKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKElQUk9CRSkgPSBNS19DTURfRU5UUlkoCisJImlwcm9iZSIsCTEsCTEsCWRvX2kyY19wcm9iZSwKKwkiaXByb2JlICAtIHByb2JlIHRvIGRpc2NvdmVyIHZhbGlkIEkyQyBjaGlwIGFkZHJlc3Nlc1xuIiwKKwkiXG4gICAgLWRpc2NvdmVyIHZhbGlkIEkyQyBjaGlwIGFkZHJlc3Nlc1xuIgorKTsKKworLyoKKyAqIFJlcXVpcmUgZnVsbCBuYW1lIGZvciAiaWxvb3AiIGJlY2F1c2UgaXQgaXMgYW4gaW5maW5pdGUgbG9vcCEKKyAqLworY21kX3RibF90IFVfQk9PVF9DTUQoSUxPT1ApID0gTUtfQ01EX0VOVFJZKAorCSJpbG9vcCIsCTUsCTEsCWRvX2kyY19sb29wLAorCSJpbG9vcCAgIC0gaW5maW5pdGUgbG9vcCBvbiBhZGRyZXNzIHJhbmdlXG4iLAorCSJjaGlwIGFkZHJlc3NbLjAsIC4xLCAuMl0gWyMgb2Ygb2JqZWN0c11cbiIKKwkiICAgIC0gbG9vcCwgcmVhZGluZyBhIHNldCBvZiBhZGRyZXNzZXNcbiIKKyk7CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TRFJBTSkKK2NtZF90YmxfdCBVX0JPT1RfQ01EKElTRFJBTSkgPSBNS19DTURfRU5UUlkoCisJImlzZHJhbSIsCTIsCTEsCWRvX3NkcmFtLAorCSJpc2RyYW0gIC0gcHJpbnQgU0RSQU0gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvblxuIiwKKwkiY2hpcFxuICAgIC0gcHJpbnQgU0RSQU0gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvblxuIgorCSIgICAgICAodmFsaWQgY2hpcCB2YWx1ZXMgNTAuLjU3KVxuIgorKTsKKyNlbmRpZgogI2VuZGlmCS8qIENGR19DTURfSTJDICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2lkZS5jIGIvY29tbW9uL2NtZF9pZGUuYwppbmRleCBmMWIyNGJlLi5jMWU2MTBhIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2lkZS5jCisrKyBiL2NvbW1vbi9jbWRfaWRlLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNlbmRpZgogI2luY2x1ZGUgPGlkZS5oPgogI2luY2x1ZGUgPGF0YS5oPgotI2luY2x1ZGUgPGNtZF9pZGUuaD4KICNpbmNsdWRlIDxjbWRfZGlzay5oPgogI2lmZGVmIENPTkZJR19TVEFUVVNfTEVECiAjIGluY2x1ZGUgPHN0YXR1c19sZWQuaD4KQEAgLTc5OCw3ICs3OTcsNyBAQAogewogCXVzaG9ydAkqZGJ1ZjsKIAl2b2xhdGlsZSB1c2hvcnQJKnBidWY7Ci0JCisKIAlwYnVmID0gKHVzaG9ydCAqKShBVEFfQ1VSUl9CQVNFKGRldikrQVRBX0RBVEFfUkVHKTsKIAlkYnVmID0gKHVzaG9ydCAqKXNlY3RfYnVmOwogCXdoaWxlICh3b3Jkcy0tKSB7CkBAIC04MjgsOCArODI3LDYgQEAKICNlbmRpZgkvKiBfX1BQQ19fICovCiAKIAotCi0KICNpZmRlZiBfX1BQQ19fCiBzdGF0aWMgdm9pZAogb3V0cHV0X2RhdGEoaW50IGRldiwgdWxvbmcgKnNlY3RfYnVmLCBpbnQgd29yZHMpCkBAIC0xMzgxLDcgKzEzNzgsNiBAQAogICovCiAKIAotCiAjdW5kZWYJQVRBUElfREVCVUcKIAogI2lmZGVmCUFUQVBJX0RFQlVHCkBAIC0xNjgxLDcgKzE2NzcsNiBAQAogfQogCiAKLQogc3RhdGljIHZvaWQJYXRhcGlfaW5xdWlyeShibG9ja19kZXZfZGVzY190ICogZGV2X2Rlc2MpCiB7CiAJdW5zaWduZWQgY2hhciBjY2JbMTJdOyAvKiBDb21tYW5kIGRlc2NyaXB0b3IgYmxvY2sgKi8KQEAgLTE4MTYsNCArMTgxMSwyMyBAQAogCiAjZW5kaWYgLyogQ09ORklHX0FUQVBJICovCiAKK2NtZF90YmxfdCBVX0JPT1RfQ01EKElERSkgPSBNS19DTURfRU5UUlkoCisJImlkZSIsICA1LCAgMSwgIGRvX2lkZSwKKwkiaWRlICAgICAtIElERSBzdWItc3lzdGVtXG4iLAorCSJyZXNldCAtIHJlc2V0IElERSBjb250cm9sbGVyXG4iCisJImlkZSBpbmZvICAtIHNob3cgYXZhaWxhYmxlIElERSBkZXZpY2VzXG4iCisJImlkZSBkZXZpY2UgW2Rldl0gLSBzaG93IG9yIHNldCBjdXJyZW50IGRldmljZVxuIgorCSJpZGUgcGFydCBbZGV2XSAtIHByaW50IHBhcnRpdGlvbiB0YWJsZSBvZiBvbmUgb3IgYWxsIElERSBkZXZpY2VzXG4iCisJImlkZSByZWFkICBhZGRyIGJsayMgY250XG4iCisJImlkZSB3cml0ZSBhZGRyIGJsayMgY250IC0gcmVhZC93cml0ZSBgY250JyIKKwkiIGJsb2NrcyBzdGFydGluZyBhdCBibG9jayBgYmxrIydcbiIKKwkiICAgIHRvL2Zyb20gbWVtb3J5IGFkZHJlc3MgYGFkZHInXG4iCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChESVNLKSA9IE1LX0NNRF9FTlRSWSgKKwkiZGlza2Jvb3QiLAkzLAkxLAlkb19kaXNrYm9vdCwKKwkiZGlza2Jvb3QtIGJvb3QgZnJvbSBJREUgZGV2aWNlXG4iLAorCSJsb2FkQWRkciBkZXY6cGFydFxuIgorKTsKKwogI2VuZGlmCS8qIENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSURFICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2ltbWFwLmMgYi9jb21tb24vY21kX2ltbWFwLmMKaW5kZXggM2ViNTg5NS4uZmJiNGE3ZCAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9pbW1hcC5jCisrKyBiL2NvbW1vbi9jbWRfaW1tYXAuYwpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9pbW1hcC5oPgogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSU1NQVApICYmIFwKICAgICAoZGVmaW5lZChDT05GSUdfOHh4KSB8fCBkZWZpbmVkKENPTkZJR184MjYwKSkKQEAgLTU5Miw0ICs1OTEsMTEyIEBACiAJdW5pbXBsZW1lbnRlZCAoY21kdHAsIGZsYWcsIGFyZ2MsIGFyZ3YpOwogCXJldHVybiAwOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitjbWRfdGJsX3QgVV9CT09UX0NNRChTSVVJTkZPKSA9IE1LX0NNRF9FTlRSWSgKKwkic2l1aW5mbyIsCTEsCTEsCWRvX3NpdWluZm8sCisJInNpdWluZm8gLSBwcmludCBTeXN0ZW0gSW50ZXJmYWNlIFVuaXQgKFNJVSkgcmVnaXN0ZXJzXG4iLAorCU5VTEwKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKE1FTUNJTkZPKSA9IE1LX0NNRF9FTlRSWSgKKwkibWVtY2luZm8iLAkxLAkxLAlkb19tZW1jaW5mbywKKwkibWVtY2luZm8tIHByaW50IE1lbW9yeSBDb250cm9sbGVyIHJlZ2lzdGVyc1xuIiwKKwlOVUxMCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChTSVRJTkZPKSA9IE1LX0NNRF9FTlRSWSgKKwkic2l0aW5mbyIsCTEsCTEsCWRvX3NpdGluZm8sCisJInNpdGluZm8gLSBwcmludCBTeXN0ZW0gSW50ZWdyYXRpb24gVGltZXJzIChTSVQpIHJlZ2lzdGVyc1xuIiwKKwlOVUxMCispOworCisjaWZkZWYgQ09ORklHXzgyNjAKK2NtZF90YmxfdCBVX0JPT1RfQ01EKElDSU5GTykgPSBNS19DTURfRU5UUlkoCisJImljaW5mbyIsCTEsCTEsCWRvX2ljaW5mbywKKwkiaWNpbmZvICAtIHByaW50IEludGVycnVwdCBDb250cm9sbGVyIHJlZ2lzdGVyc1xuIiwKKwlOVUxMCispOworI2VuZGlmCisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKENBUklORk8pID0gTUtfQ01EX0VOVFJZKAorCSJjYXJpbmZvIiwJMSwJMSwJZG9fY2FyaW5mbywKKwkiY2FyaW5mbyAtIHByaW50IENsb2NrcyBhbmQgUmVzZXQgcmVnaXN0ZXJzXG4iLAorCU5VTEwKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKElPUElORk8pID0gTUtfQ01EX0VOVFJZKAorCSJpb3BpbmZvIiwJMSwJMSwJZG9faW9waW5mbywKKwkiaW9waW5mbyAtIHByaW50IEkvTyBQb3J0IHJlZ2lzdGVyc1xuIiwKKwlOVUxMCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChJT1BTRVQpID0gCU1LX0NNRF9FTlRSWSgKKwkiaW9wc2V0IiwJNSwJMCwJZG9faW9wc2V0LAorCSJpb3BzZXQgLSBzZXQgSS9PIFBvcnQgcmVnaXN0ZXJzXG4iLAorCSJQT1JUIFBJTiBDTUQgVkFMVUVcblBPUlQ6IEEtRCwgUElOOiAwLTMxLCBDTUQ6IFtkYXR8ZGlyfG9kcnxzb3JdLCBWQUxVRTogMHwxIgorKTsKKworY21kX3RibF90IFVfQk9PVF9DTUQoRE1BSU5GTykgPSBNS19DTURfRU5UUlkoCisJImRtYWluZm8iLAkxLAkxLAlkb19kbWFpbmZvLAorCSJkbWFpbmZvIC0gcHJpbnQgU0RNQS9JRE1BIHJlZ2lzdGVyc1xuIiwKKwlOVUxMCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChGQ0NJTkZPKSA9IE1LX0NNRF9FTlRSWSgKKwkiZmNjaW5mbyIsCTEsCTEsCWRvX2ZjY2luZm8sCisJImZjY2luZm8gLSBwcmludCBGQ0MgcmVnaXN0ZXJzXG4iLAorCU5VTEwKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEJSR0lORk8pID0gTUtfQ01EX0VOVFJZKAorCSJicmdpbmZvIiwJMSwJMSwJZG9fYnJnaW5mbywKKwkiYnJnaW5mbyAtIHByaW50IEJhdWQgUmF0ZSBHZW5lcmF0b3IgKEJSRykgcmVnaXN0ZXJzXG4iLAorCU5VTEwKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEkyQ0lORk8pID0gTUtfQ01EX0VOVFJZKAorCSJpMmNpbmZvIiwJMSwJMSwJZG9faTJjaW5mbywKKwkiaTJjaW5mbyAtIHByaW50IEkyQyByZWdpc3RlcnNcbiIsCisJTlVMTAorKTsKKworY21kX3RibF90IFVfQk9PVF9DTUQoU0NDSU5GTykgPSBNS19DTURfRU5UUlkoCisJInNjY2luZm8iLAkxLAkxLAlkb19zY2NpbmZvLAorCSJzY2NpbmZvIC0gcHJpbnQgU0NDIHJlZ2lzdGVyc1xuIiwKKwlOVUxMCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChTTUNJTkZPKSA9IE1LX0NNRF9FTlRSWSgKKwkic21jaW5mbyIsCTEsCTEsCWRvX3NtY2luZm8sCisJInNtY2luZm8gLSBwcmludCBTTUMgcmVnaXN0ZXJzXG4iLAorCU5VTEwKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKFNQSUlORk8pID0gTUtfQ01EX0VOVFJZKAorCSJzcGlpbmZvIiwJMSwJMSwJZG9fc3BpaW5mbywKKwkic3BpaW5mbyAtIHByaW50IFNlcmlhbCBQZXJpcGhlcmFsIEludGVyZmFjZSAoU1BJKSByZWdpc3RlcnNcbiIsCisJTlVMTAorKTsKKworY21kX3RibF90IFVfQk9PVF9DTUQoTVVYSU5GTykgPSBNS19DTURfRU5UUlkoCisJIm11eGluZm8iLAkxLAkxLAlkb19tdXhpbmZvLAorCSJtdXhpbmZvIC0gcHJpbnQgQ1BNIE11bHRpcGxleGluZyByZWdpc3RlcnNcbiIsCisJTlVMTAorKTsKKworY21kX3RibF90IFVfQk9PVF9DTUQoU0lJTkZPKSA9IE1LX0NNRF9FTlRSWSgKKwkic2lpbmZvIiwJMSwJMSwJZG9fc2lpbmZvLAorCSJzaWluZm8gIC0gcHJpbnQgU2VyaWFsIEludGVyZmFjZSAoU0kpIHJlZ2lzdGVyc1xuIiwKKwlOVUxMCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChNQ0NJTkZPKSA9IE1LX0NNRF9FTlRSWSgKKwkibWNjaW5mbyIsCTEsCTEsCWRvX21jY2luZm8sCisJIm1jY2luZm8gLSBwcmludCBNQ0MgcmVnaXN0ZXJzXG4iLAorCU5VTEwKKyk7CisKKwogI2VuZGlmCS8qIENGR19DTURfSU1NQVAgJiYgKENPTkZJR184eHggfHwgQ09ORklHXzgyNjApICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX2pmZnMyLmMgYi9jb21tb24vY21kX2pmZnMyLmMKaW5kZXggOGRmODA2MS4uZTQ1YTJjZSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9qZmZzMi5jCisrKyBiL2NvbW1vbi9jbWRfamZmczIuYwpAQCAtMjYsMTQgKzI2LDExIEBACiAgKi8KICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KLSNpbmNsdWRlIDxjbWRfYXV0b3NjcmlwdC5oPgogI2luY2x1ZGUgPHNfcmVjb3JkLmg+CisjaW5jbHVkZSA8amZmczIvbG9hZF9rZXJuZWwuaD4KICNpbmNsdWRlIDxuZXQuaD4KIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0pGRlMyKQotCi0jaW5jbHVkZSA8amZmczIvamZmczIuaD4KIHN0YXRpYyBpbnQgcGFydF9udW09MDsKIAogI2lmbmRlZiBDRkdfSkZGU19DVVNUT01fUEFSVApAQCAtODMsNiArODAsOSBAQAogaW50CiBkb19qZmZzMl9mc2xvYWQoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CisgICAgc3RydWN0IHBhcnRfaW5mbyogamZmczJfcGFydF9pbmZvKGludCk7CisgICAgaW50IGpmZnMyXzFwYXNzX2xvYWQoY2hhciAqLCBzdHJ1Y3QgcGFydF9pbmZvICosY29uc3QgY2hhciAqKTsKKwogCWNoYXIgKmZpbGVuYW1lID0gInVJbWFnZSI7CiAJdWxvbmcgb2Zmc2V0ID0gQ0ZHX0xPQURfQUREUjsKIAlpbnQgc2l6ZTsKQEAgLTEyMCw3ICsxMjAsMTAgQEAKIGludAogZG9famZmczJfbHMoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JY2hhciAqZmlsZW5hbWUgPSAiLyI7CisgICBzdHJ1Y3QgcGFydF9pbmZvKiBqZmZzMl9wYXJ0X2luZm8oaW50KTsKKyAgIGludCBqZmZzMl8xcGFzc19scyhzdHJ1Y3QgcGFydF9pbmZvICosY2hhciAqKTsKKworICAgY2hhciAqZmlsZW5hbWUgPSAiLyI7CiAJaW50IHJldDsKIAlzdHJ1Y3QgcGFydF9pbmZvICpwYXJ0OwogCkBAIC0xNDAsNiArMTQzLDkgQEAKIGludAogZG9famZmczJfZnNpbmZvKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogeworICAgc3RydWN0IHBhcnRfaW5mbyogamZmczJfcGFydF9pbmZvKGludCk7CisgICBpbnQgamZmczJfMXBhc3NfaW5mbyhzdHJ1Y3QgcGFydF9pbmZvICopOworCiAJaW50IHJldDsKIAlzdHJ1Y3QgcGFydF9pbmZvICpwYXJ0OwogCkBAIC0xNTcsOCArMTYzLDkgQEAKIGRvX2pmZnMyX2NocGFydChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlpbnQgdG1wX3BhcnQ7CisgICBzdHJ1Y3QgcGFydF9pbmZvKiBqZmZzMl9wYXJ0X2luZm8oaW50KTsKIAotCWlmIChhcmdjID49IDIpIHsKKyAgIGlmIChhcmdjID49IDIpIHsKIAkJdG1wX3BhcnQgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxNik7CiAJfWVsc2V7CiAJCXByaW50ZigiTmVlZCBwYXJ0aXRpb24gbnVtYmVyIGluIGFyZ3VtZW50IGxpc3RcbiIpOwpAQCAtMTc2LDQgKzE4MywzNCBAQAogCXJldHVybiAwOwogCiB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEpGRlMyX0ZTTE9BRCkgPSBNS19DTURfRU5UUlkoCisJImZzbG9hZCIsCTMsCTAsCWRvX2pmZnMyX2ZzbG9hZCwKKwkiZnNsb2FkICAtIGxvYWQgYmluYXJ5IGZpbGUgZnJvbSBhIGZpbGVzeXN0ZW0gaW1hZ2VcbiIsCisJIlsgb2ZmIF0gWyBmaWxlbmFtZSBdXG4iCisJIiAgICAtIGxvYWQgYmluYXJ5IGZpbGUgZnJvbSBmbGFzaCBiYW5rXG4iCisJIiAgICAgIHdpdGggb2Zmc2V0ICdvZmYnXG4iCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChKRkZTMl9GU0lORk8pID0gTUtfQ01EX0VOVFJZKAorCSJmc2luZm8iLAkxLAkxLAlkb19qZmZzMl9mc2luZm8sCisJImZzaW5mbyAgLSBwcmludCBpbmZvcm1hdGlvbiBhYm91dCBmaWxlc3lzdGVtc1xuIiwKKwkiICAgIC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXN5c3RlbXNcbiIKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEpGRlMyX0xTKSA9IE1LX0NNRF9FTlRSWSgKKwkibHMiLAkyLAkxLAlkb19qZmZzMl9scywKKwkibHMgICAgICAtIGxpc3QgZmlsZXMgaW4gYSBkaXJlY3RvcnkgKGRlZmF1bHQgLylcbiIsCisJIlsgZGlyZWN0b3J5IF1cbiIKKwkiICAgIC0gbGlzdCBmaWxlcyBpbiBhIGRpcmVjdG9yeS5cbiIKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEpGRlMyX0NIUEFSVCkgPSBNS19DTURfRU5UUlkoCisJImNocGFydCIsCTIsCTAsCWRvX2pmZnMyX2NocGFydCwKKwkiY2hwYXJ0ICAtIGNoYW5nZSBhY3RpdmUgcGFydGl0aW9uXG4iLAorCSIgICAgLSBjaGFuZ2UgYWN0aXZlIHBhcnRpdGlvblxuIgorKTsKKwogI2VuZGlmIC8qIENGR19DTURfSkZGUzIgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfbG9hZC5jIGIvY29tbW9uL2NtZF9sb2FkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4NGU4MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9jbWRfbG9hZC5jCkBAIC0wLDAgKzEsMTA1NyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qCisgKiBTZXJpYWwgdXAtIGFuZCBkb3dubG9hZCBzdXBwb3J0CisgKi8KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8Y21kX2F1dG9zY3JpcHQuaD4KKyNpbmNsdWRlIDxzX3JlY29yZC5oPgorI2luY2x1ZGUgPG5ldC5oPgorI2luY2x1ZGUgPHN5c2NhbGwuaD4KKworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTE9BRFMpCitzdGF0aWMgdWxvbmcgbG9hZF9zZXJpYWwgKHVsb25nIG9mZnNldCk7CitzdGF0aWMgaW50IHJlYWRfcmVjb3JkIChjaGFyICpidWYsIHVsb25nIGxlbik7CisjIGlmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NBVkVTKQorc3RhdGljIGludCBzYXZlX3NlcmlhbCAodWxvbmcgb2Zmc2V0LCB1bG9uZyBzaXplKTsKK3N0YXRpYyBpbnQgd3JpdGVfcmVjb3JkIChjaGFyICpidWYpOworIyBlbmRpZiAvKiBDRkdfQ01EX1NBVkVTICovCisKK3N0YXRpYyBpbnQgZG9fZWNobyA9IDE7CisjZW5kaWYgLyogQ0ZHX0NNRF9MT0FEUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTE9BRFMpCitpbnQgZG9fbG9hZF9zZXJpYWwgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXVsb25nIG9mZnNldCA9IDA7CisJdWxvbmcgYWRkcjsKKwlpbnQgaTsKKwljaGFyICplbnZfZWNobzsKKwlpbnQgcmNvZGUgPSAwOworI2lmZGVmCUNGR19MT0FEU19CQVVEX0NIQU5HRQorCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCWludCBsb2FkX2JhdWRyYXRlLCBjdXJyZW50X2JhdWRyYXRlOworCisJbG9hZF9iYXVkcmF0ZSA9IGN1cnJlbnRfYmF1ZHJhdGUgPSBnZC0+YmF1ZHJhdGU7CisjZW5kaWYKKworCWlmICgoKGVudl9lY2hvID0gZ2V0ZW52KCJsb2Fkc19lY2hvIikpICE9IE5VTEwpICYmICgqZW52X2VjaG8gPT0gJzEnKSkgeworCQlkb19lY2hvID0gMTsKKwl9IGVsc2UgeworCQlkb19lY2hvID0gMDsKKwl9CisKKyNpZmRlZglDRkdfTE9BRFNfQkFVRF9DSEFOR0UKKwlpZiAoYXJnYyA+PSAyKSB7CisJCW9mZnNldCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKKwl9CisJaWYgKGFyZ2MgPT0gMykgeworCQlsb2FkX2JhdWRyYXRlID0gKGludClzaW1wbGVfc3RydG91bChhcmd2WzJdLCBOVUxMLCAxMCk7CisKKwkJLyogZGVmYXVsdCB0byBjdXJyZW50IGJhdWRyYXRlICovCisJCWlmIChsb2FkX2JhdWRyYXRlID09IDApCisJCQlsb2FkX2JhdWRyYXRlID0gY3VycmVudF9iYXVkcmF0ZTsKKwl9CisJaWYgKGxvYWRfYmF1ZHJhdGUgIT0gY3VycmVudF9iYXVkcmF0ZSkgeworCQlwcmludGYgKCIjIyBTd2l0Y2ggYmF1ZHJhdGUgdG8gJWQgYnBzIGFuZCBwcmVzcyBFTlRFUiAuLi5cbiIsCisJCQlsb2FkX2JhdWRyYXRlKTsKKwkJdWRlbGF5KDUwMDAwKTsKKwkJZ2QtPmJhdWRyYXRlID0gbG9hZF9iYXVkcmF0ZTsKKwkJc2VyaWFsX3NldGJyZyAoKTsKKwkJdWRlbGF5KDUwMDAwKTsKKwkJZm9yICg7OykgeworCQkJaWYgKGdldGMoKSA9PSAnXHInKQorCQkJCWJyZWFrOworCQl9CisJfQorI2Vsc2UJLyogISBDRkdfTE9BRFNfQkFVRF9DSEFOR0UgKi8KKwlpZiAoYXJnYyA9PSAyKSB7CisJCW9mZnNldCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDE2KTsKKwl9CisjZW5kaWYJLyogQ0ZHX0xPQURTX0JBVURfQ0hBTkdFICovCisKKwlwcmludGYgKCIjIyBSZWFkeSBmb3IgUy1SZWNvcmQgZG93bmxvYWQgLi4uXG4iKTsKKworCWFkZHIgPSBsb2FkX3NlcmlhbCAob2Zmc2V0KTsKKworCS8qCisJICogR2F0aGVyIGFueSB0cmFpbGluZyBjaGFyYWN0ZXJzIChmb3IgaW5zdGFuY2UsIHRoZSBeRCB3aGljaAorCSAqIGlzIHNlbnQgYnkgJ2N1JyBhZnRlciBzZW5kaW5nIGEgZmlsZSksIGFuZCBnaXZlIHRoZQorCSAqIGJveCBzb21lIHRpbWUgKDEwMCAqIDEgbXMpCisJICovCisJZm9yIChpPTA7IGk8MTAwOyArK2kpIHsKKwkJaWYgKHNlcmlhbF90c3RjKCkpIHsKKwkJCSh2b2lkKSBzZXJpYWxfZ2V0YygpOworCQl9CisJCXVkZWxheSgxMDAwKTsKKwl9CisKKwlpZiAoYWRkciA9PSB+MCkgeworCQlwcmludGYgKCIjIyBTLVJlY29yZCBkb3dubG9hZCBhYm9ydGVkXG4iKTsKKwkJcmNvZGUgPSAxOworCX0gZWxzZSB7CisJCXByaW50ZiAoIiMjIFN0YXJ0IEFkZHIgICAgICA9IDB4JTA4bFhcbiIsIGFkZHIpOworCQlsb2FkX2FkZHIgPSBhZGRyOworCX0KKworI2lmZGVmCUNGR19MT0FEU19CQVVEX0NIQU5HRQorCWlmIChsb2FkX2JhdWRyYXRlICE9IGN1cnJlbnRfYmF1ZHJhdGUpIHsKKwkJcHJpbnRmICgiIyMgU3dpdGNoIGJhdWRyYXRlIHRvICVkIGJwcyBhbmQgcHJlc3MgRVNDIC4uLlxuIiwKKwkJCWN1cnJlbnRfYmF1ZHJhdGUpOworCQl1ZGVsYXkgKDUwMDAwKTsKKwkJZ2QtPmJhdWRyYXRlID0gY3VycmVudF9iYXVkcmF0ZTsKKwkJc2VyaWFsX3NldGJyZyAoKTsKKwkJdWRlbGF5ICg1MDAwMCk7CisJCWZvciAoOzspIHsKKwkJCWlmIChnZXRjKCkgPT0gMHgxQikgLyogRVNDICovCisJCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gcmNvZGU7Cit9CisKK3N0YXRpYyB1bG9uZworbG9hZF9zZXJpYWwgKHVsb25nIG9mZnNldCkKK3sKKwljaGFyCXJlY29yZFtTUkVDX01BWFJFQ0xFTiArIDFdOwkvKiBidWZmZXIgZm9yIG9uZSBTLVJlY29yZAkqLworCWNoYXIJYmluYnVmW1NSRUNfTUFYQklOTEVOXTsJCS8qIGJ1ZmZlciBmb3IgYmluYXJ5IGRhdGEJKi8KKwlpbnQJYmlubGVuOwkJCQkvKiBuby4gb2YgZGF0YSBieXRlcyBpbiBTLVJlYy4JKi8KKwlpbnQJdHlwZTsJCQkJLyogcmV0dXJuIGNvZGUgZm9yIHJlY29yZCB0eXBlCSovCisJdWxvbmcJYWRkcjsJCQkJLyogbG9hZCBhZGRyZXNzIGZyb20gUy1SZWNvcmQJKi8KKwl1bG9uZwlzaXplOwkJCQkvKiBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQJKi8KKwljaGFyCWJ1ZlszMl07CisJdWxvbmcJc3RvcmVfYWRkcjsKKwl1bG9uZwlzdGFydF9hZGRyID0gfjA7CisJdWxvbmcJZW5kX2FkZHIgICA9ICAwOworCWludAlsaW5lX2NvdW50ID0gIDA7CisKKwl3aGlsZSAocmVhZF9yZWNvcmQocmVjb3JkLCBTUkVDX01BWFJFQ0xFTiArIDEpID49IDApIHsKKwkJdHlwZSA9IHNyZWNfZGVjb2RlIChyZWNvcmQsICZiaW5sZW4sICZhZGRyLCBiaW5idWYpOworCisJCWlmICh0eXBlIDwgMCkgeworCQkJcmV0dXJuICh+MCk7CQkvKiBJbnZhbGlkIFMtUmVjb3JkCQkqLworCQl9CisKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgU1JFQ19EQVRBMjoKKwkJY2FzZSBTUkVDX0RBVEEzOgorCQljYXNlIFNSRUNfREFUQTQ6CisJCSAgICBzdG9yZV9hZGRyID0gYWRkciArIG9mZnNldDsKKyNpZm5kZWYgQ0ZHX05PX0ZMQVNICisJCSAgICBpZiAoYWRkcjJpbmZvKHN0b3JlX2FkZHIpKSB7CisJCQlpbnQgcmM7CisKKwkJCXJjID0gZmxhc2hfd3JpdGUoKHVjaGFyICopYmluYnVmLHN0b3JlX2FkZHIsYmlubGVuKTsKKwkJCWlmIChyYyAhPSAwKSB7CisJCQkJZmxhc2hfcGVycm9yIChyYyk7CisJCQkJcmV0dXJuICh+MCk7CisJCQl9CisJCSAgICB9IGVsc2UKKyNlbmRpZgorCQkgICAgeworCQkJbWVtY3B5ICgoY2hhciAqKShzdG9yZV9hZGRyKSwgYmluYnVmLCBiaW5sZW4pOworCQkgICAgfQorCQkgICAgaWYgKChzdG9yZV9hZGRyKSA8IHN0YXJ0X2FkZHIpCisJCQlzdGFydF9hZGRyID0gc3RvcmVfYWRkcjsKKwkJICAgIGlmICgoc3RvcmVfYWRkciArIGJpbmxlbiAtIDEpID4gZW5kX2FkZHIpCisJCQllbmRfYWRkciA9IHN0b3JlX2FkZHIgKyBiaW5sZW4gLSAxOworCQkgICAgYnJlYWs7CisJCWNhc2UgU1JFQ19FTkQyOgorCQljYXNlIFNSRUNfRU5EMzoKKwkJY2FzZSBTUkVDX0VORDQ6CisJCSAgICB1ZGVsYXkgKDEwMDAwKTsKKwkJICAgIHNpemUgPSBlbmRfYWRkciAtIHN0YXJ0X2FkZHIgKyAxOworCQkgICAgcHJpbnRmICgiXG4iCisJCQkgICAgIiMjIEZpcnN0IExvYWQgQWRkciA9IDB4JTA4bFhcbiIKKwkJCSAgICAiIyMgTGFzdCAgTG9hZCBBZGRyID0gMHglMDhsWFxuIgorCQkJICAgICIjIyBUb3RhbCBTaXplICAgICAgPSAweCUwOGxYID0gJWxkIEJ5dGVzXG4iLAorCQkJICAgIHN0YXJ0X2FkZHIsIGVuZF9hZGRyLCBzaXplLCBzaXplCisJCSAgICApOworCQkgICAgZmx1c2hfY2FjaGUgKGFkZHIsIHNpemUpOworCQkgICAgc3ByaW50ZihidWYsICIlbFgiLCBzaXplKTsKKwkJICAgIHNldGVudigiZmlsZXNpemUiLCBidWYpOworCQkgICAgcmV0dXJuIChhZGRyKTsKKwkJY2FzZSBTUkVDX1NUQVJUOgorCQkgICAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgICBicmVhazsKKwkJfQorCQlpZiAoIWRvX2VjaG8pIHsJLyogcHJpbnQgYSAnLicgZXZlcnkgMTAwIGxpbmVzICovCisJCQlpZiAoKCsrbGluZV9jb3VudCAlIDEwMCkgPT0gMCkKKwkJCQlwdXRjICgnLicpOworCQl9CisJfQorCisJcmV0dXJuICh+MCk7CQkJLyogRG93bmxvYWQgYWJvcnRlZAkJKi8KK30KKworc3RhdGljIGludAorcmVhZF9yZWNvcmQgKGNoYXIgKmJ1ZiwgdWxvbmcgbGVuKQoreworCWNoYXIgKnA7CisJY2hhciBjOworCisJLS1sZW47CS8qIGFsd2F5cyBsZWF2ZSByb29tIGZvciB0ZXJtaW5hdGluZyAnXDAnIGJ5dGUgKi8KKworCWZvciAocD1idWY7IHAgPCBidWYrbGVuOyArK3ApIHsKKwkJYyA9IHNlcmlhbF9nZXRjKCk7CQkvKiByZWFkIGNoYXJhY3RlcgkJKi8KKwkJaWYgKGRvX2VjaG8pCisJCQlzZXJpYWxfcHV0YyAoYyk7CS8qIC4uLiBhbmQgZWNobyBpdAkJKi8KKworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnXHInOgorCQljYXNlICdcbic6CisJCQkqcCA9ICdcMCc7CisJCQlyZXR1cm4gKHAgLSBidWYpOworCQljYXNlICdcMCc6CisJCWNhc2UgMHgwMzoJCQkvKiBeQyAtIENvbnRyb2wgQwkJKi8KKwkJCXJldHVybiAoLTEpOworCQlkZWZhdWx0OgorCQkJKnAgPSBjOworCQl9CisKKwkgICAgLyogQ2hlY2sgZm9yIHRoZSBjb25zb2xlIGhhbmd1cCAoaWYgYW55IGRpZmZlcmVudCBmcm9tIHNlcmlhbCkgKi8KKyNpZmRlZiBDT05GSUdfUFBDCS8qIHdlIGRvbid0IGhhdmUgc3lzY2FsbF90YmwgYW55d2hlcmUgZWxzZSAqLworCSAgICBpZiAoc3lzY2FsbF90YmxbU1lTQ0FMTF9HRVRDXSAhPSBzZXJpYWxfZ2V0YykgeworCQlpZiAoY3RybGMoKSkgeworCQkgICAgcmV0dXJuICgtMSk7CisJCX0KKwkgICAgfQorI2VuZGlmCisJfQorCisJLyogbGluZSB0b28gbG9uZyAtIHRydW5jYXRlICovCisJKnAgPSAnXDAnOworCXJldHVybiAocCAtIGJ1Zik7Cit9CisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TQVZFUykKKworaW50IGRvX3NhdmVfc2VyaWFsIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bG9uZyBvZmZzZXQgPSAwOworCXVsb25nIHNpemUgICA9IDA7CisjaWZkZWYJQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisJaW50IHNhdmVfYmF1ZHJhdGUsIGN1cnJlbnRfYmF1ZHJhdGU7CisKKwlzYXZlX2JhdWRyYXRlID0gY3VycmVudF9iYXVkcmF0ZSA9IGdkLT5iYXVkcmF0ZTsKKyNlbmRpZgorCisJaWYgKGFyZ2MgPj0gMikgeworCQlvZmZzZXQgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxNik7CisJfQorI2lmZGVmCUNGR19MT0FEU19CQVVEX0NIQU5HRQorCWlmIChhcmdjID49IDMpIHsKKwkJc2l6ZSA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDE2KTsKKwl9CisJaWYgKGFyZ2MgPT0gNCkgeworCQlzYXZlX2JhdWRyYXRlID0gKGludClzaW1wbGVfc3RydG91bChhcmd2WzNdLCBOVUxMLCAxMCk7CisKKwkJLyogZGVmYXVsdCB0byBjdXJyZW50IGJhdWRyYXRlICovCisJCWlmIChzYXZlX2JhdWRyYXRlID09IDApCisJCQlzYXZlX2JhdWRyYXRlID0gY3VycmVudF9iYXVkcmF0ZTsKKwl9CisJaWYgKHNhdmVfYmF1ZHJhdGUgIT0gY3VycmVudF9iYXVkcmF0ZSkgeworCQlwcmludGYgKCIjIyBTd2l0Y2ggYmF1ZHJhdGUgdG8gJWQgYnBzIGFuZCBwcmVzcyBFTlRFUiAuLi5cbiIsCisJCQlzYXZlX2JhdWRyYXRlKTsKKwkJdWRlbGF5KDUwMDAwKTsKKwkJZ2QtPmJhdWRyYXRlID0gc2F2ZV9iYXVkcmF0ZTsKKwkJc2VyaWFsX3NldGJyZyAoKTsKKwkJdWRlbGF5KDUwMDAwKTsKKwkJZm9yICg7OykgeworCQkJaWYgKGdldGMoKSA9PSAnXHInKQorCQkJCWJyZWFrOworCQl9CisJfQorI2Vsc2UJLyogISBDRkdfTE9BRFNfQkFVRF9DSEFOR0UgKi8KKwlpZiAoYXJnYyA9PSAzKSB7CisJCXNpemUgPSBzaW1wbGVfc3RydG91bChhcmd2WzJdLCBOVUxMLCAxNik7CisJfQorI2VuZGlmCS8qIENGR19MT0FEU19CQVVEX0NIQU5HRSAqLworCisJcHJpbnRmICgiIyMgUmVhZHkgZm9yIFMtUmVjb3JkIHVwbG9hZCwgcHJlc3MgRU5URVIgdG8gcHJvY2VlZCAuLi5cbiIpOworCWZvciAoOzspIHsKKwkJaWYgKGdldGMoKSA9PSAnXHInKQorCQkJYnJlYWs7CisJfQorCWlmKHNhdmVfc2VyaWFsIChvZmZzZXQsIHNpemUpKSB7CisJCXByaW50ZiAoIiMjIFMtUmVjb3JkIHVwbG9hZCBhYm9ydGVkXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGYgKCIjIyBTLVJlY29yZCB1cGxvYWQgY29tcGxldGVcbiIpOworCX0KKyNpZmRlZglDRkdfTE9BRFNfQkFVRF9DSEFOR0UKKwlpZiAoc2F2ZV9iYXVkcmF0ZSAhPSBjdXJyZW50X2JhdWRyYXRlKSB7CisJCXByaW50ZiAoIiMjIFN3aXRjaCBiYXVkcmF0ZSB0byAlZCBicHMgYW5kIHByZXNzIEVTQyAuLi5cbiIsCisJCQkoaW50KWN1cnJlbnRfYmF1ZHJhdGUpOworCQl1ZGVsYXkgKDUwMDAwKTsKKwkJZ2QtPmJhdWRyYXRlID0gY3VycmVudF9iYXVkcmF0ZTsKKwkJc2VyaWFsX3NldGJyZyAoKTsKKwkJdWRlbGF5ICg1MDAwMCk7CisJCWZvciAoOzspIHsKKwkJCWlmIChnZXRjKCkgPT0gMHgxQikgLyogRVNDICovCisJCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBTUkVDM19TVEFSVAkJCQkiUzAwMzAwMDBGQ1xuIgorI2RlZmluZSBTUkVDM19GT1JNQVQJCQkiUzMlMDJYJTA4bFglcyUwMlhcbiIKKyNkZWZpbmUgU1JFQzNfRU5ECQkJCSJTNzA1MDAwMDAwMDBGQVxuIgorI2RlZmluZSBTUkVDX0JZVEVTX1BFUl9SRUNPUkQJMTYKKworc3RhdGljIGludCBzYXZlX3NlcmlhbCAodWxvbmcgYWRkcmVzcywgdWxvbmcgY291bnQpCit7CisJaW50IGksIGMsIHJlY2xlbiwgY2hlY2tzdW0sIGxlbmd0aDsKKwljaGFyICpoZXggPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisJY2hhcglyZWNvcmRbMipTUkVDX0JZVEVTX1BFUl9SRUNPUkQrMTZdOwkvKiBidWZmZXIgZm9yIG9uZSBTLVJlY29yZAkqLworCWNoYXIJZGF0YVsyKlNSRUNfQllURVNfUEVSX1JFQ09SRCsxXTsJLyogYnVmZmVyIGZvciBoZXggZGF0YQkqLworCisJcmVjbGVuID0gMDsKKwljaGVja3N1bSAgPSAwOworCisJaWYod3JpdGVfcmVjb3JkKFNSRUMzX1NUQVJUKSkJCQkvKiB3cml0ZSB0aGUgaGVhZGVyICovCisJCXJldHVybiAoLTEpOworCWRvIHsKKwkJaWYoY291bnQpIHsJCQkJCQkvKiBjb2xsZWN0IGhleCBkYXRhIGluIHRoZSBidWZmZXIgICovCisJCQljID0gKih2b2xhdGlsZSB1Y2hhciopKGFkZHJlc3MgKyByZWNsZW4pOwkvKiBnZXQgb25lIGJ5dGUgICAgKi8KKwkJCWNoZWNrc3VtICs9IGM7CQkJCQkJCS8qIGFjY3VtdWxhdGUgY2hlY2tzdW0gKi8KKwkJCWRhdGFbMipyZWNsZW5dICAgPSBoZXhbKGM+PjQpJjB4MGZdOworCQkJZGF0YVsyKnJlY2xlbisxXSA9IGhleFtjICYgMHgwZl07CisJCQlkYXRhWzIqcmVjbGVuKzJdID0gJ1wwJzsKKwkJCSsrcmVjbGVuOworCQkJLS1jb3VudDsKKwkJfQorCQlpZihyZWNsZW4gPT0gU1JFQ19CWVRFU19QRVJfUkVDT1JEIHx8IGNvdW50ID09IDApIHsKKwkJCS8qIGVub3VnaCBkYXRhIGNvbGxlY3RlZCBmb3Igb25lIHJlY29yZDogZHVtcCBpdCAqLworCQkJaWYocmVjbGVuKSB7CS8qIGJ1aWxkICYgd3JpdGUgYSBkYXRhIHJlY29yZDogKi8KKwkJCQkvKiBhZGRyZXNzICsgZGF0YSArIGNoZWNrc3VtICovCisJCQkJbGVuZ3RoID0gNCArIHJlY2xlbiArIDE7CisKKwkJCQkvKiBhY2N1bXVsYXRlIGxlbmd0aCBieXRlcyBpbnRvIGNoZWNrc3VtICovCisJCQkJZm9yKGkgPSAwOyBpIDwgMjsgaSsrKQorCQkJCQljaGVja3N1bSArPSAobGVuZ3RoID4+ICg4KmkpKSAmIDB4ZmY7CisKKwkJCQkvKiBhY2N1bXVsYXRlIGFkZHJlc3MgYnl0ZXMgaW50byBjaGVja3N1bTogKi8KKwkJCQlmb3IoaSA9IDA7IGkgPCA0OyBpKyspCisJCQkJCWNoZWNrc3VtICs9IChhZGRyZXNzID4+ICg4KmkpKSAmIDB4ZmY7CisKKwkJCQkvKiBtYWtlIHByb3BlciBjaGVja3N1bSBieXRlOiAqLworCQkJCWNoZWNrc3VtID0gfmNoZWNrc3VtICYgMHhmZjsKKworCQkJCS8qIG91dHB1dCBvbmUgcmVjb3JkOiAqLworCQkJCXNwcmludGYocmVjb3JkLCBTUkVDM19GT1JNQVQsIGxlbmd0aCwgYWRkcmVzcywgZGF0YSwgY2hlY2tzdW0pOworCQkJCWlmKHdyaXRlX3JlY29yZChyZWNvcmQpKQorCQkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWFkZHJlc3MgICs9IHJlY2xlbjsgIC8qIGluY3JlbWVudCBhZGRyZXNzICovCisJCQljaGVja3N1bSAgPSAwOworCQkJcmVjbGVuICAgID0gMDsKKwkJfQorCX0KKwl3aGlsZShjb3VudCk7CisJaWYod3JpdGVfcmVjb3JkKFNSRUMzX0VORCkpCS8qIHdyaXRlIHRoZSBmaW5hbCByZWNvcmQgKi8KKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuKDApOworfQorCitzdGF0aWMgaW50Cit3cml0ZV9yZWNvcmQgKGNoYXIgKmJ1ZikKK3sKKwljaGFyIGM7CisKKwl3aGlsZSgoYyA9ICpidWYrKykpCisJCXNlcmlhbF9wdXRjKGMpOworCisJLyogQ2hlY2sgZm9yIHRoZSBjb25zb2xlIGhhbmd1cCAoaWYgYW55IGRpZmZlcmVudCBmcm9tIHNlcmlhbCkgKi8KKworCWlmIChjdHJsYygpKSB7CisJICAgIHJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKDApOworfQorIyBlbmRpZiAvKiBDRkdfQ01EX1NBVkVTICovCisKKyNlbmRpZgkvKiBDRkdfQ01EX0xPQURTICovCisKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0xPQURCKSAgLyogbG9hZGIgY29tbWFuZCAobG9hZCBiaW5hcnkpIGluY2x1ZGVkICovCisKKyNkZWZpbmUgWE9OX0NIQVIgICAgICAgIDE3CisjZGVmaW5lIFhPRkZfQ0hBUiAgICAgICAxOQorI2RlZmluZSBTVEFSVF9DSEFSICAgICAgMHgwMQorI2RlZmluZSBFVFhfQ0hBUgkweDAzCisjZGVmaW5lIEVORF9DSEFSICAgICAgICAweDBECisjZGVmaW5lIFNQQUNFICAgICAgICAgICAweDIwCisjZGVmaW5lIEtfRVNDQVBFICAgICAgICAweDIzCisjZGVmaW5lIFNFTkRfVFlQRSAgICAgICAnUycKKyNkZWZpbmUgREFUQV9UWVBFICAgICAgICdEJworI2RlZmluZSBBQ0tfVFlQRSAgICAgICAgJ1knCisjZGVmaW5lIE5BQ0tfVFlQRSAgICAgICAnTicKKyNkZWZpbmUgQlJFQUtfVFlQRSAgICAgICdCJworI2RlZmluZSB0b2NoYXIoeCkgKChjaGFyKSAoKCh4KSArIFNQQUNFKSAmIDB4ZmYpKQorI2RlZmluZSB1bnRvY2hhcih4KSAoKGludCkgKCgoeCkgLSBTUEFDRSkgJiAweGZmKSkKKworZXh0ZXJuIGludCBvc19kYXRhX2NvdW50OworZXh0ZXJuIGludCBvc19kYXRhX2hlYWRlcls4XTsKKworc3RhdGljIHZvaWQgc2V0X2tlcm1fYmluX21vZGUodW5zaWduZWQgbG9uZyAqKTsKK3N0YXRpYyBpbnQga19yZWN2KHZvaWQpOworc3RhdGljIHVsb25nIGxvYWRfc2VyaWFsX2JpbiAodWxvbmcgb2Zmc2V0KTsKKworCitjaGFyIGhpc19lb2w7ICAgICAgICAvKiBjaGFyYWN0ZXIgaGUgbmVlZHMgYXQgZW5kIG9mIHBhY2tldCAqLworaW50ICBoaXNfcGFkX2NvdW50OyAgLyogbnVtYmVyIG9mIHBhZCBjaGFycyBoZSBuZWVkcyAqLworY2hhciBoaXNfcGFkX2NoYXI7ICAgLyogcGFkIGNoYXJzIGhlIG5lZWRzICovCitjaGFyIGhpc19xdW90ZTsgICAgICAvKiBxdW90ZSBjaGFycyBoZSdsbCB1c2UgKi8KKworaW50IGRvX2xvYWRfc2VyaWFsX2JpbiAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwl1bG9uZyBvZmZzZXQgPSAwOworCXVsb25nIGFkZHI7CisJaW50IGxvYWRfYmF1ZHJhdGUsIGN1cnJlbnRfYmF1ZHJhdGU7CisJaW50IHJjb2RlID0gMDsKKwljaGFyICpzOworCisJLyogcHJlLXNldCBvZmZzZXQgZnJvbSBDRkdfTE9BRF9BRERSICovCisJb2Zmc2V0ID0gQ0ZHX0xPQURfQUREUjsKKworCS8qIHByZS1zZXQgb2Zmc2V0IGZyb20gJGxvYWRhZGRyICovCisJaWYgKChzID0gZ2V0ZW52KCJsb2FkYWRkciIpKSAhPSBOVUxMKSB7CisJCW9mZnNldCA9IHNpbXBsZV9zdHJ0b3VsKHMsIE5VTEwsIDE2KTsKKwl9CisKKwlsb2FkX2JhdWRyYXRlID0gY3VycmVudF9iYXVkcmF0ZSA9IGdkLT5iYXVkcmF0ZTsKKworCWlmIChhcmdjID49IDIpIHsKKwkJb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwoYXJndlsxXSwgTlVMTCwgMTYpOworCX0KKwlpZiAoYXJnYyA9PSAzKSB7CisJCWxvYWRfYmF1ZHJhdGUgPSAoaW50KXNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDEwKTsKKworCQkvKiBkZWZhdWx0IHRvIGN1cnJlbnQgYmF1ZHJhdGUgKi8KKwkJaWYgKGxvYWRfYmF1ZHJhdGUgPT0gMCkKKwkJCWxvYWRfYmF1ZHJhdGUgPSBjdXJyZW50X2JhdWRyYXRlOworCX0KKworCWlmIChsb2FkX2JhdWRyYXRlICE9IGN1cnJlbnRfYmF1ZHJhdGUpIHsKKwkJcHJpbnRmICgiIyMgU3dpdGNoIGJhdWRyYXRlIHRvICVkIGJwcyBhbmQgcHJlc3MgRU5URVIgLi4uXG4iLAorCQkJbG9hZF9iYXVkcmF0ZSk7CisJCXVkZWxheSg1MDAwMCk7CisJCWdkLT5iYXVkcmF0ZSA9IGxvYWRfYmF1ZHJhdGU7CisJCXNlcmlhbF9zZXRicmcgKCk7CisJCXVkZWxheSg1MDAwMCk7CisJCWZvciAoOzspIHsKKwkJCWlmIChnZXRjKCkgPT0gJ1xyJykKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXByaW50ZiAoIiMjIFJlYWR5IGZvciBiaW5hcnkgKGtlcm1pdCkgZG93bmxvYWQgIgorCQkidG8gMHglMDhsWCBhdCAlZCBicHMuLi5cbiIsCisJCW9mZnNldCwKKwkJY3VycmVudF9iYXVkcmF0ZSk7CisJYWRkciA9IGxvYWRfc2VyaWFsX2JpbiAob2Zmc2V0KTsKKworCWlmIChhZGRyID09IH4wKSB7CisJCWxvYWRfYWRkciA9IDA7CisJCXByaW50ZiAoIiMjIEJpbmFyeSAoa2VybWl0KSBkb3dubG9hZCBhYm9ydGVkXG4iKTsKKwkJcmNvZGUgPSAxOworCX0gZWxzZSB7CisJCXByaW50ZiAoIiMjIFN0YXJ0IEFkZHIgICAgICA9IDB4JTA4bFhcbiIsIGFkZHIpOworCQlsb2FkX2FkZHIgPSBhZGRyOworCX0KKworCWlmIChsb2FkX2JhdWRyYXRlICE9IGN1cnJlbnRfYmF1ZHJhdGUpIHsKKwkJcHJpbnRmICgiIyMgU3dpdGNoIGJhdWRyYXRlIHRvICVkIGJwcyBhbmQgcHJlc3MgRVNDIC4uLlxuIiwKKwkJCWN1cnJlbnRfYmF1ZHJhdGUpOworCQl1ZGVsYXkgKDUwMDAwKTsKKwkJZ2QtPmJhdWRyYXRlID0gY3VycmVudF9iYXVkcmF0ZTsKKwkJc2VyaWFsX3NldGJyZyAoKTsKKwkJdWRlbGF5ICg1MDAwMCk7CisJCWZvciAoOzspIHsKKwkJCWlmIChnZXRjKCkgPT0gMHgxQikgLyogRVNDICovCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKyNpZmRlZiBDT05GSUdfQVVUT1NDUklQVAorCWlmIChsb2FkX2FkZHIpIHsKKwkJY2hhciAqczsKKworCQlpZiAoKChzID0gZ2V0ZW52KCJhdXRvc2NyaXB0IikpICE9IE5VTEwpICYmIChzdHJjbXAocywieWVzIikgPT0gMCkpIHsKKwkJCXByaW50ZigiUnVubmluZyBhdXRvc2NyaXB0IGF0IGFkZHIgMHglMDhsWCAuLi5cbiIsIGxvYWRfYWRkcik7CisJCQlyY29kZSA9IGF1dG9zY3JpcHQgKGxvYWRfYWRkcik7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gcmNvZGU7Cit9CisKKworc3RhdGljIHVsb25nIGxvYWRfc2VyaWFsX2JpbiAodWxvbmcgb2Zmc2V0KQoreworCWludCBzaXplLCBpOworCWNoYXIgYnVmWzMyXTsKKworCXNldF9rZXJtX2Jpbl9tb2RlICgodWxvbmcgKikgb2Zmc2V0KTsKKwlzaXplID0ga19yZWN2ICgpOworCisJLyoKKwkgKiBHYXRoZXIgYW55IHRyYWlsaW5nIGNoYXJhY3RlcnMgKGZvciBpbnN0YW5jZSwgdGhlIF5EIHdoaWNoCisJICogaXMgc2VudCBieSAnY3UnIGFmdGVyIHNlbmRpbmcgYSBmaWxlKSwgYW5kIGdpdmUgdGhlCisJICogYm94IHNvbWUgdGltZSAoMTAwICogMSBtcykKKwkgKi8KKwlmb3IgKGk9MDsgaTwxMDA7ICsraSkgeworCQlpZiAoc2VyaWFsX3RzdGMoKSkgeworCQkJKHZvaWQpIHNlcmlhbF9nZXRjKCk7CisJCX0KKwkJdWRlbGF5KDEwMDApOworCX0KKworCWZsdXNoX2NhY2hlIChvZmZzZXQsIHNpemUpOworCisJcHJpbnRmKCIjIyBUb3RhbCBTaXplICAgICAgPSAweCUwOHggPSAlZCBCeXRlc1xuIiwgc2l6ZSwgc2l6ZSk7CisJc3ByaW50ZihidWYsICIlWCIsIHNpemUpOworCXNldGVudigiZmlsZXNpemUiLCBidWYpOworCisJcmV0dXJuIG9mZnNldDsKK30KKwordm9pZCBzZW5kX3BhZCAodm9pZCkKK3sKKwlpbnQgY291bnQgPSBoaXNfcGFkX2NvdW50OworCisJd2hpbGUgKGNvdW50LS0gPiAwKQorCQlzZXJpYWxfcHV0YyAoaGlzX3BhZF9jaGFyKTsKK30KKworLyogY29udmVydHMgZXNjYXBlZCBrZXJtaXQgY2hhciB0byBiaW5hcnkgY2hhciAqLworY2hhciBrdHJhbnMgKGNoYXIgaW4pCit7CisJaWYgKChpbiAmIDB4NjApID09IDB4NDApIHsKKwkJcmV0dXJuIChjaGFyKSAoaW4gJiB+MHg0MCk7CisJfSBlbHNlIGlmICgoaW4gJiAweDdmKSA9PSAweDNmKSB7CisJCXJldHVybiAoY2hhcikgKGluIHwgMHg0MCk7CisJfSBlbHNlCisJCXJldHVybiBpbjsKK30KKworaW50IGNoazEgKGNoYXIgKmJ1ZmZlcikKK3sKKwlpbnQgdG90YWwgPSAwOworCisJd2hpbGUgKCpidWZmZXIpIHsKKwkJdG90YWwgKz0gKmJ1ZmZlcisrOworCX0KKwlyZXR1cm4gKGludCkgKCh0b3RhbCArICgodG90YWwgPj4gNikgJiAweDAzKSkgJiAweDNmKTsKK30KKwordm9pZCBzMV9zZW5kcGFja2V0IChjaGFyICpwYWNrZXQpCit7CisJc2VuZF9wYWQgKCk7CisJd2hpbGUgKCpwYWNrZXQpIHsKKwkJc2VyaWFsX3B1dGMgKCpwYWNrZXQrKyk7CisJfQorfQorCitzdGF0aWMgY2hhciBhX2JbMjRdOwordm9pZCBzZW5kX2FjayAoaW50IG4pCit7CisJYV9iWzBdID0gU1RBUlRfQ0hBUjsKKwlhX2JbMV0gPSB0b2NoYXIgKDMpOworCWFfYlsyXSA9IHRvY2hhciAobik7CisJYV9iWzNdID0gQUNLX1RZUEU7CisJYV9iWzRdID0gJ1wwJzsKKwlhX2JbNF0gPSB0b2NoYXIgKGNoazEgKCZhX2JbMV0pKTsKKwlhX2JbNV0gPSBoaXNfZW9sOworCWFfYls2XSA9ICdcMCc7CisJczFfc2VuZHBhY2tldCAoYV9iKTsKK30KKwordm9pZCBzZW5kX25hY2sgKGludCBuKQoreworCWFfYlswXSA9IFNUQVJUX0NIQVI7CisJYV9iWzFdID0gdG9jaGFyICgzKTsKKwlhX2JbMl0gPSB0b2NoYXIgKG4pOworCWFfYlszXSA9IE5BQ0tfVFlQRTsKKwlhX2JbNF0gPSAnXDAnOworCWFfYls0XSA9IHRvY2hhciAoY2hrMSAoJmFfYlsxXSkpOworCWFfYls1XSA9IGhpc19lb2w7CisJYV9iWzZdID0gJ1wwJzsKKwlzMV9zZW5kcGFja2V0IChhX2IpOworfQorCisKKy8qIG9zX2RhdGFfKiB0YWtlcyBhbiBPUyBPcGVuIGltYWdlIGFuZCBwdXRzIGl0IGludG8gbWVtb3J5LCBhbmQKKyAgIHB1dHMgdGhlIGJvb3QgaGVhZGVyIGluIGFuIGFycmF5IG5hbWVkIG9zX2RhdGFfaGVhZGVyCisKKyAgIGlmIGltYWdlIGlzIGJpbmFyeSwgbm8gaGVhZGVyIGlzIHN0b3JlZCBpbiBvc19kYXRhX2hlYWRlci4KKyovCit2b2lkICgqb3NfZGF0YV9pbml0KSAodm9pZCk7Cit2b2lkICgqb3NfZGF0YV9jaGFyKSAoY2hhciBuZXdfY2hhcik7CitzdGF0aWMgaW50IG9zX2RhdGFfc3RhdGUsIG9zX2RhdGFfc3RhdGVfc2F2ZWQ7CitpbnQgb3NfZGF0YV9jb3VudDsKK3N0YXRpYyBpbnQgb3NfZGF0YV9jb3VudF9zYXZlZDsKK3N0YXRpYyBjaGFyICpvc19kYXRhX2FkZHIsICpvc19kYXRhX2FkZHJfc2F2ZWQ7CitzdGF0aWMgY2hhciAqYmluX3N0YXJ0X2FkZHJlc3M7CitpbnQgb3NfZGF0YV9oZWFkZXJbOF07CitzdGF0aWMgdm9pZCBiaW5fZGF0YV9pbml0ICh2b2lkKQoreworCW9zX2RhdGFfc3RhdGUgPSAwOworCW9zX2RhdGFfY291bnQgPSAwOworCW9zX2RhdGFfYWRkciA9IGJpbl9zdGFydF9hZGRyZXNzOworfQorc3RhdGljIHZvaWQgb3NfZGF0YV9zYXZlICh2b2lkKQoreworCW9zX2RhdGFfc3RhdGVfc2F2ZWQgPSBvc19kYXRhX3N0YXRlOworCW9zX2RhdGFfY291bnRfc2F2ZWQgPSBvc19kYXRhX2NvdW50OworCW9zX2RhdGFfYWRkcl9zYXZlZCA9IG9zX2RhdGFfYWRkcjsKK30KK3N0YXRpYyB2b2lkIG9zX2RhdGFfcmVzdG9yZSAodm9pZCkKK3sKKwlvc19kYXRhX3N0YXRlID0gb3NfZGF0YV9zdGF0ZV9zYXZlZDsKKwlvc19kYXRhX2NvdW50ID0gb3NfZGF0YV9jb3VudF9zYXZlZDsKKwlvc19kYXRhX2FkZHIgPSBvc19kYXRhX2FkZHJfc2F2ZWQ7Cit9CitzdGF0aWMgdm9pZCBiaW5fZGF0YV9jaGFyIChjaGFyIG5ld19jaGFyKQoreworCXN3aXRjaCAob3NfZGF0YV9zdGF0ZSkgeworCWNhc2UgMDoJCQkJCS8qIGRhdGEgKi8KKwkJKm9zX2RhdGFfYWRkcisrID0gbmV3X2NoYXI7CisJCS0tb3NfZGF0YV9jb3VudDsKKwkJYnJlYWs7CisJfQorfQorc3RhdGljIHZvaWQgc2V0X2tlcm1fYmluX21vZGUgKHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJYmluX3N0YXJ0X2FkZHJlc3MgPSAoY2hhciAqKSBhZGRyOworCW9zX2RhdGFfaW5pdCA9IGJpbl9kYXRhX2luaXQ7CisJb3NfZGF0YV9jaGFyID0gYmluX2RhdGFfY2hhcjsKK30KKworCisvKiBrX2RhdGFfKiBzaW1wbHkgaGFuZGxlcyB0aGUga2VybWl0IGVzY2FwZSB0cmFuc2xhdGlvbnMgKi8KK3N0YXRpYyBpbnQga19kYXRhX2VzY2FwZSwga19kYXRhX2VzY2FwZV9zYXZlZDsKK3ZvaWQga19kYXRhX2luaXQgKHZvaWQpCit7CisJa19kYXRhX2VzY2FwZSA9IDA7CisJb3NfZGF0YV9pbml0ICgpOworfQordm9pZCBrX2RhdGFfc2F2ZSAodm9pZCkKK3sKKwlrX2RhdGFfZXNjYXBlX3NhdmVkID0ga19kYXRhX2VzY2FwZTsKKwlvc19kYXRhX3NhdmUgKCk7Cit9Cit2b2lkIGtfZGF0YV9yZXN0b3JlICh2b2lkKQoreworCWtfZGF0YV9lc2NhcGUgPSBrX2RhdGFfZXNjYXBlX3NhdmVkOworCW9zX2RhdGFfcmVzdG9yZSAoKTsKK30KK3ZvaWQga19kYXRhX2NoYXIgKGNoYXIgbmV3X2NoYXIpCit7CisJaWYgKGtfZGF0YV9lc2NhcGUpIHsKKwkJLyogbGFzdCBjaGFyIHdhcyBlc2NhcGUgLSB0cmFuc2xhdGUgdGhpcyBjaGFyYWN0ZXIgKi8KKwkJb3NfZGF0YV9jaGFyIChrdHJhbnMgKG5ld19jaGFyKSk7CisJCWtfZGF0YV9lc2NhcGUgPSAwOworCX0gZWxzZSB7CisJCWlmIChuZXdfY2hhciA9PSBoaXNfcXVvdGUpIHsKKwkJCS8qIHRoaXMgY2hhciBpcyBlc2NhcGUgLSByZW1lbWJlciAqLworCQkJa19kYXRhX2VzY2FwZSA9IDE7CisJCX0gZWxzZSB7CisJCQkvKiBvdGhlcndpc2Ugc2VuZCB0aGlzIGNoYXIgYXMtaXMgKi8KKwkJCW9zX2RhdGFfY2hhciAobmV3X2NoYXIpOworCQl9CisJfQorfQorCisjZGVmaW5lIFNFTkRfREFUQV9TSVpFICAyMAorY2hhciBzZW5kX3Bhcm1zW1NFTkRfREFUQV9TSVpFXTsKK2NoYXIgKnNlbmRfcHRyOworCisvKiBoYW5kbGVfc2VuZF9wYWNrZXQgaW50ZXJwcml0cyB0aGUgcHJvdG9jb2wgaW5mbyBhbmQgYnVpbGRzIGFuZAorICAgc2VuZHMgYW4gYXBwcm9wcmlhdGUgYWNrIGZvciB3aGF0IHdlIGNhbiBkbyAqLwordm9pZCBoYW5kbGVfc2VuZF9wYWNrZXQgKGludCBuKQoreworCWludCBsZW5ndGggPSAzOworCWludCBieXRlczsKKworCS8qIGluaXRpYWxpemUgc29tZSBwcm90b2NvbCBwYXJhbWV0ZXJzICovCisJaGlzX2VvbCA9IEVORF9DSEFSOwkJLyogZGVmYXVsdCBlbmQgb2YgbGluZSBjaGFyYWN0ZXIgKi8KKwloaXNfcGFkX2NvdW50ID0gMDsKKwloaXNfcGFkX2NoYXIgPSAnXDAnOworCWhpc19xdW90ZSA9IEtfRVNDQVBFOworCisJLyogaWdub3JlIGxhc3QgY2hhcmFjdGVyIGlmIGl0IGZpbGxlZCB0aGUgYnVmZmVyICovCisJaWYgKHNlbmRfcHRyID09ICZzZW5kX3Bhcm1zW1NFTkRfREFUQV9TSVpFIC0gMV0pCisJCS0tc2VuZF9wdHI7CisJYnl0ZXMgPSBzZW5kX3B0ciAtIHNlbmRfcGFybXM7CS8qIGhvdyBtYW55IGJ5dGVzIHdlJ2xsIHByb2Nlc3MgKi8KKwlkbyB7CisJCWlmIChieXRlcy0tIDw9IDApCisJCQlicmVhazsKKwkJLyogaGFuZGxlIE1BWEwgLSBtYXggbGVuZ3RoICovCisJCS8qIGlnbm9yZSB3aGF0IGhlIHNheXMgLSBtb3N0IEknbGwgdGFrZSAoaGVyZSkgaXMgOTQgKi8KKwkJYV9iWysrbGVuZ3RoXSA9IHRvY2hhciAoOTQpOworCQlpZiAoYnl0ZXMtLSA8PSAwKQorCQkJYnJlYWs7CisJCS8qIGhhbmRsZSBUSU1FIC0gdGltZSB5b3Ugc2hvdWxkIHdhaXQgZm9yIG15IHBhY2tldHMgKi8KKwkJLyogaWdub3JlIHdoYXQgaGUgc2F5cyAtIGRvbid0IHdhaXQgZm9yIG15IGFjayBsb25nZXIgdGhhbiAxIHNlY29uZCAqLworCQlhX2JbKytsZW5ndGhdID0gdG9jaGFyICgxKTsKKwkJaWYgKGJ5dGVzLS0gPD0gMCkKKwkJCWJyZWFrOworCQkvKiBoYW5kbGUgTlBBRCAtIG51bWJlciBvZiBwYWQgY2hhcnMgSSBuZWVkICovCisJCS8qIHJlbWVtYmVyIHdoYXQgaGUgc2F5cyAtIEkgbmVlZCBub25lICovCisJCWhpc19wYWRfY291bnQgPSB1bnRvY2hhciAoc2VuZF9wYXJtc1syXSk7CisJCWFfYlsrK2xlbmd0aF0gPSB0b2NoYXIgKDApOworCQlpZiAoYnl0ZXMtLSA8PSAwKQorCQkJYnJlYWs7CisJCS8qIGhhbmRsZSBQQURDIC0gcGFkIGNoYXJzIEkgbmVlZCAqLworCQkvKiByZW1lbWJlciB3aGF0IGhlIHNheXMgLSBJIG5lZWQgbm9uZSAqLworCQloaXNfcGFkX2NoYXIgPSBrdHJhbnMgKHNlbmRfcGFybXNbM10pOworCQlhX2JbKytsZW5ndGhdID0gMHg0MDsJLyogSGUgc2hvdWxkIGlnbm9yZSB0aGlzICovCisJCWlmIChieXRlcy0tIDw9IDApCisJCQlicmVhazsKKwkJLyogaGFuZGxlIEVPTCAtIGVuZCBvZiBsaW5lIGhlIG5lZWRzICovCisJCS8qIHJlbWVtYmVyIHdoYXQgaGUgc2F5cyAtIEkgbmVlZCBDUiAqLworCQloaXNfZW9sID0gdW50b2NoYXIgKHNlbmRfcGFybXNbNF0pOworCQlhX2JbKytsZW5ndGhdID0gdG9jaGFyIChFTkRfQ0hBUik7CisJCWlmIChieXRlcy0tIDw9IDApCisJCQlicmVhazsKKwkJLyogaGFuZGxlIFFDVEwgLSBxdW90ZSBjb250cm9sIGNoYXIgaGUnbGwgdXNlICovCisJCS8qIHJlbWVtYmVyIHdoYXQgaGUgc2F5cyAtIEknbGwgdXNlICcjJyAqLworCQloaXNfcXVvdGUgPSBzZW5kX3Bhcm1zWzVdOworCQlhX2JbKytsZW5ndGhdID0gJyMnOworCQlpZiAoYnl0ZXMtLSA8PSAwKQorCQkJYnJlYWs7CisJCS8qIGhhbmRsZSBRQklOIC0gOC10aCBiaXQgcHJlZml4aW5nICovCisJCS8qIGlnbm9yZSB3aGF0IGhlIHNheXMgLSBJIHJlZnVzZSAqLworCQlhX2JbKytsZW5ndGhdID0gJ04nOworCQlpZiAoYnl0ZXMtLSA8PSAwKQorCQkJYnJlYWs7CisJCS8qIGhhbmRsZSBDSEtUIC0gdGhlIGNsb2NrIGNoZWNrIHR5cGUgKi8KKwkJLyogaWdub3JlIHdoYXQgaGUgc2F5cyAtIEkgZG8gdHlwZSAxIChmb3Igbm93KSAqLworCQlhX2JbKytsZW5ndGhdID0gJzEnOworCQlpZiAoYnl0ZXMtLSA8PSAwKQorCQkJYnJlYWs7CisJCS8qIGhhbmRsZSBSRVBUIC0gdGhlIHJlcGVhdCBwcmVmaXggKi8KKwkJLyogaWdub3JlIHdoYXQgaGUgc2F5cyAtIEkgcmVmdXNlIChmb3Igbm93KSAqLworCQlhX2JbKytsZW5ndGhdID0gJ04nOworCQlpZiAoYnl0ZXMtLSA8PSAwKQorCQkJYnJlYWs7CisJCS8qIGhhbmRsZSBDQVBBUyAtIHRoZSBjYXBhYmlsaXRpZXMgbWFzayAqLworCQkvKiBpZ25vcmUgd2hhdCBoZSBzYXlzIC0gSSBvbmx5IGRvIGxvbmcgcGFja2V0cyAtIEkgZG9uJ3QgZG8gd2luZG93cyAqLworCQlhX2JbKytsZW5ndGhdID0gdG9jaGFyICgyKTsJLyogb25seSBsb25nIHBhY2tldHMgKi8KKwkJYV9iWysrbGVuZ3RoXSA9IHRvY2hhciAoMCk7CS8qIG5vIHdpbmRvd3MgKi8KKwkJYV9iWysrbGVuZ3RoXSA9IHRvY2hhciAoOTQpOwkvKiBsYXJnZSBwYWNrZXQgbXNiICovCisJCWFfYlsrK2xlbmd0aF0gPSB0b2NoYXIgKDk0KTsJLyogbGFyZ2UgcGFja2V0IGxzYiAqLworCX0gd2hpbGUgKDApOworCisJYV9iWzBdID0gU1RBUlRfQ0hBUjsKKwlhX2JbMV0gPSB0b2NoYXIgKGxlbmd0aCk7CisJYV9iWzJdID0gdG9jaGFyIChuKTsKKwlhX2JbM10gPSBBQ0tfVFlQRTsKKwlhX2JbKytsZW5ndGhdID0gJ1wwJzsKKwlhX2JbbGVuZ3RoXSA9IHRvY2hhciAoY2hrMSAoJmFfYlsxXSkpOworCWFfYlsrK2xlbmd0aF0gPSBoaXNfZW9sOworCWFfYlsrK2xlbmd0aF0gPSAnXDAnOworCXMxX3NlbmRwYWNrZXQgKGFfYik7Cit9CisKKy8qIGtfcmVjdiByZWNlaXZlcyBhIE9TIE9wZW4gaW1hZ2UgZmlsZSBvdmVyIGtlcm1pdCBsaW5lICovCitzdGF0aWMgaW50IGtfcmVjdiAodm9pZCkKK3sKKwljaGFyIG5ld19jaGFyOworCWNoYXIga19zdGF0ZSwga19zdGF0ZV9zYXZlZDsKKwlpbnQgc3VtOworCWludCBkb25lOworCWludCBsZW5ndGg7CisJaW50IG4sIGxhc3RfbjsKKwlpbnQgeiA9IDA7CisJaW50IGxlbl9sbywgbGVuX2hpOworCisJLyogaW5pdGlhbGl6ZSBzb21lIHByb3RvY29sIHBhcmFtZXRlcnMgKi8KKwloaXNfZW9sID0gRU5EX0NIQVI7CQkvKiBkZWZhdWx0IGVuZCBvZiBsaW5lIGNoYXJhY3RlciAqLworCWhpc19wYWRfY291bnQgPSAwOworCWhpc19wYWRfY2hhciA9ICdcMCc7CisJaGlzX3F1b3RlID0gS19FU0NBUEU7CisKKwkvKiBpbml0aWFsaXplIHRoZSBrX3JlY3YgYW5kIGtfZGF0YSBzdGF0ZSBtYWNoaW5lICovCisJZG9uZSA9IDA7CisJa19zdGF0ZSA9IDA7CisJa19kYXRhX2luaXQgKCk7CisJa19zdGF0ZV9zYXZlZCA9IGtfc3RhdGU7CisJa19kYXRhX3NhdmUgKCk7CisJbiA9IDA7CQkJCS8qIGp1c3QgdG8gZ2V0IHJpZCBvZiBhIHdhcm5pbmcgKi8KKwlsYXN0X24gPSAtMTsKKworCS8qIGV4cGVjdCB0aGlzICJ0eXBlIiBzZXF1ZW5jZSAoYnV0IGRvbid0IGNoZWNrKToKKwkgICBTOiBzZW5kIGluaXRpYXRlCisJICAgRjogZmlsZSBoZWFkZXIKKwkgICBEOiBkYXRhIChtdWx0aXBsZSkKKwkgICBaOiBlbmQgb2YgZmlsZQorCSAgIEI6IGJyZWFrIHRyYW5zbWlzc2lvbgorCSAqLworCisJLyogZW50ZXIgbWFpbiBsb29wICovCisJd2hpbGUgKCFkb25lKSB7CisJCS8qIHNldCB0aGUgc2VuZCBwYWNrZXQgcG9pbnRlciB0byBiZWdpbmluZyBvZiBzZW5kIHBhY2tldCBwYXJtcyAqLworCQlzZW5kX3B0ciA9IHNlbmRfcGFybXM7CisKKwkJLyogV2l0aCBlYWNoIHBhY2tldCwgc3RhcnQgc3VtbWluZyB0aGUgYnl0ZXMgc3RhcnRpbmcgd2l0aCB0aGUgbGVuZ3RoLgorCQkgICBTYXZlIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlci4KKwkJICAgTm90ZSB0aGUgdHlwZSBvZiB0aGUgcGFja2V0LgorCQkgICBJZiBhIGNoYXJhY3RlciBsZXNzIHRoYW4gU1BBQ0UgKDB4MjApIGlzIHJlY2VpdmVkIC0gZXJyb3IuCisJCSAqLworCisjaWYgMAorCQkvKiBPTEQgQ09ERSwgUHJpb3IgdG8gY2hlY2tpbmcgc2VxdWVuY2UgbnVtYmVycyAqLworCQkvKiBmaXJzdCBoYXZlIGFsbCBzdGF0ZSBtYWNoaW5lcyBzYXZlIGN1cnJlbnQgc3RhdGVzICovCisJCWtfc3RhdGVfc2F2ZWQgPSBrX3N0YXRlOworCQlrX2RhdGFfc2F2ZSAoKTsKKyNlbmRpZgorCisJCS8qIGdldCBhIHBhY2tldCAqLworCQkvKiB3YWl0IGZvciB0aGUgc3RhcnRpbmcgY2hhcmFjdGVyIG9yIF5DICovCisJCWZvciAoOzspIHsKKwkJCXN3aXRjaCAoc2VyaWFsX2dldGMgKCkpIHsKKwkJCWNhc2UgU1RBUlRfQ0hBUjoJLyogc3RhcnQgcGFja2V0ICovCisJCQkJZ290byBTVEFSVDsKKwkJCWNhc2UgRVRYX0NIQVI6CQkvKiBeQyB3YWl0aW5nIGZvciBwYWNrZXQgKi8KKwkJCQlyZXR1cm4gKDApOworCQkJZGVmYXVsdDoKKwkJCQk7CisJCQl9CisJCX0KK1NUQVJUOgorCQkvKiBnZXQgbGVuZ3RoIG9mIHBhY2tldCAqLworCQlzdW0gPSAwOworCQluZXdfY2hhciA9IHNlcmlhbF9nZXRjICgpOworCQlpZiAoKG5ld19jaGFyICYgMHhFMCkgPT0gMCkKKwkJCWdvdG8gcGFja2V0X2Vycm9yOworCQlzdW0gKz0gbmV3X2NoYXIgJiAweGZmOworCQlsZW5ndGggPSB1bnRvY2hhciAobmV3X2NoYXIpOworCQkvKiBnZXQgc2VxdWVuY2UgbnVtYmVyICovCisJCW5ld19jaGFyID0gc2VyaWFsX2dldGMgKCk7CisJCWlmICgobmV3X2NoYXIgJiAweEUwKSA9PSAwKQorCQkJZ290byBwYWNrZXRfZXJyb3I7CisJCXN1bSArPSBuZXdfY2hhciAmIDB4ZmY7CisJCW4gPSB1bnRvY2hhciAobmV3X2NoYXIpOworCQktLWxlbmd0aDsKKworCQkvKiBORVcgQ09ERSAtIGNoZWNrIHNlcXVlbmNlIG51bWJlcnMgZm9yIHJldHJpZWQgcGFja2V0cyAqLworCQkvKiBOb3RlIC0gdGhpcyBuZXcgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHNlcXVlbmNlIG51bWJlciBpcyBjb3JyZWN0bHkKKwkJICogcmVjZWl2ZWQuICBIYW5kbGluZyBhbiBpbnZhbGlkIHNlcXVlbmNlIG51bWJlciBhZGRzIGFub3RoZXIgbGF5ZXIKKwkJICogb2YgY29tcGxleGl0eSB0aGF0IG1heSBub3QgYmUgbmVlZGVkIC0geWV0ISAgQXQgdGhpcyB0aW1lLCBJJ20gaG9waW5nCisJCSAqIHRoYXQgSSBkb24ndCBuZWVkIHRvIGJ1ZmZlciB0aGUgaW5jb21pbmcgZGF0YSBwYWNrZXRzIGFuZCBjYW4gd3JpdGUKKwkJICogdGhlIGRhdGEgaW50byBtZW1vcnkgaW4gcmVhbCB0aW1lLgorCQkgKi8KKwkJaWYgKG4gPT0gbGFzdF9uKSB7CisJCQkvKiBzYW1lIHNlcXVlbmNlIG51bWJlciwgcmVzdG9yZSB0aGUgcHJldmlvdXMgc3RhdGUgKi8KKwkJCWtfc3RhdGUgPSBrX3N0YXRlX3NhdmVkOworCQkJa19kYXRhX3Jlc3RvcmUgKCk7CisJCX0gZWxzZSB7CisJCQkvKiBuZXcgc2VxdWVuY2UgbnVtYmVyLCBjaGVja3BvaW50IHRoZSBkb3dubG9hZCAqLworCQkJbGFzdF9uID0gbjsKKwkJCWtfc3RhdGVfc2F2ZWQgPSBrX3N0YXRlOworCQkJa19kYXRhX3NhdmUgKCk7CisJCX0KKwkJLyogRU5EIE5FVyBDT0RFICovCisKKwkJLyogZ2V0IHBhY2tldCB0eXBlICovCisJCW5ld19jaGFyID0gc2VyaWFsX2dldGMgKCk7CisJCWlmICgobmV3X2NoYXIgJiAweEUwKSA9PSAwKQorCQkJZ290byBwYWNrZXRfZXJyb3I7CisJCXN1bSArPSBuZXdfY2hhciAmIDB4ZmY7CisJCWtfc3RhdGUgPSBuZXdfY2hhcjsKKwkJLS1sZW5ndGg7CisJCS8qIGNoZWNrIGZvciBleHRlbmRlZCBsZW5ndGggKi8KKwkJaWYgKGxlbmd0aCA9PSAtMikgeworCQkJLyogKGxlbmd0aCBieXRlIHdhcyAwLCBkZWNyZW1lbnRlZCB0d2ljZSkgKi8KKwkJCS8qIGdldCB0aGUgdHdvIGxlbmd0aCBieXRlcyAqLworCQkJbmV3X2NoYXIgPSBzZXJpYWxfZ2V0YyAoKTsKKwkJCWlmICgobmV3X2NoYXIgJiAweEUwKSA9PSAwKQorCQkJCWdvdG8gcGFja2V0X2Vycm9yOworCQkJc3VtICs9IG5ld19jaGFyICYgMHhmZjsKKwkJCWxlbl9oaSA9IHVudG9jaGFyIChuZXdfY2hhcik7CisJCQluZXdfY2hhciA9IHNlcmlhbF9nZXRjICgpOworCQkJaWYgKChuZXdfY2hhciAmIDB4RTApID09IDApCisJCQkJZ290byBwYWNrZXRfZXJyb3I7CisJCQlzdW0gKz0gbmV3X2NoYXIgJiAweGZmOworCQkJbGVuX2xvID0gdW50b2NoYXIgKG5ld19jaGFyKTsKKwkJCWxlbmd0aCA9IGxlbl9oaSAqIDk1ICsgbGVuX2xvOworCQkJLyogY2hlY2sgaGVhZGVyIGNoZWNrc3VtICovCisJCQluZXdfY2hhciA9IHNlcmlhbF9nZXRjICgpOworCQkJaWYgKChuZXdfY2hhciAmIDB4RTApID09IDApCisJCQkJZ290byBwYWNrZXRfZXJyb3I7CisJCQlpZiAobmV3X2NoYXIgIT0gdG9jaGFyICgoc3VtICsgKChzdW0gPj4gNikgJiAweDAzKSkgJiAweDNmKSkKKwkJCQlnb3RvIHBhY2tldF9lcnJvcjsKKwkJCXN1bSArPSBuZXdfY2hhciAmIDB4ZmY7CisvKiAtLWxlbmd0aDsgKi8gLyogbmV3IGxlbmd0aCBpbmNsdWRlcyBvbmx5IGRhdGEgYW5kIGJsb2NrIGNoZWNrIHRvIGNvbWUgKi8KKwkJfQorCQkvKiBicmluZyBpbiByZXN0IG9mIHBhY2tldCAqLworCQl3aGlsZSAobGVuZ3RoID4gMSkgeworCQkJbmV3X2NoYXIgPSBzZXJpYWxfZ2V0YyAoKTsKKwkJCWlmICgobmV3X2NoYXIgJiAweEUwKSA9PSAwKQorCQkJCWdvdG8gcGFja2V0X2Vycm9yOworCQkJc3VtICs9IG5ld19jaGFyICYgMHhmZjsKKwkJCS0tbGVuZ3RoOworCQkJaWYgKGtfc3RhdGUgPT0gREFUQV9UWVBFKSB7CisJCQkJLyogcGFzcyBvbiB0aGUgZGF0YSBpZiB0aGlzIGlzIGEgZGF0YSBwYWNrZXQgKi8KKwkJCQlrX2RhdGFfY2hhciAobmV3X2NoYXIpOworCQkJfSBlbHNlIGlmIChrX3N0YXRlID09IFNFTkRfVFlQRSkgeworCQkJCS8qIHNhdmUgc2VuZCBwYWNrIGluIGJ1ZmZlciBhcyBpcyAqLworCQkJCSpzZW5kX3B0cisrID0gbmV3X2NoYXI7CisJCQkJLyogaWYgdG9vIG11Y2ggZGF0YSwgYmFjayBvZmYgdGhlIHBvaW50ZXIgKi8KKwkJCQlpZiAoc2VuZF9wdHIgPj0gJnNlbmRfcGFybXNbU0VORF9EQVRBX1NJWkVdKQorCQkJCQktLXNlbmRfcHRyOworCQkJfQorCQl9CisJCS8qIGdldCBhbmQgdmFsaWRhdGUgY2hlY2tzdW0gY2hhcmFjdGVyICovCisJCW5ld19jaGFyID0gc2VyaWFsX2dldGMgKCk7CisJCWlmICgobmV3X2NoYXIgJiAweEUwKSA9PSAwKQorCQkJZ290byBwYWNrZXRfZXJyb3I7CisJCWlmIChuZXdfY2hhciAhPSB0b2NoYXIgKChzdW0gKyAoKHN1bSA+PiA2KSAmIDB4MDMpKSAmIDB4M2YpKQorCQkJZ290byBwYWNrZXRfZXJyb3I7CisJCS8qIGdldCBFTkRfQ0hBUiAqLworCQluZXdfY2hhciA9IHNlcmlhbF9nZXRjICgpOworCQlpZiAobmV3X2NoYXIgIT0gRU5EX0NIQVIpIHsKKwkJICBwYWNrZXRfZXJyb3I6CisJCQkvKiByZXN0b3JlIHN0YXRlIG1hY2hpbmVzICovCisJCQlrX3N0YXRlID0ga19zdGF0ZV9zYXZlZDsKKwkJCWtfZGF0YV9yZXN0b3JlICgpOworCQkJLyogc2VuZCBhIG5lZ2F0aXZlIGFja25vd2xlZGdlIHBhY2tldCBpbiAqLworCQkJc2VuZF9uYWNrIChuKTsKKwkJfSBlbHNlIGlmIChrX3N0YXRlID09IFNFTkRfVFlQRSkgeworCQkJLyogY3JhY2sgdGhlIHByb3RvY29sIHBhcm1zLCBidWlsZCBhbiBhcHByb3ByaWF0ZSBhY2sgcGFja2V0ICovCisJCQloYW5kbGVfc2VuZF9wYWNrZXQgKG4pOworCQl9IGVsc2UgeworCQkJLyogc2VuZCBzaW1wbGUgYWNrbm93bGVkZ2UgcGFja2V0IGluICovCisJCQlzZW5kX2FjayAobik7CisJCQkvKiBxdWl0IGlmIGVuZCBvZiB0cmFuc21pc3Npb24gKi8KKwkJCWlmIChrX3N0YXRlID09IEJSRUFLX1RZUEUpCisJCQkJZG9uZSA9IDE7CisJCX0KKwkJKyt6OworCX0KKwlyZXR1cm4gKCh1bG9uZykgb3NfZGF0YV9hZGRyIC0gKHVsb25nKSBiaW5fc3RhcnRfYWRkcmVzcyk7Cit9CisjZW5kaWYJLyogQ0ZHX0NNRF9MT0FEQiAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTE9BRFMpCisKKyNpZmRlZglDRkdfTE9BRFNfQkFVRF9DSEFOR0UKK2NtZF90YmxfdCBVX0JPT1RfQ01EKExPQURTKSA9ICBNS19DTURfRU5UUlkoCisJImxvYWRzIiwgMywgMCwJZG9fbG9hZF9zZXJpYWwsCisJImxvYWRzICAgLSBsb2FkIFMtUmVjb3JkIGZpbGUgb3ZlciBzZXJpYWwgbGluZVxuIiwKKwkiWyBvZmYgXSBbIGJhdWQgXVxuIgorCSIgICAgLSBsb2FkIFMtUmVjb3JkIGZpbGUgb3ZlciBzZXJpYWwgbGluZSIKKwkiIHdpdGggb2Zmc2V0ICdvZmYnIGFuZCBiYXVkcmF0ZSAnYmF1ZCdcbiIKKyk7CisKKyNlbHNlCS8qICEgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFICovCitjbWRfdGJsX3QgVV9CT09UX0NNRChMT0FEUykgPSAgTUtfQ01EX0VOVFJZKAorCSJsb2FkcyIsIDIsIDAsCWRvX2xvYWRfc2VyaWFsLAorCSJsb2FkcyAgIC0gbG9hZCBTLVJlY29yZCBmaWxlIG92ZXIgc2VyaWFsIGxpbmVcbiIsCisJIlsgb2ZmIF1cbiIKKwkiICAgIC0gbG9hZCBTLVJlY29yZCBmaWxlIG92ZXIgc2VyaWFsIGxpbmUgd2l0aCBvZmZzZXQgJ29mZidcbiIKKyk7CisjZW5kaWYJLyogQ0ZHX0xPQURTX0JBVURfQ0hBTkdFICovCisKKy8qCisgKiBTQVZFUyBhbHdheXMgcmVxdWlyZXMgTE9BRFMgc3VwcG9ydCwgYnV0IG5vdCB2aWNlIHZlcnNhCisgKi8KKworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfU0FWRVMpCisjaWZkZWYJQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCitjbWRfdGJsX3QgVV9CT09UX0NNRChTQVZFUykgPSBNS19DTURfRU5UUlkoCisJInNhdmVzIiwgNCwgMCwJZG9fc2F2ZV9zZXJpYWwsCisJInNhdmVzICAgLSBzYXZlIFMtUmVjb3JkIGZpbGUgb3ZlciBzZXJpYWwgbGluZVxuIiwKKwkiWyBvZmYgXSBbc2l6ZV0gWyBiYXVkIF1cbiIKKwkiICAgIC0gc2F2ZSBTLVJlY29yZCBmaWxlIG92ZXIgc2VyaWFsIGxpbmUiCisJIiB3aXRoIG9mZnNldCAnb2ZmJywgc2l6ZSAnc2l6ZScgYW5kIGJhdWRyYXRlICdiYXVkJ1xuIgorKTsKKyNlbHNlCS8qICEgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFICovCitjbWRfdGJsX3QgVV9CT09UX0NNRChTQVZFUykgPSBNS19DTURfRU5UUlkoCisJInNhdmVzIiwgMywgMCwJZG9fc2F2ZV9zZXJpYWwsCisJInNhdmVzICAgLSBzYXZlIFMtUmVjb3JkIGZpbGUgb3ZlciBzZXJpYWwgbGluZVxuIiwKKwkiWyBvZmYgXSBbc2l6ZV1cbiIKKwkiICAgIC0gc2F2ZSBTLVJlY29yZCBmaWxlIG92ZXIgc2VyaWFsIGxpbmUgd2l0aCBvZmZzZXQgJ29mZicgYW5kIHNpemUgJ3NpemUnXG4iCispOworI2VuZGlmCS8qIENGR19MT0FEU19CQVVEX0NIQU5HRSAqLworI2VuZGlmCS8qIENGR19DTURfU0FWRVMgKi8KKyNlbmRpZgkvKiBDRkdfQ01EX0xPQURTICovCisKKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0xPQURCKQorY21kX3RibF90IFVfQk9PVF9DTUQoTE9BREIpID0gTUtfQ01EX0VOVFJZKAorCSJsb2FkYiIsIDMsIDAsCWRvX2xvYWRfc2VyaWFsX2JpbiwKKwkibG9hZGIgICAtIGxvYWQgYmluYXJ5IGZpbGUgb3ZlciBzZXJpYWwgbGluZSAoa2VybWl0IG1vZGUpXG4iLAorCSJbIG9mZiBdIFsgYmF1ZCBdXG4iCisJIiAgICAtIGxvYWQgYmluYXJ5IGZpbGUgb3ZlciBzZXJpYWwgbGluZSIKKwkiIHdpdGggb2Zmc2V0ICdvZmYnIGFuZCBiYXVkcmF0ZSAnYmF1ZCdcbiIKKyk7CisKKyNlbmRpZgkvKiBDRkdfQ01EX0xPQURCICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9IV0ZMT1cpCitpbnQgZG9faHdmbG93IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlleHRlcm4gaW50IGh3Zmxvd19vbm9mZihpbnQpOworCisJaWYgKGFyZ2MgPT0gMikgeworCQlpZiAoc3RyY21wKGFyZ3ZbMV0sICJvZmYiKSA9PSAwKQorCQkJaHdmbG93X29ub2ZmKC0xKTsKKwkJZWxzZQorCQkJaWYgKHN0cmNtcChhcmd2WzFdLCAib24iKSA9PSAwKQorCQkJCWh3Zmxvd19vbm9mZigxKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIlVzYWdlOiAlc1xuIiwgY21kdHAtPnVzYWdlKTsKKwl9CisJcHJpbnRmKCJSVFMvQ1RTIGhhcmR3YXJlIGZsb3cgY29udHJvbDogJXNcbiIsIGh3Zmxvd19vbm9mZigwKSA/ICJvbiIgOiAib2ZmIik7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEhXRkxPVykgPSBNS19DTURfRU5UUlkoCisJImh3ZmxvdyBbb258b2ZmXSIsIDIsIDAsCWRvX2h3ZmxvdywKKwkiaHdmbG93ICAtIHR1cm4gdGhlIGhhcndkYXJlIGZsb3cgY29udHJvbCBvbi9vZmZcbiIsCisJIlxuIC0gY2hhbmdlIFJUUy9DVFMgaGFyZHdhcmUgZmxvdyBjb250cm9sIG92ZXIgc2VyaWFsIGxpbmVcbiIKKyk7CisKKyNlbmRpZiAvKiBDRkdfQ01EX0hXRkxPVyAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9sb2cuYyBiL2NvbW1vbi9jbWRfbG9nLmMKaW5kZXggODQzMDZlZi4uYjA3ZGM3NSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9sb2cuYworKysgYi9jb21tb24vY21kX2xvZy5jCkBAIC0xOTUsNyArMTk1LDE2IEBACiAJCXJldHVybiAxOwogCX0KIH0KLQorI2lmIGRlZmluZWQoQ09ORklHX0xPR0JVRkZFUikKK2NtZF90YmxfdCBVX0JPT1RfQ01EKExPRykgPSBNS19DTURfRU5UUlkoCisJImxvZyIsICAgICAyNTUsCTEsCWRvX2xvZywKKwkibG9nICAgICAtIG1hbmlwdWxhdGUgbG9nYnVmZmVyXG4iLAorCSJsb2cgaW5mbyAgIC0gc2hvdyBwb2ludGVyIGRldGFpbHNcbiIKKwkibG9nIHJlc2V0ICAtIGNsZWFyIGNvbnRlbnRzXG4iCisJImxvZyBzaG93ICAgLSBzaG93IGNvbnRlbnRzXG4iCisJImxvZyBhcHBlbmQgPG1zZz4gLSBhcHBlbmQgPG1zZz4gdG8gdGhlIGxvZ2J1ZmZlclxuIgorKTsKKyNlbmRpZgkvKiBDT05GSUdfTE9HQlVGRkVSICovCiBzdGF0aWMgaW50IGxvZ2J1ZmZfcHJpbnRrKGNvbnN0IGNoYXIgKmxpbmUpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9jb21tb24vY21kX21lbS5jIGIvY29tbW9uL2NtZF9tZW0uYwppbmRleCBhY2E2OTI2Li45NDRhYWRhIDEwMDY0NAotLS0gYS9jb21tb24vY21kX21lbS5jCisrKyBiL2NvbW1vbi9jbWRfbWVtLmMKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfbWVtLmg+CiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTU1DKQogI2luY2x1ZGUgPG1tYy5oPgogI2VuZGlmCkBAIC0xNDgsNyArMTQ3LDcgQEAKIAkJCQl9CiAJCQkJYWRkciArPSBzaXplOwogCQkJfQotCQkJCisKIAkJfSBlbHNlIHsJLyogYWRkciBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIERhdGFGbGFzaCAqLwogI2VuZGlmCiAJCWZvciAoaT0wOyBpPGxpbmVieXRlczsgaSs9IHNpemUpIHsKQEAgLTQxNiw3ICs0MTUsNyBAQAogCQlwdXRzICgiZG9uZVxuIik7CiAJCXJldHVybiAwOwogCX0KLQkKKwogCS8qIENoZWNrIGlmIHdlIGFyZSBjb3B5aW5nIGZyb20gRGF0YUZsYXNoIHRvIFJBTSAqLwogCWlmIChhZGRyX2RhdGFmbGFzaChhZGRyKSAmJiAhYWRkcl9kYXRhZmxhc2goZGVzdCkgJiYgKGFkZHIyaW5mbyhkZXN0KT09TlVMTCkgKXsKIAkJcmVhZF9kYXRhZmxhc2goYWRkciwgY291bnQgKiBzaXplLCAoY2hhciAqKSBkZXN0KTsKQEAgLTk2MCw0ICs5NTksNzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX01FTU9SWSkKK2NtZF90YmxfdCBVX0JPT1RfQ01EKE1EKSA9IE1LX0NNRF9FTlRSWSgKKwkibWQiLCAgICAgMywgICAgIDEsICAgICAgZG9fbWVtX21kLAorCSJtZCAgICAgIC0gbWVtb3J5IGRpc3BsYXlcbiIsCisJIlsuYiwgLncsIC5sXSBhZGRyZXNzIFsjIG9mIG9iamVjdHNdXG4gICAgLSBtZW1vcnkgZGlzcGxheVxuIgorKTsKKworCitjbWRfdGJsX3QgVV9CT09UX0NNRChNTSkgPSBNS19DTURfRU5UUlkoCisJIm1tIiwgICAgIDIsICAgICAgMSwgICAgICAgZG9fbWVtX21tLAorCSJtbSAgICAgIC0gbWVtb3J5IG1vZGlmeSAoYXV0by1pbmNyZW1lbnRpbmcpXG4iLAorCSJbLmIsIC53LCAubF0gYWRkcmVzc1xuIiAiICAgIC0gbWVtb3J5IG1vZGlmeSwgYXV0byBpbmNyZW1lbnQgYWRkcmVzc1xuIgorKTsKKworCitjbWRfdGJsX3QgVV9CT09UX0NNRChOTSkgPSBNS19DTURfRU5UUlkoCisJIm5tIiwgICAgIDIsCSAgICAxLCAgICAgCWRvX21lbV9ubSwKKwkibm0gICAgICAtIG1lbW9yeSBtb2RpZnkgKGNvbnN0YW50IGFkZHJlc3MpXG4iLAorCSJbLmIsIC53LCAubF0gYWRkcmVzc1xuICAgIC0gbWVtb3J5IG1vZGlmeSwgcmVhZCBhbmQga2VlcCBhZGRyZXNzXG4iCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChNVykgPSBNS19DTURfRU5UUlkoCisJIm13IiwgICAgNCwgICAgMSwgICAgIGRvX21lbV9tdywKKwkibXcgICAgICAtIG1lbW9yeSB3cml0ZSAoZmlsbClcbiIsCisJIlsuYiwgLncsIC5sXSBhZGRyZXNzIHZhbHVlIFtjb3VudF1cbiAgICAtIHdyaXRlIG1lbW9yeVxuIgorKTsKKworY21kX3RibF90IFVfQk9PVF9DTUQoQ1ApID0gTUtfQ01EX0VOVFJZKAorCSJjcCIsICAgIDQsICAgIDEsICAgIGRvX21lbV9jcCwKKwkiY3AgICAgICAtIG1lbW9yeSBjb3B5XG4iLAorCSJbLmIsIC53LCAubF0gc291cmNlIHRhcmdldCBjb3VudFxuICAgIC0gY29weSBtZW1vcnlcbiIKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKENNUCkgPSBNS19DTURfRU5UUlkoCisJImNtcCIsICAgIDQsICAgICAxLCAgICAgZG9fbWVtX2NtcCwKKwkiY21wICAgICAtIG1lbW9yeSBjb21wYXJlXG4iLAorCSJbLmIsIC53LCAubF0gYWRkcjEgYWRkcjIgY291bnRcbiAgICAtIGNvbXBhcmUgbWVtb3J5XG4iCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChDUkMzMikgPSBNS19DTURfRU5UUlkoCisJImNyYzMyIiwgICAgNCwgICAgMSwgICAgIGRvX21lbV9jcmMsCisJImNyYzMyICAgLSBjaGVja3N1bSBjYWxjdWxhdGlvblxuIiwKKwkiYWRkcmVzcyBjb3VudCBbYWRkcl1cbiAgICAtIGNvbXB1dGUgQ1JDMzIgY2hlY2tzdW0gW3NhdmUgYXQgYWRkcl1cbiIKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEJBU0UpID0gTUtfQ01EX0VOVFJZKAorCSJiYXNlIiwgICAgMiwgICAgMSwgICAgIGRvX21lbV9iYXNlLAorCSJiYXNlICAgIC0gcHJpbnQgb3Igc2V0IGFkZHJlc3Mgb2Zmc2V0XG4iLAorCSJcbiAgICAtIHByaW50IGFkZHJlc3Mgb2Zmc2V0IGZvciBtZW1vcnkgY29tbWFuZHNcbiIKKwkiYmFzZSBvZmZcbiAgICAtIHNldCBhZGRyZXNzIG9mZnNldCBmb3IgbWVtb3J5IGNvbW1hbmRzIHRvICdvZmYnXG4iCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChMT09QKSA9IE1LX0NNRF9FTlRSWSgKKwkibG9vcCIsICAgIDMsICAgIDEsICAgIGRvX21lbV9sb29wLAorCSJsb29wICAgIC0gaW5maW5pdGUgbG9vcCBvbiBhZGRyZXNzIHJhbmdlXG4iLAorCSJbLmIsIC53LCAubF0gYWRkcmVzcyBudW1iZXJfb2Zfb2JqZWN0c1xuIgorCSIgICAgLSBsb29wIG9uIGEgc2V0IG9mIGFkZHJlc3Nlc1xuIgorKTsKKworY21kX3RibF90IFVfQk9PVF9DTUQoTVRFU1QpID0gTUtfQ01EX0VOVFJZKAorCSJtdGVzdCIsICAgIDQsICAgIDEsICAgICBkb19tZW1fbXRlc3QsCisJIm10ZXN0ICAgLSBzaW1wbGUgUkFNIHRlc3RcbiIsCisJIltzdGFydCBbZW5kIFtwYXR0ZXJuXV1dXG4iCisJIiAgICAtIHNpbXBsZSBSQU0gcmVhZC93cml0ZSB0ZXN0XG4iCispOworCisjZW5kaWYKICNlbmRpZgkvKiBDRkdfQ01EX01FTU9SWSAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9taWkuYyBiL2NvbW1vbi9jbWRfbWlpLmMKaW5kZXggYmI5N2MwZC4uZDc0YTA2ZiAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9taWkuYworKysgYi9jb21tb24vY21kX21paS5jCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX21paS5oPgogI2luY2x1ZGUgPG1paXBoeS5oPgogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUlJKQpAQCAtMTI4LDQgKzEyNywxNSBAQAogCXJldHVybiByY29kZTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworY21kX3RibF90IFVfQk9PVF9DTUQoTUlJKSA9IE1LX0NNRF9FTlRSWSgKKwkibWlpIiwJNSwJMSwJZG9fbWlpLAorCSJtaWkgICAgIC0gTUlJIHV0aWxpdHkgY29tbWFuZHNcbiIsCisJImluZm8gIDxhZGRyPiAgICAgICAgICAgICAgLSBkaXNwbGF5IE1JSSBQSFkgaW5mb1xuIgorCSJtaWkgcmVhZCAgPGFkZHI+IDxyZWc+ICAgICAgICAtIHJlYWQgIE1JSSBQSFkgPGFkZHI+IHJlZ2lzdGVyIDxyZWc+XG4iCisJIm1paSB3cml0ZSA8YWRkcj4gPHJlZz4gPGRhdGE+IC0gd3JpdGUgTUlJIFBIWSA8YWRkcj4gcmVnaXN0ZXIgPHJlZz5cbiIKKyk7CisKKwogI2VuZGlmIC8qIENGR19DTURfTUlJICovCmRpZmYgLS1naXQgYS9jb21tb24vY21kX21pc2MuYyBiL2NvbW1vbi9jbWRfbWlzYy5jCmluZGV4IGUzZTBlNDQuLjc2ZmUyNjcgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfbWlzYy5jCisrKyBiL2NvbW1vbi9jbWRfbWlzYy5jCkBAIC01Miw1ICs1MiwyMiBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKy8qIEltcGxlbWVudGVkIGluICQoQ1BVKS9pbnRlcnJ1cHRzLmMgKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JUlEpCitpbnQgZG9faXJxaW5mbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChJUlFJTkZPKSA9IE1LX0NNRF9FTlRSWSgKKwkiaXJxaW5mbyIsICAgIDEsICAgIDEsICAgICBkb19pcnFpbmZvLAorCSJpcnFpbmZvIC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgSVJRc1xuIiwKKwlOVUxMCispOworI2VuZGlmICAvKiBDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lSUSAqLworCitjbWRfdGJsX3QgVV9CT09UX0NNRChNSVNDKSA9IE1LX0NNRF9FTlRSWSgKKwkic2xlZXAiICwgICAgMiwgICAgMiwgICAgIGRvX3NsZWVwLAorCSJzbGVlcCAgIC0gZGVsYXkgZXhlY3V0aW9uIGZvciBzb21lIHRpbWVcbiIsCisJIk5cbiIKKwkiICAgIC0gZGVsYXkgZXhlY3V0aW9uIGZvciBOIHNlY29uZHMgKE4gaXMgX2RlY2ltYWxfICEhISlcbiIKKyk7CiAKICNlbmRpZgkvKiBDRkdfQ01EX01JU0MgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfbmFuZC5jIGIvY29tbW9uL2NtZF9uYW5kLmMKaW5kZXggNGIyN2M3Ny4uNDFmODRmZCAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9uYW5kLmMKKysrIGIvY29tbW9uL2NtZF9uYW5kLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAlwcmludGYgKCJVc2FnZTpcbiVzXG4iLCBjbWR0cC0+dXNhZ2UpOwogCXJldHVybiAxOwogICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKHN0cmNtcChhcmd2WzFdLCJpbmZvIikgPT0gMCkgeworCWlmIChzdHJjbXAoYXJndlsxXSwiaW5mbyIpID09IDApIHsKIAkJaW50IGk7CiAKIAkJcHV0YyAoJ1xuJyk7CkBAIC0zNzYsNyArMzc2LDcgQEAKIAogCXJldHVybiAwOwogfQotCQorCiAvKiBwcmludCBiYWQgYmxvY2tzIGluIE5BTkQgZmxhc2ggKi8KIHN0YXRpYyB2b2lkIG5hbmRfcHJpbnRfYmFkKHN0cnVjdCBuYW5kX2NoaXAqIG5hbmQpCiB7CkBAIC00NzMsNyArNDczLDcgQEAKIAkJICAgICAgIG5hbmQtPnRvdGxlbiA+PiAyMCwgbmFuZC0+ZXJhc2VzaXplID4+IDEwKTsKIAl9CiAJZWxzZSB7Ci0JCXByaW50ZigiJXMgYXQgMHglbHggKCIsIG5hbmQtPmNoaXBzX25hbWUsIG5hbmQtPklPX0FERFIpOyAKKwkJcHJpbnRmKCIlcyBhdCAweCVseCAoIiwgbmFuZC0+Y2hpcHNfbmFtZSwgbmFuZC0+SU9fQUREUik7CiAJCXByaW50X3NpemUobmFuZC0+dG90bGVuLCAiLCAiKTsKIAkJcHJpbnRfc2l6ZShuYW5kLT5lcmFzZXNpemUsICIgc2VjdG9yKVxuIik7CiAJfQpAQCAtNTk5LDcgKzU5OSw3IEBACiAKIAlpZCA9IFJFQURfTkFORChuYW5kLT5JT19BRERSKTsKIAotICAgICAgICBOQU5EX0RJU0FCTEVfQ0UobmFuZCk7ICAvKiBzZXQgcGluIGhpZ2ggKi8KKwlOQU5EX0RJU0FCTEVfQ0UobmFuZCk7ICAvKiBzZXQgcGluIGhpZ2ggKi8KIAkvKiBObyByZXNwb25zZSAtIHJldHVybiBmYWlsdXJlICovCiAJaWYgKG1mciA9PSAweGZmIHx8IG1mciA9PSAwKSB7CiAJCXByaW50ZigiTmFuRF9Db21tYW5kIChSZWFkSUQpIGdvdCAlZCAlZFxuIiwgbWZyLCBpZCk7CkBAIC04MDYsNyArODA2LDcgQEAKIAkJCWdvdG8gcmVhZGRhdGE7CiAJCS8qIFNlbmQgdGhlIHJlYWQgY29tbWFuZCAqLwogCQlOYW5EX0NvbW1hbmQobmFuZCwgTkFORF9DTURfUkVBRDApOwotICAgICAgICAgICAgICAgIE5hbkRfQWRkcmVzcyhuYW5kLCBBRERSX0NPTFVNTl9QQUdFLCAocGFnZSA8PCBuYW5kLT5wYWdlX3NoaWZ0KSArIGNvbCk7CisJCU5hbkRfQWRkcmVzcyhuYW5kLCBBRERSX0NPTFVNTl9QQUdFLCAocGFnZSA8PCBuYW5kLT5wYWdlX3NoaWZ0KSArIGNvbCk7CiAJCS8qIFJlYWQgaW4gYSBwYWdlICsgb29iIGRhdGEgKi8KIAkJTmFuRF9SZWFkQnVmKG5hbmQsIG5hbmQtPmRhdGFfYnVmLCBuYW5kLT5vb2JibG9jayArIG5hbmQtPm9vYnNpemUpOwogCkBAIC04NzMsNyArODczLDcgQEAKICNlbHNlCiAJCS8qIFNlbmQgdGhlIHJlYWQgY29tbWFuZCAqLwogCQlOYW5EX0NvbW1hbmQobmFuZCwgTkFORF9DTURfUkVBRDApOwotICAgICAgICAgICAgICAgIE5hbkRfQWRkcmVzcyhuYW5kLCBBRERSX0NPTFVNTl9QQUdFLCAocGFnZSA8PCBuYW5kLT5wYWdlX3NoaWZ0KSArIGNvbCk7CisJCU5hbkRfQWRkcmVzcyhuYW5kLCBBRERSX0NPTFVNTl9QQUdFLCAocGFnZSA8PCBuYW5kLT5wYWdlX3NoaWZ0KSArIGNvbCk7CiAJCS8qIFJlYWQgdGhlIGRhdGEgZGlyZWN0bHkgaW50byB0aGUgcmV0dXJuIGJ1ZmZlciAqLwogCQlpZiAoKCpyZXRsZW4gKyAobmFuZC0+b29iYmxvY2sgLSBjb2wpKSA+PSBsZW4pIHsKIAkJCU5hbkRfUmVhZEJ1ZihuYW5kLCBidWYgKyAqcmV0bGVuLCBsZW4gLSAqcmV0bGVuKTsKQEAgLTExMzYsMTEgKzExMzYsMTEgQEAKIAogCSpyZXRsZW4gPSBsZW47CiAJLyogUmVhZGluZyB0aGUgZnVsbCBPT0IgZGF0YSBkcm9wcyB1cyBvZmYgb2YgdGhlIGVuZCBvZiB0aGUgcGFnZSwKLSAgICAgICAgICogY2F1c2luZyB0aGUgZmxhc2ggZGV2aWNlIHRvIGdvIGludG8gYnVzeSBtb2RlLCBzbyB3ZSBuZWVkCi0gICAgICAgICAqIHRvIHdhaXQgdW50aWwgcmVhZHkgMTEuNC4xIGFuZCBUb3NoaWJhIFRDNTgyNTZGVCBuYW5kcyAqLworCSAqIGNhdXNpbmcgdGhlIGZsYXNoIGRldmljZSB0byBnbyBpbnRvIGJ1c3kgbW9kZSwgc28gd2UgbmVlZAorCSAqIHRvIHdhaXQgdW50aWwgcmVhZHkgMTEuNC4xIGFuZCBUb3NoaWJhIFRDNTgyNTZGVCBuYW5kcyAqLwogCiAJcmV0ID0gTmFuRF9XYWl0UmVhZHkobmFuZCk7Ci0gICAgICAgIE5BTkRfRElTQUJMRV9DRShuYW5kKTsgIC8qIHNldCBwaW4gaGlnaCAqLworCU5BTkRfRElTQUJMRV9DRShuYW5kKTsgIC8qIHNldCBwaW4gaGlnaCAqLwogCiAJcmV0dXJuIHJldDsKIApAQCAtMTI0NCw3ICsxMjQ0LDcgQEAKIAogCWlmIChvZnMgJiAobmFuZC0+ZXJhc2VzaXplLTEpIHx8IGxlbiAmIChuYW5kLT5lcmFzZXNpemUtMSkpIHsKIAkJcHJpbnRmICgiT2Zmc2V0IGFuZCBzaXplIG11c3QgYmUgc2VjdG9yIGFsaWduZWQsIGVyYXNlc2l6ZSA9ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgbmFuZC0+ZXJhc2VzaXplKTsKKwkJCShpbnQpIG5hbmQtPmVyYXNlc2l6ZSk7CiAJCXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfbmV0LmMgYi9jb21tb24vY21kX25ldC5jCmluZGV4IGU4YmYwYWUuLjQ0Yzg2ZTIgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfbmV0LmMKKysrIGIvY29tbW9uL2NtZF9uZXQuYwpAQCAtMjYsMTQgKzI2LDExIEBACiAgKi8KICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX25ldC5oPgorI2luY2x1ZGUgPGNtZF9hdXRvc2NyaXB0Lmg+CiAjaW5jbHVkZSA8bmV0Lmg+CiAKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9ORVQpCiAKLSMgaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQVVUT1NDUklQVCkKLSMgaW5jbHVkZSA8Y21kX2F1dG9zY3JpcHQuaD4KLSMgZW5kaWYKIAogZXh0ZXJuIGludCBkb19ib290bSAoY21kX3RibF90ICosIGludCwgaW50LCBjaGFyICpbXSk7CiAKQEAgLTQ0LDIxICs0MSw0NiBAQAogCXJldHVybiBuZXRib290X2NvbW1vbiAoQk9PVFAsIGNtZHRwLCBhcmdjLCBhcmd2KTsKIH0KIAorY21kX3RibF90IFVfQk9PVF9DTUQoQk9PVFApID0gTUtfQ01EX0VOVFJZKAorCSJib290cCIsCTMsCTEsCWRvX2Jvb3RwLAorCSJib290cCAgIC0gYm9vdCBpbWFnZSB2aWEgbmV0d29yayB1c2luZyBCb290UC9URlRQIHByb3RvY29sXG4iLAorCSJbbG9hZEFkZHJlc3NdIFtib290ZmlsZW5hbWVdXG4iCispOworCiBpbnQgZG9fdGZ0cGIgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXJldHVybiBuZXRib290X2NvbW1vbiAoVEZUUCwgY21kdHAsIGFyZ2MsIGFyZ3YpOwogfQogCitjbWRfdGJsX3QgVV9CT09UX0NNRChURlRQQikgPSBNS19DTURfRU5UUlkoCisJInRmdHBib290IiwJMywJMSwJZG9fdGZ0cGIsCisJInRmdHBib290LSBib290IGltYWdlIHZpYSBuZXR3b3JrIHVzaW5nIFRGVFAgcHJvdG9jb2xcbiIKKwkiICAgICAgICAgICAgICAgYW5kIGVudiB2YXJpYWJsZXMgaXBhZGRyIGFuZCBzZXJ2ZXJpcFxuIiwKKwkiW2xvYWRBZGRyZXNzXSBbYm9vdGZpbGVuYW1lXVxuIgorKTsKKwogaW50IGRvX3JhcnBiIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlyZXR1cm4gbmV0Ym9vdF9jb21tb24gKFJBUlAsIGNtZHRwLCBhcmdjLCBhcmd2KTsKIH0KIAorY21kX3RibF90IFVfQk9PVF9DTUQoUkFSUEIpID0gTUtfQ01EX0VOVFJZKAorCSJyYXJwYm9vdCIsCTMsCTEsCWRvX3JhcnBiLAorCSJyYXJwYm9vdC0gYm9vdCBpbWFnZSB2aWEgbmV0d29yayB1c2luZyBSQVJQL1RGVFAgcHJvdG9jb2xcbiIsCisJIltsb2FkQWRkcmVzc10gW2Jvb3RmaWxlbmFtZV1cbiIKKyk7CisKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9ESENQKQogaW50IGRvX2RoY3AgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXJldHVybiBuZXRib290X2NvbW1vbihESENQLCBjbWR0cCwgYXJnYywgYXJndik7CiB9CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKERIQ1ApID0gTUtfQ01EX0VOVFJZKAorCSJkaGNwIiwJMywJMSwJZG9fZGhjcCwKKwkiZGhjcCAgICAtIGludm9rZSBESENQIGNsaWVudCB0byBvYnRhaW4gSVAvYm9vdCBwYXJhbXNcbiIsCisJIlxuIgorKTsKICNlbmRpZgkvKiBDRkdfQ01EX0RIQ1AgKi8KIAogc3RhdGljIHZvaWQgbmV0Ym9vdF91cGRhdGVfZW52KHZvaWQpCmRpZmYgLS1naXQgYS9jb21tb24vY21kX252ZWRpdC5jIGIvY29tbW9uL2NtZF9udmVkaXQuYwppbmRleCAzYzJhNTUzLi45Y2Y4YjkwIDEwMDY0NAotLS0gYS9jb21tb24vY21kX252ZWRpdC5jCisrKyBiL2NvbW1vbi9jbWRfbnZlZGl0LmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8ZW52aXJvbm1lbnQuaD4KICNpbmNsdWRlIDx3YXRjaGRvZy5oPgotI2luY2x1ZGUgPGNtZF9udmVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkVUKQpAQCAtNTM0LDYgKzUzMyw4IEBACiAKIAlyZXR1cm4gKHNhdmVlbnYoKSA/IDEgOiAwKTsKIH0KKworCiAjZW5kaWYKIAogCkBAIC01NTYsMyArNTU3LDYwIEBACiAJCXJldHVybihpMik7CiAJcmV0dXJuKC0xKTsKIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKFBSSU5URU5WKSA9IE1LX0NNRF9FTlRSWSgKKwkicHJpbnRlbnYiLCBDRkdfTUFYQVJHUywgMSwJZG9fcHJpbnRlbnYsCisJInByaW50ZW52LSBwcmludCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiIsCisJIlxuICAgIC0gcHJpbnQgdmFsdWVzIG9mIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiIKKwkicHJpbnRlbnYgbmFtZSAuLi5cbiIKKwkiICAgIC0gcHJpbnQgdmFsdWUgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgJ25hbWUnXG4iCispOworCitjbWRfdGJsX3QgVV9CT09UX0NNRChTRVRFTlYpID0gTUtfQ01EX0VOVFJZKAorCSJzZXRlbnYiLCBDRkdfTUFYQVJHUywgMCwJZG9fc2V0ZW52LAorCSJzZXRlbnYgIC0gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlc1xuIiwKKwkibmFtZSB2YWx1ZSAuLi5cbiIKKwkiICAgIC0gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlICduYW1lJyB0byAndmFsdWUgLi4uJ1xuIgorCSJzZXRlbnYgbmFtZVxuIgorCSIgICAgLSBkZWxldGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ25hbWUnXG4iCispOworCisjaWYgKChDT05GSUdfQ09NTUFORFMgJiAoQ0ZHX0NNRF9FTlZ8Q0ZHX0NNRF9GTEFTSCkpID09IChDRkdfQ01EX0VOVnxDRkdfQ01EX0ZMQVNIKSkKKworY21kX3RibF90IFVfQk9PVF9DTUQoU0FWRUVOVikgPSBNS19DTURfRU5UUlkoCisJInNhdmVlbnYiLCAxLCAwLAlkb19zYXZlZW52LAorCSJzYXZlZW52IC0gc2F2ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGVyc2lzdGVudCBzdG9yYWdlXG4iLAorCU5VTEwKKyk7CisKKyNlbmRpZgkvKiBDRkdfQ01EX0VOViAqLworCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQVNLRU5WKQorCitjbWRfdGJsX3QgVV9CT09UX0NNRChBU0tFTlYpID0gTUtfQ01EX0VOVFJZKAorCSJhc2tlbnYiLAlDRkdfTUFYQVJHUywJMSwJZG9fYXNrZW52LAorCSJhc2tlbnYgIC0gZ2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIHN0ZGluXG4iLAorCSJuYW1lIFttZXNzYWdlXSBbc2l6ZV1cbiIKKwkiICAgIC0gZ2V0IGVudmlyb25tZW50IHZhcmlhYmxlICduYW1lJyBmcm9tIHN0ZGluIChtYXggJ3NpemUnIGNoYXJzKVxuIgorCSJhc2tlbnYgbmFtZVxuIgorCSIgICAgLSBnZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ25hbWUnIGZyb20gc3RkaW5cbiIKKwkiYXNrZW52IG5hbWUgc2l6ZVxuIgorCSIgICAgLSBnZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ25hbWUnIGZyb20gc3RkaW4gKG1heCAnc2l6ZScgY2hhcnMpXG4iCisJImFza2VudiBuYW1lIFttZXNzYWdlXSBzaXplXG4iCisJIiAgICAtIGRpc3BsYXkgJ21lc3NhZ2UnIHN0cmluZyBhbmQgZ2V0IGVudmlyb25tZW50IHZhcmlhYmxlICduYW1lJyIKKwkiZnJvbSBzdGRpbiAobWF4ICdzaXplJyBjaGFycylcbiIKKyk7CisjZW5kaWYJLyogQ0ZHX0NNRF9BU0tFTlYgKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1JVTikKK2ludCBkb19ydW4gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKK2NtZF90YmxfdCBVX0JPT1RfQ01EKFJVTikgPSBNS19DTURfRU5UUlkoCisJInJ1biIsCUNGR19NQVhBUkdTLAkxLAlkb19ydW4sCisJInJ1biAgICAgLSBydW4gY29tbWFuZHMgaW4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGVcbiIsCisJInZhciBbLi4uXVxuIgorCSIgICAgLSBydW4gdGhlIGNvbW1hbmRzIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZShzKSAndmFyJ1xuIgorKTsKKyNlbmRpZiAgLyogQ0ZHX0NNRF9SVU4gKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfcGNpLmMgYi9jb21tb24vY21kX3BjaS5jCmluZGV4IGNhNzEyY2UuLjc2NDFkNWMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfcGNpLmMKKysrIGIvY29tbW9uL2NtZF9wY2kuYwpAQCAtMzQsMTAgKzM0LDggQEAKICNpZmRlZiBDT05GSUdfUENJCiAKICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8Y21kX3BjaS5oPgogI2luY2x1ZGUgPHBjaS5oPgogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENJKQpAQCAtMTE2LDYzICsxMTQsNjMgQEAKIHN0YXRpYyBjaGFyICpwY2lfY2xhc3Nlc19zdHIodTggY2xhc3MpCiB7CiAJc3dpdGNoIChjbGFzcykgewotICAgICAgICBjYXNlIFBDSV9DTEFTU19OT1RfREVGSU5FRDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkJ1aWxkIGJlZm9yZSBQQ0kgUmV2Mi4wIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQQ0lfQkFTRV9DTEFTU19TVE9SQUdFOgotICAgICAgICAgICAgICAgIHJldHVybiAiTWFzcyBzdG9yYWdlIGNvbnRyb2xsZXIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBDSV9CQVNFX0NMQVNTX05FVFdPUks6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJOZXR3b3JrIGNvbnRyb2xsZXIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBDSV9CQVNFX0NMQVNTX0RJU1BMQVk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJEaXNwbGF5IGNvbnRyb2xsZXIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBDSV9CQVNFX0NMQVNTX01VTFRJTUVESUE6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJNdWx0aW1lZGlhIGRldmljZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUENJX0JBU0VfQ0xBU1NfTUVNT1JZOgotICAgICAgICAgICAgICAgIHJldHVybiAiTWVtb3J5IGNvbnRyb2xsZXIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBDSV9CQVNFX0NMQVNTX0JSSURHRToKLSAgICAgICAgICAgICAgICByZXR1cm4gIkJyaWRnZSBkZXZpY2UiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBDSV9CQVNFX0NMQVNTX0NPTU1VTklDQVRJT046Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJTaW1wbGUgY29tbS4gY29udHJvbGxlciI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUENJX0JBU0VfQ0xBU1NfU1lTVEVNOgotICAgICAgICAgICAgICAgIHJldHVybiAiQmFzZSBzeXN0ZW0gcGVyaXBoZXJhbCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUENJX0JBU0VfQ0xBU1NfSU5QVVQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJJbnB1dCBkZXZpY2UiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBDSV9CQVNFX0NMQVNTX0RPQ0tJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJEb2NraW5nIHN0YXRpb24iOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBDSV9CQVNFX0NMQVNTX1BST0NFU1NPUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlByb2Nlc3NvciI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUENJX0JBU0VfQ0xBU1NfU0VSSUFMOgotICAgICAgICAgICAgICAgIHJldHVybiAiU2VyaWFsIGJ1cyBjb250cm9sbGVyIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQQ0lfQkFTRV9DTEFTU19JTlRFTExJR0VOVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkludGVsbGlnZW50IGNvbnRyb2xsZXIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFBDSV9CQVNFX0NMQVNTX1NBVEVMTElURToKLSAgICAgICAgICAgICAgICByZXR1cm4gIlNhdGVsbGl0ZSBjb250cm9sbGVyIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQQ0lfQkFTRV9DTEFTU19DUllQVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkNyeXB0b2dyYXBoaWMgZGV2aWNlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQQ0lfQkFTRV9DTEFTU19TSUdOQUxfUFJPQ0VTU0lORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkRTUCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUENJX0NMQVNTX09USEVSUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkRvZXMgbm90IGZpdCBhbnkgY2xhc3MiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgorCWNhc2UgUENJX0NMQVNTX05PVF9ERUZJTkVEOgorCQlyZXR1cm4gIkJ1aWxkIGJlZm9yZSBQQ0kgUmV2Mi4wIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFTRV9DTEFTU19TVE9SQUdFOgorCQlyZXR1cm4gIk1hc3Mgc3RvcmFnZSBjb250cm9sbGVyIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFTRV9DTEFTU19ORVRXT1JLOgorCQlyZXR1cm4gIk5ldHdvcmsgY29udHJvbGxlciI7CisJCWJyZWFrOworCWNhc2UgUENJX0JBU0VfQ0xBU1NfRElTUExBWToKKwkJcmV0dXJuICJEaXNwbGF5IGNvbnRyb2xsZXIiOworCQlicmVhazsKKwljYXNlIFBDSV9CQVNFX0NMQVNTX01VTFRJTUVESUE6CisJCXJldHVybiAiTXVsdGltZWRpYSBkZXZpY2UiOworCQlicmVhazsKKwljYXNlIFBDSV9CQVNFX0NMQVNTX01FTU9SWToKKwkJcmV0dXJuICJNZW1vcnkgY29udHJvbGxlciI7CisJCWJyZWFrOworCWNhc2UgUENJX0JBU0VfQ0xBU1NfQlJJREdFOgorCQlyZXR1cm4gIkJyaWRnZSBkZXZpY2UiOworCQlicmVhazsKKwljYXNlIFBDSV9CQVNFX0NMQVNTX0NPTU1VTklDQVRJT046CisJCXJldHVybiAiU2ltcGxlIGNvbW0uIGNvbnRyb2xsZXIiOworCQlicmVhazsKKwljYXNlIFBDSV9CQVNFX0NMQVNTX1NZU1RFTToKKwkJcmV0dXJuICJCYXNlIHN5c3RlbSBwZXJpcGhlcmFsIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFTRV9DTEFTU19JTlBVVDoKKwkJcmV0dXJuICJJbnB1dCBkZXZpY2UiOworCQlicmVhazsKKwljYXNlIFBDSV9CQVNFX0NMQVNTX0RPQ0tJTkc6CisJCXJldHVybiAiRG9ja2luZyBzdGF0aW9uIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFTRV9DTEFTU19QUk9DRVNTT1I6CisJCXJldHVybiAiUHJvY2Vzc29yIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFTRV9DTEFTU19TRVJJQUw6CisJCXJldHVybiAiU2VyaWFsIGJ1cyBjb250cm9sbGVyIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFTRV9DTEFTU19JTlRFTExJR0VOVDoKKwkJcmV0dXJuICJJbnRlbGxpZ2VudCBjb250cm9sbGVyIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFTRV9DTEFTU19TQVRFTExJVEU6CisJCXJldHVybiAiU2F0ZWxsaXRlIGNvbnRyb2xsZXIiOworCQlicmVhazsKKwljYXNlIFBDSV9CQVNFX0NMQVNTX0NSWVBUOgorCQlyZXR1cm4gIkNyeXB0b2dyYXBoaWMgZGV2aWNlIjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQkFTRV9DTEFTU19TSUdOQUxfUFJPQ0VTU0lORzoKKwkJcmV0dXJuICJEU1AiOworCQlicmVhazsKKwljYXNlIFBDSV9DTEFTU19PVEhFUlM6CisJCXJldHVybiAiRG9lcyBub3QgZml0IGFueSBjbGFzcyI7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJcmV0dXJuICAiPz8/IjsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkJYnJlYWs7CiAJfTsKIH0KIApAQCAtMjM0LDcgKzIzMiw3IEBACiAJUFJJTlQgKCIgIHN0YXR1cyByZWdpc3RlciA9ICAgICAgICAgICAgIDB4JS40eFxuIiwgd29yZCwgUENJX1NUQVRVUyk7CiAJUFJJTlQgKCIgIHJldmlzaW9uIElEID0gICAgICAgICAgICAgICAgIDB4JS4yeFxuIiwgYnl0ZSwgUENJX1JFVklTSU9OX0lEKTsKIAlQUklOVDIoIiAgY2xhc3MgY29kZSA9ICAgICAgICAgICAgICAgICAgMHglLjJ4ICglcylcbiIsIGJ5dGUsIFBDSV9DTEFTU19DT0RFLAotCSAgICAgICAJCQkJCQkJcGNpX2NsYXNzZXNfc3RyKTsKKwkJCQkJCQkJcGNpX2NsYXNzZXNfc3RyKTsKIAlQUklOVCAoIiAgc3ViIGNsYXNzIGNvZGUgPSAgICAgICAgICAgICAgMHglLjJ4XG4iLCBieXRlLCBQQ0lfQ0xBU1NfU1VCX0NPREUpOwogCVBSSU5UICgiICBwcm9ncmFtbWluZyBpbnRlcmZhY2UgPSAgICAgICAweCUuMnhcbiIsIGJ5dGUsIFBDSV9DTEFTU19QUk9HKTsKIAlQUklOVCAoIiAgY2FjaGUgbGluZSA9ICAgICAgICAgICAgICAgICAgMHglLjJ4XG4iLCBieXRlLCBQQ0lfQ0FDSEVfTElORV9TSVpFKTsKQEAgLTI1OSw3ICsyNTcsNyBAQAogCQlQUklOVCAoIiAgbWluIEdyYW50ID0gICAgICAgICAgICAgICAgICAgMHglLjJ4XG4iLCBieXRlLCBQQ0lfTUlOX0dOVCk7CiAJCVBSSU5UICgiICBtYXggTGF0ZW5jeSA9ICAgICAgICAgICAgICAgICAweCUuMnhcbiIsIGJ5dGUsIFBDSV9NQVhfTEFUKTsKIAkJYnJlYWs7Ci0JCQorCiAJY2FzZSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFOgkvKiBQQ0ktdG8tUENJIGJyaWRnZSAqLwogCiAJCVBSSU5UICgiICBiYXNlIGFkZHJlc3MgMSA9ICAgICAgICAgICAgICAweCUuOHhcbiIsIGR3b3JkLCBQQ0lfQkFTRV9BRERSRVNTXzEpOwpAQCAtMjkxLDcgKzI4OSw3IEBACiAJCVBSSU5UICgiICBwcmltYXJ5IGJ1cyBudW1iZXIgPSAgICAgICAgICAweCUuMnhcbiIsIGJ5dGUsIFBDSV9DQl9QUklNQVJZX0JVUyk7CiAJCVBSSU5UICgiICBDYXJkQnVzIG51bWJlciA9ICAgICAgICAgICAgICAweCUuMnhcbiIsIGJ5dGUsIFBDSV9DQl9DQVJEX0JVUyk7CiAJCVBSSU5UICgiICBzdWJvcmRpbmF0ZSBidXMgbnVtYmVyID0gICAgICAweCUuMnhcbiIsIGJ5dGUsIFBDSV9DQl9TVUJPUkRJTkFURV9CVVMpOwotCQlQUklOVCAoIiAgQ2FyZEJ1cyBsYXRlbmN5IHRpbWVyID0gICAgICAgMHglLjJ4XG4iLCBieXRlLCBQQ0lfQ0JfTEFURU5DWV9USU1FUik7CQkKKwkJUFJJTlQgKCIgIENhcmRCdXMgbGF0ZW5jeSB0aW1lciA9ICAgICAgIDB4JS4yeFxuIiwgYnl0ZSwgUENJX0NCX0xBVEVOQ1lfVElNRVIpOwogCQlQUklOVCAoIiAgQ2FyZEJ1cyBtZW1vcnkgYmFzZSAwID0gICAgICAgMHglLjh4XG4iLCBkd29yZCwgUENJX0NCX01FTU9SWV9CQVNFXzApOwogCQlQUklOVCAoIiAgQ2FyZEJ1cyBtZW1vcnkgbGltaXQgMCA9ICAgICAgMHglLjh4XG4iLCBkd29yZCwgUENJX0NCX01FTU9SWV9MSU1JVF8wKTsKIAkJUFJJTlQgKCIgIENhcmRCdXMgbWVtb3J5IGJhc2UgMSA9ICAgICAgIDB4JS44eFxuIiwgZHdvcmQsIFBDSV9DQl9NRU1PUllfQkFTRV8xKTsKQEAgLTMxMSwxMCArMzA5LDEwIEBACiAJCVBSSU5UICgiICBzdWJkZXZpY2UgSUQgPSAgICAgICAgICAgICAgICAweCUuNHhcbiIsIHdvcmQsIFBDSV9DQl9TVUJTWVNURU1fSUQpOwogCQlQUklOVCAoIiAgUEMgQ2FyZCAxNmJpdCBiYXNlIGFkZHJlc3MgPSAgMHglLjh4XG4iLCBkd29yZCwgUENJX0NCX0xFR0FDWV9NT0RFX0JBU0UpOwogCQlicmVhazsKLQkJCisKIAlkZWZhdWx0OgogCQlwcmludGYoInVua25vd24gaGVhZGVyXG4iKTsKLQkJYnJlYWs7CQorCQlicmVhazsKICAgICB9CiAKICN1bmRlZiBQUklOVApAQCAtNTQ3LDYgKzU0NSwyNiBAQAogCXJldHVybiAxOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKFBDSSkgPSBNS19DTURfRU5UUlkoCisJInBjaSIsCTUsCTEsCWRvX3BjaSwKKwkicGNpICAgICAtIGxpc3QgYW5kIGFjY2VzcyBQQ0kgQ29uZmlndXJhdG9uIFNwYWNlXG4iLAorCSJbYnVzXSBbbG9uZ11cbiIKKwkiICAgIC0gc2hvcnQgb3IgbG9uZyBsaXN0IG9mIFBDSSBkZXZpY2VzIG9uIGJ1cyAnYnVzJ1xuIgorCSJwY2kgaGVhZGVyIGIuZC5mXG4iCisJIiAgICAtIHNob3cgaGVhZGVyIG9mIFBDSSBkZXZpY2UgJ2J1cy5kZXZpY2UuZnVuY3Rpb24nXG4iCisJInBjaSBkaXNwbGF5Wy5iLCAudywgLmxdIGIuZC5mIFthZGRyZXNzXSBbIyBvZiBvYmplY3RzXVxuIgorCSIgICAgLSBkaXNwbGF5IFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIChDRkcpXG4iCisJInBjaSBuZXh0Wy5iLCAudywgLmxdIGIuZC5mIGFkZHJlc3NcbiIKKwkiICAgIC0gbW9kaWZ5LCByZWFkIGFuZCBrZWVwIENGRyBhZGRyZXNzXG4iCisJInBjaSBtb2RpZnlbLmIsIC53LCAubF0gYi5kLmYgYWRkcmVzc1xuIgorCSIgICAgLSAgbW9kaWZ5LCBhdXRvIGluY3JlbWVudCBDRkcgYWRkcmVzc1xuIgorCSJwY2kgd3JpdGVbLmIsIC53LCAubF0gYi5kLmYgYWRkcmVzcyB2YWx1ZVxuIgorCSIgICAgLSB3cml0ZSB0byBDRkcgYWRkcmVzc1xuIgorKTsKKwogI2VuZGlmIC8qIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1BDSSkgKi8KIAogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfcGNtY2lhLmMgYi9jb21tb24vY21kX3BjbWNpYS5jCmluZGV4IDEwYmE4NGMuLjJhYTJhMjMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfcGNtY2lhLmMKKysrIGIvY29tbW9uL2NtZF9wY21jaWEuYwpAQCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDxwY21jaWEuaD4KLSNpbmNsdWRlIDxjbWRfcGNtY2lhLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfSURFXzh4eF9QQ0NBUkQpICYmIGRlZmluZWQoQ09ORklHXzh4eCkKICNpbmNsdWRlIDxtcGM4eHguaD4KICNlbmRpZgpAQCAtNjY5LDcgKzY2OCw2IEBACiB9CiAKIAotCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQogc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQogewpAQCAtNjk4LDcgKzY5Niw2IEBACiAjZW5kaWYJLyogQ0ZHX0NNRF9QQ01DSUEgKi8KIAogCi0KIHN0YXRpYyBpbnQgdm9sdGFnZV9zZXQoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCiB7CiAJdm9sYXRpbGUgaW1tYXBfdAkqaW1tYXA7CkBAIC04OTAsNyArODg3LDYgQEAKIH0KIAogCi0KICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCiBzdGF0aWMgaW50IGhhcmR3YXJlX2Rpc2FibGUoaW50IHNsb3QpCiB7CkBAIC05MzMsNyArOTI5LDYgQEAKICNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLwogCiAKLQogc3RhdGljIGludCB2b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKIHsKIAl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKQEAgLTEyMDYsNyArMTIwMSw2IEBACiB9CiAKIAotCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQogc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQogewpAQCAtMTIzOCw3ICsxMjMyLDYgQEAKICNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLwogCiAKLQogc3RhdGljIGludCB2b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKIHsKIAl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKQEAgLTE0NzAsNyArMTQ2Myw2IEBACiB9CiAKIAotCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQogc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQogewpAQCAtMTUwMiw3ICsxNDk0LDYgQEAKICNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLwogCiAKLQogc3RhdGljIGludCB2b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKIHsKIAl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKQEAgLTE4OTUsNyArMTg4Niw2IEBACiB9CiAKIAotCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQogc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQogewpAQCAtMTkyNiw3ICsxOTE2LDYgQEAKICNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLwogCiAKLQogc3RhdGljIGludCB2b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKIHsKIAl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKQEAgLTIxMTUsNyArMjEwNCw2IEBACiB9CiAKIAotCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUENNQ0lBKQogc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQogewpAQCAtMjE0OCw3ICsyMTM2LDYgQEAKICNlbmRpZgkvKiBDRkdfQ01EX1BDTUNJQSAqLwogCiAKLQogc3RhdGljIGludCB2b2x0YWdlX3NldChpbnQgc2xvdCwgaW50IHZjYywgaW50IHZwcCkKIHsKIAl2b2xhdGlsZSBpbW1hcF90CSppbW1hcDsKQEAgLTIyMjcsOSArMjIxNCw2IEBACiAjZW5kaWYJLyogS1VQNEsgKi8KIAogCi0KLQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRW5kIG9mIEJvYXJkIFNwZWNpZmljIFN0dWZmCQkJCQkJKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yNDk5LDMgKzI0ODMsMTQgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNlbmRpZiAvKiBDRkdfQ01EX1BDTUNJQSB8fCAoQ0ZHX0NNRF9JREUgJiYgQ09ORklHX0lERV84eHhfUENDQVJEKSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCitjbWRfdGJsX3QgVV9CT09UX0NNRChQSU5JVCkgPSBNS19DTURfRU5UUlkoCisJInBpbml0IiwJMiwJMSwJZG9fcGluaXQsCisJInBpbml0ICAgLSBQQ01DSUEgc3ViLXN5c3RlbVxuIiwKKwkib24gIC0gcG93ZXIgb24gUENNQ0lBIHNvY2tldFxuIgorCSJwaW5pdCBvZmYgLSBwb3dlciBvZmYgUENNQ0lBIHNvY2tldFxuIgorKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9yZWdpbmZvLmMgYi9jb21tb24vY21kX3JlZ2luZm8uYwppbmRleCAxOThiOWM3Li5hYTlhYmY5IDEwMDY0NAotLS0gYS9jb21tb24vY21kX3JlZ2luZm8uYworKysgYi9jb21tb24vY21kX3JlZ2luZm8uYwpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ib290Lmg+CiAjaWYgZGVmaW5lZChDT05GSUdfOHh4KQogI2luY2x1ZGUgPG1wYzh4eC5oPgogI2VsaWYgZGVmaW5lZCAoQ09ORklHXzQwNUdQKQpAQCAtMjEzLDMgKzIxMiwxNSBAQAogfQogCiAjZW5kaWYJLyogQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9SRUdJTkZPICovCisKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIChkZWZpbmVkKENPTkZJR184eHgpIHx8IGRlZmluZWQoQ09ORklHXzQwNUdQKSkgJiYgXAorICAgICAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9SRUdJTkZPKQorCitjbWRfdGJsX3QgVV9CT09UX0NNRChSRUdJTkZPKSA9CU1LX0NNRF9FTlRSWSgKKyAJInJlZ2luZm8iLAkyLAkxLAlkb19yZWdpbmZvLAorCSJyZWdpbmZvIC0gcHJpbnQgcmVnaXN0ZXIgaW5mb3JtYXRpb25cbiIsCispOworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21tb24vY21kX3Njc2kuYyBiL2NvbW1vbi9jbWRfc2NzaS5jCmluZGV4IGYzZDBjNzIuLmM5MjU4MjMgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jbWRfc2NzaS5jCisrKyBiL2NvbW1vbi9jbWRfc2NzaS5jCkBAIC0zMCw3ICszMCw2IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8c2NzaS5oPgogI2luY2x1ZGUgPGltYWdlLmg+CkBAIC0xODEsNyArMTgwLDYgQEAKIH0KIAogCi0KIHZvaWQgc2NzaV9pbml0KHZvaWQpCiB7CiAJaW50IGJ1c2RldmZ1bmM7CkBAIC0yMDYsNyArMjA0LDYgQEAKIH0KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHNjc2kgYm9vdCBjb21tYW5kIGludGVwcmV0ZXIuIERlcml2ZWQgZnJvbSBkaXNrYm9vdAogICovCkBAIC00OTQsNyArNDkxLDYgQEAKIH0KIAogCi0KIC8qIFRyaW0gdHJhaWxpbmcgYmxhbmtzLCBhbmQgTlVMLXRlcm1pbmF0ZSBzdHJpbmcKICAqLwogdm9pZCBzY3NpX3RyaW1fdHJhaWwgKHVuc2lnbmVkIGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IGxlbikKQEAgLTU5NCw1ICs1OTAsMyBAQAogfQogCiAjZW5kaWYgLyogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NDU0kpICovCi0KLQpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9zcGkuYyBiL2NvbW1vbi9jbWRfc3BpLmMKaW5kZXggZDU0NGIyNy4uODJjYjY3MyAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9zcGkuYworKysgYi9jb21tb24vY21kX3NwaS5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPHNwaS5oPgotI2luY2x1ZGUgPGNtZF9zcGkuaD4KIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1NQSSkKIApAQCAtMTA3LDExICsxMDYsMTEgQEAKIAlpZiAoKGRldmljZSA8IDApIHx8IChkZXZpY2UgPj0gIHNwaV9jaGlwc2VsX2NudCkpIHsKIAkJcHJpbnRmKCJJbnZhbGlkIGRldmljZSAlZCwgZ2l2aW5nIHVwLlxuIiwgZGV2aWNlKTsKIAkJcmV0dXJuIDE7Ci0JfSAKKwl9CiAJaWYgKChiaXRsZW4gPCAwKSB8fCAoYml0bGVuID4gIChNQVhfU1BJX0JZVEVTICogOCkpKSB7CiAJCXByaW50ZigiSW52YWxpZCBiaXRsZW4gJWQsIGdpdmluZyB1cC5cbiIsIGJpdGxlbik7CiAJCXJldHVybiAxOwotCX0gCisJfQogCiAJZGVidWcgKCJzcGlfY2hpcHNlbFslZF0gPSAlMDhYXG4iLAogCQlkZXZpY2UsICh1aW50KXNwaV9jaGlwc2VsW2RldmljZV0pOwpAQCAtMTMwLDQgKzEyOSwxNSBAQAogCXJldHVybiByY29kZTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworY21kX3RibF90IFVfQk9PVF9DTUQoU1BJKSA9IE1LX0NNRF9FTlRSWSgKKwkic3NwaSIsCTUsCTEsCWRvX3NwaSwKKwkic3NwaSAgICAgLSBTUEkgdXRpbGl0eSBjb21tYW5kc1xuIiwKKwkiPGRldmljZT4gPGJpdF9sZW4+IDxkb3V0PiAtIFNlbmQgPGJpdF9sZW4+IGJpdHMgZnJvbSA8ZG91dD4gb3V0IHRoZSBTUElcbiIKKwkiPGRldmljZT4gIC0gSWRlbnRpZmllcyB0aGUgY2hpcCBzZWxlY3Qgb2YgdGhlIGRldmljZVxuIgorCSI8Yml0X2xlbj4gLSBOdW1iZXIgb2YgYml0cyB0byBzZW5kIChiYXNlIDEwKVxuIgorCSI8ZG91dD4gICAgLSBIZXhhZGVjaW1hbCBzdHJpbmcgdGhhdCBnZXRzIHNlbnRcbiIKKyk7CisKICNlbmRpZgkvKiBDRkdfQ01EX1NQSSAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF91c2IuYyBiL2NvbW1vbi9jbWRfdXNiLmMKaW5kZXggOGEzZjQ3MS4uZDhmMmYyYyAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF91c2IuYworKysgYi9jb21tb24vY21kX3VzYi5jCkBAIC0zMDksNyArMzA5LDYgQEAKIH0KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHVzYiBib290IGNvbW1hbmQgaW50ZXByZXRlci4gRGVyaXZlZCBmcm9tIGRpc2tib290CiAgKi8KQEAgLTQzMyw3ICs0MzIsNiBAQAogI2VuZGlmIC8qIENPTkZJR19VU0JfU1RPUkFHRSAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogdXNiIGNvbW1hbmQgaW50ZXByZXRlcgogICovCkBAIC01OTQsMyArNTkyLDM3IEBACiAjZW5kaWYgLyogKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfVVNCKSAqLwogCiAKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9VU0IpCisKKyNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0UKK2NtZF90YmxfdCBVX0JPT1RfQ01EKFVTQikgPSBNS19DTURfRU5UUlkoCisJInVzYiIsCTUsCTEsCWRvX3VzYiwKKwkidXNiICAgICAtIFVTQiBzdWItc3lzdGVtXG4iLAorCSJyZXNldCAtIHJlc2V0IChyZXNjYW4pIFVTQiBjb250cm9sbGVyXG4iCisJInVzYiAgc3RvcCBbZl0gIC0gc3RvcCBVU0IgW2ZdPWZvcmNlIHN0b3BcbiIKKwkidXNiICB0cmVlICAtIHNob3cgVVNCIGRldmljZSB0cmVlXG4iCisJInVzYiAgaW5mbyBbZGV2XSAtIHNob3cgYXZhaWxhYmxlIFVTQiBkZXZpY2VzXG4iCisJInVzYiAgc2NhbiAgLSAocmUtKXNjYW4gVVNCIGJ1cyBmb3Igc3RvcmFnZSBkZXZpY2VzXG4iCisJInVzYiAgZGV2aWNlIFtkZXZdIC0gc2hvdyBvciBzZXQgY3VycmVudCBVU0Igc3RvcmFnZSBkZXZpY2VcbiIKKwkidXNiICBwYXJ0IFtkZXZdIC0gcHJpbnQgcGFydGl0aW9uIHRhYmxlIG9mIG9uZSBvciBhbGwgVVNCIHN0b3JhZ2UgZGV2aWNlc1xuIgorCSJ1c2IgIHJlYWQgYWRkciBibGsjIGNudCAtIHJlYWQgYGNudCcgYmxvY2tzIHN0YXJ0aW5nIGF0IGJsb2NrIGBibGsjJ1xuIgorCSIgICAgIHRvIG1lbW9yeSBhZGRyZXNzIGBhZGRyJ1xuIgorKTsKKworCitjbWRfdGJsX3QgVV9CT09UX0NNRChVU0JCT09UKSA9IE1LX0NNRF9FTlRSWSgKKwkidXNiYm9vdCIsCTMsCTEsCWRvX3VzYmJvb3QsCisJInVzYmJvb3QgLSBib290IGZyb20gVVNCIGRldmljZVxuIiwKKwkibG9hZEFkZHIgZGV2OnBhcnRcbiIKKyk7CisKKyNlbHNlCitjbWRfdGJsX3QgVV9CT09UX0NNRChVU0IpID0gTUtfQ01EX0VOVFJZKAorCSJ1c2IiLAk1LAkxLAlkb191c2IsCisJInVzYiAgICAgLSBVU0Igc3ViLXN5c3RlbVxuIiwKKwkicmVzZXQgLSByZXNldCAocmVzY2FuKSBVU0IgY29udHJvbGxlclxuIgorCSJ1c2IgIHRyZWUgIC0gc2hvdyBVU0IgZGV2aWNlIHRyZWVcbiIKKwkidXNiICBpbmZvIFtkZXZdIC0gc2hvdyBhdmFpbGFibGUgVVNCIGRldmljZXNcbiIKKyk7CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF92ZmQuYyBiL2NvbW1vbi9jbWRfdmZkLmMKaW5kZXggM2VmMTM5NS4uNjFlYmUxYyAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF92ZmQuYworKysgYi9jb21tb24vY21kX3ZmZC5jCkBAIC02NCw2ICs2NCwxMyBAQAogCXRyYW5zZmVyX3BpYygzLCAodWNoYXIgKiliaXRtYXAsIFZGRF9MT0dPX0hFSUdIVCwgVkZEX0xPR09fV0lEVEgpOwogCXJldHVybiAwOwogfQorCitjbWRfdGJsX3QgVV9CT09UX0NNRChWRkQpID0gTUtfQ01EX0VOVFJZKAorIAkidmZkIiwJMiwJMCwJZG9fdmZkLAorIAkidmZkICAgICAtIGxvYWQgYSBiaXRtYXAgdG8gdGhlIFZGRHMgb24gVFJBQlxuIiwKKyAJIk5cbiIKKyAJIiAgICAtIGxvYWQgYml0bWFwIE4gdG8gdGhlIFZGRHMgKE4gaXMgX2RlY2ltYWxfICEhISlcbiIKKyk7CiAjZW5kaWYJLyogQ0ZHX0NNRF9WRkQgKi8KIAogI2lmZGVmIENPTkZJR19WRkQKZGlmZiAtLWdpdCBhL2NvbW1vbi9jb21tYW5kLmMgYi9jb21tb24vY29tbWFuZC5jCmluZGV4IDg0MmU3ODQuLjYwN2M3NDYgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9jb21tYW5kLmMKKysrIGIvY29tbW9uL2NvbW1hbmQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKKyAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDAzCiAgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC0yNyw5MyArMjcsNiBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9jYWNoZS5oPgotI2luY2x1ZGUgPGNtZF9tZW0uaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgotI2luY2x1ZGUgPGNtZF9mbGFzaC5oPgotI2luY2x1ZGUgPGNtZF9ib290bS5oPgotI2luY2x1ZGUgPGNtZF9uZXQuaD4KLSNpbmNsdWRlIDxjbWRfbnZlZGl0Lmg+Ci0jaW5jbHVkZSA8Y21kX21pc2MuaD4KLSNpbmNsdWRlIDxjbWRfa2dkYi5oPgotI2luY2x1ZGUgPGNtZF9pZGUuaD4KLSNpbmNsdWRlIDxjbWRfZGlzay5oPgotI2luY2x1ZGUgPGNtZF9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8Y21kX3JlZ2luZm8uaD4KLSNpbmNsdWRlIDxjbWRfcGNtY2lhLmg+Ci0jaW5jbHVkZSA8Y21kX2F1dG9zY3JpcHQuaD4KLSNpbmNsdWRlIDxjbWRfZGlhZy5oPgotCi0jaW5jbHVkZSA8Y21kX2VlcHJvbS5oPgotI2luY2x1ZGUgPGNtZF9pMmMuaD4KLSNpbmNsdWRlIDxjbWRfc3BpLmg+Ci0jaW5jbHVkZSA8Y21kX2ltbWFwLmg+Ci0jaW5jbHVkZSA8Y21kX3J0Yy5oPgotCi0jaW5jbHVkZSA8Y21kX2VsZi5oPgotI2luY2x1ZGUgPGNtZF9mZGMuaD4JCS8qIEZsb3BweSBzdXBwb3J0ICovCi0jaW5jbHVkZSA8Y21kX3VzYi5oPgkJLyogVVNCIHN1cHBvcnQgKi8KLSNpbmNsdWRlIDxjbWRfc2NzaS5oPgotI2luY2x1ZGUgPGNtZF9wY2kuaD4KLSNpbmNsdWRlIDxjbWRfbWlpLmg+Ci0jaW5jbHVkZSA8Y21kX2Rjci5oPgkJLyogNHh4IERDUiByZWdpc3RlciBhY2Nlc3MgKi8KLSNpbmNsdWRlIDxjbWRfZG9jLmg+Ci0jaW5jbHVkZSA8Y21kX25hbmQuaD4KLSNpbmNsdWRlIDxjbWRfamZmczIuaD4KLSNpbmNsdWRlIDxjbWRfZnBnYS5oPgotCi0jaW5jbHVkZSA8Y21kX2JzcC5oPgkJLyogYm9hcmQgc3BlY2lhbCBmdW5jdGlvbnMgKi8KLQotI2luY2x1ZGUgPGNtZF9iZWRidWcuaD4KLSNpbmNsdWRlIDxjbWRfZWxmLmg+Ci0KLSNpbmNsdWRlIDxjbWRfZHR0Lmg+Ci0KLSNpbmNsdWRlIDxjbWRfdmZkLmg+CQkvKiBsb2FkIGEgYml0bWFwIHRvIHRoZSBWRkRzIG9uIFRSQUIgKi8KLSNpbmNsdWRlIDxjbWRfbG9nLmg+Ci0jaW5jbHVkZSA8Y21kX2Zkb3MuaD4KLSNpbmNsdWRlIDxjbWRfYm1wLmg+Ci0jaW5jbHVkZSA8Y21kX3BvcnRpby5oPgotI2luY2x1ZGUgPGNtZF9tbWMuaD4KLSNpbmNsdWRlIDxjbWRfZmF0Lmg+Ci0KLSNpZmRlZiBDT05GSUdfQU1JR0FPTkVHM1NFCi0jaW5jbHVkZSA8Y21kX21lbnUuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdGEuaD4KLSNlbmRpZgotCi0vKgotICogSEVMUCBjb21tYW5kCi0gKi8KLSNkZWZpbmUJQ01EX1RCTF9IRUxQCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImhlbHAiLAkJMSwJQ0ZHX01BWEFSR1MsCTEsCWRvX2hlbHAsCQlcCi0JImhlbHAgICAgLSBwcmludCBvbmxpbmUgaGVscFxuIiwJCQkJCVwKLQkiW2NvbW1hbmQgLi4uXVxuIgkJCQkJCQlcCi0JIiAgICAtIHNob3cgaGVscCBpbmZvcm1hdGlvbiAoZm9yICdjb21tYW5kJylcbiIJCQkJXAotCSInaGVscCcgcHJpbnRzIG9ubGluZSBoZWxwIGZvciB0aGUgbW9uaXRvciBjb21tYW5kcy5cblxuIgkJXAotCSJXaXRob3V0IGFyZ3VtZW50cywgaXQgcHJpbnRzIGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSBmb3IgYWxsIGNvbW1hbmRzLlxuXG4iIFwKLQkiVG8gZ2V0IGRldGFpbGVkIGhlbHAgaW5mb3JtYXRpb24gZm9yIHNwZWNpZmljIGNvbW1hbmRzIHlvdSBjYW4gdHlwZVxuIglcCi0JIidoZWxwJyB3aXRoIG9uZSBvciBtb3JlIGNvbW1hbmQgbmFtZXMgYXMgYXJndW1lbnRzLlxuIgkJCVwKLSAgICApLAotCi0jZGVmaW5lCUNNRF9UQkxfUVVFUwlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSI/IiwJCTEsCUNGR19NQVhBUkdTLAkxLAlkb19oZWxwLAkJXAotCSI/ICAgICAgIC0gYWxpYXMgZm9yICdoZWxwJ1xuIiwJCQkJCQlcCi0JTlVMTAkJCQkJCQkJCVwKLSAgICApLAotCi0jZGVmaW5lIENNRF9UQkxfVkVSUwlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJ2ZXJzaW9uIiwJNCwJMSwJCTEsCWRvX3ZlcnNpb24sCQlcCi0JInZlcnNpb24gLSBwcmludCBtb25pdG9yIHZlcnNpb25cbiIsCQkJCQlcCi0JTlVMTAkJCQkJCQkJCVwKLSAgICApLAotCi0jZGVmaW5lIENNRF9UQkxfRUNITwlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJlY2hvIiwJCTQsCUNGR19NQVhBUkdTLAkxLAlkb19lY2hvLAkJXAotCSJlY2hvICAgIC0gZWNobyBhcmdzIHRvIGNvbnNvbGVcbiIsCQkJCQlcCi0JIlthcmdzLi5dXG4iCQkJCQkJCQlcCi0JIiAgICAtIGVjaG8gYXJncyB0byBjb25zb2xlOyBcXGMgc3VwcHJlc3NlcyBuZXdsaW5lXG4iCQkJXAotICAgICksCiAKIGludAogZG9fdmVyc2lvbiAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCkBAIC0xNTIsMzIgKzY1LDU5IEBACiAgKiBVc2UgcHV0cygpIGluc3RlYWQgb2YgcHJpbnRmKCkgdG8gYXZvaWQgcHJpbnRmIGJ1ZmZlciBvdmVyZmxvdwogICogZm9yIGxvbmcgaGVscCBtZXNzYWdlcwogICovCi1pbnQKLWRvX2hlbHAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoraW50IGRvX2hlbHAgKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAlpbnQgaTsKIAlpbnQgcmNvZGUgPSAwOwogCi0JaWYgKGFyZ2MgPT0gMSkgewkvKiBwcmludCBzaG9ydCBoZWxwICh1c2FnZSkgKi8KKwlpZiAoYXJnYyA9PSAxKSB7CS8qc2hvdyBsaXN0IG9mIGNvbW1hbmRzICovCiAKLQkJZm9yIChjbWR0cD0mY21kX3RibFswXTsgY21kdHAtPm5hbWU7IGNtZHRwKyspIHsKKwkJaW50IGNtZF9pdGVtcyA9ICgoKGludCkgJl9fdV9ib290X2NtZF9lbmQpIC0KKwkJCQkgKChpbnQpICZfX3VfYm9vdF9jbWRfc3RhcnQpKSAvCisJCQkJc2l6ZW9mICgqY21kdHApOworCQlpbnQgZW5kX3NvcnQ7CisJCWNtZF90YmxfdCAqY21kX2FycmF5WyhjbWRfaXRlbXMgKyAxKV07CisJCWludCBpOworCisJCS8qIE1ha2UgbGlzdCBvZiBjb21tYW5kcyBmcm9tIC51Ym9vdF9jbWQgc2VjdGlvbiAqLworCQljbWR0cCA9IChjbWRfdGJsX3QgKikgJiBfX3VfYm9vdF9jbWRfc3RhcnQ7CisJCWZvciAoaSA9IDE7IGkgPD0gY21kX2l0ZW1zOyBpKyspIHsKKwkJCWNtZF9hcnJheVtpXSA9IGNtZHRwOworCQkJY21kdHArKzsKKwkJfQorCQkvKiBTb3J0IGNvbW1hbmQgbGlzdCAqLworCQllbmRfc29ydCA9IDA7CisJCWZvciAoaSA9IDE7IGVuZF9zb3J0ICE9IDEgfHwgaSA8PSBjbWRfaXRlbXMgLSAxOyBpKyspIHsKKwkJCWlmIChpID09IGNtZF9pdGVtcykgewkvKiBMYXN0IGNvbW1hbmQgKi8KKwkJCQllbmRfc29ydCA9IDE7CisJCQkJaSA9IDE7CisJCQl9CisKKwkJCWlmIChzdHJjbXAgKGNtZF9hcnJheVtpXS0+bmFtZSwgY21kX2FycmF5W2kgKyAxXS0+bmFtZSkgPiAwKSB7CisJCQkJZW5kX3NvcnQgPSAwOworCQkJCSpjbWRfYXJyYXlbMF0gPSAqY21kX2FycmF5W2ldOworCQkJCSpjbWRfYXJyYXlbaV0gPSAqY21kX2FycmF5W2kgKyAxXTsKKwkJCQkqY21kX2FycmF5W2kgKyAxXSA9ICpjbWRfYXJyYXlbMF07CisJCQl9CisJCX0KKworCQkvKiBwcmludCBzaG9ydCBoZWxwICh1c2FnZSkgKi8KKwkJZm9yIChjbWR0cCA9IChjbWRfdGJsX3QgKikgJiBfX3VfYm9vdF9jbWRfc3RhcnQ7CisJCQkgY21kdHAgIT0gKGNtZF90YmxfdCAqKSAmIF9fdV9ib290X2NtZF9lbmQ7IGNtZHRwKyspIHsKIAkJCS8qIGFsbG93IHVzZXIgYWJvcnQgKi8KLQkJCWlmIChjdHJsYygpKQorCQkJaWYgKGN0cmxjICgpKQogCQkJCXJldHVybiAxOwotCiAJCQlpZiAoY21kdHAtPnVzYWdlID09IE5VTEwpCiAJCQkJY29udGludWU7CiAJCQlwdXRzIChjbWR0cC0+dXNhZ2UpOwogCQl9Ci0KIAkJcmV0dXJuIDA7CiAJfQotCiAJLyoKIAkgKiBjb21tYW5kIGhlbHAgKGxvbmcgdmVyc2lvbikKIAkgKi8KLQlmb3IgKGk9MTsgaTxhcmdjOyArK2kpIHsKLQkJaWYgKChjbWR0cCA9IGZpbmRfY21kKGFyZ3ZbaV0pKSAhPSBOVUxMKSB7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7ICsraSkgeworCQlpZiAoKGNtZHRwID0gZmluZF9jbWQgKGFyZ3ZbaV0pKSAhPSBOVUxMKSB7CiAjaWZkZWYJQ0ZHX0xPTkdIRUxQCiAJCQkvKiBmb3VuZCAtIHByaW50IChsb25nKSBoZWxwIGluZm8gKi8KIAkJCXB1dHMgKGNtZHRwLT5uYW1lKTsKQEAgLTE5NiwxNjQgKzEzNiw2NiBAQAogCQl9IGVsc2UgewogCQkJcHJpbnRmICgiVW5rbm93biBjb21tYW5kICclcycgLSB0cnkgJ2hlbHAnIgogCQkJCSIgd2l0aG91dCBhcmd1bWVudHMgZm9yIGxpc3Qgb2YgYWxsIgotCQkJCSIga25vd24gY29tbWFuZHNcblxuIiwKLQkJCQlhcmd2W2ldCi0JCQkpOworCQkJCSIga25vd24gY29tbWFuZHNcblxuIiwgYXJndltpXQorCQkJCQkpOwogCQkJcmNvZGUgPSAxOwogCQl9CiAJfQogCXJldHVybiByY29kZTsKIH0KIAorCitjbWRfdGJsX3QgVV9CT09UX0NNRChIRUxQKSA9IE1LX0NNRF9FTlRSWSgKKwkiaGVscCIsCUNGR19NQVhBUkdTLAkxLAlkb19oZWxwLAorIAkiaGVscCAgICAtIHByaW50IG9ubGluZSBoZWxwXG4iLAorIAkiW2NvbW1hbmQgLi4uXVxuIgorIAkiICAgIC0gc2hvdyBoZWxwIGluZm9ybWF0aW9uIChmb3IgJ2NvbW1hbmQnKVxuIgorIAkiJ2hlbHAnIHByaW50cyBvbmxpbmUgaGVscCBmb3IgdGhlIG1vbml0b3IgY29tbWFuZHMuXG5cbiIKKyAJIldpdGhvdXQgYXJndW1lbnRzLCBpdCBwcmludHMgYSBzaG9ydCB1c2FnZSBtZXNzYWdlIGZvciBhbGwgY29tbWFuZHMuXG5cbiIKKyAJIlRvIGdldCBkZXRhaWxlZCBoZWxwIGluZm9ybWF0aW9uIGZvciBzcGVjaWZpYyBjb21tYW5kcyB5b3UgY2FuIHR5cGVcbiIKKyAgIidoZWxwJyB3aXRoIG9uZSBvciBtb3JlIGNvbW1hbmQgbmFtZXMgYXMgYXJndW1lbnRzLlxuIgorKTsKKworY21kX3RibF90IFVfQk9PVF9DTUQoUVVFUykgPSBNS19DTURfRU5UUlkoCisJIj8iLAlDRkdfTUFYQVJHUywJMSwJZG9faGVscCwKKyAJIj8gICAgICAgLSBhbGlhcyBmb3IgJ2hlbHAnXG4iLAorCU5VTEwKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKFZFUlMpID0gTUtfQ01EX0VOVFJZKAorCSJ2ZXJzaW9uIiwJMSwJCTEsCWRvX3ZlcnNpb24sCisgCSJ2ZXJzaW9uIC0gcHJpbnQgbW9uaXRvciB2ZXJzaW9uXG4iLAorCU5VTEwKKyk7CisKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEVDSE8pID0gTUtfQ01EX0VOVFJZKAorCSJlY2hvIiwJQ0ZHX01BWEFSR1MsCTEsCWRvX2VjaG8sCisgCSJlY2hvICAgIC0gZWNobyBhcmdzIHRvIGNvbnNvbGVcbiIsCisgCSJbYXJncy4uXVxuIgorCSIgICAgLSBlY2hvIGFyZ3MgdG8gY29uc29sZTsgXFxjIHN1cHByZXNzZXMgbmV3bGluZVxuIgorKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZmluZCBjb21tYW5kIHRhYmxlIGVudHJ5IGZvciBhIGNvbW1hbmQKICAqLwotY21kX3RibF90ICpmaW5kX2NtZChjb25zdCBjaGFyICpjbWQpCitjbWRfdGJsX3QgKmZpbmRfY21kIChjb25zdCBjaGFyICpjbWQpCiB7CiAJY21kX3RibF90ICpjbWR0cDsKIAotCS8qIFNlYXJjaCBjb21tYW5kIHRhYmxlIC0gVXNlIGxpbmVhciBzZWFyY2ggLSBpdCdzIGEgc21hbGwgdGFibGUgKi8KLQlmb3IgKGNtZHRwID0gJmNtZF90YmxbMF07IGNtZHRwLT5uYW1lOyBjbWR0cCsrKSB7Ci0JCWlmIChzdHJuY21wIChjbWQsIGNtZHRwLT5uYW1lLCBjbWR0cC0+bG1pbikgPT0gMCkKKwljbWRfdGJsX3QgKmNtZHRwX3RlbXAgPSAmX191X2Jvb3RfY21kX3N0YXJ0OwkvKkluaXQgdmFsdWUgKi8KKwlpbnQgb25lX2NtZF9uYW1lID0gMDsKKworCWZvciAoY21kdHAgPSAmX191X2Jvb3RfY21kX3N0YXJ0OyBjbWR0cCAhPSAmX191X2Jvb3RfY21kX2VuZDsgY21kdHArKykgeworCQlpZiAoKHN0cm5jbXAgKGNtZCwgY21kdHAtPm5hbWUsIHN0cmxlbiAoY21kKSkgPT0gMCkgJiYKKwkJICAgIChzdHJsZW4gKGNtZCkgPT0gc3RybGVuIChjbWR0cC0+bmFtZSkpKQogCQkJcmV0dXJuIGNtZHRwOworCQllbHNlIGlmIChzdHJuY21wIChjbWQsIGNtZHRwLT5uYW1lLCBzdHJsZW4gKGNtZCkpID09IDApIHsKKwkJCWNtZHRwX3RlbXAgPSBjbWR0cDsKKwkJCW9uZV9jbWRfbmFtZSsrOworCQl9IGVsc2U7CiAJfQotCXJldHVybiBOVUxMOwkvKiBub3QgZm91bmQgKi8KKwlpZiAob25lX2NtZF9uYW1lID09IDEpCisJCXJldHVybiBjbWR0cF90ZW1wOworCisJcmV0dXJuIE5VTEw7CS8qIG5vdCBmb3VuZCB8fCBvbmVfY21kX25hbWUgPjIgKi8KIH0KLQotLyoKLSAqIFRoZSBjb21tYW5kcyBpbiB0aGlzIHRhYmxlIGFyZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgdGhlCi0gKiBjb21tYW5kIG5hbWUgYW5kIGluIGRlc2NlbmRpbmcgb3JkZXIgYnkgdGhlIGNvbW1hbmQgbmFtZSBzdHJpbmcKLSAqIGxlbmd0aC4gVGhpcyBpcyB0byBwcmV2ZW50IGNvbmZsaWN0cyBpbiBjb21tYW5kIG5hbWUgcGFyc2luZy4KLSAqIFBsZWFzZSBlbnN1cmUgdGhhdCBuZXcgY29tbWFuZHMgYXJlIGFkZGVkIGFjY29yZGluZyB0byB0aGF0IHJ1bGUuCi0gKiBQbGVhc2UgdXNlICQoVE9QRElSKS9kb2MvUkVBRE1FLmNvbW1hbmRzIGFzIGEgcmVmZXJlbmNlIEFORCBtYWtlCi0gKiBzdXJlIGl0IGdldHMgdXBkYXRlZC4KLSAqLwotCi1jbWRfdGJsX3QgY21kX3RibFtdID0gewotCUNNRF9UQkxfQVNLRU5WCi0JQ01EX1RCTF9BU00KLQlDTURfVEJMX0FVVE9TQ1JJUFQKLQlDTURfVEJMX0JBU0UKLQlDTURfVEJMX0JESU5GTwotCUNNRF9UQkxfQk1QCi0jaWZkZWYgQ09ORklHX0FNSUdBT05FRzNTRQotCUNNRF9UQkxfQk9PVEEKLSNlbmRpZgotCUNNRF9UQkxfQk9PVEVMRgotCUNNRF9UQkxfQk9PVE0KLQlDTURfVEJMX0JPT1RQCi0JQ01EX1RCTF9CT09UVlgKLQlDTURfVEJMX0JPT1RECi0JQ01EX1RCTF9CUkVBSwotCUNNRF9UQkxfQlJHSU5GTwotCUNNRF9UQkxfQ0FSSU5GTwotCUNNRF9UQkxfSkZGUzJfQ0hQQVJUCi0JQ01EX1RCTF9DTVAKLQlDTURfVEJMX0NPTklORk8KLQlDTURfVEJMX0NPTlRJTlVFCi0JQ01EX1RCTF9DUAotCUNNRF9UQkxfQ1JDCi0JQ01EX1RCTF9EQVRFCi0JQ01EX1RCTF9EQ0FDSEUKLQlDTURfVEJMX0RIQ1AKLQlDTURfVEJMX0RJQUcKLQlDTURfVEJMX0RJU0sKLQlDTURfVEJMX0RNQUlORk8KLQlDTURfVEJMX0RJUwotCUNNRF9UQkxfRE9DQk9PVAotCUNNRF9UQkxfRE9DCi0JQ01EX1RCTF9EVFQKLQlDTURfVEJMX0VDSE8KLQlDTURfVEJMX0VFUFJPTQotCUNNRF9UQkxfRkFUCi0JQ01EX1RCTF9GQ0NJTkZPCi0JQ01EX1RCTF9GTEVSQVNFCi0JQ01EX1RCTF9GREMKLSAgICAgICAgQ01EX1RCTF9GRE9TX0JPT1QKLSAgICAgICAgQ01EX1RCTF9GRE9TX0xTCi0JQ01EX1RCTF9GTElORk8KLQlDTURfVEJMX0ZQR0EKLQlDTURfVEJMX0pGRlMyX0ZTSU5GTwotCUNNRF9UQkxfSkZGUzJfRlNMT0FECi0JQ01EX1RCTF9HRVREQ1IKLQlDTURfVEJMX0dPCi0JQ01EX1RCTF9IRUxQCi0JQ01EX1RCTF9IV0ZMT1cKLQlDTURfVEJMX0kyQ0lORk8KLQlDTURfVEJMX0lDQUNIRQotI2lmZGVmIENPTkZJR184MjYwCi0JQ01EX1RCTF9JQ0lORk8KLSNlbmRpZgotCUNNRF9UQkxfSU1ECi0JQ01EX1RCTF9JTU0KLQlDTURfVEJMX0lOTQotCUNNRF9UQkxfSU1XCi0JQ01EX1RCTF9QT1JUSU9fSU4KLQlDTURfVEJMX0lDUkMKLQlDTURfVEJMX0lQUk9CRQotCUNNRF9UQkxfSUxPT1AKLQlDTURfVEJMX0lTRFJBTQotCUNNRF9UQkxfSURFCi0JQ01EX1RCTF9JTUlORk8KLQlDTURfVEJMX0lPUElORk8KLQlDTURfVEJMX0lPUFNFVAotCUNNRF9UQkxfSVJRSU5GTwotCUNNRF9UQkxfS0dEQgotCUNNRF9UQkxfTE9BREIKLQlDTURfVEJMX0xPQURTCi0JQ01EX1RCTF9MT0cKLQlDTURfVEJMX0xPT1AKLQlDTURfVEJMX0pGRlMyX0xTCi0JQ01EX1RCTF9NQ0NJTkZPCi0JQ01EX1RCTF9NTUMKLQlDTURfVEJMX01ECi0JQ01EX1RCTF9NRU1DSU5GTwotI2lmZGVmIENPTkZJR19BTUlHQU9ORUczU0UKLQlDTURfVEJMX01FTlUKLSNlbmRpZgotCUNNRF9UQkxfTUlJCi0JQ01EX1RCTF9NTQotCUNNRF9UQkxfTVRFU1QKLQlDTURfVEJMX01VWElORk8KLQlDTURfVEJMX01XCi0JQ01EX1RCTF9OQU5ECi0JQ01EX1RCTF9OQU5EQk9PVAotCUNNRF9UQkxfTkVYVAotCUNNRF9UQkxfTk0KLQlDTURfVEJMX1BJTkcKLQlDTURfVEJMX1BPUlRJT19PVVQKLQlDTURfVEJMX1BDSQotCUNNRF9UQkxfUFJJTlRFTlYKLQlDTURfVEJMX1BST1RFQ1QKLQlDTURfVEJMX1JBUlBCCi0JQ01EX1RCTF9SRFVNUAotCUNNRF9UQkxfUElOSVQKLQlDTURfVEJMX1JFR0lORk8KLQlDTURfVEJMX1JFU0VUCi0JQ01EX1RCTF9SVU4KLQlDTURfVEJMX1NBVkVFTlYKLQlDTURfVEJMX1NBVkVTCi0JQ01EX1RCTF9TQ0NJTkZPCi0JQ01EX1RCTF9TQ1NJQk9PVAotCUNNRF9UQkxfU0NTSQotCUNNRF9UQkxfU0VURENSCi0JQ01EX1RCTF9TRVRFTlYKLQlDTURfVEJMX1NJSU5GTwotCUNNRF9UQkxfU0lUSU5GTwotCUNNRF9UQkxfU0lVSU5GTwotCUNNRF9UQkxfTUlTQwkJLyogc2xlZXAgKi8KLQlDTURfVEJMX1NNQ0lORk8KLQlDTURfVEJMX1NQSUlORk8KLQlDTURfVEJMX1NQSQotCUNNRF9UQkxfU1RBQ0sKLQlDTURfVEJMX1NURVAKLQlDTURfVEJMX1RGVFBCCi0JQ01EX1RCTF9VU0JCT09UCi0JQ01EX1RCTF9VU0IKLQlDTURfVEJMX1ZFUlMKLQlDTURfVEJMX0JTUAotCUNNRF9UQkxfVkZECi0JQ01EX1RCTF9RVUVTCQkvKiBrZWVwIHRoaXMgKCJoZWxwIikgdGhlIGxhc3QgZW50cnkgKi8KLQkvKiB0aGUgZm9sbG93aW5nIGVudHJ5IHRlcm1pbmF0ZXMgdGhpcyB0YWJsZSAqLwotCU1LX0NNRF9UQkxfRU5UUlkoIE5VTEwsIDAsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwgKQotfTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9kbG1hbGxvYy5jIGIvY29tbW9uL2RsbWFsbG9jLmMKaW5kZXggOTI2MTUwNy4uMGMwNDg3MiAxMDA2NDQKLS0tIGEvY29tbW9uL2RsbWFsbG9jLmMKKysrIGIvY29tbW9uL2RsbWFsbG9jLmMKQEAgLTksOCArOSw4IEBACiAqIFZFUlNJT04gMi42LjYgIFN1biBNYXIgIDUgMTk6MTA6MDMgMjAwMCAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCiAKICAgIE5vdGU6IFRoZXJlIG1heSBiZSBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhpcyBtYWxsb2Mgb2J0YWluYWJsZSBhdAotICAgICAgICAgICBmdHA6Ly9nLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLmMKLSAgICAgICAgIENoZWNrIGJlZm9yZSBpbnN0YWxsaW5nIQorCSAgIGZ0cDovL2cub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYworCSBDaGVjayBiZWZvcmUgaW5zdGFsbGluZyEKIAogKiBXaHkgdXNlIHRoaXMgbWFsbG9jPwogCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICAgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbi4KIAogICBNaW5pbXVtIGFsbG9jYXRlZCBzaXplOiA0LWJ5dGUgcHRyczogIDE2IGJ5dGVzICAgIChpbmNsdWRpbmcgNCBvdmVyaGVhZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOC1ieXRlIHB0cnM6ICAyNC8zMiBieXRlcyAoaW5jbHVkaW5nLCA0Lzggb3ZlcmhlYWQpCisJCQkgIDgtYnl0ZSBwdHJzOiAgMjQvMzIgYnl0ZXMgKGluY2x1ZGluZywgNC84IG92ZXJoZWFkKQogCiAgICAgICAgV2hlbiBhIGNodW5rIGlzIGZyZWVkLCAxMiAoZm9yIDRieXRlIHB0cnMpIG9yIDIwIChmb3IgOCBieXRlCiAgICAgICAgcHRycyBidXQgNCBieXRlIHNpemUpIG9yIDI0IChmb3IgOC84KSBhZGRpdGlvbmFsIGJ5dGVzIGFyZQpAQCAtOTksNyArOTksNyBAQAogICAgICAgIHBvaW50ZXIgdG8gc29tZXRoaW5nIG9mIHRoZSBtaW5pbXVtIGFsbG9jYXRhYmxlIHNpemUuCiAKICAgTWF4aW11bSBhbGxvY2F0ZWQgc2l6ZTogNC1ieXRlIHNpemVfdDogMl4zMSAtICA4IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDgtYnl0ZSBzaXplX3Q6IDJeNjMgLSAxNiBieXRlcworCQkJICA4LWJ5dGUgc2l6ZV90OiAyXjYzIC0gMTYgYnl0ZXMKIAogICAgICAgIEl0IGlzIGFzc3VtZWQgdGhhdCAocG9zc2libHkgc2lnbmVkKSBzaXplX3QgYml0IHZhbHVlcyBzdWZmaWNlIHRvCiAgICAgICAgcmVwcmVzZW50IGNodW5rIHNpemVzLiBgUG9zc2libHkgc2lnbmVkJyBpcyBkdWUgdG8gdGhlIGZhY3QKQEAgLTExNSwxMSArMTE1LDExIEBACiAgICAgICAgbWFrZSB0aGUgbm9ybWFsIHdvcnN0LWNhc2Ugd2FzdGFnZSAxNSBieXRlcyAoaS5lLiwgdXAgdG8gMTUKICAgICAgICBtb3JlIGJ5dGVzIHdpbGwgYmUgYWxsb2NhdGVkIHRoYW4gd2VyZSByZXF1ZXN0ZWQgaW4gbWFsbG9jKSwgd2l0aAogICAgICAgIHR3byBleGNlcHRpb25zOgotICAgICAgICAgMS4gQmVjYXVzZSByZXF1ZXN0cyBmb3IgemVybyBieXRlcyBhbGxvY2F0ZSBub24temVybyBzcGFjZSwKLSAgICAgICAgICAgIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgZm9yIGEgcmVxdWVzdCBvZiB6ZXJvIGJ5dGVzIGlzIDI0IGJ5dGVzLgotICAgICAgICAgMi4gRm9yIHJlcXVlc3RzID49IG1tYXBfdGhyZXNob2xkIHRoYXQgYXJlIHNlcnZpY2VkIHZpYQotICAgICAgICAgICAgbW1hcCgpLCB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGlzIDggYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyCi0gICAgICAgICAgICBmcm9tIGEgc3lzdGVtIHBhZ2UgKHRoZSBtaW5pbWFsIG1tYXAgdW5pdCk7IHR5cGljYWxseSA0MDk2IGJ5dGVzLgorCSAxLiBCZWNhdXNlIHJlcXVlc3RzIGZvciB6ZXJvIGJ5dGVzIGFsbG9jYXRlIG5vbi16ZXJvIHNwYWNlLAorCSAgICB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGZvciBhIHJlcXVlc3Qgb2YgemVybyBieXRlcyBpcyAyNCBieXRlcy4KKwkgMi4gRm9yIHJlcXVlc3RzID49IG1tYXBfdGhyZXNob2xkIHRoYXQgYXJlIHNlcnZpY2VkIHZpYQorCSAgICBtbWFwKCksIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgaXMgOCBieXRlcyBwbHVzIHRoZSByZW1haW5kZXIKKwkgICAgZnJvbSBhIHN5c3RlbSBwYWdlICh0aGUgbWluaW1hbCBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBieXRlcy4KIAogKiBMaW1pdGF0aW9ucwogCkBAIC0zNzIsOCArMzcyLDggQEAKIHZvaWQqIG1lbWNweSh2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiAjZWxzZQogI2lmZGVmIFdJTjMyCi0vLyBPbiBXaW4zMiBwbGF0Zm9ybXMsICdtZW1zZXQoKScgYW5kICdtZW1jcHkoKScgYXJlIGFscmVhZHkgZGVjbGFyZWQgaW4KLS8vICd3aW5kb3dzLmgnCisvKiBPbiBXaW4zMiBwbGF0Zm9ybXMsICdtZW1zZXQoKScgYW5kICdtZW1jcHkoKScgYXJlIGFscmVhZHkgZGVjbGFyZWQgaW4gKi8KKy8qICd3aW5kb3dzLmgnICovCiAjZWxzZQogVm9pZF90KiBtZW1zZXQoKTsKIFZvaWRfdCogbWVtY3B5KCk7CkBAIC0zOTMsMTQgKzM5MywxNCBAQAogICBpZihtenN6IDw9IDkqc2l6ZW9mKG16c3opKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIElOVEVSTkFMX1NJWkVfVCogbXogPSAoSU5URVJOQUxfU0laRV9UKikgKGNoYXJwKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmKG16c3ogPj0gNSpzaXplb2YobXpzeikpIHsgICAgICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBpZihtenN6ID49IDcqc2l6ZW9mKG16c3opKSB7ICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmKG16c3ogPj0gOSpzaXplb2YobXpzeikpIHsgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16KysgPSAwOyB9fX0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16ICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZihtenN6ID49IDkqc2l6ZW9mKG16c3opKSB7ICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm16KysgPSAwOyB9fX0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm16ICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gZWxzZSBtZW1zZXQoKGNoYXJwKSwgMCwgbXpzeik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlKDApCiAKQEAgLTQxMSwxNCArNDExLDE0IEBACiAgICAgSU5URVJOQUxfU0laRV9UKiBtY3NyYyA9IChJTlRFUk5BTF9TSVpFX1QqKSAoc3JjKTsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgSU5URVJOQUxfU0laRV9UKiBtY2RzdCA9IChJTlRFUk5BTF9TSVpFX1QqKSAoZGVzdCk7ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYobWNzeiA+PSA1KnNpemVvZihtY3N6KSkgeyAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIGlmKG1jc3ogPj0gNypzaXplb2YobWNzeikpIHsgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYobWNzeiA+PSA5KnNpemVvZihtY3N6KSkgeyAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyB9fX0gICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QgICA9ICptY3NyYyAgOyAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAorCWlmKG1jc3ogPj0gOSpzaXplb2YobWNzeikpIHsgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyB9fX0gICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbWNkc3QgICA9ICptY3NyYyAgOyAgICAgICAgICAgICAgICAgICAgIFwKICAgfSBlbHNlIG1lbWNweShkZXN0LCBzcmMsIG1jc3opOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUoMCkKIApAQCAtNTU4LDcgKzU1OCw2IEBACiAjZW5kaWYKIAogCi0KIC8qCiAKICAgVGhpcyB2ZXJzaW9uIG9mIG1hbGxvYyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgU1ZJRC9YUEcgbWFsbGluZm8KQEAgLTYyMiw3ICs2MjEsNiBAQAogI2RlZmluZSBNX01NQVBfTUFYICAgICAgICAgIC00CiAKIAotCiAjaWZuZGVmIERFRkFVTFRfVFJJTV9USFJFU0hPTEQKICNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoMTI4ICogMTAyNCkKICNlbmRpZgpAQCAtNjg2LDExICs2ODQsMTEgQEAKICAgICAgIHJldGFpbiB3aGVuZXZlciBzYnJrIGlzIGNhbGxlZC4gSXQgaXMgdXNlZCBpbiB0d28gd2F5cyBpbnRlcm5hbGx5OgogCiAgICAgICAqIFdoZW4gc2JyayBpcyBjYWxsZWQgdG8gZXh0ZW5kIHRoZSB0b3Agb2YgdGhlIGFyZW5hIHRvIHNhdGlzZnkKLSAgICAgICAgYSBuZXcgbWFsbG9jIHJlcXVlc3QsIHRoaXMgbXVjaCBwYWRkaW5nIGlzIGFkZGVkIHRvIHRoZSBzYnJrCi0gICAgICAgIHJlcXVlc3QuCisJYSBuZXcgbWFsbG9jIHJlcXVlc3QsIHRoaXMgbXVjaCBwYWRkaW5nIGlzIGFkZGVkIHRvIHRoZSBzYnJrCisJcmVxdWVzdC4KIAogICAgICAgKiBXaGVuIG1hbGxvY190cmltIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGZyb20gZnJlZSgpLAotICAgICAgICBpdCBpcyB1c2VkIGFzIHRoZSBgcGFkJyBhcmd1bWVudC4KKwlpdCBpcyB1c2VkIGFzIHRoZSBgcGFkJyBhcmd1bWVudC4KIAogICAgICAgSW4gYm90aCBjYXNlcywgdGhlIGFjdHVhbCBhbW91bnQgb2YgcGFkZGluZyBpcyByb3VuZGVkCiAgICAgICBzbyB0aGF0IHRoZSBlbmQgb2YgdGhlIGFyZW5hIGlzIGFsd2F5cyBhIHN5c3RlbSBwYWdlIGJvdW5kYXJ5LgpAQCAtNzM2LDE1ICs3MzQsMTUgQEAKIAogICAgICAgSG93ZXZlciwgaXQgaGFzIHRoZSBkaXNhZHZhbnRhZ2VzIHRoYXQ6CiAKLSAgICAgICAgIDEuIFRoZSBzcGFjZSBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuCi0gICAgICAgICAgICB1c2VkIHRvIHNlcnZpY2UgbGF0ZXIgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1bmtzLgotICAgICAgICAgMi4gSXQgY2FuIGxlYWQgdG8gbW9yZSB3YXN0YWdlIGJlY2F1c2Ugb2YgbW1hcCBwYWdlIGFsaWdubWVudAotICAgICAgICAgICAgcmVxdWlyZW1lbnRzCi0gICAgICAgICAzLiBJdCBjYXVzZXMgbWFsbG9jIHBlcmZvcm1hbmNlIHRvIGJlIG1vcmUgZGVwZW5kZW50IG9uIGhvc3QKLSAgICAgICAgICAgIHN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudCBzdXBwb3J0IHJvdXRpbmVzIHdoaWNoIG1heSB2YXJ5IGluCi0gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBxdWFsaXR5IGFuZCBtYXkgaW1wb3NlIGFyYml0cmFyeQotICAgICAgICAgICAgbGltaXRhdGlvbnMuIEdlbmVyYWxseSwgc2VydmljaW5nIGEgcmVxdWVzdCB2aWEgbm9ybWFsCi0gICAgICAgICAgICBtYWxsb2Mgc3RlcHMgaXMgZmFzdGVyIHRoYW4gZ29pbmcgdGhyb3VnaCBhIHN5c3RlbSdzIG1tYXAuCisJIDEuIFRoZSBzcGFjZSBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuCisJICAgIHVzZWQgdG8gc2VydmljZSBsYXRlciByZXF1ZXN0cywgYXMgaGFwcGVucyB3aXRoIG5vcm1hbCBjaHVua3MuCisJIDIuIEl0IGNhbiBsZWFkIHRvIG1vcmUgd2FzdGFnZSBiZWNhdXNlIG9mIG1tYXAgcGFnZSBhbGlnbm1lbnQKKwkgICAgcmVxdWlyZW1lbnRzCisJIDMuIEl0IGNhdXNlcyBtYWxsb2MgcGVyZm9ybWFuY2UgdG8gYmUgbW9yZSBkZXBlbmRlbnQgb24gaG9zdAorCSAgICBzeXN0ZW0gbWVtb3J5IG1hbmFnZW1lbnQgc3VwcG9ydCByb3V0aW5lcyB3aGljaCBtYXkgdmFyeSBpbgorCSAgICBpbXBsZW1lbnRhdGlvbiBxdWFsaXR5IGFuZCBtYXkgaW1wb3NlIGFyYml0cmFyeQorCSAgICBsaW1pdGF0aW9ucy4gR2VuZXJhbGx5LCBzZXJ2aWNpbmcgYSByZXF1ZXN0IHZpYSBub3JtYWwKKwkgICAgbWFsbG9jIHN0ZXBzIGlzIGZhc3RlciB0aGFuIGdvaW5nIHRocm91Z2ggYSBzeXN0ZW0ncyBtbWFwLgogCiAgICAgICBBbGwgdG9nZXRoZXIsIHRoZXNlIGNvbnNpZGVyYXRpb25zIHNob3VsZCBsZWFkIHlvdSB0byB1c2UgbW1hcAogICAgICAgb25seSBmb3IgcmVsYXRpdmVseSBsYXJnZSByZXF1ZXN0cy4KQEAgLTc1Myw3ICs3NTEsNiBAQAogKi8KIAogCi0KICNpZm5kZWYgREVGQVVMVF9NTUFQX01BWAogI2lmIEhBVkVfTU1BUAogI2RlZmluZSBERUZBVUxUX01NQVBfTUFYICAgICAgICg2NCkKQEAgLTc2NiwxNSArNzYzLDE1IEBACiAgICAgTV9NTUFQX01BWCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgdG8gc2ltdWx0YW5lb3VzbHkKICAgICAgIHNlcnZpY2UgdXNpbmcgbW1hcC4gVGhpcyBwYXJhbWV0ZXIgZXhpc3RzIGJlY2F1c2U6CiAKLSAgICAgICAgIDEuIFNvbWUgc3lzdGVtcyBoYXZlIGEgbGltaXRlZCBudW1iZXIgb2YgaW50ZXJuYWwgdGFibGVzIGZvcgotICAgICAgICAgICAgdXNlIGJ5IG1tYXAuCi0gICAgICAgICAyLiBJbiBtb3N0IHN5c3RlbXMsIG92ZXJyZWxpYW5jZSBvbiBtbWFwIGNhbiBkZWdyYWRlIG92ZXJhbGwKLSAgICAgICAgICAgIHBlcmZvcm1hbmNlLgotICAgICAgICAgMy4gSWYgYSBwcm9ncmFtIGFsbG9jYXRlcyBtYW55IGxhcmdlIHJlZ2lvbnMsIGl0IGlzIHByb2JhYmx5Ci0gICAgICAgICAgICBiZXR0ZXIgb2ZmIHVzaW5nIG5vcm1hbCBzYnJrLWJhc2VkIGFsbG9jYXRpb24gcm91dGluZXMgdGhhdAotICAgICAgICAgICAgY2FuIHJlY2xhaW0gYW5kIHJlYWxsb2NhdGUgbm9ybWFsIGhlYXAgbWVtb3J5LiBVc2luZyBhCi0gICAgICAgICAgICBzbWFsbCB2YWx1ZSBhbGxvd3MgdHJhbnNpdGlvbiBpbnRvIHRoaXMgbW9kZSBhZnRlciB0aGUKLSAgICAgICAgICAgIGZpcnN0IGZldyBhbGxvY2F0aW9ucy4KKwkgMS4gU29tZSBzeXN0ZW1zIGhhdmUgYSBsaW1pdGVkIG51bWJlciBvZiBpbnRlcm5hbCB0YWJsZXMgZm9yCisJICAgIHVzZSBieSBtbWFwLgorCSAyLiBJbiBtb3N0IHN5c3RlbXMsIG92ZXJyZWxpYW5jZSBvbiBtbWFwIGNhbiBkZWdyYWRlIG92ZXJhbGwKKwkgICAgcGVyZm9ybWFuY2UuCisJIDMuIElmIGEgcHJvZ3JhbSBhbGxvY2F0ZXMgbWFueSBsYXJnZSByZWdpb25zLCBpdCBpcyBwcm9iYWJseQorCSAgICBiZXR0ZXIgb2ZmIHVzaW5nIG5vcm1hbCBzYnJrLWJhc2VkIGFsbG9jYXRpb24gcm91dGluZXMgdGhhdAorCSAgICBjYW4gcmVjbGFpbSBhbmQgcmVhbGxvY2F0ZSBub3JtYWwgaGVhcCBtZW1vcnkuIFVzaW5nIGEKKwkgICAgc21hbGwgdmFsdWUgYWxsb3dzIHRyYW5zaXRpb24gaW50byB0aGlzIG1vZGUgYWZ0ZXIgdGhlCisJICAgIGZpcnN0IGZldyBhbGxvY2F0aW9ucy4KIAogICAgICAgU2V0dGluZyB0byAwIGRpc2FibGVzIGFsbCB1c2Ugb2YgbW1hcC4gIElmIEhBVkVfTU1BUCBpcyBub3Qgc2V0LAogICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMCwgYW5kIGF0dGVtcHRzIHRvIHNldCBpdCB0byBub24temVybyB2YWx1ZXMKQEAgLTc4Miw4ICs3NzksNiBAQAogKi8KIAogCi0KLQogLyoKICAgICBVU0VfRExfUFJFRklYIHdpbGwgcHJlZml4IGFsbCBwdWJsaWMgcm91dGluZXMgd2l0aCB0aGUgc3RyaW5nICdkbCcuCiAgICAgICBVc2VmdWwgdG8gcXVpY2tseSBhdm9pZCBwcm9jZWR1cmUgZGVjbGFyYXRpb24gY29uZmxpY3RzIGFuZCBsaW5rZXIKQEAgLTc5NCw4ICs3ODksNiBAQAogLyogI2RlZmluZSBVU0VfRExfUFJFRklYICovCiAKIAotCi0KIC8qCiAKICAgU3BlY2lhbCBkZWZpbmVzIGZvciBsaW51eCBsaWJjCkBAIC0xMDEzLDcgKzEwMDYsNyBAQAogCQlydmFsID0gVmlydHVhbEZyZWUgKCh2b2lkKilnQWRkcmVzc0Jhc2UsCiAJCQkJCQkJZ05leHRBZGRyZXNzIC0gZ0FkZHJlc3NCYXNlLAogCQkJCQkJCU1FTV9ERUNPTU1JVCk7Ci0gICAgICAgIGFzc2VydCAocnZhbCk7CisJYXNzZXJ0IChydmFsKTsKIAl9CiAJd2hpbGUgKGhlYWQpCiAJewpAQCAtMTAzOCwyNCArMTAzMSwyNCBAQAogCQkJcmV0dXJuIHN0YXJ0X2FkZHJlc3M7CiAJCWVsc2UKIAkJewotCQkJLy8gUmVxdWVzdGVkIHJlZ2lvbiBpcyBub3QgYXZhaWxhYmxlIHNvIHNlZSBpZiB0aGUKLQkJCS8vIG5leHQgcmVnaW9uIGlzIGF2YWlsYWJsZS4gIFNldCAnc3RhcnRfYWRkcmVzcycKLQkJCS8vIHRvIHRoZSBuZXh0IHJlZ2lvbiBhbmQgY2FsbCAnVmlydHVhbFF1ZXJ5KCknCi0JCQkvLyBhZ2Fpbi4KKwkJCS8qIFJlcXVlc3RlZCByZWdpb24gaXMgbm90IGF2YWlsYWJsZSBzbyBzZWUgaWYgdGhlICovCisJCQkvKiBuZXh0IHJlZ2lvbiBpcyBhdmFpbGFibGUuICBTZXQgJ3N0YXJ0X2FkZHJlc3MnICovCisJCQkvKiB0byB0aGUgbmV4dCByZWdpb24gYW5kIGNhbGwgJ1ZpcnR1YWxRdWVyeSgpJyAqLworCQkJLyogYWdhaW4uICovCiAKIAkJCXN0YXJ0X2FkZHJlc3MgPSAoY2hhciopaW5mby5CYXNlQWRkcmVzcyArIGluZm8uUmVnaW9uU2l6ZTsKIAotCQkJLy8gTWFrZSBzdXJlIHdlIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSBuZXh0IHJlZ2lvbgotCQkJLy8gb24gdGhlICpuZXh0KiA2NEsgYm91bmRhcnkuICBPdGhlcndpc2UsIGV2ZW4gaWYKLQkJCS8vIHRoZSBuZXcgcmVnaW9uIGlzIGZyZWUgYWNjb3JkaW5nIHRvCi0JCQkvLyAnVmlydHVhbFF1ZXJ5KCknLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvCi0JCQkvLyAnVmlydHVhbEFsbG9jKCknICh3aGljaCBmb2xsb3dzIHRoZSBjYWxsIHRvCi0JCQkvLyB0aGlzIHJvdXRpbmUgaW4gJ3dzYnJrKCknKSB3aWxsIHJvdW5kICpkb3duKgotCQkJLy8gdGhlIHJlcXVlc3RlZCBhZGRyZXNzIHRvIGEgNjRLIGJvdW5kYXJ5IHdoaWNoCi0JCQkvLyB3ZSBhbHJlYWR5IGtub3cgaXMgYW4gYWRkcmVzcyBpbiB0aGUKLQkJCS8vIHVuYXZhaWxhYmxlIHJlZ2lvbi4gIFRodXMsIHRoZSBzdWJzZXF1ZW50IGNhbGwKLQkJCS8vIHRvICdWaXJ0dWFsQWxsb2MoKScgd2lsbCBmYWlsIGFuZCBicmluZyB1cyBiYWNrCi0JCQkvLyBoZXJlLCBjYXVzaW5nIHVzIHRvIGdvIGludG8gYW4gaW5maW5pdGUgbG9vcC4KKwkJCS8qIE1ha2Ugc3VyZSB3ZSBzdGFydCBsb29raW5nIGZvciB0aGUgbmV4dCByZWdpb24gKi8KKwkJCS8qIG9uIHRoZSAqbmV4dCogNjRLIGJvdW5kYXJ5LiAgT3RoZXJ3aXNlLCBldmVuIGlmICovCisJCQkvKiB0aGUgbmV3IHJlZ2lvbiBpcyBmcmVlIGFjY29yZGluZyB0byAqLworCQkJLyogJ1ZpcnR1YWxRdWVyeSgpJywgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byAqLworCQkJLyogJ1ZpcnR1YWxBbGxvYygpJyAod2hpY2ggZm9sbG93cyB0aGUgY2FsbCB0byAqLworCQkJLyogdGhpcyByb3V0aW5lIGluICd3c2JyaygpJykgd2lsbCByb3VuZCAqZG93biogKi8KKwkJCS8qIHRoZSByZXF1ZXN0ZWQgYWRkcmVzcyB0byBhIDY0SyBib3VuZGFyeSB3aGljaCAqLworCQkJLyogd2UgYWxyZWFkeSBrbm93IGlzIGFuIGFkZHJlc3MgaW4gdGhlICovCisJCQkvKiB1bmF2YWlsYWJsZSByZWdpb24uICBUaHVzLCB0aGUgc3Vic2VxdWVudCBjYWxsICovCisJCQkvKiB0byAnVmlydHVhbEFsbG9jKCknIHdpbGwgZmFpbCBhbmQgYnJpbmcgdXMgYmFjayAqLworCQkJLyogaGVyZSwgY2F1c2luZyB1cyB0byBnbyBpbnRvIGFuIGluZmluaXRlIGxvb3AuICovCiAKIAkJCXN0YXJ0X2FkZHJlc3MgPQogCQkJCSh2b2lkICopIEFsaWduUGFnZTY0SygodW5zaWduZWQgbG9uZykgc3RhcnRfYWRkcmVzcyk7CkBAIC0xMDkyLDkgKzEwODUsOSBAQAogCQkJCWdBZGRyZXNzQmFzZSA9IGdOZXh0QWRkcmVzcyA9CiAJCQkJCSh1bnNpZ25lZCBpbnQpVmlydHVhbEFsbG9jIChuZXdfYWRkcmVzcywgbmV3X3NpemUsCiAJCQkJCQkJCQkJCQlNRU1fUkVTRVJWRSwgUEFHRV9OT0FDQ0VTUyk7Ci0JCQkJLy8gcmVwZWF0IGluIGNhc2Ugb2YgcmFjZSBjb25kaXRpb24KLQkJCQkvLyBUaGUgcmVnaW9uIHRoYXQgd2UgZm91bmQgaGFzIGJlZW4gc25hZ2dlZAotCQkJCS8vIGJ5IGFub3RoZXIgdGhyZWFkCisJCQkJLyogcmVwZWF0IGluIGNhc2Ugb2YgcmFjZSBjb25kaXRpb24gKi8KKwkJCQkvKiBUaGUgcmVnaW9uIHRoYXQgd2UgZm91bmQgaGFzIGJlZW4gc25hZ2dlZCAqLworCQkJCS8qIGJ5IGFub3RoZXIgdGhyZWFkICovCiAJCQl9CiAJCQl3aGlsZSAoZ0FkZHJlc3NCYXNlID09IDApOwogCkBAIC0xMTgyLDE3ICsxMTc1LDE3IEBACiAKIAogICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuaywgaWYgYWxsb2NhdGVkICAgICAgICAgICAgfCB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICB8UHwKKwkgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rLCBpZiBhbGxvY2F0ZWQgICAgICAgICAgICB8IHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICB8UHwKICAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIFVzZXIgZGF0YSBzdGFydHMgaGVyZS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLgotICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIC4gICAgICAgICAgICAgKG1hbGxvY191c2FibGVfc3BhY2UoKSBieXRlcykgICAgICAgICAgICAgICAgICAgICAuCi0gICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICB8ICAgICAgICAgICAgIFVzZXIgZGF0YSBzdGFydHMgaGVyZS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgIChtYWxsb2NfdXNhYmxlX3NwYWNlKCkgYnl0ZXMpICAgICAgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwogCiAKICAgICBXaGVyZSAiY2h1bmsiIGlzIHRoZSBmcm9udCBvZiB0aGUgY2h1bmsgZm9yIHRoZSBwdXJwb3NlIG9mIG1vc3Qgb2YKQEAgLTEyMDYsMjAgKzExOTksMjAgQEAKICAgICBGcmVlIGNodW5rcyBhcmUgc3RvcmVkIGluIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdHMsIGFuZCBsb29rIGxpa2UgdGhpczoKIAogICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwogICAgIGBoZWFkOicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICB8UHwKICAgICAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIGluIGxpc3QgICAgICAgICAgICAgfAotICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgQmFjayBwb2ludGVyIHRvIHByZXZpb3VzIGNodW5rIGluIGxpc3QgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBVbnVzZWQgc3BhY2UgKG1heSBiZSAwIGJ5dGVzIGxvbmcpICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCi0gICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIGluIGxpc3QgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKICAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwogCiAgICAgVGhlIFAgKFBSRVZfSU5VU0UpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgbG93LW9yZGVyIGJpdCBvZiB0aGUKICAgICBjaHVuayBzaXplICh3aGljaCBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiB0d28gd29yZHMpLCBpcyBhbiBpbi11c2UKQEAgLTEyMzYsMTYgKzEyMjksMTYgQEAKICAgICBUaGUgdHdvIGV4Y2VwdGlvbnMgdG8gYWxsIHRoaXMgYXJlCiAKICAgICAgMS4gVGhlIHNwZWNpYWwgY2h1bmsgYHRvcCcsIHdoaWNoIGRvZXNuJ3QgYm90aGVyIHVzaW5nIHRoZQotICAgICAgICB0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vCi0gICAgICAgIG5leHQgY29udGlndW91cyBjaHVuayB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiAoQWZ0ZXIKLSAgICAgICAgaW5pdGlhbGl6YXRpb24sIGB0b3AnIGlzIGZvcmNlZCB0byBhbHdheXMgZXhpc3QuICBJZiBpdCB3b3VsZAotICAgICAgICBiZWNvbWUgbGVzcyB0aGFuIE1JTlNJWkUgYnl0ZXMgbG9uZywgaXQgaXMgcmVwbGVuaXNoZWQgdmlhCi0gICAgICAgIG1hbGxvY19leHRlbmRfdG9wLikKKwl0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vCisJbmV4dCBjb250aWd1b3VzIGNodW5rIHRoYXQgd291bGQgaGF2ZSB0byBpbmRleCBvZmYgaXQuIChBZnRlcgorCWluaXRpYWxpemF0aW9uLCBgdG9wJyBpcyBmb3JjZWQgdG8gYWx3YXlzIGV4aXN0LiAgSWYgaXQgd291bGQKKwliZWNvbWUgbGVzcyB0aGFuIE1JTlNJWkUgYnl0ZXMgbG9uZywgaXQgaXMgcmVwbGVuaXNoZWQgdmlhCisJbWFsbG9jX2V4dGVuZF90b3AuKQogCiAgICAgIDIuIENodW5rcyBhbGxvY2F0ZWQgdmlhIG1tYXAsIHdoaWNoIGhhdmUgdGhlIHNlY29uZC1sb3dlc3Qtb3JkZXIKLSAgICAgICAgYml0IChJU19NTUFQUEVEKSBzZXQgaW4gdGhlaXIgc2l6ZSBmaWVsZHMuICBCZWNhdXNlIHRoZXkgYXJlCi0gICAgICAgIG5ldmVyIG1lcmdlZCBvciB0cmF2ZXJzZWQgZnJvbSBhbnkgb3RoZXIgY2h1bmssIHRoZXkgaGF2ZSBubwotICAgICAgICBmb290IHNpemUgb3IgaW51c2UgaW5mb3JtYXRpb24uCisJYml0IChJU19NTUFQUEVEKSBzZXQgaW4gdGhlaXIgc2l6ZSBmaWVsZHMuICBCZWNhdXNlIHRoZXkgYXJlCisJbmV2ZXIgbWVyZ2VkIG9yIHRyYXZlcnNlZCBmcm9tIGFueSBvdGhlciBjaHVuaywgdGhleSBoYXZlIG5vCisJZm9vdCBzaXplIG9yIGludXNlIGluZm9ybWF0aW9uLgogCiAgICAgQXZhaWxhYmxlIGNodW5rcyBhcmUga2VwdCBpbiBhbnkgb2Ygc2V2ZXJhbCBwbGFjZXMgKGFsbCBkZWNsYXJlZCBiZWxvdyk6CiAKQEAgLTEyODYsMTIgKzEyNzksNyBAQAogICAgICAgIHNlcnZpY2VkIHZpYSBjYWxscyB0byBtbWFwLCBhbmQgdGhlbiBsYXRlciByZWxlYXNlZCB2aWEgbXVubWFwLgogCiAqLwotCi0KLQogDAotCi0KIC8qICBzaXplcywgYWxpZ25tZW50cyAqLwogCiAjZGVmaW5lIFNJWkVfU1ogICAgICAgICAgICAgICAgKHNpemVvZihJTlRFUk5BTF9TSVpFX1QpKQpAQCAtMTUzMSw3ICsxNTE5LDcgQEAKICAoKCgodW5zaWduZWQgbG9uZykoc3opKSA+PiA5KSA8PSAgIDg0KSA/IDExMCArICgoKHVuc2lnbmVkIGxvbmcpKHN6KSkgPj4gMTIpOiBcCiAgKCgoKHVuc2lnbmVkIGxvbmcpKHN6KSkgPj4gOSkgPD0gIDM0MCkgPyAxMTkgKyAoKCh1bnNpZ25lZCBsb25nKShzeikpID4+IDE1KTogXAogICgoKCh1bnNpZ25lZCBsb25nKShzeikpID4+IDkpIDw9IDEzNjQpID8gMTI0ICsgKCgodW5zaWduZWQgbG9uZykoc3opKSA+PiAxOCk6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNikKKwkJCQkJICAxMjYpCiAvKgogICBiaW5zIGZvciBjaHVua3MgPCA1MTIgYXJlIGFsbCBzcGFjZWQgOCBieXRlcyBhcGFydCwgYW5kIGhvbGQKICAgaWRlbnRpY2FsbHkgc2l6ZWQgY2h1bmtzLiBUaGlzIGlzIGV4cGxvaXRlZCBpbiBtYWxsb2MuCkBAIC0xODI5LDcgKzE4MTcsNiBAQAogICAobGFzdF9yZW1haW5kZXItPmZkID0gbGFzdF9yZW1haW5kZXItPmJrID0gbGFzdF9yZW1haW5kZXIpCiAKIAotCiAMCiAKIApAQCAtMjAzMCw3ICsyMDE3LDcgQEAKICAgICAvKiBHdWFyYW50ZWUgdGhlIG5leHQgYnJrIHdpbGwgYmUgYXQgYSBwYWdlIGJvdW5kYXJ5ICovCiAKICAgICBjb3JyZWN0aW9uICs9ICgoKCh1bnNpZ25lZCBsb25nKShicmsgKyBzYnJrX3NpemUpKSsocGFnZXN6LTEpKSAmCi0gICAgICAgICAgICAgICAgICAgfihwYWdlc3ogLSAxKSkgLSAoKHVuc2lnbmVkIGxvbmcpKGJyayArIHNicmtfc2l6ZSkpOworCQkgICB+KHBhZ2VzeiAtIDEpKSAtICgodW5zaWduZWQgbG9uZykoYnJrICsgc2Jya19zaXplKSk7CiAKICAgICAvKiBBbGxvY2F0ZSBjb3JyZWN0aW9uICovCiAgICAgbmV3X2JyayA9IChjaGFyKikoTU9SRUNPUkUgKGNvcnJlY3Rpb24pKTsKQEAgLTIwNTEsMjAgKzIwMzgsMjAgQEAKICAgICAgIC8qIElmIG5vdCBlbm91Z2ggc3BhY2UgdG8gZG8gdGhpcywgdGhlbiB1c2VyIGRpZCBzb21ldGhpbmcgdmVyeSB3cm9uZyAqLwogICAgICAgaWYgKG9sZF90b3Bfc2l6ZSA8IE1JTlNJWkUpCiAgICAgICB7Ci0gICAgICAgIHNldF9oZWFkKHRvcCwgUFJFVl9JTlVTRSk7IC8qIHdpbGwgZm9yY2UgbnVsbCByZXR1cm4gZnJvbSBtYWxsb2MgKi8KLSAgICAgICAgcmV0dXJuOworCXNldF9oZWFkKHRvcCwgUFJFVl9JTlVTRSk7IC8qIHdpbGwgZm9yY2UgbnVsbCByZXR1cm4gZnJvbSBtYWxsb2MgKi8KKwlyZXR1cm47CiAgICAgICB9CiAKICAgICAgIC8qIEFsc28ga2VlcCBzaXplIGEgbXVsdGlwbGUgb2YgTUFMTE9DX0FMSUdOTUVOVCAqLwogICAgICAgb2xkX3RvcF9zaXplID0gKG9sZF90b3Bfc2l6ZSAtIDMqU0laRV9TWikgJiB+TUFMTE9DX0FMSUdOX01BU0s7CiAgICAgICBzZXRfaGVhZF9zaXplKG9sZF90b3AsIG9sZF90b3Bfc2l6ZSk7CiAgICAgICBjaHVua19hdF9vZmZzZXQob2xkX3RvcCwgb2xkX3RvcF9zaXplICAgICAgICAgICktPnNpemUgPQotICAgICAgICBTSVpFX1NafFBSRVZfSU5VU0U7CisJU0laRV9TWnxQUkVWX0lOVVNFOwogICAgICAgY2h1bmtfYXRfb2Zmc2V0KG9sZF90b3AsIG9sZF90b3Bfc2l6ZSArIFNJWkVfU1opLT5zaXplID0KLSAgICAgICAgU0laRV9TWnxQUkVWX0lOVVNFOworCVNJWkVfU1p8UFJFVl9JTlVTRTsKICAgICAgIC8qIElmIHBvc3NpYmxlLCByZWxlYXNlIHRoZSByZXN0LiAqLwogICAgICAgaWYgKG9sZF90b3Bfc2l6ZSA+PSBNSU5TSVpFKQotICAgICAgICBmUkVlKGNodW5rMm1lbShvbGRfdG9wKSk7CisJZlJFZShjaHVuazJtZW0ob2xkX3RvcCkpOwogICAgIH0KICAgfQogCkBAIC0yMDk1LDQzICsyMDgyLDQzIEBACiAgICAgRnJvbSB0aGVyZSwgdGhlIGZpcnN0IHN1Y2Nlc3NmdWwgb2YgdGhlIGZvbGxvd2luZyBzdGVwcyBpcyB0YWtlbjoKIAogICAgICAgMS4gVGhlIGJpbiBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXF1ZXN0IHNpemUgaXMgc2Nhbm5lZCwgYW5kIGlmCi0gICAgICAgICBhIGNodW5rIG9mIGV4YWN0bHkgdGhlIHJpZ2h0IHNpemUgaXMgZm91bmQsIGl0IGlzIHRha2VuLgorCSBhIGNodW5rIG9mIGV4YWN0bHkgdGhlIHJpZ2h0IHNpemUgaXMgZm91bmQsIGl0IGlzIHRha2VuLgogCiAgICAgICAyLiBUaGUgbW9zdCByZWNlbnRseSByZW1haW5kZXJlZCBjaHVuayBpcyB1c2VkIGlmIGl0IGlzIGJpZwotICAgICAgICAgZW5vdWdoLiAgVGhpcyBpcyBhIGZvcm0gb2YgKHJvdmluZykgZmlyc3QgZml0LCB1c2VkIG9ubHkgaW4KLSAgICAgICAgIHRoZSBhYnNlbmNlIG9mIGV4YWN0IGZpdHMuIFJ1bnMgb2YgY29uc2VjdXRpdmUgcmVxdWVzdHMgdXNlCi0gICAgICAgICB0aGUgcmVtYWluZGVyIG9mIHRoZSBjaHVuayB1c2VkIGZvciB0aGUgcHJldmlvdXMgc3VjaCByZXF1ZXN0Ci0gICAgICAgICB3aGVuZXZlciBwb3NzaWJsZS4gVGhpcyBsaW1pdGVkIHVzZSBvZiBhIGZpcnN0LWZpdCBzdHlsZQotICAgICAgICAgYWxsb2NhdGlvbiBzdHJhdGVneSB0ZW5kcyB0byBnaXZlIGNvbnRpZ3VvdXMgY2h1bmtzCi0gICAgICAgICBjb2V4dGVuc2l2ZSBsaWZldGltZXMsIHdoaWNoIGltcHJvdmVzIGxvY2FsaXR5IGFuZCBjYW4gcmVkdWNlCi0gICAgICAgICBmcmFnbWVudGF0aW9uIGluIHRoZSBsb25nIHJ1bi4KKwkgZW5vdWdoLiAgVGhpcyBpcyBhIGZvcm0gb2YgKHJvdmluZykgZmlyc3QgZml0LCB1c2VkIG9ubHkgaW4KKwkgdGhlIGFic2VuY2Ugb2YgZXhhY3QgZml0cy4gUnVucyBvZiBjb25zZWN1dGl2ZSByZXF1ZXN0cyB1c2UKKwkgdGhlIHJlbWFpbmRlciBvZiB0aGUgY2h1bmsgdXNlZCBmb3IgdGhlIHByZXZpb3VzIHN1Y2ggcmVxdWVzdAorCSB3aGVuZXZlciBwb3NzaWJsZS4gVGhpcyBsaW1pdGVkIHVzZSBvZiBhIGZpcnN0LWZpdCBzdHlsZQorCSBhbGxvY2F0aW9uIHN0cmF0ZWd5IHRlbmRzIHRvIGdpdmUgY29udGlndW91cyBjaHVua3MKKwkgY29leHRlbnNpdmUgbGlmZXRpbWVzLCB3aGljaCBpbXByb3ZlcyBsb2NhbGl0eSBhbmQgY2FuIHJlZHVjZQorCSBmcmFnbWVudGF0aW9uIGluIHRoZSBsb25nIHJ1bi4KIAogICAgICAgMy4gT3RoZXIgYmlucyBhcmUgc2Nhbm5lZCBpbiBpbmNyZWFzaW5nIHNpemUgb3JkZXIsIHVzaW5nIGEKLSAgICAgICAgIGNodW5rIGJpZyBlbm91Z2ggdG8gZnVsZmlsbCB0aGUgcmVxdWVzdCwgYW5kIHNwbGl0dGluZyBvZmYKLSAgICAgICAgIGFueSByZW1haW5kZXIuICBUaGlzIHNlYXJjaCBpcyBzdHJpY3RseSBieSBiZXN0LWZpdDsgaS5lLiwKLSAgICAgICAgIHRoZSBzbWFsbGVzdCAod2l0aCB0aWVzIGdvaW5nIHRvIGFwcHJveGltYXRlbHkgdGhlIGxlYXN0Ci0gICAgICAgICByZWNlbnRseSB1c2VkKSBjaHVuayB0aGF0IGZpdHMgaXMgc2VsZWN0ZWQuCisJIGNodW5rIGJpZyBlbm91Z2ggdG8gZnVsZmlsbCB0aGUgcmVxdWVzdCwgYW5kIHNwbGl0dGluZyBvZmYKKwkgYW55IHJlbWFpbmRlci4gIFRoaXMgc2VhcmNoIGlzIHN0cmljdGx5IGJ5IGJlc3QtZml0OyBpLmUuLAorCSB0aGUgc21hbGxlc3QgKHdpdGggdGllcyBnb2luZyB0byBhcHByb3hpbWF0ZWx5IHRoZSBsZWFzdAorCSByZWNlbnRseSB1c2VkKSBjaHVuayB0aGF0IGZpdHMgaXMgc2VsZWN0ZWQuCiAKICAgICAgIDQuIElmIGxhcmdlIGVub3VnaCwgdGhlIGNodW5rIGJvcmRlcmluZyB0aGUgZW5kIG9mIG1lbW9yeQotICAgICAgICAgKGB0b3AnKSBpcyBzcGxpdCBvZmYuIChUaGlzIHVzZSBvZiBgdG9wJyBpcyBpbiBhY2NvcmQgd2l0aAotICAgICAgICAgdGhlIGJlc3QtZml0IHNlYXJjaCBydWxlLiAgSW4gZWZmZWN0LCBgdG9wJyBpcyB0cmVhdGVkIGFzCi0gICAgICAgICBsYXJnZXIgKGFuZCB0aHVzIGxlc3Mgd2VsbCBmaXR0aW5nKSB0aGFuIGFueSBvdGhlciBhdmFpbGFibGUKLSAgICAgICAgIGNodW5rIHNpbmNlIGl0IGNhbiBiZSBleHRlbmRlZCB0byBiZSBhcyBsYXJnZSBhcyBuZWNlc3NhcnkKLSAgICAgICAgICh1cCB0byBzeXN0ZW0gbGltaXRhdGlvbnMpLgorCSAoYHRvcCcpIGlzIHNwbGl0IG9mZi4gKFRoaXMgdXNlIG9mIGB0b3AnIGlzIGluIGFjY29yZCB3aXRoCisJIHRoZSBiZXN0LWZpdCBzZWFyY2ggcnVsZS4gIEluIGVmZmVjdCwgYHRvcCcgaXMgdHJlYXRlZCBhcworCSBsYXJnZXIgKGFuZCB0aHVzIGxlc3Mgd2VsbCBmaXR0aW5nKSB0aGFuIGFueSBvdGhlciBhdmFpbGFibGUKKwkgY2h1bmsgc2luY2UgaXQgY2FuIGJlIGV4dGVuZGVkIHRvIGJlIGFzIGxhcmdlIGFzIG5lY2Vzc2FyeQorCSAodXAgdG8gc3lzdGVtIGxpbWl0YXRpb25zKS4KIAogICAgICAgNS4gSWYgdGhlIHJlcXVlc3Qgc2l6ZSBtZWV0cyB0aGUgbW1hcCB0aHJlc2hvbGQgYW5kIHRoZQotICAgICAgICAgc3lzdGVtIHN1cHBvcnRzIG1tYXAsIGFuZCB0aGVyZSBhcmUgZmV3IGVub3VnaCBjdXJyZW50bHkKLSAgICAgICAgIGFsbG9jYXRlZCBtbWFwcGVkIHJlZ2lvbnMsIGFuZCBhIGNhbGwgdG8gbW1hcCBzdWNjZWVkcywKLSAgICAgICAgIHRoZSByZXF1ZXN0IGlzIGFsbG9jYXRlZCB2aWEgZGlyZWN0IG1lbW9yeSBtYXBwaW5nLgorCSBzeXN0ZW0gc3VwcG9ydHMgbW1hcCwgYW5kIHRoZXJlIGFyZSBmZXcgZW5vdWdoIGN1cnJlbnRseQorCSBhbGxvY2F0ZWQgbW1hcHBlZCByZWdpb25zLCBhbmQgYSBjYWxsIHRvIG1tYXAgc3VjY2VlZHMsCisJIHRoZSByZXF1ZXN0IGlzIGFsbG9jYXRlZCB2aWEgZGlyZWN0IG1lbW9yeSBtYXBwaW5nLgogCiAgICAgICA2LiBPdGhlcndpc2UsIHRoZSB0b3Agb2YgbWVtb3J5IGlzIGV4dGVuZGVkIGJ5Ci0gICAgICAgICBvYnRhaW5pbmcgbW9yZSBzcGFjZSBmcm9tIHRoZSBzeXN0ZW0gKG5vcm1hbGx5IHVzaW5nIHNicmssCi0gICAgICAgICBidXQgZGVmaW5hYmxlIHRvIGFueXRoaW5nIGVsc2UgdmlhIHRoZSBNT1JFQ09SRSBtYWNybykuCi0gICAgICAgICBNZW1vcnkgaXMgZ2F0aGVyZWQgZnJvbSB0aGUgc3lzdGVtIChpbiBzeXN0ZW0gcGFnZS1zaXplZAotICAgICAgICAgdW5pdHMpIGluIGEgd2F5IHRoYXQgYWxsb3dzIGNodW5rcyBvYnRhaW5lZCBhY3Jvc3MgZGlmZmVyZW50Ci0gICAgICAgICBzYnJrIGNhbGxzIHRvIGJlIGNvbnNvbGlkYXRlZCwgYnV0IGRvZXMgbm90IHJlcXVpcmUKLSAgICAgICAgIGNvbnRpZ3VvdXMgbWVtb3J5LiBUaHVzLCBpdCBzaG91bGQgYmUgc2FmZSB0byBpbnRlcnNwZXJzZQotICAgICAgICAgbWFsbG9jcyB3aXRoIG90aGVyIHNicmsgY2FsbHMuCisJIG9idGFpbmluZyBtb3JlIHNwYWNlIGZyb20gdGhlIHN5c3RlbSAobm9ybWFsbHkgdXNpbmcgc2JyaywKKwkgYnV0IGRlZmluYWJsZSB0byBhbnl0aGluZyBlbHNlIHZpYSB0aGUgTU9SRUNPUkUgbWFjcm8pLgorCSBNZW1vcnkgaXMgZ2F0aGVyZWQgZnJvbSB0aGUgc3lzdGVtIChpbiBzeXN0ZW0gcGFnZS1zaXplZAorCSB1bml0cykgaW4gYSB3YXkgdGhhdCBhbGxvd3MgY2h1bmtzIG9idGFpbmVkIGFjcm9zcyBkaWZmZXJlbnQKKwkgc2JyayBjYWxscyB0byBiZSBjb25zb2xpZGF0ZWQsIGJ1dCBkb2VzIG5vdCByZXF1aXJlCisJIGNvbnRpZ3VvdXMgbWVtb3J5LiBUaHVzLCBpdCBzaG91bGQgYmUgc2FmZSB0byBpbnRlcnNwZXJzZQorCSBtYWxsb2NzIHdpdGggb3RoZXIgc2JyayBjYWxscy4KIAogCiAgICAgICBBbGwgYWxsb2NhdGlvbnMgYXJlIG1hZGUgZnJvbSB0aGUgdGhlIGBsb3dlc3QnIHBhcnQgb2YgYW55IGZvdW5kCkBAIC0yMjA4LDE2ICsyMTk1LDE2IEBACiAKICAgICAgIGlmIChyZW1haW5kZXJfc2l6ZSA+PSAobG9uZylNSU5TSVpFKSAvKiB0b28gYmlnICovCiAgICAgICB7Ci0gICAgICAgIC0taWR4OyAvKiBhZGp1c3QgdG8gcmVzY2FuIGJlbG93IGFmdGVyIGNoZWNraW5nIGxhc3QgcmVtYWluZGVyICovCi0gICAgICAgIGJyZWFrOworCS0taWR4OyAvKiBhZGp1c3QgdG8gcmVzY2FuIGJlbG93IGFmdGVyIGNoZWNraW5nIGxhc3QgcmVtYWluZGVyICovCisJYnJlYWs7CiAgICAgICB9CiAKICAgICAgIGVsc2UgaWYgKHJlbWFpbmRlcl9zaXplID49IDApIC8qIGV4YWN0IGZpdCAqLwogICAgICAgewotICAgICAgICB1bmxpbmsodmljdGltLCBiY2ssIGZ3ZCk7Ci0gICAgICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KHZpY3RpbSwgdmljdGltX3NpemUpOwotICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKLSAgICAgICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOworCXVubGluayh2aWN0aW0sIGJjaywgZndkKTsKKwlzZXRfaW51c2VfYml0X2F0X29mZnNldCh2aWN0aW0sIHZpY3RpbV9zaXplKTsKKwljaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKKwlyZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7CiAgICAgICB9CiAgICAgfQogCkBAIC0yMjc0LDggKzIyNjEsOCBAQAogICAgICAgYmxvY2sgPDw9IDE7CiAgICAgICB3aGlsZSAoKGJsb2NrICYgYmluYmxvY2tzKSA9PSAwKQogICAgICAgewotICAgICAgICBpZHggKz0gQklOQkxPQ0tXSURUSDsKLSAgICAgICAgYmxvY2sgPDw9IDE7CisJaWR4ICs9IEJJTkJMT0NLV0lEVEg7CisJYmxvY2sgPDw9IDE7CiAgICAgICB9CiAgICAgfQogCkBAIC0yMjg4LDM0ICsyMjc1LDM0IEBACiAgICAgICAvKiBGb3IgZWFjaCBiaW4gaW4gdGhpcyBibG9jayAuLi4gKi8KICAgICAgIGRvCiAgICAgICB7Ci0gICAgICAgIC8qIEZpbmQgYW5kIHVzZSBmaXJzdCBiaWcgZW5vdWdoIGNodW5rIC4uLiAqLworCS8qIEZpbmQgYW5kIHVzZSBmaXJzdCBiaWcgZW5vdWdoIGNodW5rIC4uLiAqLwogCi0gICAgICAgIGZvciAodmljdGltID0gbGFzdChiaW4pOyB2aWN0aW0gIT0gYmluOyB2aWN0aW0gPSB2aWN0aW0tPmJrKQotICAgICAgICB7Ci0gICAgICAgICAgdmljdGltX3NpemUgPSBjaHVua3NpemUodmljdGltKTsKLSAgICAgICAgICByZW1haW5kZXJfc2l6ZSA9IHZpY3RpbV9zaXplIC0gbmI7CisJZm9yICh2aWN0aW0gPSBsYXN0KGJpbik7IHZpY3RpbSAhPSBiaW47IHZpY3RpbSA9IHZpY3RpbS0+YmspCisJeworCSAgdmljdGltX3NpemUgPSBjaHVua3NpemUodmljdGltKTsKKwkgIHJlbWFpbmRlcl9zaXplID0gdmljdGltX3NpemUgLSBuYjsKIAotICAgICAgICAgIGlmIChyZW1haW5kZXJfc2l6ZSA+PSAobG9uZylNSU5TSVpFKSAvKiBzcGxpdCAqLwotICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldCh2aWN0aW0sIG5iKTsKLSAgICAgICAgICAgIHNldF9oZWFkKHZpY3RpbSwgbmIgfCBQUkVWX0lOVVNFKTsKLSAgICAgICAgICAgIHVubGluayh2aWN0aW0sIGJjaywgZndkKTsKLSAgICAgICAgICAgIGxpbmtfbGFzdF9yZW1haW5kZXIocmVtYWluZGVyKTsKLSAgICAgICAgICAgIHNldF9oZWFkKHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUgfCBQUkVWX0lOVVNFKTsKLSAgICAgICAgICAgIHNldF9mb290KHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUpOwotICAgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7Ci0gICAgICAgICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7Ci0gICAgICAgICAgfQorCSAgaWYgKHJlbWFpbmRlcl9zaXplID49IChsb25nKU1JTlNJWkUpIC8qIHNwbGl0ICovCisJICB7CisJICAgIHJlbWFpbmRlciA9IGNodW5rX2F0X29mZnNldCh2aWN0aW0sIG5iKTsKKwkgICAgc2V0X2hlYWQodmljdGltLCBuYiB8IFBSRVZfSU5VU0UpOworCSAgICB1bmxpbmsodmljdGltLCBiY2ssIGZ3ZCk7CisJICAgIGxpbmtfbGFzdF9yZW1haW5kZXIocmVtYWluZGVyKTsKKwkgICAgc2V0X2hlYWQocmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSB8IFBSRVZfSU5VU0UpOworCSAgICBzZXRfZm9vdChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsKKwkgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsodmljdGltLCBuYik7CisJICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKKwkgIH0KIAotICAgICAgICAgIGVsc2UgaWYgKHJlbWFpbmRlcl9zaXplID49IDApICAvKiB0YWtlICovCi0gICAgICAgICAgewotICAgICAgICAgICAgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQodmljdGltLCB2aWN0aW1fc2l6ZSk7Ci0gICAgICAgICAgICB1bmxpbmsodmljdGltLCBiY2ssIGZ3ZCk7Ci0gICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKLSAgICAgICAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKLSAgICAgICAgICB9CisJICBlbHNlIGlmIChyZW1haW5kZXJfc2l6ZSA+PSAwKSAgLyogdGFrZSAqLworCSAgeworCSAgICBzZXRfaW51c2VfYml0X2F0X29mZnNldCh2aWN0aW0sIHZpY3RpbV9zaXplKTsKKwkgICAgdW5saW5rKHZpY3RpbSwgYmNrLCBmd2QpOworCSAgICBjaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKKwkgICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOworCSAgfQogCi0gICAgICAgIH0KKwl9CiAKICAgICAgICBiaW4gPSBuZXh0X2JpbihiaW4pOwogCkBAIC0yMzI1LDEyICsyMzEyLDEyIEBACiAKICAgICAgIGRvICAgLyogUG9zc2libHkgYmFja3RyYWNrIHRvIHRyeSB0byBjbGVhciBhIHBhcnRpYWwgYmxvY2sgKi8KICAgICAgIHsKLSAgICAgICAgaWYgKChzdGFydGlkeCAmIChCSU5CTE9DS1dJRFRIIC0gMSkpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICBiaW5ibG9ja3MgJj0gfmJsb2NrOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIC0tc3RhcnRpZHg7CisJaWYgKChzdGFydGlkeCAmIChCSU5CTE9DS1dJRFRIIC0gMSkpID09IDApCisJeworCSAgYmluYmxvY2tzICY9IH5ibG9jazsKKwkgIGJyZWFrOworCX0KKwktLXN0YXJ0aWR4OwogICAgICAgIHEgPSBwcmV2X2JpbihxKTsKICAgICAgIH0gd2hpbGUgKGZpcnN0KHEpID09IHEpOwogCkBAIC0yMzM4LDE0ICsyMzI1LDE0IEBACiAKICAgICAgIGlmICggKGJsb2NrIDw8PSAxKSA8PSBiaW5ibG9ja3MgJiYgKGJsb2NrICE9IDApICkKICAgICAgIHsKLSAgICAgICAgd2hpbGUgKChibG9jayAmIGJpbmJsb2NrcykgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIGlkeCArPSBCSU5CTE9DS1dJRFRIOwotICAgICAgICAgIGJsb2NrIDw8PSAxOwotICAgICAgICB9CisJd2hpbGUgKChibG9jayAmIGJpbmJsb2NrcykgPT0gMCkKKwl7CisJICBpZHggKz0gQklOQkxPQ0tXSURUSDsKKwkgIGJsb2NrIDw8PSAxOworCX0KICAgICAgIH0KICAgICAgIGVsc2UKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgfQogICB9CiAKQEAgLTIzNTksNyArMjM0Niw3IEBACiAjaWYgSEFWRV9NTUFQCiAgICAgLyogSWYgYmlnIGFuZCB3b3VsZCBvdGhlcndpc2UgbmVlZCB0byBleHRlbmQsIHRyeSB0byB1c2UgbW1hcCBpbnN0ZWFkICovCiAgICAgaWYgKCh1bnNpZ25lZCBsb25nKW5iID49ICh1bnNpZ25lZCBsb25nKW1tYXBfdGhyZXNob2xkICYmCi0gICAgICAgICh2aWN0aW0gPSBtbWFwX2NodW5rKG5iKSkgIT0gMCkKKwkodmljdGltID0gbW1hcF9jaHVuayhuYikpICE9IDApCiAgICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7CiAjZW5kaWYKIApAQCAtMjM5MiwxMyArMjM3OSwxMyBAQAogICAgICAgIDIuIElmIHRoZSBjaHVuayB3YXMgYWxsb2NhdGVkIHZpYSBtbWFwLCBpdCBpcyByZWxlYXNlIHZpYSBtdW5tYXAoKS4KIAogICAgICAgIDMuIElmIGEgcmV0dXJuZWQgY2h1bmsgYm9yZGVycyB0aGUgY3VycmVudCBoaWdoIGVuZCBvZiBtZW1vcnksCi0gICAgICAgICAgaXQgaXMgY29uc29saWRhdGVkIGludG8gdGhlIHRvcCwgYW5kIGlmIHRoZSB0b3RhbCB1bnVzZWQKLSAgICAgICAgICB0b3Btb3N0IG1lbW9yeSBleGNlZWRzIHRoZSB0cmltIHRocmVzaG9sZCwgbWFsbG9jX3RyaW0gaXMKLSAgICAgICAgICBjYWxsZWQuCisJICBpdCBpcyBjb25zb2xpZGF0ZWQgaW50byB0aGUgdG9wLCBhbmQgaWYgdGhlIHRvdGFsIHVudXNlZAorCSAgdG9wbW9zdCBtZW1vcnkgZXhjZWVkcyB0aGUgdHJpbSB0aHJlc2hvbGQsIG1hbGxvY190cmltIGlzCisJICBjYWxsZWQuCiAKICAgICAgICA0LiBPdGhlciBjaHVua3MgYXJlIGNvbnNvbGlkYXRlZCBhcyB0aGV5IGFycml2ZSwgYW5kCi0gICAgICAgICAgcGxhY2VkIGluIGNvcnJlc3BvbmRpbmcgYmlucy4gKFRoaXMgaW5jbHVkZXMgdGhlIGNhc2Ugb2YKLSAgICAgICAgICBjb25zb2xpZGF0aW5nIHdpdGggdGhlIGN1cnJlbnQgYGxhc3RfcmVtYWluZGVyJykuCisJICBwbGFjZWQgaW4gY29ycmVzcG9uZGluZyBiaW5zLiAoVGhpcyBpbmNsdWRlcyB0aGUgY2FzZSBvZgorCSAgY29uc29saWRhdGluZyB3aXRoIHRoZSBjdXJyZW50IGBsYXN0X3JlbWFpbmRlcicpLgogCiAqLwogCkBAIC0yNjEwLDIyICsyNTk3LDIyIEBACiAgICAgICAvKiBGb3J3YXJkIGludG8gdG9wIG9ubHkgaWYgYSByZW1haW5kZXIgKi8KICAgICAgIGlmIChuZXh0ID09IHRvcCkKICAgICAgIHsKLSAgICAgICAgaWYgKChsb25nKShuZXh0c2l6ZSArIG5ld3NpemUpID49IChsb25nKShuYiArIE1JTlNJWkUpKQotICAgICAgICB7Ci0gICAgICAgICAgbmV3c2l6ZSArPSBuZXh0c2l6ZTsKLSAgICAgICAgICB0b3AgPSBjaHVua19hdF9vZmZzZXQob2xkcCwgbmIpOwotICAgICAgICAgIHNldF9oZWFkKHRvcCwgKG5ld3NpemUgLSBuYikgfCBQUkVWX0lOVVNFKTsKLSAgICAgICAgICBzZXRfaGVhZF9zaXplKG9sZHAsIG5iKTsKLSAgICAgICAgICByZXR1cm4gY2h1bmsybWVtKG9sZHApOwotICAgICAgICB9CisJaWYgKChsb25nKShuZXh0c2l6ZSArIG5ld3NpemUpID49IChsb25nKShuYiArIE1JTlNJWkUpKQorCXsKKwkgIG5ld3NpemUgKz0gbmV4dHNpemU7CisJICB0b3AgPSBjaHVua19hdF9vZmZzZXQob2xkcCwgbmIpOworCSAgc2V0X2hlYWQodG9wLCAobmV3c2l6ZSAtIG5iKSB8IFBSRVZfSU5VU0UpOworCSAgc2V0X2hlYWRfc2l6ZShvbGRwLCBuYik7CisJICByZXR1cm4gY2h1bmsybWVtKG9sZHApOworCX0KICAgICAgIH0KIAogICAgICAgLyogRm9yd2FyZCBpbnRvIG5leHQgY2h1bmsgKi8KICAgICAgIGVsc2UgaWYgKCgobG9uZykobmV4dHNpemUgKyBuZXdzaXplKSA+PSAobG9uZykobmIpKSkKICAgICAgIHsKLSAgICAgICAgdW5saW5rKG5leHQsIGJjaywgZndkKTsKLSAgICAgICAgbmV3c2l6ZSAgKz0gbmV4dHNpemU7Ci0gICAgICAgIGdvdG8gc3BsaXQ7CisJdW5saW5rKG5leHQsIGJjaywgZndkKTsKKwluZXdzaXplICArPSBuZXh0c2l6ZTsKKwlnb3RvIHNwbGl0OwogICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0yNjQ1LDQ1ICsyNjMyLDQ1IEBACiAKICAgICAgIGlmIChuZXh0ICE9IDApCiAgICAgICB7Ci0gICAgICAgIC8qIGludG8gdG9wICovCi0gICAgICAgIGlmIChuZXh0ID09IHRvcCkKLSAgICAgICAgewotICAgICAgICAgIGlmICgobG9uZykobmV4dHNpemUgKyBwcmV2c2l6ZSArIG5ld3NpemUpID49IChsb25nKShuYiArIE1JTlNJWkUpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVubGluayhwcmV2LCBiY2ssIGZ3ZCk7Ci0gICAgICAgICAgICBuZXdwID0gcHJldjsKLSAgICAgICAgICAgIG5ld3NpemUgKz0gcHJldnNpemUgKyBuZXh0c2l6ZTsKLSAgICAgICAgICAgIG5ld21lbSA9IGNodW5rMm1lbShuZXdwKTsKLSAgICAgICAgICAgIE1BTExPQ19DT1BZKG5ld21lbSwgb2xkbWVtLCBvbGRzaXplIC0gU0laRV9TWik7Ci0gICAgICAgICAgICB0b3AgPSBjaHVua19hdF9vZmZzZXQobmV3cCwgbmIpOwotICAgICAgICAgICAgc2V0X2hlYWQodG9wLCAobmV3c2l6ZSAtIG5iKSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgICAgc2V0X2hlYWRfc2l6ZShuZXdwLCBuYik7Ci0gICAgICAgICAgICByZXR1cm4gbmV3bWVtOwotICAgICAgICAgIH0KLSAgICAgICAgfQorCS8qIGludG8gdG9wICovCisJaWYgKG5leHQgPT0gdG9wKQorCXsKKwkgIGlmICgobG9uZykobmV4dHNpemUgKyBwcmV2c2l6ZSArIG5ld3NpemUpID49IChsb25nKShuYiArIE1JTlNJWkUpKQorCSAgeworCSAgICB1bmxpbmsocHJldiwgYmNrLCBmd2QpOworCSAgICBuZXdwID0gcHJldjsKKwkgICAgbmV3c2l6ZSArPSBwcmV2c2l6ZSArIG5leHRzaXplOworCSAgICBuZXdtZW0gPSBjaHVuazJtZW0obmV3cCk7CisJICAgIE1BTExPQ19DT1BZKG5ld21lbSwgb2xkbWVtLCBvbGRzaXplIC0gU0laRV9TWik7CisJICAgIHRvcCA9IGNodW5rX2F0X29mZnNldChuZXdwLCBuYik7CisJICAgIHNldF9oZWFkKHRvcCwgKG5ld3NpemUgLSBuYikgfCBQUkVWX0lOVVNFKTsKKwkgICAgc2V0X2hlYWRfc2l6ZShuZXdwLCBuYik7CisJICAgIHJldHVybiBuZXdtZW07CisJICB9CisJfQogCi0gICAgICAgIC8qIGludG8gbmV4dCBjaHVuayAqLwotICAgICAgICBlbHNlIGlmICgoKGxvbmcpKG5leHRzaXplICsgcHJldnNpemUgKyBuZXdzaXplKSA+PSAobG9uZykobmIpKSkKLSAgICAgICAgewotICAgICAgICAgIHVubGluayhuZXh0LCBiY2ssIGZ3ZCk7Ci0gICAgICAgICAgdW5saW5rKHByZXYsIGJjaywgZndkKTsKLSAgICAgICAgICBuZXdwID0gcHJldjsKLSAgICAgICAgICBuZXdzaXplICs9IG5leHRzaXplICsgcHJldnNpemU7Ci0gICAgICAgICAgbmV3bWVtID0gY2h1bmsybWVtKG5ld3ApOwotICAgICAgICAgIE1BTExPQ19DT1BZKG5ld21lbSwgb2xkbWVtLCBvbGRzaXplIC0gU0laRV9TWik7Ci0gICAgICAgICAgZ290byBzcGxpdDsKLSAgICAgICAgfQorCS8qIGludG8gbmV4dCBjaHVuayAqLworCWVsc2UgaWYgKCgobG9uZykobmV4dHNpemUgKyBwcmV2c2l6ZSArIG5ld3NpemUpID49IChsb25nKShuYikpKQorCXsKKwkgIHVubGluayhuZXh0LCBiY2ssIGZ3ZCk7CisJICB1bmxpbmsocHJldiwgYmNrLCBmd2QpOworCSAgbmV3cCA9IHByZXY7CisJICBuZXdzaXplICs9IG5leHRzaXplICsgcHJldnNpemU7CisJICBuZXdtZW0gPSBjaHVuazJtZW0obmV3cCk7CisJICBNQUxMT0NfQ09QWShuZXdtZW0sIG9sZG1lbSwgb2xkc2l6ZSAtIFNJWkVfU1opOworCSAgZ290byBzcGxpdDsKKwl9CiAgICAgICB9CiAKICAgICAgIC8qIGJhY2t3YXJkIG9ubHkgKi8KICAgICAgIGlmIChwcmV2ICE9IDAgJiYgKGxvbmcpKHByZXZzaXplICsgbmV3c2l6ZSkgPj0gKGxvbmcpbmIpCiAgICAgICB7Ci0gICAgICAgIHVubGluayhwcmV2LCBiY2ssIGZ3ZCk7Ci0gICAgICAgIG5ld3AgPSBwcmV2OwotICAgICAgICBuZXdzaXplICs9IHByZXZzaXplOwotICAgICAgICBuZXdtZW0gPSBjaHVuazJtZW0obmV3cCk7Ci0gICAgICAgIE1BTExPQ19DT1BZKG5ld21lbSwgb2xkbWVtLCBvbGRzaXplIC0gU0laRV9TWik7Ci0gICAgICAgIGdvdG8gc3BsaXQ7CisJdW5saW5rKHByZXYsIGJjaywgZndkKTsKKwluZXdwID0gcHJldjsKKwluZXdzaXplICs9IHByZXZzaXplOworCW5ld21lbSA9IGNodW5rMm1lbShuZXdwKTsKKwlNQUxMT0NfQ09QWShuZXdtZW0sIG9sZG1lbSwgb2xkc2l6ZSAtIFNJWkVfU1opOworCWdvdG8gc3BsaXQ7CiAgICAgICB9CiAgICAgfQogCkBAIC0zMDE1LDI1ICszMDAyLDI1IEBACiAKICAgICAgIGlmIChuZXdfYnJrID09IChjaGFyKikoTU9SRUNPUkVfRkFJTFVSRSkpIC8qIHNicmsgZmFpbGVkPyAqLwogICAgICAgewotICAgICAgICAvKiBUcnkgdG8gZmlndXJlIG91dCB3aGF0IHdlIGhhdmUgKi8KLSAgICAgICAgY3VycmVudF9icmsgPSAoY2hhciopKE1PUkVDT1JFICgwKSk7Ci0gICAgICAgIHRvcF9zaXplID0gY3VycmVudF9icmsgLSAoY2hhciopdG9wOwotICAgICAgICBpZiAodG9wX3NpemUgPj0gKGxvbmcpTUlOU0laRSkgLyogaWYgbm90LCB3ZSBhcmUgdmVyeSB2ZXJ5IGRlYWQhICovCi0gICAgICAgIHsKLSAgICAgICAgICBzYnJrZWRfbWVtID0gY3VycmVudF9icmsgLSBzYnJrX2Jhc2U7Ci0gICAgICAgICAgc2V0X2hlYWQodG9wLCB0b3Bfc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICB9Ci0gICAgICAgIGNoZWNrX2NodW5rKHRvcCk7Ci0gICAgICAgIHJldHVybiAwOworCS8qIFRyeSB0byBmaWd1cmUgb3V0IHdoYXQgd2UgaGF2ZSAqLworCWN1cnJlbnRfYnJrID0gKGNoYXIqKShNT1JFQ09SRSAoMCkpOworCXRvcF9zaXplID0gY3VycmVudF9icmsgLSAoY2hhciopdG9wOworCWlmICh0b3Bfc2l6ZSA+PSAobG9uZylNSU5TSVpFKSAvKiBpZiBub3QsIHdlIGFyZSB2ZXJ5IHZlcnkgZGVhZCEgKi8KKwl7CisJICBzYnJrZWRfbWVtID0gY3VycmVudF9icmsgLSBzYnJrX2Jhc2U7CisJICBzZXRfaGVhZCh0b3AsIHRvcF9zaXplIHwgUFJFVl9JTlVTRSk7CisJfQorCWNoZWNrX2NodW5rKHRvcCk7CisJcmV0dXJuIDA7CiAgICAgICB9CiAKICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgLyogU3VjY2Vzcy4gQWRqdXN0IHRvcCBhY2NvcmRpbmdseS4gKi8KLSAgICAgICAgc2V0X2hlYWQodG9wLCAodG9wX3NpemUgLSBleHRyYSkgfCBQUkVWX0lOVVNFKTsKLSAgICAgICAgc2Jya2VkX21lbSAtPSBleHRyYTsKLSAgICAgICAgY2hlY2tfY2h1bmsodG9wKTsKLSAgICAgICAgcmV0dXJuIDE7CisJLyogU3VjY2Vzcy4gQWRqdXN0IHRvcCBhY2NvcmRpbmdseS4gKi8KKwlzZXRfaGVhZCh0b3AsICh0b3Bfc2l6ZSAtIGV4dHJhKSB8IFBSRVZfSU5VU0UpOworCXNicmtlZF9tZW0gLT0gZXh0cmE7CisJY2hlY2tfY2h1bmsodG9wKTsKKwlyZXR1cm4gMTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTMxMDAsOSArMzA4Nyw5IEBACiAjaWZkZWYgREVCVUcKICAgICAgIGNoZWNrX2ZyZWVfY2h1bmsocCk7CiAgICAgICBmb3IgKHEgPSBuZXh0X2NodW5rKHApOwotICAgICAgICAgICBxIDwgdG9wICYmIGludXNlKHEpICYmIChsb25nKShjaHVua3NpemUocSkpID49IChsb25nKU1JTlNJWkU7Ci0gICAgICAgICAgIHEgPSBuZXh0X2NodW5rKHEpKQotICAgICAgICBjaGVja19pbnVzZV9jaHVuayhxKTsKKwkgICBxIDwgdG9wICYmIGludXNlKHEpICYmIChsb25nKShjaHVua3NpemUocSkpID49IChsb25nKU1JTlNJWkU7CisJICAgcSA9IG5leHRfY2h1bmsocSkpCisJY2hlY2tfaW51c2VfY2h1bmsocSk7CiAjZW5kaWYKICAgICAgIGF2YWlsICs9IGNodW5rc2l6ZShwKTsKICAgICAgIG5hdmFpbCsrOwpAQCAtMzE0MSwxNCArMzEyOCwxNCBAQAogewogICBtYWxsb2NfdXBkYXRlX21hbGxpbmZvKCk7CiAgIHByaW50ZigibWF4IHN5c3RlbSBieXRlcyA9ICUxMHVcbiIsCi0gICAgICAgICAgKHVuc2lnbmVkIGludCkobWF4X3RvdGFsX21lbSkpOworCSAgKHVuc2lnbmVkIGludCkobWF4X3RvdGFsX21lbSkpOwogICBwcmludGYoInN5c3RlbSBieXRlcyAgICAgPSAlMTB1XG4iLAotICAgICAgICAgICh1bnNpZ25lZCBpbnQpKHNicmtlZF9tZW0gKyBtbWFwcGVkX21lbSkpOworCSAgKHVuc2lnbmVkIGludCkoc2Jya2VkX21lbSArIG1tYXBwZWRfbWVtKSk7CiAgIHByaW50ZigiaW4gdXNlIGJ5dGVzICAgICA9ICUxMHVcbiIsCi0gICAgICAgICAgKHVuc2lnbmVkIGludCkoY3VycmVudF9tYWxsaW5mby51b3JkYmxrcyArIG1tYXBwZWRfbWVtKSk7CisJICAodW5zaWduZWQgaW50KShjdXJyZW50X21hbGxpbmZvLnVvcmRibGtzICsgbW1hcHBlZF9tZW0pKTsKICNpZiBIQVZFX01NQVAKICAgcHJpbnRmKCJtYXggbW1hcCByZWdpb25zID0gJTEwdVxuIiwKLSAgICAgICAgICAodW5zaWduZWQgaW50KW1heF9uX21tYXBzKTsKKwkgICh1bnNpZ25lZCBpbnQpbWF4X25fbW1hcHMpOwogI2VuZGlmCiB9CiAjZW5kaWYJLyogMCAqLwpAQCAtMzIxNCwxNyArMzIwMSwxNyBAQAogICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5IDE5OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQogICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRpdmUgYXJndW1lbnRzCiAgICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBNYXJ0aW4gQy4gRm9uZyA8bWNmb25nQHlhaG9vLmNvbT4KLSAgICAgICAgICogQWRkICdMQUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCi0gICAgICAgICAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQotICAgICAgICAgKiBDbGVhbnVwIHVwIGhlYWRlciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCi0gICAgICAgICAqIENsZWFudXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCi0gICAgICAgICAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlzdGVuY2Ugd2l0aCBleGlzdGluZwotICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcwotICAgICAgICAgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAobmVlZHMgbW9yZSB3b3JrKQotICAgICAgICAgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4gJ0FTU0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvCisJICogQWRkICdMQUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCisJICAoZS5nLiBXSU4zMiBwbGF0Zm9ybXMpCisJICogQ2xlYW51cCB1cCBoZWFkZXIgZmlsZSBpbmNsdXNpb24gZm9yIFdJTjMyIHBsYXRmb3JtcworCSAqIENsZWFudXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCisJICogQWRkICdVU0VfRExfUFJFRklYJyB0byBxdWlja2x5IGFsbG93IGNvLWV4aXN0ZW5jZSB3aXRoIGV4aXN0aW5nCisJICAgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMKKwkgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAobmVlZHMgbW9yZSB3b3JrKQorCSAqIFVzZSAnYXNzZXJ0JyByYXRoZXIgdGhhbiAnQVNTRVJUJyBpbiBXSU4zMiBjb2RlIHRvIGNvbmZvcm0gdG8KIAkgICB1c2FnZSBvZiAnYXNzZXJ0JyBpbiBub24tV0lOMzIgY29kZQotICAgICAgICAgKiBJbXByb3ZlIFdJTjMyICdzYnJrKCknIGVtdWxhdGlvbidzICdmaW5kUmVnaW9uKCknIHJvdXRpbmUgdG8KLSAgICAgICAgICAgYXZvaWQgaW5maW5pdGUgbG9vcAorCSAqIEltcHJvdmUgV0lOMzIgJ3NicmsoKScgZW11bGF0aW9uJ3MgJ2ZpbmRSZWdpb24oKScgcm91dGluZSB0bworCSAgIGF2b2lkIGluZmluaXRlIGxvb3AKICAgICAgICogQWx3YXlzIGNhbGwgJ2ZSRWUoKScgcmF0aGVyIHRoYW4gJ2ZyZWUoKScKIAogICAgIFYyLjYuNSBXZWQgSnVuIDE3IDE1OjU3OjMxIDE5OTggIERvdWcgTGVhICAoZGwgYXQgZ2VlKQpAQCAtMzIzNiwxMyArMzIyMywxMyBAQAogICAgICAgKiBBZGRlZCBhbm9ueW1vdXNseSBkb25hdGVkIFdJTjMyIHNicmsgZW11bGF0aW9uCiAgICAgICAqIE1hbGxvYywgY2FsbG9jLCBnZXRwYWdlc2l6ZTogYWRkIG9wdGltaXphdGlvbnMgZnJvbSBSYXltb25kIE5panNzZW4KICAgICAgICogbWFsbG9jX2V4dGVuZF90b3A6IGZpeCBtYXNrIGVycm9yIHRoYXQgY2F1c2VkIHdhc3RhZ2UgYWZ0ZXIKLSAgICAgICAgZm9yZWlnbiBzYnJrcworCWZvcmVpZ24gc2Jya3MKICAgICAgICogQWRkIGxpbnV4IG1yZW1hcCBzdXBwb3J0IGNvZGUgZnJvbSBISiBMaXUKIAogICAgIFYyLjYuMiBUdWUgRGVjICA1IDA2OjUyOjU1IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQogICAgICAgKiBJbnRlZ3JhdGVkIG1vc3QgZG9jdW1lbnRhdGlvbiB3aXRoIHRoZSBjb2RlLgogICAgICAgKiBBZGQgc3VwcG9ydCBmb3IgbW1hcCwgd2l0aCBoZWxwIGZyb20KLSAgICAgICAgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKwlXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgogICAgICAgKiBVc2UgbGFzdF9yZW1haW5kZXIgaW4gbW9yZSBjYXNlcy4KICAgICAgICogUGFjayBiaW5zIHVzaW5nIGlkZWEgZnJvbSAgY29saW5Abnl4MTAuY3MuZHUuZWR1CiAgICAgICAqIFVzZSBvcmRlcmVkIGJpbnMgaW5zdGVhZCBvZiBiZXN0LWZpdCB0aHJlc2hob2xkCkBAIC0zMjUwLDM0ICszMjM3LDM0IEBACiAgICAgICAqIFN1cHBvcnQgYW5vdGhlciBjYXNlIG9mIHJlYWxsb2MgdmlhIG1vdmUgaW50byB0b3AKICAgICAgICogRml4IGVycm9yIG9jY3VyaW5nIHdoZW4gaW5pdGlhbCBzYnJrX2Jhc2Ugbm90IHdvcmQtYWxpZ25lZC4KICAgICAgICogUmVseSBvbiBwYWdlIHNpemUgZm9yIHVuaXRzIGluc3RlYWQgb2YgU0JSS19VTklUIHRvCi0gICAgICAgIGF2b2lkIHN1cnByaXNlcyBhYm91dCBzYnJrIGFsaWdubWVudCBjb252ZW50aW9ucy4KKwlhdm9pZCBzdXJwcmlzZXMgYWJvdXQgc2JyayBhbGlnbm1lbnQgY29udmVudGlvbnMuCiAgICAgICAqIEFkZCBtYWxsaW5mbywgbWFsbG9wdC4gVGhhbmtzIHRvIFJheW1vbmQgTmlqc3NlbgotICAgICAgICAocmF5bW9uZEBlcy5lbGUudHVlLm5sKSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisJKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9yIHRoZSBzdWdnZXN0aW9uLgogICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCiAgICAgICAqIE1vcmUgcHJlY2F1dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKLSAgICAgICAgY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKwljb3VydGVzeSBvZiBXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgogICAgICAgKiBBZGRlZCBtYWNyb3MgZXRjLiwgYWxsb3dpbmcgdXNlIGluIGxpbnV4IGxpYmMgZnJvbQotICAgICAgICBILkouIEx1IChoamxAZ251LmFpLm1pdC5lZHUpCisJSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQogICAgICAgKiBJbnZlcnRlZCB0aGlzIGhpc3RvcnkgbGlzdAogCiAgICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCiAgICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBiZWhhdmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KICAgICAgICogUmVtb3ZlZCBhbGwgcHJlYWxsb2NhdGlvbiBjb2RlIHNpbmNlIHVuZGVyIGN1cnJlbnQgc2NoZW1lCi0gICAgICAgIHRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKLSAgICAgICAgdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1zLgorCXRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKKwl0aGUgd29yayBzYXZlZCBpbiBnb29kIGNhc2VzIGZvciBtb3N0IHRlc3QgcHJvZ3JhbXMuCiAgICAgICAqIE5vIGxvbmdlciB1c2UgcmV0dXJuIGxpc3Qgb3IgdW5jb25zb2xpZGF0ZWQgYmlucyBzaW5jZQotICAgICAgICBubyBzY2hlbWUgdXNpbmcgdGhlbSBjb25zaXN0ZW50bHkgb3V0cGVyZm9ybXMgdGhvc2UgdGhhdCBkb24ndAotICAgICAgICBnaXZlbiBhYm92ZSBjaGFuZ2VzLgorCW5vIHNjaGVtZSB1c2luZyB0aGVtIGNvbnNpc3RlbnRseSBvdXRwZXJmb3JtcyB0aG9zZSB0aGF0IGRvbid0CisJZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KICAgICAgICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUgd29yc3QtY2FzZXMuCiAgICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCiAKICAgICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKICAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0bwotICAgICAgICBQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBzdWdnZXN0aW9uLgorCVBhdWwgV2lsc29uICh3aWxzb25AY3MudGV4YXMuZWR1KSBmb3IgdGhlIHN1Z2dlc3Rpb24uCiAKICAgICBWMi41LjQgV2VkIE5vdiAgMSAwNzo1NDo1MSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKICAgICAgICogQWRkZWQgbWFsbG9jX3RyaW0sIHdpdGggaGVscCBmcm9tIFdvbGZyYW0gR2xvZ2VyCi0gICAgICAgICh3bWdsb0BEZW50Lk1FRC5VbmktTXVlbmNoZW4uREUpLgorCSh3bWdsb0BEZW50Lk1FRC5VbmktTXVlbmNoZW4uREUpLgogCiAgICAgVjIuNS4zIFR1ZSBBcHIgMjYgMTA6MTY6MDEgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQogCkBAIC0zMjkzLDExICszMjgwLDExIEBACiAgICAgVjIuNS4xIFNhdCBBdWcgMTQgMTU6NDA6NDMgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnKQogICAgICAgKiBmYXN0ZXIgYmluIGNvbXB1dGF0aW9uICYgc2xpZ2h0bHkgZGlmZmVyZW50IGJpbm5pbmcKICAgICAgICogbWVyZ2VkIGFsbCBjb25zb2xpZGF0aW9ucyB0byBvbmUgcGFydCBvZiBtYWxsb2MgcHJvcGVyCi0gICAgICAgICAoZWxpbWluYXRpbmcgb2xkIG1hbGxvY19maW5kX3NwYWNlICYgbWFsbG9jX2NsZWFuX2JpbikKKwkgKGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCiAgICAgICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKICAgICAgICogUHJvcGFnYXRlIGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCiAgICAgICAqIEFkZCBzdHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKLSAgICAgICAgICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCisJICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCiAKICAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6NTkgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCiAgICAgICAqIHJlbW92ZWQgcG90ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuawpAQCAtMzMwNSwxMyArMzI5MiwxMSBAQAogICAgICAgKiBtaXNjIGNvc21ldGljcyBhbmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uCiAgICAgICAqIGFudGljb3NtZXRpY3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2VuZXNzCiAgICAgICAqIHRlc3RlZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCi0gICAgICAgICAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKLSAgICAgICAgICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMuKQorCSAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKKwkgIERldGxlZnMgJiBab3JuIGNvbXBhcmlzb24gc3R1ZHkgKGluIFNJR1BMQU4gTm90aWNlcy4pCiAKICAgICBUcmlhbCB2ZXJzaW9uIEZyaSBBdWcgMjggMTM6MTQ6MjkgMTk5MiAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCiAgICAgICAqIEJhc2VkIGxvb3NlbHkgb24gbGliZysrLTEuMlggbWFsbG9jLiAoSXQgcmV0YWlucyBzb21lIG9mIHRoZSBvdmVyYWxsCi0gICAgICAgICBzdHJ1Y3R1cmUgb2Ygb2xkIHZlcnNpb24sICBidXQgbW9zdCBkZXRhaWxzIGRpZmZlci4pCisJIHN0cnVjdHVyZSBvZiBvbGQgdmVyc2lvbiwgIGJ1dCBtb3N0IGRldGFpbHMgZGlmZmVyLikKIAogKi8KLQotCmRpZmYgLS1naXQgYS9jb21tb24vZGxtYWxsb2Muc3JjIGIvY29tbW9uL2RsbWFsbG9jLnNyYwppbmRleCAxMmI4NWJiLi4zMmEzOGJjIDEwMDY0NAotLS0gYS9jb21tb24vZGxtYWxsb2Muc3JjCisrKyBiL2NvbW1vbi9kbG1hbGxvYy5zcmMKQEAgLTgsOCArOCw4IEBACiAqIFZFUlNJT04gMi42LjYgIFN1biBNYXIgIDUgMTk6MTA6MDMgMjAwMCAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCiAKICAgIE5vdGU6IFRoZXJlIG1heSBiZSBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhpcyBtYWxsb2Mgb2J0YWluYWJsZSBhdAotICAgICAgICAgICBmdHA6Ly9nLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLmMKLSAgICAgICAgIENoZWNrIGJlZm9yZSBpbnN0YWxsaW5nIQorCSAgIGZ0cDovL2cub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYworCSBDaGVjayBiZWZvcmUgaW5zdGFsbGluZyEKIAogKiBXaHkgdXNlIHRoaXMgbWFsbG9jPwogCkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbi4KIAogICBNaW5pbXVtIGFsbG9jYXRlZCBzaXplOiA0LWJ5dGUgcHRyczogIDE2IGJ5dGVzICAgIChpbmNsdWRpbmcgNCBvdmVyaGVhZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOC1ieXRlIHB0cnM6ICAyNC8zMiBieXRlcyAoaW5jbHVkaW5nLCA0Lzggb3ZlcmhlYWQpCisJCQkgIDgtYnl0ZSBwdHJzOiAgMjQvMzIgYnl0ZXMgKGluY2x1ZGluZywgNC84IG92ZXJoZWFkKQogCiAgICAgICAgV2hlbiBhIGNodW5rIGlzIGZyZWVkLCAxMiAoZm9yIDRieXRlIHB0cnMpIG9yIDIwIChmb3IgOCBieXRlCiAgICAgICAgcHRycyBidXQgNCBieXRlIHNpemUpIG9yIDI0IChmb3IgOC84KSBhZGRpdGlvbmFsIGJ5dGVzIGFyZQpAQCAtOTgsNyArOTgsNyBAQAogICAgICAgIHBvaW50ZXIgdG8gc29tZXRoaW5nIG9mIHRoZSBtaW5pbXVtIGFsbG9jYXRhYmxlIHNpemUuCiAKICAgTWF4aW11bSBhbGxvY2F0ZWQgc2l6ZTogNC1ieXRlIHNpemVfdDogMl4zMSAtICA4IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDgtYnl0ZSBzaXplX3Q6IDJeNjMgLSAxNiBieXRlcworCQkJICA4LWJ5dGUgc2l6ZV90OiAyXjYzIC0gMTYgYnl0ZXMKIAogICAgICAgIEl0IGlzIGFzc3VtZWQgdGhhdCAocG9zc2libHkgc2lnbmVkKSBzaXplX3QgYml0IHZhbHVlcyBzdWZmaWNlIHRvCiAgICAgICAgcmVwcmVzZW50IGNodW5rIHNpemVzLiBgUG9zc2libHkgc2lnbmVkJyBpcyBkdWUgdG8gdGhlIGZhY3QKQEAgLTExNCwxMSArMTE0LDExIEBACiAgICAgICAgbWFrZSB0aGUgbm9ybWFsIHdvcnN0LWNhc2Ugd2FzdGFnZSAxNSBieXRlcyAoaS5lLiwgdXAgdG8gMTUKICAgICAgICBtb3JlIGJ5dGVzIHdpbGwgYmUgYWxsb2NhdGVkIHRoYW4gd2VyZSByZXF1ZXN0ZWQgaW4gbWFsbG9jKSwgd2l0aAogICAgICAgIHR3byBleGNlcHRpb25zOgotICAgICAgICAgMS4gQmVjYXVzZSByZXF1ZXN0cyBmb3IgemVybyBieXRlcyBhbGxvY2F0ZSBub24temVybyBzcGFjZSwKLSAgICAgICAgICAgIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgZm9yIGEgcmVxdWVzdCBvZiB6ZXJvIGJ5dGVzIGlzIDI0IGJ5dGVzLgotICAgICAgICAgMi4gRm9yIHJlcXVlc3RzID49IG1tYXBfdGhyZXNob2xkIHRoYXQgYXJlIHNlcnZpY2VkIHZpYQotICAgICAgICAgICAgbW1hcCgpLCB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGlzIDggYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyCi0gICAgICAgICAgICBmcm9tIGEgc3lzdGVtIHBhZ2UgKHRoZSBtaW5pbWFsIG1tYXAgdW5pdCk7IHR5cGljYWxseSA0MDk2IGJ5dGVzLgorCSAxLiBCZWNhdXNlIHJlcXVlc3RzIGZvciB6ZXJvIGJ5dGVzIGFsbG9jYXRlIG5vbi16ZXJvIHNwYWNlLAorCSAgICB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGZvciBhIHJlcXVlc3Qgb2YgemVybyBieXRlcyBpcyAyNCBieXRlcy4KKwkgMi4gRm9yIHJlcXVlc3RzID49IG1tYXBfdGhyZXNob2xkIHRoYXQgYXJlIHNlcnZpY2VkIHZpYQorCSAgICBtbWFwKCksIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgaXMgOCBieXRlcyBwbHVzIHRoZSByZW1haW5kZXIKKwkgICAgZnJvbSBhIHN5c3RlbSBwYWdlICh0aGUgbWluaW1hbCBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBieXRlcy4KIAogKiBMaW1pdGF0aW9ucwogCkBAIC0zNzEsOCArMzcxLDggQEAKIHZvaWQqIG1lbWNweSh2b2lkKiwgY29uc3Qgdm9pZCosIHNpemVfdCk7CiAjZWxzZQogI2lmZGVmIFdJTjMyCi0vLyBPbiBXaW4zMiBwbGF0Zm9ybXMsICdtZW1zZXQoKScgYW5kICdtZW1jcHkoKScgYXJlIGFscmVhZHkgZGVjbGFyZWQgaW4KLS8vICd3aW5kb3dzLmgnCisvKiBPbiBXaW4zMiBwbGF0Zm9ybXMsICdtZW1zZXQoKScgYW5kICdtZW1jcHkoKScgYXJlIGFscmVhZHkgZGVjbGFyZWQgaW4gKi8KKy8qICd3aW5kb3dzLmgnICovCiAjZWxzZQogVm9pZF90KiBtZW1zZXQoKTsKIFZvaWRfdCogbWVtY3B5KCk7CkBAIC0zOTIsMTQgKzM5MiwxNCBAQAogICBpZihtenN6IDw9IDkqc2l6ZW9mKG16c3opKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIElOVEVSTkFMX1NJWkVfVCogbXogPSAoSU5URVJOQUxfU0laRV9UKikgKGNoYXJwKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmKG16c3ogPj0gNSpzaXplb2YobXpzeikpIHsgICAgICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBpZihtenN6ID49IDcqc2l6ZW9mKG16c3opKSB7ICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmKG16c3ogPj0gOSpzaXplb2YobXpzeikpIHsgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16KysgPSAwOyB9fX0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16ICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZihtenN6ID49IDkqc2l6ZW9mKG16c3opKSB7ICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm16KysgPSAwOyB9fX0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm16ICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gZWxzZSBtZW1zZXQoKGNoYXJwKSwgMCwgbXpzeik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9IHdoaWxlKDApCiAKQEAgLTQxMCwxNCArNDEwLDE0IEBACiAgICAgSU5URVJOQUxfU0laRV9UKiBtY3NyYyA9IChJTlRFUk5BTF9TSVpFX1QqKSAoc3JjKTsgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgSU5URVJOQUxfU0laRV9UKiBtY2RzdCA9IChJTlRFUk5BTF9TSVpFX1QqKSAoZGVzdCk7ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYobWNzeiA+PSA1KnNpemVvZihtY3N6KSkgeyAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIGlmKG1jc3ogPj0gNypzaXplb2YobWNzeikpIHsgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYobWNzeiA+PSA5KnNpemVvZihtY3N6KSkgeyAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyB9fX0gICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QgICA9ICptY3NyYyAgOyAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAorCWlmKG1jc3ogPj0gOSpzaXplb2YobWNzeikpIHsgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyB9fX0gICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbWNkc3QgICA9ICptY3NyYyAgOyAgICAgICAgICAgICAgICAgICAgIFwKICAgfSBlbHNlIG1lbWNweShkZXN0LCBzcmMsIG1jc3opOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUoMCkKIApAQCAtNTU3LDcgKzU1Nyw2IEBACiAjZW5kaWYKIAogCi0KIC8qCiAKICAgVGhpcyB2ZXJzaW9uIG9mIG1hbGxvYyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgU1ZJRC9YUEcgbWFsbGluZm8KQEAgLTYyMSw3ICs2MjAsNiBAQAogI2RlZmluZSBNX01NQVBfTUFYICAgICAgICAgIC00CiAKIAotCiAjaWZuZGVmIERFRkFVTFRfVFJJTV9USFJFU0hPTEQKICNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoMTI4ICogMTAyNCkKICNlbmRpZgpAQCAtNjg1LDExICs2ODMsMTEgQEAKICAgICAgIHJldGFpbiB3aGVuZXZlciBzYnJrIGlzIGNhbGxlZC4gSXQgaXMgdXNlZCBpbiB0d28gd2F5cyBpbnRlcm5hbGx5OgogCiAgICAgICAqIFdoZW4gc2JyayBpcyBjYWxsZWQgdG8gZXh0ZW5kIHRoZSB0b3Agb2YgdGhlIGFyZW5hIHRvIHNhdGlzZnkKLSAgICAgICAgYSBuZXcgbWFsbG9jIHJlcXVlc3QsIHRoaXMgbXVjaCBwYWRkaW5nIGlzIGFkZGVkIHRvIHRoZSBzYnJrCi0gICAgICAgIHJlcXVlc3QuCisJYSBuZXcgbWFsbG9jIHJlcXVlc3QsIHRoaXMgbXVjaCBwYWRkaW5nIGlzIGFkZGVkIHRvIHRoZSBzYnJrCisJcmVxdWVzdC4KIAogICAgICAgKiBXaGVuIG1hbGxvY190cmltIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGZyb20gZnJlZSgpLAotICAgICAgICBpdCBpcyB1c2VkIGFzIHRoZSBgcGFkJyBhcmd1bWVudC4KKwlpdCBpcyB1c2VkIGFzIHRoZSBgcGFkJyBhcmd1bWVudC4KIAogICAgICAgSW4gYm90aCBjYXNlcywgdGhlIGFjdHVhbCBhbW91bnQgb2YgcGFkZGluZyBpcyByb3VuZGVkCiAgICAgICBzbyB0aGF0IHRoZSBlbmQgb2YgdGhlIGFyZW5hIGlzIGFsd2F5cyBhIHN5c3RlbSBwYWdlIGJvdW5kYXJ5LgpAQCAtNzM1LDE1ICs3MzMsMTUgQEAKIAogICAgICAgSG93ZXZlciwgaXQgaGFzIHRoZSBkaXNhZHZhbnRhZ2VzIHRoYXQ6CiAKLSAgICAgICAgIDEuIFRoZSBzcGFjZSBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuCi0gICAgICAgICAgICB1c2VkIHRvIHNlcnZpY2UgbGF0ZXIgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1bmtzLgotICAgICAgICAgMi4gSXQgY2FuIGxlYWQgdG8gbW9yZSB3YXN0YWdlIGJlY2F1c2Ugb2YgbW1hcCBwYWdlIGFsaWdubWVudAotICAgICAgICAgICAgcmVxdWlyZW1lbnRzCi0gICAgICAgICAzLiBJdCBjYXVzZXMgbWFsbG9jIHBlcmZvcm1hbmNlIHRvIGJlIG1vcmUgZGVwZW5kZW50IG9uIGhvc3QKLSAgICAgICAgICAgIHN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudCBzdXBwb3J0IHJvdXRpbmVzIHdoaWNoIG1heSB2YXJ5IGluCi0gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBxdWFsaXR5IGFuZCBtYXkgaW1wb3NlIGFyYml0cmFyeQotICAgICAgICAgICAgbGltaXRhdGlvbnMuIEdlbmVyYWxseSwgc2VydmljaW5nIGEgcmVxdWVzdCB2aWEgbm9ybWFsCi0gICAgICAgICAgICBtYWxsb2Mgc3RlcHMgaXMgZmFzdGVyIHRoYW4gZ29pbmcgdGhyb3VnaCBhIHN5c3RlbSdzIG1tYXAuCisJIDEuIFRoZSBzcGFjZSBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuCisJICAgIHVzZWQgdG8gc2VydmljZSBsYXRlciByZXF1ZXN0cywgYXMgaGFwcGVucyB3aXRoIG5vcm1hbCBjaHVua3MuCisJIDIuIEl0IGNhbiBsZWFkIHRvIG1vcmUgd2FzdGFnZSBiZWNhdXNlIG9mIG1tYXAgcGFnZSBhbGlnbm1lbnQKKwkgICAgcmVxdWlyZW1lbnRzCisJIDMuIEl0IGNhdXNlcyBtYWxsb2MgcGVyZm9ybWFuY2UgdG8gYmUgbW9yZSBkZXBlbmRlbnQgb24gaG9zdAorCSAgICBzeXN0ZW0gbWVtb3J5IG1hbmFnZW1lbnQgc3VwcG9ydCByb3V0aW5lcyB3aGljaCBtYXkgdmFyeSBpbgorCSAgICBpbXBsZW1lbnRhdGlvbiBxdWFsaXR5IGFuZCBtYXkgaW1wb3NlIGFyYml0cmFyeQorCSAgICBsaW1pdGF0aW9ucy4gR2VuZXJhbGx5LCBzZXJ2aWNpbmcgYSByZXF1ZXN0IHZpYSBub3JtYWwKKwkgICAgbWFsbG9jIHN0ZXBzIGlzIGZhc3RlciB0aGFuIGdvaW5nIHRocm91Z2ggYSBzeXN0ZW0ncyBtbWFwLgogCiAgICAgICBBbGwgdG9nZXRoZXIsIHRoZXNlIGNvbnNpZGVyYXRpb25zIHNob3VsZCBsZWFkIHlvdSB0byB1c2UgbW1hcAogICAgICAgb25seSBmb3IgcmVsYXRpdmVseSBsYXJnZSByZXF1ZXN0cy4KQEAgLTc1Miw3ICs3NTAsNiBAQAogKi8KIAogCi0KICNpZm5kZWYgREVGQVVMVF9NTUFQX01BWAogI2lmIEhBVkVfTU1BUAogI2RlZmluZSBERUZBVUxUX01NQVBfTUFYICAgICAgICg2NCkKQEAgLTc2NSwxNSArNzYyLDE1IEBACiAgICAgTV9NTUFQX01BWCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgdG8gc2ltdWx0YW5lb3VzbHkKICAgICAgIHNlcnZpY2UgdXNpbmcgbW1hcC4gVGhpcyBwYXJhbWV0ZXIgZXhpc3RzIGJlY2F1c2U6CiAKLSAgICAgICAgIDEuIFNvbWUgc3lzdGVtcyBoYXZlIGEgbGltaXRlZCBudW1iZXIgb2YgaW50ZXJuYWwgdGFibGVzIGZvcgotICAgICAgICAgICAgdXNlIGJ5IG1tYXAuCi0gICAgICAgICAyLiBJbiBtb3N0IHN5c3RlbXMsIG92ZXJyZWxpYW5jZSBvbiBtbWFwIGNhbiBkZWdyYWRlIG92ZXJhbGwKLSAgICAgICAgICAgIHBlcmZvcm1hbmNlLgotICAgICAgICAgMy4gSWYgYSBwcm9ncmFtIGFsbG9jYXRlcyBtYW55IGxhcmdlIHJlZ2lvbnMsIGl0IGlzIHByb2JhYmx5Ci0gICAgICAgICAgICBiZXR0ZXIgb2ZmIHVzaW5nIG5vcm1hbCBzYnJrLWJhc2VkIGFsbG9jYXRpb24gcm91dGluZXMgdGhhdAotICAgICAgICAgICAgY2FuIHJlY2xhaW0gYW5kIHJlYWxsb2NhdGUgbm9ybWFsIGhlYXAgbWVtb3J5LiBVc2luZyBhCi0gICAgICAgICAgICBzbWFsbCB2YWx1ZSBhbGxvd3MgdHJhbnNpdGlvbiBpbnRvIHRoaXMgbW9kZSBhZnRlciB0aGUKLSAgICAgICAgICAgIGZpcnN0IGZldyBhbGxvY2F0aW9ucy4KKwkgMS4gU29tZSBzeXN0ZW1zIGhhdmUgYSBsaW1pdGVkIG51bWJlciBvZiBpbnRlcm5hbCB0YWJsZXMgZm9yCisJICAgIHVzZSBieSBtbWFwLgorCSAyLiBJbiBtb3N0IHN5c3RlbXMsIG92ZXJyZWxpYW5jZSBvbiBtbWFwIGNhbiBkZWdyYWRlIG92ZXJhbGwKKwkgICAgcGVyZm9ybWFuY2UuCisJIDMuIElmIGEgcHJvZ3JhbSBhbGxvY2F0ZXMgbWFueSBsYXJnZSByZWdpb25zLCBpdCBpcyBwcm9iYWJseQorCSAgICBiZXR0ZXIgb2ZmIHVzaW5nIG5vcm1hbCBzYnJrLWJhc2VkIGFsbG9jYXRpb24gcm91dGluZXMgdGhhdAorCSAgICBjYW4gcmVjbGFpbSBhbmQgcmVhbGxvY2F0ZSBub3JtYWwgaGVhcCBtZW1vcnkuIFVzaW5nIGEKKwkgICAgc21hbGwgdmFsdWUgYWxsb3dzIHRyYW5zaXRpb24gaW50byB0aGlzIG1vZGUgYWZ0ZXIgdGhlCisJICAgIGZpcnN0IGZldyBhbGxvY2F0aW9ucy4KIAogICAgICAgU2V0dGluZyB0byAwIGRpc2FibGVzIGFsbCB1c2Ugb2YgbW1hcC4gIElmIEhBVkVfTU1BUCBpcyBub3Qgc2V0LAogICAgICAgdGhlIGRlZmF1bHQgdmFsdWUgaXMgMCwgYW5kIGF0dGVtcHRzIHRvIHNldCBpdCB0byBub24temVybyB2YWx1ZXMKQEAgLTc4MSw4ICs3NzgsNiBAQAogKi8KIAogCi0KLQogLyoKICAgICBVU0VfRExfUFJFRklYIHdpbGwgcHJlZml4IGFsbCBwdWJsaWMgcm91dGluZXMgd2l0aCB0aGUgc3RyaW5nICdkbCcuCiAgICAgICBVc2VmdWwgdG8gcXVpY2tseSBhdm9pZCBwcm9jZWR1cmUgZGVjbGFyYXRpb24gY29uZmxpY3RzIGFuZCBsaW5rZXIKQEAgLTc5Myw4ICs3ODgsNiBAQAogLyogI2RlZmluZSBVU0VfRExfUFJFRklYICovCiAKIAotCi0KIC8qCiAKICAgU3BlY2lhbCBkZWZpbmVzIGZvciBsaW51eCBsaWJjCkBAIC05OTgsNyArOTkxLDcgQEAKIAkJcnZhbCA9IFZpcnR1YWxGcmVlICgodm9pZCopZ0FkZHJlc3NCYXNlLAogCQkJCQkJCWdOZXh0QWRkcmVzcyAtIGdBZGRyZXNzQmFzZSwKIAkJCQkJCQlNRU1fREVDT01NSVQpOwotICAgICAgICBhc3NlcnQgKHJ2YWwpOworCWFzc2VydCAocnZhbCk7CiAJfQogCXdoaWxlIChoZWFkKQogCXsKQEAgLTEwMjMsMjQgKzEwMTYsMjQgQEAKIAkJCXJldHVybiBzdGFydF9hZGRyZXNzOwogCQllbHNlCiAJCXsKLQkJCS8vIFJlcXVlc3RlZCByZWdpb24gaXMgbm90IGF2YWlsYWJsZSBzbyBzZWUgaWYgdGhlCi0JCQkvLyBuZXh0IHJlZ2lvbiBpcyBhdmFpbGFibGUuICBTZXQgJ3N0YXJ0X2FkZHJlc3MnCi0JCQkvLyB0byB0aGUgbmV4dCByZWdpb24gYW5kIGNhbGwgJ1ZpcnR1YWxRdWVyeSgpJwotCQkJLy8gYWdhaW4uCisJCQkvKiBSZXF1ZXN0ZWQgcmVnaW9uIGlzIG5vdCBhdmFpbGFibGUgc28gc2VlIGlmIHRoZSAqLworCQkJLyogbmV4dCByZWdpb24gaXMgYXZhaWxhYmxlLiAgU2V0ICdzdGFydF9hZGRyZXNzJyAqLworCQkJLyogdG8gdGhlIG5leHQgcmVnaW9uIGFuZCBjYWxsICdWaXJ0dWFsUXVlcnkoKScgKi8KKwkJCS8qIGFnYWluLiAqLwogCiAJCQlzdGFydF9hZGRyZXNzID0gKGNoYXIqKWluZm8uQmFzZUFkZHJlc3MgKyBpbmZvLlJlZ2lvblNpemU7CiAKLQkJCS8vIE1ha2Ugc3VyZSB3ZSBzdGFydCBsb29raW5nIGZvciB0aGUgbmV4dCByZWdpb24KLQkJCS8vIG9uIHRoZSAqbmV4dCogNjRLIGJvdW5kYXJ5LiAgT3RoZXJ3aXNlLCBldmVuIGlmCi0JCQkvLyB0aGUgbmV3IHJlZ2lvbiBpcyBmcmVlIGFjY29yZGluZyB0bwotCQkJLy8gJ1ZpcnR1YWxRdWVyeSgpJywgdGhlIHN1YnNlcXVlbnQgY2FsbCB0bwotCQkJLy8gJ1ZpcnR1YWxBbGxvYygpJyAod2hpY2ggZm9sbG93cyB0aGUgY2FsbCB0bwotCQkJLy8gdGhpcyByb3V0aW5lIGluICd3c2JyaygpJykgd2lsbCByb3VuZCAqZG93bioKLQkJCS8vIHRoZSByZXF1ZXN0ZWQgYWRkcmVzcyB0byBhIDY0SyBib3VuZGFyeSB3aGljaAotCQkJLy8gd2UgYWxyZWFkeSBrbm93IGlzIGFuIGFkZHJlc3MgaW4gdGhlCi0JCQkvLyB1bmF2YWlsYWJsZSByZWdpb24uICBUaHVzLCB0aGUgc3Vic2VxdWVudCBjYWxsCi0JCQkvLyB0byAnVmlydHVhbEFsbG9jKCknIHdpbGwgZmFpbCBhbmQgYnJpbmcgdXMgYmFjawotCQkJLy8gaGVyZSwgY2F1c2luZyB1cyB0byBnbyBpbnRvIGFuIGluZmluaXRlIGxvb3AuCisJCQkvKiBNYWtlIHN1cmUgd2Ugc3RhcnQgbG9va2luZyBmb3IgdGhlIG5leHQgcmVnaW9uICovCisJCQkvKiBvbiB0aGUgKm5leHQqIDY0SyBib3VuZGFyeS4gIE90aGVyd2lzZSwgZXZlbiBpZiAqLworCQkJLyogdGhlIG5ldyByZWdpb24gaXMgZnJlZSBhY2NvcmRpbmcgdG8gKi8KKwkJCS8qICdWaXJ0dWFsUXVlcnkoKScsIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gKi8KKwkJCS8qICdWaXJ0dWFsQWxsb2MoKScgKHdoaWNoIGZvbGxvd3MgdGhlIGNhbGwgdG8gKi8KKwkJCS8qIHRoaXMgcm91dGluZSBpbiAnd3NicmsoKScpIHdpbGwgcm91bmQgKmRvd24qICovCisJCQkvKiB0aGUgcmVxdWVzdGVkIGFkZHJlc3MgdG8gYSA2NEsgYm91bmRhcnkgd2hpY2ggKi8KKwkJCS8qIHdlIGFscmVhZHkga25vdyBpcyBhbiBhZGRyZXNzIGluIHRoZSAqLworCQkJLyogdW5hdmFpbGFibGUgcmVnaW9uLiAgVGh1cywgdGhlIHN1YnNlcXVlbnQgY2FsbCAqLworCQkJLyogdG8gJ1ZpcnR1YWxBbGxvYygpJyB3aWxsIGZhaWwgYW5kIGJyaW5nIHVzIGJhY2sgKi8KKwkJCS8qIGhlcmUsIGNhdXNpbmcgdXMgdG8gZ28gaW50byBhbiBpbmZpbml0ZSBsb29wLiAqLwogCiAJCQlzdGFydF9hZGRyZXNzID0KIAkJCQkodm9pZCAqKSBBbGlnblBhZ2U2NEsoKHVuc2lnbmVkIGxvbmcpIHN0YXJ0X2FkZHJlc3MpOwpAQCAtMTA3Nyw5ICsxMDcwLDkgQEAKIAkJCQlnQWRkcmVzc0Jhc2UgPSBnTmV4dEFkZHJlc3MgPQogCQkJCQkodW5zaWduZWQgaW50KVZpcnR1YWxBbGxvYyAobmV3X2FkZHJlc3MsIG5ld19zaXplLAogCQkJCQkJCQkJCQkJTUVNX1JFU0VSVkUsIFBBR0VfTk9BQ0NFU1MpOwotCQkJCS8vIHJlcGVhdCBpbiBjYXNlIG9mIHJhY2UgY29uZGl0aW9uCi0JCQkJLy8gVGhlIHJlZ2lvbiB0aGF0IHdlIGZvdW5kIGhhcyBiZWVuIHNuYWdnZWQKLQkJCQkvLyBieSBhbm90aGVyIHRocmVhZAorCQkJCS8qIHJlcGVhdCBpbiBjYXNlIG9mIHJhY2UgY29uZGl0aW9uICovCisJCQkJLyogVGhlIHJlZ2lvbiB0aGF0IHdlIGZvdW5kIGhhcyBiZWVuIHNuYWdnZWQgKi8KKwkJCQkvKiBieSBhbm90aGVyIHRocmVhZCAqLwogCQkJfQogCQkJd2hpbGUgKGdBZGRyZXNzQmFzZSA9PSAwKTsKIApAQCAtMTE2NywxNyArMTE2MCwxNyBAQAogCiAKICAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmssIGlmIGFsbG9jYXRlZCAgICAgICAgICAgIHwgfAotICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisJICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuaywgaWYgYWxsb2NhdGVkICAgICAgICAgICAgfCB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CiAgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBVc2VyIGRhdGEgc3RhcnRzIGhlcmUuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCi0gICAgICAgICAgICAuICAgICAgICAgICAgIChtYWxsb2NfdXNhYmxlX3NwYWNlKCkgYnl0ZXMpICAgICAgICAgICAgICAgICAgICAgLgotICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgfCAgICAgICAgICAgICBVc2VyIGRhdGEgc3RhcnRzIGhlcmUuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAobWFsbG9jX3VzYWJsZV9zcGFjZSgpIGJ5dGVzKSAgICAgICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIG5leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKIAogCiAgICAgV2hlcmUgImNodW5rIiBpcyB0aGUgZnJvbnQgb2YgdGhlIGNodW5rIGZvciB0aGUgcHVycG9zZSBvZiBtb3N0IG9mCkBAIC0xMTkxLDIwICsxMTg0LDIwIEBACiAgICAgRnJlZSBjaHVua3MgYXJlIHN0b3JlZCBpbiBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3RzLCBhbmQgbG9vayBsaWtlIHRoaXM6CiAKICAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKICAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CiAgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgfAotICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlIChtYXkgYmUgMCBieXRlcyBsb25nKSAgICAgICAgICAgICAgICAuCi0gICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgotICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBVbnVzZWQgc3BhY2UgKG1heSBiZSAwIGJ5dGVzIGxvbmcpICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIG5leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCiAgICAgYGZvb3Q6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKIAogICAgIFRoZSBQIChQUkVWX0lOVVNFKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIGxvdy1vcmRlciBiaXQgb2YgdGhlCiAgICAgY2h1bmsgc2l6ZSAod2hpY2ggaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgdHdvIHdvcmRzKSwgaXMgYW4gaW4tdXNlCkBAIC0xMjIxLDE2ICsxMjE0LDE2IEBACiAgICAgVGhlIHR3byBleGNlcHRpb25zIHRvIGFsbCB0aGlzIGFyZQogCiAgICAgIDEuIFRoZSBzcGVjaWFsIGNodW5rIGB0b3AnLCB3aGljaCBkb2Vzbid0IGJvdGhlciB1c2luZyB0aGUKLSAgICAgICAgdHJhaWxpbmcgc2l6ZSBmaWVsZCBzaW5jZSB0aGVyZSBpcyBubwotICAgICAgICBuZXh0IGNvbnRpZ3VvdXMgY2h1bmsgdGhhdCB3b3VsZCBoYXZlIHRvIGluZGV4IG9mZiBpdC4gKEFmdGVyCi0gICAgICAgIGluaXRpYWxpemF0aW9uLCBgdG9wJyBpcyBmb3JjZWQgdG8gYWx3YXlzIGV4aXN0LiAgSWYgaXQgd291bGQKLSAgICAgICAgYmVjb21lIGxlc3MgdGhhbiBNSU5TSVpFIGJ5dGVzIGxvbmcsIGl0IGlzIHJlcGxlbmlzaGVkIHZpYQotICAgICAgICBtYWxsb2NfZXh0ZW5kX3RvcC4pCisJdHJhaWxpbmcgc2l6ZSBmaWVsZCBzaW5jZSB0aGVyZSBpcyBubworCW5leHQgY29udGlndW91cyBjaHVuayB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiAoQWZ0ZXIKKwlpbml0aWFsaXphdGlvbiwgYHRvcCcgaXMgZm9yY2VkIHRvIGFsd2F5cyBleGlzdC4gIElmIGl0IHdvdWxkCisJYmVjb21lIGxlc3MgdGhhbiBNSU5TSVpFIGJ5dGVzIGxvbmcsIGl0IGlzIHJlcGxlbmlzaGVkIHZpYQorCW1hbGxvY19leHRlbmRfdG9wLikKIAogICAgICAyLiBDaHVua3MgYWxsb2NhdGVkIHZpYSBtbWFwLCB3aGljaCBoYXZlIHRoZSBzZWNvbmQtbG93ZXN0LW9yZGVyCi0gICAgICAgIGJpdCAoSVNfTU1BUFBFRCkgc2V0IGluIHRoZWlyIHNpemUgZmllbGRzLiAgQmVjYXVzZSB0aGV5IGFyZQotICAgICAgICBuZXZlciBtZXJnZWQgb3IgdHJhdmVyc2VkIGZyb20gYW55IG90aGVyIGNodW5rLCB0aGV5IGhhdmUgbm8KLSAgICAgICAgZm9vdCBzaXplIG9yIGludXNlIGluZm9ybWF0aW9uLgorCWJpdCAoSVNfTU1BUFBFRCkgc2V0IGluIHRoZWlyIHNpemUgZmllbGRzLiAgQmVjYXVzZSB0aGV5IGFyZQorCW5ldmVyIG1lcmdlZCBvciB0cmF2ZXJzZWQgZnJvbSBhbnkgb3RoZXIgY2h1bmssIHRoZXkgaGF2ZSBubworCWZvb3Qgc2l6ZSBvciBpbnVzZSBpbmZvcm1hdGlvbi4KIAogICAgIEF2YWlsYWJsZSBjaHVua3MgYXJlIGtlcHQgaW4gYW55IG9mIHNldmVyYWwgcGxhY2VzIChhbGwgZGVjbGFyZWQgYmVsb3cpOgogCkBAIC0xMjczLDcgKzEyNjYsNiBAQAogKi8KIAogCi0KIAwKIAogCkBAIC0xNTA2LDcgKzE0OTgsNyBAQAogICgoKCh1bnNpZ25lZCBsb25nKShzeikpID4+IDkpIDw9ICAgODQpID8gMTEwICsgKCgodW5zaWduZWQgbG9uZykoc3opKSA+PiAxMik6IFwKICAoKCgodW5zaWduZWQgbG9uZykoc3opKSA+PiA5KSA8PSAgMzQwKSA/IDExOSArICgoKHVuc2lnbmVkIGxvbmcpKHN6KSkgPj4gMTUpOiBcCiAgKCgoKHVuc2lnbmVkIGxvbmcpKHN6KSkgPj4gOSkgPD0gMTM2NCkgPyAxMjQgKyAoKCh1bnNpZ25lZCBsb25nKShzeikpID4+IDE4KTogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI2KQorCQkJCQkgIDEyNikKIC8qCiAgIGJpbnMgZm9yIGNodW5rcyA8IDUxMiBhcmUgYWxsIHNwYWNlZCA4IGJ5dGVzIGFwYXJ0LCBhbmQgaG9sZAogICBpZGVudGljYWxseSBzaXplZCBjaHVua3MuIFRoaXMgaXMgZXhwbG9pdGVkIGluIG1hbGxvYy4KQEAgLTE3OTQsNyArMTc4Niw2IEBACiAgIChsYXN0X3JlbWFpbmRlci0+ZmQgPSBsYXN0X3JlbWFpbmRlci0+YmsgPSBsYXN0X3JlbWFpbmRlcikKIAogCi0KIAwKIAogCkBAIC0xOTk1LDcgKzE5ODYsNyBAQAogICAgIC8qIEd1YXJhbnRlZSB0aGUgbmV4dCBicmsgd2lsbCBiZSBhdCBhIHBhZ2UgYm91bmRhcnkgKi8KIAogICAgIGNvcnJlY3Rpb24gKz0gKCgoKHVuc2lnbmVkIGxvbmcpKGJyayArIHNicmtfc2l6ZSkpKyhwYWdlc3otMSkpICYKLSAgICAgICAgICAgICAgICAgICB+KHBhZ2VzeiAtIDEpKSAtICgodW5zaWduZWQgbG9uZykoYnJrICsgc2Jya19zaXplKSk7CisJCSAgIH4ocGFnZXN6IC0gMSkpIC0gKCh1bnNpZ25lZCBsb25nKShicmsgKyBzYnJrX3NpemUpKTsKIAogICAgIC8qIEFsbG9jYXRlIGNvcnJlY3Rpb24gKi8KICAgICBuZXdfYnJrID0gKGNoYXIqKShNT1JFQ09SRSAoY29ycmVjdGlvbikpOwpAQCAtMjAxNiwyMCArMjAwNywyMCBAQAogICAgICAgLyogSWYgbm90IGVub3VnaCBzcGFjZSB0byBkbyB0aGlzLCB0aGVuIHVzZXIgZGlkIHNvbWV0aGluZyB2ZXJ5IHdyb25nICovCiAgICAgICBpZiAob2xkX3RvcF9zaXplIDwgTUlOU0laRSkKICAgICAgIHsKLSAgICAgICAgc2V0X2hlYWQodG9wLCBQUkVWX0lOVVNFKTsgLyogd2lsbCBmb3JjZSBudWxsIHJldHVybiBmcm9tIG1hbGxvYyAqLwotICAgICAgICByZXR1cm47CisJc2V0X2hlYWQodG9wLCBQUkVWX0lOVVNFKTsgLyogd2lsbCBmb3JjZSBudWxsIHJldHVybiBmcm9tIG1hbGxvYyAqLworCXJldHVybjsKICAgICAgIH0KIAogICAgICAgLyogQWxzbyBrZWVwIHNpemUgYSBtdWx0aXBsZSBvZiBNQUxMT0NfQUxJR05NRU5UICovCiAgICAgICBvbGRfdG9wX3NpemUgPSAob2xkX3RvcF9zaXplIC0gMypTSVpFX1NaKSAmIH5NQUxMT0NfQUxJR05fTUFTSzsKICAgICAgIHNldF9oZWFkX3NpemUob2xkX3RvcCwgb2xkX3RvcF9zaXplKTsKICAgICAgIGNodW5rX2F0X29mZnNldChvbGRfdG9wLCBvbGRfdG9wX3NpemUgICAgICAgICAgKS0+c2l6ZSA9Ci0gICAgICAgIFNJWkVfU1p8UFJFVl9JTlVTRTsKKwlTSVpFX1NafFBSRVZfSU5VU0U7CiAgICAgICBjaHVua19hdF9vZmZzZXQob2xkX3RvcCwgb2xkX3RvcF9zaXplICsgU0laRV9TWiktPnNpemUgPQotICAgICAgICBTSVpFX1NafFBSRVZfSU5VU0U7CisJU0laRV9TWnxQUkVWX0lOVVNFOwogICAgICAgLyogSWYgcG9zc2libGUsIHJlbGVhc2UgdGhlIHJlc3QuICovCiAgICAgICBpZiAob2xkX3RvcF9zaXplID49IE1JTlNJWkUpCi0gICAgICAgIGZSRWUoY2h1bmsybWVtKG9sZF90b3ApKTsKKwlmUkVlKGNodW5rMm1lbShvbGRfdG9wKSk7CiAgICAgfQogICB9CiAKQEAgLTIwNjAsNDMgKzIwNTEsNDMgQEAKICAgICBGcm9tIHRoZXJlLCB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzIGlzIHRha2VuOgogCiAgICAgICAxLiBUaGUgYmluIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlcXVlc3Qgc2l6ZSBpcyBzY2FubmVkLCBhbmQgaWYKLSAgICAgICAgIGEgY2h1bmsgb2YgZXhhY3RseSB0aGUgcmlnaHQgc2l6ZSBpcyBmb3VuZCwgaXQgaXMgdGFrZW4uCisJIGEgY2h1bmsgb2YgZXhhY3RseSB0aGUgcmlnaHQgc2l6ZSBpcyBmb3VuZCwgaXQgaXMgdGFrZW4uCiAKICAgICAgIDIuIFRoZSBtb3N0IHJlY2VudGx5IHJlbWFpbmRlcmVkIGNodW5rIGlzIHVzZWQgaWYgaXQgaXMgYmlnCi0gICAgICAgICBlbm91Z2guICBUaGlzIGlzIGEgZm9ybSBvZiAocm92aW5nKSBmaXJzdCBmaXQsIHVzZWQgb25seSBpbgotICAgICAgICAgdGhlIGFic2VuY2Ugb2YgZXhhY3QgZml0cy4gUnVucyBvZiBjb25zZWN1dGl2ZSByZXF1ZXN0cyB1c2UKLSAgICAgICAgIHRoZSByZW1haW5kZXIgb2YgdGhlIGNodW5rIHVzZWQgZm9yIHRoZSBwcmV2aW91cyBzdWNoIHJlcXVlc3QKLSAgICAgICAgIHdoZW5ldmVyIHBvc3NpYmxlLiBUaGlzIGxpbWl0ZWQgdXNlIG9mIGEgZmlyc3QtZml0IHN0eWxlCi0gICAgICAgICBhbGxvY2F0aW9uIHN0cmF0ZWd5IHRlbmRzIHRvIGdpdmUgY29udGlndW91cyBjaHVua3MKLSAgICAgICAgIGNvZXh0ZW5zaXZlIGxpZmV0aW1lcywgd2hpY2ggaW1wcm92ZXMgbG9jYWxpdHkgYW5kIGNhbiByZWR1Y2UKLSAgICAgICAgIGZyYWdtZW50YXRpb24gaW4gdGhlIGxvbmcgcnVuLgorCSBlbm91Z2guICBUaGlzIGlzIGEgZm9ybSBvZiAocm92aW5nKSBmaXJzdCBmaXQsIHVzZWQgb25seSBpbgorCSB0aGUgYWJzZW5jZSBvZiBleGFjdCBmaXRzLiBSdW5zIG9mIGNvbnNlY3V0aXZlIHJlcXVlc3RzIHVzZQorCSB0aGUgcmVtYWluZGVyIG9mIHRoZSBjaHVuayB1c2VkIGZvciB0aGUgcHJldmlvdXMgc3VjaCByZXF1ZXN0CisJIHdoZW5ldmVyIHBvc3NpYmxlLiBUaGlzIGxpbWl0ZWQgdXNlIG9mIGEgZmlyc3QtZml0IHN0eWxlCisJIGFsbG9jYXRpb24gc3RyYXRlZ3kgdGVuZHMgdG8gZ2l2ZSBjb250aWd1b3VzIGNodW5rcworCSBjb2V4dGVuc2l2ZSBsaWZldGltZXMsIHdoaWNoIGltcHJvdmVzIGxvY2FsaXR5IGFuZCBjYW4gcmVkdWNlCisJIGZyYWdtZW50YXRpb24gaW4gdGhlIGxvbmcgcnVuLgogCiAgICAgICAzLiBPdGhlciBiaW5zIGFyZSBzY2FubmVkIGluIGluY3JlYXNpbmcgc2l6ZSBvcmRlciwgdXNpbmcgYQotICAgICAgICAgY2h1bmsgYmlnIGVub3VnaCB0byBmdWxmaWxsIHRoZSByZXF1ZXN0LCBhbmQgc3BsaXR0aW5nIG9mZgotICAgICAgICAgYW55IHJlbWFpbmRlci4gIFRoaXMgc2VhcmNoIGlzIHN0cmljdGx5IGJ5IGJlc3QtZml0OyBpLmUuLAotICAgICAgICAgdGhlIHNtYWxsZXN0ICh3aXRoIHRpZXMgZ29pbmcgdG8gYXBwcm94aW1hdGVseSB0aGUgbGVhc3QKLSAgICAgICAgIHJlY2VudGx5IHVzZWQpIGNodW5rIHRoYXQgZml0cyBpcyBzZWxlY3RlZC4KKwkgY2h1bmsgYmlnIGVub3VnaCB0byBmdWxmaWxsIHRoZSByZXF1ZXN0LCBhbmQgc3BsaXR0aW5nIG9mZgorCSBhbnkgcmVtYWluZGVyLiAgVGhpcyBzZWFyY2ggaXMgc3RyaWN0bHkgYnkgYmVzdC1maXQ7IGkuZS4sCisJIHRoZSBzbWFsbGVzdCAod2l0aCB0aWVzIGdvaW5nIHRvIGFwcHJveGltYXRlbHkgdGhlIGxlYXN0CisJIHJlY2VudGx5IHVzZWQpIGNodW5rIHRoYXQgZml0cyBpcyBzZWxlY3RlZC4KIAogICAgICAgNC4gSWYgbGFyZ2UgZW5vdWdoLCB0aGUgY2h1bmsgYm9yZGVyaW5nIHRoZSBlbmQgb2YgbWVtb3J5Ci0gICAgICAgICAoYHRvcCcpIGlzIHNwbGl0IG9mZi4gKFRoaXMgdXNlIG9mIGB0b3AnIGlzIGluIGFjY29yZCB3aXRoCi0gICAgICAgICB0aGUgYmVzdC1maXQgc2VhcmNoIHJ1bGUuICBJbiBlZmZlY3QsIGB0b3AnIGlzIHRyZWF0ZWQgYXMKLSAgICAgICAgIGxhcmdlciAoYW5kIHRodXMgbGVzcyB3ZWxsIGZpdHRpbmcpIHRoYW4gYW55IG90aGVyIGF2YWlsYWJsZQotICAgICAgICAgY2h1bmsgc2luY2UgaXQgY2FuIGJlIGV4dGVuZGVkIHRvIGJlIGFzIGxhcmdlIGFzIG5lY2Vzc2FyeQotICAgICAgICAgKHVwIHRvIHN5c3RlbSBsaW1pdGF0aW9ucykuCisJIChgdG9wJykgaXMgc3BsaXQgb2ZmLiAoVGhpcyB1c2Ugb2YgYHRvcCcgaXMgaW4gYWNjb3JkIHdpdGgKKwkgdGhlIGJlc3QtZml0IHNlYXJjaCBydWxlLiAgSW4gZWZmZWN0LCBgdG9wJyBpcyB0cmVhdGVkIGFzCisJIGxhcmdlciAoYW5kIHRodXMgbGVzcyB3ZWxsIGZpdHRpbmcpIHRoYW4gYW55IG90aGVyIGF2YWlsYWJsZQorCSBjaHVuayBzaW5jZSBpdCBjYW4gYmUgZXh0ZW5kZWQgdG8gYmUgYXMgbGFyZ2UgYXMgbmVjZXNzYXJ5CisJICh1cCB0byBzeXN0ZW0gbGltaXRhdGlvbnMpLgogCiAgICAgICA1LiBJZiB0aGUgcmVxdWVzdCBzaXplIG1lZXRzIHRoZSBtbWFwIHRocmVzaG9sZCBhbmQgdGhlCi0gICAgICAgICBzeXN0ZW0gc3VwcG9ydHMgbW1hcCwgYW5kIHRoZXJlIGFyZSBmZXcgZW5vdWdoIGN1cnJlbnRseQotICAgICAgICAgYWxsb2NhdGVkIG1tYXBwZWQgcmVnaW9ucywgYW5kIGEgY2FsbCB0byBtbWFwIHN1Y2NlZWRzLAotICAgICAgICAgdGhlIHJlcXVlc3QgaXMgYWxsb2NhdGVkIHZpYSBkaXJlY3QgbWVtb3J5IG1hcHBpbmcuCisJIHN5c3RlbSBzdXBwb3J0cyBtbWFwLCBhbmQgdGhlcmUgYXJlIGZldyBlbm91Z2ggY3VycmVudGx5CisJIGFsbG9jYXRlZCBtbWFwcGVkIHJlZ2lvbnMsIGFuZCBhIGNhbGwgdG8gbW1hcCBzdWNjZWVkcywKKwkgdGhlIHJlcXVlc3QgaXMgYWxsb2NhdGVkIHZpYSBkaXJlY3QgbWVtb3J5IG1hcHBpbmcuCiAKICAgICAgIDYuIE90aGVyd2lzZSwgdGhlIHRvcCBvZiBtZW1vcnkgaXMgZXh0ZW5kZWQgYnkKLSAgICAgICAgIG9idGFpbmluZyBtb3JlIHNwYWNlIGZyb20gdGhlIHN5c3RlbSAobm9ybWFsbHkgdXNpbmcgc2JyaywKLSAgICAgICAgIGJ1dCBkZWZpbmFibGUgdG8gYW55dGhpbmcgZWxzZSB2aWEgdGhlIE1PUkVDT1JFIG1hY3JvKS4KLSAgICAgICAgIE1lbW9yeSBpcyBnYXRoZXJlZCBmcm9tIHRoZSBzeXN0ZW0gKGluIHN5c3RlbSBwYWdlLXNpemVkCi0gICAgICAgICB1bml0cykgaW4gYSB3YXkgdGhhdCBhbGxvd3MgY2h1bmtzIG9idGFpbmVkIGFjcm9zcyBkaWZmZXJlbnQKLSAgICAgICAgIHNicmsgY2FsbHMgdG8gYmUgY29uc29saWRhdGVkLCBidXQgZG9lcyBub3QgcmVxdWlyZQotICAgICAgICAgY29udGlndW91cyBtZW1vcnkuIFRodXMsIGl0IHNob3VsZCBiZSBzYWZlIHRvIGludGVyc3BlcnNlCi0gICAgICAgICBtYWxsb2NzIHdpdGggb3RoZXIgc2JyayBjYWxscy4KKwkgb2J0YWluaW5nIG1vcmUgc3BhY2UgZnJvbSB0aGUgc3lzdGVtIChub3JtYWxseSB1c2luZyBzYnJrLAorCSBidXQgZGVmaW5hYmxlIHRvIGFueXRoaW5nIGVsc2UgdmlhIHRoZSBNT1JFQ09SRSBtYWNybykuCisJIE1lbW9yeSBpcyBnYXRoZXJlZCBmcm9tIHRoZSBzeXN0ZW0gKGluIHN5c3RlbSBwYWdlLXNpemVkCisJIHVuaXRzKSBpbiBhIHdheSB0aGF0IGFsbG93cyBjaHVua3Mgb2J0YWluZWQgYWNyb3NzIGRpZmZlcmVudAorCSBzYnJrIGNhbGxzIHRvIGJlIGNvbnNvbGlkYXRlZCwgYnV0IGRvZXMgbm90IHJlcXVpcmUKKwkgY29udGlndW91cyBtZW1vcnkuIFRodXMsIGl0IHNob3VsZCBiZSBzYWZlIHRvIGludGVyc3BlcnNlCisJIG1hbGxvY3Mgd2l0aCBvdGhlciBzYnJrIGNhbGxzLgogCiAKICAgICAgIEFsbCBhbGxvY2F0aW9ucyBhcmUgbWFkZSBmcm9tIHRoZSB0aGUgYGxvd2VzdCcgcGFydCBvZiBhbnkgZm91bmQKQEAgLTIxNzMsMTYgKzIxNjQsMTYgQEAKIAogICAgICAgaWYgKHJlbWFpbmRlcl9zaXplID49IChsb25nKU1JTlNJWkUpIC8qIHRvbyBiaWcgKi8KICAgICAgIHsKLSAgICAgICAgLS1pZHg7IC8qIGFkanVzdCB0byByZXNjYW4gYmVsb3cgYWZ0ZXIgY2hlY2tpbmcgbGFzdCByZW1haW5kZXIgKi8KLSAgICAgICAgYnJlYWs7CisJLS1pZHg7IC8qIGFkanVzdCB0byByZXNjYW4gYmVsb3cgYWZ0ZXIgY2hlY2tpbmcgbGFzdCByZW1haW5kZXIgKi8KKwlicmVhazsKICAgICAgIH0KIAogICAgICAgZWxzZSBpZiAocmVtYWluZGVyX3NpemUgPj0gMCkgLyogZXhhY3QgZml0ICovCiAgICAgICB7Ci0gICAgICAgIHVubGluayh2aWN0aW0sIGJjaywgZndkKTsKLSAgICAgICAgc2V0X2ludXNlX2JpdF9hdF9vZmZzZXQodmljdGltLCB2aWN0aW1fc2l6ZSk7Ci0gICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHZpY3RpbSwgbmIpOwotICAgICAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7CisJdW5saW5rKHZpY3RpbSwgYmNrLCBmd2QpOworCXNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KHZpY3RpbSwgdmljdGltX3NpemUpOworCWNoZWNrX21hbGxvY2VkX2NodW5rKHZpY3RpbSwgbmIpOworCXJldHVybiBjaHVuazJtZW0odmljdGltKTsKICAgICAgIH0KICAgICB9CiAKQEAgLTIyMzksOCArMjIzMCw4IEBACiAgICAgICBibG9jayA8PD0gMTsKICAgICAgIHdoaWxlICgoYmxvY2sgJiBiaW5ibG9ja3MpID09IDApCiAgICAgICB7Ci0gICAgICAgIGlkeCArPSBCSU5CTE9DS1dJRFRIOwotICAgICAgICBibG9jayA8PD0gMTsKKwlpZHggKz0gQklOQkxPQ0tXSURUSDsKKwlibG9jayA8PD0gMTsKICAgICAgIH0KICAgICB9CiAKQEAgLTIyNTMsMzQgKzIyNDQsMzQgQEAKICAgICAgIC8qIEZvciBlYWNoIGJpbiBpbiB0aGlzIGJsb2NrIC4uLiAqLwogICAgICAgZG8KICAgICAgIHsKLSAgICAgICAgLyogRmluZCBhbmQgdXNlIGZpcnN0IGJpZyBlbm91Z2ggY2h1bmsgLi4uICovCisJLyogRmluZCBhbmQgdXNlIGZpcnN0IGJpZyBlbm91Z2ggY2h1bmsgLi4uICovCiAKLSAgICAgICAgZm9yICh2aWN0aW0gPSBsYXN0KGJpbik7IHZpY3RpbSAhPSBiaW47IHZpY3RpbSA9IHZpY3RpbS0+YmspCi0gICAgICAgIHsKLSAgICAgICAgICB2aWN0aW1fc2l6ZSA9IGNodW5rc2l6ZSh2aWN0aW0pOwotICAgICAgICAgIHJlbWFpbmRlcl9zaXplID0gdmljdGltX3NpemUgLSBuYjsKKwlmb3IgKHZpY3RpbSA9IGxhc3QoYmluKTsgdmljdGltICE9IGJpbjsgdmljdGltID0gdmljdGltLT5iaykKKwl7CisJICB2aWN0aW1fc2l6ZSA9IGNodW5rc2l6ZSh2aWN0aW0pOworCSAgcmVtYWluZGVyX3NpemUgPSB2aWN0aW1fc2l6ZSAtIG5iOwogCi0gICAgICAgICAgaWYgKHJlbWFpbmRlcl9zaXplID49IChsb25nKU1JTlNJWkUpIC8qIHNwbGl0ICovCi0gICAgICAgICAgewotICAgICAgICAgICAgcmVtYWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KHZpY3RpbSwgbmIpOwotICAgICAgICAgICAgc2V0X2hlYWQodmljdGltLCBuYiB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgICAgdW5saW5rKHZpY3RpbSwgYmNrLCBmd2QpOwotICAgICAgICAgICAgbGlua19sYXN0X3JlbWFpbmRlcihyZW1haW5kZXIpOwotICAgICAgICAgICAgc2V0X2hlYWQocmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgICAgc2V0X2Zvb3QocmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7Ci0gICAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKLSAgICAgICAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKLSAgICAgICAgICB9CisJICBpZiAocmVtYWluZGVyX3NpemUgPj0gKGxvbmcpTUlOU0laRSkgLyogc3BsaXQgKi8KKwkgIHsKKwkgICAgcmVtYWluZGVyID0gY2h1bmtfYXRfb2Zmc2V0KHZpY3RpbSwgbmIpOworCSAgICBzZXRfaGVhZCh2aWN0aW0sIG5iIHwgUFJFVl9JTlVTRSk7CisJICAgIHVubGluayh2aWN0aW0sIGJjaywgZndkKTsKKwkgICAgbGlua19sYXN0X3JlbWFpbmRlcihyZW1haW5kZXIpOworCSAgICBzZXRfaGVhZChyZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplIHwgUFJFVl9JTlVTRSk7CisJICAgIHNldF9mb290KHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUpOworCSAgICBjaGVja19tYWxsb2NlZF9jaHVuayh2aWN0aW0sIG5iKTsKKwkgICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOworCSAgfQogCi0gICAgICAgICAgZWxzZSBpZiAocmVtYWluZGVyX3NpemUgPj0gMCkgIC8qIHRha2UgKi8KLSAgICAgICAgICB7Ci0gICAgICAgICAgICBzZXRfaW51c2VfYml0X2F0X29mZnNldCh2aWN0aW0sIHZpY3RpbV9zaXplKTsKLSAgICAgICAgICAgIHVubGluayh2aWN0aW0sIGJjaywgZndkKTsKLSAgICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHZpY3RpbSwgbmIpOwotICAgICAgICAgICAgcmV0dXJuIGNodW5rMm1lbSh2aWN0aW0pOwotICAgICAgICAgIH0KKwkgIGVsc2UgaWYgKHJlbWFpbmRlcl9zaXplID49IDApICAvKiB0YWtlICovCisJICB7CisJICAgIHNldF9pbnVzZV9iaXRfYXRfb2Zmc2V0KHZpY3RpbSwgdmljdGltX3NpemUpOworCSAgICB1bmxpbmsodmljdGltLCBiY2ssIGZ3ZCk7CisJICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKHZpY3RpbSwgbmIpOworCSAgICByZXR1cm4gY2h1bmsybWVtKHZpY3RpbSk7CisJICB9CiAKLSAgICAgICAgfQorCX0KIAogICAgICAgIGJpbiA9IG5leHRfYmluKGJpbik7CiAKQEAgLTIyOTAsMTIgKzIyODEsMTIgQEAKIAogICAgICAgZG8gICAvKiBQb3NzaWJseSBiYWNrdHJhY2sgdG8gdHJ5IHRvIGNsZWFyIGEgcGFydGlhbCBibG9jayAqLwogICAgICAgewotICAgICAgICBpZiAoKHN0YXJ0aWR4ICYgKEJJTkJMT0NLV0lEVEggLSAxKSkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIGJpbmJsb2NrcyAmPSB+YmxvY2s7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgLS1zdGFydGlkeDsKKwlpZiAoKHN0YXJ0aWR4ICYgKEJJTkJMT0NLV0lEVEggLSAxKSkgPT0gMCkKKwl7CisJICBiaW5ibG9ja3MgJj0gfmJsb2NrOworCSAgYnJlYWs7CisJfQorCS0tc3RhcnRpZHg7CiAgICAgICAgcSA9IHByZXZfYmluKHEpOwogICAgICAgfSB3aGlsZSAoZmlyc3QocSkgPT0gcSk7CiAKQEAgLTIzMDMsMTQgKzIyOTQsMTQgQEAKIAogICAgICAgaWYgKCAoYmxvY2sgPDw9IDEpIDw9IGJpbmJsb2NrcyAmJiAoYmxvY2sgIT0gMCkgKQogICAgICAgewotICAgICAgICB3aGlsZSAoKGJsb2NrICYgYmluYmxvY2tzKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgaWR4ICs9IEJJTkJMT0NLV0lEVEg7Ci0gICAgICAgICAgYmxvY2sgPDw9IDE7Ci0gICAgICAgIH0KKwl3aGlsZSAoKGJsb2NrICYgYmluYmxvY2tzKSA9PSAwKQorCXsKKwkgIGlkeCArPSBCSU5CTE9DS1dJRFRIOworCSAgYmxvY2sgPDw9IDE7CisJfQogICAgICAgfQogICAgICAgZWxzZQotICAgICAgICBicmVhazsKKwlicmVhazsKICAgICB9CiAgIH0KIApAQCAtMjMyNCw3ICsyMzE1LDcgQEAKICNpZiBIQVZFX01NQVAKICAgICAvKiBJZiBiaWcgYW5kIHdvdWxkIG90aGVyd2lzZSBuZWVkIHRvIGV4dGVuZCwgdHJ5IHRvIHVzZSBtbWFwIGluc3RlYWQgKi8KICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpbmIgPj0gKHVuc2lnbmVkIGxvbmcpbW1hcF90aHJlc2hvbGQgJiYKLSAgICAgICAgKHZpY3RpbSA9IG1tYXBfY2h1bmsobmIpKSAhPSAwKQorCSh2aWN0aW0gPSBtbWFwX2NodW5rKG5iKSkgIT0gMCkKICAgICAgIHJldHVybiBjaHVuazJtZW0odmljdGltKTsKICNlbmRpZgogCkBAIC0yMzU3LDEzICsyMzQ4LDEzIEBACiAgICAgICAgMi4gSWYgdGhlIGNodW5rIHdhcyBhbGxvY2F0ZWQgdmlhIG1tYXAsIGl0IGlzIHJlbGVhc2UgdmlhIG11bm1hcCgpLgogCiAgICAgICAgMy4gSWYgYSByZXR1cm5lZCBjaHVuayBib3JkZXJzIHRoZSBjdXJyZW50IGhpZ2ggZW5kIG9mIG1lbW9yeSwKLSAgICAgICAgICBpdCBpcyBjb25zb2xpZGF0ZWQgaW50byB0aGUgdG9wLCBhbmQgaWYgdGhlIHRvdGFsIHVudXNlZAotICAgICAgICAgIHRvcG1vc3QgbWVtb3J5IGV4Y2VlZHMgdGhlIHRyaW0gdGhyZXNob2xkLCBtYWxsb2NfdHJpbSBpcwotICAgICAgICAgIGNhbGxlZC4KKwkgIGl0IGlzIGNvbnNvbGlkYXRlZCBpbnRvIHRoZSB0b3AsIGFuZCBpZiB0aGUgdG90YWwgdW51c2VkCisJICB0b3Btb3N0IG1lbW9yeSBleGNlZWRzIHRoZSB0cmltIHRocmVzaG9sZCwgbWFsbG9jX3RyaW0gaXMKKwkgIGNhbGxlZC4KIAogICAgICAgIDQuIE90aGVyIGNodW5rcyBhcmUgY29uc29saWRhdGVkIGFzIHRoZXkgYXJyaXZlLCBhbmQKLSAgICAgICAgICBwbGFjZWQgaW4gY29ycmVzcG9uZGluZyBiaW5zLiAoVGhpcyBpbmNsdWRlcyB0aGUgY2FzZSBvZgotICAgICAgICAgIGNvbnNvbGlkYXRpbmcgd2l0aCB0aGUgY3VycmVudCBgbGFzdF9yZW1haW5kZXInKS4KKwkgIHBsYWNlZCBpbiBjb3JyZXNwb25kaW5nIGJpbnMuIChUaGlzIGluY2x1ZGVzIHRoZSBjYXNlIG9mCisJICBjb25zb2xpZGF0aW5nIHdpdGggdGhlIGN1cnJlbnQgYGxhc3RfcmVtYWluZGVyJykuCiAKICovCiAKQEAgLTI1NzUsMjIgKzI1NjYsMjIgQEAKICAgICAgIC8qIEZvcndhcmQgaW50byB0b3Agb25seSBpZiBhIHJlbWFpbmRlciAqLwogICAgICAgaWYgKG5leHQgPT0gdG9wKQogICAgICAgewotICAgICAgICBpZiAoKGxvbmcpKG5leHRzaXplICsgbmV3c2l6ZSkgPj0gKGxvbmcpKG5iICsgTUlOU0laRSkpCi0gICAgICAgIHsKLSAgICAgICAgICBuZXdzaXplICs9IG5leHRzaXplOwotICAgICAgICAgIHRvcCA9IGNodW5rX2F0X29mZnNldChvbGRwLCBuYik7Ci0gICAgICAgICAgc2V0X2hlYWQodG9wLCAobmV3c2l6ZSAtIG5iKSB8IFBSRVZfSU5VU0UpOwotICAgICAgICAgIHNldF9oZWFkX3NpemUob2xkcCwgbmIpOwotICAgICAgICAgIHJldHVybiBjaHVuazJtZW0ob2xkcCk7Ci0gICAgICAgIH0KKwlpZiAoKGxvbmcpKG5leHRzaXplICsgbmV3c2l6ZSkgPj0gKGxvbmcpKG5iICsgTUlOU0laRSkpCisJeworCSAgbmV3c2l6ZSArPSBuZXh0c2l6ZTsKKwkgIHRvcCA9IGNodW5rX2F0X29mZnNldChvbGRwLCBuYik7CisJICBzZXRfaGVhZCh0b3AsIChuZXdzaXplIC0gbmIpIHwgUFJFVl9JTlVTRSk7CisJICBzZXRfaGVhZF9zaXplKG9sZHAsIG5iKTsKKwkgIHJldHVybiBjaHVuazJtZW0ob2xkcCk7CisJfQogICAgICAgfQogCiAgICAgICAvKiBGb3J3YXJkIGludG8gbmV4dCBjaHVuayAqLwogICAgICAgZWxzZSBpZiAoKChsb25nKShuZXh0c2l6ZSArIG5ld3NpemUpID49IChsb25nKShuYikpKQogICAgICAgewotICAgICAgICB1bmxpbmsobmV4dCwgYmNrLCBmd2QpOwotICAgICAgICBuZXdzaXplICArPSBuZXh0c2l6ZTsKLSAgICAgICAgZ290byBzcGxpdDsKKwl1bmxpbmsobmV4dCwgYmNrLCBmd2QpOworCW5ld3NpemUgICs9IG5leHRzaXplOworCWdvdG8gc3BsaXQ7CiAgICAgICB9CiAgICAgfQogICAgIGVsc2UKQEAgLTI2MTAsNDUgKzI2MDEsNDUgQEAKIAogICAgICAgaWYgKG5leHQgIT0gMCkKICAgICAgIHsKLSAgICAgICAgLyogaW50byB0b3AgKi8KLSAgICAgICAgaWYgKG5leHQgPT0gdG9wKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKChsb25nKShuZXh0c2l6ZSArIHByZXZzaXplICsgbmV3c2l6ZSkgPj0gKGxvbmcpKG5iICsgTUlOU0laRSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgdW5saW5rKHByZXYsIGJjaywgZndkKTsKLSAgICAgICAgICAgIG5ld3AgPSBwcmV2OwotICAgICAgICAgICAgbmV3c2l6ZSArPSBwcmV2c2l6ZSArIG5leHRzaXplOwotICAgICAgICAgICAgbmV3bWVtID0gY2h1bmsybWVtKG5ld3ApOwotICAgICAgICAgICAgTUFMTE9DX0NPUFkobmV3bWVtLCBvbGRtZW0sIG9sZHNpemUgLSBTSVpFX1NaKTsKLSAgICAgICAgICAgIHRvcCA9IGNodW5rX2F0X29mZnNldChuZXdwLCBuYik7Ci0gICAgICAgICAgICBzZXRfaGVhZCh0b3AsIChuZXdzaXplIC0gbmIpIHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgICAgICBzZXRfaGVhZF9zaXplKG5ld3AsIG5iKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdtZW07Ci0gICAgICAgICAgfQotICAgICAgICB9CisJLyogaW50byB0b3AgKi8KKwlpZiAobmV4dCA9PSB0b3ApCisJeworCSAgaWYgKChsb25nKShuZXh0c2l6ZSArIHByZXZzaXplICsgbmV3c2l6ZSkgPj0gKGxvbmcpKG5iICsgTUlOU0laRSkpCisJICB7CisJICAgIHVubGluayhwcmV2LCBiY2ssIGZ3ZCk7CisJICAgIG5ld3AgPSBwcmV2OworCSAgICBuZXdzaXplICs9IHByZXZzaXplICsgbmV4dHNpemU7CisJICAgIG5ld21lbSA9IGNodW5rMm1lbShuZXdwKTsKKwkgICAgTUFMTE9DX0NPUFkobmV3bWVtLCBvbGRtZW0sIG9sZHNpemUgLSBTSVpFX1NaKTsKKwkgICAgdG9wID0gY2h1bmtfYXRfb2Zmc2V0KG5ld3AsIG5iKTsKKwkgICAgc2V0X2hlYWQodG9wLCAobmV3c2l6ZSAtIG5iKSB8IFBSRVZfSU5VU0UpOworCSAgICBzZXRfaGVhZF9zaXplKG5ld3AsIG5iKTsKKwkgICAgcmV0dXJuIG5ld21lbTsKKwkgIH0KKwl9CiAKLSAgICAgICAgLyogaW50byBuZXh0IGNodW5rICovCi0gICAgICAgIGVsc2UgaWYgKCgobG9uZykobmV4dHNpemUgKyBwcmV2c2l6ZSArIG5ld3NpemUpID49IChsb25nKShuYikpKQotICAgICAgICB7Ci0gICAgICAgICAgdW5saW5rKG5leHQsIGJjaywgZndkKTsKLSAgICAgICAgICB1bmxpbmsocHJldiwgYmNrLCBmd2QpOwotICAgICAgICAgIG5ld3AgPSBwcmV2OwotICAgICAgICAgIG5ld3NpemUgKz0gbmV4dHNpemUgKyBwcmV2c2l6ZTsKLSAgICAgICAgICBuZXdtZW0gPSBjaHVuazJtZW0obmV3cCk7Ci0gICAgICAgICAgTUFMTE9DX0NPUFkobmV3bWVtLCBvbGRtZW0sIG9sZHNpemUgLSBTSVpFX1NaKTsKLSAgICAgICAgICBnb3RvIHNwbGl0OwotICAgICAgICB9CisJLyogaW50byBuZXh0IGNodW5rICovCisJZWxzZSBpZiAoKChsb25nKShuZXh0c2l6ZSArIHByZXZzaXplICsgbmV3c2l6ZSkgPj0gKGxvbmcpKG5iKSkpCisJeworCSAgdW5saW5rKG5leHQsIGJjaywgZndkKTsKKwkgIHVubGluayhwcmV2LCBiY2ssIGZ3ZCk7CisJICBuZXdwID0gcHJldjsKKwkgIG5ld3NpemUgKz0gbmV4dHNpemUgKyBwcmV2c2l6ZTsKKwkgIG5ld21lbSA9IGNodW5rMm1lbShuZXdwKTsKKwkgIE1BTExPQ19DT1BZKG5ld21lbSwgb2xkbWVtLCBvbGRzaXplIC0gU0laRV9TWik7CisJICBnb3RvIHNwbGl0OworCX0KICAgICAgIH0KIAogICAgICAgLyogYmFja3dhcmQgb25seSAqLwogICAgICAgaWYgKHByZXYgIT0gMCAmJiAobG9uZykocHJldnNpemUgKyBuZXdzaXplKSA+PSAobG9uZyluYikKICAgICAgIHsKLSAgICAgICAgdW5saW5rKHByZXYsIGJjaywgZndkKTsKLSAgICAgICAgbmV3cCA9IHByZXY7Ci0gICAgICAgIG5ld3NpemUgKz0gcHJldnNpemU7Ci0gICAgICAgIG5ld21lbSA9IGNodW5rMm1lbShuZXdwKTsKLSAgICAgICAgTUFMTE9DX0NPUFkobmV3bWVtLCBvbGRtZW0sIG9sZHNpemUgLSBTSVpFX1NaKTsKLSAgICAgICAgZ290byBzcGxpdDsKKwl1bmxpbmsocHJldiwgYmNrLCBmd2QpOworCW5ld3AgPSBwcmV2OworCW5ld3NpemUgKz0gcHJldnNpemU7CisJbmV3bWVtID0gY2h1bmsybWVtKG5ld3ApOworCU1BTExPQ19DT1BZKG5ld21lbSwgb2xkbWVtLCBvbGRzaXplIC0gU0laRV9TWik7CisJZ290byBzcGxpdDsKICAgICAgIH0KICAgICB9CiAKQEAgLTI5ODAsMjUgKzI5NzEsMjUgQEAKIAogICAgICAgaWYgKG5ld19icmsgPT0gKGNoYXIqKShNT1JFQ09SRV9GQUlMVVJFKSkgLyogc2JyayBmYWlsZWQ/ICovCiAgICAgICB7Ci0gICAgICAgIC8qIFRyeSB0byBmaWd1cmUgb3V0IHdoYXQgd2UgaGF2ZSAqLwotICAgICAgICBjdXJyZW50X2JyayA9IChjaGFyKikoTU9SRUNPUkUgKDApKTsKLSAgICAgICAgdG9wX3NpemUgPSBjdXJyZW50X2JyayAtIChjaGFyKil0b3A7Ci0gICAgICAgIGlmICh0b3Bfc2l6ZSA+PSAobG9uZylNSU5TSVpFKSAvKiBpZiBub3QsIHdlIGFyZSB2ZXJ5IHZlcnkgZGVhZCEgKi8KLSAgICAgICAgewotICAgICAgICAgIHNicmtlZF9tZW0gPSBjdXJyZW50X2JyayAtIHNicmtfYmFzZTsKLSAgICAgICAgICBzZXRfaGVhZCh0b3AsIHRvcF9zaXplIHwgUFJFVl9JTlVTRSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2hlY2tfY2h1bmsodG9wKTsKLSAgICAgICAgcmV0dXJuIDA7CisJLyogVHJ5IHRvIGZpZ3VyZSBvdXQgd2hhdCB3ZSBoYXZlICovCisJY3VycmVudF9icmsgPSAoY2hhciopKE1PUkVDT1JFICgwKSk7CisJdG9wX3NpemUgPSBjdXJyZW50X2JyayAtIChjaGFyKil0b3A7CisJaWYgKHRvcF9zaXplID49IChsb25nKU1JTlNJWkUpIC8qIGlmIG5vdCwgd2UgYXJlIHZlcnkgdmVyeSBkZWFkISAqLworCXsKKwkgIHNicmtlZF9tZW0gPSBjdXJyZW50X2JyayAtIHNicmtfYmFzZTsKKwkgIHNldF9oZWFkKHRvcCwgdG9wX3NpemUgfCBQUkVWX0lOVVNFKTsKKwl9CisJY2hlY2tfY2h1bmsodG9wKTsKKwlyZXR1cm4gMDsKICAgICAgIH0KIAogICAgICAgZWxzZQogICAgICAgewotICAgICAgICAvKiBTdWNjZXNzLiBBZGp1c3QgdG9wIGFjY29yZGluZ2x5LiAqLwotICAgICAgICBzZXRfaGVhZCh0b3AsICh0b3Bfc2l6ZSAtIGV4dHJhKSB8IFBSRVZfSU5VU0UpOwotICAgICAgICBzYnJrZWRfbWVtIC09IGV4dHJhOwotICAgICAgICBjaGVja19jaHVuayh0b3ApOwotICAgICAgICByZXR1cm4gMTsKKwkvKiBTdWNjZXNzLiBBZGp1c3QgdG9wIGFjY29yZGluZ2x5LiAqLworCXNldF9oZWFkKHRvcCwgKHRvcF9zaXplIC0gZXh0cmEpIHwgUFJFVl9JTlVTRSk7CisJc2Jya2VkX21lbSAtPSBleHRyYTsKKwljaGVja19jaHVuayh0b3ApOworCXJldHVybiAxOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMzA2NCw5ICszMDU1LDkgQEAKICNpZiBERUJVRwogICAgICAgY2hlY2tfZnJlZV9jaHVuayhwKTsKICAgICAgIGZvciAocSA9IG5leHRfY2h1bmsocCk7Ci0gICAgICAgICAgIHEgPCB0b3AgJiYgaW51c2UocSkgJiYgKGxvbmcpKGNodW5rc2l6ZShxKSkgPj0gKGxvbmcpTUlOU0laRTsKLSAgICAgICAgICAgcSA9IG5leHRfY2h1bmsocSkpCi0gICAgICAgIGNoZWNrX2ludXNlX2NodW5rKHEpOworCSAgIHEgPCB0b3AgJiYgaW51c2UocSkgJiYgKGxvbmcpKGNodW5rc2l6ZShxKSkgPj0gKGxvbmcpTUlOU0laRTsKKwkgICBxID0gbmV4dF9jaHVuayhxKSkKKwljaGVja19pbnVzZV9jaHVuayhxKTsKICNlbmRpZgogICAgICAgYXZhaWwgKz0gY2h1bmtzaXplKHApOwogICAgICAgbmF2YWlsKys7CkBAIC0zMTAzLDE0ICszMDk0LDE0IEBACiB7CiAgIG1hbGxvY191cGRhdGVfbWFsbGluZm8oKTsKICAgZnByaW50ZihzdGRlcnIsICJtYXggc3lzdGVtIGJ5dGVzID0gJTEwdVxuIiwKLSAgICAgICAgICAodW5zaWduZWQgaW50KShtYXhfdG90YWxfbWVtKSk7CisJICAodW5zaWduZWQgaW50KShtYXhfdG90YWxfbWVtKSk7CiAgIGZwcmludGYoc3RkZXJyLCAic3lzdGVtIGJ5dGVzICAgICA9ICUxMHVcbiIsCi0gICAgICAgICAgKHVuc2lnbmVkIGludCkoc2Jya2VkX21lbSArIG1tYXBwZWRfbWVtKSk7CisJICAodW5zaWduZWQgaW50KShzYnJrZWRfbWVtICsgbW1hcHBlZF9tZW0pKTsKICAgZnByaW50ZihzdGRlcnIsICJpbiB1c2UgYnl0ZXMgICAgID0gJTEwdVxuIiwKLSAgICAgICAgICAodW5zaWduZWQgaW50KShjdXJyZW50X21hbGxpbmZvLnVvcmRibGtzICsgbW1hcHBlZF9tZW0pKTsKKwkgICh1bnNpZ25lZCBpbnQpKGN1cnJlbnRfbWFsbGluZm8udW9yZGJsa3MgKyBtbWFwcGVkX21lbSkpOwogI2lmIEhBVkVfTU1BUAogICBmcHJpbnRmKHN0ZGVyciwgIm1heCBtbWFwIHJlZ2lvbnMgPSAlMTB1XG4iLAotICAgICAgICAgICh1bnNpZ25lZCBpbnQpbWF4X25fbW1hcHMpOworCSAgKHVuc2lnbmVkIGludCltYXhfbl9tbWFwcyk7CiAjZW5kaWYKIH0KIApAQCAtMzE3MywxNyArMzE2NCwxNyBAQAogICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5IDE5OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQogICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRpdmUgYXJndW1lbnRzCiAgICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBNYXJ0aW4gQy4gRm9uZyA8bWNmb25nQHlhaG9vLmNvbT4KLSAgICAgICAgICogQWRkICdMQUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCi0gICAgICAgICAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQotICAgICAgICAgKiBDbGVhbnVwIHVwIGhlYWRlciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCi0gICAgICAgICAqIENsZWFudXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCi0gICAgICAgICAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlzdGVuY2Ugd2l0aCBleGlzdGluZwotICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcwotICAgICAgICAgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAobmVlZHMgbW9yZSB3b3JrKQotICAgICAgICAgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4gJ0FTU0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvCisJICogQWRkICdMQUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCisJICAoZS5nLiBXSU4zMiBwbGF0Zm9ybXMpCisJICogQ2xlYW51cCB1cCBoZWFkZXIgZmlsZSBpbmNsdXNpb24gZm9yIFdJTjMyIHBsYXRmb3JtcworCSAqIENsZWFudXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCisJICogQWRkICdVU0VfRExfUFJFRklYJyB0byBxdWlja2x5IGFsbG93IGNvLWV4aXN0ZW5jZSB3aXRoIGV4aXN0aW5nCisJICAgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMKKwkgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAobmVlZHMgbW9yZSB3b3JrKQorCSAqIFVzZSAnYXNzZXJ0JyByYXRoZXIgdGhhbiAnQVNTRVJUJyBpbiBXSU4zMiBjb2RlIHRvIGNvbmZvcm0gdG8KIAkgICB1c2FnZSBvZiAnYXNzZXJ0JyBpbiBub24tV0lOMzIgY29kZQotICAgICAgICAgKiBJbXByb3ZlIFdJTjMyICdzYnJrKCknIGVtdWxhdGlvbidzICdmaW5kUmVnaW9uKCknIHJvdXRpbmUgdG8KLSAgICAgICAgICAgYXZvaWQgaW5maW5pdGUgbG9vcAorCSAqIEltcHJvdmUgV0lOMzIgJ3NicmsoKScgZW11bGF0aW9uJ3MgJ2ZpbmRSZWdpb24oKScgcm91dGluZSB0bworCSAgIGF2b2lkIGluZmluaXRlIGxvb3AKICAgICAgICogQWx3YXlzIGNhbGwgJ2ZSRWUoKScgcmF0aGVyIHRoYW4gJ2ZyZWUoKScKIAogICAgIFYyLjYuNSBXZWQgSnVuIDE3IDE1OjU3OjMxIDE5OTggIERvdWcgTGVhICAoZGwgYXQgZ2VlKQpAQCAtMzE5NSwxMyArMzE4NiwxMyBAQAogICAgICAgKiBBZGRlZCBhbm9ueW1vdXNseSBkb25hdGVkIFdJTjMyIHNicmsgZW11bGF0aW9uCiAgICAgICAqIE1hbGxvYywgY2FsbG9jLCBnZXRwYWdlc2l6ZTogYWRkIG9wdGltaXphdGlvbnMgZnJvbSBSYXltb25kIE5panNzZW4KICAgICAgICogbWFsbG9jX2V4dGVuZF90b3A6IGZpeCBtYXNrIGVycm9yIHRoYXQgY2F1c2VkIHdhc3RhZ2UgYWZ0ZXIKLSAgICAgICAgZm9yZWlnbiBzYnJrcworCWZvcmVpZ24gc2Jya3MKICAgICAgICogQWRkIGxpbnV4IG1yZW1hcCBzdXBwb3J0IGNvZGUgZnJvbSBISiBMaXUKIAogICAgIFYyLjYuMiBUdWUgRGVjICA1IDA2OjUyOjU1IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQogICAgICAgKiBJbnRlZ3JhdGVkIG1vc3QgZG9jdW1lbnRhdGlvbiB3aXRoIHRoZSBjb2RlLgogICAgICAgKiBBZGQgc3VwcG9ydCBmb3IgbW1hcCwgd2l0aCBoZWxwIGZyb20KLSAgICAgICAgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKwlXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgogICAgICAgKiBVc2UgbGFzdF9yZW1haW5kZXIgaW4gbW9yZSBjYXNlcy4KICAgICAgICogUGFjayBiaW5zIHVzaW5nIGlkZWEgZnJvbSAgY29saW5Abnl4MTAuY3MuZHUuZWR1CiAgICAgICAqIFVzZSBvcmRlcmVkIGJpbnMgaW5zdGVhZCBvZiBiZXN0LWZpdCB0aHJlc2hob2xkCkBAIC0zMjA5LDM0ICszMjAwLDM0IEBACiAgICAgICAqIFN1cHBvcnQgYW5vdGhlciBjYXNlIG9mIHJlYWxsb2MgdmlhIG1vdmUgaW50byB0b3AKICAgICAgICogRml4IGVycm9yIG9jY3VyaW5nIHdoZW4gaW5pdGlhbCBzYnJrX2Jhc2Ugbm90IHdvcmQtYWxpZ25lZC4KICAgICAgICogUmVseSBvbiBwYWdlIHNpemUgZm9yIHVuaXRzIGluc3RlYWQgb2YgU0JSS19VTklUIHRvCi0gICAgICAgIGF2b2lkIHN1cnByaXNlcyBhYm91dCBzYnJrIGFsaWdubWVudCBjb252ZW50aW9ucy4KKwlhdm9pZCBzdXJwcmlzZXMgYWJvdXQgc2JyayBhbGlnbm1lbnQgY29udmVudGlvbnMuCiAgICAgICAqIEFkZCBtYWxsaW5mbywgbWFsbG9wdC4gVGhhbmtzIHRvIFJheW1vbmQgTmlqc3NlbgotICAgICAgICAocmF5bW9uZEBlcy5lbGUudHVlLm5sKSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisJKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9yIHRoZSBzdWdnZXN0aW9uLgogICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCiAgICAgICAqIE1vcmUgcHJlY2F1dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKLSAgICAgICAgY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKwljb3VydGVzeSBvZiBXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgogICAgICAgKiBBZGRlZCBtYWNyb3MgZXRjLiwgYWxsb3dpbmcgdXNlIGluIGxpbnV4IGxpYmMgZnJvbQotICAgICAgICBILkouIEx1IChoamxAZ251LmFpLm1pdC5lZHUpCisJSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQogICAgICAgKiBJbnZlcnRlZCB0aGlzIGhpc3RvcnkgbGlzdAogCiAgICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCiAgICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBiZWhhdmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KICAgICAgICogUmVtb3ZlZCBhbGwgcHJlYWxsb2NhdGlvbiBjb2RlIHNpbmNlIHVuZGVyIGN1cnJlbnQgc2NoZW1lCi0gICAgICAgIHRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKLSAgICAgICAgdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1zLgorCXRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKKwl0aGUgd29yayBzYXZlZCBpbiBnb29kIGNhc2VzIGZvciBtb3N0IHRlc3QgcHJvZ3JhbXMuCiAgICAgICAqIE5vIGxvbmdlciB1c2UgcmV0dXJuIGxpc3Qgb3IgdW5jb25zb2xpZGF0ZWQgYmlucyBzaW5jZQotICAgICAgICBubyBzY2hlbWUgdXNpbmcgdGhlbSBjb25zaXN0ZW50bHkgb3V0cGVyZm9ybXMgdGhvc2UgdGhhdCBkb24ndAotICAgICAgICBnaXZlbiBhYm92ZSBjaGFuZ2VzLgorCW5vIHNjaGVtZSB1c2luZyB0aGVtIGNvbnNpc3RlbnRseSBvdXRwZXJmb3JtcyB0aG9zZSB0aGF0IGRvbid0CisJZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KICAgICAgICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUgd29yc3QtY2FzZXMuCiAgICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCiAKICAgICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKICAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0bwotICAgICAgICBQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBzdWdnZXN0aW9uLgorCVBhdWwgV2lsc29uICh3aWxzb25AY3MudGV4YXMuZWR1KSBmb3IgdGhlIHN1Z2dlc3Rpb24uCiAKICAgICBWMi41LjQgV2VkIE5vdiAgMSAwNzo1NDo1MSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKICAgICAgICogQWRkZWQgbWFsbG9jX3RyaW0sIHdpdGggaGVscCBmcm9tIFdvbGZyYW0gR2xvZ2VyCi0gICAgICAgICh3bWdsb0BEZW50Lk1FRC5VbmktTXVlbmNoZW4uREUpLgorCSh3bWdsb0BEZW50Lk1FRC5VbmktTXVlbmNoZW4uREUpLgogCiAgICAgVjIuNS4zIFR1ZSBBcHIgMjYgMTA6MTY6MDEgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQogCkBAIC0zMjUyLDExICszMjQzLDExIEBACiAgICAgVjIuNS4xIFNhdCBBdWcgMTQgMTU6NDA6NDMgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnKQogICAgICAgKiBmYXN0ZXIgYmluIGNvbXB1dGF0aW9uICYgc2xpZ2h0bHkgZGlmZmVyZW50IGJpbm5pbmcKICAgICAgICogbWVyZ2VkIGFsbCBjb25zb2xpZGF0aW9ucyB0byBvbmUgcGFydCBvZiBtYWxsb2MgcHJvcGVyCi0gICAgICAgICAoZWxpbWluYXRpbmcgb2xkIG1hbGxvY19maW5kX3NwYWNlICYgbWFsbG9jX2NsZWFuX2JpbikKKwkgKGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCiAgICAgICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKICAgICAgICogUHJvcGFnYXRlIGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCiAgICAgICAqIEFkZCBzdHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKLSAgICAgICAgICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCisJICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCiAKICAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6NTkgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCiAgICAgICAqIHJlbW92ZWQgcG90ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuawpAQCAtMzI2NCwxMyArMzI1NSwxMSBAQAogICAgICAgKiBtaXNjIGNvc21ldGljcyBhbmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uCiAgICAgICAqIGFudGljb3NtZXRpY3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2VuZXNzCiAgICAgICAqIHRlc3RlZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCi0gICAgICAgICAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKLSAgICAgICAgICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMuKQorCSAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKKwkgIERldGxlZnMgJiBab3JuIGNvbXBhcmlzb24gc3R1ZHkgKGluIFNJR1BMQU4gTm90aWNlcy4pCiAKICAgICBUcmlhbCB2ZXJzaW9uIEZyaSBBdWcgMjggMTM6MTQ6MjkgMTk5MiAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCiAgICAgICAqIEJhc2VkIGxvb3NlbHkgb24gbGliZysrLTEuMlggbWFsbG9jLiAoSXQgcmV0YWlucyBzb21lIG9mIHRoZSBvdmVyYWxsCi0gICAgICAgICBzdHJ1Y3R1cmUgb2Ygb2xkIHZlcnNpb24sICBidXQgbW9zdCBkZXRhaWxzIGRpZmZlci4pCisJIHN0cnVjdHVyZSBvZiBvbGQgdmVyc2lvbiwgIGJ1dCBtb3N0IGRldGFpbHMgZGlmZmVyLikKIAogKi8KLQotCmRpZmYgLS1naXQgYS9jb21tb24vZG9jZWNjLmMgYi9jb21tb24vZG9jZWNjLmMKaW5kZXggNzRhYzc0MS4uY2Y0NWUwZiAxMDA2NDQKLS0tIGEvY29tbW9uL2RvY2VjYy5jCisrKyBiL2NvbW1vbi9kb2NlY2MuYwpAQCAtOTgsMzAgKzk4LDMwIEBACiAKIC8qIGdlbmVyYXRlIEdGKDIqKm0pIGZyb20gdGhlIGlycmVkdWNpYmxlIHBvbHlub21pYWwgcChYKSBpbiBQcFswXS4uUHBbbV0KICAgIGxvb2t1cCB0YWJsZXM6ICBpbmRleC0+cG9seW5vbWlhbCBmb3JtICAgYWxwaGFfdG9bXSBjb250YWlucyBqPWFscGhhKippOwotICAgICAgICAgICAgICAgICAgIHBvbHlub21pYWwgZm9ybSAtPiBpbmRleCBmb3JtICBpbmRleF9vZltqPWFscGhhKippXSA9IGkKKwkJICAgcG9seW5vbWlhbCBmb3JtIC0+IGluZGV4IGZvcm0gIGluZGV4X29mW2o9YWxwaGEqKmldID0gaQogICAgYWxwaGE9MiBpcyB0aGUgcHJpbWl0aXZlIGVsZW1lbnQgb2YgR0YoMioqbSkKICAgIEhBUkkncyBDT01NRU5UOiAoNC8xMy85NCkgYWxwaGFfdG9bXSBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzOgotICAgICAgICBMZXQgQCByZXByZXNlbnQgdGhlIHByaW1pdGl2ZSBlbGVtZW50IGNvbW1vbmx5IGNhbGxlZCAiYWxwaGEiIHRoYXQKKwlMZXQgQCByZXByZXNlbnQgdGhlIHByaW1pdGl2ZSBlbGVtZW50IGNvbW1vbmx5IGNhbGxlZCAiYWxwaGEiIHRoYXQKICAgIGlzIHRoZSByb290IG9mIHRoZSBwcmltaXRpdmUgcG9seW5vbWlhbCBwKHgpLiBUaGVuIGluIEdGKDJebSksIGZvciBhbnkKICAgIDAgPD0gaSA8PSAyXm0tMiwKLSAgICAgICAgQF5pID0gYSgwKSArIGEoMSkgQCArIGEoMikgQF4yICsgLi4uICsgYShtLTEpIEBeKG0tMSkKKwlAXmkgPSBhKDApICsgYSgxKSBAICsgYSgyKSBAXjIgKyAuLi4gKyBhKG0tMSkgQF4obS0xKQogICAgd2hlcmUgdGhlIGJpbmFyeSB2ZWN0b3IgKGEoMCksYSgxKSxhKDIpLC4uLixhKG0tMSkpIGlzIHRoZSByZXByZXNlbnRhdGlvbgogICAgb2YgdGhlIGludGVnZXIgImFscGhhX3RvW2ldIiB3aXRoIGEoMCkgYmVpbmcgdGhlIExTQiBhbmQgYShtLTEpIHRoZSBNU0IuIFRodXMgZm9yCiAgICBleGFtcGxlIHRoZSBwb2x5bm9taWFsIHJlcHJlc2VudGF0aW9uIG9mIEBeNSB3b3VsZCBiZSBnaXZlbiBieSB0aGUgYmluYXJ5CiAgICByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW50ZWdlciAiYWxwaGFfdG9bNV0iLgotICAgICAgICAgICAgICAgICAgIFNpbWlsYXJpbHksIGluZGV4X29mW10gY2FuIGJlIHVzZWQgYXMgZm9sbG93czoKLSAgICAgICAgQXMgYWJvdmUsIGxldCBAIHJlcHJlc2VudCB0aGUgcHJpbWl0aXZlIGVsZW1lbnQgb2YgR0YoMl5tKSB0aGF0IGlzCisJCSAgIFNpbWlsYXJpbHksIGluZGV4X29mW10gY2FuIGJlIHVzZWQgYXMgZm9sbG93czoKKwlBcyBhYm92ZSwgbGV0IEAgcmVwcmVzZW50IHRoZSBwcmltaXRpdmUgZWxlbWVudCBvZiBHRigyXm0pIHRoYXQgaXMKICAgIHRoZSByb290IG9mIHRoZSBwcmltaXRpdmUgcG9seW5vbWlhbCBwKHgpLiBJbiBvcmRlciB0byBmaW5kIHRoZSBwb3dlcgogICAgb2YgQCAoYWxwaGEpIHRoYXQgaGFzIHRoZSBwb2x5bm9taWFsIHJlcHJlc2VudGF0aW9uCi0gICAgICAgIGEoMCkgKyBhKDEpIEAgKyBhKDIpIEBeMiArIC4uLiArIGEobS0xKSBAXihtLTEpCisJYSgwKSArIGEoMSkgQCArIGEoMikgQF4yICsgLi4uICsgYShtLTEpIEBeKG0tMSkKICAgIHdlIGNvbnNpZGVyIHRoZSBpbnRlZ2VyICJpIiB3aG9zZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gd2l0aCBhKDApIGJlaW5nIExTQgogICAgYW5kIGEobS0xKSBNU0IgaXMgKGEoMCksYSgxKSwuLi4sYShtLTEpKSBhbmQgbG9jYXRlIHRoZSBlbnRyeQogICAgImluZGV4X29mW2ldIi4gTm93LCBAXmluZGV4X29mW2ldIGlzIHRoYXQgZWxlbWVudCB3aG9zZSBwb2x5bm9taWFsCiAgICAgcmVwcmVzZW50YXRpb24gaXMgKGEoMCksYSgxKSxhKDIpLC4uLixhKG0tMSkpLgogICAgTk9URToKLSAgICAgICAgVGhlIGVsZW1lbnQgYWxwaGFfdG9bMl5tLTFdID0gMCBhbHdheXMgc2lnbmlmeWluZyB0aGF0IHRoZQorCVRoZSBlbGVtZW50IGFscGhhX3RvWzJebS0xXSA9IDAgYWx3YXlzIHNpZ25pZnlpbmcgdGhhdCB0aGUKICAgIHJlcHJlc2VudGF0aW9uIG9mICJAXmluZmluaXR5IiA9IDAgaXMgKDAsMCwwLC4uLiwwKS4KLSAgICAgICAgU2ltaWxhcmlseSwgdGhlIGVsZW1lbnQgaW5kZXhfb2ZbMF0gPSBBMCBhbHdheXMgc2lnbmlmeWluZworCVNpbWlsYXJpbHksIHRoZSBlbGVtZW50IGluZGV4X29mWzBdID0gQTAgYWx3YXlzIHNpZ25pZnlpbmcKICAgIHRoYXQgdGhlIHBvd2VyIG9mIGFscGhhIHdoaWNoIGhhcyB0aGUgcG9seW5vbWlhbCByZXByZXNlbnRhdGlvbgogICAgKDAsMCwuLi4sMCkgaXMgImluZmluaXR5Ii4KIApAQCAtMTgzLDggKzE4Myw4IEBACiAgKiAqLwogc3RhdGljIGludAogZXJhc19kZWNfcnMoZHR5cGUgQWxwaGFfdG9bTk4gKyAxXSwgZHR5cGUgSW5kZXhfb2ZbTk4gKyAxXSwKLSAgICAgICAgICAgIGdmIGJiW05OIC0gS0sgKyAxXSwgZ2YgZXJhc192YWxbTk4tS0tdLCBpbnQgZXJhc19wb3NbTk4tS0tdLAotICAgICAgICAgICAgaW50IG5vX2VyYXMpCisJICAgIGdmIGJiW05OIC0gS0sgKyAxXSwgZ2YgZXJhc192YWxbTk4tS0tdLCBpbnQgZXJhc19wb3NbTk4tS0tdLAorCSAgICBpbnQgbm9fZXJhcykKIHsKICAgaW50IGRlZ19sYW1iZGEsIGVsLCBkZWdfb21lZ2E7CiAgIGludCBpLCBqLCByLGs7CkBAIC0yMjUsNyArMjI1LDcgQEAKICAgZm9yKGk9MTtpPD1OTi1LSztpKyspIHsKICAgICAgIHRtcCA9IEluZGV4X29mW3NbaV1dOwogICAgICAgaWYgKHRtcCAhPSBBMCkKLSAgICAgICAgICB0bXAgPSBtb2Rubih0bXAgKyAyICogS0sgKiAoQjAraS0xKSpQUklNKTsKKwkgIHRtcCA9IG1vZG5uKHRtcCArIDIgKiBLSyAqIChCMCtpLTEpKlBSSU0pOwogICAgICAgc1tpXSA9IHRtcDsKICAgfQogCkBAIC00MTIsOSArNDEyLDkgQEAKICAgICB9CiAgICAgLyogQXBwbHkgZXJyb3IgdG8gZGF0YSAqLwogICAgIGlmIChudW0xICE9IDApIHsKLSAgICAgICAgZXJhc192YWxbal0gPSBBbHBoYV90b1ttb2RubihJbmRleF9vZltudW0xXSArIEluZGV4X29mW251bTJdICsgTk4gLSBJbmRleF9vZltkZW5dKV07CisJZXJhc192YWxbal0gPSBBbHBoYV90b1ttb2RubihJbmRleF9vZltudW0xXSArIEluZGV4X29mW251bTJdICsgTk4gLSBJbmRleF9vZltkZW5dKV07CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZXJhc192YWxbal0gPSAwOworCWVyYXNfdmFsW2pdID0gMDsKICAgICB9CiAgIH0KICBmaW5pc2g6CkBAIC00NDcsMTIgKzQ0NywxMiBAQAogICAgIC8qIGluaXQgbG9nIGFuZCBleHAgdGFibGVzIGhlcmUgdG8gc2F2ZSBtZW1vcnkuIEhvd2V2ZXIsIGl0IGlzIHNsb3dlciAqLwogICAgIEFscGhhX3RvID0gbWFsbG9jKChOTiArIDEpICogc2l6ZW9mKGR0eXBlKSk7CiAgICAgaWYgKCFBbHBoYV90bykKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKIAogICAgIEluZGV4X29mID0gbWFsbG9jKChOTiArIDEpICogc2l6ZW9mKGR0eXBlKSk7CiAgICAgaWYgKCFJbmRleF9vZikgewotICAgICAgICBmcmVlKEFscGhhX3RvKTsKLSAgICAgICAgcmV0dXJuIC0xOworCWZyZWUoQWxwaGFfdG8pOworCXJldHVybiAtMTsKICAgICB9CiAKICAgICBnZW5lcmF0ZV9nZihBbHBoYV90bywgSW5kZXhfb2YpOwpAQCAtNDY1LDQ4ICs0NjUsNDggQEAKICAgICBiYlszXSA9ICgoZWNjMVszXSAmIDB4YzApID4+IDYpIHwgKChlY2MxWzBdICYgMHhmZikgPDwgMik7CiAKICAgICBuYl9lcnJvcnMgPSBlcmFzX2RlY19ycyhBbHBoYV90bywgSW5kZXhfb2YsIGJiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX3ZhbCwgZXJyb3JfcG9zLCAwKTsKKwkJCSAgICBlcnJvcl92YWwsIGVycm9yX3BvcywgMCk7CiAgICAgaWYgKG5iX2Vycm9ycyA8PSAwKQotICAgICAgICBnb3RvIHRoZV9lbmQ7CisJZ290byB0aGVfZW5kOwogCiAgICAgLyogY29ycmVjdCB0aGUgZXJyb3JzICovCiAgICAgZm9yKGk9MDtpPG5iX2Vycm9ycztpKyspIHsKLSAgICAgICAgcG9zID0gZXJyb3JfcG9zW2ldOwotICAgICAgICBpZiAocG9zID49IE5CX0RBVEEgJiYgcG9zIDwgS0spIHsKLSAgICAgICAgICAgIG5iX2Vycm9ycyA9IC0xOwotICAgICAgICAgICAgZ290byB0aGVfZW5kOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwb3MgPCBOQl9EQVRBKSB7Ci0gICAgICAgICAgICAvKiBleHRyYWN0IGJpdCBwb3NpdGlvbiAoTVNCIGZpcnN0KSAqLwotICAgICAgICAgICAgcG9zID0gMTAgKiAoTkJfREFUQSAtIDEgLSBwb3MpIC0gNjsKLSAgICAgICAgICAgIC8qIG5vdyBjb3JyZWN0IHRoZSBmb2xsb3dpbmcgMTAgYml0cy4gQXQgbW9zdCB0d28gYnl0ZXMKLSAgICAgICAgICAgICAgIGNhbiBiZSBtb2RpZmllZCBzaW5jZSBwb3MgaXMgZXZlbiAqLwotICAgICAgICAgICAgaW5kZXggPSAocG9zID4+IDMpIF4gMTsKLSAgICAgICAgICAgIGJpdHBvcyA9IHBvcyAmIDc7Ci0gICAgICAgICAgICBpZiAoKGluZGV4ID49IDAgJiYgaW5kZXggPCBTRUNUT1JfU0laRSkgfHwKLSAgICAgICAgICAgICAgICBpbmRleCA9PSAoU0VDVE9SX1NJWkUgKyAxKSkgewotICAgICAgICAgICAgICAgIHZhbCA9IGVycm9yX3ZhbFtpXSA+PiAoMiArIGJpdHBvcyk7Ci0gICAgICAgICAgICAgICAgcGFyaXR5IF49IHZhbDsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBTRUNUT1JfU0laRSkKLSAgICAgICAgICAgICAgICAgICAgc2VjdG9yW2luZGV4XSBePSB2YWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmRleCA9ICgocG9zID4+IDMpICsgMSkgXiAxOwotICAgICAgICAgICAgYml0cG9zID0gKGJpdHBvcyArIDEwKSAmIDc7Ci0gICAgICAgICAgICBpZiAoYml0cG9zID09IDApCi0gICAgICAgICAgICAgICAgYml0cG9zID0gODsKLSAgICAgICAgICAgIGlmICgoaW5kZXggPj0gMCAmJiBpbmRleCA8IFNFQ1RPUl9TSVpFKSB8fAotICAgICAgICAgICAgICAgIGluZGV4ID09IChTRUNUT1JfU0laRSArIDEpKSB7Ci0gICAgICAgICAgICAgICAgdmFsID0gZXJyb3JfdmFsW2ldIDw8ICg4IC0gYml0cG9zKTsKLSAgICAgICAgICAgICAgICBwYXJpdHkgXj0gdmFsOwotICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IFNFQ1RPUl9TSVpFKQotICAgICAgICAgICAgICAgICAgICBzZWN0b3JbaW5kZXhdIF49IHZhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXBvcyA9IGVycm9yX3Bvc1tpXTsKKwlpZiAocG9zID49IE5CX0RBVEEgJiYgcG9zIDwgS0spIHsKKwkgICAgbmJfZXJyb3JzID0gLTE7CisJICAgIGdvdG8gdGhlX2VuZDsKKwl9CisJaWYgKHBvcyA8IE5CX0RBVEEpIHsKKwkgICAgLyogZXh0cmFjdCBiaXQgcG9zaXRpb24gKE1TQiBmaXJzdCkgKi8KKwkgICAgcG9zID0gMTAgKiAoTkJfREFUQSAtIDEgLSBwb3MpIC0gNjsKKwkgICAgLyogbm93IGNvcnJlY3QgdGhlIGZvbGxvd2luZyAxMCBiaXRzLiBBdCBtb3N0IHR3byBieXRlcworCSAgICAgICBjYW4gYmUgbW9kaWZpZWQgc2luY2UgcG9zIGlzIGV2ZW4gKi8KKwkgICAgaW5kZXggPSAocG9zID4+IDMpIF4gMTsKKwkgICAgYml0cG9zID0gcG9zICYgNzsKKwkgICAgaWYgKChpbmRleCA+PSAwICYmIGluZGV4IDwgU0VDVE9SX1NJWkUpIHx8CisJCWluZGV4ID09IChTRUNUT1JfU0laRSArIDEpKSB7CisJCXZhbCA9IGVycm9yX3ZhbFtpXSA+PiAoMiArIGJpdHBvcyk7CisJCXBhcml0eSBePSB2YWw7CisJCWlmIChpbmRleCA8IFNFQ1RPUl9TSVpFKQorCQkgICAgc2VjdG9yW2luZGV4XSBePSB2YWw7CisJICAgIH0KKwkgICAgaW5kZXggPSAoKHBvcyA+PiAzKSArIDEpIF4gMTsKKwkgICAgYml0cG9zID0gKGJpdHBvcyArIDEwKSAmIDc7CisJICAgIGlmIChiaXRwb3MgPT0gMCkKKwkJYml0cG9zID0gODsKKwkgICAgaWYgKChpbmRleCA+PSAwICYmIGluZGV4IDwgU0VDVE9SX1NJWkUpIHx8CisJCWluZGV4ID09IChTRUNUT1JfU0laRSArIDEpKSB7CisJCXZhbCA9IGVycm9yX3ZhbFtpXSA8PCAoOCAtIGJpdHBvcyk7CisJCXBhcml0eSBePSB2YWw7CisJCWlmIChpbmRleCA8IFNFQ1RPUl9TSVpFKQorCQkgICAgc2VjdG9yW2luZGV4XSBePSB2YWw7CisJICAgIH0KKwl9CiAgICAgfQogCiAgICAgLyogdXNlIHBhcml0eSB0byB0ZXN0IGV4dHJhIGVycm9ycyAqLwogICAgIGlmICgocGFyaXR5ICYgMHhmZikgIT0gMCkKLSAgICAgICAgbmJfZXJyb3JzID0gLTE7CisJbmJfZXJyb3JzID0gLTE7CiAKICB0aGVfZW5kOgogICAgIGZyZWUoQWxwaGFfdG8pOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9jb21tb24uYyBiL2NvbW1vbi9lbnZfY29tbW9uLmMKaW5kZXggZWEwODUwMS4uZTdlZTQ5OSAxMDA2NDQKLS0tIGEvY29tbW9uL2Vudl9jb21tb24uYworKysgYi9jb21tb24vZW52X2NvbW1vbi5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPGVudmlyb25tZW50Lmg+Ci0jaW5jbHVkZSA8Y21kX252ZWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgogCmRpZmYgLS1naXQgYS9jb21tb24vZW52X2VlcHJvbS5jIGIvY29tbW9uL2Vudl9lZXByb20uYwppbmRleCA5ZjFkODJhLi4zMDBhZjZmIDEwMDY0NAotLS0gYS9jb21tb24vZW52X2VlcHJvbS5jCisrKyBiL2NvbW1vbi9lbnZfZWVwcm9tLmMKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxlbnZpcm9ubWVudC5oPgotI2luY2x1ZGUgPGNtZF9udmVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KIApkaWZmIC0tZ2l0IGEvY29tbW9uL2Vudl9mbGFzaC5jIGIvY29tbW9uL2Vudl9mbGFzaC5jCmluZGV4IDQyNmQwMWIuLmFmOTk4ODAgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfZmxhc2guYworKysgYi9jb21tb24vZW52X2ZsYXNoLmMKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxlbnZpcm9ubWVudC5oPgotI2luY2x1ZGUgPGNtZF9udmVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KIApAQCAtMTg1LDE0ICsxODQsMTQgQEAKIAlkZWJ1ZyAoIkRhdGEgdG8gc2F2ZSAweCV4XG4iLCB1cF9kYXRhKTsKIAlpZiAodXBfZGF0YSkgewogCQlpZiAoKHNhdmVkX2RhdGEgPSBtYWxsb2ModXBfZGF0YSkpID09IE5VTEwpIHsKLQkJCXByaW50ZigiVW5hYmxlIHRvIHNhdmUgdGhlIHJlc3Qgb2Ygc2VjdG9yICglbGQpXG4iLCAKKwkJCXByaW50ZigiVW5hYmxlIHRvIHNhdmUgdGhlIHJlc3Qgb2Ygc2VjdG9yICglbGQpXG4iLAogCQkJCXVwX2RhdGEpOwogCQkJZ290byBEb25lOwogCQl9Ci0JCW1lbWNweShzYXZlZF9kYXRhLCAKKwkJbWVtY3B5KHNhdmVkX2RhdGEsCiAJCQkodm9pZCAqKSgobG9uZylmbGFzaF9hZGRyX25ldyArIENGR19FTlZfU0laRSksIHVwX2RhdGEpOwotCQlkZWJ1ZyAoIkRhdGEgKHN0YXJ0IDB4JXgsIGxlbiAweCV4KSBzYXZlZCBhdCAweCV4XG4iLCAKLQkJCSAgIChsb25nKWZsYXNoX2FkZHJfbmV3ICsgQ0ZHX0VOVl9TSVpFLCAKKwkJZGVidWcgKCJEYXRhIChzdGFydCAweCV4LCBsZW4gMHgleCkgc2F2ZWQgYXQgMHgleFxuIiwKKwkJCSAgIChsb25nKWZsYXNoX2FkZHJfbmV3ICsgQ0ZHX0VOVl9TSVpFLAogCQkJCXVwX2RhdGEsIHNhdmVkX2RhdGEpOwogCX0KICNlbmRpZgpAQCAtMjA5LDE5ICsyMDgsMTkgQEAKIAkJKHVsb25nKSYoZmxhc2hfYWRkcl9uZXctPmRhdGEpLAogCQlzaXplb2YoZW52X3B0ci0+ZGF0YSkrKHVsb25nKSYoZmxhc2hfYWRkcl9uZXctPmRhdGEpKTsKIAlpZiAoZmxhc2hfd3JpdGUoZW52X3B0ci0+ZGF0YSwKLQkgICAgICAgICAgICAgICAgKHVsb25nKSYoZmxhc2hfYWRkcl9uZXctPmRhdGEpLAorCQkJKHVsb25nKSYoZmxhc2hfYWRkcl9uZXctPmRhdGEpLAogCQkJc2l6ZW9mKGVudl9wdHItPmRhdGEpKSB8fAogCiAJICAgIGZsYXNoX3dyaXRlKChjaGFyICopJihlbnZfcHRyLT5jcmMpLAotCSAgICAgICAgICAgICAgICAodWxvbmcpJihmbGFzaF9hZGRyX25ldy0+Y3JjKSwKKwkJCSh1bG9uZykmKGZsYXNoX2FkZHJfbmV3LT5jcmMpLAogCQkJc2l6ZW9mKGVudl9wdHItPmNyYykpIHx8CiAKIAkgICAgZmxhc2hfd3JpdGUoKGNoYXIgKikmb2Jzb2xldGVfZmxhZywKLQkgICAgICAgICAgICAgICAgKHVsb25nKSYoZmxhc2hfYWRkci0+ZmxhZ3MpLAorCQkJKHVsb25nKSYoZmxhc2hfYWRkci0+ZmxhZ3MpLAogCQkJc2l6ZW9mKGZsYXNoX2FkZHItPmZsYWdzKSkgfHwKIAogCSAgICBmbGFzaF93cml0ZSgoY2hhciAqKSZhY3RpdmVfZmxhZywKLQkgICAgICAgICAgICAgICAgKHVsb25nKSYoZmxhc2hfYWRkcl9uZXctPmZsYWdzKSwKKwkJCSh1bG9uZykmKGZsYXNoX2FkZHJfbmV3LT5mbGFncyksCiAJCQlzaXplb2YoZmxhc2hfYWRkcl9uZXctPmZsYWdzKSkpCiAJewogCQlmbGFzaF9wZXJyb3IgKHJjKTsKQEAgLTIzMyw4ICsyMzIsOCBAQAogCWlmICh1cF9kYXRhKSB7IC8qIHJlc3RvcmUgdGhlIHJlc3Qgb2Ygc2VjdG9yICovCiAJCWRlYnVnICgiUmVzdG9yaW5nIHRoZSByZXN0IG9mIGRhdGEgdG8gMHgleCBsZW4gMHgleFxuIiwKIAkJCSAgIChsb25nKWZsYXNoX2FkZHJfbmV3ICsgQ0ZHX0VOVl9TSVpFLCB1cF9kYXRhKTsKLQkJaWYgKGZsYXNoX3dyaXRlKHNhdmVkX2RhdGEsIAotCQkJCShsb25nKWZsYXNoX2FkZHJfbmV3ICsgQ0ZHX0VOVl9TSVpFLCAKKwkJaWYgKGZsYXNoX3dyaXRlKHNhdmVkX2RhdGEsCisJCQkJKGxvbmcpZmxhc2hfYWRkcl9uZXcgKyBDRkdfRU5WX1NJWkUsCiAJCQkJdXBfZGF0YSkpIHsKIAkJCWZsYXNoX3BlcnJvcihyYyk7CiAJCQlnb3RvIERvbmU7CkBAIC0zODEsOCArMzgwLDggQEAKIAkJZ2QtPmVudl92YWxpZCA9IDI7CiAJCWZsYXNoX3NlY3RfcHJvdGVjdCAoMCwgKHVsb25nKWZsYXNoX2FkZHJfbmV3LCBlbmRfYWRkcl9uZXcpOwogCQlmbGFzaF93cml0ZSgoY2hhciAqKSZvYnNvbGV0ZV9mbGFnLAotICAgICAgICAgICAgICAgICAgICAJICAgICh1bG9uZykmKGZsYXNoX2FkZHJfbmV3LT5mbGFncyksCi0JICAgICAgICAJICAgIHNpemVvZihmbGFzaF9hZGRyX25ldy0+ZmxhZ3MpKTsKKwkJCSAgICAodWxvbmcpJihmbGFzaF9hZGRyX25ldy0+ZmxhZ3MpLAorCQkJICAgIHNpemVvZihmbGFzaF9hZGRyX25ldy0+ZmxhZ3MpKTsKIAkJZmxhc2hfc2VjdF9wcm90ZWN0ICgxLCAodWxvbmcpZmxhc2hfYWRkcl9uZXcsIGVuZF9hZGRyX25ldyk7CiAJfQogCkBAIC0zOTIsOCArMzkxLDggQEAKIAkJZ2QtPmVudl92YWxpZCA9IDI7CiAJCWZsYXNoX3NlY3RfcHJvdGVjdCAoMCwgKHVsb25nKWZsYXNoX2FkZHIsIGVuZF9hZGRyKTsKIAkJZmxhc2hfd3JpdGUoKGNoYXIgKikmYWN0aXZlX2ZsYWcsCi0gICAgICAgICAgICAgICAgICAgIAkgICAgKHVsb25nKSYoZmxhc2hfYWRkci0+ZmxhZ3MpLAotCSAgICAgICAgCSAgICBzaXplb2YoZmxhc2hfYWRkci0+ZmxhZ3MpKTsKKwkJCSAgICAodWxvbmcpJihmbGFzaF9hZGRyLT5mbGFncyksCisJCQkgICAgc2l6ZW9mKGZsYXNoX2FkZHItPmZsYWdzKSk7CiAJCWZsYXNoX3NlY3RfcHJvdGVjdCAoMSwgKHVsb25nKWZsYXNoX2FkZHIsIGVuZF9hZGRyKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9lbnZfbnZyYW0uYyBiL2NvbW1vbi9lbnZfbnZyYW0uYwppbmRleCA3NmU4NDM4Li4yYzgzMWQxIDEwMDY0NAotLS0gYS9jb21tb24vZW52X252cmFtLmMKKysrIGIvY29tbW9uL2Vudl9udnJhbS5jCkBAIC00Niw3ICs0Niw2IEBACiAKICNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8ZW52aXJvbm1lbnQuaD4KLSNpbmNsdWRlIDxjbWRfbnZlZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAKZGlmZiAtLWdpdCBhL2NvbW1vbi9mcGdhLmMgYi9jb21tb24vZnBnYS5jCmluZGV4IGM1OTc1YmMuLmM0MWM2ZjggMTAwNjQ0Ci0tLSBhL2NvbW1vbi9mcGdhLmMKKysrIGIvY29tbW9uL2ZwZ2EuYwpAQCAtNTUsNyArNTUsNyBAQAogLyogTG9jYWwgc3RhdGljIGZ1bmN0aW9ucyAqLwogc3RhdGljIGNvbnN0IGZwZ2FfZGVzYyAqIGNvbnN0IGZwZ2FfZ2V0X2Rlc2MoIGludCBkZXZudW0gKTsKIHN0YXRpYyBjb25zdCBmcGdhX2Rlc2MgKiBjb25zdCBmcGdhX3ZhbGlkYXRlKCBpbnQgZGV2bnVtLCB2b2lkICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBic2l6ZSwgY2hhciAqZm4gKTsKKwkJCQkJIHNpemVfdCBic2l6ZSwgY2hhciAqZm4gKTsKIHN0YXRpYyBpbnQgZnBnYV9kZXZfaW5mbyggaW50IGRldm51bSApOwogCiAKQEAgLTEwMCw3ICsxMDAsNyBAQAogICoJZ2VuZXJpYyBwYXJhbWV0ZXIgY2hlY2tpbmcgY29kZQogICovCiBzdGF0aWMgY29uc3QgZnBnYV9kZXNjICogY29uc3QgZnBnYV92YWxpZGF0ZSggaW50IGRldm51bSwgdm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnNpemUsIGNoYXIgKmZuICkKKwkJCQkJIHNpemVfdCBic2l6ZSwgY2hhciAqZm4gKQogewogCWNvbnN0IGZwZ2FfZGVzYyAqIGNvbnN0IGRlc2MgPSBmcGdhX2dldF9kZXNjKCBkZXZudW0gKTsKIApkaWZmIC0tZ2l0IGEvY29tbW9uL2h1c2guYyBiL2NvbW1vbi9odXNoLmMKaW5kZXggMTk5MzM5OC4uZGJiOTUyZCAxMDA2NDQKLS0tIGEvY29tbW9uL2h1c2guYworKysgYi9jb21tb24vaHVzaC5jCkBAIC05NCw3ICs5NCw4IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+ICAgICAgICAvKiByZWFkbGluZSAqLwogI2luY2x1ZGUgPGh1c2guaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+ICAgICAgICAvKiBmaW5kX2NtZCAqLwotI2luY2x1ZGUgPGNtZF9ib290bS5oPiAgICAgIC8qIGRvX2Jvb3RkICovCisvKmNtZF9ib290LmMqLworZXh0ZXJuIGludCBkb19ib290ZCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOyAgICAgIC8qIGRvX2Jvb3RkICovCiAjZW5kaWYKICNpZmRlZiBDRkdfSFVTSF9QQVJTRVIKICNpZm5kZWYgX19VX0JPT1RfXwpAQCAtMTA0OCwxMiArMTA0OSwxMiBAQAogCQlpLT5wID0gdGhlX2NvbW1hbmQ7CiAJfQogCWVsc2UgewotCSAgICAgICAgaWYgKGNvbnNvbGVfYnVmZmVyWzBdICE9ICdcbicpIHsKLQkgICAgICAgICAgICAgICAgaWYgKHN0cmxlbih0aGVfY29tbWFuZCkgKyBzdHJsZW4oY29uc29sZV9idWZmZXIpCisJCWlmIChjb25zb2xlX2J1ZmZlclswXSAhPSAnXG4nKSB7CisJCQlpZiAoc3RybGVuKHRoZV9jb21tYW5kKSArIHN0cmxlbihjb25zb2xlX2J1ZmZlcikKIAkJCSAgICA8IENGR19DQlNJWkUpIHsKLQkJCSAgICAgICAgbiA9IHN0cmxlbih0aGVfY29tbWFuZCk7Ci0JCQkgICAgICAgIHRoZV9jb21tYW5kW24tMV0gPSAnICc7Ci0JCQkgICAgICAgIHN0cmNweSgmdGhlX2NvbW1hbmRbbl0sY29uc29sZV9idWZmZXIpOworCQkJCW4gPSBzdHJsZW4odGhlX2NvbW1hbmQpOworCQkJCXRoZV9jb21tYW5kW24tMV0gPSAnICc7CisJCQkJc3RyY3B5KCZ0aGVfY29tbWFuZFtuXSxjb25zb2xlX2J1ZmZlcik7CiAJCQl9CiAJCQllbHNlIHsKIAkJCQl0aGVfY29tbWFuZFswXSA9ICdcbic7CkBAIC0xMjU3LDggKzEyNTgsOCBAQAogCQkJaWYgKHAgIT0gY2hpbGQtPmFyZ3ZbaV0pIGZyZWUocCk7CiAJCX0KIAkJY2hpbGQtPmFyZ3YrPWk7ICAvKiBYWFggdGhpcyBoYWNrIGlzbid0IHNvIGhvcnJpYmxlLCBzaW5jZSB3ZSBhcmUgYWJvdXQKLQkJICAgICAgICAgICAgICAgICAgICAgICAgdG8gZXhpdCwgYW5kIHRoZXJlZm9yZSBkb24ndCBuZWVkIHRvIGtlZXAgZGF0YQotCQkgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzIGNvbnNpc3RlbnQgZm9yIGZyZWUoKSB1c2UuICovCisJCQkJCXRvIGV4aXQsIGFuZCB0aGVyZWZvcmUgZG9uJ3QgbmVlZCB0byBrZWVwIGRhdGEKKwkJCQkJc3RydWN0dXJlcyBjb25zaXN0ZW50IGZvciBmcmVlKCkgdXNlLiAqLwogCQkvKiBJZiBhIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGluIGEgZm9yZXN0LCBhbmQgbm9ib2R5IGxpc3RlbnMsCiAJCSAqIHdhcyBpdCBldmVyIHJlYWxseSBzZXQ/CiAJCSAqLwpAQCAtMTY0OCwxNCArMTY0OSwxOCBAQAogCQkJCQljaGlsZC0+YXJndltpXSk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQotCQkgICAJLyogTG9vayB1cCBjb21tYW5kIGluIGNvbW1hbmQgdGFibGUgKi8KKwkJCS8qIExvb2sgdXAgY29tbWFuZCBpbiBjb21tYW5kIHRhYmxlICovCisKKwogCQkJaWYgKChjbWR0cCA9IGZpbmRfY21kKGNoaWxkLT5hcmd2W2ldKSkgPT0gTlVMTCkgewogCQkJCXByaW50ZiAoIlVua25vd24gY29tbWFuZCAnJXMnIC0gdHJ5ICdoZWxwJ1xuIiwgY2hpbGQtPmFyZ3ZbaV0pOwogCQkJCXJldHVybiAtMTsJLyogZ2l2ZSB1cCBhZnRlciBiYWQgY29tbWFuZCAqLwogCQkJfSBlbHNlIHsKIAkJCQlpbnQgcmNvZGU7CiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQk9PVEQpCi0JCSAgICAgICAgICAgICAgICAvKiBhdm9pZCAiYm9vdGQiIHJlY3Vyc2lvbiAqLworCSAgICBleHRlcm4gaW50IGRvX2Jvb3RkIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKKwkJCQkvKiBhdm9pZCAiYm9vdGQiIHJlY3Vyc2lvbiAqLwogCQkJCWlmIChjbWR0cC0+Y21kID09IGRvX2Jvb3RkKSB7CiAJCQkJCWlmIChmbGFnICYgQ01EX0ZMQUdfQk9PVEQpIHsKIAkJCQkJCXByaW50ZiAoIidib290ZCcgcmVjdXJzaW9uIGRldGVjdGVkXG4iKTsKQEAgLTE2NjUsNyArMTY3MCw3IEBACiAJCQkJCWZsYWcgfD0gQ01EX0ZMQUdfQk9PVEQ7CiAJCQkJfQogI2VuZGlmCS8qIENGR19DTURfQk9PVEQgKi8KLQkJICAgICAgICAgICAgICAgIC8qIGZvdW5kIC0gY2hlY2sgbWF4IGFyZ3MgKi8KKwkJCQkvKiBmb3VuZCAtIGNoZWNrIG1heCBhcmdzICovCiAJCQkJaWYgKChjaGlsZC0+YXJnYyAtIGkpID4gY21kdHAtPm1heGFyZ3MpIHsKIAkJCQkJcHJpbnRmICgiVXNhZ2U6XG4lc1xuIiwgY21kdHAtPnVzYWdlKTsKIAkJCQkJcmV0dXJuIC0xOwpAQCAtMTY3NiwxNSArMTY4MSwyMCBAQAogCQkJCXJjb2RlID0geC0+ZnVuY3Rpb24oY2hpbGQpOwogI2Vsc2UKIAkJCQkvKiBPSyAtIGNhbGwgZnVuY3Rpb24gdG8gZG8gdGhlIGNvbW1hbmQgKi8KKwogCQkJCXJjb2RlID0gKGNtZHRwLT5jbWQpCi0JCQkJCShjbWR0cCwgZmxhZyxjaGlsZC0+YXJnYy1pLCZjaGlsZC0+YXJndltpXSk7CisoY21kdHAsIGZsYWcsY2hpbGQtPmFyZ2MtaSwmY2hpbGQtPmFyZ3ZbaV0pOwogCQkJCWlmICggIWNtZHRwLT5yZXBlYXRhYmxlICkKIAkJCQkJZmxhZ19yZXBlYXQgPSAwOworCisKICNlbmRpZgogCQkJCWNoaWxkLT5hcmd2LT1pOyAgLyogWFhYIHJlc3RvcmUgaGFjayBzbyBmcmVlKCkgY2FuIHdvcmsgcmlnaHQgKi8KICNpZm5kZWYgX19VX0JPT1RfXworCiAJCQkJcmVzdG9yZV9yZWRpcmVjdHMoc3F1aXJyZWwpOwogI2VuZGlmCisKIAkJCQlyZXR1cm4gcmNvZGU7CiAJCQl9CiAJCX0KQEAgLTE5NjUsMTEgKzE5NzUsMTEgQEAKICNpZm5kZWYgX19VX0JPT1RfXwogCQkJZ2xvYmZyZWUoJmNoaWxkLT5nbG9iX3Jlc3VsdCk7CiAjZWxzZQotCSAgICAgICAgICAgICAgICBmb3IgKGEgPSBjaGlsZC0+YXJnYzthID49IDA7YS0tKSB7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShjaGlsZC0+YXJndlthXSk7Ci0JICAgICAgICAgICAgICAgIH0KKwkJCWZvciAoYSA9IGNoaWxkLT5hcmdjO2EgPj0gMDthLS0pIHsKKwkJCQlmcmVlKGNoaWxkLT5hcmd2W2FdKTsKKwkJCX0KIAkJCQkJZnJlZShjaGlsZC0+YXJndik7Ci0JICAgICAgICAgICAgICAgIGNoaWxkLT5hcmdjID0gMDsKKwkJCWNoaWxkLT5hcmdjID0gMDsKICNlbmRpZgogCQkJY2hpbGQtPmFyZ3Y9TlVMTDsKIAkJfSBlbHNlIGlmIChjaGlsZC0+Z3JvdXApIHsKQEAgLTIxMDMsMTcgKzIxMTMsMTcgQEAKIHsKIAlpbnQgZ3I7CiAKLSAJLyogc2hvcnQtY2lyY3VpdCBmb3IgbnVsbCB3b3JkICovCisJLyogc2hvcnQtY2lyY3VpdCBmb3IgbnVsbCB3b3JkICovCiAJLyogd2UgY2FuIGNvZGUgdGhpcyBiZXR0ZXIgd2hlbiB0aGUgZGVidWdfcHJpbnRmJ3MgYXJlIGdvbmUgKi8KLSAJaWYgKGRlc3QtPmxlbmd0aCA9PSAwKSB7Ci0gCQlpZiAoZGVzdC0+bm9ubnVsbCkgewotIAkJCS8qIGJhc2ggbWFuIHBhZ2UgY2FsbHMgdGhpcyBhbiAiZXhwbGljaXQiIG51bGwgKi8KLSAJCQlnciA9IGdsb2JoYWNrKGRlc3QtPmRhdGEsIGZsYWdzLCBwZ2xvYik7Ci0gCQkJZGVidWdfcHJpbnRmKCJnbG9iaGFjayByZXR1cm5lZCAlZFxuIixncik7Ci0gCQl9IGVsc2UgeworCWlmIChkZXN0LT5sZW5ndGggPT0gMCkgeworCQlpZiAoZGVzdC0+bm9ubnVsbCkgeworCQkJLyogYmFzaCBtYW4gcGFnZSBjYWxscyB0aGlzIGFuICJleHBsaWNpdCIgbnVsbCAqLworCQkJZ3IgPSBnbG9iaGFjayhkZXN0LT5kYXRhLCBmbGFncywgcGdsb2IpOworCQkJZGVidWdfcHJpbnRmKCJnbG9iaGFjayByZXR1cm5lZCAlZFxuIixncik7CisJCX0gZWxzZSB7CiAJCQlyZXR1cm4gMDsKIAkJfQotIAl9IGVsc2UgaWYgKGdsb2JfbmVlZGVkKGRlc3QtPmRhdGEpKSB7CisJfSBlbHNlIGlmIChnbG9iX25lZWRlZChkZXN0LT5kYXRhKSkgewogCQlnciA9IGdsb2IoZGVzdC0+ZGF0YSwgZmxhZ3MsIE5VTEwsIHBnbG9iKTsKIAkJZGVidWdfcHJpbnRmKCJnbG9iIHJldHVybmVkICVkXG4iLGdyKTsKIAkJaWYgKGdyID09IEdMT0JfTk9NQVRDSCkgewpAQCAtMjQ2Miw3ICsyNDcyLDcgQEAKIAkJfQogI2lmbmRlZiBfX1VfQk9PVF9fCiAJCWdsb2JfdGFyZ2V0ID0gJmNoaWxkLT5nbG9iX3Jlc3VsdDsKLSAJCWlmIChjaGlsZC0+YXJndikgZmxhZ3MgfD0gR0xPQl9BUFBFTkQ7CisJCWlmIChjaGlsZC0+YXJndikgZmxhZ3MgfD0gR0xPQl9BUFBFTkQ7CiAjZWxzZQogCQlmb3IgKGNudCA9IDEsIHMgPSBkZXN0LT5kYXRhOyBzICYmICpzOyBzKyspIHsKIAkJCWlmICgqcyA9PSAnXFwnKSBzKys7CkBAIC0yNTIyLDkgKzI1MzIsOSBAQAogCXN0cnVjdCBjaGlsZF9wcm9nICpwcm9nPWN0eC0+Y2hpbGQ7CiAKIAlpZiAocHJvZyAmJiBwcm9nLT5ncm91cCA9PSBOVUxMCi0JICAgICAgICAgJiYgcHJvZy0+YXJndiA9PSBOVUxMCisJCSAmJiBwcm9nLT5hcmd2ID09IE5VTEwKICNpZm5kZWYgX19VX0JPT1RfXwotCSAgICAgICAgICYmIHByb2ctPnJlZGlyZWN0cyA9PSBOVUxMKSB7CisJCSAmJiBwcm9nLT5yZWRpcmVjdHMgPT0gTlVMTCkgewogI2Vsc2UKIAkJCQkJCQkJCQkpIHsKICNlbmRpZgpAQCAtMzMzOSw3ICszMzQ5LDcgQEAKIAlkZWJ1Z19wcmludGYoIlxuaW50ZXJhY3RpdmU9JWRcbiIsIGludGVyYWN0aXZlKTsKIAlpZiAoaW50ZXJhY3RpdmUpIHsKIAkJLyogTG9va3MgbGlrZSB0aGV5IHdhbnQgYW4gaW50ZXJhY3RpdmUgc2hlbGwgKi8KLSNpZm5kZWYgQ09ORklHX0ZFQVRVUkVfU0hfRVhUUkFfUVVJRVQgCisjaWZuZGVmIENPTkZJR19GRUFUVVJFX1NIX0VYVFJBX1FVSUVUCiAJCXByaW50ZiggIlxuXG4iIEJCX0JBTk5FUiAiIGh1c2ggLSB0aGUgaHVtYmxlIHNoZWxsIHYwLjAxICh0ZXN0aW5nKVxuIik7CiAJCXByaW50ZiggIkVudGVyICdoZWxwJyBmb3IgYSBsaXN0IG9mIGJ1aWx0LWluIGNvbW1hbmRzLlxuXG4iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tbW9uL2tnZGIuYyBiL2NvbW1vbi9rZ2RiLmMKaW5kZXggYjU2MzA5NC4uNzNmZDlhOCAxMDA2NDQKLS0tIGEvY29tbW9uL2tnZGIuYworKysgYi9jb21tb24va2dkYi5jCkBAIC01NzMsNiArNTczLDIwIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK2NtZF90YmxfdCBVX0JPT1RfQ01EKEtHREIpID0gTUtfQ01EX0VOVFJZKAorCSJrZ2RiIiwgQ0ZHX01BWEFSR1MsIDEsCWRvX2tnZGIsCisJImtnZGIgICAgLSBlbnRlciBnZGIgcmVtb3RlIGRlYnVnIG1vZGVcbiIsCisJIlthcmcwIGFyZzEgLi4gYXJnTl1cbiIKKwkiICAgIC0gZXhlY3V0ZXMgYSBicmVha3BvaW50IHNvIHRoYXQga2dkYiBtb2RlIGlzXG4iCisJIiAgICAgIGVudGVyZWQgdmlhIHRoZSBleGNlcHRpb24gaGFuZGxlci4gVG8gcmV0dXJuXG4iCisJIiAgICAgIHRvIHRoZSBtb25pdG9yLCB0aGUgcmVtb3RlIGdkYiBkZWJ1Z2dlciBtdXN0XG4iCisJIiAgICAgIGV4ZWN1dGUgYSBcImNvbnRpbnVlXCIgb3IgXCJxdWl0XCIgY29tbWFuZC5cbiIKKwkiXG4iCisJIiAgICAgIGlmIGEgcHJvZ3JhbSBpcyBsb2FkZWQgYnkgdGhlIHJlbW90ZSBnZGIsIGFueSBhcmdzXG4iCisJIiAgICAgIHBhc3NlZCB0byB0aGUga2dkYiBjb21tYW5kIGFyZSBnaXZlbiB0byB0aGUgbG9hZGVkXG4iCisJIiAgICAgIHByb2dyYW0gaWYgaXQgaXMgZXhlY3V0ZWQgKHNlZSB0aGUgXCJoZWxsb193b3JsZFwiXG4iCisJIiAgICAgIGV4YW1wbGUgcHJvZ3JhbSBpbiB0aGUgVS1Cb290IGV4YW1wbGVzIGRpcmVjdG9yeSkuIgorKTsKICNlbHNlCiAKIGludCBrZ2RiX25vdF9jb25maWd1cmVkID0gMTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9tYWluLmMgYi9jb21tb24vbWFpbi5jCmluZGV4IGY1Mzg4NzAuLmY3ODMwYTEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9tYWluLmMKKysrIGIvY29tbW9uL21haW4uYwpAQCAtMjYsMTcgKzI2LDE5IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8d2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX252ZWRpdC5oPgotI2luY2x1ZGUgPGNtZF9ib290bS5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgotI2lmIGRlZmluZWQoQ09ORklHX0JPT1RfUkVUUllfVElNRSkgJiYgZGVmaW5lZChDT05GSUdfUkVTRVRfVE9fUkVUUlkpCi0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4JCS8qIGZvciBkb19yZXNldCgpIHByb3RvdHlwZSAqLwotI2VuZGlmCiAKICNpZmRlZiBDRkdfSFVTSF9QQVJTRVIKICNpbmNsdWRlIDxodXNoLmg+CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0JPT1RfUkVUUllfVElNRSkgJiYgZGVmaW5lZChDT05GSUdfUkVTRVRfVE9fUkVUUlkpCitleHRlcm4gaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CQkvKiBmb3IgZG9fcmVzZXQoKSBwcm90b3R5cGUgKi8KKyNlbmRpZgorCitleHRlcm4gaW50IGRvX2Jvb3RkIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKKwogI2RlZmluZSBNQVhfREVMQVlfU1RPUF9TVFIgMzIKIAogc3RhdGljIGNoYXIgKiBkZWxldGVfY2hhciAoY2hhciAqYnVmZmVyLCBjaGFyICpwLCBpbnQgKmNvbHAsIGludCAqbnAsIGludCBwbGVuKTsKQEAgLTE0Myw3ICsxNDUsNyBAQAogCQkJaWYgKGRlbGF5a2V5W2ldLmxlbiA+IDAgJiYKIAkJCSAgICBwcmVzc2tleV9sZW4gPj0gZGVsYXlrZXlbaV0ubGVuICYmCiAJCQkgICAgbWVtY21wIChwcmVzc2tleSArIHByZXNza2V5X2xlbiAtIGRlbGF5a2V5W2ldLmxlbiwKLQkJICAgICAgICAJICAgIGRlbGF5a2V5W2ldLnN0ciwKKwkJCQkgICAgZGVsYXlrZXlbaV0uc3RyLAogCQkJCSAgICBkZWxheWtleVtpXS5sZW4pID09IDApIHsKICMgIGlmIERFQlVHX0JPT1RLRVlTCiAJCQkJcHJpbnRmKCJnb3QgJXNrZXlcbiIsCkBAIC0xOTYsMTcgKzE5OCwxNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkIENPTkZJR19aRVJPX0JPT1RERUxBWV9DSEVDSwotICAgICAgICAvKgotICAgICAgICAgKiBDaGVjayBpZiBrZXkgYWxyZWFkeSBwcmVzc2VkCi0gICAgICAgICAqIERvbid0IGNoZWNrIGlmIGJvb3RkZWxheSA8IDAKLSAgICAgICAgICovCisJLyoKKwkgKiBDaGVjayBpZiBrZXkgYWxyZWFkeSBwcmVzc2VkCisJICogRG9uJ3QgY2hlY2sgaWYgYm9vdGRlbGF5IDwgMAorCSAqLwogCWlmIChib290ZGVsYXkgPj0gMCkgewogCQlpZiAodHN0YygpKSB7CS8qIHdlIGdvdCBhIGtleSBwcmVzcwkqLwogCQkJKHZvaWQpIGdldGMoKTsgIC8qIGNvbnN1bWUgaW5wdXQJKi8KIAkJCXByaW50ZiAoIlxiXGJcYiAwXG4iKTsKIAkJCXJldHVybiAxOyAJLyogZG9uJ3QgYXV0byBib290CSovCiAJCX0KLSAgICAgICAgfQorCX0KICNlbmRpZgogCiAJd2hpbGUgKGJvb3RkZWxheSA+IDApIHsKQEAgLTYzMyw3ICs2MzUsNyBAQAogCWludCBzdGF0ZSA9IDA7CS8qIDAgPSB3YWl0aW5nIGZvciAnJCcJKi8KIAkJCS8qIDEgPSB3YWl0aW5nIGZvciAnKCcJKi8KIAkJCS8qIDIgPSB3YWl0aW5nIGZvciAnKScJKi8KLQkgICAgICAgICAgICAgICAgLyogMyA9IHdhaXRpbmcgZm9yICcnJyAgKi8KKwkJCS8qIDMgPSB3YWl0aW5nIGZvciAnJycgICovCiAjaWZkZWYgREVCVUdfUEFSU0VSCiAJY2hhciAqb3V0cHV0X3N0YXJ0ID0gb3V0cHV0OwogCkBAIC02NTIsNyArNjU0LDcgQEAKIAkJaWYgKGlucHV0Y250LS0gPT0gMCkKIAkJCWJyZWFrOwogCQlwcmV2ID0gYzsKLQkgICAgCWMgPSAqaW5wdXQrKzsKKwkJYyA9ICppbnB1dCsrOwogCSAgICB9CiAJICAgIH0KIApkaWZmIC0tZ2l0IGEvY29tbW9uL21paXBoeWJiLmMgYi9jb21tb24vbWlpcGh5YmIuYwppbmRleCBkZmMxOTkyLi44ZDE4OTE5IDEwMDY0NAotLS0gYS9jb21tb24vbWlpcGh5YmIuYworKysgYi9jb21tb24vbWlpcGh5YmIuYwpAQCAtMjI4LDQgKzIyOCwzIEBACiB9CiAKICNlbmRpZiAvKiBDT05GSUdfQklUQkFOR01JSSAqLwotCmRpZmYgLS1naXQgYS9jb21tb24vc29mdF9pMmMuYyBiL2NvbW1vbi9zb2Z0X2kyYy5jCmluZGV4IGRjMjZkNmYuLjlhMTBiMzEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9zb2Z0X2kyYy5jCisrKyBiL2NvbW1vbi9zb2Z0X2kyYy5jCkBAIC0yNjcsMTAgKzI2NywxMCBAQAogdm9pZCBpMmNfaW5pdCAoaW50IHNwZWVkLCBpbnQgc2xhdmVhZGRyKQogewogCS8qCi0gICAgICAgICAqIFdBUk5JTkc6IERvIE5PVCBzYXZlIHNwZWVkIGluIGEgc3RhdGljIHZhcmlhYmxlOiBpZiB0aGUKLSAgICAgICAgICogSTJDIHJvdXRpbmVzIGFyZSBjYWxsZWQgYmVmb3JlIFJBTSBpcyBpbml0aWFsaXplZCAodG8gcmVhZAotICAgICAgICAgKiB0aGUgRElNTSBTUEQsIGZvciBpbnN0YW5jZSksIFJBTSB3b24ndCBiZSB1c2FibGUgYW5kIHlvdXIKLSAgICAgICAgICogc3lzdGVtIHdpbGwgY3Jhc2guCisJICogV0FSTklORzogRG8gTk9UIHNhdmUgc3BlZWQgaW4gYSBzdGF0aWMgdmFyaWFibGU6IGlmIHRoZQorCSAqIEkyQyByb3V0aW5lcyBhcmUgY2FsbGVkIGJlZm9yZSBSQU0gaXMgaW5pdGlhbGl6ZWQgKHRvIHJlYWQKKwkgKiB0aGUgRElNTSBTUEQsIGZvciBpbnN0YW5jZSksIFJBTSB3b24ndCBiZSB1c2FibGUgYW5kIHlvdXIKKwkgKiBzeXN0ZW0gd2lsbCBjcmFzaC4KIAkgKi8KIAlzZW5kX3Jlc2V0ICgpOwogfQpkaWZmIC0tZ2l0IGEvY29tbW9uL3NvZnRfc3BpLmMgYi9jb21tb24vc29mdF9zcGkuYwppbmRleCBiOWE4ZmE4Li4wMGE1N2RlIDEwMDY0NAotLS0gYS9jb21tb24vc29mdF9zcGkuYworKysgYi9jb21tb24vc29mdF9zcGkuYwpAQCAtNDAsNyArNDAsNiBAQAogI2VuZGlmCiAKIAotCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWMgRnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0xMzIsNCArMTMxLDMgQEAKIH0KIAogI2VuZGlmCS8qIENPTkZJR19TT0ZUX1NQSSAqLwotCmRpZmYgLS1naXQgYS9jb21tb24vc3BhcnRhbjIuYyBiL2NvbW1vbi9zcGFydGFuMi5jCmluZGV4IGRjZGEwYzQuLjI3OWE0MjYgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9zcGFydGFuMi5jCisrKyBiL2NvbW1vbi9zcGFydGFuMi5jCkBAIC00MzgsMTEgKzQzOCwxMSBAQAogCiBzdGF0aWMgaW50IFNwYXJ0YW4yX3NzX2xvYWQgKFhpbGlueF9kZXNjICogZGVzYywgdm9pZCAqYnVmLCBzaXplX3QgYnNpemUpCiB7Ci0gICAgICAgIGludCByZXRfdmFsID0gRlBHQV9GQUlMOwkvKiBhc3N1bWUgdGhlIHdvcnN0ICovCisJaW50IHJldF92YWwgPSBGUEdBX0ZBSUw7CS8qIGFzc3VtZSB0aGUgd29yc3QgKi8KIAlYaWxpbnhfU3BhcnRhbjJfU2xhdmVfU2VyaWFsX2ZucyAqZm4gPSBkZXNjLT5pZmFjZV9mbnM7Ci0gICAgICAgIGludCBpOwotICAgICAgICBjaGFyICB2YWw7Ci0gICAgICAgIAorCWludCBpOworCWNoYXIgIHZhbDsKKwogCVBSSU5URiAoIiVzOiBzdGFydCB3aXRoIGludGVyZmFjZSBmdW5jdGlvbnMgQCAweCVwXG4iLAogCQkJX19GVU5DVElPTl9fLCBmbik7CiAKQEAgLTQ2MCw4ICs0NjAsOCBAQAogCQkJCSJjbGs6XHQweCVwXG4iCiAJCQkJIndyOlx0MHglcFxuIgogCQkJCSJkb25lOlx0MHglcFxuXG4iLAotCQkJCV9fRlVOQ1RJT05fXywgJmZuLCBmbiwgZm4tPnBnbSwgZm4tPmluaXQsIAotCQkJCWZuLT5jbGssIGZuLT53ciwgZm4tPmRvbmUpOyAKKwkJCQlfX0ZVTkNUSU9OX18sICZmbiwgZm4sIGZuLT5wZ20sIGZuLT5pbml0LAorCQkJCWZuLT5jbGssIGZuLT53ciwgZm4tPmRvbmUpOwogI2lmZGVmIENGR19GUEdBX1BST0dfRkVFREJBQ0sKIAkJcHJpbnRmICgiTG9hZGluZyBGUEdBIERldmljZSAlZC4uLlxuIiwgY29va2llKTsKICNlbmRpZgpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCS8qIEVzdGFibGlzaCB0aGUgaW5pdGlhbCBzdGF0ZSAqLwogCQkoKmZuLT5wZ20pIChUUlVFLCBUUlVFLCBjb29raWUpOwkvKiBBc3NlcnQgdGhlIHByb2dyYW0sIGNvbW1pdCAqLwogCi0gICAgICAgICAgICAgICAgLyogV2FpdCBmb3IgSU5JVCBzdGF0ZSAoaW5pdCBsb3cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCS8qIFdhaXQgZm9yIElOSVQgc3RhdGUgKGluaXQgbG93KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCQl0cyA9IGdldF90aW1lciAoMCk7CQkvKiBnZXQgY3VycmVudCB0aW1lICovCiAJCWRvIHsKIAkJCUNPTkZJR19GUEdBX0RFTEFZICgpOwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCQkJcmV0dXJuIEZQR0FfRkFJTDsKIAkJCX0KIAkJfSB3aGlsZSAoISgqZm4tPmluaXQpIChjb29raWUpKTsKLSAgICAgICAgICAgICAgICAKKwogCQkvKiBHZXQgcmVhZHkgZm9yIHRoZSBidXJuICovCiAJCUNPTkZJR19GUEdBX0RFTEFZICgpOwogCQkoKmZuLT5wZ20pIChGQUxTRSwgVFJVRSwgY29va2llKTsJLyogRGVhc3NlcnQgdGhlIHByb2dyYW0sIGNvbW1pdCAqLwpAQCAtNTAyLDI5ICs1MDIsMjkgQEAKIAogCQkvKiBMb2FkIHRoZSBkYXRhICovCiAJCXdoaWxlIChieXRlY291bnQgPCBic2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhpbGlueCBkZXRlY3RzIGFuIGVycm9yIGlmIElOSVQgZ29lcyBsb3cgKGFjdGl2ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIERPTkUgaXMgbG93IChpbmFjdGl2ZSkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKmZuLT5kb25lKSAoY29va2llKSA9PSAwICYmICgqZm4tPmluaXQpIChjb29raWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dHMgKCIqKiBDUkMgZXJyb3IgZHVyaW5nIEZQR0EgbG9hZC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZQR0FfRkFJTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBkYXRhIFtieXRlY291bnQgKytdOwotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERlYXNzZXJ0IHRoZSBjbG9jayAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKmZuLT5jbGspIChGQUxTRSwgVFJVRSwgY29va2llKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ORklHX0ZQR0FfREVMQVkgKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRlIGRhdGEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpmbi0+d3IpICgodmFsIDwgMCksIFRSVUUsIGNvb2tpZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZJR19GUEdBX0RFTEFZICgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgdGhlIGNsb2NrICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqZm4tPmNsaykgKFRSVUUsIFRSVUUsIGNvb2tpZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZJR19GUEdBX0RFTEFZICgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPDw9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgLS07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChpID4gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKworCQkJLyogWGlsaW54IGRldGVjdHMgYW4gZXJyb3IgaWYgSU5JVCBnb2VzIGxvdyAoYWN0aXZlKQorCQkJICAgd2hpbGUgRE9ORSBpcyBsb3cgKGluYWN0aXZlKSAqLworCQkJaWYgKCgqZm4tPmRvbmUpIChjb29raWUpID09IDAgJiYgKCpmbi0+aW5pdCkgKGNvb2tpZSkpIHsKKwkJCQlwdXRzICgiKiogQ1JDIGVycm9yIGR1cmluZyBGUEdBIGxvYWQuXG4iKTsKKwkJCQlyZXR1cm4gKEZQR0FfRkFJTCk7CisJCQl9CisJCQl2YWwgPSBkYXRhIFtieXRlY291bnQgKytdOworCQkJaSA9IDg7CisJCQlkbyB7CisJCQkJLyogRGVhc3NlcnQgdGhlIGNsb2NrICovCisJCQkJKCpmbi0+Y2xrKSAoRkFMU0UsIFRSVUUsIGNvb2tpZSk7CisJCQkJQ09ORklHX0ZQR0FfREVMQVkgKCk7CisJCQkJLyogV3JpdGUgZGF0YSAqLworCQkJCSgqZm4tPndyKSAoKHZhbCA8IDApLCBUUlVFLCBjb29raWUpOworCQkJCUNPTkZJR19GUEdBX0RFTEFZICgpOworCQkJCS8qIEFzc2VydCB0aGUgY2xvY2sgKi8KKwkJCQkoKmZuLT5jbGspIChUUlVFLCBUUlVFLCBjb29raWUpOworCQkJCUNPTkZJR19GUEdBX0RFTEFZICgpOworCQkJCXZhbCA8PD0gMTsKKwkJCQlpIC0tOworCQkJfSB3aGlsZSAoaSA+IDApOworCiAjaWZkZWYgQ0ZHX0ZQR0FfUFJPR19GRUVEQkFDSwogCQkJaWYgKGJ5dGVjb3VudCAlIChic2l6ZSAvIDQwKSA9PSAwKQogCQkJCXB1dGMgKCcuJyk7CQkvKiBsZXQgdGhlbSBrbm93IHdlIGFyZSBhbGl2ZSAqLwpAQCAtNTQwLDcgKzU0MCw3IEBACiAJCS8qIG5vdyBjaGVjayBmb3IgZG9uZSBzaWduYWwgKi8KIAkJdHMgPSBnZXRfdGltZXIgKDApOwkJLyogZ2V0IGN1cnJlbnQgdGltZSAqLwogCQlyZXRfdmFsID0gRlBHQV9TVUNDRVNTOwotICAgICAgICAgICAgICAgICgqZm4tPndyKSAoVFJVRSwgVFJVRSwgY29va2llKTsKKwkJKCpmbi0+d3IpIChUUlVFLCBUUlVFLCBjb29raWUpOwogCiAJCXdoaWxlICghICgqZm4tPmRvbmUpIChjb29raWUpKSB7CiAJCQkvKiBYWFggLSB3ZSBzaG91bGQgaGF2ZSBhIGNoZWNrIGluIGhlcmUgc29tZXdoZXJlIHRvCkBAIC01NTEsOCArNTUxLDggQEAKIAkJCUNPTkZJR19GUEdBX0RFTEFZICgpOwogCQkJKCpmbi0+Y2xrKSAoVFJVRSwgVFJVRSwgY29va2llKTsJLyogQXNzZXJ0IHRoZSBjbG9jayBwaW4gKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgcHV0YyAoJyonKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCQkJcHV0YyAoJyonKTsKKwogCQkJaWYgKGdldF90aW1lciAodHMpID4gQ0ZHX0ZQR0FfV0FJVCkgewkvKiBjaGVjayB0aGUgdGltZSAqLwogCQkJCXB1dHMgKCIqKiBUaW1lb3V0IHdhaXRpbmcgZm9yIERPTkUgdG8gY2xlYXIuXG4iKTsKIAkJCQlyZXRfdmFsID0gRlBHQV9GQUlMOwpAQCAtNTc5LDggKzU3OSw4IEBACiAKIHN0YXRpYyBpbnQgU3BhcnRhbjJfc3NfZHVtcCAoWGlsaW54X2Rlc2MgKiBkZXNjLCB2b2lkICpidWYsIHNpemVfdCBic2l6ZSkKIHsKLSAgICAgICAgLyogUmVhZGJhY2sgaXMgb25seSBhdmFpbGFibGUgdGhyb3VnaCB0aGUgU2xhdmUgUGFyYWxsZWwgYW5kICAgICAgICAgKi8KLSAgICAgICAgLyogYm91bmRhcnktc2NhbiBpbnRlcmZhY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBSZWFkYmFjayBpcyBvbmx5IGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBTbGF2ZSBQYXJhbGxlbCBhbmQgICAgICAgICAqLworCS8qIGJvdW5kYXJ5LXNjYW4gaW50ZXJmYWNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJcHJpbnRmICgiJXM6IFNsYXZlIFNlcmlhbCBEdW1waW5nIGlzIHVuYXZhaWxhYmxlXG4iLAogCQkJX19GVU5DVElPTl9fKTsKIAlyZXR1cm4gRlBHQV9GQUlMOwpkaWZmIC0tZ2l0IGEvY29tbW9uL3VzYi5jIGIvY29tbW9uL3VzYi5jCmluZGV4IGE1YjI5YTUuLjk0NzRhYmUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi91c2IuYworKysgYi9jb21tb24vdXNiLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKICNlbmRpZgogCiAKLQogI3VuZGVmIFVTQl9ERUJVRwogCiAjaWZkZWYJVVNCX0RFQlVHCmRpZmYgLS1naXQgYS9jb21tb24vdXNiX2tiZC5jIGIvY29tbW9uL3VzYl9rYmQuYwppbmRleCBhZDdlNjEwLi41NmMyMTY2IDEwMDY0NAotLS0gYS9jb21tb24vdXNiX2tiZC5jCisrKyBiL2NvbW1vbi91c2Jfa2JkLmMKQEAgLTQwMiw3ICs0MDIsNiBAQAogI2RlZmluZSBISURfSVRFTV9UQUdfTE9ORwkxNQogCiAKLQogc3RhdGljIHN0cnVjdCB1c2JfaGlkX2Rlc2NyaXB0b3IgdXNiX2tiZF9oaWRfZGVzYzsKIAogdm9pZCB1c2Jfa2JkX2Rpc3BsYXlfaGlkKHN0cnVjdCB1c2JfaGlkX2Rlc2NyaXB0b3IgKmhpZCkKQEAgLTU0MSw3ICs1NDAsNiBAQAogI2RlZmluZSBISURfTE9DQUxfSVRFTV9UQUdfREVMSU1JVEVSCQkxMAogCiAKLQogc3RhdGljIHZvaWQgdXNiX2tiZF9zaG93X2l0ZW0oc3RydWN0IGhpZF9pdGVtICppdGVtKQogewogCXN3aXRjaChpdGVtLT50eXBlKSB7CkBAIC02NjYsNyArNjY0LDYgQEAKIH0KIAogCi0KIHN0YXRpYyBpbnQgdXNiX2tiZF9nZXRfaGlkX2Rlc2Moc3RydWN0IHVzYl9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyNTZdOwpAQCAtNzI5LDYgKzcyNiwzIEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIENPTkZJR19VU0JfS0VZQk9BUkQgKi8KLQotLyogZW9mICovCi0KZGlmZiAtLWdpdCBhL2NvbW1vbi91c2Jfc3RvcmFnZS5jIGIvY29tbW9uL3VzYl9zdG9yYWdlLmMKaW5kZXggYjEzNDcyMS4uYTc5NDRiNSAxMDA2NDQKLS0tIGEvY29tbW9uL3VzYl9zdG9yYWdlLmMKKysrIGIvY29tbW9uL3VzYl9zdG9yYWdlLmMKQEAgLTMyLDcgKzMyLDYgQEAKICAqLwogCiAKLQogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CkBAIC0xMDcsMTYgKzEwNiwxMSBAQAogc3RhdGljIHN0cnVjdCB1c19kYXRhIHVzYl9zdG9yW1VTQl9NQVhfU1RPUl9ERVZdOwogCiAKLQogI2RlZmluZSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCAgICAwCiAjZGVmaW5lIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQgLTEKICNkZWZpbmUgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SICAtMgogCiAKLQotCi0KLQogaW50IHVzYl9zdG9yX2dldF9pbmZvKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCB1c19kYXRhICp1cywgYmxvY2tfZGV2X2Rlc2NfdCAqZGV2X2Rlc2MpOwogaW50IHVzYl9zdG9yYWdlX3Byb2JlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZm51bSxzdHJ1Y3QgdXNfZGF0YSAqc3MpOwogdW5zaWduZWQgbG9uZyB1c2Jfc3Rvcl9yZWFkKGludCBkZXZpY2UsIHVuc2lnbmVkIGxvbmcgYmxrbnIsIHVuc2lnbmVkIGxvbmcgYmxrY250LCB1bnNpZ25lZCBsb25nICpidWZmZXIpOwpAQCAtNTI5LDcgKzUyMyw2IEBACiB9CiAKIAotCiBzdGF0aWMgaW50IHVzYl9pbnF1aXJ5KGNjYiAqc3JiLHN0cnVjdCB1c19kYXRhICpzcykKIHsKIAlpbnQgcmV0cnksaTsKQEAgLTg5MCw2ICs4ODMsMyBAQAogCiAjZW5kaWYKICNlbmRpZiAvKiBDT05GSUdfVVNCX1NUT1JBR0UgKi8KLQotCi0KZGlmZiAtLWdpdCBhL2NwdS83NHh4Xzd4eC9jcHUuYyBiL2NwdS83NHh4Xzd4eC9jcHUuYwppbmRleCAxOWY4ZmY4Li4zMGEyMDkxIDEwMDY0NAotLS0gYS9jcHUvNzR4eF83eHgvY3B1LmMKKysrIGIvY3B1Lzc0eHhfN3h4L2NwdS5jCkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAhZGVmaW5lZChDT05GSUdfRUxQUEMpCiAvKiBubyBnZW5lcmljIHdheSB0byBkbyBib2FyZCByZXNldC4gc2ltcGx5IGNhbGwgc29mdF9yZXNldC4gKi8KIHZvaWQKLWRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBiZF90ICpiZCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCitkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAgICAgCXVsb25nIGFkZHI7CiAJLyogZmx1c2ggYW5kIGRpc2FibGUgSS9EIGNhY2hlICovCmRpZmYgLS1naXQgYS9jcHUvNzR4eF83eHgvc3BlZWQuYyBiL2NwdS83NHh4Xzd4eC9zcGVlZC5jCmluZGV4IDIzYjcxZDQuLjEyYmRmMzcgMTAwNjQ0Ci0tLSBhL2NwdS83NHh4Xzd4eC9zcGVlZC5jCisrKyBiL2NwdS83NHh4Xzd4eC9zcGVlZC5jCkBAIC00OSwyOSArNDksMjkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBpbnQgaGlkMV9meF9tdWx0aXBsaWVyc194XzEwW10gPSB7Ci0gICAgICAgIDAwLCAgICAgLyogMDAwMCAtIG9mZiAqLwotICAgICAgICAwMCwgICAgIC8qIDAwMDEgLSBvZmYgKi8KLSAgICAgICAgMTAsICAgICAvKiAwMDEwIC0gYnlwYXNzICovCi0gICAgICAgIDEwLCAgICAgLyogMDAxMSAtIGJ5cGFzcyAqLwotICAgICAgICAyMCwgICAgIC8qIDAxMDAgLSAyeCAqLwotICAgICAgICAyNSwgICAgIC8qIDAxMDEgLSAyLjV4ICovCi0gICAgICAgIDMwLCAgICAgLyogMDExMCAtIDN4ICovCi0gICAgICAgIDM1LCAgICAgLyogMDExMSAtIDMuNXggKi8KLSAgICAgICAgNDAsICAgICAvKiAxMDAwIC0gNHggKi8KLSAgICAgICAgNDUsICAgICAvKiAxMDAxIC0gNC41eCAqLwotICAgICAgICA1MCwgICAgIC8qIDEwMTAgLSA1eCAqLwotICAgICAgICA1NSwgICAgIC8qIDEwMTEgLSA1LjV4ICovCi0gICAgICAgIDYwLCAgICAgLyogMTEwMCAtIDZ4ICovCi0gICAgICAgIDY1LCAgICAgLyogMTEwMSAtIDYuNXggKi8KLSAgICAgICAgNzAsICAgICAvKiAxMTEwIC0gN3ggKi8KLSAgICAgICAgNzUsICAgICAvKiAxMTExIC0gNy41ICovCi0gICAgICAgIDgwLCAgICAgLyogMTAwMDAgLSA4eCAqLwotICAgICAgICA4NSwgICAgIC8qIDEwMDAxIC0gOC41eCAqLwotICAgICAgICA5MCwgICAgIC8qIDEwMDEwIC0gOXggKi8KLSAgICAgICAgOTUsICAgICAvKiAxMDAxMSAtIDkuNXggKi8KLSAgICAgICAgMTAwLCAgICAvKiAxMDEwMCAtIDEweCAqLwotICAgICAgICAxMTAsICAgIC8qIDEwMTAxIC0gMTF4ICovCi0gICAgICAgIDEyMCwgICAgLyogMTAxMTAgLSAxMnggKi8KKwkwMCwgICAgIC8qIDAwMDAgLSBvZmYgKi8KKwkwMCwgICAgIC8qIDAwMDEgLSBvZmYgKi8KKwkxMCwgICAgIC8qIDAwMTAgLSBieXBhc3MgKi8KKwkxMCwgICAgIC8qIDAwMTEgLSBieXBhc3MgKi8KKwkyMCwgICAgIC8qIDAxMDAgLSAyeCAqLworCTI1LCAgICAgLyogMDEwMSAtIDIuNXggKi8KKwkzMCwgICAgIC8qIDAxMTAgLSAzeCAqLworCTM1LCAgICAgLyogMDExMSAtIDMuNXggKi8KKwk0MCwgICAgIC8qIDEwMDAgLSA0eCAqLworCTQ1LCAgICAgLyogMTAwMSAtIDQuNXggKi8KKwk1MCwgICAgIC8qIDEwMTAgLSA1eCAqLworCTU1LCAgICAgLyogMTAxMSAtIDUuNXggKi8KKwk2MCwgICAgIC8qIDExMDAgLSA2eCAqLworCTY1LCAgICAgLyogMTEwMSAtIDYuNXggKi8KKwk3MCwgICAgIC8qIDExMTAgLSA3eCAqLworCTc1LCAgICAgLyogMTExMSAtIDcuNSAqLworCTgwLCAgICAgLyogMTAwMDAgLSA4eCAqLworCTg1LCAgICAgLyogMTAwMDEgLSA4LjV4ICovCisJOTAsICAgICAvKiAxMDAxMCAtIDl4ICovCisJOTUsICAgICAvKiAxMDAxMSAtIDkuNXggKi8KKwkxMDAsICAgIC8qIDEwMTAwIC0gMTB4ICovCisJMTEwLCAgICAvKiAxMDEwMSAtIDExeCAqLworCTEyMCwgICAgLyogMTAxMTAgLSAxMnggKi8KIH07CiAKIApAQCAtODcsOCArODcsOCBAQAogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogI2lmZGVmIENPTkZJR183NTBGWAotICAgICAgICB1bG9uZyBjbG9jayA9IENGR19CVVNfQ0xLICogXAotICAgICAgICAgICAgICAgICAgICAgIGhpZDFfZnhfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+PiAyN10gLyAxMDsKKwl1bG9uZyBjbG9jayA9IENGR19CVVNfQ0xLICogXAorCQkgICAgICBoaWQxX2Z4X211bHRpcGxpZXJzX3hfMTBbZ2V0X2hpZDEgKCkgPj4gMjddIC8gMTA7CiAjZWxzZQogCXVsb25nIGNsb2NrID0gQ0ZHX0JVU19DTEsgKiBcCiAJCSAgICAgIGhpZDFfbXVsdGlwbGllcnNfeF8xMFtnZXRfaGlkMSAoKSA+PiAyOF0gLyAxMDsKZGlmZiAtLWdpdCBhL2NwdS83NHh4Xzd4eC9zdGFydC5TIGIvY3B1Lzc0eHhfN3h4L3N0YXJ0LlMKaW5kZXggNDg1NzkwOC4uN2QzN2M4ZSAxMDA2NDQKLS0tIGEvY3B1Lzc0eHhfN3h4L3N0YXJ0LlMKKysrIGIvY3B1Lzc0eHhfN3h4L3N0YXJ0LlMKQEAgLTIzMyw5ICsyMzMsOSBAQAogCVNURF9FWENFUFRJT04oMHhlMDAsIFRyYXBfMGUsIFVua25vd25FeGNlcHRpb24pCiAJU1REX0VYQ0VQVElPTigweGYwMCwgVHJhcF8wZiwgVW5rbm93bkV4Y2VwdGlvbikKIAotICAgICAgICAvKgotICAgICAgICAgKiBPbiB0aGUgTVBDOHh4LCB0aGlzIGlzIGEgc29mdHdhcmUgZW11bGF0aW9uIGludGVycnVwdC4gSXQKLSAgICAgICAgICogb2NjdXJzIGZvciBhbGwgdW5pbXBsZW1lbnRlZCBhbmQgaWxsZWdhbCBpbnN0cnVjdGlvbnMuCisJLyoKKwkgKiBPbiB0aGUgTVBDOHh4LCB0aGlzIGlzIGEgc29mdHdhcmUgZW11bGF0aW9uIGludGVycnVwdC4gSXQKKwkgKiBvY2N1cnMgZm9yIGFsbCB1bmltcGxlbWVudGVkIGFuZCBpbGxlZ2FsIGluc3RydWN0aW9ucy4KIAkgKi8KIAlTVERfRVhDRVBUSU9OKDB4MTAwMCwgU29mdEVtdSwgU29mdEVtdUV4Y2VwdGlvbikKIApAQCAtMjgyLDkgKzI4Miw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQUxUSVZFQykgJiYgZGVmaW5lZChDT05GSUdfNzR4eCkKIAkubG9uZwkweDdlMDAwNjZjCiAJCS8qCi0gICAgICAgICAgICAgICAgICogZHNzYWxsIGluc3RydWN0aW9uLCBnYXMgZG9lc24ndCBoYXZlIGl0IHlldAotICAgICAgICAgICAgICAgICAqIC4uLmZvciBhbHRpdmVjLCBkYXRhIHN0cmVhbSBzdG9wIGFsbCB0aGlzIHByb2JhYmx5Ci0gICAgICAgICAgICAgICAgICogaXNuJ3QgbmVlZGVkIHVubGVzcyB3ZSB3YXJtIChzb2Z0d2FyZSkgcmVib290IFUtQm9vdAorCQkgKiBkc3NhbGwgaW5zdHJ1Y3Rpb24sIGdhcyBkb2Vzbid0IGhhdmUgaXQgeWV0CisJCSAqIC4uLmZvciBhbHRpdmVjLCBkYXRhIHN0cmVhbSBzdG9wIGFsbCB0aGlzIHByb2JhYmx5CisJCSAqIGlzbid0IG5lZWRlZCB1bmxlc3Mgd2Ugd2FybSAoc29mdHdhcmUpIHJlYm9vdCBVLUJvb3QKIAkJICovCiAjZW5kaWYKIApAQCAtMzI1LDE1ICszMjUsMTUgQEAKIAkgKiBDYWNoZSBtdXN0IGJlIGVuYWJsZWQgaGVyZSBmb3Igc3RhY2staW4tY2FjaGUgdHJpY2suCiAJICogVGhpcyBtZWFucyB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgQkFUUy4KIAkgKiBUaGlzIG1lYW5zOgotICAgICAgICAgKiAgIDEpIGZvciB0aGUgRVZCLCBvcmlnaW5hbCBndCByZWdzIG5lZWQgdG8gYmUgbWFwcGVkCisJICogICAxKSBmb3IgdGhlIEVWQiwgb3JpZ2luYWwgZ3QgcmVncyBuZWVkIHRvIGJlIG1hcHBlZAogCSAqICAgMikgbmVlZCB0byBoYXZlIGFuIElCQVQgZm9yIHRoZSAweGYgcmVnaW9uLAogCSAqICAgICAgd2UgYXJlIHJ1bm5pbmcgdGhlcmUhCi0gICAgICAgICAqIENhY2hlIHNob3VsZCBiZSB0dXJuZWQgb24gYWZ0ZXIgQkFUcywgc2luY2UgYnkgZGVmYXVsdAotICAgICAgICAgKiBldmVyeXRoaW5nIGlzIHdyaXRlLXRocm91Z2guCi0gICAgICAgICAqIFRoZSBpbml0LW1lbSBCQVQgY2FuIGJlIHJldXNlZCBhZnRlciByZWxvYy4gVGhlIG9sZAotICAgICAgICAgKiBndC1yZWdzIEJBVCBjYW4gYmUgcmV1c2VkIGFmdGVyIGJvYXJkX2luaXRfZiBjYWxscwotICAgICAgICAgKiBib2FyZF9wcmVfaW5pdCAoRVZCIG9ubHkpLgotICAgICAgICAgKi8KKwkgKiBDYWNoZSBzaG91bGQgYmUgdHVybmVkIG9uIGFmdGVyIEJBVHMsIHNpbmNlIGJ5IGRlZmF1bHQKKwkgKiBldmVyeXRoaW5nIGlzIHdyaXRlLXRocm91Z2guCisJICogVGhlIGluaXQtbWVtIEJBVCBjYW4gYmUgcmV1c2VkIGFmdGVyIHJlbG9jLiBUaGUgb2xkCisJICogZ3QtcmVncyBCQVQgY2FuIGJlIHJldXNlZCBhZnRlciBib2FyZF9pbml0X2YgY2FsbHMKKwkgKiBib2FyZF9wcmVfaW5pdCAoRVZCIG9ubHkpLgorCSAqLwogI2lmICFkZWZpbmVkKENPTkZJR19CQUI3eHgpICYmICFkZWZpbmVkKENPTkZJR19FTFBQQykKIAkvKiBlbmFibGUgYWRkcmVzcyB0cmFuc2xhdGlvbiAqLwogCWJsCWVuYWJsZV9hZGRyX3RyYW5zCkBAIC0zOTEsMTAgKzM5MSwxMCBAQAogCW10c3ByCURCQVQyVSwgcjAKIAltdHNwcglEQkFUM1UsIHIwCiAjaWZkZWYgQ09ORklHXzc1MEZYCi0gICAgICAgIG10c3ByICAgREJBVDRVLCByMAotICAgICAgICBtdHNwciAgIERCQVQ1VSwgcjAKLSAgICAgICAgbXRzcHIgICBEQkFUNlUsIHIwCi0gICAgICAgIG10c3ByICAgREJBVDdVLCByMAorCW10c3ByICAgREJBVDRVLCByMAorCW10c3ByICAgREJBVDVVLCByMAorCW10c3ByICAgREJBVDZVLCByMAorCW10c3ByICAgREJBVDdVLCByMAogI2VuZGlmCiAJaXN5bmMKIAlzeW5jCkBAIC00NzksNzYgKzQ3OSw3NiBAQAogCiAjaWZkZWYgQ09ORklHXzc1MEZYCiAJLyogSUJBVCA0ICovCi0gICAgICAgIGFkZGlzICAgcjQsIHIwLCBDRkdfSUJBVDRMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19JQkFUNExAbAotICAgICAgICBhZGRpcyAgIHIzLCByMCwgQ0ZHX0lCQVQ0VUBoCi0gICAgICAgIG9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDRVQGwKLSAgICAgICAgbXRzcHIgICBJQkFUNEwsIHI0Ci0gICAgICAgIG10c3ByICAgSUJBVDRVLCByMwotICAgICAgICBpc3luYworCWFkZGlzICAgcjQsIHIwLCBDRkdfSUJBVDRMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0lCQVQ0TEBsCisJYWRkaXMgICByMywgcjAsIENGR19JQkFUNFVAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDRVQGwKKwltdHNwciAgIElCQVQ0TCwgcjQKKwltdHNwciAgIElCQVQ0VSwgcjMKKwlpc3luYwogCiAJLyogREJBVCA0ICovCi0gICAgICAgIGFkZGlzICAgcjQsIHIwLCBDRkdfREJBVDRMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19EQkFUNExAbAotICAgICAgICBhZGRpcyAgIHIzLCByMCwgQ0ZHX0RCQVQ0VUBoCi0gICAgICAgIG9yaSAgICAgcjMsIHIzLCBDRkdfREJBVDRVQGwKLSAgICAgICAgbXRzcHIgICBEQkFUNEwsIHI0Ci0gICAgICAgIG10c3ByICAgREJBVDRVLCByMwotICAgICAgICBpc3luYworCWFkZGlzICAgcjQsIHIwLCBDRkdfREJBVDRMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0RCQVQ0TEBsCisJYWRkaXMgICByMywgcjAsIENGR19EQkFUNFVAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfREJBVDRVQGwKKwltdHNwciAgIERCQVQ0TCwgcjQKKwltdHNwciAgIERCQVQ0VSwgcjMKKwlpc3luYwogCi0gICAgICAgIC8qIElCQVQgNSAqLwotICAgICAgICBhZGRpcyAgIHI0LCByMCwgQ0ZHX0lCQVQ1TEBoCi0gICAgICAgIG9yaSAgICAgcjQsIHI0LCBDRkdfSUJBVDVMQGwKLSAgICAgICAgYWRkaXMgICByMywgcjAsIENGR19JQkFUNVVAaAotICAgICAgICBvcmkgICAgIHIzLCByMywgQ0ZHX0lCQVQ1VUBsCi0gICAgICAgIG10c3ByICAgSUJBVDVMLCByNAotICAgICAgICBtdHNwciAgIElCQVQ1VSwgcjMKLSAgICAgICAgaXN5bmMKKwkvKiBJQkFUIDUgKi8KKwlhZGRpcyAgIHI0LCByMCwgQ0ZHX0lCQVQ1TEBoCisJb3JpICAgICByNCwgcjQsIENGR19JQkFUNUxAbAorCWFkZGlzICAgcjMsIHIwLCBDRkdfSUJBVDVVQGgKKwlvcmkgICAgIHIzLCByMywgQ0ZHX0lCQVQ1VUBsCisJbXRzcHIgICBJQkFUNUwsIHI0CisJbXRzcHIgICBJQkFUNVUsIHIzCisJaXN5bmMKIAogCS8qIERCQVQgNSAqLwotICAgICAgICBhZGRpcyAgIHI0LCByMCwgQ0ZHX0RCQVQ1TEBoCi0gICAgICAgIG9yaSAgICAgcjQsIHI0LCBDRkdfREJBVDVMQGwKLSAgICAgICAgYWRkaXMgICByMywgcjAsIENGR19EQkFUNVVAaAotICAgICAgICBvcmkgICAgIHIzLCByMywgQ0ZHX0RCQVQ1VUBsCi0gICAgICAgIG10c3ByICAgREJBVDVMLCByNAotICAgICAgICBtdHNwciAgIERCQVQ1VSwgcjMKLSAgICAgICAgaXN5bmMKKwlhZGRpcyAgIHI0LCByMCwgQ0ZHX0RCQVQ1TEBoCisJb3JpICAgICByNCwgcjQsIENGR19EQkFUNUxAbAorCWFkZGlzICAgcjMsIHIwLCBDRkdfREJBVDVVQGgKKwlvcmkgICAgIHIzLCByMywgQ0ZHX0RCQVQ1VUBsCisJbXRzcHIgICBEQkFUNUwsIHI0CisJbXRzcHIgICBEQkFUNVUsIHIzCisJaXN5bmMKIAotICAgICAgICAvKiBJQkFUIDYgKi8KLSAgICAgICAgYWRkaXMgICByNCwgcjAsIENGR19JQkFUNkxAaAotICAgICAgICBvcmkgICAgIHI0LCByNCwgQ0ZHX0lCQVQ2TEBsCi0gICAgICAgIGFkZGlzICAgcjMsIHIwLCBDRkdfSUJBVDZVQGgKLSAgICAgICAgb3JpICAgICByMywgcjMsIENGR19JQkFUNlVAbAotICAgICAgICBtdHNwciAgIElCQVQ2TCwgcjQKLSAgICAgICAgbXRzcHIgICBJQkFUNlUsIHIzCi0gICAgICAgIGlzeW5jCisJLyogSUJBVCA2ICovCisJYWRkaXMgICByNCwgcjAsIENGR19JQkFUNkxAaAorCW9yaSAgICAgcjQsIHI0LCBDRkdfSUJBVDZMQGwKKwlhZGRpcyAgIHIzLCByMCwgQ0ZHX0lCQVQ2VUBoCisJb3JpICAgICByMywgcjMsIENGR19JQkFUNlVAbAorCW10c3ByICAgSUJBVDZMLCByNAorCW10c3ByICAgSUJBVDZVLCByMworCWlzeW5jCiAKIAkvKiBEQkFUIDYgKi8KLSAgICAgICAgYWRkaXMgICByNCwgcjAsIENGR19EQkFUNkxAaAotICAgICAgICBvcmkgICAgIHI0LCByNCwgQ0ZHX0RCQVQ2TEBsCi0gICAgICAgIGFkZGlzICAgcjMsIHIwLCBDRkdfREJBVDZVQGgKLSAgICAgICAgb3JpICAgICByMywgcjMsIENGR19EQkFUNlVAbAotICAgICAgICBtdHNwciAgIERCQVQ2TCwgcjQKLSAgICAgICAgbXRzcHIgICBEQkFUNlUsIHIzCi0gICAgICAgIGlzeW5jCisJYWRkaXMgICByNCwgcjAsIENGR19EQkFUNkxAaAorCW9yaSAgICAgcjQsIHI0LCBDRkdfREJBVDZMQGwKKwlhZGRpcyAgIHIzLCByMCwgQ0ZHX0RCQVQ2VUBoCisJb3JpICAgICByMywgcjMsIENGR19EQkFUNlVAbAorCW10c3ByICAgREJBVDZMLCByNAorCW10c3ByICAgREJBVDZVLCByMworCWlzeW5jCiAKLSAgICAgICAgLyogSUJBVCA3ICovCi0gICAgICAgIGFkZGlzICAgcjQsIHIwLCBDRkdfSUJBVDdMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19JQkFUN0xAbAotICAgICAgICBhZGRpcyAgIHIzLCByMCwgQ0ZHX0lCQVQ3VUBoCi0gICAgICAgIG9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDdVQGwKLSAgICAgICAgbXRzcHIgICBJQkFUN0wsIHI0Ci0gICAgICAgIG10c3ByICAgSUJBVDdVLCByMwotICAgICAgICBpc3luYworCS8qIElCQVQgNyAqLworCWFkZGlzICAgcjQsIHIwLCBDRkdfSUJBVDdMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0lCQVQ3TEBsCisJYWRkaXMgICByMywgcjAsIENGR19JQkFUN1VAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfSUJBVDdVQGwKKwltdHNwciAgIElCQVQ3TCwgcjQKKwltdHNwciAgIElCQVQ3VSwgcjMKKwlpc3luYwogCiAJLyogREJBVCA3ICovCi0gICAgICAgIGFkZGlzICAgcjQsIHIwLCBDRkdfREJBVDdMQGgKLSAgICAgICAgb3JpICAgICByNCwgcjQsIENGR19EQkFUN0xAbAotICAgICAgICBhZGRpcyAgIHIzLCByMCwgQ0ZHX0RCQVQ3VUBoCi0gICAgICAgIG9yaSAgICAgcjMsIHIzLCBDRkdfREJBVDdVQGwKLSAgICAgICAgbXRzcHIgICBEQkFUN0wsIHI0Ci0gICAgICAgIG10c3ByICAgREJBVDdVLCByMwotICAgICAgICBpc3luYworCWFkZGlzICAgcjQsIHIwLCBDRkdfREJBVDdMQGgKKwlvcmkgICAgIHI0LCByNCwgQ0ZHX0RCQVQ3TEBsCisJYWRkaXMgICByMywgcjAsIENGR19EQkFUN1VAaAorCW9yaSAgICAgcjMsIHIzLCBDRkdfREJBVDdVQGwKKwltdHNwciAgIERCQVQ3TCwgcjQKKwltdHNwciAgIERCQVQ3VSwgcjMKKwlpc3luYwogI2VuZGlmCiAKIAkvKiBiYXRzIGFyZSBkb25lLCBub3cgaW52YWxpZGF0ZSB0aGUgVExCcyAqLwpAQCAtNzY4LDggKzc2OCw4IEBACiAJLyoKIAkgKiBSZWxvY2F0aW9uIEZ1bmN0aW9uLCByMTQgcG9pbnQgdG8gZ290MisweDgwMDAKIAkgKgotICAgICAgICAgKiBBZGp1c3QgZ290MiBwb2ludGVycywgbm8gbmVlZCB0byBjaGVjayBmb3IgMCwgdGhpcyBjb2RlCi0gICAgICAgICAqIGFscmVhZHkgcHV0cyBhIGZldyBlbnRyaWVzIGluIHRoZSB0YWJsZS4KKwkgKiBBZGp1c3QgZ290MiBwb2ludGVycywgbm8gbmVlZCB0byBjaGVjayBmb3IgMCwgdGhpcyBjb2RlCisJICogYWxyZWFkeSBwdXRzIGEgZmV3IGVudHJpZXMgaW4gdGhlIHRhYmxlLgogCSAqLwogCWxpCXIwLF9fZ290Ml9lbnRyaWVzQHNlY3RvZmZAbAogCWxhCXIzLEdPVChfR09UMl9UQUJMRV8pCkBAIC03ODMsNyArNzgzLDcgQEAKIAliZG56CTFiCiAKIAkvKgotICAgICAgICAgKiBOb3cgYWRqdXN0IHRoZSBmaXh1cHMgYW5kIHRoZSBwb2ludGVycyB0byB0aGUgZml4dXBzCisJICogTm93IGFkanVzdCB0aGUgZml4dXBzIGFuZCB0aGUgcG9pbnRlcnMgdG8gdGhlIGZpeHVwcwogCSAqIGluIGNhc2Ugd2UgbmVlZCB0byBtb3ZlIG91cnNlbHZlcyBhZ2Fpbi4KIAkgKi8KIDI6CWxpCXIwLF9fZml4dXBfZW50cmllc0BzZWN0b2ZmQGwKZGlmZiAtLWdpdCBhL2NwdS9hcm03MjB0L2ludGVycnVwdHMuYyBiL2NwdS9hcm03MjB0L2ludGVycnVwdHMuYwppbmRleCA1Mjc4N2ZlLi5iMWVlMTg4IDEwMDY0NAotLS0gYS9jcHUvYXJtNzIwdC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L2FybTcyMHQvaW50ZXJydXB0cy5jCkBAIC04MCw3ICs4MCw2IEBACiAjZW5kaWYKIAogCi0KIHZvaWQgYmFkX21vZGUgKHZvaWQpCiB7CiAJcGFuaWMgKCJSZXNldHRpbmcgQ1BVIC4uLlxuIik7CkBAIC05MSw3ICs5MCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljb25zdCBjaGFyICpwcm9jZXNzb3JfbW9kZXNbXSA9Ci0JCQl7ICJVU0VSXzI2IiwgIkZJUV8yNiIsICJJUlFfMjYiLCAiU1ZDXzI2IiwgIlVLNF8yNiIsICJVSzVfMjYiLAorCQl7ICJVU0VSXzI2IiwgIkZJUV8yNiIsICJJUlFfMjYiLCAiU1ZDXzI2IiwgIlVLNF8yNiIsICJVSzVfMjYiLAogIlVLNl8yNiIsICJVSzdfMjYiLAogCQkiVUs4XzI2IiwgIlVLOV8yNiIsICJVSzEwXzI2IiwgIlVLMTFfMjYiLCAiVUsxMl8yNiIsICJVSzEzXzI2IiwKIAkJCQkiVUsxNF8yNiIsICJVSzE1XzI2IiwKZGlmZiAtLWdpdCBhL2NwdS9hcm03MjB0L3N0YXJ0LlMgYi9jcHUvYXJtNzIwdC9zdGFydC5TCmluZGV4IGU5ODk5YTkuLjJjYTkxZDIgMTAwNjQ0Ci0tLSBhL2NwdS9hcm03MjB0L3N0YXJ0LlMKKysrIGIvY3B1L2FybTcyMHQvc3RhcnQuUwpAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIAotCiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogCkBAIC0yNDcsOCArMjQ2LDYgQEAKIAltb3YJcGMsIGxyCiAKIAotCi0KIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L2ludGVycnVwdHMuYyBiL2NwdS9hcm05MjB0L2ludGVycnVwdHMuYwppbmRleCBkZDk0NGZiLi45ZmYwNmMxIDEwMDY0NAotLS0gYS9jcHUvYXJtOTIwdC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L2FybTkyMHQvaW50ZXJydXB0cy5jCkBAIC05MSw3ICs5MSw2IEBACiAjZW5kaWYKIAogCi0KIHZvaWQgYmFkX21vZGUgKHZvaWQpCiB7CiAJcGFuaWMgKCJSZXNldHRpbmcgQ1BVIC4uLlxuIik7CmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9zZXJpYWwuYyBiL2NwdS9hcm05MjB0L3NlcmlhbC5jCmluZGV4IDEwY2ZhZGUuLjdlZDQ1MmUgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjB0L3NlcmlhbC5jCisrKyBiL2NwdS9hcm05MjB0L3NlcmlhbC5jCkBAIC05Miw3ICs5Miw3IEBACiBpbnQgc2VyaWFsX2dldGMgKHZvaWQpCiB7CiAJUzNDMjRYMF9VQVJUICogY29uc3QgdWFydCA9IFMzQzI0WDBfR2V0QmFzZV9VQVJUKFVBUlRfTlIpOwotCQorCiAJLyogd2FpdCBmb3IgY2hhcmFjdGVyIHRvIGFycml2ZSAqLwogCXdoaWxlICghKHVhcnQtPlVUUlNUQVQgJiAweDEpKTsKIApkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvc3RhcnQuUyBiL2NwdS9hcm05MjB0L3N0YXJ0LlMKaW5kZXggZWQxNjE3Ni4uOWY1M2I4NyAxMDA2NDQKLS0tIGEvY3B1L2FybTkyMHQvc3RhcnQuUworKysgYi9jcHUvYXJtOTIwdC9zdGFydC5TCkBAIC0yNSw3ICsyNSw2IEBACiAgKi8KIAogCi0KICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDx2ZXJzaW9uLmg+CiAKQEAgLTI3MSw4ICsyNzAsNiBAQAogCW1vdglwYywgbHIKIAogCi0KLQogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvY3B1L2F0OTFybTkyMDAvYXQ0NS5jIGIvY3B1L2F0OTFybTkyMDAvYXQ0NS5jCmluZGV4IGUwMDU3ZTcuLmNmNDU2ZmIgMTAwNjQ0Ci0tLSBhL2NwdS9hdDkxcm05MjAwL2F0NDUuYworKysgYi9jcHUvYXQ5MXJtOTIwMC9hdDQ1LmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkvKiBSZXNldCB0aGUgU1BJICovCiAJQVQ5MUNfQkFTRV9TUEktPlNQSV9DUiA9IEFUOTFDX1NQSV9TV1JTVDsKIAotICAgIAkvKiBDb25maWd1cmUgU1BJIGluIE1hc3RlciBNb2RlIHdpdGggTm8gQ1Mgc2VsZWN0ZWQgISEhICovCisJLyogQ29uZmlndXJlIFNQSSBpbiBNYXN0ZXIgTW9kZSB3aXRoIE5vIENTIHNlbGVjdGVkICEhISAqLwogCUFUOTFDX0JBU0VfU1BJLT5TUElfTVIgPSBBVDkxQ19TUElfTVNUUiB8IEFUOTFDX1NQSV9NT0RGRElTIHwgQVQ5MUNfU1BJX1BDUzsKIAogCS8qIENvbmZpZ3VyZSBDUzAgYW5kIENTMyAqLwpAQCAtODMsMzggKzgzLDM4IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdW5zaWduZWQgaW50IEFUOTFGX1NwaVdyaXRlICggQVQ5MVBTX0RhdGFmbGFzaERlc2MgcERlc2MgKQogewotICAgCXVuc2lnbmVkIGludCB0aW1lb3V0OworCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCiAJcERlc2MtPnN0YXRlID0gQlVTWTsKIAotICAgCUFUOTFDX0JBU0VfU1BJLT5TUElfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVMgKyBBVDkxQ19QRENfUlhURElTOworCUFUOTFDX0JBU0VfU1BJLT5TUElfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVMgKyBBVDkxQ19QRENfUlhURElTOwogCi0gICAJLyogSW5pdGlhbGl6ZSB0aGUgVHJhbnNtaXQgYW5kIFJlY2VpdmUgUG9pbnRlciAqLwotICAgIAlBVDkxQ19CQVNFX1NQSS0+U1BJX1JQUiA9ICh1bnNpZ25lZCBpbnQpcERlc2MtPnJ4X2NtZF9wdCA7Ci0gICAgCUFUOTFDX0JBU0VfU1BJLT5TUElfVFBSID0gKHVuc2lnbmVkIGludClwRGVzYy0+dHhfY21kX3B0IDsKKwkvKiBJbml0aWFsaXplIHRoZSBUcmFuc21pdCBhbmQgUmVjZWl2ZSBQb2ludGVyICovCisJQVQ5MUNfQkFTRV9TUEktPlNQSV9SUFIgPSAodW5zaWduZWQgaW50KXBEZXNjLT5yeF9jbWRfcHQgOworCUFUOTFDX0JBU0VfU1BJLT5TUElfVFBSID0gKHVuc2lnbmVkIGludClwRGVzYy0+dHhfY21kX3B0IDsKIAotICAgIAkvKiBJbnRpYWxpemUgdGhlIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzICovCi0gICAgCUFUOTFDX0JBU0VfU1BJLT5TUElfUkNSID0gcERlc2MtPnJ4X2NtZF9zaXplOwotICAgIAlBVDkxQ19CQVNFX1NQSS0+U1BJX1RDUiA9IHBEZXNjLT50eF9jbWRfc2l6ZTsKKwkvKiBJbnRpYWxpemUgdGhlIFRyYW5zbWl0IGFuZCBSZWNlaXZlIENvdW50ZXJzICovCisJQVQ5MUNfQkFTRV9TUEktPlNQSV9SQ1IgPSBwRGVzYy0+cnhfY21kX3NpemU7CisJQVQ5MUNfQkFTRV9TUEktPlNQSV9UQ1IgPSBwRGVzYy0+dHhfY21kX3NpemU7CiAKIAlpZiAoIHBEZXNjLT50eF9kYXRhX3NpemUgIT0gMCApIHsKLQkgICAJLyogSW5pdGlhbGl6ZSB0aGUgTmV4dCBUcmFuc21pdCBhbmQgTmV4dCBSZWNlaXZlIFBvaW50ZXIgKi8KLQkgICAgCUFUOTFDX0JBU0VfU1BJLT5TUElfUk5QUiA9ICh1bnNpZ25lZCBpbnQpcERlc2MtPnJ4X2RhdGFfcHQgOworCQkvKiBJbml0aWFsaXplIHRoZSBOZXh0IFRyYW5zbWl0IGFuZCBOZXh0IFJlY2VpdmUgUG9pbnRlciAqLworCQlBVDkxQ19CQVNFX1NQSS0+U1BJX1JOUFIgPSAodW5zaWduZWQgaW50KXBEZXNjLT5yeF9kYXRhX3B0IDsKIAkJQVQ5MUNfQkFTRV9TUEktPlNQSV9UTlBSID0gKHVuc2lnbmVkIGludClwRGVzYy0+dHhfZGF0YV9wdCA7CiAKIAkJLyogSW50aWFsaXplIHRoZSBOZXh0IFRyYW5zbWl0IGFuZCBOZXh0IFJlY2VpdmUgQ291bnRlcnMgKi8KIAkJQVQ5MUNfQkFTRV9TUEktPlNQSV9STkNSID0gcERlc2MtPnJ4X2RhdGFfc2l6ZSA7Ci0JIAlBVDkxQ19CQVNFX1NQSS0+U1BJX1ROQ1IgPSBwRGVzYy0+dHhfZGF0YV9zaXplIDsKLSAgIAl9CisJCUFUOTFDX0JBU0VfU1BJLT5TUElfVE5DUiA9IHBEZXNjLT50eF9kYXRhX3NpemUgOworCX0KIAotICAgICAgICAvKiBhcm0gc2ltcGxlLCBub24gaW50ZXJydXB0IGRlcGVuZGVudCB0aW1lciAqLworCS8qIGFybSBzaW1wbGUsIG5vbiBpbnRlcnJ1cHQgZGVwZW5kZW50IHRpbWVyICovCiAJcmVzZXRfdGltZXJfbWFza2VkKCk7CiAJdGltZW91dCA9IDA7CiAKIAlBVDkxQ19CQVNFX1NQSS0+U1BJX1BUQ1IgPSBBVDkxQ19QRENfVFhURU4gKyBBVDkxQ19QRENfUlhURU47CiAJd2hpbGUoIShBVDkxQ19CQVNFX1NQSS0+U1BJX1NSICYgQVQ5MUNfU1BJX1JYQlVGRikgJiYgKCh0aW1lb3V0ID0gZ2V0X3RpbWVyX21hc2tlZCgpICkgPCBDRkdfU1BJX1dSSVRFX1RPVVQpKTsKLSAgIAlBVDkxQ19CQVNFX1NQSS0+U1BJX1BUQ1IgPSBBVDkxQ19QRENfVFhURElTICsgQVQ5MUNfUERDX1JYVERJUzsKLSAgIAlwRGVzYy0+c3RhdGUgPSBJRExFOworCUFUOTFDX0JBU0VfU1BJLT5TUElfUFRDUiA9IEFUOTFDX1BEQ19UWFRESVMgKyBBVDkxQ19QRENfUlhURElTOworCXBEZXNjLT5zdGF0ZSA9IElETEU7CiAKIAlpZiAodGltZW91dCA+PSBDRkdfU1BJX1dSSVRFX1RPVVQpewogCQlwcmludGYoIkVycm9yIFRpbWVvdXRcblxyIik7CkBAIC0xODEsMTIgKzE4MSwxMiBAQAogCXBEZXNjLT5jb21tYW5kWzFdID0gMDsKIAogCXBEZXNjLT5EYXRhRmxhc2hfc3RhdGUgID0gR0VUX1NUQVRVUzsKLSAgICAJcERlc2MtPnR4X2RhdGFfc2l6ZSAJPSAwIDsJLyogVHJhbnNtaXQgdGhlIGNvbW1hbmQgYW5kIHJlY2VpdmUgcmVzcG9uc2UgKi8KLSAgICAJcERlc2MtPnR4X2NtZF9wdCAJCT0gcERlc2MtPmNvbW1hbmQgOwotICAgIAlwRGVzYy0+cnhfY21kX3B0IAkJPSBwRGVzYy0+Y29tbWFuZCA7Ci0gICAgCXBEZXNjLT5yeF9jbWRfc2l6ZSAJCT0gMiA7Ci0gICAgCXBEZXNjLT50eF9jbWRfc2l6ZSAJCT0gMiA7Ci0gICAgCXN0YXR1cyA9IEFUOTFGX1NwaVdyaXRlIChwRGVzYyk7CisJcERlc2MtPnR4X2RhdGFfc2l6ZSAJPSAwIDsJLyogVHJhbnNtaXQgdGhlIGNvbW1hbmQgYW5kIHJlY2VpdmUgcmVzcG9uc2UgKi8KKwlwRGVzYy0+dHhfY21kX3B0IAkJPSBwRGVzYy0+Y29tbWFuZCA7CisJcERlc2MtPnJ4X2NtZF9wdCAJCT0gcERlc2MtPmNvbW1hbmQgOworCXBEZXNjLT5yeF9jbWRfc2l6ZSAJCT0gMiA7CisJcERlc2MtPnR4X2NtZF9zaXplIAkJPSAyIDsKKwlzdGF0dXMgPSBBVDkxRl9TcGlXcml0ZSAocERlc2MpOwogCiAJcERlc2MtPkRhdGFGbGFzaF9zdGF0ZSA9ICooICh1bnNpZ25lZCBjaGFyICopIChwRGVzYy0+cnhfY21kX3B0KSArMSk7CiAKQEAgLTIxNSw3ICsyMTUsNiBAQAogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRnVuY3Rpb24gTmFtZSAgICAgICA6IEFUOTFGX0RhdGFGbGFzaENvbnRpbnVvdXNSZWFkIAkJCQkqLwogLyogT2JqZWN0ICAgICAgICAgICAgICA6IENvbnRpbnVvdXMgc3RyZWFtIFJlYWQgCQkJCSovCkBAIC0yMjYsNyArMjI1LDcgQEAKIC8qIFJldHVybiB2YWx1ZQkJOiBTdGF0ZSBvZiB0aGUgZGF0YWZsYXNoCQkJCSovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBBVDkxU19EYXRhRmxhc2hTdGF0dXMgQVQ5MUZfRGF0YUZsYXNoQ29udGludW91c1JlYWQgKAotIAlBVDkxUFNfRGF0YUZsYXNoIHBEYXRhRmxhc2gsCisJQVQ5MVBTX0RhdGFGbGFzaCBwRGF0YUZsYXNoLAogCWludCBzcmMsCiAJdW5zaWduZWQgY2hhciAqZGF0YUJ1ZmZlciwKIAlpbnQgc2l6ZVRvUmVhZCApCkBAIC0yNDUsNyArMjQ0LDYgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEZ1bmN0aW9uIE5hbWUgICAgICAgOiBBVDkxRl9EYXRhRmxhc2hQYWdlUGdtQnVmCQkJCSovCiAvKiBPYmplY3QgICAgICAgICAgICAgIDogTWFpbiBtZW1vcnkgcGFnZSBwcm9ncmFtIHRocm91Z2ggYnVmZmVyIDEgb3IgYnVmZmVyIDIJKi8KQEAgLTI4OSwxMyArMjg3LDEyIEBACiAJCXJldHVybiBEQVRBRkxBU0hfQkFEX0NPTU1BTkQ7CiAKIAkvKiBubyBkYXRhIHRvIHRyYW5zbWl0IG9yIHJlY2VpdmUgKi8KLSAgICAJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnR4X2RhdGFfc2l6ZSA9IDA7CisJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnR4X2RhdGFfc2l6ZSA9IDA7CiAKIAlyZXR1cm4oQVQ5MUZfRGF0YUZsYXNoU2VuZENvbW1hbmQgKHBEYXRhRmxhc2gsIEJ1ZmZlckNvbW1hbmQsIDQsIHBhZ2UqcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSkpOwogfQogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogRnVuY3Rpb24gTmFtZSAgICAgICA6IEFUOTFGX0RhdGFGbGFzaFdyaXRlQnVmZmVyCQkJCSovCiAvKiBPYmplY3QgICAgICAgICAgICAgIDogV3JpdGUgZGF0YSB0byB0aGUgaW50ZXJuYWwgc3JhbSBidWZmZXIgMSBvciAyCQkqLwpAQCAtMzI0LDI0ICszMjEsMjQgQEAKIAlpZiAoIChwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+c3RhdGUpICAhPSBJRExFKQogCQlyZXR1cm4gREFUQUZMQVNIX0JVU1k7CiAKLSAgICAJLyogU2VuZCBmaXJzdCBXcml0ZSBDb21tYW5kICovCi0gICAgCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5jb21tYW5kWzBdID0gQnVmZmVyQ29tbWFuZDsKKwkvKiBTZW5kIGZpcnN0IFdyaXRlIENvbW1hbmQgKi8KKwlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+Y29tbWFuZFswXSA9IEJ1ZmZlckNvbW1hbmQ7CiAJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPmNvbW1hbmRbMV0gPSAwOwotICAgIAlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+Y29tbWFuZFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHVuc2lnbmVkIGludCkoYnVmZmVyQWRkcmVzcyAmICBwRGF0YUZsYXNoLT5wRGV2aWNlLT5ieXRlX21hc2spKSA+PiA4KSA7Ci0gICAgCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5jb21tYW5kWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh1bnNpZ25lZCBpbnQpYnVmZmVyQWRkcmVzcyAgJiAweDAwRkYpIDsKKwlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+Y29tbWFuZFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHVuc2lnbmVkIGludCkoYnVmZmVyQWRkcmVzcyAmICBwRGF0YUZsYXNoLT5wRGV2aWNlLT5ieXRlX21hc2spKSA+PiA4KSA7CisJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPmNvbW1hbmRbM10gPSAodW5zaWduZWQgY2hhcikoKHVuc2lnbmVkIGludClidWZmZXJBZGRyZXNzICAmIDB4MDBGRikgOwogCiAKLSAgICAJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnR4X2NtZF9wdCAJID0gcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPmNvbW1hbmQgOwotICAgIAlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+dHhfY21kX3NpemUgPSA0IDsKLSAgICAJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnJ4X2NtZF9wdCAJID0gcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPmNvbW1hbmQgOwotICAgIAlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+cnhfY21kX3NpemUgPSA0IDsKKwlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+dHhfY21kX3B0IAkgPSBwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+Y29tbWFuZCA7CisJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnR4X2NtZF9zaXplID0gNCA7CisJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnJ4X2NtZF9wdCAJID0gcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPmNvbW1hbmQgOworCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5yeF9jbWRfc2l6ZSA9IDQgOwogCi0gICAgCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5yeF9kYXRhX3B0IAk9IGRhdGFCdWZmZXIgOwotICAgIAlwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYy0+dHhfZGF0YV9wdCAJPSBkYXRhQnVmZmVyIDsKLSAgICAJcERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MtPnJ4X2RhdGFfc2l6ZSAJPSBTaXplVG9Xcml0ZSA7Ci0gICAgCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT50eF9kYXRhX3NpemUgCT0gU2l6ZVRvV3JpdGUgOworCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5yeF9kYXRhX3B0IAk9IGRhdGFCdWZmZXIgOworCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT50eF9kYXRhX3B0IAk9IGRhdGFCdWZmZXIgOworCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT5yeF9kYXRhX3NpemUgCT0gU2l6ZVRvV3JpdGUgOworCXBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLT50eF9kYXRhX3NpemUgCT0gU2l6ZVRvV3JpdGUgOwogCi0gICAgCXJldHVybiBBVDkxRl9TcGlXcml0ZShwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYyk7CisJcmV0dXJuIEFUOTFGX1NwaVdyaXRlKHBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjKTsKIH0KIAogCkBAIC00MDQsNyArNDAxLDYgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEZ1bmN0aW9uIE5hbWUgICAgICAgOiBBVDkxRl9EYXRhRmxhc2hXcml0ZV9PdmVybG9hZGVkCQkJKi8KIC8qIE9iamVjdCAgICAgICAgICAgICAgOgkJCQkJCQkqLwpAQCAtNDIyLDExICs0MTgsMTEgQEAKIAogCUFUOTFGX1NwaUVuYWJsZShwRGF0YUZsYXNoLT5wRGV2aWNlLT5jcyk7CiAKLSAgICAJaWYgKCAoZGVzdCArIHNpemUpID4gKHBEYXRhRmxhc2gtPnBEZXZpY2UtPnBhZ2VzX3NpemUgKiAocERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfbnVtYmVyKSkpCisJaWYgKCAoZGVzdCArIHNpemUpID4gKHBEYXRhRmxhc2gtPnBEZXZpY2UtPnBhZ2VzX3NpemUgKiAocERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfbnVtYmVyKSkpCiAJCXJldHVybiBEQVRBRkxBU0hfTUVNT1JZX09WRVJGTE9XOwogCi0gICAgCS8qIElmIGRlc3RpbmF0aW9uIGRvZXMgbm90IGZpdCBhIHBhZ2Ugc3RhcnQgYWRkcmVzcyAqLwotICAgIAlpZiAoKGRlc3QgJSAoKHVuc2lnbmVkIGludCkocERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSkpKSAgIT0gMCApIHsKKwkvKiBJZiBkZXN0aW5hdGlvbiBkb2VzIG5vdCBmaXQgYSBwYWdlIHN0YXJ0IGFkZHJlc3MgKi8KKwlpZiAoKGRlc3QgJSAoKHVuc2lnbmVkIGludCkocERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSkpKSAgIT0gMCApIHsKIAkJbGVuZ3RoID0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSAtIChkZXN0ICUgKCh1bnNpZ25lZCBpbnQpKHBEYXRhRmxhc2gtPnBEZXZpY2UtPnBhZ2VzX3NpemUpKSk7CiAKIAkJaWYgKHNpemUgPCBsZW5ndGgpCkBAIC00MzgsMTIgKzQzNCwxMiBAQAogCQlBVDkxRl9EYXRhRmxhc2hXYWl0UmVhZHkocERhdGFGbGFzaC0+cERhdGFGbGFzaERlc2MsIDEwMDApOwogCiAJCS8qIFVwZGF0ZSBzaXplLCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvaW50ZXJzICovCi0gICAgICAgIAlzaXplIC09IGxlbmd0aDsKLSAgICAgICAgCWRlc3QgKz0gbGVuZ3RoOwotICAgICAgICAJc3JjICs9IGxlbmd0aDsKLSAgICAJfQorCQlzaXplIC09IGxlbmd0aDsKKwkJZGVzdCArPSBsZW5ndGg7CisJCXNyYyArPSBsZW5ndGg7CisJfQogCi0gICAgCXdoaWxlICgoIHNpemUgLSBwRGF0YUZsYXNoLT5wRGV2aWNlLT5wYWdlc19zaXplICkgPj0gMCApIHsKKwl3aGlsZSAoKCBzaXplIC0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSApID49IDAgKSB7CiAJCS8qIHByb2dyYW0gZGF0YWZsYXNoIHBhZ2UgKi8KIAkJaWYoIUFUOTFGX0RhdGFGbGFzaFBhZ2VQZ21CdWYocERhdGFGbGFzaCwgc3JjLCBkZXN0LCBwRGF0YUZsYXNoLT5wRGV2aWNlLT5wYWdlc19zaXplICkpCiAJCQlyZXR1cm4gREFUQUZMQVNIX0VSUk9SOwpAQCAtNDUxLDIwICs0NDcsMjAgQEAKIAkJQVQ5MUZfRGF0YUZsYXNoV2FpdFJlYWR5KHBEYXRhRmxhc2gtPnBEYXRhRmxhc2hEZXNjLCAxMDAwKTsKIAogCQkvKiBVcGRhdGUgc2l6ZSwgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwb2ludGVycyAqLwotICAgICAgICAJc2l6ZSAtPSBwRGF0YUZsYXNoLT5wRGV2aWNlLT5wYWdlc19zaXplIDsKLSAgICAgICAgCWRlc3QgKz0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSA7Ci0gICAgICAgIAlzcmMgICs9IHBEYXRhRmxhc2gtPnBEZXZpY2UtPnBhZ2VzX3NpemUgOwotICAgIAl9CisJCXNpemUgLT0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSA7CisJCWRlc3QgKz0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSA7CisJCXNyYyAgKz0gcERhdGFGbGFzaC0+cERldmljZS0+cGFnZXNfc2l6ZSA7CisJfQogCi0gICAgCS8qIElmIHN0aWxsIHNvbWUgYnl0ZXMgdG8gcmVhZCAqLwotICAgIAlpZiAoIHNpemUgPiAwICkgeworCS8qIElmIHN0aWxsIHNvbWUgYnl0ZXMgdG8gcmVhZCAqLworCWlmICggc2l6ZSA+IDAgKSB7CiAJCS8qIHByb2dyYW0gZGF0YWZsYXNoIHBhZ2UgKi8KIAkJaWYoIUFUOTFGX1BhcnRpYWxQYWdlV3JpdGUocERhdGFGbGFzaCwgc3JjLCBkZXN0LCBzaXplKSApCiAJCQlyZXR1cm4gREFUQUZMQVNIX0VSUk9SOwogCiAJCUFUOTFGX0RhdGFGbGFzaFdhaXRSZWFkeShwRGF0YUZsYXNoLT5wRGF0YUZsYXNoRGVzYywgMTAwMCk7CiAJfQotICAgIAlyZXR1cm4gREFUQUZMQVNIX09LOworCXJldHVybiBEQVRBRkxBU0hfT0s7CiB9CiAKIApAQCAtNTAxLDcgKzQ5Nyw3IEBACiAJCWJ1ZmZlciArPSBTaXplVG9SZWFkOwogCX0KIAotICAgCXJldHVybiBEQVRBRkxBU0hfT0s7CisJcmV0dXJuIERBVEFGTEFTSF9PSzsKIH0KIAogCkBAIC01MTQsOCArNTEwLDggQEAKIGludCBBVDkxRl9EYXRhZmxhc2hQcm9iZShpbnQgY3MsIEFUOTFQU19EYXRhZmxhc2hEZXNjIHBEZXNjKQogewogCUFUOTFGX1NwaUVuYWJsZShjcyk7Ci0gICAJQVQ5MUZfRGF0YUZsYXNoR2V0U3RhdHVzKHBEZXNjKTsKLSAgIAlyZXR1cm4oKHBEZXNjLT5jb21tYW5kWzFdID09IDB4RkYpPyAwOiBwRGVzYy0+Y29tbWFuZFsxXSAmIDB4M0MpOworCUFUOTFGX0RhdGFGbGFzaEdldFN0YXR1cyhwRGVzYyk7CisJcmV0dXJuKChwRGVzYy0+Y29tbWFuZFsxXSA9PSAweEZGKT8gMDogcERlc2MtPmNvbW1hbmRbMV0gJiAweDNDKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvYXQ5MXJtOTIwMC9hdDkxcm05MjAwX2V0aGVyLmMgYi9jcHUvYXQ5MXJtOTIwMC9hdDkxcm05MjAwX2V0aGVyLmMKaW5kZXggNmU0NDE1MC4uNDdiNTdkYSAxMDA2NDQKLS0tIGEvY3B1L2F0OTFybTkyMDAvYXQ5MXJtOTIwMF9ldGhlci5jCisrKyBiL2NwdS9hdDkxcm05MjAwL2F0OTFybTkyMDBfZXRoZXIuYwpAQCAtNjksMTUgKzY5LDE1IEBACiAvKiogZnVuY3Rpb25zIHRvIGludGVyZmFjZSB0aGUgREFWSUNPTSAxMC8xMDBNYnBzIGV0aGVybmV0IHBoeSAqKioqKioqKioqLwogCiAvKgotICogTmFtZTogCisgKiBOYW1lOgogICoJZG05MTYxX0lzUGh5Q29ubmVjdGVkCi0gKiBEZXNjcmlwdGlvbjogCisgKiBEZXNjcmlwdGlvbjoKICAqCVJlYWRzIHRoZSAyIFBIWSBJRCByZWdpc3RlcnMKLSAqIEFyZ3VtZW50czogCisgKiBBcmd1bWVudHM6CiAgKglwX21hYyAtIHBvaW50ZXIgdG8gQVQ5MVNfRU1BQyBzdHJ1Y3QKLSAqIFJldHVybiB2YWx1ZTogCisgKiBSZXR1cm4gdmFsdWU6CiAgKglUUlVFIC0gaWYgaWQgcmVhZCBzdWNjZXNzZnVsbHkKLSAqCUZBTFNFLSBpZiBlcnJvciAKKyAqCUZBTFNFLSBpZiBlcnJvcgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGRtOTE2MV9Jc1BoeUNvbm5lY3RlZCAoQVQ5MVBTX0VNQUMgcF9tYWMpCiB7CkBAIC05NiwxNCArOTYsMTQgQEAKIH0KIAogLyoKLSAqIE5hbWU6IAorICogTmFtZToKICAqCWRtOTE2MV9HZXRMaW5rU3BlZWQKLSAqIERlc2NyaXB0aW9uOiAKLSAqCUxpbmsgcGFyYWxsZWwgZGV0ZWN0aW9uIHN0YXR1cyBvZiBNQUMgaXMgY2hlY2tlZCBhbmQgc2V0IGluIHRoZSAKKyAqIERlc2NyaXB0aW9uOgorICoJTGluayBwYXJhbGxlbCBkZXRlY3Rpb24gc3RhdHVzIG9mIE1BQyBpcyBjaGVja2VkIGFuZCBzZXQgaW4gdGhlCiAgKglNQUMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqIEFyZ3VtZW50czogCi0gKglwX21hYyAtIHBvaW50ZXIgdG8gTUFDIAotICogUmV0dXJuIHZhbHVlOiAKKyAqIEFyZ3VtZW50czoKKyAqCXBfbWFjIC0gcG9pbnRlciB0byBNQUMKKyAqIFJldHVybiB2YWx1ZToKICAqCVRSVUUgLSBpZiBsaW5rIHN0YXR1cyBzZXQgc3VjY2VzZnVsbHkKICAqCUZBTFNFIC0gaWYgbGluayBzdGF0dXMgbm90IHNldAogICovCkBAIC0xNTIsMTQgKzE1MiwxNCBAQAogCiAKIC8qCi0gKiBOYW1lOiAKKyAqIE5hbWU6CiAgKglkbTkxNjFfSW5pdFBoeQotICogRGVzY3JpcHRpb246IAotICoJTUFDIHN0YXJ0cyBjaGVja2luZyBpdHMgbGluayBieSB1c2luZyBwYXJhbGxlbCBkZXRlY3Rpb24gYW5kIAorICogRGVzY3JpcHRpb246CisgKglNQUMgc3RhcnRzIGNoZWNraW5nIGl0cyBsaW5rIGJ5IHVzaW5nIHBhcmFsbGVsIGRldGVjdGlvbiBhbmQKICAqCUF1dG9uZWdvdGlhdGlvbiBhbmQgdGhlIHNhbWUgaXMgc2V0IGluIHRoZSBNQUMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqIEFyZ3VtZW50czogCisgKiBBcmd1bWVudHM6CiAgKglwX21hYyAtIHBvaW50ZXIgdG8gc3RydWN0IEFUOTFTX0VNQUMKLSAqIFJldHVybiB2YWx1ZTogCisgKiBSZXR1cm4gdmFsdWU6CiAgKglUUlVFIC0gaWYgbGluayBzdGF0dXMgc2V0IHN1Y2Nlc2Z1bGx5CiAgKglGQUxTRSAtIGlmIGxpbmsgc3RhdHVzIG5vdCBzZXQKICAqLwpAQCAtMTg4LDE0ICsxODgsMTQgQEAKIAogCiAvKgotICogTmFtZTogCisgKiBOYW1lOgogICoJZG05MTYxX0F1dG9OZWdvdGlhdGUKLSAqIERlc2NyaXB0aW9uOiAKLSAqCU1BQyBBdXRvbmVnb3RpYXRlcyB3aXRoIHRoZSBwYXJ0bmVyIHN0YXR1cyBvZiBzYW1lIGlzIHNldCBpbiB0aGUgCisgKiBEZXNjcmlwdGlvbjoKKyAqCU1BQyBBdXRvbmVnb3RpYXRlcyB3aXRoIHRoZSBwYXJ0bmVyIHN0YXR1cyBvZiBzYW1lIGlzIHNldCBpbiB0aGUKICAqCU1BQyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwotICogQXJndW1lbnRzOiAKKyAqIEFyZ3VtZW50czoKICAqCWRldiAtIHBvaW50ZXIgdG8gc3RydWN0IG5ldF9kZXZpY2UKLSAqIFJldHVybiB2YWx1ZTogCisgKiBSZXR1cm4gdmFsdWU6CiAgKglUUlVFIC0gaWYgbGluayBzdGF0dXMgc2V0IHN1Y2Nlc3NmdWxseQogICoJRkFMU0UgLSBpZiBsaW5rIHN0YXR1cyBub3Qgc2V0CiAgKi8KQEAgLTI1OSwxNyArMjU5LDE1IEBACiB9CiAKIAotCi0KIC8qKioqKioqKioqKiBFTUFDIFBoeSBsYXllciBNYW5hZ2VtZW50IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKLSAqIE5hbWU6IAorICogTmFtZToKICAqCWF0OTFybTkyMDBfRW1hY0VuYWJsZU1ESU8KLSAqIERlc2NyaXB0aW9uOiAKKyAqIERlc2NyaXB0aW9uOgogICoJRW5hYmxlcyB0aGUgTURJTyBiaXQgaW4gTUFDIGNvbnRyb2wgcmVnaXN0ZXIKLSAqIEFyZ3VtZW50czogCisgKiBBcmd1bWVudHM6CiAgKglwX21hYyAtIHBvaW50ZXIgdG8gc3RydWN0IEFUOTFTX0VNQUMKLSAqIFJldHVybiB2YWx1ZTogCisgKiBSZXR1cm4gdmFsdWU6CiAgKglub25lCiAgKi8KIHN0YXRpYyB2b2lkIGF0OTFybTkyMDBfRW1hY0VuYWJsZU1ESU8gKEFUOTFQU19FTUFDIHBfbWFjKQpAQCAtMjc5LDEzICsyNzcsMTMgQEAKIH0KIAogLyoKLSAqIE5hbWU6IAorICogTmFtZToKICAqCWF0OTFybTkyMDBfRW1hY0Rpc2FibGVNRElPCi0gKiBEZXNjcmlwdGlvbjogCisgKiBEZXNjcmlwdGlvbjoKICAqCURpc2FibGVzIHRoZSBNRElPIGJpdCBpbiBNQUMgY29udHJvbCByZWdpc3RlcgotICogQXJndW1lbnRzOiAKKyAqIEFyZ3VtZW50czoKICAqCXBfbWFjIC0gcG9pbnRlciB0byBzdHJ1Y3QgQVQ5MVNfRU1BQwotICogUmV0dXJuIHZhbHVlOiAKKyAqIFJldHVybiB2YWx1ZToKICAqCW5vbmUKICAqLwogc3RhdGljIHZvaWQgYXQ5MXJtOTIwMF9FbWFjRGlzYWJsZU1ESU8gKEFUOTFQU19FTUFDIHBfbWFjKQpAQCAtMjk2LDE1ICsyOTQsMTUgQEAKIAogCiAvKgotICogTmFtZTogCisgKiBOYW1lOgogICoJYXQ5MXJtOTIwMF9FbWFjUmVhZFBoeQotICogRGVzY3JpcHRpb246IAorICogRGVzY3JpcHRpb246CiAgKglSZWFkcyBkYXRhIGZyb20gdGhlIFBIWSByZWdpc3RlcgotICogQXJndW1lbnRzOiAKKyAqIEFyZ3VtZW50czoKICAqCWRldiAtIHBvaW50ZXIgdG8gc3RydWN0IG5ldF9kZXZpY2UKICAqCVJlZ2lzdGVyQWRkcmVzcyAtIHVuc2lnbmVkIGNoYXIKLSAqIAlwSW5wdXQgLSBwb2ludGVyIHRvIHZhbHVlIHJlYWQgZnJvbSByZWdpc3RlciAKLSAqIFJldHVybiB2YWx1ZTogCisgKiAJcElucHV0IC0gcG9pbnRlciB0byB2YWx1ZSByZWFkIGZyb20gcmVnaXN0ZXIKKyAqIFJldHVybiB2YWx1ZToKICAqCVRSVUUgLSBpZiBkYXRhIHJlYWQgc3VjY2Vzc2Z1bGx5CiAgKi8KIHN0YXRpYyBVQ0hBUiBhdDkxcm05MjAwX0VtYWNSZWFkUGh5IChBVDkxUFNfRU1BQyBwX21hYywKQEAgLTMyNCwxNSArMzIyLDE1IEBACiAKIAogLyoKLSAqIE5hbWU6IAorICogTmFtZToKICAqCWF0OTFybTkyMDBfRW1hY1dyaXRlUGh5Ci0gKiBEZXNjcmlwdGlvbjogCisgKiBEZXNjcmlwdGlvbjoKICAqCVdyaXRlcyBkYXRhIHRvIHRoZSBQSFkgcmVnaXN0ZXIKLSAqIEFyZ3VtZW50czogCisgKiBBcmd1bWVudHM6CiAgKglkZXYgLSBwb2ludGVyIHRvIHN0cnVjdCBuZXRfZGV2aWNlCiAgKglSZWdpc3RlckFkZHJlc3MgLSB1bnNpZ25lZCBjaGFyCi0gKiAJcE91dHB1dCAtIHBvaW50ZXIgdG8gdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiB0aGUgcmVnaXN0ZXIgCi0gKiBSZXR1cm4gdmFsdWU6IAorICogCXBPdXRwdXQgLSBwb2ludGVyIHRvIHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIHJlZ2lzdGVyCisgKiBSZXR1cm4gdmFsdWU6CiAgKglUUlVFIC0gaWYgZGF0YSByZWFkIHN1Y2Nlc3NmdWxseQogICovCiBzdGF0aWMgVUNIQVIgYXQ5MXJtOTIwMF9FbWFjV3JpdGVQaHkgKEFUOTFQU19FTUFDIHBfbWFjLApAQCAtMzQ5LDEzICszNDcsMTMgQEAKIH0KIAogLyoKLSAqIE5hbWU6IAorICogTmFtZToKICAqCWF0OTFybTkyMDAwX0dldFBoeUludGVyZmFjZQotICogRGVzY3JpcHRpb246IAotICoJSW5pdGlhbGlzZSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byB0aGUgUEhZIAotICogQXJndW1lbnRzOiAKKyAqIERlc2NyaXB0aW9uOgorICoJSW5pdGlhbGlzZSB0aGUgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byB0aGUgUEhZCisgKiBBcmd1bWVudHM6CiAgKglOb25lCi0gKiBSZXR1cm4gdmFsdWU6IAorICogUmV0dXJuIHZhbHVlOgogICoJTm9uZQogICovCiB2b2lkIGF0OTFybTkyMDAwX0dldFBoeUludGVyZmFjZSAodm9pZCkKZGlmZiAtLWdpdCBhL2NwdS9hdDkxcm05MjAwL2NwdS5jIGIvY3B1L2F0OTFybTkyMDAvY3B1LmMKaW5kZXggYWQzY2QxMy4uMjYyY2EzNCAxMDA2NDQKLS0tIGEvY3B1L2F0OTFybTkyMDAvY3B1LmMKKysrIGIvY3B1L2F0OTFybTkyMDAvY3B1LmMKQEAgLTU0LDcgKzU0LDcgQEAKIHsKICAgICAvKnByaW50Zigid3JpdGUgJTA4bHggdG8gcDE1L2MxXG4iLCB2YWx1ZSk7ICovCiAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCi0gICAgICAgICJtY3IgICAgIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCAgIEAgd3JpdGUgaXQgYmFja1xuIgorCSJtY3IgICAgIHAxNSwgMCwgJTAsIGMxLCBjMCwgMCAgIEAgd3JpdGUgaXQgYmFja1xuIgogCTogIj1yIiAodmFsdWUpCiAJOgogCTogIm1lbW9yeSIpOwpAQCAtODYsNyArODYsNyBAQAogICAgICAqLwogI2lmZGVmIENPTkZJR19VU0VfSVJRCiAgICAgSVJRX1NUQUNLX1NUQVJUID0gX2FybWJvb3RfZW5kICsKLSAgICAgIAkJCUNPTkZJR19TVEFDS1NJWkUgKyBDT05GSUdfU1RBQ0tTSVpFX0lSUSAtIDQ7CisJCQlDT05GSUdfU1RBQ0tTSVpFICsgQ09ORklHX1NUQUNLU0laRV9JUlEgLSA0OwogICAgIEZJUV9TVEFDS19TVEFSVCA9IElSUV9TVEFDS19TVEFSVCArIENPTkZJR19TVEFDS1NJWkVfRklROwogICAgIF9hcm1ib290X3JlYWxfZW5kID0gRklRX1NUQUNLX1NUQVJUICsgNDsKICNlbHNlCmRpZmYgLS1naXQgYS9jcHUvYXQ5MXJtOTIwMC9pbnRlcnJ1cHRzLmMgYi9jcHUvYXQ5MXJtOTIwMC9pbnRlcnJ1cHRzLmMKaW5kZXggZDljN2M1NS4uNDA3ZGY5YyAxMDA2NDQKLS0tIGEvY3B1L2F0OTFybTkyMDAvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9hdDkxcm05MjAwL2ludGVycnVwdHMuYwpAQCAtNDUsNyArNDUsNiBAQAogQVQ5MVBTX1RDIHRtcjsKIAogCi0KIHZvaWQgZW5hYmxlX2ludGVycnVwdHMgKHZvaWQpCiB7CiAgICAgcmV0dXJuOwpAQCAtMjA5LDExICsyMDgsMTEgQEAKICAgICB1bG9uZyBub3cgPSBSRUFEX1RJTUVSOwogICAgIGlmIChub3cgPj0gbGFzdGluYykKICAgICB7Ci0gICAgICAgIC8qIG5vcm1hbCBtb2RlICovCi0gICAgICAgIHRpbWVzdGFtcCArPSBub3cgLSBsYXN0aW5jOworCS8qIG5vcm1hbCBtb2RlICovCisJdGltZXN0YW1wICs9IG5vdyAtIGxhc3RpbmM7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogd2UgaGF2ZSBhbiBvdmVyZmxvdyAuLi4gKi8KLSAgICAgICAgdGltZXN0YW1wICs9IG5vdyArIFRJTUVSX0xPQURfVkFMIC0gbGFzdGluYzsKKwkvKiB3ZSBoYXZlIGFuIG92ZXJmbG93IC4uLiAqLworCXRpbWVzdGFtcCArPSBub3cgKyBUSU1FUl9MT0FEX1ZBTCAtIGxhc3RpbmM7CiAgICAgfQogICAgIGxhc3RpbmMgPSBub3c7CiAKQEAgLTIzMyw1ICsyMzIsMyBAQAogICAgIHdoaWxlKGdldF90aW1lcl9tYXNrZWQoKSA8IHRtbyk7CiAgICAgICAvKk5PUCovOwogfQotCi0KZGlmZiAtLWdpdCBhL2NwdS9hdDkxcm05MjAwL3N0YXJ0LlMgYi9jcHUvYXQ5MXJtOTIwMC9zdGFydC5TCmluZGV4IDliM2U3YWEuLmU5NTVkNDMgMTAwNjQ0Ci0tLSBhL2NwdS9hdDkxcm05MjAwL3N0YXJ0LlMKKysrIGIvY3B1L2F0OTFybTkyMDAvc3RhcnQuUwpAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIAotCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAidmVyc2lvbi5oIgogCkBAIC0xMjQsMTIgKzEyMywxMiBAQAogCiByZXNldDoKIAkvKgotICAgICAgICAgKiBzZXQgdGhlIGNwdSB0byBTVkMzMiBtb2RlCi0gICAgICAgICAqLwotICAgICAgICBtcnMgICAgIHIwLGNwc3IKLSAgICAgICAgYmljICAgICByMCxyMCwjMHgxZgotICAgICAgICBvcnIgICAgIHIwLHIwLCMweDEzCi0gICAgICAgIG1zciAgICAgY3BzcixyMAorCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKKwkgKi8KKwltcnMgICAgIHIwLGNwc3IKKwliaWMgICAgIHIwLHIwLCMweDFmCisJb3JyICAgICByMCxyMCwjMHgxMworCW1zciAgICAgY3BzcixyMAogCiAJLyoKIAkgKiByZWxvY2F0ZSBleGVjZXB0aW9uIHRhYmxlCkBAIC0xNDQsMTggKzE0MywxOCBAQAogCWJuZQljb3B5ZXgKIAogCS8qCi0gICAgICAgICAqIHdlIGRvIHN5cy1jcml0aWNhbCBpbml0cyBvbmx5IGF0IHJlYm9vdCwKLSAgICAgICAgICogbm90IHdoZW4gYm9vdGluZyBmcm9tIHJhbSEKLSAgICAgICAgICovCisJICogd2UgZG8gc3lzLWNyaXRpY2FsIGluaXRzIG9ubHkgYXQgcmVib290LAorCSAqIG5vdCB3aGVuIGJvb3RpbmcgZnJvbSByYW0hCisJICovCiAjaWZkZWYgQ09ORklHX0lOSVRfQ1JJVElDQUwKLSAgICAgICAgYmwgICAgICBjcHVfaW5pdF9jcml0CisJYmwgICAgICBjcHVfaW5pdF9jcml0CiAjZW5kaWYKIAotICAgICAgICAvKiBzZXQgdXAgdGhlIHN0YWNrICovCi0gICAgICAgIGxkciAgICAgcjAsIF9hcm1ib290X2VuZAotICAgICAgICBhZGQgICAgIHIwLCByMCwgI0NPTkZJR19TVEFDS1NJWkUKLSAgICAgICAgc3ViICAgICBzcCwgcjAsICMxMiAgICAgICAgICAgICAvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAqLwotICAgICAgICBsZHIgcGMsX3N0YXJ0X2FybWJvb3QKKwkvKiBzZXQgdXAgdGhlIHN0YWNrICovCisJbGRyICAgICByMCwgX2FybWJvb3RfZW5kCisJYWRkICAgICByMCwgcjAsICNDT05GSUdfU1RBQ0tTSVpFCisJc3ViICAgICBzcCwgcjAsICMxMiAgICAgICAgICAgICAvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAqLworCWxkciBwYyxfc3RhcnRfYXJtYm9vdAogCiBfc3RhcnRfYXJtYm9vdDogLndvcmQgc3RhcnRfYXJtYm9vdAogCkBAIC0xNzIsOCArMTcxLDYgQEAKIAltb3YJcGMsIGxyCiAKIAotCi0KIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L01ha2VmaWxlIGIvY3B1L2kzODYvTWFrZWZpbGUKaW5kZXggNzA2N2EwNi4uYzQ0NDEyYSAxMDA2NDQKLS0tIGEvY3B1L2kzODYvTWFrZWZpbGUKKysrIGIvY3B1L2kzODYvTWFrZWZpbGUKQEAgLTI1LDEwICsyNSwxMCBAQAogCiBMSUIJPSBsaWIkKENQVSkuYQogCi1TVEFSVAk9IHN0YXJ0Lm8gc3RhcnQxNi5vIHJlc2V0Lm8gCi1DT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBjcHUubyB0aW1lci5vIHNjNTIwLm8gCitTVEFSVAk9IHN0YXJ0Lm8gc3RhcnQxNi5vIHJlc2V0Lm8KK0NPQkpTCT0gc2VyaWFsLm8gaW50ZXJydXB0cy5vIGNwdS5vIHRpbWVyLm8gc2M1MjAubwogQU9CSlMJPSBzYzUyMF9hc20ubwotCQorCiBhbGw6CS5kZXBlbmQgJChTVEFSVCkgJChMSUIpCiAKICQoTElCKToJJChDT0JKUykgJChBT0JKUykKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L2NvbmZpZy5tayBiL2NwdS9pMzg2L2NvbmZpZy5tawppbmRleCBjN2NmMTUxLi4xNmExNjBkIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9jb25maWcubWsKKysrIGIvY3B1L2kzODYvY29uZmlnLm1rCkBAIC0yMSw2ICsyMSw2IEBACiAjIE1BIDAyMTExLTEzMDcgVVNBCiAjCiAKLVBMQVRGT1JNX1JFTEZMQUdTICs9IAorUExBVEZPUk1fUkVMRkxBR1MgKz0KIAogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1hcmNoPWkzODYgLVdlcnJvcgpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvY3B1LmMgYi9jcHUvaTM4Ni9jcHUuYwppbmRleCAzYzY3YzEyLi5mMjRlNGJhIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9jcHUuYworKysgYi9jcHUvaTM4Ni9jcHUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KLSAqIAorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CiAgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CkBAIC00MCwxMSArNDAsMTEgQEAKIHsKIAkvKiBpbml0aWFsaXplIEZQVSwgcmVzZXQgRU0sIHNldCBNUCBhbmQgTkUgKi8KIAlhc20gKCJmbmluaXRcbiIgXAotICAgICAgICAgICAgICJtb3ZsICVjcjAsICVlYXhcbiIgXAotICAgICAgICAgICAgICJhbmRsICR+MHg0LCAlZWF4XG4iIFwKLSAgICAgICAgICAgICAib3JsICAkMHgyMiwgJWVheFxuIiBcCi0gICAgICAgICAgICAgIm1vdmwgJWVheCwgJWNyMFxuIiApOwotCQorCSAgICAgIm1vdmwgJWNyMCwgJWVheFxuIiBcCisJICAgICAiYW5kbCAkfjB4NCwgJWVheFxuIiBcCisJICAgICAib3JsICAkMHgyMiwgJWVheFxuIiBcCisJICAgICAibW92bCAlZWF4LCAlY3IwXG4iICk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjYsNCArNjYsMyBAQAogCWFzbSgid2JpbnZkXG4iKTsKIAlyZXR1cm47CiB9Ci0KZGlmZiAtLWdpdCBhL2NwdS9pMzg2L2ludGVycnVwdHMuYyBiL2NwdS9pMzg2L2ludGVycnVwdHMuYwppbmRleCA2MTRkNDA4Li44NDgyNWFlIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L2kzODYvaW50ZXJydXB0cy5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL2libXBjLmg+CiAKIAotCiBzdHJ1Y3QgaWR0X2VudHJ5IHsKIAl1MTYJYmFzZV9sb3c7CiAJdTE2CXNlbGVjdG9yOwpAQCAtNDQsNyArNDMsNyBAQAogCiAjZGVmaW5lIE1BWF9JUlEgMTYKIAotdHlwZWRlZiBzdHJ1Y3QgaXJxX2hhbmRsZXIgeyAKK3R5cGVkZWYgc3RydWN0IGlycV9oYW5kbGVyIHsKIAlzdHJ1Y3QgaXJxX2hhbmRsZXIgKm5leHQ7CiAJaW50ZXJydXB0X2hhbmRsZXJfdCogaXNyX2Z1bmM7CiAJdm9pZCAqaXNyX2RhdGE7CkBAIC02MCwyNyArNTksMjYgQEAKIHN0YXRpYyBpcnFfZGVzY190IGlycV90YWJsZVtNQVhfSVJRXTsKIAogCi0KIGFzbSgiLmdsb2JsIHN5c2NhbGxfZW50cnlcbiIgXAotICAgICAgICAic3lzY2FsbF9lbnRyeTpcbiIgXAotICAgICAgICAicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIHRocm93IGF3YXkgdGhlIHJldHVybiBhZGRyZXNzLCBmbGFncyAgKi8gXAotICAgICAgICAicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIGFuZCBzZWdtZW50IHRoYXQgdGhlIElOVCBpbnN0cnVjdGlvbiBwdXNoZWQgKi8gXAotICAgICAgICAicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIG9uIHRvIHRoZSBzdGFjayAqLyBcCi0gICAgICAgICJtb3ZsICAgJWVheCwgJWVjeFxuIiAgLyogbG9hZCB0aGUgc3lzY2FsbCBuciBhcmd1bWVudCovIFwKLSAgICAgICAgIm1vdmwgICBzeXNjYWxsX3RibCwgJWVheFxuIiAvKiBsb2FkIHN0YXJ0IG9mIHN5c2NhbGwgdGFibGUgKi8gXAotICAgICAgICAiY21wbCAgICQoMTEtMSksICVlY3hcbiIgIC8qIEZpeE1lOiBmaW5kIGEgd2F5IHRvIHVzZSBOUl9TWVNDQUxMUyBtYWNybyBoZXJlICovIFwKLSAgICAgICAgImphICAgICBiYWRfc3lzY2FsbFxuIiBcCi0gICAgICAgICJtb3ZsICAgKCVlYXgsICVlY3gsIDQpLCAlZWF4XG4iIC8qIGxvYWQgdGhlIGhhbmRsZXIgb2YgdGhlIHN5c2NhbGwqLyBcCi0gICAgICAgICJ0ZXN0ICAgJWVheCwgJWVheFxuIiAvKiB0ZXN0IGZvciBudWxsICovIFwKLSAgICAgICAgImplICAgICBiYWRfc3lzY2FsbFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVjeFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVieFxuIiBcCi0gICAgICAgICJzdGkgICAgXG4iIFwKLSAgICAgICAgImptcCAgICAqJWVheFxuIiBcCisJInN5c2NhbGxfZW50cnk6XG4iIFwKKwkicG9wbCAgICVlYnhcbiIgICAgICAgIC8qIHRocm93IGF3YXkgdGhlIHJldHVybiBhZGRyZXNzLCBmbGFncyAgKi8gXAorCSJwb3BsICAgJWVieFxuIiAgICAgICAgLyogYW5kIHNlZ21lbnQgdGhhdCB0aGUgSU5UIGluc3RydWN0aW9uIHB1c2hlZCAqLyBcCisJInBvcGwgICAlZWJ4XG4iICAgICAgICAvKiBvbiB0byB0aGUgc3RhY2sgKi8gXAorCSJtb3ZsICAgJWVheCwgJWVjeFxuIiAgLyogbG9hZCB0aGUgc3lzY2FsbCBuciBhcmd1bWVudCovIFwKKwkibW92bCAgIHN5c2NhbGxfdGJsLCAlZWF4XG4iIC8qIGxvYWQgc3RhcnQgb2Ygc3lzY2FsbCB0YWJsZSAqLyBcCisJImNtcGwgICAkKDExLTEpLCAlZWN4XG4iICAvKiBGaXhNZTogZmluZCBhIHdheSB0byB1c2UgTlJfU1lTQ0FMTFMgbWFjcm8gaGVyZSAqLyBcCisJImphICAgICBiYWRfc3lzY2FsbFxuIiBcCisJIm1vdmwgICAoJWVheCwgJWVjeCwgNCksICVlYXhcbiIgLyogbG9hZCB0aGUgaGFuZGxlciBvZiB0aGUgc3lzY2FsbCovIFwKKwkidGVzdCAgICVlYXgsICVlYXhcbiIgLyogdGVzdCBmb3IgbnVsbCAqLyBcCisJImplICAgICBiYWRfc3lzY2FsbFxuIiBcCisJInBvcGwgICAlZWN4XG4iIFwKKwkicG9wbCAgICVlYnhcbiIgXAorCSJzdGkgICAgXG4iIFwKKwkiam1wICAgIColZWF4XG4iIFwKICJiYWRfc3lzY2FsbDogbW92bCAkMHhmZmZmZmZmZiwgJWVheFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVjeFxuIiBcCi0gICAgICAgICJwb3BsICAgJWVieFxuIiBcCi0gICAgICAgICJyZXQiKTsKKwkicG9wbCAgICVlY3hcbiIgXAorCSJwb3BsICAgJWVieFxuIiBcCisJInJldCIpOwogCiB2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgc3lzY2FsbF9lbnRyeSh2b2lkKTsKIApAQCAtMTA0LDcgKzEwMiw3IEBACiAJCSAgICAicHVzaGEgXG4iIFwKIAkJICAgICJwdXNobCAkIiN4IlxuIiBcCiAJCSAgICAicHVzaGwgJGlycV9yZXR1cm5cbiIgXAotICAgICAgICAgICAgICAgICAgICAiam1wICAgZG9faXJxXG4iKTsgXAorCQkgICAgImptcCAgIGRvX2lycVxuIik7IFwKIAl2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgaXJxXyMjeCh2b2lkKQogCiAjZGVmaW5lIERFQ0xBUkVfRVhDRVBUSU9OKHgsIGYpIFwKQEAgLTE3MywyMCArMTcxLDIwIEBACiBERUNMQVJFX0lOVEVSUlVQVCgxMyk7CiBERUNMQVJFX0lOVEVSUlVQVCgxNCk7CiBERUNMQVJFX0lOVEVSUlVQVCgxNSk7Ci0gIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRlZmF1bHRfaXNyKHZvaWQpOyAKKwordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRlZmF1bHRfaXNyKHZvaWQpOwogYXNtICgiZGVmYXVsdF9pc3I6IGlyZXRcbiIpOwogCi12b2lkIGRpc2FibGVfaXJxKGludCBpcnEpIAordm9pZCBkaXNhYmxlX2lycShpbnQgaXJxKQogewogCWlmIChpcnEgPj0gTUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQogCWlycV90YWJsZVtpcnFdLnN0YXR1cyB8PSBJUlFfRElTQUJMRUQ7Ci0JCisKIH0KIAotdm9pZCBlbmFibGVfaXJxKGludCBpcnEpIAordm9pZCBlbmFibGVfaXJxKGludCBpcnEpCiB7CiAJaWYgKGlycSA+PSBNQVhfSVJRKSB7CiAJCXJldHVybjsKQEAgLTE5OCw3ICsxOTYsNyBAQAogc3RhdGljIHZvaWQgdW5tYXNrX2lycShpbnQgaXJxKQogewogCWludCBpbXJfcG9ydDsKLQkKKwogCWlmIChpcnEgPj0gTUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQpAQCAtMjA3LDcgKzIwNSw3IEBACiAJfSBlbHNlIHsKIAkJaW1yX3BvcnQgPSBNQVNURVJfUElDICsgSU1SOwogCX0KLQkKKwogCW91dGIoaW5iKGltcl9wb3J0KSZ+KDE8PChpcnEmNykpLCBpbXJfcG9ydCk7CiB9CiAKQEAgLTIxNiw3ICsyMTQsNyBAQAogc3RhdGljIHZvaWQgbWFza19pcnEoaW50IGlycSkKIHsKIAlpbnQgaW1yX3BvcnQ7Ci0JCisKIAlpZiAoaXJxID49IE1BWF9JUlEpIHsKIAkJcmV0dXJuOwogCX0KQEAgLTIyNSw4ICsyMjMsOCBAQAogCX0gZWxzZSB7CiAJCWltcl9wb3J0ID0gTUFTVEVSX1BJQyArIElNUjsKIAl9Ci0JCi0Jb3V0YihpbmIoaW1yX3BvcnQpfCgxPDwoaXJxJjcpKSwgaW1yX3BvcnQpOyAKKworCW91dGIoaW5iKGltcl9wb3J0KXwoMTw8KGlycSY3KSksIGltcl9wb3J0KTsKIH0KIAogCkBAIC0yMzgsMTEwICsyMzYsMTEwIEBACiAJaWYgKGlycSA+IDcpIHsKIAkJb3V0YihPQ1cyX1NFT0l8KGlycSY3KSwgU0xBVkVfUElDICsgT0NXMik7CiAJCWlycSA9IFNFT0lfSVIyOyAgICAgICAgICAgICAgIC8qIGFsc28gZG8gSVIyIG9uIG1hc3RlciAqLwotCX0gCisJfQogCW91dGIoT0NXMl9TRU9JfGlycSwgTUFTVEVSX1BJQyArIE9DVzIpOwogfQogCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgZG9faXJxKGludCBpcnEpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRvX2lycShpbnQgaXJxKQogewotCQorCiAJbWFza19pcnEoaXJxKTsKLQkKKwogCWlmIChpcnFfdGFibGVbaXJxXS5zdGF0dXMgJiBJUlFfRElTQUJMRUQpIHsKIAkJdW5tYXNrX2lycShpcnEpOwogCQlzcGVjaWZpY19lb2koaXJxKTsKIAkJcmV0dXJuOwogCX0KLQkKLQkKKworCiAJaWYgKE5VTEwgIT0gaXJxX3RhYmxlW2lycV0uaGFuZGxlcikgewogCQlpcnFfaGFuZGxlcl90ICpoYW5kbGVyOwotCQlmb3IgKGhhbmRsZXIgPSBpcnFfdGFibGVbaXJxXS5oYW5kbGVyOyAKKwkJZm9yIChoYW5kbGVyID0gaXJxX3RhYmxlW2lycV0uaGFuZGxlcjsKIAkJICAgICBOVUxMIT0gaGFuZGxlcjsgaGFuZGxlciA9IGhhbmRsZXItPm5leHQpIHsKIAkJCWhhbmRsZXItPmlzcl9mdW5jKGhhbmRsZXItPmlzcl9kYXRhKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmICgoaXJxICYgNykgIT0gNykgewkJCQkKKwkJaWYgKChpcnEgJiA3KSAhPSA3KSB7CiAJCQlwcmludGYoIlNwdXJpb3VzIGlycSAlZFxuIiwgaXJxKTsKIAkJfQotCX0JCQorCX0KIAl1bm1hc2tfaXJxKGlycSk7Ci0Jc3BlY2lmaWNfZW9pKGlycSk7CQorCXNwZWNpZmljX2VvaShpcnEpOwogfQogCiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSB1bmtub3duX2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgdW5rbm93bl9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJVbmtub3duIEV4Y2VwdGlvbiAlZCBhdCAlMDR4OiUwOHhcbiIsIGNhdXNlLCBzZWcsIGlwKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRpdmlkZV9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRpdmlkZV9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJEaXZpZGUgRXJyb3IgKERpdmlzaW9uIGJ5IHplcm8pIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiAJd2hpbGUoMSk7CiB9CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBkZWJ1Z19leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRlYnVnX2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKIHsKIAlwcmludGYoIkRlYnVnIEludGVycnVwdCAoU2luZ2xlIHN0ZXApIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiB9CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBubWlfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIG5taV9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKIHsKIAlwcmludGYoIk5NSSBJbnRlcnJ1cHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KLQkJCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgaW52YWxpZF9pbnN0cnVjdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBpbnZhbGlkX2luc3RydWN0aW9uX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiSW52YWxpZCBJbnN0cnVjdGlvbiBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwogCXdoaWxlKDEpOwogfQotCQkJCQotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRvdWJsZV9mYXVsdF9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBkb3VibGVfZmF1bHRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJEb3VibGUgZmF1bHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIAl3aGlsZSgxKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGludmFsaWRfdHNzX2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgaW52YWxpZF90c3NfZXhjZXB0aW9uX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiSW52YWxpZCBUU1MgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KLQkJCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgc2VnX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKSAKKwordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIHNlZ19mYXVsdF9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKIHsKIAlwcmludGYoIlNlZ21lbnRhdGlvbiBmYXVsdCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwogCXdoaWxlKDEpOwogfQogCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgc3RhY2tfZmF1bHRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpIAordm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIHN0YWNrX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiU3RhY2sgZmF1bHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIAl3aGlsZSgxKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGdwZl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgZ3BmX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiR2VuZXJhbCBwcm90ZWN0aW9uIGZhdWx0IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiB9CiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBwYWdlX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKSAKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBwYWdlX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiUGFnZSBmYXVsdCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwogCXdoaWxlKDEpOwogfQogCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgZnBfZXhjZXB0aW9uX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKSAKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBmcF9leGNlcHRpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCiB7CiAJcHJpbnRmKCJGbG9hdGluZyBwb2ludCBleGNlcHRpb24gYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGFsaWdubWVudF9jaGVja19lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCit2b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgYWxpZ25tZW50X2NoZWNrX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiQWxpZ25tZW50IGNoZWNrIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CiB9Ci0gICAgICAgCi12b2lkIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDApKSkgbWFjaGluZV9jaGVja19lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykgCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKSBtYWNoaW5lX2NoZWNrX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQogewogCXByaW50ZigiTWFjaGluZSBjaGVjayBleGNlcHRpb24gYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKIH0KQEAgLTM1MCwzMSArMzQ4LDMxIEBACiB2b2lkIGlycV9pbnN0YWxsX2hhbmRsZXIoaW50IGlubywgaW50ZXJydXB0X2hhbmRsZXJfdCAqZnVuYywgdm9pZCAqcGRhdGEpCiB7CiAJaW50IHN0YXR1czsKLQkKKwogCWlmIChpbm8+TUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQotCQkKKwogCWlmIChOVUxMICE9IGlycV90YWJsZVtpbm9dLmhhbmRsZXIpIHsKIAkJcmV0dXJuOwogCX0KLQkKKwogCXN0YXR1cyA9IGRpc2FibGVfaW50ZXJydXB0cygpOwogCWlycV90YWJsZVtpbm9dLmhhbmRsZXIgPSBtYWxsb2Moc2l6ZW9mKGlycV9oYW5kbGVyX3QpKTsKIAlpZiAoTlVMTCA9PSBpcnFfdGFibGVbaW5vXS5oYW5kbGVyKSB7CiAJCXJldHVybjsKIAl9Ci0JCisKIAltZW1zZXQoaXJxX3RhYmxlW2lub10uaGFuZGxlciwgMCwgc2l6ZW9mKGlycV9oYW5kbGVyX3QpKTsKLQkKKwogCWlycV90YWJsZVtpbm9dLmhhbmRsZXItPmlzcl9mdW5jID0gZnVuYzsKIAlpcnFfdGFibGVbaW5vXS5oYW5kbGVyLT5pc3JfZGF0YSA9IHBkYXRhOwogCWlmIChzdGF0dXMpIHsKIAkJZW5hYmxlX2ludGVycnVwdHMoKTsKIAl9Ci0JCisKIAl1bm1hc2tfaXJxKGlubyk7Ci0JCisKIAlyZXR1cm47CiB9CiAKQEAgLTM4NCw3ICszODIsNyBAQAogCWlmIChpbm8+TUFYX0lSUSkgewogCQlyZXR1cm47CiAJfQotCQorCiAJc3RhdHVzID0gZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAJbWFza19pcnEoaW5vKTsKIAlpZiAoTlVMTCA9PSBpcnFfdGFibGVbaW5vXS5oYW5kbGVyKSB7CkBAIC00MDYsMzMgKzQwNCwzMyBAQAogCiBzdGF0aWMgdm9pZCBzZXRfdmVjdG9yKGludCBpbnRudW0sIHZvaWQgKnJvdXRpbmUpCiB7Ci0JaWR0W2ludG51bV0uYmFzZV9oaWdoID0gKHUxNikoKHUzMikocm91dGluZSk+PjE2KTsJCi0JaWR0W2ludG51bV0uYmFzZV9sb3cgPSAodTE2KSgodTMyKShyb3V0aW5lKSYweGZmZmYpOwkKKwlpZHRbaW50bnVtXS5iYXNlX2hpZ2ggPSAodTE2KSgodTMyKShyb3V0aW5lKT4+MTYpOworCWlkdFtpbnRudW1dLmJhc2VfbG93ID0gKHUxNikoKHUzMikocm91dGluZSkmMHhmZmZmKTsKIH0KIAogCiBpbnQgaW50ZXJydXB0X2luaXQodm9pZCkKIHsKIAlpbnQgaTsKLQkKKwogCS8qIEp1c3QgaW4gY2FzZS4uLiAqLwogCWRpc2FibGVfaW50ZXJydXB0cygpOwotCQkKKwogCS8qIEluaXRpYWxpemUgdGhlIElEVCBhbmQgc3R1ZmYgKi8KLQkKLQkKKworCiAJbWVtc2V0KGlycV90YWJsZSwgMCwgc2l6ZW9mKGlycV90YWJsZSkpOwogCiAJLyogU2V0dXAgdGhlIElEVCAqLwotCWZvciAoaT0wO2k8MjU2O2krKykgewkJCisJZm9yIChpPTA7aTwyNTY7aSsrKSB7CiAJCWlkdFtpXS5hY2Nlc3MgPSAweDhlOwotCQlpZHRbaV0ucmVzID0gMDsJCi0JCWlkdFtpXS5zZWxlY3RvciA9IDB4MTA7CQorCQlpZHRbaV0ucmVzID0gMDsKKwkJaWR0W2ldLnNlbGVjdG9yID0gMHgxMDsKIAkJc2V0X3ZlY3RvcihpLCBkZWZhdWx0X2lzcik7Ci0JfQkKLQkKKwl9CisKIAlhc20gKCJjcyBsaWR0IGlkdF9wdHJcbiIpOwotCQorCiAJLyogU2V0dXAgZXhjZXB0aW9ucyAqLwogCXNldF92ZWN0b3IoMHgwMCwgZXhwXzApOwogCXNldF92ZWN0b3IoMHgwMSwgZXhwXzEpOwpAQCAtNDg3LDM5ICs0ODUsMzkgQEAKIAkvKiB2ZWN0b3JzIDB4MzAtMHgzZiBhcmUgcmVzZXJ2ZWQgZm9yIGlycSAxNi0zMSAqLwogCXNldF92ZWN0b3IoMHg0MCwgc3lzY2FsbF9lbnRyeSk7CiAKLQkKKwogCS8qIE1hc2sgYWxsIGludGVycnVwdHMgKi8KIAlvdXRiKDB4ZmYsIE1BU1RFUl9QSUMgKyBJTVIpOwogCW91dGIoMHhmZiwgU0xBVkVfUElDICsgSU1SKTsKLQkKKwogCS8qIE1hc3RlciBQSUMgKi8KLQlvdXRiKElDVzFfU0VMfElDVzFfRUlDVzQsIE1BU1RFUl9QSUMgKyBJQ1cxKTsJCisJb3V0YihJQ1cxX1NFTHxJQ1cxX0VJQ1c0LCBNQVNURVJfUElDICsgSUNXMSk7CiAJb3V0YigweDIwLCBNQVNURVJfUElDICsgSUNXMik7ICAgICAgICAgIC8qIFBsYWNlIG1hc3RlciBQSUMgaW50ZXJydXB0cyBhdCBJTlQyMCAqLwotCW91dGIoSVIyLCBNQVNURVJfUElDICsgSUNXMyk7CQkvKiBJQ1czLCBPbmUgc2xldmMgUElDIGlzIHByZXNlbnQgKi8JCisJb3V0YihJUjIsIE1BU1RFUl9QSUMgKyBJQ1czKTsJCS8qIElDVzMsIE9uZSBzbGV2YyBQSUMgaXMgcHJlc2VudCAqLwogCW91dGIoSUNXNF9QTSwgTUFTVEVSX1BJQyArIElDVzQpOwotCQorCiAJZm9yIChpPTA7aTw4O2krKykgewogCQlvdXRiKE9DVzJfU0VPSXxpLCBNQVNURVJfUElDICsgT0NXMik7CiAJfQotCQorCiAJLyogU2xhdmUgUElDICovCi0Jb3V0YihJQ1cxX1NFTHxJQ1cxX0VJQ1c0LCBTTEFWRV9QSUMgKyBJQ1cxKTsJCisJb3V0YihJQ1cxX1NFTHxJQ1cxX0VJQ1c0LCBTTEFWRV9QSUMgKyBJQ1cxKTsKIAlvdXRiKDB4MjgsIFNMQVZFX1BJQyArIElDVzIpOwkgICAgICAgIC8qIFBsYWNlIHNsYXZlIFBJQyBpbnRlcnJ1cHRzIGF0IElOVDI4ICovCiAJb3V0YigweDAyLCBTTEFWRV9QSUMgKyBJQ1czKTsJCS8qIFNsYXZlIElEICovCi0Jb3V0YihJQ1c0X1BNLCBTTEFWRV9QSUMgKyBJQ1c0KTsgICAgICAgIAotCQorCW91dGIoSUNXNF9QTSwgU0xBVkVfUElDICsgSUNXNCk7CisKIAlmb3IgKGk9MDtpPDg7aSsrKSB7CiAJCW91dGIoT0NXMl9TRU9JfGksIFNMQVZFX1BJQyArIE9DVzIpOwogCX0KLQkKLQkKKworCiAJLyogZW5hYmxlIGNhc2NhZGUgaW50ZXJyZXJ1cHQgKi8KIAlvdXRiKDB4ZmIsIE1BU1RFUl9QSUMgKyBJTVIpOwogCW91dGIoMHhmZiwgU0xBVkVfUElDICsgSU1SKTsKLQkKKwogCS8qIEl0IGlzIG5vdyBzYWZlIHRvIGVuYWJsZSBpbnRlcnJ1cHRzICovCi0JZW5hYmxlX2ludGVycnVwdHMoKTsgCi0JCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC01MzEsOSArNTI5LDkgQEAKIGludCBkaXNhYmxlX2ludGVycnVwdHModm9pZCkKIHsKIAlsb25nIGZsYWdzOwotCQorCiAJYXNtIHZvbGF0aWxlICgicHVzaGZsIDsgcG9wbCAlMCA7IGNsaVxuIiA6ICI9ZyIgKGZsYWdzKSA6ICk7Ci0JCisKIAlyZXR1cm4gKGZsYWdzJjB4MjAwKTsgLyogSUUgZmxhZ3MgaXMgYml0IDkgKi8KIH0KIApAQCAtNTQxLDkgKzUzOSw5IEBACiAjaWZkZWYgQ0ZHX1JFU0VUX0dFTkVSSUMKIAogdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGdlbmVyYXRlX2dwZih2b2lkKTsKLWFzbSgiLmdsb2JsIGdlbmVyYXRlX2dwZlxuIiAKLSAgICAiZ2VuZXJhdGVfZ3BmOlxuIiAKLSAgICAibGptcCAgICQweDcwLCAkMHg0NzExNDcxMVxuIik7IC8qIHNlZ21lbnQgMHg3MCBpcyBhbiBhcmJpdHJhcnkgc2VnbWVudCB3aGljaCBkb2VzIG5vdCAKK2FzbSgiLmdsb2JsIGdlbmVyYXRlX2dwZlxuIgorICAgICJnZW5lcmF0ZV9ncGY6XG4iCisgICAgImxqbXAgICAkMHg3MCwgJDB4NDcxMTQ3MTFcbiIpOyAvKiBzZWdtZW50IDB4NzAgaXMgYW4gYXJiaXRyYXJ5IHNlZ21lbnQgd2hpY2ggZG9lcyBub3QKIAkJCQkgICAgKiBleGlzdCAqLwogdm9pZCByZXNldF9jcHUodWxvbmcgYWRkcikKIHsKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L3Jlc2V0LlMgYi9jcHUvaTM4Ni9yZXNldC5TCmluZGV4IDU3ZTMyYTguLjA3YTczODQgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3Jlc2V0LlMKKysrIGIvY3B1L2kzODYvcmVzZXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgVS1ib290IC0gaTM4NiBTdGFydHVwIENvZGUgCisgKiAgVS1ib290IC0gaTM4NiBTdGFydHVwIENvZGUKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDAyCU9taWNyb24gQ2V0aSBBQiwgRGFuaWVsIEVuZ3N0cvZtIDxkZW5haWVsQG9taWNyb24uc2U+CiAgKgpAQCAtMjgsMTEgKzI4LDEwIEBACiAKIC5zZWN0aW9uIC5yZXNldCwgImF4IgogLmNvZGUxNgotcmVzZXRfdmVjdG9yOiAKLSAgICAgICAgY2xpCi0gICAgICAgIGNsZAotICAgICAgICBqbXAgc3RhcnQxNiAKK3Jlc2V0X3ZlY3RvcjoKKwljbGkKKwljbGQKKwlqbXAgc3RhcnQxNgogCiAJLm9yZyAweGYKIAlub3AKLQkKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L3NjNTIwLmMgYi9jcHUvaTM4Ni9zYzUyMC5jCmluZGV4IDUwMDA4OWEuLjY4OWU3NzUgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3NjNTIwLmMKKysrIGIvY3B1L2kzODYvc2M1MjAuYwpAQCAtMzYsMjYgKzM2LDI2IEBACiAjaW5jbHVkZSA8YXNtL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pYy9zYzUyMC5oPgogCi0vKiAKLSAqIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBib2FyZHMgYmFzZWQgb24gdGhlIEFNRCBzYzUyMCAKLSAqIAorLyoKKyAqIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBib2FyZHMgYmFzZWQgb24gdGhlIEFNRCBzYzUyMAorICoKICAqIHZvaWQgd3JpdGVfbW1jcl9ieXRlKHUxNiBtbWNyLCB1OCBkYXRhKQogICogdm9pZCB3cml0ZV9tbWNyX3dvcmQodTE2IG1tY3IsIHUxNiBkYXRhKQogICogdm9pZCB3cml0ZV9tbWNyX2xvbmcodTE2IG1tY3IsIHUzMiBkYXRhKQotICogCisgKgogICogdTggICByZWFkX21tY3JfYnl0ZSh1MTYgbW1jcikKICAqIHUxNiAgcmVhZF9tbWNyX3dvcmQodTE2IG1tY3IpCiAgKiB1MzIgIHJlYWRfbW1jcl9sb25nKHUxNiBtbWNyKQotICogCisgKgogICogdm9pZCBpbml0X3NjNTIwKHZvaWQpCiAgKiB1bnNpZ25lZCBsb25nIGluaXRfc2M1MjBfZHJhbSh2b2lkKQogICogdm9pZCBwY2lfc2M1MjBfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi0gKiAKKyAqCiAgKiB2b2lkIHJlc2V0X3RpbWVyKHZvaWQpCiAgKiB1bG9uZyBnZXRfdGltZXIodWxvbmcgYmFzZSkKICAqIHZvaWQgc2V0X3RpbWVyKHVsb25nIHQpCiAgKiB2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCi0gKiAKKyAqCiAgKi8KIAogc3RhdGljIHUzMiBtbWNyX2Jhc2U9IDB4ZmZmZWYwMDA7CkBAIC02Nyw3ICs2Nyw3IEBACiAKIHZvaWQgd3JpdGVfbW1jcl93b3JkKHUxNiBtbWNyLCB1MTYgZGF0YSkKIHsKLQl3cml0ZXcoZGF0YSwgbW1jcittbWNyX2Jhc2UpOwkKKwl3cml0ZXcoZGF0YSwgbW1jcittbWNyX2Jhc2UpOwogfQogCiB2b2lkIHdyaXRlX21tY3JfbG9uZyh1MTYgbW1jciwgdTMyIGRhdGEpCkBAIC04Miw3ICs4Miw3IEBACiAKIHUxNiByZWFkX21tY3Jfd29yZCh1MTYgbW1jcikKIHsKLQlyZXR1cm4gcmVhZHcobW1jcittbWNyX2Jhc2UpOwkKKwlyZXR1cm4gcmVhZHcobW1jcittbWNyX2Jhc2UpOwogfQogCiB1MzIgcmVhZF9tbWNyX2xvbmcodTE2IG1tY3IpCkBAIC05NCwxOSArOTQsMTkgQEAKIHZvaWQgaW5pdF9zYzUyMCh2b2lkKQogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwotCQorCiAJLyogU2V0IHRoZSBVQVJUeENUTCByZWdpc3RlciBhdCBpdCdzIHNsb3dlciwKLQkgKiBiYXVkIGNsb2NrIGdpdmluZyB1cyBhIDEuODQzMiBNSHogcmVmZXJlbmNlIAorCSAqIGJhdWQgY2xvY2sgZ2l2aW5nIHVzIGEgMS44NDMyIE1IeiByZWZlcmVuY2UKIAkgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfVUFSVDFDVEwsIDcpOwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9VQVJUMkNUTCwgNyk7Ci0JCisKIAkvKiBmaXJzdCBzZXQgdGhlIHRpbWVyIHBpbiBtYXBwaW5nICovCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0NMS1NFTCwgMHg3Mik7CS8qIG5vIGNsb2NrIGZyZXF1ZW5jeSBzZWxlY3RlZCwgdXNlIDEuMTg5Mk1IeiAqLwotCQorCiAJLyogZW5hYmxlIFBDSSBidXMgYXJiaXRyZXIgKi8KIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1lTQVJCQ1RMLDB4MDIpOyAgLyogZW5hYmxlIGNvbmN1cnJlbnQgbW9kZSAqLwotCQorCiAJd3JpdGVfbW1jcl93b3JkKFNDNTIwX1NZU0FSQk1FTkIsMHgxZik7IC8qIGVuYWJsZSBleHRlcm5hbCBncmFudHMgKi8KIAl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfSEJDVEwsMHgwNCk7ICAgICAgLyogZW5hYmxlIHBvc3RlZC13cml0ZXMgKi8KIApAQCAtMTIwLDEwICsxMjAsMTAgQEAKIAkJcHJpbnRmKCIjIyBDUFUgU3BlZWQgc2V0IHRvIDEwME1IelxuIik7CiAJCWdkLT5jcHVfY2xrID0gMTAwMDAwMDAwOwogCX0KLQkKKwogCiAJLyogd2FpdCBhdCBsZWFzdCBvbmUgbWlsbGlzZWNvbmQgKi8KLSAgICAgICAgYXNtKCJtb3ZsCSQweDIwMDAsJSVlY3hcbiIKKwlhc20oIm1vdmwJJDB4MjAwMCwlJWVjeFxuIgogCSAgICAid2FpdF9sb29wOglwdXNobCAlJWVjeFxuIgogCSAgICAicG9wbAklJWVjeFxuIgogCSAgICAibG9vcCB3YWl0X2xvb3BcbiI6IDogOiAiZWN4Iik7CkBAIC0xNDEsMTkgKzE0MSwxOSBAQAogewogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCWJkX3QgKmJkID0gZ2QtPmJkOwotCQorCiAJdTMyIGRyYW1fcHJlc2VudD0wOwogCXUzMiBkcmFtX2N0cmw7CiAKIAlpbnQgdmFsOwotCQotCWludCBjYXNfcHJlY2hhcmdlX2RlbGF5ID0gQ0ZHX1NEUkFNX1BSRUNIQVJHRV9ERUxBWTsJCi0JaW50IHJlZnJlc2hfcmF0ZSAgICAgICAgPSBDRkdfU0RSQU1fUkVGUkVTSF9SQVRFOwkKKworCWludCBjYXNfcHJlY2hhcmdlX2RlbGF5ID0gQ0ZHX1NEUkFNX1BSRUNIQVJHRV9ERUxBWTsKKwlpbnQgcmVmcmVzaF9yYXRlICAgICAgICA9IENGR19TRFJBTV9SRUZSRVNIX1JBVEU7CiAJaW50IHJhc19jYXNfZGVsYXkgICAgICAgPSBDRkdfU0RSQU1fUkFTX0NBU19ERUxBWTsKLQkKKwogCS8qIHNldCBTRFJBTSBzcGVlZCBoZXJlICovCi0JCi0JcmVmcmVzaF9yYXRlLz03ODsJCisKKwlyZWZyZXNoX3JhdGUvPTc4OwogCWlmIChyZWZyZXNoX3JhdGU8PTEpIHsKIAkJdmFsID0gMDsgIC8qIDcuOHVzICovCiAJfSBlbHNlIGlmIChyZWZyZXNoX3JhdGU9PTIpIHsKQEAgLTE2NCwyMiArMTY0LDIyIEBACiAJCXZhbCA9IDM7ICAvKiA2Mi40dXMgKi8KIAl9CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0RSQ0NUTCwgKHJlYWRfbW1jcl9ieXRlKFNDNTIwX0RSQ0NUTCkgJiAweGNmKSB8ICh2YWw8PDQpKTsKLQkKKwogCXZhbCA9IHJlYWRfbW1jcl9ieXRlKFNDNTIwX0RSQ1RNQ1RMKTsKIAl2YWwgJj0gMHhmMDsKLQkKLQlpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT09MykgewkJCisKKwlpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT09MykgewogCQl2YWwgfD0gMHgwNDsgICAvKiAzVCAqLwotCX0gZWxzZSBpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT09NCkgewkJCisJfSBlbHNlIGlmIChjYXNfcHJlY2hhcmdlX2RlbGF5PT00KSB7CiAJCXZhbCB8PSAweDA4OyAgIC8qIDRUICovCi0JfSBlbHNlIGlmIChjYXNfcHJlY2hhcmdlX2RlbGF5PjQpIHsJCQorCX0gZWxzZSBpZiAoY2FzX3ByZWNoYXJnZV9kZWxheT40KSB7CiAJCXZhbCB8PSAweDBjOwotCX0gCi0JCisJfQorCiAJaWYgKHJhc19jYXNfZGVsYXkgPiAzKSB7Ci0JCXZhbCB8PSAyOyAKKwkJdmFsIHw9IDI7CiAJfSBlbHNlIHsKLQkJdmFsIHw9IDE7IAorCQl2YWwgfD0gMTsKIAl9CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0RSQ1RNQ1RMLCB2YWwpOwogCkBAIC0xODcsMzcgKzE4NywzNyBAQAogCS8qIFdlIHJlYWQtYmFjayB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZHJhbQogCSAqIGNvbnRyb2xsZXIgdGhhdCB0aGUgYXNzZW1ibHkgY29kZSB3cm90ZSAqLwogCWRyYW1fY3RybCA9IHJlYWRfbW1jcl9sb25nKFNDNTIwX0RSQ0JFTkRBRFIpOwotCQorCiAKIAliZC0+YmlfZHJhbVswXS5zdGFydCA9IDA7CiAJaWYgKGRyYW1fY3RybCAmIDB4ODApIHsKIAkJLyogYmFuayAwIGVuYWJsZWQgKi8KIAkJZHJhbV9wcmVzZW50ID0gYmQtPmJpX2RyYW1bMV0uc3RhcnQgPSAoZHJhbV9jdHJsICYgMHg3ZikgPDwgMjI7Ci0JCWJkLT5iaV9kcmFtWzBdLnNpemUgPSBiZC0+YmlfZHJhbVsxXS5zdGFydDsgCisJCWJkLT5iaV9kcmFtWzBdLnNpemUgPSBiZC0+YmlfZHJhbVsxXS5zdGFydDsKIAogCX0gZWxzZSB7CiAJCWJkLT5iaV9kcmFtWzBdLnNpemUgPSAwOwogCQliZC0+YmlfZHJhbVsxXS5zdGFydCA9IGJkLT5iaV9kcmFtWzBdLnN0YXJ0OwogCX0KLQkKKwogCWlmIChkcmFtX2N0cmwgJiAweDgwMDApIHsKIAkJLyogYmFuayAxIGVuYWJsZWQgKi8KIAkJZHJhbV9wcmVzZW50ID0gYmQtPmJpX2RyYW1bMl0uc3RhcnQgPSAoZHJhbV9jdHJsICYgMHg3ZjAwKSA8PCAxNDsKLQkJYmQtPmJpX2RyYW1bMV0uc2l6ZSA9IGJkLT5iaV9kcmFtWzJdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzFdLnN0YXJ0OyAKKwkJYmQtPmJpX2RyYW1bMV0uc2l6ZSA9IGJkLT5iaV9kcmFtWzJdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzFdLnN0YXJ0OwogCX0gZWxzZSB7CiAJCWJkLT5iaV9kcmFtWzFdLnNpemUgPSAwOwogCQliZC0+YmlfZHJhbVsyXS5zdGFydCA9IGJkLT5iaV9kcmFtWzFdLnN0YXJ0OwogCX0KLQkKKwogCWlmIChkcmFtX2N0cmwgJiAweDgwMDAwMCkgewogCQkvKiBiYW5rIDIgZW5hYmxlZCAqLwogCQlkcmFtX3ByZXNlbnQgPSBiZC0+YmlfZHJhbVszXS5zdGFydCA9IChkcmFtX2N0cmwgJiAweDdmMDAwMCkgPDwgNjsKLQkJYmQtPmJpX2RyYW1bMl0uc2l6ZSA9IGJkLT5iaV9kcmFtWzNdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzJdLnN0YXJ0OyAKKwkJYmQtPmJpX2RyYW1bMl0uc2l6ZSA9IGJkLT5iaV9kcmFtWzNdLnN0YXJ0IC0gIGJkLT5iaV9kcmFtWzJdLnN0YXJ0OwogCX0gZWxzZSB7CiAJCWJkLT5iaV9kcmFtWzJdLnNpemUgPSAwOwogCQliZC0+YmlfZHJhbVszXS5zdGFydCA9IGJkLT5iaV9kcmFtWzJdLnN0YXJ0OwotCX0gCi0JCisJfQorCiAJaWYgKGRyYW1fY3RybCAmIDB4ODAwMDAwMDApIHsKIAkJLyogYmFuayAzIGVuYWJsZWQgKi8KIAkJZHJhbV9wcmVzZW50ICA9IChkcmFtX2N0cmwgJiAweDdmMDAwMDAwKSA+PiAyOwpAQCAtMjI2LDEyICsyMjYsMTIgQEAKIAkJYmQtPmJpX2RyYW1bM10uc2l6ZSA9IDA7CiAJfQogCi0JCi0jaWYgMAkKKworI2lmIDAKIAlwcmludGYoIkNvbmZpZ3VyZWQgJWQgYnl0ZXMgb2YgZHJhbVxuIiwgZHJhbV9wcmVzZW50KTsKLSNlbmRpZgkKKyNlbmRpZgogCWdkLT5yYW1fc2l6ZSA9IGRyYW1fcHJlc2VudDsKLQkKKwogCXJldHVybiBkcmFtX3ByZXNlbnQ7CiB9CiAKQEAgLTI2NSwxOSArMjY1LDE5IEBACiAKIAogLyogVGhlIGludGVycnVwdCB1c2VkIGZvciBQQ0kgSU5UQS1JTlREICAqLwotaW50IHNjNTIwX3BjaV9pbnRzWzE1XSA9IHsgCitpbnQgc2M1MjBfcGNpX2ludHNbMTVdID0gewogCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKIAkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEKIH07CiAKIC8qIHV0aWxpdHkgZnVuY3Rpb24gdG8gY29uZmlndXJlIGEgcGNpIGludGVycnVwdCAqLwotaW50IHBjaV9zYzUyMF9zZXRfaXJxKGludCBwY2lfcGluLCBpbnQgaXJxKSAKK2ludCBwY2lfc2M1MjBfc2V0X2lycShpbnQgcGNpX3BpbiwgaW50IGlycSkKIHsKIAlpbnQgaTsKLQkKKwogIyBpZiAwCiAJcHJpbnRmKCJzZXRfaXJxKCk6IG1hcCBJTlQlYyB0byBJUlElZFxuIiwgcGNpX3BpbiArICdBJywgaXJxKTsKLSNlbmRpZgkKKyNlbmRpZgogCWlmIChpcnEgPCAwIHx8IGlycSA+IDE1KSB7CiAJCXJldHVybiAtMTsgLyogaWxsZWdhbCBpcnEgKi8KIAl9CkBAIC0yODYsNyArMjg2LDcgQEAKIAkJcmV0dXJuIC0xOyAvKiBpbGxlZ2FsIHBjaSBpbnQgcGluICovCiAJfQogCi0JLyogZmlyc3QgZGlzYWJsZSBhbnkgbm9uLXBjaSBpbnRlcnJ1cHQgc291cmNlIHRoYXQgdXNlIAorCS8qIGZpcnN0IGRpc2FibGUgYW55IG5vbi1wY2kgaW50ZXJydXB0IHNvdXJjZSB0aGF0IHVzZQogCSAqIHRoaXMgbGV2ZWwgKi8KIAlmb3IgKGk9U0M1MjBfR1BUTVIwTUFQO2k8PVNDNTIwX0dQMTBJTUFQO2krKykgewogCQlpZiAoaT49U0M1MjBfUENJSU5UQU1BUCYmaTw9U0M1MjBfUENJSU5URE1BUCkgewpAQCAtMjk2LDMxICsyOTYsMzEgQEAKIAkJCXdyaXRlX21tY3JfYnl0ZShpLCBTQzUyMF9JUlFfRElTQUJMRUQpOwogCQl9CiAJfQotCQorCiAJLyogU2V0IHRoZSB0cmlnZ2VyIHRvIGxldmVsICovCi0Jd3JpdGVfbW1jcl9ieXRlKHNjNTIwX2lycVtpcnFdLmxldmVsX3JlZywgCisJd3JpdGVfbW1jcl9ieXRlKHNjNTIwX2lycVtpcnFdLmxldmVsX3JlZywKIAkJCXJlYWRfbW1jcl9ieXRlKHNjNTIwX2lycVtpcnFdLmxldmVsX3JlZykgfCBzYzUyMF9pcnFbaXJxXS5sZXZlbF9iaXQpOwotCQotCQorCisKIAlpZiAocGNpX3BpbiA8IDQpIHsKIAkJLyogUENJIElOVEEtSU5URCAqLwogCQkvKiByb3V0ZSB0aGUgaW50ZXJydXB0ICovCiAJCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9QQ0lJTlRBTUFQICsgcGNpX3Bpbiwgc2M1MjBfaXJxW2lycV0ucHJpb3JpdHkpOwotCQkKLQkJCisKKwogCX0gZWxzZSB7CiAJCS8qIEdQSVJRMC1HUElSUTEwIHVzZWQgZm9yIGFkZGl0aW9uYWwgUENJIElOVFMgKi8KIAkJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX0dQMElNQVAgKyBwY2lfcGluIC0gNCwgc2M1MjBfaXJxW2lycV0ucHJpb3JpdHkpOwotCQkKKwogCQkvKiBhbHNvIHNldCB0aGUgcG9sYXJpdHkgaW4gdGhpcyBjYXNlICovCi0JCXdyaXRlX21tY3Jfd29yZChTQzUyMF9JTlRQSU5QT0wsIAorCQl3cml0ZV9tbWNyX3dvcmQoU0M1MjBfSU5UUElOUE9MLAogCQkJCXJlYWRfbW1jcl93b3JkKFNDNTIwX0lOVFBJTlBPTCkgfCAoMSA8PCAocGNpX3Bpbi00KSkpOwotCQkKKwogCX0KLQkKLQkvKiByZWdpc3RlciB0aGUgcGluICovCQkKKworCS8qIHJlZ2lzdGVyIHRoZSBwaW4gKi8KIAlzYzUyMF9wY2lfaW50c1twY2lfcGluXSA9IGlycTsKLQkKKwogCiAJcmV0dXJuIDA7IC8qIE9LICovCiB9CkBAIC0zMzEsMzUgKzMzMSwzNSBAQAogCWhvc2UtPmxhc3RfYnVzbm8gPSAweGZmOwogCiAJLyogU3lzdGVtIG1lbW9yeSBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAwLCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMCwKIAkJICAgICAgIFNDNTIwX1BDSV9NRU1PUllfQlVTLAogCQkgICAgICAgU0M1MjBfUENJX01FTU9SWV9QSFlTLAogCQkgICAgICAgU0M1MjBfUENJX01FTU9SWV9TSVpFLAogCQkgICAgICAgUENJX1JFR0lPTl9NRU0gfCBQQ0lfUkVHSU9OX01FTU9SWSk7CiAKIAkvKiBQQ0kgbWVtb3J5IHNwYWNlICovCi0JcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDEsIAorCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAxLAogCQkgICAgICAgU0M1MjBfUENJX01FTV9CVVMsCiAJCSAgICAgICBTQzUyMF9QQ0lfTUVNX1BIWVMsCiAJCSAgICAgICBTQzUyMF9QQ0lfTUVNX1NJWkUsCiAJCSAgICAgICBQQ0lfUkVHSU9OX01FTSk7CiAKIAkvKiBJU0EvUENJIG1lbW9yeSBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAyLCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMiwKIAkJICAgICAgIFNDNTIwX0lTQV9NRU1fQlVTLAogCQkgICAgICAgU0M1MjBfSVNBX01FTV9QSFlTLAogCQkgICAgICAgU0M1MjBfSVNBX01FTV9TSVpFLAogCQkgICAgICAgUENJX1JFR0lPTl9NRU0pOwogCiAJLyogUENJIEkvTyBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAzLCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMywKIAkJICAgICAgIFNDNTIwX1BDSV9JT19CVVMsCiAJCSAgICAgICBTQzUyMF9QQ0lfSU9fUEhZUywKIAkJICAgICAgIFNDNTIwX1BDSV9JT19TSVpFLAogCQkgICAgICAgUENJX1JFR0lPTl9JTyk7CiAKIAkvKiBJU0EvUENJIEkvTyBzcGFjZSAqLwotCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyA0LCAKKwlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgNCwKIAkJICAgICAgIFNDNTIwX0lTQV9JT19CVVMsCiAJCSAgICAgICBTQzUyMF9JU0FfSU9fUEhZUywKIAkJICAgICAgIFNDNTIwX0lTQV9JT19TSVpFLApAQCAtMzc0LDE1ICszNzQsMTQgQEAKIAlwY2lfcmVnaXN0ZXJfaG9zZShob3NlKTsKIAogCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOwotCQorCiAJLyogZW5hYmxlIHRhcmdldCBtZW1vcnkgYWNjZXNlcyBvbiBob3N0IGJyaWdlICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCAKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsCiAJCQkgICAgICBQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIpOwogCiB9CiAKIAotCiAjZW5kaWYKIAogI2lmZGVmIENGR19USU1FUl9TQzUyMApAQCAtMzkyLDcgKzM5MSw3IEBACiB7CiAJd3JpdGVfbW1jcl93b3JkKFNDNTIwX0dQVE1SMENOVCwgMCk7CiAJd3JpdGVfbW1jcl93b3JkKFNDNTIwX0dQVE1SMENUTCwgMHg2MDAxKTsKLQkKKwogfQogCiB1bG9uZyBnZXRfdGltZXIodWxvbmcgYmFzZSkKQEAgLTQxNCwxOSArNDEzLDE5IEBACiB7CiAJaW50IG09MDsKIAlsb25nIHU7Ci0JCisKIAlyZWFkX21tY3Jfd29yZChTQzUyMF9TV1RNUk1JTExJKTsKIAlyZWFkX21tY3Jfd29yZChTQzUyMF9TV1RNUk1JQ1JPKTsKLQkgICAgIAorCiAjaWYgMAogCS8qIGRvIG5vdCBlbmFibGUgdGhpcyBsaW5lLCB1ZGVsYXkgaXMgdXNlZCBpbiB0aGUgc2VyaWFsIGRyaXZlciAtPiByZWN1cnNpb24gKi8KIAlwcmludGYoInVkZWxheTogJWxkIG0udSAlZC4lZCAgdG0udHUgJWQuJWRcbiIsIHVzZWMsIG0sIHUsIHRtLCB0dSk7Ci0jZW5kaWYJCisjZW5kaWYKIAl3aGlsZSAoMSkgewotCQkKKwogCQltICs9IHJlYWRfbW1jcl93b3JkKFNDNTIwX1NXVE1STUlMTEkpOwogCQl1ID0gcmVhZF9tbWNyX3dvcmQoU0M1MjBfU1dUTVJNSUNSTykgKyAobSAqIDEwMDApOwotCQkKKwogCQlpZiAodXNlYyA8PSB1KSB7CiAJCQlicmVhazsKIAkJfQpAQCAtNDQwLDEzICs0MzksMTMgQEAKIAl1OCB0ZW1wPTA7CiAKIAlpZiAoZnJlcSA+PSA4MTkyKSB7Ci0JCXRlbXAgfD0gQ1RMX0NMS19TRUxfNDsgCisJCXRlbXAgfD0gQ1RMX0NMS19TRUxfNDsKIAl9IGVsc2UgaWYgKGZyZXEgPj0gNDA5NikgewotCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzg7ICAgICAgICAKKwkJdGVtcCB8PSBDVExfQ0xLX1NFTF84OwogCX0gZWxzZSBpZiAoZnJlcSA+PSAyMDQ4KSB7Ci0JCXRlbXAgfD0gQ1RMX0NMS19TRUxfMTY7ICAKKwkJdGVtcCB8PSBDVExfQ0xLX1NFTF8xNjsKIAl9IGVsc2UgaWYgKGZyZXEgPj0gMTAyNCkgewotCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzMyOyAgCisJCXRlbXAgfD0gQ1RMX0NMS19TRUxfMzI7CiAJfSBlbHNlIGlmIChmcmVxID49IDUxMikgewogCQl0ZW1wIHw9IENUTF9DTEtfU0VMXzY0OwogCX0gZWxzZSBpZiAoZnJlcSA+PSAyNTYpIHsKQEAgLTQ1Niw0NyArNDU1LDQ3IEBACiAJfSBlbHNlIHsKIAkJdGVtcCB8PSBDVExfQ0xLX1NFTF81MTI7CiAJfQotCQorCiAJaWYgKCFsc2JfZmlyc3QpIHsKIAkJdGVtcCB8PSBNU0JGX0VOQjsKIAl9Ci0JCQorCiAJaWYgKGludl9jbG9jaykgewogCQl0ZW1wIHw9IENMS19JTlZfRU5COwogCX0KLQkKKwogCWlmIChpbnZfcGhhc2UpIHsKIAkJdGVtcCB8PSBQSFNfSU5WX0VOQjsKIAl9Ci0JCQorCiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NTSUNUTCwgdGVtcCk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAotdTggc3NpX3R4cnhfYnl0ZSh1OCBkYXRhKSAKK3U4IHNzaV90eHJ4X2J5dGUodTggZGF0YSkKIHsKIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1NJWE1JVCwgZGF0YSk7CiAJd2hpbGUgKChyZWFkX21tY3JfYnl0ZShTQzUyMF9TU0lTVEEpKSAmIFNTSVNUQV9CU1kpOwogCXdyaXRlX21tY3JfYnl0ZShTQzUyMF9TU0lDTUQsIFNTSUNNRF9DTURfU0VMX1hNSVRSQ1YpOwogCXdoaWxlICgocmVhZF9tbWNyX2J5dGUoU0M1MjBfU1NJU1RBKSkgJiBTU0lTVEFfQlNZKTsKLQlyZXR1cm4gcmVhZF9tbWNyX2J5dGUoU0M1MjBfU1NJUkNWKTsJCi19ICAgICAgCisJcmV0dXJuIHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVJDVik7Cit9CiAKIAotdm9pZCBzc2lfdHhfYnl0ZSh1OCBkYXRhKSAKK3ZvaWQgc3NpX3R4X2J5dGUodTggZGF0YSkKIHsKIAl3cml0ZV9tbWNyX2J5dGUoU0M1MjBfU1NJWE1JVCwgZGF0YSk7Ci0Jd2hpbGUgKChyZWFkX21tY3JfYnl0ZShTQzUyMF9TU0lTVEEpKSAmIFNTSVNUQV9CU1kpOyAKKwl3aGlsZSAoKHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVNUQSkpICYgU1NJU1RBX0JTWSk7CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NTSUNNRCwgU1NJQ01EX0NNRF9TRUxfWE1JVCk7CiB9CiAKLXU4IHNzaV9yeF9ieXRlKHZvaWQpIAordTggc3NpX3J4X2J5dGUodm9pZCkKIHsKIAl3aGlsZSAoKHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVNUQSkpICYgU1NJU1RBX0JTWSk7CiAJd3JpdGVfbW1jcl9ieXRlKFNDNTIwX1NTSUNNRCwgU1NJQ01EX0NNRF9TRUxfUkNWKTsKIAl3aGlsZSAoKHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVNUQSkpICYgU1NJU1RBX0JTWSk7CiAJcmV0dXJuIHJlYWRfbW1jcl9ieXRlKFNDNTIwX1NTSVJDVik7Ci19IAorfQogCiAjZW5kaWYgLyogQ09ORklHX1NDNTIwICovCmRpZmYgLS1naXQgYS9jcHUvaTM4Ni9zYzUyMF9hc20uUyBiL2NwdS9pMzg2L3NjNTIwX2FzbS5TCmluZGV4IDdhOTU3YzcuLjgwNDY0ZmEgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3NjNTIwX2FzbS5TCisrKyBiL2NwdS9pMzg2L3NjNTIwX2FzbS5TCkBAIC0yMiwyMSArMjIsMjEgQEAKICAqLwogCiAvKiBUaGlzIGZpbGUgaXMgbGFyZ2VseSBiYXNlZCBvbiBjb2RlIG9idG5lZCBmcm9tIEFNRC4gQU1EJ3Mgb3JpZ2luYWwKLSAqIGNvcHlyaWdodCBpcyBpbmNsdWRlZCBiZWxvdyAKKyAqIGNvcHlyaWdodCBpcyBpbmNsdWRlZCBiZWxvdwogICovCiAKIC8qCiAgKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKiAgIENvcHlyaWdodCAxOTk5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICBUaGlzIHNvZnR3YXJlIGlzIHRoZSBwcm9wZXJ0eSBvZiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMgIChBTUQpICB3aGljaCAKLSAqICBzcGVjaWZpY2FsbHkgZ3JhbnRzIHRoZSB1c2VyIHRoZSByaWdodCB0byBtb2RpZnksIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzIAotICogIHNvZnR3YXJlIHByb3ZpZGVkIHRoaXMgQ09QWVJJR0hUIE5PVElDRSBpcyBub3QgcmVtb3ZlZCBvciBhbHRlcmVkLiAgQWxsIAotICogIG90aGVyIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQgYnkgQU1ELiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqICBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSAKLSAqICBPRiBBTlkgS0lORCBJTkNMVURJTkcgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE5PTklORlJJTkdFTUVOVCBPRiAKKyAqCisgKiAgIENvcHlyaWdodCAxOTk5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiAgVGhpcyBzb2Z0d2FyZSBpcyB0aGUgcHJvcGVydHkgb2YgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jICAoQU1EKSAgd2hpY2gKKyAqICBzcGVjaWZpY2FsbHkgZ3JhbnRzIHRoZSB1c2VyIHRoZSByaWdodCB0byBtb2RpZnksIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiAgc29mdHdhcmUgcHJvdmlkZWQgdGhpcyBDT1BZUklHSFQgTk9USUNFIGlzIG5vdCByZW1vdmVkIG9yIGFsdGVyZWQuICBBbGwKKyAqICBvdGhlciByaWdodHMgYXJlIHJlc2VydmVkIGJ5IEFNRC4KKyAqCisgKiAgVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVFkKKyAqICBPRiBBTlkgS0lORCBJTkNMVURJTkcgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE5PTklORlJJTkdFTUVOVCBPRgogICogIFRISVJELVBBUlRZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSwgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqICBJTiBOTyBFVkVOVCBTSEFMTCBBTUQgT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKICAqICAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgUFJPRklUUywgQlVTSU5FU1MKQEAgLTQ1LDE5ICs0NSwxOSBAQAogICogIFNVQ0ggREFNQUdFUy4gIEJFQ0FVU0UgU09NRSBKVVJTSURJQ1RJT05TIFBST0hJQklUIFRIRSBFWENMVVNJT04gT1IKICAqICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBGT1IgQ09OU0VRVUVOVElBTCBPUiBJTkNJREVOVEFMIERBTUFHRVMsIFRIRSBBQk9WRQogICogIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCi0gKiAKKyAqCiAgKiAgQU1EIGRvZXMgbm90IGFzc3VtZSBhbnkgcmVzcG9uc2liaWxpdHkgZm9yIGFueSBlcnJvcnMgdGhhdCBtYXkgYXBwZWFyIGluCiAgKiAgdGhlIE1hdGVyaWFscyBub3IgYW55IHJlc3BvbnNpYmlsaXR5IHRvIHN1cHBvcnQgb3IgdXBkYXRlIHRoZSBNYXRlcmlhbHMuCiAgKiAgQU1EIHJldGFpbnMgdGhlIHJpZ2h0IHRvIG1ha2UgY2hhbmdlcyB0byBpdHMgdGVzdCBzcGVjaWZpY2F0aW9ucyBhdCBhbnkKICAqICB0aW1lLCB3aXRob3V0IG5vdGljZS4KLSAqIAotICogIFNvIHRoYXQgYWxsIG1heSBiZW5lZml0IGZyb20geW91ciBleHBlcmllbmNlLCBwbGVhc2UgcmVwb3J0ICBhbnkgIHByb2JsZW1zIAotICogIG9yIHN1Z2dlc3Rpb25zIGFib3V0IHRoaXMgc29mdHdhcmUgYmFjayB0byBBTUQuICBQbGVhc2UgaW5jbHVkZSB5b3VyIG5hbWUsIAotICogIGNvbXBhbnksICB0ZWxlcGhvbmUgbnVtYmVyLCAgQU1EIHByb2R1Y3QgcmVxdWlyaW5nIHN1cHBvcnQgYW5kIHF1ZXN0aW9uIG9yIAotICogIHByb2JsZW0gZW5jb3VudGVyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICogIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gICAgICAgICBXb3JsZHdpZGUgc3VwcG9ydCBhbmQgY29udGFjdCAgICAgICAgICAgCi0gKiAgRW1iZWRkZWQgUHJvY2Vzc29yIERpdmlzaW9uICAgICAgICAgICAgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGF0OiAgICAgICAgICAgICAgIAorICoKKyAqICBTbyB0aGF0IGFsbCBtYXkgYmVuZWZpdCBmcm9tIHlvdXIgZXhwZXJpZW5jZSwgcGxlYXNlIHJlcG9ydCAgYW55ICBwcm9ibGVtcworICogIG9yIHN1Z2dlc3Rpb25zIGFib3V0IHRoaXMgc29mdHdhcmUgYmFjayB0byBBTUQuICBQbGVhc2UgaW5jbHVkZSB5b3VyIG5hbWUsCisgKiAgY29tcGFueSwgIHRlbGVwaG9uZSBudW1iZXIsICBBTUQgcHJvZHVjdCByZXF1aXJpbmcgc3VwcG9ydCBhbmQgcXVlc3Rpb24gb3IKKyAqICBwcm9ibGVtIGVuY291bnRlcmVkLgorICoKKyAqICBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICAgICAgICAgV29ybGR3aWRlIHN1cHBvcnQgYW5kIGNvbnRhY3QKKyAqICBFbWJlZGRlZCBQcm9jZXNzb3IgRGl2aXNpb24gICAgICAgICAgICBpbmZvcm1hdGlvbiBhdmFpbGFibGUgYXQ6CiAgKiAgU3lzdGVtcyBFbmdpbmVlcmluZyAgICAgICAgICAgICAgICAgICAgICAgZXBkLnN1cHBvcnRAYW1kLmNvbQogICogIDUyMDQgRS4gQmVuIFdoaXRlIEJsdmQuICAgICAgICAgICAgICAgICAgICAgICAgICAtb3ItCiAgKiAgQXVzdGluLCBUWCA3ODc0MSAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFtZC5jb20vaHRtbC9zdXBwb3J0L3RlY2hzdXAuaHRtbApAQCAtNjYsNyArNjYsNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkgQVVUSE9SICAgICAgOiBCdWRkeSBGZXkgLSBPcmlnaW5hbC4gCisgKgkgQVVUSE9SICAgICAgOiBCdWRkeSBGZXkgLSBPcmlnaW5hbC4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIApAQCAtMTQwLDM2OCArMTQwLDM2OCBAQAogICAqIGluaXRpYWxpemUgZHJhbSBjb250cm9sbGVyIHJlZ2lzdGVycwogICAqLwogLmdsb2JsIG1lbV9pbml0Ci1tZW1faW5pdDogCi0gICAgICAgIHhvcncgICAgJWF4LCVheAotICAgICAgICBtb3ZsICAgICREQkNUTCwgJWVkaSAgICAgICAgICAgICAKK21lbV9pbml0OgorCXhvcncgICAgJWF4LCVheAorCW1vdmwgICAgJERCQ1RMLCAlZWRpCiAJbW92YiAgICAgJWFsLCAoJWVkaSkgICAgICAgICAgICAgLyogZGlzYWJsZSB3cml0ZSBidWZmZXIgKi8KIAotICAgICAgICBtb3ZsICAgICRFQ0NDVEwsICVlZGkgICAgICAgICAgICAKKwltb3ZsICAgICRFQ0NDVEwsICVlZGkKIAltb3ZiICAgICAlYWwsICglZWRpKSAgICAgICAgICAgICAvKiBkaXNhYmxlIEVDQyAqLwogCi0gICAgICAgIG1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpICAgICAgICAgICAKLSAgICAgICAgbW92YiAgICAkMHgxRSwlYWwgICAgICAgICAgICAgICAgLyogU2V0IFNEUkFNIHRpbWluZyBmb3Igc2xvd2VzdCAqLworCW1vdmwgICAgJERSQ1RNQ1RMLCAlZWRpCisJbW92YiAgICAkMHgxRSwlYWwgICAgICAgICAgICAgICAgLyogU2V0IFNEUkFNIHRpbWluZyBmb3Igc2xvd2VzdCAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCiAKICAvKgogICAqIHNldHVwIGxvb3AgdG8gZG8gNCBleHRlcm5hbCBiYW5rcyBzdGFydGluZyB3aXRoIGJhbmsgMwogICAqLwotICAgICAgICBtb3ZsICAgICQweGZmMDAwMDAwLCVlYXggICAgICAgICAvKiBlbmFibGUgbGFzdCBiYW5rIGFuZCBzZXR1cCAqLwotICAgICAgICBtb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLworCW1vdmwgICAgJDB4ZmYwMDAwMDAsJWVheCAgICAgICAgIC8qIGVuYWJsZSBsYXN0IGJhbmsgYW5kIHNldHVwICovCisJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgKi8KIAltb3ZsICAgICAlZWF4LCAoJWVkaSkKIAotICAgICAgICBtb3ZsICAgICREUkNDRkcsICVlZGkgICAgICAgICAgICAvKiBzZXR1cCAqLwotICAgICAgICBtb3Z3ICAgICQweGJiYmIsJWF4ICAgICAgICAgICAgICAvKiBkcmFtIGNvbmZpZyByZWdpc3RlciBmb3IgICovCisJbW92bCAgICAkRFJDQ0ZHLCAlZWRpICAgICAgICAgICAgLyogc2V0dXAgKi8KKwltb3Z3ICAgICQweGJiYmIsJWF4ICAgICAgICAgICAgICAvKiBkcmFtIGNvbmZpZyByZWdpc3RlciBmb3IgICovCiAJbW92dyAgICAlYXgsICglZWRpKQogCiAgLyoKICAgKiBpc3N1ZSBhIE5PUCB0byBhbGwgRFJBTXMKICAgKi8KLSAgICAgICAgbW92bCAgICAkRFJDQ1RMLCAlZWRpICAgICAgICAgICAgLyogc2V0dXAgRFJBTSBjb250cm9sIHJlZ2lzdGVyIHdpdGggKi8KLSAgICAgICAgbW92YiAgICAkMHgxLCVhbCAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSByZWZyZXNoLGRpc2FibGUgd3JpdGUgYnVmZmVyICovIAorCW1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCisJbW92YiAgICAkMHgxLCVhbCAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSByZWZyZXNoLGRpc2FibGUgd3JpdGUgYnVmZmVyICovCiAJbW92YiAgICAgJWFsLCAoJWVkaSkKLSAgICAgICAgbW92bCAgICAkQ0FDSEVMSU5FU1osICVlc2kgICAgICAgLyoganVzdCBhIGR1bW15IGFkZHJlc3MgdG8gd3JpdGUgZm9yICovIAorCW1vdmwgICAgJENBQ0hFTElORVNaLCAlZXNpICAgICAgIC8qIGp1c3QgYSBkdW1teSBhZGRyZXNzIHRvIHdyaXRlIGZvciAqLwogCW1vdncgICAgICVheCwgKCVlc2kpCiAgLyoKICAgKiBkZWxheSBmb3IgMTAwIHVzZWM/IDIwMD8KICAgKiAqKioqKip0aGlzIGlzIGEgY2x1ZGdlIGZvciBub3cgKioqKioqKioqKioqKgogICAqLwotICAgICAgICBtb3Z3ICAgICQxMDAsJWN4Ci1zaXpkZWxheTogCi0gICAgICAgIGxvb3AgICAgc2l6ZGVsYXkgICAgICAgICAgICAgICAgIC8qIHdlIG5lZWQgMTAwIHVzZWMgaGVyZSAqLworCW1vdncgICAgJDEwMCwlY3gKK3NpemRlbGF5OgorCWxvb3AgICAgc2l6ZGVsYXkgICAgICAgICAgICAgICAgIC8qIHdlIG5lZWQgMTAwIHVzZWMgaGVyZSAqLwogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogIC8qCiAgICogaXNzdWUgYWxsIGJhbmtzIHByZWNoYXJnZQogICAqLwotICAgICAgICBtb3ZiICAgICQweDIsJWFsICAgICAgICAgICAgICAgICAvKiBBbGwgYmFua3MgcHJlY2hhcmdlICovCisJbW92YiAgICAkMHgyLCVhbCAgICAgICAgICAgICAgICAgLyogQWxsIGJhbmtzIHByZWNoYXJnZSAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCiAJbW92dyAgICAgJWF4LCAoJWVzaSkKIAogIC8qCi0gICogaXNzdWUgMiBhdXRvIHJlZnJlc2hlcyB0byBhbGwgYmFua3MgCisgICogaXNzdWUgMiBhdXRvIHJlZnJlc2hlcyB0byBhbGwgYmFua3MKICAgKi8KLSAgICAgICAgbW92YiAgICAkMHg0LCVhbCAgICAgICAgICAgICAgICAgLyogQXV0byByZWZyZXNoIGNtZCAqLworCW1vdmIgICAgJDB4NCwlYWwgICAgICAgICAgICAgICAgIC8qIEF1dG8gcmVmcmVzaCBjbWQgKi8KIAltb3ZiICAgICAlYWwsICglZWRpKQotICAgICAgICBtb3Z3ICAgICQyLCVjeAotcmVmcmVzaDE6IAorCW1vdncgICAgJDIsJWN4CityZWZyZXNoMToKIAltb3Z3ICAgICAlYXgsICglZXNpKQotICAgICAgICBsb29wICAgIHJlZnJlc2gxCisJbG9vcCAgICByZWZyZXNoMQogCiAgLyoKICAgKiBpc3N1ZSBMT0FEIE1PREUgUkVHSVNURVIgY29tbWFuZAogICAqLwotICAgICAgICBtb3ZiICAgICQweDMsJWFsICAgICAgICAgICAgICAgICAvKiBMb2FkIG1vZGUgcmVnaXN0ZXIgY21kICovCisJbW92YiAgICAkMHgzLCVhbCAgICAgICAgICAgICAgICAgLyogTG9hZCBtb2RlIHJlZ2lzdGVyIGNtZCAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCiAJbW92dyAgICAgJWF4LCAoJWVzaSkKIAogIC8qCi0gICogaXNzdWUgOCBtb3JlIGF1dG8gcmVmcmVzaGVzIHRvIGFsbCBiYW5rcyAKLSAgKi8gCi0gICAgICAgIG1vdmIgICAgJDB4NCwlYWwgICAgICAgICAgICAgICAgIC8qIEF1dG8gcmVmcmVzaCBjbWQgKi8KLQltb3ZiICAgICAlYWwsICglZWRpKQotICAgICAgICBtb3Z3ICAgICQ4LCVjeAotcmVmcmVzaDI6IAotCW1vdncgICAgICVheCwgKCVlc2kpCi0gICAgICAgIGxvb3AgICAgcmVmcmVzaDIKLQotIC8qCi0gICogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdG8gTk9STUFMIG1vZGUgCisgICogaXNzdWUgOCBtb3JlIGF1dG8gcmVmcmVzaGVzIHRvIGFsbCBiYW5rcwogICAqLwotICAgICAgICBtb3ZiICAgICQweDAsJWFsICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgbW9kZSB2YWx1ZSAqLworCW1vdmIgICAgJDB4NCwlYWwgICAgICAgICAgICAgICAgIC8qIEF1dG8gcmVmcmVzaCBjbWQgKi8KKwltb3ZiICAgICAlYWwsICglZWRpKQorCW1vdncgICAgJDgsJWN4CityZWZyZXNoMjoKKwltb3Z3ICAgICAlYXgsICglZXNpKQorCWxvb3AgICAgcmVmcmVzaDIKKworIC8qCisgICogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdG8gTk9STUFMIG1vZGUKKyAgKi8KKwltb3ZiICAgICQweDAsJWFsICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgbW9kZSB2YWx1ZSAqLwogCW1vdmIgICAgICVhbCwgKCVlZGkpCiAKICAvKgogICAqIHNpemUgZHJhbSBzdGFydGluZyB3aXRoIGV4dGVybmFsIGJhbmsgMyBtb3ZpbmcgdG8gZXh0ZXJuYWwgYmFuayAwCiAgICovCi0gICAgICAgIG1vdmwgICAgJDB4MywlZWN4ICAgICAgICAgICAgICAgIC8qIHN0YXJ0IHdpdGggZXh0ZXJuYWwgYmFuayAzICovCisJbW92bCAgICAkMHgzLCVlY3ggICAgICAgICAgICAgICAgLyogc3RhcnQgd2l0aCBleHRlcm5hbCBiYW5rIDMgKi8KIAotbmV4dGJhbms6IAorbmV4dGJhbms6CiAKICAvKgogICAqIHdyaXRlIGNvbCAxMSB3cmFwIGFkcgogICAqLwotICAgICAgICBtb3ZsICAgICRDT0wxMV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggY29sICgxMSkgd3JhcCBhZGRyICovCi0gICAgICAgIG1vdmwgICAgJENPTDExX0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIG1heCBzdXBwb3J0ZWQgY29sdW1ucygxMSkgKi8KKwltb3ZsICAgICRDT0wxMV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtYXggY29sICgxMSkgd3JhcCBhZGRyICovCisJbW92bCAgICAkQ09MMTFfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgbWF4IHN1cHBvcnRlZCBjb2x1bW5zKDExKSAqLwogCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIG1heCBjb2wgcGF0dGVybiBhdCBtYXggY29sIGFkciAqLwogCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgY29sIDEwIHdyYXAgYWRyCiAgICovCiAKLSAgICAgICAgbW92bCAgICAkQ09MMTBfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTAgY29sIHdyYXAgYWRkcmVzcyAqLwotICAgICAgICBtb3ZsICAgICRDT0wxMF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMCBjb2wgd3JhcCAqLworCW1vdmwgICAgJENPTDEwX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEwIGNvbCB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRDT0wxMF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMCBjb2wgd3JhcCAqLwogCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIDEwIGNvbCBwYXR0ZXJuIEAgMTAgY29sIHdyYXAgYWRyICovCiAJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwotICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KLSAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAgLyoKICAgKiB3cml0ZSBjb2wgOSB3cmFwIGFkcgogICAqLwotICAgICAgICBtb3ZsICAgICRDT0wwOV9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byA5IGNvbCB3cmFwIGFkZHJlc3MgKi8KLSAgICAgICAgbW92bCAgICAkQ09MMDlfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgOSBjb2wgd3JhcCAqLworCW1vdmwgICAgJENPTDA5X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDkgY29sIHdyYXAgYWRkcmVzcyAqLworCW1vdmwgICAgJENPTDA5X0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDkgY29sIHdyYXAgKi8KIAltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSA5IGNvbCBwYXR0ZXJuIEAgOSBjb2wgd3JhcCBhZHIgKi8KIAltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiBvcHRpb25hbCByZWFkICovCi0gICAgICAgIGNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLwotICAgICAgICBqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KKwljbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KKwlqbnogICAgIGJhZF9yYW0gICAgICAgICAgICAgICAgICAvKiB0aGlzIHJhbSBpcyBiYWQgKi8KICAvKgogICAqIHdyaXRlIGNvbCA4IHdyYXAgYWRyCiAgICovCi0gICAgICAgIG1vdmwgICAgJENPTDA4X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIG1pbig4KSBjb2wgd3JhcCBhZGRyZXNzICovCi0gICAgICAgIG1vdmwgICAgJENPTDA4X0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIG1pbiAoOCkgY29sIHdyYXAgKi8KKwltb3ZsICAgICRDT0wwOF9BRFIsICVlc2kgICAgICAgICAvKiBzZXQgYWRkcmVzcyB0byBtaW4oOCkgY29sIHdyYXAgYWRkcmVzcyAqLworCW1vdmwgICAgJENPTDA4X0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIG1pbiAoOCkgY29sIHdyYXAgKi8KIAltb3ZsICAgICVlYXgsICglZXNpKSAgICAgICAgICAgICAvKiB3cml0ZSBtaW4gY29sIHBhdHRlcm4gQCBtaW4gY29sIGFkciAqLwogCW1vdmwgICAgKCVlc2kpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCiAgICogd3JpdGUgcm93IDE0IHdyYXAgYWRyCiAgICovCi0gICAgICAgIG1vdmwgICAgJFJPVzE0X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIG1heCByb3cgKDE0KSB3cmFwIGFkZHIgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTRfREFUQSwgJWVheCAgICAgICAgLyogcGF0dGVybiBmb3IgbWF4IHN1cHBvcnRlZCByb3dzKDE0KSAqLworCW1vdmwgICAgJFJPVzE0X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIG1heCByb3cgKDE0KSB3cmFwIGFkZHIgKi8KKwltb3ZsICAgICRST1cxNF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciBtYXggc3VwcG9ydGVkIHJvd3MoMTQpICovCiAJbW92bCAgICAlZWF4LCAoJWVzaSkgICAgICAgICAgICAgLyogd3JpdGUgbWF4IHJvdyBwYXR0ZXJuIGF0IG1heCByb3cgYWRyICovCiAJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwotICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KLSAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAgLyoKICAgKiB3cml0ZSByb3cgMTMgd3JhcCBhZHIKICAgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTNfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTMgcm93IHdyYXAgYWRkcmVzcyAqLwotICAgICAgICBtb3ZsICAgICRST1cxM19EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMyByb3cgd3JhcCAqLworCW1vdmwgICAgJFJPVzEzX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEzIHJvdyB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRST1cxM19EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMyByb3cgd3JhcCAqLwogCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIDEzIHJvdyBwYXR0ZXJuIEAgMTMgcm93IHdyYXAgYWRyICovCiAJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwotICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KLSAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAgLyoKICAgKiB3cml0ZSByb3cgMTIgd3JhcCBhZHIKICAgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTJfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTIgcm93IHdyYXAgYWRkcmVzcyAqLwotICAgICAgICBtb3ZsICAgICRST1cxMl9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMiByb3cgd3JhcCAqLworCW1vdmwgICAgJFJPVzEyX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDEyIHJvdyB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRST1cxMl9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMiByb3cgd3JhcCAqLwogCW1vdmwgICAgJWVheCwgKCVlc2kpICAgICAgICAgICAgIC8qIHdyaXRlIDEyIHJvdyBwYXR0ZXJuIEAgMTIgcm93IHdyYXAgYWRyICovCiAJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwotICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KLSAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAgLyoKICAgKiB3cml0ZSByb3cgMTEgd3JhcCBhZHIKICAgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTFfQURSLCAlZWRpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTEgcm93IHdyYXAgYWRkcmVzcyAqLwotICAgICAgICBtb3ZsICAgICRST1cxMV9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMSByb3cgd3JhcCAqLworCW1vdmwgICAgJFJPVzExX0FEUiwgJWVkaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIDExIHJvdyB3cmFwIGFkZHJlc3MgKi8KKwltb3ZsICAgICRST1cxMV9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMSByb3cgd3JhcCAqLwogCW1vdmwgICAgJWVheCwgKCVlZGkpICAgICAgICAgICAgIC8qIHdyaXRlIDExIHJvdyBwYXR0ZXJuIEAgMTEgcm93IHdyYXAgYWRyICovCiAJbW92bCAgICAoJWVkaSksICVlYnggICAgICAgICAgICAgLyogb3B0aW9uYWwgcmVhZCAqLwotICAgICAgICBjbXBsICAgICVlYngsJWVheCAgICAgICAgICAgICAgICAvKiB0byB2ZXJpZnkgd3JpdGUgKi8KLSAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCisJY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogdGhpcyByYW0gaXMgYmFkICovCiAgLyoKICAgKiB3cml0ZSByb3cgMTAgd3JhcCBhZHIgLS0tIHRoaXMgd3JpdGUgaXMgcmVhbGx5IHRvIGRldGVybWluZSBudW1iZXIgb2YgYmFua3MKICAgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTBfQURSLCAlZWRpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTAgcm93IHdyYXAgYWRkcmVzcyAqLwotICAgICAgICBtb3ZsICAgICRST1cxMF9EQVRBLCAlZWF4ICAgICAgICAvKiBwYXR0ZXJuIGZvciAxMCByb3cgd3JhcCAoQUEpICovCisJbW92bCAgICAkUk9XMTBfQURSLCAlZWRpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gMTAgcm93IHdyYXAgYWRkcmVzcyAqLworCW1vdmwgICAgJFJPVzEwX0RBVEEsICVlYXggICAgICAgIC8qIHBhdHRlcm4gZm9yIDEwIHJvdyB3cmFwIChBQSkgKi8KIAltb3ZsICAgICVlYXgsICglZWRpKSAgICAgICAgICAgICAvKiB3cml0ZSAxMCByb3cgcGF0dGVybiBAIDEwIHJvdyB3cmFwIGFkciAqLwogCW1vdmwgICAgKCVlZGkpLCAlZWJ4ICAgICAgICAgICAgIC8qIG9wdGlvbmFsIHJlYWQgKi8KLSAgICAgICAgY21wbCAgICAlZWJ4LCVlYXggICAgICAgICAgICAgICAgLyogdG8gdmVyaWZ5IHdyaXRlICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIHRvIHZlcmlmeSB3cml0ZSAqLworCWpueiAgICAgYmFkX3JhbSAgICAgICAgICAgICAgICAgIC8qIHRoaXMgcmFtIGlzIGJhZCAqLwogIC8qCi0gICogcmVhZCBkYXRhIEAgcm93IDEyIHdyYXAgYWRyIHRvIGRldGVybWluZSAgKiBiYW5rcywgCisgICogcmVhZCBkYXRhIEAgcm93IDEyIHdyYXAgYWRyIHRvIGRldGVybWluZSAgKiBiYW5rcywKICAgKiBhbmQgcmVhZCBkYXRhIEAgcm93IDE0IHdyYXAgYWRyIHRvIGRldGVybWluZSAgKiByb3dzLgogICAqIGlmIGRhdGEgQCByb3cgMTIgd3JhcCBhZHIgaXMgbm90IEFBLCAxMSBvciAxMiB3ZSBoYXZlIGJhZCBSQU0uCi0gICogaWYgZGF0YSBAIHJvdyAxMiB3cmFwID09IEFBLCB3ZSBvbmx5IGhhdmUgMiBiYW5rcywgTk9UIDQgCisgICogaWYgZGF0YSBAIHJvdyAxMiB3cmFwID09IEFBLCB3ZSBvbmx5IGhhdmUgMiBiYW5rcywgTk9UIDQKICAgKiBpZiBkYXRhIEAgcm93IDEyIHdyYXAgPT0gMTEgb3IgMTIsIHdlIGhhdmUgNCBiYW5rcywKICAgKi8KLSAgICAgICAgeG9ydyAgICAlZGksJWRpICAgICAgICAgICAgICAgICAgLyogdmFsdWUgZm9yIDIgYmFua3MgaW4gREkgKi8KLQltb3ZsICAgICglZXNpKSwgJWVieCAgICAgICAgICAgICAvKiByZWFkIGZyb20gMTIgcm93IHdyYXAgdG8gY2hlY2sgYmFua3MgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIChlc2kgaXMgc2V0dXAgZnJvbSB0aGUgd3JpdGUgdG8gcm93IDEyIHdyYXApICovCi0gICAgICAgIGNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBBQSBwYXR0ZXJuICAoZWF4IGhvbGRzIHRoZSBhYSBwYXR0ZXJuKSAqLwotICAgICAgICBqeiAgICAgIG9ubHkyICAgICAgICAgICAgICAgICAgICAvKiBpZiBwYXR0ZXJuID09IEFBLCB3ZSBvbmx5IGhhdmUgMiBiYW5rcyAqLworCXhvcncgICAgJWRpLCVkaSAgICAgICAgICAgICAgICAgIC8qIHZhbHVlIGZvciAyIGJhbmtzIGluIERJICovCisJbW92bCAgICAoJWVzaSksICVlYnggICAgICAgICAgICAgLyogcmVhZCBmcm9tIDEyIHJvdyB3cmFwIHRvIGNoZWNrIGJhbmtzCisJCQkJCSAgKiAoZXNpIGlzIHNldHVwIGZyb20gdGhlIHdyaXRlIHRvIHJvdyAxMiB3cmFwKSAqLworCWNtcGwgICAgJWVieCwlZWF4ICAgICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBBQSBwYXR0ZXJuICAoZWF4IGhvbGRzIHRoZSBhYSBwYXR0ZXJuKSAqLworCWp6ICAgICAgb25seTIgICAgICAgICAgICAgICAgICAgIC8qIGlmIHBhdHRlcm4gPT0gQUEsIHdlIG9ubHkgaGF2ZSAyIGJhbmtzICovCiAKIAkvKiA0IGJhbmtzICovCi0JCi0gICAgICAgIG1vdncgICAgJDgsJWRpICAgICAgICAgICAgICAgICAgIC8qIHZhbHVlIGZvciA0IGJhbmtzIGluIERJIChCTktfQ05UIGJpdCkgKi8KLSAgICAgICAgY21wbCAgICAkUk9XMTFfREFUQSwgJWVieCAgICAgICAgLyogb25seSBvdGhlciBsZWdpdGltYXRlIHZhbHVlcyBhcmUgMTEgKi8KLSAgICAgICAganogICAgICBvbmx5MgotICAgICAgICBjbXBsICAgICRST1cxMl9EQVRBLCAlZWJ4ICAgICAgICAvKiBhbmQgMTIgKi8KLSAgICAgICAgam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogaXRzIGJhZCBpZiBub3QgMTEgb3IgMTIhICovCi0JCisKKwltb3Z3ICAgICQ4LCVkaSAgICAgICAgICAgICAgICAgICAvKiB2YWx1ZSBmb3IgNCBiYW5rcyBpbiBESSAoQk5LX0NOVCBiaXQpICovCisJY21wbCAgICAkUk9XMTFfREFUQSwgJWVieCAgICAgICAgLyogb25seSBvdGhlciBsZWdpdGltYXRlIHZhbHVlcyBhcmUgMTEgKi8KKwlqeiAgICAgIG9ubHkyCisJY21wbCAgICAkUk9XMTJfREFUQSwgJWVieCAgICAgICAgLyogYW5kIDEyICovCisJam56ICAgICBiYWRfcmFtICAgICAgICAgICAgICAgICAgLyogaXRzIGJhZCBpZiBub3QgMTEgb3IgMTIhICovCisKIAkvKiBmYWxsIHRocm91Z2ggKi8KLW9ubHkyOiAKK29ubHkyOgogIC8qCiAgICogdmFsaWRhdGUgcm93IG1hc2sKICAgKi8KLSAgICAgICAgbW92bCAgICAkUk9XMTRfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgYmFjayB0byBtYXggcm93IHdyYXAgYWRkciAqLworCW1vdmwgICAgJFJPVzE0X0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIGJhY2sgdG8gbWF4IHJvdyB3cmFwIGFkZHIgKi8KIAltb3ZsICAgICglZXNpKSwgJWVheCAgICAgICAgICAgICAvKiByZWFkIGFjdHVhbCBudW1iZXIgb2Ygcm93cyBAIHJvdzE0IGFkciAqLwogCi0gICAgICAgIGNtcGwgICAgJFJPVzExX0RBVEEsICVlYXggICAgICAgIC8qIHJvdyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxMSBwYXR0ZXJuICovCi0gICAgICAgIGpiICAgICAgYmFkX3JhbQorCWNtcGwgICAgJFJPVzExX0RBVEEsICVlYXggICAgICAgIC8qIHJvdyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxMSBwYXR0ZXJuICovCisJamIgICAgICBiYWRfcmFtCiAKLSAgICAgICAgY21wbCAgICAkUk9XMTRfREFUQSwgJWVheCAgICAgICAgLyogYW5kIHJvdyBtdXN0IGJlIGxlc3MgdGhhbiAxNCBwYXR0ZXJuICovCi0gICAgICAgIGphICAgICAgYmFkX3JhbQorCWNtcGwgICAgJFJPVzE0X0RBVEEsICVlYXggICAgICAgIC8qIGFuZCByb3cgbXVzdCBiZSBsZXNzIHRoYW4gMTQgcGF0dGVybiAqLworCWphICAgICAgYmFkX3JhbQogCi0gICAgICAgIGNtcGIgICAgJWFoLCVhbCAgICAgICAgICAgICAgICAgIC8qIHZlcmlmeSBhbGwgNCBieXRlcyBvZiBkd29yZCBzYW1lICovCi0gICAgICAgIGpueiAgICAgYmFkX3JhbQotICAgICAgICBtb3ZsICAgICVlYXgsJWVieAotICAgICAgICBzaHJsICAgICQxNiwlZWJ4Ci0gICAgICAgIGNtcHcgICAgJWJ4LCVheAotICAgICAgICBqbnogICAgIGJhZF9yYW0KKwljbXBiICAgICVhaCwlYWwgICAgICAgICAgICAgICAgICAvKiB2ZXJpZnkgYWxsIDQgYnl0ZXMgb2YgZHdvcmQgc2FtZSAqLworCWpueiAgICAgYmFkX3JhbQorCW1vdmwgICAgJWVheCwlZWJ4CisJc2hybCAgICAkMTYsJWVieAorCWNtcHcgICAgJWJ4LCVheAorCWpueiAgICAgYmFkX3JhbQogIC8qCiAgICogcmVhZCBjb2wgMTEgd3JhcCBhZHIgZm9yIHJlYWwgY29sdW1uIGRhdGEgdmFsdWUKICAgKi8KLSAgICAgICAgbW92bCAgICAkQ09MMTFfQURSLCAlZXNpICAgICAgICAgLyogc2V0IGFkZHJlc3MgdG8gbWF4IGNvbCAoMTEpIHdyYXAgYWRkciAqLworCW1vdmwgICAgJENPTDExX0FEUiwgJWVzaSAgICAgICAgIC8qIHNldCBhZGRyZXNzIHRvIG1heCBjb2wgKDExKSB3cmFwIGFkZHIgKi8KIAltb3ZsICAgICglZXNpKSwgJWVheCAgICAgICAgICAgICAvKiByZWFkIHJlYWwgY29sIG51bWJlciBhdCBtYXggY29sIGFkciAqLwogIC8qCiAgICogdmFsaWRhdGUgY29sdW1uIGRhdGEKICAgKi8KLSAgICAgICAgY21wbCAgICAkQ09MMDhfREFUQSwgJWVheCAgICAgICAgLyogY29sIG11c3QgYmUgZ3JlYXRlciB0aGFuIDggcGF0dGVybiAqLwotICAgICAgICBqYiAgICAgIGJhZF9yYW0KKwljbXBsICAgICRDT0wwOF9EQVRBLCAlZWF4ICAgICAgICAvKiBjb2wgbXVzdCBiZSBncmVhdGVyIHRoYW4gOCBwYXR0ZXJuICovCisJamIgICAgICBiYWRfcmFtCiAKLSAgICAgICAgY21wbCAgICAkQ09MMTFfREFUQSwgJWVheCAgICAgICAgLyogYW5kIHJvdyBtdXN0IGJlIGxlc3MgdGhhbiAxMSBwYXR0ZXJuICovCi0gICAgICAgIGphICAgICAgYmFkX3JhbQorCWNtcGwgICAgJENPTDExX0RBVEEsICVlYXggICAgICAgIC8qIGFuZCByb3cgbXVzdCBiZSBsZXNzIHRoYW4gMTEgcGF0dGVybiAqLworCWphICAgICAgYmFkX3JhbQogCi0gICAgICAgIHN1YmwgICAgJENPTDA4X0RBVEEsICVlYXggICAgICAgIC8qIG5vcm1hbGl6ZSBjb2x1bW4gZGF0YSB0byB6ZXJvICovCi0gICAgICAgIGpjICAgICAgYmFkX3JhbQotICAgICAgICBjbXBiICAgICVhaCwlYWwgICAgICAgICAgICAgICAgICAvKiB2ZXJpZnkgYWxsIDQgYnl0ZXMgb2YgZHdvcmQgZXF1YWwgKi8KLSAgICAgICAgam56ICAgICBiYWRfcmFtCi0gICAgICAgIG1vdmwgICAgJWVheCwlZWR4Ci0gICAgICAgIHNocmwgICAgJDE2LCVlZHgKLSAgICAgICAgY21wdyAgICAlZHgsJWF4Ci0gICAgICAgIGpueiAgICAgYmFkX3JhbQorCXN1YmwgICAgJENPTDA4X0RBVEEsICVlYXggICAgICAgIC8qIG5vcm1hbGl6ZSBjb2x1bW4gZGF0YSB0byB6ZXJvICovCisJamMgICAgICBiYWRfcmFtCisJY21wYiAgICAlYWgsJWFsICAgICAgICAgICAgICAgICAgLyogdmVyaWZ5IGFsbCA0IGJ5dGVzIG9mIGR3b3JkIGVxdWFsICovCisJam56ICAgICBiYWRfcmFtCisJbW92bCAgICAlZWF4LCVlZHgKKwlzaHJsICAgICQxNiwlZWR4CisJY21wdyAgICAlZHgsJWF4CisJam56ICAgICBiYWRfcmFtCiAgLyoKICAgKiBtZXJnZSBiYW5rIGFuZCBjb2wgZGF0YSB0b2dldGhlcgogICAqLwotICAgICAgICBhZGR3ICAgICVkaSwlZHggICAgICAgICAgICAgICAgICAvKiBtZXJnZSBvZiBiYW5rIGFuZCBjb2wgaW5mbyBpbiBkbCAqLworCWFkZHcgICAgJWRpLCVkeCAgICAgICAgICAgICAgICAgIC8qIG1lcmdlIG9mIGJhbmsgYW5kIGNvbCBpbmZvIGluIGRsICovCiAgLyoKICAgKiBmaXggZW5kaW5nIGFkZHIgbWFzayBiYXNlZCB1cG9uIGNvbCBpbmZvCiAgICovCi0gICAgICAgIG1vdmIgICAgJDMsJWFsCi0gICAgICAgIHN1YmIgICAgJWRoLCVhbCAgICAgICAgICAgICAgICAgIC8qIGRoIGNvbnRhaW5zIHRoZSBvdmVyZmxvdyBmcm9tIHRoZSBiYW5rL2NvbCBtZXJnZSAgKi8KLSAgICAgICAgbW92YiAgICAlYmwsJWRoICAgICAgICAgICAgICAgICAgLyogYmwgY29udGFpbnMgdGhlIHJvdyBtYXNrIChhYSwgMDcsIDBmLCAxZiBvciAzZikgKi8KLSAgICAgICAgeGNoZ3cgICAlY3gsJWF4ICAgICAgICAgICAgICAgICAgLyogY3ggPSBheCA9IDMgb3IgMiBkZXBlbmRpbmcgb24gMiBvciA0IGJhbmsgZGV2aWNlICovCi0gICAgICAgIHNocmIgICAgJWNsLCVkaAkgICAgICAgICAgICAgICAgIC8qICAqLwotICAgICAgICBpbmNiICAgICVkaCAgICAgICAgICAgICAgICAgICAgICAvKiBlbmRpbmcgYWRkciBpcyAxIGdyZWF0ZXIgdGhhbiByZWFsIGVuZCAqLwotICAgICAgICB4Y2hndyAgICVjeCwlYXggICAgICAgICAgICAgICAgICAvKiBjeCBpcyBiYW5rIG51bWJlciBhZ2FpbiAqLworCW1vdmIgICAgJDMsJWFsCisJc3ViYiAgICAlZGgsJWFsICAgICAgICAgICAgICAgICAgLyogZGggY29udGFpbnMgdGhlIG92ZXJmbG93IGZyb20gdGhlIGJhbmsvY29sIG1lcmdlICAqLworCW1vdmIgICAgJWJsLCVkaCAgICAgICAgICAgICAgICAgIC8qIGJsIGNvbnRhaW5zIHRoZSByb3cgbWFzayAoYWEsIDA3LCAwZiwgMWYgb3IgM2YpICovCisJeGNoZ3cgICAlY3gsJWF4ICAgICAgICAgICAgICAgICAgLyogY3ggPSBheCA9IDMgb3IgMiBkZXBlbmRpbmcgb24gMiBvciA0IGJhbmsgZGV2aWNlICovCisJc2hyYiAgICAlY2wsJWRoCSAgICAgICAgICAgICAgICAgLyogICovCisJaW5jYiAgICAlZGggICAgICAgICAgICAgICAgICAgICAgLyogZW5kaW5nIGFkZHIgaXMgMSBncmVhdGVyIHRoYW4gcmVhbCBlbmQgKi8KKwl4Y2hndyAgICVjeCwlYXggICAgICAgICAgICAgICAgICAvKiBjeCBpcyBiYW5rIG51bWJlciBhZ2FpbiAqLwogIC8qCiAgICogaXNzdWUgYWxsIGJhbmtzIHByZWNoYXJnZQogICAqLwotYmFkX3JlaW50OiAKLSAgICAgICAgbW92bCAgICAkRFJDQ1RMLCAlZXNpICAgICAgICAgICAgLyogc2V0dXAgRFJBTSBjb250cm9sIHJlZ2lzdGVyIHdpdGggKi8KLSAgICAgICAgbW92YiAgICAkMHgyLCVhbCAgICAgICAgICAgICAgICAgLyogQWxsIGJhbmtzIHByZWNoYXJnZSAqLworYmFkX3JlaW50OgorCW1vdmwgICAgJERSQ0NUTCwgJWVzaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCisJbW92YiAgICAkMHgyLCVhbCAgICAgICAgICAgICAgICAgLyogQWxsIGJhbmtzIHByZWNoYXJnZSAqLwogCW1vdmIgICAgICVhbCwgKCVlc2kpCi0gICAgICAgIG1vdmwgICAgJENBQ0hFTElORVNaLCAlZXNpICAgICAgIC8qIGFkZHJlc3MgdG8gaW5pdCByZWFkIGJ1ZmZlciAqLworCW1vdmwgICAgJENBQ0hFTElORVNaLCAlZXNpICAgICAgIC8qIGFkZHJlc3MgdG8gaW5pdCByZWFkIGJ1ZmZlciAqLwogCW1vdncgICAgICVheCwgKCVlc2kpCiAKICAvKgogICAqIHVwZGF0ZSBFTkRJTkcgQUREUkVTUyBSRUdJU1RFUgogICAqLwotICAgICAgICBtb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICovCi0gICAgICAgIG1vdmwgICAgJWVjeCwlZWJ4CisJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLworCW1vdmwgICAgJWVjeCwlZWJ4CiAJYWRkbAklZWJ4LCAlZWRpCiAJbW92YiAgICAlZGgsICglZWRpKQogIC8qCiAgICogdXBkYXRlIENPTkZJRyBSRUdJU1RFUgogICAqLwotICAgICAgICB4b3JiICAgICVkaCwlZGgKLSAgICAgICAgbW92dyAgICAkMHgwMGYsJWJ4Ci0gICAgICAgIG1vdncgICAgJWN4LCVheAotICAgICAgICBzaGx3ICAgICQyLCVheAotICAgICAgICB4Y2hndyAgICVjeCwlYXgKLSAgICAgICAgc2hsdyAgICAlY2wsJWR4Ci0gICAgICAgIHNobHcgICAgJWNsLCVieAotICAgICAgICBub3R3ICAgICVieAotICAgICAgICB4Y2hndyAgICVjeCwlYXgKLSAgICAgICAgbW92bCAgICAkRFJDQ0ZHLCAlZWRpCisJeG9yYiAgICAlZGgsJWRoCisJbW92dyAgICAkMHgwMGYsJWJ4CisJbW92dyAgICAlY3gsJWF4CisJc2hsdyAgICAkMiwlYXgKKwl4Y2hndyAgICVjeCwlYXgKKwlzaGx3ICAgICVjbCwlZHgKKwlzaGx3ICAgICVjbCwlYngKKwlub3R3ICAgICVieAorCXhjaGd3ICAgJWN4LCVheAorCW1vdmwgICAgJERSQ0NGRywgJWVkaQogCW1vdiAgICAgKCVlZGkpLCAlYXgKLSAgICAgICAgYW5kdyAgICAlYngsJWF4Ci0gICAgICAgIG9ydyAgICAgJWR4LCVheAorCWFuZHcgICAgJWJ4LCVheAorCW9ydyAgICAgJWR4LCVheAogCW1vdncgICAgJWF4LCAoJWVkaSkKLSAgICAgICAgamN4eiAgICBjbGVhbnVwCisJamN4eiAgICBjbGVhbnVwCiAKLSAgICAgICAgZGVjdyAgICAlY3gKLSAgICAgICAgbW92bCAgICAlZWN4LCVlYngKLSAgICAgICAgbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAqLwotICAgICAgICBtb3ZiICAgICQweGZmLCVhbAorCWRlY3cgICAgJWN4CisJbW92bCAgICAlZWN4LCVlYngKKwltb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICovCisJbW92YiAgICAkMHhmZiwlYWwKIAlhZGRsCSVlYngsICVlZGkKIAltb3ZiICAgICVhbCwgKCVlZGkpCiAgLyoKLSAgKiBzZXQgY29udHJvbCByZWdpc3RlciB0byBOT1JNQUwgbW9kZSAKKyAgKiBzZXQgY29udHJvbCByZWdpc3RlciB0byBOT1JNQUwgbW9kZQogICAqLwotICAgICAgICBtb3ZsICAgICREUkNDVEwsICVlc2kgICAgICAgICAgICAvKiBzZXR1cCBEUkFNIGNvbnRyb2wgcmVnaXN0ZXIgd2l0aCAqLwotICAgICAgICBtb3ZiICAgICQweDAsJWFsICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgbW9kZSB2YWx1ZSAqLworCW1vdmwgICAgJERSQ0NUTCwgJWVzaSAgICAgICAgICAgIC8qIHNldHVwIERSQU0gY29udHJvbCByZWdpc3RlciB3aXRoICovCisJbW92YiAgICAkMHgwLCVhbCAgICAgICAgICAgICAgICAgLyogTm9ybWFsIG1vZGUgdmFsdWUgKi8KIAltb3ZiICAgICVhbCwgKCVlc2kpCi0gICAgICAgIG1vdmwgICAgJENBQ0hFTElORVNaLCAlZXNpICAgICAgIC8qIGFkZHJlc3MgdG8gaW5pdCByZWFkIGJ1ZmZlciAqLworCW1vdmwgICAgJENBQ0hFTElORVNaLCAlZXNpICAgICAgIC8qIGFkZHJlc3MgdG8gaW5pdCByZWFkIGJ1ZmZlciAqLwogCW1vdncgICAgJWF4LCAoJWVzaSkKLSAgICAgICAgam1wICAgICBuZXh0YmFuaworCWptcCAgICAgbmV4dGJhbmsKIAotY2xlYW51cDogCi0gICAgICAgIG1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgICovCi0gICAgICAgIG1vdncgICAgJDQsJWN4Ci0gICAgICAgIHhvcncgICAgJWF4LCVheAotY2xlYW51cGxwOiAKK2NsZWFudXA6CisJbW92bCAgICAkRFJDQkVOREFEUiwgJWVkaSAgICAgICAgLyogRFJBTSBlbmRpbmcgYWRkcmVzcyByZWdpc3RlciAgKi8KKwltb3Z3ICAgICQ0LCVjeAorCXhvcncgICAgJWF4LCVheAorY2xlYW51cGxwOgogCW1vdmIgICAoJWVkaSksICVhbAotICAgICAgICBvcmIgICAgICVhbCwlYWwKLSAgICAgICAganogICAgICBlbXB0eWJhbmsKKwlvcmIgICAgICVhbCwlYWwKKwlqeiAgICAgIGVtcHR5YmFuawogCi0gICAgICAgIGFkZGIgICAgJWFoLCVhbAotICAgICAgICBqbnMgICAgIG5vdHRvb211Y2gKKwlhZGRiICAgICVhaCwlYWwKKwlqbnMgICAgIG5vdHRvb211Y2gKIAotICAgICAgICBtb3ZiICAgICQweDdmLCVhbAotbm90dG9vbXVjaDogCi0gICAgICAgIG1vdmIgICAgJWFsLCVhaAotICAgICAgICBvcmIgICAgICQweDgwLCVhbAorCW1vdmIgICAgJDB4N2YsJWFsCitub3R0b29tdWNoOgorCW1vdmIgICAgJWFsLCVhaAorCW9yYiAgICAgJDB4ODAsJWFsCiAJbW92YiAgICAlYWwsICglZWRpKQotZW1wdHliYW5rOiAKLSAgICAgICAgaW5jbCAgICAlZWRpCi0gICAgICAgIGxvb3AgICAgY2xlYW51cGxwCitlbXB0eWJhbms6CisJaW5jbCAgICAlZWRpCisJbG9vcCAgICBjbGVhbnVwbHAKIAogI2lmIGRlZmluZWQoQ0ZHX1NEUkFNX0NBU19MQVRFTkNZXzJUKSB8fCBkZWZpbmVkKENGR19TRFJBTV9DQVNfTEFURU5DWV8zVCkKIAkvKiBzZXQgdGhlIENBUyBsYXRlbmN5IG5vdyBzaW5jZSBpdCBpcyBoYXJkIHRvIGRvCiAJICogd2hlbiB3ZSBydW4gZnJvbSB0aGUgUkFNICovCiAJbW92bCAgICAkRFJDVE1DVEwsICVlZGkgICAgICAgICAgLyogRFJBTSB0aW1pbmcgcmVnaXN0ZXIgKi8KLQltb3ZiICAgICglZWRpKSwgJWFsCQorCW1vdmIgICAgKCVlZGkpLCAlYWwKICNpZmRlZiBDRkdfU0RSQU1fQ0FTX0xBVEVOQ1lfMlQKIAlhbmRiICAgICQweGVmLCAlYWwKICNlbmRpZgogI2lmZGVmIENGR19TRFJBTV9DQVNfTEFURU5DWV8zVAogCW9yYiAgICAgJDB4MTAsICVhbAotI2VuZGlmCSAKKyNlbmRpZgogCW1vdmIgICAgJWFsLCAoJWVkaSkKICNlbmRpZgotICAgICAgICBtb3ZsICAgICREUkNDVEwsICVlZGkgICAgICAgICAgICAvKiBEUkFNIENvbnRyb2wgcmVnaXN0ZXIgKi8KLSAgICAgICAgbW92YiAgICAkMHgzLCVhbCAgICAgICAgICAgICAgICAgLyogTG9hZCBtb2RlIHJlZ2lzdGVyIGNtZCAqLworCW1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIERSQU0gQ29udHJvbCByZWdpc3RlciAqLworCW1vdmIgICAgJDB4MywlYWwgICAgICAgICAgICAgICAgIC8qIExvYWQgbW9kZSByZWdpc3RlciBjbWQgKi8KIAltb3ZiICAgICAlYWwsICglZWRpKQogCW1vdncgICAgICVheCwgKCVlc2kpCiAKIAotICAgICAgICBtb3ZsICAgICREUkNDVEwsICVlZGkgICAgICAgICAgICAvKiBEUkFNIENvbnRyb2wgcmVnaXN0ZXIgKi8KLSAgICAgICAgbW92YiAgICAkMHgxOCwlYWwgICAgICAgICAgICAgICAgLyogIEVuYWJsZSByZWZyZXNoIGFuZCBOT1JNQUwgbW9kZSAqLworCW1vdmwgICAgJERSQ0NUTCwgJWVkaSAgICAgICAgICAgIC8qIERSQU0gQ29udHJvbCByZWdpc3RlciAqLworCW1vdmIgICAgJDB4MTgsJWFsICAgICAgICAgICAgICAgIC8qICBFbmFibGUgcmVmcmVzaCBhbmQgTk9STUFMIG1vZGUgKi8KIAltb3ZiICAgICVhbCwgKCVlZGkpCiAKLSAgICAgICAgam1wICAgICBkcmFtX2RvbmUKKwlqbXAgICAgIGRyYW1fZG9uZQogCi1iYWRfcmFtOiAKLSAgICAgICAgeG9ybCAgICAlZWR4LCVlZHgKLSAgICAgICAgeG9ybCAgICAlZWRpLCVlZGkKLSAgICAgICAgam1wICAgICBiYWRfcmVpbnQKK2JhZF9yYW06CisJeG9ybCAgICAlZWR4LCVlZHgKKwl4b3JsICAgICVlZGksJWVkaQorCWptcCAgICAgYmFkX3JlaW50CiAKLWRyYW1fZG9uZTogCi0JCitkcmFtX2RvbmU6CisKIAkvKiByZWFkYmFjayBEUkNCRU5EQURSIGFuZCByZXR1cm4gdGhlIG51bWJlcgotCSAqIG9mIGF2YWlsYWJsZSByYW0gYnl0ZXMgaW4gJWVheCAqLyAKKwkgKiBvZiBhdmFpbGFibGUgcmFtIGJ5dGVzIGluICVlYXggKi8KIAotICAgICAgICBtb3ZsICAgICREUkNCRU5EQURSLCAlZWRpICAgICAgICAvKiBEUkFNIGVuZGluZyBhZGRyZXNzIHJlZ2lzdGVyICAqLwotCQorCW1vdmwgICAgJERSQ0JFTkRBRFIsICVlZGkgICAgICAgIC8qIERSQU0gZW5kaW5nIGFkZHJlc3MgcmVnaXN0ZXIgICovCisKIAltb3ZsCSglZWRpKSwgJWVheAogCW1vdmwJJWVheCwgJWVjeAogCWFuZGwJJDB4ODAwMDAwMDAsICVlY3gKIAlqegliYW5rMgogCWFuZGwJJDB4N2YwMDAwMDAsICVlYXgKLQlzaHJsCSQyLCAlZWF4IAorCXNocmwJJDIsICVlYXgKIAltb3ZsCSVlYXgsICVlYngKIAogYmFuazI6IAltb3ZsCSglZWRpKSwgJWVheApAQCAtNTA5LDcgKzUwOSw3IEBACiAJYW5kbAkkMHgwMDgwMDAwMCwgJWVjeAogCWp6CWJhbmsxCiAJYW5kbAkkMHgwMDdmMDAwMCwgJWVheAotCXNobGwJJDYsICVlYXggCisJc2hsbAkkNiwgJWVheAogCW1vdmwJJWVheCwgJWVieAogCiBiYW5rMTogCW1vdmwJKCVlZGkpLCAlZWF4CkBAIC01MTcsNyArNTE3LDcgQEAKIAlhbmRsCSQweDAwMDA4MDAwLCAlZWN4CiAJanoJYmFuazAKIAlhbmRsCSQweDAwMDA3ZjAwLCAlZWF4Ci0Jc2hsbAkkMTQsICVlYXggCisJc2hsbAkkMTQsICVlYXgKIAltb3ZsCSVlYXgsICVlYngKIAogYmFuazA6IAltb3ZsCSglZWRpKSwgJWVheApAQCAtNTI1LDcgKzUyNSw3IEBACiAJYW5kbAkkMHgwMDAwMDA4MCwgJWVjeAogCWp6CWRvbmUKIAlhbmRsCSQweDAwMDAwMDdmLCAlZWF4Ci0Jc2hsbAkkMjIsICVlYXggCisJc2hsbAkkMjIsICVlYXgKIAltb3ZsCSVlYXgsICVlYngKIAogZG9uZToJbW92bAklZWJ4LCAlZWF4CmRpZmYgLS1naXQgYS9jcHUvaTM4Ni9zZXJpYWwuYyBiL2NwdS9pMzg2L3NlcmlhbC5jCmluZGV4IDIyYzNjMmEuLmY1OGI0N2MgMTAwNjQ0Ci0tLSBhL2NwdS9pMzg2L3NlcmlhbC5jCisrKyBiL2NwdS9pMzg2L3NlcmlhbC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlCi0gKiAKKyAqCiAgKiAoQykgQ29weXJpZ2h0IDIwMDAKICAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCiAgKgpAQCAtODEsNyArODEsNiBAQAogI2RlZmluZSBhc3luY0xTUlJ4Rmlmb0Vycm9yMSAgICAgICAgICAweDgwCiAKIAotCiAjaWYgQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICB8IEZpZm8KQEAgLTEwMCw3ICs5OSw3IEBACiAKIHN0YXRpYyBpbnQgc2VyaWFsX2RpdihpbnQgYmF1ZHJhdGUpCiB7Ci0JCisKIAlzd2l0Y2ggKGJhdWRyYXRlKSB7CiAJY2FzZSAxMjAwOgogCQlyZXR1cm4gOTY7CkBAIC0xMTMsOSArMTEyLDkgQEAKIAljYXNlIDU3NjAwOgogCQlyZXR1cm4gMjsKIAljYXNlIDExNTIwMDoKLQkJcmV0dXJuIDE7CQkKKwkJcmV0dXJuIDE7CiAJfQotCQorCiAJcmV0dXJuIDEyOwogfQogCkBAIC0xMzIsNyArMTMxLDcgQEAKIAl2b2xhdGlsZSBjaGFyIHZhbDsKIAogCWludCBiZGl2ID0gc2VyaWFsX2RpdihnZC0+YmF1ZHJhdGUpOwotICAgIAorCiAKIAlvdXRiKDB4ODAsIFVBUlQwX0JBU0UgKyBVQVJUX0xDUik7CS8qIHNldCBETEFCIGJpdCAqLwogCW91dGIoYmRpdiwgVUFSVDBfQkFTRSArIFVBUlRfRExMKTsJLyogc2V0IGJhdWRyYXRlIGRpdmlzb3IgKi8KQEAgLTE1NCw3ICsxNTMsNyBAQAogCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCiAJdW5zaWduZWQgc2hvcnQgYmRpdjsKLQkKKwogCWJkaXYgPSBzZXJpYWxfZGl2KGdkLT5iYXVkcmF0ZSk7CiAKIAlvdXRiKDB4ODAsIFVBUlQwX0JBU0UgKyBVQVJUX0xDUik7CS8qIHNldCBETEFCIGJpdCAqLwpAQCAtMTk5LDcgKzE5OCw3IEBACiAJCXJldHVybiBzZXJpYWxfYnVmZmVyZWRfZ2V0YygpOwogCX0KICNlbmRpZgotCQorCiAJd2hpbGUgKDEpIHsKICNpZiBkZWZpbmVkKENPTkZJR19IV19XQVRDSERPRykKIAkJV0FUQ0hET0dfUkVTRVQoKTsJLyogUmVzZXQgSFcgV2F0Y2hkb2csIGlmIG5lZWRlZCAqLwpAQCAtMjYyLDI4ICsyNjEsMjggQEAKIAl9IGVsc2UgewogCQlzcGFjZSA9IGJ1Zl9pbmZvLnJ4X2dldCAtIHJ4X3B1dDsKIAl9Ci0JCisKIAl3aGlsZSAoaW5iKFVBUlQwX0JBU0UgKyBVQVJUX0xTUikgJiAxKSB7CiAJCWMgPSBpbmIoVUFSVDBfQkFTRSk7CiAJCWlmIChzcGFjZSkgewogCQkJYnVmX2luZm8ucnhfYnVmZmVyW3J4X3B1dCsrXSA9IGM7CiAJCQlzcGFjZS0tOwotCQkJCisKIAkJCWlmIChyeF9wdXQgPT0gYnVmX2luZm8ucnhfZ2V0KSB7CiAJCQkJYnVmX2luZm8ucnhfZ2V0Kys7CiAJCQkJaWYgKHJ4X3B1dCA9PSBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8pIHsKIAkJCQkJYnVmX2luZm8ucnhfZ2V0ID0gMDsKIAkJCQl9CiAJCQl9Ci0JCQkKKwogCQkJaWYgKHJ4X3B1dCA9PSBDT05GSUdfU0VSSUFMX1NPRlRXQVJFX0ZJRk8pIHsKIAkJCQlyeF9wdXQgPSAwOwogCQkJCWlmICgwID09IGJ1Zl9pbmZvLnJ4X2dldCkgewogCQkJCQlidWZfaW5mby5yeF9nZXQgPSAxOwogCQkJCX0KLQkJCQorCiAJCQl9Ci0JCQkKKwogCQl9CiAJCWlmIChzcGFjZSA8IENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyAvIDQpIHsKIAkJCS8qIFN0b3AgZmxvdyBieSBzZXR0aW5nIFJUUyBpbmFjdGl2ZSAqLwpAQCAtMzA5LDIwICszMDgsMjAgQEAKIAkJYnVmX2luZm8uY3RzID0gMDsKIAl9CiAKLQlpcnFfaW5zdGFsbF9oYW5kbGVyICggVkVDTlVNX1UwIC8qVUFSVDAgKi8vKmludCB2ZWMgKi8gLAorCWlycV9pbnN0YWxsX2hhbmRsZXIgKCBWRUNOVU1fVTAgLypVQVJUMCAqLyAvKmludCB2ZWMgKi8gLAogCQkJICAgICAgc2VyaWFsX2lzciAvKmludGVycnVwdF9oYW5kbGVyX3QgKmhhbmRsZXIgKi8gLAogCQkJICAgICAgKHZvaWQgKikgJmJ1Zl9pbmZvIC8qdm9pZCAqYXJnICovICk7CiAKIAkvKiBFbmFibGUgIlJYIERhdGEgQXZhaWxhYmxlIiBJbnRlcnJ1cHQgb24gVUFSVCAqLwogCS8qIG91dGIoaW5iKFVBUlQwX0JBU0UgKyBVQVJUX0lFUikgfDB4MDEsIFVBUlQwX0JBU0UgKyBVQVJUX0lFUik7ICovCiAJb3V0YigweDAxLCBVQVJUMF9CQVNFICsgVUFSVF9JRVIpOwotCQorCiAJLyogU2V0IERUUiBhbmQgUlRTIGFjdGl2ZSwgZW5hYmxlIGludGVycnVwdHMgICovCiAJb3V0YihpbmIgKFVBUlQwX0JBU0UgKyBVQVJUX01DUikgfCAweDBiLCBVQVJUMF9CQVNFICsgVUFSVF9NQ1IpOwotCQorCiAJLyogU2V0dXAgVUFSVCBGSUZPOiBSWCB0cmlnZ2VyIGxldmVsOiAxIGJ5dGUsIEVuYWJsZSBGSUZPICovCiAJb3V0YiggLyooMSA8PCA2KSB8Ki8gIDEsIFVBUlQwX0JBU0UgKyBVQVJUX0ZDUik7Ci0JCisKIAlzZXJpYWxfYnVmZmVyX2FjdGl2ZSA9IDE7CiB9CiAKQEAgLTM0OCw3ICszNDcsNyBAQAogCQkJYnVmX2luZm8uY3RzID0gMTsKIAkJfQogCX0KLQkJCisKICNlbmRpZgogCXNlcmlhbF9wdXRjIChjKTsKIH0KQEAgLTUwOCw0ICs1MDcsMyBAQAogfQogI2VuZGlmCS8qIChDT05GSUdfS0dEQl9TRVJfSU5ERVggJiAyKSAqLwogI2VuZGlmCS8qIENGR19DTURfS0dEQiAqLwotCmRpZmYgLS1naXQgYS9jcHUvaTM4Ni9zdGFydC5TIGIvY3B1L2kzODYvc3RhcnQuUwppbmRleCAwMjU1NTVjLi5hZmNiYjI0IDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9zdGFydC5TCisrKyBiL2NwdS9pMzg2L3N0YXJ0LlMKQEAgLTEsNSArMSw1IEBACiAvKgotICogIFUtYm9vdCAtIGkzODYgU3RhcnR1cCBDb2RlIAorICogIFUtYm9vdCAtIGkzODYgU3RhcnR1cCBDb2RlCiAgKgogICogIENvcHlyaWdodCAoYykgMjAwMglPbWljcm9uIENldGkgQUIsIERhbmllbCBFbmdzdHL2bSA8ZGVuYWllbEBvbWljcm9uLnNlPgogICoKQEAgLTI2LDcxICsyNiw3MSBAQAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1ZGUgPHZlcnNpb24uaD4KIAotCQorCiAuc2VjdGlvbiAudGV4dAogLmNvZGUzMgogLmdsb2JsIF9zdGFydAotLnR5cGUgX3N0YXJ0LCBAZnVuY3Rpb24JCisudHlwZSBfc3RhcnQsIEBmdW5jdGlvbgogLmdsb2JsIF9pMzg2Ym9vdF9zdGFydAogX2kzODZib290X3N0YXJ0OgotX3N0YXJ0OgkJCi0gICAgICAgIG1vdmwgICAgJDB4MTgsJWVheCAgICAgICAgIAkvKiBMb2FkIG91ciBzZWdlbWVudCByZWdpc3RlcywgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZ2R0IGhhdmUgYWxyZWFkeSBiZWVuIGxvYWRlZCBieSBzdGFydDE2LlMgKi8KLSAgICAgICAgbW92dyAgICAlYXgsJWZzCitfc3RhcnQ6CisJbW92bCAgICAkMHgxOCwlZWF4ICAgICAgICAgCS8qIExvYWQgb3VyIHNlZ2VtZW50IHJlZ2lzdGVzLCB0aGUKKwkJCQkJICogZ2R0IGhhdmUgYWxyZWFkeSBiZWVuIGxvYWRlZCBieSBzdGFydDE2LlMgKi8KKwltb3Z3ICAgICVheCwlZnMKIAltb3Z3CSVheCwlZHMKLSAgICAgICAgbW92dyAgICAlYXgsJWdzCi0gICAgICAgIG1vdncgICAgJWF4LCVlcwotICAgICAgICBtb3Z3ICAgICVheCwlc3MKLQkKKwltb3Z3ICAgICVheCwlZ3MKKwltb3Z3ICAgICVheCwlZXMKKwltb3Z3ICAgICVheCwlc3MKKwogCS8qIFdlIGNhbGwgYSBmZXcgZnVuY3Rpb25zIGluIHRoZSBib2FyZCBzdXBwb3J0IHBhY2thZ2UKIAkgKiBzaW5jZSB3ZSBoYXZlIG5vIHN0YWNrIHlldCB3ZSdsbCBoYXZlIHRvIHVzZSAlZWJwCiAJICogdG8gc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzICovCi0JCisKIAkvKiBFYXJseSBwbGF0Zm9ybSBpbml0IChzZXR1cCBncGlvLCBldGMgKSAqLwogCW1vdiAgICAgJGVhcmx5X2JvYXJkX2luaXRfcmV0LCAlZWJwCiAJam1wCWVhcmx5X2JvYXJkX2luaXQKIGVhcmx5X2JvYXJkX2luaXRfcmV0OgotCQorCiAJLyogVGhlIF9fcG9ydDgwIGVudHJ5LXBvaW50IHNob3VsZCBiZSB1c2FiZSBieSBub3cgKi8KIAkvKiBzbyB3ZSB0cnkgdG8gaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDAxLCAlYXggICAgCisJbW92dwkkMHgwMSwgJWF4CiAJbW92bAkkLnByb2dyZXNzMCwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwotLnByb2dyZXNzMDogIAkKKy5wcm9ncmVzczA6CiAKIAkvKiBzaXplIG1lbW9yeSAqLwogCW1vdgkkbWVtX2luaXRfcmV0LCAlZWJwCi0Jam1wICAgICBtZW1faW5pdAkJCisJam1wICAgICBtZW1faW5pdAogbWVtX2luaXRfcmV0OgotCQotCS8qIGNoZWNrIGFtbW91bnQgb2YgY29uZmlndXJlZCBtZW1vcnkgCi0JICogKHdlIG5lZWQgYXRsZWFzdCBic3Mgc3RhcnQrYnNzIHNpemUrc3RhY2sgc2l6ZSkgKi8JCQorCisJLyogY2hlY2sgYW1tb3VudCBvZiBjb25maWd1cmVkIG1lbW9yeQorCSAqICh3ZSBuZWVkIGF0bGVhc3QgYnNzIHN0YXJ0K2JzcyBzaXplK3N0YWNrIHNpemUpICovCiAJbW92bAkkX2kzODZib290X2Jzc19zdGFydCwgJWVjeCAgICAgICAgLyogQlNTIHN0YXJ0ICovCi0JYWRkbAkkX2kzODZib290X2Jzc19zaXplLCAlZWN4ICAgICAgICAgLyogQlNTIHNpemUgKi8JCisJYWRkbAkkX2kzODZib290X2Jzc19zaXplLCAlZWN4ICAgICAgICAgLyogQlNTIHNpemUgKi8KIAlhZGRsCSRDRkdfU1RBQ0tfU0laRSwgJWVjeAotCWNtcGwJJWVjeCwgJWVheCAKKwljbXBsCSVlY3gsICVlYXgKIAlqYWUJbWVtX29rCi0JCisKIAkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDgxLCAlYXggICAgCisJbW92dwkkMHg4MSwgJWF4CiAJbW92bAkkLnByb2dyZXNzMGEsICVlYnAKIAlqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKLS5wcm9ncmVzczBhOiAgCQorLnByb2dyZXNzMGE6CiAJam1wIAlkaWUKLW1lbV9vazoJCittZW1fb2s6CiAKIAkvKiBpbmRpY2F0ZSBwcm9ncmVzcyAqLwotCW1vdncJJDB4MDIsICVheCAgICAKKwltb3Z3CSQweDAyLCAlYXgKIAltb3ZsCSQucHJvZ3Jlc3MxLCAlZWJwCiAJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi0ucHJvZ3Jlc3MxOiAgCQorLnByb2dyZXNzMToKIAogCS8qIGNyZWF0ZSBhIHN0YWNrIGFmdGVyIHRoZSBic3MgKi8KLSAgICAgICAgbW92bCAgICAkX2kzODZib290X2Jzc19zdGFydCwgJWVheAorCW1vdmwgICAgJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlYXgKIAlhZGRsCSRfaTM4NmJvb3RfYnNzX3NpemUsICVlYXgKIAlhZGRsCSRDRkdfU1RBQ0tfU0laRSwgJWVheAotICAgICAgICBtb3ZsICAgICVlYXgsICVlc3AKLQkKKwltb3ZsICAgICVlYXgsICVlc3AKKwogCXB1c2hsCSQwCiAJcG9wbAklZWF4CiAJY21wbAkkMCwgJWVheApAQCAtMTAyLDgzICsxMDIsODMgQEAKIAogbm9fc3RhY2s6CiAJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCi0JbW92dwkkMHg4MiwgJWF4ICAgIAorCW1vdncJJDB4ODIsICVheAogCW1vdmwJJC5wcm9ncmVzczFhLCAlZWJwCiAJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi0ucHJvZ3Jlc3MxYTogIAkKKy5wcm9ncmVzczFhOgogCWptcCBkaWUKLQkKLQkKLXN0YWNrX29rOgkKKworCitzdGFja19vazoKIAkvKiBpbmRpY2F0ZSBwcm9ncmVzcyAqLwotCW1vdncJJDB4MDMsICVheCAgICAKKwltb3Z3CSQweDAzLCAlYXgKIAltb3ZsCSQucHJvZ3Jlc3MyLCAlZWJwCiAJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi0ucHJvZ3Jlc3MyOiAgCQorLnByb2dyZXNzMjoKIAogCS8qIGNvcHkgZGF0YSBzZWN0aW9uIHRvIHJhbSwgc2l6ZSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkICovCiAJbW92bAkkX2kzODZib290X3JvbWRhdGFfZGVzdCwgJWVkaQkgIC8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLSAJbW92bAkkX2kzODZib290X3JvbWRhdGFfc3RhcnQsICVlc2kJICAvKiBzb3VyY2UgYWRkcmVzcyAqLworCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX3N0YXJ0LCAlZXNpCSAgLyogc291cmNlIGFkZHJlc3MgKi8KIAltb3ZsCSRfaTM4NmJvb3Rfcm9tZGF0YV9zaXplLCAlZWN4ICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSAqLwogCW1vdmwJJWVjeCwgJWVheAogCWFuZGwJJDMsICVlYXgKIAlqbnoJZGF0YV9mYWlsCi0JCisKIAlzaHJsCSQyLCAlZWN4CSAgICAgICAgICAgICAgICAgIC8qIGNvcHkgNCBieXRlIGVhY2ggdGltZSAqLwotCWNsZAkgCisJY2xkCiAJY21wbAkkMCwgJWVjeAotCWplCWRhdGFfb2sJCi1kYXRhX3NlZ21lbnQ6CQotCW1vdnNsCQkKKwlqZQlkYXRhX29rCitkYXRhX3NlZ21lbnQ6CisJbW92c2wKIAlsb29wCWRhdGFfc2VnbWVudAogCWptcAlkYXRhX29rCiBkYXRhX2ZhaWw6CiAJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCi0JbW92dwkkMHg4MywgJWF4ICAgIAorCW1vdncJJDB4ODMsICVheAogCW1vdmwJJC5wcm9ncmVzczJhLCAlZWJwCiAJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi0ucHJvZ3Jlc3MyYTogIAkKKy5wcm9ncmVzczJhOgogCWptcCAJZGllCiAKLWRhdGFfb2s6CQorZGF0YV9vazoKIAogCS8qIGluZGljYXRlIHByb2dyZXNzICovCi0JbW92dwkkMHgwNCwgJWF4ICAgIAorCW1vdncJJDB4MDQsICVheAogCW1vdmwJJC5wcm9ncmVzczMsICVlYnAKIAlqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKLS5wcm9ncmVzczM6ICAJCisucHJvZ3Jlc3MzOgogCiAJLyogY2xlYXIgYnNzIHNlY3Rpb24gaW4gcmFtLCBzaXplIG11c3QgYmUgNC1ieXRlIGFsaWduZWQgICovCiAJbW92bAkkX2kzODZib290X2Jzc19zdGFydCwgJWVheCAgICAgICAgLyogQlNTIHN0YXJ0ICovCi0JbW92bAkkX2kzODZib290X2Jzc19zaXplLCAlZWN4ICAgICAgICAgLyogQlNTIHNpemUgKi8JCisJbW92bAkkX2kzODZib290X2Jzc19zaXplLCAlZWN4ICAgICAgICAgLyogQlNTIHNpemUgKi8KIAltb3ZsCSVlY3gsICVlYXgKIAlhbmRsCSQzLCAlZWF4CiAJam56CWJzc19mYWlsCiAJc2hybAkkMiwgJWVjeAkgICAgICAgICAgICAgICAgICAvKiBjbGVhciA0IGJ5dGUgZWFjaCB0aW1lICovCi0JY2xkCQkgICAgICAKKwljbGQKIAljbXBsCSQwLCAlZWN4Ci0JamUJYnNzX29rCQotYnNzOgkKKwlqZQlic3Nfb2sKK2JzczoKIAltb3ZsCSQwLCAoJWVkaSkKLQlhZGQJJDQsICVlZGkJCQkKKwlhZGQJJDQsICVlZGkKIAlsb29wCWJzcwogCWptcCAJYnNzX29rCiAKIGJzc19mYWlsOgogCS8qIGluZGljYXRlIChsYWNrIG9mKSBwcm9ncmVzcyAqLwotCW1vdncJJDB4ODQsICVheCAgICAKKwltb3Z3CSQweDg0LCAlYXgKIAltb3ZsCSQucHJvZ3Jlc3MzYSwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwotLnByb2dyZXNzM2E6ICAJCisucHJvZ3Jlc3MzYToKIAlqbXAgCWRpZQogCi1ic3Nfb2s6CQorYnNzX29rOgogCi0Jd2JpbnZkCSAKKwl3YmludmQKIAogCiAJLyogaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDA1LCAlYXggICAgCisJbW92dwkkMHgwNSwgJWF4CiAJbW92bAkkLnByb2dyZXNzNCwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwogLnByb2dyZXNzNDoKQEAgLTE4NiwxMyArMTg2LDExIEBACiAJY2FsbAlzdGFydF9pMzg2Ym9vdCAgLyogRW50ZXIsIFUtYm9vdCEgKi8KIAogCS8qIGluZGljYXRlIChsYWNrIG9mKSBwcm9ncmVzcyAqLwotCW1vdncJJDB4ODUsICVheCAgICAKKwltb3Z3CSQweDg1LCAlYXgKIAltb3ZsCSQucHJvZ3Jlc3M0YSwgJWVicAogCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwogLnByb2dyZXNzNGE6CiAKIGRpZToJaGx0CiAJam1wCWRpZQotCWhsdCAgICAgICAgICAgICAgICAgICAgIAotCi0KKwlobHQKZGlmZiAtLWdpdCBhL2NwdS9pMzg2L3N0YXJ0MTYuUyBiL2NwdS9pMzg2L3N0YXJ0MTYuUwppbmRleCBhMzQ2NDJmLi4yMzlmMmZmIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9zdGFydDE2LlMKKysrIGIvY3B1L2kzODYvc3RhcnQxNi5TCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBVLWJvb3QgLSBpMzg2IFN0YXJ0dXAgQ29kZSAKKyAqICBVLWJvb3QgLSBpMzg2IFN0YXJ0dXAgQ29kZQogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgT21pY3JvbiBDZXRpIEFCLCBEYW5pZWwgRW5nc3Ry9m0gPGRlbmFpZWxAb21pY3Jvbi5zZT4KICAqCkBAIC0zMCwzNyArMzAsMzcgQEAKIC5zZWN0aW9uIC5zdGFydDE2LCAiYXgiCiAuY29kZTE2CiAuZ2xvYmwgc3RhcnQxNgotc3RhcnQxNjogCitzdGFydDE2OgogCS8qIEZpcnN0IHdlIGxldCB0aGUgQlNQIGRvIHNvbWUgZWFybHkgaW5pdGlhbGl6YXRpb24KIAkgKiB0aGlzIGNvZGUgaGF2ZSB0byBtYXAgdGhlIGZsYXNoIHRvIGl0cyBmaW5hbCBwb3NpdGlvbgogCSAqLwogCW1vdgkkYm9hcmRfaW5pdDE2X3JldCwgJWJwCiAJam1wCWJvYXJkX2luaXQxNgotYm9hcmRfaW5pdDE2X3JldDoJCi0JCitib2FyZF9pbml0MTZfcmV0OgorCiAJLyogVHVybiBvZiBjYWNoZSAodGhpcyBtaWdodCByZXF1aXJlIGEgNDg2LWNsYXNzIENQVSkgKi8KLSAgICAgICAgbW92bCAgICAlY3IwLCAlZWF4Ci0gICAgICAgIG9ybCAgICAgJDB4NjAwMDAwMDAsJWVheAotICAgICAgICBtb3ZsICAgICVlYXgsICVjcjAKLSAgICAgICAgd2JpbnZkICAJCSAgICAgCi0JCisJbW92bCAgICAlY3IwLCAlZWF4CisJb3JsICAgICAkMHg2MDAwMDAwMCwlZWF4CisJbW92bCAgICAlZWF4LCAlY3IwCisJd2JpbnZkCisKIAkvKiBsb2FkIHRoZSBkZXNjcmlwdG9yIHRhYmxlcyAqLwogbzMyIGNzCWxpZHQJaWR0X3B0cgotbzMyIGNzCWxnZHQgICAgZ2R0X3B0cgkJIAorbzMyIGNzCWxnZHQgICAgZ2R0X3B0cgogCiAKIAkvKiBOb3csIHdlIGVudGVyIHByb3RlY3RlZCBtb2RlICovCi0gICAgICAgIG1vdmwgICAgJWNyMCwgJWVheCAgICAgICAgICAgICAgIAotICAgICAgICBvcmwgICAgICQxLCVlYXggICAgICAgICAgICAgICAgICAKLSAgICAgICAgbW92bCAgICAlZWF4LCAlY3IwICAgICAgICAgICAgCi0JCisJbW92bCAgICAlY3IwLCAlZWF4CisJb3JsICAgICAkMSwlZWF4CisJbW92bCAgICAlZWF4LCAlY3IwCisKIAkvKiBGbHVzaCB0aGUgcHJlZmV0Y2ggcXVldWUgKi8KLSAgICAgICAgam1wICAgICBmZiAgICAgICAgCisJam1wICAgICBmZgogZmY6CiAKIAkvKiBGaW5hbGx5IGp1bXAgdG8gdGhlIDMyYml0IGluaXRpYWxpemF0aW9uIGNvZGUgKi8KLQltb3Z3CSRjb2RlMzJzdGFydCwgJWF4IAotICAgICAgICBtb3Z3ICAgICVheCwlYnAKKwltb3Z3CSRjb2RlMzJzdGFydCwgJWF4CisJbW92dyAgICAlYXgsJWJwCiBvMzIgY3MJbGptcAkqKCVicCkKIAogCS8qIDQ4LWJpdCBmYXIgcG9pbnRlciAqLwpAQCAtNzEsMTcgKzcxLDE3IEBACiBpZHRfcHRyOgogCS53b3JkCTAJCQkJLyogbGltaXQgKi8KIAkubG9uZwkwCQkgICAgICAgCQkvKiBiYXNlICovCi0JCisKIGdkdF9wdHI6CiAJLndvcmQJMHgzMAkJCSAgICAgICAgLyogbGltaXQgKDQ4IGJ5dGVzID0gNiBHRFQgZW50cmllcykgKi8KIAkubG9uZwlCT09UX1NFRyArIGdkdAkgICAgICAgIAkvKiBiYXNlICovCiAKLQkvKiBUaGUgR0RUIHRhYmxlIC4uLiAKKwkvKiBUaGUgR0RUIHRhYmxlIC4uLgogCSAqCi0JICogICAgICAgU2VsZWN0b3IJVHlwZSAKKwkgKiAgICAgICBTZWxlY3RvcglUeXBlCiAJICogCSAweDAwCQlOVUxMCiAJICogCSAweDA4CQlVbnVzZWQKLQkgKgkgMHgxMAkJMzJiaXQgY29kZSAKKwkgKgkgMHgxMAkJMzJiaXQgY29kZQogCSAqCSAweDE4CQkzMmJpdCBkYXRhL3N0YWNrCiAJICoJIDB4MjAJCTE2Yml0IGNvZGUKIAkgKgkgMHgyOAkgCTE2Yml0IGRhdGEvc3RhY2sKQEAgLTEwMCwxMiArMTAwLDEyIEBACiAJLndvcmQJMHgwCQkJCS8qIGJhc2UgYWRkcmVzcyA9IDAgKi8KIAkud29yZAkweDkzMDAJCQkJLyogZGF0YSByZWFkL3dyaXRlICovCiAJLndvcmQJMHgwMENGCQkJCS8qIGdyYW51bGFyaXR5ID0gNDA5NiwgMzg2ICgrNXRoIG5pYmJsZSBvZiBsaW1pdCkgKi8KLQkJCQkJCQorCiAJLndvcmQJMHhGRkZGCQkJCS8qIDY0a2IgKi8KIAkud29yZAkwCQkJCS8qIGJhc2UgYWRkcmVzcyA9IDAgKi8KIAkud29yZAkweDliMDAJCQkJLyogZGF0YSByZWFkL3dyaXRlICovCiAJLndvcmQJMHgwMDEwCQkJCS8qIGdyYW51bGFyaXR5ID0gMSAgKCs1dGggbmliYmxlIG9mIGxpbWl0KSAqLwotCQorCiAJLndvcmQJMHhGRkZGCQkJCS8qIDY0a2IgKi8KIAkud29yZAkwCQkJCS8qIGJhc2UgYWRkcmVzcyA9IDAgKi8KIAkud29yZAkweDkzMDAJCQkJLyogZGF0YSByZWFkL3dyaXRlICovCmRpZmYgLS1naXQgYS9jcHUvaTM4Ni90aW1lci5jIGIvY3B1L2kzODYvdGltZXIuYwppbmRleCBhMjNjZDZlLi40ODZkOTI3IDEwMDY0NAotLS0gYS9jcHUvaTM4Ni90aW1lci5jCisrKyBiL2NwdS9pMzg2L3RpbWVyLmMKQEAgLTQ2LDI4ICs0NiwyOCBAQAogaW50IHRpbWVyX2luaXQodm9pZCkKIHsKIAlzeXN0ZW1fdGlja3MgPSAwOwotCQorCiAJaXJxX2luc3RhbGxfaGFuZGxlcigwLCB0aW1lcl9pc3IsIE5VTEwpOwotCQotCS8qIGluaXRpYWxpemUgdGltZXIgMCBhbmQgMiAKLQkgKiAKKworCS8qIGluaXRpYWxpemUgdGltZXIgMCBhbmQgMgorCSAqCiAJICogVGltZXIgMCBpcyB1c2VkIHRvIGluY3JlbWVudCBzeXN0ZW1fdGljayAxMDAwIHRpbWVzL3NlYwogCSAqIFRpbWVyIDEgd2FzIHVzZWQgZm9yIERSQU0gcmVmcmVzaCBpbiBlYXJseSBQQydzCiAJICogVGltZXIgMiBpcyB1c2VkIHRvIGRyaXZlIHRoZSBzcGVha2VyCiAJICogKHRvIHN0YXNydCBhIGJlZXA6IHdyaXRlIDMgdG8gcG9ydCAweDYxLAogCSAqIHRvIHN0b3AgaXQgYWdhaW46IHdyaXRlIDApCiAJICovCi0JCQotICAgICAgICBvdXRiKFBJVF9DTURfQ1RSMHxQSVRfQ01EX0JPVEh8UElUX0NNRF9NT0RFMiwgUElUX0JBU0UgKyBQSVRfQ09NTUFORCk7CisKKwlvdXRiKFBJVF9DTURfQ1RSMHxQSVRfQ01EX0JPVEh8UElUX0NNRF9NT0RFMiwgUElUX0JBU0UgKyBQSVRfQ09NTUFORCk7CiAJb3V0YihUSU1FUjBfVkFMVUUmMHhmZiwgUElUX0JBU0UgKyBQSVRfVDApOwogCW91dGIoVElNRVIwX1ZBTFVFPj44LCBQSVRfQkFTRSArIFBJVF9UMCk7CiAKLSAgICAgICAgb3V0YihQSVRfQ01EX0NUUjJ8UElUX0NNRF9CT1RIfFBJVF9DTURfTU9ERTMsIFBJVF9CQVNFICsgUElUX0NPTU1BTkQpOworCW91dGIoUElUX0NNRF9DVFIyfFBJVF9DTURfQk9USHxQSVRfQ01EX01PREUzLCBQSVRfQkFTRSArIFBJVF9DT01NQU5EKTsKIAlvdXRiKFRJTUVSMl9WQUxVRSYweGZmLCBQSVRfQkFTRSArIFBJVF9UMik7CiAJb3V0YihUSU1FUjJfVkFMVUU+PjgsIFBJVF9CQVNFICsgUElUX1QyKTsKIAogCXRpbWVyX2luaXRfZG9uZSA9IDE7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODcsNyArODcsNyBAQAogCXJldHVybiAoc3lzdGVtX3RpY2tzIC0gYmFzZSk7CiB9CiAKLXZvaWQgc2V0X3RpbWVyICh1bG9uZyB0KQkKK3ZvaWQgc2V0X3RpbWVyICh1bG9uZyB0KQogewogCXN5c3RlbV90aWNrcyA9IHQ7CiB9CkBAIC0xMDIsMjAgKzEwMiwyMCBAQAogCiAvKiB0aGlzIGlzIG5vdCB2ZXJ5IGV4YWN0ICovCiB2b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQotewkKK3sKIAlpbnQgY291bnRlcjsKIAlpbnQgd3JhcHM7Ci0JCisKIAlpZiAoIXRpbWVyX2luaXRfZG9uZSkgewogCQlyZXR1cm47CiAJfQogCWNvdW50ZXIgPSByZWFkX3BpdCgpOwogCXdyYXBzID0gdXNlYy8xMDAwOwogCXVzZWMgPSB1c2VjJTEwMDA7Ci0JCisKIAl1c2VjKj0xMTk0OwogCXVzZWMvPTEwMDA7Ci0JdXNlYys9Y291bnRlcjsgCisJdXNlYys9Y291bnRlcjsKIAlpZiAodXNlYyA+IDExOTQpIHsKIAkJdXNlYy09MTE5NDsKIAkJd3JhcHMrKzsKQEAgLTEyMywyNiArMTIzLDI2IEBACiAKIAl3aGlsZSAoMSkgewogCQlpbnQgbmV3X2NvdW50ID0gcmVhZF9waXQoKTsKLQkJCisKIAkJaWYgKCgobmV3X2NvdW50IDwgdXNlYykgJiYgIXdyYXBzKSB8fCB3cmFwcyA8IDApIHsKIAkJCWJyZWFrOwogCQl9Ci0JCQorCiAJCWlmIChuZXdfY291bnQgPiBjb3VudGVyKSB7CiAJCQl3cmFwcy0tOwogCQl9CiAJCWNvdW50ZXIgPSBuZXdfY291bnQ7CiAJfQotCQorCiB9CiAKICNpZiAwCiAvKiB0aGlzIGlzIGEgdmVyc2lvbiB3aXRoIGRlYnVnIG91dHB1dCAqLwogdm9pZCBfdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCi17CQorewogCWludCBjb3VudGVyOwogCWludCB3cmFwczsKLQkKKwogCWludCB1c2VjMSwgdXNlYzIsIHVzZWMzOwogCWludCB3cmFwczEsIHdyYXBzMiwgd3JhcHMzLCB3cmFwczQ7CiAJaW50IGN0cjEsIGN0cjIsIGN0cjMsIG5jdDEsIG5jdDI7CkBAIC0xNTUsMTMgKzE1NSwxMyBAQAogCWN0cjEgPSBjb3VudGVyOwogCXdyYXBzID0gdXNlYy8xMDAwOwogCXVzZWMgPSB1c2VjJTEwMDA7Ci0JCisKIAl1c2VjMiA9IHVzZWM7CiAJd3JhcHMxID0gd3JhcHM7Ci0JCisKIAl1c2VjKj0xMTk0OwogCXVzZWMvPTEwMDA7Ci0JdXNlYys9Y291bnRlcjsgCisJdXNlYys9Y291bnRlcjsKIAlpZiAodXNlYyA+IDExOTQpIHsKIAkJdXNlYy09MTE5NDsKIAkJd3JhcHMrKzsKQEAgLTE2OSw3ICsxNjksNyBAQAogCiAJdXNlYzMgPSB1c2VjOwogCXdyYXBzMiA9IHdyYXBzOwotCQorCiAJY3RyMiA9IHdyYXBzMyA9IG5jdDEgPSA0NzExOwogCWN0cjMgPSB3cmFwczQgPSBuY3QyID0gNDcxMTsKIAlpPTA7CkBAIC0xNzksNyArMTc5LDcgQEAKIAkJaWYgKChuZXdfY291bnQgPCB1c2VjICYmICF3cmFwcykgfHwgd3JhcHMgPCAwKSB7CiAJCQlicmVhazsKIAkJfQotCQkKKwogCQlpZiAobmV3X2NvdW50ID4gY291bnRlcikgewogCQkJd3JhcHMtLTsKIAkJfQpAQCAtMTkyLDEwICsxOTIsMTAgQEAKIAkJCXdyYXBzNCA9IHdyYXBzOwogCQkJbmN0MiA9IG5ld19jb3VudDsKIAkJfQotCQkKKwogCQljb3VudGVyID0gbmV3X2NvdW50OwogCX0KLQkKKwogCXByaW50ZigidWRlbGF5KCVkKVxuIiwgdXNlYzEpOwogCXByaW50ZigiY291bnRlciAlZFxuIiwgY3RyMSk7CiAJcHJpbnRmKCIxOiB3cmFwcyAlZCwgdXNlYyAlZFxuIiwgd3JhcHMxLCB1c2VjMik7CmRpZmYgLS1naXQgYS9jcHUvbWlwcy9jYWNoZS5TIGIvY3B1L21pcHMvY2FjaGUuUwppbmRleCA1NWRhYTg5Li4wMWZiYjJmIDEwMDY0NAotLS0gYS9jcHUvbWlwcy9jYWNoZS5TCisrKyBiL2NwdS9taXBzL2NhY2hlLlMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCXN3CXplcm8sIDI4KGEwKQogCWFkZHUJYTAsIDMyCiAJYmx0dQlhMCwgYTEsIDJiCi0gICAKKwogCS8qIFNldCBpbnZhbGlkIHRhZy4KIAkgKi8KIApAQCAtMjY3LDQgKzI2NywzIEBACiAKIAlqCXJhCiAJLmVuZAltaXBzX2NhY2hlX2xvY2sKLQpkaWZmIC0tZ2l0IGEvY3B1L21pcHMvY29uZmlnLm1rIGIvY3B1L21pcHMvY29uZmlnLm1rCmluZGV4IDRlYTY2MTcuLjE2NjRlMTQgMTAwNjQ0Ci0tLSBhL2NwdS9taXBzL2NvbmZpZy5taworKysgYi9jcHUvbWlwcy9jb25maWcubWsKQEAgLTIyLDQgKzIyLDMgQEAKICMKIAogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLW1jcHU9NGtjIC1FQiAtbWFiaWNhbGxzCi0KZGlmZiAtLWdpdCBhL2NwdS9taXBzL2NwdS5jIGIvY3B1L21pcHMvY3B1LmMKaW5kZXggZTk2NzZjMS4uYzI3YWJiZCAxMDA2NDQKLS0tIGEvY3B1L21pcHMvY3B1LmMKKysrIGIvY3B1L21pcHMvY3B1LmMKQEAgLTQyLDQgKzQyLDMgQEAKIHsKIAogfQotCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9pbmNhaXBfY2xvY2suYyBiL2NwdS9taXBzL2luY2FpcF9jbG9jay5jCmluZGV4IDdmYzZlYjAuLjI3ZjA2MDkgMTAwNjQ0Ci0tLSBhL2NwdS9taXBzL2luY2FpcF9jbG9jay5jCisrKyBiL2NwdS9taXBzL2luY2FpcF9jbG9jay5jCkBAIC0yNSwxNCArMjUsMTMgQEAKICNpbmNsdWRlIDxhc20vaW5jYS1pcC5oPgogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKLSogZ2V0X2NwdWNsayAtIHJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgQ1BVLiAKKyogZ2V0X2NwdWNsayAtIHJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgQ1BVLgogKgogKiBHZXRzIHRoZSB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSBJTkNBLUlQIGhhcmR3YXJlLgogKgotKiBSRVRVUk5TOiAKKyogUkVUVVJOUzoKICogICAgICAgICAgMTUwLjAwMC4wMDAgZm9yIDE1MCBNSHoKICogICAgICAgICAgMTMwLjAwMC4wMDAuIGZvciAxMzAgTWh6CiAqICAgICAgICAgIDEwMC4wMDAuMDAwLiBmb3IgMTAwIE1oegpAQCAtNTUsMjQgKzU0LDI0IEBACiAgICBlbHNlCiAgICB7CiAgICAgICAvKiBNVVggSSBzZXQgdG8gMTAwLzEzMyBNSHogY2xvY2sgKi8KLSAgICAgIGlmICgqKCh2b2xhdGlsZSB1bG9uZyopSU5DQV9JUF9DR1VfQ0dVX0RJVkNSKSAmIDB4NDApIAorICAgICAgaWYgKCooKHZvbGF0aWxlIHVsb25nKilJTkNBX0lQX0NHVV9DR1VfRElWQ1IpICYgMHg0MCkKICAgICAgIHsKLSAgICAgICAgIC8qIERpdmlzaW9uIHZhbHVlIGlzIDEvMywgbWF4aW11bSBDUFUgb3BlcmF0aW5nICovCi0gICAgICAgICAvKiBmcmVxdWVuY3kgaXMgMTMzLjMgTUh6ICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgcmV0dXJuIDEzMDAwMDAwMDsKKwkgLyogRGl2aXNpb24gdmFsdWUgaXMgMS8zLCBtYXhpbXVtIENQVSBvcGVyYXRpbmcgKi8KKwkgLyogZnJlcXVlbmN5IGlzIDEzMy4zIE1IeiAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkgcmV0dXJuIDEzMDAwMDAwMDsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgIC8qIERpdmlzaW9uIHZhbHVlIGlzIDEvNCwgbWF4aW11bSBDUFUgb3BlcmF0aW5nICovCi0gICAgICAgICAvKiBmcmVxdWVuY3kgaXMgMTAwIE1IeiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgcmV0dXJuIDEwMDAwMDAwMDsKKwkgLyogRGl2aXNpb24gdmFsdWUgaXMgMS80LCBtYXhpbXVtIENQVSBvcGVyYXRpbmcgKi8KKwkgLyogZnJlcXVlbmN5IGlzIDEwMCBNSHogICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkgcmV0dXJuIDEwMDAwMDAwMDsKICAgICAgIH0KICAgIH0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKLSogZ2V0X2ZwaWNsayAtIHJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgRlBJIGJ1cy4gCisqIGdldF9mcGljbGsgLSByZXR1cm5zIHRoZSBmcmVxdWVuY3kgb2YgdGhlIEZQSSBidXMuCiAqCiAqIEdldHMgdGhlIHZhbHVlIGRpcmVjdGx5IGZyb20gdGhlIElOQ0EtSVAgaGFyZHdhcmUuCiAqCkBAIC04MiwyNiArODEsMjQgQEAKICogICBUaGlzIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBieSB0aGUgaGFyZHdhcmUgZHJpdmVyIHRvIGdldCB0aGUgY29ycmVjdAogKiAgIGZyZXF1ZW5jeSBvZiB0aGUgQ1BVLiBEb24ndCB1c2UgdGhlIG1hY3Jvcywgd2hpY2ggYXJlIHNldCB0byBpbml0IHRoZSBDUFUKICogICBmcmVxdWVuY3kgaW4gdGhlIFJPTSBjb2RlLgotKiAgIFRoZSBjYWxjdWxhdGlvbiBmb3IgdGhlIAorKiAgIFRoZSBjYWxjdWxhdGlvbiBmb3IgdGhlCiAqLwogdWludCBpbmNhaXBfZ2V0X2ZwaWNsayh2b2lkKQogewogICAgdWludCAgY2xrQ1BVOwotICAgCisKICAgIGNsa0NQVSA9IGluY2FpcF9nZXRfY3B1Y2xrKCk7Ci0gICAKKwogICAgc3dpdGNoICgqKCh2b2xhdGlsZSB1bG9uZyopSU5DQV9JUF9DR1VfQ0dVX0RJVkNSKSAmIDB4QykKICAgIHsKICAgICAgIGNhc2UgMHg0OgotICAgICAgICAgcmV0dXJuIGNsa0NQVSA+PiAxOyAvKiBkZXZpZGVkIGJ5IDIgKi8KLSAgICAgICAgIGJyZWFrOworCSByZXR1cm4gY2xrQ1BVID4+IDE7IC8qIGRldmlkZWQgYnkgMiAqLworCSBicmVhazsKICAgICAgIGNhc2UgMHg4OgotICAgICAgICAgcmV0dXJuIGNsa0NQVSA+PiAyOyAvKiBkZXZpZGVkIGJ5IDQgKi8KLSAgICAgICAgIGJyZWFrOworCSByZXR1cm4gY2xrQ1BVID4+IDI7IC8qIGRldmlkZWQgYnkgNCAqLworCSBicmVhazsKICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICByZXR1cm4gY2xrQ1BVOwotICAgICAgICAgYnJlYWs7CisJIHJldHVybiBjbGtDUFU7CisJIGJyZWFrOwogICAgfQogfQotCi0KZGlmZiAtLWdpdCBhL2NwdS9taXBzL2luY2FpcF93ZHQuUyBiL2NwdS9taXBzL2luY2FpcF93ZHQuUwppbmRleCA5NDU1NTY5Li43MWFkYWExIDEwMDY0NAotLS0gYS9jcHUvbWlwcy9pbmNhaXBfd2R0LlMKKysrIGIvY3B1L21pcHMvaW5jYWlwX3dkdC5TCkBAIC03MCw0ICs3MCwzIEBACiAKIAlqCXJhCiAJbm9wCi0KZGlmZiAtLWdpdCBhL2NwdS9taXBzL2ludGVycnVwdHMuYyBiL2NwdS9taXBzL2ludGVycnVwdHMuYwppbmRleCAwNDkwYTc2Li44N2Y3YTlmIDEwMDY0NAotLS0gYS9jcHUvbWlwcy9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L21pcHMvaW50ZXJydXB0cy5jCkBAIC0zMSw0ICszMSwzIEBACiB7CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2NwdS9taXBzL3NlcmlhbC5jIGIvY3B1L21pcHMvc2VyaWFsLmMKaW5kZXggYjI2ZjQxZC4uNTg1MjI3YSAxMDA2NDQKLS0tIGEvY3B1L21pcHMvc2VyaWFsLmMKKysrIGIvY3B1L21pcHMvc2VyaWFsLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgVE9VVF9MT09QCTEwMDAwMAogCiAvKiBTZXQgYmFzZSBhZGRyZXNzIGZvciBzZWNvbmQgRlBJIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGJhbmsgKi8KLSNkZWZpbmUgU0ZQSV9JTlRDT05fQkFTRUFERFIJMHhCRjBGMDAwMCAKKyNkZWZpbmUgU0ZQSV9JTlRDT05fQkFTRUFERFIJMHhCRjBGMDAwMAogCiAvKiBSZWdpc3RlciBvZmZzZXQgZnJvbSBiYXNlIGFkZHJlc3MgKi8KICNkZWZpbmUgRkJTX0lTUgkJMHgwMDAwMDAwMAkvKiBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCkBAIC03NSwxMSArNzUsMTEgQEAKICAgICAvKiB3ZSBoYXZlIHRvIHNldCBQTVUuRU4xMyBiaXQgdG8gZW5hYmxlIGFuIEFTQyBkZXZpY2UqLwogICAgIElOQ0FBU0NfUE1VX0VOQUJMRSgxMyk7CiAjZW5kaWYKLSAgICAKKwogICAgIC8qIGFuZCB3ZSBoYXZlIHRvIHNldCBDTEMgcmVnaXN0ZXIqLwogICAgIENMRUFSX0JJVChwQXNjLT5hc2NfY2xjLCBBU0NDTENfRElTUyk7CiAgICAgU0VUX0JJVEZJRUxEKHBBc2MtPmFzY19jbGMsIEFTQ0NMQ19STUNNQVNLLCBBU0NDTENfUk1DT0ZGU0VULCAweDAwMDEpOwotICAgIAorCiAgICAgLyogaW5pdGlhbHkgd2UgYXJlIGluIGFzeW5jIG1vZGUgKi8KICAgICBwQXNjLT5hc2NfY29uID0gQVNDQ09OX01fOEFTWU5DOwogCkBAIC04OSwxMyArODksMTMgQEAKICNpZmRlZiBBU0NfRklGT19QUkVTRU5UCiAgICAgLyogVFhGSUZPJ3MgZmlsbGluZyBsZXZlbCAqLwogICAgIFNFVF9CSVRGSUVMRChwQXNjLT5hc2NfdHhmY29uLCBBU0NUWEZDT05fVFhGSVRMTUFTSywKLSAgICAgICAgICAgICAgICAgICAgQVNDVFhGQ09OX1RYRklUTE9GRiwgSU5DQUFTQ19UWEZJRk9fRkwpOworCQkgICAgQVNDVFhGQ09OX1RYRklUTE9GRiwgSU5DQUFTQ19UWEZJRk9fRkwpOwogICAgIC8qIGVuYWJsZSBUWEZJRk8gKi8KICAgICBTRVRfQklUKHBBc2MtPmFzY190eGZjb24sIEFTQ1RYRkNPTl9UWEZFTik7CiAKICAgICAvKiBSWEZJRk8ncyBmaWxsaW5nIGxldmVsICovCi0gICAgU0VUX0JJVEZJRUxEKHBBc2MtPmFzY190eGZjb24sIEFTQ1JYRkNPTl9SWEZJVExNQVNLLCAKLSAgICAgICAgICAgICAgICAgICAgQVNDUlhGQ09OX1JYRklUTE9GRiwgSU5DQUFTQ19SWEZJRk9fRkwpOworICAgIFNFVF9CSVRGSUVMRChwQXNjLT5hc2NfdHhmY29uLCBBU0NSWEZDT05fUlhGSVRMTUFTSywKKwkJICAgIEFTQ1JYRkNPTl9SWEZJVExPRkYsIElOQ0FBU0NfUlhGSUZPX0ZMKTsKICAgICAvKiBlbmFibGUgUlhGSUZPICovCiAgICAgU0VUX0JJVChwQXNjLT5hc2NfcnhmY29uLCBBU0NSWEZDT05fUlhGRU4pOwogI2VuZGlmCkBAIC0xMjMsNyArMTIzLDcgQEAKIAogICAgIC8qIHNldCB0aGUgb3B0aW9ucyAqLwogICAgIHNlcmlhbF9zZXRvcHQoKTsKLSAgICAKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNDEsMjUgKzE0MSwyNSBAQAogI2lmbmRlZiBJTkNBQVNDX1VTRV9GRFYKICAgICBmZHYgPSAyOwogICAgIHVpUmVsb2FkVmFsdWUgPSAoZl9BU0MgLyAoZmR2ICogMTYgKiBDT05GSUdfQkFVRFJBVEUpKSAtIDE7Ci0jZWxzZSAKKyNlbHNlCiAgICAgZmR2ID0gSU5DQUFTQ19GRFZfSElHSF9CQVVEUkFURTsKICAgICB1aVJlbG9hZFZhbHVlID0gKGZfQVNDIC8gKDgxOTIgKiBDT05GSUdfQkFVRFJBVEUgLyBmZHYpKSAtIDE7CiAjZW5kaWYgLyogSU5DQUFTQ19VU0VfRkRWICovCi0gICAgCisKICAgICBpZiAoICh1aVJlbG9hZFZhbHVlIDwgMCkgfHwgKHVpUmVsb2FkVmFsdWUgPiA4MTkxKSApCiAgICAgewogI2lmbmRlZiBJTkNBQVNDX1VTRV9GRFYKLSAgICAgICAgZmR2ID0gMzsKLSAgICAgICAgdWlSZWxvYWRWYWx1ZSA9IChmX0FTQyAvIChmZHYgKiAxNiAqIENPTkZJR19CQVVEUkFURSkpIC0gMTsKLSNlbHNlIAotICAgICAgICBmZHYgPSBJTkNBQVNDX0ZEVl9MT1dfQkFVRFJBVEU7Ci0gICAgICAgIHVpUmVsb2FkVmFsdWUgPSAoZl9BU0MgLyAoODE5MiAqIENPTkZJR19CQVVEUkFURSAvIGZkdikpIC0gMTsKKwlmZHYgPSAzOworCXVpUmVsb2FkVmFsdWUgPSAoZl9BU0MgLyAoZmR2ICogMTYgKiBDT05GSUdfQkFVRFJBVEUpKSAtIDE7CisjZWxzZQorCWZkdiA9IElOQ0FBU0NfRkRWX0xPV19CQVVEUkFURTsKKwl1aVJlbG9hZFZhbHVlID0gKGZfQVNDIC8gKDgxOTIgKiBDT05GSUdfQkFVRFJBVEUgLyBmZHYpKSAtIDE7CiAjZW5kaWYgLyogSU5DQUFTQ19VU0VfRkRWICovCi0gICAgICAgIAotICAgICAgICBpZiAoICh1aVJlbG9hZFZhbHVlIDwgMCkgfHwgKHVpUmVsb2FkVmFsdWUgPiA4MTkxKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsgICAgLyogY2FuJ3QgaW1wb3NzaWJseSBnZW5lcmF0ZSB0aGF0IGJhdWQgcmF0ZSAqLwotICAgICAgICB9CisKKwlpZiAoICh1aVJlbG9hZFZhbHVlIDwgMCkgfHwgKHVpUmVsb2FkVmFsdWUgPiA4MTkxKSApCisJeworCSAgICByZXR1cm47ICAgIC8qIGNhbid0IGltcG9zc2libHkgZ2VuZXJhdGUgdGhhdCBiYXVkIHJhdGUgKi8KKwl9CiAgICAgfQogCiAgICAgLyogRGlzYWJsZSBCYXVkIFJhdGUgR2VuZXJhdG9yOyBCRyBzaG91bGQgb25seSBiZSB3cml0dGVuIHdoZW4gUj0wICovCkBAIC0xNzQsOSArMTc0LDkgQEAKICAgICBDTEVBUl9CSVQocEFzYy0+YXNjX2NvbiwgQVNDQ09OX0ZERSk7CiAKICAgICBpZiAoIGZkdiA9PSAyICkKLSAgICAgICAgQ0xFQVJfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9CUlMpOyAgIC8qIEJSUyA9IDAgKi8KKwlDTEVBUl9CSVQocEFzYy0+YXNjX2NvbiwgQVNDQ09OX0JSUyk7ICAgLyogQlJTID0gMCAqLwogICAgIGVsc2UKLSAgICAgICAgU0VUX0JJVChwQXNjLT5hc2NfY29uLCBBU0NDT05fQlJTKTsgLyogQlJTID0gMSAqLworCVNFVF9CSVQocEFzYy0+YXNjX2NvbiwgQVNDQ09OX0JSUyk7IC8qIEJSUyA9IDEgKi8KIAogI2Vsc2UgLyogSU5DQUFTQ19VU0VfRkRWICovCiAKQEAgLTIxNyw0MiArMjE3LDQyIEBACiAgICAgewogICAgIC8qIDctYml0LWRhdGEgKi8KICAgICBjYXNlIEFTQ09QVF9DUzc6Ci0gICAgICAgIGNvbiA9IEFTQ0NPTl9NXzdBU1lOQ1BBUjsgICAvKiA3LWJpdC1kYXRhIGFuZCBwYXJpdHkgYml0ICovCi0gICAgICAgIGJyZWFrOworCWNvbiA9IEFTQ0NPTl9NXzdBU1lOQ1BBUjsgICAvKiA3LWJpdC1kYXRhIGFuZCBwYXJpdHkgYml0ICovCisJYnJlYWs7CiAKICAgICAvKiA4LWJpdC1kYXRhICovCiAgICAgY2FzZSBBU0NPUFRfQ1M4OgotICAgICAgICBpZiAoIEFTQ19PUFRJT05TICYgQVNDT1BUX1BBUkVOQiApCi0gICAgICAgICAgICBjb24gPSBBU0NDT05fTV84QVNZTkNQQVI7ICAgLyogOC1iaXQtZGF0YSBhbmQgcGFyaXR5IGJpdCAqLwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb24gPSBBU0NDT05fTV84QVNZTkM7ICAgICAgLyogOC1iaXQtZGF0YSBubyBwYXJpdHkgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgLyogCisJaWYgKCBBU0NfT1BUSU9OUyAmIEFTQ09QVF9QQVJFTkIgKQorCSAgICBjb24gPSBBU0NDT05fTV84QVNZTkNQQVI7ICAgLyogOC1iaXQtZGF0YSBhbmQgcGFyaXR5IGJpdCAqLworCWVsc2UKKwkgICAgY29uID0gQVNDQ09OX01fOEFTWU5DOyAgICAgIC8qIDgtYml0LWRhdGEgbm8gcGFyaXR5ICovCisJYnJlYWs7CisKKyAgICAvKgogICAgICAqICBvbmx5IDcgYW5kIDgtYml0IGZyYW1lcyBhcmUgc3VwcG9ydGVkCi0gICAgICogIGlmIHdlIGRvbid0IHVzZSBJT0NUTCBleHRlbnNpb25zIAorICAgICAqICBpZiB3ZSBkb24ndCB1c2UgSU9DVEwgZXh0ZW5zaW9ucwogICAgICAqLwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtMTsKKwlyZXR1cm4gLTE7CiAgICAgfQogCiAgICAgaWYgKCBBU0NfT1BUSU9OUyAmIEFTQ09QVF9TVE9QQiApCi0gICAgICAgIFNFVF9CSVQoY29uLCBBU0NDT05fU1RQKTsgICAgICAgLyogMiBzdG9wIGJpdHMgKi8KKwlTRVRfQklUKGNvbiwgQVNDQ09OX1NUUCk7ICAgICAgIC8qIDIgc3RvcCBiaXRzICovCiAgICAgZWxzZQotICAgICAgICBDTEVBUl9CSVQoY29uLCBBU0NDT05fU1RQKTsgICAgIC8qIDEgc3RvcCBiaXQgKi8KKwlDTEVBUl9CSVQoY29uLCBBU0NDT05fU1RQKTsgICAgIC8qIDEgc3RvcCBiaXQgKi8KIAogICAgIGlmICggQVNDX09QVElPTlMgJiBBU0NPUFRfUEFSRU5CICkKLSAgICAgICAgU0VUX0JJVChjb24sIEFTQ0NPTl9QRU4pOyAgICAgICAgICAgLyogZW5hYmxlIHBhcml0eSBjaGVja2luZyAqLyAgICAKKwlTRVRfQklUKGNvbiwgQVNDQ09OX1BFTik7ICAgICAgICAgICAvKiBlbmFibGUgcGFyaXR5IGNoZWNraW5nICovCiAgICAgZWxzZQotICAgICAgICBDTEVBUl9CSVQoY29uLCBBU0NDT05fUEVOKTsgICAgICAgICAvKiBkaXNhYmxlIHBhcml0eSBjaGVja2luZyAqLwotICAgIAorCUNMRUFSX0JJVChjb24sIEFTQ0NPTl9QRU4pOyAgICAgICAgIC8qIGRpc2FibGUgcGFyaXR5IGNoZWNraW5nICovCisKICAgICBpZiAoIEFTQ19PUFRJT05TICYgQVNDT1BUX1BBUk9ERCApCi0gICAgICAgIFNFVF9CSVQoY29uLCBBU0NDT05fT0REKTsgICAgICAgLyogb2RkIHBhcml0eSAqLworCVNFVF9CSVQoY29uLCBBU0NDT05fT0REKTsgICAgICAgLyogb2RkIHBhcml0eSAqLwogICAgIGVsc2UKLSAgICAgICAgQ0xFQVJfQklUKGNvbiwgQVNDQ09OX09ERCk7ICAgICAvKiBldmVuIHBhcml0eSAqLworCUNMRUFSX0JJVChjb24sIEFTQ0NPTl9PREQpOyAgICAgLyogZXZlbiBwYXJpdHkgKi8KIAogICAgIGlmICggQVNDX09QVElPTlMgJiBBU0NPUFRfQ1JFQUQgKQotICAgICAgICBTRVRfQklUKHBBc2MtPmFzY193aGJjb24sIEFTQ1dIQkNPTl9TRVRSRU4pOyAvKiBSZWNlaXZlciBlbmFibGUgKi8KKwlTRVRfQklUKHBBc2MtPmFzY193aGJjb24sIEFTQ1dIQkNPTl9TRVRSRU4pOyAvKiBSZWNlaXZlciBlbmFibGUgKi8KIAogICAgIHBBc2MtPmFzY19jb24gfD0gY29uOwogCkBAIC0yOTMsMTQgKzI5MywxNCBAQAogCiAjaWZuZGVmIEFTQ19GSUZPX1BSRVNFTlQKICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKShTRlBJX0lOVENPTl9CQVNFQUREUiArIEZCU19JU1IpID0gRkJTX0lTUl9BQiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZCU19JU1JfQVQ7CisJCQkJCQkJCSBGQlNfSVNSX0FUOwogI2VuZGlmCi0gICAgCisKICAgICAvKiBjaGVjayBmb3IgZXJyb3JzICovCiAgICAgaWYgKCBwQXNjLT5hc2NfY29uICYgQVNDQ09OX09FICkKICAgICB7Ci0gICAgICAgIFNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUk9FKTsKLSAgICAgICAgcmV0dXJuOworCVNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUk9FKTsKKwlyZXR1cm47CiAgICAgfQogfQogCkBAIC0zMjEsNyArMzIxLDcgQEAKIAogICAgIHN5bWJvbF9tYXNrID0KIAkoKEFTQ19PUFRJT05TICYgQVNDT1BUX0NTSVpFKSA9PSBBU0NPUFRfQ1M3KSA/ICgweDdmKSA6ICgweGZmKTsKLSAgICAKKwogICAgIGMgPSAoY2hhcikocEFzYy0+YXNjX3JidWYgJiBzeW1ib2xfbWFzayk7CiAKICNpZm5kZWYgQVNDX0ZJRk9fUFJFU0VOVApAQCAtMzM4LDMwICszMzgsMzAgQEAKICNpZmRlZiBBU0NfRklGT19QUkVTRU5UCiAgICAgaWYgKCAocEFzYy0+YXNjX2ZzdGF0ICYgQVNDRlNUQVRfUlhGRkxNQVNLKSA9PSAwICkKICAgICB7Ci0gICAgICAgIHJlcyA9IDA7CisJcmVzID0gMDsKICAgICB9CiAjZWxzZQogICAgIGlmICghKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopKFNGUElfSU5UQ09OX0JBU0VBRERSICsgRkJTX0lTUikgJgotCQkJICAgIAkJCQkJRkJTX0lTUl9BUikpCi0gICAgCisJCQkJCQkJCUZCU19JU1JfQVIpKQorCiAgICAgewotICAgICAgICByZXMgPSAwOworCXJlcyA9IDA7CiAgICAgfQogI2VuZGlmCiAgICAgZWxzZSBpZiAoIHBBc2MtPmFzY19jb24gJiBBU0NDT05fRkUgKQogICAgIHsKLSAgICAgICAgU0VUX0JJVChwQXNjLT5hc2Nfd2hiY29uLCBBU0NXSEJDT05fQ0xSRkUpOwotICAgICAgICByZXMgPSAwOworCVNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUkZFKTsKKwlyZXMgPSAwOwogICAgIH0KICAgICBlbHNlIGlmICggcEFzYy0+YXNjX2NvbiAmIEFTQ0NPTl9QRSApCiAgICAgewotICAgICAgICBTRVRfQklUKHBBc2MtPmFzY193aGJjb24sIEFTQ1dIQkNPTl9DTFJQRSk7Ci0gICAgICAgIHJlcyA9IDA7CisJU0VUX0JJVChwQXNjLT5hc2Nfd2hiY29uLCBBU0NXSEJDT05fQ0xSUEUpOworCXJlcyA9IDA7CiAgICAgfQogICAgIGVsc2UgaWYgKCBwQXNjLT5hc2NfY29uICYgQVNDQ09OX09FICkKICAgICB7Ci0gICAgICAgIFNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUk9FKTsKLSAgICAgICAgcmVzID0gMDsKKwlTRVRfQklUKHBBc2MtPmFzY193aGJjb24sIEFTQ1dIQkNPTl9DTFJPRSk7CisJcmVzID0gMDsKICAgICB9CiAKICAgICByZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvY3B1L21pcHMvc2VyaWFsLmggYi9jcHUvbWlwcy9zZXJpYWwuaAppbmRleCBlZTYzMzYwLi43ZmZkY2ZhIDEwMDY0NAotLS0gYS9jcHUvbWlwcy9zZXJpYWwuaAorKysgYi9jcHUvbWlwcy9zZXJpYWwuaApAQCAtMjQsNyArMjQsNyBAQAogCiAjaWZkZWYgSU5DQUFTQ19VU0VfRkRWCiAgICAjZGVmaW5lIElOQ0FBU0NfRkRWX0xPV19CQVVEUkFURSAgICAgICAgNzEKLSAgICNkZWZpbmUgSU5DQUFTQ19GRFZfSElHSF9CQVVEUkFURSAgICAgICA0NTMgICAKKyAgICNkZWZpbmUgSU5DQUFTQ19GRFZfSElHSF9CQVVEUkFURSAgICAgICA0NTMKICNlbmRpZiAvKklOQ0FBU0NfVVNFX0ZEViovCiAKIApAQCAtNDEsNyArNDEsNyBAQAogI2RlZmluZSBJTkNBQVNDX0lSUV9MSU5FX0VJUiAgICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAvKiBFSVIgLSBFcnIgKi8KICNkZWZpbmUgSU5DQUFTQ19JUlFfTElORV9UQklSICAgICAgICAgICAweDAwMDgwMDAwICAgICAgLyogVEJJUiAtIFR4IEJ1ZiovCiAKLS8qIGludGVycnVwdCBjb250cm9sbGVyIGFjY2VzcyBtYWNyb3MgKi8gICAgCisvKiBpbnRlcnJ1cHQgY29udHJvbGxlciBhY2Nlc3MgbWFjcm9zICovCiAjZGVmaW5lIEFTQ19JTlRFUlJVUFRTX0VOQUJMRShYKSAgXAogICAgKigodm9sYXRpbGUgdW5zaWduZWQgaW50KikgSU5DQV9JUF9JQ1VfSU0yX0lFUikgfD0gWDsKICNkZWZpbmUgQVNDX0lOVEVSUlVQVFNfRElTQUJMRShYKSBcCkBAIC05Niw5ICs5Niw5IEBACiAjZGVmaW5lIEFTQ0FCQ09OX0ZDREVURU4gICAgMHgwMDEwCiAjZGVmaW5lIEFTQ0FCQ09OX0VNTUFTSyAgICAgMHgwMzAwCiAgICAgI2RlZmluZSBBU0NBQkNPTl9FTU9GRiAgICAgICAgICA4Ci0gICAgICAgICNkZWZpbmUgQVNDQUJDT05fRU1fRElTQUIgICAgICAgMHgwCi0gICAgICAgICNkZWZpbmUgQVNDQUJDT05fRU1fRFVSQUIgICAgICAgMHgxCi0gICAgICAgICNkZWZpbmUgQVNDQUJDT05fRU1fQUxXQVlTICAgICAgMHgyCisJI2RlZmluZSBBU0NBQkNPTl9FTV9ESVNBQiAgICAgICAweDAKKwkjZGVmaW5lIEFTQ0FCQ09OX0VNX0RVUkFCICAgICAgIDB4MQorCSNkZWZpbmUgQVNDQUJDT05fRU1fQUxXQVlTICAgICAgMHgyCiAjZGVmaW5lIEFTQ0FCQ09OX1RYSU5WICAgICAgMHgwNDAwCiAjZGVmaW5lIEFTQ0FCQ09OX1JYSU5WICAgICAgMHgwODAwCiAKQEAgLTE3NSw0ICsxNzUsMyBAQAogfSBpbmNhQXNjX3Q7CiAKICNlbmRpZiAvKiBfX0lOQ2luY2FBc2NTaW9oICovCi0KZGlmZiAtLWdpdCBhL2NwdS9taXBzL3N0YXJ0LlMgYi9jcHUvbWlwcy9zdGFydC5TCmluZGV4IGI1MDQzOTMuLjEyMTI5ZGUgMTAwNjQ0Ci0tLSBhL2NwdS9taXBzL3N0YXJ0LlMKKysrIGIvY3B1L21pcHMvc3RhcnQuUwpAQCAtNjUsNyArNjUsNyBAQAogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTQpCiAJUlZFQ0VOVChyb21SZXNlcnZlZCwxNSkKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDE2KQotCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTcpIAorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTcpCiAJUlZFQ0VOVChyb21SZXNlcnZlZCwxOCkKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDE5KQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMjApCkBAIC0xMTEsNyArMTExLDcgQEAKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDYwKQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNjEpCiAJUlZFQ0VOVChyb21SZXNlcnZlZCw2MikKLQlSVkVDRU5UKHJvbVJlc2VydmVkLDYzKSAKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDYzKQogCVhWRUNFTlQocm9tRXhjSGFuZGxlLDB4MjAwKQkvKiBiZmMwMDIwMDogUjQwMDAgdGxibWlzcyB2ZWN0b3IgKi8KIAlSVkVDRU5UKHJvbVJlc2VydmVkLDY1KQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNjYpCkBAIC0xMjcsNyArMTI3LDcgQEAKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDc2KQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNzcpCiAJUlZFQ0VOVChyb21SZXNlcnZlZCw3OCkKLQlSVkVDRU5UKHJvbVJlc2VydmVkLDc5KSAKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDc5KQogCVhWRUNFTlQocm9tRXhjSGFuZGxlLDB4MjgwKQkvKiBiZmMwMDI4MDogUjQwMDAgeHRsYm1pc3MgdmVjdG9yICovCiAJUlZFQ0VOVChyb21SZXNlcnZlZCw4MSkKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDgyKQpAQCAtMTQzLDcgKzE0Myw3IEBACiAJUlZFQ0VOVChyb21SZXNlcnZlZCw5MikKIAlSVkVDRU5UKHJvbVJlc2VydmVkLDkzKQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsOTQpCi0JUlZFQ0VOVChyb21SZXNlcnZlZCw5NSkgCisJUlZFQ0VOVChyb21SZXNlcnZlZCw5NSkKIAlYVkVDRU5UKHJvbUV4Y0hhbmRsZSwweDMwMCkJLyogYmZjMDAzMDA6IFI0MDAwIGNhY2hlIHZlY3RvciAqLwogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsOTcpCiAJUlZFQ0VOVChyb21SZXNlcnZlZCw5OCkKQEAgLTE3Niw3ICsxNzYsNyBAQAogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTI1KQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTI2KQogCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTI3KQotICAgCisKIAkvKiBXZSBob3BlIHRoZXJlIGFyZSBubyBtb3JlIHJlc2VydmVkIHZlY3RvcnMhCiAJICogMTI4ICogOCA9PSAxMDI0ID09IDB4NDAwCiAJICogc28gdGhpcyBpcyBhZGRyZXNzIFJfVkVDKzB4NDAwID09IDB4YmZjMDA0MDAKQEAgLTIzNyw3ICsyMzcsNyBAQAogCW5vcAogI2VuZGlmCiAKLQkvKiBJbml0aWFsaXplIGFueSBleHRlcm5hbCBtZW1vcnkuIAorCS8qIEluaXRpYWxpemUgYW55IGV4dGVybmFsIG1lbW9yeS4KIAkgKi8KIAliYWwJbWVtc2V0dXAKIAlub3AKQEAgLTMwMCw3ICszMDAsNyBAQAogCXN1YglncCwgQ0ZHX01PTklUT1JfQkFTRQogCWFkZAlncCwgYTIJCQkvKiBncCBub3cgYWRqdXN0ZWQJCSovCiAJc3ViCXQ2LCBncCwgdDYJCS8qIHQ2IDwtLSByZWxvY2F0aW9uIG9mZnNldAkqLwotCQorCiAJbGkJdDAsIENGR19NT05JVE9SX0JBU0UKIAlsYQl0MywgaW5fcmFtCiAJbHcJdDIsIC0xMih0MykJLyogdDIgPC0tIHVib290X2VuZF9kYXRhCSovCkBAIC0zNjMsMTQgKzM2MywxMyBAQAogMToJYWRkaQl0MSwgNAogCWJsdGwJdDEsIHQyLCAxYgogCXN3CXplcm8sIDAodDEpCS8qIGRlbGF5IHNsb3QJCQkqLwotCQorCiAJbW92ZQlhMCwgYTEKIAlsYQl0OSwgYm9hcmRfaW5pdF9yCiAJagl0OQogCW1vdmUJYTEsIGEyCQkvKiBkZWxheSBzbG90CQkJKi8KIAogCS5lbmQJcmVsb2NhdGVfY29kZQotCQogCiAKIAkvKiBFeGNlcHRpb24gaGFuZGxlcnMuCkBAIC0zODAsNCArMzc5LDMgQEAKIAogcm9tRXhjSGFuZGxlOgogCWIgcm9tRXhjSGFuZGxlCi0KZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHgvTWFrZWZpbGUgYi9jcHUvbXBjNXh4L01ha2VmaWxlCmluZGV4IGMwNWIzOTQuLmVlMjBkZGEgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHgvTWFrZWZpbGUKKysrIGIvY3B1L21wYzV4eC9NYWtlZmlsZQpAQCAtMjMsMTAgKzIzLDEwIEBACiAKICMKICMgRmlsZToJCQljcHUvbXBjNXh4L01ha2VmaWxlCi0jIAorIwogIyBEaXNjcmlwdGlvbjoJCU1ha2VmaWxlIHRvIGJ1aWxkIG1wYzV4eCBjcHUgY29uZmlndXJhdGlvbi4KICMJCQlXaWxsIGluY2x1ZGUgdG9wIGNvbmZpZy5tayB3aGljaCBpdHNlbGZzCi0jCQkJdXNlcyB0aGUgZGVmaW5pdGlvbnMgbWFkZSBpbiBjcHUvbXBjNXh4L2NvbmZpZy5tayAKKyMJCQl1c2VzIHRoZSBkZWZpbml0aW9ucyBtYWRlIGluIGNwdS9tcGM1eHgvY29uZmlnLm1rCiAjCiAKIApAQCAtMzQsNyArMzQsNyBAQAogCiBMSUIJPSBsaWIkKENQVSkuYQogCi1TVEFSVAk9IHN0YXJ0LlMgCitTVEFSVAk9IHN0YXJ0LlMKIE9CSlMJPSBzZXJpYWwubyBjcHUubyBjcHVfaW5pdC5vIGludGVycnVwdHMubyB0cmFwcy5vIHNwZWVkLm8KIAogYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eC9jb25maWcubWsgYi9jcHUvbXBjNXh4L2NvbmZpZy5tawppbmRleCBkMzAyZDQ4Li5jZmVkNDk5IDEwMDY0NAotLS0gYS9jcHUvbXBjNXh4L2NvbmZpZy5taworKysgYi9jcHUvbXBjNXh4L2NvbmZpZy5tawpAQCAtMjMsMTIgKzIzLDExIEBACiAKICMKICMgRmlsZToJCQljb25maWcubWsKLSMgCisjCiAjIERpc2NyaXB0aW9uOgkJY29tcGlsZXIgZmxhZ3MgYW5kIG1ha2UgZGVmaW5pdGlvbnMKICMKLSAKKwogCiBQTEFURk9STV9SRUxGTEFHUyArPSAJLW1yZWxvY2F0YWJsZSAtZmZpeGVkLXIxNCAtbWVhYmkKIAogUExBVEZPUk1fQ1BQRkxBR1MgKz0JLURDT05GSUdfNXh4IC1mZml4ZWQtcjIgLWZmaXhlZC1yMjkgIC1tcG93ZXJwYyAtbXNvZnQtZmxvYXQKLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eC9jcHUuYyBiL2NwdS9tcGM1eHgvY3B1LmMKaW5kZXggNWIzYmQyNi4uY2M2OTUxMSAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9jcHUuYworKysgYi9jcHUvbXBjNXh4L2NwdS5jCkBAIC0xNywxNSArMTcsMTUgQEAKICAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIAorICogRm91bmRhdGlvbiwKICAqLwogCiAvKgogICogRmlsZToJCWNwdS5jCi0gKiAKLSAqIERpc2NyaXB0aW9uOgkJU29tZSBjcHUgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIHdhdGNoZG9nLCAKKyAqCisgKiBEaXNjcmlwdGlvbjoJCVNvbWUgY3B1IHNwZWNpZmljIGZ1bmN0aW9uIGZvciB3YXRjaGRvZywKICAqICAgICAgICAgICAgICAgICAgICAgIGNwdSB2ZXJzaW9uIHRlc3QsIGNsb2NrIHNldHRpbmcgLi4uCi0gKiAKKyAqCiAgKi8KIAogCkBAIC03NCw3ICs3NCw3IEBACiB9CiAKIC8qCi0gKiBDYWxsZWQgYnkgbWFjcm8gV0FUQ0hET0dfUkVTRVQgCisgKiBDYWxsZWQgYnkgbWFjcm8gV0FUQ0hET0dfUkVTRVQKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQogdm9pZCB3YXRjaGRvZ19yZXNldCAodm9pZCkKQEAgLTkzLDcgKzkzLDcgQEAKIHsKIAkvKiBVc2UgdGhlIE1QQzV4eCBJbnRlcm5hbCBXYXRjaGRvZyAqLwogCWltbXItPmltX3NpdV9jb25mLnNjX3N3c3IgPSAweDU1NmM7CS8qIFByZXZlbnQgU1cgdGltZS1vdXQgKi8KLQlpbW1yLT5pbV9zaXVfY29uZi5zY19zd3NyID0gMHhhYTM5OyAgICAKKwlpbW1yLT5pbV9zaXVfY29uZi5zY19zd3NyID0gMHhhYTM5OwogfQogCiAjZW5kaWYgLyogQ09ORklHX1dBVENIRE9HICovCkBAIC0xMjQsMzIgKzEyNCwzMSBAQAogCiAKIC8qCi0gKiBSZXNldCBib2FyZCAKKyAqIFJlc2V0IGJvYXJkCiAgKi8KIGludCBkb19yZXNldCAoY21kX3RibF90ICogY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXVsb25nIGFkZHI7Ci0JCisKIAkvKiBJbnRlcnJ1cHRzIG9mZiwgZW5hYmxlIHJlc2V0ICovCi0gICAgICAgIF9fYXNtX18gdm9sYXRpbGUJKCIgIG10c3ByCTgxLCAlcjAJCVxuXHQiCisJX19hc21fXyB2b2xhdGlsZQkoIiAgbXRzcHIJODEsICVyMAkJXG5cdCIKIAkJCQkgIiAgbWZtc3IJJXIzCQlcblx0IgogCQkJCSAiICBybHdpbm0JJXIzMSwlcjMsMCwyNSwyM1xuXHQiCiAJCQkJICIgIG10bXNyCSVyMzEJCVxuXHQiKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogVHJ5aW5nIHRvIGV4ZWN1dGUgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gYXQgYSBub24tZXhpc3RpbmcgYWRkcmVzcwotICAgICAgICAgKiBzaG91bGQgY2F1c2UgYSBtYWNoaW5lIGNoZWNrLCByZXN1bHRpbmcgaW4gcmVzZXQKLSAgICAgICAgICovCisJLyoKKwkgKiBUcnlpbmcgdG8gZXhlY3V0ZSB0aGUgbmV4dCBpbnN0cnVjdGlvbiBhdCBhIG5vbi1leGlzdGluZyBhZGRyZXNzCisJICogc2hvdWxkIGNhdXNlIGEgbWFjaGluZSBjaGVjaywgcmVzdWx0aW5nIGluIHJlc2V0CisJICovCiAjaWZkZWYgQ0ZHX1JFU0VUX0FERFJFU1MKLSAgICAgICAgYWRkciA9IENGR19SRVNFVF9BRERSRVNTOworCWFkZHIgPSBDRkdfUkVTRVRfQUREUkVTUzsKICNlbHNlCi0gICAgICAgIC8qCi0gICAgICAgICAqIG5vdGU6IHdoZW4gQ0ZHX01PTklUT1JfQkFTRSBwb2ludHMgdG8gYSBSQU0gYWRkcmVzcywgQ0ZHX01PTklUT1JfQkFTRSAgICAgICAgICogLSBzaXplb2YgKHVsb25nKSBpcyB1c3VhbGx5IGEgdmFsaWQgYWRkcmVzcy4gQmV0dGVyIHBpY2sgYW4gYWRkcmVzcwotICAgICAgICAgKiBrbm93biB0byBiZSBpbnZhbGlkIG9uIHlvdXIgc3lzdGVtIGFuZCBhc3NpZ24gaXQgdG8gQ0ZHX1JFU0VUX0FERFJFU1MuCi0gICAgICAgICAqICIodWxvbmcpLTEiIHVzZWQgdG8gYmUgYSBnb29kIGNob2ljZSBmb3IgbWFueSBzeXN0ZW1zLi4uCi0gICAgICAgICAqLwotICAgICAgICBhZGRyID0gQ0ZHX01PTklUT1JfQkFTRSAtIHNpemVvZiAodWxvbmcpOworCS8qCisJICogbm90ZTogd2hlbiBDRkdfTU9OSVRPUl9CQVNFIHBvaW50cyB0byBhIFJBTSBhZGRyZXNzLCBDRkdfTU9OSVRPUl9CQVNFICAgICAgICAgKiAtIHNpemVvZiAodWxvbmcpIGlzIHVzdWFsbHkgYSB2YWxpZCBhZGRyZXNzLiBCZXR0ZXIgcGljayBhbiBhZGRyZXNzCisJICoga25vd24gdG8gYmUgaW52YWxpZCBvbiB5b3VyIHN5c3RlbSBhbmQgYXNzaWduIGl0IHRvIENGR19SRVNFVF9BRERSRVNTLgorCSAqICIodWxvbmcpLTEiIHVzZWQgdG8gYmUgYSBnb29kIGNob2ljZSBmb3IgbWFueSBzeXN0ZW1zLi4uCisJICovCisJYWRkciA9IENGR19NT05JVE9SX0JBU0UgLSBzaXplb2YgKHVsb25nKTsKICNlbmRpZgogCSgodm9pZCAoKikgKHZvaWQpKSBhZGRyKSAoKTsKIAlyZXR1cm4gMTsKIH0KLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzV4eC9jcHVfaW5pdC5jIGIvY3B1L21wYzV4eC9jcHVfaW5pdC5jCmluZGV4IDI3Y2YzZDYuLmUxOWQwZjQgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM1eHgvY3B1X2luaXQuYworKysgYi9jcHUvbXBjNXh4L2NwdV9pbml0LmMKQEAgLTE2LDEyICsxNiwxMiBAQAogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgCisgKiBGb3VuZGF0aW9uLAogICovCiAKIC8qCiAgKiBGaWxlOgkJY3B1X2luaXQuYwotICogCisgKgogICogRGlzY3JpcHRpb246CQlDb250YWlucyBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgdG8gc2V0dXAKICAqICAgIAkJCXRoZSBjcHUgcHJvcGVybHkKICAqCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8d2F0Y2hkb2cuaD4KIAogLyoKLSAqIFNldHVwIGVzc2VudGlhbCBjcHUgcmVnaXN0ZXJzIHRvIHJ1biAKKyAqIFNldHVwIGVzc2VudGlhbCBjcHUgcmVnaXN0ZXJzIHRvIHJ1bgogICovCiB2b2lkIGNwdV9pbml0X2YgKHZvbGF0aWxlIGltbWFwX3QgKiBpbW1yKQogewpAQCAtNDUsNyArNDUsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCiAJcmVzZXRfNXh4X3dhdGNoZG9nIChpbW1yKTsKLSNlbmRpZiAKKyNlbmRpZgogCiAJLyogU0lVTUNSIC0gY29udGFpbnMgZGVidWcgcGluIGNvbmZpZ3VyYXRpb24gKi8KIAlpbW1yLT5pbV9zaXVfY29uZi5zY19zaXVtY3IgfD0gQ0ZHX1NJVU1DUjsKQEAgLTU2LDEwICs1NiwxMCBAQAogCiAJLyogRnVsbCBJTUIgYnVzIHNwZWVkICovCiAJaW1tci0+aW1fdWltYi51aW1iX3VtY3IgPSBDRkdfVU1DUjsKLQkKKwogCS8qIFRpbWUgYmFzZSBhbmQgZGVjcmVtZW50ZXIgd2lsbCBiZSBlbmFibGVzIChUQkUpICovCiAJLyogaW4gaW5pdF90aW1lYmFzZSgpIGluIHRpbWUuYyBjYWxsZWQgZnJvbSBib2FyZF9pbml0X2YoKS4gKi8KLSAKKwogCS8qIEluaXRpYWxpemUgdGhlIFBJVC4gVW5sb2NrIFBJU0NSSyAqLwogCWltbXItPmltX3NpdGsuc2l0a19waXNjcmsgPSBLQVBXUl9LRVk7CiAJaW1tci0+aW1fc2l0LnNpdF9waXNjciA9IENGR19QSVNDUjsKZGlmZiAtLWdpdCBhL2NwdS9tcGM1eHgvaW50ZXJydXB0cy5jIGIvY3B1L21wYzV4eC9pbnRlcnJ1cHRzLmMKaW5kZXggMjgyYzMxNi4uNDYxODY4MCAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L21wYzV4eC9pbnRlcnJ1cHRzLmMKQEAgLTE3LDEyICsxNywxMiBAQAogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgCisgKiBGb3VuZGF0aW9uLAogICovCiAKIC8qCiAgKiBGaWxlOgkJaW50ZXJydXB0LmMKLSAqIAorICoKICAqIERpc2NyaXB0aW9uOgkJQ29udGFpbnMgaW50ZXJydXB0IHJvdXRpbmVzIG5lZWRlZCBieSBVLUJvb3QKICAqCiAgKi8KQEAgLTQ2LDcgKzQ2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaW50ZXJydXB0X2FjdGlvbiBpcnFfdmVjc1tOUl9JUlFTXTsKIAogLyoKLSAqIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMgCisgKiBMb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAgKi8KIHN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZ2V0X21zciAodm9pZCkKIHsKQEAgLTc4LDE1ICs3OCwxNSBAQAogfQogCiAvKgotICogRW5hYmxlIGludGVycnVwdHMgCi0gKi8gCisgKiBFbmFibGUgaW50ZXJydXB0cworICovCiB2b2lkIGVuYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQogewogCXNldF9tc3IgKGdldF9tc3IgKCkgfCBNU1JfRUUpOwogfQogCi0vKiAKLSAqIFJldHVybnMgZmxhZyBpZiBNU1JfRUUgd2FzIHNldCBiZWZvcmUgCisvKgorICogUmV0dXJucyBmbGFnIGlmIE1TUl9FRSB3YXMgc2V0IGJlZm9yZQogICovCiBpbnQgZGlzYWJsZV9pbnRlcnJ1cHRzICh2b2lkKQogewpAQCAtOTcsNyArOTcsNyBAQAogfQogCiAvKgotICogSW5pdGlhbGlzZSBpbnRlcnJ1cHRzIAorICogSW5pdGlhbGlzZSBpbnRlcnJ1cHRzCiAgKi8KIAogaW50IGludGVycnVwdF9pbml0ICh2b2lkKQpAQCAtMjA5LDcgKzIwOSw3IEBACiB2b2xhdGlsZSB1bG9uZyB0aW1lc3RhbXAgPSAwOwogCiAvKgotICogIFRpbWVyIGludGVycnVwdCAtIGdldHMgY2FsbGVkIHdoZW4gIGJpdCAwIG9mIERFQyBjaGFuZ2VzIGZyb20gCisgKiAgVGltZXIgaW50ZXJydXB0IC0gZ2V0cyBjYWxsZWQgd2hlbiAgYml0IDAgb2YgREVDIGNoYW5nZXMgZnJvbQogICogIDAuIERlY3JlbWVudGVyIGlzIGVuYWJsZWQgd2l0aCBiaXQgVEJFIGluIFRCU0NSLgogICovCiB2b2lkIHRpbWVyX2ludGVycnVwdCAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0yMjYsNyArMjI2LDcgQEAKIAlpbW1yLT5pbV9jbGtyc3RrLmNhcmtfcGxwcmNyayA9IEtBUFdSX0tFWTsKIAlfX2FzbV9fICgibm9wIik7CiAJaW1tci0+aW1fY2xrcnN0LmNhcl9wbHByY3IgfD0gUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUOwotCQorCiAJLyogUmVzdG9yZSBEZWNyZW1lbnRlciBDb3VudCAqLwogCXNldF9kZWMgKGRlY3JlbWVudGVyX2NvdW50KTsKIApAQCAtMjQ5LDcgKzI0OSw3IEBACiB9CiAKIC8qCi0gKiBSZXNldCB0aW1lciAKKyAqIFJlc2V0IHRpbWVyCiAgKi8KIHZvaWQgcmVzZXRfdGltZXIgKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4L3NlcmlhbC5jIGIvY3B1L21wYzV4eC9zZXJpYWwuYwppbmRleCA3MzhjMjc1Li40ODY4NzgyIDEwMDY0NAotLS0gYS9jcHUvbXBjNXh4L3NlcmlhbC5jCisrKyBiL2NwdS9tcGM1eHgvc2VyaWFsLmMKQEAgLTE3LDEzICsxNywxMyBAQAogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgCisgKiBGb3VuZGF0aW9uLAogICovCiAKIC8qCiAgKiBGaWxlOgkJc2VyaWFsLmMKLSAqIAotICogRGlzY3JpcHRpb246CQlTZXJpYWwgaW50ZXJmYWNlIGRyaXZlciBmb3IgU0NJMSBhbmQgU0NJMi4gCisgKgorICogRGlzY3JpcHRpb246CQlTZXJpYWwgaW50ZXJmYWNlIGRyaXZlciBmb3IgU0NJMSBhbmQgU0NJMi4KICAqICAgICAJCQlTaW5jZSB0aGlzIGNvZGUgd2lsbCBiZSBjYWxsZWQgZnJvbSBST00gdXNlCiAgKiAJCQlvbmx5IG5vbi1zdGF0aWMgbG9jYWwgdmFyaWFibGVzLgogICoKQEAgLTM2LDcgKzM2LDcgQEAKIAogCiAvKgotICogTG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAKKyAqIExvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAqLwogCiBzdGF0aWMgaW50IHJlYWR5X3RvX3NlbmQodm9pZCk7CkBAIC01NCwyNSArNTQsMjUgQEAKICNpZiBkZWZpbmVkKENPTkZJR181eHhfQ09OU19TQ0kxKQogCS8qIDEwLUJpdCwgMSBzdGFydCBiaXQsIDggZGF0YSBiaXQsIG5vIHBhcml0eSwgMSBzdG9wIGJpdCAqLwogCWltbXItPmltX3FzbWNtLnFzbWNtX3NjYzFyMSA9IFNDSV9NXzEwOwotCWltbXItPmltX3FzbWNtLnFzbWNtX3NjYzFyMSA9IFNDSV9URSB8IFNDSV9SRTsgCisJaW1tci0+aW1fcXNtY20ucXNtY21fc2NjMXIxID0gU0NJX1RFIHwgU0NJX1JFOwogI2Vsc2UKLQlpbW1yLT5pbV9xc21jbS5xc21jbV9zY2MycjEgPSBTQ0lfTV8xMDsgCisJaW1tci0+aW1fcXNtY20ucXNtY21fc2NjMnIxID0gU0NJX01fMTA7CiAJaW1tci0+aW1fcXNtY20ucXNtY21fc2NjMnIxID0gU0NJX1RFIHwgU0NJX1JFOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKIHZvaWQgc2VyaWFsX3B1dGMoY29uc3QgY2hhciBjKQoteyAgICAgICAgCit7CiAJdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVI7Ci0JCisKIAkvKiBUZXN0IGZvciBjb21wbGV0aXRpb24gKi8KIAlpZihyZWFkeV90b19zZW5kKCkpIHsKICNpZiBkZWZpbmVkKENPTkZJR181eHhfQ09OU19TQ0kxKQotCQlpbW1yLT5pbV9xc21jbS5xc21jbV9zYzFkciA9IChzaG9ydCljOyAKKwkJaW1tci0+aW1fcXNtY20ucXNtY21fc2MxZHIgPSAoc2hvcnQpYzsKICNlbHNlCiAJCWltbXItPmltX3FzbWNtLnFzbWNtX3NjMmRyID0gKHNob3J0KWM7Ci0jZW5kaWYJCQorI2VuZGlmCiAJCWlmKGMgPT0gJ1xuJykgewogCQkJaWYocmVhZHlfdG9fc2VuZCgpKTsKICNpZiBkZWZpbmVkKENPTkZJR181eHhfQ09OU19TQ0kxKQpAQCAtODUsMjcgKzg1LDI3IEBACiB9CiAKIGludCBzZXJpYWxfZ2V0Yyh2b2lkKQotewkKK3sKIAl2b2xhdGlsZSBpbW1hcF90ICppbW1yID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBzaG9ydCBzdGF0dXM7CiAJdW5zaWduZWQgY2hhciB0bXA7Ci0gICAgCisKIAkvKiBOZXcgZGF0YSA/ICovCiAJZG8gewogI2lmIGRlZmluZWQoQ09ORklHXzV4eF9DT05TX1NDSTEpCi0gICAgICAJCXN0YXR1cyA9IGltbXItPmltX3FzbWNtLnFzbWNtX3NjMXNyOyAKKwkJc3RhdHVzID0gaW1tci0+aW1fcXNtY20ucXNtY21fc2Mxc3I7CiAjZWxzZQogCQlzdGF0dXMgPSBpbW1yLT5pbV9xc21jbS5xc21jbV9zYzJzcjsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCi0JCXJlc2V0XzV4eF93YXRjaGRvZyAoaW1tcik7CQorCQlyZXNldF81eHhfd2F0Y2hkb2cgKGltbXIpOwogI2VuZGlmCi0gIAl9IHdoaWxlICgoc3RhdHVzICYgU0NJX1JEUkYpID09IDApOwotICAgIAkJCisJfSB3aGlsZSAoKHN0YXR1cyAmIFNDSV9SRFJGKSA9PSAwKTsKKwogCS8qIFJlYWQgZGF0YSAqLwogI2lmIGRlZmluZWQoQ09ORklHXzV4eF9DT05TX1NDSTEpCi0JdG1wID0gKHVuc2lnbmVkIGNoYXIpKGltbXItPmltX3FzbWNtLnFzbWNtX3NjMWRyICYgU0NJX1NDWERSX01LKTsgCisJdG1wID0gKHVuc2lnbmVkIGNoYXIpKGltbXItPmltX3FzbWNtLnFzbWNtX3NjMWRyICYgU0NJX1NDWERSX01LKTsKICNlbHNlCiAJdG1wID0gKHVuc2lnbmVkIGNoYXIpKCBpbW1yLT5pbV9xc21jbS5xc21jbV9zYzJkciAmIFNDSV9TQ1hEUl9NSyk7CiAjZW5kaWYKQEAgLTExNSwyNyArMTE1LDI3IEBACiBpbnQgc2VyaWFsX3RzdGMoKQogewogCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwotICAJc2hvcnQgc3RhdHVzOworCXNob3J0IHN0YXR1czsKIAogCS8qIE5ldyBkYXRhIGNoYXJhY3RlciA/ICovCiAjaWYgZGVmaW5lZChDT05GSUdfNXh4X0NPTlNfU0NJMSkKLQlzdGF0dXMgPSBpbW1yLT5pbV9xc21jbS5xc21jbV9zYzFzcjsgCisJc3RhdHVzID0gaW1tci0+aW1fcXNtY20ucXNtY21fc2Mxc3I7CiAjZWxzZQogCXN0YXR1cyA9IGltbXItPmltX3FzbWNtLnFzbWNtX3NjMnNyOwogI2VuZGlmCi0JcmV0dXJuIChzdGF0dXMgJiBTQ0lfUkRSRik7IAorCXJldHVybiAoc3RhdHVzICYgU0NJX1JEUkYpOwogfQogCiB2b2lkIHNlcmlhbF9zZXRicmcgKHZvaWQpCiB7CiAJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXNob3J0IHNjeGJyOwogCiAJLyogU2V0IGJhdWRyYXRlICovCiAJc2N4YnIgPSAoZ2QtPmNwdV9jbGsgLyAoMzIgKiBnZC0+YmF1ZHJhdGUpKTsKICNpZiBkZWZpbmVkKENPTkZJR181eHhfQ09OU19TQ0kxKQotCWltbXItPmltX3FzbWNtLnFzbWNtX3NjYzFyMCA9IChzY3hiciAmIFNDSV9TQ1hCUl9NSyk7IAorCWltbXItPmltX3FzbWNtLnFzbWNtX3NjYzFyMCA9IChzY3hiciAmIFNDSV9TQ1hCUl9NSyk7CiAjZWxzZQogCWltbXItPmltX3FzbWNtLnFzbWNtX3NjYzJyMCA9IChzY3hiciAmIFNDSV9TQ1hCUl9NSyk7CiAjZW5kaWYKQEAgLTE1NCwxOCArMTU0LDE3IEBACiAJdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgc2hvcnQgc3RhdHVzOwogCi0gIAlkbyB7CisJZG8gewogI2lmIGRlZmluZWQoQ09ORklHXzV4eF9DT05TX1NDSTEpCi0gICAgCQlzdGF0dXMgPSBpbW1yLT5pbV9xc21jbS5xc21jbV9zYzFzcjsgCisJCXN0YXR1cyA9IGltbXItPmltX3FzbWNtLnFzbWNtX3NjMXNyOwogI2Vsc2UKIAkJc3RhdHVzID0gaW1tci0+aW1fcXNtY20ucXNtY21fc2Myc3I7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQotCQlyZXNldF81eHhfd2F0Y2hkb2cgKGltbXIpOwkKKwkJcmVzZXRfNXh4X3dhdGNoZG9nIChpbW1yKTsKICNlbmRpZgotICAJfSB3aGlsZSAoKHN0YXR1cyAmIFNDSV9URFJFKSA9PSAwKTsKLQlyZXR1cm4gMTsgCisJfSB3aGlsZSAoKHN0YXR1cyAmIFNDSV9URFJFKSA9PSAwKTsKKwlyZXR1cm4gMTsKIAogfQotCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4L3NwZWVkLmMgYi9jcHUvbXBjNXh4L3NwZWVkLmMKaW5kZXggODA5OGM5OS4uZjYwOTdmNSAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9zcGVlZC5jCisrKyBiL2NwdS9tcGM1eHgvc3BlZWQuYwpAQCAtMTcsMTQgKzE3LDE0IEBACiAgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCAKKyAqIEZvdW5kYXRpb24sCiAgKi8KIAogLyoKICAqIEZpbGU6CQlzcGVlZC5jCi0gKiAKKyAqCiAgKiBEaXNjcmlwdGlvbjoJCVByb3ZpZGVzIGNwdSBzcGVlZCBjYWxjdWxhdGlvbgotICogCisgKgogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KQEAgLTQ5LDggKzQ5LDggQEAKIAkJZ2QtPmNwdV9jbGsgPSB2Y29vdXQgLyAoMl4oKChpbW1yLT5pbV9jbGtyc3QuY2FyX3NjY3IgJiBTQ0NSX0RGTkxfTVNLKSA+PiBTQ0NSX0RGTkxfU0hJRlQpICsgMSkpOwogCX0gZWxzZSB7CiAgICAgCQlnZC0+Y3B1X2NsayA9IHZjb291dCAvICgyXihpbW1yLT5pbV9jbGtyc3QuY2FyX3NjY3IgJiBTQ0NSX0RGTkhfTVNLKSk7Ci0gICAgCX0JCi0JCisgICAgCX0KKwogI2Vsc2UgLyogQ09ORklHXzV4eF9HQ0xLX0ZSRVEgKi8KIAlnZC0+YnVzX2NsayA9IENPTkZJR181eHhfR0NMS19GUkVROwogI2VuZGlmIC8qIENPTkZJR181eHhfR0NMS19GUkVRICovCmRpZmYgLS1naXQgYS9jcHUvbXBjNXh4L3N0YXJ0LlMgYi9jcHUvbXBjNXh4L3N0YXJ0LlMKaW5kZXggNjk0ZGU3Ny4uM2I2ZDM0NCAxMDA2NDQKLS0tIGEvY3B1L21wYzV4eC9zdGFydC5TCisrKyBiL2NwdS9tcGM1eHgvc3RhcnQuUwpAQCAtMyw3ICszLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkJTWFnbnVzIERhbW0gPGtpZXJheXBjMDEucC55LmtpZS5lcmEuZXJpY3Nzb24uc2U+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBNYXJ0aW4gV2luaXN0b2VyZmVyLCBtYXJ0aW53aW5pc3RvZXJmZXJAZ214LmNoLgotICogCisgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCiAgKgpAQCAtMjUsNyArMjUsNyBAQAogCiAvKgogICogRmlsZToJCXN0YXJ0LlMKLSAqIAorICoKICAqIERpc2NyaXB0aW9uOgkJc3RhcnR1cCBjb2RlCiAgKgogICovCkBAIC0zOSw5ICszOSw5IEBACiAKICNpbmNsdWRlIDxwcGNfYXNtLnRtcGw+CiAjaW5jbHVkZSA8cHBjX2RlZnMuaD4KLQkKKwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4JCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiAjaWZuZGVmICBDT05GSUdfSURFTlRfU1RSSU5HCiAjZGVmaW5lICBDT05GSUdfSURFTlRfU1RSSU5HICIiCkBAIC04OCw3ICs4OCw3IEBACiBfc3RhcnQ6CiAJbWZzcHIJcjMsIDYzOAogCWxpCXI0LCBDRkdfSVNCCQkJLyogU2V0IElTQiBiaXQgKi8KLQlvcglyMywgcjMsIHI0IAorCW9yCXIzLCByMywgcjQKIAltdHNwcgk2MzgsIHIzCiAJbGkJcjIxLCBCT09URkxBR19DT0xECQkvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSAkqLwogCWIJYm9vdF9jb2xkCkBAIC0xMzEsNyArMTMxLDcgQEAKIAogCS8qIEluaXRpYWxpemUgc29tZSBTUFJzIHRoYXQgYXJlIGhhcmQgdG8gYWNjZXNzIGZyb20gQwkJCSovCiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQkKKwogCWxpcyAgICAgcjMsIENGR19JTU1SQGggICAgICAgICAgCS8qIFBhc3MgSU1NUiBhcyBhcmcxIHRvIEMgcm91dGluZSAqLwogCWxpcwlyMiwgQ0ZHX0lOSVRfU1BfQUREUkBoCiAJb3JpCXIxLCByMiwgQ0ZHX0lOSVRfU1BfQUREUkBsCS8qIFNldCB1cCB0aGUgc3RhY2sgaW4gaW50ZXJuYWwgU1JBTSAqLwpAQCAtMTY5LDcgKzE2OSw2IEBACiAJYmwJYm9hcmRfaW5pdF9mCS8qIHJ1biAxc3QgcGFydCBvZiBib2FyZCBpbml0IGNvZGUgKGZyb20gRmxhc2gpICovCiAKIAotCiAJLmdsb2JsCV9zdGFydF9vZl92ZWN0b3JzCiBfc3RhcnRfb2ZfdmVjdG9yczoKIApAQCAtMzg5LDcgKzM4OCw3IEBACiAJU1lOQwogCXJmaQogCi0JCQorCiAvKgogICogdW5zaWduZWQgaW50IGdldF9pbW1yICh1bnNpZ25lZCBpbnQgbWFzaykKICAqCkBAIC00NzYsNyArNDc1LDcgQEAKIAlzdHd1CXIwLC00KHI3KQogCWJkbnoJM2IKIAotNDoJc3luYwkJCQorNDoJc3luYwogCWlzeW5jCiAKIC8qCkBAIC00OTMsOCArNDkyLDggQEAKIAkvKgogCSAqIFJlbG9jYXRpb24gRnVuY3Rpb24sIHIxNCBwb2ludCB0byBnb3QyKzB4ODAwMAogCSAqCi0gICAgICAgICAqIEFkanVzdCBnb3QyIHBvaW50ZXJzLCBubyBuZWVkIHRvIGNoZWNrIGZvciAwLCB0aGlzIGNvZGUKLSAgICAgICAgICogYWxyZWFkeSBwdXRzIGEgZmV3IGVudHJpZXMgaW4gdGhlIHRhYmxlLgorCSAqIEFkanVzdCBnb3QyIHBvaW50ZXJzLCBubyBuZWVkIHRvIGNoZWNrIGZvciAwLCB0aGlzIGNvZGUKKwkgKiBhbHJlYWR5IHB1dHMgYSBmZXcgZW50cmllcyBpbiB0aGUgdGFibGUuCiAJICovCiAJbGkJcjAsX19nb3QyX2VudHJpZXNAc2VjdG9mZkBsCiAJbGEJcjMsR09UKF9HT1QyX1RBQkxFXykKQEAgLTUwOCw3ICs1MDcsNyBAQAogCWJkbnoJMWIKIAogCS8qCi0gICAgICAgICAqIE5vdyBhZGp1c3QgdGhlIGZpeHVwcyBhbmQgdGhlIHBvaW50ZXJzIHRvIHRoZSBmaXh1cHMKKwkgKiBOb3cgYWRqdXN0IHRoZSBmaXh1cHMgYW5kIHRoZSBwb2ludGVycyB0byB0aGUgZml4dXBzCiAJICogaW4gY2FzZSB3ZSBuZWVkIHRvIG1vdmUgb3Vyc2VsdmVzIGFnYWluLgogCSAqLwogMjoJbGkJcjAsX19maXh1cF9lbnRyaWVzQHNlY3RvZmZAbApkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvTWFrZWZpbGUgYi9jcHUvbXBjODI0eC9NYWtlZmlsZQppbmRleCA3NDNjZWQ5Li4zYzAwZmM3IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9NYWtlZmlsZQorKysgYi9jcHUvbXBjODI0eC9NYWtlZmlsZQpAQCAtMjcsNyArMjcsNyBAQAogCiBTVEFSVAk9IHN0YXJ0LlMgZHJpdmVycy9pMmMvaTJjMi5vCiBPQkpTCT0gdHJhcHMubyBjcHUubyBjcHVfaW5pdC5vIGludGVycnVwdHMubyBzcGVlZC5vIFwKLSAgICAgICAgICBkcml2ZXJzL2VwaWMvZXBpYzEubyBkcml2ZXJzL2kyYy9pMmMxLm8gcGNpLm8gYmVkYnVnXzYwM2UubworCSAgZHJpdmVycy9lcGljL2VwaWMxLm8gZHJpdmVycy9pMmMvaTJjMS5vIHBjaS5vIGJlZGJ1Z182MDNlLm8KIAogYWxsOgkuZGVwZW5kICQoU1RBUlQpICQoTElCKQogCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9jcHUuYyBiL2NwdS9tcGM4MjR4L2NwdS5jCmluZGV4IDBkODIyZDUuLjMxMmRmZTIgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2NwdS5jCisrKyBiL2NwdS9tcGM4MjR4L2NwdS5jCkBAIC05Miw4ICs5Miw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1pbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqIGNtZHRwLCBiZF90ICogYmQsIGludCBmbGFnLCBpbnQgYXJnYywKLQkJCSAgY2hhciAqYXJndltdKQoraW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAl1bG9uZyBtc3IsIGFkZHI7CiAKQEAgLTExNCwxMSArMTEzLDExIEBACiAJYWRkciA9IENGR19SRVNFVF9BRERSRVNTOwogI2Vsc2UKIAkvKgotICAgICAgICAgKiBub3RlOiB3aGVuIENGR19NT05JVE9SX0JBU0UgcG9pbnRzIHRvIGEgUkFNIGFkZHJlc3MsCi0gICAgICAgICAqIENGR19NT05JVE9SX0JBU0UgLSBzaXplb2YgKHVsb25nKSBpcyB1c3VhbGx5IGEgdmFsaWQKLSAgICAgICAgICogYWRkcmVzcy4gQmV0dGVyIHBpY2sgYW4gYWRkcmVzcyBrbm93biB0byBiZSBpbnZhbGlkIG9uCi0gICAgICAgICAqIHlvdXIgc3lzdGVtIGFuZCBhc3NpZ24gaXQgdG8gQ0ZHX1JFU0VUX0FERFJFU1MuCi0gICAgICAgICAqICIodWxvbmcpLTEiIHVzZWQgdG8gYmUgYSBnb29kIGNob2ljZSBmb3IgbWFueSBzeXN0ZW1zLi4uCisJICogbm90ZTogd2hlbiBDRkdfTU9OSVRPUl9CQVNFIHBvaW50cyB0byBhIFJBTSBhZGRyZXNzLAorCSAqIENGR19NT05JVE9SX0JBU0UgLSBzaXplb2YgKHVsb25nKSBpcyB1c3VhbGx5IGEgdmFsaWQKKwkgKiBhZGRyZXNzLiBCZXR0ZXIgcGljayBhbiBhZGRyZXNzIGtub3duIHRvIGJlIGludmFsaWQgb24KKwkgKiB5b3VyIHN5c3RlbSBhbmQgYXNzaWduIGl0IHRvIENGR19SRVNFVF9BRERSRVNTLgorCSAqICIodWxvbmcpLTEiIHVzZWQgdG8gYmUgYSBnb29kIGNob2ljZSBmb3IgbWFueSBzeXN0ZW1zLi4uCiAJICovCiAJYWRkciA9IENGR19NT05JVE9SX0JBU0UgLSBzaXplb2YgKHVsb25nKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvY3B1X2luaXQuYyBiL2NwdS9tcGM4MjR4L2NwdV9pbml0LmMKaW5kZXggNjAyZjY1ZC4uM2I1ZmI3OSAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvY3B1X2luaXQuYworKysgYi9jcHUvbXBjODI0eC9jcHVfaW5pdC5jCkBAIC04NCw3ICs4NCw3IEBACiAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICA6IC8qIG5vIG91dHB1dCAqLyAgICAgICBcCiAgICAgICA6ICJyIiAoQ09ORklHX0FERFIpLCAiciIgKENPTkZJR19EQVRBKSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgInIiIChQQ0lTV0FQKGFkZHIgJiB+MykpLCAiciIgKFBDSVNXQVAoZGF0YSA8PCAxNikpICAgXAorCSJyIiAoUENJU1dBUChhZGRyICYgfjMpKSwgInIiIChQQ0lTV0FQKGRhdGEgPDwgMTYpKSAgIFwKICAgICAgICk7CiAKICAgICBNX0NPTkZJR19XUklURV9IQUxGV09SRChQQ0lBQ1IsIDB4ODAwMCk7CkBAIC0xNDUsOCArMTQ1LDggQEAKIAogI2lmIGRlZmluZWQoQ0ZHX0FTUklTRSkgJiYgZGVmaW5lZChDRkdfQVNGQUxMKQogICAgIENPTkZJR19XUklURV9XT1JEKE1DQ1IyLCBDRkdfUkVGSU5UIDw8IE1DQ1IyX1JFRklOVF9TSElGVCB8Ci0gICAgCQkJICAgICBDRkdfQVNSSVNFIDw8IE1DQ1IyX0FTUklTRV9TSElGVCB8Ci0gICAgCQkJICAgICBDRkdfQVNGQUxMIDw8IE1DQ1IyX0FTRkFMTF9TSElGVCk7CisJCQkgICAgIENGR19BU1JJU0UgPDwgTUNDUjJfQVNSSVNFX1NISUZUIHwKKwkJCSAgICAgQ0ZHX0FTRkFMTCA8PCBNQ0NSMl9BU0ZBTExfU0hJRlQpOwogI2Vsc2UKICAgICBDT05GSUdfV1JJVEVfV09SRChNQ0NSMiwgQ0ZHX1JFRklOVCA8PCBNQ0NSMl9SRUZJTlRfU0hJRlQpOwogI2VuZGlmCkBAIC0xOTYsMTMgKzE5NiwxMyBAQAogICAgIENPTkZJR19XUklURV9XT1JEKE1DQ1I0LAogCShDRkdfUFJFVE9BQ1QgPDwgTUNDUjRfUFJFVE9BQ1RfU0hJRlQpIHwKIAkoQ0ZHX0FDVFRPUFJFIDw8IE1DQ1I0X0FDVFRPUFJFX1NISUZUKSB8Ci0gICAgICAgIChDRkdfRVhUUk9NID8gTUNDUjRfRVhUUk9NIDogMCkgfAotICAgICAgICAoQ0ZHX1JFR0RJTU0gPyBNQ0NSNF9SRUdESU1NIDogMCkgfAorCShDRkdfRVhUUk9NID8gTUNDUjRfRVhUUk9NIDogMCkgfAorCShDRkdfUkVHRElNTSA/IE1DQ1I0X1JFR0RJTU0gOiAwKSB8CiAJKENGR19SRUdJU1RFUkRfVFlQRV9CVUZGRVIgPyBNQ0NSNF9SRUdJU1RFUkVEOiAwKSB8CiAJKChDRkdfQlNUT1BSRSAmIDB4MDAwMykgPDxNQ0NSNF9CU1RPUFJFMFRPMV9TSElGVCApIHwKIAkoQ0ZHX0RCVVNfU0laRTIgPDwgTUNDUjRfREJVU19TSVpFMl9TSElGVCkgfAogCSgoKENGR19TRE1PREVfQ0FTX0xBVCA8PDQpIHwgKENGR19TRE1PREVfV1JBUCA8PDMpIHwKLSAgICAgICAgICAgICAgKHZhbCA/IDIgOiAzKSkgPDwgTUNDUjRfU0RNT0RFX1NISUZUKSAgfAorCSAgICAgICh2YWwgPyAyIDogMykpIDw8IE1DQ1I0X1NETU9ERV9TSElGVCkgIHwKIAkoQ0ZHX0FDVE9SVyA8PCBNQ0NSNF9BQ1RUT1JXX1NISUZUKSB8CiAJKCgoQ0ZHX0JTVE9QUkUgJiAweDAzYzApID4+IDYpIDw8TUNDUjRfQlNUT1BSRTZUTzlfU0hJRlQgKSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvUkVBRE1FIGIvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvUkVBRE1FCmluZGV4IGFiNGI2OGIuLjA2ZjRiYzAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL1JFQURNRQorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9SRUFETUUKQEAgLTk4LDUgKzk4LDMgQEAKIDcuIFRoZSBETUEgZHJpdmVyIHJvdXRpbmVzIGNvbnRhaW5zIGEgc2V0CiAgICBvZiB1dGlsaXRpZXMsIFNldCBhbmQgR2V0LCBmb3IgaG9zdCBzeXN0ZW0KICAgIHRvIHF1ZXJ5IGFuZCBtb2RpZnkgdGhlIGRlc2lyZWQgRE1BIHJlZ2lzdGVycy4KLQotCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWExLmMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWExLmMKaW5kZXggOGMzODM0ZS4uOWM4NTI2NyAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hMS5jCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYTEuYwpAQCAtMTI5LDEyICsxMjksMTIgQEAKICAqIHNub29wIGlzIHRoZSBzbm9vcCBlbmFibGUgY29udHJvbAogICovCiBleHRlcm4gRE1BX1N0YXR1cyBETUFfZGlyZWN0X3RyYW5zZmVyKCBETUFfSU5URVJSVVBUX1NURUVSIGludF9zdGVlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9UUkFOU0ZFUl9UWVBFIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX0NIQU5ORUwgY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9TTk9PUF9NT0RFIHNub29wKQorCQkJCSAgICAgICBETUFfVFJBTlNGRVJfVFlQRSB0eXBlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGVzdCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICAgRE1BX0NIQU5ORUwgY2hhbm5lbCwKKwkJCQkgICAgICAgRE1BX1NOT09QX01PREUgc25vb3ApCiB7CiAgICAgRE1BX01SIG1kOwogICAgIERNQV9DREFSIGNkYXI7CkBAIC03NTUsNyArNzU1LDcgQEAKIAl9CiAJZWxzZSBpZiAoIHN0YXQucGUgPT0gMSApCiAJewotICAgICAgICAvKiBQQ0kgZXJyb3IgKi8KKwkvKiBQQ0kgZXJyb3IgKi8KIAkJcnZhbCA9IERNQVBFUlJPUjsKIAkJaWYgKCBwZV9mdW5jICE9IDAgKQogCQl7CkBAIC03ODMsNyArNzgzLDcgQEAKIAl9CiAKICAgICB0ZW1wID0gKCBzdGF0LnJlc2VydmVkMCAmIDB4ZmZmZmZmICkgPDwgODsKLSAgIAl0ZW1wIHw9ICggKCBzdGF0LmxtZSAgICAgICAmIDB4MSApIDw8IDcgKTsgIC8qIHdyaXRlIG9uZSB0byBjbGVhciAqLworCXRlbXAgfD0gKCAoIHN0YXQubG1lICAgICAgICYgMHgxICkgPDwgNyApOyAgLyogd3JpdGUgb25lIHRvIGNsZWFyICovCiAJdGVtcCB8PSAoICggc3RhdC5yZXNlcnZlZDEgJiAweDMgKSA8PCA1ICk7CiAgICAgdGVtcCB8PSAoICggc3RhdC5wZSAgICAgICAgJiAweDEgKSA8PCA0ICk7ICAvKiB3cml0ZSBvbmUgdG8gY2xlYXIgKi8KICAgICB0ZW1wIHw9ICggKCBzdGF0LnJlc2VydmVkMiAmIDB4MSApIDw8IDMgKTsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYTIuUyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYTIuUwppbmRleCBkYWIxZGUzLi5jY2JjMjI2IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWEyLlMKKysrIGIvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hMi5TCkBAIC0xMiwxNiArMTIsMTYgQEAKICAqCiAgKiBvdXRwdXQ6IHIzIC0gcmVnaXN0ZXIgY29udGVudAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAudGV4dAotICAgICAgLmFsaWduIDIKLSAgICAgIC5nbG9iYWwgbG9hZF9ydW50aW1lX3JlZworCS50ZXh0CisJLmFsaWduIDIKKwkuZ2xvYmFsIGxvYWRfcnVudGltZV9yZWcKIAogbG9hZF9ydW50aW1lX3JlZzoKIAotCSAgICAgIGx3YnJ4CXIzLHI0LHIzCi0JICAgICAgc3luYworCWx3YnJ4CXIzLHI0LHIzCisJc3luYwogCi0gCSAgICAgIGJjbHIgMjAsIDAKKwliY2xyIDIwLCAwCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBmdW5jdGlvbjogc3RvcmVfcnVudGltZV9yZWcKQEAgLTMxLDE1ICszMSwxMiBAQAogICogICAgICAgIHI1IC0gbmV3IHZhbHVlIHRvIGJlIHN0b3JlZAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgICAudGV4dAotICAgICAgICAgICAuYWxpZ24gMgotICAgICAgICAgICAuZ2xvYmFsIHN0b3JlX3J1bnRpbWVfcmVnCisJLnRleHQKKwkuYWxpZ24gMgorCS5nbG9iYWwgc3RvcmVfcnVudGltZV9yZWcKIHN0b3JlX3J1bnRpbWVfcmVnOgogCi0JICAgICAgc3R3YnJ4IHI1LCAgcjQsIHIzCi0JICAgICAgc3luYworCXN0d2JyeCByNSwgIHI0LCByMworCXN5bmMKIAotCQkgIGJjbHIgICAyMCwwCi0KLQotCisJYmNsciAgIDIwLDAKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYV9leHBvcnQuaCBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hL2RtYV9leHBvcnQuaAppbmRleCBjYjc1MGRkLi40NzFlNDg4IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYS9kbWFfZXhwb3J0LmgKKysrIGIvY3B1L21wYzgyNHgvZHJpdmVycy9kbWEvZG1hX2V4cG9ydC5oCkBAIC03MSw5ICs3MSw5IEBACiAgKiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgRE1BIHVuaXQgY2FuIGJlIHVzZWQuCiAgKi8KIGV4dGVybiBETUFfU3RhdHVzIERNQV9Jbml0aWFsaXplKAotICAgICAgICBpbnQgKCphcHBfcHJpbnRfZnVuY3Rpb24pKGNoYXIgKiwuLi4pKTsgLyogcG9pbnRlciB0byBvcHRpb25hbCAicHJpbnRmIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvdmlkZWQgYnkgYXBwbGljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWludCAoKmFwcF9wcmludF9mdW5jdGlvbikoY2hhciAqLC4uLikpOyAvKiBwb2ludGVyIHRvIG9wdGlvbmFsICJwcmludGYiCisJCQkJCQkgKiBwcm92aWRlZCBieSBhcHBsaWNhdGlvbgorCQkJCQkJICovCiAKIC8qIFBlcmZvcm0gdGhlIERNQSB0cmFuc2Zlciwgb25seSBkaXJlY3QgbW9kZSBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCiAgKiBBdCB0aGlzIHBvaW50LCBJIHRoaW5rIGl0IHdvdWxkIGJlIGJldHRlciB0byBkZWZpbmUgYSBkaWZmZXJlbnQKQEAgLTkxLDEwICs5MSwxMCBAQAogICogc25vb3AgaXMgdGhlIHNub29wIGVuYWJsZSBjb250cm9sCiAgKi8KIGV4dGVybiBETUFfU3RhdHVzIERNQV9kaXJlY3RfdHJhbnNmZXIoIERNQV9JTlRFUlJVUFRfU1RFRVIgaW50X3N0ZWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX1RSQU5TRkVSX1RZUEUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfQ0hBTk5FTCBjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX1NOT09QX01PREUgc25vb3ApOworCQkJCSAgICAgICBETUFfVFJBTlNGRVJfVFlQRSB0eXBlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGVzdCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICAgRE1BX0NIQU5ORUwgY2hhbm5lbCwKKwkJCQkgICAgICAgRE1BX1NOT09QX01PREUgc25vb3ApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2RtYV9leHBvcnQuaCBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hX2V4cG9ydC5oCmluZGV4IGNiNzUwZGQuLjQ3MWU0ODggMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hX2V4cG9ydC5oCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZG1hX2V4cG9ydC5oCkBAIC03MSw5ICs3MSw5IEBACiAgKiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgRE1BIHVuaXQgY2FuIGJlIHVzZWQuCiAgKi8KIGV4dGVybiBETUFfU3RhdHVzIERNQV9Jbml0aWFsaXplKAotICAgICAgICBpbnQgKCphcHBfcHJpbnRfZnVuY3Rpb24pKGNoYXIgKiwuLi4pKTsgLyogcG9pbnRlciB0byBvcHRpb25hbCAicHJpbnRmIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvdmlkZWQgYnkgYXBwbGljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWludCAoKmFwcF9wcmludF9mdW5jdGlvbikoY2hhciAqLC4uLikpOyAvKiBwb2ludGVyIHRvIG9wdGlvbmFsICJwcmludGYiCisJCQkJCQkgKiBwcm92aWRlZCBieSBhcHBsaWNhdGlvbgorCQkJCQkJICovCiAKIC8qIFBlcmZvcm0gdGhlIERNQSB0cmFuc2Zlciwgb25seSBkaXJlY3QgbW9kZSBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCiAgKiBBdCB0aGlzIHBvaW50LCBJIHRoaW5rIGl0IHdvdWxkIGJlIGJldHRlciB0byBkZWZpbmUgYSBkaWZmZXJlbnQKQEAgLTkxLDEwICs5MSwxMCBAQAogICogc25vb3AgaXMgdGhlIHNub29wIGVuYWJsZSBjb250cm9sCiAgKi8KIGV4dGVybiBETUFfU3RhdHVzIERNQV9kaXJlY3RfdHJhbnNmZXIoIERNQV9JTlRFUlJVUFRfU1RFRVIgaW50X3N0ZWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX1RSQU5TRkVSX1RZUEUgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETUFfQ0hBTk5FTCBjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE1BX1NOT09QX01PREUgc25vb3ApOworCQkJCSAgICAgICBETUFfVFJBTlNGRVJfVFlQRSB0eXBlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGVzdCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICAgRE1BX0NIQU5ORUwgY2hhbm5lbCwKKwkJCQkgICAgICAgRE1BX1NOT09QX01PREUgc25vb3ApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvUkVBRE1FIGIvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL1JFQURNRQppbmRleCBhZTk1Yjg4Li41Nzk4OTk2IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvUkVBRE1FCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9SRUFETUUKQEAgLTEwMCw1ICsxMDAsMyBAQAogICAgc2hhbGwgYWx3YXlzIGNhbGwgdGhlIGVwaWNFT0kganVzdCBiZWZvcmUKICAgIHJmaSBpbnN0cnVjdGlvbi4gUmVmZXIgdG8gdGhlIHJvdXRpbmUsCiAgICBlcGljX2V4Y2VwdGlvbiwgZm9yIGEgY29kZSBzYW1wbGUuCi0KLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL2VwaWMuaCBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9lcGljLmgKaW5kZXggMTdlNGFmYi4uNThmODFjNSAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL2VwaWMuaAorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpYy5oCkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICAgICB1bnNpZ25lZCBpbnQgKnZlbklkCiAgICAgICk7CiB2b2lkIGVwaWNGZWF0dXJlcyggdW5zaWduZWQgaW50ICpub0lSUXMsCi0gICAgICAgICAgICAgdW5zaWduZWQgaW50ICpub0NQVXMsCisJICAgICB1bnNpZ25lZCBpbnQgKm5vQ1BVcywKICAgICAgICB1bnNpZ25lZCBpbnQgKlZlcklkICk7CiBleHRlcm4gdm9pZCBlcGljSW5pdCggdW5zaWduZWQgaW50IElSUVR5cGUsIHVuc2lnbmVkIGludCBjbGtSYXRpbyk7CiBVTE9ORyBzeXNFVU1CQkFSUmVhZCAoIFVMT05HIHJlZ051bSApOwpAQCAtMTMxLDggKzEzMSw4IEBACiBleHRlcm4gdm9pZCBlcGljVG1GcmVxdWVuY3lTZXQoIHVuc2lnbmVkIGludCBmcnEgKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZXBpY1RtRnJlcXVlbmN5R2V0KHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBlcGljVG1CYXNlU2V0KCBVTE9ORyBzcmNBZGRyLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY250LAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5oaWJpdCApOworCQkgdW5zaWduZWQgaW50IGNudCwKKwkJIHVuc2lnbmVkIGludCBpbmhpYml0ICk7CiBleHRlcm4gdW5zaWduZWQgaW50IGVwaWNUbUJhc2VHZXQgKCBVTE9ORyBzcmNBZGRyLCB1bnNpZ25lZCBpbnQgKnZhbCApOwogZXh0ZXJuIHVuc2lnbmVkIGludCBlcGljVG1Db3VudEdldCggVUxPTkcgc3JjQWRkciwgdW5zaWduZWQgaW50ICp2YWwgKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZXBpY1RtSW5oaWJpdCggdW5zaWduZWQgaW50IHRpbWVyICk7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgZXBpY0ludEFjayh2b2lkKTsKIGV4dGVybiB2b2lkIGVwaWNTcHJTZXQoIHVuc2lnbmVkIGludCBldW1iYmFyLCB1bnNpZ25lZCBjaGFyICk7CiBleHRlcm4gdm9pZCBlcGljQ29uZmlnR2V0KCB1bnNpZ25lZCBpbnQgKmNsa1JhdGlvLAotICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpzZXJFbmFibGUgKTsKKwkgICAgICAgdW5zaWduZWQgaW50ICpzZXJFbmFibGUgKTsKIGV4dGVybiB2b2lkIFNyY1ZlY1RhYmxlSW5pdCh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgIGVwaWNNb2RlR2V0KHZvaWQpOwogZXh0ZXJuIHZvaWQgZXBpY0ludEVuYWJsZShpbnQgVmVjdCk7CmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpYzEuYyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9lcGljMS5jCmluZGV4IGViN2VkNDAuLmY4OWRlZWQgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9lcGljMS5jCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9lcGljMS5jCkBAIC03OCwxMiArNzgsMTIgQEAKICAgICB0bXAgPSBzeXNFVU1CQkFSUmVhZChFUElDX0lOVF9DT05GX1JFRyk7ICAgIC8qIFJlYWQgaW50ZXJydXB0IGNvbmYuIHJlZyAqLwogCiAgICAgaWYgKElSUVR5cGUgPT0gRVBJQ19ESVJFQ1RfSVJRKSAgICAgICAgICAgICAvKiBkaXJlY3QgbW9kZSAqLwotICAgICAgICBzeXNFVU1CQkFSV3JpdGUoRVBJQ19JTlRfQ09ORl9SRUcsIHRtcCAmIDB4ZjdmZmZmZmYpOworCXN5c0VVTUJCQVJXcml0ZShFUElDX0lOVF9DT05GX1JFRywgdG1wICYgMHhmN2ZmZmZmZik7CiAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXJpYWwgbW9kZSAqLwotICAgICAgICB7Ci0gICAgICAgIHRtcCA9IChjbGtSYXRpbyA8PCAyOCkgfCAweDA4MDAwMDAwOyAgICAvKiBTZXQgY2xvY2sgcmF0aW8gKi8KLSAgICAgICAgc3lzRVVNQkJBUldyaXRlKEVQSUNfSU5UX0NPTkZfUkVHLCB0bXApOwotICAgICAgICB9CisJeworCXRtcCA9IChjbGtSYXRpbyA8PCAyOCkgfCAweDA4MDAwMDAwOyAgICAvKiBTZXQgY2xvY2sgcmF0aW8gKi8KKwlzeXNFVU1CQkFSV3JpdGUoRVBJQ19JTlRfQ09ORl9SRUcsIHRtcCk7CisJfQogCiAgICAgd2hpbGUgKGVwaWNJbnRBY2soKSAhPSAweGZmKSAgICAgICAvKiBDbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzICovCiAJCWVwaWNFT0koKTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgIHRtcCA9IHN5c0VVTUJCQVJSZWFkKHNyQWRkcik7CiAgICAgYWN0Qml0ID0gKHRtcCAmIDQwMDAwMDAwKSA+PiAzMDsgICAgLyogcmV0cmlldmUgYWN0aXZpdHkgYml0IC0gYml0IDMwICovCiAgICAgaWYgKGFjdEJpdCA9PSAxKQotICAgICAgICByZXR1cm4gRVJST1I7CisJcmV0dXJuIEVSUk9SOwogCiAgICAgdG1wICY9IDB4ZmYzMGZmMDA7ICAgICAvKiBFcmFzZSBwcmV2aW91c2x5IHNldCBQLFMsUHJpbyxWZWN0b3IgYml0cyAqLwogICAgIG5ld1ZhbCA9IChQb2xhcml0eSA8PCAyMykgfCAoU2Vuc2UgPDwgMjIpIHwgKFByaW8gPDwgMTYpIHwgVmVjdDsKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgIHsKIAogICAgIGlmICggKHByaW9OdW0gPCAwKSB8fCAocHJpb051bSA+IDB4RikpCi0gICAgICAgIHJldHVybiBFUlJPUjsKKwlyZXR1cm4gRVJST1I7CiAgICAgc3lzRVVNQkJBUldyaXRlKEVQSUNfUFJPQ19DVEFTS19QUklfUkVHLCBwcmlvTnVtKTsKICAgICByZXR1cm4gT0s7CiAgICAgfQpAQCAtNDY1LDcgKzQ2NSw2IEBACiB9CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGZ1bmN0aW9uOiBlcGljVG1JbmhpYml0CiAgKgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9lcGljL2VwaWMyLlMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpYzIuUwppbmRleCA4OTc5Zjg4Li44Y2MyZmM2IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpYzIuUworKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpYzIuUwpAQCAtMTcsMTQgKzE3LDE0IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAkJLnRleHQKIAkJLmFsaWduIDIKLSAgICAgICAgLmdsb2JhbCBDb3JlRXh0SW50RW5hYmxlCisJLmdsb2JhbCBDb3JlRXh0SW50RW5hYmxlCiBDb3JlRXh0SW50RW5hYmxlOgotICAgICAgICAgbWZtc3IgICAgcjMKKwkgbWZtc3IgICAgcjMKIAotICAgICAgICAgb3JpICAgICAgcjMscjMsMHg4MDAwICAgICAgICAgLyogZW5hYmxlIGV4dGVybmFsIGludGVycnVwdCAqLwotICAgICAgICAgbXRtc3IgICAgcjMKKwkgb3JpICAgICAgcjMscjMsMHg4MDAwICAgICAgICAgLyogZW5hYmxlIGV4dGVybmFsIGludGVycnVwdCAqLworCSBtdG1zciAgICByMwogCi0gICAgICAgICBiY2xyIDIwLCAwCisJIGJjbHIgMjAsIDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGZ1bmN0aW9uOiBDb3JlRXh0SW50RGlzYWJsZQpAQCAtMzUsMjAgKzM1LDIwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAkJLnRleHQKIAkJLmFsaWduIDIKLSAgICAgICAgLmdsb2JhbCBDb3JlRXh0SW50RGlzYWJsZQorCS5nbG9iYWwgQ29yZUV4dEludERpc2FibGUKIENvcmVFeHRJbnREaXNhYmxlOgotICAgICAgICBtZm1zciAgICByNAorCW1mbXNyICAgIHI0CiAKIAl4b3IJcjMscjMscjMKIAlvciAgICAgIHIzLHIzLHI0CiAKIAlhbmRpcy4JcjQscjQsMHhmZmZmCi0gICAgICAgIGFuZGkuICAgcjMscjMsMHg3ZmZmICAgICAgICAgLyogZGlzYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KKwlhbmRpLiAgIHIzLHIzLDB4N2ZmZiAgICAgICAgIC8qIGRpc2FibGUgZXh0ZXJuYWwgaW50ZXJydXB0ICovCiAKIAlvciAgICAgIHIzLHIzLHI0Ci0gICAgICAgIG10bXNyICAgIHIzCisJbXRtc3IgICAgcjMKIAotICAgICAgICBiY2xyIDIwLCAwCisJYmNsciAyMCwgMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBmdW5jdGlvbjogZXBpY0VPSQpAQCAtNjEsMjAgKzYxLDIwIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJCS50ZXh0CiAJCS5hbGlnbiAyCi0gICAgICAgIC5nbG9iYWwgZXBpY0VPSQorCS5nbG9iYWwgZXBpY0VPSQogZXBpY0VPSToKIAlsaXMJcjUsMHgwMDA2CSAgICAgICAgLyogQnVpbGQgRW5kIE9mIEludGVycnVwdCBSZWdpc3RlciBvZmZzZXQgKi8KIAlvcmkJcjUscjUsMHgwMGIwCiAJeG9yCXI3LHI3LHI3CSAgICAgICAgLyogQ2xlYXIgcjcgKi8KIAlzdHdicngJcjcscjUscjMJICAgIC8qIFNhdmUgcjcsIHdyaXRpbmcgdG8gdGhpcyByZWdpc3RlciB3aWxsCi0JCQkJICAgICAgICAgICAgICogaW50aWRhdGUgdGhlIGVuZCBvZiBwcm9jZXNzaW5nIHRoZQotCSAJCQkgICAgICAgICAgICAgKiBoaWdoZXN0IGludGVycnVwdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJICAgICAqIGludGlkYXRlIHRoZSBlbmQgb2YgcHJvY2Vzc2luZyB0aGUKKwkJCQkJICAgICAqIGhpZ2hlc3QgaW50ZXJydXB0LgorCQkJICAgICAqLwogCXN5bmMKIAogCS8qIC0tLVJFU1RPUkUgTUFDSElORSBTVEFURSAqLwogCW1mbXNyCXIxMwkJICAgICAgICAvKiBDbGVhciBSZWNvdmVyYWJsZSBJbnRlcnJ1cHQgYml0IGluIE1TUiAqLwotICAgICAgICBvciAgICAgIHI3LHI3LHIxMworCW9yICAgICAgcjcscjcscjEzCiAKIAlhbmRpcy4gIHI3LHI3LDB4ZmZmZgogCWFuZGkuCXIxMyxyMTMsMHg3ZmZkCS8qIChhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzKSAqLwpAQCAtMTQ3LDggKzE0Nyw4IEBACiAJc3R3ICAgICByMywweDFjKHIxKSAvKiBQdXNoIENUUiAqLwogCiAJbXRzcHIJU1BSRzAscjEJLyogU2F2ZSB1cGRhdGVkIFN1cGVydmlzb3Igc3RhY2sgcG9pbnRlcgotCQkJCSAgICAgICAgICogdmFsdWUgdG8gU1BSRzAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkgKiB2YWx1ZSB0byBTUFJHMAorCQkJICovCiAJbWZtc3IJcjMKIAlvcmkJICAgIHIzLHIzLDB4MDAwMgkvKiBTZXQgUmVjb3ZlcmFibGUgSW50ZXJydXB0IGJpdCBpbiBNU1IgKi8KIAltdG1zcglyMwpAQCAtMTU5LDggKzE1OSw4IEBACiAKIAkvKiAtLS1SRUFEIEVQSUMgUkVHSVNURVI6CVBST0NFU1NPUiBJTlRFUlJVUFQgQUNLTk9XTEVER0UgUkVHSVNURVIgKi8KIAlsaXMJcjUsMHgwMDA2CSAgICAgICAgLyogQnVpbGQgSW50ZXJydXB0IEFja25vd2xlZGdlIFJlZ2lzdGVyCi0JCQkJICAgICAgICAgICAgICogb2Zmc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCSAgICAgKiBvZmZzZXQKKwkJCSAgICAgKi8KIAlvcmkJcjUscjUsMHgwMGEwCiAJbHdicngJcjcscjUscjYgICAgLyogTG9hZCBpbnRlcnJ1cHQgdmVjdG9yIGludG8gcjcgKi8KIAlzeW5jCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2VwaWMvZXBpY3V0aWwuUyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9lcGljdXRpbC5TCmluZGV4IGE4M2ZiZDguLjQ4NzcwNTAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9lcGljdXRpbC5TCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXBpYy9lcGljdXRpbC5TCkBAIC0yOSwxMiArMjksMTIgQEAKIGxvYWRfcnVudGltZV9yZWc6CiAKIAkJICB4b3IgcjUscjUscjUKLSAgICAgICAgICBvciAgcjUscjUscjMgICAgICAgLyogc2F2ZSBldW1iYmFyICovCisJICBvciAgcjUscjUscjMgICAgICAgLyogc2F2ZSBldW1iYmFyICovCiAKIAkgICAgICBsd2JyeAlyMyxyNCxyNQogCSAgICAgIHN5bmMKIAotIAkgICAgICBiY2xyIDIwLCAwCisJICAgICAgYmNsciAyMCwgMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZnVuY3Rpb246IHN0b3JlX3J1bnRpbWVfcmVnCkBAIC00NCw5ICs0NCw5IEBACiAgKiAgICAgICAgcjUgLSBuZXcgdmFsdWUgdG8gYmUgc3RvcmVkCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAgIC50ZXh0Ci0gICAgICAgICAgIC5hbGlnbiAyCi0gICAgICAgICAgIC5nbG9iYWwgc3RvcmVfcnVudGltZV9yZWcKKwkgICAudGV4dAorCSAgIC5hbGlnbiAyCisJICAgLmdsb2JhbCBzdG9yZV9ydW50aW1lX3JlZwogc3RvcmVfcnVudGltZV9yZWc6CiAKIAkJICB4b3IgcjAscjAscjAKQEAgLTU1LDQgKzU1LDMgQEAKIAkgICAgICBzeW5jCiAKIAkJICBiY2xyICAgMjAsMAotCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2Vycm9ycy5oIGIvY3B1L21wYzgyNHgvZHJpdmVycy9lcnJvcnMuaAppbmRleCAxNDM1MTg4Li44ODdmMjg0IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2Vycm9ycy5oCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvZXJyb3JzLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogLyoKLSAgICAgICAgIDEgICAgICAgICAyICAgICAgICAgMyAgICAgICAgIDQgICAgICAgICA1ICAgICAgICAgNiAgICAgICAgIDcgICAgICAgICA4CisJIDEgICAgICAgICAyICAgICAgICAgMyAgICAgICAgIDQgICAgICAgICA1ICAgICAgICAgNiAgICAgICAgIDcgICAgICAgICA4CiAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQogKi8KIC8qIExpc3QgZGVmaW5lIHN0YXRlbWVudHMgaGVyZSAqLwpAQCAtNzgsNyArNzgsNiBAQAogI2RlZmluZSBGT1JfQk9BUkRfT05MWQkJMHhmYjBhICAvKiAiTm90IGF2YWlsYWJsZSBmb3IgVW5peC4iICovCiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogdGhlc2UgYXJlIGZvciB0aGUgZXJyb3IgY2hlY2tpbmcgdG9vbGJveAkJCQkqLwogCkBAIC0xNDcsOSArMTQ2LDYgQEAKICNkZWZpbmUgVU5LTk9XTl9QQVJBTUVURVIJMHhGRTAxIC8qICJ1bmtub3duIHR5cGUgb2YgcGFyYW1ldGVyICIqLwogCiAKLQotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiB0aGVzZSBhcmUgZm9yIHRoZSB0b2tlbml6ZXIgdG9vbGJveCAJCQkJCSovCiAKQEAgLTE2NCw3ICsxNjAsNiBAQAogI2RlZmluZSBOT19PUEVOX0lCUwkJMHhGRjA4IC8qICJubyBvcGVuIGlucHV0IGJ1ZmZlcnMiICovCiAKIAotCiAvKiB0aGVzZSBhcmUgZm9yIHRoZSByZWFkIGZyb20gc2NyZWVuIHRvb2xib3ggKi8KIAogI2RlZmluZSBSRVNFUlZFRF9XT1JECQkweEZDMDAgLyogdXNlZCBhIHJlc2VydmVkIHdvcmQgYXMgYW4gYXJndWVtZW50Ki8KQEAgLTE3NSw3ICsxNzAsNiBAQAogI2RlZmluZSBGVUxMX0JQRFMJCTB4RkEwMCAvKiBicmVha3BvaW50IGRhdGEgc3RydWN0dXJlIGlzIGZ1bGwgKi8KIAogCi0KIC8qIFRIRVNFIGFyZSBmb3IgdGhlIGRvd25sb2FkZXIgKi8KIAogI2RlZmluZSBOT1RfSU5fU19SRUNPUkRfRk9STUFUIAkweGY5MDAgLyogIm5vdCBpbiBTLVJlY29yZCBGb3JtYXQiICovCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9SRUFETUUgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9SRUFETUUKaW5kZXggOGQ4MmRmMy4uMWRiNzIxMCAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvUkVBRE1FCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL1JFQURNRQpAQCAtMTAyLDQgKzEwMiwzIEBACiAgICBob3N0IHN5c3RlbSBhIHdheSB0byB1c2UgaXRzIG93biBldmVudAogICAgaGFuZGxlciBpbnN0ZWFkIG9mIHRoZSBJMkNfSVNSIHByb3ZpZGVkCiAgICBoZXJlLgotCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMuaCBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYy5oCmluZGV4IDMyMDliZmUuLjQ4YTQwMWQgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYy5oCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYy5oCkBAIC0xMDksMTMgKzEwOSwxMyBAQAogICovCiBzdGF0aWMgSTJDU3RhdHVzIEkyQ19wdXQoIHVuc2lnbmVkIGludCAgZXVtYmJhciwKIAkJCQkJCSAgdW5zaWduZWQgY2hhciByY3ZfYWRkciwgICAgLyogcmVjZWl2ZXIncyBhZGRyZXNzICovCi0JICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9wdHIsIC8qIHBvaW50ZXIgb2YgZGF0YSB0byBiZSBzZW50ICovCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXJfcHRyLCAvKiBwb2ludGVyIG9mIGRhdGEgdG8gYmUgc2VudCAqLwogCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgIGxlbmd0aCwgICAgICAvKiBudW1iZXIgb2YgYnl0ZSBvZiBpbiB0aGUgYnVmZmVyICovCiAJCQkJCSAgICAgIHVuc2lnbmVkIGludCAgc3RvcF9mbGFnLCAgIC8qIDEgLSBzaWduYWwgU1RPUCB3aGVuIGJ1ZmZlciBpcyBlbXB0eQotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwIC0gbm8gU1RPUCBzaWduYWwgd2hlbiBidWZmZXIgaXMgZW1wdHkKLQkJCQkJCQkJCQkJICAgICAgICAgICovCisJCQkJCQkJCQkgICogMCAtIG5vIFNUT1Agc2lnbmFsIHdoZW4gYnVmZmVyIGlzIGVtcHR5CisJCQkJCQkJCQkJCQkgICovCiAJCQkJCQkgIHVuc2lnbmVkIGludCAgaXNfY250ICk7ICAgIC8qIDEgLSB0aGlzIGlzIGEgcmVzdGFydCwgZG9uJ3QgY2hlY2sgTUJCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAgLSB0aGlzIGlzIGEgbmV3IHN0YXJ0LCBjaGVjayBNQkIKKwkJCQkJCSAgICAgICogMCAtIHRoaXMgaXMgYSBuZXcgc3RhcnQsIGNoZWNrIE1CQgogCQkJCQkJCQkJCQkJCSAgKi8KIAogLyogUmVjZWl2ZSBhIGJ1ZmZlciBvZiBkYXRhIGZyb20gdGhlIGRlc2lyZWQgc2VuZGVyX2FkZHIKQEAgLTEzMCwxMiArMTMwLDEyIEBACiBzdGF0aWMgSTJDU3RhdHVzIEkyQ19nZXQoIHVuc2lnbmVkIGludCAgZXVtYmJhciwKIAkJCQkJCSAgdW5zaWduZWQgY2hhciBzZW5kZXJfYWRkciwgLyogc2VuZGVyJ3MgYWRkcmVzcyAqLwogCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXJfcHRyLCAvKiBwb2ludGVyIG9mIHJlY2VpdmluZyBidWZmZXIgKi8KLQkJCQkgICAgICAgICAgdW5zaWduZWQgaW50ICBsZW5ndGgsICAgICAgLyogbGVuZ3RoIG9mIHRoZSByZWNlaXZpbmcgYnVmZmVyICovCisJCQkJCSAgdW5zaWduZWQgaW50ICBsZW5ndGgsICAgICAgLyogbGVuZ3RoIG9mIHRoZSByZWNlaXZpbmcgYnVmZmVyICovCiAJCQkJCSAgICAgIHVuc2lnbmVkIGludCAgc3RvcF9mbGFnLCAgIC8qIDEgLSBzaWduYWwgU1RPUCB3aGVuIGJ1ZmZlciBpcyBmdWxsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAgLSBubyBTVE9QIHNpZ25hbCB3aGVuIGJ1ZmZlciBpcyBmdWxsCisJCQkJCQkJCQkgICogMCAtIG5vIFNUT1Agc2lnbmFsIHdoZW4gYnVmZmVyIGlzIGZ1bGwKIAkJCQkJCQkJCQkJCSAgICAgICovCiAJCQkJCQkgIHVuc2lnbmVkIGludCAgaXNfY250ICk7ICAgIC8qIDEgLSB0aGlzIGlzIGEgcmVzdGFydCwgZG9uJ3QgY2hlY2sgTUJCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAgLSB0aGlzIGlzIGEgbmV3IHN0YXJ0LCBjaGVjayBNQkIKKwkJCQkJCSAgICAgICogMCAtIHRoaXMgaXMgYSBuZXcgc3RhcnQsIGNoZWNrIE1CQgogCQkJCQkJCQkJCQkJCSAgKi8KIAogI2lmIDAgLyogdGhlIEkyQ193cml0ZSBhbmQgSTJDX3JlYWQgZnVuY3Rpb25zIGFyZSBub3QgYWN0aXZlICovCkBAIC0xNjAsMTAgKzE2MCwxMCBAQAogICovCiBzdGF0aWMgSTJDU3RhdHVzIEkyQ193cml0ZSggdW5zaWduZWQgaW50IGV1bWJiYXIsCiAJCQkJCQkgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyX3B0ciwgLyogcG9pbnRlciBvZiBkYXRhIHRvIGJlIHNlbnQgKi8KLQkJCQkJICAgICAgICB1bnNpZ25lZCBpbnQgIGxlbmd0aCwgICAgICAvKiBudW1iZXIgb2YgYnl0ZSBvZiBpbiB0aGUgYnVmZmVyICovCi0JCQkJCSAgICAgICAgdW5zaWduZWQgaW50ICBzdG9wX2ZsYWcgKTsgLyogMSAtIHNpZ25hbCBTVE9QIHdoZW4gYnVmZmVyIGlzIGVtcHR5Ci0JCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICogMCAtIG5vIFNUT1Agc2lnbmFsIHdoZW4gYnVmZmVyIGlzIGVtcHR5Ci0JCQkJCQkJCQkJCSAgICAgICAgICAgICovCisJCQkJCQl1bnNpZ25lZCBpbnQgIGxlbmd0aCwgICAgICAvKiBudW1iZXIgb2YgYnl0ZSBvZiBpbiB0aGUgYnVmZmVyICovCisJCQkJCQl1bnNpZ25lZCBpbnQgIHN0b3BfZmxhZyApOyAvKiAxIC0gc2lnbmFsIFNUT1Agd2hlbiBidWZmZXIgaXMgZW1wdHkKKwkJCQkJCQkJCQkJKiAwIC0gbm8gU1RPUCBzaWduYWwgd2hlbiBidWZmZXIgaXMgZW1wdHkKKwkJCQkJCQkJCQkJCSAgICAqLwogCiAgLyogUmVjZWl2ZSBhIGJ1ZmZlciBvZiBkYXRhIGZyb20gdGhlIHNlbmRpbmcgbWFzdGVyLgogICogSWYgc3RvcF9mbGFnIGlzIHNldCwgd2hlbiB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHRoZQpAQCAtMTc1LDggKzE3NSw4IEBACiBzdGF0aWMgSTJDU3RhdHVzIEkyQ19yZWFkKHVuc2lnbmVkIGludCAgZXVtYmJhciwKIAkJCQkJCSAgdW5zaWduZWQgY2hhciAqYnVmZmVyX3B0ciwgLyogcG9pbnRlciBvZiByZWNlaXZpbmcgYnVmZmVyICovCiAJCQkJCSAgICAgIHVuc2lnbmVkIGludCAgbGVuZ3RoLCAgICAgIC8qIGxlbmd0aCBvZiB0aGUgcmVjZWl2aW5nIGJ1ZmZlciAqLwotCQkJCSAgICAgICAgICB1bnNpZ25lZCBpbnQgIHN0b3BfZmxhZyApOyAvKiAxIC0gc2lnbmFsIFNUT1Agd2hlbiBidWZmZXIgaXMgZnVsbAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwIC0gbm8gU1RPUCBzaWduYWwgd2hlbiBidWZmZXIgaXMgZnVsbAorCQkJCQkgIHVuc2lnbmVkIGludCAgc3RvcF9mbGFnICk7IC8qIDEgLSBzaWduYWwgU1RPUCB3aGVuIGJ1ZmZlciBpcyBmdWxsCisJCQkJCQkJCQkgICogMCAtIG5vIFNUT1Agc2lnbmFsIHdoZW4gYnVmZmVyIGlzIGZ1bGwKIAkJCQkJCQkJCQkJCSAgICAgICovCiAjZW5kaWYgLyogb2YgaWYwIGZvciB0dXJuaW5nIG9mZiBJMkNfcmVhZCAmIEkyQ193cml0ZSAqLwogCkBAIC0yMDMsMTIgKzIwMywxMiBAQAogICovCiBzdGF0aWMgSTJDU3RhdHVzIEkyQ19TdGFydCggdW5zaWduZWQgaW50ICBldW1iYmFyLAogCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgc2xhdmVfYWRkciwgLyogYWRkcmVzcyBvZiB0aGUgcmVjZWl2ZXIgKi8KLQkgICAgICAgICAgICAgICAgICAgICAgICBJMkNfTU9ERSAgICAgbW9kZSwgICAgICAgLyogWE1JVCgxKSAtIHB1dCAod3JpdGUpCi0JCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAqIFJDVigwKSAgLSBnZXQgKHJlYWQpCisJCQkJSTJDX01PREUgICAgIG1vZGUsICAgICAgIC8qIFhNSVQoMSkgLSBwdXQgKHdyaXRlKQorCQkJCQkJCQkJCSAgKiBSQ1YoMCkgIC0gZ2V0IChyZWFkKQogCQkJCQkJCQkJCQkJCSAgKi8KIAkJCQkJCSAgICB1bnNpZ25lZCBpbnQgaXNfY250ICk7IC8qIDEgLSB0aGlzIGlzIGEgcmVzdGFydCwgZG9uJ3QgY2hlY2sgTUJCCiAJCQkJCQkJCQkJCQkJKiAwIC0gdGhpcyBpcyBhIG5ldyBzdGFydCwgY2hlY2sgTUJCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCSAgICAqLwogCiAvKiBHZW5lcmF0ZSBhIFNUT1Agc2lnbmFsIHRvIHRlcm1pbmF0ZSB0aGUgdHJhbnNhY3Rpb24uICovCiBzdGF0aWMgSTJDU3RhdHVzIEkyQ19TdG9wKCB1bnNpZ25lZCBpbnQgZXVtYmJhciApOwpAQCAtMjU4LDEwICsyNTgsMTAgQEAKICAqLwogc3RhdGljIEkyQ1N0YXR1cyBJMkNfSW5pdCggdW5zaWduZWQgaW50ICBldW1iYmFyLAogCQkJCQkJICAgdW5zaWduZWQgY2hhciBmZHIsICAgICAgIC8qIGZyZXF1ZW5jeSBkaXZpZGVyICovCi0JICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHIsICAgICAgLyogZHJpdmVyJ3MgYWRkcmVzcyB1c2VkIGZvciByZWNlaXZpbmcgKi8KLQkgCQkJICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW5faW50KTsgICAgLyogMSAtIGVuYWJsZSBJMkMgaW50ZXJydXB0Ci0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMCAtIGRpc2FibGUgSTJDIGludGVycnVwCi0JCQkJCQkJCQkJCSAgICAgICAgICovCisJCQkgICAgICAgdW5zaWduZWQgY2hhciBhZGRyLCAgICAgIC8qIGRyaXZlcidzIGFkZHJlc3MgdXNlZCBmb3IgcmVjZWl2aW5nICovCisJCQkJCSAgIHVuc2lnbmVkIGludCBlbl9pbnQpOyAgICAvKiAxIC0gZW5hYmxlIEkyQyBpbnRlcnJ1cHQKKwkJCQkJCQkJCSAqIDAgLSBkaXNhYmxlIEkyQyBpbnRlcnJ1cAorCQkJCQkJCQkJCQkJICovCiAKIC8qIEkyQyBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lLgogICoKQEAgLTI5OSwxMSArMjk5LDExIEBACiAgKiAgICAgICAgSTJDX1JFU1RBUlQsIHRoaXMgaXMgYSBjb250aW51YXRpb24gb2YgZXhpc3RpbmcgdHJhbnNhY3Rpb24KICAqLwogc3RhdGljIEkyQ19TdGF0dXMgSTJDX2RvX2J1ZmZlciggSTJDX0lOVEVSUlVQVF9NT0RFIGVuX2ludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19UUkFOU0FDVElPTl9NT0RFIGFjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaTJjX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX1NUT1BfTU9ERSBzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX1JFU1RBUlRfTU9ERSByc3RhKTsKKwkJCQkgSTJDX1RSQU5TQUNUSU9OX01PREUgYWN0LAorCQkJCSB1bnNpZ25lZCBjaGFyIGkyY19hZGRyLAorCQkJCSBpbnQgbGVuLAorCQkJCSB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJIEkyQ19TVE9QX01PREUgc3RvcCwKKwkJCQkgaW50IHJldHJ5LAorCQkJCSBJMkNfUkVTVEFSVF9NT0RFIHJzdGEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMyLlMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMyLlMKaW5kZXggNWNjN2M5OC4uM2ZkN2UwMyAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjMi5TCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYzIuUwpAQCAtMTYsMjAgKzE2LDIwIEBACiAgKgogICogb3V0cHV0OiByMyAtIHJlZ2lzdGVyIGNvbnRlbnQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgLnRleHQKLSAgICAgIC5hbGlnbiAyCi0gICAgICAuZ2xvYmFsIGxvYWRfcnVudGltZV9yZWcKKwkudGV4dAorCS5hbGlnbiAyCisJLmdsb2JhbCBsb2FkX3J1bnRpbWVfcmVnCiBsb2FkX3J1bnRpbWVfcmVnOgogCi0vKgkJICB4b3IgcjUscjUscjUKLSogICAgICAgICBvciAgcjUscjUscjMKLSoKLSoJICAgICAgbHdicngJcjMscjQscjUKLSovCi0JICAgICAgbHdicnggcjMscjQscjMKLQkgICAgICBzeW5jCisvKgl4b3IgcjUscjUscjUKKyAqCW9yICByNSxyNSxyMworICoKKyAqCWx3YnJ4CXIzLHI0LHI1CisgKi8KKwlsd2JyeCByMyxyNCxyMworCXN5bmMKIAotIAkgICAgICBiY2xyIDIwLCAwCisJYmNsciAyMCwgMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZnVuY3Rpb246IHN0b3JlX3J1bnRpbWVfcmVnCkBAIC0zOSwxNiArMzksMTQgQEAKICAqICAgICAgICByNSAtIG5ldyB2YWx1ZSB0byBiZSBzdG9yZWQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgICAgLnRleHQKLSAgICAgICAgICAgLmFsaWduIDIKLSAgICAgICAgICAgLmdsb2JhbCBzdG9yZV9ydW50aW1lX3JlZworCS50ZXh0CisJLmFsaWduIDIKKwkuZ2xvYmFsIHN0b3JlX3J1bnRpbWVfcmVnCiBzdG9yZV9ydW50aW1lX3JlZzoKIAotCSAgICAgIHN0d2JyeCByNSwgIHI0LCByMwotCSAgICAgIHN5bmMKKwlzdHdicnggcjUsICByNCwgcjMKKwlzeW5jCiAKLSAgICAgICAgICAgICAgYmNsciAgIDIwLDAKLQotCisJYmNsciAgIDIwLDAKIAogI2VuZGlmIC8qIENPTkZJR19IQVJEX0kyQyAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjX2V4cG9ydC5oIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMmMvaTJjX2V4cG9ydC5oCmluZGV4IDE3NDAzZWEuLjYyNjRkMTggMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyY19leHBvcnQuaAorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmNfZXhwb3J0LmgKQEAgLTcxLDExICs3MSwxMSBAQAogZXh0ZXJuIEkyQ19TdGF0dXMgSTJDX0luaXRpYWxpemUoCiAJdW5zaWduZWQgY2hhciBhZGRyLCAgICAgICAgICAgIC8qIGRyaXZlcidzIEkyQyBzbGF2ZSBhZGRyZXNzICovCiAJSTJDX0lOVEVSUlVQVF9NT0RFIGVuX2ludCwgICAgIC8qIDEgLSBlbmFibGUgSTJDIGludGVycnVwdAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAwIC0gZGlzYWJsZSBJMkMgaW50ZXJydXB0Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBpbnQgKCphcHBfcHJpbnRfZnVuY3Rpb24pKGNoYXIgKiwuLi4pKTsgLyogcG9pbnRlciB0byBvcHRpb25hbCAicHJpbnRmIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvdmlkZWQgYnkgYXBwbGljYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkqIDAgLSBkaXNhYmxlIEkyQyBpbnRlcnJ1cHQKKwkJCQkJKi8KKwlpbnQgKCphcHBfcHJpbnRfZnVuY3Rpb24pKGNoYXIgKiwuLi4pKTsgLyogcG9pbnRlciB0byBvcHRpb25hbCAicHJpbnRmIgorCQkJCQkJICogcHJvdmlkZWQgYnkgYXBwbGljYXRpb24KKwkJCQkJCSAqLwogCiAvKiBQZXJmb3JtIHRoZSBnaXZlbiBJMkMgdHJhbnNhY3Rpb24sIG9ubHkgTUFTVEVSX1hNSVQgYW5kIE1BU1RFUl9SQ1YKICAqIGFyZSBpbXBsZW1lbnRlZC4gIEJvdGggYXJlIG9ubHkgaW4gcG9sbGluZyBtb2RlLgpAQCAtOTIsMTIgKzkyLDEyIEBACiAgKiAgICAgICAgSTJDX1JFU1RBUlQsIHRoaXMgaXMgYSBjb250aW51YXRpb24gb2YgZXhpc3RpbmcgdHJhbnNhY3Rpb24KICAqLwogZXh0ZXJuIEkyQ19TdGF0dXMgSTJDX2RvX3RyYW5zYWN0aW9uKCBJMkNfSU5URVJSVVBUX01PREUgZW5faW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfVFJBTlNBQ1RJT05fTU9ERSBhY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgaTJjX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YV9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19TVE9QX01PREUgc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfUkVTVEFSVF9NT0RFIHJzdGEpOworCQkJCSAgICAgIEkyQ19UUkFOU0FDVElPTl9NT0RFIGFjdCwKKwkJCQkgICAgICB1bnNpZ25lZCBjaGFyIGkyY19hZGRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YV9hZGRyLAorCQkJCSAgICAgIGludCBsZW4sCisJCQkJICAgICAgY2hhciAqYnVmZmVyLAorCQkJCSAgICAgIEkyQ19TVE9QX01PREUgc3RvcCwKKwkJCQkgICAgICBpbnQgcmV0cnksCisJCQkJICAgICAgSTJDX1JFU1RBUlRfTU9ERSByc3RhKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMmNfZXhwb3J0LmggYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyY19leHBvcnQuaAppbmRleCAxNzQwM2VhLi42MjY0ZDE4IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyY19leHBvcnQuaAorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyY19leHBvcnQuaApAQCAtNzEsMTEgKzcxLDExIEBACiBleHRlcm4gSTJDX1N0YXR1cyBJMkNfSW5pdGlhbGl6ZSgKIAl1bnNpZ25lZCBjaGFyIGFkZHIsICAgICAgICAgICAgLyogZHJpdmVyJ3MgSTJDIHNsYXZlIGFkZHJlc3MgKi8KIAlJMkNfSU5URVJSVVBUX01PREUgZW5faW50LCAgICAgLyogMSAtIGVuYWJsZSBJMkMgaW50ZXJydXB0Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIDAgLSBkaXNhYmxlIEkyQyBpbnRlcnJ1cHQKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGludCAoKmFwcF9wcmludF9mdW5jdGlvbikoY2hhciAqLC4uLikpOyAvKiBwb2ludGVyIHRvIG9wdGlvbmFsICJwcmludGYiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBwcm92aWRlZCBieSBhcHBsaWNhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCSogMCAtIGRpc2FibGUgSTJDIGludGVycnVwdAorCQkJCQkqLworCWludCAoKmFwcF9wcmludF9mdW5jdGlvbikoY2hhciAqLC4uLikpOyAvKiBwb2ludGVyIHRvIG9wdGlvbmFsICJwcmludGYiCisJCQkJCQkgKiBwcm92aWRlZCBieSBhcHBsaWNhdGlvbgorCQkJCQkJICovCiAKIC8qIFBlcmZvcm0gdGhlIGdpdmVuIEkyQyB0cmFuc2FjdGlvbiwgb25seSBNQVNURVJfWE1JVCBhbmQgTUFTVEVSX1JDVgogICogYXJlIGltcGxlbWVudGVkLiAgQm90aCBhcmUgb25seSBpbiBwb2xsaW5nIG1vZGUuCkBAIC05MiwxMiArOTIsMTIgQEAKICAqICAgICAgICBJMkNfUkVTVEFSVCwgdGhpcyBpcyBhIGNvbnRpbnVhdGlvbiBvZiBleGlzdGluZyB0cmFuc2FjdGlvbgogICovCiBleHRlcm4gSTJDX1N0YXR1cyBJMkNfZG9fdHJhbnNhY3Rpb24oIEkyQ19JTlRFUlJVUFRfTU9ERSBlbl9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19UUkFOU0FDVElPTl9NT0RFIGFjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBpMmNfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBkYXRhX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX1NUT1BfTU9ERSBzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19SRVNUQVJUX01PREUgcnN0YSk7CisJCQkJICAgICAgSTJDX1RSQU5TQUNUSU9OX01PREUgYWN0LAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgaTJjX2FkZHIsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciBkYXRhX2FkZHIsCisJCQkJICAgICAgaW50IGxlbiwKKwkJCQkgICAgICBjaGFyICpidWZmZXIsCisJCQkJICAgICAgSTJDX1NUT1BfTU9ERSBzdG9wLAorCQkJCSAgICAgIGludCByZXRyeSwKKwkJCQkgICAgICBJMkNfUkVTVEFSVF9NT0RFIHJzdGEpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby5oIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8uaAppbmRleCA4NzIyNWFiLi5jNDcyNTNkIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby5oCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvLmgKQEAgLTEyMywxMSArMTIzLDExIEBACiAgUENJIG1hc3RlciBuZWVkcyB0byBlbmFibGUgdGhlIGRldmljZXMnIG91dGJvdW5kIGludGVycnVwdHMgaXQgd2FudHMgdG8gaGFuZGxlIChSRU1PVEUpCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT01zZ0VuYWJsZSggTE9DQVRJT04sICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBuICk7ICAgLyogYicxJyAtIG1zZyAwCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYicxMCctIG1zZyAxCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYicxMSctIGJvdGgKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG4gKTsgICAvKiBiJzEnIC0gbXNnIDAKKwkJCQkJCQkJCSAgICAgKiBiJzEwJy0gbXNnIDEKKwkJCQkJCQkJCSAgICAgKiBiJzExJy0gYm90aAorCQkJCQkJCQkJICAgICAqLwogCiAvKioKICBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgYXNzb2NpYXRlZCB3aXRoIGluL291dCBib3VuZCBtc2cKQEAgLTEzNywxMSArMTM3LDExIEBACiAgUENJIG1hc3RlciBuZWVkcyB0byBkaXNhYmxlIG91dGJvdW5kIGludGVycnVwdHMgb2YgZGV2aWNlcyBpdCBpcyBub3QgaW50ZXJlc3RlZCAoUkVNT1RFKQogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9Nc2dEaXNhYmxlKCBMT0NBVElPTiwgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBuICk7IC8qIGInMScgLSBtc2cgMAotCQkJICAgCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYicxMCctIG1zZyAxCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiJzExJy0gYm90aAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJdW5zaWduZWQgaW50IGJhc2UsIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkJCXVuc2lnbmVkIGNoYXIgbiApOyAvKiBiJzEnIC0gbXNnIDAKKwkJCQkJCQkJCSAgICAqIGInMTAnLSBtc2cgMQorCQkJCQkJCQkJICAgICogYicxMSctIGJvdGgKKwkJCQkJCQkJCSAgICAqLwogCiAvKioKICBSZWFkIHRoZSBtc2cgcmVnaXN0ZXIgZWl0aGVyIGZyb20gbG9jYWwgaW5ib3VuZCBtc2cgMC8xLApAQCAtMTU0LDkgKzE1NCw5IEBACiAgT3RoZXJ3aXNlIGxvY2FsIGluYm91bmQgbXNnIGlzIHJlYWQuCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT01zZ0dldCAoIExPQ0FUSU9OLCAgICAgICAgICAgICAgICAgLyogUkVNT1RFL0xPQ0FMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLypwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICptc2cgKTsKKwkJCSAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKnBjc3JiYXIvZXVtYmJhciAqLworCQkJICAgICB1bnNpZ25lZCBpbnQgbiwgICAgICAgICAgIC8qIDAgb3IgMSAqLworCQkJICAgICB1bnNpZ25lZCBpbnQgKm1zZyApOwogCiAvKioKICBXcml0ZSB0byBudGggTXNnIHJlZ2lzdGVyIGVpdGhlciBvbiBsb2NhbCBvdXRib3VuZCBtc2cgMC8xLApAQCAtMTY5LDkgKzE2OSw5IEBACiAgT3RoZXJ3aXNlIGxvY2FsIG91dGJvdW5kIG1zZyBpcyB3cml0dGVuLgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9Nc2dQb3N0KCBMT0NBVElPTiwgICAgICAgICAgICAgICAgIC8qIFJFTU9URS9MT0NBTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuLCAgICAgICAgICAgLyogMCBvciAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtc2cgKTsKKwkJCQl1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCisJCQkJdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KKwkJCQl1bnNpZ25lZCBpbnQgbXNnICk7CiAKIC8qKgogIEVuYWJsZSB0aGUgSW4vT3V0IERvb3JCZWxsIEludGVycnVwdApAQCAtMTgzLDggKzE4Myw4IEBACiAgUENJIG1hc3RlciBuZWVkcyB0byBlbmFibGUgb3V0Ym91bmQgZG9vcmJlbGwgaW50ZXJydXB0cyBvZiB0aGUgZGV2aWNlcyBpdCB3YW50cyB0byBoYW5kbGUKICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPREJFbmFibGUoIExPQ0FUSU9OLCAgICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5fZGIgKTsvKiB3aGVuIExPQ0FMLCBJMk9fSU5fREIsIE1DLCBJMk9fSU5fREJ8TUMgKi8KKwkJCSAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkJICAgICAgdW5zaWduZWQgaW50IGluX2RiICk7Lyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCiAKIC8qKgogIERpc2FibGUgdGhlIEluL091dCBEb29yQmVsbCBJbnRlcnJ1cHQKQEAgLTE5NSw4ICsxOTUsOCBAQAogCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT0RCRGlzYWJsZSggTE9DQVRJT04sICAgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbl9kYiApOyAgLyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCisJCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgaW5fZGIgKTsgIC8qIHdoZW4gTE9DQUwsIEkyT19JTl9EQiwgTUMsIEkyT19JTl9EQnxNQyAqLwogCiAvKioKICBSZWFkIGEgbG9jYWwgaW5kb29yYmVsbCByZWdpc3Rlciwgb3IgYW4gb3V0ZG9vcmJlbGwgb2YgZGV2aWNlcy4KQEAgLTIwOSw3ICsyMDksNyBAQAogIE90aGVyd2lzZSBsb2NhbCBpbiBkb29yYmVsbCBpcyByZWFkCiAgKiovCiBleHRlcm4gdW5zaWduZWQgaW50IEkyT0RCR2V0KCBMT0NBVElPTiwgICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSk7ICAgLyogcGNzcmJhci9ldW1iYmFyICovCisJCQkgICAgICB1bnNpZ25lZCBpbnQgYmFzZSk7ICAgLyogcGNzcmJhci9ldW1iYmFyICovCiAKIC8qKgogIFdyaXRlIHRvIGEgbG9jYWwgb3V0ZG9vcmJlbGwgcmVnaXN0ZXIsIG9yIGFuIGluZG9vcmJlbGwgcmVnaXN0ZXIgb2YgZGV2aWNlcy4KQEAgLTIyMSw4ICsyMjEsOCBAQAogIE90aGVyd2lzZSBsb2NhbCBvdXQgZG9vcmJlbGwgaXMgd3JpdHRlbgogICoqLwogZXh0ZXJuIHZvaWQgSTJPREJQb3N0KCBMT0NBVElPTiwgICAgICAgICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbXNnICk7ICAgICAgIC8qICAgaW4gICAvIG91dCAgICAqLworCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJICAgICAgIHVuc2lnbmVkIGludCBtc2cgKTsgICAgICAgLyogICBpbiAgIC8gb3V0ICAgICovCiAKIC8qKgogIFJlYWQgdGhlIG91dGJvdW5kIG1zZyB1bml0IGludGVycnVwdCBzdGF0dXMgb2YgZGV2aWNlcy4gUmVhZGluZyBhbiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLApAQCAtMjUxLDggKzI1MSw4IEBACiAgTVVDUi4KICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPRklGT0luaXQoIHVuc2lnbmVkIGludCBldW1iYmFyLAotCQkJCSAgICAgICAgICAgICAgUVVFVUVfU0laRSwKLQkJCQkgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBxYmEpOy8qIHF1ZXVlIGJhc2UgYWRkcmVzcyB0aGF0IG11c3QgYmUgYWxpZ25lZCBhdCAxTSAqLworCQkJCQkgICAgICBRVUVVRV9TSVpFLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgcWJhKTsvKiBxdWV1ZSBiYXNlIGFkZHJlc3MgdGhhdCBtdXN0IGJlIGFsaWduZWQgYXQgMU0gKi8KIC8qKgogIEVuYWJsZSB0aGUgY2lyY3VsYXIgcXVldWUKICAqKi8KQEAgLTI5Niw4ICsyOTYsOCBAQAogIFVubGVzcyBib3RoIGZyZWUgcXVldWVzIGFyZSBpbml0aWFsaXplZCwgYWxsb2NhdGluZyBhIGZyZWUgTUYgd2lsbCByZXR1cm4gMHhmZmZmZmZmZgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPQWxsb2MoIExPQ0FUSU9OLAotCQkJIAkgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJCQkgICAgICAgICAgICAgICB2b2lkICAgICAgICAgKipwTXNnKTsKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBiYXNlLAorCQkJCQkgICAgICAgdm9pZCAgICAgICAgICoqcE1zZyk7CiAvKioKICBGcmVlIGEgdXNlZCBtc2cgZnJhbWUgYmFjayB0byBmcmVlIHF1ZXVlCiAgUENJIE1hc3RlciBmcmVlcyBhIE1GQSB0aHJvdWdoIG91dGJvdW5kIHF1ZXVlIHBvcnQgb2YgZGV2aWNlKE9GUVBSKQpAQCAtMzEwLDggKzMxMCw4IEBACiAgYW5kIGJ5IGRldmljZSB0byBpbml0aWFsaXplIE91dGJvdW5kIGZyZWUgcXVldWUgYmVmb3JlIEkyT0ZJRk9BbGxvYyBjYW4gYmUgdXNlZC4KICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPRklGT0ZyZWUoIExPQ0FUSU9OLAotCQkJICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCi0JCQkgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAqcE1zZyApOworCQkJCQkgIHVuc2lnbmVkIGludCBiYXNlLAorCQkJCQkgIHZvaWQgICAgICAgICpwTXNnICk7CiAKIC8qKgogIFBvc3QgYSBtc2cgaW50byBGSUZPCkBAIC0zMjIsOCArMzIyLDggQEAKICBPdGhlcndpc2UgcXVldWUgb3ZlcmZsb3cgaW50ZXJydXB0IHdpbGwgYXNzZXJ0LgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPUG9zdCggTE9DQVRJT04sCi0JCSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAqcE1zZyApOworCQkJCSAgICAgIHVuc2lnbmVkIGludCBiYXNlLAorCQkJCSAgICAgIHZvaWQgICAgICAgICAqcE1zZyApOwogCiAvKioKICBSZWFkIGEgbXNnIGZyb20gRklGTwpAQCAtMzMxLDE0ICszMzEsMTQgQEAKICB3aGlsZSBsb2NhbCBwcm9jZXNzb3IgcmVhZHMgYSBtc2cgZnJvbSBpdHMgaW5ib3VuZCBwb3N0IHF1ZXVlKElQVFBSKQogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPR2V0KCBMT0NBVElPTiwKLQkgCQkgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKKwkJCQkJICB1bnNpZ25lZCBpbnQgYmFzZSwKIAkJCQkJCQkgIHZvaWQgICAgICoqcE1zZyApOwogCiAvKioKICBHZXQgdGhlIEkyTyBQQ0kgY29uZmlndXJhdGlvbiBpZGVudGlmaWNhdGlvbiByZWdpc3RlcgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9QQ0lDb25maWdHZXQoIExPQ0FUSU9OLAotCQkJICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgYmFzZSwKIAkJCQkJCQkgICBJMk9JT1AgKik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvLmggYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8uaAppbmRleCAyNmY3YzVjLi43MTU3MmIyIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8uaAorKysgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8uaApAQCAtMTI0LDExICsxMjQsMTEgQEAKICBQQ0kgbWFzdGVyIG5lZWRzIHRvIGVuYWJsZSB0aGUgZGV2aWNlcycgb3V0Ym91bmQgaW50ZXJydXB0cyBpdCB3YW50cyB0byBoYW5kbGUgKFJFTU9URSkKICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPTXNnRW5hYmxlKCBMT0NBVElPTiwgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG4gKTsgICAvKiBiJzEnIC0gbXNnIDAKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiJzEwJy0gbXNnIDEKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiJzExJy0gYm90aAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgbiApOyAgIC8qIGInMScgLSBtc2cgMAorCQkJCQkJCQkJICAgICAqIGInMTAnLSBtc2cgMQorCQkJCQkJCQkJICAgICAqIGInMTEnLSBib3RoCisJCQkJCQkJCQkgICAgICovCiAKIC8qKgogIERpc2FibGUgdGhlIGludGVycnVwdCBhc3NvY2lhdGVkIHdpdGggaW4vb3V0IGJvdW5kIG1zZwpAQCAtMTM4LDExICsxMzgsMTEgQEAKICBQQ0kgbWFzdGVyIG5lZWRzIHRvIGRpc2FibGUgb3V0Ym91bmQgaW50ZXJydXB0cyBvZiBkZXZpY2VzIGl0IGlzIG5vdCBpbnRlcmVzdGVkIChSRU1PVEUpCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT01zZ0Rpc2FibGUoIExPQ0FUSU9OLCAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG4gKTsgLyogYicxJyAtIG1zZyAwCi0JCQkgICAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiJzEwJy0gbXNnIDEKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGInMTEnLSBib3RoCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQl1bnNpZ25lZCBpbnQgYmFzZSwgLyogcGNzcmJhci9ldW1iYmFyICovCisJCQkJdW5zaWduZWQgY2hhciBuICk7IC8qIGInMScgLSBtc2cgMAorCQkJCQkJCQkJICAgICogYicxMCctIG1zZyAxCisJCQkJCQkJCQkgICAgKiBiJzExJy0gYm90aAorCQkJCQkJCQkJICAgICovCiAKIC8qKgogIFJlYWQgdGhlIG1zZyByZWdpc3RlciBlaXRoZXIgZnJvbSBsb2NhbCBpbmJvdW5kIG1zZyAwLzEsCkBAIC0xNTUsOSArMTU1LDkgQEAKICBPdGhlcndpc2UgbG9jYWwgaW5ib3VuZCBtc2cgaXMgcmVhZC4KICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPTXNnR2V0ICggTE9DQVRJT04sICAgICAgICAgICAgICAgICAvKiBSRU1PVEUvTE9DQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKnBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbiwgICAgICAgICAgIC8qIDAgb3IgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm1zZyApOworCQkJICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCisJCQkgICAgIHVuc2lnbmVkIGludCBuLCAgICAgICAgICAgLyogMCBvciAxICovCisJCQkgICAgIHVuc2lnbmVkIGludCAqbXNnICk7CiAKIC8qKgogIFdyaXRlIHRvIG50aCBNc2cgcmVnaXN0ZXIgZWl0aGVyIG9uIGxvY2FsIG91dGJvdW5kIG1zZyAwLzEsCkBAIC0xNzAsOSArMTcwLDkgQEAKICBPdGhlcndpc2UgbG9jYWwgb3V0Ym91bmQgbXNnIGlzIHdyaXR0ZW4uCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT01zZ1Bvc3QoIExPQ0FUSU9OLCAgICAgICAgICAgICAgICAgLyogUkVNT1RFL0xPQ0FMICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLypwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1zZyApOworCQkJCXVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLypwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCQl1bnNpZ25lZCBpbnQgbiwgICAgICAgICAgIC8qIDAgb3IgMSAqLworCQkJCXVuc2lnbmVkIGludCBtc2cgKTsKIAogLyoqCiAgRW5hYmxlIHRoZSBJbi9PdXQgRG9vckJlbGwgSW50ZXJydXB0CkBAIC0xODQsOCArMTg0LDggQEAKICBQQ0kgbWFzdGVyIG5lZWRzIHRvIGVuYWJsZSBvdXRib3VuZCBkb29yYmVsbCBpbnRlcnJ1cHRzIG9mIHRoZSBkZXZpY2VzIGl0IHdhbnRzIHRvIGhhbmRsZQogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9EQkVuYWJsZSggTE9DQVRJT04sICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbl9kYiApOy8qIHdoZW4gTE9DQUwsIEkyT19JTl9EQiwgTUMsIEkyT19JTl9EQnxNQyAqLworCQkJICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCisJCQkgICAgICB1bnNpZ25lZCBpbnQgaW5fZGIgKTsvKiB3aGVuIExPQ0FMLCBJMk9fSU5fREIsIE1DLCBJMk9fSU5fREJ8TUMgKi8KIAogLyoqCiAgRGlzYWJsZSB0aGUgSW4vT3V0IERvb3JCZWxsIEludGVycnVwdApAQCAtMTk2LDggKzE5Niw4IEBACiAKICAqKi8KIGV4dGVybiBJMk9TVEFUVVMgSTJPREJEaXNhYmxlKCBMT0NBVElPTiwgICAgICAgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluX2RiICk7ICAvKiB3aGVuIExPQ0FMLCBJMk9fSU5fREIsIE1DLCBJMk9fSU5fREJ8TUMgKi8KKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkJICAgICAgIHVuc2lnbmVkIGludCBpbl9kYiApOyAgLyogd2hlbiBMT0NBTCwgSTJPX0lOX0RCLCBNQywgSTJPX0lOX0RCfE1DICovCiAKIC8qKgogIFJlYWQgYSBsb2NhbCBpbmRvb3JiZWxsIHJlZ2lzdGVyLCBvciBhbiBvdXRkb29yYmVsbCBvZiBkZXZpY2VzLgpAQCAtMjEwLDcgKzIxMCw3IEBACiAgT3RoZXJ3aXNlIGxvY2FsIGluIGRvb3JiZWxsIGlzIHJlYWQKICAqKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgSTJPREJHZXQoIExPQ0FUSU9OLCAgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlKTsgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCSAgICAgIHVuc2lnbmVkIGludCBiYXNlKTsgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KIAogLyoqCiAgV3JpdGUgdG8gYSBsb2NhbCBvdXRkb29yYmVsbCByZWdpc3Rlciwgb3IgYW4gaW5kb29yYmVsbCByZWdpc3RlciBvZiBkZXZpY2VzLgpAQCAtMjIyLDggKzIyMiw4IEBACiAgT3RoZXJ3aXNlIGxvY2FsIG91dCBkb29yYmVsbCBpcyB3cml0dGVuCiAgKiovCiBleHRlcm4gdm9pZCBJMk9EQlBvc3QoIExPQ0FUSU9OLCAgICAgICAgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtc2cgKTsgICAgICAgLyogICBpbiAgIC8gb3V0ICAgICovCisJCSAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkgICAgICAgdW5zaWduZWQgaW50IG1zZyApOyAgICAgICAvKiAgIGluICAgLyBvdXQgICAgKi8KIAogLyoqCiAgUmVhZCB0aGUgb3V0Ym91bmQgbXNnIHVuaXQgaW50ZXJydXB0IHN0YXR1cyBvZiBkZXZpY2VzLiBSZWFkaW5nIGFuIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIsCkBAIC0yNTIsOCArMjUyLDggQEAKICBNVUNSLgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPSW5pdCggdW5zaWduZWQgaW50IGV1bWJiYXIsCi0JCQkJICAgICAgICAgICAgICBRVUVVRV9TSVpFLAotCQkJCSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHFiYSk7LyogcXVldWUgYmFzZSBhZGRyZXNzIHRoYXQgbXVzdCBiZSBhbGlnbmVkIGF0IDFNICovCisJCQkJCSAgICAgIFFVRVVFX1NJWkUsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBxYmEpOy8qIHF1ZXVlIGJhc2UgYWRkcmVzcyB0aGF0IG11c3QgYmUgYWxpZ25lZCBhdCAxTSAqLwogLyoqCiAgRW5hYmxlIHRoZSBjaXJjdWxhciBxdWV1ZQogICoqLwpAQCAtMjk3LDggKzI5Nyw4IEBACiAgVW5sZXNzIGJvdGggZnJlZSBxdWV1ZXMgYXJlIGluaXRpYWxpemVkLCBhbGxvY2F0aW5nIGEgZnJlZSBNRiB3aWxsIHJldHVybiAweGZmZmZmZmZmCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT0ZJRk9BbGxvYyggTE9DQVRJT04sCi0JCQkgCSAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLAotCQkJCSAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAqKnBNc2cpOworCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCisJCQkJCSAgICAgICB2b2lkICAgICAgICAgKipwTXNnKTsKIC8qKgogIEZyZWUgYSB1c2VkIG1zZyBmcmFtZSBiYWNrIHRvIGZyZWUgcXVldWUKICBQQ0kgTWFzdGVyIGZyZWVzIGEgTUZBIHRocm91Z2ggb3V0Ym91bmQgcXVldWUgcG9ydCBvZiBkZXZpY2UoT0ZRUFIpCkBAIC0zMTEsOCArMzExLDggQEAKICBhbmQgYnkgZGV2aWNlIHRvIGluaXRpYWxpemUgT3V0Ym91bmQgZnJlZSBxdWV1ZSBiZWZvcmUgSTJPRklGT0FsbG9jIGNhbiBiZSB1c2VkLgogICoqLwogZXh0ZXJuIEkyT1NUQVRVUyBJMk9GSUZPRnJlZSggTE9DQVRJT04sCi0JCQkgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJCSAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICpwTXNnICk7CisJCQkJCSAgdW5zaWduZWQgaW50IGJhc2UsCisJCQkJCSAgdm9pZCAgICAgICAgKnBNc2cgKTsKIAogLyoqCiAgUG9zdCBhIG1zZyBpbnRvIEZJRk8KQEAgLTMyMyw4ICszMjMsOCBAQAogIE90aGVyd2lzZSBxdWV1ZSBvdmVyZmxvdyBpbnRlcnJ1cHQgd2lsbCBhc3NlcnQuCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT0ZJRk9Qb3N0KCBMT0NBVElPTiwKLQkJICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLAotCQkgICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICpwTXNnICk7CisJCQkJICAgICAgdW5zaWduZWQgaW50IGJhc2UsCisJCQkJICAgICAgdm9pZCAgICAgICAgICpwTXNnICk7CiAKIC8qKgogIFJlYWQgYSBtc2cgZnJvbSBGSUZPCkBAIC0zMzIsMTQgKzMzMiwxNCBAQAogIHdoaWxlIGxvY2FsIHByb2Nlc3NvciByZWFkcyBhIG1zZyBmcm9tIGl0cyBpbmJvdW5kIHBvc3QgcXVldWUoSVBUUFIpCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT0ZJRk9HZXQoIExPQ0FUSU9OLAotCSAJCSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLAorCQkJCQkgIHVuc2lnbmVkIGludCBiYXNlLAogCQkJCQkJCSAgdm9pZCAgICAgKipwTXNnICk7CiAKIC8qKgogIEdldCB0aGUgSTJPIFBDSSBjb25maWd1cmF0aW9uIGlkZW50aWZpY2F0aW9uIHJlZ2lzdGVyCiAgKiovCiBleHRlcm4gSTJPU1RBVFVTIEkyT1BDSUNvbmZpZ0dldCggTE9DQVRJT04sCi0JCQkgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCisJCQkJCSAgIHVuc2lnbmVkIGludCBiYXNlLAogCQkJCQkJCSAgIEkyT0lPUCAqKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8xLmMgYi9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8xLmMKaW5kZXggZDg0MGFmMC4uZjA1ODE1MSAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvMS5jCisrKyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvL2kybzEuYwpAQCAtMzQsMTAgKzM0LDEwIEBACiAgKiBQQ0kgbWFzdGVyIG5lZWRzIHRvIGVuYWJsZSB0aGUgb3V0Ym91bmQgaW50ZXJydXB0cyBvZiBkZXZpY2VzIGl0IHdhbnRzIHRvIGhhbmRsZShSRU1PVEUpCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogSTJPU1RBVFVTIEkyT01zZ0VuYWJsZSAoIExPQ0FUSU9OIGxvYywgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbiApICAgIC8qIGInMScgLSBtc2cgMAotCQkJCSAgICAgICAgICAgICAgICogYicxMCctIG1zZyAxCi0JCSAJCSAgICAgICAgICAgICAgICogYicxMSctIGJvdGgKKwkJCSB1bnNpZ25lZCBpbnQgYmFzZSwgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJCSB1bnNpZ25lZCBjaGFyIG4gKSAgICAvKiBiJzEnIC0gbXNnIDAKKwkJCQkJICAgICAgICogYicxMCctIG1zZyAxCisJCQkJCSAgICAgICAqIGInMTEnLSBib3RoCiAJCQkJCSAgICAgICAqLwogewogICAgIHVuc2lnbmVkIGludCByZWcsIHZhbDsKQEAgLTczLDggKzczLDggQEAKICAqICBQQ0kgbWFzdGVyIG5lZWRzIHRvIGRpc2FibGUgb3V0Ym91bmQgaW50ZXJydXB0cyBvZiBkZXZpY2VzIGl0IGlzIG5vdCBpbnRlcmVzdGVkKFJFTU9URSkKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBJMk9TVEFUVVMgSTJPTXNnRGlzYWJsZSggTE9DQVRJT04gbG9jLCAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG4gKSAgLyogYicxJyAtIG1zZyAwCisJCQkgdW5zaWduZWQgaW50IGJhc2UsIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkJIHVuc2lnbmVkIGNoYXIgbiApICAvKiBiJzEnIC0gbXNnIDAKIAkJCQkJICAgICAqIGInMTAnLSBtc2cgMQogCQkJCQkgICAgICogYicxMSctIGJvdGgKIAkJCQkJICAgICAqLwpAQCAtMTE0LDkgKzExNCw5IEBACiAgKiBJZiBpdCBpcyByZW1vdGUsIG91dGJvdW5kIG1zZyBvbiB0aGUgZGV2aWNlIGlzIHJlYWQ7IG90aGVyd2lzZSBsb2NhbCBpbmJvdW5kIG1zZyBpcyByZWFkCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEkyT1NUQVRVUyBJMk9Nc2dHZXQgKCBMT0NBVElPTiBsb2MsICAgICAgICAgICAgIC8qIFJFTU9URS9MT0NBTCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLypwY3NyYmFyL2V1bWJiYXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbiwgICAgICAgICAgIC8qIDAgb3IgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqbXNnICkKKwkJCSB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCisJCQkgdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KKwkJCSB1bnNpZ25lZCBpbnQgKm1zZyApCiB7CiAgICAgaWYgKCBuID49IEkyT19OVU1fTVNHIHx8IG1zZyA9PSAwICkKICAgICB7CkBAIC0xNTEsOSArMTUxLDkgQEAKICAqIElmIGl0IGlzIHJlbW90ZSwgaW5ib3VuZCBtc2cgb24gdGhlIGRldmljZSBpcyB3cml0dGVuOyBvdGhlcndpc2UgbG9jYWwgb3V0Ym91bmQgbXNnIGlzIHdyaXR0ZW4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBJMk9TVEFUVVMgSTJPTXNnUG9zdCggTE9DQVRJT04gbG9jLCAgICAgICAgICAgICAvKiBSRU1PVEUvTE9DQUwgKi8KLSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG4sICAgICAgICAgICAvKiAwIG9yIDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbXNnICkKKwkJICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgICAgICAvKnBjc3JiYXIvZXVtYmJhciAqLworCQkgICAgICB1bnNpZ25lZCBpbnQgbiwgICAgICAgICAgIC8qIDAgb3IgMSAqLworCQkgICAgICB1bnNpZ25lZCBpbnQgbXNnICkKIHsKICAgICBpZiAoIG4gPj0gSTJPX05VTV9NU0cgKQogICAgIHsKQEAgLTE5MCw4ICsxOTAsOCBAQAogICogUENJIG1hc3RlciBuZWVkcyB0byBlbmFibGUgdGhlIG91dGJvdW5kIGRvb3JiZWxsIGludGVycnVwdHMgb2YgZGV2aWNlIGl0IHdhbnRzIHRvIGhhbmRsZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBJMk9TVEFUVVMgSTJPREJFbmFibGUoIExPQ0FUSU9OIGxvYywgICAgICAgIC8qICBSRU1PVEUvTE9DQUwgICAqLwotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsICAgLyogcGNzcmJhci9ldW1iYmFyICovCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5fZGIgKSAvKiB3aGVuIExPQ0FMLCBJMk9fSU5fREIsIE1DLCBJMk9fSU5fREJ8TUMgKi8KKwkJICB1bnNpZ25lZCBpbnQgYmFzZSwgICAvKiBwY3NyYmFyL2V1bWJiYXIgKi8KKwkJICB1bnNpZ25lZCBpbnQgaW5fZGIgKSAvKiB3aGVuIExPQ0FMLCBJMk9fSU5fREIsIE1DLCBJMk9fSU5fREJ8TUMgKi8KIHsKIAogICAgIC8qIExPQ0FUSU9OIC0gUkVNT1RFIDogUENJIG1hc3RlciBpbml0aWFsaXplcyBvdXRib3VuZCBkb29yYmVsbCBtZXNzYWdlIG9mIGRldmljZQpAQCAtMjA5LDE1ICsyMDksMTUgQEAKIAkvKiBwY3NyYmFyIGlzIGJhc2UgKi8KIAl2YWwgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT01JTVIgKTsKIAl2YWwgJj0gMHhmZmZmZmZmNzsKLSAgICAgICAgc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PTUlNUiAsIHZhbCApOworCXN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT01JTVIgLCB2YWwgKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKIAkvKiBldW1iYmFyIGlzIGJhc2UgKi8KIAl2YWwgPSBsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSU1JTVIpOwotICAgICAgICBpbl9kYiA9ICggKH5pbl9kYikgJiAweDMgKSA8PCAzOwotICAgICAgICB2YWwgPSAoIHZhbCAmIDB4ZmZmZmZmZTcpIHwgaW5fZGI7Ci0gICAgICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCAgSTJPX0lNSU1SLCB2YWwgKTsKKwlpbl9kYiA9ICggKH5pbl9kYikgJiAweDMgKSA8PCAzOworCXZhbCA9ICggdmFsICYgMHhmZmZmZmZlNykgfCBpbl9kYjsKKwlzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgIEkyT19JTUlNUiwgdmFsICk7CiAgICAgfQogCiAgICAgcmV0dXJuIEkyT1NVQ0NFU1M7CkBAIC0yMzcsOCArMjM3LDggQEAKICAqIFBDSSBtYXN0ZXIgbmVlZHMgdG8gZGlzYWJsZSBvdXRib3VuZCBkb29yYmVsbCBpbnRlcnJ1cHRzIG9mIGRldmljZSBpdCBpcyBub3QgaW50ZXJlc3RlZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEkyT1NUQVRVUyBJMk9EQkRpc2FibGUoIExPQ0FUSU9OIGxvYywgICAgICAgICAgLyogIFJFTU9URS9MT0NBTCAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluX2RiICkgICAvKiB3aGVuIExPQ0FMLCBJMk9fSU5fREIsIE1DLCBJMk9fSU5fREJ8TUMgKi8KKwkJCXVuc2lnbmVkIGludCBiYXNlLCAgICAgLyogcGNzcmJhci9ldW1iYmFyICovCisJCQl1bnNpZ25lZCBpbnQgaW5fZGIgKSAgIC8qIHdoZW4gTE9DQUwsIEkyT19JTl9EQiwgTUMsIEkyT19JTl9EQnxNQyAqLwogewogICAgIC8qIExPQ0FUSU9OIC0gUkVNT1RFIDogaGFuZGxlIGRldmljZSdzIG91dCBib3VuZCBtZXNzYWdlIGluaXRpYWxpemF0aW9uCiAgICAgICogICAgICAgICAgICBMT0NBTCAgOiBoYW5kbGUgbG9jYWwgaW4gYm91bmQgbWVzc2FnZSBpbml0aWFsaXphdGlvbgpAQCAtMjU1LDE0ICsyNTUsMTQgQEAKIAkvKiBwY3NyYmFyIGlzIHRoZSBiYXNlICovCiAJdmFsID0gbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09NSU1SICk7CiAJdmFsIHw9IDB4ODsKLSAgICAgICAgc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PTUlNUiwgdmFsICk7CisJc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PTUlNUiwgdmFsICk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAJICAgIHZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JTUlNUik7Ci0gICAgICAgICAgICBpbl9kYiA9ICggaW5fZGIgJiAweDMgKSA8PCAzOwotICAgICAgICAgICAgdmFsIHw9IGluX2RiOwotICAgICAgICAgICAgc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JTUlNUiwgdmFsICk7CisJICAgIGluX2RiID0gKCBpbl9kYiAmIDB4MyApIDw8IDM7CisJICAgIHZhbCB8PSBpbl9kYjsKKwkgICAgc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JTUlNUiwgdmFsICk7CiAgICAgfQogCiAgICAgcmV0dXJuIEkyT1NVQ0NFU1M7CkBAIC0yODcsMjIgKzI4NywyMiBAQAogICogd2lsbCBjYXVzZSBpbnRlcnJ1cHQgcGVuZGluZy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1bnNpZ25lZCBpbnQgSTJPREJHZXQoIExPQ0FUSU9OIGxvYywgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UpICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLworCQkgICAgICAgdW5zaWduZWQgaW50IGJhc2UpICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwogewogICAgIHVuc2lnbmVkIGludCBtc2csIHZhbDsKIAogICAgIGlmICggbG9jID09IFJFTU9URSApCiAgICAgewogCS8qIHJlYWQgb3V0Ym91bmQgZG9vcmJlbGwgcmVnaXN0ZXIgb2YgZGV2aWNlLCBwY3NyYmFyIGlzIHRoZSBiYXNlICovCi0gICAgICAgIHZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PREJSICk7Ci0gICAgICAgIG1zZyA9IHZhbCAmIDB4ZTAwMDAwMDA7Ci0gICAgICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fT0RCUiwgdmFsICk7IC8qIGNsZWFyIHRoZSByZWdpc3RlciAqLworCXZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PREJSICk7CisJbXNnID0gdmFsICYgMHhlMDAwMDAwMDsKKwlzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09EQlIsIHZhbCApOyAvKiBjbGVhciB0aGUgcmVnaXN0ZXIgKi8KICAgICB9CiAgICAgZWxzZQogICAgIHsKIAkvKiByZWFkIHRoZSBpbmJvdW5kIGRvb3JiZWxsIHJlZ2lzdGVyLCBldW1iYmFyIGlzIHRoZSBiYXNlICovCi0gICAgICAgIHZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JREJSICk7Ci0gICAgICAgIHN0b3JlX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSURCUiwgdmFsICk7IC8qIGNsZWFyIHRoZSByZWdpc3RlciAqLworCXZhbCA9IGxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JREJSICk7CisJc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JREJSLCB2YWwgKTsgLyogY2xlYXIgdGhlIHJlZ2lzdGVyICovCiAJbXNnID0gdmFsOwogICAgIH0KIApAQCAtMzIzLDggKzMyMyw4IEBACiAgKiBPdGhlcndpc2UgbG9jYWwgb3V0IGRvb3JiZWxsIGlzIHdyaXR0ZW4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIEkyT0RCUG9zdCggTE9DQVRJT04gbG9jLCAgICAgICAgICAgICAvKiAgUkVNT1RFL0xPQ0FMICAgKi8KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwgICAgICAgIC8qIHBjc3JiYXIvZXVtYmJhciAqLwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtc2cgKSAgICAgICAgLyogICBpbiAgIC8gb3V0ICAgICovCisJCXVuc2lnbmVkIGludCBiYXNlLCAgICAgICAgLyogcGNzcmJhci9ldW1iYmFyICovCisJCXVuc2lnbmVkIGludCBtc2cgKSAgICAgICAgLyogICBpbiAgIC8gb3V0ICAgICovCiB7CiAgICAgaWYgKCBsb2MgPT0gUkVNT1RFICkKICAgICB7CkBAIC01MjcsOCArNTI3LDggQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEkyT1NUQVRVUyBJMk9GSUZPQWxsb2MoIExPQ0FUSU9OIGxvYywKLQkJICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZSwKLQkJICAgICAgICB2b2lkICAgICAgICAgKipwTXNnICkKKwkJCXVuc2lnbmVkIGludCBiYXNlLAorCQkJdm9pZCAgICAgICAgICoqcE1zZyApCiB7CiAgICAgSTJPU1RBVFVTIHN0YXQgPSBJMk9TVUNDRVNTOwogICAgIHZvaWQgKnBIZHIsICpwVGlsOwpAQCAtNTQzLDEyICs1NDMsMTIgQEAKICAgICB7CiAJLyogcGNzcmJhciBpcyB0aGUgYmFzZSBhbmQgcmVhZCB0aGUgaW5ib3VuZCBmcmVlIHRhaWwgcHRyICovCiAJcFRpbCA9ICh2b2lkICopbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX0lGUVBSICk7Ci0gICAgICAgIGlmICggKCAodW5zaWduZWQgaW50KXBUaWwgJiAweEZGRkZGRkYgKSA9PSAweEZGRkZGRkZGICkKLSAgICAgICAgeworCWlmICggKCAodW5zaWduZWQgaW50KXBUaWwgJiAweEZGRkZGRkYgKSA9PSAweEZGRkZGRkZGICkKKwl7CiAJICAgIHN0YXQgPSBJMk9RVUVFTVBUWTsKLSAgICAgICAgfQorCX0KIAllbHNlCi0gICAgICAgIHsKKwl7CiAJICAgICpwTXNnID0gcFRpbDsKIAl9CiAgICAgfQpAQCAtNTYyLDcgKzU2Miw3IEBACiAJaWYgKCBwSGRyID09IHBUaWwgKQogCXsKIAkgICAgLyogaGRyIGFuZCB0aWwgcG9pbnQgdG8gdGhlIHNhbWUgZmlmbyBpdGVtLCBubyBmcmVlIE1GQSAqLwotICAgICAgICAgICAgc3RhdCA9IEkyT1FVRUVNUFRZOworCSAgICBzdGF0ID0gSTJPUVVFRU1QVFk7CiAJfQogCWVsc2UKIAl7CkBAIC02MTUsNyArNjE1LDcgQEAKICAgICB7CiAJLyogZXVtYmJhciBpcyB0aGUgYmFzZSAqLwogCXBIZHIgPSAodm9pZCAqKilsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSUZIUFIgKTsKLSAgICAgICAgcFRpbCA9ICh2b2lkICoqKWxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19JRlRQUiApOworCXBUaWwgPSAodm9pZCAqKilsb2FkX3J1bnRpbWVfcmVnKCBiYXNlLCBJMk9fSUZUUFIgKTsKIAogCS8qIHN0b3JlIE1GQSAqLwogCSpwSGRyID0gcE1zZzsKQEAgLTYzMyw3ICs2MzMsNyBAQAogCWlmICggcEhkciAhPSBwVGlsICkKIAl7CiAJICAgc3RvcmVfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PUEhQUiwgKHVuc2lnbmVkIGludClwSGRyKTsKLSAgICAgICAgfQorCX0KIAllbHNlCiAJewogCSAgICBzdGF0ID0gSTJPUVVFRlVMTDsKQEAgLTY3Nyw3ICs2NzcsNyBAQAogICAgIHsKIAkvKiBldW1iYmFyIGlzIHRoZSBiYXNlICovCiAJcEhkciA9ICh2b2lkICoqKWxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PUEhQUiApOwotICAgICAgICBwVGlsID0gKHZvaWQgKiopbG9hZF9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09QVFBSICk7CisJcFRpbCA9ICh2b2lkICoqKWxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PUFRQUiApOwogCiAJLyogc3RvcmUgTUZBICovCiAJKnBIZHIgPSBwTXNnOwpAQCAtNjk1LDcgKzY5NSw3IEBACiAJaWYgKCBwSGRyICE9IHBUaWwgKQogCXsKIAkgICBzdG9yZV9ydW50aW1lX3JlZyggYmFzZSwgSTJPX09QSFBSLCAodW5zaWduZWQgaW50KXBIZHIpOwotICAgICAgICB9CisJfQogCWVsc2UKIAl7CiAJICAgIHN0YXQgPSBJMk9RVUVGVUxMOwpAQCAtNzM0LDEyICs3MzQsMTIgQEAKICAgICB7CiAJLyogcGNzcmJhciBpcyB0aGUgYmFzZSAqLwogCXBUaWwgPSAodm9pZCAqKWxvYWRfcnVudGltZV9yZWcoIGJhc2UsIEkyT19PRlFQUiApOwotICAgICAgICBpZiAoICggKHVuc2lnbmVkIGludClwVGlsICYgMHhGRkZGRkZGICkgPT0gMHhGRkZGRkZGRiApCi0gICAgICAgIHsKKwlpZiAoICggKHVuc2lnbmVkIGludClwVGlsICYgMHhGRkZGRkZGICkgPT0gMHhGRkZGRkZGRiApCisJewogCSAgICBzdGF0ID0gSTJPUVVFRU1QVFk7Ci0gICAgICAgIH0KKwl9CiAJZWxzZQotICAgICAgICB7CisJewogCSAgICAqcE1zZyA9IHBUaWw7CiAJfQogICAgIH0KQEAgLTc1Myw3ICs3NTMsNyBAQAogCWlmICggcEhkciA9PSBwVGlsICkKIAl7CiAJICAgIC8qIG5vIGZyZWUgTUZBICovCi0gICAgICAgICAgICBzdGF0ID0gSTJPUVVFRU1QVFk7CisJICAgIHN0YXQgPSBJMk9RVUVFTVBUWTsKIAl9CiAJZWxzZQogCXsKQEAgLTc4Myw4ICs3ODMsOCBAQAogICogICAgICAgc2hvdWxkIHBhc3MgZXVtYmJhci4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBJMk9TVEFUVVMgSTJPUENJQ29uZmlnR2V0KCBMT0NBVElPTiBsb2MsCi0JCSAgICAgICAgdW5zaWduZWQgaW50IGJhc2UsCi0JCSAgICAgICAgSTJPSU9QICogdmFsKQorCQkJdW5zaWduZWQgaW50IGJhc2UsCisJCQlJMk9JT1AgKiB2YWwpCiB7CiAgICAgdW5zaWduZWQgaW50IHRtcDsKICAgICBpZiAoIHZhbCA9PSAwICkKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvL2kybzIuUyBiL2NwdS9tcGM4MjR4L2RyaXZlcnMvaTJvL2kybzIuUwppbmRleCAxMDMzOTc5Li45OTBmOWVmIDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9kcml2ZXJzL2kyby9pMm8yLlMKKysrIGIvY3B1L21wYzgyNHgvZHJpdmVycy9pMm8vaTJvMi5TCkBAIC0xOSwxMiArMTksMTIgQEAKIGxvYWRfcnVudGltZV9yZWc6CiAKIAkJICB4b3IgcjUscjUscjUKLSAgICAgICAgICBvciAgcjUscjUscjMgICAgICAgLyogc2F2ZSBldW1iYmFyICovCisJICBvciAgcjUscjUscjMgICAgICAgLyogc2F2ZSBldW1iYmFyICovCiAKIAkgICAgICBsd2JyeAlyMyxyNCxyNQogCSAgICAgIHN5bmMKIAotIAkgICAgICBiY2xyIDIwLCAwCisJICAgICAgYmNsciAyMCwgMAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZnVuY3Rpb246IHN0b3JlX3J1bnRpbWVfcmVnCkBAIC0zNCw5ICszNCw5IEBACiAgKiAgICAgICAgcjUgLSBuZXcgdmFsdWUgdG8gYmUgc3RvcmVkCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAgIC50ZXh0Ci0gICAgICAgICAgIC5hbGlnbiAyCi0gICAgICAgICAgIC5nbG9iYWwgc3RvcmVfcnVudGltZV9yZWcKKwkgICAudGV4dAorCSAgIC5hbGlnbiAyCisJICAgLmdsb2JhbCBzdG9yZV9ydW50aW1lX3JlZwogc3RvcmVfcnVudGltZV9yZWc6CiAKIAkJICB4b3IgcjAscjAscjAKQEAgLTQ1LDQgKzQ1LDMgQEAKIAkgICAgICBzeW5jCiAKIAkJICBiY2xyICAgMjAsMAotCmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9pbnRlcnJ1cHRzLmMgYi9jcHUvbXBjODI0eC9pbnRlcnJ1cHRzLmMKaW5kZXggMTI4NDFiMy4uNzUzNTc1ZiAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNHgvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9tcGM4MjR4L2ludGVycnVwdHMuYwpAQCAtODMsMTIgKzgzLDEyIEBACiB7CiAJZGVjcmVtZW50ZXJfY291bnQgPSAoZ2V0X2J1c19mcmVxICgwKSAvIDQpIC8gQ0ZHX0haOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIEl0J3MgYWxsIGJyb2tlbiBhdCB0aGUgbW9tZW50IGFuZCBJIGN1cnJlbnRseSBkb24ndCBuZWVkCi0gICAgICAgICAqIGludGVycnVwdHMuIElmIHlvdSB3YW50IHRvIGZpeCBpdCwgaGF2ZSBhIGxvb2sgYXQgdGhlIGVwaWMKLSAgICAgICAgICogZHJpdmVycyBpbiBkaW5rMzIgdjEyLiBUaGV5IGRvIGV2ZXJ0aGluZyBhbmQgTW90b3JvbGEgc2FpZAotICAgICAgICAgKiBJIGNvdWxkIHVzZSB0aGUgZGluayBzb3VyY2UgaW4gdGhpcyBwcm9qZWN0IGFzIGxvbmcgYXMKLSAgICAgICAgICogY29weXJpZ2h0IG5vdGljZXMgcmVtYWluIGludGFjdC4KKwkvKgorCSAqIEl0J3MgYWxsIGJyb2tlbiBhdCB0aGUgbW9tZW50IGFuZCBJIGN1cnJlbnRseSBkb24ndCBuZWVkCisJICogaW50ZXJydXB0cy4gSWYgeW91IHdhbnQgdG8gZml4IGl0LCBoYXZlIGEgbG9vayBhdCB0aGUgZXBpYworCSAqIGRyaXZlcnMgaW4gZGluazMyIHYxMi4gVGhleSBkbyBldmVydGhpbmcgYW5kIE1vdG9yb2xhIHNhaWQKKwkgKiBJIGNvdWxkIHVzZSB0aGUgZGluayBzb3VyY2UgaW4gdGhpcyBwcm9qZWN0IGFzIGxvbmcgYXMKKwkgKiBjb3B5cmlnaHQgbm90aWNlcyByZW1haW4gaW50YWN0LgogCSAqLwogCiAJZXBpY0luaXQgKEVQSUNfRElSRUNUX0lSUSwgMCk7CmRpZmYgLS1naXQgYS9jcHUvbXBjODI0eC9zdGFydC5TIGIvY3B1L21wYzgyNHgvc3RhcnQuUwppbmRleCAwMDRlM2IzLi5iMWNkYjg0IDEwMDY0NAotLS0gYS9jcHUvbXBjODI0eC9zdGFydC5TCisrKyBiL2NwdS9tcGM4MjR4L3N0YXJ0LlMKQEAgLTIwMiw3ICsyMDIsNiBAQAogCWJsCWJvYXJkX2luaXRfZgkvKiBydW4gMXN0IHBhcnQgb2YgYm9hcmQgaW5pdCBjb2RlIChmcm9tIEZsYXNoKSAqLwogCiAKLQogCS5nbG9ibAlfc3RhcnRfb2ZfdmVjdG9ycwogX3N0YXJ0X29mX3ZlY3RvcnM6CiAKQEAgLTg0MCw1ICs4MzksMyBAQAogCWJsdAkxYgogCiAJYmxyCi0KLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNjAvYmVkYnVnXzYwM2UuYyBiL2NwdS9tcGM4MjYwL2JlZGJ1Z182MDNlLmMKaW5kZXggMWNhMDU3Zi4uOWMyOWIzNSAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNjAvYmVkYnVnXzYwM2UuYworKysgYi9jcHUvbXBjODI2MC9iZWRidWdfNjAzZS5jCkBAIC01LDggKzUsNyBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotCi0jaW5jbHVkZSA8Y21kX2JlZGJ1Zy5oPgorI2luY2x1ZGUgPGJlZGJ1Zy90eXBlLmg+CiAjaW5jbHVkZSA8YmVkYnVnL2JlZGJ1Zy5oPgogI2luY2x1ZGUgPGJlZGJ1Zy9yZWdzLmg+CiAjaW5jbHVkZSA8YmVkYnVnL3BwYy5oPgpAQCAtNjQsNyArNjMsNyBAQAogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiB2b2lkIGJlZGJ1ZzYwM2VfZG9fYnJlYWsgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywKLSAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphcmd2W10pCisJCQkgY2hhciAqYXJndltdKQogewogICBsb25nCQlhZGRyOyAgICAgICAgICAgLyogQWRkcmVzcyB0byBicmVhayBhdCAgKi8KICAgaW50CQl3aGljaF9icDsgICAgICAgLyogQnJlYWtwb2ludCBudW1iZXIgICAgKi8KQEAgLTExNiw4ICsxMTUsOCBAQAogICAvKiBTZXQgYSBicmVha3BvaW50IGF0IHRoZSBhZGRyZXNzICovCiAKICAgaWYoISgoIGlzZGlnaXQoIGFyZ3ZbIDEgXVsgMCBdICkpIHx8Ci0gICAgICAgICgoIGFyZ3ZbIDEgXVsgMCBdID49ICdhJyApICYmICggYXJndlsgMSBdWyAwIF0gPD0gJ2YnICkpIHx8Ci0gICAgICAgICgoIGFyZ3ZbIDEgXVsgMCBdID49ICdBJyApICYmICggYXJndlsgMSBdWyAwIF0gPD0gJ0YnICkpKSkKKwkoKCBhcmd2WyAxIF1bIDAgXSA+PSAnYScgKSAmJiAoIGFyZ3ZbIDEgXVsgMCBdIDw9ICdmJyApKSB8fAorCSgoIGFyZ3ZbIDEgXVsgMCBdID49ICdBJyApICYmICggYXJndlsgMSBdWyAwIF0gPD0gJ0YnICkpKSkKICAgewogICAgIHByaW50ZiAoIlVzYWdlOlxuJXNcbiIsIGNtZHRwLT51c2FnZSk7CiAgICAgcmV0dXJuOwpAQCAtMjM2LDQgKzIzNSwzIEBACiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICNlbmRpZgotCmRpZmYgLS1naXQgYS9jcHUvbXBjODI2MC9jcHUuYyBiL2NwdS9tcGM4MjYwL2NwdS5jCmluZGV4IGI4YmE0OGMuLjc2NjJmYzYgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjYwL2NwdS5jCisrKyBiL2NwdS9tcGM4MjYwL2NwdS5jCkBAIC0xODAsNyArMTgwLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogaW50Ci1kb19yZXNldCAoY21kX3RibF90ICogY21kdHAsIGJkX3QgKiBiZCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCitkb19yZXNldCAoY21kX3RibF90ICogY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXVsb25nIG1zciwgYWRkcjsKIApkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNjAvY3B1X2luaXQuYyBiL2NwdS9tcGM4MjYwL2NwdV9pbml0LmMKaW5kZXggZDA1NDVjZi4uZmQwOWE4ZCAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNjAvY3B1X2luaXQuYworKysgYi9jcHUvbXBjODI2MC9jcHVfaW5pdC5jCkBAIC03MCwxMyArNzAsMTMgQEAKIAkJCXVpbnQgdHBtc2sgPSB+cG1zazsKIAogCQkJLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSAoc29tZXdoYXQgY29uZnVzZWQpIHBhcmFncmFwaCBhdCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGJvdHRvbSBvZiBwYWdlIDM1LTUgd2FybnMgdGhhdCB0aGVyZSBtaWdodAotICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgInVua25vd24gYmVoYXZpb3VyIiB3aGVuIHByb2dyYW1taW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBQU09SeCBhbmQgUERJUngsIGlmIFBQQVJ4ID0gMSwgc28gSQotICAgICAgICAgICAgICAgICAgICAgICAgICogZGVjaWRlZCB0aGlzIG1lYW50IEkgaGFkIHRvIGRpc2FibGUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBkZWRpY2F0ZWQgZnVuY3Rpb24gZmlyc3QsIGFuZCBlbmFibGUgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGxhc3QuCisJCQkgKiB0aGUgKHNvbWV3aGF0IGNvbmZ1c2VkKSBwYXJhZ3JhcGggYXQgdGhlCisJCQkgKiBib3R0b20gb2YgcGFnZSAzNS01IHdhcm5zIHRoYXQgdGhlcmUgbWlnaHQKKwkJCSAqIGJlICJ1bmtub3duIGJlaGF2aW91ciIgd2hlbiBwcm9ncmFtbWluZworCQkJICogUFNPUnggYW5kIFBESVJ4LCBpZiBQUEFSeCA9IDEsIHNvIEkKKwkJCSAqIGRlY2lkZWQgdGhpcyBtZWFudCBJIGhhZCB0byBkaXNhYmxlIHRoZQorCQkJICogZGVkaWNhdGVkIGZ1bmN0aW9uIGZpcnN0LCBhbmQgZW5hYmxlIGl0CisJCQkgKiBsYXN0LgogCQkJICovCiAJCQlpb3AtPnBwYXIgJj0gdHBtc2s7CiAJCQlpb3AtPnBzb3IgPSAoaW9wLT5wc29yICYgdHBtc2spIHwgcHNvcjsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL2V0aGVyX3NjYy5jIGIvY3B1L21wYzgyNjAvZXRoZXJfc2NjLmMKaW5kZXggOGI2YWYzMS4uMTAxMzNmYSAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNjAvZXRoZXJfc2NjLmMKKysrIGIvY3B1L21wYzgyNjAvZXRoZXJfc2NjLmMKQEAgLTQzLDMxICs0MywzMSBAQAogIyAgZGVmaW5lIENQTV9DUl9FTkVUX1BBR0UgICAgICBDUE1fQ1JfU0NDMV9QQUdFCiAjICBkZWZpbmUgQ1BNX0NSX0VORVRfU0JMT0NLICAgIENQTV9DUl9TQ0MxX1NCTE9DSwogIyAgZGVmaW5lIENNWFNDUl9NQVNLICAgICAgICAgIChDTVhTQ1JfU0MxICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENNWFNDUl9SUzFDU19NU0sgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ01YU0NSX1RTMUNTX01TSykKKwkJCQlDTVhTQ1JfUlMxQ1NfTVNLICAgIHxcCisJCQkJQ01YU0NSX1RTMUNTX01TSykKIAogI2VsaWYgKENPTkZJR19FVEhFUl9JTkRFWCA9PSAyKQogIyAgZGVmaW5lIFBST0ZGX0VORVQgICAgICAgICAgICBQUk9GRl9TQ0MyCiAjICBkZWZpbmUgQ1BNX0NSX0VORVRfUEFHRSAgICAgIENQTV9DUl9TQ0MyX1BBR0UKICMgIGRlZmluZSBDUE1fQ1JfRU5FVF9TQkxPQ0sgICAgQ1BNX0NSX1NDQzJfU0JMT0NLCiAjICBkZWZpbmUgQ01YU0NSX01BU0sgICAgICAgICAgKENNWFNDUl9TQzIgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ01YU0NSX1JTMkNTX01TSyAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTVhTQ1JfVFMyQ1NfTVNLKQorCQkJCUNNWFNDUl9SUzJDU19NU0sgICAgfFwKKwkJCQlDTVhTQ1JfVFMyQ1NfTVNLKQogCiAjZWxpZiAoQ09ORklHX0VUSEVSX0lOREVYID09IDMpCiAjICBkZWZpbmUgUFJPRkZfRU5FVCAgICAgICAgICAgIFBST0ZGX1NDQzMKICMgIGRlZmluZSBDUE1fQ1JfRU5FVF9QQUdFICAgICAgQ1BNX0NSX1NDQzNfUEFHRQogIyAgZGVmaW5lIENQTV9DUl9FTkVUX1NCTE9DSyAgICBDUE1fQ1JfU0NDM19TQkxPQ0sKICMgIGRlZmluZSBDTVhTQ1JfTUFTSyAgICAgICAgICAoQ01YU0NSX1NDMyAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTVhTQ1JfUlMzQ1NfTVNLICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENNWFNDUl9UUzNDU19NU0spCisJCQkJQ01YU0NSX1JTM0NTX01TSyAgICB8XAorCQkJCUNNWFNDUl9UUzNDU19NU0spCiAjZWxpZiAoQ09ORklHX0VUSEVSX0lOREVYID09IDQpCiAjICBkZWZpbmUgUFJPRkZfRU5FVCAgICAgICAgICAgIFBST0ZGX1NDQzQKICMgIGRlZmluZSBDUE1fQ1JfRU5FVF9QQUdFICAgICAgQ1BNX0NSX1NDQzRfUEFHRQogIyAgZGVmaW5lIENQTV9DUl9FTkVUX1NCTE9DSyAgICBDUE1fQ1JfU0NDNF9TQkxPQ0sKICMgIGRlZmluZSBDTVhTQ1JfTUFTSyAgICAgICAgICAoQ01YU0NSX1NDNCAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTVhTQ1JfUlM0Q1NfTVNLICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENNWFNDUl9UUzRDU19NU0spCisJCQkJQ01YU0NSX1JTNENTX01TSyAgICB8XAorCQkJCUNNWFNDUl9UUzRDU19NU0spCiAKICNlbmRpZgogCkBAIC0xMDQsMjcgKzEwNCwyNyBAQAogICAgIGludCByZXN1bHQgPSAwOwogCiAgICAgaWYgKGxlbmd0aCA8PSAwKSB7Ci0gICAgICAgIHByaW50Zigic2NjOiBiYWQgcGFja2V0IHNpemU6ICVkXG4iLCBsZW5ndGgpOwotICAgICAgICBnb3RvIG91dDsKKwlwcmludGYoInNjYzogYmFkIHBhY2tldCBzaXplOiAlZFxuIiwgbGVuZ3RoKTsKKwlnb3RvIG91dDsKICAgICB9CiAKICAgICBmb3IoaT0wOyBydHgtPnR4YmRbdHhJZHhdLmNiZF9zYyAmIEJEX0VORVRfVFhfUkVBRFk7IGkrKykgewotICAgICAgICBpZiAoaSA+PSBUT1VUX0xPT1ApIHsKLSAgICAgICAgICAgIHByaW50Zigic2NjOiB0eCBidWZmZXIgbm90IHJlYWR5XG4iKTsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICB9CisJaWYgKGkgPj0gVE9VVF9MT09QKSB7CisJICAgIHByaW50Zigic2NjOiB0eCBidWZmZXIgbm90IHJlYWR5XG4iKTsKKwkgICAgZ290byBvdXQ7CisJfQogICAgIH0KIAogICAgIHJ0eC0+dHhiZFt0eElkeF0uY2JkX2J1ZmFkZHIgPSAodWludClwYWNrZXQ7CiAgICAgcnR4LT50eGJkW3R4SWR4XS5jYmRfZGF0bGVuID0gbGVuZ3RoOwogICAgIHJ0eC0+dHhiZFt0eElkeF0uY2JkX3NjIHw9IChCRF9FTkVUX1RYX1JFQURZIHwgQkRfRU5FVF9UWF9MQVNUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRfRU5FVF9UWF9XUkFQKTsKKwkJCQlCRF9FTkVUX1RYX1dSQVApOwogCiAgICAgZm9yKGk9MDsgcnR4LT50eGJkW3R4SWR4XS5jYmRfc2MgJiBCRF9FTkVUX1RYX1JFQURZOyBpKyspIHsKLSAgICAgICAgaWYgKGkgPj0gVE9VVF9MT09QKSB7Ci0gICAgICAgICAgICBwcmludGYoInNjYzogdHggZXJyb3JcbiIpOwotICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KKwlpZiAoaSA+PSBUT1VUX0xPT1ApIHsKKwkgICAgcHJpbnRmKCJzY2M6IHR4IGVycm9yXG4iKTsKKwkgICAgZ290byBvdXQ7CisJfQogICAgIH0KIAogICAgIC8qIHJldHVybiBvbmx5IHN0YXR1cyBiaXRzICovCkBAIC0xNDEsMzcgKzE0MSwzNyBAQAogCiAgICAgZm9yICg7OykKICAgICB7Ci0gICAgICAgIGlmIChydHgtPnJ4YmRbcnhJZHhdLmNiZF9zYyAmIEJEX0VORVRfUlhfRU1QVFkpIHsKLSAgICAgICAgICAgIGxlbmd0aCA9IC0xOwotICAgICAgICAgICAgYnJlYWs7ICAgICAvKiBub3RoaW5nIHJlY2VpdmVkIC0gbGVhdmUgZm9yKCkgbG9vcCAqLwotICAgICAgICB9CisJaWYgKHJ0eC0+cnhiZFtyeElkeF0uY2JkX3NjICYgQkRfRU5FVF9SWF9FTVBUWSkgeworCSAgICBsZW5ndGggPSAtMTsKKwkgICAgYnJlYWs7ICAgICAvKiBub3RoaW5nIHJlY2VpdmVkIC0gbGVhdmUgZm9yKCkgbG9vcCAqLworCX0KIAotICAgICAgICBsZW5ndGggPSBydHgtPnJ4YmRbcnhJZHhdLmNiZF9kYXRsZW47CisJbGVuZ3RoID0gcnR4LT5yeGJkW3J4SWR4XS5jYmRfZGF0bGVuOwogCi0gICAgICAgIGlmIChydHgtPnJ4YmRbcnhJZHhdLmNiZF9zYyAmIDB4MDAzZikKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRmKCJlcnI6ICV4XG4iLCBydHgtPnJ4YmRbcnhJZHhdLmNiZF9zYyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvKiBQYXNzIHRoZSBwYWNrZXQgdXAgdG8gdGhlIHByb3RvY29sIGxheWVycy4gKi8KLSAgICAgICAgICAgIE5ldFJlY2VpdmUoTmV0UnhQYWNrZXRzW3J4SWR4XSwgbGVuZ3RoIC0gNCk7Ci0gICAgICAgIH0KKwlpZiAocnR4LT5yeGJkW3J4SWR4XS5jYmRfc2MgJiAweDAwM2YpCisJeworCSAgICBwcmludGYoImVycjogJXhcbiIsIHJ0eC0+cnhiZFtyeElkeF0uY2JkX3NjKTsKKwl9CisJZWxzZQorCXsKKwkgICAgLyogUGFzcyB0aGUgcGFja2V0IHVwIHRvIHRoZSBwcm90b2NvbCBsYXllcnMuICovCisJICAgIE5ldFJlY2VpdmUoTmV0UnhQYWNrZXRzW3J4SWR4XSwgbGVuZ3RoIC0gNCk7CisJfQogCiAKLSAgICAgICAgLyogR2l2ZSB0aGUgYnVmZmVyIGJhY2sgdG8gdGhlIFNDQy4gKi8KLSAgICAgICAgcnR4LT5yeGJkW3J4SWR4XS5jYmRfZGF0bGVuID0gMDsKKwkvKiBHaXZlIHRoZSBidWZmZXIgYmFjayB0byB0aGUgU0NDLiAqLworCXJ0eC0+cnhiZFtyeElkeF0uY2JkX2RhdGxlbiA9IDA7CiAKLSAgICAgICAgLyogd3JhcCBhcm91bmQgYnVmZmVyIGluZGV4IHdoZW4gbmVjZXNzYXJ5ICovCi0gICAgICAgIGlmICgocnhJZHggKyAxKSA+PSBQS1RCVUZTUlgpIHsKLSAgICAgICAgICAgIHJ0eC0+cnhiZFtQS1RCVUZTUlggLSAxXS5jYmRfc2MgPSAoQkRfRU5FVF9SWF9XUkFQIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRfRU5FVF9SWF9FTVBUWSk7Ci0gICAgICAgICAgICByeElkeCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBydHgtPnJ4YmRbcnhJZHhdLmNiZF9zYyA9IEJEX0VORVRfUlhfRU1QVFk7Ci0gICAgICAgICAgICByeElkeCsrOwotICAgICAgICB9CisJLyogd3JhcCBhcm91bmQgYnVmZmVyIGluZGV4IHdoZW4gbmVjZXNzYXJ5ICovCisJaWYgKChyeElkeCArIDEpID49IFBLVEJVRlNSWCkgeworCSAgICBydHgtPnJ4YmRbUEtUQlVGU1JYIC0gMV0uY2JkX3NjID0gKEJEX0VORVRfUlhfV1JBUCB8CisJCQkJCSAgICAgICBCRF9FTkVUX1JYX0VNUFRZKTsKKwkgICAgcnhJZHggPSAwOworCX0KKwllbHNlIHsKKwkgICAgcnR4LT5yeGJkW3J4SWR4XS5jYmRfc2MgPSBCRF9FTkVUX1JYX0VNUFRZOworCSAgICByeElkeCsrOworCX0KICAgICB9CiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgIC8qIDI0LjIxIC0gKDQsNSk6IGNvbm5lY3QgU0NDJ3MgdHggYW5kIHJ4IGNsb2NrcywgdXNlIE5NU0kgZm9yIFNDQyAqLwogICAgIGltbXItPmltX2NwbXV4LmNteF91YXIgPSAwOwogICAgIGltbXItPmltX2NwbXV4LmNteF9zY3IgPSAoIChpbW1yLT5pbV9jcG11eC5jbXhfc2NyICYgfkNNWFNDUl9NQVNLKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0NNWFNDUl9WQUxVRSk7CisJCQkgICAgICAgQ0ZHX0NNWFNDUl9WQUxVRSk7CiAKIAogICAgIC8qIDI0LjIxICg2KSB3cml0ZSBSQkFTRSBhbmQgVEJBU0UgdG8gcGFyYW1ldGVyIFJBTSAqLwpAQCAtMjIxLDkgKzIyMSw5IEBACiAgICAgLyogMjQuMjEgLSAoNyk6IFdyaXRlIElOSVQgUlggQU5EIFRYIFBBUkFNRVRFUlMgdG8gQ1BDUiAqLwogICAgIHdoaWxlKGltbXItPmltX2NwbS5jcF9jcGNyICYgQ1BNX0NSX0ZMRyk7CiAgICAgaW1tci0+aW1fY3BtLmNwX2NwY3IgPSBta19jcl9jbWQoQ1BNX0NSX0VORVRfUEFHRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUE1fQ1JfRU5FVF9TQkxPQ0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUE1fQ1JfSU5JVF9UUlgpIHwgQ1BNX0NSX0ZMRzsKKwkJCQkgICAgIENQTV9DUl9FTkVUX1NCTE9DSywKKwkJCQkgICAgIDB4MGMsCisJCQkJICAgICBDUE1fQ1JfSU5JVF9UUlgpIHwgQ1BNX0NSX0ZMRzsKIAogICAgIC8qIDI0LjIxIC0gKDgtMTgpOiBTZXQgdXAgcGFyYW1ldGVyIFJBTSAqLwogICAgIHByYW1fcHRyLT5zZW5fY3JjZWMgID0gMHgwOyAgICAgICAgICAgLyogRXJyb3IgQ291bnRlciBDUkMgKHVudXNlZCkgKi8KQEAgLTI2Niw5ICsyNjYsOSBAQAogICAgIC8qIDI0LjIxIC0gKDE5KTogSW5pdGlhbGl6ZSBSeEJEICovCiAgICAgZm9yIChpID0gMDsgaSA8IFBLVEJVRlNSWDsgaSsrKQogICAgIHsKLSAgICAgICAgcnR4LT5yeGJkW2ldLmNiZF9zYyA9IEJEX0VORVRfUlhfRU1QVFk7Ci0gICAgICAgIHJ0eC0+cnhiZFtpXS5jYmRfZGF0bGVuID0gMDsgICAgICAgICAgICAgICAgICAvKiBSZXNldCAqLwotICAgICAgICBydHgtPnJ4YmRbaV0uY2JkX2J1ZmFkZHIgPSAodWludClOZXRSeFBhY2tldHNbaV07CisJcnR4LT5yeGJkW2ldLmNiZF9zYyA9IEJEX0VORVRfUlhfRU1QVFk7CisJcnR4LT5yeGJkW2ldLmNiZF9kYXRsZW4gPSAwOyAgICAgICAgICAgICAgICAgIC8qIFJlc2V0ICovCisJcnR4LT5yeGJkW2ldLmNiZF9idWZhZGRyID0gKHVpbnQpTmV0UnhQYWNrZXRzW2ldOwogICAgIH0KIAogICAgIHJ0eC0+cnhiZFtQS1RCVUZTUlggLSAxXS5jYmRfc2MgfD0gQkRfRU5FVF9SWF9XUkFQOwpAQCAtMjc2LDExICsyNzYsMTEgQEAKICAgICAvKiAyNC4yMSAtICgyMCk6IEluaXRpYWxpemUgVHhCRCAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBUWF9CVUZfQ05UOyBpKyspCiAgICAgewotICAgICAgICBydHgtPnR4YmRbaV0uY2JkX3NjID0gKEJEX0VORVRfVFhfUEFEICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRfRU5FVF9UWF9MQVNUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRF9FTkVUX1RYX1RDKTsKLSAgICAgICAgcnR4LT50eGJkW2ldLmNiZF9kYXRsZW4gPSAwOyAgICAgICAgICAgICAgICAgIC8qIFJlc2V0ICovCi0gICAgICAgIHJ0eC0+dHhiZFtpXS5jYmRfYnVmYWRkciA9ICh1aW50KSZ0eGJ1ZltpXVswXTsKKwlydHgtPnR4YmRbaV0uY2JkX3NjID0gKEJEX0VORVRfVFhfUEFEICB8CisJCQkgICAgICAgQkRfRU5FVF9UWF9MQVNUIHwKKwkJCSAgICAgICBCRF9FTkVUX1RYX1RDKTsKKwlydHgtPnR4YmRbaV0uY2JkX2RhdGxlbiA9IDA7ICAgICAgICAgICAgICAgICAgLyogUmVzZXQgKi8KKwlydHgtPnR4YmRbaV0uY2JkX2J1ZmFkZHIgPSAodWludCkmdHhidWZbaV1bMF07CiAgICAgfQogCiAgICAgcnR4LT50eGJkW1RYX0JVRl9DTlQgLSAxXS5jYmRfc2MgfD0gQkRfRU5FVF9UWF9XUkFQOwpAQCAtMjkwLDggKzI5MCw4IEBACiAKICAgICAvKiAyNC4yMSAtICgyMik6IFdyaXRlIHRvIFNDQ00gdG8gZW5hYmxlIFRYRSwgUlhGLCBUWEIgZXZlbnRzICovCiAgICAgaW1tci0+aW1fc2NjW0NPTkZJR19FVEhFUl9JTkRFWC0xXS5zY2Nfc2NjbSA9IChTQ0NFX0VORVRfVFhFIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQ0VfRU5FVF9SWEYgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NDRV9FTkVUX1RYQik7CisJCQkJCQkgICBTQ0NFX0VORVRfUlhGIHwKKwkJCQkJCSAgIFNDQ0VfRU5FVF9UWEIpOwogCiAgICAgLyogMjQuMjEgLSAoMjMpOiB3ZSBkb24ndCB1c2UgZXRoZXJuZXQgaW50ZXJydXB0cyAqLwogCkBAIC0zMDAsOSArMzAwLDkgQEAKIAogICAgIC8qIDI0LjIxIC0gKDI1KTogQ2xlYXIgR1NNUl9MIHRvIGVuYWJsZSBub3JtYWwgb3BlcmF0aW9ucyAqLwogICAgIGltbXItPmltX3NjY1tDT05GSUdfRVRIRVJfSU5ERVgtMV0uc2NjX2dzbXJsID0gKFNDQ19HU01STF9UQ0kgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0NfR1NNUkxfVFBMXzQ4ICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NDX0dTTVJMX1RQUF8xMCAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQ19HU01STF9NT0RFX0VORVQpOworCQkJCQkJICAgIFNDQ19HU01STF9UUExfNDggICAgIHwKKwkJCQkJCSAgICBTQ0NfR1NNUkxfVFBQXzEwICAgICB8CisJCQkJCQkgICAgU0NDX0dTTVJMX01PREVfRU5FVCk7CiAKICAgICAvKiAyNC4yMSAtICgyNik6IEluaXRpYWxpemUgRFNSICovCiAgICAgaW1tci0+aW1fc2NjW0NPTkZJR19FVEhFUl9JTkRFWC0xXS5zY2NfZHNyID0gMHhkNTU1OwpAQCAtMzMxLDE4ICszMzEsMTcgQEAKIAogICAgIC8qIDI0LjIxIC0gKDI4KTogV3JpdGUgdG8gR1NNUl9MIHRvIGVuYWJsZSBTQ0MgKi8KICAgICBpbW1yLT5pbV9zY2NbQ09ORklHX0VUSEVSX0lOREVYLTFdLnNjY19nc21ybCB8PSAoU0NDX0dTTVJMX0VOUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQ19HU01STF9FTlQpOworCQkJCQkJICAgICBTQ0NfR1NNUkxfRU5UKTsKIAogICAgIHJldHVybiAwOwogfQogCiAKLQogdm9pZCBldGhfaGFsdCh2b2lkKQogewogICAgIHZvbGF0aWxlIGltbWFwX3QgKmltbXIgPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogICAgIGltbXItPmltX3NjY1tDT05GSUdfRVRIRVJfSU5ERVgtMV0uc2NjX2dzbXJsICY9IH4oU0NDX0dTTVJMX0VOUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0NfR1NNUkxfRU5UKTsKKwkJCQkJCSAgICAgIFNDQ19HU01STF9FTlQpOwogfQogCiAjaWYgMApAQCAtMzUwLDkgKzM0OSw4IEBACiB7CiAgICAgdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAgICAgaW1tci0+aW1fY3BtLmNwX3NjY1tDT05GSUdfRVRIRVJfSU5ERVgtMV0uc2NjX2dzbXJsIHw9IChTQ0NfR1NNUkxfRU5SIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQ19HU01STF9FTlQpOworCQkJCQkJCSAgICBTQ0NfR1NNUkxfRU5UKTsKIH0KICNlbmRpZgogCiAjZW5kaWYgIC8qIENPTkZJR19FVEhFUl9PTl9TQ0MgJiYgQ0ZHX0NNRF9ORVQgKi8KLQpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNjAvaTJjLmMgYi9jcHUvbXBjODI2MC9pMmMuYwppbmRleCA2OWFlNTM1Li43ODljNTE0IDEwMDY0NAotLS0gYS9jcHUvbXBjODI2MC9pMmMuYworKysgYi9jcHUvbXBjODI2MC9pMmMuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAJdm9sYXRpbGUgSTJDX0JEICpyeGJkLCAqdHhiZDsKIAl1aW50IGRwYWRkcjsKIAotI2lmZGVmIENGR19JMkNfSU5JVF9CT0FSRCAgICAgICAgCisjaWZkZWYgQ0ZHX0kyQ19JTklUX0JPQVJECiAJLyogY2FsbCBib2FyZCBzcGVjaWZpYyBpMmMgYnVzIHJlc2V0IHJvdXRpbmUgYmVmb3JlIGFjY2Vzc2luZyB0aGUgICAqLwogCS8qIGVudmlyb25tZW50LCB3aGljaCBtaWdodCBiZSBpbiBhIGNoaXAgb24gdGhhdCBidXMuIEZvciBkZXRhaWxzICAgKi8KIAkvKiBhYm91dCB0aGlzIHByb2JsZW0gc2VlIGRvYy9JMkNfRWRnZV9Db25kaXRpb25zLiAgICAgICAgICAgICAgICAgICovCkBAIC00OTQsNyArNDk0LDcgQEAKIAl2b2xhdGlsZSBpaWNfdCAqaWlwOwogCXZvbGF0aWxlIGkyYzgyNjBfdCAqaTJjCT0gKGkyYzgyNjBfdCAqKSZpbW1hcC0+aW1faTJjOwogCXZvbGF0aWxlIEkyQ19CRCAqdHhiZCwgKnJ4YmQ7Ci0gICAgICAgIGludCAgbiwgaSwgYiwgcnhjbnQgPSAwLCByeHRpbWVvID0gMCwgdHhjbnQgPSAwLCB0eHRpbWVvID0gMCwgcmMgPSAwOworCWludCAgbiwgaSwgYiwgcnhjbnQgPSAwLCByeHRpbWVvID0gMCwgdHhjbnQgPSAwLCB0eHRpbWVvID0gMCwgcmMgPSAwOwogCXVpbnQgZHBhZGRyOwogCiAJUFJJTlREKCgiW0kyQ10gaTJjX2RvaW9cbiIpKTsKQEAgLTU0Myw3ICs1NDMsNyBAQAogCiAJCXJ4YmQgPSAoKEkyQ19CRCopc3RhdGUtPnJ4YmQpIC0gbjsKIAkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAJCXJ4dGltZW8gKz0gVE9VVF9MT09QICogcnhiZC0+bGVuZ3RoOworCQkJcnh0aW1lbyArPSBUT1VUX0xPT1AgKiByeGJkLT5sZW5ndGg7CiAJCQlyeGJkKys7CiAJCX0KIApAQCAtNjcwLDcgKzY3MCw3IEBACiAJICAqIGFuZCB0aGUgZXh0cmEgYml0cyBlbmQgdXAgaW4gdGhlICJjaGlwIGFkZHJlc3MiIGJpdCBzbG90cy4KIAkgICogVGhpcyBtYWtlcyBhIDI0V0MwOCAoMUtieXRlKSBjaGlwIGxvb2sgbGlrZSBmb3VyIDI1NiBieXRlCiAJICAqIGNoaXBzLgotICAJICAqCisJICAqCiAJICAqIE5vdGUgdGhhdCB3ZSBjb25zaWRlciB0aGUgbGVuZ3RoIG9mIHRoZSBhZGRyZXNzIGZpZWxkIHRvIHN0aWxsCiAJICAqIGJlIG9uZSBieXRlIGJlY2F1c2UgdGhlIGV4dHJhIGFkZHJlc3MgYml0cyBhcmUgaGlkZGVuIGluIHRoZQogCSAgKiBjaGlwIGFkZHJlc3MuCkBAIC03MTksNyArNzE5LDcgQEAKIAkgICogYW5kIHRoZSBleHRyYSBiaXRzIGVuZCB1cCBpbiB0aGUgImNoaXAgYWRkcmVzcyIgYml0IHNsb3RzLgogCSAgKiBUaGlzIG1ha2VzIGEgMjRXQzA4ICgxS2J5dGUpIGNoaXAgbG9vayBsaWtlIGZvdXIgMjU2IGJ5dGUKIAkgICogY2hpcHMuCi0gIAkgICoKKwkgICoKIAkgICogTm90ZSB0aGF0IHdlIGNvbnNpZGVyIHRoZSBsZW5ndGggb2YgdGhlIGFkZHJlc3MgZmllbGQgdG8gc3RpbGwKIAkgICogYmUgb25lIGJ5dGUgYmVjYXVzZSB0aGUgZXh0cmEgYWRkcmVzcyBiaXRzIGFyZSBoaWRkZW4gaW4gdGhlCiAJICAqIGNoaXAgYWRkcmVzcy4KZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL3BjaS5jIGIvY3B1L21wYzgyNjAvcGNpLmMKaW5kZXggYWM3N2MxNi4uYjNhODlmNSAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNjAvcGNpLmMKKysrIGIvY3B1L21wYzgyNjAvcGNpLmMKQEAgLTM1LDcgKzM1LDcgQEAKICAqCiAgKiAgIDB4ODAwMDAwMDAgLSAweEJGRkZGRkZGICAgIENQVTJQQ0kgc3BhY2UgICAgICAgICAgICAgIFBDSUJSMAogICogICAweEY0MDAwMDAwIC0gMHhGN0ZGRkZGRiAgICBDUFUyUENJIHNwYWNlICAgICAgICAgICAgICBQQ0lCUjEKLSAqICAgICAgICAgICAgICAgICAgICAgICAKKyAqCiAgKiAgIDB4ODAwMDAwMDAgLSAweDlGRkZGRkZGICAgIDB4ODAwMDAwMDAgLSAweDlGRkZGRkZGICAgKE91dGJvdW5kIEFUVSAjMSkKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJIE1lbSB3aXRoIHByZWZldGNoCiAgKgpAQCAtNDQsNyArNDQsNyBAQAogICoKICAqICAgMHhGNDAwMDAwMCAtIDB4RjdGRkZGRkYgICAgMHgwMDAwMDAwMCAtIDB4MDNGRkZGRkYgICAoT3V0Ym91bmQgQVRVICMzKQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMi1iaXQgUENJIElPCi0gKiAgICAgICAgICAgICAgICAgICAgICAKKyAqCiAgKiAgIFBDSS0+TG9jYWwgbWFwIChmcm9tIFBDSSkKICAqICAgTVBDODI2eCBzbGF2ZSB3aW5kb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlZCBieQogICoKQEAgLTUyLDE1ICs1MiwxNSBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUEM4MjZ4IGxvY2FsIG1lbW9yeQogICovCiAKLS8qIAotICogU2xhdmUgd2luZG93IHRoYXQgYWxsb3dzIFBDSSBtYXN0ZXJzIHRvIGFjY2VzcyBNUEM4MjZ4IGxvY2FsIG1lbW9yeS4gCisvKgorICogU2xhdmUgd2luZG93IHRoYXQgYWxsb3dzIFBDSSBtYXN0ZXJzIHRvIGFjY2VzcyBNUEM4MjZ4IGxvY2FsIG1lbW9yeS4KICAqIFRoaXMgd2luZG93IGlzIHNldCB1cCB1c2luZyB0aGUgZmlyc3Qgc2V0IG9mIEluYm91bmQgQVRVIHJlZ2lzdGVycwogICovCiAKLSNpZm5kZWYgQ0ZHX1BDSV9TTFZfTUVNX0xPQ0FMIAotI2RlZmluZSBQQ0lfU0xWX01FTV9MT0NBTCBDRkdfU0RSQU1fQkFTRQkJLyogTG9jYWwgYmFzZSAqLyAKLSNlbHNlIAotI2RlZmluZSBQQ0lfU0xWX01FTV9MT0NBTCBDRkdfUENJX1NMVl9NRU1fTE9DQUwgCisjaWZuZGVmIENGR19QQ0lfU0xWX01FTV9MT0NBTAorI2RlZmluZSBQQ0lfU0xWX01FTV9MT0NBTCBDRkdfU0RSQU1fQkFTRQkJLyogTG9jYWwgYmFzZSAqLworI2Vsc2UKKyNkZWZpbmUgUENJX1NMVl9NRU1fTE9DQUwgQ0ZHX1BDSV9TTFZfTUVNX0xPQ0FMCiAjZW5kaWYKIAogI2lmbmRlZiBDRkdfUENJX1NMVl9NRU1fQlVTCkBAIC03MSwyMiArNzEsMjIgQEAKIAogI2lmbmRlZiBDRkdfUElDTVIwX01BU0tfQVRUUklCCiAjZGVmaW5lIFBJQ01SMF9NQVNLX0FUVFJJQgkoUElDTVJfTUFTS181MTJNQiB8IFBJQ01SX0VOQUJMRSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgCSBQSUNNUl9QUkVGRVRDSF9FTikKKwkJCQkgUElDTVJfUFJFRkVUQ0hfRU4pCiAjZWxzZQogI2RlZmluZSBQSUNNUjBfTUFTS19BVFRSSUIgQ0ZHX1BJQ01SMF9NQVNLX0FUVFJJQgogI2VuZGlmCiAKLS8qIAorLyoKICAqIFRoZXNlIGFyZSB0aGUgd2luZG93cyB0aGF0IGFsbG93IHRoZSBDUFUgdG8gYWNjZXNzIFBDSSBhZGRyZXNzIHNwYWNlLgotICogQWxsIHRocmVlIFBDSSBtYXN0ZXIgd2luZG93cywgd2hpY2ggYWxsb3cgdGhlIENQVSB0byBhY2Nlc3MgUENJIAotICogcHJlZmV0Y2gsIG5vbiBwcmVmZXRjaCwgYW5kIElPIHNwYWNlIChzZWUgYmVsb3cpLCBtdXN0IGFsbCBmaXQgd2l0aGluIAorICogQWxsIHRocmVlIFBDSSBtYXN0ZXIgd2luZG93cywgd2hpY2ggYWxsb3cgdGhlIENQVSB0byBhY2Nlc3MgUENJCisgKiBwcmVmZXRjaCwgbm9uIHByZWZldGNoLCBhbmQgSU8gc3BhY2UgKHNlZSBiZWxvdyksIG11c3QgYWxsIGZpdCB3aXRoaW4KICAqIHRoZXNlIHdpbmRvd3MuCiAgKi8KIAogLyogUENJQlIwICovCiAjaWZuZGVmIENGR19QQ0lfTVNUUjBfTE9DQUwKLSNkZWZpbmUgUENJX01TVFIwX0xPQ0FMCQkweDgwMDAwMDAwCQkvKiBMb2NhbCBiYXNlICovIAotI2Vsc2UgCisjZGVmaW5lIFBDSV9NU1RSMF9MT0NBTAkJMHg4MDAwMDAwMAkJLyogTG9jYWwgYmFzZSAqLworI2Vsc2UKICNkZWZpbmUgUENJX01TVFIwX0xPQ0FMIENGR19QQ0lfTVNUUjBfTE9DQUwKICNlbmRpZgogCkBAIC05OCw5ICs5OCw5IEBACiAKIC8qIFBDSUJSMSAqLwogI2lmbmRlZiBDRkdfUENJX01TVFIxX0xPQ0FMCi0jZGVmaW5lIFBDSV9NU1RSMV9MT0NBTAkJMHhGNDAwMDAwMAkJLyogTG9jYWwgYmFzZSAqLyAKLSNlbHNlIAotI2RlZmluZSBQQ0lfTVNUUjFfTE9DQUwJCUNGR19QQ0lfTVNUUjFfTE9DQUwgCisjZGVmaW5lIFBDSV9NU1RSMV9MT0NBTAkJMHhGNDAwMDAwMAkJLyogTG9jYWwgYmFzZSAqLworI2Vsc2UKKyNkZWZpbmUgUENJX01TVFIxX0xPQ0FMCQlDRkdfUENJX01TVFIxX0xPQ0FMCiAjZW5kaWYKIAogI2lmbmRlZiBDRkdfUENJTVNLMV9NQVNLCkBAIC0xMDksNyArMTA5LDcgQEAKICNkZWZpbmUgIFBDSU1TSzFfTUFTSwkJQ0ZHX1BDSU1TSzFfTUFTSwogI2VuZGlmCiAKLS8qIAorLyoKICAqIE1hc3RlciB3aW5kb3cgdGhhdCBhbGxvd3MgdGhlIENQVSB0byBhY2Nlc3MgUENJIE1lbW9yeSAocHJlZmV0Y2gpLgogICogVGhpcyB3aW5kb3cgd2lsbCBiZSBzZXR1cCB3aXRoIHRoZSBmaXJzdCBzZXQgb2YgT3V0Ym91bmQgQVRVIHJlZ2lzdGVycwogICogaW4gdGhlIGJyaWRnZS4KQEAgLTE0NSwzNCArMTQ1LDM0IEBACiAjZGVmaW5lIFBPQ01SMF9NQVNLX0FUVFJJQiBDRkdfUE9DTVIwX01BU0tfQVRUUklCCiAjZW5kaWYKIAotLyogCisvKgogICogTWFzdGVyIHdpbmRvdyB0aGF0IGFsbG93cyB0aGUgQ1BVIHRvIGFjY2VzcyBQQ0kgTWVtb3J5IChub24tcHJlZmV0Y2gpLgogICogVGhpcyB3aW5kb3cgd2lsbCBiZSBzZXR1cCB3aXRoIHRoZSBzZWNvbmQgc2V0IG9mIE91dGJvdW5kIEFUVSByZWdpc3RlcnMKICAqIGluIHRoZSBicmlkZ2UuCiAgKi8KIAotI2lmbmRlZiBDRkdfUENJX01TVFJfTUVNSU9fTE9DQUwgCi0jZGVmaW5lIFBDSV9NU1RSX01FTUlPX0xPQ0FMIDB4OTAwMDAwMDAgICAgICAgICAgLyogTG9jYWwgYmFzZSAqLyAKLSNlbHNlIAotI2RlZmluZSBQQ0lfTVNUUl9NRU1JT19MT0NBTCBDRkdfUENJX01TVFJfTUVNSU9fTE9DQUwgCisjaWZuZGVmIENGR19QQ0lfTVNUUl9NRU1JT19MT0NBTAorI2RlZmluZSBQQ0lfTVNUUl9NRU1JT19MT0NBTCAweDkwMDAwMDAwICAgICAgICAgIC8qIExvY2FsIGJhc2UgKi8KKyNlbHNlCisjZGVmaW5lIFBDSV9NU1RSX01FTUlPX0xPQ0FMIENGR19QQ0lfTVNUUl9NRU1JT19MT0NBTAogI2VuZGlmCiAKLSNpZm5kZWYgQ0ZHX1BDSV9NU1RSX01FTUlPX0JVUyAKLSNkZWZpbmUgUENJX01TVFJfTUVNSU9fQlVTIDB4OTAwMDAwMDAgICAgICAgICAgLyogUENJIGJhc2UgICAqLyAKLSNlbHNlIAotI2RlZmluZSBQQ0lfTVNUUl9NRU1JT19CVVMgQ0ZHX1BDSV9NU1RSX01FTUlPX0JVUyAKKyNpZm5kZWYgQ0ZHX1BDSV9NU1RSX01FTUlPX0JVUworI2RlZmluZSBQQ0lfTVNUUl9NRU1JT19CVVMgMHg5MDAwMDAwMCAgICAgICAgICAvKiBQQ0kgYmFzZSAgICovCisjZWxzZQorI2RlZmluZSBQQ0lfTVNUUl9NRU1JT19CVVMgQ0ZHX1BDSV9NU1RSX01FTUlPX0JVUwogI2VuZGlmCiAKLSNpZm5kZWYgQ0ZHX0NQVV9QQ0lfTUVNSU9fU1RBUlQgCi0jZGVmaW5lIENQVV9QQ0lfTUVNSU9fU1RBUlQgUENJX01TVFJfTUVNSU9fTE9DQUwgCi0jZWxzZSAKLSNkZWZpbmUgQ1BVX1BDSV9NRU1JT19TVEFSVCBDRkdfQ1BVX1BDSV9NRU1JT19TVEFSVCAKKyNpZm5kZWYgQ0ZHX0NQVV9QQ0lfTUVNSU9fU1RBUlQKKyNkZWZpbmUgQ1BVX1BDSV9NRU1JT19TVEFSVCBQQ0lfTVNUUl9NRU1JT19MT0NBTAorI2Vsc2UKKyNkZWZpbmUgQ1BVX1BDSV9NRU1JT19TVEFSVCBDRkdfQ1BVX1BDSV9NRU1JT19TVEFSVAogI2VuZGlmCiAKLSNpZm5kZWYgQ0ZHX1BDSV9NU1RSX01FTUlPX1NJWkUgCi0jZGVmaW5lIFBDSV9NU1RSX01FTUlPX1NJWkUgMHgxMDAwMDAwMCAgICAgICAgICAvKiAyNTYgTUIgKi8gCi0jZWxzZSAKLSNkZWZpbmUgUENJX01TVFJfTUVNSU9fU0laRSBDRkdfUENJX01TVFJfTUVNSU9fU0laRSAKKyNpZm5kZWYgQ0ZHX1BDSV9NU1RSX01FTUlPX1NJWkUKKyNkZWZpbmUgUENJX01TVFJfTUVNSU9fU0laRSAweDEwMDAwMDAwICAgICAgICAgIC8qIDI1NiBNQiAqLworI2Vsc2UKKyNkZWZpbmUgUENJX01TVFJfTUVNSU9fU0laRSBDRkdfUENJX01TVFJfTUVNSU9fU0laRQogI2VuZGlmCiAKICNpZm5kZWYgQ0ZHX1BPQ01SMV9NQVNLX0FUVFJJQgpAQCAtMTgxLDM0ICsxODEsMzQgQEAKICNkZWZpbmUgUE9DTVIxX01BU0tfQVRUUklCIENGR19QT0NNUjFfTUFTS19BVFRSSUIKICNlbmRpZgogCi0vKiAKKy8qCiAgKiBNYXN0ZXIgd2luZG93IHRoYXQgYWxsb3dzIHRoZSBDUFUgdG8gYWNjZXNzIFBDSSBJTyBzcGFjZS4KICAqIFRoaXMgd2luZG93IHdpbGwgYmUgc2V0dXAgd2l0aCB0aGUgdGhpcmQgc2V0IG9mIE91dGJvdW5kIEFUVSByZWdpc3RlcnMKICAqIGluIHRoZSBicmlkZ2UuCiAgKi8KIAotI2lmbmRlZiBDRkdfUENJX01TVFJfSU9fTE9DQUwgCi0jZGVmaW5lIFBDSV9NU1RSX0lPX0xPQ0FMIDB4QTAwMDAwMDAgICAgICAgICAgLyogTG9jYWwgYmFzZSAqLyAKLSNlbHNlIAotI2RlZmluZSBQQ0lfTVNUUl9JT19MT0NBTCBDRkdfUENJX01TVFJfSU9fTE9DQUwgCisjaWZuZGVmIENGR19QQ0lfTVNUUl9JT19MT0NBTAorI2RlZmluZSBQQ0lfTVNUUl9JT19MT0NBTCAweEEwMDAwMDAwICAgICAgICAgIC8qIExvY2FsIGJhc2UgKi8KKyNlbHNlCisjZGVmaW5lIFBDSV9NU1RSX0lPX0xPQ0FMIENGR19QQ0lfTVNUUl9JT19MT0NBTAogI2VuZGlmCiAKLSNpZm5kZWYgQ0ZHX1BDSV9NU1RSX0lPX0JVUyAKLSNkZWZpbmUgUENJX01TVFJfSU9fQlVTIDB4QTAwMDAwMDAgICAgICAgICAgLyogUENJIGJhc2UgICAqLyAKLSNlbHNlIAotI2RlZmluZSBQQ0lfTVNUUl9JT19CVVMgQ0ZHX1BDSV9NU1RSX0lPX0JVUyAKKyNpZm5kZWYgQ0ZHX1BDSV9NU1RSX0lPX0JVUworI2RlZmluZSBQQ0lfTVNUUl9JT19CVVMgMHhBMDAwMDAwMCAgICAgICAgICAvKiBQQ0kgYmFzZSAgICovCisjZWxzZQorI2RlZmluZSBQQ0lfTVNUUl9JT19CVVMgQ0ZHX1BDSV9NU1RSX0lPX0JVUwogI2VuZGlmCiAKLSNpZm5kZWYgQ0ZHX0NQVV9QQ0lfSU9fU1RBUlQgCi0jZGVmaW5lIENQVV9QQ0lfSU9fU1RBUlQgUENJX01TVFJfSU9fTE9DQUwgCi0jZWxzZSAKLSNkZWZpbmUgQ1BVX1BDSV9JT19TVEFSVCBDRkdfQ1BVX1BDSV9JT19TVEFSVCAKKyNpZm5kZWYgQ0ZHX0NQVV9QQ0lfSU9fU1RBUlQKKyNkZWZpbmUgQ1BVX1BDSV9JT19TVEFSVCBQQ0lfTVNUUl9JT19MT0NBTAorI2Vsc2UKKyNkZWZpbmUgQ1BVX1BDSV9JT19TVEFSVCBDRkdfQ1BVX1BDSV9JT19TVEFSVAogI2VuZGlmCiAKLSNpZm5kZWYgQ0ZHX1BDSV9NU1RSX0lPX1NJWkUgCi0jZGVmaW5lIFBDSV9NU1RSX0lPX1NJWkUgMHgxMDAwMDAwMCAgICAgICAgICAvKiAyNTZNQiAqLyAKLSNlbHNlIAotI2RlZmluZSBQQ0lfTVNUUl9JT19TSVpFIENGR19QQ0lfTVNUUl9JT19TSVpFIAorI2lmbmRlZiBDRkdfUENJX01TVFJfSU9fU0laRQorI2RlZmluZSBQQ0lfTVNUUl9JT19TSVpFIDB4MTAwMDAwMDAgICAgICAgICAgLyogMjU2TUIgKi8KKyNlbHNlCisjZGVmaW5lIFBDSV9NU1RSX0lPX1NJWkUgQ0ZHX1BDSV9NU1RSX0lPX1NJWkUKICNlbmRpZgogCiAjaWZuZGVmIENGR19QT0NNUjJfTUFTS19BVFRSSUIKQEAgLTIzOSw3ICsyMzksNyBAQAogICAgIHBjaV9kZXZfdCBob3N0X2Rldm5vID0gUENJX0JERigwLCAwLCAwKTsKIAogICAgIHBjaV9zZXR1cF9pbmRpcmVjdChob3NlLCBDRkdfSU1NUiArIFBDSV9DRkdfQUREUl9SRUcsCi0JICAgICAgICAgICAgICAgICAgICAgICAgIENGR19JTU1SICsgUENJX0NGR19EQVRBX1JFRyk7CisJCQkJIENGR19JTU1SICsgUENJX0NGR19EQVRBX1JFRyk7CiAKICAgICAvKgogICAgICAqIFNldHRpbmcgcmVxdWlyZWQgdG8gZW5hYmxlIGxvY2FsIGJ1cyBmb3IgUENJIChTSVVNQ1IgW0xCUENdKS4KQEAgLTI0OCwyMyArMjQ4LDIzIEBACiAgICAgaW1tYXAtPmltX3NpdV9jb25mLnNjX3NpdW1jciA9IChpbW1hcC0+aW1fc2l1X2NvbmYuc2Nfc2l1bWNyICYgflNJVU1DUl9MQlBDMTEpCiAJCQkJICAgfCBTSVVNQ1JfTEJQQzAxOwogI2Vsc2UKLSAgICAvKiAKLSAgICAgKiBTZXR0aW5nIHJlcXVpcmVkIHRvIGVuYWJsZSBJUlExLUlSUTcgKFNJVU1DUiBbRFBQQ10pLCAKKyAgICAvKgorICAgICAqIFNldHRpbmcgcmVxdWlyZWQgdG8gZW5hYmxlIElSUTEtSVJRNyAoU0lVTUNSIFtEUFBDXSksCiAgICAgICogYW5kIGxvY2FsIGJ1cyBmb3IgUENJIChTSVVNQ1IgW0xCUENdKS4KICAgICAgKi8KLSAgICBpbW1hcC0+aW1fc2l1X2NvbmYuc2Nfc2l1bWNyID0gKGltbWFwLT5pbV9zaXVfY29uZi5zY19zaXVtY3IgJiAKLQkJCQkJCSAgflNJVU1DUl9MQlBDMTEgJiAKLQkJCQkJCX5TSVVNQ1JfQ1MxMFBDMTEgJiAKKyAgICBpbW1hcC0+aW1fc2l1X2NvbmYuc2Nfc2l1bWNyID0gKGltbWFwLT5pbV9zaXVfY29uZi5zY19zaXVtY3IgJgorCQkJCQkJICB+U0lVTUNSX0xCUEMxMSAmCisJCQkJCQl+U0lVTUNSX0NTMTBQQzExICYKIAkJCQkJCSB+U0lVTUNSX0xCUEMxMSkgfAotCQkJCSAgIFNJVU1DUl9MQlBDMDEgfCAKLQkJCQkgICBTSVVNQ1JfQ1MxMFBDMDEgfCAKKwkJCQkgICBTSVVNQ1JfTEJQQzAxIHwKKwkJCQkgICBTSVVNQ1JfQ1MxMFBDMDEgfAogCQkJCSAgIFNJVU1DUl9MQlBDMDE7CiAjZW5kaWYKIAogICAgIC8qIE1ha2UgUENJIGxvd2VzdCBwcmlvcml0eSAqLwotICAgIC8qIEVhY2ggNCBiaXRzIGlzIGEgZGV2aWNlIGJ1cyByZXF1ZXN0ICBhbmQgdGhlIE1TIDRiaXRzIAorICAgIC8qIEVhY2ggNCBiaXRzIGlzIGEgZGV2aWNlIGJ1cyByZXF1ZXN0ICBhbmQgdGhlIE1TIDRiaXRzCiAgICAgICAgaXMgaGlnaGVzdCBwcmlvcml0eSAqLwotICAgIC8qIEJ1cyAgICAgICAgICAgICAgIDRiaXQgdmFsdWUgCisgICAgLyogQnVzICAgICAgICAgICAgICAgNGJpdCB2YWx1ZQogCSAgIC0tLSAgICAgICAgICAgICAgIC0tLS0tLS0tLS0KICAgICAgICBDUE0gaGlnaCAgICAgICAgICAwYjAwMDAKICAgICAgICBDUE0gbWlkZGxlICAgICAgICAwYjAwMDEKQEAgLTI4Miw4ICsyODIsOCBAQAogICAgIC8qIFBhcmsgYnVzIG9uIGNvcmUgd2hpbGUgbW9kaWZ5aW5nIFBDSSBCdXMgYWNjZXNzZXMgKi8KICAgICBpbW1hcC0+aW1fc2l1X2NvbmYuc2NfcHBjX2FjciA9IDB4NjsKIAotICAgIC8qIAotICAgICAqIFNldCB1cCBtYXN0ZXIgd2luZG93cyB0aGF0IGFsbG93IHRoZSBDUFUgdG8gYWNjZXNzIFBDSSBzcGFjZS4gVGhlc2UgCisgICAgLyoKKyAgICAgKiBTZXQgdXAgbWFzdGVyIHdpbmRvd3MgdGhhdCBhbGxvdyB0aGUgQ1BVIHRvIGFjY2VzcyBQQ0kgc3BhY2UuIFRoZXNlCiAgICAgICogd2luZG93cyBhcmUgc2V0IHVwIHVzaW5nIHRoZSB0d28gU0lVIFBDSUJSIHJlZ2lzdGVycy4KICAgICAgKi8KICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKShpbW1yX2FkZHIgKyBNODI2NV9QQ0lNU0swKSA9IFBDSU1TSzBfTUFTSzsKQEAgLTI5NCw0MCArMjk0LDQwIEBACiAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKikoaW1tcl9hZGRyICsgTTgyNjVfUENJTVNLMSkgPSBQQ0lNU0sxX01BU0s7CiAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKikoaW1tcl9hZGRyICsgTTgyNjVfUENJQlIxKSA9CiAJICAgIFBDSV9NU1RSMV9MT0NBTCB8IFBDSUJSX0VOQUJMRTsKLSNlbmRpZiAKKyNlbmRpZgogCiAgICAgLyogUmVsZWFzZSBQQ0kgUlNUIChieSBkZWZhdWx0IHRoZSBQQ0kgUlNUIHNpZ25hbCBpcyBoZWxkIGxvdykgICovCiAgICAgcGNpX291dGwgKGltbXJfYWRkciB8IFBDSV9HQ1JfUkVHLCBQQ0lHQ1JfUENJX0JVU19FTik7CiAKICAgICAvKiBnaXZlIGl0IHNvbWUgdGltZSAqLwogICAgIHsKLSNpZmRlZiBDT05GSUdfTVBDODI2NkFEUyAKLQkJLyogR2l2ZSB0aGUgUENJIGNhcmRzIG1vcmUgdGltZSB0byBpbml0aWFsaXplIGJlZm9yZSBxdWVyeSAKKyNpZmRlZiBDT05GSUdfTVBDODI2NkFEUworCQkvKiBHaXZlIHRoZSBQQ0kgY2FyZHMgbW9yZSB0aW1lIHRvIGluaXRpYWxpemUgYmVmb3JlIHF1ZXJ5CiAJCQlUaGlzIG1pZ2h0IGJlIGdvb2QgZm9yIG90aGVyIGJvYXJkcyBhbHNvCiAJCSovCi0gICAgICAgIGludCBpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgKytpKQorCWludCBpOworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyArK2kpCiAjZW5kaWYKLSAgICAgICAgICAgIHVkZWxheSgxMDAwKTsKKwkgICAgdWRlbGF5KDEwMDApOwogICAgIH0KIAotICAgIC8qIAotICAgICAqIFNldCB1cCBtYXN0ZXIgd2luZG93IHRoYXQgYWxsb3dzIHRoZSBDUFUgdG8gYWNjZXNzIFBDSSBNZW1vcnkgKHByZWZldGNoKSAKKyAgICAvKgorICAgICAqIFNldCB1cCBtYXN0ZXIgd2luZG93IHRoYXQgYWxsb3dzIHRoZSBDUFUgdG8gYWNjZXNzIFBDSSBNZW1vcnkgKHByZWZldGNoKQogICAgICAqIHNwYWNlLiBUaGlzIHdpbmRvdyBpcyBzZXQgdXAgdXNpbmcgdGhlIGZpcnN0IHNldCBvZiBPdXRib3VuZCBBVFUgcmVnaXN0ZXJzLgogICAgICAqLwogICAgIHBjaV9vdXRsIChpbW1yX2FkZHIgfCBQT1RBUl9SRUcwLCBQQ0lfTVNUUl9NRU1fQlVTID4+IDEyKTsgICAgICAvKiBQQ0kgYmFzZSAqLwogICAgIHBjaV9vdXRsIChpbW1yX2FkZHIgfCBQT0JBUl9SRUcwLCBQQ0lfTVNUUl9NRU1fTE9DQUwgPj4gMTIpOyAgICAvKiBMb2NhbCBiYXNlICovCiAgICAgcGNpX291dGwgKGltbXJfYWRkciB8IFBPQ01SX1JFRzAsIFBPQ01SMF9NQVNLX0FUVFJJQik7ICAgIC8qIFNpemUgJiBhdHRyaWJ1dGUgKi8KIAotICAgIC8qIAotICAgICAqIFNldCB1cCBtYXN0ZXIgd2luZG93IHRoYXQgYWxsb3dzIHRoZSBDUFUgdG8gYWNjZXNzIFBDSSBNZW1vcnkgKG5vbi1wcmVmZXRjaCkgCisgICAgLyoKKyAgICAgKiBTZXQgdXAgbWFzdGVyIHdpbmRvdyB0aGF0IGFsbG93cyB0aGUgQ1BVIHRvIGFjY2VzcyBQQ0kgTWVtb3J5IChub24tcHJlZmV0Y2gpCiAgICAgICogc3BhY2UuIFRoaXMgd2luZG93IGlzIHNldCB1cCB1c2luZyB0aGUgc2Vjb25kIHNldCBvZiBPdXRib3VuZCBBVFUgcmVnaXN0ZXJzLgogICAgICAqLwogICAgIHBjaV9vdXRsIChpbW1yX2FkZHIgfCBQT1RBUl9SRUcxLCBQQ0lfTVNUUl9NRU1JT19CVVMgPj4gMTIpOyAgICAvKiBQQ0kgYmFzZSAqLwogICAgIHBjaV9vdXRsIChpbW1yX2FkZHIgfCBQT0JBUl9SRUcxLCBQQ0lfTVNUUl9NRU1JT19MT0NBTCA+PiAxMik7ICAvKiBMb2NhbCBiYXNlICovCiAgICAgcGNpX291dGwgKGltbXJfYWRkciB8IFBPQ01SX1JFRzEsIFBPQ01SMV9NQVNLX0FUVFJJQik7ICAgIC8qIFNpemUgJiBhdHRyaWJ1dGUgKi8KLSAgICAKLSAgICAvKiAKKworICAgIC8qCiAgICAgICogU2V0IHVwIG1hc3RlciB3aW5kb3cgdGhhdCBhbGxvd3MgdGhlIENQVSB0byBhY2Nlc3MgUENJIElPIHNwYWNlLiBUaGlzIHdpbmRvdwogICAgICAqIGlzIHNldCB1cCB1c2luZyB0aGUgdGhpcmQgc2V0IG9mIE91dGJvdW5kIEFUVSByZWdpc3RlcnMuCiAgICAgICovCkBAIC0zMzUsOCArMzM1LDggQEAKICAgICBwY2lfb3V0bCAoaW1tcl9hZGRyIHwgUE9CQVJfUkVHMiwgUENJX01TVFJfSU9fTE9DQUwgPj4gMTIpOyAgICAgLyogTG9jYWwgYmFzZSAqLwogICAgIHBjaV9vdXRsIChpbW1yX2FkZHIgfCBQT0NNUl9SRUcyLCBQT0NNUjJfTUFTS19BVFRSSUIpOyAgICAvKiBTaXplICYgYXR0cmlidXRlICovCiAKLSAgICAvKiAKLSAgICAgKiBTZXQgdXAgc2xhdmUgd2luZG93IHRoYXQgYWxsb3dzIFBDSSBtYXN0ZXJzIHRvIGFjY2VzcyBNUEM4MjZ4IGxvY2FsIG1lbW9yeS4gCisgICAgLyoKKyAgICAgKiBTZXQgdXAgc2xhdmUgd2luZG93IHRoYXQgYWxsb3dzIFBDSSBtYXN0ZXJzIHRvIGFjY2VzcyBNUEM4MjZ4IGxvY2FsIG1lbW9yeS4KICAgICAgKiBUaGlzIHdpbmRvdyBpcyBzZXQgdXAgdXNpbmcgdGhlIGZpcnN0IHNldCBvZiBJbmJvdW5kIEFUVSByZWdpc3RlcnMKICAgICAgKi8KICAgICBwY2lfb3V0bCAoaW1tcl9hZGRyIHwgUElUQVJfUkVHMCwgUENJX1NMVl9NRU1fTE9DQUwgPj4gMTIpOyAgICAgLyogTG9jYWwgYmFzZSAqLwpAQCAtMzUyLDE4ICszNTIsMTggQEAKICAgICAvKiBIb3N0IG1vZGUgLSBzcGVjaWZ5IHRoZSBicmlkZ2UgYXMgYSBob3N0LVBDSSBicmlkZ2UgKi8KIAogICAgIHBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGhvc3RfZGV2bm8sIFBDSV9DTEFTU19DT0RFLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9DTEFTU19CUklER0VfQ1RMUik7CisJCQkJICAgUENJX0NMQVNTX0JSSURHRV9DVExSKTsKIAogICAgIC8qIEVuYWJsZSB0aGUgaG9zdCBicmlkZ2UgdG8gYmUgYSBtYXN0ZXIgb24gdGhlIFBDSSBidXMsIGFuZCB0byBhY3QgYXMgYSBQQ0kgbWVtb3J5IHRhcmdldCAqLwogICAgIHBjaV9ob3NlX3JlYWRfY29uZmlnX3dvcmQoaG9zZSwgaG9zdF9kZXZubywgUENJX0NPTU1BTkQsICZ0ZW1wU2hvcnQpOwogICAgIHBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGhvc3RfZGV2bm8sIFBDSV9DT01NQU5ELAotCQkgICAgICAgICB0ZW1wU2hvcnQgfCBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOworCQkJIHRlbXBTaG9ydCB8IFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7CiAKICNpZmRlZiBDT05GSUdfTVBDODI2NkFEUwogCS8qIGRvIHNvbWUgYnJpZGdlIGluaXQsIHNob3VsZCBiZSBkb25lIG9uIGFsbCA4MjYwIGJhc2VkIGJyaWRnZXMgKi8KIAlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBob3N0X2Rldm5vLCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAweDA4KTsKIAlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBob3N0X2Rldm5vLCBQQ0lfTEFURU5DWV9USU1FUiwgMHhGOCk7Ci0jZW5kaWYgCisjZW5kaWYKIAogICAgIGhvc2UtPmZpcnN0X2J1c25vID0gMDsKICAgICBob3NlLT5sYXN0X2J1c25vID0gMHhmZjsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL3NlcmlhbF9zY2MuYyBiL2NwdS9tcGM4MjYwL3NlcmlhbF9zY2MuYwppbmRleCBjYTc2MzAyLi4zMjAxNmYyIDEwMDY0NAotLS0gYS9jcHUvbXBjODI2MC9zZXJpYWxfc2NjLmMKKysrIGIvY3B1L21wYzgyNjAvc2VyaWFsX3NjYy5jCkBAIC04Miw3ICs4Miw3IEBACiAKIGludCBzZXJpYWxfaW5pdCAodm9pZCkKIHsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBzY2NfdCAqc3A7CiAJdm9sYXRpbGUgc2NjX3VhcnRfdCAqdXA7CiAJdm9sYXRpbGUgY2JkX3QgKnRiZGYsICpyYmRmOwpAQCAtMTk2LDEyICsxOTYsMTIgQEAKIHsKIAl2b2xhdGlsZSBzY2NfdWFydF90CSp1cDsKIAl2b2xhdGlsZSBjYmRfdAkJKnRiZGY7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltOworCXZvbGF0aWxlIGltbWFwX3QJKmltOwogCiAJaWYgKGMgPT0gJ1xuJykKIAkJc2VyaWFsX3B1dGMgKCdccicpOwogCi0gICAgICAgIGltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlpbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdXAgPSAoc2NjX3VhcnRfdCAqKSZpbS0+aW1fZHByYW1iYXNlW1BST0ZGX1NDQ107CiAJdGJkZiA9IChjYmRfdCAqKSZpbS0+aW1fZHByYW1iYXNlW3VwLT5zY2NfZ2Vuc2NjLnNjY190YmFzZV07CiAKQEAgLTIzMCwxMCArMjMwLDEwIEBACiB7CiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHNjY191YXJ0X3QJKnVwOwotICAgICAgICB2b2xhdGlsZSBpbW1hcF90CSppbTsKKwl2b2xhdGlsZSBpbW1hcF90CSppbTsKIAl1bnNpZ25lZCBjaGFyCQljOwogCi0gICAgICAgIGltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlpbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdXAgPSAoc2NjX3VhcnRfdCAqKSZpbS0+aW1fZHByYW1iYXNlW1BST0ZGX1NDQ107CiAJcmJkZiA9IChjYmRfdCAqKSZpbS0+aW1fZHByYW1iYXNlW3VwLT5zY2NfZ2Vuc2NjLnNjY19yYmFzZV07CiAKQEAgLTI1NSw5ICsyNTUsOSBAQAogewogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSBzY2NfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW07CisJdm9sYXRpbGUgaW1tYXBfdAkqaW07CiAKLSAgICAgICAgaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCWltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl1cCA9IChzY2NfdWFydF90ICopJmltLT5pbV9kcHJhbWJhc2VbUFJPRkZfU0NDXTsKIAlyYmRmID0gKGNiZF90ICopJmltLT5pbV9kcHJhbWJhc2VbdXAtPnNjY19nZW5zY2Muc2NjX3JiYXNlXTsKIApAQCAtMzIxLDcgKzMyMSw3IEBACiB2b2lkCiBrZ2RiX3NlcmlhbF9pbml0ICh2b2lkKQogewotICAgICAgICB2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIHNjY190ICpzcDsKIAl2b2xhdGlsZSBzY2NfdWFydF90ICp1cDsKIAl2b2xhdGlsZSBjYmRfdCAqdGJkZiwgKnJiZGY7CkBAIC00MzUsMTIgKzQzNSwxMiBAQAogewogCXZvbGF0aWxlIHNjY191YXJ0X3QJKnVwOwogCXZvbGF0aWxlIGNiZF90CQkqdGJkZjsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW07CisJdm9sYXRpbGUgaW1tYXBfdAkqaW07CiAKIAlpZiAoYyA9PSAnXG4nKQogCQlwdXREZWJ1Z0NoYXIgKCdccicpOwogCi0gICAgICAgIGltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwlpbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdXAgPSAoc2NjX3VhcnRfdCAqKSZpbS0+aW1fZHByYW1iYXNlW0tHREJfUFJPRkZfU0NDXTsKIAl0YmRmID0gKGNiZF90ICopJmltLT5pbV9kcHJhbWJhc2VbdXAtPnNjY19nZW5zY2Muc2NjX3RiYXNlXTsKIApAQCAtNDY5LDEwICs0NjksMTAgQEAKIHsKIAl2b2xhdGlsZSBjYmRfdAkJKnJiZGY7CiAJdm9sYXRpbGUgc2NjX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltOworCXZvbGF0aWxlIGltbWFwX3QJKmltOwogCXVuc2lnbmVkIGNoYXIJCWM7CiAKLSAgICAgICAgaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCWltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl1cCA9IChzY2NfdWFydF90ICopJmltLT5pbV9kcHJhbWJhc2VbS0dEQl9QUk9GRl9TQ0NdOwogCXJiZGYgPSAoY2JkX3QgKikmaW0tPmltX2RwcmFtYmFzZVt1cC0+c2NjX2dlbnNjYy5zY2NfcmJhc2VdOwogCmRpZmYgLS1naXQgYS9jcHUvbXBjODI2MC9zZXJpYWxfc21jLmMgYi9jcHUvbXBjODI2MC9zZXJpYWxfc21jLmMKaW5kZXggYjBlMWNlNC4uMDg3MzMxOSAxMDA2NDQKLS0tIGEvY3B1L21wYzgyNjAvc2VyaWFsX3NtYy5jCisrKyBiL2NwdS9tcGM4MjYwL3NlcmlhbF9zbWMuYwpAQCAtNzQsNyArNzQsNyBAQAogCiBpbnQgc2VyaWFsX2luaXQgKHZvaWQpCiB7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAJdm9sYXRpbGUgc21jX3QgKnNwOwogCXZvbGF0aWxlIHNtY191YXJ0X3QgKnVwOwogCXZvbGF0aWxlIGNiZF90ICp0YmRmLCAqcmJkZjsKQEAgLTE4Niw3ICsxODYsNyBAQAogCXZvbGF0aWxlIGNiZF90CQkqdGJkZjsKIAl2b2xhdGlsZSBjaGFyCQkqYnVmOwogCXZvbGF0aWxlIHNtY191YXJ0X3QJKnVwOwotICAgICAgICB2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCiAJaWYgKGMgPT0gJ1xuJykKIAkJc2VyaWFsX3B1dGMgKCdccicpOwpAQCAtMjIwLDcgKzIyMCw3IEBACiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKmJ1ZjsKIAl2b2xhdGlsZSBzbWNfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl1bnNpZ25lZCBjaGFyCQljOwogCiAJdXAgPSAoc21jX3VhcnRfdCAqKSYoaW0tPmltX2RwcmFtYmFzZVtQUk9GRl9TTUNdKTsKQEAgLTI0Myw3ICsyNDMsNyBAQAogewogCXZvbGF0aWxlIGNiZF90CQkqcmJkZjsKIAl2b2xhdGlsZSBzbWNfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAogCXVwID0gKHNtY191YXJ0X3QgKikmKGltLT5pbV9kcHJhbWJhc2VbUFJPRkZfU01DXSk7CiAKQEAgLTI4OSw3ICsyODksNyBAQAogdm9pZAoga2dkYl9zZXJpYWxfaW5pdCAodm9pZCkKIHsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QgKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBzbWNfdCAqc3A7CiAJdm9sYXRpbGUgc21jX3VhcnRfdCAqdXA7CiAJdm9sYXRpbGUgY2JkX3QgKnRiZGYsICpyYmRmOwpAQCAtNDAxLDcgKzQwMSw3IEBACiAJdm9sYXRpbGUgY2JkX3QJCSp0YmRmOwogCXZvbGF0aWxlIGNoYXIJCSpidWY7CiAJdm9sYXRpbGUgc21jX3VhcnRfdAkqdXA7Ci0gICAgICAgIHZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKKwl2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CiAKIAlpZiAoYyA9PSAnXG4nKQogCQlwdXREZWJ1Z0NoYXIgKCdccicpOwpAQCAtNDM1LDcgKzQzNSw3IEBACiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKmJ1ZjsKIAl2b2xhdGlsZSBzbWNfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl1bnNpZ25lZCBjaGFyCQljOwogCiAJdXAgPSAoc21jX3VhcnRfdCAqKSYoaW0tPmltX2RwcmFtYmFzZVtLR0RCX1BST0ZGX1NNQ10pOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzgyNjAvc3BpLmMgYi9jcHUvbXBjODI2MC9zcGkuYwppbmRleCA2YTJkYzhmLi5jMWE2MDdjIDEwMDY0NAotLS0gYS9jcHUvbXBjODI2MC9zcGkuYworKysgYi9jcHUvbXBjODI2MC9zcGkuYwpAQCAtMjEzLDEyICsyMTMsMTIgQEAKIAogCS8qKioqKioqKioqKklNUE9SVEFOVCoqKioqKioqKioqKioqKioqKi8KIAotICAgICAgICAvKgotICAgICAgICAgKiBTZXR0aW5nIHRyYW5zbWl0IGFuZCByZWNlaXZlIGJ1ZmZlciBkZXNjcmlwdG9yIHBvaW50ZXJzCi0gICAgICAgICAqIGluaXRpYWxseSB0byByYmFzZSBhbmQgdGJhc2UuIE9ubHkgdGhlIG1pY3JvY29kZSBwYXRjaGVzCi0gICAgICAgICAqIGRvY3VtZW50YXRpb24gdGFsa3MgYWJvdXQgaW5pdGlhbGl6aW5nIHRoaXMgcG9pbnRlci4gVGhpcwotICAgICAgICAgKiBpcyBtaXNzaW5nIGZyb20gdGhlIHNhbXBsZSBJMkMgZHJpdmVyLiBJZiB5b3UgZG9udAotICAgICAgICAgKiBpbml0aWFsaXplIHRoZXNlIHBvaW50ZXJzLCB0aGUga2VybmVsIGhhbmdzLgorCS8qCisJICogU2V0dGluZyB0cmFuc21pdCBhbmQgcmVjZWl2ZSBidWZmZXIgZGVzY3JpcHRvciBwb2ludGVycworCSAqIGluaXRpYWxseSB0byByYmFzZSBhbmQgdGJhc2UuIE9ubHkgdGhlIG1pY3JvY29kZSBwYXRjaGVzCisJICogZG9jdW1lbnRhdGlvbiB0YWxrcyBhYm91dCBpbml0aWFsaXppbmcgdGhpcyBwb2ludGVyLiBUaGlzCisJICogaXMgbWlzc2luZyBmcm9tIHRoZSBzYW1wbGUgSTJDIGRyaXZlci4gSWYgeW91IGRvbnQKKwkgKiBpbml0aWFsaXplIHRoZXNlIHBvaW50ZXJzLCB0aGUga2VybmVsIGhhbmdzLgogCSAqLwogCXNwaS0+c3BpX3JicHRyID0gc3BpLT5zcGlfcmJhc2U7CiAJc3BpLT5zcGlfdGJwdHIgPSBzcGktPnNwaV90YmFzZTsKZGlmZiAtLWdpdCBhL2NwdS9tcGM4MjYwL3N0YXJ0LlMgYi9jcHUvbXBjODI2MC9zdGFydC5TCmluZGV4IDIwNzBlY2MuLmQzZmQ4NjUgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4MjYwL3N0YXJ0LlMKKysrIGIvY3B1L21wYzgyNjAvc3RhcnQuUwpAQCAtOTY2LDggKzk2Niw4IEBACiAJLyoKIAkgKiBSZWxvY2F0aW9uIEZ1bmN0aW9uLCByMTQgcG9pbnQgdG8gZ290MisweDgwMDAKIAkgKgotICAgICAgICAgKiBBZGp1c3QgZ290MiBwb2ludGVycywgbm8gbmVlZCB0byBjaGVjayBmb3IgMCwgdGhpcyBjb2RlCi0gICAgICAgICAqIGFscmVhZHkgcHV0cyBhIGZldyBlbnRyaWVzIGluIHRoZSB0YWJsZS4KKwkgKiBBZGp1c3QgZ290MiBwb2ludGVycywgbm8gbmVlZCB0byBjaGVjayBmb3IgMCwgdGhpcyBjb2RlCisJICogYWxyZWFkeSBwdXRzIGEgZmV3IGVudHJpZXMgaW4gdGhlIHRhYmxlLgogCSAqLwogCWxpCXIwLF9fZ290Ml9lbnRyaWVzQHNlY3RvZmZAbAogCWxhCXIzLEdPVChfR09UMl9UQUJMRV8pCkBAIC05ODEsNyArOTgxLDcgQEAKIAliZG56CTFiCiAKIAkvKgotICAgICAgICAgKiBOb3cgYWRqdXN0IHRoZSBmaXh1cHMgYW5kIHRoZSBwb2ludGVycyB0byB0aGUgZml4dXBzCisJICogTm93IGFkanVzdCB0aGUgZml4dXBzIGFuZCB0aGUgcG9pbnRlcnMgdG8gdGhlIGZpeHVwcwogCSAqIGluIGNhc2Ugd2UgbmVlZCB0byBtb3ZlIG91cnNlbHZlcyBhZ2Fpbi4KIAkgKi8KIDI6CWxpCXIwLF9fZml4dXBfZW50cmllc0BzZWN0b2ZmQGwKZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvYmVkYnVnXzg2MC5jIGIvY3B1L21wYzh4eC9iZWRidWdfODYwLmMKaW5kZXggYjkwNzgyZS4uZTkxYTEwMCAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9iZWRidWdfODYwLmMKKysrIGIvY3B1L21wYzh4eC9iZWRidWdfODYwLmMKQEAgLTUsMTEgKzUsMTAgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLQotI2luY2x1ZGUgPGNtZF9iZWRidWcuaD4KICNpbmNsdWRlIDxiZWRidWcvYmVkYnVnLmg+CiAjaW5jbHVkZSA8YmVkYnVnL3JlZ3MuaD4KICNpbmNsdWRlIDxiZWRidWcvcHBjLmg+CisjaW5jbHVkZSA8YmVkYnVnL3R5cGUuaD4KIAogI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JFREJVRykgJiYgZGVmaW5lZChDT05GSUdfOHh4KQogCkBAIC02NCw3ICs2Myw3IEBACiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKIHZvaWQgYmVkYnVnODYwX2RvX2JyZWFrIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYXJndltdKQorCQkJIGNoYXIgKmFyZ3ZbXSkKIHsKICAgbG9uZwkJYWRkciA9IDA7ICAgICAgIC8qIEFkZHJlc3MgdG8gYnJlYWsgYXQgICovCiAgIGludAkJd2hpY2hfYnA7ICAgICAgIC8qIEJyZWFrcG9pbnQgbnVtYmVyICAgICovCkBAIC0zMTUsNCArMzE0LDMgQEAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2NwdS9tcGM4eHgvY3B1LmMgYi9jcHUvbXBjOHh4L2NwdS5jCmluZGV4IGNjNzMzMDUuLjRlMjMyMjggMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvY3B1LmMKKysrIGIvY3B1L21wYzh4eC9jcHUuYwpAQCAtNDExLDggKzQxMSw3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKiBjbWR0cCwgYmRfdCAqIGJkLCBpbnQgZmxhZywgaW50IGFyZ2MsCi0JCQkgIGNoYXIgKmFyZ3ZbXSkKK2ludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJdWxvbmcgbXNyLCBhZGRyOwogCmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L2ZlYy5jIGIvY3B1L21wYzh4eC9mZWMuYwppbmRleCBkMmU4NDA4Li44NWJhNmIyIDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L2ZlYy5jCisrKyBiL2NwdS9tcGM4eHgvZmVjLmMKQEAgLTQxMSw3ICs0MTEsNiBAQAogfQogCiAKLQogc3RhdGljIHZvaWQgZmVjX2hhbHQoc3RydWN0IGV0aF9kZXZpY2UqIGRldikKIHsKICNpZiAwCmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L2kyYy5jIGIvY3B1L21wYzh4eC9pMmMuYwppbmRleCA5ZThiOGM3Li5iYWEzNTUyIDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L2kyYy5jCisrKyBiL2NwdS9tcGM4eHgvaTJjLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXZvbGF0aWxlIEkyQ19CRCAqcnhiZCwgKnR4YmQ7CiAJdWludCBkcGFkZHI7CiAKLSNpZmRlZiBDRkdfSTJDX0lOSVRfQk9BUkQgICAgICAgIAorI2lmZGVmIENGR19JMkNfSU5JVF9CT0FSRAogCS8qIGNhbGwgYm9hcmQgc3BlY2lmaWMgaTJjIGJ1cyByZXNldCByb3V0aW5lIGJlZm9yZSBhY2Nlc3NpbmcgdGhlICAgKi8KIAkvKiBlbnZpcm9ubWVudCwgd2hpY2ggbWlnaHQgYmUgaW4gYSBjaGlwIG9uIHRoYXQgYnVzLiBGb3IgZGV0YWlscyAgICovCiAJLyogYWJvdXQgdGhpcyBwcm9ibGVtIHNlZSBkb2MvSTJDX0VkZ2VfQ29uZGl0aW9ucy4gICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9sY2QuYyBiL2NwdS9tcGM4eHgvbGNkLmMKaW5kZXggZmFkMzgzZi4uOWY0YjIxMCAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9sY2QuYworKysgYi9jcHUvbXBjOHh4L2xjZC5jCkBAIC04OTAsNyArODkwLDcgQEAKIAkgKiA0LWJpdCB3aWRlIHBhc3NpdmUgZHVhbCBzY2FuIExDRCBhdCA0LzggQml0IGNvbG9yLgogCSAqLwogCWxjaGNyX2hwY190bXAgPQotCSAgICAgICAJKHBhbmVsX2luZm8udmxfY29sICoKKwkJKHBhbmVsX2luZm8udmxfY29sICoKIAkJIChwYW5lbF9pbmZvLnZsX3RmdCA/IDggOgogCQkJKCgoMiAtIHBhbmVsX2luZm8udmxfbGJ3KSA8PCAvKiA0IGJpdD0yLCA4LWJpdCA9IDEgKi8KIAkJCSAvKiB1c2UgPDwgdG8gbXVsdCBieTogc2luZ2xlIHNjYW4gPSAxLCBkdWFsIHNjYW4gPSAyICovCkBAIC05NTUsNyArOTU1LDcgQEAKIAlkZWJ1ZyAoInNldGNvbHJlZzogcmVnICUyZCBAICVwOiBSPSUwMlggRz0lMDJYIEI9JTAyWCA9PiAlMDJYJTAyWFxuIiwKIAkJcmVnbm8sICYoY3AtPmxjZF9jbWFwW3JlZ25vICogMl0pLAogCQlyZWQsIGdyZWVuLCBibHVlLAotICAgICAgICAgICAgICAgIGNwLT5sY2RfY21hcFsgcmVnbm8gKiAyIF0sIGNwLT5sY2RfY21hcFsocmVnbm8gKiAyKSArIDFdKTsKKwkJY3AtPmxjZF9jbWFwWyByZWdubyAqIDIgXSwgY3AtPmxjZF9jbWFwWyhyZWdubyAqIDIpICsgMV0pOwogfQogI2VuZGlmCS8qIExDRF9DT0xPUjggKi8KIApAQCAtMTAzMSw5ICsxMDMxLDkgQEAKICNpZiBkZWZpbmVkKENPTkZJR19MV01PTikKICAgICB7CXVjaGFyIGMgPSBwaWNfcmVhZCAoMHg2MCk7CiAjaWYgZGVmaW5lZChDT05GSUdfTENEKSAmJiBkZWZpbmVkKENPTkZJR19MV01PTikgJiYgKENPTkZJR19QT1NUICYgQ0ZHX1BPU1RfU1lTTU9OKQotICAgIAljIHw9IDB4MDQ7CS8qIENoaXAgRW5hYmxlIExDRCAqLworCWMgfD0gMHgwNDsJLyogQ2hpcCBFbmFibGUgTENEICovCiAjZWxzZQotICAgIAljIHw9IDB4MDc7CS8qIFBvd2VyIG9uIENDRkwsIEVuYWJsZSBDQ0ZMLCBDaGlwIEVuYWJsZSBMQ0QgKi8KKwljIHw9IDB4MDc7CS8qIFBvd2VyIG9uIENDRkwsIEVuYWJsZSBDQ0ZMLCBDaGlwIEVuYWJsZSBMQ0QgKi8KICNlbmRpZgogCXBpY193cml0ZSAoMHg2MCwgYyk7CiAgICAgfQpAQCAtMTA2OSw3ICsxMDY5LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0xXTU9OKQogICAgIHsJdWNoYXIgYyA9IHBpY19yZWFkICgweDYwKTsKLSAgICAJYyAmPSB+MHgwNzsJLyogUG93ZXIgb2ZmIENDRkwsIERpc2FibGUgQ0NGTCwgQ2hpcCBEaXNhYmxlIExDRCAqLworCWMgJj0gfjB4MDc7CS8qIFBvd2VyIG9mZiBDQ0ZMLCBEaXNhYmxlIENDRkwsIENoaXAgRGlzYWJsZSBMQ0QgKi8KIAlwaWNfd3JpdGUgKDB4NjAsIGMpOwogICAgIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX1IzNjBNUEkpCmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L3NjYy5jIGIvY3B1L21wYzh4eC9zY2MuYwppbmRleCBmOThhYWQ0Li5kNzExYTYzIDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L3NjYy5jCisrKyBiL2NwdS9tcGM4eHgvc2NjLmMKQEAgLTE2OCwxMCArMTY4LDEwIEBACiAKIAkvKiB3cmFwIGFyb3VuZCBidWZmZXIgaW5kZXggd2hlbiBuZWNlc3NhcnkgKi8KIAlpZiAoKHJ4SWR4ICsgMSkgPj0gUEtUQlVGU1JYKSB7Ci0gICAgICAgICAgIHJ0eC0+cnhiZFtQS1RCVUZTUlggLSAxXS5jYmRfc2MgPSAoQkRfRU5FVF9SWF9XUkFQIHwgQkRfRU5FVF9SWF9FTVBUWSk7CisJICAgcnR4LT5yeGJkW1BLVEJVRlNSWCAtIDFdLmNiZF9zYyA9IChCRF9FTkVUX1JYX1dSQVAgfCBCRF9FTkVUX1JYX0VNUFRZKTsKIAkgICByeElkeCA9IDA7CiAJfSBlbHNlIHsKLSAgICAgICAgICAgcnR4LT5yeGJkW3J4SWR4XS5jYmRfc2MgPSBCRF9FTkVUX1JYX0VNUFRZOworCSAgIHJ0eC0+cnhiZFtyeElkeF0uY2JkX3NjID0gQkRfRU5FVF9SWF9FTVBUWTsKIAkgICByeElkeCsrOwogCX0KICAgIH0KQEAgLTIxMiw3ICsyMTIsNyBAQAogCiAjaWZkZWYgQ0ZHX0FMTE9DX0RQUkFNCiAgICAgcnR4ID0gKFJUWEJEICopIChpbW1yLT5pbV9jcG0uY3BfZHBtZW0gKwotICAgIAkJICAgICBkcHJhbV9hbGxvY19hbGlnbihzaXplb2YoUlRYQkQpLCA4KSk7CisJCSAgICAgZHByYW1fYWxsb2NfYWxpZ24oc2l6ZW9mKFJUWEJEKSwgOCkpOwogI2Vsc2UKICAgICBydHggPSAoUlRYQkQgKikgKGltbXItPmltX2NwbS5jcF9kcG1lbSArIENQTV9TQ0NfQkFTRSk7CiAjZW5kaWYJLyogMCAqLwpAQCAtNDA2LDcgKzQwNiw3IEBACiAgICAgICovCiAKICAgICBpbW1yLT5pbV9jcG0uY3Bfc2NjW1NDQ19FTkVUXS5zY2NfZ3NtcmwgPSAoCVNDQ19HU01STF9UQ0kJIHwJXAotICAgIAkJCQkJCVNDQ19HU01STF9UUExfNDggfAlcCisJCQkJCQlTQ0NfR1NNUkxfVFBMXzQ4IHwJXAogCQkJCQkJU0NDX0dTTVJMX1RQUF8xMCB8CVwKIAkJCQkJCVNDQ19HU01STF9NT0RFX0VORVQpOwogCkBAIC00NzEsNyArNDcxLDcgQEAKICAgICAgKiBQb3J0IEIgaXMgdXNlZCB0byBjb250cm9sIHRoZSBQSFksTUM2ODE2MC4KICAgICAgKi8KICAgICBpbW1yLT5pbV9jcG0uY3BfcGJkaXIgfD0KLSAgICAgICAgKFBCX0VORVRfRVRITE9PUCB8IFBCX0VORVRfVFBGTERMIHwgUEJfRU5FVF9UUFNRRUwpOworCShQQl9FTkVUX0VUSExPT1AgfCBQQl9FTkVUX1RQRkxETCB8IFBCX0VORVRfVFBTUUVMKTsKIAogICAgIGltbXItPmltX2NwbS5jcF9wYmRhdCB8PSBQQl9FTkVUX1RQRkxETDsKICAgICBpbW1yLT5pbV9jcG0uY3BfcGJkYXQgJj0gfihQQl9FTkVUX0VUSExPT1AgfCBQQl9FTkVUX1RQU1FFTCk7CkBAIC01MzIsNyArNTMyLDYgQEAKIH0KIAogCi0KIHN0YXRpYyB2b2lkIHNjY19oYWx0KHN0cnVjdCBldGhfZGV2aWNlKiBkZXYpCiB7CiAgICAgdm9sYXRpbGUgaW1tYXBfdCAqaW1tciA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L3NlcmlhbC5jIGIvY3B1L21wYzh4eC9zZXJpYWwuYwppbmRleCA0ZTViNDA4Li44MWMwMjc5IDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L3NlcmlhbC5jCisrKyBiL2NwdS9tcGM4eHgvc2VyaWFsLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAogaW50IHNlcmlhbF9pbml0ICh2b2lkKQogewotICAgICAgICB2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIHNtY190ICpzcDsKIAl2b2xhdGlsZSBzbWNfdWFydF90ICp1cDsKIAl2b2xhdGlsZSBjYmRfdCAqdGJkZiwgKnJiZGY7CkBAIC0yMzEsNyArMjMxLDcgQEAKIHsKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAotICAgICAgICB2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIGNwbTh4eF90ICpjcCA9ICYoaW0tPmltX2NwbSk7CiAKIAkvKiBTZXQgdXAgdGhlIGJhdWQgcmF0ZSBnZW5lcmF0b3IuCkBAIC0yNjYsNyArMjY2LDcgQEAKIAl2b2xhdGlsZSBjYmRfdAkJKnRiZGY7CiAJdm9sYXRpbGUgY2hhcgkJKmJ1ZjsKIAl2b2xhdGlsZSBzbWNfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBjcG04eHhfdAkqY3BtcCA9ICYoaW0tPmltX2NwbSk7CiAKICNpZmRlZiBDT05GSUdfTU9ERU1fU1VQUE9SVApAQCAtMzA1LDcgKzMwNSw3IEBACiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKmJ1ZjsKIAl2b2xhdGlsZSBzbWNfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBjcG04eHhfdAkqY3BtcCA9ICYoaW0tPmltX2NwbSk7CiAJdW5zaWduZWQgY2hhcgkJYzsKIApAQCAtMzMxLDcgKzMzMSw3IEBACiB7CiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHNtY191YXJ0X3QJKnVwOwotICAgICAgICB2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIGNwbTh4eF90CSpjcG1wID0gJihpbS0+aW1fY3BtKTsKIAogCXVwID0gKHNtY191YXJ0X3QgKikmY3BtcC0+Y3BfZHBhcmFtW1BST0ZGX1NNQ107CkBAIC0zNDUsNyArMzQ1LDcgQEAKIAogaW50IHNlcmlhbF9pbml0ICh2b2lkKQogewotICAgICAgICB2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIHNjY190ICpzcDsKIAl2b2xhdGlsZSBzY2NfdWFydF90ICp1cDsKIAl2b2xhdGlsZSBjYmRfdCAqdGJkZiwgKnJiZGY7CkBAIC01MDgsNyArNTA4LDcgQEAKIHsKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIAotICAgICAgICB2b2xhdGlsZSBpbW1hcF90ICppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIGNwbTh4eF90ICpjcCA9ICYoaW0tPmltX2NwbSk7CiAKIAkvKiBTZXQgdXAgdGhlIGJhdWQgcmF0ZSBnZW5lcmF0b3IuCkBAIC01MzAsNyArNTMwLDcgQEAKIAl2b2xhdGlsZSBjYmRfdAkJKnRiZGY7CiAJdm9sYXRpbGUgY2hhcgkJKmJ1ZjsKIAl2b2xhdGlsZSBzY2NfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBjcG04eHhfdAkqY3BtcCA9ICYoaW0tPmltX2NwbSk7CiAKIAlpZiAoYyA9PSAnXG4nKQpAQCAtNTYyLDcgKzU2Miw3IEBACiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIJKmJ1ZjsKIAl2b2xhdGlsZSBzY2NfdWFydF90CSp1cDsKLSAgICAgICAgdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOworCXZvbGF0aWxlIGltbWFwX3QJKmltID0gKGltbWFwX3QgKilDRkdfSU1NUjsKIAl2b2xhdGlsZSBjcG04eHhfdAkqY3BtcCA9ICYoaW0tPmltX2NwbSk7CiAJdW5zaWduZWQgY2hhcgkJYzsKIApAQCAtNTg4LDcgKzU4OCw3IEBACiB7CiAJdm9sYXRpbGUgY2JkX3QJCSpyYmRmOwogCXZvbGF0aWxlIHNjY191YXJ0X3QJKnVwOwotICAgICAgICB2b2xhdGlsZSBpbW1hcF90CSppbSA9IChpbW1hcF90ICopQ0ZHX0lNTVI7CisJdm9sYXRpbGUgaW1tYXBfdAkqaW0gPSAoaW1tYXBfdCAqKUNGR19JTU1SOwogCXZvbGF0aWxlIGNwbTh4eF90CSpjcG1wID0gJihpbS0+aW1fY3BtKTsKIAogCXVwID0gKHNjY191YXJ0X3QgKikmY3BtcC0+Y3BfZHBhcmFtW1BST0ZGX1NDQ107CmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L3NwZWVkLmMgYi9jcHUvbXBjOHh4L3NwZWVkLmMKaW5kZXggZWYzMjM3MS4uZTFjMzQwMCAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9zcGVlZC5jCisrKyBiL2NwdS9tcGM4eHgvc3BlZWQuYwpAQCAtMTE0LDE4ICsxMTQsMTggQEAKIAkvKgogCSAqIFBJVCBzZXR1cDoKIAkgKgotICAgICAgICAgKiBXZSB3YW50IHRvIHRpbWUgZm9yIFNQRUVEX1BJVENfQ09VTlRTIGNvdW50cyAob2YgODE5MiBIeiksCi0gICAgICAgICAqIHNvIHRoZSBjb3VudCB2YWx1ZSB3b3VsZCBiZSBTUEVFRF9QSVRDX0NPVU5UUyAtIDEuCi0gICAgICAgICAqIEJ1dCB0aGVyZSB3b3VsZCBiZSBhbiB1bmNlcnRhaW50eSBpbiB0aGUgc3RhcnQgdGltZSBvZiAxLzQKLSAgICAgICAgICogY291bnQgc2luY2Ugd2hlbiB3ZSBlbmFibGUgdGhlIFBJVCB0aGUgY291bnQgaXMgbm90Ci0gICAgICAgICAqIHN5bmNocm9uaXplZCB0byB0aGUgMzI3NjggSHogb3NjaWxsYXRvci4gVGhlIHRyaWNrIGhlcmUgaXMKLSAgICAgICAgICogdG8gc3RhcnQgdGhlIGNvdW50IGhpZ2hlciBhbmQgd2FpdCB1bnRpbCB0aGUgUElUIGNvdW50Ci0gICAgICAgICAqIGNoYW5nZXMgdG8gdGhlIHJlcXVpcmVkIHZhbHVlIGJlZm9yZSBzdGFydGluZyB0aW1lciAyLgorCSAqIFdlIHdhbnQgdG8gdGltZSBmb3IgU1BFRURfUElUQ19DT1VOVFMgY291bnRzIChvZiA4MTkyIEh6KSwKKwkgKiBzbyB0aGUgY291bnQgdmFsdWUgd291bGQgYmUgU1BFRURfUElUQ19DT1VOVFMgLSAxLgorCSAqIEJ1dCB0aGVyZSB3b3VsZCBiZSBhbiB1bmNlcnRhaW50eSBpbiB0aGUgc3RhcnQgdGltZSBvZiAxLzQKKwkgKiBjb3VudCBzaW5jZSB3aGVuIHdlIGVuYWJsZSB0aGUgUElUIHRoZSBjb3VudCBpcyBub3QKKwkgKiBzeW5jaHJvbml6ZWQgdG8gdGhlIDMyNzY4IEh6IG9zY2lsbGF0b3IuIFRoZSB0cmljayBoZXJlIGlzCisJICogdG8gc3RhcnQgdGhlIGNvdW50IGhpZ2hlciBhbmQgd2FpdCB1bnRpbCB0aGUgUElUIGNvdW50CisJICogY2hhbmdlcyB0byB0aGUgcmVxdWlyZWQgdmFsdWUgYmVmb3JlIHN0YXJ0aW5nIHRpbWVyIDIuCiAJICoKLSAgICAgICAgICogT25lIGNvdW50IGhpZ2ggc2hvdWxkIGJlIGVub3VnaCwgYnV0IG9jY2FzaW9uYWxseSB0aGUgc3RhcnQKLSAgICAgICAgICogaXMgb2ZmIGJ5IDEgb3IgMiBjb3VudHMgb2YgMzI3NjggSHouIFdpdGggdGhlIHN0YXJ0IHZhbHVlCi0gICAgICAgICAqIHNldCB0d28gY291bnRzIGhpZ2ggaXQgc2VlbXMgdmVyeSByZWxpYWJsZS4KLSAgICAgICAgICovCisJICogT25lIGNvdW50IGhpZ2ggc2hvdWxkIGJlIGVub3VnaCwgYnV0IG9jY2FzaW9uYWxseSB0aGUgc3RhcnQKKwkgKiBpcyBvZmYgYnkgMSBvciAyIGNvdW50cyBvZiAzMjc2OCBIei4gV2l0aCB0aGUgc3RhcnQgdmFsdWUKKwkgKiBzZXQgdHdvIGNvdW50cyBoaWdoIGl0IHNlZW1zIHZlcnkgcmVsaWFibGUuCisJICovCiAKIAlpbW1yLT5pbV9zaXRrLnNpdGtfcGl0Y2sgPSBLQVBXUl9LRVk7CS8qIFBJVCBpbml0aWFsaXphdGlvbiAqLwogCWltbXItPmltX3NpdC5zaXRfcGl0YyA9IFNQRUVEX1BJVENfSU5JVDsKQEAgLTE2MywxMCArMTYzLDEwIEBACiAjZWxzZSAvKiBDT05GSUdfOHh4X0dDTEtfRlJFUSAqLwogCiAJLyoKLSAgICAgICAgICogSWYgZm9yIHNvbWUgcmVhc29uIG1lYXN1cmluZyB0aGUgZ2NsayBmcmVxdWVuY3kgd29uJ3QKLSAgICAgICAgICogd29yaywgd2UgcmV0dXJuIHRoZSBoYXJkd2lyZWQgdmFsdWUuCi0gICAgICAgICAqIChGb3IgZXhhbXBsZSwgdGhlIGNvZ2VudCBDTUEyODYtNjAgQ1BVIG1vZHVsZSBoYXMgbm8KLSAgICAgICAgICogc2VwYXJhdGUgb3NjaWxsYXRvciBmb3IgUElUUlRDTEspCisJICogSWYgZm9yIHNvbWUgcmVhc29uIG1lYXN1cmluZyB0aGUgZ2NsayBmcmVxdWVuY3kgd29uJ3QKKwkgKiB3b3JrLCB3ZSByZXR1cm4gdGhlIGhhcmR3aXJlZCB2YWx1ZS4KKwkgKiAoRm9yIGV4YW1wbGUsIHRoZSBjb2dlbnQgQ01BMjg2LTYwIENQVSBtb2R1bGUgaGFzIG5vCisJICogc2VwYXJhdGUgb3NjaWxsYXRvciBmb3IgUElUUlRDTEspCiAJICovCiAKIAlnZC0+Y3B1X2NsayA9IENPTkZJR184eHhfR0NMS19GUkVROwpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9zcGkuYyBiL2NwdS9tcGM4eHgvc3BpLmMKaW5kZXggZjA0ZDg4ZS4uMTZiM2YzYSAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC9zcGkuYworKysgYi9jcHUvbXBjOHh4L3NwaS5jCkBAIC0yMjMsMTIgKzIyMywxMiBAQAogCiAJLyoqKioqKioqKioqSU1QT1JUQU5UKioqKioqKioqKioqKioqKioqLwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNldHRpbmcgdHJhbnNtaXQgYW5kIHJlY2VpdmUgYnVmZmVyIGRlc2NyaXB0b3IgcG9pbnRlcnMKLSAgICAgICAgICogaW5pdGlhbGx5IHRvIHJiYXNlIGFuZCB0YmFzZS4gT25seSB0aGUgbWljcm9jb2RlIHBhdGNoZXMKLSAgICAgICAgICogZG9jdW1lbnRhdGlvbiB0YWxrcyBhYm91dCBpbml0aWFsaXppbmcgdGhpcyBwb2ludGVyLiBUaGlzCi0gICAgICAgICAqIGlzIG1pc3NpbmcgZnJvbSB0aGUgc2FtcGxlIEkyQyBkcml2ZXIuIElmIHlvdSBkb250Ci0gICAgICAgICAqIGluaXRpYWxpemUgdGhlc2UgcG9pbnRlcnMsIHRoZSBrZXJuZWwgaGFuZ3MuCisJLyoKKwkgKiBTZXR0aW5nIHRyYW5zbWl0IGFuZCByZWNlaXZlIGJ1ZmZlciBkZXNjcmlwdG9yIHBvaW50ZXJzCisJICogaW5pdGlhbGx5IHRvIHJiYXNlIGFuZCB0YmFzZS4gT25seSB0aGUgbWljcm9jb2RlIHBhdGNoZXMKKwkgKiBkb2N1bWVudGF0aW9uIHRhbGtzIGFib3V0IGluaXRpYWxpemluZyB0aGlzIHBvaW50ZXIuIFRoaXMKKwkgKiBpcyBtaXNzaW5nIGZyb20gdGhlIHNhbXBsZSBJMkMgZHJpdmVyLiBJZiB5b3UgZG9udAorCSAqIGluaXRpYWxpemUgdGhlc2UgcG9pbnRlcnMsIHRoZSBrZXJuZWwgaGFuZ3MuCiAJICovCiAJc3BpLT5zcGlfcmJwdHIgPSBzcGktPnNwaV9yYmFzZTsKIAlzcGktPnNwaV90YnB0ciA9IHNwaS0+c3BpX3RiYXNlOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzh4eC9zdGFydC5TIGIvY3B1L21wYzh4eC9zdGFydC5TCmluZGV4IDNjYzRlY2IuLjgxYTRkYzAgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4eHgvc3RhcnQuUworKysgYi9jcHUvbXBjOHh4L3N0YXJ0LlMKQEAgLTIwOSw3ICsyMDksNiBAQAogCWJsCWJvYXJkX2luaXRfZgkvKiBydW4gMXN0IHBhcnQgb2YgYm9hcmQgaW5pdCBjb2RlIChmcm9tIEZsYXNoKSAqLwogCiAKLQogCS5nbG9ibAlfc3RhcnRfb2ZfdmVjdG9ycwogX3N0YXJ0X29mX3ZlY3RvcnM6CiAKQEAgLTY1MCw4ICs2NDksOCBAQAogCS8qCiAJICogUmVsb2NhdGlvbiBGdW5jdGlvbiwgcjE0IHBvaW50IHRvIGdvdDIrMHg4MDAwCiAJICoKLSAgICAgICAgICogQWRqdXN0IGdvdDIgcG9pbnRlcnMsIG5vIG5lZWQgdG8gY2hlY2sgZm9yIDAsIHRoaXMgY29kZQotICAgICAgICAgKiBhbHJlYWR5IHB1dHMgYSBmZXcgZW50cmllcyBpbiB0aGUgdGFibGUuCisJICogQWRqdXN0IGdvdDIgcG9pbnRlcnMsIG5vIG5lZWQgdG8gY2hlY2sgZm9yIDAsIHRoaXMgY29kZQorCSAqIGFscmVhZHkgcHV0cyBhIGZldyBlbnRyaWVzIGluIHRoZSB0YWJsZS4KIAkgKi8KIAlsaQlyMCxfX2dvdDJfZW50cmllc0BzZWN0b2ZmQGwKIAlsYQlyMyxHT1QoX0dPVDJfVEFCTEVfKQpAQCAtNjY1LDcgKzY2NCw3IEBACiAJYmRuegkxYgogCiAJLyoKLSAgICAgICAgICogTm93IGFkanVzdCB0aGUgZml4dXBzIGFuZCB0aGUgcG9pbnRlcnMgdG8gdGhlIGZpeHVwcworCSAqIE5vdyBhZGp1c3QgdGhlIGZpeHVwcyBhbmQgdGhlIHBvaW50ZXJzIHRvIHRoZSBmaXh1cHMKIAkgKiBpbiBjYXNlIHdlIG5lZWQgdG8gbW92ZSBvdXJzZWx2ZXMgYWdhaW4uCiAJICovCiAyOglsaQlyMCxfX2ZpeHVwX2VudHJpZXNAc2VjdG9mZkBsCmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L3VwYXRjaC5jIGIvY3B1L21wYzh4eC91cGF0Y2guYwppbmRleCA5OWJkZjUzLi5lY2NmZjY0IDEwMDY0NAotLS0gYS9jcHUvbXBjOHh4L3VwYXRjaC5jCisrKyBiL2NwdS9tcGM4eHgvdXBhdGNoLmMKQEAgLTMzLDggKzMzLDggQEAKICNlbmRpZgogCiAJLyoKLSAgICAgICAgICogRW5hYmxlIERQUkFNIG1pY3JvY29kZSB0byBleGVjdXRlIGZyb20gdGhlIGZpcnN0IDUxMiBieXRlcwotICAgICAgICAgKiBhbmQgYSAyNTYgYnl0ZSBleHRlbnNpb24gb2YgRFBSQU0uCisJICogRW5hYmxlIERQUkFNIG1pY3JvY29kZSB0byBleGVjdXRlIGZyb20gdGhlIGZpcnN0IDUxMiBieXRlcworCSAqIGFuZCBhIDI1NiBieXRlIGV4dGVuc2lvbiBvZiBEUFJBTS4KIAkgKi8KIAlpbW1yLT5pbV9jcG0uY3BfcmNjciB8PSAweDAwMDE7CiB9CmRpZmYgLS1naXQgYS9jcHUvbXBjOHh4L3ZpZGVvLmMgYi9jcHUvbXBjOHh4L3ZpZGVvLmMKaW5kZXggOWRiNjllMS4uNDBlNjVkMyAxMDA2NDQKLS0tIGEvY3B1L21wYzh4eC92aWRlby5jCisrKyBiL2NwdS9tcGM4eHgvdmlkZW8uYwpAQCAtODU1LDEzICs4NTUsMTMgQEAKIAlkZWJ1ZyAoIltWSURFTyBDVFJMXSBCbGFua2luZyB0aGUgc2NyZWVuLi4uXG4iKTsKIAl2aWRlb19maWxsIChWSURFT19CR19DT0wpOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIFR1cm5zIG9uIEFnZ3Jlc3NpdmUgTW9kZS4gTm9ybWFsbHksIHR1cm5pbmcgb24gdGhlIGNhY2hlcwotICAgICAgICAgKiB3aWxsIGNhdXNlIHRoZSBzY3JlZW4gdG8gZmxpY2tlciB3aGVuIHRoZSBjYWNoZXMgdHJ5IHRvCi0gICAgICAgICAqIGZpbGwuIFRoaXMgZ2l2ZXMgdGhlIEZJRk8ncyBmb3IgdGhlIFZpZGVvIENvbnRyb2xsZXIKLSAgICAgICAgICogaGlnaGVyIHByaW9yaXR5IGFuZCBwcmV2ZW50cyBmbGlja2VyaW5nIGJlY2F1c2Ugb2YKLSAgICAgICAgICogdW5kZXJydW4uIFRoaXMgbWF5IHN0aWxsIGJlIGFuIGlzc3VlIHdoZW4gdXNpbmcgRkxBU0gsCi0gICAgICAgICAqIHNpbmNlIGFjY2Vzc2luZyBkYXRhIGZyb20gRmxhc2ggaXMgc28gc2xvdy4KKwkvKgorCSAqIFR1cm5zIG9uIEFnZ3Jlc3NpdmUgTW9kZS4gTm9ybWFsbHksIHR1cm5pbmcgb24gdGhlIGNhY2hlcworCSAqIHdpbGwgY2F1c2UgdGhlIHNjcmVlbiB0byBmbGlja2VyIHdoZW4gdGhlIGNhY2hlcyB0cnkgdG8KKwkgKiBmaWxsLiBUaGlzIGdpdmVzIHRoZSBGSUZPJ3MgZm9yIHRoZSBWaWRlbyBDb250cm9sbGVyCisJICogaGlnaGVyIHByaW9yaXR5IGFuZCBwcmV2ZW50cyBmbGlja2VyaW5nIGJlY2F1c2Ugb2YKKwkgKiB1bmRlcnJ1bi4gVGhpcyBtYXkgc3RpbGwgYmUgYW4gaXNzdWUgd2hlbiB1c2luZyBGTEFTSCwKKwkgKiBzaW5jZSBhY2Nlc3NpbmcgZGF0YSBmcm9tIEZsYXNoIGlzIHNvIHNsb3cuCiAJICovCiAJZGVidWcgKCJbVklERU8gQ1RSTF0gVHVybmluZyBvbiBhZ2dyZXNzaXZlIG1vZGUuLi5cbiIpOwogCWltbWFwLT5pbV9zaXVfY29uZi5zY19zZGNyID0gMHg0MDsKQEAgLTEyNTIsNiArMTI1Miw0IEBACiAJcmV0dXJuIChhZGRyKTsKIH0KIAotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC80MDVncF9lbmV0LmMgYi9jcHUvcHBjNHh4LzQwNWdwX2VuZXQuYwppbmRleCBiN2IwM2VkLi45NjM5YzkyIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4LzQwNWdwX2VuZXQuYworKysgYi9jcHUvcHBjNHh4LzQwNWdwX2VuZXQuYwpAQCAtMjE4LDEwICsyMTgsMTAgQEAKIAkvKiBBUy5IQVJOT0lTCiAJICogV2Ugc2hvdWxkIGhhdmUgOgogCSAqIHBhY2tldEhhbmRsZWQgPD0gIHBhY2tldFJlY2VpdmVkIDw9IHBhY2tldEhhbmRsZWQrUEtUQlVGU1JYCi0gICAgICAgICAqIEluIHRoZSBtb3N0IGNhc2VzIHBhY2tldEhhbmRsZWQgPSBwYWNrZXRSZWNlaXZlZCwgYnV0IGl0Ci0gICAgICAgICAqIGlzIHBvc3NpYmxlIHRoYXQgbmV3IHBhY2tldHMgKHdpdGhvdXQgcmVsYXRpb25zaGlwIHdpdGgKLSAgICAgICAgICogY3VycmVudCB0cmFuc2ZlcikgaGF2ZSBnb3QgdGhlIHRpbWUgdG8gYXJyaXZlZCBiZWZvcmUKLSAgICAgICAgICogbmV0bG9vcCBjYWxscyBldGhfaGFsdAorCSAqIEluIHRoZSBtb3N0IGNhc2VzIHBhY2tldEhhbmRsZWQgPSBwYWNrZXRSZWNlaXZlZCwgYnV0IGl0CisJICogaXMgcG9zc2libGUgdGhhdCBuZXcgcGFja2V0cyAod2l0aG91dCByZWxhdGlvbnNoaXAgd2l0aAorCSAqIGN1cnJlbnQgdHJhbnNmZXIpIGhhdmUgZ290IHRoZSB0aW1lIHRvIGFycml2ZWQgYmVmb3JlCisJICogbmV0bG9vcCBjYWxscyBldGhfaGFsdAogCSAqLwogCXByaW50ZiAoIkFib3V0IHByZWNlZWRpbmcgdHJhbnNmZXI6XG4iCiAJCSItIFNlbnQgcGFja2V0IG51bWJlciAlZFxuIgpAQCAtMjUxLDggKzI1MSw4IEBACiAJdHhfdV9pbmRleCA9IDA7CQkJLyogVHJhbnNtaXQgVXNlciBRdWV1ZSBJbmRleCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfNDQwKQotICAgICAgICAvKiBzZXQgUk1JSSBtb2RlICovCi0gICAgICAgIG91dDMyIChaTUlJX0ZFUiwgWk1JSV9STUlJIHwgWk1JSV9NREkwKTsKKwkvKiBzZXQgUk1JSSBtb2RlICovCisJb3V0MzIgKFpNSUlfRkVSLCBaTUlJX1JNSUkgfCBaTUlJX01ESTApOwogI2VuZGlmIC8qIENPTkZJR180NDAgKi8KIAogCS8qIEVNQUMgUkVTRVQgKi8KQEAgLTQyNiw4ICs0MjYsOCBAQAogCS8qIHNldCByZWNlaXZlICBsb3cvaGlnaCB3YXRlciBtYXJrIHJlZ2lzdGVyICovCiAjaWYgZGVmaW5lZChDT05GSUdfNDQwKQogCS8qIDQ0MEdQIGhhcyBhIDY0IGJ5dGUgYnVyc3QgbGVuZ3RoICovCi0gICAgICAgIG91dDMyIChFTUFDX1JYX0hJX0xPX1dNQVJLLCAweDgwMDA5MDAwKTsKLSAgICAgICAgb3V0MzIgKEVNQUNfVFhNMSwgICAgICAgICAgIDB4Zjg2NDAwMDApOworCW91dDMyIChFTUFDX1JYX0hJX0xPX1dNQVJLLCAweDgwMDA5MDAwKTsKKwlvdXQzMiAoRU1BQ19UWE0xLCAgICAgICAgICAgMHhmODY0MDAwMCk7CiAjZWxzZSAvKiBDT05GSUdfNDQwICovCiAJLyogNDA1cyBoYXZlIGEgMTYgYnl0ZSBidXJzdCBsZW5ndGggKi8KIAlvdXQzMiAoRU1BQ19SWF9ISV9MT19XTUFSSywgMHgwZjAwMjAwMCk7CkBAIC01MzAsOCArNTMwLDggQEAKIAkJLyogbG9vcCB1bnRpbCBlaXRoZXIgVElOVCB0dXJucyBvbiBvciAzIHNlY29uZHMgZWxhcHNlICovCiAJCWlmICgodGVtcF90eG0wICYgRU1BQ19UWE0wX0dOUDApICE9IDApIHsKIAkJCS8qIHRyYW5zbWl0IGlzIGRvbmUsIHNvIG5vdyBjaGVjayBmb3IgZXJyb3JzCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBJZiB0aGVyZSBpcyBhbiBlcnJvciwgYW4gaW50ZXJydXB0IHNob3VsZAotICAgICAgICAgICAgICAgICAgICAgICAgICogaGFwcGVuIHdoZW4gd2UgcmV0dXJuCisJCQkgKiBJZiB0aGVyZSBpcyBhbiBlcnJvciwgYW4gaW50ZXJydXB0IHNob3VsZAorCQkJICogaGFwcGVuIHdoZW4gd2UgcmV0dXJuCiAJCQkgKi8KIAkJCXRpbWVfbm93ID0gZ2V0X3RpbWVyICgwKTsKIAkJCWlmICgodGltZV9ub3cgLSB0aW1lX3N0YXJ0KSA+IDMwMDApIHsKQEAgLTU2OCwxNiArNTY4LDE2IEBACiAJCW15X3VpYzFtc3IgPSBtZmRjciAodWljMW1zcik7CiAKIAkJaWYgKCEobXlfdWljMG1zciAmIFVJQ19NUkUpCi0gICAgICAgICAgICAgICAgICAgICYmICEobXlfdWljMW1zciAmIChVSUNfRVRIMCB8IFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IGZvciB1cyAqLworCQkgICAgJiYgIShteV91aWMxbXNyICYgKFVJQ19FVEgwIHwgVUlDX01TIHwgVUlDX01UREUgfCBVSUNfTVJERSkpKSB7CisJCQkvKiBub3QgZm9yIHVzICovCiAJCQlyZXR1cm4gKHJjKTsKIAkJfQogCiAJCS8qIGdldCBhbmQgY2xlYXIgY29udHJvbGxlciBzdGF0dXMgaW50ZXJydXB0cyAqLwogCQkvKiBsb29rIGF0IE1hbCBhbmQgRU1BQyBpbnRlcnJ1cHRzICovCiAJCWlmICgobXlfdWljMG1zciAmIFVJQ19NUkUpCi0gICAgICAgICAgICAgICAgICAgIHx8IChteV91aWMxbXNyICYgKFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogd2UgaGF2ZSBhIE1BTCBpbnRlcnJ1cHQgKi8KKwkJICAgIHx8IChteV91aWMxbXNyICYgKFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpKSkgeworCQkJLyogd2UgaGF2ZSBhIE1BTCBpbnRlcnJ1cHQgKi8KIAkJCW1hbF9pc3IgPSBtZmRjciAobWFsZXNyKTsKIAkJCS8qIGxvb2sgZm9yIG1hbCBlcnJvciAqLwogCQkJaWYgKG15X3VpYzFtc3IgJiAoVUlDX01TIHwgVUlDX01UREUgfCBVSUNfTVJERSkpIHsKQEAgLTU5NSw3ICs1OTUsNyBAQAogCQkJfQogCQl9CiAJCWlmICgoZW1hY19pZXIgJiBlbWFjX2lzcikKLSAgICAgICAgICAgICAgICAgICAgfHwgKG15X3VpYzFtc3IgJiAoVUlDX01TIHwgVUlDX01UREUgfCBVSUNfTVJERSkpKSB7CisJCSAgICB8fCAobXlfdWljMW1zciAmIChVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKSkpIHsKIAkJCW10ZGNyICh1aWMwc3IsIFVJQ19NUkUpOyAvKiBDbGVhciAqLwogCQkJbXRkY3IgKHVpYzFzciwgVUlDX0VUSDAgfCBVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKTsgLyogQ2xlYXIgKi8KIAkJCXJldHVybiAocmMpOwkJLyogd2UgaGFkIGVycm9ycyBzbyBnZXQgb3V0ICovCkBAIC02MTQsOCArNjE0LDggQEAKIAkJCQlyYyA9IDA7CiAJCQl9CiAJCX0KLSAgICAgICAgICAgICAgICBtdGRjciAodWljMHNyLCBVSUNfTVJFKTsgLyogQ2xlYXIgKi8KLSAgICAgICAgICAgICAgICBtdGRjciAodWljMXNyLCBVSUNfRVRIMCB8IFVJQ19NUyB8IFVJQ19NVERFIHwgVUlDX01SREUpOyAvKiBDbGVhciAqLworCQltdGRjciAodWljMHNyLCBVSUNfTVJFKTsgLyogQ2xlYXIgKi8KKwkJbXRkY3IgKHVpYzFzciwgVUlDX0VUSDAgfCBVSUNfTVMgfCBVSUNfTVRERSB8IFVJQ19NUkRFKTsgLyogQ2xlYXIgKi8KIAl9IHdoaWxlIChzZXJ2aWNlZCk7CiAKIAlyZXR1cm4gKHJjKTsKQEAgLTg2Niw0MiArODY2LDQyIEBACiAjaWYgZGVmaW5lZChDT05GSUdfTkVUX01VTFRJKQogaW50IHBwY180eHhfZXRoX2luaXRpYWxpemUoYmRfdCAqYmlzKQogewotICAgICAgICBzdHJ1Y3QgZXRoX2RldmljZSAqZGV2OwotICAgICAgICBpbnQgICAgICAgICAgICAgICAgZXRoX251bSA9IDA7CisJc3RydWN0IGV0aF9kZXZpY2UgKmRldjsKKwlpbnQgICAgICAgICAgICAgICAgZXRoX251bSA9IDA7CiAKLSAgICAgICAgZGV2ID0gbWFsbG9jIChzaXplb2YgKmRldik7Ci0gICAgICAgIGlmIChkZXYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHByaW50ZihfX0ZVTkNUSU9OX18gIjogQ2Fubm90IGFsbG9jYXRlIGV0aF9kZXZpY2VcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICB9CisJZGV2ID0gbWFsbG9jIChzaXplb2YgKmRldik7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXByaW50ZihfX0ZVTkNUSU9OX18gIjogQ2Fubm90IGFsbG9jYXRlIGV0aF9kZXZpY2VcbiIpOworCQlyZXR1cm4gKC0xKTsKKwl9CiAKLSAgICAgICAgc3ByaW50ZihkZXYtPm5hbWUsICJwcGNfNHh4X2V0aCVkIiwgZXRoX251bSk7Ci0gICAgICAgIGRldi0+cHJpdiA9ICh2b2lkICopIGV0aF9udW07Ci0gICAgICAgIGRldi0+aW5pdCA9IHBwY180eHhfZXRoX2luaXQ7Ci0gICAgICAgIGRldi0+aGFsdCA9IHBwY180eHhfZXRoX2hhbHQ7Ci0gICAgICAgIGRldi0+c2VuZCA9IHBwY180eHhfZXRoX3NlbmQ7Ci0gICAgICAgIGRldi0+cmVjdiA9IHBwY180eHhfZXRoX3J4OworCXNwcmludGYoZGV2LT5uYW1lLCAicHBjXzR4eF9ldGglZCIsIGV0aF9udW0pOworCWRldi0+cHJpdiA9ICh2b2lkICopIGV0aF9udW07CisJZGV2LT5pbml0ID0gcHBjXzR4eF9ldGhfaW5pdDsKKwlkZXYtPmhhbHQgPSBwcGNfNHh4X2V0aF9oYWx0OworCWRldi0+c2VuZCA9IHBwY180eHhfZXRoX3NlbmQ7CisJZGV2LT5yZWN2ID0gcHBjXzR4eF9ldGhfcng7CiAKLSAgICAgICAgZXRoX3JlZ2lzdGVyIChkZXYpOworCWV0aF9yZWdpc3RlciAoZGV2KTsKIH0KICNlbHNlIC8qICFkZWZpbmVkKENPTkZJR19ORVRfTVVMVEkpICovCiB2b2lkIGV0aF9oYWx0ICh2b2lkKQogewotICAgICAgICBwcGNfNHh4X2V0aF9oYWx0KE5VTEwpOworCXBwY180eHhfZXRoX2hhbHQoTlVMTCk7CiB9CiAKIGludCBldGhfaW5pdCAoYmRfdCAqYmlzKQogewotICAgICAgICByZXR1cm4gKHBwY180eHhfZXRoX2luaXQoTlVMTCwgYmlzKSk7CisJcmV0dXJuIChwcGNfNHh4X2V0aF9pbml0KE5VTEwsIGJpcykpOwogfQogaW50IGV0aF9zZW5kKHZvbGF0aWxlIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCkKIHsKLSAgICAgICAgcmV0dXJuIChwcGNfNHh4X2V0aF9zZW5kKE5VTEwsIHBhY2tldCwgbGVuZ3RoKSk7CisJcmV0dXJuIChwcGNfNHh4X2V0aF9zZW5kKE5VTEwsIHBhY2tldCwgbGVuZ3RoKSk7CiB9CiAKIGludCBldGhfcngodm9pZCkKIHsKLSAgICAgICAgcmV0dXJuIChwcGNfNHh4X2V0aF9yeChOVUxMKSk7CisJcmV0dXJuIChwcGNfNHh4X2V0aF9yeChOVUxMKSk7CiB9CiAjZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX05FVF9NVUxUSSkgKi8KIApkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC80MDVncF9wY2kuYyBiL2NwdS9wcGM0eHgvNDA1Z3BfcGNpLmMKaW5kZXggODIxNDJhMi4uNGI1NDcyYiAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC80MDVncF9wY2kuYworKysgYi9jcHUvcHBjNHh4LzQwNWdwX3BjaS5jCkBAIC03MSw3ICs3MSw2IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KICNpZiAhZGVmaW5lZChDT05GSUdfNDQwKQogI2luY2x1ZGUgPDQwNWdwX3BjaS5oPgogI2VuZGlmCkBAIC0xOTUsNyArMTk0LDcgQEAKIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCSAqIFBNTTIgaXMgbm90IHVzZWQuICBJbml0aWFsaXplIHRoZW0gdG8gemVyby4KIAkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlvdXQzMnIoUE1NMk1BLCAgICAocG1tbWFbMl0mfjB4MSkpOyAKKwlvdXQzMnIoUE1NMk1BLCAgICAocG1tbWFbMl0mfjB4MSkpOwogCW91dDMycihQTU0yTEEsICAgIHBtbWxhWzJdKTsKIAlvdXQzMnIoUE1NMlBDSUxBLCBwbW1wY2lsYVsyXSk7CiAJb3V0MzJyKFBNTTJQQ0lIQSwgcG1tcGNpaGFbMl0pOwpAQCAtMzAzLDcgKzMwMiw3IEBACiAJCQkgICAgc3RydWN0IHBjaV9jb25maWdfdGFibGUgKmVudHJ5KQogewogI2lmZGVmIERFQlVHCi0gICAgICAgIHByaW50ZigiNDA1Z3Bfc2V0dXBfYnJpZGdlXG4iKTsKKwlwcmludGYoIjQwNWdwX3NldHVwX2JyaWRnZVxuIik7CiAjZW5kaWYKIH0KIApAQCAtNDA5LDkgKzQwOCw5IEBACiAJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgc3RyYXAgPSBtZmRjcihjcGMwX3N0cnAxKTsKICAgICBpZiggKHN0cmFwICYgMHgwMDA0MDAwMCkgPT0gMCApewotICAgICAgICBwcmludGYoIlBDSTogQ1BDMF9TVFJQMVtQSVNFXSBub3Qgc2V0LlxuIik7Ci0gICAgICAgIHByaW50ZigiUENJOiBDb25maWd1cmF0aW9uIGFib3J0ZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuOworCXByaW50ZigiUENJOiBDUEMwX1NUUlAxW1BJU0VdIG5vdCBzZXQuXG4iKTsKKwlwcmludGYoIlBDSTogQ29uZmlndXJhdGlvbiBhYm9ydGVkLlxuIik7CisJcmV0dXJuOwogICAgIH0KIAogCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC00MzgsOSArNDM3LDkgQEAKICNpZiBkZWZpbmVkKENGR19QQ0lfUFJFX0lOSVQpCiAgICAgLyogTGV0IGJvYXJkIGNoYW5nZS9tb2RpZnkgaG9zZSAmIGRvIGluaXRpYWwgY2hlY2tzICovCiAgICAgaWYoIHBjaV9wcmVfaW5pdCAoaG9zZSkgPT0gMCApewotICAgICAgICBwcmludGYoIlBDSTogQm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7Ci0gICAgICAgIHByaW50ZigiUENJOiBDb25maWd1cmF0aW9uIGFib3J0ZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuOworCXByaW50ZigiUENJOiBCb2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwlwcmludGYoIlBDSTogQ29uZmlndXJhdGlvbiBhYm9ydGVkLlxuIik7CisJcmV0dXJuOwogICAgIH0KICNlbmRpZgogCkBAIC00ODYsMTAgKzQ4NSwxMCBAQAogCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgIGlmKCBpc19wY2lfaG9zdChob3NlKSApewogI2lmZGVmIENPTkZJR19QQ0lfU0NBTl9TSE9XCi0gICAgICAgIHByaW50ZigiUENJOiAgIEJ1cyBEZXYgVmVuSWQgRGV2SWQgQ2xhc3MgSW50XG4iKTsKKwlwcmludGYoIlBDSTogICBCdXMgRGV2IFZlbklkIERldklkIENsYXNzIEludFxuIik7CiAjZW5kaWYKLSAgICAgICAgb3V0MTZyKCBQQ0lYMF9DTUQsIGluMTZyKCBQQ0lYMF9DTUQgKSB8IFBDSV9DT01NQU5EX01BU1RFUik7Ci0gICAgICAgIGhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOworCW91dDE2ciggUENJWDBfQ01ELCBpbjE2ciggUENJWDBfQ01EICkgfCBQQ0lfQ09NTUFORF9NQVNURVIpOworCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9iZWRidWdfNDA1LmMgYi9jcHUvcHBjNHh4L2JlZGJ1Z180MDUuYwppbmRleCBlYWJjNTgzLi4yMzc1MmYzIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L2JlZGJ1Z180MDUuYworKysgYi9jcHUvcHBjNHh4L2JlZGJ1Z180MDUuYwpAQCAtNSw4ICs1LDcgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KLQotI2luY2x1ZGUgPGNtZF9iZWRidWcuaD4KKyNpbmNsdWRlIDxiZWRidWcvdHlwZS5oPgogI2luY2x1ZGUgPGJlZGJ1Zy9iZWRidWcuaD4KICNpbmNsdWRlIDxiZWRidWcvcmVncy5oPgogI2luY2x1ZGUgPGJlZGJ1Zy9wcGMuaD4KZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvY3B1LmMgYi9jcHUvcHBjNHh4L2NwdS5jCmluZGV4IDA5NWEwYWEuLjFkN2MwYzkgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvY3B1LmMKKysrIGIvY3B1L3BwYzR4eC9jcHUuYwpAQCAtMTY1LDIwICsxNjUsMjAgQEAKIAlwdXRzKCJJQk0gUG93ZXJQQyA0NDAgUmV2LiAiKTsKIAlzd2l0Y2gocHZyKQogCXsKLSAgICAgICAgY2FzZSBQVlJfNDQwR1BfUkI6CisJY2FzZSBQVlJfNDQwR1BfUkI6CiAJCXB1dGMoJ0InKTsKLSAgICAgICAgLyogU2VlIGVycmF0YSAxLjEyOiBDSElQXzQgKi8KLSAgICAgICAgaWYoICAgKCBtZmRjcihjcGMwX3N5czApICE9IG1mZGNyKGNwYzBfc3RycDApICkKLSAgICAgICAgICAgIHx8KCBtZmRjcihjcGMwX3N5czEpICE9IG1mZGNyKGNwYzBfc3RycDEpICkgKXsKLSAgICAgICAgICAgIHB1dHMoIlxuXHQgQ1BDMF9TWVN4IERDUnMgY29ycnVwdGVkLiBSZXNldHRpbmcgY2hpcCAuLi5cbiIpOwotICAgICAgICAgICAgdWRlbGF5KCAxMDAwICogMTAwMCApOyAvKiBHaXZlIHRpbWUgZm9yIHNlcmlhbCBidWYgdG8gY2xlYXIgKi8KLSAgICAgICAgICAgIGRvX2NoaXBfcmVzZXQoIG1mZGNyKGNwYzBfc3RycDApLCBtZmRjcihjcGMwX3N0cnAxKSApOwotICAgICAgICB9CisJLyogU2VlIGVycmF0YSAxLjEyOiBDSElQXzQgKi8KKwlpZiggICAoIG1mZGNyKGNwYzBfc3lzMCkgIT0gbWZkY3IoY3BjMF9zdHJwMCkgKQorCSAgICB8fCggbWZkY3IoY3BjMF9zeXMxKSAhPSBtZmRjcihjcGMwX3N0cnAxKSApICl7CisJICAgIHB1dHMoIlxuXHQgQ1BDMF9TWVN4IERDUnMgY29ycnVwdGVkLiBSZXNldHRpbmcgY2hpcCAuLi5cbiIpOworCSAgICB1ZGVsYXkoIDEwMDAgKiAxMDAwICk7IC8qIEdpdmUgdGltZSBmb3Igc2VyaWFsIGJ1ZiB0byBjbGVhciAqLworCSAgICBkb19jaGlwX3Jlc2V0KCBtZmRjcihjcGMwX3N0cnAwKSwgbWZkY3IoY3BjMF9zdHJwMSkgKTsKKwl9CiAJCWJyZWFrOwotICAgICAgICBjYXNlIFBWUl80NDBHUF9SQzoKKwljYXNlIFBWUl80NDBHUF9SQzoKIAkJcHV0YygnQycpOwogCQlicmVhazsKLSAgICAgICAgZGVmYXVsdDoKKwlkZWZhdWx0OgogCQlwcmludGYoIlVOS05PV04gKFBWUj0lMDh4KSIsIHB2cik7CiAJCWJyZWFrOwogCX0KQEAgLTE5MiwxMSArMTkyLDExIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBiZF90ICpiZCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCitpbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotICAgICAgICAvKgotICAgICAgICAgKiBJbml0aWF0ZSBzeXN0ZW0gcmVzZXQgaW4gZGVidWcgY29udHJvbCByZWdpc3RlciBEQkNSCi0gICAgICAgICAqLworCS8qCisJICogSW5pdGlhdGUgc3lzdGVtIHJlc2V0IGluIGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgREJDUgorCSAqLwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJsaXMgICAzLCAweDMwMDAiIDo6OiAicjMiKTsKICNpZiBkZWZpbmVkKENPTkZJR180NDApCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIm10c3ByIDB4MTM0LCAzIik7CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L2kyYy5jIGIvY3B1L3BwYzR4eC9pMmMuYwppbmRleCA0YmYwYmJkLi4wOTlkMzBhIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L2kyYy5jCisrKyBiL2NwdS9wcGM0eHgvaTJjLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZyZXFPUEI7CiAJaW50IHZhbCwgZGl2aXNvcjsKIAotI2lmZGVmIENGR19JMkNfSU5JVF9CT0FSRCAgICAgICAgCisjaWZkZWYgQ0ZHX0kyQ19JTklUX0JPQVJECiAJLyogY2FsbCBib2FyZCBzcGVjaWZpYyBpMmMgYnVzIHJlc2V0IHJvdXRpbmUgYmVmb3JlIGFjY2Vzc2luZyB0aGUgICAqLwogCS8qIGVudmlyb25tZW50LCB3aGljaCBtaWdodCBiZSBpbiBhIGNoaXAgb24gdGhhdCBidXMuIEZvciBkZXRhaWxzICAgKi8KIAkvKiBhYm91dCB0aGlzIHByb2JsZW0gc2VlIGRvYy9JMkNfRWRnZV9Db25kaXRpb25zLiAgICAgICAgICAgICAgICAgICovCkBAIC0xMzQsMTkgKzEzNCwxOSBAQAogCV9fYXNtX18gdm9sYXRpbGUgKCJlaWVpbyIpOwogCiAKLSAgICAgICAgdmFsID0gaW44KElJQ19NRENOVEwpOwotICAgICAgICBfX2FzbV9fIHZvbGF0aWxlICgiZWllaW8iKTsKKwl2YWwgPSBpbjgoSUlDX01EQ05UTCk7CisJX19hc21fXyB2b2xhdGlsZSAoImVpZWlvIik7CiAKLSAgICAgICAgLyogSWdub3JlIEdlbmVyYWwgQ2FsbCwgc2xhdmUgdHJhbnNmZXJzIGFyZSBpZ25vcmVkLAotICAgICAgICAgICBkaXNhYmxlIGludGVycnVwdHMsIGV4aXQgdW5rbm93biBidXMgc3RhdGUsIGVuYWJsZSBob2xkCi0gICAgICAgICAgIFNDTAotICAgICAgICAgICAxMDBrSHogbm9ybWFseSBvciBGYXN0TW9kZSBmb3IgNDAwa0h6IGFuZCBhYm92ZQotICAgICAgICAqLworCS8qIElnbm9yZSBHZW5lcmFsIENhbGwsIHNsYXZlIHRyYW5zZmVycyBhcmUgaWdub3JlZCwKKwkgICBkaXNhYmxlIGludGVycnVwdHMsIGV4aXQgdW5rbm93biBidXMgc3RhdGUsIGVuYWJsZSBob2xkCisJICAgU0NMCisJICAgMTAwa0h6IG5vcm1hbHkgb3IgRmFzdE1vZGUgZm9yIDQwMGtIeiBhbmQgYWJvdmUKKwkqLwogCi0gICAgICAgIHZhbCB8PSBJSUNfTURDTlRMX0VVQlN8SUlDX01EQ05UTF9IU0NMOwotICAgICAgICBpZiggc3BlZWQgPj0gNDAwMDAwICl7Ci0gICAgICAgICAgICAgICAgdmFsIHw9IElJQ19NRENOVExfRlNNOwotICAgICAgICB9CisJdmFsIHw9IElJQ19NRENOVExfRVVCU3xJSUNfTURDTlRMX0hTQ0w7CisJaWYoIHNwZWVkID49IDQwMDAwMCApeworCQl2YWwgfD0gSUlDX01EQ05UTF9GU007CisJfQogCW91dDggKElJQ19NRENOVEwsIHZhbCk7CiAKIAkvKiBjbGVhciBjb250cm9sIHJlZyAqLwpAQCAtMTgyLDE1MyArMTgyLDE1MyBAQAogKi8KIHN0YXRpYwogaW50IGkyY190cmFuc2Zlcih1bnNpZ25lZCBjaGFyIGNtZF90eXBlLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoaXAsCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkcltdLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHJfbGVuLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFbXSwKKwkJIHVuc2lnbmVkIGNoYXIgY2hpcCwKKwkJIHVuc2lnbmVkIGNoYXIgYWRkcltdLAorCQkgdW5zaWduZWQgY2hhciBhZGRyX2xlbiwKKwkJIHVuc2lnbmVkIGNoYXIgZGF0YVtdLAogCQkgdW5zaWduZWQgc2hvcnQgZGF0YV9sZW4gKQogewotICAgICAgICB1bnNpZ25lZCBjaGFyKiBwdHI7Ci0gICAgICAgIGludCByZWFkaW5nOwotICAgICAgICBpbnQgdHJhbixjbnQ7Ci0gICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgIGludCBzdGF0dXM7Ci0gICAgICAgIGludCBpOwotICAgICAgICB1Y2hhciBjcmVnOworCXVuc2lnbmVkIGNoYXIqIHB0cjsKKwlpbnQgcmVhZGluZzsKKwlpbnQgdHJhbixjbnQ7CisJaW50IHJlc3VsdDsKKwlpbnQgc3RhdHVzOworCWludCBpOworCXVjaGFyIGNyZWc7CiAKLSAgICAgICAgaWYoIGRhdGEgPT0gMCB8fCBkYXRhX2xlbiA9PSAwICl7Ci0gICAgICAgICAgICAgICAgLypEb24ndCBzdXBwb3J0IGRhdGEgdHJhbnNmZXIgb2Ygbm8gbGVuZ3RoIG9yIHRvIGFkZHJlc3MgMCovCi0gICAgICAgICAgICAgICAgcHJpbnRmKCAiaTJjX3RyYW5zZmVyOiBiYWQgY2FsbFxuIiApOwotICAgICAgICAgICAgICAgIHJldHVybiBJSUNfTk9LOwotICAgICAgICB9Ci0gICAgICAgIGlmKCBhZGRyICYmIGFkZHJfbGVuICl7Ci0gICAgICAgICAgICAgICAgcHRyID0gYWRkcjsKLSAgICAgICAgICAgICAgICBjbnQgPSBhZGRyX2xlbjsKLSAgICAgICAgICAgICAgICByZWFkaW5nID0gMDsKLSAgICAgICAgfWVsc2V7Ci0gICAgICAgICAgICAgICAgcHRyID0gZGF0YTsKLSAgICAgICAgICAgICAgICBjbnQgPSBkYXRhX2xlbjsKLSAgICAgICAgICAgICAgICByZWFkaW5nID0gY21kX3R5cGU7Ci0gICAgICAgIH0KKwlpZiggZGF0YSA9PSAwIHx8IGRhdGFfbGVuID09IDAgKXsKKwkJLypEb24ndCBzdXBwb3J0IGRhdGEgdHJhbnNmZXIgb2Ygbm8gbGVuZ3RoIG9yIHRvIGFkZHJlc3MgMCovCisJCXByaW50ZiggImkyY190cmFuc2ZlcjogYmFkIGNhbGxcbiIgKTsKKwkJcmV0dXJuIElJQ19OT0s7CisJfQorCWlmKCBhZGRyICYmIGFkZHJfbGVuICl7CisJCXB0ciA9IGFkZHI7CisJCWNudCA9IGFkZHJfbGVuOworCQlyZWFkaW5nID0gMDsKKwl9ZWxzZXsKKwkJcHRyID0gZGF0YTsKKwkJY250ID0gZGF0YV9sZW47CisJCXJlYWRpbmcgPSBjbWRfdHlwZTsKKwl9CiAKLSAgICAgICAgLypDbGVhciBTdG9wIENvbXBsZXRlIEJpdCovCi0gICAgICAgIG91dDgoSUlDX1NUUyxJSUNfU1RTX1NDTVApOwotICAgICAgICAvKiBDaGVjayBpbml0ICovCi0gICAgICAgIGk9MTA7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAvKiBHZXQgc3RhdHVzICovCi0gICAgICAgICAgICAgICAgc3RhdHVzID0gaW44KElJQ19TVFMpOwotICAgICAgICAgICAgICAgIF9fYXNtX18gdm9sYXRpbGUoImVpZWlvIik7Ci0gICAgICAgICAgICAgICAgaS0tOwotICAgICAgICB9IHdoaWxlICgoc3RhdHVzICYgSUlDX1NUU19QVCkgJiYgKGk+MCkpOworCS8qQ2xlYXIgU3RvcCBDb21wbGV0ZSBCaXQqLworCW91dDgoSUlDX1NUUyxJSUNfU1RTX1NDTVApOworCS8qIENoZWNrIGluaXQgKi8KKwlpPTEwOworCWRvIHsKKwkJLyogR2V0IHN0YXR1cyAqLworCQlzdGF0dXMgPSBpbjgoSUlDX1NUUyk7CisJCV9fYXNtX18gdm9sYXRpbGUoImVpZWlvIik7CisJCWktLTsKKwl9IHdoaWxlICgoc3RhdHVzICYgSUlDX1NUU19QVCkgJiYgKGk+MCkpOwogCi0gICAgICAgIGlmIChzdGF0dXMgJiBJSUNfU1RTX1BUKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gSUlDX05PS19UT1VUOwotICAgICAgICAgICAgICAgIHJldHVybihyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIC8qZmx1c2ggdGhlIE1hc3Rlci9TbGF2ZSBEYXRhYnVmZmVycyovCi0gICAgICAgIG91dDgoSUlDX01EQ05UTCwgKChpbjgoSUlDX01EQ05UTCkpfElJQ19NRENOVExfRk1EQnxJSUNfTURDTlRMX0ZTREIpKTsKLSAgICAgICAgLypuZWVkIHRvIHdhaXQgNCBPUEIgY2xvY2tzPyBjb2RlIGJlbG93IHNob3VsZCB0YWtlIHRoYXQgbG9uZyovCisJaWYgKHN0YXR1cyAmIElJQ19TVFNfUFQpIHsKKwkJcmVzdWx0ID0gSUlDX05PS19UT1VUOworCQlyZXR1cm4ocmVzdWx0KTsKKwl9CisJLypmbHVzaCB0aGUgTWFzdGVyL1NsYXZlIERhdGFidWZmZXJzKi8KKwlvdXQ4KElJQ19NRENOVEwsICgoaW44KElJQ19NRENOVEwpKXxJSUNfTURDTlRMX0ZNREJ8SUlDX01EQ05UTF9GU0RCKSk7CisJLypuZWVkIHRvIHdhaXQgNCBPUEIgY2xvY2tzPyBjb2RlIGJlbG93IHNob3VsZCB0YWtlIHRoYXQgbG9uZyovCiAKLSAgICAgICAgLyogNy1iaXQgYWRyZXNzaW5nICovCi0gICAgICAgIG91dDgoSUlDX0hNQURSLDApOwotICAgICAgICBvdXQ4KElJQ19MTUFEUiwgY2hpcCk7Ci0gICAgICAgIF9fYXNtX18gdm9sYXRpbGUoImVpZWlvIik7CisJLyogNy1iaXQgYWRyZXNzaW5nICovCisJb3V0OChJSUNfSE1BRFIsMCk7CisJb3V0OChJSUNfTE1BRFIsIGNoaXApOworCV9fYXNtX18gdm9sYXRpbGUoImVpZWlvIik7CiAKLSAgICAgICAgdHJhbiA9IDA7Ci0gICAgICAgIHJlc3VsdCA9IElJQ19PSzsKLSAgICAgICAgY3JlZyA9IDA7CisJdHJhbiA9IDA7CisJcmVzdWx0ID0gSUlDX09LOworCWNyZWcgPSAwOwogCi0gICAgICAgIHdoaWxlICggdHJhbiAhPSBjbnQgJiYgKHJlc3VsdCA9PSBJSUNfT0spKSB7Ci0gICAgICAgICAgICAgICAgaW50ICBiYyxqOworCXdoaWxlICggdHJhbiAhPSBjbnQgJiYgKHJlc3VsdCA9PSBJSUNfT0spKSB7CisJCWludCAgYmMsajsKIAotICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgcmVnaXN0ZXIgPQotICAgICAgICAgICAgICAgICAgIE5vcm1hbCB0cmFuc2ZlciwgNy1iaXRzIGFkcmVzc2luZywgVHJhbnNmZXIgdXAgdG8gYmMgYnl0ZXMsIE5vcm1hbCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICBUcmFuc2ZlciBpcyBhIHNlcXVlbmNlIG9mIHRyYW5zZmVycwotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgY3JlZyB8PSBJSUNfQ05UTF9QVDsKLQotICAgICAgICAgICAgICAgIGJjID0gKGNudCAtIHRyYW4pID4gNCA/IDQgOgotICAgICAgICAgICAgICAgICAgICAgICAgY250IC0gdHJhbjsKLSAgICAgICAgICAgICAgICBjcmVnIHw9IChiYy0xKTw8NDsKLSAgICAgICAgICAgICAgICAvKiBpZiB0aGUgcmVhbCBjbWQgdHlwZSBpcyB3cml0ZSBjb250aW51ZSB0cmFucyovCi0gICAgICAgICAgICAgICAgaWYgKCAoIWNtZF90eXBlICYmIChwdHIgPT0gYWRkcikpIHx8ICgodHJhbitiYykgIT0gY250KSApCi0gICAgICAgICAgICAgICAgICAgICAgICBjcmVnIHw9IElJQ19DTlRMX0NIVDsKLQotICAgICAgICAgICAgICAgIGlmIChyZWFkaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgY3JlZyB8PSBJSUNfQ05UTF9SRUFEOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDsgajxiYzsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0OChJSUNfTURCVUYscHRyW3RyYW4ral0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXQ4KElJQ19DTlRMLCBjcmVnICk7Ci0gICAgICAgICAgICAgICAgX19hc21fXyB2b2xhdGlsZSgiZWllaW8iKTsKLQotICAgICAgICAgICAgICAgIC8qIFRyYW5zZmVyIGlzIGluIHByb2dyZXNzCi0gICAgICAgICAgICAgICAgICAgd2UgaGF2ZSB0byB3YWl0IGZvciB1cHRvIDUgYnl0ZXMgb2YgZGF0YQotICAgICAgICAgICAgICAgICAgIDEgYnl0ZSBjaGlwIGFkZHJlc3Mrci93IGJpdCB0aGVuIGJjIGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgb2YgZGF0YS4KLSAgICAgICAgICAgICAgICAgICB1ZGVsYXkoMTApIGlzIDEgYml0IHRpbWUgYXQgMTAwa2h6Ci0gICAgICAgICAgICAgICAgICAgRG91YmxlZCBmb3Igc2xvcC4gMjAgaXMgdG9vIHNtYWxsLgorCQkvKiBDb250cm9sIHJlZ2lzdGVyID0KKwkJICAgTm9ybWFsIHRyYW5zZmVyLCA3LWJpdHMgYWRyZXNzaW5nLCBUcmFuc2ZlciB1cCB0byBiYyBieXRlcywgTm9ybWFsIHN0YXJ0LAorCQkgICBUcmFuc2ZlciBpcyBhIHNlcXVlbmNlIG9mIHRyYW5zZmVycwogCQkqLwotICAgICAgICAgICAgICAgIGk9Mio1Kjg7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHN0YXR1cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gaW44KElJQ19TVFMpOwotICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyB2b2xhdGlsZSgiZWllaW8iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVkZWxheSAoMTApOwotICAgICAgICAgICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKChzdGF0dXMgJiBJSUNfU1RTX1BUKSAmJiAhKHN0YXR1cyAmIElJQ19TVFNfRVJSKQorCQljcmVnIHw9IElJQ19DTlRMX1BUOworCisJCWJjID0gKGNudCAtIHRyYW4pID4gNCA/IDQgOgorCQkJY250IC0gdHJhbjsKKwkJY3JlZyB8PSAoYmMtMSk8PDQ7CisJCS8qIGlmIHRoZSByZWFsIGNtZCB0eXBlIGlzIHdyaXRlIGNvbnRpbnVlIHRyYW5zKi8KKwkJaWYgKCAoIWNtZF90eXBlICYmIChwdHIgPT0gYWRkcikpIHx8ICgodHJhbitiYykgIT0gY250KSApCisJCQljcmVnIHw9IElJQ19DTlRMX0NIVDsKKworCQlpZiAocmVhZGluZykKKwkJCWNyZWcgfD0gSUlDX0NOVExfUkVBRDsKKwkJZWxzZSB7CisJCQlmb3Ioaj0wOyBqPGJjOyBqKyspIHsKKwkJCQkvKiBTZXQgYnVmZmVyICovCisJCQkJb3V0OChJSUNfTURCVUYscHRyW3RyYW4ral0pOworCQkJCV9fYXNtX18gdm9sYXRpbGUoImVpZWlvIik7CisJCQl9CisJCX0KKwkJb3V0OChJSUNfQ05UTCwgY3JlZyApOworCQlfX2FzbV9fIHZvbGF0aWxlKCJlaWVpbyIpOworCisJCS8qIFRyYW5zZmVyIGlzIGluIHByb2dyZXNzCisJCSAgIHdlIGhhdmUgdG8gd2FpdCBmb3IgdXB0byA1IGJ5dGVzIG9mIGRhdGEKKwkJICAgMSBieXRlIGNoaXAgYWRkcmVzcytyL3cgYml0IHRoZW4gYmMgYnl0ZXMKKwkJICAgb2YgZGF0YS4KKwkJICAgdWRlbGF5KDEwKSBpcyAxIGJpdCB0aW1lIGF0IDEwMGtoegorCQkgICBEb3VibGVkIGZvciBzbG9wLiAyMCBpcyB0b28gc21hbGwuCisJCSovCisJCWk9Mio1Kjg7CisJCWRvIHsKKwkJCS8qIEdldCBzdGF0dXMgKi8KKwkJCXN0YXR1cyA9IGluOChJSUNfU1RTKTsKKwkJCV9fYXNtX18gdm9sYXRpbGUoImVpZWlvIik7CisJCQl1ZGVsYXkgKDEwKTsKKwkJCWktLTsKKwkJfSB3aGlsZSAoKHN0YXR1cyAmIElJQ19TVFNfUFQpICYmICEoc3RhdHVzICYgSUlDX1NUU19FUlIpCiAJCQkgJiYgKGk+MCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIElJQ19TVFNfRVJSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBJSUNfTk9LOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gaW44IChJSUNfRVhUU1RTKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIExvc3QgYXJiaXRyYXRpb24/ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgSUlDX0VYVFNUU19MQSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gSUlDX05PS19MQTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluY29tcGxldGUgdHJhbnNmZXI/ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgSUlDX0VYVFNUU19JQ1QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IElJQ19OT0tfSUNUOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogVHJhbnNmZXIgYWJvcnRlZD8gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiBJSUNfRVhUU1RTX1hGUkEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IElJQ19OT0tfWEZSQTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdGF0dXMgJiBJSUNfU1RTX1BUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBJSUNfTk9LX1RPVVQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qIENvbW1hbmQgaXMgcmVhZGluZyA9PiBnZXQgYnVmZmVyICovCi0gICAgICAgICAgICAgICAgaWYgKChyZWFkaW5nKSAmJiAocmVzdWx0ID09IElJQ19PSykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFyZSB0aGVyZSBkYXRhIGluIGJ1ZmZlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIElJQ19TVFNfTURCUykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW4gaWYgd2UgaGF2ZSBkYXRhIHdlIGhhdmUgdG8gd2FpdCA0T1BCIGNsb2NrcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdCB0byBoaXQgdGhlIGZyb250IG9mIHRoZSBGSUZPLCBhZnRlciB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2UgY2FuIGp1c3QgcmVhZC4gV2Ugc2hvdWxkIGNoZWNrIFhGQ05UIGhlcmUgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIEZJRk8gaXMgZnVsbCB0aGVyZSBpcyBubyBuZWVkIHRvIHdhaXQuCisJCWlmIChzdGF0dXMgJiBJSUNfU1RTX0VSUikgeworCQkJcmVzdWx0ID0gSUlDX05PSzsKKwkJCXN0YXR1cyA9IGluOCAoSUlDX0VYVFNUUyk7CisJCQkvKiBMb3N0IGFyYml0cmF0aW9uPyAqLworCQkJaWYgKHN0YXR1cyAmIElJQ19FWFRTVFNfTEEpCisJCQkJcmVzdWx0ID0gSUlDX05PS19MQTsKKwkJCS8qIEluY29tcGxldGUgdHJhbnNmZXI/ICovCisJCQlpZiAoc3RhdHVzICYgSUlDX0VYVFNUU19JQ1QpCisJCQkJcmVzdWx0ID0gSUlDX05PS19JQ1Q7CisJCQkvKiBUcmFuc2ZlciBhYm9ydGVkPyAqLworCQkJaWYgKHN0YXR1cyAmIElJQ19FWFRTVFNfWEZSQSkKKwkJCQlyZXN1bHQgPSBJSUNfTk9LX1hGUkE7CisJCX0gZWxzZSBpZiAoIHN0YXR1cyAmIElJQ19TVFNfUFQpIHsKKwkJCXJlc3VsdCA9IElJQ19OT0tfVE9VVDsKKwkJfQorCQkvKiBDb21tYW5kIGlzIHJlYWRpbmcgPT4gZ2V0IGJ1ZmZlciAqLworCQlpZiAoKHJlYWRpbmcpICYmIChyZXN1bHQgPT0gSUlDX09LKSkgeworCQkJLyogQXJlIHRoZXJlIGRhdGEgaW4gYnVmZmVyICovCisJCQlpZiAoc3RhdHVzICYgSUlDX1NUU19NREJTKSB7CisJCQkJLyoKKwkJCQkgIGV2ZW4gaWYgd2UgaGF2ZSBkYXRhIHdlIGhhdmUgdG8gd2FpdCA0T1BCIGNsb2NrcworCQkJCSAgZm9yIGl0IHRvIGhpdCB0aGUgZnJvbnQgb2YgdGhlIEZJRk8sIGFmdGVyIHRoYXQKKwkJCQkgIHdlIGNhbiBqdXN0IHJlYWQuIFdlIHNob3VsZCBjaGVjayBYRkNOVCBoZXJlIGFuZAorCQkJCSAgaWYgdGhlIEZJRk8gaXMgZnVsbCB0aGVyZSBpcyBubyBuZWVkIHRvIHdhaXQuCiAJCQkJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRlbGF5ICgxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDtqPGJjO2orKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0clt0cmFuK2pdID0gaW44KElJQ19NREJVRik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyB2b2xhdGlsZSgiZWllaW8iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IElJQ19OT0tfREFUQTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3JlZyA9IDA7Ci0gICAgICAgICAgICAgICAgdHJhbis9YmM7Ci0gICAgICAgICAgICAgICAgaWYoIHB0ciA9PSBhZGRyICYmIHRyYW4gPT0gY250ICkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gZGF0YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNudCA9IGRhdGFfbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWFkaW5nID0gY21kX3R5cGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiggcmVhZGluZyApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWcgPSBJSUNfQ05UTF9SUFNUOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKHJlc3VsdCk7CisJCQkJdWRlbGF5ICgxKTsKKwkJCQlmb3Ioaj0wO2o8YmM7aisrKSB7CisJCQkJCXB0clt0cmFuK2pdID0gaW44KElJQ19NREJVRik7CisJCQkJCV9fYXNtX18gdm9sYXRpbGUoImVpZWlvIik7CisJCQkJfQorCQkJfSBlbHNlCisJCQkJcmVzdWx0ID0gSUlDX05PS19EQVRBOworCQl9CisJCWNyZWcgPSAwOworCQl0cmFuKz1iYzsKKwkJaWYoIHB0ciA9PSBhZGRyICYmIHRyYW4gPT0gY250ICkgeworCQkJcHRyID0gZGF0YTsKKwkJCWNudCA9IGRhdGFfbGVuOworCQkJdHJhbiA9IDA7CisJCQlyZWFkaW5nID0gY21kX3R5cGU7CisJCQlpZiggcmVhZGluZyApCisJCQkJY3JlZyA9IElJQ19DTlRMX1JQU1Q7CisJCX0KKwl9CisJcmV0dXJuIChyZXN1bHQpOwogfQogCiBpbnQgaTJjX3Byb2JlICh1Y2hhciBjaGlwKQpAQCAtMzM3LDg5ICszMzcsODggQEAKIAogCWJ1ZlswXSA9IDA7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogV2hhdCBpcyBuZWVkZWQgaXMgdG8gc2VuZCB0aGUgY2hpcCBhZGRyZXNzIGFuZCB2ZXJpZnkgdGhhdCB0aGUKLSAgICAgICAgICogYWRkcmVzcyB3YXMgPEFDSz5lZCAoaS5lLiB0aGVyZSB3YXMgYSBjaGlwIGF0IHRoYXQgYWRkcmVzcyB3aGljaAotICAgICAgICAgKiBkcm92ZSB0aGUgZGF0YSBsaW5lIGxvdykuCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4oaTJjX3RyYW5zZmVyICgxLCBjaGlwIDw8IDEsIDAsMCwgYnVmLCAxKSAhPSAwKTsKKwkvKgorCSAqIFdoYXQgaXMgbmVlZGVkIGlzIHRvIHNlbmQgdGhlIGNoaXAgYWRkcmVzcyBhbmQgdmVyaWZ5IHRoYXQgdGhlCisJICogYWRkcmVzcyB3YXMgPEFDSz5lZCAoaS5lLiB0aGVyZSB3YXMgYSBjaGlwIGF0IHRoYXQgYWRkcmVzcyB3aGljaAorCSAqIGRyb3ZlIHRoZSBkYXRhIGxpbmUgbG93KS4KKwkgKi8KKwlyZXR1cm4oaTJjX3RyYW5zZmVyICgxLCBjaGlwIDw8IDEsIDAsMCwgYnVmLCAxKSAhPSAwKTsKIH0KIAogCi0KIGludCBpMmNfcmVhZCAodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwgdWNoYXIgKiBidWZmZXIsIGludCBsZW4pCiB7Ci0gICAgICAgIHVjaGFyIHhhZGRyWzRdOwotICAgICAgICBpbnQgcmV0OworCXVjaGFyIHhhZGRyWzRdOworCWludCByZXQ7CiAKIAlpZiAoIGFsZW4gPiA0ICkgewogCQlwcmludGYgKCJJMkMgcmVhZDogYWRkciBsZW4gJWQgbm90IHN1cHBvcnRlZFxuIiwgYWxlbik7CiAJCXJldHVybiAxOwogCX0KIAotICAgICAgICBpZiAoIGFsZW4gPiAwICkgewotICAgICAgICAgICAgICAgIHhhZGRyWzBdID0gKGFkZHIgPj4gMjQpICYgMHhGRjsKLSAgICAgICAgICAgICAgICB4YWRkclsxXSA9IChhZGRyID4+IDE2KSAmIDB4RkY7Ci0gICAgICAgICAgICAgICAgeGFkZHJbMl0gPSAoYWRkciA+PiA4KSAmIDB4RkY7Ci0gICAgICAgICAgICAgICAgeGFkZHJbM10gPSBhZGRyICYgMHhGRjsKLSAgICAgICAgfQorCWlmICggYWxlbiA+IDAgKSB7CisJCXhhZGRyWzBdID0gKGFkZHIgPj4gMjQpICYgMHhGRjsKKwkJeGFkZHJbMV0gPSAoYWRkciA+PiAxNikgJiAweEZGOworCQl4YWRkclsyXSA9IChhZGRyID4+IDgpICYgMHhGRjsKKwkJeGFkZHJbM10gPSBhZGRyICYgMHhGRjsKKwl9CiAKIAogI2lmZGVmIENGR19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cKIAkvKgotICAgICAgICAgKiBFRVBST00gY2hpcHMgdGhhdCBpbXBsZW1lbnQgImFkZHJlc3Mgb3ZlcmZsb3ciIGFyZSBvbmVzCi0gICAgICAgICAqIGxpa2UgQ2F0YWx5c3QgMjRXQzA0LzA4LzE2IHdoaWNoIGhhcyA5LzEwLzExIGJpdHMgb2YKLSAgICAgICAgICogYWRkcmVzcyBhbmQgdGhlIGV4dHJhIGJpdHMgZW5kIHVwIGluIHRoZSAiY2hpcCBhZGRyZXNzIgotICAgICAgICAgKiBiaXQgc2xvdHMuIFRoaXMgbWFrZXMgYSAyNFdDMDggKDFLYnl0ZSkgY2hpcCBsb29rIGxpa2UKLSAgICAgICAgICogZm91ciAyNTYgYnl0ZSBjaGlwcy4KKwkgKiBFRVBST00gY2hpcHMgdGhhdCBpbXBsZW1lbnQgImFkZHJlc3Mgb3ZlcmZsb3ciIGFyZSBvbmVzCisJICogbGlrZSBDYXRhbHlzdCAyNFdDMDQvMDgvMTYgd2hpY2ggaGFzIDkvMTAvMTEgYml0cyBvZgorCSAqIGFkZHJlc3MgYW5kIHRoZSBleHRyYSBiaXRzIGVuZCB1cCBpbiB0aGUgImNoaXAgYWRkcmVzcyIKKwkgKiBiaXQgc2xvdHMuIFRoaXMgbWFrZXMgYSAyNFdDMDggKDFLYnl0ZSkgY2hpcCBsb29rIGxpa2UKKwkgKiBmb3VyIDI1NiBieXRlIGNoaXBzLgogCSAqCi0gICAgICAgICAqIE5vdGUgdGhhdCB3ZSBjb25zaWRlciB0aGUgbGVuZ3RoIG9mIHRoZSBhZGRyZXNzIGZpZWxkIHRvCi0gICAgICAgICAqIHN0aWxsIGJlIG9uZSBieXRlIGJlY2F1c2UgdGhlIGV4dHJhIGFkZHJlc3MgYml0cyBhcmUKLSAgICAgICAgICogaGlkZGVuIGluIHRoZSBjaGlwIGFkZHJlc3MuCisJICogTm90ZSB0aGF0IHdlIGNvbnNpZGVyIHRoZSBsZW5ndGggb2YgdGhlIGFkZHJlc3MgZmllbGQgdG8KKwkgKiBzdGlsbCBiZSBvbmUgYnl0ZSBiZWNhdXNlIHRoZSBleHRyYSBhZGRyZXNzIGJpdHMgYXJlCisJICogaGlkZGVuIGluIHRoZSBjaGlwIGFkZHJlc3MuCiAJICovCi0gICAgICAgIGlmKCBhbGVuID4gMCApCi0gICAgICAgICAgICAgICAgY2hpcCB8PSAoKGFkZHIgPj4gKGFsZW4gKiA4KSkgJiBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XKTsKKwlpZiggYWxlbiA+IDAgKQorCQljaGlwIHw9ICgoYWRkciA+PiAoYWxlbiAqIDgpKSAmIENGR19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cpOwogI2VuZGlmCi0gICAgICAgIGlmKCAocmV0ID0gaTJjX3RyYW5zZmVyKCAxLCBjaGlwPDwxLCAmeGFkZHJbNC1hbGVuXSwgYWxlbiwgYnVmZmVyLCBsZW4gKSkgIT0gMCkgewotICAgICAgICAgICAgICAgIHByaW50ZiggIkkyYyByZWFkOiBmYWlsZWQgJWRcbiIsIHJldCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisJaWYoIChyZXQgPSBpMmNfdHJhbnNmZXIoIDEsIGNoaXA8PDEsICZ4YWRkcls0LWFsZW5dLCBhbGVuLCBidWZmZXIsIGxlbiApKSAhPSAwKSB7CisJCXByaW50ZiggIkkyYyByZWFkOiBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKIH0KIAogaW50IGkyY193cml0ZSAodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwgdWNoYXIgKiBidWZmZXIsIGludCBsZW4pCiB7Ci0gICAgICAgIHVjaGFyIHhhZGRyWzRdOworCXVjaGFyIHhhZGRyWzRdOwogCiAJaWYgKCBhbGVuID4gNCApIHsKIAkJcHJpbnRmICgiSTJDIHdyaXRlOiBhZGRyIGxlbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCBhbGVuKTsKIAkJcmV0dXJuIDE7CiAKIAl9Ci0gICAgICAgIGlmICggYWxlbiA+IDAgKSB7Ci0gICAgICAgICAgICAgICAgeGFkZHJbMF0gPSAoYWRkciA+PiAyNCkgJiAweEZGOwotICAgICAgICAgICAgICAgIHhhZGRyWzFdID0gKGFkZHIgPj4gMTYpICYgMHhGRjsKLSAgICAgICAgICAgICAgICB4YWRkclsyXSA9IChhZGRyID4+IDgpICYgMHhGRjsKLSAgICAgICAgICAgICAgICB4YWRkclszXSA9IGFkZHIgJiAweEZGOwotICAgICAgICB9CisJaWYgKCBhbGVuID4gMCApIHsKKwkJeGFkZHJbMF0gPSAoYWRkciA+PiAyNCkgJiAweEZGOworCQl4YWRkclsxXSA9IChhZGRyID4+IDE2KSAmIDB4RkY7CisJCXhhZGRyWzJdID0gKGFkZHIgPj4gOCkgJiAweEZGOworCQl4YWRkclszXSA9IGFkZHIgJiAweEZGOworCX0KIAogI2lmZGVmIENGR19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cKIAkvKgotICAgICAgICAgKiBFRVBST00gY2hpcHMgdGhhdCBpbXBsZW1lbnQgImFkZHJlc3Mgb3ZlcmZsb3ciIGFyZSBvbmVzCi0gICAgICAgICAqIGxpa2UgQ2F0YWx5c3QgMjRXQzA0LzA4LzE2IHdoaWNoIGhhcyA5LzEwLzExIGJpdHMgb2YKLSAgICAgICAgICogYWRkcmVzcyBhbmQgdGhlIGV4dHJhIGJpdHMgZW5kIHVwIGluIHRoZSAiY2hpcCBhZGRyZXNzIgotICAgICAgICAgKiBiaXQgc2xvdHMuIFRoaXMgbWFrZXMgYSAyNFdDMDggKDFLYnl0ZSkgY2hpcCBsb29rIGxpa2UKLSAgICAgICAgICogZm91ciAyNTYgYnl0ZSBjaGlwcy4KKwkgKiBFRVBST00gY2hpcHMgdGhhdCBpbXBsZW1lbnQgImFkZHJlc3Mgb3ZlcmZsb3ciIGFyZSBvbmVzCisJICogbGlrZSBDYXRhbHlzdCAyNFdDMDQvMDgvMTYgd2hpY2ggaGFzIDkvMTAvMTEgYml0cyBvZgorCSAqIGFkZHJlc3MgYW5kIHRoZSBleHRyYSBiaXRzIGVuZCB1cCBpbiB0aGUgImNoaXAgYWRkcmVzcyIKKwkgKiBiaXQgc2xvdHMuIFRoaXMgbWFrZXMgYSAyNFdDMDggKDFLYnl0ZSkgY2hpcCBsb29rIGxpa2UKKwkgKiBmb3VyIDI1NiBieXRlIGNoaXBzLgogCSAqCi0gICAgICAgICAqIE5vdGUgdGhhdCB3ZSBjb25zaWRlciB0aGUgbGVuZ3RoIG9mIHRoZSBhZGRyZXNzIGZpZWxkIHRvCi0gICAgICAgICAqIHN0aWxsIGJlIG9uZSBieXRlIGJlY2F1c2UgdGhlIGV4dHJhIGFkZHJlc3MgYml0cyBhcmUKLSAgICAgICAgICogaGlkZGVuIGluIHRoZSBjaGlwIGFkZHJlc3MuCisJICogTm90ZSB0aGF0IHdlIGNvbnNpZGVyIHRoZSBsZW5ndGggb2YgdGhlIGFkZHJlc3MgZmllbGQgdG8KKwkgKiBzdGlsbCBiZSBvbmUgYnl0ZSBiZWNhdXNlIHRoZSBleHRyYSBhZGRyZXNzIGJpdHMgYXJlCisJICogaGlkZGVuIGluIHRoZSBjaGlwIGFkZHJlc3MuCiAJICovCi0gICAgICAgIGlmKCBhbGVuID4gMCApCi0gICAgICAgICAgICAgICAgY2hpcCB8PSAoKGFkZHIgPj4gKGFsZW4gKiA4KSkgJiBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XKTsKKwlpZiggYWxlbiA+IDAgKQorCQljaGlwIHw9ICgoYWRkciA+PiAoYWxlbiAqIDgpKSAmIENGR19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cpOwogI2VuZGlmCiAKLSAgICAgICAgcmV0dXJuIChpMmNfdHJhbnNmZXIoIDAsIGNoaXA8PDEsICZ4YWRkcls0LWFsZW5dLCBhbGVuLCBidWZmZXIsIGxlbiApICE9IDApOworCXJldHVybiAoaTJjX3RyYW5zZmVyKCAwLCBjaGlwPDwxLCAmeGFkZHJbNC1hbGVuXSwgYWxlbiwgYnVmZmVyLCBsZW4gKSAhPSAwKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLmMgYi9jcHUvcHBjNHh4L2ludGVycnVwdHMuYwppbmRleCAwODY3ZGU0Li5iNmE5NTZjIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L2ludGVycnVwdHMuYworKysgYi9jcHUvcHBjNHh4L2ludGVycnVwdHMuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPHdhdGNoZG9nLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPHBwYzR4eC5oPgogI2luY2x1ZGUgPHBwY19hc20udG1wbD4KZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgva2dkYi5TIGIvY3B1L3BwYzR4eC9rZ2RiLlMKaW5kZXggNzg2ODFjZC4uYmUyODM0MCAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9rZ2RiLlMKKysrIGIvY3B1L3BwYzR4eC9rZ2RiLlMKQEAgLTQ1LDEzICs0NSwxMyBAQAogCWljY2NpICAgcjAscjAJCS8qIGljY2NpIGludmFsaWRhdGVzIHRoZSBlbnRpcmUgSSBjYWNoZSAqLwogCS8qIGRjYWNoZSAqLwogCWFkZGkgICAgcjYsMCwweDAwMDAgICAgIC8qIGNsZWFyIEdQUiA2ICovCi0gICAgICAgIGFkZGkgICAgcjcscjAsIDEyOCAJLyogZG8gbG9vcCBmb3IgIyBvZiBkY2FjaGUgbGluZXMgKi8KKwlhZGRpICAgIHI3LHIwLCAxMjggCS8qIGRvIGxvb3AgZm9yICMgb2YgZGNhY2hlIGxpbmVzICovCiAJCQkJLyogTk9URTogZGNjY2kgaW52YWxpZGF0ZXMgYm90aCAqLwotICAgICAgICBtdGN0ciAgIHI3ICAgICAgICAgICAgICAvKiB3YXlzIGluIHRoZSBEIGNhY2hlICovCisJbXRjdHIgICByNyAgICAgICAgICAgICAgLyogd2F5cyBpbiB0aGUgRCBjYWNoZSAqLwogLi5kY2xvb3A6Ci0gICAgICAgIGRjY2NpICAgMCxyNiAgICAgICAgICAgIC8qIGludmFsaWRhdGUgbGluZSAqLwotICAgICAgICBhZGRpICAgIHI2LHI2LCAzMgkvKiBidW1wIHRvIG5leHQgbGluZSAqLwotICAgICAgICBiZG56ICAgIC4uZGNsb29wCisJZGNjY2kgICAwLHI2ICAgICAgICAgICAgLyogaW52YWxpZGF0ZSBsaW5lICovCisJYWRkaSAgICByNixyNiwgMzIJLyogYnVtcCB0byBuZXh0IGxpbmUgKi8KKwliZG56ICAgIC4uZGNsb29wCiAJYmxyCiAKIAkuZ2xvYmwJa2dkYl9mbHVzaF9jYWNoZV9yYW5nZQpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9taWlwaHkuYyBiL2NwdS9wcGM0eHgvbWlpcGh5LmMKaW5kZXggYzVhOTBhOS4uMDYwNmViZSAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9taWlwaHkuYworKysgYi9jcHUvcHBjNHh4L21paXBoeS5jCkBAIC03Niw3ICs3Niw2IEBACiB9IC8qIGVuZCBkdW1wICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiByZWFkIGEgcGh5IHJlZyBhbmQgcmV0dXJuIHRoZSB2YWx1ZSB3aXRoIGEgcmMgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3Jlc2V0dmVjLlMgYi9jcHUvcHBjNHh4L3Jlc2V0dmVjLlMKaW5kZXggZTA1OGJmMC4uYjMzMDhiZCAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9yZXNldHZlYy5TCisrKyBiL2NwdS9wcGM0eHgvcmVzZXR2ZWMuUwpAQCAtMTAsNCArMTAsMyBAQAogCWIgX3N0YXJ0CiAjZW5kaWYKICNlbmRpZgotCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3NkcmFtLmMgYi9jcHUvcHBjNHh4L3NkcmFtLmMKaW5kZXggZTM1YTFkMC4uZDQ1NTJhMSAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9zZHJhbS5jCisrKyBiL2NwdS9wcGM0eHgvc2RyYW0uYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJICogTm93IHRlc3QgZm9yIDY0IE1CeXRlLi4uCiAJICovCiAKLSAgICAgICAgLyoKKwkvKgogCSAqIERpc2FibGUgbWVtb3J5IGNvbnRyb2xsZXIuCiAJICovCiAJbXRzZHJhbTAobWVtX21jb3B0MSwgMHgwMDAwMDAwMCk7CkBAIC0xNzksNyArMTc5LDcgQEAKIAkgKiBOb3cgdGVzdCBmb3IgMzIgTUJ5dGUuLi4KIAkgKi8KIAotICAgICAgICAvKgorCS8qCiAJICogRGlzYWJsZSBtZW1vcnkgY29udHJvbGxlci4KIAkgKi8KIAltdHNkcmFtMChtZW1fbWNvcHQxLCAweDAwMDAwMDAwKTsKQEAgLTIyMSw3ICsyMjEsNyBAQAogCS8qCiAJICogTm93IHRlc3QgZm9yIDE2IE1CeXRlLi4uCiAJICovCi0gICAgICAgIC8qCisJLyoKIAkgKiBEaXNhYmxlIG1lbW9yeSBjb250cm9sbGVyLgogCSAqLwogCW10c2RyYW0wKG1lbV9tY29wdDEsIDB4MDAwMDAwMDApOwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJICogU2V0dXAgZm9yIDQgTUJ5dGUuLi4KIAkgKi8KIAotICAgICAgICAvKgorCS8qCiAJICogRGlzYWJsZSBtZW1vcnkgY29udHJvbGxlci4KIAkgKi8KIAltdHNkcmFtMChtZW1fbWNvcHQxLCAweDAwMDAwMDAwKTsKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvc3BkX3NkcmFtLmMgYi9jcHUvcHBjNHh4L3NwZF9zZHJhbS5jCmluZGV4IDc2YWVlMmUuLjI4OWFkMTIgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvc3BkX3NkcmFtLmMKKysrIGIvY3B1L3BwYzR4eC9zcGRfc2RyYW0uYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJICogd2F5IHRvIG1pbmltaXplIHN0YWNrIHV0aWxpemF0aW9uLgogCSAqLwogI2lmbmRlZiBDT05GSUdfNDA1RVAKLSAgICAJdG1wID0gKG1mZGNyKHBsbG1kKSA+PiAoMzEtNikpICYgMHhmOwkvKiBnZXQgRkJEViBiaXRzICovCisJdG1wID0gKG1mZGNyKHBsbG1kKSA+PiAoMzEtNikpICYgMHhmOwkvKiBnZXQgRkJEViBiaXRzICovCiAJdG1wID0gQ09ORklHX1NZU19DTEtfRlJFUSAqIHRtcDsJLyogZ2V0IHBsYiBmcmVxICovCiAjZWxzZQogCXsKQEAgLTE5NywxMCArMTk3LDEwIEBACiAjZW5kaWYKIAlidXNfcGVyaW9kID0gc2RyYW1fSFpfdG9fbnModG1wKTsJLyogZ2V0IHNkcmFtIHNwZWVkICovCiAKLSAgICAgCS8qIE1ha2Ugc2h1cmUgd2UgYXJlIHVzaW5nIFNEUkFNICovCisJLyogTWFrZSBzaHVyZSB3ZSBhcmUgdXNpbmcgU0RSQU0gKi8KIAlpZiAocmVhZF9zcGQoMikgIT0gMHgwNCl7Ci0gICAgICAgICAgU1BEX0VSUigiU0RSQU0gLSBub24gU0RSQU0gbWVtb3J5IG1vZHVsZSBmb3VuZFxuIik7Ci0gICAgIAkgIH0KKwkgIFNQRF9FUlIoIlNEUkFNIC0gbm9uIFNEUkFNIG1lbW9yeSBtb2R1bGUgZm91bmRcbiIpOworCSAgfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBjb25maWd1cmUgbWVtb3J5IHRpbWluZyByZWdpc3RlcgpAQCAtMjE4LDE3ICsyMTgsMTcgQEAKIAogCXRtcCA9IHJlYWRfc3BkKDEyNykgJiAweDY7CiAgICAgIGlmKHRtcCA9PSAweDAyKXsgICAgICAJICAgLyogb25seSBjYXMgPSAyIHN1cHBvcnRlZCAqLwotICAgICAJICBtaW5fY2FzID0gMjsKKwkgIG1pbl9jYXMgPSAyOwogLyogICAgIAkgIHRfY2sgPSByZWFkX3NwZCg5KTsgKi8KIC8qICAgICAJICB0X2FjID0gcmVhZF9zcGQoMTApOyAqLwogCSAgfQogICAgICBlbHNlIGlmICh0bXAgPT0gMHgwNCl7ICAgICAgICAgLyogb25seSBjYXMgPSAzIHN1cHBvcnRlZCAqLwotICAgICAJICBtaW5fY2FzID0gMzsKKwkgIG1pbl9jYXMgPSAzOwogLyogICAgIAkgIHRfY2sgPSByZWFkX3NwZCg5KTsgKi8KIC8qICAgICAJICB0X2FjID0gcmVhZF9zcGQoMTApOyAqLwogCSAgfQogICAgICBlbHNlIGlmICh0bXAgPT0gMHgwNil7ICAgICAgICAgLyogMiwzIHN1cHBvcnRlZCwgc28gdXNlIDIgKi8KLSAgICAgCSAgbWluX2NhcyA9IDI7CisJICBtaW5fY2FzID0gMjsKIC8qICAgICAJICB0X2NrID0gcmVhZF9zcGQoMjMpOyAqLwogLyogICAgIAkgIHRfYWMgPSByZWFkX3NwZCgyNCk7ICovCiAJICB9CkBAIC0yOTIsNyArMjkyLDcgQEAKIAkgIHRtcD0xNTYyNSo4OwogCSAgYnJlYWs7CiAJZGVmYXVsdDoKLSAgICAgCSAgU1BEX0VSUigiU0RSQU0gLSBCYWQgcmVmcmVzaCBwZXJpb2QgXG4iKTsKKwkgIFNQRF9FUlIoIlNEUkFNIC0gQmFkIHJlZnJlc2ggcGVyaW9kIFxuIik7CiAJfQogCS8qIGNvbnZlcnQgZnJvbSBuc2VjIHRvIGJ1cyBjeWNsZXMgKi8KIAl0bXAgPSB0bXAvYnVzX3BlcmlvZDsKQEAgLTMzMiwxMSArMzMyLDExIEBACiAJaWYgKCAocmVhZF9zcGQoMTEpPT0yKSAmJiAocmVhZF9zcGQoNik9PTQwKSAmJiAocmVhZF9zcGQoMTQpPT04KSApewogCSAgIHNkcmFtMF9lY2NjZmc9MHhmPDxTRFJBTTBfRUNDQ0ZHX1NISUZUOwogCSAgIGVjY19vbiA9IDE7Ci0gICAJfQorCX0KIAllbHNlewogCSAgIHNkcmFtMF9lY2NjZmc9MDsKIAkgICBlY2Nfb24gPSAwOwotICAgCX0KKwl9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJY2FsY3VsYXRlIHRvdGFsIHNpemUKQEAgLTM2OSw3ICszNjksNyBAQAogCQkJbW9kZT0wOyAvKiBtb2RlIDEgKi8KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCSAgICAgCVNQRF9FUlIoIlNEUkFNIC0gdW5zdXBwb3J0ZWQgbW9kZVxuIik7CisJCVNQRF9FUlIoIlNEUkFNIC0gdW5zdXBwb3J0ZWQgbW9kZVxuIik7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAxMjoKQEAgLTM4Myw3ICszODMsNyBAQAogCQkJbW9kZT0xOyAvKiBtb2RlIDIgKi8KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCSAgICAgCVNQRF9FUlIoIlNEUkFNIC0gdW5zdXBwb3J0ZWQgbW9kZVxuIik7CisJCVNQRF9FUlIoIlNEUkFNIC0gdW5zdXBwb3J0ZWQgbW9kZVxuIik7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAxMzoKQEAgLTQwMyw3ICs0MDMsNyBAQAogCQkJbW9kZT0yOyAvKiBtb2RlIDMgKi8KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCSAgICAgCVNQRF9FUlIoIlNEUkFNIC0gdW5zdXBwb3J0ZWQgbW9kZVxuIik7CisJCVNQRF9FUlIoIlNEUkFNIC0gdW5zdXBwb3J0ZWQgbW9kZVxuIik7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTQzMSwxMCArNDMxLDEwIEBACiAJYmFua19jb2RlLT0yMjsJCQkJLyogc3VidHJhY3QgMjIgdG8gZ2V0IHRoZSBjb2RlICovCiAKIAl0bXAgPSBTRFJBTTBfQlhDUl9TWihiYW5rX2NvZGUpIHwgU0RSQU0wX0JYQ1JfQU0obW9kZSkgfCAxOwotICAgIAlzZHJhbTBfYjBjciA9IChiYW5rX3NpemUpICogMCB8IHRtcDsKLSAgICAJaWYoYmFua19jbnQ+MSkgc2RyYW0wX2IyY3IgPSAoYmFua19zaXplKSAqIDEgfCB0bXA7Ci0gICAgCWlmKGJhbmtfY250PjIpIHNkcmFtMF9iMWNyID0gKGJhbmtfc2l6ZSkgKiAyIHwgdG1wOwotICAgIAlpZihiYW5rX2NudD4zKSBzZHJhbTBfYjNjciA9IChiYW5rX3NpemUpICogMyB8IHRtcDsKKwlzZHJhbTBfYjBjciA9IChiYW5rX3NpemUpICogMCB8IHRtcDsKKwlpZihiYW5rX2NudD4xKSBzZHJhbTBfYjJjciA9IChiYW5rX3NpemUpICogMSB8IHRtcDsKKwlpZihiYW5rX2NudD4yKSBzZHJhbTBfYjFjciA9IChiYW5rX3NpemUpICogMiB8IHRtcDsKKwlpZihiYW5rX2NudD4zKSBzZHJhbTBfYjNjciA9IChiYW5rX3NpemUpICogMyB8IHRtcDsKIAogCiAJLyoKQEAgLTY4NCwzNCArNjg0LDM0IEBACiB1bnNpZ25lZCBjaGFyIHNwZF9yZWFkKHVjaGFyIGNoaXAsIHVpbnQgYWRkcik7CiAKIHZvaWQgZ2V0X3NwZF9pbmZvKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcyk7CisJCSAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCisJCSAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOwogCiB2b2lkIGNoZWNrX21lbV90eXBlCi0gICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOworCQkgKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAorCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKIAogdm9pZCBjaGVja192b2x0X3R5cGUKLSAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcyk7CisJCSAodW5zaWduZWQgbG9uZyogZGltbV9wb3B1bGF0ZWQsCisJCSAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCisJCSAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOwogCiB2b2lkIHByb2dyYW1fY2ZnMCh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOworCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKIAogdm9pZCBwcm9ncmFtX2NmZzEodW5zaWduZWQgbG9uZyogZGltbV9wb3B1bGF0ZWQsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKKwkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKKwkJICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcyk7CiAKIHZvaWQgcHJvZ3JhbV9ydHIgKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcyk7CisJCSAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCisJCSAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOwogCiB2b2lkIHByb2dyYW1fdHIwICh1bnNpZ25lZCBsb25nKiBkaW1tX3BvcHVsYXRlZCwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbnVtX2RpbW1fYmFua3MpOworCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKIAogdm9pZCBwcm9ncmFtX3RyMSAodm9pZCk7CiAKQEAgLTcxOSw4ICs3MTksOCBAQAogCiB1bnNpZ25lZAogbG9uZyAgcHJvZ3JhbV9ieGNyKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKKwkJICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCisJCSAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKTsKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgcmVhZGluZyBkYXRhIGZyb20gdGhlIERJTU0gbW9kdWxlIEVFUFJPTSBvdmVyIHRoZSBTUEQgYnVzCkBAIC03ODgsNyArNzg4LDcgQEAKICAgICAgKiBwcm9ncmFtIHRoZSBCeENSIHJlZ2lzdGVycyB0byBmaW5kIG91dCB0b3RhbCBzZHJhbSBpbnN0YWxsZWQKICAgICAgKi8KICAgICB0b3RhbF9zaXplID0gcHJvZ3JhbV9ieGNyKGRpbW1fcG9wdWxhdGVkLCBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgbnVtX2RpbW1fYmFua3MpOworCW51bV9kaW1tX2JhbmtzKTsKIAogICAgIC8qCiAgICAgICogcHJvZ3JhbSBTRFJBTSBDbG9jayBUaW1pbmcgUmVnaXN0ZXIgKFNEUkFNMF9DTEtUUikKQEAgLTgxMCwxMCArODEwLDEwIEBACiAgICAgICogd2FpdCBmb3IgU0RSQU1fQ0ZHMF9EQ19FTiB0byBjb21wbGV0ZQogICAgICAqLwogICAgIHdoaWxlKDEpIHsKLSAgICAgICAgbWZzZHJhbShtZW1fbWNzdHMsIG1jc3RzKTsKLSAgICAgICAgaWYgKChtY3N0cyAmIFNEUkFNX01DU1RTX01SU0MpICE9IDApIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJbWZzZHJhbShtZW1fbWNzdHMsIG1jc3RzKTsKKwlpZiAoKG1jc3RzICYgU0RSQU1fTUNTVFNfTVJTQykgIT0gMCkgeworCSAgICBicmVhazsKKwl9CiAgICAgfQogCiAgICAgLyoKQEAgLTgzOCw4ICs4MzgsOCBAQAogfQogCiB2b2lkIGdldF9zcGRfaW5mbyh1bnNpZ25lZCBsb25nKiAgIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogICBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgbnVtX2RpbW1fYmFua3MpCisJCSAgdW5zaWduZWQgY2hhciogICBpaWMwX2RpbW1fYWRkciwKKwkJICB1bnNpZ25lZCBsb25nICAgIG51bV9kaW1tX2JhbmtzKQogewogICAgIHVuc2lnbmVkIGxvbmcgZGltbV9udW07CiAgICAgdW5zaWduZWQgbG9uZyBkaW1tX2ZvdW5kOwpAQCAtODQ4LDkwICs4NDgsOTAgQEAKIAogICAgIGRpbW1fZm91bmQgPSBGQUxTRTsKICAgICBmb3IgKGRpbW1fbnVtID0gMDsgZGltbV9udW0gPCBudW1fZGltbV9iYW5rczsgZGltbV9udW0rKykgewotICAgICAgICBudW1fb2ZfYnl0ZXMgPSAwOwotICAgICAgICB0b3RhbF9zaXplID0gMDsKKwludW1fb2ZfYnl0ZXMgPSAwOworCXRvdGFsX3NpemUgPSAwOwogCi0gICAgICAgIG51bV9vZl9ieXRlcyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMCk7Ci0gICAgICAgIHRvdGFsX3NpemUgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDEpOworCW51bV9vZl9ieXRlcyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMCk7CisJdG90YWxfc2l6ZSA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMSk7CiAKLSAgICAgICAgaWYgKChudW1fb2ZfYnl0ZXMgIT0gMCkgJiYgKHRvdGFsX3NpemUgIT0gMCkpIHsKLSAgICAgICAgICAgIGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9IFRSVUU7Ci0gICAgICAgICAgICBkaW1tX2ZvdW5kID0gVFJVRTsKKwlpZiAoKG51bV9vZl9ieXRlcyAhPSAwKSAmJiAodG90YWxfc2l6ZSAhPSAwKSkgeworCSAgICBkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPSBUUlVFOworCSAgICBkaW1tX2ZvdW5kID0gVFJVRTsKICNpZiAwCi0gICAgICAgICAgICBwcmludGYoIkRJTU0gc2xvdCAlbHU6IHBvcHVsYXRlZFxuIiwgZGltbV9udW0pOworCSAgICBwcmludGYoIkRJTU0gc2xvdCAlbHU6IHBvcHVsYXRlZFxuIiwgZGltbV9udW0pOwogI2VuZGlmCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPSBGQUxTRTsKKwl9CisJZWxzZSB7CisJICAgIGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9IEZBTFNFOwogI2lmIDAKLSAgICAgICAgICAgIHByaW50ZigiRElNTSBzbG90ICVsdTogTm90IHBvcHVsYXRlZFxuIiwgZGltbV9udW0pOworCSAgICBwcmludGYoIkRJTU0gc2xvdCAlbHU6IE5vdCBwb3B1bGF0ZWRcbiIsIGRpbW1fbnVtKTsKICNlbmRpZgotICAgICAgICB9CisJfQogICAgIH0KIAogICAgIGlmIChkaW1tX2ZvdW5kID09IEZBTFNFKSB7Ci0gICAgICAgIHByaW50ZigiRVJST1IgLSBObyBtZW1vcnkgaW5zdGFsbGVkLiBJbnN0YWxsIGEgRERSLVNEUkFNIERJTU0uXG5cbiIpOwotICAgICAgICBoYW5nKCk7CisJcHJpbnRmKCJFUlJPUiAtIE5vIG1lbW9yeSBpbnN0YWxsZWQuIEluc3RhbGwgYSBERFItU0RSQU0gRElNTS5cblxuIik7CisJaGFuZygpOwogICAgIH0KIH0KIAogdm9pZCBjaGVja19tZW1fdHlwZSh1bnNpZ25lZCBsb25nKiAgIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiAgIGlpYzBfZGltbV9hZGRyLAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICAgIG51bV9kaW1tX2JhbmtzKQorCQkgICAgdW5zaWduZWQgY2hhciogICBpaWMwX2RpbW1fYWRkciwKKwkJICAgIHVuc2lnbmVkIGxvbmcgICAgbnVtX2RpbW1fYmFua3MpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBkaW1tX251bTsKICAgICB1bnNpZ25lZCBjaGFyIGRpbW1fdHlwZTsKIAogICAgIGZvciAoZGltbV9udW0gPSAwOyBkaW1tX251bSA8IG51bV9kaW1tX2JhbmtzOyBkaW1tX251bSsrKSB7Ci0gICAgICAgIGlmIChkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPT0gVFJVRSkgewotICAgICAgICAgICAgZGltbV90eXBlID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAyKTsKLSAgICAgICAgICAgIHN3aXRjaCAoZGltbV90eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIDc6CisJaWYgKGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9PSBUUlVFKSB7CisJICAgIGRpbW1fdHlwZSA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMik7CisJICAgIHN3aXRjaCAoZGltbV90eXBlKSB7CisJICAgIGNhc2UgNzoKICNpZiAwCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJESU1NIHNsb3QgJWx1OiBERFIgU0RSQU0gZGV0ZWN0ZWRcbiIsIGRpbW1fbnVtKTsKKwkJcHJpbnRmKCJESU1NIHNsb3QgJWx1OiBERFIgU0RSQU0gZGV0ZWN0ZWRcbiIsIGRpbW1fbnVtKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBwcmludGYoIkVSUk9SOiBVbnN1cHBvcnRlZCBESU1NIGRldGVjdGVkIGluIHNsb3QgJWx1LlxuIiwKLSAgICAgICAgICAgICAgICAgICAgZGltbV9udW0pOwotICAgICAgICAgICAgICAgIHByaW50ZigiT25seSBERFIgU0RSQU0gRElNTXMgYXJlIHN1cHBvcnRlZC5cbiIpOwotICAgICAgICAgICAgICAgIHByaW50ZigiUmVwbGFjZSB0aGUgRElNTSBtb2R1bGUgd2l0aCBhIHN1cHBvcnRlZCBESU1NLlxuXG4iKTsKLSAgICAgICAgICAgICAgICBoYW5nKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCXByaW50ZigiRVJST1I6IFVuc3VwcG9ydGVkIERJTU0gZGV0ZWN0ZWQgaW4gc2xvdCAlbHUuXG4iLAorCQkgICAgZGltbV9udW0pOworCQlwcmludGYoIk9ubHkgRERSIFNEUkFNIERJTU1zIGFyZSBzdXBwb3J0ZWQuXG4iKTsKKwkJcHJpbnRmKCJSZXBsYWNlIHRoZSBESU1NIG1vZHVsZSB3aXRoIGEgc3VwcG9ydGVkIERJTU0uXG5cbiIpOworCQloYW5nKCk7CisJCWJyZWFrOworCSAgICB9CisJfQogICAgIH0KIH0KIAogCiB2b2lkIGNoZWNrX3ZvbHRfdHlwZSh1bnNpZ25lZCBsb25nKiAgIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogICBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICAgbnVtX2RpbW1fYmFua3MpCisJCSAgICAgdW5zaWduZWQgY2hhciogICBpaWMwX2RpbW1fYWRkciwKKwkJICAgICB1bnNpZ25lZCBsb25nICAgIG51bV9kaW1tX2JhbmtzKQogewogICAgIHVuc2lnbmVkIGxvbmcgZGltbV9udW07CiAgICAgdW5zaWduZWQgbG9uZyB2b2x0YWdlX3R5cGU7CiAKICAgICBmb3IgKGRpbW1fbnVtID0gMDsgZGltbV9udW0gPCBudW1fZGltbV9iYW5rczsgZGltbV9udW0rKykgewotICAgICAgICBpZiAoZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID09IFRSVUUpIHsKLSAgICAgICAgICAgIHZvbHRhZ2VfdHlwZSA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgOCk7Ci0gICAgICAgICAgICBpZiAodm9sdGFnZV90eXBlICE9IDB4MDQpIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIkVSUk9SOiBESU1NICVsdSB3aXRoIHVuc3VwcG9ydGVkIHZvbHRhZ2UgbGV2ZWwuXG4iLAotICAgICAgICAgICAgICAgICAgICBkaW1tX251bSk7Ci0gICAgICAgICAgICAgICAgaGFuZygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7CisJaWYgKGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9PSBUUlVFKSB7CisJICAgIHZvbHRhZ2VfdHlwZSA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgOCk7CisJICAgIGlmICh2b2x0YWdlX3R5cGUgIT0gMHgwNCkgeworCQlwcmludGYoIkVSUk9SOiBESU1NICVsdSB3aXRoIHVuc3VwcG9ydGVkIHZvbHRhZ2UgbGV2ZWwuXG4iLAorCQkgICAgZGltbV9udW0pOworCQloYW5nKCk7CisJICAgIH0KKwkgICAgZWxzZSB7CiAjaWYgMAotICAgICAgICAgICAgICAgIHByaW50ZigiRElNTSAlbHUgdm9sdGFnZSBsZXZlbCBzdXBwb3J0ZWQuXG4iLCBkaW1tX251bSk7CisJCXByaW50ZigiRElNTSAlbHUgdm9sdGFnZSBsZXZlbCBzdXBwb3J0ZWQuXG4iLCBkaW1tX251bSk7CiAjZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQogICAgIH0KIH0KIAogdm9pZCBwcm9ncmFtX2NmZzAodW5zaWduZWQgbG9uZyogZGltbV9wb3B1bGF0ZWQsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKQorCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKQogewogICAgIHVuc2lnbmVkIGxvbmcgZGltbV9udW07CiAgICAgdW5zaWduZWQgbG9uZyBjZmcwOwpAQCAtOTUxLDkgKzk1MSw5IEBACiAgICAgICogY2xlYXIgYml0cwogICAgICAqLwogICAgIGNmZzAgJj0gfihTRFJBTV9DRkcwX0RDRU4gfCBTRFJBTV9DRkcwX01DSEtfTUFTSyB8Ci0gICAgICAgICAgICAgIFNEUkFNX0NGRzBfUkRFTiB8IFNEUkFNX0NGRzBfUE1VRCB8Ci0gICAgICAgICAgICAgIFNEUkFNX0NGRzBfRE1XRF9NQVNLIHwKLSAgICAgICAgICAgICAgU0RSQU1fQ0ZHMF9VSU9TX01BU0sgfCBTRFJBTV9DRkcwX1BEUCk7CisJICAgICAgU0RSQU1fQ0ZHMF9SREVOIHwgU0RSQU1fQ0ZHMF9QTVVEIHwKKwkgICAgICBTRFJBTV9DRkcwX0RNV0RfTUFTSyB8CisJICAgICAgU0RSQU1fQ0ZHMF9VSU9TX01BU0sgfCBTRFJBTV9DRkcwX1BEUCk7CiAKIAogICAgIC8qCkBAIC05NjEsNTIgKzk2MSw1MiBAQAogICAgICAqLwogICAgIGVjY19lbmFibGVkID0gVFJVRTsKICAgICBmb3IgKGRpbW1fbnVtID0gMDsgZGltbV9udW0gPCBudW1fZGltbV9iYW5rczsgZGltbV9udW0rKykgewotICAgICAgICBpZiAoZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID09IFRSVUUpIHsKLSAgICAgICAgICAgIGVjYyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMTEpOwotICAgICAgICAgICAgaWYgKGVjYyAhPSAweDAyKSB7Ci0gICAgICAgICAgICAgICAgZWNjX2VuYWJsZWQgPSBGQUxTRTsKLSAgICAgICAgICAgIH0KKwlpZiAoZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID09IFRSVUUpIHsKKwkgICAgZWNjID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAxMSk7CisJICAgIGlmIChlY2MgIT0gMHgwMikgeworCQllY2NfZW5hYmxlZCA9IEZBTFNFOworCSAgICB9CiAKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBwcm9ncmFtIFJlZ2lzdGVyZWQgRElNTSBFbmFibGUKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYXR0cmlidXRlcyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjEpOwotICAgICAgICAgICAgaWYgKChhdHRyaWJ1dGVzICYgMHgwMikgIT0gMHgwMCkgewotICAgICAgICAgICAgICAgIGNmZzAgfD0gU0RSQU1fQ0ZHMF9SREVOOwotICAgICAgICAgICAgfQorCSAgICAvKgorCSAgICAgKiBwcm9ncmFtIFJlZ2lzdGVyZWQgRElNTSBFbmFibGUKKwkgICAgICovCisJICAgIGF0dHJpYnV0ZXMgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDIxKTsKKwkgICAgaWYgKChhdHRyaWJ1dGVzICYgMHgwMikgIT0gMHgwMCkgeworCQljZmcwIHw9IFNEUkFNX0NGRzBfUkRFTjsKKwkgICAgfQogCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogcHJvZ3JhbSBERFIgU0RSQU0gRGF0YSBXaWR0aAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBkYXRhX3dpZHRoID0KLSAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sNikgKwotICAgICAgICAgICAgICAgICgoKHVuc2lnbmVkIGxvbmcpc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLDcpKSA8PCA4KTsKLSAgICAgICAgICAgIGlmIChkYXRhX3dpZHRoID09IDY0IHx8IGRhdGFfd2lkdGggPT0gNzIpIHsKLSAgICAgICAgICAgICAgICBkaW1tXzY0Yml0ID0gVFJVRTsKLSAgICAgICAgICAgICAgICBjZmcwIHw9IFNEUkFNX0NGRzBfRE1XRF82NDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGRhdGFfd2lkdGggPT0gMzIgfHwgZGF0YV93aWR0aCA9PSA0MCkgewotICAgICAgICAgICAgICAgIGRpbW1fMzJiaXQgPSBUUlVFOwotICAgICAgICAgICAgICAgIGNmZzAgfD0gU0RSQU1fQ0ZHMF9ETVdEXzMyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJXQVJOSU5HOiBESU1NIHdpdGggZGF0YXdpZHRoIG9mICVsdSBiaXRzLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgZGF0YV93aWR0aCk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJPbmx5IERJTU1zIHdpdGggMzIgb3IgNjQgYml0IGRhdGF3aWR0aHMgc3VwcG9ydGVkLlxuIik7Ci0gICAgICAgICAgICAgICAgaGFuZygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkgICAgLyoKKwkgICAgICogcHJvZ3JhbSBERFIgU0RSQU0gRGF0YSBXaWR0aAorCSAgICAgKi8KKwkgICAgZGF0YV93aWR0aCA9CisJCSh1bnNpZ25lZCBsb25nKXNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSw2KSArCisJCSgoKHVuc2lnbmVkIGxvbmcpc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLDcpKSA8PCA4KTsKKwkgICAgaWYgKGRhdGFfd2lkdGggPT0gNjQgfHwgZGF0YV93aWR0aCA9PSA3MikgeworCQlkaW1tXzY0Yml0ID0gVFJVRTsKKwkJY2ZnMCB8PSBTRFJBTV9DRkcwX0RNV0RfNjQ7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoZGF0YV93aWR0aCA9PSAzMiB8fCBkYXRhX3dpZHRoID09IDQwKSB7CisJCWRpbW1fMzJiaXQgPSBUUlVFOworCQljZmcwIHw9IFNEUkFNX0NGRzBfRE1XRF8zMjsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkJcHJpbnRmKCJXQVJOSU5HOiBESU1NIHdpdGggZGF0YXdpZHRoIG9mICVsdSBiaXRzLlxuIiwKKwkJICAgIGRhdGFfd2lkdGgpOworCQlwcmludGYoIk9ubHkgRElNTXMgd2l0aCAzMiBvciA2NCBiaXQgZGF0YXdpZHRocyBzdXBwb3J0ZWQuXG4iKTsKKwkJaGFuZygpOworCSAgICB9CisJICAgIGJyZWFrOworCX0KICAgICB9CiAKICAgICAvKgogICAgICAqIHByb2dyYW0gTWVtb3J5IERhdGEgRXJyb3IgQ2hlY2tpbmcKICAgICAgKi8KICAgICBpZiAoZWNjX2VuYWJsZWQgPT0gVFJVRSkgewotICAgICAgICBjZmcwIHw9IFNEUkFNX0NGRzBfTUNIS19HRU47CisJY2ZnMCB8PSBTRFJBTV9DRkcwX01DSEtfR0VOOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgY2ZnMCB8PSBTRFJBTV9DRkcwX01DSEtfTk9OOworCWNmZzAgfD0gU0RSQU1fQ0ZHMF9NQ0hLX05PTjsKICAgICB9CiAKICAgICAvKgpAQCAtMTAyMyw4ICsxMDIzLDggQEAKIH0KIAogdm9pZCBwcm9ncmFtX2NmZzEodW5zaWduZWQgbG9uZyogZGltbV9wb3B1bGF0ZWQsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKQorCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKQogewogICAgIHVuc2lnbmVkIGxvbmcgY2ZnMTsKICAgICBtZnNkcmFtKG1lbV9jZmcxLCBjZmcxKTsKQEAgLTEwNDEsOCArMTA0MSw4IEBACiB9CiAKIHZvaWQgcHJvZ3JhbV9ydHIgKHVuc2lnbmVkIGxvbmcqIGRpbW1fcG9wdWxhdGVkLAotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKKwkJICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKKwkJICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKIHsKICAgICB1bnNpZ25lZCBsb25nIGRpbW1fbnVtOwogICAgIHVuc2lnbmVkIGxvbmcgYnVzX3BlcmlvZF94XzEwOwpAQCAtMTA2MCwzNiArMTA2MCwzNiBAQAogCiAKICAgICBmb3IgKGRpbW1fbnVtID0gMDsgIGRpbW1fbnVtIDwgbnVtX2RpbW1fYmFua3M7IGRpbW1fbnVtKyspIHsKLSAgICAgICAgaWYgKGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9PSBUUlVFKSB7Ci0gICAgICAgICAgICByZWZyZXNoX3JhdGVfdHlwZSA9IDB4N0YgJiBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDEyKTsKLSAgICAgICAgICAgIHN3aXRjaCAocmVmcmVzaF9yYXRlX3R5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgMHgwMDoKLSAgICAgICAgICAgICAgICByZWZyZXNoX3JhdGUgPSAxNTYyNTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHgwMTE6Ci0gICAgICAgICAgICAgICAgcmVmcmVzaF9yYXRlID0gMTU2MjUvNDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHgwMjoKLSAgICAgICAgICAgICAgICByZWZyZXNoX3JhdGUgPSAxNTYyNS8yOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDAzOgotICAgICAgICAgICAgICAgIHJlZnJlc2hfcmF0ZSA9IDE1NjI2KjI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4MDQ6Ci0gICAgICAgICAgICAgICAgcmVmcmVzaF9yYXRlID0gMTU2MjUqNDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHgwNToKLSAgICAgICAgICAgICAgICByZWZyZXNoX3JhdGUgPSAxNTYyNSo4OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBwcmludGYoIkVSUk9SOiBESU1NICVsdSwgdW5zdXBwb3J0ZWQgcmVmcmVzaCByYXRlL3R5cGUuXG4iLAotICAgICAgICAgICAgICAgICAgICBkaW1tX251bSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJSZXBsYWNlIHRoZSBESU1NIG1vZHVsZSB3aXRoIGEgc3VwcG9ydGVkIERJTU0uXG4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKwlpZiAoZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID09IFRSVUUpIHsKKwkgICAgcmVmcmVzaF9yYXRlX3R5cGUgPSAweDdGICYgc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAxMik7CisJICAgIHN3aXRjaCAocmVmcmVzaF9yYXRlX3R5cGUpIHsKKwkgICAgY2FzZSAweDAwOgorCQlyZWZyZXNoX3JhdGUgPSAxNTYyNTsKKwkJYnJlYWs7CisJICAgIGNhc2UgMHgwMTE6CisJCXJlZnJlc2hfcmF0ZSA9IDE1NjI1LzQ7CisJCWJyZWFrOworCSAgICBjYXNlIDB4MDI6CisJCXJlZnJlc2hfcmF0ZSA9IDE1NjI1LzI7CisJCWJyZWFrOworCSAgICBjYXNlIDB4MDM6CisJCXJlZnJlc2hfcmF0ZSA9IDE1NjI2KjI7CisJCWJyZWFrOworCSAgICBjYXNlIDB4MDQ6CisJCXJlZnJlc2hfcmF0ZSA9IDE1NjI1KjQ7CisJCWJyZWFrOworCSAgICBjYXNlIDB4MDU6CisJCXJlZnJlc2hfcmF0ZSA9IDE1NjI1Kjg7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlwcmludGYoIkVSUk9SOiBESU1NICVsdSwgdW5zdXBwb3J0ZWQgcmVmcmVzaCByYXRlL3R5cGUuXG4iLAorCQkgICAgZGltbV9udW0pOworCQlwcmludGYoIlJlcGxhY2UgdGhlIERJTU0gbW9kdWxlIHdpdGggYSBzdXBwb3J0ZWQgRElNTS5cbiIpOworCQlicmVhazsKKwkgICAgfQogCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCSAgICBicmVhazsKKwl9CiAgICAgfQogCiAgICAgcmVmcmVzaF9pbnRlcnZhbCA9IHJlZnJlc2hfcmF0ZSAqIDEwIC8gYnVzX3BlcmlvZF94XzEwOwpAQCAtMTEwMiw4ICsxMTAyLDggQEAKIH0KIAogdm9pZCBwcm9ncmFtX3RyMCAodW5zaWduZWQgbG9uZyogZGltbV9wb3B1bGF0ZWQsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKQorCQkgIHVuc2lnbmVkIGNoYXIqIGlpYzBfZGltbV9hZGRyLAorCQkgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKQogewogICAgIHVuc2lnbmVkIGxvbmcgZGltbV9udW07CiAgICAgdW5zaWduZWQgbG9uZyB0cjA7CkBAIC0xMTQxLDkgKzExNDEsOSBAQAogICAgICAqLwogICAgIG1mc2RyYW0obWVtX3RyMCwgdHIwKTsKICAgICB0cjAgJj0gfihTRFJBTV9UUjBfU0RXUl9NQVNLIHwgU0RSQU1fVFIwX1NEV0RfTUFTSyB8Ci0gICAgICAgICAgICAgU0RSQU1fVFIwX1NEQ0xfTUFTSyB8IFNEUkFNX1RSMF9TRFBBX01BU0sgfAotICAgICAgICAgICAgIFNEUkFNX1RSMF9TRENQX01BU0sgfCBTRFJBTV9UUjBfU0RMRF9NQVNLIHwKLSAgICAgICAgICAgICBTRFJBTV9UUjBfU0RSQV9NQVNLIHwgU0RSQU1fVFIwX1NEUkRfTUFTSyk7CisJICAgICBTRFJBTV9UUjBfU0RDTF9NQVNLIHwgU0RSQU1fVFIwX1NEUEFfTUFTSyB8CisJICAgICBTRFJBTV9UUjBfU0RDUF9NQVNLIHwgU0RSQU1fVFIwX1NETERfTUFTSyB8CisJICAgICBTRFJBTV9UUjBfU0RSQV9NQVNLIHwgU0RSQU1fVFIwX1NEUkRfTUFTSyk7CiAKICAgICAvKgogICAgICAqIGluaXRpYWxpemF0aW9uCkBAIC0xMTYwLDgzICsxMTYwLDgzIEBACiAgICAgdGN5Y18zXzBfbnNfeF8xMCA9IDA7CiAKICAgICBmb3IgKGRpbW1fbnVtID0gMDsgZGltbV9udW0gPCBudW1fZGltbV9iYW5rczsgZGltbV9udW0rKykgewotICAgICAgICBpZiAoZGltbV9wb3B1bGF0ZWRbZGltbV9udW1dID09IFRSVUUpIHsKLSAgICAgICAgICAgIHdjc2JjID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAxNSk7Ci0gICAgICAgICAgICB0X3JwX25zICA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjcpID4+IDI7Ci0gICAgICAgICAgICB0X3JjZF9ucyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjkpID4+IDI7Ci0gICAgICAgICAgICB0X3Jhc19ucyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMzApOwotICAgICAgICAgICAgY2FzX2JpdCA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMTgpOworCWlmIChkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPT0gVFJVRSkgeworCSAgICB3Y3NiYyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMTUpOworCSAgICB0X3JwX25zICA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjcpID4+IDI7CisJICAgIHRfcmNkX25zID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAyOSkgPj4gMjsKKwkgICAgdF9yYXNfbnMgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDMwKTsKKwkgICAgY2FzX2JpdCA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMTgpOwogCi0gICAgICAgICAgICBmb3IgKGNhc19pbmRleCA9IDA7IGNhc19pbmRleCA8IDM7IGNhc19pbmRleCsrKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjYXNfaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgIHRjeWNfcmVnID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCA5KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICB0Y3ljX3JlZyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB0Y3ljX3JlZyA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMjUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisJICAgIGZvciAoY2FzX2luZGV4ID0gMDsgY2FzX2luZGV4IDwgMzsgY2FzX2luZGV4KyspIHsKKwkJc3dpdGNoIChjYXNfaW5kZXgpIHsKKwkJY2FzZSAwOgorCQkgICAgdGN5Y19yZWcgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDkpOworCQkgICAgYnJlYWs7CisJCWNhc2UgMToKKwkJICAgIHRjeWNfcmVnID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAyMyk7CisJCSAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIHRjeWNfcmVnID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAyNSk7CisJCSAgICBicmVhazsKKwkJfQogCi0gICAgICAgICAgICAgICAgaWYgKCh0Y3ljX3JlZyAmIDB4MEYpID49IDEwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiRVJST1I6IFRjeWMgaW5jb3JyZWN0IGZvciBESU1NIGluIHNsb3QgJWx1XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZGltbV9udW0pOwotICAgICAgICAgICAgICAgICAgICBoYW5nKCk7Ci0gICAgICAgICAgICAgICAgfQorCQlpZiAoKHRjeWNfcmVnICYgMHgwRikgPj0gMTApIHsKKwkJICAgIHByaW50ZigiRVJST1I6IFRjeWMgaW5jb3JyZWN0IGZvciBESU1NIGluIHNsb3QgJWx1XG4iLAorCQkJZGltbV9udW0pOworCQkgICAgaGFuZygpOworCQl9CiAKLSAgICAgICAgICAgICAgICBjeWNsZV90aW1lX25zX3hfMTBbY2FzX2luZGV4XSA9Ci0gICAgICAgICAgICAgICAgICAgICgoKHRjeWNfcmVnICYgMHhGMCkgPj4gNCkgKiAxMCkgKyAodGN5Y19yZWcgJiAweDBGKTsKLSAgICAgICAgICAgIH0KKwkJY3ljbGVfdGltZV9uc194XzEwW2Nhc19pbmRleF0gPQorCQkgICAgKCgodGN5Y19yZWcgJiAweEYwKSA+PiA0KSAqIDEwKSArICh0Y3ljX3JlZyAmIDB4MEYpOworCSAgICB9CiAKLSAgICAgICAgICAgIGNhc19pbmRleCA9IDA7CisJICAgIGNhc19pbmRleCA9IDA7CiAKLSAgICAgICAgICAgIGlmICgoY2FzX2JpdCAmIDB4ODApICE9IDApIHsKLSAgICAgICAgICAgICAgICBjYXNfaW5kZXggKz0gMzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKChjYXNfYml0ICYgMHg0MCkgIT0gMCkgewotICAgICAgICAgICAgICAgIGNhc19pbmRleCArPSAyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoKGNhc19iaXQgJiAweDIwKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgY2FzX2luZGV4ICs9IDE7Ci0gICAgICAgICAgICB9CisJICAgIGlmICgoY2FzX2JpdCAmIDB4ODApICE9IDApIHsKKwkJY2FzX2luZGV4ICs9IDM7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoKGNhc19iaXQgJiAweDQwKSAhPSAwKSB7CisJCWNhc19pbmRleCArPSAyOworCSAgICB9CisJICAgIGVsc2UgaWYgKChjYXNfYml0ICYgMHgyMCkgIT0gMCkgeworCQljYXNfaW5kZXggKz0gMTsKKwkgICAgfQogCi0gICAgICAgICAgICBpZiAoKChjYXNfYml0ICYgMHgxMCkgIT0gMCkgJiYgKGNhc19pbmRleCA8IDMpKSB7Ci0gICAgICAgICAgICAgICAgdGN5Y18zXzBfbnNfeF8xMCA9IGN5Y2xlX3RpbWVfbnNfeF8xMFtjYXNfaW5kZXhdOwotICAgICAgICAgICAgICAgIGNhc19pbmRleCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNhc19pbmRleCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc19pbmRleCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNfM18wX2F2YWlsYWJsZSA9IEZBTFNFOwotICAgICAgICAgICAgfQorCSAgICBpZiAoKChjYXNfYml0ICYgMHgxMCkgIT0gMCkgJiYgKGNhc19pbmRleCA8IDMpKSB7CisJCXRjeWNfM18wX25zX3hfMTAgPSBjeWNsZV90aW1lX25zX3hfMTBbY2FzX2luZGV4XTsKKwkJY2FzX2luZGV4Kys7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWlmIChjYXNfaW5kZXggIT0gMCkgeworCQkgICAgY2FzX2luZGV4Kys7CisJCX0KKwkJY2FzXzNfMF9hdmFpbGFibGUgPSBGQUxTRTsKKwkgICAgfQogCi0gICAgICAgICAgICBpZiAoKChjYXNfYml0ICYgMHgwOCkgIT0gMCkgfHwgKGNhc19pbmRleCA8IDMpKSB7Ci0gICAgICAgICAgICAgICAgdGN5Y18yXzVfbnNfeF8xMCA9IGN5Y2xlX3RpbWVfbnNfeF8xMFtjYXNfaW5kZXhdOwotICAgICAgICAgICAgICAgIGNhc19pbmRleCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNhc19pbmRleCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc19pbmRleCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNfMl81X2F2YWlsYWJsZSA9IEZBTFNFOwotICAgICAgICAgICAgfQorCSAgICBpZiAoKChjYXNfYml0ICYgMHgwOCkgIT0gMCkgfHwgKGNhc19pbmRleCA8IDMpKSB7CisJCXRjeWNfMl81X25zX3hfMTAgPSBjeWNsZV90aW1lX25zX3hfMTBbY2FzX2luZGV4XTsKKwkJY2FzX2luZGV4Kys7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWlmIChjYXNfaW5kZXggIT0gMCkgeworCQkgICAgY2FzX2luZGV4Kys7CisJCX0KKwkJY2FzXzJfNV9hdmFpbGFibGUgPSBGQUxTRTsKKwkgICAgfQogCi0gICAgICAgICAgICBpZiAoKChjYXNfYml0ICYgMHgwNCkgIT0gMCkgfHwgKGNhc19pbmRleCA8IDMpKSB7Ci0gICAgICAgICAgICAgICAgdGN5Y18yXzBfbnNfeF8xMCA9IGN5Y2xlX3RpbWVfbnNfeF8xMFtjYXNfaW5kZXhdOwotICAgICAgICAgICAgICAgIGNhc19pbmRleCsrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNhc19pbmRleCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc19pbmRleCsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNfMl8wX2F2YWlsYWJsZSA9IEZBTFNFOwotICAgICAgICAgICAgfQorCSAgICBpZiAoKChjYXNfYml0ICYgMHgwNCkgIT0gMCkgfHwgKGNhc19pbmRleCA8IDMpKSB7CisJCXRjeWNfMl8wX25zX3hfMTAgPSBjeWNsZV90aW1lX25zX3hfMTBbY2FzX2luZGV4XTsKKwkJY2FzX2luZGV4Kys7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWlmIChjYXNfaW5kZXggIT0gMCkgeworCQkgICAgY2FzX2luZGV4Kys7CisJCX0KKwkJY2FzXzJfMF9hdmFpbGFibGUgPSBGQUxTRTsKKwkgICAgfQogCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCSAgICBicmVhazsKKwl9CiAgICAgfQogCiAgICAgLyoKQEAgLTEyNDUsMzMgKzEyNDUsMzMgQEAKICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEV1JfMl9DTEs7ICAgICAgICAgICAgICAgIC8qIFdyaXRlIFJlY292ZXJ5OiAyIENMSyAqLwogICAgIHN3aXRjaCAod2NzYmMpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RXRF8wX0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFdEXzBfQ0xLOworCWJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RXRF8xX0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFdEXzFfQ0xLOworCWJyZWFrOwogICAgIH0KIAogICAgIC8qCiAgICAgICogUHJvZ3JhbSBTRF9DQVNMIGZpZWxkCiAgICAgICovCiAgICAgaWYgKChjYXNfMl8wX2F2YWlsYWJsZSA9PSBUUlVFKSAmJgotICAgICAgICAoYnVzX3BlcmlvZF94XzEwID49IHRjeWNfMl8wX25zX3hfMTApKSB7Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RDTF8yXzBfQ0xLOworCShidXNfcGVyaW9kX3hfMTAgPj0gdGN5Y18yXzBfbnNfeF8xMCkpIHsKKwl0cjAgfD0gU0RSQU1fVFIwX1NEQ0xfMl8wX0NMSzsKICAgICB9CiAgICAgZWxzZSBpZigoY2FzXzJfNV9hdmFpbGFibGUgPT0gVFJVRSkgJiYKLSAgICAgICAgKGJ1c19wZXJpb2RfeF8xMCA+PSB0Y3ljXzJfNV9uc194XzEwKSkgewotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEQ0xfMl81X0NMSzsKKwkoYnVzX3BlcmlvZF94XzEwID49IHRjeWNfMl81X25zX3hfMTApKSB7CisJdHIwIHw9IFNEUkFNX1RSMF9TRENMXzJfNV9DTEs7CiAgICAgfQogICAgIGVsc2UgaWYoKGNhc18zXzBfYXZhaWxhYmxlID09IFRSVUUpICYmCi0gICAgICAgIChidXNfcGVyaW9kX3hfMTAgPj0gdGN5Y18zXzBfbnNfeF8xMCkpIHsKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRENMXzNfMF9DTEs7CisJKGJ1c19wZXJpb2RfeF8xMCA+PSB0Y3ljXzNfMF9uc194XzEwKSkgeworCXRyMCB8PSBTRFJBTV9UUjBfU0RDTF8zXzBfQ0xLOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCJFUlJPUjogTm8gc3VwcG9ydGVkIENBUyBsYXRlbmN5IHdpdGggdGhlIGluc3RhbGxlZCBESU1Ncy5cbiIpOwotICAgICAgICBwcmludGYoIk9ubHkgQ0FTIGxhdGVuY2llcyBvZiAyLjAsIDIuNSwgYW5kIDMuMCBhcmUgc3VwcG9ydGVkLlxuIik7Ci0gICAgICAgIHByaW50ZigiTWFrZSBzdXJlIHRoZSBQTEIgc3BlZWQgaXMgd2l0aGluIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4iKTsKLSAgICAgICAgaGFuZygpOworCXByaW50ZigiRVJST1I6IE5vIHN1cHBvcnRlZCBDQVMgbGF0ZW5jeSB3aXRoIHRoZSBpbnN0YWxsZWQgRElNTXMuXG4iKTsKKwlwcmludGYoIk9ubHkgQ0FTIGxhdGVuY2llcyBvZiAyLjAsIDIuNSwgYW5kIDMuMCBhcmUgc3VwcG9ydGVkLlxuIik7CisJcHJpbnRmKCJNYWtlIHN1cmUgdGhlIFBMQiBzcGVlZCBpcyB3aXRoaW4gdGhlIHN1cHBvcnRlZCByYW5nZS5cbiIpOworCWhhbmcoKTsKICAgICB9CiAKICAgICAvKgpAQCAtMTI4MSwyMCArMTI4MSwyMCBAQAogICAgIHRfcnBfY2xrID0gc3lzX2luZm8uZnJlcVBMQiAqIHRfcnBfbnMgLyBPTkVfQklMTElPTjsKICAgICBwbGJfY2hlY2sgPSBPTkVfQklMTElPTiAqIHRfcnBfY2xrIC8gdF9ycF9uczsKICAgICBpZiAoc3lzX2luZm8uZnJlcVBMQiAhPSBwbGJfY2hlY2spIHsKLSAgICAgICAgdF9ycF9jbGsrKzsKKwl0X3JwX2NsaysrOwogICAgIH0KICAgICBzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKXRfcnBfY2xrKSB7CiAgICAgY2FzZSAwOgogICAgIGNhc2UgMToKICAgICBjYXNlIDI6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RQQV8yX0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFBBXzJfQ0xLOworCWJyZWFrOwogICAgIGNhc2UgMzoKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRFBBXzNfQ0xLOwotICAgICAgICBicmVhazsKKwl0cjAgfD0gU0RSQU1fVFIwX1NEUEFfM19DTEs7CisJYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRFBBXzRfQ0xLOwotICAgICAgICBicmVhazsKKwl0cjAgfD0gU0RSQU1fVFIwX1NEUEFfNF9DTEs7CisJYnJlYWs7CiAgICAgfQogCiAgICAgLyoKQEAgLTEzMDMsNyArMTMwMyw3IEBACiAgICAgdF9yYXNfcmNkX2NsayA9IHN5c19pbmZvLmZyZXFQTEIgKiAodF9yYXNfbnMgLSB0X3JjZF9ucykgLyBPTkVfQklMTElPTjsKICAgICBwbGJfY2hlY2sgPSBPTkVfQklMTElPTiAqIHRfcmFzX3JjZF9jbGsgLyAodF9yYXNfbnMgLSB0X3JjZF9ucyk7CiAgICAgaWYgKHN5c19pbmZvLmZyZXFQTEIgIT0gcGxiX2NoZWNrKSB7Ci0gICAgICAgIHRfcmFzX3JjZF9jbGsrKzsKKwl0X3Jhc19yY2RfY2xrKys7CiAgICAgfQogICAgIHN3aXRjaCAodF9yYXNfcmNkX2NsaykgewogICAgIGNhc2UgMDoKQEAgLTEzMzQsNyArMTMzNCw3IEBACiAgICAgdF9yZmNfY2xrID0gc3lzX2luZm8uZnJlcVBMQiAvIChPTkVfQklMTElPTiAvIDc1KTsKICAgICByZXNpZHVlID0gc3lzX2luZm8uZnJlcVBMQiAlIChPTkVfQklMTElPTiAvIDc1KTsKICAgICBpZiAocmVzaWR1ZSA+PSAoT05FX0JJTExJT04gLyAxNTApKSB7Ci0gICAgICAgIHRfcmZjX2NsaysrOworCXRfcmZjX2NsaysrOwogICAgIH0KICAgICBzd2l0Y2ggKHRfcmZjX2NsaykgewogICAgIGNhc2UgMDoKQEAgLTEzNDQsMjkgKzEzNDQsMjkgQEAKICAgICBjYXNlIDQ6CiAgICAgY2FzZSA1OgogICAgIGNhc2UgNjoKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzZfQ0xLOwotICAgICAgICBicmVhazsKKwl0cjAgfD0gU0RSQU1fVFIwX1NEUkFfNl9DTEs7CisJYnJlYWs7CiAgICAgY2FzZSA3OgotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEUkFfN19DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RSQV83X0NMSzsKKwlicmVhazsKICAgICBjYXNlIDg6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RSQV84X0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzhfQ0xLOworCWJyZWFrOwogICAgIGNhc2UgOToKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzlfQ0xLOwotICAgICAgICBicmVhazsKKwl0cjAgfD0gU0RSQU1fVFIwX1NEUkFfOV9DTEs7CisJYnJlYWs7CiAgICAgY2FzZSAxMDoKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzEwX0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzEwX0NMSzsKKwlicmVhazsKICAgICBjYXNlIDExOgotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEUkFfMTFfQ0xLOwotICAgICAgICBicmVhazsKKwl0cjAgfD0gU0RSQU1fVFIwX1NEUkFfMTFfQ0xLOworCWJyZWFrOwogICAgIGNhc2UgMTI6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RSQV8xMl9DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RSQV8xMl9DTEs7CisJYnJlYWs7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzEzX0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFJBXzEzX0NMSzsKKwlicmVhazsKICAgICB9CiAKICAgICAvKgpAQCAtMTM3NSwyMCArMTM3NSwyMCBAQAogICAgIHRfcmNkX2NsayA9IHN5c19pbmZvLmZyZXFQTEIgKiB0X3JjZF9ucyAvIE9ORV9CSUxMSU9OOwogICAgIHBsYl9jaGVjayA9IE9ORV9CSUxMSU9OICogdF9yY2RfY2xrIC8gdF9yY2RfbnM7CiAgICAgaWYgKHN5c19pbmZvLmZyZXFQTEIgIT0gcGxiX2NoZWNrKSB7Ci0gICAgICAgIHRfcmNkX2NsaysrOworCXRfcmNkX2NsaysrOwogICAgIH0KICAgICBzd2l0Y2ggKHRfcmNkX2NsaykgewogICAgIGNhc2UgMDoKICAgICBjYXNlIDE6CiAgICAgY2FzZSAyOgotICAgICAgICB0cjAgfD0gU0RSQU1fVFIwX1NEUkRfMl9DTEs7Ci0gICAgICAgIGJyZWFrOworCXRyMCB8PSBTRFJBTV9UUjBfU0RSRF8yX0NMSzsKKwlicmVhazsKICAgICBjYXNlIDM6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RSRF8zX0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFJEXzNfQ0xLOworCWJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRyMCB8PSBTRFJBTV9UUjBfU0RSRF80X0NMSzsKLSAgICAgICAgYnJlYWs7CisJdHIwIHw9IFNEUkFNX1RSMF9TRFJEXzRfQ0xLOworCWJyZWFrOwogICAgIH0KIAogI2lmIDAKQEAgLTE0MzIsMTkgKzE0MzIsMTkgQEAKICAgICAgKi8KICAgICBtZnNkcmFtKG1lbV90cjEsIHRyMSk7CiAgICAgdHIxICY9IH4oU0RSQU1fVFIxX1JEU1NfTUFTSyB8IFNEUkFNX1RSMV9SRFNMX01BU0sgfAotICAgICAgICAgICAgIFNEUkFNX1RSMV9SRENEX01BU0sgfCBTRFJBTV9UUjFfUkRDVF9NQVNLKTsKKwkgICAgIFNEUkFNX1RSMV9SRENEX01BU0sgfCBTRFJBTV9UUjFfUkRDVF9NQVNLKTsKIAogICAgIG1mc2RyYW0obWVtX3RyMCwgdHIwKTsKICAgICBpZiAoKCh0cjAgJiBTRFJBTV9UUjBfU0RDTF9NQVNLKSA9PSBTRFJBTV9UUjBfU0RDTF8yXzVfQ0xLKSAmJgogICAgICAgIChzeXNfaW5mby5mcmVxUExCID4gMTAwMDAwMDAwKSkgewotICAgICAgICB0cjEgfD0gU0RSQU1fVFIxX1JEU1NfVFIyOwotICAgICAgICB0cjEgfD0gU0RSQU1fVFIxX1JEU0xfU1RBR0UzOwotICAgICAgICB0cjEgfD0gU0RSQU1fVFIxX1JEQ0RfUkNEXzFfMjsKKwl0cjEgfD0gU0RSQU1fVFIxX1JEU1NfVFIyOworCXRyMSB8PSBTRFJBTV9UUjFfUkRTTF9TVEFHRTM7CisJdHIxIHw9IFNEUkFNX1RSMV9SRENEX1JDRF8xXzI7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICB0cjEgfD0gU0RSQU1fVFIxX1JEU1NfVFIxOwotICAgICAgICB0cjEgfD0gU0RSQU1fVFIxX1JEU0xfU1RBR0UyOwotICAgICAgICB0cjEgfD0gU0RSQU1fVFIxX1JEQ0RfUkNEXzBfMDsKKwl0cjEgfD0gU0RSQU1fVFIxX1JEU1NfVFIxOworCXRyMSB8PSBTRFJBTV9UUjFfUkRTTF9TVEFHRTI7CisJdHIxIHw9IFNEUkFNX1RSMV9SRENEX1JDRF8wXzA7CiAgICAgfQogCiAgICAgLyoKQEAgLTE0NzQsOTEgKzE0NzQsOTEgQEAKICAgICBwcmludGYoIlN0YXJ0aW5nIG1lbW9yeSB0ZXN0ICIpOwogI2VuZGlmCiAgICAgZm9yIChrID0gMDsgayA8IE5VTUhBTEZDWUNMRVM7IGsrKykgewotICAgICAgICBmb3IgKHJkY2x0ID0gMDsgcmRjbHQgPCBkbHlfdmFsOyByZGNsdCsrKSAgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFNldCB0aGUgdGltaW5nIHJlZyBmb3IgdGhlIHRlc3QuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG10c2RyYW0obWVtX3RyMSwgKHRyMSB8IFNEUkFNX1RSMV9SRENUX0VOQ09ERShyZGNsdCkpKTsKKwlmb3IgKHJkY2x0ID0gMDsgcmRjbHQgPCBkbHlfdmFsOyByZGNsdCsrKSAgeworCSAgICAvKgorCSAgICAgKiBTZXQgdGhlIHRpbWluZyByZWcgZm9yIHRoZSB0ZXN0LgorCSAgICAgKi8KKwkgICAgbXRzZHJhbShtZW1fdHIxLCAodHIxIHwgU0RSQU1fVFIxX1JEQ1RfRU5DT0RFKHJkY2x0KSkpOwogCi0gICAgICAgICAgICBmb3IgKGJ4Y3JfbnVtID0gMDsgYnhjcl9udW0gPCBNQVhCWENSOyBieGNyX251bSsrKSB7Ci0gICAgICAgICAgICAgICAgbXRkY3IobWVtY2ZnYSwgbWVtX2IwY3IgKyAoYnhjcl9udW08PDIpKTsKLSAgICAgICAgICAgICAgICBpZiAoKG1mZGNyKG1lbWNmZ2QpICYgU0RSQU1fQlhDUl9TREJFKSA9PSBTRFJBTV9CWENSX1NEQkUpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogQmFuayBpcyBlbmFibGVkICovCi0gICAgICAgICAgICAgICAgICAgIG1lbWJhc2UgPSAodW5zaWduZWQgbG9uZyopCi0gICAgICAgICAgICAgICAgICAgICAgICAobWZkY3IobWVtY2ZnZCkgJiBTRFJBTV9CWENSX1NEQkFfTUFTSyk7CisJICAgIGZvciAoYnhjcl9udW0gPSAwOyBieGNyX251bSA8IE1BWEJYQ1I7IGJ4Y3JfbnVtKyspIHsKKwkJbXRkY3IobWVtY2ZnYSwgbWVtX2IwY3IgKyAoYnhjcl9udW08PDIpKTsKKwkJaWYgKChtZmRjcihtZW1jZmdkKSAmIFNEUkFNX0JYQ1JfU0RCRSkgPT0gU0RSQU1fQlhDUl9TREJFKSB7CisJCSAgICAvKiBCYW5rIGlzIGVuYWJsZWQgKi8KKwkJICAgIG1lbWJhc2UgPSAodW5zaWduZWQgbG9uZyopCisJCQkobWZkY3IobWVtY2ZnZCkgJiBTRFJBTV9CWENSX1NEQkFfTUFTSyk7CiAKLSAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICogUnVuIHRoZSBzaG9ydCBtZW1vcnkgdGVzdAotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5VTU1FTVRFU1RTOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBOVU1NRU1XT1JEUzsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmFzZVtqXSA9IHRlc3RbaV1bal07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBjRGNiZigodW5zaWduZWQgbG9uZykmKG1lbWJhc2Vbal0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJICAgIC8qCisJCSAgICAgKiBSdW4gdGhlIHNob3J0IG1lbW9yeSB0ZXN0CisJCSAgICAgKi8KKwkJICAgIGZvciAoaSA9IDA7IGkgPCBOVU1NRU1URVNUUzsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgTlVNTUVNV09SRFM7IGorKykgeworCQkJICAgIG1lbWJhc2Vbal0gPSB0ZXN0W2ldW2pdOworCQkJICAgIHBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpJihtZW1iYXNlW2pdKSk7CisJCQl9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBOVU1NRU1XT1JEUzsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lbWJhc2Vbal0gIT0gdGVzdFtpXVtqXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcGNEY2JmKCh1bnNpZ25lZCBsb25nKSYobWVtYmFzZVtqXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHBjRGNiZigodW5zaWduZWQgbG9uZykmKG1lbWJhc2Vbal0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCWZvciAoaiA9IDA7IGogPCBOVU1NRU1XT1JEUzsgaisrKSB7CisJCQkgICAgaWYgKG1lbWJhc2Vbal0gIT0gdGVzdFtpXVtqXSkgeworCQkJCXBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpJihtZW1iYXNlW2pdKSk7CisJCQkJYnJlYWs7CisJCQkgICAgfQorCQkJICAgIHBwY0RjYmYoKHVuc2lnbmVkIGxvbmcpJihtZW1iYXNlW2pdKSk7CisJCQl9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgTlVNTUVNV09SRFMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQorCQkJaWYgKGogPCBOVU1NRU1XT1JEUykgeworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAqIHNlZSBpZiB0aGUgcmRjbHQgdmFsdWUgcGFzc2VkCi0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IE5VTU1FTVRFU1RTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkJICAgIC8qCisJCSAgICAgKiBzZWUgaWYgdGhlIHJkY2x0IHZhbHVlIHBhc3NlZAorCQkgICAgICovCisJCSAgICBpZiAoaSA8IE5VTU1FTVRFU1RTKSB7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CiAKLSAgICAgICAgICAgIGlmIChieGNyX251bSA9PSBNQVhCWENSKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZhaWxfZm91bmQgPT0gVFJVRSkgewotICAgICAgICAgICAgICAgICAgICBwYXNzX2ZvdW5kID0gVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRfcGFzc19sZW5ndGggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9zdGFydCA9IHJkY2x0X29mZnNldCArIHJkY2x0OwotICAgICAgICAgICAgICAgICAgICB9CisJICAgIGlmIChieGNyX251bSA9PSBNQVhCWENSKSB7CisJCWlmIChmYWlsX2ZvdW5kID09IFRSVUUpIHsKKwkJICAgIHBhc3NfZm91bmQgPSBUUlVFOworCQkgICAgaWYgKGN1cnJlbnRfcGFzc19sZW5ndGggPT0gMCkgeworCQkJY3VycmVudF9zdGFydCA9IHJkY2x0X29mZnNldCArIHJkY2x0OworCQkgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZmFpbF9sZW5ndGggPSAwOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Bhc3NfbGVuZ3RoKys7CisJCSAgICBjdXJyZW50X2ZhaWxfbGVuZ3RoID0gMDsKKwkJICAgIGN1cnJlbnRfcGFzc19sZW5ndGgrKzsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9wYXNzX2xlbmd0aCA+IG1heF9wYXNzX2xlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3Bhc3NfbGVuZ3RoID0gY3VycmVudF9wYXNzX2xlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heF9zdGFydCA9IGN1cnJlbnRfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXhfZW5kID0gcmRjbHRfb2Zmc2V0ICsgcmRjbHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50X3Bhc3NfbGVuZ3RoID0gMDsKLSAgICAgICAgICAgICAgICBjdXJyZW50X2ZhaWxfbGVuZ3RoKys7CisJCSAgICBpZiAoY3VycmVudF9wYXNzX2xlbmd0aCA+IG1heF9wYXNzX2xlbmd0aCkgeworCQkJbWF4X3Bhc3NfbGVuZ3RoID0gY3VycmVudF9wYXNzX2xlbmd0aDsKKwkJCW1heF9zdGFydCA9IGN1cnJlbnRfc3RhcnQ7CisJCQltYXhfZW5kID0gcmRjbHRfb2Zmc2V0ICsgcmRjbHQ7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBlbHNlIHsKKwkJY3VycmVudF9wYXNzX2xlbmd0aCA9IDA7CisJCWN1cnJlbnRfZmFpbF9sZW5ndGgrKzsKIAotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50X2ZhaWxfbGVuZ3RoID49IChkbHlfdmFsPj4yKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZmFpbF9mb3VuZCA9PSBGQUxTRSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmFpbF9mb3VuZCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGFzc19mb3VuZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dfZm91bmQgPSBUUlVFOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkJaWYgKGN1cnJlbnRfZmFpbF9sZW5ndGggPj0gKGRseV92YWw+PjIpKSB7CisJCSAgICBpZiAoZmFpbF9mb3VuZCA9PSBGQUxTRSkgeworCQkJZmFpbF9mb3VuZCA9IFRSVUU7CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChwYXNzX2ZvdW5kID09IFRSVUUpIHsKKwkJCXdpbmRvd19mb3VuZCA9IFRSVUU7CisJCQlicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJfQogI2lmZGVmIERFQlVHCi0gICAgICAgIHByaW50ZigiLiIpOworCXByaW50ZigiLiIpOwogI2VuZGlmCi0gICAgICAgIGlmICh3aW5kb3dfZm91bmQgPT0gVFJVRSkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlpZiAod2luZG93X2ZvdW5kID09IFRSVUUpIHsKKwkgICAgYnJlYWs7CisJfQogCi0gICAgICAgIHRyMSA9IHRyMSBeIFNEUkFNX1RSMV9SRENEX01BU0s7Ci0gICAgICAgIHJkY2x0X29mZnNldCArPSBkbHlfdmFsOworCXRyMSA9IHRyMSBeIFNEUkFNX1RSMV9SRENEX01BU0s7CisJcmRjbHRfb2Zmc2V0ICs9IGRseV92YWw7CiAgICAgfQogI2lmZGVmIERFQlVHCiAgICAgcHJpbnRmKCJcbiIpOwpAQCAtMTU4MiwxMCArMTU4MiwxMCBAQAogICAgICAqLwogICAgIHRyMSAmPSB+U0RSQU1fVFIxX1JEQ0RfTUFTSzsKICAgICBpZiAoKHRyMCAmIFNEUkFNX1RSMF9TRENMX01BU0spID09IFNEUkFNX1RSMF9TRENMXzJfNV9DTEspIHsKLSAgICAgICAgdHIxIHw9IFNEUkFNX1RSMV9SRENEX1JDRF8xXzI7CisJdHIxIHw9IFNEUkFNX1RSMV9SRENEX1JDRF8xXzI7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICB0cjEgfD0gU0RSQU1fVFIxX1JEQ0RfUkNEXzBfMDsKKwl0cjEgfD0gU0RSQU1fVFIxX1JEQ0RfUkNEXzBfMDsKICAgICB9CiAKICAgICAvKgpAQCAtMTU5MywyMSArMTU5MywyMSBAQAogICAgICAqLwogICAgIHRyMSAmPSB+U0RSQU1fVFIxX1JEQ1RfTUFTSzsKICAgICB3aGlsZSAobWF4X2VuZCA+PSAoZGx5X3ZhbDw8MSkpIHsKLSAgICAgICAgbWF4X2VuZCAtPSAoZGx5X3ZhbDw8MSk7Ci0gICAgICAgIG1heF9zdGFydCAtPSAoZGx5X3ZhbDw8MSk7CisJbWF4X2VuZCAtPSAoZGx5X3ZhbDw8MSk7CisJbWF4X3N0YXJ0IC09IChkbHlfdmFsPDwxKTsKICAgICB9CiAKICAgICByZGNsdF9hdmVyYWdlID0gKChtYXhfc3RhcnQgKyBtYXhfZW5kKSA+PiAxKTsKICAgICBpZiAocmRjbHRfYXZlcmFnZSA+PSAweDYwKQotICAgICAgICB3aGlsZSgxKTsKKwl3aGlsZSgxKTsKIAogICAgIGlmIChyZGNsdF9hdmVyYWdlIDwgMCkgewotICAgICAgICByZGNsdF9hdmVyYWdlID0gMDsKKwlyZGNsdF9hdmVyYWdlID0gMDsKICAgICB9CiAKICAgICBpZiAocmRjbHRfYXZlcmFnZSA+PSBkbHlfdmFsKSB7Ci0gICAgICAgIHJkY2x0X2F2ZXJhZ2UgLT0gZGx5X3ZhbDsKLSAgICAgICAgdHIxID0gdHIxIF4gU0RSQU1fVFIxX1JEQ0RfTUFTSzsKKwlyZGNsdF9hdmVyYWdlIC09IGRseV92YWw7CisJdHIxID0gdHIxIF4gU0RSQU1fVFIxX1JEQ0RfTUFTSzsKICAgICB9CiAgICAgdHIxIHw9IFNEUkFNX1RSMV9SRENUX0VOQ09ERShyZGNsdF9hdmVyYWdlKTsKIApAQCAtMTYyMSw4ICsxNjIxLDggQEAKIH0KIAogdW5zaWduZWQgbG9uZyBwcm9ncmFtX2J4Y3IodW5zaWduZWQgbG9uZyogZGltbV9wb3B1bGF0ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBpaWMwX2RpbW1fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG51bV9kaW1tX2JhbmtzKQorCQkJICAgdW5zaWduZWQgY2hhciogaWljMF9kaW1tX2FkZHIsCisJCQkgICB1bnNpZ25lZCBsb25nICBudW1fZGltbV9iYW5rcykKIHsKICAgICB1bnNpZ25lZCBsb25nIGRpbW1fbnVtOwogICAgIHVuc2lnbmVkIGxvbmcgYnhjcl9udW07CkBAIC0xNjQxLDggKzE2NDEsOCBAQAogICAgICAqIFNldCB0aGUgQnhDUiByZWdzLiAgRmlyc3QsIHdpcGUgb3V0IHRoZSBiYW5rIGNvbmZpZyByZWdpc3RlcnMuCiAgICAgICovCiAgICAgZm9yIChieGNyX251bSA9IDA7IGJ4Y3JfbnVtIDwgTUFYQlhDUjsgYnhjcl9udW0rKykgewotICAgICAgICBtdGRjcihtZW1jZmdhLCBtZW1fYjBjciArIChieGNyX251bSA8PCAyKSk7Ci0gICAgICAgIG10ZGNyKG1lbWNmZ2QsIDB4MDAwMDAwMDApOworCW10ZGNyKG1lbWNmZ2EsIG1lbV9iMGNyICsgKGJ4Y3JfbnVtIDw8IDIpKTsKKwltdGRjcihtZW1jZmdkLCAweDAwMDAwMDAwKTsKICAgICB9CiAKICAgICAvKgpAQCAtMTY1MSwxMDYgKzE2NTEsMTA2IEBACiAgICAgYmFua19iYXNlX2FkZHIgPSBDRkdfU0RSQU1fQkFTRTsKIAogICAgIGZvciAoZGltbV9udW0gPSAwOyBkaW1tX251bSA8IG51bV9kaW1tX2JhbmtzOyBkaW1tX251bSsrKSB7Ci0gICAgICAgIGlmIChkaW1tX3BvcHVsYXRlZFtkaW1tX251bV0gPT0gVFJVRSkgewotICAgICAgICAgICAgbnVtX3Jvd19hZGRyID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAzKTsKLSAgICAgICAgICAgIG51bV9jb2xfYWRkciA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgNCk7Ci0gICAgICAgICAgICBudW1fYmFua3MgICAgPSBzcGRfcmVhZChpaWMwX2RpbW1fYWRkcltkaW1tX251bV0sIDUpOwotICAgICAgICAgICAgYmFua19zaXplX2lkID0gc3BkX3JlYWQoaWljMF9kaW1tX2FkZHJbZGltbV9udW1dLCAzMSk7CisJaWYgKGRpbW1fcG9wdWxhdGVkW2RpbW1fbnVtXSA9PSBUUlVFKSB7CisJICAgIG51bV9yb3dfYWRkciA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMyk7CisJICAgIG51bV9jb2xfYWRkciA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgNCk7CisJICAgIG51bV9iYW5rcyAgICA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgNSk7CisJICAgIGJhbmtfc2l6ZV9pZCA9IHNwZF9yZWFkKGlpYzBfZGltbV9hZGRyW2RpbW1fbnVtXSwgMzEpOwogCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogU2V0IHRoZSBTRFJBTTBfQnhDUiByZWdzCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNyID0gMDsKLSAgICAgICAgICAgIGJhbmtfc2l6ZV9ieXRlcyA9IDQgKiAxMDI0ICogMTAyNCAqIGJhbmtfc2l6ZV9pZDsKLSAgICAgICAgICAgIHN3aXRjaCAoYmFua19zaXplX2lkKSB7Ci0gICAgICAgICAgICBjYXNlIDB4MDI6Ci0gICAgICAgICAgICAgICAgY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzg7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4MDQ6Ci0gICAgICAgICAgICAgICAgY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzE2OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDA4OgotICAgICAgICAgICAgICAgIGNyIHw9IFNEUkFNX0JYQ1JfU0RTWl8zMjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHgxMDoKLSAgICAgICAgICAgICAgICBjciB8PSBTRFJBTV9CWENSX1NEU1pfNjQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4MjA6Ci0gICAgICAgICAgICAgICAgY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzEyODsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMHg0MDoKLSAgICAgICAgICAgICAgICBjciB8PSBTRFJBTV9CWENSX1NEU1pfMjU2OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAweDgwOgotICAgICAgICAgICAgICAgIGNyIHw9IFNEUkFNX0JYQ1JfU0RTWl81MTI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHByaW50ZigiRERSLVNEUkFNOiBESU1NICVsdSBCeENSIGNvbmZpZ3VyYXRpb24uXG4iLAotICAgICAgICAgICAgICAgICAgICBkaW1tX251bSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFUlJPUjogVW5zdXBwb3J0ZWQgdmFsdWUgZm9yIHRoZSBiYW5rc2l6ZTogJWQuXG4iLAotICAgICAgICAgICAgICAgICAgIGJhbmtfc2l6ZV9pZCk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJSZXBsYWNlIHRoZSBESU1NIG1vZHVsZSB3aXRoIGEgc3VwcG9ydGVkIERJTU0uXG5cbiIpOwotICAgICAgICAgICAgICAgIGhhbmcoKTsKLSAgICAgICAgICAgIH0KKwkgICAgLyoKKwkgICAgICogU2V0IHRoZSBTRFJBTTBfQnhDUiByZWdzCisJICAgICAqLworCSAgICBjciA9IDA7CisJICAgIGJhbmtfc2l6ZV9ieXRlcyA9IDQgKiAxMDI0ICogMTAyNCAqIGJhbmtfc2l6ZV9pZDsKKwkgICAgc3dpdGNoIChiYW5rX3NpemVfaWQpIHsKKwkgICAgY2FzZSAweDAyOgorCQljciB8PSBTRFJBTV9CWENSX1NEU1pfODsKKwkJYnJlYWs7CisJICAgIGNhc2UgMHgwNDoKKwkJY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzE2OworCQlicmVhazsKKwkgICAgY2FzZSAweDA4OgorCQljciB8PSBTRFJBTV9CWENSX1NEU1pfMzI7CisJCWJyZWFrOworCSAgICBjYXNlIDB4MTA6CisJCWNyIHw9IFNEUkFNX0JYQ1JfU0RTWl82NDsKKwkJYnJlYWs7CisJICAgIGNhc2UgMHgyMDoKKwkJY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzEyODsKKwkJYnJlYWs7CisJICAgIGNhc2UgMHg0MDoKKwkJY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzI1NjsKKwkJYnJlYWs7CisJICAgIGNhc2UgMHg4MDoKKwkJY3IgfD0gU0RSQU1fQlhDUl9TRFNaXzUxMjsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCXByaW50ZigiRERSLVNEUkFNOiBESU1NICVsdSBCeENSIGNvbmZpZ3VyYXRpb24uXG4iLAorCQkgICAgZGltbV9udW0pOworCQlwcmludGYoIkVSUk9SOiBVbnN1cHBvcnRlZCB2YWx1ZSBmb3IgdGhlIGJhbmtzaXplOiAlZC5cbiIsCisJCSAgIGJhbmtfc2l6ZV9pZCk7CisJCXByaW50ZigiUmVwbGFjZSB0aGUgRElNTSBtb2R1bGUgd2l0aCBhIHN1cHBvcnRlZCBESU1NLlxuXG4iKTsKKwkJaGFuZygpOworCSAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAobnVtX2NvbF9hZGRyKSB7Ci0gICAgICAgICAgICBjYXNlIDB4MDg6Ci0gICAgICAgICAgICAgICAgY3IgfD0gU0RSQU1fQlhDUl9TREFNXzE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4MDk6Ci0gICAgICAgICAgICAgICAgY3IgfD0gU0RSQU1fQlhDUl9TREFNXzI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4MEE6Ci0gICAgICAgICAgICAgICAgY3IgfD0gU0RSQU1fQlhDUl9TREFNXzM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDB4MEI6Ci0gICAgICAgICAgICAgICAgY3IgfD0gU0RSQU1fQlhDUl9TREFNXzQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHByaW50ZigiRERSLVNEUkFNOiBESU1NICVsdSBCeENSIGNvbmZpZ3VyYXRpb24uXG4iLAotICAgICAgICAgICAgICAgICAgIGRpbW1fbnVtKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIkVSUk9SOiBVbnN1cHBvcnRlZCB2YWx1ZSBmb3IgbnVtYmVyIG9mICIKLSAgICAgICAgICAgICAgICAgICAiY29sdW1uIGFkZHJlc3NlczogJWQuXG4iLCBudW1fY29sX2FkZHIpOwotICAgICAgICAgICAgICAgIHByaW50ZigiUmVwbGFjZSB0aGUgRElNTSBtb2R1bGUgd2l0aCBhIHN1cHBvcnRlZCBESU1NLlxuXG4iKTsKLSAgICAgICAgICAgICAgICBoYW5nKCk7Ci0gICAgICAgICAgICB9CisJICAgIHN3aXRjaCAobnVtX2NvbF9hZGRyKSB7CisJICAgIGNhc2UgMHgwODoKKwkJY3IgfD0gU0RSQU1fQlhDUl9TREFNXzE7CisJCWJyZWFrOworCSAgICBjYXNlIDB4MDk6CisJCWNyIHw9IFNEUkFNX0JYQ1JfU0RBTV8yOworCQlicmVhazsKKwkgICAgY2FzZSAweDBBOgorCQljciB8PSBTRFJBTV9CWENSX1NEQU1fMzsKKwkJYnJlYWs7CisJICAgIGNhc2UgMHgwQjoKKwkJY3IgfD0gU0RSQU1fQlhDUl9TREFNXzQ7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlwcmludGYoIkREUi1TRFJBTTogRElNTSAlbHUgQnhDUiBjb25maWd1cmF0aW9uLlxuIiwKKwkJICAgZGltbV9udW0pOworCQlwcmludGYoIkVSUk9SOiBVbnN1cHBvcnRlZCB2YWx1ZSBmb3IgbnVtYmVyIG9mICIKKwkJICAgImNvbHVtbiBhZGRyZXNzZXM6ICVkLlxuIiwgbnVtX2NvbF9hZGRyKTsKKwkJcHJpbnRmKCJSZXBsYWNlIHRoZSBESU1NIG1vZHVsZSB3aXRoIGEgc3VwcG9ydGVkIERJTU0uXG5cbiIpOworCQloYW5nKCk7CisJICAgIH0KIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIGVuYWJsZSB0aGUgYmFuawotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjciB8PSBTRFJBTV9CWENSX1NEQkU7CisJICAgIC8qCisJICAgICAqIGVuYWJsZSB0aGUgYmFuaworCSAgICAgKi8KKwkgICAgY3IgfD0gU0RSQU1fQlhDUl9TREJFOwogCi0gICAgICAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgfCBUaGlzIG5leHQgc2VjdGlvbiBpcyBoYXJkd2FyZSBkZXBlbmRlbnQgYW5kIG11c3QgYmUgcHJvZ3JhbW1lZAotICAgICAgICAgICAgfCB0byBtYXRjaCB0aGUgaGFyZHdhcmUuCi0gICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICAgICAgICAgICAgaWYgKGRpbW1fbnVtID09IDApIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2JhbmtzOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgbXRkY3IobWVtY2ZnYSwgbWVtX2IwY3IgKyAoaSA8PCAyKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSBtZmRjcihtZW1jZmdkKSAmIH4oU0RSQU1fQlhDUl9TREJBX01BU0sgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNEUkFNX0JYQ1JfU0RTWl9NQVNLIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRFJBTV9CWENSX1NEQU1fTUFTSyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RSQU1fQlhDUl9TREJFKTsKLSAgICAgICAgICAgICAgICAgICAgY3IgfD0gdGVtcDsKLSAgICAgICAgICAgICAgICAgICAgY3IgfD0gYmFua19iYXNlX2FkZHIgJiBTRFJBTV9CWENSX1NEQkFfTUFTSzsKLSAgICAgICAgICAgICAgICAgICAgbXRkY3IobWVtY2ZnZCwgY3IpOwotICAgICAgICAgICAgICAgICAgICBiYW5rX2Jhc2VfYWRkciArPSBiYW5rX3NpemVfYnl0ZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bV9iYW5rczsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG10ZGNyKG1lbWNmZ2EsIG1lbV9iMmNyICsgKGkgPDwgMikpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gbWZkY3IobWVtY2ZnZCkgJiB+KFNEUkFNX0JYQ1JfU0RCQV9NQVNLIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRFJBTV9CWENSX1NEU1pfTUFTSyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RSQU1fQlhDUl9TREFNX01BU0sgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNEUkFNX0JYQ1JfU0RCRSk7Ci0gICAgICAgICAgICAgICAgICAgIGNyIHw9IHRlbXA7Ci0gICAgICAgICAgICAgICAgICAgIGNyIHw9IGJhbmtfYmFzZV9hZGRyICYgU0RSQU1fQlhDUl9TREJBX01BU0s7Ci0gICAgICAgICAgICAgICAgICAgIG10ZGNyKG1lbWNmZ2QsIGNyKTsKLSAgICAgICAgICAgICAgICAgICAgYmFua19iYXNlX2FkZHIgKz0gYmFua19zaXplX2J5dGVzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCSAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICB8IFRoaXMgbmV4dCBzZWN0aW9uIGlzIGhhcmR3YXJlIGRlcGVuZGVudCBhbmQgbXVzdCBiZSBwcm9ncmFtbWVkCisJICAgIHwgdG8gbWF0Y2ggdGhlIGhhcmR3YXJlLgorCSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCSAgICBpZiAoZGltbV9udW0gPT0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2JhbmtzOyBpKyspIHsKKwkJICAgIG10ZGNyKG1lbWNmZ2EsIG1lbV9iMGNyICsgKGkgPDwgMikpOworCQkgICAgdGVtcCA9IG1mZGNyKG1lbWNmZ2QpICYgfihTRFJBTV9CWENSX1NEQkFfTUFTSyB8CisJCQkJCSAgICAgIFNEUkFNX0JYQ1JfU0RTWl9NQVNLIHwKKwkJCQkJICAgICAgU0RSQU1fQlhDUl9TREFNX01BU0sgfAorCQkJCQkgICAgICBTRFJBTV9CWENSX1NEQkUpOworCQkgICAgY3IgfD0gdGVtcDsKKwkJICAgIGNyIHw9IGJhbmtfYmFzZV9hZGRyICYgU0RSQU1fQlhDUl9TREJBX01BU0s7CisJCSAgICBtdGRjcihtZW1jZmdkLCBjcik7CisJCSAgICBiYW5rX2Jhc2VfYWRkciArPSBiYW5rX3NpemVfYnl0ZXM7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9iYW5rczsgaSsrKSB7CisJCSAgICBtdGRjcihtZW1jZmdhLCBtZW1fYjJjciArIChpIDw8IDIpKTsKKwkJICAgIHRlbXAgPSBtZmRjcihtZW1jZmdkKSAmIH4oU0RSQU1fQlhDUl9TREJBX01BU0sgfAorCQkJCQkgICAgICBTRFJBTV9CWENSX1NEU1pfTUFTSyB8CisJCQkJCSAgICAgIFNEUkFNX0JYQ1JfU0RBTV9NQVNLIHwKKwkJCQkJICAgICAgU0RSQU1fQlhDUl9TREJFKTsKKwkJICAgIGNyIHw9IHRlbXA7CisJCSAgICBjciB8PSBiYW5rX2Jhc2VfYWRkciAmIFNEUkFNX0JYQ1JfU0RCQV9NQVNLOworCQkgICAgbXRkY3IobWVtY2ZnZCwgY3IpOworCQkgICAgYmFua19iYXNlX2FkZHIgKz0gYmFua19zaXplX2J5dGVzOworCQl9CisJICAgIH0KKwl9CiAgICAgfQogCiAgICAgcmV0dXJuKGJhbmtfYmFzZV9hZGRyKTsKQEAgLTE3NzUsMjYgKzE3NzUsMjYgQEAKICAgICBiYW5rX2Jhc2VfYWRkciA9IENGR19TRFJBTV9CQVNFOwogCiAgICAgaWYgKChjZmcwICYgU0RSQU1fQ0ZHMF9NQ0hLX01BU0spICE9IFNEUkFNX0NGRzBfTUNIS19OT04pIHsKLSAgICAgICAgbXRzZHJhbShtZW1fY2ZnMCwgKGNmZzAgJiB+U0RSQU1fQ0ZHMF9NQ0hLX01BU0spIHwKLSAgICAgICAgICAgIFNEUkFNX0NGRzBfTUNIS19HRU4pOworCW10c2RyYW0obWVtX2NmZzAsIChjZmcwICYgflNEUkFNX0NGRzBfTUNIS19NQVNLKSB8CisJICAgIFNEUkFNX0NGRzBfTUNIS19HRU4pOwogCi0gICAgICAgIGlmICgoY2ZnMCAmIFNEUkFNX0NGRzBfRE1XRF9NQVNLKSA9PSBTRFJBTV9DRkcwX0RNV0RfMzIpIHsKLSAgICAgICAgICAgIGFkZHJlc3NfaW5jcmVtZW50ID0gNDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFkZHJlc3NfaW5jcmVtZW50ID0gODsKLSAgICAgICAgfQorCWlmICgoY2ZnMCAmIFNEUkFNX0NGRzBfRE1XRF9NQVNLKSA9PSBTRFJBTV9DRkcwX0RNV0RfMzIpIHsKKwkgICAgYWRkcmVzc19pbmNyZW1lbnQgPSA0OworCX0KKwllbHNlIHsKKwkgICAgYWRkcmVzc19pbmNyZW1lbnQgPSA4OworCX0KIAotICAgICAgICBjdXJyZW50X2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykoYmFua19iYXNlX2FkZHIpOwotICAgICAgICBlbmRfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKShiYW5rX2Jhc2VfYWRkcikgKyBudW1fYnl0ZXM7CisJY3VycmVudF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpKGJhbmtfYmFzZV9hZGRyKTsKKwllbmRfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKShiYW5rX2Jhc2VfYWRkcikgKyBudW1fYnl0ZXM7CiAKLSAgICAgICAgd2hpbGUgKGN1cnJlbnRfYWRkcmVzcyA8IGVuZF9hZGRyZXNzKSB7Ci0gICAgICAgICAgICAqKCh1bnNpZ25lZCBsb25nKiljdXJyZW50X2FkZHJlc3MpID0gMHgwMDAwMDAwMDsKLSAgICAgICAgICAgIGN1cnJlbnRfYWRkcmVzcyArPSBhZGRyZXNzX2luY3JlbWVudDsKLSAgICAgICAgfQorCXdoaWxlIChjdXJyZW50X2FkZHJlc3MgPCBlbmRfYWRkcmVzcykgeworCSAgICAqKCh1bnNpZ25lZCBsb25nKiljdXJyZW50X2FkZHJlc3MpID0gMHgwMDAwMDAwMDsKKwkgICAgY3VycmVudF9hZGRyZXNzICs9IGFkZHJlc3NfaW5jcmVtZW50OworCX0KIAotICAgICAgICBtdHNkcmFtKG1lbV9jZmcwLCAoY2ZnMCAmIH5TRFJBTV9DRkcwX01DSEtfTUFTSykgfAotICAgICAgICAgICAgU0RSQU1fQ0ZHMF9NQ0hLX0NISyk7CisJbXRzZHJhbShtZW1fY2ZnMCwgKGNmZzAgJiB+U0RSQU1fQ0ZHMF9NQ0hLX01BU0spIHwKKwkgICAgU0RSQU1fQ0ZHMF9NQ0hLX0NISyk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3NwZWVkLmMgYi9jcHUvcHBjNHh4L3NwZWVkLmMKaW5kZXggZmRlZmJiNi4uNzI2MzIyNyAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9zcGVlZC5jCisrKyBiL2NwdS9wcGM0eHgvc3BlZWQuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAJc3lzSW5mby0+ZnJlcVByb2Nlc3NvciA9IHN5c0luZm8tPmZyZXFWQ09NaHovc3lzSW5mby0+cGxsRndkRGl2QTsKIAlzeXNJbmZvLT5mcmVxUExCID0gc3lzSW5mby0+ZnJlcVZDT01oei9zeXNJbmZvLT5wbGxGd2REaXZCOwogICAgIGlmKCBnZXRfcHZyKCkgPT0gUFZSXzQ0MEdQX1JCICkgLyogUmV2IEIgZGl2cyBhbiBleHRyYSAyIC0tIGdlZXohICovCi0gICAgICAgIHN5c0luZm8tPmZyZXFQTEIgPj49IDE7CisJc3lzSW5mby0+ZnJlcVBMQiA+Pj0gMTsKIAlzeXNJbmZvLT5mcmVxT1BCID0gc3lzSW5mby0+ZnJlcVBMQi9zeXNJbmZvLT5wbGxPcGJEaXY7CiAJc3lzSW5mby0+ZnJlcUVQQiA9IHN5c0luZm8tPmZyZXFPUEIvc3lzSW5mby0+cGxsRXh0QnVzRGl2OwogCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3N0YXJ0LlMgYi9jcHUvcHBjNHh4L3N0YXJ0LlMKaW5kZXggYzZhOWVkYS4uYWE4NTdkMCAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9zdGFydC5TCisrKyBiL2NwdS9wcGM0eHgvc3RhcnQuUwpAQCAtNTU2LDkgKzU1Niw5IEBACiAJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCS8qIERNQSBTdGF0dXMsIGNsZWFyIHRvIGNvbWUgdXAgY2xlYW4gKi8KIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgIGFkZGlzICAgcjMscjAsIDB4RkZGRiAgICAgICAgIC8qIENsZWFyIGFsbCBleGlzdGluZyBETUEgc3RhdHVzICovCi0gICAgICAgIG9yaSAgICAgcjMscjMsIDB4RkZGRgotICAgICAgICBtdGRjciAgIGRtYXNyLCByMworCWFkZGlzICAgcjMscjAsIDB4RkZGRiAgICAgICAgIC8qIENsZWFyIGFsbCBleGlzdGluZyBETUEgc3RhdHVzICovCisJb3JpICAgICByMyxyMywgMHhGRkZGCisJbXRkY3IgICBkbWFzciwgcjMKIAogCWJsCXBwYzQwNWVwX2luaXQgICAgICAgICAvKiBkbyBwcGM0MDVlcCBzcGVjaWZpYyBpbml0ICovCiAjZW5kaWYgLyogQ09ORklHXzQwNUVQICovCkBAIC01NjgsMjEgKzU2OCwyMSBAQAogCSAqIFNldHVwIE9DTSAtIE9uIENoaXAgTWVtb3J5CiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJLyogU2V0dXAgT0NNICovCi0gCWxpcwlyMCwgMHg3RkZGCi0gCW9yaQlyMCwgcjAsIDB4RkZGRgotIAltZmRjcglyMywgb2NtaXNjbnRsIAkJLyogZ2V0IGluc3RyLXNpZGUgSVJBTSBjb25maWcgKi8KLSAJbWZkY3IJcjQsIG9jbWRzY250bAkvKiBnZXQgZGF0YS1zaWRlIElSQU0gY29uZmlnICovCi0gCWFuZAlyMywgcjMsIHIwCS8qIGRpc2FibGUgZGF0YS1zaWRlIElSQU0gKi8KLSAJYW5kCXI0LCByNCwgcjAJLyogZGlzYWJsZSBkYXRhLXNpZGUgSVJBTSAqLwotIAltdGRjcglvY21pc2NudGwsIHIzCS8qIHNldCBpbnN0ci1zaWRlIElSQU0gY29uZmlnICovCi0gCW10ZGNyCW9jbWRzY250bCwgcjQJLyogc2V0IGRhdGEtc2lkZSBJUkFNIGNvbmZpZyAqLwotIAlpc3luYworCWxpcwlyMCwgMHg3RkZGCisJb3JpCXIwLCByMCwgMHhGRkZGCisJbWZkY3IJcjMsIG9jbWlzY250bCAJCS8qIGdldCBpbnN0ci1zaWRlIElSQU0gY29uZmlnICovCisJbWZkY3IJcjQsIG9jbWRzY250bAkvKiBnZXQgZGF0YS1zaWRlIElSQU0gY29uZmlnICovCisJYW5kCXIzLCByMywgcjAJLyogZGlzYWJsZSBkYXRhLXNpZGUgSVJBTSAqLworCWFuZAlyNCwgcjQsIHIwCS8qIGRpc2FibGUgZGF0YS1zaWRlIElSQU0gKi8KKwltdGRjcglvY21pc2NudGwsIHIzCS8qIHNldCBpbnN0ci1zaWRlIElSQU0gY29uZmlnICovCisJbXRkY3IJb2NtZHNjbnRsLCByNAkvKiBzZXQgZGF0YS1zaWRlIElSQU0gY29uZmlnICovCisJaXN5bmMKIAogCWFkZGlzCXIzLCAwLCBDRkdfT0NNX0RBVEFfQUREUkBoIC8qIE9DTSBsb2NhdGlvbiAqLwogCW10ZGNyCW9jbWRzYXJjLCByMwogCWFkZGlzCXI0LCAwLCAweEMwMDAJCS8qIE9DTSBkYXRhIGFyZWEgZW5hYmxlZCAqLwogCW10ZGNyCW9jbWRzY250bCwgcjQKLSAJaXN5bmMKKwlpc3luYwogI2VuZGlmCiAKIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC02OTcsNyArNjk3LDcgQEAKIAogCUdFVF9HT1QJCQkvKiBpbml0aWFsaXplIEdPVCBhY2Nlc3MJCQkqLwogCi0gICAgICAgCWJsCWNwdV9pbml0X2YJLyogcnVuIGxvdy1sZXZlbCBDUFUgaW5pdCBjb2RlICAgICAoZnJvbSBGbGFzaCkJKi8KKwlibAljcHVfaW5pdF9mCS8qIHJ1biBsb3ctbGV2ZWwgQ1BVIGluaXQgY29kZSAgICAgKGZyb20gRmxhc2gpCSovCiAKIAkvKiBORVZFUiBSRVRVUk5TISAqLwogCWJsCWJvYXJkX2luaXRfZgkvKiBydW4gZmlyc3QgcGFydCBvZiBpbml0IGNvZGUgKGZyb20gRmxhc2gpCSovCkBAIC0xNDUxLDEwMCArMTQ1MSwxMDAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZmRlZiBDT05GSUdfNDA1RVAKIHBwYzQwNWVwX2luaXQ6Ci0gICAgICAgIC8qCi0gICAgICAgICEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAhIENoZWNrIEZQR0EgZm9yIFBDSSBpbnRlcm5hbC9leHRlcm5hbCBhcmJpdHJhdGlvbgotICAgICAgICAhICAgSWYgYm9hcmQgaXMgc2V0IHRvIGludGVybmFsIGFyYml0cmF0aW9uLCB1cGRhdGUgY3BjMF9wY2kKLSAgICAgICAgIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLyoKKwkhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkhIENoZWNrIEZQR0EgZm9yIFBDSSBpbnRlcm5hbC9leHRlcm5hbCBhcmJpdHJhdGlvbgorCSEgICBJZiBib2FyZCBpcyBzZXQgdG8gaW50ZXJuYWwgYXJiaXRyYXRpb24sIHVwZGF0ZSBjcGMwX3BjaQorCSEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSovCi0gICAgICAgIGFkZGkgICAgcjMsMCxDUEMwX1BDSV9IT1NUX0NGR19FTgorCWFkZGkgICAgcjMsMCxDUEMwX1BDSV9IT1NUX0NGR19FTgogI2lmZGVmIENPTkZJR19CVUJJTkdBNDA1RVAKLSAgICAgICAgYWRkaXMgICByNSxyMCxGUEdBX1JFRzFAaCAgICAgIC8qIHNldCBvZmZzZXQgZm9yIEZQR0FfUkVHMSAqLwotICAgICAgICBvcmkgICAgIHI1LHI1LEZQR0FfUkVHMUBsCi0gICAgICAgIGxieiAgICAgcjUsMHgwKHI1KSAgICAgICAgICAgICAgLyogcmVhZCB0byBnZXQgUENJIGFyYiBzZWxlY3Rpb24gKi8KLSAgICAgICAgYW5kaS4gICByNixyNSxGUEdBX1JFRzFfUENJX0lOVF9BUkIgIC8qIHVzaW5nIGludGVybmFsIGFyYml0ZXIgPyovCi0gICAgICAgIGJlcSAgICAgLi5wY2lfY2ZnX3NldCAgICAgICAgICAgICAvKiBpZiBub3Qgc2V0LCB0aGVuIGJ5cGFzcyByZWcgd3JpdGUqLworCWFkZGlzICAgcjUscjAsRlBHQV9SRUcxQGggICAgICAvKiBzZXQgb2Zmc2V0IGZvciBGUEdBX1JFRzEgKi8KKwlvcmkgICAgIHI1LHI1LEZQR0FfUkVHMUBsCisJbGJ6ICAgICByNSwweDAocjUpICAgICAgICAgICAgICAvKiByZWFkIHRvIGdldCBQQ0kgYXJiIHNlbGVjdGlvbiAqLworCWFuZGkuICAgcjYscjUsRlBHQV9SRUcxX1BDSV9JTlRfQVJCICAvKiB1c2luZyBpbnRlcm5hbCBhcmJpdGVyID8qLworCWJlcSAgICAgLi5wY2lfY2ZnX3NldCAgICAgICAgICAgICAvKiBpZiBub3Qgc2V0LCB0aGVuIGJ5cGFzcyByZWcgd3JpdGUqLwogI2VuZGlmCi0gICAgICAgIG9yaSAgICAgcjMscjMsQ1BDMF9QQ0lfQVJCSVRfRU4KKwlvcmkgICAgIHIzLHIzLENQQzBfUENJX0FSQklUX0VOCiAuLnBjaV9jZmdfc2V0OgotICAgICAgICBtdGRjciAgIENQQzBfUENJLCByMyAgICAgICAgICAgICAvKiBFbmFibGUgaW50ZXJuYWwgYXJiaXRlciovCisJbXRkY3IgICBDUEMwX1BDSSwgcjMgICAgICAgICAgICAgLyogRW5hYmxlIGludGVybmFsIGFyYml0ZXIqLwogCi0gICAgICAgIC8qCi0gICAgICAgICEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAhIENoZWNrIHRvIHNlZSBpZiBjaGlwIGlzIGluIGJ5cGFzcyBtb2RlLgotICAgICAgICAhIElmIHNvLCB3cml0ZSBzdG9yZWQgQ1BDMF9QTExNUjAgYW5kIENQQzBfUExMTVIxIHZhbHVlcyBhbmQgcGVyZm9ybSBhCi0gICAgICAgICEgQ1BVIHJlc2V0ICAgT3RoZXJ3aXNlLCBza2lwIHRoaXMgc3RlcCBhbmQga2VlcCBnb2luZy4KLSAgICAgICAgISBOb3RlOiAgUnVubmluZyBCSU9TIGluIGJ5cGFzcyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgc2luY2UgUExCIHNwZWVkCi0gICAgICAgICEgICAgICAgIHdpbGwgbm90IGJlIGZhc3QgZW5vdWdoIGZvciB0aGUgU0RSQU0gKG1pbiA2Nk1IeikKLSAgICAgICAgIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLyoKKwkhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkhIENoZWNrIHRvIHNlZSBpZiBjaGlwIGlzIGluIGJ5cGFzcyBtb2RlLgorCSEgSWYgc28sIHdyaXRlIHN0b3JlZCBDUEMwX1BMTE1SMCBhbmQgQ1BDMF9QTExNUjEgdmFsdWVzIGFuZCBwZXJmb3JtIGEKKwkhIENQVSByZXNldCAgIE90aGVyd2lzZSwgc2tpcCB0aGlzIHN0ZXAgYW5kIGtlZXAgZ29pbmcuCisJISBOb3RlOiAgUnVubmluZyBCSU9TIGluIGJ5cGFzcyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgc2luY2UgUExCIHNwZWVkCisJISAgICAgICAgd2lsbCBub3QgYmUgZmFzdCBlbm91Z2ggZm9yIHRoZSBTRFJBTSAobWluIDY2TUh6KQorCSEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSovCi0gICAgICAgIG1mZGNyICAgcjUsIENQQzBfUExMTVIxCi0gICAgICAgIHJsd2lubSAgcjQscjUsMSwweDEgICAgICAgICAgICAvKiBnZXQgc3lzdGVtIGNsb2NrIHNvdXJjZSAoU1NDUykgKi8KLSAgICAgICAgY21waSAgICBjcjAsMCxyNCwweDEKKwltZmRjciAgIHI1LCBDUEMwX1BMTE1SMQorCXJsd2lubSAgcjQscjUsMSwweDEgICAgICAgICAgICAvKiBnZXQgc3lzdGVtIGNsb2NrIHNvdXJjZSAoU1NDUykgKi8KKwljbXBpICAgIGNyMCwwLHI0LDB4MQogCi0gICAgICAgIGJlcSAgICBwbGxfZG9uZSAgICAgICAgICAgICAgICAgICAvKiBpZiBTU0NTID1iJzEnIHRoZW4gUExMIGhhcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWxyZWFkeSBiZWVuIHNldCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW5kIENQVSBoYXMgYmVlbiByZXNldCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc28gc2tpcCB0byBuZXh0IHNlY3Rpb24gKi8KKwliZXEgICAgcGxsX2RvbmUgICAgICAgICAgICAgICAgICAgLyogaWYgU1NDUyA9YicxJyB0aGVuIFBMTCBoYXMgKi8KKwkJCQkJICAvKiBhbHJlYWR5IGJlZW4gc2V0ICovCisJCQkJCSAgLyogYW5kIENQVSBoYXMgYmVlbiByZXNldCAqLworCQkJCQkgIC8qIHNvIHNraXAgdG8gbmV4dCBzZWN0aW9uICovCiAKICNpZmRlZiBDT05GSUdfQlVCSU5HQTQwNUVQCiAJLyoKLSAgICAgICAgIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICEgUmVhZCBOVlJBTSB0byBnZXQgdmFsdWUgdG8gd3JpdGUgaW4gUExMTVIuCi0gICAgICAgICEgSWYgdmFsdWUgaGFzIG5vdCBiZWVuIGNvcnJlY3RseSBzYXZlZCwgd3JpdGUgZGVmYXVsdCB2YWx1ZQotICAgICAgICAhIERlZmF1bHQgY29uZmlnIHZhbHVlcyAoYXNzdW1pbmcgb24tYm9hcmQgMzNNSHogU1lTX0NMSykgYXJlIGFib3ZlLgotICAgICAgICAhIFNlZSBDUFVfREVGQVVMVF8yMDAgYW5kIENQVV9ERUZBVUxUXzI2NiBhYm92ZS4KLSAgICAgICAgIQotICAgICAgICAhIFdBUk5JTkc6ICBUaGlzIGNvZGUgYXNzdW1lcyB0aGUgZmlyc3QgdGhyZWUgd29yZHMgaW4gdGhlIG52cmFtX3QKLSAgICAgICAgISAgICAgICAgICAgc3RydWN0dXJlIGluIG9wZW5iaW9zLmguICBDaGFuZ2luZyB0aGUgYmVnaW5uaW5nIG9mCi0gICAgICAgICEgICAgICAgICAgIHRoZSBzdHJ1Y3R1cmUgd2lsbCBicmVhayB0aGlzIGNvZGUuCi0gICAgICAgICEKLSAgICAgICAgIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJISBSZWFkIE5WUkFNIHRvIGdldCB2YWx1ZSB0byB3cml0ZSBpbiBQTExNUi4KKwkhIElmIHZhbHVlIGhhcyBub3QgYmVlbiBjb3JyZWN0bHkgc2F2ZWQsIHdyaXRlIGRlZmF1bHQgdmFsdWUKKwkhIERlZmF1bHQgY29uZmlnIHZhbHVlcyAoYXNzdW1pbmcgb24tYm9hcmQgMzNNSHogU1lTX0NMSykgYXJlIGFib3ZlLgorCSEgU2VlIENQVV9ERUZBVUxUXzIwMCBhbmQgQ1BVX0RFRkFVTFRfMjY2IGFib3ZlLgorCSEKKwkhIFdBUk5JTkc6ICBUaGlzIGNvZGUgYXNzdW1lcyB0aGUgZmlyc3QgdGhyZWUgd29yZHMgaW4gdGhlIG52cmFtX3QKKwkhICAgICAgICAgICBzdHJ1Y3R1cmUgaW4gb3BlbmJpb3MuaC4gIENoYW5naW5nIHRoZSBiZWdpbm5pbmcgb2YKKwkhICAgICAgICAgICB0aGUgc3RydWN0dXJlIHdpbGwgYnJlYWsgdGhpcyBjb2RlLgorCSEKKwkhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkqLwotICAgICAgICBhZGRpcyAgIHIzLDAsTlZSQU1fQkFTRUBoCi0gICAgICAgIGFkZGkgICAgcjMscjMsTlZSQU1fQkFTRUBsCisJYWRkaXMgICByMywwLE5WUkFNX0JBU0VAaAorCWFkZGkgICAgcjMscjMsTlZSQU1fQkFTRUBsCiAKLSAgICAgICAgbHd6ICAgICByNCwgMChyMykKLSAgICAgICAgYWRkaXMgICByNSwwLE5WUlZGWTFAaAotICAgICAgICBhZGRpICAgIHI1LHI1LE5WUlZGWTFAbAotICAgICAgICBjbXAgICAgIGNyMCwwLHI0LHI1ICAgICAgICAgICAgLyogQ29tcGFyZSAxc3QgTlZSQU0gTWFnaWMgbnVtYmVyKi8KLSAgICAgICAgYm5lICAgICAuLm5vX3BsbHNldAotICAgICAgICBhZGRpICAgIHIzLHIzLDQKLSAgICAgICAgbHd6ICAgICByNCwgMChyMykKLSAgICAgICAgYWRkaXMgICByNSwwLE5WUlZGWTJAaAotICAgICAgICBhZGRpICAgIHI1LHI1LE5WUlZGWTJAbAotICAgICAgICBjbXAgICAgIGNyMCwwLHI0LHI1ICAgICAgICAgICAgLyogQ29tcGFyZSAyIE5WUkFNIE1hZ2ljIG51bWJlciAqLwotICAgICAgICBibmUgICAgIC4ubm9fcGxsc2V0Ci0gICAgICAgIGFkZGkgICAgcjMscjMsOCAgICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIGNvbmZfc2l6ZSAqLwotICAgICAgICBsd3ogICAgIHI0LCA0KHIzKSAgICAgICAgICAgICAgIC8qIExvYWQgUExMTVIxIHZhbHVlIGZyb20gTlZSQU0gKi8KLSAgICAgICAgbHd6ICAgICByMywgMChyMykgICAgICAgICAgICAgICAvKiBMb2FkIFBMTE1SMCB2YWx1ZSBmcm9tIE5WUkFNICovCi0gICAgICAgIHJsd2lubSAgcjUscjQsMSwweDEgICAgICAgICAgICAgLyogZ2V0IHN5c3RlbSBjbG9jayBzb3VyY2UgKFNTQ1MpICovCi0gICAgICAgIGNtcGkgICAgIGNyMCwwLHI1LDEgICAgICAgICAgICAgLyogU2VlIGlmIFBMTCBpcyBsb2NrZWQgKi8KLSAgICAgICAgYmVxICAgICBwbGxfd3JpdGUKKwlsd3ogICAgIHI0LCAwKHIzKQorCWFkZGlzICAgcjUsMCxOVlJWRlkxQGgKKwlhZGRpICAgIHI1LHI1LE5WUlZGWTFAbAorCWNtcCAgICAgY3IwLDAscjQscjUgICAgICAgICAgICAvKiBDb21wYXJlIDFzdCBOVlJBTSBNYWdpYyBudW1iZXIqLworCWJuZSAgICAgLi5ub19wbGxzZXQKKwlhZGRpICAgIHIzLHIzLDQKKwlsd3ogICAgIHI0LCAwKHIzKQorCWFkZGlzICAgcjUsMCxOVlJWRlkyQGgKKwlhZGRpICAgIHI1LHI1LE5WUlZGWTJAbAorCWNtcCAgICAgY3IwLDAscjQscjUgICAgICAgICAgICAvKiBDb21wYXJlIDIgTlZSQU0gTWFnaWMgbnVtYmVyICovCisJYm5lICAgICAuLm5vX3BsbHNldAorCWFkZGkgICAgcjMscjMsOCAgICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIGNvbmZfc2l6ZSAqLworCWx3eiAgICAgcjQsIDQocjMpICAgICAgICAgICAgICAgLyogTG9hZCBQTExNUjEgdmFsdWUgZnJvbSBOVlJBTSAqLworCWx3eiAgICAgcjMsIDAocjMpICAgICAgICAgICAgICAgLyogTG9hZCBQTExNUjAgdmFsdWUgZnJvbSBOVlJBTSAqLworCXJsd2lubSAgcjUscjQsMSwweDEgICAgICAgICAgICAgLyogZ2V0IHN5c3RlbSBjbG9jayBzb3VyY2UgKFNTQ1MpICovCisJY21waSAgICAgY3IwLDAscjUsMSAgICAgICAgICAgICAvKiBTZWUgaWYgUExMIGlzIGxvY2tlZCAqLworCWJlcSAgICAgcGxsX3dyaXRlCiAuLm5vX3BsbHNldDoKICNlbmRpZiAvKiBDT05GSUdfQlVCSU5HQTQwNUVQICovCiAKLSAgICAgICAgYWRkaXMgICByMywwLFBMTE1SMF9ERUZBVUxUQGggICAgICAgLyogUExMTVIwIGRlZmF1bHQgdmFsdWUgKi8KLSAgICAgICAgb3JpICAgICByMyxyMyxQTExNUjBfREVGQVVMVEBsICAgICAvKiAqLwotICAgICAgICBhZGRpcyAgIHI0LDAsUExMTVIxX0RFRkFVTFRAaCAgICAgICAvKiBQTExNUjEgZGVmYXVsdCB2YWx1ZSAqLwotICAgICAgICBvcmkgICAgIHI0LHI0LFBMTE1SMV9ERUZBVUxUQGwgICAgIC8qICovCisJYWRkaXMgICByMywwLFBMTE1SMF9ERUZBVUxUQGggICAgICAgLyogUExMTVIwIGRlZmF1bHQgdmFsdWUgKi8KKwlvcmkgICAgIHIzLHIzLFBMTE1SMF9ERUZBVUxUQGwgICAgIC8qICovCisJYWRkaXMgICByNCwwLFBMTE1SMV9ERUZBVUxUQGggICAgICAgLyogUExMTVIxIGRlZmF1bHQgdmFsdWUgKi8KKwlvcmkgICAgIHI0LHI0LFBMTE1SMV9ERUZBVUxUQGwgICAgIC8qICovCiAKLSAgICAgICAgYiAgICAgICBwbGxfd3JpdGUgICAgICAgICAgICAgICAgIC8qIFdyaXRlIHRoZSBDUEMwX1BMTE1SIHdpdGggbmV3IHZhbHVlICovCisJYiAgICAgICBwbGxfd3JpdGUgICAgICAgICAgICAgICAgIC8qIFdyaXRlIHRoZSBDUEMwX1BMTE1SIHdpdGggbmV3IHZhbHVlICovCiAKIHBsbF9kb25lOgotICAgICAgICAvKgotICAgICAgICAhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgISBDbGVhciBTb2Z0IFJlc2V0IFJlZ2lzdGVyCi0gICAgICAgICEgVGhpcyBpcyBuZWVkZWQgdG8gZW5hYmxlIFBDSSBpZiBub3QgYm9vdGluZyBmcm9tIHNlcmlhbCBFUFJPTQotICAgICAgICAhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvKgorCSEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSEgQ2xlYXIgU29mdCBSZXNldCBSZWdpc3RlcgorCSEgVGhpcyBpcyBuZWVkZWQgdG8gZW5hYmxlIFBDSSBpZiBub3QgYm9vdGluZyBmcm9tIHNlcmlhbCBFUFJPTQorCSEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQkqLwotICAgICAgICBhZGRpICAgIHIzLCAwLCAweDAKLSAgICAgICAgbXRkY3IgICBDUEMwX1NSUiwgcjMKKwlhZGRpICAgIHIzLCAwLCAweDAKKwltdGRjciAgIENQQzBfU1JSLCByMwogCi0gICAgICAgIGFkZGlzICAgIHIzLDAsMHgwMDEwCi0gICAgICAgIG10Y3RyICAgcjMKKwlhZGRpcyAgICByMywwLDB4MDAxMAorCW10Y3RyICAgcjMKIHBjaV93YWl0OgotICAgICAgICBiZG56ICAgIHBjaV93YWl0CisJYmRueiAgICBwY2lfd2FpdAogCiAJYmxyCQkJCSAgLyogcmV0dXJuIHRvIG1haW4gY29kZSAqLwogCkBAIC0xNTY1LDQzICsxNTY1LDQzIEBACiAhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiBwbGxfd3JpdGU6Ci0gICAgICAgIG1mZGNyICByNSwgQ1BDMF9VQ1IKLSAgICAgICAgYW5kaXMuIHI1LHI1LDB4RkZGRgotICAgICAgICBvcmkgICAgcjUscjUsMHgwMTAxICAgICAgICAgICAgICAvKiBTdG9wIHRoZSBVQVJUIGNsb2NrcyAqLwotICAgICAgICBtdGRjciAgQ1BDMF9VQ1IscjUgICAgICAgICAgICAgICAvKiBCZWZvcmUgY2hhbmdpbmcgUExMICovCisJbWZkY3IgIHI1LCBDUEMwX1VDUgorCWFuZGlzLiByNSxyNSwweEZGRkYKKwlvcmkgICAgcjUscjUsMHgwMTAxICAgICAgICAgICAgICAvKiBTdG9wIHRoZSBVQVJUIGNsb2NrcyAqLworCW10ZGNyICBDUEMwX1VDUixyNSAgICAgICAgICAgICAgIC8qIEJlZm9yZSBjaGFuZ2luZyBQTEwgKi8KIAotICAgICAgICBtZmRjciAgcjUsIENQQzBfUExMTVIxCi0gICAgICAgIHJsd2lubSByNSxyNSwwLDB4N0ZGRkZGRkYgICAgICAgIC8qIERpc2FibGUgUExMICovCi0gICAgICAgIG10ZGNyICAgQ1BDMF9QTExNUjEscjUKLSAgICAgICAgb3JpcyAgIHI1LHI1LDB4NDAwMCAgICAgICAgICAgICAgLyogU2V0IFBMTCBSZXNldCAqLwotICAgICAgICBtdGRjciAgIENQQzBfUExMTVIxLHI1CisJbWZkY3IgIHI1LCBDUEMwX1BMTE1SMQorCXJsd2lubSByNSxyNSwwLDB4N0ZGRkZGRkYgICAgICAgIC8qIERpc2FibGUgUExMICovCisJbXRkY3IgICBDUEMwX1BMTE1SMSxyNQorCW9yaXMgICByNSxyNSwweDQwMDAgICAgICAgICAgICAgIC8qIFNldCBQTEwgUmVzZXQgKi8KKwltdGRjciAgIENQQzBfUExMTVIxLHI1CiAKLSAgICAgICAgbXRkY3IgICBDUEMwX1BMTE1SMCxyMyAgICAgICAgICAgLyogU2V0IGNsb2NrIGRpdmlkZXJzICovCi0gICAgICAgIHJsd2lubSByNSxyNCwwLDB4M0ZGRkZGRkYgICAgICAgIC8qIFJlc2V0ICYgQnlwYXNzIG5ldyBQTEwgZGl2aWRlcnMgKi8KLSAgICAgICAgb3JpcyAgIHI1LHI1LDB4NDAwMCAgICAgICAgICAgICAgLyogU2V0IFBMTCBSZXNldCAqLwotICAgICAgICBtdGRjciAgIENQQzBfUExMTVIxLHI1ICAgICAgICAgICAvKiBTZXQgY2xvY2sgZGl2aWRlcnMgKi8KLSAgICAgICAgcmx3aW5tIHI1LHI1LDAsMHhCRkZGRkZGRiAgICAgICAgLyogQ2xlYXIgUExMIFJlc2V0ICovCi0gICAgICAgIG10ZGNyICAgQ1BDMF9QTExNUjEscjUKKwltdGRjciAgIENQQzBfUExMTVIwLHIzICAgICAgICAgICAvKiBTZXQgY2xvY2sgZGl2aWRlcnMgKi8KKwlybHdpbm0gcjUscjQsMCwweDNGRkZGRkZGICAgICAgICAvKiBSZXNldCAmIEJ5cGFzcyBuZXcgUExMIGRpdmlkZXJzICovCisJb3JpcyAgIHI1LHI1LDB4NDAwMCAgICAgICAgICAgICAgLyogU2V0IFBMTCBSZXNldCAqLworCW10ZGNyICAgQ1BDMF9QTExNUjEscjUgICAgICAgICAgIC8qIFNldCBjbG9jayBkaXZpZGVycyAqLworCXJsd2lubSByNSxyNSwwLDB4QkZGRkZGRkYgICAgICAgIC8qIENsZWFyIFBMTCBSZXNldCAqLworCW10ZGNyICAgQ1BDMF9QTExNUjEscjUKIAogCQkvKgotICAgICAgICAhIFdhaXQgbWluIG9mIDEwMHVzIGZvciBQTEwgdG8gbG9jay4KLSAgICAgICAgISBTZWUgQ01PUyAyN0UgZGF0YWJvb2sgZm9yIG1vcmUgaW5mby4KLSAgICAgICAgISBBdCAyMDBNSHosIHRoYXQgbWVhbnMgd2FpdGluZyAyMCwwMDAgaW5zdHJ1Y3Rpb25zCisJISBXYWl0IG1pbiBvZiAxMDB1cyBmb3IgUExMIHRvIGxvY2suCisJISBTZWUgQ01PUyAyN0UgZGF0YWJvb2sgZm9yIG1vcmUgaW5mby4KKwkhIEF0IDIwME1IeiwgdGhhdCBtZWFucyB3YWl0aW5nIDIwLDAwMCBpbnN0cnVjdGlvbnMKIAkJICovCi0gICAgICAgIGFkZGkgICAgcjMsMCwyMDAwMCAgICAgICAgICAgICAgLyogMjAwMCA9IDB4NGUyMCAqLwotICAgICAgICBtdGN0ciAgIHIzCisJYWRkaSAgICByMywwLDIwMDAwICAgICAgICAgICAgICAvKiAyMDAwID0gMHg0ZTIwICovCisJbXRjdHIgICByMwogcGxsX3dhaXQ6Ci0gICAgICAgIGJkbnogICAgcGxsX3dhaXQKKwliZG56ICAgIHBsbF93YWl0CiAKLSAgICAgICAgb3JpcyAgIHI1LHI1LDB4ODAwMCAgICAgICAgICAgICAvKiBFbmFibGUgUExMICovCi0gICAgICAgIG10ZGNyICAgQ1BDMF9QTExNUjEscjUgICAgICAgICAgLyogRW5nYWdlICovCisJb3JpcyAgIHI1LHI1LDB4ODAwMCAgICAgICAgICAgICAvKiBFbmFibGUgUExMICovCisJbXRkY3IgICBDUEMwX1BMTE1SMSxyNSAgICAgICAgICAvKiBFbmdhZ2UgKi8KIAotICAgICAgICAvKgotICAgICAgICAgKiBSZXNldCBDUFUgdG8gZ3VhcmFudGVlIHRpbWluZ3MgYXJlIE9LCi0gICAgICAgICAqIE5vdCBzdXJlIGlmIHRoaXMgaXMgbmVlZGVkLi4uCi0gCSAqLwotICAgICAgICBhZGRpcyByMywwLDB4MTAwMAotICAgICAgICBtdHNwciBkYmNyMCxyMyAgICAgICAgICAgICAgIC8qIFRoaXMgd2lsbCBjYXVzZSBhIENQVSBjb3JlIHJlc2V0LCBhbmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGVjdXRpb24gd2lsbCBjb250aW51ZSBmcm9tIHRoZSBwb3dlcm9uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmVjdG9yIG9mIDB4ZmZmZmZmZmMgKi8KKwkvKgorCSAqIFJlc2V0IENQVSB0byBndWFyYW50ZWUgdGltaW5ncyBhcmUgT0sKKwkgKiBOb3Qgc3VyZSBpZiB0aGlzIGlzIG5lZWRlZC4uLgorCSAqLworCWFkZGlzIHIzLDAsMHgxMDAwCisJbXRzcHIgZGJjcjAscjMgICAgICAgICAgICAgICAvKiBUaGlzIHdpbGwgY2F1c2UgYSBDUFUgY29yZSByZXNldCwgYW5kICovCisJCQkJICAgICAvKiBleGVjdXRpb24gd2lsbCBjb250aW51ZSBmcm9tIHRoZSBwb3dlcm9uICovCisJCQkJICAgICAvKiB2ZWN0b3Igb2YgMHhmZmZmZmZmYyAqLwogI2VuZGlmIC8qIENPTkZJR180MDVFUCAqLwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC90cmFwcy5jIGIvY3B1L3BwYzR4eC90cmFwcy5jCmluZGV4IDg1ZjJlYTQuLjFjZjg5OWUgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvdHJhcHMuYworKysgYi9jcHUvcHBjNHh4L3RyYXBzLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogdm9pZAogUHJvZ3JhbUNoZWNrRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotICAgICAgICBsb25nIGVzcl92YWw7CisJbG9uZyBlc3JfdmFsOwogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKIAlpZiAoZGVidWdnZXJfZXhjZXB0aW9uX2hhbmRsZXIgJiYgKCpkZWJ1Z2dlcl9leGNlcHRpb25faGFuZGxlcikocmVncykpCkBAIC0yMTIsMTIgKzIxMiwxMiBAQAogCiAJc2hvd19yZWdzKHJlZ3MpOwogCi0gICAgICAgIGVzcl92YWwgPSBnZXRfZXNyKCk7Ci0gICAgICAgIGlmKCBlc3JfdmFsICYgRVNSX1BJTCApCisJZXNyX3ZhbCA9IGdldF9lc3IoKTsKKwlpZiggZXNyX3ZhbCAmIEVTUl9QSUwgKQogCQlwcmludGYoICIqKiBJbGxlZ2FsIEluc3RydWN0aW9uICoqXG4iICk7Ci0gICAgICAgIGVsc2UgaWYoIGVzcl92YWwgJiBFU1JfUFBSICkKKwllbHNlIGlmKCBlc3JfdmFsICYgRVNSX1BQUiApCiAJCXByaW50ZiggIioqIFByaXZpbGVnZWQgSW5zdHJ1Y3Rpb24gKipcbiIgKTsKLSAgICAgICAgZWxzZSBpZiggZXNyX3ZhbCAmIEVTUl9QVFIgKQorCWVsc2UgaWYoIGVzcl92YWwgJiBFU1JfUFRSICkKIAkJcHJpbnRmKCAiKiogVHJhcCBJbnN0cnVjdGlvbiAqKlxuIiApOwogCiAJcHJpbnRfYmFja3RyYWNlKCh1bnNpZ25lZCBsb25nICopcmVncy0+Z3ByWzFdKTsKQEAgLTIyNywxNSArMjI3LDE1IEBACiB2b2lkCiBQSVRFeGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFJlc2V0IFBJVCBpbnRlcnJ1cHQKLSAgICAgICAgICovCi0gICAgICAgIHNldF90c3IoMHgwODAwMDAwMCk7CisJLyoKKwkgKiBSZXNldCBQSVQgaW50ZXJydXB0CisJICovCisJc2V0X3RzcigweDA4MDAwMDAwKTsKIAotICAgICAgICAvKgotICAgICAgICAgKiBDYWxsIHRpbWVyX2ludGVycnVwdCByb3V0aW5lIGluIGludGVycnVwdHMuYwotICAgICAgICAgKi8KLSAgICAgICAgdGltZXJfaW50ZXJydXB0KE5VTEwpOworCS8qCisJICogQ2FsbCB0aW1lcl9pbnRlcnJ1cHQgcm91dGluZSBpbiBpbnRlcnJ1cHRzLmMKKwkgKi8KKwl0aW1lcl9pbnRlcnJ1cHQoTlVMTCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvY3B1L3B4YS9pMmMuYyBiL2NwdS9weGEvaTJjLmMKaW5kZXggNDA2ZjgyNS4uY2MyYzQ5YyAxMDA2NDQKLS0tIGEvY3B1L3B4YS9pMmMuYworKysgYi9jcHUvcHhhL2kyYy5jCkBAIC0zNiwxNiArMzYsMTYgQEAKIAogI2lmZGVmIENPTkZJR19IQVJEX0kyQwogCi0vKiAKLSAqCS0gQ0ZHX0kyQ19TUEVFRCAKLSAqCS0gSTJDX1BYQV9TTEFWRV9BRERSIAorLyoKKyAqCS0gQ0ZHX0kyQ19TUEVFRAorICoJLSBJMkNfUFhBX1NMQVZFX0FERFIKICAqLwogCiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPGkyYy5oPgogCi0vLyNkZWZpbmUJREVCVUdfSTJDIAkxCS8qIGFjdGl2YXRlIGxvY2FsIGRlYnVnZ2luZyBvdXRwdXQgICovCisvKiNkZWZpbmUJREVCVUdfSTJDIAkxCS8jIyMqIGFjdGl2YXRlIGxvY2FsIGRlYnVnZ2luZyBvdXRwdXQgICovCiAjZGVmaW5lIEkyQ19QWEFfU0xBVkVfQUREUgkweDEJLyogc2xhdmUgcHhhIHVuaXQgYWRkcmVzcyAgICAgICAgICAgKi8KICNkZWZpbmUgSTJDX0lDUl9JTklUCQkoSUNSX0JFSUUgfCBJQ1JfSVJGSUUgfCBJQ1JfSVRFSUUgfCBJQ1JfR0NEIHwgSUNSX1NDTEUpCiAjZGVmaW5lIEkyQ19JU1JfSU5JVAkJMHg3RkYKQEAgLTYzLDcgKzYzLDcgQEAKICNkZWZpbmUgSTJDX0NPTkRfU1RPUAkJMgogCiAvKiBTaGFsbCB0aGUgY3VycmVudCB0cmFuc2ZlciBiZSBhY2svbmFja2VkIG9yIGJlaW5nIHdhaXRlZCBmb3IgaXQ/ICovCi0jZGVmaW5lIEkyQ19BQ0tOQUtfV0FJVEFDSwkxCQorI2RlZmluZSBJMkNfQUNLTkFLX1dBSVRBQ0sJMQogI2RlZmluZSBJMkNfQUNLTkFLX1NFTkRBQ0sJMgogI2RlZmluZSBJMkNfQUNLTkFLX1NFTkROQUsJNAogCkBAIC03NCwzNyArNzQsMzcgQEAKIC8qIEFsbCB0cmFuc2ZlcnMgYXJlIGRlc2NyaWJlZCBieSB0aGlzIGRhdGEgc3RydWN0dXJlICovCiBzdHJ1Y3QgaTJjX21zZyB7CiAJdTggY29uZGl0aW9uOwotCXU4IGFja25hY2s7IAotCXU4IGRpcmVjdGlvbjsgCisJdTggYWNrbmFjazsKKwl1OCBkaXJlY3Rpb247CiAJdTggZGF0YTsKIH07CiAKIAogLyoqCi0gKiBpMmNfcHhhX3Jlc2V0OiAtIHJlc2V0IHRoZSBob3N0IGNvbnRyb2xsZXIgCisgKiBpMmNfcHhhX3Jlc2V0OiAtIHJlc2V0IHRoZSBob3N0IGNvbnRyb2xsZXIKICAqCiAgKi8KIAogc3RhdGljIHZvaWQgaTJjX3Jlc2V0KCB2b2lkICkKIHsKIAlJQ1IgJj0gfklDUl9JVUU7CQkvKiBkaXNhYmxlIHVuaXQgKi8KLSAgICAgICAgSUNSIHw9IElDUl9VUjsJCQkvKiByZXNldCB0aGUgdW5pdCAqLwotICAgICAgICB1ZGVsYXkoMTAwKTsKLSAgICAgICAgSUNSICY9IH5JQ1JfSVVFOwkJLyogZGlzYWJsZSB1bml0ICovCi0gICAgICAgIENLRU4gfD0gQ0tFTjE0X0kyQzsJCS8qIHNldCB0aGUgZ2xvYmFsIEkyQyBjbG9jayBvbiAqLwotICAgICAgICBJU0FSID0gSTJDX1BYQV9TTEFWRV9BRERSOwkvKiBzZXQgb3VyIHNsYXZlIGFkZHJlc3MgKi8KLSAgICAgICAgSUNSID0gSTJDX0lDUl9JTklUOwkJLyogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzICovCi0gICAgICAgIElTUiA9IEkyQ19JU1JfSU5JVDsJCS8qIHNldCBjbGVhciBpbnRlcnJ1cHQgYml0cyAqLwotICAgICAgICBJQ1IgfD0gSUNSX0lVRTsJCQkvKiBlbmFibGUgdW5pdCAqLwotICAgICAgICB1ZGVsYXkoMTAwKTsKKwlJQ1IgfD0gSUNSX1VSOwkJCS8qIHJlc2V0IHRoZSB1bml0ICovCisJdWRlbGF5KDEwMCk7CisJSUNSICY9IH5JQ1JfSVVFOwkJLyogZGlzYWJsZSB1bml0ICovCisJQ0tFTiB8PSBDS0VOMTRfSTJDOwkJLyogc2V0IHRoZSBnbG9iYWwgSTJDIGNsb2NrIG9uICovCisJSVNBUiA9IEkyQ19QWEFfU0xBVkVfQUREUjsJLyogc2V0IG91ciBzbGF2ZSBhZGRyZXNzICovCisJSUNSID0gSTJDX0lDUl9JTklUOwkJLyogc2V0IGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzICovCisJSVNSID0gSTJDX0lTUl9JTklUOwkJLyogc2V0IGNsZWFyIGludGVycnVwdCBiaXRzICovCisJSUNSIHw9IElDUl9JVUU7CQkJLyogZW5hYmxlIHVuaXQgKi8KKwl1ZGVsYXkoMTAwKTsKIH0KIAogCiAvKioKLSAqIGkyY19pc3Jfc2V0X2NsZWFyZWQ6IC0gd2FpdCB1bnRpbCBjZXJ0YWluIGJpdHMgb2YgdGhlIEkyQyBzdGF0dXMgcmVnaXN0ZXIgCisgKiBpMmNfaXNyX3NldF9jbGVhcmVkOiAtIHdhaXQgdW50aWwgY2VydGFpbiBiaXRzIG9mIHRoZSBJMkMgc3RhdHVzIHJlZ2lzdGVyCiAgKgkgICAgICAgICAgICAgICAgICBhcmUgc2V0IGFuZCBjbGVhcmVkCiAgKgotICogQHJldHVybjogMCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIDEgbWVhbnMgdGltZW91dCAobm8gbWF0Y2ggd2l0aGluIDEwIG1zKS4gCisgKiBAcmV0dXJuOiAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgMSBtZWFucyB0aW1lb3V0IChubyBtYXRjaCB3aXRoaW4gMTAgbXMpLgogICovCiAKIHN0YXRpYyBpbnQgaTJjX2lzcl9zZXRfY2xlYXJlZCggdW5zaWduZWQgbG9uZyBzZXRfbWFzaywgdW5zaWduZWQgbG9uZyBjbGVhcmVkX21hc2sgKQpAQCAtMTE2LDE1ICsxMTYsMTUgQEAKIAkJaWYoIHRpbWVvdXQtLSA8IDAgKSByZXR1cm4gMDsKIAl9CiAKLSAgICAgICAgcmV0dXJuIDE7CisJcmV0dXJuIDE7CiB9CiAKIAogLyoqCiAgKiBpMmNfdHJhbnNmZXI6IC0gVHJhbnNmZXIgb25lIGJ5dGUgb3ZlciB0aGUgaTJjIGJ1cwogICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FuIHRyYW5mZXIgYSBieXRlIG92ZXIgdGhlIGkyYyBidXMgaW4gYm90aCBkaXJlY3Rpb25zLiAKLSAqIEl0IGlzIHVzZWQgYnkgdGhlIHB1YmxpYyBBUEkgZnVuY3Rpb25zLiAKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIHRyYW5mZXIgYSBieXRlIG92ZXIgdGhlIGkyYyBidXMgaW4gYm90aCBkaXJlY3Rpb25zLgorICogSXQgaXMgdXNlZCBieSB0aGUgcHVibGljIEFQSSBmdW5jdGlvbnMuCiAgKgogICogQHJldHVybjogIDA6IHRyYW5zZmVyIHN1Y2Nlc3NmdWwKICAqICAgICAgICAgIC0xOiBtZXNzYWdlIGlzIGVtcHR5CkBAIC0xMzMsMTIgKzEzMywxMiBAQAogICogICAgICAgICAgLTQ6IHJlY2VpdmUgdGltZW91dAogICogICAgICAgICAgLTU6IGlsbGVnYWwgcGFyYW1ldGVycwogICogICAgICAgICAgLTY6IGJ1cyBpcyBidXN5IGFuZCBjb3VsZG4ndCBiZSBhcXVpcmVkCi0gKi8gCisgKi8KIGludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19tc2cgKm1zZykKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFtc2cpIAorCWlmICghbXNnKQogCQlnb3RvIHRyYW5zZmVyX2Vycm9yX21zZ19lbXB0eTsKIAogCXN3aXRjaChtc2ctPmRpcmVjdGlvbikgewpAQCAtMTU0LDE0ICsxNTQsMTQgQEAKIAkJSUNSICY9IH5JQ1JfU1RPUDsKIAkJSURCUiA9IG1zZy0+ZGF0YTsKIAkJaWYgKG1zZy0+Y29uZGl0aW9uID09IEkyQ19DT05EX1NUQVJUKSAgICAgSUNSIHw9ICBJQ1JfU1RBUlQ7Ci0JCWlmIChtc2ctPmNvbmRpdGlvbiA9PSBJMkNfQ09ORF9TVE9QKSAgICAgIElDUiB8PSAgSUNSX1NUT1A7IAorCQlpZiAobXNnLT5jb25kaXRpb24gPT0gSTJDX0NPTkRfU1RPUCkgICAgICBJQ1IgfD0gIElDUl9TVE9QOwogCQlpZiAobXNnLT5hY2tuYWNrICAgPT0gSTJDX0FDS05BS19TRU5ETkFLKSBJQ1IgfD0gIElDUl9BQ0tOQUs7CiAJCWlmIChtc2ctPmFja25hY2sgICA9PSBJMkNfQUNLTkFLX1NFTkRBQ0spIElDUiAmPSB+SUNSX0FDS05BSzsKIAkJSUNSICY9IH5JQ1JfQUxESUU7Ci0JCUlDUiB8PSBJQ1JfVEI7IAorCQlJQ1IgfD0gSUNSX1RCOwogCiAJCS8qIHRyYW5zbWl0IHJlZ2lzdGVyIGVtcHR5PyAqLwotCQlpZiAoIWkyY19pc3Jfc2V0X2NsZWFyZWQoSVNSX0lURSwwKSkgCisJCWlmICghaTJjX2lzcl9zZXRfY2xlYXJlZChJU1JfSVRFLDApKQogCQkJZ290byB0cmFuc2Zlcl9lcnJvcl90cmFuc21pdF90aW1lb3V0OwogCiAJCS8qIGNsZWFyICd0cmFuc21pdCBlbXB0eScgc3RhdGUgKi8KQEAgLTE2OSw3ICsxNjksNyBAQAogCiAJCS8qIHdhaXQgZm9yIEFDSyBmcm9tIHNsYXZlICovCiAJCWlmIChtc2ctPmFja25hY2sgPT0gSTJDX0FDS05BS19XQUlUQUNLKQotCQkJaWYgKCFpMmNfaXNyX3NldF9jbGVhcmVkKDAsSVNSX0FDS05BSykpIAorCQkJaWYgKCFpMmNfaXNyX3NldF9jbGVhcmVkKDAsSVNSX0FDS05BSykpCiAJCQkJZ290byB0cmFuc2Zlcl9lcnJvcl9hY2tfbWlzc2luZzsKIAkJYnJlYWs7CiAKQEAgLTE5MCw4ICsxOTAsOCBAQAogCQlJQ1IgfD0gSUNSX1RCOwogCiAJCS8qIHJlY2VpdmUgcmVnaXN0ZXIgZnVsbD8gKi8KLQkJaWYgKCFpMmNfaXNyX3NldF9jbGVhcmVkKElTUl9JUkYsMCkpIAotCQkJZ290byB0cmFuc2Zlcl9lcnJvcl9yZWNlaXZlX3RpbWVvdXQ7IAorCQlpZiAoIWkyY19pc3Jfc2V0X2NsZWFyZWQoSVNSX0lSRiwwKSkKKwkJCWdvdG8gdHJhbnNmZXJfZXJyb3JfcmVjZWl2ZV90aW1lb3V0OwogCiAJCW1zZy0+ZGF0YSA9IElEQlI7CiAKQEAgLTIwNiw5ICsyMDYsOSBAQAogCiAJfQogCi0JcmV0dXJuIDA7IAorCXJldHVybiAwOwogCi10cmFuc2Zlcl9lcnJvcl9tc2dfZW1wdHk6IAordHJhbnNmZXJfZXJyb3JfbXNnX2VtcHR5OgogCQlQUklOVEQoKCJpMmNfdHJhbnNmZXI6IGVycm9yOiAnbXNnJyBpcyBlbXB0eVxuIikpOwogCQlyZXQgPSAtMTsgZ290byBpMmNfdHJhbnNmZXJfZmluaXNoOwogCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogdm9pZCBpMmNfaW5pdChpbnQgc3BlZWQsIGludCBzbGF2ZWFkZHIpCiB7Ci0jaWZkZWYgQ0ZHX0kyQ19JTklUX0JPQVJEICAgICAgICAKKyNpZmRlZiBDRkdfSTJDX0lOSVRfQk9BUkQKIAkvKiBjYWxsIGJvYXJkIHNwZWNpZmljIGkyYyBidXMgcmVzZXQgcm91dGluZSBiZWZvcmUgYWNjZXNzaW5nIHRoZSAgICovCiAJLyogZW52aXJvbm1lbnQsIHdoaWNoIG1pZ2h0IGJlIGluIGEgY2hpcCBvbiB0aGF0IGJ1cy4gRm9yIGRldGFpbHMgICAqLwogCS8qIGFib3V0IHRoaXMgcHJvYmxlbSBzZWUgZG9jL0kyQ19FZGdlX0NvbmRpdGlvbnMuICAgICAgICAgICAgICAgICAgKi8KQEAgLTI1Nyw3ICsyNTcsNyBAQAogLyoqCiAgKiBpMmNfcHJvYmU6IC0gVGVzdCBpZiBhIGNoaXAgYW5zd2VycyBmb3IgYSBnaXZlbiBpMmMgYWRkcmVzcwogICoKLSAqIEBjaGlwOglhZGRyZXNzIG9mIHRoZSBjaGlwIHdoaWNoIGlzIHNlYXJjaGVkIGZvciAKKyAqIEBjaGlwOglhZGRyZXNzIG9mIHRoZSBjaGlwIHdoaWNoIGlzIHNlYXJjaGVkIGZvcgogICogQHJldHVybjogCTAgaWYgYSBjaGlwIHdhcyBmb3VuZCwgLTEgb3RoZXJ3aGlzZQogICovCiAKQEAgLTI4Nyw3ICsyODcsNyBAQAogICogaTJjX3JlYWQ6IC0gUmVhZCBtdWx0aXBsZSBieXRlcyBmcm9tIGFuIGkyYyBkZXZpY2UKICAqCiAgKiBUaGUgaGlnaGVyIGxldmVsIHJvdXRpbmVzIHRha2UgaW50byBhY2NvdW50IHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBvbmx5Ci0gKiBjYWxsZWQgd2l0aCBsZW4gPCBwYWdlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIChzZWUgY29uZmlndXJhdGlvbiBmaWxlKSAKKyAqIGNhbGxlZCB3aXRoIGxlbiA8IHBhZ2UgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgKHNlZSBjb25maWd1cmF0aW9uIGZpbGUpCiAgKgogICogQGNoaXA6CWFkZHJlc3Mgb2YgdGhlIGNoaXAgd2hpY2ggaXMgdG8gYmUgcmVhZAogICogQGFkZHI6CWkyYyBkYXRhIGFkZHJlc3Mgd2l0aGluIHRoZSBjaGlwCkBAIC0zMTUsMTIgKzMxNSwxMiBAQAogCW1zZy5kYXRhICAgICAgPSAoY2hpcCA8PCAxKTsKIAltc2cuZGF0YSAgICAgJj0gMHhGRTsKIAlpZiAoKHJldD1pMmNfdHJhbnNmZXIoJm1zZykpKSByZXR1cm4gLTE7Ci0JCisKIAkvKgotCSAqIHNlbmQgbWVtb3J5IGFkZHJlc3MgYnl0ZXM7IAotCSAqIGFsZW4gZGVmaW5lcyBob3cgbXVjaCBieXRlcyB3ZSBoYXZlIHRvIHNlbmQuIAorCSAqIHNlbmQgbWVtb3J5IGFkZHJlc3MgYnl0ZXM7CisJICogYWxlbiBkZWZpbmVzIGhvdyBtdWNoIGJ5dGVzIHdlIGhhdmUgdG8gc2VuZC4KIAkgKi8KLQkvL2FkZHIgJj0gKCgxIDw8IENGR19FRVBST01fUEFHRV9XUklURV9CSVRTKS0xKTsKKwkvKmFkZHIgJj0gKCgxIDw8IENGR19FRVBST01fUEFHRV9XUklURV9CSVRTKS0xKTsgKi8KIAlhZGRyX2J5dGVzWzBdID0gKHU4KSgoYWRkciA+PiAgMCkgJiAweDAwMDAwMEZGKTsKIAlhZGRyX2J5dGVzWzFdID0gKHU4KSgoYWRkciA+PiAgOCkgJiAweDAwMDAwMEZGKTsKIAlhZGRyX2J5dGVzWzJdID0gKHU4KSgoYWRkciA+PiAxNikgJiAweDAwMDAwMEZGKTsKQEAgLTMzNCw3ICszMzQsNyBAQAogCQltc2cuZGF0YSAgICAgID0gYWRkcl9ieXRlc1thbGVuXTsKIAkJaWYgKChyZXQ9aTJjX3RyYW5zZmVyKCZtc2cpKSkgcmV0dXJuIC0xOwogCX0KLQkKKwogCiAJLyogc3RhcnQgcmVhZCBzZXF1ZW5jZSAqLwogCVBSSU5URCgoImkyY19yZWFkOiBzdGFydCByZWFkIHNlcXVlbmNlXG4iKSk7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAkvKiByZWFkIGJ5dGVzOyBzZW5kIE5BQ0sgYXQgbGFzdCBieXRlICovCiAJd2hpbGUgKGxlbi0tKSB7CiAKLQkJaWYgKGxlbj09MCkgeyAKKwkJaWYgKGxlbj09MCkgewogCQkJbXNnLmNvbmRpdGlvbiA9IEkyQ19DT05EX1NUT1A7CiAJCQltc2cuYWNrbmFjayAgID0gSTJDX0FDS05BS19TRU5ETkFLOwogCQl9IGVsc2UgewpAQCAtMzc2LDEyICszNzYsMTIgQEAKICAqIGkyY193cml0ZTogLSAgV3JpdGUgbXVsdGlwbGUgYnl0ZXMgdG8gYW4gaTJjIGRldmljZQogICoKICAqIFRoZSBoaWdoZXIgbGV2ZWwgcm91dGluZXMgdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkKLSAqIGNhbGxlZCB3aXRoIGxlbiA8IHBhZ2UgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgKHNlZSBjb25maWd1cmF0aW9uIGZpbGUpIAorICogY2FsbGVkIHdpdGggbGVuIDwgcGFnZSBsZW5ndGggb2YgdGhlIGRldmljZSAoc2VlIGNvbmZpZ3VyYXRpb24gZmlsZSkKICAqCiAgKiBAY2hpcDoJYWRkcmVzcyBvZiB0aGUgY2hpcCB3aGljaCBpcyB0byBiZSB3cml0dGVuCiAgKiBAYWRkcjoJaTJjIGRhdGEgYWRkcmVzcyB3aXRoaW4gdGhlIGNoaXAKICAqIEBhbGVuOglsZW5ndGggb2YgdGhlIGkyYyBkYXRhIGFkZHJlc3MgKDEuLjIgYnl0ZXMpCi0gKiBAYnVmZmVyOgl3aGVyZSB0byBmaW5kIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gCisgKiBAYnVmZmVyOgl3aGVyZSB0byBmaW5kIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4KICAqIEBsZW46CWhvdyBtdWNoIGJ5dGUgZG8gd2Ugd2FudCB0byByZWFkCiAgKiBAcmV0dXJuOgkwIGluIGNhc2Ugb2Ygc3VjY2VzcwogICovCkBAIC00MDMsMTAgKzQwMywxMCBAQAogCW1zZy5kYXRhICAgICAgPSAoY2hpcCA8PCAxKTsKIAltc2cuZGF0YSAgICAgJj0gMHhGRTsKIAlpZiAoaTJjX3RyYW5zZmVyKCZtc2cpKSByZXR1cm4gLTE7Ci0JCisKIAkvKgotCSAqIHNlbmQgbWVtb3J5IGFkZHJlc3MgYnl0ZXM7IAotCSAqIGFsZW4gZGVmaW5lcyBob3cgbXVjaCBieXRlcyB3ZSBoYXZlIHRvIHNlbmQuIAorCSAqIHNlbmQgbWVtb3J5IGFkZHJlc3MgYnl0ZXM7CisJICogYWxlbiBkZWZpbmVzIGhvdyBtdWNoIGJ5dGVzIHdlIGhhdmUgdG8gc2VuZC4KIAkgKi8KIAlhZGRyX2J5dGVzWzBdID0gKHU4KSgoYWRkciA+PiAgMCkgJiAweDAwMDAwMEZGKTsKIAlhZGRyX2J5dGVzWzFdID0gKHU4KSgoYWRkciA+PiAgOCkgJiAweDAwMDAwMEZGKTsKQEAgLTQyMSwxMyArNDIxLDEzIEBACiAJCW1zZy5kYXRhICAgICAgPSBhZGRyX2J5dGVzW2FsZW5dOwogCQlpZiAoaTJjX3RyYW5zZmVyKCZtc2cpKSByZXR1cm4gLTE7CiAJfQotCQkKKwogCS8qIHdyaXRlIGJ5dGVzOyBzZW5kIE5BQ0sgYXQgbGFzdCBieXRlICovCiAJd2hpbGUgKGxlbi0tKSB7CiAKIAkJUFJJTlREKCgiaTJjX3dyaXRlOiB3cml0aW5nIGJ5dGUgKDB4JTA4eCk9MHglMDJ4XG4iLCh1bnNpZ25lZCBpbnQpYnVmZmVyLCpidWZmZXIpKTsKIAotCQlpZiAobGVuPT0wKSAKKwkJaWYgKGxlbj09MCkKIAkJCW1zZy5jb25kaXRpb24gPSBJMkNfQ09ORF9TVE9QOwogCQllbHNlCiAJCQltc2cuY29uZGl0aW9uID0gSTJDX0NPTkRfTk9STUFMOwpAQCAtNDM1LDcgKzQzNSw3IEBACiAJCW1zZy5hY2tuYWNrICAgPSBJMkNfQUNLTkFLX1dBSVRBQ0s7CiAJCW1zZy5kaXJlY3Rpb24gPSBJMkNfV1JJVEU7CiAJCW1zZy5kYXRhICAgICAgPSAqKGJ1ZmZlcisrKTsKLQkJCisKIAkJaWYgKGkyY190cmFuc2ZlcigmbXNnKSkgcmV0dXJuIC0xOwogCiAJfQpkaWZmIC0tZ2l0IGEvY3B1L3B4YS9pbnRlcnJ1cHRzLmMgYi9jcHUvcHhhL2ludGVycnVwdHMuYwppbmRleCBhZjdkNjM0Li5jZjUyOWY0IDEwMDY0NAotLS0gYS9jcHUvcHhhL2ludGVycnVwdHMuYworKysgYi9jcHUvcHhhL2ludGVycnVwdHMuYwpAQCAtNTksNyArNTksNiBAQAogI2VuZGlmCiAKIAotCiB2b2lkIGJhZF9tb2RlICh2b2lkKQogewogCXBhbmljICgiUmVzZXR0aW5nIENQVSAuLi5cbiIpOwpkaWZmIC0tZ2l0IGEvY3B1L3B4YS9tbWMuYyBiL2NwdS9weGEvbW1jLmMKaW5kZXggNzgzZTkwYy4uOWU2ZTFlMyAxMDA2NDQKLS0tIGEvY3B1L3B4YS9tbWMuYworKysgYi9jcHUvcHhhL21tYy5jCkBAIC0zMiw3ICszMiw3IEBACiBleHRlcm4gaW50CiBmYXRfcmVnaXN0ZXJfcmVhZChpbnQoKmJsb2NrX3JlYWQpKGludCBkZXZpY2UsIHVsb25nIGJsa25yLCB1bG9uZyBibGtjbnQsIHVjaGFyICpidWZmZXIpKTsKIAotLyogCisvKgogICogRklYTUUgbmVlZHMgdG8gcmVhZCBjaWQgYW5kIGNzZCBpbmZvIHRvIGRldGVybWluZSBibG9jayBzaXplCiAgKiBhbmQgb3RoZXIgcGFyYW1ldGVycwogICovCkBAIC00MSw3ICs0MSw3IEBACiBzdGF0aWMgaW50IG1tY19yZWFkeSA9IDA7CiAKIAotc3RhdGljIHVjaGFyICogCitzdGF0aWMgdWNoYXIgKgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBtbWNfY21kKHVzaG9ydCBjbWQsIHVzaG9ydCBhcmdoLCB1c2hvcnQgYXJnbCwgdXNob3J0IGNtZGF0KQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01NCw3ICs1NCw3IEBACiAJTU1DX1NUUlBDTCA9IE1NQ19TVFJQQ0xfU1RPUF9DTEs7CiAJTU1DX0lfTUFTSyA9IH5NTUNfSV9NQVNLX0NMS19JU19PRkY7CiAJd2hpbGUgKCEoTU1DX0lfUkVHICYgTU1DX0lfUkVHX0NMS19JU19PRkYpKTsKLQlNTUNfQ01EICAgID0gY21kOyAKKwlNTUNfQ01EICAgID0gY21kOwogCU1NQ19BUkdIICAgPSBhcmdoOwogCU1NQ19BUkdMICAgPSBhcmdsOwogCU1NQ19DTURBVCAgPSBjbWRhdDsKQEAgLTczLDExICs3MywxMSBAQAogCXsKIAkJY2FzZSBNTUNfQ01EQVRfUjE6CiAJCWNhc2UgTU1DX0NNREFUX1IzOgotCQkJd29yZHMgPSAzOyAKKwkJCXdvcmRzID0gMzsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTU1DX0NNREFUX1IyOgotCQkJd29yZHMgPSA4OyAKKwkJCXdvcmRzID0gODsKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0xMzAsMTAgKzEzMCwxMCBAQAogCU1NQ19SRFRPID0gMHhmZmZmOwogCU1NQ19OT0IgPSAxOwogCU1NQ19CTEtMRU4gPSBsZW47Ci0JcmVzcCA9IG1tY19jbWQoTU1DX0NNRF9SRUFEX0JMT0NLLCBhcmdoLCBhcmdsLCAKKwlyZXNwID0gbW1jX2NtZChNTUNfQ01EX1JFQURfQkxPQ0ssIGFyZ2gsIGFyZ2wsCiAJCQlNTUNfQ01EQVRfUjF8TU1DX0NNREFUX1JFQUR8TU1DX0NNREFUX0JMT0NLfE1NQ19DTURBVF9EQVRBX0VOKTsKIAotCQorCiAJTU1DX0lfTUFTSyA9IH5NTUNfSV9NQVNLX1JYRklGT19SRF9SRVE7CiAJd2hpbGUgKGxlbikKIAl7CkBAIC0xODgsOSArMTg4LDkgQEAKIAlNTUNfU1RSUENMID0gTU1DX1NUUlBDTF9TVE9QX0NMSzsKIAlNTUNfTk9CID0gMTsKIAlNTUNfQkxLTEVOID0gbGVuOwotCXJlc3AgPSBtbWNfY21kKE1NQ19DTURfV1JJVEVfQkxPQ0ssIGFyZ2gsIGFyZ2wsIAorCXJlc3AgPSBtbWNfY21kKE1NQ19DTURfV1JJVEVfQkxPQ0ssIGFyZ2gsIGFyZ2wsCiAJCQlNTUNfQ01EQVRfUjF8TU1DX0NNREFUX1dSSVRFfE1NQ19DTURBVF9CTE9DS3xNTUNfQ01EQVRfREFUQV9FTik7Ci0JCisKIAlNTUNfSV9NQVNLID0gfk1NQ19JX01BU0tfVFhGSUZPX1dSX1JFUTsKIAl3aGlsZSAobGVuKQogCXsKQEAgLTM3OSw3ICszNzksNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgCitpbnQKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogbW1jX2JyZWFkKGludCBkZXZfbnVtLCB1bG9uZyBibGtuciwgdWxvbmcgYmxrY250LCB1Y2hhciAqZHN0KQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MDgsNyArNDA4LDcgQEAKIAltbWNfY3NkLmNfc2l6ZSA9IDA7CiAKIAlNTUNfQ0xLUlQgID0gTU1DX0NMS1JUXzBfMzEyNU1IWjsKLQlNTUNfUkVTVE8gID0gTU1DX1JFU19UT19NQVg7IAorCU1NQ19SRVNUTyAgPSBNTUNfUkVTX1RPX01BWDsKIAlNTUNfU1BJICAgID0gTU1DX1NQSV9ESVNBQkxFOwogCiAJLyogcmVzZXQgKi8KQEAgLTQzMSwxMiArNDMxLDEyIEBACiAJCWlmICh2ZXJib3NlKQogCQl7CiAJCQlwcmludGYoIk1NQyBmb3VuZC4gQ2FyZCBkZXNjaXB0aW9uIGlzOlxuIik7Ci0JCQlwcmludGYoIk1hbnVmYWN0dXJlciBJRCA9ICUwMnglMDJ4JTAyeFxuIiwgCisJCQlwcmludGYoIk1hbnVmYWN0dXJlciBJRCA9ICUwMnglMDJ4JTAyeFxuIiwKIAkJCQkJCQljaWQtPmlkWzBdLCBjaWQtPmlkWzFdLCBjaWQtPmlkWzJdKTsKIAkJCXByaW50ZigiSFcvRlcgUmV2aXNpb24gPSAleCAleFxuIixjaWQtPmh3cmV2LCBjaWQtPmZ3cmV2KTsKIAkJCWNpZC0+aHdyZXYgPSBjaWQtPmZ3cmV2ID0gMDsJLyogbnVsbCB0ZXJtaW5hdGUgc3RyaW5nICovCiAJCQlwcmludGYoIlByb2R1Y3QgTmFtZSA9ICVzXG4iLGNpZC0+bmFtZSk7Ci0JCQlwcmludGYoIlNlcmlhbCBOdW1iZXIgPSAlMDJ4JTAyeCUwMnhcbiIsIAorCQkJcHJpbnRmKCJTZXJpYWwgTnVtYmVyID0gJTAyeCUwMnglMDJ4XG4iLAogCQkJCQkJCWNpZC0+c25bMF0sIGNpZC0+c25bMV0sIGNpZC0+c25bMl0pOwogCQkJcHJpbnRmKCJNb250aCA9ICVkXG4iLGNpZC0+bW9udGgpOwogCQkJcHJpbnRmKCJZZWFyID0gJWRcbiIsMTk5NyArIGNpZC0+eWVhcik7CmRpZmYgLS1naXQgYS9jcHUvcHhhL3B4YWZiLmMgYi9jcHUvcHhhL3B4YWZiLmMKaW5kZXggZjZhMjU3NS4uZWY2MGQ0YSAxMDA2NDQKLS0tIGEvY3B1L3B4YS9weGFmYi5jCisrKyBiL2NwdS9weGEvcHhhZmIuYwpAQCAtNTIsNyArNTIsNyBAQAogCiAjdW5kZWYgQ09ORklHX0xDRF9MT0dPCiAKLSNkZWZpbmUgTENEX1RFU1RfUEFUVEVSTiAKKyNkZWZpbmUgTENEX1RFU1RfUEFUVEVSTgogLyogI2RlZmluZSBMQ0RfVEVTVF9QQVRURVJOICovCS8qIGNvbG9yIGJhY2tnbmQgZm9yIGZyYW1lL2NvbG9yIGFkanVzdCAqLwogLyogI2RlZmluZSBDRkdfSU5WRVJUX0NPTE9SUyAqLwkvKiBOb3QgbmVlZGVkIC0gYWRqdXN0IHZsX2RwIGluc3RlYWQgCSovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTYzLDMxICsxNjMsMzEgQEAKIAogLyogeW91IGhhdmUgdG8gc2V0IGxjY3IwIGFuZCBsY2NyMyAoaW5jbHVkaW5nIHBjZCkgKi8KICNkZWZpbmUgUkVHX0xDQ1IwCTB4MDAzMDA4ZjgKLSNkZWZpbmUgUkVHX0xDQ1IzCTB4MDMwMEZGMDEgCisjZGVmaW5lIFJFR19MQ0NSMwkweDAzMDBGRjAxCiAKIC8qIDY0MHg0ODB4MTYgQCA2MSBIeiAqLwogc3RhdGljIHZpZGluZm9fdCBwYW5lbF9pbmZvID0gewotCXZsX2NvbDogCTY0MCwgCisJdmxfY29sOiAJNjQwLAogCXZsX3JvdzogCTQ4MCwKIAl2bF93aWR0aDogCTY0MCwKIAl2bF9oZWlnaHQ6IAk0ODAsCiAJdmxfY2xrcDogCUNGR19ISUdILAotICAgICAgICB2bF9vZXA6IAlDRkdfSElHSCwgICAKKwl2bF9vZXA6IAlDRkdfSElHSCwKIAl2bF9oc3A6IAlDRkdfSElHSCwKLSAgICAJdmxfdnNwOiAJQ0ZHX0hJR0gsCi0gICAgCXZsX2RwOiAJCUNGR19ISUdILAotICAgIAl2bF9icGl4OiAJTENEX0JQUCwKLSAgICAJdmxfbGJ3OiAJMCwKKwl2bF92c3A6IAlDRkdfSElHSCwKKwl2bF9kcDogCQlDRkdfSElHSCwKKwl2bF9icGl4OiAJTENEX0JQUCwKKwl2bF9sYnc6IAkwLAogCXZsX3NwbHQ6IAkwLAotICAgIAl2bF9jbG9yOiAJMCwKKwl2bF9jbG9yOiAJMCwKIAl2bF9sY2RhYzogCTAsCi0gICAgCXZsX3RmdDogCTEsCi0gICAgCXZsX2hwdzogCTQwLAotICAgIAl2bF9ibHc6IAk1NiwKLSAgICAJdmxfZWx3OiAJNTYsCi0gICAgCXZsX3ZwdzogCTIwLAotICAgIAl2bF9iZnc6IAk4LAotICAgIAl2bF9lZnc6IAk4LAorCXZsX3RmdDogCTEsCisJdmxfaHB3OiAJNDAsCisJdmxfYmx3OiAJNTYsCisJdmxfZWx3OiAJNTYsCisJdmxfdnB3OiAJMjAsCisJdmxfYmZ3OiAJOCwKKwl2bF9lZnc6IAk4LAogfTsKICNlbmRpZiAvKiBDT05GSUdfUFhBX1ZJREVPICovCiAKQEAgLTE5OCwzMCArMTk4LDMwIEBACiAKIC8qIHlvdSBoYXZlIHRvIHNldCBsY2NyMCBhbmQgbGNjcjMgKGluY2x1ZGluZyBwY2QpICovCiAjZGVmaW5lIFJFR19MQ0NSMAkweDAwMzAwODdDCi0jZGVmaW5lIFJFR19MQ0NSMwkweDAzNDBGRjA4IAorI2RlZmluZSBSRUdfTENDUjMJMHgwMzQwRkYwOAogCiBzdGF0aWMgdmlkaW5mb190IHBhbmVsX2luZm8gPSB7Ci0JdmxfY29sOiAJNjQwLCAKKwl2bF9jb2w6IAk2NDAsCiAJdmxfcm93OiAJNDgwLAogCXZsX3dpZHRoOiAJMTU3LAogCXZsX2hlaWdodDogCTExOCwKIAl2bF9jbGtwOiAJQ0ZHX0hJR0gsCi0gICAgICAgIHZsX29lcDogCUNGR19ISUdILCAgIAorCXZsX29lcDogCUNGR19ISUdILAogCXZsX2hzcDogCUNGR19ISUdILAotICAgIAl2bF92c3A6IAlDRkdfSElHSCwKLSAgICAJdmxfZHA6IAkJQ0ZHX0hJR0gsCi0gICAgCXZsX2JwaXg6IAlMQ0RfQlBQLAotICAgIAl2bF9sYnc6IAkwLAorCXZsX3ZzcDogCUNGR19ISUdILAorCXZsX2RwOiAJCUNGR19ISUdILAorCXZsX2JwaXg6IAlMQ0RfQlBQLAorCXZsX2xidzogCTAsCiAJdmxfc3BsdDogCTEsCi0gICAgCXZsX2Nsb3I6IAkxLAorCXZsX2Nsb3I6IAkxLAogCXZsX2xjZGFjOiAJMCwKLSAgICAJdmxfdGZ0OiAJMCwKLSAgICAJdmxfaHB3OiAJMSwKLSAgICAJdmxfYmx3OiAJMywKLSAgICAJdmxfZWx3OiAJMywKLSAgICAJdmxfdnB3OiAJMSwKLSAgICAJdmxfYmZ3OiAJMCwKLSAgICAJdmxfZWZ3OiAJMCwKKwl2bF90ZnQ6IAkwLAorCXZsX2hwdzogCTEsCisJdmxfYmx3OiAJMywKKwl2bF9lbHc6IAkzLAorCXZsX3ZwdzogCTEsCisJdmxfYmZ3OiAJMCwKKwl2bF9lZnc6IAkwLAogfTsKICNlbmRpZiAvKiBDT05GSUdfU0hBUlBfTE04VjMxICovCiAKQEAgLTcyMSw3ICs3MjEsNyBAQAogCiBzdGF0aWMgdm9pZCBsY2RfY3RybF9pbml0ICh2b2lkICpsY2RiYXNlKQogewotICAgCXB4YWZiX2luaXRfbWVtKGxjZGJhc2UsICZwYW5lbF9pbmZvKTsKKwlweGFmYl9pbml0X21lbShsY2RiYXNlLCAmcGFuZWxfaW5mbyk7CiAJcHhhZmJfaW5pdCgmcGFuZWxfaW5mbyk7CiAJcHhhZmJfc2V0dXBfZ3BpbygmcGFuZWxfaW5mbyk7CiAJcHhhZmJfZW5hYmxlX2NvbnRyb2xsZXIoJnBhbmVsX2luZm8pOwpAQCAtNzQ1LDcgKzc0NSw3IEBACiAJc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9ICZwYW5lbF9pbmZvLnB4YTsKIAl1bnNpZ25lZCBzaG9ydCAqcGFsZXR0ZSA9ICh1bnNpZ25lZCBzaG9ydCAqKWZiaS0+cGFsZXR0ZTsKIAl1X2ludCB2YWw7Ci0gICAJCisKIAlpZiAocmVnbm8gPCBmYmktPnBhbGV0dGVfc2l6ZSkgewogCQl2YWwgPSAoKHJlZCA8PCA4KSAmIDB4ZjgwMCk7CiAJCXZhbCB8PSAoKGdyZWVuIDw8IDQpICYgMHgwN2UwKTsKQEAgLTEwMTEsMTggKzEwMTEsMTggQEAKIAkJTENDUjFfSG9yU25jaFdkdGgodmlkLT52bF9ocHcpICsKIAkJTENDUjFfQmVnTG5EZWwodmlkLT52bF9ibHcpICsKIAkJTENDUjFfRW5kTG5EZWwodmlkLT52bF9lbHcpOwotCQkKKwogCWZiaS0+cmVnX2xjY3IyID0KIAkJTENDUjJfRGlzSGdodCh2aWQtPnZsX3JvdykgKwogCQlMQ0NSMl9WcnRTbmNoV2R0aCh2aWQtPnZsX3ZwdykgKwogCQlMQ0NSMl9CZWdGcm1EZWwodmlkLT52bF9iZncpICsKIAkJTENDUjJfRW5kRnJtRGVsKHZpZC0+dmxfZWZ3KTsKIAotCWZiaS0+cmVnX2xjY3IzID0gUkVHX0xDQ1IzICYgfihMQ0NSM19IU1AgfCBMQ0NSM19WU1ApOyAKLQlmYmktPnJlZ19sY2NyMyB8PSAKLQkJICAodmlkLT52bF9oc3AgPyBMQ0NSM19Ib3JTbmNoTCA6IExDQ1IzX0hvclNuY2hIKSAKKwlmYmktPnJlZ19sY2NyMyA9IFJFR19MQ0NSMyAmIH4oTENDUjNfSFNQIHwgTENDUjNfVlNQKTsKKwlmYmktPnJlZ19sY2NyMyB8PQorCQkgICh2aWQtPnZsX2hzcCA/IExDQ1IzX0hvclNuY2hMIDogTENDUjNfSG9yU25jaEgpCiAJCXwgKHZpZC0+dmxfdnNwID8gTENDUjNfVnJ0U25jaEwgOiBMQ0NSM19WcnRTbmNoSCk7Ci0JCQorCiAKIAkvKiBzZXR1cCBkbWEgZGVzY3JpcHRvcnMgKi8KIAlmYmktPmRtYWRlc2NfZmJsb3cgPSAoc3RydWN0IHB4YWZiX2RtYV9kZXNjcmlwdG9yICopKCh1bnNpZ25lZCBpbnQpZmJpLT5wYWxldHRlIC0gMyoxNik7CkBAIC0xMDMwLDkgKzEwMzAsOSBAQAogCWZiaS0+ZG1hZGVzY19wYWxldHRlID0gKHN0cnVjdCBweGFmYl9kbWFfZGVzY3JpcHRvciAqKSgodW5zaWduZWQgaW50KWZiaS0+cGFsZXR0ZSAtIDEqMTYpOwogCiAJI2RlZmluZSBCWVRFU19QRVJfUEFORUwJKChmYmktPnJlZ19sY2NyMCAmIExDQ1IwX1NEUykgPyBcCi0JICAgICAgCSh2aWQtPnZsX2NvbCAqIHZpZC0+dmxfcm93ICogTkJJVFModmlkLT52bF9icGl4KSAvIDggLyAyKSA6IFwKLQkgICAgCSh2aWQtPnZsX2NvbCAqIHZpZC0+dmxfcm93ICogTkJJVFModmlkLT52bF9icGl4KSAvIDgpKQotCQorCQkodmlkLT52bF9jb2wgKiB2aWQtPnZsX3JvdyAqIE5CSVRTKHZpZC0+dmxfYnBpeCkgLyA4IC8gMikgOiBcCisJCSh2aWQtPnZsX2NvbCAqIHZpZC0+dmxfcm93ICogTkJJVFModmlkLT52bF9icGl4KSAvIDgpKQorCiAJLyogcG9wdWxhdGUgZGVzY3JpcHRvcnMgKi8KIAlmYmktPmRtYWRlc2NfZmJsb3ctPmZkYWRyID0gKHVfbG9uZylmYmktPmRtYWRlc2NfZmJsb3c7CiAJZmJpLT5kbWFkZXNjX2ZibG93LT5mc2FkciA9IGZiaS0+c2NyZWVuICsgQllURVNfUEVSX1BBTkVMOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAlmYmktPmRtYWRlc2NfZmJsb3ctPmxkY21kID0gQllURVNfUEVSX1BBTkVMOwogCiAJZmJpLT5mZGFkcjEgPSAodV9sb25nKWZiaS0+ZG1hZGVzY19mYmxvdzsgLyogb25seSB1c2VkIGluIGR1YWwtcGFuZWwgbW9kZSAqLwotCQkKKwogCWZiaS0+ZG1hZGVzY19mYmhpZ2gtPmZzYWRyID0gZmJpLT5zY3JlZW47CiAJZmJpLT5kbWFkZXNjX2ZiaGlnaC0+ZmlkciA9IDA7CiAJZmJpLT5kbWFkZXNjX2ZiaGlnaC0+bGRjbWQgPSBCWVRFU19QRVJfUEFORUw7CkBAIC0xMDU1LDcgKzEwNTUsNyBAQAogCQlmYmktPmRtYWRlc2NfcGFsZXR0ZS0+ZmRhZHIgPSAodV9sb25nKWZiaS0+ZG1hZGVzY19mYmhpZ2g7CiAJCWZiaS0+ZG1hZGVzY19mYmhpZ2gtPmZkYWRyID0gKHVfbG9uZylmYmktPmRtYWRlc2NfcGFsZXR0ZTsKIAkJLyogZmxpcHMgYmFjayBhbmQgZm9ydGggYmV0d2VlbiBwYWwgYW5kIGZiaGlnaCAqLwotCQlmYmktPmZkYWRyMCA9ICh1X2xvbmcpZmJpLT5kbWFkZXNjX3BhbGV0dGU7IAorCQlmYmktPmZkYWRyMCA9ICh1X2xvbmcpZmJpLT5kbWFkZXNjX3BhbGV0dGU7CiAJfQogCWVsc2UKIAl7CkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCWRlYnVnKCJmYmktPmRtYWRlc2NfZmJsb3ctPmxkY21kID0gMHglbHhcbiIsIGZiaS0+ZG1hZGVzY19mYmxvdy0+bGRjbWQpOwogCWRlYnVnKCJmYmktPmRtYWRlc2NfZmJoaWdoLT5sZGNtZCA9IDB4JWx4XG4iLCBmYmktPmRtYWRlc2NfZmJoaWdoLT5sZGNtZCk7CiAJZGVidWcoImZiaS0+ZG1hZGVzY19wYWxldHRlLT5sZGNtZCA9IDB4JWx4XG4iLCBmYmktPmRtYWRlc2NfcGFsZXR0ZS0+bGRjbWQpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2NwdS9weGEvc3RhcnQuUyBiL2NwdS9weGEvc3RhcnQuUwppbmRleCA5NWIzMGU0Li5jMmI3NWRhIDEwMDY0NAotLS0gYS9jcHUvcHhhL3N0YXJ0LlMKKysrIGIvY3B1L3B4YS9zdGFydC5TCkBAIC04Niw4ICs4Niw4IEBACiAvKgogICogVGhpcyBpcyBkZWZpbmVkIGluIHRoZSBib2FyZCBzcGVjaWZpYyBsaW5rZXIgc2NyaXB0CiAgKi8KLS5nbG9ibCBfYnNzX3N0YXJ0CQotX2Jzc19zdGFydDoJCisuZ2xvYmwgX2Jzc19zdGFydAorX2Jzc19zdGFydDoKIAkud29yZCBic3Nfc3RhcnQKIAogLmdsb2JsIF9ic3NfZW5kCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogcmVsb2NhdGU6CQkJCS8qIHJlbG9jYXRlIFUtQm9vdCB0byBSQU0JICAgICovCiAJYWRyCXIwLCBfc3RhcnQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCi0JbGRyCXIxLCBfVEVYVF9CQVNFCQkvKiB0ZXN0IGlmIHdlIHJ1biBmcm9tIGZsYXNoIG9yIFJBTSAqLwkKKwlsZHIJcjEsIF9URVhUX0JBU0UJCS8qIHRlc3QgaWYgd2UgcnVuIGZyb20gZmxhc2ggb3IgUkFNICovCiAJY21wICAgICByMCwgcjEgICAgICAgICAgICAgICAgICAvKiBkb24ndCByZWxvYyBkdXJpbmcgZGVidWcgICAgICAgICAqLwogCWJlcSAgICAgc3RhY2tfc2V0dXAKIApAQCAtMTcyLDcgKzE3Miw3IEBACiBjbGJzc19sOnN0cglyMiwgW3IwXQkJLyogY2xlYXIgbG9vcC4uLiAgICAgICAgICAgICAgICAgICAgKi8KIAlhZGQJcjAsIHIwLCAjNAogCWNtcAlyMCwgcjEKLQlibmUJY2xic3NfbAkgCisJYm5lCWNsYnNzX2wKIAogCiAJbGRyCXBjLCBfc3RhcnRfYXJtYm9vdApAQCAtNDcxLDQgKzQ3MSwzIEBACiByZXNldF9lbmRsZXNzOgogCiAJYglyZXNldF9lbmRsZXNzCi0KZGlmZiAtLWdpdCBhL2NwdS9zYTExMDAvaW50ZXJydXB0cy5jIGIvY3B1L3NhMTEwMC9pbnRlcnJ1cHRzLmMKaW5kZXggYmU1Mjg0OS4uNzVmOTM5YyAxMDA2NDQKLS0tIGEvY3B1L3NhMTEwMC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L3NhMTEwMC9pbnRlcnJ1cHRzLmMKQEAgLTc1LDcgKzc1LDYgQEAKICNlbmRpZgogCiAKLQogdm9pZCBiYWRfbW9kZSAodm9pZCkKIHsKIAlwYW5pYyAoIlJlc2V0dGluZyBDUFUgLi4uXG4iKTsKZGlmZiAtLWdpdCBhL2NwdS9zYTExMDAvc3RhcnQuUyBiL2NwdS9zYTExMDAvc3RhcnQuUwppbmRleCBjMGYzMGY1Li44MmYwOTRhIDEwMDY0NAotLS0gYS9jcHUvc2ExMTAwL3N0YXJ0LlMKKysrIGIvY3B1L3NhMTEwMC9zdGFydC5TCkBAIC0yNiw3ICsyNiw2IEBACiAgKi8KIAogCi0KICNpbmNsdWRlIDxjb25maWcuaD4KICNpbmNsdWRlIDx2ZXJzaW9uLmg+CiAKQEAgLTI0Miw4ICsyNDEsNiBAQAogCW1vdglwYywgbHIKIAogCi0KLQogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvZGlzay9wYXJ0LmMgYi9kaXNrL3BhcnQuYwppbmRleCA3MDUxMWNhLi40N2RjMzliIDEwMDY0NAotLS0gYS9kaXNrL3BhcnQuYworKysgYi9kaXNrL3BhcnQuYwpAQCAtMTAzLDExICsxMDMsMTAgQEAKIH0KIAogCi0KICNpZiBkZWZpbmVkKENPTkZJR19NQUNfUEFSVElUSU9OKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfRE9TX1BBUlRJVElPTikgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0lTT19QQVJUSVRJT04pIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19BTUlHQV9QQVJUSVRJT04pIAorICAgIGRlZmluZWQoQ09ORklHX0FNSUdBX1BBUlRJVElPTikKIAogdm9pZCBpbml0X3BhcnQgKGJsb2NrX2Rldl9kZXNjX3QgKiBkZXZfZGVzYykKIHsKZGlmZiAtLWdpdCBhL2Rpc2svcGFydF9hbWlnYS5jIGIvZGlzay9wYXJ0X2FtaWdhLmMKaW5kZXggYWFmYmNkOC4uZjFhZDI0YSAxMDA2NDQKLS0tIGEvZGlzay9wYXJ0X2FtaWdhLmMKKysrIGIvZGlzay9wYXJ0X2FtaWdhLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBIYW5zLUpvZXJnIEZyaWVkZW4sIEh5cGVyaW9uIEVudGVydGFpbm1lbnQgCisgKiBIYW5zLUpvZXJnIEZyaWVkZW4sIEh5cGVyaW9uIEVudGVydGFpbm1lbnQKICAqIEhhbnMtSm9lcmdGQGh5cGVyaW9uLWVudGVydGFpbm1lbnQuY29tCiAgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBpbnQgbGVuID0gKnN0cmluZysrOwogICAgIGNoYXIgYnVmZmVyWzI1Nl07CiAgICAgaW50IGk7Ci0gICAgCisKICAgICBpID0gMDsKICAgICB3aGlsZSAobGVuKQogICAgIHsKQEAgLTk3LDcgKzk3LDcgQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCBoZWFkZXItPnN1bW1lZF9sb25nczsgaSsrKQogCXN1bSArPSAqYmxvY2srKzsKLSAgICAKKwogICAgIHJldHVybiAoc3VtICE9IDApOwogfQogCkBAIC0xMjYsMTIgKzEyNiwxMiBAQAogc3RhdGljIHZvaWQgcHJpbnRfcGFydF9pbmZvKHN0cnVjdCBwYXJ0aXRpb25fYmxvY2sgKnApCiB7CiAgICAgc3RydWN0IGFtaWdhX3BhcnRfZ2VvbWV0cnkgKmc7Ci0gICAgCisKICAgICBnID0gKHN0cnVjdCBhbWlnYV9wYXJ0X2dlb21ldHJ5ICopJihwLT5lbnZpcm9ubWVudCk7CiAKICAgICBic3RyX3ByaW50KHAtPmRyaXZlX25hbWUpOwotICAgIHByaW50ZigiJTZkXHQlNmRcdCIsIAotCSAgIGctPmxvd19jeWwgKiBnLT5ibG9ja19wZXJfdHJhY2sgKiBnLT5zdXJmYWNlcyAsIAorICAgIHByaW50ZigiJTZkXHQlNmRcdCIsCisJICAgZy0+bG93X2N5bCAqIGctPmJsb2NrX3Blcl90cmFjayAqIGctPnN1cmZhY2VzICwKIAkgICAoZy0+aGlnaF9jeWwgLSBnLT5sb3dfY3lsICsgMSkgKiBnLT5ibG9ja19wZXJfdHJhY2sgKiBnLT5zdXJmYWNlcyAtIDEpOwogICAgIHByaW50X2Rpc2tfdHlwZShnLT5kb3NfdHlwZSk7CiAgICAgcHJpbnRmKCJcdCU1ZFxuIiwgZy0+Ym9vdF9wcmlvcml0eSk7CkBAIC0xNzgsNyArMTc4LDcgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotLyogCisvKgogICogU2VhcmNoIGZvciBib290IGNvZGUKICAqIEFnYWluLCB0aGUgZmlyc3QgYm9vdCBibG9jayBtdXN0IGJlIGxvY2F0ZWQgc29tZXdoZXJlIGluIHRoZSBmaXJzdCAxNiBibG9ja3MsIG9yIHJvb3RlZCBpbiB0aGUKICAqIFJpZGdpZCBkaXNrIGJsb2NrCkBAIC0yMjEsNyArMjIxLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAotLyogCisvKgogICogVGVzdCBpZiB0aGUgZ2l2ZW4gcGFydGl0aW9uIGhhcyBhbiBBbWlnYSBwYXJ0aXRpb24gdGFibGUvUmlnaWQKICAqIERpc2sgYmxvY2sKICAqLwpAQCAtMjMxLDcgKzIzMSw3IEBACiAgICAgc3RydWN0IGJvb3Rjb2RlX2Jsb2NrICpib290Y29kZTsKIAogICAgIFBSSU5URigidGVzdF9wYXJ0X2FtaWdhOiBUZXN0aW5nIGZvciBhbiBBbWlnYSBSREIgcGFydGl0aW9uXG4iKTsKLSAgICAKKwogICAgIHJkYiA9IGdldF9yZGlzayhkZXZfZGVzYyk7CiAgICAgaWYgKHJkYikKICAgICB7CkBAIC0yNDMsNyArMjQzLDcgQEAKIAogCXJldHVybiAwOwogICAgIH0KLSAgICBlbHNlIAorICAgIGVsc2UKICAgICB7CiAJUFJJTlRGKCJ0ZXN0X3BhcnRfYW1pZ2E6IG5vIFJEQiBmb3VuZFxuIik7CiAJcmV0dXJuIC0xOwpAQCAtMjUxLDcgKzI1MSw3IEBACiAKIH0KIAotLyogCisvKgogICogRmluZCBwYXJ0aXRpb24gbnVtYmVyIHBhcnRudW0gb24gdGhlIGdpdmVuIGRyaXZlLgogICovCiBzdGF0aWMgc3RydWN0IHBhcnRpdGlvbl9ibG9jayAqZmluZF9wYXJ0aXRpb24oYmxvY2tfZGV2X2Rlc2NfdCAqZGV2X2Rlc2MsIGludCBwYXJ0bnVtKQpAQCAtMjYyLDEyICsyNjIsMTIgQEAKIAogICAgIFBSSU5URigiVHJ5aW5nIHRvIGZpbmQgcGFydGl0aW9uIGJsb2NrICVkXG4iLCBwYXJ0bnVtKTsKICAgICByZGIgPSBnZXRfcmRpc2soZGV2X2Rlc2MpOwotICAgIGlmICghcmRiKSAKKyAgICBpZiAoIXJkYikKICAgICB7CiAJUFJJTlRGKCJmaW5kX3BhcnRpdGlvbjogbm8gcmRiIGZvdW5kXG4iKTsKIAlyZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgCisKICAgICBQUklOVEYoImZpbmRfcGFydGl0aW9uOiBTY2FubmluZyBwYXJ0aXRpb24gbGlzdFxuIik7CiAKICAgICBibG9jayA9IHJkYi0+cGFydGl0aW9uX2xpc3Q7CkBAIC0yODYsNyArMjg2LDcgQEAKIAkJaWYgKHN1bV9ibG9jaygoc3RydWN0IGJsb2NrX2hlYWRlciAqKXApID09IDApCiAJCXsKIAkJICAgIGlmIChwYXJ0bnVtID09IDApIGJyZWFrOwotCQkgICAgZWxzZSAKKwkJICAgIGVsc2UKIAkJICAgIHsKIAkJCXBhcnRudW0tLTsKIAkJCWJsb2NrID0gcC0+bmV4dDsKQEAgLTI5Niw3ICsyOTYsNyBAQAogCX0gZWxzZSBibG9jayA9IDB4RkZGRkZGRkY7CiAgICAgfQogCi0gICAgaWYgKGJsb2NrID09IDB4RkZGRkZGRkYpIAorICAgIGlmIChibG9jayA9PSAweEZGRkZGRkZGKQogICAgIHsKIAlQUklOVEYoIlBBUlQgYmxvY2sgbm90IGZvdW5kXG4iKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTMwNSw3ICszMDUsNyBAQAogICAgIHJldHVybiAoc3RydWN0IHBhcnRpdGlvbl9ibG9jayAqKWJsb2NrX2J1ZmZlcjsKIH0KIAotLyogCisvKgogICogR2V0IGluZm8gYWJvdXQgYSBwYXJ0aXRpb24KICAqLwogaW50IGdldF9wYXJ0aXRpb25faW5mb19hbWlnYSAoYmxvY2tfZGV2X2Rlc2NfdCAqZGV2X2Rlc2MsIGludCBwYXJ0LCBkaXNrX3BhcnRpdGlvbl90ICppbmZvKQpAQCAtMzIxLDcgKzMyMSw3IEBACiAgICAgaW5mby0+c2l6ZSAgPSAoZy0+aGlnaF9jeWwgLSBnLT5sb3dfY3lsICsgMSkgKiBnLT5ibG9ja19wZXJfdHJhY2sgKiBnLT5zdXJmYWNlcyAtIDE7CiAgICAgaW5mby0+Ymxrc3ogPSByZGIuYmxvY2tfYnl0ZXM7CiAgICAgYmNwbF9zdHJjcHkoaW5mby0+bmFtZSwgcC0+ZHJpdmVfbmFtZSk7Ci0gICAgCisKIAogICAgIGRpc2tfdHlwZSA9IGctPmRvc190eXBlOwogCkBAIC0zMzEsMTIgKzMzMSwxMiBAQAogICAgIGluZm8tPnR5cGVbM10gPSAnXFwnOwogICAgIGluZm8tPnR5cGVbNF0gPSAoZGlza190eXBlICYgMHgwMDAwMDBGRikgKyAnMCc7CiAgICAgaW5mby0+dHlwZVs1XSA9IDA7Ci0gICAKKwogICAgIHJldHVybiAwOwogfQogCiB2b2lkIHByaW50X3BhcnRfYW1pZ2EgKGJsb2NrX2Rldl9kZXNjX3QgKmRldl9kZXNjKQoteyAgICAKK3sKICAgICBzdHJ1Y3QgcmlnaWRfZGlza19ibG9jayAqcmRiOwogICAgIHN0cnVjdCBib290Y29kZV9ibG9jayAqYm9vdDsKICAgICBzdHJ1Y3QgcGFydGl0aW9uX2Jsb2NrICpwOwpAQCAtMzQ0LDEyICszNDQsMTIgQEAKICAgICBpbnQgaSA9IDE7CiAKICAgICByZGIgPSBnZXRfcmRpc2soZGV2X2Rlc2MpOwotICAgIGlmICghcmRiKSAKKyAgICBpZiAoIXJkYikKICAgICB7CiAJUFJJTlRGKCJwcmludF9wYXJ0X2FtaWdhOiBubyByZGIgZm91bmRcbiIpOwogCXJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBQUklOVEYoInByaW50X3BhcnRfYW1pZ2E6IFNjYW5uaW5nIHBhcnRpdGlvbiBsaXN0XG4iKTsKIAogICAgIGJsb2NrID0gcmRiLT5wYXJ0aXRpb25fbGlzdDsKQEAgLTM3MCw3ICszNzAsNyBAQAogCXVsb25nIHJlczsKIAogCVBSSU5URigiVHJ5aW5nIHRvIGxvYWQgYmxvY2sgIzB4JVhcbiIsIGJsb2NrKTsKLQkKKwogCXJlcyA9IGRldl9kZXNjLT5ibG9ja19yZWFkKGRldl9kZXNjLT5kZXYsIGJsb2NrLCAxLAogCQkJCSAgICh1bG9uZyAqKWJsb2NrX2J1ZmZlcik7CiAJaWYgKHJlcyA9PSAxKQpkaWZmIC0tZ2l0IGEvZGlzay9wYXJ0X2FtaWdhLmggYi9kaXNrL3BhcnRfYW1pZ2EuaAppbmRleCA5ZTU5YmU5Li4yMGE4ZmRmIDEwMDY0NAotLS0gYS9kaXNrL3BhcnRfYW1pZ2EuaAorKysgYi9kaXNrL3BhcnRfYW1pZ2EuaApAQCAtNDMsNyArNDMsNyBAQAogICogIlJpZ2lkRGlza0Jsb2NrIi4KICAqLwogCi1zdHJ1Y3QgcmlnaWRfZGlza19ibG9jayAKK3N0cnVjdCByaWdpZF9kaXNrX2Jsb2NrCiB7CiAgICAgdTMyIGlkOwogICAgIHUzMiBzdW1tZWRfbG9uZ3M7CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgdTMyIGRyaXZlX2luaXQ7CiAgICAgdTMyIGJvb3Rjb2RlX2Jsb2NrOwogICAgIHUzMiByZXNlcnZlZF8xWzVdOwotICAgIAorCiAgICAgLyogUGh5c2ljYWwgZHJpdmUgZ2VvbWV0cnkgKi8KICAgICB1MzIgY3lsaW5kZXJzOwogICAgIHUzMiBzZWN0b3JzOwpAQCAtNzksMTQgKzc5LDE0IEBACiAgICAgdTMyIGF1dG9fcGFya19zZWNvbmRzOwogICAgIHUzMiBoaWdoX3Jkc2tfYmxvY2s7CiAgICAgdTMyIHJlc2VydmVkXzQ7Ci0gICAgCisKICAgICBjaGFyIGRpc2tfdmVuZG9yWzhdOwogICAgIGNoYXIgZGlza19wcm9kdWN0WzE2XTsKICAgICBjaGFyIGRpc2tfcmV2aXNpb25bNF07CiAgICAgY2hhciBjb250cm9sbGVyX3ZlbmRvcls4XTsKICAgICBjaGFyIGNvbnRyb2xsZXJfcHJvZHVjdFsxNl07CiAgICAgY2hhciBjb250cm9sbGVyX3JldmlzaW9uWzRdOwotICAgIAorCiAgICAgdTMyIHJlc2VydmVkXzVbMTBdOwogfTsKIApAQCAtOTQsNyArOTQsNyBAQAogICogRWFjaCBwYXJ0aXRpb24gb24gdGhpcyBkcml2ZSBpcyBkZWZpbmVkIGJ5IHN1Y2ggYSBibG9jawogICovCiAKLXN0cnVjdCBwYXJ0aXRpb25fYmxvY2sgCitzdHJ1Y3QgcGFydGl0aW9uX2Jsb2NrCiB7CiAgICAgdTMyIGlkOwogICAgIHUzMiBzdW1tZWRfbG9uZ3M7CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICB1MzIgcmVzZXJ2ZWRfM1sxNV07CiB9OwogCi1zdHJ1Y3QgYm9vdGNvZGVfYmxvY2sgCitzdHJ1Y3QgYm9vdGNvZGVfYmxvY2sKIHsKICAgICB1MzIgICBpZDsKICAgICB1MzIgICBzdW1tZWRfbG9uZ3M7CkBAIC0xMjUsMTIgKzEyNSwxMiBAQAogI2RlZmluZSBBTUlHQV9JRF9QQVJUICAgICAgICAgICAgICAgICAgIDB4NTA0MTUyNTQKICNkZWZpbmUgQU1JR0FfSURfQk9PVCAgICAgICAgICAgICAgICAgICAweDQyNGY0ZjU0CiAKLS8qIAorLyoKICAqIFRoZSBlbnZpcm9ubWVudCBhcnJheSBpbiB0aGUgcGFydGl0aW9uIGJsb2NrCiAgKiBkZXNjcmliZXMgdGhlIHBhcnRpdGlvbgogICovCiAKLXN0cnVjdCBhbWlnYV9wYXJ0X2dlb21ldHJ5IAorc3RydWN0IGFtaWdhX3BhcnRfZ2VvbWV0cnkKIHsKICAgICB1MzIgdGFibGVfc2l6ZTsKICAgICB1MzIgc2l6ZV9ibG9ja3M7CmRpZmYgLS1naXQgYS9kaXNrL3BhcnRfZG9zLmMgYi9kaXNrL3BhcnRfZG9zLmMKaW5kZXggZmM2NzY5Yi4uZDU4NWIzNSAxMDA2NDQKLS0tIGEvZGlzay9wYXJ0X2Rvcy5jCisrKyBiL2Rpc2svcGFydF9kb3MuYwpAQCAtNjcsNyArNjcsNiBAQAogfQogCiAKLQogaW50IHRlc3RfcGFydF9kb3MgKGJsb2NrX2Rldl9kZXNjX3QgKmRldl9kZXNjKQogewogCXVuc2lnbmVkIGNoYXIgYnVmZmVyW0RFRkFVTFRfU0VDVE9SX1NJWkVdOwpAQCAtNzUsNyArNzQsNyBAQAogCWlmICgoZGV2X2Rlc2MtPmJsb2NrX3JlYWQoZGV2X2Rlc2MtPmRldiwgMCwgMSwgKHVsb25nICopIGJ1ZmZlcikgIT0gMSkgfHwKIAkgICAgKGJ1ZmZlcltET1NfUEFSVF9NQUdJQ19PRkZTRVQgKyAwXSAhPSAweDU1KSB8fAogCSAgICAoYnVmZmVyW0RPU19QQVJUX01BR0lDX09GRlNFVCArIDFdICE9IDB4YWEpICkgewotCSAgICAJcmV0dXJuICgtMSk7CisJCXJldHVybiAoLTEpOwogCX0KIAlyZXR1cm4gKDApOwogfQpAQCAtMTA2LDcgKzEwNSw3IEBACiAJcHQgPSAoZG9zX3BhcnRpdGlvbl90ICopIChidWZmZXIgKyBET1NfUEFSVF9UQkxfT0ZGU0VUKTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrLCBwdCsrKSB7CiAJCS8qCi0gICAgICAgICAgICAgICAgICogZmRpc2sgZG9lcyBub3Qgc2hvdyB0aGUgZXh0ZW5kZWQgcGFydGl0aW9ucyB0aGF0CisJCSAqIGZkaXNrIGRvZXMgbm90IHNob3cgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbnMgdGhhdAogCQkgKiBhcmUgbm90IGluIHRoZSBNQlIKIAkJICovCiAKQEAgLTE2Niw4ICsxNjUsOCBAQAogCXB0ID0gKGRvc19wYXJ0aXRpb25fdCAqKSAoYnVmZmVyICsgRE9TX1BBUlRfVEJMX09GRlNFVCk7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKywgcHQrKykgewogCQkvKgotICAgICAgICAgICAgICAgICAqIGZkaXNrIGRvZXMgbm90IHNob3cgdGhlIGV4dGVuZGVkIHBhcnRpdGlvbnMgdGhhdAotICAgICAgICAgICAgICAgICAqIGFyZSBub3QgaW4gdGhlIE1CUgorCQkgKiBmZGlzayBkb2VzIG5vdCBzaG93IHRoZSBleHRlbmRlZCBwYXJ0aXRpb25zIHRoYXQKKwkJICogYXJlIG5vdCBpbiB0aGUgTUJSCiAJCSAqLwogCQlpZiAoKHB0LT5zeXNfaW5kICE9IDApICYmCiAJCSAgICAocGFydF9udW0gPT0gd2hpY2hfcGFydCkgJiYKQEAgLTIzMSw1ICsyMzAsNCBAQAogfQogCiAKLQogI2VuZGlmCS8qIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lERSkgJiYgQ09ORklHX0RPU19QQVJUSVRJT04gKi8KZGlmZiAtLWdpdCBhL2Rpc2svcGFydF9pc28uYyBiL2Rpc2svcGFydF9pc28uYwppbmRleCA3MjI1OTI3Li40ZDc0NmU0IDEwMDY0NAotLS0gYS9kaXNrL3BhcnRfaXNvLmMKKysrIGIvZGlzay9wYXJ0X2lzby5jCkBAIC0yMzAsNyArMjMwLDYgQEAKIH0KIAogCi0KIHZvaWQgcHJpbnRfcGFydF9pc28oYmxvY2tfZGV2X2Rlc2NfdCAqIGRldl9kZXNjKQogewogCWRpc2tfcGFydGl0aW9uX3QgaW5mbzsKZGlmZiAtLWdpdCBhL2Rpc2svcGFydF9pc28uaCBiL2Rpc2svcGFydF9pc28uaAppbmRleCAzNGFkYmIyLi4yNjYzNTc4IDEwMDY0NAotLS0gYS9kaXNrL3BhcnRfaXNvLmgKKysrIGIvZGlzay9wYXJ0X2lzby5oCkBAIC0xMjcsOCArMTI3LDYgQEAKIH1pc29fcGFydF9yZWNfdDsKIAogCi0KLQogdHlwZWRlZiBzdHJ1Y3QgaXNvX3ZhbF9lbnRyeSB7CiAJdW5zaWduZWQgY2hhcgloZWFkZXJfaWQ7CQkvKiBIZWFkZXIgSUQgbXVzdCBiZSAweDAxICovCiAJdW5zaWduZWQgY2hhcglwbGF0Zm9ybTsJCQkvKiBQbGF0Zm9ybTogMD14ODYsIDE9UG93ZXJQQywgMj1NQUMgKi8KQEAgLTE1OSwxMyArMTU3LDQgQEAKIAogdm9pZCBwcmludF9wYXJ0aXRpb25fY2QoaW50IGRldik7CiAKLQotCi0KLQotCi0KLQogI2VuZGlmIC8qIF9QQVJUX0NEX0ggKi8KLQotCmRpZmYgLS1naXQgYS9kaXNrL3BhcnRfbWFjLmMgYi9kaXNrL3BhcnRfbWFjLmMKaW5kZXggZWU5ZDE3MC4uMDg3MTMzZCAxMDA2NDQKLS0tIGEvZGlzay9wYXJ0X21hYy5jCisrKyBiL2Rpc2svcGFydF9tYWMuYwpAQCAtMTkwLDkgKzE5MCw5IEBACiAKIAlmb3IgKDs7KSB7CiAJCS8qCi0gICAgICAgICAgICAgICAgICogV2UgbXVzdCBhbHdheXMgcmVhZCB0aGUgZGVzY3JpdHBvciBibG9jayBmb3IKLSAgICAgICAgICAgICAgICAgKiBwYXJ0aXRpb24gMSBmaXJzdCBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHdheSB0bwotICAgICAgICAgICAgICAgICAqIGtub3cgaG93IG1hbnkgcGFydGl0aW9ucyB3ZSBoYXZlLgorCQkgKiBXZSBtdXN0IGFsd2F5cyByZWFkIHRoZSBkZXNjcml0cG9yIGJsb2NrIGZvcgorCQkgKiBwYXJ0aXRpb24gMSBmaXJzdCBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHdheSB0bworCQkgKiBrbm93IGhvdyBtYW55IHBhcnRpdGlvbnMgd2UgaGF2ZS4KIAkJICovCiAJCWlmIChkZXZfZGVzYy0+YmxvY2tfcmVhZCAoZGV2X2Rlc2MtPmRldiwgbiwgMSwgKHVsb25nICopcGRiX3ApICE9IDEpIHsKIAkJCXByaW50ZiAoIioqIENhbid0IHJlYWQgUGFydGl0aW9uIE1hcCBvbiAlZDolZCAqKlxuIiwKZGlmZiAtLWdpdCBhL2Rpc2svcGFydF9tYWMuaCBiL2Rpc2svcGFydF9tYWMuaAppbmRleCBmYjFlZGFjLi5hN2FkNjk3IDEwMDY0NAotLS0gYS9kaXNrL3BhcnRfbWFjLmgKKysrIGIvZGlzay9wYXJ0X21hYy5oCkBAIC05MCw3ICs5MCw3IEBACiAJdWNoYXIJcHJvY2Vzc29yWzE2XTsJLyogVHlwZSBvZiBQcm9jZXNzb3IJCQkqLwogCV9fdTE2CXBhcnRfcGFkWzE4OF07CS8qIHJlc2VydmVkCQkJCSovCiAjaWZkZWYgQ09ORklHX0lTT19QQVJUSVRJT04KLSAgICAgICAgdWNoYXIgICBpc29fZHVtbXlbMjA0OF07LyogUmVzZXJ2ZXJlIGVub3VnaCByb29tIGZvciBhbiBJU08gcGFydGl0aW9uIGJsb2NrIHRvIGZpdCAqLyAKKwl1Y2hhciAgIGlzb19kdW1teVsyMDQ4XTsvKiBSZXNlcnZlcmUgZW5vdWdoIHJvb20gZm9yIGFuIElTTyBwYXJ0aXRpb24gYmxvY2sgdG8gZml0ICovCiAjZW5kaWYKIH0gbWFjX3BhcnRpdGlvbl90OwogCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLWkzODYgYi9kb2MvUkVBRE1FLWkzODYKaW5kZXggODYyZjNmNy4uMDJiNzUzYyAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS1pMzg2CisrKyBiL2RvYy9SRUFETUUtaTM4NgpAQCAtNCwyMyArNCwyMyBAQAogSXQgaXMgY3VycmVudGx5IGNhcGFibGUgb2YgYm9vdGluZyBhIGxpbnV4IGJ6SW1hZ2UgZnJvbSBmbGFzaCBvbgogdGhlIEFNRCBTQzUyMCBDRFAgcGxhdGZvcm0uCiAKLUl0IHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIFBQQ0Jvb3QgdGFrZW4gZnJvbSB0aGUgQ1ZTIE9jdG9iZXIgMjggMjAwMi4gIAorSXQgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gUFBDQm9vdCB0YWtlbiBmcm9tIHRoZSBDVlMgT2N0b2JlciAyOCAyMDAyLgogCiBUbyBjb21waWxlOgogCiAxKSBVbnBhY2sgdGhlIHNvdXJjZSB0cmVlLCBlaXRoZXIgZnJvbSB0aGUgY29tcGxldGUgdGFyYmFsbCBvcgogICAgZnJvbSB0aGUgdmlyZ2luIHNuYXBzaG90ICsgdGhlIHBhdGNoCi0gICAKKwogMikgQ29uZmlndXJlIHRoZSBzb3VyY2UKICAgICQgbWFrZSBzYzUyMF9jZHBfY29tZmlnCiAgICAkIG1ha2UKLSAgIAorCiBUbyB1c2UgdGhpcyBjb2RlIG9uIHRoZSBDRFA6CiAxKSBNYWtlIGEgc3VpdGFibGUga2VybmVsLCBJIHVzZWQgMi40LjE5IHdpdGggdGhlIG10ZC1zdXBwb3J0IHVwZGF0ZWQKICAgIGZyb20gdGhlIE1URCBDVlMgYW5kIGEgcGF0Y2ggdG8gYWxsb3cgcm9vdD0vZGV2L210ZGJsb2NrMSB3aGljaCBJCi0gICBpbmNsdWRlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4gCisgICBpbmNsdWRlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KICAgIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBpbiB0aGUgTVREIHNlY3Rpb24gbWlnaHQgYmUgdXNlZnVsOgotICAgCisKICAgIENPTkZJR19NVERfUEhZU01BUD15CiAgICBDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MzgxMDAwMDAKICAgIENPTkZJR19NVERfUEhZU01BUF9MRU49N2EwMDAwCkBAIC0yOSw5ICsyOSw5IEBACiAKIDIpIFByb2dyYW0gaXQgaW4gdG8gdGhlIENEUCBmbGFzaGJhbmsgd2l0aCByZW1vbgogICAgdS1ib290LmJpbiBzaG91bGQgYmUgcHJvZ3JhbW1lZCBhdHQgb2Zmc2V0IDB4N2UwMDAgYW5kIHRoZSBrZXJuZWwgYXQKLSAgIG9mZnNldCAwLiBJZiB5b3Ugd2FudCB0byB1c2UgYSBqZmZzMiByb290IGZpbGUgc3lzdGVtIChub3QgaW5jbHVkZWQgaGVyZSksIAorICAgb2Zmc2V0IDAuIElmIHlvdSB3YW50IHRvIHVzZSBhIGpmZnMyIHJvb3QgZmlsZSBzeXN0ZW0gKG5vdCBpbmNsdWRlZCBoZXJlKSwKICAgIGl0IHNob3VsZCBiZSAgcHJvZ3JhbW1lZCB0byBvZmZzZXQgMHgxMDAwMDAuCi0gICAKKwogICAgcmVtb24+IHoKICAgIHJlbW9uPiB5aQogICAgcmVtb24+IG5zIHUtYm9vdC5iaW4gN2UwMDAwCkBAIC0zOSwyMiArMzksMjEgQEAKICAgIHJlbW9uPiBucyBpbWFnZS5qZmZzMiAxMDAwMDAKIAogMykgQ29ubmVjdCBhIHRlcm1pbmFsIHRvIHRoZSAyNXBpbiBzZXJpYWwgcG9ydCBhdCA5NjAwYnBzLCBhbmQgc3RhcnQgdGhlIENEUC4KLSAgIAorCiAgICByZW1vbj4gegogICAgcmVtb24+IGcKIAogNCkgVS1Cb290IHNob3VsZCBvdXRwdXQgc29tZSBtZXNzYWdlIGFuZCBhIHByb21wdCBvbiB0aGUgdGVybWluYWwsIHRvCiAgICBzdGFydCB0aGUga2VybmVsIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKLSAgIAorCiAgICBCT09UPiBib290bQotICAgCisKIDUpIFRoZSBrZXJuZWwgc2hvdWxkIGJvb3QsIGFuZCBtb3VudCB0aGUgcm9vdCBmaWxlc3lzdGVtIGlmIHByZXNlbnQuCiAKIFdlIGhvcGUgeW91IGZpbmQgdGhpcyBzdHVmZiB1c2VmdWwKIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQogCiAKLQogLS0tIGxpbnV4LTIuNC4xOS1vcmlnL2luaXQvZG9fbW91bnRzLmMJU2F0IEF1ZyAgMyAwMjozOTo0NiAyMDAyCiArKysgbGludXgtMi40LjE5L2luaXQvZG9fbW91bnRzLmMJTW9uIFNlcCAyMyAxNjoyMTozMyAyMDAyCiBAQCAtMjI0LDYgKzIyNCwxNCBAQApAQCAtNzEsNCArNzAsNSBAQAogKwl7ICJtdGRibG9jazciLCAweDFmMDcgfSwKICAJeyBOVUxMLCAwIH0KICB9OwotIAorCistLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLkVWQi02NDI2MC03NTBDWCBiL2RvYy9SRUFETUUuRVZCLTY0MjYwLTc1MENYCmluZGV4IDQ4MWZlZmYuLjVlYTM4ZWEgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUuRVZCLTY0MjYwLTc1MENYCisrKyBiL2RvYy9SRUFETUUuRVZCLTY0MjYwLTc1MENYCkBAIC01LDQgKzUsMyBAQAogKiBJdCBoYXMgYSBzaW5nbGUgUENJIG1hbGUgY29ubmVjdG9yIGluc3RlYWQgb2YgdGhlIDQgUENJIGZlbWFsZQogICAgY29ubmVjdG9ycyBvbiB0aGUgQlAuIEl0IGFsc28gZ2V0cyBwb3dlciB0cm91Z2ggdGhlIFBDSSBjb25uZWN0b3IuCiAqIEl0IGhhcyBvbmx5IGEgc2luZ2xlIERJTU0gc2xvdCBpbnN0ZWFkIG9mIHRoZSAyIHNsb3RzIGluIHRoZSBCUC4KLQpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5JUEhBU0U0NTM5IGIvZG9jL1JFQURNRS5JUEhBU0U0NTM5CmluZGV4IDkzMDJmZjUuLmRlZmFkMzAgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUuSVBIQVNFNDUzOQorKysgYi9kb2MvUkVBRE1FLklQSEFTRTQ1MzkKQEAgLTg5LDcgKzg5LDcgQEAKIHNldGVudiAgLSBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzCiBzbGVlcCAgIC0gZGVsYXkgZXhlY3V0aW9uIGZvciBzb21lIHRpbWUKIHRmdHBib290LSBib290IGltYWdlIHZpYSBuZXR3b3JrIHVzaW5nIFRGVFAgcHJvdG9jb2wKLSAgICAgICAgICAgICAgIGFuZCBlbnYgdmFyaWFibGVzIGlwYWRkciBhbmQgc2VydmVyaXAKKwkgICAgICAgYW5kIGVudiB2YXJpYWJsZXMgaXBhZGRyIGFuZCBzZXJ2ZXJpcAogdmVyc2lvbiAtIHByaW50IG1vbml0b3IgdmVyc2lvbgogPyAgICAgICAtIGFsaWFzIGZvciAnaGVscCcKID0+CmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLkpGRlMyIGIvZG9jL1JFQURNRS5KRkZTMgppbmRleCAzMjQzODk1Li5mODU0OTg0IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLkpGRlMyCisrKyBiL2RvYy9SRUFETUUuSkZGUzIKQEAgLTY4LDkgKzY4LDkgQEAKIAogVE9ETy4KIAotICAgICAgICBBZGQgYSBuZXcgY29tbWFuZCBzbyBpdCdzIGFjdHVhbGx5IHBvc3NpYmxlIHRvIGNoYW5nZQorCUFkZCBhIG5ldyBjb21tYW5kIHNvIGl0J3MgYWN0dWFsbHkgcG9zc2libGUgdG8gY2hhbmdlCiAJcGFydGl0aW9uLgogCi0gICAgICAgIFJlbW92ZSB0aGUgYXNzdW1wdGlvbiB0aGF0IEpGRlMgY2FuIGRlcmVmZXJlbmNlIGEgcG9pbnRlcgotICAgICAgICBpbnRvIHRoZSBkaXNrLiBUaGUgY3VycmVudCBjb2RlIGRvIG5vdCB3b3JrIHdpdGggbWVtb3J5IGhvbGVzCi0gICAgICAgIG9yIGhhcmR3YXJlIHdpdGggYSBzbGlkaW5nIHdpbmRvdyAoUENNQ0lBKS4KKwlSZW1vdmUgdGhlIGFzc3VtcHRpb24gdGhhdCBKRkZTIGNhbiBkZXJlZmVyZW5jZSBhIHBvaW50ZXIKKwlpbnRvIHRoZSBkaXNrLiBUaGUgY3VycmVudCBjb2RlIGRvIG5vdCB3b3JrIHdpdGggbWVtb3J5IGhvbGVzCisJb3IgaGFyZHdhcmUgd2l0aCBhIHNsaWRpbmcgd2luZG93IChQQ01DSUEpLgpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5Nb2RlbSBiL2RvYy9SRUFETUUuTW9kZW0KaW5kZXggYTNiYTdiNy4uMTYxM2MxMSAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5Nb2RlbQorKysgYi9kb2MvUkVBRE1FLk1vZGVtCkBAIC03MCw0ICs3MCwzIEBACiBSb2Nrd2VsbCBPRU0gbW9kZW0gdGhpcyBjYW4gdG8gYmUgZG9uZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKIAogQVQmRDAmVwotCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLk9YQyBiL2RvYy9SRUFETUUuT1hDCmluZGV4IGU3YmI3NmYuLmM1ZGI1ZjggMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUuT1hDCisrKyBiL2RvYy9SRUFETUUuT1hDCkBAIC0yMiw0ICsyMiwzIEBACiAgIFdoZW4gdGhpcyBvcHRpb24gaXMgb24sIFUtQm9vdCBzd2l0Y2hlcyB0aGUgQWN0aXZlIExFRAogb2ZmIGJlZm9yZSBib290aW5nIGFuIGltYWdlIGFuZCBzd2l0Y2hlcyBpdCBvbiBpZiBib290aW5nCiBmYWlsZWQgZHVlIHRvIHNvbWUgcmVhc29ucy4KLQpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5QdXJwbGUgYi9kb2MvUkVBRE1FLlB1cnBsZQppbmRleCBmODExYjY3Li4wMDk4ZTI2IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLlB1cnBsZQorKysgYi9kb2MvUkVBRE1FLlB1cnBsZQpAQCAtNzEsNyArNzEsNiBAQAogICAgUG93ZXIgb24uICBVLUJvb3Qgc2hvdWxkIGNvbWUgdXAuCiAKIAotCiBJbXBsZW1lbnRhdGlvbiBOb3RlczoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLlJQWENsYXNzaWMgYi9kb2MvUkVBRE1FLlJQWENsYXNzaWMKaW5kZXggNWNhYTJiYy4uNTM0NGNjNiAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5SUFhDbGFzc2ljCisrKyBiL2RvYy9SRUFETUUuUlBYQ2xhc3NpYwpAQCAtMTcsNSArMTcsMyBAQAogLSBNYWMgYWRkcmVzcyBpcyByZWFkIGZyb20gRUVQUk9NCiAtIGV0aGVybmV0IG9uIFNDQzEgb3IgZmFzdCBldGhlcm5ldCBvbiBGRUMgYXJlIHJ1bm5pbmcgKGRlcGVuZGluZyBvbiB0aGUKICAgY29uZmlndXJhdGlvbiBmbGFnIENPTkZJR19GRUNfRU5FVCkKLQotCmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLlJQWGxpdGUgYi9kb2MvUkVBRE1FLlJQWGxpdGUKaW5kZXggMjViZjgwYi4uYzhjY2M0MSAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5SUFhsaXRlCisrKyBiL2RvYy9SRUFETUUuUlBYbGl0ZQpAQCAtMTI2LDEzICsxMjYsNiBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIAotCi0KLQotCi0KLQotCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMJTWlzYyBJbmZvcm1hdGlvbgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC03NTUsNyArNzQ4LDYgQEAKIAlQSVQgPSBQSVQgY291bnQJCS8qIFJlYWQgb25seSAqLwogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCUNMT0NLUyAqLwpAQCAtODI1LDcgKzgxNyw2IEBACiAJSlRSUyAgPSBKVEFHIHJlc2V0CiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoJRE1BICovCkBAIC04ODQsNCArODc1LDMgQEAKIAlBRCAgID0gMAogCURPTkUgPSAwCiAJT0IgICA9IDAKLQpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5TYW5kcG9pbnQ4MjQwIGIvZG9jL1JFQURNRS5TYW5kcG9pbnQ4MjQwCmluZGV4IDVjYjc5YjMuLmI1MDZjMDEgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUuU2FuZHBvaW50ODI0MAorKysgYi9kb2MvUkVBRE1FLlNhbmRwb2ludDgyNDAKQEAgLTIwLDcgKzIwLDYgQEAKIFNXMy41OiBvbglTVzMuNjogT0ZGCVNXMy43OiBPRkYJU1czLjg6IG9uCiAKIAotCiBUaGUgZm9sbG93aW5kIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGluc3RhbGxhdGlvbiBhbmQgaW5pdGlhbCBzdGVwcwogd2l0aCBVLUJvb3QgYW5kIFFOWCB3YXMgcHJvdmlkZWQgYnkgSmltIFNhbmRveiA8c2FuZG96QGx1Y2VudC5jb20+OgogCkBAIC0zOCwxOSArMzcsMTggQEAKIGh0dHA6Ly9lLXd3dy5tb3Rvcm9sYS5jb20vY29sbGF0ZXJhbC9VTklUWVg0Q09ORklHLnBkZgogCiAKLQogQ29ubmVjdGlvbiBEaWFncmFtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PT09PQorCQkJCQkgICAgPT09PT09PT09PT0KICA9PT0gICAgICAgICAgICAgICAgICAgICA9PT09PSAgICAgICAgICAgICB8LS0tLS0gICAgICB8CiB8ICAgfCA8LS0tLS0tLS0tLS0tLS0tPiB8ICAgICB8ICAgICAgICAgICAgfCAgICAgfCAgICAgfAogfFBDIHwgICAgICAgcnMyMzIgICAgICAgfCBCREkgfD09PT09PT09PT09PT1bXSAgIHwgICAgIHwKIHwgICB8ICAgICAgICAgICAgICAgICAgIHwyMDAwIHwgIEJETSBwcm9iZSB8ICAgICB8ICAgICB8CiB8ICAgfCA8LS0tLS0tLS0tLS0tLS0tPiB8ICAgICB8ICAgICAgICAgICAgfC0tLS0tICAgICAgfAogID09PSAgICAgICBldGhlcm5ldCAgICAgID09PT09ICAgICAgICAgICAgIHwgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhbmRwb2ludCBYMyB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbml0eSA4MjQwIHByb2MKKwkJCQkJICAgfCAgICAgICAgICAgfAorCQkJCQkgICAgPT09PT09PT09PT0KKwkJCQkJIFNhbmRwb2ludCBYMyB3aXRoCisJCQkJCSAgVW5pdHkgODI0MCBwcm9jCiAKIAogUEFSVCAxKQpAQCAtMzU0LDkgKzM1Miw5IEBACiBGaWxlbmFtZSAnc2FuZHBvaW50LXNpbXBsZS5lbGYnLgogTG9hZCBhZGRyZXNzOiAweDgwMDAwMAogTG9hZGluZzogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogZG9uZQogQnl0ZXMgdHJhbnNmZXJyZWQgPSAxMTIwMjg0ICgxMTE4MWMgaGV4KQogPT0+CkBAIC0zOTQsNCArMzkyLDMgQEAKIGN2cyAtZDpwc2VydmVyOmFub255bW91c0BjdnMudS1ib290LnNvdXJjZWZvcmdlLm5ldDovY3Zzcm9vdC91LWJvb3QgbG9naW4KIAogY3ZzIC16NiAtZDpwc2VydmVyOmFub255bW91c0BjdnMudS1ib290LnNvdXJjZWZvcmdlLm5ldDovY3Zzcm9vdC91LWJvb3QgY28gLVAgdS1ib290Ci0KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUuVFFNODI2MCBiL2RvYy9SRUFETUUuVFFNODI2MAppbmRleCA3ZTAzMDEwLi4wNTcxMDk1IDEwMDY0NAotLS0gYS9kb2MvUkVBRE1FLlRRTTgyNjAKKysrIGIvZG9jL1JFQURNRS5UUU04MjYwCkBAIC03Nyw3ICs3Nyw3IEBACiBib290bSAgIC0gYm9vdCBhcHBsaWNhdGlvbiBpbWFnZSBmcm9tIG1lbW9yeQogYm9vdHAgICAtIGJvb3QgaW1hZ2UgdmlhIG5ldHdvcmsgdXNpbmcgQm9vdFAvVEZUUCBwcm90b2NvbAogdGZ0cGJvb3QtIGJvb3QgaW1hZ2UgdmlhIG5ldHdvcmsgdXNpbmcgVEZUUCBwcm90b2NvbAotICAgICAgICAgICAgICAgYW5kIGVudiB2YXJpYWJsZXMgaXBhZGRyIGFuZCBzZXJ2ZXJpcAorCSAgICAgICBhbmQgZW52IHZhcmlhYmxlcyBpcGFkZHIgYW5kIHNlcnZlcmlwCiByYXJwYm9vdC0gYm9vdCBpbWFnZSB2aWEgbmV0d29yayB1c2luZyBSQVJQL1RGVFAgcHJvdG9jb2wKIGJvb3RkICAgLSBib290IGRlZmF1bHQsIGkuZS4sIHJ1biAnYm9vdGNtZCcKIGxvYWRzICAgLSBsb2FkIFMtUmVjb3JkIGZpbGUgb3ZlciBzZXJpYWwgbGluZQpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5hdXRvYm9vdCBiL2RvYy9SRUFETUUuYXV0b2Jvb3QKaW5kZXggMjA3MzZjYS4uYTZkNWY5OSAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5hdXRvYm9vdAorKysgYi9kb2MvUkVBRE1FLmF1dG9ib290CkBAIC02OSwyNSArNjksMjUgQEAKIAogICBib290cmV0cnkgZW52aXJvbm1lbnQgdmFyaWFibGUKIAotICAgICAgICBUaGVzZSBvcHRpb25zIGRldGVybWluZSB3aGF0IGhhcHBlbnMgYWZ0ZXIgYXV0b2Jvb3QgaXMKLSAgICAgICAgc3RvcHBlZCBhbmQgVS1Cb290IGlzIHdhaXRpbmcgZm9yIGNvbW1hbmRzLgorCVRoZXNlIG9wdGlvbnMgZGV0ZXJtaW5lIHdoYXQgaGFwcGVucyBhZnRlciBhdXRvYm9vdCBpcworCXN0b3BwZWQgYW5kIFUtQm9vdCBpcyB3YWl0aW5nIGZvciBjb21tYW5kcy4KIAotICAgICAgICBDT05GSUdfQk9PVF9SRVRSWV9USU1FIG11c3QgYmUgZGVmaW5lZCB0byBlbmFibGUgdGhlIGJvb3QKLSAgICAgICAgcmV0cnkgZmVhdHVyZS4gSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdib290cmV0cnknIGlzCi0gICAgICAgIGZvdW5kIHRoZW4gaXRzIHZhbHVlIGlzIHVzZWQsIG90aGVyd2lzZSB0aGUgcmV0cnkgdGltZW91dCBpcwotICAgICAgICBDT05GSUdfQk9PVF9SRVRSWV9USU1FLiBDT05GSUdfQk9PVF9SRVRSWV9NSU4gaXMgb3B0aW9uYWwgYW5kCi0gICAgICAgIGRlZmF1bHRzIHRvIENPTkZJR19CT09UX1JFVFJZX1RJTUUuIEFsbCB0aW1lcyBhcmUgaW4gc2Vjb25kcy4KKwlDT05GSUdfQk9PVF9SRVRSWV9USU1FIG11c3QgYmUgZGVmaW5lZCB0byBlbmFibGUgdGhlIGJvb3QKKwlyZXRyeSBmZWF0dXJlLiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ2Jvb3RyZXRyeScgaXMKKwlmb3VuZCB0aGVuIGl0cyB2YWx1ZSBpcyB1c2VkLCBvdGhlcndpc2UgdGhlIHJldHJ5IHRpbWVvdXQgaXMKKwlDT05GSUdfQk9PVF9SRVRSWV9USU1FLiBDT05GSUdfQk9PVF9SRVRSWV9NSU4gaXMgb3B0aW9uYWwgYW5kCisJZGVmYXVsdHMgdG8gQ09ORklHX0JPT1RfUkVUUllfVElNRS4gQWxsIHRpbWVzIGFyZSBpbiBzZWNvbmRzLgogCi0gICAgICAgIElmIHRoZSByZXRyeSB0aW1lb3V0IGlzIG5lZ2F0aXZlLCB0aGUgVS1Cb290IGNvbW1hbmQgcHJvbXB0Ci0gICAgICAgIG5ldmVyIHRpbWVzIG91dC4gT3RoZXJ3aXNlIGl0IGlzIGZvcmNlZCB0byBiZSBhdCBsZWFzdAotICAgICAgICBDT05GSUdfQk9PVF9SRVRSWV9NSU4gc2Vjb25kcy4gSWYgbm8gdmFsaWQgVS1Cb290IGNvbW1hbmQgaXMKLSAgICAgICAgZW50ZXJlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCB0aW1lIHRoZSBib290IGRlbGF5IHNlcXVlbmNlIGlzCi0gICAgICAgIHJlc3RhcnRlZC4gRWFjaCBjb21tYW5kIHRoYXQgVS1Cb290IGV4ZWN1dGVzIHJlc3RhcnRzIHRoZQotICAgICAgICB0aW1lb3V0LgorCUlmIHRoZSByZXRyeSB0aW1lb3V0IGlzIG5lZ2F0aXZlLCB0aGUgVS1Cb290IGNvbW1hbmQgcHJvbXB0CisJbmV2ZXIgdGltZXMgb3V0LiBPdGhlcndpc2UgaXQgaXMgZm9yY2VkIHRvIGJlIGF0IGxlYXN0CisJQ09ORklHX0JPT1RfUkVUUllfTUlOIHNlY29uZHMuIElmIG5vIHZhbGlkIFUtQm9vdCBjb21tYW5kIGlzCisJZW50ZXJlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCB0aW1lIHRoZSBib290IGRlbGF5IHNlcXVlbmNlIGlzCisJcmVzdGFydGVkLiBFYWNoIGNvbW1hbmQgdGhhdCBVLUJvb3QgZXhlY3V0ZXMgcmVzdGFydHMgdGhlCisJdGltZW91dC4KIAotICAgICAgICBJZiBDT05GSUdfQk9PVF9SRVRSWV9USU1FIDwgMCB0aGUgZmVhdHVyZSBpcyB0aGVyZSwgYnV0Ci0gICAgICAgIGRvZXNuJ3QgZG8gYW55dGhpbmcgdW5sZXNzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotICAgICAgICAnYm9vdHJldHJ5JyBpcyA+PSAwLgorCUlmIENPTkZJR19CT09UX1JFVFJZX1RJTUUgPCAwIHRoZSBmZWF0dXJlIGlzIHRoZXJlLCBidXQKKwlkb2Vzbid0IGRvIGFueXRoaW5nIHVubGVzcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKwknYm9vdHJldHJ5JyBpcyA+PSAwLgogCiAgIENPTkZJR19BVVRPQk9PVF9LRVlFRAogICBDT05GSUdfQVVUT0JPT1RfUFJPTVBUCkBAIC0xMDEsOSArMTAxLDkgQEAKICAgYm9vdGRlbGF5a2V5MgllbnZpcm9ubWVudCB2YXJpYWJsZQogICBib290c3RvcGtleTIJZW52aXJvbm1lbnQgdmFyaWFibGUKIAotICAgICAgICBUaGVzZSBvcHRpb25zIGdpdmUgbW9yZSBjb250cm9sIG92ZXIgc3RvcHBpbmcgYXV0b2Jvb3QuIFdoZW4KLSAgICAgICAgdGhleSBhcmUgdXNlZCBhIHNwZWNpZmljIGNoYXJhY3RlciBvciBzdHJpbmcgaXMgcmVxdWlyZWQgdG8KLSAgICAgICAgc3RvcCBvciBkZWxheSBhdXRvYm9vdC4KKwlUaGVzZSBvcHRpb25zIGdpdmUgbW9yZSBjb250cm9sIG92ZXIgc3RvcHBpbmcgYXV0b2Jvb3QuIFdoZW4KKwl0aGV5IGFyZSB1c2VkIGEgc3BlY2lmaWMgY2hhcmFjdGVyIG9yIHN0cmluZyBpcyByZXF1aXJlZCB0bworCXN0b3Agb3IgZGVsYXkgYXV0b2Jvb3QuCiAKIAlEZWZpbmUgQ09ORklHX0FVVE9CT09UX0tFWUVEIChubyB2YWx1ZSByZXF1aXJlZCkgdG8gZW5hYmxlCiAJdGhpcyBncm91cCBvZiBvcHRpb25zLiAgQ09ORklHX0FVVE9CT09UX0RFTEFZX1NUUiwKQEAgLTExMSw0OCArMTExLDQ3IEBACiAJc3BlY2lmaWVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGVudmlyb25tZW50IHZhcmlhYmxlKSwKIAlvdGhlcndpc2UgdGhlcmUgaXMgbm8gd2F5IHRvIHN0b3AgYXV0b2Jvb3QuCiAKLSAgICAgICAgQ09ORklHX0FVVE9CT09UX1BST01QVCBpcyBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBib290IGRlbGF5Ci0gICAgICAgIHNlbGVjdGVkIGJ5IENPTkZJR19CT09UREVMQVkgc3RhcnRzLiBJZiBpdCBpcyBub3QgZGVmaW5lZAotICAgICAgICB0aGVyZSBpcyBubyBvdXRwdXQgaW5kaWNhdGluZyB0aGF0IGF1dG9ib290IGlzIGluIHByb2dyZXNzLgotICAgICAgICBJZiAiJWQiIGlzIGluY2x1ZGVkLCBpdCBpcyByZXBsYWNlZCBieSB0aGUgbnVtYmVyIG9mIHNlY29uZHMKLSAgICAgICAgcmVtYWluaW5nIGJlZm9yZSBhdXRvYm9vdCB3aWxsIHN0YXJ0LCBidXQgaXQgZG9lcyBub3QgY291bnQKLSAgICAgICAgZG93biB0aGUgc2Vjb25kcy4gImF1dG9ib290IGluICVkIHNlY29uZHNcbiIgaXMgYSByZWFzb25hYmxlCi0gICAgICAgIHByb21wdC4KKwlDT05GSUdfQVVUT0JPT1RfUFJPTVBUIGlzIGRpc3BsYXllZCBiZWZvcmUgdGhlIGJvb3QgZGVsYXkKKwlzZWxlY3RlZCBieSBDT05GSUdfQk9PVERFTEFZIHN0YXJ0cy4gSWYgaXQgaXMgbm90IGRlZmluZWQKKwl0aGVyZSBpcyBubyBvdXRwdXQgaW5kaWNhdGluZyB0aGF0IGF1dG9ib290IGlzIGluIHByb2dyZXNzLgorCUlmICIlZCIgaXMgaW5jbHVkZWQsIGl0IGlzIHJlcGxhY2VkIGJ5IHRoZSBudW1iZXIgb2Ygc2Vjb25kcworCXJlbWFpbmluZyBiZWZvcmUgYXV0b2Jvb3Qgd2lsbCBzdGFydCwgYnV0IGl0IGRvZXMgbm90IGNvdW50CisJZG93biB0aGUgc2Vjb25kcy4gImF1dG9ib290IGluICVkIHNlY29uZHNcbiIgaXMgYSByZWFzb25hYmxlCisJcHJvbXB0LgogCi0gICAgICAgIElmIENPTkZJR19BVVRPQk9PVF9ERUxBWV9TVFIgb3IgYm9vdGRlbGF5a2V5IGlzIHNwZWNpZmllZCBhbmQKLSAgICAgICAgdGhpcyBzdHJpbmcgaXMgcmVjZWl2ZWQgZnJvbSBjb25zb2xlIGlucHV0IGJlZm9yZSBhdXRvYm9vdAotICAgICAgICBzdGFydHMgYm9vdGluZywgVS1Cb290IGdpdmVzIGEgY29tbWFuZCBwcm9tcHQuIFRoZSBVLUJvb3QKLSAgICAgICAgcHJvbXB0IHdpbGwgdGltZSBvdXQgaWYgQ09ORklHX0JPT1RfUkVUUllfVElNRSBpcyB1c2VkLAotICAgICAgICBvdGhlcndpc2UgaXQgbmV2ZXIgdGltZXMgb3V0LgorCUlmIENPTkZJR19BVVRPQk9PVF9ERUxBWV9TVFIgb3IgYm9vdGRlbGF5a2V5IGlzIHNwZWNpZmllZCBhbmQKKwl0aGlzIHN0cmluZyBpcyByZWNlaXZlZCBmcm9tIGNvbnNvbGUgaW5wdXQgYmVmb3JlIGF1dG9ib290CisJc3RhcnRzIGJvb3RpbmcsIFUtQm9vdCBnaXZlcyBhIGNvbW1hbmQgcHJvbXB0LiBUaGUgVS1Cb290CisJcHJvbXB0IHdpbGwgdGltZSBvdXQgaWYgQ09ORklHX0JPT1RfUkVUUllfVElNRSBpcyB1c2VkLAorCW90aGVyd2lzZSBpdCBuZXZlciB0aW1lcyBvdXQuCiAKLSAgICAgICAgSWYgQ09ORklHX0FVVE9CT09UX1NUT1BfU1RSIG9yIGJvb3RzdG9wa2V5IGlzIHNwZWNpZmllZCBhbmQKLSAgICAgICAgdGhpcyBzdHJpbmcgaXMgcmVjZWl2ZWQgZnJvbSBjb25zb2xlIGlucHV0IGJlZm9yZSBhdXRvYm9vdAotICAgICAgICBzdGFydHMgYm9vdGluZywgVS1Cb290IGdpdmVzIGEgY29tbWFuZCBwcm9tcHQuIFRoZSBVLUJvb3QKLSAgICAgICAgcHJvbXB0IG5ldmVyIHRpbWVzIG91dCwgZXZlbiBpZiBDT05GSUdfQk9PVF9SRVRSWV9USU1FIGlzCi0gICAgICAgIHVzZWQuCisJSWYgQ09ORklHX0FVVE9CT09UX1NUT1BfU1RSIG9yIGJvb3RzdG9wa2V5IGlzIHNwZWNpZmllZCBhbmQKKwl0aGlzIHN0cmluZyBpcyByZWNlaXZlZCBmcm9tIGNvbnNvbGUgaW5wdXQgYmVmb3JlIGF1dG9ib290CisJc3RhcnRzIGJvb3RpbmcsIFUtQm9vdCBnaXZlcyBhIGNvbW1hbmQgcHJvbXB0LiBUaGUgVS1Cb290CisJcHJvbXB0IG5ldmVyIHRpbWVzIG91dCwgZXZlbiBpZiBDT05GSUdfQk9PVF9SRVRSWV9USU1FIGlzCisJdXNlZC4KIAotICAgICAgICBUaGUgc3RyaW5nIHJlY29nbml0aW9uIGlzIG5vdCB2ZXJ5IHNvcGhpc3RpY2F0ZWQuIElmIGEKLSAgICAgICAgcGFydGlhbCBtYXRjaCBpcyBkZXRlY3RlZCwgdGhlIGZpcnN0IG5vbi1tYXRjaGluZyBjaGFyYWN0ZXIKLSAgICAgICAgaXMgY2hlY2tlZCB0byBzZWUgaWYgc3RhcnRzIGEgbmV3IG1hdGNoLiBUaGVyZSBpcyBubyBjaGVjawotICAgICAgICBmb3IgYSBzaG9ydGVyIHBhcnRpYWwgbWF0Y2gsIHNvIGl0J3MgYmVzdCBpZiB0aGUgZmlyc3QKLSAgICAgICAgY2hhcmFjdGVyIG9mIGEga2V5IHN0cmluZyBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIHJlc3Qgb2YgdGhlCi0gICAgICAgIHN0cmluZy4KKwlUaGUgc3RyaW5nIHJlY29nbml0aW9uIGlzIG5vdCB2ZXJ5IHNvcGhpc3RpY2F0ZWQuIElmIGEKKwlwYXJ0aWFsIG1hdGNoIGlzIGRldGVjdGVkLCB0aGUgZmlyc3Qgbm9uLW1hdGNoaW5nIGNoYXJhY3RlcgorCWlzIGNoZWNrZWQgdG8gc2VlIGlmIHN0YXJ0cyBhIG5ldyBtYXRjaC4gVGhlcmUgaXMgbm8gY2hlY2sKKwlmb3IgYSBzaG9ydGVyIHBhcnRpYWwgbWF0Y2gsIHNvIGl0J3MgYmVzdCBpZiB0aGUgZmlyc3QKKwljaGFyYWN0ZXIgb2YgYSBrZXkgc3RyaW5nIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgcmVzdCBvZiB0aGUKKwlzdHJpbmcuCiAKLSAgICAgICAgVXNpbmcgdGhlIENPTkZJR19BVVRPQk9PVF9ERUxBWV9TVFIyIC8gIGJvb3RkZWxheWtleTIgIGFuZC9vcgotICAgICAgICBDT05GSUdfQVVUT0JPT1RfU1RPUF9TVFIyICAgLyAgIGJvb3RzdG9wa2V5ICAjZGVmaW5lcyAgYW5kL29yCi0gICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlcyB5b3UgY2FuICBzcGVjaWZ5ICBhICBzZWNvbmQsICBhbHRlcm5hdGUKLSAgICAgICAgc3RyaW5nICh3aGljaCBhbGxvd3MgeW91IHRvIGhhdyB0d28gInBhc3N3b3JkIiBzdHJpbmdzKS4KKwlVc2luZyB0aGUgQ09ORklHX0FVVE9CT09UX0RFTEFZX1NUUjIgLyAgYm9vdGRlbGF5a2V5MiAgYW5kL29yCisJQ09ORklHX0FVVE9CT09UX1NUT1BfU1RSMiAgIC8gICBib290c3RvcGtleSAgI2RlZmluZXMgIGFuZC9vcgorCWVudmlyb25tZW50IHZhcmlhYmxlcyB5b3UgY2FuICBzcGVjaWZ5ICBhICBzZWNvbmQsICBhbHRlcm5hdGUKKwlzdHJpbmcgKHdoaWNoIGFsbG93cyB5b3UgdG8gaGF3IHR3byAicGFzc3dvcmQiIHN0cmluZ3MpLgogCiAgIENPTkZJR19aRVJPX0JPT1RERUxBWV9DSEVDSwogCi0gICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIGRlZmluZWQsIHlvdSBjYW4gc3RvcCB0aGUgYXV0b2Jvb3QgcHJvY2VzcwotICAgICAgICBieSBoaXR0aW5nIGEga2V5IGV2ZW4gaW4gdGhhdCBjYXNlIHdoZW4gImJvb3RkZWxheSIgaGFzIGJlZW4KLSAgICAgICAgc2V0IHRvIDAuIFlvdSBjYW4gc2V0ICJib290ZGVsYXkiIHRvIGEgbmVnYXRpdmUgdmFsdWUgdG8KLSAgICAgICAgcHJldmVudCB0aGUgY2hlY2sgZm9yIGNvbnNvbGUgaW5wdXQuCisJSWYgdGhpcyBvcHRpb24gaXMgZGVmaW5lZCwgeW91IGNhbiBzdG9wIHRoZSBhdXRvYm9vdCBwcm9jZXNzCisJYnkgaGl0dGluZyBhIGtleSBldmVuIGluIHRoYXQgY2FzZSB3aGVuICJib290ZGVsYXkiIGhhcyBiZWVuCisJc2V0IHRvIDAuIFlvdSBjYW4gc2V0ICJib290ZGVsYXkiIHRvIGEgbmVnYXRpdmUgdmFsdWUgdG8KKwlwcmV2ZW50IHRoZSBjaGVjayBmb3IgY29uc29sZSBpbnB1dC4KIAogICBDT05GSUdfUkVTRVRfVE9fUkVUUlkKIAotICAgICAgICAoT25seSBlZmZlY3RpdmUgd2hlbiBDT05GSUdfQk9PVF9SRVRSWV9USU1FIGlzIGFsc28gc2V0KQotICAgICAgICBBZnRlciB0aGUgY291bnRkb3duIHRpbWVkIG91dCwgdGhlIGJvYXJkIHdpbGwgYmUgcmVzZXQgdG8gcmVzdGFydAotICAgICAgICBhZ2Fpbi4KLQorCShPbmx5IGVmZmVjdGl2ZSB3aGVuIENPTkZJR19CT09UX1JFVFJZX1RJTUUgaXMgYWxzbyBzZXQpCisJQWZ0ZXIgdGhlIGNvdW50ZG93biB0aW1lZCBvdXQsIHRoZSBib2FyZCB3aWxsIGJlIHJlc2V0IHRvIHJlc3RhcnQKKwlhZ2Fpbi4KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUuYmVkYnVnIGIvZG9jL1JFQURNRS5iZWRidWcKaW5kZXggZWQ3YmMxMi4uNTZhZWIwOSAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5iZWRidWcKKysrIGIvZG9jL1JFQURNRS5iZWRidWcKQEAgLTYxLDcgKzYxLDYgQEAKIAlJQk0gUFBDNDA1IHNwZWNpZmljIGRlYnVnZ2VyIHJvdXRpbmVzLgogCiAKLQogQmVkYnVnIHN1cHBvcnQgZm9yIHRoZSBNUEM4NjAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUuY21pIGIvZG9jL1JFQURNRS5jbWkKaW5kZXggNDgwNTJiOC4uODg0ODU0ZCAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5jbWkKKysrIGIvZG9jL1JFQURNRS5jbWkKQEAgLTMsOSArMyw5IEBACiA9PT09PT09PQogCiBUaGlzIGZpbGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNtaSBib2FyZCBjb25maWd1cmF0aW9uLgotUGxlYXNlIHNlZSBjbWlfbXBjNXh4X2NvbmZpZyBmb3IgZnVydGhlciBkZXRhaWxzLiBUaGUgY21pIGJvYXJkIGlzIAotYSBjdXN0b21lciBzcGVjaWZpYyBib2FyZCBidXQgc2hvdWxkIHdvcmsgd2l0aCBzbWFsbCBtb2RpZmljYXRpb25zIAotb24gZXZlcnkgYm9hcmQgd2hpY2ggaGFzIGEgTVBDNXh4IGFuZCBlaXRoZXIgYSAyOEYxMjhKM0EsIAorUGxlYXNlIHNlZSBjbWlfbXBjNXh4X2NvbmZpZyBmb3IgZnVydGhlciBkZXRhaWxzLiBUaGUgY21pIGJvYXJkIGlzCithIGN1c3RvbWVyIHNwZWNpZmljIGJvYXJkIGJ1dCBzaG91bGQgd29yayB3aXRoIHNtYWxsIG1vZGlmaWNhdGlvbnMKK29uIGV2ZXJ5IGJvYXJkIHdoaWNoIGhhcyBhIE1QQzV4eCBhbmQgZWl0aGVyIGEgMjhGMTI4SjNBLAogMjhGMzIwSjNBIG9yIDI4RjY0MEozQSBJbnRlbCBmbGFzaCBtb3VudGVkLgogCiBCb2FyZCBEaXNjcmlwdGlvbjoKQEAgLTE2LDE0ICsxNiwxNCBAQAogKiBJbnRlbCBmbGFzaCAyOEY2NDBKM0EKICogTWljcm9uIFNSQU0gMU0KICogQWx0ZXJhIFBMRAotICAgICAKKwogQm9vdHN0cmFwOgogPT09PT09PT09PQogCiBJbiBjb250cmFzdCB0byB0aGUgdXN1YWwgYm9vdCBzZXF1ZW5jZSB1c2VkIGluIFUtQm9vdCwgb24gdGhlCiBjbWkgYm9hcmQgd2UgZG9uJ3QgYm9vdCBmcm9tIHRoZSBleHRlcm5hbCBmbGFzaCBkaXJlY3RseS4KIEJlY2F1c2Ugb2Ygd2UgdXNlIGEgMTYtYml0IGZsYXNoIGFuZCBkb24ndCBzYW1wbGUgYSBSQ1cKLWZyb20gdGhlIGRhdGEgYnVzIHRvIHNldCB0aGUgc3RhcnR1cCBidXN3aWR0aCB0byAxNi1iaXQuIAorZnJvbSB0aGUgZGF0YSBidXMgdG8gc2V0IHRoZSBzdGFydHVwIGJ1c3dpZHRoIHRvIDE2LWJpdC4KIFVuZm9ydHVuYXRseSB0aGUgZGVmYXVsdCB3aWR0aCwgc2FtcGxlZCBmcm9tIHRoZSBkZWZhdWx0IFJDVwogaXMgMzItYml0LiBGb3IgdGhpcyByZWFzb24gd2UgYnVybiB0aGUgcHJvcGVyIFJDVyBpbnRvIHRoZQogaW50ZXJuYWwgZmxhc2ggc2hhZG93IGxvY2F0aW9uIGFuZCBib290IGFmdGVyIHBvd2VyLW9uIG9yCkBAIC0zNSwxNiArMzUsMTYgQEAKIAogTWVtb3J5IE1hcCBhZnRlciByZWxvY2F0aW9uOgogCi0gICAgMHgwMDAwIDAwMDAJCUNGR19TRFJBTV9CQVNFIAorICAgIDB4MDAwMCAwMDAwCQlDRkdfU0RSQU1fQkFTRQogCSAgOgogICAgIDB4MDAwRiA5RkZGCiAJICA6Ci0gICAgICAgICAgOgotICAgIDB4MDEwMCAwMDAwCQlDRkdfSU1NUiAoSW50ZXJuYWwgbWVtb3J5IG1hcCBiYXNlIGFkcmVzcykJICAgIAorCSAgOgorICAgIDB4MDEwMCAwMDAwCQlDRkdfSU1NUiAoSW50ZXJuYWwgbWVtb3J5IG1hcCBiYXNlIGFkcmVzcykKIAkgIDoKICAgICAweDAxMzAgN0ZGRgogCSAgOgotICAgIAkgIDoKKwkgIDoKICAgICAweDAyMDAgMDAwMAkJQ0ZHX0ZMQVNIX0JBU0UKIAkgIDoKICAgICAweDAyN0MgRkZGRgpAQCAtNTMsMTUgKzUzLDE1IEBACiAgICAgMHgwMzAwIDAwMDAJCVBMRF9CQVNFCiAKIEZsYXNoIFBhcnRpdGlvbjoKLSAgICAKLSAgICAweDAyMDAgMDAwMAkJQmxvY2sgMCBhbmQgMSBjb250YWluIFUtQm9vdCBleGNlcHQgCisKKyAgICAweDAyMDAgMDAwMAkJQmxvY2sgMCBhbmQgMSBjb250YWluIFUtQm9vdCBleGNlcHQKIAkgIDoJCWVudmlyb25tZW50CiAJICA6CiAgICAgMHgwMjAxIEZGRkYKICAgICAweDAyMDIgMDAwMAkJQmxvY2sgMiBjb250YWlucyBlbnZpcm9ubWVudCAoLnBwY2VudikKIAkgIDoKLSAgICAweDAyMDIgRkZGRiAKLSAKKyAgICAweDAyMDIgRkZGRgorCiBTZWUgUkVBRE1FIGZpbGUgZm9yIGZ1dGhlciBpbmZvcm1hdGlvbiBhYm91dCBVLUJvb3QgcmVsb2NhdGlvbgogYW5kIHBhcnRpdGlvbmluZy4KIApAQCAtNzEsNyArNzEsNyBAQAogKiBVLUJvb3QgY29tbWFuZHM6IGdvLCBsb2FkcywgbG9hZGIsIGFsbCBtZW1vcnkgZmVhdHVyZXMsIHByaW50ZW52LAogICBzZXRlbnYsIHNhdmVlbnYsIHByb3RlY3QsIGVyYXNlLCBmbGksIGJkaSwgbXRlc3QsIHJlc2V0LCB2ZXJzaW9uLAogICBjb25pbmZvLCBoZWxwIChzZWUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBhdmFpbGFibGUgY29tbWFuZHMpCi0gIAorCiAqIEJsaW5raW5nIGxlZCB0byBpbmRpY2F0ZSBib290IHByb2Nlc3MKIAogQWRkZWQgb3IgQ2hhbmdlZCBGaWxlczoKZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUuZWJvbnkgYi9kb2MvUkVBRE1FLmVib255CmluZGV4IDEyYTBkNzAuLjZlMmE4MTEgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUuZWJvbnkKKysrIGIvZG9jL1JFQURNRS5lYm9ueQpAQCAtMSw2ICsxLDYgQEAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElCTSBFYm9ueSBCb2FyZAorCQkJICAgSUJNIEVib255IEJvYXJkCiAKLSAgICAgICAgICAgICAgICAgICAgTGFzdCBVcGRhdGU6IFNlcHRlbWJlciAxMiwgMjAwMgorCQkgICAgTGFzdCBVcGRhdGU6IFNlcHRlbWJlciAxMiwgMjAwMgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogVGhpcyBmaWxlIGNvbnRhaW5zIHNvbWUgaGFuZHkgaW5mbyByZWdhcmRpbmcgVS1Cb290IGFuZCB0aGUgSUJNCkBAIC0xMzEsOCArMTMxLDYgQEAKIHRoZSBjaGFuY2UgdG8gZG8gdGhpcywgcGxlYXNlIGxldCBtZSBrbm93IGhvdyB0aGluZ3MgdHVybiBvdXQgOi0pCiAKIAotCiBSZWdhcmRzLAogLS1TY290dAogPHNtY251dHRAYXJ0ZXN5bmNwLmNvbT4KLQpkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5mYWRzIGIvZG9jL1JFQURNRS5mYWRzCmluZGV4IDAxMjhlZjcuLmJhZTk2NTIgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUuZmFkcworKysgYi9kb2MvUkVBRE1FLmZhZHMKQEAgLTg3LDQgKzg3LDMgQEAKICAgZ28KIAogTm93IFUtQm9vdCBpcyBydW5uaW5nIHdpdGggdGhlIFUtQm9vdCB2YWx1ZSBmb3IgU1lQQ1IuCi0KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUubXBjNXh4IGIvZG9jL1JFQURNRS5tcGM1eHgKaW5kZXggMmMxYTI5My4uMDdiZTg2MyAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5tcGM1eHgKKysrIGIvZG9jL1JFQURNRS5tcGM1eHgKQEAgLTUsMTQgKzUsMTQgQEAKIFRoaXMgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcG9ydCBvZiBVLUJvb3QgdG8gdGhlCiBNb3Rvcm9sYSBtcGM1eHggc2VyaWVzIG9mIENQVXMuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzIHRha2VuIGZyb20KIGV4aXN0aW5nIGNvZGUgbWFpbmx5IGZyb20gdGhlIG1wYzh4eCBwb3J0LiBJbiBjb250cmFzdCB0byBtcGM4eHgsCi10aGUgbXBjNXh4IGhhcyBubyBDUE0sIE1NVSBhbmQgY2FjaGUgZmFjaWxpdGllcy4gCit0aGUgbXBjNXh4IGhhcyBubyBDUE0sIE1NVSBhbmQgY2FjaGUgZmFjaWxpdGllcy4KIAotVGhlIGltcGxlbWVudGVkIGZlYXR1cmVzIGhhdmUgYmVlbiB0ZXN0ZWQgb24gdGhlIGNtaSBib2FyZCwgYSAKLWN1c3RvbWVyIHNwZWNpZmljIGJvYXJkIChzZWUgUkVBRE1FLmNtaSkuIAorVGhlIGltcGxlbWVudGVkIGZlYXR1cmVzIGhhdmUgYmVlbiB0ZXN0ZWQgb24gdGhlIGNtaSBib2FyZCwgYQorY3VzdG9tZXIgc3BlY2lmaWMgYm9hcmQgKHNlZSBSRUFETUUuY21pKS4KIAotSGVuY2UgdGhpcyBwb3J0IGlzIG9ubHkgdGVzdGVkIG9uIHRoZSBjbWkgYm9hcmQgZnVydGhlciBwb3NzaWJsZSAKK0hlbmNlIHRoaXMgcG9ydCBpcyBvbmx5IHRlc3RlZCBvbiB0aGUgY21pIGJvYXJkIGZ1cnRoZXIgcG9zc2libGUKIHRlc3RzIG9uIG90aGVyIGJvYXJkcyB3aWxsIGJlIHZlcnkgdmFsdWFibGUuCi0gIAorCiBOb3QgVGVzdGVkIEZlYXR1cmVzOgogPT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZG9jL1JFQURNRS5uYW5kIGIvZG9jL1JFQURNRS5uYW5kCmluZGV4IGFmN2ZiZmQuLjBmMmJkYzUgMTAwNjQ0Ci0tLSBhL2RvYy9SRUFETUUubmFuZAorKysgYi9kb2MvUkVBRE1FLm5hbmQKQEAgLTUyLDcgKzUyLDcgQEAKICAgIG5hbmQgcmVhZCBhZGRyIG9mcyBzaXplCiAgICAgICBSZWFkIGBzaXplJyBieXRlcyBmcm9tIGBvZnMnIGluIE5BTkQgZmxhc2ggdG8gYGFkZHInLiBJZiBhIHBhZ2UKICAgICAgIGNhbm5vdCBiZSByZWFkIGJlY2F1c2UgaXQgaXMgbWFya2VkIGJhZCBvciBhbiB1bmNvcnJlY3RhYmxlIGRhdGEKLSAgICAgIGVycm9yIGlzIGZvdW5kIHRoZSBjb21tYW5kIHN0b3BzIHdpdGggYW4gZXJyb3IuIAorICAgICAgZXJyb3IgaXMgZm91bmQgdGhlIGNvbW1hbmQgc3RvcHMgd2l0aCBhbiBlcnJvci4KIAogICAgbmFuZCByZWFkLmpmZnMyIGFkZHIgb2ZzIHNpemUKICAgICAgIExpa2UgYHJlYWQnLCBidXQgdGhlIGRhdGEgZm9yIGJsb2NrcyB0aGF0IGFyZSBtYXJrZWQgYmFkIGlzIHJlYWQgYXMKQEAgLTY4LDcgKzY4LDcgQEAKICAgIG5hbmQgd3JpdGUgYWRkciBvZnMgc2l6ZQogICAgICAgV3JpdGUgYHNpemUnIGJ5dGVzIGZyb20gYGFkZHInIHRvIGBvZnMnIGluIE5BTkQgZmxhc2guIElmIGEgcGFnZQogICAgICAgY2Fubm90IGJlIHdyaXR0ZW4gYmVjYXVzZSBpdCBpcyBtYXJrZWQgYmFkIG9yIHRoZSB3cml0ZSBmYWlscyB0aGUKLSAgICAgIGNvbW1hbmQgc3RvcHMgd2l0aCBhbiBlcnJvci4gCisgICAgICBjb21tYW5kIHN0b3BzIHdpdGggYW4gZXJyb3IuCiAKICAgIG5hbmQgd3JpdGUuamZmczIgYWRkciBvZnMgc2l6ZQogICAgICAgTGlrZSBgd3JpdGUnLCBidXQgYmxvY2tzIHRoYXQgYXJlIG1hcmtlZCBiYWQgYXJlIHNraXBwZWQgYW5kIHRoZQpAQCAtMTU4LDEzICsxNTgsMTMgQEAKICAgICNkZWZpbmUgTkFORF9DVExfU0VUQ0xFKG5hbmRwdHIpCiAgICAgICBTZXQgQ0xFIChjb21tYW5kIGxhdGNoIGVuYWJsZSkgaGlnaC4gSWYgQ0xFIGNvbnRyb2wgaXMgaGFuZGxlZCBieQogICAgICAgV1JJVEVfTkFORF9BRERSRVNTKCkgdGhpcyBjYW4gYmUgZW1wdHkuCi0JCisKIE1vcmUgRGVmaW5pdGlvbnM6CiAKICAgIFRoZXNlIGRlZmluaXRpb25zIGFyZSBuZWVkZWQgaW4gdGhlIGJvYXJkIGNvbmZpZ3VyYXRpb24gZm9yIG5vdywgYnV0CiAgICBtYXkgcmVhbGx5IGJlbG9uZyBpbiBhIGhlYWRlciBmaWxlLgogICAgVE9ETzogRmlndXJlIHdoaWNoIG9uZXMgYXJlIHRydWx5IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYW5kIHJlbmFtZQotICAgICAgICAgdGhlbSB0byBDRkdfTkFORF8uLi4gYW5kIG1vdmUgdGhlIHJlc3Qgc29tZXdoZXJlIGFwcHJvcHJpYXRlLgorCSB0aGVtIHRvIENGR19OQU5EXy4uLiBhbmQgbW92ZSB0aGUgcmVzdCBzb21ld2hlcmUgYXBwcm9wcmlhdGUuCiAKICAgICNkZWZpbmUgU0VDVE9SU0laRSA1MTIKICAgICNkZWZpbmUgQUREUl9DT0xVTU4gMQpAQCAtMTczLDQgKzE3MywzIEBACiAgICAjZGVmaW5lIE5BTkRfQ2hpcElEX1VOS05PV04gMHgwMAogICAgI2RlZmluZSBOQU5EX01BWF9GTE9PUlMgMQogICAgI2RlZmluZSBOQU5EX01BWF9DSElQUyAxCi0KZGlmZiAtLWdpdCBhL2RvYy9SRUFETUUucHBjNDQwIGIvZG9jL1JFQURNRS5wcGM0NDAKaW5kZXggYWNiMGM2Zi4uOTVkNjNmYyAxMDA2NDQKLS0tIGEvZG9jL1JFQURNRS5wcGM0NDAKKysrIGIvZG9jL1JFQURNRS5wcGM0NDAKQEAgLTEsNiArMSw2IEBACi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQb3dlclBDIDQ0MAorCQkJICAgUG93ZXJQQyA0NDAKIAotICAgICAgICAgICAgICAgICAgICBMYXN0IFVwZGF0ZTogU2VwdGVtYmVyIDExLCAyMDAyCisJCSAgICBMYXN0IFVwZGF0ZTogU2VwdGVtYmVyIDExLCAyMDAyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKQEAgLTE5Nyw4ICsxOTcsNiBAQAogdGhlbiBqdXN0IGhhcmRjb2RlIGEgcmV0dXJuIG9mIDEgb3IgMCBhcyBhcHByb3ByaWF0ZS4KIAogCi0KIFJlZ2FyZHMsCiAtLVNjb3R0CiA8c21jbnV0dEBhcnRlc3luY3AuY29tPgotCmRpZmYgLS1naXQgYS9kcml2ZXJzLzNjNTg5LmMgYi9kcml2ZXJzLzNjNTg5LmMKaW5kZXggNTQxZjkzYi4uMDgwYjY4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy8zYzU4OS5jCisrKyBiL2RyaXZlcnMvM2M1ODkuYwpAQCAtMTAxLDggKzEwMSw4IEBACiAjZGVmaW5lIGluc3coYXJncy4uLikJbW1pb19pbnN3KGFyZ3MpCiAjZGVmaW5lIG1taW9faW5zdyhyLGIsbCkgCSh7CWludCBfX2kgOyAgXAogCQkJCQl3b3JkICpfX2IyOyAgXAotCQkJICAgIAkJX19iMiA9ICh3b3JkICopIGI7ICBcCi0JCQkgICAgCQlmb3IgKF9faSA9IDA7IF9faSA8IGw7IF9faSsrKSB7ICBcCisJCQkJCV9fYjIgPSAod29yZCAqKSBiOyAgXAorCQkJCQlmb3IgKF9faSA9IDA7IF9faSA8IGw7IF9faSsrKSB7ICBcCiAJCQkJCSAgKihfX2IyICsgX19pKSA9IG1taW9faW53KHIpOyAgXAogCQkJCQkgIG1taW9faW53KDApOyAgXAogCQkJCQl9OyAgXApAQCAtMjA0LDQwICsyMDQsMzkgQEAKICNpZiBFTF9ERUJVRyA+IDEKIHN0YXRpYyB2b2lkIHByaW50X3BhY2tldCggYnl0ZSAqIGJ1ZiwgaW50IGxlbmd0aCApCiB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBpbnQgcmVtYWluZGVyOwotICAgICAgICBpbnQgbGluZXM7CisJaW50IGk7CisJaW50IHJlbWFpbmRlcjsKKwlpbnQgbGluZXM7CiAKLSAgICAgICAgUFJJTlRLMigiUGFja2V0IG9mIGxlbmd0aCAlZCBcbiIsIGxlbmd0aCApOworCVBSSU5USzIoIlBhY2tldCBvZiBsZW5ndGggJWQgXG4iLCBsZW5ndGggKTsKIAotICAgICAgICBsaW5lcyA9IGxlbmd0aCAvIDE2OwotICAgICAgICByZW1haW5kZXIgPSBsZW5ndGggJSAxNjsKKwlsaW5lcyA9IGxlbmd0aCAvIDE2OworCXJlbWFpbmRlciA9IGxlbmd0aCAlIDE2OwogCi0gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGluZXMgOyBpICsrICkgewotICAgICAgICAgICAgICAgIGludCBjdXI7CisJZm9yICggaSA9IDA7IGkgPCBsaW5lcyA7IGkgKysgKSB7CisJCWludCBjdXI7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBjdXIgPSAwOyBjdXIgPCA4OyBjdXIgKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBieXRlIGEsIGI7CisJCWZvciAoIGN1ciA9IDA7IGN1ciA8IDg7IGN1ciArKyApIHsKKwkJCWJ5dGUgYSwgYjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgYSA9ICooYnVmICsrICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gKihidWYgKysgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBSSU5USzIoIiUwMnglMDJ4ICIsIGEsIGIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUFJJTlRLMigiXG4iKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKCBpID0gMDsgaSA8IHJlbWFpbmRlci8yIDsgaSsrICkgewotICAgICAgICAgICAgICAgIGJ5dGUgYSwgYjsKKwkJCWEgPSAqKGJ1ZiArKyApOworCQkJYiA9ICooYnVmICsrICk7CisJCQlQUklOVEsyKCIlMDJ4JTAyeCAiLCBhLCBiICk7CisJCX0KKwkJUFJJTlRLMigiXG4iKTsKKwl9CisJZm9yICggaSA9IDA7IGkgPCByZW1haW5kZXIvMiA7IGkrKyApIHsKKwkJYnl0ZSBhLCBiOwogCi0gICAgICAgICAgICAgICAgYSA9ICooYnVmICsrICk7Ci0gICAgICAgICAgICAgICAgYiA9ICooYnVmICsrICk7Ci0gICAgICAgICAgICAgICAgUFJJTlRLMigiJTAyeCUwMnggIiwgYSwgYiApOwotICAgICAgICB9Ci0gICAgICAgIFBSSU5USzIoIlxuIik7CisJCWEgPSAqKGJ1ZiArKyApOworCQliID0gKihidWYgKysgKTsKKwkJUFJJTlRLMigiJTAyeCUwMnggIiwgYSwgYiApOworCX0KKwlQUklOVEsyKCJcbiIpOwogfQogI2VuZGlmIC8qIEVMX0RFQlVHID4gMSAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBFVEhfUkVTRVQgLSBSZXNldCBhZGFwdGVyCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MzYsNyArNDM1LDYgQEAKIH0KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogRVRIX1RSQU5TTUlUIC0gVHJhbnNtaXQgYSBmcmFtZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTA2LDkgKzUwNCw5IEBACiAJCVBSSU5USygiXG5cbiIpOwogCX0KIAotICAgICAgICAvKiB3YWl0IGZvciBUeCBjb21wbGV0ZSAqLworCS8qIHdhaXQgZm9yIFR4IGNvbXBsZXRlICovCiAJUFJJTlRLKCJXYWl0aW5nIGZvciBUeCB0byBjb21wbGV0ZS4uLlxuIik7Ci0gICAgICAgIHdoaWxlKCgoc3RhdHVzID0gaW53KEVMX0JBU0VfQUREUiArIFZYX1NUQVRVUykpICYgU19DT01NQU5EX0lOX1BST0dSRVNTKSAhPSAwKQorCXdoaWxlKCgoc3RhdHVzID0gaW53KEVMX0JBU0VfQUREUiArIFZYX1NUQVRVUykpICYgU19DT01NQU5EX0lOX1BST0dSRVNTKSAhPSAwKQogCXsKIAkJdWRlbGF5KDEwKTsKIAl9CkBAIC01MTgsNSArNTE2LDQgQEAKIH0KIAogCi0KICNlbmRpZiAvKiBDT05GSUdfRFJJVkVSXzNDNTg5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzLzNjNTg5LmggYi9kcml2ZXJzLzNjNTg5LmgKaW5kZXggMDBlN2Y3Yy4uNjczNWJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy8zYzU4OS5oCisrKyBiL2RyaXZlcnMvM2M1ODkuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAjZGVmaW5lIFZYX1cwX1JFU09VUkNFX0NGRwkweDA4CiAjZGVmaW5lIFZYX1cwX0FERFJFU1NfQ0ZHCTB4MDYKICNkZWZpbmUgVlhfVzBfQ09ORklHX0NUUkwJMHgwNAotICAgICAgICAvKiBSZWFkICovCisJLyogUmVhZCAqLwogI2RlZmluZSBWWF9XMF9QUk9EVUNUX0lECTB4MDIKICNkZWZpbmUgVlhfVzBfTUZHX0lECQkweDAwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvNTcwMXJscy5jIGIvZHJpdmVycy81NzAxcmxzLmMKaW5kZXggYzQ0MDllNC4uODY5NTBkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy81NzAxcmxzLmMKKysrIGIvZHJpdmVycy81NzAxcmxzLmMKQEAgLTMzLDkgKzMzLDkgQEAKICAgRndJbWdJbmZvLkRhdGEuTGVuZ3RoICA9IHQzRndEYXRhTGVuOwogCiAgIGlmIChMTV9Mb2FkRmlybXdhcmUocERldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAmRndJbWdJbmZvLAotICAgICAgICAgICAgICAgICAgICAgIFQzX1JYX0NQVV9JRCB8IFQzX1RYX0NQVV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICBUM19SWF9DUFVfSUQpICE9IExNX1NUQVRVU19TVUNDRVNTKQorCQkgICAgICAmRndJbWdJbmZvLAorCQkgICAgICBUM19SWF9DUFVfSUQgfCBUM19UWF9DUFVfSUQsCisJCSAgICAgIFQzX1JYX0NQVV9JRCkgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCiAgICAgewogICAgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWxpNTEyeC5jIGIvZHJpdmVycy9hbGk1MTJ4LmMKaW5kZXggZTUyZWRkMC4uN2I3ZWRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hbGk1MTJ4LmMKKysrIGIvZHJpdmVycy9hbGk1MTJ4LmMKQEAgLTU4LDcgKzU4LDcgQEAKICAqLwogCiBzdGF0aWMgdm9pZCBhbGlfd3JpdGUodTggaW5kZXgsIHU4IHZhbHVlKQotewkKK3sKIAkvKiB3cml0ZSBhbiBhcmJpcmFyeSByZWdpc3RlciAqLwogCW91dGIoaW5kZXgsIEFMSV9JTkRFWCk7CiAJb3V0Yih2YWx1ZSwgQUxJX0RBVEEpOwpAQCAtNzQsNyArNzQsNyBAQAogCiAjZGVmaW5lIEFMSV9PUEVOKCkgXAogCW91dGIoMHg1MSwgQUxJX0lOREVYKTsgXAotCW91dGIoMHgyMywgQUxJX0lOREVYKQkKKwlvdXRiKDB4MjMsIEFMSV9JTkRFWCkKIAogCiAjZGVmaW5lIEFMSV9DTE9TRSgpIFwKQEAgLTgyLDcgKzgyLDcgQEAKIAogLyogU2VsZWN0IGEgbG9naWNhbCBkZXZpY2UgKi8KICNkZWZpbmUgQUxJX1NFTERFVihkZXYpCVwKLQlhbGlfd3JpdGUoMHgwNywgZGV2KQkKKwlhbGlfd3JpdGUoMHgwNywgZGV2KQogCiAKIHZvaWQgYWxpNTEyeF9pbml0KHZvaWQpCkBAIC0xMDIsMTQgKzEwMiwxNCBAQAogewogCUFMSV9PUEVOKCk7CiAJQUxJX1NFTERFVigwKTsKLQkKKwogCWFsaV93cml0ZSgweDMwLCBlbmFibGVkPzE6MCk7CiAJaWYgKGVuYWJsZWQpIHsKIAkJYWxpX3dyaXRlKDB4NjAsIGlvID4+IDgpOwogCQlhbGlfd3JpdGUoMHg2MSwgaW8gJiAweGZmKTsKIAkJYWxpX3dyaXRlKDB4NzAsIGlycSk7CiAJCWFsaV93cml0ZSgweDc0LCBkbWFfY2hhbm5lbCk7Ci0JCQorCiAJCS8qIEFUIG1vZGUsIG5vIGRyaXZlIHN3YXAgKi8KIAkJYWxpX3dyaXRlKDB4ZjAsIDB4MDgpOwogCQlhbGlfd3JpdGUoMHhmMSwgMHgwMCk7CkBAIC0xMjQsMTQgKzEyNCwxNCBAQAogewogCUFMSV9PUEVOKCk7CiAJQUxJX1NFTERFVigzKTsKLQkKKwogCWFsaV93cml0ZSgweDMwLCBlbmFibGVkPzE6MCk7CiAJaWYgKGVuYWJsZWQpIHsKIAkJYWxpX3dyaXRlKDB4NjAsIGlvID4+IDgpOwogCQlhbGlfd3JpdGUoMHg2MSwgaW8gJiAweGZmKTsKIAkJYWxpX3dyaXRlKDB4NzAsIGlycSk7CiAJCWFsaV93cml0ZSgweDc0LCBkbWFfY2hhbm5lbCk7Ci0JCQorCiAJCS8qIG1vZGU6IEVQUCAxLjksIEVDUCBGSUZPIHRocmVzaG9sZCA9IDcsIElSUSBhY3RpdmUgbG93ICovCiAJCWFsaV93cml0ZSgweGYwLCAweGJjKTsKIAkJLyogMTIgTUh6LCBCdXJzdCBETUEgaW4gRUNQICovCkBAIC0xNDUsMTggKzE0NSwxOCBAQAogewogCUFMSV9PUEVOKCk7CiAJQUxJX1NFTERFVihpbmRleD81OjQpOwotCQorCiAJYWxpX3dyaXRlKDB4MzAsIGVuYWJsZWQ/MTowKTsKIAlpZiAoZW5hYmxlZCkgewogCQlhbGlfd3JpdGUoMHg2MCwgaW8gPj4gOCk7CiAJCWFsaV93cml0ZSgweDYxLCBpbyAmIDB4ZmYpOwogCQlhbGlfd3JpdGUoMHg3MCwgaXJxKTsKLQkJCisKIAkJYWxpX3dyaXRlKDB4ZjAsIDB4MDApOwogCQlhbGlfd3JpdGUoMHhmMSwgMHgwMCk7Ci0JCQorCiAJCS8qIGh1aD8gd3JpdGUgMHhmMiB0d2ljZSAtIGEgdHlwbyBpbiByb2xvCi0JCSAqIG9yIHNvbWUgc2VjcmV0IGFsaSBlcnJhdGE/IFdobyBrbm93cz8gCisJCSAqIG9yIHNvbWUgc2VjcmV0IGFsaSBlcnJhdGE/IFdobyBrbm93cz8KIAkJICovCiAJCWlmIChpbmRleCkgewogCQkJYWxpX3dyaXRlKDB4ZjIsIDB4MDApOwpAQCAtMTcxLDcgKzE3MSw3IEBACiB7CiAJQUxJX09QRU4oKTsKIAlBTElfU0VMREVWKDUpOwotCQorCiAJYWxpX3dyaXRlKDB4ZjEsIGVuYWJsZWQ/MHg0ODoweDAwKTsgLyogZnVsbGR1cGxleCBJckRhICovCiAJQUxJX0NMT1NFKCk7CiAKQEAgLTE4MSw3ICsxODEsNyBAQAogewogCUFMSV9PUEVOKCk7CiAJQUxJX1NFTERFVig2KTsKLQkKKwogCWFsaV93cml0ZSgweDMwLCBlbmFibGVkPzE6MCk7CiAJaWYgKGVuYWJsZWQpIHsKIAkJYWxpX3dyaXRlKDB4NjAsIGlvID4+IDgpOwpAQCAtMTk3LDEyICsxOTcsMTIgQEAKIHsKIAlBTElfT1BFTigpOwogCUFMSV9TRUxERVYoNyk7Ci0JCisKIAlhbGlfd3JpdGUoMHgzMCwgZW5hYmxlZD8xOjApOwogCWlmIChlbmFibGVkKSB7CiAJCWFsaV93cml0ZSgweDcwLCBrYmNfaXJxKTsKLQkJYWxpX3dyaXRlKDB4NzIsIG1vdXNlX2lycSk7CQkKLQkJCisJCWFsaV93cml0ZSgweDcyLCBtb3VzZV9pcnEpOworCiAJCWFsaV93cml0ZSgweGYwLCAweDAwKTsKIAl9CiAJQUxJX0NMT1NFKCk7CkBAIC0yMTAsMjEgKzIxMCwyMSBAQAogCiAKIC8qIENvbW1vbiBJL08KLSAqIAorICoKICAqIChUaGlzIGRlc2NyaXBvdHNpb24gaXMgYmFzZSBvbiBzZXZlcmFsIGluY29tcGV0ZSBzb3VyY2VzCiAgKiAgc2luY2UgSSBoYXZlIG5vdCBiZWVuIGFibGUgdG8gb2J0YWluIGFueSBkYXRhc2hlZXQgZm9yIHRoZSBkZXZpY2UKLSAqICB0aGVyZSBtYXkgYmUgc29tZSBtaXMtdW5kZXJzdGFuZGluZ3MgYnVycmllZCBpbiBoZXJlLiAKKyAqICB0aGVyZSBtYXkgYmUgc29tZSBtaXMtdW5kZXJzdGFuZGluZ3MgYnVycmllZCBpbiBoZXJlLgogICogIC0tIERhbmllbCBkYW5pZWxAb21pY3Jvbi5zZSkKLSAqIAorICoKICAqIFRoZXJlIGFyZSAyMiBDSU8gcGlucyBudW1iZXJlZAogICogMTAtMTcKICAqIDIwLTI1CiAgKiAzMC0zNwotICogCisgKgogICogMjAtMjQgYXJlIGRlZGljYXRlZCBDSU8gcGlucywgdGhlIG90aGVyIDE3IGFyZSBtdWxpcGxleGVkIHdpdGgKICAqIG90aGVyIGZ1bmN0aW9ucy4KLSAqIAotICogICAgICAgICAgIFNlY29uZGFyeSAKKyAqCisgKiAgICAgICAgICAgU2Vjb25kYXJ5CiAgKiBDSU8gUGluICAgRnVuY3Rpb24gICAgRGVjcmlwdGlvbgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ0lPMTAgICAgIElSUUlOMSAgICAgIEludGVycnVwdCBpbnB1dCAxPwpAQCAtMjM1LDE0ICsyMzUsMTQgQEAKICAqIENJTzE1ICAgICBQMjAgICAgICAgICBLQkMgUDIxIGZ1Y250aW9uCiAgKiBDSU8xNiAgICAgSTJDX0NMSyAgICAgSTJDIENsb2NrCiAgKiBDSU8xNyAgICAgSTJDX0RBVCAgICAgSTJDIERhdGEKLSAqIAorICoKICAqIENJTzIwICAgICAtCiAgKiBDSU8yMSAgICAgLQogICogQ0lPMjIgICAgIC0KICAqIENJTzIzICAgICAtCiAgKiBDSU8yNCAgICAgLQogICogQ0lPMjUgICAgIExPQ0sgICAgICAgIEtleWxvY2sKLSAqIAorICoKICAqIENJTzMwICAgICBLQkNfQ0xLICAgICBLZXliYW9yZCBDbG9jawogICogQ0lPMzEgICAgIENTMEogICAgICAgIEdlbmVyYWwgQ2hpcCBTZWxlY3QgZGVjb2RlciBDUzBKCiAgKiBDSU8zMiAgICAgQ1MxSiAgICAgICAgR2VuZXJhbCBDaGlwIFNlbGVjdCBkZWNvZGVyIENTMUoKQEAgLTI1MiwxMyArMjUyLDEzIEBACiAgKiBDSU8zNiAgICAgQUxUX01EQVQgICAgQWx0ZXJuYXRpdmUgTW91c2UgRGF0YQogICogQ0lPMzcgICAgIEFMVF9LQkMgICAgIEFsdGVybmF0aXZlIEtCQyBzZWxlY3QKICAqCi0gKiBUaGUgQ0lPIHVzZSBhbiBpbmRpcmVjdCBhZGRyZXNzIHNjaGVtZS4gCi0gKiAKKyAqIFRoZSBDSU8gdXNlIGFuIGluZGlyZWN0IGFkZHJlc3Mgc2NoZW1lLgorICoKICAqIFJlaWdzdGVyIDMgaW4gdGhlIFNJTyBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgaW5kZXggYW5kIGRhdGEKICAqIHBvcnQgYWRkcmVzc2VzIHdoZXJlIHRoZSBDSU8gSS9PIHJlZ2lzdGVycyBzaG93IHVwLgotICogVGhlIGZ1bmN0aW9uIHNlbGVjdGlvbiByZWdpc3RlcnMgYXJlIGFjY2Vzc2libGUgdW5kZXIgCi0gKiBmdW5jdGlvbiBTSU8gOC4gCi0gKiAKKyAqIFRoZSBmdW5jdGlvbiBzZWxlY3Rpb24gcmVnaXN0ZXJzIGFyZSBhY2Nlc3NpYmxlIHVuZGVyCisgKiBmdW5jdGlvbiBTSU8gOC4KKyAqCiAgKiBTSU8gcmVpZ3N0ZXIgMyAoQ0lPIEFkZHJlc3MgU2VsZWN0aW9uKSBiaXQgZGVmaW5pdGlvbnM6CiAgKiBiaXQgNyAgIENJTyBpbmRleCBhbmQgZGF0YSByZWdpc3RlcnMgZW5hYmxlZAogICogYml0IDEtMCBDSU8gaW5kaXJlY3QgcmVnaXN0ZXJzIHBvcnQgYWRkcmVzcyBzZWxlY3QKQEAgLTI2NiwyMyArMjY2LDIzIEBACiAgKiAgICAgICAxICBpbmRleCA9IDB4RTIgZGF0YSA9IDB4RTMKICAqICAgICAgIDIgIGluZGV4ID0gMHhFNCBkYXRhID0gMHhFNQogICogICAgICAgMyAgaW5kZXggPSAweEVBIGRhdGEgPSAweEVCCi0gKiAKKyAqCiAgKiBUaGVyZSBhcmUgdGhyZWUgQ0lPIEkvTyByZWdpc3RlciBhY2Nlc3NlZCB2aWEgQ0lPIGluZGV4IHBvcnQgYW5kIENJTyBkYXRhIHBvcnQKICAqIDB4MDEgICAgIENJTyAxMC0xNyBkYXRhCiAgKiAweDAyICAgICBDSU8gMjAtMjUgZGF0YSAoYml0cyA3LTYgdW51c2VkKQogICogMHgwMyAgICAgQ0lPIDMwLTM3IGRhdGEKLSAqIAotICogCi0gKiBUaGUgcGluIGZ1bmN0aW9uIGlzIGFjY2Vzc2VkIHRocm91Z2ggbm9ybWFsIAorICoKKyAqCisgKiBUaGUgcGluIGZ1bmN0aW9uIGlzIGFjY2Vzc2VkIHRocm91Z2ggbm9ybWFsCiAgKiBTSU8gcmVnaXN0ZXJzLCBlYWNoIHJlZ2lzdGVyIGhhdmUgdGhlIHNhbWUgZm9ybWF0OgotICogCisgKgogICogQml0ICAgRnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICBWYWx1ZQotICogMCAgICAgSW5wdXQvb3V0cHV0ICAgICAgICAgICAgICAgICAxPWlucHV0IAorICogMCAgICAgSW5wdXQvb3V0cHV0ICAgICAgICAgICAgICAgICAxPWlucHV0CiAgKiAxICAgICBQb2xhcml0eSBvZiBzaWduYWwgICAgICAgICAgIDE9aW52ZXJ0ZWQKICAqIDIgICAgIFVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgPz8KICAqIDMgICAgIEZ1bmN0aW9uIChub3JtYWwgb3Igc3BlY2lhbCkgMT1zcGVjaWFsCiAgKiA3LTQgICBVbnVzZWQKLSAqIAorICoKICAqIFNJTyBSRUcKICAqIDB4ZTAgICAgIENJTyAxMCBDb25maWcKICAqIDB4ZTEgICAgIENJTyAxMSBDb25maWcKQEAgLTMwOCw3ICszMDgsNyBAQAogICogMHhmYSAgICAgQ0lPIDM1IENvbmZpZwogICogMHhmYiAgICAgQ0lPIDM2IENvbmZpZwogICogMHhmYyAgICAgQ0lPIDM3IENvbmZpZwotICogCisgKgogICovCiAKICNkZWZpbmUgQUxJX0NJT19QT1JUX1NFTCAweDgzCkBAIC0zMTgsMjggKzMxOCwyOCBAQAogdm9pZCBhbGk1MTJ4X3NldF9jaW8oaW50IGVuYWJsZWQpCiB7CiAJaW50IGk7Ci0JCisKIAlBTElfT1BFTigpOwotCQorCiAJaWYgKGVuYWJsZWQpIHsKIAkJYWxpX3dyaXRlKDB4MywgQUxJX0NJT19QT1JUX1NFTCk7ICAgIC8qIEVuYWJsZSBDSU8gZGF0YSByZWdpc3RlciAqLwogCX0gZWxzZSB7CiAJCWFsaV93cml0ZSgweDMsIEFMSV9DSU9fUE9SVF9TRUwgJiB+MHg4MCk7CiAJfQotCQorCiAJQUxJX1NFTERFVig4KTsKLQkKKwogCWFsaV93cml0ZSgweDMwLCBlbmFibGVkPzE6MCk7Ci0JCisKIAkvKiBzZXQgYWxsIHBpbnMgdG8gaW5wdXQgdG8gc3RhcnQgd2l0aCAqLwogCWZvciAoaT0weGUwO2k8MHhlZTtpKyspIHsKIAkJYWxpX3dyaXRlKGksIDEpOwogCX0KLQkKKwogCWZvciAoaT0weGY1O2k8MHhmZTtpKyspIHsKIAkJYWxpX3dyaXRlKGksIDEpOwogCX0KLQkKKwogCUFMSV9DTE9TRSgpOwogfQogCkBAIC0zNDgsMjMgKzM0OCwyMyBAQAogewogCXU4IGRhdGE7CiAJdTggYWRkcjsKLQkKKwogCS8qIHZhbGlkIHBpbnMgYXJlIDEwLTE3LCAyMC0yNSBhbmQgMzAtMzcgKi8KLQlpZiAocGluID49IDEwICYmIHBpbiA8PSAxNykgeyAKKwlpZiAocGluID49IDEwICYmIHBpbiA8PSAxNykgewogCQlhZGRyID0gMHhlMCsocGluJjcpOwogCX0gZWxzZSBpZiAocGluID49IDIwICYmIHBpbiA8PSAyNSkgewogCQlhZGRyID0gMHhlOCsocGluJjcpOwotCX0gZWxzZSBpZiAocGluID49IDMwICYmIHBpbiA8PSAzNykgeyAKKwl9IGVsc2UgaWYgKHBpbiA+PSAzMCAmJiBwaW4gPD0gMzcpIHsKIAkJYWRkciA9IDB4ZjUrKHBpbiY3KTsKIAl9IGVsc2UgewogCQlyZXR1cm47CiAJfQotCQorCiAJQUxJX09QRU4oKTsKIAogCUFMSV9TRUxERVYoOCk7Ci0JCi0JCisKKwogCWRhdGE9MHhmNDsKIAlpZiAoc3BlY2lhbCkgewogCQlkYXRhIHw9IDB4MDg7CkBAIC0zNzYsMjIgKzM3NiwyMiBAQAogCQkJZGF0YSB8PSAweDAxOwogCQl9CiAJfQotCQorCiAJYWxpX3dyaXRlKGFkZHIsIGRhdGEpOwotCQorCiAJQUxJX0NMT1NFKCk7CiB9CiAKLXZvaWQgYWxpNTEyeF9jaW9fb3V0KGludCBwaW4sIGludCB2YWx1ZSkgCit2b2lkIGFsaTUxMnhfY2lvX291dChpbnQgcGluLCBpbnQgdmFsdWUpCiB7CiAJdTggcmVnOwogCXU4IGRhdGE7CiAJdTggYml0OwotCQorCiAJcmVnID0gcGluLzEwOwogCWJpdCA9IDEgPDwgKHBpbiUxMCk7Ci0JCi0JCQorCisKIAlvdXRiKHJlZywgQUxJX0NJT19JTkRFWCk7ICAgICAvKiBzZWxlY3QgSS9PIHJlZ2lzdGVyICovCiAJZGF0YSA9IGluYihBTElfQ0lPX0RBVEEpOwogCWlmICh2YWx1ZSkgewpAQCAtNDA3LDE3ICs0MDcsMTcgQEAKIAl1OCByZWc7CiAJdTggZGF0YTsKIAl1OCBiaXQ7Ci0JCQkKKwogCS8qIHZhbGlkIHBpbnMgYXJlIDEwLTE3LCAyMC0yNSBhbmQgMzAtMzcgKi8KIAlyZWcgPSBwaW4vMTA7CiAJYml0ID0gMSA8PCAocGluJTEwKTsKLQkKLQkKKworCiAJb3V0YihyZWcsIEFMSV9DSU9fSU5ERVgpOyAgICAgLyogc2VsZWN0IEkvTyByZWdpc3RlciAqLwogCWRhdGEgPSBpbmIoQUxJX0NJT19EQVRBKTsKLQkKLQlyZXR1cm4gZGF0YSAmIGJpdDsgCisKKwlyZXR1cm4gZGF0YSAmIGJpdDsKIH0KIAotIAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtNTcweC5jIGIvZHJpdmVycy9iY201NzB4LmMKaW5kZXggYTg4ODgwYS4uNWY2MzJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iY201NzB4LmMKKysrIGIvZHJpdmVycy9iY201NzB4LmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxtYWxsb2MuaD4KIAogCi0KIC8qCiAgKiBQQ0kgUmVnaXN0ZXJzIGFuZCBkZWZpbml0aW9ucy4KICAqLwpAQCAtMzMsNyArMzIsNiBAQAogI2RlZmluZSBCQ001NzBYX0lMSU5FICAgMQogCiAKLQogI2RlZmluZSBTRUNPTkRfVVNFQwkxMDAwMDAwCiAjZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAxNjAwCiAjZGVmaW5lIE1BWF9VTklUUyAgICAgICA0CkBAIC05OCw3ICs5Niw2IEBACiAJe1NUX0NPQUxfVEssIFNUX0NPQUxfVEssIFNUX0NPQUxfVEssIFNUX0NPQUxfVEt9OwogCiAKLQogLyoKICAqIExlZ2l0aW1hdGUgdmFsdWVzIGZvciBCQ001NzB4IGRldmljZSB0eXBlcwogICovCkBAIC0yNzQsNyArMjcxLDYgQEAKICNkZWZpbmUgbjU3MHhEZXZpY2VzICAgKHNpemVvZihiY201NzB4RGV2aWNlcykvc2l6ZW9mKGJjbTU3MHhEZXZpY2VzWzBdKSkKIAogCi0KIC8qCiAgKiBBbGxvY2F0ZSBhIHBhY2tldCBidWZmZXIgZnJvbSB0aGUgYmNtNTcweCBwYWNrZXQgcG9vbC4KICAqLwpAQCAtNTIyLDcgKzUxOCw3IEBACiAgICAgZWxzZSBpZiAoKHBEZXZpY2UtPlBoeUlkICYgUEhZX0lEX01BU0spID09IFBIWV9CQ001NzAxX1BIWV9JRCkKIAlwcmludGYoIkJyb2FkY29tIEJDTTU3MDEgSW50ZWdyYXRlZCBDb3BwZXIgIik7CiAgICAgZWxzZSBpZiAoKHBEZXZpY2UtPlBoeUlkICYgUEhZX0lEX01BU0spID09IFBIWV9CQ001NzAzX1BIWV9JRCkKLSAgICAgICAgcHJpbnRmKCJCcm9hZGNvbSBCQ001NzAzIEludGVncmF0ZWQgQ29wcGVyICIpOworCXByaW50ZigiQnJvYWRjb20gQkNNNTcwMyBJbnRlZ3JhdGVkIENvcHBlciAiKTsKICAgICBlbHNlIGlmICgocERldmljZS0+UGh5SWQgJiBQSFlfSURfTUFTSykgPT0gUEhZX0JDTTgwMDJfUEhZX0lEKQogCXByaW50ZigiQnJvYWRjb20gQkNNODAwMiBTZXJEZXMgIik7CiAgICAgZWxzZSBpZiAocERldmljZS0+RW5hYmxlVGJpKQpAQCAtNTU2LDIxICs1NTIsMjEgQEAKICAgICBpZiAocERldmljZS0+VXNlVGFnZ2VkU3RhdHVzKSB7CiAJaWYgKChwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+U3RhdHVzICYgU1RBVFVTX0JMT0NLX1VQREFURUQpIHx8CiAJICAgIHBVbURldmljZS0+YWRhcHRlcl9qdXN0X2luaXRlZCkgewotICAgICAgICAgICAgTUJfUkVHX1dSKHBEZXZpY2UsIE1haWxib3guSW50ZXJydXB0WzBdLkxvdywgMSk7Ci0gICAgICAgICAgICBvbGR0YWcgPSBwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+U3RhdHVzVGFnOworCSAgICBNQl9SRUdfV1IocERldmljZSwgTWFpbGJveC5JbnRlcnJ1cHRbMF0uTG93LCAxKTsKKwkgICAgb2xkdGFnID0gcERldmljZS0+cFN0YXR1c0Jsa1ZpcnQtPlN0YXR1c1RhZzsKIAotICAgICAgICAgICAgZm9yIChpID0gMDsgOyBpKyspIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+U3RhdHVzICY9IH5TVEFUVVNfQkxPQ0tfVVBEQVRFRDsKLSAgICAgICAgICAgICAgICBMTV9TZXJ2aWNlSW50ZXJydXB0cyhwRGV2aWNlKTsKLSAgICAgICAgICAgICAgICBuZXd0YWcgPSBwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+U3RhdHVzVGFnOwotICAgICAgICAgICAgICAgIGlmICgobmV3dGFnID09IG9sZHRhZykgfHwgKGkgPiA1MCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTUJfUkVHX1dSKHBEZXZpY2UsIE1haWxib3guSW50ZXJydXB0WzBdLkxvdywgbmV3dGFnIDw8IDI0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBEZXZpY2UtPlVuZGlGaXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBHcmMuTG9jYWxDdHJsLAorCSAgICBmb3IgKGkgPSAwOyA7IGkrKykgeworCQlwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+U3RhdHVzICY9IH5TVEFUVVNfQkxPQ0tfVVBEQVRFRDsKKwkJTE1fU2VydmljZUludGVycnVwdHMocERldmljZSk7CisJCW5ld3RhZyA9IHBEZXZpY2UtPnBTdGF0dXNCbGtWaXJ0LT5TdGF0dXNUYWc7CisJCWlmICgobmV3dGFnID09IG9sZHRhZykgfHwgKGkgPiA1MCkpIHsKKwkJICAgIE1CX1JFR19XUihwRGV2aWNlLCBNYWlsYm94LkludGVycnVwdFswXS5Mb3csIG5ld3RhZyA8PCAyNCk7CisJCSAgICBpZiAocERldmljZS0+VW5kaUZpeCkgeworCQkJUkVHX1dSKHBEZXZpY2UsIEdyYy5Mb2NhbEN0cmwsCiAJCQkgICAgICAgcERldmljZS0+R3JjTG9jYWxDdHJsIHwgMHgyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgfQorCQkgICAgfQorCQkgICAgYnJlYWs7CisJCSB9CiAJCW9sZHRhZyA9IG5ld3RhZzsKIAkgICAgfQogCX0KQEAgLTYyNSw4ICs2MjEsOCBAQAogICAgIC8qIExpbmsgZG93biwgcmV0dXJuICovCiAgICAgd2hpbGUocERldmljZS0+TGlua1N0YXR1cyA9PSBMTV9TVEFUVVNfTElOS19ET1dOKSB7CiAjaWYgMAotICAgICAgICBwcmludGYoImV0aCVkOiBsaW5rIGRvd24gLSBjaGVjayBjYWJsZSBvciBsaW5rIHBhcnRuZXIuXG4iLAotICAgICAgICAgICAgICAgcFVtRGV2aWNlLT5pbmRleCk7CisJcHJpbnRmKCJldGglZDogbGluayBkb3duIC0gY2hlY2sgY2FibGUgb3IgbGluayBwYXJ0bmVyLlxuIiwKKwkgICAgICAgcFVtRGV2aWNlLT5pbmRleCk7CiAjZW5kaWYKIAlldGhfaXNyKCk7CiAKQEAgLTY3Miw3ICs2NjgsNyBAQAogICAgICAqIHVzZWQgdG8gc2VuZCB0aGUgcGFja2V0LgogICAgICAqLwogICAgIGlmIChNTV9Db2FsZXNjZVR4QnVmZmVyIChwRGV2aWNlLCBwUGFja2V0KSAhPSBMTV9TVEFUVVNfU1VDQ0VTUykgewotICAgICAgICBpZiAocFVtUGFja2V0LT5za2J1ZmYgPT0gTlVMTCl7CisJaWYgKHBVbVBhY2tldC0+c2tidWZmID09IE5VTEwpewogCSAgICAvKiBQYWNrZXQgd2FzIGRpc2NhcmRlZCAqLwogCSAgICBwcmludGYoIlRYOiBmYWlsZWQgKDEpXG4iKTsKIAkgICAgc3RhdHVzID0gMTsKQEAgLTY4MCw4ICs2NzYsOCBAQAogCSAgICBwcmludGYoIlRYOiBmYWlsZWQgKDIpXG4iKTsKIAkgICAgc3RhdHVzID0gMjsKIAl9Ci0gICAgICAgIFFRX1B1c2hIZWFkICgmcERldmljZS0+VHhQYWNrZXRGcmVlUS5Db250YWluZXIsIHBQYWNrZXQpOwotICAgICAgICByZXR1cm4gc3RhdHVzOworCVFRX1B1c2hIZWFkICgmcERldmljZS0+VHhQYWNrZXRGcmVlUS5Db250YWluZXIsIHBQYWNrZXQpOworCXJldHVybiBzdGF0dXM7CiAgICAgfQogCiAgICAgLyogQ29weSBwYWNrZXQgdG8gRE1BIGJ1ZmZlciAqLwpAQCAtNjk0LDExICs2OTAsMTEgQEAKICAgICBwUGFja2V0LT5GbGFncyAmPSB+U05EX0JEX0ZMQUdfVENQX1VEUF9DS1NVTTsKIAogICAgIGlmICggTE1fU2VuZFBhY2tldChwRGV2aWNlLCBwUGFja2V0KSA9PSBMTV9TVEFUVVNfRkFJTFVSRSl7Ci0gICAgICAgIC8qCi0gICAgICAgICAqICBBIGxvd2VyIGxldmVsIHNlbmQgZmFpbHVyZSB3aWxsIHB1c2ggdGhlIHBhY2tldCBkZXNjcmlwdG9yIGJhY2sKLSAgICAgICAgICogIGluIHRoZSBmcmVlIHF1ZXVlLCBzbyBqdXN0IGRlYWwgd2l0aCB0aGUgVnhXb3JrcyBjbHVzdGVycy4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChwVW1QYWNrZXQtPnNrYnVmZiA9PSBOVUxMKXsKKwkvKgorCSAqICBBIGxvd2VyIGxldmVsIHNlbmQgZmFpbHVyZSB3aWxsIHB1c2ggdGhlIHBhY2tldCBkZXNjcmlwdG9yIGJhY2sKKwkgKiAgaW4gdGhlIGZyZWUgcXVldWUsIHNvIGp1c3QgZGVhbCB3aXRoIHRoZSBWeFdvcmtzIGNsdXN0ZXJzLgorCSAqLworCWlmIChwVW1QYWNrZXQtPnNrYnVmZiA9PSBOVUxMKXsKIAkgICAgcHJpbnRmKCJUWCBmYWlsZWQgKDEpIVxuIik7CiAJICAgIC8qIFBhY2tldCB3YXMgZGlzY2FyZGVkICovCiAJICAgIHN0YXR1cyA9IDM7CkBAIC04MDQsNyArODAwLDYgQEAKIH0KIAogCi0KIC8qIFNodXQgZG93biBkZXZpY2UgKi8KIHZvaWQKIGV0aF9oYWx0KHZvaWQpCkBAIC04MTQsMTkgKzgwOSwxOSBAQAogICAgIGlmIChwRGV2aWNlICYmIHBVbURldmljZSAmJiBwVW1EZXZpY2UtPm9wZW5lZCl7CiAJcHJpbnRmKCJcbmV0aCVkOiVzLCIsIHBVbURldmljZS0+aW5kZXgsIHBVbURldmljZS0+bmFtZSk7CiAJcHJpbnRmKCJIQUxULCIpOwotICAgICAgICAvKiBzdG9wIGRldmljZSAqLwotICAgICAgICBMTV9IYWx0KHBEZXZpY2UpOworCS8qIHN0b3AgZGV2aWNlICovCisJTE1fSGFsdChwRGV2aWNlKTsKIAlwcmludGYoIlBPV0VSIERPV04sIik7Ci0gICAgICAgIExNX1NldFBvd2VyU3RhdGUocERldmljZSwgTE1fUE9XRVJfU1RBVEVfRDMpOworCUxNX1NldFBvd2VyU3RhdGUocERldmljZSwgTE1fUE9XRVJfU1RBVEVfRDMpOwogCi0gICAgICAgIC8qIEZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIGRldmljZSBpbiB0aWdvbjMgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHBVbURldmljZS0+bWVtX2xpc3RfbnVtOyBpKyspICB7Ci0gICAgICAgICAgICBpZiAocFVtRGV2aWNlLT5tZW1fbGlzdFtpXSkgIHsKKwkvKiBGcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoZSBkZXZpY2UgaW4gdGlnb24zICovCisJZm9yIChpID0gMDsgaSA8IHBVbURldmljZS0+bWVtX2xpc3RfbnVtOyBpKyspICB7CisJICAgIGlmIChwVW1EZXZpY2UtPm1lbV9saXN0W2ldKSAgewogCQkvKiBzYW5pdHkgY2hlY2sgKi8KLSAgICAgICAgICAgICAgICBpZiAocFVtRGV2aWNlLT5kbWFfbGlzdFtpXSkgeyAgLyogY2FjaGUtc2FmZSBtZW1vcnkgKi8KLSAgICAgICAgICAgICAgICAgICAgZnJlZShwVW1EZXZpY2UtPm1lbV9saXN0W2ldKTsKKwkJaWYgKHBVbURldmljZS0+ZG1hX2xpc3RbaV0pIHsgIC8qIGNhY2hlLXNhZmUgbWVtb3J5ICovCisJCSAgICBmcmVlKHBVbURldmljZS0+bWVtX2xpc3RbaV0pOwogCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmcmVlKHBVbURldmljZS0+bWVtX2xpc3RbaV0pOyAgLyogbm9ybWFsIG1lbW9yeSAgICovCisJCSAgICBmcmVlKHBVbURldmljZS0+bWVtX2xpc3RbaV0pOyAgLyogbm9ybWFsIG1lbW9yeSAgICovCiAJCX0KIAkgICAgfQogCX0KQEAgLTg0MCw4ICs4MzUsNiBAQAogfQogCiAKLQotCiAvKgogICoKICAqIE1pZGRsZSBNb2R1bGU6IEludGVyZmFjZSBiZXR3ZWVuIHRoZSBIVyBkcml2ZXIgKHRpZ29uMyBtb2R1bGVzKSBhbmQKQEAgLTkzMSw3ICs5MjQsNiBAQAogfQogCiAKLQogTE1fU1RBVFVTCiBNTV9BbGxvY2F0ZU1lbW9yeShQTE1fREVWSUNFX0JMT0NLIHBEZXZpY2UsIExNX1VJTlQzMiBCbG9ja1NpemUsCiAJUExNX1ZPSUQgKnBNZW1vcnlCbG9ja1ZpcnQpCkBAIC0xMTgzLDI2ICsxMTc1LDI2IEBACiAgICAgaWYgKFN0YXR1cyA9PSBMTV9TVEFUVVNfTElOS19ET1dOKSB7CiAJc3ByaW50ZihidWYsImV0aCVkOiAlczogTklDIExpbmsgaXMgZG93blxuIiwKIAkJcFVtRGV2aWNlLT5pbmRleCxwVW1EZXZpY2UtPm5hbWUpOwotICAgICAgICBsY2RbMF0gPSAnTCc7bGNkWzFdPSdOJztsY2RbMl09J0snO2xjZFszXSA9ICc/JzsKKwlsY2RbMF0gPSAnTCc7bGNkWzFdPSdOJztsY2RbMl09J0snO2xjZFszXSA9ICc/JzsKICAgICB9IGVsc2UgaWYgKFN0YXR1cyA9PSBMTV9TVEFUVVNfTElOS19BQ1RJVkUpIHsKIAlzcHJpbnRmKGJ1ZiwiZXRoJWQ6JXM6ICIsIHBVbURldmljZS0+aW5kZXgsIHBVbURldmljZS0+bmFtZSk7CiAKIAlpZiAocERldmljZS0+TGluZVNwZWVkID09IExNX0xJTkVfU1BFRURfMTAwME1CUFMpewogCSAgICBzdHJjYXQoYnVmLCIxMDAwIE1icHMgIik7Ci0gICAgICAgICAgICBsY2RbMF0gPSAnMSc7bGNkWzFdPSdHJztsY2RbMl09J0InOworCSAgICBsY2RbMF0gPSAnMSc7bGNkWzFdPSdHJztsY2RbMl09J0InOwogCX0gZWxzZSBpZiAocERldmljZS0+TGluZVNwZWVkID09IExNX0xJTkVfU1BFRURfMTAwTUJQUyl7CiAJICAgIHN0cmNhdChidWYsIjEwMCBNYnBzICIpOwotICAgICAgICAgICAgbGNkWzBdID0gJzEnO2xjZFsxXT0nMCc7bGNkWzJdPScwJzsKKwkgICAgbGNkWzBdID0gJzEnO2xjZFsxXT0nMCc7bGNkWzJdPScwJzsKIAl9IGVsc2UgaWYgKHBEZXZpY2UtPkxpbmVTcGVlZCA9PSBMTV9MSU5FX1NQRUVEXzEwTUJQUyl7CiAJICAgIHN0cmNhdChidWYsIjEwIE1icHMgIik7Ci0gICAgICAgICAgICBsY2RbMF0gPSAnMSc7bGNkWzFdPScwJztsY2RbMl09JyAnOworCSAgICBsY2RbMF0gPSAnMSc7bGNkWzFdPScwJztsY2RbMl09JyAnOwogCX0KIAlpZiAocERldmljZS0+RHVwbGV4TW9kZSA9PSBMTV9EVVBMRVhfTU9ERV9GVUxMKXsKIAkgICAgc3RyY2F0KGJ1ZiwgImZ1bGwgZHVwbGV4Iik7Ci0gICAgICAgICAgICBsY2RbM10gPSAnRic7CisJICAgIGxjZFszXSA9ICdGJzsKIAl9IGVsc2UgewogCSAgICBzdHJjYXQoYnVmLCAiaGFsZiBkdXBsZXgiKTsKLSAgICAgICAgICAgIGxjZFszXSA9ICdIJzsKKwkgICAgbGNkWzNdID0gJ0gnOwogCX0KIAlzdHJjYXQoYnVmLCAiIGxpbmsgdXAiKTsKIApAQCAtMTIyMyw3ICsxMjE1LDcgQEAKIAl9IGVsc2UgewogCSAgICBzdHJjYXQoYnVmLCAiLCBmbG93IGNvbnRyb2wgT0ZGIik7CiAJfQotICAgICAgICBzdHJjYXQoYnVmLCJcbiIpOworCXN0cmNhdChidWYsIlxuIik7CiAJcHJpbnRmKCIlcyIsYnVmKTsKICAgICB9CiAjaWYgMApAQCAtMTI3NSwyMCArMTI2NywyMCBAQAogICAgIGludCBsZW4gPSAwOwogCiAgICAgaWYgKGxlbiA9PSAwKQotICAgICAgICByZXR1cm4gKExNX1NUQVRVU19TVUNDRVNTKTsKKwlyZXR1cm4gKExNX1NUQVRVU19TVUNDRVNTKTsKIAogICAgIGlmIChsZW4gPiBNQVhfUEFDS0VUX1NJWkUpewotICAgICAgICBwcmludGYgKCJldGglZDogeG1pdCBmcmFtZSBkaXNjYXJkZWQsIHRvbyBiaWchLCBzaXplID0gJWRcbiIsCisJcHJpbnRmICgiZXRoJWQ6IHhtaXQgZnJhbWUgZGlzY2FyZGVkLCB0b28gYmlnISwgc2l6ZSA9ICVkXG4iLAogCQlwVW1EZXZpY2UtPmluZGV4LCBsZW4pOwotICAgICAgICByZXR1cm4gKExNX1NUQVRVU19GQUlMVVJFKTsKKwlyZXR1cm4gKExNX1NUQVRVU19GQUlMVVJFKTsKICAgICB9CiAKICAgICBza2JuZXcgPSBiY201NzB4UGt0QWxsb2MocFVtRGV2aWNlLT5pbmRleCwgTUFYX1BBQ0tFVF9TSVpFKTsKIAogICAgIGlmIChza2JuZXcgPT0gTlVMTCkgewotICAgICAgICBwVW1EZXZpY2UtPnR4X2Z1bGwgPSAxOwotICAgICAgICBwcmludGYgKCJldGglZDogb3V0IG9mIHRyYW5zbWl0IGJ1ZmZlcnMiLCBwVW1EZXZpY2UtPmluZGV4KTsKLSAgICAgICAgcmV0dXJuIChMTV9TVEFUVVNfRkFJTFVSRSk7CisJcFVtRGV2aWNlLT50eF9mdWxsID0gMTsKKwlwcmludGYgKCJldGglZDogb3V0IG9mIHRyYW5zbWl0IGJ1ZmZlcnMiLCBwVW1EZXZpY2UtPmluZGV4KTsKKwlyZXR1cm4gKExNX1NUQVRVU19GQUlMVVJFKTsKICAgICB9CiAKICAgICAvKiBOZXcgcGFja2V0IHZhbHVlcyAqLwpAQCAtMTMyNSwxMyArMTMxNywxMyBAQAogCXBVbVBhY2tldCA9IChQVU1fUEFDS0VUKSBwUGFja2V0OwogCXNrYiA9ICh2b2lkKilwVW1QYWNrZXQtPnNrYnVmZjsKIAotICAgICAgICAvKgotICAgICAgICAqIEZyZWUgTUJMSyBpZiB3ZSB0cmFuc21pdHRlZCBhIGZyYWdtZW50ZWQgcGFja2V0IG9yIGEKLSAgICAgICAgKiBub24tZnJhZ21lbnRlZCBwYWNrZXQgc3RyYWlnaHQgZnJvbSB0aGUgVnhXb3JrcwotICAgICAgICAqIGJ1ZmZlciBwb29sLiBJZiBwYWNrZXQgd2FzIGNvcGllZCB0byBhIGxvY2FsIHRyYW5zbWl0Ci0gICAgICAgICogYnVmZmVyLCB0aGVuIHRoZXJlJ3Mgbm8gTUJVRiB0byBmcmVlLCBqdXN0IGZyZWUKLSAgICAgICAgKiB0aGUgdHJhbnNtaXQgYnVmZmVyIGJhY2sgdG8gdGhlIGNsdXN0ZXIgcG9vbC4KLSAgICAgICAgKi8KKwkvKgorCSogRnJlZSBNQkxLIGlmIHdlIHRyYW5zbWl0dGVkIGEgZnJhZ21lbnRlZCBwYWNrZXQgb3IgYQorCSogbm9uLWZyYWdtZW50ZWQgcGFja2V0IHN0cmFpZ2h0IGZyb20gdGhlIFZ4V29ya3MKKwkqIGJ1ZmZlciBwb29sLiBJZiBwYWNrZXQgd2FzIGNvcGllZCB0byBhIGxvY2FsIHRyYW5zbWl0CisJKiBidWZmZXIsIHRoZW4gdGhlcmUncyBubyBNQlVGIHRvIGZyZWUsIGp1c3QgZnJlZQorCSogdGhlIHRyYW5zbWl0IGJ1ZmZlciBiYWNrIHRvIHRoZSBjbHVzdGVyIHBvb2wuCisJKi8KIAogCWlmIChza2IpCiAJICAgIGJjbTU3MHhQa3RGcmVlIChwVW1EZXZpY2UtPmluZGV4LCBza2IpOwpAQCAtMTM4MywyMiArMTM3NSwyMiBAQAogTU1fU2V0QWRkciAoTE1fUEhZU0lDQUxfQUREUkVTUyAqcGFkZHIsIGRtYV9hZGRyX3QgYWRkcikKIHsKICNpZiAoQklUU19QRVJfTE9ORyA9PSA2NCkKLSAgICAgICAgcGFkZHItPkhpZ2ggPSAoKHVuc2lnbmVkIGxvbmcpIGFkZHIpID4+IDMyOwotICAgICAgICBwYWRkci0+TG93ID0gKCh1bnNpZ25lZCBsb25nKSBhZGRyKSAmIDB4ZmZmZmZmZmY7CisJcGFkZHItPkhpZ2ggPSAoKHVuc2lnbmVkIGxvbmcpIGFkZHIpID4+IDMyOworCXBhZGRyLT5Mb3cgPSAoKHVuc2lnbmVkIGxvbmcpIGFkZHIpICYgMHhmZmZmZmZmZjsKICNlbHNlCi0gICAgICAgIHBhZGRyLT5IaWdoID0gMDsKLSAgICAgICAgcGFkZHItPkxvdyA9ICh1bnNpZ25lZCBsb25nKSBhZGRyOworCXBhZGRyLT5IaWdoID0gMDsKKwlwYWRkci0+TG93ID0gKHVuc2lnbmVkIGxvbmcpIGFkZHI7CiAjZW5kaWYKIH0KIAogdm9pZAogTU1fU2V0VDNBZGRyKFQzXzY0QklUX0hPU1RfQUREUiAqcGFkZHIsIGRtYV9hZGRyX3QgYWRkcikKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBiYWRkciA9ICh1bnNpZ25lZCBsb25nKSBhZGRyOworCXVuc2lnbmVkIGxvbmcgYmFkZHIgPSAodW5zaWduZWQgbG9uZykgYWRkcjsKICNpZiAoQklUU19QRVJfTE9ORyA9PSA2NCkKLSAgICAgICAgc2V0XzY0Yml0X2FkZHIocGFkZHIsIGJhZGRyICYgMHhmZmZmZmZmZiwgYmFkZHIgPj4gMzIpOworCXNldF82NGJpdF9hZGRyKHBhZGRyLCBiYWRkciAmIDB4ZmZmZmZmZmYsIGJhZGRyID4+IDMyKTsKICNlbHNlCi0gICAgICAgIHNldF82NGJpdF9hZGRyKHBhZGRyLCBiYWRkciwgMCk7CisJc2V0XzY0Yml0X2FkZHIocGFkZHIsIGJhZGRyLCAwKTsKICNlbmRpZgogfQogCkBAIC0xNDY1LDcgKzE0NTcsNiBAQAogfSAvKiBRUV9Jbml0UXVldWUgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE0ODIsNyArMTQ3Myw2IEBACiB9IC8qIFFRX0Z1bGwgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE0OTUsNyArMTQ4NSw2IEBACiB9IC8qIFFRX0VtcHR5ICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNTA4LDcgKzE0OTcsNiBAQAogfSAvKiBRUV9HZXRTaXplICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNTIxLDcgKzE1MDksNiBAQAogfSAvKiBRUV9HZXRFbnRyeUNudCAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTUzOSw3ICsxNTI2LDcgQEAKIAogI2lmICFkZWZpbmVkKFFRX05PX09WRVJGTE9XX0NIRUNLKQogICAgIGlmKEhlYWQgPT0gcFF1ZXVlLT5UYWlsKSB7Ci0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIH0gLyogaWYgKi8KICNlbmRpZiAvKiBRUV9OT19PVkVSRkxPV19DSEVDSyAqLwogCkBAIC0xNTUyLDcgKzE1MzksNiBAQAogfSAvKiBRUV9QdXNoSGVhZCAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTU2OCwxMyArMTU1NCwxMyBAQAogCiAgICAgVGFpbCA9IHBRdWV1ZS0+VGFpbDsKICAgICBpZihUYWlsID09IDApIHsKLSAgICAgICAgVGFpbCA9IHBRdWV1ZS0+U2l6ZTsKKwlUYWlsID0gcFF1ZXVlLT5TaXplOwogICAgIH0gLyogaWYgKi8KICAgICBUYWlsLS07CiAKICNpZiAhZGVmaW5lZChRUV9OT19PVkVSRkxPV19DSEVDSykKICAgICBpZihUYWlsID09IHBRdWV1ZS0+SGVhZCkgewotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKICAgICB9IC8qIGlmICovCiAjZW5kaWYgLyogUVFfTk9fT1ZFUkZMT1dfQ0hFQ0sgKi8KIApAQCAtMTU4Nyw3ICsxNTczLDYgQEAKIH0gLyogUVFfUHVzaFRhaWwgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2MDMsMTIgKzE1ODgsMTIgQEAKIAogI2lmICFkZWZpbmVkKFFRX05PX1VOREVSRkxPV19DSEVDSykKICAgICBpZihIZWFkID09IHBRdWV1ZS0+VGFpbCkgewotICAgICAgICByZXR1cm4gKFBRUV9FTlRSWSkgMDsKKwlyZXR1cm4gKFBRUV9FTlRSWSkgMDsKICAgICB9IC8qIGlmICovCiAjZW5kaWYgLyogUVFfTk9fVU5ERVJGTE9XX0NIRUNLICovCiAKICAgICBpZihIZWFkID09IDApIHsKLSAgICAgICAgSGVhZCA9IHBRdWV1ZS0+U2l6ZTsKKwlIZWFkID0gcFF1ZXVlLT5TaXplOwogICAgIH0gLyogaWYgKi8KICAgICBIZWFkLS07CiAKQEAgLTE2MjIsNyArMTYwNyw2IEBACiB9IC8qIFFRX1BvcEhlYWQgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2MzgsNyArMTYyMiw3IEBACiAKICNpZiAhZGVmaW5lZChRUV9OT19VTkRFUkZMT1dfQ0hFQ0spCiAgICAgaWYoVGFpbCA9PSBwUXVldWUtPkhlYWQpIHsKLSAgICAgICAgcmV0dXJuIChQUVFfRU5UUlkpIDA7CisJcmV0dXJuIChQUVFfRU5UUlkpIDA7CiAgICAgfSAvKiBpZiAqLwogI2VuZGlmIC8qIFFRX05PX1VOREVSRkxPV19DSEVDSyAqLwogCkBAIC0xNjUxLDcgKzE2MzUsNiBAQAogfSAvKiBRUV9Qb3BUYWlsICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNjY0LDE2ICsxNjQ3LDE2IEBACiB7CiAgICAgaWYoSWR4ID49IGF0b21pY19yZWFkKCZwUXVldWUtPkVudHJ5Q250KSkKICAgICB7Ci0gICAgICAgIHJldHVybiAoUFFRX0VOVFJZKSAwOworCXJldHVybiAoUFFRX0VOVFJZKSAwOwogICAgIH0KIAogICAgIGlmKHBRdWV1ZS0+SGVhZCA+IElkeCkKICAgICB7Ci0gICAgICAgIElkeCA9IHBRdWV1ZS0+SGVhZCAtIElkeDsKKwlJZHggPSBwUXVldWUtPkhlYWQgLSBJZHg7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIElkeCA9IHBRdWV1ZS0+U2l6ZSAtIChJZHggLSBwUXVldWUtPkhlYWQpOworCUlkeCA9IHBRdWV1ZS0+U2l6ZSAtIChJZHggLSBwUXVldWUtPkhlYWQpOwogICAgIH0KICAgICBJZHgtLTsKIApAQCAtMTY4MSw3ICsxNjY0LDYgQEAKIH0KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2OTQsMTMgKzE2NzYsMTMgQEAKIHsKICAgICBpZihJZHggPj0gYXRvbWljX3JlYWQoJnBRdWV1ZS0+RW50cnlDbnQpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIChQUVFfRU5UUlkpIDA7CisJcmV0dXJuIChQUVFfRU5UUlkpIDA7CiAgICAgfQogCiAgICAgSWR4ICs9IHBRdWV1ZS0+VGFpbDsKICAgICBpZihJZHggPj0gcFF1ZXVlLT5TaXplKQogICAgIHsKLSAgICAgICAgSWR4ID0gSWR4IC0gcFF1ZXVlLT5TaXplOworCUlkeCA9IElkeCAtIHBRdWV1ZS0+U2l6ZTsKICAgICB9CiAKICAgICByZXR1cm4gcFF1ZXVlLT5BcnJheVtJZHhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY201NzB4X2F1dG9uZWcuYyBiL2RyaXZlcnMvYmNtNTcweF9hdXRvbmVnLmMKaW5kZXggMTgxOGM2YS4uOTAyMzc5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iY201NzB4X2F1dG9uZWcuYworKysgYi9kcml2ZXJzL2JjbTU3MHhfYXV0b25lZy5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSAiYmNtNTcweF9tbS5oIgogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzcsNyArMzYsNiBAQAogfQogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTYsNyArNTQsNiBAQAogfQogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNzgsMTcgKzc1LDE2IEBACiAgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLlN0YXR1cyk7CiAgICAgaWYoVmFsdWUzMiAmIE1BQ19TVEFUVVNfUkVDRUlWSU5HX0NGRykKICAgICB7Ci0gICAgICAgIFZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgTWFjQ3RybC5SeEF1dG9OZWcpOwotICAgICAgICAqcFJ4Q29uZmlnID0gKHVuc2lnbmVkIHNob3J0KSBWYWx1ZTMyOworCVZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgTWFjQ3RybC5SeEF1dG9OZWcpOworCSpwUnhDb25maWcgPSAodW5zaWduZWQgc2hvcnQpIFZhbHVlMzI7CiAKLSAgICAgICAgUmV0Y29kZSA9IEFOX1RSVUU7CisJUmV0Y29kZSA9IEFOX1RSVUU7CiAgICAgfQogCiAgICAgcmV0dXJuIFJldGNvZGU7CiB9CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDIsNyArOTgsNyBAQAogCiAgICAgZm9yKGogPSAwOyBqIDwgc2l6ZW9mKEFOX1NUQVRFX0lORk8pOyBqKyspCiAgICAgewotICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikgcEFuSW5mbylbal0gPSAwOworCSgodW5zaWduZWQgY2hhciAqKSBwQW5JbmZvKVtqXSA9IDA7CiAgICAgfQogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBhZHZlcnRpc2VtZW50IHJlZ2lzdGVyLiAqLwpAQCAtMTEzLDcgKzEwOSw2IEBACiB9CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMzAsMTQgKzEyNSwxNCBAQAogICAgIC8qIEdldCB0aGUgY3VycmVudCB0aW1lLiAqLwogICAgIGlmKHBBbkluZm8tPlN0YXRlID09IEFOX1NUQVRFX1VOS05PV04pCiAgICAgewotICAgICAgICBwQW5JbmZvLT5SeENvbmZpZy5Bc1VTSE9SVCA9IDA7Ci0gICAgICAgIHBBbkluZm8tPkN1cnJlbnRUaW1lX3VzID0gMDsKLSAgICAgICAgcEFuSW5mby0+TGlua1RpbWVfdXMgPSAwOwotICAgICAgICBwQW5JbmZvLT5BYmlsaXR5TWF0Y2hDZmcgPSAwOwotICAgICAgICBwQW5JbmZvLT5BYmlsaXR5TWF0Y2hDbnQgPSAwOwotICAgICAgICBwQW5JbmZvLT5BYmlsaXR5TWF0Y2ggPSBBTl9GQUxTRTsKLSAgICAgICAgcEFuSW5mby0+SWRsZU1hdGNoID0gQU5fRkFMU0U7Ci0gICAgICAgIHBBbkluZm8tPkFja01hdGNoID0gQU5fRkFMU0U7CisJcEFuSW5mby0+UnhDb25maWcuQXNVU0hPUlQgPSAwOworCXBBbkluZm8tPkN1cnJlbnRUaW1lX3VzID0gMDsKKwlwQW5JbmZvLT5MaW5rVGltZV91cyA9IDA7CisJcEFuSW5mby0+QWJpbGl0eU1hdGNoQ2ZnID0gMDsKKwlwQW5JbmZvLT5BYmlsaXR5TWF0Y2hDbnQgPSAwOworCXBBbkluZm8tPkFiaWxpdHlNYXRjaCA9IEFOX0ZBTFNFOworCXBBbkluZm8tPklkbGVNYXRjaCA9IEFOX0ZBTFNFOworCXBBbkluZm8tPkFja01hdGNoID0gQU5fRkFMU0U7CiAgICAgfQogCiAgICAgLyogSW5jcmVtZW50IHRoZSB0aW1lciB0aWNrLiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZXZlcnkgbWljcm9zZWNvbi4gKi8KQEAgLTE0Nyw0MyArMTQyLDQzIEBACiAgICAgLyogY29ycmVzcG9uZGluZyBjb25kaXRpb25zIGFyZSBzYXRpc2ZpZWQuICovCiAgICAgaWYoTU1fQW5SeENvbmZpZyhwQW5JbmZvLCAmUnhDb25maWcpKQogICAgIHsKLSAgICAgICAgaWYoUnhDb25maWcgIT0gcEFuSW5mby0+QWJpbGl0eU1hdGNoQ2ZnKQotICAgICAgICB7Ci0gICAgICAgICAgICBwQW5JbmZvLT5BYmlsaXR5TWF0Y2hDZmcgPSBSeENvbmZpZzsKLSAgICAgICAgICAgIHBBbkluZm8tPkFiaWxpdHlNYXRjaCA9IEFOX0ZBTFNFOwotICAgICAgICAgICAgcEFuSW5mby0+QWJpbGl0eU1hdGNoQ250ID0gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBBbkluZm8tPkFiaWxpdHlNYXRjaENudCsrOwotICAgICAgICAgICAgaWYocEFuSW5mby0+QWJpbGl0eU1hdGNoQ250ID4gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwQW5JbmZvLT5BYmlsaXR5TWF0Y2ggPSBBTl9UUlVFOwotICAgICAgICAgICAgICAgIHBBbkluZm8tPkFiaWxpdHlNYXRjaENmZyA9IFJ4Q29uZmlnOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYoUnhDb25maWcgIT0gcEFuSW5mby0+QWJpbGl0eU1hdGNoQ2ZnKQorCXsKKwkgICAgcEFuSW5mby0+QWJpbGl0eU1hdGNoQ2ZnID0gUnhDb25maWc7CisJICAgIHBBbkluZm8tPkFiaWxpdHlNYXRjaCA9IEFOX0ZBTFNFOworCSAgICBwQW5JbmZvLT5BYmlsaXR5TWF0Y2hDbnQgPSAwOworCX0KKwllbHNlCisJeworCSAgICBwQW5JbmZvLT5BYmlsaXR5TWF0Y2hDbnQrKzsKKwkgICAgaWYocEFuSW5mby0+QWJpbGl0eU1hdGNoQ250ID4gMSkKKwkgICAgeworCQlwQW5JbmZvLT5BYmlsaXR5TWF0Y2ggPSBBTl9UUlVFOworCQlwQW5JbmZvLT5BYmlsaXR5TWF0Y2hDZmcgPSBSeENvbmZpZzsKKwkgICAgfQorCX0KIAotICAgICAgICBpZihSeENvbmZpZyAmIEFOX0NPTkZJR19BQ0spCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBBbkluZm8tPkFja01hdGNoID0gQU5fVFJVRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBBbkluZm8tPkFja01hdGNoID0gQU5fRkFMU0U7Ci0gICAgICAgIH0KKwlpZihSeENvbmZpZyAmIEFOX0NPTkZJR19BQ0spCisJeworCSAgICBwQW5JbmZvLT5BY2tNYXRjaCA9IEFOX1RSVUU7CisJfQorCWVsc2UKKwl7CisJICAgIHBBbkluZm8tPkFja01hdGNoID0gQU5fRkFMU0U7CisJfQogCi0gICAgICAgIHBBbkluZm8tPklkbGVNYXRjaCA9IEFOX0ZBTFNFOworCXBBbkluZm8tPklkbGVNYXRjaCA9IEFOX0ZBTFNFOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBwQW5JbmZvLT5JZGxlTWF0Y2ggPSBBTl9UUlVFOworCXBBbkluZm8tPklkbGVNYXRjaCA9IEFOX1RSVUU7CiAKLSAgICAgICAgcEFuSW5mby0+QWJpbGl0eU1hdGNoQ2ZnID0gMDsKLSAgICAgICAgcEFuSW5mby0+QWJpbGl0eU1hdGNoQ250ID0gMDsKLSAgICAgICAgcEFuSW5mby0+QWJpbGl0eU1hdGNoID0gQU5fRkFMU0U7Ci0gICAgICAgIHBBbkluZm8tPkFja01hdGNoID0gQU5fRkFMU0U7CisJcEFuSW5mby0+QWJpbGl0eU1hdGNoQ2ZnID0gMDsKKwlwQW5JbmZvLT5BYmlsaXR5TWF0Y2hDbnQgPSAwOworCXBBbkluZm8tPkFiaWxpdHlNYXRjaCA9IEFOX0ZBTFNFOworCXBBbkluZm8tPkFja01hdGNoID0gQU5fRkFMU0U7CiAKLSAgICAgICAgUnhDb25maWcgPSAwOworCVJ4Q29uZmlnID0gMDsKICAgICB9CiAKICAgICAvKiBTYXZlIHRoZSBsYXN0IENvbmZpZy4gKi8KQEAgLTE5NSwyMTggKzE5MCwyMTggQEAKICAgICAvKiBBdXRvbmVnIHN0YXRlIG1hY2hpbmUgYXMgZGVmaW5lZCBpbiA4MDIuM3ogc2VjdGlvbiAzNy4zLjEuNS4gKi8KICAgICBzd2l0Y2gocEFuSW5mby0+U3RhdGUpCiAgICAgewotICAgICAgICBjYXNlIEFOX1NUQVRFX1VOS05PV046Ci0gICAgICAgICAgICBpZihwQW5JbmZvLT5tcl9hbl9lbmFibGUgfHwgcEFuSW5mby0+bXJfcmVzdGFydF9hbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwQW5JbmZvLT5DdXJyZW50VGltZV91cyA9IDA7Ci0gICAgICAgICAgICAgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BTl9FTkFCTEU7Ci0gICAgICAgICAgICB9CisJY2FzZSBBTl9TVEFURV9VTktOT1dOOgorCSAgICBpZihwQW5JbmZvLT5tcl9hbl9lbmFibGUgfHwgcEFuSW5mby0+bXJfcmVzdGFydF9hbikKKwkgICAgeworCQlwQW5JbmZvLT5DdXJyZW50VGltZV91cyA9IDA7CisJCXBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfQU5fRU5BQkxFOworCSAgICB9CiAKLSAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4qLworCSAgICAvKiBGYWxsIHRocm91Z2guKi8KIAotICAgICAgICBjYXNlIEFOX1NUQVRFX0FOX0VOQUJMRToKLSAgICAgICAgICAgIHBBbkluZm8tPm1yX2FuX2NvbXBsZXRlID0gQU5fRkFMU0U7Ci0gICAgICAgICAgICBwQW5JbmZvLT5tcl9wYWdlX3J4ID0gQU5fRkFMU0U7CisJY2FzZSBBTl9TVEFURV9BTl9FTkFCTEU6CisJICAgIHBBbkluZm8tPm1yX2FuX2NvbXBsZXRlID0gQU5fRkFMU0U7CisJICAgIHBBbkluZm8tPm1yX3BhZ2VfcnggPSBBTl9GQUxTRTsKIAotICAgICAgICAgICAgaWYocEFuSW5mby0+bXJfYW5fZW5hYmxlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBBbkluZm8tPkxpbmtUaW1lX3VzID0gMDsKLSAgICAgICAgICAgICAgICBwQW5JbmZvLT5BYmlsaXR5TWF0Y2hDZmcgPSAwOwotICAgICAgICAgICAgICAgIHBBbkluZm8tPkFiaWxpdHlNYXRjaENudCA9IDA7Ci0gICAgICAgICAgICAgICAgcEFuSW5mby0+QWJpbGl0eU1hdGNoID0gQU5fRkFMU0U7Ci0gICAgICAgICAgICAgICAgcEFuSW5mby0+SWRsZU1hdGNoID0gQU5fRkFMU0U7Ci0gICAgICAgICAgICAgICAgcEFuSW5mby0+QWNrTWF0Y2ggPSBBTl9GQUxTRTsKKwkgICAgaWYocEFuSW5mby0+bXJfYW5fZW5hYmxlKQorCSAgICB7CisJCXBBbkluZm8tPkxpbmtUaW1lX3VzID0gMDsKKwkJcEFuSW5mby0+QWJpbGl0eU1hdGNoQ2ZnID0gMDsKKwkJcEFuSW5mby0+QWJpbGl0eU1hdGNoQ250ID0gMDsKKwkJcEFuSW5mby0+QWJpbGl0eU1hdGNoID0gQU5fRkFMU0U7CisJCXBBbkluZm8tPklkbGVNYXRjaCA9IEFOX0ZBTFNFOworCQlwQW5JbmZvLT5BY2tNYXRjaCA9IEFOX0ZBTFNFOwogCi0gICAgICAgICAgICAgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BTl9SRVNUQVJUX0lOSVQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9ESVNBQkxFX0xJTktfT0s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKwkJcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BTl9SRVNUQVJUX0lOSVQ7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCXBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfRElTQUJMRV9MSU5LX09LOworCSAgICB9CisJICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgQU5fU1RBVEVfQU5fUkVTVEFSVF9JTklUOgotICAgICAgICAgICAgcEFuSW5mby0+TGlua1RpbWVfdXMgPSBwQW5JbmZvLT5DdXJyZW50VGltZV91czsKLSAgICAgICAgICAgIHBBbkluZm8tPm1yX25wX2xvYWRlZCA9IEFOX0ZBTFNFOworCWNhc2UgQU5fU1RBVEVfQU5fUkVTVEFSVF9JTklUOgorCSAgICBwQW5JbmZvLT5MaW5rVGltZV91cyA9IHBBbkluZm8tPkN1cnJlbnRUaW1lX3VzOworCSAgICBwQW5JbmZvLT5tcl9ucF9sb2FkZWQgPSBBTl9GQUxTRTsKIAotICAgICAgICAgICAgcEFuSW5mby0+VHhDb25maWcuQXNVU0hPUlQgPSAwOwotICAgICAgICAgICAgTU1fQW5UeENvbmZpZyhwQW5JbmZvKTsKKwkgICAgcEFuSW5mby0+VHhDb25maWcuQXNVU0hPUlQgPSAwOworCSAgICBNTV9BblR4Q29uZmlnKHBBbkluZm8pOwogCi0gICAgICAgICAgICBBblJldCA9IEFVVE9ORUdfU1RBVFVTX1RJTUVSX0VOQUJMRUQ7CisJICAgIEFuUmV0ID0gQVVUT05FR19TVEFUVVNfVElNRVJfRU5BQkxFRDsKIAotICAgICAgICAgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BTl9SRVNUQVJUOworCSAgICBwQW5JbmZvLT5TdGF0ZSA9IEFOX1NUQVRFX0FOX1JFU1RBUlQ7CiAKLSAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4qLworCSAgICAvKiBGYWxsIHRocm91Z2guKi8KIAotICAgICAgICBjYXNlIEFOX1NUQVRFX0FOX1JFU1RBUlQ6Ci0gICAgICAgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdGltZSBhbmQgY29tcHV0ZSB0aGUgZGVsdGEgd2l0aCB0aGUgc2F2ZWQgKi8KLSAgICAgICAgICAgIC8qIGxpbmsgdGltZXIuICovCi0gICAgICAgICAgICBEZWx0YV91cyA9IHBBbkluZm8tPkN1cnJlbnRUaW1lX3VzIC0gcEFuSW5mby0+TGlua1RpbWVfdXM7Ci0gICAgICAgICAgICBpZihEZWx0YV91cyA+IEFOX0xJTktfVElNRVJfSU5URVJWQUxfVVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BQklMSVRZX0RFVEVDVF9JTklUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFuUmV0ID0gQVVUT05FR19TVEFUVVNfVElNRVJfRU5BQkxFRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgQU5fU1RBVEVfQU5fUkVTVEFSVDoKKwkgICAgLyogR2V0IHRoZSBjdXJyZW50IHRpbWUgYW5kIGNvbXB1dGUgdGhlIGRlbHRhIHdpdGggdGhlIHNhdmVkICovCisJICAgIC8qIGxpbmsgdGltZXIuICovCisJICAgIERlbHRhX3VzID0gcEFuSW5mby0+Q3VycmVudFRpbWVfdXMgLSBwQW5JbmZvLT5MaW5rVGltZV91czsKKwkgICAgaWYoRGVsdGFfdXMgPiBBTl9MSU5LX1RJTUVSX0lOVEVSVkFMX1VTKQorCSAgICB7CisJCXBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfQUJJTElUWV9ERVRFQ1RfSU5JVDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJQW5SZXQgPSBBVVRPTkVHX1NUQVRVU19USU1FUl9FTkFCTEVEOworCSAgICB9CisJICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgQU5fU1RBVEVfRElTQUJMRV9MSU5LX09LOgotICAgICAgICAgICAgQW5SZXQgPSBBVVRPTkVHX1NUQVRVU19ET05FOwotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBBTl9TVEFURV9ESVNBQkxFX0xJTktfT0s6CisJICAgIEFuUmV0ID0gQVVUT05FR19TVEFUVVNfRE9ORTsKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBBTl9TVEFURV9BQklMSVRZX0RFVEVDVF9JTklUOgotICAgICAgICAgICAgLyogTm90ZTogaW4gdGhlIHN0YXRlIGRpYWdyYW0sIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICovCi0gICAgICAgICAgICAvKiBtcl9hZHZfYWJpbGl0eTwxMj4uICBJcyB0aGlzIHJpZ2h0Py4gKi8KLSAgICAgICAgICAgIHBBbkluZm8tPm1yX3RvZ2dsZV90eCA9IEFOX0ZBTFNFOworCWNhc2UgQU5fU1RBVEVfQUJJTElUWV9ERVRFQ1RfSU5JVDoKKwkgICAgLyogTm90ZTogaW4gdGhlIHN0YXRlIGRpYWdyYW0sIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICovCisJICAgIC8qIG1yX2Fkdl9hYmlsaXR5PDEyPi4gIElzIHRoaXMgcmlnaHQ/LiAqLworCSAgICBwQW5JbmZvLT5tcl90b2dnbGVfdHggPSBBTl9GQUxTRTsKIAotICAgICAgICAgICAgLyogU2VuZCB0aGUgY29uZmlnIGFzIGFkdmVydGlzZWQgaW4gdGhlIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuICovCi0gICAgICAgICAgICBwQW5JbmZvLT5UeENvbmZpZy5Bc1VTSE9SVCA9IDA7Ci0gICAgICAgICAgICBwQW5JbmZvLT5UeENvbmZpZy5ENV9GRCA9IHBBbkluZm8tPm1yX2Fkdl9mdWxsX2R1cGxleDsKLSAgICAgICAgICAgIHBBbkluZm8tPlR4Q29uZmlnLkQ2X0hEID0gcEFuSW5mby0+bXJfYWR2X2hhbGZfZHVwbGV4OwotICAgICAgICAgICAgcEFuSW5mby0+VHhDb25maWcuRDdfUFMxID0gcEFuSW5mby0+bXJfYWR2X3N5bV9wYXVzZTsKLSAgICAgICAgICAgIHBBbkluZm8tPlR4Q29uZmlnLkQ4X1BTMiA9IHBBbkluZm8tPm1yX2Fkdl9hc3ltX3BhdXNlOwotICAgICAgICAgICAgcEFuSW5mby0+VHhDb25maWcuRDEyX1JGMSA9IHBBbkluZm8tPm1yX2Fkdl9yZW1vdGVfZmF1bHQxOwotICAgICAgICAgICAgcEFuSW5mby0+VHhDb25maWcuRDEzX1JGMiA9IHBBbkluZm8tPm1yX2Fkdl9yZW1vdGVfZmF1bHQyOwotICAgICAgICAgICAgcEFuSW5mby0+VHhDb25maWcuRDE1X05QID0gcEFuSW5mby0+bXJfYWR2X25leHRfcGFnZTsKKwkgICAgLyogU2VuZCB0aGUgY29uZmlnIGFzIGFkdmVydGlzZWQgaW4gdGhlIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuICovCisJICAgIHBBbkluZm8tPlR4Q29uZmlnLkFzVVNIT1JUID0gMDsKKwkgICAgcEFuSW5mby0+VHhDb25maWcuRDVfRkQgPSBwQW5JbmZvLT5tcl9hZHZfZnVsbF9kdXBsZXg7CisJICAgIHBBbkluZm8tPlR4Q29uZmlnLkQ2X0hEID0gcEFuSW5mby0+bXJfYWR2X2hhbGZfZHVwbGV4OworCSAgICBwQW5JbmZvLT5UeENvbmZpZy5EN19QUzEgPSBwQW5JbmZvLT5tcl9hZHZfc3ltX3BhdXNlOworCSAgICBwQW5JbmZvLT5UeENvbmZpZy5EOF9QUzIgPSBwQW5JbmZvLT5tcl9hZHZfYXN5bV9wYXVzZTsKKwkgICAgcEFuSW5mby0+VHhDb25maWcuRDEyX1JGMSA9IHBBbkluZm8tPm1yX2Fkdl9yZW1vdGVfZmF1bHQxOworCSAgICBwQW5JbmZvLT5UeENvbmZpZy5EMTNfUkYyID0gcEFuSW5mby0+bXJfYWR2X3JlbW90ZV9mYXVsdDI7CisJICAgIHBBbkluZm8tPlR4Q29uZmlnLkQxNV9OUCA9IHBBbkluZm8tPm1yX2Fkdl9uZXh0X3BhZ2U7CiAKLSAgICAgICAgICAgIE1NX0FuVHhDb25maWcocEFuSW5mbyk7CisJICAgIE1NX0FuVHhDb25maWcocEFuSW5mbyk7CiAKLSAgICAgICAgICAgIHBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfQUJJTElUWV9ERVRFQ1Q7CisJICAgIHBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfQUJJTElUWV9ERVRFQ1Q7CiAKLSAgICAgICAgICAgIGJyZWFrOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIEFOX1NUQVRFX0FCSUxJVFlfREVURUNUOgotICAgICAgICAgICAgaWYocEFuSW5mby0+QWJpbGl0eU1hdGNoID09IEFOX1RSVUUgJiYKLSAgICAgICAgICAgICAgICBwQW5JbmZvLT5SeENvbmZpZy5Bc1VTSE9SVCAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfQUNLX0RFVEVDVF9JTklUOwotICAgICAgICAgICAgfQorCWNhc2UgQU5fU1RBVEVfQUJJTElUWV9ERVRFQ1Q6CisJICAgIGlmKHBBbkluZm8tPkFiaWxpdHlNYXRjaCA9PSBBTl9UUlVFICYmCisJCXBBbkluZm8tPlJ4Q29uZmlnLkFzVVNIT1JUICE9IDApCisJICAgIHsKKwkJcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BQ0tfREVURUNUX0lOSVQ7CisJICAgIH0KIAotICAgICAgICAgICAgYnJlYWs7CisJICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgQU5fU1RBVEVfQUNLX0RFVEVDVF9JTklUOgotICAgICAgICAgICAgcEFuSW5mby0+VHhDb25maWcuRDE0X0FDSyA9IDE7Ci0gICAgICAgICAgICBNTV9BblR4Q29uZmlnKHBBbkluZm8pOworCWNhc2UgQU5fU1RBVEVfQUNLX0RFVEVDVF9JTklUOgorCSAgICBwQW5JbmZvLT5UeENvbmZpZy5EMTRfQUNLID0gMTsKKwkgICAgTU1fQW5UeENvbmZpZyhwQW5JbmZvKTsKIAotICAgICAgICAgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BQ0tfREVURUNUOworCSAgICBwQW5JbmZvLT5TdGF0ZSA9IEFOX1NUQVRFX0FDS19ERVRFQ1Q7CiAKLSAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gKi8KKwkgICAgLyogRmFsbCB0aHJvdWdoLiAqLwogCi0gICAgICAgIGNhc2UgQU5fU1RBVEVfQUNLX0RFVEVDVDoKLSAgICAgICAgICAgIGlmKHBBbkluZm8tPkFja01hdGNoID09IEFOX1RSVUUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoKHBBbkluZm8tPlJ4Q29uZmlnLkFzVVNIT1JUICYgfkFOX0NPTkZJR19BQ0spID09Ci0gICAgICAgICAgICAgICAgICAgIChwQW5JbmZvLT5BYmlsaXR5TWF0Y2hDZmcgJiB+QU5fQ09ORklHX0FDSykpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwQW5JbmZvLT5TdGF0ZSA9IEFOX1NUQVRFX0NPTVBMRVRFX0FDS19JTklUOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwQW5JbmZvLT5TdGF0ZSA9IEFOX1NUQVRFX0FOX0VOQUJMRTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKHBBbkluZm8tPkFiaWxpdHlNYXRjaCA9PSBBTl9UUlVFICYmCi0gICAgICAgICAgICAgICAgcEFuSW5mby0+UnhDb25maWcuQXNVU0hPUlQgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwQW5JbmZvLT5TdGF0ZSA9IEFOX1NUQVRFX0FOX0VOQUJMRTsKLSAgICAgICAgICAgIH0KKwljYXNlIEFOX1NUQVRFX0FDS19ERVRFQ1Q6CisJICAgIGlmKHBBbkluZm8tPkFja01hdGNoID09IEFOX1RSVUUpCisJICAgIHsKKwkJaWYoKHBBbkluZm8tPlJ4Q29uZmlnLkFzVVNIT1JUICYgfkFOX0NPTkZJR19BQ0spID09CisJCSAgICAocEFuSW5mby0+QWJpbGl0eU1hdGNoQ2ZnICYgfkFOX0NPTkZJR19BQ0spKQorCQl7CisJCSAgICBwQW5JbmZvLT5TdGF0ZSA9IEFOX1NUQVRFX0NPTVBMRVRFX0FDS19JTklUOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BTl9FTkFCTEU7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIGlmKHBBbkluZm8tPkFiaWxpdHlNYXRjaCA9PSBBTl9UUlVFICYmCisJCXBBbkluZm8tPlJ4Q29uZmlnLkFzVVNIT1JUID09IDApCisJICAgIHsKKwkJcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BTl9FTkFCTEU7CisJICAgIH0KIAotICAgICAgICAgICAgYnJlYWs7CisJICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgQU5fU1RBVEVfQ09NUExFVEVfQUNLX0lOSVQ6Ci0gICAgICAgICAgICAvKiBNYWtlIHN1cmUgaW52YWxpZCBiaXRzIGFyZSBub3Qgc2V0LiAqLwotICAgICAgICAgICAgaWYocEFuSW5mby0+UnhDb25maWcuYml0cy5EMCB8fCBwQW5JbmZvLT5SeENvbmZpZy5iaXRzLkQxIHx8Ci0gICAgICAgICAgICAgICAgcEFuSW5mby0+UnhDb25maWcuYml0cy5EMiB8fCBwQW5JbmZvLT5SeENvbmZpZy5iaXRzLkQzIHx8Ci0gICAgICAgICAgICAgICAgcEFuSW5mby0+UnhDb25maWcuYml0cy5ENCB8fCBwQW5JbmZvLT5SeENvbmZpZy5iaXRzLkQ5IHx8Ci0gICAgICAgICAgICAgICAgcEFuSW5mby0+UnhDb25maWcuYml0cy5EMTAgfHwgcEFuSW5mby0+UnhDb25maWcuYml0cy5EMTEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQW5SZXQgPSBBVVRPTkVHX1NUQVRVU19GQUlMRUQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisJY2FzZSBBTl9TVEFURV9DT01QTEVURV9BQ0tfSU5JVDoKKwkgICAgLyogTWFrZSBzdXJlIGludmFsaWQgYml0cyBhcmUgbm90IHNldC4gKi8KKwkgICAgaWYocEFuSW5mby0+UnhDb25maWcuYml0cy5EMCB8fCBwQW5JbmZvLT5SeENvbmZpZy5iaXRzLkQxIHx8CisJCXBBbkluZm8tPlJ4Q29uZmlnLmJpdHMuRDIgfHwgcEFuSW5mby0+UnhDb25maWcuYml0cy5EMyB8fAorCQlwQW5JbmZvLT5SeENvbmZpZy5iaXRzLkQ0IHx8IHBBbkluZm8tPlJ4Q29uZmlnLmJpdHMuRDkgfHwKKwkJcEFuSW5mby0+UnhDb25maWcuYml0cy5EMTAgfHwgcEFuSW5mby0+UnhDb25maWcuYml0cy5EMTEpCisJICAgIHsKKwkJQW5SZXQgPSBBVVRPTkVHX1NUQVRVU19GQUlMRUQ7CisJCWJyZWFrOworCSAgICB9CiAKLSAgICAgICAgICAgIC8qIFNldCB1cCB0aGUgbGluayBwYXJ0bmVyIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuICovCi0gICAgICAgICAgICBwQW5JbmZvLT5tcl9scF9hZHZfZnVsbF9kdXBsZXggPSBwQW5JbmZvLT5SeENvbmZpZy5ENV9GRDsKLSAgICAgICAgICAgIHBBbkluZm8tPm1yX2xwX2Fkdl9oYWxmX2R1cGxleCA9IHBBbkluZm8tPlJ4Q29uZmlnLkQ2X0hEOwotICAgICAgICAgICAgcEFuSW5mby0+bXJfbHBfYWR2X3N5bV9wYXVzZSA9IHBBbkluZm8tPlJ4Q29uZmlnLkQ3X1BTMTsKLSAgICAgICAgICAgIHBBbkluZm8tPm1yX2xwX2Fkdl9hc3ltX3BhdXNlID0gcEFuSW5mby0+UnhDb25maWcuRDhfUFMyOwotICAgICAgICAgICAgcEFuSW5mby0+bXJfbHBfYWR2X3JlbW90ZV9mYXVsdDEgPSBwQW5JbmZvLT5SeENvbmZpZy5EMTJfUkYxOwotICAgICAgICAgICAgcEFuSW5mby0+bXJfbHBfYWR2X3JlbW90ZV9mYXVsdDIgPSBwQW5JbmZvLT5SeENvbmZpZy5EMTNfUkYyOwotICAgICAgICAgICAgcEFuSW5mby0+bXJfbHBfYWR2X25leHRfcGFnZSA9IHBBbkluZm8tPlJ4Q29uZmlnLkQxNV9OUDsKKwkgICAgLyogU2V0IHVwIHRoZSBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNlbWVudCByZWdpc3Rlci4gKi8KKwkgICAgcEFuSW5mby0+bXJfbHBfYWR2X2Z1bGxfZHVwbGV4ID0gcEFuSW5mby0+UnhDb25maWcuRDVfRkQ7CisJICAgIHBBbkluZm8tPm1yX2xwX2Fkdl9oYWxmX2R1cGxleCA9IHBBbkluZm8tPlJ4Q29uZmlnLkQ2X0hEOworCSAgICBwQW5JbmZvLT5tcl9scF9hZHZfc3ltX3BhdXNlID0gcEFuSW5mby0+UnhDb25maWcuRDdfUFMxOworCSAgICBwQW5JbmZvLT5tcl9scF9hZHZfYXN5bV9wYXVzZSA9IHBBbkluZm8tPlJ4Q29uZmlnLkQ4X1BTMjsKKwkgICAgcEFuSW5mby0+bXJfbHBfYWR2X3JlbW90ZV9mYXVsdDEgPSBwQW5JbmZvLT5SeENvbmZpZy5EMTJfUkYxOworCSAgICBwQW5JbmZvLT5tcl9scF9hZHZfcmVtb3RlX2ZhdWx0MiA9IHBBbkluZm8tPlJ4Q29uZmlnLkQxM19SRjI7CisJICAgIHBBbkluZm8tPm1yX2xwX2Fkdl9uZXh0X3BhZ2UgPSBwQW5JbmZvLT5SeENvbmZpZy5EMTVfTlA7CiAKLSAgICAgICAgICAgIHBBbkluZm8tPkxpbmtUaW1lX3VzID0gcEFuSW5mby0+Q3VycmVudFRpbWVfdXM7CisJICAgIHBBbkluZm8tPkxpbmtUaW1lX3VzID0gcEFuSW5mby0+Q3VycmVudFRpbWVfdXM7CiAKLSAgICAgICAgICAgIHBBbkluZm8tPm1yX3RvZ2dsZV90eCA9ICFwQW5JbmZvLT5tcl90b2dnbGVfdHg7Ci0gICAgICAgICAgICBwQW5JbmZvLT5tcl90b2dnbGVfcnggPSBwQW5JbmZvLT5SeENvbmZpZy5iaXRzLkQxMTsKLSAgICAgICAgICAgIHBBbkluZm8tPm1yX25wX3J4ID0gcEFuSW5mby0+UnhDb25maWcuRDE1X05QOwotICAgICAgICAgICAgcEFuSW5mby0+bXJfcGFnZV9yeCA9IEFOX1RSVUU7CisJICAgIHBBbkluZm8tPm1yX3RvZ2dsZV90eCA9ICFwQW5JbmZvLT5tcl90b2dnbGVfdHg7CisJICAgIHBBbkluZm8tPm1yX3RvZ2dsZV9yeCA9IHBBbkluZm8tPlJ4Q29uZmlnLmJpdHMuRDExOworCSAgICBwQW5JbmZvLT5tcl9ucF9yeCA9IHBBbkluZm8tPlJ4Q29uZmlnLkQxNV9OUDsKKwkgICAgcEFuSW5mby0+bXJfcGFnZV9yeCA9IEFOX1RSVUU7CiAKLSAgICAgICAgICAgIHBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfQ09NUExFVEVfQUNLOwotICAgICAgICAgICAgQW5SZXQgPSBBVVRPTkVHX1NUQVRVU19USU1FUl9FTkFCTEVEOworCSAgICBwQW5JbmZvLT5TdGF0ZSA9IEFOX1NUQVRFX0NPTVBMRVRFX0FDSzsKKwkgICAgQW5SZXQgPSBBVVRPTkVHX1NUQVRVU19USU1FUl9FTkFCTEVEOwogCi0gICAgICAgICAgICBicmVhazsKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBBTl9TVEFURV9DT01QTEVURV9BQ0s6Ci0gICAgICAgICAgICBpZihwQW5JbmZvLT5BYmlsaXR5TWF0Y2ggPT0gQU5fVFJVRSAmJgotICAgICAgICAgICAgICAgIHBBbkluZm8tPlJ4Q29uZmlnLkFzVVNIT1JUID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BTl9FTkFCTEU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisJY2FzZSBBTl9TVEFURV9DT01QTEVURV9BQ0s6CisJICAgIGlmKHBBbkluZm8tPkFiaWxpdHlNYXRjaCA9PSBBTl9UUlVFICYmCisJCXBBbkluZm8tPlJ4Q29uZmlnLkFzVVNIT1JUID09IDApCisJICAgIHsKKwkJcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9BTl9FTkFCTEU7CisJCWJyZWFrOworCSAgICB9CiAKLSAgICAgICAgICAgIERlbHRhX3VzID0gcEFuSW5mby0+Q3VycmVudFRpbWVfdXMgLSBwQW5JbmZvLT5MaW5rVGltZV91czsKKwkgICAgRGVsdGFfdXMgPSBwQW5JbmZvLT5DdXJyZW50VGltZV91cyAtIHBBbkluZm8tPkxpbmtUaW1lX3VzOwogCi0gICAgICAgICAgICBpZihEZWx0YV91cyA+IEFOX0xJTktfVElNRVJfSU5URVJWQUxfVVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYocEFuSW5mby0+bXJfYWR2X25leHRfcGFnZSA9PSAwIHx8Ci0gICAgICAgICAgICAgICAgICAgIHBBbkluZm8tPm1yX2xwX2Fkdl9uZXh0X3BhZ2UgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfSURMRV9ERVRFQ1RfSU5JVDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYocEFuSW5mby0+VHhDb25maWcuYml0cy5EMTUgPT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgcEFuSW5mby0+bXJfbnBfcnggPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9JRExFX0RFVEVDVF9JTklUOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgQW5SZXQgPSBBVVRPTkVHX1NUQVRVU19GQUlMRUQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJICAgIGlmKERlbHRhX3VzID4gQU5fTElOS19USU1FUl9JTlRFUlZBTF9VUykKKwkgICAgeworCQlpZihwQW5JbmZvLT5tcl9hZHZfbmV4dF9wYWdlID09IDAgfHwKKwkJICAgIHBBbkluZm8tPm1yX2xwX2Fkdl9uZXh0X3BhZ2UgPT0gMCkKKwkJeworCQkgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9JRExFX0RFVEVDVF9JTklUOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgaWYocEFuSW5mby0+VHhDb25maWcuYml0cy5EMTUgPT0gMCAmJgorCQkJcEFuSW5mby0+bXJfbnBfcnggPT0gMCkKKwkJICAgIHsKKwkJCXBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfSURMRV9ERVRFQ1RfSU5JVDsKKwkJICAgIH0KKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCUFuUmV0ID0gQVVUT05FR19TVEFUVVNfRkFJTEVEOworCQkgICAgfQorCQl9CisJICAgIH0KIAotICAgICAgICAgICAgYnJlYWs7CisJICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgQU5fU1RBVEVfSURMRV9ERVRFQ1RfSU5JVDoKLSAgICAgICAgICAgIHBBbkluZm8tPkxpbmtUaW1lX3VzID0gcEFuSW5mby0+Q3VycmVudFRpbWVfdXM7CisJY2FzZSBBTl9TVEFURV9JRExFX0RFVEVDVF9JTklUOgorCSAgICBwQW5JbmZvLT5MaW5rVGltZV91cyA9IHBBbkluZm8tPkN1cnJlbnRUaW1lX3VzOwogCi0gICAgICAgICAgICBNTV9BblR4SWRsZShwQW5JbmZvKTsKKwkgICAgTU1fQW5UeElkbGUocEFuSW5mbyk7CiAKLSAgICAgICAgICAgIHBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfSURMRV9ERVRFQ1Q7CisJICAgIHBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfSURMRV9ERVRFQ1Q7CiAKLSAgICAgICAgICAgIEFuUmV0ID0gQVVUT05FR19TVEFUVVNfVElNRVJfRU5BQkxFRDsKKwkgICAgQW5SZXQgPSBBVVRPTkVHX1NUQVRVU19USU1FUl9FTkFCTEVEOwogCi0gICAgICAgICAgICBicmVhazsKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBBTl9TVEFURV9JRExFX0RFVEVDVDoKLSAgICAgICAgICAgIGlmKHBBbkluZm8tPkFiaWxpdHlNYXRjaCA9PSBBTl9UUlVFICYmCi0gICAgICAgICAgICAgICAgcEFuSW5mby0+UnhDb25maWcuQXNVU0hPUlQgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwQW5JbmZvLT5TdGF0ZSA9IEFOX1NUQVRFX0FOX0VOQUJMRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKwljYXNlIEFOX1NUQVRFX0lETEVfREVURUNUOgorCSAgICBpZihwQW5JbmZvLT5BYmlsaXR5TWF0Y2ggPT0gQU5fVFJVRSAmJgorCQlwQW5JbmZvLT5SeENvbmZpZy5Bc1VTSE9SVCA9PSAwKQorCSAgICB7CisJCXBBbkluZm8tPlN0YXRlID0gQU5fU1RBVEVfQU5fRU5BQkxFOworCQlicmVhazsKKwkgICAgfQogCi0gICAgICAgICAgICBEZWx0YV91cyA9IHBBbkluZm8tPkN1cnJlbnRUaW1lX3VzIC0gcEFuSW5mby0+TGlua1RpbWVfdXM7Ci0gICAgICAgICAgICBpZihEZWx0YV91cyA+IEFOX0xJTktfVElNRVJfSU5URVJWQUxfVVMpCi0gICAgICAgICAgICB7CisJICAgIERlbHRhX3VzID0gcEFuSW5mby0+Q3VycmVudFRpbWVfdXMgLSBwQW5JbmZvLT5MaW5rVGltZV91czsKKwkgICAgaWYoRGVsdGFfdXMgPiBBTl9MSU5LX1RJTUVSX0lOVEVSVkFMX1VTKQorCSAgICB7CiAjaWYgMAogLyogICAgICAgICAgICAgICAgaWYocEFuSW5mby0+SWRsZU1hdGNoID09IEFOX1RSVUUpICovCiAvKiAgICAgICAgICAgICAgICB7ICovCiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9MSU5LX09LOworCQkgICAgcEFuSW5mby0+U3RhdGUgPSBBTl9TVEFURV9MSU5LX09LOwogI2lmIDAKIC8qICAgICAgICAgICAgICAgIH0gKi8KIC8qICAgICAgICAgICAgICAgIGVsc2UgKi8KQEAgLTQxNSwyNiArNDEwLDI2IEBACiAvKiAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICovCiAvKiAgICAgICAgICAgICAgICB9ICovCiAjZW5kaWYKLSAgICAgICAgICAgIH0KKwkgICAgfQogCi0gICAgICAgICAgICBicmVhazsKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBBTl9TVEFURV9MSU5LX09LOgotICAgICAgICAgICAgcEFuSW5mby0+bXJfYW5fY29tcGxldGUgPSBBTl9UUlVFOwotICAgICAgICAgICAgcEFuSW5mby0+bXJfbGlua19vayA9IEFOX1RSVUU7Ci0gICAgICAgICAgICBBblJldCA9IEFVVE9ORUdfU1RBVFVTX0RPTkU7CisJY2FzZSBBTl9TVEFURV9MSU5LX09LOgorCSAgICBwQW5JbmZvLT5tcl9hbl9jb21wbGV0ZSA9IEFOX1RSVUU7CisJICAgIHBBbkluZm8tPm1yX2xpbmtfb2sgPSBBTl9UUlVFOworCSAgICBBblJldCA9IEFVVE9ORUdfU1RBVFVTX0RPTkU7CiAKLSAgICAgICAgICAgIGJyZWFrOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIEFOX1NUQVRFX05FWFRfUEFHRV9XQUlUX0lOSVQ6Ci0gICAgICAgICAgICBicmVhazsKKwljYXNlIEFOX1NUQVRFX05FWFRfUEFHRV9XQUlUX0lOSVQ6CisJICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgQU5fU1RBVEVfTkVYVF9QQUdFX1dBSVQ6Ci0gICAgICAgICAgICBicmVhazsKKwljYXNlIEFOX1NUQVRFX05FWFRfUEFHRV9XQUlUOgorCSAgICBicmVhazsKIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQW5SZXQgPSBBVVRPTkVHX1NUQVRVU19GQUlMRUQ7Ci0gICAgICAgICAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBBblJldCA9IEFVVE9ORUdfU1RBVFVTX0ZBSUxFRDsKKwkgICAgYnJlYWs7CiAgICAgfQogCiAgICAgcmV0dXJuIEFuUmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY201NzB4X2F1dG9uZWcuaCBiL2RyaXZlcnMvYmNtNTcweF9hdXRvbmVnLmgKaW5kZXggOTVmY2MwNy4uNzgzMDk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iY201NzB4X2F1dG9uZWcuaAorKysgYi9kcml2ZXJzL2JjbTU3MHhfYXV0b25lZy5oCkBAIC0xNiw3ICsxNiw2IEBACiAjZGVmaW5lIEFVVE9ORUdfSAogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIENvbnN0YW50cy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yOCw3ICsyNyw2IEBACiAjZGVmaW5lIEFOX0ZBTFNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBNYWluIGRhdGEgc3RydWN0dXJlIGZvciBrZWVwaW5nIHRyYWNrIG9mIDgwMi4zeiBhdXRvLW5lZ290YXRpb24gc3RhdGUgKi8KIC8qIHZhcmlhYmxlcyBhcyBzaG93biBpbiBGaWd1cmUgMzctNiBvZiB0aGUgSUVFRSA4MDIuM3ogc3BlY2lmaWNhdGlvbi4gKi8KQEAgLTczLDExMiArNzEsMTEyIEBACiAgICAgLyogVHggY29uZmlnIGRhdGEgKi8KICAgICB1bmlvbgogICAgIHsKLSAgICAgICAgLyogVGhlIFR4Q29uZmlnIHJlZ2lzdGVyIGlzIGFycmFuZ2VkIGFzIGZvbGxvd3M6ICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiBNU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExTQiAgKi8KLSAgICAgICAgLyogKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsgICovCi0gICAgICAgIC8qIHwgRDd8IEQ2fCBENXwgRDR8IEQzfCBEMnwgRDF8IEQwfEQxNXxEMTR8RDEzfEQxMnxEMTF8RDEwfCBEOXwgRDh8ICAqLwotICAgICAgICAvKiArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKyAgKi8KLSAgICAgICAgc3RydWN0Ci0gICAgICAgIHsKKwkvKiBUaGUgVHhDb25maWcgcmVnaXN0ZXIgaXMgYXJyYW5nZWQgYXMgZm9sbG93czogICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBNU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExTQiAgKi8KKwkvKiArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKyAgKi8KKwkvKiB8IEQ3fCBENnwgRDV8IEQ0fCBEM3wgRDJ8IEQxfCBEMHxEMTV8RDE0fEQxM3xEMTJ8RDExfEQxMHwgRDl8IEQ4fCAgKi8KKwkvKiArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKyAgKi8KKwlzdHJ1Y3QKKwl7CiAjaWZkZWYgQklHX0VORElBTl9IT1NUCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDc6MTsgICAgICAgIC8qIFBTMSAqLwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQ2OjE7ICAgICAgICAvKiBIRCAqLwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQ1OjE7ICAgICAgICAvKiBGRCAqLwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQ0OjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDM6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMjoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQxOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDA6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTU6MTsgICAgICAgLyogTlAgKi8KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTQ6MTsgICAgICAgLyogQUNLICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDEzOjE7ICAgICAgIC8qIFJGMiAqLwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQxMjoxOyAgICAgICAvKiBSRjEgKi8KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTE6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTA6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEOToxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQ4OjE7ICAgICAgICAvKiBQUzIgKi8KKwkgICAgdW5zaWduZWQgaW50IEQ3OjE7ICAgICAgICAvKiBQUzEgKi8KKwkgICAgdW5zaWduZWQgaW50IEQ2OjE7ICAgICAgICAvKiBIRCAqLworCSAgICB1bnNpZ25lZCBpbnQgRDU6MTsgICAgICAgIC8qIEZEICovCisJICAgIHVuc2lnbmVkIGludCBENDoxOworCSAgICB1bnNpZ25lZCBpbnQgRDM6MTsKKwkgICAgdW5zaWduZWQgaW50IEQyOjE7CisJICAgIHVuc2lnbmVkIGludCBEMToxOworCSAgICB1bnNpZ25lZCBpbnQgRDA6MTsKKwkgICAgdW5zaWduZWQgaW50IEQxNToxOyAgICAgICAvKiBOUCAqLworCSAgICB1bnNpZ25lZCBpbnQgRDE0OjE7ICAgICAgIC8qIEFDSyAqLworCSAgICB1bnNpZ25lZCBpbnQgRDEzOjE7ICAgICAgIC8qIFJGMiAqLworCSAgICB1bnNpZ25lZCBpbnQgRDEyOjE7ICAgICAgIC8qIFJGMSAqLworCSAgICB1bnNpZ25lZCBpbnQgRDExOjE7CisJICAgIHVuc2lnbmVkIGludCBEMTA6MTsKKwkgICAgdW5zaWduZWQgaW50IEQ5OjE7CisJICAgIHVuc2lnbmVkIGludCBEODoxOyAgICAgICAgLyogUFMyICovCiAjZWxzZSAvKiBCSUdfRU5ESUFOX0hPU1QgKi8KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEODoxOyAgICAgICAgLyogUFMyICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDk6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTA6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTE6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTI6MTsgICAgICAgLyogUkYxICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDEzOjE7ICAgICAgIC8qIFJGMiAqLwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQxNDoxOyAgICAgICAvKiBBQ0sgKi8KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTU6MTsgICAgICAgLyogTlAgKi8KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMDoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQxOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDI6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMzoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQ0OjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDU6MTsgICAgICAgIC8qIEZEICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDY6MTsgICAgICAgIC8qIEhEICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDc6MTsgICAgICAgIC8qIFBTMSAqLworCSAgICB1bnNpZ25lZCBpbnQgRDg6MTsgICAgICAgIC8qIFBTMiAqLworCSAgICB1bnNpZ25lZCBpbnQgRDk6MTsKKwkgICAgdW5zaWduZWQgaW50IEQxMDoxOworCSAgICB1bnNpZ25lZCBpbnQgRDExOjE7CisJICAgIHVuc2lnbmVkIGludCBEMTI6MTsgICAgICAgLyogUkYxICovCisJICAgIHVuc2lnbmVkIGludCBEMTM6MTsgICAgICAgLyogUkYyICovCisJICAgIHVuc2lnbmVkIGludCBEMTQ6MTsgICAgICAgLyogQUNLICovCisJICAgIHVuc2lnbmVkIGludCBEMTU6MTsgICAgICAgLyogTlAgKi8KKwkgICAgdW5zaWduZWQgaW50IEQwOjE7CisJICAgIHVuc2lnbmVkIGludCBEMToxOworCSAgICB1bnNpZ25lZCBpbnQgRDI6MTsKKwkgICAgdW5zaWduZWQgaW50IEQzOjE7CisJICAgIHVuc2lnbmVkIGludCBENDoxOworCSAgICB1bnNpZ25lZCBpbnQgRDU6MTsgICAgICAgIC8qIEZEICovCisJICAgIHVuc2lnbmVkIGludCBENjoxOyAgICAgICAgLyogSEQgKi8KKwkgICAgdW5zaWduZWQgaW50IEQ3OjE7ICAgICAgICAvKiBQUzEgKi8KICNlbmRpZgotICAgICAgICB9IGJpdHM7CisJfSBiaXRzOwogCi0gICAgICAgIHVuc2lnbmVkIHNob3J0IEFzVVNIT1JUOworCXVuc2lnbmVkIHNob3J0IEFzVVNIT1JUOwogCi0gICAgICAgICNkZWZpbmUgRDhfUFMyICAgICAgICAgICAgICAgICAgICAgIGJpdHMuRDgKLSAgICAgICAgI2RlZmluZSBEMTJfUkYxICAgICAgICAgICAgICAgICAgICAgYml0cy5EMTIKLSAgICAgICAgI2RlZmluZSBEMTNfUkYyICAgICAgICAgICAgICAgICAgICAgYml0cy5EMTMKLSAgICAgICAgI2RlZmluZSBEMTRfQUNLICAgICAgICAgICAgICAgICAgICAgYml0cy5EMTQKLSAgICAgICAgI2RlZmluZSBEMTVfTlAgICAgICAgICAgICAgICAgICAgICAgYml0cy5EMTUKLSAgICAgICAgI2RlZmluZSBENV9GRCAgICAgICAgICAgICAgICAgICAgICAgYml0cy5ENQotICAgICAgICAjZGVmaW5lIEQ2X0hEICAgICAgICAgICAgICAgICAgICAgICBiaXRzLkQ2Ci0gICAgICAgICNkZWZpbmUgRDdfUFMxICAgICAgICAgICAgICAgICAgICAgIGJpdHMuRDcKKwkjZGVmaW5lIEQ4X1BTMiAgICAgICAgICAgICAgICAgICAgICBiaXRzLkQ4CisJI2RlZmluZSBEMTJfUkYxICAgICAgICAgICAgICAgICAgICAgYml0cy5EMTIKKwkjZGVmaW5lIEQxM19SRjIgICAgICAgICAgICAgICAgICAgICBiaXRzLkQxMworCSNkZWZpbmUgRDE0X0FDSyAgICAgICAgICAgICAgICAgICAgIGJpdHMuRDE0CisJI2RlZmluZSBEMTVfTlAgICAgICAgICAgICAgICAgICAgICAgYml0cy5EMTUKKwkjZGVmaW5lIEQ1X0ZEICAgICAgICAgICAgICAgICAgICAgICBiaXRzLkQ1CisJI2RlZmluZSBENl9IRCAgICAgICAgICAgICAgICAgICAgICAgYml0cy5ENgorCSNkZWZpbmUgRDdfUFMxICAgICAgICAgICAgICAgICAgICAgIGJpdHMuRDcKICAgICB9IFR4Q29uZmlnOwogCiAgICAgLyogUnggY29uZmlnIGRhdGEgKi8KICAgICB1bmlvbgogICAgIHsKLSAgICAgICAgLyogVGhlIFJ4Q29uZmlnIHJlZ2lzdGVyIGlzIGFycmFuZ2VkIGFzIGZvbGxvd3M6ICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAvKiBNU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExTQiAgKi8KLSAgICAgICAgLyogKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsgICovCi0gICAgICAgIC8qIHwgRDd8IEQ2fCBENXwgRDR8IEQzfCBEMnwgRDF8IEQwfEQxNXxEMTR8RDEzfEQxMnxEMTF8RDEwfCBEOXwgRDh8ICAqLwotICAgICAgICAvKiArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKyAgKi8KLSAgICAgICAgc3RydWN0Ci0gICAgICAgIHsKKwkvKiBUaGUgUnhDb25maWcgcmVnaXN0ZXIgaXMgYXJyYW5nZWQgYXMgZm9sbG93czogICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBNU0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExTQiAgKi8KKwkvKiArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKyAgKi8KKwkvKiB8IEQ3fCBENnwgRDV8IEQ0fCBEM3wgRDJ8IEQxfCBEMHxEMTV8RDE0fEQxM3xEMTJ8RDExfEQxMHwgRDl8IEQ4fCAgKi8KKwkvKiArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKyAgKi8KKwlzdHJ1Y3QKKwl7CiAjaWZkZWYgQklHX0VORElBTl9IT1NUCiAJICAgIHVuc2lnbmVkIGludCBENzoxOyAgICAgICAgLyogUFMxICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDY6MTsgICAgICAgIC8qIEhEICovCisJICAgIHVuc2lnbmVkIGludCBENjoxOyAgICAgICAgLyogSEQgKi8KIAkgICAgdW5zaWduZWQgaW50IEQ1OjE7ICAgICAgICAvKiBGRCAqLwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQ0OjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDM6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMjoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQxOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDA6MTsKLSAgCSAgICB1bnNpZ25lZCBpbnQgRDE1OjE7ICAgICAgIC8qIE5QICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDE0OjE7ICAgICAgIC8qIEFDSyAqLwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQxMzoxOyAgICAgICAvKiBSRjIgKi8KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTI6MTsgICAgICAgLyogUkYxICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDExOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDEwOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDk6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEODoxOyAgICAgICAgLyogUFMyICovCisJICAgIHVuc2lnbmVkIGludCBENDoxOworCSAgICB1bnNpZ25lZCBpbnQgRDM6MTsKKwkgICAgdW5zaWduZWQgaW50IEQyOjE7CisJICAgIHVuc2lnbmVkIGludCBEMToxOworCSAgICB1bnNpZ25lZCBpbnQgRDA6MTsKKwkgICAgdW5zaWduZWQgaW50IEQxNToxOyAgICAgICAvKiBOUCAqLworCSAgICB1bnNpZ25lZCBpbnQgRDE0OjE7ICAgICAgIC8qIEFDSyAqLworCSAgICB1bnNpZ25lZCBpbnQgRDEzOjE7ICAgICAgIC8qIFJGMiAqLworCSAgICB1bnNpZ25lZCBpbnQgRDEyOjE7ICAgICAgIC8qIFJGMSAqLworCSAgICB1bnNpZ25lZCBpbnQgRDExOjE7CisJICAgIHVuc2lnbmVkIGludCBEMTA6MTsKKwkgICAgdW5zaWduZWQgaW50IEQ5OjE7CisJICAgIHVuc2lnbmVkIGludCBEODoxOyAgICAgICAgLyogUFMyICovCiAjZWxzZSAvKiBCSUdfRU5ESUFOX0hPU1QgKi8KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEODoxOyAgICAgICAgLyogUFMyICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDk6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTA6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTE6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTI6MTsgICAgICAgLyogUkYxICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDEzOjE7ICAgICAgIC8qIFJGMiAqLwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQxNDoxOyAgICAgICAvKiBBQ0sgKi8KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMTU6MTsgICAgICAgLyogTlAgKi8KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMDoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQxOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDI6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBEMzoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IEQ0OjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDU6MTsgICAgICAgIC8qIEZEICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDY6MTsgICAgICAgIC8qIEhEICovCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgRDc6MTsgICAgICAgIC8qIFBTMSAqLworCSAgICB1bnNpZ25lZCBpbnQgRDg6MTsgICAgICAgIC8qIFBTMiAqLworCSAgICB1bnNpZ25lZCBpbnQgRDk6MTsKKwkgICAgdW5zaWduZWQgaW50IEQxMDoxOworCSAgICB1bnNpZ25lZCBpbnQgRDExOjE7CisJICAgIHVuc2lnbmVkIGludCBEMTI6MTsgICAgICAgLyogUkYxICovCisJICAgIHVuc2lnbmVkIGludCBEMTM6MTsgICAgICAgLyogUkYyICovCisJICAgIHVuc2lnbmVkIGludCBEMTQ6MTsgICAgICAgLyogQUNLICovCisJICAgIHVuc2lnbmVkIGludCBEMTU6MTsgICAgICAgLyogTlAgKi8KKwkgICAgdW5zaWduZWQgaW50IEQwOjE7CisJICAgIHVuc2lnbmVkIGludCBEMToxOworCSAgICB1bnNpZ25lZCBpbnQgRDI6MTsKKwkgICAgdW5zaWduZWQgaW50IEQzOjE7CisJICAgIHVuc2lnbmVkIGludCBENDoxOworCSAgICB1bnNpZ25lZCBpbnQgRDU6MTsgICAgICAgIC8qIEZEICovCisJICAgIHVuc2lnbmVkIGludCBENjoxOyAgICAgICAgLyogSEQgKi8KKwkgICAgdW5zaWduZWQgaW50IEQ3OjE7ICAgICAgICAvKiBQUzEgKi8KICNlbmRpZgotICAgICAgICB9IGJpdHM7CisJfSBiaXRzOwogCi0gICAgICAgIHVuc2lnbmVkIHNob3J0IEFzVVNIT1JUOworCXVuc2lnbmVkIHNob3J0IEFzVVNIT1JUOwogICAgIH0gUnhDb25maWc7CiAKICAgICAjZGVmaW5lIEFOX0NPTkZJR19OUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAKQEAgLTE5NiwxNzcgKzE5NCwxNzcgQEAKICAgICAvKiBDb250cm9sIHJlZ2lzdGVyLiAqLwogICAgIHVuaW9uCiAgICAgewotICAgICAgICBzdHJ1Y3QKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGFuX2VuYWJsZToxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGxvb3BiYWNrOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVzZXQ6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXN0YXJ0X2FuOjE7Ci0gICAgICAgIH0gYml0czsKKwlzdHJ1Y3QKKwl7CisJICAgIHVuc2lnbmVkIGludCBhbl9lbmFibGU6MTsKKwkgICAgdW5zaWduZWQgaW50IGxvb3BiYWNrOjE7CisJICAgIHVuc2lnbmVkIGludCByZXNldDoxOworCSAgICB1bnNpZ25lZCBpbnQgcmVzdGFydF9hbjoxOworCX0gYml0czsKIAotICAgICAgICB1bnNpZ25lZCBzaG9ydCBBc1VTSE9SVDsKKwl1bnNpZ25lZCBzaG9ydCBBc1VTSE9SVDsKIAotICAgICAgICAjZGVmaW5lIG1yX2FuX2VuYWJsZSAgICAgICAgICAgICAgICBNcjAuYml0cy5hbl9lbmFibGUKLSAgICAgICAgI2RlZmluZSBtcl9sb29wYmFjayAgICAgICAgICAgICAgICAgTXIwLmJpdHMubG9vcGJhY2sKLSAgICAgICAgI2RlZmluZSBtcl9tYWluX3Jlc2V0ICAgICAgICAgICAgICAgTXIwLmJpdHMucmVzZXQKLSAgICAgICAgI2RlZmluZSBtcl9yZXN0YXJ0X2FuICAgICAgICAgICAgICAgTXIwLmJpdHMucmVzdGFydF9hbgorCSNkZWZpbmUgbXJfYW5fZW5hYmxlICAgICAgICAgICAgICAgIE1yMC5iaXRzLmFuX2VuYWJsZQorCSNkZWZpbmUgbXJfbG9vcGJhY2sgICAgICAgICAgICAgICAgIE1yMC5iaXRzLmxvb3BiYWNrCisJI2RlZmluZSBtcl9tYWluX3Jlc2V0ICAgICAgICAgICAgICAgTXIwLmJpdHMucmVzZXQKKwkjZGVmaW5lIG1yX3Jlc3RhcnRfYW4gICAgICAgICAgICAgICBNcjAuYml0cy5yZXN0YXJ0X2FuCiAgICAgfSBNcjA7CiAKICAgICAvKiBTdGF0dXMgcmVnaXN0ZXIuICovCiAgICAgdW5pb24KICAgICB7Ci0gICAgICAgIHN0cnVjdAotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgYW5fY29tcGxldGU6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5rX29rOjE7Ci0gICAgICAgIH0gYml0czsKKwlzdHJ1Y3QKKwl7CisJICAgIHVuc2lnbmVkIGludCBhbl9jb21wbGV0ZToxOworCSAgICB1bnNpZ25lZCBpbnQgbGlua19vazoxOworCX0gYml0czsKIAotICAgICAgICB1bnNpZ25lZCBzaG9ydCBBc1VTSE9SVDsKKwl1bnNpZ25lZCBzaG9ydCBBc1VTSE9SVDsKIAotICAgICAgICAjZGVmaW5lIG1yX2FuX2NvbXBsZXRlICAgICAgICAgICAgICBNcjEuYml0cy5hbl9jb21wbGV0ZQotICAgICAgICAjZGVmaW5lIG1yX2xpbmtfb2sgICAgICAgICAgICAgICAgICBNcjEuYml0cy5saW5rX29rCisJI2RlZmluZSBtcl9hbl9jb21wbGV0ZSAgICAgICAgICAgICAgTXIxLmJpdHMuYW5fY29tcGxldGUKKwkjZGVmaW5lIG1yX2xpbmtfb2sgICAgICAgICAgICAgICAgICBNcjEuYml0cy5saW5rX29rCiAgICAgfSBNcjE7CiAKICAgICAvKiBBZHZlcnRpc2VtZW50IHJlZ2lzdGVyLiAqLwogICAgIHVuaW9uCiAgICAgewotICAgICAgICBzdHJ1Y3QKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlc2VydmVkXzQ6NTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBmdWxsX2R1cGxleDoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGhhbGZfZHVwbGV4OjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3ltX3BhdXNlOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXN5bV9wYXVzZToxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlc2VydmVkXzExOjM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVtb3RlX2ZhdWx0MToxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlbW90ZV9mYXVsdDI6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZF8xNDoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IG5leHRfcGFnZToxOwotICAgICAgICB9IGJpdHM7CisJc3RydWN0CisJeworCSAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRfNDo1OworCSAgICB1bnNpZ25lZCBpbnQgZnVsbF9kdXBsZXg6MTsKKwkgICAgdW5zaWduZWQgaW50IGhhbGZfZHVwbGV4OjE7CisJICAgIHVuc2lnbmVkIGludCBzeW1fcGF1c2U6MTsKKwkgICAgdW5zaWduZWQgaW50IGFzeW1fcGF1c2U6MTsKKwkgICAgdW5zaWduZWQgaW50IHJlc2VydmVkXzExOjM7CisJICAgIHVuc2lnbmVkIGludCByZW1vdGVfZmF1bHQxOjE7CisJICAgIHVuc2lnbmVkIGludCByZW1vdGVfZmF1bHQyOjE7CisJICAgIHVuc2lnbmVkIGludCByZXNlcnZlZF8xNDoxOworCSAgICB1bnNpZ25lZCBpbnQgbmV4dF9wYWdlOjE7CisJfSBiaXRzOwogCi0gICAgICAgIHVuc2lnbmVkIHNob3J0IEFzVVNIT1JUOworCXVuc2lnbmVkIHNob3J0IEFzVVNIT1JUOwogCi0gICAgICAgICNkZWZpbmUgbXJfYWR2X2Z1bGxfZHVwbGV4ICAgICAgICAgIE1yNC5iaXRzLmZ1bGxfZHVwbGV4Ci0gICAgICAgICNkZWZpbmUgbXJfYWR2X2hhbGZfZHVwbGV4ICAgICAgICAgIE1yNC5iaXRzLmhhbGZfZHVwbGV4Ci0gICAgICAgICNkZWZpbmUgbXJfYWR2X3N5bV9wYXVzZSAgICAgICAgICAgIE1yNC5iaXRzLnN5bV9wYXVzZQotICAgICAgICAjZGVmaW5lIG1yX2Fkdl9hc3ltX3BhdXNlICAgICAgICAgICBNcjQuYml0cy5hc3ltX3BhdXNlCi0gICAgICAgICNkZWZpbmUgbXJfYWR2X3JlbW90ZV9mYXVsdDEgICAgICAgIE1yNC5iaXRzLnJlbW90ZV9mYXVsdDEKLSAgICAgICAgI2RlZmluZSBtcl9hZHZfcmVtb3RlX2ZhdWx0MiAgICAgICAgTXI0LmJpdHMucmVtb3RlX2ZhdWx0MgotICAgICAgICAjZGVmaW5lIG1yX2Fkdl9uZXh0X3BhZ2UgICAgICAgICAgICBNcjQuYml0cy5uZXh0X3BhZ2UKKwkjZGVmaW5lIG1yX2Fkdl9mdWxsX2R1cGxleCAgICAgICAgICBNcjQuYml0cy5mdWxsX2R1cGxleAorCSNkZWZpbmUgbXJfYWR2X2hhbGZfZHVwbGV4ICAgICAgICAgIE1yNC5iaXRzLmhhbGZfZHVwbGV4CisJI2RlZmluZSBtcl9hZHZfc3ltX3BhdXNlICAgICAgICAgICAgTXI0LmJpdHMuc3ltX3BhdXNlCisJI2RlZmluZSBtcl9hZHZfYXN5bV9wYXVzZSAgICAgICAgICAgTXI0LmJpdHMuYXN5bV9wYXVzZQorCSNkZWZpbmUgbXJfYWR2X3JlbW90ZV9mYXVsdDEgICAgICAgIE1yNC5iaXRzLnJlbW90ZV9mYXVsdDEKKwkjZGVmaW5lIG1yX2Fkdl9yZW1vdGVfZmF1bHQyICAgICAgICBNcjQuYml0cy5yZW1vdGVfZmF1bHQyCisJI2RlZmluZSBtcl9hZHZfbmV4dF9wYWdlICAgICAgICAgICAgTXI0LmJpdHMubmV4dF9wYWdlCiAgICAgfSBNcjQ7CiAKICAgICAvKiBMaW5rIHBhcnRuZXIgYWR2ZXJ0aXNlbWVudCByZWdpc3Rlci4gKi8KICAgICB1bmlvbgogICAgIHsKLSAgICAgICAgc3RydWN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZF80OjU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbHBfZnVsbF9kdXBsZXg6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBscF9oYWxmX2R1cGxleDoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGxwX3N5bV9wYXVzZToxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGxwX2FzeW1fcGF1c2U6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZF8xMTozOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGxwX3JlbW90ZV9mYXVsdDE6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBscF9yZW1vdGVfZmF1bHQyOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbHBfYWNrOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbHBfbmV4dF9wYWdlOjE7Ci0gICAgICAgIH0gYml0czsKKwlzdHJ1Y3QKKwl7CisJICAgIHVuc2lnbmVkIGludCByZXNlcnZlZF80OjU7CisJICAgIHVuc2lnbmVkIGludCBscF9mdWxsX2R1cGxleDoxOworCSAgICB1bnNpZ25lZCBpbnQgbHBfaGFsZl9kdXBsZXg6MTsKKwkgICAgdW5zaWduZWQgaW50IGxwX3N5bV9wYXVzZToxOworCSAgICB1bnNpZ25lZCBpbnQgbHBfYXN5bV9wYXVzZToxOworCSAgICB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRfMTE6MzsKKwkgICAgdW5zaWduZWQgaW50IGxwX3JlbW90ZV9mYXVsdDE6MTsKKwkgICAgdW5zaWduZWQgaW50IGxwX3JlbW90ZV9mYXVsdDI6MTsKKwkgICAgdW5zaWduZWQgaW50IGxwX2FjazoxOworCSAgICB1bnNpZ25lZCBpbnQgbHBfbmV4dF9wYWdlOjE7CisJfSBiaXRzOwogCi0gICAgICAgIHVuc2lnbmVkIHNob3J0IEFzVVNIT1JUOworCXVuc2lnbmVkIHNob3J0IEFzVVNIT1JUOwogCi0gICAgICAgICNkZWZpbmUgbXJfbHBfYWR2X2Z1bGxfZHVwbGV4ICAgICAgIE1yNS5iaXRzLmxwX2Z1bGxfZHVwbGV4Ci0gICAgICAgICNkZWZpbmUgbXJfbHBfYWR2X2hhbGZfZHVwbGV4ICAgICAgIE1yNS5iaXRzLmxwX2hhbGZfZHVwbGV4Ci0gICAgICAgICNkZWZpbmUgbXJfbHBfYWR2X3N5bV9wYXVzZSAgICAgICAgIE1yNS5iaXRzLmxwX3N5bV9wYXVzZQotICAgICAgICAjZGVmaW5lIG1yX2xwX2Fkdl9hc3ltX3BhdXNlICAgICAgICBNcjUuYml0cy5scF9hc3ltX3BhdXNlCi0gICAgICAgICNkZWZpbmUgbXJfbHBfYWR2X3JlbW90ZV9mYXVsdDEgICAgIE1yNS5iaXRzLmxwX3JlbW90ZV9mYXVsdDEKLSAgICAgICAgI2RlZmluZSBtcl9scF9hZHZfcmVtb3RlX2ZhdWx0MiAgICAgTXI1LmJpdHMubHBfcmVtb3RlX2ZhdWx0MgotICAgICAgICAjZGVmaW5lIG1yX2xwX2Fkdl9uZXh0X3BhZ2UgICAgICAgICBNcjUuYml0cy5scF9uZXh0X3BhZ2UKKwkjZGVmaW5lIG1yX2xwX2Fkdl9mdWxsX2R1cGxleCAgICAgICBNcjUuYml0cy5scF9mdWxsX2R1cGxleAorCSNkZWZpbmUgbXJfbHBfYWR2X2hhbGZfZHVwbGV4ICAgICAgIE1yNS5iaXRzLmxwX2hhbGZfZHVwbGV4CisJI2RlZmluZSBtcl9scF9hZHZfc3ltX3BhdXNlICAgICAgICAgTXI1LmJpdHMubHBfc3ltX3BhdXNlCisJI2RlZmluZSBtcl9scF9hZHZfYXN5bV9wYXVzZSAgICAgICAgTXI1LmJpdHMubHBfYXN5bV9wYXVzZQorCSNkZWZpbmUgbXJfbHBfYWR2X3JlbW90ZV9mYXVsdDEgICAgIE1yNS5iaXRzLmxwX3JlbW90ZV9mYXVsdDEKKwkjZGVmaW5lIG1yX2xwX2Fkdl9yZW1vdGVfZmF1bHQyICAgICBNcjUuYml0cy5scF9yZW1vdGVfZmF1bHQyCisJI2RlZmluZSBtcl9scF9hZHZfbmV4dF9wYWdlICAgICAgICAgTXI1LmJpdHMubHBfbmV4dF9wYWdlCiAgICAgfSBNcjU7CiAKICAgICAvKiBBdXRvLW5lZ290aWF0aW9uIGV4cGFuc2lvbiByZWdpc3Rlci4gKi8KICAgICB1bmlvbgogICAgIHsKLSAgICAgICAgc3RydWN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZF8wOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGFnZV9yZWNlaXZlZDoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IG5leHRfcGFnZWFibGU6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZF8xNToxMzsKLSAgICAgICAgfSBiaXRzOworCXN0cnVjdAorCXsKKwkgICAgdW5zaWduZWQgaW50IHJlc2VydmVkXzA6MTsKKwkgICAgdW5zaWduZWQgaW50IHBhZ2VfcmVjZWl2ZWQ6MTsKKwkgICAgdW5zaWduZWQgaW50IG5leHRfcGFnZWFibGU6MTsKKwkgICAgdW5zaWduZWQgaW50IHJlc2VydmVkXzE1OjEzOworCX0gYml0czsKIAotICAgICAgICB1bnNpZ25lZCBzaG9ydCBBc1VTSE9SVDsKKwl1bnNpZ25lZCBzaG9ydCBBc1VTSE9SVDsKICAgICB9IE1yNjsKIAogICAgIC8qIEF1dG8tbmVnb3RpYXRpb24gbmV4dCBwYWdlIHRyYW5zbWl0IHJlZ2lzdGVyLiAqLwogICAgIHVuaW9uCiAgICAgewotICAgICAgICBzdHJ1Y3QKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvZGVfZmllbGQ6MTE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdG9nZ2xlOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWNrMjoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IG1lc3NhZ2VfcGFnZToxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlc2VydmVkXzE0OjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmV4dF9wYWdlOjE7Ci0gICAgICAgIH0gYml0czsKKwlzdHJ1Y3QKKwl7CisJICAgIHVuc2lnbmVkIGludCBjb2RlX2ZpZWxkOjExOworCSAgICB1bnNpZ25lZCBpbnQgdG9nZ2xlOjE7CisJICAgIHVuc2lnbmVkIGludCBhY2syOjE7CisJICAgIHVuc2lnbmVkIGludCBtZXNzYWdlX3BhZ2U6MTsKKwkgICAgdW5zaWduZWQgaW50IHJlc2VydmVkXzE0OjE7CisJICAgIHVuc2lnbmVkIGludCBuZXh0X3BhZ2U6MTsKKwl9IGJpdHM7CiAKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgQXNVU0hPUlQ7CisJdW5zaWduZWQgc2hvcnQgQXNVU0hPUlQ7CiAKLSAgICAgICAgI2RlZmluZSBtcl9ucF90eCAgICAgICAgICAgICAgICAgICAgTXI3LkFzVVNIT1JUCisJI2RlZmluZSBtcl9ucF90eCAgICAgICAgICAgICAgICAgICAgTXI3LkFzVVNIT1JUCiAgICAgfSBNcjc7CiAKICAgICAvKiBBdXRvLW5lZ290aWF0aW9uIGxpbmsgcGFydG5lciBhYmlsaXR5IHJlZ2lzdGVyLiAqLwogICAgIHVuaW9uCiAgICAgewotICAgICAgICBzdHJ1Y3QKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvZGVfZmllbGQ6MTE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdG9nZ2xlOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgYWNrMjoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IG1lc3NhZ2VfcGFnZToxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGFjazoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IG5leHRfcGFnZToxOwotICAgICAgICB9IGJpdHM7CisJc3RydWN0CisJeworCSAgICB1bnNpZ25lZCBpbnQgY29kZV9maWVsZDoxMTsKKwkgICAgdW5zaWduZWQgaW50IHRvZ2dsZToxOworCSAgICB1bnNpZ25lZCBpbnQgYWNrMjoxOworCSAgICB1bnNpZ25lZCBpbnQgbWVzc2FnZV9wYWdlOjE7CisJICAgIHVuc2lnbmVkIGludCBhY2s6MTsKKwkgICAgdW5zaWduZWQgaW50IG5leHRfcGFnZToxOworCX0gYml0czsKIAotICAgICAgICB1bnNpZ25lZCBzaG9ydCBBc1VTSE9SVDsKKwl1bnNpZ25lZCBzaG9ydCBBc1VTSE9SVDsKIAotICAgICAgICAjZGVmaW5lIG1yX2xwX25wX3J4ICAgICAgICAgICAgICAgICBNcjguQXNVU0hPUlQKKwkjZGVmaW5lIG1yX2xwX25wX3J4ICAgICAgICAgICAgICAgICBNcjguQXNVU0hPUlQKICAgICB9IE1yODsKIAogICAgIC8qIEV4dGVuZGVkIHN0YXR1cyByZWdpc3Rlci4gKi8KICAgICB1bmlvbgogICAgIHsKLSAgICAgICAgc3RydWN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZF8xMToxMjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlMTAwMF90X2hkOjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZTEwMDBfdF9mZDoxOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2UxMDAwX3hfaGQ6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlMTAwMF94X2ZkOjE7Ci0gICAgICAgIH0gYml0czsKKwlzdHJ1Y3QKKwl7CisJICAgIHVuc2lnbmVkIGludCByZXNlcnZlZF8xMToxMjsKKwkgICAgdW5zaWduZWQgaW50IGJhc2UxMDAwX3RfaGQ6MTsKKwkgICAgdW5zaWduZWQgaW50IGJhc2UxMDAwX3RfZmQ6MTsKKwkgICAgdW5zaWduZWQgaW50IGJhc2UxMDAwX3hfaGQ6MTsKKwkgICAgdW5zaWduZWQgaW50IGJhc2UxMDAwX3hfZmQ6MTsKKwl9IGJpdHM7CiAKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgQXNVU0hPUlQ7CisJdW5zaWduZWQgc2hvcnQgQXNVU0hPUlQ7CiAgICAgfSBNcjE1OwogCiAgICAgLyogTWlzY2VsbGFuZW91cyBzdGF0ZSB2YXJpYWJsZXMuICovCiAgICAgdW5pb24KICAgICB7Ci0gICAgICAgIHN0cnVjdAotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdG9nZ2xlX3R4OjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdG9nZ2xlX3J4OjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnBfcng6MTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYWdlX3J4OjE7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnBfbG9hZGVkOjE7Ci0gICAgICAgIH0gYml0czsKKwlzdHJ1Y3QKKwl7CisJICAgIHVuc2lnbmVkIGludCB0b2dnbGVfdHg6MTsKKwkgICAgdW5zaWduZWQgaW50IHRvZ2dsZV9yeDoxOworCSAgICB1bnNpZ25lZCBpbnQgbnBfcng6MTsKKwkgICAgdW5zaWduZWQgaW50IHBhZ2Vfcng6MTsKKwkgICAgdW5zaWduZWQgaW50IG5wX2xvYWRlZDoxOworCX0gYml0czsKIAotICAgICAgICB1bnNpZ25lZCBzaG9ydCBBc1VTSE9SVDsKKwl1bnNpZ25lZCBzaG9ydCBBc1VTSE9SVDsKIAotICAgICAgICAjZGVmaW5lIG1yX3RvZ2dsZV90eCAgICAgICAgICAgICAgICBNck1pc2MuYml0cy50b2dnbGVfdHgKLSAgICAgICAgI2RlZmluZSBtcl90b2dnbGVfcnggICAgICAgICAgICAgICAgTXJNaXNjLmJpdHMudG9nZ2xlX3J4Ci0gICAgICAgICNkZWZpbmUgbXJfbnBfcnggICAgICAgICAgICAgICAgICAgIE1yTWlzYy5iaXRzLm5wX3J4Ci0gICAgICAgICNkZWZpbmUgbXJfcGFnZV9yeCAgICAgICAgICAgICAgICAgIE1yTWlzYy5iaXRzLnBhZ2VfcngKLSAgICAgICAgI2RlZmluZSBtcl9ucF9sb2FkZWQgICAgICAgICAgICAgICAgTXJNaXNjLmJpdHMubnBfbG9hZGVkCisJI2RlZmluZSBtcl90b2dnbGVfdHggICAgICAgICAgICAgICAgTXJNaXNjLmJpdHMudG9nZ2xlX3R4CisJI2RlZmluZSBtcl90b2dnbGVfcnggICAgICAgICAgICAgICAgTXJNaXNjLmJpdHMudG9nZ2xlX3J4CisJI2RlZmluZSBtcl9ucF9yeCAgICAgICAgICAgICAgICAgICAgTXJNaXNjLmJpdHMubnBfcngKKwkjZGVmaW5lIG1yX3BhZ2VfcnggICAgICAgICAgICAgICAgICBNck1pc2MuYml0cy5wYWdlX3J4CisJI2RlZmluZSBtcl9ucF9sb2FkZWQgICAgICAgICAgICAgICAgTXJNaXNjLmJpdHMubnBfbG9hZGVkCiAgICAgfSBNck1pc2M7CiAKIApAQCAtMzc3LDcgKzM3NSw2IEBACiB9IEFOX1NUQVRFX0lORk8sICpQQU5fU1RBVEVfSU5GTzsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBSZXR1cm4gY29kZSBvZiBBdXRvbmVnODAyM3ouICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzkxLDcgKzM4OCw2IEBACiB9IEFVVE9ORUdfU1RBVFVTLCAqUEFVVE9ORUdfU1RBVFVTOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDAwLDcgKzM5Niw2IEBACiB2b2lkIEF1dG9uZWdJbml0KFBBTl9TVEFURV9JTkZPIHBBbkluZm8pOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHRoZSBvcy1kZXBlbmRlbnQgbW9kdWxlLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQxMCw2ICs0MDUsNCBAQAogY2hhciBNTV9BblJ4Q29uZmlnKFBBTl9TVEFURV9JTkZPIHBBbkluZm8sIHVuc2lnbmVkIHNob3J0ICpwUnhDb25maWcpOwogCiAKLQogI2VuZGlmIC8qIEFVVE9ORUdfSCAqLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbTU3MHhfYml0cy5oIGIvZHJpdmVycy9iY201NzB4X2JpdHMuaAppbmRleCA3OWIxMDUyLi42MTVkNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbTU3MHhfYml0cy5oCisrKyBiL2RyaXZlcnMvYmNtNTcweF9iaXRzLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNkZWZpbmUgQklUU19ICiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogQml0IE1hc2sgZGVmaW5pdGlvbnMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01Niw0ICs1NSwzIEBACiAjZGVmaW5lIEJJVF8zMSAgICAgICAgICAgICAgMHg4MDAwMDAwMAogCiAjZW5kaWYgLyogQklUU19IICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtNTcweF9kZWJ1Zy5oIGIvZHJpdmVycy9iY201NzB4X2RlYnVnLmgKaW5kZXggMGE2ODhjZi4uODhlMjA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iY201NzB4X2RlYnVnLmgKKysrIGIvZHJpdmVycy9iY201NzB4X2RlYnVnLmgKQEAgLTM0LDcgKzM0LDcgQEAKICNkZWZpbmUgQ1BfUkVTRVQgICAgICAgICAgICAgICAgICAgIDB4MjAwMDAwCiAKICNkZWZpbmUgQ1BfQUxMICAgICAgICAgICAgICAgICAgICAgIChDUF9JTklUIHwgQ1BfU0VORCB8IENQX1JDViB8IENQX0lOVCB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQX1JFU0VUIHwgQ1BfVUlOSVQpCisJCQkJICAgIENQX1JFU0VUIHwgQ1BfVUlOSVQpCiAKICNkZWZpbmUgQ1BfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKIApAQCAtOTQsNyArOTQsNyBAQAogI2lmIERCRwogI2RlZmluZSBEYmdNZXNzYWdlKENOVFJMLCBNRVNTQUdFKSAgXAogICAgIGlmKChDTlRSTCAmIERCR19NU0dfQ1ApICYmICgoQ05UUkwgJiBMVl9NQVNLKSA8PSBEQkdfTVNHX0xWKSkgXAotICAgICAgICBwcmludGYgTUVTU0FHRQorCXByaW50ZiBNRVNTQUdFCiAjZGVmaW5lIERiZ0JyZWFrKCkgICAgICAgICAgICAgICAgIERiZ0JyZWFrUG9pbnQoKQogI3VuZGVmIFNUQVRJQwogI2RlZmluZSBTVEFUSUMKQEAgLTEwNiw2ICsxMDYsNCBAQAogI2VuZGlmIC8qIERCRyAqLwogCiAKLQogI2VuZGlmIC8qIERFQlVHX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY201NzB4X2xtLmggYi9kcml2ZXJzL2JjbTU3MHhfbG0uaAppbmRleCA3OTA3M2E4Li42MDdmM2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbTU3MHhfbG0uaAorKysgYi9kcml2ZXJzL2JjbTU3MHhfbG0uaApAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgImJjbTU3MHhfYml0cy5oIgogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEJhc2ljIHR5cGVzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTUwLDEzICs0OSwxMyBAQAogLyogdm9pZCBMTV9JTkNfUEhZU0lDQUxfQUREUkVTUyhQTE1fUEhZU0lDQUxfQUREUkVTUyBwQWRkcixMTV9VSU5UMzIgSW5jU2l6ZSkgKi8KICNkZWZpbmUgTE1fSU5DX1BIWVNJQ0FMX0FERFJFU1MocEFkZHIsIEluY1NpemUpICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgTE1fVUlOVDMyIE9yZ0xvdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgT3JnTG93ID0gKHBBZGRyKS0+TG93OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHBBZGRyKS0+TG93ICs9IEluY1NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYoKHBBZGRyKS0+TG93IDwgT3JnTG93KSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIChwQWRkciktPkhpZ2grKzsgLyogV3JhcCBhcm91bmQuICovICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlMTV9VSU5UMzIgT3JnTG93OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCSAgICBcCisJT3JnTG93ID0gKHBBZGRyKS0+TG93OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkocEFkZHIpLT5Mb3cgKz0gSW5jU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmKChwQWRkciktPkxvdyA8IE9yZ0xvdykgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIChwQWRkciktPkhpZ2grKzsgLyogV3JhcCBhcm91bmQuICovICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KIAogCkBAIC02OSw3ICs2OCw2IEBACiAjZW5kaWYgLyogT0ZGU0VUT0YgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBTaW1wbGUgbWFjcm9zLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEwMyw3ICsxMDEsNiBAQAogICAgICgodW5zaWduZWQgY2hhciAqKSAoX0RzdCkpWzVdID0gKCh1bnNpZ25lZCBjaGFyICopIChfU3JjKSlbNV07CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogQ29uc3RhbnRzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEzMyw3ICsxMzAsNiBAQAogI2RlZmluZSBMTV9QUk9NSVNDVU9VU19NT0RFICAgICAgICAgICAgIDB4MTAwMDAKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBQQ0kgcmVnaXN0ZXJzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE5MSwxMiArMTg3LDExIEBACiAKICNkZWZpbmUgREVDTEFSRV9GUkFHX0xJU1RfQlVGRkVSX1RZUEUoX0ZSQUdfTElTVF9UWVBFX05BTUUsIF9NQVhfRlJBR19DT1VOVCkgXAogICAgIHR5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIExNX0ZSQUdfTElTVCBGcmFnTGlzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgTE1fRlJBRyBGcmFnTGlzdEJ1ZmZlcltfTUFYX0ZSQUdfQ09VTlQtMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCUxNX0ZSQUdfTElTVCBGcmFnTGlzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlMTV9GUkFHIEZyYWdMaXN0QnVmZmVyW19NQVhfRlJBR19DT1VOVC0xXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSBfRlJBR19MSVNUX1RZUEVfTkFNRSwgKlAjI19GUkFHX0xJU1RfVFlQRV9OQU1FCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogU3RhdHVzIGNvZGVzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIyMyw3ICsyMTgsNiBAQAogdHlwZWRlZiBMTV9VSU5UIExNX1NUQVRVUywgKlBMTV9TVEFUVVM7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUmVxdWVzdGVkIG1lZGlhIHR5cGUuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjQ3LDcgKzI0MSw2IEBACiB0eXBlZGVmIExNX1VJTlQzMiBMTV9SRVFVRVNURURfTUVESUFfVFlQRSwgKlBMTV9SRVFVRVNURURfTUVESUFfVFlQRTsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBNZWRpYSB0eXBlLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI2Miw3ICsyNTUsNiBAQAogdHlwZWRlZiBMTV9VSU5UMzIgTE1fTUVESUFfVFlQRSwgKlBMTV9NRURJQV9UWVBFOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIExpbmUgc3BlZWQuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjc1LDcgKzI2Nyw2IEBACiB0eXBlZGVmIExNX1VJTlQzMiBMTV9MSU5FX1NQRUVELCAqUExNX0xJTkVfU1BFRUQ7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRHVwbGV4IG1vZGUuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjg3LDcgKzI3OCw2IEBACiB0eXBlZGVmIExNX1VJTlQzMiBMTV9EVVBMRVhfTU9ERSwgKlBMTV9EVVBMRVhfTU9ERTsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBQb3dlciBzdGF0ZS4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMDAsNyArMjkwLDYgQEAKIHR5cGVkZWYgTE1fVUlOVDMyIExNX1BPV0VSX1NUQVRFLCAqUExNX1BPV0VSX1NUQVRFOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFRhc2sgb2ZmbG9hZGluZy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMTcsNyArMzA2LDYgQEAKIHR5cGVkZWYgTE1fVUlOVDMyIExNX1RBU0tfT0ZGTE9BRCwgKlBMTV9UQVNLX09GRkxPQUQ7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRmxvdyBjb250cm9sLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTMzNyw3ICszMjUsNiBAQAogdHlwZWRlZiBMTV9VSU5UMzIgTE1fRkxPV19DT05UUk9MLCAqUExNX0ZMT1dfQ09OVFJPTDsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBXYWtlIHVwIG1vZGUuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzUwLDcgKzMzNyw2IEBACiB0eXBlZGVmIExNX1VJTlQzMiBMTV9XQUtFX1VQX01PREUsICpQTE1fV0FLRV9VUF9NT0RFOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIENvdW50ZXJzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM3Nyw3ICszNjMsNiBAQAogdHlwZWRlZiBMTV9VSU5UMzIgTE1fQ09VTlRFUl9UWVBFLCAqUExNX0NPVU5URVJfVFlQRTsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBGb3J3YXJkIGRlZmluaXRpb24uICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzg2LDcgKzM3MSw2IEBACiB0eXBlZGVmIHN0cnVjdCBfTE1fUEFDS0VUICpQTE1fUEFDS0VUOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDI3LDcgKzQxMSw2IEBACiBpbnQgTE1fQmxpbmtMRUQoUExNX0RFVklDRV9CTE9DSyBwRGV2aWNlLCBMTV9VSU5UMzIgQmxpbmtEdXJhdGlvbik7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogVGhlc2UgYXJlIHRoZSBPUyBzcGVjaWZpYyBmdW5jdGlvbnMgY2FsbGVkIGJ5IExNQUMuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDY2LDQgKzQ0OSwzIEBACiAKIAogI2VuZGlmIC8qIExNX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY201NzB4X21tLmggYi9kcml2ZXJzL2JjbTU3MHhfbW0uaAppbmRleCBiYWRkMGQyLi5iN2NiZjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbTU3MHhfbW0uaAorKysgYi9kcml2ZXJzL2JjbTU3MHhfbW0uaApAQCAtNTYsMTQgKzU2LDE0IEBACiAvKiBFbWJlZGRlZCBkZXZpY2UgY29udHJvbCAqLwogdHlwZWRlZiBzdHJ1Y3QgX1VNX0RFVklDRV9CTE9DSyB7CiAJTE1fREVWSUNFX0JMT0NLIGxtX2RldjsKLSAgICAgICAgcGNpX2Rldl90IHBkZXY7CisJcGNpX2Rldl90IHBkZXY7CiAJY2hhciAqbmFtZTsKIAl2b2lkICptZW1fbGlzdFtNQVhfTUVNXTsKIAlkbWFfYWRkcl90IGRtYV9saXN0W01BWF9NRU1dOwogCWludCBtZW1fc2l6ZV9saXN0W01BWF9NRU1dOwogCWludCBtZW1fbGlzdF9udW07Ci0gICAgICAgIGludCBtdHU7Ci0gICAgICAgIGludCBpbmRleDsKKwlpbnQgbXR1OworCWludCBpbmRleDsKIAlpbnQgb3BlbmVkOwogCWludCBkZWxheWVkX2xpbmtfaW5kOyAvKiBEZWxheSBsaW5rIHN0YXR1cyBkdXJpbmcgaW5pdGlhbCBsb2FkICovCiAJaW50IGFkYXB0ZXJfanVzdF9pbml0ZWQ7IC8qIHRoZSBmaXJzdCBmZXcgc2Vjb25kcyBhZnRlciBpbml0LiAqLwpAQCAtNzIsNyArNzIsNyBAQAogCWludCBhZGFwdGl2ZV9leHBpcnk7CiAJaW50IGNyY19jb3VudGVyX2V4cGlyeTsgICAgICAgICAvKiBuZXcgLS0gdW5zdXBwb3J0ZWQgKi8KIAlpbnQgcG9sbF90aWJfZXhwaXJ5OyAgICAgICAgIC8qIG5ldyAtLSB1bnN1cHBvcnRlZCAqLwotICAgICAgICBpbnQgdHhfZnVsbDsKKwlpbnQgdHhfZnVsbDsKIAlpbnQgdHhfcXVldWVkOwogCWludCBsaW5lX3NwZWVkOwkJLyogaW4gTWJwcywgMCBpZiBsaW5rIGlzIGRvd24gKi8KIAlVTV9SWF9QQUNLRVRfUSByeF9vdXRfb2ZfYnVmX3E7CkBAIC04MSwxNCArODEsMTQgQEAKIAlpbnQgcnhfYnVmX3JlcGxfcGFuaWNfdGhyZXNoOwogCWludCByeF9idWZfYWxpZ247ICAgICAgICAgICAgLyogbmV3IC0tIHVuc3VwcG9ydGVkICovCiAJaW50IGRvX2dsb2JhbF9sb2NrOwotICAgICAgICBtdXRleF90IGdsb2JhbF9sb2NrOwotICAgICAgICBtdXRleF90IHVuZGlfbG9jazsKKwltdXRleF90IGdsb2JhbF9sb2NrOworCW11dGV4X3QgdW5kaV9sb2NrOwogCWxvbmcgdW5kaV9mbGFnczsKIAl2b2xhdGlsZSBpbnQgaW50ZXJydXB0OwogCWludCB0YXNrbGV0X3BlbmRpbmc7CiAJaW50IHRhc2tsZXRfYnVzeTsJICAgICAvKiBuZXcgLS0gdW5zdXBwb3J0ZWQgKi8KLSAgICAgICAgaW50IHJ4X3BrdDsKLSAgICAgICAgaW50IHR4X3BrdDsKKwlpbnQgcnhfcGt0OworCWludCB0eF9wa3Q7CiAjaWZkZWYgTklDRV9TVVBQT1JUICAgLyogdW5zdXBwb3J0ZWQsIHRoaXMgaXMgYSBsaW51eCBpb2N0bCAqLwogCXZvaWQgKCpuaWNlX3J4KSh2b2lkKiwgdm9pZCogKTsKIAl2b2lkKiBuaWNlX2N0eDsKQEAgLTEwMCwxOSArMTAwLDE5IEBACiAJdW5zaWduZWQgaW50IHJ4X2N1cnJfY29hbGVzY2VfdGlja3M7CiAJdW5zaWduZWQgaW50IHR4X2N1cnJfY29hbGVzY2VfZnJhbWVzOyAgLyogbmV3IC0tIHVuc3VwcG9ydGVkICovCiAjaWYgVElHT04zX0RFQlVHICAgICAgICAgIC8qIG5ldyAtLSB1bnN1cHBvcnRlZCAqLwotICAgICAgICB1aW50IHR4X3pjX2NvdW50OwotICAgICAgICB1aW50IHR4X2Noa3N1bV9jb3VudDsKLSAgICAgICAgdWludCB0eF9oaW1lbV9jb3VudDsKLSAgICAgICAgdWludCByeF9nb29kX2Noa3N1bV9jb3VudDsKKwl1aW50IHR4X3pjX2NvdW50OworCXVpbnQgdHhfY2hrc3VtX2NvdW50OworCXVpbnQgdHhfaGltZW1fY291bnQ7CisJdWludCByeF9nb29kX2Noa3N1bV9jb3VudDsKICNlbmRpZgotICAgICAgICB1bnNpZ25lZCBpbnQgcnhfYmFkX2Noa3N1bV9jb3VudDsgICAvKiBuZXcgLS0gdW5zdXBwb3J0ZWQgKi8KLSAgICAgICAgdW5zaWduZWQgaW50IHJ4X21pc2NfZXJyb3JzOyAgICAgICAgLyogbmV3IC0tIHVuc3VwcG9ydGVkICovCisJdW5zaWduZWQgaW50IHJ4X2JhZF9jaGtzdW1fY291bnQ7ICAgLyogbmV3IC0tIHVuc3VwcG9ydGVkICovCisJdW5zaWduZWQgaW50IHJ4X21pc2NfZXJyb3JzOyAgICAgICAgLyogbmV3IC0tIHVuc3VwcG9ydGVkICovCiB9IFVNX0RFVklDRV9CTE9DSywgKlBVTV9ERVZJQ0VfQkxPQ0s7CiAKIAogLyogUGh5c2ljYWwvUENJIERNQSBhZGRyZXNzICovCiB0eXBlZGVmIHVuaW9uIHsKLSAgICAgICAgZG1hX2FkZHJfdCBkbWFfbWFwOworCWRtYV9hZGRyX3QgZG1hX21hcDsKIH0gZG1hX21hcF90OwogCiAvKiBQYWNrZXQgKi8KQEAgLTEzMCw4ICsxMzAsOCBAQAogCiAvKiBNYWNybyBmb3Igc2V0dGluZyA2NGJpdCBhZGRyZXNzIHN0cnVjdCAqLwogI2RlZmluZSBzZXRfNjRiaXRfYWRkcihwYWRkciwgbG93LCBoaWdoKSBcCi0gICAgICAgIChwYWRkciktPkxvdyA9IGxvdzsgICAgICAgICAgICAgXAotICAgICAgICAocGFkZHIpLT5IaWdoID0gaGlnaDsKKwkocGFkZHIpLT5Mb3cgPSBsb3c7ICAgICAgICAgICAgIFwKKwkocGFkZHIpLT5IaWdoID0gaGlnaDsKIAogLyogQXNzdW1lIHRoYXQgUENJIGNvbnRyb2xsZXIncyB2aWV3IG9mIGhvc3QgbWVtb3J5IGlzIHNhbWUgYXMgaG9zdCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbTU3MHhfcXVldWUuaCBiL2RyaXZlcnMvYmNtNTcweF9xdWV1ZS5oCmluZGV4IGJjMzJhZDcuLjMzNmIzY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmNtNTcweF9xdWV1ZS5oCisrKyBiL2RyaXZlcnMvYmNtNTcweF9xdWV1ZS5oCkBAIC0xMDMsMTQgKzEwMywxMyBAQAogCiAvKiBEZWNsYXJlIHF1ZXVlIHR5cGUgbWFjcm8uICovCiAjZGVmaW5lIERFQ0xBUkVfUVVFVUVfVFlQRShfUVVFVUVfVFlQRSwgX1FVRVVFX1NJWkUpICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJCQkJXAogICAgIHR5cGVkZWYgc3RydWN0IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUVFfQ09OVEFJTkVSIENvbnRhaW5lcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFBRUV9FTlRSWSBFbnRyeUJ1ZmZlcltfUVVFVUVfU0laRV07ICAgICAgICAgICAgICAgICAgICAgXAorCVFRX0NPTlRBSU5FUiBDb250YWluZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCVBRUV9FTlRSWSBFbnRyeUJ1ZmZlcltfUVVFVUVfU0laRV07ICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gX1FVRVVFX1RZUEUsICpQIyNfUVVFVUVfVFlQRQogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIENvbXBpbGF0aW9uIHN3aXRjaGVzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0NCw3ICsxNDMsNiBAQAogfSAvKiBRUV9Jbml0UXVldWUgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2MSw3ICsxNTksNiBAQAogfSAvKiBRUV9GdWxsICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNzQsNyArMTcxLDYgQEAKIH0gLyogUVFfRW1wdHkgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE4Nyw3ICsxODMsNiBAQAogfSAvKiBRUV9HZXRTaXplICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yMDAsNyArMTk1LDYgQEAKIH0gLyogUVFfR2V0RW50cnlDbnQgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIxOCw3ICsyMTIsNyBAQAogCiAjaWYgIWRlZmluZWQoUVFfTk9fT1ZFUkZMT1dfQ0hFQ0spCiAgICAgaWYoSGVhZCA9PSBwUXVldWUtPlRhaWwpIHsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgfSAvKiBpZiAqLwogI2VuZGlmIC8qIFFRX05PX09WRVJGTE9XX0NIRUNLICovCiAKQEAgLTIzMSw3ICsyMjUsNiBAQAogfSAvKiBRUV9QdXNoSGVhZCAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjQ3LDEzICsyNDAsMTMgQEAKIAogICAgIFRhaWwgPSBwUXVldWUtPlRhaWw7CiAgICAgaWYoVGFpbCA9PSAwKSB7Ci0gICAgICAgIFRhaWwgPSBwUXVldWUtPlNpemU7CisJVGFpbCA9IHBRdWV1ZS0+U2l6ZTsKICAgICB9IC8qIGlmICovCiAgICAgVGFpbC0tOwogCiAjaWYgIWRlZmluZWQoUVFfTk9fT1ZFUkZMT1dfQ0hFQ0spCiAgICAgaWYoVGFpbCA9PSBwUXVldWUtPkhlYWQpIHsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgfSAvKiBpZiAqLwogI2VuZGlmIC8qIFFRX05PX09WRVJGTE9XX0NIRUNLICovCiAKQEAgLTI2Niw3ICsyNTksNiBAQAogfSAvKiBRUV9QdXNoVGFpbCAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjgyLDEyICsyNzQsMTIgQEAKIAogI2lmICFkZWZpbmVkKFFRX05PX1VOREVSRkxPV19DSEVDSykKICAgICBpZihIZWFkID09IHBRdWV1ZS0+VGFpbCkgewotICAgICAgICByZXR1cm4gKFBRUV9FTlRSWSkgMDsKKwlyZXR1cm4gKFBRUV9FTlRSWSkgMDsKICAgICB9IC8qIGlmICovCiAjZW5kaWYgLyogUVFfTk9fVU5ERVJGTE9XX0NIRUNLICovCiAKICAgICBpZihIZWFkID09IDApIHsKLSAgICAgICAgSGVhZCA9IHBRdWV1ZS0+U2l6ZTsKKwlIZWFkID0gcFF1ZXVlLT5TaXplOwogICAgIH0gLyogaWYgKi8KICAgICBIZWFkLS07CiAKQEAgLTMwNCw3ICsyOTYsNiBAQAogfSAvKiBRUV9Qb3BIZWFkICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMjAsNyArMzExLDcgQEAKIAogI2lmICFkZWZpbmVkKFFRX05PX1VOREVSRkxPV19DSEVDSykKICAgICBpZihUYWlsID09IHBRdWV1ZS0+SGVhZCkgewotICAgICAgICByZXR1cm4gKFBRUV9FTlRSWSkgMDsKKwlyZXR1cm4gKFBRUV9FTlRSWSkgMDsKICAgICB9IC8qIGlmICovCiAjZW5kaWYgLyogUVFfTk9fVU5ERVJGTE9XX0NIRUNLICovCiAKQEAgLTMzNyw3ICszMjgsNiBAQAogfSAvKiBRUV9Qb3BUYWlsICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNTAsMTYgKzM0MCwxNiBAQAogewogICAgIGlmKElkeCA+PSBhdG9taWNfcmVhZCgmcFF1ZXVlLT5FbnRyeUNudCkpCiAgICAgewotICAgICAgICByZXR1cm4gKFBRUV9FTlRSWSkgMDsKKwlyZXR1cm4gKFBRUV9FTlRSWSkgMDsKICAgICB9CiAKICAgICBpZihwUXVldWUtPkhlYWQgPiBJZHgpCiAgICAgewotICAgICAgICBJZHggPSBwUXVldWUtPkhlYWQgLSBJZHg7CisJSWR4ID0gcFF1ZXVlLT5IZWFkIC0gSWR4OwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBJZHggPSBwUXVldWUtPlNpemUgLSAoSWR4IC0gcFF1ZXVlLT5IZWFkKTsKKwlJZHggPSBwUXVldWUtPlNpemUgLSAoSWR4IC0gcFF1ZXVlLT5IZWFkKTsKICAgICB9CiAgICAgSWR4LS07CiAKQEAgLTM2Nyw3ICszNTcsNiBAQAogfQogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzgwLDEzICszNjksMTMgQEAKIHsKICAgICBpZihJZHggPj0gYXRvbWljX3JlYWQoJnBRdWV1ZS0+RW50cnlDbnQpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIChQUVFfRU5UUlkpIDA7CisJcmV0dXJuIChQUVFfRU5UUlkpIDA7CiAgICAgfQogCiAgICAgSWR4ICs9IHBRdWV1ZS0+VGFpbDsKICAgICBpZihJZHggPj0gcFF1ZXVlLT5TaXplKQogICAgIHsKLSAgICAgICAgSWR4ID0gSWR4IC0gcFF1ZXVlLT5TaXplOworCUlkeCA9IElkeCAtIHBRdWV1ZS0+U2l6ZTsKICAgICB9CiAKICAgICByZXR1cm4gcFF1ZXVlLT5BcnJheVtJZHhdOwpAQCAtMzk1LDUgKzM4NCw0IEBACiAjZW5kaWYgLyogUVFfVVNFX01BQ1JPUyAqLwogCiAKLQogI2VuZGlmIC8qIFFVRVVFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2ZiX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2ZiX2NvbnNvbGUuYwppbmRleCBkNDI4YjE3Li4yMjM4MmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NmYl9jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jZmJfY29uc29sZS5jCkBAIC02MCwzNCArNjAsMzQgQEAKICBWSURFT19HRVRDX0ZDVCAgICAgICAgICAgICAgLSBrZXlib2FyZF9nZXRjIGZ1bmN0aW9uCiAKICBDT05GSUdfQ09OU09MRV9DVVJTT1IgICAgICAgLSBvbi9vZmYgZHJhd2luZyBjdXJzb3IgaXMgZG9uZSB3aXRoIGRlbGF5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCBpbiBWSURFT19UU1RDX0ZDVCAoaTgwNDIpCisJCQkgICAgICAgbG9vcCBpbiBWSURFT19UU1RDX0ZDVCAoaTgwNDIpCiAgQ0ZHX0NPTlNPTEVfQkxJTktfQ09VTlQgICAgIC0gdmFsdWUgZm9yIGRlbGF5IGxvb3AgLSBibGluayByYXRlCiAgQ09ORklHX0NPTlNPTEVfVElNRSAgICAgICAgIC0gZGlzcGxheSB0aW1lL2RhdGUgaW4gdXBwZXIgcmlnaHQgY29ybmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzIENGR19DTURfREFURSBhbmQgQ09ORklHX0NPTlNPTEVfQ1VSU09SCisJCQkgICAgICAgbmVlZHMgQ0ZHX0NNRF9EQVRFIGFuZCBDT05GSUdfQ09OU09MRV9DVVJTT1IKICBDT05GSUdfVklERU9fTE9HTyAgICAgICAgICAgLSBkaXNwbGF5IExpbnV4IExvZ28gaW4gdXBwZXIgbGVmdCBjb3JuZXIKICBDT05GSUdfVklERU9fQk1QX0xPR08gICAgICAgLSB1c2UgYm1wX2xvZ28gaW5zdGVhZCBvZiBsaW51eF9sb2dvCiAgQ09ORklHX0NPTlNPTEVfRVhUUkFfSU5GTyAgIC0gZGlzcGxheSBhZGRpdGlvbmFsIGJvYXJkIGluZm9ybWF0aW9uIHN0cmluZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG5vcm1hbHkgZ29lcyB0byBzZXJpYWwgcG9ydC4gVGhpcyBkZWZpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlcyBhIGJvYXJkIHNwZWNpZmljIGZ1bmN0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2RyYXdzdHJpbmcgKFZJREVPX0lORk9fWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSURFT19JTkZPX1kgKyBpKlZJREVPX0ZPTlRfSEVJR0hULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZmlsbHMgYSBpbmZvIGJ1ZmZlciBhdCBpPXJvdy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmE6IGJvYXJkL2VsdGVjL2JhYjd4eC4KKwkJCSAgICAgICB0aGF0IG5vcm1hbHkgZ29lcyB0byBzZXJpYWwgcG9ydC4gVGhpcyBkZWZpbmUKKwkJCSAgICAgICByZXF1aXJlcyBhIGJvYXJkIHNwZWNpZmljIGZ1bmN0aW9uOgorCQkJICAgICAgIHZpZGVvX2RyYXdzdHJpbmcgKFZJREVPX0lORk9fWCwKKwkJCQkJCSBWSURFT19JTkZPX1kgKyBpKlZJREVPX0ZPTlRfSEVJR0hULAorCQkJCQkJIGluZm8pOworCQkJICAgICAgIHRoYXQgZmlsbHMgYSBpbmZvIGJ1ZmZlciBhdCBpPXJvdy4KKwkJCSAgICAgICBzLmE6IGJvYXJkL2VsdGVjL2JhYjd4eC4KIENPTkZJR19WR0FfQVNfU0lOR0xFX0RFVklDRSAgLSBJZiBzZXQgdGhlIGZyYW1lYnVmZmVyIGRldmljZSB3aWxsIGJlIGluaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgYW4gb3V0cHV0IG9ubHkgZGV2aWNlLiBUaGUgS2V5Ym9hcmQgZHJpdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBub3QgYmUgc2V0LXVwLiBUaGlzIG1heSBiZSB1c2VkLCBpZiB5b3UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlIG5vbmUgb3IgbW9yZSB0aGFuIG9uZSBLZXlib2FyZCBkZXZpY2VzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFVTQiBLZXlib2FyZCwgQVQgS2V5Ym9hcmQpLgorCQkJICAgICAgIGFzIGFuIG91dHB1dCBvbmx5IGRldmljZS4gVGhlIEtleWJvYXJkIGRyaXZlcgorCQkJICAgICAgIHdpbGwgbm90IGJlIHNldC11cC4gVGhpcyBtYXkgYmUgdXNlZCwgaWYgeW91CisJCQkgICAgICAgaGF2ZSBub25lIG9yIG1vcmUgdGhhbiBvbmUgS2V5Ym9hcmQgZGV2aWNlcworCQkJICAgICAgIChVU0IgS2V5Ym9hcmQsIEFUIEtleWJvYXJkKS4KIAogQ09ORklHX1ZJREVPX1NXX0NVUlNPUjogICAgICAtIERyYXdzIGEgY3Vyc29yIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3Rlci4gTm8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGlua2luZyBpcyBwcm92aWRlZC4gVXNlcyB0aGUgbWFjcm9zIENVUlNPUl9TRVQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgQ1VSU09SX09GRi4KKwkJCSAgICAgICBibGlua2luZyBpcyBwcm92aWRlZC4gVXNlcyB0aGUgbWFjcm9zIENVUlNPUl9TRVQKKwkJCSAgICAgICBhbmQgQ1VSU09SX09GRi4KIENPTkZJR19WSURFT19IV19DVVJTT1I6ICAgICAgLSBVc2VzIHRoZSBoYXJkd2FyZSBjdXJzb3IgY2FwYWJpbGl0eSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljIGNoaXAuIFVzZXMgdGhlIG1hY3JvIENVUlNPUl9TRVQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRURU5USU9OOiBJZiBib290aW5nIGFuIE9TLCB0aGUgZGlzcGxheSBkcml2ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGRpc2FibGUgdGhlIGhhcmR3YXJlIHJlZ2lzdGVyIG9mIHRoZSBncmFwaGljCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpcC4gT3RoZXJ3aXNlIGEgYmxpbmtpbmcgZmllbGQgaXMgZGlzcGxheWVkCisJCQkgICAgICAgZ3JhcGhpYyBjaGlwLiBVc2VzIHRoZSBtYWNybyBDVVJTT1JfU0VULgorCQkJICAgICAgIEFUVEVOVElPTjogSWYgYm9vdGluZyBhbiBPUywgdGhlIGRpc3BsYXkgZHJpdmVyCisJCQkgICAgICAgbXVzdCBkaXNhYmxlIHRoZSBoYXJkd2FyZSByZWdpc3RlciBvZiB0aGUgZ3JhcGhpYworCQkJICAgICAgIGNoaXAuIE90aGVyd2lzZSBhIGJsaW5raW5nIGZpZWxkIGlzIGRpc3BsYXllZAogKi8KIAogI2luY2x1ZGUgPGNvbW1vbi5oPgpAQCAtMjE0LDcgKzIxNCw3IEBACiAjZW5kaWYKICNkZWZpbmUgQ1VSU09SX09OCiAjZGVmaW5lIENVUlNPUl9PRkYgdmlkZW9fcHV0Y2hhcihjb25zb2xlX2NvbCAqIFZJREVPX0ZPTlRfV0lEVEgsXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZV9yb3cgKiBWSURFT19GT05UX0hFSUdIVCwgJyAnKTsKKwkJCQkgY29uc29sZV9yb3cgKiBWSURFT19GT05UX0hFSUdIVCwgJyAnKTsKICNkZWZpbmUgQ1VSU09SX1NFVCB2aWRlb19zZXRfY3Vyc29yKCk7CiAjZW5kaWYgLyogQ09ORklHX1ZJREVPX1NXX0NVUlNPUiAqLwogCkBAIC0yMjYsNyArMjI2LDcgQEAKICNkZWZpbmUgQ1VSU09SX09OCiAjZGVmaW5lIENVUlNPUl9PRkYKICNkZWZpbmUgQ1VSU09SX1NFVCB2aWRlb19zZXRfaHdfY3Vyc29yKGNvbnNvbGVfY29sICogVklERU9fRk9OVF9XSURUSCwgXAotICAgICAgICAgICAgICAgICAgKGNvbnNvbGVfcm93ICogVklERU9fRk9OVF9IRUlHSFQpICsgVklERU9fTE9HT19IRUlHSFQpOworCQkgIChjb25zb2xlX3JvdyAqIFZJREVPX0ZPTlRfSEVJR0hUKSArIFZJREVPX0xPR09fSEVJR0hUKTsKICNlbmRpZiAgLyogQ09ORklHX1ZJREVPX0hXX0NVUlNPUiAqLwogCiAjaWZkZWYgIENPTkZJR19WSURFT19MT0dPCkBAIC0yODEsOSArMjgxLDkgQEAKICNpZmRlZiAgVklERU9fRkJfTElUVExFX0VORElBTgogI2RlZmluZSBTV0FQMTYoeCkgICAgICAgICgoKCh4KSAmIDB4MDBmZikgPDwgOCkgfCAoICh4KSA+PiA4KSkKICNkZWZpbmUgU1dBUDMyKHgpICAgICAgICAoKCgoeCkgJiAweDAwMDAwMGZmKSA8PCAyNCkgfCAoKCh4KSAmIDB4MDAwMGZmMDApIDw8IDgpfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwZmYwMDAwKSA+PiAgOCkgfCAoKCh4KSAmIDB4ZmYwMDAwMDApID4+IDI0KSApCisJCQkgICgoKHgpICYgMHgwMGZmMDAwMCkgPj4gIDgpIHwgKCgoeCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgKQogI2RlZmluZSBTSE9SVFNXQVAzMih4KSAgICgoKCh4KSAmIDB4MDAwMDAwZmYpIDw8ICA4KSB8ICgoKHgpICYgMHgwMDAwZmYwMCkgPj4gOCl8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDBmZjAwMDApIDw8ICA4KSB8ICgoKHgpICYgMHhmZjAwMDAwMCkgPj4gOCkgKQorCQkJICAoKCh4KSAmIDB4MDBmZjAwMDApIDw8ICA4KSB8ICgoKHgpICYgMHhmZjAwMDAwMCkgPj4gOCkgKQogI2Vsc2UKICNkZWZpbmUgU1dBUDE2KHgpICAgICAgICAoeCkKICNkZWZpbmUgU1dBUDMyKHgpICAgICAgICAoeCkKQEAgLTMxNyw1MiArMzE3LDUyIEBACiBzdGF0aWMgdTMyIGVvcngsIGZneCwgYmd4OyAgLyogY29sb3IgcGF0cyAqLwogCiBzdGF0aWMgY29uc3QgaW50IHZpZGVvX2ZvbnRfZHJhd190YWJsZThbXSA9IHsKLSAgICAgICAgICAgIDB4MDAwMDAwMDAsIDB4MDAwMDAwZmYsIDB4MDAwMGZmMDAsIDB4MDAwMGZmZmYsCi0gICAgICAgICAgICAweDAwZmYwMDAwLCAweDAwZmYwMGZmLCAweDAwZmZmZjAwLCAweDAwZmZmZmZmLAotICAgICAgICAgICAgMHhmZjAwMDAwMCwgMHhmZjAwMDBmZiwgMHhmZjAwZmYwMCwgMHhmZjAwZmZmZiwKLSAgICAgICAgICAgIDB4ZmZmZjAwMDAsIDB4ZmZmZjAwZmYsIDB4ZmZmZmZmMDAsIDB4ZmZmZmZmZmYgfTsKKwkgICAgMHgwMDAwMDAwMCwgMHgwMDAwMDBmZiwgMHgwMDAwZmYwMCwgMHgwMDAwZmZmZiwKKwkgICAgMHgwMGZmMDAwMCwgMHgwMGZmMDBmZiwgMHgwMGZmZmYwMCwgMHgwMGZmZmZmZiwKKwkgICAgMHhmZjAwMDAwMCwgMHhmZjAwMDBmZiwgMHhmZjAwZmYwMCwgMHhmZjAwZmZmZiwKKwkgICAgMHhmZmZmMDAwMCwgMHhmZmZmMDBmZiwgMHhmZmZmZmYwMCwgMHhmZmZmZmZmZiB9OwogCiBzdGF0aWMgY29uc3QgaW50IHZpZGVvX2ZvbnRfZHJhd190YWJsZTE1W10gPSB7Ci0gICAgICAgICAgICAweDAwMDAwMDAwLCAweDAwMDA3ZmZmLCAweDdmZmYwMDAwLCAweDdmZmY3ZmZmIH07CisJICAgIDB4MDAwMDAwMDAsIDB4MDAwMDdmZmYsIDB4N2ZmZjAwMDAsIDB4N2ZmZjdmZmYgfTsKIAogc3RhdGljIGNvbnN0IGludCB2aWRlb19mb250X2RyYXdfdGFibGUxNltdID0gewotICAgICAgICAgICAgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHhmZmZmMDAwMCwgMHhmZmZmZmZmZiB9OworCSAgICAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweGZmZmYwMDAwLCAweGZmZmZmZmZmIH07CiAKIHN0YXRpYyBjb25zdCBpbnQgdmlkZW9fZm9udF9kcmF3X3RhYmxlMjRbMTZdWzNdID0gewotICAgICAgICAgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgICAgICAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDBmZmZmZmYgfSwKLSAgICAgICAgICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHhmZjAwMDAwMCB9LAotICAgICAgICAgICAgeyAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweGZmZmZmZmZmIH0sCi0gICAgICAgICAgICB7IDB4MDAwMDAwZmYsIDB4ZmZmZjAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICAgICAgICAgIHsgMHgwMDAwMDBmZiwgMHhmZmZmMDAwMCwgMHgwMGZmZmZmZiB9LAotICAgICAgICAgICAgeyAweDAwMDAwMGZmLCAweGZmZmZmZmZmLCAweGZmMDAwMDAwIH0sCi0gICAgICAgICAgICB7IDB4MDAwMDAwZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYgfSwKLSAgICAgICAgICAgIHsgMHhmZmZmZmYwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgICAgICAgICAgeyAweGZmZmZmZjAwLCAweDAwMDAwMDAwLCAweDAwZmZmZmZmIH0sCi0gICAgICAgICAgICB7IDB4ZmZmZmZmMDAsIDB4MDAwMGZmZmYsIDB4ZmYwMDAwMDAgfSwKLSAgICAgICAgICAgIHsgMHhmZmZmZmYwMCwgMHgwMDAwZmZmZiwgMHhmZmZmZmZmZiB9LAotICAgICAgICAgICAgeyAweGZmZmZmZmZmLCAweGZmZmYwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgICAgICAgICB7IDB4ZmZmZmZmZmYsIDB4ZmZmZjAwMDAsIDB4MDBmZmZmZmYgfSwKLSAgICAgICAgICAgIHsgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZjAwMDAwMCB9LAotICAgICAgICAgICAgeyAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmIH0gfTsKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMGZmZmZmZiB9LAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4ZmYwMDAwMDAgfSwKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweGZmZmZmZmZmIH0sCisJICAgIHsgMHgwMDAwMDBmZiwgMHhmZmZmMDAwMCwgMHgwMDAwMDAwMCB9LAorCSAgICB7IDB4MDAwMDAwZmYsIDB4ZmZmZjAwMDAsIDB4MDBmZmZmZmYgfSwKKwkgICAgeyAweDAwMDAwMGZmLCAweGZmZmZmZmZmLCAweGZmMDAwMDAwIH0sCisJICAgIHsgMHgwMDAwMDBmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiB9LAorCSAgICB7IDB4ZmZmZmZmMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKwkgICAgeyAweGZmZmZmZjAwLCAweDAwMDAwMDAwLCAweDAwZmZmZmZmIH0sCisJICAgIHsgMHhmZmZmZmYwMCwgMHgwMDAwZmZmZiwgMHhmZjAwMDAwMCB9LAorCSAgICB7IDB4ZmZmZmZmMDAsIDB4MDAwMGZmZmYsIDB4ZmZmZmZmZmYgfSwKKwkgICAgeyAweGZmZmZmZmZmLCAweGZmZmYwMDAwLCAweDAwMDAwMDAwIH0sCisJICAgIHsgMHhmZmZmZmZmZiwgMHhmZmZmMDAwMCwgMHgwMGZmZmZmZiB9LAorCSAgICB7IDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmYwMDAwMDAgfSwKKwkgICAgeyAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmIH0gfTsKIAogc3RhdGljIGNvbnN0IGludCB2aWRlb19mb250X2RyYXdfdGFibGUzMlsxNl1bNF0gPSB7Ci0gICAgICAgICAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICAgICAgICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMGZmZmZmZiB9LAotICAgICAgICAgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0gICAgICAgICAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYgfSwKLSAgICAgICAgICAgIHsgMHgwMDAwMDAwMCwgMHgwMGZmZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgICAgICAgICAgeyAweDAwMDAwMDAwLCAweDAwZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwZmZmZmZmIH0sCi0gICAgICAgICAgICB7IDB4MDAwMDAwMDAsIDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYsIDB4MDAwMDAwMDAgfSwKLSAgICAgICAgICAgIHsgMHgwMDAwMDAwMCwgMHgwMGZmZmZmZiwgMHgwMGZmZmZmZiwgMHgwMGZmZmZmZiB9LAotICAgICAgICAgICAgeyAweDAwZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCi0gICAgICAgICAgICB7IDB4MDBmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDBmZmZmZmYgfSwKLSAgICAgICAgICAgIHsgMHgwMGZmZmZmZiwgMHgwMDAwMDAwMCwgMHgwMGZmZmZmZiwgMHgwMDAwMDAwMCB9LAotICAgICAgICAgICAgeyAweDAwZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwZmZmZmZmLCAweDAwZmZmZmZmIH0sCi0gICAgICAgICAgICB7IDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKLSAgICAgICAgICAgIHsgMHgwMGZmZmZmZiwgMHgwMGZmZmZmZiwgMHgwMDAwMDAwMCwgMHgwMGZmZmZmZiB9LAotICAgICAgICAgICAgeyAweDAwZmZmZmZmLCAweDAwZmZmZmZmLCAweDAwZmZmZmZmLCAweDAwMDAwMDAwIH0sCi0gICAgICAgICAgICB7IDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYgfSB9OworCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwZmZmZmZmIH0sCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMGZmZmZmZiwgMHgwMDAwMDAwMCB9LAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYgfSwKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMGZmZmZmZiwgMHgwMDAwMDAwMCwgMHgwMGZmZmZmZiB9LAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYsIDB4MDAwMDAwMDAgfSwKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwZmZmZmZmLCAweDAwZmZmZmZmLCAweDAwZmZmZmZmIH0sCisJICAgIHsgMHgwMGZmZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAorCSAgICB7IDB4MDBmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDBmZmZmZmYgfSwKKwkgICAgeyAweDAwZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwZmZmZmZmLCAweDAwMDAwMDAwIH0sCisJICAgIHsgMHgwMGZmZmZmZiwgMHgwMDAwMDAwMCwgMHgwMGZmZmZmZiwgMHgwMGZmZmZmZiB9LAorCSAgICB7IDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKwkgICAgeyAweDAwZmZmZmZmLCAweDAwZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwZmZmZmZmIH0sCisJICAgIHsgMHgwMGZmZmZmZiwgMHgwMGZmZmZmZiwgMHgwMGZmZmZmZiwgMHgwMDAwMDAwMCB9LAorCSAgICB7IDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYsIDB4MDBmZmZmZmYgfSB9OwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zODAsOTggKzM4MCw5OCBAQAogICAgIHsKICAgICBjYXNlIEdERl9fOEJJVF9JTkRFWDoKICAgICBjYXNlIEdERl9fOEJJVF8zMzJSR0I6Ci0gICAgICAgIHdoaWxlIChjb3VudC0tKQotICAgICAgICB7Ci0gICAgICAgIGMgPSAqcyA7Ci0gICAgICAgIGNkYXQgPSB2aWRlb19mb250ZGF0YSArIGMgKiBWSURFT19GT05UX0hFSUdIVDsKLSAgICAgICAgZm9yIChyb3dzID0gVklERU9fRk9OVF9IRUlHSFQsIGRlc3QgPSBkZXN0MDsgcm93cy0tOyBkZXN0ICs9IFZJREVPX0xJTkVfTEVOKQotICAgICAgICB7Ci0gICAgICAgICAgICB1OCBiaXRzID0gKmNkYXQrKzsKLSAgICAgICAgICAgICgodTMyICopZGVzdClbMF0gPSAodmlkZW9fZm9udF9kcmF3X3RhYmxlOFtiaXRzID4+IDRdICYgZW9yeCkgXiBiZ3g7Ci0gICAgICAgICAgICAoKHUzMiAqKWRlc3QpWzFdID0gKHZpZGVvX2ZvbnRfZHJhd190YWJsZThbYml0cyAmIDE1XSAmIGVvcngpIF4gYmd4OwotICAgICAgICB9Ci0gICAgICAgIGRlc3QwICs9IFZJREVPX0ZPTlRfV0lEVEggKiBWSURFT19QSVhFTF9TSVpFOwotICAgICAgICBzKys7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJd2hpbGUgKGNvdW50LS0pCisJeworCWMgPSAqcyA7CisJY2RhdCA9IHZpZGVvX2ZvbnRkYXRhICsgYyAqIFZJREVPX0ZPTlRfSEVJR0hUOworCWZvciAocm93cyA9IFZJREVPX0ZPTlRfSEVJR0hULCBkZXN0ID0gZGVzdDA7IHJvd3MtLTsgZGVzdCArPSBWSURFT19MSU5FX0xFTikKKwl7CisJICAgIHU4IGJpdHMgPSAqY2RhdCsrOworCSAgICAoKHUzMiAqKWRlc3QpWzBdID0gKHZpZGVvX2ZvbnRfZHJhd190YWJsZThbYml0cyA+PiA0XSAmIGVvcngpIF4gYmd4OworCSAgICAoKHUzMiAqKWRlc3QpWzFdID0gKHZpZGVvX2ZvbnRfZHJhd190YWJsZThbYml0cyAmIDE1XSAmIGVvcngpIF4gYmd4OworCX0KKwlkZXN0MCArPSBWSURFT19GT05UX1dJRFRIICogVklERU9fUElYRUxfU0laRTsKKwlzKys7CisJfQorCWJyZWFrOwogCiAgICAgY2FzZSBHREZfMTVCSVRfNTU1UkdCOgotICAgICAgICB3aGlsZSAoY291bnQtLSkKLSAgICAgICAgewotICAgICAgICBjID0gKnMgOwotICAgICAgICBjZGF0ID0gdmlkZW9fZm9udGRhdGEgKyBjICogVklERU9fRk9OVF9IRUlHSFQ7Ci0gICAgICAgIGZvciAocm93cyA9IFZJREVPX0ZPTlRfSEVJR0hULCBkZXN0ID0gZGVzdDA7IHJvd3MtLTsgZGVzdCArPSBWSURFT19MSU5FX0xFTikKLSAgICAgICAgewotICAgICAgICAgICAgdTggYml0cyA9ICpjZGF0Kys7Ci0gICAgICAgICAgICAoKHUzMiAqKWRlc3QpWzBdID0gU0hPUlRTV0FQMzIoKHZpZGVvX2ZvbnRfZHJhd190YWJsZTE1W2JpdHMgPj4gNl0gJiBlb3J4KSBeIGJneCk7Ci0gICAgICAgICAgICAoKHUzMiAqKWRlc3QpWzFdID0gU0hPUlRTV0FQMzIoKHZpZGVvX2ZvbnRfZHJhd190YWJsZTE1W2JpdHMgPj4gNCAmIDNdICYgZW9yeCkgXiBiZ3gpOwotICAgICAgICAgICAgKCh1MzIgKilkZXN0KVsyXSA9IFNIT1JUU1dBUDMyKCh2aWRlb19mb250X2RyYXdfdGFibGUxNVtiaXRzID4+IDIgJiAzXSAmIGVvcngpIF4gYmd4KTsKLSAgICAgICAgICAgICgodTMyICopZGVzdClbM10gPSBTSE9SVFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMTVbYml0cyAmIDNdICYgZW9yeCkgXiBiZ3gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdDAgKz0gVklERU9fRk9OVF9XSURUSCAqIFZJREVPX1BJWEVMX1NJWkU7Ci0gICAgICAgICAgICBzKysgOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCXdoaWxlIChjb3VudC0tKQorCXsKKwljID0gKnMgOworCWNkYXQgPSB2aWRlb19mb250ZGF0YSArIGMgKiBWSURFT19GT05UX0hFSUdIVDsKKwlmb3IgKHJvd3MgPSBWSURFT19GT05UX0hFSUdIVCwgZGVzdCA9IGRlc3QwOyByb3dzLS07IGRlc3QgKz0gVklERU9fTElORV9MRU4pCisJeworCSAgICB1OCBiaXRzID0gKmNkYXQrKzsKKwkgICAgKCh1MzIgKilkZXN0KVswXSA9IFNIT1JUU1dBUDMyKCh2aWRlb19mb250X2RyYXdfdGFibGUxNVtiaXRzID4+IDZdICYgZW9yeCkgXiBiZ3gpOworCSAgICAoKHUzMiAqKWRlc3QpWzFdID0gU0hPUlRTV0FQMzIoKHZpZGVvX2ZvbnRfZHJhd190YWJsZTE1W2JpdHMgPj4gNCAmIDNdICYgZW9yeCkgXiBiZ3gpOworCSAgICAoKHUzMiAqKWRlc3QpWzJdID0gU0hPUlRTV0FQMzIoKHZpZGVvX2ZvbnRfZHJhd190YWJsZTE1W2JpdHMgPj4gMiAmIDNdICYgZW9yeCkgXiBiZ3gpOworCSAgICAoKHUzMiAqKWRlc3QpWzNdID0gU0hPUlRTV0FQMzIoKHZpZGVvX2ZvbnRfZHJhd190YWJsZTE1W2JpdHMgJiAzXSAmIGVvcngpIF4gYmd4KTsKKwkgICAgfQorCSAgICBkZXN0MCArPSBWSURFT19GT05UX1dJRFRIICogVklERU9fUElYRUxfU0laRTsKKwkgICAgcysrIDsKKwl9CisJYnJlYWs7CiAKICAgICBjYXNlIEdERl8xNkJJVF81NjVSR0I6Ci0gICAgICAgIHdoaWxlIChjb3VudC0tKQotICAgICAgICB7Ci0gICAgICAgIGMgPSAqcyA7Ci0gICAgICAgIGNkYXQgPSB2aWRlb19mb250ZGF0YSArIGMgKiBWSURFT19GT05UX0hFSUdIVDsKLSAgICAgICAgZm9yIChyb3dzID0gVklERU9fRk9OVF9IRUlHSFQsIGRlc3QgPSBkZXN0MDsgcm93cy0tOyBkZXN0ICs9IFZJREVPX0xJTkVfTEVOKQotICAgICAgICB7Ci0gICAgICAgICAgICB1OCBiaXRzID0gKmNkYXQrKzsKLSAgICAgICAgICAgICgodTMyICopZGVzdClbMF0gPSBTSE9SVFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMTZbYml0cyA+PiA2XSAmIGVvcngpIF4gYmd4KTsKLSAgICAgICAgICAgICgodTMyICopZGVzdClbMV0gPSBTSE9SVFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMTZbYml0cyA+PiA0ICYgM10gJiBlb3J4KSBeIGJneCk7Ci0gICAgICAgICAgICAoKHUzMiAqKWRlc3QpWzJdID0gU0hPUlRTV0FQMzIoKHZpZGVvX2ZvbnRfZHJhd190YWJsZTE2W2JpdHMgPj4gMiAmIDNdICYgZW9yeCkgXiBiZ3gpOwotICAgICAgICAgICAgKCh1MzIgKilkZXN0KVszXSA9IFNIT1JUU1dBUDMyKCh2aWRlb19mb250X2RyYXdfdGFibGUxNltiaXRzICYgM10gJiBlb3J4KSBeIGJneCk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdDAgKz0gVklERU9fRk9OVF9XSURUSCAqIFZJREVPX1BJWEVMX1NJWkU7Ci0gICAgICAgIHMrKyA7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisJd2hpbGUgKGNvdW50LS0pCisJeworCWMgPSAqcyA7CisJY2RhdCA9IHZpZGVvX2ZvbnRkYXRhICsgYyAqIFZJREVPX0ZPTlRfSEVJR0hUOworCWZvciAocm93cyA9IFZJREVPX0ZPTlRfSEVJR0hULCBkZXN0ID0gZGVzdDA7IHJvd3MtLTsgZGVzdCArPSBWSURFT19MSU5FX0xFTikKKwl7CisJICAgIHU4IGJpdHMgPSAqY2RhdCsrOworCSAgICAoKHUzMiAqKWRlc3QpWzBdID0gU0hPUlRTV0FQMzIoKHZpZGVvX2ZvbnRfZHJhd190YWJsZTE2W2JpdHMgPj4gNl0gJiBlb3J4KSBeIGJneCk7CisJICAgICgodTMyICopZGVzdClbMV0gPSBTSE9SVFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMTZbYml0cyA+PiA0ICYgM10gJiBlb3J4KSBeIGJneCk7CisJICAgICgodTMyICopZGVzdClbMl0gPSBTSE9SVFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMTZbYml0cyA+PiAyICYgM10gJiBlb3J4KSBeIGJneCk7CisJICAgICgodTMyICopZGVzdClbM10gPSBTSE9SVFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMTZbYml0cyAmIDNdICYgZW9yeCkgXiBiZ3gpOworCX0KKwlkZXN0MCArPSBWSURFT19GT05UX1dJRFRIICogVklERU9fUElYRUxfU0laRTsKKwlzKysgOworCX0KKwlicmVhazsKIAogICAgIGNhc2UgR0RGXzMyQklUX1g4ODhSR0I6Ci0gICAgICAgIHdoaWxlIChjb3VudC0tKQotICAgICAgICB7Ci0gICAgICAgIGMgPSAqcyA7Ci0gICAgICAgIGNkYXQgPSB2aWRlb19mb250ZGF0YSArIGMgKiBWSURFT19GT05UX0hFSUdIVDsKLSAgICAgICAgZm9yIChyb3dzID0gVklERU9fRk9OVF9IRUlHSFQsIGRlc3QgPSBkZXN0MDsgcm93cy0tOyBkZXN0ICs9IFZJREVPX0xJTkVfTEVOKQotICAgICAgICB7Ci0gICAgICAgICAgICB1OCBiaXRzID0gKmNkYXQrKzsKLSAgICAgICAgICAgICgodTMyICopZGVzdClbMF0gPSBTV0FQMzIoKHZpZGVvX2ZvbnRfZHJhd190YWJsZTMyW2JpdHMgPj4gNF1bMF0gJiBlb3J4KSBeIGJneCk7Ci0gICAgICAgICAgICAoKHUzMiAqKWRlc3QpWzFdID0gU1dBUDMyKCh2aWRlb19mb250X2RyYXdfdGFibGUzMltiaXRzID4+IDRdWzFdICYgZW9yeCkgXiBiZ3gpOwotICAgICAgICAgICAgKCh1MzIgKilkZXN0KVsyXSA9IFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMzJbYml0cyA+PiA0XVsyXSAmIGVvcngpIF4gYmd4KTsKLSAgICAgICAgICAgICgodTMyICopZGVzdClbM10gPSBTV0FQMzIoKHZpZGVvX2ZvbnRfZHJhd190YWJsZTMyW2JpdHMgPj4gNF1bM10gJiBlb3J4KSBeIGJneCk7Ci0gICAgICAgICAgICAoKHUzMiAqKWRlc3QpWzRdID0gU1dBUDMyKCh2aWRlb19mb250X2RyYXdfdGFibGUzMltiaXRzICYgMTVdWzBdICYgZW9yeCkgXiBiZ3gpOwotICAgICAgICAgICAgKCh1MzIgKilkZXN0KVs1XSA9IFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMzJbYml0cyAmIDE1XVsxXSAmIGVvcngpIF4gYmd4KTsKLSAgICAgICAgICAgICgodTMyICopZGVzdClbNl0gPSBTV0FQMzIoKHZpZGVvX2ZvbnRfZHJhd190YWJsZTMyW2JpdHMgJiAxNV1bMl0gJiBlb3J4KSBeIGJneCk7Ci0gICAgICAgICAgICAoKHUzMiAqKWRlc3QpWzddID0gU1dBUDMyKCh2aWRlb19mb250X2RyYXdfdGFibGUzMltiaXRzICYgMTVdWzNdICYgZW9yeCkgXiBiZ3gpOwotICAgICAgICB9Ci0gICAgICAgIGRlc3QwICs9IFZJREVPX0ZPTlRfV0lEVEggKiBWSURFT19QSVhFTF9TSVpFOwotICAgICAgICBzKysgOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworCXdoaWxlIChjb3VudC0tKQorCXsKKwljID0gKnMgOworCWNkYXQgPSB2aWRlb19mb250ZGF0YSArIGMgKiBWSURFT19GT05UX0hFSUdIVDsKKwlmb3IgKHJvd3MgPSBWSURFT19GT05UX0hFSUdIVCwgZGVzdCA9IGRlc3QwOyByb3dzLS07IGRlc3QgKz0gVklERU9fTElORV9MRU4pCisJeworCSAgICB1OCBiaXRzID0gKmNkYXQrKzsKKwkgICAgKCh1MzIgKilkZXN0KVswXSA9IFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMzJbYml0cyA+PiA0XVswXSAmIGVvcngpIF4gYmd4KTsKKwkgICAgKCh1MzIgKilkZXN0KVsxXSA9IFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMzJbYml0cyA+PiA0XVsxXSAmIGVvcngpIF4gYmd4KTsKKwkgICAgKCh1MzIgKilkZXN0KVsyXSA9IFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMzJbYml0cyA+PiA0XVsyXSAmIGVvcngpIF4gYmd4KTsKKwkgICAgKCh1MzIgKilkZXN0KVszXSA9IFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMzJbYml0cyA+PiA0XVszXSAmIGVvcngpIF4gYmd4KTsKKwkgICAgKCh1MzIgKilkZXN0KVs0XSA9IFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMzJbYml0cyAmIDE1XVswXSAmIGVvcngpIF4gYmd4KTsKKwkgICAgKCh1MzIgKilkZXN0KVs1XSA9IFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMzJbYml0cyAmIDE1XVsxXSAmIGVvcngpIF4gYmd4KTsKKwkgICAgKCh1MzIgKilkZXN0KVs2XSA9IFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMzJbYml0cyAmIDE1XVsyXSAmIGVvcngpIF4gYmd4KTsKKwkgICAgKCh1MzIgKilkZXN0KVs3XSA9IFNXQVAzMigodmlkZW9fZm9udF9kcmF3X3RhYmxlMzJbYml0cyAmIDE1XVszXSAmIGVvcngpIF4gYmd4KTsKKwl9CisJZGVzdDAgKz0gVklERU9fRk9OVF9XSURUSCAqIFZJREVPX1BJWEVMX1NJWkU7CisJcysrIDsKKwl9CisJYnJlYWs7CiAKICAgICBjYXNlIEdERl8yNEJJVF84ODhSR0I6Ci0gICAgICAgIHdoaWxlIChjb3VudC0tKQotICAgICAgICB7Ci0gICAgICAgIGMgPSAqcyA7Ci0gICAgICAgIGNkYXQgPSB2aWRlb19mb250ZGF0YSArIGMgKiBWSURFT19GT05UX0hFSUdIVDsKLSAgICAgICAgZm9yIChyb3dzID0gVklERU9fRk9OVF9IRUlHSFQsIGRlc3QgPSBkZXN0MDsgcm93cy0tOyBkZXN0ICs9IFZJREVPX0xJTkVfTEVOKQotICAgICAgICB7Ci0gICAgICAgICAgICB1OCBiaXRzID0gKmNkYXQrKzsKLSAgICAgICAgICAgICgodTMyICopZGVzdClbMF0gPSAodmlkZW9fZm9udF9kcmF3X3RhYmxlMjRbYml0cyA+PiA0XVswXSAmIGVvcngpIF4gYmd4OwotICAgICAgICAgICAgKCh1MzIgKilkZXN0KVsxXSA9ICh2aWRlb19mb250X2RyYXdfdGFibGUyNFtiaXRzID4+IDRdWzFdICYgZW9yeCkgXiBiZ3g7Ci0gICAgICAgICAgICAoKHUzMiAqKWRlc3QpWzJdID0gKHZpZGVvX2ZvbnRfZHJhd190YWJsZTI0W2JpdHMgPj4gNF1bMl0gJiBlb3J4KSBeIGJneDsKLSAgICAgICAgICAgICgodTMyICopZGVzdClbM10gPSAodmlkZW9fZm9udF9kcmF3X3RhYmxlMjRbYml0cyAmIDE1XVswXSAmIGVvcngpIF4gYmd4OwotICAgICAgICAgICAgKCh1MzIgKilkZXN0KVs0XSA9ICh2aWRlb19mb250X2RyYXdfdGFibGUyNFtiaXRzICYgMTVdWzFdICYgZW9yeCkgXiBiZ3g7Ci0gICAgICAgICAgICAoKHUzMiAqKWRlc3QpWzVdID0gKHZpZGVvX2ZvbnRfZHJhd190YWJsZTI0W2JpdHMgJiAxNV1bMl0gJiBlb3J4KSBeIGJneDsKLSAgICAgICAgfQotICAgICAgICBkZXN0MCArPSBWSURFT19GT05UX1dJRFRIICogVklERU9fUElYRUxfU0laRTsKLSAgICAgICAgcysrIDsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwl3aGlsZSAoY291bnQtLSkKKwl7CisJYyA9ICpzIDsKKwljZGF0ID0gdmlkZW9fZm9udGRhdGEgKyBjICogVklERU9fRk9OVF9IRUlHSFQ7CisJZm9yIChyb3dzID0gVklERU9fRk9OVF9IRUlHSFQsIGRlc3QgPSBkZXN0MDsgcm93cy0tOyBkZXN0ICs9IFZJREVPX0xJTkVfTEVOKQorCXsKKwkgICAgdTggYml0cyA9ICpjZGF0Kys7CisJICAgICgodTMyICopZGVzdClbMF0gPSAodmlkZW9fZm9udF9kcmF3X3RhYmxlMjRbYml0cyA+PiA0XVswXSAmIGVvcngpIF4gYmd4OworCSAgICAoKHUzMiAqKWRlc3QpWzFdID0gKHZpZGVvX2ZvbnRfZHJhd190YWJsZTI0W2JpdHMgPj4gNF1bMV0gJiBlb3J4KSBeIGJneDsKKwkgICAgKCh1MzIgKilkZXN0KVsyXSA9ICh2aWRlb19mb250X2RyYXdfdGFibGUyNFtiaXRzID4+IDRdWzJdICYgZW9yeCkgXiBiZ3g7CisJICAgICgodTMyICopZGVzdClbM10gPSAodmlkZW9fZm9udF9kcmF3X3RhYmxlMjRbYml0cyAmIDE1XVswXSAmIGVvcngpIF4gYmd4OworCSAgICAoKHUzMiAqKWRlc3QpWzRdID0gKHZpZGVvX2ZvbnRfZHJhd190YWJsZTI0W2JpdHMgJiAxNV1bMV0gJiBlb3J4KSBeIGJneDsKKwkgICAgKCh1MzIgKilkZXN0KVs1XSA9ICh2aWRlb19mb250X2RyYXdfdGFibGUyNFtiaXRzICYgMTVdWzJdICYgZW9yeCkgXiBiZ3g7CisJfQorCWRlc3QwICs9IFZJREVPX0ZPTlRfV0lEVEggKiBWSURFT19QSVhFTF9TSVpFOworCXMrKyA7CisJfQorCWJyZWFrOwogICAgIH0KIH0KIApAQCAtNTAwLDcgKzUwMCw3IEBACiAgICAgZW9yeCA9IGZneCBeIGJneDsKICAgICAvKiBkcmF3IGN1cnNvciAqLwogICAgIHZpZGVvX3B1dGNoYXIgKGNvbnNvbGVfY29sICogVklERU9fRk9OVF9XSURUSCwKLSAgICAgICAgICAgICAgICAgICBjb25zb2xlX3JvdyAqIFZJREVPX0ZPTlRfSEVJR0hULCAnICcpOworCQkgICBjb25zb2xlX3JvdyAqIFZJREVPX0ZPTlRfSEVJR0hULCAnICcpOwogICAgIC8qIHJlc3RvcmUgZHJhd2luZyBjb2xvcnMgKi8KICAgICBlb3J4ID0gZmd4OwogICAgIGZneCAgPSBiZ3g7CkBAIC01MjQsMjQgKzUyNCwyNCBAQAogCiAgICAgc3ByaW50ZihpbmZvLCAiICUwMmQ6JTAyZDolMDJkICIsIHRtLnRtX2hvdXIsIHRtLnRtX21pbiwgdG0udG1fc2VjKTsKICAgICB2aWRlb19kcmF3c3RyaW5nKFZJREVPX1ZJU0lCTEVfQ09MUy0xMCpWSURFT19GT05UX1dJRFRILAotICAgICAgICAgICAgIFZJREVPX0lORk9fWSwgaW5mbyk7CisJICAgICBWSURFT19JTkZPX1ksIGluZm8pOwogCiAgICAgc3ByaW50ZihpbmZvLCAiJTAyZC4lMDJkLiUwNGQiLCB0bS50bV9tZGF5LCB0bS50bV9tb24sIHRtLnRtX3llYXIpOwogICAgIHZpZGVvX2RyYXdzdHJpbmcoVklERU9fVklTSUJMRV9DT0xTLTEwKlZJREVPX0ZPTlRfV0lEVEgsCi0gICAgICAgICAgICAgVklERU9fSU5GT19ZKzEqVklERU9fRk9OVF9IRUlHSFQsIGluZm8pOworCSAgICAgVklERU9fSU5GT19ZKzEqVklERU9fRk9OVF9IRUlHSFQsIGluZm8pOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKHN0YXRlICYmIChsYXN0X3N0YXRlICE9IHN0YXRlKSkKICAgICB7Ci0gICAgICAgIHZpZGVvX3NldF9jdXJzb3IoKTsKKwl2aWRlb19zZXRfY3Vyc29yKCk7CiAgICAgfQogCiAgICAgaWYgKCFzdGF0ZSAmJiAobGFzdF9zdGF0ZSAhPSBzdGF0ZSkpCiAgICAgewotICAgICAgICAvKiBjbGVhciBjdXJzb3IgKi8KLSAgICAgICAgdmlkZW9fcHV0Y2hhciAoY29uc29sZV9jb2wgKiBWSURFT19GT05UX1dJRFRILAotICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlX3JvdyAqIFZJREVPX0ZPTlRfSEVJR0hULCAnICcpOworCS8qIGNsZWFyIGN1cnNvciAqLworCXZpZGVvX3B1dGNoYXIgKGNvbnNvbGVfY29sICogVklERU9fRk9OVF9XSURUSCwKKwkJICAgICAgIGNvbnNvbGVfcm93ICogVklERU9fRk9OVF9IRUlHSFQsICcgJyk7CiAgICAgfQogCiAgICAgbGFzdF9zdGF0ZSA9IHN0YXRlOwpAQCAtNTU0LDcgKzU1NCw3IEBACiBzdGF0aWMgdm9pZCBtZW1zZXRsIChpbnQgKnAsIGludCBjLCBpbnQgdikKIHsKICAgICB3aGlsZSAoYy0tKQotICAgICAgICAqKHArKykgPSB2OworCSoocCsrKSA9IHY7CiB9CiAjZW5kaWYKIApAQCAtNTY0LDcgKzU2NCw3IEBACiBzdGF0aWMgdm9pZCBtZW1jcHlsIChpbnQgKmQsIGludCAqcywgaW50IGMpCiB7CiAgICAgd2hpbGUgKGMtLSkKLSAgICAgICAgKihkKyspID0gKihzKyspOworCSooZCsrKSA9ICoocysrKTsKIH0KICNlbmRpZgogCkBAIC02MTIsMTMgKzYxMiwxMyBAQAogCiAgICAgaWYgKGNvbnNvbGVfY29sIDwgMCkKICAgICB7Ci0gICAgICAgIGNvbnNvbGVfY29sID0gQ09OU09MRV9DT0xTIC0gMTsKLSAgICAgICAgY29uc29sZV9yb3ctLTsKLSAgICAgICAgaWYgKGNvbnNvbGVfcm93IDwgMCkKLSAgICAgICAgY29uc29sZV9yb3cgPSAwOworCWNvbnNvbGVfY29sID0gQ09OU09MRV9DT0xTIC0gMTsKKwljb25zb2xlX3Jvdy0tOworCWlmIChjb25zb2xlX3JvdyA8IDApCisJY29uc29sZV9yb3cgPSAwOwogICAgIH0KICAgICB2aWRlb19wdXRjaGFyIChjb25zb2xlX2NvbCAqIFZJREVPX0ZPTlRfV0lEVEgsCi0gICAgICAgICAgICAgICAgICAgY29uc29sZV9yb3cgKiBWSURFT19GT05UX0hFSUdIVCwgJyAnKTsKKwkJICAgY29uc29sZV9yb3cgKiBWSURFT19GT05UX0hFSUdIVCwgJyAnKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjQ3LDM5ICs2NDcsMzggQEAKICAgICBzd2l0Y2ggKGMpCiAgICAgewogICAgIGNhc2UgMTM6IC8qIGlnbm9yZSAqLwotICAgICAgICBicmVhazsKKwlicmVhazsKIAogICAgIGNhc2UgJ1xuJzogLyogbmV4dCBsaW5lICovCi0gICAgICAgIGNvbnNvbGVfbmV3bGluZSgpOwotICAgICAgICBicmVhazsKKwljb25zb2xlX25ld2xpbmUoKTsKKwlicmVhazsKIAogICAgIGNhc2UgOTogICAgLyogdGFiIDggKi8KLSAgICAgICAgQ1VSU09SX09GRgotICAgICAgICBjb25zb2xlX2NvbCB8PSAgMHgwMDA4OwotICAgICAgICBjb25zb2xlX2NvbCAmPSB+MHgwMDA3OworCUNVUlNPUl9PRkYKKwljb25zb2xlX2NvbCB8PSAgMHgwMDA4OworCWNvbnNvbGVfY29sICY9IH4weDAwMDc7CiAKLSAgICAgICAgaWYgKGNvbnNvbGVfY29sID49IENPTlNPTEVfQ09MUykKLSAgICAgICAgICAgIGNvbnNvbGVfbmV3bGluZSgpOwotICAgICAgICBicmVhazsKKwlpZiAoY29uc29sZV9jb2wgPj0gQ09OU09MRV9DT0xTKQorCSAgICBjb25zb2xlX25ld2xpbmUoKTsKKwlicmVhazsKIAogICAgIGNhc2UgODogICAgLyogYmFja3NwYWNlICovCi0gICAgICAgIGNvbnNvbGVfYmFjaygpOwotICAgICAgICBicmVhazsKKwljb25zb2xlX2JhY2soKTsKKwlicmVhazsKIAogICAgIGRlZmF1bHQ6IC8qIGRyYXcgdGhlIGNoYXIgKi8KLSAgICAgICAgdmlkZW9fcHV0Y2hhciAoY29uc29sZV9jb2wgKiBWSURFT19GT05UX1dJRFRILAotICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlX3JvdyAqIFZJREVPX0ZPTlRfSEVJR0hULCBjKTsKLSAgICAgICAgY29uc29sZV9jb2wrKyA7CisJdmlkZW9fcHV0Y2hhciAoY29uc29sZV9jb2wgKiBWSURFT19GT05UX1dJRFRILAorCQkgICAgICAgY29uc29sZV9yb3cgKiBWSURFT19GT05UX0hFSUdIVCwgYyk7CisJY29uc29sZV9jb2wrKyA7CiAKLSAgICAgICAgLyogY2hlY2sgZm9yIG5ld2xpbmUgKi8KLSAgICAgICAgaWYgKGNvbnNvbGVfY29sID49IENPTlNPTEVfQ09MUykKLSAgICAgICAgICAgIGNvbnNvbGVfbmV3bGluZSgpOworCS8qIGNoZWNrIGZvciBuZXdsaW5lICovCisJaWYgKGNvbnNvbGVfY29sID49IENPTlNPTEVfQ09MUykKKwkgICAgY29uc29sZV9uZXdsaW5lKCk7CiAgICAgfQogICAgIENVUlNPUl9TRVQKIH0KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdm9pZCB2aWRlb19wdXRzIChjb25zdCBjaGFyICpzKQpAQCAtNjg3LDcgKzY4Niw3IEBACiAgICAgaW50IGNvdW50ID0gc3RybGVuKHMpOwogCiAgICAgd2hpbGUoY291bnQtLSkKLSAgICAgICAgdmlkZW9fcHV0YygqcysrKTsKKwl2aWRlb19wdXRjKCpzKyspOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02OTcsMjUgKzY5NiwyNSBAQAogewogCiAgICAgaW50IHNraXAgPSAod2lkdGggLSBWSURFT19MT0dPX1dJRFRIKSAqIFZJREVPX1BJWEVMX1NJWkUsCi0gICAgICAgIHhjb3VudCwgaSwKLSAgICAgICAgeWNvdW50ID0gVklERU9fTE9HT19IRUlHSFQ7CisJeGNvdW50LCBpLAorCXljb3VudCA9IFZJREVPX0xPR09fSEVJR0hUOwogICAgIHVuc2lnbmVkIGNoYXIKLSAgICAgICAgKnNvdXJjZSwKLSAgICAgICAgKmRlc3QgICA9ICh1bnNpZ25lZCBjaGFyICopIHNjcmVlbiArICgoeSAqIHdpZHRoICogVklERU9fUElYRUxfU0laRSkgKyB4KSwKLSAgICAgICAgciwgZywgYiwgKmxvZ29fcmVkLCAqbG9nb19ibHVlLCAqbG9nb19ncmVlbjsKKwkqc291cmNlLAorCSpkZXN0ICAgPSAodW5zaWduZWQgY2hhciAqKSBzY3JlZW4gKyAoKHkgKiB3aWR0aCAqIFZJREVPX1BJWEVMX1NJWkUpICsgeCksCisJciwgZywgYiwgKmxvZ29fcmVkLCAqbG9nb19ibHVlLCAqbG9nb19ncmVlbjsKIAogI2lmZGVmIENPTkZJR19WSURFT19CTVBfTE9HTwogICAgIHNvdXJjZSA9IGJtcF9sb2dvX2JpdG1hcDsKLSAgICAKKwogICAgIC8qIEFsbG9jYXRlIHRlbXBvcmFyeSBzcGFjZSBmb3IgY29tcHV0aW5nIGNvbG9ybWFwICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGxvZ29fcmVkID0gbWFsbG9jIChCTVBfTE9HT19DT0xPUlMpOwogICAgIGxvZ29fZ3JlZW4gPSBtYWxsb2MgKEJNUF9MT0dPX0NPTE9SUyk7CiAgICAgbG9nb19ibHVlID0gbWFsbG9jIChCTVBfTE9HT19DT0xPUlMpOwogICAgIC8qIENvbXB1dGUgY29sb3IgbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBWSURFT19MT0dPX0NPTE9SUzsgaSsrKSB7Ci0gICAgICAgIGxvZ29fcmVkIFtpXSA9IChibXBfbG9nb19wYWxldHRlIFtpXSAmIDB4MGYwMCkgPj4gNDsKLSAgICAgICAgbG9nb19ncmVlbiBbaV0gPSAoYm1wX2xvZ29fcGFsZXR0ZSBbaV0gJiAweDAwZjApOwotICAgICAgICBsb2dvX2JsdWUgW2ldID0gKGJtcF9sb2dvX3BhbGV0dGUgW2ldICYgMHgwMDBmKSA8PCA0OworCWxvZ29fcmVkIFtpXSA9IChibXBfbG9nb19wYWxldHRlIFtpXSAmIDB4MGYwMCkgPj4gNDsKKwlsb2dvX2dyZWVuIFtpXSA9IChibXBfbG9nb19wYWxldHRlIFtpXSAmIDB4MDBmMCk7CisJbG9nb19ibHVlIFtpXSA9IChibXBfbG9nb19wYWxldHRlIFtpXSAmIDB4MDAwZikgPDwgNDsKICAgICB9CiAjZWxzZQogICAgIHNvdXJjZSA9IGxpbnV4X2xvZ287CkBAIC03MjMsNjEgKzcyMiw2MSBAQAogICAgIGxvZ29fZ3JlZW4gPSBsaW51eF9sb2dvX2dyZWVuOwogICAgIGxvZ29fYmx1ZSA9IGxpbnV4X2xvZ29fYmx1ZTsKICNlbmRpZgotICAgIAorCiAgICAgaWYgKFZJREVPX0RBVEFfRk9STUFUID09IEdERl9fOEJJVF9JTkRFWCkKICAgICB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBWSURFT19MT0dPX0NPTE9SUzsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB2aWRlb19zZXRfbHV0IChpICsgVklERU9fTE9HT19MVVRfT0ZGU0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nb19yZWQgW2ldLCBsb2dvX2dyZWVuIFtpXSwgbG9nb19ibHVlIFtpXSk7Ci0gICAgICAgIH0KKwlmb3IgKGkgPSAwOyBpIDwgVklERU9fTE9HT19DT0xPUlM7IGkrKykKKwl7CisJICAgIHZpZGVvX3NldF9sdXQgKGkgKyBWSURFT19MT0dPX0xVVF9PRkZTRVQsCisJCQkgICBsb2dvX3JlZCBbaV0sIGxvZ29fZ3JlZW4gW2ldLCBsb2dvX2JsdWUgW2ldKTsKKwl9CiAgICAgfQogCiAgICAgd2hpbGUgKHljb3VudC0tKQogICAgIHsKLSAgICAgICAgeGNvdW50ID0gVklERU9fTE9HT19XSURUSDsKLSAgICAgICAgd2hpbGUgKHhjb3VudC0tKQotICAgICAgICB7Ci0gICAgICAgICAgICByID0gbG9nb19yZWQgWypzb3VyY2UgLSBWSURFT19MT0dPX0xVVF9PRkZTRVRdOwotICAgICAgICAgICAgZyA9IGxvZ29fZ3JlZW4gWypzb3VyY2UgLSBWSURFT19MT0dPX0xVVF9PRkZTRVRdOwotICAgICAgICAgICAgYiA9IGxvZ29fYmx1ZSBbKnNvdXJjZSAtIFZJREVPX0xPR09fTFVUX09GRlNFVF07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoVklERU9fREFUQV9GT1JNQVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIEdERl9fOEJJVF9JTkRFWDoKLSAgICAgICAgICAgICAgICAqZGVzdCA9ICpzb3VyY2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdERl9fOEJJVF8zMzJSR0I6Ci0gICAgICAgICAgICAgICAgKmRlc3QgPSAoKHI+PjUpPDw1KSB8ICgoZz4+NSk8PDIpIHwgKGI+PjYpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHREZfMTVCSVRfNTU1UkdCOgotICAgICAgICAgICAgICAgICoodW5zaWduZWQgc2hvcnQgKilkZXN0ID0KLSAgICAgICAgICAgICAgICAgICAgU1dBUDE2KCh1bnNpZ25lZCBzaG9ydCkoKChyPj4zKTw8MTApIHwgKChnPj4zKTw8NSkgfCAoYj4+MykpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR0RGXzE2QklUXzU2NVJHQjoKLSAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIHNob3J0ICopZGVzdCA9Ci0gICAgICAgICAgICAgICAgICAgIFNXQVAxNigodW5zaWduZWQgc2hvcnQpKCgocj4+Myk8PDExKSB8ICgoZz4+Mik8PDUpIHwgKGI+PjMpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEdERl8zMkJJVF9YODg4UkdCOgotICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAgKilkZXN0ID0KLSAgICAgICAgICAgICAgICAgICAgU1dBUDMyKCh1bnNpZ25lZCBsb25nKSgocjw8MTYpIHwgKGc8PDgpIHwgYikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBHREZfMjRCSVRfODg4UkdCOgorCXhjb3VudCA9IFZJREVPX0xPR09fV0lEVEg7CisJd2hpbGUgKHhjb3VudC0tKQorCXsKKwkgICAgciA9IGxvZ29fcmVkIFsqc291cmNlIC0gVklERU9fTE9HT19MVVRfT0ZGU0VUXTsKKwkgICAgZyA9IGxvZ29fZ3JlZW4gWypzb3VyY2UgLSBWSURFT19MT0dPX0xVVF9PRkZTRVRdOworCSAgICBiID0gbG9nb19ibHVlIFsqc291cmNlIC0gVklERU9fTE9HT19MVVRfT0ZGU0VUXTsKKworCSAgICBzd2l0Y2ggKFZJREVPX0RBVEFfRk9STUFUKQorCSAgICB7CisJICAgIGNhc2UgR0RGX184QklUX0lOREVYOgorCQkqZGVzdCA9ICpzb3VyY2U7CisJCWJyZWFrOworCSAgICBjYXNlIEdERl9fOEJJVF8zMzJSR0I6CisJCSpkZXN0ID0gKChyPj41KTw8NSkgfCAoKGc+PjUpPDwyKSB8IChiPj42KTsKKwkJYnJlYWs7CisJICAgIGNhc2UgR0RGXzE1QklUXzU1NVJHQjoKKwkJKih1bnNpZ25lZCBzaG9ydCAqKWRlc3QgPQorCQkgICAgU1dBUDE2KCh1bnNpZ25lZCBzaG9ydCkoKChyPj4zKTw8MTApIHwgKChnPj4zKTw8NSkgfCAoYj4+MykpKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgR0RGXzE2QklUXzU2NVJHQjoKKwkJKih1bnNpZ25lZCBzaG9ydCAqKWRlc3QgPQorCQkgICAgU1dBUDE2KCh1bnNpZ25lZCBzaG9ydCkoKChyPj4zKTw8MTEpIHwgKChnPj4yKTw8NSkgfCAoYj4+MykpKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgR0RGXzMyQklUX1g4ODhSR0I6CisJCSoodW5zaWduZWQgbG9uZyAgKilkZXN0ID0KKwkJICAgIFNXQVAzMigodW5zaWduZWQgbG9uZykoKHI8PDE2KSB8IChnPDw4KSB8IGIpKTsKKwkJYnJlYWs7CisJICAgIGNhc2UgR0RGXzI0QklUXzg4OFJHQjoKICNpZmRlZiBWSURFT19GQl9MSVRUTEVfRU5ESUFOCi0gICAgICAgICAgICAgICAgZGVzdFswXSA9IGI7Ci0gICAgICAgICAgICAgICAgZGVzdFsxXSA9IGc7Ci0gICAgICAgICAgICAgICAgZGVzdFsyXSA9IHI7CisJCWRlc3RbMF0gPSBiOworCQlkZXN0WzFdID0gZzsKKwkJZGVzdFsyXSA9IHI7CiAjZWxzZQotICAgICAgICAgICAgICAgIGRlc3RbMF0gPSByOwotICAgICAgICAgICAgICAgIGRlc3RbMV0gPSBnOwotICAgICAgICAgICAgICAgIGRlc3RbMl0gPSBiOworCQlkZXN0WzBdID0gcjsKKwkJZGVzdFsxXSA9IGc7CisJCWRlc3RbMl0gPSBiOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzb3VyY2UrKzsKLSAgICAgICAgICAgIGRlc3QgKz0gVklERU9fUElYRUxfU0laRTsKLSAgICAgICAgfQotICAgICAgICBkZXN0ICs9IHNraXA7CisJCWJyZWFrOworCSAgICB9CisJICAgIHNvdXJjZSsrOworCSAgICBkZXN0ICs9IFZJREVPX1BJWEVMX1NJWkU7CisJfQorCWRlc3QgKz0gc2tpcDsKICAgICB9CiAjaWZkZWYgQ09ORklHX1ZJREVPX0JNUF9MT0dPCiAgICAgZnJlZSAobG9nb19yZWQpOwpAQCAtODA0LDEwICs4MDMsMTAgQEAKIAogICAgIGZvciAoaSA9IDE7IGkgPCBuOyBpKyspCiAgICAgewotICAgICAgICB2aWRlb19nZXRfaW5mb19zdHIgKGksIGluZm8pOwotICAgICAgICBpZiAoKmluZm8pCi0gICAgICAgIHZpZGVvX2RyYXdzdHJpbmcgKFZJREVPX0lORk9fWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVklERU9fSU5GT19ZICsgaSpWSURFT19GT05UX0hFSUdIVCwgaW5mbyk7CisJdmlkZW9fZ2V0X2luZm9fc3RyIChpLCBpbmZvKTsKKwlpZiAoKmluZm8pCisJdmlkZW9fZHJhd3N0cmluZyAoVklERU9fSU5GT19YLAorCQkJICBWSURFT19JTkZPX1kgKyBpKlZJREVPX0ZPTlRfSEVJR0hULCBpbmZvKTsKICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC04MjQsNyArODIzLDcgQEAKICAgICB1bnNpZ25lZCBjaGFyIGNvbG9yODsKIAogICAgIGlmICgocEdEPXZpZGVvX2h3X2luaXQoKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKIAogICAgIHZpZGVvX2ZiX2FkZHJlc3MgPSAodm9pZCopVklERU9fRkJfQURSUzsKICNpZmRlZiBDT05GSUdfVklERU9fSFdfQ1VSU09SCkBAIC04MzUsMzcgKzgzNCwzNyBAQAogICAgIHN3aXRjaCAoVklERU9fREFUQV9GT1JNQVQpCiAgICAgewogICAgIGNhc2UgR0RGX184QklUX0lOREVYOgotICAgICAgICB2aWRlb19zZXRfbHV0ICgweDAxLCBDT05TT0xFX0ZHX0NPTCwgQ09OU09MRV9GR19DT0wsIENPTlNPTEVfRkdfQ09MKTsKLSAgICAgICAgdmlkZW9fc2V0X2x1dCAoMHgwMCwgQ09OU09MRV9CR19DT0wsIENPTlNPTEVfQkdfQ09MLCBDT05TT0xFX0JHX0NPTCk7Ci0gICAgICAgIGZneCA9IDB4MDEwMTAxMDE7Ci0gICAgICAgIGJneCA9IDB4MDAwMDAwMDA7Ci0gICAgICAgIGJyZWFrOworCXZpZGVvX3NldF9sdXQgKDB4MDEsIENPTlNPTEVfRkdfQ09MLCBDT05TT0xFX0ZHX0NPTCwgQ09OU09MRV9GR19DT0wpOworCXZpZGVvX3NldF9sdXQgKDB4MDAsIENPTlNPTEVfQkdfQ09MLCBDT05TT0xFX0JHX0NPTCwgQ09OU09MRV9CR19DT0wpOworCWZneCA9IDB4MDEwMTAxMDE7CisJYmd4ID0gMHgwMDAwMDAwMDsKKwlicmVhazsKICAgICBjYXNlIEdERl9fOEJJVF8zMzJSR0I6Ci0gICAgICAgIGNvbG9yOCA9ICgoQ09OU09MRV9GR19DT0wgJiAweGUwKSB8ICgoQ09OU09MRV9GR19DT0w+PjMpICYgMHgxYykgfCBDT05TT0xFX0ZHX0NPTD4+Nik7Ci0gICAgICAgIGZneCA9IChjb2xvcjg8PDI0KSB8IChjb2xvcjg8PDE2KSB8IChjb2xvcjg8PDgpIHwgY29sb3I4OwotICAgICAgICBjb2xvcjggPSAoKENPTlNPTEVfQkdfQ09MICYgMHhlMCkgfCAoKENPTlNPTEVfQkdfQ09MPj4zKSAmIDB4MWMpIHwgQ09OU09MRV9CR19DT0w+PjYpOwotICAgICAgICBiZ3ggPSAoY29sb3I4PDwyNCkgfCAoY29sb3I4PDwxNikgfCAoY29sb3I4PDw4KSB8IGNvbG9yODsKLSAgICAgICAgYnJlYWs7CisJY29sb3I4ID0gKChDT05TT0xFX0ZHX0NPTCAmIDB4ZTApIHwgKChDT05TT0xFX0ZHX0NPTD4+MykgJiAweDFjKSB8IENPTlNPTEVfRkdfQ09MPj42KTsKKwlmZ3ggPSAoY29sb3I4PDwyNCkgfCAoY29sb3I4PDwxNikgfCAoY29sb3I4PDw4KSB8IGNvbG9yODsKKwljb2xvcjggPSAoKENPTlNPTEVfQkdfQ09MICYgMHhlMCkgfCAoKENPTlNPTEVfQkdfQ09MPj4zKSAmIDB4MWMpIHwgQ09OU09MRV9CR19DT0w+PjYpOworCWJneCA9IChjb2xvcjg8PDI0KSB8IChjb2xvcjg8PDE2KSB8IChjb2xvcjg8PDgpIHwgY29sb3I4OworCWJyZWFrOwogICAgIGNhc2UgR0RGXzE1QklUXzU1NVJHQjoKLSAgICAgICAgZmd4ID0gKCgoQ09OU09MRV9GR19DT0w+PjMpPDwyNikgfCAoKENPTlNPTEVfRkdfQ09MPj4zKTw8MjEpIHwgKChDT05TT0xFX0ZHX0NPTD4+Myk8PDE2KSB8Ci0gICAgICAgICAgICgoQ09OU09MRV9GR19DT0w+PjMpPDwxMCkgfCAoKENPTlNPTEVfRkdfQ09MPj4zKTw8NSkgIHwgIChDT05TT0xFX0ZHX0NPTD4+MykpOwotICAgICAgICBiZ3ggPSAoKChDT05TT0xFX0JHX0NPTD4+Myk8PDI2KSB8ICgoQ09OU09MRV9CR19DT0w+PjMpPDwyMSkgfCAoKENPTlNPTEVfQkdfQ09MPj4zKTw8MTYpIHwKLSAgICAgICAgICAgKChDT05TT0xFX0JHX0NPTD4+Myk8PDEwKSB8ICgoQ09OU09MRV9CR19DT0w+PjMpPDw1KSAgfCAgKENPTlNPTEVfQkdfQ09MPj4zKSk7Ci0gICAgICAgIGJyZWFrOworCWZneCA9ICgoKENPTlNPTEVfRkdfQ09MPj4zKTw8MjYpIHwgKChDT05TT0xFX0ZHX0NPTD4+Myk8PDIxKSB8ICgoQ09OU09MRV9GR19DT0w+PjMpPDwxNikgfAorCSAgICgoQ09OU09MRV9GR19DT0w+PjMpPDwxMCkgfCAoKENPTlNPTEVfRkdfQ09MPj4zKTw8NSkgIHwgIChDT05TT0xFX0ZHX0NPTD4+MykpOworCWJneCA9ICgoKENPTlNPTEVfQkdfQ09MPj4zKTw8MjYpIHwgKChDT05TT0xFX0JHX0NPTD4+Myk8PDIxKSB8ICgoQ09OU09MRV9CR19DT0w+PjMpPDwxNikgfAorCSAgICgoQ09OU09MRV9CR19DT0w+PjMpPDwxMCkgfCAoKENPTlNPTEVfQkdfQ09MPj4zKTw8NSkgIHwgIChDT05TT0xFX0JHX0NPTD4+MykpOworCWJyZWFrOwogICAgIGNhc2UgR0RGXzE2QklUXzU2NVJHQjoKLSAgICAgICAgZmd4ID0gKCgoQ09OU09MRV9GR19DT0w+PjMpPDwyNykgfCAoKENPTlNPTEVfRkdfQ09MPj4yKTw8MjEpIHwgKChDT05TT0xFX0ZHX0NPTD4+Myk8PDE2KSB8Ci0gICAgICAgICAgICgoQ09OU09MRV9GR19DT0w+PjMpPDwxMSkgfCAoKENPTlNPTEVfRkdfQ09MPj4yKTw8NSkgIHwgIChDT05TT0xFX0ZHX0NPTD4+MykpOwotICAgICAgICBiZ3ggPSAoKChDT05TT0xFX0JHX0NPTD4+Myk8PDI3KSB8ICgoQ09OU09MRV9CR19DT0w+PjIpPDwyMSkgfCAoKENPTlNPTEVfQkdfQ09MPj4zKTw8MTYpIHwKLSAgICAgICAgICAgKChDT05TT0xFX0JHX0NPTD4+Myk8PDExKSB8ICgoQ09OU09MRV9CR19DT0w+PjIpPDw1KSAgfCAgKENPTlNPTEVfQkdfQ09MPj4zKSk7Ci0gICAgICAgIGJyZWFrOworCWZneCA9ICgoKENPTlNPTEVfRkdfQ09MPj4zKTw8MjcpIHwgKChDT05TT0xFX0ZHX0NPTD4+Mik8PDIxKSB8ICgoQ09OU09MRV9GR19DT0w+PjMpPDwxNikgfAorCSAgICgoQ09OU09MRV9GR19DT0w+PjMpPDwxMSkgfCAoKENPTlNPTEVfRkdfQ09MPj4yKTw8NSkgIHwgIChDT05TT0xFX0ZHX0NPTD4+MykpOworCWJneCA9ICgoKENPTlNPTEVfQkdfQ09MPj4zKTw8MjcpIHwgKChDT05TT0xFX0JHX0NPTD4+Mik8PDIxKSB8ICgoQ09OU09MRV9CR19DT0w+PjMpPDwxNikgfAorCSAgICgoQ09OU09MRV9CR19DT0w+PjMpPDwxMSkgfCAoKENPTlNPTEVfQkdfQ09MPj4yKTw8NSkgIHwgIChDT05TT0xFX0JHX0NPTD4+MykpOworCWJyZWFrOwogICAgIGNhc2UgR0RGXzMyQklUX1g4ODhSR0I6Ci0gICAgICAgIGZneCA9IChDT05TT0xFX0ZHX0NPTDw8MTYpIHwgKENPTlNPTEVfRkdfQ09MPDw4KSB8IENPTlNPTEVfRkdfQ09MOwotICAgICAgICBiZ3ggPSAoQ09OU09MRV9CR19DT0w8PDE2KSB8IChDT05TT0xFX0JHX0NPTDw8OCkgfCBDT05TT0xFX0JHX0NPTDsKLSAgICAgICAgYnJlYWs7CisJZmd4ID0gKENPTlNPTEVfRkdfQ09MPDwxNikgfCAoQ09OU09MRV9GR19DT0w8PDgpIHwgQ09OU09MRV9GR19DT0w7CisJYmd4ID0gKENPTlNPTEVfQkdfQ09MPDwxNikgfCAoQ09OU09MRV9CR19DT0w8PDgpIHwgQ09OU09MRV9CR19DT0w7CisJYnJlYWs7CiAgICAgY2FzZSBHREZfMjRCSVRfODg4UkdCOgotICAgICAgICBmZ3ggPSAoQ09OU09MRV9GR19DT0w8PDI0KSB8IChDT05TT0xFX0ZHX0NPTDw8MTYpIHwgKENPTlNPTEVfRkdfQ09MPDw4KSB8IENPTlNPTEVfRkdfQ09MOwotICAgICAgICBiZ3ggPSAoQ09OU09MRV9CR19DT0w8PDI0KSB8IChDT05TT0xFX0JHX0NPTDw8MTYpIHwgKENPTlNPTEVfQkdfQ09MPDw4KSB8IENPTlNPTEVfQkdfQ09MOwotICAgICAgICBicmVhazsKKwlmZ3ggPSAoQ09OU09MRV9GR19DT0w8PDI0KSB8IChDT05TT0xFX0ZHX0NPTDw8MTYpIHwgKENPTlNPTEVfRkdfQ09MPDw4KSB8IENPTlNPTEVfRkdfQ09MOworCWJneCA9IChDT05TT0xFX0JHX0NPTDw8MjQpIHwgKENPTlNPTEVfQkdfQ09MPDwxNikgfCAoQ09OU09MRV9CR19DT0w8PDgpIHwgQ09OU09MRV9CR19DT0w7CisJYnJlYWs7CiAgICAgfQogICAgIGVvcnggPSBmZ3ggXiBiZ3g7CiAKQEAgLTg5Nyw0OCArODk2LDQ4IEBACiAKICAgICAgLyogRm9yY2UgY29uc29sZSBpL28gdG8gc2VyaWFsID8gKi8KICAgICBpZiAoKHBlbnYgPSBnZXRlbnYgKCJjb25zb2xlIikpICE9IE5VTEwpCi0gICAgICAgIGlmIChzdHJjbXAgKHBlbnYsICJzZXJpYWwiKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7CisJaWYgKHN0cmNtcCAocGVudiwgInNlcmlhbCIpID09IDApCisJICAgIHJldHVybiAwOwogCiAgICAvKiBJbml0IHZpZGVvIGNoaXAgLSByZXR1cm5zIHdpdGggZnJhbWVidWZmZXIgY2xlYXJlZCAqLwogICAgIGlmICh2aWRlb19pbml0KCkgPT0gLTEpCi0gICAgICAgIHNraXBfZGV2X2luaXQgPSAxOworCXNraXBfZGV2X2luaXQgPSAxOwogI2lmZGVmIENPTkZJR19WR0FfQVNfU0lOR0xFX0RFVklDRQogICAgLyogRGV2aWNlcyBWR0EgYW5kIEtleWJvYXJkIHdpbGwgYmUgYXNzaWduZWQgc2VwZXJhdGVseSAqLwogICAgIC8qIEluaXQgdmdhIGRldmljZSAqLwogICAgIGlmICghc2tpcF9kZXZfaW5pdCkKICAgICB7Ci0gICAgICAgIG1lbXNldCAoJmNvbnNvbGVfZGV2LCAwLCBzaXplb2YoY29uc29sZV9kZXYpKTsKLSAgICAgICAgc3RyY3B5KGNvbnNvbGVfZGV2Lm5hbWUsICJ2Z2EiKTsKLSAgICAgICAgY29uc29sZV9kZXYuZXh0ICAgPSBERVZfRVhUX1ZJREVPOyAgICAvKiBWaWRlbyBleHRlbnNpb25zICovCi0gICAgICAgIGNvbnNvbGVfZGV2LmZsYWdzID0gREVWX0ZMQUdTX09VVFBVVCB8IERFVl9GTEFHU19TWVNURU07Ci0gICAgICAgIGNvbnNvbGVfZGV2LnB1dGMgID0gdmlkZW9fcHV0YzsgICAgICAgIC8qICdwdXRjJyBmdW5jdGlvbiAqLwotICAgICAgICBjb25zb2xlX2Rldi5wdXRzICA9IHZpZGVvX3B1dHM7ICAgICAgICAvKiAncHV0cycgZnVuY3Rpb24gKi8KLSAgICAgICAgY29uc29sZV9kZXYudHN0YyAgPSBOVUxMOyAgICAgICAgICAgICAgLyogJ3RzdGMnIGZ1bmN0aW9uICovCi0gICAgICAgIGNvbnNvbGVfZGV2LmdldGMgID0gTlVMTDsgICAgICAgICAgICAgIC8qICdnZXRjJyBmdW5jdGlvbiAqLworCW1lbXNldCAoJmNvbnNvbGVfZGV2LCAwLCBzaXplb2YoY29uc29sZV9kZXYpKTsKKwlzdHJjcHkoY29uc29sZV9kZXYubmFtZSwgInZnYSIpOworCWNvbnNvbGVfZGV2LmV4dCAgID0gREVWX0VYVF9WSURFTzsgICAgLyogVmlkZW8gZXh0ZW5zaW9ucyAqLworCWNvbnNvbGVfZGV2LmZsYWdzID0gREVWX0ZMQUdTX09VVFBVVCB8IERFVl9GTEFHU19TWVNURU07CisJY29uc29sZV9kZXYucHV0YyAgPSB2aWRlb19wdXRjOyAgICAgICAgLyogJ3B1dGMnIGZ1bmN0aW9uICovCisJY29uc29sZV9kZXYucHV0cyAgPSB2aWRlb19wdXRzOyAgICAgICAgLyogJ3B1dHMnIGZ1bmN0aW9uICovCisJY29uc29sZV9kZXYudHN0YyAgPSBOVUxMOyAgICAgICAgICAgICAgLyogJ3RzdGMnIGZ1bmN0aW9uICovCisJY29uc29sZV9kZXYuZ2V0YyAgPSBOVUxMOyAgICAgICAgICAgICAgLyogJ2dldGMnIGZ1bmN0aW9uICovCiAKLSAgICAgICAgaWYgKGRldmljZV9yZWdpc3RlciAoJmNvbnNvbGVfZGV2KSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIDE7CisJaWYgKGRldmljZV9yZWdpc3RlciAoJmNvbnNvbGVfZGV2KSA9PSAwKQorCSAgICByZXR1cm4gMTsKICAgICB9CiAjZWxzZQogICAgIFBSSU5URCgiS0JEOiBLZXlib2FyZCBpbml0IC4uLlxuIik7CiAgICAgaWYgKFZJREVPX0tCRF9JTklUX0ZDVCA9PSAtMSkKLSAgICAgICAgc2tpcF9kZXZfaW5pdCA9IDE7CisJc2tpcF9kZXZfaW5pdCA9IDE7CiAKICAgICAvKiBJbml0IGNvbnNvbGUgZGV2aWNlICovCiAgICAgaWYgKCFza2lwX2Rldl9pbml0KQogICAgIHsKLSAgICAgICAgbWVtc2V0ICgmY29uc29sZV9kZXYsIDAsIHNpemVvZihjb25zb2xlX2RldikpOwotICAgICAgICBzdHJjcHkoY29uc29sZV9kZXYubmFtZSwgImNvbnNvbGUiKTsKLSAgICAgICAgY29uc29sZV9kZXYuZXh0ICAgPSBERVZfRVhUX1ZJREVPOyAgICAvKiBWaWRlbyBleHRlbnNpb25zICovCi0gICAgICAgIGNvbnNvbGVfZGV2LmZsYWdzID0gREVWX0ZMQUdTX09VVFBVVCB8IERFVl9GTEFHU19JTlBVVCB8IERFVl9GTEFHU19TWVNURU07Ci0gICAgICAgIGNvbnNvbGVfZGV2LnB1dGMgID0gdmlkZW9fcHV0YzsgICAgICAgIC8qICdwdXRjJyBmdW5jdGlvbiAqLwotICAgICAgICBjb25zb2xlX2Rldi5wdXRzICA9IHZpZGVvX3B1dHM7ICAgICAgICAvKiAncHV0cycgZnVuY3Rpb24gKi8KLSAgICAgICAgY29uc29sZV9kZXYudHN0YyAgPSBWSURFT19UU1RDX0ZDVDsgICAgLyogJ3RzdGMnIGZ1bmN0aW9uICovCi0gICAgICAgIGNvbnNvbGVfZGV2LmdldGMgID0gVklERU9fR0VUQ19GQ1Q7ICAgIC8qICdnZXRjJyBmdW5jdGlvbiAqLworCW1lbXNldCAoJmNvbnNvbGVfZGV2LCAwLCBzaXplb2YoY29uc29sZV9kZXYpKTsKKwlzdHJjcHkoY29uc29sZV9kZXYubmFtZSwgImNvbnNvbGUiKTsKKwljb25zb2xlX2Rldi5leHQgICA9IERFVl9FWFRfVklERU87ICAgIC8qIFZpZGVvIGV4dGVuc2lvbnMgKi8KKwljb25zb2xlX2Rldi5mbGFncyA9IERFVl9GTEFHU19PVVRQVVQgfCBERVZfRkxBR1NfSU5QVVQgfCBERVZfRkxBR1NfU1lTVEVNOworCWNvbnNvbGVfZGV2LnB1dGMgID0gdmlkZW9fcHV0YzsgICAgICAgIC8qICdwdXRjJyBmdW5jdGlvbiAqLworCWNvbnNvbGVfZGV2LnB1dHMgID0gdmlkZW9fcHV0czsgICAgICAgIC8qICdwdXRzJyBmdW5jdGlvbiAqLworCWNvbnNvbGVfZGV2LnRzdGMgID0gVklERU9fVFNUQ19GQ1Q7ICAgIC8qICd0c3RjJyBmdW5jdGlvbiAqLworCWNvbnNvbGVfZGV2LmdldGMgID0gVklERU9fR0VUQ19GQ1Q7ICAgIC8qICdnZXRjJyBmdW5jdGlvbiAqLwogCi0gICAgICAgIGlmIChkZXZpY2VfcmVnaXN0ZXIgKCZjb25zb2xlX2RldikgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAxOworCWlmIChkZXZpY2VfcmVnaXN0ZXIgKCZjb25zb2xlX2RldikgPT0gMCkKKwkgICAgcmV0dXJuIDE7CiAgICAgfQogI2VuZGlmIC8qIENPTkZJR19WR0FfQVNfU0lOR0xFX0RFVklDRSAqLwogICAgIC8qIE5vIGNvbnNvbGUgZGV2IGF2YWlsYWJsZSAqLwpAQCAtOTQ2LDEwICs5NDUsMyBAQAogfQogCiAjZW5kaWYgLyogQ09ORklHX0NGQl9DT05TT0xFICovCi0KLQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3Q2OTAwMC5jIGIvZHJpdmVycy9jdDY5MDAwLmMKaW5kZXggNTYzNTU2Mi4uYmE2OTY2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jdDY5MDAwLmMKKysrIGIvZHJpdmVycy9jdDY5MDAwLmMKQEAgLTMxLDQ2ICszMSw0NiBAQAogICBQYXJhbWV0ZXJzIGNhbiBiZSBzZXQgdmlhIHRoZSB2YXJpYWJsZSAidmlkZW9tb2RlIiBpbiB0aGUgZW52aXJvbm1lbnQuCiAgIDIgZGlmZXJlbnQgd2F5cyBhcmUgcG9zc2libGU6CiAgICJ2aWRlb21vZGU9MzAxIiAgIC0gMzAxIGlzIGEgaGV4YWRlY2ltYWwgbnVtYmVyIGRlc2NyaWJpbmcgdGhlIFZFU0EKLSAgICAgICAgICAgICAgICAgICAgICBtb2RlLiBGb2xsb3dpbmcgbW9kZXMgYXJlIGltcGxlbWVudGVkOgorCQkgICAgICBtb2RlLiBGb2xsb3dpbmcgbW9kZXMgYXJlIGltcGxlbWVudGVkOgogCi0gICAgICAgICAgICAgICAgICAgICAgQ29sb3JzICAgIDY0MHg0ODAgODAweDYwMCAxMDI0eDc2OCAxMTUyeDg2NAotICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICA4IGJpdHMgfCAgMHgzMDEgICAweDMwMyAgICAweDMwNSAgICAweDE2MQotICAgICAgICAgICAgICAgICAgICAgMTUgYml0cyB8ICAweDMxMCAgIDB4MzEzICAgIDB4MzE2ICAgIDB4MTYyCi0gICAgICAgICAgICAgICAgICAgICAxNiBiaXRzIHwgIDB4MzExICAgMHgzMTQgICAgMHgzMTcgICAgMHgxNjMKLSAgICAgICAgICAgICAgICAgICAgIDI0IGJpdHMgfCAgMHgzMTIgICAweDMxNSAgICAweDMxOCAgICAgID8KLSAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSAgICAgIENvbG9ycyAgICA2NDB4NDgwIDgwMHg2MDAgMTAyNHg3NjggMTE1Mng4NjQKKwkJICAgICAtLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkgICAgICA4IGJpdHMgfCAgMHgzMDEgICAweDMwMyAgICAweDMwNSAgICAweDE2MQorCQkgICAgIDE1IGJpdHMgfCAgMHgzMTAgICAweDMxMyAgICAweDMxNiAgICAweDE2MgorCQkgICAgIDE2IGJpdHMgfCAgMHgzMTEgICAweDMxNCAgICAweDMxNyAgICAweDE2MworCQkgICAgIDI0IGJpdHMgfCAgMHgzMTIgICAweDMxNSAgICAweDMxOCAgICAgID8KKwkJICAgICAtLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAidmlkZW9tb2RlPWJvb3RhcmdzIgotICAgICAgICAgICAgICAgICAgIC0gdGhlIHBhcmFtZXRlcnMgYXJlIHBhcnNlZCBmcm9tIHRoZSBib290YXJncy4KLSAgICAgICAgICAgICAgICAgICAgICBUaGUgZm9ybWF0IGlzICJOQU1FOlZBTFVFLE5BTUU6VkFMVUUiIGV0Yy4KLSAgICAgICAgICAgICAgICAgICAgICBFeC46Ci0gICAgICAgICAgICAgICAgICAgICAgImJvb3RhcmdzPXZpZGVvPWN0ZmI6eDo4MDAseTo2MDAsZGVwdGg6MTYscGNsazoyNTAwMCIKLSAgICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXJzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGlzdCB3aWxsIGJlIHRha2VuIGZyb20KLSAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCBtb2RlLCB3aGljaCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAgICAgICAgICAgICAgICAgICAgICBtb2RlOjAgIDY0MHg0ODB4MjQKLSAgICAgICAgICAgICAgICAgICAgICBtb2RlOjEgIDgwMHg2MDB4MTYKLSAgICAgICAgICAgICAgICAgICAgICBtb2RlOjIgIDEwMjR4NzY4eDgKLSAgICAgICAgICAgICAgICAgICAgICBtb2RlOjMgIDk2MHg3MjB4MjQKLSAgICAgICAgICAgICAgICAgICAgICBtb2RlOjQgIDExNTJ4ODY0eDE2Ci0gICAgICAgICAgICAgICAgICAgICAgaWYgIm1vZGUiIGlzIG5vdCBwcm92aWRlZCB3aXRoaW4gdGhlIHBhcmFtZXRlciBsaXN0LAotICAgICAgICAgICAgICAgICAgICAgIG1vZGU6MCBpcyBhc3N1bWVkLgotICAgICAgICAgICAgICAgICAgICAgIEZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBzdXBwb3J0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgeCAgICAgICB4cmVzID0gdmlzaWJsZSByZXNvbHV0aW9uIGhvcml6b250YWwKLSAgICAgICAgICAgICAgICAgICAgICB5ICAgICAgIHlyZXMgPSB2aXNpYmxlIHJlc29sdXRpb24gdmVydGljYWwKLSAgICAgICAgICAgICAgICAgICAgICBwY2xrICAgIHBpeGVsY2xvY2tzIGluIHBpY28gc2VjCi0gICAgICAgICAgICAgICAgICAgICAgbGUgICAgICBsZWZ0X21hcmdpbmcgdGltZSBmcm9tIHN5bmMgdG8gcGljdHVyZSBpbiBwaXhlbGNsb2NrcwotICAgICAgICAgICAgICAgICAgICAgIHJpICAgICAgcmlnaHRfbWFyZ2luZyB0aW1lIGZyb20gcGljdHVyZSB0byBzeW5jIGluIHBpeGVsY2xvY2tzCi0gICAgICAgICAgICAgICAgICAgICAgdXAgICAgICB1cHBlcl9tYXJnaW4gdGltZSBmcm9tIHN5bmMgdG8gcGljdHVyZQotICAgICAgICAgICAgICAgICAgICAgIGxvICAgICAgbG93ZXJfbWFyZ2luCi0gICAgICAgICAgICAgICAgICAgICAgaHMgICAgICBoc3luY19sZW4gbGVuZ3RoIG9mIGhvcml6b250YWwgc3luYwotICAgICAgICAgICAgICAgICAgICAgIHZzICAgICAgdnN5bmNfbGVuIGxlbmd0aCBvZiB2ZXJ0aWNhbCBzeW5jCi0gICAgICAgICAgICAgICAgICAgICAgc3luYyAgICBzZWUgRkJfU1lOQ18qCi0gICAgICAgICAgICAgICAgICAgICAgdm1vZGUgICBzZWUgRkJfVk1PREVfKgotICAgICAgICAgICAgICAgICAgICAgIGRlcHRoICAgQ29sb3IgZGVwdGggaW4gYml0cyBwZXIgcGl4ZWwKLSAgICAgICAgICAgICAgICAgICAgICBBbGwgb3RoZXIgcGFyYW1ldGVycyBpbiB0aGUgdmFyaWFibGUgYm9vdGFyZ3MgYXJlIGlnbm9yZWQuCi0gICAgICAgICAgICAgICAgICAgICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIHBhcmFtZXRlcnMgZGlyZWN0IGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlICJ2aWRlb21vZGUiLCBvciBpbiBhbm90aGVyIHZhcmlhYmxlIGkuZS4KLSAgICAgICAgICAgICAgICAgICAgICAibXl2aWRlbyIgYW5kIHNldHRpbmcgdGhlIHZhcmlhYmxlICJ2aWRlb21vZGU9bXl2aWRlbyIuLgorCQkgICAtIHRoZSBwYXJhbWV0ZXJzIGFyZSBwYXJzZWQgZnJvbSB0aGUgYm9vdGFyZ3MuCisJCSAgICAgIFRoZSBmb3JtYXQgaXMgIk5BTUU6VkFMVUUsTkFNRTpWQUxVRSIgZXRjLgorCQkgICAgICBFeC46CisJCSAgICAgICJib290YXJncz12aWRlbz1jdGZiOng6ODAwLHk6NjAwLGRlcHRoOjE2LHBjbGs6MjUwMDAiCisJCSAgICAgIFBhcmFtZXRlcnMgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0IHdpbGwgYmUgdGFrZW4gZnJvbQorCQkgICAgICB0aGUgZGVmYXVsdCBtb2RlLCB3aGljaCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKwkJICAgICAgbW9kZTowICA2NDB4NDgweDI0CisJCSAgICAgIG1vZGU6MSAgODAweDYwMHgxNgorCQkgICAgICBtb2RlOjIgIDEwMjR4NzY4eDgKKwkJICAgICAgbW9kZTozICA5NjB4NzIweDI0CisJCSAgICAgIG1vZGU6NCAgMTE1Mng4NjR4MTYKKwkJICAgICAgaWYgIm1vZGUiIGlzIG5vdCBwcm92aWRlZCB3aXRoaW4gdGhlIHBhcmFtZXRlciBsaXN0LAorCQkgICAgICBtb2RlOjAgaXMgYXNzdW1lZC4KKwkJICAgICAgRm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHN1cHBvcnRlZDoKKwkJICAgICAgeCAgICAgICB4cmVzID0gdmlzaWJsZSByZXNvbHV0aW9uIGhvcml6b250YWwKKwkJICAgICAgeSAgICAgICB5cmVzID0gdmlzaWJsZSByZXNvbHV0aW9uIHZlcnRpY2FsCisJCSAgICAgIHBjbGsgICAgcGl4ZWxjbG9ja3MgaW4gcGljbyBzZWMKKwkJICAgICAgbGUgICAgICBsZWZ0X21hcmdpbmcgdGltZSBmcm9tIHN5bmMgdG8gcGljdHVyZSBpbiBwaXhlbGNsb2NrcworCQkgICAgICByaSAgICAgIHJpZ2h0X21hcmdpbmcgdGltZSBmcm9tIHBpY3R1cmUgdG8gc3luYyBpbiBwaXhlbGNsb2NrcworCQkgICAgICB1cCAgICAgIHVwcGVyX21hcmdpbiB0aW1lIGZyb20gc3luYyB0byBwaWN0dXJlCisJCSAgICAgIGxvICAgICAgbG93ZXJfbWFyZ2luCisJCSAgICAgIGhzICAgICAgaHN5bmNfbGVuIGxlbmd0aCBvZiBob3Jpem9udGFsIHN5bmMKKwkJICAgICAgdnMgICAgICB2c3luY19sZW4gbGVuZ3RoIG9mIHZlcnRpY2FsIHN5bmMKKwkJICAgICAgc3luYyAgICBzZWUgRkJfU1lOQ18qCisJCSAgICAgIHZtb2RlICAgc2VlIEZCX1ZNT0RFXyoKKwkJICAgICAgZGVwdGggICBDb2xvciBkZXB0aCBpbiBiaXRzIHBlciBwaXhlbAorCQkgICAgICBBbGwgb3RoZXIgcGFyYW1ldGVycyBpbiB0aGUgdmFyaWFibGUgYm9vdGFyZ3MgYXJlIGlnbm9yZWQuCisJCSAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc2V0IHRoZSBwYXJhbWV0ZXJzIGRpcmVjdCBpbiB0aGUKKwkJICAgICAgdmFyaWFibGUgInZpZGVvbW9kZSIsIG9yIGluIGFub3RoZXIgdmFyaWFibGUgaS5lLgorCQkgICAgICAibXl2aWRlbyIgYW5kIHNldHRpbmcgdGhlIHZhcmlhYmxlICJ2aWRlb21vZGU9bXl2aWRlbyIuLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGNvbW1vbi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXRhZmxhc2guYyBiL2RyaXZlcnMvZGF0YWZsYXNoLmMKaW5kZXggYTBhNGI2Mi4uMjZhNmY4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kYXRhZmxhc2guYworKysgYi9kcml2ZXJzL2RhdGFmbGFzaC5jCkBAIC05Nyw3ICs5Nyw2IEBACiB9CiAKIAotCiB2b2lkIGRhdGFmbGFzaF9wcmludF9pbmZvICh2b2lkKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kczE3MjIuYyBiL2RyaXZlcnMvZHMxNzIyLmMKaW5kZXggMzRlYjgwYy4uMjI3ZDgxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kczE3MjIuYworKysgYi9kcml2ZXJzL2RzMTcyMi5jCkBAIC0xOCwyNCArMTgsMjQgQEAKIHU4IGRzMTcyMl9yZWFkKGludCBkZXYsIGludCBhZGRyKQogewogCXU4IHJlczsKLQkKKwogCWRzMTcyMl9zZWxlY3QoZGV2KTsKLQkKLQlzc2lfdHhfYnl0ZShhZGRyKTsJCi0JcmVzID0gc3NpX3J4X2J5dGUoKTsgICAJCi0JCisKKwlzc2lfdHhfYnl0ZShhZGRyKTsKKwlyZXMgPSBzc2lfcnhfYnl0ZSgpOworCiAJc3NpX2NoaXBfc2VsZWN0KDApOwotCQorCiAJcmV0dXJuIHJlczsKIH0KIAogdm9pZCBkczE3MjJfd3JpdGUoaW50IGRldiwgaW50IGFkZHIsIHU4IGRhdGEpCiB7CiAJZHMxNzIyX3NlbGVjdChkZXYpOwotCQotCXNzaV90eF9ieXRlKDB4ODB8YWRkcik7CQotCXNzaV90eF9ieXRlKGRhdGEpOyAgIAkKLQkKKworCXNzaV90eF9ieXRlKDB4ODB8YWRkcik7CisJc3NpX3R4X2J5dGUoZGF0YSk7CisKIAlzc2lfY2hpcF9zZWxlY3QoMCk7CiB9CiAKQEAgLTQzLDI2ICs0MywyNiBAQAogdTE2IGRzMTcyMl90ZW1wKGludCBkZXYsIGludCByZXNvbHV0aW9uKQogewogCXN0YXRpYyBpbnQgdXNlY29uZHNbXSA9IHsKLQkJNzUwMDAsIDE1MDAwMCwgMzAwMDAwLCA2MDAwMDAsIDEyMDAwMDAgCisJCTc1MDAwLCAxNTAwMDAsIDMwMDAwMCwgNjAwMDAwLCAxMjAwMDAwCiAJfTsKIAljaGFyIHRlbXA7CiAJdTE2IHJlczsKLQkKLQkKKworCiAJLyogc2V0IHVwIHRoZSBkZXNpcmVkIHJlc3Vsb3Rpb24gLi4uICovCiAJZHMxNzIyX3dyaXRlKGRldiwgMCwgMHhlMCB8IChyZXNvbHV0aW9uIDw8IDEpKTsKLQkJCQorCiAJLyogd2FpdCB3aGlsZSB0aGUgY2hpcCBtZWFzdXJlcyB0aGUgdHJlbXBlcmF0dXJlICovCi0JdWRlbGF5KHVzZWNvbmRzW3Jlc29sdXRpb25dKTsgCQotCQorCXVkZWxheSh1c2Vjb25kc1tyZXNvbHV0aW9uXSk7CisKIAlyZXMgPSAodGVtcCA9IGRzMTcyMl9yZWFkKGRldiwgMikpIDw8IDg7Ci0JCi0JaWYgKHRlbXAgPCAwKSB7IAorCisJaWYgKHRlbXAgPCAwKSB7CiAJCXRlbXAgPSAoMTYgLSAoZHMxNzIyX3JlYWQoZGV2LCAxKSA+PiA0KSkgJiAweDBmOwogCX0gZWxzZSB7CiAJCXRlbXAgPSAoZHMxNzIyX3JlYWQoZGV2LCAxKSA+PiA0KTsKIAl9Ci0JCisKIAlzd2l0Y2ggKHRlbXApIHsKIAljYXNlIDA6CiAJCS8qIC4wMDAwICovCkBAIC0xMjksNyArMTI5LDcgQEAKIAkJYnJlYWs7CiAJfQogCXJldHVybiByZXM7Ci0JCQkKKwogfQogCiBpbnQgZHMxNzIyX3Byb2JlKGludCBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2UxMDAwLmMgYi9kcml2ZXJzL2UxMDAwLmMKaW5kZXggYjRkNTBiOC4uY2M1MGMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lMTAwMC5jCisrKyBiL2RyaXZlcnMvZTEwMDAuYwpAQCAtNiwyNiArNiwyNiBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotICAKKwogICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gIAotICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCAKLSAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgCi0gIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQogICBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAgCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCAKLSAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIAotICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIAorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgogICBtb3JlIGRldGFpbHMuCi0gIAorCiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKICAgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCi0gIAorCiAgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQogICBmaWxlIGNhbGxlZCBMSUNFTlNFLgotICAKKwogICBDb250YWN0IEluZm9ybWF0aW9uOgogICBMaW51eCBOSUNTIDxsaW51eC5uaWNzQGludGVsLmNvbT4KICAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwpAQCAtMTA5LDcgKzEwOSw3IEBACiAjZGVmaW5lIEUxMDAwX1dSSVRFX1JFR19BUlJBWShhLCByZWcsIG9mZnNldCwgdmFsdWUpIChcCiAJCQl3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIEUxMDAwXyMjcmVnICsgKChvZmZzZXQpIDw8IDIpKSkpCiAjZGVmaW5lIEUxMDAwX1JFQURfUkVHX0FSUkFZKGEsIHJlZywgb2Zmc2V0KSAoIFwKLSAgICAgICAgcmVhZGwoKGEpLT5od19hZGRyICsgRTEwMDBfIyNyZWcgKyAoKG9mZnNldCkgPDwgMikpKQorCXJlYWRsKChhKS0+aHdfYWRkciArIEUxMDAwXyMjcmVnICsgKChvZmZzZXQpIDw8IDIpKSkKICNkZWZpbmUgRTEwMDBfV1JJVEVfRkxVU0goYSkge3VpbnQzMl90IHg7IHggPSBFMTAwMF9SRUFEX1JFRyhhLCBTVEFUVVMpO30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTMzLDE0ICsxMzMsMTQgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIExvd2VycyB0aGUgRUVQUk9NJ3MgY2xvY2sgaW5wdXQuCiAgKgotICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUgCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICogZWVjZCAtIEVFQ0QncyBjdXJyZW50IHZhbHVlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZAogZTEwMDBfbG93ZXJfZWVfY2xrKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90ICogZWVjZCkKIHsKLQkvKiBMb3dlciB0aGUgY2xvY2sgaW5wdXQgdG8gdGhlIEVFUFJPTSAoYnkgY2xlYXJpbmcgdGhlIFNLIGJpdCksIGFuZCB0aGVuIAotCSAqIHdhaXQgNTAgbWljcm9zZWNvbmRzLiAKKwkvKiBMb3dlciB0aGUgY2xvY2sgaW5wdXQgdG8gdGhlIEVFUFJPTSAoYnkgY2xlYXJpbmcgdGhlIFNLIGJpdCksIGFuZCB0aGVuCisJICogd2FpdCA1MCBtaWNyb3NlY29uZHMuCiAJICovCiAJKmVlY2QgPSAqZWVjZCAmIH5FMTAwMF9FRUNEX1NLOwogCUUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgKmVlY2QpOwpAQCAtMTYzLDcgKzE2Myw3IEBACiAKIAkvKiBXZSBuZWVkIHRvIHNoaWZ0ICJjb3VudCIgYml0cyBvdXQgdG8gdGhlIEVFUFJPTS4gU28sIHZhbHVlIGluIHRoZQogCSAqICJkYXRhIiBwYXJhbWV0ZXIgd2lsbCBiZSBzaGlmdGVkIG91dCB0byB0aGUgRUVQUk9NIG9uZSBiaXQgYXQgYSB0aW1lLgotCSAqIEluIG9yZGVyIHRvIGRvIHRoaXMsICJkYXRhIiBtdXN0IGJlIGJyb2tlbiBkb3duIGludG8gYml0cy4gCisJICogSW4gb3JkZXIgdG8gZG8gdGhpcywgImRhdGEiIG11c3QgYmUgYnJva2VuIGRvd24gaW50byBiaXRzLgogCSAqLwogCW1hc2sgPSAweDAxIDw8IChjb3VudCAtIDEpOwogCWVlY2QgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVDRCk7CkBAIC0yMDgsMTAgKzIwOCwxMCBAQAogCXVpbnQzMl90IGk7CiAJdWludDE2X3QgZGF0YTsKIAotCS8qIEluIG9yZGVyIHRvIHJlYWQgYSByZWdpc3RlciBmcm9tIHRoZSBFRVBST00sIHdlIG5lZWQgdG8gc2hpZnQgMTYgYml0cyAKKwkvKiBJbiBvcmRlciB0byByZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgRUVQUk9NLCB3ZSBuZWVkIHRvIHNoaWZ0IDE2IGJpdHMKIAkgKiBpbiBmcm9tIHRoZSBFRVBST00uIEJpdHMgYXJlICJzaGlmdGVkIGluIiBieSByYWlzaW5nIHRoZSBjbG9jayBpbnB1dCB0bwogCSAqIHRoZSBFRVBST00gKHNldHRpbmcgdGhlIFNLIGJpdCksIGFuZCB0aGVuIHJlYWRpbmcgdGhlIHZhbHVlIG9mIHRoZSAiRE8iCi0JICogYml0LiAgRHVyaW5nIHRoaXMgInNoaWZ0aW5nIGluIiBwcm9jZXNzIHRoZSAiREkiIGJpdCBzaG91bGQgYWx3YXlzIGJlIAorCSAqIGJpdC4gIER1cmluZyB0aGlzICJzaGlmdGluZyBpbiIgcHJvY2VzcyB0aGUgIkRJIiBiaXQgc2hvdWxkIGFsd2F5cyBiZQogCSAqIGNsZWFyLi4KIAkgKi8KIApAQCAtMjQxLDcgKzI0MSw3IEBACiAgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqCi0gKiBMb3dlcnMgRUVQUk9NIGNsb2NrLiBDbGVhcnMgaW5wdXQgcGluLiBTZXRzIHRoZSBjaGlwIHNlbGVjdCBwaW4uIFRoaXMgCisgKiBMb3dlcnMgRUVQUk9NIGNsb2NrLiBDbGVhcnMgaW5wdXQgcGluLiBTZXRzIHRoZSBjaGlwIHNlbGVjdCBwaW4uIFRoaXMKICAqIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGlzc3VpbmcgYSBjb21tYW5kIHRvIHRoZSBFRVBST00uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZApAQCAtMjYyLDcgKzI2Miw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJldHVybnMgRUVQUk9NIHRvIGEgInN0YW5kYnkiIHN0YXRlCi0gKiAKKyAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQKQEAgLTMwMiw3ICszMDIsNyBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKiBvZmZzZXQgLSBvZmZzZXQgb2YgIHdvcmQgaW4gdGhlIEVFUFJPTSB0byByZWFkCi0gKiBkYXRhIC0gd29yZCByZWFkIGZyb20gdGhlIEVFUFJPTSAKKyAqIGRhdGEgLSB3b3JkIHJlYWQgZnJvbSB0aGUgRUVQUk9NCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50CiBlMTAwMF9yZWFkX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBvZmZzZXQsIHVpbnQxNl90ICogZGF0YSkKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBWZXJpZmllcyB0aGF0IHRoZSBFRVBST00gaGFzIGEgdmFsaWQgY2hlY2tzdW0KLSAqIAorICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKgogICogUmVhZHMgdGhlIGZpcnN0IDY0IDE2IGJpdCB3b3JkcyBvZiB0aGUgRUVQUk9NIGFuZCBzdW1zIHRoZSB2YWx1ZXMgcmVhZC4KQEAgLTQ3MCw3ICs0NzAsNyBAQAogCQl9CiAJCWNoZWNrc3VtICs9IGVlcHJvbV9kYXRhOwogCX0KLQkKKwogCWlmIChjaGVja3N1bSA9PSAodWludDE2X3QpIEVFUFJPTV9TVU0pIHsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKQEAgLTUxNSw3ICs1MTUsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5pdGlhbGl6ZXMgcmVjZWl2ZSBhZGRyZXNzIGZpbHRlcnMuCiAgKgotICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUgCisgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoKICAqIFBsYWNlcyB0aGUgTUFDIGFkZHJlc3MgaW4gcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyIDAgYW5kIGNsZWFycyB0aGUgcmVzdAogICogb2YgdGhlIHJlY2VpdmUgYWRkcmVzc3MgcmVnaXN0ZXJzLiBDbGVhcnMgdGhlIG11bHRpY2FzdCB0YWJsZS4gQXNzdW1lcwpAQCAtNTY2LDcgKzU2Niw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNldCB0aGUgbWFjIHR5cGUgbWVtYmVyIGluIHRoZSBodyBzdHJ1Y3QuCi0gKiAKKyAqCiAgKiBodyAtIFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludApAQCAtNzExLDggKzcxMSw4IEBACiAgKiBQZXJmb3JtcyBiYXNpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBhZGFwdGVyLgogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCi0gKiAKLSAqIEFzc3VtZXMgdGhhdCB0aGUgY29udHJvbGxlciBoYXMgcHJldmlvdXNseSBiZWVuIHJlc2V0IGFuZCBpcyBpbiBhIAorICoKKyAqIEFzc3VtZXMgdGhhdCB0aGUgY29udHJvbGxlciBoYXMgcHJldmlvdXNseSBiZWVuIHJlc2V0IGFuZCBpcyBpbiBhCiAgKiBwb3N0LXJlc2V0IHVuaW5pdGlhbGl6ZWQgc3RhdGUuIEluaXRpYWxpemVzIHRoZSByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXJzLAogICogbXVsdGljYXN0IHRhYmxlLCBhbmQgVkxBTiBmaWx0ZXIgdGFibGUuIENhbGxzIHJvdXRpbmVzIHRvIHNldHVwIGxpbmsKICAqIGNvbmZpZ3VyYXRpb24gYW5kIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gQ2xlYXJzIGFsbCBvbi1jaGlwIGNvdW50ZXJzLiBMZWF2ZXMKQEAgLTg1NywxMyArODU3LDEzIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIENvbmZpZ3VyZXMgZmxvdyBjb250cm9sIGFuZCBsaW5rIHNldHRpbmdzLgotICogCisgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKLSAqIAorICoKICAqIERldGVybWluZXMgd2hpY2ggZmxvdyBjb250cm9sIHNldHRpbmdzIHRvIHVzZS4gQ2FsbHMgdGhlIGFwcm9wcmlhdGUgbWVkaWEtCiAgKiBzcGVjaWZpYyBsaW5rIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24uIENvbmZpZ3VyZXMgdGhlIGZsb3cgY29udHJvbCBzZXR0aW5ncy4KICAqIEFzc3VtaW5nIHRoZSBhZGFwdGVyIGhhcyBhIHZhbGlkIGxpbmsgcGFydG5lciwgYSB2YWxpZCBsaW5rIHNob3VsZCBiZQotICogZXN0YWJsaXNoZWQuIEFzc3VtZXMgdGhlIGhhcmR3YXJlIGhhcyBwcmV2aW91c2x5IGJlZW4gcmVzZXQgYW5kIHRoZSAKKyAqIGVzdGFibGlzaGVkLiBBc3N1bWVzIHRoZSBoYXJkd2FyZSBoYXMgcHJldmlvdXNseSBiZWVuIHJlc2V0IGFuZCB0aGUKICAqIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlciBhcmUgbm90IGVuYWJsZWQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50CkBAIC05NTAsNyArOTUwLDcgQEAKIAkgKiB0aGVzZSByZWdpc3RlcnMgd2lsbCBiZSBzZXQgdG8gYSBkZWZhdWx0IHRocmVzaG9sZCB0aGF0IG1heSBiZQogCSAqIGFkanVzdGVkIGxhdGVyIGJ5IHRoZSBkcml2ZXIncyBydW50aW1lIGNvZGUuICBIb3dldmVyLCBpZiB0aGUKIAkgKiBhYmlsaXR5IHRvIHRyYW5zbWl0IHBhdXNlIGZyYW1lcyBpbiBub3QgZW5hYmxlZCwgdGhlbiB0aGVzZQotCSAqIHJlZ2lzdGVycyB3aWxsIGJlIHNldCB0byAwLiAKKwkgKiByZWdpc3RlcnMgd2lsbCBiZSBzZXQgdG8gMC4KIAkgKi8KIAlpZiAoIShody0+ZmMgJiBlMTAwMF9mY190eF9wYXVzZSkpIHsKIAkJRTEwMDBfV1JJVEVfUkVHKGh3LCBGQ1JUTCwgMCk7CkBAIC05OTIsOCArOTkyLDggQEAKIAlpbnQzMl90IHJldF92YWw7CiAKIAlERUJVR0ZVTkMoKTsKLQkvKiBPbiBhZGFwdGVycyB3aXRoIGEgTUFDIG5ld2VyIHRoYXQgODI1NDQsIFNXIERlZmluZWFibGUgcGluIDEgd2lsbCBiZSAKLQkgKiBzZXQgd2hlbiB0aGUgb3B0aWNzIGRldGVjdCBhIHNpZ25hbC4gT24gb2xkZXIgYWRhcHRlcnMsIGl0IHdpbGwgYmUgCisJLyogT24gYWRhcHRlcnMgd2l0aCBhIE1BQyBuZXdlciB0aGF0IDgyNTQ0LCBTVyBEZWZpbmVhYmxlIHBpbiAxIHdpbGwgYmUKKwkgKiBzZXQgd2hlbiB0aGUgb3B0aWNzIGRldGVjdCBhIHNpZ25hbC4gT24gb2xkZXIgYWRhcHRlcnMsIGl0IHdpbGwgYmUKIAkgKiBjbGVhcmVkIHdoZW4gdGhlcmUgaXMgYSBzaWduYWwKIAkgKi8KIAljdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOwpAQCAtMTAxMywxMiArMTAxMywxMiBAQAogCSAqIHRoZSBkZXZpY2UgYWNjb3JkaW5nbHkuICBJZiBhdXRvLW5lZ290aWF0aW9uIGlzIGVuYWJsZWQsIHRoZW4gc29mdHdhcmUKIAkgKiB3aWxsIGhhdmUgdG8gc2V0IHRoZSAiUEFVU0UiIGJpdHMgdG8gdGhlIGNvcnJlY3QgdmFsdWUgaW4gdGhlIFRyYW5tc2l0CiAJICogQ29uZmlnIFdvcmQgUmVnaXN0ZXIgKFRYQ1cpIGFuZCByZS1zdGFydCBhdXRvLW5lZ290aWF0aW9uLiAgSG93ZXZlciwgaWYKLQkgKiBhdXRvLW5lZ290aWF0aW9uIGlzIGRpc2FibGVkLCB0aGVuIHNvZnR3YXJlIHdpbGwgaGF2ZSB0byBtYW51YWxseSAKKwkgKiBhdXRvLW5lZ290aWF0aW9uIGlzIGRpc2FibGVkLCB0aGVuIHNvZnR3YXJlIHdpbGwgaGF2ZSB0byBtYW51YWxseQogCSAqIGNvbmZpZ3VyZSB0aGUgdHdvIGZsb3cgY29udHJvbCBlbmFibGUgYml0cyBpbiB0aGUgQ1RSTCByZWdpc3Rlci4KIAkgKgogCSAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlICJmYyIgcGFyYW1ldGVyIGFyZToKIAkgKiAgICAgIDA6ICBGbG93IGNvbnRyb2wgaXMgY29tcGxldGVseSBkaXNhYmxlZAotCSAqICAgICAgMTogIFJ4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gcmVjZWl2ZSBwYXVzZSBmcmFtZXMsIGJ1dCAKKwkgKiAgICAgIDE6ICBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzLCBidXQKIAkgKiAgICAgICAgICBub3Qgc2VuZCBwYXVzZSBmcmFtZXMpLgogCSAqICAgICAgMjogIFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gc2VuZCBwYXVzZSBmcmFtZXMgYnV0IHdlIGRvCiAJICogICAgICAgICAgbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCkBAIC0xMDMwLDggKzEwMzAsOCBAQAogCQl0eGN3ID0gKEUxMDAwX1RYQ1dfQU5FIHwgRTEwMDBfVFhDV19GRCk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfZmNfcnhfcGF1c2U6Ci0JCS8qIFJYIEZsb3cgY29udHJvbCBpcyBlbmFibGVkIGFuZCBUWCBGbG93IGNvbnRyb2wgaXMgZGlzYWJsZWQgYnkgYSAKLQkJICogc29mdHdhcmUgb3Zlci1yaWRlLiBTaW5jZSB0aGVyZSByZWFsbHkgaXNuJ3QgYSB3YXkgdG8gYWR2ZXJ0aXNlIAorCQkvKiBSWCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBhbmQgVFggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkIGJ5IGEKKwkJICogc29mdHdhcmUgb3Zlci1yaWRlLiBTaW5jZSB0aGVyZSByZWFsbHkgaXNuJ3QgYSB3YXkgdG8gYWR2ZXJ0aXNlCiAJCSAqIHRoYXQgd2UgYXJlIGNhcGFibGUgb2YgUlggUGF1c2UgT05MWSwgd2Ugd2lsbCBhZHZlcnRpc2UgdGhhdCB3ZQogCQkgKiBzdXBwb3J0IGJvdGggc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIFJYIFBBVVNFLiBMYXRlciwgd2Ugd2lsbAogCQkgKiAgZGlzYWJsZSB0aGUgYWRhcHRlcidzIGFiaWxpdHkgdG8gc2VuZCBQQVVTRSBmcmFtZXMuCkBAIC0xMDM5LDcgKzEwMzksNyBAQAogCQl0eGN3ID0gKEUxMDAwX1RYQ1dfQU5FIHwgRTEwMDBfVFhDV19GRCB8IEUxMDAwX1RYQ1dfUEFVU0VfTUFTSyk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfZmNfdHhfcGF1c2U6Ci0JCS8qIFRYIEZsb3cgY29udHJvbCBpcyBlbmFibGVkLCBhbmQgUlggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkLCBieSBhIAorCQkvKiBUWCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJYIEZsb3cgY29udHJvbCBpcyBkaXNhYmxlZCwgYnkgYQogCQkgKiBzb2Z0d2FyZSBvdmVyLXJpZGUuCiAJCSAqLwogCQl0eGN3ID0gKEUxMDAwX1RYQ1dfQU5FIHwgRTEwMDBfVFhDV19GRCB8IEUxMDAwX1RYQ1dfQVNNX0RJUik7CkBAIC0xMDcwLDggKzEwNzAsOCBAQAogCW1kZWxheSgxKTsKIAogCS8qIElmIHdlIGhhdmUgYSBzaWduYWwgKHRoZSBjYWJsZSBpcyBwbHVnZ2VkIGluKSB0aGVuIHBvbGwgZm9yIGEgIkxpbmstVXAiCi0JICogaW5kaWNhdGlvbiBpbiB0aGUgRGV2aWNlIFN0YXR1cyBSZWdpc3Rlci4gIFRpbWUtb3V0IGlmIGEgbGluayBpc24ndCAKLQkgKiBzZWVuIGluIDUwMCBtaWxsaXNlY29uZHMgc2Vjb25kcyAoQXV0by1uZWdvdGlhdGlvbiBzaG91bGQgY29tcGxldGUgaW4gCisJICogaW5kaWNhdGlvbiBpbiB0aGUgRGV2aWNlIFN0YXR1cyBSZWdpc3Rlci4gIFRpbWUtb3V0IGlmIGEgbGluayBpc24ndAorCSAqIHNlZW4gaW4gNTAwIG1pbGxpc2Vjb25kcyBzZWNvbmRzIChBdXRvLW5lZ290aWF0aW9uIHNob3VsZCBjb21wbGV0ZSBpbgogCSAqIGxlc3MgdGhhbiA1MDAgbWlsbGlzZWNvbmRzIGV2ZW4gaWYgdGhlIG90aGVyIGVuZCBpcyBkb2luZyBpdCBpbiBTVykuCiAJICovCiAJaWYgKChFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCkgJiBFMTAwMF9DVFJMX1NXRFBJTjEpID09IHNpZ25hbCkgewpAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoaSA9PSAoTElOS19VUF9USU1FT1VUIC8gMTApKSB7Ci0JCQkvKiBBdXRvTmVnIGZhaWxlZCB0byBhY2hpZXZlIGEgbGluaywgc28gd2UnbGwgY2FsbCAKKwkJCS8qIEF1dG9OZWcgZmFpbGVkIHRvIGFjaGlldmUgYSBsaW5rLCBzbyB3ZSdsbCBjYWxsCiAJCQkgKiBlMTAwMF9jaGVja19mb3JfbGluay4gVGhpcyByb3V0aW5lIHdpbGwgZm9yY2UgdGhlIGxpbmsgdXAgaWYgd2UKIAkJCSAqIGRldGVjdCBhIHNpZ25hbC4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGNvbW11bmljYXRlIHdpdGgKIAkJCSAqIG5vbi1hdXRvbmVnb3RpYXRpbmcgbGluayBwYXJ0bmVycy4KQEAgLTEyODQsNyArMTI4NCw3IEBACiAJCX0KIAl9CiAjZWxzZQotCS8qIElmIHdlIGRvIG5vdCB3YWl0IGZvciBhdXRvbmVndGF0aW9uIHRvIGNvbXBsZXRlIEkgCisJLyogSWYgd2UgZG8gbm90IHdhaXQgZm9yIGF1dG9uZWd0YXRpb24gdG8gY29tcGxldGUgSQogCSAqIGRvIG5vdCBzZWUgYSB2YWxpZCBsaW5rIHN0YXR1cy4KIAkgKi8KIAlyZXRfdmFsID0gZTEwMDBfd2FpdF9hdXRvbmVnKGh3KTsKQEAgLTE1NTgsNyArMTU1OCw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEZvcmNlcyB0aGUgTUFDJ3MgZmxvdyBjb250cm9sIHNldHRpbmdzLgotICogCisgKgogICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqCiAgKiBTZXRzIHRoZSBURkNFIGFuZCBSRkNFIGJpdHMgaW4gdGhlIGRldmljZSBjb250cm9sIHJlZ2lzdGVyIHRvIHJlZmxlY3QKQEAgLTE2MjUsNyArMTYyNSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIENvbmZpZ3VyZXMgZmxvdyBjb250cm9sIHNldHRpbmdzIGFmdGVyIGxpbmsgaXMgZXN0YWJsaXNoZWQKLSAqIAorICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKgogICogU2hvdWxkIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIHZhbGlkIGxpbmsgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCkBAIC0xODU5LDggKzE4NTksOCBAQAogCiAJREVCVUdGVU5DKCk7CiAKLQkvKiBPbiBhZGFwdGVycyB3aXRoIGEgTUFDIG5ld2VyIHRoYXQgODI1NDQsIFNXIERlZmluZWFibGUgcGluIDEgd2lsbCBiZSAKLQkgKiBzZXQgd2hlbiB0aGUgb3B0aWNzIGRldGVjdCBhIHNpZ25hbC4gT24gb2xkZXIgYWRhcHRlcnMsIGl0IHdpbGwgYmUgCisJLyogT24gYWRhcHRlcnMgd2l0aCBhIE1BQyBuZXdlciB0aGF0IDgyNTQ0LCBTVyBEZWZpbmVhYmxlIHBpbiAxIHdpbGwgYmUKKwkgKiBzZXQgd2hlbiB0aGUgb3B0aWNzIGRldGVjdCBhIHNpZ25hbC4gT24gb2xkZXIgYWRhcHRlcnMsIGl0IHdpbGwgYmUKIAkgKiBjbGVhcmVkIHdoZW4gdGhlcmUgaXMgYSBzaWduYWwKIAkgKi8KIAljdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIENUUkwpOwpAQCAtMTkyMCw3ICsxOTIwLDcgQEAKIAkJCX0KIAkJfQogCi0JCS8qIENvbmZpZ3VyZSBGbG93IENvbnRyb2wgbm93IHRoYXQgQXV0by1OZWcgaGFzIGNvbXBsZXRlZC4gRmlyc3QsIHdlIAorCQkvKiBDb25maWd1cmUgRmxvdyBDb250cm9sIG5vdyB0aGF0IEF1dG8tTmVnIGhhcyBjb21wbGV0ZWQuIEZpcnN0LCB3ZQogCQkgKiBuZWVkIHRvIHJlc3RvcmUgdGhlIGRlc2lyZWQgZmxvdyBjb250cm9sIHNldHRpbmdzIGJlY2F1c2Ugd2UgbWF5CiAJCSAqIGhhdmUgaGFkIHRvIHJlLWF1dG9uZWcgd2l0aCBhIGRpZmZlcmVudCBsaW5rIHBhcnRuZXIuCiAJCSAqLwpAQCAtMTk1MCw3ICsxOTUwLDcgQEAKIAkJCQkJICAgICBOV0FZX0xQQVJfMTAwVFhfSERfQ0FQUyB8CiAJCQkJCSAgICAgTldBWV9MUEFSXzEwMFRYX0ZEX0NBUFMgfAogCQkJCQkgICAgIE5XQVlfTFBBUl8xMDBUNF9DQVBTKSkgewotCQkJCS8qIElmIG91ciBsaW5rIHBhcnRuZXIgYWR2ZXJ0aXNlcyBhbnl0aGluZyBpbiBhZGRpdGlvbiB0byAKKwkJCQkvKiBJZiBvdXIgbGluayBwYXJ0bmVyIGFkdmVydGlzZXMgYW55dGhpbmcgaW4gYWRkaXRpb24gdG8KIAkJCQkgKiBnaWdhYml0LCB3ZSBkbyBub3QgbmVlZCB0byBlbmFibGUgVEJJIGNvbXBhdGliaWxpdHkuCiAJCQkJICovCiAJCQkJaWYgKGh3LT50YmlfY29tcGF0aWJpbGl0eV9vbikgewpAQCAtMjE1MSw3ICsyMTUxLDcgQEAKIAl1aW50MzJfdCBtYXNrOwogCiAJLyogV2UgbmVlZCB0byBzaGlmdCAiY291bnQiIG51bWJlciBvZiBiaXRzIG91dCB0byB0aGUgUEhZLiBTbywgdGhlIHZhbHVlCi0JICogaW4gdGhlICJkYXRhIiBwYXJhbWV0ZXIgd2lsbCBiZSBzaGlmdGVkIG91dCB0byB0aGUgUEhZIG9uZSBiaXQgYXQgYSAKKwkgKiBpbiB0aGUgImRhdGEiIHBhcmFtZXRlciB3aWxsIGJlIHNoaWZ0ZWQgb3V0IHRvIHRoZSBQSFkgb25lIGJpdCBhdCBhCiAJICogdGltZS4gSW4gb3JkZXIgdG8gZG8gdGhpcywgImRhdGEiIG11c3QgYmUgYnJva2VuIGRvd24gaW50byBiaXRzLgogCSAqLwogCW1hc2sgPSAweDAxOwpAQCAtMjE5MCw3ICsyMTkwLDcgQEAKICoKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoKLSogQml0cyBhcmUgc2hpZnRlZCBpbiBpbiBNU0IgdG8gTFNCIG9yZGVyLiAKKyogQml0cyBhcmUgc2hpZnRlZCBpbiBpbiBNU0IgdG8gTFNCIG9yZGVyLgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHVpbnQxNl90CiBlMTAwMF9zaGlmdF9pbl9tZGlfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQpAQCAtMjM2MCwxMiArMjM2MCwxMiBAQAogCX0gZWxzZSB7CiAJCS8qIFdlJ2xsIG5lZWQgdG8gdXNlIHRoZSBTVyBkZWZpbmVkIHBpbnMgdG8gc2hpZnQgdGhlIHdyaXRlIGNvbW1hbmQKIAkJICogb3V0IHRvIHRoZSBQSFkuIFdlIGZpcnN0IHNlbmQgYSBwcmVhbWJsZSB0byB0aGUgUEhZIHRvIHNpZ25hbCB0aGUKLQkJICogYmVnaW5uaW5nIG9mIHRoZSBNSUkgaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIGRvbmUgYnkgc2VuZGluZyAzMiAKKwkJICogYmVnaW5uaW5nIG9mIHRoZSBNSUkgaW5zdHJ1Y3Rpb24uICBUaGlzIGlzIGRvbmUgYnkgc2VuZGluZyAzMgogCQkgKiBjb25zZWN1dGl2ZSAiMSIgYml0cy4KIAkJICovCiAJCWUxMDAwX3NoaWZ0X291dF9tZGlfYml0cyhodywgUEhZX1BSRUFNQkxFLCBQSFlfUFJFQU1CTEVfU0laRSk7CiAKLQkJLyogTm93IGNvbWJpbmUgdGhlIHJlbWFpbmluZyByZXF1aXJlZCBmaWVsZHMgdGhhdCB3aWxsIGluZGljYXRlIGEgCisJCS8qIE5vdyBjb21iaW5lIHRoZSByZW1haW5pbmcgcmVxdWlyZWQgZmllbGRzIHRoYXQgd2lsbCBpbmRpY2F0ZSBhCiAJCSAqIHdyaXRlIG9wZXJhdGlvbi4gV2UgdXNlIHRoaXMgbWV0aG9kIGluc3RlYWQgb2YgY2FsbGluZyB0aGUKIAkJICogZTEwMDBfc2hpZnRfb3V0X21kaV9iaXRzIHJvdXRpbmUgZm9yIGVhY2ggZmllbGQgaW4gdGhlIGNvbW1hbmQuIFRoZQogCQkgKiBmb3JtYXQgb2YgYSBNSUkgd3JpdGUgaW5zdHJ1Y3Rpb24gaXMgYXMgZm9sbG93czoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZTEwMDAuaCBiL2RyaXZlcnMvZTEwMDAuaAppbmRleCBiYTA1YWMwLi4wZmJkYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2UxMDAwLmgKKysrIGIvZHJpdmVycy9lMTAwMC5oCkBAIC0xLDI1ICsxLDI1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi0gIAorCiAgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IAotICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSAKLSAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCiAgIGFueSBsYXRlciB2ZXJzaW9uLgotICAKLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIAotICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgCi0gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCiAgIG1vcmUgZGV0YWlscy4KLSAgCisKICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQogICBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAgCisKICAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCiAgIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gIAorCiAgIENvbnRhY3QgSW5mb3JtYXRpb246CiAgIExpbnV4IE5JQ1MgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPgogICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CkBAIC0yNTEsNyArMjUxLDcgQEAKIC8qIFRoaXMgZGVmaW5lcyB0aGUgYml0cyB0aGF0IGFyZSBzZXQgaW4gdGhlIEludGVycnVwdCBNYXNrCiAgKiBTZXQvUmVhZCBSZWdpc3Rlci4gIEVhY2ggYml0IGlzIGRvY3VtZW50ZWQgYmVsb3c6CiAgKiAgIG8gUlhETVQwID0gUmVjZWl2ZSBEZXNjcmlwdG9yIE1pbmltdW0gVGhyZXNob2xkIGhpdCAocmluZyAwKQotICogICBvIFJYU0VRICA9IFJlY2VpdmUgU2VxdWVuY2UgRXJyb3IgCisgKiAgIG8gUlhTRVEgID0gUmVjZWl2ZSBTZXF1ZW5jZSBFcnJvcgogICovCiAjZGVmaW5lIFBPTExfSU1TX0VOQUJMRV9NQVNLICggXAogICAgIEUxMDAwX0lNU19SWERNVDAgfCAgICAgICAgIFwKQEAgLTI3NSw3ICsyNzUsNyBAQAogLyogVGhlIG51bWJlciBvZiBoaWdoL2xvdyByZWdpc3RlciBwYWlycyBpbiB0aGUgUkFSLiBUaGUgUkFSIChSZWNlaXZlIEFkZHJlc3MKICAqIFJlZ2lzdGVycykgaG9sZHMgdGhlIGRpcmVjdGVkIGFuZCBtdWx0aWNhc3QgYWRkcmVzc2VzIHRoYXQgd2UgbW9uaXRvci4gV2UKICAqIHJlc2VydmUgb25lIG9mIHRoZXNlIHNwb3RzIGZvciBvdXIgZGlyZWN0ZWQgYWRkcmVzcywgYWxsb3dpbmcgdXMgcm9vbSBmb3IKLSAqIEUxMDAwX1JBUl9FTlRSSUVTIC0gMSBtdWx0aWNhc3QgYWRkcmVzc2VzLiAKKyAqIEUxMDAwX1JBUl9FTlRSSUVTIC0gMSBtdWx0aWNhc3QgYWRkcmVzc2VzLgogICovCiAjZGVmaW5lIEUxMDAwX1JBUl9FTlRSSUVTIDE2CiAKQEAgLTQ3NSw3ICs0NzUsNyBAQAogLyogUmVnaXN0ZXIgU2V0LiAoODI1NDMsIDgyNTQ0KQogICoKICAqIFJlZ2lzdGVycyBhcmUgZGVmaW5lZCB0byBiZSAzMiBiaXRzIGFuZCAgc2hvdWxkIGJlIGFjY2Vzc2VkIGFzIDMyIGJpdCB2YWx1ZXMuCi0gKiBUaGVzZSByZWdpc3RlcnMgYXJlIHBoeXNpY2FsbHkgbG9jYXRlZCBvbiB0aGUgTklDLCBidXQgYXJlIG1hcHBlZCBpbnRvIHRoZSAKKyAqIFRoZXNlIHJlZ2lzdGVycyBhcmUgcGh5c2ljYWxseSBsb2NhdGVkIG9uIHRoZSBOSUMsIGJ1dCBhcmUgbWFwcGVkIGludG8gdGhlCiAgKiBob3N0IG1lbW9yeSBhZGRyZXNzIHNwYWNlLgogICoKICAqIFJXIC0gcmVnaXN0ZXIgaXMgYm90aCByZWFkYWJsZSBhbmQgd3JpdGFibGUKQEAgLTEyNDgsNyArMTI0OCw3IEBACiAjZGVmaW5lIEUxMDAwX01BTkNfSVBWNl9FTiAgICAgICAweDAwMDAwODAwCS8qIEVuYWJsZSBJUHY2ICovCiAjZGVmaW5lIEUxMDAwX01BTkNfU05BUF9FTiAgICAgICAweDAwMDAxMDAwCS8qIEFjY2VwdCBMTEMvU05BUCAqLwogI2RlZmluZSBFMTAwMF9NQU5DX0FSUF9FTiAgICAgICAgMHgwMDAwMjAwMAkvKiBFbmFibGUgQVJQIFJlcXVlc3QgRmlsdGVyaW5nICovCi0jZGVmaW5lIEUxMDAwX01BTkNfTkVJR0hCT1JfRU4gICAweDAwMDA0MDAwCS8qIEVuYWJsZSBOZWlnaGJvciBEaXNjb3ZlcnkgCisjZGVmaW5lIEUxMDAwX01BTkNfTkVJR0hCT1JfRU4gICAweDAwMDA0MDAwCS8qIEVuYWJsZSBOZWlnaGJvciBEaXNjb3ZlcnkKIAkJCQkJCSAqIEZpbHRlcmluZyAqLwogI2RlZmluZSBFMTAwMF9NQU5DX1RDT19SRVNFVCAgICAgMHgwMDAxMDAwMAkvKiBUQ08gUmVzZXQgT2NjdXJyZWQgKi8KICNkZWZpbmUgRTEwMDBfTUFOQ19SQ1ZfVENPX0VOICAgIDB4MDAwMjAwMDAJLyogUmVjZWl2ZSBUQ08gUGFja2V0cyBFbmFibGVkICovCkBAIC0xMjg3LDkgKzEyODcsOSBAQAogI2RlZmluZSBJRF9MRURfUkVTRVJWRURfMDAwMCAweDAwMDAKICNkZWZpbmUgSURfTEVEX1JFU0VSVkVEX0ZGRkYgMHhGRkZGCiAjZGVmaW5lIElEX0xFRF9ERUZBVUxUICAgICAgICgoSURfTEVEX09GRjFfT04yIDw8IDEyKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJRF9MRURfT0ZGMV9PRkYyIDw8IDgpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElEX0xFRF9ERUYxX0RFRjIgPDwgNCkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSURfTEVEX0RFRjFfREVGMikpCisJCQkgICAgICAoSURfTEVEX09GRjFfT0ZGMiA8PCA4KSB8IFwKKwkJCSAgICAgIChJRF9MRURfREVGMV9ERUYyIDw8IDQpIHwgXAorCQkJICAgICAgKElEX0xFRF9ERUYxX0RFRjIpKQogI2RlZmluZSBJRF9MRURfREVGMV9ERUYyICAgICAweDEKICNkZWZpbmUgSURfTEVEX0RFRjFfT04yICAgICAgMHgyCiAjZGVmaW5lIElEX0xFRF9ERUYxX09GRjIgICAgIDB4MwpAQCAtMTQxMCwyNiArMTQxMCwyNiBAQAogCiAvKiBUaGUgbnVtYmVyIG9mIGJpdHMgdGhhdCB3ZSBuZWVkIHRvIHNoaWZ0IHJpZ2h0IHRvIG1vdmUgdGhlICJwYXVzZSIKICAqIGJpdHMgZnJvbSB0aGUgRUVQUk9NIChiaXRzIDEzOjEyKSB0byB0aGUgInBhdXNlIiAoYml0cyA4OjcpIGZpZWxkCi0gKiBpbiB0aGUgVFhDVyByZWdpc3RlciAKKyAqIGluIHRoZSBUWENXIHJlZ2lzdGVyCiAgKi8KICNkZWZpbmUgUEFVU0VfU0hJRlQgNQogCiAvKiBUaGUgbnVtYmVyIG9mIGJpdHMgdGhhdCB3ZSBuZWVkIHRvIHNoaWZ0IGxlZnQgdG8gbW92ZSB0aGUgIlNXRFBJTyIKICAqIGJpdHMgZnJvbSB0aGUgRUVQUk9NIChiaXRzIDg6NSkgdG8gdGhlICJTV0RQSU8iIChiaXRzIDI1OjIyKSBmaWVsZAotICogaW4gdGhlIENUUkwgcmVnaXN0ZXIgCisgKiBpbiB0aGUgQ1RSTCByZWdpc3RlcgogICovCiAjZGVmaW5lIFNXRFBJT19TSElGVCAxNwogCiAvKiBUaGUgbnVtYmVyIG9mIGJpdHMgdGhhdCB3ZSBuZWVkIHRvIHNoaWZ0IGxlZnQgdG8gbW92ZSB0aGUgIlNXRFBJT19FWFQiCiAgKiBiaXRzIGZyb20gdGhlIEVFUFJPTSB3b3JkIEYgKGJpdHMgNzo0KSB0byB0aGUgYml0cyAxMTo4IG9mIFRoZQogICogRXh0ZW5kZWQgQ1RSTCByZWdpc3Rlci4KLSAqIGluIHRoZSBDVFJMIHJlZ2lzdGVyIAorICogaW4gdGhlIENUUkwgcmVnaXN0ZXIKICAqLwogI2RlZmluZSBTV0RQSU9fX0VYVF9TSElGVCA0CiAKIC8qIFRoZSBudW1iZXIgb2YgYml0cyB0aGF0IHdlIG5lZWQgdG8gc2hpZnQgbGVmdCB0byBtb3ZlIHRoZSAiSUxPUyIKICAqIGJpdCBmcm9tIHRoZSBFRVBST00gKGJpdCA0KSB0byB0aGUgIklMT1MiIChiaXQgNykgZmllbGQKLSAqIGluIHRoZSBDVFJMIHJlZ2lzdGVyIAorICogaW4gdGhlIENUUkwgcmVnaXN0ZXIKICAqLwogI2RlZmluZSBJTE9TX1NISUZUICAzCiAKQEAgLTE0NDYsNyArMTQ0Niw3IEBACiAvKiBUQklfQUNDRVBUIG1hY3JvIGRlZmluaXRpb246CiAgKgogICogVGhpcyBtYWNybyByZXF1aXJlczoKLSAqICAgICAgYWRhcHRlciA9IGEgcG9pbnRlciB0byBzdHJ1Y3QgZTEwMDBfaHcgCisgKiAgICAgIGFkYXB0ZXIgPSBhIHBvaW50ZXIgdG8gc3RydWN0IGUxMDAwX2h3CiAgKiAgICAgIHN0YXR1cyA9IHRoZSA4IGJpdCBzdGF0dXMgZmllbGQgb2YgdGhlIFJYIGRlc2NyaXB0b3Igd2l0aCBFT1Agc2V0CiAgKiAgICAgIGVycm9yID0gdGhlIDggYml0IGVycm9yIGZpZWxkIG9mIHRoZSBSWCBkZXNjcmlwdG9yIHdpdGggRU9QIHNldAogICogICAgICBsZW5ndGggPSB0aGUgc3VtIG9mIGFsbCB0aGUgbGVuZ3RoIGZpZWxkcyBvZiB0aGUgUlggZGVzY3JpcHRvcnMgdGhhdApAQCAtMTQ1NSw3ICsxNDU1LDcgQEAKICAqICAgICAgbWF4X2ZyYW1lX2xlbmd0aCA9IHRoZSBtYXhpbXVtIGZyYW1lIGxlbmd0aCB3ZSB3YW50IHRvIGFjY2VwdC4KICAqICAgICAgbWluX2ZyYW1lX2xlbmd0aCA9IHRoZSBtaW5pbXVtIGZyYW1lIGxlbmd0aCB3ZSB3YW50IHRvIGFjY2VwdC4KICAqCi0gKiBUaGlzIG1hY3JvIGlzIGEgY29uZGl0aW9uYWwgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgaW50ZXJydXB0IAorICogVGhpcyBtYWNybyBpcyBhIGNvbmRpdGlvbmFsIHRoYXQgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIGludGVycnVwdAogICogaGFuZGxlcidzIFJ4IHByb2Nlc3Npbmcgcm91dGluZSB3aGVuIFJ4RXJyb3JzIGhhdmUgYmVlbiBkZXRlY3RlZC4KICAqCiAgKiBUeXBpY2FsIHVzZToKQEAgLTE0NzUsMTAgKzE0NzUsMTAgQEAKICAgICAgKCgoZXJyb3JzKSAmIEUxMDAwX1JYRF9FUlJfRlJBTUVfRVJSX01BU0spID09IEUxMDAwX1JYRF9FUlJfQ0UpICYmIFwKICAgICAgKChsYXN0X2J5dGUpID09IENBUlJJRVJfRVhURU5TSU9OKSAmJiBcCiAgICAgICgoKHN0YXR1cykgJiBFMTAwMF9SWERfU1RBVF9WUCkgPyBcCi0gICAgICAgICAgKCgobGVuZ3RoKSA+ICgoYWRhcHRlciktPm1pbl9mcmFtZV9zaXplIC0gVkxBTl9UQUdfU0laRSkpICYmIFwKLSAgICAgICAgICAgKChsZW5ndGgpIDw9ICgoYWRhcHRlciktPm1heF9mcmFtZV9zaXplICsgMSkpKSA6IFwKLSAgICAgICAgICAoKChsZW5ndGgpID4gKGFkYXB0ZXIpLT5taW5fZnJhbWVfc2l6ZSkgJiYgXAotICAgICAgICAgICAoKGxlbmd0aCkgPD0gKChhZGFwdGVyKS0+bWF4X2ZyYW1lX3NpemUgKyBWTEFOX1RBR19TSVpFICsgMSkpKSkpCisJICAoKChsZW5ndGgpID4gKChhZGFwdGVyKS0+bWluX2ZyYW1lX3NpemUgLSBWTEFOX1RBR19TSVpFKSkgJiYgXAorCSAgICgobGVuZ3RoKSA8PSAoKGFkYXB0ZXIpLT5tYXhfZnJhbWVfc2l6ZSArIDEpKSkgOiBcCisJICAoKChsZW5ndGgpID4gKGFkYXB0ZXIpLT5taW5fZnJhbWVfc2l6ZSkgJiYgXAorCSAgICgobGVuZ3RoKSA8PSAoKGFkYXB0ZXIpLT5tYXhfZnJhbWVfc2l6ZSArIFZMQU5fVEFHX1NJWkUgKyAxKSkpKSkKIAogLyogU3RydWN0dXJlcywgZW51bXMsIGFuZCBtYWNyb3MgZm9yIHRoZSBQSFkgKi8KIApAQCAtMTU4OSw3ICsxNTg5LDcgQEAKIAkJCQkJICogMCA9IGNhbm5vdCBjb21wbHkgd2l0aCBtc2cKIAkJCQkJICovCiAjZGVmaW5lIE5QVFhfTVNHX1BBR0UgICAgICAgMHgyMDAwCS8qIGZvcm1hdHRlZCgxKS91bmZvcm1hdHRlZCgwKSBwZyAqLwotI2RlZmluZSBOUFRYX05FWFRfUEFHRSAgICAgIDB4ODAwMAkvKiAxID0gYWRkaXRpb24gTlAgd2lsbCBmb2xsb3cgCisjZGVmaW5lIE5QVFhfTkVYVF9QQUdFICAgICAgMHg4MDAwCS8qIDEgPSBhZGRpdGlvbiBOUCB3aWxsIGZvbGxvdwogCQkJCQkgKiAwID0gc2VuZGluZyBsYXN0IE5QCiAJCQkJCSAqLwogCkBAIC0xNTk4LDEzICsxNTk4LDEzIEBACiAjZGVmaW5lIExQX1JOUFJfVE9HR0xFICAgICAgICAgMHgwODAwCS8qIFRvZ2dsZXMgYmV0d2VlbiBleGNoYW5nZXMKIAkJCQkJICogb2YgZGlmZmVyZW50IE5QCiAJCQkJCSAqLwotI2RlZmluZSBMUF9STlBSX0FDS05PV0xER0UyICAgIDB4MTAwMAkvKiAxID0gd2lsbCBjb21wbHkgd2l0aCBtc2cgCisjZGVmaW5lIExQX1JOUFJfQUNLTk9XTERHRTIgICAgMHgxMDAwCS8qIDEgPSB3aWxsIGNvbXBseSB3aXRoIG1zZwogCQkJCQkgKiAwID0gY2Fubm90IGNvbXBseSB3aXRoIG1zZwogCQkJCQkgKi8KICNkZWZpbmUgTFBfUk5QUl9NU0dfUEFHRSAgICAgICAweDIwMDAJLyogZm9ybWF0dGVkKDEpL3VuZm9ybWF0dGVkKDApIHBnICovCiAjZGVmaW5lIExQX1JOUFJfQUNLTk9XTERHRSAgICAgMHg0MDAwCS8qIDEgPSBBQ0sgLyAwID0gTk8gQUNLICovCiAjZGVmaW5lIExQX1JOUFJfTkVYVF9QQUdFICAgICAgMHg4MDAwCS8qIDEgPSBhZGRpdGlvbiBOUCB3aWxsIGZvbGxvdwotCQkJCQkgKiAwID0gc2VuZGluZyBsYXN0IE5QIAorCQkJCQkgKiAwID0gc2VuZGluZyBsYXN0IE5QCiAJCQkJCSAqLwogCiAvKiAxMDAwQkFTRS1UIENvbnRyb2wgUmVnaXN0ZXIgKi8KQEAgLTE2NTEsMTggKzE2NTEsMTggQEAKICNkZWZpbmUgTTg4RTEwMDBfUFNDUl9KQUJCRVJfRElTQUJMRSAgICAweDAwMDEJLyogMT1KYWJiZXIgRnVuY3Rpb24gZGlzYWJsZWQgKi8KICNkZWZpbmUgTTg4RTEwMDBfUFNDUl9QT0xBUklUWV9SRVZFUlNBTCAweDAwMDIJLyogMT1Qb2xhcml0eSBSZXZlcnNhbCBlbmFibGVkICovCiAjZGVmaW5lIE04OEUxMDAwX1BTQ1JfU1FFX1RFU1QgICAgICAgICAgMHgwMDA0CS8qIDE9U1FFIFRlc3QgZW5hYmxlZCAqLwotI2RlZmluZSBNODhFMTAwMF9QU0NSX0NMSzEyNV9ESVNBQkxFICAgIDB4MDAxMAkvKiAxPUNMSzEyNSBsb3csIAorI2RlZmluZSBNODhFMTAwMF9QU0NSX0NMSzEyNV9ESVNBQkxFICAgIDB4MDAxMAkvKiAxPUNMSzEyNSBsb3csCiAJCQkJCQkgKiAwPUNMSzEyNSB0b2dnbGluZwogCQkJCQkJICovCiAjZGVmaW5lIE04OEUxMDAwX1BTQ1JfTURJX01BTlVBTF9NT0RFICAweDAwMDAJLyogTURJIENyb3Nzb3ZlciBNb2RlIGJpdHMgNjo1ICovCiAJCQkJCSAgICAgICAvKiBNYW51YWwgTURJIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgTTg4RTEwMDBfUFNDUl9NRElYX01BTlVBTF9NT0RFIDB4MDAyMAkvKiBNYW51YWwgTURJWCBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIE04OEUxMDAwX1BTQ1JfQVVUT19YXzEwMDBUICAgICAweDAwNDAJLyogMTAwMEJBU0UtVDogQXV0byBjcm9zc292ZXIsCi0JCQkJCQkgKiAgMTAwQkFTRS1UWC8xMEJBU0UtVDogCisJCQkJCQkgKiAgMTAwQkFTRS1UWC8xMEJBU0UtVDoKIAkJCQkJCSAqICBNREkgTW9kZQogCQkJCQkJICovCi0jZGVmaW5lIE04OEUxMDAwX1BTQ1JfQVVUT19YX01PREUgICAgICAweDAwNjAJLyogQXV0byBjcm9zc292ZXIgZW5hYmxlZCAKLQkJCQkJCSAqIGFsbCBzcGVlZHMuIAorI2RlZmluZSBNODhFMTAwMF9QU0NSX0FVVE9fWF9NT0RFICAgICAgMHgwMDYwCS8qIEF1dG8gY3Jvc3NvdmVyIGVuYWJsZWQKKwkJCQkJCSAqIGFsbCBzcGVlZHMuCiAJCQkJCQkgKi8KICNkZWZpbmUgTTg4RTEwMDBfUFNDUl8xMEJUX0VYVF9ESVNUX0VOQUJMRSAweDAwODAKIAkJCQkJLyogMT1FbmFibGUgRXh0ZW5kZWQgMTBCQVNFLVQgZGlzdGFuY2UKQEAgLTE3MDMsNyArMTcwMyw3IEBACiAjZGVmaW5lIE04OEUxMDAwX0VQU0NSX0RPV05fTk9fSURMRSAgIDB4ODAwMAkvKiAxPUxvc3QgbG9jayBkZXRlY3QgZW5hYmxlZC4KIAkJCQkJCSAqIFdpbGwgYXNzZXJ0IGxvc3QgbG9jayBhbmQgYnJpbmcKIAkJCQkJCSAqIGxpbmsgZG93biBpZiBpZGxlIG5vdCBzZWVuCi0JCQkJCQkgKiB3aXRoaW4gMW1zIGluIDEwMDBCQVNFLVQgCisJCQkJCQkgKiB3aXRoaW4gMW1zIGluIDEwMDBCQVNFLVQKIAkJCQkJCSAqLwogLyogTnVtYmVyIG9mIHRpbWVzIHdlIHdpbGwgYXR0ZW1wdCB0byBhdXRvbmVnb3RpYXRlIGJlZm9yZSBkb3duc2hpZnRpbmcgaWYgd2UKICAqIGFyZSB0aGUgbWFzdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VlcHJvMTAwLmMgYi9kcml2ZXJzL2VlcHJvMTAwLmMKaW5kZXggYTBiYjc2ZC4uYWI4ZjFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZXBybzEwMC5jCisrKyBiL2RyaXZlcnMvZWVwcm8xMDAuYwpAQCAtNjc5LDExICs2NzksMTEgQEAKICAgICAvKiBTaGlmdCB0aGUgZW5hYmxlIGNvbW1hbmQgYml0cyBvdXQuICovCiAgICAgZm9yIChpID0gKGFkZHJfbGVuK0VFX0NNRF9CSVRTLTEpOyBpID49IDA7IGktLSkKICAgICB7Ci0gICAgICAgIGRhdGF2YWwgPSAoZW5hYmxlX2NtZCAmICgxIDw8IGkpKSA/IEVFX0RBVEFfV1JJVEUgOiAwOwotICAgICAgICBPVVRXKGRldiwgRUVfRU5CIHwgZGF0YXZhbCwgU0NCZWVwcm9tKTsKLSAgICAgICAgdWRlbGF5KDEpOwotICAgICAgICBPVVRXKGRldiwgRUVfRU5CIHwgZGF0YXZhbCB8IEVFX1NISUZUX0NMSywgU0NCZWVwcm9tKTsKLSAgICAgICAgdWRlbGF5KDEpOworCWRhdGF2YWwgPSAoZW5hYmxlX2NtZCAmICgxIDw8IGkpKSA/IEVFX0RBVEFfV1JJVEUgOiAwOworCU9VVFcoZGV2LCBFRV9FTkIgfCBkYXRhdmFsLCBTQ0JlZXByb20pOworCXVkZWxheSgxKTsKKwlPVVRXKGRldiwgRUVfRU5CIHwgZGF0YXZhbCB8IEVFX1NISUZUX0NMSywgU0NCZWVwcm9tKTsKKwl1ZGVsYXkoMSk7CiAgICAgfQogCiAgICAgT1VUVyhkZXYsIEVFX0VOQiwgU0NCZWVwcm9tKTsKQEAgLTY5NiwxMSArNjk2LDExIEBACiAgICAgLyogU2hpZnQgdGhlIHdyaXRlIGNvbW1hbmQgYml0cyBvdXQuICovCiAgICAgZm9yIChpID0gKGFkZHJfbGVuK0VFX0NNRF9CSVRTLTEpOyBpID49IDA7IGktLSkKICAgICB7Ci0gICAgICAgIGRhdGF2YWwgPSAod3JpdGVfY21kICYgKDEgPDwgaSkpID8gRUVfREFUQV9XUklURSA6IDA7Ci0gICAgICAgIE9VVFcoZGV2LCBFRV9FTkIgfCBkYXRhdmFsLCBTQ0JlZXByb20pOwotICAgICAgICB1ZGVsYXkoMSk7Ci0gICAgICAgIE9VVFcoZGV2LCBFRV9FTkIgfCBkYXRhdmFsIHwgRUVfU0hJRlRfQ0xLLCBTQ0JlZXByb20pOwotICAgICAgICB1ZGVsYXkoMSk7CisJZGF0YXZhbCA9ICh3cml0ZV9jbWQgJiAoMSA8PCBpKSkgPyBFRV9EQVRBX1dSSVRFIDogMDsKKwlPVVRXKGRldiwgRUVfRU5CIHwgZGF0YXZhbCwgU0NCZWVwcm9tKTsKKwl1ZGVsYXkoMSk7CisJT1VUVyhkZXYsIEVFX0VOQiB8IGRhdGF2YWwgfCBFRV9TSElGVF9DTEssIFNDQmVlcHJvbSk7CisJdWRlbGF5KDEpOwogICAgIH0KIAogICAgIC8qIFdyaXRlIHRoZSBkYXRhICovCkBAIC03MzAsMTcgKzczMCwxNyBAQAogICAgIHRtcGxvbmcgPSAxMDsKICAgICBkbwogICAgIHsKLSAgICAgICAgZGF0YXZhbCA9IElOVyhkZXYsIFNDQmVlcHJvbSk7Ci0gICAgICAgIGlmIChkYXRhdmFsICYgRUVfREFUQV9SRUFEKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHVkZWxheSgxMDAwMCk7CisJZGF0YXZhbCA9IElOVyhkZXYsIFNDQmVlcHJvbSk7CisJaWYgKGRhdGF2YWwgJiBFRV9EQVRBX1JFQUQpCisJICAgIGJyZWFrOworCXVkZWxheSgxMDAwMCk7CiAgICAgfQogICAgIHdoaWxlICgtLSB0bXBsb25nKTsKIAogICAgIGlmICh0bXBsb25nID09IDApCiAgICAgewotICAgICAgICBwcmludGYgKCJXcml0ZSBpODI1NTkgZWVwcm9tIHRpbWVkIG91dCAoMTAwIG1zIHdhaXRpbmcgZm9yIGRhdGEgcmVhZHkuXG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOworCXByaW50ZiAoIldyaXRlIGk4MjU1OSBlZXByb20gdGltZWQgb3V0ICgxMDAgbXMgd2FpdGluZyBmb3IgZGF0YSByZWFkeS5cbiIpOworCXJldHVybiAtMTsKICAgICB9CiAKICAgICAvKiBUZXJtaW5hdGUgdGhlIEVFUFJPTSBhY2Nlc3MuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2k4MDQyLmMgYi9kcml2ZXJzL2k4MDQyLmMKaW5kZXggY2UyNGZjOS4uZTIxOTc4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pODA0Mi5jCisrKyBiL2RyaXZlcnMvaTgwNDIuYwpAQCAtMzIyLDIwICszMjIsMjAgQEAKICAgICBrZXltYXAgPSBLQkRfVVM7CiAgICAgaWYgKChwZW52ID0gZ2V0ZW52ICgia2V5bWFwIikpICE9IE5VTEwpCiAgICAgewotICAgICAgICBpZiAoc3RybmNtcCAocGVudiwgImRlIiwgMykgPT0gMCkKLSAgICAgICAga2V5bWFwID0gS0JEX0dFUjsKKwlpZiAoc3RybmNtcCAocGVudiwgImRlIiwgMykgPT0gMCkKKwlrZXltYXAgPSBLQkRfR0VSOwogICAgIH0KIAogICAgIGZvciAodHJ5ID0gMDsgdHJ5IDwgS0JEX1JFU0VUX1RSSUVTOyB0cnkrKykKICAgICB7Ci0gICAgICAgIGlmIChrYmRfcmVzZXQoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBrYmRfbWFwcGluZyAgID0ga2V5bWFwOwotICAgICAgICAgICAga2JkX2ZsYWdzICAgICA9IE5PUk1BTDsKLSAgICAgICAgICAgIGtiZF9zdGF0ZSAgICAgPSAwOwotICAgICAgICAgICAga2JkX2xlZF9zZXQoKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQorCWlmIChrYmRfcmVzZXQoKSA9PSAwKQorCXsKKwkgICAga2JkX21hcHBpbmcgICA9IGtleW1hcDsKKwkgICAga2JkX2ZsYWdzICAgICA9IE5PUk1BTDsKKwkgICAga2JkX3N0YXRlICAgICA9IDA7CisJICAgIGtiZF9sZWRfc2V0KCk7CisJICAgIHJldHVybiAwOworCSAgICB9CiAgICAgfQogICAgIHJldHVybiAtMTsKIH0KQEAgLTM1MywyNSArMzUzLDI1IEBACiAjaWZkZWYgQ09ORklHX0NPTlNPTEVfQ1VSU09SCiAgICAgaWYgKC0tYmxpbmtDb3VudCA9PSAwKQogICAgIHsKLSAgICAgICAgY3Vyc29yX3N0YXRlIF49IDE7Ci0gICAgICAgIGNvbnNvbGVfY3Vyc29yIChjdXJzb3Jfc3RhdGUpOwotICAgICAgICBibGlua0NvdW50ID0gQ0ZHX0NPTlNPTEVfQkxJTktfQ09VTlQ7Ci0gICAgICAgIHVkZWxheSAoMTApOworCWN1cnNvcl9zdGF0ZSBePSAxOworCWNvbnNvbGVfY3Vyc29yIChjdXJzb3Jfc3RhdGUpOworCWJsaW5rQ291bnQgPSBDRkdfQ09OU09MRV9CTElOS19DT1VOVDsKKwl1ZGVsYXkgKDEwKTsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmICgoaW44IChJODA0Ml9TVEFUVVNfUkVHKSAmIDB4MDEpID09IDApCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHNjYW5fY29kZSA9IGluOCAoSTgwNDJfREFUQV9SRUcpOwotICAgICAgICBpZiAoc2Nhbl9jb2RlID09IDB4ZmEpCi0gICAgICAgICAgICByZXR1cm4gMDsKKwlzY2FuX2NvZGUgPSBpbjggKEk4MDQyX0RBVEFfUkVHKTsKKwlpZiAoc2Nhbl9jb2RlID09IDB4ZmEpCisJICAgIHJldHVybiAwOwogCi0gICAgICAgIGtiZF9jb252X2NoYXIoc2Nhbl9jb2RlKTsKKwlrYmRfY29udl9jaGFyKHNjYW5fY29kZSk7CiAKLSAgICAgICAgaWYgKGtiZF9pbnB1dCAhPSAtMSkKLSAgICAgICAgICAgIHJldHVybiAxOworCWlmIChrYmRfaW5wdXQgIT0gLTEpCisJICAgIHJldHVybiAxOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTM4OSwyMyArMzg5LDIzIEBACiAKICAgICB3aGlsZSAoa2JkX2lucHV0ID09IC0xKQogICAgIHsKLSAgICAgICAgd2hpbGUgKChpbjggKEk4MDQyX1NUQVRVU19SRUcpICYgMHgwMSkgPT0gMCkKLSAgICAgICAgeworCXdoaWxlICgoaW44IChJODA0Ml9TVEFUVVNfUkVHKSAmIDB4MDEpID09IDApCisJewogI2lmZGVmIENPTkZJR19DT05TT0xFX0NVUlNPUgotICAgICAgICAgICAgaWYgKC0tYmxpbmtDb3VudD09MCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjdXJzb3Jfc3RhdGUgXj0gMTsKLSAgICAgICAgICAgICAgICBjb25zb2xlX2N1cnNvciAoY3Vyc29yX3N0YXRlKTsKLSAgICAgICAgICAgICAgICBibGlua0NvdW50ID0gQ0ZHX0NPTlNPTEVfQkxJTktfQ09VTlQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB1ZGVsYXkgKDEwKTsKKwkgICAgaWYgKC0tYmxpbmtDb3VudD09MCkKKwkgICAgeworCQljdXJzb3Jfc3RhdGUgXj0gMTsKKwkJY29uc29sZV9jdXJzb3IgKGN1cnNvcl9zdGF0ZSk7CisJCWJsaW5rQ291bnQgPSBDRkdfQ09OU09MRV9CTElOS19DT1VOVDsKKwkgICAgfQorCSAgICB1ZGVsYXkgKDEwKTsKICNlbmRpZgotICAgICAgICB9CisJfQogCi0gICAgICAgIHNjYW5fY29kZSA9IGluOCAoSTgwNDJfREFUQV9SRUcpOworCXNjYW5fY29kZSA9IGluOCAoSTgwNDJfREFUQV9SRUcpOwogCi0gICAgICAgIGlmIChzY2FuX2NvZGUgIT0gMHhmYSkKLSAgICAgICAga2JkX2NvbnZfY2hhciAoc2Nhbl9jb2RlKTsKKwlpZiAoc2Nhbl9jb2RlICE9IDB4ZmEpCisJa2JkX2NvbnZfY2hhciAoc2Nhbl9jb2RlKTsKICAgICB9CiAgICAgcmV0X2NociA9IGtiZF9pbnB1dDsKICAgICBrYmRfaW5wdXQgPSAtMTsKQEAgLTQxOSw2MiArNDE5LDYyIEBACiB7CiAgICAgaWYgKHNjYW5fY29kZSA9PSAweGUwKQogICAgIHsKLSAgICAgICAga2JkX2ZsYWdzIHw9IEVYVDsKLSAgICAgICAgcmV0dXJuOworCWtiZF9mbGFncyB8PSBFWFQ7CisJcmV0dXJuOwogICAgIH0KIAogICAgIC8qIGlmIGhpZ2ggYml0IG9mIHNjYW5fY29kZSwgc2V0IGJyZWFrIGZsYWcgKi8KICAgICBpZiAoc2Nhbl9jb2RlICYgMHg4MCkKLSAgICAgICAga2JkX2ZsYWdzIHw9ICBCUks7CisJa2JkX2ZsYWdzIHw9ICBCUks7CiAgICAgZWxzZQotICAgICAgICBrYmRfZmxhZ3MgJj0gfkJSSzsKKwlrYmRfZmxhZ3MgJj0gfkJSSzsKIAogICAgIGlmICgoc2Nhbl9jb2RlID09IDB4ZTEpIHx8IChrYmRfZmxhZ3MgJiBFMSkpCiAgICAgewotICAgICAgICBpZiAoc2Nhbl9jb2RlID09IDB4ZTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGtiZF9mbGFncyBePSBCUks7ICAgICAvKiByZXNldCB0aGUgYnJlYWsgZmxhZyAqLwotICAgICAgICAgICAga2JkX2ZsYWdzIF49IEUxOyAgICAgIC8qIGJpdHdpc2UgRVhPUiB3aXRoIEUxIGZsYWcgKi8KLSAgICAgICAgfQotICAgICAgICByZXR1cm47CisJaWYgKHNjYW5fY29kZSA9PSAweGUxKQorCXsKKwkgICAga2JkX2ZsYWdzIF49IEJSSzsgICAgIC8qIHJlc2V0IHRoZSBicmVhayBmbGFnICovCisJICAgIGtiZF9mbGFncyBePSBFMTsgICAgICAvKiBiaXR3aXNlIEVYT1Igd2l0aCBFMSBmbGFnICovCisJfQorCXJldHVybjsKICAgICB9CiAKICAgICBzY2FuX2NvZGUgJj0gMHg3ZjsKIAogICAgIGlmIChrYmRfZmxhZ3MgJiBFWFQpCiAgICAgewotICAgICAgICBpbnQgaTsKKwlpbnQgaTsKIAotICAgICAgICBrYmRfZmxhZ3MgXj0gRVhUOwotICAgICAgICBmb3IgKGk9MDsgZXh0X2tleV9tYXBbaV07IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGV4dF9rZXlfbWFwW2ldID09IHNjYW5fY29kZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzY2FuX2NvZGUgPSAweDgwICsgaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvKiBub3QgZm91bmQgPyAqLwotICAgICAgICBpZiAoIWV4dF9rZXlfbWFwW2ldKQotICAgICAgICAgICAgcmV0dXJuOworCWtiZF9mbGFncyBePSBFWFQ7CisJZm9yIChpPTA7IGV4dF9rZXlfbWFwW2ldOyBpKyspCisJeworCSAgICBpZiAoZXh0X2tleV9tYXBbaV0gPT0gc2Nhbl9jb2RlKQorCSAgICB7CisJCXNjYW5fY29kZSA9IDB4ODAgKyBpOworCQlicmVhazsKKwkgICAgfQorCX0KKwkvKiBub3QgZm91bmQgPyAqLworCWlmICghZXh0X2tleV9tYXBbaV0pCisJICAgIHJldHVybjsKICAgICB9CiAKICAgICBzd2l0Y2ggKGtiZF9mY3RfbWFwIFtzY2FuX2NvZGVdKQogICAgIHsKICAgICBjYXNlIEFTOiAga2JkX25vcm1hbCAoc2Nhbl9jb2RlKTsKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgY2FzZSBTSDogIGtiZF9zaGlmdCAoc2Nhbl9jb2RlKTsKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgY2FzZSBDTjogIGtiZF9jdHJsIChzY2FuX2NvZGUpOwotICAgICAgICBicmVhazsKKwlicmVhazsKICAgICBjYXNlIE5NOiAga2JkX251bSAoc2Nhbl9jb2RlKTsKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgY2FzZSBDUDogIGtiZF9jYXBzIChzY2FuX2NvZGUpOwotICAgICAgICBicmVhazsKKwlicmVhazsKICAgICBjYXNlIFNUOiAga2JkX3Njcm9sbCAoc2Nhbl9jb2RlKTsKLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAgICAgY2FzZSBBSzogIGtiZF9hbHQgKHNjYW5fY29kZSk7Ci0gICAgICAgIGJyZWFrOworCWJyZWFrOwogICAgIH0KICAgICByZXR1cm47CiB9CkBAIC00OTAsMTQgKzQ5MCwxNCBAQAogICAgIHsKICAgICAgICBjaHIgPSBrYmRfa2V5X21hcCBba2JkX21hcHBpbmddW2tiZF9zdGF0ZV1bc2Nhbl9jb2RlXTsKICAgICAgICBpZiAoKGNociA9PSAweGZmKSB8fCAoY2hyID09IDB4MDApKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwl7CisJICAgIHJldHVybjsKKwl9CiAKLSAgICAgICAgLyogaWYgY2FwcyBsb2NrIGNvbnZlcnQgdXBwZXIgdG8gbG93ZXIgKi8KLSAgICAgICAgaWYgKCgoa2JkX2ZsYWdzICYgQ0FQUykgPT0gQ0FQUykgJiYgKGNociA+PSAnYScgJiYgY2hyIDw9ICd6JykpCisJLyogaWYgY2FwcyBsb2NrIGNvbnZlcnQgdXBwZXIgdG8gbG93ZXIgKi8KKwlpZiAoKChrYmRfZmxhZ3MgJiBDQVBTKSA9PSBDQVBTKSAmJiAoY2hyID49ICdhJyAmJiBjaHIgPD0gJ3onKSkKICAgICAgICB7Ci0gICAgICAgICAgIGNociAtPSAnYScgLSAnQSc7CisJICAgY2hyIC09ICdhJyAtICdBJzsKICAgICAgICB9CiAgICAgICAga2JkX2lucHV0ID0gY2hyOwogICAgIH0KQEAgLTUxMCw4ICs1MTAsOCBAQAogewogICAgIGlmICgoa2JkX2ZsYWdzICYgQlJLKSA9PSBCUkspCiAgICAgewotICAgICAgICBrYmRfc3RhdGUgPSBBUzsKLSAgICAgICAga2JkX2ZsYWdzICY9ICh+U0hJRlQpOworCWtiZF9zdGF0ZSA9IEFTOworCWtiZF9mbGFncyAmPSAoflNISUZUKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTU2OSwxMiArNTY5LDEyIEBACiB7CiAgICAgaWYgKChrYmRfZmxhZ3MgJiBCUkspID09IE5PUk1BTCkKICAgICB7Ci0gICAgICAgIGtiZF9mbGFncyBePSBTVFA7Ci0gICAgICAgIGtiZF9sZWRfc2V0ICgpOyAgICAgICAgICAgIC8qIHVwZGF0ZSBrZXlib2FyZCBMRUQgKi8KLSAgICAgICAgaWYgKGtiZF9mbGFncyAmIFNUUCkKLSAgICAgICAgICAgIGtiZF9pbnB1dCA9IDB4MTM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGtiZF9pbnB1dCA9IDB4MTE7CisJa2JkX2ZsYWdzIF49IFNUUDsKKwlrYmRfbGVkX3NldCAoKTsgICAgICAgICAgICAvKiB1cGRhdGUga2V5Ym9hcmQgTEVEICovCisJaWYgKGtiZF9mbGFncyAmIFNUUCkKKwkgICAga2JkX2lucHV0ID0gMHgxMzsKKwllbHNlCisJICAgIGtiZF9pbnB1dCA9IDB4MTE7CiAgICAgfQogfQogCkBAIC01ODQsMTMgKzU4NCwxMyBAQAogewogICAgIGlmICgoa2JkX2ZsYWdzICYgQlJLKSA9PSBCUkspCiAgICAgewotICAgICAgICBrYmRfc3RhdGUgPSBBUzsKLSAgICAgICAga2JkX2ZsYWdzICY9ICh+QUxUKTsKKwlrYmRfc3RhdGUgPSBBUzsKKwlrYmRfZmxhZ3MgJj0gKH5BTFQpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBrYmRfc3RhdGUgPSBBSzsKLSAgICAgICAga2JkX2ZsYWdzICY9IEFMVDsKKwlrYmRfc3RhdGUgPSBBSzsKKwlrYmRfZmxhZ3MgJj0gQUxUOwogICAgIH0KIH0KIApAQCAtNjE0LDcgKzYxNCw3IEBACiAKICAgICAvKiB3YWl0IGZvciBpbnB1dCBidWYgZW1wdHkgKi8KICAgICB3aGlsZSAoKGluOCAoSTgwNDJfU1RBVFVTX1JFRykgJiAweDAyKSAmJiBrYmRUaW1lb3V0LS0pCi0gICAgICAgIHVkZWxheSgxMDAwKTsKKwl1ZGVsYXkoMTAwMCk7CiAKICAgICByZXR1cm4ga2JkVGltZW91dDsKIH0KQEAgLTYyNCwzMCArNjI0LDMwIEBACiBzdGF0aWMgaW50IGtiZF9yZXNldCAodm9pZCkKIHsKICAgICBpZiAoa2JkX2lucHV0X2VtcHR5KCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKIAogICAgIG91dDggKEk4MDQyX0RBVEFfUkVHLCAweGZmKTsKIAogICAgIHVkZWxheSgyNTAwMDApOwogCiAgICAgaWYgKGtiZF9pbnB1dF9lbXB0eSgpID09IDApCi0gICAgICAgIHJldHVybiAtMTsKKwlyZXR1cm4gLTE7CiAKICAgICBvdXQ4IChJODA0Ml9EQVRBX1JFRywgMHg2MCk7CiAKICAgICBpZiAoa2JkX2lucHV0X2VtcHR5KCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKIAogICAgIG91dDggKEk4MDQyX0RBVEFfUkVHLCAweDQ1KTsKIAogCiAgICAgaWYgKGtiZF9pbnB1dF9lbXB0eSgpID09IDApCi0gICAgICAgIHJldHVybiAtMTsKKwlyZXR1cm4gLTE7CiAKICAgICBvdXQ4IChJODA0Ml9DT01NQU5EX1JFRywgMHhhZSk7CiAKICAgICBpZiAoa2JkX2lucHV0X2VtcHR5KCkgPT0gMCkKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKIAogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pODIzNjUuYyBiL2RyaXZlcnMvaTgyMzY1LmMKaW5kZXggODE3MzZiOS4uNWY0NGVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pODIzNjUuYworKysgYi9kcml2ZXJzL2k4MjM2NS5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8Y29tbWFuZC5oPgogI2luY2x1ZGUgPHBjaS5oPgogI2luY2x1ZGUgPHBjbWNpYS5oPgotI2luY2x1ZGUgPGNtZF9wY21jaWEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgpAQCAtMTUzLDcgKzE1Miw3IEBACiAgICAgQ29kZSB0byBzYXZlIGFuZCByZXN0b3JlIGdsb2JhbCBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgVEkgMTEzMCBhbmQKICAgICBUSSAxMTMxIGNvbnRyb2xsZXJzLCBhbmQgdG8gc2V0IGFuZCByZXBvcnQgZ2xvYmFsIGNvbmZpZ3VyYXRpb24KICAgICBvcHRpb25zLgotICAgIAorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgdGkxMTN4X2dldF9zdGF0ZSAoc29ja2V0X2luZm9fdCAqIHMpCkBAIC0xOTUsNyArMTk0LDcgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgUm91dGluZXMgdG8gaGFuZGxlIGNvbW1vbiBDYXJkQnVzIG9wdGlvbnMKLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIC8qIERlZmF1bHQgc2V0dGluZ3MgZm9yIFBDSSBjb21tYW5kIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KQEAgLTIzOSw3ICsyMzgsNyBAQAogCiAgICAgUG93ZXIgY29udHJvbCBmb3IgQ2FyZGJ1cyBjb250cm9sbGVyczogdXNlZCBib3RoIGZvciAxNi1iaXQgYW5kCiAgICAgQ2FyZGJ1cyBjYXJkcy4KLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgY2Jfc2V0X3Bvd2VyIChzb2NrZXRfaW5mb190ICogcywgc29ja2V0X3N0YXRlX3QgKiBzdGF0ZSkKQEAgLTI4Niw3ICsyODUsNyBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBHZW5lcmljIHJvdXRpbmVzIHRvIGdldCBhbmQgc2V0IGNvbnRyb2xsZXIgb3B0aW9ucwotICAgIAorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgZ2V0X2JyaWRnZV9zdGF0ZSAoc29ja2V0X2luZm9fdCAqIHMpCkBAIC01NjAsNyArNTU5LDcgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAgRGVidWcgc3R1ZmYKLSAgICAKKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKICNpZmRlZiBERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmNhLWlwX3N3LmMgYi9kcml2ZXJzL2luY2EtaXBfc3cuYwppbmRleCAzYTIzZjRkLi4wN2U4NmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luY2EtaXBfc3cuYworKysgYi9kcml2ZXJzL2luY2EtaXBfc3cuYwpAQCAtNDUsMTQgKzQ1LDE0IEBACiAjZGVmaW5lIERNQV9XUklURV9SRUcocmVnLCB2YWx1ZSkgKigodm9sYXRpbGUgdTMyICopcmVnKSA9ICh1MzIpdmFsdWU7CiAjZGVmaW5lIERNQV9SRUFEX1JFRyhyZWcsIHZhbHVlKSAgICB2YWx1ZSA9ICh1MzIpKigodm9sYXRpbGUgdTMyKilyZWcpCiAjZGVmaW5lIFNXX1dSSVRFX1JFRyhyZWcsIHZhbHVlKSAgIFwKLSAgICAgICAgICooKHZvbGF0aWxlIHUzMiopcmVnKSA9ICh1MzIpdmFsdWU7XAotICAgICAgICAgREVMQVk7XAotICAgICAgICAgKigodm9sYXRpbGUgdTMyKilyZWcpID0gKHUzMil2YWx1ZTsKKwkgKigodm9sYXRpbGUgdTMyKilyZWcpID0gKHUzMil2YWx1ZTtcCisJIERFTEFZO1wKKwkgKigodm9sYXRpbGUgdTMyKilyZWcpID0gKHUzMil2YWx1ZTsKIAogI2RlZmluZSBTV19SRUFEX1JFRyhyZWcsIHZhbHVlKSAgICBcCi0gICAgICAgICB2YWx1ZSA9ICh1MzIpKigodm9sYXRpbGUgdTMyKilyZWcpO1wKLSAgICAgICAgIERFTEFZO1wKLSAgICAgICAgIHZhbHVlID0gKHUzMikqKCh2b2xhdGlsZSB1MzIqKXJlZyk7CisJIHZhbHVlID0gKHUzMikqKCh2b2xhdGlsZSB1MzIqKXJlZyk7XAorCSBERUxBWTtcCisJIHZhbHVlID0gKHUzMikqKCh2b2xhdGlsZSB1MzIqKXJlZyk7CiAKICNkZWZpbmUgSU5DQV9ETUFfVFhfUE9MTElOR19USU1FICAgICAgIDB4MDcKICNkZWZpbmUgSU5DQV9ETUFfUlhfUE9MTElOR19USU1FICAgICAgIDB4MDcKQEAgLTE1MSw3ICsxNTEsNiBAQAogc3RhdGljIHZvaWQgaW5jYV9kbWFfaW5pdCh2b2lkKTsKIAogCi0KIGludCBpbmNhX3N3aXRjaF9pbml0aWFsaXplKGJkX3QgKiBiaXMpCiB7CiAJc3RydWN0IGV0aF9kZXZpY2UgKmRldjsKQEAgLTI5Myw3ICsyOTIsNyBAQAogCQkvKiBXcml0aW5nIHRvIHRoZSBDT01NQU5EIFJFRy4KIAkJICovCiAJRE1BX1dSSVRFX1JFRyhJTkNBX0lQX0RNQV9ETUFfUlhDQ1IwLAotCSAgICAgICAgICAgICAgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMF9JTklUKTsKKwkJICAgICAgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMF9JTklUKTsKIAogCQkvKiBJbml0aWFsaXplIFR4RE1BLgogCQkgKi8KQEAgLTMxNiw5ICszMTUsOSBAQAogI2VuZGlmCiAJICAgLyogZW5hYmxlIHNwYW5uaW5nIHRyZWUgZm9yd2FyZGluZywgZW5hYmxlIHRoZSBDUFUgcG9ydCAqLwogCSAgIC8qIFNUX1BUOgotCSAgICAgICAgIENQUyAoQ1BVIHBvcnQgc3RhdHVzKSAgIDB4MyAoZm9yd2FyZGluZykKLQkgICAgICAgICBMUFMgKExBTiBwb3J0IHN0YXR1cykgICAweDMgKGZvcndhcmRpbmcpCi0JICAgICAgICAgUFBTIChQQyBwb3J0IHN0YXR1cykgICAgMHgzIChmb3J3YXJkaW5nKQorCQkgQ1BTIChDUFUgcG9ydCBzdGF0dXMpICAgMHgzIChmb3J3YXJkaW5nKQorCQkgTFBTIChMQU4gcG9ydCBzdGF0dXMpICAgMHgzIChmb3J3YXJkaW5nKQorCQkgUFBTIChQQyBwb3J0IHN0YXR1cykgICAgMHgzIChmb3J3YXJkaW5nKQogCSAgICovCiAJU1dfV1JJVEVfUkVHKElOQ0FfSVBfU3dpdGNoX1NUX1BULDB4M2YpOwogCkBAIC0zNDgsNyArMzQ3LDcgQEAKIAkJcHJpbnRmICgiJXM6IGJhZCBwYWNrZXQgc2l6ZTogJWRcbiIsIGRldi0+bmFtZSwgbGVuZ3RoKTsKIAkJZ290byBEb25lOwogCX0KLQkKKwogCWZvcihpID0gMDsgdHhfZGVzYy0+QyA9PSAwOyBpKyspCiAJewogCQlpZiAoaSA+PSBUT1VUX0xPT1ApCkBAIC0zNjUsNyArMzY0LDcgQEAKIAl0eF9vbGRfaG9sZCA9IHR4X2hvbGQ7CiAKIAl0eF9kZXNjLT5wYXJhbXMud29yZCA9Ci0JICAgICAgICAgICAgICAgIChJTkNBX0RNQV9UWF9TT1AgfCBJTkNBX0RNQV9UWF9FT1AgfCBJTkNBX0RNQV9UWF9IT0xEKTsKKwkJCShJTkNBX0RNQV9UWF9TT1AgfCBJTkNBX0RNQV9UWF9FT1AgfCBJTkNBX0RNQV9UWF9IT0xEKTsKIAogCXR4X2Rlc2MtPkMgPSAwOwogCXR4X2Rlc2MtPlR4RGF0YVB0ciA9ICh1MzIpcGFja2V0OwpAQCAtMzg2LDcgKzM4NSw3IEBACiAJewogCQljb21tYW5kID0gSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMF9IUjsKIAl9Ci0JCisKIAlETUFfUkVBRF9SRUcoSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMCwgcmVnVmFsdWUpOwogCXJlZ1ZhbHVlIHw9IGNvbW1hbmQ7CiAjaWYgMApAQCAtNDQzLDcgKzQ0Miw3IEBACiAKIAkJbGVuZ3RoID0gcnhfZGVzYy0+c3RhdHVzLmZpZWxkLk5CVDsKIAkJcnhfZGVzYy0+c3RhdHVzLndvcmQgJj0KLQkJICAgICAgICAgfihJTkNBX0RNQV9SWF9FT1AgfCBJTkNBX0RNQV9SWF9TT1AgfCBJTkNBX0RNQV9SWF9DKTsKKwkJCSB+KElOQ0FfRE1BX1JYX0VPUCB8IElOQ0FfRE1BX1JYX1NPUCB8IElOQ0FfRE1BX1JYX0MpOwogI2lmIDAKIHsKICAgaW50IGk7CkBAIC00NjEsNyArNDYwLDcgQEAKIAkJCXByaW50ZigiUmVjZWl2ZWQgJWQgYnl0ZXNcbiIsIGxlbmd0aCk7CiAjZW5kaWYKIAkJCU5ldFJlY2VpdmUoKHZvaWQqKUtTRUcxQUREUihOZXRSeFBhY2tldHNbcnhfbmV3XSksCi0JCQkgICAgICAgICAgICBsZW5ndGggLSA0KTsKKwkJCQkgICAgbGVuZ3RoIC0gNCk7CiAJCX0KIAkJZWxzZQogCQl7CkBAIC01MjcsNjIgKzUyNiw2MiBAQAogCVNXX1dSSVRFX1JFRyhJTkNBX0lQX1N3aXRjaF9MQU5fVFhfQ1RMLCAweDAwMDAwMDAxKTsKIAogI2lmIDEKLQkgICAvKiBpbml0IE1ESU8gY29uZmlndXJhdGlvbjogCi0JICAgICAgICAgTURTIChQb2xsIHNwZWVkKTogICAgICAgMHgwMSAoNG1zKQotCSAgICAgICAgIFBIWV9MQU5fQUREUjogICAgICAgICAgIDB4MDYKLQkgICAgICAgICBQSFlfUENfQUREUjogICAgICAgICAgICAweDA1Ci0JICAgICAgICAgVUVQIChVc2UgRXh0ZXJuYWwgUEhZKTogMHgwMCAoSW50ZXJuYWwgUEhZIGlzIHVzZWQpCi0JICAgICAgICAgUFMgKFBvcnQgU2VsZWN0KTogICAgICAgMHgwMCAoUFQvVU1NIGZvciBMQU4pCi0JICAgICAgICAgUFQgKFBIWSBUZXN0KTogICAgICAgICAgMHgwMCAobm8gdGVzdCBtb2RlKQotCSAgICAgICAgIFVNTSAoVXNlIE1ESU8gTW9kZSk6ICAgIDB4MDAgKHN0YXRlIG1hY2hpbmUgaXMgZGlzYWJsZWQpCisJICAgLyogaW5pdCBNRElPIGNvbmZpZ3VyYXRpb246CisJCSBNRFMgKFBvbGwgc3BlZWQpOiAgICAgICAweDAxICg0bXMpCisJCSBQSFlfTEFOX0FERFI6ICAgICAgICAgICAweDA2CisJCSBQSFlfUENfQUREUjogICAgICAgICAgICAweDA1CisJCSBVRVAgKFVzZSBFeHRlcm5hbCBQSFkpOiAweDAwIChJbnRlcm5hbCBQSFkgaXMgdXNlZCkKKwkJIFBTIChQb3J0IFNlbGVjdCk6ICAgICAgIDB4MDAgKFBUL1VNTSBmb3IgTEFOKQorCQkgUFQgKFBIWSBUZXN0KTogICAgICAgICAgMHgwMCAobm8gdGVzdCBtb2RlKQorCQkgVU1NIChVc2UgTURJTyBNb2RlKTogICAgMHgwMCAoc3RhdGUgbWFjaGluZSBpcyBkaXNhYmxlZCkKIAkgICAqLwogCVNXX1dSSVRFX1JFRyhJTkNBX0lQX1N3aXRjaF9NRElPX0NGRywgMHg0YzUwKTsKIAotCSAgIC8qIGluaXQgUEhZOiAKLQkgICAgICAgICBTTCAoQXV0byBOZWcuIFNwZWVkIGZvciBMQU4pCi0JICAgICAgICAgU1AgKEF1dG8gTmVnLiBTcGVlZCBmb3IgUEMpCi0JICAgICAgICAgTEwgKExpbmsgU3RhdHVzIGZvciBMQU4pCi0JICAgICAgICAgTFAgKExpbmsgU3RhdHVzIGZvciBQQykKLQkgICAgICAgICBETCAoRHVwbGV4IFN0YXR1cyBmb3IgTEFOKQotCSAgICAgICAgIERQIChEdXBsZXggU3RhdHVzIGZvciBQQykKLQkgICAgICAgICBQTCAoQXV0byBOZWcuIFBhdXNlIFN0YXR1cyBmb3IgTEFOKQotCSAgICAgICAgIFBQIChBdXRvIE5lZy4gUGF1c2UgU3RhdHVzIGZvciBQQykKKwkgICAvKiBpbml0IFBIWToKKwkJIFNMIChBdXRvIE5lZy4gU3BlZWQgZm9yIExBTikKKwkJIFNQIChBdXRvIE5lZy4gU3BlZWQgZm9yIFBDKQorCQkgTEwgKExpbmsgU3RhdHVzIGZvciBMQU4pCisJCSBMUCAoTGluayBTdGF0dXMgZm9yIFBDKQorCQkgREwgKER1cGxleCBTdGF0dXMgZm9yIExBTikKKwkJIERQIChEdXBsZXggU3RhdHVzIGZvciBQQykKKwkJIFBMIChBdXRvIE5lZy4gUGF1c2UgU3RhdHVzIGZvciBMQU4pCisJCSBQUCAoQXV0byBOZWcuIFBhdXNlIFN0YXR1cyBmb3IgUEMpCiAJICAgKi8KIAlTV19XUklURV9SRUcgKElOQ0FfSVBfU3dpdGNoX0VQSFksIDB4ZmYpOwogCiAJICAgLyogTURJT19BQ0M6Ci0JICAgICAgICAgUkEgKFJlcXVlc3QvQWNrKSAgMHgwMSAoUmVxdWVzdCkKLQkgICAgICAgICBSVyAoUmVhZC9Xcml0ZSkgICAweDAxIChXcml0ZSkKLQkgICAgICAgICBQSFlfQUREUiAgICAgICAgICAweDA1IChQQykKLQkgICAgICAgICBSRUdfQUREUiAgICAgICAgICAweDAwIChQSFlfQkNSOiBiYXNpYyBjb250cm9sIHJlZ2lzdGVyKQotCSAgICAgICAgIFBIWV9EQVRBICAgICAgICAgIDB4ODAwMAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0ICAgICAgICAgICAgICAgICAgIC0gc29mdHdhcmUgcmVzZXQKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQiAobG9vcCBiYWNrKSAgICAgICAgICAtIG5vcm1hbAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTIChzcGVlZCBzZWxlY3QpICAgICAgIC0gMTAgTWJpdC9zCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5FIChhdXRvIG5lZy4gZW5hYmxlKSAgLSBkaXNhYmxlCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEQgKHBvd2VyIGRvd24pICAgICAgICAgLSBub3JtYWwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU08gKGlzb2xhdGUpICAgICAgICAgICAtIG5vcm1hbAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTiAocmVzdGFydCBhdXRvIG5lZy4pIC0gbm9ybWFsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE0gKGR1cGxleCBtb2RlKSAgICAgICAgLSBoYWxmIGR1cGxleAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENUIChjb2xsaXNpb24gdGVzdCkgICAgIC0gZW5hYmxlCisJCSBSQSAoUmVxdWVzdC9BY2spICAweDAxIChSZXF1ZXN0KQorCQkgUlcgKFJlYWQvV3JpdGUpICAgMHgwMSAoV3JpdGUpCisJCSBQSFlfQUREUiAgICAgICAgICAweDA1IChQQykKKwkJIFJFR19BRERSICAgICAgICAgIDB4MDAgKFBIWV9CQ1I6IGJhc2ljIGNvbnRyb2wgcmVnaXN0ZXIpCisJCSBQSFlfREFUQSAgICAgICAgICAweDgwMDAKKwkJCQkgICAgICBSZXNldCAgICAgICAgICAgICAgICAgICAtIHNvZnR3YXJlIHJlc2V0CisJCQkJICAgICAgTEIgKGxvb3AgYmFjaykgICAgICAgICAgLSBub3JtYWwKKwkJCQkgICAgICBTUyAoc3BlZWQgc2VsZWN0KSAgICAgICAtIDEwIE1iaXQvcworCQkJCSAgICAgIEFORSAoYXV0byBuZWcuIGVuYWJsZSkgIC0gZGlzYWJsZQorCQkJCSAgICAgIFBEIChwb3dlciBkb3duKSAgICAgICAgIC0gbm9ybWFsCisJCQkJICAgICAgSVNPIChpc29sYXRlKSAgICAgICAgICAgLSBub3JtYWwKKwkJCQkgICAgICBSQU4gKHJlc3RhcnQgYXV0byBuZWcuKSAtIG5vcm1hbAorCQkJCSAgICAgIERNIChkdXBsZXggbW9kZSkgICAgICAgIC0gaGFsZiBkdXBsZXgKKwkJCQkgICAgICBDVCAoY29sbGlzaW9uIHRlc3QpICAgICAtIGVuYWJsZQogCSAgICovCiAJU1dfV1JJVEVfUkVHKElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDLCAweGMwYTA4MDAwKTsKIAogCSAgIC8qIE1ESU9fQUNDOgotCSAgICAgICAgIFJBIChSZXF1ZXN0L0FjaykgIDB4MDEgKFJlcXVlc3QpCi0JICAgICAgICAgUlcgKFJlYWQvV3JpdGUpICAgMHgwMSAoV3JpdGUpCi0JICAgICAgICAgUEhZX0FERFIgICAgICAgICAgMHgwNiAoTEFOKQotCSAgICAgICAgIFJFR19BRERSICAgICAgICAgIDB4MDAgKFBIWV9CQ1I6IGJhc2ljIGNvbnRyb2wgcmVnaXN0ZXIpCi0JICAgICAgICAgUEhZX0RBVEEgICAgICAgICAgMHg4MDAwCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXQgICAgICAgICAgICAgICAgICAgLSBzb2Z0d2FyZSByZXNldAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCIChsb29wIGJhY2spICAgICAgICAgIC0gbm9ybWFsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1MgKHNwZWVkIHNlbGVjdCkgICAgICAgLSAxMCBNYml0L3MKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkUgKGF1dG8gbmVnLiBlbmFibGUpICAtIGRpc2FibGUKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRCAocG93ZXIgZG93bikgICAgICAgICAtIG5vcm1hbAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTTyAoaXNvbGF0ZSkgICAgICAgICAgIC0gbm9ybWFsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOIChyZXN0YXJ0IGF1dG8gbmVnLikgLSBub3JtYWwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETSAoZHVwbGV4IG1vZGUpICAgICAgICAtIGhhbGYgZHVwbGV4Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1QgKGNvbGxpc2lvbiB0ZXN0KSAgICAgLSBlbmFibGUKKwkJIFJBIChSZXF1ZXN0L0FjaykgIDB4MDEgKFJlcXVlc3QpCisJCSBSVyAoUmVhZC9Xcml0ZSkgICAweDAxIChXcml0ZSkKKwkJIFBIWV9BRERSICAgICAgICAgIDB4MDYgKExBTikKKwkJIFJFR19BRERSICAgICAgICAgIDB4MDAgKFBIWV9CQ1I6IGJhc2ljIGNvbnRyb2wgcmVnaXN0ZXIpCisJCSBQSFlfREFUQSAgICAgICAgICAweDgwMDAKKwkJCQkgICAgICBSZXNldCAgICAgICAgICAgICAgICAgICAtIHNvZnR3YXJlIHJlc2V0CisJCQkJICAgICAgTEIgKGxvb3AgYmFjaykgICAgICAgICAgLSBub3JtYWwKKwkJCQkgICAgICBTUyAoc3BlZWQgc2VsZWN0KSAgICAgICAtIDEwIE1iaXQvcworCQkJCSAgICAgIEFORSAoYXV0byBuZWcuIGVuYWJsZSkgIC0gZGlzYWJsZQorCQkJCSAgICAgIFBEIChwb3dlciBkb3duKSAgICAgICAgIC0gbm9ybWFsCisJCQkJICAgICAgSVNPIChpc29sYXRlKSAgICAgICAgICAgLSBub3JtYWwKKwkJCQkgICAgICBSQU4gKHJlc3RhcnQgYXV0byBuZWcuKSAtIG5vcm1hbAorCQkJCSAgICAgIERNIChkdXBsZXggbW9kZSkgICAgICAgIC0gaGFsZiBkdXBsZXgKKwkJCQkgICAgICBDVCAoY29sbGlzaW9uIHRlc3QpICAgICAtIGVuYWJsZQogCSAgICovCiAJU1dfV1JJVEVfUkVHKElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDLCAweGMwYzA4MDAwKTsKICNlbmRpZgpAQCAtNjQwLDcgKzYzOSwzIEBACiB9CiAKICNlbmRpZgotCi0JLyogRW5kIG9mIGZpbGUuCi0JICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGFuOTFjOTYuYyBiL2RyaXZlcnMvbGFuOTFjOTYuYwppbmRleCA3NmIwYzUzLi4xODljYTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xhbjkxYzk2LmMKKysrIGIvZHJpdmVycy9sYW45MWM5Ni5jCkBAIC0xNzksNyArMTc5LDYgQEAKIHN0YXRpYyBpbnQgc21jX3JjdiAodm9pZCk7CiAKIAotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEludGVybmFsIHJvdXRpbmVzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI1Miw3ICsyNTEsNiBAQAogLyogI2RlZmluZSB0eF9kb25lKGRldikgMSAqLwogCiAKLQogLyogdGhpcyBkb2VzIGEgc29mdCByZXNldCBvbiB0aGUgZGV2aWNlICovCiBzdGF0aWMgdm9pZCBzbWNfcmVzZXQgKHZvaWQpOwogCkBAIC02NjgsNyArNjY2LDYgQEAKIAkJcGFja2V0X2xlbmd0aCAtPSA0OwkJLyo0OyAqLwogCiAKLQogCQkvKiBzZXQgb2RkIGxlbmd0aCBmb3IgYnVnIGluIExBTjkxQzExMSwgKi8KIAkJLyogd2hpY2ggbmV2ZXIgc2V0cyBSU19PRERGUkFNRSAqLwogCQkvKiBUT0RPID8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGFuOTFjOTYuaCBiL2RyaXZlcnMvbGFuOTFjOTYuaAppbmRleCAzYWM1OGJjLi40ZWI3ZDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xhbjkxYzk2LmgKKysrIGIvZHJpdmVycy9sYW45MWM5Ni5oCkBAIC0xMTUsOCArMTE1LDggQEAKIAogI2RlZmluZSBTTUNfaW5zbChyLGIsbCkgCSh7CWludCBfX2kgOyAgXAogCQkJCQlkd29yZCAqX19iMjsgIFwKLQkJCSAgICAJCV9fYjIgPSAoZHdvcmQgKikgYjsgIFwKLQkJCSAgICAJCWZvciAoX19pID0gMDsgX19pIDwgbDsgX19pKyspIHsgIFwKKwkJCQkJX19iMiA9IChkd29yZCAqKSBiOyAgXAorCQkJCQlmb3IgKF9faSA9IDA7IF9faSA8IGw7IF9faSsrKSB7ICBcCiAJCQkJCSAgKihfX2IyICsgX19pKSA9IFNNQ19pbmwocik7ICBcCiAJCQkJCSAgU01DX2lubCgwKTsgIFwKIAkJCQkJfTsgIFwKQEAgLTEyNCw4ICsxMjQsOCBAQAogCiAjZGVmaW5lIFNNQ19pbnN3KHIsYixsKSAJKHsJaW50IF9faSA7ICBcCiAJCQkJCXdvcmQgKl9fYjI7ICBcCi0JCQkgICAgCQlfX2IyID0gKHdvcmQgKikgYjsgIFwKLQkJCSAgICAJCWZvciAoX19pID0gMDsgX19pIDwgbDsgX19pKyspIHsgIFwKKwkJCQkJX19iMiA9ICh3b3JkICopIGI7ICBcCisJCQkJCWZvciAoX19pID0gMDsgX19pIDwgbDsgX19pKyspIHsgIFwKIAkJCQkJICAqKF9fYjIgKyBfX2kpID0gU01DX2ludyhyKTsgIFwKIAkJCQkJICBTTUNfaW53KDApOyAgXAogCQkJCQl9OyAgXApAQCAtMTMzLDggKzEzMyw4IEBACiAKICNkZWZpbmUgU01DX2luc2IocixiLGwpIAkoewlpbnQgX19pIDsgIFwKIAkJCQkJYnl0ZSAqX19iMjsgIFwKLQkJCSAgICAJCV9fYjIgPSAoYnl0ZSAqKSBiOyAgXAotCQkJICAgIAkJZm9yIChfX2kgPSAwOyBfX2kgPCBsOyBfX2krKykgeyAgXAorCQkJCQlfX2IyID0gKGJ5dGUgKikgYjsgIFwKKwkJCQkJZm9yIChfX2kgPSAwOyBfX2kgPCBsOyBfX2krKykgeyAgXAogCQkJCQkgICooX19iMiArIF9faSkgPSBTTUNfaW5iKHIpOyAgXAogCQkJCQkgIFNNQ19pbmIoMCk7ICBcCiAJCQkJCX07ICBcCkBAIC0xNzMsOCArMTczLDggQEAKICNlbHNlCiAjZGVmaW5lIFNNQ19pbnN3KHIsYixsKSAJKHsJaW50IF9faSA7ICBcCiAJCQkJCXdvcmQgKl9fYjI7ICBcCi0JCQkgICAgCQlfX2IyID0gKHdvcmQgKikgYjsgIFwKLQkJCSAgICAJCWZvciAoX19pID0gMDsgX19pIDwgbDsgX19pKyspIHsgIFwKKwkJCQkJX19iMiA9ICh3b3JkICopIGI7ICBcCisJCQkJCWZvciAoX19pID0gMDsgX19pIDwgbDsgX19pKyspIHsgIFwKIAkJCQkJICAqKF9fYjIgKyBfX2kpID0gU01DX2ludyhyKTsgIFwKIAkJCQkJICBTTUNfaW53KDApOyAgXAogCQkJCQl9OyAgXApAQCAtMTg4LDcgKzE4OCw3IEBACiAgKglCYW5rIFNlbGVjdCBGaWVsZAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwotI2RlZmluZSBMQU45MUM5Nl9CQU5LX1NFTEVDVCAgMTQgICAgICAgLy8gQmFuayBTZWxlY3QgUmVnaXN0ZXIKKyNkZWZpbmUgTEFOOTFDOTZfQkFOS19TRUxFQ1QgIDE0ICAgICAgIC8qIEJhbmsgU2VsZWN0IFJlZ2lzdGVyICovCiAjZGVmaW5lIExBTjkxQzk2X0JBTktTRUxFQ1QgKDB4M1VDIDw8IDApCiAjZGVmaW5lIEJBTkswICAgICAgICAgICAgICAgMHgwMAogI2RlZmluZSBCQU5LMSAgICAgICAgICAgICAgIDB4MDEKQEAgLTIxMCwxMiArMjEwLDEyIEBACiAgKglCYW5rIDAgUmVnaXN0ZXIgTWFwIGluIEkvTyBTcGFjZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwotI2RlZmluZSBMQU45MUM5Nl9UQ1IgICAgICAgICAgMCAgICAgICAgLy8gVHJhbnNtaXQgQ29udHJvbCBSZWdpc3RlcgotI2RlZmluZSBMQU45MUM5Nl9FUEhfU1RBVFVTICAgMiAgICAgICAgLy8gRVBIIFN0YXR1cyBSZWdpc3RlcgotI2RlZmluZSBMQU45MUM5Nl9SQ1IgICAgICAgICAgNCAgICAgICAgLy8gUmVjZWl2ZSBDb250cm9sIFJlZ2lzdGVyCi0jZGVmaW5lIExBTjkxQzk2X0NPVU5URVIgICAgICA2ICAgICAgICAvLyBDb3VudGVyIFJlZ2lzdGVyCi0jZGVmaW5lIExBTjkxQzk2X01JUiAgICAgICAgICA4ICAgICAgICAvLyBNZW1vcnkgSW5mb3JtYXRpb24gUmVnaXN0ZXIKLSNkZWZpbmUgTEFOOTFDOTZfTUNSICAgICAgICAgIDEwICAgICAgIC8vIE1lbW9yeSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisjZGVmaW5lIExBTjkxQzk2X1RDUiAgICAgICAgICAwICAgICAgICAvKiBUcmFuc21pdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIExBTjkxQzk2X0VQSF9TVEFUVVMgICAyICAgICAgICAvKiBFUEggU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIExBTjkxQzk2X1JDUiAgICAgICAgICA0ICAgICAgICAvKiBSZWNlaXZlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFOOTFDOTZfQ09VTlRFUiAgICAgIDYgICAgICAgIC8qIENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFOOTFDOTZfTUlSICAgICAgICAgIDggICAgICAgIC8qIE1lbW9yeSBJbmZvcm1hdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBMQU45MUM5Nl9NQ1IgICAgICAgICAgMTAgICAgICAgLyogTWVtb3J5IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KIAogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNTgsMTUgKzI1OCwxNSBAQAogI2RlZmluZSBMQU45MUM5Nl9FUEhTUl9UWF9VTlJOICAgICgweDFVIDw8IDE1KQogCiAjZGVmaW5lIExBTjkxQzk2X0VQSFNSX0VSUk9SUyAgICAgKExBTjkxQzk2X0VQSFNSX1NOR0xfQ09MICB8ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEFOOTFDOTZfRVBIU1JfTVVMX0NPTCAgIHwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQU45MUM5Nl9FUEhTUl8xNkNPTCAgICAgfCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExBTjkxQzk2X0VQSFNSX1NRRVQgICAgICB8ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEFOOTFDOTZfRVBIU1JfVFhfREVGUiAgIHwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQU45MUM5Nl9FUEhTUl9MQVRDT0wgICAgfCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExBTjkxQzk2X0VQSFNSX0xPU1RfQ0FSUiB8ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEFOOTFDOTZfRVBIU1JfRVhDX0RFRiAgIHwgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQU45MUM5Nl9FUEhTUl9MSU5LX09LICAgfCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExBTjkxQzk2X0VQSFNSX1RYX1VOUk4pCisJCQkJICAgTEFOOTFDOTZfRVBIU1JfTVVMX0NPTCAgIHwgICAgXAorCQkJCSAgIExBTjkxQzk2X0VQSFNSXzE2Q09MICAgICB8ICAgIFwKKwkJCQkgICBMQU45MUM5Nl9FUEhTUl9TUUVUICAgICAgfCAgICBcCisJCQkJICAgTEFOOTFDOTZfRVBIU1JfVFhfREVGUiAgIHwgICAgXAorCQkJCSAgIExBTjkxQzk2X0VQSFNSX0xBVENPTCAgICB8ICAgIFwKKwkJCQkgICBMQU45MUM5Nl9FUEhTUl9MT1NUX0NBUlIgfCAgICBcCisJCQkJICAgTEFOOTFDOTZfRVBIU1JfRVhDX0RFRiAgIHwgICAgXAorCQkJCSAgIExBTjkxQzk2X0VQSFNSX0xJTktfT0sgICB8ICAgIFwKKwkJCQkgICBMQU45MUM5Nl9FUEhTUl9UWF9VTlJOKQogCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI5Niw3ICsyOTYsNyBAQAogICoJTWVtb3J5IEluZm9ybWF0aW9uIFJlZ2lzdGVyIC0gQmFuayAwIC0gT0Zmc2V0IDgKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KLSNkZWZpbmUgTEFOOTFDOTZfTUlSX1NJWkUgICAgICAgICgweDE4IDw8IDApICAgIC8vIDYxNDQgYnl0ZXMKKyNkZWZpbmUgTEFOOTFDOTZfTUlSX1NJWkUgICAgICAgICgweDE4IDw8IDApICAgIC8qIDYxNDQgYnl0ZXMgKi8KIAogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMTQsMTYgKzMxNCwxNiBAQAogICoJQmFuayAxIFJlZ2lzdGVyIE1hcCBpbiBJL08gU3BhY2UKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KLSNkZWZpbmUgTEFOOTFDOTZfQ09ORklHICAgICAgIDAgICAgICAgIC8vIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLSNkZWZpbmUgTEFOOTFDOTZfQkFTRSAgICAgICAgIDIgICAgICAgIC8vIEJhc2UgQWRkcmVzcyBSZWdpc3RlcgotI2RlZmluZSBMQU45MUM5Nl9JQTAgICAgICAgICAgNCAgICAgICAgLy8gSW5kaXZpZHVhbCBBZGRyZXNzIFJlZ2lzdGVyIC0gMAotI2RlZmluZSBMQU45MUM5Nl9JQTEgICAgICAgICAgNSAgICAgICAgLy8gSW5kaXZpZHVhbCBBZGRyZXNzIFJlZ2lzdGVyIC0gMQotI2RlZmluZSBMQU45MUM5Nl9JQTIgICAgICAgICAgNiAgICAgICAgLy8gSW5kaXZpZHVhbCBBZGRyZXNzIFJlZ2lzdGVyIC0gMgotI2RlZmluZSBMQU45MUM5Nl9JQTMgICAgICAgICAgNyAgICAgICAgLy8gSW5kaXZpZHVhbCBBZGRyZXNzIFJlZ2lzdGVyIC0gMwotI2RlZmluZSBMQU45MUM5Nl9JQTQgICAgICAgICAgOCAgICAgICAgLy8gSW5kaXZpZHVhbCBBZGRyZXNzIFJlZ2lzdGVyIC0gNAotI2RlZmluZSBMQU45MUM5Nl9JQTUgICAgICAgICAgOSAgICAgICAgLy8gSW5kaXZpZHVhbCBBZGRyZXNzIFJlZ2lzdGVyIC0gNQotI2RlZmluZSBMQU45MUM5Nl9HRU5fUFVSUE9TRSAgMTAgICAgICAgLy8gR2VuZXJhbCBBZGRyZXNzIFJlZ2lzdGVycwotI2RlZmluZSBMQU45MUM5Nl9DT05UUk9MICAgICAgMTIgICAgICAgLy8gQ29udHJvbCBSZWdpc3RlcgorI2RlZmluZSBMQU45MUM5Nl9DT05GSUcgICAgICAgMCAgICAgICAgLyogQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBMQU45MUM5Nl9CQVNFICAgICAgICAgMiAgICAgICAgLyogQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIExBTjkxQzk2X0lBMCAgICAgICAgICA0ICAgICAgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSAwICovCisjZGVmaW5lIExBTjkxQzk2X0lBMSAgICAgICAgICA1ICAgICAgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSAxICovCisjZGVmaW5lIExBTjkxQzk2X0lBMiAgICAgICAgICA2ICAgICAgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSAyICovCisjZGVmaW5lIExBTjkxQzk2X0lBMyAgICAgICAgICA3ICAgICAgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSAzICovCisjZGVmaW5lIExBTjkxQzk2X0lBNCAgICAgICAgICA4ICAgICAgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSA0ICovCisjZGVmaW5lIExBTjkxQzk2X0lBNSAgICAgICAgICA5ICAgICAgICAvKiBJbmRpdmlkdWFsIEFkZHJlc3MgUmVnaXN0ZXIgLSA1ICovCisjZGVmaW5lIExBTjkxQzk2X0dFTl9QVVJQT1NFICAxMCAgICAgICAvKiBHZW5lcmFsIEFkZHJlc3MgUmVnaXN0ZXJzICovCisjZGVmaW5lIExBTjkxQzk2X0NPTlRST0wgICAgICAxMiAgICAgICAvKiBDb250cm9sIFJlZ2lzdGVyICovCiAKIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzcxLDE3ICszNzEsMTcgQEAKICAqCUJhbmsgMiBSZWdpc3RlciBNYXAgaW4gSS9PIFNwYWNlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi0jZGVmaW5lIExBTjkxQzk2X01NVSAgICAgICAgICAgIDAgICAgICAvLyBNTVUgQ29tbWFuZCBSZWdpc3RlcgotI2RlZmluZSBMQU45MUM5Nl9BVVRPX1RYX1NUQVJUICAxICAgICAgLy8gQXV0byBUeCBTdGFydCBSZWdpc3RlcgotI2RlZmluZSBMQU45MUM5Nl9QTlIgICAgICAgICAgICAyICAgICAgLy8gUGFja2V0IE51bWJlciBSZWdpc3RlcgotI2RlZmluZSBMQU45MUM5Nl9BUlIgICAgICAgICAgICAzICAgICAgLy8gQWxsb2NhdGlvbiBSZXN1bHQgUmVnaXN0ZXIKLSNkZWZpbmUgTEFOOTFDOTZfRklGTyAgICAgICAgICAgNCAgICAgIC8vIEZJRk8gUG9ydHMgUmVnaXN0ZXIKLSNkZWZpbmUgTEFOOTFDOTZfUE9JTlRFUiAgICAgICAgNiAgICAgIC8vIFBvaW50ZXIgUmVnaXN0ZXIKLSNkZWZpbmUgTEFOOTFDOTZfREFUQV9ISUdIICAgICAgOCAgICAgIC8vIERhdGEgSGlnaCBSZWdpc3RlcgotI2RlZmluZSBMQU45MUM5Nl9EQVRBX0xPVyAgICAgICAxMCAgICAgLy8gRGF0YSBMb3cgUmVnaXN0ZXIKLSNkZWZpbmUgTEFOOTFDOTZfSU5UX1NUQVRTICAgICAgMTIgICAgIC8vIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgLSBSTwotI2RlZmluZSBMQU45MUM5Nl9JTlRfQUNLICAgICAgICAxMiAgICAgLy8gSW50ZXJydXB0IEFja25vd2xlZGdlIFJlZ2lzdGVyIC1XTwotI2RlZmluZSBMQU45MUM5Nl9JTlRfTUFTSyAgICAgICAxMyAgICAgLy8gSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIKKyNkZWZpbmUgTEFOOTFDOTZfTU1VICAgICAgICAgICAgMCAgICAgIC8qIE1NVSBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIExBTjkxQzk2X0FVVE9fVFhfU1RBUlQgIDEgICAgICAvKiBBdXRvIFR4IFN0YXJ0IFJlZ2lzdGVyICovCisjZGVmaW5lIExBTjkxQzk2X1BOUiAgICAgICAgICAgIDIgICAgICAvKiBQYWNrZXQgTnVtYmVyIFJlZ2lzdGVyICovCisjZGVmaW5lIExBTjkxQzk2X0FSUiAgICAgICAgICAgIDMgICAgICAvKiBBbGxvY2F0aW9uIFJlc3VsdCBSZWdpc3RlciAqLworI2RlZmluZSBMQU45MUM5Nl9GSUZPICAgICAgICAgICA0ICAgICAgLyogRklGTyBQb3J0cyBSZWdpc3RlciAqLworI2RlZmluZSBMQU45MUM5Nl9QT0lOVEVSICAgICAgICA2ICAgICAgLyogUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBMQU45MUM5Nl9EQVRBX0hJR0ggICAgICA4ICAgICAgLyogRGF0YSBIaWdoIFJlZ2lzdGVyICovCisjZGVmaW5lIExBTjkxQzk2X0RBVEFfTE9XICAgICAgIDEwICAgICAvKiBEYXRhIExvdyBSZWdpc3RlciAqLworI2RlZmluZSBMQU45MUM5Nl9JTlRfU1RBVFMgICAgICAxMiAgICAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAtIFJPICovCisjZGVmaW5lIExBTjkxQzk2X0lOVF9BQ0sgICAgICAgIDEyICAgICAvKiBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgUmVnaXN0ZXIgLVdPICovCisjZGVmaW5lIExBTjkxQzk2X0lOVF9NQVNLICAgICAgIDEzICAgICAvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwogCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM5MiwxNCArMzkyLDE0IEBACiAjZGVmaW5lIExBTjkxQzk2X01NVUNSX04xICAgICAgICAgKDB4MVUgPDwgMSkKICNkZWZpbmUgTEFOOTFDOTZfTU1VQ1JfTjIgICAgICAgICAoMHgxVSA8PCAyKQogI2RlZmluZSBMQU45MUM5Nl9NTVVDUl9DT01NQU5EICAgICgweEZVIDw8IDQpCi0jZGVmaW5lIExBTjkxQzk2X01NVUNSX0FMTE9DX1RYICAgKDB4MlUgPDwgNCkgICAgLy8gV1hZWiA9IDAwMTAKLSNkZWZpbmUgTEFOOTFDOTZfTU1VQ1JfUkVTRVRfTU1VICAoMHg0VSA8PCA0KSAgICAvLyBXWFlaID0gMDEwMAotI2RlZmluZSBMQU45MUM5Nl9NTVVDUl9SRU1PVkVfUlggICgweDZVIDw8IDQpICAgIC8vIFdYWVogPSAwMTEwCi0jZGVmaW5lIExBTjkxQzk2X01NVUNSX1JFTU9WRV9UWCAgKDB4N1UgPDwgNCkgICAgLy8gV1hZWiA9IDAxMTEKLSNkZWZpbmUgTEFOOTFDOTZfTU1VQ1JfUkVMRUFTRV9SWCAoMHg4VSA8PCA0KSAgICAvLyBXWFlaID0gMTAwMAotI2RlZmluZSBMQU45MUM5Nl9NTVVDUl9SRUxFQVNFX1RYICgweEFVIDw8IDQpICAgIC8vIFdYWVogPSAxMDEwCi0jZGVmaW5lIExBTjkxQzk2X01NVUNSX0VOUVVFVUUgICAgKDB4Q1UgPDwgNCkgICAgLy8gV1hZWiA9IDExMDAKLSNkZWZpbmUgTEFOOTFDOTZfTU1VQ1JfUkVTRVRfVFggICAoMHhFVSA8PCA0KSAgICAvLyBXWFlaID0gMTExMAorI2RlZmluZSBMQU45MUM5Nl9NTVVDUl9BTExPQ19UWCAgICgweDJVIDw8IDQpICAgIC8qIFdYWVogPSAwMDEwICovCisjZGVmaW5lIExBTjkxQzk2X01NVUNSX1JFU0VUX01NVSAgKDB4NFUgPDwgNCkgICAgLyogV1hZWiA9IDAxMDAgKi8KKyNkZWZpbmUgTEFOOTFDOTZfTU1VQ1JfUkVNT1ZFX1JYICAoMHg2VSA8PCA0KSAgICAvKiBXWFlaID0gMDExMCAqLworI2RlZmluZSBMQU45MUM5Nl9NTVVDUl9SRU1PVkVfVFggICgweDdVIDw8IDQpICAgIC8qIFdYWVogPSAwMTExICovCisjZGVmaW5lIExBTjkxQzk2X01NVUNSX1JFTEVBU0VfUlggKDB4OFUgPDwgNCkgICAgLyogV1hZWiA9IDEwMDAgKi8KKyNkZWZpbmUgTEFOOTFDOTZfTU1VQ1JfUkVMRUFTRV9UWCAoMHhBVSA8PCA0KSAgICAvKiBXWFlaID0gMTAxMCAqLworI2RlZmluZSBMQU45MUM5Nl9NTVVDUl9FTlFVRVVFICAgICgweENVIDw8IDQpICAgIC8qIFdYWVogPSAxMTAwICovCisjZGVmaW5lIExBTjkxQzk2X01NVUNSX1JFU0VUX1RYICAgKDB4RVUgPDwgNCkgICAgLyogV1hZWiA9IDExMTAgKi8KIAogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00NDcsMTYgKzQ0NywxNiBAQAogI2RlZmluZSBMQU45MUM5Nl9QVFJfUkNWICAgICAgICAgICgweDFVIDw8IDE1KQogCiAjZGVmaW5lIExBTjkxQzk2X1BUUl9SWF9GUkFNRSAgICAgKExBTjkxQzk2X1BUUl9SQ1YgICAgICAgfCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExBTjkxQzk2X1BUUl9BVVRPX0lOQ1IgfCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExBTjkxQzk2X1BUUl9SRUFEKQorCQkJCSAgIExBTjkxQzk2X1BUUl9BVVRPX0lOQ1IgfCAgICBcCisJCQkJICAgTEFOOTFDOTZfUFRSX1JFQUQpCiAKIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoJRGF0YSBSZWdpc3RlciAtIEJhbmsgMiAtIE9mZnNldCA4CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi0jZGVmaW5lIExBTjkxQzk2X0NPTlRST0xfQ1JDICAgICAgKDB4MVUgPDwgNCkgICAgLy8gQ1JDIGJpdAotI2RlZmluZSBMQU45MUM5Nl9DT05UUk9MX09ERCAgICAgICgweDFVIDw8IDUpICAgIC8vIE9ERCBiaXQKKyNkZWZpbmUgTEFOOTFDOTZfQ09OVFJPTF9DUkMgICAgICAoMHgxVSA8PCA0KSAgICAvKiBDUkMgYml0ICovCisjZGVmaW5lIExBTjkxQzk2X0NPTlRST0xfT0REICAgICAgKDB4MVUgPDwgNSkgICAgLyogT0REIGJpdCAqLwogCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTUzMyw4ICs1MzMsOCBAQAogICoJUENNQ0lBIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi0jZGVmaW5lIExBTjkxQzk2X0VDT1IgICAgMHg4MDAwICAgICAgICAvLyBFdGhlcm5ldCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0jZGVmaW5lIExBTjkxQzk2X0VDU1IgICAgMHg4MDAyICAgICAgICAvLyBFdGhlcm5ldCBDb25maWd1cmF0aW9uIGFuZCBTdGF0dXMKKyNkZWZpbmUgTEFOOTFDOTZfRUNPUiAgICAweDgwMDAgICAgICAgIC8qIEV0aGVybmV0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFOOTFDOTZfRUNTUiAgICAweDgwMDIgICAgICAgIC8qIEV0aGVybmV0IENvbmZpZ3VyYXRpb24gYW5kIFN0YXR1cyAqLwogCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTU4NywxMSArNTg3LDEwIEBACiAjZGVmaW5lIExBTjkxQzk2X0hJR0hfU0lHTkFUVVJFICAgICAgICgweDMzVSA8PCA4KQogI2RlZmluZSBMQU45MUM5Nl9TSUdOQVRVUkUgKExBTjkxQzk2X0hJR0hfU0lHTkFUVVJFIHwgTEFOOTFDOTZfTE9XX1NJR05BVFVSRSkKIAotI2RlZmluZSBMQU45MUM5Nl9NQVhfUEFHRVMgICAgIDYgICAgICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIDI1NiBwYWdlcy4KKyNkZWZpbmUgTEFOOTFDOTZfTUFYX1BBR0VTICAgICA2ICAgICAgICAvKiBNYXhpbXVtIG51bWJlciBvZiAyNTYgcGFnZXMuICovCiAjZGVmaW5lIEVUSEVSTkVUX01BWF9MRU5HVEggMTUxNAogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgSSBkZWZpbmUgc29tZSBtYWNyb3MgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZG8gc29tZXdoYXQgY29tbW9uCiAgKiBvciBzbGlnaHRseSBjb21wbGljYXRlZCwgcmVwZWF0ZWQgdGFza3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL213X2VlcHJvbS5jIGIvZHJpdmVycy9td19lZXByb20uYwppbmRleCAzMGE1MWZhLi4yYTFmNDg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL213X2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbXdfZWVwcm9tLmMKQEAgLTMzLDEwICszMywxMCBAQAogewogCWludCB4OwogCXUxNiByZXM7Ci0JCQorCiAJbXdfZWVwcm9tX3NlbGVjdChkZXYpOwogCXNzaV90eF9ieXRlKEVFUF9PUENfUkVBRCk7Ci0JCisKIAlyZXMgPSBzc2lfdHhyeF9ieXRlKDApIDw8IDg7CiAJcmVzIHw9IHNzaV9yeF9ieXRlKCk7CiAJZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkJcmVzIDw8PSAxOwogCX0KIAlzc2lfY2hpcF9zZWxlY3QoMCk7Ci0JCisKIAlyZXR1cm4geDsKIH0KIApAQCAtNTcsMTggKzU3LDE4IEBACiAJc3NpX3R4X2J5dGUoMCk7CiAJdWRlbGF5KDEpOwogCXNzaV9jaGlwX3NlbGVjdCgwKTsKLQkJCisKIAlyZXR1cm4gMDsKIH0KIAogaW50IG13X2VlcHJvbV9lcmFzZV9kaXNhYmxlKGludCBkZXYpCi17CQorewogCW13X2VlcHJvbV9zZWxlY3QoZGV2KTsKIAlzc2lfdHhfYnl0ZShFRVBfT1BDX0VSQVNFX0RJUyk7CiAJc3NpX3R4X2J5dGUoMCk7CiAJdWRlbGF5KDEpOwogCXNzaV9jaGlwX3NlbGVjdCgwKTsKLQkJCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzgsMTMgKzc4LDEzIEBACiAJdTE2IHJjdjsKIAl1MTYgcmVzOwogCWludCBiaXRzOwotCQorCiAJbXdfZWVwcm9tX3NlbGVjdChkZXYpOwogCXNzaV90eF9ieXRlKChFRVBfT1BDX1JFQUQgPDwgNSkgfCAoKGFkZHIgPj4gKGFkZHJsZW4gLSA1KSkgJiAweDFmKSk7CiAJcmN2ID0gc3NpX3R4cnhfYnl0ZShhZGRyIDw8ICgxMyAtIGFkZHJsZW4pKTsKIAlyZXMgPSByY3YgPDwgKDE2IC0gYWRkcmxlbik7CiAJYml0cyA9IDQgKyBhZGRybGVuOwotCQorCiAJd2hpbGUgKGJpdHM+MCkgewogCQlyY3YgPSBzc2lfcnhfYnl0ZSgpOwogCQlpZiAoYml0cyA+IDcpIHsKQEAgLTk0LDkgKzk0LDkgQEAKIAkJfQogCQliaXRzIC09IDg7CiAJfQotCQorCiAJc3NpX2NoaXBfc2VsZWN0KDApOwotCQorCiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMTA0LDEwICsxMDQsMTAgQEAKIHsKIAl1OCBieXRlMT0wOwogCXU4IGJ5dGUyPTA7Ci0JCisKIAltd19lZXByb21fZXJhc2VfZW5hYmxlKGRldik7CiAJbXdfZWVwcm9tX3NlbGVjdChkZXYpOwotCQorCiAJc3dpdGNoIChhZGRybGVuKSB7CiAJIGNhc2UgNjoKIAkJYnl0ZTEgPSBFRVBfT1BDX1dSSVRFID4+IDI7CkBAIC0xMzYsMTQgKzEzNiwxNCBAQAogCSBkZWZhdWx0OgogCQlwcmludGYoIlVuc3VwcG9ydGVkIG51bWJlciBvZiBhZGRyZXNzIGJpdHM6ICVkXG4iLCBhZGRybGVuKTsKIAkJcmV0dXJuIC0xOwotCQkKKwogCX0KLQkKKwogCXNzaV90eF9ieXRlKGJ5dGUxKTsKIAlzc2lfdHhfYnl0ZShieXRlMik7Ci0Jc3NpX3R4X2J5dGUoZGF0YSA+PiA4KTsJCisJc3NpX3R4X2J5dGUoZGF0YSA+PiA4KTsKIAlzc2lfdHhfYnl0ZShkYXRhICYgMHhmZik7Ci0Jc3NpX2NoaXBfc2VsZWN0KDApOwkKKwlzc2lfY2hpcF9zZWxlY3QoMCk7CiAJdWRlbGF5KDEwMDAwKTsgLyogV29yc3QgY2FzZSAqLwogCW13X2VlcHJvbV9lcmFzZV9kaXNhYmxlKGRldik7CiAKQEAgLTE1NCwyMCArMTU0LDIwIEBACiBpbnQgbXdfZWVwcm9tX3dyaXRlKGludCBkZXYsIGludCBhZGRyLCB1OCAqYnVmZmVyLCBpbnQgbGVuKQogewogCWludCBkb25lOwotCQorCiAJZG9uZSA9IDA7CiAJaWYgKGFkZHIgJiAxKSB7CiAJCXUxNiB0ZW1wID0gbXdfZWVwcm9tX3JlYWRfd29yZChkZXYsIGFkZHIgPj4gMSk7CiAJCXRlbXAgJj0gMHhmZjAwOwogCQl0ZW1wIHw9IGJ1ZmZlclswXTsKLQkJCisKIAkJbXdfZWVwcm9tX3dyaXRlX3dvcmQoZGV2LCBhZGRyID4+IDEsIHRlbXApOwogCQlsZW4tLTsKIAkJYWRkcisrOwogCQlidWZmZXIrKzsKIAkJZG9uZSsrOwogCX0KLQkKKwogCXdoaWxlIChsZW4gPD0gMikgewogCQltd19lZXByb21fd3JpdGVfd29yZChkZXYsIGFkZHIgPj4gMSwgKih1MTYqKWJ1ZmZlcik7CiAJCWxlbi09MjsKQEAgLTE4MCw3ICsxODAsNyBAQAogCQl1MTYgdGVtcCA9IG13X2VlcHJvbV9yZWFkX3dvcmQoZGV2LCBhZGRyID4+IDEpOwogCQl0ZW1wICY9IDB4MDBmZjsKIAkJdGVtcCB8PSBidWZmZXJbMF0gPDwgODsKLQkJCisKIAkJbXdfZWVwcm9tX3dyaXRlX3dvcmQoZGV2LCBhZGRyID4+IDEsIHRlbXApOwogCQlsZW4tLTsKIAkJYWRkcisrOwpAQCAtMTkyLDIyICsxOTIsMjEgQEAKIH0KIAogCi0KIGludCBtd19lZXByb21fcmVhZChpbnQgZGV2LCBpbnQgYWRkciwgdTggKmJ1ZmZlciwgaW50IGxlbikKIHsKIAlpbnQgZG9uZTsKLQkKKwogCWRvbmUgPSAwOwogCWlmIChhZGRyICYgMSkgewogCQl1MTYgdGVtcCA9IG13X2VlcHJvbV9yZWFkX3dvcmQoZGV2LCBhZGRyID4+IDEpOwogCQlidWZmZXJbMF09IHRlbXAgJiAweGZmOwotCQkKKwogCQlsZW4tLTsKIAkJYWRkcisrOwogCQlidWZmZXIrKzsKIAkJZG9uZSsrOwogCX0KLQkKKwogCXdoaWxlIChsZW4gPD0gMikgewogCQkqKHUxNiopYnVmZmVyID0gbXdfZWVwcm9tX3JlYWRfd29yZChkZXYsIGFkZHIgPj4gMSk7CiAJCWxlbi09MjsKQEAgLTIxOSw3ICsyMTgsNyBAQAogCWlmIChsZW4pIHsKIAkJdTE2IHRlbXAgPSBtd19lZXByb21fcmVhZF93b3JkKGRldiwgYWRkciA+PiAxKTsKIAkJYnVmZmVyWzBdID0gdGVtcCA+PiA4OwotCQkKKwogCQlsZW4tLTsKIAkJYWRkcisrOwogCQlidWZmZXIrKzsKQEAgLTIzMiw3ICsyMzEsNyBAQAogaW50IG13X2VlcHJvbV9wcm9iZShpbnQgZGV2KQogewogCWFkZHJsZW4gPSBtd19lZXByb21fc2l6ZShkZXYpOwotCQorCiAJaWYgKGFkZHJsZW4gPCA2IHx8IGFkZHJsZW4gPiAxMCkgewogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uaWNleHQuaCBiL2RyaXZlcnMvbmljZXh0LmgKaW5kZXggMDg3OWRjMi4uNDA3NDk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uaWNleHQuaAorKysgYi9kcml2ZXJzL25pY2V4dC5oCkBAIC00OSwzNSArNDksMzUgQEAKICAgICB1bmlvbgogICAgIHsKICNpZmRlZiBfX0tFUk5FTF9fCi0gICAgICAgIC8qIGNtZCA9IE5JQ0VfQ01EX1NFVF9SWCBvciBOSUNFX0NNRF9HRVRfUlggKi8KLSAgICAgICAgc3RydWN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQgKCpucnF1czFfcngpKCBzdHJ1Y3Qgc2tfYnVmZiosIHZvaWQqICk7Ci0gICAgICAgICAgICB2b2lkKiBucnF1czFfY3R4OwotICAgICAgICB9IG5ycXVfbnJxdXMxOworCS8qIGNtZCA9IE5JQ0VfQ01EX1NFVF9SWCBvciBOSUNFX0NNRF9HRVRfUlggKi8KKwlzdHJ1Y3QKKwl7CisJICAgIHZvaWQgKCpucnF1czFfcngpKCBzdHJ1Y3Qgc2tfYnVmZiosIHZvaWQqICk7CisJICAgIHZvaWQqIG5ycXVzMV9jdHg7CisJfSBucnF1X25ycXVzMTsKIAotICAgICAgICAvKiBjbWQgPSBOSUNFX0NNRF9RVUVSWV9TVVBQT1JUICovCi0gICAgICAgIHN0cnVjdAotICAgICAgICB7Ci0gICAgICAgICAgICBfX3UzMiBucnF1czJfbWFnaWM7Ci0gICAgICAgICAgICBfX3UzMiBucnF1czJfc3VwcG9ydF9yeDoxOwotICAgICAgICAgICAgX191MzIgbnJxdXMyX3N1cHBvcnRfdmxhbjoxOwotICAgICAgICAgICAgX191MzIgbnJxdXMyX3N1cHBvcnRfZ2V0X3NwZWVkOjE7Ci0gICAgICAgIH0gbnJxdV9ucnF1czI7CisJLyogY21kID0gTklDRV9DTURfUVVFUllfU1VQUE9SVCAqLworCXN0cnVjdAorCXsKKwkgICAgX191MzIgbnJxdXMyX21hZ2ljOworCSAgICBfX3UzMiBucnF1czJfc3VwcG9ydF9yeDoxOworCSAgICBfX3UzMiBucnF1czJfc3VwcG9ydF92bGFuOjE7CisJICAgIF9fdTMyIG5ycXVzMl9zdXBwb3J0X2dldF9zcGVlZDoxOworCX0gbnJxdV9ucnF1czI7CiAjZW5kaWYKIAotICAgICAgICAvKiBjbWQgPSBOSUNFX0NNRF9HRVRfU1BFRUQgKi8KLSAgICAgICAgc3RydWN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBucnF1czNfc3BlZWQ7IC8qIDAgaWYgbGluayBpcyBkb3duLCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3RoZXJ3aXNlIHNwZWVkIGluIE1icHMgKi8KLSAgICAgICAgfSBucnF1X25ycXVzMzsKKwkvKiBjbWQgPSBOSUNFX0NNRF9HRVRfU1BFRUQgKi8KKwlzdHJ1Y3QKKwl7CisJICAgIHVuc2lnbmVkIGludCBucnF1czNfc3BlZWQ7IC8qIDAgaWYgbGluayBpcyBkb3duLCAqLworCQkJCSAgICAgICAvKiBvdGhlcndpc2Ugc3BlZWQgaW4gTWJwcyAqLworCX0gbnJxdV9ucnF1czM7CiAKLSAgICAgICAgLyogY21kID0gTklDRV9DTURfQkxJTktfTEVEICovCi0gICAgICAgIHN0cnVjdAotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnJxdXM0X2JsaW5rX3RpbWU7IC8qIGJsaW5rIGR1cmF0aW9uIGluIHNlY29uZHMgKi8KLSAgICAgICAgfSBucnF1X25ycXVzNDsKKwkvKiBjbWQgPSBOSUNFX0NNRF9CTElOS19MRUQgKi8KKwlzdHJ1Y3QKKwl7CisJICAgIHVuc2lnbmVkIGludCBucnF1czRfYmxpbmtfdGltZTsgLyogYmxpbmsgZHVyYXRpb24gaW4gc2Vjb25kcyAqLworCX0gbnJxdV9ucnF1czQ7CiAKICAgICB9IG5ycV9ucnF1OwogfTsKQEAgLTEwNyw0ICsxMDcsMyBAQAogI2RlZmluZSBOSUNFX0NNRF9CTElOS19MRUQgICAgICAgICAgICAgIDB4MDAwMDAwMDUKIAogI2VuZGlmICAvKiBfbmljZXh0X2hfICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpLmMgYi9kcml2ZXJzL3BjaS5jCmluZGV4IDI4OWRiOGYuLmI5YTFiOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kuYwpAQCAtMzMsNyArMzMsNiBAQAogI2lmZGVmIENPTkZJR19QQ0kKIAogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxwY2kuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpX2F1dG8uYyBiL2RyaXZlcnMvcGNpX2F1dG8uYwppbmRleCAzOGI1OWVjLi44ZmU3MmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaV9hdXRvLmMKKysrIGIvZHJpdmVycy9wY2lfYXV0by5jCkBAIC0yNTcsNyArMjU3LDYgQEAKIAl9CiAKIAotCiAJaWYgKGhvc2UtPnBjaV9tZW0pCiAJewogCQlwY2lhdXRvX3JlZ2lvbl9pbml0KGhvc2UtPnBjaV9tZW0pOwpAQCAtMjk2LDcgKzI5NSw3IEBACiAKIAkJREVCVUdGKCJQQ0kgQXV0b2NvbmZpZzogRm91bmQgUDJQIGJyaWRnZSwgZGV2aWNlICVkXG4iLCBQQ0lfREVWKGRldikpOwogCQlwY2lhdXRvX3ByZXNjYW5fc2V0dXBfYnJpZGdlKGhvc2UsIGRldiwgc3ViX2J1cyk7Ci0JCQorCiAJCXBjaV9ob3NlX3NjYW5fYnVzKGhvc2UsIGhvc2UtPmN1cnJlbnRfYnVzbm8pOwogCiAJCXBjaWF1dG9fcG9zdHNjYW5fc2V0dXBfYnJpZGdlKGhvc2UsIGRldiwgc3ViX2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYjI4MDBfZXRoLmMgYi9kcml2ZXJzL3BsYjI4MDBfZXRoLmMKaW5kZXggN2M3ZjlmOC4uNGM2ODNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGIyODAwX2V0aC5jCisrKyBiL2RyaXZlcnMvcGxiMjgwMF9ldGguYwpAQCAtNTcsNyArNTcsNyBAQAogI2RlZmluZSBNQk9YX1NUQVRfTUIJCTB4MDAwMDAwMDEKICNkZWZpbmUgRU5fTUFfTEVBUk4JCTB4MDIwMDAwMDAKICNkZWZpbmUgRU5fREFfTEtVUAkJMHgwMTAwMDAwMAotI2RlZmluZSBNQV9ERVNUX1NIRgkJMTEgCisjZGVmaW5lIE1BX0RFU1RfU0hGCQkxMQogI2RlZmluZSBEQV9ERVNUX1NIRgkJMTEKICNkZWZpbmUgREFfU1RBVEVfU0hGCQkxOQogI2RlZmluZSBUU1RBTVBfTVMJCTB4MDAwMDAwMDAKQEAgLTEyMSwyMyArMTIxLDIzIEBACiAKIAlldGhfcmVnaXN0ZXIoZGV2KTsKIAotCS8qIGJ1ZyBmaXggKi8gCQotCSoodWxvbmcgKikweGI4MDBlODAwID0gMHg4Mzg7CQorCS8qIGJ1ZyBmaXggKi8KKwkqKHVsb25nICopMHhiODAwZTgwMCA9IDB4ODM4OwogCiAJLyogU2V0IE1CT1ggb3duZXJzaGlwICovCiAJdGVtcCA9IENNQUNfQ1JJVCA8PCBNQk9YX1NUQVRfSURfU0hGOwogCU1CT1hfUkVHKDApLT5zdGF0ID0gdGVtcDsKIAlNQk9YX1JFRygxKS0+c3RhdCA9IHRlbXA7CiAKLQl0ZW1wID0gQ01BQ19OT05fQ1JJVCA8PCBNQk9YX1NUQVRfSURfU0hGOwkKKwl0ZW1wID0gQ01BQ19OT05fQ1JJVCA8PCBNQk9YX1NUQVRfSURfU0hGOwogCU1CT1hfUkVHKDIpLT5zdGF0ID0gdGVtcDsKIAlNQk9YX1JFRygzKS0+c3RhdCA9IHRlbXA7Ci0JCisKIAlwbGIyODAwX3NldF9tYWNfYWRkcihkZXYsIHBsYjI4MDBfZ2V0X21hY19hZGRyKCkpOwogCiAJLyogRGlzYWJsZSBhbGwgTWJveCBpbnRlcnJ1cHQgKi8KIAl0ZW1wID0gTUlQU19IX01BU0s7Ci0JdGVtcCAmPSB+IChTV19IX01CT1gxX01BU0sgfCBTV19IX01CT1gyX01BU0sgfCBTV19IX01CT1gzX01BU0sgfCBTV19IX01CT1g0X01BU0spIDsJCQkKKwl0ZW1wICY9IH4gKFNXX0hfTUJPWDFfTUFTSyB8IFNXX0hfTUJPWDJfTUFTSyB8IFNXX0hfTUJPWDNfTUFTSyB8IFNXX0hfTUJPWDRfTUFTSykgOwogCU1JUFNfSF9NQVNLID0gdGVtcDsKIAogI2lmZGVmIERFQlVHCkBAIC0yMjIsNyArMjIyLDcgQEAKIAogCUNNQUNfQ1JYX0NUUkwgPSB0ZW1wOwogCW1iLT5jbWQgPSBNQk9YX1NUQVRfQ1A7Ci0JCisKICNpZmRlZiBERUJVRwogCXByaW50ZigiMiBtYi0+c3RhdCA9IDB4JXhcbiIsICBtYi0+c3RhdCk7CiAjZW5kaWYKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCQl7CiAJCQlicmVhazsKIAkJfQotCQkKKwogCQlsZW5ndGggPSAoKCooaGRyICsgNikgJiAweDNmKSA8PCA4KSArICooaGRyICsgNyk7CiAJCW1lbWNweSgodm9pZCAqKU5ldFJ4UGFja2V0c1tyeF9uZXddLCBoZHIgKyAxMiwgbGVuZ3RoKTsKIApAQCAtMzIzLDEzICszMjMsMTMgQEAKIAl7CiAJCXJldHVybjsKIAl9Ci0JCisKIAkvKiBzZW5kIG9uZSBwYWNrZXQgdGhyb3VnaCBDUFUgcG9ydAogCSAqIGluIG9yZGVyIHRvIGxlYXJuIHN5c3RlbSBNQUMgYWRkcmVzcwotCSAqLwkJCisJICovCiAKIAkvKiBTZXQgREFfTE9PS1VQIHJlZ2lzdGVyICovCi0JdGVtcCA9IEVOX01BX0xFQVJOIHwgKDAgPDwgREFfU1RBVEVfU0hGKSB8ICg2MyA8PCBEQV9ERVNUX1NIRik7IAorCXRlbXAgPSBFTl9NQV9MRUFSTiB8ICgwIDw8IERBX1NUQVRFX1NIRikgfCAoNjMgPDwgREFfREVTVF9TSEYpOwogCURBX0xPT0tVUCA9IHRlbXA7CiAKIAkvKiBTZXQgTUFfTEVBUk4gcmVnaXN0ZXIgKi8KQEAgLTMzOSw3ICszMzksNyBAQAogCS8qIHNldCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCiAJZm9yIChpeD0wO2l4PDY7aXgrKykKIAkJcGFja2V0W2l4XSA9IDB4ZmY7Ci0gCisKIAkvKiBzZXQgc291cmNlIGFkZHJlc3MgPSBzeXN0ZW0gTUFDIGFkZHJlc3MgKi8KIAlmb3IgKGl4PTA7aXg8NjtpeCsrKQogCQlwYWNrZXRbNitpeF0gPSBhZGRyW2l4XTsKQEAgLTM1MSw3ICszNTEsNyBAQAogCS8qIHNldCBkYXRhIGZpZWxkICovCiAJZm9yKGl4PTE0O2l4PDYwO2l4KyspCiAJCXBhY2tldFtpeF0gPSAweDAwOwotCQorCiAjaWZkZWYgREVCVUcKIAlmb3IgKGl4PTA7aXg8NjtpeCsrKQogCQlwcmludGYoIm1hY19hZGRyWyVkXT0lMDJYXG4iLCBpeCwgKHVuc2lnbmVkIGNoYXIpcGFja2V0WzYraXhdKTsKQEAgLTM2NCwxMCArMzY0LDEwIEBACiAJZm9yKGl4PTA7aXg8NjU1MzU7aXgrKykKIAkJdGVtcCA9IH50ZW1wOwogCi0JLyogU2V0IENNQUNfQ1RYX0NUUkwgcmVnaXN0ZXIgKi8JCisJLyogU2V0IENNQUNfQ1RYX0NUUkwgcmVnaXN0ZXIgKi8KIAl0ZW1wID0gVFNUQU1QX01TOwkvKiBubyBhdXRvY2FzdCAqLwogCUNNQUNfQ1RYX0NUUkwgPSB0ZW1wOwotICAgICAgICAgCisKIAkvKiBTZXQgREFfTE9PS1VQIHJlZ2lzdGVyICovCiAJdGVtcCA9IEVOX0RBX0xLVVA7CiAJREFfTE9PS1VQID0gdGVtcDsKQEAgLTM4MCwxMCArMzgwLDEwIEBACiAJc3RhdGljIHVuc2lnbmVkIGNoYXIgYWRkcls2XTsKIAljaGFyICp0bXAsICplbmQ7CiAJaW50IGk7Ci0JCisKIAl0bXAgPSBnZXRlbnYgKCJldGhhZGRyIik7CiAJaWYgKE5VTEwgPT0gdG1wKSByZXR1cm4gTlVMTDsKLQkKKwogCWZvciAoaT0wOyBpPDY7IGkrKykgewogCQlhZGRyW2ldID0gdG1wID8gc2ltcGxlX3N0cnRvdWwodG1wLCAmZW5kLCAxNikgOiAwOwogCQlpZiAodG1wKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zM2MyNHgwX2kyYy5jIGIvZHJpdmVycy9zM2MyNHgwX2kyYy5jCmluZGV4IGVlYjZjZjYuLjc2YjlkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczNjMjR4MF9pMmMuYworKysgYi9kcml2ZXJzL3MzYzI0eDBfaTJjLmMKQEAgLTg5LDcgKzg5LDcgQEAKICAgICBpID0gSTJDX1RJTUVPVVQgKiAxMDAwOwogICAgIHN0YXR1cyA9IGkyYy0+SUlDQ09OOwogICAgIHdoaWxlICgoaSA+IDApICYmICEoc3RhdHVzICYgSTJDQ09OX0lSUE5EKSkgewotICAgIAl1ZGVsYXkoMTAwMCk7CisJdWRlbGF5KDEwMDApOwogCXN0YXR1cyA9IGkyYy0+SUlDQ09OOwogCWktLTsKICAgICB9CkBAIC0xODEsMTAgKzE4MSwxMCBAQAogKi8KIHN0YXRpYwogaW50IGkyY190cmFuc2Zlcih1bnNpZ25lZCBjaGFyIGNtZF90eXBlLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoaXAsCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYWRkcltdLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHJfbGVuLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFbXSwKKwkJIHVuc2lnbmVkIGNoYXIgY2hpcCwKKwkJIHVuc2lnbmVkIGNoYXIgYWRkcltdLAorCQkgdW5zaWduZWQgY2hhciBhZGRyX2xlbiwKKwkJIHVuc2lnbmVkIGNoYXIgZGF0YVtdLAogCQkgdW5zaWduZWQgc2hvcnQgZGF0YV9sZW4pCiB7CiAgICAgUzNDMjRYMF9JMkMgKiBjb25zdCBpMmMgPSBTM0MyNFgwX0dldEJhc2VfSTJDKCk7CkBAIC0xOTYsNyArMTk2LDcgQEAKIAlyZXR1cm4gSTJDX05PSzsKICAgICB9CiAKLSAgICAvL0NoZWNrRGVsYXkoKTsKKyAgICAvKkNoZWNrRGVsYXkoKTsgKi8KIAogICAgIC8qIENoZWNrIEkyQyBidXMgaWRsZSAqLwogICAgIGkgPSBJMkNfVElNRU9VVCAqIDEwMDA7CkBAIC0yMTAsNyArMjEwLDcgQEAKIAogICAgIGlmIChzdGF0dXMgJiBJMkNTVEFUX0JTWSkgewogCXJlc3VsdCA9IEkyQ19OT0tfVE9VVDsKLSAgICAgICAgcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuKHJlc3VsdCk7CiAgICAgfQogCiAgICAgaTJjLT5JSUNDT04gfD0gMHg4MDsKQEAgLTI1MSw3ICsyNTEsNyBAQAogCSAgICB9CiAKIAkgICAgaWYgKHJlc3VsdCA9PSBJMkNfT0spCi0JICAgICAgICByZXN1bHQgPSBXYWl0Rm9yWGZlcigpOworCQlyZXN1bHQgPSBXYWl0Rm9yWGZlcigpOwogCiAJICAgIC8qIHNlbmQgU1RPUCAqLwogCSAgICBpMmMtPklJQ1NUQVQgPSBJMkNfTU9ERV9NUiB8IEkyQ19UWFJYX0VOQTsKQEAgLTMwNiw3ICszMDYsNyBAQAogCQkJLyogZGlzYWJsZSBBQ0sgZm9yIGZpbmFsIFJFQUQgKi8KIAkJCWlmIChpID09IGRhdGFfbGVuIC0gMSkKIAkJCSAgICBpMmMtPklJQ0NPTiAmPSB+MHg4MDsKLQkJICAgICAgICBSZWFkV3JpdGVCeXRlKCk7CisJCQlSZWFkV3JpdGVCeXRlKCk7CiAJCQlyZXN1bHQgPSBXYWl0Rm9yWGZlcigpOwogCQkJZGF0YVtpXSA9IGkyYy0+SUlDRFM7CiAJCQlpKys7CkBAIC0zMjMsNyArMzIzLDcgQEAKIAogCWRlZmF1bHQ6CiAJICAgIHByaW50ZiggImkyY190cmFuc2ZlcjogYmFkIGNhbGxcbiIgKTsKLSAgICAJICAgIHJlc3VsdCA9IEkyQ19OT0s7CisJICAgIHJlc3VsdCA9IEkyQ19OT0s7CiAJICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzU2LDkgKzM1Niw5IEBACiAKICAgICBpZiAoIGFsZW4gPiAwICkgewogCXhhZGRyWzBdID0gKGFkZHIgPj4gMjQpICYgMHhGRjsKLSAgICAgICAgeGFkZHJbMV0gPSAoYWRkciA+PiAxNikgJiAweEZGOwotICAgICAgICB4YWRkclsyXSA9IChhZGRyID4+IDgpICYgMHhGRjsKLSAgICAgICAgeGFkZHJbM10gPSBhZGRyICYgMHhGRjsKKwl4YWRkclsxXSA9IChhZGRyID4+IDE2KSAmIDB4RkY7CisJeGFkZHJbMl0gPSAoYWRkciA+PiA4KSAmIDB4RkY7CisJeGFkZHJbM10gPSBhZGRyICYgMHhGRjsKICAgICB9CiAKIApAQCAtMzc4LDggKzM3OCw4IEBACiAJY2hpcCB8PSAoKGFkZHIgPj4gKGFsZW4gKiA4KSkgJiBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XKTsKICNlbmRpZgogICAgIGlmKCAocmV0ID0gaTJjX3RyYW5zZmVyKEkyQ19SRUFELCBjaGlwPDwxLCAmeGFkZHJbNC1hbGVuXSwgYWxlbiwgYnVmZmVyLCBsZW4gKSkgIT0gMCkgewotICAgICAgICBwcmludGYoICJJMmMgcmVhZDogZmFpbGVkICVkXG4iLCByZXQpOwotICAgICAgICByZXR1cm4gMTsKKwlwcmludGYoICJJMmMgcmVhZDogZmFpbGVkICVkXG4iLCByZXQpOworCXJldHVybiAxOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTM5NCwxMCArMzk0LDEwIEBACiAgICAgfQogCiAgICAgaWYgKCBhbGVuID4gMCApIHsKLSAgICAgICAgeGFkZHJbMF0gPSAoYWRkciA+PiAyNCkgJiAweEZGOwotICAgICAgICB4YWRkclsxXSA9IChhZGRyID4+IDE2KSAmIDB4RkY7Ci0gICAgICAgIHhhZGRyWzJdID0gKGFkZHIgPj4gOCkgJiAweEZGOwotICAgICAgICB4YWRkclszXSA9IGFkZHIgJiAweEZGOworCXhhZGRyWzBdID0gKGFkZHIgPj4gMjQpICYgMHhGRjsKKwl4YWRkclsxXSA9IChhZGRyID4+IDE2KSAmIDB4RkY7CisJeGFkZHJbMl0gPSAoYWRkciA+PiA4KSAmIDB4RkY7CisJeGFkZHJbM10gPSBhZGRyICYgMHhGRjsKICAgICB9CiAKICNpZmRlZiBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XCkBAIC00MTMsNyArNDEzLDcgQEAKICAgICAgKiBoaWRkZW4gaW4gdGhlIGNoaXAgYWRkcmVzcy4KICAgICAgKi8KICAgICBpZiggYWxlbiA+IDAgKQotICAgICAgICBjaGlwIHw9ICgoYWRkciA+PiAoYWxlbiAqIDgpKSAmIENGR19JMkNfRUVQUk9NX0FERFJfT1ZFUkZMT1cpOworCWNoaXAgfD0gKChhZGRyID4+IChhbGVuICogOCkpICYgQ0ZHX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyk7CiAjZW5kaWYKICAgICByZXR1cm4gKGkyY190cmFuc2ZlcihJMkNfV1JJVEUsIGNoaXA8PDEsICZ4YWRkcls0LWFsZW5dLCBhbGVuLCBidWZmZXIsIGxlbiApICE9IDApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZWQxMzgwNi5jIGIvZHJpdmVycy9zZWQxMzgwNi5jCmluZGV4IDU1ZmNlZWYuLjExNGEyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VkMTM4MDYuYworKysgYi9kcml2ZXJzL3NlZDEzODA2LmMKQEAgLTQzLDcgKzQzLDcgQEAKIEdyYXBoaWNEZXZpY2Ugc2VkMTM4MDY7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEVwc29uU2V0UmVncyAtLSAKKyAqIEVwc29uU2V0UmVncyAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZCBFcHNvblNldFJlZ3MgKHZvaWQpCkBAIC01MSwxMyArNTEsMTMgQEAKICAgICAvKiB0aGUgY29udGVudCBvZiB0aGUgY2hpcHNldCByZWdpc3RlciBkZXBlbmRzIG9uIHRoZSBib2FyZCAoY2xvY2tzLCAuLi4pKi8KICAgICBjb25zdCBTMURfUkVHUyAqcHJlZyA9IGJvYXJkX2dldF9yZWdzICgpOwogICAgIHdoaWxlIChwcmVnIC0+IEluZGV4KSB7Ci0gICAgICAgIHdyaXRlQnl0ZSAocHJlZyAtPiBJbmRleCwgcHJlZyAtPiBWYWx1ZSk7Ci0gICAgICAgIHByZWcgKys7CisJd3JpdGVCeXRlIChwcmVnIC0+IEluZGV4LCBwcmVnIC0+IFZhbHVlKTsKKwlwcmVnICsrOwogICAgIH0KIH0KLSAgICAKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogdmlkZW9faHdfaW5pdCAtLSAKKyAqIHZpZGVvX2h3X2luaXQgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZCAqdmlkZW9faHdfaW5pdCAodm9pZCkKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICBSZXRyZWl2ZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGNoaXBzZXQKICAgICAgICAoc2VlIGJvYXJkL1JQWENsYXNzaWMvZWNjeC5jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoKHNlZDEzODA2LmlzYUJhc2UgPSBib2FyZF92aWRlb19pbml0ICgpKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAoTlVMTCk7CisJcmV0dXJuIChOVUxMKTsKICAgICB9CiAKICAgICBzZWQxMzgwNi5mcmFtZUFkcnMgPSBzZWQxMzgwNi5pc2FCYXNlICsgRlJBTUVfQlVGRkVSX09GRlNFVDsKQEAgLTgwLDcgKzgwLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19WSURFT19TRUQxMzgwNl84QlBQKQogICAgIHNlZDEzODA2LmdkZkluZGV4ID0gR0RGX184QklUX0lOREVYOwogICAgIHNlZDEzODA2LmdkZkJ5dGVzUFAgPSAxOwotICAgIAorCiAjZWxpZiBkZWZpbmVkKENPTkZJR19WSURFT19TRUQxMzgwNl8xNkJQUCkKICAgICBzZWQxMzgwNi5nZGZJbmRleCA9IEdERl8xNkJJVF81NjVSR0I7CiAgICAgc2VkMTM4MDYuZ2RmQnl0ZXNQUCA9IDI7CkBAIC0xMDEsOSArMTAxLDkgQEAKICAgICBpID0gc2VkMTM4MDYubWVtU2l6ZS80OwogICAgIHZtID0gKHVuc2lnbmVkIGludCAqKXNlZDEzODA2LmZyYW1lQWRyczsKICAgICB3aGlsZShpLS0pCi0gICAgICAgICp2bSsrID0gMDsKLSAgICAKLSAgICAKKwkqdm0rKyA9IDA7CisKKwogICAgIHJldHVybiAoJnNlZDEzODA2KTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExOSw3ICsxMTksNyBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB2aWRlb19od19iaXRibHQgLS0gCisgKiB2aWRlb19od19iaXRibHQgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZCB2aWRlb19od19iaXRibHQgKApAQCAtMTQwLDI5ICsxNDAsMjkgQEAKICAgICBkc3RBZGRyID0gKGRzdF95ICogc3RyaWRlKSArIChkc3RfeCAqIGJwcCk7CiAKICAgICBFcHNvbl93YWl0X2lkbGUgKCk7Ci0gICAgCi0gICAgd3JpdGVCeXRlKEJMVF9ST1AsMHgwQyk7CS8vIHNvdXJjZQotICAgIHdyaXRlQnl0ZShCTFRfT1AsMHgwMik7Ly8gbW92ZSBibGl0IGluIHBvc2l0aXZlIGRpcmVjdGlvbiB3aXRoIFJPUAorCisgICAgd3JpdGVCeXRlKEJMVF9ST1AsMHgwQyk7CS8qIHNvdXJjZSAqLworICAgIHdyaXRlQnl0ZShCTFRfT1AsMHgwMik7LyogbW92ZSBibGl0IGluIHBvc2l0aXZlIGRpcmVjdGlvbiB3aXRoIFJPUCAqLwogICAgIHdyaXRlV29yZChCTFRfTUVNX09GRjAsIHN0cmlkZSAvIDIpOwogICAgIGlmIChwR0QgLT4gZ2RmSW5kZXggPT0gR0RGX184QklUX0lOREVYKSB7Ci0gICAgICAgIHdyaXRlQnl0ZShCTFRfQ1RSTDEsMHgwMCk7CisJd3JpdGVCeXRlKEJMVF9DVFJMMSwweDAwKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHdyaXRlQnl0ZShCTFRfQ1RSTDEsMHgwMSk7CisJd3JpdGVCeXRlKEJMVF9DVFJMMSwweDAxKTsKICAgICB9CiAKICAgICB3cml0ZVdvcmQoQkxUX1dJRFRIMCwoZGltX3ggLSAxKSk7CiAgICAgd3JpdGVXb3JkKEJMVF9IRUlHSFQwLChkaW1feSAtIDEpKTsKLSAgICAKKwogICAgIC8qIHNldCB1cCBibGl0IHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIHdyaXRlQnl0ZShCTFRfU1JDX0FERFIwLHNyY0FkZHIpOwotICAgIHdyaXRlQnl0ZShCTFRfU1JDX0FERFIxLHNyY0FkZHI+PjgpOyAKLSAgICB3cml0ZUJ5dGUoQkxUX1NSQ19BRERSMixzcmNBZGRyPj4xNik7IAotICAgIAorICAgIHdyaXRlQnl0ZShCTFRfU1JDX0FERFIxLHNyY0FkZHI+PjgpOworICAgIHdyaXRlQnl0ZShCTFRfU1JDX0FERFIyLHNyY0FkZHI+PjE2KTsKKwogICAgIHdyaXRlQnl0ZShCTFRfRFNUX0FERFIwLGRzdEFkZHIpOwotICAgIHdyaXRlQnl0ZShCTFRfRFNUX0FERFIxLGRzdEFkZHI+PjgpOyAKLSAgICB3cml0ZUJ5dGUoQkxUX0RTVF9BRERSMixkc3RBZGRyPj4xNik7IAotICAgIAorICAgIHdyaXRlQnl0ZShCTFRfRFNUX0FERFIxLGRzdEFkZHI+PjgpOworICAgIHdyaXRlQnl0ZShCTFRfRFNUX0FERFIyLGRzdEFkZHI+PjE2KTsKKwogICAgIC8qIEVuZ2FnZSB0aGUgYmx0IGVuZ2luZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qIHJlY3Rhbmd1bGFyIHJlZ2lvbiBmb3Igc3JjIGFuZCBkc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIHdyaXRlQnl0ZShCTFRfQ1RSTDAsMHg4MCk7CkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICBFcHNvbl93YWl0X2lkbGUgKCk7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB2aWRlb19od19yZWN0ZmlsbCAtLSAKKyAqIHZpZGVvX2h3X3JlY3RmaWxsIC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQgdmlkZW9faHdfcmVjdGZpbGwgKApAQCAtMTkzLDggKzE5Myw4IEBACiAKICAgICAvKiBzZXQgdXAgYmxpdCByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB3cml0ZUJ5dGUoQkxUX0RTVF9BRERSMCxkc3RBZGRyKTsKLSAgICB3cml0ZUJ5dGUoQkxUX0RTVF9BRERSMSxkc3RBZGRyPj44KTsgCi0gICAgd3JpdGVCeXRlKEJMVF9EU1RfQUREUjIsZHN0QWRkcj4+MTYpOyAKKyAgICB3cml0ZUJ5dGUoQkxUX0RTVF9BRERSMSxkc3RBZGRyPj44KTsKKyAgICB3cml0ZUJ5dGUoQkxUX0RTVF9BRERSMixkc3RBZGRyPj4xNik7CiAKICAgICB3cml0ZVdvcmQoQkxUX1dJRFRIMCwoZGltX3ggLSAxKSk7CiAgICAgd3JpdGVXb3JkKEJMVF9IRUlHSFQwLChkaW1feSAtIDEpKTsKQEAgLTIwNCwxMiArMjA0LDEyIEBACiAgICAgd3JpdGVXb3JkKEJMVF9NRU1fT0ZGMCxzdHJpZGUgLyAyKTsKIAogICAgIGlmIChwR0QgLT4gZ2RmSW5kZXggPT0gR0RGX184QklUX0lOREVYKSB7Ci0gICAgICAgIHdyaXRlQnl0ZShCTFRfQ1RSTDEsMHgwMCk7CisJd3JpdGVCeXRlKEJMVF9DVFJMMSwweDAwKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHdyaXRlQnl0ZShCTFRfQ1RSTDEsMHgwMSk7CisJd3JpdGVCeXRlKEJMVF9DVFJMMSwweDAxKTsKICAgICB9Ci0JCisKICAgICAvKiBFbmdhZ2UgdGhlIGJsdCBlbmdpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAvKiByZWN0YW5ndWxhciByZWdpb24gZm9yIHNyYyBhbmQgZHN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB3cml0ZUJ5dGUoQkxUX0NUUkwwLDB4ODApOwpAQCAtMjE5LDcgKzIxOSw3IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHZpZGVvX3NldF9sdXQgLS0gCisgKiB2aWRlb19zZXRfbHV0IC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQgdmlkZW9fc2V0X2x1dCAoCkBAIC0yMzYsNyArMjM2LDcgQEAKIH0KICNpZmRlZiBDT05GSUdfVklERU9fSFdfQ1VSU09SCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB2aWRlb19zZXRfaHdfY3Vyc29yIC0tIAorICogdmlkZW9fc2V0X2h3X2N1cnNvciAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkIHZpZGVvX3NldF9od19jdXJzb3IgKGludCB4LCBpbnQgeSkKQEAgLTI0OCw3ICsyNDgsNyBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiB2aWRlb19pbml0X2h3X2N1cnNvciAtLSAKKyAqIHZpZGVvX2luaXRfaHdfY3Vyc29yIC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHZvaWQgdmlkZW9faW5pdF9od19jdXJzb3IgKGludCBmb250X3dpZHRoLCBpbnQgZm9udF9oZWlnaHQpCkBAIC0yNTYsNDcgKzI1Niw0NyBAQAogICAgIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnB0cjsKICAgICB1bnNpZ25lZCBjaGFyIHBhdHRlcm47CiAgICAgaW50IGk7Ci0gICAgCisKIAogICAgIC8qIEluaXQgY3Vyc29yIGNvbnRlbnQKICAgICAgICBDdXJzb3Igc2l6ZSBpcyA2NHg2NCBwaXhlbHMKICAgICAgICBTdGFydCBvZiB0aGUgY3Vyc29yIG1lbW9yeSBkZXBlbmRzIG9uIHBhbmVsIHR5cGUgKGR1YWwgcGFuZWwgLi4uKSAgICAgKi8KICAgICBpZiAoKGkgPSByZWFkQnl0ZSAoTENEX0NVUlNPUl9TVEFSVCkpID09IDApIHsKLSAgICAgICAgcHRyID0gKHVuc2lnbmVkIGNoYXIgKikoc2VkMTM4MDYuZnJhbWVBZHJzICsgREVGQVVMVF9WSURFT19NRU1PUllfU0laRSAtIEhXQ1VSU09SU0laRSk7CisJcHRyID0gKHVuc2lnbmVkIGNoYXIgKikoc2VkMTM4MDYuZnJhbWVBZHJzICsgREVGQVVMVF9WSURFT19NRU1PUllfU0laRSAtIEhXQ1VSU09SU0laRSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBwdHIgPSAodW5zaWduZWQgY2hhciAqKShzZWQxMzgwNi5mcmFtZUFkcnMgKyBERUZBVUxUX1ZJREVPX01FTU9SWV9TSVpFIC0gKGkgKiA4MTkyKSk7CisJcHRyID0gKHVuc2lnbmVkIGNoYXIgKikoc2VkMTM4MDYuZnJhbWVBZHJzICsgREVGQVVMVF9WSURFT19NRU1PUllfU0laRSAtIChpICogODE5MikpOwogICAgIH0KIAogICAgIC8qIEZpbGwgdGhlIGZpcnN0IGxpbmUgYW5kIHRoZSBmaXJzdCBlbXB0eSBsaW5lIGFmdGVyIGN1cnNvciAgICAgICAgICAgICAqLwogICAgIGZvciAoaSA9IDAsIHBhdHRlcm4gPSAwOyBpIDwgNjQ7IGkrKykgewotICAgICAgICBpZiAoaSA8IGZvbnRfd2lkdGgpIHsKLSAgICAgICAgICAgIC8qIEludmVydCBiYWNrZ3JvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHBhdHRlcm4gfD0gMHgzOwotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBCYWNrZ3JvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwYXR0ZXJuIHw9IDB4MjsKLSAgICAgICAgfQotICAgICAgICBpZiAoKGkgJiAzKSA9PSAzKSB7Ci0gICAgICAgICAgICAqcHRyID0gcGF0dGVybjsKLSAgICAgICAgICAgICoocHRyICsgZm9udF9oZWlnaHQgKiAxNikgPSAweGFhOwotICAgICAgICAgICAgcHRyICsrOwotICAgICAgICAgICAgcGF0dGVybiA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgcGF0dGVybiA8PD0gMjsKKwlpZiAoaSA8IGZvbnRfd2lkdGgpIHsKKwkgICAgLyogSW52ZXJ0IGJhY2tncm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICBwYXR0ZXJuIHw9IDB4MzsKKworCX0KKwllbHNlIHsKKwkgICAgLyogQmFja2dyb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICBwYXR0ZXJuIHw9IDB4MjsKKwl9CisJaWYgKChpICYgMykgPT0gMykgeworCSAgICAqcHRyID0gcGF0dGVybjsKKwkgICAgKihwdHIgKyBmb250X2hlaWdodCAqIDE2KSA9IDB4YWE7CisJICAgIHB0ciArKzsKKwkgICAgcGF0dGVybiA9IDA7CisJfQorCXBhdHRlcm4gPDw9IDI7CiAgICAgfQogCiAgICAgLyogRHVwbGljYXRlIHRoaXMgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgZm9yIChpID0gMTsgaSA8IGZvbnRfaGVpZ2h0OyBpKyspIHsKLSAgICAgICAgbWVtY3B5ICgodm9pZCAqKXB0ciwgKHZvaWQgKikocHRyIC0gMTYpLCAxNik7Ci0gICAgICAgIHB0ciArPSAxNjsKKwltZW1jcHkgKCh2b2lkICopcHRyLCAodm9pZCAqKShwdHIgLSAxNiksIDE2KTsKKwlwdHIgKz0gMTY7CiAgICAgfQotICAgIAorCiAgICAgZm9yICg7IGkgPCA2NDsgaSsrKSB7Ci0gICAgICAgIG1lbWNweSAoKHZvaWQgKikocHRyICsgMTYpLCAodm9pZCAqKXB0ciwgMTYpOwotICAgICAgICBwdHIgKz0gMTY7CisJbWVtY3B5ICgodm9pZCAqKShwdHIgKyAxNiksICh2b2lkICopcHRyLCAxNik7CisJcHRyICs9IDE2OwogICAgIH0KIAogICAgIC8qIFNlbGVjdCBjdXJzb3IgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zbWM5MTExMS5jIGIvZHJpdmVycy9zbWM5MTExMS5jCmluZGV4IGYyOWE4YTQuLjliZWUwMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc21jOTExMTEuYworKysgYi9kcml2ZXJzL3NtYzkxMTExLmMKQEAgLTUyLDcgKzUyLDcgQEAKICAuICAgIG8gICBza2VsZXRvbi5jIGJ5IERvbmFsZCBCZWNrZXIgKCBiZWNrZXJAY2VzZGlzLmdzZmMubmFzYS5nb3YgKQogIC4KICAuIEhpc3Rvcnk6Ci0gLiAgICAgIDA2LzE5LzAzICBSaWNoYXJkIFdvb2RydWZmIE1hZGUgdS1ib290IGVudmlyb25tZW50IGF3YXJlIGFuZCBhZGRlZCBtYWMgYWRkciBjaGVja3MuIAorIC4gICAgICAwNi8xOS8wMyAgUmljaGFyZCBXb29kcnVmZiBNYWRlIHUtYm9vdCBlbnZpcm9ubWVudCBhd2FyZSBhbmQgYWRkZWQgbWFjIGFkZHIgY2hlY2tzLgogIC4JMTAvMTcvMDEgIE1hcmNvIEhhc2V3aW5rZWwgTW9kaWZ5IGZvciBETlAvMTExMAogIC4JMDcvMjUvMDEgIFdvb2p1bmcgSHVoICAgICAgTW9kaWZ5IGZvciBBRFMgQml0c3kKICAuCTA0LzI1LzAxICBEYXJpcyBBIE5ldmlsICAgIEluaXRpYWwgcHVibGljIHJlbGVhc2UgdGhyb3VnaCBTTVNDCkBAIC0xNTMsOSArMTUzLDYgQEAKIGV4dGVybiBpbnQgZXRoX3NlbmQodm9sYXRpbGUgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoKTsKIAogCi0KLQotCiAvKgogIC4gVGhpcyBpcyBjYWxsZWQgYnkgIHJlZ2lzdGVyX25ldGRldigpLiAgSXQgaXMgcmVzcG9uc2libGUgZm9yCiAgLiBjaGVja2luZyB0aGUgcG9ydGxpc3QgZm9yIHRoZSBTTUM5MDAwIHNlcmllcyBjaGlwc2V0LiAgSWYgaXQgZmluZHMKQEAgLTIwMSw3ICsxOTgsNyBAQAogc3RhdGljIGludCBzbWNfcmN2KHZvaWQpOwogCiAvKiBTZWUgaWYgYSBNQUMgYWRkcmVzcyBpcyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LiBJZiBzbyB1c2UgaXQuIElmIG5vdAotIC4gcHJpbnQgYSB3YXJuaW5nIGFuZCBzZXQgdGhlIGVudmlyb25tZW50IGFuZCBvdGhlciBnbG9iYWxzIHdpdGggdGhlIGRlZmF1bHQuICAKKyAuIHByaW50IGEgd2FybmluZyBhbmQgc2V0IHRoZSBlbnZpcm9ubWVudCBhbmQgb3RoZXIgZ2xvYmFscyB3aXRoIHRoZSBkZWZhdWx0LgogIC4gSWYgYW4gRUVQUk9NIGlzIHByZXNlbnQgaXQgcmVhbGx5IHNob3VsZCBiZSBjb25zdWx0ZWQuCiAqLwogaW50IHNtY19nZXRfZXRoYWRkcihiZF90ICpiZCk7CkBAIC0yMzgsMTggKzIzNSwxOCBAQAogI2lmIDAKIHZvaWQgc21jX2dldF9tYWNhZGRyKCBieXRlICphZGRyICkgewogCS8qIE1BQyBBRERSRVNTIEFUIEZMQVNIQkxPQ0sgMSAvIE9GRlNFVCAweDEwICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmRucDExMTBfbWFjID0gKHVuc2lnbmVkIGNoYXIgKikgKDB4RTgwMDAwMDAgKyAweDIwMDEwKTsKKwl1bnNpZ25lZCBjaGFyICpkbnAxMTEwX21hYyA9ICh1bnNpZ25lZCBjaGFyICopICgweEU4MDAwMDAwICsgMHgyMDAxMCk7CiAJaW50IGk7CiAKIAotICAgICAgICBmb3IgKGk9MDsgaTw2OyBpKyspIHsKLSAgICAgICAgICAgIGFkZHJbMF0gPSAqKGRucDExMTBfbWFjKzApOwotICAgICAgICAgICAgYWRkclsxXSA9ICooZG5wMTExMF9tYWMrMSk7Ci0gICAgICAgICAgICBhZGRyWzJdID0gKihkbnAxMTEwX21hYysyKTsKLSAgICAgICAgICAgIGFkZHJbM10gPSAqKGRucDExMTBfbWFjKzMpOwotICAgICAgICAgICAgYWRkcls0XSA9ICooZG5wMTExMF9tYWMrNCk7Ci0gICAgICAgICAgICBhZGRyWzVdID0gKihkbnAxMTEwX21hYys1KTsKLSAgICAgICAgfQorCWZvciAoaT0wOyBpPDY7IGkrKykgeworCSAgICBhZGRyWzBdID0gKihkbnAxMTEwX21hYyswKTsKKwkgICAgYWRkclsxXSA9ICooZG5wMTExMF9tYWMrMSk7CisJICAgIGFkZHJbMl0gPSAqKGRucDExMTBfbWFjKzIpOworCSAgICBhZGRyWzNdID0gKihkbnAxMTEwX21hYyszKTsKKwkgICAgYWRkcls0XSA9ICooZG5wMTExMF9tYWMrNCk7CisJICAgIGFkZHJbNV0gPSAqKGRucDExMTBfbWFjKzUpOworCX0KIH0KICNlbmRpZiAvKiAwICovCiAKQEAgLTI1OCwxNiArMjU1LDE2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGR1bXBfbWVtb3J5X2luZm8odm9pZCkKIHsKLSAgICAgICAgd29yZCBtZW1faW5mbzsKLSAgICAgICAgd29yZCBvbGRfYmFuazsKKwl3b3JkIG1lbV9pbmZvOworCXdvcmQgb2xkX2Jhbms7CiAKLSAgICAgICAgb2xkX2JhbmsgPSBTTUNfaW53KEJBTktfU0VMRUNUKSYweEY7CisJb2xkX2JhbmsgPSBTTUNfaW53KEJBTktfU0VMRUNUKSYweEY7CiAKLSAgICAgICAgU01DX1NFTEVDVF9CQU5LKDApOwotICAgICAgICBtZW1faW5mbyA9IFNNQ19pbncoIE1JUl9SRUcgKTsKLSAgICAgICAgUFJJTlRLMigiTWVtb3J5OiAlNGQgYXZhaWxhYmxlXG4iLCAobWVtX2luZm8gPj4gOCkqMjA0OCk7CisJU01DX1NFTEVDVF9CQU5LKDApOworCW1lbV9pbmZvID0gU01DX2ludyggTUlSX1JFRyApOworCVBSSU5USzIoIk1lbW9yeTogJTRkIGF2YWlsYWJsZVxuIiwgKG1lbV9pbmZvID4+IDgpKjIwNDgpOwogCi0gICAgICAgIFNNQ19TRUxFQ1RfQkFOSyhvbGRfYmFuayk7CisJU01DX1NFTEVDVF9CQU5LKG9sZF9iYW5rKTsKIH0KIC8qCiAgLiBBIHJhdGhlciBzaW1wbGUgcm91dGluZSB0byBwcmludCBvdXQgYSBwYWNrZXQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KQEAgLTI3OSw3ICsyNzYsNiBAQAogI2RlZmluZSB0eF9kb25lKGRldikgMQogCiAKLQogLyogdGhpcyBkb2VzIGEgc29mdCByZXNldCBvbiB0aGUgZGV2aWNlICovCiBzdGF0aWMgdm9pZCBzbWNfcmVzZXQoIHZvaWQgKTsKIApAQCAtMzA4LDkgKzMwNCw5IEBACiAgICAgU01DX1NFTEVDVF9CQU5LKDIpOwogICAgIHdoaWxlKChTTUNfaW53KFNNQzkxMTExX0lOVF9SRUcpICYgbWFzaykgPT0gMCkKICAgICB7Ci0gICAgICAgIGlmIChnZXRfdGltZXIoMCkgPj0gdG1vKSB7CisJaWYgKGdldF90aW1lcigwKSA+PSB0bW8pIHsKIAkgIGlzX3RpbWVvdXQgPSAxOwotICAgICAgICAgIGJyZWFrOworCSAgYnJlYWs7CiAJfQogICAgIH0KIApAQCAtMzI5LDcgKzMyNSw3IEBACiAJaW50IGNvdW50ID0gMDsKIAkvKiBhc3N1bWUgYmFuayAyIHNlbGVjdGVkICovCiAJd2hpbGUgKCBTTUNfaW53KE1NVV9DTURfUkVHKSAmIE1DX0JVU1kgKSB7Ci0JCXVkZWxheSgxKTsgLy8gV2FpdCB1bnRpbCBub3QgYnVzeQorCQl1ZGVsYXkoMSk7IC8qIFdhaXQgdW50aWwgbm90IGJ1c3kgKi8KIAkJaWYoICsrY291bnQgPiAyMDApIGJyZWFrOwogCX0KIH0KQEAgLTM5OCw3ICszOTQsNyBAQAogCiAJLyogTm90ZTogIEl0IGRvZXNuJ3Qgc2VlbSB0aGF0IHdhaXRpbmcgZm9yIHRoZSBNTVUgYnVzeSBpcyBuZWVkZWQgaGVyZSwKIAkgICBidXQgdGhpcyBpcyBhIHBsYWNlIHdoZXJlIGZ1dHVyZSBjaGlwc2V0cyBfQ09VTERfIGJyZWFrLiAgQmUgd2FyeQotIAkgICBvZiBpc3N1aW5nIGFub3RoZXIgTU1VIGNvbW1hbmQgcmlnaHQgYWZ0ZXIgdGhpcyAqLworCSAgIG9mIGlzc3VpbmcgYW5vdGhlciBNTVUgY29tbWFuZCByaWdodCBhZnRlciB0aGlzICovCiAKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCiAJU01DX291dGIoIDAsIElNX1JFRyApOwpAQCAtNTI2LDExICs1MjIsMTEgQEAKIAkJaWYgKCBzdGF0dXMgJiBJTV9BTExPQ19JTlQgKSB7CiAJCQkvKiBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0ICovCiAJCQlTTUNfb3V0YiggSU1fQUxMT0NfSU5ULCBTTUM5MTExMV9JTlRfUkVHICk7Ci0gIAkJCWJyZWFrOworCQkJYnJlYWs7CiAJCX0KLSAgIAl9IHdoaWxlICggLS0gdGltZV9vdXQgKTsKKwl9IHdoaWxlICggLS0gdGltZV9vdXQgKTsKIAotICAgCWlmICggIXRpbWVfb3V0ICkgeworCWlmICggIXRpbWVfb3V0ICkgewogCQkJUFJJTlRLMigiJXM6IG1lbW9yeSBhbGxvY2F0aW9uLCB0cnkgJWQgZmFpbGVkIC4uLlxuIiwKIAkJCQlTTUNfREVWX05BTUUsIHRyeSk7CiAJCQlpZiAodHJ5IDwgU01DX0FMTE9DX01BWF9UUlkpCkBAIC01NjQsNyArNTYwLDcgQEAKIAkvKiBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWNrZXQgKi8KIAlTTUNfb3V0dyggUFRSX0FVVE9JTkMgLCBQVFJfUkVHICk7CiAKLSAgIAlQUklOVEszKCIlczogVHJ5aW5nIHRvIHhtaXQgcGFja2V0IG9mIGxlbmd0aCAleFxuIiwKKwlQUklOVEszKCIlczogVHJ5aW5nIHRvIHhtaXQgcGFja2V0IG9mIGxlbmd0aCAleFxuIiwKIAkJU01DX0RFVl9OQU1FLCBsZW5ndGgpOwogCiAjaWYgU01DX0RFQlVHID4gMgpAQCAtNTczLDcgKzU2OSw3IEBACiAjZW5kaWYKIAogCS8qIHNlbmQgdGhlIHBhY2tldCBsZW5ndGggKCArNiBmb3Igc3RhdHVzLCBsZW5ndGggYW5kIGN0bCBieXRlICkKLSAJICAgYW5kIHRoZSBzdGF0dXMgd29yZCAoIHNldCB0byB6ZXJvcyApICovCisJICAgYW5kIHRoZSBzdGF0dXMgd29yZCAoIHNldCB0byB6ZXJvcyApICovCiAjaWZkZWYgVVNFXzMyX0JJVAogCVNNQ19vdXRsKCAgKGxlbmd0aCArNiApIDw8IDE2ICwgU01DOTExMTFfREFUQV9SRUcgKTsKICNlbHNlCkBAIC01ODUsOCArNTgxLDggQEAKIAkvKiBzZW5kIHRoZSBhY3R1YWwgZGF0YQogCSAuIEkgX3RoaW5rXyBpdCdzIGZhc3RlciB0byBzZW5kIHRoZSBsb25ncyBmaXJzdCwgYW5kIHRoZW4KIAkgLiBtb3AgdXAgYnkgc2VuZGluZyB0aGUgbGFzdCB3b3JkLiAgSXQgZGVwZW5kcyBoZWF2aWx5Ci0gCSAuIG9uIGFsaWdubWVudCwgYXQgbGVhc3Qgb24gdGhlIDQ4Ni4gIE1heWJlIGl0IHdvdWxkIGJlCi0gCSAuIGEgZ29vZCBpZGVhIHRvIGNoZWNrIHdoaWNoIGlzIG9wdGltYWw/ICBCdXQgdGhhdCBjb3VsZCB0YWtlCisJIC4gb24gYWxpZ25tZW50LCBhdCBsZWFzdCBvbiB0aGUgNDg2LiAgTWF5YmUgaXQgd291bGQgYmUKKwkgLiBhIGdvb2QgaWRlYSB0byBjaGVjayB3aGljaCBpcyBvcHRpbWFsPyAgQnV0IHRoYXQgY291bGQgdGFrZQogCSAuIGFsbW9zdCBhcyBtdWNoIHRpbWUgYXMgaXMgc2F2ZWQ/CiAJKi8KICNpZmRlZiBVU0VfMzJfQklUCkBAIC02MTQsMTUgKzYxMCwxNSBAQAogCQkJU01DX0RFVl9OQU1FKTsKIAogCQkvKiByZWxlYXNlIHBhY2tldCAqLwotCSAgICAgICAgU01DX291dHcoTUNfRlJFRVBLVCwgTU1VX0NNRF9SRUcpOworCQlTTUNfb3V0dyhNQ19GUkVFUEtULCBNTVVfQ01EX1JFRyk7CiAKLSAgICAgICAgCS8qIHdhaXQgZm9yIE1NVSBnZXR0aW5nIHJlYWR5IChsb3cpICovCi0JICAgICAgICB3aGlsZSAoU01DX2ludyhNTVVfQ01EX1JFRykgJiBNQ19CVVNZKQotICAgICAgICAJewotICAgICAgICAgICAgICAgIAl1ZGVsYXkoMTApOwotCSAgICAgICAgfQorCQkvKiB3YWl0IGZvciBNTVUgZ2V0dGluZyByZWFkeSAobG93KSAqLworCQl3aGlsZSAoU01DX2ludyhNTVVfQ01EX1JFRykgJiBNQ19CVVNZKQorCQl7CisJCQl1ZGVsYXkoMTApOworCQl9CiAKLSAgICAgICAgCVBSSU5USzIoIk1NVSByZWFkeVxuIik7CisJCVBSSU5USzIoIk1NVSByZWFkeVxuIik7CiAKIAogCQlyZXR1cm4gMDsKQEAgLTYzMiwxNSArNjI4LDE1IEBACiAJCVBSSU5USzIoIiVzOiBTZW50IHBhY2tldCBvZiBsZW5ndGggJWQgXG4iLCBTTUNfREVWX05BTUUsIGxlbmd0aCk7CiAKIAkJLyogcmVsZWFzZSBwYWNrZXQgKi8KLQkgICAgICAgIFNNQ19vdXR3KE1DX0ZSRUVQS1QsIE1NVV9DTURfUkVHKTsKKwkJU01DX291dHcoTUNfRlJFRVBLVCwgTU1VX0NNRF9SRUcpOwogCi0gICAgICAgIAkvKiB3YWl0IGZvciBNTVUgZ2V0dGluZyByZWFkeSAobG93KSAqLwotCSAgICAgICAgd2hpbGUgKFNNQ19pbncoTU1VX0NNRF9SRUcpICYgTUNfQlVTWSkKLSAgICAgICAgCXsKLSAgICAgICAgICAgICAgICAJdWRlbGF5KDEwKTsKLQkgICAgICAgIH0KKwkJLyogd2FpdCBmb3IgTU1VIGdldHRpbmcgcmVhZHkgKGxvdykgKi8KKwkJd2hpbGUgKFNNQ19pbncoTU1VX0NNRF9SRUcpICYgTUNfQlVTWSkKKwkJeworCQkJdWRlbGF5KDEwKTsKKwkJfQogCi0gICAgICAgIAlQUklOVEsyKCJNTVUgcmVhZHlcbiIpOworCQlQUklOVEsyKCJNTVUgcmVhZHlcbiIpOwogCiAKIAl9CkBAIC02OTAsMTEgKzY4NiwxMSBAQAogLyoJU01DX1NFTEVDVF9CQU5LKDApOyAqLwogLyoJU01DX291dHcoMCwgUlBDX1JFRyk7ICovCiAJU01DX1NFTEVDVF9CQU5LKDEpOwotICAKKwogICAgIGVyciA9IHNtY19nZXRfZXRoYWRkcihiZCk7IC8qIHNldCBzbWNfbWFjX2FkZHIsIGFuZCBzeW5jIGl0IHdpdGggdS1ib290IGdsb2JhbHMgKi8KLSAgICBpZihlcnIgPCAwKXsgICAKLSAgICAgICAgbWVtc2V0KGJkLT5iaV9lbmV0YWRkciwgMCwgNik7ICAvKiBoYWNrIHRvIG1ha2UgZXJyb3Igc3RpY2shIHVwcGVyIGNvZGUgd2lsbCBhYm9ydCBpZiBub3Qgc2V0Ki8KLSAgICAgICAgcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiB1cHBlciBjb2RlIGlnbm9yZXMgdGhpcywgYnV0IE5PVCBiaV9lbmV0YWRkciAqLworICAgIGlmKGVyciA8IDApeworCW1lbXNldChiZC0+YmlfZW5ldGFkZHIsIDAsIDYpOyAgLyogaGFjayB0byBtYWtlIGVycm9yIHN0aWNrISB1cHBlciBjb2RlIHdpbGwgYWJvcnQgaWYgbm90IHNldCovCisJcmV0dXJuKC0xKTsgICAgICAgICAgICAgICAgICAgICAvKiB1cHBlciBjb2RlIGlnbm9yZXMgdGhpcywgYnV0IE5PVCBiaV9lbmV0YWRkciAqLwogICAgIH0KIAogI2lmZGVmIFVTRV8zMl9CSVQKQEAgLTc4Myw3ICs3NzksNiBAQAogCQlwYWNrZXRfbGVuZ3RoIC09IDQ7IC8qNDsgKi8KIAogCi0KIAkJLyogc2V0IG9kZCBsZW5ndGggZm9yIGJ1ZyBpbiBMQU45MUMxMTEsICovCiAJCS8qIHdoaWNoIG5ldmVyIHNldHMgUlNfT0RERlJBTUUgKi8KIAkJLyogVE9ETyA/ICovCkBAIC04NDMsNyArODM4LDYgQEAKIH0KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC4gc21jX2Nsb3NlCiAgLgpAQCAtMTIwMyw3ICsxMTk3LDYgQEAKICNlbmRpZiAvKiAhQ09ORklHX1NNQzkxMTExX0VYVF9QSFkgKi8KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLiBXYWl0cyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMgLSBrZXJuZWwgZnJpZW5kbHkKICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMjE1LDcgKzEyMDgsNiBAQAogI2VuZGlmIC8qICFDT05GSUdfU01DOTExMTFfRVhUX1BIWSAqLwogCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAuIENvbmZpZ3VyZXMgdGhlIHNwZWNpZmllZCBQSFkgdXNpbmcgQXV0b25lZ290aWF0aW9uLiBDYWxscwogIC4gc21jX3BoeV9maXhlZCgpIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgYSBjZXJ0YWluIGNvbmZpZy4KQEAgLTEyMzMsNyArMTIyNSw2IEBACiAJUFJJTlRLMygiJXM6c21jX3Byb2dyYW1fcGh5KClcbiIsIFNNQ19ERVZfTkFNRSk7CiAKIAotCiAJLyogR2V0IHRoZSBkZXRlY3RlZCBwaHkgYWRkcmVzcyAqLwogCXBoeWFkZHIgPSBTTUNfUEhZX0FERFI7CiAKQEAgLTEzNTgsMzYgKzEzNDksMzYgQEAKIHN0YXRpYyB2b2lkIHByaW50X3BhY2tldCggYnl0ZSAqIGJ1ZiwgaW50IGxlbmd0aCApCiB7CiAjaWYgMAotICAgICAgICBpbnQgaTsKLSAgICAgICAgaW50IHJlbWFpbmRlcjsKLSAgICAgICAgaW50IGxpbmVzOworCWludCBpOworCWludCByZW1haW5kZXI7CisJaW50IGxpbmVzOwogCi0gICAgICAgIHByaW50ZigiUGFja2V0IG9mIGxlbmd0aCAlZCBcbiIsIGxlbmd0aCApOworCXByaW50ZigiUGFja2V0IG9mIGxlbmd0aCAlZCBcbiIsIGxlbmd0aCApOwogCiAjaWYgU01DX0RFQlVHID4gMwotICAgICAgICBsaW5lcyA9IGxlbmd0aCAvIDE2OwotICAgICAgICByZW1haW5kZXIgPSBsZW5ndGggJSAxNjsKKwlsaW5lcyA9IGxlbmd0aCAvIDE2OworCXJlbWFpbmRlciA9IGxlbmd0aCAlIDE2OwogCi0gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbGluZXMgOyBpICsrICkgewotICAgICAgICAgICAgICAgIGludCBjdXI7CisJZm9yICggaSA9IDA7IGkgPCBsaW5lcyA7IGkgKysgKSB7CisJCWludCBjdXI7CiAKLSAgICAgICAgICAgICAgICBmb3IgKCBjdXIgPSAwOyBjdXIgPCA4OyBjdXIgKysgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBieXRlIGEsIGI7CisJCWZvciAoIGN1ciA9IDA7IGN1ciA8IDg7IGN1ciArKyApIHsKKwkJCWJ5dGUgYSwgYjsKIAotICAgICAgICAgICAgICAgICAgICAgICAgYSA9ICooYnVmICsrICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gKihidWYgKysgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTAyeCUwMnggIiwgYSwgYiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICggaSA9IDA7IGkgPCByZW1haW5kZXIvMiA7IGkrKyApIHsKLSAgICAgICAgICAgICAgICBieXRlIGEsIGI7CisJCQlhID0gKihidWYgKysgKTsKKwkJCWIgPSAqKGJ1ZiArKyApOworCQkJcHJpbnRmKCIlMDJ4JTAyeCAiLCBhLCBiICk7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCX0KKwlmb3IgKCBpID0gMDsgaSA8IHJlbWFpbmRlci8yIDsgaSsrICkgeworCQlieXRlIGEsIGI7CiAKLSAgICAgICAgICAgICAgICBhID0gKihidWYgKysgKTsKLSAgICAgICAgICAgICAgICBiID0gKihidWYgKysgKTsKLSAgICAgICAgICAgICAgICBwcmludGYoIiUwMnglMDJ4ICIsIGEsIGIgKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIlxuIik7CisJCWEgPSAqKGJ1ZiArKyApOworCQliID0gKihidWYgKysgKTsKKwkJcHJpbnRmKCIlMDJ4JTAyeCAiLCBhLCBiICk7CisJfQorCXByaW50ZigiXG4iKTsKICNlbmRpZgogI2VuZGlmCiB9CkBAIC0xNDEzLDQ1ICsxNDA0LDQ1IEBACiB7CiAgICAgaW50IGVudl9zaXplLCByb21fdmFsaWQsIGVudl9wcmVzZW50ID0gMCwgcmVnOwogICAgIGNoYXIgKnMgPSBOVUxMLCAqZSwgKnZfbWFjLCBlc1tdID0gIjExOjIyOjMzOjQ0OjU1OjY2IjsKLSAgICB1Y2hhciBzX2Vudl9tYWNbNjRdLCB2X2Vudl9tYWNbNl0sIHZfcm9tX21hY1s2XTsgCisgICAgdWNoYXIgc19lbnZfbWFjWzY0XSwgdl9lbnZfbWFjWzZdLCB2X3JvbV9tYWNbNl07CiAKLSAgICBlbnZfc2l6ZSA9IGdldGVudl9yICgiZXRoYWRkciIsIHNfZW52X21hYywgc2l6ZW9mIChzX2Vudl9tYWMpKTsgCisgICAgZW52X3NpemUgPSBnZXRlbnZfciAoImV0aGFkZHIiLCBzX2Vudl9tYWMsIHNpemVvZiAoc19lbnZfbWFjKSk7CiAgICAgaWYgKChlbnZfc2l6ZSA+IDApICYmIChlbnZfc2l6ZSA8IHNpemVvZihlcykpKSB7ICAvKiBleGl0IGlmIGVudiBpcyBiYWQgKi8KLSAgICAgICAgcHJpbnRmKCJcbioqKiBFUlJPUjogZXRoYWRkciBpcyBub3Qgc2V0IHByb3Blcmx5ISFcbiIpOwotICAgICAgICByZXR1cm4oLTEpOworCXByaW50ZigiXG4qKiogRVJST1I6IGV0aGFkZHIgaXMgbm90IHNldCBwcm9wZXJseSEhXG4iKTsKKwlyZXR1cm4oLTEpOwogICAgIH0KLSAgICAKKwogICAgIGlmKGVudl9zaXplID4gMCl7Ci0gICAgICAgIGVudl9wcmVzZW50ID0gMTsKLSAgICAgICAgcyA9IHNfZW52X21hYzsKKwllbnZfcHJlc2VudCA9IDE7CisJcyA9IHNfZW52X21hYzsKICAgICB9Ci0gICAgICAgIAorCiAgICAgZm9yIChyZWcgPSAwOyByZWcgPCA2OyArK3JlZykgeyAgICAgLyogdHVybiBzdHJpbmcgaW50byBtYWMgdmFsdWUgKi8KLSAgICAgICAgdl9lbnZfbWFjW3JlZ10gPSBzID8gc2ltcGxlX3N0cnRvdWwgKHMsICZlLCAxNikgOiAwOyAKLSAgICAgICAgaWYgKHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHMgPSAoKmUpID8gZSArIDEgOiBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwl2X2Vudl9tYWNbcmVnXSA9IHMgPyBzaW1wbGVfc3RydG91bCAocywgJmUsIDE2KSA6IDA7CisJaWYgKHMpCisJICAgIHMgPSAoKmUpID8gZSArIDEgOiBlOwogICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcm9tX3ZhbGlkID0gZ2V0X3JvbV9tYWModl9yb21fbWFjKTsgLyogZ2V0IFJPTSBtYWMgdmFsdWUgaWYgYW55ICovICAgCi0gICAgCisKKyAgICByb21fdmFsaWQgPSBnZXRfcm9tX21hYyh2X3JvbV9tYWMpOyAvKiBnZXQgUk9NIG1hYyB2YWx1ZSBpZiBhbnkgKi8KKwogICAgIGlmKCFlbnZfcHJlc2VudCl7ICAgICAgICAgICAgICAgICAgIC8qIGlmIE5PIGVudiAqLwotICAgICAgICBpZihyb21fdmFsaWQpeyAgICAgICAgICAgICAgICAgIC8qIGJ1dCBST00gaXMgdmFsaWQgKi8KLSAgICAgICAgICAgIHZfbWFjID0gdl9yb21fbWFjOwotICAgICAgICAgICAgc3ByaW50ZiAoc19lbnZfbWFjLCAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlgiLCB2X21hY1swXSwgCi0gICAgICAgICAgICAgICAgICAgICB2X21hY1sxXSAsdl9tYWNbMl0sIHZfbWFjWzNdLHZfbWFjWzRdLCB2X21hY1s1XSkgOwotICAgICAgICAgICAgc2V0ZW52ICgiZXRoYWRkciIsIHNfZW52X21hYyk7IAotICAgICAgICB9ZWxzZXsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGVudiwgYmFkIFJPTSAqLwotICAgICAgICAgICAgcHJpbnRmKCJcbioqKiBFUlJPUjogZXRoYWRkciBpcyBOT1Qgc2V0ICEhXG4iKTsKLSAgICAgICAgICAgIHJldHVybigtMSk7Ci0gICAgICAgIH0KKwlpZihyb21fdmFsaWQpeyAgICAgICAgICAgICAgICAgIC8qIGJ1dCBST00gaXMgdmFsaWQgKi8KKwkgICAgdl9tYWMgPSB2X3JvbV9tYWM7CisJICAgIHNwcmludGYgKHNfZW52X21hYywgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiwgdl9tYWNbMF0sCisJCSAgICAgdl9tYWNbMV0gLHZfbWFjWzJdLCB2X21hY1szXSx2X21hY1s0XSwgdl9tYWNbNV0pIDsKKwkgICAgc2V0ZW52ICgiZXRoYWRkciIsIHNfZW52X21hYyk7CisJfWVsc2V7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBlbnYsIGJhZCBST00gKi8KKwkgICAgcHJpbnRmKCJcbioqKiBFUlJPUjogZXRoYWRkciBpcyBOT1Qgc2V0ICEhXG4iKTsKKwkgICAgcmV0dXJuKC0xKTsKKwl9CiAgICAgfWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ29vZCBlbnYsIGRvbid0IGNhcmUgUk9NICovCiAgICAgICB2X21hYyA9IHZfZW52X21hYzsgICAgICAgICAgICAgICAgLyogYWx3YXlzIHVzZSBhIGdvb2QgZW52IG92ZXIgYSBST00gKi8KLSAgIAorCiAgICAgaWYoZW52X3ByZXNlbnQgJiYgcm9tX3ZhbGlkKSAgICAgICAgLyogaWYgYm90aCBlbnYgYW5kIFJPTSBhcmUgZ29vZCAqLwotICAgICAgICBpZihtZW1jbXAodl9lbnZfbWFjLCB2X3JvbV9tYWMsIDYpICE9IDApewotICAgICAgICAgICAgcHJpbnRmKCJcbioqKiBXYXJuaW5nOiBFbnZpcm9ubWVudCBhbmQgUk9NIE1BQyBhZGRyZXNzZXMgZG9uJ3QgbWF0Y2hcbiIpOwotICAgICAgICAgICAgcHJpbnRmKCIqKiogICAgICAgICAgVXNpbmcgRW52aXJvbm1lbnQgTUFDXG4iKTsKLSAgICAgICAgfQorCWlmKG1lbWNtcCh2X2Vudl9tYWMsIHZfcm9tX21hYywgNikgIT0gMCl7CisJICAgIHByaW50ZigiXG4qKiogV2FybmluZzogRW52aXJvbm1lbnQgYW5kIFJPTSBNQUMgYWRkcmVzc2VzIGRvbid0IG1hdGNoXG4iKTsKKwkgICAgcHJpbnRmKCIqKiogICAgICAgICAgVXNpbmcgRW52aXJvbm1lbnQgTUFDXG4iKTsKKwl9CiAgICAgbWVtY3B5IChiZC0+YmlfZW5ldGFkZHIsIHZfbWFjLCA2KTsgLyogdXBkYXRlIGdsb2JhbCBhZGRyZXNzIHRvIG1hdGNoIGVudiAoYWxsb3dzIGVudiBjaGFuZ2luZykgKi8KICAgICBzbWNfc2V0X21hY19hZGRyKHZfbWFjKTsgICAgICAgICAgICAvKiB1c2Ugb2xkIGZ1bmN0aW9uIHRvIHVwZGF0ZSBzbWMgZGVmYXVsdCAqLwogICAgIHJldHVybigwKTsKQEAgLTE0NjAsNyArMTQ1MSw3IEBACiBpbnQgZ2V0X3JvbV9tYWMoY2hhciAqdl9yb21fbWFjKQogewogICAgIGludCBpc19yb21fcHJlc2VudCA9IDA7Ci0jaWZkZWYgSEFSRENPREVfTUFDICAvKiB1c2VkIGZvciB0ZXN0aW5nIG9yIHRvIHN1cHJlc3MgcnVuIHRpbWUgd2FybmluZ3MgKi8gICAgCisjaWZkZWYgSEFSRENPREVfTUFDICAvKiB1c2VkIGZvciB0ZXN0aW5nIG9yIHRvIHN1cHJlc3MgcnVuIHRpbWUgd2FybmluZ3MgKi8KICAgICBjaGFyIGh3X21hY19hZGRyW10gPSB7MHgwMiwgMHg4MCwgMHhhZCwgMHgyMCwgMHgzMSwgMHhiOH07CiAKICAgICBtZW1jcHkgKHZfcm9tX21hYywgaHdfbWFjX2FkZHIsIDYpOwpAQCAtMTQ2OCwxMiArMTQ1OSwxMiBAQAogI2Vsc2UKICAgICBpZihpc19yb21fcHJlc2VudCkKICAgICB7Ci0gICAgICAgIC8qIGlmIGVlcHJvbSBjb250ZW50cyBhcmUgdmFsaWQKLSAgICAgICAgICogICBleHRyYWN0IG1hYyBhZGRyZXNzIGludG8gaHdfbWFjX2FkZHIsIDggb3IgMTYgYml0IGFjY2Vzc2VzCi0gICAgICAgICAqICAgbWVtY3B5ICh2X3JvbV9tYWMsIGhjX21hY19hZGRyLCA2KTsgCi0gICAgICAgICAqICAgcmV0dXJuKDEpOwotICAgICAgICAgKi8gIAotICAgIH0gICAgICAgIAorCS8qIGlmIGVlcHJvbSBjb250ZW50cyBhcmUgdmFsaWQKKwkgKiAgIGV4dHJhY3QgbWFjIGFkZHJlc3MgaW50byBod19tYWNfYWRkciwgOCBvciAxNiBiaXQgYWNjZXNzZXMKKwkgKiAgIG1lbWNweSAodl9yb21fbWFjLCBoY19tYWNfYWRkciwgNik7CisJICogICByZXR1cm4oMSk7CisJICovCisgICAgfQogICAgIG1lbXNldCh2X3JvbV9tYWMsIDAsIDYpOwogICAgIHJldHVybigwKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zbWM5MTExMS5oIGIvZHJpdmVycy9zbWM5MTExMS5oCmluZGV4IDNhYzBhMDMuLjRlZmEyNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc21jOTExMTEuaAorKysgYi9kcml2ZXJzL3NtYzkxMTExLmgKQEAgLTU3NCw3ICs1NzQsNiBAQAogLyogVXNlcyB0aGUgc2FtZSBiaXQgZGVmaW5pdGlvbnMgYXMgUEhZX0lOVF9SRUcgKi8KIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC4gIEkgZGVmaW5lIHNvbWUgbWFjcm9zIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIHNvbWV3aGF0IGNvbW1vbgogIC4gb3Igc2xpZ2h0bHkgY29tcGxpY2F0ZWQsIHJlcGVhdGVkIHRhc2tzLgpAQCAtNjE2LDQgKzYxNSwzIEBACiAJSU1fTURJTlQpCiAKICNlbmRpZiAgLyogX1NNQ185MTExMV9IXyAqLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NtaUx5bnhFTS5jIGIvZHJpdmVycy9zbWlMeW54RU0uYwppbmRleCA3NWQ1YTMxLi5jMmI5OGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NtaUx5bnhFTS5jCisrKyBiL2RyaXZlcnMvc21pTHlueEVNLmMKQEAgLTU0LDkgKzU0LDkgQEAKICAqLwogI2RlZmluZSBWSURFT19NT0RFUyAgICAgICAgICAgICA3CiAjZGVmaW5lIERVQUxfODAwXzYwMCAgICAgICAgICAgIDAgICAvKiBTTUk3MTA6VkdBMTo3NUh6ICAgICAocGl0Y2g9MTYwMCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICBWR0EyOjYwLzEyMEh6IChwaXRjaD0xNjAwKSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU01JODEwOlZHQTE6NzVIeiAgICAgKHBpdGNoPTE2MDApICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgVkdBMjo3NUh6ICAgICAocGl0Y2g9MTYwMCkgKi8KKwkJCQkgICAgLyogICAgICAgIFZHQTI6NjAvMTIwSHogKHBpdGNoPTE2MDApICovCisJCQkJICAgIC8qIFNNSTgxMDpWR0ExOjc1SHogICAgIChwaXRjaD0xNjAwKSAqLworCQkJCSAgICAvKiAgICAgICAgVkdBMjo3NUh6ICAgICAocGl0Y2g9MTYwMCkgKi8KICNkZWZpbmUgRFVBTF8xMDI0Xzc2OCAgICAgICAgICAgMSAgIC8qIFZHQTE6NzVIeiBWR0EyOjczSHogKHBpdGNoPTIwNDgpICAqLwogI2RlZmluZSBTSU5HTEVfODAwXzYwMCAgICAgICAgICAyICAgLyogVkdBMTo3NUh6IChwaXRjaD04MDApICAgICAgICAgICAgICovCiAjZGVmaW5lIFNJTkdMRV8xMDI0Xzc2OCAgICAgICAgIDMgICAvKiBWR0ExOjc1SHogKHBpdGNoPTEwMjQpICAgICAgICAgICAgKi8KQEAgLTEyNyw3ICsxMjcsNiBAQAogfSBTbWlDYXB0dXJlUG9ydDsKIAogCi0KIC8qCiAgKiBSZWdpc3RlciB2YWx1ZXMgZm9yIGNvbW1vbiB2aWRlbyBtb2RlcwogICovCkBAIC01MTQsOCArNTEzLDggQEAKIAogICAgIGZvciAoaT0wOyBpPHRhYlNpemU7IGkrPTIpCiAgICAgewotICAgICAgICBvdXQ4IChpUmVnLCByZWdUYWJbaV0pOwotICAgICAgICBvdXQ4IChkUmVnLCByZWdUYWJbaSsxXSk7CisJb3V0OCAoaVJlZywgcmVnVGFiW2ldKTsKKwlvdXQ4IChkUmVnLCByZWdUYWJbaSsxXSk7CiAgICAgfQogfQogCkBAIC01NjgsMzkgKzU2NywzOSBAQAogCiAgICAgLyogZGF0YSB3aWR0aCBhbmQgb2Zmc2V0ICovCiAgICAgb3V0MzJyICgocEdELT52cHJCYXNlICsgMHgwMDEwKSwKLSAgICAgICAgKChwVlAtPm9mZnNldCAgIC8gOCAqIHBHRC0+Z2RmQnl0ZXNQUCkgPDwgMTYpIHwKLSAgICAgICAgIChwR0QtPnBsblNpemVYIC8gOCAqIHBHRC0+Z2RmQnl0ZXNQUCkpOworCSgocFZQLT5vZmZzZXQgICAvIDggKiBwR0QtPmdkZkJ5dGVzUFApIDw8IDE2KSB8CisJIChwR0QtPnBsblNpemVYIC8gOCAqIHBHRC0+Z2RmQnl0ZXNQUCkpOwogCiAgICAgLyogdmlkZW8gd2luZG93IDEgKi8KICAgICBvdXQzMnIgKChwR0QtPnZwckJhc2UgKyAweDAwMTQpLAotICAgICAgICAoKHBWV2luLT50b3AgPDwgMTYpIHwgcFZXaW4tPmxlZnQpKTsKKwkoKHBWV2luLT50b3AgPDwgMTYpIHwgcFZXaW4tPmxlZnQpKTsKIAogICAgIG91dDMyciAoKHBHRC0+dnByQmFzZSArIDB4MDAxOCksCi0gICAgICAgICgocFZXaW4tPmJvdHRvbSA8PCAxNikgfCBwVldpbi0+cmlnaHQpKTsKKwkoKHBWV2luLT5ib3R0b20gPDwgMTYpIHwgcFZXaW4tPnJpZ2h0KSk7CiAKICAgICBvdXQzMnIgKChwR0QtPnZwckJhc2UgKyAweDAwMWMpLCBwVldpbi0+c3JjU3RhcnQgLyA4KTsKIAogICAgIG91dDMyciAoKHBHRC0+dnByQmFzZSArIDB4MDAyMCksCi0gICAgICAgICgoKHBWV2luLT5vZmZzZXQgLyA4KSA8PCAxNikgfCAocFZXaW4tPndpZHRoIC8gOCkpKTsKKwkoKChwVldpbi0+b2Zmc2V0IC8gOCkgPDwgMTYpIHwgKHBWV2luLT53aWR0aCAvIDgpKSk7CiAKICAgICBvdXQzMnIgKChwR0QtPnZwckJhc2UgKyAweDAwMjQpLAotICAgICAgICAoKChwVldpbi0+aFN0cmV0Y2gpIDw8IDgpIHwgcFZXaW4tPnZTdHJldGNoKSk7CisJKCgocFZXaW4tPmhTdHJldGNoKSA8PCA4KSB8IHBWV2luLT52U3RyZXRjaCkpOwogCiAgICAgLyogdmlkZW8gd2luZG93IDIgKi8KICAgICBvdXQzMnIgKChwR0QtPnZwckJhc2UgKyAweDAwMjgpLAotICAgICAgICAoKHBWV2luLT50b3AgPDwgMTYpIHwgcFZXaW4tPmxlZnQpKTsKKwkoKHBWV2luLT50b3AgPDwgMTYpIHwgcFZXaW4tPmxlZnQpKTsKIAogICAgIG91dDMyciAoKHBHRC0+dnByQmFzZSArIDB4MDAyYyksCi0gICAgICAgICgocFZXaW4tPmJvdHRvbSA8PCAxNikgfCBwVldpbi0+cmlnaHQpKTsKKwkoKHBWV2luLT5ib3R0b20gPDwgMTYpIHwgcFZXaW4tPnJpZ2h0KSk7CiAKICAgICBvdXQzMnIgKChwR0QtPnZwckJhc2UgKyAweDAwMzApLAotICAgICAgICBwVldpbi0+c3JjU3RhcnQgLyA4KTsKKwlwVldpbi0+c3JjU3RhcnQgLyA4KTsKIAogICAgIG91dDMyciAoKHBHRC0+dnByQmFzZSArIDB4MDAzNCksCi0gICAgICAgICgoKHBWV2luLT5vZmZzZXQgLyA4KSA8PCAxNikgfCAocFZXaW4tPndpZHRoIC8gOCkpKTsKKwkoKChwVldpbi0+b2Zmc2V0IC8gOCkgPDwgMTYpIHwgKHBWV2luLT53aWR0aCAvIDgpKSk7CiAKICAgICBvdXQzMnIgKChwR0QtPnZwckJhc2UgKyAweDAwMzgpLAotICAgICAgICAoKChwVldpbi0+aFN0cmV0Y2gpIDw8IDgpIHwgcFZXaW4tPnZTdHJldGNoKSk7CisJKCgocFZXaW4tPmhTdHJldGNoKSA8PCA4KSB8IHBWV2luLT52U3RyZXRjaCkpOwogCiAgICAgLyogZmlmbyBwcmlvIGNvbnRyb2wgKi8KICAgICBvdXQzMnIgKChwR0QtPnZwckJhc2UgKyAweDAwNTQpLCBwVlAtPmZpZm9QcmlvKTsKQEAgLTYzNCwzMSArNjMzLDMxIEBACiAgICAgLyogc2V0IGNsaXAgcmVjdCAqLwogICAgIG91dDMyciAoKHBHRC0+ZHByQmFzZSArIDB4MDAyYyksIDApOwogICAgIG91dDMyciAoKHBHRC0+ZHByQmFzZSArIDB4MDAzMCksCi0gICAgICAgICgocEdELT53aW5TaXplWTw8MTYpIHwgcEdELT53aW5TaXplWCAqIHBHRC0+Z2RmQnl0ZXNQUCApKTsKKwkoKHBHRC0+d2luU2l6ZVk8PDE2KSB8IHBHRC0+d2luU2l6ZVggKiBwR0QtPmdkZkJ5dGVzUFAgKSk7CiAKICAgICAvKiBzcmMgcm93IHBpdGNoICovCiAgICAgdmFsID0gMHhmZmZmMDAwMCAmIChpbjMyciAoKHBHRC0+ZHByQmFzZSArIDB4MDAxMCkpKTsKICAgICBvdXQzMnIgKChwR0QtPmRwckJhc2UgKyAweDAwMTApLAotICAgICAgICAodmFsIHwgcEdELT5wbG5TaXplWCAqIHBHRC0+Z2RmQnl0ZXNQUCkpOworCSh2YWwgfCBwR0QtPnBsblNpemVYICogcEdELT5nZGZCeXRlc1BQKSk7CiAKICAgICAvKiBkc3Qgcm93IHBpdGNoICovCiAgICAgdmFsID0gMHgwMDAwZmZmZiAmIChpbjMyciAoKHBHRC0+ZHByQmFzZSArIDB4MDAxMCkpKTsKICAgICBvdXQzMnIgKChwR0QtPmRwckJhc2UgKyAweDAwMTApLAotICAgICAgICAoKChwR0QtPnBsblNpemVYICogcEdELT5nZGZCeXRlc1BQKTw8MTYpIHwgdmFsKSk7CisJKCgocEdELT5wbG5TaXplWCAqIHBHRC0+Z2RmQnl0ZXNQUCk8PDE2KSB8IHZhbCkpOwogCiAgICAgLyogd2luZG93IHdpZHRoIHNyYy9kc3QgKi8KICAgICBvdXQzMnIgKChwR0QtPmRwckJhc2UgKyAweDAwM2MpLAotICAgICAgICAoKChwR0QtPnBsblNpemVYICogcEdELT5nZGZCeXRlc1BQICYgMHgwZmZmKTw8MTYpIHwKLSAgICAgICAgICAocEdELT5wbG5TaXplWCAqIHBHRC0+Z2RmQnl0ZXNQUCAmIDB4MGZmZikpKTsKKwkoKChwR0QtPnBsblNpemVYICogcEdELT5nZGZCeXRlc1BQICYgMHgwZmZmKTw8MTYpIHwKKwkgIChwR0QtPnBsblNpemVYICogcEdELT5nZGZCeXRlc1BQICYgMHgwZmZmKSkpOwogICAgIG91dDE2ciAoKHBHRC0+ZHByQmFzZSArIDB4MDAxZSksIDB4MDAwMCk7CiAKICAgICAvKiBzcmMgYmFzZSBhZHJzICovCiAgICAgb3V0MzJyICgocEdELT5kcHJCYXNlICsgMHgwMDQwKSwKLSAgICAgICAgKCgocEdELT5mcmFtZUFkcnMvOCkgJiAweDAwMGZmZmZmKSkpOworCSgoKHBHRC0+ZnJhbWVBZHJzLzgpICYgMHgwMDBmZmZmZikpKTsKIAogICAgIC8qIGRzdCBiYXNlIGFkcnMgKi8KICAgICBvdXQzMnIgKChwR0QtPmRwckJhc2UgKyAweDAwNDQpLAotICAgICAgICAoKChwR0QtPmZyYW1lQWRycy84KSAmIDB4MDAwZmZmZmYpKSk7CisJKCgocEdELT5mcmFtZUFkcnMvOCkgJiAweDAwMGZmZmZmKSkpOwogCiAgICAgLyogZm9yZWdyb3VuZCBjb2xvciAqLwogICAgIG91dDMyciAoKHBHRC0+ZHByQmFzZSArIDB4MDAxNCksIHBHRC0+ZmcpOwpAQCAtNzAyLDI5ICs3MDEsMjkgQEAKICAgICB1bnNpZ25lZCBpbnQgZ2RmVGFiW10gPSB7IDEsIDIsIDIsIDQsIDMsIDEgfTsKICAgICBjaGFyICpwZW52OwogICAgIGNoYXIgKmdkZk1vZGVzW10gPQotICAgICAgICAgICAgewotICAgICAgICAgICAgIjggQml0IEluZGV4IENvbG9yIiwKLSAgICAgICAgICAgICIxNSBCaXQgNS01LTUgUkdCIiwKLSAgICAgICAgICAgICIxNiBCaXQgNS02LTUgUkdCIiwKLSAgICAgICAgICAgICIzMiBCaXQgWC04LTgtOCBSR0IiLAotICAgICAgICAgICAgIjI0IEJpdCA4LTgtOCBSR0IiLAotICAgICAgICAgICAgIjggQml0IDMtMy0yIFJHQiIKLSAgICAgICAgICAgIH07CisJICAgIHsKKwkgICAgIjggQml0IEluZGV4IENvbG9yIiwKKwkgICAgIjE1IEJpdCA1LTUtNSBSR0IiLAorCSAgICAiMTYgQml0IDUtNi01IFJHQiIsCisJICAgICIzMiBCaXQgWC04LTgtOCBSR0IiLAorCSAgICAiMjQgQml0IDgtOC04IFJHQiIsCisJICAgICI4IEJpdCAzLTMtMiBSR0IiCisJICAgIH07CiAgICAgaW50IHZnYU1vZGVzWzE2XVsyXSA9Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB7NzY5LCAtMX0sIHs3NzEsIDB4MDAwMDJ9LCB7NzczLCAweDAwMDAzfSwgezc3NSwgMHgwMDAwNH0sCi0gICAgICAgICAgICB7Nzg0LCAtMX0sIHs3ODcsIDB4MTAwMDJ9LCB7NzkwLCAweDEwMDAzfSwgezc5MywgMHgxMDAwNH0sCi0gICAgICAgICAgICB7Nzg1LCAtMX0sIHs3ODgsIDB4MjAwMDJ9LCB7NzkxLCAweDIwMDAzfSwgezc5NCwgMHgyMDAwNH0sCi0gICAgICAgICAgICB7Nzg2LCAtMX0sIHs3ODksIDB4NDAwMDJ9LCB7NzkyLCAweDQwMDAzfSwgezc5NSwgMHg0MDAwNH0KLSAgICAgICAgICAgIH07CisJICAgIHsKKwkgICAgezc2OSwgLTF9LCB7NzcxLCAweDAwMDAyfSwgezc3MywgMHgwMDAwM30sIHs3NzUsIDB4MDAwMDR9LAorCSAgICB7Nzg0LCAtMX0sIHs3ODcsIDB4MTAwMDJ9LCB7NzkwLCAweDEwMDAzfSwgezc5MywgMHgxMDAwNH0sCisJICAgIHs3ODUsIC0xfSwgezc4OCwgMHgyMDAwMn0sIHs3OTEsIDB4MjAwMDN9LCB7Nzk0LCAweDIwMDA0fSwKKwkgICAgezc4NiwgLTF9LCB7Nzg5LCAweDQwMDAyfSwgezc5MiwgMHg0MDAwM30sIHs3OTUsIDB4NDAwMDR9CisJICAgIH07CiAKICAgICAvKiBTZWFyY2ggZm9yIHZpZGVvIGNoaXAgKi8KICAgICBwcmludGYoIlZpZGVvOiAiKTsKIAogICAgIGlmICgoZGV2YnVzZm4gPSBwY2lfZmluZF9kZXZpY2VzKHN1cHBvcnRlZCwgMCkpIDwgMCkKICAgICB7Ci0gICAgICAgIHByaW50ZiAoIkNvbnRyb2xsZXIgbm90IGZvdW5kICFcbiIpOwotICAgICAgICByZXR1cm4gKE5VTEwpOworCXByaW50ZiAoIkNvbnRyb2xsZXIgbm90IGZvdW5kICFcbiIpOworCXJldHVybiAoTlVMTCk7CiAgICAgfQogCiAgICAgLyogUENJIHNldHVwICovCkBAIC03MzUsMjkgKzczNCwyOSBAQAogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgdmlkZW8gY29udHJvbGxlciAqLwogICAgIGlmICgocGVudiA9IGdldGVudiAoInZpZGVvbW9kZSIpKSAhPSBOVUxMKQotICAgICAgICB2aWRlb21vZGUgPSAoaW50KXNpbXBsZV9zdHJ0b3VsIChwZW52LCBOVUxMLCAxNik7CisJdmlkZW9tb2RlID0gKGludClzaW1wbGVfc3RydG91bCAocGVudiwgTlVMTCwgMTYpOwogICAgIGVsc2UKLSAgICAgICAgdmlkZW9tb2RlID0gMHgzMDM7ICAgICAgICAgICAgICAgICAgICAvKiBEZWZhdWx0IDgwMHg2MDAgOCBiaXQgaW5kZXggY29sb3IgKi8KKwl2aWRlb21vZGUgPSAweDMwMzsgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgODAweDYwMCA4IGJpdCBpbmRleCBjb2xvciAqLwogCiAgICAgLyogQ29tcGFyZSB3aXRoIGNvbW1vbiB2Z2EgbW9kZSBudW1iZXJzICovCiAgICAgZm9yIChpPTA7IGk8MTY7IGkrKykKICAgICB7Ci0gICAgICAgIGlmICh2Z2FNb2Rlc1tpXVswXSA9PSB2aWRlb21vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2Z2FNb2Rlc1tpXVsxXSA9PSAtMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIlZpZGVvbW9kZSBub3Qgc3VwcG9ydGVkICFcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAoTlVMTCk7ICAgICAgICAgICAgICAgIC8qIG1vZGUgbm90IHN1cHBvcnRlZCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcEdELT5tb2RlID0gdmdhTW9kZXNbaV1bMV07ICAgICAgICAvKiB1c2UgZHJpdmVyIGludC4gbW9kZSBudW1iZXIgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJaWYgKHZnYU1vZGVzW2ldWzBdID09IHZpZGVvbW9kZSkKKwl7CisJICAgIGlmICh2Z2FNb2Rlc1tpXVsxXSA9PSAtMSkKKwkgICAgeworCQlwcmludGYoIlZpZGVvbW9kZSBub3Qgc3VwcG9ydGVkICFcbiIpOworCQlyZXR1cm4gKE5VTEwpOyAgICAgICAgICAgICAgICAvKiBtb2RlIG5vdCBzdXBwb3J0ZWQgKi8KKwkgICAgfQorCSAgICBwR0QtPm1vZGUgPSB2Z2FNb2Rlc1tpXVsxXTsgICAgICAgIC8qIHVzZSBkcml2ZXIgaW50LiBtb2RlIG51bWJlciAqLworCSAgICBicmVhazsKKwl9CiAgICAgfQogCiAgICAgLyogRXh0cmFjdCBncmFwaGljIGRhdGEgZm9ybWF0ICovCiAgICAgcEdELT5nZGZJbmRleCA9IChwR0QtPm1vZGUgJiAweDAwMDcwMDAwKSA+PiAxNjsKICAgICBpZiAocEdELT5nZGZJbmRleCA+IDUpCi0gICAgICAgIHBHRC0+Z2RmSW5kZXggPSAwOworCXBHRC0+Z2RmSW5kZXggPSAwOwogICAgIHBHRC0+Z2RmQnl0ZXNQUCA9IGdkZlRhYltwR0QtPmdkZkluZGV4XTsKIAogICAgIC8qIEV4dHJhY3QgZ3JhcGhpYyByZXNvbHV0aW9uICovCkBAIC03NjYsNzEgKzc2NSw3MSBAQAogICAgIC8qIEV4aXQgZm9yIG5vdCBzdXBwb3J0ZWQgcmVzb2x1dGlvbnMgKi8KICAgICBpZiAoKChwR0QtPm1vZGU9PURVQUxfODAwXzYwMCkgfHwgKHBHRC0+bW9kZT09RFVBTF8xMDI0Xzc2OCkpICYmIChwR0QtPmdkZkJ5dGVzUFAgPiAxKSkKICAgICB7Ci0gICAgICAgIHByaW50ZiAoIkR1YWwgc2NyZWVuIGZvciAxQlBQIG9ubHkgIVxuIik7Ci0gICAgICAgIHJldHVybiAoTlVMTCk7CisJcHJpbnRmICgiRHVhbCBzY3JlZW4gZm9yIDFCUFAgb25seSAhXG4iKTsKKwlyZXR1cm4gKE5VTEwpOwogICAgIH0KIAogICAgIGlmICgocEdELT5tb2RlPT1TSU5HTEVfMTI4MF8xMDI0KSAmJiAocEdELT5nZGZCeXRlc1BQPT00KSkKICAgICB7Ci0gICAgICAgIHByaW50ZiAoIk91dCBvZiBtZW1vcnkgIVxuIik7Ci0gICAgICAgIHJldHVybiAoTlVMTCk7CisJcHJpbnRmICgiT3V0IG9mIG1lbW9yeSAhXG4iKTsKKwlyZXR1cm4gKE5VTEwpOwogICAgIH0KIAogICAgIC8qIFNldCBncmFwaGljIHBhcmFtZXRlcnMgKi8KICAgICBzd2l0Y2ggKHBHRC0+bW9kZSkKICAgICB7CiAgICAgY2FzZSBEVUFMXzgwMF82MDA6Ci0gICAgICAgICAgICBwR0QtPndpblNpemVYID0gODAwOwotICAgICAgICAgICAgcEdELT53aW5TaXplWSA9IDYwMDsKLSAgICAgICAgICAgIHBHRC0+cGxuU2l6ZVggPSAxNjAwOwotICAgICAgICAgICAgcEdELT5wbG5TaXplWSA9IDYwMDsKLSAgICAgICAgICAgIHNwcmludGYgKHBHRC0+bW9kZUlkZW50LCAiRHVhbCBTY3JlZW4gODAweDYwMCB3aXRoICVzIiwgZ2RmTW9kZXNbcEdELT5nZGZJbmRleF0pOwotICAgICAgICAgICAgYnJlYWs7CisJICAgIHBHRC0+d2luU2l6ZVggPSA4MDA7CisJICAgIHBHRC0+d2luU2l6ZVkgPSA2MDA7CisJICAgIHBHRC0+cGxuU2l6ZVggPSAxNjAwOworCSAgICBwR0QtPnBsblNpemVZID0gNjAwOworCSAgICBzcHJpbnRmIChwR0QtPm1vZGVJZGVudCwgIkR1YWwgU2NyZWVuIDgwMHg2MDAgd2l0aCAlcyIsIGdkZk1vZGVzW3BHRC0+Z2RmSW5kZXhdKTsKKwkgICAgYnJlYWs7CiAgICAgY2FzZSBEVUFMXzEwMjRfNzY4OgotICAgICAgICAgICAgcEdELT53aW5TaXplWCA9IDEwMjQ7Ci0gICAgICAgICAgICBwR0QtPndpblNpemVZID0gNzY4OwotICAgICAgICAgICAgcEdELT5wbG5TaXplWCA9IDIwNDg7Ci0gICAgICAgICAgICBwR0QtPnBsblNpemVZID0gNzY4OwotICAgICAgICAgICAgc3ByaW50ZiAocEdELT5tb2RlSWRlbnQsICJEdWFsIFNjcmVlbiAxMDI0eDc2OCB3aXRoICVzIiwgZ2RmTW9kZXNbcEdELT5nZGZJbmRleF0pOwotICAgICAgICAgICAgYnJlYWs7CisJICAgIHBHRC0+d2luU2l6ZVggPSAxMDI0OworCSAgICBwR0QtPndpblNpemVZID0gNzY4OworCSAgICBwR0QtPnBsblNpemVYID0gMjA0ODsKKwkgICAgcEdELT5wbG5TaXplWSA9IDc2ODsKKwkgICAgc3ByaW50ZiAocEdELT5tb2RlSWRlbnQsICJEdWFsIFNjcmVlbiAxMDI0eDc2OCB3aXRoICVzIiwgZ2RmTW9kZXNbcEdELT5nZGZJbmRleF0pOworCSAgICBicmVhazsKICAgICBjYXNlIFNJTkdMRV84MDBfNjAwOgotICAgICAgICAgICAgcEdELT53aW5TaXplWCA9IDgwMDsKLSAgICAgICAgICAgIHBHRC0+d2luU2l6ZVkgPSA2MDA7Ci0gICAgICAgICAgICBwR0QtPnBsblNpemVYID0gODAwOwotICAgICAgICAgICAgcEdELT5wbG5TaXplWSA9IDYwMDsKLSAgICAgICAgICAgIHNwcmludGYgKHBHRC0+bW9kZUlkZW50LCAiU2luZ2xlIFNjcmVlbiA4MDB4NjAwIHdpdGggJXMiLCBnZGZNb2Rlc1twR0QtPmdkZkluZGV4XSk7Ci0gICAgICAgICAgICBicmVhazsKKwkgICAgcEdELT53aW5TaXplWCA9IDgwMDsKKwkgICAgcEdELT53aW5TaXplWSA9IDYwMDsKKwkgICAgcEdELT5wbG5TaXplWCA9IDgwMDsKKwkgICAgcEdELT5wbG5TaXplWSA9IDYwMDsKKwkgICAgc3ByaW50ZiAocEdELT5tb2RlSWRlbnQsICJTaW5nbGUgU2NyZWVuIDgwMHg2MDAgd2l0aCAlcyIsIGdkZk1vZGVzW3BHRC0+Z2RmSW5kZXhdKTsKKwkgICAgYnJlYWs7CiAgICAgY2FzZSBTSU5HTEVfMTAyNF83Njg6Ci0gICAgICAgICAgICBwR0QtPndpblNpemVYID0gMTAyNDsKLSAgICAgICAgICAgIHBHRC0+d2luU2l6ZVkgPSA3Njg7Ci0gICAgICAgICAgICBwR0QtPnBsblNpemVYID0gMTAyNDsKLSAgICAgICAgICAgIHBHRC0+cGxuU2l6ZVkgPSA3Njg7Ci0gICAgICAgICAgICBzcHJpbnRmIChwR0QtPm1vZGVJZGVudCwiU2luZ2xlIFNjcmVlbiAxMDI0eDc2OCB3aXRoICVzIiwgZ2RmTW9kZXNbcEdELT5nZGZJbmRleF0pOwotICAgICAgICAgICAgYnJlYWs7CisJICAgIHBHRC0+d2luU2l6ZVggPSAxMDI0OworCSAgICBwR0QtPndpblNpemVZID0gNzY4OworCSAgICBwR0QtPnBsblNpemVYID0gMTAyNDsKKwkgICAgcEdELT5wbG5TaXplWSA9IDc2ODsKKwkgICAgc3ByaW50ZiAocEdELT5tb2RlSWRlbnQsIlNpbmdsZSBTY3JlZW4gMTAyNHg3Njggd2l0aCAlcyIsIGdkZk1vZGVzW3BHRC0+Z2RmSW5kZXhdKTsKKwkgICAgYnJlYWs7CiAgICAgY2FzZSBUVl9NT0RFX0NDSVI6Ci0gICAgICAgICAgICBwR0QtPndpblNpemVYID0gNzIwOwotICAgICAgICAgICAgcEdELT53aW5TaXplWSA9IDU3NjsKLSAgICAgICAgICAgIHBHRC0+cGxuU2l6ZVggPSA3MjA7Ci0gICAgICAgICAgICBwR0QtPnBsblNpemVZID0gNTc2OwotICAgICAgICAgICAgc3ByaW50ZiAocEdELT5tb2RlSWRlbnQsICJUViBNb2RlIENDSVIgd2l0aCAlcyIsIGdkZk1vZGVzW3BHRC0+Z2RmSW5kZXhdKTsKLSAgICAgICAgICAgIGJyZWFrOworCSAgICBwR0QtPndpblNpemVYID0gNzIwOworCSAgICBwR0QtPndpblNpemVZID0gNTc2OworCSAgICBwR0QtPnBsblNpemVYID0gNzIwOworCSAgICBwR0QtPnBsblNpemVZID0gNTc2OworCSAgICBzcHJpbnRmIChwR0QtPm1vZGVJZGVudCwgIlRWIE1vZGUgQ0NJUiB3aXRoICVzIiwgZ2RmTW9kZXNbcEdELT5nZGZJbmRleF0pOworCSAgICBicmVhazsKICAgICBjYXNlIFRWX01PREVfRUlBOgotICAgICAgICAgICAgcEdELT53aW5TaXplWCA9IDcyMDsKLSAgICAgICAgICAgIHBHRC0+d2luU2l6ZVkgPSA0ODQ7Ci0gICAgICAgICAgICBwR0QtPnBsblNpemVYID0gNzIwOwotICAgICAgICAgICAgcEdELT5wbG5TaXplWSA9IDQ4NDsKLSAgICAgICAgICAgIHNwcmludGYgKHBHRC0+bW9kZUlkZW50LCAiVFYgTW9kZSBFSUEgd2l0aCAlcyIsIGdkZk1vZGVzW3BHRC0+Z2RmSW5kZXhdKTsKLSAgICAgICAgICAgIGJyZWFrOworCSAgICBwR0QtPndpblNpemVYID0gNzIwOworCSAgICBwR0QtPndpblNpemVZID0gNDg0OworCSAgICBwR0QtPnBsblNpemVYID0gNzIwOworCSAgICBwR0QtPnBsblNpemVZID0gNDg0OworCSAgICBzcHJpbnRmIChwR0QtPm1vZGVJZGVudCwgIlRWIE1vZGUgRUlBIHdpdGggJXMiLCBnZGZNb2Rlc1twR0QtPmdkZkluZGV4XSk7CisJICAgIGJyZWFrOwogICAgIGNhc2UgU0lOR0xFXzEyODBfMTAyNDoKLSAgICAgICAgICAgIHBHRC0+d2luU2l6ZVggPSAxMjgwOwotICAgICAgICAgICAgcEdELT53aW5TaXplWSA9IDEwMjQ7Ci0gICAgICAgICAgICBwR0QtPnBsblNpemVYID0gMTI4MDsKLSAgICAgICAgICAgIHBHRC0+cGxuU2l6ZVkgPSAxMDI0OwotICAgICAgICAgICAgc3ByaW50ZiAocEdELT5tb2RlSWRlbnQsICJTaW5nbGUgU2NyZWVuIDEyODB4MTAyNCB3aXRoICVzIiwgZ2RmTW9kZXNbcEdELT5nZGZJbmRleF0pOwotICAgICAgICAgICAgYnJlYWs7CisJICAgIHBHRC0+d2luU2l6ZVggPSAxMjgwOworCSAgICBwR0QtPndpblNpemVZID0gMTAyNDsKKwkgICAgcEdELT5wbG5TaXplWCA9IDEyODA7CisJICAgIHBHRC0+cGxuU2l6ZVkgPSAxMDI0OworCSAgICBzcHJpbnRmIChwR0QtPm1vZGVJZGVudCwgIlNpbmdsZSBTY3JlZW4gMTI4MHgxMDI0IHdpdGggJXMiLCBnZGZNb2Rlc1twR0QtPmdkZkluZGV4XSk7CisJICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBwcmludGYoIlZpZGVvbW9kZSBub3Qgc3VwcG9ydGVkICFcbiIpOwotICAgICAgICAgICAgcmV0dXJuIChOVUxMKTsKKwkgICAgcHJpbnRmKCJWaWRlb21vZGUgbm90IHN1cHBvcnRlZCAhXG4iKTsKKwkgICAgcmV0dXJuIChOVUxMKTsKICAgICB9CiAKIApAQCAtODU2LDUxICs4NTUsNTEgQEAKIAogICAgIC8qIFN5dGVtIENvbnRyb2wgUmVnaXN0ZXIgKi8KICAgICBzbWlMb2FkUmVncyAoU01JX0lORFhfQzQsIFNNSV9EQVRBX0M1LAotICAgICAgICAgU01JX1NDUiwgc2l6ZW9mKFNNSV9TQ1IpKTsKKwkgU01JX1NDUiwgc2l6ZW9mKFNNSV9TQ1IpKTsKIAogICAgIC8qIGV4dGVudGVkIENSVCBSZWdpc3RlciAqLwogICAgIHNtaUxvYWRSZWdzIChTTUlfSU5EWF9ENCwgU01JX0RBVEFfRDUsCi0gICAgICAgICBTTUlfRVhUX0NSVFtwR0QtPm1vZGVdLCBzaXplb2YoU01JX0VYVF9DUlQpL1ZJREVPX01PREVTKTsKKwkgU01JX0VYVF9DUlRbcEdELT5tb2RlXSwgc2l6ZW9mKFNNSV9FWFRfQ1JUKS9WSURFT19NT0RFUyk7CiAKICAgICAvKiBTZXF1ZW5jZXIgUmVnaXN0ZXIgKi8KICAgICBzbWlMb2FkUmVncyAoU01JX0lORFhfQzQsIFNNSV9EQVRBX0M1LAotICAgICAgICAgU01JX1NFUVIsIHNpemVvZihTTUlfU0VRUikpOworCSBTTUlfU0VRUiwgc2l6ZW9mKFNNSV9TRVFSKSk7CiAKICAgICAvKiBQb3dlciBDb250cm9sIFJlZ2lzdGVyICovCiAgICAgc21pTG9hZFJlZ3MgKFNNSV9JTkRYX0M0LCBTTUlfREFUQV9DNSwKLSAgICAgICAgIFNNSV9QQ1JbcEdELT5tb2RlXSwgc2l6ZW9mKFNNSV9QQ1IpL1ZJREVPX01PREVTKTsKKwkgU01JX1BDUltwR0QtPm1vZGVdLCBzaXplb2YoU01JX1BDUikvVklERU9fTU9ERVMpOwogCiAgICAgLyogTWVtb3J5IENvbnRyb2wgUmVnaXN0ZXIgKi8KICAgICBzbWlMb2FkUmVncyAoU01JX0lORFhfQzQsIFNNSV9EQVRBX0M1LAotICAgICAgICAgU01JX01DUltwR0QtPm1vZGVdLCBzaXplb2YoU01JX01DUikvVklERU9fTU9ERVMpOworCSBTTUlfTUNSW3BHRC0+bW9kZV0sIHNpemVvZihTTUlfTUNSKS9WSURFT19NT0RFUyk7CiAKICAgICAvKiBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCiAgICAgc21pTG9hZFJlZ3MgKFNNSV9JTkRYX0M0LCBTTUlfREFUQV9DNSwKLSAgICAgICAgIFNNSV9DQ1JbcEdELT5tb2RlXSwgc2l6ZW9mKFNNSV9DQ1IpL1ZJREVPX01PREVTKTsKKwkgU01JX0NDUltwR0QtPm1vZGVdLCBzaXplb2YoU01JX0NDUikvVklERU9fTU9ERVMpOwogCiAgICAgLyogU2hhZG93IFZHQSBSZWdpc3RlciAqLwogICAgIHNtaUxvYWRSZWdzIChTTUlfSU5EWF9ENCwgU01JX0RBVEFfRDUsCi0gICAgICAgICBTTUlfU0hWR0FbcEdELT5tb2RlXSwgc2l6ZW9mKFNNSV9TSFZHQSkvVklERU9fTU9ERVMpOworCSBTTUlfU0hWR0FbcEdELT5tb2RlXSwgc2l6ZW9mKFNNSV9TSFZHQSkvVklERU9fTU9ERVMpOwogCiAgICAgLyogR2VuZXJhbCBQdXJwb3NlIFJlZ2lzdGVyICovCiAgICAgc21pTG9hZFJlZ3MgKFNNSV9JTkRYX0M0LCBTTUlfREFUQV9DNSwKLSAgICAgICAgIFNNSV9HUFJbcEdELT5tb2RlXSwgc2l6ZW9mKFNNSV9HUFIpL1ZJREVPX01PREVTKTsKKwkgU01JX0dQUltwR0QtPm1vZGVdLCBzaXplb2YoU01JX0dQUikvVklERU9fTU9ERVMpOwogCiAgICAgLyogSGFyZHdhcmUgQ3Vzb3IgUmVnaXN0ZXIgKi8KICAgICBzbWlMb2FkUmVncyAoU01JX0lORFhfQzQsIFNNSV9EQVRBX0M1LAotICAgICAgICAgU01JX0hDUltwR0QtPm1vZGVdLCBzaXplb2YoU01JX0hDUikvVklERU9fTU9ERVMpOworCSBTTUlfSENSW3BHRC0+bW9kZV0sIHNpemVvZihTTUlfSENSKS9WSURFT19NT0RFUyk7CiAKICAgICAvKiBGbGF0IFBhbmVsIFJlZ2lzdGVyICovCiAgICAgc21pTG9hZFJlZ3MgKFNNSV9JTkRYX0M0LCBTTUlfREFUQV9DNSwKLSAgICAgICAgIFNNSV9GUFJbcEdELT5tb2RlXSwgc2l6ZW9mKFNNSV9GUFIpL1ZJREVPX01PREVTKTsKKwkgU01JX0ZQUltwR0QtPm1vZGVdLCBzaXplb2YoU01JX0ZQUikvVklERU9fTU9ERVMpOwogCiAgICAgLyogQ1JUQyBSZWdpc3RlciAqLwogICAgIHNtaUxvYWRSZWdzIChTTUlfSU5EWF9ENCwgU01JX0RBVEFfRDUsCi0gICAgICAgICBTTUlfQ1JUQ1JbcEdELT5tb2RlXSwgc2l6ZW9mKFNNSV9DUlRDUikvVklERU9fTU9ERVMpOworCSBTTUlfQ1JUQ1JbcEdELT5tb2RlXSwgc2l6ZW9mKFNNSV9DUlRDUikvVklERU9fTU9ERVMpOwogCiAgICAgLyogR3JhcGhpY3MgQ29udHJvbGxlciBSZWdpc3RlciAqLwogICAgIHNtaUxvYWRSZWdzIChTTUlfSU5EWF9DRSwgU01JX0RBVEFfQ0YsCi0gICAgICAgICBTTUlfR0NSLCBzaXplb2YoU01JX0dDUikpOworCSBTTUlfR0NSLCBzaXplb2YoU01JX0dDUikpOwogCiAgICAgLyogUGF0Y2ggbWVtb3J5IGFuZCByZWZyZXNoIHNldHRpbmdzIGZvciBTTUk3MTAgKi8KICAgICBpZiAoZGV2aWNlX2lkID09IFBDSV9ERVZJQ0VfSURfU01JXzcxMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3ltNTNjOHh4LmMgYi9kcml2ZXJzL3N5bTUzYzh4eC5jCmluZGV4IGUwM2EwNDkuLmFlMTBmODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3ltNTNjOHh4LmMKKysrIGIvZHJpdmVycy9zeW01M2M4eHguYwpAQCAtMzgsNyArMzgsNiBAQAogI2lmZGVmIENPTkZJR19TQ1NJX1NZTTUzQzhYWAogCiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ib290Lmg+CiAjaW5jbHVkZSA8cGNpLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPHN5bTUzYzh4eC5oPgpAQCAtMTgyLDcgKzE4MSw2IEBACiB9CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBzZXRzLXVwIHRoZSBTQ1NJIGNvbnRyb2xsZXIKICAqIHRoZSBiYXNlIG1lbW9yeSBhZGRyZXNzIGlzIHJldHJpdmVkIHZpYSB0aGUgcGNpX3JlYWRfY29uZmlnX2R3b3JkCkBAIC00MDQsNyArNDAyLDYgQEAKIH0KIAogCi0KIHZvaWQgc2NzaV9zZXRfc2NyaXB0KGNjYiAqcGNjYikKIHsKIAlpbnQgYnVzZGV2ZnVuYyA9IHBjY2ItPnByaXY7CkBAIC01ODcsNyArNTg0LDYgQEAKIH0KIAogCi0KIHZvaWQgc2NzaV9pc3N1ZShjY2IgKnBjY2IpCiB7CiAJaW50IGJ1c2RldmZ1bmMgPSBwY2NiLT5wcml2OwpAQCAtNzUwLDggKzc0Niw2IEBACiB9CiAKIAotCi0KIHZvaWQgc2NzaV9jaGlwX2luaXQodm9pZCkKIHsKIAkvKiBmaXJzdCB3ZSBpc3N1ZSBhIHNvZnQgcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGlfcGNpMTQxMGEuYyBiL2RyaXZlcnMvdGlfcGNpMTQxMGEuYwppbmRleCBhMmIxYTE3Li5jNjcyMzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RpX3BjaTE0MTBhLmMKKysrIGIvZHJpdmVycy90aV9wY2kxNDEwYS5jCkBAIC02Myw3ICs2Myw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxwY21jaWEuaD4KLSNpbmNsdWRlIDxjbWRfcGNtY2lhLmg+CiAKICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpICYmIGRlZmluZWQoQ09ORklHX0lERV9USV9DQVJEQlVTKQogCkBAIC05NCw3ICs5Myw3IEBACiAjZW5kaWYKIAogCWludCByY29kZSA9IDA7Ci0JCisKIAlpZiAoYXJnYyAhPSAyKSB7CiAJCXByaW50ZiAoIlVzYWdlOiBwaW5pdCB7b24gfCBvZmZ9XG4iKTsKIAkJcmV0dXJuIDE7CkBAIC0xMDcsNyArMTA2LDcgQEAKIAkJcHJpbnRmICgiVXNhZ2U6IHBpbml0IHtvbiB8IG9mZn1cbiIpOwogCQlyZXR1cm4gMTsKIAl9Ci0JCisKIAlyZXR1cm4gcmNvZGU7CiB9CiAKQEAgLTEyNSwxNCArMTI0LDE0IEBACiBzdGF0aWMgdTMyIHBjbWNpYV9jaXNfcHRyOwogCiBpbnQgcGNtY2lhX29uKGludCBpZGVfYmFzZV9idXMpCi17CQorewogCXUxNiBkZXZfaWQ7CiAJdTMyIHNvY2tldF9zdGF0dXM7CiAJaW50IHNsb3QgPSAwOwogCWludCBjaXNfbGVuOwogCXUxNiBpb19iYXNlOwogCXUxNiBpb19sZW47Ci0JCisKIAkvKgogCSAqIEZpbmQgdGhlIENhcmRCdXMgUENJIGRldmljZShzKS4KIAkgKi8KQEAgLTE0MCw5ICsxMzksOSBAQAogCQlwcmludGYoIlRpIENhcmRCdXM6IG5vdCBmb3VuZFxuIik7CiAJCXJldHVybiAxOwogCX0KLQkKKwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldmJ1c2ZuLCBQQ0lfREVWSUNFX0lELCAmZGV2X2lkKTsKLQkKKwogCWlmIChkZXZfaWQgPT0gMHhhYzU2KSB7CiAJCWRlYnVnKCJFbmFibGUgUENNQ0lBIFRpIFBDSTE1MTBcbiIpOwogCX0gZWxzZSB7CkBAIC0xNTMsNyArMTUyLDcgQEAKIAljaXNfbGVuID0gQ0ZHX1BDTUNJQV9DSVNfV0lOX1NJWkU7CiAKIAlpb19iYXNlID0gQ0ZHX1BDTUNJQV9JT19XSU47Ci0JaW9fbGVuID0gQ0ZHX1BDTUNJQV9JT19XSU5fU0laRTsJCisJaW9fbGVuID0gQ0ZHX1BDTUNJQV9JT19XSU5fU0laRTsKIAogCS8qCiAJICogU2V0dXAgdGhlIFBDSSBkZXZpY2UuCkBAIC0xNjQsOSArMTYzLDkgQEAKIAlzb2NrZXRfc3RhdHVzID0gcmVhZGwoc29ja2V0X2Jhc2UrOCk7CiAJaWYgKChzb2NrZXRfc3RhdHVzICYgNikgPT0gMCkgewogCQlwcmludGYoIkNhcmQgUHJlc2VudDogIik7Ci0JCQorCiAJCXN3aXRjaCAoc29ja2V0X3N0YXR1cyAmIDB4M2MwMCkgewotCQkJCisKIAkJY2FzZSAweDQwMDoKIAkJCXByaW50ZigiNVYgIik7CiAJCQlicmVhazsKQEAgLTE4OCw0NCArMTg3LDQ0IEBACiAJCQlwcmludGYoIjMyYml0IENhcmRCdXMgQ2FyZFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ZigiOGJpdCBQQy1DYXJkXG4iKTsJCQorCQkJcHJpbnRmKCI4Yml0IFBDLUNhcmRcbiIpOwogCQkJYnJlYWs7Ci0JCX0JCisJCX0KIAl9Ci0JCi0JCisKKwogCXdyaXRlYigweDQxLCBzb2NrZXRfYmFzZSArIDB4ODA2KTsgLyogRW5hYmxlIEkvTyB3aW5kb3cgMCBhbmQgbWVtb3J5IHdpbmRvdyAwICovCiAJd3JpdGViKDB4MGUsIHNvY2tldF9iYXNlICsgMHg4MDcpOyAvKiBSZXNldCBJL08gd2luZG93IG9wdGlvbnMgKi8KIAogCS8qIENhcmVmdWw6IHRoZSBsaW51eCB5ZW50YSBkcml2ZXIgZG8gbm90IHNlZW0gdG8gcmVzZXQgdGhlIG9mZnNldAogCSAqIGluIHRoZSBpL28gd2luZG93cywgc28gbGVhdmluZyB0aGVtIG5vbi16ZXJvIGlzIGEgcHJvYmxlbSAqLwotCQorCiAJd3JpdGViKGlvX2Jhc2UgJiAweGZmLCBzb2NrZXRfYmFzZSArIDB4ODA4KTsgLyogSS9PIHdpbmRvdyAwIGJhc2UgYWRkcmVzcyAqLwogCXdyaXRlYihpb19iYXNlPj44LCBzb2NrZXRfYmFzZSArIDB4ODA5KTsKIAl3cml0ZWIoKGlvX2Jhc2UgKyBpb19sZW4gLSAxKSAmIDB4ZmYsIHNvY2tldF9iYXNlICsgMHg4MGEpOyAvKiBJL08gd2luZG93IDAgZW5kIGFkZHJlc3MgKi8KIAl3cml0ZWIoKGlvX2Jhc2UgKyBpb19sZW4gLSAxKT4+OCwgc29ja2V0X2Jhc2UgKyAweDgwYik7Ci0Jd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MzYpOyAgICAgIC8qIEkvTyB3aW5kb3cgMCBvZmZzZXQgYWRkcmVzcyAweDAwMCAqLwkJCQkgICAgIAorCXdyaXRlYigweDAwLCBzb2NrZXRfYmFzZSArIDB4ODM2KTsgICAgICAvKiBJL08gd2luZG93IDAgb2Zmc2V0IGFkZHJlc3MgMHgwMDAgKi8KIAl3cml0ZWIoMHgwMCwgc29ja2V0X2Jhc2UgKyAweDgzNyk7CiAKLQkKLQl3cml0ZWIoKHBjbWNpYV9jaXNfcHRyJjB4MDAwZmYwMDApID4+IDEyLCAKKworCXdyaXRlYigocGNtY2lhX2Npc19wdHImMHgwMDBmZjAwMCkgPj4gMTIsCiAJICAgICAgIHNvY2tldF9iYXNlICsgMHg4MTApOyAvKiBNZW1vcnkgd2luZG93IDAgc3RhcnQgYWRkcmVzcyBiaXRzIDE5LTEyICovCi0Jd3JpdGViKChwY21jaWFfY2lzX3B0ciYweDAwZjAwMDAwKSA+PiAyMCwgCisJd3JpdGViKChwY21jaWFfY2lzX3B0ciYweDAwZjAwMDAwKSA+PiAyMCwKIAkgICAgICAgc29ja2V0X2Jhc2UgKyAweDgxMSk7ICAvKiBNZW1vcnkgd2luZG93IDAgc3RhcnQgYWRkcmVzcyBiaXRzIDIzLTIwICovCi0Jd3JpdGViKCgocGNtY2lhX2Npc19wdHIrY2lzX2xlbi0xKSAmIDB4MDAwZmYwMDApID4+IDEyLCAKKwl3cml0ZWIoKChwY21jaWFfY2lzX3B0citjaXNfbGVuLTEpICYgMHgwMDBmZjAwMCkgPj4gMTIsCiAJCXNvY2tldF9iYXNlICsgMHg4MTIpOyAvKiBNZW1vcnkgd2luZG93IDAgZW5kIGFkZHJlc3MgYml0cyAxOS0xMiovCi0Jd3JpdGViKCgocGNtY2lhX2Npc19wdHIrY2lzX2xlbi0xKSAmIDB4MDBmMDAwMDApID4+IDIwLCAKKwl3cml0ZWIoKChwY21jaWFfY2lzX3B0citjaXNfbGVuLTEpICYgMHgwMGYwMDAwMCkgPj4gMjAsCiAJCXNvY2tldF9iYXNlICsgMHg4MTMpOyAvKiBNZW1vcnkgd2luZG93IDAgZW5kIGFkZHJlc3MgYml0cyAyMy0yMCovCi0Jd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MTQpOyAvKiBNZW1vcnkgd2luZG93IDAgb2Zmc2V0IGJpdHMgMTktMTIgKi8gCi0Jd3JpdGViKDB4NDAsIHNvY2tldF9iYXNlICsgMHg4MTUpOyAvKiBNZW1vcnkgd2luZG93IDAgb2Zmc2V0IGJpdHMgMjMtMjAgYW5kIAorCXdyaXRlYigweDAwLCBzb2NrZXRfYmFzZSArIDB4ODE0KTsgLyogTWVtb3J5IHdpbmRvdyAwIG9mZnNldCBiaXRzIDE5LTEyICovCisJd3JpdGViKDB4NDAsIHNvY2tldF9iYXNlICsgMHg4MTUpOyAvKiBNZW1vcnkgd2luZG93IDAgb2Zmc2V0IGJpdHMgMjMtMjAgYW5kCiAJCQkJCSAgICAqIG9wdGlvbnMgKHJlYWQvd3JpdGUsIGF0dHJpYnV0ZSBhY2Nlc3MpICovCiAJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MTYpOyAvKiBFeENBIGNhcmQtZGV0ZWN0IGFuZCBnZW5lcmFsIGNvbnRyb2wgICovCiAJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MWUpOyAvKiBFeENBIGdsb2JhbCBjb250cm9sIChpbnRlcnJ1cHQgbW9kZXMpICovCi0JCi0Jd3JpdGViKChwY21jaWFfY2lzX3B0ciAmIDB4ZmYwMDAwMDApID4+IDI0LCAKKworCXdyaXRlYigocGNtY2lhX2Npc19wdHIgJiAweGZmMDAwMDAwKSA+PiAyNCwKIAkgICAgICAgc29ja2V0X2Jhc2UgKyAweDg0MCk7IC8qIE1lbW9yeSB3aW5kb3cgYWRkcmVzcyBiaXRzIDMxLTI0ICovCiAKLQkJCisKIAkvKiB0dXJuIG9mZiB2b2x0YWdlICovCiAJaWYgKHZvbHRhZ2Vfc2V0KHNsb3QsIDAsIDApKSB7CiAJCXJldHVybiAxOwpAQCAtMjM1LDExICsyMzQsMTEgQEAKIAlpZiAoaGFyZHdhcmVfZW5hYmxlKHNsb3QpKSB7CiAJCXJldHVybiAxOwogCX0KLQkKKwogCWlmIChjaGVja19pZGVfZGV2aWNlKHNsb3QsIGlkZV9iYXNlX2J1cykpIHsKIAkJcmV0dXJuIDE7CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0OSwzMCArMjQ4LDMwIEBACiBzdGF0aWMgaW50IHBjbWNpYV9vZmYgKHZvaWQpCiB7CiAJaW50IHNsb3QgPSAwOwotCQorCiAJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MDYpOyAvKiBkaXNhYmxlIGFsbCBJL08gYW5kIG1lbW9yeSB3aW5kb3dzICovCi0JCisKIAl3cml0ZWIoMHgwMCwgc29ja2V0X2Jhc2UgKyAweDgwOCk7IC8qIEkvTyB3aW5kb3cgMCBiYXNlIGFkZHJlc3MgKi8KIAl3cml0ZWIoMHgwMCwgc29ja2V0X2Jhc2UgKyAweDgwOSk7CiAJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MGEpOyAvKiBJL08gd2luZG93IDAgZW5kIGFkZHJlc3MgKi8KIAl3cml0ZWIoMHgwMCwgc29ja2V0X2Jhc2UgKyAweDgwYik7Ci0Jd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MzYpOyAvKiBJL08gd2luZG93IDAgb2Zmc2V0IGFkZHJlc3MgICovCQkJCSAgICAgCisJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MzYpOyAvKiBJL08gd2luZG93IDAgb2Zmc2V0IGFkZHJlc3MgICovCiAJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MzcpOwotCQorCiAJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MGMpOyAvKiBJL08gd2luZG93IDEgYmFzZSBhZGRyZXNzICAqLwogCXdyaXRlYigweDAwLCBzb2NrZXRfYmFzZSArIDB4ODBkKTsKIAl3cml0ZWIoMHgwMCwgc29ja2V0X2Jhc2UgKyAweDgwZSk7IC8qIEkvTyB3aW5kb3cgMSBlbmQgYWRkcmVzcyAgKi8KIAl3cml0ZWIoMHgwMCwgc29ja2V0X2Jhc2UgKyAweDgwZik7Ci0Jd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MzgpOyAvKiBJL08gd2luZG93IDEgb2Zmc2V0IGFkZHJlc3MgICovCQkJCSAgICAgCisJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MzgpOyAvKiBJL08gd2luZG93IDEgb2Zmc2V0IGFkZHJlc3MgICovCiAJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MzkpOwotCQorCiAJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MTApOyAvKiBNZW1vcnkgd2luZG93IDAgc3RhcnQgYWRkcmVzcyAqLwogCXdyaXRlYigweDAwLCBzb2NrZXRfYmFzZSArIDB4ODExKTsKIAl3cml0ZWIoMHgwMCwgc29ja2V0X2Jhc2UgKyAweDgxMik7IC8qIE1lbW9yeSB3aW5kb3cgMCBlbmQgYWRkcmVzcyAgKi8KIAl3cml0ZWIoMHgwMCwgc29ja2V0X2Jhc2UgKyAweDgxMyk7CiAJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MTQpOyAvKiBNZW1vcnkgd2luZG93IDAgb2Zmc2V0ICovCiAJd3JpdGViKDB4MDAsIHNvY2tldF9iYXNlICsgMHg4MTUpOwotCQorCiAJd3JpdGViKDB4YzAsIHNvY2tldF9iYXNlICsgMHg4NDApOyAvKiBNZW1vcnkgd2luZG93IDAgcGFnZSBhZGRyZXNzICovCiAKIApAQCAtMjgyLDcgKzI4MSw3IEBACiAJLyogZGlzYWJsZSBleHRlcm5hbCBoYXJkd2FyZSAqLwogCXByaW50ZiAoIlNodXRkb3duIGFuZCBQb3dlcm9mZiBUaSBQQ0kxNDEwQVxuIik7CiAJaGFyZHdhcmVfZGlzYWJsZShzbG90KTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0zMDcsMTQgKzMwNiwxNCBAQAogCXUzMiBzb2NrZXRfc3RhdHVzOwogCiAJZGVidWcgKCJQQ01DSUEgTUVNOiAlMDhYXG4iLCBwY21jaWFfY2lzX3B0cik7Ci0JCisKIAlzb2NrZXRfc3RhdHVzID0gcmVhZGwoc29ja2V0X2Jhc2UrOCk7Ci0JCisKIAlpZiAoKHNvY2tldF9zdGF0dXMgJiA2KSAhPSAwIHx8IChzb2NrZXRfc3RhdHVzICYgMHgyMCkgIT0gMCkgewogCQlwcmludGYoIm5vIGNhcmQgb3IgQ2FyZEJ1cyBjYXJkXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQotCQorCiAJc3RhcnQgPSBwID0gKHZvbGF0aWxlIHVjaGFyICopIHBjbWNpYV9jaXNfcHRyOwogCiAJd2hpbGUgKChwIC0gc3RhcnQpIDwgTUFYX1RVUEVMX1NaKSB7CkBAIC0zMjcsNyArMzI2LDcgQEAKIAogCQlsZW4gPSAqcDsgcCArPSAyOwogI2lmIGRlZmluZWQoREVCVUcpICYmIChERUJVRyA+IDEpCi0JCXsgCisJCXsKIAkJCXZvbGF0aWxlIHVjaGFyICpxID0gcDsKIAkJCXByaW50ZiAoIlxuVHVwbGUgY29kZSAlMDJ4ICBsZW5ndGggJWRcblx0RGF0YToiLAogCQkJCWNvZGUsIGxlbik7CkBAIC0zNzgsMjggKzM3NywyNyBAQAogCQlwcmludGYoInVua25vd24gY2FyZCB0eXBlXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQotCQorCiAJLyogc2VsZWN0IGNvbmZpZyBpbmRleCAxICovCi0Jd3JpdGViKDEsIHBjbWNpYV9jaXNfcHRyICsgY29uZmlnX2Jhc2UpOwkKKwl3cml0ZWIoMSwgcGNtY2lhX2Npc19wdHIgKyBjb25maWdfYmFzZSk7CiAKICNpZiAwCiAJcHJpbnRmKCJDb25maXVyYXRpb24gT3B0aW9uIFJlZ2lzdGVyOiAlMDJ4XG4iLCByZWFkYihwY21jaWFfY2lzX3B0ciArIGNvbmZpZ19iYXNlKSk7CiAJcHJpbnRmKCJDYXJkIENvbmZpdXJhdGlvbiBhbmQgU3RhdHVzIFJlZ2lzdGVyOiAlMDJ4XG4iLCByZWFkYihwY21jaWFfY2lzX3B0ciArIGNvbmZpZ19iYXNlICsgMikpOwogCXByaW50ZigiUGluIFJlcGxhY2VtZW50IFJlZ2lzdGVyIFJlZ2lzdGVyOiAlMDJ4XG4iLCByZWFkYihwY21jaWFfY2lzX3B0ciArIGNvbmZpZ19iYXNlICsgNCkpOwogCXByaW50ZigiU29ja2V0IGFuZCBDb3B5IFJlZ2lzdGVyOiAlMDJ4XG4iLCByZWFkYihwY21jaWFfY2lzX3B0ciArIGNvbmZpZ19iYXNlICsgNikpOwotI2VuZGlmCQorI2VuZGlmCiAJaWRlX2RldmljZXNfZm91bmQgfD0gKDEgPDwgKHNsb3QraWRlX2Jhc2VfYnVzKSk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIAogCi0KIHN0YXRpYyBpbnQgdm9sdGFnZV9zZXQoaW50IHNsb3QsIGludCB2Y2MsIGludCB2cHApCiB7CiAJdTMyIHNvY2tldF9jb250cm9sOwogCWludCByZWc9MDsKLQkKKwogCXN3aXRjaCAoc2xvdCkgewogCWNhc2UgMDoKIAkJcmVnID0gc29ja2V0X2Jhc2UgKyAweDEwOwpAQCAtNDA3LDEwICs0MDUsMTAgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gMTsKIAl9Ci0JCisKIAlzb2NrZXRfY29udHJvbCA9IDA7Ci0JCi0JCisKKwogCXN3aXRjaCAodmNjKSB7CiAJY2FzZSA1MDoKIAkJc29ja2V0X2NvbnRyb2wgfD0gMHgyMDsKQEAgLTQyMSw3ICs0MTksNyBAQAogCWNhc2UgMDoKIAlkZWZhdWx0OgogCX0KLQkKKwogCXN3aXRjaCAodnBwKSB7CiAJY2FzZSAxMjA6CiAJCXNvY2tldF9jb250cm9sIHw9IDB4MTsKQEAgLTQzNywyNyArNDM1LDI3IEBACiAJfQogCiAJd3JpdGVsKHNvY2tldF9jb250cm9sLCByZWcpOwotCQorCiAJZGVidWcgKCJ2b2x0YWdlX3NldDogVGkgUENJMTQxMEEgU2xvdCAlZCwgVmNjPSVkLiVkLCBWcHA9JWQuJWRcbiIsCiAJCXNsb3QsIHZjYy8xMCwgdmNjJTEwLCB2cHAvMTAsIHZwcCUxMCk7Ci0JCisKIAl1ZGVsYXkoNTAwKTsKIAlyZXR1cm4gMDsKIH0KIAotCQorCiBzdGF0aWMgaW50IGhhcmR3YXJlX2VuYWJsZShpbnQgc2xvdCkKIHsKIAl1MzIgc29ja2V0X3N0YXR1czsKIAl1MTYgYnJnX2N0cmw7CiAJaW50IGlzXzgyMzY1c2w7Ci0JCisKIAlzb2NrZXRfc3RhdHVzID0gcmVhZGwoc29ja2V0X2Jhc2UrOCk7Ci0JCisKIAlpZiAoKHNvY2tldF9zdGF0dXMgJiA2KSA9PSAwKSB7Ci0JCQorCiAJCXN3aXRjaCAoc29ja2V0X3N0YXR1cyAmIDB4M2MwMCkgewotCQkJCisKIAkJY2FzZSAweDQwMDoKIAkJCXByaW50ZigiNVYgIik7CiAJCQl2b2x0YWdlX3NldChzbG90LCA1MCwgMCk7CkBAIC00NzUsMjUgKzQ3MywyNCBAQAogCX0gZWxzZSB7CiAJCXZvbHRhZ2Vfc2V0KHNsb3QsIDAsIDApOwogCX0KLQkKKwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldmJ1c2ZuLCBQQ0lfQlJJREdFX0NPTlRST0wsICZicmdfY3RybCk7CiAJYnJnX2N0cmwgJj0gflBDSV9CUklER0VfQ1RMX0JVU19SRVNFVDsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2YnVzZm4sIFBDSV9CUklER0VfQ09OVFJPTCwgYnJnX2N0cmwpOwotCWlzXzgyMzY1c2wgPSAoKHJlYWRiKHNvY2tldF9iYXNlKzB4ODAwKSAmIDB4MGYpID09IDIpOyAKKwlpc184MjM2NXNsID0gKChyZWFkYihzb2NrZXRfYmFzZSsweDgwMCkgJiAweDBmKSA9PSAyKTsKIAl3cml0ZWIoaXNfODIzNjVzbD8weDkwOjB4OTgsIHNvY2tldF9iYXNlKzB4ODAyKTsKIAl3cml0ZWIoMHg2Nywgc29ja2V0X2Jhc2UrMHg4MDMpOwogCXVkZWxheSgxMDAwMDApOwotI2lmIDAJCi0JcHJpbnRmKCJFeENBIElkICUwMngsIENhcmQgU3RhdHVzICUwMngsIFBvd2VyIGNvbmZpZyAlMDJ4LCBJbnRlcnJ1cHQgQ29uZmlnICUwMngsIGJyaWRnZSBjb250cm9sICUwNHggJWRcbiIsIAorI2lmIDAKKwlwcmludGYoIkV4Q0EgSWQgJTAyeCwgQ2FyZCBTdGF0dXMgJTAyeCwgUG93ZXIgY29uZmlnICUwMngsIEludGVycnVwdCBDb25maWcgJTAyeCwgYnJpZGdlIGNvbnRyb2wgJTA0eCAlZFxuIiwKIAkgICAgICAgcmVhZGIoc29ja2V0X2Jhc2UrMHg4MDApLCByZWFkYihzb2NrZXRfYmFzZSsweDgwMSksCiAJICAgICAgIHJlYWRiKHNvY2tldF9iYXNlKzB4ODAyKSwgcmVhZGIoc29ja2V0X2Jhc2UrMHg4MDMpLCBicmdfY3RybCwgaXNfODIzNjVzbCk7Ci0jZW5kaWYJCi0JCisjZW5kaWYKKwogCXJldHVybiAoKHJlYWRiKHNvY2tldF9iYXNlKzB4ODAxKSYweDZjKT09MHg2Yyk/MDoxOwogfQogCiAKLQogc3RhdGljIGludCBoYXJkd2FyZV9kaXNhYmxlKGludCBzbG90KQogewogCXZvbHRhZ2Vfc2V0KHNsb3QsIDAsIDApOwpAQCAtNTQ2LDExICs1NDMsMTEgQEAKIAkJcmV0dXJuOwogCiAJcHV0cyhpbmRlbnQpOwotCQorCiAJc3dpdGNoICgqcCkgewogCWNhc2UgQ0lTVFBMX0ZVTkNFX0lERV9JRkFDRToKIAkJeyAgIHVjaGFyIGlmYWNlID0gKihwKzIpOwotCQkJCisKIAkJCXB1dHMgKChpZmFjZSA9PSBDSVNUUExfSURFX0lOVEVSRkFDRSkgPyAiIElERSIgOiAiIHVua25vd24iKTsKIAkJCXB1dHMgKCIgaW50ZXJmYWNlICIpOwogCQkJYnJlYWs7CkBAIC01NjAsNDMgKzU1Nyw0MyBAQAogCQl7CiAJCQl1Y2hhciBmMSA9ICoocCsyKTsKIAkJCXVjaGFyIGYyID0gKihwKzQpOwotCQkJCisKIAkJCXB1dHMoKGYxICYgQ0lTVFBMX0lERV9TSUxJQ09OKSA/ICIgW3NpbGljb25dIiA6ICIgW3JvdGF0aW5nXSIpOwotCQkJCisKIAkJCWlmIChmMSAmIENJU1RQTF9JREVfVU5JUVVFKSB7CiAJCQkJcHV0cygiIFt1bmlxdWVdIik7CiAJCQl9Ci0JCQkKKwogCQkJcHV0cygoZjEgJiBDSVNUUExfSURFX0RVQUwpID8gIiBbZHVhbF0iIDogIiBbc2luZ2xlXSIpOwotCQkJCisKIAkJCWlmIChmMiAmIENJU1RQTF9JREVfSEFTX1NMRUVQKSB7CiAJCQkJcHV0cygiIFtzbGVlcF0iKTsKIAkJCX0KLQkJCQorCiAJCQlpZiAoZjIgJiBDSVNUUExfSURFX0hBU19TVEFOREJZKSB7CiAJCQkJcHV0cygiIFtzdGFuZGJ5XSIpOwogCQkJfQotCQkJCisKIAkJCWlmIChmMiAmIENJU1RQTF9JREVfSEFTX0lETEUpIHsKIAkJCQlwdXRzKCIgW2lkbGVdIik7CiAJCQl9Ci0JCQkKKwogCQkJaWYgKGYyICYgQ0lTVFBMX0lERV9MT1dfUE9XRVIpIHsKIAkJCQlwdXRzKCIgW2xvdyBwb3dlcl0iKTsKIAkJCX0KLQkJCQorCiAJCQlpZiAoZjIgJiBDSVNUUExfSURFX1JFR19JTkhJQklUKSB7CiAJCQkJcHV0cygiIFtyZWcgaW5oaWJpdF0iKTsKIAkJCX0KLQkJCQorCiAJCQlpZiAoZjIgJiBDSVNUUExfSURFX0hBU19JTkRFWCkgewogCQkJCXB1dHMoIiBbaW5kZXhdIik7CiAJCQl9Ci0JCQkKKwogCQkJaWYgKGYyICYgQ0lTVFBMX0lERV9JT0lTMTYpIHsKIAkJCQlwdXRzKCIgW0lPaXMxNl0iKTsKIAkJCX0KLQkJCQorCiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTYyMywxMCArNjIwLDEwIEBACiAKIAlpZiAocCA9PSBOVUxMKQogCQlyZXR1cm4gKDApOwkvKiBEb24ndCBrbm93ICovCi0JCisKIAl0ID0gaWRfc3RyOwogCWRvbmUgPTA7Ci0JCisKIAlmb3IgKGk9MDsgaTw9NCAmJiAhZG9uZTsgKytpLCBwKz0yKSB7CiAJCXdoaWxlICgoZGF0YSA9ICpwKSAhPSAnXDAnKSB7CiAJCQlpZiAoZGF0YSA9PSAweEZGKSB7CkBAIC02NjEsNyArNjU4LDcgQEAKIAkJCXJldHVybiAxOwogCQl9CiAJfQotCQorCiAJcmV0dXJuIDA7CS8qIGRvbid0IGtub3cgKi8KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90aWdvbjMuYyBiL2RyaXZlcnMvdGlnb24zLmMKaW5kZXggYzIwZGJlNS4uZWMyY2QyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aWdvbjMuYworKysgYi9kcml2ZXJzL3RpZ29uMy5jCkBAIC01Myw3ICs1Myw3IEBACiBTVEFUSUMgTE1fU1RBVFVTIExNX1NldHVwQ29wcGVyUGh5KFBMTV9ERVZJQ0VfQkxPQ0sgcERldmljZSk7CiBTVEFUSUMgUExNX0FEQVBURVJfSU5GTyBMTV9HZXRBZGFwdGVySW5mb0J5U3NpZChMTV9VSU5UMTYgU3ZpZCwgTE1fVUlOVDE2IFNzaWQpOwogU1RBVElDIExNX1NUQVRVUyBMTV9EbWFUZXN0KFBMTV9ERVZJQ0VfQkxPQ0sgcERldmljZSwgUExNX1VJTlQ4IHBCdWZmZXJWaXJ0LAotICAgICAgICAgICBMTV9QSFlTSUNBTF9BRERSRVNTIEJ1ZmZlclBoeSwgTE1fVUlOVDMyIEJ1ZmZlclNpemUpOworCSAgIExNX1BIWVNJQ0FMX0FERFJFU1MgQnVmZmVyUGh5LCBMTV9VSU5UMzIgQnVmZmVyU2l6ZSk7CiBTVEFUSUMgTE1fU1RBVFVTIExNX0hhbHRDcHUoUExNX0RFVklDRV9CTE9DSyBwRGV2aWNlLExNX1VJTlQzMiBjcHVfbnVtYmVyKTsKIFNUQVRJQyBMTV9TVEFUVVMgTE1fUmVzZXRDaGlwKFBMTV9ERVZJQ0VfQkxPQ0sgcERldmljZSk7CiBTVEFUSUMgTE1fU1RBVFVTIExNX1Rlc3Q0R0JvdW5kYXJ5KFBMTV9ERVZJQ0VfQkxPQ0sgcERldmljZSwgUExNX1BBQ0tFVCBwUGFja2V0LApAQCAtOTAsNyArOTAsNiBAQAogfSAvKiBMTV9SZWdSZEluZCAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTEzLDcgKzExMiw2IEBACiB9IC8qIExNX1JlZ1dySW5kICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNDAsNyArMTM4LDYgQEAKIH0gLyogTE1fTWVtUmRJbmQgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE2Myw3ICsxNjAsNiBAQAogfSAvKiBMTV9NZW1XckluZCAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTg0LDg0ICsxODAsODQgQEAKIAogICAgIHBQYWNrZXQgPSAoUExNX1BBQ0tFVCkgUVFfUG9wSGVhZCgmcERldmljZS0+UnhQYWNrZXRGcmVlUS5Db250YWluZXIpOwogICAgIHdoaWxlKHBQYWNrZXQpIHsKLSAgICAgICAgc3dpdGNoKHBQYWNrZXQtPnUuUnguUmN2UHJvZFJpbmcpIHsKKwlzd2l0Y2gocFBhY2tldC0+dS5SeC5SY3ZQcm9kUmluZykgewogI2lmIFQzX0pVTUJPX1JDVl9SQ0JfRU5UUllfQ09VTlQKLSAgICAgICAgICAgIGNhc2UgVDNfSlVNQk9fUkNWX1BST0RfUklORzogICAgICAgIC8qIEp1bWJvIFJlY2VpdmUgUmluZy4gKi8KLSAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBidWZmZXIgZGVzY3JpcHRvci4gKi8KLSAgICAgICAgICAgICAgICBwUmN2QmQgPQotICAgICAgICAgICAgICAgICAgICAmcERldmljZS0+cFJ4SnVtYm9CZFZpcnRbcERldmljZS0+UnhKdW1ib1Byb2RJZHhdOwotICAgICAgICAgICAgICAgIHBSY3ZCZC0+RmxhZ3MgPSBSQ1ZfQkRfRkxBR19FTkQgfCBSQ1ZfQkRfRkxBR19KVU1CT19SSU5HOwotICAgICAgICAgICAgICAgIHBSY3ZCZC0+TGVuID0gKExNX1VJTlQxNikgcERldmljZS0+UnhKdW1ib0J1ZmZlclNpemU7CisJICAgIGNhc2UgVDNfSlVNQk9fUkNWX1BST0RfUklORzogICAgICAgIC8qIEp1bWJvIFJlY2VpdmUgUmluZy4gKi8KKwkJLyogSW5pdGlhbGl6ZSB0aGUgYnVmZmVyIGRlc2NyaXB0b3IuICovCisJCXBSY3ZCZCA9CisJCSAgICAmcERldmljZS0+cFJ4SnVtYm9CZFZpcnRbcERldmljZS0+UnhKdW1ib1Byb2RJZHhdOworCQlwUmN2QmQtPkZsYWdzID0gUkNWX0JEX0ZMQUdfRU5EIHwgUkNWX0JEX0ZMQUdfSlVNQk9fUklORzsKKwkJcFJjdkJkLT5MZW4gPSAoTE1fVUlOVDE2KSBwRGV2aWNlLT5SeEp1bWJvQnVmZmVyU2l6ZTsKIAotICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHJlY2VpdmUgYnVmZmVyIHBvaW50ZXIgKi8KKwkJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBidWZmZXIgcG9pbnRlciAqLwogI2lmIDAgLyogSmltbXksIGRlbGV0ZWQgaW4gbmV3ICovCi0gICAgICAgICAgICAgICAgcFJjdkJkLT5Ib3N0QWRkci5Mb3cgPSBwUGFja2V0LT51LlJ4LlJ4QnVmZmVyUGh5LkxvdzsKLSAgICAgICAgICAgICAgICBwUmN2QmQtPkhvc3RBZGRyLkhpZ2ggPSBwUGFja2V0LT51LlJ4LlJ4QnVmZmVyUGh5LkhpZ2g7CisJCXBSY3ZCZC0+SG9zdEFkZHIuTG93ID0gcFBhY2tldC0+dS5SeC5SeEJ1ZmZlclBoeS5Mb3c7CisJCXBSY3ZCZC0+SG9zdEFkZHIuSGlnaCA9IHBQYWNrZXQtPnUuUnguUnhCdWZmZXJQaHkuSGlnaDsKICNlbmRpZgotICAgICAgICAgICAgICAgIE1NX01hcFJ4RG1hKHBEZXZpY2UsIHBQYWNrZXQsICZwUmN2QmQtPkhvc3RBZGRyKTsKKwkJTU1fTWFwUnhEbWEocERldmljZSwgcFBhY2tldCwgJnBSY3ZCZC0+SG9zdEFkZHIpOwogCi0gICAgICAgICAgICAgICAgLyogVGhlIG9wYXF1ZSBmaWVsZCBtYXkgcG9pbnQgdG8gYW4gb2Zmc2V0IGZyb20gYSBmaXggYWRkci4gKi8KLSAgICAgICAgICAgICAgICBwUmN2QmQtPk9wYXF1ZSA9IChMTV9VSU5UMzIpIChNTV9VSU5UX1BUUihwUGFja2V0KSAtCi0gICAgICAgICAgICAgICAgICAgIE1NX1VJTlRfUFRSKHBEZXZpY2UtPnBQYWNrZXREZXNjQmFzZSkpOworCQkvKiBUaGUgb3BhcXVlIGZpZWxkIG1heSBwb2ludCB0byBhbiBvZmZzZXQgZnJvbSBhIGZpeCBhZGRyLiAqLworCQlwUmN2QmQtPk9wYXF1ZSA9IChMTV9VSU5UMzIpIChNTV9VSU5UX1BUUihwUGFja2V0KSAtCisJCSAgICBNTV9VSU5UX1BUUihwRGV2aWNlLT5wUGFja2V0RGVzY0Jhc2UpKTsKIAotICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgcHJvZHVjZXIgaW5kZXguICovCi0gICAgICAgICAgICAgICAgcERldmljZS0+UnhKdW1ib1Byb2RJZHggPSAocERldmljZS0+UnhKdW1ib1Byb2RJZHggKyAxKSAmCi0gICAgICAgICAgICAgICAgICAgIFQzX0pVTUJPX1JDVl9SQ0JfRU5UUllfQ09VTlRfTUFTSzsKKwkJLyogVXBkYXRlIHRoZSBwcm9kdWNlciBpbmRleC4gKi8KKwkJcERldmljZS0+UnhKdW1ib1Byb2RJZHggPSAocERldmljZS0+UnhKdW1ib1Byb2RJZHggKyAxKSAmCisJCSAgICBUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UX01BU0s7CiAKLSAgICAgICAgICAgICAgICBKdW1ib0JkQWRkZWQrKzsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkJSnVtYm9CZEFkZGVkKys7CisJCWJyZWFrOwogI2VuZGlmIC8qIFQzX0pVTUJPX1JDVl9SQ0JfRU5UUllfQ09VTlQgKi8KIAotICAgICAgICAgICAgY2FzZSBUM19TVERfUkNWX1BST0RfUklORzogICAgICAvKiBTdGFuZGFyZCBSZWNlaXZlIFJpbmcuICovCi0gICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgYnVmZmVyIGRlc2NyaXB0b3IuICovCi0gICAgICAgICAgICAgICAgcFJjdkJkID0gJnBEZXZpY2UtPnBSeFN0ZEJkVmlydFtwRGV2aWNlLT5SeFN0ZFByb2RJZHhdOwotICAgICAgICAgICAgICAgIHBSY3ZCZC0+RmxhZ3MgPSBSQ1ZfQkRfRkxBR19FTkQ7Ci0gICAgICAgICAgICAgICAgcFJjdkJkLT5MZW4gPSBNQVhfU1REX1JDVl9CVUZGRVJfU0laRTsKKwkgICAgY2FzZSBUM19TVERfUkNWX1BST0RfUklORzogICAgICAvKiBTdGFuZGFyZCBSZWNlaXZlIFJpbmcuICovCisJCS8qIEluaXRpYWxpemUgdGhlIGJ1ZmZlciBkZXNjcmlwdG9yLiAqLworCQlwUmN2QmQgPSAmcERldmljZS0+cFJ4U3RkQmRWaXJ0W3BEZXZpY2UtPlJ4U3RkUHJvZElkeF07CisJCXBSY3ZCZC0+RmxhZ3MgPSBSQ1ZfQkRfRkxBR19FTkQ7CisJCXBSY3ZCZC0+TGVuID0gTUFYX1NURF9SQ1ZfQlVGRkVSX1NJWkU7CiAKLSAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSByZWNlaXZlIGJ1ZmZlciBwb2ludGVyICovCisJCS8qIEluaXRpYWxpemUgdGhlIHJlY2VpdmUgYnVmZmVyIHBvaW50ZXIgKi8KICNpZiAwICAvKiBKaW1teSwgZGVsZXRlZCBpbiBuZXcgcmVwbGFjZWQgd2l0aCBNTV9NYXBSeERtYSAqLwotICAgICAgICAgICAgICAgIHBSY3ZCZC0+SG9zdEFkZHIuTG93ID0gcFBhY2tldC0+dS5SeC5SeEJ1ZmZlclBoeS5Mb3c7Ci0gICAgICAgICAgICAgICAgcFJjdkJkLT5Ib3N0QWRkci5IaWdoID0gcFBhY2tldC0+dS5SeC5SeEJ1ZmZlclBoeS5IaWdoOworCQlwUmN2QmQtPkhvc3RBZGRyLkxvdyA9IHBQYWNrZXQtPnUuUnguUnhCdWZmZXJQaHkuTG93OworCQlwUmN2QmQtPkhvc3RBZGRyLkhpZ2ggPSBwUGFja2V0LT51LlJ4LlJ4QnVmZmVyUGh5LkhpZ2g7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBNTV9NYXBSeERtYShwRGV2aWNlLCBwUGFja2V0LCAmcFJjdkJkLT5Ib3N0QWRkcik7CisJCU1NX01hcFJ4RG1hKHBEZXZpY2UsIHBQYWNrZXQsICZwUmN2QmQtPkhvc3RBZGRyKTsKIAotICAgICAgICAgICAgICAgIC8qIFRoZSBvcGFxdWUgZmllbGQgbWF5IHBvaW50IHRvIGFuIG9mZnNldCBmcm9tIGEgZml4IGFkZHIuICovCi0gICAgICAgICAgICAgICAgcFJjdkJkLT5PcGFxdWUgPSAoTE1fVUlOVDMyKSAoTU1fVUlOVF9QVFIocFBhY2tldCkgLQotICAgICAgICAgICAgICAgICAgICBNTV9VSU5UX1BUUihwRGV2aWNlLT5wUGFja2V0RGVzY0Jhc2UpKTsKKwkJLyogVGhlIG9wYXF1ZSBmaWVsZCBtYXkgcG9pbnQgdG8gYW4gb2Zmc2V0IGZyb20gYSBmaXggYWRkci4gKi8KKwkJcFJjdkJkLT5PcGFxdWUgPSAoTE1fVUlOVDMyKSAoTU1fVUlOVF9QVFIocFBhY2tldCkgLQorCQkgICAgTU1fVUlOVF9QVFIocERldmljZS0+cFBhY2tldERlc2NCYXNlKSk7CiAKLSAgICAgICAgICAgICAgICAvKiBVcGRhdGUgdGhlIHByb2R1Y2VyIGluZGV4LiAqLwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPlJ4U3RkUHJvZElkeCA9IChwRGV2aWNlLT5SeFN0ZFByb2RJZHggKyAxKSAmCi0gICAgICAgICAgICAgICAgICAgIFQzX1NURF9SQ1ZfUkNCX0VOVFJZX0NPVU5UX01BU0s7CisJCS8qIFVwZGF0ZSB0aGUgcHJvZHVjZXIgaW5kZXguICovCisJCXBEZXZpY2UtPlJ4U3RkUHJvZElkeCA9IChwRGV2aWNlLT5SeFN0ZFByb2RJZHggKyAxKSAmCisJCSAgICBUM19TVERfUkNWX1JDQl9FTlRSWV9DT1VOVF9NQVNLOwogCi0gICAgICAgICAgICAgICAgU3RkQmRBZGRlZCsrOwotICAgICAgICAgICAgICAgIGJyZWFrOworCQlTdGRCZEFkZGVkKys7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFQzX1VOS05PV05fUkNWX1BST0RfUklORzoKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgTG1zdGF0dXMgPSBMTV9TVEFUVVNfRkFJTFVSRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSAvKiBzd2l0Y2ggKi8KKwkgICAgY2FzZSBUM19VTktOT1dOX1JDVl9QUk9EX1JJTkc6CisJICAgIGRlZmF1bHQ6CisJCUxtc3RhdHVzID0gTE1fU1RBVFVTX0ZBSUxVUkU7CisJCWJyZWFrOworCX0gLyogc3dpdGNoICovCiAKLSAgICAgICAgLyogQmFpbCBvdXQgaWYgdGhlcmUgaXMgYW55IGVycm9yLiAqLwotICAgICAgICBpZihMbXN0YXR1cyAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkvKiBCYWlsIG91dCBpZiB0aGVyZSBpcyBhbnkgZXJyb3IuICovCisJaWYoTG1zdGF0dXMgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCisJeworCSAgICBicmVhazsKKwl9CiAKLSAgICAgICAgcFBhY2tldCA9IChQTE1fUEFDS0VUKSBRUV9Qb3BIZWFkKCZwRGV2aWNlLT5SeFBhY2tldEZyZWVRLkNvbnRhaW5lcik7CisJcFBhY2tldCA9IChQTE1fUEFDS0VUKSBRUV9Qb3BIZWFkKCZwRGV2aWNlLT5SeFBhY2tldEZyZWVRLkNvbnRhaW5lcik7CiAgICAgfSAvKiB3aGlsZSAqLwogCiAgICAgd21iKCk7CiAgICAgLyogVXBkYXRlIHRoZSBwcm9jZWR1cmUgaW5kZXguICovCiAgICAgaWYoU3RkQmRBZGRlZCkKICAgICB7Ci0gICAgICAgIE1CX1JFR19XUihwRGV2aWNlLCBNYWlsYm94LlJjdlN0ZFByb2RJZHguTG93LCBwRGV2aWNlLT5SeFN0ZFByb2RJZHgpOworCU1CX1JFR19XUihwRGV2aWNlLCBNYWlsYm94LlJjdlN0ZFByb2RJZHguTG93LCBwRGV2aWNlLT5SeFN0ZFByb2RJZHgpOwogICAgIH0KICNpZiBUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UCiAgICAgaWYoSnVtYm9CZEFkZGVkKQogICAgIHsKLSAgICAgICAgTUJfUkVHX1dSKHBEZXZpY2UsIE1haWxib3guUmN2SnVtYm9Qcm9kSWR4LkxvdywKLSAgICAgICAgICAgIHBEZXZpY2UtPlJ4SnVtYm9Qcm9kSWR4KTsKKwlNQl9SRUdfV1IocERldmljZSwgTWFpbGJveC5SY3ZKdW1ib1Byb2RJZHguTG93LAorCSAgICBwRGV2aWNlLT5SeEp1bWJvUHJvZElkeCk7CiAgICAgfQogI2VuZGlmIC8qIFQzX0pVTUJPX1JDVl9SQ0JfRU5UUllfQ09VTlQgKi8KIApAQCAtMjgzLDEyICsyNzksMTIgQEAKIAogICAgIC8qIEludGlhbGl6ZSBjbG9jayBwZXJpb2QgYW5kIHN0YXRlIG1hY2hpbmUuICovCiAgICAgVmFsdWUzMiA9IFNFRVBST01fQUREUl9DTEtfUEVSRChTRUVQUk9NX0NMT0NLX1BFUklPRCkgfAotICAgICAgICBTRUVQUk9NX0FERFJfRlNNX1JFU0VUOworCVNFRVBST01fQUREUl9GU01fUkVTRVQ7CiAgICAgUkVHX1dSKHBEZXZpY2UsIEdyYy5FZXByb21BZGRyLCBWYWx1ZTMyKTsKIAogICAgIGZvcihqID0gMDsgaiA8IDEwMDsgaisrKQogICAgIHsKLSAgICAgICAgTU1fV2FpdCgxMCk7CisJTU1fV2FpdCgxMCk7CiAgICAgfQogCiAgICAgLyogU2VyaWFsIGVlcHJvbSBhY2Nlc3MgdXNpbmcgdGhlIEdyYy5FZXByb21BZGRyL0VlcHJvbURhdGEgcmVnaXN0ZXJzLiAqLwpAQCAtMjk3LDE2ICsyOTMsMTYgQEAKIAogICAgIC8qIFNldCB0aGUgNTcwMSBjb21wYXRpYmlsaXR5IG1vZGUgaWYgd2UgYXJlIHVzaW5nIEVFUFJPTS4gKi8KICAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpICE9IFQzX0FTSUNfUkVWXzU3MDAgJiYKLSAgICAgICAgVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSAhPSBUM19BU0lDX1JFVl81NzAxKQorCVQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgIT0gVDNfQVNJQ19SRVZfNTcwMSkKICAgICB7Ci0gICAgICAgIFZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgTnZyYW0uQ29uZmlnMSk7Ci0gICAgICAgIGlmKChWYWx1ZTMyICYgRkxBU0hfSU5URVJGQUNFX0VOQUJMRSkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgLyogVXNlIHRoZSBuZXcgaW50ZXJmYWNlIHRvIHJlYWQgRUVQUk9NLiAqLwotICAgICAgICAgICAgVmFsdWUzMiAmPSB+RkxBU0hfQ09NUEFUX0JZUEFTUzsKKwlWYWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIE52cmFtLkNvbmZpZzEpOworCWlmKChWYWx1ZTMyICYgRkxBU0hfSU5URVJGQUNFX0VOQUJMRSkgPT0gMCkKKwl7CisJICAgIC8qIFVzZSB0aGUgbmV3IGludGVyZmFjZSB0byByZWFkIEVFUFJPTS4gKi8KKwkgICAgVmFsdWUzMiAmPSB+RkxBU0hfQ09NUEFUX0JZUEFTUzsKIAotICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE52cmFtLkNvbmZpZzEsIFZhbHVlMzIpOwotICAgICAgICB9CisJICAgIFJFR19XUihwRGV2aWNlLCBOdnJhbS5Db25maWcxLCBWYWx1ZTMyKTsKKwl9CiAgICAgfQogfSAvKiBMTV9OdlJhbUluaXQgKi8KIApAQCAtMzI5LDcgKzMyNSw3IEBACiAKICAgICBpZihPZmZzZXQgPiBTRUVQUk9NX0NISVBfU0laRSkKICAgICB7Ci0gICAgICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKKwlyZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7CiAgICAgfQogCiAgICAgRGV2ID0gT2Zmc2V0IC8gU0VFUFJPTV9DSElQX1NJWkU7CkBAIC0zMzcsMzMgKzMzMywzMiBAQAogCiAgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBHcmMuRWVwcm9tQWRkcik7CiAgICAgVmFsdWUzMiAmPSB+KFNFRVBST01fQUREUl9BRERSRVNTX01BU0sgfCBTRUVQUk9NX0FERFJfREVWX0lEX01BU0sgfAotICAgICAgICBTRUVQUk9NX0FERFJfUldfTUFTSyk7CisJU0VFUFJPTV9BRERSX1JXX01BU0spOwogICAgIFJFR19XUihwRGV2aWNlLCBHcmMuRWVwcm9tQWRkciwgVmFsdWUzMiB8IFNFRVBST01fQUREUl9ERVZfSUQoRGV2KSB8Ci0gICAgICAgIFNFRVBST01fQUREUl9BRERSRVNTKEFkZHIpIHwgU0VFUFJPTV9BRERSX1NUQVJUIHwgU0VFUFJPTV9BRERSX1JFQUQpOworCVNFRVBST01fQUREUl9BRERSRVNTKEFkZHIpIHwgU0VFUFJPTV9BRERSX1NUQVJUIHwgU0VFUFJPTV9BRERSX1JFQUQpOwogCiAgICAgZm9yKGogPSAwOyBqIDwgMTAwMDsgaisrKQogICAgIHsKLSAgICAgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBHcmMuRWVwcm9tQWRkcik7Ci0gICAgICAgIGlmKFZhbHVlMzIgJiBTRUVQUk9NX0FERFJfQ09NUExFVEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIE1NX1dhaXQoMTApOworCVZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgR3JjLkVlcHJvbUFkZHIpOworCWlmKFZhbHVlMzIgJiBTRUVQUk9NX0FERFJfQ09NUExFVEUpCisJeworCSAgICBicmVhazsKKwl9CisJTU1fV2FpdCgxMCk7CiAgICAgfQogCiAgICAgaWYoVmFsdWUzMiAmIFNFRVBST01fQUREUl9DT01QTEVURSkKICAgICB7Ci0gICAgICAgIFZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgR3JjLkVlcHJvbURhdGEpOwotICAgICAgICAqcERhdGEgPSBWYWx1ZTMyOworCVZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgR3JjLkVlcHJvbURhdGEpOworCSpwRGF0YSA9IFZhbHVlMzI7CiAKLSAgICAgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOworCXJldHVybiBMTV9TVEFUVVNfU1VDQ0VTUzsKICAgICB9CiAKICAgICByZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7CiB9IC8qIExNX0VlcHJvbVJlYWQgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM4MCw4OCArMzc1LDg4IEBACiAgICAgTE1fVUlOVDMyIGo7CiAKICAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDAgfHwKLSAgICAgICAgVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAxKQorCVQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMSkKICAgICB7Ci0gICAgICAgIFN0YXR1cyA9IExNX0VlcHJvbVJlYWQocERldmljZSwgT2Zmc2V0LCBwRGF0YSk7CisJU3RhdHVzID0gTE1fRWVwcm9tUmVhZChwRGV2aWNlLCBPZmZzZXQsIHBEYXRhKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgLyogRGV0ZXJtaW5lIGlmIHdlIGhhdmUgZmxhc2ggb3IgRUVQUk9NLiAqLwotICAgICAgICBWYWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIE52cmFtLkNvbmZpZzEpOwotICAgICAgICBpZihWYWx1ZTMyICYgRkxBU0hfSU5URVJGQUNFX0VOQUJMRSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYoVmFsdWUzMiAmIEZMQVNIX1NTUkFNX0JVRkZFUlJFRF9NT0RFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE9mZnNldCA9ICgoT2Zmc2V0L0JVRkZFUkVEX0ZMQVNIX1BBR0VfU0laRSkgPDwKLSAgICAgICAgICAgICAgICAgICAgQlVGRkVSRURfRkxBU0hfUEFHRV9QT1MpICsKLSAgICAgICAgICAgICAgICAgICAgKE9mZnNldCAlIEJVRkZFUkVEX0ZMQVNIX1BBR0VfU0laRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBEZXRlcm1pbmUgaWYgd2UgaGF2ZSBmbGFzaCBvciBFRVBST00uICovCisJVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBOdnJhbS5Db25maWcxKTsKKwlpZihWYWx1ZTMyICYgRkxBU0hfSU5URVJGQUNFX0VOQUJMRSkKKwl7CisJICAgIGlmKFZhbHVlMzIgJiBGTEFTSF9TU1JBTV9CVUZGRVJSRURfTU9ERSkKKwkgICAgeworCQlPZmZzZXQgPSAoKE9mZnNldC9CVUZGRVJFRF9GTEFTSF9QQUdFX1NJWkUpIDw8CisJCSAgICBCVUZGRVJFRF9GTEFTSF9QQUdFX1BPUykgKworCQkgICAgKE9mZnNldCAlIEJVRkZFUkVEX0ZMQVNIX1BBR0VfU0laRSk7CisJICAgIH0KKwl9CiAKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE52cmFtLlN3QXJiLCBTV19BUkJfUkVRX1NFVDEpOwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTAwMDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoUkVHX1JEKHBEZXZpY2UsIE52cmFtLlN3QXJiKSAmIFNXX0FSQl9HTlQxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTU1fV2FpdCgyMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGogPT0gMTAwMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOwotICAgICAgICB9CisJUkVHX1dSKHBEZXZpY2UsIE52cmFtLlN3QXJiLCBTV19BUkJfUkVRX1NFVDEpOworCWZvciAoaiA9IDA7IGogPCAxMDAwOyBqKyspCisJeworCSAgICBpZiAoUkVHX1JEKHBEZXZpY2UsIE52cmFtLlN3QXJiKSAmIFNXX0FSQl9HTlQxKQorCSAgICB7CisJCWJyZWFrOworCSAgICB9CisJICAgIE1NX1dhaXQoMjApOworCX0KKwlpZiAoaiA9PSAxMDAwKQorCXsKKwkgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOworCX0KIAotICAgICAgICAvKiBSZWFkIGZyb20gZmxhc2ggb3IgRUVQUk9NIHdpdGggdGhlIG5ldyA1NzAzLzAyIGludGVyZmFjZS4gKi8KLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE52cmFtLkFkZHIsIE9mZnNldCAmIE5WUkFNX0FERFJFU1NfTUFTSyk7CisJLyogUmVhZCBmcm9tIGZsYXNoIG9yIEVFUFJPTSB3aXRoIHRoZSBuZXcgNTcwMy8wMiBpbnRlcmZhY2UuICovCisJUkVHX1dSKHBEZXZpY2UsIE52cmFtLkFkZHIsIE9mZnNldCAmIE5WUkFNX0FERFJFU1NfTUFTSyk7CiAKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE52cmFtLkNtZCwgTlZSQU1fQ01EX1JEIHwgTlZSQU1fQ01EX0RPX0lUIHwKLSAgICAgICAgICAgIE5WUkFNX0NNRF9GSVJTVCB8IE5WUkFNX0NNRF9MQVNUIHwgTlZSQU1fQ01EX0RPTkUpOworCVJFR19XUihwRGV2aWNlLCBOdnJhbS5DbWQsIE5WUkFNX0NNRF9SRCB8IE5WUkFNX0NNRF9ET19JVCB8CisJICAgIE5WUkFNX0NNRF9GSVJTVCB8IE5WUkFNX0NNRF9MQVNUIHwgTlZSQU1fQ01EX0RPTkUpOwogCi0gICAgICAgIC8qIFdhaXQgZm9yIHRoZSBkb25lIGJpdCB0byBjbGVhci4gKi8KLSAgICAgICAgZm9yKGogPSAwOyBqIDwgNTAwOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIE1NX1dhaXQoMTApOworCS8qIFdhaXQgZm9yIHRoZSBkb25lIGJpdCB0byBjbGVhci4gKi8KKwlmb3IoaiA9IDA7IGogPCA1MDA7IGorKykKKwl7CisJICAgIE1NX1dhaXQoMTApOwogCi0gICAgICAgICAgICBWYWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIE52cmFtLkNtZCk7Ci0gICAgICAgICAgICBpZighKFZhbHVlMzIgJiBOVlJBTV9DTURfRE9ORSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBOdnJhbS5DbWQpOworCSAgICBpZighKFZhbHVlMzIgJiBOVlJBTV9DTURfRE9ORSkpCisJICAgIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CiAKLSAgICAgICAgLyogV2FpdCBmb3IgdGhlIGRvbmUgYml0LiAqLwotICAgICAgICBpZighKFZhbHVlMzIgJiBOVlJBTV9DTURfRE9ORSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IDUwMDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE1NX1dhaXQoMTApOworCS8qIFdhaXQgZm9yIHRoZSBkb25lIGJpdC4gKi8KKwlpZighKFZhbHVlMzIgJiBOVlJBTV9DTURfRE9ORSkpCisJeworCSAgICBmb3IoaiA9IDA7IGogPCA1MDA7IGorKykKKwkgICAgeworCQlNTV9XYWl0KDEwKTsKIAotICAgICAgICAgICAgICAgIFZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgTnZyYW0uQ21kKTsKLSAgICAgICAgICAgICAgICBpZihWYWx1ZTMyICYgTlZSQU1fQ01EX0RPTkUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBNTV9XYWl0KDEwKTsKKwkJVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBOdnJhbS5DbWQpOworCQlpZihWYWx1ZTMyICYgTlZSQU1fQ01EX0RPTkUpCisJCXsKKwkJICAgIE1NX1dhaXQoMTApOwogCi0gICAgICAgICAgICAgICAgICAgICpwRGF0YSA9IFJFR19SRChwRGV2aWNlLCBOdnJhbS5SZWFkRGF0YSk7CisJCSAgICAqcERhdGEgPSBSRUdfUkQocERldmljZSwgTnZyYW0uUmVhZERhdGEpOwogCi0gICAgICAgICAgICAgICAgICAgIC8qIENoYW5nZSB0aGUgZW5kaWFuZXNzLiAqLwotICAgICAgICAgICAgICAgICAgICAqcERhdGEgPSAoKCpwRGF0YSAmIDB4ZmYpIDw8IDI0KXwgKCgqcERhdGEgJiAweGZmMDApIDw8IDgpfAotICAgICAgICAgICAgICAgICAgICAgICAgKCgqcERhdGEgJiAweGZmMDAwMCkgPj4gOCkgfCAoKCpwRGF0YSA+PiAyNCkgJiAweGZmKTsKKwkJICAgIC8qIENoYW5nZSB0aGUgZW5kaWFuZXNzLiAqLworCQkgICAgKnBEYXRhID0gKCgqcERhdGEgJiAweGZmKSA8PCAyNCl8ICgoKnBEYXRhICYgMHhmZjAwKSA8PCA4KXwKKwkJCSgoKnBEYXRhICYgMHhmZjAwMDApID4+IDgpIHwgKCgqcERhdGEgPj4gMjQpICYgMHhmZik7CiAKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CisJfQogCi0gICAgICAgIFJFR19XUihwRGV2aWNlLCBOdnJhbS5Td0FyYiwgU1dfQVJCX1JFUV9DTFIxKTsKLSAgICAgICAgaWYoVmFsdWUzMiAmIE5WUkFNX0NNRF9ET05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdGF0dXMgPSBMTV9TVEFUVVNfU1VDQ0VTUzsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0YXR1cyA9IExNX1NUQVRVU19GQUlMVVJFOwotICAgICAgICB9CisJUkVHX1dSKHBEZXZpY2UsIE52cmFtLlN3QXJiLCBTV19BUkJfUkVRX0NMUjEpOworCWlmKFZhbHVlMzIgJiBOVlJBTV9DTURfRE9ORSkKKwl7CisJICAgIFN0YXR1cyA9IExNX1NUQVRVU19TVUNDRVNTOworCX0KKwllbHNlCisJeworCSAgICBTdGF0dXMgPSBMTV9TVEFUVVNfRkFJTFVSRTsKKwl9CiAgICAgfQogCiAgICAgcmV0dXJuIFN0YXR1czsKQEAgLTQ4MCw1MyArNDc1LDUzIEBACiAgICAgLyogUmVhZCBQTiBmcm9tIFZQRCAqLwogICAgIGZvciAoaiA9IDA7IGogPCAyNTY7IGogKz0gNCwgVnBkX2RwdHIrKyApCiAgICAgewotICAgICAgICBpZiAoTE1fTnZyYW1SZWFkKHBEZXZpY2UsIDB4MTAwICsgaiwgJlZhbHVlMzIpICE9IExNX1NUQVRVU19TVUNDRVNTKSB7Ci0gICAgICAgICAgICBwcmludGYoIkJDTTU3MHg6IExNX1JlYWRWUEQ6IFZQRCByZWFkIGZhaWxlZCIKKwlpZiAoTE1fTnZyYW1SZWFkKHBEZXZpY2UsIDB4MTAwICsgaiwgJlZhbHVlMzIpICE9IExNX1NUQVRVU19TVUNDRVNTKSB7CisJICAgIHByaW50ZigiQkNNNTcweDogTE1fUmVhZFZQRDogVlBEIHJlYWQgZmFpbGVkIgogCQkgICAiIChubyBFRVBST00gb25ib2FyZClcbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICpWcGRfZHB0ciA9IGNwdV90b19sZTMyKFZhbHVlMzIpOworCSAgICByZXR1cm47CisJfQorCSpWcGRfZHB0ciA9IGNwdV90b19sZTMyKFZhbHVlMzIpOwogICAgIH0KICAgICBmb3IgKGogPSAwOyBqIDwgMjU2OyApCiAgICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgVnBkX3JfbGVuOwotICAgICAgICB1bnNpZ25lZCBpbnQgVnBkX3JfZW5kOworCXVuc2lnbmVkIGludCBWcGRfcl9sZW47CisJdW5zaWduZWQgaW50IFZwZF9yX2VuZDsKIAotICAgICAgICBpZiAoKFZwZFtqXSA9PSAweDgyKSB8fCAoVnBkW2pdID09IDB4OTEpKQotICAgICAgICB7Ci0gICAgICAgICAgICBqID0gaiArIDMgKyBWcGRbaiArIDFdICsgKFZwZFtqICsgMl0gPDwgOCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoVnBkW2pdID09IDB4OTApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZwZF9yX2xlbiA9ICBWcGRbaiArIDFdICsgKFZwZFtqICsgMl0gPDwgOCk7Ci0gICAgICAgICAgICBqICs9IDM7Ci0gICAgICAgICAgICBWcGRfcl9lbmQgPSBWcGRfcl9sZW4gKyBqOwotICAgICAgICAgICAgd2hpbGUgKGogPCBWcGRfcl9lbmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKChWcGRbal0gPT0gJ1AnKSAmJiAoVnBkW2ogKyAxXSA9PSAnTicpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbiA9IFZwZFtqICsgMl07CisJaWYgKChWcGRbal0gPT0gMHg4MikgfHwgKFZwZFtqXSA9PSAweDkxKSkKKwl7CisJICAgIGogPSBqICsgMyArIFZwZFtqICsgMV0gKyAoVnBkW2ogKyAyXSA8PCA4KTsKKwl9CisJZWxzZSBpZiAoVnBkW2pdID09IDB4OTApCisJeworCSAgICBWcGRfcl9sZW4gPSAgVnBkW2ogKyAxXSArIChWcGRbaiArIDJdIDw8IDgpOworCSAgICBqICs9IDM7CisJICAgIFZwZF9yX2VuZCA9IFZwZF9yX2xlbiArIGo7CisJICAgIHdoaWxlIChqIDwgVnBkX3JfZW5kKQorCSAgICB7CisJCWlmICgoVnBkW2pdID09ICdQJykgJiYgKFZwZFtqICsgMV0gPT0gJ04nKSkKKwkJeworCQkgICAgdW5zaWduZWQgaW50IGxlbiA9IFZwZFtqICsgMl07CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA8PSAyNCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHBEZXZpY2UtPlBhcnRObywgJlZwZFtqICsgM10sIGxlbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChWcGRbaiArIDJdID09IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGogPSBqICsgVnBkW2ogKyAyXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJCSAgICBpZiAobGVuIDw9IDI0KQorCQkgICAgeworCQkJbWVtY3B5KHBEZXZpY2UtPlBhcnRObywgJlZwZFtqICsgM10sIGxlbik7CisJCSAgICB9CisJCSAgICBicmVhazsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIGlmIChWcGRbaiArIDJdID09IDApCisJCSAgICB7CisJCQlicmVhazsKKwkJICAgIH0KKwkJICAgIGogPSBqICsgVnBkW2ogKyAyXTsKKwkJfQorCSAgICB9CisJICAgIGJyZWFrOworCX0KKwllbHNlIHsKKwkgICAgYnJlYWs7CisJfQogICAgIH0KIH0KIApAQCAtNTM3LDU5ICs1MzIsNTkgQEAKICAgICBpbnQgaTsKIAogICAgIGlmIChMTV9OdnJhbVJlYWQocERldmljZSwgMHgwLCAmVmFsdWUzMikgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAgICAgaWYgKFZhbHVlMzIgIT0gMHhhYTU1OTk2NikKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICBpZiAoTE1fTnZyYW1SZWFkKHBEZXZpY2UsIDB4YywgJm9mZnNldCkgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKKwlyZXR1cm47CiAKICAgICBvZmZzZXQgPSAoKG9mZnNldCAmIDB4ZmYpIDw8IDI0KXwgKChvZmZzZXQgJiAweGZmMDApIDw8IDgpfAotICAgICAgICAoKG9mZnNldCAmIDB4ZmYwMDAwKSA+PiA4KSB8ICgob2Zmc2V0ID4+IDI0KSAmIDB4ZmYpOworCSgob2Zmc2V0ICYgMHhmZjAwMDApID4+IDgpIHwgKChvZmZzZXQgPj4gMjQpICYgMHhmZik7CiAgICAgaWYgKExNX052cmFtUmVhZChwRGV2aWNlLCBvZmZzZXQsICZWYWx1ZTMyKSAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOworCXJldHVybjsKICAgICBpZiAoKFZhbHVlMzIgPT0gMHgwMzAwMDAwZSkgJiYKLSAgICAgICAgKExNX052cmFtUmVhZChwRGV2aWNlLCBvZmZzZXQgKyA0LCAmVmFsdWUzMikgPT0gTE1fU1RBVFVTX1NVQ0NFU1MpICYmCi0gICAgICAgIChWYWx1ZTMyID09IDApKSB7CisJKExNX052cmFtUmVhZChwRGV2aWNlLCBvZmZzZXQgKyA0LCAmVmFsdWUzMikgPT0gTE1fU1RBVFVTX1NVQ0NFU1MpICYmCisJKFZhbHVlMzIgPT0gMCkpIHsKIAotICAgICAgICBpZiAoTE1fTnZyYW1SZWFkKHBEZXZpY2UsIG9mZnNldCArIDgsICZ2ZXJfb2Zmc2V0KSAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmVyX29mZnNldCA9ICgodmVyX29mZnNldCAmIDB4ZmYwMDAwKSA+PiA4KSB8Ci0gICAgICAgICAgICAoKHZlcl9vZmZzZXQgPj4gMjQpICYgMHhmZik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSA0KSB7Ci0gICAgICAgICAgICBpZiAoTE1fTnZyYW1SZWFkKHBEZXZpY2UsIG9mZnNldCArIHZlcl9vZmZzZXQgKyBpLCAmVmFsdWUzMikgIT0KLSAgICAgICAgICAgICAgICBMTV9TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqKChMTV9VSU5UMzIgKikgJnBEZXZpY2UtPkJvb3RDb2RlVmVyW2ldKSA9IGNwdV90b19sZTMyKFZhbHVlMzIpOwotICAgICAgICB9CisJaWYgKExNX052cmFtUmVhZChwRGV2aWNlLCBvZmZzZXQgKyA4LCAmdmVyX29mZnNldCkgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCisJICAgIHJldHVybjsKKwl2ZXJfb2Zmc2V0ID0gKCh2ZXJfb2Zmc2V0ICYgMHhmZjAwMDApID4+IDgpIHwKKwkgICAgKCh2ZXJfb2Zmc2V0ID4+IDI0KSAmIDB4ZmYpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSA0KSB7CisJICAgIGlmIChMTV9OdnJhbVJlYWQocERldmljZSwgb2Zmc2V0ICsgdmVyX29mZnNldCArIGksICZWYWx1ZTMyKSAhPQorCQlMTV9TVEFUVVNfU1VDQ0VTUykKKwkgICAgeworCQlyZXR1cm47CisJICAgIH0KKwkgICAgKigoTE1fVUlOVDMyICopICZwRGV2aWNlLT5Cb290Q29kZVZlcltpXSkgPSBjcHVfdG9fbGUzMihWYWx1ZTMyKTsKKwl9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBjaGFyIGM7CisJY2hhciBjOwogCi0gICAgICAgIGlmIChMTV9OdnJhbVJlYWQocERldmljZSwgMHg5NCwgJlZhbHVlMzIpICE9IExNX1NUQVRVU19TVUNDRVNTKQotICAgICAgICAgICAgcmV0dXJuOworCWlmIChMTV9OdnJhbVJlYWQocERldmljZSwgMHg5NCwgJlZhbHVlMzIpICE9IExNX1NUQVRVU19TVUNDRVNTKQorCSAgICByZXR1cm47CiAKLSAgICAgICAgaSA9IDA7Ci0gICAgICAgIGMgPSAoKFZhbHVlMzIgJiAweGZmMDAwMCkgPj4gMTYpOworCWkgPSAwOworCWMgPSAoKFZhbHVlMzIgJiAweGZmMDAwMCkgPj4gMTYpOwogCi0gICAgICAgIGlmIChjIDwgMTApIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPkJvb3RDb2RlVmVyW2krK10gPSBjICsgJzAnOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcERldmljZS0+Qm9vdENvZGVWZXJbaSsrXSA9IChjIC8gMTApICsgJzAnOwotICAgICAgICAgICAgcERldmljZS0+Qm9vdENvZGVWZXJbaSsrXSA9IChjICUgMTApICsgJzAnOwotICAgICAgICB9Ci0gICAgICAgIHBEZXZpY2UtPkJvb3RDb2RlVmVyW2krK10gPSAnLic7Ci0gICAgICAgIGMgPSAoVmFsdWUzMiAmIDB4ZmYwMDAwMDApID4+IDI0OwotICAgICAgICBpZiAoYyA8IDEwKSB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5Cb290Q29kZVZlcltpKytdID0gYyArICcwJzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPkJvb3RDb2RlVmVyW2krK10gPSAoYyAvIDEwKSArICcwJzsKLSAgICAgICAgICAgIHBEZXZpY2UtPkJvb3RDb2RlVmVyW2krK10gPSAoYyAlIDEwKSArICcwJzsKLSAgICAgICAgfQotICAgICAgICBwRGV2aWNlLT5Cb290Q29kZVZlcltpXSA9IDA7CisJaWYgKGMgPCAxMCkgeworCSAgICBwRGV2aWNlLT5Cb290Q29kZVZlcltpKytdID0gYyArICcwJzsKKwl9CisJZWxzZSB7CisJICAgIHBEZXZpY2UtPkJvb3RDb2RlVmVyW2krK10gPSAoYyAvIDEwKSArICcwJzsKKwkgICAgcERldmljZS0+Qm9vdENvZGVWZXJbaSsrXSA9IChjICUgMTApICsgJzAnOworCX0KKwlwRGV2aWNlLT5Cb290Q29kZVZlcltpKytdID0gJy4nOworCWMgPSAoVmFsdWUzMiAmIDB4ZmYwMDAwMDApID4+IDI0OworCWlmIChjIDwgMTApIHsKKwkgICAgcERldmljZS0+Qm9vdENvZGVWZXJbaSsrXSA9IGMgKyAnMCc7CisJfQorCWVsc2UgeworCSAgICBwRGV2aWNlLT5Cb290Q29kZVZlcltpKytdID0gKGMgLyAxMCkgKyAnMCc7CisJICAgIHBEZXZpY2UtPkJvb3RDb2RlVmVyW2krK10gPSAoYyAlIDEwKSArICcwJzsKKwl9CisJcERldmljZS0+Qm9vdENvZGVWZXJbaV0gPSAwOwogICAgIH0KIH0KIApAQCAtNjAyLDU3ICs1OTcsNTcgQEAKIAogICAgIGlmIChQY2lTdGF0ZSAmIFQzX1BDSV9TVEFURV8zMkJJVF9QQ0lfQlVTKQogICAgIHsKLSAgICAgICAgc3RyY3B5KHBEZXZpY2UtPkJ1c1NwZWVkU3RyLCAiMzItYml0ICIpOworCXN0cmNweShwRGV2aWNlLT5CdXNTcGVlZFN0ciwgIjMyLWJpdCAiKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgc3RyY3B5KHBEZXZpY2UtPkJ1c1NwZWVkU3RyLCAiNjQtYml0ICIpOworCXN0cmNweShwRGV2aWNlLT5CdXNTcGVlZFN0ciwgIjY0LWJpdCAiKTsKICAgICB9CiAgICAgaWYgKFBjaVN0YXRlICYgVDNfUENJX1NUQVRFX0NPTlZFTlRJT05BTF9QQ0lfTU9ERSkKICAgICB7Ci0gICAgICAgIHN0cmNhdChwRGV2aWNlLT5CdXNTcGVlZFN0ciwgIlBDSSAiKTsKLSAgICAgICAgaWYgKFBjaVN0YXRlICYgVDNfUENJX1NUQVRFX0hJR0hfQlVTX1NQRUVEKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGVlZFN0ciA9ICI2Nk1IeiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGVlZFN0ciA9ICIzM01IeiI7Ci0gICAgICAgIH0KKwlzdHJjYXQocERldmljZS0+QnVzU3BlZWRTdHIsICJQQ0kgIik7CisJaWYgKFBjaVN0YXRlICYgVDNfUENJX1NUQVRFX0hJR0hfQlVTX1NQRUVEKQorCXsKKwkgICAgU3BlZWRTdHIgPSAiNjZNSHoiOworCX0KKwllbHNlCisJeworCSAgICBTcGVlZFN0ciA9ICIzM01IeiI7CisJfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBzdHJjYXQocERldmljZS0+QnVzU3BlZWRTdHIsICJQQ0lYICIpOwotICAgICAgICBpZiAocERldmljZS0+Qm9uZElkID09IEdSQ19NSVNDX0JEX0lEXzU3MDRDSU9CRSkKLSAgICAgICAgewotICAgICAgICAgICAgU3BlZWRTdHIgPSAiMTMzTUh6IjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIENsb2NrQ3RybCA9IFJFR19SRChwRGV2aWNlLCBQY2lDZmcuQ2xvY2tDdHJsKSAmIDB4MWY7Ci0gICAgICAgICAgICBzd2l0Y2ggKENsb2NrQ3RybCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBTcGVlZFN0ciA9ICIzM01IeiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJc3RyY2F0KHBEZXZpY2UtPkJ1c1NwZWVkU3RyLCAiUENJWCAiKTsKKwlpZiAocERldmljZS0+Qm9uZElkID09IEdSQ19NSVNDX0JEX0lEXzU3MDRDSU9CRSkKKwl7CisJICAgIFNwZWVkU3RyID0gIjEzM01IeiI7CisJfQorCWVsc2UKKwl7CisJICAgIENsb2NrQ3RybCA9IFJFR19SRChwRGV2aWNlLCBQY2lDZmcuQ2xvY2tDdHJsKSAmIDB4MWY7CisJICAgIHN3aXRjaCAoQ2xvY2tDdHJsKQorCSAgICB7CisJICAgIGNhc2UgMDoKKwkJU3BlZWRTdHIgPSAiMzNNSHoiOworCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIFNwZWVkU3RyID0gIjUwTUh6IjsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgY2FzZSAyOgorCQlTcGVlZFN0ciA9ICI1ME1IeiI7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgU3BlZWRTdHIgPSAiNjZNSHoiOwotICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIDQ6CisJCVNwZWVkU3RyID0gIjY2TUh6IjsKKwkJYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAgICBTcGVlZFN0ciA9ICIxMDBNSHoiOwotICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIDY6CisJCVNwZWVkU3RyID0gIjEwME1IeiI7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICAgICAgU3BlZWRTdHIgPSAiMTMzTUh6IjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCSAgICBjYXNlIDc6CisJCVNwZWVkU3RyID0gIjEzM01IeiI7CisJCWJyZWFrOworCSAgICB9CisJfQogICAgIH0KICAgICBzdHJjYXQocERldmljZS0+QnVzU3BlZWRTdHIsIFNwZWVkU3RyKTsKIH0KQEAgLTY4Miw3ICs2NzcsNyBAQAogICAgIFN0YXR1cyA9IE1NX1JlYWRDb25maWczMihwRGV2aWNlLCBQQ0lfVkVORE9SX0lEX1JFRywgJlZhbHVlMzIpOwogICAgIGlmKFN0YXR1cyAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKICAgICB7Ci0gICAgICAgIHJldHVybiBTdGF0dXM7CisJcmV0dXJuIFN0YXR1czsKICAgICB9CiAgICAgcERldmljZS0+UGNpVmVuZG9ySWQgPSAoTE1fVUlOVDE2KSBWYWx1ZTMyOwogICAgIHBEZXZpY2UtPlBjaURldmljZUlkID0gKExNX1VJTlQxNikgKFZhbHVlMzIgPj4gMTYpOwpAQCAtNjk3LDEzICs2OTIsMTMgQEAKICAgICAgICAoVmFsdWUzMiAhPSBUM19QQ0lfSURfQkNNNTcwM3gpICYmCiAgICAgICAgKFZhbHVlMzIgIT0gVDNfUENJX0lEX0JDTTU3MDQpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOworCXJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKICAgICB9CiAKICAgICBTdGF0dXMgPSBNTV9SZWFkQ29uZmlnMzIocERldmljZSwgUENJX1JFVl9JRF9SRUcsICZWYWx1ZTMyKTsKICAgICBpZihTdGF0dXMgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCiAgICAgewotICAgICAgICByZXR1cm4gU3RhdHVzOworCXJldHVybiBTdGF0dXM7CiAgICAgfQogICAgIHBEZXZpY2UtPlBjaVJldklkID0gKExNX1VJTlQ4KSBWYWx1ZTMyOwogCkBAIC03MTEsNyArNzA2LDcgQEAKICAgICBTdGF0dXMgPSBNTV9SZWFkQ29uZmlnMzIocERldmljZSwgUENJX0lOVF9MSU5FX1JFRywgJlZhbHVlMzIpOwogICAgIGlmKFN0YXR1cyAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKICAgICB7Ci0gICAgICAgIHJldHVybiBTdGF0dXM7CisJcmV0dXJuIFN0YXR1czsKICAgICB9CiAgICAgcERldmljZS0+SXJxID0gKExNX1VJTlQ4KSBWYWx1ZTMyOwogCkBAIC03MjYsNyArNzIxLDcgQEAKICAgICBTdGF0dXMgPSBNTV9SZWFkQ29uZmlnMzIocERldmljZSwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSURfUkVHLCAmVmFsdWUzMik7CiAgICAgaWYoU3RhdHVzICE9IExNX1NUQVRVU19TVUNDRVNTKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0YXR1czsKKwlyZXR1cm4gU3RhdHVzOwogICAgIH0KICAgICBwRGV2aWNlLT5TdWJzeXN0ZW1WZW5kb3JJZCA9IChMTV9VSU5UMTYpIFZhbHVlMzI7CiAKQEAgLTczOSwxMCArNzM0LDEwIEBACiAgICAgcERldmljZS0+U2F2ZWRDYWNoZUxpbmVSZWcgPSBWYWx1ZTMyOwogCiAgICAgaWYocERldmljZS0+Q2hpcFJldklkICE9IFQzX0NISVBfSURfNTcwM19BMSAmJgotICAgICAgICBwRGV2aWNlLT5DaGlwUmV2SWQgIT0gVDNfQ0hJUF9JRF81NzAzX0EyICYmCi0gICAgICAgIHBEZXZpY2UtPkNoaXBSZXZJZCAhPSBUM19DSElQX0lEXzU3MDRfQTApCisJcERldmljZS0+Q2hpcFJldklkICE9IFQzX0NISVBfSURfNTcwM19BMiAmJgorCXBEZXZpY2UtPkNoaXBSZXZJZCAhPSBUM19DSElQX0lEXzU3MDRfQTApCiAgICAgewotICAgICAgICBwRGV2aWNlLT5VbmRpRml4ID0gRkFMU0U7CisJcERldmljZS0+VW5kaUZpeCA9IEZBTFNFOwogICAgIH0KICNpZiAhUENJWF9UQVJHRVRfV09SS0FST1VORAogICAgIHBEZXZpY2UtPlVuZGlGaXggPSBGQUxTRTsKQEAgLTc1MCwxMyArNzQ1LDEzIEBACiAgICAgLyogTWFwIHRoZSBtZW1vcnkgYmFzZSB0byBzeXN0ZW0gYWRkcmVzcyBzcGFjZS4gKi8KICAgICBpZiAoIXBEZXZpY2UtPlVuZGlGaXgpCiAgICAgewotICAgICAgICBTdGF0dXMgPSBNTV9NYXBNZW1CYXNlKHBEZXZpY2UpOwotICAgICAgICBpZihTdGF0dXMgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBTdGF0dXM7Ci0gICAgICAgIH0KLSAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgbWVtb3J5IHZpZXcgcG9pbnRlci4gKi8KLSAgICAgICAgcERldmljZS0+cE1lbVZpZXcgPSAoUFQzX1NURF9NRU1fTUFQKSBwRGV2aWNlLT5wTWFwcGVkTWVtQmFzZTsKKwlTdGF0dXMgPSBNTV9NYXBNZW1CYXNlKHBEZXZpY2UpOworCWlmKFN0YXR1cyAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKKwl7CisJICAgIHJldHVybiBTdGF0dXM7CisJfQorCS8qIEluaXRpYWxpemUgdGhlIG1lbW9yeSB2aWV3IHBvaW50ZXIuICovCisJcERldmljZS0+cE1lbVZpZXcgPSAoUFQzX1NURF9NRU1fTUFQKSBwRGV2aWNlLT5wTWFwcGVkTWVtQmFzZTsKICAgICB9CiAKICNpZiBQQ0lYX1RBUkdFVF9XT1JLQVJPVU5ECkBAIC03NjYsMTUgKzc2MSwxNSBAQAogICAgIE1NX1JlYWRDb25maWczMihwRGV2aWNlLCBUM19QQ0lfU1RBVEVfUkVHLCAmVmFsdWUzMik7CiAgICAgaWYoKFZhbHVlMzIgJiBUM19QQ0lfU1RBVEVfQ09OVkVOVElPTkFMX1BDSV9NT0RFKSA9PSAwKQogICAgIHsKLSAgICAgICAgLyogRW5hYmxlIFBDSS1YIHdvcmthcm91bmQgb25seSBpZiB3ZSBhcmUgcnVubmluZyBvbiA1NzAwIEJYLiAqLwotICAgICAgICBpZihUM19DSElQX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0NISVBfUkVWXzU3MDBfQlgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPkVuYWJsZVBjaVhGaXggPSBUUlVFOwotICAgICAgICB9CisJLyogRW5hYmxlIFBDSS1YIHdvcmthcm91bmQgb25seSBpZiB3ZSBhcmUgcnVubmluZyBvbiA1NzAwIEJYLiAqLworCWlmKFQzX0NISVBfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQ0hJUF9SRVZfNTcwMF9CWCkKKwl7CisJICAgIHBEZXZpY2UtPkVuYWJsZVBjaVhGaXggPSBUUlVFOworCX0KICAgICB9CiAgICAgaWYgKHBEZXZpY2UtPlVuZGlGaXgpCiAgICAgewotICAgICAgICBwRGV2aWNlLT5FbmFibGVQY2lYRml4ID0gVFJVRTsKKwlwRGV2aWNlLT5FbmFibGVQY2lYRml4ID0gVFJVRTsKICAgICB9CiAjZW5kaWYKICAgICAvKiBCeCBidWc6IGR1ZSB0byB0aGUgImJ5dGVfZW5hYmxlIGJ1ZyIgaW4gUENJLVggbW9kZSwgdGhlIHBvd2VyICovCkBAIC03OTYsMzAgKzc5MSwzMCBAQAogCiAjaWYgUENJWF9UQVJHRVRfV09SS0FST1VORAogICAgIC8qIGlmIHdlIGFyZSBpbiBQQ0ktWCBtb2RlLCBhbHNvIG1ha2Ugc3VyZSBtZW0tbWFwcGluZyBhbmQgU0VSUiMvUEVSUiMKLSAgICAgICAgYXJlIGVuYWJsZWQgKi8KKwlhcmUgZW5hYmxlZCAqLwogICAgIGlmIChwRGV2aWNlLT5FbmFibGVQY2lYRml4ID09IFRSVUUpIHsKLSAgICAgICAgVmFsdWUzMiB8PSAoUENJX01FTV9TUEFDRV9FTkFCTEUgfCBQQ0lfU1lTVEVNX0VSUk9SX0VOQUJMRSB8Ci0gICAgICAgICAgICAgICAgICAgIFBDSV9QQVJJVFlfRVJST1JfRU5BQkxFKTsKKwlWYWx1ZTMyIHw9IChQQ0lfTUVNX1NQQUNFX0VOQUJMRSB8IFBDSV9TWVNURU1fRVJST1JfRU5BQkxFIHwKKwkJICAgIFBDSV9QQVJJVFlfRVJST1JfRU5BQkxFKTsKICAgICB9CiAgICAgaWYgKHBEZXZpY2UtPlVuZGlGaXgpCiAgICAgewotICAgICAgICBWYWx1ZTMyICY9IH5QQ0lfTUVNX1NQQUNFX0VOQUJMRTsKKwlWYWx1ZTMyICY9IH5QQ0lfTUVNX1NQQUNFX0VOQUJMRTsKICAgICB9CiAKICNlbmRpZgogCiAgICAgaWYocERldmljZS0+RW5hYmxlTVdJKQogICAgIHsKLSAgICAgICAgVmFsdWUzMiB8PSBQQ0lfTUVNT1JZX1dSSVRFX0lOVkFMSURBVEU7CisJVmFsdWUzMiB8PSBQQ0lfTUVNT1JZX1dSSVRFX0lOVkFMSURBVEU7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBWYWx1ZTMyICY9ICh+UENJX01FTU9SWV9XUklURV9JTlZBTElEQVRFKTsKKwlWYWx1ZTMyICY9ICh+UENJX01FTU9SWV9XUklURV9JTlZBTElEQVRFKTsKICAgICB9CiAKICAgICAvKiBFcnJvciBvdXQgaWYgbWVtLW1hcHBpbmcgaXMgTk9UIGVuYWJsZWQgZm9yIFBDSSBzeXN0ZW1zICovCiAgICAgaWYgKCEoVmFsdWUzMiB8IFBDSV9NRU1fU1BBQ0VfRU5BQkxFKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKKwlyZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7CiAgICAgfQogCiAgICAgLyogc2F2ZSB0aGUgdmFsdWUgd2UgYXJlIGdvaW5nIHRvIHdyaXRlIGludG8gdGhlIFBDSSBjb21tYW5kIHdvcmQgKi8KQEAgLTgyOCw3ICs4MjMsNyBAQAogICAgIFN0YXR1cyA9IE1NX1dyaXRlQ29uZmlnMzIocERldmljZSwgUENJX0NPTU1BTkRfUkVHLCBWYWx1ZTMyKTsKICAgICBpZihTdGF0dXMgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCiAgICAgewotICAgICAgICByZXR1cm4gU3RhdHVzOworCXJldHVybiBTdGF0dXM7CiAgICAgfQogCiAgICAgLyogU2V0IHBvd2VyIHN0YXRlIHRvIEQwLiAqLwpAQCAtODM2LDIxICs4MzEsMjEgQEAKIAogI2lmZGVmIEJJR19FTkRJQU5fUENJCiAgICAgcERldmljZS0+TWlzY0hvc3RDdHJsID0KLSAgICAgICAgTUlTQ19IT1NUX0NUUkxfTUFTS19QQ0lfSU5UIHwKLSAgICAgICAgTUlTQ19IT1NUX0NUUkxfRU5BQkxFX0lORElSRUNUX0FDQ0VTUyB8Ci0gICAgICAgIE1JU0NfSE9TVF9DVFJMX0VOQUJMRV9FTkRJQU5fV09SRF9TV0FQIHwKLSAgICAgICAgTUlTQ19IT1NUX0NUUkxfRU5BQkxFX1BDSV9TVEFURV9SRUdfUlc7CisJTUlTQ19IT1NUX0NUUkxfTUFTS19QQ0lfSU5UIHwKKwlNSVNDX0hPU1RfQ1RSTF9FTkFCTEVfSU5ESVJFQ1RfQUNDRVNTIHwKKwlNSVNDX0hPU1RfQ1RSTF9FTkFCTEVfRU5ESUFOX1dPUkRfU1dBUCB8CisJTUlTQ19IT1NUX0NUUkxfRU5BQkxFX1BDSV9TVEFURV9SRUdfUlc7CiAjZWxzZSAvKiBObyBDUFUgU3dhcCBtb2RlcyBmb3IgUENJIElPICovCiAKICAgICAvKiBTZXR1cCB0aGUgbW9kZSByZWdpc3RlcnMuICovCiAgICAgcERldmljZS0+TWlzY0hvc3RDdHJsID0KLSAgICAgICAgTUlTQ19IT1NUX0NUUkxfTUFTS19QQ0lfSU5UIHwKLSAgICAgICAgTUlTQ19IT1NUX0NUUkxfRU5BQkxFX0VORElBTl9XT1JEX1NXQVAgfAorCU1JU0NfSE9TVF9DVFJMX01BU0tfUENJX0lOVCB8CisJTUlTQ19IT1NUX0NUUkxfRU5BQkxFX0VORElBTl9XT1JEX1NXQVAgfAogI2lmZGVmIEJJR19FTkRJQU5fSE9TVAotICAgICAgICBNSVNDX0hPU1RfQ1RSTF9FTkFCTEVfRU5ESUFOX0JZVEVfU1dBUCB8CisJTUlTQ19IT1NUX0NUUkxfRU5BQkxFX0VORElBTl9CWVRFX1NXQVAgfAogI2VuZGlmIC8qIEJJR19FTkRJQU5fSE9TVCAqLwotICAgICAgICBNSVNDX0hPU1RfQ1RSTF9FTkFCTEVfSU5ESVJFQ1RfQUNDRVNTIHwKLSAgICAgICAgTUlTQ19IT1NUX0NUUkxfRU5BQkxFX1BDSV9TVEFURV9SRUdfUlc7CisJTUlTQ19IT1NUX0NUUkxfRU5BQkxFX0lORElSRUNUX0FDQ0VTUyB8CisJTUlTQ19IT1NUX0NUUkxfRU5BQkxFX1BDSV9TVEFURV9SRUdfUlc7CiAjZW5kaWYgLyogIUJJR19FTkRJQU5fUENJICovCiAKICAgICAvKiB3cml0ZSB0byBQQ0kgbWlzYyBob3N0IGN0ciBmaXJzdCBpbiBvcmRlciB0byBlbmFibGUgaW5kaXJlY3QgYWNjZXNzZXMgKi8KQEAgLTg2NSw3ICs4NjAsNyBAQAogLyogTm8gQ1BVIFN3YXAgbW9kZXMgZm9yIFBDSSBJTyAqLwogI2lmZGVmIEJJR19FTkRJQU5fSE9TVAogICAgIFZhbHVlMzIgPSBHUkNfTU9ERV9CWVRFX1NXQVBfTk9OX0ZSQU1FX0RBVEEgfAotICAgICAgICAgICAgICBHUkNfTU9ERV9XT1JEX1NXQVBfTk9OX0ZSQU1FX0RBVEE7CisJICAgICAgR1JDX01PREVfV09SRF9TV0FQX05PTl9GUkFNRV9EQVRBOwogI2Vsc2UKICAgICBWYWx1ZTMyID0gR1JDX01PREVfQllURV9TV0FQX05PTl9GUkFNRV9EQVRBIHwgR1JDX01PREVfQllURV9TV0FQX0RBVEE7CiAjZW5kaWYKQEAgLTg3NSw4ICs4NzAsOCBAQAogCiAgICAgaWYoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwKQogICAgIHsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIEdyYy5Mb2NhbEN0cmwsIEdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PVVRQVVQxIHwKLSAgICAgICAgICAgIEdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PRTEpOworCVJFR19XUihwRGV2aWNlLCBHcmMuTG9jYWxDdHJsLCBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT1VUUFVUMSB8CisJICAgIEdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PRTEpOwogICAgIH0KICAgICBNTV9XYWl0KDQwKTsKIApAQCAtODg1LDEwICs4ODAsMTAgQEAKIAogICAgIGlmIChSRUdfUkQocERldmljZSwgUGNpQ2ZnLkNsb2NrQ3RybCkgJiBUM19QQ0lfNDRNSFpfQ09SRV9DTE9DSykKICAgICB7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBQY2lDZmcuQ2xvY2tDdHJsLCBUM19QQ0lfNDRNSFpfQ09SRV9DTE9DSyB8Ci0gICAgICAgICAgICAgICAgVDNfUENJX1NFTEVDVF9BTFRFUk5BVEVfQ0xPQ0spOwotICAgICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLkNsb2NrQ3RybCwgVDNfUENJX1NFTEVDVF9BTFRFUk5BVEVfQ0xPQ0spOwotICAgICAgICBNTV9XYWl0KDQwKTsgIC8qIHJlcXVpcmVkIGRlbGF5IGlzIDI3dXNlYyAqLworCVJFR19XUihwRGV2aWNlLCBQY2lDZmcuQ2xvY2tDdHJsLCBUM19QQ0lfNDRNSFpfQ09SRV9DTE9DSyB8CisJCVQzX1BDSV9TRUxFQ1RfQUxURVJOQVRFX0NMT0NLKTsKKwlSRUdfV1IocERldmljZSwgUGNpQ2ZnLkNsb2NrQ3RybCwgVDNfUENJX1NFTEVDVF9BTFRFUk5BVEVfQ0xPQ0spOworCU1NX1dhaXQoNDApOyAgLyogcmVxdWlyZWQgZGVsYXkgaXMgMjd1c2VjICovCiAgICAgfQogICAgIFJFR19XUihwRGV2aWNlLCBQY2lDZmcuQ2xvY2tDdHJsLCAwKTsKICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLk1lbVdpbmRvd0Jhc2VBZGRyLCAwKTsKQEAgLTg5NiwyMSArODkxLDIxIEBACiAjaWYgUENJWF9UQVJHRVRfV09SS0FST1VORAogICAgIE1NX1JlYWRDb25maWczMihwRGV2aWNlLCBUM19QQ0lfU1RBVEVfUkVHLCAmVmFsdWUzMik7CiAgICAgaWYgKChwRGV2aWNlLT5FbmFibGVQY2lYRml4ID09IEZBTFNFKSAmJgotICAgICAgICAoKFZhbHVlMzIgJiBUM19QQ0lfU1RBVEVfQ09OVkVOVElPTkFMX1BDSV9NT0RFKSA9PSAwKSkKKwkoKFZhbHVlMzIgJiBUM19QQ0lfU1RBVEVfQ09OVkVOVElPTkFMX1BDSV9NT0RFKSA9PSAwKSkKICAgICB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0EwIHx8Ci0gICAgICAgICAgICBwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0IwIHx8Ci0gICAgICAgICAgICBwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0IyIHx8Ci0gICAgICAgICAgICBwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0I1KQotICAgICAgICB7Ci0gICAgICAgICAgICBfX3Jhd193cml0ZWwoMCwgJihwRGV2aWNlLT5wTWVtVmlldy0+dUludE1lbS5NZW1CbG9jazMyS1sweDMwMF0pKTsKLSAgICAgICAgICAgIF9fcmF3X3dyaXRlbCgwLCAmKHBEZXZpY2UtPnBNZW1WaWV3LT51SW50TWVtLk1lbUJsb2NrMzJLWzB4MzAxXSkpOwotICAgICAgICAgICAgX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsICYocERldmljZS0+cE1lbVZpZXctPnVJbnRNZW0uTWVtQmxvY2szMktbMHgzMDFdKSk7Ci0gICAgICAgICAgICBpZiAoX19yYXdfcmVhZGwoJihwRGV2aWNlLT5wTWVtVmlldy0+dUludE1lbS5NZW1CbG9jazMyS1sweDMwMF0pKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5FbmFibGVQY2lYRml4ID0gVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmIChwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0EwIHx8CisJICAgIHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDFfQjAgfHwKKwkgICAgcERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwMV9CMiB8fAorCSAgICBwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0I1KQorCXsKKwkgICAgX19yYXdfd3JpdGVsKDAsICYocERldmljZS0+cE1lbVZpZXctPnVJbnRNZW0uTWVtQmxvY2szMktbMHgzMDBdKSk7CisJICAgIF9fcmF3X3dyaXRlbCgwLCAmKHBEZXZpY2UtPnBNZW1WaWV3LT51SW50TWVtLk1lbUJsb2NrMzJLWzB4MzAxXSkpOworCSAgICBfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgJihwRGV2aWNlLT5wTWVtVmlldy0+dUludE1lbS5NZW1CbG9jazMyS1sweDMwMV0pKTsKKwkgICAgaWYgKF9fcmF3X3JlYWRsKCYocERldmljZS0+cE1lbVZpZXctPnVJbnRNZW0uTWVtQmxvY2szMktbMHgzMDBdKSkpCisJICAgIHsKKwkJcERldmljZS0+RW5hYmxlUGNpWEZpeCA9IFRSVUU7CisJICAgIH0KKwl9CiAgICAgfQogI2VuZGlmCiAjaWYgMQpAQCAtOTI3LDQ0ICs5MjIsNDQgQEAKICAgICBpZigoVmFsdWUzMiA+PiAxNikgPT0gMHg0ODRiKQogICAgIHsKIAotICAgICAgICBwRGV2aWNlLT5Ob2RlQWRkcmVzc1swXSA9IChMTV9VSU5UOCkgKFZhbHVlMzIgPj4gOCk7Ci0gICAgICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzFdID0gKExNX1VJTlQ4KSBWYWx1ZTMyOworCXBEZXZpY2UtPk5vZGVBZGRyZXNzWzBdID0gKExNX1VJTlQ4KSAoVmFsdWUzMiA+PiA4KTsKKwlwRGV2aWNlLT5Ob2RlQWRkcmVzc1sxXSA9IChMTV9VSU5UOCkgVmFsdWUzMjsKIAotICAgICAgICBWYWx1ZTMyID0gTUVNX1JEX09GRlNFVChwRGV2aWNlLCBUM19NQUNfQUREUl9MT1dfTUFJTEJPWCk7CisJVmFsdWUzMiA9IE1FTV9SRF9PRkZTRVQocERldmljZSwgVDNfTUFDX0FERFJfTE9XX01BSUxCT1gpOwogCi0gICAgICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzJdID0gKExNX1VJTlQ4KSAoVmFsdWUzMiA+PiAyNCk7Ci0gICAgICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzNdID0gKExNX1VJTlQ4KSAoVmFsdWUzMiA+PiAxNik7Ci0gICAgICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzRdID0gKExNX1VJTlQ4KSAoVmFsdWUzMiA+PiA4KTsKLSAgICAgICAgcERldmljZS0+Tm9kZUFkZHJlc3NbNV0gPSAoTE1fVUlOVDgpIFZhbHVlMzI7CisJcERldmljZS0+Tm9kZUFkZHJlc3NbMl0gPSAoTE1fVUlOVDgpIChWYWx1ZTMyID4+IDI0KTsKKwlwRGV2aWNlLT5Ob2RlQWRkcmVzc1szXSA9IChMTV9VSU5UOCkgKFZhbHVlMzIgPj4gMTYpOworCXBEZXZpY2UtPk5vZGVBZGRyZXNzWzRdID0gKExNX1VJTlQ4KSAoVmFsdWUzMiA+PiA4KTsKKwlwRGV2aWNlLT5Ob2RlQWRkcmVzc1s1XSA9IChMTV9VSU5UOCkgVmFsdWUzMjsKIAotICAgICAgICBTdGF0dXMgPSBMTV9TVEFUVVNfU1VDQ0VTUzsKKwlTdGF0dXMgPSBMTV9TVEFUVVNfU1VDQ0VTUzsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgU3RhdHVzID0gTE1fTnZyYW1SZWFkKHBEZXZpY2UsIDB4N2MsICZWYWx1ZTMyKTsKLSAgICAgICAgaWYoU3RhdHVzID09IExNX1NUQVRVU19TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5Ob2RlQWRkcmVzc1swXSA9IChMTV9VSU5UOCkgKFZhbHVlMzIgPj4gMTYpOwotICAgICAgICAgICAgcERldmljZS0+Tm9kZUFkZHJlc3NbMV0gPSAoTE1fVUlOVDgpIChWYWx1ZTMyID4+IDI0KTsKKwlTdGF0dXMgPSBMTV9OdnJhbVJlYWQocERldmljZSwgMHg3YywgJlZhbHVlMzIpOworCWlmKFN0YXR1cyA9PSBMTV9TVEFUVVNfU1VDQ0VTUykKKwl7CisJICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzBdID0gKExNX1VJTlQ4KSAoVmFsdWUzMiA+PiAxNik7CisJICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzFdID0gKExNX1VJTlQ4KSAoVmFsdWUzMiA+PiAyNCk7CiAKLSAgICAgICAgICAgIFN0YXR1cyA9IExNX052cmFtUmVhZChwRGV2aWNlLCAweDgwLCAmVmFsdWUzMik7CisJICAgIFN0YXR1cyA9IExNX052cmFtUmVhZChwRGV2aWNlLCAweDgwLCAmVmFsdWUzMik7CiAKLSAgICAgICAgICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzJdID0gKExNX1VJTlQ4KSBWYWx1ZTMyOwotICAgICAgICAgICAgcERldmljZS0+Tm9kZUFkZHJlc3NbM10gPSAoTE1fVUlOVDgpIChWYWx1ZTMyID4+IDgpOwotICAgICAgICAgICAgcERldmljZS0+Tm9kZUFkZHJlc3NbNF0gPSAoTE1fVUlOVDgpIChWYWx1ZTMyID4+IDE2KTsKLSAgICAgICAgICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzVdID0gKExNX1VJTlQ4KSAoVmFsdWUzMiA+PiAyNCk7Ci0gICAgICAgIH0KKwkgICAgcERldmljZS0+Tm9kZUFkZHJlc3NbMl0gPSAoTE1fVUlOVDgpIFZhbHVlMzI7CisJICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzNdID0gKExNX1VJTlQ4KSAoVmFsdWUzMiA+PiA4KTsKKwkgICAgcERldmljZS0+Tm9kZUFkZHJlc3NbNF0gPSAoTE1fVUlOVDgpIChWYWx1ZTMyID4+IDE2KTsKKwkgICAgcERldmljZS0+Tm9kZUFkZHJlc3NbNV0gPSAoTE1fVUlOVDgpIChWYWx1ZTMyID4+IDI0KTsKKwl9CiAgICAgfQogCiAgICAgLyogQXNzaWduIGEgZGVmYXVsdCBhZGRyZXNzLiAqLwogICAgIGlmKFN0YXR1cyAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKICAgICB7CiAjaWZuZGVmIEVNQkVEREVECi0gICAgICAgIHByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGdldCBNQUMgYWRkciBmcm9tIE5WUkFNLiBVc2luZyBkZWZhdWx0LlxuIik7CisJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZ2V0IE1BQyBhZGRyIGZyb20gTlZSQU0uIFVzaW5nIGRlZmF1bHQuXG4iKTsKICNlbmRpZgotICAgICAgICBwRGV2aWNlLT5Ob2RlQWRkcmVzc1swXSA9IDB4MDA7IHBEZXZpY2UtPk5vZGVBZGRyZXNzWzFdID0gMHgxMDsKLSAgICAgICAgcERldmljZS0+Tm9kZUFkZHJlc3NbMl0gPSAweDE4OyBwRGV2aWNlLT5Ob2RlQWRkcmVzc1szXSA9IDB4Njg7Ci0gICAgICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzRdID0gMHg2MTsgcERldmljZS0+Tm9kZUFkZHJlc3NbNV0gPSAweDc2OworCXBEZXZpY2UtPk5vZGVBZGRyZXNzWzBdID0gMHgwMDsgcERldmljZS0+Tm9kZUFkZHJlc3NbMV0gPSAweDEwOworCXBEZXZpY2UtPk5vZGVBZGRyZXNzWzJdID0gMHgxODsgcERldmljZS0+Tm9kZUFkZHJlc3NbM10gPSAweDY4OworCXBEZXZpY2UtPk5vZGVBZGRyZXNzWzRdID0gMHg2MTsgcERldmljZS0+Tm9kZUFkZHJlc3NbNV0gPSAweDc2OwogICAgIH0KIAogICAgIHBEZXZpY2UtPlBlcm1hbmVudE5vZGVBZGRyZXNzWzBdID0gcERldmljZS0+Tm9kZUFkZHJlc3NbMF07CkBAIC0xMDE2LDEzICsxMDExLDEzIEBACiAgICAgc3dpdGNoIChUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpKQogICAgIHsKICAgICBjYXNlIFQzX0FTSUNfUkVWXzU3MDQ6Ci0gICAgICAgIHBEZXZpY2UtPk1idWZCYXNlID0gVDNfTklDX01CVUZfUE9PTF9BRERSOwotICAgICAgICBwRGV2aWNlLT5NYnVmU2l6ZSA9IFQzX05JQ19NQlVGX1BPT0xfU0laRTY0OwotICAgICAgICBicmVhazsKKwlwRGV2aWNlLT5NYnVmQmFzZSA9IFQzX05JQ19NQlVGX1BPT0xfQUREUjsKKwlwRGV2aWNlLT5NYnVmU2l6ZSA9IFQzX05JQ19NQlVGX1BPT0xfU0laRTY0OworCWJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHBEZXZpY2UtPk1idWZCYXNlID0gVDNfTklDX01CVUZfUE9PTF9BRERSOwotICAgICAgICBwRGV2aWNlLT5NYnVmU2l6ZSA9IFQzX05JQ19NQlVGX1BPT0xfU0laRTk2OwotICAgICAgICBicmVhazsKKwlwRGV2aWNlLT5NYnVmQmFzZSA9IFQzX05JQ19NQlVGX1BPT0xfQUREUjsKKwlwRGV2aWNlLT5NYnVmU2l6ZSA9IFQzX05JQ19NQlVGX1BPT0xfU0laRTk2OworCWJyZWFrOwogICAgIH0KIAogICAgIHBEZXZpY2UtPkxpbmtTdGF0dXMgPSBMTV9TVEFUVVNfTElOS19ET1dOOwpAQCAtMTAzNiwxMTcgKzEwMzEsMTE3IEBACiAKICAgICAvKiBNYWtlIHRoaXMgaXMgYSBrbm93biBhZGFwdGVyLiAqLwogICAgIHBBZGFwdGVySW5mbyA9IExNX0dldEFkYXB0ZXJJbmZvQnlTc2lkKHBEZXZpY2UtPlN1YnN5c3RlbVZlbmRvcklkLAotICAgICAgICBwRGV2aWNlLT5TdWJzeXN0ZW1JZCk7CisJcERldmljZS0+U3Vic3lzdGVtSWQpOwogCiAgICAgcERldmljZS0+Qm9uZElkID0gUkVHX1JEKHBEZXZpY2UsIEdyYy5NaXNjQ2ZnKSAmIEdSQ19NSVNDX0JEX0lEX01BU0s7CiAgICAgaWYgKHBEZXZpY2UtPkJvbmRJZCAhPSBHUkNfTUlTQ19CRF9JRF81NzAwICYmCi0gICAgICAgIHBEZXZpY2UtPkJvbmRJZCAhPSBHUkNfTUlTQ19CRF9JRF81NzAxICYmCi0gICAgICAgIHBEZXZpY2UtPkJvbmRJZCAhPSBHUkNfTUlTQ19CRF9JRF81NzAyRkUgJiYKLSAgICAgICAgcERldmljZS0+Qm9uZElkICE9IEdSQ19NSVNDX0JEX0lEXzU3MDMgJiYKLSAgICAgICAgcERldmljZS0+Qm9uZElkICE9IEdSQ19NSVNDX0JEX0lEXzU3MDNTICYmCi0gICAgICAgIHBEZXZpY2UtPkJvbmRJZCAhPSBHUkNfTUlTQ19CRF9JRF81NzA0ICYmCi0gICAgICAgIHBEZXZpY2UtPkJvbmRJZCAhPSBHUkNfTUlTQ19CRF9JRF81NzA0Q0lPQkUpCisJcERldmljZS0+Qm9uZElkICE9IEdSQ19NSVNDX0JEX0lEXzU3MDEgJiYKKwlwRGV2aWNlLT5Cb25kSWQgIT0gR1JDX01JU0NfQkRfSURfNTcwMkZFICYmCisJcERldmljZS0+Qm9uZElkICE9IEdSQ19NSVNDX0JEX0lEXzU3MDMgJiYKKwlwRGV2aWNlLT5Cb25kSWQgIT0gR1JDX01JU0NfQkRfSURfNTcwM1MgJiYKKwlwRGV2aWNlLT5Cb25kSWQgIT0gR1JDX01JU0NfQkRfSURfNTcwNCAmJgorCXBEZXZpY2UtPkJvbmRJZCAhPSBHUkNfTUlTQ19CRF9JRF81NzA0Q0lPQkUpCiAgICAgewotICAgICAgICByZXR1cm4gTE1fU1RBVFVTX1VOS05PV05fQURBUFRFUjsKKwlyZXR1cm4gTE1fU1RBVFVTX1VOS05PV05fQURBUFRFUjsKICAgICB9CiAKICAgICBwRGV2aWNlLT5TcGxpdE1vZGVFbmFibGUgPSBTUExJVF9NT0RFX0RJU0FCTEU7CiAgICAgaWYgKChwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzA0X0EwKSAmJgotICAgICAgICAocERldmljZS0+Qm9uZElkID09IEdSQ19NSVNDX0JEX0lEXzU3MDRDSU9CRSkpCisJKHBEZXZpY2UtPkJvbmRJZCA9PSBHUkNfTUlTQ19CRF9JRF81NzA0Q0lPQkUpKQogICAgIHsKLSAgICAgICAgcERldmljZS0+U3BsaXRNb2RlRW5hYmxlID0gU1BMSVRfTU9ERV9FTkFCTEU7Ci0gICAgICAgIHBEZXZpY2UtPlNwbGl0TW9kZU1heFJlcSA9IFNQTElUX01PREVfNTcwNF9NQVhfUkVROworCXBEZXZpY2UtPlNwbGl0TW9kZUVuYWJsZSA9IFNQTElUX01PREVfRU5BQkxFOworCXBEZXZpY2UtPlNwbGl0TW9kZU1heFJlcSA9IFNQTElUX01PREVfNTcwNF9NQVhfUkVROwogICAgIH0KIAogICAgIC8qIEdldCBFZXByb20gaW5mby4gKi8KICAgICBWYWx1ZTMyID0gTUVNX1JEX09GRlNFVChwRGV2aWNlLCBUM19OSUNfREFUQV9TSUdfQUREUik7CiAgICAgaWYgKFZhbHVlMzIgPT0gVDNfTklDX0RBVEFfU0lHKQogICAgIHsKLSAgICAgICAgRWVTaWdGb3VuZCA9IFRSVUU7Ci0gICAgICAgIFZhbHVlMzIgPSBNRU1fUkRfT0ZGU0VUKHBEZXZpY2UsIFQzX05JQ19EQVRBX05JQ19DRkdfQUREUik7CisJRWVTaWdGb3VuZCA9IFRSVUU7CisJVmFsdWUzMiA9IE1FTV9SRF9PRkZTRVQocERldmljZSwgVDNfTklDX0RBVEFfTklDX0NGR19BRERSKTsKIAotICAgICAgICAvKiBEZXRlcm1pbmUgUEhZIHR5cGUuICovCi0gICAgICAgIHN3aXRjaCAoVmFsdWUzMiAmIFQzX05JQ19DRkdfUEhZX1RZUEVfTUFTSykKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBUM19OSUNfQ0ZHX1BIWV9UWVBFX0NPUFBFUjoKLSAgICAgICAgICAgICAgICBFZVBoeVR5cGVTZXJkZXMgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkvKiBEZXRlcm1pbmUgUEhZIHR5cGUuICovCisJc3dpdGNoIChWYWx1ZTMyICYgVDNfTklDX0NGR19QSFlfVFlQRV9NQVNLKQorCXsKKwkgICAgY2FzZSBUM19OSUNfQ0ZHX1BIWV9UWVBFX0NPUFBFUjoKKwkJRWVQaHlUeXBlU2VyZGVzID0gRkFMU0U7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFQzX05JQ19DRkdfUEhZX1RZUEVfRklCRVI6Ci0gICAgICAgICAgICAgICAgRWVQaHlUeXBlU2VyZGVzID0gVFJVRTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgY2FzZSBUM19OSUNfQ0ZHX1BIWV9UWVBFX0ZJQkVSOgorCQlFZVBoeVR5cGVTZXJkZXMgPSBUUlVFOworCQlicmVhazsKIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBFZVBoeVR5cGVTZXJkZXMgPSBGQUxTRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCSAgICBkZWZhdWx0OgorCQlFZVBoeVR5cGVTZXJkZXMgPSBGQUxTRTsKKwkJYnJlYWs7CisJfQogCi0gICAgICAgIC8qIERldGVybWluZSBQSFkgbGVkIG1vZGUuICovCi0gICAgICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCB8fAotICAgICAgICAgICAgVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2goVmFsdWUzMiAmIFQzX05JQ19DRkdfTEVEX01PREVfTUFTSykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFQzX05JQ19DRkdfTEVEX01PREVfVFJJUExFX1NQRUVEOgotICAgICAgICAgICAgICAgICAgICBFZVBoeUxlZE1vZGUgPSBMRURfTU9ERV9USFJFRV9MSU5LOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkvKiBEZXRlcm1pbmUgUEhZIGxlZCBtb2RlLiAqLworCWlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCB8fAorCSAgICBUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDEpCisJeworCSAgICBzd2l0Y2goVmFsdWUzMiAmIFQzX05JQ19DRkdfTEVEX01PREVfTUFTSykKKwkgICAgeworCQljYXNlIFQzX05JQ19DRkdfTEVEX01PREVfVFJJUExFX1NQRUVEOgorCQkgICAgRWVQaHlMZWRNb2RlID0gTEVEX01PREVfVEhSRUVfTElOSzsKKwkJICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSBUM19OSUNfQ0ZHX0xFRF9NT0RFX0xJTktfU1BFRUQ6Ci0gICAgICAgICAgICAgICAgICAgIEVlUGh5TGVkTW9kZSA9IExFRF9NT0RFX0xJTksxMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgVDNfTklDX0NGR19MRURfTU9ERV9MSU5LX1NQRUVEOgorCQkgICAgRWVQaHlMZWRNb2RlID0gTEVEX01PREVfTElOSzEwOworCQkgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBFZVBoeUxlZE1vZGUgPSBMRURfTU9ERV9BVVRPOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaChWYWx1ZTMyICYgVDNfTklDX0NGR19MRURfTU9ERV9NQVNLKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgVDNfTklDX0NGR19MRURfTU9ERV9PUEVOX0RSQUlOOgotICAgICAgICAgICAgICAgICAgICBFZVBoeUxlZE1vZGUgPSBMRURfTU9ERV9PUEVOX0RSQUlOOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJZGVmYXVsdDoKKwkJICAgIEVlUGh5TGVkTW9kZSA9IExFRF9NT0RFX0FVVE87CisJCSAgICBicmVhazsKKwkgICAgfQorCX0KKwllbHNlCisJeworCSAgICBzd2l0Y2goVmFsdWUzMiAmIFQzX05JQ19DRkdfTEVEX01PREVfTUFTSykKKwkgICAgeworCQljYXNlIFQzX05JQ19DRkdfTEVEX01PREVfT1BFTl9EUkFJTjoKKwkJICAgIEVlUGh5TGVkTW9kZSA9IExFRF9NT0RFX09QRU5fRFJBSU47CisJCSAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGNhc2UgVDNfTklDX0NGR19MRURfTU9ERV9PVVRQVVQ6Ci0gICAgICAgICAgICAgICAgICAgIEVlUGh5TGVkTW9kZSA9IExFRF9NT0RFX09VVFBVVDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgVDNfTklDX0NGR19MRURfTU9ERV9PVVRQVVQ6CisJCSAgICBFZVBoeUxlZE1vZGUgPSBMRURfTU9ERV9PVVRQVVQ7CisJCSAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIEVlUGh5TGVkTW9kZSA9IExFRF9NT0RFX0FVVE87Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmKHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDNfQTEgfHwKLSAgICAgICAgICAgIHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDNfQTIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIEVuYWJsZSBFRVBST00gd3JpdGUgcHJvdGVjdGlvbi4gKi8KLSAgICAgICAgICAgIGlmKFZhbHVlMzIgJiBUM19OSUNfRUVQUk9NX1dQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPkVlcHJvbVdwID0gVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQlkZWZhdWx0OgorCQkgICAgRWVQaHlMZWRNb2RlID0gTEVEX01PREVfQVVUTzsKKwkJICAgIGJyZWFrOworCSAgICB9CisJfQorCWlmKHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDNfQTEgfHwKKwkgICAgcERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwM19BMikKKwl7CisJICAgIC8qIEVuYWJsZSBFRVBST00gd3JpdGUgcHJvdGVjdGlvbi4gKi8KKwkgICAgaWYoVmFsdWUzMiAmIFQzX05JQ19FRVBST01fV1ApCisJICAgIHsKKwkJcERldmljZS0+RWVwcm9tV3AgPSBUUlVFOworCSAgICB9CisJfQogCi0gICAgICAgIC8qIEdldCB0aGUgUEhZIElkLiAqLwotICAgICAgICBWYWx1ZTMyID0gTUVNX1JEX09GRlNFVChwRGV2aWNlLCBUM19OSUNfREFUQV9QSFlfSURfQUREUik7Ci0gICAgICAgIGlmIChWYWx1ZTMyKQotICAgICAgICB7Ci0gICAgICAgICAgICBFZVBoeUlkID0gKCgoVmFsdWUzMiAmIFQzX05JQ19QSFlfSUQxX01BU0spID4+IDE2KSAmCi0gICAgICAgICAgICAgICAgUEhZX0lEMV9PVUlfTUFTSykgPDwgMTA7CisJLyogR2V0IHRoZSBQSFkgSWQuICovCisJVmFsdWUzMiA9IE1FTV9SRF9PRkZTRVQocERldmljZSwgVDNfTklDX0RBVEFfUEhZX0lEX0FERFIpOworCWlmIChWYWx1ZTMyKQorCXsKKwkgICAgRWVQaHlJZCA9ICgoKFZhbHVlMzIgJiBUM19OSUNfUEhZX0lEMV9NQVNLKSA+PiAxNikgJgorCQlQSFlfSUQxX09VSV9NQVNLKSA8PCAxMDsKIAotICAgICAgICAgICAgVmFsdWUzMiA9IFZhbHVlMzIgJiBUM19OSUNfUEhZX0lEMl9NQVNLOworCSAgICBWYWx1ZTMyID0gVmFsdWUzMiAmIFQzX05JQ19QSFlfSUQyX01BU0s7CiAKLSAgICAgICAgICAgIEVlUGh5SWQgfD0gKChWYWx1ZTMyICYgUEhZX0lEMl9PVUlfTUFTSykgPDwgMTYpIHwKLSAgICAgICAgICAgICAgKFZhbHVlMzIgJiBQSFlfSUQyX01PREVMX01BU0spIHwgKFZhbHVlMzIgJiBQSFlfSUQyX1JFVl9NQVNLKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVlUGh5SWQgPSAwOwotICAgICAgICB9CisJICAgIEVlUGh5SWQgfD0gKChWYWx1ZTMyICYgUEhZX0lEMl9PVUlfTUFTSykgPDwgMTYpIHwKKwkgICAgICAoVmFsdWUzMiAmIFBIWV9JRDJfTU9ERUxfTUFTSykgfCAoVmFsdWUzMiAmIFBIWV9JRDJfUkVWX01BU0spOworCX0KKwllbHNlCisJeworCSAgICBFZVBoeUlkID0gMDsKKwl9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIEVlU2lnRm91bmQgPSBGQUxTRTsKKwlFZVNpZ0ZvdW5kID0gRkFMU0U7CiAgICAgfQogCiAgICAgLyogU2V0IHRoZSBQSFkgYWRkcmVzcy4gKi8KQEAgLTExNjgsMTYzICsxMTYzLDE2MyBAQAogICAgIC8qIFNldCB0aGUgRW5hYmxlVGJpIGZsYWcgdG8gZmFsc2UgaWYgd2UgaGF2ZSBhIGNvcHBlciBQSFkuICovCiAgICAgc3dpdGNoKHBEZXZpY2UtPlBoeUlkICYgUEhZX0lEX01BU0spCiAgICAgewotICAgICAgICBjYXNlIFBIWV9CQ001NDAwX1BIWV9JRDoKLSAgICAgICAgICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOwotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBQSFlfQkNNNTQwMF9QSFlfSUQ6CisJICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIFBIWV9CQ001NDAxX1BIWV9JRDoKLSAgICAgICAgICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOwotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBQSFlfQkNNNTQwMV9QSFlfSUQ6CisJICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIFBIWV9CQ001NDExX1BIWV9JRDoKLSAgICAgICAgICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOwotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBQSFlfQkNNNTQxMV9QSFlfSUQ6CisJICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIFBIWV9CQ001NzAxX1BIWV9JRDoKLSAgICAgICAgICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOwotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBQSFlfQkNNNTcwMV9QSFlfSUQ6CisJICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIFBIWV9CQ001NzAzX1BIWV9JRDoKLSAgICAgICAgICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOwotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBQSFlfQkNNNTcwM19QSFlfSUQ6CisJICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIFBIWV9CQ001NzA0X1BIWV9JRDoKLSAgICAgICAgICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOwotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBQSFlfQkNNNTcwNF9QSFlfSUQ6CisJICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEZBTFNFOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIFBIWV9CQ004MDAyX1BIWV9JRDoKLSAgICAgICAgICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IFRSVUU7Ci0gICAgICAgICAgICBicmVhazsKKwljYXNlIFBIWV9CQ004MDAyX1BIWV9JRDoKKwkgICAgcERldmljZS0+RW5hYmxlVGJpID0gVFJVRTsKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgZGVmYXVsdDoKKwlkZWZhdWx0OgogCi0gICAgICAgICAgICBpZiAocEFkYXB0ZXJJbmZvKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPlBoeUlkID0gcEFkYXB0ZXJJbmZvLT5QaHlJZDsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5FbmFibGVUYmkgPSBwQWRhcHRlckluZm8tPlNlcmRlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKEVlU2lnRm91bmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+UGh5SWQgPSBFZVBoeUlkOwotICAgICAgICAgICAgICAgIHBEZXZpY2UtPkVuYWJsZVRiaSA9IEVlUGh5VHlwZVNlcmRlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworCSAgICBpZiAocEFkYXB0ZXJJbmZvKQorCSAgICB7CisJCXBEZXZpY2UtPlBoeUlkID0gcEFkYXB0ZXJJbmZvLT5QaHlJZDsKKwkJcERldmljZS0+RW5hYmxlVGJpID0gcEFkYXB0ZXJJbmZvLT5TZXJkZXM7CisJICAgIH0KKwkgICAgZWxzZSBpZiAoRWVTaWdGb3VuZCkKKwkgICAgeworCQlwRGV2aWNlLT5QaHlJZCA9IEVlUGh5SWQ7CisJCXBEZXZpY2UtPkVuYWJsZVRiaSA9IEVlUGh5VHlwZVNlcmRlczsKKwkgICAgfQorCSAgICBicmVhazsKICAgICB9CiAKICAgICAvKiBCYWlsIG91dCBpZiB3ZSBkb24ndCBrbm93IHRoZSBjb3BwZXIgUEhZIGlkLiAqLwogICAgIGlmKFVOS05PV05fUEhZX0lEKHBEZXZpY2UtPlBoeUlkKSAmJiAhcERldmljZS0+RW5hYmxlVGJpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOworCXJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKICAgICB9CiAKICAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDMpCiAgICAgewotICAgICAgICBpZigocERldmljZS0+U2F2ZWRDYWNoZUxpbmVSZWcgJiAweGZmMDApIDwgMHg0MDAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5TYXZlZENhY2hlTGluZVJlZyAmPSAweGZmZmYwMGZmOwotICAgICAgICAgICAgcERldmljZS0+U2F2ZWRDYWNoZUxpbmVSZWcgfD0gMHg0MDAwOwotICAgICAgICB9CisJaWYoKHBEZXZpY2UtPlNhdmVkQ2FjaGVMaW5lUmVnICYgMHhmZjAwKSA8IDB4NDAwMCkKKwl7CisJICAgIHBEZXZpY2UtPlNhdmVkQ2FjaGVMaW5lUmVnICY9IDB4ZmZmZjAwZmY7CisJICAgIHBEZXZpY2UtPlNhdmVkQ2FjaGVMaW5lUmVnIHw9IDB4NDAwMDsKKwl9CiAgICAgfQogICAgIC8qIENoYW5nZSBkcml2ZXIgcGFyYW1ldGVycy4gKi8KICAgICBTdGF0dXMgPSBNTV9HZXRDb25maWcocERldmljZSk7CiAgICAgaWYoU3RhdHVzICE9IExNX1NUQVRVU19TVUNDRVNTKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0YXR1czsKKwlyZXR1cm4gU3RhdHVzOwogICAgIH0KIAogI2lmIElOQ0xVREVfNTcwMV9BWF9GSVgKICAgICBpZiAocERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwMV9BMCB8fAotICAgICAgICBwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0IwKQorCXBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDFfQjApCiAgICAgewotICAgICAgICBwRGV2aWNlLT5SZXNldFBoeU9uSW5pdCA9IFRSVUU7CisJcERldmljZS0+UmVzZXRQaHlPbkluaXQgPSBUUlVFOwogICAgIH0KICNlbmRpZgogCiAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBwaHkgbGluayBzdGF0dXMuICovCiAgICAgaWYoIXBEZXZpY2UtPkVuYWJsZVRiaSkKICAgICB7Ci0gICAgICAgIExNX1JlYWRQaHkocERldmljZSwgUEhZX1NUQVRVU19SRUcsICZWYWx1ZTMyKTsKLSAgICAgICAgTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfU1RBVFVTX1JFRywgJlZhbHVlMzIpOworCUxNX1JlYWRQaHkocERldmljZSwgUEhZX1NUQVRVU19SRUcsICZWYWx1ZTMyKTsKKwlMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9TVEFUVVNfUkVHLCAmVmFsdWUzMik7CiAKLSAgICAgICAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBsaW5rIHJlc2V0IHRoZSBQSFkuICovCi0gICAgICAgIGlmKCEoVmFsdWUzMiAmIFBIWV9TVEFUVVNfTElOS19QQVNTKSB8fCBwRGV2aWNlLT5SZXNldFBoeU9uSW5pdCkKLSAgICAgICAgeworCS8qIElmIHdlIGRvbid0IGhhdmUgbGluayByZXNldCB0aGUgUEhZLiAqLworCWlmKCEoVmFsdWUzMiAmIFBIWV9TVEFUVVNfTElOS19QQVNTKSB8fCBwRGV2aWNlLT5SZXNldFBoeU9uSW5pdCkKKwl7CiAKLSAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIFBIWV9DVFJMX1JFRywgUEhZX0NUUkxfUEhZX1JFU0VUKTsKKwkgICAgTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCBQSFlfQ1RSTF9QSFlfUkVTRVQpOwogCi0gICAgICAgICAgICBmb3IoaiA9IDA7IGogPCAxMDA7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBNTV9XYWl0KDEwKTsKKwkgICAgZm9yKGogPSAwOyBqIDwgMTAwOyBqKyspCisJICAgIHsKKwkJTU1fV2FpdCgxMCk7CiAKLSAgICAgICAgICAgICAgICBMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9DVFJMX1JFRywgJlZhbHVlMzIpOwotICAgICAgICAgICAgICAgIGlmKFZhbHVlMzIgJiYgIShWYWx1ZTMyICYgUEhZX0NUUkxfUEhZX1JFU0VUKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIE1NX1dhaXQoNDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJCUxNX1JlYWRQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCAmVmFsdWUzMik7CisJCWlmKFZhbHVlMzIgJiYgIShWYWx1ZTMyICYgUEhZX0NUUkxfUEhZX1JFU0VUKSkKKwkJeworCQkgICAgTU1fV2FpdCg0MCk7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CiAKIAogI2lmIElOQ0xVREVfNTcwMV9BWF9GSVgKLSAgICAgICAgICAgIC8qIDU3MDFfQVhfQlggYnVnOiAgb25seSBhZHZlcnRpc2VzIDEwbWIgc3BlZWQuICovCi0gICAgICAgICAgICBpZihwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0EwIHx8Ci0gICAgICAgICAgICAgICAgcERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwMV9CMCkKLSAgICAgICAgICAgIHsKKwkgICAgLyogNTcwMV9BWF9CWCBidWc6ICBvbmx5IGFkdmVydGlzZXMgMTBtYiBzcGVlZC4gKi8KKwkgICAgaWYocERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwMV9BMCB8fAorCQlwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0IwKQorCSAgICB7CiAKLSAgICAgICAgICAgICAgICBWYWx1ZTMyID0gUEhZX0FOX0FEX1BST1RPQ09MXzgwMl8zX0NTTUFfQ0QgfAotICAgICAgICAgICAgICAgICAgICBQSFlfQU5fQURfMTBCQVNFVF9IQUxGIHwgUEhZX0FOX0FEXzEwQkFTRVRfRlVMTCB8Ci0gICAgICAgICAgICAgICAgICAgIFBIWV9BTl9BRF8xMDBCQVNFVFhfRlVMTCB8IFBIWV9BTl9BRF8xMDBCQVNFVFhfSEFMRjsKLSAgICAgICAgICAgICAgICBWYWx1ZTMyIHw9IEdldFBoeUFkRmxvd0NudHJsU2V0dGluZ3MocERldmljZSk7Ci0gICAgICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0FOX0FEX1JFRywgVmFsdWUzMik7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+YWR2ZXJ0aXNpbmcgPSBWYWx1ZTMyOworCQlWYWx1ZTMyID0gUEhZX0FOX0FEX1BST1RPQ09MXzgwMl8zX0NTTUFfQ0QgfAorCQkgICAgUEhZX0FOX0FEXzEwQkFTRVRfSEFMRiB8IFBIWV9BTl9BRF8xMEJBU0VUX0ZVTEwgfAorCQkgICAgUEhZX0FOX0FEXzEwMEJBU0VUWF9GVUxMIHwgUEhZX0FOX0FEXzEwMEJBU0VUWF9IQUxGOworCQlWYWx1ZTMyIHw9IEdldFBoeUFkRmxvd0NudHJsU2V0dGluZ3MocERldmljZSk7CisJCUxNX1dyaXRlUGh5KHBEZXZpY2UsIFBIWV9BTl9BRF9SRUcsIFZhbHVlMzIpOworCQlwRGV2aWNlLT5hZHZlcnRpc2luZyA9IFZhbHVlMzI7CiAKLSAgICAgICAgICAgICAgICBWYWx1ZTMyID0gQkNNNTQwWF9BTl9BRF8xMDAwQkFTRVRfSEFMRiB8Ci0gICAgICAgICAgICAgICAgICAgIEJDTTU0MFhfQU5fQURfMTAwMEJBU0VUX0ZVTEwgfCBCQ001NDBYX0NPTkZJR19BU19NQVNURVIgfAotICAgICAgICAgICAgICAgICAgICBCQ001NDBYX0VOQUJMRV9DT05GSUdfQVNfTUFTVEVSOwotICAgICAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfMTAwMEJBU0VUX0NUUkxfUkVHLCBWYWx1ZTMyKTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5hZHZlcnRpc2luZzEwMDAgPSBWYWx1ZTMyOworCQlWYWx1ZTMyID0gQkNNNTQwWF9BTl9BRF8xMDAwQkFTRVRfSEFMRiB8CisJCSAgICBCQ001NDBYX0FOX0FEXzEwMDBCQVNFVF9GVUxMIHwgQkNNNTQwWF9DT05GSUdfQVNfTUFTVEVSIHwKKwkJICAgIEJDTTU0MFhfRU5BQkxFX0NPTkZJR19BU19NQVNURVI7CisJCUxNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfMTAwMEJBU0VUX0NUUkxfUkVHLCBWYWx1ZTMyKTsKKwkJcERldmljZS0+YWR2ZXJ0aXNpbmcxMDAwID0gVmFsdWUzMjsKIAotICAgICAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIFBIWV9DVFJMX1JFRywgUEhZX0NUUkxfQVVUT19ORUdfRU5BQkxFIHwKLSAgICAgICAgICAgICAgICAgICAgUEhZX0NUUkxfUkVTVEFSVF9BVVRPX05FRyk7Ci0gICAgICAgICAgICB9CisJCUxNX1dyaXRlUGh5KHBEZXZpY2UsIFBIWV9DVFJMX1JFRywgUEhZX0NUUkxfQVVUT19ORUdfRU5BQkxFIHwKKwkJICAgIFBIWV9DVFJMX1JFU1RBUlRfQVVUT19ORUcpOworCSAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDE4LCAweDBjMDApOwotICAgICAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTcsIDB4MjAxZik7Ci0gICAgICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgMHgxNSwgMHgyYWFhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDRfQTApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgMHgxYywgMHg4ZDY4KTsKLSAgICAgICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDFjLCAweDhkNjgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogRW5hYmxlIEV0aGVybmV0QFdpcmVTcGVlZC4gKi8KLSAgICAgICAgICAgIGlmKHBEZXZpY2UtPkVuYWJsZVdpcmVTcGVlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDE4LCAweDcwMDcpOwotICAgICAgICAgICAgICAgIExNX1JlYWRQaHkocERldmljZSwgMHgxOCwgJlZhbHVlMzIpOwotICAgICAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTgsIFZhbHVlMzIgfCBCSVRfMTUgfCBCSVRfNCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgaWYoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAzKQorCSAgICB7CisJCUxNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTgsIDB4MGMwMCk7CisJCUxNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTcsIDB4MjAxZik7CisJCUxNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTUsIDB4MmFhYSk7CisJICAgIH0KKwkgICAgaWYocERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwNF9BMCkKKwkgICAgeworCQlMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDFjLCAweDhkNjgpOworCQlMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDFjLCAweDhkNjgpOworCSAgICB9CisJICAgIC8qIEVuYWJsZSBFdGhlcm5ldEBXaXJlU3BlZWQuICovCisJICAgIGlmKHBEZXZpY2UtPkVuYWJsZVdpcmVTcGVlZCkKKwkgICAgeworCQlMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDE4LCAweDcwMDcpOworCQlMTV9SZWFkUGh5KHBEZXZpY2UsIDB4MTgsICZWYWx1ZTMyKTsKKwkJTE1fV3JpdGVQaHkocERldmljZSwgMHgxOCwgVmFsdWUzMiB8IEJJVF8xNSB8IEJJVF80KTsKKwkgICAgfQorCX0KICAgICB9CiAKICAgICAvKiBUdXJuIG9mZiB0YXAgcG93ZXIgbWFuYWdlbWVudC4gKi8KICAgICBpZigocERldmljZS0+UGh5SWQgJiBQSFlfSURfTUFTSykgPT0gUEhZX0JDTTU0MDFfUEhZX0lEKQogICAgIHsKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwMV9BVVhfQ1RSTCwgMHgwYzIwKTsKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4MDAxMik7Ci0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MTgwNCk7Ci0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX0FERFJFU1NfUkVHLCAweDAwMTMpOwotICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9SV19QT1JULCAweDEyMDQpOwotICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHg4MDA2KTsKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfUldfUE9SVCwgMHgwMTMyKTsKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4ODAwNik7Ci0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MDIzMik7Ci0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX0FERFJFU1NfUkVHLCAweDIwMWYpOwotICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9SV19QT1JULCAweDBhMjApOworCUxNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MDFfQVVYX0NUUkwsIDB4MGMyMCk7CisJTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4MDAxMik7CisJTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfUldfUE9SVCwgMHgxODA0KTsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHgwMDEzKTsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9SV19QT1JULCAweDEyMDQpOworCUxNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX0FERFJFU1NfUkVHLCAweDgwMDYpOworCUxNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MDEzMik7CisJTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4ODAwNik7CisJTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfUldfUE9SVCwgMHgwMjMyKTsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHgyMDFmKTsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9SV19QT1JULCAweDBhMjApOwogCi0gICAgICAgIE1NX1dhaXQoNDApOworCU1NX1dhaXQoNDApOwogICAgIH0KIAogI2lmIElOQ0xVREVfVEJJX1NVUFBPUlQKQEAgLTEzMzIsMTEwICsxMzI3LDExMCBAQAogCiAgICAgaWYocERldmljZS0+RW5hYmxlVGJpKQogICAgIHsKLSAgICAgICAgcERldmljZS0+V2FrZVVwTW9kZUNhcCA9IExNX1dBS0VfVVBfTU9ERV9OT05FOwotICAgICAgICBwRGV2aWNlLT5QaHlJbnRNb2RlID0gVDNfUEhZX0lOVF9NT0RFX0xJTktfUkVBRFk7Ci0gICAgICAgIGlmICgocERldmljZS0+UG9sbFRiaUxpbmsgPT0gQkFEX0RFRkFVTFRfVkFMVUUpIHx8Ci0gICAgICAgICAgICBwRGV2aWNlLT5EaXNhYmxlQXV0b05lZykKLSAgICAgICAgewotICAgICAgICAgICAgcERldmljZS0+UG9sbFRiaUxpbmsgPSBGQUxTRTsKLSAgICAgICAgfQorCXBEZXZpY2UtPldha2VVcE1vZGVDYXAgPSBMTV9XQUtFX1VQX01PREVfTk9ORTsKKwlwRGV2aWNlLT5QaHlJbnRNb2RlID0gVDNfUEhZX0lOVF9NT0RFX0xJTktfUkVBRFk7CisJaWYgKChwRGV2aWNlLT5Qb2xsVGJpTGluayA9PSBCQURfREVGQVVMVF9WQUxVRSkgfHwKKwkgICAgcERldmljZS0+RGlzYWJsZUF1dG9OZWcpCisJeworCSAgICBwRGV2aWNlLT5Qb2xsVGJpTGluayA9IEZBTFNFOworCX0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcERldmljZS0+UG9sbFRiaUxpbmsgPSBGQUxTRTsKKwlwRGV2aWNlLT5Qb2xsVGJpTGluayA9IEZBTFNFOwogICAgIH0KICNlbmRpZiAvKiBJTkNMVURFX1RCSV9TVVBQT1JUICovCiAKICAgICAvKiBVc2VUYWdnZWRTdGF0dXMgaXMgb25seSB2YWxpZCBmb3IgNTcwMSBhbmQgbGF0ZXIuICovCiAgICAgaWYgKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCkKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPlVzZVRhZ2dlZFN0YXR1cyA9IEZBTFNFOworCXBEZXZpY2UtPlVzZVRhZ2dlZFN0YXR1cyA9IEZBTFNFOwogCi0gICAgICAgIHBEZXZpY2UtPkNvYWxlc2NlTW9kZSA9IDA7CisJcERldmljZS0+Q29hbGVzY2VNb2RlID0gMDsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcERldmljZS0+Q29hbGVzY2VNb2RlID0gSE9TVF9DT0FMRVNDRV9DTEVBUl9USUNLU19PTl9SWF9CRF9FVkVOVCB8Ci0gICAgICAgICAgICBIT1NUX0NPQUxFU0NFX0NMRUFSX1RJQ0tTX09OX1RYX0JEX0VWRU5UOworCXBEZXZpY2UtPkNvYWxlc2NlTW9kZSA9IEhPU1RfQ09BTEVTQ0VfQ0xFQVJfVElDS1NfT05fUlhfQkRfRVZFTlQgfAorCSAgICBIT1NUX0NPQUxFU0NFX0NMRUFSX1RJQ0tTX09OX1RYX0JEX0VWRU5UOwogICAgIH0KIAogICAgIC8qIFNldCB0aGUgc3RhdHVzIGJsb2NrIHNpemUuICovCiAgICAgaWYoVDNfQ0hJUF9SRVYocERldmljZS0+Q2hpcFJldklkKSAhPSBUM19DSElQX1JFVl81NzAwX0FYICYmCi0gICAgICAgIFQzX0NISVBfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgIT0gVDNfQ0hJUF9SRVZfNTcwMF9CWCkKKwlUM19DSElQX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpICE9IFQzX0NISVBfUkVWXzU3MDBfQlgpCiAgICAgewotICAgICAgICBwRGV2aWNlLT5Db2FsZXNjZU1vZGUgfD0gSE9TVF9DT0FMRVNDRV8zMl9CWVRFX1NUQVRVU19NT0RFOworCXBEZXZpY2UtPkNvYWxlc2NlTW9kZSB8PSBIT1NUX0NPQUxFU0NFXzMyX0JZVEVfU1RBVFVTX01PREU7CiAgICAgfQogCiAgICAgLyogQ2hlY2sgdGhlIERVUklOR19JTlQgY29hbGVzY2luZyB0aWNrcyBwYXJhbWV0ZXJzLiAqLwogICAgIGlmKHBEZXZpY2UtPlVzZVRhZ2dlZFN0YXR1cykKICAgICB7Ci0gICAgICAgIGlmKHBEZXZpY2UtPlJ4Q29hbGVzY2luZ1RpY2tzRHVyaW5nSW50ID09IEJBRF9ERUZBVUxUX1ZBTFVFKQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5SeENvYWxlc2NpbmdUaWNrc0R1cmluZ0ludCA9Ci0gICAgICAgICAgICAgICAgREVGQVVMVF9SWF9DT0FMRVNDSU5HX1RJQ0tTX0RVUklOR19JTlQ7Ci0gICAgICAgIH0KKwlpZihwRGV2aWNlLT5SeENvYWxlc2NpbmdUaWNrc0R1cmluZ0ludCA9PSBCQURfREVGQVVMVF9WQUxVRSkKKwl7CisJICAgIHBEZXZpY2UtPlJ4Q29hbGVzY2luZ1RpY2tzRHVyaW5nSW50ID0KKwkJREVGQVVMVF9SWF9DT0FMRVNDSU5HX1RJQ0tTX0RVUklOR19JTlQ7CisJfQogCi0gICAgICAgIGlmKHBEZXZpY2UtPlR4Q29hbGVzY2luZ1RpY2tzRHVyaW5nSW50ID09IEJBRF9ERUZBVUxUX1ZBTFVFKQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5UeENvYWxlc2NpbmdUaWNrc0R1cmluZ0ludCA9Ci0gICAgICAgICAgICAgICAgREVGQVVMVF9UWF9DT0FMRVNDSU5HX1RJQ0tTX0RVUklOR19JTlQ7Ci0gICAgICAgIH0KKwlpZihwRGV2aWNlLT5UeENvYWxlc2NpbmdUaWNrc0R1cmluZ0ludCA9PSBCQURfREVGQVVMVF9WQUxVRSkKKwl7CisJICAgIHBEZXZpY2UtPlR4Q29hbGVzY2luZ1RpY2tzRHVyaW5nSW50ID0KKwkJREVGQVVMVF9UWF9DT0FMRVNDSU5HX1RJQ0tTX0RVUklOR19JTlQ7CisJfQogCi0gICAgICAgIGlmKHBEZXZpY2UtPlJ4TWF4Q29hbGVzY2VkRnJhbWVzRHVyaW5nSW50ID09IEJBRF9ERUZBVUxUX1ZBTFVFKQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5SeE1heENvYWxlc2NlZEZyYW1lc0R1cmluZ0ludCA9Ci0gICAgICAgICAgICAgICAgREVGQVVMVF9SWF9NQVhfQ09BTEVTQ0VEX0ZSQU1FU19EVVJJTkdfSU5UOwotICAgICAgICB9CisJaWYocERldmljZS0+UnhNYXhDb2FsZXNjZWRGcmFtZXNEdXJpbmdJbnQgPT0gQkFEX0RFRkFVTFRfVkFMVUUpCisJeworCSAgICBwRGV2aWNlLT5SeE1heENvYWxlc2NlZEZyYW1lc0R1cmluZ0ludCA9CisJCURFRkFVTFRfUlhfTUFYX0NPQUxFU0NFRF9GUkFNRVNfRFVSSU5HX0lOVDsKKwl9CiAKLSAgICAgICAgaWYocERldmljZS0+VHhNYXhDb2FsZXNjZWRGcmFtZXNEdXJpbmdJbnQgPT0gQkFEX0RFRkFVTFRfVkFMVUUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPlR4TWF4Q29hbGVzY2VkRnJhbWVzRHVyaW5nSW50ID0KLSAgICAgICAgICAgICAgICBERUZBVUxUX1RYX01BWF9DT0FMRVNDRURfRlJBTUVTX0RVUklOR19JTlQ7Ci0gICAgICAgIH0KKwlpZihwRGV2aWNlLT5UeE1heENvYWxlc2NlZEZyYW1lc0R1cmluZ0ludCA9PSBCQURfREVGQVVMVF9WQUxVRSkKKwl7CisJICAgIHBEZXZpY2UtPlR4TWF4Q29hbGVzY2VkRnJhbWVzRHVyaW5nSW50ID0KKwkJREVGQVVMVF9UWF9NQVhfQ09BTEVTQ0VEX0ZSQU1FU19EVVJJTkdfSU5UOworCX0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYocERldmljZS0+UnhDb2FsZXNjaW5nVGlja3NEdXJpbmdJbnQgPT0gQkFEX0RFRkFVTFRfVkFMVUUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPlJ4Q29hbGVzY2luZ1RpY2tzRHVyaW5nSW50ID0gMDsKLSAgICAgICAgfQorCWlmKHBEZXZpY2UtPlJ4Q29hbGVzY2luZ1RpY2tzRHVyaW5nSW50ID09IEJBRF9ERUZBVUxUX1ZBTFVFKQorCXsKKwkgICAgcERldmljZS0+UnhDb2FsZXNjaW5nVGlja3NEdXJpbmdJbnQgPSAwOworCX0KIAotICAgICAgICBpZihwRGV2aWNlLT5UeENvYWxlc2NpbmdUaWNrc0R1cmluZ0ludCA9PSBCQURfREVGQVVMVF9WQUxVRSkKLSAgICAgICAgewotICAgICAgICAgICAgcERldmljZS0+VHhDb2FsZXNjaW5nVGlja3NEdXJpbmdJbnQgPSAwOwotICAgICAgICB9CisJaWYocERldmljZS0+VHhDb2FsZXNjaW5nVGlja3NEdXJpbmdJbnQgPT0gQkFEX0RFRkFVTFRfVkFMVUUpCisJeworCSAgICBwRGV2aWNlLT5UeENvYWxlc2NpbmdUaWNrc0R1cmluZ0ludCA9IDA7CisJfQogCi0gICAgICAgIGlmKHBEZXZpY2UtPlJ4TWF4Q29hbGVzY2VkRnJhbWVzRHVyaW5nSW50ID09IEJBRF9ERUZBVUxUX1ZBTFVFKQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5SeE1heENvYWxlc2NlZEZyYW1lc0R1cmluZ0ludCA9IDA7Ci0gICAgICAgIH0KKwlpZihwRGV2aWNlLT5SeE1heENvYWxlc2NlZEZyYW1lc0R1cmluZ0ludCA9PSBCQURfREVGQVVMVF9WQUxVRSkKKwl7CisJICAgIHBEZXZpY2UtPlJ4TWF4Q29hbGVzY2VkRnJhbWVzRHVyaW5nSW50ID0gMDsKKwl9CiAKLSAgICAgICAgaWYocERldmljZS0+VHhNYXhDb2FsZXNjZWRGcmFtZXNEdXJpbmdJbnQgPT0gQkFEX0RFRkFVTFRfVkFMVUUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPlR4TWF4Q29hbGVzY2VkRnJhbWVzRHVyaW5nSW50ID0gMDsKLSAgICAgICAgfQorCWlmKHBEZXZpY2UtPlR4TWF4Q29hbGVzY2VkRnJhbWVzRHVyaW5nSW50ID09IEJBRF9ERUZBVUxUX1ZBTFVFKQorCXsKKwkgICAgcERldmljZS0+VHhNYXhDb2FsZXNjZWRGcmFtZXNEdXJpbmdJbnQgPSAwOworCX0KICAgICB9CiAKICNpZiBUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UCiAgICAgaWYocERldmljZS0+UnhNdHUgPD0gKE1BWF9TVERfUkNWX0JVRkZFUl9TSVpFIC0gOCAvKiBDUkMgKi8pKQogICAgIHsKLSAgICAgICAgcERldmljZS0+UnhKdW1ib0Rlc2NDbnQgPSAwOwotICAgICAgICBpZihwRGV2aWNlLT5SeE10dSA8PSBNQVhfRVRIRVJORVRfUEFDS0VUX1NJWkVfTk9fQ1JDKQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5SeE10dSA9IE1BWF9FVEhFUk5FVF9QQUNLRVRfU0laRV9OT19DUkM7Ci0gICAgICAgIH0KKwlwRGV2aWNlLT5SeEp1bWJvRGVzY0NudCA9IDA7CisJaWYocERldmljZS0+UnhNdHUgPD0gTUFYX0VUSEVSTkVUX1BBQ0tFVF9TSVpFX05PX0NSQykKKwl7CisJICAgIHBEZXZpY2UtPlJ4TXR1ID0gTUFYX0VUSEVSTkVUX1BBQ0tFVF9TSVpFX05PX0NSQzsKKwl9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPlJ4SnVtYm9CdWZmZXJTaXplID0gKHBEZXZpY2UtPlJ4TXR1ICsgOCAvKiBDUkMgKyBWTEFOICovICsKLSAgICAgICAgICAgIENPTU1PTl9DQUNIRV9MSU5FX1NJWkUtMSkgJiB+Q09NTU9OX0NBQ0hFX0xJTkVfTUFTSzsKKwlwRGV2aWNlLT5SeEp1bWJvQnVmZmVyU2l6ZSA9IChwRGV2aWNlLT5SeE10dSArIDggLyogQ1JDICsgVkxBTiAqLyArCisJICAgIENPTU1PTl9DQUNIRV9MSU5FX1NJWkUtMSkgJiB+Q09NTU9OX0NBQ0hFX0xJTkVfTUFTSzsKIAotICAgICAgICBpZihwRGV2aWNlLT5SeEp1bWJvQnVmZmVyU2l6ZSA+IE1BWF9KVU1CT19SQ1ZfQlVGRkVSX1NJWkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPlJ4SnVtYm9CdWZmZXJTaXplID0gREVGQVVMVF9KVU1CT19SQ1ZfQlVGRkVSX1NJWkU7Ci0gICAgICAgICAgICBwRGV2aWNlLT5SeE10dSA9IHBEZXZpY2UtPlJ4SnVtYm9CdWZmZXJTaXplIC0gOCAvKiBDUkMgKyBWTEFOICovOwotICAgICAgICB9Ci0gICAgICAgIHBEZXZpY2UtPlR4TXR1ID0gcERldmljZS0+UnhNdHU7CisJaWYocERldmljZS0+UnhKdW1ib0J1ZmZlclNpemUgPiBNQVhfSlVNQk9fUkNWX0JVRkZFUl9TSVpFKQorCXsKKwkgICAgcERldmljZS0+UnhKdW1ib0J1ZmZlclNpemUgPSBERUZBVUxUX0pVTUJPX1JDVl9CVUZGRVJfU0laRTsKKwkgICAgcERldmljZS0+UnhNdHUgPSBwRGV2aWNlLT5SeEp1bWJvQnVmZmVyU2l6ZSAtIDggLyogQ1JDICsgVkxBTiAqLzsKKwl9CisJcERldmljZS0+VHhNdHUgPSBwRGV2aWNlLT5SeE10dTsKIAogICAgIH0KICNlbHNlCkBAIC0xNDQ0LDEyOCArMTQzOSwxMjggQEAKIAogICAgIHBEZXZpY2UtPlJ4UGFja2V0RGVzY0NudCA9CiAjaWYgVDNfSlVNQk9fUkNWX1JDQl9FTlRSWV9DT1VOVAotICAgICAgICBwRGV2aWNlLT5SeEp1bWJvRGVzY0NudCArCisJcERldmljZS0+UnhKdW1ib0Rlc2NDbnQgKwogI2VuZGlmIC8qIFQzX0pVTUJPX1JDVl9SQ0JfRU5UUllfQ09VTlQgKi8KLSAgICAgICAgcERldmljZS0+UnhTdGREZXNjQ250OworCXBEZXZpY2UtPlJ4U3RkRGVzY0NudDsKIAogICAgIGlmKHBEZXZpY2UtPlR4TXR1IDwgTUFYX0VUSEVSTkVUX1BBQ0tFVF9TSVpFX05PX0NSQykKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPlR4TXR1ID0gTUFYX0VUSEVSTkVUX1BBQ0tFVF9TSVpFX05PX0NSQzsKKwlwRGV2aWNlLT5UeE10dSA9IE1BWF9FVEhFUk5FVF9QQUNLRVRfU0laRV9OT19DUkM7CiAgICAgfQogCiAgICAgaWYocERldmljZS0+VHhNdHUgPiBNQVhfSlVNQk9fVFhfQlVGRkVSX1NJWkUpCiAgICAgewotICAgICAgICBwRGV2aWNlLT5UeE10dSA9IE1BWF9KVU1CT19UWF9CVUZGRVJfU0laRTsKKwlwRGV2aWNlLT5UeE10dSA9IE1BWF9KVU1CT19UWF9CVUZGRVJfU0laRTsKICAgICB9CiAKICAgICAvKiBDb25maWd1cmUgdGhlIHByb3BlciB3YXlzIHRvIGdldCBsaW5rIGNoYW5nZSBpbnRlcnJ1cHQuICovCiAgICAgaWYocERldmljZS0+UGh5SW50TW9kZSA9PSBUM19QSFlfSU5UX01PREVfQVVUTykKICAgICB7Ci0gICAgICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCkKLSAgICAgICAgewotICAgICAgICAgICAgcERldmljZS0+UGh5SW50TW9kZSA9IFQzX1BIWV9JTlRfTU9ERV9NSV9JTlRFUlJVUFQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5QaHlJbnRNb2RlID0gVDNfUEhZX0lOVF9NT0RFX0xJTktfUkVBRFk7Ci0gICAgICAgIH0KKwlpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDApCisJeworCSAgICBwRGV2aWNlLT5QaHlJbnRNb2RlID0gVDNfUEhZX0lOVF9NT0RFX01JX0lOVEVSUlVQVDsKKwl9CisJZWxzZQorCXsKKwkgICAgcERldmljZS0+UGh5SW50TW9kZSA9IFQzX1BIWV9JTlRfTU9ERV9MSU5LX1JFQURZOworCX0KICAgICB9CiAgICAgZWxzZSBpZihwRGV2aWNlLT5QaHlJbnRNb2RlID09IFQzX1BIWV9JTlRfTU9ERV9BVVRPX1BPTExJTkcpCiAgICAgewotICAgICAgICAvKiBBdXRvLXBvbGxpbmcgZG9lcyBub3Qgd29yayBvbiA1NzAwX0FYIGFuZCA1NzAwX0JYLiAqLwotICAgICAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPlBoeUludE1vZGUgPSBUM19QSFlfSU5UX01PREVfTUlfSU5URVJSVVBUOwotICAgICAgICB9CisJLyogQXV0by1wb2xsaW5nIGRvZXMgbm90IHdvcmsgb24gNTcwMF9BWCBhbmQgNTcwMF9CWC4gKi8KKwlpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDApCisJeworCSAgICBwRGV2aWNlLT5QaHlJbnRNb2RlID0gVDNfUEhZX0lOVF9NT0RFX01JX0lOVEVSUlVQVDsKKwl9CiAgICAgfQogCiAgICAgLyogRGV0ZXJtaW5lIHRoZSBtZXRob2QgdG8gZ2V0IGxpbmsgY2hhbmdlIHN0YXR1cy4gKi8KICAgICBpZihwRGV2aWNlLT5MaW5rQ2huZ01vZGUgPT0gVDNfTElOS19DSE5HX01PREVfQVVUTykKICAgICB7Ci0gICAgICAgIC8qIFRoZSBsaW5rIHN0YXR1cyBiaXQgaW4gdGhlIHN0YXR1cyBibG9jayBkb2VzIG5vdCB3b3JrIG9uIDU3MDBfQVggKi8KLSAgICAgICAgLyogYW5kIDU3MDBfQlggY2hpcHMuICovCi0gICAgICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCkKLSAgICAgICAgewotICAgICAgICAgICAgcERldmljZS0+TGlua0NobmdNb2RlID0gVDNfTElOS19DSE5HX01PREVfVVNFX1NUQVRVU19SRUc7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5MaW5rQ2huZ01vZGUgPSBUM19MSU5LX0NITkdfTU9ERV9VU0VfU1RBVFVTX0JMT0NLOwotICAgICAgICB9CisJLyogVGhlIGxpbmsgc3RhdHVzIGJpdCBpbiB0aGUgc3RhdHVzIGJsb2NrIGRvZXMgbm90IHdvcmsgb24gNTcwMF9BWCAqLworCS8qIGFuZCA1NzAwX0JYIGNoaXBzLiAqLworCWlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCkKKwl7CisJICAgIHBEZXZpY2UtPkxpbmtDaG5nTW9kZSA9IFQzX0xJTktfQ0hOR19NT0RFX1VTRV9TVEFUVVNfUkVHOworCX0KKwllbHNlCisJeworCSAgICBwRGV2aWNlLT5MaW5rQ2huZ01vZGUgPSBUM19MSU5LX0NITkdfTU9ERV9VU0VfU1RBVFVTX0JMT0NLOworCX0KICAgICB9CiAKICAgICBpZihwRGV2aWNlLT5QaHlJbnRNb2RlID09IFQzX1BIWV9JTlRfTU9ERV9NSV9JTlRFUlJVUFQgfHwKLSAgICAgICAgVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwKQorCVQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCkKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPkxpbmtDaG5nTW9kZSA9IFQzX0xJTktfQ0hOR19NT0RFX1VTRV9TVEFUVVNfUkVHOworCXBEZXZpY2UtPkxpbmtDaG5nTW9kZSA9IFQzX0xJTktfQ0hOR19NT0RFX1VTRV9TVEFUVVNfUkVHOwogICAgIH0KIAogICAgIC8qIENvbmZpZ3VyZSBQSFkgbGVkIG1vZGUuICovCiAgICAgaWYocERldmljZS0+TGVkTW9kZSA9PSBMRURfTU9ERV9BVVRPKQogICAgIHsKLSAgICAgICAgaWYoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwIHx8Ci0gICAgICAgICAgICBUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKHBEZXZpY2UtPlN1YnN5c3RlbVZlbmRvcklkID09IFQzX1NWSURfREVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5MZWRNb2RlID0gTEVEX01PREVfTElOSzEwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPkxlZE1vZGUgPSBMRURfTU9ERV9USFJFRV9MSU5LOworCWlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCB8fAorCSAgICBUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDEpCisJeworCSAgICBpZihwRGV2aWNlLT5TdWJzeXN0ZW1WZW5kb3JJZCA9PSBUM19TVklEX0RFTEwpCisJICAgIHsKKwkJcERldmljZS0+TGVkTW9kZSA9IExFRF9NT0RFX0xJTksxMDsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJcERldmljZS0+TGVkTW9kZSA9IExFRF9NT0RFX1RIUkVFX0xJTks7CiAKLSAgICAgICAgICAgICAgICBpZihFZVNpZ0ZvdW5kICYmIEVlUGh5TGVkTW9kZSAhPSBMRURfTU9ERV9BVVRPKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+TGVkTW9kZSA9IEVlUGh5TGVkTW9kZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJCWlmKEVlU2lnRm91bmQgJiYgRWVQaHlMZWRNb2RlICE9IExFRF9NT0RFX0FVVE8pCisJCXsKKwkJICAgIHBEZXZpY2UtPkxlZE1vZGUgPSBFZVBoeUxlZE1vZGU7CisJCX0KKwkgICAgfQogCi0gICAgICAgICAgICAvKiBidWc/IDU3MDEgaW4gTElOSzEwIG1vZGUgZG9lcyBub3Qgc2VlbSB0byB3b3JrIHdoZW4gKi8KLSAgICAgICAgICAgIC8qIFBoeUludE1vZGUgaXMgTElOS19SRUFEWS4gKi8KLSAgICAgICAgICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgIT0gVDNfQVNJQ19SRVZfNTcwMCAmJgorCSAgICAvKiBidWc/IDU3MDEgaW4gTElOSzEwIG1vZGUgZG9lcyBub3Qgc2VlbSB0byB3b3JrIHdoZW4gKi8KKwkgICAgLyogUGh5SW50TW9kZSBpcyBMSU5LX1JFQURZLiAqLworCSAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpICE9IFQzX0FTSUNfUkVWXzU3MDAgJiYKICNpZiBJTkNMVURFX1RCSV9TVVBQT1JUCi0gICAgICAgICAgICAgICAgcERldmljZS0+RW5hYmxlVGJpID09IEZBTFNFICYmCisJCXBEZXZpY2UtPkVuYWJsZVRiaSA9PSBGQUxTRSAmJgogI2VuZGlmCi0gICAgICAgICAgICAgICAgcERldmljZS0+TGVkTW9kZSA9PSBMRURfTU9ERV9MSU5LMTApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+UGh5SW50TW9kZSA9IFQzX1BIWV9JTlRfTU9ERV9NSV9JTlRFUlJVUFQ7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+TGlua0NobmdNb2RlID0gVDNfTElOS19DSE5HX01PREVfVVNFX1NUQVRVU19SRUc7Ci0gICAgICAgICAgICB9CisJCXBEZXZpY2UtPkxlZE1vZGUgPT0gTEVEX01PREVfTElOSzEwKQorCSAgICB7CisJCXBEZXZpY2UtPlBoeUludE1vZGUgPSBUM19QSFlfSU5UX01PREVfTUlfSU5URVJSVVBUOworCQlwRGV2aWNlLT5MaW5rQ2huZ01vZGUgPSBUM19MSU5LX0NITkdfTU9ERV9VU0VfU1RBVFVTX1JFRzsKKwkgICAgfQogCi0gICAgICAgICAgICBpZihwRGV2aWNlLT5FbmFibGVUYmkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+TGVkTW9kZSA9IExFRF9NT0RFX1RIUkVFX0xJTks7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZihFZVNpZ0ZvdW5kICYmIEVlUGh5TGVkTW9kZSAhPSBMRURfTU9ERV9BVVRPKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPkxlZE1vZGUgPSBFZVBoeUxlZE1vZGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+TGVkTW9kZSA9IExFRF9NT0RFX09QRU5fRFJBSU47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgaWYocERldmljZS0+RW5hYmxlVGJpKQorCSAgICB7CisJCXBEZXZpY2UtPkxlZE1vZGUgPSBMRURfTU9ERV9USFJFRV9MSU5LOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIGlmKEVlU2lnRm91bmQgJiYgRWVQaHlMZWRNb2RlICE9IExFRF9NT0RFX0FVVE8pCisJICAgIHsKKwkJcERldmljZS0+TGVkTW9kZSA9IEVlUGh5TGVkTW9kZTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJcERldmljZS0+TGVkTW9kZSA9IExFRF9NT0RFX09QRU5fRFJBSU47CisJICAgIH0KKwl9CiAgICAgfQogCiAgICAgLyogRW5hYmxlIE9uZURtYUF0T25jZS4gKi8KICAgICBpZihwRGV2aWNlLT5PbmVEbWFBdE9uY2UgPT0gQkFEX0RFRkFVTFRfVkFMVUUpCiAgICAgewotICAgICAgICBwRGV2aWNlLT5PbmVEbWFBdE9uY2UgPSBGQUxTRTsKKwlwRGV2aWNlLT5PbmVEbWFBdE9uY2UgPSBGQUxTRTsKICAgICB9CiAKICAgICBpZiAoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwIHx8Ci0gICAgICAgIHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDFfQTAgfHwKLSAgICAgICAgcERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwMV9CMCB8fAotICAgICAgICBwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0IyKQorCXBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDFfQTAgfHwKKwlwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0IwIHx8CisJcERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwMV9CMikKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPldvbFNwZWVkID0gV09MX1NQRUVEXzEwTUI7CisJcERldmljZS0+V29sU3BlZWQgPSBXT0xfU1BFRURfMTBNQjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcERldmljZS0+V29sU3BlZWQgPSBXT0xfU1BFRURfMTAwTUI7CisJcERldmljZS0+V29sU3BlZWQgPSBXT0xfU1BFRURfMTAwTUI7CiAgICAgfQogCiAgICAgLyogT2ZmbG9hZGluZ3MuICovCkBAIC0xNTc0LDggKzE1NjksOCBAQAogICAgIC8qIFR1cm4gb2ZmIHRhc2sgb2ZmbG9hZGluZyBvbiBBeC4gKi8KICAgICBpZihwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAwX0IwKQogICAgIHsKLSAgICAgICAgcERldmljZS0+VGFza09mZmxvYWRDYXAgJj0gfihMTV9UQVNLX09GRkxPQURfVFhfVENQX0NIRUNLU1VNIHwKLSAgICAgICAgICAgIExNX1RBU0tfT0ZGTE9BRF9UWF9VRFBfQ0hFQ0tTVU0pOworCXBEZXZpY2UtPlRhc2tPZmZsb2FkQ2FwICY9IH4oTE1fVEFTS19PRkZMT0FEX1RYX1RDUF9DSEVDS1NVTSB8CisJICAgIExNX1RBU0tfT0ZGTE9BRF9UWF9VRFBfQ0hFQ0tTVU0pOwogICAgIH0KICAgICBwRGV2aWNlLT5QY2lTdGF0ZSA9IFJFR19SRChwRGV2aWNlLCBQY2lDZmcuUGNpU3RhdGUpOwogICAgIExNX1JlYWRWUEQocERldmljZSk7CkBAIC0xNTkyLDQ0ICsxNTg3LDQ0IEBACiB7CiAgICAgc3RhdGljIExNX0FEQVBURVJfSU5GTyBBZGFwdGVyQXJyW10gPQogICAgIHsKLSAgICAgICAgeyBUM19TVklEX0JST0FEQ09NLCBUM19TU0lEX0JST0FEQ09NX0JDTTk1NzAwQTYsIFBIWV9CQ001NDAxX1BIWV9JRCwgMH0sCi0gICAgICAgIHsgVDNfU1ZJRF9CUk9BRENPTSwgVDNfU1NJRF9CUk9BRENPTV9CQ005NTcwMUE1LCBQSFlfQkNNNTcwMV9QSFlfSUQsIDB9LAotICAgICAgICB7IFQzX1NWSURfQlJPQURDT00sIFQzX1NTSURfQlJPQURDT01fQkNNOTU3MDBUNiwgUEhZX0JDTTgwMDJfUEhZX0lELCAxfSwKLSAgICAgICAgeyBUM19TVklEX0JST0FEQ09NLCBUM19TU0lEX0JST0FEQ09NX0JDTTk1NzAwQTksIDAsIDEgfSwKLSAgICAgICAgeyBUM19TVklEX0JST0FEQ09NLCBUM19TU0lEX0JST0FEQ09NX0JDTTk1NzAxVDEsIFBIWV9CQ001NzAxX1BIWV9JRCwgMH0sCi0gICAgICAgIHsgVDNfU1ZJRF9CUk9BRENPTSwgVDNfU1NJRF9CUk9BRENPTV9CQ005NTcwMVQ4LCBQSFlfQkNNNTcwMV9QSFlfSUQsIDB9LAotICAgICAgICB7IFQzX1NWSURfQlJPQURDT00sIFQzX1NTSURfQlJPQURDT01fQkNNOTU3MDFBNywgMCwgMX0sCi0gICAgICAgIHsgVDNfU1ZJRF9CUk9BRENPTSwgVDNfU1NJRF9CUk9BRENPTV9CQ005NTcwMUExMCwgUEhZX0JDTTU3MDFfUEhZX0lELCAwfSwKLSAgICAgICAgeyBUM19TVklEX0JST0FEQ09NLCBUM19TU0lEX0JST0FEQ09NX0JDTTk1NzAxQTEyLCBQSFlfQkNNNTcwMV9QSFlfSUQsIDB9LAotICAgICAgICB7IFQzX1NWSURfQlJPQURDT00sIFQzX1NTSURfQlJPQURDT01fQkNNOTU3MDNBeDEsIFBIWV9CQ001NzAxX1BIWV9JRCwgMH0sCi0gICAgICAgIHsgVDNfU1ZJRF9CUk9BRENPTSwgVDNfU1NJRF9CUk9BRENPTV9CQ005NTcwM0F4MiwgUEhZX0JDTTU3MDFfUEhZX0lELCAwfSwKKwl7IFQzX1NWSURfQlJPQURDT00sIFQzX1NTSURfQlJPQURDT01fQkNNOTU3MDBBNiwgUEhZX0JDTTU0MDFfUEhZX0lELCAwfSwKKwl7IFQzX1NWSURfQlJPQURDT00sIFQzX1NTSURfQlJPQURDT01fQkNNOTU3MDFBNSwgUEhZX0JDTTU3MDFfUEhZX0lELCAwfSwKKwl7IFQzX1NWSURfQlJPQURDT00sIFQzX1NTSURfQlJPQURDT01fQkNNOTU3MDBUNiwgUEhZX0JDTTgwMDJfUEhZX0lELCAxfSwKKwl7IFQzX1NWSURfQlJPQURDT00sIFQzX1NTSURfQlJPQURDT01fQkNNOTU3MDBBOSwgMCwgMSB9LAorCXsgVDNfU1ZJRF9CUk9BRENPTSwgVDNfU1NJRF9CUk9BRENPTV9CQ005NTcwMVQxLCBQSFlfQkNNNTcwMV9QSFlfSUQsIDB9LAorCXsgVDNfU1ZJRF9CUk9BRENPTSwgVDNfU1NJRF9CUk9BRENPTV9CQ005NTcwMVQ4LCBQSFlfQkNNNTcwMV9QSFlfSUQsIDB9LAorCXsgVDNfU1ZJRF9CUk9BRENPTSwgVDNfU1NJRF9CUk9BRENPTV9CQ005NTcwMUE3LCAwLCAxfSwKKwl7IFQzX1NWSURfQlJPQURDT00sIFQzX1NTSURfQlJPQURDT01fQkNNOTU3MDFBMTAsIFBIWV9CQ001NzAxX1BIWV9JRCwgMH0sCisJeyBUM19TVklEX0JST0FEQ09NLCBUM19TU0lEX0JST0FEQ09NX0JDTTk1NzAxQTEyLCBQSFlfQkNNNTcwMV9QSFlfSUQsIDB9LAorCXsgVDNfU1ZJRF9CUk9BRENPTSwgVDNfU1NJRF9CUk9BRENPTV9CQ005NTcwM0F4MSwgUEhZX0JDTTU3MDFfUEhZX0lELCAwfSwKKwl7IFQzX1NWSURfQlJPQURDT00sIFQzX1NTSURfQlJPQURDT01fQkNNOTU3MDNBeDIsIFBIWV9CQ001NzAxX1BIWV9JRCwgMH0sCiAKLSAgICAgICAgeyBUM19TVklEXzNDT00sIFQzX1NTSURfM0NPTV8zQzk5NlQsIFBIWV9CQ001NDAxX1BIWV9JRCwgMCB9LAotICAgICAgICB7IFQzX1NWSURfM0NPTSwgVDNfU1NJRF8zQ09NXzNDOTk2QlQsIFBIWV9CQ001NzAxX1BIWV9JRCwgMCB9LAotICAgICAgICB7IFQzX1NWSURfM0NPTSwgVDNfU1NJRF8zQ09NXzNDOTk2U1gsIDAsIDEgfSwKLSAgICAgICAgeyBUM19TVklEXzNDT00sIFQzX1NTSURfM0NPTV8zQzEwMDBULCBQSFlfQkNNNTcwMV9QSFlfSUQsIDAgfSwKLSAgICAgICAgeyBUM19TVklEXzNDT00sIFQzX1NTSURfM0NPTV8zQzk0MEJSMDEsIFBIWV9CQ001NzAxX1BIWV9JRCwgMCB9LAorCXsgVDNfU1ZJRF8zQ09NLCBUM19TU0lEXzNDT01fM0M5OTZULCBQSFlfQkNNNTQwMV9QSFlfSUQsIDAgfSwKKwl7IFQzX1NWSURfM0NPTSwgVDNfU1NJRF8zQ09NXzNDOTk2QlQsIFBIWV9CQ001NzAxX1BIWV9JRCwgMCB9LAorCXsgVDNfU1ZJRF8zQ09NLCBUM19TU0lEXzNDT01fM0M5OTZTWCwgMCwgMSB9LAorCXsgVDNfU1ZJRF8zQ09NLCBUM19TU0lEXzNDT01fM0MxMDAwVCwgUEhZX0JDTTU3MDFfUEhZX0lELCAwIH0sCisJeyBUM19TVklEXzNDT00sIFQzX1NTSURfM0NPTV8zQzk0MEJSMDEsIFBIWV9CQ001NzAxX1BIWV9JRCwgMCB9LAogCi0gICAgICAgIHsgVDNfU1ZJRF9ERUxMLCBUM19TU0lEX0RFTExfVklQRVIsIFBIWV9CQ001NDAxX1BIWV9JRCwgMCB9LAotICAgICAgICB7IFQzX1NWSURfREVMTCwgVDNfU1NJRF9ERUxMX0pBR1VBUiwgUEhZX0JDTTU0MDFfUEhZX0lELCAwIH0sCi0gICAgICAgIHsgVDNfU1ZJRF9ERUxMLCBUM19TU0lEX0RFTExfTUVSTE9ULCBQSFlfQkNNNTQxMV9QSFlfSUQsIDAgfSwKLSAgICAgICAgeyBUM19TVklEX0RFTEwsIFQzX1NTSURfREVMTF9TTElNX01FUkxPVCwgUEhZX0JDTTU0MTFfUEhZX0lELCAwIH0sCisJeyBUM19TVklEX0RFTEwsIFQzX1NTSURfREVMTF9WSVBFUiwgUEhZX0JDTTU0MDFfUEhZX0lELCAwIH0sCisJeyBUM19TVklEX0RFTEwsIFQzX1NTSURfREVMTF9KQUdVQVIsIFBIWV9CQ001NDAxX1BIWV9JRCwgMCB9LAorCXsgVDNfU1ZJRF9ERUxMLCBUM19TU0lEX0RFTExfTUVSTE9ULCBQSFlfQkNNNTQxMV9QSFlfSUQsIDAgfSwKKwl7IFQzX1NWSURfREVMTCwgVDNfU1NJRF9ERUxMX1NMSU1fTUVSTE9ULCBQSFlfQkNNNTQxMV9QSFlfSUQsIDAgfSwKIAotICAgICAgICB7IFQzX1NWSURfQ09NUEFRLCBUM19TU0lEX0NPTVBBUV9CQU5TSEVFLCBQSFlfQkNNNTcwMV9QSFlfSUQsIDAgfSwKLSAgICAgICAgeyBUM19TVklEX0NPTVBBUSwgVDNfU1NJRF9DT01QQVFfQkFOU0hFRV8yLCBQSFlfQkNNNTcwMV9QSFlfSUQsIDAgfSwKLSAgICAgICAgeyBUM19TVklEX0NPTVBBUSwgVDNfU1NJRF9DT01QQVFfQ0hBTkdFTElORywgMCwgMSB9LAotICAgICAgICB7IFQzX1NWSURfQ09NUEFRLCBUM19TU0lEX0NPTVBBUV9OQzc3ODAsIFBIWV9CQ001NzAxX1BIWV9JRCwgMCB9LAotICAgICAgICB7IFQzX1NWSURfQ09NUEFRLCBUM19TU0lEX0NPTVBBUV9OQzc3ODBfMiwgUEhZX0JDTTU3MDFfUEhZX0lELCAwIH0sCisJeyBUM19TVklEX0NPTVBBUSwgVDNfU1NJRF9DT01QQVFfQkFOU0hFRSwgUEhZX0JDTTU3MDFfUEhZX0lELCAwIH0sCisJeyBUM19TVklEX0NPTVBBUSwgVDNfU1NJRF9DT01QQVFfQkFOU0hFRV8yLCBQSFlfQkNNNTcwMV9QSFlfSUQsIDAgfSwKKwl7IFQzX1NWSURfQ09NUEFRLCBUM19TU0lEX0NPTVBBUV9DSEFOR0VMSU5HLCAwLCAxIH0sCisJeyBUM19TVklEX0NPTVBBUSwgVDNfU1NJRF9DT01QQVFfTkM3NzgwLCBQSFlfQkNNNTcwMV9QSFlfSUQsIDAgfSwKKwl7IFQzX1NWSURfQ09NUEFRLCBUM19TU0lEX0NPTVBBUV9OQzc3ODBfMiwgUEhZX0JDTTU3MDFfUEhZX0lELCAwIH0sCiAKICAgICB9OwogICAgIExNX1VJTlQzMiBqOwogCiAgICAgZm9yKGogPSAwOyBqIDwgc2l6ZW9mKEFkYXB0ZXJBcnIpL3NpemVvZihMTV9BREFQVEVSX0lORk8pOyBqKyspCiAgICAgewotICAgICAgICBpZihBZGFwdGVyQXJyW2pdLlN2aWQgPT0gU3ZpZCAmJiBBZGFwdGVyQXJyW2pdLlNzaWQgPT0gU3NpZCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICZBZGFwdGVyQXJyW2pdOwotICAgICAgICB9CisJaWYoQWRhcHRlckFycltqXS5TdmlkID09IFN2aWQgJiYgQWRhcHRlckFycltqXS5Tc2lkID09IFNzaWQpCisJeworCSAgICByZXR1cm4gJkFkYXB0ZXJBcnJbal07CisJfQogICAgIH0KIAogICAgIHJldHVybiBOVUxMOwpAQCAtMTY1OSw5ICsxNjU0LDkgQEAKIAogICAgIC8qIEludGlhbGl6ZSB0aGUgcXVldWVzLiAqLwogICAgIFFRX0luaXRRdWV1ZSgmcERldmljZS0+UnhQYWNrZXRSZWNlaXZlZFEuQ29udGFpbmVyLAotICAgICAgICBNQVhfUlhfUEFDS0VUX0RFU0NfQ09VTlQpOworCU1BWF9SWF9QQUNLRVRfREVTQ19DT1VOVCk7CiAgICAgUVFfSW5pdFF1ZXVlKCZwRGV2aWNlLT5SeFBhY2tldEZyZWVRLkNvbnRhaW5lciwKLSAgICAgICAgTUFYX1JYX1BBQ0tFVF9ERVNDX0NPVU5UKTsKKwlNQVhfUlhfUEFDS0VUX0RFU0NfQ09VTlQpOwogCiAgICAgUVFfSW5pdFF1ZXVlKCZwRGV2aWNlLT5UeFBhY2tldEZyZWVRLkNvbnRhaW5lcixNQVhfVFhfUEFDS0VUX0RFU0NfQ09VTlQpOwogICAgIFFRX0luaXRRdWV1ZSgmcERldmljZS0+VHhQYWNrZXRBY3RpdmVRLkNvbnRhaW5lcixNQVhfVFhfUEFDS0VUX0RFU0NfQ09VTlQpOwpAQCAtMTY3MCw2MCArMTY2NSw2MCBAQAogICAgIC8qIEFsbG9jYXRlIHNoYXJlZCBtZW1vcnkgZm9yOiBzdGF0dXMgYmxvY2ssIHRoZSBidWZmZXJzIGZvciByZWNlaXZlICovCiAgICAgLyogcmluZ3MgLS0gc3RhbmRhcmQsIG1pbmksIGp1bWJvLCBhbmQgcmV0dXJuIHJpbmdzLiAqLwogICAgIFNpemUgPSBUM19TVEFUVVNfQkxPQ0tfU0laRSArIHNpemVvZihUM19TVEFUU19CTE9DSykgKwotICAgICAgICBUM19TVERfUkNWX1JDQl9FTlRSWV9DT1VOVCAqIHNpemVvZihUM19SQ1ZfQkQpICsKKwlUM19TVERfUkNWX1JDQl9FTlRSWV9DT1VOVCAqIHNpemVvZihUM19SQ1ZfQkQpICsKICNpZiBUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UCi0gICAgICAgIFQzX0pVTUJPX1JDVl9SQ0JfRU5UUllfQ09VTlQgKiBzaXplb2YoVDNfUkNWX0JEKSArCisJVDNfSlVNQk9fUkNWX1JDQl9FTlRSWV9DT1VOVCAqIHNpemVvZihUM19SQ1ZfQkQpICsKICNlbmRpZiAvKiBUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UICovCi0gICAgICAgIFQzX1JDVl9SRVRVUk5fUkNCX0VOVFJZX0NPVU5UICogc2l6ZW9mKFQzX1JDVl9CRCk7CisJVDNfUkNWX1JFVFVSTl9SQ0JfRU5UUllfQ09VTlQgKiBzaXplb2YoVDNfUkNWX0JEKTsKIAogICAgIC8qIE1lbW9yeSBmb3IgaG9zdCBiYXNlZCBTZW5kIEJELiAqLwogICAgIGlmKHBEZXZpY2UtPk5pY1NlbmRCZCA9PSBGQUxTRSkKICAgICB7Ci0gICAgICAgIFNpemUgKz0gc2l6ZW9mKFQzX1NORF9CRCkgKiBUM19TRU5EX1JDQl9FTlRSWV9DT1VOVDsKKwlTaXplICs9IHNpemVvZihUM19TTkRfQkQpICogVDNfU0VORF9SQ0JfRU5UUllfQ09VTlQ7CiAgICAgfQogCiAgICAgLyogQWxsb2NhdGUgdGhlIG1lbW9yeSBibG9jay4gKi8KICAgICBTdGF0dXMgPSBNTV9BbGxvY2F0ZVNoYXJlZE1lbW9yeShwRGV2aWNlLCBTaXplLCAoUExNX1ZPSUQpICZwTWVtVmlydCwgJk1lbVBoeSwgRkFMU0UpOwogICAgIGlmKFN0YXR1cyAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKICAgICB7Ci0gICAgICAgIHJldHVybiBTdGF0dXM7CisJcmV0dXJuIFN0YXR1czsKICAgICB9CiAKICAgICAvKiBQcm9ncmFtIERNQSBSZWFkL1dyaXRlICovCiAgICAgaWYgKHBEZXZpY2UtPlBjaVN0YXRlICYgVDNfUENJX1NUQVRFX05PVF9QQ0lfWF9CVVMpCiAgICAgewotICAgICAgICBwRGV2aWNlLT5EbWFSZWFkV3JpdGVDdHJsID0gMHg3NjNmMDAwZjsKKwlwRGV2aWNlLT5EbWFSZWFkV3JpdGVDdHJsID0gMHg3NjNmMDAwZjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5EbWFSZWFkV3JpdGVDdHJsID0gMHg3NjFmMDAwMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPkRtYVJlYWRXcml0ZUN0cmwgPSAweDc2MWIwMDBmOwotICAgICAgICB9Ci0gICAgICAgIGlmKHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDNfQTEgfHwKLSAgICAgICAgICAgIHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDNfQTIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPk9uZURtYUF0T25jZSA9IFRSVUU7Ci0gICAgICAgIH0KKwlpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDQpCisJeworCSAgICBwRGV2aWNlLT5EbWFSZWFkV3JpdGVDdHJsID0gMHg3NjFmMDAwMDsKKwl9CisJZWxzZQorCXsKKwkgICAgcERldmljZS0+RG1hUmVhZFdyaXRlQ3RybCA9IDB4NzYxYjAwMGY7CisJfQorCWlmKHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDNfQTEgfHwKKwkgICAgcERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwM19BMikKKwl7CisJICAgIHBEZXZpY2UtPk9uZURtYUF0T25jZSA9IFRSVUU7CisJfQogICAgIH0KICAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDMpCiAgICAgewotICAgICAgICBwRGV2aWNlLT5EbWFSZWFkV3JpdGVDdHJsICY9IDB4ZmZmZmZmZjA7CisJcERldmljZS0+RG1hUmVhZFdyaXRlQ3RybCAmPSAweGZmZmZmZmYwOwogICAgIH0KIAogICAgIGlmKHBEZXZpY2UtPk9uZURtYUF0T25jZSkKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPkRtYVJlYWRXcml0ZUN0cmwgfD0gRE1BX0NUUkxfV1JJVEVfT05FX0RNQV9BVF9PTkNFOworCXBEZXZpY2UtPkRtYVJlYWRXcml0ZUN0cmwgfD0gRE1BX0NUUkxfV1JJVEVfT05FX0RNQV9BVF9PTkNFOwogICAgIH0KICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLkRtYVJlYWRXcml0ZUN0cmwsIHBEZXZpY2UtPkRtYVJlYWRXcml0ZUN0cmwpOwogCiAgICAgaWYgKExNX0RtYVRlc3QocERldmljZSwgcE1lbVZpcnQsIE1lbVBoeSwgMHg0MDApICE9IExNX1NUQVRVU19TVUNDRVNTKQogICAgIHsKLSAgICAgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOworCXJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKICAgICB9CiAKICAgICAvKiBTdGF0dXMgYmxvY2suICovCkBAIC0xNzQ0LDcgKzE3MzksNyBAQAogCiAgICAgcE1lbVZpcnQgKz0gVDNfU1REX1JDVl9SQ0JfRU5UUllfQ09VTlQgKiBzaXplb2YoVDNfUkNWX0JEKTsKICAgICBMTV9JTkNfUEhZU0lDQUxfQUREUkVTUygmTWVtUGh5LAotICAgICAgICBUM19TVERfUkNWX1JDQl9FTlRSWV9DT1VOVCAqIHNpemVvZihUM19SQ1ZfQkQpKTsKKwlUM19TVERfUkNWX1JDQl9FTlRSWV9DT1VOVCAqIHNpemVvZihUM19SQ1ZfQkQpKTsKIAogI2lmIFQzX0pVTUJPX1JDVl9SQ0JfRU5UUllfQ09VTlQKICAgICAvKiBSZWNlaXZlIGp1bWJvIEJEIGJ1ZmZlci4gKi8KQEAgLTE3NTMsNyArMTc0OCw3IEBACiAKICAgICBwTWVtVmlydCArPSBUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UICogc2l6ZW9mKFQzX1JDVl9CRCk7CiAgICAgTE1fSU5DX1BIWVNJQ0FMX0FERFJFU1MoJk1lbVBoeSwKLSAgICAgICAgVDNfSlVNQk9fUkNWX1JDQl9FTlRSWV9DT1VOVCAqIHNpemVvZihUM19SQ1ZfQkQpKTsKKwlUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UICogc2l6ZW9mKFQzX1JDVl9CRCkpOwogI2VuZGlmIC8qIFQzX0pVTUJPX1JDVl9SQ0JfRU5UUllfQ09VTlQgKi8KIAogICAgIC8qIFJlY2VpdmUgcmV0dXJuIEJEIGJ1ZmZlci4gKi8KQEAgLTE3NjIsMzMgKzE3NTcsMzMgQEAKIAogICAgIHBNZW1WaXJ0ICs9IFQzX1JDVl9SRVRVUk5fUkNCX0VOVFJZX0NPVU5UICogc2l6ZW9mKFQzX1JDVl9CRCk7CiAgICAgTE1fSU5DX1BIWVNJQ0FMX0FERFJFU1MoJk1lbVBoeSwKLSAgICAgICAgVDNfUkNWX1JFVFVSTl9SQ0JfRU5UUllfQ09VTlQgKiBzaXplb2YoVDNfUkNWX0JEKSk7CisJVDNfUkNWX1JFVFVSTl9SQ0JfRU5UUllfQ09VTlQgKiBzaXplb2YoVDNfUkNWX0JEKSk7CiAKICAgICAvKiBTZXQgdXAgU2VuZCBCRC4gKi8KICAgICBpZihwRGV2aWNlLT5OaWNTZW5kQmQgPT0gRkFMU0UpCiAgICAgewotICAgICAgICBwRGV2aWNlLT5wU2VuZEJkVmlydCA9IChQVDNfU05EX0JEKSBwTWVtVmlydDsKLSAgICAgICAgcERldmljZS0+U2VuZEJkUGh5ID0gTWVtUGh5OworCXBEZXZpY2UtPnBTZW5kQmRWaXJ0ID0gKFBUM19TTkRfQkQpIHBNZW1WaXJ0OworCXBEZXZpY2UtPlNlbmRCZFBoeSA9IE1lbVBoeTsKIAotICAgICAgICBwTWVtVmlydCArPSBzaXplb2YoVDNfU05EX0JEKSAqIFQzX1NFTkRfUkNCX0VOVFJZX0NPVU5UOwotICAgICAgICBMTV9JTkNfUEhZU0lDQUxfQUREUkVTUygmTWVtUGh5LAotICAgICAgICAgICAgc2l6ZW9mKFQzX1NORF9CRCkgKiBUM19TRU5EX1JDQl9FTlRSWV9DT1VOVCk7CisJcE1lbVZpcnQgKz0gc2l6ZW9mKFQzX1NORF9CRCkgKiBUM19TRU5EX1JDQl9FTlRSWV9DT1VOVDsKKwlMTV9JTkNfUEhZU0lDQUxfQUREUkVTUygmTWVtUGh5LAorCSAgICBzaXplb2YoVDNfU05EX0JEKSAqIFQzX1NFTkRfUkNCX0VOVFJZX0NPVU5UKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgcERldmljZS0+cFNlbmRCZFZpcnQgPSAoUFQzX1NORF9CRCkKLSAgICAgICAgICAgIHBEZXZpY2UtPnBNZW1WaWV3LT51SW50TWVtLkZpcnN0MzJrLkJ1ZmZlckRlc2M7Ci0gICAgICAgIHBEZXZpY2UtPlNlbmRCZFBoeS5IaWdoID0gMDsKLSAgICAgICAgcERldmljZS0+U2VuZEJkUGh5LkxvdyA9IFQzX05JQ19TTkRfQlVGRkVSX0RFU0NfQUREUjsKKwlwRGV2aWNlLT5wU2VuZEJkVmlydCA9IChQVDNfU05EX0JEKQorCSAgICBwRGV2aWNlLT5wTWVtVmlldy0+dUludE1lbS5GaXJzdDMyay5CdWZmZXJEZXNjOworCXBEZXZpY2UtPlNlbmRCZFBoeS5IaWdoID0gMDsKKwlwRGV2aWNlLT5TZW5kQmRQaHkuTG93ID0gVDNfTklDX1NORF9CVUZGRVJfREVTQ19BRERSOwogICAgIH0KIAogICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgcGFja2V0IGRlc2NyaXB0b3JzLiAqLwogICAgIFNpemUgPSAocERldmljZS0+UnhQYWNrZXREZXNjQ250ICsKLSAgICAgICAgcERldmljZS0+VHhQYWNrZXREZXNjQ250KSAqIE1NX1BBQ0tFVF9ERVNDX1NJWkU7CisJcERldmljZS0+VHhQYWNrZXREZXNjQ250KSAqIE1NX1BBQ0tFVF9ERVNDX1NJWkU7CiAgICAgU3RhdHVzID0gTU1fQWxsb2NhdGVNZW1vcnkocERldmljZSwgU2l6ZSwgKFBMTV9WT0lEICopICZwUGFja2V0KTsKICAgICBpZihTdGF0dXMgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCiAgICAgewotICAgICAgICByZXR1cm4gU3RhdHVzOworCXJldHVybiBTdGF0dXM7CiAgICAgfQogICAgIHBEZXZpY2UtPnBQYWNrZXREZXNjQmFzZSA9IChQTE1fVk9JRCkgcFBhY2tldDsKIApAQCAtMTc5Niw1NCArMTc5MSw1NCBAQAogICAgIC8qIHRvIHRoZSBUeFBhY2tldEZyZWVRIGZvciBlYWNoIHNlbmQgcmluZy4gKi8KICAgICBmb3IoaiA9IDA7IGogPCBwRGV2aWNlLT5UeFBhY2tldERlc2NDbnQ7IGorKykKICAgICB7Ci0gICAgICAgIC8qIFJpbmcgaW5kZXguICovCi0gICAgICAgIHBQYWNrZXQtPkZsYWdzID0gMDsKKwkvKiBSaW5nIGluZGV4LiAqLworCXBQYWNrZXQtPkZsYWdzID0gMDsKIAotICAgICAgICAvKiBRdWV1ZSB0aGUgZGVzY3JpcHRvciBpbiB0aGUgVHhQYWNrZXRGcmVlUSBvZiB0aGUgJ2snIHJpbmcuICovCi0gICAgICAgIFFRX1B1c2hUYWlsKCZwRGV2aWNlLT5UeFBhY2tldEZyZWVRLkNvbnRhaW5lciwgcFBhY2tldCk7CisJLyogUXVldWUgdGhlIGRlc2NyaXB0b3IgaW4gdGhlIFR4UGFja2V0RnJlZVEgb2YgdGhlICdrJyByaW5nLiAqLworCVFRX1B1c2hUYWlsKCZwRGV2aWNlLT5UeFBhY2tldEZyZWVRLkNvbnRhaW5lciwgcFBhY2tldCk7CiAKLSAgICAgICAgLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IuICBNTV9QQUNLRVRfREVTQ19TSVpFICovCi0gICAgICAgIC8qIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBwYWNrZXQgZGVzY3JpcHRvciBpbmNsdWRpbmcgdGhlICovCi0gICAgICAgIC8qIG9zLXNwZWNpZmljIGV4dGVuc2lvbnMgaW4gdGhlIFVNX1BBQ0tFVCBzdHJ1Y3R1cmUuICovCi0gICAgICAgIHBQYWNrZXQgPSAoUExNX1BBQ0tFVCkgKChQTE1fVUlOVDgpIHBQYWNrZXQgKyBNTV9QQUNLRVRfREVTQ19TSVpFKTsKKwkvKiBHZXQgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgZGVzY3JpcHRvci4gIE1NX1BBQ0tFVF9ERVNDX1NJWkUgKi8KKwkvKiBpcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgcGFja2V0IGRlc2NyaXB0b3IgaW5jbHVkaW5nIHRoZSAqLworCS8qIG9zLXNwZWNpZmljIGV4dGVuc2lvbnMgaW4gdGhlIFVNX1BBQ0tFVCBzdHJ1Y3R1cmUuICovCisJcFBhY2tldCA9IChQTE1fUEFDS0VUKSAoKFBMTV9VSU5UOCkgcFBhY2tldCArIE1NX1BBQ0tFVF9ERVNDX1NJWkUpOwogICAgIH0gLyogZm9yKGouLiAqLwogCiAgICAgLyogQ3JlYXRlIHJlY2VpdmUgcGFja2V0IGRlc2NyaXB0b3JzIGZyb20gdGhlIG1lbW9yeSBibG9jayBhbmQgYWRkIHRoZW0gKi8KICAgICAvKiB0byB0aGUgUnhQYWNrZXRGcmVlUS4gIENyZWF0ZSB0aGUgU3RhbmRhcmQgcGFja2V0IGRlc2NyaXB0b3JzLiAqLwogICAgIGZvcihqID0gMDsgaiA8IHBEZXZpY2UtPlJ4U3RkRGVzY0NudDsgaisrKQogICAgIHsKLSAgICAgICAgLyogUmVjZWl2ZSBwcm9kdWNlciByaW5nLiAqLwotICAgICAgICBwUGFja2V0LT51LlJ4LlJjdlByb2RSaW5nID0gVDNfU1REX1JDVl9QUk9EX1JJTkc7CisJLyogUmVjZWl2ZSBwcm9kdWNlciByaW5nLiAqLworCXBQYWNrZXQtPnUuUnguUmN2UHJvZFJpbmcgPSBUM19TVERfUkNWX1BST0RfUklORzsKIAotICAgICAgICAvKiBSZWNlaXZlIGJ1ZmZlciBzaXplLiAqLwotICAgICAgICBwUGFja2V0LT51LlJ4LlJ4QnVmZmVyU2l6ZSA9IE1BWF9TVERfUkNWX0JVRkZFUl9TSVpFOworCS8qIFJlY2VpdmUgYnVmZmVyIHNpemUuICovCisJcFBhY2tldC0+dS5SeC5SeEJ1ZmZlclNpemUgPSBNQVhfU1REX1JDVl9CVUZGRVJfU0laRTsKIAotICAgICAgICAvKiBBZGQgdGhlIGRlc2NyaXB0b3IgdG8gUnhQYWNrZXRGcmVlUS4gKi8KLSAgICAgICAgUVFfUHVzaFRhaWwoJnBEZXZpY2UtPlJ4UGFja2V0RnJlZVEuQ29udGFpbmVyLCBwUGFja2V0KTsKKwkvKiBBZGQgdGhlIGRlc2NyaXB0b3IgdG8gUnhQYWNrZXRGcmVlUS4gKi8KKwlRUV9QdXNoVGFpbCgmcERldmljZS0+UnhQYWNrZXRGcmVlUS5Db250YWluZXIsIHBQYWNrZXQpOwogCi0gICAgICAgIC8qIEdldCB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBkZXNjcmlwdG9yLiAgTU1fUEFDS0VUX0RFU0NfU0laRSAqLwotICAgICAgICAvKiBpcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgcGFja2V0IGRlc2NyaXB0b3IgaW5jbHVkaW5nIHRoZSAqLwotICAgICAgICAvKiBvcy1zcGVjaWZpYyBleHRlbnNpb25zIGluIHRoZSBVTV9QQUNLRVQgc3RydWN0dXJlLiAqLwotICAgICAgICBwUGFja2V0ID0gKFBMTV9QQUNLRVQpICgoUExNX1VJTlQ4KSBwUGFja2V0ICsgTU1fUEFDS0VUX0RFU0NfU0laRSk7CisJLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IuICBNTV9QQUNLRVRfREVTQ19TSVpFICovCisJLyogaXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHBhY2tldCBkZXNjcmlwdG9yIGluY2x1ZGluZyB0aGUgKi8KKwkvKiBvcy1zcGVjaWZpYyBleHRlbnNpb25zIGluIHRoZSBVTV9QQUNLRVQgc3RydWN0dXJlLiAqLworCXBQYWNrZXQgPSAoUExNX1BBQ0tFVCkgKChQTE1fVUlOVDgpIHBQYWNrZXQgKyBNTV9QQUNLRVRfREVTQ19TSVpFKTsKICAgICB9IC8qIGZvciAqLwogCiAjaWYgVDNfSlVNQk9fUkNWX1JDQl9FTlRSWV9DT1VOVAogICAgIC8qIENyZWF0ZSB0aGUgSnVtYm8gcGFja2V0IGRlc2NyaXB0b3JzLiAqLwogICAgIGZvcihqID0gMDsgaiA8IHBEZXZpY2UtPlJ4SnVtYm9EZXNjQ250OyBqKyspCiAgICAgewotICAgICAgICAvKiBSZWNlaXZlIHByb2R1Y2VyIHJpbmcuICovCi0gICAgICAgIHBQYWNrZXQtPnUuUnguUmN2UHJvZFJpbmcgPSBUM19KVU1CT19SQ1ZfUFJPRF9SSU5HOworCS8qIFJlY2VpdmUgcHJvZHVjZXIgcmluZy4gKi8KKwlwUGFja2V0LT51LlJ4LlJjdlByb2RSaW5nID0gVDNfSlVNQk9fUkNWX1BST0RfUklORzsKIAotICAgICAgICAvKiBSZWNlaXZlIGJ1ZmZlciBzaXplLiAqLwotICAgICAgICBwUGFja2V0LT51LlJ4LlJ4QnVmZmVyU2l6ZSA9IHBEZXZpY2UtPlJ4SnVtYm9CdWZmZXJTaXplOworCS8qIFJlY2VpdmUgYnVmZmVyIHNpemUuICovCisJcFBhY2tldC0+dS5SeC5SeEJ1ZmZlclNpemUgPSBwRGV2aWNlLT5SeEp1bWJvQnVmZmVyU2l6ZTsKIAotICAgICAgICAvKiBBZGQgdGhlIGRlc2NyaXB0b3IgdG8gUnhQYWNrZXRGcmVlUS4gKi8KLSAgICAgICAgUVFfUHVzaFRhaWwoJnBEZXZpY2UtPlJ4UGFja2V0RnJlZVEuQ29udGFpbmVyLCBwUGFja2V0KTsKKwkvKiBBZGQgdGhlIGRlc2NyaXB0b3IgdG8gUnhQYWNrZXRGcmVlUS4gKi8KKwlRUV9QdXNoVGFpbCgmcERldmljZS0+UnhQYWNrZXRGcmVlUS5Db250YWluZXIsIHBQYWNrZXQpOwogCi0gICAgICAgIC8qIEdldCB0aGUgcG9pbnRlciB0byB0aGUgbmV4dCBkZXNjcmlwdG9yLiAgTU1fUEFDS0VUX0RFU0NfU0laRSAqLwotICAgICAgICAvKiBpcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgcGFja2V0IGRlc2NyaXB0b3IgaW5jbHVkaW5nIHRoZSAqLwotICAgICAgICAvKiBvcy1zcGVjaWZpYyBleHRlbnNpb25zIGluIHRoZSBVTV9QQUNLRVQgc3RydWN0dXJlLiAqLwotICAgICAgICBwUGFja2V0ID0gKFBMTV9QQUNLRVQpICgoUExNX1VJTlQ4KSBwUGFja2V0ICsgTU1fUEFDS0VUX0RFU0NfU0laRSk7CisJLyogR2V0IHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IuICBNTV9QQUNLRVRfREVTQ19TSVpFICovCisJLyogaXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHBhY2tldCBkZXNjcmlwdG9yIGluY2x1ZGluZyB0aGUgKi8KKwkvKiBvcy1zcGVjaWZpYyBleHRlbnNpb25zIGluIHRoZSBVTV9QQUNLRVQgc3RydWN0dXJlLiAqLworCXBQYWNrZXQgPSAoUExNX1BBQ0tFVCkgKChQTE1fVUlOVDgpIHBQYWNrZXQgKyBNTV9QQUNLRVRfREVTQ19TSVpFKTsKICAgICB9IC8qIGZvciAqLwogI2VuZGlmIC8qIFQzX0pVTUJPX1JDVl9SQ0JfRU5UUllfQ09VTlQgKi8KIApAQCAtMTg1MSwxMiArMTg0NiwxMiBAQAogICAgIFN0YXR1cyA9IE1NX0luaXRpYWxpemVVbVBhY2tldHMocERldmljZSk7CiAgICAgaWYoU3RhdHVzICE9IExNX1NUQVRVU19TVUNDRVNTKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0YXR1czsKKwlyZXR1cm4gU3RhdHVzOwogICAgIH0gLyogaWYgKi8KIAogICAgIC8qIERlZmF1bHQgcmVjZWl2ZSBtYXNrLiAqLwogICAgIHBEZXZpY2UtPlJlY2VpdmVNYXNrID0gTE1fQUNDRVBUX01VTFRJQ0FTVCB8IExNX0FDQ0VQVF9CUk9BRENBU1QgfAotICAgICAgICBMTV9BQ0NFUFRfVU5JQ0FTVDsKKwlMTV9BQ0NFUFRfVU5JQ0FTVDsKIAogICAgIC8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gdGhlIGZpcnN0IDMyayBtZW1vcnkgd2luZG93IG9yIE5pY1NlbmRCZC4gKi8KICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLk1lbVdpbmRvd0Jhc2VBZGRyLCAwKTsKQEAgLTE4NjUsNyArMTg2MCw3IEBACiAgICAgU3RhdHVzID0gTE1fUmVzZXRBZGFwdGVyKHBEZXZpY2UpOwogICAgIGlmKFN0YXR1cyAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKICAgICB7Ci0gICAgICAgIHJldHVybiBTdGF0dXM7CisJcmV0dXJuIFN0YXR1czsKICAgICB9CiAKICAgICAvKiBXZSBhcmUgZG9uZSB3aXRoIGluaXRpYWxpemF0aW9uLiAqLwpAQCAtMTg3NSw3ICsxODcwLDYgQEAKIH0gLyogTE1fSW5pdGlhbGl6ZUFkYXB0ZXIgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhpcyBmdW5jdGlvbiBFbmFibGVzL0Rpc2FibGVzIGEgZ2l2ZW4gYmxvY2suICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTg5NiwzOTkgKzE4OTAsMzk5IEBACiAKICAgICBmb3IoaSA9IDAgOyBpIDwgMzI7IGkrKykKICAgICB7Ci0gICAgICAgIGlmKCEobWFzayAmICgxIDw8IGkpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworCWlmKCEobWFzayAmICgxIDw8IGkpKSkKKwkgICAgY29udGludWU7CiAKLSAgICAgICAgc3dpdGNoICgxIDw8IGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgVDNfQkxPQ0tfRE1BX1JEOgotICAgICAgICAgICAgICAgIGRhdGEgPSBSRUdfUkQocERldmljZSwgRG1hUmVhZC5Nb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgJj0gfkRNQV9SRUFEX01PREVfRU5BQkxFOwotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgRG1hUmVhZC5Nb2RlLCBkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgTWF4V2FpdENudDsgaisrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZighKFJFR19SRChwRGV2aWNlLCBEbWFSZWFkLk1vZGUpICYgRE1BX1JFQURfTU9ERV9FTkFCTEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgRG1hUmVhZC5Nb2RlLCBkYXRhIHwgRE1BX1JFQURfTU9ERV9FTkFCTEUpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCXN3aXRjaCAoMSA8PCBpKQorCXsKKwkgICAgY2FzZSBUM19CTE9DS19ETUFfUkQ6CisJCWRhdGEgPSBSRUdfUkQocERldmljZSwgRG1hUmVhZC5Nb2RlKTsKKwkJaWYgKGNudHJsID09IExNX0RJU0FCTEUpCisJCXsKKwkJICAgIGRhdGEgJj0gfkRNQV9SRUFEX01PREVfRU5BQkxFOworCQkgICAgUkVHX1dSKHBEZXZpY2UsIERtYVJlYWQuTW9kZSwgZGF0YSk7CisJCSAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCisJCSAgICB7CisJCQlpZighKFJFR19SRChwRGV2aWNlLCBEbWFSZWFkLk1vZGUpICYgRE1BX1JFQURfTU9ERV9FTkFCTEUpKQorCQkJICAgIGJyZWFrOworCQkJTU1fV2FpdCgxMCk7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQkgICAgUkVHX1dSKHBEZXZpY2UsIERtYVJlYWQuTW9kZSwgZGF0YSB8IERNQV9SRUFEX01PREVfRU5BQkxFKTsKKwkJYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgVDNfQkxPQ0tfRE1BX0NPTVA6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IFJFR19SRChwRGV2aWNlLERtYUNvbXAuTW9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNudHJsID09IExNX0RJU0FCTEUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBkYXRhICY9IH5ETUFfQ09NUF9NT0RFX0VOQUJMRTsKLSAgICAgICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIERtYUNvbXAuTW9kZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShSRUdfUkQocERldmljZSwgRG1hQ29tcC5Nb2RlKSAmIERNQV9DT01QX01PREVfRU5BQkxFKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1NX1dhaXQoMTApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIERtYUNvbXAuTW9kZSwgZGF0YSB8IERNQV9DT01QX01PREVfRU5BQkxFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgY2FzZSBUM19CTE9DS19ETUFfQ09NUDoKKwkJZGF0YSA9IFJFR19SRChwRGV2aWNlLERtYUNvbXAuTW9kZSk7CisJCWlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQorCQl7CisJCSAgICBkYXRhICY9IH5ETUFfQ09NUF9NT0RFX0VOQUJMRTsKKwkJICAgIFJFR19XUihwRGV2aWNlLCBEbWFDb21wLk1vZGUsIGRhdGEpOworCQkgICAgZm9yKGogPSAwOyBqIDwgTWF4V2FpdENudDsgaisrKQorCQkgICAgeworCQkJaWYoIShSRUdfUkQocERldmljZSwgRG1hQ29tcC5Nb2RlKSAmIERNQV9DT01QX01PREVfRU5BQkxFKSkKKwkJCSAgICBicmVhazsKKwkJCU1NX1dhaXQoMTApOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJICAgIFJFR19XUihwRGV2aWNlLCBEbWFDb21wLk1vZGUsIGRhdGEgfCBETUFfQ09NUF9NT0RFX0VOQUJMRSk7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFQzX0JMT0NLX1JYX0JEX0lOSVRJQVRPUjoKLSAgICAgICAgICAgICAgICBkYXRhID0gUkVHX1JEKHBEZXZpY2UsIFJjdkJkSW4uTW9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNudHJsID09IExNX0RJU0FCTEUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBkYXRhICY9IH5SQ1ZfQkRfSU5fTU9ERV9FTkFCTEU7Ci0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBSY3ZCZEluLk1vZGUsZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShSRUdfUkQocERldmljZSwgUmN2QmRJbi5Nb2RlKSAmIFJDVl9CRF9JTl9NT0RFX0VOQUJMRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNTV9XYWl0KDEwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBSY3ZCZEluLk1vZGUsZGF0YSB8IFJDVl9CRF9JTl9NT0RFX0VOQUJMRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgVDNfQkxPQ0tfUlhfQkRfSU5JVElBVE9SOgorCQlkYXRhID0gUkVHX1JEKHBEZXZpY2UsIFJjdkJkSW4uTW9kZSk7CisJCWlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQorCQl7CisJCSAgICBkYXRhICY9IH5SQ1ZfQkRfSU5fTU9ERV9FTkFCTEU7CisJCSAgICBSRUdfV1IocERldmljZSwgUmN2QmRJbi5Nb2RlLGRhdGEpOworCQkgICAgZm9yKGogPSAwOyBqIDwgTWF4V2FpdENudDsgaisrKQorCQkgICAgeworCQkJaWYoIShSRUdfUkQocERldmljZSwgUmN2QmRJbi5Nb2RlKSAmIFJDVl9CRF9JTl9NT0RFX0VOQUJMRSkpCisJCQkgICAgYnJlYWs7CisJCQlNTV9XYWl0KDEwKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCSAgICBSRUdfV1IocERldmljZSwgUmN2QmRJbi5Nb2RlLGRhdGEgfCBSQ1ZfQkRfSU5fTU9ERV9FTkFCTEUpOworCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBUM19CTE9DS19SWF9CRF9DT01QOgotICAgICAgICAgICAgICAgIGRhdGEgPSBSRUdfUkQocERldmljZSwgUmN2QmRDb21wLk1vZGUpOwotICAgICAgICAgICAgICAgIGlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YSAmPSB+UkNWX0JEX0NPTVBfTU9ERV9FTkFCTEU7Ci0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBSY3ZCZENvbXAuTW9kZSxkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgTWF4V2FpdENudDsgaisrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZighKFJFR19SRChwRGV2aWNlLCBSY3ZCZENvbXAuTW9kZSkgJiBSQ1ZfQkRfQ09NUF9NT0RFX0VOQUJMRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNTV9XYWl0KDEwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBSY3ZCZENvbXAuTW9kZSxkYXRhIHwgUkNWX0JEX0NPTVBfTU9ERV9FTkFCTEUpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIFQzX0JMT0NLX1JYX0JEX0NPTVA6CisJCWRhdGEgPSBSRUdfUkQocERldmljZSwgUmN2QmRDb21wLk1vZGUpOworCQlpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKKwkJeworCQkgICAgZGF0YSAmPSB+UkNWX0JEX0NPTVBfTU9ERV9FTkFCTEU7CisJCSAgICBSRUdfV1IocERldmljZSwgUmN2QmRDb21wLk1vZGUsZGF0YSk7CisJCSAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCisJCSAgICB7CisJCQlpZighKFJFR19SRChwRGV2aWNlLCBSY3ZCZENvbXAuTW9kZSkgJiBSQ1ZfQkRfQ09NUF9NT0RFX0VOQUJMRSkpCisJCQkgICAgYnJlYWs7CisJCQlNTV9XYWl0KDEwKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCSAgICBSRUdfV1IocERldmljZSwgUmN2QmRDb21wLk1vZGUsZGF0YSB8IFJDVl9CRF9DT01QX01PREVfRU5BQkxFKTsKKwkJYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgVDNfQkxPQ0tfRE1BX1dSOgotICAgICAgICAgICAgICAgIGRhdGEgPSBSRUdfUkQocERldmljZSwgRG1hV3JpdGUuTW9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNudHJsID09IExNX0RJU0FCTEUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBkYXRhICY9IH5ETUFfV1JJVEVfTU9ERV9FTkFCTEU7Ci0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBEbWFXcml0ZS5Nb2RlLGRhdGEpOworCSAgICBjYXNlIFQzX0JMT0NLX0RNQV9XUjoKKwkJZGF0YSA9IFJFR19SRChwRGV2aWNlLCBEbWFXcml0ZS5Nb2RlKTsKKwkJaWYgKGNudHJsID09IExNX0RJU0FCTEUpCisJCXsKKwkJICAgIGRhdGEgJj0gfkRNQV9XUklURV9NT0RFX0VOQUJMRTsKKwkJICAgIFJFR19XUihwRGV2aWNlLCBEbWFXcml0ZS5Nb2RlLGRhdGEpOwogCi0gICAgICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShSRUdfUkQocERldmljZSwgRG1hV3JpdGUuTW9kZSkgJiBETUFfV1JJVEVfTU9ERV9FTkFCTEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgRG1hV3JpdGUuTW9kZSxkYXRhIHwgRE1BX1dSSVRFX01PREVfRU5BQkxFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkJICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKKwkJICAgIHsKKwkJCWlmKCEoUkVHX1JEKHBEZXZpY2UsIERtYVdyaXRlLk1vZGUpICYgRE1BX1dSSVRFX01PREVfRU5BQkxFKSkKKwkJCSAgICBicmVhazsKKwkJCU1NX1dhaXQoMTApOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJICAgIFJFR19XUihwRGV2aWNlLCBEbWFXcml0ZS5Nb2RlLGRhdGEgfCBETUFfV1JJVEVfTU9ERV9FTkFCTEUpOworCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBUM19CTE9DS19NU0lfSEFORExFUjoKLSAgICAgICAgICAgICAgICBkYXRhID0gUkVHX1JEKHBEZXZpY2UsIE1zaS5Nb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgJj0gfk1TSV9NT0RFX0VOQUJMRTsKLSAgICAgICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1zaS5Nb2RlLCBkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgTWF4V2FpdENudDsgaisrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZighKFJFR19SRChwRGV2aWNlLCBNc2kuTW9kZSkgJiBNU0lfTU9ERV9FTkFCTEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgTXNpLk1vZGUsIGRhdGEgfE1TSV9NT0RFX0VOQUJMRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgVDNfQkxPQ0tfTVNJX0hBTkRMRVI6CisJCWRhdGEgPSBSRUdfUkQocERldmljZSwgTXNpLk1vZGUpOworCQlpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKKwkJeworCQkgICAgZGF0YSAmPSB+TVNJX01PREVfRU5BQkxFOworCQkgICAgUkVHX1dSKHBEZXZpY2UsIE1zaS5Nb2RlLCBkYXRhKTsKKwkJICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKKwkJICAgIHsKKwkJCWlmKCEoUkVHX1JEKHBEZXZpY2UsIE1zaS5Nb2RlKSAmIE1TSV9NT0RFX0VOQUJMRSkpCisJCQkgICAgYnJlYWs7CisJCQlNTV9XYWl0KDEwKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCSAgICBSRUdfV1IocERldmljZSwgTXNpLk1vZGUsIGRhdGEgfE1TSV9NT0RFX0VOQUJMRSk7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFQzX0JMT0NLX1JYX0xJU1RfUExNVDoKLSAgICAgICAgICAgICAgICBkYXRhID0gUkVHX1JEKHBEZXZpY2UsIFJjdkxpc3RQbG10Lk1vZGUpOwotICAgICAgICAgICAgICAgIGlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YSAmPSB+UkNWX0xJU1RfUExNVF9NT0RFX0VOQUJMRTsKLSAgICAgICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIFJjdkxpc3RQbG10Lk1vZGUsZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShSRUdfUkQocERldmljZSwgUmN2TGlzdFBsbXQuTW9kZSkgJiBSQ1ZfTElTVF9QTE1UX01PREVfRU5BQkxFKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1NX1dhaXQoMTApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIFJjdkxpc3RQbG10Lk1vZGUsZGF0YSB8IFJDVl9MSVNUX1BMTVRfTU9ERV9FTkFCTEUpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIFQzX0JMT0NLX1JYX0xJU1RfUExNVDoKKwkJZGF0YSA9IFJFR19SRChwRGV2aWNlLCBSY3ZMaXN0UGxtdC5Nb2RlKTsKKwkJaWYgKGNudHJsID09IExNX0RJU0FCTEUpCisJCXsKKwkJICAgIGRhdGEgJj0gflJDVl9MSVNUX1BMTVRfTU9ERV9FTkFCTEU7CisJCSAgICBSRUdfV1IocERldmljZSwgUmN2TGlzdFBsbXQuTW9kZSxkYXRhKTsKKwkJICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKKwkJICAgIHsKKwkJCWlmKCEoUkVHX1JEKHBEZXZpY2UsIFJjdkxpc3RQbG10Lk1vZGUpICYgUkNWX0xJU1RfUExNVF9NT0RFX0VOQUJMRSkpCisJCQkgICAgYnJlYWs7CisJCQlNTV9XYWl0KDEwKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCSAgICBSRUdfV1IocERldmljZSwgUmN2TGlzdFBsbXQuTW9kZSxkYXRhIHwgUkNWX0xJU1RfUExNVF9NT0RFX0VOQUJMRSk7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFQzX0JMT0NLX1JYX0xJU1RfU0VMRUNUT1I6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IFJFR19SRChwRGV2aWNlLCBSY3ZMaXN0U2VsLk1vZGUpOwotICAgICAgICAgICAgICAgIGlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YSAmPSB+UkNWX0xJU1RfU0VMX01PREVfRU5BQkxFOwotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgUmN2TGlzdFNlbC5Nb2RlLGRhdGEpOwotICAgICAgICAgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoUkVHX1JEKHBEZXZpY2UsIFJjdkxpc3RTZWwuTW9kZSkgJiBSQ1ZfTElTVF9TRUxfTU9ERV9FTkFCTEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgUmN2TGlzdFNlbC5Nb2RlLGRhdGEgfFJDVl9MSVNUX1NFTF9NT0RFX0VOQUJMRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgVDNfQkxPQ0tfUlhfTElTVF9TRUxFQ1RPUjoKKwkJZGF0YSA9IFJFR19SRChwRGV2aWNlLCBSY3ZMaXN0U2VsLk1vZGUpOworCQlpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKKwkJeworCQkgICAgZGF0YSAmPSB+UkNWX0xJU1RfU0VMX01PREVfRU5BQkxFOworCQkgICAgUkVHX1dSKHBEZXZpY2UsIFJjdkxpc3RTZWwuTW9kZSxkYXRhKTsKKwkJICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKKwkJICAgIHsKKwkJCWlmKCEoUkVHX1JEKHBEZXZpY2UsIFJjdkxpc3RTZWwuTW9kZSkgJiBSQ1ZfTElTVF9TRUxfTU9ERV9FTkFCTEUpKQorCQkJICAgIGJyZWFrOworCQkJTU1fV2FpdCgxMCk7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQkgICAgUkVHX1dSKHBEZXZpY2UsIFJjdkxpc3RTZWwuTW9kZSxkYXRhIHxSQ1ZfTElTVF9TRUxfTU9ERV9FTkFCTEUpOworCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBUM19CTE9DS19SWF9EQVRBX0lOSVRJQVRPUjoKLSAgICAgICAgICAgICAgICBkYXRhID0gUkVHX1JEKHBEZXZpY2UsIFJjdkRhdGFCZEluLk1vZGUpOwotICAgICAgICAgICAgICAgIGlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YSAmPSB+UkNWX0RBVEFfQkRfSU5fTU9ERV9FTkFCTEU7Ci0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQmRJbi5Nb2RlLGRhdGEpOwotICAgICAgICAgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoUkVHX1JEKHBEZXZpY2UsIFJjdkRhdGFCZEluLk1vZGUpICYgUkNWX0RBVEFfQkRfSU5fTU9ERV9FTkFCTEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgUmN2RGF0YUJkSW4uTW9kZSwgZGF0YSB8IFJDVl9EQVRBX0JEX0lOX01PREVfRU5BQkxFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgY2FzZSBUM19CTE9DS19SWF9EQVRBX0lOSVRJQVRPUjoKKwkJZGF0YSA9IFJFR19SRChwRGV2aWNlLCBSY3ZEYXRhQmRJbi5Nb2RlKTsKKwkJaWYgKGNudHJsID09IExNX0RJU0FCTEUpCisJCXsKKwkJICAgIGRhdGEgJj0gflJDVl9EQVRBX0JEX0lOX01PREVfRU5BQkxFOworCQkgICAgUkVHX1dSKHBEZXZpY2UsIFJjdkRhdGFCZEluLk1vZGUsZGF0YSk7CisJCSAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCisJCSAgICB7CisJCQlpZighKFJFR19SRChwRGV2aWNlLCBSY3ZEYXRhQmRJbi5Nb2RlKSAmIFJDVl9EQVRBX0JEX0lOX01PREVfRU5BQkxFKSkKKwkJCSAgICBicmVhazsKKwkJCU1NX1dhaXQoMTApOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJICAgIFJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQmRJbi5Nb2RlLCBkYXRhIHwgUkNWX0RBVEFfQkRfSU5fTU9ERV9FTkFCTEUpOworCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBUM19CTE9DS19SWF9EQVRBX0NPTVA6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IFJFR19SRChwRGV2aWNlLCBSY3ZEYXRhQ29tcC5Nb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgJj0gflJDVl9EQVRBX0NPTVBfTU9ERV9FTkFCTEU7Ci0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQ29tcC5Nb2RlLGRhdGEpOwotICAgICAgICAgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoUkVHX1JEKHBEZXZpY2UsIFJjdkRhdGFCZEluLk1vZGUpICYgUkNWX0RBVEFfQ09NUF9NT0RFX0VOQUJMRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNTV9XYWl0KDEwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQ29tcC5Nb2RlLGRhdGEgfCBSQ1ZfREFUQV9DT01QX01PREVfRU5BQkxFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgY2FzZSBUM19CTE9DS19SWF9EQVRBX0NPTVA6CisJCWRhdGEgPSBSRUdfUkQocERldmljZSwgUmN2RGF0YUNvbXAuTW9kZSk7CisJCWlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQorCQl7CisJCSAgICBkYXRhICY9IH5SQ1ZfREFUQV9DT01QX01PREVfRU5BQkxFOworCQkgICAgUkVHX1dSKHBEZXZpY2UsIFJjdkRhdGFDb21wLk1vZGUsZGF0YSk7CisJCSAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCisJCSAgICB7CisJCQlpZighKFJFR19SRChwRGV2aWNlLCBSY3ZEYXRhQmRJbi5Nb2RlKSAmIFJDVl9EQVRBX0NPTVBfTU9ERV9FTkFCTEUpKQorCQkJICAgIGJyZWFrOworCQkJTU1fV2FpdCgxMCk7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQkgICAgUkVHX1dSKHBEZXZpY2UsIFJjdkRhdGFDb21wLk1vZGUsZGF0YSB8IFJDVl9EQVRBX0NPTVBfTU9ERV9FTkFCTEUpOworCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBUM19CTE9DS19IT1NUX0NPQUxFU0lORzoKLSAgICAgICAgICAgICAgICBkYXRhID0gUkVHX1JEKHBEZXZpY2UsIEhvc3RDb2FsZXNjZS5Nb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgJj0gfkhPU1RfQ09BTEVTQ0VfRU5BQkxFOwotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgSG9zdENvYWxlc2NlLk1vZGUsIGRhdGEpOwotICAgICAgICAgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoUkVHX1JEKHBEZXZpY2UsIFNuZEJkSW4uTW9kZSkgJiBIT1NUX0NPQUxFU0NFX0VOQUJMRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNTV9XYWl0KDEwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBIb3N0Q29hbGVzY2UuTW9kZSwgZGF0YSB8IEhPU1RfQ09BTEVTQ0VfRU5BQkxFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgY2FzZSBUM19CTE9DS19IT1NUX0NPQUxFU0lORzoKKwkJZGF0YSA9IFJFR19SRChwRGV2aWNlLCBIb3N0Q29hbGVzY2UuTW9kZSk7CisJCWlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQorCQl7CisJCSAgICBkYXRhICY9IH5IT1NUX0NPQUxFU0NFX0VOQUJMRTsKKwkJICAgIFJFR19XUihwRGV2aWNlLCBIb3N0Q29hbGVzY2UuTW9kZSwgZGF0YSk7CisJCSAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCisJCSAgICB7CisJCQlpZighKFJFR19SRChwRGV2aWNlLCBTbmRCZEluLk1vZGUpICYgSE9TVF9DT0FMRVNDRV9FTkFCTEUpKQorCQkJICAgIGJyZWFrOworCQkJTU1fV2FpdCgxMCk7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQkgICAgUkVHX1dSKHBEZXZpY2UsIEhvc3RDb2FsZXNjZS5Nb2RlLCBkYXRhIHwgSE9TVF9DT0FMRVNDRV9FTkFCTEUpOworCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBUM19CTE9DS19NQUNfUlhfRU5HSU5FOgotICAgICAgICAgICAgICAgIGlmKGNudHJsID09IExNX0RJU0FCTEUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5SeE1vZGUgJj0gflJYX01PREVfRU5BQkxFOwotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5SeE1vZGUsIHBEZXZpY2UtPlJ4TW9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShSRUdfUkQocERldmljZSwgTWFjQ3RybC5SeE1vZGUpICYgUlhfTU9ERV9FTkFCTEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+UnhNb2RlIHw9IFJYX01PREVfRU5BQkxFOwotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5SeE1vZGUsIHBEZXZpY2UtPlJ4TW9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIFQzX0JMT0NLX01BQ19SWF9FTkdJTkU6CisJCWlmKGNudHJsID09IExNX0RJU0FCTEUpCisJCXsKKwkJICAgIHBEZXZpY2UtPlJ4TW9kZSAmPSB+UlhfTU9ERV9FTkFCTEU7CisJCSAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5SeE1vZGUsIHBEZXZpY2UtPlJ4TW9kZSk7CisJCSAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCisJCSAgICB7CisJCQlpZighKFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLlJ4TW9kZSkgJiBSWF9NT0RFX0VOQUJMRSkpCisJCQl7CisJCQkgICAgYnJlYWs7CisJCQl9CisJCQlNTV9XYWl0KDEwKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCXsKKwkJICAgIHBEZXZpY2UtPlJ4TW9kZSB8PSBSWF9NT0RFX0VOQUJMRTsKKwkJICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlJ4TW9kZSwgcERldmljZS0+UnhNb2RlKTsKKwkJfQorCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBUM19CTE9DS19NQlVGX0NMVVNURVJfRlJFRToKLSAgICAgICAgICAgICAgICBkYXRhID0gUkVHX1JEKHBEZXZpY2UsIE1idWZDbHVzdGVyRnJlZS5Nb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgJj0gfk1CVUZfQ0xVU1RFUl9GUkVFX01PREVfRU5BQkxFOwotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgTWJ1ZkNsdXN0ZXJGcmVlLk1vZGUsZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShSRUdfUkQocERldmljZSwgTWJ1ZkNsdXN0ZXJGcmVlLk1vZGUpICYgTUJVRl9DTFVTVEVSX0ZSRUVfTU9ERV9FTkFCTEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgTWJ1ZkNsdXN0ZXJGcmVlLk1vZGUsIGRhdGEgfCBNQlVGX0NMVVNURVJfRlJFRV9NT0RFX0VOQUJMRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgVDNfQkxPQ0tfTUJVRl9DTFVTVEVSX0ZSRUU6CisJCWRhdGEgPSBSRUdfUkQocERldmljZSwgTWJ1ZkNsdXN0ZXJGcmVlLk1vZGUpOworCQlpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKKwkJeworCQkgICAgZGF0YSAmPSB+TUJVRl9DTFVTVEVSX0ZSRUVfTU9ERV9FTkFCTEU7CisJCSAgICBSRUdfV1IocERldmljZSwgTWJ1ZkNsdXN0ZXJGcmVlLk1vZGUsZGF0YSk7CisJCSAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCisJCSAgICB7CisJCQlpZighKFJFR19SRChwRGV2aWNlLCBNYnVmQ2x1c3RlckZyZWUuTW9kZSkgJiBNQlVGX0NMVVNURVJfRlJFRV9NT0RFX0VOQUJMRSkpCisJCQkgICAgYnJlYWs7CisJCQlNTV9XYWl0KDEwKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCSAgICBSRUdfV1IocERldmljZSwgTWJ1ZkNsdXN0ZXJGcmVlLk1vZGUsIGRhdGEgfCBNQlVGX0NMVVNURVJfRlJFRV9NT0RFX0VOQUJMRSk7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFQzX0JMT0NLX1NFTkRfQkRfSU5JVElBVE9SOgotICAgICAgICAgICAgICAgIGRhdGEgPSBSRUdfUkQocERldmljZSwgU25kQmRJbi5Nb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgJj0gflNORF9CRF9JTl9NT0RFX0VOQUJMRTsKLSAgICAgICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIFNuZEJkSW4uTW9kZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShSRUdfUkQocERldmljZSwgU25kQmRJbi5Nb2RlKSAmIFNORF9CRF9JTl9NT0RFX0VOQUJMRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNTV9XYWl0KDEwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBTbmRCZEluLk1vZGUsIGRhdGEgIHwgU05EX0JEX0lOX01PREVfRU5BQkxFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgY2FzZSBUM19CTE9DS19TRU5EX0JEX0lOSVRJQVRPUjoKKwkJZGF0YSA9IFJFR19SRChwRGV2aWNlLCBTbmRCZEluLk1vZGUpOworCQlpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKKwkJeworCQkgICAgZGF0YSAmPSB+U05EX0JEX0lOX01PREVfRU5BQkxFOworCQkgICAgUkVHX1dSKHBEZXZpY2UsIFNuZEJkSW4uTW9kZSwgZGF0YSk7CisJCSAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCisJCSAgICB7CisJCQlpZighKFJFR19SRChwRGV2aWNlLCBTbmRCZEluLk1vZGUpICYgU05EX0JEX0lOX01PREVfRU5BQkxFKSkKKwkJCSAgICBicmVhazsKKwkJCU1NX1dhaXQoMTApOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJICAgIFJFR19XUihwRGV2aWNlLCBTbmRCZEluLk1vZGUsIGRhdGEgIHwgU05EX0JEX0lOX01PREVfRU5BQkxFKTsKKwkJYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgVDNfQkxPQ0tfU0VORF9CRF9DT01QOgotICAgICAgICAgICAgICAgIGRhdGEgPSBSRUdfUkQocERldmljZSwgU25kQmRDb21wLk1vZGUpOwotICAgICAgICAgICAgICAgIGlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YSAmPSB+U05EX0JEX0NPTVBfTU9ERV9FTkFCTEU7Ci0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBTbmRCZENvbXAuTW9kZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShSRUdfUkQocERldmljZSwgU25kQmRDb21wLk1vZGUpICYgU05EX0JEX0NPTVBfTU9ERV9FTkFCTEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgU25kQmRDb21wLk1vZGUsIGRhdGEgfCBTTkRfQkRfQ09NUF9NT0RFX0VOQUJMRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgVDNfQkxPQ0tfU0VORF9CRF9DT01QOgorCQlkYXRhID0gUkVHX1JEKHBEZXZpY2UsIFNuZEJkQ29tcC5Nb2RlKTsKKwkJaWYgKGNudHJsID09IExNX0RJU0FCTEUpCisJCXsKKwkJICAgIGRhdGEgJj0gflNORF9CRF9DT01QX01PREVfRU5BQkxFOworCQkgICAgUkVHX1dSKHBEZXZpY2UsIFNuZEJkQ29tcC5Nb2RlLCBkYXRhKTsKKwkJICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKKwkJICAgIHsKKwkJCWlmKCEoUkVHX1JEKHBEZXZpY2UsIFNuZEJkQ29tcC5Nb2RlKSAmIFNORF9CRF9DT01QX01PREVfRU5BQkxFKSkKKwkJCSAgICBicmVhazsKKwkJCU1NX1dhaXQoMTApOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJICAgIFJFR19XUihwRGV2aWNlLCBTbmRCZENvbXAuTW9kZSwgZGF0YSB8IFNORF9CRF9DT01QX01PREVfRU5BQkxFKTsKKwkJYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgVDNfQkxPQ0tfU0VORF9CRF9TRUxFQ1RPUjoKLSAgICAgICAgICAgICAgICBkYXRhID0gUkVHX1JEKHBEZXZpY2UsIFNuZEJkU2VsLk1vZGUpOwotICAgICAgICAgICAgICAgIGlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YSAmPSB+U05EX0JEX1NFTF9NT0RFX0VOQUJMRTsKLSAgICAgICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIFNuZEJkU2VsLk1vZGUsIGRhdGEpOwotICAgICAgICAgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoUkVHX1JEKHBEZXZpY2UsIFNuZEJkU2VsLk1vZGUpICYgU05EX0JEX1NFTF9NT0RFX0VOQUJMRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNTV9XYWl0KDEwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBTbmRCZFNlbC5Nb2RlLCBkYXRhIHwgU05EX0JEX1NFTF9NT0RFX0VOQUJMRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgVDNfQkxPQ0tfU0VORF9CRF9TRUxFQ1RPUjoKKwkJZGF0YSA9IFJFR19SRChwRGV2aWNlLCBTbmRCZFNlbC5Nb2RlKTsKKwkJaWYgKGNudHJsID09IExNX0RJU0FCTEUpCisJCXsKKwkJICAgIGRhdGEgJj0gflNORF9CRF9TRUxfTU9ERV9FTkFCTEU7CisJCSAgICBSRUdfV1IocERldmljZSwgU25kQmRTZWwuTW9kZSwgZGF0YSk7CisJCSAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCisJCSAgICB7CisJCQlpZighKFJFR19SRChwRGV2aWNlLCBTbmRCZFNlbC5Nb2RlKSAmIFNORF9CRF9TRUxfTU9ERV9FTkFCTEUpKQorCQkJICAgIGJyZWFrOworCQkJTU1fV2FpdCgxMCk7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQkgICAgUkVHX1dSKHBEZXZpY2UsIFNuZEJkU2VsLk1vZGUsIGRhdGEgfCBTTkRfQkRfU0VMX01PREVfRU5BQkxFKTsKKwkJYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgVDNfQkxPQ0tfU0VORF9EQVRBX0lOSVRJQVRPUjoKLSAgICAgICAgICAgICAgICBkYXRhID0gUkVHX1JEKHBEZXZpY2UsIFNuZERhdGFJbi5Nb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgJj0gflQzX1NORF9EQVRBX0lOX01PREVfRU5BQkxFOwotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgU25kRGF0YUluLk1vZGUsZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShSRUdfUkQocERldmljZSwgU25kRGF0YUluLk1vZGUpICYgVDNfU05EX0RBVEFfSU5fTU9ERV9FTkFCTEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgU25kRGF0YUluLk1vZGUsZGF0YSB8IFQzX1NORF9EQVRBX0lOX01PREVfRU5BQkxFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgY2FzZSBUM19CTE9DS19TRU5EX0RBVEFfSU5JVElBVE9SOgorCQlkYXRhID0gUkVHX1JEKHBEZXZpY2UsIFNuZERhdGFJbi5Nb2RlKTsKKwkJaWYgKGNudHJsID09IExNX0RJU0FCTEUpCisJCXsKKwkJICAgIGRhdGEgJj0gflQzX1NORF9EQVRBX0lOX01PREVfRU5BQkxFOworCQkgICAgUkVHX1dSKHBEZXZpY2UsIFNuZERhdGFJbi5Nb2RlLGRhdGEpOworCQkgICAgZm9yKGogPSAwOyBqIDwgTWF4V2FpdENudDsgaisrKQorCQkgICAgeworCQkJaWYoIShSRUdfUkQocERldmljZSwgU25kRGF0YUluLk1vZGUpICYgVDNfU05EX0RBVEFfSU5fTU9ERV9FTkFCTEUpKQorCQkJICAgIGJyZWFrOworCQkJTU1fV2FpdCgxMCk7CisJCSAgICB9CisJCX0KKwkJZWxzZQorCQkgICAgUkVHX1dSKHBEZXZpY2UsIFNuZERhdGFJbi5Nb2RlLGRhdGEgfCBUM19TTkRfREFUQV9JTl9NT0RFX0VOQUJMRSk7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFQzX0JMT0NLX1NFTkRfREFUQV9DT01QOgotICAgICAgICAgICAgICAgIGRhdGEgPSBSRUdfUkQocERldmljZSwgU25kRGF0YUNvbXAuTW9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNudHJsID09IExNX0RJU0FCTEUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBkYXRhICY9IH5TTkRfREFUQV9DT01QX01PREVfRU5BQkxFOwotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgU25kRGF0YUNvbXAuTW9kZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIShSRUdfUkQocERldmljZSwgU25kRGF0YUNvbXAuTW9kZSkgJiBTTkRfREFUQV9DT01QX01PREVfRU5BQkxFKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1NX1dhaXQoMTApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIFNuZERhdGFDb21wLk1vZGUsZGF0YSB8IFNORF9EQVRBX0NPTVBfTU9ERV9FTkFCTEUpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIFQzX0JMT0NLX1NFTkRfREFUQV9DT01QOgorCQlkYXRhID0gUkVHX1JEKHBEZXZpY2UsIFNuZERhdGFDb21wLk1vZGUpOworCQlpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKKwkJeworCQkgICAgZGF0YSAmPSB+U05EX0RBVEFfQ09NUF9NT0RFX0VOQUJMRTsKKwkJICAgIFJFR19XUihwRGV2aWNlLCBTbmREYXRhQ29tcC5Nb2RlLCBkYXRhKTsKKwkJICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKKwkJICAgIHsKKwkJCWlmKCEoUkVHX1JEKHBEZXZpY2UsIFNuZERhdGFDb21wLk1vZGUpICYgU05EX0RBVEFfQ09NUF9NT0RFX0VOQUJMRSkpCisJCQkgICAgYnJlYWs7CisJCQlNTV9XYWl0KDEwKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCSAgICBSRUdfV1IocERldmljZSwgU25kRGF0YUNvbXAuTW9kZSxkYXRhIHwgU05EX0RBVEFfQ09NUF9NT0RFX0VOQUJMRSk7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFQzX0JMT0NLX01BQ19UWF9FTkdJTkU6Ci0gICAgICAgICAgICAgICAgaWYoY250cmwgPT0gTE1fRElTQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPlR4TW9kZSAmPSB+VFhfTU9ERV9FTkFCTEU7Ci0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlR4TW9kZSwgcERldmljZS0+VHhNb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgTWF4V2FpdENudDsgaisrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZighKFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLlR4TW9kZSkgJiBUWF9NT0RFX0VOQUJMRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNTV9XYWl0KDEwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5UeE1vZGUgfD0gVFhfTU9ERV9FTkFCTEU7Ci0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlR4TW9kZSwgcERldmljZS0+VHhNb2RlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgVDNfQkxPQ0tfTUFDX1RYX0VOR0lORToKKwkJaWYoY250cmwgPT0gTE1fRElTQUJMRSkKKwkJeworCQkgICAgcERldmljZS0+VHhNb2RlICY9IH5UWF9NT0RFX0VOQUJMRTsKKwkJICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlR4TW9kZSwgcERldmljZS0+VHhNb2RlKTsKKwkJICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKKwkJICAgIHsKKwkJCWlmKCEoUkVHX1JEKHBEZXZpY2UsIE1hY0N0cmwuVHhNb2RlKSAmIFRYX01PREVfRU5BQkxFKSkKKwkJCSAgICBicmVhazsKKwkJCU1NX1dhaXQoMTApOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJeworCQkgICAgcERldmljZS0+VHhNb2RlIHw9IFRYX01PREVfRU5BQkxFOworCQkgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuVHhNb2RlLCBwRGV2aWNlLT5UeE1vZGUpOworCQl9CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFQzX0JMT0NLX01FTV9BUkJJVE9SOgotICAgICAgICAgICAgICAgIGRhdGEgPSBSRUdfUkQocERldmljZSwgTWVtQXJiaXRlci5Nb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgJj0gflQzX01FTV9BUkJJVEVSX01PREVfRU5BQkxFOwotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgTWVtQXJiaXRlci5Nb2RlLCBkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgTWF4V2FpdENudDsgaisrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZighKFJFR19SRChwRGV2aWNlLCBNZW1BcmJpdGVyLk1vZGUpICYgVDNfTUVNX0FSQklURVJfTU9ERV9FTkFCTEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgTWVtQXJiaXRlci5Nb2RlLGRhdGF8VDNfTUVNX0FSQklURVJfTU9ERV9FTkFCTEUpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIFQzX0JMT0NLX01FTV9BUkJJVE9SOgorCQlkYXRhID0gUkVHX1JEKHBEZXZpY2UsIE1lbUFyYml0ZXIuTW9kZSk7CisJCWlmIChjbnRybCA9PSBMTV9ESVNBQkxFKQorCQl7CisJCSAgICBkYXRhICY9IH5UM19NRU1fQVJCSVRFUl9NT0RFX0VOQUJMRTsKKwkJICAgIFJFR19XUihwRGV2aWNlLCBNZW1BcmJpdGVyLk1vZGUsIGRhdGEpOworCQkgICAgZm9yKGogPSAwOyBqIDwgTWF4V2FpdENudDsgaisrKQorCQkgICAgeworCQkJaWYoIShSRUdfUkQocERldmljZSwgTWVtQXJiaXRlci5Nb2RlKSAmIFQzX01FTV9BUkJJVEVSX01PREVfRU5BQkxFKSkKKwkJCSAgICBicmVhazsKKwkJCU1NX1dhaXQoMTApOworCQkgICAgfQorCQl9CisJCWVsc2UKKwkJICAgIFJFR19XUihwRGV2aWNlLCBNZW1BcmJpdGVyLk1vZGUsZGF0YXxUM19NRU1fQVJCSVRFUl9NT0RFX0VOQUJMRSk7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIFQzX0JMT0NLX01CVUZfTUFOQUdFUjoKLSAgICAgICAgICAgICAgICBkYXRhID0gUkVHX1JEKHBEZXZpY2UsIEJ1Zk1nci5Nb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAoY250cmwgPT0gTE1fRElTQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgJj0gfkJVRk1HUl9NT0RFX0VOQUJMRTsKLSAgICAgICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIEJ1Zk1nci5Nb2RlLGRhdGEpOwotICAgICAgICAgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBNYXhXYWl0Q250OyBqKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoUkVHX1JEKHBEZXZpY2UsIEJ1Zk1nci5Nb2RlKSAmIEJVRk1HUl9NT0RFX0VOQUJMRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNTV9XYWl0KDEwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBCdWZNZ3IuTW9kZSxkYXRhIHwgIEJVRk1HUl9NT0RFX0VOQUJMRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgVDNfQkxPQ0tfTUJVRl9NQU5BR0VSOgorCQlkYXRhID0gUkVHX1JEKHBEZXZpY2UsIEJ1Zk1nci5Nb2RlKTsKKwkJaWYgKGNudHJsID09IExNX0RJU0FCTEUpCisJCXsKKwkJICAgIGRhdGEgJj0gfkJVRk1HUl9NT0RFX0VOQUJMRTsKKwkJICAgIFJFR19XUihwRGV2aWNlLCBCdWZNZ3IuTW9kZSxkYXRhKTsKKwkJICAgIGZvcihqID0gMDsgaiA8IE1heFdhaXRDbnQ7IGorKykKKwkJICAgIHsKKwkJCWlmKCEoUkVHX1JEKHBEZXZpY2UsIEJ1Zk1nci5Nb2RlKSAmIEJVRk1HUl9NT0RFX0VOQUJMRSkpCisJCQkgICAgYnJlYWs7CisJCQlNTV9XYWl0KDEwKTsKKwkJICAgIH0KKwkJfQorCQllbHNlCisJCSAgICBSRUdfV1IocERldmljZSwgQnVmTWdyLk1vZGUsZGF0YSB8ICBCVUZNR1JfTU9ERV9FTkFCTEUpOworCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBUM19CTE9DS19NQUNfR0xPQkFMOgotICAgICAgICAgICAgICAgIGlmKGNudHJsID09IExNX0RJU0FCTEUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5NYWNNb2RlICY9IH4oTUFDX01PREVfRU5BQkxFX1RERSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICBNQUNfTU9ERV9FTkFCTEVfUkRFIHwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1BQ19NT0RFX0VOQUJMRV9GSERFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+TWFjTW9kZSB8PSAoTUFDX01PREVfRU5BQkxFX1RERSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICBNQUNfTU9ERV9FTkFCTEVfUkRFIHwKLSAgICAgICAgICAgICAgICAgICAgICAgIE1BQ19NT0RFX0VOQUJMRV9GSERFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgcERldmljZS0+TWFjTW9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgVDNfQkxPQ0tfTUFDX0dMT0JBTDoKKwkJaWYoY250cmwgPT0gTE1fRElTQUJMRSkKKwkJeworCQkgICAgcERldmljZS0+TWFjTW9kZSAmPSB+KE1BQ19NT0RFX0VOQUJMRV9UREUgfAorCQkJTUFDX01PREVfRU5BQkxFX1JERSB8CisJCQlNQUNfTU9ERV9FTkFCTEVfRkhERSk7CisJCX0KKwkJZWxzZQorCQl7CisJCSAgICBwRGV2aWNlLT5NYWNNb2RlIHw9IChNQUNfTU9ERV9FTkFCTEVfVERFIHwKKwkJCU1BQ19NT0RFX0VOQUJMRV9SREUgfAorCQkJTUFDX01PREVfRU5BQkxFX0ZIREUpOworCQl9CisJCVJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1vZGUsIHBEZXZpY2UtPk1hY01vZGUpOworCQlicmVhazsKIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7Ci0gICAgICAgIH0gLyogc3dpdGNoICovCisJICAgIGRlZmF1bHQ6CisJCXJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKKwl9IC8qIHN3aXRjaCAqLwogCi0gICAgICAgIGlmKGogPj0gTWF4V2FpdENudCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOwotICAgICAgICB9CisJaWYoaiA+PSBNYXhXYWl0Q250KQorCXsKKwkgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOworCX0KICAgICB9CiAKICAgICByZXR1cm4gTE1fU1RBVFVTX1NVQ0NFU1M7CkBAIC0yMzE4LDcgKzIzMTIsNyBAQAogICAgIC8qIERpc2FibGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgRE1BIGVuZ2luZXMuICBBYm9ydCBhbGwgcGVuZGluZyByZXF1ZXN0cy4gKi8KICAgICBpZihwRGV2aWNlLT5Jbml0RG9uZSkKICAgICB7Ci0gICAgICAgIExNX0Fib3J0KHBEZXZpY2UpOworCUxNX0Fib3J0KHBEZXZpY2UpOwogICAgIH0KIAogICAgIHBEZXZpY2UtPlNodXR0aW5nRG93biA9IEZBTFNFOwpAQCAtMjMyOSwzNiArMjMyMywzNiBAQAogICAgIC8qIGluIG90aGVyIGNoaXAgcmV2aXNpb25zLiAqLwogICAgIGlmKHBEZXZpY2UtPkRlbGF5UGNpR3JhbnQpCiAgICAgewotICAgICAgICBWYWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIFBjaUNmZy5DbG9ja0N0cmwpOwotICAgICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLkNsb2NrQ3RybCwgVmFsdWUzMiB8IEJJVF8zMSk7CisJVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBQY2lDZmcuQ2xvY2tDdHJsKTsKKwlSRUdfV1IocERldmljZSwgUGNpQ2ZnLkNsb2NrQ3RybCwgVmFsdWUzMiB8IEJJVF8zMSk7CiAgICAgfQogCiAgICAgaWYocERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwNF9BMCkKICAgICB7Ci0gICAgICAgIGlmICghKHBEZXZpY2UtPlBjaVN0YXRlICYgVDNfUENJX1NUQVRFX0NPTlZFTlRJT05BTF9QQ0lfTU9ERSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgUGNpQ2ZnLlBjaVN0YXRlKTsKLSAgICAgICAgICAgIFZhbHVlMzIgfD0gVDNfUENJX1NUQVRFX1JFVFJZX1NBTUVfRE1BOwotICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIFBjaUNmZy5QY2lTdGF0ZSwgVmFsdWUzMik7Ci0gICAgICAgIH0KKwlpZiAoIShwRGV2aWNlLT5QY2lTdGF0ZSAmIFQzX1BDSV9TVEFURV9DT05WRU5USU9OQUxfUENJX01PREUpKQorCXsKKwkgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBQY2lDZmcuUGNpU3RhdGUpOworCSAgICBWYWx1ZTMyIHw9IFQzX1BDSV9TVEFURV9SRVRSWV9TQU1FX0RNQTsKKwkgICAgUkVHX1dSKHBEZXZpY2UsIFBjaUNmZy5QY2lTdGF0ZSwgVmFsdWUzMik7CisJfQogICAgIH0KIAogICAgIC8qIEVuYWJsZSBUYWdnZWRTdGF0dXMgbW9kZS4gKi8KICAgICBpZihwRGV2aWNlLT5Vc2VUYWdnZWRTdGF0dXMpCiAgICAgewotICAgICAgICBwRGV2aWNlLT5NaXNjSG9zdEN0cmwgfD0gTUlTQ19IT1NUX0NUUkxfRU5BQkxFX1RBR0dFRF9TVEFUVVNfTU9ERTsKKwlwRGV2aWNlLT5NaXNjSG9zdEN0cmwgfD0gTUlTQ19IT1NUX0NUUkxfRU5BQkxFX1RBR0dFRF9TVEFUVVNfTU9ERTsKICAgICB9CiAKICAgICAvKiBSZXN0b3JlIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4gKi8KICAgICBNTV9Xcml0ZUNvbmZpZzMyKHBEZXZpY2UsIFBDSV9DQUNIRV9MSU5FX1NJWkVfUkVHLAotICAgICAgICBwRGV2aWNlLT5TYXZlZENhY2hlTGluZVJlZyk7CisJcERldmljZS0+U2F2ZWRDYWNoZUxpbmVSZWcpOwogICAgIE1NX1dyaXRlQ29uZmlnMzIocERldmljZSwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSURfUkVHLAotICAgICAgICAocERldmljZS0+U3Vic3lzdGVtSWQgPDwgMTYpIHwgcERldmljZS0+U3Vic3lzdGVtVmVuZG9ySWQpOworCShwRGV2aWNlLT5TdWJzeXN0ZW1JZCA8PCAxNikgfCBwRGV2aWNlLT5TdWJzeXN0ZW1WZW5kb3JJZCk7CiAKICAgICAvKiBDbGVhciB0aGUgc3RhdGlzdGljcyBibG9jay4gKi8KICAgICBmb3IoaiA9IDB4MDMwMDsgaiA8IDB4MGIwMDsgaisrKQogICAgIHsKLSAgICAgICAgTUVNX1dSX09GRlNFVChwRGV2aWNlLCBqLCAwKTsKKwlNRU1fV1JfT0ZGU0VUKHBEZXZpY2UsIGosIDApOwogICAgIH0KIAogICAgIC8qIEluaXRpYWxpemUgdGhlIHN0YXRpc3RpcyBCbG9jayAqLwpAQCAtMjM4Myw4ICsyMzc3LDggQEAKICAgICAvKiBSZWNlaXZlIGp1bWJvIEJEIGJ1ZmZlci4gKi8KICAgICBmb3IoayA9IDA7IGsgPCBUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UOyBrKyspCiAgICAgewotICAgICAgICBwRGV2aWNlLT5wUnhKdW1ib0JkVmlydFtrXS5Ib3N0QWRkci5IaWdoID0gMDsKLSAgICAgICAgcERldmljZS0+cFJ4SnVtYm9CZFZpcnRba10uSG9zdEFkZHIuTG93ID0gMDsKKwlwRGV2aWNlLT5wUnhKdW1ib0JkVmlydFtrXS5Ib3N0QWRkci5IaWdoID0gMDsKKwlwRGV2aWNlLT5wUnhKdW1ib0JkVmlydFtrXS5Ib3N0QWRkci5Mb3cgPSAwOwogICAgIH0KICNlbmRpZgogCkBAIC0yMzkzLDQ2ICsyMzg3LDQ2IEBACiAgICAgLyogR1JDIG1vZGUgY29udHJvbCByZWdpc3Rlci4gKi8KICNpZmRlZiBCSUdfRU5ESUFOX1BDSSAgICAvKiBKaW1teSwgdGhpcyBpZmRlZiBibG9jayBkZWxldGVkIGluIG5ldyBjb2RlISAqLwogICAgIFZhbHVlMzIgPQotICAgICAgICBHUkNfTU9ERV9XT1JEX1NXQVBfREFUQSB8Ci0gICAgICAgIEdSQ19NT0RFX1dPUkRfU1dBUF9OT05fRlJBTUVfREFUQSB8Ci0gICAgICAgIEdSQ19NT0RFX0lOVF9PTl9NQUNfQVRUTiB8Ci0gICAgICAgIEdSQ19NT0RFX0hPU1RfU1RBQ0tfVVA7CisJR1JDX01PREVfV09SRF9TV0FQX0RBVEEgfAorCUdSQ19NT0RFX1dPUkRfU1dBUF9OT05fRlJBTUVfREFUQSB8CisJR1JDX01PREVfSU5UX09OX01BQ19BVFROIHwKKwlHUkNfTU9ERV9IT1NUX1NUQUNLX1VQOwogI2Vsc2UKICAgICAvKiBObyBDUFUgU3dhcCBtb2RlcyBmb3IgUENJIElPICovCiAgICAgVmFsdWUzMiA9CiAjaWZkZWYgQklHX0VORElBTl9IT1NUCi0gICAgICAgIEdSQ19NT0RFX0JZVEVfU1dBUF9OT05fRlJBTUVfREFUQSB8Ci0gICAgICAgIEdSQ19NT0RFX1dPUkRfU1dBUF9OT05fRlJBTUVfREFUQSB8Ci0gICAgICAgIEdSQ19NT0RFX0JZVEVfU1dBUF9EQVRBIHwKLSAgICAgICAgR1JDX01PREVfV09SRF9TV0FQX0RBVEEgfAorCUdSQ19NT0RFX0JZVEVfU1dBUF9OT05fRlJBTUVfREFUQSB8CisJR1JDX01PREVfV09SRF9TV0FQX05PTl9GUkFNRV9EQVRBIHwKKwlHUkNfTU9ERV9CWVRFX1NXQVBfREFUQSB8CisJR1JDX01PREVfV09SRF9TV0FQX0RBVEEgfAogI2Vsc2UKLSAgICAgICAgR1JDX01PREVfV09SRF9TV0FQX05PTl9GUkFNRV9EQVRBIHwKLSAgICAgICAgR1JDX01PREVfQllURV9TV0FQX0RBVEEgfAotICAgICAgICBHUkNfTU9ERV9XT1JEX1NXQVBfREFUQSB8CisJR1JDX01PREVfV09SRF9TV0FQX05PTl9GUkFNRV9EQVRBIHwKKwlHUkNfTU9ERV9CWVRFX1NXQVBfREFUQSB8CisJR1JDX01PREVfV09SRF9TV0FQX0RBVEEgfAogI2VuZGlmCi0gICAgICAgIEdSQ19NT0RFX0lOVF9PTl9NQUNfQVRUTiB8Ci0gICAgICAgIEdSQ19NT0RFX0hPU1RfU1RBQ0tfVVA7CisJR1JDX01PREVfSU5UX09OX01BQ19BVFROIHwKKwlHUkNfTU9ERV9IT1NUX1NUQUNLX1VQOwogI2VuZGlmIC8qICFCSUdfRU5ESUFOX1BDSSAqLwogCiAgICAgLyogQ29uZmlndXJlIHNlbmQgQkQgbW9kZS4gKi8KICAgICBpZihwRGV2aWNlLT5OaWNTZW5kQmQgPT0gRkFMU0UpCiAgICAgewotICAgICAgICBWYWx1ZTMyIHw9IEdSQ19NT0RFX0hPU1RfU0VORF9CRFM7CisJVmFsdWUzMiB8PSBHUkNfTU9ERV9IT1NUX1NFTkRfQkRTOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBWYWx1ZTMyIHw9IEdSQ19NT0RFXzRYX05JQ19CQVNFRF9TRU5EX1JJTkdTOworCVZhbHVlMzIgfD0gR1JDX01PREVfNFhfTklDX0JBU0VEX1NFTkRfUklOR1M7CiAgICAgfQogCiAgICAgLyogQ29uZmlndXJlIHBzZXVkbyBjaGVja3N1bSBtb2RlLiAqLwogICAgIGlmKHBEZXZpY2UtPk5vVHhQc2V1ZG9IZHJDaGtzdW0pCiAgICAgewotICAgICAgICBWYWx1ZTMyIHw9IEdSQ19NT0RFX1RYX05PX1BTRVVET19IRUFERVJfQ0hLU1VNOworCVZhbHVlMzIgfD0gR1JDX01PREVfVFhfTk9fUFNFVURPX0hFQURFUl9DSEtTVU07CiAgICAgfQogCiAgICAgaWYocERldmljZS0+Tm9SeFBzZXVkb0hkckNoa3N1bSkKICAgICB7Ci0gICAgICAgIFZhbHVlMzIgfD0gR1JDX01PREVfUlhfTk9fUFNFVURPX0hFQURFUl9DSEtTVU07CisJVmFsdWUzMiB8PSBHUkNfTU9ERV9SWF9OT19QU0VVRE9fSEVBREVSX0NIS1NVTTsKICAgICB9CiAKICAgICBSRUdfV1IocERldmljZSwgR3JjLk1vZGUsIFZhbHVlMzIpOwpAQCAtMjQ1Miw2MCArMjQ0Niw2MCBAQAogICAgIC8qIENvbmZpZ3VyZSB0aGUgRE1BIHJlYWQgTUJVRiBsb3cgd2F0ZXIgbWFyay4gKi8KICAgICBpZihwRGV2aWNlLT5EbWFNYnVmTG93TWFyaykKICAgICB7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBCdWZNZ3IuTWJ1ZlJlYWREbWFMb3dXYXRlck1hcmssCi0gICAgICAgICAgICBwRGV2aWNlLT5EbWFNYnVmTG93TWFyayk7CisJUkVHX1dSKHBEZXZpY2UsIEJ1Zk1nci5NYnVmUmVhZERtYUxvd1dhdGVyTWFyaywKKwkgICAgcERldmljZS0+RG1hTWJ1Zkxvd01hcmspOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZihwRGV2aWNlLT5UeE10dSA8IE1BWF9FVEhFUk5FVF9QQUNLRVRfQlVGRkVSX1NJWkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBCdWZNZ3IuTWJ1ZlJlYWREbWFMb3dXYXRlck1hcmssCi0gICAgICAgICAgICAgICAgVDNfREVGX0RNQV9NQlVGX0xPV19XTUFSSyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUdfV1IocERldmljZSwgQnVmTWdyLk1idWZSZWFkRG1hTG93V2F0ZXJNYXJrLAotICAgICAgICAgICAgICAgIFQzX0RFRl9ETUFfTUJVRl9MT1dfV01BUktfSlVNQk8pOwotICAgICAgICB9CisJaWYocERldmljZS0+VHhNdHUgPCBNQVhfRVRIRVJORVRfUEFDS0VUX0JVRkZFUl9TSVpFKQorCXsKKwkgICAgUkVHX1dSKHBEZXZpY2UsIEJ1Zk1nci5NYnVmUmVhZERtYUxvd1dhdGVyTWFyaywKKwkJVDNfREVGX0RNQV9NQlVGX0xPV19XTUFSSyk7CisJfQorCWVsc2UKKwl7CisJICAgIFJFR19XUihwRGV2aWNlLCBCdWZNZ3IuTWJ1ZlJlYWREbWFMb3dXYXRlck1hcmssCisJCVQzX0RFRl9ETUFfTUJVRl9MT1dfV01BUktfSlVNQk8pOworCX0KICAgICB9CiAKICAgICAvKiBDb25maWd1cmUgdGhlIE1BQyBSeCBNQlVGIGxvdyB3YXRlciBtYXJrLiAqLwogICAgIGlmKHBEZXZpY2UtPlJ4TWFjTWJ1Zkxvd01hcmspCiAgICAgewotICAgICAgICBSRUdfV1IocERldmljZSwgQnVmTWdyLk1idWZNYWNSeExvd1dhdGVyTWFyaywKLSAgICAgICAgICAgIHBEZXZpY2UtPlJ4TWFjTWJ1Zkxvd01hcmspOworCVJFR19XUihwRGV2aWNlLCBCdWZNZ3IuTWJ1Zk1hY1J4TG93V2F0ZXJNYXJrLAorCSAgICBwRGV2aWNlLT5SeE1hY01idWZMb3dNYXJrKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYocERldmljZS0+VHhNdHUgPCBNQVhfRVRIRVJORVRfUEFDS0VUX0JVRkZFUl9TSVpFKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUdfV1IocERldmljZSwgQnVmTWdyLk1idWZNYWNSeExvd1dhdGVyTWFyaywKLSAgICAgICAgICAgICAgICBUM19ERUZfUlhfTUFDX01CVUZfTE9XX1dNQVJLKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBCdWZNZ3IuTWJ1Zk1hY1J4TG93V2F0ZXJNYXJrLAotICAgICAgICAgICAgICAgIFQzX0RFRl9SWF9NQUNfTUJVRl9MT1dfV01BUktfSlVNQk8pOwotICAgICAgICB9CisJaWYocERldmljZS0+VHhNdHUgPCBNQVhfRVRIRVJORVRfUEFDS0VUX0JVRkZFUl9TSVpFKQorCXsKKwkgICAgUkVHX1dSKHBEZXZpY2UsIEJ1Zk1nci5NYnVmTWFjUnhMb3dXYXRlck1hcmssCisJCVQzX0RFRl9SWF9NQUNfTUJVRl9MT1dfV01BUkspOworCX0KKwllbHNlCisJeworCSAgICBSRUdfV1IocERldmljZSwgQnVmTWdyLk1idWZNYWNSeExvd1dhdGVyTWFyaywKKwkJVDNfREVGX1JYX01BQ19NQlVGX0xPV19XTUFSS19KVU1CTyk7CisJfQogICAgIH0KIAogICAgIC8qIENvbmZpZ3VyZSB0aGUgTUJVRiBoaWdoIHdhdGVyIG1hcmsuICovCiAgICAgaWYocERldmljZS0+TWJ1ZkhpZ2hNYXJrKQogICAgIHsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIEJ1Zk1nci5NYnVmSGlnaFdhdGVyTWFyaywgcERldmljZS0+TWJ1ZkhpZ2hNYXJrKTsKKwlSRUdfV1IocERldmljZSwgQnVmTWdyLk1idWZIaWdoV2F0ZXJNYXJrLCBwRGV2aWNlLT5NYnVmSGlnaE1hcmspOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZihwRGV2aWNlLT5UeE10dSA8IE1BWF9FVEhFUk5FVF9QQUNLRVRfQlVGRkVSX1NJWkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBCdWZNZ3IuTWJ1ZkhpZ2hXYXRlck1hcmssCi0gICAgICAgICAgICAgICAgVDNfREVGX01CVUZfSElHSF9XTUFSSyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUdfV1IocERldmljZSwgQnVmTWdyLk1idWZIaWdoV2F0ZXJNYXJrLAotICAgICAgICAgICAgICAgIFQzX0RFRl9NQlVGX0hJR0hfV01BUktfSlVNQk8pOwotICAgICAgICB9CisJaWYocERldmljZS0+VHhNdHUgPCBNQVhfRVRIRVJORVRfUEFDS0VUX0JVRkZFUl9TSVpFKQorCXsKKwkgICAgUkVHX1dSKHBEZXZpY2UsIEJ1Zk1nci5NYnVmSGlnaFdhdGVyTWFyaywKKwkJVDNfREVGX01CVUZfSElHSF9XTUFSSyk7CisJfQorCWVsc2UKKwl7CisJICAgIFJFR19XUihwRGV2aWNlLCBCdWZNZ3IuTWJ1ZkhpZ2hXYXRlck1hcmssCisJCVQzX0RFRl9NQlVGX0hJR0hfV01BUktfSlVNQk8pOworCX0KICAgICB9CiAKICAgICBSRUdfV1IocERldmljZSwgQnVmTWdyLkRtYUxvd1dhdGVyTWFyaywgVDNfREVGX0RNQV9ERVNDX0xPV19XTUFSSyk7CkBAIC0yNTE2LDE0ICsyNTEwLDE0IEBACiAKICAgICBmb3IoaiA9IDAgO2ogPCAyMDAwOyBqKyspCiAgICAgewotICAgICAgICBpZihSRUdfUkQocERldmljZSwgQnVmTWdyLk1vZGUpICYgQlVGTUdSX01PREVfRU5BQkxFKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIE1NX1dhaXQoMTApOworCWlmKFJFR19SRChwRGV2aWNlLCBCdWZNZ3IuTW9kZSkgJiBCVUZNR1JfTU9ERV9FTkFCTEUpCisJICAgIGJyZWFrOworCU1NX1dhaXQoMTApOwogICAgIH0KIAogICAgIGlmKGogPj0gMjAwMCkKICAgICB7Ci0gICAgICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKKwlyZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7CiAgICAgfQogCiAgICAgLyogRW5hYmxlIHRoZSBGVFFzLiAqLwpAQCAtMjUzMywzMiArMjUyNywzMiBAQAogICAgIC8qIFdhaXQgdW50aWwgRlRRIGlzIHJlYWR5ICovCiAgICAgZm9yKGogPSAwOyBqIDwgMjAwMDsgaisrKQogICAgIHsKLSAgICAgICAgaWYoUkVHX1JEKHBEZXZpY2UsIEZ0cS5SZXNldCkgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBNTV9XYWl0KDEwKTsKKwlpZihSRUdfUkQocERldmljZSwgRnRxLlJlc2V0KSA9PSAwKQorCSAgICBicmVhazsKKwlNTV9XYWl0KDEwKTsKICAgICB9CiAKICAgICBpZihqID49IDIwMDApCiAgICAgewotICAgICAgICByZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7CisJcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOwogICAgIH0KIAogICAgIC8qIEluaXRpYWxpemUgdGhlIFN0YW5kYXJkIFJlY2VpdmUgUkNCLiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQmRJbi5TdGRSY3ZSY2IuSG9zdFJpbmdBZGRyLkhpZ2gsCi0gICAgICAgIHBEZXZpY2UtPlJ4U3RkQmRQaHkuSGlnaCk7CisJcERldmljZS0+UnhTdGRCZFBoeS5IaWdoKTsKICAgICBSRUdfV1IocERldmljZSwgUmN2RGF0YUJkSW4uU3RkUmN2UmNiLkhvc3RSaW5nQWRkci5Mb3csCi0gICAgICAgIHBEZXZpY2UtPlJ4U3RkQmRQaHkuTG93KTsKKwlwRGV2aWNlLT5SeFN0ZEJkUGh5Lkxvdyk7CiAgICAgUkVHX1dSKHBEZXZpY2UsIFJjdkRhdGFCZEluLlN0ZFJjdlJjYi51Lk1heExlbl9GbGFncywKLSAgICAgICAgTUFYX1NURF9SQ1ZfQlVGRkVSX1NJWkUgPDwgMTYpOworCU1BWF9TVERfUkNWX0JVRkZFUl9TSVpFIDw8IDE2KTsKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIEp1bWJvIFJlY2VpdmUgUkNCLiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQmRJbi5KdW1ib1JjdlJjYi51Lk1heExlbl9GbGFncywKLSAgICAgICAgVDNfUkNCX0ZMQUdfUklOR19ESVNBQkxFRCk7CisJVDNfUkNCX0ZMQUdfUklOR19ESVNBQkxFRCk7CiAjaWYgVDNfSlVNQk9fUkNWX1JDQl9FTlRSWV9DT1VOVAogICAgIFJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQmRJbi5KdW1ib1JjdlJjYi5Ib3N0UmluZ0FkZHIuSGlnaCwKLSAgICAgICAgcERldmljZS0+UnhKdW1ib0JkUGh5LkhpZ2gpOworCXBEZXZpY2UtPlJ4SnVtYm9CZFBoeS5IaWdoKTsKICAgICBSRUdfV1IocERldmljZSwgUmN2RGF0YUJkSW4uSnVtYm9SY3ZSY2IuSG9zdFJpbmdBZGRyLkxvdywKLSAgICAgICAgcERldmljZS0+UnhKdW1ib0JkUGh5Lkxvdyk7CisJcERldmljZS0+UnhKdW1ib0JkUGh5Lkxvdyk7CiAKICAgICBSRUdfV1IocERldmljZSwgUmN2RGF0YUJkSW4uSnVtYm9SY3ZSY2IudS5NYXhMZW5fRmxhZ3MsIDApOwogCkBAIC0yNTY2LDEzICsyNTYwLDEzIEBACiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBNaW5pIFJlY2VpdmUgUkNCLiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQmRJbi5NaW5pUmN2UmNiLnUuTWF4TGVuX0ZsYWdzLAotICAgICAgICBUM19SQ0JfRkxBR19SSU5HX0RJU0FCTEVEKTsKKwlUM19SQ0JfRkxBR19SSU5HX0RJU0FCTEVEKTsKIAogICAgIHsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIFJjdkRhdGFCZEluLlN0ZFJjdlJjYi5OaWNSaW5nQWRkciwKLSAgICAgICAgICAgIChMTV9VSU5UMzIpIFQzX05JQ19TVERfUkNWX0JVRkZFUl9ERVNDX0FERFIpOwotICAgICAgICBSRUdfV1IocERldmljZSwgUmN2RGF0YUJkSW4uSnVtYm9SY3ZSY2IuTmljUmluZ0FkZHIsCi0gICAgICAgICAgICAoTE1fVUlOVDMyKSBUM19OSUNfSlVNQk9fUkNWX0JVRkZFUl9ERVNDX0FERFIpOworCVJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQmRJbi5TdGRSY3ZSY2IuTmljUmluZ0FkZHIsCisJICAgIChMTV9VSU5UMzIpIFQzX05JQ19TVERfUkNWX0JVRkZFUl9ERVNDX0FERFIpOworCVJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQmRJbi5KdW1ib1JjdlJjYi5OaWNSaW5nQWRkciwKKwkgICAgKExNX1VJTlQzMikgVDNfTklDX0pVTUJPX1JDVl9CVUZGRVJfREVTQ19BRERSKTsKICAgICB9CiAKICAgICAvKiBSZWNlaXZlIEJEIFJpbmcgcmVwbGVuaXNoIHRocmVzaG9sZC4gKi8KQEAgLTI1ODMsNyArMjU3Nyw3IEBACiAKICAgICAvKiBEaXNhYmxlIGFsbCB0aGUgdW51c2VkIHJpbmdzLiAqLwogICAgIGZvcihqID0gMDsgaiA8IFQzX01BWF9TRU5EX1JDQl9DT1VOVDsgaisrKSB7Ci0gICAgICAgIE1FTV9XUihwRGV2aWNlLCBTZW5kUmNiW2pdLnUuTWF4TGVuX0ZsYWdzLCBUM19SQ0JfRkxBR19SSU5HX0RJU0FCTEVEKTsKKwlNRU1fV1IocERldmljZSwgU2VuZFJjYltqXS51Lk1heExlbl9GbGFncywgVDNfUkNCX0ZMQUdfUklOR19ESVNBQkxFRCk7CiAgICAgfSAvKiBmb3IgKi8KIAogICAgIC8qIEluaXRpYWxpemUgdGhlIGluZGljZXMuICovCkBAIC0yNTk2LDU0ICsyNTkwLDU0IEBACiAgICAgLyogU2V0IHVwIGhvc3Qgb3IgTklDIGJhc2VkIHNlbmQgUkNCLiAqLwogICAgIGlmKHBEZXZpY2UtPk5pY1NlbmRCZCA9PSBGQUxTRSkKICAgICB7Ci0gICAgICAgIE1FTV9XUihwRGV2aWNlLCBTZW5kUmNiWzBdLkhvc3RSaW5nQWRkci5IaWdoLAotICAgICAgICAgICAgcERldmljZS0+U2VuZEJkUGh5LkhpZ2gpOwotICAgICAgICBNRU1fV1IocERldmljZSwgU2VuZFJjYlswXS5Ib3N0UmluZ0FkZHIuTG93LAotICAgICAgICAgICAgcERldmljZS0+U2VuZEJkUGh5Lkxvdyk7CisJTUVNX1dSKHBEZXZpY2UsIFNlbmRSY2JbMF0uSG9zdFJpbmdBZGRyLkhpZ2gsCisJICAgIHBEZXZpY2UtPlNlbmRCZFBoeS5IaWdoKTsKKwlNRU1fV1IocERldmljZSwgU2VuZFJjYlswXS5Ib3N0UmluZ0FkZHIuTG93LAorCSAgICBwRGV2aWNlLT5TZW5kQmRQaHkuTG93KTsKIAotICAgICAgICAvKiBTZXQgdXAgdGhlIE5JQyByaW5nIGFkZHJlc3MgaW4gdGhlIFJDQi4gKi8KLSAgICAgICAgTUVNX1dSKHBEZXZpY2UsIFNlbmRSY2JbMF0uTmljUmluZ0FkZHIsVDNfTklDX1NORF9CVUZGRVJfREVTQ19BRERSKTsKKwkvKiBTZXQgdXAgdGhlIE5JQyByaW5nIGFkZHJlc3MgaW4gdGhlIFJDQi4gKi8KKwlNRU1fV1IocERldmljZSwgU2VuZFJjYlswXS5OaWNSaW5nQWRkcixUM19OSUNfU05EX0JVRkZFUl9ERVNDX0FERFIpOwogCi0gICAgICAgIC8qIFNldHVwIHRoZSBSQ0IuICovCi0gICAgICAgIE1FTV9XUihwRGV2aWNlLCBTZW5kUmNiWzBdLnUuTWF4TGVuX0ZsYWdzLAotICAgICAgICAgICAgVDNfU0VORF9SQ0JfRU5UUllfQ09VTlQgPDwgMTYpOworCS8qIFNldHVwIHRoZSBSQ0IuICovCisJTUVNX1dSKHBEZXZpY2UsIFNlbmRSY2JbMF0udS5NYXhMZW5fRmxhZ3MsCisJICAgIFQzX1NFTkRfUkNCX0VOVFJZX0NPVU5UIDw8IDE2KTsKIAotICAgICAgICBmb3IoayA9IDA7IGsgPCBUM19TRU5EX1JDQl9FTlRSWV9DT1VOVDsgaysrKQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5wU2VuZEJkVmlydFtrXS5Ib3N0QWRkci5IaWdoID0gMDsKLSAgICAgICAgICAgIHBEZXZpY2UtPnBTZW5kQmRWaXJ0W2tdLkhvc3RBZGRyLkxvdyA9IDA7Ci0gICAgICAgIH0KKwlmb3IoayA9IDA7IGsgPCBUM19TRU5EX1JDQl9FTlRSWV9DT1VOVDsgaysrKQorCXsKKwkgICAgcERldmljZS0+cFNlbmRCZFZpcnRba10uSG9zdEFkZHIuSGlnaCA9IDA7CisJICAgIHBEZXZpY2UtPnBTZW5kQmRWaXJ0W2tdLkhvc3RBZGRyLkxvdyA9IDA7CisJfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBNRU1fV1IocERldmljZSwgU2VuZFJjYlswXS5Ib3N0UmluZ0FkZHIuSGlnaCwgMCk7Ci0gICAgICAgIE1FTV9XUihwRGV2aWNlLCBTZW5kUmNiWzBdLkhvc3RSaW5nQWRkci5Mb3csIDApOwotICAgICAgICBNRU1fV1IocERldmljZSwgU2VuZFJjYlswXS5OaWNSaW5nQWRkciwKLSAgICAgICAgICAgIHBEZXZpY2UtPlNlbmRCZFBoeS5Mb3cpOworCU1FTV9XUihwRGV2aWNlLCBTZW5kUmNiWzBdLkhvc3RSaW5nQWRkci5IaWdoLCAwKTsKKwlNRU1fV1IocERldmljZSwgU2VuZFJjYlswXS5Ib3N0UmluZ0FkZHIuTG93LCAwKTsKKwlNRU1fV1IocERldmljZSwgU2VuZFJjYlswXS5OaWNSaW5nQWRkciwKKwkgICAgcERldmljZS0+U2VuZEJkUGh5Lkxvdyk7CiAKLSAgICAgICAgZm9yKGsgPSAwOyBrIDwgVDNfU0VORF9SQ0JfRU5UUllfQ09VTlQ7IGsrKykKLSAgICAgICAgewotICAgICAgICAgICAgX19yYXdfd3JpdGVsKDAsICYocERldmljZS0+cFNlbmRCZFZpcnRba10uSG9zdEFkZHIuSGlnaCkpOwotICAgICAgICAgICAgX19yYXdfd3JpdGVsKDAsICYocERldmljZS0+cFNlbmRCZFZpcnRba10uSG9zdEFkZHIuTG93KSk7Ci0gICAgICAgICAgICBfX3Jhd193cml0ZWwoMCwgJihwRGV2aWNlLT5wU2VuZEJkVmlydFtrXS51MS5MZW5fRmxhZ3MpKTsKLSAgICAgICAgICAgIHBEZXZpY2UtPlNoYWRvd1NlbmRCZFtrXS5Ib3N0QWRkci5IaWdoID0gMDsKLSAgICAgICAgICAgIHBEZXZpY2UtPlNoYWRvd1NlbmRCZFtrXS51MS5MZW5fRmxhZ3MgPSAwOwotICAgICAgICB9CisJZm9yKGsgPSAwOyBrIDwgVDNfU0VORF9SQ0JfRU5UUllfQ09VTlQ7IGsrKykKKwl7CisJICAgIF9fcmF3X3dyaXRlbCgwLCAmKHBEZXZpY2UtPnBTZW5kQmRWaXJ0W2tdLkhvc3RBZGRyLkhpZ2gpKTsKKwkgICAgX19yYXdfd3JpdGVsKDAsICYocERldmljZS0+cFNlbmRCZFZpcnRba10uSG9zdEFkZHIuTG93KSk7CisJICAgIF9fcmF3X3dyaXRlbCgwLCAmKHBEZXZpY2UtPnBTZW5kQmRWaXJ0W2tdLnUxLkxlbl9GbGFncykpOworCSAgICBwRGV2aWNlLT5TaGFkb3dTZW5kQmRba10uSG9zdEFkZHIuSGlnaCA9IDA7CisJICAgIHBEZXZpY2UtPlNoYWRvd1NlbmRCZFtrXS51MS5MZW5fRmxhZ3MgPSAwOworCX0KICAgICB9CiAgICAgYXRvbWljX3NldCgmcERldmljZS0+U2VuZEJkTGVmdCwgVDNfU0VORF9SQ0JfRU5UUllfQ09VTlQtMSk7CiAKICAgICAvKiBDb25maWd1cmUgdGhlIHJlY2VpdmUgcmV0dXJuIHJpbmdzLiAqLwogICAgIGZvcihqID0gMDsgaiA8IFQzX01BWF9SQ1ZfUkVUVVJOX1JDQl9DT1VOVDsgaisrKQogICAgIHsKLSAgICAgICAgTUVNX1dSKHBEZXZpY2UsIFJjdlJldFJjYltqXS51Lk1heExlbl9GbGFncywgVDNfUkNCX0ZMQUdfUklOR19ESVNBQkxFRCk7CisJTUVNX1dSKHBEZXZpY2UsIFJjdlJldFJjYltqXS51Lk1heExlbl9GbGFncywgVDNfUkNCX0ZMQUdfUklOR19ESVNBQkxFRCk7CiAgICAgfQogCiAgICAgcERldmljZS0+UmN2UmV0Q29uSWR4ID0gMDsKIAogICAgIE1FTV9XUihwRGV2aWNlLCBSY3ZSZXRSY2JbMF0uSG9zdFJpbmdBZGRyLkhpZ2gsCi0gICAgICAgIHBEZXZpY2UtPlJjdlJldEJkUGh5LkhpZ2gpOworCXBEZXZpY2UtPlJjdlJldEJkUGh5LkhpZ2gpOwogICAgIE1FTV9XUihwRGV2aWNlLCBSY3ZSZXRSY2JbMF0uSG9zdFJpbmdBZGRyLkxvdywKLSAgICAgICAgcERldmljZS0+UmN2UmV0QmRQaHkuTG93KTsKKwlwRGV2aWNlLT5SY3ZSZXRCZFBoeS5Mb3cpOwogCiAgICAgLyogU2V0IHVwIHRoZSBOSUMgcmluZyBhZGRyZXNzIGluIHRoZSBSQ0IuICovCiAgICAgLyogTm90IHZlcnkgY2xlYXIgZnJvbSB0aGUgc3BlYy4gIEkgYW0gZ3Vlc3NpbmcgdGhhdCBmb3IgUmVjZWl2ZSAqLwpAQCAtMjY1Miw3ICsyNjQ2LDcgQEAKIAogICAgIC8qIFNldHVwIHRoZSBSQ0IuICovCiAgICAgTUVNX1dSKHBEZXZpY2UsIFJjdlJldFJjYlswXS51Lk1heExlbl9GbGFncywKLSAgICAgICAgVDNfUkNWX1JFVFVSTl9SQ0JfRU5UUllfQ09VTlQgPDwgMTYpOworCVQzX1JDVl9SRVRVUk5fUkNCX0VOVFJZX0NPVU5UIDw8IDE2KTsKIAogICAgIC8qIFJlaW5pdGlhbGl6ZSBSWCByaW5nIHByb2R1Y2VyIGluZGV4ICovCiAgICAgTUJfUkVHX1dSKHBEZXZpY2UsIE1haWxib3guUmN2U3RkUHJvZElkeC5Mb3csIDApOwpAQCAtMjY3Nyw5ICsyNjcxLDkgQEAKIAogICAgIC8qIEluaXRpYWxpemUgdGhlIHRyYW5zbWl0IHJhbmRvbSBiYWNrb2ZmIHNlZWQuICovCiAgICAgVmFsdWUzMiA9IChwRGV2aWNlLT5Ob2RlQWRkcmVzc1swXSArIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzFdICsKLSAgICAgICAgcERldmljZS0+Tm9kZUFkZHJlc3NbMl0gKyBwRGV2aWNlLT5Ob2RlQWRkcmVzc1szXSArCi0gICAgICAgIHBEZXZpY2UtPk5vZGVBZGRyZXNzWzRdICsgcERldmljZS0+Tm9kZUFkZHJlc3NbNV0pICYKLSAgICAgICAgTUFDX1RYX0JBQ0tPRkZfU0VFRF9NQVNLOworCXBEZXZpY2UtPk5vZGVBZGRyZXNzWzJdICsgcERldmljZS0+Tm9kZUFkZHJlc3NbM10gKworCXBEZXZpY2UtPk5vZGVBZGRyZXNzWzRdICsgcERldmljZS0+Tm9kZUFkZHJlc3NbNV0pICYKKwlNQUNfVFhfQkFDS09GRl9TRUVEX01BU0s7CiAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuVHhCYWNrb2ZmU2VlZCwgVmFsdWUzMik7CiAKICAgICAvKiBSZWNlaXZlIE1UVS4gIEZyYW1lcyBsYXJnZXIgdGhhbiB0aGUgTVRVIGlzIG1hcmtlZCBhcyBvdmVyc2l6ZWQuICovCkBAIC0yNzA4LDg4ICsyNzAyLDg4IEBACiAgICAgLyogRW5hYmxlIFNlbmQgRGF0YSBJbml0YXRvciBTdGF0aXN0aWNzICovCiAgICAgUkVHX1dSKHBEZXZpY2UsIFNuZERhdGFJbi5TdGF0c0VuYWJsZU1hc2ssMHhmZmZmZmYpOwogICAgIFJFR19XUihwRGV2aWNlLCBTbmREYXRhSW4uU3RhdHNDdHJsLAotICAgICAgICBUM19TTkRfREFUQV9JTl9TVEFUU19DVFJMX0VOQUJMRSB8IFwKLSAgICAgICAgVDNfU05EX0RBVEFfSU5fU1RBVFNfQ1RSTF9GQVNURVJfVVBEQVRFKTsKKwlUM19TTkRfREFUQV9JTl9TVEFUU19DVFJMX0VOQUJMRSB8IFwKKwlUM19TTkRfREFUQV9JTl9TVEFUU19DVFJMX0ZBU1RFUl9VUERBVEUpOwogCiAgICAgLyogRGlzYWJsZSB0aGUgaG9zdCBjb2FsZXNjaW5nIHN0YXRlIG1hY2hpbmUgYmVmb3JlIGNvbmZpZ3VyaW5nIGl0J3MgKi8KICAgICAvKiBwYXJhbWV0ZXJzLiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBIb3N0Q29hbGVzY2UuTW9kZSwgMCk7CiAgICAgZm9yKGogPSAwOyBqIDwgMjAwMDsgaisrKQogICAgIHsKLSAgICAgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBIb3N0Q29hbGVzY2UuTW9kZSk7Ci0gICAgICAgIGlmKCEoVmFsdWUzMiAmIEhPU1RfQ09BTEVTQ0VfRU5BQkxFKSkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgTU1fV2FpdCgxMCk7CisJVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBIb3N0Q29hbGVzY2UuTW9kZSk7CisJaWYoIShWYWx1ZTMyICYgSE9TVF9DT0FMRVNDRV9FTkFCTEUpKQorCXsKKwkgICAgYnJlYWs7CisJfQorCU1NX1dhaXQoMTApOwogICAgIH0KIAogICAgIC8qIEhvc3QgY29hbGVzY2luZyBjb25maWd1cmF0aW9ucy4gKi8KICAgICBSRUdfV1IocERldmljZSwgSG9zdENvYWxlc2NlLlJ4Q29hbGVzY2luZ1RpY2tzLCBwRGV2aWNlLT5SeENvYWxlc2NpbmdUaWNrcyk7CiAgICAgUkVHX1dSKHBEZXZpY2UsIEhvc3RDb2FsZXNjZS5UeENvYWxlc2NpbmdUaWNrcywgcERldmljZS0+VHhDb2FsZXNjaW5nVGlja3MpOwogICAgIFJFR19XUihwRGV2aWNlLCBIb3N0Q29hbGVzY2UuUnhNYXhDb2FsZXNjZWRGcmFtZXMsCi0gICAgICAgIHBEZXZpY2UtPlJ4TWF4Q29hbGVzY2VkRnJhbWVzKTsKKwlwRGV2aWNlLT5SeE1heENvYWxlc2NlZEZyYW1lcyk7CiAgICAgUkVHX1dSKHBEZXZpY2UsIEhvc3RDb2FsZXNjZS5UeE1heENvYWxlc2NlZEZyYW1lcywKLSAgICAgICAgcERldmljZS0+VHhNYXhDb2FsZXNjZWRGcmFtZXMpOworCXBEZXZpY2UtPlR4TWF4Q29hbGVzY2VkRnJhbWVzKTsKICAgICBSRUdfV1IocERldmljZSwgSG9zdENvYWxlc2NlLlJ4Q29hbGVzY2VkVGlja0R1cmluZ0ludCwKLSAgICAgICAgcERldmljZS0+UnhDb2FsZXNjaW5nVGlja3NEdXJpbmdJbnQpOworCXBEZXZpY2UtPlJ4Q29hbGVzY2luZ1RpY2tzRHVyaW5nSW50KTsKICAgICBSRUdfV1IocERldmljZSwgSG9zdENvYWxlc2NlLlR4Q29hbGVzY2VkVGlja0R1cmluZ0ludCwKLSAgICAgICAgcERldmljZS0+VHhDb2FsZXNjaW5nVGlja3NEdXJpbmdJbnQpOworCXBEZXZpY2UtPlR4Q29hbGVzY2luZ1RpY2tzRHVyaW5nSW50KTsKICAgICBSRUdfV1IocERldmljZSwgSG9zdENvYWxlc2NlLlJ4TWF4Q29hbGVzY2VkRnJhbWVzRHVyaW5nSW50LAotICAgICAgICBwRGV2aWNlLT5SeE1heENvYWxlc2NlZEZyYW1lc0R1cmluZ0ludCk7CisJcERldmljZS0+UnhNYXhDb2FsZXNjZWRGcmFtZXNEdXJpbmdJbnQpOwogICAgIFJFR19XUihwRGV2aWNlLCBIb3N0Q29hbGVzY2UuVHhNYXhDb2FsZXNjZWRGcmFtZXNEdXJpbmdJbnQsCi0gICAgICAgIHBEZXZpY2UtPlR4TWF4Q29hbGVzY2VkRnJhbWVzRHVyaW5nSW50KTsKKwlwRGV2aWNlLT5UeE1heENvYWxlc2NlZEZyYW1lc0R1cmluZ0ludCk7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGF0dXMgYmxvY2suICBUaGUgTklDIHdpbGwgRE1BICovCiAgICAgLyogdGhlIHN0YXR1cyBibG9jayB0byB0aGlzIG1lbW9yeSB3aGljaCByZXNpZGVzIG9uIHRoZSBob3N0LiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBIb3N0Q29hbGVzY2UuU3RhdHVzQmxrSG9zdEFkZHIuSGlnaCwKLSAgICAgICAgcERldmljZS0+U3RhdHVzQmxrUGh5LkhpZ2gpOworCXBEZXZpY2UtPlN0YXR1c0Jsa1BoeS5IaWdoKTsKICAgICBSRUdfV1IocERldmljZSwgSG9zdENvYWxlc2NlLlN0YXR1c0Jsa0hvc3RBZGRyLkxvdywKLSAgICAgICAgcERldmljZS0+U3RhdHVzQmxrUGh5Lkxvdyk7CisJcERldmljZS0+U3RhdHVzQmxrUGh5Lkxvdyk7CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGF0aXN0aWNzIGJsb2NrLiAgVGhlIE5JQyB3aWxsIERNQSAqLwogICAgIC8qIHRoZSBzdGF0aXN0aWNzIHRvIHRoaXMgYmxvY2sgb2YgbWVtb3J5LiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBIb3N0Q29hbGVzY2UuU3RhdHNCbGtIb3N0QWRkci5IaWdoLAotICAgICAgICBwRGV2aWNlLT5TdGF0c0Jsa1BoeS5IaWdoKTsKKwlwRGV2aWNlLT5TdGF0c0Jsa1BoeS5IaWdoKTsKICAgICBSRUdfV1IocERldmljZSwgSG9zdENvYWxlc2NlLlN0YXRzQmxrSG9zdEFkZHIuTG93LAotICAgICAgICBwRGV2aWNlLT5TdGF0c0Jsa1BoeS5Mb3cpOworCXBEZXZpY2UtPlN0YXRzQmxrUGh5Lkxvdyk7CiAKICAgICBSRUdfV1IocERldmljZSwgSG9zdENvYWxlc2NlLlN0YXRzQ29hbGVzY2luZ1RpY2tzLAotICAgICAgICBwRGV2aWNlLT5TdGF0c0NvYWxlc2NpbmdUaWNrcyk7CisJcERldmljZS0+U3RhdHNDb2FsZXNjaW5nVGlja3MpOwogCiAgICAgUkVHX1dSKHBEZXZpY2UsIEhvc3RDb2FsZXNjZS5TdGF0c0Jsa05pY0FkZHIsIDB4MzAwKTsKICAgICBSRUdfV1IocERldmljZSwgSG9zdENvYWxlc2NlLlN0YXR1c0Jsa05pY0FkZHIsMHhiMDApOwogCiAgICAgLyogRW5hYmxlIEhvc3QgQ29hbGVzaW5nIHN0YXRlIG1hY2hpbmUgKi8KICAgICBSRUdfV1IocERldmljZSwgSG9zdENvYWxlc2NlLk1vZGUsIEhPU1RfQ09BTEVTQ0VfRU5BQkxFIHwKLSAgICAgICAgcERldmljZS0+Q29hbGVzY2VNb2RlKTsKKwlwRGV2aWNlLT5Db2FsZXNjZU1vZGUpOwogCiAgICAgLyogRW5hYmxlIHRoZSBSZWNlaXZlIEJEIENvbXBsZXRpb24gc3RhdGUgbWFjaGluZS4gKi8KICAgICBSRUdfV1IocERldmljZSwgUmN2QmRDb21wLk1vZGUsIFJDVl9CRF9DT01QX01PREVfRU5BQkxFIHwKLSAgICAgICAgUkNWX0JEX0NPTVBfTU9ERV9BVFROX0VOQUJMRSk7CisJUkNWX0JEX0NPTVBfTU9ERV9BVFROX0VOQUJMRSk7CiAKICAgICAvKiBFbmFibGUgdGhlIFJlY2VpdmUgTGlzdCBQbGFjZW1lbnQgc3RhdGUgbWFjaGluZS4gKi8KICAgICBSRUdfV1IocERldmljZSwgUmN2TGlzdFBsbXQuTW9kZSwgUkNWX0xJU1RfUExNVF9NT0RFX0VOQUJMRSk7CiAKICAgICAvKiBFbmFibGUgdGhlIFJlY2VpdmUgTGlzdCBTZWxlY3RvciBzdGF0ZSBtYWNoaW5lLiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBSY3ZMaXN0U2VsLk1vZGUsIFJDVl9MSVNUX1NFTF9NT0RFX0VOQUJMRSB8Ci0gICAgICAgIFJDVl9MSVNUX1NFTF9NT0RFX0FUVE5fRU5BQkxFKTsKKwlSQ1ZfTElTVF9TRUxfTU9ERV9BVFROX0VOQUJMRSk7CiAKICAgICAvKiBFbmFibGUgdHJhbnNtaXQgRE1BLCBjbGVhciBzdGF0aXN0aWNzLiAqLwogICAgIHBEZXZpY2UtPk1hY01vZGUgPSAgTUFDX01PREVfRU5BQkxFX1RYX1NUQVRJU1RJQ1MgfAotICAgICAgICBNQUNfTU9ERV9FTkFCTEVfUlhfU1RBVElTVElDUyB8IE1BQ19NT0RFX0VOQUJMRV9UREUgfAotICAgICAgICBNQUNfTU9ERV9FTkFCTEVfUkRFIHwgTUFDX01PREVfRU5BQkxFX0ZIREU7CisJTUFDX01PREVfRU5BQkxFX1JYX1NUQVRJU1RJQ1MgfCBNQUNfTU9ERV9FTkFCTEVfVERFIHwKKwlNQUNfTU9ERV9FTkFCTEVfUkRFIHwgTUFDX01PREVfRU5BQkxFX0ZIREU7CiAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgcERldmljZS0+TWFjTW9kZSB8Ci0gICAgICAgIE1BQ19NT0RFX0NMRUFSX1JYX1NUQVRJU1RJQ1MgfCBNQUNfTU9ERV9DTEVBUl9UWF9TVEFUSVNUSUNTKTsKKwlNQUNfTU9ERV9DTEVBUl9SWF9TVEFUSVNUSUNTIHwgTUFDX01PREVfQ0xFQVJfVFhfU1RBVElTVElDUyk7CiAKICAgICAvKiBHUkMgbWlzY2VsbGFuZW91cyBsb2NhbCBjb250cm9sIHJlZ2lzdGVyLiAqLwogICAgIHBEZXZpY2UtPkdyY0xvY2FsQ3RybCA9IEdSQ19NSVNDX0xPQ0FMX0NUUkxfSU5UX09OX0FUVE4gfAotICAgICAgICBHUkNfTUlTQ19MT0NBTF9DVFJMX0FVVE9fU0VFUFJPTTsKKwlHUkNfTUlTQ19MT0NBTF9DVFJMX0FVVE9fU0VFUFJPTTsKIAogICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCkKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPkdyY0xvY2FsQ3RybCB8PSBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UxIHwKLSAgICAgICAgICAgIEdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PVVRQVVQxOworCXBEZXZpY2UtPkdyY0xvY2FsQ3RybCB8PSBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UxIHwKKwkgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09VVFBVVDE7CiAgICAgfQogCiAgICAgUkVHX1dSKHBEZXZpY2UsIEdyYy5Mb2NhbEN0cmwsIHBEZXZpY2UtPkdyY0xvY2FsQ3RybCk7CkBAIC0yNzk4LDEzICsyNzkyLDEzIEBACiAgICAgLyogUmVzZXQgUlggY291bnRlcnMuICovCiAgICAgZm9yKGogPSAwOyBqIDwgc2l6ZW9mKExNX1JYX0NPVU5URVJTKTsgaisrKQogICAgIHsKLSAgICAgICAgKChQTE1fVUlOVDgpICZwRGV2aWNlLT5SeENvdW50ZXJzKVtqXSA9IDA7CisJKChQTE1fVUlOVDgpICZwRGV2aWNlLT5SeENvdW50ZXJzKVtqXSA9IDA7CiAgICAgfQogCiAgICAgLyogUmVzZXQgVFggY291bnRlcnMuICovCiAgICAgZm9yKGogPSAwOyBqIDwgc2l6ZW9mKExNX1RYX0NPVU5URVJTKTsgaisrKQogICAgIHsKLSAgICAgICAgKChQTE1fVUlOVDgpICZwRGV2aWNlLT5UeENvdW50ZXJzKVtqXSA9IDA7CisJKChQTE1fVUlOVDgpICZwRGV2aWNlLT5UeENvdW50ZXJzKVtqXSA9IDA7CiAgICAgfQogCiAgICAgTUJfUkVHX1dSKHBEZXZpY2UsIE1haWxib3guSW50ZXJydXB0WzBdLkxvdywgMCk7CkBAIC0yODE0LDUzICsyODA4LDUzIEBACiAKICAgICAvKiBFbmFibGUgdGhlIERNQSBXcml0ZSBzdGF0ZSBtYWNoaW5lLiAqLwogICAgIFZhbHVlMzIgPSBETUFfV1JJVEVfTU9ERV9FTkFCTEUgfAotICAgICAgICBETUFfV1JJVEVfTU9ERV9UQVJHRVRfQUJPUlRfQVRUTl9FTkFCTEUgfAotICAgICAgICBETUFfV1JJVEVfTU9ERV9NQVNURVJfQUJPUlRfQVRUTl9FTkFCTEUgfAotICAgICAgICBETUFfV1JJVEVfTU9ERV9QQVJJVFlfRVJST1JfQVRUTl9FTkFCTEUgfAotICAgICAgICBETUFfV1JJVEVfTU9ERV9BRERSX09WRVJGTE9XX0FUVE5fRU5BQkxFIHwKLSAgICAgICAgRE1BX1dSSVRFX01PREVfRklGT19PVkVSUlVOX0FUVE5fRU5BQkxFIHwKLSAgICAgICAgRE1BX1dSSVRFX01PREVfRklGT19VTkRFUlJVTl9BVFROX0VOQUJMRSB8Ci0gICAgICAgIERNQV9XUklURV9NT0RFX0ZJRk9fT1ZFUlJFQURfQVRUTl9FTkFCTEUgfAotICAgICAgICBETUFfV1JJVEVfTU9ERV9MT05HX1JFQURfQVRUTl9FTkFCTEU7CisJRE1BX1dSSVRFX01PREVfVEFSR0VUX0FCT1JUX0FUVE5fRU5BQkxFIHwKKwlETUFfV1JJVEVfTU9ERV9NQVNURVJfQUJPUlRfQVRUTl9FTkFCTEUgfAorCURNQV9XUklURV9NT0RFX1BBUklUWV9FUlJPUl9BVFROX0VOQUJMRSB8CisJRE1BX1dSSVRFX01PREVfQUREUl9PVkVSRkxPV19BVFROX0VOQUJMRSB8CisJRE1BX1dSSVRFX01PREVfRklGT19PVkVSUlVOX0FUVE5fRU5BQkxFIHwKKwlETUFfV1JJVEVfTU9ERV9GSUZPX1VOREVSUlVOX0FUVE5fRU5BQkxFIHwKKwlETUFfV1JJVEVfTU9ERV9GSUZPX09WRVJSRUFEX0FUVE5fRU5BQkxFIHwKKwlETUFfV1JJVEVfTU9ERV9MT05HX1JFQURfQVRUTl9FTkFCTEU7CiAgICAgUkVHX1dSKHBEZXZpY2UsIERtYVdyaXRlLk1vZGUsIFZhbHVlMzIpOwogCiAgICAgaWYgKCEocERldmljZS0+UGNpU3RhdGUgJiBUM19QQ0lfU1RBVEVfQ09OVkVOVElPTkFMX1BDSV9NT0RFKSkKICAgICB7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzA0X0EwKQotICAgICAgICB7Ci0gICAgICAgICAgICBWYWx1ZTE2ID0gUkVHX1JEKHBEZXZpY2UsIFBjaUNmZy5QY2lYQ29tbWFuZCk7Ci0gICAgICAgICAgICBWYWx1ZTE2ICY9IH4oUENJWF9DTURfTUFYX1NQTElUX01BU0sgfCBQQ0lYX0NNRF9NQVhfQlVSU1RfTUFTSyk7Ci0gICAgICAgICAgICBWYWx1ZTE2IHw9ICgoUENJWF9DTURfTUFYX0JVUlNUX0NQSU9CIDw8IFBDSVhfQ01EX01BWF9CVVJTVF9TSEwpICYKLSAgICAgICAgICAgICAgICBQQ0lYX0NNRF9NQVhfQlVSU1RfTUFTSyk7Ci0gICAgICAgICAgICBpZiAocERldmljZS0+U3BsaXRNb2RlRW5hYmxlID09IFNQTElUX01PREVfRU5BQkxFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFZhbHVlMTYgfD0gKHBEZXZpY2UtPlNwbGl0TW9kZU1heFJlcSA8PCBQQ0lYX0NNRF9NQVhfU1BMSVRfU0hMKQotICAgICAgICAgICAgICAgICAgICYgUENJWF9DTURfTUFYX1NQTElUX01BU0s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLlBjaVhDb21tYW5kLCBWYWx1ZTE2KTsKLSAgICAgICAgfQorCWlmIChwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzA0X0EwKQorCXsKKwkgICAgVmFsdWUxNiA9IFJFR19SRChwRGV2aWNlLCBQY2lDZmcuUGNpWENvbW1hbmQpOworCSAgICBWYWx1ZTE2ICY9IH4oUENJWF9DTURfTUFYX1NQTElUX01BU0sgfCBQQ0lYX0NNRF9NQVhfQlVSU1RfTUFTSyk7CisJICAgIFZhbHVlMTYgfD0gKChQQ0lYX0NNRF9NQVhfQlVSU1RfQ1BJT0IgPDwgUENJWF9DTURfTUFYX0JVUlNUX1NITCkgJgorCQlQQ0lYX0NNRF9NQVhfQlVSU1RfTUFTSyk7CisJICAgIGlmIChwRGV2aWNlLT5TcGxpdE1vZGVFbmFibGUgPT0gU1BMSVRfTU9ERV9FTkFCTEUpCisJICAgIHsKKwkJVmFsdWUxNiB8PSAocERldmljZS0+U3BsaXRNb2RlTWF4UmVxIDw8IFBDSVhfQ01EX01BWF9TUExJVF9TSEwpCisJCSAgICYgUENJWF9DTURfTUFYX1NQTElUX01BU0s7CisJICAgIH0KKwkgICAgUkVHX1dSKHBEZXZpY2UsIFBjaUNmZy5QY2lYQ29tbWFuZCwgVmFsdWUxNik7CisJfQogICAgIH0KIAogICAgIC8qIEVuYWJsZSB0aGUgUmVhZCBETUEgc3RhdGUgbWFjaGluZS4gKi8KICAgICBWYWx1ZTMyID0gRE1BX1JFQURfTU9ERV9FTkFCTEUgfAotICAgICAgICBETUFfUkVBRF9NT0RFX1RBUkdFVF9BQk9SVF9BVFROX0VOQUJMRSB8Ci0gICAgICAgIERNQV9SRUFEX01PREVfTUFTVEVSX0FCT1JUX0FUVE5fRU5BQkxFIHwKLSAgICAgICAgRE1BX1JFQURfTU9ERV9QQVJJVFlfRVJST1JfQVRUTl9FTkFCTEUgfAotICAgICAgICBETUFfUkVBRF9NT0RFX0FERFJfT1ZFUkZMT1dfQVRUTl9FTkFCTEUgfAotICAgICAgICBETUFfUkVBRF9NT0RFX0ZJRk9fT1ZFUlJVTl9BVFROX0VOQUJMRSB8Ci0gICAgICAgIERNQV9SRUFEX01PREVfRklGT19VTkRFUlJVTl9BVFROX0VOQUJMRSB8Ci0gICAgICAgIERNQV9SRUFEX01PREVfRklGT19PVkVSUkVBRF9BVFROX0VOQUJMRSB8Ci0gICAgICAgIERNQV9SRUFEX01PREVfTE9OR19SRUFEX0FUVE5fRU5BQkxFOworCURNQV9SRUFEX01PREVfVEFSR0VUX0FCT1JUX0FUVE5fRU5BQkxFIHwKKwlETUFfUkVBRF9NT0RFX01BU1RFUl9BQk9SVF9BVFROX0VOQUJMRSB8CisJRE1BX1JFQURfTU9ERV9QQVJJVFlfRVJST1JfQVRUTl9FTkFCTEUgfAorCURNQV9SRUFEX01PREVfQUREUl9PVkVSRkxPV19BVFROX0VOQUJMRSB8CisJRE1BX1JFQURfTU9ERV9GSUZPX09WRVJSVU5fQVRUTl9FTkFCTEUgfAorCURNQV9SRUFEX01PREVfRklGT19VTkRFUlJVTl9BVFROX0VOQUJMRSB8CisJRE1BX1JFQURfTU9ERV9GSUZPX09WRVJSRUFEX0FUVE5fRU5BQkxFIHwKKwlETUFfUkVBRF9NT0RFX0xPTkdfUkVBRF9BVFROX0VOQUJMRTsKIAogICAgIGlmIChwRGV2aWNlLT5TcGxpdE1vZGVFbmFibGUgPT0gU1BMSVRfTU9ERV9FTkFCTEUpCiAgICAgewotICAgICAgICBWYWx1ZTMyIHw9IERNQV9SRUFEX01PREVfU1BMSVRfRU5BQkxFOworCVZhbHVlMzIgfD0gRE1BX1JFQURfTU9ERV9TUExJVF9FTkFCTEU7CiAgICAgfQogICAgIFJFR19XUihwRGV2aWNlLCBEbWFSZWFkLk1vZGUsIFZhbHVlMzIpOwogCiAgICAgLyogRW5hYmxlIHRoZSBSZWNlaXZlIERhdGEgQ29tcGxldGlvbiBzdGF0ZSBtYWNoaW5lLiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQ29tcC5Nb2RlLCBSQ1ZfREFUQV9DT01QX01PREVfRU5BQkxFIHwKLSAgICAgICAgUkNWX0RBVEFfQ09NUF9NT0RFX0FUVE5fRU5BQkxFKTsKKwlSQ1ZfREFUQV9DT01QX01PREVfQVRUTl9FTkFCTEUpOwogCiAgICAgLyogRW5hYmxlIHRoZSBNYnVmIENsdXN0ZXIgRnJlZSBzdGF0ZSBtYWNoaW5lLiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBNYnVmQ2x1c3RlckZyZWUuTW9kZSwgTUJVRl9DTFVTVEVSX0ZSRUVfTU9ERV9FTkFCTEUpOwpAQCAtMjg3MCwzMiArMjg2NCwzMiBAQAogCiAgICAgLyogRW5hYmxlIHRoZSBTZW5kIEJEIENvbXBsZXRpb24gc3RhdGUgbWFjaGluZS4gKi8KICAgICBSRUdfV1IocERldmljZSwgU25kQmRDb21wLk1vZGUsIFNORF9CRF9DT01QX01PREVfRU5BQkxFIHwKLSAgICAgICAgU05EX0JEX0NPTVBfTU9ERV9BVFROX0VOQUJMRSk7CisJU05EX0JEX0NPTVBfTU9ERV9BVFROX0VOQUJMRSk7CiAKICAgICAvKiBFbmFibGUgdGhlIFJlY2VpdmUgQkQgSW5pdGlhdG9yIHN0YXRlIG1hY2hpbmUuICovCiAgICAgUkVHX1dSKHBEZXZpY2UsIFJjdkJkSW4uTW9kZSwgUkNWX0JEX0lOX01PREVfRU5BQkxFIHwKLSAgICAgICAgUkNWX0JEX0lOX01PREVfQkRfSU5fRElBQkxFRF9SQ0JfQVRUTl9FTkFCTEUpOworCVJDVl9CRF9JTl9NT0RFX0JEX0lOX0RJQUJMRURfUkNCX0FUVE5fRU5BQkxFKTsKIAogICAgIC8qIEVuYWJsZSB0aGUgUmVjZWl2ZSBEYXRhIGFuZCBSZWNlaXZlIEJEIEluaXRpYXRvciBzdGF0ZSBtYWNoaW5lLiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBSY3ZEYXRhQmRJbi5Nb2RlLCBSQ1ZfREFUQV9CRF9JTl9NT0RFX0VOQUJMRSB8Ci0gICAgICAgIFJDVl9EQVRBX0JEX0lOX01PREVfSU5WQUxJRF9SSU5HX1NJWkUpOworCVJDVl9EQVRBX0JEX0lOX01PREVfSU5WQUxJRF9SSU5HX1NJWkUpOwogCiAgICAgLyogRW5hYmxlIHRoZSBTZW5kIERhdGEgSW5pdGlhdG9yIHN0YXRlIG1hY2hpbmUuICovCiAgICAgUkVHX1dSKHBEZXZpY2UsIFNuZERhdGFJbi5Nb2RlLCBUM19TTkRfREFUQV9JTl9NT0RFX0VOQUJMRSk7CiAKICAgICAvKiBFbmFibGUgdGhlIFNlbmQgQkQgSW5pdGlhdG9yIHN0YXRlIG1hY2hpbmUuICovCiAgICAgUkVHX1dSKHBEZXZpY2UsIFNuZEJkSW4uTW9kZSwgU05EX0JEX0lOX01PREVfRU5BQkxFIHwKLSAgICAgICAgU05EX0JEX0lOX01PREVfQVRUTl9FTkFCTEUpOworCVNORF9CRF9JTl9NT0RFX0FUVE5fRU5BQkxFKTsKIAogICAgIC8qIEVuYWJsZSB0aGUgU2VuZCBCRCBTZWxlY3RvciBzdGF0ZSBtYWNoaW5lLiAqLwogICAgIFJFR19XUihwRGV2aWNlLCBTbmRCZFNlbC5Nb2RlLCBTTkRfQkRfU0VMX01PREVfRU5BQkxFIHwKLSAgICAgICAgU05EX0JEX1NFTF9NT0RFX0FUVE5fRU5BQkxFKTsKKwlTTkRfQkRfU0VMX01PREVfQVRUTl9FTkFCTEUpOwogCiAjaWYgSU5DTFVERV81NzAxX0FYX0ZJWAogICAgIC8qIExvYWQgdGhlIGZpcm13YXJlIGZvciB0aGUgNTcwMV9BMCB3b3JrYXJvdW5kLiAqLwogICAgIGlmKHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDFfQTApCiAgICAgewotICAgICAgICBMTV9Mb2FkUmxzRmlybXdhcmUocERldmljZSk7CisJTE1fTG9hZFJsc0Zpcm13YXJlKHBEZXZpY2UpOwogICAgIH0KICNlbmRpZgogCkBAIC0yOTA5LDkgKzI5MDMsOSBAQAogCiAgICAgaWYgKHBEZXZpY2UtPlJlc3RvcmVPbldha2VVcCkKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPlJlc3RvcmVPbldha2VVcCA9IEZBTFNFOwotICAgICAgICBwRGV2aWNlLT5EaXNhYmxlQXV0b05lZyA9IHBEZXZpY2UtPldha2VVcERpc2FibGVBdXRvTmVnOwotICAgICAgICBwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUgPSBwRGV2aWNlLT5XYWtlVXBSZXF1ZXN0ZWRNZWRpYVR5cGU7CisJcERldmljZS0+UmVzdG9yZU9uV2FrZVVwID0gRkFMU0U7CisJcERldmljZS0+RGlzYWJsZUF1dG9OZWcgPSBwRGV2aWNlLT5XYWtlVXBEaXNhYmxlQXV0b05lZzsKKwlwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUgPSBwRGV2aWNlLT5XYWtlVXBSZXF1ZXN0ZWRNZWRpYVR5cGU7CiAgICAgfQogCiAgICAgLyogRGlzYWJsZSBhdXRvIHBvbGxpbmcuICovCkBAIC0yOTE5LDIwICsyOTEzLDIwIEBACiAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTWlNb2RlLCBwRGV2aWNlLT5NaU1vZGUpOwogCiAgICAgaWYoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwIHx8Ci0gICAgICAgIFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMSkKKwlUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDEpCiAgICAgewotICAgICAgICBWYWx1ZTMyID0gTEVEX0NUUkxfUEhZX01PREVfMTsKKwlWYWx1ZTMyID0gTEVEX0NUUkxfUEhZX01PREVfMTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYocERldmljZS0+TGVkTW9kZSA9PSBMRURfTU9ERV9PVVRQVVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZhbHVlMzIgPSBMRURfQ1RSTF9QSFlfTU9ERV8yOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiA9IExFRF9DVFJMX1BIWV9NT0RFXzE7Ci0gICAgICAgIH0KKwlpZihwRGV2aWNlLT5MZWRNb2RlID09IExFRF9NT0RFX09VVFBVVCkKKwl7CisJICAgIFZhbHVlMzIgPSBMRURfQ1RSTF9QSFlfTU9ERV8yOworCX0KKwllbHNlCisJeworCSAgICBWYWx1ZTMyID0gTEVEX0NUUkxfUEhZX01PREVfMTsKKwl9CiAgICAgfQogICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLkxlZEN0cmwsIFZhbHVlMzIpOwogCkBAIC0yOTQxLDIyICsyOTM1LDIyIEBACiAKICAgICBpZiAocERldmljZS0+RW5hYmxlVGJpKQogICAgIHsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuUnhNb2RlLCBSWF9NT0RFX1JFU0VUKTsKLSAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlJ4TW9kZSwgcERldmljZS0+UnhNb2RlKTsKLSAgICAgICAgaWYgKHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDNfQTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlNlcmRlc0NmZywgMHg2MTYwMDApOwotICAgICAgICB9CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuUnhNb2RlLCBSWF9NT0RFX1JFU0VUKTsKKwlNTV9XYWl0KDEwKTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5SeE1vZGUsIHBEZXZpY2UtPlJ4TW9kZSk7CisJaWYgKHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDNfQTEpCisJeworCSAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5TZXJkZXNDZmcsIDB4NjE2MDAwKTsKKwl9CiAgICAgfQogICAgIC8qIFNldHVwIHRoZSBwaHkgY2hpcC4gKi8KICAgICBMTV9TZXR1cFBoeShwRGV2aWNlKTsKIAogICAgIGlmICghcERldmljZS0+RW5hYmxlVGJpKSB7Ci0gICAgICAgIC8qIENsZWFyIENSQyBzdGF0cyAqLwotICAgICAgICBMTV9SZWFkUGh5KHBEZXZpY2UsIDB4MWUsICZWYWx1ZTMyKTsKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgMHgxZSwgVmFsdWUzMiB8IDB4ODAwMCk7Ci0gICAgICAgIExNX1JlYWRQaHkocERldmljZSwgMHgxNCwgJlZhbHVlMzIpOworCS8qIENsZWFyIENSQyBzdGF0cyAqLworCUxNX1JlYWRQaHkocERldmljZSwgMHgxZSwgJlZhbHVlMzIpOworCUxNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MWUsIFZhbHVlMzIgfCAweDgwMDApOworCUxNX1JlYWRQaHkocERldmljZSwgMHgxNCwgJlZhbHVlMzIpOwogICAgIH0KIAogICAgIC8qIFNldCB1cCB0aGUgcmVjZWl2ZSBtYXNrLiAqLwpAQCAtMjk2NSwxMyArMjk1OSwxMyBAQAogICAgIC8qIFF1ZXVlIFJ4IHBhY2tldCBidWZmZXJzLiAqLwogICAgIGlmKHBEZXZpY2UtPlF1ZXVlUnhQYWNrZXRzKQogICAgIHsKLSAgICAgICAgTE1fUXVldWVSeFBhY2tldHMocERldmljZSk7CisJTE1fUXVldWVSeFBhY2tldHMocERldmljZSk7CiAgICAgfQogCiAgICAgLyogRW5hYmxlIGludGVycnVwdCB0byB0aGUgaG9zdC4gKi8KICAgICBpZihwRGV2aWNlLT5Jbml0RG9uZSkKICAgICB7Ci0gICAgICAgIExNX0VuYWJsZUludGVycnVwdChwRGV2aWNlKTsKKwlMTV9FbmFibGVJbnRlcnJ1cHQocERldmljZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOwpAQCAtMjk5MCwxNCArMjk4NCwxMyBAQAogICAgIFBMTV9ERVZJQ0VfQkxPQ0sgcERldmljZSkKIHsKICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLk1pc2NIb3N0Q3RybCwgcERldmljZS0+TWlzY0hvc3RDdHJsIHwKLSAgICAgICAgTUlTQ19IT1NUX0NUUkxfTUFTS19QQ0lfSU5UKTsKKwlNSVNDX0hPU1RfQ1RSTF9NQVNLX1BDSV9JTlQpOwogICAgIE1CX1JFR19XUihwRGV2aWNlLCBNYWlsYm94LkludGVycnVwdFswXS5Mb3csIDEpOwogCiAgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOwogfQogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcyB0aGUgYWRhcHRlciB0byBnZW5lcmF0ZSBpbnRlcnJ1cHRzLiAgICAgICAgICAgICAgICAqLwpAQCAtMzAxMCwyMCArMzAwMywxOSBAQAogICAgIFBMTV9ERVZJQ0VfQkxPQ0sgcERldmljZSkKIHsKICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLk1pc2NIb3N0Q3RybCwgcERldmljZS0+TWlzY0hvc3RDdHJsICYKLSAgICAgICAgfk1JU0NfSE9TVF9DVFJMX01BU0tfUENJX0lOVCk7CisJfk1JU0NfSE9TVF9DVFJMX01BU0tfUENJX0lOVCk7CiAgICAgTUJfUkVHX1dSKHBEZXZpY2UsIE1haWxib3guSW50ZXJydXB0WzBdLkxvdywgMCk7CiAKICAgICBpZihwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+U3RhdHVzICYgU1RBVFVTX0JMT0NLX1VQREFURUQpCiAgICAgewotICAgICAgICBSRUdfV1IocERldmljZSwgR3JjLkxvY2FsQ3RybCwgcERldmljZS0+R3JjTG9jYWxDdHJsIHwKLSAgICAgICAgICAgIEdSQ19NSVNDX0xPQ0FMX0NUUkxfU0VUX0lOVCk7CisJUkVHX1dSKHBEZXZpY2UsIEdyYy5Mb2NhbEN0cmwsIHBEZXZpY2UtPkdyY0xvY2FsQ3RybCB8CisJICAgIEdSQ19NSVNDX0xPQ0FMX0NUUkxfU0VUX0lOVCk7CiAgICAgfQogCiAgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOwogfQogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGlzIHJvdXRpbmUgcHV0cyBhIHBhY2tldCBvbiB0aGUgd2lyZSBpZiB0aGVyZSBpcyBhIHRyYW5zbWl0IERNQSAgICAgICAqLwpAQCAtMzA0NSw3ICszMDM3LDcgQEAKICAgICBMTV9VSU5UMzIgSWR4OwogCiAgICAgaWYgKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCkgewotICAgICAgICByZXR1cm4gTE1fNTcwMFNlbmRQYWNrZXQocERldmljZSwgcFBhY2tldCk7CisJcmV0dXJuIExNXzU3MDBTZW5kUGFja2V0KHBEZXZpY2UsIHBQYWNrZXQpOwogICAgIH0KIAogICAgIC8qIFVwZGF0ZSB0aGUgU2VuZEJkTGVmdCBjb3VudC4gKi8KQEAgLTMwNTksMTAzICszMDUxLDEwMyBAQAogICAgIC8qIE5leHQgcHJvZHVjZXIgaW5kZXguICovCiAgICAgaWYgKHBEZXZpY2UtPk5pY1NlbmRCZCA9PSBUUlVFKQogICAgIHsKLSAgICAgICAgVDNfNjRCSVRfSE9TVF9BRERSIHBhZGRyOworCVQzXzY0QklUX0hPU1RfQUREUiBwYWRkcjsKIAotICAgICAgICBwU2hhZG93U2VuZEJkID0gJnBEZXZpY2UtPlNoYWRvd1NlbmRCZFtJZHhdOwotICAgICAgICBmb3IoRnJhZ0NvdW50ID0gMDsgOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIE1NX01hcFR4RG1hKHBEZXZpY2UsIHBQYWNrZXQsICZwYWRkciwgJkxlbiwgRnJhZ0NvdW50KTsKLSAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHBvaW50ZXIgdG8gdGhlIHNlbmQgYnVmZmVyIGZyYWdtZW50LiAqLwotICAgICAgICAgICAgaWYgKHBhZGRyLkhpZ2ggIT0gcFNoYWRvd1NlbmRCZC0+SG9zdEFkZHIuSGlnaCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfX3Jhd193cml0ZWwocGFkZHIuSGlnaCwgJihwU2VuZEJkLT5Ib3N0QWRkci5IaWdoKSk7Ci0gICAgICAgICAgICAgICAgcFNoYWRvd1NlbmRCZC0+SG9zdEFkZHIuSGlnaCA9IHBhZGRyLkhpZ2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBfX3Jhd193cml0ZWwocGFkZHIuTG93LCAmKHBTZW5kQmQtPkhvc3RBZGRyLkxvdykpOworCXBTaGFkb3dTZW5kQmQgPSAmcERldmljZS0+U2hhZG93U2VuZEJkW0lkeF07CisJZm9yKEZyYWdDb3VudCA9IDA7IDsgKQorCXsKKwkgICAgTU1fTWFwVHhEbWEocERldmljZSwgcFBhY2tldCwgJnBhZGRyLCAmTGVuLCBGcmFnQ291bnQpOworCSAgICAvKiBJbml0aWFsaXplIHRoZSBwb2ludGVyIHRvIHRoZSBzZW5kIGJ1ZmZlciBmcmFnbWVudC4gKi8KKwkgICAgaWYgKHBhZGRyLkhpZ2ggIT0gcFNoYWRvd1NlbmRCZC0+SG9zdEFkZHIuSGlnaCkKKwkgICAgeworCQlfX3Jhd193cml0ZWwocGFkZHIuSGlnaCwgJihwU2VuZEJkLT5Ib3N0QWRkci5IaWdoKSk7CisJCXBTaGFkb3dTZW5kQmQtPkhvc3RBZGRyLkhpZ2ggPSBwYWRkci5IaWdoOworCSAgICB9CisJICAgIF9fcmF3X3dyaXRlbChwYWRkci5Mb3csICYocFNlbmRCZC0+SG9zdEFkZHIuTG93KSk7CiAKLSAgICAgICAgICAgIC8qIFNldHVwIHRoZSBjb250cm9sIGZsYWdzIGFuZCBzZW5kIGJ1ZmZlciBzaXplLiAqLwotICAgICAgICAgICAgVmFsdWUzMiA9IChMZW4gPDwgMTYpIHwgcFBhY2tldC0+RmxhZ3M7CisJICAgIC8qIFNldHVwIHRoZSBjb250cm9sIGZsYWdzIGFuZCBzZW5kIGJ1ZmZlciBzaXplLiAqLworCSAgICBWYWx1ZTMyID0gKExlbiA8PCAxNikgfCBwUGFja2V0LT5GbGFnczsKIAotICAgICAgICAgICAgSWR4ID0gKElkeCArIDEpICYgVDNfU0VORF9SQ0JfRU5UUllfQ09VTlRfTUFTSzsKKwkgICAgSWR4ID0gKElkeCArIDEpICYgVDNfU0VORF9SQ0JfRU5UUllfQ09VTlRfTUFTSzsKIAotICAgICAgICAgICAgRnJhZ0NvdW50Kys7Ci0gICAgICAgICAgICBpZiAoRnJhZ0NvdW50ID49IHBQYWNrZXQtPnUuVHguRnJhZ0NvdW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFZhbHVlMzIgfD0gU05EX0JEX0ZMQUdfRU5EOwotICAgICAgICAgICAgICAgIGlmIChWYWx1ZTMyICE9IHBTaGFkb3dTZW5kQmQtPnUxLkxlbl9GbGFncykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9fcmF3X3dyaXRlbChWYWx1ZTMyLCAmKHBTZW5kQmQtPnUxLkxlbl9GbGFncykpOwotICAgICAgICAgICAgICAgICAgICBwU2hhZG93U2VuZEJkLT51MS5MZW5fRmxhZ3MgPSBWYWx1ZTMyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocFBhY2tldC0+RmxhZ3MgJiBTTkRfQkRfRkxBR19WTEFOX1RBRykgewotICAgICAgICAgICAgICAgICAgICBfX3Jhd193cml0ZWwocFBhY2tldC0+VmxhblRhZywgJihwU2VuZEJkLT51Mi5WbGFuVGFnKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChWYWx1ZTMyICE9IHBTaGFkb3dTZW5kQmQtPnUxLkxlbl9GbGFncykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9fcmF3X3dyaXRlbChWYWx1ZTMyLCAmKHBTZW5kQmQtPnUxLkxlbl9GbGFncykpOwotICAgICAgICAgICAgICAgICAgICBwU2hhZG93U2VuZEJkLT51MS5MZW5fRmxhZ3MgPSBWYWx1ZTMyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocFBhY2tldC0+RmxhZ3MgJiBTTkRfQkRfRkxBR19WTEFOX1RBRykgewotICAgICAgICAgICAgICAgICAgICBfX3Jhd193cml0ZWwocFBhY2tldC0+VmxhblRhZywgJihwU2VuZEJkLT51Mi5WbGFuVGFnKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorCSAgICBGcmFnQ291bnQrKzsKKwkgICAgaWYgKEZyYWdDb3VudCA+PSBwUGFja2V0LT51LlR4LkZyYWdDb3VudCkKKwkgICAgeworCQlWYWx1ZTMyIHw9IFNORF9CRF9GTEFHX0VORDsKKwkJaWYgKFZhbHVlMzIgIT0gcFNoYWRvd1NlbmRCZC0+dTEuTGVuX0ZsYWdzKQorCQl7CisJCSAgICBfX3Jhd193cml0ZWwoVmFsdWUzMiwgJihwU2VuZEJkLT51MS5MZW5fRmxhZ3MpKTsKKwkJICAgIHBTaGFkb3dTZW5kQmQtPnUxLkxlbl9GbGFncyA9IFZhbHVlMzI7CisJCX0KKwkJaWYgKHBQYWNrZXQtPkZsYWdzICYgU05EX0JEX0ZMQUdfVkxBTl9UQUcpIHsKKwkJICAgIF9fcmF3X3dyaXRlbChwUGFja2V0LT5WbGFuVGFnLCAmKHBTZW5kQmQtPnUyLlZsYW5UYWcpKTsKKwkJfQorCQlicmVhazsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJaWYgKFZhbHVlMzIgIT0gcFNoYWRvd1NlbmRCZC0+dTEuTGVuX0ZsYWdzKQorCQl7CisJCSAgICBfX3Jhd193cml0ZWwoVmFsdWUzMiwgJihwU2VuZEJkLT51MS5MZW5fRmxhZ3MpKTsKKwkJICAgIHBTaGFkb3dTZW5kQmQtPnUxLkxlbl9GbGFncyA9IFZhbHVlMzI7CisJCX0KKwkJaWYgKHBQYWNrZXQtPkZsYWdzICYgU05EX0JEX0ZMQUdfVkxBTl9UQUcpIHsKKwkJICAgIF9fcmF3X3dyaXRlbChwUGFja2V0LT5WbGFuVGFnLCAmKHBTZW5kQmQtPnUyLlZsYW5UYWcpKTsKKwkJfQorCSAgICB9CiAKLSAgICAgICAgICAgIHBTZW5kQmQrKzsKLSAgICAgICAgICAgIHBTaGFkb3dTZW5kQmQrKzsKLSAgICAgICAgICAgIGlmIChJZHggPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwU2VuZEJkID0gJnBEZXZpY2UtPnBTZW5kQmRWaXJ0WzBdOwotICAgICAgICAgICAgICAgIHBTaGFkb3dTZW5kQmQgPSAmcERldmljZS0+U2hhZG93U2VuZEJkWzBdOwotICAgICAgICAgICAgfQotICAgICAgICB9IC8qIGZvciAqLworCSAgICBwU2VuZEJkKys7CisJICAgIHBTaGFkb3dTZW5kQmQrKzsKKwkgICAgaWYgKElkeCA9PSAwKQorCSAgICB7CisJCXBTZW5kQmQgPSAmcERldmljZS0+cFNlbmRCZFZpcnRbMF07CisJCXBTaGFkb3dTZW5kQmQgPSAmcERldmljZS0+U2hhZG93U2VuZEJkWzBdOworCSAgICB9CisJfSAvKiBmb3IgKi8KIAotICAgICAgICAvKiBQdXQgdGhlIHBhY2tldCBkZXNjcmlwdG9yIGluIHRoZSBBY3RpdmVRLiAqLwotICAgICAgICBRUV9QdXNoVGFpbCgmcERldmljZS0+VHhQYWNrZXRBY3RpdmVRLkNvbnRhaW5lciwgcFBhY2tldCk7CisJLyogUHV0IHRoZSBwYWNrZXQgZGVzY3JpcHRvciBpbiB0aGUgQWN0aXZlUS4gKi8KKwlRUV9QdXNoVGFpbCgmcERldmljZS0+VHhQYWNrZXRBY3RpdmVRLkNvbnRhaW5lciwgcFBhY2tldCk7CiAKLSAgICAgICAgd21iKCk7Ci0gICAgICAgIE1CX1JFR19XUihwRGV2aWNlLCBNYWlsYm94LlNlbmROaWNQcm9kSWR4WzBdLkxvdywgSWR4KTsKKwl3bWIoKTsKKwlNQl9SRUdfV1IocERldmljZSwgTWFpbGJveC5TZW5kTmljUHJvZElkeFswXS5Mb3csIElkeCk7CiAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgZm9yKEZyYWdDb3VudCA9IDA7IDsgKQotICAgICAgICB7Ci0gICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBwb2ludGVyIHRvIHRoZSBzZW5kIGJ1ZmZlciBmcmFnbWVudC4gKi8KLSAgICAgICAgICAgIE1NX01hcFR4RG1hKHBEZXZpY2UsIHBQYWNrZXQsICZwU2VuZEJkLT5Ib3N0QWRkciwgJkxlbiwgRnJhZ0NvdW50KTsKKwlmb3IoRnJhZ0NvdW50ID0gMDsgOyApCisJeworCSAgICAvKiBJbml0aWFsaXplIHRoZSBwb2ludGVyIHRvIHRoZSBzZW5kIGJ1ZmZlciBmcmFnbWVudC4gKi8KKwkgICAgTU1fTWFwVHhEbWEocERldmljZSwgcFBhY2tldCwgJnBTZW5kQmQtPkhvc3RBZGRyLCAmTGVuLCBGcmFnQ291bnQpOwogCi0gICAgICAgICAgICBwU2VuZEJkLT51Mi5WbGFuVGFnID0gcFBhY2tldC0+VmxhblRhZzsKKwkgICAgcFNlbmRCZC0+dTIuVmxhblRhZyA9IHBQYWNrZXQtPlZsYW5UYWc7CiAKLSAgICAgICAgICAgIC8qIFNldHVwIHRoZSBjb250cm9sIGZsYWdzIGFuZCBzZW5kIGJ1ZmZlciBzaXplLiAqLwotICAgICAgICAgICAgVmFsdWUzMiA9IChMZW4gPDwgMTYpIHwgcFBhY2tldC0+RmxhZ3M7CisJICAgIC8qIFNldHVwIHRoZSBjb250cm9sIGZsYWdzIGFuZCBzZW5kIGJ1ZmZlciBzaXplLiAqLworCSAgICBWYWx1ZTMyID0gKExlbiA8PCAxNikgfCBwUGFja2V0LT5GbGFnczsKIAotICAgICAgICAgICAgSWR4ID0gKElkeCArIDEpICYgVDNfU0VORF9SQ0JfRU5UUllfQ09VTlRfTUFTSzsKKwkgICAgSWR4ID0gKElkeCArIDEpICYgVDNfU0VORF9SQ0JfRU5UUllfQ09VTlRfTUFTSzsKIAotICAgICAgICAgICAgRnJhZ0NvdW50Kys7Ci0gICAgICAgICAgICBpZiAoRnJhZ0NvdW50ID49IHBQYWNrZXQtPnUuVHguRnJhZ0NvdW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBTZW5kQmQtPnUxLkxlbl9GbGFncyA9IFZhbHVlMzIgfCBTTkRfQkRfRkxBR19FTkQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcFNlbmRCZC0+dTEuTGVuX0ZsYWdzID0gVmFsdWUzMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBTZW5kQmQrKzsKLSAgICAgICAgICAgIGlmIChJZHggPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwU2VuZEJkID0gJnBEZXZpY2UtPnBTZW5kQmRWaXJ0WzBdOwotICAgICAgICAgICAgfQotICAgICAgICB9IC8qIGZvciAqLworCSAgICBGcmFnQ291bnQrKzsKKwkgICAgaWYgKEZyYWdDb3VudCA+PSBwUGFja2V0LT51LlR4LkZyYWdDb3VudCkKKwkgICAgeworCQlwU2VuZEJkLT51MS5MZW5fRmxhZ3MgPSBWYWx1ZTMyIHwgU05EX0JEX0ZMQUdfRU5EOworCQlicmVhazsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJcFNlbmRCZC0+dTEuTGVuX0ZsYWdzID0gVmFsdWUzMjsKKwkgICAgfQorCSAgICBwU2VuZEJkKys7CisJICAgIGlmIChJZHggPT0gMCkKKwkgICAgeworCQlwU2VuZEJkID0gJnBEZXZpY2UtPnBTZW5kQmRWaXJ0WzBdOworCSAgICB9CisJfSAvKiBmb3IgKi8KIAotICAgICAgICAvKiBQdXQgdGhlIHBhY2tldCBkZXNjcmlwdG9yIGluIHRoZSBBY3RpdmVRLiAqLwotICAgICAgICBRUV9QdXNoVGFpbCgmcERldmljZS0+VHhQYWNrZXRBY3RpdmVRLkNvbnRhaW5lciwgcFBhY2tldCk7CisJLyogUHV0IHRoZSBwYWNrZXQgZGVzY3JpcHRvciBpbiB0aGUgQWN0aXZlUS4gKi8KKwlRUV9QdXNoVGFpbCgmcERldmljZS0+VHhQYWNrZXRBY3RpdmVRLkNvbnRhaW5lciwgcFBhY2tldCk7CiAKLSAgICAgICAgd21iKCk7Ci0gICAgICAgIE1CX1JFR19XUihwRGV2aWNlLCBNYWlsYm94LlNlbmRIb3N0UHJvZElkeFswXS5Mb3csIElkeCk7CisJd21iKCk7CisJTUJfUkVHX1dSKHBEZXZpY2UsIE1haWxib3guU2VuZEhvc3RQcm9kSWR4WzBdLkxvdywgSWR4KTsKIAogICAgIH0KIApAQCAtMzE3NiwxMjEgKzMxNjgsMTIxIEBACiAKICAgICB3aGlsZSAoMSkKICAgICB7Ci0gICAgICAgIC8qIEluaXRhbGl6ZSB0aGUgc2VuZCBidWZmZXIgZGVzY3JpcHRvcnMuICovCi0gICAgICAgIFN0YXJ0SWR4ID0gSWR4ID0gcERldmljZS0+U2VuZFByb2RJZHg7CisJLyogSW5pdGFsaXplIHRoZSBzZW5kIGJ1ZmZlciBkZXNjcmlwdG9ycy4gKi8KKwlTdGFydElkeCA9IElkeCA9IHBEZXZpY2UtPlNlbmRQcm9kSWR4OwogCi0gICAgICAgIGlmIChwRGV2aWNlLT5OaWNTZW5kQmQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBUbXBTZW5kQmQgPSBwU2VuZEJkID0gJk5pY1NlbmRCZEFyclswXTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBUbXBTZW5kQmQgPSBwU2VuZEJkID0gJnBEZXZpY2UtPnBTZW5kQmRWaXJ0W0lkeF07Ci0gICAgICAgIH0KKwlpZiAocERldmljZS0+TmljU2VuZEJkKQorCXsKKwkgICAgcFRtcFNlbmRCZCA9IHBTZW5kQmQgPSAmTmljU2VuZEJkQXJyWzBdOworCX0KKwllbHNlCisJeworCSAgICBwVG1wU2VuZEJkID0gcFNlbmRCZCA9ICZwRGV2aWNlLT5wU2VuZEJkVmlydFtJZHhdOworCX0KIAotICAgICAgICAvKiBOZXh0IHByb2R1Y2VyIGluZGV4LiAqLwotICAgICAgICBmb3IoRnJhZ0NvdW50ID0gMDsgOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIExNX1VJTlQzMiBWYWx1ZTMyLCBMZW47CisJLyogTmV4dCBwcm9kdWNlciBpbmRleC4gKi8KKwlmb3IoRnJhZ0NvdW50ID0gMDsgOyApCisJeworCSAgICBMTV9VSU5UMzIgVmFsdWUzMiwgTGVuOwogCi0gICAgICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBwb2ludGVyIHRvIHRoZSBzZW5kIGJ1ZmZlciBmcmFnbWVudC4gKi8KLSAgICAgICAgICAgIE1NX01hcFR4RG1hKHBEZXZpY2UsIHBQYWNrZXQsICZwU2VuZEJkLT5Ib3N0QWRkciwgJkxlbiwgRnJhZ0NvdW50KTsKKwkgICAgLyogSW5pdGlhbGl6ZSB0aGUgcG9pbnRlciB0byB0aGUgc2VuZCBidWZmZXIgZnJhZ21lbnQuICovCisJICAgIE1NX01hcFR4RG1hKHBEZXZpY2UsIHBQYWNrZXQsICZwU2VuZEJkLT5Ib3N0QWRkciwgJkxlbiwgRnJhZ0NvdW50KTsKIAotICAgICAgICAgICAgcFNlbmRCZC0+dTIuVmxhblRhZyA9IHBQYWNrZXQtPlZsYW5UYWc7CisJICAgIHBTZW5kQmQtPnUyLlZsYW5UYWcgPSBwUGFja2V0LT5WbGFuVGFnOwogCi0gICAgICAgICAgICAvKiBTZXR1cCB0aGUgY29udHJvbCBmbGFncyBhbmQgc2VuZCBidWZmZXIgc2l6ZS4gKi8KLSAgICAgICAgICAgIFZhbHVlMzIgPSAoTGVuIDw8IDE2KSB8IHBQYWNrZXQtPkZsYWdzOworCSAgICAvKiBTZXR1cCB0aGUgY29udHJvbCBmbGFncyBhbmQgc2VuZCBidWZmZXIgc2l6ZS4gKi8KKwkgICAgVmFsdWUzMiA9IChMZW4gPDwgMTYpIHwgcFBhY2tldC0+RmxhZ3M7CiAKLSAgICAgICAgICAgIElkeCA9IChJZHggKyAxKSAmIFQzX1NFTkRfUkNCX0VOVFJZX0NPVU5UX01BU0s7CisJICAgIElkeCA9IChJZHggKyAxKSAmIFQzX1NFTkRfUkNCX0VOVFJZX0NPVU5UX01BU0s7CiAKLSAgICAgICAgICAgIEZyYWdDb3VudCsrOwotICAgICAgICAgICAgaWYgKEZyYWdDb3VudCA+PSBwUGFja2V0LT51LlR4LkZyYWdDb3VudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwU2VuZEJkLT51MS5MZW5fRmxhZ3MgPSBWYWx1ZTMyIHwgU05EX0JEX0ZMQUdfRU5EOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBTZW5kQmQtPnUxLkxlbl9GbGFncyA9IFZhbHVlMzI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwU2VuZEJkKys7Ci0gICAgICAgICAgICBpZiAoKElkeCA9PSAwKSAmJiAhcERldmljZS0+TmljU2VuZEJkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBTZW5kQmQgPSAmcERldmljZS0+cFNlbmRCZFZpcnRbMF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLyogZm9yICovCi0gICAgICAgIGlmIChUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChMTV9UZXN0NEdCb3VuZGFyeShwRGV2aWNlLCBwUGFja2V0LCBwVG1wU2VuZEJkKSA9PQotICAgICAgICAgICAgICAgIExNX1NUQVRVU19TVUNDRVNTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChNTV9Db2FsZXNjZVR4QnVmZmVyKHBEZXZpY2UsIHBQYWNrZXQpICE9IExNX1NUQVRVU19TVUNDRVNTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgUVFfUHVzaEhlYWQoJnBEZXZpY2UtPlR4UGFja2V0RnJlZVEuQ29udGFpbmVyLCBwUGFja2V0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKKwkgICAgRnJhZ0NvdW50Kys7CisJICAgIGlmIChGcmFnQ291bnQgPj0gcFBhY2tldC0+dS5UeC5GcmFnQ291bnQpCisJICAgIHsKKwkJcFNlbmRCZC0+dTEuTGVuX0ZsYWdzID0gVmFsdWUzMiB8IFNORF9CRF9GTEFHX0VORDsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCXBTZW5kQmQtPnUxLkxlbl9GbGFncyA9IFZhbHVlMzI7CisJICAgIH0KKwkgICAgcFNlbmRCZCsrOworCSAgICBpZiAoKElkeCA9PSAwKSAmJiAhcERldmljZS0+TmljU2VuZEJkKQorCSAgICB7CisJCXBTZW5kQmQgPSAmcERldmljZS0+cFNlbmRCZFZpcnRbMF07CisJICAgIH0KKwl9IC8qIGZvciAqLworCWlmIChUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDApCisJeworCSAgICBpZiAoTE1fVGVzdDRHQm91bmRhcnkocERldmljZSwgcFBhY2tldCwgcFRtcFNlbmRCZCkgPT0KKwkJTE1fU1RBVFVTX1NVQ0NFU1MpCisJICAgIHsKKwkJaWYgKE1NX0NvYWxlc2NlVHhCdWZmZXIocERldmljZSwgcFBhY2tldCkgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJICAgIFFRX1B1c2hIZWFkKCZwRGV2aWNlLT5UeFBhY2tldEZyZWVRLkNvbnRhaW5lciwgcFBhY2tldCk7CisJCSAgICByZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7CisJCX0KKwkJY29udGludWU7CisJICAgIH0KKwl9CisJYnJlYWs7CiAgICAgfQogICAgIC8qIFB1dCB0aGUgcGFja2V0IGRlc2NyaXB0b3IgaW4gdGhlIEFjdGl2ZVEuICovCiAgICAgUVFfUHVzaFRhaWwoJnBEZXZpY2UtPlR4UGFja2V0QWN0aXZlUS5Db250YWluZXIsIHBQYWNrZXQpOwogCiAgICAgaWYgKHBEZXZpY2UtPk5pY1NlbmRCZCkKICAgICB7Ci0gICAgICAgIHBTZW5kQmQgPSAmcERldmljZS0+cFNlbmRCZFZpcnRbU3RhcnRJZHhdOwotICAgICAgICBwU2hhZG93U2VuZEJkID0gJnBEZXZpY2UtPlNoYWRvd1NlbmRCZFtTdGFydElkeF07CisJcFNlbmRCZCA9ICZwRGV2aWNlLT5wU2VuZEJkVmlydFtTdGFydElkeF07CisJcFNoYWRvd1NlbmRCZCA9ICZwRGV2aWNlLT5TaGFkb3dTZW5kQmRbU3RhcnRJZHhdOwogCi0gICAgICAgIHdoaWxlIChTdGFydElkeCAhPSBJZHgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIExNX1VJTlQzMiBWYWx1ZTMyOworCXdoaWxlIChTdGFydElkeCAhPSBJZHgpCisJeworCSAgICBMTV9VSU5UMzIgVmFsdWUzMjsKIAotICAgICAgICAgICAgaWYgKChWYWx1ZTMyID0gcFRtcFNlbmRCZC0+SG9zdEFkZHIuSGlnaCkgIT0KLSAgICAgICAgICAgICAgICBwU2hhZG93U2VuZEJkLT5Ib3N0QWRkci5IaWdoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9fcmF3X3dyaXRlbChWYWx1ZTMyLCAmKHBTZW5kQmQtPkhvc3RBZGRyLkhpZ2gpKTsKLSAgICAgICAgICAgICAgICBwU2hhZG93U2VuZEJkLT5Ib3N0QWRkci5IaWdoID0gVmFsdWUzMjsKLSAgICAgICAgICAgIH0KKwkgICAgaWYgKChWYWx1ZTMyID0gcFRtcFNlbmRCZC0+SG9zdEFkZHIuSGlnaCkgIT0KKwkJcFNoYWRvd1NlbmRCZC0+SG9zdEFkZHIuSGlnaCkKKwkgICAgeworCQlfX3Jhd193cml0ZWwoVmFsdWUzMiwgJihwU2VuZEJkLT5Ib3N0QWRkci5IaWdoKSk7CisJCXBTaGFkb3dTZW5kQmQtPkhvc3RBZGRyLkhpZ2ggPSBWYWx1ZTMyOworCSAgICB9CiAKLSAgICAgICAgICAgIF9fcmF3X3dyaXRlbChwVG1wU2VuZEJkLT5Ib3N0QWRkci5Mb3csICYocFNlbmRCZC0+SG9zdEFkZHIuTG93KSk7CisJICAgIF9fcmF3X3dyaXRlbChwVG1wU2VuZEJkLT5Ib3N0QWRkci5Mb3csICYocFNlbmRCZC0+SG9zdEFkZHIuTG93KSk7CiAKLSAgICAgICAgICAgIGlmICgoVmFsdWUzMiA9IHBUbXBTZW5kQmQtPnUxLkxlbl9GbGFncykgIT0KLSAgICAgICAgICAgICAgICBwU2hhZG93U2VuZEJkLT51MS5MZW5fRmxhZ3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX19yYXdfd3JpdGVsKFZhbHVlMzIsICYocFNlbmRCZC0+dTEuTGVuX0ZsYWdzKSk7Ci0gICAgICAgICAgICAgICAgcFNoYWRvd1NlbmRCZC0+dTEuTGVuX0ZsYWdzID0gVmFsdWUzMjsKLSAgICAgICAgICAgIH0KKwkgICAgaWYgKChWYWx1ZTMyID0gcFRtcFNlbmRCZC0+dTEuTGVuX0ZsYWdzKSAhPQorCQlwU2hhZG93U2VuZEJkLT51MS5MZW5fRmxhZ3MpCisJICAgIHsKKwkJX19yYXdfd3JpdGVsKFZhbHVlMzIsICYocFNlbmRCZC0+dTEuTGVuX0ZsYWdzKSk7CisJCXBTaGFkb3dTZW5kQmQtPnUxLkxlbl9GbGFncyA9IFZhbHVlMzI7CisJICAgIH0KIAotICAgICAgICAgICAgaWYgKHBQYWNrZXQtPkZsYWdzICYgU05EX0JEX0ZMQUdfVkxBTl9UQUcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX19yYXdfd3JpdGVsKHBUbXBTZW5kQmQtPnUyLlZsYW5UYWcsICYocFNlbmRCZC0+dTIuVmxhblRhZykpOwotICAgICAgICAgICAgfQorCSAgICBpZiAocFBhY2tldC0+RmxhZ3MgJiBTTkRfQkRfRkxBR19WTEFOX1RBRykKKwkgICAgeworCQlfX3Jhd193cml0ZWwocFRtcFNlbmRCZC0+dTIuVmxhblRhZywgJihwU2VuZEJkLT51Mi5WbGFuVGFnKSk7CisJICAgIH0KIAotICAgICAgICAgICAgU3RhcnRJZHggPSAoU3RhcnRJZHggKyAxKSAmIFQzX1NFTkRfUkNCX0VOVFJZX0NPVU5UX01BU0s7Ci0gICAgICAgICAgICBpZiAoU3RhcnRJZHggPT0gMCkKLSAgICAgICAgICAgICAgICBwU2VuZEJkID0gJnBEZXZpY2UtPnBTZW5kQmRWaXJ0WzBdOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBTZW5kQmQrKzsKLSAgICAgICAgICAgIHBUbXBTZW5kQmQrKzsKLSAgICAgICAgfQotICAgICAgICB3bWIoKTsKLSAgICAgICAgTUJfUkVHX1dSKHBEZXZpY2UsIE1haWxib3guU2VuZE5pY1Byb2RJZHhbMF0uTG93LCBJZHgpOworCSAgICBTdGFydElkeCA9IChTdGFydElkeCArIDEpICYgVDNfU0VORF9SQ0JfRU5UUllfQ09VTlRfTUFTSzsKKwkgICAgaWYgKFN0YXJ0SWR4ID09IDApCisJCXBTZW5kQmQgPSAmcERldmljZS0+cFNlbmRCZFZpcnRbMF07CisJICAgIGVsc2UKKwkJcFNlbmRCZCsrOworCSAgICBwVG1wU2VuZEJkKys7CisJfQorCXdtYigpOworCU1CX1JFR19XUihwRGV2aWNlLCBNYWlsYm94LlNlbmROaWNQcm9kSWR4WzBdLkxvdywgSWR4KTsKIAotICAgICAgICBpZihUM19DSElQX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0NISVBfUkVWXzU3MDBfQlgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIE1CX1JFR19XUihwRGV2aWNlLCBNYWlsYm94LlNlbmROaWNQcm9kSWR4WzBdLkxvdywgSWR4KTsKLSAgICAgICAgfQorCWlmKFQzX0NISVBfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQ0hJUF9SRVZfNTcwMF9CWCkKKwl7CisJICAgIE1CX1JFR19XUihwRGV2aWNlLCBNYWlsYm94LlNlbmROaWNQcm9kSWR4WzBdLkxvdywgSWR4KTsKKwl9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHdtYigpOwotICAgICAgICBNQl9SRUdfV1IocERldmljZSwgTWFpbGJveC5TZW5kSG9zdFByb2RJZHhbMF0uTG93LCBJZHgpOworCXdtYigpOworCU1CX1JFR19XUihwRGV2aWNlLCBNYWlsYm94LlNlbmRIb3N0UHJvZElkeFswXS5Mb3csIElkeCk7CiAKLSAgICAgICAgaWYoVDNfQ0hJUF9SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19DSElQX1JFVl81NzAwX0JYKQotICAgICAgICB7Ci0gICAgICAgICAgICBNQl9SRUdfV1IocERldmljZSwgTWFpbGJveC5TZW5kSG9zdFByb2RJZHhbMF0uTG93LCBJZHgpOwotICAgICAgICB9CisJaWYoVDNfQ0hJUF9SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19DSElQX1JFVl81NzAwX0JYKQorCXsKKwkgICAgTUJfUkVHX1dSKHBEZXZpY2UsIE1haWxib3guU2VuZEhvc3RQcm9kSWR4WzBdLkxvdywgSWR4KTsKKwl9CiAgICAgfQogCiAgICAgLyogVXBkYXRlIHRoZSBTZW5kQmRMZWZ0IGNvdW50LiAqLwpAQCAtMzMxMiwyNyArMzMwNCwyNyBAQAogICAgIElkeCA9IHBEZXZpY2UtPlNlbmRQcm9kSWR4OwogICAgIGZvcihGcmFnQ291bnQgPSAwOyA7ICkKICAgICB7Ci0gICAgICAgIExlbiA9IHBTZW5kQmQtPnUxLkxlbl9GbGFncyA+PiAxNjsKLSAgICAgICAgaWYgKCgoQmFzZSA9IHBTZW5kQmQtPkhvc3RBZGRyLkxvdykgPiAweGZmZmZkY2MwKSAmJgotICAgICAgICAgICAgKHBTZW5kQmQtPkhvc3RBZGRyLkhpZ2ggPT0gMCkgJiYKLSAgICAgICAgICAgICgoQmFzZSArIDggKyBMZW4pIDwgQmFzZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBMTV9TVEFUVVNfU1VDQ0VTUzsKLSAgICAgICAgfQotICAgICAgICBGcmFnQ291bnQrKzsKLSAgICAgICAgaWYgKEZyYWdDb3VudCA+PSBwUGFja2V0LT51LlR4LkZyYWdDb3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcFNlbmRCZCsrOwotICAgICAgICBpZiAoIXBEZXZpY2UtPk5pY1NlbmRCZCkKLSAgICAgICAgewotICAgICAgICAgICAgSWR4ID0gKElkeCArIDEpICYgVDNfU0VORF9SQ0JfRU5UUllfQ09VTlRfTUFTSzsKLSAgICAgICAgICAgIGlmIChJZHggPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwU2VuZEJkID0gJnBEZXZpY2UtPnBTZW5kQmRWaXJ0WzBdOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJTGVuID0gcFNlbmRCZC0+dTEuTGVuX0ZsYWdzID4+IDE2OworCWlmICgoKEJhc2UgPSBwU2VuZEJkLT5Ib3N0QWRkci5Mb3cpID4gMHhmZmZmZGNjMCkgJiYKKwkgICAgKHBTZW5kQmQtPkhvc3RBZGRyLkhpZ2ggPT0gMCkgJiYKKwkgICAgKChCYXNlICsgOCArIExlbikgPCBCYXNlKSkKKwl7CisJICAgIHJldHVybiBMTV9TVEFUVVNfU1VDQ0VTUzsKKwl9CisJRnJhZ0NvdW50Kys7CisJaWYgKEZyYWdDb3VudCA+PSBwUGFja2V0LT51LlR4LkZyYWdDb3VudCkKKwl7CisJICAgIGJyZWFrOworCX0KKwlwU2VuZEJkKys7CisJaWYgKCFwRGV2aWNlLT5OaWNTZW5kQmQpCisJeworCSAgICBJZHggPSAoSWR4ICsgMSkgJiBUM19TRU5EX1JDQl9FTlRSWV9DT1VOVF9NQVNLOworCSAgICBpZiAoSWR4ID09IDApCisJICAgIHsKKwkJcFNlbmRCZCA9ICZwRGV2aWNlLT5wU2VuZEJkVmlydFswXTsKKwkgICAgfQorCX0KICAgICB9CiAgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOwogfQpAQCAtMzM1NCwyNiArMzM0NiwyNSBAQAogCiAgICAgZm9yKGogPSAwOyBqIDwgQnVmZmVyU2l6ZTsgaisrKQogICAgIHsKLSAgICAgICAgUmVnIF49IHBCdWZmZXJbal07CisJUmVnIF49IHBCdWZmZXJbal07CiAKLSAgICAgICAgZm9yKGsgPSAwOyBrIDwgODsgaysrKQotICAgICAgICB7Ci0gICAgICAgICAgICBUbXAgPSBSZWcgJiAweDAxOworCWZvcihrID0gMDsgayA8IDg7IGsrKykKKwl7CisJICAgIFRtcCA9IFJlZyAmIDB4MDE7CiAKLSAgICAgICAgICAgIFJlZyA+Pj0gMTsKKwkgICAgUmVnID4+PSAxOwogCi0gICAgICAgICAgICBpZihUbXApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUmVnIF49IDB4ZWRiODgzMjA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkgICAgaWYoVG1wKQorCSAgICB7CisJCVJlZyBePSAweGVkYjg4MzIwOworCSAgICB9CisJfQogICAgIH0KIAogICAgIHJldHVybiB+UmVnOwogfSAvKiBDb21wdXRlQ3JjMzIgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHJlY2VpdmUgY29udHJvbCByZWdpc3RlciBhY2NvcmRpbmcgdG8gUmVjZWl2ZU1hc2sgKi8KQEAgLTMzOTUsNDIgKzMzODYsNDIgQEAKIAogICAgIGlmKE1hc2sgJiBMTV9BQ0NFUFRfVU5JQ0FTVCkKICAgICB7Ci0gICAgICAgIE1hc2sgJj0gfkxNX0FDQ0VQVF9VTklDQVNUOworCU1hc2sgJj0gfkxNX0FDQ0VQVF9VTklDQVNUOwogICAgIH0KIAogICAgIGlmKE1hc2sgJiBMTV9BQ0NFUFRfTVVMVElDQVNUKQogICAgIHsKLSAgICAgICAgTWFzayAmPSB+TE1fQUNDRVBUX01VTFRJQ0FTVDsKKwlNYXNrICY9IH5MTV9BQ0NFUFRfTVVMVElDQVNUOwogICAgIH0KIAogICAgIGlmKE1hc2sgJiBMTV9BQ0NFUFRfQUxMX01VTFRJQ0FTVCkKICAgICB7Ci0gICAgICAgIE1hc2sgJj0gfkxNX0FDQ0VQVF9BTExfTVVMVElDQVNUOworCU1hc2sgJj0gfkxNX0FDQ0VQVF9BTExfTVVMVElDQVNUOwogICAgIH0KIAogICAgIGlmKE1hc2sgJiBMTV9BQ0NFUFRfQlJPQURDQVNUKQogICAgIHsKLSAgICAgICAgTWFzayAmPSB+TE1fQUNDRVBUX0JST0FEQ0FTVDsKKwlNYXNrICY9IH5MTV9BQ0NFUFRfQlJPQURDQVNUOwogICAgIH0KIAogICAgIFJ4TW9kZSAmPSB+UlhfTU9ERV9QUk9NSVNDVU9VU19NT0RFOwogICAgIGlmKE1hc2sgJiBMTV9QUk9NSVNDVU9VU19NT0RFKQogICAgIHsKLSAgICAgICAgUnhNb2RlIHw9IFJYX01PREVfUFJPTUlTQ1VPVVNfTU9ERTsKLSAgICAgICAgTWFzayAmPSB+TE1fUFJPTUlTQ1VPVVNfTU9ERTsKKwlSeE1vZGUgfD0gUlhfTU9ERV9QUk9NSVNDVU9VU19NT0RFOworCU1hc2sgJj0gfkxNX1BST01JU0NVT1VTX01PREU7CiAgICAgfQogCiAgICAgUnhNb2RlICY9IH4oUlhfTU9ERV9BQ0NFUFRfUlVOVFMgfCBSWF9NT0RFX0FDQ0VQVF9PVkVSU0laRUQpOwogICAgIGlmKE1hc2sgJiBMTV9BQ0NFUFRfRVJST1JfUEFDS0VUKQogICAgIHsKLSAgICAgICAgUnhNb2RlIHw9IFJYX01PREVfQUNDRVBUX1JVTlRTIHwgUlhfTU9ERV9BQ0NFUFRfT1ZFUlNJWkVEOwotICAgICAgICBNYXNrICY9IH5MTV9BQ0NFUFRfRVJST1JfUEFDS0VUOworCVJ4TW9kZSB8PSBSWF9NT0RFX0FDQ0VQVF9SVU5UUyB8IFJYX01PREVfQUNDRVBUX09WRVJTSVpFRDsKKwlNYXNrICY9IH5MTV9BQ0NFUFRfRVJST1JfUEFDS0VUOwogICAgIH0KIAogICAgIC8qIE1ha2Ugc3VyZSBhbGwgdGhlIGJpdHMgYXJlIHZhbGlkIGJlZm9yZSBjb21taXR0aW5nIGNoYW5nZXMuICovCiAgICAgaWYoTWFzaykKICAgICB7Ci0gICAgICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKKwlyZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7CiAgICAgfQogCiAgICAgLyogQ29tbWl0IHRoZSBuZXcgZmlsdGVyLiAqLwpAQCAtMzQ0Miw5MCArMzQzMyw4OSBAQAogICAgIC8qIFNldCB1cCB0aGUgTUMgaGFzaCB0YWJsZS4gKi8KICAgICBpZihSZWNlaXZlTWFzayAmIExNX0FDQ0VQVF9BTExfTVVMVElDQVNUKQogICAgIHsKLSAgICAgICAgZm9yKGsgPSAwOyBrIDwgNDsgaysrKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5IYXNoUmVnW2tdLCAweGZmZmZmZmZmKTsKLSAgICAgICAgfQorCWZvcihrID0gMDsgayA8IDQ7IGsrKykKKwl7CisJICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLkhhc2hSZWdba10sIDB4ZmZmZmZmZmYpOworCX0KICAgICB9CiAgICAgZWxzZSBpZihSZWNlaXZlTWFzayAmIExNX0FDQ0VQVF9NVUxUSUNBU1QpCiAgICAgewotICAgICAgICBMTV9VSU5UMzIgSGFzaFJlZ1s0XTsKKwlMTV9VSU5UMzIgSGFzaFJlZ1s0XTsKIAotICAgICAgICBIYXNoUmVnWzBdID0gMDsgSGFzaFJlZ1sxXSA9IDA7IEhhc2hSZWdbMl0gPSAwOyBIYXNoUmVnWzNdID0gMDsKLSAgICAgICAgZm9yKGogPSAwOyBqIDwgcERldmljZS0+TWNFbnRyeUNvdW50OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIExNX1VJTlQzMiBSZWdJbmRleDsKLSAgICAgICAgICAgIExNX1VJTlQzMiBCaXRwb3M7Ci0gICAgICAgICAgICBMTV9VSU5UMzIgQ3JjMzI7CisJSGFzaFJlZ1swXSA9IDA7IEhhc2hSZWdbMV0gPSAwOyBIYXNoUmVnWzJdID0gMDsgSGFzaFJlZ1szXSA9IDA7CisJZm9yKGogPSAwOyBqIDwgcERldmljZS0+TWNFbnRyeUNvdW50OyBqKyspCisJeworCSAgICBMTV9VSU5UMzIgUmVnSW5kZXg7CisJICAgIExNX1VJTlQzMiBCaXRwb3M7CisJICAgIExNX1VJTlQzMiBDcmMzMjsKIAotICAgICAgICAgICAgQ3JjMzIgPSBDb21wdXRlQ3JjMzIocERldmljZS0+TWNUYWJsZVtqXSwgRVRIRVJORVRfQUREUkVTU19TSVpFKTsKKwkgICAgQ3JjMzIgPSBDb21wdXRlQ3JjMzIocERldmljZS0+TWNUYWJsZVtqXSwgRVRIRVJORVRfQUREUkVTU19TSVpFKTsKIAotICAgICAgICAgICAgLyogVGhlIG1vc3Qgc2lnbmlmaWNhbnQgNyBiaXRzIG9mIHRoZSBDUkMzMiAobm8gaW52ZXJzaW9uKSwgKi8KLSAgICAgICAgICAgIC8qIGFyZSB1c2VkIHRvIGluZGV4IGludG8gb25lIG9mIHRoZSBwb3NzaWJsZSAxMjggYml0IHBvc2l0aW9ucy4gKi8KLSAgICAgICAgICAgIEJpdHBvcyA9IH5DcmMzMiAmIDB4N2Y7CisJICAgIC8qIFRoZSBtb3N0IHNpZ25pZmljYW50IDcgYml0cyBvZiB0aGUgQ1JDMzIgKG5vIGludmVyc2lvbiksICovCisJICAgIC8qIGFyZSB1c2VkIHRvIGluZGV4IGludG8gb25lIG9mIHRoZSBwb3NzaWJsZSAxMjggYml0IHBvc2l0aW9ucy4gKi8KKwkgICAgQml0cG9zID0gfkNyYzMyICYgMHg3ZjsKIAotICAgICAgICAgICAgLyogSGFzaCByZWdpc3RlciBpbmRleC4gKi8KLSAgICAgICAgICAgIFJlZ0luZGV4ID0gKEJpdHBvcyAmIDB4NjApID4+IDU7CisJICAgIC8qIEhhc2ggcmVnaXN0ZXIgaW5kZXguICovCisJICAgIFJlZ0luZGV4ID0gKEJpdHBvcyAmIDB4NjApID4+IDU7CiAKLSAgICAgICAgICAgIC8qIEJpdCB0byB0dXJuIG9uIHdpdGhpbiBhIGhhc2ggcmVnaXN0ZXIuICovCi0gICAgICAgICAgICBCaXRwb3MgJj0gMHgxZjsKKwkgICAgLyogQml0IHRvIHR1cm4gb24gd2l0aGluIGEgaGFzaCByZWdpc3Rlci4gKi8KKwkgICAgQml0cG9zICY9IDB4MWY7CiAKLSAgICAgICAgICAgIC8qIEVuYWJsZSB0aGUgbXVsdGljYXN0IGJpdC4gKi8KLSAgICAgICAgICAgIEhhc2hSZWdbUmVnSW5kZXhdIHw9ICgxIDw8IEJpdHBvcyk7Ci0gICAgICAgIH0KKwkgICAgLyogRW5hYmxlIHRoZSBtdWx0aWNhc3QgYml0LiAqLworCSAgICBIYXNoUmVnW1JlZ0luZGV4XSB8PSAoMSA8PCBCaXRwb3MpOworCX0KIAotICAgICAgICAvKiBSRVZfQVggaGFzIHByb2JsZW0gd2l0aCBtdWx0aWNhc3QgZmlsdGVyaW5nIHdoZXJlIGl0IHVzZXMgYm90aCAqLwotICAgICAgICAvKiBEQSBhbmQgU0EgdG8gcGVyZm9ybSBoYXNoaW5nLiAqLwotICAgICAgICBmb3IoayA9IDA7IGsgPCA0OyBrKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLkhhc2hSZWdba10sIEhhc2hSZWdba10pOwotICAgICAgICB9CisJLyogUkVWX0FYIGhhcyBwcm9ibGVtIHdpdGggbXVsdGljYXN0IGZpbHRlcmluZyB3aGVyZSBpdCB1c2VzIGJvdGggKi8KKwkvKiBEQSBhbmQgU0EgdG8gcGVyZm9ybSBoYXNoaW5nLiAqLworCWZvcihrID0gMDsgayA8IDQ7IGsrKykKKwl7CisJICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLkhhc2hSZWdba10sIEhhc2hSZWdba10pOworCX0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgLyogUmVqZWN0IGFsbCBtdWx0aWNhc3QgZnJhbWVzLiAqLwotICAgICAgICBmb3IoaiA9IDA7IGogPCA0OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLkhhc2hSZWdbal0sIDApOwotICAgICAgICB9CisJLyogUmVqZWN0IGFsbCBtdWx0aWNhc3QgZnJhbWVzLiAqLworCWZvcihqID0gMDsgaiA8IDQ7IGorKykKKwl7CisJICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLkhhc2hSZWdbal0sIDApOworCX0KICAgICB9CiAKICAgICAvKiBCeSBkZWZhdWx0LCBUaWdvbjMgd2lsbCBhY2NlcHQgYnJvYWRjYXN0IGZyYW1lcy4gIFdlIG5lZWQgdG8gc2V0dXAgKi8KICAgICBpZihSZWNlaXZlTWFzayAmIExNX0FDQ0VQVF9CUk9BRENBU1QpCiAgICAgewotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5SY3ZSdWxlc1tSQ1ZfUlVMRTFfUkVKRUNUX0JST0FEQ0FTVF9JRFhdLlJ1bGUsCi0gICAgICAgICAgICBSRUpFQ1RfQlJPQURDQVNUX1JVTEUxX1JVTEUgJiBSQ1ZfRElTQUJMRV9SVUxFX01BU0spOwotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5SY3ZSdWxlc1tSQ1ZfUlVMRTFfUkVKRUNUX0JST0FEQ0FTVF9JRFhdLlZhbHVlLAotICAgICAgICAgICAgUkVKRUNUX0JST0FEQ0FTVF9SVUxFMV9WQUxVRSAmIFJDVl9ESVNBQkxFX1JVTEVfTUFTSyk7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlJjdlJ1bGVzW1JDVl9SVUxFMl9SRUpFQ1RfQlJPQURDQVNUX0lEWF0uUnVsZSwKLSAgICAgICAgICAgIFJFSkVDVF9CUk9BRENBU1RfUlVMRTFfUlVMRSAmIFJDVl9ESVNBQkxFX1JVTEVfTUFTSyk7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlJjdlJ1bGVzW1JDVl9SVUxFMl9SRUpFQ1RfQlJPQURDQVNUX0lEWF0uVmFsdWUsCi0gICAgICAgICAgICBSRUpFQ1RfQlJPQURDQVNUX1JVTEUxX1ZBTFVFICYgUkNWX0RJU0FCTEVfUlVMRV9NQVNLKTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5SY3ZSdWxlc1tSQ1ZfUlVMRTFfUkVKRUNUX0JST0FEQ0FTVF9JRFhdLlJ1bGUsCisJICAgIFJFSkVDVF9CUk9BRENBU1RfUlVMRTFfUlVMRSAmIFJDVl9ESVNBQkxFX1JVTEVfTUFTSyk7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuUmN2UnVsZXNbUkNWX1JVTEUxX1JFSkVDVF9CUk9BRENBU1RfSURYXS5WYWx1ZSwKKwkgICAgUkVKRUNUX0JST0FEQ0FTVF9SVUxFMV9WQUxVRSAmIFJDVl9ESVNBQkxFX1JVTEVfTUFTSyk7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuUmN2UnVsZXNbUkNWX1JVTEUyX1JFSkVDVF9CUk9BRENBU1RfSURYXS5SdWxlLAorCSAgICBSRUpFQ1RfQlJPQURDQVNUX1JVTEUxX1JVTEUgJiBSQ1ZfRElTQUJMRV9SVUxFX01BU0spOworCVJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlJjdlJ1bGVzW1JDVl9SVUxFMl9SRUpFQ1RfQlJPQURDQVNUX0lEWF0uVmFsdWUsCisJICAgIFJFSkVDVF9CUk9BRENBU1RfUlVMRTFfVkFMVUUgJiBSQ1ZfRElTQUJMRV9SVUxFX01BU0spOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5SY3ZSdWxlc1tSQ1ZfUlVMRTFfUkVKRUNUX0JST0FEQ0FTVF9JRFhdLlJ1bGUsCi0gICAgICAgICAgICBSRUpFQ1RfQlJPQURDQVNUX1JVTEUxX1JVTEUpOwotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5SY3ZSdWxlc1tSQ1ZfUlVMRTFfUkVKRUNUX0JST0FEQ0FTVF9JRFhdLlZhbHVlLAotICAgICAgICAgICAgUkVKRUNUX0JST0FEQ0FTVF9SVUxFMV9WQUxVRSk7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlJjdlJ1bGVzW1JDVl9SVUxFMl9SRUpFQ1RfQlJPQURDQVNUX0lEWF0uUnVsZSwKLSAgICAgICAgICAgIFJFSkVDVF9CUk9BRENBU1RfUlVMRTJfUlVMRSk7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlJjdlJ1bGVzW1JDVl9SVUxFMl9SRUpFQ1RfQlJPQURDQVNUX0lEWF0uVmFsdWUsCi0gICAgICAgICAgICBSRUpFQ1RfQlJPQURDQVNUX1JVTEUyX1ZBTFVFKTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5SY3ZSdWxlc1tSQ1ZfUlVMRTFfUkVKRUNUX0JST0FEQ0FTVF9JRFhdLlJ1bGUsCisJICAgIFJFSkVDVF9CUk9BRENBU1RfUlVMRTFfUlVMRSk7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuUmN2UnVsZXNbUkNWX1JVTEUxX1JFSkVDVF9CUk9BRENBU1RfSURYXS5WYWx1ZSwKKwkgICAgUkVKRUNUX0JST0FEQ0FTVF9SVUxFMV9WQUxVRSk7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuUmN2UnVsZXNbUkNWX1JVTEUyX1JFSkVDVF9CUk9BRENBU1RfSURYXS5SdWxlLAorCSAgICBSRUpFQ1RfQlJPQURDQVNUX1JVTEUyX1JVTEUpOworCVJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlJjdlJ1bGVzW1JDVl9SVUxFMl9SRUpFQ1RfQlJPQURDQVNUX0lEWF0uVmFsdWUsCisJICAgIFJFSkVDVF9CUk9BRENBU1RfUlVMRTJfVkFMVUUpOwogICAgIH0KIAogICAgIC8qIGRpc2FibGUgdGhlIHJlc3Qgb2YgdGhlIHJ1bGVzLiAqLwogICAgIGZvcihqID0gUkNWX0xBU1RfUlVMRV9JRFg7IGogPCAxNjsgaisrKQogICAgIHsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuUmN2UnVsZXNbal0uUnVsZSwgMCk7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlJjdlJ1bGVzW2pdLlZhbHVlLCAwKTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5SY3ZSdWxlc1tqXS5SdWxlLCAwKTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5SY3ZSdWxlc1tqXS5WYWx1ZSwgMCk7CiAgICAgfQogCiAgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOwogfSAvKiBMTV9TZXRSZWNlaXZlTWFzayAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgYW5kIHB1dCB0aGUgdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyIGVuZ2luZXMgaW4gICAqLwpAQCAtMzU4NCwxNSArMzU3NCwxNSBAQAogICAgIHdoaWxlKHBQYWNrZXQpCiAgICAgewogCi0gICAgICAgIHBQYWNrZXQtPlBhY2tldFN0YXR1cyA9IExNX1NUQVRVU19UUkFOU01JVF9BQk9SVEVEOwotICAgICAgICBwRGV2aWNlLT5UeENvdW50ZXJzLlR4UGFja2V0QWJvcnRlZENudCsrOworCXBQYWNrZXQtPlBhY2tldFN0YXR1cyA9IExNX1NUQVRVU19UUkFOU01JVF9BQk9SVEVEOworCXBEZXZpY2UtPlR4Q291bnRlcnMuVHhQYWNrZXRBYm9ydGVkQ250Kys7CiAKLSAgICAgICAgYXRvbWljX2FkZChwUGFja2V0LT51LlR4LkZyYWdDb3VudCwgJnBEZXZpY2UtPlNlbmRCZExlZnQpOworCWF0b21pY19hZGQocFBhY2tldC0+dS5UeC5GcmFnQ291bnQsICZwRGV2aWNlLT5TZW5kQmRMZWZ0KTsKIAotICAgICAgICBRUV9QdXNoVGFpbCgmcERldmljZS0+VHhQYWNrZXRYbWl0dGVkUS5Db250YWluZXIsIHBQYWNrZXQpOworCVFRX1B1c2hUYWlsKCZwRGV2aWNlLT5UeFBhY2tldFhtaXR0ZWRRLkNvbnRhaW5lciwgcFBhY2tldCk7CiAKLSAgICAgICAgcFBhY2tldCA9IChQTE1fUEFDS0VUKQotICAgICAgICAgICAgUVFfUG9wSGVhZCgmcERldmljZS0+VHhQYWNrZXRBY3RpdmVRLkNvbnRhaW5lcik7CisJcFBhY2tldCA9IChQTE1fUEFDS0VUKQorCSAgICBRUV9Qb3BIZWFkKCZwRGV2aWNlLT5UeFBhY2tldEFjdGl2ZVEuQ29udGFpbmVyKTsKICAgICB9CiAKICAgICAvKiBDbGVhbnVwIHRoZSByZWNlaXZlIHJldHVybiByaW5ncy4gKi8KQEAgLTM2MDIsMzggKzM1OTIsMzggQEAKICAgICAvKiBEb2luZyBzbyBtYXkgY2F1c2Ugc3lzdGVtIGNyYXNoLiAqLwogICAgIGlmKCFwRGV2aWNlLT5TaHV0dGluZ0Rvd24pCiAgICAgewotICAgICAgICAvKiBJbmRpY2F0ZSBwYWNrZXRzIHRvIHRoZSBwcm90b2NvbC4gKi8KLSAgICAgICAgTU1fSW5kaWNhdGVUeFBhY2tldHMocERldmljZSk7CisJLyogSW5kaWNhdGUgcGFja2V0cyB0byB0aGUgcHJvdG9jb2wuICovCisJTU1fSW5kaWNhdGVUeFBhY2tldHMocERldmljZSk7CiAKLSAgICAgICAgLyogSW5kaWNhdGUgcmVjZWl2ZWQgcGFja2V0cyB0byB0aGUgcHJvdG9jb2xzLiAqLwotICAgICAgICBNTV9JbmRpY2F0ZVJ4UGFja2V0cyhwRGV2aWNlKTsKKwkvKiBJbmRpY2F0ZSByZWNlaXZlZCBwYWNrZXRzIHRvIHRoZSBwcm90b2NvbHMuICovCisJTU1fSW5kaWNhdGVSeFBhY2tldHMocERldmljZSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIC8qIE1vdmUgdGhlIHJlY2VpdmUgcGFja2V0IGRlc2NyaXB0b3JzIGluIHRoZSBSZWNlaXZlZFEgdG8gdGhlICovCi0gICAgICAgIC8qIGZyZWUgcXVldWUuICovCi0gICAgICAgIGZvcig7IDspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBQYWNrZXQgPSAoUExNX1BBQ0tFVCkgUVFfUG9wSGVhZCgKLSAgICAgICAgICAgICAgICAmcERldmljZS0+UnhQYWNrZXRSZWNlaXZlZFEuQ29udGFpbmVyKTsKLSAgICAgICAgICAgIGlmKHBQYWNrZXQgPT0gTlVMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFFRX1B1c2hUYWlsKCZwRGV2aWNlLT5SeFBhY2tldEZyZWVRLkNvbnRhaW5lciwgcFBhY2tldCk7Ci0gICAgICAgIH0KKwkvKiBNb3ZlIHRoZSByZWNlaXZlIHBhY2tldCBkZXNjcmlwdG9ycyBpbiB0aGUgUmVjZWl2ZWRRIHRvIHRoZSAqLworCS8qIGZyZWUgcXVldWUuICovCisJZm9yKDsgOykKKwl7CisJICAgIHBQYWNrZXQgPSAoUExNX1BBQ0tFVCkgUVFfUG9wSGVhZCgKKwkJJnBEZXZpY2UtPlJ4UGFja2V0UmVjZWl2ZWRRLkNvbnRhaW5lcik7CisJICAgIGlmKHBQYWNrZXQgPT0gTlVMTCkKKwkgICAgeworCQlicmVhazsKKwkgICAgfQorCSAgICBRUV9QdXNoVGFpbCgmcERldmljZS0+UnhQYWNrZXRGcmVlUS5Db250YWluZXIsIHBQYWNrZXQpOworCX0KICAgICB9CiAKICAgICAvKiBDbGVhbiB1cCB0aGUgU3RkIFJlY2VpdmUgUHJvZHVjZXIgcmluZy4gKi8KICAgICBJZHggPSBwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+UmN2U3RkQ29uSWR4OwogCiAgICAgd2hpbGUoSWR4ICE9IHBEZXZpY2UtPlJ4U3RkUHJvZElkeCkgewotICAgICAgICBwUGFja2V0ID0gKFBMTV9QQUNLRVQpIChNTV9VSU5UX1BUUihwRGV2aWNlLT5wUGFja2V0RGVzY0Jhc2UpICsKLSAgICAgICAgICAgIE1NX1VJTlRfUFRSKHBEZXZpY2UtPnBSeFN0ZEJkVmlydFtJZHhdLk9wYXF1ZSkpOworCXBQYWNrZXQgPSAoUExNX1BBQ0tFVCkgKE1NX1VJTlRfUFRSKHBEZXZpY2UtPnBQYWNrZXREZXNjQmFzZSkgKworCSAgICBNTV9VSU5UX1BUUihwRGV2aWNlLT5wUnhTdGRCZFZpcnRbSWR4XS5PcGFxdWUpKTsKIAotICAgICAgICBRUV9QdXNoVGFpbCgmcERldmljZS0+UnhQYWNrZXRGcmVlUS5Db250YWluZXIsIHBQYWNrZXQpOworCVFRX1B1c2hUYWlsKCZwRGV2aWNlLT5SeFBhY2tldEZyZWVRLkNvbnRhaW5lciwgcFBhY2tldCk7CiAKLSAgICAgICAgSWR4ID0gKElkeCArIDEpICYgVDNfU1REX1JDVl9SQ0JfRU5UUllfQ09VTlRfTUFTSzsKKwlJZHggPSAoSWR4ICsgMSkgJiBUM19TVERfUkNWX1JDQl9FTlRSWV9DT1VOVF9NQVNLOwogICAgIH0gLyogd2hpbGUgKi8KIAogICAgIC8qIFJlaW5pdGlhbGl6ZSBvdXIgY29weSBvZiB0aGUgaW5kaWNlcy4gKi8KQEAgLTM2NDQsMTIgKzM2MzQsMTIgQEAKICAgICBJZHggPSBwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+UmN2SnVtYm9Db25JZHg7CiAKICAgICB3aGlsZShJZHggIT0gcERldmljZS0+UnhKdW1ib1Byb2RJZHgpIHsKLSAgICAgICAgcFBhY2tldCA9IChQTE1fUEFDS0VUKSAoTU1fVUlOVF9QVFIocERldmljZS0+cFBhY2tldERlc2NCYXNlKSArCi0gICAgICAgICAgICBNTV9VSU5UX1BUUihwRGV2aWNlLT5wUnhKdW1ib0JkVmlydFtJZHhdLk9wYXF1ZSkpOworCXBQYWNrZXQgPSAoUExNX1BBQ0tFVCkgKE1NX1VJTlRfUFRSKHBEZXZpY2UtPnBQYWNrZXREZXNjQmFzZSkgKworCSAgICBNTV9VSU5UX1BUUihwRGV2aWNlLT5wUnhKdW1ib0JkVmlydFtJZHhdLk9wYXF1ZSkpOwogCi0gICAgICAgIFFRX1B1c2hUYWlsKCZwRGV2aWNlLT5SeFBhY2tldEZyZWVRLkNvbnRhaW5lciwgcFBhY2tldCk7CisJUVFfUHVzaFRhaWwoJnBEZXZpY2UtPlJ4UGFja2V0RnJlZVEuQ29udGFpbmVyLCBwUGFja2V0KTsKIAotICAgICAgICBJZHggPSAoSWR4ICsgMSkgJiBUM19KVU1CT19SQ1ZfUkNCX0VOVFJZX0NPVU5UX01BU0s7CisJSWR4ID0gKElkeCArIDEpICYgVDNfSlVNQk9fUkNWX1JDQl9FTlRSWV9DT1VOVF9NQVNLOwogICAgIH0gLyogd2hpbGUgKi8KIAogICAgIC8qIFJlaW5pdGlhbGl6ZSBvdXIgY29weSBvZiB0aGUgaW5kaWNlcy4gKi8KQEAgLTM2NjgsNyArMzY1OCw2IEBACiB9IC8qIExNX0Fib3J0ICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIERpc2FibGUgdGhlIGludGVycnVwdCBhbmQgcHV0IHRoZSB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZXIgZW5naW5lcyBpbiAgICovCkBAIC0zNjkyLDIyICszNjgxLDIyIEBACiAgICAgLyogTWFrZSBzdXJlIGFsbCB0aGUgcGFja2V0cyBoYXZlIGJlZW4gYWNjb3VudGVkIGZvci4gKi8KICAgICBmb3IoRW50cnlDbnQgPSAwOyBFbnRyeUNudCA8IHBEZXZpY2UtPlJ4UGFja2V0RGVzY0NudDsgRW50cnlDbnQrKykKICAgICB7Ci0gICAgICAgIHBQYWNrZXQgPSAoUExNX1BBQ0tFVCkgUVFfUG9wSGVhZCgmcERldmljZS0+UnhQYWNrZXRGcmVlUS5Db250YWluZXIpOwotICAgICAgICBpZiAocFBhY2tldCA9PSAwKQotICAgICAgICAgICAgYnJlYWs7CisJcFBhY2tldCA9IChQTE1fUEFDS0VUKSBRUV9Qb3BIZWFkKCZwRGV2aWNlLT5SeFBhY2tldEZyZWVRLkNvbnRhaW5lcik7CisJaWYgKHBQYWNrZXQgPT0gMCkKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgTU1fRnJlZVJ4QnVmZmVyKHBEZXZpY2UsIHBQYWNrZXQpOworCU1NX0ZyZWVSeEJ1ZmZlcihwRGV2aWNlLCBwUGFja2V0KTsKIAotICAgICAgICBRUV9QdXNoVGFpbCgmcERldmljZS0+UnhQYWNrZXRGcmVlUS5Db250YWluZXIsIHBQYWNrZXQpOworCVFRX1B1c2hUYWlsKCZwRGV2aWNlLT5SeFBhY2tldEZyZWVRLkNvbnRhaW5lciwgcFBhY2tldCk7CiAgICAgfQogCiAgICAgTE1fUmVzZXRDaGlwKHBEZXZpY2UpOwogCiAgICAgLyogUmVzdG9yZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMuICovCiAgICAgTU1fV3JpdGVDb25maWczMihwRGV2aWNlLCBQQ0lfQ0FDSEVfTElORV9TSVpFX1JFRywKLSAgICAgICAgcERldmljZS0+U2F2ZWRDYWNoZUxpbmVSZWcpOworCXBEZXZpY2UtPlNhdmVkQ2FjaGVMaW5lUmVnKTsKICAgICBMTV9SZWdXckluZChwRGV2aWNlLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRF9SRUcsCi0gICAgICAgIChwRGV2aWNlLT5TdWJzeXN0ZW1JZCA8PCAxNikgfCBwRGV2aWNlLT5TdWJzeXN0ZW1WZW5kb3JJZCk7CisJKHBEZXZpY2UtPlN1YnN5c3RlbUlkIDw8IDE2KSB8IHBEZXZpY2UtPlN1YnN5c3RlbVZlbmRvcklkKTsKIAogICAgIC8qIFJlcHJvZ3JhbSB0aGUgTUFDIGFkZHJlc3MuICovCiAgICAgTE1fU2V0TWFjQWRkcmVzcyhwRGV2aWNlLCBwRGV2aWNlLT5Ob2RlQWRkcmVzcyk7CkBAIC0zNzI1LDIwICszNzE0LDIwIEBACiAgICAgLyogV2FpdCBmb3IgYWNjZXNzIHRvIHRoZSBudnJhbSBpbnRlcmZhY2UgYmVmb3JlIHJlc2V0dGluZy4gIFRoaXMgaXMgKi8KICAgICAvKiBhIHdvcmthcm91bmQgdG8gcHJldmVudCBFRVBST00gY29ycnVwdGlvbi4gKi8KICAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpICE9IFQzX0FTSUNfUkVWXzU3MDAgJiYKLSAgICAgICAgVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSAhPSBUM19BU0lDX1JFVl81NzAxKQorCVQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgIT0gVDNfQVNJQ19SRVZfNTcwMSkKICAgICB7Ci0gICAgICAgIC8qIFJlcXVlc3QgYWNjZXNzIHRvIHRoZSBmbGFzaCBpbnRlcmZhY2UuICovCi0gICAgICAgIFJFR19XUihwRGV2aWNlLCBOdnJhbS5Td0FyYiwgU1dfQVJCX1JFUV9TRVQxKTsKKwkvKiBSZXF1ZXN0IGFjY2VzcyB0byB0aGUgZmxhc2ggaW50ZXJmYWNlLiAqLworCVJFR19XUihwRGV2aWNlLCBOdnJhbS5Td0FyYiwgU1dfQVJCX1JFUV9TRVQxKTsKIAotICAgICAgICBmb3IoaiA9IDA7IGogPCAxMDAwMDA7IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBOdnJhbS5Td0FyYik7Ci0gICAgICAgICAgICBpZihWYWx1ZTMyICYgU1dfQVJCX0dOVDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBNTV9XYWl0KDEwKTsKLSAgICAgICAgfQorCWZvcihqID0gMDsgaiA8IDEwMDAwMDsgaisrKQorCXsKKwkgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBOdnJhbS5Td0FyYik7CisJICAgIGlmKFZhbHVlMzIgJiBTV19BUkJfR05UMSkKKwkgICAgeworCQlicmVhazsKKwkgICAgfQorCSAgICBNTV9XYWl0KDEwKTsKKwl9CiAgICAgfQogCiAgICAgLyogR2xvYmFsIHJlc2V0LiAqLwpAQCAtMzc0NywyMiArMzczNiwyMiBAQAogCiAgICAgLyogbWFrZSBzdXJlIHdlIHJlLWVuYWJsZSBpbmRpcmVjdCBhY2Nlc3NlcyAqLwogICAgIE1NX1dyaXRlQ29uZmlnMzIocERldmljZSwgVDNfUENJX01JU0NfSE9TVF9DVFJMX1JFRywKLSAgICAgICAgcERldmljZS0+TWlzY0hvc3RDdHJsKTsKKwlwRGV2aWNlLT5NaXNjSG9zdEN0cmwpOwogCiAgICAgLyogU2V0IE1BWCBQQ0kgcmV0cnkgdG8gemVyby4gKi8KICAgICBWYWx1ZTMyID0gVDNfUENJX1NUQVRFX1BDSV9ST01fRU5BQkxFIHwgVDNfUENJX1NUQVRFX1BDSV9ST01fUkVUUllfRU5BQkxFOwogICAgIGlmIChwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzA0X0EwKQogICAgIHsKLSAgICAgICAgaWYgKCEocERldmljZS0+UGNpU3RhdGUgJiBUM19QQ0lfU1RBVEVfQ09OVkVOVElPTkFMX1BDSV9NT0RFKSkKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiB8PSBUM19QQ0lfU1RBVEVfUkVUUllfU0FNRV9ETUE7Ci0gICAgICAgIH0KKwlpZiAoIShwRGV2aWNlLT5QY2lTdGF0ZSAmIFQzX1BDSV9TVEFURV9DT05WRU5USU9OQUxfUENJX01PREUpKQorCXsKKwkgICAgVmFsdWUzMiB8PSBUM19QQ0lfU1RBVEVfUkVUUllfU0FNRV9ETUE7CisJfQogICAgIH0KICAgICBNTV9Xcml0ZUNvbmZpZzMyKHBEZXZpY2UsIFQzX1BDSV9TVEFURV9SRUcsIFZhbHVlMzIpOwogCiAgICAgLyogUmVzdG9yZSBQQ0kgY29tbWFuZCByZWdpc3Rlci4gKi8KICAgICBNTV9Xcml0ZUNvbmZpZzMyKHBEZXZpY2UsIFBDSV9DT01NQU5EX1JFRywKLSAgICAgICAgcERldmljZS0+UGNpQ29tbWFuZFN0YXR1c1dvcmRzKTsKKwlwRGV2aWNlLT5QY2lDb21tYW5kU3RhdHVzV29yZHMpOwogCiAgICAgLyogRGlzYWJsZSBQQ0ktWCByZWxheGVkIG9yZGVyaW5nIGJpdC4gKi8KICAgICBNTV9SZWFkQ29uZmlnMzIocERldmljZSwgUENJWF9DQVBfUkVHLCAmVmFsdWUzMik7CkBAIC0zNzczLDE1ICszNzYyLDE1IEBACiAgICAgUkVHX1dSKHBEZXZpY2UsIE1lbUFyYml0ZXIuTW9kZSwgVDNfTUVNX0FSQklURVJfTU9ERV9FTkFCTEUpOwogCiAjaWZkZWYgQklHX0VORElBTl9QQ0kgICAgICAvKiBUaGlzIGZyb20gamZkICovCi0gICAgICAgIFZhbHVlMzIgPSBHUkNfTU9ERV9XT1JEX1NXQVBfREFUQXwKLSAgICAgICAgICAgICAgICAgIEdSQ19NT0RFX1dPUkRfU1dBUF9OT05fRlJBTUVfREFUQTsKKwlWYWx1ZTMyID0gR1JDX01PREVfV09SRF9TV0FQX0RBVEF8CisJCSAgR1JDX01PREVfV09SRF9TV0FQX05PTl9GUkFNRV9EQVRBOwogI2Vsc2UKICNpZmRlZiBCSUdfRU5ESUFOX0hPU1QKICAgICAvKiBSZWNvbmZpZ3VyZSB0aGUgbW9kZSByZWdpc3Rlci4gKi8KICAgICBWYWx1ZTMyID0gR1JDX01PREVfQllURV9TV0FQX05PTl9GUkFNRV9EQVRBIHwKLSAgICAgICAgICAgICAgR1JDX01PREVfV09SRF9TV0FQX05PTl9GUkFNRV9EQVRBIHwKLSAgICAgICAgICAgICAgR1JDX01PREVfQllURV9TV0FQX0RBVEEgfAotICAgICAgICAgICAgICBHUkNfTU9ERV9XT1JEX1NXQVBfREFUQTsKKwkgICAgICBHUkNfTU9ERV9XT1JEX1NXQVBfTk9OX0ZSQU1FX0RBVEEgfAorCSAgICAgIEdSQ19NT0RFX0JZVEVfU1dBUF9EQVRBIHwKKwkgICAgICBHUkNfTU9ERV9XT1JEX1NXQVBfREFUQTsKICNlbHNlCiAgICAgLyogUmVjb25maWd1cmUgdGhlIG1vZGUgcmVnaXN0ZXIuICovCiAgICAgVmFsdWUzMiA9IEdSQ19NT0RFX0JZVEVfU1dBUF9OT05fRlJBTUVfREFUQSB8IEdSQ19NT0RFX0JZVEVfU1dBUF9EQVRBOwpAQCAtMzc5MywyMyArMzc4MiwyMyBAQAogICAgIE1FTV9XUl9PRkZTRVQocERldmljZSwgMHgwYjUwLCBUM19NQUdJQ19OVU0pOwogCiAgICAgaWYocERldmljZS0+RW5hYmxlVGJpKSB7Ci0gICAgICAgIHBEZXZpY2UtPk1hY01vZGUgPSBNQUNfTU9ERV9QT1JUX01PREVfVEJJOwotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5Nb2RlLCBNQUNfTU9ERV9QT1JUX01PREVfVEJJKTsKKwlwRGV2aWNlLT5NYWNNb2RlID0gTUFDX01PREVfUE9SVF9NT0RFX1RCSTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5Nb2RlLCBNQUNfTU9ERV9QT1JUX01PREVfVEJJKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1vZGUsIDApOworCVJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1vZGUsIDApOwogICAgIH0KIAogICAgIC8qIFdhaXQgZm9yIHRoZSBmaXJtd2FyZSB0byBmaW5pc2ggaW5pdGlhbGl6YXRpb24uICovCiAgICAgZm9yKGogPSAwOyBqIDwgMTAwMDAwOyBqKyspCiAgICAgewotICAgICAgICBNTV9XYWl0KDEwKTsKKwlNTV9XYWl0KDEwKTsKIAotICAgICAgICBWYWx1ZTMyID0gTUVNX1JEX09GRlNFVChwRGV2aWNlLCAweDBiNTApOwotICAgICAgICBpZihWYWx1ZTMyID09IH5UM19NQUdJQ19OVU0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJVmFsdWUzMiA9IE1FTV9SRF9PRkZTRVQocERldmljZSwgMHgwYjUwKTsKKwlpZihWYWx1ZTMyID09IH5UM19NQUdJQ19OVU0pCisJeworCSAgICBicmVhazsKKwl9CiAgICAgfQogICAgIHJldHVybiBMTV9TVEFUVVNfU1VDQ0VTUzsKIH0KQEAgLTM4MzcsMjUgKzM4MjYsMjUgQEAKICAgICAvKiBkZXNjcmlwdG9ycyB0aGF0IGFyZSBiZXR3ZWVuIFN3Q29uSWR4IGFuZCBId0NvbklkeC4gKi8KICAgICB3aGlsZShTd0NvbklkeCAhPSBId0NvbklkeCkKICAgICB7Ci0gICAgICAgIC8qIEdldCB0aGUgcGFja2V0IHRoYXQgd2FzIHNlbnQgZnJvbSB0aGUgVHhQYWNrZXRBY3RpdmVRLiAqLwotICAgICAgICBwUGFja2V0ID0gKFBMTV9QQUNLRVQpIFFRX1BvcEhlYWQoCi0gICAgICAgICAgICAmcERldmljZS0+VHhQYWNrZXRBY3RpdmVRLkNvbnRhaW5lcik7CisJLyogR2V0IHRoZSBwYWNrZXQgdGhhdCB3YXMgc2VudCBmcm9tIHRoZSBUeFBhY2tldEFjdGl2ZVEuICovCisJcFBhY2tldCA9IChQTE1fUEFDS0VUKSBRUV9Qb3BIZWFkKAorCSAgICAmcERldmljZS0+VHhQYWNrZXRBY3RpdmVRLkNvbnRhaW5lcik7CiAKLSAgICAgICAgLyogU2V0IHRoZSByZXR1cm4gc3RhdHVzLiAqLwotICAgICAgICBwUGFja2V0LT5QYWNrZXRTdGF0dXMgPSBMTV9TVEFUVVNfU1VDQ0VTUzsKKwkvKiBTZXQgdGhlIHJldHVybiBzdGF0dXMuICovCisJcFBhY2tldC0+UGFja2V0U3RhdHVzID0gTE1fU1RBVFVTX1NVQ0NFU1M7CiAKLSAgICAgICAgLyogUHV0IHRoZSBwYWNrZXQgaW4gdGhlIFR4UGFja2V0WG1pdHRlZFEgZm9yIGluZGljYXRpb24gbGF0ZXIuICovCi0gICAgICAgIFFRX1B1c2hUYWlsKCZwRGV2aWNlLT5UeFBhY2tldFhtaXR0ZWRRLkNvbnRhaW5lciwgcFBhY2tldCk7CisJLyogUHV0IHRoZSBwYWNrZXQgaW4gdGhlIFR4UGFja2V0WG1pdHRlZFEgZm9yIGluZGljYXRpb24gbGF0ZXIuICovCisJUVFfUHVzaFRhaWwoJnBEZXZpY2UtPlR4UGFja2V0WG1pdHRlZFEuQ29udGFpbmVyLCBwUGFja2V0KTsKIAotICAgICAgICAvKiBNb3ZlIHRvIHRoZSBuZXh0IHBhY2tldCdzIEJELiAqLwotICAgICAgICBTd0NvbklkeCA9IChTd0NvbklkeCArIHBQYWNrZXQtPnUuVHguRnJhZ0NvdW50KSAmCi0gICAgICAgICAgICBUM19TRU5EX1JDQl9FTlRSWV9DT1VOVF9NQVNLOworCS8qIE1vdmUgdG8gdGhlIG5leHQgcGFja2V0J3MgQkQuICovCisJU3dDb25JZHggPSAoU3dDb25JZHggKyBwUGFja2V0LT51LlR4LkZyYWdDb3VudCkgJgorCSAgICBUM19TRU5EX1JDQl9FTlRSWV9DT1VOVF9NQVNLOwogCi0gICAgICAgIC8qIFVwZGF0ZSB0aGUgbnVtYmVyIG9mIHVudXNlZCBCRHMuICovCi0gICAgICAgIGF0b21pY19hZGQocFBhY2tldC0+dS5UeC5GcmFnQ291bnQsICZwRGV2aWNlLT5TZW5kQmRMZWZ0KTsKKwkvKiBVcGRhdGUgdGhlIG51bWJlciBvZiB1bnVzZWQgQkRzLiAqLworCWF0b21pY19hZGQocFBhY2tldC0+dS5UeC5GcmFnQ291bnQsICZwRGV2aWNlLT5TZW5kQmRMZWZ0KTsKIAotICAgICAgICAvKiBHZXQgdGhlIG5ldyB1cGRhdGVkIEh3Q29uSWR4LiAqLwotICAgICAgICBId0NvbklkeCA9IHBEZXZpY2UtPnBTdGF0dXNCbGtWaXJ0LT5JZHhbMF0uU2VuZENvbklkeDsKKwkvKiBHZXQgdGhlIG5ldyB1cGRhdGVkIEh3Q29uSWR4LiAqLworCUh3Q29uSWR4ID0gcERldmljZS0+cFN0YXR1c0Jsa1ZpcnQtPklkeFswXS5TZW5kQ29uSWR4OwogICAgIH0gLyogd2hpbGUgKi8KIAogICAgIC8qIFNhdmUgdGhlIG5ldyBTd0NvbklkeC4gKi8KQEAgLTM4NjQsNyArMzg1Myw2IEBACiB9IC8qIExNX1NlcnZpY2VUeEludGVycnVwdCAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzg4NCw4OSArMzg3Miw4OSBAQAogICAgIFN3UmN2UmV0Q29uSWR4ID0gcERldmljZS0+UmN2UmV0Q29uSWR4OwogICAgIHdoaWxlKFN3UmN2UmV0Q29uSWR4ICE9IEh3UmN2UmV0UHJvZElkeCkKICAgICB7Ci0gICAgICAgIHBSY3ZCZCA9ICZwRGV2aWNlLT5wUmN2UmV0QmRWaXJ0W1N3UmN2UmV0Q29uSWR4XTsKKwlwUmN2QmQgPSAmcERldmljZS0+cFJjdlJldEJkVmlydFtTd1JjdlJldENvbklkeF07CiAKLSAgICAgICAgLyogR2V0IHRoZSByZWNlaXZlZCBwYWNrZXQgZGVzY3JpcHRvci4gKi8KLSAgICAgICAgcFBhY2tldCA9IChQTE1fUEFDS0VUKSAoTU1fVUlOVF9QVFIocERldmljZS0+cFBhY2tldERlc2NCYXNlKSArCi0gICAgICAgICAgICBNTV9VSU5UX1BUUihwUmN2QmQtPk9wYXF1ZSkpOworCS8qIEdldCB0aGUgcmVjZWl2ZWQgcGFja2V0IGRlc2NyaXB0b3IuICovCisJcFBhY2tldCA9IChQTE1fUEFDS0VUKSAoTU1fVUlOVF9QVFIocERldmljZS0+cFBhY2tldERlc2NCYXNlKSArCisJICAgIE1NX1VJTlRfUFRSKHBSY3ZCZC0+T3BhcXVlKSk7CiAKLSAgICAgICAgLyogQ2hlY2sgdGhlIGVycm9yIGZsYWcuICovCi0gICAgICAgIGlmKHBSY3ZCZC0+RXJyb3JGbGFnICYmCi0gICAgICAgICAgICBwUmN2QmQtPkVycm9yRmxhZyAhPSBSQ1ZfQkRfRVJSX09ERF9OSUJCTEVEX1JDVkRfTUlJKQotICAgICAgICB7Ci0gICAgICAgICAgICBwUGFja2V0LT5QYWNrZXRTdGF0dXMgPSBMTV9TVEFUVVNfRkFJTFVSRTsKKwkvKiBDaGVjayB0aGUgZXJyb3IgZmxhZy4gKi8KKwlpZihwUmN2QmQtPkVycm9yRmxhZyAmJgorCSAgICBwUmN2QmQtPkVycm9yRmxhZyAhPSBSQ1ZfQkRfRVJSX09ERF9OSUJCTEVEX1JDVkRfTUlJKQorCXsKKwkgICAgcFBhY2tldC0+UGFja2V0U3RhdHVzID0gTE1fU1RBVFVTX0ZBSUxVUkU7CiAKLSAgICAgICAgICAgIHBEZXZpY2UtPlJ4Q291bnRlcnMuUnhQYWNrZXRFcnJDbnQrKzsKKwkgICAgcERldmljZS0+UnhDb3VudGVycy5SeFBhY2tldEVyckNudCsrOwogCi0gICAgICAgICAgICBpZihwUmN2QmQtPkVycm9yRmxhZyAmIFJDVl9CRF9FUlJfQkFEX0NSQykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5SeENvdW50ZXJzLlJ4RXJyQ3JjQ250Kys7Ci0gICAgICAgICAgICB9CisJICAgIGlmKHBSY3ZCZC0+RXJyb3JGbGFnICYgUkNWX0JEX0VSUl9CQURfQ1JDKQorCSAgICB7CisJCXBEZXZpY2UtPlJ4Q291bnRlcnMuUnhFcnJDcmNDbnQrKzsKKwkgICAgfQogCi0gICAgICAgICAgICBpZihwUmN2QmQtPkVycm9yRmxhZyAmIFJDVl9CRF9FUlJfQ09MTF9ERVRFQ1QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+UnhDb3VudGVycy5SeEVyckNvbGxDbnQrKzsKLSAgICAgICAgICAgIH0KKwkgICAgaWYocFJjdkJkLT5FcnJvckZsYWcgJiBSQ1ZfQkRfRVJSX0NPTExfREVURUNUKQorCSAgICB7CisJCXBEZXZpY2UtPlJ4Q291bnRlcnMuUnhFcnJDb2xsQ250Kys7CisJICAgIH0KIAotICAgICAgICAgICAgaWYocFJjdkJkLT5FcnJvckZsYWcgJiBSQ1ZfQkRfRVJSX0xJTktfTE9TVF9EVVJJTkdfUEtUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPlJ4Q291bnRlcnMuUnhFcnJMaW5rTG9zdENudCsrOwotICAgICAgICAgICAgfQorCSAgICBpZihwUmN2QmQtPkVycm9yRmxhZyAmIFJDVl9CRF9FUlJfTElOS19MT1NUX0RVUklOR19QS1QpCisJICAgIHsKKwkJcERldmljZS0+UnhDb3VudGVycy5SeEVyckxpbmtMb3N0Q250Kys7CisJICAgIH0KIAotICAgICAgICAgICAgaWYocFJjdkJkLT5FcnJvckZsYWcgJiBSQ1ZfQkRfRVJSX1BIWV9ERUNPREVfRVJSKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPlJ4Q291bnRlcnMuUnhFcnJQaHlEZWNvZGVDbnQrKzsKLSAgICAgICAgICAgIH0KKwkgICAgaWYocFJjdkJkLT5FcnJvckZsYWcgJiBSQ1ZfQkRfRVJSX1BIWV9ERUNPREVfRVJSKQorCSAgICB7CisJCXBEZXZpY2UtPlJ4Q291bnRlcnMuUnhFcnJQaHlEZWNvZGVDbnQrKzsKKwkgICAgfQogCi0gICAgICAgICAgICBpZihwUmN2QmQtPkVycm9yRmxhZyAmIFJDVl9CRF9FUlJfT0REX05JQkJMRURfUkNWRF9NSUkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+UnhDb3VudGVycy5SeEVyck9kZE5pYmJsZUNudCsrOwotICAgICAgICAgICAgfQorCSAgICBpZihwUmN2QmQtPkVycm9yRmxhZyAmIFJDVl9CRF9FUlJfT0REX05JQkJMRURfUkNWRF9NSUkpCisJICAgIHsKKwkJcERldmljZS0+UnhDb3VudGVycy5SeEVyck9kZE5pYmJsZUNudCsrOworCSAgICB9CiAKLSAgICAgICAgICAgIGlmKHBSY3ZCZC0+RXJyb3JGbGFnICYgUkNWX0JEX0VSUl9NQUNfQUJPUlQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+UnhDb3VudGVycy5SeEVyck1hY0Fib3J0Q250Kys7Ci0gICAgICAgICAgICB9CisJICAgIGlmKHBSY3ZCZC0+RXJyb3JGbGFnICYgUkNWX0JEX0VSUl9NQUNfQUJPUlQpCisJICAgIHsKKwkJcERldmljZS0+UnhDb3VudGVycy5SeEVyck1hY0Fib3J0Q250Kys7CisJICAgIH0KIAotICAgICAgICAgICAgaWYocFJjdkJkLT5FcnJvckZsYWcgJiBSQ1ZfQkRfRVJSX0xFTl9MVF82NCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5SeENvdW50ZXJzLlJ4RXJyU2hvcnRQYWNrZXRDbnQrKzsKLSAgICAgICAgICAgIH0KKwkgICAgaWYocFJjdkJkLT5FcnJvckZsYWcgJiBSQ1ZfQkRfRVJSX0xFTl9MVF82NCkKKwkgICAgeworCQlwRGV2aWNlLT5SeENvdW50ZXJzLlJ4RXJyU2hvcnRQYWNrZXRDbnQrKzsKKwkgICAgfQogCi0gICAgICAgICAgICBpZihwUmN2QmQtPkVycm9yRmxhZyAmIFJDVl9CRF9FUlJfVFJVTkNfTk9fUkVTT1VSQ0VTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPlJ4Q291bnRlcnMuUnhFcnJOb1Jlc291cmNlQ250Kys7Ci0gICAgICAgICAgICB9CisJICAgIGlmKHBSY3ZCZC0+RXJyb3JGbGFnICYgUkNWX0JEX0VSUl9UUlVOQ19OT19SRVNPVVJDRVMpCisJICAgIHsKKwkJcERldmljZS0+UnhDb3VudGVycy5SeEVyck5vUmVzb3VyY2VDbnQrKzsKKwkgICAgfQogCi0gICAgICAgICAgICBpZihwUmN2QmQtPkVycm9yRmxhZyAmIFJDVl9CRF9FUlJfR0lBTlRfRlJBTUVfUkNWRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5SeENvdW50ZXJzLlJ4RXJyTGFyZ2VQYWNrZXRDbnQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBQYWNrZXQtPlBhY2tldFN0YXR1cyA9IExNX1NUQVRVU19TVUNDRVNTOwotICAgICAgICAgICAgcFBhY2tldC0+UGFja2V0U2l6ZSA9IHBSY3ZCZC0+TGVuIC0gNDsKKwkgICAgaWYocFJjdkJkLT5FcnJvckZsYWcgJiBSQ1ZfQkRfRVJSX0dJQU5UX0ZSQU1FX1JDVkQpCisJICAgIHsKKwkJcERldmljZS0+UnhDb3VudGVycy5SeEVyckxhcmdlUGFja2V0Q250Kys7CisJICAgIH0KKwl9CisJZWxzZQorCXsKKwkgICAgcFBhY2tldC0+UGFja2V0U3RhdHVzID0gTE1fU1RBVFVTX1NVQ0NFU1M7CisJICAgIHBQYWNrZXQtPlBhY2tldFNpemUgPSBwUmN2QmQtPkxlbiAtIDQ7CiAKLSAgICAgICAgICAgIHBQYWNrZXQtPkZsYWdzID0gcFJjdkJkLT5GbGFnczsKLSAgICAgICAgICAgIGlmKHBSY3ZCZC0+RmxhZ3MgJiBSQ1ZfQkRfRkxBR19WTEFOX1RBRykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwUGFja2V0LT5WbGFuVGFnID0gcFJjdkJkLT5WbGFuVGFnOwotICAgICAgICAgICAgfQorCSAgICBwUGFja2V0LT5GbGFncyA9IHBSY3ZCZC0+RmxhZ3M7CisJICAgIGlmKHBSY3ZCZC0+RmxhZ3MgJiBSQ1ZfQkRfRkxBR19WTEFOX1RBRykKKwkgICAgeworCQlwUGFja2V0LT5WbGFuVGFnID0gcFJjdkJkLT5WbGFuVGFnOworCSAgICB9CiAKLSAgICAgICAgICAgIHBQYWNrZXQtPnUuUnguVGNwVWRwQ2hlY2tzdW0gPSBwUmN2QmQtPlRjcFVkcENrc3VtOwotICAgICAgICB9CisJICAgIHBQYWNrZXQtPnUuUnguVGNwVWRwQ2hlY2tzdW0gPSBwUmN2QmQtPlRjcFVkcENrc3VtOworCX0KIAotICAgICAgICAvKiBQdXQgdGhlIHBhY2tldCBkZXNjcmlwdG9yIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIHBhY2tldCAqLwotICAgICAgICAvKiBidWZmZXIgaW4gdGhlIFJ4UGFja2V0UmVjZWl2ZWRRIGZvciBpbmRpY2F0aW9uIGxhdGVyLiAqLwotICAgICAgICBRUV9QdXNoVGFpbCgmcERldmljZS0+UnhQYWNrZXRSZWNlaXZlZFEuQ29udGFpbmVyLCBwUGFja2V0KTsKKwkvKiBQdXQgdGhlIHBhY2tldCBkZXNjcmlwdG9yIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIHBhY2tldCAqLworCS8qIGJ1ZmZlciBpbiB0aGUgUnhQYWNrZXRSZWNlaXZlZFEgZm9yIGluZGljYXRpb24gbGF0ZXIuICovCisJUVFfUHVzaFRhaWwoJnBEZXZpY2UtPlJ4UGFja2V0UmVjZWl2ZWRRLkNvbnRhaW5lciwgcFBhY2tldCk7CiAKLSAgICAgICAgLyogR28gdG8gdGhlIG5leHQgYnVmZmVyIGRlc2NyaXB0b3IuICovCi0gICAgICAgIFN3UmN2UmV0Q29uSWR4ID0gKFN3UmN2UmV0Q29uSWR4ICsgMSkgJgotICAgICAgICAgICAgVDNfUkNWX1JFVFVSTl9SQ0JfRU5UUllfQ09VTlRfTUFTSzsKKwkvKiBHbyB0byB0aGUgbmV4dCBidWZmZXIgZGVzY3JpcHRvci4gKi8KKwlTd1JjdlJldENvbklkeCA9IChTd1JjdlJldENvbklkeCArIDEpICYKKwkgICAgVDNfUkNWX1JFVFVSTl9SQ0JfRU5UUllfQ09VTlRfTUFTSzsKIAotICAgICAgICAvKiBHZXQgdGhlIHVwZGF0ZWQgSHdSY3ZSZXRQcm9kSWR4LiAqLwotICAgICAgICBId1JjdlJldFByb2RJZHggPSBwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+SWR4WzBdLlJjdlByb2RJZHg7CisJLyogR2V0IHRoZSB1cGRhdGVkIEh3UmN2UmV0UHJvZElkeC4gKi8KKwlId1JjdlJldFByb2RJZHggPSBwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+SWR4WzBdLlJjdlByb2RJZHg7CiAgICAgfSAvKiB3aGlsZSAqLwogCiAgICAgcERldmljZS0+UmN2UmV0Q29uSWR4ID0gU3dSY3ZSZXRDb25JZHg7CkBAIC0zOTc2LDcgKzM5NjQsNiBAQAogfSAvKiBMTV9TZXJ2aWNlUnhJbnRlcnJ1cHQgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhpcyBpcyB0aGUgaW50ZXJydXB0IGV2ZW50IGhhbmRsZXIgcm91dGluZS4gSXQgYWNrbm93bGVkZ2VzIGFsbCAgICAgICAgKi8KQEAgLTM5OTUsMzcgKzM5ODIsMzcgQEAKICAgICAvKiBTZXR1cCB0aGUgcGh5IGNoaXAgd2hlbmV2ZXIgdGhlIGxpbmsgc3RhdHVzIGNoYW5nZXMuICovCiAgICAgaWYocERldmljZS0+TGlua0NobmdNb2RlID09IFQzX0xJTktfQ0hOR19NT0RFX1VTRV9TVEFUVVNfUkVHKQogICAgIHsKLSAgICAgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLlN0YXR1cyk7Ci0gICAgICAgIGlmKHBEZXZpY2UtPlBoeUludE1vZGUgPT0gVDNfUEhZX0lOVF9NT0RFX01JX0lOVEVSUlVQVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKFZhbHVlMzIgJiBNQUNfU1RBVFVTX01JX0lOVEVSUlVQVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTZXJ2aWNlUGh5SW50ID0gVFJVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKFZhbHVlMzIgJiBNQUNfU1RBVFVTX0xJTktfU1RBVEVfQ0hBTkdFRCkKLSAgICAgICAgewotICAgICAgICAgICAgU2VydmljZVBoeUludCA9IFRSVUU7Ci0gICAgICAgIH0KKwlWYWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIE1hY0N0cmwuU3RhdHVzKTsKKwlpZihwRGV2aWNlLT5QaHlJbnRNb2RlID09IFQzX1BIWV9JTlRfTU9ERV9NSV9JTlRFUlJVUFQpCisJeworCSAgICBpZiAoVmFsdWUzMiAmIE1BQ19TVEFUVVNfTUlfSU5URVJSVVBUKQorCSAgICB7CisJCVNlcnZpY2VQaHlJbnQgPSBUUlVFOworCSAgICB9CisJfQorCWVsc2UgaWYoVmFsdWUzMiAmIE1BQ19TVEFUVVNfTElOS19TVEFURV9DSEFOR0VEKQorCXsKKwkgICAgU2VydmljZVBoeUludCA9IFRSVUU7CisJfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZihwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+U3RhdHVzICYgU1RBVFVTX0JMT0NLX0xJTktfQ0hBTkdFRF9TVEFUVVMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBEZXZpY2UtPnBTdGF0dXNCbGtWaXJ0LT5TdGF0dXMgPSBTVEFUVVNfQkxPQ0tfVVBEQVRFRCB8Ci0gICAgICAgICAgICAgICAgKHBEZXZpY2UtPnBTdGF0dXNCbGtWaXJ0LT5TdGF0dXMgJiB+U1RBVFVTX0JMT0NLX0xJTktfQ0hBTkdFRF9TVEFUVVMpOwotICAgICAgICAgICAgU2VydmljZVBoeUludCA9IFRSVUU7Ci0gICAgICAgIH0KKwlpZihwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+U3RhdHVzICYgU1RBVFVTX0JMT0NLX0xJTktfQ0hBTkdFRF9TVEFUVVMpCisJeworCSAgICBwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+U3RhdHVzID0gU1RBVFVTX0JMT0NLX1VQREFURUQgfAorCQkocERldmljZS0+cFN0YXR1c0Jsa1ZpcnQtPlN0YXR1cyAmIH5TVEFUVVNfQkxPQ0tfTElOS19DSEFOR0VEX1NUQVRVUyk7CisJICAgIFNlcnZpY2VQaHlJbnQgPSBUUlVFOworCX0KICAgICB9CiAjaWYgSU5DTFVERV9UQklfU1VQUE9SVAogICAgIGlmIChwRGV2aWNlLT5JZ25vcmVUYmlMaW5rQ2hhbmdlID09IFRSVUUpCiAgICAgewotICAgICAgICBTZXJ2aWNlUGh5SW50ID0gRkFMU0U7CisJU2VydmljZVBoeUludCA9IEZBTFNFOwogICAgIH0KICNlbmRpZgogICAgIGlmIChTZXJ2aWNlUGh5SW50ID09IFRSVUUpCiAgICAgewotICAgICAgICBMTV9TZXR1cFBoeShwRGV2aWNlKTsKKwlMTV9TZXR1cFBoeShwRGV2aWNlKTsKICAgICB9CiAKICAgICAvKiBTZXJ2aWNlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGludGVycnVwdHMuICovCkBAIC00MDM1LDIyICs0MDIyLDIxIEBACiAgICAgLyogTm8gc3BpbmxvY2sgZm9yIHRoaXMgcXVldWUgc2luY2UgdGhpcyByb3V0aW5lIGlzIHNlcmlhbGl6ZWQuICovCiAgICAgaWYoIVFRX0VtcHR5KCZwRGV2aWNlLT5SeFBhY2tldFJlY2VpdmVkUS5Db250YWluZXIpKQogICAgIHsKLSAgICAgICAgLyogSW5kaWNhdGUgcmVjZWl2ZSBwYWNrZXRzLiAqLwotICAgICAgICBNTV9JbmRpY2F0ZVJ4UGFja2V0cyhwRGV2aWNlKTsKKwkvKiBJbmRpY2F0ZSByZWNlaXZlIHBhY2tldHMuICovCisJTU1fSW5kaWNhdGVSeFBhY2tldHMocERldmljZSk7CiAJLyogICAgICAgTE1fUXVldWVSeFBhY2tldHMocERldmljZSk7ICovCiAgICAgfQogCiAgICAgLyogTm8gc3BpbmxvY2sgZm9yIHRoaXMgcXVldWUgc2luY2UgdGhpcyByb3V0aW5lIGlzIHNlcmlhbGl6ZWQuICovCiAgICAgaWYoIVFRX0VtcHR5KCZwRGV2aWNlLT5UeFBhY2tldFhtaXR0ZWRRLkNvbnRhaW5lcikpCiAgICAgewotICAgICAgICBNTV9JbmRpY2F0ZVR4UGFja2V0cyhwRGV2aWNlKTsKKwlNTV9JbmRpY2F0ZVR4UGFja2V0cyhwRGV2aWNlKTsKICAgICB9CiAKICAgICByZXR1cm4gTE1fU1RBVFVTX1NVQ0NFU1M7CiB9IC8qIExNX1NlcnZpY2VJbnRlcnJ1cHRzICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00MDY2LDIwICs0MDUyLDIwIEBACiAgICAgcEVudHJ5ID0gcERldmljZS0+TWNUYWJsZVswXTsKICAgICBmb3IoaiA9IDA7IGogPCBwRGV2aWNlLT5NY0VudHJ5Q291bnQ7IGorKykKICAgICB7Ci0gICAgICAgIGlmKElTX0VUSF9BRERSRVNTX0VRVUFMKHBFbnRyeSwgcE1jQWRkcmVzcykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIEZvdW5kIGEgbWF0Y2gsIGluY3JlbWVudCB0aGUgaW5zdGFuY2UgY291bnQuICovCi0gICAgICAgICAgICBwRW50cnlbTE1fTUNfSU5TVEFOQ0VfQ09VTlRfSU5ERVhdICs9IDE7CisJaWYoSVNfRVRIX0FERFJFU1NfRVFVQUwocEVudHJ5LCBwTWNBZGRyZXNzKSkKKwl7CisJICAgIC8qIEZvdW5kIGEgbWF0Y2gsIGluY3JlbWVudCB0aGUgaW5zdGFuY2UgY291bnQuICovCisJICAgIHBFbnRyeVtMTV9NQ19JTlNUQU5DRV9DT1VOVF9JTkRFWF0gKz0gMTsKIAotICAgICAgICAgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOwotICAgICAgICB9CisJICAgIHJldHVybiBMTV9TVEFUVVNfU1VDQ0VTUzsKKwl9CiAKLSAgICAgICAgcEVudHJ5ICs9IExNX01DX0VOVFJZX1NJWkU7CisJcEVudHJ5ICs9IExNX01DX0VOVFJZX1NJWkU7CiAgICAgfQogCiAgICAgaWYocERldmljZS0+TWNFbnRyeUNvdW50ID49IExNX01BWF9NQ19UQUJMRV9TSVpFKQogICAgIHsKLSAgICAgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOworCXJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKICAgICB9CiAKICAgICBwRW50cnkgPSBwRGV2aWNlLT5NY1RhYmxlW3BEZXZpY2UtPk1jRW50cnlDb3VudF07CkBAIC00MDk1LDcgKzQwODEsNiBAQAogfSAvKiBMTV9NdWx0aWNhc3RBZGQgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQxMTEsNDMgKzQwOTYsNDIgQEAKICAgICBwRW50cnkgPSBwRGV2aWNlLT5NY1RhYmxlWzBdOwogICAgIGZvcihqID0gMDsgaiA8IHBEZXZpY2UtPk1jRW50cnlDb3VudDsgaisrKQogICAgIHsKLSAgICAgICAgaWYoSVNfRVRIX0FERFJFU1NfRVFVQUwocEVudHJ5LCBwTWNBZGRyZXNzKSkKLSAgICAgICAgewotICAgICAgICAgICAgLyogRm91bmQgYSBtYXRjaCwgZGVjcmVtZW50IHRoZSBpbnN0YW5jZSBjb3VudC4gKi8KLSAgICAgICAgICAgIHBFbnRyeVtMTV9NQ19JTlNUQU5DRV9DT1VOVF9JTkRFWF0gLT0gMTsKKwlpZihJU19FVEhfQUREUkVTU19FUVVBTChwRW50cnksIHBNY0FkZHJlc3MpKQorCXsKKwkgICAgLyogRm91bmQgYSBtYXRjaCwgZGVjcmVtZW50IHRoZSBpbnN0YW5jZSBjb3VudC4gKi8KKwkgICAgcEVudHJ5W0xNX01DX0lOU1RBTkNFX0NPVU5UX0lOREVYXSAtPSAxOwogCi0gICAgICAgICAgICAvKiBObyBtb3JlIGluc3RhbmNlIGxlZnQsIHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSB0YWJsZS4gKi8KLSAgICAgICAgICAgIC8qIE1vdmUgdGhlIGxhc3QgZW50cnkgaW4gdGhlIHRhYmxlIHRvIHRoZSBkZWxldGUgc2xvdC4gKi8KLSAgICAgICAgICAgIGlmKHBFbnRyeVtMTV9NQ19JTlNUQU5DRV9DT1VOVF9JTkRFWF0gPT0gMCAmJgotICAgICAgICAgICAgICAgIHBEZXZpY2UtPk1jRW50cnlDb3VudCA+IDEpCi0gICAgICAgICAgICB7CisJICAgIC8qIE5vIG1vcmUgaW5zdGFuY2UgbGVmdCwgcmVtb3ZlIHRoZSBhZGRyZXNzIGZyb20gdGhlIHRhYmxlLiAqLworCSAgICAvKiBNb3ZlIHRoZSBsYXN0IGVudHJ5IGluIHRoZSB0YWJsZSB0byB0aGUgZGVsZXRlIHNsb3QuICovCisJICAgIGlmKHBFbnRyeVtMTV9NQ19JTlNUQU5DRV9DT1VOVF9JTkRFWF0gPT0gMCAmJgorCQlwRGV2aWNlLT5NY0VudHJ5Q291bnQgPiAxKQorCSAgICB7CiAKLSAgICAgICAgICAgICAgICBDT1BZX0VUSF9BRERSRVNTKAotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5NY1RhYmxlW3BEZXZpY2UtPk1jRW50cnlDb3VudC0xXSwgcEVudHJ5KTsKLSAgICAgICAgICAgICAgICBwRW50cnlbTE1fTUNfSU5TVEFOQ0VfQ09VTlRfSU5ERVhdID0KLSAgICAgICAgICAgICAgICAgICAgcERldmljZS0+TWNUYWJsZVtwRGV2aWNlLT5NY0VudHJ5Q291bnQtMV0KLSAgICAgICAgICAgICAgICAgICAgW0xNX01DX0lOU1RBTkNFX0NPVU5UX0lOREVYXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBEZXZpY2UtPk1jRW50cnlDb3VudC0tOworCQlDT1BZX0VUSF9BRERSRVNTKAorCQkgICAgcERldmljZS0+TWNUYWJsZVtwRGV2aWNlLT5NY0VudHJ5Q291bnQtMV0sIHBFbnRyeSk7CisJCXBFbnRyeVtMTV9NQ19JTlNUQU5DRV9DT1VOVF9JTkRFWF0gPQorCQkgICAgcERldmljZS0+TWNUYWJsZVtwRGV2aWNlLT5NY0VudHJ5Q291bnQtMV0KKwkJICAgIFtMTV9NQ19JTlNUQU5DRV9DT1VOVF9JTkRFWF07CisJICAgIH0KKwkgICAgcERldmljZS0+TWNFbnRyeUNvdW50LS07CiAKLSAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgcmVjZWl2ZSBtYXNrIGlmIHRoZSB0YWJsZSBpcyBlbXB0eS4gKi8KLSAgICAgICAgICAgIGlmKHBEZXZpY2UtPk1jRW50cnlDb3VudCA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExNX1NldFJlY2VpdmVNYXNrKHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPlJlY2VpdmVNYXNrICYgfkxNX0FDQ0VQVF9NVUxUSUNBU1QpOwotICAgICAgICAgICAgfQorCSAgICAvKiBVcGRhdGUgdGhlIHJlY2VpdmUgbWFzayBpZiB0aGUgdGFibGUgaXMgZW1wdHkuICovCisJICAgIGlmKHBEZXZpY2UtPk1jRW50cnlDb3VudCA9PSAwKQorCSAgICB7CisJCUxNX1NldFJlY2VpdmVNYXNrKHBEZXZpY2UsCisJCSAgICBwRGV2aWNlLT5SZWNlaXZlTWFzayAmIH5MTV9BQ0NFUFRfTVVMVElDQVNUKTsKKwkgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gTE1fU1RBVFVTX1NVQ0NFU1M7Ci0gICAgICAgIH0KKwkgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOworCX0KIAotICAgICAgICBwRW50cnkgKz0gTE1fTUNfRU5UUllfU0laRTsKKwlwRW50cnkgKz0gTE1fTUNfRU5UUllfU0laRTsKICAgICB9CiAKICAgICByZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7CiB9IC8qIExNX011bHRpY2FzdERlbCAqLwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDE2NCw3ICs0MTQ4LDYgQEAKIH0gLyogTE1fTXVsdGljYXN0Q2xlYXIgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQxNzksMTEgKzQxNjIsMTEgQEAKIAogICAgIGZvcihqID0gMDsgaiA8IDQ7IGorKykKICAgICB7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1hY0FkZHJbal0uSGlnaCwKLSAgICAgICAgICAgIChwTWFjQWRkcmVzc1swXSA8PCA4KSB8IHBNYWNBZGRyZXNzWzFdKTsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTWFjQWRkcltqXS5Mb3csCi0gICAgICAgICAgICAocE1hY0FkZHJlc3NbMl0gPDwgMjQpIHwgKHBNYWNBZGRyZXNzWzNdIDw8IDE2KSB8Ci0gICAgICAgICAgICAocE1hY0FkZHJlc3NbNF0gPDwgOCkgfCBwTWFjQWRkcmVzc1s1XSk7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTWFjQWRkcltqXS5IaWdoLAorCSAgICAocE1hY0FkZHJlc3NbMF0gPDwgOCkgfCBwTWFjQWRkcmVzc1sxXSk7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTWFjQWRkcltqXS5Mb3csCisJICAgIChwTWFjQWRkcmVzc1syXSA8PCAyNCkgfCAocE1hY0FkZHJlc3NbM10gPDwgMTYpIHwKKwkgICAgKHBNYWNBZGRyZXNzWzRdIDw8IDgpIHwgcE1hY0FkZHJlc3NbNV0pOwogICAgIH0KIAogICAgIHJldHVybiBMTV9TVEFUVVNfU1VDQ0VTUzsKQEAgLTQyMTAsNzggKzQxOTMsNzggQEAKIAogICAgIC8qIGRldGVybWluZSBtZWRpYSB0eXBlICovCiAgICAgc3dpdGNoKFJlcXVlc3RlZE1lZGlhVHlwZSkgewotICAgICAgICBjYXNlIExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX0JOQzoKLSAgICAgICAgICAgICpwTWVkaWFUeXBlID0gTE1fTUVESUFfVFlQRV9CTkM7Ci0gICAgICAgICAgICAqcExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTBNQlBTOwotICAgICAgICAgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfSEFMRjsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfQk5DOgorCSAgICAqcE1lZGlhVHlwZSA9IExNX01FRElBX1RZUEVfQk5DOworCSAgICAqcExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTBNQlBTOworCSAgICAqcER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9IQUxGOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX1VUUF9BVVRPOgotICAgICAgICAgICAgKnBNZWRpYVR5cGUgPSBMTV9NRURJQV9UWVBFX1VUUDsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfVVRQX0FVVE86CisJICAgICpwTWVkaWFUeXBlID0gTE1fTUVESUFfVFlQRV9VVFA7CisJICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfVVRQXzEwTUJQUzoKLSAgICAgICAgICAgICpwTWVkaWFUeXBlID0gTE1fTUVESUFfVFlQRV9VVFA7Ci0gICAgICAgICAgICAqcExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTBNQlBTOwotICAgICAgICAgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfSEFMRjsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfVVRQXzEwTUJQUzoKKwkgICAgKnBNZWRpYVR5cGUgPSBMTV9NRURJQV9UWVBFX1VUUDsKKwkgICAgKnBMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwTUJQUzsKKwkgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfSEFMRjsKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBMTV9SRVFVRVNURURfTUVESUFfVFlQRV9VVFBfMTBNQlBTX0ZVTExfRFVQTEVYOgotICAgICAgICAgICAgKnBNZWRpYVR5cGUgPSBMTV9NRURJQV9UWVBFX1VUUDsKLSAgICAgICAgICAgICpwTGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xME1CUFM7Ci0gICAgICAgICAgICAqcER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9GVUxMOwotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBMTV9SRVFVRVNURURfTUVESUFfVFlQRV9VVFBfMTBNQlBTX0ZVTExfRFVQTEVYOgorCSAgICAqcE1lZGlhVHlwZSA9IExNX01FRElBX1RZUEVfVVRQOworCSAgICAqcExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTBNQlBTOworCSAgICAqcER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9GVUxMOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX1VUUF8xMDBNQlBTOgotICAgICAgICAgICAgKnBNZWRpYVR5cGUgPSBMTV9NRURJQV9UWVBFX1VUUDsKLSAgICAgICAgICAgICpwTGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDBNQlBTOwotICAgICAgICAgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfSEFMRjsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfVVRQXzEwME1CUFM6CisJICAgICpwTWVkaWFUeXBlID0gTE1fTUVESUFfVFlQRV9VVFA7CisJICAgICpwTGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDBNQlBTOworCSAgICAqcER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9IQUxGOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX1VUUF8xMDBNQlBTX0ZVTExfRFVQTEVYOgotICAgICAgICAgICAgKnBNZWRpYVR5cGUgPSBMTV9NRURJQV9UWVBFX1VUUDsKLSAgICAgICAgICAgICpwTGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDBNQlBTOwotICAgICAgICAgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfRlVMTDsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfVVRQXzEwME1CUFNfRlVMTF9EVVBMRVg6CisJICAgICpwTWVkaWFUeXBlID0gTE1fTUVESUFfVFlQRV9VVFA7CisJICAgICpwTGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDBNQlBTOworCSAgICAqcER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9GVUxMOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX1VUUF8xMDAwTUJQUzoKLSAgICAgICAgICAgICpwTWVkaWFUeXBlID0gTE1fTUVESUFfVFlQRV9VVFA7Ci0gICAgICAgICAgICAqcExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTAwME1CUFM7Ci0gICAgICAgICAgICAqcER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9IQUxGOwotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBMTV9SRVFVRVNURURfTUVESUFfVFlQRV9VVFBfMTAwME1CUFM6CisJICAgICpwTWVkaWFUeXBlID0gTE1fTUVESUFfVFlQRV9VVFA7CisJICAgICpwTGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDAwTUJQUzsKKwkgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfSEFMRjsKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBMTV9SRVFVRVNURURfTUVESUFfVFlQRV9VVFBfMTAwME1CUFNfRlVMTF9EVVBMRVg6Ci0gICAgICAgICAgICAqcE1lZGlhVHlwZSA9IExNX01FRElBX1RZUEVfVVRQOwotICAgICAgICAgICAgKnBMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwMDBNQlBTOwotICAgICAgICAgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfRlVMTDsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfVVRQXzEwMDBNQlBTX0ZVTExfRFVQTEVYOgorCSAgICAqcE1lZGlhVHlwZSA9IExNX01FRElBX1RZUEVfVVRQOworCSAgICAqcExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTAwME1CUFM7CisJICAgICpwRHVwbGV4TW9kZSA9IExNX0RVUExFWF9NT0RFX0ZVTEw7CisJICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfRklCRVJfMTAwTUJQUzoKLSAgICAgICAgICAgICpwTWVkaWFUeXBlID0gTE1fTUVESUFfVFlQRV9GSUJFUjsKLSAgICAgICAgICAgICpwTGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDBNQlBTOwotICAgICAgICAgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfSEFMRjsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfRklCRVJfMTAwTUJQUzoKKwkgICAgKnBNZWRpYVR5cGUgPSBMTV9NRURJQV9UWVBFX0ZJQkVSOworCSAgICAqcExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTAwTUJQUzsKKwkgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfSEFMRjsKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBMTV9SRVFVRVNURURfTUVESUFfVFlQRV9GSUJFUl8xMDBNQlBTX0ZVTExfRFVQTEVYOgotICAgICAgICAgICAgKnBNZWRpYVR5cGUgPSBMTV9NRURJQV9UWVBFX0ZJQkVSOwotICAgICAgICAgICAgKnBMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwME1CUFM7Ci0gICAgICAgICAgICAqcER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9GVUxMOwotICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBMTV9SRVFVRVNURURfTUVESUFfVFlQRV9GSUJFUl8xMDBNQlBTX0ZVTExfRFVQTEVYOgorCSAgICAqcE1lZGlhVHlwZSA9IExNX01FRElBX1RZUEVfRklCRVI7CisJICAgICpwTGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDBNQlBTOworCSAgICAqcER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9GVUxMOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX0ZJQkVSXzEwMDBNQlBTOgotICAgICAgICAgICAgKnBNZWRpYVR5cGUgPSBMTV9NRURJQV9UWVBFX0ZJQkVSOwotICAgICAgICAgICAgKnBMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwMDBNQlBTOwotICAgICAgICAgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfSEFMRjsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfRklCRVJfMTAwME1CUFM6CisJICAgICpwTWVkaWFUeXBlID0gTE1fTUVESUFfVFlQRV9GSUJFUjsKKwkgICAgKnBMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwMDBNQlBTOworCSAgICAqcER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9IQUxGOworCSAgICBicmVhazsKIAotICAgICAgICBjYXNlIExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX0ZJQkVSXzEwMDBNQlBTX0ZVTExfRFVQTEVYOgotICAgICAgICAgICAgKnBNZWRpYVR5cGUgPSBMTV9NRURJQV9UWVBFX0ZJQkVSOwotICAgICAgICAgICAgKnBMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwMDBNQlBTOwotICAgICAgICAgICAgKnBEdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfRlVMTDsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfRklCRVJfMTAwME1CUFNfRlVMTF9EVVBMRVg6CisJICAgICpwTWVkaWFUeXBlID0gTE1fTUVESUFfVFlQRV9GSUJFUjsKKwkgICAgKnBMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwMDBNQlBTOworCSAgICAqcER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9GVUxMOworCSAgICBicmVhazsKIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgYnJlYWs7CiAgICAgfSAvKiBzd2l0Y2ggKi8KIAogICAgIHJldHVybiBMTV9TVEFUVVNfU1VDQ0VTUzsKQEAgLTQzMDksOTIgKzQyOTIsOTIgQEAKICNlbmRpZgogICAgIGlmKChwRGV2aWNlLT5QaHlJZCAmIFBIWV9JRF9NQVNLKSA9PSBQSFlfQkNNNTQwMV9QSFlfSUQpCiAgICAgewotICAgICAgICBMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9TVEFUVVNfUkVHLCAmVmFsdWUzMik7Ci0gICAgICAgIExNX1JlYWRQaHkocERldmljZSwgUEhZX1NUQVRVU19SRUcsICZWYWx1ZTMyKTsKKwlMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9TVEFUVVNfUkVHLCAmVmFsdWUzMik7CisJTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfU1RBVFVTX1JFRywgJlZhbHVlMzIpOwogCi0gICAgICAgIGlmKCFwRGV2aWNlLT5Jbml0RG9uZSkKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiA9IDA7Ci0gICAgICAgIH0KKwlpZighcERldmljZS0+SW5pdERvbmUpCisJeworCSAgICBWYWx1ZTMyID0gMDsKKwl9CiAKLSAgICAgICAgaWYoIShWYWx1ZTMyICYgUEhZX1NUQVRVU19MSU5LX1BBU1MpKQotICAgICAgICB7Ci0gICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDAxX0FVWF9DVFJMLCAgMHgwYzIwKTsKKwlpZighKFZhbHVlMzIgJiBQSFlfU1RBVFVTX0xJTktfUEFTUykpCisJeworCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDAxX0FVWF9DVFJMLCAgMHgwYzIwKTsKIAotICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4MDAxMik7Ci0gICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9SV19QT1JULCAweDE4MDQpOworCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHgwMDEyKTsKKwkgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfUldfUE9SVCwgMHgxODA0KTsKIAotICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4MDAxMyk7Ci0gICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9SV19QT1JULCAweDEyMDQpOworCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHgwMDEzKTsKKwkgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfUldfUE9SVCwgMHgxMjA0KTsKIAotICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4ODAwNik7Ci0gICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9SV19QT1JULCAweDAxMzIpOworCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHg4MDA2KTsKKwkgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfUldfUE9SVCwgMHgwMTMyKTsKIAotICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4ODAwNik7Ci0gICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9SV19QT1JULCAweDAyMzIpOworCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHg4MDA2KTsKKwkgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfUldfUE9SVCwgMHgwMjMyKTsKIAotICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4MjAxZik7Ci0gICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9SV19QT1JULCAweDBhMjApOworCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHgyMDFmKTsKKwkgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfUldfUE9SVCwgMHgwYTIwKTsKIAotICAgICAgICAgICAgTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfU1RBVFVTX1JFRywgJlZhbHVlMzIpOwotICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgMTAwMDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE1NX1dhaXQoMTApOworCSAgICBMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9TVEFUVVNfUkVHLCAmVmFsdWUzMik7CisJICAgIGZvcihqID0gMDsgaiA8IDEwMDA7IGorKykKKwkgICAgeworCQlNTV9XYWl0KDEwKTsKIAotICAgICAgICAgICAgICAgIExNX1JlYWRQaHkocERldmljZSwgUEhZX1NUQVRVU19SRUcsICZWYWx1ZTMyKTsKLSAgICAgICAgICAgICAgICBpZihWYWx1ZTMyICYgUEhZX1NUQVRVU19MSU5LX1BBU1MpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBNTV9XYWl0KDQwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorCQlMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9TVEFUVVNfUkVHLCAmVmFsdWUzMik7CisJCWlmKFZhbHVlMzIgJiBQSFlfU1RBVFVTX0xJTktfUEFTUykKKwkJeworCQkgICAgTU1fV2FpdCg0MCk7CisJCSAgICBicmVhazsKKwkJfQorCSAgICB9CiAKLSAgICAgICAgICAgIGlmKChwRGV2aWNlLT5QaHlJZCAmIFBIWV9JRF9SRVZfTUFTSykgPT0gUEhZX0JDTTU0MDFfQjBfUkVWKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKCEoVmFsdWUzMiAmIFBIWV9TVEFUVVNfTElOS19QQVNTKSAmJgotICAgICAgICAgICAgICAgICAgICAocERldmljZS0+T2xkTGluZVNwZWVkID09IExNX0xJTkVfU1BFRURfMTAwME1CUFMpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCBQSFlfQ1RSTF9QSFlfUkVTRVQpOwotICAgICAgICAgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCAxMDA7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7CisJICAgIGlmKChwRGV2aWNlLT5QaHlJZCAmIFBIWV9JRF9SRVZfTUFTSykgPT0gUEhZX0JDTTU0MDFfQjBfUkVWKQorCSAgICB7CisJCWlmKCEoVmFsdWUzMiAmIFBIWV9TVEFUVVNfTElOS19QQVNTKSAmJgorCQkgICAgKHBEZXZpY2UtPk9sZExpbmVTcGVlZCA9PSBMTV9MSU5FX1NQRUVEXzEwMDBNQlBTKSkKKwkJeworCQkgICAgTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCBQSFlfQ1RSTF9QSFlfUkVTRVQpOworCQkgICAgZm9yKGogPSAwOyBqIDwgMTAwOyBqKyspCisJCSAgICB7CisJCQlNTV9XYWl0KDEwKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfQ1RSTF9SRUcsICZWYWx1ZTMyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEoVmFsdWUzMiAmIFBIWV9DVFJMX1BIWV9SRVNFVCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCg0MCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KKwkJCUxNX1JlYWRQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCAmVmFsdWUzMik7CisJCQlpZighKFZhbHVlMzIgJiBQSFlfQ1RSTF9QSFlfUkVTRVQpKQorCQkJeworCQkJICAgIE1NX1dhaXQoNDApOworCQkJICAgIGJyZWFrOworCQkJfQorCQkgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MDFfQVVYX0NUUkwsICAweDBjMjApOworCQkgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwMV9BVVhfQ1RSTCwgIDB4MGMyMCk7CiAKLSAgICAgICAgICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4MDAxMik7Ci0gICAgICAgICAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MTgwNCk7CisJCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHgwMDEyKTsKKwkJICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MTgwNCk7CiAKLSAgICAgICAgICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4MDAxMyk7Ci0gICAgICAgICAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MTIwNCk7CisJCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHgwMDEzKTsKKwkJICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MTIwNCk7CiAKLSAgICAgICAgICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4ODAwNik7Ci0gICAgICAgICAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MDEzMik7CisJCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHg4MDA2KTsKKwkJICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MDEzMik7CiAKLSAgICAgICAgICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4ODAwNik7Ci0gICAgICAgICAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MDIzMik7CisJCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHg4MDA2KTsKKwkJICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MDIzMik7CiAKLSAgICAgICAgICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9EU1BfQUREUkVTU19SRUcsIDB4MjAxZik7Ci0gICAgICAgICAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MGEyMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0RTUF9BRERSRVNTX1JFRywgMHgyMDFmKTsKKwkJICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRFNQX1JXX1BPUlQsIDB4MGEyMCk7CisJCX0KKwkgICAgfQorCX0KICAgICB9CiAgICAgZWxzZSBpZihwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0EwIHx8Ci0gICAgICAgIHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDFfQjApCisJcERldmljZS0+Q2hpcFJldklkID09IFQzX0NISVBfSURfNTcwMV9CMCkKICAgICB7Ci0gICAgICAgIC8qIEJ1ZzogNTcwMSBBMCwgQjAgVFggQ1JDIHdvcmthcm91bmQuICovCi0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTUsIDB4MGE3NSk7Ci0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MWMsIDB4OGM2OCk7Ci0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MWMsIDB4OGQ2OCk7Ci0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MWMsIDB4OGM2OCk7CisJLyogQnVnOiA1NzAxIEEwLCBCMCBUWCBDUkMgd29ya2Fyb3VuZC4gKi8KKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDE1LCAweDBhNzUpOworCUxNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MWMsIDB4OGM2OCk7CisJTE1fV3JpdGVQaHkocERldmljZSwgMHgxYywgMHg4ZDY4KTsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDFjLCAweDhjNjgpOwogICAgIH0KIAogICAgIC8qIEFja25vd2xlZGdlIGludGVycnVwdHMuICovCkBAIC00NDA0LDIyICs0Mzg3LDIyIEBACiAgICAgLyogQ29uZmlndXJlIHRoZSBpbnRlcnJ1cHQgbWFzay4gKi8KICAgICBpZihwRGV2aWNlLT5QaHlJbnRNb2RlID09IFQzX1BIWV9JTlRfTU9ERV9NSV9JTlRFUlJVUFQpCiAgICAgewotICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0lOVF9NQVNLX1JFRywgfkJDTTU0MFhfSU5UX0xJTktfQ0hBTkdFKTsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0lOVF9NQVNLX1JFRywgfkJDTTU0MFhfSU5UX0xJTktfQ0hBTkdFKTsKICAgICB9CiAKICAgICAvKiBDb25maWd1cmUgUEhZIGxlZCBtb2RlLiAqLwogICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMSB8fAotICAgICAgICAoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwKSkKKwkoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwKSkKICAgICB7Ci0gICAgICAgIGlmKHBEZXZpY2UtPkxlZE1vZGUgPT0gTEVEX01PREVfVEhSRUVfTElOSykKLSAgICAgICAgewotICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF9FWFRfQ1RSTF9SRUcsCi0gICAgICAgICAgICAgICAgQkNNNTQwWF9FWFRfQ1RSTF9MSU5LM19MRURfTU9ERSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0VYVF9DVFJMX1JFRywgMCk7Ci0gICAgICAgIH0KKwlpZihwRGV2aWNlLT5MZWRNb2RlID09IExFRF9NT0RFX1RIUkVFX0xJTkspCisJeworCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYX0VYVF9DVFJMX1JFRywKKwkJQkNNNTQwWF9FWFRfQ1RSTF9MSU5LM19MRURfTU9ERSk7CisJfQorCWVsc2UKKwl7CisJICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfRVhUX0NUUkxfUkVHLCAwKTsKKwl9CiAgICAgfQogCiAgICAgQ3VycmVudExpbmtTdGF0dXMgPSBMTV9TVEFUVVNfTElOS19ET1dOOwpAQCAtNDQyNywxNDggKzQ0MTAsMTQ4IEBACiAgICAgLyogR2V0IGN1cnJlbnQgbGluayBhbmQgZHVwbGV4IG1vZGUuICovCiAgICAgZm9yKGogPSAwOyBqIDwgMTAwOyBqKyspCiAgICAgewotICAgICAgICBMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9TVEFUVVNfUkVHLCAmVmFsdWUzMik7Ci0gICAgICAgIExNX1JlYWRQaHkocERldmljZSwgUEhZX1NUQVRVU19SRUcsICZWYWx1ZTMyKTsKKwlMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9TVEFUVVNfUkVHLCAmVmFsdWUzMik7CisJTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfU1RBVFVTX1JFRywgJlZhbHVlMzIpOwogCi0gICAgICAgIGlmKFZhbHVlMzIgJiBQSFlfU1RBVFVTX0xJTktfUEFTUykKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgTU1fV2FpdCg0MCk7CisJaWYoVmFsdWUzMiAmIFBIWV9TVEFUVVNfTElOS19QQVNTKQorCXsKKwkgICAgYnJlYWs7CisJfQorCU1NX1dhaXQoNDApOwogICAgIH0KIAogICAgIGlmKFZhbHVlMzIgJiBQSFlfU1RBVFVTX0xJTktfUEFTUykKICAgICB7CiAKLSAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGxpbmUgYW5kIGR1cGxleCBzZXR0aW5ncy4gKi8KLSAgICAgICAgTE1fUmVhZFBoeShwRGV2aWNlLCBCQ001NDBYX0FVWF9TVEFUVVNfUkVHLCAmVmFsdWUzMik7Ci0gICAgICAgIGZvcihqID0gMDsgaiA8IDIwMDA7IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgTU1fV2FpdCgxMCk7CisJLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGxpbmUgYW5kIGR1cGxleCBzZXR0aW5ncy4gKi8KKwlMTV9SZWFkUGh5KHBEZXZpY2UsIEJDTTU0MFhfQVVYX1NUQVRVU19SRUcsICZWYWx1ZTMyKTsKKwlmb3IoaiA9IDA7IGogPCAyMDAwOyBqKyspCisJeworCSAgICBNTV9XYWl0KDEwKTsKIAotICAgICAgICAgICAgTE1fUmVhZFBoeShwRGV2aWNlLCBCQ001NDBYX0FVWF9TVEFUVVNfUkVHLCAmVmFsdWUzMik7Ci0gICAgICAgICAgICBpZihWYWx1ZTMyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJICAgIExNX1JlYWRQaHkocERldmljZSwgQkNNNTQwWF9BVVhfU1RBVFVTX1JFRywgJlZhbHVlMzIpOworCSAgICBpZihWYWx1ZTMyKQorCSAgICB7CisJCWJyZWFrOworCSAgICB9CisJfQogCi0gICAgICAgIHN3aXRjaChWYWx1ZTMyICYgQkNNNTQwWF9BVVhfU1BFRURfTUFTSykKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBCQ001NDBYX0FVWF8xMEJBU0VUX0hEOgotICAgICAgICAgICAgICAgIEN1cnJlbnRMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwTUJQUzsKLSAgICAgICAgICAgICAgICBDdXJyZW50RHVwbGV4TW9kZSA9IExNX0RVUExFWF9NT0RFX0hBTEY7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJc3dpdGNoKFZhbHVlMzIgJiBCQ001NDBYX0FVWF9TUEVFRF9NQVNLKQorCXsKKwkgICAgY2FzZSBCQ001NDBYX0FVWF8xMEJBU0VUX0hEOgorCQlDdXJyZW50TGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xME1CUFM7CisJCUN1cnJlbnREdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfSEFMRjsKKwkJYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgQkNNNTQwWF9BVVhfMTBCQVNFVF9GRDoKLSAgICAgICAgICAgICAgICBDdXJyZW50TGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xME1CUFM7Ci0gICAgICAgICAgICAgICAgQ3VycmVudER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9GVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIEJDTTU0MFhfQVVYXzEwQkFTRVRfRkQ6CisJCUN1cnJlbnRMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwTUJQUzsKKwkJQ3VycmVudER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9GVUxMOworCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBCQ001NDBYX0FVWF8xMDBCQVNFVFhfSEQ6Ci0gICAgICAgICAgICAgICAgQ3VycmVudExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTAwTUJQUzsKLSAgICAgICAgICAgICAgICBDdXJyZW50RHVwbGV4TW9kZSA9IExNX0RVUExFWF9NT0RFX0hBTEY7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgQkNNNTQwWF9BVVhfMTAwQkFTRVRYX0hEOgorCQlDdXJyZW50TGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDBNQlBTOworCQlDdXJyZW50RHVwbGV4TW9kZSA9IExNX0RVUExFWF9NT0RFX0hBTEY7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEJDTTU0MFhfQVVYXzEwMEJBU0VUWF9GRDoKLSAgICAgICAgICAgICAgICBDdXJyZW50TGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDBNQlBTOwotICAgICAgICAgICAgICAgIEN1cnJlbnREdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfRlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkgICAgY2FzZSBCQ001NDBYX0FVWF8xMDBCQVNFVFhfRkQ6CisJCUN1cnJlbnRMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwME1CUFM7CisJCUN1cnJlbnREdXBsZXhNb2RlID0gTE1fRFVQTEVYX01PREVfRlVMTDsKKwkJYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgQkNNNTQwWF9BVVhfMTAwQkFTRVRfSEQ6Ci0gICAgICAgICAgICAgICAgQ3VycmVudExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTAwME1CUFM7Ci0gICAgICAgICAgICAgICAgQ3VycmVudER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9IQUxGOwotICAgICAgICAgICAgICAgIGJyZWFrOworCSAgICBjYXNlIEJDTTU0MFhfQVVYXzEwMEJBU0VUX0hEOgorCQlDdXJyZW50TGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDAwTUJQUzsKKwkJQ3VycmVudER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9IQUxGOworCQlicmVhazsKIAotICAgICAgICAgICAgY2FzZSBCQ001NDBYX0FVWF8xMDBCQVNFVF9GRDoKLSAgICAgICAgICAgICAgICBDdXJyZW50TGluZVNwZWVkID0gTE1fTElORV9TUEVFRF8xMDAwTUJQUzsKLSAgICAgICAgICAgICAgICBDdXJyZW50RHVwbGV4TW9kZSA9IExNX0RVUExFWF9NT0RFX0ZVTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgQkNNNTQwWF9BVVhfMTAwQkFTRVRfRkQ6CisJCUN1cnJlbnRMaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEXzEwMDBNQlBTOworCQlDdXJyZW50RHVwbGV4TW9kZSA9IExNX0RVUExFWF9NT0RFX0ZVTEw7CisJCWJyZWFrOwogCi0gICAgICAgICAgICBkZWZhdWx0OgorCSAgICBkZWZhdWx0OgogCi0gICAgICAgICAgICAgICAgQ3VycmVudExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfVU5LTk9XTjsKLSAgICAgICAgICAgICAgICBDdXJyZW50RHVwbGV4TW9kZSA9IExNX0RVUExFWF9NT0RFX1VOS05PV047Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkJQ3VycmVudExpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfVU5LTk9XTjsKKwkJQ3VycmVudER1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9VTktOT1dOOworCQlicmVhazsKKwl9CiAKLSAgICAgICAgLyogTWFrZSBzdXJlIHdlIGFyZSBpbiBhdXRvLW5lZyBtb2RlLiAqLwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgMjAwOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIExNX1JlYWRQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCAmVmFsdWUzMik7Ci0gICAgICAgICAgICBpZihWYWx1ZTMyICYmIFZhbHVlMzIgIT0gMHg3ZmZmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYXV0by1uZWcgbW9kZS4gKi8KKwlmb3IgKGogPSAwOyBqIDwgMjAwOyBqKyspCisJeworCSAgICBMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9DVFJMX1JFRywgJlZhbHVlMzIpOworCSAgICBpZihWYWx1ZTMyICYmIFZhbHVlMzIgIT0gMHg3ZmZmKQorCSAgICB7CisJCWJyZWFrOworCSAgICB9CiAKLSAgICAgICAgICAgIGlmKFZhbHVlMzIgPT0gMCAmJiBwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUgPT0KLSAgICAgICAgICAgICAgICBMTV9SRVFVRVNURURfTUVESUFfVFlQRV9VVFBfMTBNQlBTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorCSAgICBpZihWYWx1ZTMyID09IDAgJiYgcERldmljZS0+UmVxdWVzdGVkTWVkaWFUeXBlID09CisJCUxNX1JFUVVFU1RFRF9NRURJQV9UWVBFX1VUUF8xME1CUFMpCisJICAgIHsKKwkJYnJlYWs7CisJICAgIH0KIAotICAgICAgICAgICAgTU1fV2FpdCgxMCk7Ci0gICAgICAgIH0KKwkgICAgTU1fV2FpdCgxMCk7CisJfQogCi0gICAgICAgIC8qIFVzZSB0aGUgY3VycmVudCBsaW5lIHNldHRpbmdzIGZvciAiYXV0byIgbW9kZS4gKi8KLSAgICAgICAgaWYocERldmljZS0+UmVxdWVzdGVkTWVkaWFUeXBlID09IExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX0FVVE8gfHwKLSAgICAgICAgICAgIHBEZXZpY2UtPlJlcXVlc3RlZE1lZGlhVHlwZSA9PSBMTV9SRVFVRVNURURfTUVESUFfVFlQRV9VVFBfQVVUTykKLSAgICAgICAgewotICAgICAgICAgICAgaWYoVmFsdWUzMiAmIFBIWV9DVFJMX0FVVE9fTkVHX0VOQUJMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX0FDVElWRTsKKwkvKiBVc2UgdGhlIGN1cnJlbnQgbGluZSBzZXR0aW5ncyBmb3IgImF1dG8iIG1vZGUuICovCisJaWYocERldmljZS0+UmVxdWVzdGVkTWVkaWFUeXBlID09IExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX0FVVE8gfHwKKwkgICAgcERldmljZS0+UmVxdWVzdGVkTWVkaWFUeXBlID09IExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX1VUUF9BVVRPKQorCXsKKwkgICAgaWYoVmFsdWUzMiAmIFBIWV9DVFJMX0FVVE9fTkVHX0VOQUJMRSkKKwkgICAgeworCQlDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX0FDVElWRTsKIAotICAgICAgICAgICAgICAgIC8qIFdlIG1heSBiZSBleGl0aW5nIGxvdyBwb3dlciBtb2RlIGFuZCB0aGUgbGluayBpcyBpbiAqLwotICAgICAgICAgICAgICAgIC8qIDEwbWIuICBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gcmVzdGFydCBhdXRvbmVnLiAqLwotICAgICAgICAgICAgICAgIExNX1JlYWRQaHkocERldmljZSwgQkNNNTQwWF8xMDAwQkFTRVRfQ1RSTF9SRUcsICZWYWx1ZTMyKTsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5hZHZlcnRpc2luZzEwMDAgPSBWYWx1ZTMyOwotICAgICAgICAgICAgICAgIC8qIDU3MDJGRSBzdXBwb3J0cyAxMC8xMDBNYiBvbmx5LiAqLwotICAgICAgICAgICAgICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgIT0gVDNfQVNJQ19SRVZfNTcwMyB8fAotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5Cb25kSWQgIT0gR1JDX01JU0NfQkRfSURfNTcwMkZFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYoIShWYWx1ZTMyICYgKEJDTTU0MFhfQU5fQURfMTAwMEJBU0VUX0hBTEYgfAotICAgICAgICAgICAgICAgICAgICAgICAgQkNNNTQwWF9BTl9BRF8xMDAwQkFTRVRfRlVMTCkpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX1NFVFRJTkdfTUlTTUFUQ0g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ3VycmVudExpbmtTdGF0dXMgPSBMTV9TVEFUVVNfTElOS19TRVRUSU5HX01JU01BVENIOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLyogRm9yY2UgbGluZSBzZXR0aW5ncy4gKi8KLSAgICAgICAgICAgIC8qIFVzZSB0aGUgY3VycmVudCBzZXR0aW5nIGlmIGl0IG1hdGNoZXMgdGhlIHVzZXIncyByZXF1ZXN0ZWQgKi8KLSAgICAgICAgICAgIC8qIHNldHRpbmcuICovCi0gICAgICAgICAgICBMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9DVFJMX1JFRywgJlZhbHVlMzIpOwotICAgICAgICAgICAgaWYoKHBEZXZpY2UtPkxpbmVTcGVlZCA9PSBDdXJyZW50TGluZVNwZWVkKSAmJgotICAgICAgICAgICAgICAgIChwRGV2aWNlLT5EdXBsZXhNb2RlID09IEN1cnJlbnREdXBsZXhNb2RlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoKHBEZXZpY2UtPkRpc2FibGVBdXRvTmVnICYmCi0gICAgICAgICAgICAgICAgICAgICEoVmFsdWUzMiAmIFBIWV9DVFJMX0FVVE9fTkVHX0VOQUJMRSkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICghcERldmljZS0+RGlzYWJsZUF1dG9OZWcgJiYKLSAgICAgICAgICAgICAgICAgICAgKFZhbHVlMzIgJiBQSFlfQ1RSTF9BVVRPX05FR19FTkFCTEUpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEN1cnJlbnRMaW5rU3RhdHVzID0gTE1fU1RBVFVTX0xJTktfQUNUSVZFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX1NFVFRJTkdfTUlTTUFUQ0g7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEN1cnJlbnRMaW5rU3RhdHVzID0gTE1fU1RBVFVTX0xJTktfU0VUVElOR19NSVNNQVRDSDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQkvKiBXZSBtYXkgYmUgZXhpdGluZyBsb3cgcG93ZXIgbW9kZSBhbmQgdGhlIGxpbmsgaXMgaW4gKi8KKwkJLyogMTBtYi4gIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byByZXN0YXJ0IGF1dG9uZWcuICovCisJCUxNX1JlYWRQaHkocERldmljZSwgQkNNNTQwWF8xMDAwQkFTRVRfQ1RSTF9SRUcsICZWYWx1ZTMyKTsKKwkJcERldmljZS0+YWR2ZXJ0aXNpbmcxMDAwID0gVmFsdWUzMjsKKwkJLyogNTcwMkZFIHN1cHBvcnRzIDEwLzEwME1iIG9ubHkuICovCisJCWlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgIT0gVDNfQVNJQ19SRVZfNTcwMyB8fAorCQkgICAgcERldmljZS0+Qm9uZElkICE9IEdSQ19NSVNDX0JEX0lEXzU3MDJGRSkKKwkJeworCQkgICAgaWYoIShWYWx1ZTMyICYgKEJDTTU0MFhfQU5fQURfMTAwMEJBU0VUX0hBTEYgfAorCQkJQkNNNTQwWF9BTl9BRF8xMDAwQkFTRVRfRlVMTCkpKQorCQkgICAgeworCQkJQ3VycmVudExpbmtTdGF0dXMgPSBMTV9TVEFUVVNfTElOS19TRVRUSU5HX01JU01BVENIOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCUN1cnJlbnRMaW5rU3RhdHVzID0gTE1fU1RBVFVTX0xJTktfU0VUVElOR19NSVNNQVRDSDsKKwkgICAgfQorCX0KKwllbHNlCisJeworCSAgICAvKiBGb3JjZSBsaW5lIHNldHRpbmdzLiAqLworCSAgICAvKiBVc2UgdGhlIGN1cnJlbnQgc2V0dGluZyBpZiBpdCBtYXRjaGVzIHRoZSB1c2VyJ3MgcmVxdWVzdGVkICovCisJICAgIC8qIHNldHRpbmcuICovCisJICAgIExNX1JlYWRQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCAmVmFsdWUzMik7CisJICAgIGlmKChwRGV2aWNlLT5MaW5lU3BlZWQgPT0gQ3VycmVudExpbmVTcGVlZCkgJiYKKwkJKHBEZXZpY2UtPkR1cGxleE1vZGUgPT0gQ3VycmVudER1cGxleE1vZGUpKQorCSAgICB7CisJCWlmICgocERldmljZS0+RGlzYWJsZUF1dG9OZWcgJiYKKwkJICAgICEoVmFsdWUzMiAmIFBIWV9DVFJMX0FVVE9fTkVHX0VOQUJMRSkpIHx8CisJCSAgICAoIXBEZXZpY2UtPkRpc2FibGVBdXRvTmVnICYmCisJCSAgICAoVmFsdWUzMiAmIFBIWV9DVFJMX0FVVE9fTkVHX0VOQUJMRSkpKQorCQl7CisJCSAgICBDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX0FDVElWRTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIEN1cnJlbnRMaW5rU3RhdHVzID0gTE1fU1RBVFVTX0xJTktfU0VUVElOR19NSVNNQVRDSDsKKwkJfQorCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX1NFVFRJTkdfTUlTTUFUQ0g7CisJICAgIH0KKwl9CiAKLSAgICAgICAgLyogU2F2ZSBsaW5lIHNldHRpbmdzLiAqLwotICAgICAgICBwRGV2aWNlLT5MaW5lU3BlZWQgPSBDdXJyZW50TGluZVNwZWVkOwotICAgICAgICBwRGV2aWNlLT5EdXBsZXhNb2RlID0gQ3VycmVudER1cGxleE1vZGU7Ci0gICAgICAgIHBEZXZpY2UtPk1lZGlhVHlwZSA9IExNX01FRElBX1RZUEVfVVRQOworCS8qIFNhdmUgbGluZSBzZXR0aW5ncy4gKi8KKwlwRGV2aWNlLT5MaW5lU3BlZWQgPSBDdXJyZW50TGluZVNwZWVkOworCXBEZXZpY2UtPkR1cGxleE1vZGUgPSBDdXJyZW50RHVwbGV4TW9kZTsKKwlwRGV2aWNlLT5NZWRpYVR5cGUgPSBMTV9NRURJQV9UWVBFX1VUUDsKICAgICB9CiAKICAgICByZXR1cm4gQ3VycmVudExpbmtTdGF0dXM7CkBAIC00NTkzLDUxICs0NTc2LDUxIEBACiAgICAgLyogU2VlIFRhYmxlIDI4Qi0zIG9mIDgwMi4zYWItMTk5OSBzcGVjLiAqLwogICAgIGlmKHBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICYgTE1fRkxPV19DT05UUk9MX0FVVE9fUEFVU0UpCiAgICAgewotICAgICAgICBpZihMb2NhbFBoeUFkICYgUEhZX0FOX0FEX1BBVVNFX0NBUEFCTEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKExvY2FsUGh5QWQgJiBQSFlfQU5fQURfQVNZTV9QQVVTRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihSZW1vdGVQaHlBZCAmIFBIWV9MSU5LX1BBUlRORVJfUEFVU0VfQ0FQQUJMRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEZsb3dDYXAgPSBMTV9GTE9XX0NPTlRST0xfVFJBTlNNSVRfUEFVU0UgfAotICAgICAgICAgICAgICAgICAgICAgICAgTE1fRkxPV19DT05UUk9MX1JFQ0VJVkVfUEFVU0U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYoUmVtb3RlUGh5QWQgJiBQSFlfTElOS19QQVJUTkVSX0FTWU1fUEFVU0UpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBGbG93Q2FwID0gTE1fRkxPV19DT05UUk9MX1JFQ0VJVkVfUEFVU0U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKFJlbW90ZVBoeUFkICYgUEhZX0xJTktfUEFSVE5FUl9QQVVTRV9DQVBBQkxFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRmxvd0NhcCA9IExNX0ZMT1dfQ09OVFJPTF9UUkFOU01JVF9QQVVTRSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICBMTV9GTE9XX0NPTlRST0xfUkVDRUlWRV9QQVVTRTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZihMb2NhbFBoeUFkICYgUEhZX0FOX0FEX0FTWU1fUEFVU0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKChSZW1vdGVQaHlBZCAmIFBIWV9MSU5LX1BBUlRORVJfUEFVU0VfQ0FQQUJMRSkgJiYKLSAgICAgICAgICAgICAgICAoUmVtb3RlUGh5QWQgJiBQSFlfTElOS19QQVJUTkVSX0FTWU1fUEFVU0UpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEZsb3dDYXAgPSBMTV9GTE9XX0NPTlRST0xfVFJBTlNNSVRfUEFVU0U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKwlpZihMb2NhbFBoeUFkICYgUEhZX0FOX0FEX1BBVVNFX0NBUEFCTEUpCisJeworCSAgICBpZihMb2NhbFBoeUFkICYgUEhZX0FOX0FEX0FTWU1fUEFVU0UpCisJICAgIHsKKwkJaWYoUmVtb3RlUGh5QWQgJiBQSFlfTElOS19QQVJUTkVSX1BBVVNFX0NBUEFCTEUpCisJCXsKKwkJICAgIEZsb3dDYXAgPSBMTV9GTE9XX0NPTlRST0xfVFJBTlNNSVRfUEFVU0UgfAorCQkJTE1fRkxPV19DT05UUk9MX1JFQ0VJVkVfUEFVU0U7CisJCX0KKwkJZWxzZSBpZihSZW1vdGVQaHlBZCAmIFBIWV9MSU5LX1BBUlRORVJfQVNZTV9QQVVTRSkKKwkJeworCQkgICAgRmxvd0NhcCA9IExNX0ZMT1dfQ09OVFJPTF9SRUNFSVZFX1BBVVNFOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCWlmKFJlbW90ZVBoeUFkICYgUEhZX0xJTktfUEFSVE5FUl9QQVVTRV9DQVBBQkxFKQorCQl7CisJCSAgICBGbG93Q2FwID0gTE1fRkxPV19DT05UUk9MX1RSQU5TTUlUX1BBVVNFIHwKKwkJCUxNX0ZMT1dfQ09OVFJPTF9SRUNFSVZFX1BBVVNFOworCQl9CisJICAgIH0KKwl9CisJZWxzZSBpZihMb2NhbFBoeUFkICYgUEhZX0FOX0FEX0FTWU1fUEFVU0UpCisJeworCSAgICBpZigoUmVtb3RlUGh5QWQgJiBQSFlfTElOS19QQVJUTkVSX1BBVVNFX0NBUEFCTEUpICYmCisJCShSZW1vdGVQaHlBZCAmIFBIWV9MSU5LX1BBUlRORVJfQVNZTV9QQVVTRSkpCisJICAgIHsKKwkJRmxvd0NhcCA9IExNX0ZMT1dfQ09OVFJPTF9UUkFOU01JVF9QQVVTRTsKKwkgICAgfQorCX0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgRmxvd0NhcCA9IHBEZXZpY2UtPkZsb3dDb250cm9sQ2FwOworCUZsb3dDYXAgPSBwRGV2aWNlLT5GbG93Q29udHJvbENhcDsKICAgICB9CiAKICAgICAvKiBFbmFibGUvZGlzYWJsZSByeCBQQVVTRS4gKi8KICAgICBwRGV2aWNlLT5SeE1vZGUgJj0gflJYX01PREVfRU5BQkxFX0ZMT1dfQ09OVFJPTDsKICAgICBpZihGbG93Q2FwICYgTE1fRkxPV19DT05UUk9MX1JFQ0VJVkVfUEFVU0UgJiYKLSAgICAgICAgKHBEZXZpY2UtPkZsb3dDb250cm9sQ2FwID09IExNX0ZMT1dfQ09OVFJPTF9BVVRPX1BBVVNFIHx8Ci0gICAgICAgIHBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICYgTE1fRkxPV19DT05UUk9MX1JFQ0VJVkVfUEFVU0UpKQorCShwRGV2aWNlLT5GbG93Q29udHJvbENhcCA9PSBMTV9GTE9XX0NPTlRST0xfQVVUT19QQVVTRSB8fAorCXBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICYgTE1fRkxPV19DT05UUk9MX1JFQ0VJVkVfUEFVU0UpKQogICAgIHsKLSAgICAgICAgcERldmljZS0+Rmxvd0NvbnRyb2wgfD0gTE1fRkxPV19DT05UUk9MX1JFQ0VJVkVfUEFVU0U7Ci0gICAgICAgIHBEZXZpY2UtPlJ4TW9kZSB8PSBSWF9NT0RFX0VOQUJMRV9GTE9XX0NPTlRST0w7CisJcERldmljZS0+Rmxvd0NvbnRyb2wgfD0gTE1fRkxPV19DT05UUk9MX1JFQ0VJVkVfUEFVU0U7CisJcERldmljZS0+UnhNb2RlIHw9IFJYX01PREVfRU5BQkxFX0ZMT1dfQ09OVFJPTDsKIAogICAgIH0KICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5SeE1vZGUsIHBEZXZpY2UtPlJ4TW9kZSk7CkBAIC00NjQ1LDExICs0NjI4LDExIEBACiAgICAgLyogRW5hYmxlL2Rpc2FibGUgdHggUEFVU0UuICovCiAgICAgcERldmljZS0+VHhNb2RlICY9IH5UWF9NT0RFX0VOQUJMRV9GTE9XX0NPTlRST0w7CiAgICAgaWYoRmxvd0NhcCAmIExNX0ZMT1dfQ09OVFJPTF9UUkFOU01JVF9QQVVTRSAmJgotICAgICAgICAocERldmljZS0+Rmxvd0NvbnRyb2xDYXAgPT0gTE1fRkxPV19DT05UUk9MX0FVVE9fUEFVU0UgfHwKLSAgICAgICAgcERldmljZS0+Rmxvd0NvbnRyb2xDYXAgJiBMTV9GTE9XX0NPTlRST0xfVFJBTlNNSVRfUEFVU0UpKQorCShwRGV2aWNlLT5GbG93Q29udHJvbENhcCA9PSBMTV9GTE9XX0NPTlRST0xfQVVUT19QQVVTRSB8fAorCXBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICYgTE1fRkxPV19DT05UUk9MX1RSQU5TTUlUX1BBVVNFKSkKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPkZsb3dDb250cm9sIHw9IExNX0ZMT1dfQ09OVFJPTF9UUkFOU01JVF9QQVVTRTsKLSAgICAgICAgcERldmljZS0+VHhNb2RlIHw9IFRYX01PREVfRU5BQkxFX0ZMT1dfQ09OVFJPTDsKKwlwRGV2aWNlLT5GbG93Q29udHJvbCB8PSBMTV9GTE9XX0NPTlRST0xfVFJBTlNNSVRfUEFVU0U7CisJcERldmljZS0+VHhNb2RlIHw9IFRYX01PREVfRU5BQkxFX0ZMT1dfQ09OVFJPTDsKIAogICAgIH0KICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5UeE1vZGUsIHBEZXZpY2UtPlR4TW9kZSk7CkBAIC00Njc2LDUxICs0NjU5LDUwIEBACiAgICAgLyogUmVzZXQgdGhlIFNFUkRFUyBkdXJpbmcgaW5pdCBhbmQgd2hlbiB3ZSBoYXZlIGxpbmsuICovCiAgICAgaWYoIXBEZXZpY2UtPkluaXREb25lIHx8IFZhbHVlMzIgJiBNQUNfU1RBVFVTX1BDU19TWU5DRUQpCiAgICAgewotICAgICAgICAvKiBTZXQgUExMIGxvY2sgcmFuZ2UuICovCi0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTYsIDB4ODAwNyk7CisJLyogU2V0IFBMTCBsb2NrIHJhbmdlLiAqLworCUxNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTYsIDB4ODAwNyk7CiAKLSAgICAgICAgLyogU29mdHdhcmUgcmVzZXQuICovCi0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MDAsIDB4ODAwMCk7CisJLyogU29mdHdhcmUgcmVzZXQuICovCisJTE1fV3JpdGVQaHkocERldmljZSwgMHgwMCwgMHg4MDAwKTsKIAotICAgICAgICAvKiBXYWl0IGZvciByZXNldCB0byBjb21wbGV0ZS4gKi8KLSAgICAgICAgZm9yKGogPSAwOyBqIDwgNTAwOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIE1NX1dhaXQoMTApOwotICAgICAgICB9CisJLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUuICovCisJZm9yKGogPSAwOyBqIDwgNTAwOyBqKyspCisJeworCSAgICBNTV9XYWl0KDEwKTsKKwl9CiAKLSAgICAgICAgLyogQ29uZmlnIG1vZGU7IHNlbGV0Y3QgUE1BL0NoIDEgcmVncy4gKi8KLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgMHgxMCwgMHg4NDExKTsKKwkvKiBDb25maWcgbW9kZTsgc2VsZXRjdCBQTUEvQ2ggMSByZWdzLiAqLworCUxNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTAsIDB4ODQxMSk7CiAKLSAgICAgICAgLyogRW5hYmxlIGF1dG8tbG9jayBhbmQgY29tZGV0LCBzZWxlY3QgdHhjbGsgZm9yIHR4LiAqLwotICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDExLCAweDBhMTApOworCS8qIEVuYWJsZSBhdXRvLWxvY2sgYW5kIGNvbWRldCwgc2VsZWN0IHR4Y2xrIGZvciB0eC4gKi8KKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDExLCAweDBhMTApOwogCi0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTgsIDB4MDBhMCk7Ci0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTYsIDB4NDFmZik7CisJTE1fV3JpdGVQaHkocERldmljZSwgMHgxOCwgMHgwMGEwKTsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDE2LCAweDQxZmYpOwogCi0gICAgICAgIC8qIEFzc2VydCBhbmQgZGVhc3NlcnQgUE9SLiAqLwotICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDEzLCAweDA0MDApOwotICAgICAgICBNTV9XYWl0KDQwKTsKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgMHgxMywgMHgwMDAwKTsKKwkvKiBBc3NlcnQgYW5kIGRlYXNzZXJ0IFBPUi4gKi8KKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDEzLCAweDA0MDApOworCU1NX1dhaXQoNDApOworCUxNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTMsIDB4MDAwMCk7CiAKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgMHgxMSwgMHgwYTUwKTsKLSAgICAgICAgTU1fV2FpdCg0MCk7Ci0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTEsIDB4MGExMCk7CisJTE1fV3JpdGVQaHkocERldmljZSwgMHgxMSwgMHgwYTUwKTsKKwlNTV9XYWl0KDQwKTsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCAweDExLCAweDBhMTApOwogCi0gICAgICAgIC8qIERlbGF5IGZvciBzaWduYWwgdG8gc3RhYmlsaXplLiAqLwotICAgICAgICBmb3IoaiA9IDA7IGogPCAxNTAwMDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBNTV9XYWl0KDEwKTsKLSAgICAgICAgfQorCS8qIERlbGF5IGZvciBzaWduYWwgdG8gc3RhYmlsaXplLiAqLworCWZvcihqID0gMDsgaiA8IDE1MDAwOyBqKyspCisJeworCSAgICBNTV9XYWl0KDEwKTsKKwl9CiAKLSAgICAgICAgLyogRGVzZWxlY3QgdGhlIGNoYW5uZWwgcmVnaXN0ZXIgc28gd2UgY2FuIHJlYWQgdGhlIFBIWSBpZCBsYXRlci4gKi8KLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgMHgxMCwgMHg4MDExKTsKKwkvKiBEZXNlbGVjdCB0aGUgY2hhbm5lbCByZWdpc3RlciBzbyB3ZSBjYW4gcmVhZCB0aGUgUEhZIGlkIGxhdGVyLiAqLworCUxNX1dyaXRlUGh5KHBEZXZpY2UsIDB4MTAsIDB4ODAxMSk7CiAgICAgfQogCiAgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOwogfQogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIERlc2NyaXB0aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDc0OCwxMiArNDczMCwxMiBAQAogICAgIC8qIEluaXRpYWxpemUgdGhlIEJDTTgwMDIgU0VSREVTIFBIWS4gKi8KICAgICBzd2l0Y2gocERldmljZS0+UGh5SWQgJiBQSFlfSURfTUFTSykKICAgICB7Ci0gICAgICAgIGNhc2UgUEhZX0JDTTgwMDJfUEhZX0lEOgotICAgICAgICAgICAgTE1fSW5pdEJjbTgwMHhQaHkocERldmljZSk7Ci0gICAgICAgICAgICBicmVhazsKKwljYXNlIFBIWV9CQ004MDAyX1BIWV9JRDoKKwkgICAgTE1fSW5pdEJjbTgwMHhQaHkocERldmljZSk7CisJICAgIGJyZWFrOwogCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBicmVhazsKICAgICB9CiAKICAgICAvKiBFbmFibGUgbGluayBjaGFuZ2UgaW50ZXJydXB0LiAqLwpAQCAtNDc2NiwyMTggKzQ3NDgsMjE4IEBACiAgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLlN0YXR1cyk7CiAgICAgaWYoVmFsdWUzMiAmIE1BQ19TVEFUVVNfUENTX1NZTkNFRCkKICAgICB7Ci0gICAgICAgIGlmKChwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUgPT0gTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfQVVUTykgfHwKLSAgICAgICAgICAgIChwRGV2aWNlLT5EaXNhYmxlQXV0b05lZyA9PSBGQUxTRSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIGF1dG8tbmVnb3RpYXRpb24gbW9kZS4gKi8KLSAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGF1dG9uZWcgZGVmYXVsdCBjYXBhaWJsaXRpZXMuICovCi0gICAgICAgICAgICBBdXRvbmVnSW5pdCgmcERldmljZS0+QW5JbmZvKTsKKwlpZigocERldmljZS0+UmVxdWVzdGVkTWVkaWFUeXBlID09IExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX0FVVE8pIHx8CisJICAgIChwRGV2aWNlLT5EaXNhYmxlQXV0b05lZyA9PSBGQUxTRSkpCisJeworCSAgICAvKiBhdXRvLW5lZ290aWF0aW9uIG1vZGUuICovCisJICAgIC8qIEluaXRpYWxpemUgdGhlIGF1dG9uZWcgZGVmYXVsdCBjYXBhaWJsaXRpZXMuICovCisJICAgIEF1dG9uZWdJbml0KCZwRGV2aWNlLT5BbkluZm8pOwogCi0gICAgICAgICAgICAvKiBTZXQgdGhlIGNvbnRleHQgcG9pbnRlciB0byBwb2ludCB0byB0aGUgbWFpbiBkZXZpY2Ugc3RydWN0dXJlLiAqLwotICAgICAgICAgICAgcERldmljZS0+QW5JbmZvLnBDb250ZXh0ID0gcERldmljZTsKKwkgICAgLyogU2V0IHRoZSBjb250ZXh0IHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlIG1haW4gZGV2aWNlIHN0cnVjdHVyZS4gKi8KKwkgICAgcERldmljZS0+QW5JbmZvLnBDb250ZXh0ID0gcERldmljZTsKIAotICAgICAgICAgICAgLyogU2V0dXAgZmxvdyBjb250cm9sIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuICovCi0gICAgICAgICAgICBWYWx1ZTMyID0gR2V0UGh5QWRGbG93Q250cmxTZXR0aW5ncyhwRGV2aWNlKTsKLSAgICAgICAgICAgIGlmKFZhbHVlMzIgJiBQSFlfQU5fQURfUEFVU0VfQ0FQQUJMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5BbkluZm8ubXJfYWR2X3N5bV9wYXVzZSA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+QW5JbmZvLm1yX2Fkdl9zeW1fcGF1c2UgPSAwOwotICAgICAgICAgICAgfQorCSAgICAvKiBTZXR1cCBmbG93IGNvbnRyb2wgYWR2ZXJ0aXNlbWVudCByZWdpc3Rlci4gKi8KKwkgICAgVmFsdWUzMiA9IEdldFBoeUFkRmxvd0NudHJsU2V0dGluZ3MocERldmljZSk7CisJICAgIGlmKFZhbHVlMzIgJiBQSFlfQU5fQURfUEFVU0VfQ0FQQUJMRSkKKwkgICAgeworCQlwRGV2aWNlLT5BbkluZm8ubXJfYWR2X3N5bV9wYXVzZSA9IDE7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCXBEZXZpY2UtPkFuSW5mby5tcl9hZHZfc3ltX3BhdXNlID0gMDsKKwkgICAgfQogCi0gICAgICAgICAgICBpZihWYWx1ZTMyICYgUEhZX0FOX0FEX0FTWU1fUEFVU0UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcERldmljZS0+QW5JbmZvLm1yX2Fkdl9hc3ltX3BhdXNlID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5BbkluZm8ubXJfYWR2X2FzeW1fcGF1c2UgPSAwOwotICAgICAgICAgICAgfQorCSAgICBpZihWYWx1ZTMyICYgUEhZX0FOX0FEX0FTWU1fUEFVU0UpCisJICAgIHsKKwkJcERldmljZS0+QW5JbmZvLm1yX2Fkdl9hc3ltX3BhdXNlID0gMTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJcERldmljZS0+QW5JbmZvLm1yX2Fkdl9hc3ltX3BhdXNlID0gMDsKKwkgICAgfQogCi0gICAgICAgICAgICAvKiBUcnkgdG8gYXV0b25lZyB1cCB0byBzaXggdGltZXMuICovCi0gICAgICAgICAgICBpZiAocERldmljZS0+SWdub3JlVGJpTGlua0NoYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDbnQgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENudCA9IDY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgQ250OyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuVHhBdXRvTmVnLCAwKTsKKwkgICAgLyogVHJ5IHRvIGF1dG9uZWcgdXAgdG8gc2l4IHRpbWVzLiAqLworCSAgICBpZiAocERldmljZS0+SWdub3JlVGJpTGlua0NoYW5nZSkKKwkgICAgeworCQlDbnQgPSAxOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCQlDbnQgPSA2OworCSAgICB9CisJICAgIGZvciAoaiA9IDA7IGogPCBDbnQ7IGorKykKKwkgICAgeworCQlSRUdfV1IocERldmljZSwgTWFjQ3RybC5UeEF1dG9OZWcsIDApOwogCi0gICAgICAgICAgICAgICAgVmFsdWUzMiA9IHBEZXZpY2UtPk1hY01vZGUgJiB+TUFDX01PREVfUE9SVF9NT0RFX01BU0s7Ci0gICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgVmFsdWUzMik7Ci0gICAgICAgICAgICAgICAgTU1fV2FpdCgyMCk7CisJCVZhbHVlMzIgPSBwRGV2aWNlLT5NYWNNb2RlICYgfk1BQ19NT0RFX1BPUlRfTU9ERV9NQVNLOworCQlSRUdfV1IocERldmljZSwgTWFjQ3RybC5Nb2RlLCBWYWx1ZTMyKTsKKwkJTU1fV2FpdCgyMCk7CiAKLSAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5Nb2RlLCBwRGV2aWNlLT5NYWNNb2RlIHwKLSAgICAgICAgICAgICAgICAgICAgTUFDX01PREVfU0VORF9DT05GSUdTKTsKKwkJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgcERldmljZS0+TWFjTW9kZSB8CisJCSAgICBNQUNfTU9ERV9TRU5EX0NPTkZJR1MpOwogCi0gICAgICAgICAgICAgICAgTU1fV2FpdCgyMCk7CisJCU1NX1dhaXQoMjApOwogCi0gICAgICAgICAgICAgICAgcERldmljZS0+QW5JbmZvLlN0YXRlID0gQU5fU1RBVEVfVU5LTk9XTjsKLSAgICAgICAgICAgICAgICBwRGV2aWNlLT5BbkluZm8uQ3VycmVudFRpbWVfdXMgPSAwOworCQlwRGV2aWNlLT5BbkluZm8uU3RhdGUgPSBBTl9TVEFURV9VTktOT1dOOworCQlwRGV2aWNlLT5BbkluZm8uQ3VycmVudFRpbWVfdXMgPSAwOwogCi0gICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIEdyYy5UaW1lciwgMCk7Ci0gICAgICAgICAgICAgICAgZm9yKGsgPSAwOyAocERldmljZS0+QW5JbmZvLkN1cnJlbnRUaW1lX3VzIDwgNzUwMDApICYmCi0gICAgICAgICAgICAgICAgICAgIChrIDwgNzUwMDApOyBrKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBblN0YXR1cyA9IEF1dG9uZWc4MDIzeigmcERldmljZS0+QW5JbmZvKTsKKwkJUkVHX1dSKHBEZXZpY2UsIEdyYy5UaW1lciwgMCk7CisJCWZvcihrID0gMDsgKHBEZXZpY2UtPkFuSW5mby5DdXJyZW50VGltZV91cyA8IDc1MDAwKSAmJgorCQkgICAgKGsgPCA3NTAwMCk7IGsrKykKKwkJeworCQkgICAgQW5TdGF0dXMgPSBBdXRvbmVnODAyM3ooJnBEZXZpY2UtPkFuSW5mbyk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYoKEFuU3RhdHVzID09IEFVVE9ORUdfU1RBVFVTX0RPTkUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoQW5TdGF0dXMgPT0gQVVUT05FR19TVEFUVVNfRkFJTEVEKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKwkJICAgIGlmKChBblN0YXR1cyA9PSBBVVRPTkVHX1NUQVRVU19ET05FKSB8fAorCQkJKEFuU3RhdHVzID09IEFVVE9ORUdfU1RBVFVTX0ZBSUxFRCkpCisJCSAgICB7CisJCQlicmVhazsKKwkJICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5BbkluZm8uQ3VycmVudFRpbWVfdXMgPSBSRUdfUkQocERldmljZSwgR3JjLlRpbWVyKTsKKwkJICAgIHBEZXZpY2UtPkFuSW5mby5DdXJyZW50VGltZV91cyA9IFJFR19SRChwRGV2aWNlLCBHcmMuVGltZXIpOwogCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmKChBblN0YXR1cyA9PSBBVVRPTkVHX1NUQVRVU19ET05FKSB8fAotICAgICAgICAgICAgICAgICAgICAoQW5TdGF0dXMgPT0gQVVUT05FR19TVEFUVVNfRkFJTEVEKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaiA+PSAxKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEoUkVHX1JEKHBEZXZpY2UsIE1hY0N0cmwuU3RhdHVzKSAmCi0gICAgICAgICAgICAgICAgICAgICAgICBNQUNfU1RBVFVTX1BDU19TWU5DRUQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkJfQorCQlpZigoQW5TdGF0dXMgPT0gQVVUT05FR19TVEFUVVNfRE9ORSkgfHwKKwkJICAgIChBblN0YXR1cyA9PSBBVVRPTkVHX1NUQVRVU19GQUlMRUQpKQorCQl7CisJCSAgICBicmVhazsKKwkJfQorCQlpZiAoaiA+PSAxKQorCQl7CisJCSAgICBpZiAoIShSRUdfUkQocERldmljZSwgTWFjQ3RybC5TdGF0dXMpICYKKwkJCU1BQ19TVEFUVVNfUENTX1NZTkNFRCkpIHsKKwkJCWJyZWFrOworCQkgICAgfQorCQl9CisJICAgIH0KIAotICAgICAgICAgICAgLyogU3RvcCBzZW5kaW5nIGNvbmZpZ3MuICovCi0gICAgICAgICAgICBNTV9BblR4SWRsZSgmcERldmljZS0+QW5JbmZvKTsKKwkgICAgLyogU3RvcCBzZW5kaW5nIGNvbmZpZ3MuICovCisJICAgIE1NX0FuVHhJZGxlKCZwRGV2aWNlLT5BbkluZm8pOwogCi0gICAgICAgICAgICAvKiBSZXNvbHZlIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gKi8KLSAgICAgICAgICAgIGlmKChBblN0YXR1cyA9PSBBVVRPTkVHX1NUQVRVU19ET05FKSAmJgotICAgICAgICAgICAgICAgIHBEZXZpY2UtPkFuSW5mby5tcl9hbl9jb21wbGV0ZSAmJiBwRGV2aWNlLT5BbkluZm8ubXJfbGlua19vayAmJgotICAgICAgICAgICAgICAgIHBEZXZpY2UtPkFuSW5mby5tcl9scF9hZHZfZnVsbF9kdXBsZXgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExNX1VJTlQzMiBSZW1vdGVQaHlBZDsKLSAgICAgICAgICAgICAgICBMTV9VSU5UMzIgTG9jYWxQaHlBZDsKKwkgICAgLyogUmVzb2x2ZSBmbG93IGNvbnRyb2wgc2V0dGluZ3MuICovCisJICAgIGlmKChBblN0YXR1cyA9PSBBVVRPTkVHX1NUQVRVU19ET05FKSAmJgorCQlwRGV2aWNlLT5BbkluZm8ubXJfYW5fY29tcGxldGUgJiYgcERldmljZS0+QW5JbmZvLm1yX2xpbmtfb2sgJiYKKwkJcERldmljZS0+QW5JbmZvLm1yX2xwX2Fkdl9mdWxsX2R1cGxleCkKKwkJeworCQlMTV9VSU5UMzIgUmVtb3RlUGh5QWQ7CisJCUxNX1VJTlQzMiBMb2NhbFBoeUFkOwogCi0gICAgICAgICAgICAgICAgTG9jYWxQaHlBZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+QW5JbmZvLm1yX2Fkdl9zeW1fcGF1c2UpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBMb2NhbFBoeUFkIHw9IFBIWV9BTl9BRF9QQVVTRV9DQVBBQkxFOwotICAgICAgICAgICAgICAgIH0KKwkJTG9jYWxQaHlBZCA9IDA7CisJCWlmKHBEZXZpY2UtPkFuSW5mby5tcl9hZHZfc3ltX3BhdXNlKQorCQl7CisJCSAgICBMb2NhbFBoeUFkIHw9IFBIWV9BTl9BRF9QQVVTRV9DQVBBQkxFOworCQl9CiAKLSAgICAgICAgICAgICAgICBpZihwRGV2aWNlLT5BbkluZm8ubXJfYWR2X2FzeW1fcGF1c2UpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBMb2NhbFBoeUFkIHw9IFBIWV9BTl9BRF9BU1lNX1BBVVNFOwotICAgICAgICAgICAgICAgIH0KKwkJaWYocERldmljZS0+QW5JbmZvLm1yX2Fkdl9hc3ltX3BhdXNlKQorCQl7CisJCSAgICBMb2NhbFBoeUFkIHw9IFBIWV9BTl9BRF9BU1lNX1BBVVNFOworCQl9CiAKLSAgICAgICAgICAgICAgICBSZW1vdGVQaHlBZCA9IDA7Ci0gICAgICAgICAgICAgICAgaWYocERldmljZS0+QW5JbmZvLm1yX2xwX2Fkdl9zeW1fcGF1c2UpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBSZW1vdGVQaHlBZCB8PSBQSFlfTElOS19QQVJUTkVSX1BBVVNFX0NBUEFCTEU7Ci0gICAgICAgICAgICAgICAgfQorCQlSZW1vdGVQaHlBZCA9IDA7CisJCWlmKHBEZXZpY2UtPkFuSW5mby5tcl9scF9hZHZfc3ltX3BhdXNlKQorCQl7CisJCSAgICBSZW1vdGVQaHlBZCB8PSBQSFlfTElOS19QQVJUTkVSX1BBVVNFX0NBUEFCTEU7CisJCX0KIAotICAgICAgICAgICAgICAgIGlmKHBEZXZpY2UtPkFuSW5mby5tcl9scF9hZHZfYXN5bV9wYXVzZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbW90ZVBoeUFkIHw9IFBIWV9MSU5LX1BBUlRORVJfQVNZTV9QQVVTRTsKLSAgICAgICAgICAgICAgICB9CisJCWlmKHBEZXZpY2UtPkFuSW5mby5tcl9scF9hZHZfYXN5bV9wYXVzZSkKKwkJeworCQkgICAgUmVtb3RlUGh5QWQgfD0gUEhZX0xJTktfUEFSVE5FUl9BU1lNX1BBVVNFOworCQl9CiAKLSAgICAgICAgICAgICAgICBMTV9TZXRGbG93Q29udHJvbChwRGV2aWNlLCBMb2NhbFBoeUFkLCBSZW1vdGVQaHlBZCk7CisJCUxNX1NldEZsb3dDb250cm9sKHBEZXZpY2UsIExvY2FsUGh5QWQsIFJlbW90ZVBoeUFkKTsKIAotICAgICAgICAgICAgICAgIEN1cnJlbnRMaW5rU3RhdHVzID0gTE1fU1RBVFVTX0xJTktfQUNUSVZFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDMwOyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTU1fV2FpdCgyMCk7Ci0gICAgICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuU3RhdHVzLCBNQUNfU1RBVFVTX1NZTkNfQ0hBTkdFRCB8Ci0gICAgICAgICAgICAgICAgICAgIE1BQ19TVEFUVVNfQ0ZHX0NIQU5HRUQpOwotICAgICAgICAgICAgICAgIE1NX1dhaXQoMjApOwotICAgICAgICAgICAgICAgIGlmICgoUkVHX1JEKHBEZXZpY2UsIE1hY0N0cmwuU3RhdHVzKSAmCi0gICAgICAgICAgICAgICAgICAgIChNQUNfU1RBVFVTX1NZTkNfQ0hBTkdFRCB8IE1BQ19TVEFUVVNfQ0ZHX0NIQU5HRUQpKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwRGV2aWNlLT5Qb2xsVGJpTGluaykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBWYWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIE1hY0N0cmwuU3RhdHVzKTsKLSAgICAgICAgICAgICAgICBpZiAoVmFsdWUzMiAmIE1BQ19TVEFUVVNfUkVDRUlWSU5HX0NGRykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBEZXZpY2UtPklnbm9yZVRiaUxpbmtDaGFuZ2UgPSBUUlVFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5JZ25vcmVUYmlMaW5rQ2hhbmdlID0gRkFMU0U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLlN0YXR1cyk7Ci0gICAgICAgICAgICBpZiAoQ3VycmVudExpbmtTdGF0dXMgPT0gTE1fU1RBVFVTX0xJTktfRE9XTiAmJgotICAgICAgICAgICAgICAgICAoVmFsdWUzMiAmIE1BQ19TVEFUVVNfUENTX1NZTkNFRCkgJiYKLSAgICAgICAgICAgICAgICAgKChWYWx1ZTMyICYgTUFDX1NUQVRVU19SRUNFSVZJTkdfQ0ZHKSA9PSAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX0FDVElWRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIGFyZSBmb3JjaW5nIGxpbmUgc3BlZWQuICovCi0gICAgICAgICAgICBwRGV2aWNlLT5GbG93Q29udHJvbENhcCAmPSB+TE1fRkxPV19DT05UUk9MX0FVVE9fUEFVU0U7Ci0gICAgICAgICAgICBMTV9TZXRGbG93Q29udHJvbChwRGV2aWNlLCAwLCAwKTsKKwkJQ3VycmVudExpbmtTdGF0dXMgPSBMTV9TVEFUVVNfTElOS19BQ1RJVkU7CisJICAgIH0KKwkgICAgZm9yIChqID0gMDsgaiA8IDMwOyBqKyspCisJICAgIHsKKwkJTU1fV2FpdCgyMCk7CisJCVJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlN0YXR1cywgTUFDX1NUQVRVU19TWU5DX0NIQU5HRUQgfAorCQkgICAgTUFDX1NUQVRVU19DRkdfQ0hBTkdFRCk7CisJCU1NX1dhaXQoMjApOworCQlpZiAoKFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLlN0YXR1cykgJgorCQkgICAgKE1BQ19TVEFUVVNfU1lOQ19DSEFOR0VEIHwgTUFDX1NUQVRVU19DRkdfQ0hBTkdFRCkpID09IDApCisJCSAgICBicmVhazsKKwkgICAgfQorCSAgICBpZiAocERldmljZS0+UG9sbFRiaUxpbmspCisJICAgIHsKKwkJVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLlN0YXR1cyk7CisJCWlmIChWYWx1ZTMyICYgTUFDX1NUQVRVU19SRUNFSVZJTkdfQ0ZHKQorCQl7CisJCSAgICBwRGV2aWNlLT5JZ25vcmVUYmlMaW5rQ2hhbmdlID0gVFJVRTsKKwkJfQorCQllbHNlCisJCXsKKwkJICAgIHBEZXZpY2UtPklnbm9yZVRiaUxpbmtDaGFuZ2UgPSBGQUxTRTsKKwkJfQorCSAgICB9CisJICAgIFZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgTWFjQ3RybC5TdGF0dXMpOworCSAgICBpZiAoQ3VycmVudExpbmtTdGF0dXMgPT0gTE1fU1RBVFVTX0xJTktfRE9XTiAmJgorCQkgKFZhbHVlMzIgJiBNQUNfU1RBVFVTX1BDU19TWU5DRUQpICYmCisJCSAoKFZhbHVlMzIgJiBNQUNfU1RBVFVTX1JFQ0VJVklOR19DRkcpID09IDApKQorCSAgICB7CisJCUN1cnJlbnRMaW5rU3RhdHVzID0gTE1fU1RBVFVTX0xJTktfQUNUSVZFOworCSAgICB9CisJfQorCWVsc2UKKwl7CisJICAgIC8qIFdlIGFyZSBmb3JjaW5nIGxpbmUgc3BlZWQuICovCisJICAgIHBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICY9IH5MTV9GTE9XX0NPTlRST0xfQVVUT19QQVVTRTsKKwkgICAgTE1fU2V0Rmxvd0NvbnRyb2wocERldmljZSwgMCwgMCk7CiAKLSAgICAgICAgICAgIEN1cnJlbnRMaW5rU3RhdHVzID0gTE1fU1RBVFVTX0xJTktfQUNUSVZFOwotICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgcERldmljZS0+TWFjTW9kZSB8Ci0gICAgICAgICAgICAgICAgTUFDX01PREVfU0VORF9DT05GSUdTKTsKLSAgICAgICAgfQorCSAgICBDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX0FDVElWRTsKKwkgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgcERldmljZS0+TWFjTW9kZSB8CisJCU1BQ19NT0RFX1NFTkRfQ09ORklHUyk7CisJfQogICAgIH0KICAgICAvKiBTZXQgdGhlIGxpbmsgcG9sYXJpdHkgYml0LiAqLwogICAgIHBEZXZpY2UtPk1hY01vZGUgJj0gfk1BQ19NT0RFX0xJTktfUE9MQVJJVFk7CiAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgcERldmljZS0+TWFjTW9kZSk7CiAKICAgICBwRGV2aWNlLT5wU3RhdHVzQmxrVmlydC0+U3RhdHVzID0gU1RBVFVTX0JMT0NLX1VQREFURUQgfAotICAgICAgICAocERldmljZS0+cFN0YXR1c0Jsa1ZpcnQtPlN0YXR1cyAmIH5TVEFUVVNfQkxPQ0tfTElOS19DSEFOR0VEX1NUQVRVUyk7CisJKHBEZXZpY2UtPnBTdGF0dXNCbGtWaXJ0LT5TdGF0dXMgJiB+U1RBVFVTX0JMT0NLX0xJTktfQ0hBTkdFRF9TVEFUVVMpOwogCiAgICAgZm9yIChqID0gMDsgaiA8IDEwMDsgaisrKQogICAgIHsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuU3RhdHVzLCBNQUNfU1RBVFVTX1NZTkNfQ0hBTkdFRCB8Ci0gICAgICAgICAgICBNQUNfU1RBVFVTX0NGR19DSEFOR0VEKTsKLSAgICAgICAgTU1fV2FpdCg1KTsKLSAgICAgICAgaWYgKChSRUdfUkQocERldmljZSwgTWFjQ3RybC5TdGF0dXMpICYKLSAgICAgICAgICAgIChNQUNfU1RBVFVTX1NZTkNfQ0hBTkdFRCB8IE1BQ19TVEFUVVNfQ0ZHX0NIQU5HRUQpKSA9PSAwKQotICAgICAgICAgICAgYnJlYWs7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuU3RhdHVzLCBNQUNfU1RBVFVTX1NZTkNfQ0hBTkdFRCB8CisJICAgIE1BQ19TVEFUVVNfQ0ZHX0NIQU5HRUQpOworCU1NX1dhaXQoNSk7CisJaWYgKChSRUdfUkQocERldmljZSwgTWFjQ3RybC5TdGF0dXMpICYKKwkgICAgKE1BQ19TVEFUVVNfU1lOQ19DSEFOR0VEIHwgTUFDX1NUQVRVU19DRkdfQ0hBTkdFRCkpID09IDApCisJICAgIGJyZWFrOwogICAgIH0KIAogICAgIFZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgTWFjQ3RybC5TdGF0dXMpOwogICAgIGlmKChWYWx1ZTMyICYgTUFDX1NUQVRVU19QQ1NfU1lOQ0VEKSA9PSAwKQogICAgIHsKLSAgICAgICAgQ3VycmVudExpbmtTdGF0dXMgPSBMTV9TVEFUVVNfTElOS19ET1dOOwotICAgICAgICBpZiAocERldmljZS0+RGlzYWJsZUF1dG9OZWcgPT0gRkFMU0UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1vZGUsIHBEZXZpY2UtPk1hY01vZGUgfAotICAgICAgICAgICAgICAgIE1BQ19NT0RFX1NFTkRfQ09ORklHUyk7Ci0gICAgICAgICAgICBNTV9XYWl0KDEpOwotICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgcERldmljZS0+TWFjTW9kZSk7Ci0gICAgICAgIH0KKwlDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX0RPV047CisJaWYgKHBEZXZpY2UtPkRpc2FibGVBdXRvTmVnID09IEZBTFNFKQorCXsKKwkgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgcERldmljZS0+TWFjTW9kZSB8CisJCU1BQ19NT0RFX1NFTkRfQ09ORklHUyk7CisJICAgIE1NX1dhaXQoMSk7CisJICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1vZGUsIHBEZXZpY2UtPk1hY01vZGUpOworCX0KICAgICB9CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBjdXJyZW50IGxpbmsgc3RhdHVzLiAqLwogICAgIGlmKEN1cnJlbnRMaW5rU3RhdHVzID09IExNX1NUQVRVU19MSU5LX0FDVElWRSkKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPkxpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTAwME1CUFM7Ci0gICAgICAgIHBEZXZpY2UtPkR1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9GVUxMOwotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5MZWRDdHJsLCBMRURfQ1RSTF9PVkVSUklERV9MSU5LX0xFRCB8Ci0gICAgICAgICAgICBMRURfQ1RSTF8xMDAwTUJQU19MRURfT04pOworCXBEZXZpY2UtPkxpbmVTcGVlZCA9IExNX0xJTkVfU1BFRURfMTAwME1CUFM7CisJcERldmljZS0+RHVwbGV4TW9kZSA9IExNX0RVUExFWF9NT0RFX0ZVTEw7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTGVkQ3RybCwgTEVEX0NUUkxfT1ZFUlJJREVfTElOS19MRUQgfAorCSAgICBMRURfQ1RSTF8xMDAwTUJQU19MRURfT04pOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBwRGV2aWNlLT5MaW5lU3BlZWQgPSBMTV9MSU5FX1NQRUVEX1VOS05PV047Ci0gICAgICAgIHBEZXZpY2UtPkR1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9VTktOT1dOOwotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5MZWRDdHJsLCBMRURfQ1RSTF9PVkVSUklERV9MSU5LX0xFRCB8Ci0gICAgICAgICAgICBMRURfQ1RSTF9PVkVSUklERV9UUkFGRklDX0xFRCk7CisJcERldmljZS0+TGluZVNwZWVkID0gTE1fTElORV9TUEVFRF9VTktOT1dOOworCXBEZXZpY2UtPkR1cGxleE1vZGUgPSBMTV9EVVBMRVhfTU9ERV9VTktOT1dOOworCVJFR19XUihwRGV2aWNlLCBNYWNDdHJsLkxlZEN0cmwsIExFRF9DVFJMX09WRVJSSURFX0xJTktfTEVEIHwKKwkgICAgTEVEX0NUUkxfT1ZFUlJJREVfVFJBRkZJQ19MRUQpOwogICAgIH0KIAogICAgIC8qIEluZGljYXRlIGxpbmsgc3RhdHVzLiAqLwogICAgIGlmIChwRGV2aWNlLT5MaW5rU3RhdHVzICE9IEN1cnJlbnRMaW5rU3RhdHVzKSB7Ci0gICAgICAgIHBEZXZpY2UtPkxpbmtTdGF0dXMgPSBDdXJyZW50TGlua1N0YXR1czsKLSAgICAgICAgTU1fSW5kaWNhdGVTdGF0dXMocERldmljZSwgQ3VycmVudExpbmtTdGF0dXMpOworCXBEZXZpY2UtPkxpbmtTdGF0dXMgPSBDdXJyZW50TGlua1N0YXR1czsKKwlNTV9JbmRpY2F0ZVN0YXR1cyhwRGV2aWNlLCBDdXJyZW50TGlua1N0YXR1cyk7CiAgICAgfQogCiAgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOwpAQCAtNTAwNSw3ICs0OTg3LDcgQEAKIAogICAgIC8qIENsZWFyIGxpbmsgY2hhbmdlIGF0dGVudGlvbi4gKi8KICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5TdGF0dXMsIE1BQ19TVEFUVVNfU1lOQ19DSEFOR0VEIHwKLSAgICAgICAgTUFDX1NUQVRVU19DRkdfQ0hBTkdFRCk7CisJTUFDX1NUQVRVU19DRkdfQ0hBTkdFRCk7CiAKICAgICAvKiBEaXNhYmxlIGF1dG8tcG9sbGluZyBmb3IgdGhlIG1vbWVudC4gKi8KICAgICBwRGV2aWNlLT5NaU1vZGUgPSAweGMwMDAwOwpAQCAtNTAxNSwxNDcgKzQ5OTcsMTQ3IEBACiAgICAgLyogRGV0ZXJtaW5lIHRoZSByZXF1ZXN0ZWQgbGluZSBzcGVlZCBhbmQgZHVwbGV4LiAqLwogICAgIHBEZXZpY2UtPk9sZExpbmVTcGVlZCA9IHBEZXZpY2UtPkxpbmVTcGVlZDsKICAgICBMTV9UcmFuc2xhdGVSZXF1ZXN0ZWRNZWRpYVR5cGUocERldmljZS0+UmVxdWVzdGVkTWVkaWFUeXBlLAotICAgICAgICAmcERldmljZS0+TWVkaWFUeXBlLCAmcERldmljZS0+TGluZVNwZWVkLCAmcERldmljZS0+RHVwbGV4TW9kZSk7CisJJnBEZXZpY2UtPk1lZGlhVHlwZSwgJnBEZXZpY2UtPkxpbmVTcGVlZCwgJnBEZXZpY2UtPkR1cGxleE1vZGUpOwogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgcGh5IGNoaXAuICovCiAgICAgc3dpdGNoKHBEZXZpY2UtPlBoeUlkICYgUEhZX0lEX01BU0spCiAgICAgewotICAgICAgICBjYXNlIFBIWV9CQ001NDAwX1BIWV9JRDoKLSAgICAgICAgY2FzZSBQSFlfQkNNNTQwMV9QSFlfSUQ6Ci0gICAgICAgIGNhc2UgUEhZX0JDTTU0MTFfUEhZX0lEOgotICAgICAgICBjYXNlIFBIWV9CQ001NzAxX1BIWV9JRDoKLSAgICAgICAgY2FzZSBQSFlfQkNNNTcwM19QSFlfSUQ6Ci0gICAgICAgIGNhc2UgUEhZX0JDTTU3MDRfUEhZX0lEOgotICAgICAgICAgICAgQ3VycmVudExpbmtTdGF0dXMgPSBMTV9Jbml0QmNtNTQweFBoeShwRGV2aWNlKTsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgUEhZX0JDTTU0MDBfUEhZX0lEOgorCWNhc2UgUEhZX0JDTTU0MDFfUEhZX0lEOgorCWNhc2UgUEhZX0JDTTU0MTFfUEhZX0lEOgorCWNhc2UgUEhZX0JDTTU3MDFfUEhZX0lEOgorCWNhc2UgUEhZX0JDTTU3MDNfUEhZX0lEOgorCWNhc2UgUEhZX0JDTTU3MDRfUEhZX0lEOgorCSAgICBDdXJyZW50TGlua1N0YXR1cyA9IExNX0luaXRCY201NDB4UGh5KHBEZXZpY2UpOworCSAgICBicmVhazsKIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7CisJZGVmYXVsdDoKKwkgICAgYnJlYWs7CiAgICAgfQogCiAgICAgaWYoQ3VycmVudExpbmtTdGF0dXMgPT0gTE1fU1RBVFVTX0xJTktfU0VUVElOR19NSVNNQVRDSCkKICAgICB7Ci0gICAgICAgIEN1cnJlbnRMaW5rU3RhdHVzID0gTE1fU1RBVFVTX0xJTktfRE9XTjsKKwlDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX0RPV047CiAgICAgfQogCiAgICAgLyogU2V0dXAgZmxvdyBjb250cm9sLiAqLwogICAgIHBEZXZpY2UtPkZsb3dDb250cm9sID0gTE1fRkxPV19DT05UUk9MX05PTkU7CiAgICAgaWYoQ3VycmVudExpbmtTdGF0dXMgPT0gTE1fU1RBVFVTX0xJTktfQUNUSVZFKQogICAgIHsKLSAgICAgICAgTE1fRkxPV19DT05UUk9MIEZsb3dDYXA7ICAgICAvKiBGbG93IGNvbnRyb2wgY2FwYWJpbGl0eS4gKi8KKwlMTV9GTE9XX0NPTlRST0wgRmxvd0NhcDsgICAgIC8qIEZsb3cgY29udHJvbCBjYXBhYmlsaXR5LiAqLwogCi0gICAgICAgIEZsb3dDYXAgPSBMTV9GTE9XX0NPTlRST0xfTk9ORTsKKwlGbG93Q2FwID0gTE1fRkxPV19DT05UUk9MX05PTkU7CiAKLSAgICAgICAgaWYocERldmljZS0+RHVwbGV4TW9kZSA9PSBMTV9EVVBMRVhfTU9ERV9GVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZihwRGV2aWNlLT5EaXNhYmxlQXV0b05lZyA9PSBGQUxTRSB8fAotICAgICAgICAgICAgICAgIHBEZXZpY2UtPlJlcXVlc3RlZE1lZGlhVHlwZSA9PSBMTV9SRVFVRVNURURfTUVESUFfVFlQRV9BVVRPIHx8Ci0gICAgICAgICAgICAgICAgcERldmljZS0+UmVxdWVzdGVkTWVkaWFUeXBlID09IExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX1VUUF9BVVRPKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExNX1VJTlQzMiBFeHBlY3RlZFBoeUFkOwotICAgICAgICAgICAgICAgIExNX1VJTlQzMiBMb2NhbFBoeUFkOwotICAgICAgICAgICAgICAgIExNX1VJTlQzMiBSZW1vdGVQaHlBZDsKKwlpZihwRGV2aWNlLT5EdXBsZXhNb2RlID09IExNX0RVUExFWF9NT0RFX0ZVTEwpCisJeworCSAgICBpZihwRGV2aWNlLT5EaXNhYmxlQXV0b05lZyA9PSBGQUxTRSB8fAorCQlwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUgPT0gTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfQVVUTyB8fAorCQlwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUgPT0gTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfVVRQX0FVVE8pCisJICAgIHsKKwkJTE1fVUlOVDMyIEV4cGVjdGVkUGh5QWQ7CisJCUxNX1VJTlQzMiBMb2NhbFBoeUFkOworCQlMTV9VSU5UMzIgUmVtb3RlUGh5QWQ7CiAKLSAgICAgICAgICAgICAgICBMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9BTl9BRF9SRUcsICZMb2NhbFBoeUFkKTsKKwkJTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfQU5fQURfUkVHLCAmTG9jYWxQaHlBZCk7CiAJCXBEZXZpY2UtPmFkdmVydGlzaW5nID0gTG9jYWxQaHlBZDsKLSAgICAgICAgICAgICAgICBMb2NhbFBoeUFkICY9IChQSFlfQU5fQURfQVNZTV9QQVVTRSB8IFBIWV9BTl9BRF9QQVVTRV9DQVBBQkxFKTsKKwkJTG9jYWxQaHlBZCAmPSAoUEhZX0FOX0FEX0FTWU1fUEFVU0UgfCBQSFlfQU5fQURfUEFVU0VfQ0FQQUJMRSk7CiAKLSAgICAgICAgICAgICAgICBFeHBlY3RlZFBoeUFkID0gR2V0UGh5QWRGbG93Q250cmxTZXR0aW5ncyhwRGV2aWNlKTsKKwkJRXhwZWN0ZWRQaHlBZCA9IEdldFBoeUFkRmxvd0NudHJsU2V0dGluZ3MocERldmljZSk7CiAKLSAgICAgICAgICAgICAgICBpZihMb2NhbFBoeUFkICE9IEV4cGVjdGVkUGh5QWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX0RPV047Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIExNX1JlYWRQaHkocERldmljZSwgUEhZX0xJTktfUEFSVE5FUl9BQklMSVRZX1JFRywKLSAgICAgICAgICAgICAgICAgICAgICAgICZSZW1vdGVQaHlBZCk7CisJCWlmKExvY2FsUGh5QWQgIT0gRXhwZWN0ZWRQaHlBZCkKKwkJeworCQkgICAgQ3VycmVudExpbmtTdGF0dXMgPSBMTV9TVEFUVVNfTElOS19ET1dOOworCQl9CisJCWVsc2UKKwkJeworCQkgICAgTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfTElOS19QQVJUTkVSX0FCSUxJVFlfUkVHLAorCQkJJlJlbW90ZVBoeUFkKTsKIAotICAgICAgICAgICAgICAgICAgICBMTV9TZXRGbG93Q29udHJvbChwRGV2aWNlLCBMb2NhbFBoeUFkLCBSZW1vdGVQaHlBZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICY9IH5MTV9GTE9XX0NPTlRST0xfQVVUT19QQVVTRTsKLSAgICAgICAgICAgICAgICBMTV9TZXRGbG93Q29udHJvbChwRGV2aWNlLCAwLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQkgICAgTE1fU2V0Rmxvd0NvbnRyb2wocERldmljZSwgTG9jYWxQaHlBZCwgUmVtb3RlUGh5QWQpOworCQl9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCXBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICY9IH5MTV9GTE9XX0NPTlRST0xfQVVUT19QQVVTRTsKKwkJTE1fU2V0Rmxvd0NvbnRyb2wocERldmljZSwgMCwgMCk7CisJICAgIH0KKwl9CiAgICAgfQogCiAgICAgaWYoQ3VycmVudExpbmtTdGF0dXMgPT0gTE1fU1RBVFVTX0xJTktfRE9XTikKICAgICB7Ci0gICAgICAgIExNX0ZvcmNlQXV0b05lZyhwRGV2aWNlLCBwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUpOworCUxNX0ZvcmNlQXV0b05lZyhwRGV2aWNlLCBwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUpOwogCi0gICAgICAgIC8qIElmIHdlIGZvcmNlIGxpbmUgc3BlZWQsIHdlIG1ha2UgZ2V0IGxpbmsgcmlnaHQgYXdheS4gKi8KLSAgICAgICAgTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfU1RBVFVTX1JFRywgJlZhbHVlMzIpOwotICAgICAgICBMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9TVEFUVVNfUkVHLCAmVmFsdWUzMik7Ci0gICAgICAgIGlmKFZhbHVlMzIgJiBQSFlfU1RBVFVTX0xJTktfUEFTUykKLSAgICAgICAgewotICAgICAgICAgICAgQ3VycmVudExpbmtTdGF0dXMgPSBMTV9TVEFUVVNfTElOS19BQ1RJVkU7Ci0gICAgICAgIH0KKwkvKiBJZiB3ZSBmb3JjZSBsaW5lIHNwZWVkLCB3ZSBtYWtlIGdldCBsaW5rIHJpZ2h0IGF3YXkuICovCisJTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfU1RBVFVTX1JFRywgJlZhbHVlMzIpOworCUxNX1JlYWRQaHkocERldmljZSwgUEhZX1NUQVRVU19SRUcsICZWYWx1ZTMyKTsKKwlpZihWYWx1ZTMyICYgUEhZX1NUQVRVU19MSU5LX1BBU1MpCisJeworCSAgICBDdXJyZW50TGlua1N0YXR1cyA9IExNX1NUQVRVU19MSU5LX0FDVElWRTsKKwl9CiAgICAgfQogCiAgICAgLyogR01JSSBpbnRlcmZhY2UuICovCiAgICAgcERldmljZS0+TWFjTW9kZSAmPSB+TUFDX01PREVfUE9SVF9NT0RFX01BU0s7CiAgICAgaWYoQ3VycmVudExpbmtTdGF0dXMgPT0gTE1fU1RBVFVTX0xJTktfQUNUSVZFKQogICAgIHsKLSAgICAgICAgaWYocERldmljZS0+TGluZVNwZWVkID09IExNX0xJTkVfU1BFRURfMTAwTUJQUyB8fAotICAgICAgICAgICAgcERldmljZS0+TGluZVNwZWVkID09IExNX0xJTkVfU1BFRURfMTBNQlBTKQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5NYWNNb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9NSUk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5NYWNNb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9HTUlJOwotICAgICAgICB9CisJaWYocERldmljZS0+TGluZVNwZWVkID09IExNX0xJTkVfU1BFRURfMTAwTUJQUyB8fAorCSAgICBwRGV2aWNlLT5MaW5lU3BlZWQgPT0gTE1fTElORV9TUEVFRF8xME1CUFMpCisJeworCSAgICBwRGV2aWNlLT5NYWNNb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9NSUk7CisJfQorCWVsc2UKKwl7CisJICAgIHBEZXZpY2UtPk1hY01vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7CisJfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcERldmljZS0+TWFjTW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfR01JSTsKKwlwRGV2aWNlLT5NYWNNb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9HTUlJOwogICAgIH0KIAogICAgIC8qIFNldCB0aGUgTUFDIHRvIG9wZXJhdGUgaW4gdGhlIGFwcHJvcHJpYXRlIGR1cGxleCBtb2RlLiAqLwogICAgIHBEZXZpY2UtPk1hY01vZGUgJj0gfk1BQ19NT0RFX0hBTEZfRFVQTEVYOwogICAgIGlmKHBEZXZpY2UtPkR1cGxleE1vZGUgPT0gTE1fRFVQTEVYX01PREVfSEFMRikKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPk1hY01vZGUgfD0gTUFDX01PREVfSEFMRl9EVVBMRVg7CisJcERldmljZS0+TWFjTW9kZSB8PSBNQUNfTU9ERV9IQUxGX0RVUExFWDsKICAgICB9CiAKICAgICAvKiBTZXQgdGhlIGxpbmsgcG9sYXJpdHkgYml0LiAqLwogICAgIHBEZXZpY2UtPk1hY01vZGUgJj0gfk1BQ19NT0RFX0xJTktfUE9MQVJJVFk7CiAgICAgaWYoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwKQogICAgIHsKLSAgICAgICAgaWYoKHBEZXZpY2UtPkxlZE1vZGUgPT0gTEVEX01PREVfTElOSzEwKSB8fAotICAgICAgICAgICAgIChDdXJyZW50TGlua1N0YXR1cyA9PSBMTV9TVEFUVVNfTElOS19BQ1RJVkUgJiYKLSAgICAgICAgICAgICBwRGV2aWNlLT5MaW5lU3BlZWQgPT0gTE1fTElORV9TUEVFRF8xME1CUFMpKQotICAgICAgICB7Ci0gICAgICAgICAgICBwRGV2aWNlLT5NYWNNb2RlIHw9IE1BQ19NT0RFX0xJTktfUE9MQVJJVFk7Ci0gICAgICAgIH0KKwlpZigocERldmljZS0+TGVkTW9kZSA9PSBMRURfTU9ERV9MSU5LMTApIHx8CisJICAgICAoQ3VycmVudExpbmtTdGF0dXMgPT0gTE1fU1RBVFVTX0xJTktfQUNUSVZFICYmCisJICAgICBwRGV2aWNlLT5MaW5lU3BlZWQgPT0gTE1fTElORV9TUEVFRF8xME1CUFMpKQorCXsKKwkgICAgcERldmljZS0+TWFjTW9kZSB8PSBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZOworCX0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYgKEN1cnJlbnRMaW5rU3RhdHVzID09IExNX1NUQVRVU19MSU5LX0FDVElWRSkKLSAgICAgICAgewotICAgICAgICAgICAgcERldmljZS0+TWFjTW9kZSB8PSBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZOwotICAgICAgICB9CisJaWYgKEN1cnJlbnRMaW5rU3RhdHVzID09IExNX1NUQVRVU19MSU5LX0FDVElWRSkKKwl7CisJICAgIHBEZXZpY2UtPk1hY01vZGUgfD0gTUFDX01PREVfTElOS19QT0xBUklUWTsKKwl9CiAKLSAgICAgICAgLyogU2V0IExFRCBtb2RlLiAqLwotICAgICAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDAgfHwKLSAgICAgICAgICAgIFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMSkKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiA9IExFRF9DVFJMX1BIWV9NT0RFXzE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZihwRGV2aWNlLT5MZWRNb2RlID09IExFRF9NT0RFX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBWYWx1ZTMyID0gTEVEX0NUUkxfUEhZX01PREVfMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBWYWx1ZTMyID0gTEVEX0NUUkxfUEhZX01PREVfMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5MZWRDdHJsLCBWYWx1ZTMyKTsKKwkvKiBTZXQgTEVEIG1vZGUuICovCisJaWYoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwIHx8CisJICAgIFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMSkKKwl7CisJICAgIFZhbHVlMzIgPSBMRURfQ1RSTF9QSFlfTU9ERV8xOworCX0KKwllbHNlCisJeworCSAgICBpZihwRGV2aWNlLT5MZWRNb2RlID09IExFRF9NT0RFX09VVFBVVCkKKwkgICAgeworCQlWYWx1ZTMyID0gTEVEX0NUUkxfUEhZX01PREVfMjsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJVmFsdWUzMiA9IExFRF9DVFJMX1BIWV9NT0RFXzE7CisJICAgIH0KKwl9CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTGVkQ3RybCwgVmFsdWUzMik7CiAgICAgfQogCiAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgcERldmljZS0+TWFjTW9kZSk7CkBAIC01MTYzLDM4ICs1MTQ1LDM4IEBACiAgICAgLyogRW5hYmxlIGF1dG8gcG9sbGluZy4gKi8KICAgICBpZihwRGV2aWNlLT5QaHlJbnRNb2RlID09IFQzX1BIWV9JTlRfTU9ERV9BVVRPX1BPTExJTkcpCiAgICAgewotICAgICAgICBwRGV2aWNlLT5NaU1vZGUgfD0gTUlfTU9ERV9BVVRPX1BPTExJTkdfRU5BQkxFOwotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5NaU1vZGUsIHBEZXZpY2UtPk1pTW9kZSk7CisJcERldmljZS0+TWlNb2RlIHw9IE1JX01PREVfQVVUT19QT0xMSU5HX0VOQUJMRTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5NaU1vZGUsIHBEZXZpY2UtPk1pTW9kZSk7CiAgICAgfQogCiAgICAgLyogRW5hYmxlIHBoeSBsaW5rIGNoYW5nZSBhdHRlbnRpb24uICovCiAgICAgaWYocERldmljZS0+UGh5SW50TW9kZSA9PSBUM19QSFlfSU5UX01PREVfTUlfSU5URVJSVVBUKQogICAgIHsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTWFjRXZlbnQsIE1BQ19FVkVOVF9FTkFCTEVfTUlfSU5URVJSVVBUKTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5NYWNFdmVudCwgTUFDX0VWRU5UX0VOQUJMRV9NSV9JTlRFUlJVUFQpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5NYWNFdmVudCwKLSAgICAgICAgICAgIE1BQ19FVkVOVF9FTkFCTEVfTElOS19TVEFURV9DSEFOR0VEX0FUVE4pOworCVJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1hY0V2ZW50LAorCSAgICBNQUNfRVZFTlRfRU5BQkxFX0xJTktfU1RBVEVfQ0hBTkdFRF9BVFROKTsKICAgICB9CiAgICAgaWYgKChUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDApICYmCi0gICAgICAgIChDdXJyZW50TGlua1N0YXR1cyA9PSBMTV9TVEFUVVNfTElOS19BQ1RJVkUpICYmCi0gICAgICAgIChwRGV2aWNlLT5MaW5lU3BlZWQgPT0gTE1fTElORV9TUEVFRF8xMDAwTUJQUykgJiYKLSAgICAgICAgKCgocERldmljZS0+UGNpU3RhdGUgJiBUM19QQ0lfU1RBVEVfQ09OVkVOVElPTkFMX1BDSV9NT0RFKSAmJgotICAgICAgICAgIChwRGV2aWNlLT5QY2lTdGF0ZSAmIFQzX1BDSV9TVEFURV9CVVNfU1BFRURfSElHSCkpIHx8Ci0gICAgICAgICAhKHBEZXZpY2UtPlBjaVN0YXRlICYgVDNfUENJX1NUQVRFX0NPTlZFTlRJT05BTF9QQ0lfTU9ERSkpKQorCShDdXJyZW50TGlua1N0YXR1cyA9PSBMTV9TVEFUVVNfTElOS19BQ1RJVkUpICYmCisJKHBEZXZpY2UtPkxpbmVTcGVlZCA9PSBMTV9MSU5FX1NQRUVEXzEwMDBNQlBTKSAmJgorCSgoKHBEZXZpY2UtPlBjaVN0YXRlICYgVDNfUENJX1NUQVRFX0NPTlZFTlRJT05BTF9QQ0lfTU9ERSkgJiYKKwkgIChwRGV2aWNlLT5QY2lTdGF0ZSAmIFQzX1BDSV9TVEFURV9CVVNfU1BFRURfSElHSCkpIHx8CisJICEocERldmljZS0+UGNpU3RhdGUgJiBUM19QQ0lfU1RBVEVfQ09OVkVOVElPTkFMX1BDSV9NT0RFKSkpCiAgICAgewotICAgICAgICBNTV9XYWl0KDEyMCk7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlN0YXR1cywgTUFDX1NUQVRVU19TWU5DX0NIQU5HRUQgfAotICAgICAgICAgICAgTUFDX1NUQVRVU19DRkdfQ0hBTkdFRCk7Ci0gICAgICAgIE1FTV9XUl9PRkZTRVQocERldmljZSwgVDNfRklSTVdBUkVfTUFJTEJPWCwKLSAgICAgICAgICAgIFQzX01BR0lDX05VTV9ESVNBQkxFX0RNQVdfT05fTElOS19DSEFOR0UpOworCU1NX1dhaXQoMTIwKTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5TdGF0dXMsIE1BQ19TVEFUVVNfU1lOQ19DSEFOR0VEIHwKKwkgICAgTUFDX1NUQVRVU19DRkdfQ0hBTkdFRCk7CisJTUVNX1dSX09GRlNFVChwRGV2aWNlLCBUM19GSVJNV0FSRV9NQUlMQk9YLAorCSAgICBUM19NQUdJQ19OVU1fRElTQUJMRV9ETUFXX09OX0xJTktfQ0hBTkdFKTsKICAgICB9CiAKICAgICAvKiBJbmRpY2F0ZSBsaW5rIHN0YXR1cy4gKi8KICAgICBpZiAocERldmljZS0+TGlua1N0YXR1cyAhPSBDdXJyZW50TGlua1N0YXR1cykgewotICAgICAgICBwRGV2aWNlLT5MaW5rU3RhdHVzID0gQ3VycmVudExpbmtTdGF0dXM7Ci0gICAgICAgIE1NX0luZGljYXRlU3RhdHVzKHBEZXZpY2UsIEN1cnJlbnRMaW5rU3RhdHVzKTsKKwlwRGV2aWNlLT5MaW5rU3RhdHVzID0gQ3VycmVudExpbmtTdGF0dXM7CisJTU1fSW5kaWNhdGVTdGF0dXMocERldmljZSwgQ3VycmVudExpbmtTdGF0dXMpOwogICAgIH0KIAogICAgIHJldHVybiBMTV9TVEFUVVNfU1VDQ0VTUzsKQEAgLTUyMTUsMzAgKzUxOTcsMzAgQEAKICNpZiBJTkNMVURFX1RCSV9TVVBQT1JUCiAgICAgaWYocERldmljZS0+RW5hYmxlVGJpKQogICAgIHsKLSAgICAgICAgTG1TdGF0dXMgPSBMTV9TZXR1cEZpYmVyUGh5KHBEZXZpY2UpOworCUxtU3RhdHVzID0gTE1fU2V0dXBGaWJlclBoeShwRGV2aWNlKTsKICAgICB9CiAgICAgZWxzZQogI2VuZGlmIC8qIElOQ0xVREVfVEJJX1NVUFBPUlQgKi8KICAgICB7Ci0gICAgICAgIExtU3RhdHVzID0gTE1fU2V0dXBDb3BwZXJQaHkocERldmljZSk7CisJTG1TdGF0dXMgPSBMTV9TZXR1cENvcHBlclBoeShwRGV2aWNlKTsKICAgICB9CiAgICAgaWYgKHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDRfQTApCiAgICAgewotICAgICAgICBpZiAoIShwRGV2aWNlLT5QY2lTdGF0ZSAmIFQzX1BDSV9TVEFURV9DT05WRU5USU9OQUxfUENJX01PREUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBWYWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIFBjaUNmZy5QY2lTdGF0ZSk7Ci0gICAgICAgICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLlBjaVN0YXRlLAotICAgICAgICAgICAgICAgIFZhbHVlMzIgfCBUM19QQ0lfU1RBVEVfUkVUUllfU0FNRV9ETUEpOwotICAgICAgICB9CisJaWYgKCEocERldmljZS0+UGNpU3RhdGUgJiBUM19QQ0lfU1RBVEVfQ09OVkVOVElPTkFMX1BDSV9NT0RFKSkKKwl7CisJICAgIFZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgUGNpQ2ZnLlBjaVN0YXRlKTsKKwkgICAgUkVHX1dSKHBEZXZpY2UsIFBjaUNmZy5QY2lTdGF0ZSwKKwkJVmFsdWUzMiB8IFQzX1BDSV9TVEFURV9SRVRSWV9TQU1FX0RNQSk7CisJfQogICAgIH0KICAgICBpZiAoKHBEZXZpY2UtPkxpbmVTcGVlZCA9PSBMTV9MSU5FX1NQRUVEXzEwMDBNQlBTKSAmJgotICAgICAgICAocERldmljZS0+RHVwbGV4TW9kZSA9PSBMTV9EVVBMRVhfTU9ERV9IQUxGKSkKKwkocERldmljZS0+RHVwbGV4TW9kZSA9PSBMTV9EVVBMRVhfTU9ERV9IQUxGKSkKICAgICB7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlR4TGVuZ3RocywgMHgyNmZmKTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5UeExlbmd0aHMsIDB4MjZmZik7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLlR4TGVuZ3RocywgMHgyNjIwKTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5UeExlbmd0aHMsIDB4MjYyMCk7CiAgICAgfQogCiAgICAgcmV0dXJuIExtU3RhdHVzOwpAQCAtNTI1OSw0OCArNTI0MSw0NyBAQAogCiAgICAgaWYocERldmljZS0+UGh5SW50TW9kZSA9PSBUM19QSFlfSU5UX01PREVfQVVUT19QT0xMSU5HKQogICAgIHsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTWlNb2RlLCBwRGV2aWNlLT5NaU1vZGUgJgotICAgICAgICAgICAgfk1JX01PREVfQVVUT19QT0xMSU5HX0VOQUJMRSk7Ci0gICAgICAgIE1NX1dhaXQoNDApOworCVJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1pTW9kZSwgcERldmljZS0+TWlNb2RlICYKKwkgICAgfk1JX01PREVfQVVUT19QT0xMSU5HX0VOQUJMRSk7CisJTU1fV2FpdCg0MCk7CiAgICAgfQogCiAgICAgVmFsdWUzMiA9IChwRGV2aWNlLT5QaHlBZGRyIDw8IE1JX0NPTV9GSVJTVF9QSFlfQUREUl9CSVQpIHwKLSAgICAgICAgKChQaHlSZWcgJiBNSV9DT01fUEhZX1JFR19BRERSX01BU0spIDw8IE1JX0NPTV9GSVJTVF9QSFlfUkVHX0FERFJfQklUKSB8Ci0gICAgICAgIE1JX0NPTV9DTURfUkVBRCB8IE1JX0NPTV9TVEFSVDsKKwkoKFBoeVJlZyAmIE1JX0NPTV9QSFlfUkVHX0FERFJfTUFTSykgPDwgTUlfQ09NX0ZJUlNUX1BIWV9SRUdfQUREUl9CSVQpIHwKKwlNSV9DT01fQ01EX1JFQUQgfCBNSV9DT01fU1RBUlQ7CiAKICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5NaUNvbSwgVmFsdWUzMik7CiAKICAgICBmb3IoaiA9IDA7IGogPCAyMDsgaisrKQogICAgIHsKLSAgICAgICAgTU1fV2FpdCgyNSk7CisJTU1fV2FpdCgyNSk7CiAKLSAgICAgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLk1pQ29tKTsKKwlWYWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIE1hY0N0cmwuTWlDb20pOwogCi0gICAgICAgIGlmKCEoVmFsdWUzMiAmIE1JX0NPTV9CVVNZKSkKLSAgICAgICAgewotICAgICAgICAgICAgTU1fV2FpdCg1KTsKLSAgICAgICAgICAgIFZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgTWFjQ3RybC5NaUNvbSk7Ci0gICAgICAgICAgICBWYWx1ZTMyICY9IE1JX0NPTV9QSFlfREFUQV9NQVNLOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlpZighKFZhbHVlMzIgJiBNSV9DT01fQlVTWSkpCisJeworCSAgICBNTV9XYWl0KDUpOworCSAgICBWYWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIE1hY0N0cmwuTWlDb20pOworCSAgICBWYWx1ZTMyICY9IE1JX0NPTV9QSFlfREFUQV9NQVNLOworCSAgICBicmVhazsKKwl9CiAgICAgfQogCiAgICAgaWYoVmFsdWUzMiAmIE1JX0NPTV9CVVNZKQogICAgIHsKLSAgICAgICAgVmFsdWUzMiA9IDA7CisJVmFsdWUzMiA9IDA7CiAgICAgfQogCiAgICAgKnBEYXRhMzIgPSBWYWx1ZTMyOwogCiAgICAgaWYocERldmljZS0+UGh5SW50TW9kZSA9PSBUM19QSFlfSU5UX01PREVfQVVUT19QT0xMSU5HKQogICAgIHsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTWlNb2RlLCBwRGV2aWNlLT5NaU1vZGUpOwotICAgICAgICBNTV9XYWl0KDQwKTsKKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5NaU1vZGUsIHBEZXZpY2UtPk1pTW9kZSk7CisJTU1fV2FpdCg0MCk7CiAgICAgfQogfSAvKiBMTV9SZWFkUGh5ICovCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01MzE2LDM0ICs1Mjk3LDM0IEBACiAKICAgICBpZihwRGV2aWNlLT5QaHlJbnRNb2RlID09IFQzX1BIWV9JTlRfTU9ERV9BVVRPX1BPTExJTkcpCiAgICAgewotICAgICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5NaU1vZGUsIHBEZXZpY2UtPk1pTW9kZSAmCi0gICAgICAgICAgICB+TUlfTU9ERV9BVVRPX1BPTExJTkdfRU5BQkxFKTsKLSAgICAgICAgTU1fV2FpdCg0MCk7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTWlNb2RlLCBwRGV2aWNlLT5NaU1vZGUgJgorCSAgICB+TUlfTU9ERV9BVVRPX1BPTExJTkdfRU5BQkxFKTsKKwlNTV9XYWl0KDQwKTsKICAgICB9CiAKICAgICBWYWx1ZTMyID0gKHBEZXZpY2UtPlBoeUFkZHIgPDwgTUlfQ09NX0ZJUlNUX1BIWV9BRERSX0JJVCkgfAotICAgICAgICAoKFBoeVJlZyAmIE1JX0NPTV9QSFlfUkVHX0FERFJfTUFTSykgPDwgTUlfQ09NX0ZJUlNUX1BIWV9SRUdfQUREUl9CSVQpIHwKLSAgICAgICAgKERhdGEzMiAmIE1JX0NPTV9QSFlfREFUQV9NQVNLKSB8IE1JX0NPTV9DTURfV1JJVEUgfCBNSV9DT01fU1RBUlQ7CisJKChQaHlSZWcgJiBNSV9DT01fUEhZX1JFR19BRERSX01BU0spIDw8IE1JX0NPTV9GSVJTVF9QSFlfUkVHX0FERFJfQklUKSB8CisJKERhdGEzMiAmIE1JX0NPTV9QSFlfREFUQV9NQVNLKSB8IE1JX0NPTV9DTURfV1JJVEUgfCBNSV9DT01fU1RBUlQ7CiAKICAgICBSRUdfV1IocERldmljZSwgTWFjQ3RybC5NaUNvbSwgVmFsdWUzMik7CiAKICAgICBmb3IoaiA9IDA7IGogPCAyMDsgaisrKQogICAgIHsKLSAgICAgICAgTU1fV2FpdCgyNSk7CisJTU1fV2FpdCgyNSk7CiAKLSAgICAgICAgVmFsdWUzMiA9IFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLk1pQ29tKTsKKwlWYWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIE1hY0N0cmwuTWlDb20pOwogCi0gICAgICAgIGlmKCEoVmFsdWUzMiAmIE1JX0NPTV9CVVNZKSkKLSAgICAgICAgewotICAgICAgICAgICAgTU1fV2FpdCg1KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJaWYoIShWYWx1ZTMyICYgTUlfQ09NX0JVU1kpKQorCXsKKwkgICAgTU1fV2FpdCg1KTsKKwkgICAgYnJlYWs7CisJfQogICAgIH0KIAogICAgIGlmKHBEZXZpY2UtPlBoeUludE1vZGUgPT0gVDNfUEhZX0lOVF9NT0RFX0FVVE9fUE9MTElORykKICAgICB7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1pTW9kZSwgcERldmljZS0+TWlNb2RlKTsKLSAgICAgICAgTU1fV2FpdCg0MCk7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTWlNb2RlLCBwRGV2aWNlLT5NaU1vZGUpOworCU1NX1dhaXQoNDApOwogICAgIH0KIH0gLyogTE1fV3JpdGVQaHkgKi8KIApAQCAtNTM3NSwzMyArNTM1NiwzMyBAQAogICAgIGlmKFBvd2VyTGV2ZWwgPT0gTE1fUE9XRVJfU1RBVEVfRDApCiAgICAgewogCi0gICAgICAgIC8qIEJyaW5nIHRoZSBjYXJkIG91dCBvZiBsb3cgcG93ZXIgbW9kZS4gKi8KLSAgICAgICAgUG1DdHJsIHw9IFQzX1BNX1BPV0VSX1NUQVRFX0QwOwotICAgICAgICBNTV9Xcml0ZUNvbmZpZzMyKHBEZXZpY2UsIFQzX1BDSV9QTV9TVEFUVVNfQ1RSTF9SRUcsIFBtQ3RybCk7CisJLyogQnJpbmcgdGhlIGNhcmQgb3V0IG9mIGxvdyBwb3dlciBtb2RlLiAqLworCVBtQ3RybCB8PSBUM19QTV9QT1dFUl9TVEFURV9EMDsKKwlNTV9Xcml0ZUNvbmZpZzMyKHBEZXZpY2UsIFQzX1BDSV9QTV9TVEFUVVNfQ1RSTF9SRUcsIFBtQ3RybCk7CiAKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIEdyYy5Mb2NhbEN0cmwsIHBEZXZpY2UtPkdyY0xvY2FsQ3RybCk7Ci0gICAgICAgIE1NX1dhaXQgKDQwKTsKKwlSRUdfV1IocERldmljZSwgR3JjLkxvY2FsQ3RybCwgcERldmljZS0+R3JjTG9jYWxDdHJsKTsKKwlNTV9XYWl0ICg0MCk7CiAjaWYgMCAgIC8qIEJ1Z2ZpeCBieSBqbWIuLi5jYW4ndCBjYWxsIFdyaXRlUGh5IGhlcmUgYmVjYXVzZSBwRGV2aWNlIG5vdCBmdWxseSBpbml0aWFsaXplZCAqLwotICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDAxX0FVWF9DVFJMLCAweDAyKTsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDAxX0FVWF9DVFJMLCAweDAyKTsKICNlbmRpZgogCi0gICAgICAgIHJldHVybiBMTV9TVEFUVVNfU1VDQ0VTUzsKKwlyZXR1cm4gTE1fU1RBVFVTX1NVQ0NFU1M7CiAgICAgfQogICAgIGVsc2UgaWYoUG93ZXJMZXZlbCA9PSBMTV9QT1dFUl9TVEFURV9EMSkKICAgICB7Ci0gICAgICAgIFBtQ3RybCB8PSBUM19QTV9QT1dFUl9TVEFURV9EMTsKKwlQbUN0cmwgfD0gVDNfUE1fUE9XRVJfU1RBVEVfRDE7CiAgICAgfQogICAgIGVsc2UgaWYoUG93ZXJMZXZlbCA9PSBMTV9QT1dFUl9TVEFURV9EMikKICAgICB7Ci0gICAgICAgIFBtQ3RybCB8PSBUM19QTV9QT1dFUl9TVEFURV9EMjsKKwlQbUN0cmwgfD0gVDNfUE1fUE9XRVJfU1RBVEVfRDI7CiAgICAgfQogICAgIGVsc2UgaWYoUG93ZXJMZXZlbCA9PSBMTV9QT1dFUl9TVEFURV9EMykKICAgICB7Ci0gICAgICAgIFBtQ3RybCB8PSBUM19QTV9QT1dFUl9TVEFURV9EMzsKKwlQbUN0cmwgfD0gVDNfUE1fUE9XRVJfU1RBVEVfRDM7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKKwlyZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7CiAgICAgfQogICAgIFBtQ3RybCB8PSBUM19QTV9QTUVfRU5BQkxFOwogCkBAIC01NDEyLDkgKzUzOTMsOSBAQAogCiAgICAgaWYoIXBEZXZpY2UtPlJlc3RvcmVPbldha2VVcCkKICAgICB7Ci0gICAgICAgIHBEZXZpY2UtPlJlc3RvcmVPbldha2VVcCA9IFRSVUU7Ci0gICAgICAgIHBEZXZpY2UtPldha2VVcERpc2FibGVBdXRvTmVnID0gcERldmljZS0+RGlzYWJsZUF1dG9OZWc7Ci0gICAgICAgIHBEZXZpY2UtPldha2VVcFJlcXVlc3RlZE1lZGlhVHlwZSA9IHBEZXZpY2UtPlJlcXVlc3RlZE1lZGlhVHlwZTsKKwlwRGV2aWNlLT5SZXN0b3JlT25XYWtlVXAgPSBUUlVFOworCXBEZXZpY2UtPldha2VVcERpc2FibGVBdXRvTmVnID0gcERldmljZS0+RGlzYWJsZUF1dG9OZWc7CisJcERldmljZS0+V2FrZVVwUmVxdWVzdGVkTWVkaWFUeXBlID0gcERldmljZS0+UmVxdWVzdGVkTWVkaWFUeXBlOwogICAgIH0KIAogICAgIC8qIEZvcmNlIGF1dG8tbmVnb3RpYXRpb24gdG8gMTAgbGluZSBzcGVlZC4gKi8KQEAgLTU0MzEsMTY4ICs1NDEyLDE2OCBAQAogICAgIGlmIChwRGV2aWNlLT5XYWtlVXBNb2RlQ2FwICE9IExNX1dBS0VfVVBfTU9ERV9OT05FKQogICAgIHsKIAotICAgICAgICAvKiBFbmFibGUgV09MLiAqLwotICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDAxX0FVWF9DVFJMLCAweDVhKTsKLSAgICAgICAgTU1fV2FpdCg0MCk7CisJLyogRW5hYmxlIFdPTC4gKi8KKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDAxX0FVWF9DVFJMLCAweDVhKTsKKwlNTV9XYWl0KDQwKTsKIAotICAgICAgICAvKiBTZXQgTEVEIG1vZGUuICovCi0gICAgICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCB8fAotICAgICAgICAgICAgVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBWYWx1ZTMyID0gTEVEX0NUUkxfUEhZX01PREVfMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKHBEZXZpY2UtPkxlZE1vZGUgPT0gTEVEX01PREVfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFZhbHVlMzIgPSBMRURfQ1RSTF9QSFlfTU9ERV8yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFZhbHVlMzIgPSBMRURfQ1RSTF9QSFlfTU9ERV8xOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJLyogU2V0IExFRCBtb2RlLiAqLworCWlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCB8fAorCSAgICBUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDEpCisJeworCSAgICBWYWx1ZTMyID0gTEVEX0NUUkxfUEhZX01PREVfMTsKKwl9CisJZWxzZQorCXsKKwkgICAgaWYocERldmljZS0+TGVkTW9kZSA9PSBMRURfTU9ERV9PVVRQVVQpCisJICAgIHsKKwkJVmFsdWUzMiA9IExFRF9DVFJMX1BIWV9NT0RFXzI7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCVZhbHVlMzIgPSBMRURfQ1RSTF9QSFlfTU9ERV8xOworCSAgICB9CisJfQogCi0gICAgICAgIFZhbHVlMzIgPSBNQUNfTU9ERV9QT1JUX01PREVfTUlJOwotICAgICAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKHBEZXZpY2UtPkxlZE1vZGUgPT0gTEVEX01PREVfTElOSzEwIHx8Ci0gICAgICAgICAgICAgICAgcERldmljZS0+V29sU3BlZWQgPT0gV09MX1NQRUVEXzEwTUIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVmFsdWUzMiB8PSBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiB8PSBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZOwotICAgICAgICB9Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1vZGUsIFZhbHVlMzIpOwotICAgICAgICBNTV9XYWl0KDQwKTsgTU1fV2FpdCg0MCk7IE1NX1dhaXQoNDApOworCVZhbHVlMzIgPSBNQUNfTU9ERV9QT1JUX01PREVfTUlJOworCWlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCkKKwl7CisJICAgIGlmKHBEZXZpY2UtPkxlZE1vZGUgPT0gTEVEX01PREVfTElOSzEwIHx8CisJCXBEZXZpY2UtPldvbFNwZWVkID09IFdPTF9TUEVFRF8xME1CKQorCSAgICB7CisJCVZhbHVlMzIgfD0gTUFDX01PREVfTElOS19QT0xBUklUWTsKKwkgICAgfQorCX0KKwllbHNlCisJeworCSAgICBWYWx1ZTMyIHw9IE1BQ19NT0RFX0xJTktfUE9MQVJJVFk7CisJfQorCVJFR19XUihwRGV2aWNlLCBNYWNDdHJsLk1vZGUsIFZhbHVlMzIpOworCU1NX1dhaXQoNDApOyBNTV9XYWl0KDQwKTsgTU1fV2FpdCg0MCk7CiAKLSAgICAgICAgLyogQWx3YXlzIGVuYWJsZSBtYWdpYyBwYWNrZXQgd2FrZS11cCBpZiB3ZSBoYXZlIHZhdXguICovCi0gICAgICAgIGlmKChQbWVTdXBwb3J0ICYgVDNfUENJX1BNX0NBUF9QTUVfRDNDT0xEKSAmJgotICAgICAgICAgICAgKHBEZXZpY2UtPldha2VVcE1vZGVDYXAgJiBMTV9XQUtFX1VQX01PREVfTUFHSUNfUEFDS0VUKSkKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiB8PSBNQUNfTU9ERV9ERVRFQ1RfTUFHSUNfUEFDS0VUX0VOQUJMRTsKLSAgICAgICAgfQorCS8qIEFsd2F5cyBlbmFibGUgbWFnaWMgcGFja2V0IHdha2UtdXAgaWYgd2UgaGF2ZSB2YXV4LiAqLworCWlmKChQbWVTdXBwb3J0ICYgVDNfUENJX1BNX0NBUF9QTUVfRDNDT0xEKSAmJgorCSAgICAocERldmljZS0+V2FrZVVwTW9kZUNhcCAmIExNX1dBS0VfVVBfTU9ERV9NQUdJQ19QQUNLRVQpKQorCXsKKwkgICAgVmFsdWUzMiB8PSBNQUNfTU9ERV9ERVRFQ1RfTUFHSUNfUEFDS0VUX0VOQUJMRTsKKwl9CiAKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgVmFsdWUzMik7CisJUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuTW9kZSwgVmFsdWUzMik7CiAKLSAgICAgICAgLyogRW5hYmxlIHRoZSByZWNlaXZlci4gKi8KLSAgICAgICAgUkVHX1dSKHBEZXZpY2UsIE1hY0N0cmwuUnhNb2RlLCBSWF9NT0RFX0VOQUJMRSk7CisJLyogRW5hYmxlIHRoZSByZWNlaXZlci4gKi8KKwlSRUdfV1IocERldmljZSwgTWFjQ3RybC5SeE1vZGUsIFJYX01PREVfRU5BQkxFKTsKICAgICB9CiAKICAgICAvKiBEaXNhYmxlIHR4L3J4IGNsb2NrcywgYW5kIHNlbGV0ZWN0IGFuIGFsdGVybmF0ZSBjbG9jay4gKi8KICAgICBpZihwRGV2aWNlLT5Xb2xTcGVlZCA9PSBXT0xfU1BFRURfMTAwTUIpCiAgICAgewotICAgICAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDAgfHwKLSAgICAgICAgICAgIFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMSkKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiA9IFQzX1BDSV9ESVNBQkxFX1JYX0NMT0NLIHwgVDNfUENJX0RJU0FCTEVfVFhfQ0xPQ0sgfAotICAgICAgICAgICAgICAgIFQzX1BDSV9TRUxFQ1RfQUxURVJOQVRFX0NMT0NLOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiA9IFQzX1BDSV9TRUxFQ1RfQUxURVJOQVRFX0NMT0NLOwotICAgICAgICB9Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBQY2lDZmcuQ2xvY2tDdHJsLCBWYWx1ZTMyKTsKKwlpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDAgfHwKKwkgICAgVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAxKQorCXsKKwkgICAgVmFsdWUzMiA9IFQzX1BDSV9ESVNBQkxFX1JYX0NMT0NLIHwgVDNfUENJX0RJU0FCTEVfVFhfQ0xPQ0sgfAorCQlUM19QQ0lfU0VMRUNUX0FMVEVSTkFURV9DTE9DSzsKKwl9CisJZWxzZQorCXsKKwkgICAgVmFsdWUzMiA9IFQzX1BDSV9TRUxFQ1RfQUxURVJOQVRFX0NMT0NLOworCX0KKwlSRUdfV1IocERldmljZSwgUGNpQ2ZnLkNsb2NrQ3RybCwgVmFsdWUzMik7CiAKLSAgICAgICAgTU1fV2FpdCg0MCk7CisJTU1fV2FpdCg0MCk7CiAKLSAgICAgICAgaWYoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwIHx8Ci0gICAgICAgICAgICBUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZhbHVlMzIgPSBUM19QQ0lfRElTQUJMRV9SWF9DTE9DSyB8IFQzX1BDSV9ESVNBQkxFX1RYX0NMT0NLIHwKLSAgICAgICAgICAgICAgICBUM19QQ0lfU0VMRUNUX0FMVEVSTkFURV9DTE9DSyB8IFQzX1BDSV80NE1IWl9DT1JFX0NMT0NLOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiA9IFQzX1BDSV9TRUxFQ1RfQUxURVJOQVRFX0NMT0NLIHwKLSAgICAgICAgICAgICAgICBUM19QQ0lfNDRNSFpfQ09SRV9DTE9DSzsKLSAgICAgICAgfQorCWlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCB8fAorCSAgICBUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDEpCisJeworCSAgICBWYWx1ZTMyID0gVDNfUENJX0RJU0FCTEVfUlhfQ0xPQ0sgfCBUM19QQ0lfRElTQUJMRV9UWF9DTE9DSyB8CisJCVQzX1BDSV9TRUxFQ1RfQUxURVJOQVRFX0NMT0NLIHwgVDNfUENJXzQ0TUhaX0NPUkVfQ0xPQ0s7CisJfQorCWVsc2UKKwl7CisJICAgIFZhbHVlMzIgPSBUM19QQ0lfU0VMRUNUX0FMVEVSTkFURV9DTE9DSyB8CisJCVQzX1BDSV80NE1IWl9DT1JFX0NMT0NLOworCX0KIAotICAgICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLkNsb2NrQ3RybCwgVmFsdWUzMik7CisJUkVHX1dSKHBEZXZpY2UsIFBjaUNmZy5DbG9ja0N0cmwsIFZhbHVlMzIpOwogCi0gICAgICAgIE1NX1dhaXQoNDApOworCU1NX1dhaXQoNDApOwogCi0gICAgICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCB8fAotICAgICAgICAgICAgVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBWYWx1ZTMyID0gVDNfUENJX0RJU0FCTEVfUlhfQ0xPQ0sgfCBUM19QQ0lfRElTQUJMRV9UWF9DTE9DSyB8Ci0gICAgICAgICAgICAgICAgVDNfUENJXzQ0TUhaX0NPUkVfQ0xPQ0s7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBWYWx1ZTMyID0gVDNfUENJXzQ0TUhaX0NPUkVfQ0xPQ0s7Ci0gICAgICAgIH0KKwlpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDAgfHwKKwkgICAgVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAxKQorCXsKKwkgICAgVmFsdWUzMiA9IFQzX1BDSV9ESVNBQkxFX1JYX0NMT0NLIHwgVDNfUENJX0RJU0FCTEVfVFhfQ0xPQ0sgfAorCQlUM19QQ0lfNDRNSFpfQ09SRV9DTE9DSzsKKwl9CisJZWxzZQorCXsKKwkgICAgVmFsdWUzMiA9IFQzX1BDSV80NE1IWl9DT1JFX0NMT0NLOworCX0KIAotICAgICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLkNsb2NrQ3RybCwgVmFsdWUzMik7CisJUkVHX1dSKHBEZXZpY2UsIFBjaUNmZy5DbG9ja0N0cmwsIFZhbHVlMzIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZihUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpID09IFQzX0FTSUNfUkVWXzU3MDAgfHwKLSAgICAgICAgICAgIFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMSkKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiA9IFQzX1BDSV9ESVNBQkxFX1JYX0NMT0NLIHwgVDNfUENJX0RJU0FCTEVfVFhfQ0xPQ0sgfAotICAgICAgICAgICAgICAgIFQzX1BDSV9TRUxFQ1RfQUxURVJOQVRFX0NMT0NLIHwKLSAgICAgICAgICAgICAgICBUM19QQ0lfUE9XRVJfRE9XTl9QQ0lfUExMMTMzOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiA9IFQzX1BDSV9TRUxFQ1RfQUxURVJOQVRFX0NMT0NLIHwKLSAgICAgICAgICAgICAgICBUM19QQ0lfUE9XRVJfRE9XTl9QQ0lfUExMMTMzOwotICAgICAgICB9CisJaWYoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwIHx8CisJICAgIFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMSkKKwl7CisJICAgIFZhbHVlMzIgPSBUM19QQ0lfRElTQUJMRV9SWF9DTE9DSyB8IFQzX1BDSV9ESVNBQkxFX1RYX0NMT0NLIHwKKwkJVDNfUENJX1NFTEVDVF9BTFRFUk5BVEVfQ0xPQ0sgfAorCQlUM19QQ0lfUE9XRVJfRE9XTl9QQ0lfUExMMTMzOworCX0KKwllbHNlCisJeworCSAgICBWYWx1ZTMyID0gVDNfUENJX1NFTEVDVF9BTFRFUk5BVEVfQ0xPQ0sgfAorCQlUM19QQ0lfUE9XRVJfRE9XTl9QQ0lfUExMMTMzOworCX0KIAotICAgICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLkNsb2NrQ3RybCwgVmFsdWUzMik7CisJUkVHX1dSKHBEZXZpY2UsIFBjaUNmZy5DbG9ja0N0cmwsIFZhbHVlMzIpOwogICAgIH0KIAogICAgIE1NX1dhaXQoNDApOwogCiAgICAgaWYoIXBEZXZpY2UtPkVlcHJvbVdwICYmIChwRGV2aWNlLT5XYWtlVXBNb2RlQ2FwICE9IExNX1dBS0VfVVBfTU9ERV9OT05FKSkKICAgICB7Ci0gICAgICAgIC8qIFN3aXRjaCBhZGFwdGVyIHRvIGF1eGlsbGlhcnkgcG93ZXIuICovCi0gICAgICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMCB8fAotICAgICAgICAgICAgVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAxKQotICAgICAgICB7Ci0gICAgICAgICAgICAvKiBHUElPMCA9IDEsIEdQSU8xID0gMSwgR1BJTzIgPSAwLiAqLwotICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIEdyYy5Mb2NhbEN0cmwsIHBEZXZpY2UtPkdyY0xvY2FsQ3RybCB8Ci0gICAgICAgICAgICAgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09FMCB8Ci0gICAgICAgICAgICAgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09FMSB8Ci0gICAgICAgICAgICAgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09FMiB8Ci0gICAgICAgICAgICAgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09VVFBVVDAgfAotICAgICAgICAgICAgICAgIEdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PVVRQVVQxKTsKLSAgICAgICAgICAgICAgICBNTV9XYWl0KDQwKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIEdQSU8wID0gMCwgR1BJTzEgPSAxLCBHUElPMiA9IDEuICovCi0gICAgICAgICAgICBSRUdfV1IocERldmljZSwgR3JjLkxvY2FsQ3RybCwgcERldmljZS0+R3JjTG9jYWxDdHJsIHwKLSAgICAgICAgICAgICAgICBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UwIHwKLSAgICAgICAgICAgICAgICBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UxIHwKLSAgICAgICAgICAgICAgICBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UyIHwKLSAgICAgICAgICAgICAgICBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT1VUUFVUMSB8Ci0gICAgICAgICAgICAgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09VVFBVVDIpOwotICAgICAgICAgICAgICAgIE1NX1dhaXQoNDApOworCS8qIFN3aXRjaCBhZGFwdGVyIHRvIGF1eGlsbGlhcnkgcG93ZXIuICovCisJaWYoVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSA9PSBUM19BU0lDX1JFVl81NzAwIHx8CisJICAgIFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgPT0gVDNfQVNJQ19SRVZfNTcwMSkKKwl7CisJICAgIC8qIEdQSU8wID0gMSwgR1BJTzEgPSAxLCBHUElPMiA9IDAuICovCisJICAgIFJFR19XUihwRGV2aWNlLCBHcmMuTG9jYWxDdHJsLCBwRGV2aWNlLT5HcmNMb2NhbEN0cmwgfAorCQlHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UwIHwKKwkJR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09FMSB8CisJCUdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PRTIgfAorCQlHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT1VUUFVUMCB8CisJCUdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PVVRQVVQxKTsKKwkJTU1fV2FpdCg0MCk7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIEdQSU8wID0gMCwgR1BJTzEgPSAxLCBHUElPMiA9IDEuICovCisJICAgIFJFR19XUihwRGV2aWNlLCBHcmMuTG9jYWxDdHJsLCBwRGV2aWNlLT5HcmNMb2NhbEN0cmwgfAorCQlHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UwIHwKKwkJR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09FMSB8CisJCUdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PRTIgfAorCQlHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT1VUUFVUMSB8CisJCUdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PVVRQVVQyKTsKKwkJTU1fV2FpdCg0MCk7CiAKLSAgICAgICAgICAgIC8qIEdQSU8wID0gMSwgR1BJTzEgPSAxLCBHUElPMiA9IDEuICovCi0gICAgICAgICAgICBSRUdfV1IocERldmljZSwgR3JjLkxvY2FsQ3RybCwgcERldmljZS0+R3JjTG9jYWxDdHJsIHwKLSAgICAgICAgICAgICAgICBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UwIHwKLSAgICAgICAgICAgICAgICBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UxIHwKLSAgICAgICAgICAgICAgICBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UyIHwKLSAgICAgICAgICAgICAgICBHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT1VUUFVUMCB8Ci0gICAgICAgICAgICAgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09VVFBVVDEgfAotICAgICAgICAgICAgICAgIEdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PVVRQVVQyKTsKLSAgICAgICAgICAgICAgICBNTV9XYWl0KDQwKTsKKwkgICAgLyogR1BJTzAgPSAxLCBHUElPMSA9IDEsIEdQSU8yID0gMS4gKi8KKwkgICAgUkVHX1dSKHBEZXZpY2UsIEdyYy5Mb2NhbEN0cmwsIHBEZXZpY2UtPkdyY0xvY2FsQ3RybCB8CisJCUdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PRTAgfAorCQlHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UxIHwKKwkJR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09FMiB8CisJCUdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PVVRQVVQwIHwKKwkJR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09VVFBVVDEgfAorCQlHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT1VUUFVUMik7CisJCU1NX1dhaXQoNDApOwogCi0gICAgICAgICAgICAvKiBHUElPMCA9IDEsIEdQSU8xID0gMSwgR1BJTzIgPSAwLiAqLwotICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsIEdyYy5Mb2NhbEN0cmwsIHBEZXZpY2UtPkdyY0xvY2FsQ3RybCB8Ci0gICAgICAgICAgICAgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09FMCB8Ci0gICAgICAgICAgICAgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09FMSB8Ci0gICAgICAgICAgICAgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09FMiB8Ci0gICAgICAgICAgICAgICAgR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09VVFBVVDAgfAotICAgICAgICAgICAgICAgIEdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PVVRQVVQxKTsKLSAgICAgICAgICAgICAgICBNTV9XYWl0KDQwKTsKLSAgICAgICAgfQorCSAgICAvKiBHUElPMCA9IDEsIEdQSU8xID0gMSwgR1BJTzIgPSAwLiAqLworCSAgICBSRUdfV1IocERldmljZSwgR3JjLkxvY2FsQ3RybCwgcERldmljZS0+R3JjTG9jYWxDdHJsIHwKKwkJR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09FMCB8CisJCUdSQ19NSVNDX0xPQ0FMX0NUUkxfR1BJT19PRTEgfAorCQlHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT0UyIHwKKwkJR1JDX01JU0NfTE9DQUxfQ1RSTF9HUElPX09VVFBVVDAgfAorCQlHUkNfTUlTQ19MT0NBTF9DVFJMX0dQSU9fT1VUUFVUMSk7CisJCU1NX1dhaXQoNDApOworCX0KICAgICB9CiAKICAgICAvKiBTZXQgdGhlIHBoeSB0byBsb3cgcG93ZXIgbW9kZS4gKi8KQEAgLTU2MDMsNyArNTU4NCw2IEBACiB9IC8qIExNX1NldFBvd2VyU3RhdGUgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTU2MTksMzEgKzU1OTksMzAgQEAKIAogICAgIC8qIEF1dG8gbmVnb3RpYXRpb24gZmxvdyBjb250cm9sIG9ubHkgd2hlbiBhdXRvbmVnb3RpYXRpb24gaXMgZW5hYmxlZC4gKi8KICAgICBpZihwRGV2aWNlLT5EaXNhYmxlQXV0b05lZyA9PSBGQUxTRSB8fAotICAgICAgICBwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUgPT0gTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfQVVUTyB8fAotICAgICAgICBwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUgPT0gTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfVVRQX0FVVE8pCisJcERldmljZS0+UmVxdWVzdGVkTWVkaWFUeXBlID09IExNX1JFUVVFU1RFRF9NRURJQV9UWVBFX0FVVE8gfHwKKwlwRGV2aWNlLT5SZXF1ZXN0ZWRNZWRpYVR5cGUgPT0gTE1fUkVRVUVTVEVEX01FRElBX1RZUEVfVVRQX0FVVE8pCiAgICAgewotICAgICAgICAvKiBQbGVhc2UgcmVmZXIgdG8gVGFibGUgMjhCLTMgb2YgdGhlIDgwMi4zYWItMTk5OSBzcGVjLiAqLwotICAgICAgICBpZigocERldmljZS0+Rmxvd0NvbnRyb2xDYXAgPT0gTE1fRkxPV19DT05UUk9MX0FVVE9fUEFVU0UpIHx8Ci0gICAgICAgICAgICAoKHBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICYgTE1fRkxPV19DT05UUk9MX1JFQ0VJVkVfUEFVU0UpICYmCi0gICAgICAgICAgICAocERldmljZS0+Rmxvd0NvbnRyb2xDYXAgJiBMTV9GTE9XX0NPTlRST0xfVFJBTlNNSVRfUEFVU0UpKSkKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiB8PSBQSFlfQU5fQURfUEFVU0VfQ0FQQUJMRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKHBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICYgTE1fRkxPV19DT05UUk9MX1RSQU5TTUlUX1BBVVNFKQotICAgICAgICB7Ci0gICAgICAgICAgICBWYWx1ZTMyIHw9IFBIWV9BTl9BRF9BU1lNX1BBVVNFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYocERldmljZS0+Rmxvd0NvbnRyb2xDYXAgJiBMTV9GTE9XX0NPTlRST0xfUkVDRUlWRV9QQVVTRSkKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiB8PSBQSFlfQU5fQURfUEFVU0VfQ0FQQUJMRSB8IFBIWV9BTl9BRF9BU1lNX1BBVVNFOwotICAgICAgICB9CisJLyogUGxlYXNlIHJlZmVyIHRvIFRhYmxlIDI4Qi0zIG9mIHRoZSA4MDIuM2FiLTE5OTkgc3BlYy4gKi8KKwlpZigocERldmljZS0+Rmxvd0NvbnRyb2xDYXAgPT0gTE1fRkxPV19DT05UUk9MX0FVVE9fUEFVU0UpIHx8CisJICAgICgocERldmljZS0+Rmxvd0NvbnRyb2xDYXAgJiBMTV9GTE9XX0NPTlRST0xfUkVDRUlWRV9QQVVTRSkgJiYKKwkgICAgKHBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICYgTE1fRkxPV19DT05UUk9MX1RSQU5TTUlUX1BBVVNFKSkpCisJeworCSAgICBWYWx1ZTMyIHw9IFBIWV9BTl9BRF9QQVVTRV9DQVBBQkxFOworCX0KKwllbHNlIGlmKHBEZXZpY2UtPkZsb3dDb250cm9sQ2FwICYgTE1fRkxPV19DT05UUk9MX1RSQU5TTUlUX1BBVVNFKQorCXsKKwkgICAgVmFsdWUzMiB8PSBQSFlfQU5fQURfQVNZTV9QQVVTRTsKKwl9CisJZWxzZSBpZihwRGV2aWNlLT5GbG93Q29udHJvbENhcCAmIExNX0ZMT1dfQ09OVFJPTF9SRUNFSVZFX1BBVVNFKQorCXsKKwkgICAgVmFsdWUzMiB8PSBQSFlfQU5fQURfUEFVU0VfQ0FQQUJMRSB8IFBIWV9BTl9BRF9BU1lNX1BBVVNFOworCX0KICAgICB9CiAKICAgICByZXR1cm4gVmFsdWUzMjsKIH0KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTU2NjYsMTg0ICs1NjQ1LDE4MyBAQAogCiAgICAgLyogR2V0IHRoZSBpbnRlcmZhY2UgdHlwZSwgbGluZSBzcGVlZCwgYW5kIGR1cGxleCBtb2RlLiAqLwogICAgIExNX1RyYW5zbGF0ZVJlcXVlc3RlZE1lZGlhVHlwZShSZXF1ZXN0ZWRNZWRpYVR5cGUsICZNZWRpYVR5cGUsICZMaW5lU3BlZWQsCi0gICAgICAgICZEdXBsZXhNb2RlKTsKKwkmRHVwbGV4TW9kZSk7CiAKICAgICBpZiAocERldmljZS0+UmVzdG9yZU9uV2FrZVVwKQogICAgIHsKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF8xMDAwQkFTRVRfQ1RSTF9SRUcsIDApOwotICAgICAgICBwRGV2aWNlLT5hZHZlcnRpc2luZzEwMDAgPSAwOwotICAgICAgICBWYWx1ZTMyID0gUEhZX0FOX0FEXzEwQkFTRVRfRlVMTCB8IFBIWV9BTl9BRF8xMEJBU0VUX0hBTEY7Ci0gICAgICAgIGlmIChwRGV2aWNlLT5Xb2xTcGVlZCA9PSBXT0xfU1BFRURfMTAwTUIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZhbHVlMzIgfD0gUEhZX0FOX0FEXzEwMEJBU0VUWF9GVUxMIHwgUEhZX0FOX0FEXzEwMEJBU0VUWF9IQUxGOwotICAgICAgICB9Ci0gICAgICAgIFZhbHVlMzIgfD0gUEhZX0FOX0FEX1BST1RPQ09MXzgwMl8zX0NTTUFfQ0Q7Ci0gICAgICAgIFZhbHVlMzIgfD0gR2V0UGh5QWRGbG93Q250cmxTZXR0aW5ncyhwRGV2aWNlKTsKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0FOX0FEX1JFRywgVmFsdWUzMik7Ci0gICAgICAgIHBEZXZpY2UtPmFkdmVydGlzaW5nID0gVmFsdWUzMjsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYXzEwMDBCQVNFVF9DVFJMX1JFRywgMCk7CisJcERldmljZS0+YWR2ZXJ0aXNpbmcxMDAwID0gMDsKKwlWYWx1ZTMyID0gUEhZX0FOX0FEXzEwQkFTRVRfRlVMTCB8IFBIWV9BTl9BRF8xMEJBU0VUX0hBTEY7CisJaWYgKHBEZXZpY2UtPldvbFNwZWVkID09IFdPTF9TUEVFRF8xMDBNQikKKwl7CisJICAgIFZhbHVlMzIgfD0gUEhZX0FOX0FEXzEwMEJBU0VUWF9GVUxMIHwgUEhZX0FOX0FEXzEwMEJBU0VUWF9IQUxGOworCX0KKwlWYWx1ZTMyIHw9IFBIWV9BTl9BRF9QUk9UT0NPTF84MDJfM19DU01BX0NEOworCVZhbHVlMzIgfD0gR2V0UGh5QWRGbG93Q250cmxTZXR0aW5ncyhwRGV2aWNlKTsKKwlMTV9Xcml0ZVBoeShwRGV2aWNlLCBQSFlfQU5fQURfUkVHLCBWYWx1ZTMyKTsKKwlwRGV2aWNlLT5hZHZlcnRpc2luZyA9IFZhbHVlMzI7CiAgICAgfQogICAgIC8qIFNldHVwIHRoZSBhdXRvLW5lZ290aWF0aW9uIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuICovCiAgICAgZWxzZSBpZihMaW5lU3BlZWQgPT0gTE1fTElORV9TUEVFRF9VTktOT1dOKQogICAgIHsKLSAgICAgICAgLyogU2V0dXAgdGhlIDEwLzEwMCBNYnBzIGF1dG8tbmVnb3RpYXRpb24gYWR2ZXJ0aXNlbWVudCByZWdpc3Rlci4gKi8KLSAgICAgICAgVmFsdWUzMiA9IFBIWV9BTl9BRF9QUk9UT0NPTF84MDJfM19DU01BX0NEIHwKLSAgICAgICAgICAgIFBIWV9BTl9BRF8xMEJBU0VUX0hBTEYgfCBQSFlfQU5fQURfMTBCQVNFVF9GVUxMIHwKLSAgICAgICAgICAgIFBIWV9BTl9BRF8xMDBCQVNFVFhfRlVMTCB8IFBIWV9BTl9BRF8xMDBCQVNFVFhfSEFMRjsKLSAgICAgICAgVmFsdWUzMiB8PSBHZXRQaHlBZEZsb3dDbnRybFNldHRpbmdzKHBEZXZpY2UpOworCS8qIFNldHVwIHRoZSAxMC8xMDAgTWJwcyBhdXRvLW5lZ290aWF0aW9uIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuICovCisJVmFsdWUzMiA9IFBIWV9BTl9BRF9QUk9UT0NPTF84MDJfM19DU01BX0NEIHwKKwkgICAgUEhZX0FOX0FEXzEwQkFTRVRfSEFMRiB8IFBIWV9BTl9BRF8xMEJBU0VUX0ZVTEwgfAorCSAgICBQSFlfQU5fQURfMTAwQkFTRVRYX0ZVTEwgfCBQSFlfQU5fQURfMTAwQkFTRVRYX0hBTEY7CisJVmFsdWUzMiB8PSBHZXRQaHlBZEZsb3dDbnRybFNldHRpbmdzKHBEZXZpY2UpOwogCi0gICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIFBIWV9BTl9BRF9SRUcsIFZhbHVlMzIpOwotICAgICAgICBwRGV2aWNlLT5hZHZlcnRpc2luZyA9IFZhbHVlMzI7CisJTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0FOX0FEX1JFRywgVmFsdWUzMik7CisJcERldmljZS0+YWR2ZXJ0aXNpbmcgPSBWYWx1ZTMyOwogCi0gICAgICAgIC8qIEFkdmVydGlzZSAxMDAwTWJwcyAqLwotICAgICAgICBWYWx1ZTMyID0gQkNNNTQwWF9BTl9BRF8xMDAwQkFTRVRfSEFMRiB8IEJDTTU0MFhfQU5fQURfMTAwMEJBU0VUX0ZVTEw7CisJLyogQWR2ZXJ0aXNlIDEwMDBNYnBzICovCisJVmFsdWUzMiA9IEJDTTU0MFhfQU5fQURfMTAwMEJBU0VUX0hBTEYgfCBCQ001NDBYX0FOX0FEXzEwMDBCQVNFVF9GVUxMOwogCiAjaWYgSU5DTFVERV81NzAxX0FYX0ZJWAotICAgICAgICAvKiBCdWc6IHdvcmthcm91bmQgZm9yIENSQyBlcnJvciBpbiBnaWdhYml0IG1vZGUgd2hlbiB3ZSBhcmUgaW4gKi8KLSAgICAgICAgLyogc2xhdmUgbW9kZS4gIFRoaXMgd2lsbCBmb3JjZSB0aGUgUEhZIHRvIG9wZXJhdGUgaW4gKi8KLSAgICAgICAgLyogbWFzdGVyIG1vZGUuICovCi0gICAgICAgIGlmKHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDFfQTAgfHwKLSAgICAgICAgICAgIHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDFfQjApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZhbHVlMzIgfD0gQkNNNTQwWF9DT05GSUdfQVNfTUFTVEVSIHwKLSAgICAgICAgICAgICAgICBCQ001NDBYX0VOQUJMRV9DT05GSUdfQVNfTUFTVEVSOwotICAgICAgICB9CisJLyogQnVnOiB3b3JrYXJvdW5kIGZvciBDUkMgZXJyb3IgaW4gZ2lnYWJpdCBtb2RlIHdoZW4gd2UgYXJlIGluICovCisJLyogc2xhdmUgbW9kZS4gIFRoaXMgd2lsbCBmb3JjZSB0aGUgUEhZIHRvIG9wZXJhdGUgaW4gKi8KKwkvKiBtYXN0ZXIgbW9kZS4gKi8KKwlpZihwRGV2aWNlLT5DaGlwUmV2SWQgPT0gVDNfQ0hJUF9JRF81NzAxX0EwIHx8CisJICAgIHBEZXZpY2UtPkNoaXBSZXZJZCA9PSBUM19DSElQX0lEXzU3MDFfQjApCisJeworCSAgICBWYWx1ZTMyIHw9IEJDTTU0MFhfQ09ORklHX0FTX01BU1RFUiB8CisJCUJDTTU0MFhfRU5BQkxFX0NPTkZJR19BU19NQVNURVI7CisJfQogI2VuZGlmCiAKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF8xMDAwQkFTRVRfQ1RSTF9SRUcsIFZhbHVlMzIpOwotICAgICAgICBwRGV2aWNlLT5hZHZlcnRpc2luZzEwMDAgPSBWYWx1ZTMyOworCUxNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfMTAwMEJBU0VUX0NUUkxfUkVHLCBWYWx1ZTMyKTsKKwlwRGV2aWNlLT5hZHZlcnRpc2luZzEwMDAgPSBWYWx1ZTMyOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZihMaW5lU3BlZWQgPT0gTE1fTElORV9TUEVFRF8xMDAwTUJQUykKLSAgICAgICAgewotICAgICAgICAgICAgVmFsdWUzMiA9IFBIWV9BTl9BRF9QUk9UT0NPTF84MDJfM19DU01BX0NEOwotICAgICAgICAgICAgVmFsdWUzMiB8PSBHZXRQaHlBZEZsb3dDbnRybFNldHRpbmdzKHBEZXZpY2UpOworCWlmKExpbmVTcGVlZCA9PSBMTV9MSU5FX1NQRUVEXzEwMDBNQlBTKQorCXsKKwkgICAgVmFsdWUzMiA9IFBIWV9BTl9BRF9QUk9UT0NPTF84MDJfM19DU01BX0NEOworCSAgICBWYWx1ZTMyIHw9IEdldFBoeUFkRmxvd0NudHJsU2V0dGluZ3MocERldmljZSk7CiAKLSAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIFBIWV9BTl9BRF9SRUcsIFZhbHVlMzIpOwotICAgICAgICAgICAgcERldmljZS0+YWR2ZXJ0aXNpbmcgPSBWYWx1ZTMyOworCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBQSFlfQU5fQURfUkVHLCBWYWx1ZTMyKTsKKwkgICAgcERldmljZS0+YWR2ZXJ0aXNpbmcgPSBWYWx1ZTMyOwogCi0gICAgICAgICAgICBpZihEdXBsZXhNb2RlICE9IExNX0RVUExFWF9NT0RFX0ZVTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVmFsdWUzMiA9IEJDTTU0MFhfQU5fQURfMTAwMEJBU0VUX0hBTEY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVmFsdWUzMiA9IEJDTTU0MFhfQU5fQURfMTAwMEJBU0VUX0ZVTEw7Ci0gICAgICAgICAgICB9CisJICAgIGlmKER1cGxleE1vZGUgIT0gTE1fRFVQTEVYX01PREVfRlVMTCkKKwkgICAgeworCQlWYWx1ZTMyID0gQkNNNTQwWF9BTl9BRF8xMDAwQkFTRVRfSEFMRjsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJVmFsdWUzMiA9IEJDTTU0MFhfQU5fQURfMTAwMEJBU0VUX0ZVTEw7CisJICAgIH0KIAotICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF8xMDAwQkFTRVRfQ1RSTF9SRUcsIFZhbHVlMzIpOwotICAgICAgICAgICAgcERldmljZS0+YWR2ZXJ0aXNpbmcxMDAwID0gVmFsdWUzMjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKExpbmVTcGVlZCA9PSBMTV9MSU5FX1NQRUVEXzEwME1CUFMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfMTAwMEJBU0VUX0NUUkxfUkVHLCAwKTsKLSAgICAgICAgICAgIHBEZXZpY2UtPmFkdmVydGlzaW5nMTAwMCA9IDA7CisJICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfMTAwMEJBU0VUX0NUUkxfUkVHLCBWYWx1ZTMyKTsKKwkgICAgcERldmljZS0+YWR2ZXJ0aXNpbmcxMDAwID0gVmFsdWUzMjsKKwl9CisJZWxzZSBpZihMaW5lU3BlZWQgPT0gTE1fTElORV9TUEVFRF8xMDBNQlBTKQorCXsKKwkgICAgTE1fV3JpdGVQaHkocERldmljZSwgQkNNNTQwWF8xMDAwQkFTRVRfQ1RSTF9SRUcsIDApOworCSAgICBwRGV2aWNlLT5hZHZlcnRpc2luZzEwMDAgPSAwOwogCi0gICAgICAgICAgICBpZihEdXBsZXhNb2RlICE9IExNX0RVUExFWF9NT0RFX0ZVTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVmFsdWUzMiA9IFBIWV9BTl9BRF8xMDBCQVNFVFhfSEFMRjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBWYWx1ZTMyID0gUEhZX0FOX0FEXzEwMEJBU0VUWF9GVUxMOwotICAgICAgICAgICAgfQorCSAgICBpZihEdXBsZXhNb2RlICE9IExNX0RVUExFWF9NT0RFX0ZVTEwpCisJICAgIHsKKwkJVmFsdWUzMiA9IFBIWV9BTl9BRF8xMDBCQVNFVFhfSEFMRjsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkJVmFsdWUzMiA9IFBIWV9BTl9BRF8xMDBCQVNFVFhfRlVMTDsKKwkgICAgfQogCi0gICAgICAgICAgICBWYWx1ZTMyIHw9IFBIWV9BTl9BRF9QUk9UT0NPTF84MDJfM19DU01BX0NEOwotICAgICAgICAgICAgVmFsdWUzMiB8PSBHZXRQaHlBZEZsb3dDbnRybFNldHRpbmdzKHBEZXZpY2UpOworCSAgICBWYWx1ZTMyIHw9IFBIWV9BTl9BRF9QUk9UT0NPTF84MDJfM19DU01BX0NEOworCSAgICBWYWx1ZTMyIHw9IEdldFBoeUFkRmxvd0NudHJsU2V0dGluZ3MocERldmljZSk7CiAKLSAgICAgICAgICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIFBIWV9BTl9BRF9SRUcsIFZhbHVlMzIpOwotICAgICAgICAgICAgcERldmljZS0+YWR2ZXJ0aXNpbmcgPSBWYWx1ZTMyOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoTGluZVNwZWVkID09IExNX0xJTkVfU1BFRURfMTBNQlBTKQotICAgICAgICB7Ci0gICAgICAgICAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBCQ001NDBYXzEwMDBCQVNFVF9DVFJMX1JFRywgMCk7Ci0gICAgICAgICAgICBwRGV2aWNlLT5hZHZlcnRpc2luZzEwMDAgPSAwOworCSAgICBMTV9Xcml0ZVBoeShwRGV2aWNlLCBQSFlfQU5fQURfUkVHLCBWYWx1ZTMyKTsKKwkgICAgcERldmljZS0+YWR2ZXJ0aXNpbmcgPSBWYWx1ZTMyOworCX0KKwllbHNlIGlmKExpbmVTcGVlZCA9PSBMTV9MSU5FX1NQRUVEXzEwTUJQUykKKwl7CisJICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIEJDTTU0MFhfMTAwMEJBU0VUX0NUUkxfUkVHLCAwKTsKKwkgICAgcERldmljZS0+YWR2ZXJ0aXNpbmcxMDAwID0gMDsKIAotICAgICAgICAgICAgaWYoRHVwbGV4TW9kZSAhPSBMTV9EVVBMRVhfTU9ERV9GVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFZhbHVlMzIgPSBQSFlfQU5fQURfMTBCQVNFVF9IQUxGOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFZhbHVlMzIgPSBQSFlfQU5fQURfMTBCQVNFVF9GVUxMOwotICAgICAgICAgICAgfQorCSAgICBpZihEdXBsZXhNb2RlICE9IExNX0RVUExFWF9NT0RFX0ZVTEwpCisJICAgIHsKKwkJVmFsdWUzMiA9IFBIWV9BTl9BRF8xMEJBU0VUX0hBTEY7CisJICAgIH0KKwkgICAgZWxzZQorCSAgICB7CisJCVZhbHVlMzIgPSBQSFlfQU5fQURfMTBCQVNFVF9GVUxMOworCSAgICB9CiAKLSAgICAgICAgICAgIFZhbHVlMzIgfD0gUEhZX0FOX0FEX1BST1RPQ09MXzgwMl8zX0NTTUFfQ0Q7Ci0gICAgICAgICAgICBWYWx1ZTMyIHw9IEdldFBoeUFkRmxvd0NudHJsU2V0dGluZ3MocERldmljZSk7CisJICAgIFZhbHVlMzIgfD0gUEhZX0FOX0FEX1BST1RPQ09MXzgwMl8zX0NTTUFfQ0Q7CisJICAgIFZhbHVlMzIgfD0gR2V0UGh5QWRGbG93Q250cmxTZXR0aW5ncyhwRGV2aWNlKTsKIAotICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0FOX0FEX1JFRywgVmFsdWUzMik7Ci0gICAgICAgICAgICBwRGV2aWNlLT5hZHZlcnRpc2luZyA9IFZhbHVlMzI7Ci0gICAgICAgIH0KKwkgICAgTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0FOX0FEX1JFRywgVmFsdWUzMik7CisJICAgIHBEZXZpY2UtPmFkdmVydGlzaW5nID0gVmFsdWUzMjsKKwl9CiAgICAgfQogCiAgICAgLyogRm9yY2UgbGluZSBzcGVlZCBpZiBhdXRvLW5lZ290aWF0aW9uIGlzIGRpc2FibGVkLiAqLwogICAgIGlmKHBEZXZpY2UtPkRpc2FibGVBdXRvTmVnICYmIExpbmVTcGVlZCAhPSBMTV9MSU5FX1NQRUVEX1VOS05PV04pCiAgICAgewotICAgICAgICAvKiBUaGlzIGNvZGUgcGF0aCBpcyBleGVjdXRlZCBvbmx5IHdoZW4gdGhlcmUgaXMgbGluay4gKi8KLSAgICAgICAgcERldmljZS0+TWVkaWFUeXBlID0gTWVkaWFUeXBlOwotICAgICAgICBwRGV2aWNlLT5MaW5lU3BlZWQgPSBMaW5lU3BlZWQ7Ci0gICAgICAgIHBEZXZpY2UtPkR1cGxleE1vZGUgPSBEdXBsZXhNb2RlOworCS8qIFRoaXMgY29kZSBwYXRoIGlzIGV4ZWN1dGVkIG9ubHkgd2hlbiB0aGVyZSBpcyBsaW5rLiAqLworCXBEZXZpY2UtPk1lZGlhVHlwZSA9IE1lZGlhVHlwZTsKKwlwRGV2aWNlLT5MaW5lU3BlZWQgPSBMaW5lU3BlZWQ7CisJcERldmljZS0+RHVwbGV4TW9kZSA9IER1cGxleE1vZGU7CiAKLSAgICAgICAgLyogRm9yY2UgbGluZSBzZWVwZC4gKi8KLSAgICAgICAgTmV3UGh5Q3RybCA9IDA7Ci0gICAgICAgIHN3aXRjaChMaW5lU3BlZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgTE1fTElORV9TUEVFRF8xME1CUFM6Ci0gICAgICAgICAgICAgICAgTmV3UGh5Q3RybCB8PSBQSFlfQ1RSTF9TUEVFRF9TRUxFQ1RfMTBNQlBTOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMTV9MSU5FX1NQRUVEXzEwME1CUFM6Ci0gICAgICAgICAgICAgICAgTmV3UGh5Q3RybCB8PSBQSFlfQ1RSTF9TUEVFRF9TRUxFQ1RfMTAwTUJQUzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTE1fTElORV9TUEVFRF8xMDAwTUJQUzoKLSAgICAgICAgICAgICAgICBOZXdQaHlDdHJsIHw9IFBIWV9DVFJMX1NQRUVEX1NFTEVDVF8xMDAwTUJQUzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgTmV3UGh5Q3RybCB8PSBQSFlfQ1RSTF9TUEVFRF9TRUxFQ1RfMTAwME1CUFM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkvKiBGb3JjZSBsaW5lIHNlZXBkLiAqLworCU5ld1BoeUN0cmwgPSAwOworCXN3aXRjaChMaW5lU3BlZWQpCisJeworCSAgICBjYXNlIExNX0xJTkVfU1BFRURfMTBNQlBTOgorCQlOZXdQaHlDdHJsIHw9IFBIWV9DVFJMX1NQRUVEX1NFTEVDVF8xME1CUFM7CisJCWJyZWFrOworCSAgICBjYXNlIExNX0xJTkVfU1BFRURfMTAwTUJQUzoKKwkJTmV3UGh5Q3RybCB8PSBQSFlfQ1RSTF9TUEVFRF9TRUxFQ1RfMTAwTUJQUzsKKwkJYnJlYWs7CisJICAgIGNhc2UgTE1fTElORV9TUEVFRF8xMDAwTUJQUzoKKwkJTmV3UGh5Q3RybCB8PSBQSFlfQ1RSTF9TUEVFRF9TRUxFQ1RfMTAwME1CUFM7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQlOZXdQaHlDdHJsIHw9IFBIWV9DVFJMX1NQRUVEX1NFTEVDVF8xMDAwTUJQUzsKKwkJYnJlYWs7CisJfQogCi0gICAgICAgIGlmKER1cGxleE1vZGUgPT0gTE1fRFVQTEVYX01PREVfRlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgTmV3UGh5Q3RybCB8PSBQSFlfQ1RSTF9GVUxMX0RVUExFWF9NT0RFOwotICAgICAgICB9CisJaWYoRHVwbGV4TW9kZSA9PSBMTV9EVVBMRVhfTU9ERV9GVUxMKQorCXsKKwkgICAgTmV3UGh5Q3RybCB8PSBQSFlfQ1RSTF9GVUxMX0RVUExFWF9NT0RFOworCX0KIAotICAgICAgICAvKiBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgUEhZX0NUUkwgaXMgYWxyZWFkeSB3aGF0IHdlIHdhbnRlZC4gKi8KLSAgICAgICAgTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfQ1RSTF9SRUcsICZWYWx1ZTMyKTsKLSAgICAgICAgaWYoVmFsdWUzMiAhPSBOZXdQaHlDdHJsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvKiBUZW1wb3JhcnkgYnJpbmcgdGhlIGxpbmsgZG93biBiZWZvcmUgZm9yY2luZyBsaW5lIHNwZWVkLiAqLwotICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCBQSFlfQ1RSTF9MT09QQkFDS19NT0RFKTsKKwkvKiBEb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgUEhZX0NUUkwgaXMgYWxyZWFkeSB3aGF0IHdlIHdhbnRlZC4gKi8KKwlMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9DVFJMX1JFRywgJlZhbHVlMzIpOworCWlmKFZhbHVlMzIgIT0gTmV3UGh5Q3RybCkKKwl7CisJICAgIC8qIFRlbXBvcmFyeSBicmluZyB0aGUgbGluayBkb3duIGJlZm9yZSBmb3JjaW5nIGxpbmUgc3BlZWQuICovCisJICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIFBIWV9DVFJMX1JFRywgUEhZX0NUUkxfTE9PUEJBQ0tfTU9ERSk7CiAKLSAgICAgICAgICAgIC8qIFdhaXQgZm9yIGxpbmsgdG8gZ28gZG93bi4gKi8KLSAgICAgICAgICAgIGZvcihDbnQgPSAwOyBDbnQgPCAxNTAwMDsgQ250KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTU1fV2FpdCgxMCk7CisJICAgIC8qIFdhaXQgZm9yIGxpbmsgdG8gZ28gZG93bi4gKi8KKwkgICAgZm9yKENudCA9IDA7IENudCA8IDE1MDAwOyBDbnQrKykKKwkgICAgeworCQlNTV9XYWl0KDEwKTsKIAotICAgICAgICAgICAgICAgIExNX1JlYWRQaHkocERldmljZSwgUEhZX1NUQVRVU19SRUcsICZWYWx1ZTMyKTsKLSAgICAgICAgICAgICAgICBMTV9SZWFkUGh5KHBEZXZpY2UsIFBIWV9TVEFUVVNfUkVHLCAmVmFsdWUzMik7CisJCUxNX1JlYWRQaHkocERldmljZSwgUEhZX1NUQVRVU19SRUcsICZWYWx1ZTMyKTsKKwkJTE1fUmVhZFBoeShwRGV2aWNlLCBQSFlfU1RBVFVTX1JFRywgJlZhbHVlMzIpOwogCi0gICAgICAgICAgICAgICAgaWYoIShWYWx1ZTMyICYgUEhZX1NUQVRVU19MSU5LX1BBU1MpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTU1fV2FpdCg0MCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkJaWYoIShWYWx1ZTMyICYgUEhZX1NUQVRVU19MSU5LX1BBU1MpKQorCQl7CisJCSAgICBNTV9XYWl0KDQwKTsKKwkJICAgIGJyZWFrOworCQl9CisJICAgIH0KIAotICAgICAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCBOZXdQaHlDdHJsKTsKLSAgICAgICAgICAgIE1NX1dhaXQoNDApOwotICAgICAgICB9CisJICAgIExNX1dyaXRlUGh5KHBEZXZpY2UsIFBIWV9DVFJMX1JFRywgTmV3UGh5Q3RybCk7CisJICAgIE1NX1dhaXQoNDApOworCX0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCBQSFlfQ1RSTF9BVVRPX05FR19FTkFCTEUgfAotICAgICAgICAgICAgUEhZX0NUUkxfUkVTVEFSVF9BVVRPX05FRyk7CisJTE1fV3JpdGVQaHkocERldmljZSwgUEhZX0NUUkxfUkVHLCBQSFlfQ1RSTF9BVVRPX05FR19FTkFCTEUgfAorCSAgICBQSFlfQ1RSTF9SRVNUQVJUX0FVVE9fTkVHKTsKICAgICB9CiAKICAgICByZXR1cm4gTE1fU1RBVFVTX1NVQ0NFU1M7CiB9IC8qIExNX0ZvcmNlQXV0b05lZ0JjbTU0MHhQaHkgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTU4NTksMTggKzU4MzcsMTggQEAKICAgICAvKiBJbml0aWFsaXplIHRoZSBwaHkgY2hpcC4gKi8KICAgICBzd2l0Y2gocERldmljZS0+UGh5SWQgJiBQSFlfSURfTUFTSykKICAgICB7Ci0gICAgICAgIGNhc2UgUEhZX0JDTTU0MDBfUEhZX0lEOgotICAgICAgICBjYXNlIFBIWV9CQ001NDAxX1BIWV9JRDoKLSAgICAgICAgY2FzZSBQSFlfQkNNNTQxMV9QSFlfSUQ6Ci0gICAgICAgIGNhc2UgUEhZX0JDTTU3MDFfUEhZX0lEOgotICAgICAgICBjYXNlIFBIWV9CQ001NzAzX1BIWV9JRDoKLSAgICAgICAgY2FzZSBQSFlfQkNNNTcwNF9QSFlfSUQ6Ci0gICAgICAgICAgICBMbVN0YXR1cyA9IExNX0ZvcmNlQXV0b05lZ0JjbTU0MHhQaHkocERldmljZSwgUmVxdWVzdGVkTWVkaWFUeXBlKTsKLSAgICAgICAgICAgIGJyZWFrOworCWNhc2UgUEhZX0JDTTU0MDBfUEhZX0lEOgorCWNhc2UgUEhZX0JDTTU0MDFfUEhZX0lEOgorCWNhc2UgUEhZX0JDTTU0MTFfUEhZX0lEOgorCWNhc2UgUEhZX0JDTTU3MDFfUEhZX0lEOgorCWNhc2UgUEhZX0JDTTU3MDNfUEhZX0lEOgorCWNhc2UgUEhZX0JDTTU3MDRfUEhZX0lEOgorCSAgICBMbVN0YXR1cyA9IExNX0ZvcmNlQXV0b05lZ0JjbTU0MHhQaHkocERldmljZSwgUmVxdWVzdGVkTWVkaWFUeXBlKTsKKwkgICAgYnJlYWs7CiAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIExtU3RhdHVzID0gTE1fU1RBVFVTX0ZBSUxVUkU7Ci0gICAgICAgICAgICBicmVhazsKKwlkZWZhdWx0OgorCSAgICBMbVN0YXR1cyA9IExNX1NUQVRVU19GQUlMVVJFOworCSAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gTG1TdGF0dXM7CkBAIC01ODgyLDEyMyArNTg2MCwxMjMgQEAKIC8qIFJldHVybjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogTE1fU1RBVFVTIExNX0xvYWRGaXJtd2FyZShQTE1fREVWSUNFX0JMT0NLIHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFBUM19GV0lNR19JTkZPIHBGd0ltZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTE1fVUlOVDMyIExvYWRDcHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIExNX1VJTlQzMiBTdGFydENwdSkKKwkJCSAgUFQzX0ZXSU1HX0lORk8gcEZ3SW1nLAorCQkJICBMTV9VSU5UMzIgTG9hZENwdSwKKwkJCSAgTE1fVUlOVDMyIFN0YXJ0Q3B1KQogewogICAgIExNX1VJTlQzMiBpOwogICAgIExNX1VJTlQzMiBhZGRyZXNzOwogCiAgICAgaWYgKExvYWRDcHUgJiBUM19SWF9DUFVfSUQpCiAgICAgewotICAgICAgICBpZiAoTE1fSGFsdENwdShwRGV2aWNlLFQzX1JYX0NQVV9JRCkgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKLSAgICAgICAgfQorCWlmIChMTV9IYWx0Q3B1KHBEZXZpY2UsVDNfUlhfQ1BVX0lEKSAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKKwl7CisJICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKKwl9CiAKLSAgICAgICAgLyogRmlyc3Qgb2YgYWxsIGNsZWFyIHNjcmFjaCBwYWQgbWVtb3J5ICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBUM19SWF9DUFVfU1BBRF9TSVpFOyBpKz00KQotICAgICAgICB7Ci0gICAgICAgICAgICBMTV9SZWdXckluZChwRGV2aWNlLFQzX1JYX0NQVV9TUEFEX0FERFIraSwwKTsKLSAgICAgICAgfQorCS8qIEZpcnN0IG9mIGFsbCBjbGVhciBzY3JhY2ggcGFkIG1lbW9yeSAqLworCWZvciAoaSA9IDA7IGkgPCBUM19SWF9DUFVfU1BBRF9TSVpFOyBpKz00KQorCXsKKwkgICAgTE1fUmVnV3JJbmQocERldmljZSxUM19SWF9DUFVfU1BBRF9BRERSK2ksMCk7CisJfQogCi0gICAgICAgIC8qIENvcHkgY29kZSBmaXJzdCAqLwotICAgICAgICBhZGRyZXNzID0gVDNfUlhfQ1BVX1NQQURfQUREUiArIChwRndJbWctPlRleHQuT2Zmc2V0ICYgMHhmZmZmKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8PSBwRndJbWctPlRleHQuTGVuZ3RoOyBpKz00KQotICAgICAgICB7Ci0gICAgICAgICAgICBMTV9SZWdXckluZChwRGV2aWNlLGFkZHJlc3MraSwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoTE1fVUlOVDMyICopcEZ3SW1nLT5UZXh0LkJ1ZmZlcilbaS80XSk7Ci0gICAgICAgIH0KKwkvKiBDb3B5IGNvZGUgZmlyc3QgKi8KKwlhZGRyZXNzID0gVDNfUlhfQ1BVX1NQQURfQUREUiArIChwRndJbWctPlRleHQuT2Zmc2V0ICYgMHhmZmZmKTsKKwlmb3IgKGkgPSAwOyBpIDw9IHBGd0ltZy0+VGV4dC5MZW5ndGg7IGkrPTQpCisJeworCSAgICBMTV9SZWdXckluZChwRGV2aWNlLGFkZHJlc3MraSwKKwkJCSgoTE1fVUlOVDMyICopcEZ3SW1nLT5UZXh0LkJ1ZmZlcilbaS80XSk7CisJfQogCi0gICAgICAgIGFkZHJlc3MgPSBUM19SWF9DUFVfU1BBRF9BRERSICsgKHBGd0ltZy0+Uk9ubHlEYXRhLk9mZnNldCAmIDB4ZmZmZik7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPD0gcEZ3SW1nLT5ST25seURhdGEuTGVuZ3RoOyBpKz00KQotICAgICAgICB7Ci0gICAgICAgICAgICBMTV9SZWdXckluZChwRGV2aWNlLGFkZHJlc3MraSwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoTE1fVUlOVDMyICopcEZ3SW1nLT5ST25seURhdGEuQnVmZmVyKVtpLzRdKTsKLSAgICAgICAgfQorCWFkZHJlc3MgPSBUM19SWF9DUFVfU1BBRF9BRERSICsgKHBGd0ltZy0+Uk9ubHlEYXRhLk9mZnNldCAmIDB4ZmZmZik7CisJZm9yIChpID0gMDsgaSA8PSBwRndJbWctPlJPbmx5RGF0YS5MZW5ndGg7IGkrPTQpCisJeworCSAgICBMTV9SZWdXckluZChwRGV2aWNlLGFkZHJlc3MraSwKKwkJCSgoTE1fVUlOVDMyICopcEZ3SW1nLT5ST25seURhdGEuQnVmZmVyKVtpLzRdKTsKKwl9CiAKLSAgICAgICAgYWRkcmVzcyA9IFQzX1JYX0NQVV9TUEFEX0FERFIgKyAocEZ3SW1nLT5EYXRhLk9mZnNldCAmIDB4ZmZmZik7Ci0gICAgICAgIGZvciAoaT0gMDsgaSA8PSBwRndJbWctPkRhdGEuTGVuZ3RoOyBpKz00KQotICAgICAgICB7Ci0gICAgICAgICAgICBMTV9SZWdXckluZChwRGV2aWNlLGFkZHJlc3MraSwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoTE1fVUlOVDMyICopcEZ3SW1nLT5EYXRhLkJ1ZmZlcilbaS80XSk7Ci0gICAgICAgIH0KKwlhZGRyZXNzID0gVDNfUlhfQ1BVX1NQQURfQUREUiArIChwRndJbWctPkRhdGEuT2Zmc2V0ICYgMHhmZmZmKTsKKwlmb3IgKGk9IDA7IGkgPD0gcEZ3SW1nLT5EYXRhLkxlbmd0aDsgaSs9NCkKKwl7CisJICAgIExNX1JlZ1dySW5kKHBEZXZpY2UsYWRkcmVzcytpLAorCQkJKChMTV9VSU5UMzIgKilwRndJbWctPkRhdGEuQnVmZmVyKVtpLzRdKTsKKwl9CiAgICAgfQogCiAgICAgaWYgKExvYWRDcHUgJiBUM19UWF9DUFVfSUQpCiAgICAgewotICAgICAgICBpZiAoTE1fSGFsdENwdShwRGV2aWNlLFQzX1RYX0NQVV9JRCkgIT0gTE1fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKLSAgICAgICAgfQorCWlmIChMTV9IYWx0Q3B1KHBEZXZpY2UsVDNfVFhfQ1BVX0lEKSAhPSBMTV9TVEFUVVNfU1VDQ0VTUykKKwl7CisJICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKKwl9CiAKLSAgICAgICAgLyogRmlyc3Qgb2YgYWxsIGNsZWFyIHNjcmFjaCBwYWQgbWVtb3J5ICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBUM19UWF9DUFVfU1BBRF9TSVpFOyBpKz00KQotICAgICAgICB7Ci0gICAgICAgICAgICBMTV9SZWdXckluZChwRGV2aWNlLFQzX1RYX0NQVV9TUEFEX0FERFIraSwwKTsKLSAgICAgICAgfQorCS8qIEZpcnN0IG9mIGFsbCBjbGVhciBzY3JhY2ggcGFkIG1lbW9yeSAqLworCWZvciAoaSA9IDA7IGkgPCBUM19UWF9DUFVfU1BBRF9TSVpFOyBpKz00KQorCXsKKwkgICAgTE1fUmVnV3JJbmQocERldmljZSxUM19UWF9DUFVfU1BBRF9BRERSK2ksMCk7CisJfQogCi0gICAgICAgIC8qIENvcHkgY29kZSBmaXJzdCAqLwotICAgICAgICBhZGRyZXNzID0gVDNfVFhfQ1BVX1NQQURfQUREUiArIChwRndJbWctPlRleHQuT2Zmc2V0ICYgMHhmZmZmKTsKLSAgICAgICAgZm9yIChpPSAwOyBpIDw9IHBGd0ltZy0+VGV4dC5MZW5ndGg7IGkrPTQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIExNX1JlZ1dySW5kKHBEZXZpY2UsYWRkcmVzcytpLAotICAgICAgICAgICAgICAgICAgICAgICAgKChMTV9VSU5UMzIgKilwRndJbWctPlRleHQuQnVmZmVyKVtpLzRdKTsKLSAgICAgICAgfQorCS8qIENvcHkgY29kZSBmaXJzdCAqLworCWFkZHJlc3MgPSBUM19UWF9DUFVfU1BBRF9BRERSICsgKHBGd0ltZy0+VGV4dC5PZmZzZXQgJiAweGZmZmYpOworCWZvciAoaT0gMDsgaSA8PSBwRndJbWctPlRleHQuTGVuZ3RoOyBpKz00KQorCXsKKwkgICAgTE1fUmVnV3JJbmQocERldmljZSxhZGRyZXNzK2ksCisJCQkoKExNX1VJTlQzMiAqKXBGd0ltZy0+VGV4dC5CdWZmZXIpW2kvNF0pOworCX0KIAotICAgICAgICBhZGRyZXNzID0gVDNfVFhfQ1BVX1NQQURfQUREUiArIChwRndJbWctPlJPbmx5RGF0YS5PZmZzZXQgJiAweGZmZmYpOwotICAgICAgICBmb3IgKGk9IDA7IGkgPD0gcEZ3SW1nLT5ST25seURhdGEuTGVuZ3RoOyBpKz00KQotICAgICAgICB7Ci0gICAgICAgICAgICBMTV9SZWdXckluZChwRGV2aWNlLGFkZHJlc3MraSwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoTE1fVUlOVDMyICopcEZ3SW1nLT5ST25seURhdGEuQnVmZmVyKVtpLzRdKTsKLSAgICAgICAgfQorCWFkZHJlc3MgPSBUM19UWF9DUFVfU1BBRF9BRERSICsgKHBGd0ltZy0+Uk9ubHlEYXRhLk9mZnNldCAmIDB4ZmZmZik7CisJZm9yIChpPSAwOyBpIDw9IHBGd0ltZy0+Uk9ubHlEYXRhLkxlbmd0aDsgaSs9NCkKKwl7CisJICAgIExNX1JlZ1dySW5kKHBEZXZpY2UsYWRkcmVzcytpLAorCQkJKChMTV9VSU5UMzIgKilwRndJbWctPlJPbmx5RGF0YS5CdWZmZXIpW2kvNF0pOworCX0KIAotICAgICAgICBhZGRyZXNzID0gVDNfVFhfQ1BVX1NQQURfQUREUiArIChwRndJbWctPkRhdGEuT2Zmc2V0ICYgMHhmZmZmKTsKLSAgICAgICAgZm9yIChpPSAwOyBpIDw9IHBGd0ltZy0+RGF0YS5MZW5ndGg7IGkrPTQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIExNX1JlZ1dySW5kKHBEZXZpY2UsYWRkcmVzcytpLAotICAgICAgICAgICAgICAgICAgICAgICAgKChMTV9VSU5UMzIgKilwRndJbWctPkRhdGEuQnVmZmVyKVtpLzRdKTsKLSAgICAgICAgfQorCWFkZHJlc3MgPSBUM19UWF9DUFVfU1BBRF9BRERSICsgKHBGd0ltZy0+RGF0YS5PZmZzZXQgJiAweGZmZmYpOworCWZvciAoaT0gMDsgaSA8PSBwRndJbWctPkRhdGEuTGVuZ3RoOyBpKz00KQorCXsKKwkgICAgTE1fUmVnV3JJbmQocERldmljZSxhZGRyZXNzK2ksCisJCQkoKExNX1VJTlQzMiAqKXBGd0ltZy0+RGF0YS5CdWZmZXIpW2kvNF0pOworCX0KICAgICB9CiAKICAgICBpZiAoU3RhcnRDcHUgJiBUM19SWF9DUFVfSUQpCiAgICAgewotICAgICAgICAvKiBTdGFydCBSeCBDUFUgKi8KLSAgICAgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLnN0YXRlLCAweGZmZmZmZmZmKTsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLlBDLHBGd0ltZy0+U3RhcnRBZGRyZXNzKTsKLSAgICAgICAgZm9yIChpID0gMCA7IGkgPCA1OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAocEZ3SW1nLT5TdGFydEFkZHJlc3MgPT0gUkVHX1JEKHBEZXZpY2UscnhDcHUucmVnLlBDKSkKLSAgICAgICAgICAgICBicmVhazsKKwkvKiBTdGFydCBSeCBDUFUgKi8KKwlSRUdfV1IocERldmljZSxyeENwdS5yZWcuc3RhdGUsIDB4ZmZmZmZmZmYpOworCVJFR19XUihwRGV2aWNlLHJ4Q3B1LnJlZy5QQyxwRndJbWctPlN0YXJ0QWRkcmVzcyk7CisJZm9yIChpID0gMCA7IGkgPCA1OyBpKyspCisJeworCSAgaWYgKHBGd0ltZy0+U3RhcnRBZGRyZXNzID09IFJFR19SRChwRGV2aWNlLHJ4Q3B1LnJlZy5QQykpCisJICAgICBicmVhazsKIAotICAgICAgICAgIFJFR19XUihwRGV2aWNlLHJ4Q3B1LnJlZy5zdGF0ZSwgMHhmZmZmZmZmZik7Ci0gICAgICAgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLm1vZGUsQ1BVX01PREVfSEFMVCk7Ci0gICAgICAgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLlBDLHBGd0ltZy0+U3RhcnRBZGRyZXNzKTsKLSAgICAgICAgICBNTV9XYWl0KDEwMDApOwotICAgICAgICB9CisJICBSRUdfV1IocERldmljZSxyeENwdS5yZWcuc3RhdGUsIDB4ZmZmZmZmZmYpOworCSAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLm1vZGUsQ1BVX01PREVfSEFMVCk7CisJICBSRUdfV1IocERldmljZSxyeENwdS5yZWcuUEMscEZ3SW1nLT5TdGFydEFkZHJlc3MpOworCSAgTU1fV2FpdCgxMDAwKTsKKwl9CiAKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLnN0YXRlLCAweGZmZmZmZmZmKTsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLm1vZGUsIDApOworCVJFR19XUihwRGV2aWNlLHJ4Q3B1LnJlZy5zdGF0ZSwgMHhmZmZmZmZmZik7CisJUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLm1vZGUsIDApOwogICAgIH0KIAogICAgIGlmIChTdGFydENwdSAmIFQzX1RYX0NQVV9JRCkKICAgICB7Ci0gICAgICAgIC8qIFN0YXJ0IFR4IENQVSAqLwotICAgICAgICBSRUdfV1IocERldmljZSx0eENwdS5yZWcuc3RhdGUsIDB4ZmZmZmZmZmYpOwotICAgICAgICBSRUdfV1IocERldmljZSx0eENwdS5yZWcuUEMscEZ3SW1nLT5TdGFydEFkZHJlc3MpOwotICAgICAgICBmb3IgKGkgPSAwIDsgaSA8IDU7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIGlmIChwRndJbWctPlN0YXJ0QWRkcmVzcyA9PSBSRUdfUkQocERldmljZSx0eENwdS5yZWcuUEMpKQotICAgICAgICAgICAgIGJyZWFrOworCS8qIFN0YXJ0IFR4IENQVSAqLworCVJFR19XUihwRGV2aWNlLHR4Q3B1LnJlZy5zdGF0ZSwgMHhmZmZmZmZmZik7CisJUkVHX1dSKHBEZXZpY2UsdHhDcHUucmVnLlBDLHBGd0ltZy0+U3RhcnRBZGRyZXNzKTsKKwlmb3IgKGkgPSAwIDsgaSA8IDU7IGkrKykKKwl7CisJICBpZiAocEZ3SW1nLT5TdGFydEFkZHJlc3MgPT0gUkVHX1JEKHBEZXZpY2UsdHhDcHUucmVnLlBDKSkKKwkgICAgIGJyZWFrOwogCi0gICAgICAgICAgUkVHX1dSKHBEZXZpY2UsdHhDcHUucmVnLnN0YXRlLCAweGZmZmZmZmZmKTsKLSAgICAgICAgICBSRUdfV1IocERldmljZSx0eENwdS5yZWcubW9kZSxDUFVfTU9ERV9IQUxUKTsKLSAgICAgICAgICBSRUdfV1IocERldmljZSx0eENwdS5yZWcuUEMscEZ3SW1nLT5TdGFydEFkZHJlc3MpOwotICAgICAgICAgIE1NX1dhaXQoMTAwMCk7Ci0gICAgICAgIH0KKwkgIFJFR19XUihwRGV2aWNlLHR4Q3B1LnJlZy5zdGF0ZSwgMHhmZmZmZmZmZik7CisJICBSRUdfV1IocERldmljZSx0eENwdS5yZWcubW9kZSxDUFVfTU9ERV9IQUxUKTsKKwkgIFJFR19XUihwRGV2aWNlLHR4Q3B1LnJlZy5QQyxwRndJbWctPlN0YXJ0QWRkcmVzcyk7CisJICBNTV9XYWl0KDEwMDApOworCX0KIAotICAgICAgICBSRUdfV1IocERldmljZSx0eENwdS5yZWcuc3RhdGUsIDB4ZmZmZmZmZmYpOwotICAgICAgICBSRUdfV1IocERldmljZSx0eENwdS5yZWcubW9kZSwgMCk7CisJUkVHX1dSKHBEZXZpY2UsdHhDcHUucmVnLnN0YXRlLCAweGZmZmZmZmZmKTsKKwlSRUdfV1IocERldmljZSx0eENwdS5yZWcubW9kZSwgMCk7CiAgICAgfQogCiAgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOwpAQCAtNjAxMCwyOSArNTk4OCwyOSBAQAogCiAgICAgaWYgKGNwdV9udW1iZXIgPT0gVDNfUlhfQ1BVX0lEKQogICAgIHsKLSAgICAgICAgZm9yIChpID0gMCA7IGkgPCAxMDAwMDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBSRUdfV1IocERldmljZSxyeENwdS5yZWcuc3RhdGUsIDB4ZmZmZmZmZmYpOwotICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLm1vZGUsQ1BVX01PREVfSEFMVCk7CisJZm9yIChpID0gMCA7IGkgPCAxMDAwMDsgaSsrKQorCXsKKwkgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLnN0YXRlLCAweGZmZmZmZmZmKTsKKwkgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLm1vZGUsQ1BVX01PREVfSEFMVCk7CiAKLSAgICAgICAgICAgIGlmIChSRUdfUkQocERldmljZSxyeENwdS5yZWcubW9kZSkgJiBDUFVfTU9ERV9IQUxUKQotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCSAgICBpZiAoUkVHX1JEKHBEZXZpY2UscnhDcHUucmVnLm1vZGUpICYgQ1BVX01PREVfSEFMVCkKKwkgICAgICBicmVhazsKKwl9CiAKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLnN0YXRlLCAweGZmZmZmZmZmKTsKLSAgICAgICAgUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLm1vZGUsQ1BVX01PREVfSEFMVCk7Ci0gICAgICAgIE1NX1dhaXQoMTApOworCVJFR19XUihwRGV2aWNlLHJ4Q3B1LnJlZy5zdGF0ZSwgMHhmZmZmZmZmZik7CisJUkVHX1dSKHBEZXZpY2UscnhDcHUucmVnLm1vZGUsQ1BVX01PREVfSEFMVCk7CisJTU1fV2FpdCgxMCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGZvciAoaSA9IDAgOyBpIDwgMTAwMDA7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgUkVHX1dSKHBEZXZpY2UsdHhDcHUucmVnLnN0YXRlLCAweGZmZmZmZmZmKTsKLSAgICAgICAgICAgIFJFR19XUihwRGV2aWNlLHR4Q3B1LnJlZy5tb2RlLENQVV9NT0RFX0hBTFQpOworCWZvciAoaSA9IDAgOyBpIDwgMTAwMDA7IGkrKykKKwl7CisJICAgIFJFR19XUihwRGV2aWNlLHR4Q3B1LnJlZy5zdGF0ZSwgMHhmZmZmZmZmZik7CisJICAgIFJFR19XUihwRGV2aWNlLHR4Q3B1LnJlZy5tb2RlLENQVV9NT0RFX0hBTFQpOwogCi0gICAgICAgICAgICBpZiAoUkVHX1JEKHBEZXZpY2UsdHhDcHUucmVnLm1vZGUpICYgQ1BVX01PREVfSEFMVCkKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisJICAgIGlmIChSRUdfUkQocERldmljZSx0eENwdS5yZWcubW9kZSkgJiBDUFVfTU9ERV9IQUxUKQorCSAgICAgICBicmVhazsKKwl9CiAgICAgfQogCiAgIHJldHVybiAoKCBpID09IDEwMDAwKSA/IExNX1NUQVRVU19GQUlMVVJFIDogTE1fU1RBVFVTX1NVQ0NFU1MpOwpAQCAtNjA0OSwxMCArNjAyNywxMCBAQAogCWlmKEJsaW5rRHVyYXRpb25TZWMgPT0gMCkKIAl7CiAJCXJldHVybiAwOwotICAgICAgICB9CisJfQogCWlmKEJsaW5rRHVyYXRpb25TZWMgPiAxMjApCi0gICAgICAgIHsKLQkgICAgICAgIEJsaW5rRHVyYXRpb25TZWMgPSAxMjA7CisJeworCQlCbGlua0R1cmF0aW9uU2VjID0gMTIwOwogCX0KIAogCU9sZGNmZyA9IFJFR19SRChwRGV2aWNlLCBNYWNDdHJsLkxlZEN0cmwpOwpAQCAtNjA2MCw3ICs2MDM4LDcgQEAKIAl7CiAJCWlmKGogJSAyKQogCQl7Ci0JCSAgICAgICAgLyogVHVybiBvbiB0aGUgTEVEcy4gKi8KKwkJCS8qIFR1cm4gb24gdGhlIExFRHMuICovCiAJCQlSRUdfV1IocERldmljZSwgTWFjQ3RybC5MZWRDdHJsLAogCQkJCUxFRF9DVFJMX09WRVJSSURFX0xJTktfTEVEIHwKIAkJCQlMRURfQ1RSTF8xMDAwTUJQU19MRURfT04gfApAQCAtNjA3MiwyMCArNjA1MCwyMCBAQAogCQl9CiAJCWVsc2UKIAkJewotCQkgICAgICAgIC8qIFR1cm4gb2ZmIHRoZSBMRURzLiAqLworCQkJLyogVHVybiBvZmYgdGhlIExFRHMuICovCiAJCQlSRUdfV1IocERldmljZSwgTWFjQ3RybC5MZWRDdHJsLAogCQkJCUxFRF9DVFJMX09WRVJSSURFX0xJTktfTEVEIHwKIAkJCQlMRURfQ1RSTF9PVkVSUklERV9UUkFGRklDX0xFRCk7CiAJCX0KIAogI2lmbmRlZiBFTUJFRERFRAotICAgICAgICAgICAgICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotICAgICAgICAgICAgICAgIGlmIChzY2hlZHVsZV90aW1lb3V0KEhaLzIpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FSU5UUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKwkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCWlmIChzY2hlZHVsZV90aW1lb3V0KEhaLzIpICE9IDApIHsKKwkJCXJldCA9IC1FSU5UUjsKKwkJCWJyZWFrOworCQl9CiAjZWxzZQotICAgICAgICAgICAgICAgIHVkZWxheSgxMDAwMDApOyAgLyogMXMgc2xlZXAgKi8KKwkJdWRlbGF5KDEwMDAwMCk7ICAvKiAxcyBzbGVlcCAqLwogI2VuZGlmCiAJfQogCVJFR19XUihwRGV2aWNlLCBNYWNDdHJsLkxlZEN0cmwsIE9sZGNmZyk7CkBAIC02MDkzLDggKzYwNzEsOCBAQAogfQogCiBpbnQgdDNfZG9fZG1hKFBMTV9ERVZJQ0VfQkxPQ0sgcERldmljZSwKLSAgICAgICAgICAgICAgICAgICBMTV9QSFlTSUNBTF9BRERSRVNTIGhvc3RfYWRkcl9waHksIGludCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgaW50IGRtYV9yZWFkKQorCQkgICBMTV9QSFlTSUNBTF9BRERSRVNTIGhvc3RfYWRkcl9waHksIGludCBsZW5ndGgsCisJCSAgIGludCBkbWFfcmVhZCkKIHsKICAgICBUM19ETUFfREVTQyBkbWFfZGVzYzsKICAgICBpbnQgaTsKQEAgLTYxMTIsMTUgKzYwOTAsMTUgQEAKIAogICAgIGlmIChkbWFfcmVhZCkKICAgICB7Ci0gICAgICAgIGRtYV9kZXNjLmNxaWRfc3FpZCA9IChUM19RSURfUlhfQkRfQ09NUCA8PCA4KSB8Ci0gICAgICAgICAgICBUM19RSURfRE1BX0hJR0hfUFJJX1JFQUQ7Ci0gICAgICAgIFJFR19XUihwRGV2aWNlLCBEbWFSZWFkLk1vZGUsIERNQV9SRUFEX01PREVfRU5BQkxFKTsKKwlkbWFfZGVzYy5jcWlkX3NxaWQgPSAoVDNfUUlEX1JYX0JEX0NPTVAgPDwgOCkgfAorCSAgICBUM19RSURfRE1BX0hJR0hfUFJJX1JFQUQ7CisJUkVHX1dSKHBEZXZpY2UsIERtYVJlYWQuTW9kZSwgRE1BX1JFQURfTU9ERV9FTkFCTEUpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBkbWFfZGVzYy5jcWlkX3NxaWQgPSAoVDNfUUlEX1JYX0RBVEFfQ09NUCA8PCA4KSB8Ci0gICAgICAgICAgICBUM19RSURfRE1BX0hJR0hfUFJJX1dSSVRFOwotICAgICAgICBSRUdfV1IocERldmljZSwgRG1hV3JpdGUuTW9kZSwgRE1BX1dSSVRFX01PREVfRU5BQkxFKTsKKwlkbWFfZGVzYy5jcWlkX3NxaWQgPSAoVDNfUUlEX1JYX0RBVEFfQ09NUCA8PCA4KSB8CisJICAgIFQzX1FJRF9ETUFfSElHSF9QUklfV1JJVEU7CisJUkVHX1dSKHBEZXZpY2UsIERtYVdyaXRlLk1vZGUsIERNQV9XUklURV9NT0RFX0VOQUJMRSk7CiAgICAgfQogCiAgICAgZG1hX2Rlc2NfYWRkciA9IFQzX05JQ19ETUFfREVTQ19QT09MX0FERFI7CkBAIC02MTI4LDI4ICs2MTA2LDI4IEBACiAgICAgLyogV3JpdGluZyB0aGlzIERNQSBkZXNjcmlwdG9yIHRvIERNQSBtZW1vcnkgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKFQzX0RNQV9ERVNDKTsgaSArPSA0KQogICAgIHsKLSAgICAgICAgdmFsdWUzMiA9ICooKFBMTV9VSU5UMzIpICgoKFBMTV9VSU5UOCkgJmRtYV9kZXNjKSArIGkpKTsKLSAgICAgICAgTU1fV3JpdGVDb25maWczMihwRGV2aWNlLCBUM19QQ0lfTUVNX1dJTl9BRERSX1JFRywgZG1hX2Rlc2NfYWRkcitpKTsKLSAgICAgICAgTU1fV3JpdGVDb25maWczMihwRGV2aWNlLCBUM19QQ0lfTUVNX1dJTl9EQVRBX1JFRywgY3B1X3RvX2xlMzIodmFsdWUzMikpOworCXZhbHVlMzIgPSAqKChQTE1fVUlOVDMyKSAoKChQTE1fVUlOVDgpICZkbWFfZGVzYykgKyBpKSk7CisJTU1fV3JpdGVDb25maWczMihwRGV2aWNlLCBUM19QQ0lfTUVNX1dJTl9BRERSX1JFRywgZG1hX2Rlc2NfYWRkcitpKTsKKwlNTV9Xcml0ZUNvbmZpZzMyKHBEZXZpY2UsIFQzX1BDSV9NRU1fV0lOX0RBVEFfUkVHLCBjcHVfdG9fbGUzMih2YWx1ZTMyKSk7CiAgICAgfQogICAgIE1NX1dyaXRlQ29uZmlnMzIocERldmljZSwgVDNfUENJX01FTV9XSU5fQUREUl9SRUcsIDApOwogCiAgICAgaWYgKGRtYV9yZWFkKQotICAgICAgICBSRUdfV1IocERldmljZSwgRnRxLkRtYUhpZ2hSZWFkRnRxRmlmb0VucXVldWVEZXF1ZXVlLCBkbWFfZGVzY19hZGRyKTsKKwlSRUdfV1IocERldmljZSwgRnRxLkRtYUhpZ2hSZWFkRnRxRmlmb0VucXVldWVEZXF1ZXVlLCBkbWFfZGVzY19hZGRyKTsKICAgICBlbHNlCi0gICAgICAgIFJFR19XUihwRGV2aWNlLCBGdHEuRG1hSGlnaFdyaXRlRnRxRmlmb0VucXVldWVEZXF1ZXVlLCBkbWFfZGVzY19hZGRyKTsKKwlSRUdfV1IocERldmljZSwgRnRxLkRtYUhpZ2hXcml0ZUZ0cUZpZm9FbnF1ZXVlRGVxdWV1ZSwgZG1hX2Rlc2NfYWRkcik7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgNDA7IGkrKykKICAgICB7Ci0gICAgICAgIGlmIChkbWFfcmVhZCkKLSAgICAgICAgICAgIHZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgRnRxLlJjdkJkQ29tcEZ0cUZpZm9FbnF1ZXVlRGVxdWV1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgRnRxLlJjdkRhdGFDb21wRnRxRmlmb0VucXVldWVEZXF1ZXVlKTsKKwlpZiAoZG1hX3JlYWQpCisJICAgIHZhbHVlMzIgPSBSRUdfUkQocERldmljZSwgRnRxLlJjdkJkQ29tcEZ0cUZpZm9FbnF1ZXVlRGVxdWV1ZSk7CisJZWxzZQorCSAgICB2YWx1ZTMyID0gUkVHX1JEKHBEZXZpY2UsIEZ0cS5SY3ZEYXRhQ29tcEZ0cUZpZm9FbnF1ZXVlRGVxdWV1ZSk7CiAKLSAgICAgICAgaWYgKCh2YWx1ZTMyICYgMHhmZmZmKSA9PSBkbWFfZGVzY19hZGRyKQotICAgICAgICAgICAgYnJlYWs7CisJaWYgKCh2YWx1ZTMyICYgMHhmZmZmKSA9PSBkbWFfZGVzY19hZGRyKQorCSAgICBicmVhazsKIAotICAgICAgICBNTV9XYWl0KDEwKTsKKwlNTV9XYWl0KDEwKTsKICAgICB9CiAKICAgICByZXR1cm4gTE1fU1RBVFVTX1NVQ0NFU1M7CkBAIC02MTU3LDY1ICs2MTM1LDY1IEBACiAKIFNUQVRJQyBMTV9TVEFUVVMKIExNX0RtYVRlc3QoUExNX0RFVklDRV9CTE9DSyBwRGV2aWNlLCBQTE1fVUlOVDggcEJ1ZmZlclZpcnQsCi0gICAgICAgICAgIExNX1BIWVNJQ0FMX0FERFJFU1MgQnVmZmVyUGh5LCBMTV9VSU5UMzIgQnVmZmVyU2l6ZSkKKwkgICBMTV9QSFlTSUNBTF9BRERSRVNTIEJ1ZmZlclBoeSwgTE1fVUlOVDMyIEJ1ZmZlclNpemUpCiB7CiAgICAgaW50IGo7CiAgICAgTE1fVUlOVDMyICpwdHI7CiAgICAgaW50IGRtYV9zdWNjZXNzID0gMDsKIAogICAgIGlmKFQzX0FTSUNfUkVWKHBEZXZpY2UtPkNoaXBSZXZJZCkgIT0gVDNfQVNJQ19SRVZfNTcwMCAmJgotICAgICAgICBUM19BU0lDX1JFVihwRGV2aWNlLT5DaGlwUmV2SWQpICE9IFQzX0FTSUNfUkVWXzU3MDEpCisJVDNfQVNJQ19SRVYocERldmljZS0+Q2hpcFJldklkKSAhPSBUM19BU0lDX1JFVl81NzAxKQogICAgIHsKLSAgICAgICAgcmV0dXJuIExNX1NUQVRVU19TVUNDRVNTOworCXJldHVybiBMTV9TVEFUVVNfU1VDQ0VTUzsKICAgICB9CiAgICAgd2hpbGUgKCFkbWFfc3VjY2VzcykKICAgICB7Ci0gICAgICAgIC8qIEZpbGwgZGF0YSB3aXRoIGluY3JlbWVudGFsIHBhdHRlcm5zICovCi0gICAgICAgIHB0ciA9IChMTV9VSU5UMzIgKilwQnVmZmVyVmlydDsKLSAgICAgICAgZm9yIChqID0gMDsgaiA8IEJ1ZmZlclNpemUvNDsgaisrKQotICAgICAgICAgICAgKnB0cisrID0gajsKKwkvKiBGaWxsIGRhdGEgd2l0aCBpbmNyZW1lbnRhbCBwYXR0ZXJucyAqLworCXB0ciA9IChMTV9VSU5UMzIgKilwQnVmZmVyVmlydDsKKwlmb3IgKGogPSAwOyBqIDwgQnVmZmVyU2l6ZS80OyBqKyspCisJICAgICpwdHIrKyA9IGo7CiAKLSAgICAgICAgaWYgKHQzX2RvX2RtYShwRGV2aWNlLEJ1ZmZlclBoeSxCdWZmZXJTaXplLCAxKSA9PSBMTV9TVEFUVVNfRkFJTFVSRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIExNX1NUQVRVU19GQUlMVVJFOwotICAgICAgICB9CisJaWYgKHQzX2RvX2RtYShwRGV2aWNlLEJ1ZmZlclBoeSxCdWZmZXJTaXplLCAxKSA9PSBMTV9TVEFUVVNfRkFJTFVSRSkKKwl7CisJICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKKwl9CiAKLSAgICAgICAgTU1fV2FpdCg0MCk7Ci0gICAgICAgIHB0ciA9IChMTV9VSU5UMzIgKilwQnVmZmVyVmlydDsKLSAgICAgICAgLyogRmlsbCBkYXRhIHdpdGggemVybyAqLwotICAgICAgICBmb3IgKGogPSAwOyBqIDwgQnVmZmVyU2l6ZS80OyBqKyspCi0gICAgICAgICAgICAqcHRyKysgPSAwOworCU1NX1dhaXQoNDApOworCXB0ciA9IChMTV9VSU5UMzIgKilwQnVmZmVyVmlydDsKKwkvKiBGaWxsIGRhdGEgd2l0aCB6ZXJvICovCisJZm9yIChqID0gMDsgaiA8IEJ1ZmZlclNpemUvNDsgaisrKQorCSAgICAqcHRyKysgPSAwOwogCi0gICAgICAgIGlmICh0M19kb19kbWEocERldmljZSxCdWZmZXJQaHksQnVmZmVyU2l6ZSwgMCkgPT0gTE1fU1RBVFVTX0ZBSUxVUkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKLSAgICAgICAgfQorCWlmICh0M19kb19kbWEocERldmljZSxCdWZmZXJQaHksQnVmZmVyU2l6ZSwgMCkgPT0gTE1fU1RBVFVTX0ZBSUxVUkUpCisJeworCSAgICByZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7CisJfQogCi0gICAgICAgIE1NX1dhaXQoNDApOwotICAgICAgICAvKiBDaGVjayBmb3IgZGF0YSAqLwotICAgICAgICBwdHIgPSAoTE1fVUlOVDMyICopcEJ1ZmZlclZpcnQ7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCBCdWZmZXJTaXplLzQ7IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCpwdHIrKyAhPSBqKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgocERldmljZS0+RG1hUmVhZFdyaXRlQ3RybCAmIERNQV9DVFJMX1dSSVRFX0JPVU5EQVJZX01BU0spCi0gICAgICAgICAgICAgICAgICAgID09IERNQV9DVFJMX1dSSVRFX0JPVU5EQVJZX0RJU0FCTEUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5EbWFSZWFkV3JpdGVDdHJsID0gKHBEZXZpY2UtPkRtYVJlYWRXcml0ZUN0cmwgJgotICAgICAgICAgICAgICAgICAgICAgICAgIH5ETUFfQ1RSTF9XUklURV9CT1VOREFSWV9NQVNLKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIERNQV9DVFJMX1dSSVRFX0JPVU5EQVJZXzE2OwotICAgICAgICAgICAgICAgICAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLkRtYVJlYWRXcml0ZUN0cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwRGV2aWNlLT5EbWFSZWFkV3JpdGVDdHJsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gTE1fU1RBVFVTX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoaiA9PSAoQnVmZmVyU2l6ZS80KSkKLSAgICAgICAgICAgIGRtYV9zdWNjZXNzID0gMTsKKwlNTV9XYWl0KDQwKTsKKwkvKiBDaGVjayBmb3IgZGF0YSAqLworCXB0ciA9IChMTV9VSU5UMzIgKilwQnVmZmVyVmlydDsKKwlmb3IgKGogPSAwOyBqIDwgQnVmZmVyU2l6ZS80OyBqKyspCisJeworCSAgICBpZiAoKnB0cisrICE9IGopCisJICAgIHsKKwkJaWYgKChwRGV2aWNlLT5EbWFSZWFkV3JpdGVDdHJsICYgRE1BX0NUUkxfV1JJVEVfQk9VTkRBUllfTUFTSykKKwkJICAgID09IERNQV9DVFJMX1dSSVRFX0JPVU5EQVJZX0RJU0FCTEUpCisJCXsKKwkJICAgIHBEZXZpY2UtPkRtYVJlYWRXcml0ZUN0cmwgPSAocERldmljZS0+RG1hUmVhZFdyaXRlQ3RybCAmCisJCQkgfkRNQV9DVFJMX1dSSVRFX0JPVU5EQVJZX01BU0spIHwKKwkJCSAgRE1BX0NUUkxfV1JJVEVfQk9VTkRBUllfMTY7CisJCSAgICBSRUdfV1IocERldmljZSwgUGNpQ2ZnLkRtYVJlYWRXcml0ZUN0cmwsCisJCQkgICBwRGV2aWNlLT5EbWFSZWFkV3JpdGVDdHJsKTsKKwkJICAgIGJyZWFrOworCQkgfQorCQkgZWxzZQorCQkgeworCQkgICAgIHJldHVybiBMTV9TVEFUVVNfRkFJTFVSRTsKKwkJIH0KKwkgICAgfQorCX0KKwlpZiAoaiA9PSAoQnVmZmVyU2l6ZS80KSkKKwkgICAgZG1hX3N1Y2Nlc3MgPSAxOwogICAgIH0KICAgICByZXR1cm4gTE1fU1RBVFVTX1NVQ0NFU1M7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RpZ29uMy5oIGIvZHJpdmVycy90aWdvbjMuaAppbmRleCA4ZDMwYWM5Li5lYTQzNjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RpZ29uMy5oCisrKyBiL2RyaXZlcnMvdGlnb24zLmgKQEAgLTI1LDkgKzI1LDkgQEAKIC8qIGlvIGRlZmluZXMgKi8KICNpZiAhZGVmaW5lZChCSUdfRU5ESUFOX0hPU1QpCiAjZGVmaW5lIHJlYWRsKGFkZHIpIFwKLSAgICAgICAgICAgICAgKExPTkdTV0FQKCgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZGRyKSkpKQorCSAgICAgIChMT05HU1dBUCgoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoYWRkcikpKSkKICNkZWZpbmUgd3JpdGVsKGIsYWRkcikgXAotICAgICAgICAgICAgICAoKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKGFkZHIpKSA9IChMT05HU1dBUChiKSkpCisJICAgICAgKCgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZGRyKSkgPSAoTE9OR1NXQVAoYikpKQogI2Vsc2UKICNpZiAwIC8qICFkZWZpbmVkKFBQQzYwMykgKi8KICNkZWZpbmUgcmVhZGwoYWRkcikgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50KikoMHhhMDAwMDAwMCArICh1bnNpZ25lZCBsb25nKShhZGRyKSkpCkBAIC01Niw4ICs1Niw2IEBACiAjZW5kaWYKIAogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIENvbnN0YW50cy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05NSw3ICs5Myw3IEBACiAjZGVmaW5lIEJDTTU3MDBfQlhfTUlOX0ZSQUdfQlVGX1NJWkUgICAgICAgIDE2ICAvKiBuaWNlIGFsaWduZWQgc2l6ZS4gKi8KICNkZWZpbmUgQkNNNTcwMF9CWF9NSU5fRlJBR19CVUZfU0laRV9NQVNLICAgKEJDTTU3MDBfQlhfTUlOX0ZSQUdfQlVGX1NJWkUtMSkKICNkZWZpbmUgQkNNNTcwMF9CWF9UWF9DT1BZX0JVRl9TSVpFICAgICAgICAgKEJDTTU3MDBfQlhfTUlOX0ZSQUdfQlVGX1NJWkUgKiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9GUkFHTUVOVF9DT1VOVCkKKwkJCQkJICAgIE1BWF9GUkFHTUVOVF9DT1VOVCkKIAogLyogTUFHSUMgbnVtYmVyLiAqLwogLyogI2RlZmluZSBUM19NQUdJQ19OVU0gICAgICAgICAgICAgICAgICAgICAgICAnS2V2VCcgKi8KQEAgLTI1OSwxMyArMjU3LDEzIEBACiAjZGVmaW5lIFQzX05JQ19NSU5JX1JDVl9CVUZGRVJfREVTQ19BRERSX0VYVF9NRU0gICAgMHhlMDAwCiAKICNkZWZpbmUgVDNfTklDX1NORF9CVUZGRVJfREVTQ19TSVpFICAgICAgICAgKFQzX1NFTkRfUkNCX0VOVFJZX0NPVU5UICogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoVDNfU05EX0JEKSAvIDQpCisJCQkJCSAgICBzaXplb2YoVDNfU05EX0JEKSAvIDQpCiAKICNkZWZpbmUgVDNfTklDX1NURF9SQ1ZfQlVGRkVSX0RFU0NfU0laRSAgICAgKFQzX1NURF9SQ1ZfUkNCX0VOVFJZX0NPVU5UICogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoVDNfUkNWX0JEKSAvIDQpCisJCQkJCSAgICBzaXplb2YoVDNfUkNWX0JEKSAvIDQpCiAKICNkZWZpbmUgVDNfTklDX0pVTUJPX1JDVl9CVUZGRVJfREVTQ19TSVpFICAgKFQzX0pVTUJPX1JDVl9SQ0JfRU5UUllfQ09VTlQgKiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihUM19FWFRfUkNWX0JEKSAvIDQpCisJCQkJCSAgICBzaXplb2YoVDNfRVhUX1JDVl9CRCkgLyA0KQogCiAKIC8qIE1CVUYgcG9vbC4gKi8KQEAgLTMyMSw3ICszMTksNiBAQAogfSBUM19GV0lNR19JTkZPLCAqUFQzX0ZXSU1HX0lORk87CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogVGlnb24zIFBDSSBSZWdpc3RlcnMuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTM0LDcgKzUzMSw2IEBACiAjZGVmaW5lIFBIWV9BTl9FWFBBTlNJT05fUkVHICAgICAgICAgICAgICAgICAgICAgICAgMHgwNgogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEJDTTU0MDAgYW5kIEJDTTU0MDEgcGh5IGluZm8uICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTU5LDE3ICs1NTUsMTYgQEAKICNkZWZpbmUgUEhZX0lEX01PREVMX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwM2YwCiAjZGVmaW5lIFBIWV9JRF9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgogI2RlZmluZSBQSFlfSURfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQSFlfSURfT1VJX01BU0sgfCAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQSFlfSURfTU9ERUxfTUFTSykKKwkJCQkJCSAgICBQSFlfSURfTU9ERUxfTUFTSykKIAogCiAjZGVmaW5lIFVOS05PV05fUEhZX0lEKHgpICAgKCgoKHgpICYgUEhZX0lEX01BU0spICE9IFBIWV9CQ001NDAwX1BIWV9JRCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUEhZX0lEX01BU0spICE9IFBIWV9CQ001NDAxX1BIWV9JRCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUEhZX0lEX01BU0spICE9IFBIWV9CQ001NDExX1BIWV9JRCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUEhZX0lEX01BU0spICE9IFBIWV9CQ001NzAxX1BIWV9JRCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUEhZX0lEX01BU0spICE9IFBIWV9CQ001NzAzX1BIWV9JRCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUEhZX0lEX01BU0spICE9IFBIWV9CQ001NzA0X1BIWV9JRCkgJiYgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgUEhZX0lEX01BU0spICE9IFBIWV9CQ004MDAyX1BIWV9JRCkpCi0KKwkJCSAgICAoKCh4KSAmIFBIWV9JRF9NQVNLKSAhPSBQSFlfQkNNNTQwMV9QSFlfSUQpICYmIFwKKwkJCSAgICAoKCh4KSAmIFBIWV9JRF9NQVNLKSAhPSBQSFlfQkNNNTQxMV9QSFlfSUQpICYmIFwKKwkJCSAgICAoKCh4KSAmIFBIWV9JRF9NQVNLKSAhPSBQSFlfQkNNNTcwMV9QSFlfSUQpICYmIFwKKwkJCSAgICAoKCh4KSAmIFBIWV9JRF9NQVNLKSAhPSBQSFlfQkNNNTcwM19QSFlfSUQpICYmIFwKKwkJCSAgICAoKCh4KSAmIFBIWV9JRF9NQVNLKSAhPSBQSFlfQkNNNTcwNF9QSFlfSUQpICYmIFwKKwkJCSAgICAoKCh4KSAmIFBIWV9JRF9NQVNLKSAhPSBQSFlfQkNNODAwMl9QSFlfSUQpKQogCiAKIC8qIDEwMDBCYXNlLVQgY29udHJvbCByZWdpc3Rlci4gKi8KQEAgLTY5Nyw3ICs2OTIsNiBAQAogI2RlZmluZSBCQ001NDBYX0lOVF9NQVNLX1JFRyAgICAgICAgICAgICAgICAgICAgICAgIDB4MWIKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBSZWdpc3RlciBkZWZpbml0aW9ucy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03MzAsNyArNzI0LDYgQEAKIH1UM19ETUFfREVTQywgKlBUM19ETUFfREVTQzsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBSaW5nIGNvbnRyb2wgYmxvY2suICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzM5LDE3ICs3MzIsMTcgQEAKICAgICBUM182NEJJVF9SRUdJU1RFUiBIb3N0UmluZ0FkZHI7CiAKICAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7CisJc3RydWN0IHsKICNpZmRlZiBCSUdfRU5ESUFOX0hPU1QKLSAgICAgICAgICAgIFQzXzE2QklUX1JFR0lTVEVSIE1heExlbjsKLSAgICAgICAgICAgIFQzXzE2QklUX1JFR0lTVEVSIEZsYWdzOworCSAgICBUM18xNkJJVF9SRUdJU1RFUiBNYXhMZW47CisJICAgIFQzXzE2QklUX1JFR0lTVEVSIEZsYWdzOwogI2Vsc2UgLyogQklHX0VORElBTl9IT1NUICovCi0gICAgICAgICAgICBUM18xNkJJVF9SRUdJU1RFUiBGbGFnczsKLSAgICAgICAgICAgIFQzXzE2QklUX1JFR0lTVEVSIE1heExlbjsKKwkgICAgVDNfMTZCSVRfUkVHSVNURVIgRmxhZ3M7CisJICAgIFQzXzE2QklUX1JFR0lTVEVSIE1heExlbjsKICNlbmRpZgotICAgICAgICB9IHM7CisJfSBzOwogCi0gICAgICAgIFQzXzMyQklUX1JFR0lTVEVSIE1heExlbl9GbGFnczsKKwlUM18zMkJJVF9SRUdJU1RFUiBNYXhMZW5fRmxhZ3M7CiAgICAgfSB1OwogCiAgICAgVDNfMzJCSVRfUkVHSVNURVIgTmljUmluZ0FkZHI7CkBAIC03NTksNyArNzUyLDYgQEAKICNkZWZpbmUgVDNfUkNCX0ZMQUdfUklOR19ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgICAgQklUXzEKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBTdGF0dXMgYmxvY2suICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzg2LDggKzc3OCw4IEBACiAgICAgdm9sYXRpbGUgTE1fVUlOVDE2IFJjdk1pbmlDb25JZHg7CiAKICAgICBzdHJ1Y3QgewotICAgICAgICB2b2xhdGlsZSBMTV9VSU5UMTYgU2VuZENvbklkeDsgICAvKiBTZW5kIGNvbnN1bWVyIGluZGV4LiAqLwotICAgICAgICB2b2xhdGlsZSBMTV9VSU5UMTYgUmN2UHJvZElkeDsgICAvKiBSZWNlaXZlIHByb2R1Y2VyIGluZGV4LiAqLworCXZvbGF0aWxlIExNX1VJTlQxNiBTZW5kQ29uSWR4OyAgIC8qIFNlbmQgY29uc3VtZXIgaW5kZXguICovCisJdm9sYXRpbGUgTE1fVUlOVDE2IFJjdlByb2RJZHg7ICAgLyogUmVjZWl2ZSBwcm9kdWNlciBpbmRleC4gKi8KICAgICB9IElkeFsxNl07CiAjZWxzZSAvKiBCSUdfRU5ESUFOX0hPU1QgKi8KICAgICB2b2xhdGlsZSBMTV9VSU5UMTYgUmN2SnVtYm9Db25JZHg7CkBAIC03OTcsMTQgKzc4OSwxMyBAQAogICAgIHZvbGF0aWxlIExNX1VJTlQxNiBSZXNlcnZlZDI7CiAKICAgICBzdHJ1Y3QgewotICAgICAgICB2b2xhdGlsZSBMTV9VSU5UMTYgUmN2UHJvZElkeDsgICAvKiBSZWNlaXZlIHByb2R1Y2VyIGluZGV4LiAqLwotICAgICAgICB2b2xhdGlsZSBMTV9VSU5UMTYgU2VuZENvbklkeDsgICAvKiBTZW5kIGNvbnN1bWVyIGluZGV4LiAqLworCXZvbGF0aWxlIExNX1VJTlQxNiBSY3ZQcm9kSWR4OyAgIC8qIFJlY2VpdmUgcHJvZHVjZXIgaW5kZXguICovCisJdm9sYXRpbGUgTE1fVUlOVDE2IFNlbmRDb25JZHg7ICAgLyogU2VuZCBjb25zdW1lciBpbmRleC4gKi8KICAgICB9IElkeFsxNl07CiAjZW5kaWYKIH0gVDNfU1RBVFVTX0JMT0NLLCAqUFQzX1NUQVRVU19CTE9DSzsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBSZWNlaXZlIGJ1ZmZlciBkZXNjcmlwdG9ycy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04ODcsNyArODc4LDYgQEAKICNkZWZpbmUgUkNWX0JEX0ZMQUdfVENQX1BBQ0tFVCAgICAgICAgICAgICAgICAgICAgICAweDQwMDAKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBTZW5kIGJ1ZmZlciBkZXNjcmlwdG9yLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTg5NiwzMSArODg2LDMxIEBACiAgICAgVDNfNjRCSVRfSE9TVF9BRERSIEhvc3RBZGRyOwogCiAgICAgdW5pb24gewotICAgICAgICBzdHJ1Y3QgeworCXN0cnVjdCB7CiAjaWZkZWYgQklHX0VORElBTl9IT1NUCi0gICAgICAgICAgICBMTV9VSU5UMTYgTGVuOwotICAgICAgICAgICAgTE1fVUlOVDE2IEZsYWdzOworCSAgICBMTV9VSU5UMTYgTGVuOworCSAgICBMTV9VSU5UMTYgRmxhZ3M7CiAjZWxzZSAvKiBCSUdfRU5ESUFOX0hPU1QgKi8KLSAgICAgICAgICAgIExNX1VJTlQxNiBGbGFnczsKLSAgICAgICAgICAgIExNX1VJTlQxNiBMZW47CisJICAgIExNX1VJTlQxNiBGbGFnczsKKwkgICAgTE1fVUlOVDE2IExlbjsKICNlbmRpZgotICAgICAgICB9IHMxOworCX0gczE7CiAKLSAgICAgICAgTE1fVUlOVDMyIExlbl9GbGFnczsKKwlMTV9VSU5UMzIgTGVuX0ZsYWdzOwogICAgIH0gdTE7CiAKICAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7CisJc3RydWN0IHsKICNpZmRlZiBCSUdfRU5ESUFOX0hPU1QKLSAgICAgICAgICAgIExNX1VJTlQxNiBSZXNlcnZlZDsKLSAgICAgICAgICAgIExNX1VJTlQxNiBWbGFuVGFnOworCSAgICBMTV9VSU5UMTYgUmVzZXJ2ZWQ7CisJICAgIExNX1VJTlQxNiBWbGFuVGFnOwogI2Vsc2UgLyogQklHX0VORElBTl9IT1NUICovCi0gICAgICAgICAgICBMTV9VSU5UMTYgVmxhblRhZzsKLSAgICAgICAgICAgIExNX1VJTlQxNiBSZXNlcnZlZDsKKwkgICAgTE1fVUlOVDE2IFZsYW5UYWc7CisJICAgIExNX1VJTlQxNiBSZXNlcnZlZDsKICNlbmRpZgotICAgICAgICB9IHMyOworCX0gczI7CiAKLSAgICAgICAgTE1fVUlOVDMyIFZsYW5UYWc7CisJTE1fVUlOVDMyIFZsYW5UYWc7CiAgICAgfSB1MjsKIH0gVDNfU05EX0JELCAqUFQzX1NORF9CRDsKIApAQCAtMTExNiw3ICsxMTA2LDYgQEAKICNkZWZpbmUgVDNfTUJVRl9FTkQgICAgKChUM19OSUNfTUJVRl9QT09MX0FERFIgKyBUM19OSUNfTUJVRl9QT09MX1NJWkUpID4+IDcpCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogU3RhdGlzdGljcyBibG9jay4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMjIxLDcgKzEyMTAsNiBAQAogfSBUM19TVEFUU19CTE9DSywgKlBUM19TVEFUU19CTE9DSzsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTQ2Myw4ICsxNDUxLDggQEAKIAogICAgIC8qIE1BQyBhZGRyZXNzZXMuICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgVDNfMzJCSVRfUkVHSVNURVIgSGlnaDsgICAgICAgICAgICAgLyogVXBwZXIgMiBieXRlcy4gKi8KLSAgICAgICAgVDNfMzJCSVRfUkVHSVNURVIgTG93OyAgICAgICAgICAgICAgLyogTG93ZXIgNCBieXRlcy4gKi8KKwlUM18zMkJJVF9SRUdJU1RFUiBIaWdoOyAgICAgICAgICAgICAvKiBVcHBlciAyIGJ5dGVzLiAqLworCVQzXzMyQklUX1JFR0lTVEVSIExvdzsgICAgICAgICAgICAgIC8qIExvd2VyIDQgYnl0ZXMuICovCiAgICAgfSBNYWNBZGRyWzRdOwogCiAgICAgLyogQUNQSSBNYnVmIHBvaW50ZXIuICovCkBAIC0xNTc4LDggKzE1NjYsOCBAQAogCiAgICAgLyogUmVjZWl2ZSBwbGFjZW1lbnQgcnVsZXMgcmVnaXN0ZXJzLiAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIFQzXzMyQklUX1JFR0lTVEVSIFJ1bGU7Ci0gICAgICAgIFQzXzMyQklUX1JFR0lTVEVSIFZhbHVlOworCVQzXzMyQklUX1JFR0lTVEVSIFJ1bGU7CisJVDNfMzJCSVRfUkVHSVNURVIgVmFsdWU7CiAgICAgfSBSY3ZSdWxlc1sxNl07CiAKICAgICAjZGVmaW5lIFJDVl9ESVNBQkxFX1JVTEVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZgpAQCAtMTYyMyw3ICsxNjExLDYgQEAKIH0gVDNfTUFDX0NPTlRST0wsICpQVDNfTUFDX0NPTlRST0w7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogU2VuZCBkYXRhIGluaXRpYXRvciBjb250cm9sIHJlZ2lzdGVycy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNjY1LDcgKzE2NTIsNiBAQAogfSBUM19TRU5EX0RBVEFfSU5JVElBVE9SLCAqUFQzX1NFTkRfREFUQV9JTklUSUFUT1I7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogU2VuZCBkYXRhIGNvbXBsZXRpb24gY29udHJvbCByZWdpc3RlcnMuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTY4MCw3ICsxNjY2LDYgQEAKIH0gVDNfU0VORF9EQVRBX0NPTVBMRVRJT04sICpQVDNfU0VORF9EQVRBX0NPTVBMRVRJT047CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogU2VuZCBCRCBSaW5nIFNlbGVjdG9yIENvbnRyb2wgUmVnaXN0ZXJzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3MDcsNyArMTY5Miw2IEBACiB9IFQzX1NFTkRfQkRfU0VMRUNUT1IsICpQVDNfU0VORF9CRF9TRUxFQ1RPUjsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBTZW5kIEJEIGluaXRpYXRvciBjb250cm9sIHJlZ2lzdGVycy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNzI5LDcgKzE3MTMsNiBAQAogfSBUM19TRU5EX0JEX0lOSVRJQVRPUiwgKlBUM19TRU5EX0JEX0lOSVRJQVRPUjsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBTZW5kIEJEIENvbXBsZXRpb24gQ29udHJvbC4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNzQ1LDcgKzE3MjgsNiBAQAogfSBUM19TRU5EX0JEX0NPTVBMRVRJT04sICpQVDNfU0VORF9CRF9DT01QTEVUSU9OOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFJlY2VpdmUgbGlzdCBwbGFjZW1lbnQgY29udHJvbCByZWdpc3RlcnMuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTc5MiwxMiArMTc3NCwxMiBAQAogICAgIExNX1VJTlQ4IFVudXNlZDFbMjI0XTsKIAogICAgIHN0cnVjdCB7Ci0gICAgICAgIFQzXzMyQklUX1JFR0lTVEVSIEhlYWQ7Ci0gICAgICAgIFQzXzMyQklUX1JFR0lTVEVSIFRhaWw7Ci0gICAgICAgIFQzXzMyQklUX1JFR0lTVEVSIENvdW50OworCVQzXzMyQklUX1JFR0lTVEVSIEhlYWQ7CisJVDNfMzJCSVRfUkVHSVNURVIgVGFpbDsKKwlUM18zMkJJVF9SRUdJU1RFUiBDb3VudDsKIAotICAgICAgICAvKiBVbnVzZWQgc3BhY2UuICovCi0gICAgICAgIExNX1VJTlQ4IFVudXNlZFs0XTsKKwkvKiBVbnVzZWQgc3BhY2UuICovCisJTE1fVUlOVDggVW51c2VkWzRdOwogICAgIH0gUmN2U2VsZWN0b3JMaXN0WzE2XTsKIAogICAgIC8qIExvY2FsIHN0YXRpc3RpY3MgY291bnRlci4gKi8KQEAgLTE4MTYsNyArMTc5OCw2IEBACiB9IFQzX1JDVl9MSVNUX1BMQUNFTUVOVCwgKlBUM19SQ1ZfTElTVF9QTEFDRU1FTlQ7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUmVjZWl2ZSBEYXRhIGFuZCBSZWNlaXZlIEJEIEluaXRpYXRvciBDb250cm9sLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE4NjcsNyArMTg0OCw2IEBACiB9IFQzX1JDVl9EQVRBX0JEX0lOSVRJQVRPUiwgKlBUM19SQ1ZfREFUQV9CRF9JTklUSUFUT1I7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUmVjZWl2ZSBEYXRhIENvbXBsZXRpb24gQ29udHJvbCBSZWdpc3Rlcy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xODgzLDcgKzE4NjMsNiBAQAogfSBUM19SQ1ZfREFUQV9DT01QTEVUSU9OLCAqUFQzX1JDVl9EQVRBX0NPTVBMRVRJT047CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUmVjZWl2ZSBCRCBJbml0aWF0b3IgQ29udHJvbC4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTEwLDcgKzE4ODksNiBAQAogfSBUM19SQ1ZfQkRfSU5JVElBVE9SLCAqUFQzX1JDVl9CRF9JTklUSUFUT1I7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUmVjZWl2ZSBCRCBDb21wbGV0aW9uIENvbnRyb2wgUmVnaXN0ZXJzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE5MzMsNyArMTkxMSw2IEBACiB9IFQzX1JDVl9CRF9DT01QTEVUSU9OLCAqUFQzX1JDVl9CRF9DT01QTEVUSU9OOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFJlY2VpdmUgbGlzdCBzZWxlY3RvciBjb250cm9sIHJlZ2lzdGVyLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE5NTIsNyArMTkyOSw2IEBACiB9IFQzX1JDVl9MSVNUX1NFTEVDVE9SLCAqUFQzX1JDVl9MSVNUX1NFTEVDVE9SOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIE1idWYgY2x1c3RlciBmcmVlIHJlZ2lzdGVycy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTY5LDcgKzE5NDUsNiBAQAogfSBUM19NQlVGX0NMVVNURVJfRlJFRSwgKlBUM19NQlVGX0NMVVNURVJfRlJFRTsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBIb3N0IGNvYWxlc2NpbmcgY29udHJvbCByZWdpc3RlcnMuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjA1Niw3ICsyMDMxLDYgQEAKIH0gVDNfSE9TVF9DT0FMRVNDSU5HLCAqUFQzX0hPU1RfQ09BTEVTQ0lORzsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBNZW1vcnkgYXJiaXRlciByZWdpc3RlcnMuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjA3Niw3ICsyMDUwLDYgQEAKIH0gVDNfTUVNX0FSQklURVIsICpQVDNfTUVNX0FSQklURVI7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogQnVmZmVyIG1hbmFnZXIgY29udHJvbCByZWdpc3Rlci4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMTIyLDcgKzIwOTUsNiBAQAogfSBUM19CVUZGRVJfTUFOQUdFUiwgKlBUM19CVUZGRVJfTUFOQUdFUjsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBSZWFkIERNQSBjb250cm9sIHJlZ2lzdGVycy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjE1LDcgKzIxODcsNiBAQAogfSBUM19ETUFfV1JJVEUsICpQVDNfRE1BX1dSSVRFOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIE1haWxib3ggcmVnaXN0ZXJzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIzNTgsNyArMjMyOSw2IEBACiB9IFQzX0ZUUSwgKlBUM19GVFE7CiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogTWVzc2FnZSBzaWduYWxlZCBpbnRlcnJ1cHQgcmVnaXN0ZXJzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIzNzYsNyArMjM0Niw2IEBACiB9IFQzX01TR19TSUdOQUxFRF9JTlQsICpQVDNfTVNHX1NJR05BTEVEX0lOVDsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBETUEgQ29tcGxldGlvbiByZWdpc3Rlcy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMzkxLDcgKzIzNjAsNiBAQAogfSBUM19ETUFfQ09NUExFVElPTiwgKlBUM19ETUFfQ09NUExFVElPTjsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBHUkMgcmVnaXN0ZXJzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI2MDMsNyArMjU3MSw2IEBACiB9IFQzX0ZJUlNUXzMyS19TUkFNLCAqUFQzX0ZJUlNUXzMyS19TUkFNOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIE1lbW9yeSBsYXlvdXQuICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjcwNSwxMiArMjY3MiwxMiBAQAogICAgIC8qIEFkZHJlc3MgcmVnaXN0ZXIuICBUaGlzIHJlZ2lzdGVyIGlzIGxvY2F0ZWQgKi8KICAgICAvKiBpbiB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UuICovCiAgICAgdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4ODAwMCAqLwotICAgICAgICBUM19GSVJTVF8zMktfU1JBTSBGaXJzdDMyazsKKwlUM19GSVJTVF8zMktfU1JBTSBGaXJzdDMyazsKIAotICAgICAgICAvKiBVc2UgdGhlIG1lbW9yeSB3aW5kb3cgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyIHRvIGRldGVybWluZSB0aGUgKi8KLSAgICAgICAgLyogTUJVRiBzZWdtZW50LiAqLwotICAgICAgICBMTV9VSU5UMzIgTWJ1ZlszMjc2OC80XTsKLSAgICAgICAgTE1fVUlOVDMyIE1lbUJsb2NrMzJLWzMyNzY4LzRdOworCS8qIFVzZSB0aGUgbWVtb3J5IHdpbmRvdyBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIHRoZSAqLworCS8qIE1CVUYgc2VnbWVudC4gKi8KKwlMTV9VSU5UMzIgTWJ1ZlszMjc2OC80XTsKKwlMTV9VSU5UMzIgTWVtQmxvY2szMktbMzI3NjgvNF07CiAgICAgfSB1SW50TWVtOwogfSBUM19TVERfTUVNX01BUCwgKlBUM19TVERfTUVNX01BUDsKIApAQCAtMjczNiw3ICsyNzAzLDYgQEAKIERFQ0xBUkVfUVVFVUVfVFlQRShMTV9UWF9QQUNLRVRfUSwgTUFYX1RYX1BBQ0tFVF9ERVNDX0NPVU5UKTsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBUeCBjb3VudGVycy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNzUyLDcgKzI3MTgsNiBAQAogfSBMTV9UWF9DT1VOVEVSUywgKlBMTV9UWF9DT1VOVEVSUzsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBSeCBjb3VudGVycy4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNzczLDcgKzI3MzgsNiBAQAogfSBMTV9SWF9DT1VOVEVSUywgKlBMTV9SWF9DT1VOVEVSUzsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBSZWNlaXZlIHByb2R1Y2VyIHJpbmdzLiAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI3ODYsNyArMjc1MCw2IEBACiB9IFQzX1JDVl9QUk9EX1JJTkcsICpQVDNfUkNWX1BST0RfUklORzsKIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBQYWNrZXQgZGVzY3JpcHRvci4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yODA2LDMxICsyNzY5LDMwIEBACiAgICAgTE1fVUlOVDE2IFZsYW5UYWc7CiAKICAgICB1bmlvbiB7Ci0gICAgICAgIC8qIFNlbmQgaW5mby4gKi8KLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIC8qIFNldCB1cCBieSBVTS4gKi8KLSAgICAgICAgICAgIExNX1VJTlQzMiBGcmFnQ291bnQ7CisJLyogU2VuZCBpbmZvLiAqLworCXN0cnVjdCB7CisJICAgIC8qIFNldCB1cCBieSBVTS4gKi8KKwkgICAgTE1fVUlOVDMyIEZyYWdDb3VudDsKIAotICAgICAgICB9IFR4OworCX0gVHg7CiAKLSAgICAgICAgLyogUmVjZWl2ZSBpbmZvLiAqLwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgLyogVGhpcyBkZXNjcmlwdG9yIGJlbG9uZ3MgdG8gZWl0aGVyIFN0ZCwgTWluaSwgb3IgSnVtYm8gcmluZy4gKi8KLSAgICAgICAgICAgIFQzX1JDVl9QUk9EX1JJTkcgUmN2UHJvZFJpbmc7CisJLyogUmVjZWl2ZSBpbmZvLiAqLworCXN0cnVjdCB7CisJICAgIC8qIFRoaXMgZGVzY3JpcHRvciBiZWxvbmdzIHRvIGVpdGhlciBTdGQsIE1pbmksIG9yIEp1bWJvIHJpbmcuICovCisJICAgIFQzX1JDVl9QUk9EX1JJTkcgUmN2UHJvZFJpbmc7CiAKLSAgICAgICAgICAgIC8qIFJlY2VpdmUgYnVmZmVyIHNpemUgKi8KLSAgICAgICAgICAgIExNX1VJTlQzMiBSeEJ1ZmZlclNpemU7CisJICAgIC8qIFJlY2VpdmUgYnVmZmVyIHNpemUgKi8KKwkgICAgTE1fVUlOVDMyIFJ4QnVmZmVyU2l6ZTsKIAotICAgICAgICAgICAgLyogQ2hlY2tzdW0gaW5mb3JtYXRpb24uICovCi0gICAgICAgICAgICBMTV9VSU5UMTYgSXBDaGVja3N1bTsKLSAgICAgICAgICAgIExNX1VJTlQxNiBUY3BVZHBDaGVja3N1bTsKKwkgICAgLyogQ2hlY2tzdW0gaW5mb3JtYXRpb24uICovCisJICAgIExNX1VJTlQxNiBJcENoZWNrc3VtOworCSAgICBMTV9VSU5UMTYgVGNwVWRwQ2hlY2tzdW07CiAKLSAgICAgICAgfSBSeDsKKwl9IFJ4OwogICAgIH0gdTsKIH0gTE1fUEFDS0VUOwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIFRpZ29uMyBkZXZpY2UgYmxvY2suICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzMyMiw5ICszMjg0LDkgQEAKICNkZWZpbmUgVDNfUUlEX1NXX1RZUEUyICAgICAgICAgICAgICAgMTcKIAogTE1fU1RBVFVTIExNX0xvYWRGaXJtd2FyZShQTE1fREVWSUNFX0JMT0NLIHBEZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFBUM19GV0lNR19JTkZPIHBGd0ltZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTE1fVUlOVDMyIExvYWRDcHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIExNX1VJTlQzMiBTdGFydENwdSk7CisJCQkgIFBUM19GV0lNR19JTkZPIHBGd0ltZywKKwkJCSAgTE1fVUlOVDMyIExvYWRDcHUsCisJCQkgIExNX1VJTlQzMiBTdGFydENwdSk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBOSUMgcmVnaXN0ZXIgcmVhZC93cml0ZSBtYWNyb3MuICovCkBAIC0zNDI3LDE5ICszMzg5LDE5IEBACiAKICNkZWZpbmUgTUJfUkVHX1dSKHBEZXZpY2UsIE9mZnNldE5hbWUsIFZhbHVlMzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAoKHBEZXZpY2UpLT5VbmRpRml4KSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgTE1fUmVnV3JJbmQocERldmljZSwgT0ZGU0VUT0YoVDNfU1REX01FTV9NQVAsIE9mZnNldE5hbWUpKzB4NTYwMCwgICAgIFwKLSAgICAgICAgICAgIFZhbHVlMzIpIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHZvaWQpIF9fcmF3X3dyaXRlbChWYWx1ZTMyLCAmKChwRGV2aWNlKS0+cE1lbVZpZXctPk9mZnNldE5hbWUpKQorCUxNX1JlZ1dySW5kKHBEZXZpY2UsIE9GRlNFVE9GKFQzX1NURF9NRU1fTUFQLCBPZmZzZXROYW1lKSsweDU2MDAsICAgICBcCisJICAgIFZhbHVlMzIpIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkodm9pZCkgX19yYXdfd3JpdGVsKFZhbHVlMzIsICYoKHBEZXZpY2UpLT5wTWVtVmlldy0+T2Zmc2V0TmFtZSkpCiAKICNkZWZpbmUgTUJfUkVHX1JEKHBEZXZpY2UsIE9mZnNldE5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAoKChwRGV2aWNlKS0+VW5kaUZpeCkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgTE1fUmVnUmRJbmQocERldmljZSwgT0ZGU0VUT0YoVDNfU1REX01FTV9NQVAsIE9mZnNldE5hbWUpKzB4NTYwMCkgOiAgIFwKLSAgICAgICAgX19yYXdfcmVhZGwoJigocERldmljZSktPnBNZW1WaWV3LT5PZmZzZXROYW1lKSkpCisJTE1fUmVnUmRJbmQocERldmljZSwgT0ZGU0VUT0YoVDNfU1REX01FTV9NQVAsIE9mZnNldE5hbWUpKzB4NTYwMCkgOiAgIFwKKwlfX3Jhd19yZWFkbCgmKChwRGV2aWNlKS0+cE1lbVZpZXctPk9mZnNldE5hbWUpKSkKIAogI2RlZmluZSBSRUdfUkQocERldmljZSwgT2Zmc2V0TmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICgoKHBEZXZpY2UpLT5VbmRpRml4KSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBMTV9SZWdSZEluZChwRGV2aWNlLCBPRkZTRVRPRihUM19TVERfTUVNX01BUCwgT2Zmc2V0TmFtZSkpIDogICAgICAgICAgXAotICAgICAgICBfX3Jhd19yZWFkbCgmKChwRGV2aWNlKS0+cE1lbVZpZXctPk9mZnNldE5hbWUpKSkKKwlMTV9SZWdSZEluZChwRGV2aWNlLCBPRkZTRVRPRihUM19TVERfTUVNX01BUCwgT2Zmc2V0TmFtZSkpIDogICAgICAgICAgXAorCV9fcmF3X3JlYWRsKCYoKHBEZXZpY2UpLT5wTWVtVmlldy0+T2Zmc2V0TmFtZSkpKQogCiAjaWYgUENJWF9UQVJHRVRfV09SS0FST1VORAogCkBAIC0zNDY2LDQgKzM0MjgsMyBAQAogICAgIExNX01lbVdySW5kKHBEZXZpY2UsIE9mZnNldCwgVmFsdWUzMikKIAogI2VuZGlmIC8qIFRJR09OM19IICovCi0KZGlmZiAtLWdpdCBhL2R0dC9NYWtlZmlsZSBiL2R0dC9NYWtlZmlsZQppbmRleCA2YjlkNDk5Li4wYTMzNDc4IDEwMDY0NAotLS0gYS9kdHQvTWFrZWZpbGUKKysrIGIvZHR0L01ha2VmaWxlCkBAIC00Miw0ICs0MiwzIEBACiBzaW5jbHVkZSAuZGVwZW5kCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQpkaWZmIC0tZ2l0IGEvZHR0L2RzMTYyMS5jIGIvZHR0L2RzMTYyMS5jCmluZGV4IDVjMjVmNjQuLmJmMzBlOWMgMTAwNjQ0Ci0tLSBhL2R0dC9kczE2MjEuYworKysgYi9kdHQvZHMxNjIxLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2lmZGVmIENPTkZJR19EVFRfRFMxNjIxCiAjaWYgIWRlZmluZWQoQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0VOQUJMRSkgfHwgXAotICAgICAgICAoQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgPCAxKQorCShDRkdfRUVQUk9NX1BBR0VfV1JJVEVfQklUUyA8IDEpCiAjIGVycm9yICJDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFIG11c3QgYmUgZGVmaW5lZCBhbmQgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSB0byB1c2UgQ09ORklHX0RUVF9EUzE2MjEiCiAjZW5kaWYKICNpbmNsdWRlIDxpMmMuaD4KQEAgLTE4OCw0ICsxODgsMyBAQAogCiAKICNlbmRpZiAvKiBDT05GSUdfRFRUX0RTMTYyMSAqLwotCmRpZmYgLS1naXQgYS9kdHQvbG03NS5jIGIvZHR0L2xtNzUuYwppbmRleCA5OTMwYThiLi41OWRhYTQ1IDEwMDY0NAotLS0gYS9kdHQvbG03NS5jCisrKyBiL2R0dC9sbTc1LmMKQEAgLTE3OCw0ICsxNzgsMyBAQAogfSAvKiBkdHRfZ2V0X3RlbXAoKSAqLwogCiAjZW5kaWYgLyogQ09ORklHX0RUVF9MTTc1ICovCi0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzLzgyNTU5X2VlcHJvbS5jIGIvZXhhbXBsZXMvODI1NTlfZWVwcm9tLmMKaW5kZXggYzcxMGNkMy4uZDY2YjNkZCAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvODI1NTlfZWVwcm9tLmMKKysrIGIvZXhhbXBsZXMvODI1NTlfZWVwcm9tLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBoYXRvaShjaGFyICpwLCBjaGFyICoqZXJycCkKIHsKIAl1bnNpZ25lZCBpbnQgcmVzID0gMDsKLQkKKwogCXdoaWxlICgxKSB7CiAJCXN3aXRjaCAoKnApIHsKIAkJY2FzZSAnYSc6CkBAIC0yMTgsNyArMjE4LDcgQEAKIAkJY2FzZSAnOCc6CiAJCWNhc2UgJzknOgogCQkJcmVzIHw9ICgqcCAtICcwJyk7Ci0JCQlicmVhazsJCQorCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlpZiAoZXJycCkgewogCQkJCSplcnJwID0gcDsKQEAgLTIzMSwxMSArMjMxLDExIEBACiAJCX0KIAkJcmVzIDw8PSA0OwogCX0KLQkKKwogCWlmIChlcnJwKSB7CiAJCSplcnJwID0gTlVMTDsKIAl9Ci0JCisKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAljaGFyIHRtcFszXTsKIAlpbnQgaTsKIAljaGFyICplcnI7Ci0JCisKIAlmb3IgKGk9MDtpPDY7aSsrKSB7CiAJCWlmIChpbltpKjMrMl0gPT0gMCAmJiBpID09IDUpIHsKIAkJCW91dFtpXSA9IGhhdG9pKCZpbltpKjNdLCAmZXJyKTsKQEAgLTI2MSw2MCArMjYxLDU5IEBACiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlyZXR1cm4gTlVMTDsKLQkJfQkJCisJCX0KIAl9Ci0JCisKIAlyZXR1cm4gb3V0OwogfQogCiBzdGF0aWMgdTMyCiByZWFkX2NvbmZpZ19kd29yZChpbnQgYnVzLCBpbnQgZGV2LCBpbnQgZnVuYywgaW50IHJlZykKLXsJCQkJCQkJCQkgCit7CiAJdTMyIHJlczsKLQkKKwogCW91dGwoMHg4MDAwMDAwMHwoYnVzJjB4ZmYpPDwxNnwoZGV2JjB4MWYpPDwxMXwoZnVuYyY3KTw8OHwocmVnJjB4ZmMpLAogCSAgICAgMHhjZjgpOwogCXJlcyA9IGlubCgweGNmYyk7Ci0Jb3V0bCgwLCAweGNmOCk7IAotCXJldHVybiByZXM7IAorCW91dGwoMCwgMHhjZjgpOworCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyB1MTYKIHJlYWRfY29uZmlnX3dvcmQoaW50IGJ1cywgaW50IGRldiwgaW50IGZ1bmMsIGludCByZWcpCi17CQkJCQkJCQkJIAorewogCXUzMiByZXM7Ci0JCisKIAlvdXRsKDB4ODAwMDAwMDB8KGJ1cyYweGZmKTw8MTZ8KGRldiYweDFmKTw8MTF8KGZ1bmMmNyk8PDh8KHJlZyYweGZjKSwKIAkgICAgIDB4Y2Y4KTsKIAlyZXMgPSBpbncoMHhjZmMgKyAocmVnICYgMikpOwotCW91dGwoMCwgMHhjZjgpOyAKLQlyZXR1cm4gcmVzOyAKKwlvdXRsKDAsIDB4Y2Y4KTsKKwlyZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgdm9pZAogd3JpdGVfY29uZmlnX3dvcmQoaW50IGJ1cywgaW50IGRldiwgaW50IGZ1bmMsIGludCByZWcsIHUxNiBkYXRhKQotewkJCQkJCQkJCSAKLQkKK3sKKwogCW91dGwoMHg4MDAwMDAwMHwoYnVzJjB4ZmYpPDwxNnwoZGV2JjB4MWYpPDwxMXwoZnVuYyY3KTw8OHwocmVnJjB4ZmMpLAogCSAgICAgMHhjZjgpOwogCW91dHcoZGF0YSwgMHhjZmMgKyAocmVnICYgMikpOwotCW91dGwoMCwgMHhjZjgpOyAKKwlvdXRsKDAsIDB4Y2Y4KTsKIH0KIAogCi0KIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXVuc2lnbmVkIGNoYXIgKmV0aF9hZGRyOwogCWNoYXIgYnVmWzZdOwogCWludCBpbnN0YW5jZTsKLQkKKwogCWlmIChhcmdjICE9IDIpIHsKIAkJbW9uX3ByaW50ZiAoImNhbGwgd2l0aCBiYXNlIEV0aGVybmV0IGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gMTsKIAl9Ci0JCi0JCisKKwogCWV0aF9hZGRyID0gZ2V0aHdhZGRyKGFyZ3ZbMV0sIGJ1Zik7CiAJaWYgKE5VTEwgPT0gZXRoX2FkZHIpIHsKIAkJbW9uX3ByaW50ZiAoIkNhbiBub3QgcGFyc2UgZXRoZXJuZXQgYWRkcmVzc1xuIik7CkBAIC0zMjMsOCArMzIyLDggQEAKIAlpZiAoZXRoX2FkZHJbNV0gJiAweDAxKSB7CiAJCW1vbl9wcmludGYoIkJhc2UgRXRoZXJuZXQgYWRkcmVzcyBtdXN0IGJlIGV2ZW5cbiIpOwogCX0KLQkJCi0JCisKKwogCWZvciAoaW5zdGFuY2UgPSAwOyBpbnN0YW5jZSA8IDI7IGluc3RhbmNlICsrKSAgewogCQl1bnNpZ25lZCBpbnQgaW9fYWRkcjsKIAkJdW5zaWduZWQgY2hhciBtYWNbNl07CkBAIC0zMzUsMTkgKzMzNCwxOSBAQAogCQkJbW9uX3ByaW50ZigiRVRIJWQgSU89MHglMDR4XG4iLCBpbnN0YW5jZSwgYmFyMSAmIH4zKTsKIAkJfQogCQlpb19hZGRyID0gKGJhcjEgJiAofjNMKSk7Ci0JCQotCQkKLQkJd3JpdGVfY29uZmlnX3dvcmQoMCwgNitpbnN0YW5jZSwgMCwgNCwgCisKKworCQl3cml0ZV9jb25maWdfd29yZCgwLCA2K2luc3RhbmNlLCAwLCA0LAogCQkJCSAgcmVhZF9jb25maWdfd29yZCgwLCA2K2luc3RhbmNlLCAwLCA0KSB8IDEpOwogCQltb25fcHJpbnRmKCJFVEglZCBDTUQgJTA0eFxuIiwgaW5zdGFuY2UsCiAJCQkgICByZWFkX2NvbmZpZ193b3JkKDAsIDYraW5zdGFuY2UsIDAsIDQpKTsKLQkJCisKIAkJbWVtY3B5KG1hYywgZXRoX2FkZHIsIDYpOwogCQltYWNbNV0gKz0gaW5zdGFuY2U7Ci0JCQorCiAJCW1vbl9wcmludGYoImdvdCBpbz0lMDR4LCBoYT0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJCSAgIGlvX2FkZHIsIG1hY1swXSwgbWFjWzFdLCBtYWNbMl0sIAotCQkJICAgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSk7IAorCQkJICAgaW9fYWRkciwgbWFjWzBdLCBtYWNbMV0sIG1hY1syXSwKKwkJCSAgIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0pOwogCQlyZXNldF9lZXByb20oaW9fYWRkciwgbWFjKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9leGFtcGxlcy9lZXBybzEwMF9lZXByb20uYyBiL2V4YW1wbGVzL2VlcHJvMTAwX2VlcHJvbS5jCmluZGV4IDY1NmIyMzguLjIzMDIwMDMgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL2VlcHJvMTAwX2VlcHJvbS5jCisrKyBiL2V4YW1wbGVzL2VlcHJvMTAwX2VlcHJvbS5jCkBAIC0yMDcsNCArMjA3LDMgQEAKIAltb25fcHJpbnRmKCJkb25lXG4iKTsKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvbWVtX3RvX21lbV9pZG1hMmludHIuYyBiL2V4YW1wbGVzL21lbV90b19tZW1faWRtYTJpbnRyLmMKaW5kZXggOTNjNmY3Ny4uM2YwZmQzNyAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvbWVtX3RvX21lbV9pZG1hMmludHIuYworKysgYi9leGFtcGxlcy9tZW1fdG9fbWVtX2lkbWEyaW50ci5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKi8KIAogCi0KICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxzeXNjYWxsLmg+CiAKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3N5c2NhbGwuUyBiL2V4YW1wbGVzL3N5c2NhbGwuUwppbmRleCAyYWY2ZjQ4Li5mMzE5NDA5IDEwMDY0NAotLS0gYS9leGFtcGxlcy9zeXNjYWxsLlMKKysrIGIvZXhhbXBsZXMvc3lzY2FsbC5TCkBAIC03Miw3ICs3Miw3IEBACiAjaWZkZWYgQ09ORklHX0kzODYgLyogWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYICovCiAjZGVmaW5lIFNZTUJPTF9OQU1FKFgpIAlYCiAjZGVmaW5lIFNZTUJPTF9OQU1FX0xBQkVMKFgpIAlYIyM6Ci0JCisKICNkZWZpbmUgU1lTQ0FMTChuYW1lLG4pIFwKIAkuZ2xvYmwgU1lNQk9MX05BTUUobmFtZSkgOyBcCiBTWU1CT0xfTkFNRV9MQUJFTChuYW1lKSAgICAgCQkgOyBcCkBAIC05Niw4ICs5Niw4IEBACiAJLnRleHQKIAogCS8qCi0gICAgICAgICAqIE1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkKLSAgICAgICAgICogYXBwZWFyIGluIHRoZSAiaW5jbHVkZS9zeXNjYWxsLmgiIGhlYWRlciBmaWxlICEhIQorCSAqIE1ha2Ugc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkKKwkgKiBhcHBlYXIgaW4gdGhlICJpbmNsdWRlL3N5c2NhbGwuaCIgaGVhZGVyIGZpbGUgISEhCiAJICovCiAKIAlTWVNDQUxMKG1vbl9nZXRjLFNZU0NBTExfR0VUQykKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL3RpbWVyLmMgYi9leGFtcGxlcy90aW1lci5jCmluZGV4IDMzZjUzYzAuLmJmZTNkNjYgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL3RpbWVyLmMKKysrIGIvZXhhbXBsZXMvdGltZXIuYwpAQCAtMTA0LDcgKzEwNCw2IEBACiAjZGVmaW5lCUNQTVRfTVJfQ0VfQU5ZCQkweDAwQzAJLyogQ2FwdC4vSW50ZXJyLiBvbiBhbnkgVElOIGVkZ2UqLwogCiAKLQogLyoKICAqIHdoaWNoIENQTSB0aW1lciB0byB1c2UgLSBpbmRleCBzdGFydHMgYXQgMCAoPSB0aW1lciAxKQogICovCmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlCmluZGV4IDI3ZWU2ZmIuLjIwNGJlMmMgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCisrKyBiL2ZzL01ha2VmaWxlCkBAIC0yNyw0ICsyNywzIEBACiAuZGVwZW5kIGFsbDoKIAlAZm9yIGRpciBpbiAkKFNVQkRJUlMpIDsgZG8gXAogCQkkKE1BS0UpIC1DICQkZGlyICRAIDsgZG9uZQotCmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCBkMzc1YmEyLi5mOTk5YWM1IDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCisrKyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTEsNSArMSw1IEBACi0vKiAKLSAqIGZpbGUuYyAKKy8qCisgKiBmaWxlLmMKICAqCiAgKiBNaW5pICJWRlMiIGJ5IE1hcmN1cyBTdW5kYmVyZwogICoKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXJldHVybiAwOwogfQogCi0JCisKIGludAogZmlsZV9kZXRlY3Rmcyh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZnMvZmRvcy9NYWtlZmlsZSBiL2ZzL2Zkb3MvTWFrZWZpbGUKaW5kZXggYWYwZmZmMS4uYzI1ZTc0NCAxMDA2NDQKLS0tIGEvZnMvZmRvcy9NYWtlZmlsZQorKysgYi9mcy9mZG9zL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiBMSUIJPSBsaWJmZG9zLmEKIAogQU9CSlMJPQotQ09CSlMJPSBmYXQubyB2ZmF0Lm8gZGV2Lm8gZmRvcy5vIGZzLm8gc3ViZGlyLm8gCitDT0JKUwk9IGZhdC5vIHZmYXQubyBkZXYubyBmZG9zLm8gZnMubyBzdWJkaXIubwogT0JKUwk9ICQoQU9CSlMpICQoQ09CSlMpCiAKICNDUFBGTEFHUyArPQpkaWZmIC0tZ2l0IGEvZnMvZmRvcy9kZXYuYyBiL2ZzL2Zkb3MvZGV2LmMKaW5kZXggODA5MTU2YS4uNWRlYTVjZCAxMDA2NDQKLS0tIGEvZnMvZmRvcy9kZXYuYworKysgYi9mcy9mZG9zL2Rldi5jCkBAIC0zOCw3ICszOCw3IEBACiBzdGF0aWMgaW50IGxhc3R3aGVyZTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogZGV2X29wZW4gLS0gCisgKiBkZXZfb3BlbiAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBpbnQgZGV2X29wZW4gKHZvaWQpCkBAIC01NywxNyArNTcsMTcgQEAKIAogICAgIC8qIFNpIG9uIG5lIGRlc2lyZSBwYXMgbGlyZSBhIGxhIHBvc2l0aW9uIGNvdXJhbnRlLCBpbCBmYXV0IHVuIHNlZWsgICAgICAqLwogICAgIGlmICh3aGVyZSAhPSBsYXN0d2hlcmUpIHsKLSAgICAgICAgaWYgKCFmZGNfZmRvc19zZWVrICh3aGVyZSkpIHsKLSAgICAgICAgICAgIFBSSU5URiAoInNlZWsgZXJyb3IgaW4gZGV2X3JlYWQiKTsKLSAgICAgICAgICAgIGxhc3R3aGVyZSA9IC0xOwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KKwlpZiAoIWZkY19mZG9zX3NlZWsgKHdoZXJlKSkgeworCSAgICBQUklOVEYgKCJzZWVrIGVycm9yIGluIGRldl9yZWFkIik7CisJICAgIGxhc3R3aGVyZSA9IC0xOworCSAgICByZXR1cm4gKC0xKTsKKwl9CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFmZGNfZmRvc19yZWFkIChidWZmZXIsIGxlbikpIHsKLSAgICAgICAgUFJJTlRGICgicmVhZCBlcnJvclxuIik7Ci0gICAgICAgIGxhc3R3aGVyZSA9IC0xOwotICAgICAgICByZXR1cm4gKC0xKTsKKwlQUklOVEYgKCJyZWFkIGVycm9yXG4iKTsKKwlsYXN0d2hlcmUgPSAtMTsKKwlyZXR1cm4gKC0xKTsKICAgICB9CiAgICAgbGFzdHdoZXJlID0gd2hlcmUgKyBsZW47CiAgICAgcmV0dXJuICgwKTsKQEAgLTg0LDExMCArODQsMTEwIEBACiAKICAgICAvKiBEaXNwbGF5IEJvb3QgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBQUklOVEYgKCJKdW1wIHRvIGJvb3QgY29kZSAgICAgICAgICAgICAgICAgIDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAotICAgICAgICAgICAgYm9vdCAtPiBqdW1wIFswXSwgYm9vdCAtPiBqdW1wIFsxXSwgYm9vdCAtPiBqdW1wWzJdKTsKKwkgICAgYm9vdCAtPiBqdW1wIFswXSwgYm9vdCAtPiBqdW1wIFsxXSwgYm9vdCAtPiBqdW1wWzJdKTsKICAgICBQUklOVEYgKCJPRU0gbmFtZSAmIHZlcnNpb24gICAgICAgICAgICAgICAgICclKi4qcydcbiIsCi0gICAgICAgICAgICBCQU5ORVJfTEcsIEJBTk5FUl9MRywgYm9vdCAtPiBiYW5uZXIgKTsKKwkgICAgQkFOTkVSX0xHLCBCQU5ORVJfTEcsIGJvb3QgLT4gYmFubmVyICk7CiAgICAgUFJJTlRGICgiQnl0ZXMgcGVyIHNlY3RvciBob3BlZnVsbHkgNTEyICAgICAlZFxuIiwKLSAgICAgICAgICAgIF9fbGUxNl90b19jcHUgKGJvb3QgLT4gc2Vjc2l6KSk7CisJICAgIF9fbGUxNl90b19jcHUgKGJvb3QgLT4gc2Vjc2l6KSk7CiAgICAgUFJJTlRGICgiQ2x1c3RlciBzaXplIGluIHNlY3RvcnMgICAgICAgICAgICAlZFxuIiwKLSAgICAgICAgICAgIGJvb3QgLT4gY2xzaXopOworCSAgICBib290IC0+IGNsc2l6KTsKICAgICBQUklOVEYgKCJOdW1iZXIgb2YgcmVzZXJ2ZWQgKGJvb3QpIHNlY3RvcnMgICVkXG4iLAotICAgICAgICAgICAgX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBucnN2c2VjdCkpOworCSAgICBfX2xlMTZfdG9fY3B1IChib290IC0+IG5yc3ZzZWN0KSk7CiAgICAgUFJJTlRGICgiTnVtYmVyIG9mIEZBVCB0YWJsZXMgaG9wZWZ1bGx5IDIgICAlZFxuIiwKLSAgICAgICAgICAgIGJvb3QgLT4gbmZhdCk7CisJICAgIGJvb3QgLT4gbmZhdCk7CiAgICAgUFJJTlRGICgiTnVtYmVyIG9mIGRpcmVjdG9yeSBzbG90cyAgICAgICAgICAlZFxuIiwKLSAgICAgICAgICAgIF9fbGUxNl90b19jcHUgKGJvb3QgLT4gZGlyZW50cykpOworCSAgICBfX2xlMTZfdG9fY3B1IChib290IC0+IGRpcmVudHMpKTsKICAgICBQUklOVEYgKCJUb3RhbCBzZWN0b3JzIG9uIGRpc2sgICAgICAgICAgICAgICVkXG4iLAotICAgICAgICAgICAgX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBwc2VjdCkpOworCSAgICBfX2xlMTZfdG9fY3B1IChib290IC0+IHBzZWN0KSk7CiAgICAgUFJJTlRGICgiTWVkaWEgZGVzY3JpcHRvcj1maXJzdCBieXRlIG9mIEZBVCAlZFxuIiwKLSAgICAgICAgICAgIGJvb3QgLT4gZGVzY3IpOworCSAgICBib290IC0+IGRlc2NyKTsKICAgICBQUklOVEYgKCJTZWN0b3JzIGluIEZBVCAgICAgICAgICAgICAgICAgICAgICVkXG4iLAotICAgICAgICAgICAgX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBmYXRsZW4pKTsKKwkgICAgX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBmYXRsZW4pKTsKICAgICBQUklOVEYgKCJTZWN0b3JzL3RyYWNrICAgICAgICAgICAgICAgICAgICAgICVkXG4iLAotICAgICAgICAgICAgX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBuc2VjdCkpOworCSAgICBfX2xlMTZfdG9fY3B1IChib290IC0+IG5zZWN0KSk7CiAgICAgUFJJTlRGICgiSGVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlZFxuIiwKLSAgICAgICAgICAgIF9fbGUxNl90b19jcHUgKGJvb3QgLT4gbmhlYWRzKSk7CisJICAgIF9fbGUxNl90b19jcHUgKGJvb3QgLT4gbmhlYWRzKSk7CiAgICAgUFJJTlRGICgibnVtYmVyIG9mIGhpZGRlbiBzZWN0b3JzICAgICAgICAgICAlZFxuIiwKLSAgICAgICAgICAgIF9fbGUzMl90b19jcHUgKGJvb3QgLT4gbmhzKSk7CisJICAgIF9fbGUzMl90b19jcHUgKGJvb3QgLT4gbmhzKSk7CiAgICAgUFJJTlRGICgiYmlnIHRvdGFsIHNlY3RvcnMgICAgICAgICAgICAgICAgICAlZFxuIiwKLSAgICAgICAgICAgIF9fbGUzMl90b19jcHUgKGJvb3QgLT4gYmlnc2VjdCkpOworCSAgICBfX2xlMzJfdG9fY3B1IChib290IC0+IGJpZ3NlY3QpKTsKICAgICBQUklOVEYgKCJwaHlzaWNhbCBkcml2ZSA/ICAgICAgICAgICAgICAgICAgICVkXG4iLAotICAgICAgICAgICAgYm9vdCAtPiBwaHlzZHJpdmUpOworCSAgICBib290IC0+IHBoeXNkcml2ZSk7CiAgICAgUFJJTlRGICgicmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAlZFxuIiwKLSAgICAgICAgICAgIGJvb3QgLT4gcmVzZXJ2ZWQpOworCSAgICBib290IC0+IHJlc2VydmVkKTsKICAgICBQUklOVEYgKCJkb3MgPiA0LjAgZGlza2V0dGUgICAgICAgICAgICAgICAgICVkXG4iLAotICAgICAgICAgICAgYm9vdCAtPiBkb3M0KTsKKwkgICAgYm9vdCAtPiBkb3M0KTsKICAgICBQUklOVEYgKCJzZXJpYWwgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICVkXG4iLAotICAgICAgICAgICAgX19sZTMyX3RvX2NwdSAoYm9vdCAtPiBzZXJpYWwpKTsKKwkgICAgX19sZTMyX3RvX2NwdSAoYm9vdCAtPiBzZXJpYWwpKTsKICAgICBQUklOVEYgKCJkaXNrIGxhYmVsICAgICAgICAgICAgICAgICAgICAgICAgICUqLipzXG4iLAotICAgICAgICAgICAgTEFCRUxfTEcsIExBQkVMX0xHLCBib290IC0+IGxhYmVsKTsKKwkgICAgTEFCRUxfTEcsIExBQkVMX0xHLCBib290IC0+IGxhYmVsKTsKICAgICBQUklOVEYgKCJGQVQgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICU4LjhzXG4iLAotICAgICAgICAgICAgYm9vdCAtPiBmYXRfdHlwZSk7CisJICAgIGJvb3QgLT4gZmF0X3R5cGUpOwogICAgIFBSSU5URiAoInJlc2VydmVkIGJ5IDJNICAgICAgICAgICAgICAgICAgICAgJWRcbiIsCi0gICAgICAgICAgICBib290IC0+IHJlc18ybSk7CisJICAgIGJvb3QgLT4gcmVzXzJtKTsKICAgICBQUklOVEYgKCIyTSBjaGVja3N1bSAobm90IHVzZWQpICAgICAgICAgICAgICVkXG4iLAotICAgICAgICAgICAgYm9vdCAtPiBDaGVja1N1bSk7CisJICAgIGJvb3QgLT4gQ2hlY2tTdW0pOwogICAgIFBSSU5URiAoIjJNRiBmb3JtYXQgdmVyc2lvbiAgICAgICAgICAgICAgICAgJWRcbiIsCi0gICAgICAgICAgICBib290IC0+IGZtdF8ybWYpOworCSAgICBib290IC0+IGZtdF8ybWYpOwogICAgIFBSSU5URiAoIjEgaWYgd3JpdGUgdHJhY2sgYWZ0ZXIgZm9ybWF0ICAgICAgJWRcbiIsCi0gICAgICAgICAgICBib290IC0+IHd0KTsKKwkgICAgYm9vdCAtPiB3dCk7CiAgICAgUFJJTlRGICgiZGF0YSB0cmFuc2ZlciByYXRlIG9uIHRyYWNrIDAgICAgICAlZFxuIiwKLSAgICAgICAgICAgIGJvb3QgLT4gcmF0ZV8wKTsKKwkgICAgYm9vdCAtPiByYXRlXzApOwogICAgIFBSSU5URiAoImRhdGEgdHJhbnNmZXIgcmF0ZSBvbiB0cmFjazw+MCAgICAgJWRcbiIsCi0gICAgICAgICAgICBib290IC0+IHJhdGVfYW55KTsKKwkgICAgYm9vdCAtPiByYXRlX2FueSk7CiAgICAgUFJJTlRGICgib2Zmc2V0IHRvIGJvb3QgcHJvZ3JhbSAgICAgICAgICAgICAlZFxuIiwKLSAgICAgICAgICAgIF9fbGUxNl90b19jcHUgKGJvb3QgLT4gQm9vdFApKTsKKwkgICAgX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBCb290UCkpOwogICAgIFBSSU5URiAoIlQxOiBpbmZvcm1hdGlvbiBmb3IgdHJhY2sgMCAgICAgICAgJWRcbiIsCi0gICAgICAgICAgICBfX2xlMTZfdG9fY3B1IChib290IC0+IEluZnAwKSk7CisJICAgIF9fbGUxNl90b19jcHUgKGJvb3QgLT4gSW5mcDApKTsKICAgICBQUklOVEYgKCJUMjogaW5mb3JtYXRpb24gZm9yIHRyYWNrPD4wICAgICAgICVkXG4iLAotICAgICAgICAgICAgX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBJbmZwWCkpOworCSAgICBfX2xlMTZfdG9fY3B1IChib290IC0+IEluZnBYKSk7CiAgICAgUFJJTlRGICgiVDM6IHRyYWNrIHNlY3RvcnMgc2l6ZSB0YWJsZSAgICAgICAlZFxuIiwKLSAgICAgICAgICAgIF9fbGUxNl90b19jcHUgKGJvb3QgLT4gSW5mVG0pKTsKKwkgICAgX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBJbmZUbSkpOwogICAgIFBSSU5URiAoIkZvcm1hdCBkYXRlICAgICAgICAgICAgICAgICAgICAgICAgMHglMDR4XG4iLAotICAgICAgICAgICAgX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBEYXRlRikpOworCSAgICBfX2xlMTZfdG9fY3B1IChib290IC0+IERhdGVGKSk7CiAgICAgUFJJTlRGICgiRm9ybWF0IHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAweCUwNHhcbiIsCi0gICAgICAgICAgICBfX2xlMTZfdG9fY3B1IChib290IC0+IFRpbWVGKSk7Ci0gICAgCisJICAgIF9fbGUxNl90b19jcHUgKGJvb3QgLT4gVGltZUYpKTsKKwogCiAgICAgLyogaW5mb3JtYXRpb24gaXMgZXh0cmFjdGVkIGZyb20gYm9vdCBzZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGhlYWRzID0gX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBuaGVhZHMpOwogICAgIHNlY3RvcnMgPSBfX2xlMTZfdG9fY3B1IChib290IC0+IG5zZWN0KTsKICAgICBmcyAtPiB0b3Rfc2VjdG9ycyA9IF9fbGUzMl90b19jcHUgKGJvb3QgLT4gYmlnc2VjdCk7CiAgICAgaWYgKF9fbGUxNl90b19jcHUgKGJvb3QgLT4gcHNlY3QpICE9IDApIHsKLSAgICAgICAgZnMgLT4gdG90X3NlY3RvcnMgPSBfX2xlMTZfdG9fY3B1IChib290IC0+IHBzZWN0KTsKKwlmcyAtPiB0b3Rfc2VjdG9ycyA9IF9fbGUxNl90b19jcHUgKGJvb3QgLT4gcHNlY3QpOwogICAgIH0KLSAgICAKKwogICAgIHNlY3RfcGVyX3RyYWNrID0gaGVhZHMgKiBzZWN0b3JzOwogICAgIHRyYWNrcyA9IChmcyAtPiB0b3Rfc2VjdG9ycyArIHNlY3RfcGVyX3RyYWNrIC0gMSkgLyBzZWN0X3Blcl90cmFjazsKLSAgICAKKwogICAgIEJvb3RQID0gX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBCb290UCk7CiAgICAgSW5mcDAgPSBfX2xlMTZfdG9fY3B1IChib290IC0+IEluZnAwKTsKICAgICBJbmZwWCA9IF9fbGUxNl90b19jcHUgKGJvb3QgLT4gSW5mcFgpOwogICAgIEluZlRtID0gX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBJbmZUbSk7Ci0gICAgCi0gICAgaWYgKGJvb3QgLT4gZG9zNCA9PSBFWFRFTkRFRF9CT09UICYmCi0gICAgICAgIHN0cm5jbXAoIGJvb3QtPmJhbm5lciwiMk0iLCAyICkgPT0gMCAmJgotICAgICAgICBCb290UCA8IFNaX1NURF9TRUNUT1IgJiYKLSAgICAgICAgSW5mcDAgPCBTWl9TVERfU0VDVE9SICYmCi0gICAgICAgIEluZnBYIDwgU1pfU1REX1NFQ1RPUiAmJgotICAgICAgICBJbmZUbSA8IFNaX1NURF9TRUNUT1IgJiYKLSAgICAgICAgQm9vdFAgPj0gSW5mVG0gKyAyICYmCi0gICAgICAgIEluZlRtID49IEluZnBYICYmCi0gICAgICAgIEluZnBYID49IEluZnAwICYmIAotICAgICAgICBJbmZwMCA+PSA3NiApIHsKIAotICAgICAgICByZXR1cm4gKC0xKTsKKyAgICBpZiAoYm9vdCAtPiBkb3M0ID09IEVYVEVOREVEX0JPT1QgJiYKKwlzdHJuY21wKCBib290LT5iYW5uZXIsIjJNIiwgMiApID09IDAgJiYKKwlCb290UCA8IFNaX1NURF9TRUNUT1IgJiYKKwlJbmZwMCA8IFNaX1NURF9TRUNUT1IgJiYKKwlJbmZwWCA8IFNaX1NURF9TRUNUT1IgJiYKKwlJbmZUbSA8IFNaX1NURF9TRUNUT1IgJiYKKwlCb290UCA+PSBJbmZUbSArIDIgJiYKKwlJbmZUbSA+PSBJbmZwWCAmJgorCUluZnBYID49IEluZnAwICYmCisJSW5mcDAgPj0gNzYgKSB7CisKKwlyZXR1cm4gKC0xKTsKICAgICB9CiAKICAgICBpZiAoaGVhZHMgIT0gTkJfSEVBRFMgfHwKLSAgICAgICAgdHJhY2tzICE9IE5CX1RSQUNLUyB8fAotICAgICAgICBzZWN0b3JzICE9IE5CX1NFQ1RPUlMgfHwKLSAgICAgICAgX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBzZWNzaXopICE9IFNaX1NURF9TRUNUT1IgfHwKLSAgICAgICAgZnMgLT4gdG90X3NlY3RvcnMgPT0gMCB8fAotICAgICAgICAoZnMgLT4gdG90X3NlY3RvcnMgJSBzZWN0b3JzKSAhPSAwKSB7Ci0gICAgICAgIHJldHVybiAoLTEpOworCXRyYWNrcyAhPSBOQl9UUkFDS1MgfHwKKwlzZWN0b3JzICE9IE5CX1NFQ1RPUlMgfHwKKwlfX2xlMTZfdG9fY3B1IChib290IC0+IHNlY3NpeikgIT0gU1pfU1REX1NFQ1RPUiB8fAorCWZzIC0+IHRvdF9zZWN0b3JzID09IDAgfHwKKwkoZnMgLT4gdG90X3NlY3RvcnMgJSBzZWN0b3JzKSAhPSAwKSB7CisJcmV0dXJuICgtMSk7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuICgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZmRvcy9kb3MuaCBiL2ZzL2Zkb3MvZG9zLmgKaW5kZXggNzE3MDFjOS4uN2IyN2IwMSAxMDA2NDQKLS0tIGEvZnMvZmRvcy9kb3MuaAorKysgYi9mcy9mZG9zL2Rvcy5oCkBAIC0zNCw3ICszNCw3IEBACiAKICNkZWZpbmUgTUFYX1BBVEgJMTI4CQkvKiBNYXggc2l6ZSBvZiB0aGUgTVNET1MgUEFUSCAgICAgICAgKi8KICNkZWZpbmUgTUFYX0RJUl9TRUNTCTY0CQkvKiBUYWlsbGUgbWF4IGQndW4gcmVwZXJ0b2lyZSAoZW4gICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZWN0ZXVycykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogc2VjdGV1cnMpICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBNaXNjLiBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIERFTE1BUksgICAgICAgICAnXHhlNScKICNkZWZpbmUgRVhURU5ERURfQk9PVCAgICgweDI5KQpAQCAtMTE5LDcgKzExOSw2IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAgRGlyZWN0b3J5X3Q7CiAKIAotCiAjZGVmaW5lIE1BWF9WRkFUX1NVQkVOVFJJRVMgMjAKICNkZWZpbmUgVlNFX05BTUVMRU4gMTMKIApAQCAtMTQ1LDcgKzE0NCw3IEBACiAKIHN0cnVjdCB2ZmF0X3N1YmVudHJ5IHsKICAgICB1bnNpZ25lZCBjaGFyIGlkOwkJICAgICAgICAvKiBWU0VfTEFTVCBwb3VyIGxhIGZpbiwgVlNFX01BU0sgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb3VyIHVuIFZTRSAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcG91ciB1biBWU0UgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgY2hhciB0ZXh0MSBbVlNFMVNJWkUgKiAyXTsgICAgICAgICAgLyogQ2FyYWN0ZXJlcyBlbmNvZGVzIHN1ciAxNiBiaXRzICAgICovCiAgICAgdW5zaWduZWQgY2hhciBhdHRyaWJ1dGU7CSAgICAgICAgLyogMHgwZiBwb3VyIGxlcyBWRkFUICAgICAgICAgICAgICAgICovCiAgICAgdW5zaWduZWQgY2hhciBoYXNoMTsJCS8qIHRvdWpvdXJzIDAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTYxLDcgKzE2MCw3IEBACiAgICAgaW50IHN0YXR1czsgICAgICAgICAgICAgLyogaXMgbm93IGEgYml0IG1hcCBvZiAzMiBiaXRzICAgICAgICAgICAgICAgICAgICovCiAgICAgaW50IHN1YmVudHJpZXM7CiAgICAgdW5zaWduZWQgY2hhciBzdW07ICAgICAgLyogbm8gbmVlZCB0byByZW1lbWJlciB0aGUgc3VtIGZvciBlYWNoICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBlbnRyeSwgaXQgaXMgdGhlIHNhbWUgYW55d2F5cyAgICAgICAgICAgICAgICovCisJCQkgICAgLyogICBlbnRyeSwgaXQgaXMgdGhlIHNhbWUgYW55d2F5cyAgICAgICAgICAgICAgICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSA7CiAKIC8qIENvbnZlcnNpb24gbWFjcm9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE3NCw0ICsxNzMsMyBAQAogCiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9mcy9mZG9zL2ZhdC5jIGIvZnMvZmRvcy9mYXQuYwppbmRleCA0MmRmNzU1Li4yZWYyMzcxIDEwMDY0NAotLS0gYS9mcy9mZG9zL2ZhdC5jCisrKyBiL2ZzL2Zkb3MvZmF0LmMKQEAgLTMzLDI0ICszMywyNCBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGZhdF9kZWNvZGUgLS0gCisgKiBmYXRfZGVjb2RlIC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHVuc2lnbmVkIGludCBmYXRfZGVjb2RlIChGc190ICpmcywgdW5zaWduZWQgaW50IG51bSkKIHsKICAgICB1bnNpZ25lZCBpbnQgc3RhcnQgPSBudW0gKiAzIC8gMjsKICAgICB1bnNpZ25lZCBjaGFyICphZGRyZXNzID0gZnMgLT4gZmF0X2J1ZiArIHN0YXJ0OwotICAgIAorCiAgICAgaWYgKG51bSA8IDIgfHwgc3RhcnQgKyAxID4gKGZzIC0+IGZhdF9sZW4gKiBTWl9TVERfU0VDVE9SKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgCisJcmV0dXJuIDE7CisKICAgICBpZiAobnVtICYgMSkKLSAgICAgICAgcmV0dXJuICgoYWRkcmVzcyBbMV0gJiAweGZmKSA8PCA0KSB8ICgoYWRkcmVzcyBbMF0gJiAweGYwICkgPj4gNCk7CisJcmV0dXJuICgoYWRkcmVzcyBbMV0gJiAweGZmKSA8PCA0KSB8ICgoYWRkcmVzcyBbMF0gJiAweGYwICkgPj4gNCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gKChhZGRyZXNzIFsxXSAmIDB4ZikgPDwgOCkgfCAoYWRkcmVzcyBbMF0gJiAweGZmICk7CisJcmV0dXJuICgoYWRkcmVzcyBbMV0gJiAweGYpIDw8IDgpIHwgKGFkZHJlc3MgWzBdICYgMHhmZiApOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogY2hlY2tfZmF0IC0tIAorICogY2hlY2tfZmF0IC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyBpbnQgY2hlY2tfZmF0IChGc190ICpmcykKQEAgLTU5LDQ4ICs1OSw0OCBAQAogCiAgICAgLyogQ2x1c3RlciB2ZXJpZmljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgZm9yIChpID0gMyA7IGkgPCBmcyAtPiBudW1fY2x1czsgaSsrKXsKLSAgICAgICAgZiA9IGZhdF9kZWNvZGUgKGZzLCBpKTsKLSAgICAgICAgaWYgKGYgPCBGQVQxMl9MQVNUICYmIGYgPiBmcyAtPiBudW1fY2x1cyl7Ci0gICAgICAgICAgICAvKiBXcm9uZyBjbHVzdGVyIG51bWJlciBkZXRlY3RlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgfQorCWYgPSBmYXRfZGVjb2RlIChmcywgaSk7CisJaWYgKGYgPCBGQVQxMl9MQVNUICYmIGYgPiBmcyAtPiBudW1fY2x1cyl7CisJICAgIC8qIFdyb25nIGNsdXN0ZXIgbnVtYmVyIGRldGVjdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkgICAgcmV0dXJuICgtMSk7CisJfQogICAgIH0KICAgICByZXR1cm4gKDApOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogcmVhZF9vbmVfZmF0IC0tIAorICogcmVhZF9vbmVfZmF0IC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyBpbnQgcmVhZF9vbmVfZmF0IChCb290U2VjdG9yX3QgKmJvb3QsIEZzX3QgKmZzLCBpbnQgbmZhdCkKIHsKICAgICBpZiAoZGV2X3JlYWQgKGZzIC0+IGZhdF9idWYsCi0gICAgICAgICAgICAgICAgICAoZnMgLT4gZmF0X3N0YXJ0ICsgbmZhdCAqIGZzIC0+IGZhdF9sZW4pLAotICAgICAgICAgICAgICAgICAgZnMgLT4gZmF0X2xlbikgPCAwKSB7Ci0gICAgICAgIHJldHVybiAoLTEpOworCQkgIChmcyAtPiBmYXRfc3RhcnQgKyBuZmF0ICogZnMgLT4gZmF0X2xlbiksCisJCSAgZnMgLT4gZmF0X2xlbikgPCAwKSB7CisJcmV0dXJuICgtMSk7CiAgICAgfQogCiAgICAgaWYgKGZzIC0+IGZhdF9idWYgWzBdIHx8IGZzIC0+IGZhdF9idWYgWzFdIHx8IGZzIC0+IGZhdF9idWYgWzJdKSB7Ci0gICAgICAgIGlmICgoZnMgLT4gZmF0X2J1ZiBbMF0gIT0gYm9vdCAtPiBkZXNjciAmJgotICAgICAgICAgICAgIChmcyAtPiBmYXRfYnVmIFswXSAhPSAweGY5IHx8IGJvb3QgLT4gZGVzY3IgIT0gTUVESUFfU1REKSkgfHwKLSAgICAgICAgICAgIGZzIC0+IGZhdF9idWYgWzBdIDwgTUVESUFfU1REKXsKLSAgICAgICAgICAgIC8qIFVua25vd24gTWVkaWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcyAtPiBmYXRfYnVmIFsxXSAhPSAweGZmIHx8IGZzIC0+IGZhdF9idWYgWzJdICE9IDB4ZmYpewotICAgICAgICAgICAgLyogRkFUIGRvZXNuJ3Qgc3RhcnQgd2l0aCBnb29kIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuICgtMSk7Ci0gICAgICAgIH0KKwlpZiAoKGZzIC0+IGZhdF9idWYgWzBdICE9IGJvb3QgLT4gZGVzY3IgJiYKKwkgICAgIChmcyAtPiBmYXRfYnVmIFswXSAhPSAweGY5IHx8IGJvb3QgLT4gZGVzY3IgIT0gTUVESUFfU1REKSkgfHwKKwkgICAgZnMgLT4gZmF0X2J1ZiBbMF0gPCBNRURJQV9TVEQpeworCSAgICAvKiBVbmtub3duIE1lZGlhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJICAgIHJldHVybiAoLTEpOworCX0KKwlpZiAoZnMgLT4gZmF0X2J1ZiBbMV0gIT0gMHhmZiB8fCBmcyAtPiBmYXRfYnVmIFsyXSAhPSAweGZmKXsKKwkgICAgLyogRkFUIGRvZXNuJ3Qgc3RhcnQgd2l0aCBnb29kIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICByZXR1cm4gKC0xKTsKKwl9CiAgICAgfQogCiAgICAgaWYgKGZzIC0+IG51bV9jbHVzID49IEZBVDEyX01BWF9OQikgewotICAgICAgICAvKiBUb28gbXVjaCBjbHVzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICByZXR1cm4gKC0xKTsKKwkvKiBUb28gbXVjaCBjbHVzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXJldHVybiAoLTEpOwogICAgIH0KIAogICAgIHJldHVybiBjaGVja19mYXQgKGZzKTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHJlYWRfZmF0IC0tIAorICogcmVhZF9mYXQgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogaW50IHJlYWRfZmF0IChCb290U2VjdG9yX3QgKmJvb3QsIEZzX3QgKmZzKQpAQCAtMTExLDM1ICsxMTEsMzIgQEAKICAgICAvKiBBbGxvY2F0ZSBGYXQgQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBidWZsZW4gPSBmcyAtPiBmYXRfbGVuICogU1pfU1REX1NFQ1RPUjsKICAgICBpZiAoZnMgLT4gZmF0X2J1ZikgewotICAgICAgICBmcmVlIChmcyAtPiBmYXRfYnVmKTsKKwlmcmVlIChmcyAtPiBmYXRfYnVmKTsKICAgICB9CiAKICAgICBpZiAoKGZzIC0+IGZhdF9idWYgPSBtYWxsb2MgKGJ1ZmxlbikpID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuICgtMSk7CisJcmV0dXJuICgtMSk7CiAgICAgfQogCiAgICAgLyogVHJ5IHRvIHJlYWQgZWFjaCBGYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgZm9yIChpID0gMDsgaTwgZnMgLT4gbmJfZmF0OyBpKyspewotICAgICAgICBpZiAocmVhZF9vbmVfZmF0IChib290LCBmcywgaSkgPT0gMCkgewotICAgICAgICAgICAgLyogRmF0IGlzIE9LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZnMgLT4gbnVtX2ZhdCA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWlmIChyZWFkX29uZV9mYXQgKGJvb3QsIGZzLCBpKSA9PSAwKSB7CisJICAgIC8qIEZhdCBpcyBPSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkgICAgZnMgLT4gbnVtX2ZhdCA9IGk7CisJICAgIGJyZWFrOworCX0KICAgICB9CiAKICAgICBpZiAoaSA9PSBmcyAtPiBuYl9mYXQpewotICAgICAgICByZXR1cm4gKC0xKTsKKwlyZXR1cm4gKC0xKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoZnMgLT4gZmF0X2xlbiA+ICgoKGZzIC0+IG51bV9jbHVzICsgMikgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAoRkFUX0JJVFMgLyA0KSAtMSApIC8gMiAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1pfU1REX1NFQ1RPUiArIDEpKSB7Ci0gICAgICAgIHJldHVybiAoLTEpOworCQkJICAoRkFUX0JJVFMgLyA0KSAtMSApIC8gMiAvCisJCQkgU1pfU1REX1NFQ1RPUiArIDEpKSB7CisJcmV0dXJuICgtMSk7CiAgICAgfQogICAgIHJldHVybiAoMCk7CiB9CiAKLQotIAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2Zkb3MvZmRvcy5jIGIvZnMvZmRvcy9mZG9zLmMKaW5kZXggODk2M2Y0Mi4uYTI5ZjQzZCAxMDA2NDQKLS0tIGEvZnMvZmRvcy9mZG9zLmMKKysrIGIvZnMvZmRvcy9mZG9zLmMKQEAgLTM3LDcgKzM3LDcgQEAKIEZpbGVfdCAgZmlsZTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogZG9zX29wZW4gLS0gCisgKiBkb3Nfb3BlbiAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBpbnQgZG9zX29wZW4oY2hhciAqbmFtZSkKQEAgLTQ1LDU5ICs0NSw1OSBAQAogICAgIGludCBsZzsKICAgICBpbnQgZW50cnk7CiAgICAgY2hhciAqZm5hbWU7Ci0gICAgCisKICAgICAvKiBXZSBuZWVkIHRvIHN1cHByZXNzIHRoZSAiIGNoYXIgYXJvdW5kIHRoZSBuYW1lICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAobmFtZSBbMF0gPT0gJyInKSB7Ci0gICAgICAgIG5hbWUgKys7CisJbmFtZSArKzsKICAgICB9CiAgICAgbGcgPSBzdHJsZW4gKG5hbWUpOwogICAgIGlmIChuYW1lIFtsZyAtIDFdID09ICciJykgewotICAgICAgICBuYW1lIFtsZyAtIDFdID0gJ1wwJzsKKwluYW1lIFtsZyAtIDFdID0gJ1wwJzsKICAgICB9CiAKICAgICAvKiBPcGVuIGZpbGUgc3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoZnNfaW5pdCAoJmZzKSA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICAgICB9CiAKICAgICAvKiBJbml0IHRoZSBmaWxlIGRlc2NyaXB0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBmaWxlLm5hbWUgPSBuYW1lOwogICAgIGZpbGUuZnMgPSAmZnM7Ci0gICAgCisKICAgICAvKiBmaW5kIHRoZSBzdWJkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAob3Blbl9zdWJkaXIgKCZmaWxlKSA8IDApIHsKLSAgICAgICAgcmV0dXJuICgtMSk7CisJcmV0dXJuICgtMSk7CiAgICAgfQogCiAgICAgZm5hbWUgPSBiYXNlbmFtZSAobmFtZSk7CiAKICAgICAvKiBpZiB3ZSB0cnkgdG8gb3BlbiByb290IGRpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoKmZuYW1lID09ICdcMCcpIHsKLSAgICAgICAgZmlsZS5maWxlID0gZmlsZS5zdWJkaXI7Ci0gICAgICAgIHJldHVybiAoMCk7CisJZmlsZS5maWxlID0gZmlsZS5zdWJkaXI7CisJcmV0dXJuICgwKTsKICAgICB9Ci0gICAgCisKICAgICAvKiBmaW5kIHRoZSBmaWxlIGluIHRoZSBzdWJkaXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBlbnRyeSA9IDA7CiAgICAgaWYgKHZmYXRfbG9va3VwICgmZmlsZS5zdWJkaXIsCi0gICAgICAgICAgICAgICAgICAgICBmaWxlLmZzLAotICAgICAgICAgICAgICAgICAgICAgJmZpbGUuZmlsZS5kaXIsCi0gICAgICAgICAgICAgICAgICAgICAmZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBBQ0NFUFRfRElSIHwgQUNDRVBUX1BMQUlOIHwgU0lOR0xFIHwgRE9fT1BFTiwKLSAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAmZmlsZS5maWxlKSAhPSAwKSB7Ci0gICAgICAgIC8qIEZpbGUgbm90IGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIHByaW50ZiAoIkZpbGUgbm90IGZvdW5kXG4iKTsKLSAgICAgICAgcmV0dXJuICgtMSk7CisJCSAgICAgZmlsZS5mcywKKwkJICAgICAmZmlsZS5maWxlLmRpciwKKwkJICAgICAmZW50cnksCisJCSAgICAgMCwKKwkJICAgICBmbmFtZSwKKwkJICAgICBBQ0NFUFRfRElSIHwgQUNDRVBUX1BMQUlOIHwgU0lOR0xFIHwgRE9fT1BFTiwKKwkJICAgICAwLAorCQkgICAgICZmaWxlLmZpbGUpICE9IDApIHsKKwkvKiBGaWxlIG5vdCBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXByaW50ZiAoIkZpbGUgbm90IGZvdW5kXG4iKTsKKwlyZXR1cm4gKC0xKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogZG9zX3JlYWQgLS0gCisgKiBkb3NfcmVhZCAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBpbnQgZG9zX3JlYWQgKHVsb25nIGFkZHIpCkBAIC0xMDYsMjcgKzEwNiwyNyBAQAogCiAgICAgLyogVHJ5IHRvIGJvb3QgYSBkaXJlY3RvcnkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYgKGZpbGUuZmlsZS5kaXIuYXR0ciAmIChBVFRSX0RJUkVDVE9SWSB8IEFUVFJfVk9MVU1FKSkgewotICAgICAgICBwcmludGYgKCJVbmFibGUgdG8gYm9vdCAlcyAhIVxuIiwgZmlsZS5uYW1lKTsKLSAgICAgICAgcmV0dXJuICgtMSk7CisJcHJpbnRmICgiVW5hYmxlIHRvIGJvb3QgJXMgISFcbiIsIGZpbGUubmFtZSk7CisJcmV0dXJuICgtMSk7CiAgICAgfQogICAgIHdoaWxlIChyZWFkIDwgZmlsZS5maWxlLkZpbGVTaXplKSB7Ci0gICAgICAgIFBSSU5URiAoInJlYWRfZmlsZSAoJWxkKVxuIiwgKGZpbGUuZmlsZS5GaWxlU2l6ZSAtIHJlYWQpKTsKLSAgICAgICAgbmIgPSByZWFkX2ZpbGUgKCZmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWFkZHIgKyByZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlLmZpbGUuRmlsZVNpemUgLSByZWFkKSk7Ci0gICAgICAgIFBSSU5URiAoInJlYWRfZmlsZSAtPiAlZFxuIiwgbmIpOwotICAgICAgICBpZiAobmIgPCAwKSB7Ci0gICAgICAgICAgICBwcmludGYgKCJyZWFkIGVycm9yXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICB9Ci0gICAgICAgIHJlYWQgKz0gbmI7CisJUFJJTlRGICgicmVhZF9maWxlICglbGQpXG4iLCAoZmlsZS5maWxlLkZpbGVTaXplIC0gcmVhZCkpOworCW5iID0gcmVhZF9maWxlICgmZnMsCisJCQkmZmlsZS5maWxlLAorCQkJKGNoYXIgKilhZGRyICsgcmVhZCwKKwkJCXJlYWQsCisJCQkoZmlsZS5maWxlLkZpbGVTaXplIC0gcmVhZCkpOworCVBSSU5URiAoInJlYWRfZmlsZSAtPiAlZFxuIiwgbmIpOworCWlmIChuYiA8IDApIHsKKwkgICAgcHJpbnRmICgicmVhZCBlcnJvclxuIik7CisJICAgIHJldHVybiAoLTEpOworCX0KKwlyZWFkICs9IG5iOwogICAgIH0KICAgICByZXR1cm4gKHJlYWQpOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogZG9zX2RpciAtLSAKKyAqIGRvc19kaXIgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogaW50IGRvc19kaXIgKHZvaWQpCkBAIC0xMzQsMzkgKzEzNCwzOSBAQAogICAgIGludCBlbnRyeTsKICAgICBEaXJlY3RvcnlfdCBkaXI7CiAgICAgY2hhciAqbmFtZTsKLSAgICAKLSAgICAKKworCiAgICAgaWYgKChmaWxlLmZpbGUuZGlyLmF0dHIgJiBBVFRSX0RJUkVDVE9SWSkgPT0gMCkgewotICAgICAgICBwcmludGYgKCIlczogbm90IGEgZGlyZWN0b3J5ICEhXG4iLCBmaWxlLm5hbWUpOwotICAgICAgICByZXR1cm4gKDEpOworCXByaW50ZiAoIiVzOiBub3QgYSBkaXJlY3RvcnkgISFcbiIsIGZpbGUubmFtZSk7CisJcmV0dXJuICgxKTsKICAgICB9CiAgICAgZW50cnkgPSAwOwogICAgIGlmICgobmFtZSA9IG1hbGxvYyAoTUFYX1ZOQU1FTEVOICsgMSkpID09IE5VTEwpIHsKLSAgICAgICAgUFJJTlRGICgiQWxsY2F0aW9uIGVycm9yXG4iKTsKLSAgICAgICAgcmV0dXJuICgxKTsKKwlQUklOVEYgKCJBbGxjYXRpb24gZXJyb3JcbiIpOworCXJldHVybiAoMSk7CiAgICAgfQotICAgIAorCiAgICAgd2hpbGUgKHZmYXRfbG9va3VwICgmZmlsZS5maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5mcywKLSAgICAgICAgICAgICAgICAgICAgICAgICZkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAmZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEFDQ0VQVF9ESVIgfCBBQ0NFUFRfUExBSU4gfCBNQVRDSF9BTlksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkgPT0gMCkgewotICAgICAgICAvKiBEaXNwbGF5IGZpbGUgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBwcmludGYgKCIlMy4zcyAlOWQgJXMgJTAyZCAlMDRkICUwMmQ6JTAyZDolMDJkICVzXG4iLAotICAgICAgICAgICAgICAgIChkaXIuYXR0ciAmIEFUVFJfRElSRUNUT1JZKSA/ICJkaXIiIDogIiAgICIsCi0gICAgICAgICAgICAgICAgX19sZTMyX3RvX2NwdSAoZGlyLnNpemUpLAotICAgICAgICAgICAgICAgIG1vbnRoIFtET1NfTU9OVEggKCZkaXIpIC0gMV0sCi0gICAgICAgICAgICAgICAgRE9TX0RBWSAoJmRpciksCi0gICAgICAgICAgICAgICAgRE9TX1lFQVIgKCZkaXIpLAotICAgICAgICAgICAgICAgIERPU19IT1VSICgmZGlyKSwKLSAgICAgICAgICAgICAgICBET1NfTUlOVVRFICgmZGlyKSwKLSAgICAgICAgICAgICAgICBET1NfU0VDICgmZGlyKSwKLSAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgCisJCQlmaWxlLmZzLAorCQkJJmRpciwKKwkJCSZlbnRyeSwKKwkJCTAsCisJCQlOVUxMLAorCQkJQUNDRVBUX0RJUiB8IEFDQ0VQVF9QTEFJTiB8IE1BVENIX0FOWSwKKwkJCW5hbWUsCisJCQlOVUxMKSA9PSAwKSB7CisJLyogRGlzcGxheSBmaWxlIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlwcmludGYgKCIlMy4zcyAlOWQgJXMgJTAyZCAlMDRkICUwMmQ6JTAyZDolMDJkICVzXG4iLAorCQkoZGlyLmF0dHIgJiBBVFRSX0RJUkVDVE9SWSkgPyAiZGlyIiA6ICIgICAiLAorCQlfX2xlMzJfdG9fY3B1IChkaXIuc2l6ZSksCisJCW1vbnRoIFtET1NfTU9OVEggKCZkaXIpIC0gMV0sCisJCURPU19EQVkgKCZkaXIpLAorCQlET1NfWUVBUiAoJmRpciksCisJCURPU19IT1VSICgmZGlyKSwKKwkJRE9TX01JTlVURSAoJmRpciksCisJCURPU19TRUMgKCZkaXIpLAorCQluYW1lKTsKKwogICAgIH0KICAgICBmcmVlIChuYW1lKTsKICAgICByZXR1cm4gKDApOwpkaWZmIC0tZ2l0IGEvZnMvZmRvcy9mZG9zLmggYi9mcy9mZG9zL2Zkb3MuaAppbmRleCAxODA3NmQ4Li5lMjhjMjJmIDEwMDY0NAotLS0gYS9mcy9mZG9zL2Zkb3MuaAorKysgYi9mcy9mZG9zL2Zkb3MuaApAQCAtNDEsMjUgKzQxLDI1IEBACiAKICAgICBpbnQgICAgICAgICAgICAgICAgIGNsdXN0ZXJfc2l6ZTsKICAgICBpbnQgICAgICAgICAgICAgICAgIG51bV9jbHVzOwotICAgIAorCiAgICAgaW50ICAgICAgICAgICAgICAgICBmYXRfc3RhcnQ7CiAgICAgaW50ICAgICAgICAgICAgICAgICBmYXRfbGVuOwogICAgIGludCAgICAgICAgICAgICAgICAgbmJfZmF0OwogICAgIGludCAgICAgICAgICAgICAgICAgbnVtX2ZhdDsKLSAgICAKKwogICAgIGludCAgICAgICAgICAgICAgICAgZGlyX3N0YXJ0OwogICAgIGludCAgICAgICAgICAgICAgICAgZGlyX2xlbjsKIAogICAgIHVuc2lnbmVkIGNoYXIgICAgICAgKmZhdF9idWY7Ci0gICAgCisKIH0gRnNfdDsKIAogLyogRGF0YSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBvbmUgZmlsZSBzeXN0ZW0gc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2xvdCB7CiAgICAgaW50ICgqbWFwKSAoc3RydWN0IGZzICpmcywKLSAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2xvdCAqZmlsZSwKLSAgICAgICAgICAgICAgICBpbnQgd2hlcmUsCi0gICAgICAgICAgICAgICAgaW50ICpsZW4pOworCQlzdHJ1Y3Qgc2xvdCAqZmlsZSwKKwkJaW50IHdoZXJlLAorCQlpbnQgKmxlbik7CiAgICAgdW5zaWduZWQgbG9uZyBGaWxlU2l6ZTsKIAogICAgIHVuc2lnbmVkIHNob3J0IGludCBGaXJzdEFic0NsdU5yOwpAQCAtODksMjQgKzg5LDI0IEBACiAKIC8qIHZmYXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIGludCB2ZmF0X2xvb2t1cCAoU2xvdF90ICpkaXIsCi0gICAgICAgICAgICAgICAgIEZzX3QgKmZzLAotICAgICAgICAgICAgICAgICBEaXJlY3RvcnlfdCAqZGlyZW50LAotICAgICAgICAgICAgICAgICBpbnQgKmVudHJ5LAotICAgICAgICAgICAgICAgICBpbnQgKnZmYXRfc3RhcnQsCi0gICAgICAgICAgICAgICAgIGNoYXIgKmZpbGVuYW1lLCAKLSAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAotICAgICAgICAgICAgICAgICBjaGFyICpvdXRuYW1lLAotICAgICAgICAgICAgICAgICBTbG90X3QgKmZpbGUpOworCQkgRnNfdCAqZnMsCisJCSBEaXJlY3RvcnlfdCAqZGlyZW50LAorCQkgaW50ICplbnRyeSwKKwkJIGludCAqdmZhdF9zdGFydCwKKwkJIGNoYXIgKmZpbGVuYW1lLAorCQkgaW50IGZsYWdzLAorCQkgY2hhciAqb3V0bmFtZSwKKwkJIFNsb3RfdCAqZmlsZSk7CiAKIC8qIHN1YmRpci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIGNoYXIgKmJhc2VuYW1lIChjaGFyICpuYW1lKTsKIGludCBvcGVuX3N1YmRpciAoRmlsZV90ICpkZXNjKTsKIGludCBvcGVuX2ZpbGUgKFNsb3RfdCAqZmlsZSwgRGlyZWN0b3J5X3QgKmRpcik7CiBpbnQgcmVhZF9maWxlIChGc190ICpmcywKLSAgICAgICAgICAgICAgIFNsb3RfdCAqZmlsZSwKLSAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgICAgIGludCB3aGVyZSwKLSAgICAgICAgICAgICAgIGludCBsZW4pOworCSAgICAgICBTbG90X3QgKmZpbGUsCisJICAgICAgIGNoYXIgKmJ1ZiwKKwkgICAgICAgaW50IHdoZXJlLAorCSAgICAgICBpbnQgbGVuKTsKIHZvaWQgaW5pdF9zdWJkaXIgKHZvaWQpOwogCiAvKiBmcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMTQsNCArMTE0LDMgQEAKIAogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvZnMvZmRvcy9mcy5jIGIvZnMvZmRvcy9mcy5jCmluZGV4IDY4YmJkZTAuLjNiOWQwOWUgMTAwNjQ0Ci0tLSBhL2ZzL2Zkb3MvZnMuYworKysgYi9mcy9mZG9zL2ZzLmMKQEAgLTMzLDE2ICszMywxNiBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGZpbGxfZnMgLS0gUmVhZCBpbmZvIG9uIGZpbGUgc3lzdGVtIAorICogZmlsbF9mcyAtLSBSZWFkIGluZm8gb24gZmlsZSBzeXN0ZW0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogc3RhdGljIGludCBmaWxsX2ZzIChCb290U2VjdG9yX3QgKmJvb3QsIEZzX3QgKmZzKQogewotICAgIAorCiAgICAgZnMgLT4gZmF0X3N0YXJ0ID0gX19sZTE2X3RvX2NwdSAoYm9vdCAtPiBucnN2c2VjdCk7CiAgICAgZnMgLT4gZmF0X2xlbiA9IF9fbGUxNl90b19jcHUgKGJvb3QgLT4gZmF0bGVuKTsKICAgICBmcyAtPiBuYl9mYXQgPSBib290IC0+IG5mYXQ7Ci0gICAgCisKICAgICBmcyAtPiBkaXJfc3RhcnQgPSBmcyAtPiBmYXRfc3RhcnQgKyBmcyAtPiBuYl9mYXQgKiBmcyAtPiBmYXRfbGVuOwogICAgIGZzIC0+IGRpcl9sZW4gPSBfX2xlMTZfdG9fY3B1IChib290IC0+IGRpcmVudHMpICogTURJUl9TSVpFIC8gU1pfU1REX1NFQ1RPUjsKICAgICBmcyAtPiBjbHVzdGVyX3NpemUgPSBib290IC0+IGNsc2l6OwpAQCAtNTIsNyArNTIsNyBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBmc19pbml0IC0tIAorICogZnNfaW5pdCAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBpbnQgZnNfaW5pdCAoRnNfdCAqZnMpCkBAIC02MSw2MCArNjEsNTggQEAKIAogICAgIC8qIEluaXRpYWxpemUgcGh5c2ljYWwgZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmIChkZXZfb3BlbiAoKSA8IDApIHsKLSAgICAgICAgUFJJTlRGICgiVW5hYmxlIHRvIGluaXRpYWxpemUgdGhlIGZkY1xuIik7Ci0gICAgICAgIHJldHVybiAoLTEpOworCVBSSU5URiAoIlVuYWJsZSB0byBpbml0aWFsaXplIHRoZSBmZGNcbiIpOworCXJldHVybiAoLTEpOwogICAgIH0KICAgICBpbml0X3N1YmRpciAoKTsKLSAgICAKKwogICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciByZWFkIHRoZSBib290IHNlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICgoYm9vdCA9IChCb290U2VjdG9yX3QgKiltYWxsb2MgKHNpemVvZiAoQm9vdFNlY3Rvcl90KSkpID09IE5VTEwpIHsKLSAgICAgICAgUFJJTlRGICgiVW5hYmxlIHRvIGFsbG9jYXRlIHNwYWNlIGZvciBib290IHNlY3RvclxuIik7Ci0gICAgICAgIHJldHVybiAoLTEpOworCVBSSU5URiAoIlVuYWJsZSB0byBhbGxvY2F0ZSBzcGFjZSBmb3IgYm9vdCBzZWN0b3JcbiIpOworCXJldHVybiAoLTEpOwogICAgIH0KLSAgICAKKwogICAgIC8qIHJlYWQgYm9vdCBzZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmIChkZXZfcmVhZCAoYm9vdCwgMCwgMSkpewotICAgICAgICBQUklOVEYgKCJFcnJvciBkdXJpbmcgYm9vdCBzZWN0b3IgcmVhZFxuIik7Ci0gICAgICAgIGZyZWUgKGJvb3QpOwotICAgICAgICByZXR1cm4gKC0xKTsKKwlQUklOVEYgKCJFcnJvciBkdXJpbmcgYm9vdCBzZWN0b3IgcmVhZFxuIik7CisJZnJlZSAoYm9vdCk7CisJcmV0dXJuICgtMSk7CiAgICAgfQogCiAgICAgLyogd2UgdmVyaWZ5IGl0J2EgYSBET1MgZGlza2V0dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYgKGJvb3QgLT4ganVtcCBbMF0gIT0gIEpVTVBfMF8xICYmIGJvb3QgLT4ganVtcCBbMF0gIT0gIEpVTVBfMF8yKSB7Ci0gICAgICAgIFBSSU5URiAoIk5vdCBhIERPUyBkaXNrZXR0ZVxuIik7Ci0gICAgICAgIGZyZWUgKGJvb3QpOwotICAgICAgICByZXR1cm4gKC0xKTsKKwlQUklOVEYgKCJOb3QgYSBET1MgZGlza2V0dGVcbiIpOworCWZyZWUgKGJvb3QpOworCXJldHVybiAoLTEpOwogICAgIH0KIAogICAgIGlmIChib290IC0+IGRlc2NyIDwgTUVESUFfU1REKSB7Ci0gICAgICAgIC8qIFdlIGhhbmRsZSBvbmx5IHJlY2VudCBtZWRpYXMgKHR5cGUgRjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIFBSSU5URiAoInVucmVjb2duaXplZCBkaXNrZXR0ZSB0eXBlXG4iKTsKLSAgICAgICAgZnJlZSAoYm9vdCk7Ci0gICAgICAgIHJldHVybiAoLTEpOworCS8qIFdlIGhhbmRsZSBvbmx5IHJlY2VudCBtZWRpYXMgKHR5cGUgRjApICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJUFJJTlRGICgidW5yZWNvZ25pemVkIGRpc2tldHRlIHR5cGVcbiIpOworCWZyZWUgKGJvb3QpOworCXJldHVybiAoLTEpOwogICAgIH0KIAogICAgIGlmIChjaGVja19kZXYgKGJvb3QsIGZzKSA8IDApIHsKLSAgICAgICAgUFJJTlRGICgiQmFkIGRpc2tldHRlXG4iKTsKLSAgICAgICAgZnJlZSAoYm9vdCk7Ci0gICAgICAgIHJldHVybiAoLTEpOworCVBSSU5URiAoIkJhZCBkaXNrZXR0ZVxuIik7CisJZnJlZSAoYm9vdCk7CisJcmV0dXJuICgtMSk7CiAgICAgfQotICAgIAotICAgIGlmIChmaWxsX2ZzIChib290LCBmcykgPCAwKSB7Ci0gICAgICAgIGZyZWUgKGJvb3QpOwogCi0gICAgICAgIHJldHVybiAoLTEpOworICAgIGlmIChmaWxsX2ZzIChib290LCBmcykgPCAwKSB7CisJZnJlZSAoYm9vdCk7CisKKwlyZXR1cm4gKC0xKTsKICAgICB9CiAKICAgICAvKiBSZWFkIEZBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAocmVhZF9mYXQgKGJvb3QsIGZzKSA8IDApIHsKLSAgICAgICAgZnJlZSAoYm9vdCk7Ci0gICAgICAgIHJldHVybiAoLTEpOworCWZyZWUgKGJvb3QpOworCXJldHVybiAoLTEpOwogICAgIH0KIAogICAgIGZyZWUgKGJvb3QpOwogICAgIHJldHVybiAoMCk7CiB9CiAKLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2Zkb3Mvc3ViZGlyLmMgYi9mcy9mZG9zL3N1YmRpci5jCmluZGV4IDU5MTFmMmUuLjk3YjI1MDQgMTAwNjQ0Ci0tLSBhL2ZzL2Zkb3Mvc3ViZGlyLmMKKysrIGIvZnMvZmRvcy9zdWJkaXIuYwpAQCAtMzgsMTEgKzM4LDExIEBACiAjZGVmaW5lIG1pbih4LHkpICgoeCk8KHkpPyh4KTooeSkpCiAKIHN0YXRpYyBpbnQgZGVzY2VuZCAoU2xvdF90ICpwYXJlbnQsCi0gICAgICAgICAgICAgRnNfdCAqZnMsCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgKnBhdGgpOworCSAgICAgRnNfdCAqZnMsCisJCSAgICBjaGFyICpwYXRoKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogaW5pdF9zdWJkaXIgLS0gCisgKiBpbml0X3N1YmRpciAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkIGluaXRfc3ViZGlyICh2b2lkKQpAQCAtNTAsNyArNTAsNyBAQAogICAgIGNhY2hlX3NlY3QgPSAtMTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGJhc2VuYW1lIC0tIAorICogYmFzZW5hbWUgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogY2hhciAqYmFzZW5hbWUgKGNoYXIgKm5hbWUpCkBAIC01OCwzMiArNTgsMzIgQEAKICAgICByZWdpc3RlciBjaGFyICpjcHRyOwogCiAgICAgaWYgKCFuYW1lIHx8ICEqbmFtZSkgewotICAgICAgICByZXR1cm4gKCIiKTsKKwlyZXR1cm4gKCIiKTsKICAgICB9Ci0gICAgCisKICAgICBmb3IgKGNwdHI9IG5hbWU7ICpjcHRyKys7ICk7CiAgICAgd2hpbGUgKC0tY3B0ciA+PSBuYW1lKSB7CiAJaWYgKCpjcHRyID09ICcvJykgICAgewotICAgICAgICAgICAgcmV0dXJuIChjcHRyICsgMSk7CisJICAgIHJldHVybiAoY3B0ciArIDEpOwogCX0KICAgICB9CiAgICAgcmV0dXJuKG5hbWUpOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogcm9vdF9tYXAgLS0gCisgKiByb290X21hcCAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgaW50IHJvb3RfbWFwIChGc190ICpmcywgU2xvdF90ICpmaWxlLCBpbnQgd2hlcmUsIGludCAqbGVuKQogewogICAgICpsZW4gPSBtaW4gKCpsZW4sIGZzIC0+IGRpcl9sZW4gKiBTWl9TVERfU0VDVE9SIC0gd2hlcmUpOwogICAgIGlmICgqbGVuIDwgMCApIHsKLSAgICAgICAgKmxlbiA9IDA7Ci0gICAgICAgIHJldHVybiAoLTEpOworCSpsZW4gPSAwOworCXJldHVybiAoLTEpOwogICAgIH0KICAgICByZXR1cm4gZnMgLT4gZGlyX3N0YXJ0ICogU1pfU1REX1NFQ1RPUiArIHdoZXJlOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogbm9ybWFsX21hcCAtLSAKKyAqIG5vcm1hbF9tYXAgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogc3RhdGljIGludCBub3JtYWxfbWFwIChGc190ICpmcywgU2xvdF90ICpmaWxlLCBpbnQgd2hlcmUsIGludCAqbGVuKQpAQCAtMTAyLDYwICsxMDIsNjAgQEAKICAgICAqbGVuID0gbWluICgqbGVuLCBmaWxlIC0+IEZpbGVTaXplIC0gd2hlcmUpOwogCiAgICAgaWYgKCpsZW4gPCAwICkgewotICAgICAgICAqbGVuID0gMDsKLSAgICAgICAgcmV0dXJuICgwKTsKKwkqbGVuID0gMDsKKwlyZXR1cm4gKDApOwogICAgIH0KIAogICAgIGlmIChmaWxlIC0+IEZpcnN0QWJzQ2x1TnIgPCAyKXsKLSAgICAgICAgKmxlbiA9IDA7Ci0gICAgICAgIHJldHVybiAoMCk7CisJKmxlbiA9IDA7CisJcmV0dXJuICgwKTsKICAgICB9CiAKICAgICBSZWxDbHVOciA9IHdoZXJlIC8gY2x1c19zaXplOwotCQorCiAgICAgaWYgKFJlbENsdU5yID49IGZpbGUgLT4gUHJldmlvdXNSZWxDbHVOcil7Ci0gICAgICAgIEN1ckNsdU5yID0gZmlsZSAtPiBQcmV2aW91c1JlbENsdU5yOwotICAgICAgICBBYnNDbHVOciA9IGZpbGUgLT4gUHJldmlvdXNBYnNDbHVOcjsKKwlDdXJDbHVOciA9IGZpbGUgLT4gUHJldmlvdXNSZWxDbHVOcjsKKwlBYnNDbHVOciA9IGZpbGUgLT4gUHJldmlvdXNBYnNDbHVOcjsKICAgICB9IGVsc2UgewotICAgICAgICBDdXJDbHVOciA9IDA7Ci0gICAgICAgIEFic0NsdU5yID0gZmlsZSAtPiBGaXJzdEFic0NsdU5yOworCUN1ckNsdU5yID0gMDsKKwlBYnNDbHVOciA9IGZpbGUgLT4gRmlyc3RBYnNDbHVOcjsKICAgICB9CiAKIAogICAgIE5yQ2x1ID0gKG9mZnNldCArICpsZW4gLSAxKSAvIGNsdXNfc2l6ZTsKICAgICB3aGlsZSAoQ3VyQ2x1TnIgPD0gUmVsQ2x1TnIgKyBOckNsdSkgewotICAgICAgICBpZiAoQ3VyQ2x1TnIgPT0gUmVsQ2x1TnIpewotICAgICAgICAgICAgLyogd2UgaGF2ZSByZWFjaGVkIHRoZSBiZWdpbm5pbmcgb2Ygb3VyIHpvbmUuIFNhdmUKLSAgICAgICAgICAgICAqIGNvb3JkaW5hdGVzICovCi0gICAgICAgICAgICBmaWxlIC0+IFByZXZpb3VzUmVsQ2x1TnIgPSBSZWxDbHVOcjsKLSAgICAgICAgICAgIGZpbGUgLT4gUHJldmlvdXNBYnNDbHVOciA9IEFic0NsdU5yOwotICAgICAgICB9Ci0gICAgICAgIE5ld0NsdU5yID0gZmF0X2RlY29kZSAoZnMsIEFic0NsdU5yKTsKLSAgICAgICAgaWYgKE5ld0NsdU5yID09IDEgfHwgTmV3Q2x1TnIgPT0gMCkgewotICAgICAgICAgICAgUFJJTlRGKCJGYXQgcHJvYmxlbSB3aGlsZSBkZWNvZGluZyAlZCAleFxuIiwgCi0gICAgICAgICAgICAgICAgICAgIEFic0NsdU5yLCBOZXdDbHVOcik7Ci0gICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoQ3VyQ2x1TnIgPT0gUmVsQ2x1TnIgKyBOckNsdSkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlpZiAoQ3VyQ2x1TnIgPT0gUmVsQ2x1TnIpeworCSAgICAvKiB3ZSBoYXZlIHJlYWNoZWQgdGhlIGJlZ2lubmluZyBvZiBvdXIgem9uZS4gU2F2ZQorCSAgICAgKiBjb29yZGluYXRlcyAqLworCSAgICBmaWxlIC0+IFByZXZpb3VzUmVsQ2x1TnIgPSBSZWxDbHVOcjsKKwkgICAgZmlsZSAtPiBQcmV2aW91c0Fic0NsdU5yID0gQWJzQ2x1TnI7CisJfQorCU5ld0NsdU5yID0gZmF0X2RlY29kZSAoZnMsIEFic0NsdU5yKTsKKwlpZiAoTmV3Q2x1TnIgPT0gMSB8fCBOZXdDbHVOciA9PSAwKSB7CisJICAgIFBSSU5URigiRmF0IHByb2JsZW0gd2hpbGUgZGVjb2RpbmcgJWQgJXhcbiIsCisJCSAgICBBYnNDbHVOciwgTmV3Q2x1TnIpOworCSAgICByZXR1cm4gKC0xKTsKKwl9CisJaWYgKEN1ckNsdU5yID09IFJlbENsdU5yICsgTnJDbHUpIHsKKwkgICAgYnJlYWs7CisJfQogCi0gICAgICAgIGlmIChDdXJDbHVOciA8IFJlbENsdU5yICYmIE5ld0NsdU5yID09IEZBVDEyX0VORCkgewotICAgICAgICAgICAgKmxlbiA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorCWlmIChDdXJDbHVOciA8IFJlbENsdU5yICYmIE5ld0NsdU5yID09IEZBVDEyX0VORCkgeworCSAgICAqbGVuID0gMDsKKwkgICAgcmV0dXJuIDA7CisJfQogCi0gICAgICAgIGlmIChDdXJDbHVOciA+PSBSZWxDbHVOciAmJiBOZXdDbHVOciAhPSBBYnNDbHVOciArIDEpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgQ3VyQ2x1TnIrKzsKLSAgICAgICAgQWJzQ2x1TnIgPSBOZXdDbHVOcjsKKwlpZiAoQ3VyQ2x1TnIgPj0gUmVsQ2x1TnIgJiYgTmV3Q2x1TnIgIT0gQWJzQ2x1TnIgKyAxKQorCSAgICBicmVhazsKKwlDdXJDbHVOcisrOworCUFic0NsdU5yID0gTmV3Q2x1TnI7CiAgICAgfQogCiAgICAgKmxlbiA9IG1pbiAoKmxlbiwgKDEgKyBDdXJDbHVOciAtIFJlbENsdU5yKSAqIGNsdXNfc2l6ZSAtIG9mZnNldCk7CiAKICAgICByZXR1cm4gKCgoZmlsZSAtPiBQcmV2aW91c0Fic0NsdU5yIC0gMikgKiBmcyAtPiBjbHVzdGVyX3NpemUgKwotICAgICAgICAgICAgIGZzIC0+IGRpcl9zdGFydCArIGZzIC0+IGRpcl9sZW4pICoKLSAgICAgICAgICAgIFNaX1NURF9TRUNUT1IgKyBvZmZzZXQpOworCSAgICAgZnMgLT4gZGlyX3N0YXJ0ICsgZnMgLT4gZGlyX2xlbikgKgorCSAgICBTWl9TVERfU0VDVE9SICsgb2Zmc2V0KTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIG9wZW5fc3ViZGlyIC0tIG9wZW4gdGhlIHN1YmRpciBjb250YWluaW5nIHRoZSBmaWxlCkBAIC0xNjYsMTMgKzE2NiwxMyBAQAogICAgIGNoYXIgKnBhdGhuYW1lOwogICAgIGNoYXIgKnRtcCwgKnMsICpwYXRoOwogICAgIGNoYXIgdGVybWluYXRvcjsKLSAgICAKKwogICAgIGlmICgocGF0aG5hbWUgPSAoY2hhciAqKW1hbGxvYyAoTUFYX1BBVEgpKSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAoLTEpOworCXJldHVybiAoLTEpOwogICAgIH0KLSAgICAKKwogICAgIHN0cmNweSAocGF0aG5hbWUsIGRlc2MgLT4gbmFtZSk7Ci0gICAgCisKICAgICAvKiBTdXBwcmVzcyBmaWxlIG5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB0bXAgPSBiYXNlbmFtZSAocGF0aG5hbWUpOwogICAgICp0bXAgPSAnXDAnOwpAQCAtMTgyLDY4ICsxODIsNjggQEAKICAgICBkZXNjIC0+IHN1YmRpci5GaWxlU2l6ZSA9IC0xOwogICAgIGRlc2MgLT4gc3ViZGlyLm1hcCA9IHJvb3RfbWFwOwogICAgIGRlc2MgLT4gc3ViZGlyLmRpci5hdHRyID0gQVRUUl9ESVJFQ1RPUlk7Ci0gICAgCisKICAgICB0bXAgPSBwYXRobmFtZTsKICAgICBmb3IgKHMgPSB0bXA7IDsgKytzKSB7Ci0gICAgICAgIGlmICgqcyA9PSAnLycgfHwgKnMgPT0gJ1wwJykgewotICAgICAgICAgICAgcGF0aCA9IHRtcDsKLSAgICAgICAgICAgIHRlcm1pbmF0b3IgPSAqczsKLSAgICAgICAgICAgICpzID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChzICE9IHRtcCAmJiBzdHJjbXAgKHBhdGgsIi4iKSkgewotICAgICAgICAgICAgICAgIGlmIChkZXNjZW5kICgmZGVzYyAtPiBzdWJkaXIsIGRlc2MgLT4gZnMsIHBhdGgpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBmcmVlIChwYXRobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0ZXJtaW5hdG9yID09IDApIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRtcCA9IHMgKyAxOwotICAgICAgICB9CisJaWYgKCpzID09ICcvJyB8fCAqcyA9PSAnXDAnKSB7CisJICAgIHBhdGggPSB0bXA7CisJICAgIHRlcm1pbmF0b3IgPSAqczsKKwkgICAgKnMgPSAnXDAnOworCSAgICBpZiAocyAhPSB0bXAgJiYgc3RyY21wIChwYXRoLCIuIikpIHsKKwkJaWYgKGRlc2NlbmQgKCZkZXNjIC0+IHN1YmRpciwgZGVzYyAtPiBmcywgcGF0aCkgPCAwKSB7CisJCSAgICBmcmVlIChwYXRobmFtZSk7CisJCSAgICByZXR1cm4gKC0xKTsKKwkJfQorCSAgICB9CisJICAgIGlmICh0ZXJtaW5hdG9yID09IDApIHsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgdG1wID0gcyArIDE7CisJfQogICAgIH0KICAgICBmcmVlIChwYXRobmFtZSk7CiAgICAgcmV0dXJuICgwKTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGRlc2NlbmQgLS0gCisgKiBkZXNjZW5kIC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyBpbnQgZGVzY2VuZCAoU2xvdF90ICpwYXJlbnQsCi0gICAgICAgICAgICAgRnNfdCAqZnMsCi0gICAgICAgICAgICAgY2hhciAqcGF0aCkKKwkgICAgIEZzX3QgKmZzLAorCSAgICAgY2hhciAqcGF0aCkKIHsKICAgICBpbnQgZW50cnk7CiAgICAgU2xvdF90IFN1YkRpcjsKIAogICAgIGlmKHBhdGhbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKHBhdGgsICIuIikgPT0gMCkgewotICAgICAgICByZXR1cm4gKDApOworCXJldHVybiAoMCk7CiAgICAgfQotICAgIAorCiAKICAgICBlbnRyeSA9IDA7CiAgICAgaWYgKHZmYXRfbG9va3VwIChwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICBmcywKLSAgICAgICAgICAgICAgICAgICAgICYoU3ViRGlyLmRpciksCi0gICAgICAgICAgICAgICAgICAgICAmZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgIEFDQ0VQVF9ESVIgfCBTSU5HTEUgfCBET19PUEVOLAotICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICZTdWJEaXIpID09IDApIHsKLSAgICAgICAgKnBhcmVudCA9IFN1YkRpcjsKLSAgICAgICAgcmV0dXJuICgwKTsKKwkJICAgICBmcywKKwkJICAgICAmKFN1YkRpci5kaXIpLAorCQkgICAgICZlbnRyeSwKKwkJICAgICAwLAorCQkgICAgIHBhdGgsCisJCSAgICAgQUNDRVBUX0RJUiB8IFNJTkdMRSB8IERPX09QRU4sCisJCSAgICAgMCwKKwkJICAgICAmU3ViRGlyKSA9PSAwKSB7CisJKnBhcmVudCA9IFN1YkRpcjsKKwlyZXR1cm4gKDApOwogICAgIH0KIAogICAgIGlmIChzdHJjbXAocGF0aCwgIi4uIikgPT0gMCkgewotICAgICAgICBwYXJlbnQgLT4gRmlsZVNpemUgPSAtMTsKLSAgICAgICAgcGFyZW50IC0+IEZpcnN0QWJzQ2x1TnIgPSAwOwotICAgICAgICBwYXJlbnQgLT4gbWFwID0gcm9vdF9tYXA7Ci0gICAgICAgIHJldHVybiAoMCk7CisJcGFyZW50IC0+IEZpbGVTaXplID0gLTE7CisJcGFyZW50IC0+IEZpcnN0QWJzQ2x1TnIgPSAwOworCXBhcmVudCAtPiBtYXAgPSByb290X21hcDsKKwlyZXR1cm4gKDApOwogICAgIH0KICAgICByZXR1cm4gKC0xKTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIG9wZW5fZmlsZSAtLSAKKyAqIG9wZW5fZmlsZSAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBpbnQgb3Blbl9maWxlIChTbG90X3QgKmZpbGUsIERpcmVjdG9yeV90ICpkaXIpCkBAIC0yNTUsMTcgKzI1NSwxNyBAQAogCiAgICAgaWYoZmlyc3QgPT0gMCAmJgogICAgICAgIChkaXIgLT4gYXR0ciAmIEFUVFJfRElSRUNUT1JZKSAhPSAwKSB7Ci0gICAgICAgIGZpbGUgLT4gRmlyc3RBYnNDbHVOciA9IDA7Ci0gICAgICAgIGZpbGUgLT4gRmlsZVNpemUgPSAtMTsKLSAgICAgICAgZmlsZSAtPiBtYXAgPSByb290X21hcDsKLSAgICAgICAgcmV0dXJuICgwKTsKKwlmaWxlIC0+IEZpcnN0QWJzQ2x1TnIgPSAwOworCWZpbGUgLT4gRmlsZVNpemUgPSAtMTsKKwlmaWxlIC0+IG1hcCA9IHJvb3RfbWFwOworCXJldHVybiAoMCk7CiAgICAgfQotCQorCiAgICAgaWYgKChkaXIgLT4gYXR0ciAmIEFUVFJfRElSRUNUT1JZKSAhPSAwKSB7Ci0gICAgICAgIHNpemUgPSAoMVVMIDw8IDMxKSAtIDE7CisJc2l6ZSA9ICgxVUwgPDwgMzEpIC0gMTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHNpemUgPSBfX2xlMzJfdG9fY3B1IChkaXIgLT4gc2l6ZSk7CisJc2l6ZSA9IF9fbGUzMl90b19jcHUgKGRpciAtPiBzaXplKTsKICAgICB9CiAKICAgICBmaWxlIC0+IG1hcCA9IG5vcm1hbF9tYXA7CkBAIC0yNzUsNzMgKzI3NSw3MyBAQAogICAgIHJldHVybiAoMCk7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiByZWFkX2ZpbGUgLS0gCisgKiByZWFkX2ZpbGUgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogaW50IHJlYWRfZmlsZSAoRnNfdCAqZnMsCi0gICAgICAgICAgICAgICBTbG90X3QgKmZpbGUsCi0gICAgICAgICAgICAgICBjaGFyICpidWYsCi0gICAgICAgICAgICAgICBpbnQgd2hlcmUsCi0gICAgICAgICAgICAgICBpbnQgbGVuKQorCSAgICAgICBTbG90X3QgKmZpbGUsCisJICAgICAgIGNoYXIgKmJ1ZiwKKwkgICAgICAgaW50IHdoZXJlLAorCSAgICAgICBpbnQgbGVuKQogewogICAgIGludCBwb3M7CiAgICAgaW50IHJlYWQsIG5iLCBzZWN0LCBvZmZzZXQ7Ci0gICAgCisKICAgICBwb3MgPSBmaWxlIC0+IG1hcCAoZnMsIGZpbGUsIHdoZXJlLCAmbGVuKTsKICAgICBpZiAgKHBvcyA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKGxlbiA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAoMCk7CisJcmV0dXJuICgwKTsKICAgICB9CiAKICAgICAvKiBDb21wdXRlIHNlY3RvciBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBzZWN0ID0gcG9zIC8gU1pfU1REX1NFQ1RPUjsKICAgICBvZmZzZXQgPSBwb3MgJSBTWl9TVERfU0VDVE9SOwogICAgIHJlYWQgPSAwOwotICAgIAorCiAgICAgaWYgKG9mZnNldCkgewotICAgICAgICAvKiBSZWFkIGRvZXNuJ3Qgc3RhcnQgYXQgdGhlIHNlY3RvciBiZWdpbm5pbmcuIFdlIG5lZWQgdG8gdXNlIG91ciAgICAqLwotICAgICAgICAvKiBjYWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBpZiAoc2VjdCAhPSBjYWNoZV9zZWN0KSB7Ci0gICAgICAgICAgICBpZiAoZGV2X3JlYWQgKGNhY2hlLCBzZWN0LCAxKSA8IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhY2hlX3NlY3QgPSBzZWN0OwotICAgICAgICB9Ci0gICAgICAgIG5iID0gbWluIChsZW4sIFNaX1NURF9TRUNUT1IgLSBvZmZzZXQpOwotICAgICAgICAKLSAgICAgICAgbWVtY3B5IChidWYsIGNhY2hlICsgb2Zmc2V0LCBuYik7Ci0gICAgICAgIHJlYWQgKz0gbmI7Ci0gICAgICAgIGxlbiAtPSBuYjsKLSAgICAgICAgc2VjdCArPSAxOworCS8qIFJlYWQgZG9lc24ndCBzdGFydCBhdCB0aGUgc2VjdG9yIGJlZ2lubmluZy4gV2UgbmVlZCB0byB1c2Ugb3VyICAgICovCisJLyogY2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpZiAoc2VjdCAhPSBjYWNoZV9zZWN0KSB7CisJICAgIGlmIChkZXZfcmVhZCAoY2FjaGUsIHNlY3QsIDEpIDwgMCkgeworCQlyZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgICBjYWNoZV9zZWN0ID0gc2VjdDsKKwl9CisJbmIgPSBtaW4gKGxlbiwgU1pfU1REX1NFQ1RPUiAtIG9mZnNldCk7CisKKwltZW1jcHkgKGJ1ZiwgY2FjaGUgKyBvZmZzZXQsIG5iKTsKKwlyZWFkICs9IG5iOworCWxlbiAtPSBuYjsKKwlzZWN0ICs9IDE7CiAgICAgfQogCiAgICAgaWYgKGxlbiA+IFNaX1NURF9TRUNUT1IpIHsKLSAgICAgICAgbmIgPSAobGVuIC0gMSkgLyBTWl9TVERfU0VDVE9SOwotICAgICAgICBpZiAoZGV2X3JlYWQgKGJ1ZiArIHJlYWQsIHNlY3QsIG5iKSA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiAoKHJlYWQpID8gcmVhZCA6IC0xKTsKLSAgICAgICAgfQotICAgICAgICAvKiB1cGRhdGUgc2VjdG9yIHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBzZWN0ICs9IG5iOworCW5iID0gKGxlbiAtIDEpIC8gU1pfU1REX1NFQ1RPUjsKKwlpZiAoZGV2X3JlYWQgKGJ1ZiArIHJlYWQsIHNlY3QsIG5iKSA8IDApIHsKKwkgICAgcmV0dXJuICgocmVhZCkgPyByZWFkIDogLTEpOworCX0KKwkvKiB1cGRhdGUgc2VjdG9yIHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXNlY3QgKz0gbmI7CiAKLSAgICAgICAgLyogVXBkYXRlIGJ5dGUgcG9zaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgbmIgKj0gU1pfU1REX1NFQ1RPUjsKLSAgICAgICAgcmVhZCArPSBuYjsKLSAgICAgICAgbGVuIC09IG5iOworCS8qIFVwZGF0ZSBieXRlIHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJbmIgKj0gU1pfU1REX1NFQ1RPUjsKKwlyZWFkICs9IG5iOworCWxlbiAtPSBuYjsKICAgICB9CiAKICAgICBpZiAobGVuKSB7Ci0gICAgICAgIGlmIChzZWN0ICE9IGNhY2hlX3NlY3QpIHsKLSAgICAgICAgICAgIGlmIChkZXZfcmVhZCAoY2FjaGUsIHNlY3QsIDEpIDwgMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAoKHJlYWQpID8gcmVhZCA6IC0xKTsKLSAgICAgICAgICAgICAgICBjYWNoZV9zZWN0ID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYWNoZV9zZWN0ID0gc2VjdDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbWVtY3B5IChidWYgKyByZWFkLCBjYWNoZSwgbGVuKTsKLSAgICAgICAgcmVhZCArPSBsZW47CisJaWYgKHNlY3QgIT0gY2FjaGVfc2VjdCkgeworCSAgICBpZiAoZGV2X3JlYWQgKGNhY2hlLCBzZWN0LCAxKSA8IDApIHsKKwkJcmV0dXJuICgocmVhZCkgPyByZWFkIDogLTEpOworCQljYWNoZV9zZWN0ID0gLTE7CisJICAgIH0KKwkgICAgY2FjaGVfc2VjdCA9IHNlY3Q7CisJfQorCisJbWVtY3B5IChidWYgKyByZWFkLCBjYWNoZSwgbGVuKTsKKwlyZWFkICs9IGxlbjsKICAgICB9CiAgICAgcmV0dXJuIChyZWFkKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2Zkb3MvdmZhdC5jIGIvZnMvZmRvcy92ZmF0LmMKaW5kZXggZjgyODc5NS4uNDZhNDY0YiAxMDA2NDQKLS0tIGEvZnMvZmRvcy92ZmF0LmMKKysrIGIvZnMvZmRvcy92ZmF0LmMKQEAgLTMyLDEwICszMiwxMCBAQAogI2luY2x1ZGUgImZkb3MuaCIKIAogc3RhdGljIGludCBkaXJfcmVhZCAoRnNfdCAqZnMsCi0gICAgICAgICAgICAgICAgICAgICBTbG90X3QgKmRpciwKLSAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeV90ICpkaXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgbnVtLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZmYXRfc3RhdGUgKnYpOworCQkgICAgIFNsb3RfdCAqZGlyLAorCQkgICAgIERpcmVjdG9yeV90ICpkaXJlbnQsCisJCSAgICAgaW50IG51bSwKKwkJICAgICBzdHJ1Y3QgdmZhdF9zdGF0ZSAqdik7CiAKIHN0YXRpYyBpbnQgdW5pY29kZV9yZWFkIChjaGFyICppbiwgY2hhciAqb3V0LCBpbnQgbnVtKTsKIHN0YXRpYyBpbnQgbWF0Y2ggKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnApOwpAQCAtNDUsNyArNDUsNyBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGNsZWFyX3ZmYXQgLS0gCisgKiBjbGVhcl92ZmF0IC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyB2b2lkIGNsZWFyX3ZmYXQgKHN0cnVjdCB2ZmF0X3N0YXRlICp2KQpAQCAtNTUsMTggKzU1LDE4IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHZmYXRfbG9va3VwIC0tIAorICogdmZhdF9sb29rdXAgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogaW50IHZmYXRfbG9va3VwIChTbG90X3QgKmRpciwKLSAgICAgICAgICAgICAgICAgRnNfdCAqZnMsCi0gICAgICAgICAgICAgICAgIERpcmVjdG9yeV90ICpkaXJlbnQsCi0gICAgICAgICAgICAgICAgIGludCAqZW50cnksCi0gICAgICAgICAgICAgICAgIGludCAqdmZhdF9zdGFydCwKLSAgICAgICAgICAgICAgICAgY2hhciAqZmlsZW5hbWUsIAotICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCi0gICAgICAgICAgICAgICAgIGNoYXIgKm91dG5hbWUsCi0gICAgICAgICAgICAgICAgIFNsb3RfdCAqZmlsZSkKKwkJIEZzX3QgKmZzLAorCQkgRGlyZWN0b3J5X3QgKmRpcmVudCwKKwkJIGludCAqZW50cnksCisJCSBpbnQgKnZmYXRfc3RhcnQsCisJCSBjaGFyICpmaWxlbmFtZSwKKwkJIGludCBmbGFncywKKwkJIGNoYXIgKm91dG5hbWUsCisJCSBTbG90X3QgKmZpbGUpCiB7CiAgICAgaW50IGZvdW5kOwogICAgIHN0cnVjdCB2ZmF0X3N0YXRlIHZmYXQ7CkBAIC03NCw5MiArNzQsOTIgQEAKICAgICBpbnQgdmZhdF9wcmVzZW50ID0gMDsKIAogICAgIGlmICgqZW50cnkgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKICAgICB9CiAKICAgICBmb3VuZCA9IDA7CiAgICAgY2xlYXJfdmZhdCAoJnZmYXQpOwogICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIGlmIChkaXJfcmVhZCAoZnMsIGRpciwgZGlyZW50LCAqZW50cnksICZ2ZmF0KSA8IDApIHsKLSAgICAgICAgICAgIGlmICh2ZmF0X3N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgKnZmYXRfc3RhcnQgPSAqZW50cnk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAoKmVudHJ5KSsrOworCWlmIChkaXJfcmVhZCAoZnMsIGRpciwgZGlyZW50LCAqZW50cnksICZ2ZmF0KSA8IDApIHsKKwkgICAgaWYgKHZmYXRfc3RhcnQpIHsKKwkJKnZmYXRfc3RhcnQgPSAqZW50cnk7CisJICAgIH0KKwkgICAgYnJlYWs7CisJfQorCSgqZW50cnkpKys7CiAKLSAgICAgICAgLyogRW1wdHkgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgaWYgKGRpcmVudCAtPiBuYW1lWzBdID09ICdcMCcpewotICAgICAgICAgICAgaWYgKHZmYXRfc3RhcnQgPT0gMCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKwkvKiBFbXB0eSBzbG90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWlmIChkaXJlbnQgLT4gbmFtZVswXSA9PSAnXDAnKXsKKwkgICAgaWYgKHZmYXRfc3RhcnQgPT0gMCkgeworCQlicmVhazsKKwkgICAgfQorCSAgICBjb250aW51ZTsKKwl9CiAKLSAgICAgICAgaWYgKGRpcmVudCAtPiBhdHRyID09IEFUVFJfVlNFKSB7Ci0gICAgICAgICAgICAvKiBWU0UgZW50cnksIGNvbnRpbnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIChkaXJlbnQgLT4gbmFtZSBbMF0gPT0gREVMTUFSSykgfHwKLSAgICAgICAgICAgICAoKGRpcmVudCAtPiBhdHRyICYgQVRUUl9ESVJFQ1RPUlkpICE9IDAgJiYKLSAgICAgICAgICAgICAgKGZsYWdzICYgQUNDRVBUX0RJUikgPT0gMCkgfHwKLSAgICAgICAgICAgICAoKGRpcmVudCAtPiBhdHRyICYgQVRUUl9WT0xVTUUpICE9IDAgJiYKLSAgICAgICAgICAgICAgKGZsYWdzICYgQUNDRVBUX0xBQkVMKSA9PSAwKSB8fAotICAgICAgICAgICAgICgoKGRpcmVudCAtPiBhdHRyICYgKEFUVFJfRElSRUNUT1JZIHwgQVRUUl9WT0xVTUUpKSA9PSAwKSAmJgotICAgICAgICAgICAgICAoZmxhZ3MgJiBBQ0NFUFRfUExBSU4pID09IDApKSB7Ci0gICAgICAgICAgICBjbGVhcl92ZmF0ICgmdmZhdCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorCWlmIChkaXJlbnQgLT4gYXR0ciA9PSBBVFRSX1ZTRSkgeworCSAgICAvKiBWU0UgZW50cnksIGNvbnRpbnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJICAgIGNvbnRpbnVlOworCX0KKwlpZiAoIChkaXJlbnQgLT4gbmFtZSBbMF0gPT0gREVMTUFSSykgfHwKKwkgICAgICgoZGlyZW50IC0+IGF0dHIgJiBBVFRSX0RJUkVDVE9SWSkgIT0gMCAmJgorCSAgICAgIChmbGFncyAmIEFDQ0VQVF9ESVIpID09IDApIHx8CisJICAgICAoKGRpcmVudCAtPiBhdHRyICYgQVRUUl9WT0xVTUUpICE9IDAgJiYKKwkgICAgICAoZmxhZ3MgJiBBQ0NFUFRfTEFCRUwpID09IDApIHx8CisJICAgICAoKChkaXJlbnQgLT4gYXR0ciAmIChBVFRSX0RJUkVDVE9SWSB8IEFUVFJfVk9MVU1FKSkgPT0gMCkgJiYKKwkgICAgICAoZmxhZ3MgJiBBQ0NFUFRfUExBSU4pID09IDApKSB7CisJICAgIGNsZWFyX3ZmYXQgKCZ2ZmF0KTsKKwkgICAgY29udGludWU7CisJfQogCi0gICAgICAgIHZmYXRfcHJlc2VudCA9IGNoZWNrX3ZmYXQgKCZ2ZmF0LCBkaXJlbnQpOwotICAgICAgICBpZiAodmZhdF9zdGFydCkgewotICAgICAgICAgICAgKnZmYXRfc3RhcnQgPSAqZW50cnkgLSAxOwotICAgICAgICAgICAgaWYgKHZmYXRfcHJlc2VudCkgewotICAgICAgICAgICAgICAgICp2ZmF0X3N0YXJ0IC09IHZmYXQuc3ViZW50cmllczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCXZmYXRfcHJlc2VudCA9IGNoZWNrX3ZmYXQgKCZ2ZmF0LCBkaXJlbnQpOworCWlmICh2ZmF0X3N0YXJ0KSB7CisJICAgICp2ZmF0X3N0YXJ0ID0gKmVudHJ5IC0gMTsKKwkgICAgaWYgKHZmYXRfcHJlc2VudCkgeworCQkqdmZhdF9zdGFydCAtPSB2ZmF0LnN1YmVudHJpZXM7CisJICAgIH0KKwl9CiAKLSAgICAgICAgaWYgKGRpcmVudCAtPiBhdHRyICYgQVRUUl9WT0xVTUUpIHsKLSAgICAgICAgICAgIHN0cm5jcHkgKG5ld2ZpbGUsIGRpcmVudCAtPiBuYW1lLCA4KTsKLSAgICAgICAgICAgIG5ld2ZpbGUgWzhdID0gJ1wwJzsKLSAgICAgICAgICAgIHN0cm5jYXQgKG5ld2ZpbGUsIGRpcmVudCAtPiBleHQsIDMpOwotICAgICAgICAgICAgbmV3ZmlsZSBbMTFdID0gJ1wwJzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbnZfbmFtZSAoZGlyZW50IC0+IG5hbWUsIGRpcmVudCAtPiBleHQsIGRpcmVudCAtPiBDYXNlLCBuZXdmaWxlKTsKLSAgICAgICAgfQorCWlmIChkaXJlbnQgLT4gYXR0ciAmIEFUVFJfVk9MVU1FKSB7CisJICAgIHN0cm5jcHkgKG5ld2ZpbGUsIGRpcmVudCAtPiBuYW1lLCA4KTsKKwkgICAgbmV3ZmlsZSBbOF0gPSAnXDAnOworCSAgICBzdHJuY2F0IChuZXdmaWxlLCBkaXJlbnQgLT4gZXh0LCAzKTsKKwkgICAgbmV3ZmlsZSBbMTFdID0gJ1wwJzsKKwl9CisJZWxzZSB7CisJICAgIGNvbnZfbmFtZSAoZGlyZW50IC0+IG5hbWUsIGRpcmVudCAtPiBleHQsIGRpcmVudCAtPiBDYXNlLCBuZXdmaWxlKTsKKwl9CiAKLSAgICAgICAgaWYgKGZsYWdzICYgTUFUQ0hfQU5ZKSB7Ci0gICAgICAgICAgICBmb3VuZCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWlmIChmbGFncyAmIE1BVENIX0FOWSkgeworCSAgICBmb3VuZCA9IDE7CisJICAgIGJyZWFrOworCX0KIAotICAgICAgICBpZiAoKHZmYXRfcHJlc2VudCAmJiBtYXRjaCAodmZhdC5uYW1lLCBmaWxlbmFtZSkpIHx8Ci0gICAgICAgICAgICAobWF0Y2ggKG5ld2ZpbGUsIGZpbGVuYW1lKSkpIHsKLSAgICAgICAgICAgIGZvdW5kID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNsZWFyX3ZmYXQgKCZ2ZmF0KTsKKwlpZiAoKHZmYXRfcHJlc2VudCAmJiBtYXRjaCAodmZhdC5uYW1lLCBmaWxlbmFtZSkpIHx8CisJICAgIChtYXRjaCAobmV3ZmlsZSwgZmlsZW5hbWUpKSkgeworCSAgICBmb3VuZCA9IDE7CisJICAgIGJyZWFrOworCX0KKwljbGVhcl92ZmF0ICgmdmZhdCk7CiAgICAgfQogCiAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBET19PUEVOKSAmJiBmaWxlKSB7Ci0gICAgICAgICAgICBpZiAob3Blbl9maWxlIChmaWxlLCBkaXJlbnQpIDwgMCkgewotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChvdXRuYW1lKSB7Ci0gICAgICAgICAgICBpZiAodmZhdF9wcmVzZW50KSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5IChvdXRuYW1lLCB2ZmF0Lm5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5IChvdXRuYW1lLCBuZXdmaWxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKDApOyAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWlmICgoZmxhZ3MgJiBET19PUEVOKSAmJiBmaWxlKSB7CisJICAgIGlmIChvcGVuX2ZpbGUgKGZpbGUsIGRpcmVudCkgPCAwKSB7CisJCXJldHVybiAoLTEpOworCSAgICB9CisJfQorCWlmIChvdXRuYW1lKSB7CisJICAgIGlmICh2ZmF0X3ByZXNlbnQpIHsKKwkJc3RyY3B5IChvdXRuYW1lLCB2ZmF0Lm5hbWUpOworCSAgICB9CisJICAgIGVsc2UgeworCQlzdHJjcHkgKG91dG5hbWUsIG5ld2ZpbGUpOworCSAgICB9CisJfQorCXJldHVybiAoMCk7ICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgfSBlbHNlIHsKLSAgICAgICAgKmVudHJ5ID0gLTE7Ci0gICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgLyogRmlsZSBub3QgZm91bmQgICAgICAgICAgICAgICAgICAgICovCisJKmVudHJ5ID0gLTE7CisJcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAvKiBGaWxlIG5vdCBmb3VuZCAgICAgICAgICAgICAgICAgICAgKi8KICAgICB9CiB9CiAKQEAgLTE2OCwxNDcgKzE2OCwxNDcgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogc3RhdGljIGludCBkaXJfcmVhZCAoRnNfdCAqZnMsCi0gICAgICAgICAgICAgIFNsb3RfdCAqZGlyLAotICAgICAgICAgICAgICBEaXJlY3RvcnlfdCAqZGlyZW50LAotICAgICAgICAgICAgICBpbnQgbnVtLAotICAgICAgICAgICAgICBzdHJ1Y3QgdmZhdF9zdGF0ZSAqdikKKwkgICAgICBTbG90X3QgKmRpciwKKwkgICAgICBEaXJlY3RvcnlfdCAqZGlyZW50LAorCSAgICAgIGludCBudW0sCisJICAgICAgc3RydWN0IHZmYXRfc3RhdGUgKnYpCiB7CiAKICAgICAvKiByZWFkIHRoZSBkaXJlY3RvcnkgZW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAocmVhZF9maWxlIChmcywKLSAgICAgICAgICAgICAgICAgICBkaXIsCi0gICAgICAgICAgICAgICAgICAgKGNoYXIgKilkaXJlbnQsCi0gICAgICAgICAgICAgICAgICAgbnVtICogTURJUl9TSVpFLAotICAgICAgICAgICAgICAgICAgIE1ESVJfU0laRSkgIT0gTURJUl9TSVpFKSB7Ci0gICAgICAgIHJldHVybiAoLTEpOworCQkgICBkaXIsCisJCSAgIChjaGFyICopZGlyZW50LAorCQkgICBudW0gKiBNRElSX1NJWkUsCisJCSAgIE1ESVJfU0laRSkgIT0gTURJUl9TSVpFKSB7CisJcmV0dXJuICgtMSk7CiAgICAgfQogCiAgICAgaWYgKHYgJiYgKGRpcmVudCAtPiBhdHRyID09IEFUVFJfVlNFKSkgewotICAgICAgICBzdHJ1Y3QgdmZhdF9zdWJlbnRyeSAqdnNlOwotICAgICAgICB1bnNpZ25lZCBjaGFyIGlkLCBsYXN0X2ZsYWc7Ci0gICAgICAgIGNoYXIgKmM7CisJc3RydWN0IHZmYXRfc3ViZW50cnkgKnZzZTsKKwl1bnNpZ25lZCBjaGFyIGlkLCBsYXN0X2ZsYWc7CisJY2hhciAqYzsKIAotICAgICAgICB2c2UgPSAoc3RydWN0IHZmYXRfc3ViZW50cnkgKikgZGlyZW50OwotICAgICAgICBpZCA9IHZzZSAtPiBpZCAmIFZTRV9NQVNLOwotICAgICAgICBsYXN0X2ZsYWcgPSAodnNlIC0+IGlkICYgVlNFX0xBU1QpOwotICAgICAgICBpZiAoaWQgPiBNQVhfVkZBVF9TVUJFTlRSSUVTKSB7Ci0gICAgICAgICAgICAvKiBJbnZhbGlkIFZTRSBlbnRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgfQorCXZzZSA9IChzdHJ1Y3QgdmZhdF9zdWJlbnRyeSAqKSBkaXJlbnQ7CisJaWQgPSB2c2UgLT4gaWQgJiBWU0VfTUFTSzsKKwlsYXN0X2ZsYWcgPSAodnNlIC0+IGlkICYgVlNFX0xBU1QpOworCWlmIChpZCA+IE1BWF9WRkFUX1NVQkVOVFJJRVMpIHsKKwkgICAgLyogSW52YWxpZCBWU0UgZW50cnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCSAgICByZXR1cm4gKC0xKTsKKwl9CiAKIAotICAgICAgICAvKiBEZWNvZGUgVlNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBpZih2IC0+IHN1bSAhPSB2c2UgLT4gc3VtKSB7Ci0gICAgICAgICAgICBjbGVhcl92ZmF0ICh2KTsKLSAgICAgICAgICAgIHYgLT4gc3VtID0gdnNlIC0+IHN1bTsKLSAgICAgICAgfQorCS8qIERlY29kZSBWU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJaWYodiAtPiBzdW0gIT0gdnNlIC0+IHN1bSkgeworCSAgICBjbGVhcl92ZmF0ICh2KTsKKwkgICAgdiAtPiBzdW0gPSB2c2UgLT4gc3VtOworCX0KIAotICAgICAgICAKLSAgICAgICAgdiAtPiBzdGF0dXMgfD0gMSA8PCAoaWQgLSAxKTsKLSAgICAgICAgaWYgKGxhc3RfZmxhZykgewotICAgICAgICAgICAgdiAtPiBzdWJlbnRyaWVzID0gaWQ7Ci0gICAgICAgIH0KIAotICAgICAgICBjID0gJih2IC0+IG5hbWUgW1ZTRV9OQU1FTEVOICogKGlkIC0gMSldKTsKLSAgICAgICAgYyArPSB1bmljb2RlX3JlYWQgKHZzZS0+dGV4dDEsIGMsIFZTRTFTSVpFKTsKLSAgICAgICAgYyArPSB1bmljb2RlX3JlYWQgKHZzZS0+dGV4dDIsIGMsIFZTRTJTSVpFKTsKLSAgICAgICAgYyArPSB1bmljb2RlX3JlYWQgKHZzZS0+dGV4dDMsIGMsIFZTRTNTSVpFKTsKLQkJCi0gICAgICAgIGlmIChsYXN0X2ZsYWcpIHsKLSAgICAgICAgICAgICpjID0gJ1wwJzsJICAgICAgICAvKiBOdWxsIHRlcm1pbmF0ZSBsb25nIG5hbWUgICAgICAgICAgICAgICAgICAqLwotICAgICAgICB9Ci0gICAgICAgIAorCXYgLT4gc3RhdHVzIHw9IDEgPDwgKGlkIC0gMSk7CisJaWYgKGxhc3RfZmxhZykgeworCSAgICB2IC0+IHN1YmVudHJpZXMgPSBpZDsKKwl9CisKKwljID0gJih2IC0+IG5hbWUgW1ZTRV9OQU1FTEVOICogKGlkIC0gMSldKTsKKwljICs9IHVuaWNvZGVfcmVhZCAodnNlLT50ZXh0MSwgYywgVlNFMVNJWkUpOworCWMgKz0gdW5pY29kZV9yZWFkICh2c2UtPnRleHQyLCBjLCBWU0UyU0laRSk7CisJYyArPSB1bmljb2RlX3JlYWQgKHZzZS0+dGV4dDMsIGMsIFZTRTNTSVpFKTsKKworCWlmIChsYXN0X2ZsYWcpIHsKKwkgICAgKmMgPSAnXDAnOwkgICAgICAgIC8qIE51bGwgdGVybWluYXRlIGxvbmcgbmFtZSAgICAgICAgICAgICAgICAgICovCisJfQorCiAgICAgfQogICAgIHJldHVybiAoMCk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHVuaWNvZGVfcmVhZCAtLSAKKyAqIHVuaWNvZGVfcmVhZCAtLQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgaW50IHVuaWNvZGVfcmVhZCAoY2hhciAqaW4sIGNoYXIgKm91dCwgaW50IG51bSkKIHsKICAgICBpbnQgajsKLSAgICAKKwogICAgIGZvciAoaiA9IDA7IGogPCBudW07ICsraikgewotICAgICAgICBpZiAoaW4gWzFdKQotICAgICAgICAgICAgKm91dCA9ICdfJzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKm91dCA9IGluIFswXTsKLSAgICAgICAgb3V0ICsrOwotICAgICAgICBpbiArPSAyOworCWlmIChpbiBbMV0pCisJICAgICpvdXQgPSAnXyc7CisJZWxzZQorCSAgICAqb3V0ID0gaW4gWzBdOworCW91dCArKzsKKwlpbiArPSAyOwogICAgIH0KICAgICByZXR1cm4gbnVtOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBtYXRjaCAtLSAKKyAqIG1hdGNoIC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyBpbnQgbWF0Y2ggKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnApCiB7CiAKICAgICBmb3IgKDsgKnAgIT0gJ1wwJzsgKSB7Ci0gICAgICAgIGlmICh0b3VwcGVyICgqcykgIT0gdG91cHBlciAoKnApKSB7Ci0gICAgICAgICAgICByZXR1cm4gKDApOwotICAgICAgICB9Ci0gICAgICAgIHArKzsKLSAgICAgICAgcysrOworCWlmICh0b3VwcGVyICgqcykgIT0gdG91cHBlciAoKnApKSB7CisJICAgIHJldHVybiAoMCk7CisJfQorCXArKzsKKwlzKys7CiAgICAgfQotICAgIAorCiAgICAgaWYgKCpzICE9ICdcMCcpIHsKLSAgICAgICAgcmV0dXJuICgwKTsKKwlyZXR1cm4gKDApOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcmV0dXJuICgxKTsKKwlyZXR1cm4gKDEpOwogICAgIH0KIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHN1bV9zaG9ydG5hbWUgLS0gCisgKiBzdW1fc2hvcnRuYW1lIC0tCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHN1bV9zaG9ydG5hbWUgKGNoYXIgKm5hbWUpCiB7CiAgICAgdW5zaWduZWQgY2hhciBzdW07CiAgICAgaW50IGo7Ci0gICAgCisKICAgICBmb3IgKGogPSBzdW0gPSAwOyBqIDwgMTE7ICsraikgewotICAgICAgICBzdW0gPSAoKHN1bSAmIDEpID8gMHg4MCA6IDApICsgKHN1bSA+PiAxKSArCi0gICAgICAgICAgICAobmFtZSBbal0gPyBuYW1lIFtqXSA6ICcgJyk7CisJc3VtID0gKChzdW0gJiAxKSA/IDB4ODAgOiAwKSArIChzdW0gPj4gMSkgKworCSAgICAobmFtZSBbal0gPyBuYW1lIFtqXSA6ICcgJyk7CiAgICAgfQogICAgIHJldHVybiAoc3VtKTsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIGNoZWNrX3ZmYXQgLS0gCisgKiBjaGVja192ZmF0IC0tCiAgKiBSZXR1cm4gMSBpZiBsb25nIG5hbWUgaXMgdmFsaWQsIDAgZWxzZQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgaW50IGNoZWNrX3ZmYXQgKHN0cnVjdCB2ZmF0X3N0YXRlICp2LCBEaXJlY3RvcnlfdCAqZGlyKQogewogICAgIGNoYXIgbmFtZVsxMl07Ci0gICAgCisKICAgICBpZiAodiAtPiBzdWJlbnRyaWVzID09IDApIHsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAgICAgfQotICAgIAorCiAgICAgc3RybmNweSAobmFtZSwgZGlyIC0+IG5hbWUsIDgpOwogICAgIHN0cm5jcHkgKG5hbWUgKyA4LCBkaXIgLT4gZXh0LCAzKTsKICAgICBuYW1lIFsxMV0gPSAnXDAnOwotICAgIAorCiAgICAgaWYgKHYgLT4gc3VtICE9IHN1bV9zaG9ydG5hbWUgKG5hbWUpKSB7Ci0gICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogICAgIH0KLSAgICAKKwogICAgIGlmKCAodiAtPiBzdGF0dXMgJiAoKDEgPDwgdiAtPiBzdWJlbnRyaWVzKSAtIDEpKSAhPQotICAgICAgICAoMSA8PCB2IC0+IHN1YmVudHJpZXMpIC0gMSkgewotICAgICAgICByZXR1cm4gMDsKKwkoMSA8PCB2IC0+IHN1YmVudHJpZXMpIC0gMSkgeworCXJldHVybiAwOwogICAgIH0KICAgICB2LT5uYW1lIFtWU0VfTkFNRUxFTiAqIHYgLT4gc3ViZW50cmllc10gPSAwOwotICAgIAorCiAgICAgcmV0dXJuIDE7CiB9CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBjb252X25hbWUgLS0gCisgKiBjb252X25hbWUgLS0KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogc3RhdGljIGNoYXIgKmNvbnZfbmFtZSAoY2hhciAqbmFtZSwgY2hhciAqZXh0LCBjaGFyIENhc2UsIGNoYXIgKmFucykKQEAgLTMxOCwzNyArMzE4LDM3IEBACiAKICAgICBpID0gMDsKICAgICB3aGlsZSAoaSA8IDggJiYgbmFtZSBbaV0gIT0gJyAnICYmIG5hbWUgW2ldICE9ICdcMCcpIHsKLSAgICAgICAgdG5hbWUgW2ldID0gbmFtZSBbaV07Ci0gICAgICAgIGkrKzsKKwl0bmFtZSBbaV0gPSBuYW1lIFtpXTsKKwlpKys7CiAgICAgfQogICAgIHRuYW1lIFtpXSA9ICdcMCc7Ci0gICAgCisKICAgICBpZiAoQ2FzZSAmIEJBU0VDQVNFKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCA4ICYmIHRuYW1lIFtpXTsgaSsrKSB7Ci0gICAgICAgICAgICB0bmFtZSBbaV0gPSB0b2xvd2VyICh0bmFtZSBbaV0pOwotICAgICAgICB9CisJZm9yIChpID0gMDsgaSA8IDggJiYgdG5hbWUgW2ldOyBpKyspIHsKKwkgICAgdG5hbWUgW2ldID0gdG9sb3dlciAodG5hbWUgW2ldKTsKKwl9CiAgICAgfQogCiAgICAgaSA9IDA7CiAgICAgd2hpbGUgKGkgPCAzICYmIGV4dCBbaV0gIT0gJyAnICYmIGV4dCBbaV0gIT0gJ1wwJykgewotICAgICAgICB0ZXh0IFtpXSA9IGV4dCBbaV07Ci0gICAgICAgIGkrKzsKKwl0ZXh0IFtpXSA9IGV4dCBbaV07CisJaSsrOwogICAgIH0KICAgICB0ZXh0IFtpXSA9ICdcMCc7CiAKICAgICBpZiAoQ2FzZSAmIEVYVENBU0UpewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiB0ZXh0IFtpXTsgaSsrKSB7Ci0gICAgICAgICAgICB0ZXh0IFtpXSA9IHRvbG93ZXIgKHRleHQgW2ldKTsKLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCAzICYmIHRleHQgW2ldOyBpKyspIHsKKwkgICAgdGV4dCBbaV0gPSB0b2xvd2VyICh0ZXh0IFtpXSk7CisJfQogICAgIH0KIAogICAgIGlmICgqdGV4dCkgewotICAgICAgICBzdHJjcHkgKGFucywgdG5hbWUpOwotICAgICAgICBzdHJjYXQgKGFucywgIi4iKTsKLSAgICAgICAgc3RyY2F0IChhbnMsIHRleHQpOworCXN0cmNweSAoYW5zLCB0bmFtZSk7CisJc3RyY2F0IChhbnMsICIuIik7CisJc3RyY2F0IChhbnMsIHRleHQpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgc3RyY3B5KGFucywgdG5hbWUpOworCXN0cmNweShhbnMsIHRuYW1lKTsKICAgICB9CiAgICAgcmV0dXJuIChhbnMpOwogfQpkaWZmIC0tZ2l0IGEvZnMvamZmczIvamZmczJfMXBhc3MuYyBiL2ZzL2pmZnMyL2pmZnMyXzFwYXNzLmMKaW5kZXggYTVkOTU4My4uM2ZkNGU1MiAxMDA2NDQKLS0tIGEvZnMvamZmczIvamZmczJfMXBhc3MuYworKysgYi9mcy9qZmZzMi9qZmZzMl8xcGFzcy5jCkBAIC04MDIsNyArODAyLDcgQEAKIAkJcHV0TGFiZWxlZFdvcmQoIlx0YnVpbGRfbGlzdDogY29tcHIgPSAiLCBqTm9kZS0+Y29tcHIpOwogCQlwdXRMYWJlbGVkV29yZCgiXHRidWlsZF9saXN0OiB1c2VyY29tcHIgPSAiLCBqTm9kZS0+dXNlcmNvbXByKTsKIAkJcHV0TGFiZWxlZFdvcmQoIlx0YnVpbGRfbGlzdDogZmxhZ3MgPSAiLCBqTm9kZS0+ZmxhZ3MpOwotCQlwdXRMYWJlbGVkV29yZCgiXHRidWlsZF9saXN0OiBvZmZzZXQgPSAiLCBiLT5vZmZzZXQpOwkvLyBGSVhNRTogPyBbUlNdCisJCXB1dExhYmVsZWRXb3JkKCJcdGJ1aWxkX2xpc3Q6IG9mZnNldCA9ICIsIGItPm9mZnNldCk7CS8qIEZJWE1FOiA/IFtSU10gKi8KIAkJYiA9IGItPm5leHQ7CiAJfQogfQpAQCAtODMyLDcgKzgzMiw3IEBACiAJCXB1dExhYmVsZWRXb3JkKCJcdGJ1aWxkX2xpc3Q6IHR5cGUgPSAiLCBqRGlyLT50eXBlKTsKIAkJcHV0TGFiZWxlZFdvcmQoIlx0YnVpbGRfbGlzdDogbm9kZV9jcmMgPSAiLCBqRGlyLT5ub2RlX2NyYyk7CiAJCXB1dExhYmVsZWRXb3JkKCJcdGJ1aWxkX2xpc3Q6IG5hbWVfY3JjID0gIiwgakRpci0+bmFtZV9jcmMpOwotCQlwdXRMYWJlbGVkV29yZCgiXHRidWlsZF9saXN0OiBvZmZzZXQgPSAiLCBiLT5vZmZzZXQpOyAJLy8gRklYTUU6ID8gW1JTXQorCQlwdXRMYWJlbGVkV29yZCgiXHRidWlsZF9saXN0OiBvZmZzZXQgPSAiLCBiLT5vZmZzZXQpOyAJLyogRklYTUU6ID8gW1JTXSAqLwogCQliID0gYi0+bmV4dDsKIAl9CiB9CkBAIC05MzUsOSArOTM1LDYgQEAKIH0KIAogCi0KLQotCiBzdGF0aWMgdTMyCiBqZmZzMl8xcGFzc19maWxsX2luZm8oc3RydWN0IGJfbGlzdHMgKiBwTCwgc3RydWN0IGJfamZmczJfaW5mbyAqIHBpTCkKIHsKQEAgLTk2NSw3ICs5NjIsNiBAQAogfQogCiAKLQogc3RhdGljIHN0cnVjdCBiX2xpc3RzICoKIGpmZnMyX2dldF9saXN0KHN0cnVjdCBwYXJ0X2luZm8gKiBwYXJ0LCBjb25zdCBjaGFyICp3aG8pCiB7CkBAIC0xMDA1LDkgKzEwMDEsNiBAQAogfQogCiAKLQotCi0KIC8qIExvYWQgYSBmaWxlIGZyb20gZmxhc2ggaW50byBtZW1vcnkuIGZuYW1lIGNhbiBiZSBhIGZ1bGwgcGF0aCAqLwogdTMyCiBqZmZzMl8xcGFzc19sb2FkKGNoYXIgKmRlc3QsIHN0cnVjdCBwYXJ0X2luZm8gKiBwYXJ0LCBjb25zdCBjaGFyICpmbmFtZSkKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2pmZnMyX3ByaXZhdGUuaCBiL2ZzL2pmZnMyL2pmZnMyX3ByaXZhdGUuaAppbmRleCBjNmQ1ZmUzLi5kNTNlNTc2IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9qZmZzMl9wcml2YXRlLmgKKysrIGIvZnMvamZmczIvamZmczJfcHJpdmF0ZS5oCkBAIC00Miw0OCArNDIsNDggQEAKIGhkcl9jcmMoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSAqbm9kZSkKIHsKICNpZiAxCi0gICAgICAgIHUzMiBjcmMgPSBjcmMzMl9ub19jb21wKDAsICh1bnNpZ25lZCBjaGFyICopbm9kZSwgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpIC0gNCk7CisJdTMyIGNyYyA9IGNyYzMyX25vX2NvbXAoMCwgKHVuc2lnbmVkIGNoYXIgKilub2RlLCBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkgLSA0KTsKICNlbHNlCiAJLyogd2hhdCdzIHRoZSBzZW1hbnRpY3Mgb2YgdGhpcz8gd2h5IGlzIHRoaXMgaGVyZT8gKi8KLSAgICAgICAgdTMyIGNyYyA9IGNyYzMyX25vX2NvbXAofjAsICh1bnNpZ25lZCBjaGFyICopbm9kZSwgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpIC0gNCk7CisJdTMyIGNyYyA9IGNyYzMyX25vX2NvbXAofjAsICh1bnNpZ25lZCBjaGFyICopbm9kZSwgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpIC0gNCk7CiAKLSAgICAgICAgY3JjIF49IH4wOworCWNyYyBePSB+MDsKICNlbmRpZgotICAgICAgICBpZiAobm9kZS0+aGRyX2NyYyAhPSBjcmMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQorCWlmIChub2RlLT5oZHJfY3JjICE9IGNyYykgeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gMTsKKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBkaXJlbnRfY3JjKHN0cnVjdCBqZmZzMl9yYXdfZGlyZW50ICpub2RlKQogewotICAgICAgICBpZiAobm9kZS0+bm9kZV9jcmMgIT0gY3JjMzJfbm9fY29tcCgwLCAodW5zaWduZWQgY2hhciAqKW5vZGUsIHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCkgLSA4KSkgewotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9CisJaWYgKG5vZGUtPm5vZGVfY3JjICE9IGNyYzMyX25vX2NvbXAoMCwgKHVuc2lnbmVkIGNoYXIgKilub2RlLCBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQpIC0gOCkpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDE7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIGludAogZGlyZW50X25hbWVfY3JjKHN0cnVjdCBqZmZzMl9yYXdfZGlyZW50ICpub2RlKQogewotICAgICAgICBpZiAobm9kZS0+bmFtZV9jcmMgIT0gY3JjMzJfbm9fY29tcCgwLCAodW5zaWduZWQgY2hhciAqKSYobm9kZS0+bmFtZSksIG5vZGUtPm5zaXplKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9CisJaWYgKG5vZGUtPm5hbWVfY3JjICE9IGNyYzMyX25vX2NvbXAoMCwgKHVuc2lnbmVkIGNoYXIgKikmKG5vZGUtPm5hbWUpLCBub2RlLT5uc2l6ZSkpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDE7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIGludAogaW5vZGVfY3JjKHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKm5vZGUpCiB7Ci0gICAgICAgIGlmIChub2RlLT5ub2RlX2NyYyAhPSBjcmMzMl9ub19jb21wKDAsICh1bnNpZ25lZCBjaGFyICopbm9kZSwgc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUpIC0gOCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQorCWlmIChub2RlLT5ub2RlX2NyYyAhPSBjcmMzMl9ub19jb21wKDAsICh1bnNpZ25lZCBjaGFyICopbm9kZSwgc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUpIC0gOCkpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDE7CisJfQogfQogCiAjZW5kaWYgLyogamZmczJfcHJpdmF0ZS5oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlLzQwNV9kaW1tLmggYi9pbmNsdWRlLzQwNV9kaW1tLmgKaW5kZXggYjJiYmU4Ny4uMTAzYTM0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS80MDVfZGltbS5oCisrKyBiL2luY2x1ZGUvNDA1X2RpbW0uaApAQCAtMiw0ICsyLDMgQEAKICNkZWZpbmUgXzQwNV9kaW1tX2hfCiBsb25nIGludCB3YWxudXRfZGltbSh2b2lkKTsKICNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlLzQwNV9tYWwuaCBiL2luY2x1ZGUvNDA1X21hbC5oCmluZGV4IDQ1OTkyNGIuLjAyMDg3NGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvNDA1X21hbC5oCisrKyBiL2luY2x1ZGUvNDA1X21hbC5oCkBAIC0xMDMsNCArMTAzLDMgQEAKIH0gbWFsX2Rlc2NfdDsKIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvNDA1Z3BfZW5ldC5oIGIvaW5jbHVkZS80MDVncF9lbmV0LmgKaW5kZXggNTJhMmYzMy4uMjI0NDUyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS80MDVncF9lbmV0LmgKKysrIGIvaW5jbHVkZS80MDVncF9lbmV0LmgKQEAgLTIzNiw4ICsyMzYsNiBAQAogI2RlZmluZSBFTUFDX1JYX0VSUk9SUwkJMHgwM0ZGCiAKIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGRldmljZSB0YWJsZS4KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9pbmNsdWRlLzQ0MF9pMmMuaCBiL2luY2x1ZGUvNDQwX2kyYy5oCmluZGV4IGQwNDk3NjYuLmIwYWM1OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvNDQwX2kyYy5oCisrKyBiL2luY2x1ZGUvNDQwX2kyYy5oCkBAIC0xLDYgKzEsMyBAQAotCi0KLQogI2lmbmRlZiBfNDQwX2kyY19oXwogI2RlZmluZSBfNDQwX2kyY19oXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL1NBLTExMDAuaCBiL2luY2x1ZGUvU0EtMTEwMC5oCmluZGV4IGYxZjk2MjUuLjk5ODU3ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvU0EtMTEwMC5oCisrKyBiL2luY2x1ZGUvU0EtMTEwMC5oCkBAIC01NCwxMyArNTQsMTMgQEAKIAogI2RlZmluZSBTdE1lbUJua1NwCU1lbUJua1NwCS8qIFN0YXRpYyBNZW1vcnkgQmFuayBTcGFjZSBbYnl0ZV0gKi8KICNkZWZpbmUgU3RNZW1CbmswU3AJU3RNZW1CbmtTcAkvKiBTdGF0aWMgTWVtb3J5IEJhbmsgMCBTcGFjZSAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFtieXRlXSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogW2J5dGVdICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTdE1lbUJuazFTcAlTdE1lbUJua1NwCS8qIFN0YXRpYyBNZW1vcnkgQmFuayAxIFNwYWNlICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogW2J5dGVdICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBbYnl0ZV0gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFN0TWVtQm5rMlNwCVN0TWVtQm5rU3AJLyogU3RhdGljIE1lbW9yeSBCYW5rIDIgU3BhY2UgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBbYnl0ZV0gICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIFtieXRlXSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU3RNZW1CbmszU3AJU3RNZW1CbmtTcAkvKiBTdGF0aWMgTWVtb3J5IEJhbmsgMyBTcGFjZSAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFtieXRlXSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogW2J5dGVdICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAjZGVmaW5lIERSQU1CbmtTcAlNZW1CbmtTcAkvKiBEUkFNIEJhbmsgU3BhY2UgW2J5dGVdICAgICAgICAgICovCiAjZGVmaW5lIERSQU1CbmswU3AJRFJBTUJua1NwCS8qIERSQU0gQmFuayAwIFNwYWNlIFtieXRlXSAgICAgICAgKi8KQEAgLTcxLDcgKzcxLDcgQEAKICNkZWZpbmUgWmVyb01lbVNwCU1lbUJua1NwCS8qIFplcm8gTWVtb3J5IGJhbmsgU3BhY2UgW2J5dGVdICAgKi8KIAogI2RlZmluZSBfU3RNZW1CbmsoTmIpCSAgICAgICAgCS8qIFN0YXRpYyBNZW1vcnkgQmFuayBbMC4uM10gICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwMDAwMDAwMCArIChOYikqU3RNZW1CbmtTcCkKKwkJCSgweDAwMDAwMDAwICsgKE5iKSpTdE1lbUJua1NwKQogI2RlZmluZSBfU3RNZW1CbmswCV9TdE1lbUJuayAoMCkJLyogU3RhdGljIE1lbW9yeSBCYW5rIDAgICAgICAgICAgICAqLwogI2RlZmluZSBfU3RNZW1CbmsxCV9TdE1lbUJuayAoMSkJLyogU3RhdGljIE1lbW9yeSBCYW5rIDEgICAgICAgICAgICAqLwogI2RlZmluZSBfU3RNZW1CbmsyCV9TdE1lbUJuayAoMikJLyogU3RhdGljIE1lbW9yeSBCYW5rIDIgICAgICAgICAgICAqLwpAQCAtODAsNyArODAsNyBAQAogI2lmIExBTkdVQUdFID09IEMKIHR5cGVkZWYgUXVhZCAgICAJU3RNZW1CbmtUeXBlIFtTdE1lbUJua1NwL3NpemVvZiAoUXVhZCldIDsKICNkZWZpbmUgU3RNZW1CbmsJICAgICAgICAJLyogU3RhdGljIE1lbW9yeSBCYW5rIFswLi4zXSAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoU3RNZW1CbmtUeXBlICopIGlvX3AydiAoX1N0TWVtQm5rICgwKSkpCisJCQkoKFN0TWVtQm5rVHlwZSAqKSBpb19wMnYgKF9TdE1lbUJuayAoMCkpKQogI2RlZmluZSBTdE1lbUJuazAJKFN0TWVtQm5rIFswXSkJLyogU3RhdGljIE1lbW9yeSBCYW5rIDAgICAgICAgICAgICAqLwogI2RlZmluZSBTdE1lbUJuazEJKFN0TWVtQm5rIFsxXSkJLyogU3RhdGljIE1lbW9yeSBCYW5rIDEgICAgICAgICAgICAqLwogI2RlZmluZSBTdE1lbUJuazIJKFN0TWVtQm5rIFsyXSkJLyogU3RhdGljIE1lbW9yeSBCYW5rIDIgICAgICAgICAgICAqLwpAQCAtODgsNyArODgsNyBAQAogI2VuZGlmIC8qIExBTkdVQUdFID09IEMgKi8KIAogI2RlZmluZSBfRFJBTUJuayhOYikJICAgICAgICAJLyogRFJBTSBCYW5rIFswLi4zXSAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweEMwMDAwMDAwICsgKE5iKSpEUkFNQm5rU3ApCisJCQkoMHhDMDAwMDAwMCArIChOYikqRFJBTUJua1NwKQogI2RlZmluZSBfRFJBTUJuazAJX0RSQU1CbmsgKDApCS8qIERSQU0gQmFuayAwICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0RSQU1CbmsxCV9EUkFNQm5rICgxKQkvKiBEUkFNIEJhbmsgMSAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EUkFNQm5rMglfRFJBTUJuayAoMikJLyogRFJBTSBCYW5rIDIgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtOTcsNyArOTcsNyBAQAogI2lmIExBTkdVQUdFID09IEMKIHR5cGVkZWYgUXVhZCAgICAJRFJBTUJua1R5cGUgW0RSQU1CbmtTcC9zaXplb2YgKFF1YWQpXSA7CiAjZGVmaW5lIERSQU1CbmsgCSAgICAgICAgCS8qIERSQU0gQmFuayBbMC4uM10gICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKERSQU1CbmtUeXBlICopIGlvX3AydiAoX0RSQU1CbmsgKDApKSkKKwkJCSgoRFJBTUJua1R5cGUgKikgaW9fcDJ2IChfRFJBTUJuayAoMCkpKQogI2RlZmluZSBEUkFNQm5rMAkoRFJBTUJuayBbMF0pCS8qIERSQU0gQmFuayAwICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgRFJBTUJuazEJKERSQU1CbmsgWzFdKQkvKiBEUkFNIEJhbmsgMSAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIERSQU1CbmsyCShEUkFNQm5rIFsyXSkJLyogRFJBTSBCYW5rIDIgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTA5LDcgKzEwOSw3IEBACiAjaWYgTEFOR1VBR0UgPT0gQwogdHlwZWRlZiBRdWFkICAgIAlaZXJvTWVtVHlwZSBbWmVyb01lbVNwL3NpemVvZiAoUXVhZCldIDsKICNkZWZpbmUgWmVyb01lbSAJICAgICAgICAJLyogWmVybyBNZW1vcnkgYmFuayAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKChaZXJvTWVtVHlwZSAqKSBpb19wMnYgKF9aZXJvTWVtKSkpCisJCQkoKigoWmVyb01lbVR5cGUgKikgaW9fcDJ2IChfWmVyb01lbSkpKQogI2VuZGlmIC8qIExBTkdVQUdFID09IEMgKi8KIAogCkBAIC0xMzQsMTIgKzEzNCwxMiBAQAogI2RlZmluZSBQQ01DSUExTWVtU3AJUENNQ0lBTWVtU3AJLyogUENNQ0lBIDEgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAqLwogCiAjZGVmaW5lIF9QQ01DSUEoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgyMDAwMDAwMCArIChOYikqUENNQ0lBU3ApCisJCQkoMHgyMDAwMDAwMCArIChOYikqUENNQ0lBU3ApCiAjZGVmaW5lIF9QQ01DSUFJTyhOYikJX1BDTUNJQSAoTmIpCS8qIFBDTUNJQSBJL08gWzAuLjFdICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX1BDTUNJQUF0dHIoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBBdHRyaWJ1dGUgWzAuLjFdICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoX1BDTUNJQSAoTmIpICsgMipQQ01DSUFQcnRTcCkKKwkJCShfUENNQ0lBIChOYikgKyAyKlBDTUNJQVBydFNwKQogI2RlZmluZSBfUENNQ0lBTWVtKE5iKQkgICAgICAgIAkvKiBQQ01DSUEgTWVtb3J5IFswLi4xXSAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKF9QQ01DSUEgKE5iKSArIDMqUENNQ0lBUHJ0U3ApCisJCQkoX1BDTUNJQSAoTmIpICsgMypQQ01DSUFQcnRTcCkKIAogI2RlZmluZSBfUENNQ0lBMAlfUENNQ0lBICgwKQkvKiBQQ01DSUEgMCAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9QQ01DSUEwSU8JX1BDTUNJQUlPICgwKQkvKiBQQ01DSUEgMCBJL08gICAgICAgICAgICAgICAgICAgICovCkBAIC0xNTcsMjIgKzE1NywyMiBAQAogdHlwZWRlZiBQQ01DSUFQcnRUeXBlCVBDTUNJQVR5cGUgW1BDTUNJQVNwL1BDTUNJQVBydFNwXSA7CiAKICNkZWZpbmUgUENNQ0lBMCAJICAgICAgICAJLyogUENNQ0lBIDAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKChQQ01DSUFUeXBlICopIGlvX3AydiAoX1BDTUNJQTApKSkKKwkJCSgqKChQQ01DSUFUeXBlICopIGlvX3AydiAoX1BDTUNJQTApKSkKICNkZWZpbmUgUENNQ0lBMElPCSAgICAgICAgCS8qIFBDTUNJQSAwIEkvTyAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigoUENNQ0lBUHJ0VHlwZSAqKSBpb19wMnYgKF9QQ01DSUEwSU8pKSkKKwkJCSgqKChQQ01DSUFQcnRUeXBlICopIGlvX3AydiAoX1BDTUNJQTBJTykpKQogI2RlZmluZSBQQ01DSUEwQXR0cgkgICAgICAgIAkvKiBQQ01DSUEgMCBBdHRyaWJ1dGUgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKFBDTUNJQVBydFR5cGUgKikgaW9fcDJ2IChfUENNQ0lBMEF0dHIpKSkKKwkJCSgqKChQQ01DSUFQcnRUeXBlICopIGlvX3AydiAoX1BDTUNJQTBBdHRyKSkpCiAjZGVmaW5lIFBDTUNJQTBNZW0JICAgICAgICAJLyogUENNQ0lBIDAgTWVtb3J5ICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKChQQ01DSUFQcnRUeXBlICopIGlvX3AydiAoX1BDTUNJQTBNZW0pKSkKKwkJCSgqKChQQ01DSUFQcnRUeXBlICopIGlvX3AydiAoX1BDTUNJQTBNZW0pKSkKIAogI2RlZmluZSBQQ01DSUExIAkgICAgICAgIAkvKiBQQ01DSUEgMSAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKFBDTUNJQVR5cGUgKikgaW9fcDJ2IChfUENNQ0lBMSkpKQorCQkJKCooKFBDTUNJQVR5cGUgKikgaW9fcDJ2IChfUENNQ0lBMSkpKQogI2RlZmluZSBQQ01DSUExSU8JICAgICAgICAJLyogUENNQ0lBIDEgSS9PICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKChQQ01DSUFQcnRUeXBlICopIGlvX3AydiAoX1BDTUNJQTFJTykpKQorCQkJKCooKFBDTUNJQVBydFR5cGUgKikgaW9fcDJ2IChfUENNQ0lBMUlPKSkpCiAjZGVmaW5lIFBDTUNJQTFBdHRyCSAgICAgICAgCS8qIFBDTUNJQSAxIEF0dHJpYnV0ZSAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigoUENNQ0lBUHJ0VHlwZSAqKSBpb19wMnYgKF9QQ01DSUExQXR0cikpKQorCQkJKCooKFBDTUNJQVBydFR5cGUgKikgaW9fcDJ2IChfUENNQ0lBMUF0dHIpKSkKICNkZWZpbmUgUENNQ0lBMU1lbQkgICAgICAgIAkvKiBQQ01DSUEgMSBNZW1vcnkgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKFBDTUNJQVBydFR5cGUgKikgaW9fcDJ2IChfUENNQ0lBMU1lbSkpKQorCQkJKCooKFBDTUNJQVBydFR5cGUgKikgaW9fcDJ2IChfUENNQ0lBMU1lbSkpKQogCiAjZW5kaWYgLyogTEFOR1VBR0UgPT0gQyAqLwogCkBAIC0yMTUsODEgKzIxNSw4MSBAQAogI2RlZmluZSBfU2VyMFVEQ0NSCTB4ODAwMDAwMDAJLyogU2VyLiBwb3J0IDAgVURDIENvbnRyb2wgUmVnLiAgICAqLwogI2RlZmluZSBfU2VyMFVEQ0FSCTB4ODAwMDAwMDQJLyogU2VyLiBwb3J0IDAgVURDIEFkZHJlc3MgUmVnLiAgICAqLwogI2RlZmluZSBfU2VyMFVEQ09NUAkweDgwMDAwMDA4CS8qIFNlci4gcG9ydCAwIFVEQyBPdXRwdXQgTWF4aW11bSAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogUGFja2V0IHNpemUgcmVnLiAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBQYWNrZXQgc2l6ZSByZWcuICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9TZXIwVURDSU1QCTB4ODAwMDAwMEMJLyogU2VyLiBwb3J0IDAgVURDIElucHV0IE1heGltdW0gICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBQYWNrZXQgc2l6ZSByZWcuICAgICAgICAgICAgICAgICovCisJCQkJCS8qIFBhY2tldCBzaXplIHJlZy4gICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX1NlcjBVRENDUzAJMHg4MDAwMDAxMAkvKiBTZXIuIHBvcnQgMCBVREMgQ29udHJvbC9TdGF0dXMgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gZW5kLXBvaW50IDAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcmVnLiBlbmQtcG9pbnQgMCAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfU2VyMFVEQ0NTMQkweDgwMDAwMDE0CS8qIFNlci4gcG9ydCAwIFVEQyBDb250cm9sL1N0YXR1cyAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBlbmQtcG9pbnQgMSAob3V0cHV0KSAgICAgICAqLworCQkJCQkvKiByZWcuIGVuZC1wb2ludCAxIChvdXRwdXQpICAgICAgICovCiAjZGVmaW5lIF9TZXIwVURDQ1MyCTB4ODAwMDAwMTgJLyogU2VyLiBwb3J0IDAgVURDIENvbnRyb2wvU3RhdHVzICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIGVuZC1wb2ludCAyIChpbnB1dCkgICAgICAgICovCisJCQkJCS8qIHJlZy4gZW5kLXBvaW50IDIgKGlucHV0KSAgICAgICAgKi8KICNkZWZpbmUgX1NlcjBVRENEMAkweDgwMDAwMDFDCS8qIFNlci4gcG9ydCAwIFVEQyBEYXRhIHJlZy4gICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogZW5kLXBvaW50IDAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBlbmQtcG9pbnQgMCAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9TZXIwVURDV0MJMHg4MDAwMDAyMAkvKiBTZXIuIHBvcnQgMCBVREMgV3JpdGUgQ291bnQgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gZW5kLXBvaW50IDAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcmVnLiBlbmQtcG9pbnQgMCAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfU2VyMFVEQ0RSCTB4ODAwMDAwMjgJLyogU2VyLiBwb3J0IDAgVURDIERhdGEgUmVnLiAgICAgICAqLwogI2RlZmluZSBfU2VyMFVEQ1NSCTB4ODAwMDAwMzAJLyogU2VyLiBwb3J0IDAgVURDIFN0YXR1cyBSZWcuICAgICAqLwogCiAjaWYgTEFOR1VBR0UgPT0gQwogI2RlZmluZSBTZXIwVURDQ1IJICAgICAgICAJLyogU2VyLiBwb3J0IDAgVURDIENvbnRyb2wgUmVnLiAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjBVRENDUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMFVEQ0NSKSkpCiAjZGVmaW5lIFNlcjBVRENBUgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMCBVREMgQWRkcmVzcyBSZWcuICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMFVEQ0FSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIwVURDQVIpKSkKICNkZWZpbmUgU2VyMFVEQ09NUAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMCBVREMgT3V0cHV0IE1heGltdW0gICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogUGFja2V0IHNpemUgcmVnLiAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjBVRENPTVApKSkKKwkJCQkJLyogUGFja2V0IHNpemUgcmVnLiAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIwVURDT01QKSkpCiAjZGVmaW5lIFNlcjBVRENJTVAJICAgICAgICAJLyogU2VyLiBwb3J0IDAgVURDIElucHV0IE1heGltdW0gICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFBhY2tldCBzaXplIHJlZy4gICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIwVURDSU1QKSkpCisJCQkJCS8qIFBhY2tldCBzaXplIHJlZy4gICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMFVEQ0lNUCkpKQogI2RlZmluZSBTZXIwVURDQ1MwCSAgICAgICAgCS8qIFNlci4gcG9ydCAwIFVEQyBDb250cm9sL1N0YXR1cyAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIGVuZC1wb2ludCAwICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMFVEQ0NTMCkpKQorCQkJCQkvKiByZWcuIGVuZC1wb2ludCAwICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjBVRENDUzApKSkKICNkZWZpbmUgU2VyMFVEQ0NTMQkgICAgICAgIAkvKiBTZXIuIHBvcnQgMCBVREMgQ29udHJvbC9TdGF0dXMgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBlbmQtcG9pbnQgMSAob3V0cHV0KSAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjBVRENDUzEpKSkKKwkJCQkJLyogcmVnLiBlbmQtcG9pbnQgMSAob3V0cHV0KSAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIwVURDQ1MxKSkpCiAjZGVmaW5lIFNlcjBVRENDUzIJICAgICAgICAJLyogU2VyLiBwb3J0IDAgVURDIENvbnRyb2wvU3RhdHVzICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gZW5kLXBvaW50IDIgKGlucHV0KSAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIwVURDQ1MyKSkpCisJCQkJCS8qIHJlZy4gZW5kLXBvaW50IDIgKGlucHV0KSAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMFVEQ0NTMikpKQogI2RlZmluZSBTZXIwVURDRDAJICAgICAgICAJLyogU2VyLiBwb3J0IDAgVURDIERhdGEgcmVnLiAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGVuZC1wb2ludCAwICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIwVURDRDApKSkKKwkJCQkJLyogZW5kLXBvaW50IDAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIwVURDRDApKSkKICNkZWZpbmUgU2VyMFVEQ1dDCSAgICAgICAgCS8qIFNlci4gcG9ydCAwIFVEQyBXcml0ZSBDb3VudCAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIGVuZC1wb2ludCAwICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMFVEQ1dDKSkpCisJCQkJCS8qIHJlZy4gZW5kLXBvaW50IDAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMFVEQ1dDKSkpCiAjZGVmaW5lIFNlcjBVRENEUgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMCBVREMgRGF0YSBSZWcuICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMFVEQ0RSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIwVURDRFIpKSkKICNkZWZpbmUgU2VyMFVEQ1NSCSAgICAgICAgCS8qIFNlci4gcG9ydCAwIFVEQyBTdGF0dXMgUmVnLiAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIwVURDU1IpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjBVRENTUikpKQogI2VuZGlmIC8qIExBTkdVQUdFID09IEMgKi8KIAogI2RlZmluZSBVRENDUl9VREQJMHgwMDAwMDAwMQkvKiBVREMgRGlzYWJsZSAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFVEQ0NSX1VEQQkweDAwMDAwMDAyCS8qIFVEQyBBY3RpdmUgKHJlYWQpICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVURDQ1JfUkVTSU0JMHgwMDAwMDAwNAkvKiBSZXN1bWUgSW50ZXJydXB0IE1hc2ssIHBlciBlcnJhdGEgKi8KICNkZWZpbmUgVURDQ1JfRUlNCTB4MDAwMDAwMDgJLyogRW5kLXBvaW50IDAgSW50ZXJydXB0IE1hc2sgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoZGlzYWJsZSkgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIChkaXNhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVURDQ1JfUklNCTB4MDAwMDAwMTAJLyogUmVjZWl2ZSBJbnRlcnJ1cHQgTWFzayAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoZGlzYWJsZSkgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIChkaXNhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVURDQ1JfVElNCTB4MDAwMDAwMjAJLyogVHJhbnNtaXQgSW50ZXJydXB0IE1hc2sgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoZGlzYWJsZSkgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIChkaXNhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVURDQ1JfU1JNCTB4MDAwMDAwNDAJLyogU3VzcGVuZC9SZXN1bWUgaW50ZXJydXB0IE1hc2sgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoZGlzYWJsZSkgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIChkaXNhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVURDQ1JfU1VTSU0JVURDQ1JfU1JNCS8qIFBlciBlcnJhdGEsIFNSTSBqdXN0IG1hc2tzIHN1c3BlbmQgKi8KICNkZWZpbmUgVURDQ1JfUkVNCTB4MDAwMDAwODAJLyogUkVzZXQgaW50ZXJydXB0IE1hc2sgKGRpc2FibGUpICAqLwogCiAjZGVmaW5lIFVEQ0FSX0FERAlGbGQgKDcsIDApCS8qIGZ1bmN0aW9uIEFERHJlc3MgICAgICAgICAgICAgICAgKi8KIAogI2RlZmluZSBVRENPTVBfT1VUTUFYUAlGbGQgKDgsIDApCS8qIE9VVHB1dCBNQVhpbXVtIFBhY2tldCBzaXplIC0gMSAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogW2J5dGVdICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBbYnl0ZV0gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFVEQ09NUF9PdXRNYXhQa3QoU2l6ZSkgIAkvKiBPdXRwdXQgTWF4aW11bSBQYWNrZXQgc2l6ZSAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogWzEuLjI1NiBieXRlXSAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKFNpemUpIC0gMSkgPDwgRlNoZnQgKFVEQ09NUF9PVVRNQVhQKSkKKwkJCQkJLyogWzEuLjI1NiBieXRlXSAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKChTaXplKSAtIDEpIDw8IEZTaGZ0IChVRENPTVBfT1VUTUFYUCkpCiAKICNkZWZpbmUgVURDSU1QX0lOTUFYUAlGbGQgKDgsIDApCS8qIElOcHV0IE1BWGltdW0gUGFja2V0IHNpemUgLSAxICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogW2J5dGVdICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBbYnl0ZV0gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFVEQ0lNUF9Jbk1heFBrdChTaXplKSAgIAkvKiBJbnB1dCBNYXhpbXVtIFBhY2tldCBzaXplICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogWzEuLjI1NiBieXRlXSAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKFNpemUpIC0gMSkgPDwgRlNoZnQgKFVEQ0lNUF9JTk1BWFApKQorCQkJCQkvKiBbMS4uMjU2IGJ5dGVdICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgoKFNpemUpIC0gMSkgPDwgRlNoZnQgKFVEQ0lNUF9JTk1BWFApKQogCiAjZGVmaW5lIFVEQ0NTMF9PUFIJMHgwMDAwMDAwMQkvKiBPdXRwdXQgUGFja2V0IFJlYWR5IChyZWFkKSAgICAgICovCiAjZGVmaW5lIFVEQ0NTMF9JUFIJMHgwMDAwMDAwMgkvKiBJbnB1dCBQYWNrZXQgUmVhZHkgICAgICAgICAgICAgICovCkBAIC0yOTgsMTEgKzI5OCwxMSBAQAogI2RlZmluZSBVRENDUzBfREUJMHgwMDAwMDAxMAkvKiBEYXRhIEVuZCAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFVEQ0NTMF9TRQkweDAwMDAwMDIwCS8qIFNldHVwIEVuZCAocmVhZCkgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVURDQ1MwX1NPCTB4MDAwMDAwNDAJLyogU2VydmljZWQgT3V0cHV0IHBhY2tldCByZWFkeSAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAod3JpdGUpICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qICh3cml0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVURDQ1MwX1NTRQkweDAwMDAwMDgwCS8qIFNlcnZpY2VkIFNldHVwIEVuZCAod3JpdGUpICAgICAgKi8KIAogI2RlZmluZSBVRENDUzFfUkZTCTB4MDAwMDAwMDEJLyogUmVjZWl2ZSBGSUZPIDEyLWJ5dGVzIG9yIG1vcmUgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAgICAgICovCisJCQkJCS8qIFNlcnZpY2UgcmVxdWVzdCAocmVhZCkgICAgICAgICAgKi8KICNkZWZpbmUgVURDQ1MxX1JQQwkweDAwMDAwMDAyCS8qIFJlY2VpdmUgUGFja2V0IENvbXBsZXRlICAgICAgICAgKi8KICNkZWZpbmUgVURDQ1MxX1JQRQkweDAwMDAwMDA0CS8qIFJlY2VpdmUgUGFja2V0IEVycm9yIChyZWFkKSAgICAgKi8KICNkZWZpbmUgVURDQ1MxX1NTVAkweDAwMDAwMDA4CS8qIFNlbnQgU1RhbGwgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTMxMCw3ICszMTAsNyBAQAogI2RlZmluZSBVRENDUzFfUk5FCTB4MDAwMDAwMjAJLyogUmVjZWl2ZSBGSUZPIE5vdCBFbXB0eSAocmVhZCkgICAqLwogCiAjZGVmaW5lIFVEQ0NTMl9URlMJMHgwMDAwMDAwMQkvKiBUcmFuc21pdCBGSUZPIDgtYnl0ZXMgb3IgbGVzcyAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFNlcnZpY2UgcmVxdWVzdCAocmVhZCkgICAgICAgICAgKi8KKwkJCQkJLyogU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgICAgICAqLwogI2RlZmluZSBVRENDUzJfVFBDCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgUGFja2V0IENvbXBsZXRlICAgICAgICAqLwogI2RlZmluZSBVRENDUzJfVFBFCTB4MDAwMDAwMDQJLyogVHJhbnNtaXQgUGFja2V0IEVycm9yIChyZWFkKSAgICAqLwogI2RlZmluZSBVRENDUzJfVFVSCTB4MDAwMDAwMDgJLyogVHJhbnNtaXQgRklGTyBVbmRlci1SdW4gICAgICAgICAqLwpAQCAtNDA4LDIxICs0MDgsMjEgQEAKICAqLwogCiAjZGVmaW5lIF9VVENSMChOYikJICAgICAgICAJLyogVUFSVCBDb250cm9sIFJlZy4gMCBbMS4uM10gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDgwMDEwMDAwICsgKChOYikgLSAxKSoweDAwMDIwMDAwKQorCQkJKDB4ODAwMTAwMDAgKyAoKE5iKSAtIDEpKjB4MDAwMjAwMDApCiAjZGVmaW5lIF9VVENSMShOYikJICAgICAgICAJLyogVUFSVCBDb250cm9sIFJlZy4gMSBbMS4uM10gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDgwMDEwMDA0ICsgKChOYikgLSAxKSoweDAwMDIwMDAwKQorCQkJKDB4ODAwMTAwMDQgKyAoKE5iKSAtIDEpKjB4MDAwMjAwMDApCiAjZGVmaW5lIF9VVENSMihOYikJICAgICAgICAJLyogVUFSVCBDb250cm9sIFJlZy4gMiBbMS4uM10gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDgwMDEwMDA4ICsgKChOYikgLSAxKSoweDAwMDIwMDAwKQorCQkJKDB4ODAwMTAwMDggKyAoKE5iKSAtIDEpKjB4MDAwMjAwMDApCiAjZGVmaW5lIF9VVENSMyhOYikJICAgICAgICAJLyogVUFSVCBDb250cm9sIFJlZy4gMyBbMS4uM10gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDgwMDEwMDBDICsgKChOYikgLSAxKSoweDAwMDIwMDAwKQorCQkJKDB4ODAwMTAwMEMgKyAoKE5iKSAtIDEpKjB4MDAwMjAwMDApCiAjZGVmaW5lIF9VVENSNChOYikJICAgICAgICAJLyogVUFSVCBDb250cm9sIFJlZy4gNCBbMl0gICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDgwMDEwMDEwICsgKChOYikgLSAxKSoweDAwMDIwMDAwKQorCQkJKDB4ODAwMTAwMTAgKyAoKE5iKSAtIDEpKjB4MDAwMjAwMDApCiAjZGVmaW5lIF9VVERSKE5iKQkgICAgICAgIAkvKiBVQVJUIERhdGEgUmVnLiBbMS4uM10gICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDB4ODAwMTAwMTQgKyAoKE5iKSAtIDEpKjB4MDAwMjAwMDApCisJCQkoMHg4MDAxMDAxNCArICgoTmIpIC0gMSkqMHgwMDAyMDAwMCkKICNkZWZpbmUgX1VUU1IwKE5iKQkgICAgICAgIAkvKiBVQVJUIFN0YXR1cyBSZWcuIDAgWzEuLjNdICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDB4ODAwMTAwMUMgKyAoKE5iKSAtIDEpKjB4MDAwMjAwMDApCisJCQkoMHg4MDAxMDAxQyArICgoTmIpIC0gMSkqMHgwMDAyMDAwMCkKICNkZWZpbmUgX1VUU1IxKE5iKQkgICAgICAgIAkvKiBVQVJUIFN0YXR1cyBSZWcuIDEgWzEuLjNdICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDB4ODAwMTAwMjAgKyAoKE5iKSAtIDEpKjB4MDAwMjAwMDApCisJCQkoMHg4MDAxMDAyMCArICgoTmIpIC0gMSkqMHgwMDAyMDAwMCkKIAogI2RlZmluZSBfU2VyMVVUQ1IwCV9VVENSMCAoMSkJLyogU2VyLiBwb3J0IDEgVUFSVCBDb250cm9sIFJlZy4gMCAqLwogI2RlZmluZSBfU2VyMVVUQ1IxCV9VVENSMSAoMSkJLyogU2VyLiBwb3J0IDEgVUFSVCBDb250cm9sIFJlZy4gMSAqLwpAQCAtNDUyLDUxICs0NTIsNTEgQEAKICNpZiBMQU5HVUFHRSA9PSBDCiAKICNkZWZpbmUgU2VyMVVUQ1IwCSAgICAgICAgCS8qIFNlci4gcG9ydCAxIFVBUlQgQ29udHJvbCBSZWcuIDAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIxVVRDUjApKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjFVVENSMCkpKQogI2RlZmluZSBTZXIxVVRDUjEJICAgICAgICAJLyogU2VyLiBwb3J0IDEgVUFSVCBDb250cm9sIFJlZy4gMSAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjFVVENSMSkpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMVVUQ1IxKSkpCiAjZGVmaW5lIFNlcjFVVENSMgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBVQVJUIENvbnRyb2wgUmVnLiAyICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMVVUQ1IyKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIxVVRDUjIpKSkKICNkZWZpbmUgU2VyMVVUQ1IzCSAgICAgICAgCS8qIFNlci4gcG9ydCAxIFVBUlQgQ29udHJvbCBSZWcuIDMgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIxVVRDUjMpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjFVVENSMykpKQogI2RlZmluZSBTZXIxVVREUgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBVQVJUIERhdGEgUmVnLiAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMVVURFIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjFVVERSKSkpCiAjZGVmaW5lIFNlcjFVVFNSMAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBVQVJUIFN0YXR1cyBSZWcuIDAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMVVUU1IwKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIxVVRTUjApKSkKICNkZWZpbmUgU2VyMVVUU1IxCSAgICAgICAgCS8qIFNlci4gcG9ydCAxIFVBUlQgU3RhdHVzIFJlZy4gMSAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIxVVRTUjEpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjFVVFNSMSkpKQogCiAjZGVmaW5lIFNlcjJVVENSMAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBVQVJUIENvbnRyb2wgUmVnLiAwICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMlVUQ1IwKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIyVVRDUjApKSkKICNkZWZpbmUgU2VyMlVUQ1IxCSAgICAgICAgCS8qIFNlci4gcG9ydCAyIFVBUlQgQ29udHJvbCBSZWcuIDEgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIyVVRDUjEpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjJVVENSMSkpKQogI2RlZmluZSBTZXIyVVRDUjIJICAgICAgICAJLyogU2VyLiBwb3J0IDIgVUFSVCBDb250cm9sIFJlZy4gMiAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjJVVENSMikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMlVUQ1IyKSkpCiAjZGVmaW5lIFNlcjJVVENSMwkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBVQVJUIENvbnRyb2wgUmVnLiAzICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMlVUQ1IzKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIyVVRDUjMpKSkKICNkZWZpbmUgU2VyMlVUQ1I0CSAgICAgICAgCS8qIFNlci4gcG9ydCAyIFVBUlQgQ29udHJvbCBSZWcuIDQgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIyVVRDUjQpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjJVVENSNCkpKQogI2RlZmluZSBTZXIyVVREUgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBVQVJUIERhdGEgUmVnLiAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMlVURFIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjJVVERSKSkpCiAjZGVmaW5lIFNlcjJVVFNSMAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBVQVJUIFN0YXR1cyBSZWcuIDAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMlVUU1IwKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIyVVRTUjApKSkKICNkZWZpbmUgU2VyMlVUU1IxCSAgICAgICAgCS8qIFNlci4gcG9ydCAyIFVBUlQgU3RhdHVzIFJlZy4gMSAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIyVVRTUjEpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjJVVFNSMSkpKQogCiAjZGVmaW5lIFNlcjNVVENSMAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMyBVQVJUIENvbnRyb2wgUmVnLiAwICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyM1VUQ1IwKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIzVVRDUjApKSkKICNkZWZpbmUgU2VyM1VUQ1IxCSAgICAgICAgCS8qIFNlci4gcG9ydCAzIFVBUlQgQ29udHJvbCBSZWcuIDEgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIzVVRDUjEpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjNVVENSMSkpKQogI2RlZmluZSBTZXIzVVRDUjIJICAgICAgICAJLyogU2VyLiBwb3J0IDMgVUFSVCBDb250cm9sIFJlZy4gMiAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjNVVENSMikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyM1VUQ1IyKSkpCiAjZGVmaW5lIFNlcjNVVENSMwkgICAgICAgIAkvKiBTZXIuIHBvcnQgMyBVQVJUIENvbnRyb2wgUmVnLiAzICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyM1VUQ1IzKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIzVVRDUjMpKSkKICNkZWZpbmUgU2VyM1VURFIJICAgICAgICAJLyogU2VyLiBwb3J0IDMgVUFSVCBEYXRhIFJlZy4gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjNVVERSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIzVVREUikpKQogI2RlZmluZSBTZXIzVVRTUjAJICAgICAgICAJLyogU2VyLiBwb3J0IDMgVUFSVCBTdGF0dXMgUmVnLiAwICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjNVVFNSMCkpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyM1VUU1IwKSkpCiAjZGVmaW5lIFNlcjNVVFNSMQkgICAgICAgIAkvKiBTZXIuIHBvcnQgMyBVQVJUIFN0YXR1cyBSZWcuIDEgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyM1VUU1IxKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIzVVRTUjEpKSkKIAogI2VsaWYgTEFOR1VBR0UgPT0gQXNzZW1ibHkKICNkZWZpbmUgU2VyMVVUQ1IwCSggaW9fcDJ2IChfU2VyMVVUQ1IwKSkKQEAgLTUzNyw4ICs1MzcsOCBAQAogI2RlZmluZSBVVENSMF83Qml0RGF0YQkoVVRDUjBfRFNTKjApCS8qICA3LUJpdCBEYXRhICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVVRDUjBfOEJpdERhdGEJKFVUQ1IwX0RTUyoxKQkvKiAgOC1CaXQgRGF0YSAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFVUQ1IwX1NDRQkweDAwMDAwMDEwCS8qIFNhbXBsZSBDbG9jayBFbmFibGUgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKHNlci4gcG9ydCAxOiBHUElPIFsxOF0sICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzZXIuIHBvcnQgMzogR1BJTyBbMjBdKSAgICAgICAgICovCisJCQkJCS8qIChzZXIuIHBvcnQgMTogR1BJTyBbMThdLCAgICAgICAgKi8KKwkJCQkJLyogc2VyLiBwb3J0IDM6IEdQSU8gWzIwXSkgICAgICAgICAqLwogI2RlZmluZSBVVENSMF9SQ0UJMHgwMDAwMDAyMAkvKiBSZWNlaXZlIENsb2NrIEVkZ2Ugc2VsZWN0ICAgICAgICovCiAjZGVmaW5lIFVUQ1IwX1JjUnNFZGcJKFVUQ1IwX1JDRSowKQkvKiAgUmVjZWl2ZSBjbG9jayBSaXNpbmctRWRnZSAgICAgICovCiAjZGVmaW5lIFVUQ1IwX1JjRmxFZGcJKFVUQ1IwX1JDRSoxKQkvKiAgUmVjZWl2ZSBjbG9jayBGYWxsaW5nLUVkZ2UgICAgICovCkBAIC01NDYsNDMgKzU0Niw0MyBAQAogI2RlZmluZSBVVENSMF9UclJzRWRnCShVVENSMF9UQ0UqMCkJLyogIFRyYW5zbWl0IGNsb2NrIFJpc2luZy1FZGdlICAgICAqLwogI2RlZmluZSBVVENSMF9UckZsRWRnCShVVENSMF9UQ0UqMSkJLyogIFRyYW5zbWl0IGNsb2NrIEZhbGxpbmctRWRnZSAgICAqLwogI2RlZmluZSBVVENSMF9TZXIySXJEQQkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBJckRBIHNldHRpbmdzICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKFVUQ1IwXzFTdHBCaXQgKyBVVENSMF84Qml0RGF0YSkKKwkJCShVVENSMF8xU3RwQml0ICsgVVRDUjBfOEJpdERhdGEpCiAKICNkZWZpbmUgVVRDUjFfQlJECUZsZCAoNCwgMCkJLyogQmF1ZCBSYXRlIERpdmlzb3IvMTYgLSAxIFsxMTo4XSAqLwogI2RlZmluZSBVVENSMl9CUkQJRmxkICg4LCAwKQkvKiBCYXVkIFJhdGUgRGl2aXNvci8xNiAtIDEgIFs3OjBdICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGZ1YSA9IGZ4dGwvKDE2KihCUkRbMTE6MF0gKyAxKSkgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogVHVhID0gMTYqKEJSRCBbMTE6MF0gKyAxKSpUeHRsICAqLworCQkJCQkvKiBmdWEgPSBmeHRsLygxNiooQlJEWzExOjBdICsgMSkpICovCisJCQkJCS8qIFR1YSA9IDE2KihCUkQgWzExOjBdICsgMSkqVHh0bCAgKi8KICNkZWZpbmUgVVRDUjFfQmRSdERpdihEaXYpICAgICAgCS8qICBCYXVkIFJhdGUgRGl2aXNvciBbMTYuLjY1NTM2XSAgKi8gXAotICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMTYpLzE2ID4+IEZTaXplIChVVENSMl9CUkQpIDw8IFwKLSAgICAgICAgICAgICAgICAJIEZTaGZ0IChVVENSMV9CUkQpKQorCQkJKCgoRGl2KSAtIDE2KS8xNiA+PiBGU2l6ZSAoVVRDUjJfQlJEKSA8PCBcCisJCQkgRlNoZnQgKFVUQ1IxX0JSRCkpCiAjZGVmaW5lIFVUQ1IyX0JkUnREaXYoRGl2KSAgICAgIAkvKiAgQmF1ZCBSYXRlIERpdmlzb3IgWzE2Li42NTUzNl0gICovIFwKLSAgICAgICAgICAgICAgICAJKCgoRGl2KSAtIDE2KS8xNiAmIEZBbG5Nc2sgKFVUQ1IyX0JSRCkgPDwgXAotICAgICAgICAgICAgICAgIAkgRlNoZnQgKFVUQ1IyX0JSRCkpCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBmdWEgPSBmeHRsLygxNipGbG9vciAoRGl2LzE2KSkgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFR1YSA9IDE2KkZsb29yIChEaXYvMTYpKlR4dGwgICAqLworCQkJKCgoRGl2KSAtIDE2KS8xNiAmIEZBbG5Nc2sgKFVUQ1IyX0JSRCkgPDwgXAorCQkJIEZTaGZ0IChVVENSMl9CUkQpKQorCQkJCQkvKiAgZnVhID0gZnh0bC8oMTYqRmxvb3IgKERpdi8xNikpICovCisJCQkJCS8qICBUdWEgPSAxNipGbG9vciAoRGl2LzE2KSpUeHRsICAgKi8KICNkZWZpbmUgVVRDUjFfQ2VpbEJkUnREaXYoRGl2KSAgCS8qICBDZWlsLiBvZiBCZFJ0RGl2IFsxNi4uNjU1MzZdICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMSkvMTYgPj4gRlNpemUgKFVUQ1IyX0JSRCkgPDwgXAotICAgICAgICAgICAgICAgIAkgRlNoZnQgKFVUQ1IxX0JSRCkpCisJCQkoKChEaXYpIC0gMSkvMTYgPj4gRlNpemUgKFVUQ1IyX0JSRCkgPDwgXAorCQkJIEZTaGZ0IChVVENSMV9CUkQpKQogI2RlZmluZSBVVENSMl9DZWlsQmRSdERpdihEaXYpICAJLyogIENlaWwuIG9mIEJkUnREaXYgWzE2Li42NTUzNl0gICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKERpdikgLSAxKS8xNiAmIEZBbG5Nc2sgKFVUQ1IyX0JSRCkgPDwgXAotICAgICAgICAgICAgICAgIAkgRlNoZnQgKFVUQ1IyX0JSRCkpCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBmdWEgPSBmeHRsLygxNipDZWlsIChEaXYvMTYpKSAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFR1YSA9IDE2KkNlaWwgKERpdi8xNikqVHh0bCAgICAqLworCQkJKCgoRGl2KSAtIDEpLzE2ICYgRkFsbk1zayAoVVRDUjJfQlJEKSA8PCBcCisJCQkgRlNoZnQgKFVUQ1IyX0JSRCkpCisJCQkJCS8qICBmdWEgPSBmeHRsLygxNipDZWlsIChEaXYvMTYpKSAgKi8KKwkJCQkJLyogIFR1YSA9IDE2KkNlaWwgKERpdi8xNikqVHh0bCAgICAqLwogCiAjZGVmaW5lIFVUQ1IzX1JYRQkweDAwMDAwMDAxCS8qIFJlY2VpdmUgRW5hYmxlICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVVRDUjNfVFhFCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgRW5hYmxlICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBVVENSM19CUksJMHgwMDAwMDAwNAkvKiBCUmVhSyBtb2RlICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFVUQ1IzX1JJRQkweDAwMDAwMDA4CS8qIFJlY2VpdmUgRklGTyAxLzMtdG8tMi8zLWZ1bGwgb3IgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogbW9yZSBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAqLworCQkJCQkvKiBtb3JlIEludGVycnVwdCBFbmFibGUgICAgICAgICAgICovCiAjZGVmaW5lIFVUQ1IzX1RJRQkweDAwMDAwMDEwCS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFVUQ1IzX0xCTQkweDAwMDAwMDIwCS8qIExvb2stQmFjayBNb2RlICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVVRDUjNfU2VyMklyREEJICAgICAgICAJLyogU2VyLiBwb3J0IDIgSXJEQSBzZXR0aW5ncyAoUklFLCAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFRJRSwgTEJNIGNhbiBiZSBzZXQgb3IgY2xlYXJlZCkgKi8gXAotICAgICAgICAgICAgICAgIAkoVVRDUjNfUlhFICsgVVRDUjNfVFhFKQorCQkJCQkvKiBUSUUsIExCTSBjYW4gYmUgc2V0IG9yIGNsZWFyZWQpICovIFwKKwkJCShVVENSM19SWEUgKyBVVENSM19UWEUpCiAKICNkZWZpbmUgVVRDUjRfSFNFCTB4MDAwMDAwMDEJLyogSGV3bGV0dC1QYWNrYXJkIFNlcmlhbCBJbmZyYVJlZCAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoSFAtU0lSKSBtb2R1bGF0aW9uIEVuYWJsZSAgICAgICovCisJCQkJCS8qIChIUC1TSVIpIG1vZHVsYXRpb24gRW5hYmxlICAgICAgKi8KICNkZWZpbmUgVVRDUjRfTlJaCShVVENSNF9IU0UqMCkJLyogIE5vbi1SZXR1cm4gdG8gWmVybyBtb2R1bGF0aW9uICAqLwogI2RlZmluZSBVVENSNF9IUFNJUgkoVVRDUjRfSFNFKjEpCS8qICBIUC1TSVIgbW9kdWxhdGlvbiAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVVRDUjRfTFBNCTB4MDAwMDAwMDIJLyogTG93LVBvd2VyIE1vZGUgICAgICAgICAgICAgICAgICAqLwpAQCAtNTk3LDkgKzU5Nyw5IEBACiAjZW5kaWYgLyogMCAqLwogCiAjZGVmaW5lIFVUU1IwX1RGUwkweDAwMDAwMDAxCS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgICAgICAqLworCQkJCQkvKiBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAgICAgICovCiAjZGVmaW5lIFVUU1IwX1JGUwkweDAwMDAwMDAyCS8qIFJlY2VpdmUgRklGTyAxLzMtdG8tMi8zLWZ1bGwgb3IgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogbW9yZSBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAqLworCQkJCQkvKiBtb3JlIFNlcnZpY2UgcmVxdWVzdCAocmVhZCkgICAgICovCiAjZGVmaW5lIFVUU1IwX1JJRAkweDAwMDAwMDA0CS8qIFJlY2VpdmVyIElEbGUgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVVRTUjBfUkJCCTB4MDAwMDAwMDgJLyogUmVjZWl2ZSBCZWdpbm5pbmcgb2YgQnJlYWsgICAgICAqLwogI2RlZmluZSBVVFNSMF9SRUIJMHgwMDAwMDAxMAkvKiBSZWNlaXZlIEVuZCBvZiBCcmVhayAgICAgICAgICAgICovCkBAIC02NTEsMjEgKzY1MSwyMSBAQAogCiAjaWYgTEFOR1VBR0UgPT0gQwogI2RlZmluZSBTZXIxU0RDUjAJICAgICAgICAJLyogU2VyLiBwb3J0IDEgU0RMQyBDb250cm9sIFJlZy4gMCAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjFTRENSMCkpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMVNEQ1IwKSkpCiAjZGVmaW5lIFNlcjFTRENSMQkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBTRExDIENvbnRyb2wgUmVnLiAxICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMVNEQ1IxKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIxU0RDUjEpKSkKICNkZWZpbmUgU2VyMVNEQ1IyCSAgICAgICAgCS8qIFNlci4gcG9ydCAxIFNETEMgQ29udHJvbCBSZWcuIDIgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIxU0RDUjIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjFTRENSMikpKQogI2RlZmluZSBTZXIxU0RDUjMJICAgICAgICAJLyogU2VyLiBwb3J0IDEgU0RMQyBDb250cm9sIFJlZy4gMyAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjFTRENSMykpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMVNEQ1IzKSkpCiAjZGVmaW5lIFNlcjFTRENSNAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBTRExDIENvbnRyb2wgUmVnLiA0ICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMVNEQ1I0KSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIxU0RDUjQpKSkKICNkZWZpbmUgU2VyMVNERFIJICAgICAgICAJLyogU2VyLiBwb3J0IDEgU0RMQyBEYXRhIFJlZy4gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjFTRERSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIxU0REUikpKQogI2RlZmluZSBTZXIxU0RTUjAJICAgICAgICAJLyogU2VyLiBwb3J0IDEgU0RMQyBTdGF0dXMgUmVnLiAwICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjFTRFNSMCkpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMVNEU1IwKSkpCiAjZGVmaW5lIFNlcjFTRFNSMQkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBTRExDIFN0YXR1cyBSZWcuIDEgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMVNEU1IxKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIxU0RTUjEpKSkKICNlbmRpZiAvKiBMQU5HVUFHRSA9PSBDICovCiAKICNkZWZpbmUgU0RDUjBfU1VTCTB4MDAwMDAwMDEJLyogU0RMQy9VQVJUIFNlbGVjdCAgICAgICAgICAgICAgICAqLwpAQCAtNjgwLDcgKzY4MCw3IEBACiAjZGVmaW5lIFNEQ1IwX05SWgkoU0RDUjBfQk1TKjEpCS8qICBOb24tUmV0dXJuIHRvIFplcm8gbW9kdWxhdGlvbiAgKi8KICNkZWZpbmUgU0RDUjBfU0NFCTB4MDAwMDAwMTAJLyogU2FtcGxlIENsb2NrIEVuYWJsZSAoR1BJTyBbMTZdKSAqLwogI2RlZmluZSBTRENSMF9TQ0QJMHgwMDAwMDAyMAkvKiBTYW1wbGUgQ2xvY2sgRGlyZWN0aW9uIHNlbGVjdCAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChHUElPIFsxNl0pICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogKEdQSU8gWzE2XSkgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRENSMF9TQ2xrSW4JKFNEQ1IwX1NDRCowKQkvKiAgU2FtcGxlIENsb2NrIElucHV0ICAgICAgICAgICAgICovCiAjZGVmaW5lIFNEQ1IwX1NDbGtPdXQJKFNEQ1IwX1NDRCoxKQkvKiAgU2FtcGxlIENsb2NrIE91dHB1dCAgICAgICAgICAgICovCiAjZGVmaW5lIFNEQ1IwX1JDRQkweDAwMDAwMDQwCS8qIFJlY2VpdmUgQ2xvY2sgRWRnZSBzZWxlY3QgICAgICAgKi8KQEAgLTY5MSwxMyArNjkxLDEzIEBACiAjZGVmaW5lIFNEQ1IwX1RyRmxFZGcJKFNEQ1IwX1RDRSoxKQkvKiAgVHJhbnNtaXQgY2xvY2sgRmFsbGluZy1FZGdlICAgICovCiAKICNkZWZpbmUgU0RDUjFfQUFGCTB4MDAwMDAwMDEJLyogQWJvcnQgQWZ0ZXIgRnJhbWUgZW5hYmxlICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoR1BJTyBbMTddKSAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIChHUElPIFsxN10pICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RDUjFfVFhFCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgRW5hYmxlICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTRENSMV9SWEUJMHgwMDAwMDAwNAkvKiBSZWNlaXZlIEVuYWJsZSAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNEQ1IxX1JJRQkweDAwMDAwMDA4CS8qIFJlY2VpdmUgRklGTyAxLzMtdG8tMi8zLWZ1bGwgb3IgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogbW9yZSBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAqLworCQkJCQkvKiBtb3JlIEludGVycnVwdCBFbmFibGUgICAgICAgICAgICovCiAjZGVmaW5lIFNEQ1IxX1RJRQkweDAwMDAwMDEwCS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNEQ1IxX0FNRQkweDAwMDAwMDIwCS8qIEFkZHJlc3MgTWF0Y2ggRW5hYmxlICAgICAgICAgICAgKi8KICNkZWZpbmUgU0RDUjFfVFVTCTB4MDAwMDAwNDAJLyogVHJhbnNtaXQgRklGTyBVbmRlci1ydW4gU2VsZWN0ICAqLwogI2RlZmluZSBTRENSMV9FRnJtVVJuCShTRENSMV9UVVMqMCkJLyogIEVuZCBGcmFtZSBvbiBVbmRlci1SdW4gICAgICAgICAqLwpAQCAtNzA4LDI0ICs3MDgsMjQgQEAKIAogI2RlZmluZSBTRENSM19CUkQJRmxkICg0LCAwKQkvKiBCYXVkIFJhdGUgRGl2aXNvci8xNiAtIDEgWzExOjhdICovCiAjZGVmaW5lIFNEQ1I0X0JSRAlGbGQgKDgsIDApCS8qIEJhdWQgUmF0ZSBEaXZpc29yLzE2IC0gMSAgWzc6MF0gKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogZnNkID0gZnh0bC8oMTYqKEJSRFsxMTowXSArIDEpKSAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBUc2QgPSAxNiooQlJEWzExOjBdICsgMSkqVHh0bCAgICovCisJCQkJCS8qIGZzZCA9IGZ4dGwvKDE2KihCUkRbMTE6MF0gKyAxKSkgKi8KKwkJCQkJLyogVHNkID0gMTYqKEJSRFsxMTowXSArIDEpKlR4dGwgICAqLwogI2RlZmluZSBTRENSM19CZFJ0RGl2KERpdikgICAgICAJLyogIEJhdWQgUmF0ZSBEaXZpc29yIFsxNi4uNjU1MzZdICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKERpdikgLSAxNikvMTYgPj4gRlNpemUgKFNEQ1I0X0JSRCkgPDwgXAotICAgICAgICAgICAgICAgIAkgRlNoZnQgKFNEQ1IzX0JSRCkpCisJCQkoKChEaXYpIC0gMTYpLzE2ID4+IEZTaXplIChTRENSNF9CUkQpIDw8IFwKKwkJCSBGU2hmdCAoU0RDUjNfQlJEKSkKICNkZWZpbmUgU0RDUjRfQmRSdERpdihEaXYpICAgICAgCS8qICBCYXVkIFJhdGUgRGl2aXNvciBbMTYuLjY1NTM2XSAgKi8gXAotICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMTYpLzE2ICYgRkFsbk1zayAoU0RDUjRfQlJEKSA8PCBcCi0gICAgICAgICAgICAgICAgCSBGU2hmdCAoU0RDUjRfQlJEKSkKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGZzZCA9IGZ4dGwvKDE2KkZsb29yIChEaXYvMTYpKSAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgVHNkID0gMTYqRmxvb3IgKERpdi8xNikqVHh0bCAgICovCisJCQkoKChEaXYpIC0gMTYpLzE2ICYgRkFsbk1zayAoU0RDUjRfQlJEKSA8PCBcCisJCQkgRlNoZnQgKFNEQ1I0X0JSRCkpCisJCQkJCS8qICBmc2QgPSBmeHRsLygxNipGbG9vciAoRGl2LzE2KSkgKi8KKwkJCQkJLyogIFRzZCA9IDE2KkZsb29yIChEaXYvMTYpKlR4dGwgICAqLwogI2RlZmluZSBTRENSM19DZWlsQmRSdERpdihEaXYpICAJLyogIENlaWwuIG9mIEJkUnREaXYgWzE2Li42NTUzNl0gICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKERpdikgLSAxKS8xNiA+PiBGU2l6ZSAoU0RDUjRfQlJEKSA8PCBcCi0gICAgICAgICAgICAgICAgCSBGU2hmdCAoU0RDUjNfQlJEKSkKKwkJCSgoKERpdikgLSAxKS8xNiA+PiBGU2l6ZSAoU0RDUjRfQlJEKSA8PCBcCisJCQkgRlNoZnQgKFNEQ1IzX0JSRCkpCiAjZGVmaW5lIFNEQ1I0X0NlaWxCZFJ0RGl2KERpdikgIAkvKiAgQ2VpbC4gb2YgQmRSdERpdiBbMTYuLjY1NTM2XSAgICovIFwKLSAgICAgICAgICAgICAgICAJKCgoRGl2KSAtIDEpLzE2ICYgRkFsbk1zayAoU0RDUjRfQlJEKSA8PCBcCi0gICAgICAgICAgICAgICAgCSBGU2hmdCAoU0RDUjRfQlJEKSkKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGZzZCA9IGZ4dGwvKDE2KkNlaWwgKERpdi8xNikpICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgVHNkID0gMTYqQ2VpbCAoRGl2LzE2KSpUeHRsICAgICovCisJCQkoKChEaXYpIC0gMSkvMTYgJiBGQWxuTXNrIChTRENSNF9CUkQpIDw8IFwKKwkJCSBGU2hmdCAoU0RDUjRfQlJEKSkKKwkJCQkJLyogIGZzZCA9IGZ4dGwvKDE2KkNlaWwgKERpdi8xNikpICAqLworCQkJCQkvKiAgVHNkID0gMTYqQ2VpbCAoRGl2LzE2KSpUeHRsICAgICovCiAKICNkZWZpbmUgU0REUl9EQVRBCUZsZCAoOCwgMCkJLyogcmVjZWl2ZS90cmFuc21pdCBEQVRBIEZJRk9zICAgICAqLwogI2lmIDAgICAgICAgICAgIAkgICAgICAgIAkvKiBIaWRkZW4gcmVjZWl2ZSBGSUZPIGJpdHMgICAgICAgICovCkBAIC03MzgsOSArNzM4LDkgQEAKICNkZWZpbmUgU0RTUjBfVFVSCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgRklGTyBVbmRlci1SdW4gICAgICAgICAqLwogI2RlZmluZSBTRFNSMF9SQUIJMHgwMDAwMDAwNAkvKiBSZWNlaXZlIEFCb3J0ICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNEU1IwX1RGUwkweDAwMDAwMDA4CS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgICAgICAqLworCQkJCQkvKiBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAgICAgICovCiAjZGVmaW5lIFNEU1IwX1JGUwkweDAwMDAwMDEwCS8qIFJlY2VpdmUgRklGTyAxLzMtdG8tMi8zLWZ1bGwgb3IgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogbW9yZSBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAqLworCQkJCQkvKiBtb3JlIFNlcnZpY2UgcmVxdWVzdCAocmVhZCkgICAgICovCiAKICNkZWZpbmUgU0RTUjFfUlNZCTB4MDAwMDAwMDEJLyogUmVjZWl2ZXIgU1luY2hyb25pemVkIChyZWFkKSAgICAqLwogI2RlZmluZSBTRFNSMV9UQlkJMHgwMDAwMDAwMgkvKiBUcmFuc21pdHRlciBCdXNZIChyZWFkKSAgICAgICAgICovCkBAIC03ODIsMTcgKzc4MiwxNyBAQAogCiAjaWYgTEFOR1VBR0UgPT0gQwogI2RlZmluZSBTZXIySFNDUjAJICAgICAgICAJLyogU2VyLiBwb3J0IDIgSFNTUCBDb250cm9sIFJlZy4gMCAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjJIU0NSMCkpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMkhTQ1IwKSkpCiAjZGVmaW5lIFNlcjJIU0NSMQkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBIU1NQIENvbnRyb2wgUmVnLiAxICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMkhTQ1IxKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIySFNDUjEpKSkKICNkZWZpbmUgU2VyMkhTRFIJICAgICAgICAJLyogU2VyLiBwb3J0IDIgSFNTUCBEYXRhIFJlZy4gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjJIU0RSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIySFNEUikpKQogI2RlZmluZSBTZXIySFNTUjAJICAgICAgICAJLyogU2VyLiBwb3J0IDIgSFNTUCBTdGF0dXMgUmVnLiAwICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjJIU1NSMCkpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMkhTU1IwKSkpCiAjZGVmaW5lIFNlcjJIU1NSMQkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBIU1NQIFN0YXR1cyBSZWcuIDEgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyMkhTU1IxKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIySFNTUjEpKSkKICNkZWZpbmUgU2VyMkhTQ1IyCSAgICAgICAgCS8qIFNlci4gcG9ydCAyIEhTU1AgQ29udHJvbCBSZWcuIDIgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXIySFNDUjIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjJIU0NSMikpKQogI2VuZGlmIC8qIExBTkdVQUdFID09IEMgKi8KIAogI2RlZmluZSBIU0NSMF9JVFIJMHgwMDAwMDAwMQkvKiBJckRBIFRyYW5zbWlzc2lvbiBSYXRlICAgICAgICAgICovCkBAIC04MDUsOSArODA1LDkgQEAKICNkZWZpbmUgSFNDUjBfVFhFCTB4MDAwMDAwMDgJLyogVHJhbnNtaXQgRW5hYmxlICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIU0NSMF9SWEUJMHgwMDAwMDAxMAkvKiBSZWNlaXZlIEVuYWJsZSAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhTQ1IwX1JJRQkweDAwMDAwMDIwCS8qIFJlY2VpdmUgRklGTyAyLzUtdG8tMy81LWZ1bGwgb3IgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogbW9yZSBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAqLworCQkJCQkvKiBtb3JlIEludGVycnVwdCBFbmFibGUgICAgICAgICAgICovCiAjZGVmaW5lIEhTQ1IwX1RJRQkweDAwMDAwMDQwCS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhTQ1IwX0FNRQkweDAwMDAwMDgwCS8qIEFkZHJlc3MgTWF0Y2ggRW5hYmxlICAgICAgICAgICAgKi8KIAogI2RlZmluZSBIU0NSMV9BTVYJRmxkICg4LCAwKQkvKiBBZGRyZXNzIE1hdGNoIFZhbHVlICAgICAgICAgICAgICovCkBAIC04MjMsOSArODIzLDkgQEAKICNkZWZpbmUgSFNTUjBfVFVSCTB4MDAwMDAwMDIJLyogVHJhbnNtaXQgRklGTyBVbmRlci1SdW4gICAgICAgICAqLwogI2RlZmluZSBIU1NSMF9SQUIJMHgwMDAwMDAwNAkvKiBSZWNlaXZlIEFCb3J0ICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhTU1IwX1RGUwkweDAwMDAwMDA4CS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgICAgICAqLworCQkJCQkvKiBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAgICAgICovCiAjZGVmaW5lIEhTU1IwX1JGUwkweDAwMDAwMDEwCS8qIFJlY2VpdmUgRklGTyAyLzUtdG8tMy81LWZ1bGwgb3IgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogbW9yZSBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAqLworCQkJCQkvKiBtb3JlIFNlcnZpY2UgcmVxdWVzdCAocmVhZCkgICAgICovCiAjZGVmaW5lIEhTU1IwX0ZSRQkweDAwMDAwMDIwCS8qIHJlY2VpdmUgRlJhbWluZyBFcnJvciAgICAgICAgICAgKi8KIAogI2RlZmluZSBIU1NSMV9SU1kJMHgwMDAwMDAwMQkvKiBSZWNlaXZlciBTWW5jaHJvbml6ZWQgKHJlYWQpICAgICovCkBAIC04MzgsMTQgKzgzOCwxNCBAQAogCiAjZGVmaW5lIEhTQ1IyX1RYUAkweDAwMDQwMDAwCS8qIFRyYW5zbWl0IGRhdGEgUG9sYXJpdHkgKFRYRF8yKSAgKi8KICNkZWZpbmUgSFNDUjJfVHJEYXRhTAkoSFNDUjJfVFhQKjApCS8qICBUcmFuc21pdCBEYXRhIGFjdGl2ZSBMb3cgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIChpbnZlcnRlZCkgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiAgKGludmVydGVkKSAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhTQ1IyX1RyRGF0YUgJKEhTQ1IyX1RYUCoxKQkvKiAgVHJhbnNtaXQgRGF0YSBhY3RpdmUgSGlnaCAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAobm9uLWludmVydGVkKSAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogIChub24taW52ZXJ0ZWQpICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIU0NSMl9SWFAJMHgwMDA4MDAwMAkvKiBSZWNlaXZlIGRhdGEgUG9sYXJpdHkgKFJYRF8yKSAgICovCiAjZGVmaW5lIEhTQ1IyX1JjRGF0YUwJKEhTQ1IyX1JYUCowKQkvKiAgUmVjZWl2ZSBEYXRhIGFjdGl2ZSBMb3cgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAoaW52ZXJ0ZWQpICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogIChpbnZlcnRlZCkgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIU0NSMl9SY0RhdGFICShIU0NSMl9SWFAqMSkJLyogIFJlY2VpdmUgRGF0YSBhY3RpdmUgSGlnaCAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgKG5vbi1pbnZlcnRlZCkgICAgICAgICAgICAgICAgICovCisJCQkJCS8qICAobm9uLWludmVydGVkKSAgICAgICAgICAgICAgICAgKi8KIAogCiAvKgpAQCAtODc3LDg3ICs4NzcsODcgQEAKIAogI2RlZmluZSBfU2VyNE1DQ1IwCTB4ODAwNjAwMDAJLyogU2VyLiBwb3J0IDQgTUNQIENvbnRyb2wgUmVnLiAwICAqLwogI2RlZmluZSBfU2VyNE1DRFIwCTB4ODAwNjAwMDgJLyogU2VyLiBwb3J0IDQgTUNQIERhdGEgUmVnLiAwICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoYXVkaW8pICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIChhdWRpbykgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX1NlcjRNQ0RSMQkweDgwMDYwMDBDCS8qIFNlci4gcG9ydCA0IE1DUCBEYXRhIFJlZy4gMSAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKHRlbGVjb20pICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiAodGVsZWNvbSkgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9TZXI0TUNEUjIJMHg4MDA2MDAxMAkvKiBTZXIuIHBvcnQgNCBNQ1AgRGF0YSBSZWcuIDIgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChDT0RFQyByZWcuKSAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogKENPREVDIHJlZy4pICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfU2VyNE1DU1IJMHg4MDA2MDAxOAkvKiBTZXIuIHBvcnQgNCBNQ1AgU3RhdHVzIFJlZy4gICAgICovCiAjZGVmaW5lIF9TZXI0TUNDUjEJMHg5MDA2MDAzMAkvKiBTZXIuIHBvcnQgNCBNQ1AgQ29udHJvbCBSZWcuIDEgICovCiAKICNpZiBMQU5HVUFHRSA9PSBDCiAjZGVmaW5lIFNlcjRNQ0NSMAkgICAgICAgIAkvKiBTZXIuIHBvcnQgNCBNQ1AgQ29udHJvbCBSZWcuIDAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyNE1DQ1IwKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXI0TUNDUjApKSkKICNkZWZpbmUgU2VyNE1DRFIwCSAgICAgICAgCS8qIFNlci4gcG9ydCA0IE1DUCBEYXRhIFJlZy4gMCAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoYXVkaW8pICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyNE1DRFIwKSkpCisJCQkJCS8qIChhdWRpbykgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyNE1DRFIwKSkpCiAjZGVmaW5lIFNlcjRNQ0RSMQkgICAgICAgIAkvKiBTZXIuIHBvcnQgNCBNQ1AgRGF0YSBSZWcuIDEgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKHRlbGVjb20pICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjRNQ0RSMSkpKQorCQkJCQkvKiAodGVsZWNvbSkgICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjRNQ0RSMSkpKQogI2RlZmluZSBTZXI0TUNEUjIJICAgICAgICAJLyogU2VyLiBwb3J0IDQgTUNQIERhdGEgUmVnLiAyICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChDT0RFQyByZWcuKSAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXI0TUNEUjIpKSkKKwkJCQkJLyogKENPREVDIHJlZy4pICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXI0TUNEUjIpKSkKICNkZWZpbmUgU2VyNE1DU1IJICAgICAgICAJLyogU2VyLiBwb3J0IDQgTUNQIFN0YXR1cyBSZWcuICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjRNQ1NSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXI0TUNTUikpKQogI2RlZmluZSBTZXI0TUNDUjEJICAgICAgICAJLyogU2VyLiBwb3J0IDQgTUNQIENvbnRyb2wgUmVnLiAxICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjRNQ0NSMSkpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyNE1DQ1IxKSkpCiAjZW5kaWYgLyogTEFOR1VBR0UgPT0gQyAqLwogCiAjZGVmaW5lIE1DQ1IwX0FTRAlGbGQgKDcsIDApCS8qIEF1ZGlvIFNhbXBsaW5nIHJhdGUgRGl2aXNvci8zMiAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogWzYuLjEyN10gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBmYXVkID0gZm1jLygzMipBU0QpICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFRhdWQgPSAzMipBU0QqVG1jICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogWzYuLjEyN10gICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBmYXVkID0gZm1jLygzMipBU0QpICAgICAgICAgICAgICovCisJCQkJCS8qIFRhdWQgPSAzMipBU0QqVG1jICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTUNDUjBfQXVkU21wRGl2KERpdikgICAgCS8qICBBdWRpbyBTYW1wbGluZyByYXRlIERpdmlzb3IgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgWzE5Mi4uNDA2NF0gICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKChEaXYpLzMyIDw8IEZTaGZ0IChNQ0NSMF9BU0QpKQotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZmF1ZCA9IGZtYy8oMzIqRmxvb3IgKERpdi8zMikpICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBUYXVkID0gMzIqRmxvb3IgKERpdi8zMikqVG1jICAgKi8KKwkJCQkJLyogIFsxOTIuLjQwNjRdICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKERpdikvMzIgPDwgRlNoZnQgKE1DQ1IwX0FTRCkpCisJCQkJCS8qICBmYXVkID0gZm1jLygzMipGbG9vciAoRGl2LzMyKSkgKi8KKwkJCQkJLyogIFRhdWQgPSAzMipGbG9vciAoRGl2LzMyKSpUbWMgICAqLwogI2RlZmluZSBNQ0NSMF9DZWlsQXVkU21wRGl2KERpdikJLyogIENlaWwuIG9mIEF1ZFNtcERpdiBbMTkyLi40MDY0XSAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKERpdikgKyAzMSkvMzIgPDwgRlNoZnQgKE1DQ1IwX0FTRCkpCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBmYXVkID0gZm1jLygzMipDZWlsIChEaXYvMzIpKSAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFRhdWQgPSAzMipDZWlsIChEaXYvMzIpKlRtYyAgICAqLworCQkJKCgoRGl2KSArIDMxKS8zMiA8PCBGU2hmdCAoTUNDUjBfQVNEKSkKKwkJCQkJLyogIGZhdWQgPSBmbWMvKDMyKkNlaWwgKERpdi8zMikpICAqLworCQkJCQkvKiAgVGF1ZCA9IDMyKkNlaWwgKERpdi8zMikqVG1jICAgICovCiAjZGVmaW5lIE1DQ1IwX1RTRAlGbGQgKDcsIDgpCS8qIFRlbGVjb20gU2FtcGxpbmcgcmF0ZSAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogRGl2aXNvci8zMiBbMTYuLjEyN10gICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBmdGNtID0gZm1jLygzMipUU0QpICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFR0Y20gPSAzMipUU0QqVG1jICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogRGl2aXNvci8zMiBbMTYuLjEyN10gICAgICAgICAgICAqLworCQkJCQkvKiBmdGNtID0gZm1jLygzMipUU0QpICAgICAgICAgICAgICovCisJCQkJCS8qIFR0Y20gPSAzMipUU0QqVG1jICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTUNDUjBfVGNtU21wRGl2KERpdikgICAgCS8qICBUZWxlY29tIFNhbXBsaW5nIHJhdGUgRGl2aXNvciAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgWzUxMi4uNDA2NF0gICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKChEaXYpLzMyIDw8IEZTaGZ0IChNQ0NSMF9UU0QpKQotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZnRjbSA9IGZtYy8oMzIqRmxvb3IgKERpdi8zMikpICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBUdGNtID0gMzIqRmxvb3IgKERpdi8zMikqVG1jICAgKi8KKwkJCQkJLyogIFs1MTIuLjQwNjRdICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKERpdikvMzIgPDwgRlNoZnQgKE1DQ1IwX1RTRCkpCisJCQkJCS8qICBmdGNtID0gZm1jLygzMipGbG9vciAoRGl2LzMyKSkgKi8KKwkJCQkJLyogIFR0Y20gPSAzMipGbG9vciAoRGl2LzMyKSpUbWMgICAqLwogI2RlZmluZSBNQ0NSMF9DZWlsVGNtU21wRGl2KERpdikJLyogIENlaWwuIG9mIFRjbVNtcERpdiBbNTEyLi40MDY0XSAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKERpdikgKyAzMSkvMzIgPDwgRlNoZnQgKE1DQ1IwX1RTRCkpCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBmdGNtID0gZm1jLygzMipDZWlsIChEaXYvMzIpKSAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFR0Y20gPSAzMipDZWlsIChEaXYvMzIpKlRtYyAgICAqLworCQkJKCgoRGl2KSArIDMxKS8zMiA8PCBGU2hmdCAoTUNDUjBfVFNEKSkKKwkJCQkJLyogIGZ0Y20gPSBmbWMvKDMyKkNlaWwgKERpdi8zMikpICAqLworCQkJCQkvKiAgVHRjbSA9IDMyKkNlaWwgKERpdi8zMikqVG1jICAgICovCiAjZGVmaW5lIE1DQ1IwX01DRQkweDAwMDEwMDAwCS8qIE1DUCBFbmFibGUgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTUNDUjBfRUNTCTB4MDAwMjAwMDAJLyogRXh0ZXJuYWwgQ2xvY2sgU2VsZWN0ICAgICAgICAgICAqLwogI2RlZmluZSBNQ0NSMF9JbnRDbGsJKE1DQ1IwX0VDUyowKQkvKiAgSW50ZXJuYWwgQ2xvY2sgKDEwIG9yIDEyIE1IeikgICovCiAjZGVmaW5lIE1DQ1IwX0V4dENsawkoTUNDUjBfRUNTKjEpCS8qICBFeHRlcm5hbCBDbG9jayAoR1BJTyBbMjFdKSAgICAgKi8KICNkZWZpbmUgTUNDUjBfQURNCTB4MDAwNDAwMDAJLyogQS9EIChhdWRpby90ZWxlY29tKSBkYXRhICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzYW1wbGluZy9zdG9yaW5nIE1vZGUgICAgICAgICAgICovCisJCQkJCS8qIHNhbXBsaW5nL3N0b3JpbmcgTW9kZSAgICAgICAgICAgKi8KICNkZWZpbmUgTUNDUjBfVmxkQml0CShNQ0NSMF9BRE0qMCkJLyogIFZhbGlkIEJpdCBzdG9yaW5nIG1vZGUgICAgICAgICAqLwogI2RlZmluZSBNQ0NSMF9TbXBDbnQJKE1DQ1IwX0FETSoxKQkvKiAgU2FtcGxpbmcgQ291bnRlciBzdG9yaW5nIG1vZGUgICovCiAjZGVmaW5lIE1DQ1IwX1RURQkweDAwMDgwMDAwCS8qIFRlbGVjb20gVHJhbnNtaXQgRklGTyAxLzItZnVsbCAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogb3IgbGVzcyBpbnRlcnJ1cHQgRW5hYmxlICAgICAgICAqLworCQkJCQkvKiBvciBsZXNzIGludGVycnVwdCBFbmFibGUgICAgICAgICovCiAjZGVmaW5lIE1DQ1IwX1RSRQkweDAwMTAwMDAwCS8qIFRlbGVjb20gUmVjZWl2ZSBGSUZPIDEvMi1mdWxsICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogb3IgbW9yZSBpbnRlcnJ1cHQgRW5hYmxlICAgICAgICAqLworCQkJCQkvKiBvciBtb3JlIGludGVycnVwdCBFbmFibGUgICAgICAgICovCiAjZGVmaW5lIE1DQ1IwX0FURQkweDAwMjAwMDAwCS8qIEF1ZGlvIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogb3IgbGVzcyBpbnRlcnJ1cHQgRW5hYmxlICAgICAgICAqLworCQkJCQkvKiBvciBsZXNzIGludGVycnVwdCBFbmFibGUgICAgICAgICovCiAjZGVmaW5lIE1DQ1IwX0FSRQkweDAwNDAwMDAwCS8qIEF1ZGlvIFJlY2VpdmUgRklGTyAxLzItZnVsbCBvciAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogbW9yZSBpbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAqLworCQkJCQkvKiBtb3JlIGludGVycnVwdCBFbmFibGUgICAgICAgICAgICovCiAjZGVmaW5lIE1DQ1IwX0xCTQkweDAwODAwMDAwCS8qIExvb2stQmFjayBNb2RlICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTUNDUjBfRUNQCUZsZCAoMiwgMjQpCS8qIEV4dGVybmFsIENsb2NrIFByZXNjYWxlciAtIDEgICAgKi8KICNkZWZpbmUgTUNDUjBfRXh0Q2xrRGl2KERpdikgICAgCS8qICBFeHRlcm5hbCBDbG9jayBEaXZpc29yIFsxLi40XSAgKi8gXAotICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMSkgPDwgRlNoZnQgKE1DQ1IwX0VDUCkpCisJCQkoKChEaXYpIC0gMSkgPDwgRlNoZnQgKE1DQ1IwX0VDUCkpCiAKICNkZWZpbmUgTUNEUjBfREFUQQlGbGQgKDEyLCA0KQkvKiByZWNlaXZlL3RyYW5zbWl0IGF1ZGlvIERBVEEgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIEZJRk9zICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogRklGT3MgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAjZGVmaW5lIE1DRFIxX0RBVEEJRmxkICgxNCwgMikJLyogcmVjZWl2ZS90cmFuc21pdCB0ZWxlY29tIERBVEEgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBGSUZPcyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIEZJRk9zICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWNlaXZlL3RyYW5zbWl0IENPREVDIHJlZy4gICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIEZJRk9zOiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcmVjZWl2ZS90cmFuc21pdCBDT0RFQyByZWcuICAgICAqLworCQkJCQkvKiBGSUZPczogICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIE1DRFIyX0RBVEEJRmxkICgxNiwgMCkJLyogIHJlZy4gREFUQSAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBNQ0RSMl9SVwkweDAwMDEwMDAwCS8qICByZWcuIFJlYWQvV3JpdGUgKHRyYW5zbWl0KSAgICAgKi8KICNkZWZpbmUgTUNEUjJfUmQJKE1DRFIyX1JXKjApCS8qICAgcmVnLiBSZWFkICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTk2NSwzNyArOTY1LDM3IEBACiAjZGVmaW5lIE1DRFIyX0FERAlGbGQgKDQsIDE3KQkvKiAgcmVnLiBBRERyZXNzICAgICAgICAgICAgICAgICAgICovCiAKICNkZWZpbmUgTUNTUl9BVFMJMHgwMDAwMDAwMQkvKiBBdWRpbyBUcmFuc21pdCBGSUZPIDEvMi1mdWxsICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG9yIGxlc3MgU2VydmljZSByZXF1ZXN0IChyZWFkKSAgKi8KKwkJCQkJLyogb3IgbGVzcyBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAqLwogI2RlZmluZSBNQ1NSX0FSUwkweDAwMDAwMDAyCS8qIEF1ZGlvIFJlY2VpdmUgRklGTyAxLzItZnVsbCBvciAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogbW9yZSBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAqLworCQkJCQkvKiBtb3JlIFNlcnZpY2UgcmVxdWVzdCAocmVhZCkgICAgICovCiAjZGVmaW5lIE1DU1JfVFRTCTB4MDAwMDAwMDQJLyogVGVsZWNvbSBUcmFuc21pdCBGSUZPIDEvMi1mdWxsICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBvciBsZXNzIFNlcnZpY2UgcmVxdWVzdCAocmVhZCkgICovCisJCQkJCS8qIG9yIGxlc3MgU2VydmljZSByZXF1ZXN0IChyZWFkKSAgKi8KICNkZWZpbmUgTUNTUl9UUlMJMHgwMDAwMDAwOAkvKiBUZWxlY29tIFJlY2VpdmUgRklGTyAxLzItZnVsbCAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIG9yIG1vcmUgU2VydmljZSByZXF1ZXN0IChyZWFkKSAgKi8KKwkJCQkJLyogb3IgbW9yZSBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAqLwogI2RlZmluZSBNQ1NSX0FUVQkweDAwMDAwMDEwCS8qIEF1ZGlvIFRyYW5zbWl0IEZJRk8gVW5kZXItcnVuICAgKi8KICNkZWZpbmUgTUNTUl9BUk8JMHgwMDAwMDAyMAkvKiBBdWRpbyBSZWNlaXZlIEZJRk8gT3Zlci1ydW4gICAgICovCiAjZGVmaW5lIE1DU1JfVFRVCTB4MDAwMDAwNDAJLyogVGVsZWNvbSBUcmFuc21pdCBGSUZPIFVuZGVyLXJ1biAqLwogI2RlZmluZSBNQ1NSX1RSTwkweDAwMDAwMDgwCS8qIFRlbGVjb20gUmVjZWl2ZSBGSUZPIE92ZXItcnVuICAgKi8KICNkZWZpbmUgTUNTUl9BTkYJMHgwMDAwMDEwMAkvKiBBdWRpbyB0cmFuc21pdCBGSUZPIE5vdCBGdWxsICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChyZWFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogKHJlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBNQ1NSX0FORQkweDAwMDAwMjAwCS8qIEF1ZGlvIHJlY2VpdmUgRklGTyBOb3QgRW1wdHkgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKHJlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiAocmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIE1DU1JfVE5GCTB4MDAwMDA0MDAJLyogVGVsZWNvbSB0cmFuc21pdCBGSUZPIE5vdCBGdWxsICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAocmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIChyZWFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTUNTUl9UTkUJMHgwMDAwMDgwMAkvKiBUZWxlY29tIHJlY2VpdmUgRklGTyBOb3QgRW1wdHkgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChyZWFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogKHJlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBNQ1NSX0NXQwkweDAwMDAxMDAwCS8qIENPREVDIHJlZ2lzdGVyIFdyaXRlIENvbXBsZXRlZCAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKHJlYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiAocmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIE1DU1JfQ1JDCTB4MDAwMDIwMDAJLyogQ09ERUMgcmVnaXN0ZXIgUmVhZCBDb21wbGV0ZWQgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAocmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIChyZWFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTUNTUl9BQ0UJMHgwMDAwNDAwMAkvKiBBdWRpbyBDT0RFQyBFbmFibGVkIChyZWFkKSAgICAgICovCiAjZGVmaW5lIE1DU1JfVENFCTB4MDAwMDgwMDAJLyogVGVsZWNvbSBDT0RFQyBFbmFibGVkIChyZWFkKSAgICAqLwogCiAjZGVmaW5lIE1DQ1IxX0NGUwkweDAwMTAwMDAwCS8qIENsb2NrIEZyZXEuIFNlbGVjdCAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTUNDUjFfRjEyTUh6CShNQ0NSMV9DRlMqMCkJLyogIEZyZXEuIChmbWMpID0gfiAxMiBNSHogICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgKDExLjk4MSBNSHopICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qICAoMTEuOTgxIE1IeikgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTUNDUjFfRjEwTUh6CShNQ0NSMV9DRlMqMSkJLyogIEZyZXEuIChmbWMpID0gfiAxMCBNSHogICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgKDkuNTg1IE1IeikgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qICAoOS41ODUgTUh6KSAgICAgICAgICAgICAgICAgICAgKi8KIAogCiAvKgpAQCAtMTAyNiw1MyArMTAyNiw1MyBAQAogCiAjaWYgTEFOR1VBR0UgPT0gQwogI2RlZmluZSBTZXI0U1NDUjAJICAgICAgICAJLyogU2VyLiBwb3J0IDQgU1NQIENvbnRyb2wgUmVnLiAwICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjRTU0NSMCkpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyNFNTQ1IwKSkpCiAjZGVmaW5lIFNlcjRTU0NSMQkgICAgICAgIAkvKiBTZXIuIHBvcnQgNCBTU1AgQ29udHJvbCBSZWcuIDEgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyNFNTQ1IxKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXI0U1NDUjEpKSkKICNkZWZpbmUgU2VyNFNTRFIJICAgICAgICAJLyogU2VyLiBwb3J0IDQgU1NQIERhdGEgUmVnLiAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjRTU0RSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXI0U1NEUikpKQogI2RlZmluZSBTZXI0U1NTUgkgICAgICAgIAkvKiBTZXIuIHBvcnQgNCBTU1AgU3RhdHVzIFJlZy4gICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2VyNFNTU1IpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NlcjRTU1NSKSkpCiAjZW5kaWYgLyogTEFOR1VBR0UgPT0gQyAqLwogCiAjZGVmaW5lIFNTQ1IwX0RTUwlGbGQgKDQsIDApCS8qIERhdGEgU2l6ZSAtIDEgU2VsZWN0IFszLi4xNV0gICAgKi8KICNkZWZpbmUgU1NDUjBfRGF0YVNpemUoU2l6ZSkgICAgCS8qICBEYXRhIFNpemUgU2VsZWN0IFs0Li4xNl0gICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKChTaXplKSAtIDEpIDw8IEZTaGZ0IChTU0NSMF9EU1MpKQorCQkJKCgoU2l6ZSkgLSAxKSA8PCBGU2hmdCAoU1NDUjBfRFNTKSkKICNkZWZpbmUgU1NDUjBfRlJGCUZsZCAoMiwgNCkJLyogRlJhbWUgRm9ybWF0ICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTU0NSMF9Nb3Rvcm9sYQkgICAgICAgIAkvKiAgTW90b3JvbGEgU2VyaWFsIFBlcmlwaGVyYWwgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIEludGVyZmFjZSAoU1BJKSBmb3JtYXQgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgwIDw8IEZTaGZ0IChTU0NSMF9GUkYpKQorCQkJCQkvKiAgSW50ZXJmYWNlIChTUEkpIGZvcm1hdCAgICAgICAgICovIFwKKwkJCSgwIDw8IEZTaGZ0IChTU0NSMF9GUkYpKQogI2RlZmluZSBTU0NSMF9USQkgICAgICAgIAkvKiAgVGV4YXMgSW5zdHJ1bWVudHMgU3luY2hyb25vdXMgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFNlcmlhbCBmb3JtYXQgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgxIDw8IEZTaGZ0IChTU0NSMF9GUkYpKQorCQkJCQkvKiAgU2VyaWFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgxIDw8IEZTaGZ0IChTU0NSMF9GUkYpKQogI2RlZmluZSBTU0NSMF9OYXRpb25hbAkgICAgICAgIAkvKiAgTmF0aW9uYWwgTWljcm93aXJlIGZvcm1hdCAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDIgPDwgRlNoZnQgKFNTQ1IwX0ZSRikpCisJCQkoMiA8PCBGU2hmdCAoU1NDUjBfRlJGKSkKICNkZWZpbmUgU1NDUjBfU1NFCTB4MDAwMDAwODAJLyogU1NQIEVuYWJsZSAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTU0NSMF9TQ1IJRmxkICg4LCA4KQkvKiBTZXJpYWwgQ2xvY2sgUmF0ZSBkaXZpc29yLzIgLSAxICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGZzcyA9IGZ4dGwvKDIqKFNDUiArIDEpKSAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogVHNzID0gMiooU0NSICsgMSkqVHh0bCAgICAgICAgICAqLworCQkJCQkvKiBmc3MgPSBmeHRsLygyKihTQ1IgKyAxKSkgICAgICAgICovCisJCQkJCS8qIFRzcyA9IDIqKFNDUiArIDEpKlR4dGwgICAgICAgICAgKi8KICNkZWZpbmUgU1NDUjBfU2VyQ2xrRGl2KERpdikgICAgCS8qICBTZXJpYWwgQ2xvY2sgRGl2aXNvciBbMi4uNTEyXSAgKi8gXAotICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMikvMiA8PCBGU2hmdCAoU1NDUjBfU0NSKSkKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGZzcyA9IGZ4dGwvKDIqRmxvb3IgKERpdi8yKSkgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgVHNzID0gMipGbG9vciAoRGl2LzIpKlR4dGwgICAgICovCisJCQkoKChEaXYpIC0gMikvMiA8PCBGU2hmdCAoU1NDUjBfU0NSKSkKKwkJCQkJLyogIGZzcyA9IGZ4dGwvKDIqRmxvb3IgKERpdi8yKSkgICAqLworCQkJCQkvKiAgVHNzID0gMipGbG9vciAoRGl2LzIpKlR4dGwgICAgICovCiAjZGVmaW5lIFNTQ1IwX0NlaWxTZXJDbGtEaXYoRGl2KQkvKiAgQ2VpbC4gb2YgU2VyQ2xrRGl2IFsyLi41MTJdICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCgoRGl2KSAtIDEpLzIgPDwgRlNoZnQgKFNTQ1IwX1NDUikpCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBmc3MgPSBmeHRsLygyKkNlaWwgKERpdi8yKSkgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFRzcyA9IDIqQ2VpbCAoRGl2LzIpKlR4dGwgICAgICAqLworCQkJKCgoRGl2KSAtIDEpLzIgPDwgRlNoZnQgKFNTQ1IwX1NDUikpCisJCQkJCS8qICBmc3MgPSBmeHRsLygyKkNlaWwgKERpdi8yKSkgICAgKi8KKwkJCQkJLyogIFRzcyA9IDIqQ2VpbCAoRGl2LzIpKlR4dGwgICAgICAqLwogCiAjZGVmaW5lIFNTQ1IxX1JJRQkweDAwMDAwMDAxCS8qIFJlY2VpdmUgRklGTyAxLzItZnVsbCBvciBtb3JlICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNTQ1IxX1RJRQkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IEZJRk8gMS8yLWZ1bGwgb3IgbGVzcyAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogSW50ZXJydXB0IEVuYWJsZSAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNTQ1IxX0xCTQkweDAwMDAwMDA0CS8qIExvb2stQmFjayBNb2RlICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU1NDUjFfU1BPCTB4MDAwMDAwMDgJLyogU2FtcGxlIGNsb2NrIChTQ0xLKSBQT2xhcml0eSAgICAqLwogI2RlZmluZSBTU0NSMV9TQ2xrSWFjdEwJKFNTQ1IxX1NQTyowKQkvKiAgU2FtcGxlIENsb2NrIEluYWN0aXZlIExvdyAgICAgICovCiAjZGVmaW5lIFNTQ1IxX1NDbGtJYWN0SAkoU1NDUjFfU1BPKjEpCS8qICBTYW1wbGUgQ2xvY2sgSW5hY3RpdmUgSGlnaCAgICAgKi8KICNkZWZpbmUgU1NDUjFfU1AJMHgwMDAwMDAxMAkvKiBTYW1wbGUgY2xvY2sgKFNDTEspIFBoYXNlICAgICAgICovCiAjZGVmaW5lIFNTQ1IxX1NDbGsxUAkoU1NDUjFfU1AqMCkJLyogIFNhbXBsZSBDbG9jayBhY3RpdmUgMSBQZXJpb2QgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgYWZ0ZXIgZnJhbWUgKFNGUk0sIDFzdCBlZGdlKSAgICovCisJCQkJCS8qICBhZnRlciBmcmFtZSAoU0ZSTSwgMXN0IGVkZ2UpICAgKi8KICNkZWZpbmUgU1NDUjFfU0NsazFfMlAJKFNTQ1IxX1NQKjEpCS8qICBTYW1wbGUgQ2xvY2sgYWN0aXZlIDEvMiBQZXJpb2QgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGFmdGVyIGZyYW1lIChTRlJNLCAxc3QgZWRnZSkgICAqLworCQkJCQkvKiAgYWZ0ZXIgZnJhbWUgKFNGUk0sIDFzdCBlZGdlKSAgICovCiAjZGVmaW5lIFNTQ1IxX0VDUwkweDAwMDAwMDIwCS8qIEV4dGVybmFsIENsb2NrIFNlbGVjdCAgICAgICAgICAgKi8KICNkZWZpbmUgU1NDUjFfSW50Q2xrCShTU0NSMV9FQ1MqMCkJLyogIEludGVybmFsIENsb2NrICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBTU0NSMV9FeHRDbGsJKFNTQ1IxX0VDUyoxKQkvKiAgRXh0ZXJuYWwgQ2xvY2sgKEdQSU8gWzE5XSkgICAgICovCkBAIC0xMDgzLDkgKzEwODMsOSBAQAogI2RlZmluZSBTU1NSX1JORQkweDAwMDAwMDA0CS8qIFJlY2VpdmUgRklGTyBOb3QgRW1wdHkgKHJlYWQpICAgKi8KICNkZWZpbmUgU1NTUl9CU1kJMHgwMDAwMDAwOAkvKiBTU1AgQnVTWSAocmVhZCkgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFNTU1JfVEZTCTB4MDAwMDAwMTAJLyogVHJhbnNtaXQgRklGTyAxLzItZnVsbCBvciBsZXNzICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBTZXJ2aWNlIHJlcXVlc3QgKHJlYWQpICAgICAgICAgICovCisJCQkJCS8qIFNlcnZpY2UgcmVxdWVzdCAocmVhZCkgICAgICAgICAgKi8KICNkZWZpbmUgU1NTUl9SRlMJMHgwMDAwMDAyMAkvKiBSZWNlaXZlIEZJRk8gMS8yLWZ1bGwgb3IgbW9yZSAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFNlcnZpY2UgcmVxdWVzdCAocmVhZCkgICAgICAgICAgKi8KKwkJCQkJLyogU2VydmljZSByZXF1ZXN0IChyZWFkKSAgICAgICAgICAqLwogI2RlZmluZSBTU1NSX1JPUgkweDAwMDAwMDQwCS8qIFJlY2VpdmUgRklGTyBPdmVyLVJ1biAgICAgICAgICAgKi8KIAogCkBAIC0xMTEyLDcgKzExMTIsNyBAQAogICovCiAKICNkZWZpbmUgX09TTVIoTmIpCSAgICAgICAgCS8qIE9TIHRpbWVyIE1hdGNoIFJlZy4gWzAuLjNdICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHg5MDAwMDAwMCArIChOYikqNCkKKwkJCSgweDkwMDAwMDAwICsgKE5iKSo0KQogI2RlZmluZSBfT1NNUjAgIAlfT1NNUiAoMCkJLyogT1MgdGltZXIgTWF0Y2ggUmVnLiAwICAgICAgICAgICAqLwogI2RlZmluZSBfT1NNUjEgIAlfT1NNUiAoMSkJLyogT1MgdGltZXIgTWF0Y2ggUmVnLiAxICAgICAgICAgICAqLwogI2RlZmluZSBfT1NNUjIgIAlfT1NNUiAoMikJLyogT1MgdGltZXIgTWF0Y2ggUmVnLiAyICAgICAgICAgICAqLwpAQCAtMTEyNCwzMyArMTEyNCwzMyBAQAogCiAjaWYgTEFOR1VBR0UgPT0gQwogI2RlZmluZSBPU01SICAgIAkgICAgICAgIAkvKiBPUyB0aW1lciBNYXRjaCBSZWcuIFswLi4zXSAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX09TTVIgKDApKSkKKwkJCSgodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9PU01SICgwKSkpCiAjZGVmaW5lIE9TTVIwICAgCShPU01SIFswXSkJLyogT1MgdGltZXIgTWF0Y2ggUmVnLiAwICAgICAgICAgICAqLwogI2RlZmluZSBPU01SMSAgIAkoT1NNUiBbMV0pCS8qIE9TIHRpbWVyIE1hdGNoIFJlZy4gMSAgICAgICAgICAgKi8KICNkZWZpbmUgT1NNUjIgICAJKE9TTVIgWzJdKQkvKiBPUyB0aW1lciBNYXRjaCBSZWcuIDIgICAgICAgICAgICovCiAjZGVmaW5lIE9TTVIzICAgCShPU01SIFszXSkJLyogT1MgdGltZXIgTWF0Y2ggUmVnLiAzICAgICAgICAgICAqLwogI2RlZmluZSBPU0NSICAgIAkgICAgICAgIAkvKiBPUyB0aW1lciBDb3VudGVyIFJlZy4gICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfT1NDUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfT1NDUikpKQogI2RlZmluZSBPU1NSICAgIAkgICAgICAgIAkvKiBPUyB0aW1lciBTdGF0dXMgUmVnLiAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfT1NTUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfT1NTUikpKQogI2RlZmluZSBPV0VSICAgIAkgICAgICAgIAkvKiBPUyB0aW1lciBXYXRjaC1kb2cgRW5hYmxlIFJlZy4gICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfT1dFUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfT1dFUikpKQogI2RlZmluZSBPSUVSICAgIAkgICAgICAgIAkvKiBPUyB0aW1lciBJbnRlcnJ1cHQgRW5hYmxlIFJlZy4gICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfT0lFUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfT0lFUikpKQogI2VuZGlmIC8qIExBTkdVQUdFID09IEMgKi8KIAogI2RlZmluZSBPU1NSX00oTmIpCSAgICAgICAgCS8qIE1hdGNoIGRldGVjdGVkIFswLi4zXSAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwMDAwMDAwMSA8PCAoTmIpKQorCQkJKDB4MDAwMDAwMDEgPDwgKE5iKSkKICNkZWZpbmUgT1NTUl9NMCAJT1NTUl9NICgwKQkvKiBNYXRjaCBkZXRlY3RlZCAwICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIE9TU1JfTTEgCU9TU1JfTSAoMSkJLyogTWF0Y2ggZGV0ZWN0ZWQgMSAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBPU1NSX00yIAlPU1NSX00gKDIpCS8qIE1hdGNoIGRldGVjdGVkIDIgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgT1NTUl9NMyAJT1NTUl9NICgzKQkvKiBNYXRjaCBkZXRlY3RlZCAzICAgICAgICAgICAgICAgICovCiAKICNkZWZpbmUgT1dFUl9XTUUJMHgwMDAwMDAwMQkvKiBXYXRjaC1kb2cgTWF0Y2ggRW5hYmxlICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChzZXQgb25seSkgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogKHNldCBvbmx5KSAgICAgICAgICAgICAgICAgICAgICAqLwogCiAjZGVmaW5lIE9JRVJfRShOYikJICAgICAgICAJLyogbWF0Y2ggaW50ZXJydXB0IEVuYWJsZSBbMC4uM10gICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDAwMDAwMDAxIDw8IChOYikpCisJCQkoMHgwMDAwMDAwMSA8PCAoTmIpKQogI2RlZmluZSBPSUVSX0UwIAlPSUVSX0UgKDApCS8qIG1hdGNoIGludGVycnVwdCBFbmFibGUgMCAgICAgICAgKi8KICNkZWZpbmUgT0lFUl9FMSAJT0lFUl9FICgxKQkvKiBtYXRjaCBpbnRlcnJ1cHQgRW5hYmxlIDEgICAgICAgICovCiAjZGVmaW5lIE9JRVJfRTIgCU9JRVJfRSAoMikJLyogbWF0Y2ggaW50ZXJydXB0IEVuYWJsZSAyICAgICAgICAqLwpAQCAtMTE4MCwyMSArMTE4MCwyMSBAQAogCiAjaWYgTEFOR1VBR0UgPT0gQwogI2RlZmluZSBSVEFSICAgIAkgICAgICAgIAkvKiBSVEMgQWxhcm0gUmVnLiAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUlRBUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUlRBUikpKQogI2RlZmluZSBSQ05SICAgIAkgICAgICAgIAkvKiBSVEMgQ291TnQgUmVnLiAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUkNOUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUkNOUikpKQogI2RlZmluZSBSVFRSICAgIAkgICAgICAgIAkvKiBSVEMgVHJpbSBSZWcuICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUlRUUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUlRUUikpKQogI2RlZmluZSBSVFNSICAgIAkgICAgICAgIAkvKiBSVEMgU3RhdHVzIFJlZy4gICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUlRTUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUlRTUikpKQogI2VuZGlmIC8qIExBTkdVQUdFID09IEMgKi8KIAogI2RlZmluZSBSVFRSX0MgIAlGbGQgKDE2LCAwKQkvKiBjbG9jayBkaXZpZGVyIENvdW50IC0gMSAgICAgICAgICovCiAjZGVmaW5lIFJUVFJfRCAgCUZsZCAoMTAsIDE2KQkvKiB0cmltIERlbGV0ZSBjb3VudCAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGZydGMgPSAoMTAyMyooQyArIDEpIC0gRCkqZnJ0eC8gKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogICAgICAgICgxMDIzKihDICsgMSleMikgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBUcnRjID0gKDEwMjMqKEMgKyAxKV4yKSpUcnR4LyAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAgICAgICAoMTAyMyooQyArIDEpIC0gRCkgICAgICAgKi8KKwkJCQkJLyogZnJ0YyA9ICgxMDIzKihDICsgMSkgLSBEKSpmcnR4LyAqLworCQkJCQkvKiAgICAgICAgKDEwMjMqKEMgKyAxKV4yKSAgICAgICAgICovCisJCQkJCS8qIFRydGMgPSAoMTAyMyooQyArIDEpXjIpKlRydHgvICAgKi8KKwkJCQkJLyogICAgICAgICgxMDIzKihDICsgMSkgLSBEKSAgICAgICAqLwogCiAjZGVmaW5lIFJUU1JfQUwgCTB4MDAwMDAwMDEJLyogQUxhcm0gZGV0ZWN0ZWQgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBSVFNSX0haIAkweDAwMDAwMDAyCS8qIDEgSHogY2xvY2sgZGV0ZWN0ZWQgICAgICAgICAgICAgKi8KQEAgLTEyMzYsMjEgKzEyMzYsMjEgQEAKIAogI2lmIExBTkdVQUdFID09IEMKICNkZWZpbmUgUE1DUiAgICAJICAgICAgICAJLyogUE0gQ29udHJvbCBSZWcuICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BNQ1IpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BNQ1IpKSkKICNkZWZpbmUgUFNTUiAgICAJICAgICAgICAJLyogUE0gU2xlZXAgU3RhdHVzIFJlZy4gICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BTU1IpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BTU1IpKSkKICNkZWZpbmUgUFNQUiAgICAJICAgICAgICAJLyogUE0gU2NyYXRjaC1QYWQgUmVnLiAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BTUFIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BTUFIpKSkKICNkZWZpbmUgUFdFUiAgICAJICAgICAgICAJLyogUE0gV2FrZS11cCBFbmFibGUgUmVnLiAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BXRVIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BXRVIpKSkKICNkZWZpbmUgUENGUiAgICAJICAgICAgICAJLyogUE0gZ2VuZXJhbCBDb25GaWd1cmF0aW9uIFJlZy4gICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BDRlIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BDRlIpKSkKICNkZWZpbmUgUFBDUiAgICAJICAgICAgICAJLyogUE0gUExMIENvbmZpZ3VyYXRpb24gUmVnLiAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BQQ1IpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BQQ1IpKSkKICNkZWZpbmUgUEdTUiAgICAJICAgICAgICAJLyogUE0gR1BJTyBTbGVlcCBzdGF0ZSBSZWcuICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BHU1IpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BHU1IpKSkKICNkZWZpbmUgUE9TUiAgICAJICAgICAgICAJLyogUE0gT3NjaWxsYXRvciBTdGF0dXMgUmVnLiAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BPU1IpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BPU1IpKSkKIAogI2VsaWYgTEFOR1VBR0UgPT0gQXNzZW1ibHkKICNkZWZpbmUgUE1DUiAgICAgICAgICAJKGlvX3AydiAoX1BNQ1IpKQpAQCAtMTI2OCw3ICsxMjY4LDcgQEAKIAogI2RlZmluZSBQU1NSX1NTIAkweDAwMDAwMDAxCS8qIFNvZnR3YXJlIFNsZWVwICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUFNTUl9CRlMJMHgwMDAwMDAwMgkvKiBCYXR0ZXJ5IEZhdWx0IFN0YXR1cyAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChCQVRUX0ZBVUxUKSAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogKEJBVFRfRkFVTFQpICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBQU1NSX1ZGUwkweDAwMDAwMDA0CS8qIFZkZCBGYXVsdCBTdGF0dXMgKFZERF9GQVVMVCkgICAgKi8KICNkZWZpbmUgUFNTUl9ESCAJMHgwMDAwMDAwOAkvKiBEUkFNIGNvbnRyb2wgSG9sZCAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFBTU1JfUEggCTB4MDAwMDAwMTAJLyogUGVyaXBoZXJhbCBjb250cm9sIEhvbGQgICAgICAgICAqLwpAQCAtMTMxNCw0MiArMTMxNCw0MiBAQAogI2RlZmluZSBQQ0ZSX1N0TWVtTmVnCShQQ0ZSX0ZTKjApCS8qICBTdGF0aWMgTWVtb3J5IHBpbnMgTmVnYXRlZCAoMSkgKi8KICNkZWZpbmUgUENGUl9TdE1lbUZsdAkoUENGUl9GUyoxKQkvKiAgU3RhdGljIE1lbW9yeSBwaW5zIEZsb2F0aW5nICAgICovCiAjZGVmaW5lIFBDRlJfRk8gCTB4MDAwMDAwMDgJLyogRm9yY2UgUlRDIG9zY2lsbGF0b3IgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoMzIuNzY4IGtIeikgZW5hYmxlIE9uICAgICAgICAgICovCisJCQkJCS8qICgzMi43Njgga0h6KSBlbmFibGUgT24gICAgICAgICAgKi8KIAogI2RlZmluZSBQUENSX0NDRglGbGQgKDUsIDApCS8qIENQVSBjb3JlIENsb2NrIChDQ0xLKSBGcmVxLiAgICAgKi8KICNkZWZpbmUgUFBDUl9GeDE2CSAgICAgICAgCS8qICBGcmVxLiB4IDE2IChmY3B1ID0gMTYqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwMCA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MDAgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDIwCSAgICAgICAgCS8qICBGcmVxLiB4IDIwIChmY3B1ID0gMjAqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwMSA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MDEgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDI0CSAgICAgICAgCS8qICBGcmVxLiB4IDI0IChmY3B1ID0gMjQqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwMiA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MDIgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDI4CSAgICAgICAgCS8qICBGcmVxLiB4IDI4IChmY3B1ID0gMjgqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwMyA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MDMgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDMyCSAgICAgICAgCS8qICBGcmVxLiB4IDMyIChmY3B1ID0gMzIqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwNCA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MDQgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDM2CSAgICAgICAgCS8qICBGcmVxLiB4IDM2IChmY3B1ID0gMzYqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwNSA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MDUgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDQwCSAgICAgICAgCS8qICBGcmVxLiB4IDQwIChmY3B1ID0gNDAqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwNiA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MDYgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDQ0CSAgICAgICAgCS8qICBGcmVxLiB4IDQ0IChmY3B1ID0gNDQqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwNyA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MDcgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDQ4CSAgICAgICAgCS8qICBGcmVxLiB4IDQ4IChmY3B1ID0gNDgqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwOCA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MDggPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDUyCSAgICAgICAgCS8qICBGcmVxLiB4IDUyIChmY3B1ID0gNTIqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwOSA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MDkgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDU2CSAgICAgICAgCS8qICBGcmVxLiB4IDU2IChmY3B1ID0gNTYqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwQSA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MEEgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDYwCSAgICAgICAgCS8qICBGcmVxLiB4IDYwIChmY3B1ID0gNjAqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwQiA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MEIgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDY0CSAgICAgICAgCS8qICBGcmVxLiB4IDY0IChmY3B1ID0gNjQqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwQyA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MEMgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDY4CSAgICAgICAgCS8qICBGcmVxLiB4IDY4IChmY3B1ID0gNjgqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwRCA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MEQgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDcyCSAgICAgICAgCS8qICBGcmVxLiB4IDcyIChmY3B1ID0gNzIqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwRSA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJKDB4MEUgPDwgRlNoZnQgKFBQQ1JfQ0NGKSkKICNkZWZpbmUgUFBDUl9GeDc2CSAgICAgICAgCS8qICBGcmVxLiB4IDc2IChmY3B1ID0gNzYqZnh0bCkgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwRiA8PCBGU2hmdCAoUFBDUl9DQ0YpKQotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgMy42ODY0IE1IeiBjcnlzdGFsIChmeHRsKTogICAgICovCisJCQkoMHgwRiA8PCBGU2hmdCAoUFBDUl9DQ0YpKQorCQkJCQkvKiAgMy42ODY0IE1IeiBjcnlzdGFsIChmeHRsKTogICAgICovCiAjZGVmaW5lIFBQQ1JfRjU5XzBNSHoJUFBDUl9GeDE2CS8qICAgRnJlcS4gKGZjcHUpID0gIDU5LjAgTUh6ICAgICAgKi8KICNkZWZpbmUgUFBDUl9GNzNfN01IeglQUENSX0Z4MjAJLyogICBGcmVxLiAoZmNwdSkgPSAgNzMuNyBNSHogICAgICAqLwogI2RlZmluZSBQUENSX0Y4OF81TUh6CVBQQ1JfRngyNAkvKiAgIEZyZXEuIChmY3B1KSA9ICA4OC41IE1IeiAgICAgICovCkBAIC0xMzY2LDcgKzEzNjYsNyBAQAogI2RlZmluZSBQUENSX0YyNTBfN01IeglQUENSX0Z4NjgJLyogICBGcmVxLiAoZmNwdSkgPSAyNTAuNyBNSHogICAgICAqLwogI2RlZmluZSBQUENSX0YyNjVfNE1IeglQUENSX0Z4NzIJLyogICBGcmVxLiAoZmNwdSkgPSAyNjUuNCBNSHogICAgICAqLwogI2RlZmluZSBQUENSX0YyODBfMk1IeglQUENSX0Z4NzYJLyogICBGcmVxLiAoZmNwdSkgPSAyODAuMiBNSHogICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgMy41Nzk1IE1IeiBjcnlzdGFsIChmeHRsKTogICAgICovCisJCQkJCS8qICAzLjU3OTUgTUh6IGNyeXN0YWwgKGZ4dGwpOiAgICAgKi8KICNkZWZpbmUgUFBDUl9GNTdfM01IeglQUENSX0Z4MTYJLyogICBGcmVxLiAoZmNwdSkgPSAgNTcuMyBNSHogICAgICAqLwogI2RlZmluZSBQUENSX0Y3MV82TUh6CVBQQ1JfRngyMAkvKiAgIEZyZXEuIChmY3B1KSA9ICA3MS42IE1IeiAgICAgICovCiAjZGVmaW5lIFBQQ1JfRjg1XzlNSHoJUFBDUl9GeDI0CS8qICAgRnJlcS4gKGZjcHUpID0gIDg1LjkgTUh6ICAgICAgKi8KQEAgLTE0MDEsOSArMTQwMSw5IEBACiAKICNpZiBMQU5HVUFHRSA9PSBDCiAjZGVmaW5lIFJTUlIgICAgCSAgICAgICAgCS8qIFJDIFNvZnR3YXJlIFJlc2V0IFJlZy4gICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9SU1JSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9SU1JSKSkpCiAjZGVmaW5lIFJDU1IgICAgCSAgICAgICAgCS8qIFJDIFN0YXR1cyBSZWcuICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9SQ1NSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9SQ1NSKSkpCiAjZW5kaWYgLyogTEFOR1VBR0UgPT0gQyAqLwogCiAjZGVmaW5lIFJTUlJfU1dSCTB4MDAwMDAwMDEJLyogU29mdFdhcmUgUmVzZXQgKHNldCBvbmx5KSAgICAgICAqLwpAQCAtMTQyNSwxOCArMTQyNSwxOCBAQAogCiAjaWYgTEFOR1VBR0UgPT0gQwogI2RlZmluZSBUVUNSICAgIAkgICAgICAgIAkvKiBUZXN0IFVuaXQgQ29udHJvbCBSZWcuICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfVFVDUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfVFVDUikpKQogI2VuZGlmIC8qIExBTkdVQUdFID09IEMgKi8KIAogI2RlZmluZSBUVUNSX1RJQwkweDAwMDAwMDQwCS8qIFRJQyBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVFVDUl9UVFNUCTB4MDAwMDAwODAJLyogVHJpbSBUZVNUIG1vZGUgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUVUNSX1JDUkMJMHgwMDAwMDEwMAkvKiBSaWNoYXJkJ3MgQ3ljbGljIFJlZHVuZGFuY3kgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIENoZWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogQ2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUVUNSX1BNRAkweDAwMDAwMjAwCS8qIFBvd2VyIE1hbmFnZW1lbnQgRGlzYWJsZSAgICAgICAgKi8KICNkZWZpbmUgVFVDUl9NUiAJMHgwMDAwMDQwMAkvKiBNZW1vcnkgUmVxdWVzdCBtb2RlICAgICAgICAgICAgICovCiAjZGVmaW5lIFRVQ1JfTm9NQgkoVFVDUl9NUiowKQkvKiAgTm8gTWVtb3J5IEJ1cyByZXF1ZXN0ICYgZ3JhbnQgICovCiAjZGVmaW5lIFRVQ1JfTUJHUElPCShUVUNSX01SKjEpCS8qICBNZW1vcnkgQnVzIHJlcXVlc3QgKE1CUkVRKSAmICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGdyYW50IChNQkdOVCkgb24gR1BJTyBbMjI6MjFdICAqLworCQkJCQkvKiAgZ3JhbnQgKE1CR05UKSBvbiBHUElPIFsyMjoyMV0gICovCiAjZGVmaW5lIFRVQ1JfQ1RCCUZsZCAoMywgMjApCS8qIENsb2NrIFRlc3QgQml0cyAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVFVDUl9GREMJMHgwMDgwMDAwMAkvKiBSVEMgRm9yY2UgRGVsZXRlIENvdW50ICAgICAgICAgICovCiAjZGVmaW5lIFRVQ1JfRk1DCTB4MDEwMDAwMDAJLyogRm9yY2UgTWljaGVsbGUncyBDb250cm9sIG1vZGUgICAqLwpAQCAtMTQ0NCwyMyArMTQ0NCwyMyBAQAogI2RlZmluZSBUVUNSX0RQUwkweDA0MDAwMDAwCS8qIERpc2FsbG93IFBhZCBTbGVlcCAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVFVDUl9UU0VMCUZsZCAoMywgMjkpCS8qIGNsb2NrIFRlc3QgU0VMZWN0IG9uIEdQSU8gWzI3XSAgKi8KICNkZWZpbmUgVFVDUl8zMl83NjhrSHoJICAgICAgICAJLyogIDMyLjc2OCBrSHogb3NjLiBvbiBHUElPIFsyN10gICAqLyBcCi0gICAgICAgICAgICAgICAgCSgwIDw8IEZTaGZ0IChUVUNSX1RTRUwpKQorCQkJKDAgPDwgRlNoZnQgKFRVQ1JfVFNFTCkpCiAjZGVmaW5lIFRVQ1JfM182ODY0TUh6CSAgICAgICAgCS8qICAzLjY4NjQgTUh6IG9zYy4gb24gR1BJTyBbMjddICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMSA8PCBGU2hmdCAoVFVDUl9UU0VMKSkKKwkJCSgxIDw8IEZTaGZ0IChUVUNSX1RTRUwpKQogI2RlZmluZSBUVUNSX1ZERAkgICAgICAgIAkvKiAgVkREIHJpbmcgb3NjLi8xNiBvbiBHUElPIFsyN10gICovIFwKLSAgICAgICAgICAgICAgICAJKDIgPDwgRlNoZnQgKFRVQ1JfVFNFTCkpCisJCQkoMiA8PCBGU2hmdCAoVFVDUl9UU0VMKSkKICNkZWZpbmUgVFVDUl85Nk1IelBMTAkgICAgICAgIAkvKiAgOTYgTUh6IFBMTC80IG9uIEdQSU8gWzI3XSAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDMgPDwgRlNoZnQgKFRVQ1JfVFNFTCkpCisJCQkoMyA8PCBGU2hmdCAoVFVDUl9UU0VMKSkKICNkZWZpbmUgVFVDUl9DbG9jawkgICAgICAgIAkvKiAgaW50ZXJuYWwgKGZjcHUvMikgJiAzMi43Njgga0h6ICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIENsb2NrcyBvbiBHUElPIFsyNjoyN10gICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSg0IDw8IEZTaGZ0IChUVUNSX1RTRUwpKQorCQkJCQkvKiAgQ2xvY2tzIG9uIEdQSU8gWzI2OjI3XSAgICAgICAgICovIFwKKwkJCSg0IDw8IEZTaGZ0IChUVUNSX1RTRUwpKQogI2RlZmluZSBUVUNSXzNfNjg2NE1IekEJICAgICAgICAJLyogIDMuNjg2NCBNSHogb3NjLiBvbiBHUElPIFsyN10gICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAoQWx0ZXJuYXRpdmUpICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoNSA8PCBGU2hmdCAoVFVDUl9UU0VMKSkKKwkJCQkJLyogIChBbHRlcm5hdGl2ZSkgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoNSA8PCBGU2hmdCAoVFVDUl9UU0VMKSkKICNkZWZpbmUgVFVDUl9NYWluUExMCSAgICAgICAgCS8qICBNYWluIFBMTC8xNiBvbiBHUElPIFsyN10gICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoNiA8PCBGU2hmdCAoVFVDUl9UU0VMKSkKKwkJCSg2IDw8IEZTaGZ0IChUVUNSX1RTRUwpKQogI2RlZmluZSBUVUNSX1ZEREwJICAgICAgICAJLyogIFZEREwgcmluZyBvc2MuLzQgb24gR1BJTyBbMjddICAqLyBcCi0gICAgICAgICAgICAgICAgCSg3IDw8IEZTaGZ0IChUVUNSX1RTRUwpKQorCQkJKDcgPDwgRlNoZnQgKFRVQ1JfVFNFTCkpCiAKIAogLyoKQEAgLTE0OTksMjEgKzE0OTksMjEgQEAKIAogI2lmIExBTkdVQUdFID09IEMKICNkZWZpbmUgR1BMUiAgICAJICAgICAgICAJLyogR1BJTyBQaW4gTGV2ZWwgUmVnLiAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dQTFIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dQTFIpKSkKICNkZWZpbmUgR1BEUiAgICAJICAgICAgICAJLyogR1BJTyBQaW4gRGlyZWN0aW9uIFJlZy4gICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dQRFIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dQRFIpKSkKICNkZWZpbmUgR1BTUiAgICAJICAgICAgICAJLyogR1BJTyBQaW4gb3V0cHV0IFNldCBSZWcuICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dQU1IpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dQU1IpKSkKICNkZWZpbmUgR1BDUiAgICAJICAgICAgICAJLyogR1BJTyBQaW4gb3V0cHV0IENsZWFyIFJlZy4gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dQQ1IpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dQQ1IpKSkKICNkZWZpbmUgR1JFUiAgICAJICAgICAgICAJLyogR1BJTyBSaXNpbmctRWRnZSBkZXRlY3QgUmVnLiAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dSRVIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dSRVIpKSkKICNkZWZpbmUgR0ZFUiAgICAJICAgICAgICAJLyogR1BJTyBGYWxsaW5nLUVkZ2UgZGV0ZWN0IFJlZy4gICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dGRVIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dGRVIpKSkKICNkZWZpbmUgR0VEUiAgICAJICAgICAgICAJLyogR1BJTyBFZGdlIERldGVjdCBzdGF0dXMgUmVnLiAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dFRFIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dFRFIpKSkKICNkZWZpbmUgR0FGUiAgICAJICAgICAgICAJLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gUmVnLiAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dBRlIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0dBRlIpKSkKICNlbGlmIExBTkdVQUdFID09IEFzc2VtYmx5CiAKICNkZWZpbmUgR1BMUiAgKGlvX3AydiAoX0dQTFIpKQpAQCAtMTUzMSw3ICsxNTMxLDcgQEAKICNkZWZpbmUgR1BJT19NQVgJKDI3KQogCiAjZGVmaW5lIEdQSU9fR1BJTyhOYikJICAgICAgICAJLyogR1BJTyBbMC4uMjddICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDAwMDAwMDAxIDw8IChOYikpCisJCQkoMHgwMDAwMDAwMSA8PCAoTmIpKQogI2RlZmluZSBHUElPX0dQSU8wCUdQSU9fR1BJTyAoMCkJLyogR1BJTyAgWzBdICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBHUElPX0dQSU8xCUdQSU9fR1BJTyAoMSkJLyogR1BJTyAgWzFdICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBHUElPX0dQSU8yCUdQSU9fR1BJTyAoMikJLyogR1BJTyAgWzJdICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTU2Miw3ICsxNTYyLDcgQEAKICNkZWZpbmUgR1BJT19HUElPMjcJR1BJT19HUElPICgyNykJLyogR1BJTyBbMjddICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAjZGVmaW5lIEdQSU9fTEREKE5iKQkgICAgICAgIAkvKiBMQ0QgRGF0YSBbOC4uMTVdIChPKSAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJR1BJT19HUElPICgoTmIpIC0gNikKKwkJCUdQSU9fR1BJTyAoKE5iKSAtIDYpCiAjZGVmaW5lIEdQSU9fTEREOAlHUElPX0xERCAoOCkJLyogTENEIERhdGEgIFs4XSAoTykgICAgICAgICAgICAgICAqLwogI2RlZmluZSBHUElPX0xERDkJR1BJT19MREQgKDkpCS8qIExDRCBEYXRhICBbOV0gKE8pICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgR1BJT19MREQxMAlHUElPX0xERCAoMTApCS8qIExDRCBEYXRhIFsxMF0gKE8pICAgICAgICAgICAgICAgKi8KQEAgLTE1NzEsMjQgKzE1NzEsMjQgQEAKICNkZWZpbmUgR1BJT19MREQxMwlHUElPX0xERCAoMTMpCS8qIExDRCBEYXRhIFsxM10gKE8pICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgR1BJT19MREQxNAlHUElPX0xERCAoMTQpCS8qIExDRCBEYXRhIFsxNF0gKE8pICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgR1BJT19MREQxNQlHUElPX0xERCAoMTUpCS8qIExDRCBEYXRhIFsxNV0gKE8pICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogc2VyLiBwb3J0IDQ6ICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBzZXIuIHBvcnQgNDogICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEdQSU9fU1NQX1RYRAlHUElPX0dQSU8gKDEwKQkvKiAgU1NQIFRyYW5zbWl0IERhdGEgKE8pICAgICAgICAgICovCiAjZGVmaW5lIEdQSU9fU1NQX1JYRAlHUElPX0dQSU8gKDExKQkvKiAgU1NQIFJlY2VpdmUgRGF0YSAoSSkgICAgICAgICAgICovCiAjZGVmaW5lIEdQSU9fU1NQX1NDTEsJR1BJT19HUElPICgxMikJLyogIFNTUCBTYW1wbGUgQ0xvY0sgKE8pICAgICAgICAgICAqLwogI2RlZmluZSBHUElPX1NTUF9TRlJNCUdQSU9fR1BJTyAoMTMpCS8qICBTU1AgU2FtcGxlIEZSYU1lIChPKSAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogc2VyLiBwb3J0IDE6ICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBzZXIuIHBvcnQgMTogICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEdQSU9fVUFSVF9UWEQJR1BJT19HUElPICgxNCkJLyogIFVBUlQgVHJhbnNtaXQgRGF0YSAoTykgICAgICAgICAqLwogI2RlZmluZSBHUElPX1VBUlRfUlhECUdQSU9fR1BJTyAoMTUpCS8qICBVQVJUIFJlY2VpdmUgRGF0YSAoSSkgICAgICAgICAgKi8KICNkZWZpbmUgR1BJT19TRExDX1NDTEsJR1BJT19HUElPICgxNikJLyogIFNETEMgU2FtcGxlIENMb2NLIChJL08pICAgICAgICAqLwogI2RlZmluZSBHUElPX1NETENfQUFGCUdQSU9fR1BJTyAoMTcpCS8qICBTRExDIEFib3J0IEFmdGVyIEZyYW1lIChPKSAgICAgKi8KICNkZWZpbmUgR1BJT19VQVJUX1NDTEsxCUdQSU9fR1BJTyAoMTgpCS8qICBVQVJUIFNhbXBsZSBDTG9jSyAxIChJKSAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogc2VyLiBwb3J0IDQ6ICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBzZXIuIHBvcnQgNDogICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEdQSU9fU1NQX0NMSwlHUElPX0dQSU8gKDE5KQkvKiAgU1NQIGV4dGVybmFsIENMb2NLIChJKSAgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHNlci4gcG9ydCAzOiAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogc2VyLiBwb3J0IDM6ICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBHUElPX1VBUlRfU0NMSzMJR1BJT19HUElPICgyMCkJLyogIFVBUlQgU2FtcGxlIENMb2NLIDMgKEkpICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzZXIuIHBvcnQgNDogICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHNlci4gcG9ydCA0OiAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgR1BJT19NQ1BfQ0xLCUdQSU9fR1BJTyAoMjEpCS8qICBNQ1AgQ0xvY0sgKEkpICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogdGVzdCBjb250cm9sbGVyOiAgICAgICAgICAgICAgICAqLworCQkJCQkvKiB0ZXN0IGNvbnRyb2xsZXI6ICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEdQSU9fVElDX0FDSwlHUElPX0dQSU8gKDIxKQkvKiAgVElDIEFDS25vd2xlZGdlIChPKSAgICAgICAgICAgICovCiAjZGVmaW5lIEdQSU9fTUJHTlQJR1BJT19HUElPICgyMSkJLyogIE1lbW9yeSBCdXMgR3JhTlQgKE8pICAgICAgICAgICAqLwogI2RlZmluZSBHUElPX1RSRVFBCUdQSU9fR1BJTyAoMjIpCS8qICBUSUMgUkVRdWVzdCBBIChJKSAgICAgICAgICAgICAgKi8KQEAgLTE2MzIsMjEgKzE2MzIsMjEgQEAKIAogI2lmIExBTkdVQUdFID09IEMKICNkZWZpbmUgSUNJUCAgICAJICAgICAgICAJLyogSUMgSVJRIFBlbmRpbmcgcmVnLiAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDSVApKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDSVApKSkKICNkZWZpbmUgSUNNUiAgICAJICAgICAgICAJLyogSUMgTWFzayBSZWcuICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDTVIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDTVIpKSkKICNkZWZpbmUgSUNMUiAgICAJICAgICAgICAJLyogSUMgTGV2ZWwgUmVnLiAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDTFIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDTFIpKSkKICNkZWZpbmUgSUNDUiAgICAJICAgICAgICAJLyogSUMgQ29udHJvbCBSZWcuICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDQ1IpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDQ1IpKSkKICNkZWZpbmUgSUNGUCAgICAJICAgICAgICAJLyogSUMgRklRIFBlbmRpbmcgcmVnLiAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDRlApKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDRlApKSkKICNkZWZpbmUgSUNQUiAgICAJICAgICAgICAJLyogSUMgUGVuZGluZyBSZWcuICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDUFIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0lDUFIpKSkKICNlbmRpZiAvKiBMQU5HVUFHRSA9PSBDICovCiAKICNkZWZpbmUgSUNfR1BJTyhOYikJICAgICAgICAJLyogR1BJTyBbMC4uMTBdICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDAwMDAwMDAxIDw8IChOYikpCisJCQkoMHgwMDAwMDAwMSA8PCAoTmIpKQogI2RlZmluZSBJQ19HUElPMAlJQ19HUElPICgwKQkvKiBHUElPICBbMF0gICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIElDX0dQSU8xCUlDX0dQSU8gKDEpCS8qIEdQSU8gIFsxXSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSUNfR1BJTzIJSUNfR1BJTyAoMikJLyogR1BJTyAgWzJdICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTY2OCw3ICsxNjY4LDcgQEAKICNkZWZpbmUgSUNfU2VyNE1DUAkweDAwMDQwMDAwCS8qIFNlci4gcG9ydCA0IE1DUCAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSUNfU2VyNFNTUAkweDAwMDgwMDAwCS8qIFNlci4gcG9ydCA0IFNTUCAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSUNfRE1BKE5iKQkgICAgICAgIAkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIFswLi41XSAgICovIFwKLSAgICAgICAgICAgICAgICAJKDB4MDAxMDAwMDAgPDwgKE5iKSkKKwkJCSgweDAwMTAwMDAwIDw8IChOYikpCiAjZGVmaW5lIElDX0RNQTAgCUlDX0RNQSAoMCkJLyogRE1BIGNvbnRyb2xsZXIgY2hhbm5lbCAwICAgICAgICAqLwogI2RlZmluZSBJQ19ETUExIAlJQ19ETUEgKDEpCS8qIERNQSBjb250cm9sbGVyIGNoYW5uZWwgMSAgICAgICAgKi8KICNkZWZpbmUgSUNfRE1BMiAJSUNfRE1BICgyKQkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIDIgICAgICAgICovCkBAIC0xNjc2LDcgKzE2NzYsNyBAQAogI2RlZmluZSBJQ19ETUE0IAlJQ19ETUEgKDQpCS8qIERNQSBjb250cm9sbGVyIGNoYW5uZWwgNCAgICAgICAgKi8KICNkZWZpbmUgSUNfRE1BNSAJSUNfRE1BICg1KQkvKiBETUEgY29udHJvbGxlciBjaGFubmVsIDUgICAgICAgICovCiAjZGVmaW5lIElDX09TVChOYikJICAgICAgICAJLyogT1MgVGltZXIgbWF0Y2ggWzAuLjNdICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDA0MDAwMDAwIDw8IChOYikpCisJCQkoMHgwNDAwMDAwMCA8PCAoTmIpKQogI2RlZmluZSBJQ19PU1QwIAlJQ19PU1QgKDApCS8qIE9TIFRpbWVyIG1hdGNoIDAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSUNfT1NUMSAJSUNfT1NUICgxKQkvKiBPUyBUaW1lciBtYXRjaCAxICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIElDX09TVDIgCUlDX09TVCAoMikJLyogT1MgVGltZXIgbWF0Y2ggMiAgICAgICAgICAgICAgICAqLwpAQCAtMTY4OCwxMSArMTY4OCwxMSBAQAogI2RlZmluZSBJQ0xSX0ZJUQkxICAgICAgIAkvKiBGYXN0IEludGVycnVwdCByZVF1ZXN0ICAgICAgICAgICovCiAKICNkZWZpbmUgSUNDUl9ESU0JMHgwMDAwMDAwMQkvKiBEaXNhYmxlIElkbGUtbW9kZSBpbnRlcnJ1cHQgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIE1hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogTWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBJQ0NSX0lkbGVBbGxJbnQJKElDQ1JfRElNKjApCS8qICBJZGxlLW1vZGUgQWxsIEludGVycnVwdCBlbmFibGUgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIChJQ01SIGlnbm9yZWQpICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiAgKElDTVIgaWdub3JlZCkgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIElDQ1JfSWRsZU1za0ludAkoSUNDUl9ESU0qMSkJLyogIElkbGUtbW9kZSBub24tTWFza2VkIEludGVycnVwdCAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZW5hYmxlIChJQ01SIHVzZWQpICAgICAgICAgICAgICovCisJCQkJCS8qICBlbmFibGUgKElDTVIgdXNlZCkgICAgICAgICAgICAgKi8KIAogCiAvKgpAQCAtMTcxNSwyNSArMTcxNSwyNSBAQAogI2RlZmluZSBfUFBTUiAgIAkweDkwMDYwMDA0CS8qIFBQQyBQaW4gU3RhdGUgUmVnLiAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX1BQQVIgICAJMHg5MDA2MDAwOAkvKiBQUEMgUGluIEFzc2lnbm1lbnQgUmVnLiAgICAgICAgICovCiAjZGVmaW5lIF9QU0RSICAgCTB4OTAwNjAwMEMJLyogUFBDIFNsZWVwLW1vZGUgcGluIERpcmVjdGlvbiAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBSZWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIFJlZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX1BQRlIgICAJMHg5MDA2MDAxMAkvKiBQUEMgUGluIEZsYWcgUmVnLiAgICAgICAgICAgICAgICovCiAKICNpZiBMQU5HVUFHRSA9PSBDCiAjZGVmaW5lIFBQRFIgICAgCSAgICAgICAgCS8qIFBQQyBQaW4gRGlyZWN0aW9uIFJlZy4gICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9QUERSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9QUERSKSkpCiAjZGVmaW5lIFBQU1IgICAgCSAgICAgICAgCS8qIFBQQyBQaW4gU3RhdGUgUmVnLiAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9QUFNSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9QUFNSKSkpCiAjZGVmaW5lIFBQQVIgICAgCSAgICAgICAgCS8qIFBQQyBQaW4gQXNzaWdubWVudCBSZWcuICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9QUEFSKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9QUEFSKSkpCiAjZGVmaW5lIFBTRFIgICAgCSAgICAgICAgCS8qIFBQQyBTbGVlcC1tb2RlIHBpbiBEaXJlY3Rpb24gICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBSZWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUFNEUikpKQorCQkJCQkvKiBSZWcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BTRFIpKSkKICNkZWZpbmUgUFBGUiAgICAJICAgICAgICAJLyogUFBDIFBpbiBGbGFnIFJlZy4gICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BQRlIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1BQRlIpKSkKICNlbmRpZiAvKiBMQU5HVUFHRSA9PSBDICovCiAKICNkZWZpbmUgUFBDX0xERChOYikJICAgICAgICAJLyogTENEIERhdGEgWzAuLjddICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDAwMDAwMDAxIDw8IChOYikpCisJCQkoMHgwMDAwMDAwMSA8PCAoTmIpKQogI2RlZmluZSBQUENfTEREMAlQUENfTEREICgwKQkvKiBMQ0QgRGF0YSBbMF0gICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFBQQ19MREQxCVBQQ19MREQgKDEpCS8qIExDRCBEYXRhIFsxXSAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUFBDX0xERDIJUFBDX0xERCAoMikJLyogTENEIERhdGEgWzJdICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTc0NiwxNiArMTc0NiwxNiBAQAogI2RlZmluZSBQUENfTF9MQ0xLCTB4MDAwMDAyMDAJLyogTENEIExpbmUgQ0xvY0sgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBQUENfTF9GQ0xLCTB4MDAwMDA0MDAJLyogTENEIEZyYW1lIENMb2NLICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBQUENfTF9CSUFTCTB4MDAwMDA4MDAJLyogTENEIEFDIEJJQVMgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzZXIuIHBvcnQgMTogICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHNlci4gcG9ydCAxOiAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUFBDX1RYRDEJMHgwMDAwMTAwMAkvKiAgU0RMQy9VQVJUIFRyYW5zbWl0IERhdGEgMSAgICAgICovCiAjZGVmaW5lIFBQQ19SWEQxCTB4MDAwMDIwMDAJLyogIFNETEMvVUFSVCBSZWNlaXZlIERhdGEgMSAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzZXIuIHBvcnQgMjogICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHNlci4gcG9ydCAyOiAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUFBDX1RYRDIJMHgwMDAwNDAwMAkvKiAgSVBDIFRyYW5zbWl0IERhdGEgMiAgICAgICAgICAgICovCiAjZGVmaW5lIFBQQ19SWEQyCTB4MDAwMDgwMDAJLyogIElQQyBSZWNlaXZlIERhdGEgMiAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzZXIuIHBvcnQgMzogICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHNlci4gcG9ydCAzOiAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUFBDX1RYRDMJMHgwMDAxMDAwMAkvKiAgVUFSVCBUcmFuc21pdCBEYXRhIDMgICAgICAgICAgICovCiAjZGVmaW5lIFBQQ19SWEQzCTB4MDAwMjAwMDAJLyogIFVBUlQgUmVjZWl2ZSBEYXRhIDMgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBzZXIuIHBvcnQgNDogICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHNlci4gcG9ydCA0OiAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgUFBDX1RYRDQJMHgwMDA0MDAwMAkvKiAgTUNQL1NTUCBUcmFuc21pdCBEYXRhIDQgICAgICAgICovCiAjZGVmaW5lIFBQQ19SWEQ0CTB4MDAwODAwMDAJLyogIE1DUC9TU1AgUmVjZWl2ZSBEYXRhIDQgICAgICAgICAqLwogI2RlZmluZSBQUENfU0NMSwkweDAwMTAwMDAwCS8qICBNQ1AvU1NQIFNhbXBsZSBDTG9jSyAgICAgICAgICAgKi8KQEAgLTE3NjQsMTQgKzE3NjQsMTQgQEAKICNkZWZpbmUgUFBEUl9JbiAJMCAgICAgICAJLyogSW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBQUERSX091dAkxICAgICAgIAkvKiBPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogc2VyLiBwb3J0IDE6ICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBzZXIuIHBvcnQgMTogICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFBQQVJfVVBSCTB4MDAwMDEwMDAJLyogIFVBUlQgUGluIFJlYXNzaWdubWVudCAgICAgICAgICAqLwogI2RlZmluZSBQUEFSX1VBUlRUUgkoUFBBUl9VUFIqMCkJLyogICBVQVJUIG9uIFRYRF8xICYgUlhEXzEgICAgICAgICAqLwogI2RlZmluZSBQUEFSX1VBUlRHUElPCShQUEFSX1VQUioxKQkvKiAgIFVBUlQgb24gR1BJTyBbMTQ6MTVdICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHNlci4gcG9ydCA0OiAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogc2VyLiBwb3J0IDQ6ICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBQUEFSX1NQUgkweDAwMDQwMDAwCS8qICBTU1AgUGluIFJlYXNzaWdubWVudCAgICAgICAgICAgKi8KICNkZWZpbmUgUFBBUl9TU1BUUlNTCShQUEFSX1NQUiowKQkvKiAgIFNTUCBvbiBUWERfQywgUlhEX0MsIFNDTEtfQywgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAgJiBTRlJNX0MgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogICAmIFNGUk1fQyAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBQUEFSX1NTUEdQSU8JKFBQQVJfU1BSKjEpCS8qICAgU1NQIG9uIEdQSU8gWzEwOjEzXSAgICAgICAgICAgKi8KIAogI2RlZmluZSBQU0RSX091dEwJMCAgICAgICAJLyogT3V0cHV0IExvdyBpbiBzbGVlcCBtb2RlICAgICAgICAqLwpAQCAtMTgxMSwyMCArMTgxMSwyMCBAQAogICogICAgZmNhcywgVGNhcwlGcmVxdWVuY3ksIHBlcmlvZCBvZiB0aGUgRFJBTSBDQVMgc2hpZnQgcmVnaXN0ZXJzLgogICovCiAKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogTWVtb3J5IHN5c3RlbTogICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBNZW1vcnkgc3lzdGVtOiAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9NRENORkcgCTB4QTAwMDAwMDAJLyogIERSQU0gQ29ORmlHdXJhdGlvbiByZWcuICAgICAgICAqLwogI2RlZmluZSBfTURDQVMoTmIpCSAgICAgICAgCS8qICBEUkFNIENBUyBzaGlmdCByZWcuIFswLi4zXSAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHhBMDAwMDAwNCArIChOYikqNCkKKwkJCSgweEEwMDAwMDA0ICsgKE5iKSo0KQogI2RlZmluZSBfTURDQVMwIAlfTURDQVMgKDApCS8qICBEUkFNIENBUyBzaGlmdCByZWcuIDAgICAgICAgICAgKi8KICNkZWZpbmUgX01EQ0FTMSAJX01EQ0FTICgxKQkvKiAgRFJBTSBDQVMgc2hpZnQgcmVnLiAxICAgICAgICAgICovCiAjZGVmaW5lIF9NRENBUzIgCV9NRENBUyAoMikJLyogIERSQU0gQ0FTIHNoaWZ0IHJlZy4gMiAgICAgICAgICAqLwogCiAjaWYgTEFOR1VBR0UgPT0gQwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBNZW1vcnkgc3lzdGVtOiAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIE1lbW9yeSBzeXN0ZW06ICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTURDTkZHICAJICAgICAgICAJLyogIERSQU0gQ29ORmlHdXJhdGlvbiByZWcuICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX01EQ05GRykpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfTURDTkZHKSkpCiAjZGVmaW5lIE1EQ0FTICAgCSAgICAgICAgCS8qICBEUkFNIENBUyBzaGlmdCByZWcuIFswLi4zXSAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfTURDQVMgKDApKSkKKwkJCSgodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9NRENBUyAoMCkpKQogI2RlZmluZSBNRENBUzAgIAkoTURDQVMgWzBdKQkvKiAgRFJBTSBDQVMgc2hpZnQgcmVnLiAwICAgICAgICAgICovCiAjZGVmaW5lIE1EQ0FTMSAgCShNRENBUyBbMV0pCS8qICBEUkFNIENBUyBzaGlmdCByZWcuIDEgICAgICAgICAgKi8KICNkZWZpbmUgTURDQVMyICAJKE1EQ0FTIFsyXSkJLyogIERSQU0gQ0FTIHNoaWZ0IHJlZy4gMiAgICAgICAgICAqLwpAQCAtMTgzNywzNCArMTgzNywzNCBAQAogCiAvKiBTQTExMDAgTURDTkZHIHZhbHVlcyAqLwogI2RlZmluZSBNRENORkdfREUoTmIpCSAgICAgICAgCS8qIERSQU0gRW5hYmxlIGJhbmsgWzAuLjNdICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgwMDAwMDAwMSA8PCAoTmIpKQorCQkJKDB4MDAwMDAwMDEgPDwgKE5iKSkKICNkZWZpbmUgTURDTkZHX0RFMAlNRENORkdfREUgKDApCS8qIERSQU0gRW5hYmxlIGJhbmsgMCAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTURDTkZHX0RFMQlNRENORkdfREUgKDEpCS8qIERSQU0gRW5hYmxlIGJhbmsgMSAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTURDTkZHX0RFMglNRENORkdfREUgKDIpCS8qIERSQU0gRW5hYmxlIGJhbmsgMiAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTURDTkZHX0RFMwlNRENORkdfREUgKDMpCS8qIERSQU0gRW5hYmxlIGJhbmsgMyAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTURDTkZHX0RSQUMJRmxkICgyLCA0KQkvKiBEUkFNIFJvdyBBZGRyZXNzIENvdW50IC0gOSAgICAgICovCiAjZGVmaW5lIE1EQ05GR19Sb3dBZGQoQWRkKSAgICAgIAkvKiAgUm93IEFkZHJlc3MgY291bnQgWzkuLjEyXSAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCgoQWRkKSAtIDkpIDw8IEZTaGZ0IChNRENORkdfRFJBQykpCisJCQkoKChBZGQpIC0gOSkgPDwgRlNoZnQgKE1EQ05GR19EUkFDKSkKICNkZWZpbmUgTURDTkZHX0NEQjIJMHgwMDAwMDA0MAkvKiBzaGlmdCByZWcuIENsb2NrIERpdmlkZSBCeSAyICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIChmY2FzID0gZmNwdS8yKSAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogKGZjYXMgPSBmY3B1LzIpICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBNRENORkdfVFJQCUZsZCAoNCwgNykJLyogVGltZSBSQVMgUHJlLWNoYXJnZSAtIDEgW1RtZW1dICAqLwogI2RlZmluZSBNRENORkdfUHJDaHJnKFRjcHUpICAgICAJLyogIFByZS1DaGFyZ2UgdGltZSBbMi4uMzIgVGNwdV0gICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKFRjcHUpIC0gMikvMiA8PCBGU2hmdCAoTURDTkZHX1RSUCkpCisJCQkoKChUY3B1KSAtIDIpLzIgPDwgRlNoZnQgKE1EQ05GR19UUlApKQogI2RlZmluZSBNRENORkdfQ2VpbFByQ2hyZyhUY3B1KSAJLyogIENlaWwuIG9mIFByQ2hyZyBbMi4uMzIgVGNwdV0gICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKFRjcHUpIC0gMSkvMiA8PCBGU2hmdCAoTURDTkZHX1RSUCkpCisJCQkoKChUY3B1KSAtIDEpLzIgPDwgRlNoZnQgKE1EQ05GR19UUlApKQogI2RlZmluZSBNRENORkdfVFJBU1IJRmxkICg0LCAxMSkJLyogVGltZSBSQVMgUmVmcmVzaCAtIDEgW1RtZW1dICAgICAqLwogI2RlZmluZSBNRENORkdfUmVmKFRjcHUpICAgICAgICAJLyogIFJlZnJlc2ggdGltZSBbMi4uMzIgVGNwdV0gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKFRjcHUpIC0gMikvMiA8PCBGU2hmdCAoTURDTkZHX1RSQVNSKSkKKwkJCSgoKFRjcHUpIC0gMikvMiA8PCBGU2hmdCAoTURDTkZHX1RSQVNSKSkKICNkZWZpbmUgTURDTkZHX0NlaWxSZWYoVGNwdSkgICAgCS8qICBDZWlsLiBvZiBSZWYgWzIuLjMyIFRjcHVdICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKChUY3B1KSAtIDEpLzIgPDwgRlNoZnQgKE1EQ05GR19UUkFTUikpCisJCQkoKChUY3B1KSAtIDEpLzIgPDwgRlNoZnQgKE1EQ05GR19UUkFTUikpCiAjZGVmaW5lIE1EQ05GR19UREwJRmxkICgyLCAxNSkJLyogVGltZSBEYXRhIExhdGNoIFtUY3B1XSAgICAgICAgICAqLwogI2RlZmluZSBNRENORkdfRGF0YUx0Y2goVGNwdSkgICAJLyogIERhdGEgTGF0Y2ggZGVsYXkgWzAuLjMgVGNwdV0gICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoVGNwdSkgPDwgRlNoZnQgKE1EQ05GR19UREwpKQorCQkJKChUY3B1KSA8PCBGU2hmdCAoTURDTkZHX1RETCkpCiAjZGVmaW5lIE1EQ05GR19EUkkJRmxkICgxNSwgMTcpCS8qIG1pbi4gRFJBTSBSZWZyZXNoIEludGVydmFsLzQgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogW1RtZW1dICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBbVG1lbV0gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIE1EQ05GR19SZWZJbnQoVGNwdSkgICAgIAkvKiAgbWluLiBSZWZyZXNoIEludGVydmFsICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFswLi4yNjIxMzYgVGNwdV0gICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoVGNwdSkvOCA8PCBGU2hmdCAoTURDTkZHX0RSSSkpCisJCQkJCS8qICBbMC4uMjYyMTM2IFRjcHVdICAgICAgICAgICAgICAgKi8gXAorCQkJKChUY3B1KS84IDw8IEZTaGZ0IChNRENORkdfRFJJKSkKIAogLyogU0ExMTEwIE1EQ05GRyB2YWx1ZXMgKi8KICNkZWZpbmUgTURDTkZHX1NBMTExMF9ERTAJMHgwMDAwMDAwMQkvKiBEUkFNIEVuYWJsZSBiYW5rIDAgICAgICAgICovCkBAIC0xODcyLDIyICsxODcyLDIyIEBACiAjZGVmaW5lIE1EQ05GR19TQTExMTBfRFRJTTAJMHgwMDAwMDAwNAkvKiBEUkFNIHRpbWluZyB0eXBlIDAvMSAgICAgICovCiAjZGVmaW5lIE1EQ05GR19TQTExMTBfRFdJRDAJMHgwMDAwMDAwOAkvKiBEUkFNIGJ1cyB3aWR0aCAwLzEgICAgICAgICovCiAjZGVmaW5lIE1EQ05GR19TQTExMTBfRFJBQzAJRmxkKDMsIDQpCS8qIERSQU0gcm93IGFkZHIgYml0IGNvdW50ICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJCS8qIGJhbmsgMC8xICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJCS8qIGJhbmsgMC8xICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTURDTkZHX1NBMTExMF9DREIyMAkweDAwMDAwMDgwCS8qIE1lbSBDbG9jayBkaXZpZGUgYnkgMiAwLzEgKi8KICNkZWZpbmUgTURDTkZHX1NBMTExMF9UUlAwCUZsZCgzLCA4KQkvKiBSQVMgcHJlY2hhcmdlIDAvMSAgICAgICAgICovCiAjZGVmaW5lIE1EQ05GR19TQTExMTBfVERMMAlGbGQoMiwgMTIpCS8qIERhdGEgaW5wdXQgbGF0Y2ggYWZ0ZXIgQ0FTKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJCS8qIGRlYXNzZXJ0aW9uIDAvMSAgICAgICAgICAgKi8KKwkJCQkJCS8qIGRlYXNzZXJ0aW9uIDAvMSAgICAgICAgICAgKi8KICNkZWZpbmUgTURDTkZHX1NBMTExMF9UV1IwCUZsZCgyLCAxNCkJLyogU0RSQU0gd3JpdGUgcmVjb3ZlcnkgMC8xICAqLwogI2RlZmluZSBNRENORkdfU0ExMTEwX0RFMgkweDAwMDEwMDAwCS8qIERSQU0gRW5hYmxlIGJhbmsgMCAgICAgICAgKi8KICNkZWZpbmUgTURDTkZHX1NBMTExMF9ERTMJMHgwMDAyMDAwMCAJLyogRFJBTSBFbmFibGUgYmFuayAxICAgICAgICAqLwogI2RlZmluZSBNRENORkdfU0ExMTEwX0RUSU0yCTB4MDAwNDAwMDAJLyogRFJBTSB0aW1pbmcgdHlwZSAwLzEgICAgICAqLwogI2RlZmluZSBNRENORkdfU0ExMTEwX0RXSUQyCTB4MDAwODAwMDAJLyogRFJBTSBidXMgd2lkdGggMC8xICAgICAgICAqLwogI2RlZmluZSBNRENORkdfU0ExMTEwX0RSQUMyCUZsZCgzLCAyMCkJLyogRFJBTSByb3cgYWRkciBiaXQgY291bnQgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkJLyogYmFuayAwLzEgICAgICAgICAgICAgICAgICAqLworCQkJCQkJLyogYmFuayAwLzEgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBNRENORkdfU0ExMTEwX0NEQjIyCTB4MDA4MDAwMDAJLyogTWVtIENsb2NrIGRpdmlkZSBieSAyIDAvMSAqLwogI2RlZmluZSBNRENORkdfU0ExMTEwX1RSUDIJRmxkKDMsIDI0KQkvKiBSQVMgcHJlY2hhcmdlIDAvMSAgICAgICAgICovCiAjZGVmaW5lIE1EQ05GR19TQTExMTBfVERMMglGbGQoMiwgMjgpCS8qIERhdGEgaW5wdXQgbGF0Y2ggYWZ0ZXIgQ0FTKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJCS8qIGRlYXNzZXJ0aW9uIDAvMSAgICAgICAgICAgKi8KKwkJCQkJCS8qIGRlYXNzZXJ0aW9uIDAvMSAgICAgICAgICAgKi8KICNkZWZpbmUgTURDTkZHX1NBMTExMF9UV1IyCUZsZCgyLCAzMCkJLyogU0RSQU0gd3JpdGUgcmVjb3ZlcnkgMC8xICAqLwogCiAKQEAgLTE5MDUsMTkgKzE5MDUsMTkgQEAKICAqICAgIGZtZW0sIFRtZW0JRnJlcXVlbmN5LCBwZXJpb2Qgb2YgdGhlIG1lbW9yeSBjbG9jayAoZm1lbSA9IGZjcHUvMikuCiAgKi8KIAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBNZW1vcnkgc3lzdGVtOiAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIE1lbW9yeSBzeXN0ZW06ICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX01TQyhOYikJICAgICAgICAJLyogIFN0YXRpYyBtZW1vcnkgQ29udHJvbCByZWcuICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBbMC4uMV0gICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHhBMDAwMDAxMCArIChOYikqNCkKKwkJCQkJLyogIFswLi4xXSAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoMHhBMDAwMDAxMCArIChOYikqNCkKICNkZWZpbmUgX01TQzAgICAJX01TQyAoMCkJLyogIFN0YXRpYyBtZW1vcnkgQ29udHJvbCByZWcuIDAgICAqLwogI2RlZmluZSBfTVNDMSAgIAlfTVNDICgxKQkvKiAgU3RhdGljIG1lbW9yeSBDb250cm9sIHJlZy4gMSAgICovCiAjZGVmaW5lIF9NU0MyCQkweEEwMDAwMDJDCS8qICBTdGF0aWMgbWVtb3J5IENvbnRyb2wgcmVnLiAyLCBub3QgY29udGlndW91cyAgICovCiAKICNpZiBMQU5HVUFHRSA9PSBDCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIE1lbW9yeSBzeXN0ZW06ICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogTWVtb3J5IHN5c3RlbTogICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBNU0MgICAgIAkgICAgICAgIAkvKiAgU3RhdGljIG1lbW9yeSBDb250cm9sIHJlZy4gICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFswLi4xXSAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9NU0MgKDApKSkKKwkJCQkJLyogIFswLi4xXSAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfTVNDICgwKSkpCiAjZGVmaW5lIE1TQzAgICAgCShNU0MgWzBdKQkvKiAgU3RhdGljIG1lbW9yeSBDb250cm9sIHJlZy4gMCAgICovCiAjZGVmaW5lIE1TQzEgICAgCShNU0MgWzFdKQkvKiAgU3RhdGljIG1lbW9yeSBDb250cm9sIHJlZy4gMSAgICovCiAjZGVmaW5lIE1TQzIgICAgCSgqKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfTVNDMikpCS8qICBTdGF0aWMgbWVtb3J5IENvbnRyb2wgcmVnLiAyICAgKi8KQEAgLTE5MzEsNyArMTkzMSw3IEBACiAjZW5kaWYgLyogTEFOR1VBR0UgPT0gQyAqLwogCiAjZGVmaW5lIE1TQ19CbmsoTmIpCSAgICAgICAgCS8qIHN0YXRpYyBtZW1vcnkgQmFuayBbMC4uM10gICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAlGbGQgKDE2LCAoKE5iKSBNb2R1bG8gMikqMTYpCisJCQlGbGQgKDE2LCAoKE5iKSBNb2R1bG8gMikqMTYpCiAjZGVmaW5lIE1TQzBfQm5rMAlNU0NfQm5rICgwKQkvKiBzdGF0aWMgbWVtb3J5IEJhbmsgMCAgICAgICAgICAgICovCiAjZGVmaW5lIE1TQzBfQm5rMQlNU0NfQm5rICgxKQkvKiBzdGF0aWMgbWVtb3J5IEJhbmsgMSAgICAgICAgICAgICovCiAjZGVmaW5lIE1TQzFfQm5rMglNU0NfQm5rICgyKQkvKiBzdGF0aWMgbWVtb3J5IEJhbmsgMiAgICAgICAgICAgICovCkBAIC0xOTM5LDQ2ICsxOTM5LDQ2IEBACiAKICNkZWZpbmUgTVNDX1JUICAJRmxkICgyLCAwKQkvKiBST00vc3RhdGljIG1lbW9yeSBUeXBlICAgICAgICAgICovCiAjZGVmaW5lIE1TQ19Ob25CcnN0CSAgICAgICAgCS8qICBOb24tQnVyc3Qgc3RhdGljIG1lbW9yeSAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMCA8PCBGU2hmdCAoTVNDX1JUKSkKKwkJCSgwIDw8IEZTaGZ0IChNU0NfUlQpKQogI2RlZmluZSBNU0NfU1JBTQkgICAgICAgIAkvKiAgMzItYml0IGJ5dGUtd3JpdGFibGUgU1JBTSAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDEgPDwgRlNoZnQgKE1TQ19SVCkpCisJCQkoMSA8PCBGU2hmdCAoTVNDX1JUKSkKICNkZWZpbmUgTVNDX0Jyc3Q0CSAgICAgICAgCS8qICBCdXJzdC1vZi00IHN0YXRpYyBtZW1vcnkgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMiA8PCBGU2hmdCAoTVNDX1JUKSkKKwkJCSgyIDw8IEZTaGZ0IChNU0NfUlQpKQogI2RlZmluZSBNU0NfQnJzdDgJICAgICAgICAJLyogIEJ1cnN0LW9mLTggc3RhdGljIG1lbW9yeSAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgzIDw8IEZTaGZ0IChNU0NfUlQpKQorCQkJKDMgPDwgRlNoZnQgKE1TQ19SVCkpCiAjZGVmaW5lIE1TQ19SQlcgCTB4MDAwNCAgCS8qIFJPTS9zdGF0aWMgbWVtb3J5IEJ1cyBXaWR0aCAgICAgKi8KICNkZWZpbmUgTVNDXzMyQml0U3RNZW0JKE1TQ19SQlcqMCkJLyogIDMyLUJpdCBTdGF0aWMgTWVtb3J5ICAgICAgICAgICAqLwogI2RlZmluZSBNU0NfMTZCaXRTdE1lbQkoTVNDX1JCVyoxKQkvKiAgMTYtQml0IFN0YXRpYyBNZW1vcnkgICAgICAgICAgICovCiAjZGVmaW5lIE1TQ19SREYgCUZsZCAoNSwgMykJLyogUk9NL3N0YXRpYyBtZW1vcnkgcmVhZCBEZWxheSAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBGaXJzdCBhY2Nlc3MgLSAxKC41KSBbVG1lbV0gICAgICovCisJCQkJCS8qIEZpcnN0IGFjY2VzcyAtIDEoLjUpIFtUbWVtXSAgICAgKi8KICNkZWZpbmUgTVNDXzFzdFJkQWNjKFRjcHUpICAgICAgCS8qICAxc3QgUmVhZCBBY2Nlc3MgdGltZSAoYnVyc3QgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgc3RhdGljIG1lbW9yeSkgWzMuLjY1IFRjcHVdICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCgoKFRjcHUpIC0gMykvMikgPDwgRlNoZnQgKE1TQ19SREYpKQorCQkJCQkvKiAgc3RhdGljIG1lbW9yeSkgWzMuLjY1IFRjcHVdICAgICovIFwKKwkJCSgoKChUY3B1KSAtIDMpLzIpIDw8IEZTaGZ0IChNU0NfUkRGKSkKICNkZWZpbmUgTVNDX0NlaWwxc3RSZEFjYyhUY3B1KSAgCS8qICBDZWlsLiBvZiAxc3RSZEFjYyBbMy4uNjUgVGNwdV0gKi8gXAotICAgICAgICAgICAgICAgIAkoKCgoVGNwdSkgLSAyKS8yKSA8PCBGU2hmdCAoTVNDX1JERikpCisJCQkoKCgoVGNwdSkgLSAyKS8yKSA8PCBGU2hmdCAoTVNDX1JERikpCiAjZGVmaW5lIE1TQ19SZEFjYyhUY3B1KQkgICAgICAgIAkvKiAgUmVhZCBBY2Nlc3MgdGltZSAobm9uLWJ1cnN0ICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIHN0YXRpYyBtZW1vcnkpIFsyLi42NCBUY3B1XSAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDIpLzIpIDw8IEZTaGZ0IChNU0NfUkRGKSkKKwkJCQkJLyogIHN0YXRpYyBtZW1vcnkpIFsyLi42NCBUY3B1XSAgICAqLyBcCisJCQkoKCgoVGNwdSkgLSAyKS8yKSA8PCBGU2hmdCAoTVNDX1JERikpCiAjZGVmaW5lIE1TQ19DZWlsUmRBY2MoVGNwdSkgICAgIAkvKiAgQ2VpbC4gb2YgUmRBY2MgWzIuLjY0IFRjcHVdICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCgoKFRjcHUpIC0gMSkvMikgPDwgRlNoZnQgKE1TQ19SREYpKQorCQkJKCgoKFRjcHUpIC0gMSkvMikgPDwgRlNoZnQgKE1TQ19SREYpKQogI2RlZmluZSBNU0NfUkROIAlGbGQgKDUsIDgpCS8qIFJPTS9zdGF0aWMgbWVtb3J5IHJlYWQgRGVsYXkgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogTmV4dCBhY2Nlc3MgLSAxIFtUbWVtXSAgICAgICAgICAqLworCQkJCQkvKiBOZXh0IGFjY2VzcyAtIDEgW1RtZW1dICAgICAgICAgICovCiAjZGVmaW5lIE1TQ19OeHRSZEFjYyhUY3B1KSAgICAgIAkvKiAgTmV4dCBSZWFkIEFjY2VzcyB0aW1lIChidXJzdCAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIHN0YXRpYyBtZW1vcnkpIFsyLi42NCBUY3B1XSAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDIpLzIpIDw8IEZTaGZ0IChNU0NfUkROKSkKKwkJCQkJLyogIHN0YXRpYyBtZW1vcnkpIFsyLi42NCBUY3B1XSAgICAqLyBcCisJCQkoKCgoVGNwdSkgLSAyKS8yKSA8PCBGU2hmdCAoTVNDX1JETikpCiAjZGVmaW5lIE1TQ19DZWlsTnh0UmRBY2MoVGNwdSkgIAkvKiAgQ2VpbC4gb2YgTnh0UmRBY2MgWzIuLjY0IFRjcHVdICovIFwKLSAgICAgICAgICAgICAgICAJKCgoKFRjcHUpIC0gMSkvMikgPDwgRlNoZnQgKE1TQ19SRE4pKQorCQkJKCgoKFRjcHUpIC0gMSkvMikgPDwgRlNoZnQgKE1TQ19SRE4pKQogI2RlZmluZSBNU0NfV3JBY2MoVGNwdSkJICAgICAgICAJLyogIFdyaXRlIEFjY2VzcyB0aW1lIChub24tYnVyc3QgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBzdGF0aWMgbWVtb3J5KSBbMi4uNjQgVGNwdV0gICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKCgoVGNwdSkgLSAyKS8yKSA8PCBGU2hmdCAoTVNDX1JETikpCisJCQkJCS8qICBzdGF0aWMgbWVtb3J5KSBbMi4uNjQgVGNwdV0gICAgKi8gXAorCQkJKCgoKFRjcHUpIC0gMikvMikgPDwgRlNoZnQgKE1TQ19SRE4pKQogI2RlZmluZSBNU0NfQ2VpbFdyQWNjKFRjcHUpICAgICAJLyogIENlaWwuIG9mIFdyQWNjIFsyLi42NCBUY3B1XSAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDEpLzIpIDw8IEZTaGZ0IChNU0NfUkROKSkKKwkJCSgoKChUY3B1KSAtIDEpLzIpIDw8IEZTaGZ0IChNU0NfUkROKSkKICNkZWZpbmUgTVNDX1JSUiAJRmxkICgzLCAxMykJLyogUk9NL3N0YXRpYyBtZW1vcnkgUmVjb3ZlUnkgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiB0aW1lLzIgW1RtZW1dICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHRpbWUvMiBbVG1lbV0gICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTVNDX1JlYyhUY3B1KQkgICAgICAgIAkvKiAgUmVjb3ZlcnkgdGltZSBbMC4uMjggVGNwdV0gICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCgoVGNwdSkvNCkgPDwgRlNoZnQgKE1TQ19SUlIpKQorCQkJKCgoVGNwdSkvNCkgPDwgRlNoZnQgKE1TQ19SUlIpKQogI2RlZmluZSBNU0NfQ2VpbFJlYyhUY3B1KSAgICAgICAJLyogIENlaWwuIG9mIFJlYyBbMC4uMjggVGNwdV0gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKChUY3B1KSArIDMpLzQpIDw8IEZTaGZ0IChNU0NfUlJSKSkKKwkJCSgoKChUY3B1KSArIDMpLzQpIDw8IEZTaGZ0IChNU0NfUlJSKSkKIAogCiAvKgpAQCAtMTk5NSwzOCArMTk5NSwzOCBAQAogICogICAgZmJjbGssIFRiY2xrCUZyZXF1ZW5jeSwgcGVyaW9kIG9mIHRoZSBQQ01DSUEgY2xvY2sgKEJDTEspLgogICovCiAKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogTWVtb3J5IHN5c3RlbTogICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBNZW1vcnkgc3lzdGVtOiAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9NRUNSICAgCTB4QTAwMDAwMTgJLyogIEV4cGFuc2lvbiBtZW1vcnkgYnVzIChQQ01DSUEpICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgQ29uZmlndXJhdGlvbiBSZWcuICAgICAgICAgICAgICovCisJCQkJCS8qICBDb25maWd1cmF0aW9uIFJlZy4gICAgICAgICAgICAgKi8KIAogI2lmIExBTkdVQUdFID09IEMKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogTWVtb3J5IHN5c3RlbTogICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBNZW1vcnkgc3lzdGVtOiAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIE1FQ1IgICAgCSAgICAgICAgCS8qICBFeHBhbnNpb24gbWVtb3J5IGJ1cyAoUENNQ0lBKSAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgQ29uZmlndXJhdGlvbiBSZWcuICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfTUVDUikpKQorCQkJCQkvKiAgQ29uZmlndXJhdGlvbiBSZWcuICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX01FQ1IpKSkKICNlbmRpZiAvKiBMQU5HVUFHRSA9PSBDICovCiAKICNkZWZpbmUgTUVDUl9QQ01DSUEoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAlGbGQgKDE1LCAoTmIpKjE2KQorCQkJRmxkICgxNSwgKE5iKSoxNikKICNkZWZpbmUgTUVDUl9QQ01DSUEwCU1FQ1JfUENNQ0lBICgwKQkvKiBQQ01DSUEgMCAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIE1FQ1JfUENNQ0lBMQlNRUNSX1BDTUNJQSAoMSkJLyogUENNQ0lBIDEgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAjZGVmaW5lIE1FQ1JfQlNJTwlGbGQgKDUsIDApCS8qIEJDTEsgU2VsZWN0IEkvTyAtIDEgW1RtZW1dICAgICAgKi8KICNkZWZpbmUgTUVDUl9JT0NsayhUY3B1KSAgICAgICAgCS8qICBJL08gQ2xvY2sgWzIuLjY0IFRjcHVdICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKCgoVGNwdSkgLSAyKS8yKSA8PCBGU2hmdCAoTUVDUl9CU0lPKSkKKwkJCSgoKChUY3B1KSAtIDIpLzIpIDw8IEZTaGZ0IChNRUNSX0JTSU8pKQogI2RlZmluZSBNRUNSX0NlaWxJT0NsayhUY3B1KSAgICAJLyogIENlaWwuIG9mIElPQ2xrIFsyLi42NCBUY3B1XSAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDEpLzIpIDw8IEZTaGZ0IChNRUNSX0JTSU8pKQorCQkJKCgoKFRjcHUpIC0gMSkvMikgPDwgRlNoZnQgKE1FQ1JfQlNJTykpCiAjZGVmaW5lIE1FQ1JfQlNBCUZsZCAoNSwgNSkJLyogQkNMSyBTZWxlY3QgQXR0cmlidXRlIC0gMSAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBbVG1lbV0gICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIFtUbWVtXSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTUVDUl9BdHRyQ2xrKFRjcHUpICAgICAgCS8qICBBdHRyaWJ1dGUgQ2xvY2sgWzIuLjY0IFRjcHVdICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKCgoVGNwdSkgLSAyKS8yKSA8PCBGU2hmdCAoTUVDUl9CU0EpKQorCQkJKCgoKFRjcHUpIC0gMikvMikgPDwgRlNoZnQgKE1FQ1JfQlNBKSkKICNkZWZpbmUgTUVDUl9DZWlsQXR0ckNsayhUY3B1KSAgCS8qICBDZWlsLiBvZiBBdHRyQ2xrIFsyLi42NCBUY3B1XSAgKi8gXAotICAgICAgICAgICAgICAgIAkoKCgoVGNwdSkgLSAxKS8yKSA8PCBGU2hmdCAoTUVDUl9CU0EpKQorCQkJKCgoKFRjcHUpIC0gMSkvMikgPDwgRlNoZnQgKE1FQ1JfQlNBKSkKICNkZWZpbmUgTUVDUl9CU00JRmxkICg1LCAxMCkJLyogQkNMSyBTZWxlY3QgTWVtb3J5IC0gMSBbVG1lbV0gICAqLwogI2RlZmluZSBNRUNSX01lbUNsayhUY3B1KSAgICAgICAJLyogIE1lbW9yeSBDbG9jayBbMi4uNjQgVGNwdV0gICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDIpLzIpIDw8IEZTaGZ0IChNRUNSX0JTTSkpCisJCQkoKCgoVGNwdSkgLSAyKS8yKSA8PCBGU2hmdCAoTUVDUl9CU00pKQogI2RlZmluZSBNRUNSX0NlaWxNZW1DbGsoVGNwdSkgICAJLyogIENlaWwuIG9mIE1lbUNsayBbMi4uNjQgVGNwdV0gICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKChUY3B1KSAtIDEpLzIpIDw8IEZTaGZ0IChNRUNSX0JTTSkpCisJCQkoKCgoVGNwdSkgLSAxKS8yKSA8PCBGU2hmdCAoTUVDUl9CU00pKQogCiAvKgogICogT24gU0ExMTEwIG9ubHkKQEAgLTIwMzUsOSArMjAzNSw5IEBACiAjZGVmaW5lIF9NRFJFRlIJCTB4QTAwMDAwMUMKIAogI2lmIExBTkdVQUdFID09IEMKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogTWVtb3J5IHN5c3RlbTogICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBNZW1vcnkgc3lzdGVtOiAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIE1EUkVGUiBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX01EUkVGUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfTURSRUZSKSkpCiAKICNlbGlmIExBTkdVQUdFID09IEFzc2VtYmx5CiAKQEAgLTIxNDYsMjkxICsyMTQ2LDI5MSBAQAogI2RlZmluZSBETUFTcCAgIAkweDAwMDAwMDIwCS8qIERNQSBjb250cm9sIHJlZy4gU3BhY2UgW2J5dGVdICAgKi8KIAogI2RlZmluZSBfRERBUihOYikJICAgICAgICAJLyogRE1BIERldmljZSBBZGRyZXNzIFJlZy4gICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgWzAuLjVdICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHhCMDAwMDAwMCArIChOYikqRE1BU3ApCisJCQkJCS8qIGNoYW5uZWwgWzAuLjVdICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKDB4QjAwMDAwMDAgKyAoTmIpKkRNQVNwKQogI2RlZmluZSBfU2V0RENTUihOYikJICAgICAgICAJLyogU2V0IERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgWzAuLjVdICh3cml0ZSkgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHhCMDAwMDAwNCArIChOYikqRE1BU3ApCisJCQkJCS8qIGNoYW5uZWwgWzAuLjVdICh3cml0ZSkgICAgICAgICAgKi8gXAorCQkJKDB4QjAwMDAwMDQgKyAoTmIpKkRNQVNwKQogI2RlZmluZSBfQ2xyRENTUihOYikJICAgICAgICAJLyogQ2xlYXIgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgWzAuLjVdICh3cml0ZSkgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHhCMDAwMDAwOCArIChOYikqRE1BU3ApCisJCQkJCS8qIGNoYW5uZWwgWzAuLjVdICh3cml0ZSkgICAgICAgICAgKi8gXAorCQkJKDB4QjAwMDAwMDggKyAoTmIpKkRNQVNwKQogI2RlZmluZSBfUmREQ1NSKE5iKQkgICAgICAgIAkvKiBSZWFkIERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCBbMC4uNV0gKHJlYWQpICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweEIwMDAwMDBDICsgKE5iKSpETUFTcCkKKwkJCQkJLyogY2hhbm5lbCBbMC4uNV0gKHJlYWQpICAgICAgICAgICAqLyBcCisJCQkoMHhCMDAwMDAwQyArIChOYikqRE1BU3ApCiAjZGVmaW5lIF9EQlNBKE5iKQkgICAgICAgIAkvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBBICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCBbMC4uNV0gICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweEIwMDAwMDEwICsgKE5iKSpETUFTcCkKKwkJCQkJLyogY2hhbm5lbCBbMC4uNV0gICAgICAgICAgICAgICAgICAqLyBcCisJCQkoMHhCMDAwMDAxMCArIChOYikqRE1BU3ApCiAjZGVmaW5lIF9EQlRBKE5iKQkgICAgICAgIAkvKiBETUEgQnVmZmVyIFRyYW5zZmVyIGNvdW50ICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBBIGNoYW5uZWwgWzAuLjVdICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweEIwMDAwMDE0ICsgKE5iKSpETUFTcCkKKwkJCQkJLyogcmVnLiBBIGNoYW5uZWwgWzAuLjVdICAgICAgICAgICAqLyBcCisJCQkoMHhCMDAwMDAxNCArIChOYikqRE1BU3ApCiAjZGVmaW5lIF9EQlNCKE5iKQkgICAgICAgIAkvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBCICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCBbMC4uNV0gICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweEIwMDAwMDE4ICsgKE5iKSpETUFTcCkKKwkJCQkJLyogY2hhbm5lbCBbMC4uNV0gICAgICAgICAgICAgICAgICAqLyBcCisJCQkoMHhCMDAwMDAxOCArIChOYikqRE1BU3ApCiAjZGVmaW5lIF9EQlRCKE5iKQkgICAgICAgIAkvKiBETUEgQnVmZmVyIFRyYW5zZmVyIGNvdW50ICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBCIGNoYW5uZWwgWzAuLjVdICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweEIwMDAwMDFDICsgKE5iKSpETUFTcCkKKwkJCQkJLyogcmVnLiBCIGNoYW5uZWwgWzAuLjVdICAgICAgICAgICAqLyBcCisJCQkoMHhCMDAwMDAxQyArIChOYikqRE1BU3ApCiAKICNkZWZpbmUgX0REQVIwICAJX0REQVIgKDApCS8qIERNQSBEZXZpY2UgQWRkcmVzcyBSZWcuICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9TZXREQ1NSMAlfU2V0RENTUiAoMCkJLyogU2V0IERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDAgKHdyaXRlKSAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgMCAod3JpdGUpICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0NsckRDU1IwCV9DbHJEQ1NSICgwKQkvKiBDbGVhciBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMCAod3JpdGUpICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCAwICh3cml0ZSkgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfUmREQ1NSMAlfUmREQ1NSICgwKQkvKiBSZWFkIERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMCAocmVhZCkgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCAwIChyZWFkKSAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfREJTQTAgIAlfREJTQSAoMCkJLyogRE1BIEJ1ZmZlciBTdGFydCBhZGRyZXNzIHJlZy4gQSAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0RCVEEwICAJX0RCVEEgKDApCS8qIERNQSBCdWZmZXIgVHJhbnNmZXIgY291bnQgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBBIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAqLworCQkJCQkvKiByZWcuIEEgY2hhbm5lbCAwICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EQlNCMCAgCV9EQlNCICgwKQkvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBCICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfREJUQjAgIAlfREJUQiAoMCkJLyogRE1BIEJ1ZmZlciBUcmFuc2ZlciBjb3VudCAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIEIgY2hhbm5lbCAwICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHJlZy4gQiBjaGFubmVsIDAgICAgICAgICAgICAgICAgKi8KIAogI2RlZmluZSBfRERBUjEgIAlfRERBUiAoMSkJLyogRE1BIERldmljZSBBZGRyZXNzIFJlZy4gICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX1NldERDU1IxCV9TZXREQ1NSICgxKQkvKiBTZXQgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMSAod3JpdGUpICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCAxICh3cml0ZSkgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfQ2xyRENTUjEJX0NsckRDU1IgKDEpCS8qIENsZWFyIERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAxICh3cml0ZSkgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDEgKHdyaXRlKSAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9SZERDU1IxCV9SZERDU1IgKDEpCS8qIFJlYWQgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAxIChyZWFkKSAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDEgKHJlYWQpICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EQlNBMSAgCV9EQlNBICgxKQkvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBBICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfREJUQTEgIAlfREJUQSAoMSkJLyogRE1BIEJ1ZmZlciBUcmFuc2ZlciBjb3VudCAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIEEgY2hhbm5lbCAxICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHJlZy4gQSBjaGFubmVsIDEgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0RCU0IxICAJX0RCU0IgKDEpCS8qIERNQSBCdWZmZXIgU3RhcnQgYWRkcmVzcyByZWcuIEIgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EQlRCMSAgCV9EQlRCICgxKQkvKiBETUEgQnVmZmVyIFRyYW5zZmVyIGNvdW50ICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gQiBjaGFubmVsIDEgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcmVnLiBCIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAqLwogCiAjZGVmaW5lIF9EREFSMiAgCV9EREFSICgyKQkvKiBETUEgRGV2aWNlIEFkZHJlc3MgUmVnLiAgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfU2V0RENTUjIJX1NldERDU1IgKDIpCS8qIFNldCBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAyICh3cml0ZSkgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDIgKHdyaXRlKSAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9DbHJEQ1NSMglfQ2xyRENTUiAoMikJLyogQ2xlYXIgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDIgKHdyaXRlKSAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgMiAod3JpdGUpICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX1JkRENTUjIJX1JkRENTUiAoMikJLyogUmVhZCBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDIgKHJlYWQpICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgMiAocmVhZCkgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0RCU0EyICAJX0RCU0EgKDIpCS8qIERNQSBCdWZmZXIgU3RhcnQgYWRkcmVzcyByZWcuIEEgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EQlRBMiAgCV9EQlRBICgyKQkvKiBETUEgQnVmZmVyIFRyYW5zZmVyIGNvdW50ICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gQSBjaGFubmVsIDIgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcmVnLiBBIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfREJTQjIgIAlfREJTQiAoMikJLyogRE1BIEJ1ZmZlciBTdGFydCBhZGRyZXNzIHJlZy4gQiAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0RCVEIyICAJX0RCVEIgKDIpCS8qIERNQSBCdWZmZXIgVHJhbnNmZXIgY291bnQgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBCIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAqLworCQkJCQkvKiByZWcuIEIgY2hhbm5lbCAyICAgICAgICAgICAgICAgICovCiAKICNkZWZpbmUgX0REQVIzICAJX0REQVIgKDMpCS8qIERNQSBEZXZpY2UgQWRkcmVzcyBSZWcuICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDMgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9TZXREQ1NSMwlfU2V0RENTUiAoMykJLyogU2V0IERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDMgKHdyaXRlKSAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgMyAod3JpdGUpICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0NsckRDU1IzCV9DbHJEQ1NSICgzKQkvKiBDbGVhciBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMyAod3JpdGUpICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCAzICh3cml0ZSkgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfUmREQ1NSMwlfUmREQ1NSICgzKQkvKiBSZWFkIERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMyAocmVhZCkgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCAzIChyZWFkKSAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfREJTQTMgIAlfREJTQSAoMykJLyogRE1BIEJ1ZmZlciBTdGFydCBhZGRyZXNzIHJlZy4gQSAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDMgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0RCVEEzICAJX0RCVEEgKDMpCS8qIERNQSBCdWZmZXIgVHJhbnNmZXIgY291bnQgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBBIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAqLworCQkJCQkvKiByZWcuIEEgY2hhbm5lbCAzICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EQlNCMyAgCV9EQlNCICgzKQkvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBCICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfREJUQjMgIAlfREJUQiAoMykJLyogRE1BIEJ1ZmZlciBUcmFuc2ZlciBjb3VudCAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIEIgY2hhbm5lbCAzICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHJlZy4gQiBjaGFubmVsIDMgICAgICAgICAgICAgICAgKi8KIAogI2RlZmluZSBfRERBUjQgIAlfRERBUiAoNCkJLyogRE1BIERldmljZSBBZGRyZXNzIFJlZy4gICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDQgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX1NldERDU1I0CV9TZXREQ1NSICg0KQkvKiBTZXQgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgNCAod3JpdGUpICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCA0ICh3cml0ZSkgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfQ2xyRENTUjQJX0NsckRDU1IgKDQpCS8qIENsZWFyIERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCA0ICh3cml0ZSkgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDQgKHdyaXRlKSAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9SZERDU1I0CV9SZERDU1IgKDQpCS8qIFJlYWQgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCA0IChyZWFkKSAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDQgKHJlYWQpICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EQlNBNCAgCV9EQlNBICg0KQkvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBBICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCA0ICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfREJUQTQgIAlfREJUQSAoNCkJLyogRE1BIEJ1ZmZlciBUcmFuc2ZlciBjb3VudCAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIEEgY2hhbm5lbCA0ICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHJlZy4gQSBjaGFubmVsIDQgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0RCU0I0ICAJX0RCU0IgKDQpCS8qIERNQSBCdWZmZXIgU3RhcnQgYWRkcmVzcyByZWcuIEIgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCA0ICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDQgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EQlRCNCAgCV9EQlRCICg0KQkvKiBETUEgQnVmZmVyIFRyYW5zZmVyIGNvdW50ICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gQiBjaGFubmVsIDQgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcmVnLiBCIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAqLwogCiAjZGVmaW5lIF9EREFSNSAgCV9EREFSICg1KQkvKiBETUEgRGV2aWNlIEFkZHJlc3MgUmVnLiAgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCA1ICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfU2V0RENTUjUJX1NldERDU1IgKDUpCS8qIFNldCBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCA1ICh3cml0ZSkgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDUgKHdyaXRlKSAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9DbHJEQ1NSNQlfQ2xyRENTUiAoNSkJLyogQ2xlYXIgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDUgKHdyaXRlKSAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgNSAod3JpdGUpICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX1JkRENTUjUJX1JkRENTUiAoNSkJLyogUmVhZCBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDUgKHJlYWQpICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgNSAocmVhZCkgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0RCU0E1ICAJX0RCU0EgKDUpCS8qIERNQSBCdWZmZXIgU3RhcnQgYWRkcmVzcyByZWcuIEEgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCA1ICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDUgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EQlRBNSAgCV9EQlRBICg1KQkvKiBETUEgQnVmZmVyIFRyYW5zZmVyIGNvdW50ICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gQSBjaGFubmVsIDUgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcmVnLiBBIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfREJTQjUgIAlfREJTQiAoNSkJLyogRE1BIEJ1ZmZlciBTdGFydCBhZGRyZXNzIHJlZy4gQiAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDUgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0RCVEI1ICAJX0RCVEIgKDUpCS8qIERNQSBCdWZmZXIgVHJhbnNmZXIgY291bnQgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBCIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAqLworCQkJCQkvKiByZWcuIEIgY2hhbm5lbCA1ICAgICAgICAgICAgICAgICovCiAKICNpZiBMQU5HVUFHRSA9PSBDCiAKICNkZWZpbmUgRERBUjAgICAJICAgICAgICAJLyogRE1BIERldmljZSBBZGRyZXNzIFJlZy4gICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EREFSMCkpKQorCQkJCQkvKiBjaGFubmVsIDAgICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0REQVIwKSkpCiAjZGVmaW5lIFNldERDU1IwCSAgICAgICAgCS8qIFNldCBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDAgKHdyaXRlKSAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2V0RENTUjApKSkKKwkJCQkJLyogY2hhbm5lbCAwICh3cml0ZSkgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXREQ1NSMCkpKQogI2RlZmluZSBDbHJEQ1NSMAkgICAgICAgIAkvKiBDbGVhciBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAwICh3cml0ZSkgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0NsckRDU1IwKSkpCisJCQkJCS8qIGNoYW5uZWwgMCAod3JpdGUpICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfQ2xyRENTUjApKSkKICNkZWZpbmUgUmREQ1NSMCAJICAgICAgICAJLyogUmVhZCBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMCAocmVhZCkgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9SZERDU1IwKSkpCisJCQkJCS8qIGNoYW5uZWwgMCAocmVhZCkgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUmREQ1NSMCkpKQogI2RlZmluZSBEQlNBMCAgIAkgICAgICAgIAkvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBBICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RCU0EwKSkpCisJCQkJCS8qIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfREJTQTApKSkKICNkZWZpbmUgREJUQTAgICAJICAgICAgICAJLyogRE1BIEJ1ZmZlciBUcmFuc2ZlciBjb3VudCAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gQSBjaGFubmVsIDAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EQlRBMCkpKQorCQkJCQkvKiByZWcuIEEgY2hhbm5lbCAwICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0RCVEEwKSkpCiAjZGVmaW5lIERCU0IwICAgCSAgICAgICAgCS8qIERNQSBCdWZmZXIgU3RhcnQgYWRkcmVzcyByZWcuIEIgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfREJTQjApKSkKKwkJCQkJLyogY2hhbm5lbCAwICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgQWRkcmVzcyAqKSBpb19wMnYgKF9EQlNCMCkpKQogI2RlZmluZSBEQlRCMCAgIAkgICAgICAgIAkvKiBETUEgQnVmZmVyIFRyYW5zZmVyIGNvdW50ICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBCIGNoYW5uZWwgMCAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0RCVEIwKSkpCisJCQkJCS8qIHJlZy4gQiBjaGFubmVsIDAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfREJUQjApKSkKIAogI2RlZmluZSBEREFSMSAgIAkgICAgICAgIAkvKiBETUEgRGV2aWNlIEFkZHJlc3MgUmVnLiAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0REQVIxKSkpCisJCQkJCS8qIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfRERBUjEpKSkKICNkZWZpbmUgU2V0RENTUjEJICAgICAgICAJLyogU2V0IERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMSAod3JpdGUpICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXREQ1NSMSkpKQorCQkJCQkvKiBjaGFubmVsIDEgKHdyaXRlKSAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NldERDU1IxKSkpCiAjZGVmaW5lIENsckRDU1IxCSAgICAgICAgCS8qIENsZWFyIERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDEgKHdyaXRlKSAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfQ2xyRENTUjEpKSkKKwkJCQkJLyogY2hhbm5lbCAxICh3cml0ZSkgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9DbHJEQ1NSMSkpKQogI2RlZmluZSBSZERDU1IxIAkgICAgICAgIAkvKiBSZWFkIERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAxIChyZWFkKSAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1JkRENTUjEpKSkKKwkJCQkJLyogY2hhbm5lbCAxIChyZWFkKSAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9SZERDU1IxKSkpCiAjZGVmaW5lIERCU0ExICAgCSAgICAgICAgCS8qIERNQSBCdWZmZXIgU3RhcnQgYWRkcmVzcyByZWcuIEEgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfREJTQTEpKSkKKwkJCQkJLyogY2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgQWRkcmVzcyAqKSBpb19wMnYgKF9EQlNBMSkpKQogI2RlZmluZSBEQlRBMSAgIAkgICAgICAgIAkvKiBETUEgQnVmZmVyIFRyYW5zZmVyIGNvdW50ICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBBIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0RCVEExKSkpCisJCQkJCS8qIHJlZy4gQSBjaGFubmVsIDEgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfREJUQTEpKSkKICNkZWZpbmUgREJTQjEgICAJICAgICAgICAJLyogRE1BIEJ1ZmZlciBTdGFydCBhZGRyZXNzIHJlZy4gQiAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgQWRkcmVzcyAqKSBpb19wMnYgKF9EQlNCMSkpKQorCQkJCQkvKiBjaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RCU0IxKSkpCiAjZGVmaW5lIERCVEIxICAgCSAgICAgICAgCS8qIERNQSBCdWZmZXIgVHJhbnNmZXIgY291bnQgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIEIgY2hhbm5lbCAxICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfREJUQjEpKSkKKwkJCQkJLyogcmVnLiBCIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EQlRCMSkpKQogCiAjZGVmaW5lIEREQVIyICAgCSAgICAgICAgCS8qIERNQSBEZXZpY2UgQWRkcmVzcyBSZWcuICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfRERBUjIpKSkKKwkJCQkJLyogY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EREFSMikpKQogI2RlZmluZSBTZXREQ1NSMgkgICAgICAgIAkvKiBTZXQgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAyICh3cml0ZSkgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NldERDU1IyKSkpCisJCQkJCS8qIGNoYW5uZWwgMiAod3JpdGUpICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2V0RENTUjIpKSkKICNkZWZpbmUgQ2xyRENTUjIJICAgICAgICAJLyogQ2xlYXIgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMiAod3JpdGUpICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9DbHJEQ1NSMikpKQorCQkJCQkvKiBjaGFubmVsIDIgKHdyaXRlKSAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0NsckRDU1IyKSkpCiAjZGVmaW5lIFJkRENTUjIgCSAgICAgICAgCS8qIFJlYWQgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDIgKHJlYWQpICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUmREQ1NSMikpKQorCQkJCQkvKiBjaGFubmVsIDIgKHJlYWQpICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1JkRENTUjIpKSkKICNkZWZpbmUgREJTQTIgICAJICAgICAgICAJLyogRE1BIEJ1ZmZlciBTdGFydCBhZGRyZXNzIHJlZy4gQSAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgQWRkcmVzcyAqKSBpb19wMnYgKF9EQlNBMikpKQorCQkJCQkvKiBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RCU0EyKSkpCiAjZGVmaW5lIERCVEEyICAgCSAgICAgICAgCS8qIERNQSBCdWZmZXIgVHJhbnNmZXIgY291bnQgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIEEgY2hhbm5lbCAyICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfREJUQTIpKSkKKwkJCQkJLyogcmVnLiBBIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EQlRBMikpKQogI2RlZmluZSBEQlNCMiAgIAkgICAgICAgIAkvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBCICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RCU0IyKSkpCisJCQkJCS8qIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfREJTQjIpKSkKICNkZWZpbmUgREJUQjIgICAJICAgICAgICAJLyogRE1BIEJ1ZmZlciBUcmFuc2ZlciBjb3VudCAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gQiBjaGFubmVsIDIgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EQlRCMikpKQorCQkJCQkvKiByZWcuIEIgY2hhbm5lbCAyICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0RCVEIyKSkpCiAKICNkZWZpbmUgRERBUjMgICAJICAgICAgICAJLyogRE1BIERldmljZSBBZGRyZXNzIFJlZy4gICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EREFSMykpKQorCQkJCQkvKiBjaGFubmVsIDMgICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0REQVIzKSkpCiAjZGVmaW5lIFNldERDU1IzCSAgICAgICAgCS8qIFNldCBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDMgKHdyaXRlKSAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2V0RENTUjMpKSkKKwkJCQkJLyogY2hhbm5lbCAzICh3cml0ZSkgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXREQ1NSMykpKQogI2RlZmluZSBDbHJEQ1NSMwkgICAgICAgIAkvKiBDbGVhciBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAzICh3cml0ZSkgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0NsckRDU1IzKSkpCisJCQkJCS8qIGNoYW5uZWwgMyAod3JpdGUpICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfQ2xyRENTUjMpKSkKICNkZWZpbmUgUmREQ1NSMyAJICAgICAgICAJLyogUmVhZCBETUEgQ29udHJvbCAmIFN0YXR1cyBSZWcuICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMyAocmVhZCkgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9SZERDU1IzKSkpCisJCQkJCS8qIGNoYW5uZWwgMyAocmVhZCkgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUmREQ1NSMykpKQogI2RlZmluZSBEQlNBMyAgIAkgICAgICAgIAkvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBBICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RCU0EzKSkpCisJCQkJCS8qIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfREJTQTMpKSkKICNkZWZpbmUgREJUQTMgICAJICAgICAgICAJLyogRE1BIEJ1ZmZlciBUcmFuc2ZlciBjb3VudCAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gQSBjaGFubmVsIDMgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EQlRBMykpKQorCQkJCQkvKiByZWcuIEEgY2hhbm5lbCAzICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0RCVEEzKSkpCiAjZGVmaW5lIERCU0IzICAgCSAgICAgICAgCS8qIERNQSBCdWZmZXIgU3RhcnQgYWRkcmVzcyByZWcuIEIgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDMgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfREJTQjMpKSkKKwkJCQkJLyogY2hhbm5lbCAzICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgQWRkcmVzcyAqKSBpb19wMnYgKF9EQlNCMykpKQogI2RlZmluZSBEQlRCMyAgIAkgICAgICAgIAkvKiBETUEgQnVmZmVyIFRyYW5zZmVyIGNvdW50ICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBCIGNoYW5uZWwgMyAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0RCVEIzKSkpCisJCQkJCS8qIHJlZy4gQiBjaGFubmVsIDMgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfREJUQjMpKSkKIAogI2RlZmluZSBEREFSNCAgIAkgICAgICAgIAkvKiBETUEgRGV2aWNlIEFkZHJlc3MgUmVnLiAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCA0ICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0REQVI0KSkpCisJCQkJCS8qIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfRERBUjQpKSkKICNkZWZpbmUgU2V0RENTUjQJICAgICAgICAJLyogU2V0IERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgNCAod3JpdGUpICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9TZXREQ1NSNCkpKQorCQkJCQkvKiBjaGFubmVsIDQgKHdyaXRlKSAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NldERDU1I0KSkpCiAjZGVmaW5lIENsckRDU1I0CSAgICAgICAgCS8qIENsZWFyIERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDQgKHdyaXRlKSAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfQ2xyRENTUjQpKSkKKwkJCQkJLyogY2hhbm5lbCA0ICh3cml0ZSkgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9DbHJEQ1NSNCkpKQogI2RlZmluZSBSZERDU1I0IAkgICAgICAgIAkvKiBSZWFkIERNQSBDb250cm9sICYgU3RhdHVzIFJlZy4gICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCA0IChyZWFkKSAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1JkRENTUjQpKSkKKwkJCQkJLyogY2hhbm5lbCA0IChyZWFkKSAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9SZERDU1I0KSkpCiAjZGVmaW5lIERCU0E0ICAgCSAgICAgICAgCS8qIERNQSBCdWZmZXIgU3RhcnQgYWRkcmVzcyByZWcuIEEgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDQgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfREJTQTQpKSkKKwkJCQkJLyogY2hhbm5lbCA0ICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgQWRkcmVzcyAqKSBpb19wMnYgKF9EQlNBNCkpKQogI2RlZmluZSBEQlRBNCAgIAkgICAgICAgIAkvKiBETUEgQnVmZmVyIFRyYW5zZmVyIGNvdW50ICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcmVnLiBBIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0RCVEE0KSkpCisJCQkJCS8qIHJlZy4gQSBjaGFubmVsIDQgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfREJUQTQpKSkKICNkZWZpbmUgREJTQjQgICAJICAgICAgICAJLyogRE1BIEJ1ZmZlciBTdGFydCBhZGRyZXNzIHJlZy4gQiAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgQWRkcmVzcyAqKSBpb19wMnYgKF9EQlNCNCkpKQorCQkJCQkvKiBjaGFubmVsIDQgICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RCU0I0KSkpCiAjZGVmaW5lIERCVEI0ICAgCSAgICAgICAgCS8qIERNQSBCdWZmZXIgVHJhbnNmZXIgY291bnQgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIEIgY2hhbm5lbCA0ICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfREJUQjQpKSkKKwkJCQkJLyogcmVnLiBCIGNoYW5uZWwgNCAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EQlRCNCkpKQogCiAjZGVmaW5lIEREQVI1ICAgCSAgICAgICAgCS8qIERNQSBEZXZpY2UgQWRkcmVzcyBSZWcuICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDUgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfRERBUjUpKSkKKwkJCQkJLyogY2hhbm5lbCA1ICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EREFSNSkpKQogI2RlZmluZSBTZXREQ1NSNQkgICAgICAgIAkvKiBTZXQgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCA1ICh3cml0ZSkgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1NldERDU1I1KSkpCisJCQkJCS8qIGNoYW5uZWwgNSAod3JpdGUpICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfU2V0RENTUjUpKSkKICNkZWZpbmUgQ2xyRENTUjUJICAgICAgICAJLyogQ2xlYXIgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgNSAod3JpdGUpICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9DbHJEQ1NSNSkpKQorCQkJCQkvKiBjaGFubmVsIDUgKHdyaXRlKSAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0NsckRDU1I1KSkpCiAjZGVmaW5lIFJkRENTUjUgCSAgICAgICAgCS8qIFJlYWQgRE1BIENvbnRyb2wgJiBTdGF0dXMgUmVnLiAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDUgKHJlYWQpICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfUmREQ1NSNSkpKQorCQkJCQkvKiBjaGFubmVsIDUgKHJlYWQpICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX1JkRENTUjUpKSkKICNkZWZpbmUgREJTQTUgICAJICAgICAgICAJLyogRE1BIEJ1ZmZlciBTdGFydCBhZGRyZXNzIHJlZy4gQSAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgQWRkcmVzcyAqKSBpb19wMnYgKF9EQlNBNSkpKQorCQkJCQkvKiBjaGFubmVsIDUgICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RCU0E1KSkpCiAjZGVmaW5lIERCVEE1ICAgCSAgICAgICAgCS8qIERNQSBCdWZmZXIgVHJhbnNmZXIgY291bnQgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiByZWcuIEEgY2hhbm5lbCA1ICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfREJUQTUpKSkKKwkJCQkJLyogcmVnLiBBIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EQlRBNSkpKQogI2RlZmluZSBEQlNCNSAgIAkgICAgICAgIAkvKiBETUEgQnVmZmVyIFN0YXJ0IGFkZHJlc3MgcmVnLiBCICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCA1ICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RCU0I1KSkpCisJCQkJCS8qIGNoYW5uZWwgNSAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfREJTQjUpKSkKICNkZWZpbmUgREJUQjUgICAJICAgICAgICAJLyogRE1BIEJ1ZmZlciBUcmFuc2ZlciBjb3VudCAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHJlZy4gQiBjaGFubmVsIDUgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9EQlRCNSkpKQorCQkJCQkvKiByZWcuIEIgY2hhbm5lbCA1ICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0RCVEI1KSkpCiAKICNlbmRpZiAvKiBMQU5HVUFHRSA9PSBDICovCiAKICNkZWZpbmUgRERBUl9SVyAJMHgwMDAwMDAwMQkvKiBkZXZpY2UgZGF0YSBSZWFkL1dyaXRlICAgICAgICAgICovCiAjZGVmaW5lIEREQVJfRGV2V3IJKEREQVJfUlcqMCkJLyogIERldmljZSBkYXRhIFdyaXRlICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgKG1lbW9yeSAtPiBkZXZpY2UpICAgICAgICAgICAgICovCisJCQkJCS8qICAobWVtb3J5IC0+IGRldmljZSkgICAgICAgICAgICAgKi8KICNkZWZpbmUgRERBUl9EZXZSZAkoRERBUl9SVyoxKQkvKiAgRGV2aWNlIGRhdGEgUmVhZCAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAoZGV2aWNlIC0+IG1lbW9yeSkgICAgICAgICAgICAgKi8KKwkJCQkJLyogIChkZXZpY2UgLT4gbWVtb3J5KSAgICAgICAgICAgICAqLwogI2RlZmluZSBEREFSX0UgIAkweDAwMDAwMDAyCS8qIGJpZy9saXR0bGUgRW5kaWFuIGRldmljZSAgICAgICAgKi8KICNkZWZpbmUgRERBUl9MdGxFbmQJKEREQVJfRSowKQkvKiAgTGl0dGxlIEVuZGlhbiBkZXZpY2UgICAgICAgICAgICovCiAjZGVmaW5lIEREQVJfQmlnRW5kCShEREFSX0UqMSkJLyogIEJpZyBFbmRpYW4gZGV2aWNlICAgICAgICAgICAgICAqLwpAQCAtMjQ0MiwxMDEgKzI0NDIsMTAxIEBACiAjZGVmaW5lIEREQVJfMTZCaXREZXYJKEREQVJfRFcqMSkJLyogIDE2LUJpdCBEZXZpY2UgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBEREFSX0RTIAlGbGQgKDQsIDQpCS8qIERldmljZSBTZWxlY3QgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgRERBUl9TZXIwVURDVHIJICAgICAgICAJLyogIFNlci4gcG9ydCAwIFVEQyBUcmFuc21pdCAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDAgPDwgRlNoZnQgKEREQVJfRFMpKQorCQkJKDB4MCA8PCBGU2hmdCAoRERBUl9EUykpCiAjZGVmaW5lIEREQVJfU2VyMFVEQ1JjCSAgICAgICAgCS8qICBTZXIuIHBvcnQgMCBVREMgUmVjZWl2ZSAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgxIDw8IEZTaGZ0IChEREFSX0RTKSkKKwkJCSgweDEgPDwgRlNoZnQgKEREQVJfRFMpKQogI2RlZmluZSBEREFSX1NlcjFTRExDVHIJICAgICAgICAJLyogIFNlci4gcG9ydCAxIFNETEMgVHJhbnNtaXQgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDIgPDwgRlNoZnQgKEREQVJfRFMpKQorCQkJKDB4MiA8PCBGU2hmdCAoRERBUl9EUykpCiAjZGVmaW5lIEREQVJfU2VyMVNETENSYwkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDEgU0RMQyBSZWNlaXZlICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDB4MyA8PCBGU2hmdCAoRERBUl9EUykpCisJCQkoMHgzIDw8IEZTaGZ0IChEREFSX0RTKSkKICNkZWZpbmUgRERBUl9TZXIxVUFSVFRyCSAgICAgICAgCS8qICBTZXIuIHBvcnQgMSBVQVJUIFRyYW5zbWl0ICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHg0IDw8IEZTaGZ0IChEREFSX0RTKSkKKwkJCSgweDQgPDwgRlNoZnQgKEREQVJfRFMpKQogI2RlZmluZSBEREFSX1NlcjFVQVJUUmMJICAgICAgICAJLyogIFNlci4gcG9ydCAxIFVBUlQgUmVjZWl2ZSAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDUgPDwgRlNoZnQgKEREQVJfRFMpKQorCQkJKDB4NSA8PCBGU2hmdCAoRERBUl9EUykpCiAjZGVmaW5lIEREQVJfU2VyMklDUFRyCSAgICAgICAgCS8qICBTZXIuIHBvcnQgMiBJQ1AgVHJhbnNtaXQgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHg2IDw8IEZTaGZ0IChEREFSX0RTKSkKKwkJCSgweDYgPDwgRlNoZnQgKEREQVJfRFMpKQogI2RlZmluZSBEREFSX1NlcjJJQ1BSYwkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDIgSUNQIFJlY2VpdmUgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDB4NyA8PCBGU2hmdCAoRERBUl9EUykpCisJCQkoMHg3IDw8IEZTaGZ0IChEREFSX0RTKSkKICNkZWZpbmUgRERBUl9TZXIzVUFSVFRyCSAgICAgICAgCS8qICBTZXIuIHBvcnQgMyBVQVJUIFRyYW5zbWl0ICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHg4IDw8IEZTaGZ0IChEREFSX0RTKSkKKwkJCSgweDggPDwgRlNoZnQgKEREQVJfRFMpKQogI2RlZmluZSBEREFSX1NlcjNVQVJUUmMJICAgICAgICAJLyogIFNlci4gcG9ydCAzIFVBUlQgUmVjZWl2ZSAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweDkgPDwgRlNoZnQgKEREQVJfRFMpKQorCQkJKDB4OSA8PCBGU2hmdCAoRERBUl9EUykpCiAjZGVmaW5lIEREQVJfU2VyNE1DUDBUcgkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDQgTUNQIDAgVHJhbnNtaXQgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIChhdWRpbykgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweEEgPDwgRlNoZnQgKEREQVJfRFMpKQorCQkJCQkvKiAgKGF1ZGlvKSAgICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgweEEgPDwgRlNoZnQgKEREQVJfRFMpKQogI2RlZmluZSBEREFSX1NlcjRNQ1AwUmMJICAgICAgICAJLyogIFNlci4gcG9ydCA0IE1DUCAwIFJlY2VpdmUgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICAoYXVkaW8pICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHhCIDw8IEZTaGZ0IChEREFSX0RTKSkKKwkJCQkJLyogIChhdWRpbykgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoMHhCIDw8IEZTaGZ0IChEREFSX0RTKSkKICNkZWZpbmUgRERBUl9TZXI0TUNQMVRyCSAgICAgICAgCS8qICBTZXIuIHBvcnQgNCBNQ1AgMSBUcmFuc21pdCAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgKHRlbGVjb20pICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDB4QyA8PCBGU2hmdCAoRERBUl9EUykpCisJCQkJCS8qICAodGVsZWNvbSkgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKDB4QyA8PCBGU2hmdCAoRERBUl9EUykpCiAjZGVmaW5lIEREQVJfU2VyNE1DUDFSYwkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDQgTUNQIDEgUmVjZWl2ZSAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogICh0ZWxlY29tKSAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweEQgPDwgRlNoZnQgKEREQVJfRFMpKQorCQkJCQkvKiAgKHRlbGVjb20pICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgweEQgPDwgRlNoZnQgKEREQVJfRFMpKQogI2RlZmluZSBEREFSX1NlcjRTU1BUcgkgICAgICAgIAkvKiAgU2VyLiBwb3J0IDQgU1NQIFRyYW5zbWl0ICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDB4RSA8PCBGU2hmdCAoRERBUl9EUykpCisJCQkoMHhFIDw8IEZTaGZ0IChEREFSX0RTKSkKICNkZWZpbmUgRERBUl9TZXI0U1NQUmMJICAgICAgICAJLyogIFNlci4gcG9ydCA0IFNTUCBSZWNlaXZlICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgweEYgPDwgRlNoZnQgKEREQVJfRFMpKQorCQkJKDB4RiA8PCBGU2hmdCAoRERBUl9EUykpCiAjZGVmaW5lIEREQVJfREEgCUZsZCAoMjQsIDgpCS8qIERldmljZSBBZGRyZXNzICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgRERBUl9EZXZBZGQoQWRkKSAgICAgICAgCS8qICBEZXZpY2UgQWRkcmVzcyAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKChBZGQpICYgMHhGMDAwMDAwMCkgfCBcCi0gICAgICAgICAgICAgICAgCSAoKChBZGQpICYgMFgwMDNGRkZGQykgPDwgKEZTaGZ0IChEREFSX0RBKSAtIDIpKSkKKwkJCSgoKEFkZCkgJiAweEYwMDAwMDAwKSB8IFwKKwkJCSAoKChBZGQpICYgMFgwMDNGRkZGQykgPDwgKEZTaGZ0IChEREFSX0RBKSAtIDIpKSkKICNkZWZpbmUgRERBUl9TZXIwVURDV3IJICAgICAgICAJLyogU2VyLiBwb3J0IDAgVURDIFdyaXRlICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCShEREFSX0RldldyICsgRERBUl9CcnN0OCArIEREQVJfOEJpdERldiArIFwKLSAgICAgICAgICAgICAgICAJIEREQVJfU2VyMFVEQ1RyICsgRERBUl9EZXZBZGQgKF9TZXIwVURDRFIpKQorCQkJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q4ICsgRERBUl84Qml0RGV2ICsgXAorCQkJIEREQVJfU2VyMFVEQ1RyICsgRERBUl9EZXZBZGQgKF9TZXIwVURDRFIpKQogI2RlZmluZSBEREFSX1NlcjBVRENSZAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMCBVREMgUmVhZCAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q4ICsgRERBUl84Qml0RGV2ICsgXAotICAgICAgICAgICAgICAgIAkgRERBUl9TZXIwVURDUmMgKyBEREFSX0RldkFkZCAoX1NlcjBVRENEUikpCisJCQkoRERBUl9EZXZSZCArIEREQVJfQnJzdDggKyBEREFSXzhCaXREZXYgKyBcCisJCQkgRERBUl9TZXIwVURDUmMgKyBEREFSX0RldkFkZCAoX1NlcjBVRENEUikpCiAjZGVmaW5lIEREQVJfU2VyMVVBUlRXcgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBVQVJUIFdyaXRlICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAotICAgICAgICAgICAgICAgIAkgRERBUl9TZXIxVUFSVFRyICsgRERBUl9EZXZBZGQgKF9TZXIxVVREUikpCisJCQkoRERBUl9EZXZXciArIEREQVJfQnJzdDQgKyBEREFSXzhCaXREZXYgKyBcCisJCQkgRERBUl9TZXIxVUFSVFRyICsgRERBUl9EZXZBZGQgKF9TZXIxVVREUikpCiAjZGVmaW5lIEREQVJfU2VyMVVBUlRSZAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBVQVJUIFJlYWQgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAotICAgICAgICAgICAgICAgIAkgRERBUl9TZXIxVUFSVFJjICsgRERBUl9EZXZBZGQgKF9TZXIxVVREUikpCisJCQkoRERBUl9EZXZSZCArIEREQVJfQnJzdDQgKyBEREFSXzhCaXREZXYgKyBcCisJCQkgRERBUl9TZXIxVUFSVFJjICsgRERBUl9EZXZBZGQgKF9TZXIxVVREUikpCiAjZGVmaW5lIEREQVJfU2VyMVNETENXcgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBTRExDIFdyaXRlICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAotICAgICAgICAgICAgICAgIAkgRERBUl9TZXIxU0RMQ1RyICsgRERBUl9EZXZBZGQgKF9TZXIxU0REUikpCisJCQkoRERBUl9EZXZXciArIEREQVJfQnJzdDQgKyBEREFSXzhCaXREZXYgKyBcCisJCQkgRERBUl9TZXIxU0RMQ1RyICsgRERBUl9EZXZBZGQgKF9TZXIxU0REUikpCiAjZGVmaW5lIEREQVJfU2VyMVNETENSZAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMSBTRExDIFJlYWQgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAotICAgICAgICAgICAgICAgIAkgRERBUl9TZXIxU0RMQ1JjICsgRERBUl9EZXZBZGQgKF9TZXIxU0REUikpCisJCQkoRERBUl9EZXZSZCArIEREQVJfQnJzdDQgKyBEREFSXzhCaXREZXYgKyBcCisJCQkgRERBUl9TZXIxU0RMQ1JjICsgRERBUl9EZXZBZGQgKF9TZXIxU0REUikpCiAjZGVmaW5lIEREQVJfU2VyMlVBUlRXcgkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBVQVJUIFdyaXRlICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAotICAgICAgICAgICAgICAgIAkgRERBUl9TZXIySUNQVHIgKyBEREFSX0RldkFkZCAoX1NlcjJVVERSKSkKKwkJCShEREFSX0RldldyICsgRERBUl9CcnN0NCArIEREQVJfOEJpdERldiArIFwKKwkJCSBEREFSX1NlcjJJQ1BUciArIEREQVJfRGV2QWRkIChfU2VyMlVURFIpKQogI2RlZmluZSBEREFSX1NlcjJVQVJUUmQJICAgICAgICAJLyogU2VyLiBwb3J0IDIgVUFSVCBSZWFkICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCShEREFSX0RldlJkICsgRERBUl9CcnN0NCArIEREQVJfOEJpdERldiArIFwKLSAgICAgICAgICAgICAgICAJIEREQVJfU2VyMklDUFJjICsgRERBUl9EZXZBZGQgKF9TZXIyVVREUikpCisJCQkoRERBUl9EZXZSZCArIEREQVJfQnJzdDQgKyBEREFSXzhCaXREZXYgKyBcCisJCQkgRERBUl9TZXIySUNQUmMgKyBEREFSX0RldkFkZCAoX1NlcjJVVERSKSkKICNkZWZpbmUgRERBUl9TZXIySFNTUFdyCSAgICAgICAgCS8qIFNlci4gcG9ydCAyIEhTU1AgV3JpdGUgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoRERBUl9EZXZXciArIEREQVJfQnJzdDggKyBEREFSXzhCaXREZXYgKyBcCi0gICAgICAgICAgICAgICAgCSBEREFSX1NlcjJJQ1BUciArIEREQVJfRGV2QWRkIChfU2VyMkhTRFIpKQorCQkJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q4ICsgRERBUl84Qml0RGV2ICsgXAorCQkJIEREQVJfU2VyMklDUFRyICsgRERBUl9EZXZBZGQgKF9TZXIySFNEUikpCiAjZGVmaW5lIEREQVJfU2VyMkhTU1BSZAkgICAgICAgIAkvKiBTZXIuIHBvcnQgMiBIU1NQIFJlYWQgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q4ICsgRERBUl84Qml0RGV2ICsgXAotICAgICAgICAgICAgICAgIAkgRERBUl9TZXIySUNQUmMgKyBEREFSX0RldkFkZCAoX1NlcjJIU0RSKSkKKwkJCShEREFSX0RldlJkICsgRERBUl9CcnN0OCArIEREQVJfOEJpdERldiArIFwKKwkJCSBEREFSX1NlcjJJQ1BSYyArIEREQVJfRGV2QWRkIChfU2VyMkhTRFIpKQogI2RlZmluZSBEREFSX1NlcjNVQVJUV3IJICAgICAgICAJLyogU2VyLiBwb3J0IDMgVUFSVCBXcml0ZSAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCShEREFSX0RldldyICsgRERBUl9CcnN0NCArIEREQVJfOEJpdERldiArIFwKLSAgICAgICAgICAgICAgICAJIEREQVJfU2VyM1VBUlRUciArIEREQVJfRGV2QWRkIChfU2VyM1VURFIpKQorCQkJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAorCQkJIEREQVJfU2VyM1VBUlRUciArIEREQVJfRGV2QWRkIChfU2VyM1VURFIpKQogI2RlZmluZSBEREFSX1NlcjNVQVJUUmQJICAgICAgICAJLyogU2VyLiBwb3J0IDMgVUFSVCBSZWFkICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCShEREFSX0RldlJkICsgRERBUl9CcnN0NCArIEREQVJfOEJpdERldiArIFwKLSAgICAgICAgICAgICAgICAJIEREQVJfU2VyM1VBUlRSYyArIEREQVJfRGV2QWRkIChfU2VyM1VURFIpKQorCQkJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q0ICsgRERBUl84Qml0RGV2ICsgXAorCQkJIEREQVJfU2VyM1VBUlRSYyArIEREQVJfRGV2QWRkIChfU2VyM1VURFIpKQogI2RlZmluZSBEREFSX1NlcjRNQ1AwV3IJICAgICAgICAJLyogU2VyLiBwb3J0IDQgTUNQIDAgV3JpdGUgKGF1ZGlvKSAqLyBcCi0gICAgICAgICAgICAgICAgCShEREFSX0RldldyICsgRERBUl9CcnN0NCArIEREQVJfMTZCaXREZXYgKyBcCi0gICAgICAgICAgICAgICAgCSBEREFSX1NlcjRNQ1AwVHIgKyBEREFSX0RldkFkZCAoX1NlcjRNQ0RSMCkpCisJCQkoRERBUl9EZXZXciArIEREQVJfQnJzdDQgKyBEREFSXzE2Qml0RGV2ICsgXAorCQkJIEREQVJfU2VyNE1DUDBUciArIEREQVJfRGV2QWRkIChfU2VyNE1DRFIwKSkKICNkZWZpbmUgRERBUl9TZXI0TUNQMFJkCSAgICAgICAgCS8qIFNlci4gcG9ydCA0IE1DUCAwIFJlYWQgKGF1ZGlvKSAgKi8gXAotICAgICAgICAgICAgICAgIAkoRERBUl9EZXZSZCArIEREQVJfQnJzdDQgKyBEREFSXzE2Qml0RGV2ICsgXAotICAgICAgICAgICAgICAgIAkgRERBUl9TZXI0TUNQMFJjICsgRERBUl9EZXZBZGQgKF9TZXI0TUNEUjApKQorCQkJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q0ICsgRERBUl8xNkJpdERldiArIFwKKwkJCSBEREFSX1NlcjRNQ1AwUmMgKyBEREFSX0RldkFkZCAoX1NlcjRNQ0RSMCkpCiAjZGVmaW5lIEREQVJfU2VyNE1DUDFXcgkgICAgICAgIAkvKiBTZXIuIHBvcnQgNCBNQ1AgMSBXcml0ZSAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKHRlbGVjb20pICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCShEREFSX0RldldyICsgRERBUl9CcnN0NCArIEREQVJfMTZCaXREZXYgKyBcCi0gICAgICAgICAgICAgICAgCSBEREFSX1NlcjRNQ1AxVHIgKyBEREFSX0RldkFkZCAoX1NlcjRNQ0RSMSkpCisJCQkJCS8qICh0ZWxlY29tKSAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKEREQVJfRGV2V3IgKyBEREFSX0Jyc3Q0ICsgRERBUl8xNkJpdERldiArIFwKKwkJCSBEREFSX1NlcjRNQ1AxVHIgKyBEREFSX0RldkFkZCAoX1NlcjRNQ0RSMSkpCiAjZGVmaW5lIEREQVJfU2VyNE1DUDFSZAkgICAgICAgIAkvKiBTZXIuIHBvcnQgNCBNQ1AgMSBSZWFkICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogKHRlbGVjb20pICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCShEREFSX0RldlJkICsgRERBUl9CcnN0NCArIEREQVJfMTZCaXREZXYgKyBcCi0gICAgICAgICAgICAgICAgCSBEREFSX1NlcjRNQ1AxUmMgKyBEREFSX0RldkFkZCAoX1NlcjRNQ0RSMSkpCisJCQkJCS8qICh0ZWxlY29tKSAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q0ICsgRERBUl8xNkJpdERldiArIFwKKwkJCSBEREFSX1NlcjRNQ1AxUmMgKyBEREFSX0RldkFkZCAoX1NlcjRNQ0RSMSkpCiAjZGVmaW5lIEREQVJfU2VyNFNTUFdyCSAgICAgICAgCS8qIFNlci4gcG9ydCA0IFNTUCBXcml0ZSAoMTYgYml0cykgKi8gXAotICAgICAgICAgICAgICAgIAkoRERBUl9EZXZXciArIEREQVJfQnJzdDQgKyBEREFSXzE2Qml0RGV2ICsgXAotICAgICAgICAgICAgICAgIAkgRERBUl9TZXI0U1NQVHIgKyBEREFSX0RldkFkZCAoX1NlcjRTU0RSKSkKKwkJCShEREFSX0RldldyICsgRERBUl9CcnN0NCArIEREQVJfMTZCaXREZXYgKyBcCisJCQkgRERBUl9TZXI0U1NQVHIgKyBEREFSX0RldkFkZCAoX1NlcjRTU0RSKSkKICNkZWZpbmUgRERBUl9TZXI0U1NQUmQJICAgICAgICAJLyogU2VyLiBwb3J0IDQgU1NQIFJlYWQgKDE2IGJpdHMpICAqLyBcCi0gICAgICAgICAgICAgICAgCShEREFSX0RldlJkICsgRERBUl9CcnN0NCArIEREQVJfMTZCaXREZXYgKyBcCi0gICAgICAgICAgICAgICAgCSBEREFSX1NlcjRTU1BSYyArIEREQVJfRGV2QWRkIChfU2VyNFNTRFIpKQorCQkJKEREQVJfRGV2UmQgKyBEREFSX0Jyc3Q0ICsgRERBUl8xNkJpdERldiArIFwKKwkJCSBEREFSX1NlcjRTU1BSYyArIEREQVJfRGV2QWRkIChfU2VyNFNTRFIpKQogCiAjZGVmaW5lIERDU1JfUlVOCTB4MDAwMDAwMDEJLyogRE1BIFJVTmluZyAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBEQ1NSX0lFIAkweDAwMDAwMDAyCS8qIERNQSBJbnRlcnJ1cHQgRW5hYmxlICAgICAgICAgICAgKi8KQEAgLTI2MDgsMTQgKzI2MDgsMTQgQEAKIAogI2RlZmluZSBMQ0RfUEVudHJ5U3AJMiAgICAgICAJLyogTENEIFBhbGV0dGUgRW50cnkgU3BhY2UgW2J5dGVdICAqLwogI2RlZmluZSBMQ0RfNEJpdFBTcAkgICAgICAgIAkvKiBMQ0QgNC1CaXQgcGl4ZWwgUGFsZXR0ZSBTcGFjZSAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogW2J5dGVdICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgxNipMQ0RfUEVudHJ5U3ApCisJCQkJCS8qIFtieXRlXSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKDE2KkxDRF9QRW50cnlTcCkKICNkZWZpbmUgTENEXzhCaXRQU3AJICAgICAgICAJLyogTENEIDgtQml0IHBpeGVsIFBhbGV0dGUgU3BhY2UgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFtieXRlXSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMjU2KkxDRF9QRW50cnlTcCkKKwkJCQkJLyogW2J5dGVdICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoMjU2KkxDRF9QRW50cnlTcCkKICNkZWZpbmUgTENEXzEyXzE2Qml0UFNwCSAgICAgICAgCS8qIExDRCAxMi8xNi1CaXQgcGl4ZWwgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBkdW1teS1QYWxldHRlIFNwYWNlIFtieXRlXSAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDE2KkxDRF9QRW50cnlTcCkKKwkJCQkJLyogZHVtbXktUGFsZXR0ZSBTcGFjZSBbYnl0ZV0gICAgICAqLyBcCisJCQkoMTYqTENEX1BFbnRyeVNwKQogCiAjZGVmaW5lIExDRF9QR3JleQlGbGQgKDQsIDApCS8qIExDRCBQYWxldHRlIGVudHJ5IEdyZXkgdmFsdWUgICAgKi8KICNkZWZpbmUgTENEX1BCbHVlCUZsZCAoNCwgMCkJLyogTENEIFBhbGV0dGUgZW50cnkgQmx1ZSB2YWx1ZSAgICAqLwpAQCAtMjYyMywxMSArMjYyMywxMSBAQAogI2RlZmluZSBMQ0RfUFJlZAlGbGQgKDQsIDgpCS8qIExDRCBQYWxldHRlIGVudHJ5IFJlZCB2YWx1ZSAgICAgKi8KICNkZWZpbmUgTENEX1BCUyAJRmxkICgyLCAxMikJLyogTENEIFBpeGVsIEJpdCBTaXplICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ0RfNEJpdAkgICAgICAgIAkvKiAgTENEIDQtQml0IHBpeGVsIG1vZGUgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDAgPDwgRlNoZnQgKExDRF9QQlMpKQorCQkJKDAgPDwgRlNoZnQgKExDRF9QQlMpKQogI2RlZmluZSBMQ0RfOEJpdAkgICAgICAgIAkvKiAgTENEIDgtQml0IHBpeGVsIG1vZGUgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKDEgPDwgRlNoZnQgKExDRF9QQlMpKQorCQkJKDEgPDwgRlNoZnQgKExDRF9QQlMpKQogI2RlZmluZSBMQ0RfMTJfMTZCaXQJICAgICAgICAJLyogIExDRCAxMi8xNi1CaXQgcGl4ZWwgbW9kZSAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgyIDw8IEZTaGZ0IChMQ0RfUEJTKSkKKwkJCSgyIDw8IEZTaGZ0IChMQ0RfUEJTKSkKIAogI2RlZmluZSBMQ0RfSW50MF8wCTB4MCAgICAgCS8qIExDRCBJbnRlbnNpdHkgPSAgIDAuMCUgPSAgMCAgICAgKi8KICNkZWZpbmUgTENEX0ludDExXzEJMHgxICAgICAJLyogTENEIEludGVuc2l0eSA9ICAxMS4xJSA9ICAxLzkgICAqLwpAQCAtMjY0NSw0NSArMjY0NSw0NSBAQAogI2RlZmluZSBMQ0RfSW50ODhfOQkweEQgICAgIAkvKiBMQ0QgSW50ZW5zaXR5ID0gIDg4LjklID0gIDgvOSAgICovCiAjZGVmaW5lIExDRF9JbnQxMDBfMAkweEUgICAgIAkvKiBMQ0QgSW50ZW5zaXR5ID0gMTAwLjAlID0gIDEgICAgICovCiAjZGVmaW5lIExDRF9JbnQxMDBfMEEJMHhGICAgICAJLyogTENEIEludGVuc2l0eSA9IDEwMC4wJSA9ICAxICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAoQWx0ZXJuYXRpdmUpICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIChBbHRlcm5hdGl2ZSkgICAgICAgICAgICAgICAgICAgKi8KIAogI2RlZmluZSBfTENDUjAgIAkweEIwMTAwMDAwCS8qIExDRCBDb250cm9sIFJlZy4gMCAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0xDU1IgICAJMHhCMDEwMDAwNAkvKiBMQ0QgU3RhdHVzIFJlZy4gICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EQkFSMSAgCTB4QjAxMDAwMTAJLyogTENEIERNQSBCYXNlIEFkZHJlc3MgUmVnLiAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0RDQVIxICAJMHhCMDEwMDAxNAkvKiBMQ0QgRE1BIEN1cnJlbnQgQWRkcmVzcyBSZWcuICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfREJBUjIgIAkweEIwMTAwMDE4CS8qIExDRCBETUEgQmFzZSBBZGRyZXNzIFJlZy4gICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9EQ0FSMiAgCTB4QjAxMDAwMUMJLyogTENEIERNQSBDdXJyZW50IEFkZHJlc3MgUmVnLiAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX0xDQ1IxICAJMHhCMDEwMDAyMAkvKiBMQ0QgQ29udHJvbCBSZWcuIDEgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9MQ0NSMiAgCTB4QjAxMDAwMjQJLyogTENEIENvbnRyb2wgUmVnLiAyICAgICAgICAgICAgICAqLwogI2RlZmluZSBfTENDUjMgIAkweEIwMTAwMDI4CS8qIExDRCBDb250cm9sIFJlZy4gMyAgICAgICAgICAgICAgKi8KIAogI2lmIExBTkdVQUdFID09IEMKICNkZWZpbmUgTENDUjAgICAJICAgICAgICAJLyogTENEIENvbnRyb2wgUmVnLiAwICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0xDQ1IwKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9MQ0NSMCkpKQogI2RlZmluZSBMQ1NSICAgIAkgICAgICAgIAkvKiBMQ0QgU3RhdHVzIFJlZy4gICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfTENTUikpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfTENTUikpKQogI2RlZmluZSBEQkFSMSAgIAkgICAgICAgIAkvKiBMQ0QgRE1BIEJhc2UgQWRkcmVzcyBSZWcuICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAxICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RCQVIxKSkpCisJCQkJCS8qIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfREJBUjEpKSkKICNkZWZpbmUgRENBUjEgICAJICAgICAgICAJLyogTENEIERNQSBDdXJyZW50IEFkZHJlc3MgUmVnLiAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGNoYW5uZWwgMSAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgQWRkcmVzcyAqKSBpb19wMnYgKF9EQ0FSMSkpKQorCQkJCQkvKiBjaGFubmVsIDEgICAgICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RDQVIxKSkpCiAjZGVmaW5lIERCQVIyICAgCSAgICAgICAgCS8qIExDRCBETUEgQmFzZSBBZGRyZXNzIFJlZy4gICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBjaGFubmVsIDIgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfREJBUjIpKSkKKwkJCQkJLyogY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKigodm9sYXRpbGUgQWRkcmVzcyAqKSBpb19wMnYgKF9EQkFSMikpKQogI2RlZmluZSBEQ0FSMiAgIAkgICAgICAgIAkvKiBMQ0QgRE1BIEN1cnJlbnQgQWRkcmVzcyBSZWcuICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY2hhbm5lbCAyICAgICAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBBZGRyZXNzICopIGlvX3AydiAoX0RDQVIyKSkpCisJCQkJCS8qIGNoYW5uZWwgMiAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCooKHZvbGF0aWxlIEFkZHJlc3MgKikgaW9fcDJ2IChfRENBUjIpKSkKICNkZWZpbmUgTENDUjEgICAJICAgICAgICAJLyogTENEIENvbnRyb2wgUmVnLiAxICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0xDQ1IxKSkpCisJCQkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9MQ0NSMSkpKQogI2RlZmluZSBMQ0NSMiAgIAkgICAgICAgIAkvKiBMQ0QgQ29udHJvbCBSZWcuIDIgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfTENDUjIpKSkKKwkJCSgqKCh2b2xhdGlsZSBXb3JkICopIGlvX3AydiAoX0xDQ1IyKSkpCiAjZGVmaW5lIExDQ1IzICAgCSAgICAgICAgCS8qIExDRCBDb250cm9sIFJlZy4gMyAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKigodm9sYXRpbGUgV29yZCAqKSBpb19wMnYgKF9MQ0NSMykpKQorCQkJKCooKHZvbGF0aWxlIFdvcmQgKikgaW9fcDJ2IChfTENDUjMpKSkKICNlbmRpZiAvKiBMQU5HVUFHRSA9PSBDICovCiAKICNkZWZpbmUgTENDUjBfTEVOCTB4MDAwMDAwMDEJLyogTENEIEVOYWJsZSAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjY5MSwxNiArMjY5MSwxNiBAQAogI2RlZmluZSBMQ0NSMF9Db2xvcgkoTENDUjBfQ01TKjApCS8qICBDb2xvciBkaXNwbGF5ICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENDUjBfTW9ubwkoTENDUjBfQ01TKjEpCS8qICBNb25vY2hyb21lIGRpc3BsYXkgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENDUjBfU0RTCTB4MDAwMDAwMDQJLyogU2luZ2xlL0R1YWwgcGFuZWwgZGlzcGxheSAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBTZWxlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIFNlbGVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENDUjBfU25nbAkoTENDUjBfU0RTKjApCS8qICBTaW5nbGUgcGFuZWwgZGlzcGxheSAgICAgICAgICAgKi8KICNkZWZpbmUgTENDUjBfRHVhbAkoTENDUjBfU0RTKjEpCS8qICBEdWFsIHBhbmVsIGRpc3BsYXkgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENDUjBfTERNCTB4MDAwMDAwMDgJLyogTENEIERpc2FibGUgZG9uZSAoTEREKSAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBpbnRlcnJ1cHQgTWFzayAoZGlzYWJsZSkgICAgICAgICovCisJCQkJCS8qIGludGVycnVwdCBNYXNrIChkaXNhYmxlKSAgICAgICAgKi8KICNkZWZpbmUgTENDUjBfQkFNCTB4MDAwMDAwMTAJLyogQmFzZSBBZGRyZXNzIHVwZGF0ZSAoQkFVKSAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBpbnRlcnJ1cHQgTWFzayAoZGlzYWJsZSkgICAgICAgICovCisJCQkJCS8qIGludGVycnVwdCBNYXNrIChkaXNhYmxlKSAgICAgICAgKi8KICNkZWZpbmUgTENDUjBfRVJNCTB4MDAwMDAwMjAJLyogTENEIEVScm9yIChCRVIsIElPTCwgSVVMLCBJT1UsICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBJVVUsIE9PTCwgT1VMLCBPT1UsIGFuZCBPVVUpICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIGludGVycnVwdCBNYXNrIChkaXNhYmxlKSAgICAgICAgKi8KKwkJCQkJLyogSVVVLCBPT0wsIE9VTCwgT09VLCBhbmQgT1VVKSAgICAqLworCQkJCQkvKiBpbnRlcnJ1cHQgTWFzayAoZGlzYWJsZSkgICAgICAgICovCiAjZGVmaW5lIExDQ1IwX1BBUwkweDAwMDAwMDgwCS8qIFBhc3NpdmUvQWN0aXZlIGRpc3BsYXkgU2VsZWN0ICAgKi8KICNkZWZpbmUgTENDUjBfUGFzCShMQ0NSMF9QQVMqMCkJLyogIFBhc3NpdmUgZGlzcGxheSAoU1ROKSAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSMF9BY3QJKExDQ1IwX1BBUyoxKQkvKiAgQWN0aXZlIGRpc3BsYXkgKFRGVCkgICAgICAgICAgICovCkBAIC0yNzA4LDEyNyArMjcwOCwxMjYgQEAKICNkZWZpbmUgTENDUjBfTHRsRW5kCShMQ0NSMF9CTEUqMCkJLyogIExpdHRsZSBFbmRpYW4gZnJhbWUgYnVmZmVyICAgICAqLwogI2RlZmluZSBMQ0NSMF9CaWdFbmQJKExDQ1IwX0JMRSoxKQkvKiAgQmlnIEVuZGlhbiBmcmFtZSBidWZmZXIgICAgICAgICovCiAjZGVmaW5lIExDQ1IwX0RQRAkweDAwMDAwMjAwCS8qIERvdWJsZSBQaXhlbCBEYXRhIChtb25vY2hyb21lICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogZGlzcGxheSBtb2RlKSAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBkaXNwbGF5IG1vZGUpICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExDQ1IwXzRQaXhNb25vCShMQ0NSMF9EUEQqMCkJLyogIDQtUGl4ZWwvY2xvY2sgTW9ub2Nocm9tZSAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZGlzcGxheSAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qICBkaXNwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENDUjBfOFBpeE1vbm8JKExDQ1IwX0RQRCoxKQkvKiAgOC1QaXhlbC9jbG9jayBNb25vY2hyb21lICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBkaXNwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogIGRpc3BsYXkgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSMF9QREQJRmxkICg4LCAxMikJLyogUGFsZXR0ZSBETUEgcmVxdWVzdCBEZWxheSAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBbVG1lbV0gICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIFtUbWVtXSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENDUjBfRE1BRGVsKFRjcHUpICAgICAgCS8qICBwYWxldHRlIERNQSByZXF1ZXN0IERlbGF5ICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgWzAuLjUxMCBUY3B1XSAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKChUY3B1KS8yIDw8IEZTaGZ0IChMQ0NSMF9QREQpKQorCQkJCQkvKiAgWzAuLjUxMCBUY3B1XSAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgoVGNwdSkvMiA8PCBGU2hmdCAoTENDUjBfUEREKSkKIAogI2RlZmluZSBMQ1NSX0xERAkweDAwMDAwMDAxCS8qIExDRCBEaXNhYmxlIERvbmUgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENTUl9CQVUJMHgwMDAwMDAwMgkvKiBCYXNlIEFkZHJlc3MgVXBkYXRlIChyZWFkKSAgICAgICovCiAjZGVmaW5lIExDU1JfQkVSCTB4MDAwMDAwMDQJLyogQnVzIEVScm9yICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ1NSX0FCQwkweDAwMDAwMDA4CS8qIEFDIEJpYXMgY2xvY2sgQ291bnQgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENTUl9JT0wJMHgwMDAwMDAxMAkvKiBJbnB1dCBGSUZPIE92ZXItcnVuIExvd2VyICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHBhbmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcGFuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ1NSX0lVTAkweDAwMDAwMDIwCS8qIElucHV0IEZJRk8gVW5kZXItcnVuIExvd2VyICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcGFuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExDU1JfSU9VCTB4MDAwMDAwNDAJLyogSW5wdXQgRklGTyBPdmVyLXJ1biBVcHBlciAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHBhbmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENTUl9JVVUJMHgwMDAwMDA4MAkvKiBJbnB1dCBGSUZPIFVuZGVyLXJ1biBVcHBlciAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHBhbmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcGFuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ1NSX09PTAkweDAwMDAwMTAwCS8qIE91dHB1dCBGSUZPIE92ZXItcnVuIExvd2VyICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcGFuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExDU1JfT1VMCTB4MDAwMDAyMDAJLyogT3V0cHV0IEZJRk8gVW5kZXItcnVuIExvd2VyICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIHBhbmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENTUl9PT1UJMHgwMDAwMDQwMAkvKiBPdXRwdXQgRklGTyBPdmVyLXJ1biBVcHBlciAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHBhbmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogcGFuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ1NSX09VVQkweDAwMDAwODAwCS8qIE91dHB1dCBGSUZPIFVuZGVyLXJ1biBVcHBlciAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcGFuZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBwYW5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICNkZWZpbmUgTENDUjFfUFBMCUZsZCAoNiwgNCkJLyogUGl4ZWxzIFBlciBMaW5lLzE2IC0gMSAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSMV9EaXNXZHRoKFBpeGVsKSAgICAJLyogIERpc3BsYXkgV2lkdGggWzE2Li4xMDI0IHBpeC5dICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKFBpeGVsKSAtIDE2KS8xNiA8PCBGU2hmdCAoTENDUjFfUFBMKSkKKwkJCSgoKFBpeGVsKSAtIDE2KS8xNiA8PCBGU2hmdCAoTENDUjFfUFBMKSkKICNkZWZpbmUgTENDUjFfSFNXCUZsZCAoNiwgMTApCS8qIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogcHVsc2UgV2lkdGggLSAyIFtUcGl4XSAoTF9MQ0xLKSAqLworCQkJCQkvKiBwdWxzZSBXaWR0aCAtIDIgW1RwaXhdIChMX0xDTEspICovCiAjZGVmaW5lIExDQ1IxX0hvclNuY2hXZHRoKFRwaXgpIAkvKiAgSG9yaXpvbnRhbCBTeW5jaHJvbml6YXRpb24gICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIHB1bHNlIFdpZHRoIFsyLi42NSBUcGl4XSAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKFRwaXgpIC0gMikgPDwgRlNoZnQgKExDQ1IxX0hTVykpCisJCQkJCS8qICBwdWxzZSBXaWR0aCBbMi4uNjUgVHBpeF0gICAgICAgKi8gXAorCQkJKCgoVHBpeCkgLSAyKSA8PCBGU2hmdCAoTENDUjFfSFNXKSkKICNkZWZpbmUgTENDUjFfRUxXCUZsZCAoOCwgMTYpCS8qIEVuZC1vZi1MaW5lIHBpeGVsIGNsb2NrIFdhaXQgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY291bnQgLSAxIFtUcGl4XSAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjb3VudCAtIDEgW1RwaXhdICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExDQ1IxX0VuZExuRGVsKFRwaXgpICAgIAkvKiAgRW5kLW9mLUxpbmUgRGVsYXkgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFsxLi4yNTYgVHBpeF0gICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKFRwaXgpIC0gMSkgPDwgRlNoZnQgKExDQ1IxX0VMVykpCisJCQkJCS8qICBbMS4uMjU2IFRwaXhdICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCgoVHBpeCkgLSAxKSA8PCBGU2hmdCAoTENDUjFfRUxXKSkKICNkZWZpbmUgTENDUjFfQkxXCUZsZCAoOCwgMjQpCS8qIEJlZ2lubmluZy1vZi1MaW5lIHBpeGVsIGNsb2NrICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogV2FpdCBjb3VudCAtIDEgW1RwaXhdICAgICAgICAgICAqLworCQkJCQkvKiBXYWl0IGNvdW50IC0gMSBbVHBpeF0gICAgICAgICAgICovCiAjZGVmaW5lIExDQ1IxX0JlZ0xuRGVsKFRwaXgpICAgIAkvKiAgQmVnaW5uaW5nLW9mLUxpbmUgRGVsYXkgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFsxLi4yNTYgVHBpeF0gICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKFRwaXgpIC0gMSkgPDwgRlNoZnQgKExDQ1IxX0JMVykpCisJCQkJCS8qICBbMS4uMjU2IFRwaXhdICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKCgoVHBpeCkgLSAxKSA8PCBGU2hmdCAoTENDUjFfQkxXKSkKIAogI2RlZmluZSBMQ0NSMl9MUFAJRmxkICgxMCwgMCkJLyogTGluZSBQZXIgUGFuZWwgLSAxICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSMl9EaXNIZ2h0KExpbmUpICAgICAJLyogIERpc3BsYXkgSGVpZ2h0IFsxLi4xMDI0IGxpbmVzXSAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKExpbmUpIC0gMSkgPDwgRlNoZnQgKExDQ1IyX0xQUCkpCisJCQkoKChMaW5lKSAtIDEpIDw8IEZTaGZ0IChMQ0NSMl9MUFApKQogI2RlZmluZSBMQ0NSMl9WU1cJRmxkICg2LCAxMCkJLyogVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBXaWR0aCAtIDEgW1Rsbl0gKExfRkNMSykgICAgICAgICovCisJCQkJCS8qIFdpZHRoIC0gMSBbVGxuXSAoTF9GQ0xLKSAgICAgICAgKi8KICNkZWZpbmUgTENDUjJfVnJ0U25jaFdkdGgoVGxuKSAgCS8qICBWZXJ0aWNhbCBTeW5jaHJvbml6YXRpb24gcHVsc2UgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgV2lkdGggWzEuLjY0IFRsbl0gICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCgoVGxuKSAtIDEpIDw8IEZTaGZ0IChMQ0NSMl9WU1cpKQorCQkJCQkvKiAgV2lkdGggWzEuLjY0IFRsbl0gICAgICAgICAgICAgICovIFwKKwkJCSgoKFRsbikgLSAxKSA8PCBGU2hmdCAoTENDUjJfVlNXKSkKICNkZWZpbmUgTENDUjJfRUZXCUZsZCAoOCwgMTYpCS8qIEVuZC1vZi1GcmFtZSBsaW5lIGNsb2NrIFdhaXQgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogY291bnQgW1Rsbl0gICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjb3VudCBbVGxuXSAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExDQ1IyX0VuZEZybURlbChUbG4pICAgIAkvKiAgRW5kLW9mLUZyYW1lIERlbGF5ICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFswLi4yNTUgVGxuXSAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSgoVGxuKSA8PCBGU2hmdCAoTENDUjJfRUZXKSkKKwkJCQkJLyogIFswLi4yNTUgVGxuXSAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKFRsbikgPDwgRlNoZnQgKExDQ1IyX0VGVykpCiAjZGVmaW5lIExDQ1IyX0JGVwlGbGQgKDgsIDI0KQkvKiBCZWdpbm5pbmctb2YtRnJhbWUgbGluZSBjbG9jayAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFdhaXQgY291bnQgW1Rsbl0gICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogV2FpdCBjb3VudCBbVGxuXSAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSMl9CZWdGcm1EZWwoVGxuKSAgICAJLyogIEJlZ2lubmluZy1vZi1GcmFtZSBEZWxheSAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBbMC4uMjU1IFRsbl0gICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKFRsbikgPDwgRlNoZnQgKExDQ1IyX0JGVykpCisJCQkJCS8qICBbMC4uMjU1IFRsbl0gICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKChUbG4pIDw8IEZTaGZ0IChMQ0NSMl9CRlcpKQogCiAjZGVmaW5lIExDQ1IzX1BDRAlGbGQgKDgsIDApCS8qIFBpeGVsIENsb2NrIERpdmlzb3IvMiAtIDIgICAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogWzEuLjI1NV0gKExfUENMSykgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiBmcGl4ID0gZmNwdS8oMiooUENEICsgMikpICAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFRwaXggPSAyKihQQ0QgKyAyKSpUY3B1ICAgICAgICAgKi8KKwkJCQkJLyogWzEuLjI1NV0gKExfUENMSykgICAgICAgICAgICAgICAqLworCQkJCQkvKiBmcGl4ID0gZmNwdS8oMiooUENEICsgMikpICAgICAgICovCisJCQkJCS8qIFRwaXggPSAyKihQQ0QgKyAyKSpUY3B1ICAgICAgICAgKi8KICNkZWZpbmUgTENDUjNfUGl4Q2xrRGl2KERpdikgICAgCS8qICBQaXhlbCBDbG9jayBEaXZpc29yIFs2Li41MTRdICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gNCkvMiA8PCBGU2hmdCAoTENDUjNfUENEKSkKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGZwaXggPSBmY3B1LygyKkZsb29yIChEaXYvMikpICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgVHBpeCA9IDIqRmxvb3IgKERpdi8yKSpUY3B1ICAgICovCisJCQkoKChEaXYpIC0gNCkvMiA8PCBGU2hmdCAoTENDUjNfUENEKSkKKwkJCQkJLyogIGZwaXggPSBmY3B1LygyKkZsb29yIChEaXYvMikpICAqLworCQkJCQkvKiAgVHBpeCA9IDIqRmxvb3IgKERpdi8yKSpUY3B1ICAgICovCiAjZGVmaW5lIExDQ1IzX0NlaWxQaXhDbGtEaXYoRGl2KQkvKiAgQ2VpbC4gb2YgUGl4Q2xrRGl2IFs2Li41MTRdICAgICovIFwKLSAgICAgICAgICAgICAgICAJKCgoRGl2KSAtIDMpLzIgPDwgRlNoZnQgKExDQ1IzX1BDRCkpCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBmcGl4ID0gZmNwdS8oMipDZWlsIChEaXYvMikpICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIFRwaXggPSAyKkNlaWwgKERpdi8yKSpUY3B1ICAgICAqLworCQkJKCgoRGl2KSAtIDMpLzIgPDwgRlNoZnQgKExDQ1IzX1BDRCkpCisJCQkJCS8qICBmcGl4ID0gZmNwdS8oMipDZWlsIChEaXYvMikpICAgKi8KKwkJCQkJLyogIFRwaXggPSAyKkNlaWwgKERpdi8yKSpUY3B1ICAgICAqLwogI2RlZmluZSBMQ0NSM19BQ0IJRmxkICg4LCA4KQkvKiBBQyBCaWFzIGNsb2NrIGhhbGYgcGVyaW9kIC0gMSAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIFtUbG5dIChMX0JJQVMpICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogW1Rsbl0gKExfQklBUykgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSM19BQ0JzRGl2KERpdikgICAgICAJLyogIEFDIEJpYXMgY2xvY2sgRGl2aXNvciBbMi4uNTEyXSAqLyBcCi0gICAgICAgICAgICAgICAgCSgoKERpdikgLSAyKS8yIDw8IEZTaGZ0IChMQ0NSM19BQ0IpKQotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgZmFjID0gZmxuLygyKkZsb29yIChEaXYvMikpICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBUYWMgPSAyKkZsb29yIChEaXYvMikqVGxuICAgICAgKi8KKwkJCSgoKERpdikgLSAyKS8yIDw8IEZTaGZ0IChMQ0NSM19BQ0IpKQorCQkJCQkvKiAgZmFjID0gZmxuLygyKkZsb29yIChEaXYvMikpICAgICovCisJCQkJCS8qICBUYWMgPSAyKkZsb29yIChEaXYvMikqVGxuICAgICAgKi8KICNkZWZpbmUgTENDUjNfQ2VpbEFDQnNEaXYoRGl2KSAgCS8qICBDZWlsLiBvZiBBQ0JzRGl2IFsyLi41MTJdICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoKChEaXYpIC0gMSkvMiA8PCBGU2hmdCAoTENDUjNfQUNCKSkKLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIGZhYyA9IGZsbi8oMipDZWlsIChEaXYvMikpICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgVGFjID0gMipDZWlsIChEaXYvMikqVGxuICAgICAgICovCisJCQkoKChEaXYpIC0gMSkvMiA8PCBGU2hmdCAoTENDUjNfQUNCKSkKKwkJCQkJLyogIGZhYyA9IGZsbi8oMipDZWlsIChEaXYvMikpICAgICAqLworCQkJCQkvKiAgVGFjID0gMipDZWlsIChEaXYvMikqVGxuICAgICAgICovCiAjZGVmaW5lIExDQ1IzX0FQSQlGbGQgKDQsIDE2KQkvKiBBQyBiaWFzIFBpbiB0cmFuc2l0aW9ucyBwZXIgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIEludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSM19BQ0JzQ250T2ZmICAgICAgICAJLyogIEFDIEJpYXMgY2xvY2sgdHJhbnNpdGlvbiBDb3VudCAqLyBcCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBPZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMCA8PCBGU2hmdCAoTENDUjNfQVBJKSkKKwkJCQkJLyogIE9mZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisJCQkoMCA8PCBGU2hmdCAoTENDUjNfQVBJKSkKICNkZWZpbmUgTENDUjNfQUNCc0NudChUcmFucykgICAgCS8qICBBQyBCaWFzIGNsb2NrIHRyYW5zaXRpb24gQ291bnQgKi8gXAotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgWzEuLjE1XSAgICAgICAgICAgICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKChUcmFucykgPDwgRlNoZnQgKExDQ1IzX0FQSSkpCisJCQkJCS8qICBbMS4uMTVdICAgICAgICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKChUcmFucykgPDwgRlNoZnQgKExDQ1IzX0FQSSkpCiAjZGVmaW5lIExDQ1IzX1ZTUAkweDAwMTAwMDAwCS8qIFZlcnRpY2FsIFN5bmNocm9uaXphdGlvbiBwdWxzZSAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogUG9sYXJpdHkgKExfRkNMSykgICAgICAgICAgICAgICAqLworCQkJCQkvKiBQb2xhcml0eSAoTF9GQ0xLKSAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExDQ1IzX1ZydFNuY2hICShMQ0NSM19WU1AqMCkJLyogIFZlcnRpY2FsIFN5bmNocm9uaXphdGlvbiBwdWxzZSAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgYWN0aXZlIEhpZ2ggICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qICBhY3RpdmUgSGlnaCAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENDUjNfVnJ0U25jaEwJKExDQ1IzX1ZTUCoxKQkvKiAgVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qICBhY3RpdmUgTG93ICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogIGFjdGl2ZSBMb3cgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSM19IU1AJMHgwMDIwMDAwMAkvKiBIb3Jpem9udGFsIFN5bmNocm9uaXphdGlvbiAgICAgICovCi0gICAgICAgICAgICAgICAgCSAgICAgICAgCS8qIHB1bHNlIFBvbGFyaXR5IChMX0xDTEspICAgICAgICAgKi8KKwkJCQkJLyogcHVsc2UgUG9sYXJpdHkgKExfTENMSykgICAgICAgICAqLwogI2RlZmluZSBMQ0NSM19Ib3JTbmNoSAkoTENDUjNfSFNQKjApCS8qICBIb3Jpem9udGFsIFN5bmNocm9uaXphdGlvbiAgICAgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogIHB1bHNlIGFjdGl2ZSBIaWdoICAgICAgICAgICAgICAqLworCQkJCQkvKiAgcHVsc2UgYWN0aXZlIEhpZ2ggICAgICAgICAgICAgICovCiAjZGVmaW5lIExDQ1IzX0hvclNuY2hMCShMQ0NSM19IU1AqMSkJLyogIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLwotICAgICAgICAgICAgICAgIAkgICAgICAgIAkvKiAgcHVsc2UgYWN0aXZlIExvdyAgICAgICAgICAgICAgICovCisJCQkJCS8qICBwdWxzZSBhY3RpdmUgTG93ICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENDUjNfUENQCTB4MDA0MDAwMDAJLyogUGl4ZWwgQ2xvY2sgUG9sYXJpdHkgKExfUENMSykgICAqLwogI2RlZmluZSBMQ0NSM19QaXhSc0VkZwkoTENDUjNfUENQKjApCS8qICBQaXhlbCBjbG9jayBSaXNpbmctRWRnZSAgICAgICAgKi8KICNkZWZpbmUgTENDUjNfUGl4RmxFZGcJKExDQ1IzX1BDUCoxKQkvKiAgUGl4ZWwgY2xvY2sgRmFsbGluZy1FZGdlICAgICAgICovCiAjZGVmaW5lIExDQ1IzX09FUAkweDAwODAwMDAwCS8qIE91dHB1dCBFbmFibGUgUG9sYXJpdHkgKExfQklBUywgKi8KLSAgICAgICAgICAgICAgICAJICAgICAgICAJLyogYWN0aXZlIGRpc3BsYXkgbW9kZSkgICAgICAgICAgICAqLworCQkJCQkvKiBhY3RpdmUgZGlzcGxheSBtb2RlKSAgICAgICAgICAgICovCiAjZGVmaW5lIExDQ1IzX091dEVuSAkoTENDUjNfT0VQKjApCS8qICBPdXRwdXQgRW5hYmxlIGFjdGl2ZSBIaWdoICAgICAgKi8KICNkZWZpbmUgTENDUjNfT3V0RW5MCShMQ0NSM19PRVAqMSkJLyogIE91dHB1dCBFbmFibGUgYWN0aXZlIExvdyAgICAgICAqLwogCiAKICN1bmRlZiBDCiAjdW5kZWYgQXNzZW1ibHkKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hcm05MjB0LmggYi9pbmNsdWRlL2FybTkyMHQuaAppbmRleCA0NTkyNjY1Li45NWYzMzIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FybTkyMHQuaAorKysgYi9pbmNsdWRlL2FybTkyMHQuaApAQCAtMTAsNCArMTAsMyBAQAogCiAKICNlbmRpZiAvKl9fQVJNOTIwVF9IX18qLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm05MjB0L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXJtOTIwdC9tZW1vcnkuaAppbmRleCA4YTRlM2Y4Li4zMzNmMjE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hcm05MjB0L21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFybTkyMHQvbWVtb3J5LmgKQEAgLTkyLDE3ICs5MiwxNyBAQAogI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KICNlcnJvciAiQ09ORklHX0RJU0NPTlRJR01FTSB3aWxsIG5vdCB3b3JrIG9uIFMzQzI0MDAiCiAvKgotICogQmVjYXVzZSBvZiB0aGUgd2lkZSBtZW1vcnkgYWRkcmVzcyBzcGFjZSBiZXR3ZWVuIHBoeXNpY2FsIFJBTSBiYW5rcyBvbiB0aGUgCisgKiBCZWNhdXNlIG9mIHRoZSB3aWRlIG1lbW9yeSBhZGRyZXNzIHNwYWNlIGJldHdlZW4gcGh5c2ljYWwgUkFNIGJhbmtzIG9uIHRoZQogICogU0ExMTAwLCBpdCdzIG11Y2ggbW9yZSBjb252ZW5pZW50IHRvIHVzZSBMaW51eCdzIE5VTUEgc3VwcG9ydCB0byBpbXBsZW1lbnQKLSAqIG91ciBtZW1vcnkgbWFwIHJlcHJlc2VudGF0aW9uLiAgQXNzdW1pbmcgYWxsIG1lbW9yeSBub2RlcyBoYXZlIGVxdWFsIGFjY2VzcyAKKyAqIG91ciBtZW1vcnkgbWFwIHJlcHJlc2VudGF0aW9uLiAgQXNzdW1pbmcgYWxsIG1lbW9yeSBub2RlcyBoYXZlIGVxdWFsIGFjY2VzcwogICogY2hhcmFjdGVyaXN0aWNzLCB3ZSB0aGVuIGhhdmUgZ2VuZXJpYyBkaXNjb250aWd1b3VzIG1lbW9yeSBzdXBwb3J0LgogICoKICAqIE9mIGNvdXJzZSwgYWxsIHRoaXMgaXNuJ3QgbWFuZGF0b3J5IGZvciBTQTExMDAgaW1wbGVtZW50YXRpb25zIHdpdGggb25seQogICogb25lIHVzZWQgbWVtb3J5IGJhbmsuICBGb3IgdGhvc2UsIHNpbXBseSB1bmRlZmluZSBDT05GSUdfRElTQ09OVElHTUVNLgogICoKLSAqIFRoZSBub2RlcyBhcmUgbWF0Y2hlZCB3aXRoIHRoZSBwaHlzaWNhbCBtZW1vcnkgYmFuayBhZGRyZXNzZXMgd2hpY2ggYXJlIAorICogVGhlIG5vZGVzIGFyZSBtYXRjaGVkIHdpdGggdGhlIHBoeXNpY2FsIG1lbW9yeSBiYW5rIGFkZHJlc3NlcyB3aGljaCBhcmUKICAqIGluY2lkZW50YWxseSB0aGUgc2FtZSBhcyB2aXJ0dWFsIGFkZHJlc3Nlcy4KLSAqIAorICoKICAqIAlub2RlIDA6ICAweGMwMDAwMDAwIC0gMHhjN2ZmZmZmZgogICogCW5vZGUgMTogIDB4YzgwMDAwMDAgLSAweGNmZmZmZmZmCiAgKiAJbm9kZSAyOiAgMHhkMDAwMDAwMCAtIDB4ZDdmZmZmZmYKQEAgLTEzOCw3ICsxMzgsNyBAQAogCSgoKHVuc2lnbmVkIGxvbmcpKGt2YWRkcikgJiAweDA3ZmZmZmZmKSA+PiBQQUdFX1NISUZUKQogCiAvKgotICogR2l2ZW4gYSBrYWRkciwgdmlydF90b19wYWdlIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIAorICogR2l2ZW4gYSBrYWRkciwgdmlydF90b19wYWdlIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nCiAgKiBtZW1fbWFwIGVudHJ5LgogICovCiAjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9BVDkxUk05MjAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL0FUOTFSTTkyMDAuaAppbmRleCBjMGU1MjExLi42MGYxNzM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL0FUOTFSTTkyMDAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL0FUOTFSTTkyMDAuaApAQCAtMjEsNyArMjEsNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KLSAKKwogI2lmbmRlZiBBVDkxUk05MjAwX0gKICNkZWZpbmUgQVQ5MVJNOTIwMF9ICiAKQEAgLTIwNSwxMyArMjA1LDEzIEBACiAJQVQ5MV9SRUcJIFBNQ19TQ0VSOyAJLyogU3lzdGVtIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLwogCUFUOTFfUkVHCSBQTUNfU0NEUjsgCS8qIFN5c3RlbSBDbG9jayBEaXNhYmxlIFJlZ2lzdGVyICovCiAJQVQ5MV9SRUcJIFBNQ19TQ1NSOyAJLyogU3lzdGVtIENsb2NrIFN0YXR1cyBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBSZXNlcnZlZDBbMV07IAkvKiAqLyAKKwlBVDkxX1JFRwkgUmVzZXJ2ZWQwWzFdOyAJLyogKi8KIAlBVDkxX1JFRwkgUE1DX1BDRVI7IAkvKiBQZXJpcGhlcmFsIENsb2NrIEVuYWJsZSBSZWdpc3RlciAqLwogCUFUOTFfUkVHCSBQTUNfUENEUjsgCS8qIFBlcmlwaGVyYWwgQ2xvY2sgRGlzYWJsZSBSZWdpc3RlciAqLwogCUFUOTFfUkVHCSBQTUNfUENTUjsgCS8qIFBlcmlwaGVyYWwgQ2xvY2sgU3RhdHVzIFJlZ2lzdGVyICovCi0JQVQ5MV9SRUcJIFJlc2VydmVkMVs1XTsgCS8qICovIAorCUFUOTFfUkVHCSBSZXNlcnZlZDFbNV07IAkvKiAqLwogCUFUOTFfUkVHCSBQTUNfTUNLUjsgCS8qIE1hc3RlciBDbG9jayBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBSZXNlcnZlZDJbM107IAkvKiAqLyAKKwlBVDkxX1JFRwkgUmVzZXJ2ZWQyWzNdOyAJLyogKi8KIAlBVDkxX1JFRwkgUE1DX1BDS1JbOF07IAkvKiBQcm9ncmFtbWFibGUgQ2xvY2sgUmVnaXN0ZXIgKi8KIAlBVDkxX1JFRwkgUE1DX0lFUjsgCS8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KIAlBVDkxX1JFRwkgUE1DX0lEUjsgCS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCkBAIC0yODEsOSArMjgxLDkgQEAKICNkZWZpbmUgQVQ5MUNfRU1BQ19CUCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDgpIC8qIChFTUFDKSBCYWNrIHByZXNzdXJlLiAqLwogLyogLS0tLS0tLS0gRU1BQ19DRkcgOiAoRU1BQyBPZmZzZXQ6IDB4NCkgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0tLS0tLS0tICAqLwogI2RlZmluZSBBVDkxQ19FTUFDX1NQRCAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMCkgLyogKEVNQUMpIFNwZWVkLiAqLwotI2RlZmluZSBBVDkxQ19FTUFDX0ZEICAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgMSkgLyogKEVNQUMpIEZ1bGwgZHVwbGV4LiAqLyAKKyNkZWZpbmUgQVQ5MUNfRU1BQ19GRCAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDEpIC8qIChFTUFDKSBGdWxsIGR1cGxleC4gKi8KICNkZWZpbmUgQVQ5MUNfRU1BQ19CUiAgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDIpIC8qIChFTUFDKSBCaXQgcmF0ZS4gKi8KLSNkZWZpbmUgQVQ5MUNfRU1BQ19DQUYgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDQpIC8qIChFTUFDKSBDb3B5IGFsbCBmcmFtZXMuICovIAorI2RlZmluZSBBVDkxQ19FTUFDX0NBRiAgICAgICAgKCh1bnNpZ25lZCBpbnQpIDB4MSA8PCAgNCkgLyogKEVNQUMpIENvcHkgYWxsIGZyYW1lcy4gKi8KICNkZWZpbmUgQVQ5MUNfRU1BQ19OQkMgICAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgIDUpIC8qIChFTUFDKSBObyBicm9hZGNhc3QuICovCiAjZGVmaW5lIEFUOTFDX0VNQUNfTVRJICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA2KSAvKiAoRU1BQykgTXVsdGljYXN0IGhhc2ggZW5hYmxlICovCiAjZGVmaW5lIEFUOTFDX0VNQUNfVU5JICAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8ICA3KSAvKiAoRU1BQykgVW5pY2FzdCBoYXNoIGVuYWJsZS4gKi8KQEAgLTMyOCwxMCArMzI4LDEwIEBACiAjZGVmaW5lIEFUOTFDX0VNQUNfUk9WUiAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxIDw8IDEwKSAvKiAoRU1BQykgKi8KICNkZWZpbmUgQVQ5MUNfRU1BQ19IUkVTUCAgICAgICgodW5zaWduZWQgaW50KSAweDEgPDwgMTEpIC8qIChFTUFDKSAqLwogLyogLS0tLS0tLS0gRU1BQ19JRVIgOiAoRU1BQyBPZmZzZXQ6IDB4MjgpIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgLS0tLS0tLS0gKi8KLS8qIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLyAKKy8qIC0tLS0tLS0tIEVNQUNfSURSIDogKEVNQUMgT2Zmc2V0OiAweDJjKSBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAtLS0tLS0tLSAqLwogLyogLS0tLS0tLS0gRU1BQ19JTVIgOiAoRU1BQyBPZmZzZXQ6IDB4MzApIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIC0tLS0tLS0tICovCiAvKiAtLS0tLS0tLSBFTUFDX01BTiA6IChFTUFDIE9mZnNldDogMHgzNCkgUEhZIE1haW50ZW5hbmNlIFJlZ2lzdGVyIC0tLS0tLS0tICovCi0jZGVmaW5lIEFUOTFDX0VNQUNfREFUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvKiAoRU1BQykgKi8gCisjZGVmaW5lIEFUOTFDX0VNQUNfREFUQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHhGRkZGIDw8ICAwKSAvKiAoRU1BQykgKi8KICNkZWZpbmUgQVQ5MUNfRU1BQ19DT0RFICAgICAgICgodW5zaWduZWQgaW50KSAweDMgPDwgMTYpIC8qIChFTUFDKSAqLwogI2RlZmluZSAgICAgICAgIEFUOTFDX0VNQUNfQ09ERV84MDJfMyAoKHVuc2lnbmVkIGludCkgMHgyIDw8IDE2KSAvKiAoRU1BQykgV3JpdGUgT3BlcmF0aW9uICovCiAjZGVmaW5lIEFUOTFDX0VNQUNfUkVHQSAgICAgICAoKHVuc2lnbmVkIGludCkgMHgxRiA8PCAxOCkgLyogKEVNQUMpICovCkBAIC0zNTYsNyArMzU2LDcgQEAKIAlBVDkxX1JFRwkgU1BJX0lNUjsgCS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCiAJQVQ5MV9SRUcJIFJlc2VydmVkMFs0XTsgCS8qICovCiAJQVQ5MV9SRUcJIFNQSV9DU1JbNF07IAkvKiBDaGlwIFNlbGVjdCBSZWdpc3RlciAqLwotCUFUOTFfUkVHCSBSZXNlcnZlZDFbNDhdOyAvKiAqLyAKKwlBVDkxX1JFRwkgUmVzZXJ2ZWQxWzQ4XTsgLyogKi8KIAlBVDkxX1JFRwkgU1BJX1JQUjsgCS8qIFJlY2VpdmUgUG9pbnRlciBSZWdpc3RlciAqLwogCUFUOTFfUkVHCSBTUElfUkNSOyAJLyogUmVjZWl2ZSBDb3VudGVyIFJlZ2lzdGVyICovCiAJQVQ5MV9SRUcJIFNQSV9UUFI7IAkvKiBUcmFuc21pdCBQb2ludGVyIFJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvYml0ZmllbGQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9iaXRmaWVsZC5oCmluZGV4IGYxZjBlMzMuLjJhYzVlYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9iaXRmaWVsZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9iaXRmaWVsZC5oCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KIAogCi0KICNpZm5kZWYgX19CSVRGSUVMRF9ICiAjZGVmaW5lIF9fQklURklFTERfSAogCkBAIC04OCw3ICs4Nyw3IEBACiAgKi8KIAogI2RlZmluZSBGSW5zcnQoVmFsdWUsIEZpZWxkKSBcCi0gICAgICAgICAgICAgICAgCShVRGF0YSAoVmFsdWUpIDw8IEZTaGZ0IChGaWVsZCkpCisJCQkoVURhdGEgKFZhbHVlKSA8PCBGU2hmdCAoRmllbGQpKQogCiAKIC8qCkBAIC0xMDcsNyArMTA2LDcgQEAKICAqLwogCiAjZGVmaW5lIEZFeHRyKERhdGEsIEZpZWxkKSBcCi0gICAgICAgICAgICAgICAgCSgoVURhdGEgKERhdGEpID4+IEZTaGZ0IChGaWVsZCkpICYgRkFsbk1zayAoRmllbGQpKQorCQkJKChVRGF0YSAoRGF0YSkgPj4gRlNoZnQgKEZpZWxkKSkgJiBGQWxuTXNrIChGaWVsZCkpCiAKIAogI2VuZGlmIC8qIF9fQklURklFTERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaAppbmRleCBiODRlYTQ4Li5kNDBmMDVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaApAQCAtNCw3ICs0LDcgQEAKICAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKICAqICBDcmVhdGVkOglKdW4gMTUsIDIwMDEKICAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCkBAIC04NiwxNiArODYsMTYgQEAKIAogI2VuZGlmCiAjZW5kaWYgLyogVUJPT1RfUkVHX0ZJWCAqLwotCQorCiAjaWZkZWYgVUJPT1RfUkVHX0ZJWAogIyB1bmRlZglpb19wMnYKICMgdW5kZWYgX19SRUcKICMgaWZuZGVmIF9fQVNTRU1CTFlfXwogIyAgZGVmaW5lIGlvX3AydihQaEFkZCkgICAgKFBoQWRkKQogIyAgZGVmaW5lIF9fUkVHKHgpCSgqKCh2b2xhdGlsZSB1MzIgKilpb19wMnYoeCkpKQotIyAgZGVmaW5lIF9fUkVHMih4LHkpCSgqKHZvbGF0aWxlIHUzMiAqKSgodTMyKSZfX1JFRyh4KSArICh5KSkpCQorIyAgZGVmaW5lIF9fUkVHMih4LHkpCSgqKHZvbGF0aWxlIHUzMiAqKSgodTMyKSZfX1JFRyh4KSArICh5KSkpCiAjIGVsc2UKLSMgIGRlZmluZSBfX1JFRyh4KSAoeCkJCisjICBkZWZpbmUgX19SRUcoeCkgKHgpCiAjZW5kaWYgLyogVUJPT1RfUkVHX0ZJWCAqLwogCiAjaW5jbHVkZSAicHhhLXJlZ3MuaCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tbWMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9tbWMuaAppbmRleCA0ZDYxYWRlLi5hNjI2NzlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvbW1jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL21tYy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL21tYy9tbWNfcHhhLmggCisgKiAgbGludXgvZHJpdmVycy9tbWMvbW1jX3B4YS5oCiAgKgotICogIEF1dGhvcjogVmxhZGltaXIgU2hlYm9yZGFldiwgSWdvciBPYmxha292ICAgCisgKiAgQXV0aG9yOiBWbGFkaW1pciBTaGVib3JkYWV2LCBJZ29yIE9ibGFrb3YKICAqICBDb3B5cmlnaHQ6ICBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KICAqCiAgKiAgJElkOiBtbWNfcHhhLmgsdiAwLjMuMS42IDIwMDIvMDkvMjUgMTk6MjU6NDggdGVkIEV4cCB0ZWQgJApAQCAtNzYsNyArNzYsNyBAQAogI2RlZmluZSBNTUNfQkxLX0xFTl9NQVgJIAkJKDB4MDNmZlVMKSAvKiBbOTowXSAqLwogCiAvKiBNTUNfUFJUQlVGICovCi0jZGVmaW5lIE1NQ19QUlRCVUZfQlVGX1BBUlRfRlVMTCAgICAgICAJKDB4MDFVTCkgCisjZGVmaW5lIE1NQ19QUlRCVUZfQlVGX1BBUlRfRlVMTCAgICAgICAJKDB4MDFVTCkKICNkZWZpbmUgTU1DX1BSVEJVRl9CVUZfRlVMTAkJKDB4MDBVTCAgICApCiAKIC8qIE1NQ19JX01BU0sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9weGEtcmVncy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKaW5kZXggMjA4YzExMC4uYTU5ODM4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmgKQEAgLTYzLDEyICs2MywxMiBAQAogI2RlZmluZSBQQ01DSUExTWVtU3AJUENNQ0lBTWVtU3AJLyogUENNQ0lBIDEgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAqLwogCiAjZGVmaW5lIF9QQ01DSUEoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgyMDAwMDAwMCArIChOYikqUENNQ0lBU3ApCisJCQkoMHgyMDAwMDAwMCArIChOYikqUENNQ0lBU3ApCiAjZGVmaW5lIF9QQ01DSUFJTyhOYikJX1BDTUNJQSAoTmIpCS8qIFBDTUNJQSBJL08gWzAuLjFdICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgX1BDTUNJQUF0dHIoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBBdHRyaWJ1dGUgWzAuLjFdICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoX1BDTUNJQSAoTmIpICsgMipQQ01DSUFQcnRTcCkKKwkJCShfUENNQ0lBIChOYikgKyAyKlBDTUNJQVBydFNwKQogI2RlZmluZSBfUENNQ0lBTWVtKE5iKQkgICAgICAgIAkvKiBQQ01DSUEgTWVtb3J5IFswLi4xXSAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAJKF9QQ01DSUEgKE5iKSArIDMqUENNQ0lBUHJ0U3ApCisJCQkoX1BDTUNJQSAoTmIpICsgMypQQ01DSUFQcnRTcCkKIAogI2RlZmluZSBfUENNQ0lBMAlfUENNQ0lBICgwKQkvKiBQQ01DSUEgMCAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9QQ01DSUEwSU8JX1BDTUNJQUlPICgwKQkvKiBQQ01DSUEgMCBJL08gICAgICAgICAgICAgICAgICAgICovCkBAIC04MSw3ICs4MSw2IEBACiAjZGVmaW5lIF9QQ01DSUExTWVtCV9QQ01DSUFNZW0gKDEpCS8qIFBDTUNJQSAxIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KIAogCi0KIC8qCiAgKiBETUEgQ29udHJvbGxlcgogICovCkBAIC00MDIsMTggKzQwMSwxOCBAQAogI2RlZmluZSBJclNSX1hNSVRJUl9VQVJUX01PREUgMHgwCiAKICNkZWZpbmUgSXJTUl9JUl9SRUNFSVZFX09OIChcCi0gICAgICAgICAgICAgICAgSXJTUl9SWFBMX05FR19JU19aRVJPIHwgXAotICAgICAgICAgICAgICAgIElyU1JfVFhQTF9QT1NfSVNfWkVSTyB8IFwKLSAgICAgICAgICAgICAgICBJclNSX1hNT0RFX1BVTFNFXzNfMTYgfCBcCi0gICAgICAgICAgICAgICAgSXJTUl9SQ1ZFSVJfSVJfTU9ERSAgIHwgXAotICAgICAgICAgICAgICAgIElyU1JfWE1JVElSX1VBUlRfTU9ERSkKKwkJSXJTUl9SWFBMX05FR19JU19aRVJPIHwgXAorCQlJclNSX1RYUExfUE9TX0lTX1pFUk8gfCBcCisJCUlyU1JfWE1PREVfUFVMU0VfM18xNiB8IFwKKwkJSXJTUl9SQ1ZFSVJfSVJfTU9ERSAgIHwgXAorCQlJclNSX1hNSVRJUl9VQVJUX01PREUpCiAKICNkZWZpbmUgSXJTUl9JUl9UUkFOU01JVF9PTiAoXAotICAgICAgICAgICAgICAgIElyU1JfUlhQTF9ORUdfSVNfWkVSTyB8IFwKLSAgICAgICAgICAgICAgICBJclNSX1RYUExfUE9TX0lTX1pFUk8gfCBcCi0gICAgICAgICAgICAgICAgSXJTUl9YTU9ERV9QVUxTRV8zXzE2IHwgXAotICAgICAgICAgICAgICAgIElyU1JfUkNWRUlSX1VBUlRfTU9ERSB8IFwKLSAgICAgICAgICAgICAgICBJclNSX1hNSVRJUl9JUl9NT0RFKQorCQlJclNSX1JYUExfTkVHX0lTX1pFUk8gfCBcCisJCUlyU1JfVFhQTF9QT1NfSVNfWkVSTyB8IFwKKwkJSXJTUl9YTU9ERV9QVUxTRV8zXzE2IHwgXAorCQlJclNSX1JDVkVJUl9VQVJUX01PREUgfCBcCisJCUlyU1JfWE1JVElSX0lSX01PREUpCiAKIC8qCiAgKiBJMkMgcmVnaXN0ZXJzCkBAIC0xMTk4LDQ3ICsxMTk3LDQ3IEBACiAKICNkZWZpbmUgTENDUjFfUFBMICAgICAgIEZsZCAoMTAsIDApICAgICAgLyogUGl4ZWxzIFBlciBMaW5lIC0gMSAqLwogI2RlZmluZSBMQ0NSMV9EaXNXZHRoKFBpeGVsKSAgICAgICAgICAgIC8qIERpc3BsYXkgV2lkdGggWzEuLjgwMCBwaXguXSAgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgKCgoUGl4ZWwpIC0gMSkgPDwgRlNoZnQgKExDQ1IxX1BQTCkpCisJCQkoKChQaXhlbCkgLSAxKSA8PCBGU2hmdCAoTENDUjFfUFBMKSkKIAogI2RlZmluZSBMQ0NSMV9IU1cgICAgICAgRmxkICg2LCAxMCkgICAgIC8qIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLwogI2RlZmluZSBMQ0NSMV9Ib3JTbmNoV2R0aChUcGl4KSAgICAgICAgIC8qIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHVsc2UgV2lkdGggWzEuLjY0IFRwaXhdICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKFRwaXgpIC0gMSkgPDwgRlNoZnQgKExDQ1IxX0hTVykpCisJCQkJCS8qIHB1bHNlIFdpZHRoIFsxLi42NCBUcGl4XSAgICAgICAqLyBcCisJCQkoKChUcGl4KSAtIDEpIDw8IEZTaGZ0IChMQ0NSMV9IU1cpKQogCiAjZGVmaW5lIExDQ1IxX0VMVyAgICAgICBGbGQgKDgsIDE2KSAgICAgLyogRW5kLW9mLUxpbmUgcGl4ZWwgY2xvY2sgV2FpdCAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IC0gMSBbVHBpeF0gICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY291bnQgLSAxIFtUcGl4XSAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSMV9FbmRMbkRlbChUcGl4KSAgICAgICAgICAgIC8qICBFbmQtb2YtTGluZSBEZWxheSAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBbMS4uMjU2IFRwaXhdICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgKCgoVHBpeCkgLSAxKSA8PCBGU2hmdCAoTENDUjFfRUxXKSkKKwkJCQkJLyogIFsxLi4yNTYgVHBpeF0gICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKChUcGl4KSAtIDEpIDw8IEZTaGZ0IChMQ0NSMV9FTFcpKQogCiAjZGVmaW5lIExDQ1IxX0JMVyAgICAgICBGbGQgKDgsIDI0KSAgICAgLyogQmVnaW5uaW5nLW9mLUxpbmUgcGl4ZWwgY2xvY2sgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgY291bnQgLSAxIFtUcGl4XSAgICAgICAgICAgKi8KKwkJCQkJLyogV2FpdCBjb3VudCAtIDEgW1RwaXhdICAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSMV9CZWdMbkRlbChUcGl4KSAgICAgICAgICAgIC8qICBCZWdpbm5pbmctb2YtTGluZSBEZWxheSAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBbMS4uMjU2IFRwaXhdICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgKCgoVHBpeCkgLSAxKSA8PCBGU2hmdCAoTENDUjFfQkxXKSkKKwkJCQkJLyogIFsxLi4yNTYgVHBpeF0gICAgICAgICAgICAgICAgICAqLyBcCisJCQkoKChUcGl4KSAtIDEpIDw8IEZTaGZ0IChMQ0NSMV9CTFcpKQogCiAKICNkZWZpbmUgTENDUjJfTFBQICAgICAgIEZsZCAoMTAsIDApICAgICAvKiBMaW5lIFBlciBQYW5lbCAtIDEgICAgICAgICAgICAgICovCiAjZGVmaW5lIExDQ1IyX0Rpc0hnaHQoTGluZSkgICAgICAgICAgICAgLyogIERpc3BsYXkgSGVpZ2h0IFsxLi4xMDI0IGxpbmVzXSAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoKChMaW5lKSAtIDEpIDw8IEZTaGZ0IChMQ0NSMl9MUFApKQorCQkJKCgoTGluZSkgLSAxKSA8PCBGU2hmdCAoTENDUjJfTFBQKSkKIAogI2RlZmluZSBMQ0NSMl9WU1cgICAgICAgRmxkICg2LCAxMCkgICAgIC8qIFZlcnRpY2FsIFN5bmNocm9uaXphdGlvbiBwdWxzZSAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXaWR0aCAtIDEgW1Rsbl0gKExfRkNMSykgICAgICAgICovCisJCQkJCS8qIFdpZHRoIC0gMSBbVGxuXSAoTF9GQ0xLKSAgICAgICAgKi8KICNkZWZpbmUgTENDUjJfVnJ0U25jaFdkdGgoVGxuKSAgICAgICAgICAvKiAgVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgV2lkdGggWzEuLjY0IFRsbl0gICAgICAgICAgICAgICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoKFRsbikgLSAxKSA8PCBGU2hmdCAoTENDUjJfVlNXKSkKKwkJCQkJLyogIFdpZHRoIFsxLi42NCBUbG5dICAgICAgICAgICAgICAqLyBcCisJCQkoKChUbG4pIC0gMSkgPDwgRlNoZnQgKExDQ1IyX1ZTVykpCiAKICNkZWZpbmUgTENDUjJfRUZXICAgICAgIEZsZCAoOCwgMTYpICAgICAvKiBFbmQtb2YtRnJhbWUgbGluZSBjbG9jayBXYWl0ICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY291bnQgW1Rsbl0gICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiBjb3VudCBbVGxuXSAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExDQ1IyX0VuZEZybURlbChUbG4pICAgICAgICAgICAgLyogIEVuZC1vZi1GcmFtZSBEZWxheSAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIFswLi4yNTUgVGxuXSAgICAgICAgICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoKFRsbikgPDwgRlNoZnQgKExDQ1IyX0VGVykpCisJCQkJCS8qICBbMC4uMjU1IFRsbl0gICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKChUbG4pIDw8IEZTaGZ0IChMQ0NSMl9FRlcpKQogCiAjZGVmaW5lIExDQ1IyX0JGVyAgICAgICBGbGQgKDgsIDI0KSAgICAgLyogQmVnaW5uaW5nLW9mLUZyYW1lIGxpbmUgY2xvY2sgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgY291bnQgW1Rsbl0gICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogV2FpdCBjb3VudCBbVGxuXSAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSMl9CZWdGcm1EZWwoVGxuKSAgICAgICAgICAgIC8qICBCZWdpbm5pbmctb2YtRnJhbWUgRGVsYXkgICAgICAgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBbMC4uMjU1IFRsbl0gICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgKChUbG4pIDw8IEZTaGZ0IChMQ0NSMl9CRlcpKQorCQkJCQkvKiAgWzAuLjI1NSBUbG5dICAgICAgICAgICAgICAgICAgICovIFwKKwkJCSgoVGxuKSA8PCBGU2hmdCAoTENDUjJfQkZXKSkKIAogI2lmIDAKICNkZWZpbmUgTENDUjNfUENECSgweGZmKQkJLyogUGl4ZWwgY2xvY2sgZGl2aXNvciAqLwpAQCAtMTI2MSwyNSArMTI2MCwyNSBAQAogCiAjZGVmaW5lIExDQ1IzX1BDRCAgICAgICBGbGQgKDgsIDApICAgICAgLyogUGl4ZWwgQ2xvY2sgRGl2aXNvciAqLwogI2RlZmluZSBMQ0NSM19QaXhDbGtEaXYoRGl2KSAgICAgICAgICAgIC8qIFBpeGVsIENsb2NrIERpdmlzb3IgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgKCgoRGl2KSA8PCBGU2hmdCAoTENDUjNfUENEKSkpCisJCQkoKChEaXYpIDw8IEZTaGZ0IChMQ0NSM19QQ0QpKSkKIAogCiAjZGVmaW5lIExDQ1IzX0JQUCAgICAgICBGbGQgKDMsIDI0KSAgICAgLyogQml0IFBlciBQaXhlbCAqLwogI2RlZmluZSBMQ0NSM19CcHAoQnBwKSAgICAgICAgICAgICAgICAgIC8qIEJpdCBQZXIgUGl4ZWwgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgKCgoQnBwKSA8PCBGU2hmdCAoTENDUjNfQlBQKSkpCisJCQkoKChCcHApIDw8IEZTaGZ0IChMQ0NSM19CUFApKSkKIAogI2RlZmluZSBMQ0NSM19BQ0IgICAgICAgRmxkICg4LCA4KSAgICAgIC8qIEFDIEJpYXMgKi8KICNkZWZpbmUgTENDUjNfQWNiKEFjYikgICAgICAgICAgICAgICAgICAvKiBCQUMgQmlhcyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoKChBY2IpIDw8IEZTaGZ0IChMQ0NSM19BQ0IpKSkKKwkJCSgoKEFjYikgPDwgRlNoZnQgKExDQ1IzX0FDQikpKQogCiAjZGVmaW5lIExDQ1IzX0hvclNuY2hIICAoTENDUjNfSFNQKjApICAgLyogIEhvcml6b250YWwgU3luY2hyb25pemF0aW9uICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBwdWxzZSBhY3RpdmUgSGlnaCAgICAgICAgICAgICAgKi8KKwkJCQkJLyogIHB1bHNlIGFjdGl2ZSBIaWdoICAgICAgICAgICAgICAqLwogI2RlZmluZSBMQ0NSM19Ib3JTbmNoTCAgKExDQ1IzX0hTUCoxKSAgIC8qICBIb3Jpem9udGFsIFN5bmNocm9uaXphdGlvbiAgICAgKi8KIAogI2RlZmluZSBMQ0NSM19WcnRTbmNoSCAgKExDQ1IzX1ZTUCowKSAgIC8qICBWZXJ0aWNhbCBTeW5jaHJvbml6YXRpb24gcHVsc2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgYWN0aXZlIEhpZ2ggICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qICBhY3RpdmUgSGlnaCAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTENDUjNfVnJ0U25jaEwgIChMQ0NSM19WU1AqMSkgICAvKiAgVmVydGljYWwgU3luY2hyb25pemF0aW9uIHB1bHNlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIGFjdGl2ZSBMb3cgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiAgYWN0aXZlIExvdyAgICAgICAgICAgICAgICAgICAgICovCiAKICNkZWZpbmUgTENTUl9MREQJKDEgPDwgMCkJLyogTENEIERpc2FibGUgRG9uZSAqLwogI2RlZmluZSBMQ1NSX1NPRgkoMSA8PCAxKQkvKiBTdGFydCBvZiBmcmFtZSAqLwpAQCAtMTMzOCw3ICsxMzM3LDcgQEAKICNkZWZpbmUgTURDTkZHX0RFMgkweDAwMDEwMDAwCiAjZGVmaW5lIE1EQ05GR19ERTMJMHgwMDAyMDAwMAogI2RlZmluZSBNRENORkdfRFdJRDAJMHgwMDAwMDAwNAotCQorCiAjZGVmaW5lIE1EUkVGUgkJX19SRUcoMHg0ODAwMDAwNCkgIC8qIFNEUkFNIFJlZnJlc2ggQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBNU0MwCQlfX1JFRygweDQ4MDAwMDA4KSAgLyogU3RhdGljIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgTVNDMQkJX19SRUcoMHg0ODAwMDAwQykgIC8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAxICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYml0ZmllbGQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9iaXRmaWVsZC5oCmluZGV4IGYxZjBlMzMuLjJhYzVlYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9iaXRmaWVsZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9iaXRmaWVsZC5oCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KIAogCi0KICNpZm5kZWYgX19CSVRGSUVMRF9ICiAjZGVmaW5lIF9fQklURklFTERfSAogCkBAIC04OCw3ICs4Nyw3IEBACiAgKi8KIAogI2RlZmluZSBGSW5zcnQoVmFsdWUsIEZpZWxkKSBcCi0gICAgICAgICAgICAgICAgCShVRGF0YSAoVmFsdWUpIDw8IEZTaGZ0IChGaWVsZCkpCisJCQkoVURhdGEgKFZhbHVlKSA8PCBGU2hmdCAoRmllbGQpKQogCiAKIC8qCkBAIC0xMDcsNyArMTA2LDcgQEAKICAqLwogCiAjZGVmaW5lIEZFeHRyKERhdGEsIEZpZWxkKSBcCi0gICAgICAgICAgICAgICAgCSgoVURhdGEgKERhdGEpID4+IEZTaGZ0IChGaWVsZCkpICYgRkFsbk1zayAoRmllbGQpKQorCQkJKChVRGF0YSAoRGF0YSkgPj4gRlNoZnQgKEZpZWxkKSkgJiBGQWxuTXNrIChGaWVsZCkpCiAKIAogI2VuZGlmIC8qIF9fQklURklFTERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oCmluZGV4IDQ3MzM4NTguLjRiOGJhYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYml0b3BzLmgKQEAgLTEwNiw3ICsxMDYsNyBAQAogCWlmICh3b3JkICYgMHgwZjAwMDAwMCkgeyBrIC09IDQ7ICB3b3JkIDw8PSA0OyAgfQogCWlmICh3b3JkICYgMHgzMDAwMDAwMCkgeyBrIC09IDI7ICB3b3JkIDw8PSAyOyAgfQogCWlmICh3b3JkICYgMHg0MDAwMDAwMCkgeyBrIC09IDE7IH0KLSAgICAgICAgcmV0dXJuIGs7CisJcmV0dXJuIGs7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYnl0ZW9yZGVyLmgKaW5kZXggZDY0OGExOS4uYzM0ODlmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2J5dGVvcmRlci5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9ieXRlb3JkZXIuaApAQCAtMzAsNCArMzAsMyBAQAogI2VuZGlmCiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcHJvYy1hcm12L3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tYXJtL3Byb2MtYXJtdi9wdHJhY2UuaAppbmRleCA1MTcwOGI5Li43OWNjNjQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcHJvYy1hcm12L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wcm9jLWFybXYvcHRyYWNlLmgKQEAgLTEwNyw0ICsxMDcsMyBAQAogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3Byb2MtYXJtdi9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9wcm9jLWFybXYvc3lzdGVtLmgKaW5kZXggNDc5ZjU1My4uZTdiMGZlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3Byb2MtYXJtdi9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcHJvYy1hcm12L3N5c3RlbS5oCkBAIC01Niw3ICs1Niw3IEBACiAJOgkJCQkJCQlcCiAJOiAibWVtb3J5Iik7CQkJCQkJXAogCX0pCi0JCisKIC8qCiAgKiBFbmFibGUgSVJRcwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1hcm0vcHRyYWNlLmgKaW5kZXggMGU0NDgyYi4uNzNjOTA4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wdHJhY2UuaApAQCAtMzEsNCArMzEsMyBAQAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NldHVwLmggYi9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaAppbmRleCBjMjBiNDQ4Li44OWRmNGRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaApAQCAtNzYsNyArNzYsNiBAQAogfTsKIAogCi0KIC8qCiAgKiBUaGUgbmV3IHdheSBvZiBwYXNzaW5nIGluZm9ybWF0aW9uOiBhIGxpc3Qgb2YgdGFnZ2VkIGVudHJpZXMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1hcm0vdHlwZXMuaAppbmRleCAzOWQ1MjkwLi4xM2U5ODA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdHlwZXMuaApAQCAtNDgsNCArNDgsMyBAQAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oCmluZGV4IDdkMjkzMzUuLmI3NjhlMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaApAQCAtMTE2LDcgKzExNiw3IEBACiAgKiBAbnI6IEJpdCB0byBzZXQKICAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KICAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuICAKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KICAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgogICovCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQpAQCAtMTM1LDcgKzEzNSw3IEBACiAgKiBAbnI6IEJpdCB0byBzZXQKICAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KICAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYXRvbWljIGFuZCBjYW4gYmUgcmVvcmRlcmVkLiAgCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYXRvbWljIGFuZCBjYW4gYmUgcmVvcmRlcmVkLgogICogSWYgdHdvIGV4YW1wbGVzIG9mIHRoaXMgb3BlcmF0aW9uIHJhY2UsIG9uZSBjYW4gYXBwZWFyIHRvIHN1Y2NlZWQKICAqIGJ1dCBhY3R1YWxseSBmYWlsLiAgWW91IG11c3QgcHJvdGVjdCBtdWx0aXBsZSBhY2Nlc3NlcyB3aXRoIGEgbG9jay4KICAqLwpAQCAtMTU1LDcgKzE1NSw3IEBACiAgKiBAbnI6IEJpdCB0byBzZXQKICAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KICAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuICAKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KICAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgogICovCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCkBAIC0xNzQsNyArMTc0LDcgQEAKICAqIEBucjogQml0IHRvIHNldAogICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQogICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuICAKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuCiAgKiBJZiB0d28gZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRpb24gcmFjZSwgb25lIGNhbiBhcHBlYXIgdG8gc3VjY2VlZAogICogYnV0IGFjdHVhbGx5IGZhaWwuICBZb3UgbXVzdCBwcm90ZWN0IG11bHRpcGxlIGFjY2Vzc2VzIHdpdGggYSBsb2NrLgogICovCkBAIC0yMDYsNyArMjA2LDcgQEAKICAqIEBucjogQml0IHRvIHNldAogICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQogICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4gIAorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgogICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCiAgKi8KIHN0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCkBAIC0yOTIsNyArMjkyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nICogcCA9ICgodW5zaWduZWQgbG9uZyAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CiAJaW50IHNldCA9IDAsIGJpdCA9IG9mZnNldCAmIDMxLCByZXM7Ci0JCisKIAlpZiAoYml0KSB7CiAJCS8qCiAJCSAqIExvb2sgZm9yIHplcm8gaW4gZmlyc3QgYnl0ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pODI1NC5oIGIvaW5jbHVkZS9hc20taTM4Ni9pODI1NC5oCmluZGV4IGUxM2YwNGUuLmFhZmRmYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaTgyNTQuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2k4MjU0LmgKQEAgLTI5LDcgKzI5LDYgQEAKICNkZWZpbmUgX0FTTUkzODZfSTg5NTRfSF8gICAgICAgMQogCiAKLQogI2RlZmluZSBQSVRfVDAJCTB4MDAJCS8qIFBJVCBjaGFubmVsIDAgY291bnQvc3RhdHVzICovCiAjZGVmaW5lIFBJVF9UMQkJMHgwMQkJLyogUElUIGNoYW5uZWwgMSBjb3VudC9zdGF0dXMgKi8KICNkZWZpbmUgUElUX1QyCQkweDAyCQkvKiBQSVQgY2hhbm5lbCAyIGNvdW50L3N0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pODI1OS5oIGIvaW5jbHVkZS9hc20taTM4Ni9pODI1OS5oCmluZGV4IDA0MTllMGUuLjc3NGQ3YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaTgyNTkuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2k4MjU5LmgKQEAgLTc4LDcgKzc4LDcgQEAKIAogLyogSUNXMiBpcyB0aGUgc3RhcnRpbmcgdmVjdG9yIG51bWJlciAqLwogCi0vKiBJQ1cyIGlzIGJpdC1tYXNrIG9mIHByZXNlbnQgc2xhdmVzIGZvciBhIG1hc3RlciBkZXZpY2UsIAorLyogSUNXMiBpcyBiaXQtbWFzayBvZiBwcmVzZW50IHNsYXZlcyBmb3IgYSBtYXN0ZXIgZGV2aWNlLAogICogb3IgdGhlIHNsYXZlIElEIGZvciBhIHNsYXZlIGRldmljZSAqLwogCiAvKiBJQ1c0IGJpdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaWJtcGMuaCBiL2luY2x1ZGUvYXNtLWkzODYvaWJtcGMuaAppbmRleCBhYmRkMWQ3Li5lMzVjYmQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2libXBjLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pYm1wYy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlCi0gKiAKKyAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2ljL3NjNTIwLmggYi9pbmNsdWRlL2FzbS1pMzg2L2ljL3NjNTIwLmgKaW5kZXggMTgzNmY5OS4uZDVhYmJiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9pYy9zYzUyMC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaWMvc2M1MjAuaApAQCAtMjMwLDcgKzIzMCw3IEBACiAjZGVmaW5lIFVBUlQxX0RJUwkJMHgwMQkJLyogVUFSVDEgRGlzYWJsZSAqLwogCiAvKiBidXMgbWFwcGluZyBjb25zdGFudHMgKHVzZWQgZm9yIFBDSSBjb3JlIGluaXRpYWxpemF0aW9uKSAqLwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSAvKiBidXMgbWFwcGluZyBjb25zdGFudHMgKi8KLSNkZWZpbmUgU0M1MjBfUkVHX0FERFIJCTB4MDAwMDBjZjggICAgIAorI2RlZmluZSBTQzUyMF9SRUdfQUREUgkJMHgwMDAwMGNmOAogI2RlZmluZSBTQzUyMF9SRUdfREFUQQkJMHgwMDAwMGNmYwogCiAKQEAgLTI0Miw3ICsyNDIsNyBAQAogI2RlZmluZSBTQzUyMF9JU0FfSU9fQlVTCTB4MDAwMDAwMDAKICNkZWZpbmUgU0M1MjBfSVNBX0lPX1NJWkUJMHgwMDAwMTAwMAogCi0vKiBQQ0kgSS9PIHNwYWNlIGZyb20gMHgxMDAwIHRvIDB4ZGZmZiAKKy8qIFBDSSBJL08gc3BhY2UgZnJvbSAweDEwMDAgdG8gMHhkZmZmCiAgKiAobWFrZSAweGUwMDAtMHhmZGZmIGF2YWlsYWJsZSBmb3Igc3R1ZmYgbGlrZSBQQ0NhcmQgYm9vdCkgKi8KICNkZWZpbmUgU0M1MjBfUENJX0lPX1BIWVMJMHgwMDAwMTAwMAogI2RlZmluZSBTQzUyMF9QQ0lfSU9fQlVTCTB4MDAwMDEwMDAKQEAgLTI1Myw3ICsyNTMsNyBAQAogI2RlZmluZQlTQzUyMF9QQ0lfTUVNT1JZX0JVUwkweDAwMDAwMDAwCiAjZGVmaW5lIFNDNTIwX1BDSV9NRU1PUllfU0laRQkweDEwMDAwMDAwCiAKLS8qIFBDSSBidXMgbWVtb3J5IGZyb20gMHgxMDAwMDAwMCB0byAweDI2ZmZmZmZmIAorLyogUENJIGJ1cyBtZW1vcnkgZnJvbSAweDEwMDAwMDAwIHRvIDB4MjZmZmZmZmYKICAqIChtYWtlIDB4MjcwMDAwMDAgLSAweDI3ZmZmZmZmIGF2YWlsYWJsZSBmb3Igc3R1ZmYgbGlrZSBQQ0NhcmQgYm9vdCkgKi8KICNkZWZpbmUgU0M1MjBfUENJX01FTV9QSFlTCTB4MTAwMDAwMDAKICNkZWZpbmUgU0M1MjBfUENJX01FTV9CVVMgICAgICAgMHgxMDAwMDAwMApAQCAtMjc1LDcgKzI3NSw3IEBACiAjZGVmaW5lIFNDNTIwX0lSUTcgIDIyCiAjZGVmaW5lIFNDNTIwX0lSUTggIDMKICNkZWZpbmUgU0M1MjBfSVJROSAgNAotI2RlZmluZSBTQzUyMF9JUlExMCA1IAorI2RlZmluZSBTQzUyMF9JUlExMCA1CiAjZGVmaW5lIFNDNTIwX0lSUTExIDYKICNkZWZpbmUgU0M1MjBfSVJRMTIgNwogI2RlZmluZSBTQzUyMF9JUlExMyA4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2lvLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lvLmgKaW5kZXggZDE3ZDQ1ZS4uODVkNDRhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaW8uaApAQCAtODQsNyArODQsNiBAQAogI2RlZmluZSBpc2FfbWVtY3B5X3RvaW8oYSxiLGMpCQltZW1jcHlfdG9pbygoYSksKGIpLChjKSkKIAogCi0gCiBzdGF0aWMgaW5saW5lIGludCBjaGVja19zaWduYXR1cmUodW5zaWduZWQgbG9uZyBpb19hZGRyLAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwgaW50IGxlbmd0aCkKIHsKQEAgLTEwMyw3ICsxMDIsNyBAQAogCiAvKioKICAqCWlzYV9jaGVja19zaWduYXR1cmUJCS0JZmluZCBCSU9TIHNpZ25hdHVyZXMKLSAqCUBpb19hZGRyOiBtbWlvIGFkZHJlc3MgdG8gY2hlY2sgCisgKglAaW9fYWRkcjogbW1pbyBhZGRyZXNzIHRvIGNoZWNrCiAgKglAc2lnbmF0dXJlOiAgc2lnbmF0dXJlIGJsb2NrCiAgKglAbGVuZ3RoOiBsZW5ndGggb2Ygc2lnbmF0dXJlCiAgKgpAQCAtMTEzLDcgKzExMiw3IEBACiAgKglUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQuIE5ldyBkcml2ZXJzIHNob3VsZCB1c2UgaW9yZW1hcCBhbmQKICAqCWNoZWNrX3NpZ25hdHVyZS4KICAqLwotIAorCiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzYV9jaGVja19zaWduYXR1cmUodW5zaWduZWQgbG9uZyBpb19hZGRyLAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZ25hdHVyZSwgaW50IGxlbmd0aCkKQEAgLTE1OCw3ICsxNTcsNyBAQAogCiAjZGVmaW5lIF9fT1VUKHMsczEseCkgXAogX19PVVQxKHMseCkgX19PVVQyKHMsczEsInciKSA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQpKTsgfSBcCi1fX09VVDEocyMjX3AseCkgX19PVVQyKHMsczEsInciKSBfX0ZVTExfU0xPV19ET1dOX0lPIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpO30gCitfX09VVDEocyMjX3AseCkgX19PVVQyKHMsczEsInciKSBfX0ZVTExfU0xPV19ET1dOX0lPIDogOiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpO30KIAogI2RlZmluZSBfX0lOMShzKSBcCiBzdGF0aWMgaW5saW5lIFJFVFVSTl9UWVBFIGluIyNzKHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgUkVUVVJOX1RZUEUgX3Y7CkBAIC0xNjgsNyArMTY3LDcgQEAKIAogI2RlZmluZSBfX0lOKHMsczEsaS4uLikgXAogX19JTjEocykgX19JTjIocyxzMSwidyIpIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCkgLCMjaSApOyByZXR1cm4gX3Y7IH0gXAotX19JTjEocyMjX3ApIF9fSU4yKHMsczEsInciKSBfX0ZVTExfU0xPV19ET1dOX0lPIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCkgLCMjaSApOyByZXR1cm4gX3Y7IH0gCitfX0lOMShzIyNfcCkgX19JTjIocyxzMSwidyIpIF9fRlVMTF9TTE9XX0RPV05fSU8gOiAiPWEiIChfdikgOiAiTmQiIChwb3J0KSAsIyNpICk7IHJldHVybiBfdjsgfQogCiAjZGVmaW5lIF9fSU5TKHMpIFwKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI3ModW5zaWduZWQgc2hvcnQgcG9ydCwgdm9pZCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGNpLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BjaS5oCmluZGV4IDNhOTFmNTcuLmJkZTk1NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wY2kuaApAQCAtMzIsNiArMzIsNCBAQAogdm9pZCBwY2lfcmVtb3ZlX3JvbV93aW5kb3coc3RydWN0IHBjaV9jb250cm9sbGVyKiBob3NlLCB1MzIgYWRkcik7CiB1MzIgcGNpX2dldF9yb21fd2luZG93KHN0cnVjdCBwY2lfY29udHJvbGxlciogaG9zZSwgaW50IHNpemUpOwogCi0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaAppbmRleCBjMTc1MTkzLi41ZGVkYmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcHJvY2Vzc29yLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDAyCiAgKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UKLSAqIAorICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1pMzg2L3B0cmFjZS5oCmluZGV4IGQ5OWU0NjQuLjc1MGU0MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wdHJhY2UuaApAQCAtMjAsNyArMjAsNyBAQAogI2RlZmluZSBTUyAgIDE2CiAjZGVmaW5lIEZSQU1FX1NJWkUgMTcKIAotLyogdGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUgCisvKiB0aGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQogICAgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuICovCiAKIHN0cnVjdCBwdF9yZWdzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcmVhbG1vZGUuaCBiL2luY2x1ZGUvYXNtLWkzODYvcmVhbG1vZGUuaAppbmRleCBhODRmMTI4Li45MTc3ZTRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3JlYWxtb2RlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9yZWFsbW9kZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlCi0gKiAKKyAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3R5cGVzLmggYi9pbmNsdWRlL2FzbS1pMzg2L3R5cGVzLmgKaW5kZXggYmIxMDBlYy4uNjlmOGE1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdHlwZXMuaApAQCAtNDgsNCArNDgsMyBAQAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdS1ib290LmggYi9pbmNsdWRlL2FzbS1pMzg2L3UtYm9vdC5oCmluZGV4IGRjNWRkNzIuLjM0NjY3MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdS1ib290LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni91LWJvb3QuaApAQCAtMiw3ICsyLDcgQEAKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CiAgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+Ci0gKiAKKyAqCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIFN5c2dvIFJlYWwtVGltZSBTb2x1dGlvbnMsIEdtYkggPHd3dy5lbGlub3MuY29tPgogICogQWxleCBadWVwa2UgPGF6dUBzeXNnby5kZT4KQEAgLTQ3LDcgKzQ3LDcgQEAKIAl1bnNpZ25lZCBsb25nICAgYmlfYm9vdF9wYXJhbXM7CS8qIHdoZXJlIHRoaXMgYm9hcmQgZXhwZWN0cyBwYXJhbXMgKi8KIAlzdHJ1Y3QgZW52aXJvbm1lbnRfcwkgICAgICAgKmJpX2VudjsKIAlzdHJ1Y3QJCQkJLyogUkFNIGNvbmZpZ3VyYXRpb24gKi8KLQl7IAorCXsKIAkJdWxvbmcgc3RhcnQ7CiAJCXVsb25nIHNpemU7CiAJfWJpX2RyYW1bQ09ORklHX05SX0RSQU1fQkFOS1NdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni96aW1hZ2UuaCBiL2luY2x1ZGUvYXNtLWkzODYvemltYWdlLmgKaW5kZXggNjg4NjgyNi4uYzcxMDNiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni96aW1hZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3ppbWFnZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlCi0gKiAKKyAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KICAqCkBAIC0yNCw3ICsyNCw3IEBACiAjaWZuZGVmIF9BU01fWklNQUdFX0hfCiAjZGVmaW5lIF9BU01fWklNQUdFX0hfCiAKLS8qIGxpbnV4IGkzODYgekltYWdlL2J6SW1hZ2UgaGVhZGVyLiBPZmZzZXRzIHJlbGF0aXZlIHRvIAorLyogbGludXggaTM4NiB6SW1hZ2UvYnpJbWFnZSBoZWFkZXIuIE9mZnNldHMgcmVsYXRpdmUgdG8KICAqIHRoZSBzdGFydCBvZiB0aGUgaW1hZ2UgKi8KIAogI2RlZmluZSBDTURfTElORV9NQUdJQ19PRkYgIDB4MDIwIC8qIE1hZ2ljIDB4YTMzZiBpZiB0aGUgb2Zmc2V0IGJlbG93IGlzIHZhbGlkICovCkBAIC02MiwxMCArNjIsMTAgQEAKICNkZWZpbmUgU0VUVVBfTUFYX1NJWkUgICAgIDMyNzY4CiAKICNkZWZpbmUgU0VUVVBfU1RBUlRfT0ZGU0VUIDB4MjAwCi0jZGVmaW5lIEJaSU1BR0VfTE9BRF9BRERSICAweDEwMDAwMCAKKyNkZWZpbmUgQlpJTUFHRV9MT0FEX0FERFIgIDB4MTAwMDAwCiAjZGVmaW5lIFpJTUFHRV9MT0FEX0FERFIgICAweDEwMDAwCi0JCi12b2lkICpsb2FkX3ppbWFnZShjaGFyICppbWFnZSwgdW5zaWduZWQgbG9uZyBrZXJuZWxfc2l6ZSwgCisKK3ZvaWQgKmxvYWRfemltYWdlKGNoYXIgKmltYWdlLCB1bnNpZ25lZCBsb25nIGtlcm5lbF9zaXplLAogCQkgIHVuc2lnbmVkIGxvbmcgaW5pdHJkX2FkZHIsIHVuc2lnbmVkIGxvbmcgaW5pdHJkX3NpemUsCiAJCSAgaW50IGF1dG9fYm9vdCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oCmluZGV4IGVkZmY0YzAuLjU2ZDcyMjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaApAQCAtMTYxLDcgKzE2MSw3IEBACiAgKiBAbnI6IEJpdCB0byBzZXQKICAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KICAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuICAKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KICAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgogICovCiBleHRlcm4gX19pbmxpbmVfXyBpbnQKQEAgLTE5MCw3ICsxOTAsNyBAQAogICogQG5yOiBCaXQgdG8gc2V0CiAgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCiAgKgotICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWF0b21pYyBhbmQgY2FuIGJlIHJlb3JkZXJlZC4gIAorICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWF0b21pYyBhbmQgY2FuIGJlIHJlb3JkZXJlZC4KICAqIElmIHR3byBleGFtcGxlcyBvZiB0aGlzIG9wZXJhdGlvbiByYWNlLCBvbmUgY2FuIGFwcGVhciB0byBzdWNjZWVkCiAgKiBidXQgYWN0dWFsbHkgZmFpbC4gIFlvdSBtdXN0IHByb3RlY3QgbXVsdGlwbGUgYWNjZXNzZXMgd2l0aCBhIGxvY2suCiAgKi8KQEAgLTIxMiw3ICsyMTIsNyBAQAogICogQG5yOiBCaXQgdG8gc2V0CiAgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCiAgKgotICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLiAgCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuCiAgKiBJdCBhbHNvIGltcGxpZXMgYSBtZW1vcnkgYmFycmllci4KICAqLwogZXh0ZXJuIF9faW5saW5lX18gaW50CkBAIC0yNDIsNyArMjQyLDcgQEAKICAqIEBucjogQml0IHRvIHNldAogICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQogICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuICAKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuCiAgKiBJZiB0d28gZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRpb24gcmFjZSwgb25lIGNhbiBhcHBlYXIgdG8gc3VjY2VlZAogICogYnV0IGFjdHVhbGx5IGZhaWwuICBZb3UgbXVzdCBwcm90ZWN0IG11bHRpcGxlIGFjY2Vzc2VzIHdpdGggYSBsb2NrLgogICovCkBAIC0yNjQsNyArMjY0LDcgQEAKICAqIEBucjogQml0IHRvIHNldAogICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQogICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4gIAorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgogICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCiAgKi8KIGV4dGVybiBfX2lubGluZV9fIGludApAQCAtMjkzLDcgKzI5Myw3IEBACiAgKiBAbnI6IEJpdCB0byBzZXQKICAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KICAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYXRvbWljIGFuZCBjYW4gYmUgcmVvcmRlcmVkLiAgCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYXRvbWljIGFuZCBjYW4gYmUgcmVvcmRlcmVkLgogICogSWYgdHdvIGV4YW1wbGVzIG9mIHRoaXMgb3BlcmF0aW9uIHJhY2UsIG9uZSBjYW4gYXBwZWFyIHRvIHN1Y2NlZWQKICAqIGJ1dCBhY3R1YWxseSBmYWlsLiAgWW91IG11c3QgcHJvdGVjdCBtdWx0aXBsZSBhY2Nlc3NlcyB3aXRoIGEgbG9jay4KICAqLwpAQCAtNDIwLDcgKzQyMCw3IEBACiAgKiBAbnI6IEJpdCB0byBzZXQKICAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KICAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuICAKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KICAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgogICovCiBleHRlcm4gX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAgKiBAbnI6IEJpdCB0byBzZXQKICAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KICAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYXRvbWljIGFuZCBjYW4gYmUgcmVvcmRlcmVkLiAgCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYXRvbWljIGFuZCBjYW4gYmUgcmVvcmRlcmVkLgogICogSWYgdHdvIGV4YW1wbGVzIG9mIHRoaXMgb3BlcmF0aW9uIHJhY2UsIG9uZSBjYW4gYXBwZWFyIHRvIHN1Y2NlZWQKICAqIGJ1dCBhY3R1YWxseSBmYWlsLiAgWW91IG11c3QgcHJvdGVjdCBtdWx0aXBsZSBhY2Nlc3NlcyB3aXRoIGEgbG9jay4KICAqLwpAQCAtNDY2LDcgKzQ2Niw3IEBACiAgKiBAbnI6IEJpdCB0byBzZXQKICAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KICAqCi0gKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9yZGVyZWQuICAKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4KICAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgogICovCiBleHRlcm4gX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCkBAIC00OTAsNyArNDkwLDcgQEAKICAqIEBucjogQml0IHRvIHNldAogICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQogICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuICAKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuCiAgKiBJZiB0d28gZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRpb24gcmFjZSwgb25lIGNhbiBhcHBlYXIgdG8gc3VjY2VlZAogICogYnV0IGFjdHVhbGx5IGZhaWwuICBZb3UgbXVzdCBwcm90ZWN0IG11bHRpcGxlIGFjY2Vzc2VzIHdpdGggYSBsb2NrLgogICovCkBAIC01MTIsNyArNTEyLDcgQEAKICAqIEBucjogQml0IHRvIHNldAogICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQogICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fubm90IGJlIHJlb3JkZXJlZC4gIAorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBjYW5ub3QgYmUgcmVvcmRlcmVkLgogICogSXQgYWxzbyBpbXBsaWVzIGEgbWVtb3J5IGJhcnJpZXIuCiAgKi8KIGV4dGVybiBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCkBAIC01MzYsNyArNTM2LDcgQEAKICAqIEBucjogQml0IHRvIHNldAogICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQogICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuICAKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1hdG9taWMgYW5kIGNhbiBiZSByZW9yZGVyZWQuCiAgKiBJZiB0d28gZXhhbXBsZXMgb2YgdGhpcyBvcGVyYXRpb24gcmFjZSwgb25lIGNhbiBhcHBlYXIgdG8gc3VjY2VlZAogICogYnV0IGFjdHVhbGx5IGZhaWwuICBZb3UgbXVzdCBwcm90ZWN0IG11bHRpcGxlIGFjY2Vzc2VzIHdpdGggYSBsb2NrLgogICovCkBAIC02MzgsNyArNjM4LDcgQEAKIAl1bnNpZ25lZCBpbnQgKnAgPSAoKHVuc2lnbmVkIGludCAqKSBhZGRyKSArIChvZmZzZXQgPj4gNSk7CiAJaW50IHNldCA9IDAsIGJpdCA9IG9mZnNldCAmIDMxLCByZXM7CiAJdW5zaWduZWQgbG9uZyBkdW1teTsKLQkKKwogCWlmIChiaXQpIHsKIAkJLyoKIAkJICogTG9vayBmb3IgemVybyBpbiBmaXJzdCBieXRlCkBAIC03ODksNyArNzg5LDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIGZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkgXAotICAgICAgICBmaW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisJZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQogCiAjZW5kaWYgLyogKF9fTUlQU0VCX18pICovCiAKQEAgLTgzNSw3ICs4MzUsNyBAQAogfQogCiAjZGVmaW5lIGV4dDJfZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBcCi0gICAgICAgIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQorCWV4dDJfZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAwKQogCiBleHRlcm4gX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGV4dDJfZmluZF9uZXh0X3plcm9fYml0KHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CkBAIC04OTQsOCArODk0LDggQEAKICNkZWZpbmUgZXh0Ml90ZXN0X2JpdChuciwgYWRkcikgdGVzdF9iaXQoKG5yKSwgKGFkZHIpKQogI2RlZmluZSBleHQyX2ZpbmRfZmlyc3RfemVyb19iaXQoYWRkciwgc2l6ZSkgZmluZF9maXJzdF96ZXJvX2JpdCgoYWRkciksIChzaXplKSkKICNkZWZpbmUgZXh0Ml9maW5kX25leHRfemVyb19iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KSBcCi0gICAgICAgICAgICAgICAgZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAob2Zmc2V0KSkKLSAKKwkJZmluZF9uZXh0X3plcm9fYml0KChhZGRyKSwgKHNpemUpLCAob2Zmc2V0KSkKKwogI2VuZGlmIC8qICEoX19NSVBTRUJfXykgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaW5jYS1pcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9pbmNhLWlwLmgKaW5kZXggMGM1ZjFkNy4uZTc4N2ExZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9pbmNhLWlwLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pbmNhLWlwLmgKQEAgLTIsNDEgKzIsNDEgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIsIEluZmluZW9uIFRlY2hub2xvZ2llcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBXYXJyYW50eQotICAgQmVjYXVzZSB0aGUgcHJvZ3JhbSBpcyBsaWNlbnNlZCBmcmVlIG9mIGNoYXJnZSwgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIAotICAgdGhlIHByb2dyYW0sIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LiAgRXhjZXB0IHdoZW4gICAgIAotICAgb3RoZXJ3aXNlIHN0YXRlZCBpbiB3cml0aW5nIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBhbmQvb3Igb3RoZXIgcGFydGllcyAgIAotICAgcHJvdmlkZSB0aGUgcHJvZ3JhbSAiYXMgaXMiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciAgICAgICAgIAotICAgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCAgICAgICAgIAotICAgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUaGUgIAotICAgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBwcm9ncmFtIGlzIHdpdGggICAgIAotICAgeW91LiAgc2hvdWxkIHRoZSBwcm9ncmFtIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZSB0aGUgY29zdCBvZiBhbGwgICAgIAotICAgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyIG9yIGNvcnJlY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgSW4gbm8gZXZlbnQgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nICAgIAotICAgd2lsbCBhbnkgY29weXJpZ2h0IGhvbGRlciwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgbW9kaWZ5IGFuZC9vciAgICAgIAotICAgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIGFzIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvIHlvdSBmb3IgICAgICAgIAotICAgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgICAgIAotICAgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlIHByb2dyYW0gICAgICAgICAgIAotICAgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcgcmVuZGVyZWQgICAgICAgIAotICAgaW5hY2N1cmF0ZSBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IHlvdSBvciB0aGlyZCBwYXJ0aWVzIG9yIGEgZmFpbHVyZSBvZiAgIAotICAgdGhlIHByb2dyYW0gdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlciBwcm9ncmFtcyksIGV2ZW4gaWYgc3VjaCBob2xkZXIgb3IgIAotICAgb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLiAKKwkJCSAgICAgICBObyBXYXJyYW50eQorICAgQmVjYXVzZSB0aGUgcHJvZ3JhbSBpcyBsaWNlbnNlZCBmcmVlIG9mIGNoYXJnZSwgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yCisgICB0aGUgcHJvZ3JhbSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcuICBFeGNlcHQgd2hlbgorICAgb3RoZXJ3aXNlIHN0YXRlZCBpbiB3cml0aW5nIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBhbmQvb3Igb3RoZXIgcGFydGllcworICAgcHJvdmlkZSB0aGUgcHJvZ3JhbSAiYXMgaXMiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlcgorICAgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgaW1wbGllZAorICAgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUaGUKKyAgIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgcHJvZ3JhbSBpcyB3aXRoCisgICB5b3UuICBzaG91bGQgdGhlIHByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UgYXNzdW1lIHRoZSBjb3N0IG9mIGFsbAorICAgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyIG9yIGNvcnJlY3Rpb24uCisKKyAgIEluIG5vIGV2ZW50IHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZworICAgd2lsbCBhbnkgY29weXJpZ2h0IGhvbGRlciwgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgbW9kaWZ5IGFuZC9vcgorICAgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIGFzIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvIHlvdSBmb3IKKyAgIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsCisgICBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgcHJvZ3JhbQorICAgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcgcmVuZGVyZWQKKyAgIGluYWNjdXJhdGUgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSB5b3Ugb3IgdGhpcmQgcGFydGllcyBvciBhIGZhaWx1cmUgb2YKKyAgIHRoZSBwcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuIGlmIHN1Y2ggaG9sZGVyIG9yCisgICBvdGhlciBwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JCQotICAgICAgICAgCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIE1vZHVsZSAgICAgIDogIFdEVCByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgCi0jZGVmaW5lIElOQ0FfSVBfV0RUICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDAwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKIAotICAgICAgCi0vKioqUmVzZXQgU3RhdHVzIFJlZ2lzdGVyIFBvd2VyIE9uKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9XRFQgICAgICAgICAgICAgICAgICAgICAgICAgICgweEI4MDAwMDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKipSZXNldCBTdGF0dXMgUmVnaXN0ZXIgUG93ZXIgT24qKiovCiAjZGVmaW5lIElOQ0FfSVBfV0RUX1JTVF9TUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1dEVCsgMHgwMDE0KSkKLSAgICAgIAotLyoqKlJlc2V0IFJlcXVlc3QgUmVnaXN0ZXIqKiovIAorCisvKioqUmVzZXQgUmVxdWVzdCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfV0RUKyAweDAwMTApKQogI2RlZmluZSBJTkNBX0lQX1dEVF9SU1RfUkVRX1NXQk9PVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQogI2RlZmluZSBJTkNBX0lQX1dEVF9SU1RfUkVRX1NXQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKQEAgLTQ2LDM3ICs0NiwzNyBAQAogI2RlZmluZSBJTkNBX0lQX1dEVF9SU1RfUkVRX1JSRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX1dEVF9SU1RfUkVRX1JSRFNQICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1dEVF9SU1RfUkVRX1JSQ1BVICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqTk1JIFN0YXR1cyBSZWdpc3RlcioqKi8gCisKKy8qKipOTUkgU3RhdHVzIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1dEVF9OTUlTUiAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9XRFQrIDB4MDAyQykpCiAjZGVmaW5lIElOQ0FfSVBfV0RUX05NSVNSX05NSVdEVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfV0RUX05NSVNSX05NSVBMTCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfV0RUX05NSVNSX05NSUVYVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipNYW51ZmFjdHVyZXIgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIqKiovIAorCisvKioqTWFudWZhY3R1cmVyIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1dEVF9NQU5JRCAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9XRFQrIDB4MDA3MCkpCiAjZGVmaW5lIElOQ0FfSVBfV0RUX01BTklEX01BTlVGICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAxMSkgLSAxKSAmICh2YWx1ZSkpIDw8IDUpCi0gICAgICAKLS8qKipDaGlwIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyKioqLyAKKworLyoqKkNoaXAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfV0RUX0NISVBJRCAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1dEVCsgMHgwMDc0KSkKICNkZWZpbmUgSU5DQV9JUF9XRFRfQ0hJUElEX1ZFUlNJT04gKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMjgpCiAjZGVmaW5lIElOQ0FfSVBfV0RUX0NISVBJRF9QQVJUX05VTUJFUiAodmFsdWUpICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKICNkZWZpbmUgSU5DQV9JUF9XRFRfQ0hJUElEX01BTklEICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAxMSkgLSAxKSAmICh2YWx1ZSkpIDw8IDEpCi0gICAgICAKLS8qKipSZWRlc2lnbiBUcmFjaW5nIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyKioqLyAKKworLyoqKlJlZGVzaWduIFRyYWNpbmcgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfV0RUX1JUSUQgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1dEVCsgMHgwMDc4KSkKICNkZWZpbmUgSU5DQV9JUF9XRFRfUlRJRF9MQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBJTkNBX0lQX1dEVF9SVElEX1JJWCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKldhdGNoZG9nIFRpbWVyIENvbnRyb2wgUmVnaXN0ZXIgMCoqKi8gCisKKy8qKipXYXRjaGRvZyBUaW1lciBDb250cm9sIFJlZ2lzdGVyIDAqKiovCiAjZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9DT04wICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfV0RUKyAweDAwMjApKQotICAgICAgCi0vKioqV2F0Y2hkb2cgVGltZXIgQ29udHJvbCBSZWdpc3RlciAxKioqLyAKKworLyoqKldhdGNoZG9nIFRpbWVyIENvbnRyb2wgUmVnaXN0ZXIgMSoqKi8KICNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX0NPTjEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9XRFQrIDB4MDAyNCkpCiAjZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9DT04xX1dEVERSICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfQ09OMV9XRFRJUiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSAgICAgIAotLyoqKldhdGNoZG9nIFRpbWVyIFN0YXR1cyBSZWdpc3RlcioqKi8gCisKKy8qKipXYXRjaGRvZyBUaW1lciBTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9TUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1dEVCsgMHgwMDI4KSkKICNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX1NSX1dEVFRJTSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfU1JfV0RUUFIgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCkBAIC04NCw2NiArODQsNjYgQEAKICNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX1NSX1dEVERTICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfU1JfV0RUSVMgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9TUl9XRFRPRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX1NSX1dEVEFFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQkJCi0gICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX1NSX1dEVEFFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgTW9kdWxlICAgICAgOiAgQ0dVIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAKLSNkZWZpbmUgSU5DQV9JUF9DR1UgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA3MDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAogCi0gICAgICAKLS8qKipDR1UgUExMMSBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9DR1UgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA3MDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKipDR1UgUExMMSBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMUNSICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9DR1UrIDB4MDAwOCkpCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwxQ1JfU1dSU1QgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMUNSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwxQ1JfTkRJViAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKICNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDFDUl9NRElWICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipDR1UgUExMMCBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkNHVSBQTEwwIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwwQ1IgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0NHVSsgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDBDUl9TV1JTVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwwQ1JfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKICNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDBDUl9ORElWICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMENSX01ESVYgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkNHVSBQTEwwIFN0YXR1cyBSZWdpc3RlcioqKi8gCisKKy8qKipDR1UgUExMMCBTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwwU1IgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0NHVSsgMHgwMDA0KSkKICNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDBTUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMFNSX1JDRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI5KQogI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMFNSX1BMTEJZUCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotICAgICAgCi0vKioqQ0dVIFBMTDEgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKworLyoqKkNHVSBQTEwxIFN0YXR1cyBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDFTUiAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQ0dVKyAweDAwMEMpKQogI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMVNSX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwxU1JfUkNGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjkpCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwxU1JfUExMQllQICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCi0gICAgICAKLS8qKipDR1UgRGl2aWRlciBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkNHVSBEaXZpZGVyIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9ESVZDUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0NHVSsgMHgwMDEwKSkKLSAgICAgIAotLyoqKkNHVSBNdWx0aXBsZXhlciBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkNHVSBNdWx0aXBsZXhlciBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfTVVYQ1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9DR1UrIDB4MDAxNCkpCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9NVVhDUl9TV1JTVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9NVVhDUl9NVVhJSSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX01VWENSX01VWEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKkNHVSBGcmFjdGlvbmFsIERpdmlkZXIgQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipDR1UgRnJhY3Rpb25hbCBEaXZpZGVyIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9GRENSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQ0dVKyAweDAwMTgpKQogI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfRkRDUl9GREVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfRkRDUl9JTlRFR0VSICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMTIpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKLSNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX0ZEQ1JfRlJBQ1RJT04gKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQkJCi0gICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX0ZEQ1JfRlJBQ1RJT04gKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgTW9kdWxlICAgICAgOiAgUE1VIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAKLSNkZWZpbmUgSU5DQV9JUF9QTVUgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTAyMDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAogCi0gICAgICAKLS8qKipQTSBHbG9iYWwgRW5hYmxlIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9QTVUgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTAyMDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKipQTSBHbG9iYWwgRW5hYmxlIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU4gICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9QTVUrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU4xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKQEAgLTE2MSw4ICsxNjEsOCBAQAogI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKICNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VOMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqUE0gUG93ZXIgRG93biBFbmFibGUgUmVnaXN0ZXIqKiovIAorCisvKioqUE0gUG93ZXIgRG93biBFbmFibGUgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU4gICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BNVSsgMHgwMDA4KSkKICNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VOMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCkBAIC0xNzksOCArMTc5LDggQEAKICNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VOMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKlBNIFdha2UtVXAgZnJvbSBQb3dlciBEb3duIFJlZ2lzdGVyKioqLyAKKworLyoqKlBNIFdha2UtVXAgZnJvbSBQb3dlciBEb3duIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9XVVAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9QTVUrIDB4MDAxMCkpCiAjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1dVUF9XVVAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCiAjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1dVUF9XVVAxNSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCkBAIC0xOTcsMzEgKzE5NywzMSBAQAogI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9XVVBfV1VQMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9XVVBfV1VQMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9XVVBfV1VQMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqUE0gQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipQTSBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9DUiAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9QTVUrIDB4MDAxNCkpCiAjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0NSX0FXRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0NSX1NXUlNUICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKICNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fQ1JfU1dDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9DUl9DUkQgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKLSAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9DUl9DUkQgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICBNb2R1bGUgICAgICA6ICBCQ1UgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgIAotI2RlZmluZSBJTkNBX0lQX0JDVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDAxMDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCiAKLSAgICAgIAotLyoqKkJDVSBDb250cm9sIFJlZ2lzdGVyICgwMDEwSCkqKiovIAorI2RlZmluZSBJTkNBX0lQX0JDVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDAxMDApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKkJDVSBDb250cm9sIFJlZ2lzdGVyICgwMDEwSCkqKiovCiAjZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9DT04gICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JDVSsgMHgwMDEwKSkKICNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0NPTl9TUEMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQogI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfQ09OX1NQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE5KQogI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfQ09OX1BTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE4KQogI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfQ09OX0RCRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfQ09OX1RPVVQgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipCQ1UgRXJyb3IgQ29udHJvbCBDYXB0dXJlIFJlZ2lzdGVyICgwMDIwSCkqKiovIAorCisvKioqQkNVIEVycm9yIENvbnRyb2wgQ2FwdHVyZSBSZWdpc3RlciAoMDAyMEgpKioqLwogI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JDVSsgMHgwMDIwKSkKICNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT05fVEFHICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAyNCkKICNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT05fUkROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjMpCkBAIC0yMzMsMzEgKzIzMywzMSBAQAogI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTl9UT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTl9FUlJDTlQgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQogI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTl9PUEMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI4KQotICAgICAgCi0vKioqQkNVIEVycm9yIEFkZHJlc3MgQ2FwdHVyZSBSZWdpc3RlciAoMDAyNCBIKSoqKi8gCisKKy8qKipCQ1UgRXJyb3IgQWRkcmVzcyBDYXB0dXJlIFJlZ2lzdGVyICgwMDI0IEgpKioqLwogI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUFERCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JDVSsgMHgwMDI0KSkKICNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VBRERfRlBJQURSCi0gICAgICAKLS8qKipCQ1UgRXJyb3IgRGF0YSBDYXB0dXJlIFJlZ2lzdGVyICgwMDI4SCkqKiovIAorCisvKioqQkNVIEVycm9yIERhdGEgQ2FwdHVyZSBSZWdpc3RlciAoMDAyOEgpKioqLwogI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRURBVCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JDVSsgMHgwMDI4KSkKLSNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VEQVRfRlBJREFUCQkKLSAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRURBVF9GUElEQVQKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIE1vZHVsZSAgICAgIDogIE1CQyByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgCi0jZGVmaW5lIElOQ0FfSVBfTUJDICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjEwMzAwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKIAotICAgICAgCi0vKioqTWFpbGJveCBDUFUgQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjEwMzAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqTWFpbGJveCBDUFUgQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NGRyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwODApKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ0ZHX1NXQVAgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NGR19SRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ0ZHX0ZXSUQgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NGR19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKworLyoqKk1haWxib3ggQ1BVIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JU1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDg0KSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lTUl9CM0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVNSX0IyREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCkBAIC0yNjUsOCArMjY1LDggQEAKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lTUl9CMEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lTUl9XRFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNykKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lTUl9EUzI2MCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyNykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBNYXNrIFJlZ2lzdGVyKioqLyAKKworLyoqKk1haWxib3ggQ1BVIE1hc2sgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0sgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDg4KSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19CM0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLX0IyREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCkBAIC0yNzQsOCArMjc0LDggQEAKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19CMEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19XRFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNykKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19EUzI2MCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyNykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBNYXNrIDAxIFJlZ2lzdGVyKioqLyAKKworLyoqKk1haWxib3ggQ1BVIE1hc2sgMDEgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0swMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDhDKSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzAxX0IzREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0swMV9CMkRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQpAQCAtMjgzLDggKzI4Myw4IEBACiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0swMV9CMEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzAxX1dEVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI3KQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMDFfRFMyNjAgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMjcpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqTWFpbGJveCBDUFUgTWFzayAxMCBSZWdpc3RlcioqKi8gCisKKy8qKipNYWlsYm94IENQVSBNYXNrIDEwIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMTAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA5MCkpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0sxMF9CM0RBICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMTBfQjJEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKQEAgLTI5MiwxNjcgKzI5MiwxNjcgQEAKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzEwX0IwRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI4KQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMTBfV0RUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjcpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0sxMF9EUzI2MCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyNykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBTaG9ydCBDb21tYW5kIFJlZ2lzdGVyKioqLyAKKworLyoqKk1haWxib3ggQ1BVIFNob3J0IENvbW1hbmQgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19DTUQgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDk0KSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NNRF9DUzI3MCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBJbnB1dCBEYXRhIG9mIEJ1ZmZlciAwKioqLyAKKworLyoqKk1haWxib3ggQ1BVIElucHV0IERhdGEgb2YgQnVmZmVyIDAqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JRDAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lEMF9JTkRBVEEKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIElucHV0IERhdGEgb2YgQnVmZmVyIDEqKiovIAorCisvKioqTWFpbGJveCBDUFUgSW5wdXQgRGF0YSBvZiBCdWZmZXIgMSoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lEMSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMjApKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUQxX0lOREFUQQotICAgICAgCi0vKioqTWFpbGJveCBDUFUgT3V0cHV0IERhdGEgb2YgQnVmZmVyIDIqKiovIAorCisvKioqTWFpbGJveCBDUFUgT3V0cHV0IERhdGEgb2YgQnVmZmVyIDIqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PRDIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDQwKSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09EMl9PVVREQVRBCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBPdXRwdXQgRGF0YSBvZiBCdWZmZXIgMyoqKi8gCisKKy8qKipNYWlsYm94IENQVSBPdXRwdXQgRGF0YSBvZiBCdWZmZXIgMyoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09EMyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNjApKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0QzX09VVERBVEEKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIENvbnRyb2wgUmVnaXN0ZXIgb2YgQnVmZmVyIDAqKiovIAorCisvKioqTWFpbGJveCBDUFUgQ29udHJvbCBSZWdpc3RlciBvZiBCdWZmZXIgMCoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NSMCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMDQpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ1IwX1JEWUFCVEZMUyAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIENvbnRyb2wgUmVnaXN0ZXIgb2YgQnVmZmVyIDEqKiovIAorCisvKioqTWFpbGJveCBDUFUgQ29udHJvbCBSZWdpc3RlciBvZiBCdWZmZXIgMSoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NSMSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMjQpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ1IxX1JEWUFCVEZMUyAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIENvbnRyb2wgUmVnaXN0ZXIgb2YgQnVmZmVyIDIqKiovIAorCisvKioqTWFpbGJveCBDUFUgQ29udHJvbCBSZWdpc3RlciBvZiBCdWZmZXIgMioqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NSMiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNDQpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ1IyX1JEWUFCVEZMUyAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIENvbnRyb2wgUmVnaXN0ZXIgb2YgQnVmZmVyIDMqKiovIAorCisvKioqTWFpbGJveCBDUFUgQ29udHJvbCBSZWdpc3RlciBvZiBCdWZmZXIgMyoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NSMyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNjQpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ1IzX1JEWUFCVEZMUyAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIEZyZWUgU3BhY2Ugb2YgQnVmZmVyIDAqKiovIAorCisvKioqTWFpbGJveCBDUFUgRnJlZSBTcGFjZSBvZiBCdWZmZXIgMCoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0ZTMCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMDgpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfRlMwX0ZTCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBGcmVlIFNwYWNlIG9mIEJ1ZmZlciAxKioqLyAKKworLyoqKk1haWxib3ggQ1BVIEZyZWUgU3BhY2Ugb2YgQnVmZmVyIDEqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19GUzEgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDI4KSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0ZTMV9GUwotICAgICAgCi0vKioqTWFpbGJveCBDUFUgRnJlZSBTcGFjZSBvZiBCdWZmZXIgMioqKi8gCisKKy8qKipNYWlsYm94IENQVSBGcmVlIFNwYWNlIG9mIEJ1ZmZlciAyKioqLwogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfRlMyICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA0OCkpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19GUzJfRlMKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIEZyZWUgU3BhY2Ugb2YgQnVmZmVyIDMqKiovIAorCisvKioqTWFpbGJveCBDUFUgRnJlZSBTcGFjZSBvZiBCdWZmZXIgMyoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0ZTMyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNjgpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfRlMzX0ZTCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMCoqKi8gCisKKy8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMCoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBMCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMEMpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfREEwX0RBCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMSoqKi8gCisKKy8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMSoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBMSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMkMpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfREExX0RBCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMioqKi8gCisKKy8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMioqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBMiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNEMpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfREEyX0RBCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMyoqKi8gCisKKy8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMyoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBMyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNkMpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfREEzX0RBCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBJbnB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAwKioqLyAKKworLyoqKk1haWxib3ggQ1BVIElucHV0IEFic29sdXRlIFBvaW50ZXIgb2YgQnVmZmVyIDAqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JQUJTMCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDEwKSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lBQlMwX0lBQlMKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIElucHV0IEFic29sdXRlIFBvaW50ZXIgb2YgQnVmZmVyIDEqKiovIAorCisvKioqTWFpbGJveCBDUFUgSW5wdXQgQWJzb2x1dGUgUG9pbnRlciBvZiBCdWZmZXIgMSoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lBQlMxICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMzApKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUFCUzFfSUFCUwotICAgICAgCi0vKioqTWFpbGJveCBDUFUgSW5wdXQgQWJzb2x1dGUgUG9pbnRlciBvZiBCdWZmZXIgMioqKi8gCisKKy8qKipNYWlsYm94IENQVSBJbnB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAyKioqLwogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUFCUzIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA1MCkpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JQUJTMl9JQUJTCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBJbnB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAzKioqLyAKKworLyoqKk1haWxib3ggQ1BVIElucHV0IEFic29sdXRlIFBvaW50ZXIgb2YgQnVmZmVyIDMqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JQUJTMyAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDcwKSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lBQlMzX0lBQlMKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIElucHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAwKioqLyAKKworLyoqKk1haWxib3ggQ1BVIElucHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAwKioqLwogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVRNUDAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAxNCkpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JVE1QMF9JVE1QCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBJbnB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMSoqKi8gCisKKy8qKipNYWlsYm94IENQVSBJbnB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMSoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lUTVAxICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMzQpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVRNUDFfSVRNUAotICAgICAgCi0vKioqTWFpbGJveCBDUFUgSW5wdXQgVGVtcG9yYXJ5IFBvaW50ZXIgb2YgQnVmZmVyIDIqKiovIAorCisvKioqTWFpbGJveCBDUFUgSW5wdXQgVGVtcG9yYXJ5IFBvaW50ZXIgb2YgQnVmZmVyIDIqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JVE1QMiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDU0KSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lUTVAyX0lUTVAKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIElucHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAzKioqLyAKKworLyoqKk1haWxib3ggQ1BVIElucHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAzKioqLwogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVRNUDMgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA3NCkpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JVE1QM19JVE1QCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBPdXRwdXQgQWJzb2x1dGUgUG9pbnRlciBvZiBCdWZmZXIgMCoqKi8gCisKKy8qKipNYWlsYm94IENQVSBPdXRwdXQgQWJzb2x1dGUgUG9pbnRlciBvZiBCdWZmZXIgMCoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09BQlMwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMTgpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0FCUzBfT0FCUwotICAgICAgCi0vKioqTWFpbGJveCBDUFUgT3V0cHV0IEFic29sdXRlIFBvaW50ZXIgb2YgQnVmZmVyIDEqKiovIAorCisvKioqTWFpbGJveCBDUFUgT3V0cHV0IEFic29sdXRlIFBvaW50ZXIgb2YgQnVmZmVyIDEqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PQUJTMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDM4KSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09BQlMxX09BQlMKLSAgICAgIAotLyoqKk1haWxib3ggQ1BVIE91dHB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAyKioqLyAKKworLyoqKk1haWxib3ggQ1BVIE91dHB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAyKioqLwogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0FCUzIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA1OCkpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PQUJTMl9PQUJTCi0gICAgICAKLS8qKipNYWlsYm94IENQVSBPdXRwdXQgQWJzb2x1dGUgUG9pbnRlciBvZiBCdWZmZXIgMyoqKi8gCisKKy8qKipNYWlsYm94IENQVSBPdXRwdXQgQWJzb2x1dGUgUG9pbnRlciBvZiBCdWZmZXIgMyoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09BQlMzICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNzgpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0FCUzNfT0FCUwotICAgICAgCi0vKioqTWFpbGJveCBDUFUgT3V0cHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAwKioqLyAKKworLyoqKk1haWxib3ggQ1BVIE91dHB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMCoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09UTVAwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMUMpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDBfT1RNUAotICAgICAgCi0vKioqTWFpbGJveCBDUFUgT3V0cHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAxKioqLyAKKworLyoqKk1haWxib3ggQ1BVIE91dHB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMSoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09UTVAxICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwM0MpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDFfT1RNUAotICAgICAgCi0vKioqTWFpbGJveCBDUFUgT3V0cHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAyKioqLyAKKworLyoqKk1haWxib3ggQ1BVIE91dHB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMioqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09UTVAyICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNUMpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDJfT1RNUAotICAgICAgCi0vKioqTWFpbGJveCBDUFUgT3V0cHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAzKioqLyAKKworLyoqKk1haWxib3ggQ1BVIE91dHB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMyoqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09UTVAzICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwN0MpKQogI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDNfT1RNUAotICAgICAgCi0vKioqRFNQIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqRFNQIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfTUJDX0RDVFJMICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMEEwKSkKICNkZWZpbmUgSU5DQV9JUF9NQkNfRENUUkxfQkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQogI2RlZmluZSBJTkNBX0lQX01CQ19EQ1RSTF9CTU9EICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX0RDVFJMX0lETCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX0RDVFJMX1JFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQotICAgICAgCi0vKioqRFNQIFN0YXR1cyBSZWdpc3RlcioqKi8gCisKKy8qKipEU1AgU3RhdHVzIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX01CQ19EU1RBICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDBBNCkpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX0RTVEFfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQogI2RlZmluZSBJTkNBX0lQX01CQ19EU1RBX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSAgICAgIAotLyoqKkRTUCBUZXN0IDEgUmVnaXN0ZXIqKiovIAorCisvKioqRFNQIFRlc3QgMSBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9NQkNfRFRTVDEgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwQTgpKQogI2RlZmluZSBJTkNBX0lQX01CQ19EVFNUMV9BQk9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKICNkZWZpbmUgSU5DQV9JUF9NQkNfRFRTVDFfSFdGMzIgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfTUJDX0RUU1QxX0hXRjRNICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBJTkNBX0lQX01CQ19EVFNUMV9IV0ZPUCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykJCQotICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfTUJDX0RUU1QxX0hXRk9QICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgTW9kdWxlICAgICAgOiAgU3dpdGNoIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAKLSNkZWZpbmUgSU5DQV9JUF9Td2l0Y2ggICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA0MDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAogCi0gICAgICAKLS8qKipVbmtub3duIERlc3RpbmF0aW9uIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2ggICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA0MDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKipVbmtub3duIERlc3RpbmF0aW9uIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9VTl9ERVNUICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1VOX0RFU1RfQ0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9VTl9ERVNUX0xCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKQEAgLTQ2Myw4ICs0NjMsOCBAQAogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9VTl9ERVNUX0NVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVU5fREVTVF9MVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1VOX0RFU1RfUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqVkxBTiBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKlZMQU4gQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMDQpKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9WTEFOX0NUUkxfU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9WTEFOX0NUUkxfU0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQpAQCAtNDczLDIzICs0NzMsMjMgQEAKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1ZBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKlBDIFZMQU4gQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8gCisKKy8qKipQQyBWTEFOIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1ZMQU4gICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDA4KSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfVkxBTl9QUkkgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19WTEFOX1ZMQU5fSUQgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAxMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipMQU4gVkxBTiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKioqLyAKKworLyoqKkxBTiBWTEFOIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9WTEFOICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMEMpKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fVkxBTl9QUkkgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fVkxBTl9WTEFOX0lEICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMTIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqQ1BVIFZMQU4gQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8gCisKKy8qKipDUFUgVkxBTiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfVkxBTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDEwKSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1ZMQU5fUFJJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1ZMQU5fVkxBTl9JRCAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDEyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlByaW9yaXR5IENvUyBNYXBwaW5nIFJlZ2lzdGVyKioqLyAKKworLyoqKlByaW9yaXR5IENvUyBNYXBwaW5nIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QUklfQ29TICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAxNCkpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BSSV9Db1NfUDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QUklfQ29TX1A2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKQEAgLTQ5OSwxNCArNDk5LDE0IEBACiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BSSV9Db1NfUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QUklfQ29TX1AxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFJJX0NvU19QMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipTcGFubmluZyBUcmVlIFBvcnQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKworLyoqKlNwYW5uaW5nIFRyZWUgUG9ydCBTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1NUX1BUICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDE4KSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfU1RfUFRfQ1BTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9TVF9QVF9MUFMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1NUX1BUX1BQUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkFSTCBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkFSTCBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAxQykpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfQ0hDQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9DSENMICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQpAQCAtNTIzLDI0ICs1MjMsMjQgQEAKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9NQUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX0VOTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfUmVzICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDE5KSAtIDEpICYgKHZhbHVlKSkgPDwgMTMpCi0gICAgICAKLS8qKipDUFUgQWNjZXNzIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqQ1BVIEFjY2VzcyBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfQUNUTCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDIwKSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX0FDVExfUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX0FDVExfUlcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX0FDVExfUmVzICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIxKSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX0FDVExfQVZBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX0FDVExfSURYICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqQ1BVIEFjY2VzcyBEYXRhIFJlZ2lzdGVyIDEqKiovIAorCisvKioqQ1BVIEFjY2VzcyBEYXRhIFJlZ2lzdGVyIDEqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0RBVEExICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDI0KSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfREFUQTFfRGF0YSAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDI0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkNQVSBBY2Nlc3MgRGF0YSBSZWdpc3RlciAyKioqLyAKKworLyoqKkNQVSBBY2Nlc3MgRGF0YSBSZWdpc3RlciAyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9EQVRBMiAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAyOCkpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0RBVEEyX0RhdGEKLSAgICAgIAotLyoqKkNQVSBQb3J0IENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqQ1BVIFBvcnQgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1BDVEwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAyQykpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9QQ1RMX0RBX1BPUlRTICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxMSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1BDVExfREFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCkBAIC01NTEsODUgKzU1MSw4NSBAQAogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTF9FTUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTF9FREwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTF9SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTgpIC0gMSkgJiAodmFsdWUpKSA8PCAxNCkKLSAgICAgIAotLyoqKkRTQ1AgQ29TIE1hcHBpbmcgUmVnaXN0ZXIgMSoqKi8gCisKKy8qKipEU0NQIENvUyBNYXBwaW5nIFJlZ2lzdGVyIDEqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0RTQ1BfQ09TMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDMwKSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRFNDUF9DT1MxX0RTQ1AKLSAgICAgIAotLyoqKkRTQ1AgQ29TIE1hcHBpbmcgUmVnaXN0ZXIgMSoqKi8gCisKKy8qKipEU0NQIENvUyBNYXBwaW5nIFJlZ2lzdGVyIDEqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0RTQ1BfQ09TMiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDM0KSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRFNDUF9DT1MyX0RTQ1AKLSAgICAgIAotLyoqKlBDIFdGUSBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKlBDIFdGUSBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XRlFfQ1RMICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDA4MCkpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dGUV9DVExfUDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XRlFfQ1RMX1AwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfV0ZRX0NUTF9XVDEgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDUpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dGUV9DVExfV1QwICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XRlFfQ1RMX1NDSF9TRUwgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlBDIFRYIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqUEMgVFggQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfVFhfQ1RMICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwODQpKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19UWF9DVExfRUxSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfVFhfQ1RMX0VFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipMQU4gV0ZRIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqTEFOIFdGUSBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fV0ZRX0NUTCAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDEwMCkpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XRlFfQ1RMX1AxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dGUV9DVExfUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fV0ZRX0NUTF9XVDEgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDUpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XRlFfQ1RMX1dUMCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dGUV9DVExfU0NIX1NFTCAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqTEFOIFRYIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqTEFOIFRYIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9UWF9DVEwgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMTA0KSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1RYX0NUTF9FTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fVFhfQ1RMX0VFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipDUFUgV0ZRIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqQ1BVIFdGUSBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV0ZRX0NUTCAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDE4MCkpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XRlFfQ1RMX1AxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1dGUV9DVExfUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV0ZRX0NUTF9XVDEgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDUpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XRlFfQ1RMX1dUMCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1dGUV9DVExfU0NIX1NFTCAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqUE0gUEMgUlggV2F0ZXJtYXJrIFJlZ2lzdGVyKioqLyAKKworLyoqKlBNIFBDIFJYIFdhdGVybWFyayBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfV00gICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyMDApKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XTV9SWF9XTTEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XTV9SWF9XTTIgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XTV9SWF9XTTMgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dNX1JYX1dNNCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlBNIExBTiBSWCBXYXRlcm1hcmsgUmVnaXN0ZXIqKiovIAorCisvKioqUE0gTEFOIFJYIFdhdGVybWFyayBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dNICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyMDQpKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fV01fUlhfV00xICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAyNCkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dNX1JYX1dNMiAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XTV9SWF9XTTMgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XTV9SWF9XTTQgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipQTSBDUFUgUlggV2F0ZXJtYXJrIFJlZ2lzdGVyKioqLyAKKworLyoqKlBNIENQVSBSWCBXYXRlcm1hcmsgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XTSAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjA4KSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1dNX1JYX1dNMSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XTV9SWF9XTTIgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV01fUlhfV00zICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV01fUlhfV000ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqUE0gQ1BVIFJYIFdhdGVybWFyayBSZWdpc3RlcioqKi8gCisKKy8qKipQTSBDUFUgUlggV2F0ZXJtYXJrIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9HQkxfV00gICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDIwQykpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0dCTF9XTV9HQkxfUlhfV00xICh2YWx1ZSkgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9HQkxfV01fR0JMX1JYX1dNMiAodmFsdWUpICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfR0JMX1dNX0dCTF9SWF9XTTMgKHZhbHVlKSAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfR0JMX1dNX0dCTF9SWF9XTTQgKHZhbHVlKSAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlBNIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqUE0gQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1fQ1RMICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyMTApKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTV9DVExfR0ROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1fQ1RMX0NETiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNX0NUTF9MRE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTV9DVExfUEROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKlBNIEhlYWRlciBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKlBNIEhlYWRlciBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTCAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDI4MCkpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfSERfQ1RMX1JMMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIxKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTF9SQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIwKQpAQCAtNjM4LDM4ICs2MzgsMzggQEAKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19IRF9DVExfVFlQRV9MRU4gKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTF9UQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0hEX0NUTF9BREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqUE0gU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgMSoqKi8gCisKKy8qKipQTSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciAxKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1NBMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjg0KSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19TQTFfU0FfNDdfMzIgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqUE0gU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgMioqKi8gCisKKy8qKipQTSBTb3VyY2UgQWRkcmVzcyBSZWdpc3RlciAyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1NBMiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjg4KSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19TQTJfU0FfMzFfMAotICAgICAgCi0vKioqUE0gRGVzdCBBZGRyZXNzIFJlZ2lzdGVyIDEqKiovIAorCisvKioqUE0gRGVzdCBBZGRyZXNzIFJlZ2lzdGVyIDEqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfREExICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyOEMpKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0RBMV9EQV80N18zMiAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipQTSBEZXN0IEFkZHJlc3MgUmVnaXN0ZXIgMioqKi8gCisKKy8qKipQTSBEZXN0IEFkZHJlc3MgUmVnaXN0ZXIgMioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19EQTIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDI5MCkpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfREEyX0RBXzMxXzAKLSAgICAgIAotLyoqKlBNIFZMQU4gUmVnaXN0ZXIqKiovIAorCisvKioqUE0gVkxBTiBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19WTEFOICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyOTQpKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1ZMQU5fUFJJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxMykKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19WTEFOX0NGSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1ZMQU5fVkxBTklEICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDEyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlBNIFRYIElQRyBDb3VudGVyIFJlZ2lzdGVyKioqLyAKKworLyoqKlBNIFRYIElQRyBDb3VudGVyIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1RYX0lQRyAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDI5OCkpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfVFhfSVBHX0lQR0NOVCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlBNIFJYIElQRyBDb3VudGVyIFJlZ2lzdGVyKioqLyAKKworLyoqKlBNIFJYIElQRyBDb3VudGVyIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1JYX0lQRyAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDI5QykpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfUlhfSVBHX0lQR0NOVCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKk1pcnJvciBSZWdpc3RlcioqKi8gCisKKy8qKipNaXJyb3IgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUiAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMzAwKSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTVJSX01SUiAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTVJSX0VDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKQEAgLTY3OCwyMSArNjc4LDIxIEBACiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUl9JQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUl9JTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01SUl9JUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipQYWNrZXQgTGVuZ3RoIFJlZ2lzdGVyKioqLyAKKworLyoqKlBhY2tldCBMZW5ndGggUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BLVF9MRU4gICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMzA0KSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUEtUX0xFTl9BREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUEtUX0xFTl9NQVhfUEtUX0xFTiAodmFsdWUpICAgICAgICAoKCgoIDEgPDwgMTEpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqTURJTyBBY2Nlc3MgUmVnaXN0ZXIqKiovIAorCisvKioqTURJTyBBY2Nlc3MgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDA0ODApKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0FDQ19SQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0FDQ19SVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0FDQ19QSFlfQUREUiAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCA1KSAtIDEpICYgKHZhbHVlKSkgPDwgMjEpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDX1JFR19BRERSICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDUpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0NfUEhZX0RBVEEgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqRXRoZXJuZXQgUEhZIFJlZ2lzdGVyKioqLyAKKworLyoqKkV0aGVybmV0IFBIWSBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRVBIWSAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDA0ODQpKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9FUEhZX1NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRVBIWV9TUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCkBAIC03MDIsMTMgKzcwMiwxMyBAQAogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9FUEhZX0RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRVBIWV9QTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0VQSFlfUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqUGF1c2UgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyKioqLyAKKworLyoqKlBhdXNlIFdyaXRlIEVuYWJsZSBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFdSX0VOICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDA0ODgpKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QV1JfRU5fUEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QV1JfRU5fUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqTURJTyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKioqLyAKKworLyoqKk1ESU8gQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19DRkcgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDQ4QykpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQ0ZHX01EUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTQpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQ0ZHX1BIWV9MQU5fQUREUiAodmFsdWUpICAgICAgICgoKCggMSA8PCA1KSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKQEAgLTcxNywyNCArNzE3LDI0IEBACiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQ0ZHX1BTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19DRkdfUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0NGR19VTU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqQ2xvY2sgQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8gCisKKy8qKipDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DTEtfQ0ZHICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDUwMCkpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NMS19DRkdfQVJMX0lEICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKICNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ0xLX0NGR19DUFVfSUQgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DTEtfQ0ZHX0xBTl9JRCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NMS19DRkdfUENfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NMS19DRkdfU0VfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCQkKLSAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DTEtfQ0ZHX1NFX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgTW9kdWxlICAgICAgOiAgU1NDMSByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAKLSNkZWZpbmUgSU5DQV9JUF9TU0MxICAgICAgICAgICAgICAgICAgICAgICAgICgweEI4MDAwNTAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAogCi0gICAgICAKLS8qKipDb250cm9sIFJlZ2lzdGVyIChQcm9ncmFtbWluZyBNb2RlKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfU1NDMSAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDUwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqQ29udHJvbCBSZWdpc3RlciAoUHJvZ3JhbW1pbmcgTW9kZSkqKiovCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX1BSRyAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MxKyAweDAwMTApKQogI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX01TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCkBAIC03NDgsOCArNzQ4LDggQEAKICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX1BIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX0hCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX0JNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqU0NDIENvbnRyb2wgUmVnaXN0ZXIgKE9wZXJhdGluZyBNb2RlKSoqKi8gCisKKy8qKipTQ0MgQ29udHJvbCBSZWdpc3RlciAoT3BlcmF0aW5nIE1vZGUpKioqLwogI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9PUFIgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDEwKSkKICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fT1BSX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX09QUl9NUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQpAQCAtNzU5LDggKzc1OSw4IEBACiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX09QUl9SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX09QUl9URSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX09QUl9CQyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlNTQyBXcml0ZSBIYXJkd2FyZSBNb2RpZmllZCBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKlNTQyBXcml0ZSBIYXJkd2FyZSBNb2RpZmllZCBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1dIQkNPTiAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDQwKSkKICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19XSEJDT05fU0VUQkUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1dIQkNPTl9TRVRQRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCkBAIC03NzAsNTMgKzc3MCw1MyBAQAogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1dIQkNPTl9DTFJQRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfV0hCQ09OX0NMUlJFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1dIQkNPTl9DTFJURSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKLSAgICAgIAotLyoqKlNTQyBCYXVkcmF0ZSBUaW1lciBSZWxvYWQgUmVnaXN0ZXIqKiovIAorCisvKioqU1NDIEJhdWRyYXRlIFRpbWVyIFJlbG9hZCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19CUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzErIDB4MDAxNCkpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfQlJfQlJfVkFMVUUgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqU1NDIFRyYW5zbWl0dGVyIEJ1ZmZlciBSZWdpc3RlcioqKi8gCisKKy8qKipTU0MgVHJhbnNtaXR0ZXIgQnVmZmVyIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1RCICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDIwKSkKICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19UQl9UQl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipTU0MgUmVjZWl2ZXIgQnVmZmVyIFJlZ2lzdGVyKioqLyAKKworLyoqKlNTQyBSZWNlaXZlciBCdWZmZXIgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfUkIgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MxKyAweDAwMjQpKQogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1JCX1JCX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlNTQyBSZWNlaXZlIEZJRk8gQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipTU0MgUmVjZWl2ZSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfUlhGQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MxKyAweDAwMzApKQogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1JYRkNPTl9SWEZJVEwgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfUlhGQ09OX1JYVE1FTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfUlhGQ09OX1JYRkxVICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1JYRkNPTl9SWEZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKlNTQyBUcmFuc21pdCBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqU1NDIFRyYW5zbWl0IEZJRk8gQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19UWEZDT04gICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzErIDB4MDAzNCkpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfVFhGQ09OX1JYRklUTCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19UWEZDT05fVFhUTUVOICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19UWEZDT05fVFhGTFUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfVFhGQ09OX1RYRkVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqU1NDIEZJRk8gU3RhdHVzIFJlZ2lzdGVyKioqLyAKKworLyoqKlNTQyBGSUZPIFN0YXR1cyBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19GU1RBVCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzErIDB4MDAzOCkpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfRlNUQVRfVFhGRkwgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX0ZTVEFUX1JYRkZMICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlNTQyBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKlNTQyBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX0NMQyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19DTENfUk1DICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX0NMQ19ESVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfQ0xDX0RJU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkJCQotICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfQ0xDX0RJU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIE1vZHVsZSAgICAgIDogIFNTQzIgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgCi0jZGVmaW5lIElOQ0FfSVBfU1NDMiAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDYwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKIAotICAgICAgCi0vKioqQ29udHJvbCBSZWdpc3RlciAoUHJvZ3JhbW1pbmcgTW9kZSkqKiovIAorI2RlZmluZSBJTkNBX0lQX1NTQzIgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDA2MDApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKkNvbnRyb2wgUmVnaXN0ZXIgKFByb2dyYW1taW5nIE1vZGUpKioqLwogI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkcgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDEwKSkKICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fUFJHX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX1BSR19NUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQpAQCAtODMwLDggKzgzMCw4IEBACiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX1BSR19QSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX1BSR19IQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX1BSR19CTSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlNDQyBDb250cm9sIFJlZ2lzdGVyIChPcGVyYXRpbmcgTW9kZSkqKiovIAorCisvKioqU0NDIENvbnRyb2wgUmVnaXN0ZXIgKE9wZXJhdGluZyBNb2RlKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fT1BSICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzIrIDB4MDAxMCkpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX09QUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFJfTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKQEAgLTg0MSw4ICs4NDEsOCBAQAogI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFJfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQogI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFJfVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFJfQkMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipTU0MgV3JpdGUgSGFyZHdhcmUgTW9kaWZpZWQgQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipTU0MgV3JpdGUgSGFyZHdhcmUgTW9kaWZpZWQgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19XSEJDT04gICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzIrIDB4MDA0MCkpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfV0hCQ09OX1NFVEJFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19XSEJDT05fU0VUUEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQpAQCAtODUyLDYzICs4NTIsNjMgQEAKICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19XSEJDT05fQ0xSUEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQogI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1dIQkNPTl9DTFJSRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19XSEJDT05fQ0xSVEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCi0gICAgICAKLS8qKipTU0MgQmF1ZHJhdGUgVGltZXIgUmVsb2FkIFJlZ2lzdGVyKioqLyAKKworLyoqKlNTQyBCYXVkcmF0ZSBUaW1lciBSZWxvYWQgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfQlIgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MyKyAweDAwMTQpKQogI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX0JSX0JSX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlNTQyBUcmFuc21pdHRlciBCdWZmZXIgUmVnaXN0ZXIqKiovIAorCisvKioqU1NDIFRyYW5zbWl0dGVyIEJ1ZmZlciBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19UQiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzIrIDB4MDAyMCkpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfVEJfVEJfVkFMVUUgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqU1NDIFJlY2VpdmVyIEJ1ZmZlciBSZWdpc3RlcioqKi8gCisKKy8qKipTU0MgUmVjZWl2ZXIgQnVmZmVyIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JCICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDI0KSkKICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19SQl9SQl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipTU0MgUmVjZWl2ZSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqU1NDIFJlY2VpdmUgRklGTyBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JYRkNPTiAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDMwKSkKICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19SWEZDT05fUlhGSVRMICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JYRkNPTl9SWFRNRU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JYRkNPTl9SWEZMVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19SWEZDT05fUlhGRU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipTU0MgVHJhbnNtaXQgRklGTyBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKlNTQyBUcmFuc21pdCBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfVFhGQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MyKyAweDAwMzQpKQogI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1RYRkNPTl9SWEZJVEwgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfVFhGQ09OX1RYVE1FTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfVFhGQ09OX1RYRkxVICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1RYRkNPTl9UWEZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKlNTQyBGSUZPIFN0YXR1cyBSZWdpc3RlcioqKi8gCisKKy8qKipTU0MgRklGTyBTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfRlNUQVQgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MyKyAweDAwMzgpKQogI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX0ZTVEFUX1RYRkZMICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19GU1RBVF9SWEZGTCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipTU0MgQ2xvY2sgQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipTU0MgQ2xvY2sgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19DTEMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzIrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfQ0xDX1JNQyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19DTENfRElTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX0NMQ19ESVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCQkKLSAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX0NMQ19ESVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICBNb2R1bGUgICAgICA6ICBFQlUgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgIAorCiAjaWYgZGVmaW5lZChDT05GSUdfSU5DQV9JUCkKICNkZWZpbmUgSU5DQV9JUF9FQlUgICAgICAgICAgICAgICAgICAgICAgICAgICgweEI4MDAwMjAwKQogI2VsaWYgZGVmaW5lZChDT05GSUdfUFVSUExFKQogI2RlZmluZSBJTkNBX0lQX0VCVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMEQ4MDApCiAjZW5kaWYKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gICAgICAKLS8qKipFQlUgQ2xvY2sgQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipFQlUgQ2xvY2sgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0NMQyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRUJVKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQ0xDX0RJU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0NMQ19ESVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipFQlUgR2xvYmFsIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqRUJVIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQ09OICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9FQlUrIDB4MDAxMCkpCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9DT05fRFRBQ1MgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAyMCkKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0NPTl9EVEFSVyAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQpAQCAtOTE2LDI5ICs5MTYsMjkgQEAKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0NPTl9BUkJNT0RFICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9DT05fQVJCU1lOQyAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQ09OXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQotICAgICAgCi0vKioqRUJVIEFkZHJlc3MgU2VsZWN0IFJlZ2lzdGVyIDAqKiovIAorCisvKioqRUJVIEFkZHJlc3MgU2VsZWN0IFJlZ2lzdGVyIDAqKiovCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwwICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0VCVSsgMHgwMDIwKSkKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDBfQkFTRSAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIwKSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwwX01BU0sgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDBfTUlSUk9SRSAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMF9SRUdFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKkVCVSBBZGRyZXNzIFNlbGVjdCBSZWdpc3RlciAxKioqLyAKKworLyoqKkVCVSBBZGRyZXNzIFNlbGVjdCBSZWdpc3RlciAxKioqLwogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMSAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9FQlUrIDB4MDAyNCkpCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwxX0JBU0UgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyMCkgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMV9NQVNLICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwxX01JUlJPUkUgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDFfUkVHRU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipFQlUgQWRkcmVzcyBTZWxlY3QgUmVnaXN0ZXIgMioqKi8gCisKKy8qKipFQlUgQWRkcmVzcyBTZWxlY3QgUmVnaXN0ZXIgMioqKi8KICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDIgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRUJVKyAweDAwMjgpKQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMl9CQVNFICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMjApIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDJfTUFTSyAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMl9NSVJST1JFICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwyX1JFR0VOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqRUJVIEJ1cyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAqKiovIAorCisvKioqRUJVIEJ1cyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDAqKiovCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0VCVSsgMHgwMDYwKSkKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjBfV1JESVMgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9BTEVDICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI5KQpAQCAtOTU0LDggKzk1NCw4IEBACiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wX0hPTERDICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjBfUkVDT1ZDICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9DTVVMVCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipFQlUgQnVzIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSoqKi8gCisKKy8qKipFQlUgQnVzIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSoqKi8KICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjEgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRUJVKyAweDAwNjQpKQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9XUkRJUyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04xX0FMRUMgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjkpCkBAIC05NzEsOCArOTcxLDggQEAKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfSE9MREMgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9SRUNPVkMgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04xX0NNVUxUICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkVCVSBCdXMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyKioqLyAKKworLyoqKkVCVSBCdXMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyKioqLwogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMiAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9FQlUrIDB4MDA2OCkpCiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX1dSRElTICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjJfQUxFQyAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyOSkKQEAgLTk4NywyOCArOTg3LDI4IEBACiAjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX1dBSVRXUkMgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKICNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjJfSE9MREMgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQogI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9SRUNPVkMgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCi0jZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX0NNVUxUICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkJCQotICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX0NNVUxUICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIE1vZHVsZSAgICAgIDogIFNEUkFNIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgCi0jZGVmaW5lIElOQ0FfSVBfU0RSQU0gICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjgwMDAwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKIAotICAgICAgCi0vKioqTUMgQWNjZXNzIEVycm9yIENhdXNlIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTSAgICAgICAgICAgICAgICAgICAgICAgICgweEJGODAwMDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKipNQyBBY2Nlc3MgRXJyb3IgQ2F1c2UgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfRVJSQ0FVU0UgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MDEwMCkpCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfRVJSQ0FVU0VfRVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfRVJSQ0FVU0VfUE9SVCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKICNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19FUlJDQVVTRV9DQVVTRSAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfRVJSQ0FVU0VfUmVzICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IE5hTikgLSAxKSAmICh2YWx1ZSkpIDw8IE5hTikKLSAgICAgIAotLyoqKk1DIEFjY2VzcyBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyKioqLyAKKworLyoqKk1DIEFjY2VzcyBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0VSUkFERFIgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NEUkFNKyAweDAxMDgpKQogI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0VSUkFERFJfQUREUgotICAgICAgCi0vKioqTUMgSS9PIEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlcioqKi8gCisKKy8qKipNQyBJL08gR2VuZXJhbCBQdXJwb3NlIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0lPR1AgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NEUkFNKyAweDA4MDApKQogI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0lPR1BfR1BSNiAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAyOCkKICNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19JT0dQX0dQUjUgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCkBAIC0xMDE5LDM5ICsxMDE5LDM5IEBACiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfSU9HUF9DTEtERUxBWSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19JT0dQX0NMS1JBVCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19JT0dQX1JEREVMICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKk1DIFNlbGYgUmVmcmVzaCBSZWdpc3RlcioqKi8gCisKKy8qKipNQyBTZWxmIFJlZnJlc2ggUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfU0VMRlJGU0ggICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MEEwMCkpCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfU0VMRlJGU0hfUFdEUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX1NFTEZSRlNIX1BXRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfU0VMRlJGU0hfUmVzICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMwKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKLSAgICAgIAotLyoqKk1DIEVuYWJsZSBSZWdpc3RlcioqKi8gCisKKy8qKipNQyBFbmFibGUgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ1RSTEVOQSAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MTAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ1RSTEVOQV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQogI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0NUUkxFTkFfUmVzICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMxKSAtIDEpICYgKHZhbHVlKSkgPDwgMSkKLSAgICAgIAotLyoqKk1DIE1vZGUgUmVnaXN0ZXIgU2V0dXAgQ29kZSoqKi8gCisKKy8qKipNQyBNb2RlIFJlZ2lzdGVyIFNldHVwIENvZGUqKiovCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTVJTQ09ERSAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MTAwOCkpCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTVJTQ09ERV9VTUMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNSkgLSAxKSAmICh2YWx1ZSkpIDw8IDcpCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTVJTQ09ERV9DTCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19NUlNDT0RFX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKICNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19NUlNDT0RFX0JMICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqTUMgQ29uZmlndXJhdGlvbiBEYXRhLXdvcmQgV2lkdGggUmVnaXN0ZXIqKiovIAorCisvKioqTUMgQ29uZmlndXJhdGlvbiBEYXRhLXdvcmQgV2lkdGggUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHRFcgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TRFJBTSsgMHgxMDEwKSkKICNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19DRkdEV19EVyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKICNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19DRkdEV19SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMjgpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQotICAgICAgCi0vKioqTUMgQ29uZmlndXJhdGlvbiBQaHlzaWNhbCBCYW5rIDAgUmVnaXN0ZXIqKiovIAorCisvKioqTUMgQ29uZmlndXJhdGlvbiBQaHlzaWNhbCBCYW5rIDAgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MTAxOCkpCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwX01DU0VOMCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwX0JBTktOMCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19DRkdQQjBfUk9XVzAgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQogI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0NGR1BCMF9DT0xXMCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwX1JlcyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQotICAgICAgCi0vKioqTUMgTGF0ZW5jeSBSZWdpc3RlcioqKi8gCisKKy8qKipNQyBMYXRlbmN5IFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0xBVEVOQ1kgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NEUkFNKyAweDEwMzgpKQogI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0xBVEVOQ1lfVFJQICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKICNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19MQVRFTkNZX1RSQVMgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCkBAIC0xMDU5LDI3ICsxMDU5LDI3IEBACiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTEFURU5DWV9URFBMICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTEFURU5DWV9UREFMICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTEFURU5DWV9SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTIpIC0gMSkgJiAodmFsdWUpKSA8PCAyMCkKLSAgICAgIAotLyoqKk1DIFJlZnJlc2ggQ3ljbGUgVGltZSBSZWdpc3RlcioqKi8gCisKKy8qKipNQyBSZWZyZXNoIEN5Y2xlIFRpbWUgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfVFJFRlJFU0ggICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MTA0MCkpCiAjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfVFJFRlJFU0hfVFJFRiAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDEzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19UUkVGUkVTSF9SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTkpIC0gMSkgJiAodmFsdWUpKSA8PCAxMykJCQotICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfVFJFRlJFU0hfUmVzICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDE5KSAtIDEpICYgKHZhbHVlKSkgPDwgMTMpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICBNb2R1bGUgICAgICA6ICBHUFRVIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgIAotI2RlZmluZSBJTkNBX0lQX0dQVFUgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDAzMDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCiAKLSAgICAgIAotLyoqKkdQVCBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9HUFRVICAgICAgICAgICAgICAgICAgICAgICAgICgweEI4MDAwMzAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKipHUFQgQ2xvY2sgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9DTEMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfQ0xDX1JNQyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9DTENfRElTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX0NMQ19ESVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipHUFQgVGltZXIgMyBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkdQVCBUaW1lciAzIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDNDT04gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMTQpKQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QzQ09OX1QzUkRJUiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QzQ09OX1QzQ0hESVIgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCkBAIC0xMDkwLDggKzEwOTAsOCBAQAogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QzQ09OX1QzUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDNDT05fVDNNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAzKQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QzQ09OX1QzSSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkdQVCBXcml0ZSBIYXJkd2FyZSBNb2RpZmllZCBUaW1lciAzIENvbnRyb2wgUmVnaXN0ZXIgCisKKy8qKipHUFQgV3JpdGUgSGFyZHdhcmUgTW9kaWZpZWQgVGltZXIgMyBDb250cm9sIFJlZ2lzdGVyCiBJZiBzZXQgYW5kIGNsZWFyIGJpdCBhcmUgd3JpdHRlbiBjb25jdXJyZW50bHkgd2l0aCAxLCB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgbm90IGNoYW5nZWQuKioqLwogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQzQ09OICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDRDKSkKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUM0NPTl9TRVRUM0NIRElSICAgICAgICAgICAgICAgICgxIDw8IDE1KQpAQCAtMTEwMCw4ICsxMTAwLDggQEAKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUM0NPTl9DTFJUM0VER0UgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUM0NPTl9TRVRUM09UTCAgICAgICAgICAgICAgICAgICgxIDw8IDExKQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQzQ09OX0NMUlQzT1RMICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCi0gICAgICAKLS8qKipHUFQgVGltZXIgMiBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkdQVCBUaW1lciAyIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT04gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMTApKQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyQ09OX1R4UkRJUiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyQ09OX1R4Q0hESVIgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCkBAIC0xMTEyLDggKzExMTIsOCBAQAogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyQ09OX1R4UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT05fVHhNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAzKQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyQ09OX1R4SSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkdQVCBUaW1lciA0IENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqR1BUIFRpbWVyIDQgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNENPTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAxOCkpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhSRElSICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhDSERJUiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKQEAgLTExMjQsNyArMTEyNCw3IEBACiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNENPTl9UeE0gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDMpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCisKIC8qKipHUFQgV3JpdGUgSFcgTW9kaWZpZWQgVGltZXIgMiBDb250cm9sIFJlZ2lzdGVyIElmIHNldAogIGFuZCBjbGVhciBiaXQgYXJlIHdyaXR0ZW4gY29uY3VycmVudGx5IHdpdGggMSwgdGhlIGFzc29jaWF0ZWQgYml0IGlzIG5vdCBjaGFuZ2VkLioqKi8KICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUMkNPTiAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDA0OCkpCkBAIC0xMTMyLDcgKzExMzIsNyBAQAogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQyQ09OX0NMUlR4Q0hESVIgICAgICAgICAgICAgICAgKDEgPDwgMTQpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDJDT05fU0VUVHhFREdFICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDJDT05fQ0xSVHhFREdFICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCi0gICAgICAKKwogLyoqKkdQVCBXcml0ZSBIVyBNb2RpZmllZCBUaW1lciA0IENvbnRyb2wgUmVnaXN0ZXIgSWYgc2V0CiAgYW5kIGNsZWFyIGJpdCBhcmUgd3JpdHRlbiBjb25jdXJyZW50bHkgd2l0aCAxLCB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgbm90IGNoYW5nZWQuKioqLwogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ0Q09OICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDUwKSkKQEAgLTExNDAsMzIgKzExNDAsMzIgQEAKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUNENPTl9DTFJUeENIRElSICAgICAgICAgICAgICAgICgxIDw8IDE0KQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ0Q09OX1NFVFR4RURHRSAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ0Q09OX0NMUlR4RURHRSAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQotICAgICAgCi0vKioqR1BUIENhcHR1cmUgUmVsb2FkIFJlZ2lzdGVyKioqLyAKKworLyoqKkdQVCBDYXB0dXJlIFJlbG9hZCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9DQVBSRUwgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAzMCkpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfQ0FQUkVMX0NBUFJFTCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipHUFQgVGltZXIgMiBSZWdpc3RlcioqKi8gCisKKy8qKipHUFQgVGltZXIgMiBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UMiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAzNCkpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJfVFZBTCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkdQVCBUaW1lciAzIFJlZ2lzdGVyKioqLyAKKworLyoqKkdQVCBUaW1lciAzIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QzICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDM4KSkKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM19UVkFMICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqR1BUIFRpbWVyIDQgUmVnaXN0ZXIqKiovIAorCisvKioqR1BUIFRpbWVyIDQgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDQgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwM0MpKQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q0X1RWQUwgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipHUFQgVGltZXIgNSBSZWdpc3RlcioqKi8gCisKKy8qKipHUFQgVGltZXIgNSBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNSAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDA0MCkpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVfVFZBTCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkdQVCBUaW1lciA2IFJlZ2lzdGVyKioqLyAKKworLyoqKkdQVCBUaW1lciA2IFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2ICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDQ0KSkKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNl9UVkFMICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqR1BUIFRpbWVyIDYgQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipHUFQgVGltZXIgNiBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2Q09OICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDIwKSkKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNkNPTl9UNlNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2Q09OX1Q2Q0xSICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKQEAgLTExNzUsMTQgKzExNzUsMTQgQEAKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNkNPTl9UNlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2Q09OX1Q2TSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMykKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNkNPTl9UNkkgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKKwogLyoqKkdQVCBXcml0ZSBIVyBNb2RpZmllZCBUaW1lciA2IENvbnRyb2wgUmVnaXN0ZXIgSWYgc2V0CiAgYW5kIGNsZWFyIGJpdCBhcmUgd3JpdHRlbiBjb25jdXJyZW50bHkgd2l0aCAxLCB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgbm90IGNoYW5nZWQuKioqLwogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ2Q09OICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDU0KSkKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUNkNPTl9TRVRUNk9UTCAgICAgICAgICAgICAgICAgICgxIDw8IDExKQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ2Q09OX0NMUlQ2T1RMICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCi0gICAgICAKLS8qKipHUFQgVGltZXIgNSBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkdQVCBUaW1lciA1IENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVDT04gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMUMpKQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX1Q1U0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVDT05fVDVDTFIgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQpAQCAtMTE5NCwyNSArMTE5NCwyNSBAQAogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX1Q1VUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNUNPTl9UNVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQogI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX1Q1TSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNUNPTl9UNUkgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKLSAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX1Q1SSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIE1vZHVsZSAgICAgIDogIElPTSByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgCi0jZGVmaW5lIElOQ0FfSVBfSU9NICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjEwNTAwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKIAotICAgICAgCi0vKioqUmVjZWl2ZSBGSUZPKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT00gICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA1MDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKipSZWNlaXZlIEZJRk8qKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1JGSUZPICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fUkZJRk9fUlhEICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqVHJhbnNtaXQgRklGTyoqKi8gCisKKy8qKipUcmFuc21pdCBGSUZPKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9YRklGTyAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1hGSUZPX1RYRCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgSERMQyoqKi8gCisKKy8qKipJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIEhETEMqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDgwKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fSVNUQUhfUk1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9JT01fSVNUQUhfUlBGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKQEAgLTEyMjAsOCArMTIyMCw4IEBACiAjZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIX1hQUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIX1hNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIX1hEVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCi0gICAgICAKLS8qKipJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciBIRExDKioqLyAKKworLyoqKkludGVycnVwdCBNYXNrIFJlZ2lzdGVyIEhETEMqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX01BU0tIICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDgwKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfUk1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfUlBGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKQEAgLTEyMjksMjMgKzEyMjksMjMgQEAKICNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfWFBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfWE1SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKICNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0hfWERVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKLSAgICAgIAotLyoqKlN0YXR1cyBSZWdpc3RlcioqKi8gCisKKy8qKipTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NUQVIgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDg0KSkKICNkZWZpbmUgSU5DQV9JUF9JT01fU1RBUl9YRE9WICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NUQVJfWEZXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKICNkZWZpbmUgSU5DQV9JUF9JT01fU1RBUl9SQUNJICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NUQVJfWEFDSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotICAgICAgCi0vKioqQ29tbWFuZCBSZWdpc3RlcioqKi8gCisKKy8qKipDb21tYW5kIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9DTURSICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDA4NCkpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NNRFJfUk1DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9JT01fQ01EUl9SUkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NNRFJfWFRGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKICNkZWZpbmUgSU5DQV9JUF9JT01fQ01EUl9YTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX0lPTV9DTURSX1hSRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKk1vZGUgUmVnaXN0ZXIqKiovIAorCisvKioqTW9kZSBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9JT01fTU9ERUggICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwODgpKQogI2RlZmluZSBJTkNBX0lQX0lPTV9NT0RFSF9NRFMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX01PREVIX01EUzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKQEAgLTEyNTQsOCArMTI1NCw4IEBACiAjZGVmaW5lIElOQ0FfSVBfSU9NX01PREVIX0RJTTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9JT01fTU9ERUhfRElNMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX0lPTV9NT0RFSF9ESU0wICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyKioqLyAKKworLyoqKkV4dGVuZGVkIE1vZGUgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0VYTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDhDKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fRVhNUl9YRkJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0VYTVJfUkZCUyAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA1KQpAQCAtMTI2MywzNiArMTI2MywzNiBAQAogI2RlZmluZSBJTkNBX0lQX0lPTV9FWE1SX1hDUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKICNkZWZpbmUgSU5DQV9JUF9JT01fRVhNUl9SQ1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0VYTVJfSVRGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKlNBUEkxIFJlZ2lzdGVyKioqLyAKKworLyoqKlNBUEkxIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9TQVAxICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDA5NCkpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NBUDFfU0FQSTEgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0lPTV9TQVAxX01IQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipSZWNlaXZlIEZyYW1lIEJ5dGUgQ291bnQgTG93KioqLyAKKworLyoqKlJlY2VpdmUgRnJhbWUgQnl0ZSBDb3VudCBMb3cqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1JCQ0wgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDk4KSkKICNkZWZpbmUgSU5DQV9JUF9JT01fUkJDTF9SQkModmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKlNBUEkyIFJlZ2lzdGVyKioqLyAKKworCisvKioqU0FQSTIgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NBUDIgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDk4KSkKICNkZWZpbmUgSU5DQV9JUF9JT01fU0FQMl9TQVBJMiAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NBUDJfTUxBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKlJlY2VpdmUgRnJhbWUgQnl0ZSBDb3VudCBIaWdoKioqLyAKKworLyoqKlJlY2VpdmUgRnJhbWUgQnl0ZSBDb3VudCBIaWdoKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9SQkNIICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDA5QykpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1JCQ0hfT1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQogI2RlZmluZSBJTkNBX0lQX0lPTV9SQkNIX1JCQzExICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBJTkNBX0lQX0lPTV9SQkNIX1JCQzEwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0lPTV9SQkNIX1JCQzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9JT01fUkJDSF9SQkM4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipURUkxIFJlZ2lzdGVyIDEqKiovIAorCisvKioqVEVJMSBSZWdpc3RlciAxKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9URUkxICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDA5QykpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1RFSTFfVEVJMSAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDcpIC0gMSkgJiAodmFsdWUpKSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX0lPTV9URUkxX0VBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKlJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKworLyoqKlJlY2VpdmUgU3RhdHVzIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9SU1RBICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDBBMCkpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1JTVEFfVkZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9JT01fUlNUQV9SRE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQpAQCAtMTMwMiw5OSArMTMwMiw5OSBAQAogI2RlZmluZSBJTkNBX0lQX0lPTV9SU1RBX1NBMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1JTVEFfVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQogI2RlZmluZSBJTkNBX0lQX0lPTV9SU1RBX0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKLSAgICAgIAotLyoqKlRFSTIgUmVnaXN0ZXIqKiovIAorCisvKioqVEVJMiBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9JT01fVEVJMiAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwQTApKQogI2RlZmluZSBJTkNBX0lQX0lPTV9URUkyX1RFSTIgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA3KSAtIDEpICYgKHZhbHVlKSkgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9JT01fVEVJMl9FQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipUZXN0IE1vZGUgUmVnaXN0ZXIgSERMQyoqKi8gCisKKy8qKipUZXN0IE1vZGUgUmVnaXN0ZXIgSERMQyoqKi8KICNkZWZpbmUgSU5DQV9JUF9JT01fVE1IICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwQTQpKQogI2RlZmluZSBJTkNBX0lQX0lPTV9UTUhfVExQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKkNvbW1hbmQvSW5kaWNhdGlvbiBSZWNlaXZlIDAqKiovIAorCisvKioqQ29tbWFuZC9JbmRpY2F0aW9uIFJlY2VpdmUgMCoqKi8KICNkZWZpbmUgSU5DQV9JUF9JT01fQ0lSMCAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwQjgpKQogI2RlZmluZSBJTkNBX0lQX0lPTV9DSVIwX0NPRFIwICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0lSMF9DSUMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NJUjBfQ0lDMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0lPTV9DSVIwX1NHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0lSMF9CQVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqQ29tbWFuZC9JbmRpY2F0aW9uIFRyYW5zbWl0IDAqKiovIAorCisvKioqQ29tbWFuZC9JbmRpY2F0aW9uIFRyYW5zbWl0IDAqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMEI4KSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0lYMF9DT0RYMCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDBfVEJBMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBJTkNBX0lQX0lPTV9DSVgwX1RCQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0lYMF9UQkEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDBfQkFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKkNvbW1hbmQvSW5kaWNhdGlvbiBSZWNlaXZlIDEqKiovIAorCisvKioqQ29tbWFuZC9JbmRpY2F0aW9uIFJlY2VpdmUgMSoqKi8KICNkZWZpbmUgSU5DQV9JUF9JT01fQ0lSMSAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwQkMpKQogI2RlZmluZSBJTkNBX0lQX0lPTV9DSVIxX0NPRFIxICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgMikKLSAgICAgIAotLyoqKkNvbW1hbmQvSW5kaWNhdGlvbiBUcmFuc21pdCAxKioqLyAKKworLyoqKkNvbW1hbmQvSW5kaWNhdGlvbiBUcmFuc21pdCAxKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9DSVgxICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDBCQykpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDFfQ09EWDEgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0lPTV9DSVgxX0NJQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0lYMV9DSTFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipDb250cm9sbGVyIERhdGEgQWNjZXNzIFJlZy4gKENIMTApKioqLyAKKworLyoqKkNvbnRyb2xsZXIgRGF0YSBBY2Nlc3MgUmVnLiAoQ0gxMCkqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTEwICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTAwKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMTBfQ0RBICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqQ29udHJvbGxlciBEYXRhIEFjY2VzcyBSZWcuIChDSDExKSoqKi8gCisKKy8qKipDb250cm9sbGVyIERhdGEgQWNjZXNzIFJlZy4gKENIMTEpKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9DREExMSAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDEwNCkpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTExX0NEQSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkNvbnRyb2xsZXIgRGF0YSBBY2Nlc3MgUmVnLiAoQ0gyMCkqKiovIAorCisvKioqQ29udHJvbGxlciBEYXRhIEFjY2VzcyBSZWcuIChDSDIwKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMjAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMDgpKQogI2RlZmluZSBJTkNBX0lQX0lPTV9DREEyMF9DREEgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipDb250cm9sbGVyIERhdGEgQWNjZXNzIFJlZy4gKENIMjEpKioqLyAKKworLyoqKkNvbnRyb2xsZXIgRGF0YSBBY2Nlc3MgUmVnLiAoQ0gyMSkqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTIxICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTBDKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMjFfQ0RBICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqVGltZSBTbG90IGFuZCBEYXRhIFBvcnQgU2VsLiAoQ0gxMCkqKiovIAorCisvKioqVGltZSBTbG90IGFuZCBEYXRhIFBvcnQgU2VsLiAoQ0gxMCkqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMTAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTEwKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAxMF9EUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQogI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDEwX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMTEpKioqLyAKKworLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMTEpKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDExICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDExNCkpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMTFfRFBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAxMV9UU1MgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipUaW1lIFNsb3QgYW5kIERhdGEgUG9ydCBTZWwuIChDSDIwKSoqKi8gCisKKy8qKipUaW1lIFNsb3QgYW5kIERhdGEgUG9ydCBTZWwuIChDSDIwKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAyMCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMTgpKQogI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDIwX0RQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMjBfVFNTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqVGltZSBTbG90IGFuZCBEYXRhIFBvcnQgU2VsLiAoQ0gyMSkqKiovIAorCisvKioqVGltZSBTbG90IGFuZCBEYXRhIFBvcnQgU2VsLiAoQ0gyMSkqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMjEgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTFDKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAyMV9EUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQogI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDIxX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMTApKioqLyAKKworLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMTApKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMTAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDEyMCkpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NPX1RTRFAxMF9EUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQogI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMTBfVFNTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqVGltZSBTbG90IGFuZCBEYXRhIFBvcnQgU2VsLiAoQ0gxMSkqKiovIAorCisvKioqVGltZSBTbG90IGFuZCBEYXRhIFBvcnQgU2VsLiAoQ0gxMSkqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NPX1RTRFAxMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTI0KSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDExX0RQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NPX1RTRFAxMV9UU1MgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipUaW1lIFNsb3QgYW5kIERhdGEgUG9ydCBTZWwuIChDSDIwKSoqKi8gCisKKy8qKipUaW1lIFNsb3QgYW5kIERhdGEgUG9ydCBTZWwuIChDSDIwKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDIwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMjgpKQogI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMjBfRFBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDIwX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMjEpKioqLyAKKworLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMjEpKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMjEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDEyQykpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NPX1RTRFAyMV9EUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQogI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMjFfVFNTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqQ3RybC4gUmVnLiBDb250ci4gRGF0YSBBY2Nlc3MgQ0gxeCoqKi8gCisKKy8qKipDdHJsLiBSZWcuIENvbnRyLiBEYXRhIEFjY2VzcyBDSDF4KioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9DREExX0NSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDEzOCkpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTFfQ1JfRU5fVEJNICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMV9DUl9FTl9JMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKQEAgLTE0MDIsOCArMTQwMiw4IEBACiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTFfQ1JfRU5fTzEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTFfQ1JfRU5fTzAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTFfQ1JfU1dBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqQ3RybC4gUmVnLiBDb250ci4gRGF0YSBBY2Nlc3MgQ0gxeCoqKi8gCisKKy8qKipDdHJsLiBSZWcuIENvbnRyLiBEYXRhIEFjY2VzcyBDSDF4KioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9DREEyX0NSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDEzQykpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfRU5fVEJNICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMl9DUl9FTl9JMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKQEAgLTE0MTEsMzcgKzE0MTEsMzcgQEAKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMl9DUl9FTl9PMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMl9DUl9FTl9PMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMl9DUl9TV0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipDb250cm9sIFJlZ2lzdGVyIEItQ2hhbm5lbCBEYXRhKioqLyAKKworLyoqKkNvbnRyb2wgUmVnaXN0ZXIgQi1DaGFubmVsIERhdGEqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0JDSEFfQ1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTQ0KSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQkNIQV9DUl9FTl9CQzIgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQogI2RlZmluZSBJTkNBX0lQX0lPTV9CQ0hBX0NSX0VOX0JDMSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0gICAgICAKLS8qKipDb250cm9sIFJlZ2lzdGVyIEItQ2hhbm5lbCBEYXRhKioqLyAKKworLyoqKkNvbnRyb2wgUmVnaXN0ZXIgQi1DaGFubmVsIERhdGEqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0JDSEJfQ1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTQ4KSkKICNkZWZpbmUgSU5DQV9JUF9JT01fQkNIQl9DUl9FTl9CQzIgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQogI2RlZmluZSBJTkNBX0lQX0lPTV9CQ0hCX0NSX0VOX0JDMSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCi0gICAgICAKLS8qKipDb250cm9sIFJlZy4gZm9yIEhETEMgYW5kIENJMSBEYXRhKioqLyAKKworLyoqKkNvbnRyb2wgUmVnLiBmb3IgSERMQyBhbmQgQ0kxIERhdGEqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0RDSV9DUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTRDKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fRENJX0NSX0RQU19DSTEgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9JT01fRENJX0NSX0VOX0NJMSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0RDSV9DUl9FTl9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCi0gICAgICAKLS8qKipDb250cm9sIFJlZy4gZm9yIEhETEMgYW5kIENJMSBEYXRhKioqLyAKKworLyoqKkNvbnRyb2wgUmVnLiBmb3IgSERMQyBhbmQgQ0kxIERhdGEqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0RDSUNfQ1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTRDKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fRENJQ19DUl9EUFNfQ0kwICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0RDSUNfQ1JfRU5fQ0kwICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKICNkZWZpbmUgSU5DQV9JUF9JT01fRENJQ19DUl9EUFNfRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKLSAgICAgIAotLyoqKkNvbnRyb2wgUmVnLiBTZXJpYWwgRGF0YSBTdHJvYmUgeCoqKi8gCisKKy8qKipDb250cm9sIFJlZy4gU2VyaWFsIERhdGEgU3Ryb2JlIHgqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NEU19DUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTU0KSkKICNkZWZpbmUgSU5DQV9JUF9JT01fU0RTX0NSX0VOU19UU1MgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9JT01fU0RTX0NSX0VOU19UU1NfMSAgICAgICAgICAgICAgICAgICgxIDw8IDYpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NEU19DUl9FTlNfVFNTXzMgICAgICAgICAgICAgICAgICAoMSA8PCA1KQogI2RlZmluZSBJTkNBX0lQX0lPTV9TRFNfQ1JfVFNTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqQ29udHJvbCBSZWdpc3RlciBJT00gRGF0YSoqKi8gCisKKy8qKipDb250cm9sIFJlZ2lzdGVyIElPTSBEYXRhKioqLwogI2RlZmluZSBJTkNBX0lQX0lPTV9JT01fQ1IgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDE1QykpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX0lPTV9DUl9TUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQogI2RlZmluZSBJTkNBX0lQX0lPTV9JT01fQ1JfQ0lfQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCkBAIC0xNDUwLDggKzE0NTAsOCBAQAogI2RlZmluZSBJTkNBX0lQX0lPTV9JT01fQ1JfQ0xLTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0lPTV9JT01fQ1JfUmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9JT01fSU9NX0NSX0RJU19JT00gICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKlN5bmNocm9ub3VzIFRyYW5zZmVyIEludGVycnVwdCoqKi8gCisKKy8qKipTeW5jaHJvbm91cyBUcmFuc2ZlciBJbnRlcnJ1cHQqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NUSSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTYwKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fU1RJX1NUT1YyMSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NUSV9TVE9WMjAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQpAQCAtMTQ2MSwxNSArMTQ2MSwxNSBAQAogI2RlZmluZSBJTkNBX0lQX0lPTV9TVElfU1RJMjAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NUSV9TVEkxMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9JT01fU1RJX1NUSTEwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqQWNrbm93bGVkZ2UgU3luY2hyb25vdXMgVHJhbnNmZXIgSW50ZXJydXB0KioqLyAKKworLyoqKkFja25vd2xlZGdlIFN5bmNocm9ub3VzIFRyYW5zZmVyIEludGVycnVwdCoqKi8KICNkZWZpbmUgSU5DQV9JUF9JT01fQVNUSSAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxNjApKQogI2RlZmluZSBJTkNBX0lQX0lPTV9BU1RJX0FDSzIxICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBJTkNBX0lQX0lPTV9BU1RJX0FDSzIwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0lPTV9BU1RJX0FDSzExICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX0lPTV9BU1RJX0FDSzEwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqTWFzayBTeW5jaHJvbm91cyBUcmFuc2ZlciBJbnRlcnJ1cHQqKiovIAorCisvKioqTWFzayBTeW5jaHJvbm91cyBUcmFuc2ZlciBJbnRlcnJ1cHQqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX01TVEkgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTY0KSkKICNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVE9WMjEgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQogI2RlZmluZSBJTkNBX0lQX0lPTV9NU1RJX1NUT1YyMCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCkBAIC0xNDc5LDM2ICsxNDc5LDM2IEBACiAjZGVmaW5lIElOQ0FfSVBfSU9NX01TVElfU1RJMjAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX01TVElfU1RJMTEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX01TVElfU1RJMTAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGZvciBTZXJpYWwgRGF0YSBTdHJvYmVzKioqLyAKKworLyoqKkNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgZm9yIFNlcmlhbCBEYXRhIFN0cm9iZXMqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX1NEU19DT05GICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxNjgpKQogI2RlZmluZSBJTkNBX0lQX0lPTV9TRFNfQ09ORl9TRFNfQkNMICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipNb25pdG9yaW5nIENEQSBCaXRzKioqLyAKKworLyoqKk1vbml0b3JpbmcgQ0RBIEJpdHMqKiovCiAjZGVmaW5lIElOQ0FfSVBfSU9NX01DREEgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTZDKSkKICNkZWZpbmUgSU5DQV9JUF9JT01fTUNEQV9NQ0RBMjEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCiAjZGVmaW5lIElOQ0FfSVBfSU9NX01DREFfTUNEQTIwICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQogI2RlZmluZSBJTkNBX0lQX0lPTV9NQ0RBX01DREExMSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKLSNkZWZpbmUgSU5DQV9JUF9JT01fTUNEQV9NQ0RBMTAgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKLSAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX0lPTV9NQ0RBX01DREExMCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIE1vZHVsZSAgICAgIDogIEFTQyByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgCisKICNpZiBkZWZpbmVkKENPTkZJR19JTkNBX0lQKQogI2RlZmluZSBJTkNBX0lQX0FTQyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDA0MDApCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QVVJQTEUpCiAjZGVmaW5lIElOQ0FfSVBfQVNDICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRTUwMDAwMCkKICNlbmRpZgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSAgICAgIAotLyoqKkFTQyBQb3J0IElucHV0IFNlbGVjdCBSZWdpc3RlcioqKi8gCisKKy8qKipBU0MgUG9ydCBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19QSVNFTCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDA0KSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1BJU0VMX1JJUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipBU0MgQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipBU0MgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMTApKQogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTl9MQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQpAQCAtMTUyNCw4ICsxNTI0LDggQEAKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTl9SRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX1NUUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DT05fTSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkFTQyBXcml0ZSBIYXJkd2FyZSBNb2RpZmllZCBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkFTQyBXcml0ZSBIYXJkd2FyZSBNb2RpZmllZCBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDA1MCkpCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJDT05fU0VUT0UgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQ09OX1NFVEZFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKQEAgLTE1MzUsMjkgKzE1MzUsMjkgQEAKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkNPTl9DTFJQRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkNPTl9TRVRSRU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQ09OX0NMUlJFTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0gICAgICAKLS8qKipBU0MgQmF1ZHJhdGUgVGltZXIvUmVsb2FkIFJlZ2lzdGVyKioqLyAKKworLyoqKkFTQyBCYXVkcmF0ZSBUaW1lci9SZWxvYWQgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19CVFIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDE0KSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0JUUl9CUl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipBU0MgRnJhY3Rpb25hbCBEaXZpZGVyIFJlZ2lzdGVyKioqLyAKKworLyoqKkFTQyBGcmFjdGlvbmFsIERpdmlkZXIgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19GRFYgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDE4KSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0ZEVl9GRF9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCA5KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkFTQyBJckRBIFB1bHNlIE1vZGUvV2lkdGggUmVnaXN0ZXIqKiovIAorCisvKioqQVNDIElyREEgUHVsc2UgTW9kZS9XaWR0aCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1BNVyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMUMpKQogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfUE1XX0lSUFcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1BNV19QV19WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkFTQyBUcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIqKiovIAorCisvKioqQVNDIFRyYW5zbWl0IEJ1ZmZlciBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1RCVUYgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDAyMCkpCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19UQlVGX1REX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDkpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqQVNDIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyKioqLyAKKworLyoqKkFTQyBSZWNlaXZlIEJ1ZmZlciBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1JCVUYgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDAyNCkpCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19SQlVGX1JEX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDkpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqQVNDIEF1dG9iYXVkIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqQVNDIEF1dG9iYXVkIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDMwKSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX1JYSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX1RYSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKQEAgLTE1NjcsNDAgKzE1NjcsNDAgQEAKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX0FCU1RFTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTl9BVVJFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCQ09OX0FCRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKlJlY2VpdmUgRklGTyBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKlJlY2VpdmUgRklGTyBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FTQ19SWEZDT04gICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDA0MCkpCiAjZGVmaW5lIElOQ0FfSVBfQVNDX1JYRkNPTl9SWEZJVEwgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCiAjZGVmaW5lIElOQ0FfSVBfQVNDX1JYRkNPTl9SWFRNRU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0FTQ19SWEZDT05fUlhGRkxVICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfUlhGQ09OX1JYRkVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqVHJhbnNtaXQgRklGTyBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKlRyYW5zbWl0IEZJRk8gQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BU0NfVFhGQ09OICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwNDQpKQogI2RlZmluZSBJTkNBX0lQX0FTQ19UWEZDT05fVFhGSVRMICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX0FTQ19UWEZDT05fVFhUTUVOICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9BU0NfVFhGQ09OX1RYRkZMVSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfQVNDX1RYRkNPTl9UWEZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKkZJRk8gU3RhdHVzIFJlZ2lzdGVyKioqLyAKKworLyoqKkZJRk8gU3RhdHVzIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FTQ19GU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDA0OCkpCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0ZTVEFUX1RYRkZMICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9BU0NfRlNUQVRfUlhGRkwgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqQVNDIFdyaXRlIEhXIE1vZGlmaWVkIEF1dG9iYXVkIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqQVNDIFdyaXRlIEhXIE1vZGlmaWVkIEF1dG9iYXVkIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQkNPTiAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDU0KSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCQ09OX1NFVEFCRU4gICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCQ09OX0NMUkFCRU4gICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKkFTQyBBdXRvYmF1ZCBTdGF0dXMgUmVnaXN0ZXIqKiovIAorCisvKioqQVNDIEF1dG9iYXVkIFN0YXR1cyBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCU1RBVCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMzQpKQogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQUJTVEFUX0RFVFdBSVQgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCU1RBVF9TQ0NERVQgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQUJTVEFUX1NDU0RFVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQlNUQVRfRkNDREVUICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCU1RBVF9GQ1NERVQgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqQVNDIFdyaXRlIEhXIE1vZGlmaWVkIEF1dG9iYXVkIFN0YXR1cyBSZWdpc3RlcioqKi8gCisKKy8qKipBU0MgV3JpdGUgSFcgTW9kaWZpZWQgQXV0b2JhdWQgU3RhdHVzIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJTVEFUICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwNTgpKQogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJTVEFUX1NFVERFVFdBSVQgICAgICAgICAgICAgICAgKDEgPDwgOSkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCU1RBVF9DTFJERVRXQUlUICAgICAgICAgICAgICAgICgxIDw8IDgpCkBAIC0xNjEyLDg2ICsxNjEyLDg2IEBACiAjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQlNUQVRfQ0xSRkNDREVUICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCU1RBVF9TRVRGQ1NERVQgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJTVEFUX0NMUkZDU0RFVCAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipBU0MgQ2xvY2sgQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipBU0MgQ2xvY2sgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NMQyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ0xDX1JNQyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NMQ19ESVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DTENfRElTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQkJCi0gICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NMQ19ESVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICBNb2R1bGUgICAgICA6ICBETUEgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgIAotI2RlZmluZSBJTkNBX0lQX0RNQSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QkYxMDgwMDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCiAKLSAgICAgIAotLyoqKkRNQSBSWCBDaGFubmVsIDAgQ29tbWFuZCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfRE1BICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjEwODAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqRE1BIFJYIENoYW5uZWwgMCBDb21tYW5kIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhDQ1IwICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgwMCkpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjBfTEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjBfSFBFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMF9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjBfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMF9IUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipETUEgUlggQ2hhbm5lbCAxIENvbW1hbmQgUmVnaXN0ZXIqKiovIAorCisvKioqRE1BIFJYIENoYW5uZWwgMSBDb21tYW5kIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhDQ1IxICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgwNCkpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjFfTEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjFfSFBFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMV9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjFfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMV9IUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipETUEgUmVjZWl2ZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKworLyoqKkRNQSBSZWNlaXZlIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElTUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwODA4KSkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYSVNSX1JERVJSeCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYSVNSX0NNRENQVHggKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYSVNSX0VPUHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYSVNSX0NQVHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYSVNSX0hMRHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkRNQSBSZWNlaXZlIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyKioqLyAKKworLyoqKkRNQSBSZWNlaXZlIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJTVIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgwQykpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElNUl9SREVSUnggKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElNUl9DTURDUFR4ICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElNUl9FT1B4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElNUl9DUFR4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElNUl9ITER4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKKwogLyoqKkRNQSBGaXJzdCBSZWNlaXZlIERlc2NyaXB0b3IgQWRkci4gZm9yIFJ4IENoYW5uZWwgMAogKioqLwogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhGUkRBMCAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgxMCkpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWEZSREEwX1JYRlJEQSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKKwogLyoqKkRNQSBGaXJzdCBSZWNlaXZlIERlc2NyaXB0b3IgQWRkci4gZm9yIFJ4IENoYW5uZWwgMQogKioqLwogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhGUkRBMSAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgxNCkpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWEZSREExX1JYRlJEQSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipETUEgUmVjZWl2ZSBDaGFubmVsIFBvbGxpbmcgVGltZSoqKi8gCisKKy8qKipETUEgUmVjZWl2ZSBDaGFubmVsIFBvbGxpbmcgVGltZSoqKi8KICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYUE9MTCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4MTgpKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhQT0xMX0JTWjEgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMzApCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWFBPTExfQlNaMCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyOCkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYUE9MTF9SWFBPTExUSU1FICh2YWx1ZSkgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipETUEgVFggQ2hhbm5lbCAwIENvbW1hbmQgUmVnaXN0ZXIgKFZvaWNlIFBvcnQpKioqLyAKKworLyoqKkRNQSBUWCBDaGFubmVsIDAgQ29tbWFuZCBSZWdpc3RlciAoVm9pY2UgUG9ydCkqKiovCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwODgwKSkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMF9MQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMF9IUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IwX0hSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMF9PRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IwX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKkRNQSBUWCBDaGFubmVsIDEgQ29tbWFuZCBSZWdpc3RlciAoTWFuZ210IFBvcnQpKioqLyAKKworLyoqKkRNQSBUWCBDaGFubmVsIDEgQ29tbWFuZCBSZWdpc3RlciAoTWFuZ210IFBvcnQpKioqLwogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IxICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDg4NCkpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjFfTEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjFfSFBFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMV9IUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjFfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMV9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0gICAgICAKLS8qKipETUEgVFggQ2hhbm5lbCAyIENvbW1hbmQgUmVnaXN0ZXIgKFNTQyBQb3J0KSoqKi8gCisKKy8qKipETUEgVFggQ2hhbm5lbCAyIENvbW1hbmQgUmVnaXN0ZXIgKFNTQyBQb3J0KSoqKi8KICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMiAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4ODgpKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IyX0xCRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IyX0hQRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCkBAIC0xNjk5LDYwICsxNjk5LDYwIEBACiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjJfSFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IyX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjJfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCisKIC8qKipETUEgRmlyc3QgUmVjZWl2ZSBEZXNjcmlwdG9yIEFkZHIuIGZvciBUeCBDaGFubmVsIDAKICoqKi8KICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYRlJEQTAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4QTApKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhGUkRBMF9UWEZSREEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMjgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCisKIC8qKipETUEgRmlyc3QgUmVjZWl2ZSBEZXNjcmlwdG9yIEFkZHIuIGZvciBUeCBDaGFubmVsIDEKICoqKi8KICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYRlJEQTEgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4QTQpKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhGUkRBMV9UWEZSREEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMjgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCisKIC8qKipETUEgRmlyc3QgUmVjZWl2ZSBEZXNjcmlwdG9yIEFkZHIuIGZvciBUeCBDaGFubmVsIDIKICoqKi8KICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYRlJEQTIgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4QTgpKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhGUkRBMl9UWEZSREEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMjgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqRE1BIFRyYW5zbWl0IENoYW5uZWwgQXJiaXRyYXRpb24gUmVnaXN0ZXIqKiovIAorCisvKioqRE1BIFRyYW5zbWl0IENoYW5uZWwgQXJiaXRyYXRpb24gUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWFdHVCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwOEMwKSkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYV0dUX1RYMlBSICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYV0dUX1RYMVBSSSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYV0dUX1RYMFBSSSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkRNQSBUcmFuc21pdCBDaGFubmVsIFBvbGxpbmcgVGltZSoqKi8gCisKKy8qKipETUEgVHJhbnNtaXQgQ2hhbm5lbCBQb2xsaW5nIFRpbWUqKiovCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWFBPTEwgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwOEM0KSkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYUE9MTF9CU1oyICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDMwKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhQT0xMX0JTWjEgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjgpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWFBPTExfQlNaMCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyNikKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYUE9MTF9UWFBPTExUSU1FICh2YWx1ZSkgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipETUEgVHJhbnNtaXQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcioqKi8gCisKKy8qKipETUEgVHJhbnNtaXQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4QzgpKQogI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhJU1JfUkRFUlJ4ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0hMRHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0NQVHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0VPUHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMykKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0NNRENQVHggKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkRNQSBUcmFuc21pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcioqKi8gCisKKy8qKipETUEgVHJhbnNtaXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWElNUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwOENDKSkKICNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSU1SX1JERVJSeCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWElNUl9ITER4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDkpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWElNUl9DUFR4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCiAjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWElNUl9FT1B4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDMpCi0jZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWElNUl9DTURDUFR4ICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKLSAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhJTVJfQ01EQ1BUeCAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgTW9kdWxlICAgICAgOiAgRGVidWcgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAKLSNkZWZpbmUgSU5DQV9JUF9EZWJ1ZyAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA2MDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAogCi0gICAgICAKLS8qKipNQ0QgQnJlYWsgQnVzIFN3aXRjaCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfRGVidWcgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjEwNjAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqTUNEIEJyZWFrIEJ1cyBTd2l0Y2ggUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX0JCUyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRGVidWcrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX0JCU19CVFAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE5KQogI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlRQMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxOCkKQEAgLTE3NjYsNDggKzE3NjYsNDggQEAKICNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfQkJTX0JTNEVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQogI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlM1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKICNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfQkJTX0JTNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0gICAgICAKLS8qKipNQ0QgTXVsdGlwbGV4ZXIgQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipNQ0QgTXVsdGlwbGV4ZXIgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfTUNSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9EZWJ1ZysgMHgwMDA4KSkKICNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfTUNSX01VWDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKICNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfTUNSX01VWDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfTUNSX01VWDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkJCQotICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX01DUl9NVVgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICBNb2R1bGUgICAgICA6ICBUU0YgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgIAotI2RlZmluZSBJTkNBX0lQX1RTRiAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDA5MDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCiAKLSAgICAgIAotLyoqKlRTRiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICgwMDAwSCkqKiovIAorI2RlZmluZSBJTkNBX0lQX1RTRiAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDA5MDApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKlRTRiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICgwMDAwSCkqKiovCiAjZGVmaW5lIElOQ0FfSVBfVFNGX1RTRl9DT05GICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfVFNGKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX1RTRl9UU0ZfQ09ORl9QV01FTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKICNkZWZpbmUgSU5DQV9JUF9UU0ZfVFNGX0NPTkZfTEVERU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfVFNGX1RTRl9DT05GX0tFWUVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqS2V5IHNjYW4gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoMDAwNEgpKioqLyAKKworLyoqKktleSBzY2FuIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKDAwMDRIKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9UU0ZfS0VZX0NPTkYgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAwNCkpCiAjZGVmaW5lIElOQ0FfSVBfVFNGX0tFWV9DT05GX1NMICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqU2NhbiBSZWdpc3RlciBMaW5lIDAgYW5kIDEgKDAwMDhIKSoqKi8gCisKKy8qKipTY2FuIFJlZ2lzdGVyIExpbmUgMCBhbmQgMSAoMDAwOEgpKioqLwogI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHMDEgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAwOCkpCiAjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUcwMV9SRVMxeCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMTIpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKICNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzAxX1JFUzB4ICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAxMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipTY2FuIFJlZ2lzdGVyIExpbmUgMiBhbmQgMyAoMDAwQ0gpKioqLyAKKworLyoqKlNjYW4gUmVnaXN0ZXIgTGluZSAyIGFuZCAzICgwMDBDSCkqKiovCiAjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUcyMyAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1RTRisgMHgwMDBDKSkKICNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzIzX1JFUzN4ICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAxMCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHMjNfUkVTMnggKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDExKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlNjYW4gUmVnaXN0ZXIgTGluZSA0LCA1IGFuZCA2ICgwMDEwSCkqKiovIAorCisvKioqU2NhbiBSZWdpc3RlciBMaW5lIDQsIDUgYW5kIDYgKDAwMTBIKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzQ1NiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfVFNGKyAweDAwMTApKQogI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHNDU2X1JFUzZ4ICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA3KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCiAjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUc0NTZfUkVTNXggKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKICNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzQ1Nl9SRVM0eCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgOSkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipTY2FuIFJlZ2lzdGVyIExpbmUgNyB0byAxMiAoMDAxNEgpKioqLyAKKworLyoqKlNjYW4gUmVnaXN0ZXIgTGluZSA3IHRvIDEyICgwMDE0SCkqKiovCiAjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUc3dG8xMiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1RTRisgMHgwMDE0KSkKICNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzd0bzEyX1JFUzEyeCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI4KQogI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHN3RvMTJfUkVTMTF4ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyNCkKQEAgLTE4MTUsOCArMTgxNSw4IEBACiAjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUc3dG8xMl9SRVM5eCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHN3RvMTJfUkVTOHggKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDUpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQogI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHN3RvMTJfUkVTN3ggKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQotICAgICAgCi0vKioqTEVETVVYIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKDAwMThIKSoqKi8gCisKKy8qKipMRURNVVggQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoMDAxOEgpKioqLwogI2RlZmluZSBJTkNBX0lQX1RTRl9MRURNVVhfQ09ORiAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAxOCkpCiAjZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX0VUTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjUpCiAjZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX0VTVEExICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNCkKQEAgLTE4MzAsMTk0ICsxODMwLDE5NCBAQAogI2RlZmluZSBJTkNBX0lQX1RTRl9MRURNVVhfQ09ORl9FU1BEMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCiAjZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX0lOViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX05DT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKkxFRCBSZWdpc3RlciAoMDAxQ0gpKioqLyAKKworLyoqKkxFRCBSZWdpc3RlciAoMDAxQ0gpKioqLwogI2RlZmluZSBJTkNBX0lQX1RTRl9MRURfUkVHICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAxQykpCiAjZGVmaW5lIElOQ0FfSVBfVFNGX0xFRF9SRUdfTHh5ICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDI0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKlB1bHNlIFdpZHRoIE1vZHVsYXRvciAxIGFuZCAyIFJlZ2lzdGVyICgwMDIwSCkqKiovIAorCisvKioqUHVsc2UgV2lkdGggTW9kdWxhdG9yIDEgYW5kIDIgUmVnaXN0ZXIgKDAwMjBIKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9UU0ZfUFdNMTIgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfVFNGKyAweDAwMjApKQotI2RlZmluZSBJTkNBX0lQX1RTRl9QV00xMl9QVzJQVzEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgTmFOKSAtIDEpICYgKHZhbHVlKSkgPDwgTmFOKQkJCi0gICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfUFdNMTJfUFcyUFcxICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IE5hTikgLSAxKSAmICh2YWx1ZSkpIDw8IE5hTikKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIE1vZHVsZSAgICAgIDogIFBvcnRzIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgCi0jZGVmaW5lIElOQ0FfSVBfUG9ydHMgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMEEwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKIAotICAgICAgCi0vKioqUG9ydCAxIERhdGEgT3V0cHV0IFJlZ2lzdGVyICgwMDIwSCkqKiovIAorI2RlZmluZSBJTkNBX0lQX1BvcnRzICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDBBMDApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKlBvcnQgMSBEYXRhIE91dHB1dCBSZWdpc3RlciAoMDAyMEgpKioqLwogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX09VVCAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMjApKQogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX09VVF9QKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqUG9ydCAyIERhdGEgT3V0cHV0IFJlZ2lzdGVyICgwMDQwSCkqKiovIAorCisKKy8qKipQb3J0IDIgRGF0YSBPdXRwdXQgUmVnaXN0ZXIgKDAwNDBIKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9PVVQgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDQwKSkKICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9PVVRfUCh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKlBvcnQgMSBEYXRhIElucHV0IFJlZ2lzdGVyICgwMDI0SCkqKiovIAorCisKKy8qKipQb3J0IDEgRGF0YSBJbnB1dCBSZWdpc3RlciAoMDAyNEgpKioqLwogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0lOICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMjQpKQogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0lOX1AodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipQb3J0IDIgRGF0YSBJbnB1dCBSZWdpc3RlciAoMDA0NEgpKioqLyAKKworCisvKioqUG9ydCAyIERhdGEgSW5wdXQgUmVnaXN0ZXIgKDAwNDRIKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9JTiAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDQ0KSkKICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9JTl9QKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqUG9ydCAxIERpcmVjdGlvbiBSZWdpc3RlciAoMDAyOEgpKioqLyAKKworCisvKioqUG9ydCAxIERpcmVjdGlvbiBSZWdpc3RlciAoMDAyOEgpKioqLwogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0RJUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMjgpKQogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0RJUl9Qb3J0MVAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCisKICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMV9ESVJfUG9ydDJQbiAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipQb3J0IDIgRGlyZWN0aW9uIFJlZ2lzdGVyICgwMDQ4SCkqKiovIAorCisvKioqUG9ydCAyIERpcmVjdGlvbiBSZWdpc3RlciAoMDA0OEgpKioqLwogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX0RJUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwNDgpKQogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX0RJUl9Qb3J0MVAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCisKICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9ESVJfUG9ydDJQbiAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKKwogLyoqKlBvcnQgMCBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIDAgKDAwMEMgSCkKICoqKi8KICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9BTFRTRUwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDBDKSkKICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9BTFRTRUxfUG9ydDBQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCisKKwogLyoqKlBvcnQgMSBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIDAgKDAwMkMgSCkKICoqKi8KICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMV9BTFRTRUwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDJDKSkKICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMV9BTFRTRUxfUG9ydDFQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAorCiAjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfQUxUU0VMX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAorCisKIC8qKipQb3J0IDIgQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciAwICgwMDRDIEgpCiAqKiovCiAjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfQUxUU0VMICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDA0QykpCiAjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfQUxUU0VMX1BvcnQxUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKKwogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX0FMVFNFTF9Qb3J0MlAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKKworCiAvKioqUG9ydCAwIElucHV0IFNjaG1pdHQtVHJpZ2dlciBPZmYgUmVnaXN0ZXIgKDAwMTAgSCkKICoqKi8KICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9TVE9GRiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMTApKQogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AwX1NUT0ZGX1BvcnQwUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAorCisKIC8qKipQb3J0IDEgSW5wdXQgU2NobWl0dC1UcmlnZ2VyIE9mZiBSZWdpc3RlciAoMDAzMCBIKQogKioqLwogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX1NUT0ZGICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDAzMCkpCiAjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfU1RPRkZfUG9ydDFQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAorCiAjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfU1RPRkZfUG9ydDJQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCisKKwogLyoqKlBvcnQgMiBJbnB1dCBTY2htaXR0LVRyaWdnZXIgT2ZmIFJlZ2lzdGVyICgwMDUwIEgpCiAqKiovCiAjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfU1RPRkYgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDUwKSkKICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9TVE9GRl9Qb3J0MVAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCisKICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9TVE9GRl9Qb3J0MlAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipQb3J0IDIgT3BlbiBEcmFpbiBDb250cm9sIFJlZ2lzdGVyICgwMDU0SCkqKiovIAorCisKKy8qKipQb3J0IDIgT3BlbiBEcmFpbiBDb250cm9sIFJlZ2lzdGVyICgwMDU0SCkqKiovCiAjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfT0QgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDA1NCkpCiAjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfT0RfUG9ydDJQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqUG9ydCAwIFB1bGwgVXAgRGV2aWNlIEVuYWJsZSBSZWdpc3RlciAoMDAxOCBIKSoqKi8gCisKKworLyoqKlBvcnQgMCBQdWxsIFVwIERldmljZSBFbmFibGUgUmVnaXN0ZXIgKDAwMTggSCkqKiovCiAjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDBfUFVERU4gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDE4KSkKICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9QVURFTl9Qb3J0MFAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipQb3J0IDIgUHVsbCBVcCBEZXZpY2UgRW5hYmxlIFJlZ2lzdGVyICgwMDU4IEgpKioqLyAKKworCisvKioqUG9ydCAyIFB1bGwgVXAgRGV2aWNlIEVuYWJsZSBSZWdpc3RlciAoMDA1OCBIKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9QVURFTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwNTgpKQogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1BVREVOX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKKwogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1BVREVOX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKlBvcnQgMCBQdWxsIFVwL1B1bGwgRG93biBTZWxlY3QgUmVnaXN0ZXIgKDAwMUMgSCkqKiovIAorCisKKy8qKipQb3J0IDAgUHVsbCBVcC9QdWxsIERvd24gU2VsZWN0IFJlZ2lzdGVyICgwMDFDIEgpKioqLwogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AwX1BVRFNFTCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMUMpKQogI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AwX1BVRFNFTF9Qb3J0MFAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipQb3J0IDIgUHVsbCBVcC9QdWxsIERvd24gU2VsZWN0IFJlZ2lzdGVyICgwMDVDIEgpKioqLyAKKworCisvKioqUG9ydCAyIFB1bGwgVXAvUHVsbCBEb3duIFNlbGVjdCBSZWdpc3RlciAoMDA1QyBIKSoqKi8KICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9QVURTRUwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDVDKSkKICNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9QVURTRUxfUG9ydDJQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAorCiAjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfUFVEU0VMX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAJCQotICAgICAgICAgCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIE1vZHVsZSAgICAgIDogIERFUy8zREVTIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAKLSNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFUyAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDA4MDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCiAKLSAgICAgIAotLyoqKkRFUyBJbnB1dCBEYXRhIEhpZ2ggUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDgwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqREVTIElucHV0IERhdGEgSGlnaCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSUhSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSUhSX0lIKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqREVTIElucHV0IERhdGEgTG93IFJlZ2lzdGVyKioqLyAKKworCisvKioqREVTIElucHV0IERhdGEgTG93IFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19JTFIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMDQpKQogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19JTFJfSUwodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipERVMgS2V5ICMxIEhpZ2ggUmVnaXN0ZXIqKiovIAorCisKKy8qKipERVMgS2V5ICMxIEhpZ2ggUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0sxSFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDA4KSkKICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzFIUl9LMUgodmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkRFUyBLZXkgIzEgTG93IFJlZ2lzdGVyKioqLyAKKworCisvKioqREVTIEtleSAjMSBMb3cgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0sxTFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDBDKSkKICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzFMUl9LMUwodmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkRFUyBLZXkgIzIgSGlnaCBSZWdpc3RlcioqKi8gCisKKworLyoqKkRFUyBLZXkgIzIgSGlnaCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzJIUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMTApKQogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LMkhSX0sySCh2YWx1ZSkgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqREVTIEtleSAjMiBMb3cgUmVnaXN0ZXIqKiovIAorCisKKy8qKipERVMgS2V5ICMyIExvdyBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzJMUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMTQpKQogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LMkxSX0syTCh2YWx1ZSkgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqREVTIEtleSAjMyBIaWdoIFJlZ2lzdGVyKioqLyAKKworCisvKioqREVTIEtleSAjMyBIaWdoIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LM0hSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAxOCkpCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0szSFJfSzNIKHZhbHVlKSAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipERVMgS2V5ICMzIExvdyBSZWdpc3RlcioqKi8gCisKKworLyoqKkRFUyBLZXkgIzMgTG93IFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LM0xSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAxQykpCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0szTFJfSzNMKHZhbHVlKSAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipERVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIEhpZ2ggUmVnaXN0ZXIqKiovIAorCisKKy8qKipERVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIEhpZ2ggUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0lWSFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDIwKSkKICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSVZIUl9JVkgodmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkRFUyBJbml0aWFsaXphdGlvbiBWZWN0b3IgTG93IFJlZ2lzdGVyKioqLyAKKworCisvKioqREVTIEluaXRpYWxpemF0aW9uIFZlY3RvciBMb3cgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0lWTFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDI0KSkKICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSVZMUl9JVkwodmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkRFUyBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworCisvKioqREVTIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAyOCkpCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSX0tSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9EQVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfRih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKKwogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9PKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAorCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSX0dPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfU1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfSUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKQEAgLTIwMjUsMTM0ICsyMDI1LDEzNCBAQAogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9TTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSX0VfRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSX00odmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipERVMgT3V0cHV0IERhdGEgSGlnaCBSZWdpc3RlcioqKi8gCisKKworLyoqKkRFUyBPdXRwdXQgRGF0YSBIaWdoIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19PSFIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMkMpKQogI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19PSFJfT0godmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipERVMgT3V0cHV0IERhdGEgTG93IFJlZ2lzdGVyKioqLyAKKworCisvKioqREVTIE91dHB1dCBEYXRhIExvdyBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfT0xSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDMwKSkKICNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfT0xSX09MKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAkJCi0gICAgICAgICAKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgTW9kdWxlICAgICAgOiAgQUVTIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAKLSNkZWZpbmUgSU5DQV9JUF9BRVMgICAgICAgICAgICAgICAgICAgICAgICAgICgweEI4MDAwODgwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAogCi0gICAgICAKLS8qKipBRVMgSW5wdXQgRGF0YSAzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BRVMgICAgICAgICAgICAgICAgICAgICAgICAgICgweEI4MDAwODgwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKipBRVMgSW5wdXQgRGF0YSAzIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSUQzUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lEM1JfSSh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkFFUyBJbnB1dCBEYXRhIDIgUmVnaXN0ZXIqKiovIAorCisKKy8qKipBRVMgSW5wdXQgRGF0YSAyIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSUQyUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lEMlJfSSh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkFFUyBJbnB1dCBEYXRhIDEgUmVnaXN0ZXIqKiovIAorCisKKy8qKipBRVMgSW5wdXQgRGF0YSAxIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSUQxUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lEMVJfSSh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkFFUyBJbnB1dCBEYXRhIDAgUmVnaXN0ZXIqKiovIAorCisKKy8qKipBRVMgSW5wdXQgRGF0YSAwIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSUQwUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lEMFJfSSh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkFFUyBPdXRwdXQgRGF0YSAzIFJlZ2lzdGVyKioqLyAKKworCisvKioqQUVTIE91dHB1dCBEYXRhIDMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19PRDNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfT0QzUl9PKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqQUVTIE91dHB1dCBEYXRhIDIgUmVnaXN0ZXIqKiovIAorCisKKy8qKipBRVMgT3V0cHV0IERhdGEgMiBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX09EMlIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19PRDJSX08odmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipBRVMgT3V0cHV0IERhdGEgMSBSZWdpc3RlcioqKi8gCisKKworLyoqKkFFUyBPdXRwdXQgRGF0YSAxIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfT0QxUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX09EMVJfTyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkFFUyBPdXRwdXQgRGF0YSAwIFJlZ2lzdGVyKioqLyAKKworCisvKioqQUVTIE91dHB1dCBEYXRhIDAgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19PRDBSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfT0QwUl9PKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqQUVTIEtleSA3IFJlZ2lzdGVyKioqLyAKKworCisvKioqQUVTIEtleSA3IFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzdSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LN1JfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkFFUyBLZXkgNiBSZWdpc3RlcioqKi8gCisKKworLyoqKkFFUyBLZXkgNiBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0s2UiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzZSX0sodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipBRVMgS2V5IDUgUmVnaXN0ZXIqKiovIAorCisKKy8qKipBRVMgS2V5IDUgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LNVIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0s1Ul9LKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqQUVTIEtleSA0IFJlZ2lzdGVyKioqLyAKKworCisvKioqQUVTIEtleSA0IFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzRSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LNFJfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkFFUyBLZXkgMyBSZWdpc3RlcioqKi8gCisKKworLyoqKkFFUyBLZXkgMyBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0szUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzNSX0sodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipBRVMgS2V5IDIgUmVnaXN0ZXIqKiovIAorCisKKy8qKipBRVMgS2V5IDIgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LMlIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0syUl9LKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqQUVTIEtleSAxIFJlZ2lzdGVyKioqLyAKKworCisvKioqQUVTIEtleSAxIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzFSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LMVJfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkFFUyBLZXkgMCBSZWdpc3RlcioqKi8gCisKKworLyoqKkFFUyBLZXkgMCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0swUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzBSX0sodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIDMgUmVnaXN0ZXIqKiovIAorCisKKy8qKipBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIDMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JVjNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSVYzUl9JVih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkFFUyBJbml0aWFsaXphdGlvbiBWZWN0b3IgMiBSZWdpc3RlcioqKi8gCisKKworLyoqKkFFUyBJbml0aWFsaXphdGlvbiBWZWN0b3IgMiBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lWMlIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JVjJSX0lWKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqQUVTIEluaXRpYWxpemF0aW9uIFZlY3RvciAxIFJlZ2lzdGVyKioqLyAKKworCisvKioqQUVTIEluaXRpYWxpemF0aW9uIFZlY3RvciAxIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSVYxUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lWMVJfSVYodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIDAgUmVnaXN0ZXIqKiovIAorCisKKy8qKipBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIDAgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JVjBSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSVYwUl9JViAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzMikgLSAxKSAmKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkFFUyBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkFFUyBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFIgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9LUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX0RBVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfUE5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9GKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAorCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9PKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAorCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9HTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9TVFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQogI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfSUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKQEAgLTIxNjEsMzAgKzIxNjEsMzAgQEAKICNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX0VfRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9LViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9LKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAkJCi0gICAgICAgICAKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgTW9kdWxlICAgICAgOiAgSbJDIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAKLSNkZWZpbmUgSU5DQV9JUF9JSUMgICAgICAgICAgICAgICAgICAgICAgICAgICgweEI4MDAwNzAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAogCi0gICAgICAKLS8qKipJskMgUG9ydCBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0lJQyAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDA3MDApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKkmyQyBQb3J0IElucHV0IFNlbGVjdCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1BJU0VMICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMDQpKQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfUElTRUxfU0RBSVModmFsdWUpICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCisKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1BJU0VMX1NDTElTKHZhbHVlKSAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqSbJDIENsb2NrIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisKKy8qKipJskMgQ2xvY2sgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0NMQyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMDApKQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQ0xDX1JNQyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0NMQ19ESVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19DTENfRElTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqSbJDIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkmyQyBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMTApKQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfV01FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0NJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyNikKQEAgLTIyMDcsOCArMjIwNyw4IEBACiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9TTEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfQURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAotLyoqKkmyQyBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKy8qKipJskMgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMSAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lJQysgMHgwMDEwKSkKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX1JNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAyNCkKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX1RSWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIzKQpAQCAtMjIyOCw4ICsyMjI4LDggQEAKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX1NMQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9BRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotICAgICAgCi0vKioqSbJDIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworLyoqKkmyQyBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMTApKQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfV01FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX0NJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyNikKQEAgLTIyNTEsNyArMjI1MSw3IEBACiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9TTEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfQURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSAgICAgIAorCiAvKioqSbJDIFdyaXRlIEhhcmR3YXJlIE1vZGlmaWVkIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyCiAqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT04gICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JSUMrIDB4MDAyMCkpCkBAIC0yMjc3LDE2MSArMjI3NywxNjEgQEAKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTl9DTFJJUlFEICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fU0VUQUwgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSQUwgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0gICAgICAKLS8qKipJskMgQnVzIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorCisvKioqSbJDIEJ1cyBDb250cm9sIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JSUMrIDB4MDAxNCkpCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMF9CUlBNT0QgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8wX1BSRURJViAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjkpCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMF9JQ0E5XzAgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMTApIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8wX0JSUCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8wX1NDTEVOKHZhbHVlKSAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAorCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMF9TREFFTih2YWx1ZSkgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkmyQyBCdXMgQ29udHJvbCBSZWdpc3RlcioqKi8gCisKKworLyoqKkmyQyBCdXMgQ29udHJvbCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8xICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMTQpKQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzFfQlJQTU9EICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMV9QUkVESVYgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI5KQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzFfSUNBN18xICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDcpIC0gMSkgJiAodmFsdWUpKSA8PCAxNykKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8xX0JSUCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8xX1NDTEVOKHZhbHVlKSAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAorCiAjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMV9TREFFTih2YWx1ZSkgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkmyQyBSZWNlaXZlIFRyYW5zbWl0IEJ1ZmZlcioqKi8gCisKKworLyoqKkmyQyBSZWNlaXZlIFRyYW5zbWl0IEJ1ZmZlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1JUQiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMTgpKQogI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfUlRCX1JUQih2YWx1ZSkgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAkJCi0gICAgICAgICAKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgTW9kdWxlICAgICAgOiAgRkIgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgIAotI2RlZmluZSBJTkNBX0lQX0ZCICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjg4MDAwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKIAotICAgICAgCi0vKioqRkIgQWNjZXNzIEVycm9yIENhdXNlIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9GQiAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QkY4ODAwMDApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKkZCIEFjY2VzcyBFcnJvciBDYXVzZSBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJDQVVTRSAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9GQisgMHgwMTAwKSkKICNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJDQVVTRV9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKICNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJDQVVTRV9QT1JUICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0VSUkNBVVNFX0NBVVNFICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkZCIEFjY2VzcyBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyKioqLyAKKworLyoqKkZCIEFjY2VzcyBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0VSUkFERFIgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0ZCKyAweDAxMDgpKQogI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0VSUkFERFJfQUREUgotICAgICAgCi0vKioqRkIgQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8gCisKKy8qKipGQiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0NGRyAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0ZCKyAweDA4MDApKQotI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0NGR19TVk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQkJCi0gICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9GQl9GQl9DRkdfU1ZNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogIE1vZHVsZSAgICAgIDogIFNSQU0gcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgICAgICAgCi0jZGVmaW5lIElOQ0FfSVBfU1JBTSAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjk4MDAwMCkKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKIAotICAgICAgCi0vKioqU1JBTSBTaXplIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TUkFNICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGOTgwMDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKipTUkFNIFNpemUgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfU1JBTV9TUkFNX1NJWkUgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TUkFNKyAweDA4MDApKQotI2RlZmluZSBJTkNBX0lQX1NSQU1fU1JBTV9TSVpFX1NJWkUgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKLSAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX1NSQU1fU1JBTV9TSVpFX1NJWkUgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICBNb2R1bGUgICAgICA6ICBCSVUgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgIAotI2RlZmluZSBJTkNBX0lQX0JJVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QkZBODAwMDApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCiAKLSAgICAgIAotLyoqKkJJVSBJZGVudGlmaWNhdGlvbiBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQklVICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRkE4MDAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqQklVIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0JJVV9CSVVfSUQgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9CSVUrIDB4MDAwMCkpCiAjZGVmaW5lIElOQ0FfSVBfQklVX0JJVV9JRF9BUkNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQogI2RlZmluZSBJTkNBX0lQX0JJVV9CSVVfSURfSUQgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCiAjZGVmaW5lIElOQ0FfSVBfQklVX0JJVV9JRF9SRVYgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCi0gICAgICAKLS8qKipCSVUgQWNjZXNzIEVycm9yIENhdXNlIFJlZ2lzdGVyKioqLyAKKworLyoqKkJJVSBBY2Nlc3MgRXJyb3IgQ2F1c2UgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQklVX0JJVV9FUlJDQVVTRSAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JJVSsgMHgwMTAwKSkKICNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0VSUkNBVVNFX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBJTkNBX0lQX0JJVV9CSVVfRVJSQ0FVU0VfUE9SVCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKICNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0VSUkNBVVNFX0NBVVNFICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKLSAgICAgIAotLyoqKkJJVSBBY2Nlc3MgRXJyb3IgQWRkcmVzcyBSZWdpc3RlcioqKi8gCisKKy8qKipCSVUgQWNjZXNzIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfQklVX0JJVV9FUlJBRERSICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JJVSsgMHgwMTA4KSkKLSNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0VSUkFERFJfQUREUgkJCi0gICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0VSUkFERFJfQUREUgorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgTW9kdWxlICAgICAgOiAgSUNVIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAgICAKLSNkZWZpbmUgSU5DQV9JUF9JQ1UgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTAxMDAwKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAogCi0gICAgICAKLS8qKipJTTAgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfSUNVICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjEwMTAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqSU0wIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMF9JU1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwMDAwKSkKICNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0wX0lTUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKklNMSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKworCisvKioqSU0xIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JU1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwMjAwKSkKICNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0xX0lTUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKklNMiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKworCisvKioqSU0yIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMl9JU1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwNDAwKSkKICNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0yX0lTUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKklNMCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyKioqLyAKKworCisvKioqSU0wIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMF9JRVIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwMDA4KSkKICNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0wX0lFUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKklNMSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyKioqLyAKKworCisvKioqSU0xIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JRVIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwMjA4KSkKICNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0xX0lFUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKklNMiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyKioqLyAKKworCisvKioqSU0yIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMl9JRVIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwNDA4KSkKICNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0yX0lFUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKklNMCBJbnRlcnJ1cHQgT3V0cHV0IFN0YXR1cyBSZWdpc3RlcioqKi8gCisKKworLyoqKklNMCBJbnRlcnJ1cHQgT3V0cHV0IFN0YXR1cyBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0wX0lPU1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDAxMCkpCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMF9JT1NSX0lSKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqSU0xIEludGVycnVwdCBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKworCisvKioqSU0xIEludGVycnVwdCBPdXRwdXQgU3RhdHVzIFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0lDVV9JTTFfSU9TUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwMjEwKSkKICNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0xX0lPU1JfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipJTTIgSW50ZXJydXB0IE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIqKiovIAorCisKKy8qKipJTTIgSW50ZXJydXB0IE91dHB1dCBTdGF0dXMgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMl9JT1NSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDA0MTApKQogI2RlZmluZSBJTkNBX0lQX0lDVV9JTTJfSU9TUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKklNMCBJbnRlcnJ1cHQgUmVxdWVzdCBTZXQgUmVnaXN0ZXIqKiovIAorCisKKy8qKipJTTAgSW50ZXJydXB0IFJlcXVlc3QgU2V0IFJlZ2lzdGVyKioqLwogI2RlZmluZSBJTkNBX0lQX0lDVV9JTTBfSVJTUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwMDE4KSkKICNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0wX0lSU1JfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAKLS8qKipJTTEgSW50ZXJydXB0IFJlcXVlc3QgU2V0IFJlZ2lzdGVyKioqLyAKKworCisvKioqSU0xIEludGVycnVwdCBSZXF1ZXN0IFNldCBSZWdpc3RlcioqKi8KICNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0xX0lSU1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDIxOCkpCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JUlNSX0lSKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgCi0vKioqSU0yIEludGVycnVwdCBSZXF1ZXN0IFNldCBSZWdpc3RlcioqKi8gCisKKworLyoqKklNMiBJbnRlcnJ1cHQgUmVxdWVzdCBTZXQgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMl9JUlNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDA0MTgpKQogI2RlZmluZSBJTkNBX0lQX0lDVV9JTTJfSVJTUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIAotLyoqKkV4dGVybmFsIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyKioqLyAKKworCisvKioqRXh0ZXJuYWwgSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIqKiovCiAjZGVmaW5lIElOQ0FfSVBfSUNVX0lDVV9FSUNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDBCMDApKQogI2RlZmluZSBJTkNBX0lQX0lDVV9JQ1VfRUlDUl9FSUk1ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDIwKQogI2RlZmluZSBJTkNBX0lQX0lDVV9JQ1VfRUlDUl9FSUk0ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pby5oIGIvaW5jbHVkZS9hc20tbWlwcy9pby5oCmluZGV4IDlhN2FhZjcuLjg1N2ZiMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lvLmgKQEAgLTIwMyw3ICsyMDMsNyBAQAogI2RlZmluZSBpc2FfZXRoX2lvX2NvcHlfYW5kX3N1bShhLGIsYyxkKSBldGhfY29weV9hbmRfc3VtKChhKSwoYiksKGMpLChkKSkKIAogc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc2lnbmF0dXJlKHVuc2lnbmVkIGxvbmcgaW9fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWduYXR1cmUsIGludCBsZW5ndGgpCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWduYXR1cmUsIGludCBsZW5ndGgpCiB7CiAJaW50IHJldHZhbCA9IDA7CiAJZG8gewpAQCAtMjg2LDE1ICsyODYsMTUgQEAKICNkZWZpbmUgX19PVVRTMihtKSBcCiBpZiAoY291bnQpIFwKIF9fYXNtX18gX192b2xhdGlsZV9fICggXAotICAgICAgICAiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAotICAgICAgICAiLnNldFx0bm9hdFxuIiBcCi0gICAgICAgICIxOlx0bCIgI20gIlx0JDEsKCUwKVxuXHQiIFwKLSAgICAgICAgInN1YnVcdCUxLDFcblx0IiBcCi0gICAgICAgICJzIiAjbSAiXHQkMSwlNCglNSlcblx0IiBcCi0gICAgICAgICJibmVcdCQwLCUxLDFiXG5cdCIgXAotICAgICAgICAiYWRkaXVcdCUwLCU2XG5cdCIgXAotICAgICAgICAiLnNldFx0YXRcblx0IiBcCi0gICAgICAgICIuc2V0XHRyZW9yZGVyIgorCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisJIi5zZXRcdG5vYXRcbiIgXAorCSIxOlx0bCIgI20gIlx0JDEsKCUwKVxuXHQiIFwKKwkic3VidVx0JTEsMVxuXHQiIFwKKwkicyIgI20gIlx0JDEsJTQoJTUpXG5cdCIgXAorCSJibmVcdCQwLCUxLDFiXG5cdCIgXAorCSJhZGRpdVx0JTAsJTZcblx0IiBcCisJIi5zZXRcdGF0XG5cdCIgXAorCSIuc2V0XHRyZW9yZGVyIgogCiAjZGVmaW5lIF9fT1VUUyhtLHMsaSkgXAogX19PVVRTMShzKSBfX09VVFMyKG0pIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaAppbmRleCA1NmZjM2RhLi4zMTAwNzM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oCkBAIC03NSw3ICs3NSw3IEBACiAjZGVmaW5lIENQMF9JV0FUQ0ggJDE4CiAjZGVmaW5lIENQMF9EV0FUQ0ggJDE5CiAKLS8qIAorLyoKICAqIENvcHJvY2Vzc29yIDAgU2V0IDEgcmVnaXN0ZXIgbmFtZXMKICAqLwogI2RlZmluZSBDUDBfUzFfREVSUkFERFIwICAkMjYKQEAgLTE3NSw2OSArMTc1LDY5IEBACiAgKi8KICNkZWZpbmUgcmVhZF8zMmJpdF9jcDBfcmVnaXN0ZXIoc291cmNlKSAgICAgICAgICAgICAgICAgICAgICAgICBcCiAoeyBpbnQgX19yZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkiLnNldFx0cHVzaFxuXHQiCQkJCQlcCiAJIi5zZXRcdHJlb3JkZXJcblx0IgkJCQkJXAotICAgICAgICAibWZjMFx0JTAsIlNUUihzb3VyY2UpIlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkibWZjMFx0JTAsIlNUUihzb3VyY2UpIlxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkiLnNldFx0cG9wIgkJCQkJCVwKLSAgICAgICAgOiAiPXIiIChfX3JlcykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9fcmVzO30pCisJOiAiPXIiIChfX3JlcykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX19yZXM7fSkKIAogI2RlZmluZSByZWFkXzMyYml0X2NwMF9zZXQxX3JlZ2lzdGVyKHNvdXJjZSkgICAgICAgICAgICAgICAgICAgIFwKICh7IGludCBfX3JlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCSIuc2V0XHRwdXNoXG5cdCIJCQkJCVwKIAkiLnNldFx0cmVvcmRlclxuXHQiCQkJCQlcCi0gICAgICAgICJjZmMwXHQlMCwiU1RSKHNvdXJjZSkiXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSJjZmMwXHQlMCwiU1RSKHNvdXJjZSkiXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCSIuc2V0XHRwb3AiCQkJCQkJXAotICAgICAgICA6ICI9ciIgKF9fcmVzKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19yZXM7fSkKKwk6ICI9ciIgKF9fcmVzKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX3Jlczt9KQogCiAvKgogICogRm9yIG5vdyB1c2UgdGhpcyBvbmx5IHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCEKICAqLwogI2RlZmluZSByZWFkXzY0Yml0X2NwMF9yZWdpc3Rlcihzb3VyY2UpICAgICAgICAgICAgICAgICAgICAgICAgIFwKICh7IGludCBfX3JlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiLnNldFx0bWlwczNcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgImRtZmMwXHQlMCwiU1RSKHNvdXJjZSkiXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICIuc2V0XHRtaXBzMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICA6ICI9ciIgKF9fcmVzKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19yZXM7fSkKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiLnNldFx0bWlwczNcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiZG1mYzBcdCUwLCJTVFIoc291cmNlKSJcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiLnNldFx0bWlwczAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwk6ICI9ciIgKF9fcmVzKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX3Jlczt9KQogCiAjZGVmaW5lIHdyaXRlXzMyYml0X2NwMF9yZWdpc3RlcihyZWdpc3Rlcix2YWx1ZSkgICAgICAgICAgICAgICAgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIm10YzBcdCUwLCJTVFIocmVnaXN0ZXIpIlxuXHQiCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkibXRjMFx0JTAsIlNUUihyZWdpc3RlcikiXG5cdCIJCQkJXAogCSJub3AiCQkJCQkJCVwKLSAgICAgICAgOiA6ICJyIiAodmFsdWUpKTsKKwk6IDogInIiICh2YWx1ZSkpOwogCiAjZGVmaW5lIHdyaXRlXzMyYml0X2NwMF9zZXQxX3JlZ2lzdGVyKHJlZ2lzdGVyLHZhbHVlKSAgICAgICAgICAgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgImN0YzBcdCUwLCJTVFIocmVnaXN0ZXIpIlxuXHQiCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiY3RjMFx0JTAsIlNUUihyZWdpc3RlcikiXG5cdCIJCQkJXAogCSJub3AiCQkJCQkJCVwKLSAgICAgICAgOiA6ICJyIiAodmFsdWUpKTsKKwk6IDogInIiICh2YWx1ZSkpOwogCiAjZGVmaW5lIHdyaXRlXzY0Yml0X2NwMF9yZWdpc3RlcihyZWdpc3Rlcix2YWx1ZSkgICAgICAgICAgICAgICAgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIi5zZXRcdG1pcHMzXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJkbXRjMFx0JTAsIlNUUihyZWdpc3RlcikiXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiLnNldFx0bWlwczAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgOiA6ICJyIiAodmFsdWUpKQorCV9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSIuc2V0XHRtaXBzM1xuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSJkbXRjMFx0JTAsIlNUUihyZWdpc3RlcikiXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSIuc2V0XHRtaXBzMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCTogOiAiciIgKHZhbHVlKSkKIAotLyogCi0gKiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIHdoZW4gd2UgZ2V0IGEgY29tcGlsZXIgdGhhdCBzdXBwb3J0IHRoZSBNSVBTMzIgSVNBLiAKKy8qCisgKiBUaGlzIHNob3VsZCBiZSBjaGFuZ2VkIHdoZW4gd2UgZ2V0IGEgY29tcGlsZXIgdGhhdCBzdXBwb3J0IHRoZSBNSVBTMzIgSVNBLgogICovCiAjZGVmaW5lIHJlYWRfbWlwczMyX2NwMF9jb25maWcxKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogKHsgaW50IF9fcmVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJIi5zZXRcdG5vcmVvcmRlclxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJIi5zZXRcdG5vYXRcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIAkiLndvcmRcdDB4NDAwMTgwMDFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiLndvcmRcdDB4NDAwMTgwMDFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkibW92ZVx0JTAsJDFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkiLnNldFx0YXRcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkiLnNldFx0cmVvcmRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAk6Ij1yIiAoX19yZXMpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19yZXM7fSkKKwlfX3Jlczt9KQogCiAvKgogICogUjR4MDAgaW50ZXJydXB0IGVuYWJsZSAvIGNhdXNlIGJpdHMKQEAgLTI3MywxMSArMjczLDExIEBACiBzZXRfY3AwXyMjbmFtZSh1bnNpZ25lZCBpbnQgc2V0KQkJCQlcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXVuc2lnbmVkIGludCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJCQkJXAogCXJlcyA9IHJlYWRfMzJiaXRfY3AwX3JlZ2lzdGVyKHJlZ2lzdGVyKTsgICAgICAgICAgICAgICAgXAogCXJlcyB8PSBzZXQ7CQkJCQkJXAogCXdyaXRlXzMyYml0X2NwMF9yZWdpc3RlcihyZWdpc3RlciwgcmVzKTsgICAgICAgIAlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCQlcCiAJcmV0dXJuIHJlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CQkJCQkJCQlcCiAJCQkJCQkJCVwKQEAgLTI4NSwxMSArMjg1LDExIEBACiBjbGVhcl9jcDBfIyNuYW1lKHVuc2lnbmVkIGludCBjbGVhcikJCQkJXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAl1bnNpZ25lZCBpbnQgcmVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCQkJCVwKIAlyZXMgPSByZWFkXzMyYml0X2NwMF9yZWdpc3RlcihyZWdpc3Rlcik7ICAgICAgICAgICAgICAgIFwKIAlyZXMgJj0gfmNsZWFyOwkJCQkJCVwKIAl3cml0ZV8zMmJpdF9jcDBfcmVnaXN0ZXIocmVnaXN0ZXIsIHJlcyk7CQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCQlcCiAJcmV0dXJuIHJlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CQkJCQkJCQlcCiAJCQkJCQkJCVwKQEAgLTI5NywxMyArMjk3LDEzIEBACiBjaGFuZ2VfY3AwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2hhbmdlLCB1bnNpZ25lZCBpbnQgbmV3KQlcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXVuc2lnbmVkIGludCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJCQkJXAogCXJlcyA9IHJlYWRfMzJiaXRfY3AwX3JlZ2lzdGVyKHJlZ2lzdGVyKTsgICAgICAgICAgICAgICAgXAogCXJlcyAmPSB+Y2hhbmdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXJlcyB8PSAobmV3ICYgY2hhbmdlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWlmKGNoYW5nZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQl3cml0ZV8zMmJpdF9jcDBfcmVnaXN0ZXIocmVnaXN0ZXIsIHJlcyk7ICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCQlcCiAJcmV0dXJuIHJlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcG9zaXhfdHlwZXMuaAppbmRleCA2YzQ4YjNmLi44NzlhYWUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3Bvc2l4X3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wb3NpeF90eXBlcy5oCkBAIC00NSw3ICs0NSw3IEBACiAjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgICAgICBsb25nICAgIHZhbFsyXTsKKwlsb25nICAgIHZhbFsyXTsKIH0gX19rZXJuZWxfZnNpZF90OwogCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKQpAQCAtNjgsNyArNjgsNyBAQAogCiAjdW5kZWYgX19GRF9JU1NFVAogc3RhdGljIF9faW5saW5lX18gaW50IF9fRkRfSVNTRVQodW5zaWduZWQgbG9uZyBfX2ZkLCBjb25zdCBfX2tlcm5lbF9mZF9zZXQgKl9fcCkKLXsgCit7CiAJdW5zaWduZWQgbG9uZyBfX3RtcCA9IF9fZmQgLyBfX05GREJJVFM7CiAJdW5zaWduZWQgbG9uZyBfX3JlbSA9IF9fZmQgJSBfX05GREJJVFM7CiAJcmV0dXJuIChfX3AtPmZkc19iaXRzW19fdG1wXSAmICgxVUw8PF9fcmVtKSkgIT0gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oCmluZGV4IDhjM2RlOTAuLjY4MzhhZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wcm9jZXNzb3IuaApAQCAtMTE1LDggKzExNSw4IEBACiB9OwogCiB1bmlvbiBtaXBzX2ZwdV91bmlvbiB7Ci0gICAgICAgIHN0cnVjdCBtaXBzX2ZwdV9oYXJkX3N0cnVjdCBoYXJkOwotICAgICAgICBzdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3Qgc29mdDsKKwlzdHJ1Y3QgbWlwc19mcHVfaGFyZF9zdHJ1Y3QgaGFyZDsKKwlzdHJ1Y3QgbWlwc19mcHVfc29mdF9zdHJ1Y3Qgc29mdDsKIH07CiAKICNkZWZpbmUgSU5JVF9GUFUgeyBcCkBAIC0xNzMsMTEgKzE3MywxMSBAQAogI2VuZGlmIC8qICFkZWZpbmVkIChfTEFOR1VBR0VfQVNTRU1CTFkpICovCiAKICNkZWZpbmUgSU5JVF9USFJFQUQgIHsgXAotICAgICAgICAvKiBcCi0gICAgICAgICAqIHNhdmVkIG1haW4gcHJvY2Vzc29yIHJlZ2lzdGVycyBcCi0gICAgICAgICAqLyBcCisJLyogXAorCSAqIHNhdmVkIG1haW4gcHJvY2Vzc29yIHJlZ2lzdGVycyBcCisJICovIFwKIAkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCBcCi0JICAgICAgICAgICAgICAgMCwgMCwgMCwgXAorCQkgICAgICAgMCwgMCwgMCwgXAogCS8qIFwKIAkgKiBzYXZlZCBjcDAgc3R1ZmYgXAogCSAqLyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N0cmluZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zdHJpbmcuaAppbmRleCAzNDNiNDVlLi40NjNhMTExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N0cmluZy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3RyaW5nLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAkiLnNldFx0YXRcblx0IgogCSIuc2V0XHRyZW9yZGVyIgogCTogIj1yIiAoX19kZXN0KSwgIj1yIiAoX19zcmMpCi0gICAgICAgIDogIjAiIChfX2Rlc3QpLCAiMSIgKF9fc3JjKQorCTogIjAiIChfX2Rlc3QpLCAiMSIgKF9fc3JjKQogCTogIiQxIiwibWVtb3J5Iik7CiAKICAgcmV0dXJuIF9feGRlc3Q7CkBAIC01NCw5ICs1NCw5IEBACiAJIjI6XG5cdCIKIAkiLnNldFx0YXRcblx0IgogCSIuc2V0XHRyZW9yZGVyIgotICAgICAgICA6ICI9ciIgKF9fZGVzdCksICI9ciIgKF9fc3JjKSwgIj1yIiAoX19uKQotICAgICAgICA6ICIwIiAoX19kZXN0KSwgIjEiIChfX3NyYyksICIyIiAoX19uKQotICAgICAgICA6ICIkMSIsIm1lbW9yeSIpOworCTogIj1yIiAoX19kZXN0KSwgIj1yIiAoX19zcmMpLCAiPXIiIChfX24pCisJOiAiMCIgKF9fZGVzdCksICIxIiAoX19zcmMpLCAiMiIgKF9fbikKKwk6ICIkMSIsIm1lbW9yeSIpOwogCiAgIHJldHVybiBfX2Rlc3Q7CiB9CkBAIC0xMTAsNyArMTEwLDcgQEAKIAkiMjpcblx0IgogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9SMzAwMCkKIAkibm9wXG5cdCIKLSNlbmRpZgkKKyNlbmRpZgogCSJtb3ZlXHQlMywkMVxuIgogCSIzOlx0c3VidVx0JTMsJDFcblx0IgogCSIuc2V0XHRhdFxuXHQiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaAppbmRleCA0YjQ1ODQ3Li5iNmQ1MGUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKQEAgLTgsNyArOCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAxOTk5IGJ5IFJhbGYgQmFlY2hsZQogICoKICAqIENoYW5nZWQgc2V0X2V4Y2VwdF92ZWN0b3IgZGVjbGFyYXRpb24gdG8gYWxsb3cgcmV0dXJuIG9mIHByZXZpb3VzCi0gKiB2ZWN0b3IgYWRkcmVzcyB2YWx1ZSAtIG5lY2Vzc2FyeSBmb3IgImJvcnJvd2luZyIgdmVjdG9ycy4gCisgKiB2ZWN0b3IgYWRkcmVzcyB2YWx1ZSAtIG5lY2Vzc2FyeSBmb3IgImJvcnJvd2luZyIgdmVjdG9ycy4KICAqCiAgKiBLZXZpbiBELiBLaXNzZWxsLCBrZXZpbmtAbWlwcy5vcmcgYW5kIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCkBAIC0xMjQsNyArMTI0LDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fZ2xvYmFsX3NhdmVfZmxhZ3Modm9pZCk7CiBleHRlcm4gdm9pZCBfX2dsb2JhbF9yZXN0b3JlX2ZsYWdzKHVuc2lnbmVkIGxvbmcpOwogIyAgZGVmaW5lIHN0aSgpIF9fZ2xvYmFsX3N0aSgpCi0jICBkZWZpbmUgY2xpKCkgX19nbG9iYWxfY2xpKCkgCisjICBkZWZpbmUgY2xpKCkgX19nbG9iYWxfY2xpKCkKICMgIGRlZmluZSBzYXZlX2ZsYWdzKHgpIGRvIHsgeCA9IF9fZ2xvYmFsX3NhdmVfZmxhZ3MoKTsgfSB3aGlsZSAoMCkKICMgIGRlZmluZSByZXN0b3JlX2ZsYWdzKHgpIF9fZ2xvYmFsX3Jlc3RvcmVfZmxhZ3MoeCkKICMgIGRlZmluZSBzYXZlX2FuZF9jbGkoeCkgZG8geyBzYXZlX2ZsYWdzKHgpOyBjbGkoKTsgfSB3aGlsZSgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90eXBlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy90eXBlcy5oCmluZGV4IDYzOGY3NTEuLmU3NTdlMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3R5cGVzLmgKQEAgLTMyLDEyICszMiwxMiBAQAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdTY0OwogCiAjZWxzZQotIAorCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQogdHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OwogI2VuZGlmCi0gCisKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjLzV4eF9pbW1hcC5oIGIvaW5jbHVkZS9hc20tcHBjLzV4eF9pbW1hcC5oCmluZGV4IGZmZmY5NzUuLjhlNTcwNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy81eHhfaW1tYXAuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvNXh4X2ltbWFwLmgKQEAgLTE3LDk1ICsxNyw5NSBAQAogICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgCisgKiBGb3VuZGF0aW9uLAogICovCiAKIC8qCiAgKiBGaWxlOgkJNXh4X2ltbWFwLmgKLSAqIAorICoKICAqIERpc2NyaXB0aW9uOgkJTVBDNTU1IEludGVybmFsIE1lbW9yeSBNYXAKLSAqIAorICoKICAqLwotIAorCiAjaWZuZGVmIF9fSU1NQVBfNVhYX18KICNkZWZpbmUgX19JTU1BUF81WFhfXwogCiAvKiBTeXN0ZW0gQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMuCiAqLwogdHlwZWRlZglzdHJ1Y3Qgc3lzX2NvbmYgewotICAgICAgICB1aW50IHNjX3NpdW1jcjsKLSAgICAgICAgdWludCBzY19zeXBjcjsKLSAgICAgICAgY2hhciByZXMxWzZdOwotICAgICAgICB1c2hvcnQgc2Nfc3dzcjsKLSAgICAgICAgdWludCBzY19zaXBlbmQ7Ci0gICAgICAgIHVpbnQgc2Nfc2ltYXNrOwotICAgICAgICB1aW50IHNjX3NpZWw7Ci0gICAgICAgIHVpbnQgc2Nfc2l2ZWM7Ci0gICAgICAgIHVpbnQgc2NfdGVzcjsKLSAgICAgICAgdWludCBzY19zZ3Bpb2R0MTsKLSAgICAgICAgdWludCBzY19zZ3Bpb2R0MjsKLSAgICAgICAgdWludCBzY19zZ3Bpb2NyOwotICAgICAgICB1aW50IHNjX2VtY3I7Ci0gICAgICAgIHVpbnQgc2NfcmVzMWFhOwotICAgICAgICB1aW50IHNjX3JlczFhYjsKLSAgICAgICAgdWludCBzY19wZG1jcjsKLSAgICAgICAgY2hhciByZXMzWzE5Ml07CisJdWludCBzY19zaXVtY3I7CisJdWludCBzY19zeXBjcjsKKwljaGFyIHJlczFbNl07CisJdXNob3J0IHNjX3N3c3I7CisJdWludCBzY19zaXBlbmQ7CisJdWludCBzY19zaW1hc2s7CisJdWludCBzY19zaWVsOworCXVpbnQgc2Nfc2l2ZWM7CisJdWludCBzY190ZXNyOworCXVpbnQgc2Nfc2dwaW9kdDE7CisJdWludCBzY19zZ3Bpb2R0MjsKKwl1aW50IHNjX3NncGlvY3I7CisJdWludCBzY19lbWNyOworCXVpbnQgc2NfcmVzMWFhOworCXVpbnQgc2NfcmVzMWFiOworCXVpbnQgc2NfcGRtY3I7CisJY2hhciByZXMzWzE5Ml07CiB9IHN5c2NvbmY1eHhfdDsKIAogCiAvKiBNZW1vcnkgQ29udHJvbGxlciBSZWdpc3RlcnMuCiAqLwogdHlwZWRlZiBzdHJ1Y3QJbWVtX2N0bHIgewotICAgICAgICB1aW50IG1lbWNfYnIwOwotICAgICAgICB1aW50IG1lbWNfb3IwOwotICAgICAgICB1aW50IG1lbWNfYnIxOwotICAgICAgICB1aW50IG1lbWNfb3IxOwotICAgICAgICB1aW50IG1lbWNfYnIyOwotICAgICAgICB1aW50IG1lbWNfb3IyOwotICAgICAgICB1aW50IG1lbWNfYnIzOwotICAgICAgICB1aW50IG1lbWNfb3IzOwotICAgICAgICBjaGFyIHJlczFbMzJdOwotICAgICAgICB1aW50IG1lbWNfZG1icjsKLSAgICAgICAgdWludCBtZW1jX2Rtb3I7IAotICAgICAgICBjaGFyIHJlczJbNDhdOyAgICAgICAgCi0gICAgICAgIHVzaG9ydCBtZW1jX21zdGF0OwotICAgICAgICB1c2hvcnQgbWVtY19yZXM0YTsKLSAgICAgICAgY2hhciByZXMzWzEzMl07CisJdWludCBtZW1jX2JyMDsKKwl1aW50IG1lbWNfb3IwOworCXVpbnQgbWVtY19icjE7CisJdWludCBtZW1jX29yMTsKKwl1aW50IG1lbWNfYnIyOworCXVpbnQgbWVtY19vcjI7CisJdWludCBtZW1jX2JyMzsKKwl1aW50IG1lbWNfb3IzOworCWNoYXIgcmVzMVszMl07CisJdWludCBtZW1jX2RtYnI7CisJdWludCBtZW1jX2Rtb3I7CisJY2hhciByZXMyWzQ4XTsKKwl1c2hvcnQgbWVtY19tc3RhdDsKKwl1c2hvcnQgbWVtY19yZXM0YTsKKwljaGFyIHJlczNbMTMyXTsKIH0gbWVtY3RsNXh4X3Q7CiAKIC8qIFN5c3RlbSBJbnRlZ3JhdGlvbiBUaW1lcnMuCiAqLwogdHlwZWRlZiBzdHJ1Y3QJc3lzX2ludF90aW1lcnMgewotICAgICAgICB1c2hvcnQgc2l0X3Ric2NyOwotICAgICAgICBjaGFyIHJlczFbMl07Ci0gICAgICAgIHVpbnQgc2l0X3RicmVmMDsKLSAgICAgICAgdWludCBzaXRfdGJyZWYxOwotICAgICAgICBjaGFyIHJlczJbMjBdOwotICAgICAgICB1c2hvcnQgc2l0X3J0Y3NjOwotICAgICAgICBjaGFyIHJlczNbMl07Ci0gICAgICAgIHVpbnQgc2l0X3J0YzsKLSAgICAgICAgdWludCBzaXRfcnRzZWM7Ci0gICAgICAgIHVpbnQgc2l0X3J0Y2FsOwotICAgICAgICBjaGFyIHJlczRbMTZdOwotICAgICAgICB1c2hvcnQgc2l0X3Bpc2NyOwotICAgICAgICBjaGFyIHJlczVbMl07Ci0gICAgICAgIHVpbnQgc2l0X3BpdGM7Ci0gICAgICAgIHVpbnQgc2l0X3BpdHI7Ci0gICAgICAgIGNoYXIgcmVzNls1Ml07CisJdXNob3J0IHNpdF90YnNjcjsKKwljaGFyIHJlczFbMl07CisJdWludCBzaXRfdGJyZWYwOworCXVpbnQgc2l0X3RicmVmMTsKKwljaGFyIHJlczJbMjBdOworCXVzaG9ydCBzaXRfcnRjc2M7CisJY2hhciByZXMzWzJdOworCXVpbnQgc2l0X3J0YzsKKwl1aW50IHNpdF9ydHNlYzsKKwl1aW50IHNpdF9ydGNhbDsKKwljaGFyIHJlczRbMTZdOworCXVzaG9ydCBzaXRfcGlzY3I7CisJY2hhciByZXM1WzJdOworCXVpbnQgc2l0X3BpdGM7CisJdWludCBzaXRfcGl0cjsKKwljaGFyIHJlczZbNTJdOwogfSBzaXQ1eHhfdDsKIAogLyogQ2xvY2tzIGFuZCBSZXNldAogKi8KIHR5cGVkZWYgc3RydWN0IGNsa19hbmRfcmVzZXQgewotICAgICAgICB1aW50IGNhcl9zY2NyOwotICAgICAgICB1aW50IGNhcl9wbHByY3I7Ci0gICAgICAgIHVzaG9ydCBjYXJfcnNyOwotICAgICAgICB1c2hvcnQgY2FyX3JlczdhOwotICAgICAgICB1c2hvcnQgY2FyX2NvbGlyOwotICAgICAgICB1c2hvcnQgY2FyX3JlczdiOwotICAgICAgICB1c2hvcnQgY2FyX3Zzcm1jcjsKLSAgICAgICAgdXNob3J0IGNhcl9yZXM3YzsKLSAgICAgICAgY2hhciByZXMxWzEwOF07CisJdWludCBjYXJfc2NjcjsKKwl1aW50IGNhcl9wbHByY3I7CisJdXNob3J0IGNhcl9yc3I7CisJdXNob3J0IGNhcl9yZXM3YTsKKwl1c2hvcnQgY2FyX2NvbGlyOworCXVzaG9ydCBjYXJfcmVzN2I7CisJdXNob3J0IGNhcl92c3JtY3I7CisJdXNob3J0IGNhcl9yZXM3YzsKKwljaGFyIHJlczFbMTA4XTsKIAogfSBjYXI1eHhfdDsKIApAQCAtMTE0LDE5ICsxMTQsMTkgQEAKIC8qIFN5c3RlbSBJbnRlZ3JhdGlvbiBUaW1lciBLZXlzCiAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2l0ayB7Ci0gICAgICAgIHVpbnQgc2l0a190YnNjcms7Ci0gICAgICAgIHVpbnQgc2l0a190YnJlZjBrOwotICAgICAgICB1aW50IHNpdGtfdGJyZWYxazsKLSAgICAgICAgdWludCBzaXRrX3RiazsKLSAgICAgICAgY2hhciByZXMxWzE2XTsKLSAgICAgICAgdWludCBzaXRrX3J0Y3NjazsKLSAgICAgICAgdWludCBzaXRrX3J0Y2s7Ci0gICAgICAgIHVpbnQgc2l0a19ydHNlY2s7Ci0gICAgICAgIHVpbnQgc2l0a19ydGNhbGs7Ci0gICAgICAgIGNoYXIgcmVzMlsxNl07Ci0gICAgICAgIHVpbnQgc2l0a19waXNjcms7Ci0gICAgICAgIHVpbnQgc2l0a19waXRjazsKLSAgICAgICAgY2hhciByZXMzWzU2XTsKKwl1aW50IHNpdGtfdGJzY3JrOworCXVpbnQgc2l0a190YnJlZjBrOworCXVpbnQgc2l0a190YnJlZjFrOworCXVpbnQgc2l0a190Yms7CisJY2hhciByZXMxWzE2XTsKKwl1aW50IHNpdGtfcnRjc2NrOworCXVpbnQgc2l0a19ydGNrOworCXVpbnQgc2l0a19ydHNlY2s7CisJdWludCBzaXRrX3J0Y2FsazsKKwljaGFyIHJlczJbMTZdOworCXVpbnQgc2l0a19waXNjcms7CisJdWludCBzaXRrX3BpdGNrOworCWNoYXIgcmVzM1s1Nl07CiB9IHNpdGs1eHhfdDsKIAogLyogQ2xvY2tzIGFuZCBSZXNldCBLZXlzLgpAQCAtMTQ1LDExNCArMTQ1LDExNCBAQAogLyogRmxhc2ggQ29uZmlndXJhdGlvbgogKi8KIHR5cGVkZWYgc3RydWN0IGZsIHsKLSAgICAgICAgdWludCBmbF9jbWZtY3I7Ci0gICAgICAgIHVpbnQgZmxfY21mdHN0OwotICAgICAgICB1aW50IGZsX2NtZmN0bDsKLSAgICAgICAgY2hhciByZXMxWzUyXTsKKwl1aW50IGZsX2NtZm1jcjsKKwl1aW50IGZsX2NtZnRzdDsKKwl1aW50IGZsX2NtZmN0bDsKKwljaGFyIHJlczFbNTJdOwogfSBmbDV4eF90OwogCiAvKiBEcHJhbSBDb250cm9sCiAqLwotdHlwZWRlZiBzdHJ1Y3QgZHByYyB7CQkKLSAgICAgICAgdXNob3J0IGRwcmNfZHB0bWNyOwotICAgICAgICB1c2hvcnQgZHByY19yYW10c3Q7Ci0gICAgICAgIHVzaG9ydCBkcHJjX3JhbWJhcjsKLSAgICAgICAgdXNob3J0IGRwcmNfbWlzcmg7Ci0gICAgICAgIHVzaG9ydCBkcHJjX21pc3JsOwotICAgICAgICB1c2hvcnQgZHByY19taXNjbnQ7Cit0eXBlZGVmIHN0cnVjdCBkcHJjIHsKKwl1c2hvcnQgZHByY19kcHRtY3I7CisJdXNob3J0IGRwcmNfcmFtdHN0OworCXVzaG9ydCBkcHJjX3JhbWJhcjsKKwl1c2hvcnQgZHByY19taXNyaDsKKwl1c2hvcnQgZHByY19taXNybDsKKwl1c2hvcnQgZHByY19taXNjbnQ7CiB9IGRwcmM1eHhfdDsKIAogLyogVGltZSBQcm9jZXNzb3IgVW5pdAogKi8KIHR5cGVkZWYgc3RydWN0IHRwdSB7Ci0gICAgICAgIHVzaG9ydCB0cHVfdHB1bWNyOwotICAgICAgICB1c2hvcnQgdHB1X3RjcjsKLSAgICAgICAgdXNob3J0IHRwdV9kc2NyOwotICAgICAgICB1c2hvcnQgdHB1X2Rzc3I7Ci0gICAgICAgIHVzaG9ydCB0cHVfdGljcjsKLSAgICAgICAgdXNob3J0IHRwdV9jaWVyOwotICAgICAgICB1c2hvcnQgdHB1X2Nmc3IwOwotICAgICAgICB1c2hvcnQgdHB1X2Nmc3IxOwotICAgICAgICB1c2hvcnQgdHB1X2Nmc3IyOwotICAgICAgICB1c2hvcnQgdHB1X2Nmc3IzOwotICAgICAgICB1c2hvcnQgdHB1X2hzcXIwOwotICAgICAgICB1c2hvcnQgdHB1X2hzcXIxOwotICAgICAgICB1c2hvcnQgdHB1X2hzcnIwOwotICAgICAgICB1c2hvcnQgdHB1X2hzcnIxOwotICAgICAgICB1c2hvcnQgdHB1X2NwcjA7Ci0gICAgICAgIHVzaG9ydCB0cHVfY3ByMTsKLSAgICAgICAgdXNob3J0IHRwdV9jaXNyOwotICAgICAgICB1c2hvcnQgdHB1X2xyOwotICAgICAgICB1c2hvcnQgdHB1X3NnbHI7Ci0gICAgICAgIHVzaG9ydCB0cHVfZGNucjsKLSAgICAgICAgdXNob3J0IHRwdV90cHVtY3IyOwotICAgICAgICB1c2hvcnQgdHB1X3RwdW1jcjM7Ci0gICAgICAgIHVzaG9ydCB0cHVfaXNkcjsKLSAgICAgICAgdXNob3J0IHRwdV9pc2NyOwotICAgICAgICBjaGFyICAgcmVzMVsyMDhdOwotICAgICAgICBjaGFyICAgdHB1WzE2XVsxNl07Ci0gICAgICAgIGNoYXIgICByZXMyWzUxMl07CisJdXNob3J0IHRwdV90cHVtY3I7CisJdXNob3J0IHRwdV90Y3I7CisJdXNob3J0IHRwdV9kc2NyOworCXVzaG9ydCB0cHVfZHNzcjsKKwl1c2hvcnQgdHB1X3RpY3I7CisJdXNob3J0IHRwdV9jaWVyOworCXVzaG9ydCB0cHVfY2ZzcjA7CisJdXNob3J0IHRwdV9jZnNyMTsKKwl1c2hvcnQgdHB1X2Nmc3IyOworCXVzaG9ydCB0cHVfY2ZzcjM7CisJdXNob3J0IHRwdV9oc3FyMDsKKwl1c2hvcnQgdHB1X2hzcXIxOworCXVzaG9ydCB0cHVfaHNycjA7CisJdXNob3J0IHRwdV9oc3JyMTsKKwl1c2hvcnQgdHB1X2NwcjA7CisJdXNob3J0IHRwdV9jcHIxOworCXVzaG9ydCB0cHVfY2lzcjsKKwl1c2hvcnQgdHB1X2xyOworCXVzaG9ydCB0cHVfc2dscjsKKwl1c2hvcnQgdHB1X2RjbnI7CisJdXNob3J0IHRwdV90cHVtY3IyOworCXVzaG9ydCB0cHVfdHB1bWNyMzsKKwl1c2hvcnQgdHB1X2lzZHI7CisJdXNob3J0IHRwdV9pc2NyOworCWNoYXIgICByZXMxWzIwOF07CisJY2hhciAgIHRwdVsxNl1bMTZdOworCWNoYXIgICByZXMyWzUxMl07CiB9IHRwdTV4eF90OwogCiAvKiBRQURDCiAqLwogdHlwZWRlZiBzdHJ1Y3QgcWFkYyB7Ci0gICAgICAgIHVzaG9ydCBxYWRjXzY0bWNyOwotICAgICAgICB1c2hvcnQgcWFkY182NHRlc3Q7Ci0gICAgICAgIHVzaG9ydCBxYWRjXzY0aW50OwotICAgICAgICB1X2NoYXIgIHFhZGNfcG9ydHFhOwotICAgICAgICB1X2NoYXIgIHFhZGNfcG9ydHFiOwotICAgICAgICB1c2hvcnQgcWFkY19kZHJxYTsKLSAgICAgICAgdXNob3J0IHFhZGNfcWFjcjA7Ci0gICAgICAgIHVzaG9ydCBxYWRjX3FhY3IxOwotICAgICAgICB1c2hvcnQgcWFkY19xYWNyMjsKLSAgICAgICAgdXNob3J0IHFhZGNfcWFzcjA7Ci0gICAgICAgIHVzaG9ydCBxYWRjX3Fhc3IxOwotICAgICAgICBjaGFyICAgcmVzMVs0OTJdOworCXVzaG9ydCBxYWRjXzY0bWNyOworCXVzaG9ydCBxYWRjXzY0dGVzdDsKKwl1c2hvcnQgcWFkY182NGludDsKKwl1X2NoYXIgIHFhZGNfcG9ydHFhOworCXVfY2hhciAgcWFkY19wb3J0cWI7CisJdXNob3J0IHFhZGNfZGRycWE7CisJdXNob3J0IHFhZGNfcWFjcjA7CisJdXNob3J0IHFhZGNfcWFjcjE7CisJdXNob3J0IHFhZGNfcWFjcjI7CisJdXNob3J0IHFhZGNfcWFzcjA7CisJdXNob3J0IHFhZGNfcWFzcjE7CisJY2hhciAgIHJlczFbNDkyXTsKICAgICAgICAvKiBjb21tYW5kIGNvbnZlcnRpb24gd29yZCB0YWJsZSAqLwotICAgICAgICB1c2hvcnQgcWFkY19jY3dbNjRdOworCXVzaG9ydCBxYWRjX2Njd1s2NF07CiAgICAgICAgLyogcmVzdWx0IHdvcmQgdGFibGUsIHVuc2lnbmVkIHJpZ2h0IGp1c3RpZmllZCAqLwotICAgICAgICB1c2hvcnQgcWFkY19yanVycls2NF07CisJdXNob3J0IHFhZGNfcmp1cnJbNjRdOwogICAgICAgIC8qIHJlc3VsdCB3b3JkIHRhYmxlLCBzaWduZWQgbGVmdCBqdXN0aWZpZWQgKi8KLSAgICAgICAgdXNob3J0IHFhZGNfbGpzcnJbNjRdOworCXVzaG9ydCBxYWRjX2xqc3JyWzY0XTsKICAgICAgICAvKiByZXN1bHQgd29yZCB0YWJsZSwgdW5zaWduZWQgbGVmdCBqdXN0aWZpZWQgKi8KLSAgICAgICAgdXNob3J0IHFhZGNfbGp1cnJbNjRdOworCXVzaG9ydCBxYWRjX2xqdXJyWzY0XTsKIH0gcWFkYzV4eF90OwogCiAvKiBRU01DTQogKi8KIHR5cGVkZWYgc3RydWN0IHFzbWNtIHsKLSAgICAgICAgdXNob3J0IHFzbWNtX3FzbWNyOwotICAgICAgICB1c2hvcnQgcXNtY21fcXRlc3Q7Ci0gICAgICAgIHVzaG9ydCBxc21jbV9xZHNjaV9pbDsKLSAgICAgICAgdXNob3J0IHFzbWNtX3FzcGlfaWw7Ci0gICAgICAgIHVzaG9ydCBxc21jbV9zY2MxcjA7Ci0gICAgICAgIHVzaG9ydCBxc21jbV9zY2MxcjE7Ci0gICAgICAgIHVzaG9ydCBxc21jbV9zYzFzcjsKLSAgICAgICAgdXNob3J0IHFzbWNtX3NjMWRyOwotICAgICAgICBjaGFyICAgcmVzMVsyXTsKLSAgICAgICAgY2hhciAgIHJlczJbMl07Ci0gICAgICAgIHVzaG9ydCBxc21jbV9wb3J0cXM7Ci0gICAgICAgIHVfY2hhciBxc21jbV9wcXNwYXI7Ci0gICAgICAgIHVfY2hhciBxc21jbV9kZHJxczsKLSAgICAgICAgdXNob3J0IHFzbWNtX3NwY3IwOwotICAgICAgICB1c2hvcnQgcXNtY21fc3BjcjE7Ci0gICAgICAgIHVzaG9ydCBxc21jbV9zcGNyMjsKLSAgICAgICAgdV9jaGFyIHFzbWNtX3NwY3IzOwotICAgICAgICB1X2NoYXIgcXNtY21fc3BzcjsKLSAgICAgICAgdXNob3J0IHFzbWNtX3NjYzJyMDsKLSAgICAgICAgdXNob3J0IHFzbWNtX3NjYzJyMTsKLSAgICAgICAgdXNob3J0IHFzbWNtX3NjMnNyOwotICAgICAgICB1c2hvcnQgcXNtY21fc2MyZHI7Ci0gICAgICAgIHVzaG9ydCBxc21jbV9xc2NpMWNyOwotICAgICAgICB1c2hvcnQgcXNtY21fcXNjaTFzcjsKLSAgICAgICAgdXNob3J0IHFzbWNtX3NjdHFbMTZdOwotICAgICAgICB1c2hvcnQgcXNtY21fc2NycVsxNl07Ci0gICAgICAgIGNoYXIgICByZXMzWzIxMl07Ci0gICAgICAgIHVzaG9ydCBxc21jbV9yZWNyYW1bMzJdOwotICAgICAgICB1c2hvcnQgcXNtY21fdHJhbnJhbVszMl07Ci0gICAgICAgIHVfY2hhciBxc21jbV9jb21kcmFtWzMyXTsKLSAgICAgICAgY2hhciAgIHJlc1szNjE2XTsKKwl1c2hvcnQgcXNtY21fcXNtY3I7CisJdXNob3J0IHFzbWNtX3F0ZXN0OworCXVzaG9ydCBxc21jbV9xZHNjaV9pbDsKKwl1c2hvcnQgcXNtY21fcXNwaV9pbDsKKwl1c2hvcnQgcXNtY21fc2NjMXIwOworCXVzaG9ydCBxc21jbV9zY2MxcjE7CisJdXNob3J0IHFzbWNtX3NjMXNyOworCXVzaG9ydCBxc21jbV9zYzFkcjsKKwljaGFyICAgcmVzMVsyXTsKKwljaGFyICAgcmVzMlsyXTsKKwl1c2hvcnQgcXNtY21fcG9ydHFzOworCXVfY2hhciBxc21jbV9wcXNwYXI7CisJdV9jaGFyIHFzbWNtX2RkcnFzOworCXVzaG9ydCBxc21jbV9zcGNyMDsKKwl1c2hvcnQgcXNtY21fc3BjcjE7CisJdXNob3J0IHFzbWNtX3NwY3IyOworCXVfY2hhciBxc21jbV9zcGNyMzsKKwl1X2NoYXIgcXNtY21fc3BzcjsKKwl1c2hvcnQgcXNtY21fc2NjMnIwOworCXVzaG9ydCBxc21jbV9zY2MycjE7CisJdXNob3J0IHFzbWNtX3NjMnNyOworCXVzaG9ydCBxc21jbV9zYzJkcjsKKwl1c2hvcnQgcXNtY21fcXNjaTFjcjsKKwl1c2hvcnQgcXNtY21fcXNjaTFzcjsKKwl1c2hvcnQgcXNtY21fc2N0cVsxNl07CisJdXNob3J0IHFzbWNtX3NjcnFbMTZdOworCWNoYXIgICByZXMzWzIxMl07CisJdXNob3J0IHFzbWNtX3JlY3JhbVszMl07CisJdXNob3J0IHFzbWNtX3RyYW5yYW1bMzJdOworCXVfY2hhciBxc21jbV9jb21kcmFtWzMyXTsKKwljaGFyICAgcmVzWzM2MTZdOwogfSBxc21jbTV4eF90OwogCiAKQEAgLTI2MCwxMzYgKzI2MCwxMzYgQEAKICovCiAKIHR5cGVkZWYgc3RydWN0IG1pb3MgewotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20wcGVycjsgICAgICAgICAgICAgICAgIC8qIG1wd21zbTAgKi8KLSAgICAgICAgdXNob3J0IG1pb3NfbXB3bXNtMHB1bHI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21wd21zbTBjbnRyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20wc2NyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20xcGVycjsgICAgICAgICAgICAgICAgIC8qIG1wd21zbTEgKi8KLSAgICAgICAgdXNob3J0IG1pb3NfbXB3bXNtMXB1bHI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21wd21zbTFjbnRyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20xc2NyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20ycGVycjsgICAgICAgICAgICAgICAgIC8qIG1wd21zbTIgKi8KLSAgICAgICAgdXNob3J0IG1pb3NfbXB3bXNtMnB1bHI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21wd21zbTJjbnRyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20yc2NyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20zcGVycjsgICAgICAgICAgICAgICAgIC8qIG1wd21zbTMgKi8KLSAgICAgICAgdXNob3J0IG1pb3NfbXB3bXNtM3B1bHI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21wd21zbTNjbnRyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20zc2NyOwotICAgICAgICBjaGFyIHJlczFbMTZdOwotICAgICAgICB1c2hvcnQgbWlvc19tbWNzbTZjbnQ7ICAgICAgICAgICAgICAgICAgIC8qIG1tY3NtNiAqLwotICAgICAgICB1c2hvcnQgbWlvc19tbWNzbTZtbHI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21tY3NtNnNjcmQsIG1tY3NtNnNjcjsKLSAgICAgICAgY2hhciByZXMyWzMyXTsKLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20xMWFyOyAgICAgICAgICAgICAgICAgICAvKiBtZGFzbTExICovCi0gICAgICAgIHVzaG9ydCBtaW9zX21kYXNtMTFicjsKLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20xMXNjcmQsIG1kYXNtMTFzY3I7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21kYXNtMTJhcjsgICAgICAgICAgICAgICAgICAgLyogbWRhc20xMiAqLwotICAgICAgICB1c2hvcnQgbWlvc19tZGFzbTEyYnI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21kYXNtMTJzY3JkLCBtZGFzbTEyc2NyOwotICAgICAgICB1c2hvcnQgbWlvc19tZGFzbTEzYXI7ICAgICAgICAgICAgICAgICAgIC8qIG1kYXNtMTMgKi8KLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20xM2JyOwotICAgICAgICB1c2hvcnQgbWlvc19tZGFzbTEzc2NyZCwgbWRhc20xM3NjcjsKLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20xNGFyOyAgICAgICAgICAgICAgICAgICAvKiBtZGFzbTE0ICovCi0gICAgICAgIHVzaG9ydCBtaW9zX21kYXNtMTRicjsKLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20xNHNjcmQsIG1kYXNtMTRzY3I7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21kYXNtMTVhcjsgICAgICAgICAgICAgICAgICAgLyogbWRhc20xNSAqLwotICAgICAgICB1c2hvcnQgbWlvc19tZGFzbTE1YnI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21kYXNtMTVzY3JkLCBtZGFzbTE1c2NyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20xNnBlcnI7ICAgICAgICAgICAgICAgIC8qIG1wd21zbTE2ICovCi0gICAgICAgIHVzaG9ydCBtaW9zX21wd21zbTE2cHVscjsKLSAgICAgICAgdXNob3J0IG1pb3NfbXB3bXNtMTZjbnRyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20xNnNjcjsKLSAgICAgICAgdXNob3J0IG1pb3NfbXB3bXNtMTdwZXJyOyAgICAgICAgICAgICAgICAvKiBtcHdtc20xNyAqLwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20xN3B1bHI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21wd21zbTE3Y250cjsKLSAgICAgICAgdXNob3J0IG1pb3NfbXB3bXNtMTdzY3I7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21wd21zbTE4cGVycjsgICAgICAgICAgICAgICAgLyogbXB3bXNtMTggKi8KLSAgICAgICAgdXNob3J0IG1pb3NfbXB3bXNtMThwdWxyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20xOGNudHI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21wd21zbTE4c2NyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20xOXBlcnI7ICAgICAgICAgICAgICAgIC8qIG1wd21zbTE5ICovCi0gICAgICAgIHVzaG9ydCBtaW9zX21wd21zbTE5cHVscjsKLSAgICAgICAgdXNob3J0IG1pb3NfbXB3bXNtMTljbnRyOwotICAgICAgICB1c2hvcnQgbWlvc19tcHdtc20xOXNjcjsKLSAgICAgICAgY2hhciByZXMzWzE2XTsKLSAgICAgICAgdXNob3J0IG1pb3NfbW1jc20yMmNudDsgICAgICAgICAgICAgICAgICAvKiBtbWNzbTIyICovCi0gICAgICAgIHVzaG9ydCBtaW9zX21tY3NtMjJtbHI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21tY3NtMjJzY3JkLCBtbWNzbTIyc2NyOwotICAgICAgICBjaGFyIHJlczRbMzJdOwotICAgICAgICB1c2hvcnQgbWlvc19tZGFzbTI3YXI7ICAgICAgICAgICAgICAgICAgIC8qIG1kYXNtMjcgKi8KLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20yN2JyOwotICAgICAgICB1c2hvcnQgbWlvc19tZGFzbTI3c2NyZCwgbWRhc20yN3NjcjsKLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20yOGFyOyAgICAgICAgICAgICAgICAgICAvKm1kYXNtMjggKi8KLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20yOGJyOwotICAgICAgICB1c2hvcnQgbWlvc19tZGFzbTI4c2NyZCwgbWRhc20yOHNjcjsKLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20yOWFyOyAgICAgICAgICAgICAgICAgICAvKiBtZGFzbTI5ICovCi0gICAgICAgIHVzaG9ydCBtaW9zX21kYXNtMjlicjsKLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20yOXNjcmQsIG1kYXNtMjlzY3I7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21kYXNtMzBhcjsgICAgICAgICAgICAgICAgICAgLyogbWRhc20zMCAqLwotICAgICAgICB1c2hvcnQgbWlvc19tZGFzbTMwYnI7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21kYXNtMzBzY3JkLCBtZGFzbTMwc2NyOwotICAgICAgICB1c2hvcnQgbWlvc19tZGFzbTMxYXI7ICAgICAgICAgICAgICAgICAgIC8qIG1kYXNtMzEgKi8KLSAgICAgICAgdXNob3J0IG1pb3NfbWRhc20zMWJyOwotICAgICAgICB1c2hvcnQgbWlvc19tZGFzbTMxc2NyZCwgbWRhc20zMXNjcjsKLSAgICAgICAgdXNob3J0IG1pb3NfbXBpb3NtMzJkcjsKLSAgICAgICAgdXNob3J0IG1pb3NfbXBpb3NtMzJkZHI7Ci0gICAgICAgIGNoYXIgcmVzNVsxNzg4XTsKLSAgICAgICAgdXNob3J0IG1pb3NfbWlvczF0cGNyOwotICAgICAgICBjaGFyIG1pb3NfcmVzMTNbMl07Ci0gICAgICAgIHVzaG9ydCBtaW9zX21pb3Mxdm5yOwotICAgICAgICB1c2hvcnQgbWlvc19taW9zMW1jcjsKLSAgICAgICAgY2hhciByZXM2WzEyXTsKLSAgICAgICAgdXNob3J0IG1pb3NfcmVzNDJ6OwotICAgICAgICB1c2hvcnQgbWlvc19tY3BzbXNjcjsKLSAgICAgICAgY2hhciByZXM3WzEwMDBdOwotICAgICAgICB1c2hvcnQgbWlvc19taW9zMXNyMDsKLSAgICAgICAgY2hhciByZXMxMlsyXTsKLSAgICAgICAgdXNob3J0IG1pb3NfbWlvczFlcjA7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21pb3MxcnByMDsKLSAgICAgICAgY2hhciByZXM4WzQwXTsKLSAgICAgICAgdXNob3J0IG1pb3NfbWlvczFsdmwwOwotICAgICAgICBjaGFyIHJlczlbMTRdOwotICAgICAgICB1c2hvcnQgbWlvc19taW9zMXNyMTsKLSAgICAgICAgY2hhciByZXMxMFsyXTsKLSAgICAgICAgdXNob3J0IG1pb3NfbWlvczFlcjE7Ci0gICAgICAgIHVzaG9ydCBtaW9zX21pb3MxcnByMTsKLSAgICAgICAgY2hhciByZXMxMVs0MF07Ci0gICAgICAgIHVzaG9ydCBtaW9zX21pb3MxbHZsMTsKLSAgICAgICAgY2hhciByZXMxM1sxMDM4XTsKKwl1c2hvcnQgbWlvc19tcHdtc20wcGVycjsgICAgICAgICAgICAgICAgIC8qIG1wd21zbTAgKi8KKwl1c2hvcnQgbWlvc19tcHdtc20wcHVscjsKKwl1c2hvcnQgbWlvc19tcHdtc20wY250cjsKKwl1c2hvcnQgbWlvc19tcHdtc20wc2NyOworCXVzaG9ydCBtaW9zX21wd21zbTFwZXJyOyAgICAgICAgICAgICAgICAgLyogbXB3bXNtMSAqLworCXVzaG9ydCBtaW9zX21wd21zbTFwdWxyOworCXVzaG9ydCBtaW9zX21wd21zbTFjbnRyOworCXVzaG9ydCBtaW9zX21wd21zbTFzY3I7CisJdXNob3J0IG1pb3NfbXB3bXNtMnBlcnI7ICAgICAgICAgICAgICAgICAvKiBtcHdtc20yICovCisJdXNob3J0IG1pb3NfbXB3bXNtMnB1bHI7CisJdXNob3J0IG1pb3NfbXB3bXNtMmNudHI7CisJdXNob3J0IG1pb3NfbXB3bXNtMnNjcjsKKwl1c2hvcnQgbWlvc19tcHdtc20zcGVycjsgICAgICAgICAgICAgICAgIC8qIG1wd21zbTMgKi8KKwl1c2hvcnQgbWlvc19tcHdtc20zcHVscjsKKwl1c2hvcnQgbWlvc19tcHdtc20zY250cjsKKwl1c2hvcnQgbWlvc19tcHdtc20zc2NyOworCWNoYXIgcmVzMVsxNl07CisJdXNob3J0IG1pb3NfbW1jc202Y250OyAgICAgICAgICAgICAgICAgICAvKiBtbWNzbTYgKi8KKwl1c2hvcnQgbWlvc19tbWNzbTZtbHI7CisJdXNob3J0IG1pb3NfbW1jc202c2NyZCwgbW1jc202c2NyOworCWNoYXIgcmVzMlszMl07CisJdXNob3J0IG1pb3NfbWRhc20xMWFyOyAgICAgICAgICAgICAgICAgICAvKiBtZGFzbTExICovCisJdXNob3J0IG1pb3NfbWRhc20xMWJyOworCXVzaG9ydCBtaW9zX21kYXNtMTFzY3JkLCBtZGFzbTExc2NyOworCXVzaG9ydCBtaW9zX21kYXNtMTJhcjsgICAgICAgICAgICAgICAgICAgLyogbWRhc20xMiAqLworCXVzaG9ydCBtaW9zX21kYXNtMTJicjsKKwl1c2hvcnQgbWlvc19tZGFzbTEyc2NyZCwgbWRhc20xMnNjcjsKKwl1c2hvcnQgbWlvc19tZGFzbTEzYXI7ICAgICAgICAgICAgICAgICAgIC8qIG1kYXNtMTMgKi8KKwl1c2hvcnQgbWlvc19tZGFzbTEzYnI7CisJdXNob3J0IG1pb3NfbWRhc20xM3NjcmQsIG1kYXNtMTNzY3I7CisJdXNob3J0IG1pb3NfbWRhc20xNGFyOyAgICAgICAgICAgICAgICAgICAvKiBtZGFzbTE0ICovCisJdXNob3J0IG1pb3NfbWRhc20xNGJyOworCXVzaG9ydCBtaW9zX21kYXNtMTRzY3JkLCBtZGFzbTE0c2NyOworCXVzaG9ydCBtaW9zX21kYXNtMTVhcjsgICAgICAgICAgICAgICAgICAgLyogbWRhc20xNSAqLworCXVzaG9ydCBtaW9zX21kYXNtMTVicjsKKwl1c2hvcnQgbWlvc19tZGFzbTE1c2NyZCwgbWRhc20xNXNjcjsKKwl1c2hvcnQgbWlvc19tcHdtc20xNnBlcnI7ICAgICAgICAgICAgICAgIC8qIG1wd21zbTE2ICovCisJdXNob3J0IG1pb3NfbXB3bXNtMTZwdWxyOworCXVzaG9ydCBtaW9zX21wd21zbTE2Y250cjsKKwl1c2hvcnQgbWlvc19tcHdtc20xNnNjcjsKKwl1c2hvcnQgbWlvc19tcHdtc20xN3BlcnI7ICAgICAgICAgICAgICAgIC8qIG1wd21zbTE3ICovCisJdXNob3J0IG1pb3NfbXB3bXNtMTdwdWxyOworCXVzaG9ydCBtaW9zX21wd21zbTE3Y250cjsKKwl1c2hvcnQgbWlvc19tcHdtc20xN3NjcjsKKwl1c2hvcnQgbWlvc19tcHdtc20xOHBlcnI7ICAgICAgICAgICAgICAgIC8qIG1wd21zbTE4ICovCisJdXNob3J0IG1pb3NfbXB3bXNtMThwdWxyOworCXVzaG9ydCBtaW9zX21wd21zbTE4Y250cjsKKwl1c2hvcnQgbWlvc19tcHdtc20xOHNjcjsKKwl1c2hvcnQgbWlvc19tcHdtc20xOXBlcnI7ICAgICAgICAgICAgICAgIC8qIG1wd21zbTE5ICovCisJdXNob3J0IG1pb3NfbXB3bXNtMTlwdWxyOworCXVzaG9ydCBtaW9zX21wd21zbTE5Y250cjsKKwl1c2hvcnQgbWlvc19tcHdtc20xOXNjcjsKKwljaGFyIHJlczNbMTZdOworCXVzaG9ydCBtaW9zX21tY3NtMjJjbnQ7ICAgICAgICAgICAgICAgICAgLyogbW1jc20yMiAqLworCXVzaG9ydCBtaW9zX21tY3NtMjJtbHI7CisJdXNob3J0IG1pb3NfbW1jc20yMnNjcmQsIG1tY3NtMjJzY3I7CisJY2hhciByZXM0WzMyXTsKKwl1c2hvcnQgbWlvc19tZGFzbTI3YXI7ICAgICAgICAgICAgICAgICAgIC8qIG1kYXNtMjcgKi8KKwl1c2hvcnQgbWlvc19tZGFzbTI3YnI7CisJdXNob3J0IG1pb3NfbWRhc20yN3NjcmQsIG1kYXNtMjdzY3I7CisJdXNob3J0IG1pb3NfbWRhc20yOGFyOyAgICAgICAgICAgICAgICAgICAvKm1kYXNtMjggKi8KKwl1c2hvcnQgbWlvc19tZGFzbTI4YnI7CisJdXNob3J0IG1pb3NfbWRhc20yOHNjcmQsIG1kYXNtMjhzY3I7CisJdXNob3J0IG1pb3NfbWRhc20yOWFyOyAgICAgICAgICAgICAgICAgICAvKiBtZGFzbTI5ICovCisJdXNob3J0IG1pb3NfbWRhc20yOWJyOworCXVzaG9ydCBtaW9zX21kYXNtMjlzY3JkLCBtZGFzbTI5c2NyOworCXVzaG9ydCBtaW9zX21kYXNtMzBhcjsgICAgICAgICAgICAgICAgICAgLyogbWRhc20zMCAqLworCXVzaG9ydCBtaW9zX21kYXNtMzBicjsKKwl1c2hvcnQgbWlvc19tZGFzbTMwc2NyZCwgbWRhc20zMHNjcjsKKwl1c2hvcnQgbWlvc19tZGFzbTMxYXI7ICAgICAgICAgICAgICAgICAgIC8qIG1kYXNtMzEgKi8KKwl1c2hvcnQgbWlvc19tZGFzbTMxYnI7CisJdXNob3J0IG1pb3NfbWRhc20zMXNjcmQsIG1kYXNtMzFzY3I7CisJdXNob3J0IG1pb3NfbXBpb3NtMzJkcjsKKwl1c2hvcnQgbWlvc19tcGlvc20zMmRkcjsKKwljaGFyIHJlczVbMTc4OF07CisJdXNob3J0IG1pb3NfbWlvczF0cGNyOworCWNoYXIgbWlvc19yZXMxM1syXTsKKwl1c2hvcnQgbWlvc19taW9zMXZucjsKKwl1c2hvcnQgbWlvc19taW9zMW1jcjsKKwljaGFyIHJlczZbMTJdOworCXVzaG9ydCBtaW9zX3JlczQyejsKKwl1c2hvcnQgbWlvc19tY3BzbXNjcjsKKwljaGFyIHJlczdbMTAwMF07CisJdXNob3J0IG1pb3NfbWlvczFzcjA7CisJY2hhciByZXMxMlsyXTsKKwl1c2hvcnQgbWlvc19taW9zMWVyMDsKKwl1c2hvcnQgbWlvc19taW9zMXJwcjA7CisJY2hhciByZXM4WzQwXTsKKwl1c2hvcnQgbWlvc19taW9zMWx2bDA7CisJY2hhciByZXM5WzE0XTsKKwl1c2hvcnQgbWlvc19taW9zMXNyMTsKKwljaGFyIHJlczEwWzJdOworCXVzaG9ydCBtaW9zX21pb3MxZXIxOworCXVzaG9ydCBtaW9zX21pb3MxcnByMTsKKwljaGFyIHJlczExWzQwXTsKKwl1c2hvcnQgbWlvc19taW9zMWx2bDE7CisJY2hhciByZXMxM1sxMDM4XTsKIH0gbWlvczV4eF90OwogCiAvKiBUb3VjYW4gTW9kdWxlCiAqLwogdHlwZWRlZiBzdHJ1Y3QgdGNhbiB7Ci0gICAgICAgIHVzaG9ydCB0Y2FuX3Rjbm1jcjsKLSAgICAgICAgdXNob3J0IHRjYW5fY2FudGNyOwotICAgICAgICB1c2hvcnQgdGNhbl9jYW5pY3I7Ci0gICAgICAgIHVfY2hhciB0Y2FuX2NhbmN0cmwwOwotICAgICAgICB1X2NoYXIgdGNhbl9jYW5jdHJsMTsKLSAgICAgICAgdV9jaGFyIHRjYW5fcHJlc2RpdjsKLSAgICAgICAgdV9jaGFyIHRjYW5fY2FuY3RybDI7Ci0gICAgICAgIHVzaG9ydCB0Y2FuX3RpbWVyOwotICAgICAgICBjaGFyIHJlczFbNF07Ci0gICAgICAgIHVzaG9ydCB0Y2FuX3J4Z21za2hpOwotICAgICAgICB1c2hvcnQgdGNhbl9yeGdtc2tsbzsKLSAgICAgICAgdXNob3J0IHRjYW5fcngxNG1za2hpOwotICAgICAgICB1c2hvcnQgdGNhbl9yeDE0bXNrbG87Ci0gICAgICAgIHVzaG9ydCB0Y2FuX3J4MTVtc2toaTsKLSAgICAgICAgdXNob3J0IHRjYW5fcngxNW1za2xvOwotICAgICAgICBjaGFyIHJlczJbNF07Ci0gICAgICAgIHVzaG9ydCB0Y2FuX2VzdGF0OwotICAgICAgICB1c2hvcnQgdGNhbl9pbWFzazsKLSAgICAgICAgdXNob3J0IHRjYW5faWZsYWc7Ci0gICAgICAgIHVfY2hhciB0Y2FuX3J4ZWN0cjsKLSAgICAgICAgdV9jaGFyIHRjYW5fdHhlY3RyOwotICAgICAgICBjaGFyIHJlczNbODhdOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgICAgdXNob3J0IHNjcjsKLSAgICAgICAgICAgICAgIHVzaG9ydCBpZF9oaWdoOwotICAgICAgICAgICAgICAgdXNob3J0IGlkX2xvdzsKLSAgICAgICAgICAgICAgIHVfY2hhciBkYXRhWzhdOwotCSAgICAgICAgICAgY2hhciByZXM0WzJdOworCXVzaG9ydCB0Y2FuX3Rjbm1jcjsKKwl1c2hvcnQgdGNhbl9jYW50Y3I7CisJdXNob3J0IHRjYW5fY2FuaWNyOworCXVfY2hhciB0Y2FuX2NhbmN0cmwwOworCXVfY2hhciB0Y2FuX2NhbmN0cmwxOworCXVfY2hhciB0Y2FuX3ByZXNkaXY7CisJdV9jaGFyIHRjYW5fY2FuY3RybDI7CisJdXNob3J0IHRjYW5fdGltZXI7CisJY2hhciByZXMxWzRdOworCXVzaG9ydCB0Y2FuX3J4Z21za2hpOworCXVzaG9ydCB0Y2FuX3J4Z21za2xvOworCXVzaG9ydCB0Y2FuX3J4MTRtc2toaTsKKwl1c2hvcnQgdGNhbl9yeDE0bXNrbG87CisJdXNob3J0IHRjYW5fcngxNW1za2hpOworCXVzaG9ydCB0Y2FuX3J4MTVtc2tsbzsKKwljaGFyIHJlczJbNF07CisJdXNob3J0IHRjYW5fZXN0YXQ7CisJdXNob3J0IHRjYW5faW1hc2s7CisJdXNob3J0IHRjYW5faWZsYWc7CisJdV9jaGFyIHRjYW5fcnhlY3RyOworCXVfY2hhciB0Y2FuX3R4ZWN0cjsKKwljaGFyIHJlczNbODhdOworCXN0cnVjdCB7CisJICAgICAgIHVzaG9ydCBzY3I7CisJICAgICAgIHVzaG9ydCBpZF9oaWdoOworCSAgICAgICB1c2hvcnQgaWRfbG93OworCSAgICAgICB1X2NoYXIgZGF0YVs4XTsKKwkJICAgY2hhciByZXM0WzJdOwogCSAgICB9IHRjYW5fbWJ1ZmZbMTZdOwogCSAgICBjaGFyIHJlczVbNjQwXTsKIH0gdGNhbjV4eF90OwpAQCAtMzk3LDQ0ICszOTcsNDMgQEAKIC8qIFVJTUIKICovCiB0eXBlZGVmIHN0cnVjdCB1aW1iIHsKLSAgICAgICAgdWludCB1aW1iX3VtY3I7Ci0gICAgICAgIGNoYXIgcmVzMVsxMl07Ci0gICAgICAgIHVpbnQgdWltYl91dHN0Y3JlZzsKLSAgICAgICAgY2hhciByZXMyWzEyXTsKLSAgICAgICAgdWludCB1aW1iX3VpcGVuZDsKKwl1aW50IHVpbWJfdW1jcjsKKwljaGFyIHJlczFbMTJdOworCXVpbnQgdWltYl91dHN0Y3JlZzsKKwljaGFyIHJlczJbMTJdOworCXVpbnQgdWltYl91aXBlbmQ7CiB9IHVpbWI1eHhfdDsKIAogCi0KIC8qIEludGVybmFsIE1lbW9yeSBNYXAgTVBDNTU1CiAqLwogdHlwZWRlZiBzdHJ1Y3QgaW1tYXAgewotICAgICAgICBjaGFyICAgICAgICAgICAgICAgcmVzMVsyNjIxNDRdOyAgICAgICAJLyogQ01GIEZsYXNoIEEgMjU2IEtieXRlcyAqLwotICAgICAgICBjaGFyICAgICAgICAgICAgICAgcmVzMlsxOTY2MDhdOyAgICAgICAJLyogQ01GIEZsYXNoIEIgMTkyIEtieXRlcyAqLwotICAgICAgICBjaGFyICAgICAgICAgICAgICAgcmVzM1syNjcwNTkyXTsgICAgICAJLyogUmVzZXJ2ZWQgZm9yIEZsYXNoICovCi0gICAgICAgIHN5c2NvbmY1eHhfdCAgICAgICBpbV9zaXVfY29uZjsgICAgICAgIAkvKiBTSVUgQ29uZmlndXJhdGlvbiAqLwotICAgICAgICBtZW1jdGw1eHhfdAkgICBpbV9tZW1jdGw7CQkvKiBNZW1vcnkgQ29udHJvbGxlciAqLwotICAgICAgICBzaXQ1eHhfdCAgICAgICAgICAgaW1fc2l0OwkJLyogU3lzdGVtIEludGVncmF0aW9uIFRpbWVycyAqLwotICAgICAgICBjYXI1eHhfdAkgICBpbV9jbGtyc3Q7CQkvKiBDbG9ja3MgYW5kIFJlc2V0ICovCi0gICAgICAgIHNpdGs1eHhfdCAgICAgICAgICBpbV9zaXRrOyAgICAgICAgICAgIAkvKiBTeXN0ZW0gSW50ZWdyYXRpb24gVGltZXIgS2V5cyovCi0gICAgICAgIGNhcms4eHhfdCAgICAgICAgICBpbV9jbGtyc3RrOyAgICAgICAgIAkvKiBDbG9ja3MgYW5kIFJlc2VydCBLZXlzICovCi0gICAgICAgIGZsNXh4X3QJICAgICAgICAgICBpbV9mbGE7CSAgICAgICAgLyogRmxhc2ggTW9kdWxlIEEgKi8KLSAgICAgICAgZmw1eHhfdAkgICAgICAgICAgIGltX2ZsYjsJICAgICAgICAvKiBGbGFzaCBNb2R1bGUgQiAqLwotICAgICAgICBjaGFyICAgICAgICAgICAgICAgcmVzNFsxNDIwOF07ICAgICAgICAJLyogUmVzZXJ2ZWQgZm9yIFNJVSAqLwotICAgICAgICBkcHJjNXh4X3QJICAgaW1fZHByYzsgICAgICAgICAgICAJLyogRHByYW0gQ29udHJvbCBSZWdpc3RlciAqLwotICAgICAgICBjaGFyICAgICAgICAgICAgICAgcmVzNVs4MTgwXTsgICAgICAgICAJLyogUmVzZXJ2ZWQgKi8KLSAgICAgICAgY2hhciAgICAgICAgICAgICAgIGRwdHJhbVs2MTQ0XTsgICAgICAgCS8qIERwdHJhbSAqLwotICAgICAgICBjaGFyICAgICAgICAgICAgICAgcmVzNlsyMDQ4XTsgICAgICAgICAJLyogUmVzZXJ2ZWQgKi8KLSAgICAgICAgdHB1NXh4X3QJICAgaW1fdHB1YTsJCS8qIFRpbWUgUHJvZXNzaW5nIFVuaXQgQSAqLwotICAgICAgICB0cHU1eHhfdAkgICBpbV90cHViOyAgCSAgICAgIAkvKiBUaW1lIFByb2Nlc3NpbmcgVW5pdCBCICovCi0gICAgICAgIHFhZGM1eHhfdAkgICBpbV9xYWRjYTsgICAgICAgICAgIAkvKiBRQURDIEEgKi8KLSAgICAgICAgcWFkYzV4eF90CSAgIGltX3FhZGNiOyAgICAgICAgICAgCS8qIFFBREMgQiAqLwotICAgICAgICBxc21jbTV4eF90CSAgIGltX3FzbWNtOwkJLyogU0NJIGFuZCBTUEkgKi8KLSAgICAgICAgbWlvczV4eF90ICAgICAgCSAgIGltX21pb3M7CQkvKiBNSU9TICovCi0gICAgICAgIHRjYW41eHhfdCAgICAgICAgICBpbV90Y2FuYTsgICAgICAgICAgIAkvKiBUb3VjYW4gQSAqLwotICAgICAgICB0Y2FuNXh4X3QgICAgICAgICAgaW1fdGNhbmI7CSAgICAgICAJLyogVG91Y2FuIEIgKi8KLSAgICAgICAgY2hhciAgICAgICAgICAgICAgIHJlczdbMTc5Ml07ICAgICAgICAgCS8qIFJlc2VydmVkICovCi0gICAgICAgIHVpbWI1eHhfdCAgICAgICAgICBpbV91aW1iOwkgICAgICAgIC8qIFVJTUIgKi8KKwljaGFyICAgICAgICAgICAgICAgcmVzMVsyNjIxNDRdOyAgICAgICAJLyogQ01GIEZsYXNoIEEgMjU2IEtieXRlcyAqLworCWNoYXIgICAgICAgICAgICAgICByZXMyWzE5NjYwOF07ICAgICAgIAkvKiBDTUYgRmxhc2ggQiAxOTIgS2J5dGVzICovCisJY2hhciAgICAgICAgICAgICAgIHJlczNbMjY3MDU5Ml07ICAgICAgCS8qIFJlc2VydmVkIGZvciBGbGFzaCAqLworCXN5c2NvbmY1eHhfdCAgICAgICBpbV9zaXVfY29uZjsgICAgICAgIAkvKiBTSVUgQ29uZmlndXJhdGlvbiAqLworCW1lbWN0bDV4eF90CSAgIGltX21lbWN0bDsJCS8qIE1lbW9yeSBDb250cm9sbGVyICovCisJc2l0NXh4X3QgICAgICAgICAgIGltX3NpdDsJCS8qIFN5c3RlbSBJbnRlZ3JhdGlvbiBUaW1lcnMgKi8KKwljYXI1eHhfdAkgICBpbV9jbGtyc3Q7CQkvKiBDbG9ja3MgYW5kIFJlc2V0ICovCisJc2l0azV4eF90ICAgICAgICAgIGltX3NpdGs7ICAgICAgICAgICAgCS8qIFN5c3RlbSBJbnRlZ3JhdGlvbiBUaW1lciBLZXlzKi8KKwljYXJrOHh4X3QgICAgICAgICAgaW1fY2xrcnN0azsgICAgICAgICAJLyogQ2xvY2tzIGFuZCBSZXNlcnQgS2V5cyAqLworCWZsNXh4X3QJICAgICAgICAgICBpbV9mbGE7CSAgICAgICAgLyogRmxhc2ggTW9kdWxlIEEgKi8KKwlmbDV4eF90CSAgICAgICAgICAgaW1fZmxiOwkgICAgICAgIC8qIEZsYXNoIE1vZHVsZSBCICovCisJY2hhciAgICAgICAgICAgICAgIHJlczRbMTQyMDhdOyAgICAgICAgCS8qIFJlc2VydmVkIGZvciBTSVUgKi8KKwlkcHJjNXh4X3QJICAgaW1fZHByYzsgICAgICAgICAgICAJLyogRHByYW0gQ29udHJvbCBSZWdpc3RlciAqLworCWNoYXIgICAgICAgICAgICAgICByZXM1WzgxODBdOyAgICAgICAgIAkvKiBSZXNlcnZlZCAqLworCWNoYXIgICAgICAgICAgICAgICBkcHRyYW1bNjE0NF07ICAgICAgIAkvKiBEcHRyYW0gKi8KKwljaGFyICAgICAgICAgICAgICAgcmVzNlsyMDQ4XTsgICAgICAgICAJLyogUmVzZXJ2ZWQgKi8KKwl0cHU1eHhfdAkgICBpbV90cHVhOwkJLyogVGltZSBQcm9lc3NpbmcgVW5pdCBBICovCisJdHB1NXh4X3QJICAgaW1fdHB1YjsgIAkgICAgICAJLyogVGltZSBQcm9jZXNzaW5nIFVuaXQgQiAqLworCXFhZGM1eHhfdAkgICBpbV9xYWRjYTsgICAgICAgICAgIAkvKiBRQURDIEEgKi8KKwlxYWRjNXh4X3QJICAgaW1fcWFkY2I7ICAgICAgICAgICAJLyogUUFEQyBCICovCisJcXNtY201eHhfdAkgICBpbV9xc21jbTsJCS8qIFNDSSBhbmQgU1BJICovCisJbWlvczV4eF90ICAgICAgCSAgIGltX21pb3M7CQkvKiBNSU9TICovCisJdGNhbjV4eF90ICAgICAgICAgIGltX3RjYW5hOyAgICAgICAgICAgCS8qIFRvdWNhbiBBICovCisJdGNhbjV4eF90ICAgICAgICAgIGltX3RjYW5iOwkgICAgICAgCS8qIFRvdWNhbiBCICovCisJY2hhciAgICAgICAgICAgICAgIHJlczdbMTc5Ml07ICAgICAgICAgCS8qIFJlc2VydmVkICovCisJdWltYjV4eF90ICAgICAgICAgIGltX3VpbWI7CSAgICAgICAgLyogVUlNQiAqLwogfSBpbW1hcF90OwogCiAjZW5kaWYgLyogX19JTU1BUF81WFhfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tcHBjL2JpdG9wcy5oCmluZGV4IDUzMjY2ODYuLjMyNjQ5MTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvYml0b3BzLmgKQEAgLTI4NSw3ICsyODUsNyBAQAogICovCiAKICNkZWZpbmUgZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIFwKLSAgICAgICAgZXh0Ml9maW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisJZXh0Ml9maW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCiAKIGV4dGVybiBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZXh0Ml9maW5kX25leHRfemVyb19iaXQodm9pZCAqYWRkciwKIAl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2dsb2JhbF9kYXRhLmggYi9pbmNsdWRlL2FzbS1wcGMvZ2xvYmFsX2RhdGEuaAppbmRleCBmMjQyZDFiLi4xOWM3ZmQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvZ2xvYmFsX2RhdGEuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvZ2xvYmFsX2RhdGEuaApAQCAtODMsNyArODMsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0xXTU9OCiAJdW5zaWduZWQgbG9uZyBrYmRfc3RhdHVzOwotI2VuZGlmCQorI2VuZGlmCiB9IGdkX3Q7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaW8uaCBiL2luY2x1ZGUvYXNtLXBwYy9pby5oCmluZGV4IDY1MmIxMmIuLjhlNWZlMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pby5oCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICBpbnQgcmV0OwogCiAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxoYnJ4ICUwLDAsJTE7IGVpZWlvIiA6ICI9ciIgKHJldCkgOgotICAgICAgICAgICAgICAgICAgInIiIChhZGRyKSwgIm0iICgqYWRkcikpOworCQkgICJyIiAoYWRkciksICJtIiAoKmFkZHIpKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0xNDEsNyArMTQxLDcgQEAKIGV4dGVybiBpbmxpbmUgdm9pZCBvdXRfbGUxNih2b2xhdGlsZSB1MTYgKmFkZHIsIGludCB2YWwpCiB7CiAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGJyeCAlMSwwLCUyOyBlaWVpbyIgOiAiPW0iICgqYWRkcikgOgotICAgICAgICAgICAgICAgICAgInIiICh2YWwpLCAiciIgKGFkZHIpKTsKKwkJICAiciIgKHZhbCksICJyIiAoYWRkcikpOwogfQogCiBleHRlcm4gaW5saW5lIHZvaWQgb3V0X2JlMTYodm9sYXRpbGUgdTE2ICphZGRyLCBpbnQgdmFsKQpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgdW5zaWduZWQgcmV0OwogCiAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImx3YnJ4ICUwLDAsJTE7IGVpZWlvIiA6ICI9ciIgKHJldCkgOgotICAgICAgICAgICAgICAgICAiciIgKGFkZHIpLCAibSIgKCphZGRyKSk7CisJCSAiciIgKGFkZHIpLCAibSIgKCphZGRyKSk7CiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTY5LDcgKzE2OSw3IEBACiBleHRlcm4gaW5saW5lIHZvaWQgb3V0X2xlMzIodm9sYXRpbGUgdW5zaWduZWQgKmFkZHIsIGludCB2YWwpCiB7CiAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2JyeCAlMSwwLCUyOyBlaWVpbyIgOiAiPW0iICgqYWRkcikgOgotICAgICAgICAgICAgICAgICAiciIgKHZhbCksICJyIiAoYWRkcikpOworCQkgInIiICh2YWwpLCAiciIgKGFkZHIpKTsKIH0KIAogZXh0ZXJuIGlubGluZSB2b2lkIG91dF9iZTMyKHZvbGF0aWxlIHVuc2lnbmVkICphZGRyLCBpbnQgdmFsKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL204MjYwX3BjaS5oIGIvaW5jbHVkZS9hc20tcHBjL204MjYwX3BjaS5oCmluZGV4IDI2NzU2NTguLjQ1ZjAxZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tODI2MF9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbTgyNjBfcGNpLmgKQEAgLTM1LDggKzM1LDggQEAKIAogCiAvKgotICogT3V0Ym91bmQgQVRVIHJlZ2lzdGVycyAoMyBzZXRzKS4gVGhlc2UgcmVnaXN0ZXJzIGNvbnRyb2wgaG93IDYweCBidXMgKGxvY2FsKSAKLSAqIGFkZHJlc3NlcyBhcmUgdHJhbnNsYXRlZCB0byBQQ0kgYWRkcmVzc2VzIHdoZW4gdGhlIE1QQzgyNnggaXMgYSBQQ0kgYnVzIAorICogT3V0Ym91bmQgQVRVIHJlZ2lzdGVycyAoMyBzZXRzKS4gVGhlc2UgcmVnaXN0ZXJzIGNvbnRyb2wgaG93IDYweCBidXMgKGxvY2FsKQorICogYWRkcmVzc2VzIGFyZSB0cmFuc2xhdGVkIHRvIFBDSSBhZGRyZXNzZXMgd2hlbiB0aGUgTVBDODI2eCBpcyBhIFBDSSBidXMKICAqIG1hc3RlciAoaW5pdGlhdG9yKS4KICAqLwogCkBAIC04Nyw3ICs4Nyw3IEBACiAjZGVmaW5lIFBDSUdDUl9QQ0lfQlVTX0VOICAgMHgxCiAKIC8qCi0gKiBJbmJvdW5kIEFUVSByZWdpc3RlcnMgKDIgc2V0cykuIFRoZXNlIHJlZ2lzdGVycyBjb250cm9sIGhvdyBQQ0kgYWRkcmVzc2VzIAorICogSW5ib3VuZCBBVFUgcmVnaXN0ZXJzICgyIHNldHMpLiBUaGVzZSByZWdpc3RlcnMgY29udHJvbCBob3cgUENJIGFkZHJlc3NlcwogICogYXJlIHRyYW5zbGF0ZWQgdG8gNjB4IGJ1cyAobG9jYWwpIGFkZHJlc3NlcyB3aGVuIHRoZSBNUEM4MjZ4IGlzIGEgUENJIGJ1cyB0YXJnZXQuCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3BjaV9pby5oIGIvaW5jbHVkZS9hc20tcHBjL3BjaV9pby5oCmluZGV4IDBmNTdiNTMuLjliNzM4YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wY2lfaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcGNpX2lvLmgKQEAgLTksMjAgKzksMjAgQEAKIAogI2RlZmluZSBwY2lfcmVhZF9sZTE2KGFkZHIsIGRlc3QpIFwKICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibGhicnggJTAsMCwlMSIgOiAiPXIiIChkZXN0KSA6IFwKLSAgICAgICAgICAgICAgICAgICJyIiAoYWRkciksICJtIiAoKmFkZHIpKTsKKwkJICAiciIgKGFkZHIpLCAibSIgKCphZGRyKSk7CiAKICNkZWZpbmUgcGNpX3dyaXRlX2xlMTYoYWRkciwgdmFsKSBcCiAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGJyeCAlMSwwLCUyIiA6ICI9bSIgKCphZGRyKSA6IFwKLSAgICAgICAgICAgICAgICAgICJyIiAodmFsKSwgInIiIChhZGRyKSk7CisJCSAgInIiICh2YWwpLCAiciIgKGFkZHIpKTsKIAogCiAjZGVmaW5lIHBjaV9yZWFkX2xlMzIoYWRkciwgZGVzdCkgXAogICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsd2JyeCAlMCwwLCUxIiA6ICI9ciIgKGRlc3QpIDogXAotICAgICAgICAgICAgICAgICAiciIgKGFkZHIpLCAibSIgKCphZGRyKSk7CisJCSAiciIgKGFkZHIpLCAibSIgKCphZGRyKSk7CiAKICNkZWZpbmUgcGNpX3dyaXRlX2xlMzIoYWRkciwgdmFsKSBcCiBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YnJ4ICUxLDAsJTIiIDogIj1tIiAoKmFkZHIpIDogXAotICAgICAgICAgICAgICAgICAiciIgKHZhbCksICJyIiAoYWRkcikpOworCQkgInIiICh2YWwpLCAiciIgKGFkZHIpKTsKIAogI2RlZmluZSBwY2lfcmVhZGIoYWRkcixiKSAoKGIpID0gKih2b2xhdGlsZSB1OCAqKSAoYWRkcikpCiAjZGVmaW5lIHBjaV93cml0ZWIoYixhZGRyKSAoKCoodm9sYXRpbGUgdTggKikgKGFkZHIpKSA9IChiKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wbnAuaCBiL2luY2x1ZGUvYXNtLXBwYy9wbnAuaAppbmRleCAxNWJmN2YxLi4yMmNlYmEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcG5wLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BucC5oCkBAIC0zMjQsOCArMzI0LDggQEAKICAgR2VuZXJhbEZsb3BweSA9IDAsCiAgIENvbXBhdGlibGU3NjUgPSAxLAogICBOUzM5OF9GbG9wcHkgPSAyLCAgICAgICAgICAgICAgICAgICAgIC8qIE5TIFN1cGVyIEkvTyB3aXJlZCB0byB1c2UgaW5kZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBhdCBwb3J0IDM5OCBhbmQgZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGF0IHBvcnQgMzk5ICAgICAgICAgICAgICAgKi8KKwkJCQkJICAgcmVnaXN0ZXIgYXQgcG9ydCAzOTggYW5kIGRhdGEKKwkJCQkJICAgcmVnaXN0ZXIgYXQgcG9ydCAzOTkgICAgICAgICAgICAgICAqLwogICBOUzI2RV9GbG9wcHkgPSAzLCAgICAgICAgICAgICAgICAgICAgIC8qIFBvcnRzIDI2RSBhbmQgMjZGICAgICAgICAgICAgICAgICAgKi8KICAgTlMxNUNfRmxvcHB5ID0gNCwgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0cyAxNUMgYW5kIDE1RCAgICAgICAgICAgICAgICAgICovCiAgIE5TMkVfRmxvcHB5ID0gNSwgICAgICAgICAgICAgICAgICAgICAgLyogUG9ydHMgMkUgYW5kIDJGICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzY2LDggKzM2Niw4IEBACiAgIENvbXBhdGlibGUxNjQ1MCA9IDIsCiAgIENvbXBhdGlibGUxNjU1MCA9IDMsCiAgIE5TMzk4U2VyUG9ydCA9IDQsICAgICAgICAgICAgICAgICAgICAgLyogTlMgU3VwZXIgSS9PIHdpcmVkIHRvIHVzZSBpbmRleAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGF0IHBvcnQgMzk4IGFuZCBkYXRhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgYXQgcG9ydCAzOTkgICAgICAgICAgICAgICAqLworCQkJCQkgICByZWdpc3RlciBhdCBwb3J0IDM5OCBhbmQgZGF0YQorCQkJCQkgICByZWdpc3RlciBhdCBwb3J0IDM5OSAgICAgICAgICAgICAgICovCiAgIE5TMjZFU2VyUG9ydCA9IDUsICAgICAgICAgICAgICAgICAgICAgLyogUG9ydHMgMjZFIGFuZCAyNkYgICAgICAgICAgICAgICAgICAqLwogICBOUzE1Q1NlclBvcnQgPSA2LCAgICAgICAgICAgICAgICAgICAgIC8qIFBvcnRzIDE1QyBhbmQgMTVEICAgICAgICAgICAgICAgICAgKi8KICAgTlMyRVNlclBvcnQgPSA3LCAgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0cyAyRSBhbmQgMkYgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNzUsOCArMzc1LDggQEAKICAgR2VuZXJhbFBhclBvcnQgPSAwLAogICBMUFR4ID0gMSwKICAgTlMzOThQYXJQb3J0ID0gMiwgICAgICAgICAgICAgICAgICAgICAvKiBOUyBTdXBlciBJL08gd2lyZWQgdG8gdXNlIGluZGV4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgYXQgcG9ydCAzOTggYW5kIGRhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBhdCBwb3J0IDM5OSAgICAgICAgICAgICAgICovCisJCQkJCSAgIHJlZ2lzdGVyIGF0IHBvcnQgMzk4IGFuZCBkYXRhCisJCQkJCSAgIHJlZ2lzdGVyIGF0IHBvcnQgMzk5ICAgICAgICAgICAgICAgKi8KICAgTlMyNkVQYXJQb3J0ID0gMywgICAgICAgICAgICAgICAgICAgICAvKiBQb3J0cyAyNkUgYW5kIDI2RiAgICAgICAgICAgICAgICAgICovCiAgIE5TMTVDUGFyUG9ydCA9IDQsICAgICAgICAgICAgICAgICAgICAgLyogUG9ydHMgMTVDIGFuZCAxNUQgICAgICAgICAgICAgICAgICAqLwogICBOUzJFUGFyUG9ydCA9IDUsICAgICAgICAgICAgICAgICAgICAgIC8qIFBvcnRzIDJFIGFuZCAyRiAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQzNiwxNCArNDM2LDE0IEBACiAKIHR5cGVkZWYgc3RydWN0IF9TRVJJQUxfSUQgewogICB1bnNpZ25lZCBjaGFyIFZlbmRvcklEMDsgICAgICAgICAgICAgIC8qICAgIEJpdCg3KT0wICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBCaXRzKDY6Mik9MXN0IGNoYXJhY3RlciBpbiAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgY29tcHJlc3NlZCBBU0NJSSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIEJpdHMoMTowKT0ybmQgY2hhcmFjdGVyIGluICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICBjb21wcmVzc2VkIEFTQ0lJIGJpdHMoNDozKSAgICovCisJCQkJCS8qICAgIEJpdHMoNjoyKT0xc3QgY2hhcmFjdGVyIGluICAgICAgKi8KKwkJCQkJLyogICAgICAgY29tcHJlc3NlZCBBU0NJSSAgICAgICAgICAgICAqLworCQkJCQkvKiAgICBCaXRzKDE6MCk9Mm5kIGNoYXJhY3RlciBpbiAgICAgICovCisJCQkJCS8qICAgICAgIGNvbXByZXNzZWQgQVNDSUkgYml0cyg0OjMpICAgKi8KICAgdW5zaWduZWQgY2hhciBWZW5kb3JJRDE7ICAgICAgICAgICAgICAvKiAgICBCaXRzKDc6NSk9Mm5kIGNoYXJhY3RlciBpbiAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgY29tcHJlc3NlZCBBU0NJSSBiaXRzKDI6MCkgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIEJpdHMoNDowKT0zcmQgY2hhcmFjdGVyIGluICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICBjb21wcmVzc2VkIEFTQ0lJICAgICAgICAgICAgICovCisJCQkJCS8qICAgICAgIGNvbXByZXNzZWQgQVNDSUkgYml0cygyOjApICAgKi8KKwkJCQkJLyogICAgQml0cyg0OjApPTNyZCBjaGFyYWN0ZXIgaW4gICAgICAqLworCQkJCQkvKiAgICAgICBjb21wcmVzc2VkIEFTQ0lJICAgICAgICAgICAgICovCiAgIHVuc2lnbmVkIGNoYXIgVmVuZG9ySUQyOyAgICAgICAgICAgICAgLyogUHJvZHVjdCBudW1iZXIgLSB2ZW5kb3IgYXNzaWduZWQgICAqLwogICB1bnNpZ25lZCBjaGFyIFZlbmRvcklEMzsgICAgICAgICAgICAgIC8qIFByb2R1Y3QgbnVtYmVyIC0gdmVuZG9yIGFzc2lnbmVkICAgKi8KIApAQCAtNTExLDggKzUxMSw4IEBACiAgICAgdW5zaWduZWQgY2hhciBUYWc7ICAgICAgICAgICAgICAgICAgLyogc21hbGwgdGFnID0gMHgxNSBvciAweDE2ICAgICAgICAgICAqLwogICAgIHVuc2lnbmVkIGNoYXIgRGV2SWRbNF07ICAgICAgICAgICAgIC8qIExvZ2ljYWwgZGV2aWNlIGlkICAgICAgICAgICAgICAgICAgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZsYWdzWzJdOyAgICAgICAgICAgICAvKiBiaXQoMCkgYm9vdCBkZXZpY2U7ICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYml0KDc6MSkgY21kIGluIHJhbmdlIHgzMS14MzcgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJpdCg3OjApIGNtZCBpbiByYW5nZSB4MjgteDNmIChvcHQpKi8KKwkJCQkJLyogYml0KDc6MSkgY21kIGluIHJhbmdlIHgzMS14MzcgICAgICAqLworCQkJCQkvKiBiaXQoNzowKSBjbWQgaW4gcmFuZ2UgeDI4LXgzZiAob3B0KSovCiAgICAgfSBTMl9QYWNrOwogCiAgIHN0cnVjdCBfUzNfUGFja3sgICAgICAgICAgICAgICAgICAgICAgLyogQ09NUEFUSUJMRSBERVZJQ0UgSUQgUEFDS0VUICAgICAgICAqLwpAQCAtNTIzLDEzICs1MjMsMTMgQEAKICAgc3RydWN0IF9TNF9QYWNreyAgICAgICAgICAgICAgICAgICAgICAvKiBJUlEgUEFDS0VUICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgdW5zaWduZWQgY2hhciBUYWc7ICAgICAgICAgICAgICAgICAgLyogc21hbGwgdGFnID0gMHgyMiBvciAweDIzICAgICAgICAgICAqLwogICAgIHVuc2lnbmVkIGNoYXIgSVJRTWFza1syXTsgICAgICAgICAgIC8qIGJpdCgwKSBpcyBJUlEwLCAuLi47ICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiaXQoMCkgaXMgSVJROCAuLi4gICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGJpdCgwKSBpcyBJUlE4IC4uLiAgICAgICAgICAgICAgICAgKi8KICAgICB1bnNpZ25lZCBjaGFyIElSUUluZm87ICAgICAgICAgICAgICAvKiBvcHRpb25hbDsgYXNzdW1lIGJpdCgwKT0xOyBlbHNlICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIGJpdCgwKSAtIGhpZ2ggdHJ1ZSBlZGdlIHNlbnNpdGl2ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBiaXQoMSkgLSBsb3cgdHJ1ZSBlZGdlIHNlbnNpdGl2ZSAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgYml0KDIpIC0gaGlnaCB0cnVlIGxldmVsIHNlbnNpdGl2ZSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIGJpdCgzKSAtIGxvdyB0cnVlIGxldmVsIHNlbnNpdGl2ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBiaXQoNzo0KSAtIG11c3QgYmUgMCAgICAgICAgICAgICAgKi8KKwkJCQkJLyogIGJpdCgwKSAtIGhpZ2ggdHJ1ZSBlZGdlIHNlbnNpdGl2ZSAqLworCQkJCQkvKiAgYml0KDEpIC0gbG93IHRydWUgZWRnZSBzZW5zaXRpdmUgICovCisJCQkJCS8qICBiaXQoMikgLSBoaWdoIHRydWUgbGV2ZWwgc2Vuc2l0aXZlKi8KKwkJCQkJLyogIGJpdCgzKSAtIGxvdyB0cnVlIGxldmVsIHNlbnNpdGl2ZSAqLworCQkJCQkvKiAgYml0KDc6NCkgLSBtdXN0IGJlIDAgICAgICAgICAgICAgICovCiAgICAgfSBTNF9QYWNrOwogCiAgIHN0cnVjdCBfUzVfUGFja3sgICAgICAgICAgICAgICAgICAgICAgLyogRE1BIFBBQ0tFVCAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTQxLDkgKzU0MSw5IEBACiAgIHN0cnVjdCBfUzZfUGFja3sgICAgICAgICAgICAgICAgICAgICAgLyogU1RBUlQgREVQRU5ERU5UIEZVTkNUSU9OIFBBQ0tFVCAgICAqLwogICAgIHVuc2lnbmVkIGNoYXIgVGFnOyAgICAgICAgICAgICAgICAgIC8qIHNtYWxsIHRhZyA9IDB4MzAgb3IgMHgzMSAgICAgICAgICAgKi8KICAgICB1bnNpZ25lZCBjaGFyIFByaW9yaXR5OyAgICAgICAgICAgICAvKiBPcHRpb25hbDsgaWYgbWlzc2luZyB0aGVuIHgwMTsgZWxzZSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIHgwMCA9IGJlc3QgcG9zc2libGUgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICB4MDEgPSBhY2NlcHRpYmxlICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgeDAyID0gc3ViLW9wdGltYWwgYnV0IGZ1bmN0aW9uYWwgICovCisJCQkJCS8qICB4MDAgPSBiZXN0IHBvc3NpYmxlICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogIHgwMSA9IGFjY2VwdGlibGUgICAgICAgICAgICAgICAgICAqLworCQkJCQkvKiAgeDAyID0gc3ViLW9wdGltYWwgYnV0IGZ1bmN0aW9uYWwgICovCiAgICAgfSBTNl9QYWNrOwogCiAgIHN0cnVjdCBfUzdfUGFja3sgICAgICAgICAgICAgICAgICAgICAgLyogRU5EIERFUEVOREVOVCBGVU5DVElPTiBQQUNLRVQgICAgICAqLwpAQCAtNTcxLDkgKzU3MSw5IEBACiAgICAgdW5pb24gX1MxNF9EYXRhewogICAgICAgdW5zaWduZWQgY2hhciBEYXRhWzddOyAgICAgICAgICAgIC8qIFZlbmRvciBkZWZpbmVkICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgIHN0cnVjdCBfUzE0X1BQQ1BhY2t7ICAgICAgICAgICAgICAvKiBQcipwIHMxNCBwYWNrICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICB1bnNpZ25lZCBjaGFyIFR5cGU7ICAgICAgICAgICAgLyogMDA9bm9uLUlCTSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgdW5zaWduZWQgY2hhciBQUENEYXRhWzZdOyAgICAgIC8qIFZlbmRvciBkZWZpbmVkICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgfSBTMTRfUFBDUGFjazsKKwkgdW5zaWduZWQgY2hhciBUeXBlOyAgICAgICAgICAgIC8qIDAwPW5vbi1JQk0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkgdW5zaWduZWQgY2hhciBQUENEYXRhWzZdOyAgICAgIC8qIFZlbmRvciBkZWZpbmVkICAgICAgICAgICAgICAgICAgICAgKi8KKwl9IFMxNF9QUENQYWNrOwogICAgICAgfSBTMTRfRGF0YTsKICAgICB9IFMxNF9QYWNrOwogCkBAIC01ODcsNyArNTg3LDcgQEAKICAgICB1bnNpZ25lZCBjaGFyIENvdW50MDsgICAgICAgICAgICAgICAvKiB4MDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgdW5zaWduZWQgY2hhciBDb3VudDE7ICAgICAgICAgICAgICAgLyogeDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIHVuc2lnbmVkIGNoYXIgRGF0YVs5XTsgICAgICAgICAgICAgIC8qIGEgdmFyaWFibGUgYXJyYXkgb2YgYnl0ZXMsICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3VudCBpbiB0YWcgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCS8qIGNvdW50IGluIHRhZyAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB9IEwxX1BhY2s7CiAKICAgc3RydWN0IF9MMl9QYWNreyAgICAgICAgICAgICAgICAgICAgICAvKiBBTlNJIElEIFNUUklORyBQQUNLRVQgICAgICAgICAgICAgICovCkBAIC01OTUsNyArNTk1LDcgQEAKICAgICB1bnNpZ25lZCBjaGFyIENvdW50MDsgICAgICAgICAgICAgICAvKiBMZW5ndGggb2Ygc3RyaW5nICAgICAgICAgICAgICAgICAgICovCiAgICAgdW5zaWduZWQgY2hhciBDb3VudDE7CiAgICAgdW5zaWduZWQgY2hhciBJZGVudGlmaWVyWzFdOyAgICAgICAgLyogYSB2YXJpYWJsZSBhcnJheSBvZiBieXRlcywgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IGluIHRhZyAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY291bnQgaW4gdGFnICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIH0gTDJfUGFjazsKIAogICBzdHJ1Y3QgX0wzX1BhY2t7ICAgICAgICAgICAgICAgICAgICAgIC8qIFVOSUNPREUgSUQgU1RSSU5HIFBBQ0tFVCAgICAgICAgICAgKi8KQEAgLTYwNSw3ICs2MDUsNyBAQAogICAgIHVuc2lnbmVkIGNoYXIgQ291bnRyeTA7ICAgICAgICAgICAgIC8qIFRCRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB1bnNpZ25lZCBjaGFyIENvdW50cnkxOyAgICAgICAgICAgICAvKiBUQkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgdW5zaWduZWQgY2hhciBJZGVudGlmaWVyWzFdOyAgICAgICAgLyogYSB2YXJpYWJsZSBhcnJheSBvZiBieXRlcywgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IGluIHRhZyAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY291bnQgaW4gdGFnICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIH0gTDNfUGFjazsKIAogICBzdHJ1Y3QgX0w0X1BhY2t7ICAgICAgICAgICAgICAgICAgICAgIC8qIFZFTkRPUiBERUZJTkVEIFBBQ0tFVCAgICAgICAgICAgICAgKi8KQEAgLTYxNCwxMiArNjE0LDEyIEBACiAgICAgdW5zaWduZWQgY2hhciBDb3VudDE7CiAgICAgdW5pb24gX0w0X0RhdGF7CiAgICAgICB1bnNpZ25lZCBjaGFyIERhdGFbMV07ICAgICAgICAgICAgLyogYSB2YXJpYWJsZSBhcnJheSBvZiBieXRlcywgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IGluIHRhZyAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJLyogY291bnQgaW4gdGFnICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgc3RydWN0IF9MNF9QUENQYWNreyAgICAgICAgICAgICAgIC8qIFByKnAgTDQgcGFja2V0ICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgIHVuc2lnbmVkIGNoYXIgVHlwZTsgICAgICAgICAgICAvKiAwMD1ub24tSUJNICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICB1bnNpZ25lZCBjaGFyIFBQQ0RhdGFbMV07ICAgICAgLyogYSB2YXJpYWJsZSBhcnJheSBvZiBieXRlcywgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvdW50IGluIHRhZyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgfSBMNF9QUENQYWNrOworCSB1bnNpZ25lZCBjaGFyIFR5cGU7ICAgICAgICAgICAgLyogMDA9bm9uLUlCTSAgICAgICAgICAgICAgICAgICAgICAgICAqLworCSB1bnNpZ25lZCBjaGFyIFBQQ0RhdGFbMV07ICAgICAgLyogYSB2YXJpYWJsZSBhcnJheSBvZiBieXRlcywgICAgICAgICAqLworCQkJCQkvKiBjb3VudCBpbiB0YWcgICAgICAgICAgICAgICAgICAgICAgICovCisJfSBMNF9QUENQYWNrOwogICAgICAgfSBMNF9EYXRhOwogICAgIH0gTDRfUGFjazsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3B0cmFjZS5oIGIvaW5jbHVkZS9hc20tcHBjL3B0cmFjZS5oCmluZGV4IDkzYTc1YmQuLjNjMmY0ZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcHRyYWNlLmgKQEAgLTEwNSw0ICsxMDUsMyBAQAogI2RlZmluZSBQVF9GUFNDUiAoUFRfRlBSMCArIDIqMzIgKyAxKQogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL3Jlc2lkdWFsLmggYi9pbmNsdWRlL2FzbS1wcGMvcmVzaWR1YWwuaAppbmRleCBjMDM3YTRlLi5kYzg1ZWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcmVzaWR1YWwuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvcmVzaWR1YWwuaApAQCAtNzYsMTUgKzc2LDE1IEBACiAKICAgLyogQm94IGRlcGVuZGVudCBzdHVmZiAqLwogICB1bnNpZ25lZCBjaGFyIFByaW50YWJsZU1vZGVsWzMyXTsgICAgIC8qIE51bGwgdGVybWluYXRlZCBzdHJpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBvZiB0aGUgZm9ybToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dnYsPDIwaD4sPG1vZGVsIGRlc2lnbmF0aW9uPiw8MHgwPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHZ2diBpcyB0aGUgdmVuZG9yIElECi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nLiBJQk0gUFBTIE1PREVMIDYwMTU8MHgwPiAgICAgICAqLworCQkJCQkgICBNdXN0IGJlIG9mIHRoZSBmb3JtOgorCQkJCQkgICB2dnYsPDIwaD4sPG1vZGVsIGRlc2lnbmF0aW9uPiw8MHgwPgorCQkJCQkgICB3aGVyZSB2dnYgaXMgdGhlIHZlbmRvciBJRAorCQkJCQkgICBlLmcuIElCTSBQUFMgTU9ERUwgNjAxNTwweDA+ICAgICAgICovCiAgIHVuc2lnbmVkIGNoYXIgU2VyaWFsWzE2XTsgICAgICAgICAgICAgLyogMTIvOTQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyaWFsIE51bWJlcjsgbXVzdCBiZSBvZiB0aGUgZm9ybToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dnY8c2VyaWFsIG51bWJlcj4gd2hlcmUgdnZ2IGlzIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlbmRvciBJRC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmcuIElCTTYwMTUxMjM0NTY3PDIwaD48MjBoPiAgICAgICovCisJCQkJCSAgIFNlcmlhbCBOdW1iZXI7IG11c3QgYmUgb2YgdGhlIGZvcm06CisJCQkJCSAgIHZ2djxzZXJpYWwgbnVtYmVyPiB3aGVyZSB2dnYgaXMgdGhlCisJCQkJCSAgIHZlbmRvciBJRC4KKwkJCQkJICAgZS5nLiBJQk02MDE1MTIzNDU2NzwyMGg+PDIwaD4gICAgICAqLwogICB1bnNpZ25lZCBjaGFyIFJlc2VydmVkWzQ4XTsKICAgdW5zaWduZWQgbG9uZyBGaXJtd2FyZVN1cHBsaWVyOyAgICAgICAvKiBTZWUgRmlybXdhcmVTdXBwbGllcnMgZW51bSAgICAgICAgICovCiAgIHVuc2lnbmVkIGxvbmcgRmlybXdhcmVTdXBwb3J0czsgICAgICAgLyogU2VlIEZpcm13YXJlU3VwcG9ydCBlbnVtICAgICAgICAgICAqLwpAQCAtMTAzLDIyICsxMDMsMjIgQEAKICAgdW5zaWduZWQgbG9uZyBXb3JkV2lkdGg7ICAgICAgICAgICAgICAvKiBXb3JkIHdpZHRoIGluIGJpdHMgICAgICAgICAgICAgICAgICovCiAgIHVuc2lnbmVkIGxvbmcgUGFnZVNpemU7ICAgICAgICAgICAgICAgLyogUGFnZSBzaXplIGluIGJ5dGVzICAgICAgICAgICAgICAgICAqLwogICB1bnNpZ25lZCBsb25nIENvaGVyZW5jZUJsb2NrU2l6ZTsgICAgIC8qIFVuaXQgb2YgdHJhbnNmZXIgaW4vb3V0IG9mIGNhY2hlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHdoaWNoIGNvaGVyZW5jeSBpcyBtYWludGFpbmVkOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGx5IDw9IENhY2hlTGluZVNpemUuICAgICAgICAgKi8KKwkJCQkJICAgZm9yIHdoaWNoIGNvaGVyZW5jeSBpcyBtYWludGFpbmVkOworCQkJCQkgICBub3JtYWxseSA8PSBDYWNoZUxpbmVTaXplLiAgICAgICAgICovCiAgIHVuc2lnbmVkIGxvbmcgR3JhbnVsZVNpemU7ICAgICAgICAgICAgLyogVW5pdCBvZiBsb2NrIGFsbG9jYXRpb24gdG8gYXZvaWQgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgZmFsc2Ugc2hhcmluZyBvZiBsb2Nrcy4gICAgICAgICAgKi8KKwkJCQkJLyogICBmYWxzZSBzaGFyaW5nIG9mIGxvY2tzLiAgICAgICAgICAqLwogCiAgIC8qIEwxIENhY2hlIHZhcmlhYmxlcyAqLwogICB1bnNpZ25lZCBsb25nIENhY2hlU2l6ZTsgICAgICAgICAgICAgIC8qIEwxIENhY2hlIHNpemUgaW4gS0IuIFRoaXMgaXMgdGhlICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIHRvdGFsIHNpemUgb2YgdGhlIEwxLCB3aGV0aGVyICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBjb21iaW5lZCBvciBzcGxpdCAgICAgICAgICAgICAgICAqLworCQkJCQkvKiAgIHRvdGFsIHNpemUgb2YgdGhlIEwxLCB3aGV0aGVyICAgICovCisJCQkJCS8qICAgY29tYmluZWQgb3Igc3BsaXQgICAgICAgICAgICAgICAgKi8KICAgdW5zaWduZWQgbG9uZyBDYWNoZUF0dHJpYjsgICAgICAgICAgICAvKiBMMUNBQ0hFX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHVuc2lnbmVkIGxvbmcgQ2FjaGVBc3NvYzsgICAgICAgICAgICAgLyogTDEgQ2FjaGUgYXNzb2NpYXRpdml0eS4gVXNlIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY29tYmluZWQgY2FjaGUuIElmIHNwbGl0LCBwdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvcyBoZXJlLiAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCSAgIGZvciBjb21iaW5lZCBjYWNoZS4gSWYgc3BsaXQsIHB1dAorCQkJCQkgICB6ZXJvcyBoZXJlLiAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHVuc2lnbmVkIGxvbmcgQ2FjaGVMaW5lU2l6ZTsgICAgICAgICAgLyogTDEgQ2FjaGUgbGluZSBzaXplIGluIGJ5dGVzLiBVc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY29tYmluZWQgY2FjaGUuIElmIHNwbGl0LCBwdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvcyBoZXJlLiAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCSAgIGZvciBjb21iaW5lZCBjYWNoZS4gSWYgc3BsaXQsIHB1dAorCQkJCQkgICB6ZXJvcyBoZXJlLiAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIEZvciBzcGxpdCBMMSBDYWNoZTogKD0gY29tYmluZWQgaWYgY29tYmluZWQgY2FjaGUpICovCiAgIHVuc2lnbmVkIGxvbmcgSV9DYWNoZVNpemU7CiAgIHVuc2lnbmVkIGxvbmcgSV9DYWNoZUFzc29jOwpAQCAtMTMxLDggKzEzMSw4IEBACiAgIHVuc2lnbmVkIGxvbmcgVExCU2l6ZTsgICAgICAgICAgICAgICAgLyogVG90YWwgbnVtYmVyIG9mIFRMQnMgb24gdGhlIHN5c3RlbSAqLwogICB1bnNpZ25lZCBsb25nIFRMQkF0dHJpYjsgICAgICAgICAgICAgIC8qIENvbWJpbmVkIEkrRCBvciBzcGxpdCBUTEIgICAgICAgICAgKi8KICAgdW5zaWduZWQgbG9uZyBUTEJBc3NvYzsgICAgICAgICAgICAgICAvKiBUTEIgQXNzb2NpYXRpdml0eS4gVXNlIHRoaXMgZm9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZWQgVExCLiBJZiBzcGxpdCwgcHV0IHplcm9zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkgICBjb21iaW5lZCBUTEIuIElmIHNwbGl0LCBwdXQgemVyb3MKKwkJCQkJICAgaGVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBGb3Igc3BsaXQgVExCOiAoPSBjb21iaW5lZCBpZiBjb21iaW5lZCBUTEIpICovCiAgIHVuc2lnbmVkIGxvbmcgSV9UTEJTaXplOwogICB1bnNpZ25lZCBsb25nIElfVExCQXNzb2M7CkBAIC0xNDAsNyArMTQwLDcgQEAKICAgdW5zaWduZWQgbG9uZyBEX1RMQkFzc29jOwogCiAgIHVuc2lnbmVkIGxvbmcgRXh0ZW5kZWRWUEQ7ICAgICAgICAgICAgLyogT2Zmc2V0IHRvIGV4dGVuZGVkIFZQRCBhcmVhOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgaWYgdW51c2VkICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJICAgbnVsbCBpZiB1bnVzZWQgICAgICAgICAgICAgICAgICAgICAqLwogICB9IFZQRDsKIAogdHlwZWRlZiBlbnVtIF9ERVZJQ0VfRkxBR1MgewpAQCAtMTQ4LDExICsxNDgsMTEgQEAKICAgSW50ZWdyYXRlZCA9IDB4MjAwMCwKICAgRmFpbGVkID0gMHgxMDAwLCAgICAgICAgICAgICAgICAgICAgICAvKiAxIC0gZGV2aWNlIGZhaWxlZCBQT1NUIGNvZGUgdGVzdHMgICovCiAgIFN0YXRpYyA9IDB4MDgwMCwgICAgICAgICAgICAgICAgICAgICAgLyogMCAtIGR5bmFtaWNhbGx5IGNvbmZpZ3VyYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBzdGF0aWMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJICAgMSAtIHN0YXRpYyAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBEb2NrID0gMHgwNDAwLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgLSBub3QgYSBkb2NraW5nIHN0YXRpb24gZGV2aWNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIGlzIGEgZG9ja2luZyBzdGF0aW9uIGRldmljZSAgICAqLworCQkJCQkgICAxIC0gaXMgYSBkb2NraW5nIHN0YXRpb24gZGV2aWNlICAgICovCiAgIEJvb3QgPSAweDAyMDAsICAgICAgICAgICAgICAgICAgICAgICAgLyogMCAtIGRldmljZSBjYW5ub3QgYmUgdXNlZCBmb3IgQk9PVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBjYW4gYmUgYSBCT09UIGRldmljZSAgICAgICAgICAgKi8KKwkJCQkJICAgMSAtIGNhbiBiZSBhIEJPT1QgZGV2aWNlICAgICAgICAgICAqLwogICBDb25maWd1cmFibGUgPSAweDAxMDAsICAgICAgICAgICAgICAgIC8qIDEgLSBkZXZpY2UgaXMgY29uZmlndXJhYmxlICAgICAgICAgKi8KICAgRGlzYWJsZWFibGUgPSAweDgwLCAgICAgICAgICAgICAgICAgICAvKiAxIC0gZGV2aWNlIGNhbiBiZSBkaXNhYmxlZCAgICAgICAgICovCiAgIFBvd2VyTWFuYWdlZCA9IDB4NDAsICAgICAgICAgICAgICAgICAgLyogMCAtIG5vdCBtYW5hZ2VkOyAxIC0gbWFuYWdlZCAgICAgICAqLwpAQCAtMTgwLDcgKzE4MCw3IEBACiAgIHVuc2lnbmVkIGxvbmcgQnVzSWQ7ICAgICAgICAgICAgICAgICAgLyogU2VlIEJVU19JRCBlbnVtIGFib3ZlICAgICAgICAgICAgICAqLwogICB1bnNpZ25lZCBsb25nIERldklkOyAgICAgICAgICAgICAgICAgIC8qIEJpZyBFbmRpYW4gZm9ybWF0ICAgICAgICAgICAgICAgICAgKi8KICAgdW5zaWduZWQgbG9uZyBTZXJpYWxOdW07ICAgICAgICAgICAgICAvKiBGb3IgbXVsdGlwbGUgdXNhZ2Ugb2YgYSBzaW5nbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXZJZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJCSAgIERldklkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgdW5zaWduZWQgbG9uZyBGbGFnczsgICAgICAgICAgICAgICAgICAvKiBTZWUgREVWSUNFX0ZMQUdTIGVudW0gYWJvdmUgICAgICAgICovCiAgIHVuc2lnbmVkIGNoYXIgQmFzZVR5cGU7ICAgICAgICAgICAgICAgLyogU2VlIHBucC5oIGZvciBiaXQgZGVmaW5pdGlvbnMgICAgICAqLwogICB1bnNpZ25lZCBjaGFyIFN1YlR5cGU7ICAgICAgICAgICAgICAgIC8qIFNlZSBwbnAuaCBmb3IgYml0IGRlZmluaXRpb25zICAgICAgKi8KQEAgLTE5Niw3ICsxOTYsNyBAQAogICAgIH0gUG5QQWNjZXNzOwogICBzdHJ1Y3QgX0lTQUFjY2Vzc3sKICAgICB1bnNpZ25lZCBjaGFyIFNsb3ROdW1iZXI7ICAgICAgICAgICAvKiBJU0EgU2xvdCBOdW1iZXIgZ2VuZXJhbGx5IG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZTsgMCBpZiB1bmtub3duICAgICAgICAgICAgKi8KKwkJCQkJICAgYXZhaWxhYmxlOyAwIGlmIHVua25vd24gICAgICAgICAgICAqLwogICAgIHVuc2lnbmVkIGNoYXIgTG9naWNhbERldk51bWJlcjsKICAgICB1bnNpZ25lZCBzaG9ydCBJU0FSZXNlcnZlZDsKICAgICB9IElTQUFjY2VzczsKQEAgLTI0OSw5ICsyNDksOSBAQAogCiB0eXBlZGVmIHN0cnVjdCBfUFBDX0NQVSB7CiAgIHVuc2lnbmVkIGxvbmcgQ3B1VHlwZTsgICAgICAgICAgICAgICAgLyogUmVzdWx0IG9mIG1mc3ByIGZyb20gUHJvY2Vzc29yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiBSZWdpc3RlciAoUFZSKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVlIoMC0xNSkgPSBWZXJzaW9uIChlLmcuIDYwMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVlIoMTYtMzEgPSBFQyBMZXZlbCAgICAgICAgICAgICAgICovCisJCQkJCSAgIFZlcnNpb24gUmVnaXN0ZXIgKFBWUikuCisJCQkJCSAgIFBWUigwLTE1KSA9IFZlcnNpb24gKGUuZy4gNjAxKQorCQkJCQkgICBQVlIoMTYtMzEgPSBFQyBMZXZlbCAgICAgICAgICAgICAgICovCiAgIHVuc2lnbmVkIGNoYXIgQ3B1TnVtYmVyOyAgICAgICAgICAgICAgLyogQ1BVIE51bWJlciBmb3IgdGhpcyBwcm9jZXNzb3IgICAgICAqLwogICB1bnNpZ25lZCBjaGFyIENwdVN0YXRlOyAgICAgICAgICAgICAgIC8qIENQVSBTdGF0ZSwgc2VlIENQVV9TVEFURSBlbnVtICAgICAgKi8KICAgdW5zaWduZWQgc2hvcnQgUmVzZXJ2ZWQ7CkBAIC0yNTksNyArMjU5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgX1BQQ19NRU0gewogICB1bnNpZ25lZCBsb25nIFNJTU1TaXplOyAgICAgICAgICAgICAgIC8qIDAgLSBhYnNlbnQgb3IgYmFkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOE0sIDMyTSAoaW4gTUIpICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkgICA4TSwgMzJNIChpbiBNQikgICAgICAgICAgICAgICAgICAgICovCiAgIH0gUFBDX01FTTsKIAogdHlwZWRlZiBlbnVtIF9NRU1fVVNBR0UgewpAQCAtMjk3LDggKzI5Nyw4IEBACiAgIC8qIENQVSAqLwogICB1bnNpZ25lZCBzaG9ydCBNYXhOdW1DcHVzOyAgICAgICAgICAgIC8qIE1heCBDUFVzIGluIHRoaXMgc3lzdGVtICAgICAgICAgICAgKi8KICAgdW5zaWduZWQgc2hvcnQgQWN0dWFsTnVtQ3B1czsgICAgICAgICAvKiBBY3R1YWxOdW1DcHVzIDwgTWF4TnVtQ3B1cyBtZWFucyAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhhdCB0aGVyZSBhcmUgdW5wb3B1bGF0ZWQgb3IgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG90aGVyd2lzZSB1bnVzYWJsZSBjcHUgbG9jYXRpb25zICAgKi8KKwkJCQkJLyogdGhhdCB0aGVyZSBhcmUgdW5wb3B1bGF0ZWQgb3IgICAgICAqLworCQkJCQkvKiBvdGhlcndpc2UgdW51c2FibGUgY3B1IGxvY2F0aW9ucyAgICovCiAgIFBQQ19DUFUgQ3B1c1tNQVhfQ1BVU107CiAgIC8qIE1lbW9yeSAqLwogICB1bnNpZ25lZCBsb25nIFRvdGFsTWVtb3J5OyAgICAgICAgICAgIC8qIFRvdGFsIGFtb3VudCBvZiBtZW1vcnkgaW5zdGFsbGVkICAgKi8KQEAgLTMyOSw0ICszMjksMyBAQAogCQkJCQkJICAgIGludCBuKTsKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAgLyogbmRlZiBfUkVTSURVQUxfICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXQ5MXJtOTIwMF9uZXQuaCBiL2luY2x1ZGUvYXQ5MXJtOTIwMF9uZXQuaAppbmRleCBlNDFmZTNjLi4xOWYwZDNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2F0OTFybTkyMDBfbmV0LmgKKysrIGIvaW5jbHVkZS9hdDkxcm05MjAwX25ldC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEV0aGVybmV0OglBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRXRoZXJuZXQgRGV2aWNlIERyaXZlciBzdWl0ZSBmb3IgdGhlCiAgKgkJdUNsaW51eCAyLjAuMzggb3BlcmF0aW5nIHN5c3RlbS4gVGhpcyBEcml2ZXIgaGFzIGJlZW4gZGV2ZWxvcGVkCi0gKgkJZm9yIEFUNzVDMjIwIGJvYXJkLiAKKyAqCQlmb3IgQVQ3NUMyMjAgYm9hcmQuCiAgKgogICogTk9URToJVGhlIGRyaXZlciBpcyBpbXBsZW1lbnRlZCBmb3Igb25lIE1BQwogICoKQEAgLTM5LDcgKzM5LDcgQEAKIAl1bnNpZ25lZCBpbnQgKCpJc1BoeUNvbm5lY3RlZCkoQVQ5MVNfRU1BQyAgKnBtYWMpOwogCXVuc2lnbmVkIGNoYXIgKCpHZXRMaW5rU3BlZWQpKEFUOTFTX0VNQUMgKnBtYWMpOwogCXVuc2lnbmVkIGNoYXIgKCpBdXRvTmVnb3RpYXRlKShBVDkxU19FTUFDICpwbWFjLCBpbnQgKik7Ci0JCisKIH0gQVQ5MVNfUGh5T3BzLCpBVDkxUFNfUGh5T3BzOwogCiAKQEAgLTU2LDQgKzU2LDMgQEAKIHZvaWQgYXQ5MXJtOTIwMDBfR2V0UGh5SW50ZXJmYWNlKHZvaWQgKTsKIAogI2VuZGlmIC8qIEFUOTFSTTkyMDBfRVRIRVJORVQgKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9iZWRidWcvdGFibGVzLmggYi9pbmNsdWRlL2JlZGJ1Zy90YWJsZXMuaAppbmRleCA3OTQ3NDFhLi42NmNmOGVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2JlZGJ1Zy90YWJsZXMuaAorKysgYi9pbmNsdWRlL2JlZGJ1Zy90YWJsZXMuaApAQCAtNTk5LDQgKzU5OSwzIEBACiAgKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyCiAgKiBwdXJwb3NlLgogICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYmVkYnVnL3R5cGUuaCBiL2luY2x1ZGUvYmVkYnVnL3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGVlOWRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9iZWRidWcvdHlwZS5oCkBAIC0wLDAgKzEsMjYgQEAKKyNpZm5kZWYgX1RZUEVfQkVEQlVHX0gKKyNkZWZpbmUgX1RZUEVfQkVEQlVHX0gKKworLyogU3VwcG9ydGluZyByb3V0aW5lcyAqLworaW50IGJlZGJ1Z19wdXRzIChjb25zdCBjaGFyICopOwordm9pZCBiZWRidWdfaW5pdCAodm9pZCk7Cit2b2lkIGJlZGJ1Zzg2MF9pbml0ICh2b2lkKTsKK3ZvaWQgZG9fYmVkYnVnX2JyZWFrcG9pbnQgKHN0cnVjdCBwdF9yZWdzICopOwordm9pZCBiZWRidWdfbWFpbl9sb29wICh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IGh3X2RlYnVnX2VuYWJsZWQ7CisJaW50IHN0b3BwZWQ7CisJaW50IGN1cnJlbnRfYnA7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CisKKwl2b2lkICgqZG9fYnJlYWspIChjbWRfdGJsX3QgKiwgaW50LCBpbnQsIGNoYXIgKltdKTsKKwl2b2lkICgqYnJlYWtfaXNyKSAoc3RydWN0IHB0X3JlZ3MgKik7CisJaW50ICgqZmluZF9lbXB0eSkgKHZvaWQpOworCWludCAoKnNldCkgKGludCwgdW5zaWduZWQgbG9uZyk7CisJaW50ICgqY2xlYXIpIChpbnQpOworfSBDUFVfREVCVUdfQ1RYOworCisKKyNlbmRpZiAvKiBfVFlQRV9CRURCVUdfSCAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYm1wX2xheW91dC5oIGIvaW5jbHVkZS9ibXBfbGF5b3V0LmgKaW5kZXggNzI4NWEyNi4uOWQ5MGU3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ibXBfbGF5b3V0LmgKKysrIGIvaW5jbHVkZS9ibXBfbGF5b3V0LmgKQEAgLTU2LDcgKzU2LDcgQEAKICAgX191MzIgY29sb3JzX3VzZWQ7CiAgIF9fdTMyIGNvbG9yc19pbXBvcnRhbnQ7CiAgIC8qIENvbG9yVGFibGUgKi8KLSAgCisKIH0gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGJtcF9oZWFkZXJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgYm1wX2ltYWdlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX2F1dG9zY3JpcHQuaCBiL2luY2x1ZGUvY21kX2F1dG9zY3JpcHQuaAppbmRleCA1MjBjZmM5Li5jYTVmZGI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NtZF9hdXRvc2NyaXB0LmgKKysrIGIvaW5jbHVkZS9jbWRfYXV0b3NjcmlwdC5oCkBAIC0yOCwyMCArMjgsNyBAQAogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQVVUT1NDUklQVCkKIAotI2RlZmluZQlDTURfVEJMX0FVVE9TQ1JJUFQJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkiYXV0b3NjciIsCTUsCTIsCTAsCWRvX2F1dG9zY3JpcHQsCQkJXAotCSJhdXRvc2NyIC0gcnVuIHNjcmlwdCBmcm9tIG1lbW9yeVxuIiwJCQkJXAotCSJbYWRkcl0gLSBydW4gc2NyaXB0IHN0YXJ0aW5nIGF0IGFkZHIuICIgXAotCSJBIHZhbGlkIGF1dG9zY3IgaGVhZGVyIG11c3QgYmUgcHJlc2VudFxuIiBcCi0pLAotCiBpbnQgYXV0b3NjcmlwdCAodWxvbmcgYWRkcik7Ci1pbnQgZG9fYXV0b3NjcmlwdCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZWxzZQotCi0jZGVmaW5lCUNNRF9UQkxfQVVUT1NDUklQVAotCiAjZW5kaWYKIAogI2VuZGlmCS8qIF9DTURfQVVUT1NDUklQVF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfYmVkYnVnLmggYi9pbmNsdWRlL2NtZF9iZWRidWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1NDQxZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9iZWRidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0vKgotICogQmVkQnVnIEZ1bmN0aW9ucwotICovCi0jaWZuZGVmIF9DTURfQkVEQlVHX0gKLSNkZWZpbmUgX0NNRF9CRURCVUdfSAotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQkVEQlVHKQotCi0jZGVmaW5lIENNRF9UQkxfRElTICAgICBNS19DTURfVEJMX0VOVFJZKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJkcyIsICAgICAgICAgICAyLCAgICAgIDMsICAgICAgMSwgICAgICBkb19iZWRidWdfZGlzLCAgICAgICAgICBcCi0gICAgICAgICJkcyAgICAgIC0gZGlzYXNzZW1ibGUgbWVtb3J5XG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJkcyA8YWRkcmVzcz4gWyMgaW5zdHJ1Y3Rpb25zXVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICksCi0KLSNkZWZpbmUgQ01EX1RCTF9BU00gICAgIE1LX0NNRF9UQkxfRU5UUlkoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgImFzIiwgICAgICAgICAgIDIsICAgICAgMiwgICAgICAwLCAgICAgIGRvX2JlZGJ1Z19hc20sICAgICAgICAgIFwKLSAgICAgICAgImFzICAgICAgLSBhc3NlbWJsZSBtZW1vcnlcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgImFzIDxhZGRyZXNzPlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKSwKLQotI2RlZmluZSBDTURfVEJMX0JSRUFLICAgTUtfQ01EX1RCTF9FTlRSWSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiYnJlYWsiLCAgICAgICAgMiwgICAgICAzLCAgICAgIDAsICAgICAgZG9fYmVkYnVnX2JyZWFrLCAgICAgICAgXAotICAgICAgICAiYnJlYWsgICAtIHNldCBvciBjbGVhciBhIGJyZWFrcG9pbnRcbiIsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiIC0gU2V0IG9yIGNsZWFyIGEgYnJlYWtwb2ludFxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiYnJlYWsgPGFkZHJlc3M+IC0gQnJlYWsgYXQgYW4gYWRkcmVzc1xuIiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiYnJlYWsgb2ZmIDxicCM+IC0gRGlzYWJsZSBicmVha3BvaW50LlxuIiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiYnJlYWsgc2hvdyAgICAgIC0gTGlzdCBicmVha3BvaW50cy5cbiIgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICApLAotCi0jZGVmaW5lIENNRF9UQkxfQ09OVElOVUUgICAgICAgIE1LX0NNRF9UQkxfRU5UUlkoICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJjb250aW51ZSIsICAgICA0LCAgICAgIDEsICAgICAgMCwgICAgICBkb19iZWRidWdfY29udGludWUsICAgICBcCi0gICAgICAgICJjb250aW51ZS0gY29udGludWUgZnJvbSBhIGJyZWFrcG9pbnRcbiIsICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICIgLSBjb250aW51ZSBmcm9tIGEgYnJlYWtwb2ludC5cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICksCi0KLSNkZWZpbmUgQ01EX1RCTF9TVEVQICAgICAgICBNS19DTURfVEJMX0VOVFJZKCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgInN0ZXAiLCA0LCAgICAgIDEsICAgICAgMSwgICAgICBkb19iZWRidWdfc3RlcCwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgInN0ZXAgICAgLSBzaW5nbGUgc3RlcCBleGVjdXRpb24uXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIiAtIHNpbmdsZSBzdGVwIGV4ZWN1dGlvbi5cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKSwKLQotI2RlZmluZSBDTURfVEJMX05FWFQgICAgICAgIE1LX0NNRF9UQkxfRU5UUlkoICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAibmV4dCIsIDQsICAgICAgMSwgICAgICAxLCAgICAgIGRvX2JlZGJ1Z19uZXh0LCAgICAgICAgICAgICAgICAgXAotICAgICAgICAibmV4dCAgICAtIHNpbmdsZSBzdGVwIGV4ZWN1dGlvbiwgc3RlcHBpbmcgb3ZlciBzdWJyb3V0aW5lcy5cbiIsXAotICAgICAgICAiIC0gc2luZ2xlIHN0ZXAgZXhlY3V0aW9uLCBzdGVwcGluZyBvdmVyIHN1YnJvdXRpbmVzLlxuIiAgICAgICAgXAotICAgICAgICApLAotCi0jZGVmaW5lIENNRF9UQkxfU1RBQ0sgICAgICAgIE1LX0NNRF9UQkxfRU5UUlkoICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJ3aGVyZSIsIDUsICAgICAxLCAgICAgIDEsICAgICAgZG9fYmVkYnVnX3N0YWNrLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICJ3aGVyZSAgIC0gUHJpbnQgdGhlIHJ1bm5pbmcgc3RhY2suXG4iLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICIgLSBQcmludCB0aGUgcnVubmluZyBzdGFjay5cbiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICksCi0KLSNkZWZpbmUgQ01EX1RCTF9SRFVNUCAgICAgICAgTUtfQ01EX1RCTF9FTlRSWSggICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgInJkdW1wIiwgNSwgICAgIDEsICAgICAgMSwgICAgICBkb19iZWRidWdfcmR1bXAsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgInJkdW1wICAgLSBTaG93IHJlZ2lzdGVycy5cbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIiAtIFNob3cgcmVnaXN0ZXJzLlxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKSwKLQotZXh0ZXJuIGludCBkb19iZWRidWdfZGlzICAgICAgKGNtZF90YmxfdCAqLCBpbnQsIGludCwgY2hhciAqW10pOwotZXh0ZXJuIGludCBkb19iZWRidWdfYXNtICAgICAgKGNtZF90YmxfdCAqLCBpbnQsIGludCwgY2hhciAqW10pOwotZXh0ZXJuIGludCBkb19iZWRidWdfYnJlYWsgICAgKGNtZF90YmxfdCAqLCBpbnQsIGludCwgY2hhciAqW10pOwotZXh0ZXJuIGludCBkb19iZWRidWdfY29udGludWUgKGNtZF90YmxfdCAqLCBpbnQsIGludCwgY2hhciAqW10pOwotZXh0ZXJuIGludCBkb19iZWRidWdfc3RlcCAgICAgKGNtZF90YmxfdCAqLCBpbnQsIGludCwgY2hhciAqW10pOwotZXh0ZXJuIGludCBkb19iZWRidWdfbmV4dCAgICAgKGNtZF90YmxfdCAqLCBpbnQsIGludCwgY2hhciAqW10pOwotZXh0ZXJuIGludCBkb19iZWRidWdfc3RhY2sgICAgKGNtZF90YmxfdCAqLCBpbnQsIGludCwgY2hhciAqW10pOwotZXh0ZXJuIGludCBkb19iZWRidWdfcmR1bXAgICAgKGNtZF90YmxfdCAqLCBpbnQsIGludCwgY2hhciAqW10pOwotCi0vKiBTdXBwb3J0aW5nIHJvdXRpbmVzICovCi1leHRlcm4gaW50IGJlZGJ1Z19wdXRzIChjb25zdCBjaGFyICopOwotZXh0ZXJuIHZvaWQgYmVkYnVnX2luaXQgKHZvaWQpOwotZXh0ZXJuIHZvaWQgZG9fYmVkYnVnX2JyZWFrcG9pbnQgKHN0cnVjdCBwdF9yZWdzICopOwotZXh0ZXJuIHZvaWQgYmVkYnVnX21haW5fbG9vcCAodW5zaWduZWQgbG9uZywgc3RydWN0IHB0X3JlZ3MgKik7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCWludCBod19kZWJ1Z19lbmFibGVkOwotCWludCBzdG9wcGVkOwotCWludCBjdXJyZW50X2JwOwotCXN0cnVjdCBwdF9yZWdzICpyZWdzOwotCi0Jdm9pZCAoKmRvX2JyZWFrKSAoY21kX3RibF90ICosIGludCwgaW50LCBjaGFyICpbXSk7Ci0Jdm9pZCAoKmJyZWFrX2lzcikgKHN0cnVjdCBwdF9yZWdzICopOwotCWludCAoKmZpbmRfZW1wdHkpICh2b2lkKTsKLQlpbnQgKCpzZXQpIChpbnQsIHVuc2lnbmVkIGxvbmcpOwotCWludCAoKmNsZWFyKSAoaW50KTsKLX0gQ1BVX0RFQlVHX0NUWDsKLQotI2Vsc2UgLyogISBDRkdfQ01EX0JFREJVRyAqLwotCi0jZGVmaW5lIENNRF9UQkxfRElTCi0jZGVmaW5lIENNRF9UQkxfQVNNCi0jZGVmaW5lIENNRF9UQkxfQlJFQUsKLSNkZWZpbmUgQ01EX1RCTF9DT05USU5VRQotI2RlZmluZSBDTURfVEJMX1NURVAKLSNkZWZpbmUgQ01EX1RCTF9ORVhUCi0jZGVmaW5lIENNRF9UQkxfU1RBQ0sKLSNkZWZpbmUgQ01EX1RCTF9SRFVNUAotCi0jZW5kaWYgLyogQ0ZHX0NNRF9CRURCVUcgKi8KLSNlbmRpZiAvKiBfQ01EX0JFREJVR19IICovCi0KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBXaWxsaWFtIEwuIFBpdHRzCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlIGZyZWVseQotICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKLSAqIHBhcmFncmFwaCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGFyZSBkdXBsaWNhdGVkIGluIGFsbAotICogc3VjaCBmb3Jtcy4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUyIgYW5kIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IKLSAqIGltcGxpZWQgd2FycmFudGllcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSBpbXBsaWVkCi0gKiB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyCi0gKiBwdXJwb3NlLgotICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9ib290LmggYi9pbmNsdWRlL2NtZF9ib290LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiZDkzMTQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfYm9vdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIEJvb3Qgc3VwcG9ydAotICovCi0jaWZuZGVmCV9DTURfQk9PVF9ICi0jZGVmaW5lCV9DTURfQk9PVF9ICi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9CREkpCi0jZGVmaW5lCUNNRF9UQkxfQkRJTkZPCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImJkaW5mbyIsCTIsCTEsCTEsCWRvX2JkaW5mbywJCQlcCi0JImJkaW5mbyAgLSBwcmludCBCb2FyZCBJbmZvIHN0cnVjdHVyZVxuIiwJCQkJXAotCU5VTEwJCQkJCQkJCQlcCi0pLAotaW50IGRvX2JkaW5mbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZWxzZQotI2RlZmluZSBDTURfVEJMX0JESU5GTwotI2VuZGlmCi0KLQotI2RlZmluZSBDTURfVEJMX0dPCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImdvIiwJCTIsCUNGR19NQVhBUkdTLAkxLAlkb19nbywJCQlcCi0JImdvICAgICAgLSBzdGFydCBhcHBsaWNhdGlvbiBhdCBhZGRyZXNzICdhZGRyJ1xuIiwJCQlcCi0JImFkZHIgW2FyZyAuLi5dXG4gICAgLSBzdGFydCBhcHBsaWNhdGlvbiBhdCBhZGRyZXNzICdhZGRyJ1xuIgkJXAotCSIgICAgICBwYXNzaW5nICdhcmcnIGFzIGFyZ3VtZW50c1xuIgkJCQkJXAotKSwKLWludCBkb19nbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTE9BRFMpCi0jaWZkZWYJQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCi0jZGVmaW5lCUNNRF9UQkxfTE9BRFMJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkibG9hZHMiLAk1LAkzLAkwLAlkb19sb2FkX3NlcmlhbCwJCQlcCi0JImxvYWRzICAgLSBsb2FkIFMtUmVjb3JkIGZpbGUgb3ZlciBzZXJpYWwgbGluZVxuIiwJCQlcCi0JIlsgb2ZmIF0gWyBiYXVkIF1cbiIJCQkJCQkJXAotCSIgICAgLSBsb2FkIFMtUmVjb3JkIGZpbGUgb3ZlciBzZXJpYWwgbGluZSIJCQkJXAotCSIgd2l0aCBvZmZzZXQgJ29mZicgYW5kIGJhdWRyYXRlICdiYXVkJ1xuIgkJCQlcCi0pLAotI2Vsc2UJLyogISBDRkdfTE9BRFNfQkFVRF9DSEFOR0UgKi8KLSNkZWZpbmUJQ01EX1RCTF9MT0FEUwlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJsb2FkcyIsCTUsCTIsCTAsCWRvX2xvYWRfc2VyaWFsLAkJCVwKLQkibG9hZHMgICAtIGxvYWQgUy1SZWNvcmQgZmlsZSBvdmVyIHNlcmlhbCBsaW5lXG4iLAkJCVwKLQkiWyBvZmYgXVxuIgkJCQkJCQkJXAotCSIgICAgLSBsb2FkIFMtUmVjb3JkIGZpbGUgb3ZlciBzZXJpYWwgbGluZSB3aXRoIG9mZnNldCAnb2ZmJ1xuIgkJXAotKSwKLSNlbmRpZgkvKiBDRkdfTE9BRFNfQkFVRF9DSEFOR0UgKi8KLWludCBkb19sb2FkX3NlcmlhbCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0vKgotICogU0FWRVMgYWx3YXlzIHJlcXVpcmVzIExPQURTIHN1cHBvcnQsIGJ1dCBub3QgdmljZSB2ZXJzYQotICovCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfU0FWRVMpCi0jaWZkZWYJQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCi0jZGVmaW5lCUNNRF9UQkxfU0FWRVMJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkic2F2ZXMiLAk1LAk0LAkwLAlkb19zYXZlX3NlcmlhbCwJCQlcCi0JInNhdmVzICAgLSBzYXZlIFMtUmVjb3JkIGZpbGUgb3ZlciBzZXJpYWwgbGluZVxuIiwJCQlcCi0JIlsgb2ZmIF0gW3NpemVdIFsgYmF1ZCBdXG4iCQkJCQkJCVwKLQkiICAgIC0gc2F2ZSBTLVJlY29yZCBmaWxlIG92ZXIgc2VyaWFsIGxpbmUiCQkJCVwKLQkiIHdpdGggb2Zmc2V0ICdvZmYnLCBzaXplICdzaXplJyBhbmQgYmF1ZHJhdGUgJ2JhdWQnXG4iCQkJCVwKLSksCi0jZWxzZQkvKiAhIENGR19MT0FEU19CQVVEX0NIQU5HRSAqLwotI2RlZmluZQlDTURfVEJMX1NBVkVTCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JInNhdmVzIiwJNSwJMywJMCwJZG9fc2F2ZV9zZXJpYWwsCQkJXAotCSJzYXZlcyAgIC0gc2F2ZSBTLVJlY29yZCBmaWxlIG92ZXIgc2VyaWFsIGxpbmVcbiIsCQkJXAotCSJbIG9mZiBdIFtzaXplXVxuIgkJCQkJCQkJXAotCSIgICAgLSBzYXZlIFMtUmVjb3JkIGZpbGUgb3ZlciBzZXJpYWwgbGluZSB3aXRoIG9mZnNldCAnb2ZmJyBhbmQgc2l6ZSAnc2l6ZSdcbiIJCVwKLSksCi0jZW5kaWYJLyogQ0ZHX0xPQURTX0JBVURfQ0hBTkdFICovCi0KLWludCBkb19zYXZlX3NlcmlhbCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotI2Vsc2UJLyogISBDRkdfQ01EX1NBVkVTICovCi0jZGVmaW5lIENNRF9UQkxfU0FWRVMKLSNlbmRpZgkvKiBDRkdfQ01EX1NBVkVTICovCi0KLSNlbHNlCS8qICEgQ0ZHX0NNRF9MT0FEUyAqLwotI2RlZmluZSBDTURfVEJMX0xPQURTCi0jZGVmaW5lIENNRF9UQkxfU0FWRVMKLSNlbmRpZgkvKiBDRkdfQ01EX0xPQURTICovCi0KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0xPQURCKQotI2RlZmluZQlDTURfVEJMX0xPQURCCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImxvYWRiIiwJNSwJMywJMCwJZG9fbG9hZF9zZXJpYWxfYmluLAkJXAotCSJsb2FkYiAgIC0gbG9hZCBiaW5hcnkgZmlsZSBvdmVyIHNlcmlhbCBsaW5lIChrZXJtaXQgbW9kZSlcbiIsCQlcCi0JIlsgb2ZmIF0gWyBiYXVkIF1cbiIJCQkJCQkJXAotCSIgICAgLSBsb2FkIGJpbmFyeSBmaWxlIG92ZXIgc2VyaWFsIGxpbmUiCQkJCVwKLQkiIHdpdGggb2Zmc2V0ICdvZmYnIGFuZCBiYXVkcmF0ZSAnYmF1ZCdcbiIJCQkJXAotKSwKLWludCBkb19sb2FkX3NlcmlhbF9iaW4gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9MT0FEQgotI2VuZGlmCS8qIENGR19DTURfTE9BREIgKi8KLQotI2RlZmluZSBDTURfVEJMX1JFU0VUCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JInJlc2V0IiwJNSwJMSwJMCwJZG9fcmVzZXQsCQkJXAotCSJyZXNldCAgIC0gUGVyZm9ybSBSRVNFVCBvZiB0aGUgQ1BVXG4iLAkJCQkJXAotCU5VTEwJCQkJCQkJCQlcCi0pLAotCi0vKiBJbXBsZW1lbnRlZCBpbiAkKENQVSkvY3B1LmMgKi8KLWludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSFdGTE9XKQotI2RlZmluZQlDTURfVEJMX0hXRkxPVwlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJod2Zsb3cgW29ufG9mZl0iLAkyLAkyLAkwLAlkb19od2Zsb3csCQkJXAotICAgICJod2Zsb3cgIC0gdHVybiB0aGUgaGFyd2RhcmUgZmxvdyBjb250cm9sIG9uL29mZlxuIiwgXAotCSJcbiAtIGNoYW5nZSBSVFMvQ1RTIGhhcmR3YXJlIGZsb3cgY29udHJvbCBvdmVyIHNlcmlhbCBsaW5lXG4iIFwKLSksCi0KLWludCBkb19od2Zsb3cgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9IV0ZMT1cKLSNlbmRpZgotI2VuZGlmCS8qIF9DTURfQk9PVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9ib290YS5oIGIvaW5jbHVkZS9jbWRfYm9vdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VjMzExOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9ib290YS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogVGhvbWFzIEZyaWVkZW4sIEh5cGVyaW9uIEVudGVydGFpbm1lbnQKLSAqIFRob21hc0ZAaHlwZXJpb24tZW50ZXJ0YWlubWVudC5jb20KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotI2lmbmRlZiBfQ01EX0JPT1RBX0gKLSNkZWZpbmUgX0NNRF9CT09UQV9ICi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19BTUlHQU9ORUczU0UpICYmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JTUCkKLSNkZWZpbmUgQ01EX1RCTF9CT09UQSAgICAgTUtfQ01EX1RCTF9FTlRSWSggICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiYm9vdGEiLCA1LCAgIDMsICAgICAgMSwgICAgICBkb19ib290YSwgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiYm9vdGEgICAtIGJvb3QgYW4gQW1pZ2Ega2VybmVsXG4iLCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgImFkZHJlc3MgZGlzayIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKSwKLQotaW50IGRvX2Jvb3RhIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApOwotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9CT09UQQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfQ01EX0JPT1RBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX2Jvb3RtLmggYi9pbmNsdWRlL2NtZF9ib290bS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGMxMjY3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY21kX2Jvb3RtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBCb290IHN1cHBvcnQKLSAqLwotI2lmbmRlZglfQ01EX0JPT1RNX0gKLSNkZWZpbmUJX0NNRF9CT09UTV9ICi1pbnQgZG9fYm9vdG0gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2RlZmluZQlDTURfVEJMX0JPT1RNCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImJvb3RtIiwJNSwJQ0ZHX01BWEFSR1MsCTEsCWRvX2Jvb3RtLAkJXAotCSJib290bSAgIC0gYm9vdCBhcHBsaWNhdGlvbiBpbWFnZSBmcm9tIG1lbW9yeVxuIiwJCQlcCi0JIlthZGRyIFthcmcgLi4uXV1cbiAgICAtIGJvb3QgYXBwbGljYXRpb24gaW1hZ2Ugc3RvcmVkIGluIG1lbW9yeVxuIglcCi0JIiAgICAgICAgcGFzc2luZyBhcmd1bWVudHMgJ2FyZyAuLi4nOyB3aGVuIGJvb3RpbmcgYSBMaW51eCBrZXJuZWwsXG4iCVwKLQkiICAgICAgICAnYXJnJyBjYW4gYmUgdGhlIGFkZHJlc3Mgb2YgYW4gaW5pdHJkIGltYWdlXG4iCQkJXAotKSwKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JPT1REKQotaW50IGRvX2Jvb3RkIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLSNkZWZpbmUgQ01EX1RCTF9CT09URAlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJib290ZCIsCTQsCTEsCTEsCWRvX2Jvb3RkLAkJCVwKLQkiYm9vdGQgICAtIGJvb3QgZGVmYXVsdCwgaS5lLiwgcnVuICdib290Y21kJ1xuIiwJCQlcCi0JTlVMTAkJCQkJCQkJCVwKLSksCi0jZWxzZQotI2RlZmluZSBDTURfVEJMX0JPT1RECi0jZW5kaWYKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lNSSkKLWludCBkb19pbWluZm8gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLSNkZWZpbmUJQ01EX1RCTF9JTUlORk8JTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkiaW1pbmZvIiwJMywJQ0ZHX01BWEFSR1MsCTEsCWRvX2ltaW5mbywJCVwKLQkiaW1pbmZvICAtIHByaW50IGhlYWRlciBpbmZvcm1hdGlvbiBmb3IgYXBwbGljYXRpb24gaW1hZ2VcbiIsCQlcCi0JImFkZHIgW2FkZHIgLi4uXVxuIgkJCQkJCQlcCi0JIiAgICAtIHByaW50IGhlYWRlciBpbmZvcm1hdGlvbiBmb3IgYXBwbGljYXRpb24gaW1hZ2Ugc3RhcnRpbmcgYXRcbiIJXAotCSIgICAgICBhZGRyZXNzICdhZGRyJyBpbiBtZW1vcnk7IHRoaXMgaW5jbHVkZXMgdmVyaWZpY2F0aW9uIG9mIHRoZVxuIglcCi0JIiAgICAgIGltYWdlIGNvbnRlbnRzIChtYWdpYyBudW1iZXIsIGhlYWRlciBhbmQgcGF5bG9hZCBjaGVja3N1bXMpXG4iCVwKLSksCi0jZWxzZQotI2RlZmluZSBDTURfVEJMX0lNSU5GTwotI2VuZGlmCi0KLSNlbmRpZgkvKiBfQ01EX0JPT1RNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX2JzcC5oIGIvaW5jbHVkZS9jbWRfYnNwLmgKaW5kZXggMDA4MDA4YS4uNDE3ZDMyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jbWRfYnNwLmgKKysrIGIvaW5jbHVkZS9jbWRfYnNwLmgKQEAgLTI0LDMyMiArMjQsNiBAQAogI2lmbmRlZiBfQ01EX0JTUF9IXwogI2RlZmluZSBfQ01EX0JTUF9IXwogCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQlNQKQotCi0vKiAtLS0tLSBMV01PTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0xXTU9OKQotCi0jZGVmaW5lCUNNRF9UQkxfQlNQCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JInBpYyIsCTMsCTQsCTEsCWRvX3BpYywJCQkJCVwKLQkicGljICAgICAtIHJlYWQgYW5kIHdyaXRlIFBJQyByZWdpc3RlcnNcbiIsCQkJCVwKLQkicmVhZCAgcmVnICAgICAgLSByZWFkIFBJQyByZWdpc3RlciBgcmVnJ1xuIgkJCQlcCi0JInBpYyB3cml0ZSByZWcgdmFsICAtIHdyaXRlIHZhbHVlIGB2YWwnIHRvIFBJQyByZWdpc3RlciBgcmVnJ1xuIglcCi0pLCAgTUtfQ01EX1RCTF9FTlRSWSgJCQkJCQkJCVwKLQkia2JkIiwJMywJMSwJMSwJZG9fa2JkLAkJCQkJXAotCSJrYmQgICAgIC0gcmVhZCBrZXlib2FyZCBzdGF0dXNcbiIsCQkJCQlcCi0JTlVMTAkJCQkJCQkJCVwKLSksICBNS19DTURfVEJMX0VOVFJZKAkJCQkJCQkJXAotCSJsc2IiLAkzLAkyLAkxLAlkb19sc2IsCQkJCQlcCi0JImxzYiAgICAgLSBjaGVjayBhbmQgc2V0IExTQiBzd2l0Y2hcbiIsCQkJCQlcCi0JIm9uICAtIHN3aXRjaCBMU0Igb25cbiIJCQkJCQkJXAotCSJsc2Igb2ZmIC0gc3dpdGNoIExTQiBvZmZcbiIJCQkJCQlcCi0JImxzYiAgICAgLSBwcmludCBjdXJyZW50IHNldHRpbmdcbiIJCQkJCVwKLSksCi1pbnQgZG9fcGljIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9fa2JkIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9fbHNiIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLSNlbmRpZgkvKiBDT05GSUdfTFdNT04gKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCi0KLS8qIC0tLS0tIFBDVSBFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfUENVX0UpCi0KLSNkZWZpbmUgQ01EX1RCTF9CU1AJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkicHVtYSIsCTQsCTQsCTEsCWRvX3B1bWEsCQkJCVwKLQkicHVtYSAgICAtIGFjY2VzcyBQVU1BIEZQR0FcbiIsCQkJCQkJXAotCSJzdGF0dXMgLSBwcmludCBQVU1BIHN0YXR1c1xuIgkJCQkJCVwKLQkicHVtYSBsb2FkIGFkZHIgbGVuIC0gbG9hZCBQVU1BIGNvbmZpZ3VyYXRpb24gZGF0YVxuIgkJCVwKLSksCi1pbnQgZG9fcHVtYSAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZW5kaWYJLyogQ09ORklHX1BDVV9FICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLwotCi0vKiAtLS0tLSBDQ00vU0NNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0NDTSkgfHwgZGVmaW5lZChDT05GSUdfU0NNKQotCi0jZGVmaW5lIENNRF9UQkxfQlNQCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImZwZ2EiLAk0LAk0LAkxLAlkb19mcGdhLAkJCQlcCi0JImZwZ2EgICAgLSBhY2Nlc3MgRlBHQShzKVxuIiwJCQkJCQlcCi0JImZwZ2Egc3RhdHVzIFtuYW1lXSAtIHByaW50IEZQR0Egc3RhdHVzXG4iCQkJCVwKLQkiZnBnYSByZXNldCAgW25hbWVdIC0gcmVzZXQgRlBHQVxuIgkJCQkJXAotCSJmcGdhIGxvYWQgW25hbWVdIGFkZHIgLSBsb2FkIEZQR0EgY29uZmlndXJhdGlvbiBkYXRhXG4iCQlcCi0pLAotaW50IGRvX2ZwZ2EgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2VuZGlmCS8qIENPTkZJR19DQ00sIENPTkZJR19TQ00gKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCi0KLS8qIC0tLS0tIFBJUDQwNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfUElQNDA1KQotCi0jZGVmaW5lCUNNRF9UQkxfQlNQIE1LX0NNRF9UQkxfRU5UUlkoCQkJCVwKLQkicGlwNDA1IiwJNCwJNiwJMSwJZG9fcGlwNDA1LAkJCVwKLQkicGlwNDA1ICAtIFBJUDQwNSBzcGVjaWZpYyBDbWRzXG4iLAkJCQkJXAotCSJmbGFzaCBtZW0gW1NyY0FkZHJdIC0gdXBkYXRlcyBVLUJvb3Qgd2l0aCBpbWFnZSBpbiBtZW1vcnlcbiIJCQkJCVwKLQkicGlwNDA1IGZsYXNoIGZsb3BweSBbU3JjQWRkcl0gLSB1cGRhdGVzIFUtQm9vdCB3aXRoIGltYWdlIGZyb20gZmxvcHB5XG4iCQkJCQlcCi0JInBpcDQwNSBmbGFzaCBtcHMgLSB1cGRhdGVzIFUtQm9vdCB3aXRoIGltYWdlIGZyb20gTVBTXG4iCQkJCQlcCi0pLAotaW50IGRvX3BpcDQwNSAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZW5kaWYgLyogQ09ORklHX1BJUDQwNSAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KLQotLyogLS0tLS0gTUlQNDA1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19NSVA0MDUpCi0KLSNkZWZpbmUJQ01EX1RCTF9CU1AgTUtfQ01EX1RCTF9FTlRSWSgJCQkJXAotCSJtaXA0MDUiLAk0LAk2LAkxLAlkb19taXA0MDUsCQkJXAotCSJtaXA0MDUgIC0gTUlQNDA1IHNwZWNpZmljIENtZHNcbiIsCQkJCQlcCi0JImZsYXNoIG1lbSBbU3JjQWRkcl0gLSB1cGRhdGVzIFUtQm9vdCB3aXRoIGltYWdlIGluIG1lbW9yeVxuIgkJCQkJXAotCSJtaXA0MDUgZmxhc2ggbXBzIC0gdXBkYXRlcyBVLUJvb3Qgd2l0aCBpbWFnZSBmcm9tIE1QU1xuIgkJCQkJXAotKSwKLWludCBkb19taXA0MDUgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2VuZGlmIC8qIENPTkZJR19NSVA0MDUgKi8KLS8qIC0tLS0tIFZDTUE5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19WQ01BOSkKLQotI2RlZmluZQlDTURfVEJMX0JTUCBNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JInZjbWE5IiwJNCwJNiwJMSwJZG9fdmNtYTksCVwKLQkidmNtYTkgICAtIFZDTUE5IHNwZWNpZmljIENtZHNcbiIsCQkJXAotCSJmbGFzaCBtZW0gW1NyY0FkZHJdIC0gdXBkYXRlcyBVLUJvb3Qgd2l0aCBpbWFnZSBpbiBtZW1vcnlcbiIJCQkJCVwKLSksCi1pbnQgZG9fdmNtYTkgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2VuZGlmIC8qIENPTkZJR19WQ01BOSAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIC0tLS0tIERBU0FfU0lNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfREFTQV9TSU0pCi0KLSNkZWZpbmUJQ01EX1RCTF9CU1AgTUtfQ01EX1RCTF9FTlRSWSgJCQkJICAgICAgICAgICAgICAgIFwKLQkicGNpOTA1NCIsCTcsCTMsCTEsCWRvX3BjaTkwNTQsCQkJXAotCSJwY2k5MDU0IC0gUExYIFBDSTkwNTQgRUVQUk9NIGFjY2Vzc1xuIiwJCQkJXAotCSJwY2k5MDU0IGluZm8gLSBwcmludCBFRVBST00gdmFsdWVzXG4iCQkgICAgICAgICAgICAgICAgICAgICAgICBcCi0JInBjaTkwNTQgdXBkYXRlIC0gdXBkYXRlcyBFRVBST00gd2l0aCBkZWZhdWx0IHZhbHVlc1xuIgkJCVwKLSksCi1pbnQgZG9fcGNpOTA1NCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZW5kaWYgLyogQ09ORklHX0RBU0FfU0lNICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLwotCi0vKiAtLS0tLSBIWU1PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0hZTU9EKQotCi0jZGVmaW5lCUNNRF9UQkxfQlNQCU1LX0NNRF9UQkxfRU5UUlkoCQkJCVwKLQkiZnBnYSIsCTQsCTYsCTEsCWRvX2ZwZ2EsCQkJXAotCSJmcGdhICAgIC0gRlBHQSBzdWItc3lzdGVtXG4iLAkJCQkJXAotCSJsb2FkIFt0eXBlXSBhZGRyIHNpemVcbiIJCQkJCVwKLQkiICAtIHdyaXRlIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYXQgbWVtb3J5IGFkZHJlc3MgYGFkZHInLFxuIglcCi0JIiAgICBzaXplIGBzaXplJyBieXRlcywgaW50byB0aGUgRlBHQSBvZiB0eXBlIGB0eXBlJyAoZWl0aGVyXG4iCVwKLQkiICAgIGBtYWluJyBvciBgbWV6eicsIGRlZmF1bHQgYG1haW4nKS4gZS5nLlxuIgkJCVwKLQkiICAgICAgICBgZnBnYSBsb2FkIDEwMDAwMCA3ZDhmJ1xuIgkJCQlcCi0JIiAgICBsb2FkcyB0aGUgbWFpbiBGUEdBIHdpdGggY29uZmlnIGRhdGEgYXQgYWRkcmVzcyAxMDAwMDBcbiIJXAotCSIgICAgSEVYLCBzaXplIDdkOGYgSEVYICgzMjE0MyBERUMpIGJ5dGVzXG4iCQkJXAotCSJmcGdhIHRmdHAgZmlsZSBhZGRyXG4iCQkJCQkJXAotCSIgIC0gdHJhbnNmZXJzIGBmaWxlJyBmcm9tIHRoZSB0ZnRwIHNlcnZlciBpbnRvIG1lbW9yeSBhdFxuIglcCi0JIiAgICBhZGRyZXNzIGBhZGRyJywgdGhlbiB3cml0ZXMgdGhlIGVudGlyZSBmaWxlIGNvbnRlbnRzXG4iCVwKLQkiICAgIGludG8gdGhlIG1haW4gRlBHQVxuIgkJCQkJXAotCSJmcGdhIHN0b3JlIGFkZHJcbiIJCQkJCQlcCi0JIiAgLSByZWFkIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIHRoZSBtYWluIEZQR0EgKHRoZSBtZXp6XG4iCVwKLQkiICAgIEZQR0EgaXMgd3JpdGUtb25seSksIGludG8gYWRkcmVzcyBgYWRkcicuIFRoZXJlIG11c3QgYmVcbiIJXAotCSIgICAgZW5vdWdoIG1lbW9yeSBhdmFpbGFibGUgYXQgYGFkZHInIHRvIGhvbGQgYWxsIHRoZSBjb25maWdcbiJcCi0JIiAgICBkYXRhIC0gdGhlIHNpemUgb2Ygd2hpY2ggaXMgZGV0ZXJtaW5lZCBieSBWQzo/Pz9cbiIJXAotCSJmcGdhIGluZm9cbiIJCQkJCQkJXAotCSIgIC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEh5bW9kIEZQR0EsIG5hbWVseSB0aGVcbiIJXAotCSIgICAgbWVtb3J5IGFkZHJlc3NlcyBhdCB3aGljaCB0aGUgZm91ciBGUEdBIGxvY2FsIGJ1c1xuIglcCi0JIiAgICBhZGRyZXNzIHNwYWNlcyBhcHBlYXIgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcbiIJXAotKSwgTUtfQ01EX1RCTF9FTlRSWSgJCQkJCQkJXAotCSJlZWNsZWFyIiwgNCwJMSwJMCwJZG9fZWVjbCwJCQlcCi0JImVlY2xlYXIgLSBDbGVhciB0aGUgZWVwcm9tIG9uIGEgSHltb2QgYm9hcmRcbiIsCQlcCi0JIlt0eXBlXVxuIgkJCQkJCQlcCi0JIiAgLSB3cml0ZSB6ZXJvZXMgaW50byB0aGUgRUVQUk9NIG9uIHRoZSBib2FyZCBvZiB0eXBlIGB0eXBlJ1xuIlwKLQkiICAgIChgdHlwZScgaXMgZWl0aGVyIGBtYWluJyBvciBgbWV6eicgLSBkZWZhdWx0IGBtYWluJylcbiIJXAotCSIgICAgTm90ZTogdGhlIEVFUFJPTSB3cml0ZSBlbmFibGUganVtcGVyIG11c3QgYmUgaW5zdGFsbGVkXG4iCVwKLSksIE1LX0NNRF9UQkxfRU5UUlkoCQkJCQkJCVwKLQkiaHRlc3QiLCA1LAkxLAkwLAlkb19odGVzdCwJCQlcCi0JImh0ZXN0ICAgLSBydW4gSFlNT0QgdGVzdHNcbiIsCQkJCQlcCi0JTlVMTAkJCQkJCQkJXAotKSwKLQotaW50IGRvX2ZwZ2EgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19lZWNsIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9faHRlc3QoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZW5kaWYJLyogQ09ORklHX0hZTU9EICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLwotCi0vKiAtLS0tLSBDUkFZNDA1IChMMSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmIGRlZmluZWQgKENPTkZJR19DUkFZTDEpCi0jZGVmaW5lCUNNRF9UQkxfQlNQIE1LX0NNRF9UQkxfRU5UUlkoCQkJCQkJXAotCSJMMWNtZCIsCTUsCTQsCTEsCWRvX2NyYXlMMSwJCQlcCi0JIkwxY21kICAtIEwxIHVwZGF0ZSwgc2V0dXAsIGNvbW1hbmRzIFxuIiwJCQkJXAotCSJMMWNtZCB1cGRhdGUgLSB1cGRhdGUgZmxhc2ggaW1hZ2VzIGZyb20gaG9zdFxuIgkJCVwKLQkiTDFjbWQgYm9vdCAtIG5mcyBvciByYW1ib290IEwxXG4iCQkJCQlcCi0pLAotaW50IGRvX2NyYXlMMSAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotI2VuZGlmIC8qIENPTkZJR19DUkFZNDA1ICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLwotCi0vKiAtLS0tLSBFVkI2NDI2MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmIGRlZmluZWQgKENPTkZJR19FVkI2NDI2MCkKLSNpZmRlZiBDT05GSUdfWlVNQV9WMgotI2RlZmluZSBDTURfVEJMX0JTUCAgWlVNQV9UQkxfRU5UUlkKLQotI2RlZmluZSBaVU1BX1RCTF9FTlRSWQlNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JInppbml0IiwJIDUsCSAxLAkgMCwJIGRvX3p1bWFfaW5pdF9wYmIsCVwKLQkiemluaXQgICAtIGluaXQgenVtYSBwYmJcbiIsCQkJCQlcCi0JIlxuIgkJCQkJCQkJXAotCSIgICAgLSBpbml0IHp1bWEgcGJiXG4iCQkJCQkJXAotKSwgTUtfQ01EX1RCTF9FTlRSWSgJCQkJCQkJXAotCSJ6ZHRlc3QiLAkgIDYsCSAgMywJICAxLAkgIGRvX3p1bWFfdGVzdF9kbWEsCVwKLQkiemR0ZXN0ICAtIHJ1biBkbWEgdGVzdFxuIiwJCQkJCVwKLQkiW2NtZCBbY291bnRdXVxuIgkJCQkJCVwKLQkiICAgIC0gcnVuIGRtYSBjbWQgKHc9MCx2PTEsY3A9MixjbXA9Myx3aT00LHZpPTUpLCBjb3VudCBieXRlc1xuIiBcCi0pLCBNS19DTURfVEJMX0VOVFJZKAkJCQkJCQlcCi0JInptaW5pdCIsCSAgNSwJICAxLAkgIDAsCSAgZG9fenVtYV9pbml0X21ib3gsCVwKLQkiem1pbml0ICAtIGluaXQgenVtYSBtYm94XG4iLAkJCQlcCi0JIlxuIgkJCQkJCQkJXAotCSIgICAgLSBpbml0IHp1bWEgbWJveFxuIgkJCQkJXAotKSwKLQotaW50IGRvX3p1bWFfaW5pdF9wYmIgIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9fenVtYV90ZXN0X2RtYSAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb196dW1hX2luaXRfbWJveCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi12b2lkIHp1bWFfaW5pdF9wYmIodm9pZCk7Ci1pbnQgenVtYV9tYm94X2luaXQodm9pZCk7Ci1pbnQgenVtYV90ZXN0X2RtYShpbnQgY21kLCBpbnQgc2l6ZSk7Ci0jZWxzZQotI2RlZmluZSBDTURfVEJMX0JTUAotI2VuZGlmIC8qIFpVTUFfTlRMICovCi0KLSNlbmRpZiAvKiBDT05GSUdfRVZCNjQyNjAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCi0KLS8qIC0tLS0tVzdPLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfVzdPKQotCi0jZGVmaW5lIENNRF9UQkxfQlNQIE1LX0NNRF9UQkxfRU5UUlkoCQkJXAotCSAgInZwZCIsCTMsCTIsCTEsCWRvX3ZwZCwgXAotCSAgInZwZCAgICAgLSBSZWFkIFZpdGFsIFByb2R1Y3QgRGF0YVxuIiwJXAotCSAgIltkZXZfYWRkcl1cbiIJCQkJXAotCSAgIiAgICAgICAgLSBSZWFkIFZQRCBEYXRhIGZyb20gZGVmYXVsdCBhZGRyZXNzLCBvciBkZXZpY2UgYWRkcmVzcyAnZGV2X2FkZHInLlxuIiBcCi0pLAotCi1leHRlcm4gaW50IGRvX3ZwZCAoY21kX3RibF90ICosIGludCwgaW50LCBjaGFyICpbXSk7Ci0KLSNlbmRpZgkvKiBDT05GSUdfVzdPICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLwotCi0vKiAtLS0tIFBDSVBQQzIgLyBQQ0lQUEM2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSVBQQzIpIHx8IGRlZmluZWQoQ09ORklHX1BDSVBQQzYpCi0jaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCi0KLSNkZWZpbmUgQ01EX1RCTF9CU1AgTUtfQ01EX1RCTF9FTlRSWSgJCQlcCi0JIndkIiwJMywJMiwJMSwJZG9fd2QsCQlcCi0JIndkICAgICAgLSBjaGVjayBhbmQgc2V0IHdhdGNoZG9nXG4iLAkJXAotCSJvbiAgIC0gc3dpdGNoIHdhdGNoRG9nIG9uXG4iCQkJXAotCSJ3ZCBvZmYgIC0gc3dpdGNoIHdhdGNoZG9nIG9mZlxuIgkJXAotCSJ3ZCAgICAgIC0gcHJpbnQgY3VycmVudCBzdGF0dXNcbiIJCVwKLSksCi0KLWV4dGVybiBpbnQgZG9fd2QgKGNtZF90YmxfdCAqLCBpbnQsIGludCwgY2hhciAqW10pOwotCi0jZWxzZQotI2RlZmluZSBDTURfVEJMX0JTUAotI2VuZGlmICAvKiBDT05GSUdfV0FUQ0hET0cgKi8KLQotI2VuZGlmCS8qIENPTkZJR19QQ0lQUEMyICwgQ09ORklHX1BDSVBQQzYgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCi0KLS8qIC0tLS0tIFBONjIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfUE42MikKLQotI2RlZmluZSBDTURfVEJMX0JTUCBNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JImxvYWRwY2kiLAk1LAkyLAkxLAlkb19sb2FkcGNpLCAJXAotCSJsb2FkcGNpIC0gbG9hZCBiaW5hcnkgZmlsZSBvdmVyIFBDSVxuIiwJCVwKLQkiW2FkZHJdXG4iCQkJCQkJXAotCSIgICAgLSBsb2FkIGJpbmFyeSBmaWxlIG92ZXIgUENJIHRvIGFkZHJlc3MgJ2FkZHInXG4iCVwKLSksIE1LX0NNRF9UQkxfRU5UUlkoIAkgCSAJIAkgCSAJXAotCSJsZWQiICAgICwJMywJMywJMSwJZG9fbGVkLCAJXAotCSJsZWQgICAgIC0gc2V0IExFRCAwLi4xMSBvbiB0aGUgUE42MiBib2FyZFxuIiwJCVwKLQkiaSBmdW5cbiIJCQkJCQlcCi0JIiAgICAtIHNldCAnaSd0aCBMRUQgdG8gZnVuY3Rpb24gJ2Z1bidcbiIJCVwKLSksCi0KLWV4dGVybiBpbnQgZG9fbG9hZHBjaSAoY21kX3RibF90ICosIGludCwgaW50LCBjaGFyICpbXSk7Ci1leHRlcm4gaW50IGRvX2xlZCAoY21kX3RibF90ICosIGludCwgaW50LCBjaGFyICpbXSk7Ci0jZW5kaWYgLyogQ09ORklHX1BONjIgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCi0KLS8qIC0tLS0tIFRSQUIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfVFJBQikKLQotI2RlZmluZQlDTURfVEJMX0JTUAlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkia2JkIiwJMywJMSwJMSwJZG9fa2JkLAkJCVwKLQkia2JkICAgICAtIHJlYWQga2V5Ym9hcmQgc3RhdHVzXG4iLAkJCVwKLQlOVUxMCQkJCQkJCVwKLSksCi0KLWludCBkb19rYmQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2VuZGlmCS8qIENPTkZJR19UUkFCICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLwotCi0vKiAtLS0tLSBSMzYwTVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1IzNjBNUEkpCi0KLSNkZWZpbmUJQ01EX1RCTF9CU1AJTUtfQ01EX1RCTF9FTlRSWSgJCQlcCi0JImtiZCIsCTMsCTEsCTEsCWRvX2tiZCwJCQlcCi0JImtiZCAgICAgLSByZWFkIGtleWJvYXJkIHN0YXR1c1xuIiwJCQlcCi0JTlVMTAkJCQkJCQlcCi0pLAotCi1pbnQgZG9fa2JkIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLSNlbmRpZgkvKiBDT05GSUdfUjM2ME1QSSAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KLQotLyogLS0tLS0tIEFNSUdBT05FRzNTRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19BTUlHQU9ORUczU0UpCi0KLSNkZWZpbmUgQ01EX1RCTF9CU1AJLyogZHVtbXkgKi8KLQotI2VuZGlmICAvKiBBbWlnYU9uZUczU0UgKi8KLS8qIC0tLS0tIFBDSTQwNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJNDA1KQotCi0jZGVmaW5lCUNNRF9UQkxfQlNQCU1LX0NNRF9UQkxfRU5UUlkoCQkJXAotCSJsb2FkcGNpIiwJNywJMSwJMSwJZG9fbG9hZHBjaSwJXAotCSJsb2FkcGNpIC0gd2FpdCBmb3Igc3luYyBhbmQgYm9vdCBpbWFnZVxuIiwJCVwKLQlOVUxMCQkJCQkJCVwKLSksCi0KLWludCBkb19sb2FkcGNpIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLSNlbmRpZgkvKiBDT05GSUdfUENJNDA1ICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZWxzZQotI2RlZmluZSBDTURfVEJMX0JTUAotI2VuZGlmCS8qIENGR19DTURfQlNQICovCisvKiBkbyBub3QgZWRpdCB0aGlzIGZpbGUgKi8KIAogI2VuZGlmCS8qIF9DTURfQlNQX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9jYWNoZS5oIGIvaW5jbHVkZS9jbWRfY2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc5YTg0Ni4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogQ2FjaGUgc3VwcG9ydDogc3dpdGNoIG9uIG9yIG9mZiwgZ2V0IHN0YXR1cwotICovCi0jaWZuZGVmCV9DTURfQ0FDSEVfSAotI2RlZmluZQlfQ01EX0NBQ0hFX0gKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0NBQ0hFKQotI2RlZmluZQlDTURfVEJMX0lDQUNIRQlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJpY2FjaGUiLAkyLAkyLAkxLAlkb19pY2FjaGUsCQkJXAotCSJpY2FjaGUgIC0gZW5hYmxlIG9yIGRpc2FibGUgaW5zdHJ1Y3Rpb24gY2FjaGVcbiIsCQkJXAotCSJbb24sIG9mZl1cbiIJCQkJCQkJCVwKLQkiICAgIC0gZW5hYmxlIG9yIGRpc2FibGUgaW5zdHJ1Y3Rpb24gY2FjaGVcbiIJCQkJXAotKSwKLQotI2RlZmluZSBDTURfVEJMX0RDQUNIRQlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJkY2FjaGUiLAkyLAkyLAkxLAlkb19kY2FjaGUsCQkJXAotCSJkY2FjaGUgIC0gZW5hYmxlIG9yIGRpc2FibGUgZGF0YSBjYWNoZVxuIiwJCQkJXAotCSJbb24sIG9mZl1cbiIJCQkJCQkJCVwKLQkiICAgIC0gZW5hYmxlIG9yIGRpc2FibGUgZGF0YSAod3JpdGV0aHJvdWdoKSBjYWNoZVxuIgkJCVwKLSksCi1pbnQgZG9faWNhY2hlIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9fZGNhY2hlIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0jZWxzZQotI2RlZmluZSBDTURfVEJMX0lDQUNIRQotI2RlZmluZSBDTURfVEJMX0RDQUNIRQotI2VuZGlmCS8qIENGR19DTURfQ0FDSEUgKi8KLQotI2VuZGlmCS8qIF9DTURfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfY29uZmRlZnMuaCBiL2luY2x1ZGUvY21kX2NvbmZkZWZzLmgKaW5kZXggNzQ2MTRlYi4uNTc3ODI2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jbWRfY29uZmRlZnMuaAorKysgYi9pbmNsdWRlL2NtZF9jb25mZGVmcy5oCkBAIC0xMzYsNyArMTM2LDYgQEAKICNlbmRpZgogCiAKLQogLyoKICAqIG9wdGlvbmFsIEJPT1RQIGZpZWxkcwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9jb25zb2xlLmggYi9pbmNsdWRlL2NtZF9jb25zb2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZjkwYzkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfY29uc29sZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogTmV0d29yayBib290IHN1cHBvcnQKLSAqLwotI2lmbmRlZglfQ01EX0NPTlNPTEVfSAotI2RlZmluZQlfQ01EX0NPTlNPTEVfSAotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQ09OU09MRSkKLSNkZWZpbmUJQ01EX1RCTF9DT05JTkZPCU1LX0NNRF9UQkxfRU5UUlkoCQkJXAotCSJjb25pbmZvIiwJNSwJMywJMSwJZG9fY29uaW5mbywJXAotCSJjb25pbmZvIC0gcHJpbnQgY29uc29sZSBkZXZpY2VzIGFuZCBpbmZvcm1hdGlvblxuIiwJXAotCSIiCQkgCQkgCQkJXAotKSwKLWludCBkb19jb25pbmZvIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLSNlbHNlCi0jZGVmaW5lCUNNRF9UQkxfQ09OSU5GTwotI2VuZGlmCS8qIENGR19DTURfQ09OU09MRSAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX2Rjci5oIGIvaW5jbHVkZS9jbWRfZGNyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MTk2YWQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfZGNyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBFcmlrIFRoZWlzZW4sICBXYXZlIDcgT3B0aWNzLCBldGhlaXNlbkBtaW5kc3ByaW5nLmNvbS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogSUJNIDRYWCBEQ1IgRnVuY3Rpb25zCi0gKi8KLSNpZm5kZWYgX0NNRF9EQ1JfSAotI2RlZmluZSBfQ01EX0RDUl9ICi0KLSNpZiBkZWZpbmVkKENPTkZJR180eHgpICYmIGRlZmluZWQoQ0ZHX0NNRF9TRVRHRVREQ1IpCi0jZGVmaW5lIENNRF9UQkxfR0VURENSCU1LX0NNRF9UQkxfRU5UUlkoCQkJCVwKLQkiZ2V0ZGNyIiwJNiwJMiwJMSwJZG9fZ2V0ZGNyLAkJXAotCSJnZXRkY3IgIC0gR2V0IGFuIElCTSBQUEMgNHh4IERDUidzIHZhbHVlXG4iLAkJCVwKLQkiZGNybiAtIHJldHVybiBhIERDUidzIHZhbHVlLlxuIgkJCQlcCi0pLAotI2RlZmluZSBDTURfVEJMX1NFVERDUglNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JInNldGRjciIsCTYsCTIsCTEsCWRvX3NldGRjciwJCVwKLQkic2V0ZGNyICAtIFNldCBhbiBJQk0gUFBDIDR4eCBEQ1IncyB2YWx1ZVxuIiwJCQlcCi0JImRjcm4gLSBzZXQgYSBEQ1IncyB2YWx1ZS5cbiIJCQkJCVwKLSksCi1leHRlcm4gaW50IGRvX2dldGRjciAoY21kX3RibF90ICosIGludCwgaW50LCBjaGFyICpbXSk7Ci1leHRlcm4gaW50IGRvX3NldGRjciAoY21kX3RibF90ICosIGludCwgaW50LCBjaGFyICpbXSk7Ci0KLS8qIFN1cHBvcnRpbmcgcm91dGluZXMgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9kY3IodW5zaWduZWQgc2hvcnQgZGNybik7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzZXRfZGNyKHVuc2lnbmVkIHNob3J0IGRjcm4sIHVuc2lnbmVkIGxvbmcgdmFsdWUpOwotCi0jZWxzZQotCi0jZGVmaW5lIENNRF9UQkxfR0VURENSCi0jZGVmaW5lIENNRF9UQkxfU0VURENSCi0KLSNlbmRpZiAvKiBDT05GSUdfNHh4ICYgQ0ZHX0NNRF9TRVRHRVREQ1IgKi8KLQotI2VuZGlmCS8qIF9DTURfRENSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX2RpYWcuaCBiL2luY2x1ZGUvY21kX2RpYWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgzNGE3Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9kaWFnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBEaWFnbm9zdGljcyBzdXBwb3J0Ci0gKi8KLSNpZm5kZWYJX0NNRF9ESUFHX0gKLSNkZWZpbmUJX0NNRF9ESUFHX0gKLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRElBRykgJiYgZGVmaW5lZChDT05GSUdfUE9TVCkKLSNkZWZpbmUJQ01EX1RCTF9ESUFHCU1LX0NNRF9UQkxfRU5UUlkoCQkJCVwKLQkiZGlhZyIsCTQsCUNGR19NQVhBUkdTLAkwLAlkb19kaWFnLAkJXAotCSJkaWFnICAgIC0gcGVyZm9ybSBib2FyZCBkaWFnbm9zdGljc1xuIiwJCQlcCi0JICAgICAiICAgIC0gcHJpbnQgbGlzdCBvZiBhdmFpbGFibGUgdGVzdHNcbiIJCQlcCi0JImRpYWcgW3Rlc3QxIFt0ZXN0Ml1dXG4iCQkJCQlcCi0JIiAgICAgICAgIC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgc3BlY2lmaWVkIHRlc3RzXG4iCQlcCi0JImRpYWcgcnVuIC0gcnVuIGFsbCBhdmFpbGFibGUgdGVzdHNcbiIJCQkJXAotCSJkaWFnIHJ1biBbdGVzdDEgW3Rlc3QyXV1cbiIJCQkJCVwKLQkiICAgICAgICAgLSBydW4gc3BlY2lmaWVkIHRlc3RzXG4iCQkJCVwKLSksCi0KLWludCBkb19kaWFnIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0jZWxzZQotI2RlZmluZSBDTURfVEJMX0RJQUcKLSNlbmRpZgkvKiBDRkdfQ01EX0RJQUcgKi8KLQotI2VuZGlmCS8qIF9DTURfRElBR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9kb2MuaCBiL2luY2x1ZGUvY21kX2RvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2FhODY0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY21kX2RvYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBEaXNrLU9uLUNoaXAgc3VwcG9ydAotICovCi0jaWZuZGVmCV9DTURfRE9DX0gKLSNkZWZpbmUJX0NNRF9ET0NfSAotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9ET0MpCi0jZGVmaW5lCUNNRF9UQkxfRE9DCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImRvYyIsCTMsCTUsCTEsCWRvX2RvYywJCQkJCVwKLQkiZG9jICAgICAtIERpc2stT24tQ2hpcCBzdWItc3lzdGVtXG4iLAkJCQkJXAotCSJpbmZvICAtIHNob3cgYXZhaWxhYmxlIERPQyBkZXZpY2VzXG4iCQkJCQlcCi0JImRvYyBkZXZpY2UgW2Rldl0gLSBzaG93IG9yIHNldCBjdXJyZW50IGRldmljZVxuIgkJCVwKLQkiZG9jIHJlYWQgIGFkZHIgb2ZmIHNpemVcbiIJCQkJCQlcCi0JImRvYyB3cml0ZSBhZGRyIG9mZiBzaXplIC0gcmVhZC93cml0ZSBgc2l6ZSciCQkJCVwKLQkiIGJ5dGVzIHN0YXJ0aW5nIGF0IG9mZnNldCBgb2ZmJ1xuIgkJCQkJXAotCSIgICAgdG8vZnJvbSBtZW1vcnkgYWRkcmVzcyBgYWRkcidcbiIJCQkJCVwKLQkiZG9jIGVyYXNlIG9mZiBzaXplIC0gZXJhc2UgYHNpemUnIGJ5dGVzIG9mIERPQyBmcm9tIG9mZnNldCBgb2ZmJ1xuIglcCi0pLAotCi0jZGVmaW5lIENNRF9UQkxfRE9DQk9PVAlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJkb2Nib290IiwgNCwJNCwJMSwJZG9fZG9jYm9vdCwJCQkJXAotCSJkb2Nib290IC0gYm9vdCBmcm9tIERPQyBkZXZpY2VcbiIsCQkJCQlcCi0JImxvYWRBZGRyIGRldlxuIgkJCQkJCQlcCi0pLAotCi1pbnQgZG9fZG9jIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9fZG9jYm9vdCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZWxzZQotI2RlZmluZSBDTURfVEJMX0RPQwotI2RlZmluZSBDTURfVEJMX0RPQ0JPT1QKLSNlbmRpZgotCi0jZW5kaWYJLyogX0NNRF9ET0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfZHR0LmggYi9pbmNsdWRlL2NtZF9kdHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcxOTJhMy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9kdHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEKLSAqIEVyaWsgVGhlaXNlbiwgIFdhdmUgNyBPcHRpY3MsIGV0aGVpc2VuQG1pbmRzcHJpbmcuY29tLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBSZWFkIERpZ2l0YWwgVGhlcm1vbWV0ZXJzICYgVGhlcm1vc3RhdHMKLSAqLwotI2lmbmRlZiBfQ01EX0RUVF9ICi0jZGVmaW5lIF9DTURfRFRUX0gKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0RUVCkKLQotI2RlZmluZSBDTURfVEJMX0RUVCBNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JICAiZHR0IiwJMywJMSwJMSwJZG9fZHR0LAkJXAotCSAgImR0dCAgICAgLSBEaWdpdGFsIFRoZXJtb21ldGVyIGFuZCBUaGVtb3N0YXRcbiIsCVwKLQkgICIgICAgICAgIC0gUmVhZCB0ZW1wZXJhdHVyZSBmcm9tIGRpZ2l0YWwgdGhlcm1vbWV0ZXIgYW5kIHRoZXJtb3N0YXQuXG4iIFwKLSksCi1leHRlcm4gaW50IGRvX2R0dCAoY21kX3RibF90ICosIGludCwgaW50LCBjaGFyICpbXSk7Ci0KLSNlbHNlCi0KLSNkZWZpbmUgQ01EX1RCTF9EVFQKLQotI2VuZGlmIC8qIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0RUVCkgKi8KLQotI2VuZGlmCS8qIF9DTURfRFRUX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfZWVwcm9tLmggYi9pbmNsdWRlL2NtZF9lZXByb20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZkOTI5ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9lZXByb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIEVFUFJPTSBzdXBwb3J0Ci0gKi8KLSNpZm5kZWYJX0NNRF9FRVBST01fSAotI2RlZmluZQlfQ01EX0VFUFJPTV9ICi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9FRVBST00pCi0KLSNpZmRlZiBDRkdfSTJDX01VTFRJX0VFUFJPTVMKLSNkZWZpbmUJQ01EX1RCTF9FRVBST00JTUtfQ01EX1RCTF9FTlRSWSggICBcCi0JImVlcHJvbSIsCTMsCTYsCTEsCWRvX2VlcHJvbSwJCQlcCi0JImVlcHJvbSAgLSBFRVBST00gc3ViLXN5c3RlbVxuIiwJCQkJCVwKLQkicmVhZCAgZGV2YWRkciBhZGRyIG9mZiBjbnRcbiIJCQkJCQlcCi0JImVlcHJvbSB3cml0ZSBkZXZhZGRyIGFkZHIgb2ZmIGNudFxuIgkJCQkJXAotCSIgICAgICAgLSByZWFkL3dyaXRlIGBjbnQnIGJ5dGVzIGZyb20gYGRldmFkZHJgIEVFUFJPTSBhdCBvZmZzZXQgYG9mZidcbiIgXAotKSwKLSNlbHNlIC8qIE9uZSBFRVBST00gKi8KLSNkZWZpbmUJQ01EX1RCTF9FRVBST00JTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkiZWVwcm9tIiwJMywJNSwJMSwJZG9fZWVwcm9tLAkJCVwKLQkiZWVwcm9tICAtIEVFUFJPTSBzdWItc3lzdGVtXG4iLAkJCQkJXAotCSJyZWFkICBhZGRyIG9mZiBjbnRcbiIJCQkJCQkJXAotCSJlZXByb20gd3JpdGUgYWRkciBvZmYgY250XG4iCQkJCQkJXAotCSIgICAgICAgLSByZWFkL3dyaXRlIGBjbnQnIGJ5dGVzIGF0IEVFUFJPTSBvZmZzZXQgYG9mZidcbiIJCVwKLSksCi0jZW5kaWYgLyogQ0ZHX0kyQ19NVUxUSV9FRVBST01TICovCi1pbnQgZG9fZWVwcm9tIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0jZWxzZQotCi0jZGVmaW5lIENNRF9UQkxfRUVQUk9NCi0KLSNlbmRpZgkvKiBDRkdfQ01EX0VFUFJPTSAqLwotCi0jZW5kaWYJLyogX0NNRF9FRVBST01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfZWxmLmggYi9pbmNsdWRlL2NtZF9lbGYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRjNTJiYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9lbGYuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBFbGYgTG9hZC9Cb290IEZ1bmN0aW9ucwotICovCi0jaWZuZGVmCV9DTURfRUxGX0gKLSNkZWZpbmUgX0NNRF9FTEZfSAotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRUxGKQotCi0jZGVmaW5lIENNRF9UQkxfQk9PVEVMRiBNS19DTURfVEJMX0VOVFJZKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJib290ZWxmIiwgICAgICA3LCAgICAgIDIsICAgICAgMCwgICAgICBkb19ib290ZWxmLCAgICAgICAgICAgICBcCi0gICAgICAgICJib290ZWxmIC0gQm9vdCBmcm9tIGFuIEVMRiBpbWFnZSBpbiBtZW1vcnlcbiIsICAgICAgICAgICAgICAgICBcCi0gICAgICAgICIgW2FkZHJlc3NdIC0gbG9hZCBhZGRyZXNzIG9mIEVMRiBpbWFnZS5cbiIgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICksCi0KLSNkZWZpbmUgQ01EX1RCTF9CT09UVlggIE1LX0NNRF9UQkxfRU5UUlkoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgImJvb3R2eCIsICAgICAgIDYsICAgICAgMiwgICAgICAwLCAgICAgIGRvX2Jvb3R2eCwgICAgICAgICAgICAgIFwKLSAgICAgICAgImJvb3R2eCAgLSBCb290IHZ4V29ya3MgZnJvbSBhbiBFTEYgaW1hZ2VcbiIsICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIiBbYWRkcmVzc10gLSBsb2FkIGFkZHJlc3Mgb2YgdnhXb3JrcyBFTEYgaW1hZ2UuXG4iICAgICAgICAgICAgIFwKLSAgICAgICAgKSwKLQotZXh0ZXJuIGludCBkb19ib290ZWxmIChjbWRfdGJsX3QgKiwgaW50LCBpbnQsIGNoYXIgKltdKTsKLWV4dGVybiBpbnQgZG9fYm9vdHZ4IChjbWRfdGJsX3QgKiwgaW50LCBpbnQsIGNoYXIgKltdKTsKLQotLyogU3VwcG9ydGluZyByb3V0aW5lcyAqLwotZXh0ZXJuIGludCAgICAgICAgICAgdmFsaWRfZWxmX2ltYWdlICh1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGxvYWRfZWxmX2ltYWdlICh1bnNpZ25lZCBsb25nKTsKLQotI2Vsc2UJLyogISBDRkdfQ01EX0VMRiAqLwotCi0jZGVmaW5lIENNRF9UQkxfQk9PVEVMRgotI2RlZmluZSBDTURfVEJMX0JPT1RWWAotCi0jZW5kaWYJLyogQ0ZHX0NNRF9FTEYgKi8KLSNlbmRpZgkvKiBfQ01EX0VMRl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9mZGMuaCBiL2luY2x1ZGUvY21kX2ZkYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTFkZjFmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY21kX2ZkYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogRGVuaXMgUGV0ZXIsIE1QTCBBRywgZC5wZXRlckBtcGwuY2gKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogRmxvcHB5IHN1cHBvcnQKLSAqLwotI2lmbmRlZglfQ01EX0ZEQ19ICi0jZGVmaW5lCV9DTURfRkRDX0gKLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGNvbW1hbmQuaD4KLQotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkRDKQotCi0jZGVmaW5lIENNRF9UQkxfRkRDCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImZkY2Jvb3QiLCA0LAkzLAkxLAlkb19mZGNib290LAkJCQlcCi0JImZkY2Jvb3QgLSBib290IGZyb20gZmxvcHB5IGRldmljZVxuIiwJCQkJCVwKLQkibG9hZEFkZHIgZHJpdmVcbiIJCQkJCQkJXAotKSwKLWludCBkb19mZGNib290IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLSNlbHNlCi0jZGVmaW5lIENNRF9UQkxfRkRDCi0jZW5kaWYKLQotI2VuZGlmCS8qIF9DTURfRkRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX2Zkb3MuaCBiL2luY2x1ZGUvY21kX2Zkb3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0NGM3YS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9mZG9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBTdOR1YmxpIEZhdmVyZ2VzIC0gPHd3dy5zdGF1YmxpLmNvbT4KLSAqIFBpZXJyZSBBVUJFUlQgIHAuYXViZXJ0QHN0YXVibGkuY29tCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIERvcyBmbG9wcHkgc3VwcG9ydAotICovCi0jaWZuZGVmCV9DTURfRkRPU19ICi0jZGVmaW5lCV9DTURfRkRPU19ICi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZET1MpCi0KLSNkZWZpbmUgQ01EX1RCTF9GRE9TX0JPT1QJTUtfQ01EX1RCTF9FTlRSWSggICAgICAgXAotCSJmZG9zYm9vdCIsIDUsCTMsCTAsCWRvX2Zkb3Nib290LCAgICBcCi0JImZkb3Nib290LSBib290IGZyb20gYSBkb3MgZmxvcHB5IGZpbGVcbiIsICAgICBcCi0JIltsb2FkQWRkcl0gW2ZpbGVuYW1lXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAotKSwKLSNkZWZpbmUgQ01EX1RCTF9GRE9TX0xTCSAgICAgICAgTUtfQ01EX1RCTF9FTlRSWSggICAgICAgXAotCSJmZG9zbHMiLCA1LAkyLAkwLAlkb19mZG9zbHMsICAgICAgXAotCSJmZG9zbHMgIC0gbGlzdCBmaWxlcyBpbiBhIGRpcmVjdG9yeVxuIiwgICAgICAgXAotCSJbZGlyZWN0b3J5XVxuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSksCi1pbnQgZG9fZmRvc2Jvb3QgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19mZG9zbHMgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9GRE9TX0JPT1QKLSNkZWZpbmUgQ01EX1RCTF9GRE9TX0xTCi0jZW5kaWYKLQotI2VuZGlmCS8qIF9DTURfRkRPU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9mbGFzaC5oIGIvaW5jbHVkZS9jbWRfZmxhc2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY1YzZjZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9mbGFzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogRkxBU0ggc3VwcG9ydAotICovCi0jaWZuZGVmCV9DTURfRkxBU0hfSAotI2RlZmluZQlfQ01EX0ZMQVNIX0gKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZMQVNIKQotI2RlZmluZQlDTURfVEJMX0ZMSU5GTwlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJmbGluZm8iLAkzLAkyLAkxLAlkb19mbGluZm8sCQkJXAotCSJmbGluZm8gIC0gcHJpbnQgRkxBU0ggbWVtb3J5IGluZm9ybWF0aW9uXG4iLAkJCQlcCi0JIlxuICAgIC0gcHJpbnQgaW5mb3JtYXRpb24gZm9yIGFsbCBGTEFTSCBtZW1vcnkgYmFua3NcbiIJCVwKLQkiZmxpbmZvIE5cbiAgICAtIHByaW50IGluZm9ybWF0aW9uIGZvciBGTEFTSCBtZW1vcnkgYmFuayAjIE5cbiIJCVwKLSksCi0KLSNkZWZpbmUJQ01EX1RCTF9GTEVSQVNFCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImVyYXNlIiwJMywJMywJMSwJZG9fZmxlcmFzZSwJCQlcCi0JImVyYXNlICAgLSBlcmFzZSBGTEFTSCBtZW1vcnlcbiIsCQkJCQlcCi0JInN0YXJ0IGVuZFxuIgkJCQkJCQkJXAotCSIgICAgLSBlcmFzZSBGTEFTSCBmcm9tIGFkZHIgJ3N0YXJ0JyB0byBhZGRyICdlbmQnXG4iCQkJXAotCSJlcmFzZSBOOlNGWy1TTF1cbiAgICAtIGVyYXNlIHNlY3RvcnMgU0YtU0wgaW4gRkxBU0ggYmFuayAjIE5cbiIJXAotCSJlcmFzZSBiYW5rIE5cbiAgICAtIGVyYXNlIEZMQVNIIGJhbmsgIyBOXG4iCQkJCVwKLQkiZXJhc2UgYWxsXG4gICAgLSBlcmFzZSBhbGwgRkxBU0ggYmFua3NcbiIJCQkJXAotKSwKLQotI2RlZmluZQlDTURfVEJMX1BST1RFQ1QJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkicHJvdGVjdCIsCTQsCTQsCTEsCWRvX3Byb3RlY3QsCQkJXAotCSJwcm90ZWN0IC0gZW5hYmxlIG9yIGRpc2FibGUgRkxBU0ggd3JpdGUgcHJvdGVjdGlvblxuIiwJCQlcCi0JIm9uICBzdGFydCBlbmRcbiIJCQkJCQkJXAotCSIgICAgLSBwcm90ZWN0IEZMQVNIIGZyb20gYWRkciAnc3RhcnQnIHRvIGFkZHIgJ2VuZCdcbiIJCQlcCi0JInByb3RlY3Qgb24gIE46U0ZbLVNMXVxuIgkJCQkJCVwKLQkiICAgIC0gcHJvdGVjdCBzZWN0b3JzIFNGLVNMIGluIEZMQVNIIGJhbmsgIyBOXG4iCQkJXAotCSJwcm90ZWN0IG9uICBiYW5rIE5cbiAgICAtIHByb3RlY3QgRkxBU0ggYmFuayAjIE5cbiIJCQlcCi0JInByb3RlY3Qgb24gIGFsbFxuICAgIC0gcHJvdGVjdCBhbGwgRkxBU0ggYmFua3NcbiIJCQlcCi0JInByb3RlY3Qgb2ZmIHN0YXJ0IGVuZFxuIgkJCQkJCVwKLQkiICAgIC0gbWFrZSBGTEFTSCBmcm9tIGFkZHIgJ3N0YXJ0JyB0byBhZGRyICdlbmQnIHdyaXRhYmxlXG4iCQlcCi0JInByb3RlY3Qgb2ZmIE46U0ZbLVNMXVxuIgkJCQkJCVwKLQkiICAgIC0gbWFrZSBzZWN0b3JzIFNGLVNMIHdyaXRhYmxlIGluIEZMQVNIIGJhbmsgIyBOXG4iCQkJXAotCSJwcm90ZWN0IG9mZiBiYW5rIE5cbiAgICAtIG1ha2UgRkxBU0ggYmFuayAjIE4gd3JpdGFibGVcbiIJCVwKLQkicHJvdGVjdCBvZmYgYWxsXG4gICAgLSBtYWtlIGFsbCBGTEFTSCBiYW5rcyB3cml0YWJsZVxuIgkJXAotKSwKLWludCBkb19mbGluZm8gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19mbGVyYXNlKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19wcm90ZWN0KGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLSNlbHNlCi0jZGVmaW5lIENNRF9UQkxfRkxJTkZPCi0jZGVmaW5lIENNRF9UQkxfRkxFUkFTRQotI2RlZmluZSBDTURfVEJMX1BST1RFQ1QKLSNlbmRpZgkvKiBDRkdfQ01EX0ZMQVNIICovCi0KLSNlbmRpZgkvKiBfQ01EX0ZMQVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX2ZwZ2EuaCBiL2luY2x1ZGUvY21kX2ZwZ2EuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc0ZGJjZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9mcGdhLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBSaWNoIElyZWxhbmQsIEVudGVyYXN5cyBOZXR3b3JrcywgcmlyZWxhbmRAZW50ZXJhc3lzLmNvbS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqCi0gKi8KLQotLyoKLSAqIEZQR0Egc3VwcG9ydAotICovCi0jaWZuZGVmCV9DTURfRlBHQV9ICi0jZGVmaW5lCV9DTURfRlBHQV9ICi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19GUEdBKSAmJiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9GUEdBKQotCi0jZGVmaW5lCUNNRF9UQkxfRlBHQQlNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JImZwZ2EiLCAgICAgIDQsICAgIDYsICAgICAxLCAgICAgZG9fZnBnYSwJCQlcCi0JImZwZ2EJLSBsb2FkYWJsZSBGUEdBIGltYWdlIHN1cHBvcnRcbiIsCQkJXAotCSJmcGdhIFtvcGVyYXRpb24gdHlwZV0gW2RldmljZSBudW1iZXJdIFtpbWFnZSBhZGRyZXNzXSBbaW1hZ2Ugc2l6ZV1cbiIgXAotCSJmcGdhIG9wZXJhdGlvbnM6XG4iIFwKLQkiXHRpbmZvXHRsaXN0IGtub3duIGRldmljZSBpbmZvcm1hdGlvbi5cbiIgXAotCSJcdGxvYWRcdExvYWQgZGV2aWNlIGZyb20gbWVtb3J5IGJ1ZmZlci5cbiIgXAotCSJcdGR1bXBcdExvYWQgZGV2aWNlIHRvIG1lbW9yeSBidWZmZXIuXG4iICBcCi0pLAotCi1leHRlcm4gaW50IGRvX2ZwZ2EgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9GUEdBCi0jZW5kaWYgIC8qIENPTkZJR19GUEdBICYmIENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRlBHQSAqLwotCi0jZW5kaWYJLyogX0NNRF9GUEdBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX2kyYy5oIGIvaW5jbHVkZS9jbWRfaTJjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMzRmZDQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfaTJjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogR2VyYWxkIFZhbiBCYXJlbiwgQ3VzdG9tIElERUFTLCB2YW5iYXJlbkBjaWRlYXMuY29tLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBJMkMgRnVuY3Rpb25zCi0gKi8KLSNpZm5kZWYJX0NNRF9JMkNfSAotI2RlZmluZSBfQ01EX0kyQ19ICi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JMkMpCi0jZGVmaW5lIENNRF9UQkxfSU1ECU1LX0NNRF9UQkxfRU5UUlkoCQkJCVwKLQkiaW1kIiwJCTMsCTQsCTEsCWRvX2kyY19tZCwJCVwKLQkiaW1kICAgICAtIGkyYyBtZW1vcnkgZGlzcGxheVxuIiwJCQkJXAotCSJjaGlwIGFkZHJlc3NbLjAsIC4xLCAuMl0gWyMgb2Ygb2JqZWN0c11cbiAgICAtIGkyYyBtZW1vcnkgZGlzcGxheVxuIiBcCi0pLAotI2RlZmluZSBDTURfVEJMX0lNTQlNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0gCSJpbW0iLAkJMywJMywJMSwJZG9faTJjX21tLAkJXAotCSJpbW0gICAgIC0gaTJjIG1lbW9yeSBtb2RpZnkgKGF1dG8taW5jcmVtZW50aW5nKVxuIiwJCVwKLQkiY2hpcCBhZGRyZXNzWy4wLCAuMSwgLjJdXG4iCQkJCQlcCi0JIiAgICAtIG1lbW9yeSBtb2RpZnksIGF1dG8gaW5jcmVtZW50IGFkZHJlc3NcbiIJCQlcCi0pLAotI2RlZmluZSBDTURfVEJMX0lOTQlNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JImlubSIsCQkzLAkzLAkxLAlkb19pMmNfbm0sCQlcCi0JImlubSAgICAgLSBtZW1vcnkgbW9kaWZ5IChjb25zdGFudCBhZGRyZXNzKVxuIiwJCQlcCi0JImNoaXAgYWRkcmVzc1suMCwgLjEsIC4yXVxuICAgIC0gbWVtb3J5IG1vZGlmeSwgcmVhZCBhbmQga2VlcCBhZGRyZXNzXG4iIFwKLSksCi0jZGVmaW5lIENNRF9UQkxfSU1XCU1LX0NNRF9UQkxfRU5UUlkoCQkJCVwKLQkiaW13IiwJCTMsCTUsCTEsCWRvX2kyY19tdywJCVwKLQkiaW13ICAgICAtIG1lbW9yeSB3cml0ZSAoZmlsbClcbiIsCQkJCVwKLQkiY2hpcCBhZGRyZXNzWy4wLCAuMSwgLjJdIHZhbHVlIFtjb3VudF1cbiAgICAtIG1lbW9yeSB3cml0ZSAoZmlsbClcbiIgXAotKSwKLSNkZWZpbmUJQ01EX1RCTF9JQ1JDCU1LX0NNRF9UQkxfRU5UUlkoCQkJCVwKLQkiaWNyYzMyIiwJNCwJNSwJMSwJZG9faTJjX2NyYywJCVwKLQkiaWNyYzMyICAtIGNoZWNrc3VtIGNhbGN1bGF0aW9uXG4iLAkJCQlcCi0JImNoaXAgYWRkcmVzc1suMCwgLjEsIC4yXSBjb3VudFxuICAgIC0gY29tcHV0ZSBDUkMzMiBjaGVja3N1bVxuIiBcCi0pLAotI2RlZmluZSBDTURfVEJMX0lQUk9CRQlNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JImlwcm9iZSIsCTMsCTEsCTEsCWRvX2kyY19wcm9iZSwJCVwKLQkiaXByb2JlICAtIHByb2JlIHRvIGRpc2NvdmVyIHZhbGlkIEkyQyBjaGlwIGFkZHJlc3Nlc1xuIiwJXAotCSJcbiAgICAtZGlzY292ZXIgdmFsaWQgSTJDIGNoaXAgYWRkcmVzc2VzXG4iCQkJXAotKSwKLS8qCi0gKiBSZXF1aXJlIGZ1bGwgbmFtZSBmb3IgImlsb29wIiBiZWNhdXNlIGl0IGlzIGFuIGluZmluaXRlIGxvb3AhCi0gKi8KLSNkZWZpbmUgQ01EX1RCTF9JTE9PUAlNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JImlsb29wIiwJNSwJNSwJMSwJZG9faTJjX2xvb3AsCQlcCi0JImlsb29wICAgLSBpbmZpbml0ZSBsb29wIG9uIGFkZHJlc3MgcmFuZ2VcbiIsCQkJXAotCSJjaGlwIGFkZHJlc3NbLjAsIC4xLCAuMl0gWyMgb2Ygb2JqZWN0c11cbiIJCQlcCi0JIiAgICAtIGxvb3AsIHJlYWRpbmcgYSBzZXQgb2YgYWRkcmVzc2VzXG4iCQkJXAotKSwKLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TRFJBTSkKLSNkZWZpbmUgQ01EX1RCTF9JU0RSQU0JTUtfQ01EX1RCTF9FTlRSWSgJCQkJXAotCSJpc2RyYW0iLAk2LAkyLAkxLAlkb19zZHJhbSwJCVwKLQkiaXNkcmFtICAtIHByaW50IFNEUkFNIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cbiIsCQlcCi0JImNoaXBcbiAgICAtIHByaW50IFNEUkFNIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb25cbiIJCVwKLQkiICAgICAgKHZhbGlkIGNoaXAgdmFsdWVzIDUwLi41NylcbiIJCQkJXAotKSwKLSNlbHNlCi0jZGVmaW5lIENNRF9UQkxfSVNEUkFNCi0jZW5kaWYKLQotCi1pbnQgZG9faTJjX21kKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19pMmNfbW0oY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX2kyY19ubShjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9faTJjX213KGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19pMmNfY3JjKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19pMmNfcHJvYmUoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX2kyY19sb29wKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19zZHJhbShjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLSNlbHNlCi0jZGVmaW5lIENNRF9UQkxfSU1ECi0jZGVmaW5lIENNRF9UQkxfSU1NCi0jZGVmaW5lIENNRF9UQkxfSU5NCi0jZGVmaW5lIENNRF9UQkxfSU1XCi0jZGVmaW5lIENNRF9UQkxfSUNSQwotI2RlZmluZSBDTURfVEJMX0lQUk9CRQotI2RlZmluZSBDTURfVEJMX0lMT09QCi0jZGVmaW5lIENNRF9UQkxfSVNEUkFNCi0jZW5kaWYJLyogQ0ZHX0NNRF9NRU1PUlkgKi8KLQotI2VuZGlmCS8qIF9DTURfSTJDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX2lkZS5oIGIvaW5jbHVkZS9jbWRfaWRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MzNjMjAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfaWRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBJREUgc3VwcG9ydAotICovCi0jaWZuZGVmCV9DTURfSURFX0gKLSNkZWZpbmUJX0NNRF9JREVfSAotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JREUpCi0jZGVmaW5lCUNNRF9UQkxfSURFCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImlkZSIsCTMsCTUsCTEsCWRvX2lkZSwJCQkJCVwKLQkiaWRlICAgICAtIElERSBzdWItc3lzdGVtXG4iLAkJCQkJCVwKLQkicmVzZXQgLSByZXNldCBJREUgY29udHJvbGxlclxuIgkJCQkJXAotCSJpZGUgaW5mbyAgLSBzaG93IGF2YWlsYWJsZSBJREUgZGV2aWNlc1xuIgkJCQlcCi0JImlkZSBkZXZpY2UgW2Rldl0gLSBzaG93IG9yIHNldCBjdXJyZW50IGRldmljZVxuIgkJCVwKLQkiaWRlIHBhcnQgW2Rldl0gLSBwcmludCBwYXJ0aXRpb24gdGFibGUgb2Ygb25lIG9yIGFsbCBJREUgZGV2aWNlc1xuIglcCi0JImlkZSByZWFkICBhZGRyIGJsayMgY250XG4iCQkJCQkJXAotCSJpZGUgd3JpdGUgYWRkciBibGsjIGNudCAtIHJlYWQvd3JpdGUgYGNudCciCQkJCVwKLQkiIGJsb2NrcyBzdGFydGluZyBhdCBibG9jayBgYmxrIydcbiIJCQkJCVwKLQkiICAgIHRvL2Zyb20gbWVtb3J5IGFkZHJlc3MgYGFkZHInXG4iCQkJCQlcCi0pLAotCi0jZGVmaW5lIENNRF9UQkxfRElTSwlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJkaXNrYm9vdCIsIDQsCTMsCTEsCWRvX2Rpc2tib290LAkJCQlcCi0JImRpc2tib290LSBib290IGZyb20gSURFIGRldmljZVxuIiwJCQkJCVwKLQkibG9hZEFkZHIgZGV2OnBhcnRcbiIJCQkJCQkJXAotKSwKLQotaW50IGRvX2lkZSAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX2Rpc2tib290IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLSNlbHNlCi0jZGVmaW5lIENNRF9UQkxfSURFCi0jZGVmaW5lIENNRF9UQkxfRElTSwotI2VuZGlmCi0KLSNlbmRpZgkvKiBfQ01EX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9pbW1hcC5oIGIvaW5jbHVkZS9jbWRfaW1tYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZlYmVlMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9pbW1hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIFBvd2VyUEMgOHh4LzgyNjAgSW50ZXJuYWwgTWVtb3J5IE1hcCBjb21tYW5kcwotICovCi0jaWZuZGVmCV9DTURfSU1NQVBfSAotI2RlZmluZQlfQ01EX0lNTUFQX0gKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lNTUFQKSAmJiBcCi0gICAgKGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfODI2MCkpCi0KLSNkZWZpbmUJQ01EX1RCTF9TSVVJTkZPCQlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkic2l1aW5mbyIsCTMsCTEsCTEsCWRvX3NpdWluZm8sCQlcCi0JInNpdWluZm8gLSBwcmludCBTeXN0ZW0gSW50ZXJmYWNlIFVuaXQgKFNJVSkgcmVnaXN0ZXJzXG4iLAlcCi0JTlVMTAkJCQkJCQkJXAotKSwKLQotI2RlZmluZSBDTURfVEJMX01FTUNJTkZPCU1LX0NNRF9UQkxfRU5UUlkoCQkJXAotCSJtZW1jaW5mbyIsCTQsCTEsCTEsCWRvX21lbWNpbmZvLAkJXAotCSJtZW1jaW5mby0gcHJpbnQgTWVtb3J5IENvbnRyb2xsZXIgcmVnaXN0ZXJzXG4iLAkJXAotCU5VTEwJCQkJCQkJCVwKLSksCi0KLSNkZWZpbmUgQ01EX1RCTF9TSVRJTkZPCQlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkic2l0aW5mbyIsCTMsCTEsCTEsCWRvX3NpdGluZm8sCQlcCi0JInNpdGluZm8gLSBwcmludCBTeXN0ZW0gSW50ZWdyYXRpb24gVGltZXJzIChTSVQpIHJlZ2lzdGVyc1xuIiwJXAotCU5VTEwJCQkJCQkJCVwKLSksCi0KLSNpZmRlZiBDT05GSUdfODI2MAotI2RlZmluZQlDTURfVEJMX0lDSU5GTwkJTUtfQ01EX1RCTF9FTlRSWSgJCQlcCi0JImljaW5mbyIsCTMsCTEsCTEsCWRvX2ljaW5mbywJCVwKLQkiaWNpbmZvICAtIHByaW50IEludGVycnVwdCBDb250cm9sbGVyIHJlZ2lzdGVyc1xuIiwJCVwKLQlOVUxMCQkJCQkJCQlcCi0pLAotI2VuZGlmCi0KLSNkZWZpbmUJQ01EX1RCTF9DQVJJTkZPCQlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkiY2FyaW5mbyIsCTMsCTEsCTEsCWRvX2NhcmluZm8sCQlcCi0JImNhcmluZm8gLSBwcmludCBDbG9ja3MgYW5kIFJlc2V0IHJlZ2lzdGVyc1xuIiwJCQlcCi0JTlVMTAkJCQkJCQkJXAotKSwKLQotI2RlZmluZQlDTURfVEJMX0lPUElORk8JCU1LX0NNRF9UQkxfRU5UUlkoCQkJXAotCSJpb3BpbmZvIiwJNCwJMSwJMSwJZG9faW9waW5mbywJCVwKLQkiaW9waW5mbyAtIHByaW50IEkvTyBQb3J0IHJlZ2lzdGVyc1xuIiwJCQkJXAotCU5VTEwJCQkJCQkJCVwKLSksCi0KLSNkZWZpbmUJQ01EX1RCTF9JT1BTRVQgCQlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkiaW9wc2V0IiwJNCwJNSwJMCwJZG9faW9wc2V0LAkJXAotCSJpb3BzZXQgLSBzZXQgSS9PIFBvcnQgcmVnaXN0ZXJzXG4iLAkJCQlcCi0JIlBPUlQgUElOIENNRCBWQUxVRVxuUE9SVDogQS1ELCBQSU46IDAtMzEsIENNRDogW2RhdHxkaXJ8b2RyfHNvcl0sIFZBTFVFOiAwfDEiIFwKLSksCi0KLSNkZWZpbmUJQ01EX1RCTF9ETUFJTkZPCQlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkiZG1haW5mbyIsCTMsCTEsCTEsCWRvX2RtYWluZm8sCQlcCi0JImRtYWluZm8gLSBwcmludCBTRE1BL0lETUEgcmVnaXN0ZXJzXG4iLAkJCVwKLQlOVUxMCQkJCQkJCQlcCi0pLAotCi0jZGVmaW5lCUNNRF9UQkxfRkNDSU5GTwkJTUtfQ01EX1RCTF9FTlRSWSgJCQlcCi0JImZjY2luZm8iLAkzLAkxLAkxLAlkb19mY2NpbmZvLAkJXAotCSJmY2NpbmZvIC0gcHJpbnQgRkNDIHJlZ2lzdGVyc1xuIiwJCQkJXAotCU5VTEwJCQkJCQkJCVwKLSksCi0KLSNkZWZpbmUJQ01EX1RCTF9CUkdJTkZPCQlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkiYnJnaW5mbyIsCTMsCTEsCTEsCWRvX2JyZ2luZm8sCQlcCi0JImJyZ2luZm8gLSBwcmludCBCYXVkIFJhdGUgR2VuZXJhdG9yIChCUkcpIHJlZ2lzdGVyc1xuIiwJXAotCU5VTEwJCQkJCQkJCVwKLSksCi0KLSNkZWZpbmUJQ01EX1RCTF9JMkNJTkZPCQlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkiaTJjaW5mbyIsCTQsCTEsCTEsCWRvX2kyY2luZm8sCQlcCi0JImkyY2luZm8gLSBwcmludCBJMkMgcmVnaXN0ZXJzXG4iLAkJCQlcCi0JTlVMTAkJCQkJCQkJXAotKSwKLQotI2RlZmluZQlDTURfVEJMX1NDQ0lORk8JCU1LX0NNRF9UQkxfRU5UUlkoCQkJXAotCSJzY2NpbmZvIiwJMywJMSwJMSwJZG9fc2NjaW5mbywJCVwKLQkic2NjaW5mbyAtIHByaW50IFNDQyByZWdpc3RlcnNcbiIsCQkJCVwKLQlOVUxMCQkJCQkJCQlcCi0pLAotCi0jZGVmaW5lCUNNRF9UQkxfU01DSU5GTwkJTUtfQ01EX1RCTF9FTlRSWSgJCQlcCi0JInNtY2luZm8iLAkzLAkxLAkxLAlkb19zbWNpbmZvLAkJXAotCSJzbWNpbmZvIC0gcHJpbnQgU01DIHJlZ2lzdGVyc1xuIiwJCQkJXAotCU5VTEwJCQkJCQkJCVwKLSksCi0KLSNkZWZpbmUJQ01EX1RCTF9TUElJTkZPCQlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkic3BpaW5mbyIsCTMsCTEsCTEsCWRvX3NwaWluZm8sCQlcCi0JInNwaWluZm8gLSBwcmludCBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKFNQSSkgcmVnaXN0ZXJzXG4iLFwKLQlOVUxMCQkJCQkJCQlcCi0pLAotCi0jZGVmaW5lCUNNRF9UQkxfTVVYSU5GTwkJTUtfQ01EX1RCTF9FTlRSWSgJCQlcCi0JIm11eGluZm8iLAkzLAkxLAkxLAlkb19tdXhpbmZvLAkJXAotCSJtdXhpbmZvIC0gcHJpbnQgQ1BNIE11bHRpcGxleGluZyByZWdpc3RlcnNcbiIsCQkJXAotCU5VTEwJCQkJCQkJCVwKLSksCi0KLSNkZWZpbmUJQ01EX1RCTF9TSUlORk8JCU1LX0NNRF9UQkxfRU5UUlkoCQkJXAotCSJzaWluZm8iLAkzLAkxLAkxLAlkb19zaWluZm8sCQlcCi0JInNpaW5mbyAgLSBwcmludCBTZXJpYWwgSW50ZXJmYWNlIChTSSkgcmVnaXN0ZXJzXG4iLAkJXAotCU5VTEwJCQkJCQkJCVwKLSksCi0KLSNkZWZpbmUJQ01EX1RCTF9NQ0NJTkZPCQlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkibWNjaW5mbyIsCTMsCTEsCTEsCWRvX21jY2luZm8sCQlcCi0JIm1jY2luZm8gLSBwcmludCBNQ0MgcmVnaXN0ZXJzXG4iLAkJCQlcCi0JTlVMTAkJCQkJCQkJXAotKSwKLQotaW50IGRvX3NpdWluZm8gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19tZW1jaW5mbyhjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9fc2l0aW5mbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotI2lmZGVmIENPTkZJR184MjYwCi1pbnQgZG9faWNpbmZvICAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotI2VuZGlmCi1pbnQgZG9fY2FyaW5mbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX2lvcGluZm8gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19pb3BzZXQgIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9fZG1haW5mbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX2ZjY2luZm8gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19icmdpbmZvIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9faTJjaW5mbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX3NjY2luZm8gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19zbWNpbmZvIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9fc3BpaW5mbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX211eGluZm8gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19zaWluZm8gIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9fbWNjaW5mbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZWxzZQotCi0jZGVmaW5lIENNRF9UQkxfU0lVSU5GTwotI2RlZmluZSBDTURfVEJMX01FTUNJTkZPCi0jZGVmaW5lIENNRF9UQkxfU0lUSU5GTwotI2lmZGVmIENPTkZJR184MjYwCi0jZGVmaW5lCUNNRF9UQkxfSUNJTkZPCi0jZW5kaWYKLSNkZWZpbmUJQ01EX1RCTF9DQVJJTkZPCi0jZGVmaW5lCUNNRF9UQkxfSU9QSU5GTwotI2RlZmluZQlDTURfVEJMX0lPUFNFVAotI2RlZmluZQlDTURfVEJMX0RNQUlORk8KLSNkZWZpbmUJQ01EX1RCTF9GQ0NJTkZPCi0jZGVmaW5lCUNNRF9UQkxfQlJHSU5GTwotI2RlZmluZQlDTURfVEJMX0kyQ0lORk8KLSNkZWZpbmUJQ01EX1RCTF9TQ0NJTkZPCi0jZGVmaW5lCUNNRF9UQkxfU01DSU5GTwotI2RlZmluZQlDTURfVEJMX1NQSUlORk8KLSNkZWZpbmUJQ01EX1RCTF9NVVhJTkZPCi0jZGVmaW5lCUNNRF9UQkxfU0lJTkZPCi0jZGVmaW5lCUNNRF9UQkxfTUNDSU5GTwotCi0jZW5kaWYJLyogQ0ZHX0NNRF9JTU1BUCAmJiAoQ09ORklHXzh4eCB8fCBDT05GSUdfODI2MCkgKi8KLQotI2VuZGlmCS8qIF9DTURfSU1NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfamZmczIuaCBiL2luY2x1ZGUvY21kX2pmZnMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MDQ1NWIuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfamZmczIuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIEpGRlMyIHN1cHBvcnQKLSAqLwotI2lmbmRlZglfQ01EX0pGRlMyX0gKLSNkZWZpbmUJX0NNRF9KRkZTMl9ICi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9KRkZTMikKLQotI2RlZmluZQlDTURfVEJMX0pGRlMyX0ZTTE9BRAlNS19DTURfVEJMX0VOVFJZKAkJCVwKLQkiZnNsb2FkIiwJNSwJMywJMCwJZG9famZmczJfZnNsb2FkLAlcCi0JImZzbG9hZCAgLSBsb2FkIGJpbmFyeSBmaWxlIGZyb20gYSBmaWxlc3lzdGVtIGltYWdlXG4iLAkJXAotCSJbIG9mZiBdIFsgZmlsZW5hbWUgXVxuIgkJCQkJXAotCSIgICAgLSBsb2FkIGJpbmFyeSBmaWxlIGZyb20gZmxhc2ggYmFua1xuIgkJCVwKLQkiICAgICAgd2l0aCBvZmZzZXQgJ29mZidcbiIJCQkJCVwKLSksCi0KLSNkZWZpbmUgQ01EX1RCTF9KRkZTMl9GU0lORk8gICAJTUtfQ01EX1RCTF9FTlRSWSgJCQlcCi0JImZzaW5mbyIsCTUsCTEsCTEsCWRvX2pmZnMyX2ZzaW5mbywJXAotCSJmc2luZm8gIC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgZmlsZXN5c3RlbXNcbiIsCQlcCi0JIiAgICAtIHByaW50IGluZm9ybWF0aW9uIGFib3V0IGZpbGVzeXN0ZW1zXG4iCQkJXAotKSwKLQotI2RlZmluZSBDTURfVEJMX0pGRlMyX0xTCU1LX0NNRF9UQkxfRU5UUlkoCQkJXAotCSJscyIsCQkyLAkyLAkxLAlkb19qZmZzMl9scywJCVwKLQkibHMgICAgICAtIGxpc3QgZmlsZXMgaW4gYSBkaXJlY3RvcnkgKGRlZmF1bHQgLylcbiIsCQlcCi0JIlsgZGlyZWN0b3J5IF1cbiIJCQkJCQlcCi0JIiAgICAtIGxpc3QgZmlsZXMgaW4gYSBkaXJlY3RvcnkuXG4iCQkJCVwKLSksCi0KLSNkZWZpbmUgQ01EX1RCTF9KRkZTMl9DSFBBUlQgICAJTUtfQ01EX1RCTF9FTlRSWSgJCQlcCi0JImNocGFydCIsCTYsCTIsCTAsCWRvX2pmZnMyX2NocGFydCwJXAotCSJjaHBhcnQgIC0gY2hhbmdlIGFjdGl2ZSBwYXJ0aXRpb25cbiIsCQkJCVwKLQkiICAgIC0gY2hhbmdlIGFjdGl2ZSBwYXJ0aXRpb25cbiIJCQkJXAotKSwKLQotaW50IGRvX2pmZnMyX2ZzbG9hZCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX2pmZnMyX2ZzaW5mbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX2pmZnMyX2xzIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1pbnQgZG9famZmczJfY2hwYXJ0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0jZWxzZQotI2RlZmluZQlDTURfVEJMX0pGRlMyX0ZTTE9BRAotI2RlZmluZSBDTURfVEJMX0pGRlMyX0ZTSU5GTwotI2RlZmluZSBDTURfVEJMX0pGRlMyX0xTCi0jZGVmaW5lIENNRF9UQkxfSkZGUzJfQ0hQQVJUCi0jZW5kaWYJLyogQ0ZHX0NNRF9KRkZTMiAqLwotCi0jZW5kaWYJLyogX0NNRF9KRkZTMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9rZ2RiLmggYi9pbmNsdWRlL2NtZF9rZ2RiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NWM1NGUuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfa2dkYi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogTXVycmF5IEplbnNlbiA8TXVycmF5LkplbnNlbkBjbXN0LmNzaXJvLmF1PiBhbmQKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIEtHREIgc3VwcG9ydAotICovCi0jaWZuZGVmCV9DTURfS0dEQl9ICi0jZGVmaW5lCV9DTURfS0dEQl9ICi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQotI2RlZmluZQlDTURfVEJMX0tHREIJTUtfQ01EX1RCTF9FTlRSWSgJCQkJXAotCSJrZ2RiIiwJNCwJQ0ZHX01BWEFSR1MsCTEsCWRvX2tnZGIsCQlcCi0JImtnZGIgICAgLSBlbnRlciBnZGIgcmVtb3RlIGRlYnVnIG1vZGVcbiIsCQkJXAotCSJbYXJnMCBhcmcxIC4uIGFyZ05dXG4iCQkJCQkJXAotCSIgICAgLSBleGVjdXRlcyBhIGJyZWFrcG9pbnQgc28gdGhhdCBrZ2RiIG1vZGUgaXNcbiIJCVwKLQkiICAgICAgZW50ZXJlZCB2aWEgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBUbyByZXR1cm5cbiIJCVwKLQkiICAgICAgdG8gdGhlIG1vbml0b3IsIHRoZSByZW1vdGUgZ2RiIGRlYnVnZ2VyIG11c3RcbiIJCVwKLQkiICAgICAgZXhlY3V0ZSBhIFwiY29udGludWVcIiBvciBcInF1aXRcIiBjb21tYW5kLlxuIgkJXAotCSJcbiIJCQkJCQkJCVwKLQkiICAgICAgaWYgYSBwcm9ncmFtIGlzIGxvYWRlZCBieSB0aGUgcmVtb3RlIGdkYiwgYW55IGFyZ3NcbiIJXAotCSIgICAgICBwYXNzZWQgdG8gdGhlIGtnZGIgY29tbWFuZCBhcmUgZ2l2ZW4gdG8gdGhlIGxvYWRlZFxuIglcCi0JIiAgICAgIHByb2dyYW0gaWYgaXQgaXMgZXhlY3V0ZWQgKHNlZSB0aGUgXCJoZWxsb193b3JsZFwiXG4iCVwKLQkiICAgICAgZXhhbXBsZSBwcm9ncmFtIGluIHRoZSBVLUJvb3QgZXhhbXBsZXMgZGlyZWN0b3J5KS4iCVwKLSksCi0KLWludCBkb19rZ2RiIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0jZWxzZQotI2RlZmluZSBDTURfVEJMX0tHREIKLSNlbmRpZgotCi0jZW5kaWYJLyogX0NNRF9LR0RCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX2xvZy5oIGIvaW5jbHVkZS9jbWRfbG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NzlmMmYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfbG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBEZXRsZXYgWnVuZGVsLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBkenVAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaWZuZGVmIF9DTURfTE9HX0hfCi0jZGVmaW5lIF9DTURfTE9HX0hfCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19MT0dCVUZGRVIpCi0KLSNkZWZpbmUgTE9HX0JVRl9MRU4gMTY4NDMKLSNkZWZpbmUgTE9HX0JVX01BU0sgfihMT0dfQlVGX0xFTi0xKQotCi0jZGVmaW5lCUNNRF9UQkxfTE9HCU1LX0NNRF9UQkxfRU5UUlkoCQkJXAotCSJsb2ciLAkzLCAgICAgMjU1LAkxLAlkb19sb2csCQkJXAotCSJsb2cgICAgIC0gbWFuaXB1bGF0ZSBsb2didWZmZXJcbiIsICAgICAgICAgICAgICAgICAgICAgXAotCSJsb2cgaW5mbyAgIC0gc2hvdyBwb2ludGVyIGRldGFpbHNcbiIJCQlcCi0JImxvZyByZXNldCAgLSBjbGVhciBjb250ZW50c1xuIgkJCQlcCi0JImxvZyBzaG93ICAgLSBzaG93IGNvbnRlbnRzXG4iCQkJCVwKLQkibG9nIGFwcGVuZCA8bXNnPiAtIGFwcGVuZCA8bXNnPiB0byB0aGUgbG9nYnVmZmVyXG4iCVwKLSksCi1pbnQgZG9fbG9nIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLSNlbHNlCi0jZGVmaW5lIENNRF9UQkxfTE9HCi0jZW5kaWYJLyogQ09ORklHX0xPR0JVRkZFUiAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZW5kaWYJLyogX0NNRF9MT0dfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX21lbS5oIGIvaW5jbHVkZS9jbWRfbWVtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMGM1NDAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfbWVtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogTWVtb3J5IEZ1bmN0aW9ucwotICovCi0jaWZuZGVmCV9DTURfTUVNX0gKLSNkZWZpbmUgX0NNRF9NRU1fSAotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTUVNT1JZKQotI2RlZmluZSBDTURfVEJMX01ECU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JIm1kIiwJCTIsCTMsCTEsCWRvX21lbV9tZCwJCQlcCi0JIm1kICAgICAgLSBtZW1vcnkgZGlzcGxheVxuIiwJCQkJCQlcCi0JIlsuYiwgLncsIC5sXSBhZGRyZXNzIFsjIG9mIG9iamVjdHNdXG4gICAgLSBtZW1vcnkgZGlzcGxheVxuIgkJXAotKSwKLSNkZWZpbmUgQ01EX1RCTF9NTQlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotIAkibW0iLAkJMiwJMiwJMSwJZG9fbWVtX21tLAkJCVwKLQkibW0gICAgICAtIG1lbW9yeSBtb2RpZnkgKGF1dG8taW5jcmVtZW50aW5nKVxuIiwJCQlcCi0JIlsuYiwgLncsIC5sXSBhZGRyZXNzXG4iCQkJCQkJXAotCSIgICAgLSBtZW1vcnkgbW9kaWZ5LCBhdXRvIGluY3JlbWVudCBhZGRyZXNzXG4iCQkJCVwKLSksCi0jZGVmaW5lIENNRF9UQkxfTk0JTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkibm0iLAkJMiwJMiwJMSwJZG9fbWVtX25tLAkJCVwKLQkibm0gICAgICAtIG1lbW9yeSBtb2RpZnkgKGNvbnN0YW50IGFkZHJlc3MpXG4iLAkJCQlcCi0JIlsuYiwgLncsIC5sXSBhZGRyZXNzXG4gICAgLSBtZW1vcnkgbW9kaWZ5LCByZWFkIGFuZCBrZWVwIGFkZHJlc3NcbiIJXAotKSwKLSNkZWZpbmUgQ01EX1RCTF9NVwlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJtdyIsCQkyLAk0LAkxLAlkb19tZW1fbXcsCQkJXAotCSJtdyAgICAgIC0gbWVtb3J5IHdyaXRlIChmaWxsKVxuIiwJCQkJCVwKLQkiWy5iLCAudywgLmxdIGFkZHJlc3MgdmFsdWUgW2NvdW50XVxuICAgIC0gd3JpdGUgbWVtb3J5XG4iCQlcCi0pLAotI2RlZmluZQlDTURfVEJMX0NQCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImNwIiwJCTIsCTQsCTEsCWRvX21lbV9jcCwJCQlcCi0JImNwICAgICAgLSBtZW1vcnkgY29weVxuIiwJCQkJCQlcCi0JIlsuYiwgLncsIC5sXSBzb3VyY2UgdGFyZ2V0IGNvdW50XG4gICAgLSBjb3B5IG1lbW9yeVxuIgkJCVwKLSksCi0jZGVmaW5lCUNNRF9UQkxfQ01QCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImNtcCIsCQkzLAk0LAkxLAlkb19tZW1fY21wLAkJCVwKLQkiY21wICAgICAtIG1lbW9yeSBjb21wYXJlXG4iLAkJCQkJCVwKLQkiWy5iLCAudywgLmxdIGFkZHIxIGFkZHIyIGNvdW50XG4gICAgLSBjb21wYXJlIG1lbW9yeVxuIgkJXAotKSwKLSNkZWZpbmUJQ01EX1RCTF9DUkMJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkiY3JjMzIiLAkzLAk0LAkxLAlkb19tZW1fY3JjLAkJCVwKLQkiY3JjMzIgICAtIGNoZWNrc3VtIGNhbGN1bGF0aW9uXG4iLAkJCQkJXAotCSJhZGRyZXNzIGNvdW50IFthZGRyXVxuICAgIC0gY29tcHV0ZSBDUkMzMiBjaGVja3N1bSBbc2F2ZSBhdCBhZGRyXVxuIglcCi0pLAotI2RlZmluZSBDTURfVEJMX0JBU0UJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkiYmFzZSIsCQkyLAkyLAkxLAlkb19tZW1fYmFzZSwJCQlcCi0JImJhc2UgICAgLSBwcmludCBvciBzZXQgYWRkcmVzcyBvZmZzZXRcbiIsCQkJCVwKLQkiXG4gICAgLSBwcmludCBhZGRyZXNzIG9mZnNldCBmb3IgbWVtb3J5IGNvbW1hbmRzXG4iCQkJXAotCSJiYXNlIG9mZlxuICAgIC0gc2V0IGFkZHJlc3Mgb2Zmc2V0IGZvciBtZW1vcnkgY29tbWFuZHMgdG8gJ29mZidcbiIJXAotKSwKLS8qCi0gKiBSZXF1aXJlIGZ1bGwgbmFtZSBmb3IgImxvb3AiIGFuZCAibXRlc3QiIGJlY2F1c2UgdGhlc2UgYXJlIGluZmluaXRlIGxvb3BzIQotICovCi0jZGVmaW5lIENNRF9UQkxfTE9PUAlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJsb29wIiwJCTQsCTMsCTEsCWRvX21lbV9sb29wLAkJCVwKLQkibG9vcCAgICAtIGluZmluaXRlIGxvb3Agb24gYWRkcmVzcyByYW5nZVxuIiwJCQkJXAotCSJbLmIsIC53LCAubF0gYWRkcmVzcyBudW1iZXJfb2Zfb2JqZWN0c1xuIgkJCQlcCi0JIiAgICAtIGxvb3Agb24gYSBzZXQgb2YgYWRkcmVzc2VzXG4iCQkJCQlcCi0pLAotI2RlZmluZSBDTURfVEJMX01URVNUCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JIm10ZXN0IiwJNSwJNCwJMSwJZG9fbWVtX210ZXN0LAkJCVwKLQkibXRlc3QgICAtIHNpbXBsZSBSQU0gdGVzdFxuIiwJCQkJCQlcCi0JIltzdGFydCBbZW5kIFtwYXR0ZXJuXV1dXG4iCQkJCQkJXAotCSIgICAgLSBzaW1wbGUgUkFNIHJlYWQvd3JpdGUgdGVzdFxuIgkJCQkJXAotKSwKLWludCBkb19tZW1fbWQgICAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19tZW1fbW0gICAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19tZW1fbm0gICAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19tZW1fbXcgICAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19tZW1fY3AgICAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19tZW1fY21wICAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19tZW1fY3JjICAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19tZW1fYmFzZSAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19tZW1fbG9vcCAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLWludCBkb19tZW1fbXRlc3QgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9NRAotI2RlZmluZSBDTURfVEJMX01NCi0jZGVmaW5lIENNRF9UQkxfTk0KLSNkZWZpbmUgQ01EX1RCTF9NVwotI2RlZmluZSBDTURfVEJMX0NQCi0jZGVmaW5lIENNRF9UQkxfQ01QCi0jZGVmaW5lIENNRF9UQkxfQ1JDCi0jZGVmaW5lIENNRF9UQkxfQkFTRQotI2RlZmluZSBDTURfVEJMX0xPT1AKLSNkZWZpbmUgQ01EX1RCTF9NVEVTVAotI2VuZGlmCS8qIENGR19DTURfTUVNT1JZICovCi0KLSNlbmRpZgkvKiBfQ01EX01FTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9tZW51LmggYi9pbmNsdWRlL2NtZF9tZW51LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMWJkN2YuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfbWVudS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogSGFucy1K9nJnIEZyaWVkZW4sIEh5cGVyaW9uIEVudGVydGFpbm1lbnQKLSAqIEhhbnMtSm9lcmdGQGh5cGVyaW9uLWVudGVydGFpbm1lbnQuY29tCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLSNpZm5kZWYgX0NNRF9NRU5VX0gKLSNkZWZpbmUgX0NNRF9NRU5VX0gKLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGNvbW1hbmQuaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX0FNSUdBT05FRzNTRSkgJiYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfQlNQKQotI2RlZmluZSBDTURfVEJMX01FTlUgICAgIE1LX0NNRF9UQkxfRU5UUlkoICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIm1lbnUiLCAzLCAgIDEsICAgICAgMSwgICAgICBkb19tZW51LCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJtZW51ICAgIC0gZGlzcGxheSBCSU9TIHNldHVwIG1lbnVcbiIsICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSksCi0KLWludCBkb19tZW51KCBjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApOwotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9NRU5VCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9DTURfTUVOVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9taWkuaCBiL2luY2x1ZGUvY21kX21paS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGVkMGNjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY21kX21paS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogR2VyYWxkIFZhbiBCYXJlbiwgQ3VzdG9tIElERUFTLCB2YW5iYXJlbkBjaWRlYXMuY29tCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIE1JSSBGdW5jdGlvbnMKLSAqLwotI2lmbmRlZglfQ01EX01JSV9ICi0jZGVmaW5lIF9DTURfTUlJX0gKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX01JSSkKLSNkZWZpbmUgQ01EX1RCTF9NSUkJTUtfQ01EX1RCTF9FTlRSWSgJCQkJXAotCSJtaWkiLAkJMywJNSwJMSwJZG9fbWlpLAkJCVwKLQkibWlpICAgICAtIE1JSSB1dGlsaXR5IGNvbW1hbmRzXG4iLAkJCQlcCi0JIlwKLWluZm8gIDxhZGRyPiAgICAgICAgICAgICAgLSBkaXNwbGF5IE1JSSBQSFkgaW5mb1xuXAotbWlpIHJlYWQgIDxhZGRyPiA8cmVnPiAgICAgICAgLSByZWFkICBNSUkgUEhZIDxhZGRyPiByZWdpc3RlciA8cmVnPlxuXAotbWlpIHdyaXRlIDxhZGRyPiA8cmVnPiA8ZGF0YT4gLSB3cml0ZSBNSUkgUEhZIDxhZGRyPiByZWdpc3RlciA8cmVnPlxuIglcCi0pLAotCi1pbnQgZG9fbWlpICAgICAgIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLSNlbHNlCi0jZGVmaW5lIENNRF9UQkxfTUlJCi0jZW5kaWYJLyogQ0ZHX0NNRF9NSUkgKi8KLQotI2VuZGlmCS8qIF9DTURfTUlJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY21kX21pc2MuaCBiL2luY2x1ZGUvY21kX21pc2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODczZjVjNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9taXNjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBNaXNjZWxsYW5pb3VzIGNvbW1hbmRzCi0gKi8KLSNpZm5kZWYJX0NNRF9NSVNDX0gKLSNkZWZpbmUJX0NNRF9NSVNDX0gKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lSUSkKLSNkZWZpbmUgQ01EX1RCTF9JUlFJTkZPCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JImlycWluZm8iLCAgICAgIDMsCTEsCTEsCWRvX2lycWluZm8sCQkJXAotCSJpcnFpbmZvIC0gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgSVJRc1xuIiwJCQkJXAotCU5VTEwJCQkJCQkJCQlcCi0pLAotCi0vKiBJbXBsZW1lbnRlZCBpbiAkKENQVSkvaW50ZXJydXB0cy5jICovCi1pbnQgZG9faXJxaW5mbyAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZWxzZQotI2RlZmluZSBDTURfVEJMX0lSUUlORk8KLSNlbmRpZiAgLyogQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9JUlEgKi8KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX01JU0MpCi0jZGVmaW5lCUNNRF9UQkxfTUlTQwlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJzbGVlcCIsCTUsCTIsCTIsCWRvX3NsZWVwLAkJCVwKLQkic2xlZXAgICAtIGRlbGF5IGV4ZWN1dGlvbiBmb3Igc29tZSB0aW1lXG4iLAkJCQlcCi0JIk5cbiIJCQkJCQkJCQlcCi0JIiAgICAtIGRlbGF5IGV4ZWN1dGlvbiBmb3IgTiBzZWNvbmRzIChOIGlzIF9kZWNpbWFsXyAhISEpXG4iCQlcCi0pLAotCi0vKiBJbXBsZW1lbnRlZCBpbiBjb21tb24vY21kX21pc2MuYyAqLwotaW50IGRvX3NsZWVwIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0jZWxzZQotI2RlZmluZSBDTURfVEJMX01JU0MKLSNlbmRpZgkvKiBDRkdfQ01EX01JU0MgKi8KLQotI2VuZGlmCS8qIF9DTURfTUlTQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9uZXQuaCBiL2luY2x1ZGUvY21kX25ldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDJjYjNlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY21kX25ldC5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogTmV0d29yayBib290IHN1cHBvcnQKLSAqLwotI2lmbmRlZglfQ01EX05FVF9ICi0jZGVmaW5lCV9DTURfTkVUX0gKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05FVCkKLSNkZWZpbmUJQ01EX1RCTF9CT09UUAlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJib290cCIsCTUsCTMsCTEsCWRvX2Jvb3RwLAkJCVwKLQkiYm9vdHAgICAtIGJvb3QgaW1hZ2UgdmlhIG5ldHdvcmsgdXNpbmcgQm9vdFAvVEZUUCBwcm90b2NvbFxuIiwJCVwKLQkiW2xvYWRBZGRyZXNzXSBbYm9vdGZpbGVuYW1lXVxuIiAJCSAJCQlcCi0pLAotaW50IGRvX2Jvb3RwIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0jZGVmaW5lCUNNRF9UQkxfVEZUUEIJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkidGZ0cGJvb3QiLAk0LAkzLAkxLAlkb190ZnRwYiwJCQlcCi0JInRmdHBib290LSBib290IGltYWdlIHZpYSBuZXR3b3JrIHVzaW5nIFRGVFAgcHJvdG9jb2xcbiIJCVwKLQkiICAgICAgICAgICAgICAgYW5kIGVudiB2YXJpYWJsZXMgaXBhZGRyIGFuZCBzZXJ2ZXJpcFxuIiwJCVwKLQkiW2xvYWRBZGRyZXNzXSBbYm9vdGZpbGVuYW1lXVxuIiAJCSAJCQlcCi0pLAotCi1pbnQgZG9fdGZ0cGIgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotCi0jZGVmaW5lCUNNRF9UQkxfUkFSUEIJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkicmFycGJvb3QiLAk0LAkzLAkxLAlkb19yYXJwYiwJCQlcCi0JInJhcnBib290LSBib290IGltYWdlIHZpYSBuZXR3b3JrIHVzaW5nIFJBUlAvVEZUUCBwcm90b2NvbFxuIiwJCVwKLQkiW2xvYWRBZGRyZXNzXSBbYm9vdGZpbGVuYW1lXVxuIiAJCSAJCQlcCi0pLAotCi1pbnQgZG9fcmFycGIgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0RIQ1ApCi0jZGVmaW5lCUNNRF9UQkxfREhDUAlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJkaGNwIiwJCTQsCTMsCTEsCWRvX2RoY3AsCQkJXAotCSJkaGNwICAgIC0gaW52b2tlIERIQ1AgY2xpZW50IHRvIG9idGFpbiBJUC9ib290IHBhcmFtc1xuIiwJCVwKLQkiW2xvYWRBZGRyZXNzXSBbYm9vdGZpbGVuYW1lXVxuIiAJCSAJCQlcCi0pLAotCi1pbnQgZG9fZGhjcCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9ESENQCi0jZW5kaWYJLyogQ0ZHX0NNRF9ESENQICovCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QSU5HKQotI2RlZmluZQlDTURfVEJMX1BJTkcJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkicGluZyIsCQk0LAkyLAkxLAlkb19waW5nLAkJCVwKLQkicGluZyAgICAtIGNoZWNrIGlmIGhvc3QgaXMgcmVhY2hhYmxlXG4iLAkJCQlcCi0JImhvc3RcbiIgCQkJCQkgCQkJXAotKSwKLQotaW50IGRvX3BpbmcgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLSNlbHNlCi0jZGVmaW5lIENNRF9UQkxfUElORwotI2VuZGlmCS8qIENGR19DTURfUElORyAqLwotCi0jZWxzZQotI2RlZmluZSBDTURfVEJMX0JPT1RQCi0jZGVmaW5lIENNRF9UQkxfVEZUUEIKLSNkZWZpbmUgQ01EX1RCTF9SQVJQQgotI2RlZmluZSBDTURfVEJMX0RIQ1AKLSNkZWZpbmUgQ01EX1RCTF9QSU5HCi0jZW5kaWYJLyogQ0ZHX0NNRF9ORVQgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9udmVkaXQuaCBiL2luY2x1ZGUvY21kX252ZWRpdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDUxMjdkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY21kX252ZWRpdC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogQm9vdCBzdXBwb3J0Ci0gKi8KLSNpZm5kZWYJX0NNRF9OVkVESVRfSAotI2RlZmluZQlfQ01EX05WRURJVF9ICi0KLSNkZWZpbmUJQ01EX1RCTF9QUklOVEVOVglNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JInByaW50ZW52IiwJNCwJQ0ZHX01BWEFSR1MsCTEsCWRvX3ByaW50ZW52LAkJXAotCSJwcmludGVudi0gcHJpbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4iLAkJCQlcCi0JIlxuICAgIC0gcHJpbnQgdmFsdWVzIG9mIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiIJCQlcCi0JInByaW50ZW52IG5hbWUgLi4uXG4iCQkJCQkJCVwKLQkiICAgIC0gcHJpbnQgdmFsdWUgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgJ25hbWUnXG4iCQkJXAotKSwKLWludCBkb19wcmludGVudiAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZGVmaW5lIENNRF9UQkxfU0VURU5WCQlNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JInNldGVudiIsCTYsCUNGR19NQVhBUkdTLAkwLAlkb19zZXRlbnYsCQlcCi0JInNldGVudiAgLSBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4iLAkJCQlcCi0JIm5hbWUgdmFsdWUgLi4uXG4iCQkJCQkJCVwKLQkiICAgIC0gc2V0IGVudmlyb25tZW50IHZhcmlhYmxlICduYW1lJyB0byAndmFsdWUgLi4uJ1xuIgkJXAotCSJzZXRlbnYgbmFtZVxuIgkJCQkJCQkJXAotCSIgICAgLSBkZWxldGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ25hbWUnXG4iCQkJCVwKLSksCi1pbnQgZG9fc2V0ZW52ICAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2lmICgoQ09ORklHX0NPTU1BTkRTICYgKENGR19DTURfRU5WfENGR19DTURfRkxBU0gpKSA9PSAoQ0ZHX0NNRF9FTlZ8Q0ZHX0NNRF9GTEFTSCkpCi0jZGVmaW5lCUNNRF9UQkxfU0FWRUVOVgkJTUtfQ01EX1RCTF9FTlRSWSgJCQkJXAotCSJzYXZlZW52IiwJNCwJMSwJCTAsCWRvX3NhdmVlbnYsCQlcCi0JInNhdmVlbnYgLSBzYXZlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwZXJzaXN0ZW50IHN0b3JhZ2VcbiIsCQlcCi0JTlVMTAkJCQkJCQkJCVwKLSksCi1pbnQgZG9fc2F2ZWVudiAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLSNlbHNlCi0jZGVmaW5lIENNRF9UQkxfU0FWRUVOVgotI2VuZGlmCS8qIENGR19DTURfRU5WICovCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9BU0tFTlYpCi0jZGVmaW5lIENNRF9UQkxfQVNLRU5WCQlNS19DTURfVEJMX0VOVFJZKAkJCQlcCi0JImFza2VudiIsCTgsCUNGR19NQVhBUkdTLAkxLAlkb19hc2tlbnYsCQlcCi0JImFza2VudiAgLSBnZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gc3RkaW5cbiIsCQkJXAotCSJuYW1lIFttZXNzYWdlXSBbc2l6ZV1cbiIJCQkJCQlcCi0JIiAgICAtIGdldCBlbnZpcm9ubWVudCB2YXJpYWJsZSAnbmFtZScgZnJvbSBzdGRpbiAobWF4ICdzaXplJyBjaGFycylcbiIJXAotCSJhc2tlbnYgbmFtZVxuIgkJCQkJCQkJXAotCSIgICAgLSBnZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ25hbWUnIGZyb20gc3RkaW5cbiIJCQlcCi0JImFza2VudiBuYW1lIHNpemVcbiIJCQkJCQkJXAotCSIgICAgLSBnZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgJ25hbWUnIGZyb20gc3RkaW4gKG1heCAnc2l6ZScgY2hhcnMpXG4iCVwKLQkiYXNrZW52IG5hbWUgW21lc3NhZ2VdIHNpemVcbiIJCQkJCQlcCi0JIiAgICAtIGRpc3BsYXkgJ21lc3NhZ2UnIHN0cmluZyBhbmQgZ2V0IGVudmlyb25tZW50IHZhcmlhYmxlICduYW1lJyIJXAotCSJmcm9tIHN0ZGluIChtYXggJ3NpemUnIGNoYXJzKVxuIgkJCQkJXAotKSwKLWludCBkb19hc2tlbnYgICAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9BU0tFTlYKLSNlbmRpZgkvKiBDRkdfQ01EX0FTS0VOViAqLwotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfUlVOKQotI2RlZmluZQlDTURfVEJMX1JVTglNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJydW4iLAkzLAlDRkdfTUFYQVJHUywJMSwJZG9fcnVuLAkJCQlcCi0JInJ1biAgICAgLSBydW4gY29tbWFuZHMgaW4gYW4gZW52aXJvbm1lbnQgdmFyaWFibGVcbiIsCQkJXAotCSJ2YXIgWy4uLl1cbiIJCQkJCQkJCVwKLQkiICAgIC0gcnVuIHRoZSBjb21tYW5kcyBpbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUocykgJ3ZhcidcbiIJCVwKLSksCi1pbnQgZG9fcnVuIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0jZWxzZQotI2RlZmluZSBDTURfVEJMX1JVTgotI2VuZGlmICAvKiBDRkdfQ01EX1JVTiAqLwotCi0jZW5kaWYJLyogX0NNRF9OVkVESVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfcGNpLmggYi9pbmNsdWRlL2NtZF9wY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIwYTVjOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9wY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEKLSAqIEdlcmFsZCBWYW4gQmFyZW4sIEN1c3RvbSBJREVBUywgdmFuYmFyZW5AY2lkZWFzLmNvbQotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBNSUkgRnVuY3Rpb25zCi0gKi8KLSNpZm5kZWYJX0NNRF9QQ0lfSAotI2RlZmluZSBfQ01EX1BDSV9ICi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ0kpCi0jZGVmaW5lIENNRF9UQkxfUENJCU1LX0NNRF9UQkxfRU5UUlkoCQkJCVwKLQkicGNpIiwJCTMsCTUsCTEsCWRvX3BjaSwJCQlcCi0JInBjaSAgICAgLSBsaXN0IGFuZCBhY2Nlc3MgUENJIENvbmZpZ3VyYXRvbiBTcGFjZVxuIiwJCVwKLQkiW2J1c10gW2xvbmddXG4iCQkJCQkJXAotCSIgICAgLSBzaG9ydCBvciBsb25nIGxpc3Qgb2YgUENJIGRldmljZXMgb24gYnVzICdidXMnXG4iCVwKLQkicGNpIGhlYWRlciBiLmQuZlxuIgkJCQkJCVwKLQkiICAgIC0gc2hvdyBoZWFkZXIgb2YgUENJIGRldmljZSAnYnVzLmRldmljZS5mdW5jdGlvbidcbiIJXAotCSJwY2kgZGlzcGxheVsuYiwgLncsIC5sXSBiLmQuZiBbYWRkcmVzc10gWyMgb2Ygb2JqZWN0c11cbiIJXAotCSIgICAgLSBkaXNwbGF5IFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIChDRkcpXG4iCQkJXAotCSJwY2kgbmV4dFsuYiwgLncsIC5sXSBiLmQuZiBhZGRyZXNzXG4iCQkJCVwKLQkiICAgIC0gbW9kaWZ5LCByZWFkIGFuZCBrZWVwIENGRyBhZGRyZXNzXG4iCQkJXAotCSJwY2kgbW9kaWZ5Wy5iLCAudywgLmxdIGIuZC5mIGFkZHJlc3NcbiIJCQlcCi0JIiAgICAtICBtb2RpZnksIGF1dG8gaW5jcmVtZW50IENGRyBhZGRyZXNzXG4iCQkJXAotCSJwY2kgd3JpdGVbLmIsIC53LCAubF0gYi5kLmYgYWRkcmVzcyB2YWx1ZVxuIgkJCVwKLQkiICAgIC0gd3JpdGUgdG8gQ0ZHIGFkZHJlc3NcbiIJCQkJCVwKLSksCi0KLWludCBkb19wY2kgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9QQ0kKLSNlbmRpZgkvKiBDRkdfQ01EX1BDSSAqLwotCi0jZW5kaWYJLyogX0NNRF9QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfcGNtY2lhLmggYi9pbmNsdWRlL2NtZF9wY21jaWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRhMjA3Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9wY21jaWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotLyoKLSAqIFBDTUNJQSBzdXBwb3J0Ci0gKi8KLSNpZm5kZWYJX0NNRF9QQ01DSUFfSAotI2RlZmluZQlfQ01EX1BDTUNJQV9ICi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9QQ01DSUEpCi0jZGVmaW5lCUNNRF9UQkxfUElOSVQJTUtfQ01EX1RCTF9FTlRSWSgJCQkJCVwKLQkicGluaXQiLAk0LAkyLAkxLAlkb19waW5pdCwJCQlcCi0JInBpbml0ICAgLSBQQ01DSUEgc3ViLXN5c3RlbVxuIiwJCQkJCVwKLQkib24gIC0gcG93ZXIgb24gUENNQ0lBIHNvY2tldFxuIgkJCQkJXAotCSJwaW5pdCBvZmYgLSBwb3dlciBvZmYgUENNQ0lBIHNvY2tldFxuIgkJCQkJXAotKSwKLQotaW50IGRvX3Bpbml0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0jZWxzZQotI2RlZmluZSBDTURfVEJMX1BJTklUCi0jZW5kaWYKLQotI2VuZGlmCS8qIF9DTURfUENNQ0lBX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfcmVnaW5mby5oIGIvaW5jbHVkZS9jbWRfcmVnaW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDcxZTdlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY21kX3JlZ2luZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFN1Ym9kaCBOaWpzdXJlLCBTa3lTdHJlYW0gTmV0d29ya3MsIHNuaWpzdXJlQHNreXN0cmVhbS5jb20KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaWZuZGVmCV9DTURfUkVHSU5GT19IXwotI2RlZmluZQlfQ01EX1JFR0lORk9fSF8KLQotI2lmIChkZWZpbmVkKENPTkZJR181eHgpIHx8IGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfNDA1R1ApIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKSkgJiYgXAotICAgIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1JFR0lORk8pCi0jZGVmaW5lCUNNRF9UQkxfUkVHSU5GTwlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJyZWdpbmZvIiwJMywJMiwJMSwJZG9fcmVnaW5mbywJCQlcCi0JInJlZ2luZm8gLSBwcmludCByZWdpc3RlciBpbmZvcm1hdGlvblxuIiwJCQkJXAotKSwKLQotaW50IGRvX3JlZ2luZm8gKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9SRUdJTkZPCi0jZW5kaWYJLyogQ09ORklHX0NPTU1BTkRTICYmIENGR19DTURfUkVHSU5GTyAqLwotCi0jZW5kaWYJLyogX0NNRF9SRUdJTkZPX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9ydGMuaCBiL2luY2x1ZGUvY21kX3J0Yy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTQ5Zjc4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY21kX3J0Yy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaWZuZGVmIF9DTURfUlRDX0hfCi0jZGVmaW5lIF9DTURfUlRDX0hfCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9EQVRFKQotCi0jZGVmaW5lIENNRF9UQkxfREFURQlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJkYXRlIiwgMywJMiwJMSwJZG9fZGF0ZSwJCQkJXAotCSJkYXRlICAgIC0gZ2V0L3NldC9yZXNldCBkYXRlICYgdGltZVxuIiwJCQkJXAotCSJbTU1ERGhobW1bW0NDXVlZXVsuc3NdXVxuZGF0ZSByZXNldFxuIgkJCQkJXAotCSIgIC0gd2l0aG91dCBhcmd1bWVudHM6IHByaW50IGRhdGUgJiB0aW1lXG4iCQkJCVwKLQkiICAtIHdpdGggbnVtZXJpYyBhcmd1bWVudDogc2V0IHRoZSBzeXN0ZW0gZGF0ZSAmIHRpbWVcbiIJCVwKLQkiICAtIHdpdGggJ3Jlc2V0JyBhcmd1bWVudDogcmVzZXQgdGhlIFJUQ1xuIgkJCQlcCi0pLAotCi1pbnQgZG9fZGF0ZSAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotCi0jZWxzZQotCi0jZGVmaW5lIENNRF9UQkxfREFURQotCi0jZW5kaWYJLyogQ0ZHX0NNRF9EQVRFICovCi0KLQotI2VuZGlmCS8qIF9DTURfUlRDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF9zY3NpLmggYi9pbmNsdWRlL2NtZF9zY3NpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkY2EwNTkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9jbWRfc2NzaS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMQotICogRGVuaXMgUGV0ZXIsIE1QTCBBRyBTd2l0emVybGFuZAotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICoKLSAqLwotI2lmbmRlZglfQ01EX1NDU0lfSAotI2RlZmluZQlfQ01EX1NDU0lfSAotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8Y29tbWFuZC5oPgotCi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TQ1NJKQotCi0jZGVmaW5lCUNNRF9UQkxfU0NTSQlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJzY3NpIiwJNCwJNSwJMSwJZG9fc2NzaSwJCQkJXAotCSJzY3NpICAgIC0gU0NTSSBzdWItc3lzdGVtXG4iLAkJCQkJCVwKLQkicmVzZXQgLSByZXNldCBTQ1NJIGNvbnRyb2xsZXJcbiIJCQkJCVwKLQkic2NzaSBpbmZvICAtIHNob3cgYXZhaWxhYmxlIFNDU0kgZGV2aWNlc1xuIgkJCQlcCi0JInNjc2kgc2NhbiAgLSAocmUtKXNjYW4gU0NTSSBidXNcbiIJCQkJCVwKLQkic2NzaSBkZXZpY2UgW2Rldl0gLSBzaG93IG9yIHNldCBjdXJyZW50IGRldmljZVxuIgkJCVwKLQkic2NzaSBwYXJ0IFtkZXZdIC0gcHJpbnQgcGFydGl0aW9uIHRhYmxlIG9mIG9uZSBvciBhbGwgU0NTSSBkZXZpY2VzXG4iCVwKLQkic2NzaSByZWFkIGFkZHIgYmxrIyBjbnQgLSByZWFkIGBjbnQnIGJsb2NrcyBzdGFydGluZyBhdCBibG9jayBgYmxrIydcbiJcCi0JIiAgICAgdG8gbWVtb3J5IGFkZHJlc3MgYGFkZHInXG4iCQkJCQlcCi0pLAotCi0KLSNkZWZpbmUJQ01EX1RCTF9TQ1NJQk9PVAlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJzY3NpYm9vdCIsCTUsCTMsCTEsCWRvX3Njc2lib290LAkJCQkJXAotCSJzY3NpYm9vdC0gYm9vdCBmcm9tIFNDU0kgZGV2aWNlXG4iLAkJCQkJCVwKLQkibG9hZEFkZHIgZGV2OnBhcnRcbiIJCQlcCi0pLAotCi1pbnQgZG9fc2NzaSAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX3Njc2lib290IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci0KLQotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9TQ1NJCi0jZGVmaW5lIENNRF9UQkxfU0NTSUJPT1QKLSNlbmRpZgotCi0jZW5kaWYJLyogX0NNRF9TQ1NJX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfc3BpLmggYi9pbmNsdWRlL2NtZF9zcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA5MjdjMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF9zcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIEdlcmFsZCBWYW4gQmFyZW4sIEN1c3RvbSBJREVBUywgdmFuYmFyZW5AY2lkZWFzLmNvbQotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qCi0gKiBTUEkgRnVuY3Rpb25zCi0gKi8KLSNpZm5kZWYJX0NNRF9TUElfSAotI2RlZmluZSBfQ01EX1NQSV9ICi0KLSNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9TUEkpCi0jZGVmaW5lIENNRF9UQkxfU1BJCU1LX0NNRF9UQkxfRU5UUlkoCQkJCVwKLQkic3NwaSIsCQkzLAk1LAkxLAlkb19zcGksCQkJXAotCSJzc3BpICAgICAtIFNQSSB1dGlsaXR5IGNvbW1hbmRzXG4iLAkJCQlcCi0JIlwKLTxkZXZpY2U+IDxiaXRfbGVuPiA8ZG91dD4gLSBTZW5kIDxiaXRfbGVuPiBiaXRzIGZyb20gPGRvdXQ+IG91dCB0aGUgU1BJXG5cCi0gIDxkZXZpY2U+ICAtIElkZW50aWZpZXMgdGhlIGNoaXAgc2VsZWN0IG9mIHRoZSBkZXZpY2VcblwKLSAgPGJpdF9sZW4+IC0gTnVtYmVyIG9mIGJpdHMgdG8gc2VuZCAoYmFzZSAxMClcblwKLSAgPGRvdXQ+ICAgIC0gSGV4YWRlY2ltYWwgc3RyaW5nIHRoYXQgZ2V0cyBzZW50XG4iIFwKLSksCi0KLWludCBkb19zcGkgICAgICAgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9TUEkKLSNlbmRpZgkvKiBDRkdfQ01EX1NQSSAqLwotCi0jZW5kaWYJLyogX0NNRF9TUElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbWRfdXNiLmggYi9pbmNsdWRlL2NtZF91c2IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdiNGU4My4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2NtZF91c2IuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEKLSAqIERlbmlzIFBldGVyLCBNUEwgQUcgU3dpdHplcmxhbmQKLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqCi0gKi8KLSNpZm5kZWYJX0NNRF9VU0JfSAotI2RlZmluZQlfQ01EX1VTQl9ICi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb21tYW5kLmg+Ci0KLQotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX1VTQikKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRQotI2RlZmluZQlDTURfVEJMX1VTQglNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJ1c2IiLAk0LAk1LAkxLAlkb191c2IsCQkJCVwKLQkidXNiICAgICAtIFVTQiBzdWItc3lzdGVtXG4iLAkJCQkJCVwKLQkicmVzZXQgLSByZXNldCAocmVzY2FuKSBVU0IgY29udHJvbGxlclxuIgkJCQkJXAotCSJ1c2IgIHN0b3AgW2ZdICAtIHN0b3AgVVNCIFtmXT1mb3JjZSBzdG9wXG4iCQkJCVwKLQkidXNiICB0cmVlICAtIHNob3cgVVNCIGRldmljZSB0cmVlXG4iCQkJCVwKLQkidXNiICBpbmZvIFtkZXZdIC0gc2hvdyBhdmFpbGFibGUgVVNCIGRldmljZXNcbiIJCQkJXAotCSJ1c2IgIHNjYW4gIC0gKHJlLSlzY2FuIFVTQiBidXMgZm9yIHN0b3JhZ2UgZGV2aWNlc1xuIgkJCQkJXAotCSJ1c2IgIGRldmljZSBbZGV2XSAtIHNob3cgb3Igc2V0IGN1cnJlbnQgVVNCIHN0b3JhZ2UgZGV2aWNlXG4iCQkJXAotCSJ1c2IgIHBhcnQgW2Rldl0gLSBwcmludCBwYXJ0aXRpb24gdGFibGUgb2Ygb25lIG9yIGFsbCBVU0Igc3RvcmFnZSBkZXZpY2VzXG4iCVwKLQkidXNiICByZWFkIGFkZHIgYmxrIyBjbnQgLSByZWFkIGBjbnQnIGJsb2NrcyBzdGFydGluZyBhdCBibG9jayBgYmxrIydcbiJcCi0JIiAgICAgdG8gbWVtb3J5IGFkZHJlc3MgYGFkZHInXG4iCQkJCQlcCi0pLAotCi0KLSNkZWZpbmUJQ01EX1RCTF9VU0JCT09UCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JInVzYmJvb3QiLAk1LAkzLAkxLAlkb191c2Jib290LAkJCQkJXAotCSJ1c2Jib290IC0gYm9vdCBmcm9tIFVTQiBkZXZpY2VcbiIsCQkJCQkJXAotCSJsb2FkQWRkciBkZXY6cGFydFxuIgkJCVwKLSksCi0KLSNlbHNlCi0jZGVmaW5lCUNNRF9UQkxfVVNCCU1LX0NNRF9UQkxfRU5UUlkoCQkJCQlcCi0JInVzYiIsCTQsCTUsCTEsCWRvX3VzYiwJCQkJXAotCSJ1c2IgICAgIC0gVVNCIHN1Yi1zeXN0ZW1cbiIsCQkJCQkJXAotCSJyZXNldCAtIHJlc2V0IChyZXNjYW4pIFVTQiBjb250cm9sbGVyXG4iCQkJCQlcCi0JInVzYiAgdHJlZSAgLSBzaG93IFVTQiBkZXZpY2UgdHJlZVxuIgkJCQlcCi0JInVzYiAgaW5mbyBbZGV2XSAtIHNob3cgYXZhaWxhYmxlIFVTQiBkZXZpY2VzXG4iCQkJCVwKLSksCi0KLSNkZWZpbmUgQ01EX1RCTF9VU0JCT09UCi0jZW5kaWYKLQotaW50IGRvX3VzYiAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotaW50IGRvX3VzYmJvb3QgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotCi0jZWxzZQotI2RlZmluZSBDTURfVEJMX1VTQgotI2RlZmluZSBDTURfVEJMX1VTQkJPT1QKLSNlbmRpZgotCi0jZW5kaWYJLyogX0NNRF9VU0JfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NtZF92ZmQuaCBiL2luY2x1ZGUvY21kX3ZmZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDZmMjFhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvY21kX3ZmZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKgotICogTWlzY2VsbGFuaW91cyBjb21tYW5kcwotICovCi0jaWZuZGVmCV9DTURfVkZEX0gKLSNkZWZpbmUJX0NNRF9WRkRfSAotCi0jaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfVkZEKQotI2RlZmluZQlDTURfVEJMX1ZGRAlNS19DTURfVEJMX0VOVFJZKAkJCQkJXAotCSJ2ZmQiLAkzLAkyLAkwLAlkb192ZmQsCQkJCVwKLQkidmZkICAgICAtIGxvYWQgYSBiaXRtYXAgdG8gdGhlIFZGRHMgb24gVFJBQlxuIiwJCVwKLQkiI05cbiIJCQkJCQkJCVwKLQkiICAgIC0gbG9hZCBiaXRtYXAgbm8uIE4gdG8gdGhlIFZGRHMgKE4gaXMgX2RlY2ltYWxfICEhISlcbiIJXAotCSJ2ZmQgYWRkclxuIgkJCQkJCQlcCi0JIiAgICAtIGxvYWQgYml0bWFwIGF0IGFkZHJlc3MgX2FkZHJfIHRvIHRoZSBWRkRzXG4iCQlcCi0pLAotCi0vKiBJbXBsZW1lbnRlZCBpbiBjb21tb24vY21kX21pc2MuYyAqLwotaW50IGRvX3ZmZCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwotI2Vsc2UKLSNkZWZpbmUgQ01EX1RCTF9WRkQKLSNlbmRpZgkvKiBDRkdfQ01EX1ZGRCAqLwotCi0jZW5kaWYJLyogX0NNRF9WRkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tYW5kLmggYi9pbmNsdWRlL2NvbW1hbmQuaAppbmRleCA5NDUzYzBkLi5hMzljMTJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1hbmQuaAorKysgYi9pbmNsdWRlL2NvbW1hbmQuaApAQCAtMzgsOSArMzgsOSBAQAogCiBzdHJ1Y3QgY21kX3RibF9zIHsKIAljaGFyCQkqbmFtZTsJCS8qIENvbW1hbmQgTmFtZQkJCSovCi0JaW50CQlsbWluOwkJLyogbWluaW11bSBhYmJyZXZpYXRlZCBsZW5ndGgJKi8KIAlpbnQJCW1heGFyZ3M7CS8qIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cwkqLwogCWludAkJcmVwZWF0YWJsZTsJLyogYXV0b3JlcGVhdCBhbGxvd2VkPwkJKi8KKwogCQkJCQkvKiBJbXBsZW1lbnRhdGlvbiBmdW5jdGlvbgkqLwogCWludAkJKCpjbWQpKHN0cnVjdCBjbWRfdGJsX3MgKiwgaW50LCBpbnQsIGNoYXIgKltdKTsKIAljaGFyCQkqdXNhZ2U7CQkvKiBVc2FnZSBtZXNzYWdlCShzaG9ydCkJKi8KQEAgLTUxLDE1ICs1MSw5IEBACiAKIHR5cGVkZWYgc3RydWN0IGNtZF90YmxfcwljbWRfdGJsX3Q7CiAKLWV4dGVybgljbWRfdGJsX3QgY21kX3RibFtdOworZXh0ZXJuIGNtZF90YmxfdCAgX191X2Jvb3RfY21kX3N0YXJ0OworZXh0ZXJuIGNtZF90YmxfdCAgX191X2Jvb3RfY21kX2VuZDsKIAotI2lmZGVmCUNGR19MT05HSEVMUAotI2RlZmluZQlNS19DTURfVEJMX0VOVFJZKG5hbWUsbG1pbixtYXhhcmdzLHJlcCxjbWQsdXNhZ2UsaGVscCkJXAotCQkJCXsgbmFtZSwgbG1pbiwgbWF4YXJncywgcmVwLCBjbWQsIHVzYWdlLCBoZWxwIH0KLSNlbHNlCS8qIG5vIGhlbHAgaW5mbyAqLwotI2RlZmluZQlNS19DTURfVEJMX0VOVFJZKG5hbWUsbG1pbixtYXhhcmdzLHJlcCxjbWQsdXNhZ2UsaGVscCkJXAotCQkJCXsgbmFtZSwgbG1pbiwgbWF4YXJncywgcmVwLCBjbWQsIHVzYWdlIH0KLSNlbmRpZgogCiAvKiBjb21tb24vY29tbWFuZC5jICovCiBjbWRfdGJsX3QgKmZpbmRfY21kKGNvbnN0IGNoYXIgKmNtZCk7CkBAIC04Nyw0ICs4MSwyMCBAQAogICogdG8gaW5jbHVkZS9jbWRfY29uZmRlZnMuaAogICovCiAKKworI2RlZmluZSBTdHJ1Y3RfU2VjdGlvbiAgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCxzZWN0aW9uICgiLnVfYm9vdF9jbWQiKSkpCisjZGVmaW5lIFVfQk9PVF9DTUQoeCkgIF9fdV9ib290X2NtZF8jI3ggU3RydWN0X1NlY3Rpb24KKworI2lmZGVmICBDRkdfTE9OR0hFTFAKKworI2RlZmluZSBNS19DTURfRU5UUlkobmFtZSxtYXhhcmdzLHJlcCxjbWQsdXNhZ2UsaGVscCkJXAorCQkJeyBuYW1lLCBtYXhhcmdzLCByZXAsIGNtZCwgdXNhZ2UsIGhlbHAgfQorCisjZWxzZQkvKiBubyBsb25nIGhlbHAgaW5mbyAqLworCisjZGVmaW5lIE1LX0NNRF9FTlRSWShuYW1lLG1heGFyZ3MscmVwLGNtZCx1c2FnZSxoZWxwKQlcCisJCQl7IG5hbWUsIG1heGFyZ3MsIHJlcCwgY21kLCB1c2FnZSB9CisKKyNlbmRpZgkvKiBDRkdfTE9OR0hFTFAgKi8KKwogI2VuZGlmCS8qIF9fQ09NTUFORF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbW1vbi5oIGIvaW5jbHVkZS9jb21tb24uaAppbmRleCBjYzVkYmU3Li4wYmI0MzUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvY29tbW9uLmgKQEAgLTE2Nyw3ICsxNjcsNyBAQAogIyBpbmNsdWRlIDxhc20vdS1ib290LWFybS5oPgkvKiBBUk0gdmVyc2lvbiB0byBiZSBmaXhlZCEgKi8KICNlbmRpZiAvKiBDT05GSUdfQVJNICovCiAjaWZkZWYgQ09ORklHX0kzODYJCS8qIHg4NiB2ZXJzaW9uIHRvIGJlIGZpeGVkISAqLwotIyBpbmNsdWRlIDxhc20vdS1ib290LWkzODYuaD4gIAorIyBpbmNsdWRlIDxhc20vdS1ib290LWkzODYuaD4KICNlbmRpZiAvKiBDT05GSUdfSTM4NiAqLwogCiB2b2lkICAgIHBjaV9pbml0ICAgICAgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb21tcHJvYy5oIGIvaW5jbHVkZS9jb21tcHJvYy5oCmluZGV4IGMxMDUyNWQuLjY1MmQyYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbXByb2MuaAorKysgYi9pbmNsdWRlL2NvbW1wcm9jLmgKQEAgLTExNzcsOCArMTE3Nyw4IEBACiAKICMgZW5kaWYgLyogQ09ORklHX0ZFQ19FTkVUICovCiAjZW5kaWYgIC8qIENPTkZJR19TVk1fU0M4eHggKi8KLQkKLQkKKworCiAjaWYgZGVmaW5lZChDT05GSUdfTkVUVklBKQogLyogQml0cyBpbiBwYXJhbGxlbCBJL08gcG9ydCByZWdpc3RlcnMgdGhhdCBoYXZlIHRvIGJlIHNldC9jbGVhcmVkCiAgKiB0byBjb25maWd1cmUgdGhlIHBpbnMgZm9yIFNDQzIgdXNlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0EzMDAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvQTMwMDAuaAppbmRleCBmOTMzZWE4Li5iMjVlNDhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvQTMwMDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvQTMwMDAuaApAQCAtMTA2LDcgKzEwNiw3IEBACiAKIC8qICNkZWZpbmUgQ09ORklHX1RVTElQICovCiAvKiAjZGVmaW5lIENPTkZJR19FRVBSTzEwMCAqLwotI2RlZmluZSBDT05GSUdfTkFUU0VNSSAgCisjZGVmaW5lIENPTkZJR19OQVRTRU1JCiAKICNkZWZpbmUgUENJX0VORVQwX0lPQUREUgkJMHg4MDAwMDAwMAogI2RlZmluZSBQQ0lfRU5FVDBfTUVNQUREUgkJMHg4MDAwMDAwMApAQCAtMzE5LDYgKzMxOSw0IEBACiAjZGVmaW5lIEJPT1RGTEFHX0NPTEQJCTB4MDEJLyogTm9ybWFsIFBvd2VyLU9uOiBCb290IGZyb20gRkxBU0gJKi8KICNkZWZpbmUgQk9PVEZMQUdfV0FSTQkJMHgwMgkvKiBTb2Z0d2FyZSByZWJvb3QJCQkqLwogCi0KLQogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9BRENJT1AuaCBiL2luY2x1ZGUvY29uZmlncy9BRENJT1AuaAppbmRleCA5MmI0NDgyLi4yNTU5NDJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvQURDSU9QLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0FEQ0lPUC5oCkBAIC04OSw3ICs4OSw3IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCXsgMzAwLCA2MDAsIDEyMDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CiAKICNkZWZpbmUgQ0ZHX0xPQURfQUREUgkweDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwkqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvQVI0MDUuaCBiL2luY2x1ZGUvY29uZmlncy9BUjQwNS5oCmluZGV4IGFjYjJmYjYuLjYzMmQzOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9BUjQwNS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9BUjQwNS5oCkBAIC02Nyw3ICs2Nyw3IEBACiAjZGVmaW5lCUNPTkZJR19QSFlfQUREUgkJMAkvKiBQSFkgYWRkcmVzcwkJCSovCiAKICNkZWZpbmUgQ09ORklHX0NPTU1BTkRTICAgICAgICAgXAotICAgICAgICAoQ09ORklHX0NNRF9ERkwgfCBDRkdfQ01EX1BDSSB8IENGR19DTURfSVJRIHwgQ0ZHX0NNRF9BU0tFTlYpCisJKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9QQ0kgfCBDRkdfQ01EX0lSUSB8IENGR19DTURfQVNLRU5WKQogCiAvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCiAjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CkBAIC05OSw4ICs5OSw4IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCi0gICAgICAgICA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KKwl7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCisJIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAgfQogCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkxCQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KQEAgLTEyMCw3ICsxMjAsNyBAQAogI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9GT1JDRSAgLyogc2VsZWN0IHBjaSBob3N0IGZ1bmN0aW9uICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCisJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KIAogI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVyAgICAgICAgICAgIC8qIHByaW50IHBjaSBkZXZpY2VzIEAgc3RhcnR1cCAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0FTSDQwNS5oIGIvaW5jbHVkZS9jb25maWdzL0FTSDQwNS5oCmluZGV4IDRiZTYxNTguLjM4Njg5OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9BU0g0MDUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvQVNINDA1LmgKQEAgLTExNyw4ICsxMTcsOCBAQAogCiAvKiBUaGUgZm9sbG93aW5nIHRhYmxlIGluY2x1ZGVzIHRoZSBzdXBwb3J0ZWQgYmF1ZHJhdGVzICovCiAjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgICAgIFwKLSAgICAgICAgeyAzMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCAgICAgXAotICAgICAgICAgNTc2MDAsIDExNTIwMCwgMjMwNDAwLCA0NjA4MDAsIDkyMTYwMCB9CisJeyAzMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCAgICAgXAorCSA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KIAogI2RlZmluZSBDRkdfTE9BRF9BRERSCTB4MTAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCiAjZGVmaW5lIENGR19FWFRCRElORk8JMQkJLyogVG8gdXNlIGV4dGVuZGVkIGJvYXJkX2ludG8gKGJkX3QpICovCkBAIC0xNzUsNyArMTc1LDcgQEAKICNkZWZpbmUgQ09ORklHX1BDSQkJCS8qIGluY2x1ZGUgcGNpIHN1cHBvcnQJICAgICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX0hPU1QJUENJX0hPU1RfSE9TVCAgIC8qIHNlbGVjdCBwY2kgaG9zdCBmdW5jdGlvbiAgICAgKi8KICN1bmRlZiAgQ09ORklHX1BDSV9QTlAJCQkvKiBkbyBwY2kgcGx1Zy1hbmQtcGxheSAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzb3VyY2UgY29uZmlndXJhdGlvbiAgICAgICAqLworCQkJCQkvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCiAKICN1bmRlZiAgQ09ORklHX1BDSV9TQ0FOX1NIT1cgICAgICAgICAgICAvKiBwcmludCBwY2kgZGV2aWNlcyBAIHN0YXJ0dXAgICovCiAKQEAgLTIzOSw3ICsyMzksNyBAQAogI2RlZmluZSBDRkdfRU5WX0lTX0lOX0VFUFJPTSAgICAxICAgICAgIC8qIHVzZSBFRVBST00gZm9yIGVudmlyb25tZW50IHZhcnMgKi8KICNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQgICAgICAgICAgMHgxMDAgICAvKiBlbnZpcm9ubWVudCBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgRUVQUk9NICovCiAjZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgICAgIDB4NzAwICAgLyogMjA0OCBieXRlcyBtYXkgYmUgdXNlZCBmb3IgZW52IHZhcnMqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0b3RhbCBzaXplIG9mIGEgQ0FUMjRXQzE2IGlzIDIwNDggYnl0ZXMgKi8KKwkJCQkgICAvKiB0b3RhbCBzaXplIG9mIGEgQ0FUMjRXQzE2IGlzIDIwNDggYnl0ZXMgKi8KIAogI2RlZmluZSBDRkdfTlZSQU1fQkFTRV9BRERSCTB4RjAwMDA1MDAJCS8qIE5WUkFNIGJhc2UgYWRkcmVzcwkqLwogI2RlZmluZSBDRkdfTlZSQU1fU0laRQkJMjQyCQkgICAgICAgIC8qIE5WUkFNIHNpemUJCSovCkBAIC0yNjUsNyArMjY1LDcgQEAKICAqIENhY2hlIENvbmZpZ3VyYXRpb24KICAqLwogI2RlZmluZSBDRkdfRENBQ0hFX1NJWkUJCTE2Mzg0CS8qIEZvciBJQk0gNDA1IENQVXMsIG9sZGVyIDQwNSBwcGMncyAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhhdmUgb25seSA4a0IsIDE2a0IgaXMgc2F2ZSBoZXJlICAgICAqLworCQkJCQkvKiBoYXZlIG9ubHkgOGtCLCAxNmtCIGlzIHNhdmUgaGVyZSAgICAgKi8KICNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTMyCS8qIC4uLgkJCSovCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKICNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSElGVAk1CS8qIGxvZyBiYXNlIDIgb2YgdGhlIGFib3ZlIHZhbHVlCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvQW1pZ2FPbmVHM1NFLmggYi9pbmNsdWRlL2NvbmZpZ3MvQW1pZ2FPbmVHM1NFLmgKaW5kZXggMDA5NjM2Yi4uOTliNDJlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0FtaWdhT25lRzNTRS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9BbWlnYU9uZUczU0UuaApAQCAtMTQ2LDcgKzE0Niw3IEBACiAvKiBTaXplIGluIGJ5dGVzIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEKICAqLwogLyogSEpGOiB1c2VkIHRvIGJlIDB4NDAwMDAwICovCi0jZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4NDAwMDAwMDAgCisjZGVmaW5lIENGR19JTklUX1JBTV9BRERSCTB4NDAwMDAwMDAKICNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0VORAkweDgwMDAKICNkZWZpbmUgQ0ZHX0dCTF9EQVRBX1NJWkUJMTI4CiAjZGVmaW5lIENGR19HQkxfREFUQV9PRkZTRVQJKENGR19JTklUX1JBTV9FTkQgLSBDRkdfR0JMX0RBVEFfU0laRSkKQEAgLTE4MCw5ICsxODAsOSBAQAogI2RlZmluZSBDRkdfSUJBVDFMCSAoMHg4MDAwMDAwMCB8IEJBVExfUFBfUlcgfCBCQVRMX0NBQ0hFSU5ISUJJVCkKICNkZWZpbmUgQ0ZHX0lCQVQxVQkgKDB4ODAwMDAwMDAgfCBCQVRVX0JMXzI1Nk0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKIC8qIEhKRjoKLSNkZWZpbmUgQ0ZHX0lCQVQxTCAoKENGR19TRFJBTV9CQVNFK0NGR19JTklUX1JBTV9BRERSKSB8IEJBVExfUFBfUlcpIAorI2RlZmluZSBDRkdfSUJBVDFMICgoQ0ZHX1NEUkFNX0JBU0UrQ0ZHX0lOSVRfUkFNX0FERFIpIHwgQkFUTF9QUF9SVykKICNkZWZpbmUgQ0ZHX0lCQVQxVSAoKENGR19TRFJBTV9CQVNFK0NGR19JTklUX1JBTV9BRERSKSB8IEJBVFVfQkxfMjU2TSB8IEJBVFVfVlMgfCBCQVRVX1ZQKQotI2RlZmluZSBDRkdfREJBVDFMICgoQ0ZHX1NEUkFNX0JBU0UrQ0ZHX0lOSVRfUkFNX0FERFIgKyAweDIwMDAwKSB8IEJBVExfUFBfUlcgKSAKKyNkZWZpbmUgQ0ZHX0RCQVQxTCAoKENGR19TRFJBTV9CQVNFK0NGR19JTklUX1JBTV9BRERSICsgMHgyMDAwMCkgfCBCQVRMX1BQX1JXICkKICNkZWZpbmUgQ0ZHX0RCQVQxVSAoKENGR19TRFJBTV9CQVNFK0NGR19JTklUX1JBTV9BRERSICsgMHgyMDAwMCkgfCBCQVRVX0JMXzI1Nk0gfCBCQVRVX1ZTIHwgQkFUVV9WUCkKICovCiAKQEAgLTE5MSw5ICsxOTEsOSBAQAogI2RlZmluZSBDRkdfREJBVDJMCShDRkdfSU5JVF9SQU1fQUREUiB8IEJBVExfUFBfUlcgfCBCQVRMX01FTUNPSEVSRU5DRSkKICNkZWZpbmUgQ0ZHX0RCQVQyVQkoQ0ZHX0lOSVRfUkFNX0FERFIgfCBCQVRVX0JMXzEyOEsgfCBCQVRVX1ZTIHwgQkFUVV9WUCkKIC8qIFRoaXMgdXNlZCB0byBiZSBjb21tZW50ZWQgb3V0ICovCi0jZGVmaW5lIENGR19JQkFUMkwJICBDRkdfREJBVDJMIAorI2RlZmluZSBDRkdfSUJBVDJMCSAgQ0ZHX0RCQVQyTAogLyogVGhpcyBoZXJlIHRvbyAqLwotI2RlZmluZSBDRkdfSUJBVDJVCSAgQ0ZHX0RCQVQyVSAKKyNkZWZpbmUgQ0ZHX0lCQVQyVQkgIENGR19EQkFUMlUKIAogCiAvKiBJL08gYW5kIFBDSSBtZW1vcnkgYXQgMHhmMDAwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0JBQjd4eC5oIGIvaW5jbHVkZS9jb25maWdzL0JBQjd4eC5oCmluZGV4IGQzMTJlNmIuLjVkZDdhN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9CQUI3eHguaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvQkFCN3h4LmgKQEAgLTcxLDggKzcxLDggQEAKICNkZWZpbmUgQ09ORklHX0JPT1RQX01BU0sgICAgICAgKENPTkZJR19CT09UUF9ERUZBVUxUIHwgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRSkKIAogI2RlZmluZSBDT05GSUdfQ09NTUFORFMgICAgICAgICAoQ09ORklHX0NNRF9ERkwgfCBDRkdfQ01EX1BDSSB8IENGR19DTURfSkZGUzIgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTURfU0NTSSAgIHwgQ0ZHX0NNRF9JREUgfCBDRkdfQ01EX0RBVEUgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfQ01EX0ZEQyAgICB8IENGR19DTURfRUxGKQorCQkJCSBDRkdfQ01EX1NDU0kgICB8IENGR19DTURfSURFIHwgQ0ZHX0NNRF9EQVRFICB8XAorCQkJCSBDRkdfQ01EX0ZEQyAgICB8IENGR19DTURfRUxGKQogCiAvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCiAjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CkBAIC0zMTksMTQgKzMxOSwxNCBAQAogI2RlZmluZSBDRkdfTlM4NzMwOCAgICAgICAgICAgICAgICAgICAgLyogTmF0IFNlbWkgc3VwZXItaW8gY250ciBvbiBJU0EgYnVzICovCiAjZGVmaW5lIENGR19OUzg3MzA4X0JBRERSXzEwICAgIDEKICNkZWZpbmUgQ0ZHX05TODczMDhfREVWUyAgICAgICAgKENGR19OUzg3MzA4X1VBUlQxICAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfTlM4NzMwOF9VQVJUMiAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX05TODczMDhfS0JDMSAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19OUzg3MzA4X01PVVNFICAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfTlM4NzMwOF9GREMgICAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX05TODczMDhfUkFSUCAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19OUzg3MzA4X0dQSU8gICAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfTlM4NzMwOF9QT1dSTUFOIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX05TODczMDhfUlRDX0FQQyApCisJCQkJIENGR19OUzg3MzA4X1VBUlQyICAgfCBcCisJCQkJIENGR19OUzg3MzA4X0tCQzEgICAgfCBcCisJCQkJIENGR19OUzg3MzA4X01PVVNFICAgfCBcCisJCQkJIENGR19OUzg3MzA4X0ZEQyAgICAgfCBcCisJCQkJIENGR19OUzg3MzA4X1JBUlAgICAgfCBcCisJCQkJIENGR19OUzg3MzA4X0dQSU8gICAgfCBcCisJCQkJIENGR19OUzg3MzA4X1BPV1JNQU4gfCBcCisJCQkJIENGR19OUzg3MzA4X1JUQ19BUEMgKQogCiAjZGVmaW5lIENGR19OUzg3MzA4X1BTMk1PRAogI2RlZmluZSBDRkdfTlM4NzMwOF9HUElPX0JBU0UgICAweDAyMjAKQEAgLTQzMSw3ICs0MzEsNyBAQAogICovCiAjdW5kZWYgIENGR19MMgogI2RlZmluZSBMMl9JTklUICAgICAoTDJDUl9MMlNJWl9ITSB8IEwyQ1JfTDJDTEtfMyB8IEwyQ1JfTDJSQU1fQlVSU1QgfCBcCi0gICAgICAgICAgICAgICAgICAgICBMMkNSX0wyT0hfNSAgIHwgTDJDUl9MMkNUTCAgIHwgTDJDUl9MMldUKQorCQkgICAgIEwyQ1JfTDJPSF81ICAgfCBMMkNSX0wyQ1RMICAgfCBMMkNSX0wyV1QpCiAjZGVmaW5lIEwyX0VOQUJMRSAgIChMMl9JTklUIHwgTDJDUl9MMkUpCiAKICNkZWZpbmUgQ0ZHX0wyX0JBQjd4eApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0JVQklOR0E0MDVFUC5oIGIvaW5jbHVkZS9jb25maWdzL0JVQklOR0E0MDVFUC5oCmluZGV4IGY3NzZhMzIuLjk5ZmNiYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9CVUJJTkdBNDA1RVAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvQlVCSU5HQTQwNUVQLmgKQEAgLTMyLDcgKzMyLDYgQEAKIC8qI2RlZmluZSBfX0RFQlVHX1NUQVJUX0ZST01fU1JBTV9fICovCiAKIAotCiAvKgogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqIChlYXN5IHRvIGNoYW5nZSkKQEAgLTIyMCw3ICsyMTksNyBAQAogI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9GT1JDRSAgLyogc2VsZWN0IHBjaSBob3N0IGZ1bmN0aW9uICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCisJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KIAogI2RlZmluZSBDRkdfUENJX1NVQlNZU19WRU5ET1JJRCAweDAwMDAgIC8qIFBDSSBWZW5kb3IgSUQ6IHRvLWRvISEhICAgICAgKi8KICNkZWZpbmUgQ0ZHX1BDSV9TVUJTWVNfREVWSUNFSUQgMHgwMDAwICAvKiBQQ0kgRGV2aWNlIElEOiB0by1kbyEhISAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvQ0FOQlQuaCBiL2luY2x1ZGUvY29uZmlncy9DQU5CVC5oCmluZGV4IDliOGJkMDUuLjdhY2ViNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9DQU5CVC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9DQU5CVC5oCkBAIC01OSw3ICs1OSw3IEBACiAjZGVmaW5lIENPTkZJR19DT01NQU5EUwkgICAgICgoIENPTkZJR19DTURfREZMCXwgICAgICAgXAogCQkJCUNGR19DTURfSVJRCXwgICAgICAgXAogCQkJCUNGR19DTURfRUVQUk9NICAgICAgKSAmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+Q0ZHX0NNRF9ORVQpCisJCQkgICAgICAgfkNGR19DTURfTkVUKQogCiAvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCiAjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CkBAIC05MSw4ICs5MSw4IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCi0gICAgICAgICA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KKwl7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCisJIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAgfQogCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkxCQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KQEAgLTE1Myw3ICsxNTMsNyBAQAogI2RlZmluZSBDRkdfRU5WX0lTX0lOX0VFUFJPTSAgICAxICAgICAgIC8qIHVzZSBFRVBST00gZm9yIGVudmlyb25tZW50IHZhcnMgKi8KICNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQgICAgICAgICAgMHgwMDAgICAvKiBlbnZpcm9ubWVudCBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgRUVQUk9NICovCiAjZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgICAgIDB4NDAwICAgLyogMTAyNCBieXRlcyBtYXkgYmUgdXNlZCBmb3IgZW52IHZhcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG90YWwgc2l6ZSBvZiBhIENBVDI0V0MwOCBpcyAxMDI0IGJ5dGVzICovCisJCQkJICAgLyogdG90YWwgc2l6ZSBvZiBhIENBVDI0V0MwOCBpcyAxMDI0IGJ5dGVzICovCiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0NDTS5oIGIvaW5jbHVkZS9jb25maWdzL0NDTS5oCmluZGV4IDBmYjI0ZGIuLmJhMTVlOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9DQ00uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvQ0NNLmgKQEAgLTYwLDEwICs2MCwxMCBAQAogI3VuZGVmCUNPTkZJR19CT09UQVJHUwogCiAjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORCAgICAgICJzZXRlbnYgYm9vdGFyZ3MgIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW09JChtZW0pICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicm9vdD0vZGV2L3JhbSBydyBpcD0kKGlwYWRkcik6JChzZXJ2ZXJpcCk6JChnYXRld2F5aXApOiQobmV0bWFzayk6JChob3N0bmFtZSk6Om9mZiAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInd0Xzh4eD10aW1lb3V0OjM2MDA7ICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYm9vdG0iCisJCQkJIm1lbT0kKG1lbSkgIiBcCisJCQkJInJvb3Q9L2Rldi9yYW0gcncgaXA9JChpcGFkZHIpOiQoc2VydmVyaXApOiQoZ2F0ZXdheWlwKTokKG5ldG1hc2spOiQoaG9zdG5hbWUpOjpvZmYgIiBcCisJCQkJInd0Xzh4eD10aW1lb3V0OjM2MDA7ICIgXAorCQkJCSJib290bSIKIAogI2RlZmluZSBDT05GSUdfTE9BRFNfRUNITwkxCS8qIGVjaG8gb24gZm9yIHNlcmlhbCBkb3dubG9hZAkqLwogI3VuZGVmCUNGR19MT0FEU19CQVVEX0NIQU5HRQkvKiBkb24ndCBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9DUENJNDA1LmggYi9pbmNsdWRlL2NvbmZpZ3MvQ1BDSTQwNS5oCmluZGV4IGQ3ZmJlMmUuLjRiZTk0ZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9DUENJNDA1LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0NQQ0k0MDUuaApAQCAtNDYsMTAgKzQ2LDEwIEBACiAKICNpZiAwCiAjZGVmaW5lIENPTkZJR19QUkVCT09UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgImNyYzMyIGYwMjA3MDA0IGZmYyAwOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiaWYgY21wIDAgZjAyMDcwMDAgMTsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJ0aGVuO2VjaG8gT2xkIENSQyBpcyBjb3JyZWN0O2NyYzMyIGYwMjA3MDA0IGZmNCBmMDIwNzAwMDsiICAgICAgICAgICAgIFwKLSAgICAgICAgImVsc2U7ZWNobyBPbGQgQ1JDIGlzIGJhZDtmaSIKKwkiY3JjMzIgZjAyMDcwMDQgZmZjIDA7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJImlmIGNtcCAwIGYwMjA3MDAwIDE7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSJ0aGVuO2VjaG8gT2xkIENSQyBpcyBjb3JyZWN0O2NyYzMyIGYwMjA3MDA0IGZmNCBmMDIwNzAwMDsiICAgICAgICAgICAgIFwKKwkiZWxzZTtlY2hvIE9sZCBDUkMgaXMgYmFkO2ZpIgogI2VuZGlmCiAKICN1bmRlZglDT05GSUdfQk9PVEFSR1MKQEAgLTEyOCw4ICsxMjgsOCBAQAogCiAvKiBUaGUgZm9sbG93aW5nIHRhYmxlIGluY2x1ZGVzIHRoZSBzdXBwb3J0ZWQgYmF1ZHJhdGVzICovCiAjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgICAgIFwKLSAgICAgICAgeyAzMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCAgICAgXAotICAgICAgICAgNTc2MDAsIDExNTIwMCwgMjMwNDAwLCA0NjA4MDAsIDkyMTYwMCB9CisJeyAzMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCAgICAgXAorCSA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KIAogI2RlZmluZSBDRkdfTE9BRF9BRERSCTB4MTAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCiAjZGVmaW5lIENGR19FWFRCRElORk8JMQkJLyogVG8gdXNlIGV4dGVuZGVkIGJvYXJkX2ludG8gKGJkX3QpICovCkBAIC0xNDksNyArMTQ5LDcgQEAKICNkZWZpbmUgQ09ORklHX1BDSQkJCS8qIGluY2x1ZGUgcGNpIHN1cHBvcnQJICAgICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX0hPU1QJUENJX0hPU1RfQVVUTyAgIC8qIHNlbGVjdCBwY2kgaG9zdCBmdW5jdGlvbiAgICAgKi8KICNkZWZpbmUgQ09ORklHX1BDSV9QTlAJCQkvKiBkbyBwY2kgcGx1Zy1hbmQtcGxheSAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzb3VyY2UgY29uZmlndXJhdGlvbiAgICAgICAqLworCQkJCQkvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCiAKICNkZWZpbmUgQ09ORklHX1BDSV9TQ0FOX1NIT1cgICAgICAgICAgICAvKiBwcmludCBwY2kgZGV2aWNlcyBAIHN0YXJ0dXAgICovCiAKQEAgLTI0MCw3ICsyNDAsNyBAQAogI2RlZmluZSBDRkdfRU5WX0lTX0lOX0VFUFJPTSAgICAxICAgICAgIC8qIHVzZSBFRVBST00gZm9yIGVudmlyb25tZW50IHZhcnMgKi8KICNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQgICAgICAgICAgMHgwMDAgICAvKiBlbnZpcm9ubWVudCBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgRUVQUk9NICovCiAjZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgICAgIDB4MjAwICAgLyogNTEyIGJ5dGVzIG1heSBiZSB1c2VkIGZvciBlbnYgdmFycyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0b3RhbCBzaXplIG9mIGEgQ0FUMjRXQzA4IGlzIDEwMjQgYnl0ZXMgKi8KKwkJCQkgICAvKiB0b3RhbCBzaXplIG9mIGEgQ0FUMjRXQzA4IGlzIDEwMjQgYnl0ZXMgKi8KICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvQ1BDSTQwNTIuaCBiL2luY2x1ZGUvY29uZmlncy9DUENJNDA1Mi5oCmluZGV4IDI2NzFiNWYuLjFmOWQzOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9DUENJNDA1Mi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9DUENJNDA1Mi5oCkBAIC00NywxMCArNDcsMTAgQEAKIAogI2lmIDAKICNkZWZpbmUgQ09ORklHX1BSRUJPT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiY3JjMzIgZjAyMDcwMDQgZmZjIDA7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJpZiBjbXAgMCBmMDIwNzAwMCAxOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgInRoZW47ZWNobyBPbGQgQ1JDIGlzIGNvcnJlY3Q7Y3JjMzIgZjAyMDcwMDQgZmY0IGYwMjA3MDAwOyIgICAgICAgICAgICAgXAotICAgICAgICAiZWxzZTtlY2hvIE9sZCBDUkMgaXMgYmFkO2ZpIgorCSJjcmMzMiBmMDIwNzAwNCBmZmMgMDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiaWYgY21wIDAgZjAyMDcwMDAgMTsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJInRoZW47ZWNobyBPbGQgQ1JDIGlzIGNvcnJlY3Q7Y3JjMzIgZjAyMDcwMDQgZmY0IGYwMjA3MDAwOyIgICAgICAgICAgICAgXAorCSJlbHNlO2VjaG8gT2xkIENSQyBpcyBiYWQ7ZmkiCiAjZW5kaWYKIAogI3VuZGVmCUNPTkZJR19CT09UQVJHUwpAQCAtMTM1LDggKzEzNSw4IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCi0gICAgICAgICA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KKwl7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCisJIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAgfQogCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkxCQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KQEAgLTE2MCw3ICsxNjAsNyBAQAogI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9BVVRPICAgLyogc2VsZWN0IHBjaSBob3N0IGZ1bmN0aW9uICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCisJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KIAogI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVyAgICAgICAgICAgIC8qIHByaW50IHBjaSBkZXZpY2VzIEAgc3RhcnR1cCAgKi8KIApAQCAtMjUxLDcgKzI1MSw3IEBACiAjZGVmaW5lIENGR19FTlZfSVNfSU5fRUVQUk9NICAgIDEgICAgICAgLyogdXNlIEVFUFJPTSBmb3IgZW52aXJvbm1lbnQgdmFycyAqLwogI2RlZmluZSBDRkdfRU5WX09GRlNFVCAgICAgICAgICAweDAwMCAgIC8qIGVudmlyb25tZW50IHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBFRVBST00gKi8KICNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgICAgMHg4MDAgICAvKiAyMDQ4IGJ5dGVzIG1heSBiZSB1c2VkIGZvciBlbnYgdmFycyovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvdGFsIHNpemUgb2YgYSBDQVQyNFdDMTYgaXMgMjA0OCBieXRlcyAqLworCQkJCSAgIC8qIHRvdGFsIHNpemUgb2YgYSBDQVQyNFdDMTYgaXMgMjA0OCBieXRlcyAqLwogI2VuZGlmCiAKICNkZWZpbmUgQ0ZHX05WUkFNX0JBU0VfQUREUgkweGYwMjAwMDAwCQkvKiBOVlJBTSBiYXNlIGFkZHJlc3MJKi8KQEAgLTI3OSw3ICsyNzksNyBAQAogICogQ2FjaGUgQ29uZmlndXJhdGlvbgogICovCiAjZGVmaW5lIENGR19EQ0FDSEVfU0laRQkJMTYzODQJLyogRm9yIElCTSA0MDUgQ1BVcywgb2xkZXIgNDA1IHBwYydzICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGF2ZSBvbmx5IDhrQiwgMTZrQiBpcyBzYXZlIGhlcmUgICAgICovCisJCQkJCS8qIGhhdmUgb25seSA4a0IsIDE2a0IgaXMgc2F2ZSBoZXJlICAgICAqLwogI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIJLyogLi4uCQkJKi8KICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQogI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTUJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9DUENJNDA1QUIuaCBiL2luY2x1ZGUvY29uZmlncy9DUENJNDA1QUIuaAppbmRleCBkZTU1ZTg3Li4wMGFkZmQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvQ1BDSTQwNUFCLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0NQQ0k0MDVBQi5oCkBAIC00OCwxMCArNDgsMTAgQEAKIAogI2lmIDAKICNkZWZpbmUgQ09ORklHX1BSRUJPT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiY3JjMzIgZjAyMDcwMDQgZmZjIDA7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJpZiBjbXAgMCBmMDIwNzAwMCAxOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgInRoZW47ZWNobyBPbGQgQ1JDIGlzIGNvcnJlY3Q7Y3JjMzIgZjAyMDcwMDQgZmY0IGYwMjA3MDAwOyIgICAgICAgICAgICAgXAotICAgICAgICAiZWxzZTtlY2hvIE9sZCBDUkMgaXMgYmFkO2ZpIgorCSJjcmMzMiBmMDIwNzAwNCBmZmMgMDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiaWYgY21wIDAgZjAyMDcwMDAgMTsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJInRoZW47ZWNobyBPbGQgQ1JDIGlzIGNvcnJlY3Q7Y3JjMzIgZjAyMDcwMDQgZmY0IGYwMjA3MDAwOyIgICAgICAgICAgICAgXAorCSJlbHNlO2VjaG8gT2xkIENSQyBpcyBiYWQ7ZmkiCiAjZW5kaWYKIAogI3VuZGVmCUNPTkZJR19CT09UQVJHUwpAQCAtMTIzLDggKzEyMyw4IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCi0gICAgICAgICA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KKwl7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCisJIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAgfQogCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkxCQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KQEAgLTE0OCw3ICsxNDgsNyBAQAogI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9BVVRPICAgLyogc2VsZWN0IHBjaSBob3N0IGZ1bmN0aW9uICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCisJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KIAogI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVyAgICAgICAgICAgIC8qIHByaW50IHBjaSBkZXZpY2VzIEAgc3RhcnR1cCAgKi8KIApAQCAtMjM5LDcgKzIzOSw3IEBACiAjZGVmaW5lIENGR19FTlZfSVNfSU5fRUVQUk9NICAgIDEgICAgICAgLyogdXNlIEVFUFJPTSBmb3IgZW52aXJvbm1lbnQgdmFycyAqLwogI2RlZmluZSBDRkdfRU5WX09GRlNFVCAgICAgICAgICAweDAwMCAgIC8qIGVudmlyb25tZW50IHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBFRVBST00gKi8KICNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgICAgMHg0MDAgICAvKiAxMDI0IGJ5dGVzIG1heSBiZSB1c2VkIGZvciBlbnYgdmFycyovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvdGFsIHNpemUgb2YgYSBDQVQyNFdDMDggaXMgMTAyNCBieXRlcyAqLworCQkJCSAgIC8qIHRvdGFsIHNpemUgb2YgYSBDQVQyNFdDMDggaXMgMTAyNCBieXRlcyAqLwogI2VuZGlmCiAKICNkZWZpbmUgQ0ZHX05WUkFNX0JBU0VfQUREUgkweGYwMjAwMDAwCQkvKiBOVlJBTSBiYXNlIGFkZHJlc3MJKi8KQEAgLTI2Nyw3ICsyNjcsNyBAQAogICogQ2FjaGUgQ29uZmlndXJhdGlvbgogICovCiAjZGVmaW5lIENGR19EQ0FDSEVfU0laRQkJMTYzODQJLyogRm9yIElCTSA0MDUgQ1BVcywgb2xkZXIgNDA1IHBwYydzICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGF2ZSBvbmx5IDhrQiwgMTZrQiBpcyBzYXZlIGhlcmUgICAgICovCisJCQkJCS8qIGhhdmUgb25seSA4a0IsIDE2a0IgaXMgc2F2ZSBoZXJlICAgICAqLwogI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIJLyogLi4uCQkJKi8KICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQogI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTUJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9DUENJSVNFUjQuaCBiL2luY2x1ZGUvY29uZmlncy9DUENJSVNFUjQuaAppbmRleCAxNzRiMGU1Li5iY2RhNjk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvQ1BDSUlTRVI0LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0NQQ0lJU0VSNC5oCkBAIC05MCw4ICs5MCw4IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCi0gICAgICAgICA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KKwl7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCisJIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAgfQogCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkxCQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KQEAgLTExMSw3ICsxMTEsNyBAQAogI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9BVVRPICAgLyogc2VsZWN0IHBjaSBob3N0IGZ1bmN0aW9uICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCisJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KIAogI2RlZmluZSBDRkdfUENJX1NVQlNZU19WRU5ET1JJRCAweDEyRkUgIC8qIFBDSSBWZW5kb3IgSUQ6IGVzZCBnbWJoICAgICAgKi8KICNkZWZpbmUgQ0ZHX1BDSV9TVUJTWVNfREVWSUNFSUQgMHgwNDA0ICAvKiBQQ0kgRGV2aWNlIElEOiBDUENJLUlTRVI0ICAgICovCkBAIC0xODEsNyArMTgxLDcgQEAKICNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9FRVBST00gICAgMSAgICAgICAvKiB1c2UgRUVQUk9NIGZvciBlbnZpcm9ubWVudCB2YXJzICovCiAjZGVmaW5lIENGR19FTlZfT0ZGU0VUICAgICAgICAgIDB4MDAwICAgLyogZW52aXJvbm1lbnQgc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIEVFUFJPTSAqLwogI2RlZmluZSBDRkdfRU5WX1NJWkUgICAgICAgICAgICAweDMwMCAgIC8qIDc2OCBieXRlcyBtYXkgYmUgdXNlZCBmb3IgZW52IHZhcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdG90YWwgc2l6ZSBvZiBhIENBVDI0V0MwOCBpcyAxMDI0IGJ5dGVzICovCisJCQkJICAgLyogdG90YWwgc2l6ZSBvZiBhIENBVDI0V0MwOCBpcyAxMDI0IGJ5dGVzICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENhY2hlIENvbmZpZ3VyYXRpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9DUFU4Ni5oIGIvaW5jbHVkZS9jb25maWdzL0NQVTg2LmgKaW5kZXggOTcxMmQ0Ny4uMzkwYjc5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0NQVTg2LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0NQVTg2LmgKQEAgLTM2MSw3ICszNjEsNyBAQAogICogSElEMSBoYXMgb25seSByZWFkLW9ubHkgaW5mb3JtYXRpb24gLSBub3RoaW5nIHRvIHNldC4KICAqLwogI2RlZmluZSBDRkdfSElEMF9JTklUICAgKEhJRDBfSUNFfEhJRDBfRENFfEhJRDBfSUNGSXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgSElEMF9EQ0l8SElEMF9JRkVNfEhJRDBfQUJFKQorCQkJIEhJRDBfRENJfEhJRDBfSUZFTXxISUQwX0FCRSkKICNkZWZpbmUgQ0ZHX0hJRDBfRklOQUwgIChISUQwX0lGRU18SElEMF9BQkUpCiAjZGVmaW5lIENGR19ISUQyICAgICAgICAwCiAKQEAgLTM5NCwxMCArMzk0LDEwIEBACiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKICNkZWZpbmUgQ0ZHX1NZUENSICAgICAgIChTWVBDUl9TV1RDfFNZUENSX0JNVHxTWVBDUl9QQk1FfFNZUENSX0xCTUV8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZUENSX1NXUkl8U1lQQ1JfU1dQfFNZUENSX1NXRSkKKwkJCSBTWVBDUl9TV1JJfFNZUENSX1NXUHxTWVBDUl9TV0UpCiAjZWxzZQogI2RlZmluZSBDRkdfU1lQQ1IgICAgICAgKFNZUENSX1NXVEN8U1lQQ1JfQk1UfFNZUENSX1BCTUV8U1lQQ1JfTEJNRXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfU1dSSXxTWVBDUl9TV1ApCisJCQkgU1lQQ1JfU1dSSXxTWVBDUl9TV1ApCiAjZW5kaWYgLyogQ09ORklHX1dBVENIRE9HICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ5OCw1NSArNDk4LDU1IEBACiAvKiBCYW5rIDAgLSBCb290IFJPTQogICovCiAjZGVmaW5lIENGR19CUjBfUFJFTElNICAoKENGR19CT09UUk9NX0JBU0UgJiBCUnhfQkFfTVNLKXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1BTXzggICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X01TX0dQQ01fUCAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1YpCisJCQkgQlJ4X1BTXzggICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X01TX0dQQ01fUCAgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X1YpCiAKICNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0gIChQMlNaX1RPX0FNKENGR19CT09UUk9NX1NJWkUpICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0NTTlQgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX1NDWV8zX0NMSyAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhVX0VIVFJfOElETEUpCisJCQkgT1J4R19DU05UICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4R19TQ1lfM19DTEsgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4VV9FSFRSXzhJRExFKQogCiAvKiBCYW5rIDEgLSBGTEFTSAogICovCiAjZGVmaW5lIENGR19CUjFfUFJFTElNICAoKENGR19GTEFTSF9CQVNFICYgQlJ4X0JBX01TSykgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1BTXzY0ICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X01TX0dQQ01fUCAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1YpCisJCQkgQlJ4X1BTXzY0ICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X01TX0dQQ01fUCAgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X1YpCiAKICNkZWZpbmUgQ0ZHX09SMV9QUkVMSU0gIChQMlNaX1RPX0FNKENGR19GTEFTSF9TSVpFKSAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0NTTlQgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX1NDWV8zX0NMSyAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhVX0VIVFJfOElETEUpCisJCQkgT1J4R19DU05UICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4R19TQ1lfM19DTEsgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4VV9FSFRSXzhJRExFKQogCiAjZWxzZSAvKiBDT05GSUdfQk9PVF9ST00gKi8KIC8qIEJhbmsgMCAtIEZMQVNICiAgKi8KICNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0gICgoQ0ZHX0ZMQVNIX0JBU0UgJiBCUnhfQkFfTVNLKSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IwX1BSRUxJTSAgKFAyU1pfVE9fQU0oQ0ZHX0ZMQVNIX1NJWkUpICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzNfQ0xLICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFVfRUhUUl84SURMRSkKKwkJCSBPUnhHX0NTTlQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX1NDWV8zX0NMSyAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhVX0VIVFJfOElETEUpCiAKIC8qIEJhbmsgMSAtIEJvb3QgUk9NCiAgKi8KICNkZWZpbmUgQ0ZHX0JSMV9QUkVMSU0gICgoQ0ZHX0JPT1RST01fQkFTRSAmIEJSeF9CQV9NU0spfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfOCAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfOCAgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IxX1BSRUxJTSAgKFAyU1pfVE9fQU0oQ0ZHX0JPT1RST01fU0laRSkgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzNfQ0xLICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFVfRUhUUl84SURMRSkKKwkJCSBPUnhHX0NTTlQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX1NDWV8zX0NMSyAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhVX0VIVFJfOElETEUpCiAKICNlbmRpZiAvKiBDT05GSUdfQk9PVF9ST00gKi8KIApAQCAtNTU1LDkgKzU1NSw5IEBACiAgKi8KICNpZm5kZWYgQ0ZHX1JBTUJPT1QKICNkZWZpbmUgQ0ZHX0JSMl9QUkVMSU0gICgoQ0ZHX1NEUkFNX0JBU0UgJiBCUnhfQkFfTVNLKSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfU0RSQU1fUCAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfU0RSQU1fUCAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IyX1BSRUxJTQkgQ0ZHX09SMl85Q09MCiAKQEAgLTU2Nyw4OCArNTY3LDg4IEBACiAvKiBCYW5rIDMgLSBEdWFsIFBvcnRlZCBTUkFNCiAgKi8KICNkZWZpbmUgQ0ZHX0JSM19QUkVMSU0gICgoQ0ZHX0RQU1JBTV9CQVNFICYgQlJ4X0JBX01TSykgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfMTYgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfMTYgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IzX1BSRUxJTSAgKFAyU1pfVE9fQU0oQ0ZHX0RQU1JBTV9TSVpFKSAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzVfQ0xLICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0VUQSkKKwkJCSBPUnhHX0NTTlQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX1NDWV81X0NMSyAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX1NFVEEpCiAKIC8qIEJhbmsgNCAtIERpc2tPbkNoaXAKICAqLwogI2RlZmluZSBDRkdfQlI0X1BSRUxJTSAgKChDRkdfRE9DX0JBU0UgJiBCUnhfQkFfTVNLKSAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9QU184ICAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9WKQorCQkJIEJSeF9QU184ICAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9WKQogCiAjZGVmaW5lIENGR19PUjRfUFJFTElNICAoUDJTWl9UT19BTShDRkdfRE9DX1NJWkUpICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19BQ1NfRElWMiAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TQ1lfNV9DTEsgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4VV9FSFRSXzhJRExFKQorCQkJIE9SeEdfQUNTX0RJVjIgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfU0NZXzVfQ0xLICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeFVfRUhUUl84SURMRSkKIAogLyogQmFuayA1IC0gRkRDMzdDNzggY29udHJvbGxlcgogICovCiAjZGVmaW5lIENGR19CUjVfUFJFTElNICAoKENGR19GREMzN0M3OF9CQVNFICYgQlJ4X0JBX01TSykgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfOCAgICAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1YpCisJCQkgQlJ4X1BTXzggICAgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9WKQogCiAjZGVmaW5lIENGR19PUjVfUFJFTElNICAoUDJTWl9UT19BTShDRkdfRkRDMzdDNzhfU0laRSkgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0FDU19ESVYyICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzhfQ0xLICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4VV9FSFRSXzhJRExFKQorCQkJIE9SeEdfQUNTX0RJVjIgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4R19TQ1lfOF9DTEsgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhVX0VIVFJfOElETEUpCiAKIC8qIEJhbmsgNiAtIEJvYXJkIGNvbnRyb2wgcmVnaXN0ZXJzCiAgKi8KICNkZWZpbmUgQ0ZHX0JSNl9QUkVMSU0gICgoQ0ZHX0JDUlNfQkFTRSAmIEJSeF9CQV9NU0spICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfOCAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfOCAgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1I2X1BSRUxJTSAgKFAyU1pfVE9fQU0oQ0ZHX0JDUlNfU0laRSkgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzVfQ0xLKQorCQkJIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfU0NZXzVfQ0xLKQogCiAvKiBCYW5rIDcgLSBWTUUgRXh0ZW5kZWQgQWNjZXNzIFJhbmdlCiAgKi8KICNkZWZpbmUgQ0ZHX0JSN19QUkVMSU0gICgoQ0ZHX1ZNRUVBUl9CQVNFICYgQlJ4X0JBX01TSykgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfMzIgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfMzIgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1I3X1BSRUxJTSAgKFAyU1pfVE9fQU0oQ0ZHX1ZNRUVBUl9TSVpFKSAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzVfQ0xLICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0VUQSkKKwkJCSBPUnhHX0NTTlQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX1NDWV81X0NMSyAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX1NFVEEpCiAKIC8qIEJhbmsgOCAtIFZNRSBTdGFuZGFyZCBBY2Nlc3MgUmFuZ2UKICAqLwogI2RlZmluZSBDRkdfQlI4X1BSRUxJTSAgKChDRkdfVk1FU0FSX0JBU0UgJiBCUnhfQkFfTVNLKSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9QU18xNiAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9WKQorCQkJIEJSeF9QU18xNiAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9WKQogCiAjZGVmaW5lIENGR19PUjhfUFJFTElNICAoUDJTWl9UT19BTShDRkdfVk1FU0FSX1NJWkUpICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19DU05UICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TQ1lfNV9DTEsgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TRVRBKQorCQkJIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfU0NZXzVfQ0xLICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfU0VUQSkKIAogLyogQmFuayA5IC0gVk1FIFNob3J0IEkvTyBBY2Nlc3MgUmFuZ2UKICAqLwogI2RlZmluZSBDRkdfQlI5X1BSRUxJTSAgKChDRkdfVk1FU0lPQVJfQkFTRSAmIEJSeF9CQV9NU0spIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1BTXzE2ICAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9WKQorCQkJIEJSeF9QU18xNiAgICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X01TX0dQQ01fUCAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1I5X1BSRUxJTSAgKFAyU1pfVE9fQU0oQ0ZHX1ZNRVNJT0FSX1NJWkUpICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19DU05UICAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzVfQ0xLICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TRVRBKQorCQkJIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX1NDWV81X0NMSyAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfU0VUQSkKIAogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9DUkFZTDEuaCBiL2luY2x1ZGUvY29uZmlncy9DUkFZTDEuaAppbmRleCAxYmQ2ODk5Li5mZDg1OTQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvQ1JBWUwxLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0NSQVlMMS5oCkBAIC00Niw3ICs0Niw3IEBACiAKIC8qIHNldCBQUkFNIHRvIGtlZXAgVS1Cb290IG91dCwgbWVtPSB0byBrZWVwIGxpbnV4IG91dCwgYW5kIGluaXRyZF9oaSB0bwogICoga2VlcCBwb3NzaWJsZSBpbml0cmQgcmFtZGlzayBkZWNvbXByZXNzaW9uIG91dC4gIFRoaXMgaXMgaW4gayAoMTAyNCBieXRlcykKLSAjZGVmaW5lIENPTkZJR19QUkFNCQkJMTYgCisgI2RlZmluZSBDT05GSUdfUFJBTQkJCTE2CiAgKi8KICNkZWZpbmUJQ09ORklHX0xPQURBRERSCQkweDEwMDAwMAkvKiB3aGVyZSBURlRQIGltYWdlcyBnbyAqLwogI3VuZGVmIENPTkZJR19CT09UQVJHUwpAQCAtNTYsMTAgKzU2LDEwIEBACiAjZGVmaW5lCUNGR19BVVRPTE9BRAkJIm5vIgogI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImRoY3AiCiAKLS8qIAorLyoKICAqIC4uZHVyaW5nIGV4cGVyaW1lbnRzLi4KICAjZGVmaW5lIENPTkZJR19TRVJWRVJJUCAgICAgICAgIDEwLjAuMC4xCi0gI2RlZmluZSBDT05GSUdfRVRIQUREUiAgICAgICAgICAwMDo0MDphNjo4MDoxNDo1IAorICNkZWZpbmUgQ09ORklHX0VUSEFERFIgICAgICAgICAgMDA6NDA6YTY6ODA6MTQ6NQogICovCiAjZGVmaW5lIENPTkZJR19IQVJEX0kyQyAgICAgICAgIDEJCS8qIGhhcmR3YXJlIHN1cHBvcnQgZm9yIGkyYyAqLwogI2RlZmluZSBDT05GSUdfU0RSQU1fQkFOSzAJCTEKQEAgLTEwOCwxMyArMTA4LDEzIEBACiAJQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRXxcCiAJQ09ORklHX0JPT1RQX0JPT1RQQVRIKQogCi0vKiAKKy8qCiAgKiBob3cgbWFueSB0aW1lIHRvIGZhaWwgJiByZXN0YXJ0IGEgbmV0LVRGVFAgYmVmb3JlIGdpdmluZyB1cCAmIHJlc2V0dGluZwogICogdGhlIGJvYXJkIGhvcGluZyB0aGF0IGEgcmVzZXQgb2YgbmV0IGludGVyZmFjZSBtaWdodCBoZWxwLi4KICAqLwogI2RlZmluZSBDT05GSUdfTkVUX1JFU0VUIDUKIAotLyogCisvKgogICogYmF1ZHMuICBKdXN0IHRvIG1ha2UgaXQgY29tcGlsZTsgaW4gb3VyIGNhc2UsIEkgcmVhZCB0aGUgYmFzZV9iYXVkCiAgKiBmcm9tIHRoZSBEQ1IgYW55d2F5LCBzbyBpdHMga2luZGEtdGllZCB0byB0aGUgYWJvdmUgcmVmLiBjbG9jayB3aGljaCBpbiB0dXJuCiAgKiBkcml2ZXMgdGhlIHN5c3RlbSBjbG9jay4KQEAgLTE2OCw3ICsxNjgsNyBAQAogI2RlZmluZSBDRkdfRkxBU0hfV1JJVEVfVE9VVCA1MDAJLyogVGltZW91dCBmb3IgRmxhc2ggV3JpdGUgKGluIG1zKQkqLwogCiAvKiBCRUcgRU5WSVJPTk5FTUVOVCBGTEFTSDogbmVlZHMgdG8gYmUgYSB3aG9sZSBGbGFzaFNlY3RvciAgKi8KLSNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQJCTB4M2M4MDAwIAorI2RlZmluZSBDRkdfRU5WX09GRlNFVAkJMHgzYzgwMDAKICNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCS8qIHVzZSBGTEFTSCBmb3IgZW52aXJvbm1lbnQgdmFycyAqLwogI2RlZmluZQlDRkdfRU5WX1NJWkUJCTB4MTAwMAkgLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBhcmVhCSovCiAjZGVmaW5lIENGR19FTlZfU0VDVF9TSVpFCTB4MTAwMDAJIC8qIHNlZSBSRUFETUUgLSBlbnYgc2VjdG9yIHRvdGFsIHNpemUJKi8KQEAgLTE4NCwxNSArMTg0LDE1IEBACiAjZGVmaW5lIENGR19TVEFDS19VU0FHRQkJMHgxMDAwMCAvKiBSZXNlcnZlIDY0ayBmb3IgdGhlIHN0YWNrIHVzYWdlICovCiAjZGVmaW5lIENGR19NQUxMT0NfTEVOCQkoMTI4IDw8IDEwKQkvKiAxMjhrIGZvciBtYWxsb2Mgc3BhY2UgKi8KICNkZWZpbmUgQ0ZHX01FTV9FTkRfVVNBR0UJKCBDRkdfTU9OSVRPUl9MRU4gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIENGR19NQUxMT0NfTEVOIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBDRkdfRU5WX1NFQ1RfU0laRSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgQ0ZHX1NUQUNLX1VTQUdFICkKKwkJCQkrIENGR19NQUxMT0NfTEVOIFwKKwkJCQkrIENGR19FTlZfU0VDVF9TSVpFIFwKKwkJCQkrIENGR19TVEFDS19VU0FHRSApCiAKICNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkoQ0ZHX1NEUkFNX1NJWkUgKiAxMDI0ICogMTAyNCAtIENGR19NRU1fRU5EX1VTQUdFKQogLyogRU5EIEVOVklST05ORU1FTlQgRkxBU0ggKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2FjaGUgQ29uZmlndXJhdGlvbi4gIE9ubHkgdXNlZCB0byAuLj8/IGNsZWFyIGl0LCBJIGd1ZXNzLi4gCisgKiBDYWNoZSBDb25maWd1cmF0aW9uLiAgT25seSB1c2VkIHRvIC4uPz8gY2xlYXIgaXQsIEkgZ3Vlc3MuLgogICovCiAjZGVmaW5lIENGR19EQ0FDSEVfU0laRQkJMTYzODQKICNkZWZpbmUgQ0ZHX0NBQ0hFTElORV9TSVpFCTMyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvREFTQV9TSU0uaCBiL2luY2x1ZGUvY29uZmlncy9EQVNBX1NJTS5oCmluZGV4IDIyOWU0NTguLjMwZTk3OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9EQVNBX1NJTS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9EQVNBX1NJTS5oCkBAIC05OCw3ICs5OCw3IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCXsgMzAwLCA2MDAsIDEyMDAsIDI0MDAsIDQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCB9CiAKICNkZWZpbmUgQ0ZHX0xPQURfQUREUgkweDEwMDAwMAkvKiBkZWZhdWx0IGxvYWQgYWRkcmVzcwkqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvRFU0MDUuaCBiL2luY2x1ZGUvY29uZmlncy9EVTQwNS5oCmluZGV4IGJhYzYyMjEuLjNlNWZjM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9EVTQwNS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9EVTQwNS5oCkBAIC05Nyw4ICs5Nyw4IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCi0gICAgICAgICA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KKwl7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCisJIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAgfQogCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkxCQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KQEAgLTExOCw3ICsxMTgsNyBAQAogI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9BVVRPICAgLyogc2VsZWN0IHBjaSBob3N0IGZ1bmN0aW9uICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCisJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KIAogI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVyAgICAgICAgICAgIC8qIHByaW50IHBjaSBkZXZpY2VzIEAgc3RhcnR1cCAgKi8KIApAQCAtMjEwLDcgKzIxMCw3IEBACiAjZGVmaW5lIENGR19FTlZfSVNfSU5fRUVQUk9NICAgIDEgICAgICAgLyogdXNlIEVFUFJPTSBmb3IgZW52aXJvbm1lbnQgdmFycyAqLwogI2RlZmluZSBDRkdfRU5WX09GRlNFVCAgICAgICAgICAweDAwMCAgIC8qIGVudmlyb25tZW50IHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBFRVBST00gKi8KICNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgICAgMHg0MDAgICAvKiAxMDI0IGJ5dGVzIG1heSBiZSB1c2VkIGZvciBlbnYgdmFycyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0b3RhbCBzaXplIG9mIGEgQ0FUMjRXQzA4IGlzIDEwMjQgYnl0ZXMgKi8KKwkJCQkgICAvKiB0b3RhbCBzaXplIG9mIGEgQ0FUMjRXQzA4IGlzIDEwMjQgYnl0ZXMgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ2FjaGUgQ29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0VMUFBDLmggYi9pbmNsdWRlL2NvbmZpZ3MvRUxQUEMuaAppbmRleCA1NGNkZDIzLi43MTc2OTA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvRUxQUEMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvRUxQUEMuaApAQCAtMzE5LDcgKzMxOSw3IEBACiAjZGVmaW5lIEwyX0lOSVQgICAgIDAgICAgICAgLyogY3B1IDc1MCBDWGUqLwogI2Vsc2UKICNkZWZpbmUgTDJfSU5JVCAgICAgKEwyQ1JfTDJTSVpfMk0gfCBMMkNSX0wyQ0xLXzMgfCBMMkNSX0wyUkFNX0JVUlNUIHwgXAotICAgICAgICAgICAgICAgICAgICAgTDJDUl9MMk9IXzUgICB8IEwyQ1JfTDJDVEwgfCBMMkNSX0wyV1QpCisJCSAgICAgTDJDUl9MMk9IXzUgICB8IEwyQ1JfTDJDVEwgfCBMMkNSX0wyV1QpCiAjZW5kaWYKICNkZWZpbmUgTDJfRU5BQkxFICAgKEwyX0lOSVQgfCBMMkNSX0wyRSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0VMUFQ4NjAuaCBiL2luY2x1ZGUvY29uZmlncy9FTFBUODYwLmgKaW5kZXggZTk1NjFiOS4uMmYyNTNiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0VMUFQ4NjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvRUxQVDg2MC5oCkBAIC02NCwyMCArNjQsMjAgQEAKICAgICAgImVjaG8gVHlwZSBcInJ1biBuZnNib290XCIgdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTOyIgICAgICAgIFwKICAgICAgImVjaG8iCiAKLSN1bmRlZgkgIENPTkZJR19CT09UQVJHUwkKKyN1bmRlZgkgIENPTkZJR19CT09UQVJHUwogCiAjZGVmaW5lCUNPTkZJR19FWFRSQV9FTlZfU0VUVElOR1MJCQkJCVwKICAgICAicmFtYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIgkJCVwKICAgICAicm9vdGFyZ3M9c2V0ZW52IHJvb3RwYXRoIC90ZnRwLyQoaXBhZGRyKVwwIgkJCVwKICAgICAibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQkJCVwKLSAgICAgICAgIm5mc3Jvb3Q9JChzZXJ2ZXJpcCk6JChyb290cGF0aClcMCIJCQkJXAorCSJuZnNyb290PSQoc2VydmVyaXApOiQocm9vdHBhdGgpXDAiCQkJCVwKICAgICAiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICQoYm9vdGFyZ3MpICIJCQkJXAotICAgICAgICAiaXA9JChpcGFkZHIpOiQoc2VydmVyaXApOiQoZ2F0ZXdheWlwKTokKG5ldG1hc2spIgkJXAotICAgICAgICAiOiQoaG9zdG5hbWUpOmV0aDA6b2ZmIHBhbmljPTFcMCIJCQkJXAorCSJpcD0kKGlwYWRkcik6JChzZXJ2ZXJpcCk6JChnYXRld2F5aXApOiQobmV0bWFzaykiCQlcCisJIjokKGhvc3RuYW1lKTpldGgwOm9mZiBwYW5pYz0xXDAiCQkJCVwKICAgICAicmFtYm9vdD10ZnRwIDQwMDAwMCAvaG9tZS9wYXVnYW1sL3BNdWx0aTsiCQkJCVwKLSAgICAgICAgInJ1biByYW1hcmdzO2Jvb3RtXDAiCQkJCQkJXAorCSJydW4gcmFtYXJncztib290bVwwIgkJCQkJCVwKICAgICAibmZzYm9vdD10ZnRwIDQwMDAwMCAvaG9tZS9wYXVnYW1sL3VJbWFnZTsiCQkJCVwKLSAgICAgICAgInJ1biByb290YXJncztydW4gbmZzYXJncztydW4gYWRkaXA7Ym9vdG1cMCIJCQlcCisJInJ1biByb290YXJncztydW4gbmZzYXJncztydW4gYWRkaXA7Ym9vdG1cMCIJCQlcCiAgICAgIiIKICNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJydW4gcmFtYm9vdCIKIApAQCAtOTIsOCArOTIsOCBAQAogI3VuZGVmCSAgQ0ZHX0xPQURTX0JBVURfQ0hBTkdFCQkvKiBkb24ndCBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UJKi8KIAogI2RlZmluZSBDT05GSUdfQ09NTUFORFMJICAgICAgICAoIENPTkZJR19DTURfREZMIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTURfQVNLRU5WIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTURfREFURSAgICkKKwkJCQkgIENGR19DTURfQVNLRU5WIHwgXAorCQkJCSAgQ0ZHX0NNRF9EQVRFICAgKQogCiAvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCiAjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CkBAIC0yMTIsNyArMjEyLDcgQEAKICAqLwogI2RlZmluZSBDRkdfTlZSQU1fQkFTRV9BRERSICAgICBDRkdfTlZSQU1fQkFTRSAvKiBCYXNlIGFkZHJlc3Mgb2YgTlZSQU0gYXJlYSAqLwogI2RlZmluZSBDRkdfTlZSQU1fU0laRSAgICAgICAgICAoKDEyOCoxMDI0KS04KSAvKiBjbG9jayByZWdzIHJlc2lkZW50IGluIHRoZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIDggdG9wIE5WUkFNIGxvY2F0aW9ucyAgICAqLworCQkJCQkgICAgICAgLyogICA4IHRvcCBOVlJBTSBsb2NhdGlvbnMgICAgKi8KIAogI2lmIGRlZmluZWQoQ0ZHX0VOVl9JU19JTl9OVlJBTSkKICMgIGRlZmluZSBDRkdfRU5WX0FERFIgICAgICAgICAgQ0ZHX05WUkFNX0JBU0UgLyogQmFzZSBhZGRyZXNzIG9mIE5WUkFNIGFyZWEgKi8KQEAgLTIzNiwxMCArMjM2LDEwIEBACiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKICMgIGRlZmluZSBDRkdfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZUENSX1NXRSAgfCBTWVBDUl9TV1JJIHwgU1lQQ1JfU1dQKQorCQkJIFNZUENSX1NXRSAgfCBTWVBDUl9TV1JJIHwgU1lQQ1JfU1dQKQogI2Vsc2UKICMgIGRlZmluZSBDRkdfU1lQQ1IJKFNZUENSX1NXVEMgfCBTWVBDUl9CTVQgIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfU1dQKQorCQkJCQkJICAgU1lQQ1JfU1dQKQogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9FUklDLmggYi9pbmNsdWRlL2NvbmZpZ3MvRVJJQy5oCmluZGV4IDlmNmJhZjcuLjUzOTcxNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9FUklDLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0VSSUMuaApAQCAtMTU2LDcgKzE1Niw3IEBACiAjZGVmaW5lIENPTkZJR19QQ0kJCQkvKiBpbmNsdWRlIHBjaSBzdXBwb3J0CSAgICAgICAgKi8KICNkZWZpbmUgQ09ORklHX1BDSV9IT1NUCVBDSV9IT1NUX0ZPUkNFICAvKiBzZWxlY3QgcGNpIGhvc3QgZnVuY3Rpb24gICAgICovCiAjdW5kZWYgIENPTkZJR19QQ0lfUE5QCQkJLyogbm8gcGNpIHBsdWctYW5kLXBsYXkgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KKwkJCQkJLyogcmVzb3VyY2UgY29uZmlndXJhdGlvbiAgICAgICAqLwogCiAjZGVmaW5lIENGR19QQ0lfU1VCU1lTX1ZFTkRPUklEIDB4MTc0MwkvKiBQQ0kgVmVuZG9yIElEOiBQZXBwZXJjb24gQUcJKi8KICNkZWZpbmUgQ0ZHX1BDSV9TVUJTWVNfREVWSUNFSUQgMHgwNDA1CS8qIFBDSSBEZXZpY2UgSUQ6IDQwNUdQCQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0VTVEVFTTE5MkUuaCBiL2luY2x1ZGUvY29uZmlncy9FU1RFRU0xOTJFLmgKaW5kZXggN2E4ZmJhNi4uYjE3NmM2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0VTVEVFTTE5MkUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvRVNURUVNMTkyRS5oCkBAIC0xMTMsNyArMTEzLDYgQEAKICNkZWZpbmUJQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19HQkxfREFUQV9PRkZTRVQKIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFN0YXJ0IGFkZHJlc3NlcyBmb3IgdGhlIGZpbmFsIG1lbW9yeSBjb25maWd1cmF0aW9uCiAgKiAoU2V0IHVwIGJ5IHRoZSBzdGFydHVwIGNvZGUpCkBAIC0zMDEsNyArMzAwLDYgQEAKICNkZWZpbmUgQ0ZHX01BTVJfOUNPTAkweDE4ODAzMTEyCS8qIHNhbWUgYXMgOCBjb2x1bW4gYmVjYXVzZSBpdHMganVzdCBlYXNpZXIgdG8gcG9ydCB3aXRoKi8KIAogCi0KIC8qCiAgKiBJbnRlcm5hbCBEZWZpbml0aW9ucwogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9FVFgwOTQuaCBiL2luY2x1ZGUvY29uZmlncy9FVFgwOTQuaAppbmRleCBiNmUxOTQxLi4xMzdiMWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvRVRYMDk0LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0VUWDA5NC5oCkBAIC0yODIsNyArMjgyLDcgQEAKIAogLyogRkxBU0ggdGltaW5nOiBBQ1MgPSAxMSwgVFJMWCA9IDEsIENTTlQgPSAwLCBTQ1kgPSAyLCBFSFRSID0gMAkqLwogI2RlZmluZSBDRkdfT1JfVElNSU5HX0ZMQVNIICAgIChPUl9BQ1NfRElWMiB8IE9SX0JJIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SX1NDWV8yX0NMSyB8IE9SX1RSTFggKQorCQkJICAgICAgIE9SX1NDWV8yX0NMSyB8IE9SX1RSTFggKQogCiAjZGVmaW5lIENGR19PUjBfUkVNQVAJKENGR19SRU1BUF9PUl9BTSAgfCBDRkdfT1JfVElNSU5HX0ZMQVNIKQogI2RlZmluZSBDRkdfT1IwX1BSRUxJTQkoQ0ZHX1BSRUxJTV9PUl9BTSB8IENGR19PUl9USU1JTkdfRkxBU0gpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvRVZCNjQyNjAuaCBiL2luY2x1ZGUvY29uZmlncy9FVkI2NDI2MC5oCmluZGV4IGFjZDg1MzguLmFmNTEyMmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9FVkI2NDI2MC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9FVkI2NDI2MC5oCkBAIC0xOTgsMTEgKzE5OCwxMSBAQAogI2RlZmluZSBDRkdfREVWMl9QQVIJCTB4YzAwNTliZDQKICNkZWZpbmUgQ0ZHXzhCSVRfQk9PVF9QQVIJMHhjMDBiNWU3YwogI2RlZmluZSBDRkdfMzJCSVRfQk9PVF9QQVIJMHhjNGE4MjQxYwotICAgICAgICAvKiAgIGMgICAgNCAgICBhICAgICAgOCAgICAgMiAgICAgNCAgICAxICAgICAgYwkJKi8KLSAgICAgICAgLyogMzMgMjJ8MjIyMnwyMiAyMnwxMTEgMXwxMSAxMXwxIDEgIHwgICAgfAkJKi8KLSAgICAgICAgLyogMTAgOTh8NzY1NHwzMiAxMHw5ODcgNnw1NCAzMnwxIDA5OHw3IDY1NHwzIDIxMAkqLwotICAgICAgICAvKiAxMXwwMHwwMTAwfDEwIDEwfDEwMHwwIDAwfDEwIDB8MTAwIDB8MDAxIDF8MTAwCSovCi0gICAgICAgIC8qICAzfCAwfC4uLi4gLi58IDJ8IDQgfCAgMCB8ICA0IHwgIDggIHwgIDMgIHwgNAkqLworCS8qICAgYyAgICA0ICAgIGEgICAgICA4ICAgICAyICAgICA0ICAgIDEgICAgICBjCQkqLworCS8qIDMzIDIyfDIyMjJ8MjIgMjJ8MTExIDF8MTEgMTF8MSAxICB8ICAgIHwJCSovCisJLyogMTAgOTh8NzY1NHwzMiAxMHw5ODcgNnw1NCAzMnwxIDA5OHw3IDY1NHwzIDIxMAkqLworCS8qIDExfDAwfDAxMDB8MTAgMTB8MTAwfDAgMDB8MTAgMHwxMDAgMHwwMDEgMXwxMDAJKi8KKwkvKiAgM3wgMHwuLi4uIC4ufCAyfCA0IHwgIDAgfCAgNCB8ICA4ICB8ICAzICB8IDQJKi8KIAogI2lmIDAgLyogV3Jvbmc/PyBOVEwgKi8KICNkZWZpbmUgQ0ZHX01QUF9DT05UUk9MXzAJMHg1MzU0MTcxNwkvKiBJbml0QWN0IEVPVFs0XSBEQnVyc3QgVENFblsxXSAqLwpAQCAtMjI5LDExICsyMjksMTEgQEAKIAkJCQkJCS8qIEdQUFsyNzoyNl0gSW50WzE6MF0gKi8KICNlbHNlCiAjIGRlZmluZSBDRkdfTVBQX0NPTlRST0xfMwkweDIyMDkwMDY2ICAgICAgLyogTVJFUSBNR05UICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHUFBbMjldICAgIChQQ0kxSW50KSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQkNsa091dDAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdQUFsyN10gICAgKFBDSTBJbnQpICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBHUFBbMjZdICAgIChSdGNJbnQgb3IgUENJMUludCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENQVUludFsyNToyNF0gKi8KKwkJCQkJCS8qIEdQUFsyOV0gICAgKFBDSTFJbnQpICovCisJCQkJCQkvKiBCQ2xrT3V0MCAqLworCQkJCQkJLyogR1BQWzI3XSAgICAoUENJMEludCkgKi8KKwkJCQkJCS8qIEdQUFsyNl0gICAgKFJ0Y0ludCBvciBQQ0kxSW50KSAqLworCQkJCQkJLyogQ1BVSW50WzI1OjI0XSAqLwogI2VuZGlmCiAKICMgZGVmaW5lIENGR19TRVJJQUxfUE9SVF9NVVgJMHgwMDAwMDEwMgkvKiAwPWhpWiAgMT1NUFNDMCAyPUVUSCAwIGFuZCAyIFJNSUkgKi8KQEAgLTI0Miw5ICsyNDIsOSBAQAogIyBkZWZpbmUgQ0ZHX0dQUF9MRVZFTF9DT05UUk9MCTB4MDAwMDAyYzYKICNlbHNlCiAjIGRlZmluZSBDRkdfR1BQX0xFVkVMX0NPTlRST0wJMHgyYzYwMDAwMAkvKiAwMDEwIDExMDAgMDExMCAwMDAwICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBncHBbMjldICovCisJCQkJCQkvKiBncHBbMjldICovCiAJCQkJCQkvKiBncHBbMjc6MjZdICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBncHBbMjI6MjFdICovCisJCQkJCQkvKiBncHBbMjI6MjFdICovCiAKICMgZGVmaW5lIENGR19TRFJBTV9DT05GSUcJMHhkOGUxODIwMAkvKiAweDQ0OCAqLwogCQkJCS8qIGlkbWFzIHVzZSBidWZmZXIgMSwxCkBAIC0yOTUsNyArMjk1LDYgQEAKICNkZWZpbmUgQ0ZHX1BDSTFfMF9NRU1fU1BBQ0UJKENGR19QQ0kxX01FTV9CQVNFKQogCiAKLQogLyogUENJIEkvTyBNQVAgc2VjdGlvbiAqLwogI2RlZmluZSBDRkdfUENJMF9JT19CQVNFCTB4ZmEwMDAwMDAKICNkZWZpbmUgQ0ZHX1BDSTBfSU9fU0laRQlfMTZNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvR0VOODYwVC5oIGIvaW5jbHVkZS9jb25maWdzL0dFTjg2MFQuaAppbmRleCA0N2E4Nzg2Li4wNzAyYzJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvR0VOODYwVC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9HRU44NjBULmgKQEAgLTUwLDcgKzUwLDcgQEAKICAqIGdlbmVyYXRlZCBieSB0aGUgRFMxMzM3IC0gYW5kIHRoZSBEUzEzMzcgY2xvY2sgY2FuIGJlIHR1cm5lZCBvZmYuCiAgKi8KICNpZiAhZGVmaW5lZChDT05GSUdfU0MpCi0jZGVmaW5lCUNPTkZJR184eHhfR0NMS19GUkVRCQkJNjY2MDAwMDAgCisjZGVmaW5lCUNPTkZJR184eHhfR0NMS19GUkVRCQkJNjY2MDAwMDAKICNlbHNlCiAjZGVmaW5lCUNPTkZJR184eHhfR0NMS19GUkVRCQkJNDgwMDAwMDAKICNlbmRpZgpAQCAtMjA0LDcgKzIwNCw3IEBACiAgKiBsZW5ndGggb2YgdGltZSwgc28gd2UgdXNlIGFuIGV4dGVybmFsIFJUQyBvbiB0aGUgSTJDIGJ1cyBpbnN0ZWFkLgogICovCiAjZGVmaW5lIENPTkZJR19SVENfRFMxMzM3Ci0jZGVmaW5lIENGR19JMkNfUlRDX0FERFIJCQkJMHg2OCAKKyNkZWZpbmUgQ0ZHX0kyQ19SVENfQUREUgkJCQkweDY4CiAKICNlbHNlCiAvKgpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJCQkJCQkJCUNGR19DTURfUE9TVF9ESUFHICkKIAogI2lmICFkZWZpbmVkKENPTkZJR19TQykKLSNkZWZpbmUJQ09ORklHX0NPTU1BTkRTICggQkFTRV9DT05GSUdfQ09NTUFORFMgfCBDRkdfQ01EX0RPQyApIAorI2RlZmluZQlDT05GSUdfQ09NTUFORFMgKCBCQVNFX0NPTkZJR19DT01NQU5EUyB8IENGR19DTURfRE9DICkKICNlbHNlCiAjZGVmaW5lIENPTkZJR19DT01NQU5EUwlCQVNFX0NPTkZJR19DT01NQU5EUwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvSVA4NjAuaCBiL2luY2x1ZGUvY29uZmlncy9JUDg2MC5oCmluZGV4IGZkZGYwY2EuLjY0OTA5NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9JUDg2MC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9JUDg2MC5oCkBAIC0yMjcsNyArMjI3LDcgQEAKIAkJCSBTSVVNQ1JfREJHQzExIHwgU0lVTUNSX01MUkMxMCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogQ2xvY2sgU2V0dGluZyAtIGdldCBjbG9jayBmcmVxdWVuY3kgZnJvbSBCb2FyZCBSZXZpc2lvbiBSZWdpc3RlciAKKyAqIENsb2NrIFNldHRpbmcgLSBnZXQgY2xvY2sgZnJlcXVlbmN5IGZyb20gQm9hcmQgUmV2aXNpb24gUmVnaXN0ZXIKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9LVVA0Sy5oIGIvaW5jbHVkZS9jb25maWdzL0tVUDRLLmgKaW5kZXggYjkyNGI5Yy4uOTYyYTQ2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0tVUDRLLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL0tVUDRLLmgKQEAgLTQzMiw3ICs0MzIsNiBAQAogI2RlZmluZSBCT09URkxBR19XQVJNCTB4MDIJCS8qIFNvZnR3YXJlIHJlYm9vdAkJCSovCiAKIAotCiAjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9LRVlFRAkJLyogdXNlIGtleSBzdHJpbmdzIHRvIHN0b3AgYXV0b2Jvb3QgKi8KICNpZiAwCiAjZGVmaW5lIENPTkZJR19BVVRPQk9PVF9QUk9NUFQJCSJCb290ZSBpbiAlZCBTZWt1bmRlbiAtIHN0b3AgbWl0IFwiMlwiXG4iCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTEFOVEVDLmggYi9pbmNsdWRlL2NvbmZpZ3MvTEFOVEVDLmgKaW5kZXggNTZlY2YwYy4uNGMwMWNkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL0xBTlRFQy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9MQU5URUMuaApAQCAtMjk3LDcgKzI5Nyw3IEBACiAKIC8qIEZMQVNIIHRpbWluZyAqLwogI2RlZmluZSBDRkdfT1JfVElNSU5HX0ZMQVNIICAgICAoT1JfQ1NOVF9TQU0gIHwgT1JfQkkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9TQ1lfNV9DTEsgfCBPUl9UUkxYKQorCQkJCSBPUl9TQ1lfNV9DTEsgfCBPUl9UUkxYKQogCiAjZGVmaW5lIENGR19PUjBfUkVNQVAJKENGR19SRU1BUF9PUl9BTSAgfCBDRkdfT1JfVElNSU5HX0ZMQVNIKQogI2RlZmluZSBDRkdfT1IwX1BSRUxJTQkoQ0ZHX1BSRUxJTV9PUl9BTSB8IENGR19PUl9USU1JTkdfRkxBU0gpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTUJYLmggYi9pbmNsdWRlL2NvbmZpZ3MvTUJYLmgKaW5kZXggZTYyZDM2Yy4uZDZlM2ZiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01CWC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NQlguaApAQCAtNzIsNyArNzIsNyBAQAogI3VuZGVmCUNPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLwogCiAjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKCBDRkdfQ01EX05FVCB8IENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9TRFJBTSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTURfUENNQ0lBIHwgQ0ZHX0NNRF9JREUgKQorCQkJICAgICAgQ0ZHX0NNRF9QQ01DSUEgfCBDRkdfQ01EX0lERSApCiAKICNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01IUEMuaCBiL2luY2x1ZGUvY29uZmlncy9NSFBDLmgKaW5kZXggNzhjYWFmZC4uZTM2MzQxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01IUEMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTUhQQy5oCkBAIC0xMTYsMTIgKzExNiwxMiBAQAogI2RlZmluZSBDT05GSUdfQlIwX1dPUktBUk9VTkQgICAxCiAKICNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCSAgICAgKCBDT05GSUdfQ01EX0RGTCAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0NNRF9EQVRFICAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTURfRUVQUk9NICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfQ01EX0VMRiAgICAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0NNRF9JMkMgICAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTURfSkZGUzIgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfQ01EX1JFR0lORk8gKQorCQkJICAgICAgIENGR19DTURfREFURSAgICB8IFwKKwkJCSAgICAgICBDRkdfQ01EX0VFUFJPTSAgfCBcCisJCQkgICAgICAgQ0ZHX0NNRF9FTEYgICAgIHwgXAorCQkJICAgICAgIENGR19DTURfSTJDICAgICB8IFwKKwkJCSAgICAgICBDRkdfQ01EX0pGRlMyICAgfCBcCisJCQkgICAgICAgQ0ZHX0NNRF9SRUdJTkZPICkKIAogI2RlZmluZSBDT05GSUdfQk9PVFBfTUFTSwkoQ09ORklHX0JPT1RQX0RFRkFVTFQgfCBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFKQogCkBAIC0yMjUsNyArMjI1LDcgQEAKIAkJCSBTWVBDUl9TV0UgIHwgU1lQQ1JfU1dSSXwgU1lQQ1JfU1dQKQogI2Vsc2UKICNkZWZpbmUgQ0ZHX1NZUENSCShTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZUENSX1NXUCkKKwkJCSBTWVBDUl9TV1ApCiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjY1LDcgKzI2NSw3IEBACiAjZGVmaW5lIE1QQzhYWF9YSU4gICAJNTAwMDAwMEwgICAgICAvKiByZWYgY2xrICovCiAjZGVmaW5lIE1QQzhYWF9GQUNUCShNUEM4WFhfU1BFRUQvTVBDOFhYX1hJTikKICNkZWZpbmUgQ0ZHX1BMUFJDUgkoKChNUEM4WFhfRkFDVC0xKSA8PCBQTFBSQ1JfTUZfU0hJRlQpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgUExQUkNSX1NQTFNTIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUKQorCQkJUExQUkNSX1NQTFNTIHwgUExQUkNSX1RFWFBTIHwgUExQUkNSX1RNSVNUKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTQ0NSIC0gU3lzdGVtIENsb2NrIGFuZCByZXNldCBDb250cm9sIFJlZ2lzdGVyCQkxNS0yNwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01JUDQwNS5oIGIvaW5jbHVkZS9jb25maWdzL01JUDQwNS5oCmluZGV4IGIyOWViOGIuLjhkNzkzMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NSVA0MDUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTUlQNDA1LmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICAqIENPTkZJR19CT09UX1BDSSBpcyBvbmx5IHVzZWQgZm9yIGZpcnN0IGJvb3QtdXAgYW5kIHNob3VsZAogICogTk9UIGJlIGVuYWJsZWQgZm9yIHByb2R1Y3Rpb24gYm9vdGxvYWRlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyojZGVmaW5lICAgICAgICBDT05GSUdfQk9PVF9QQ0kgICAgICAgICAxKi8gICAgICAgCisvKiNkZWZpbmUgICAgICAgIENPTkZJR19CT09UX1BDSSAgICAgICAgIDEqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDbG9jawogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjYwLDcgKzI2MCw2IEBACiAjZGVmaW5lIENPTkZJR19QT1JUX0FERFIgCVBFUl9QTERfQUREUiArIDUKIAogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIERlZmluaXRpb25zIGZvciBpbml0aWFsIHN0YWNrIHBvaW50ZXIgYW5kIGRhdGEgYXJlYSAoaW4gT24gQ2hpcCBTUkFNKQogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvTUwyLmggYi9pbmNsdWRlL2NvbmZpZ3MvTUwyLmgKaW5kZXggZDY2MjY2MS4uNWZlNWQ1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01MMi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9NTDIuaApAQCAtNzYsNyArNzYsNiBAQAogI2RlZmluZSBDRkdfTE9BRFNfQkFVRF9DSEFOR0UJMQkvKiBhbGxvdyBiYXVkcmF0ZSBjaGFuZ2UJKi8KIAogCi0KICNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCSAgICAgICAoIChDT05GSUdfQ01EX0RGTCAmICh+Q0ZHX0NNRF9ORVQpCSAmICBcCiAJCQkJKH5DRkdfQ01EX1JUQykgJiB+KENGR19DTURfUENJKSAgJiB+KENGR19DTURfSTJDKSkgfCBcCiAJCQkJQ0ZHX0NNRF9JUlEJfCBcCkBAIC0xNDIsNyArMTQxLDYgQEAKICNkZWZpbmUJQ0ZHX0haCQkxMDAwCQkvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzCSovCiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTdGFydCBhZGRyZXNzZXMgZm9yIHRoZSBmaW5hbCBtZW1vcnkgY29uZmlndXJhdGlvbgogICogKFNldCB1cCBieSB0aGUgc3RhcnR1cCBjb2RlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01PVVNTRS5oIGIvaW5jbHVkZS9jb25maWdzL01PVVNTRS5oCmluZGV4IDEwOWVkM2QuLjZhZDJmZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9NT1VTU0UuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTU9VU1NFLmgKQEAgLTIyOSw3ICsyMjksNyBAQAogCiAKICNkZWZpbmUgQ0ZHX1BHTUFYICAgICAgICAgICAweDMyIC8qIGhvdyBsb25nIHRoZSA4MjQwIHJlYXRpbnMgdGhlIGN1cnJlbnRseSBhY2Nlc3NlZCBwYWdlIGluIG1lbW9yeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIDgyNDAgYm9vayBmb3IgZGV0YWlscyovCisJCQkJICAgIHNlZSA4MjQwIGJvb2sgZm9yIGRldGFpbHMqLwogI2RlZmluZSBQQ0lfTUVNX1NQQUNFMV9TVEFSVAkweDgwMDAwMDAwCiAjZGVmaW5lIFBDSV9NRU1fU1BBQ0UyX1NUQVJUCTB4ZmQwMDAwMDAKIApAQCAtMjk2LDcgKzI5Niw2IEBACiAjZGVmaW5lIENGR19DQUNIRUxJTkVfU0laRSAgMTYKIAogCi0KIC8qCiAgKiBJbnRlcm5hbCBEZWZpbml0aW9ucwogICoKQEAgLTMyOCw1ICszMjcsMyBAQAogI2RlZmluZSBDT05GSUdfVFVMSVAKIAogI2VuZGlmICAvKiBfX0NPTkZJR19IICovCi0KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01QQzgyNjZBRFMuaCBiL2luY2x1ZGUvY29uZmlncy9NUEM4MjY2QURTLmgKaW5kZXggOWU4ZDczMi4uODUwMWIyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01QQzgyNjZBRFMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVBDODI2NkFEUy5oCkBAIC0zOCw3ICszOCw3IEBACiAgICAhISAgMHhmZmYwMDAwMAkJCQkJCSAgICAgICEhCiAgICAhISAgVGhlIENGR19IUkNXX01BU1RFUiBkZWZpbmUgYmVsb3cgbXVzdCBhbHNvIGJlIGNoYW5nZWQgdG8gbWF0Y2ggISEKICAgICEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIQotICAgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIAorICAgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCiAgKi8KIAogI2lmbmRlZiBfX0NPTkZJR19ICkBAIC0zOTgsMTUgKzM5OCwxNSBAQAogLyogVXNlIHRoaXMgSFJDVyBmb3IgYm9vdGluZyBmcm9tIGFkZHJlc3MgMHhmZmYwMDAwIChKUDMgaW4gc2V0dGluZyAyLTMpICAqLwogLyogI2RlZmluZSBDRkdfSFJDV19NQVNURVIgMHgwY2IyMzY0NSAqLwogCi0vKiBUaGlzIHZhbHVlIHNob3VsZCBhY3R1YWxseSBiZSBzaXR1YXRlZCBpbiB0aGUgZmlyc3QgMjU2IGJ5dGVzIG9mIHRoZSBGTEFTSCAgCisvKiBUaGlzIHZhbHVlIHNob3VsZCBhY3R1YWxseSBiZSBzaXR1YXRlZCBpbiB0aGUgZmlyc3QgMjU2IGJ5dGVzIG9mIHRoZSBGTEFTSAogCXdoaWNoIG9uIHRoZSBzdGFuZGFyZCBNUEM4MjY2QURTIGJvYXJkIGlzIGF0IGFkZHJlc3MgMHhGRjgwMDAwMAogCVRoZSBsaW5rZXIgc2NyaXB0IHBsYWNlcyBpdCBhdCAweEZGRjAwMDAwIGluc3RlYWQuCiAKLQlJdCBzdGlsbCB3b3JrcywgaG93ZXZlciwgYXMgbG9uZyBhcyB0aGUgQURTIGJvYXJkIGp1bXBlciBKUDMgaXMgc2V0IHRvIAotCXBvc2l0aW9uIDItMyBzbyB0aGUgYm9hcmQgaXMgdXNpbmcgdGhlIEJDU1IgYXMgSGFyZHdhcmUgQ29uZmlndXJhdGlvbiBXb3JkIAorCUl0IHN0aWxsIHdvcmtzLCBob3dldmVyLCBhcyBsb25nIGFzIHRoZSBBRFMgYm9hcmQganVtcGVyIEpQMyBpcyBzZXQgdG8KKwlwb3NpdGlvbiAyLTMgc28gdGhlIGJvYXJkIGlzIHVzaW5nIHRoZSBCQ1NSIGFzIEhhcmR3YXJlIENvbmZpZ3VyYXRpb24gV29yZAogCi0JSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBvbmUgZGVmaW5lZCBoZXJlIGluc3RlYWQsIHVzdCBjb3B5IHRoZSBmaXJzdCAyNTYgYnl0ZXMgZnJvbSAKLQkweGZmZjAwMDAwIHRvIDB4ZmY4MDAwMDAgIChmb3IgOE1CIGZsYXNoKSAKKwlJZiB5b3Ugd2FudCB0byB1c2UgdGhlIG9uZSBkZWZpbmVkIGhlcmUgaW5zdGVhZCwgdXN0IGNvcHkgdGhlIGZpcnN0IDI1NiBieXRlcyBmcm9tCisJMHhmZmYwMDAwMCB0byAweGZmODAwMDAwICAoZm9yIDhNQiBmbGFzaCkKIAogCS0gUnVuZQogCkBAIC01MTQsMTIgKzUxNCwxMiBAQAogI2RlZmluZSBDRkdfUENJX1NMVl9NRU1fTE9DQUwJQ0ZHX1NEUkFNX0JBU0UJCS8qIExvY2FsIGJhc2UgKi8KICNkZWZpbmUgQ0ZHX1BDSV9TTFZfTUVNX0JVUwkJMHgwMDAwMDAwMAkJLyogUENJIGJhc2UgKi8KICNkZWZpbmUgQ0ZHX1BJQ01SMF9NQVNLX0FUVFJJQgkoUElDTVJfTUFTS181MTJNQiB8IFBJQ01SX0VOQUJMRSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgCSBQSUNNUl9QUkVGRVRDSF9FTikKKwkJCQkgUElDTVJfUFJFRkVUQ0hfRU4pCiAKLS8qIAorLyoKICAqIFRoZXNlIGFyZSB0aGUgd2luZG93cyB0aGF0IGFsbG93IHRoZSBDUFUgdG8gYWNjZXNzIFBDSSBhZGRyZXNzIHNwYWNlLgotICogQWxsIHRocmVlIFBDSSBtYXN0ZXIgd2luZG93cywgd2hpY2ggYWxsb3cgdGhlIENQVSB0byBhY2Nlc3MgUENJIAotICogcHJlZmV0Y2gsIG5vbiBwcmVmZXRjaCwgYW5kIElPIHNwYWNlIChzZWUgYmVsb3cpLCBtdXN0IGFsbCBmaXQgd2l0aGluIAorICogQWxsIHRocmVlIFBDSSBtYXN0ZXIgd2luZG93cywgd2hpY2ggYWxsb3cgdGhlIENQVSB0byBhY2Nlc3MgUENJCisgKiBwcmVmZXRjaCwgbm9uIHByZWZldGNoLCBhbmQgSU8gc3BhY2UgKHNlZSBiZWxvdyksIG11c3QgYWxsIGZpdCB3aXRoaW4KICAqIHRoZXNlIHdpbmRvd3MuCiAgKi8KIApAQCAtNTMwLDcgKzUzMCw3IEBACiAjZGVmaW5lIENGR19QQ0lfTVNUUjFfTE9DQUwJCTB4RjQwMDAwMDAJCS8qIExvY2FsIGJhc2UgKi8KICNkZWZpbmUgQ0ZHX1BDSU1TSzFfTUFTSwkJUENJTVNLXzY0TUIJCS8qIFNpemUgb2Ygd2luZG93ICovCiAKLS8qIAorLyoKICAqIE1hc3RlciB3aW5kb3cgdGhhdCBhbGxvd3MgdGhlIENQVSB0byBhY2Nlc3MgUENJIE1lbW9yeSAocHJlZmV0Y2gpLgogICogVGhpcyB3aW5kb3cgd2lsbCBiZSBzZXR1cCB3aXRoIHRoZSBmaXJzdCBzZXQgb2YgT3V0Ym91bmQgQVRVIHJlZ2lzdGVycwogICogaW4gdGhlIGJyaWRnZS4KQEAgLTU0Miw3ICs1NDIsNyBAQAogI2RlZmluZSBDRkdfUENJX01TVFJfTUVNX1NJWkUJMHgyMDAwMDAwMCAgICAgICAgICAvKiA1MTJNQiAqLwogI2RlZmluZSBDRkdfUE9DTVIwX01BU0tfQVRUUklCCShQT0NNUl9NQVNLXzUxMk1CIHwgUE9DTVJfRU5BQkxFIHwgUE9DTVJfUFJFRkVUQ0hfRU4pCiAKLS8qIAorLyoKICAqIE1hc3RlciB3aW5kb3cgdGhhdCBhbGxvd3MgdGhlIENQVSB0byBhY2Nlc3MgUENJIE1lbW9yeSAobm9uLXByZWZldGNoKS4KICAqIFRoaXMgd2luZG93IHdpbGwgYmUgc2V0dXAgd2l0aCB0aGUgc2Vjb25kIHNldCBvZiBPdXRib3VuZCBBVFUgcmVnaXN0ZXJzCiAgKiBpbiB0aGUgYnJpZGdlLgpAQCAtNTU0LDcgKzU1NCw3IEBACiAjZGVmaW5lIENGR19QQ0lfTVNUUl9NRU1JT19TSVpFICAgICAweDIwMDAwMDAwICAgICAgICAgIC8qIDUxMk1CICovCiAjZGVmaW5lIENGR19QT0NNUjFfTUFTS19BVFRSSUIgICAgICAoUE9DTVJfTUFTS181MTJNQiB8IFBPQ01SX0VOQUJMRSkKIAotLyogCisvKgogICogTWFzdGVyIHdpbmRvdyB0aGF0IGFsbG93cyB0aGUgQ1BVIHRvIGFjY2VzcyBQQ0kgSU8gc3BhY2UuCiAgKiBUaGlzIHdpbmRvdyB3aWxsIGJlIHNldHVwIHdpdGggdGhlIHRoaXJkIHNldCBvZiBPdXRib3VuZCBBVFUgcmVnaXN0ZXJzCiAgKiBpbiB0aGUgYnJpZGdlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01VU0VOS0kuaCBiL2luY2x1ZGUvY29uZmlncy9NVVNFTktJLmgKaW5kZXggMDM3NjVhMy4uZGE1MmUwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01VU0VOS0kuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVVTRU5LSS5oCkBAIC0yOTIsNiArMjkyLDQgQEAKICNkZWZpbmUgQk9PVEZMQUdfQ09MRAkJMHgwMQkvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSAkqLwogI2RlZmluZSBCT09URkxBR19XQVJNCQkweDAyCS8qIFNvZnR3YXJlIHJlYm9vdAkJCSovCiAKLQotCiAjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL01WUzEuaCBiL2luY2x1ZGUvY29uZmlncy9NVlMxLmgKaW5kZXggZDEwZmE4Zi4uNDliZGM0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL01WUzEuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvTVZTMS5oCkBAIC0xODQsNyArMTg0LDcgQEAKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQogI2RlZmluZSBDRkdfU1lQQ1IgICAoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFwKLSAgICAgICAgICAgICBTWVBDUl9TV0UgIHwgU1lQQ1JfU1dSSXwgU1lQQ1JfU1dQKQorCSAgICAgU1lQQ1JfU1dFICB8IFNZUENSX1NXUkl8IFNZUENSX1NXUCkKICNlbHNlCiAjZGVmaW5lIENGR19TWVBDUiAgIChTWVBDUl9TV1RDIHwgU1lQQ1JfQk1UIHwgU1lQQ1JfQk1FIHwgU1lQQ1JfU1dGIHwgU1lQQ1JfU1dQKQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvT0NSVEMuaCBiL2luY2x1ZGUvY29uZmlncy9PQ1JUQy5oCmluZGV4IDBhYzQ1NmEuLmZiM2I2NDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9PQ1JUQy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9PQ1JUQy5oCkBAIC05NSw4ICs5NSw4IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCi0gICAgICAgICA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KKwl7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCisJIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAgfQogCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkxCQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KQEAgLTExNiw3ICsxMTYsNyBAQAogI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9BVVRPICAgLyogc2VsZWN0IHBjaSBob3N0IGZ1bmN0aW9uICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCisJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KIAogI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVyAgICAgICAgICAgIC8qIHByaW50IHBjaSBkZXZpY2VzIEAgc3RhcnR1cCAgKi8KIApAQCAtMTg4LDcgKzE4OCw3IEBACiAjZGVmaW5lIENGR19FTlZfSVNfSU5fRUVQUk9NICAgIDEgICAgICAgLyogdXNlIEVFUFJPTSBmb3IgZW52aXJvbm1lbnQgdmFycyAqLwogI2RlZmluZSBDRkdfRU5WX09GRlNFVCAgICAgICAgICAweDAwMCAgIC8qIGVudmlyb25tZW50IHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBFRVBST00gKi8KICNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgICAgMHgzMDAgICAvKiA3NjggYnl0ZXMgbWF5IGJlIHVzZWQgZm9yIGVudiB2YXJzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvdGFsIHNpemUgb2YgYSBDQVQyNFdDMDggaXMgMTAyNCBieXRlcyAqLworCQkJCSAgIC8qIHRvdGFsIHNpemUgb2YgYSBDQVQyNFdDMDggaXMgMTAyNCBieXRlcyAqLwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI0MCwzMiArMjQwLDMyIEBACiAKIC8qIE1lbW9yeSBCYW5rIDIgKFBMRCAtIEZQR0EtYm9vdCkgaW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQ0ZHX0VCQ19QQjJBUCAgICAgICAgICAgMHgwMjAxNTQ4MCAgLyogQk1FPTB4MCxUV1Q9MHgwNCxDU049MHgwLE9FTj0weDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0JOPTB4MSxXQkY9MHgxLFRIPTB4MixSRT0weDAsU09SPTB4MSxCRU09MHgwLFBFTj0weDAqLworCQkJCQkgICAgLyogV0JOPTB4MSxXQkY9MHgxLFRIPTB4MixSRT0weDAsU09SPTB4MSxCRU09MHgwLFBFTj0weDAqLwogI2RlZmluZSBDRkdfRUJDX1BCMkNSICAgICAgICAgICAweEYwMDE4MDAwICAvKiBCQVM9MHhGMDAsQlM9MU1CLEJVPVIvVyxCVz04Yml0ICAqLwogCiAvKiBNZW1vcnkgQmFuayAzIChQTEQgLSBPU0wpIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIENGR19FQkNfUEIzQVAgICAgICAgICAgIDB4MDIwMTU0ODAgIC8qIEJNRT0weDAsVFdUPTB4MDQsQ1NOPTB4MCxPRU49MHgxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdCTj0weDEsV0JGPTB4MSxUSD0weDIsUkU9MHgwLFNPUj0weDEsQkVNPTB4MCxQRU49MHgwKi8KKwkJCQkJICAgIC8qIFdCTj0weDEsV0JGPTB4MSxUSD0weDIsUkU9MHgwLFNPUj0weDEsQkVNPTB4MCxQRU49MHgwKi8KICNkZWZpbmUgQ0ZHX0VCQ19QQjNDUiAgICAgICAgICAgMHhGMDExODAwMCAgLyogQkFTPTB4RjAxLEJTPTFNQixCVT1SL1csQlc9OGJpdCAgKi8KIAogLyogTWVtb3J5IEJhbmsgNCAoU3BhcnRhbjIgMSkgaW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBDRkdfRUJDX1BCNEFQICAgICAgICAgICAweDAyMDE1NTgwICAvKiBCTUU9MHgwLFRXVD0weDA0LENTTj0weDAsT0VOPTB4MSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXQk49MHgxLFdCRj0weDEsVEg9MHgyLFJFPTB4MSxTT1I9MHgxLEJFTT0weDAsUEVOPTB4MCovCisJCQkJCSAgICAvKiBXQk49MHgxLFdCRj0weDEsVEg9MHgyLFJFPTB4MSxTT1I9MHgxLEJFTT0weDAsUEVOPTB4MCovCiAjZGVmaW5lIENGR19FQkNfUEI0Q1IgICAgICAgICAgIDB4RjIwOUMwMDAgIC8qIEJBUz0weEYyMCxCUz0xNk1CLEJVPVIvVyxCVz0zMmJpdCovCiAKIC8qIE1lbW9yeSBCYW5rIDUgKFNwYXJ0YW4yIDIpIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQ0ZHX0VCQ19QQjVBUCAgICAgICAgICAgMHgwMjAxNTU4MCAgLyogQk1FPTB4MCxUV1Q9MHgwNCxDU049MHgwLE9FTj0weDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0JOPTB4MSxXQkY9MHgxLFRIPTB4MixSRT0weDEsU09SPTB4MSxCRU09MHgwLFBFTj0weDAqLworCQkJCQkgICAgLyogV0JOPTB4MSxXQkY9MHgxLFRIPTB4MixSRT0weDEsU09SPTB4MSxCRU09MHgwLFBFTj0weDAqLwogI2RlZmluZSBDRkdfRUJDX1BCNUNSICAgICAgICAgICAweEYzMDlDMDAwICAvKiBCQVM9MHhGMzAsQlM9MTZNQixCVT1SL1csQlc9MzJiaXQqLwogCiAvKiBNZW1vcnkgQmFuayA2IChWaXJ0ZXggMSkgaW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIENGR19FQkNfUEI2QVAgICAgICAgICAgIDB4MDIwMTU1ODAgIC8qIEJNRT0weDAsVFdUPTB4MDQsQ1NOPTB4MCxPRU49MHgxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdCTj0weDEsV0JGPTB4MSxUSD0weDIsUkU9MHgxLFNPUj0weDEsQkVNPTB4MCxQRU49MHgwKi8KKwkJCQkJICAgIC8qIFdCTj0weDEsV0JGPTB4MSxUSD0weDIsUkU9MHgxLFNPUj0weDEsQkVNPTB4MCxQRU49MHgwKi8KICNkZWZpbmUgQ0ZHX0VCQ19QQjZDUiAgICAgICAgICAgMHhGNDA5QTAwMCAgLyogQkFTPTB4RjQwLEJTPTE2TUIsQlU9Ui9XLEJXPTE2Yml0Ki8KIAogLyogTWVtb3J5IEJhbmsgNyAoVmlydGV4IDIpIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBDRkdfRUJDX1BCN0FQICAgICAgICAgICAweDAyMDE1NTgwICAvKiBCTUU9MHgwLFRXVD0weDA0LENTTj0weDAsT0VOPTB4MSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXQk49MHgxLFdCRj0weDEsVEg9MHgyLFJFPTB4MSxTT1I9MHgxLEJFTT0weDAsUEVOPTB4MCovCisJCQkJCSAgICAvKiBXQk49MHgxLFdCRj0weDEsVEg9MHgyLFJFPTB4MSxTT1I9MHgxLEJFTT0weDAsUEVOPTB4MCovCiAjZGVmaW5lIENGR19FQkNfUEI3Q1IgICAgICAgICAgIDB4RjUwOUEwMDAgIC8qIEJBUz0weEY1MCxCUz0xNk1CLEJVPVIvVyxCVz0xNmJpdCovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL09SU0cuaCBiL2luY2x1ZGUvY29uZmlncy9PUlNHLmgKaW5kZXggN2MxNjFjNi4uNWRhM2ZjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL09SU0cuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvT1JTRy5oCkBAIC05NSw4ICs5NSw4IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCi0gICAgICAgICA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KKwl7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCisJIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAgfQogCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkxCQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KQEAgLTExNiw3ICsxMTYsNyBAQAogI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9BREFQVEVSIC8qIHNlbGVjdCBwY2kgYWRhcHRlciAgICAgICAgICAqLwogI3VuZGVmICBDT05GSUdfUENJX1BOUAkJCS8qIG5vIHBjaSBwbHVnLWFuZC1wbGF5ICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCisJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KIAogI3VuZGVmICBDT05GSUdfUENJX1NDQU5fU0hPVyAgICAgICAgICAgIC8qIHByaW50IHBjaSBkZXZpY2VzIEAgc3RhcnR1cCAgKi8KIApAQCAtMTg2LDcgKzE4Niw3IEBACiAjZGVmaW5lIENGR19FTlZfSVNfSU5fRUVQUk9NICAgIDEgICAgICAgLyogdXNlIEVFUFJPTSBmb3IgZW52aXJvbm1lbnQgdmFycyAqLwogI2RlZmluZSBDRkdfRU5WX09GRlNFVCAgICAgICAgICAweDAwMCAgIC8qIGVudmlyb25tZW50IHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBFRVBST00gKi8KICNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgICAgMHgzMDAgICAvKiA3NjggYnl0ZXMgbWF5IGJlIHVzZWQgZm9yIGVudiB2YXJzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvdGFsIHNpemUgb2YgYSBDQVQyNFdDMDggaXMgMTAyNCBieXRlcyAqLworCQkJCSAgIC8qIHRvdGFsIHNpemUgb2YgYSBDQVQyNFdDMDggaXMgMTAyNCBieXRlcyAqLwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIzOCwzMiArMjM4LDMyIEBACiAKIC8qIE1lbW9yeSBCYW5rIDIgKFBMRCAtIEZQR0EtYm9vdCkgaW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQ0ZHX0VCQ19QQjJBUCAgICAgICAgICAgMHgwMjAxNTQ4MCAgLyogQk1FPTB4MCxUV1Q9MHgwNCxDU049MHgwLE9FTj0weDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0JOPTB4MSxXQkY9MHgxLFRIPTB4MixSRT0weDAsU09SPTB4MSxCRU09MHgwLFBFTj0weDAqLworCQkJCQkgICAgLyogV0JOPTB4MSxXQkY9MHgxLFRIPTB4MixSRT0weDAsU09SPTB4MSxCRU09MHgwLFBFTj0weDAqLwogI2RlZmluZSBDRkdfRUJDX1BCMkNSICAgICAgICAgICAweEYwMDE4MDAwICAvKiBCQVM9MHhGMDAsQlM9MU1CLEJVPVIvVyxCVz04Yml0ICAqLwogCiAvKiBNZW1vcnkgQmFuayAzIChQTEQgLSBPU0wpIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIENGR19FQkNfUEIzQVAgICAgICAgICAgIDB4MDIwMTU0ODAgIC8qIEJNRT0weDAsVFdUPTB4MDQsQ1NOPTB4MCxPRU49MHgxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdCTj0weDEsV0JGPTB4MSxUSD0weDIsUkU9MHgwLFNPUj0weDEsQkVNPTB4MCxQRU49MHgwKi8KKwkJCQkJICAgIC8qIFdCTj0weDEsV0JGPTB4MSxUSD0weDIsUkU9MHgwLFNPUj0weDEsQkVNPTB4MCxQRU49MHgwKi8KICNkZWZpbmUgQ0ZHX0VCQ19QQjNDUiAgICAgICAgICAgMHhGMDExODAwMCAgLyogQkFTPTB4RjAxLEJTPTFNQixCVT1SL1csQlc9OGJpdCAgKi8KIAogLyogTWVtb3J5IEJhbmsgNCAoU3BhcnRhbjIgMSkgaW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBDRkdfRUJDX1BCNEFQICAgICAgICAgICAweDAyMDE1NTgwICAvKiBCTUU9MHgwLFRXVD0weDA0LENTTj0weDAsT0VOPTB4MSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXQk49MHgxLFdCRj0weDEsVEg9MHgyLFJFPTB4MSxTT1I9MHgxLEJFTT0weDAsUEVOPTB4MCovCisJCQkJCSAgICAvKiBXQk49MHgxLFdCRj0weDEsVEg9MHgyLFJFPTB4MSxTT1I9MHgxLEJFTT0weDAsUEVOPTB4MCovCiAjZGVmaW5lIENGR19FQkNfUEI0Q1IgICAgICAgICAgIDB4RjIwOUMwMDAgIC8qIEJBUz0weEYyMCxCUz0xNk1CLEJVPVIvVyxCVz0zMmJpdCovCiAKIC8qIE1lbW9yeSBCYW5rIDUgKFNwYXJ0YW4yIDIpIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQ0ZHX0VCQ19QQjVBUCAgICAgICAgICAgMHgwMjAxNTU4MCAgLyogQk1FPTB4MCxUV1Q9MHgwNCxDU049MHgwLE9FTj0weDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0JOPTB4MSxXQkY9MHgxLFRIPTB4MixSRT0weDEsU09SPTB4MSxCRU09MHgwLFBFTj0weDAqLworCQkJCQkgICAgLyogV0JOPTB4MSxXQkY9MHgxLFRIPTB4MixSRT0weDEsU09SPTB4MSxCRU09MHgwLFBFTj0weDAqLwogI2RlZmluZSBDRkdfRUJDX1BCNUNSICAgICAgICAgICAweEYzMDlDMDAwICAvKiBCQVM9MHhGMzAsQlM9MTZNQixCVT1SL1csQlc9MzJiaXQqLwogCiAvKiBNZW1vcnkgQmFuayA2IChWaXJ0ZXggMSkgaW5pdGlhbGl6YXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIENGR19FQkNfUEI2QVAgICAgICAgICAgIDB4MDIwMTU1ODAgIC8qIEJNRT0weDAsVFdUPTB4MDQsQ1NOPTB4MCxPRU49MHgxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdCTj0weDEsV0JGPTB4MSxUSD0weDIsUkU9MHgxLFNPUj0weDEsQkVNPTB4MCxQRU49MHgwKi8KKwkJCQkJICAgIC8qIFdCTj0weDEsV0JGPTB4MSxUSD0weDIsUkU9MHgxLFNPUj0weDEsQkVNPTB4MCxQRU49MHgwKi8KICNkZWZpbmUgQ0ZHX0VCQ19QQjZDUiAgICAgICAgICAgMHhGNDA5QTAwMCAgLyogQkFTPTB4RjQwLEJTPTE2TUIsQlU9Ui9XLEJXPTE2Yml0Ki8KIAogLyogTWVtb3J5IEJhbmsgNyAoVmlydGV4IDIpIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBDRkdfRUJDX1BCN0FQICAgICAgICAgICAweDAyMDE1NTgwICAvKiBCTUU9MHgwLFRXVD0weDA0LENTTj0weDAsT0VOPTB4MSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXQk49MHgxLFdCRj0weDEsVEg9MHgyLFJFPTB4MSxTT1I9MHgxLEJFTT0weDAsUEVOPTB4MCovCisJCQkJCSAgICAvKiBXQk49MHgxLFdCRj0weDEsVEg9MHgyLFJFPTB4MSxTT1I9MHgxLEJFTT0weDAsUEVOPTB4MCovCiAjZGVmaW5lIENGR19FQkNfUEI3Q1IgICAgICAgICAgIDB4RjUwOUEwMDAgIC8qIEJBUz0weEY1MCxCUz0xNk1CLEJVPVIvVyxCVz0xNmJpdCovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1BDSTQwNS5oIGIvaW5jbHVkZS9jb25maWdzL1BDSTQwNS5oCmluZGV4IGIxZWQwY2IuLjhhYjI1M2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QQ0k0MDUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUENJNDA1LmgKQEAgLTQ3LDEwICs0NywxMCBAQAogCiAjaWYgMAogI2RlZmluZSBDT05GSUdfUFJFQk9PVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJjcmMzMiBmMDIwNzAwNCBmZmMgMDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgImlmIGNtcCAwIGYwMjA3MDAwIDE7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAidGhlbjtlY2hvIE9sZCBDUkMgaXMgY29ycmVjdDtjcmMzMiBmMDIwNzAwNCBmZjQgZjAyMDcwMDA7IiAgICAgICAgICAgICBcCi0gICAgICAgICJlbHNlO2VjaG8gT2xkIENSQyBpcyBiYWQ7ZmkiCisJImNyYzMyIGYwMjA3MDA0IGZmYyAwOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSJpZiBjbXAgMCBmMDIwNzAwMCAxOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkidGhlbjtlY2hvIE9sZCBDUkMgaXMgY29ycmVjdDtjcmMzMiBmMDIwNzAwNCBmZjQgZjAyMDcwMDA7IiAgICAgICAgICAgICBcCisJImVsc2U7ZWNobyBPbGQgQ1JDIGlzIGJhZDtmaSIKICNlbmRpZgogCiAjdW5kZWYJQ09ORklHX0JPT1RBUkdTCkBAIC02MCw4ICs2MCw4IEBACiAjZWxzZQogI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJCQkJCQkJXAogCSJtdy5sIDAgZmZmZmZmZmY7IG13LmwgNCBmZmZmZmZmZjsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIndoaWxlIGNtcCAwIDQgMTsgZG8gZWNobyBXYWl0aW5nIGZvciBIb3N0Li4uO2RvbmU7IiAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAiYm9vdG0gNDAwMDAwIgorCSJ3aGlsZSBjbXAgMCA0IDE7IGRvIGVjaG8gV2FpdGluZyBmb3IgSG9zdC4uLjtkb25lOyIgICAgICAgICAgICAgICAgICAgIFwKKwkiYm9vdG0gNDAwMDAwIgogI2VuZGlmCiAKICNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkvKiBlY2hvIG9uIGZvciBzZXJpYWwgZG93bmxvYWQJKi8KQEAgLTEyMyw4ICsxMjMsOCBAQAogCiAvKiBUaGUgZm9sbG93aW5nIHRhYmxlIGluY2x1ZGVzIHRoZSBzdXBwb3J0ZWQgYmF1ZHJhdGVzICovCiAjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgICAgIFwKLSAgICAgICAgeyAzMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCAgICAgXAotICAgICAgICAgNTc2MDAsIDExNTIwMCwgMjMwNDAwLCA0NjA4MDAsIDkyMTYwMCB9CisJeyAzMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCAgICAgXAorCSA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KIAogI2RlZmluZSBDRkdfTE9BRF9BRERSCTB4MTAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCiAjZGVmaW5lIENGR19FWFRCRElORk8JMQkJLyogVG8gdXNlIGV4dGVuZGVkIGJvYXJkX2ludG8gKGJkX3QpICovCkBAIC0xNDQsNyArMTQ0LDcgQEAKICNkZWZpbmUgQ09ORklHX1BDSQkJCS8qIGluY2x1ZGUgcGNpIHN1cHBvcnQJICAgICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX0hPU1QJUENJX0hPU1RfQURBUFRFUiAvKiBzZWxlY3QgcGNpIGhvc3QgZnVuY3Rpb24gICAgKi8KICN1bmRlZiAgQ09ORklHX1BDSV9QTlAJCQkvKiBubyBwY2kgcGx1Zy1hbmQtcGxheSAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzb3VyY2UgY29uZmlndXJhdGlvbiAgICAgICAqLworCQkJCQkvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCiAKICNkZWZpbmUgQ09ORklHX1BDSV9TQ0FOX1NIT1cgICAgICAgICAgICAvKiBwcmludCBwY2kgZGV2aWNlcyBAIHN0YXJ0dXAgICovCiAKQEAgLTIxOCw3ICsyMTgsNyBAQAogI2RlZmluZSBDRkdfRU5WX0lTX0lOX0VFUFJPTSAgICAxICAgICAgIC8qIHVzZSBFRVBST00gZm9yIGVudmlyb25tZW50IHZhcnMgKi8KICNkZWZpbmUgQ0ZHX0VOVl9PRkZTRVQgICAgICAgICAgMHgwMDAgICAvKiBlbnZpcm9ubWVudCBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgRUVQUk9NICovCiAjZGVmaW5lIENGR19FTlZfU0laRSAgICAgICAgICAgIDB4NDAwICAgLyogMTAyNCBieXRlcyBtYXkgYmUgdXNlZCBmb3IgZW52IHZhcnMqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0b3RhbCBzaXplIG9mIGEgQ0FUMjRXQzA4IGlzIDEwMjQgYnl0ZXMgKi8KKwkJCQkgICAvKiB0b3RhbCBzaXplIG9mIGEgQ0FUMjRXQzA4IGlzIDEwMjQgYnl0ZXMgKi8KICNlbmRpZgogCiAjZGVmaW5lIENGR19OVlJBTV9CQVNFX0FERFIJMHhmMDIwMDAwMAkJLyogTlZSQU0gYmFzZSBhZGRyZXNzCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUENJUFBDMi5oIGIvaW5jbHVkZS9jb25maWdzL1BDSVBQQzIuaAppbmRleCAzZWI2YWMzLi42NDVjZGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUENJUFBDMi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QQ0lQUEMyLmgKQEAgLTU2LDcgKzU2LDcgQEAKICNkZWZpbmUgQ09ORklHX0JPT1RERUxBWQk1CiAKICNkZWZpbmUgQ09ORklHX0JPT1RQX01BU0sJKENPTkZJR19CT09UUF9ERUZBVUxUIHwgXAotCQkJICAgICAgICAgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRSkKKwkJCQkgQ09ORklHX0JPT1RQX0JPT1RGSUxFU0laRSkKIAogI2RlZmluZSBDT05GSUdfTUFDX1BBUlRJVElPTgogI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgpAQCAtMjMxLDcgKzIzMSw3IEBACiAgKi8KICN1bmRlZiBDRkdfTDIKICNkZWZpbmUgTDJfSU5JVCAgIChMMkNSX0wyU0laXzJNIHwgTDJDUl9MMkNMS18zIHwgTDJDUl9MMlJBTV9CVVJTVCB8IFwKLSAgICAgICAgICAgICAgICAgICBMMkNSX0wyT0hfNSB8IEwyQ1JfTDJDVEwgfCBMMkNSX0wyV1QpCisJCSAgIEwyQ1JfTDJPSF81IHwgTDJDUl9MMkNUTCB8IEwyQ1JfTDJXVCkKICNkZWZpbmUgTDJfRU5BQkxFIChMMl9JTklUIHwgTDJDUl9MMkUpCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUENJUFBDNi5oIGIvaW5jbHVkZS9jb25maWdzL1BDSVBQQzYuaAppbmRleCBmNGRmYmZlLi40OTUzNDU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUENJUFBDNi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QQ0lQUEM2LmgKQEAgLTI3OCw2ICsyNzgsNCBAQAogI2RlZmluZSBDT05GSUdfTUFDX1BBUlRJVElPTgogI2RlZmluZSBDT05GSUdfSVNPX1BBUlRJVElPTgogCi0KLQogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9QSVA0MDUuaCBiL2luY2x1ZGUvY29uZmlncy9QSVA0MDUuaAppbmRleCA4ZmJiZTMwLi42MGU1YTlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUElQNDA1LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1BJUDQwNS5oCkBAIC0yMzksNyArMjM5LDYgQEAKICNkZWZpbmUgTVVMVElfUFVSUE9TRV9TT0NLRVRfQUREUiAweEY4MDAwMDAwCiAKIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBEZWZpbml0aW9ucyBmb3IgaW5pdGlhbCBzdGFjayBwb2ludGVyIGFuZCBkYXRhIGFyZWEgKGluIE9uIENoaXAgU1JBTSkKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1BNODI2LmggYi9pbmNsdWRlL2NvbmZpZ3MvUE04MjYuaAppbmRleCA2YmExNGFmLi42NjY4NTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUE04MjYuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUE04MjYuaApAQCAtMzQ3LDcgKzM0Nyw3IEBACiAgKiBISUQxIGhhcyBvbmx5IHJlYWQtb25seSBpbmZvcm1hdGlvbiAtIG5vdGhpbmcgdG8gc2V0LgogICovCiAjZGVmaW5lIENGR19ISUQwX0lOSVQgICAoSElEMF9JQ0V8SElEMF9EQ0V8SElEMF9JQ0ZJfEhJRDBfRENJfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSElEMF9JRkVNfEhJRDBfQUJFKQorCQkJCUhJRDBfSUZFTXxISUQwX0FCRSkKICNkZWZpbmUgQ0ZHX0hJRDBfRklOQUwgIChISUQwX0lDRXxISUQwX0lGRU18SElEMF9BQkUpCiAjZGVmaW5lIENGR19ISUQyICAgICAgICAwCiAKQEAgLTM4NSwxMCArMzg1LDEwIEBACiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19XQVRDSERPRykKICNkZWZpbmUgQ0ZHX1NZUENSICAgICAgIChTWVBDUl9TV1RDfFNZUENSX0JNVHxTWVBDUl9QQk1FfFNZUENSX0xCTUV8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZUENSX1NXUkl8U1lQQ1JfU1dQfFNZUENSX1NXRSkKKwkJCSBTWVBDUl9TV1JJfFNZUENSX1NXUHxTWVBDUl9TV0UpCiAjZWxzZQogI2RlZmluZSBDRkdfU1lQQ1IgICAgICAgKFNZUENSX1NXVEN8U1lQQ1JfQk1UfFNZUENSX1BCTUV8U1lQQ1JfTEJNRXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfU1dSSXxTWVBDUl9TV1ApCisJCQkgU1lQQ1JfU1dSSXxTWVBDUl9TV1ApCiAjZW5kaWYgLyogQ09ORklHX1dBVENIRE9HICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4MiwxNiArNDgyLDE2IEBACiAgKiBCYW5rIDAgLSBGbGFzaCAoNjQgYml0IHdpZGUpCiAgKi8KICNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0gICgoQ0ZHX0ZMQVNIX0JBU0UgJiBCUnhfQkFfTVNLKSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IwX1BSRUxJTSAgKFAyU1pfVE9fQU0oQ0ZHX0ZMQVNIX1NJWkUpCXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19DU05UICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TQ1lfM19DTEsgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19FSFRSICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19UUkxYKQorCQkJIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfU0NZXzNfQ0xLICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfRUhUUiAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfVFJMWCkKIAogLyoKICAqIEJhbmsgMSAtIERpc2stT24tQ2hpcApAQCAtNTE1LDQzICs1MTUsNDMgQEAKICNkZWZpbmUgQ0ZHX1BTUlQgICAgICAgIDB4MEYKICNpZm5kZWYgQ0ZHX1JBTUJPT1QKICNkZWZpbmUgQ0ZHX0JSMl9QUkVMSU0gICgoQ0ZHX1NEUkFNX0JBU0UgJiBCUnhfQkFfTVNLKSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfU0RSQU1fUCAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfU0RSQU1fUCAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogCS8qIFNEUkFNIGluaXRpYWxpemF0aW9uIHZhbHVlcyBmb3IgOC1jb2x1bW4gY2hpcHMKIAkgKi8KICNkZWZpbmUgQ0ZHX09SMl84Q09MICAgIChDRkdfTUlOX0FNX01BU0sJICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfUk9XU1RfUEJJMF9BOSAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfTlVNUl8xMikKKwkJCSBPUnhTX0JQRF80ICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhTX1JPV1NUX1BCSTBfQTkgICAgICAgICAgICAgfFwKKwkJCSBPUnhTX05VTVJfMTIpCiAKICNkZWZpbmUgQ0ZHX1BTRE1SXzhDT0wgIChQU0RNUl9TREFNX0ExM19JU19BNSAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9CU01BX0ExNF9BMTYgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9TREExMF9QQkkwX0ExMCAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9SRlJDXzdfQ0xLICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9QUkVUT0FDVF8yVyAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9BQ1RUT1JXXzFXICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9MRE9UT1BSRV8xQyAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9XUkNfMUMgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9DTF8yKQorCQkJIFBTRE1SX0JTTUFfQTE0X0ExNiAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX1NEQTEwX1BCSTBfQTEwICAgICAgICAgICB8XAorCQkJIFBTRE1SX1JGUkNfN19DTEsgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX1BSRVRPQUNUXzJXICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0FDVFRPUldfMVcgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0xET1RPUFJFXzFDICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX1dSQ18xQyAgICAgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0NMXzIpCiAKIAkvKiBTRFJBTSBpbml0aWFsaXphdGlvbiB2YWx1ZXMgZm9yIDktY29sdW1uIGNoaXBzCiAJICovCiAjZGVmaW5lIENGR19PUjJfOUNPTCAgICAoQ0ZHX01JTl9BTV9NQVNLICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19CUERfNCAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19ST1dTVF9QQkkwX0E3ICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19OVU1SXzEzKQorCQkJIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeFNfUk9XU1RfUEJJMF9BNyAgICAgICAgICAgICB8XAorCQkJIE9SeFNfTlVNUl8xMykKIAogI2RlZmluZSBDRkdfUFNETVJfOUNPTCAgKFBTRE1SX1NEQU1fQTE0X0lTX0E1ICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0JTTUFfQTEzX0ExNSAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1NEQTEwX1BCSTBfQTkgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1JGUkNfN19DTEsgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1BSRVRPQUNUXzJXICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0FDVFRPUldfMVcgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0xET1RPUFJFXzFDICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1dSQ18xQyAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0NMXzIpCisJCQkgUFNETVJfQlNNQV9BMTNfQTE1ICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfU0RBMTBfUEJJMF9BOSAgICAgICAgICAgIHxcCisJCQkgUFNETVJfUkZSQ183X0NMSyAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfUFJFVE9BQ1RfMlcgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfQUNUVE9SV18xVyAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfTERPVE9QUkVfMUMgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfV1JDXzFDICAgICAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfQ0xfMikKIAogI2RlZmluZSBDRkdfT1IyX1BSRUxJTSAgIENGR19PUjJfOUNPTAogI2RlZmluZSBDRkdfUFNETVIgICAgICAgIENGR19QU0RNUl85Q09MCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUE1DNDA1LmggYi9pbmNsdWRlL2NvbmZpZ3MvUE1DNDA1LmgKaW5kZXggZTNkMzc4NS4uNTRiNTNiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1BNQzQwNS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QTUM0MDUuaApAQCAtMTE5LDggKzExOSw4IEBACiAKIC8qIFRoZSBmb2xsb3dpbmcgdGFibGUgaW5jbHVkZXMgdGhlIHN1cHBvcnRlZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgXAotICAgICAgICB7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCi0gICAgICAgICA1NzYwMCwgMTE1MjAwLCAyMzA0MDAsIDQ2MDgwMCwgOTIxNjAwIH0KKwl7IDMwMCwgNjAwLCAxMjAwLCAyNDAwLCA0ODAwLCA5NjAwLCAxOTIwMCwgMzg0MDAsICAgICBcCisJIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAgfQogCiAjZGVmaW5lIENGR19MT0FEX0FERFIJMHgxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0ZHX0VYVEJESU5GTwkxCQkvKiBUbyB1c2UgZXh0ZW5kZWQgYm9hcmRfaW50byAoYmRfdCkgKi8KQEAgLTE0NCw3ICsxNDQsNyBAQAogI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9GT1JDRSAgLyogc2VsZWN0IHBjaSBob3N0IGZ1bmN0aW9uICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCisJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KIAogI3VuZGVmIENPTkZJR19QQ0lfU0NBTl9TSE9XICAgICAgICAgICAgIC8qIHByaW50IHBjaSBkZXZpY2VzIEAgc3RhcnR1cCAgKi8KIApAQCAtMTk3LDcgKzE5Nyw3IEBACiAjZGVmaW5lIENGR19FTlZfSVNfSU5fRUVQUk9NICAgIDEgICAgICAgLyogdXNlIEVFUFJPTSBmb3IgZW52aXJvbm1lbnQgdmFycyAqLwogI2RlZmluZSBDRkdfRU5WX09GRlNFVCAgICAgICAgICAweDAwMCAgIC8qIGVudmlyb25tZW50IHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBFRVBST00gKi8KICNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgICAgMHg4MDAgICAvKiAyMDQ4IGJ5dGVzIG1heSBiZSB1c2VkIGZvciBlbnYgdmFycyovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvdGFsIHNpemUgb2YgYSBDQVQyNFdDMTYgaXMgMjA0OCBieXRlcyAqLworCQkJCSAgIC8qIHRvdGFsIHNpemUgb2YgYSBDQVQyNFdDMTYgaXMgMjA0OCBieXRlcyAqLwogCiAjZGVmaW5lIENGR19OVlJBTV9CQVNFX0FERFIJMHhGMDAwMDUwMAkJLyogTlZSQU0gYmFzZSBhZGRyZXNzCSovCiAjZGVmaW5lIENGR19OVlJBTV9TSVpFCQkyNDIJCSAgICAgICAgLyogTlZSQU0gc2l6ZQkJKi8KQEAgLTIyMyw3ICsyMjMsNyBAQAogICogQ2FjaGUgQ29uZmlndXJhdGlvbgogICovCiAjZGVmaW5lIENGR19EQ0FDSEVfU0laRQkJMTYzODQJLyogRm9yIElCTSA0MDUgQ1BVcywgb2xkZXIgNDA1IHBwYydzICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGF2ZSBvbmx5IDhrQiwgMTZrQiBpcyBzYXZlIGhlcmUgICAgICovCisJCQkJCS8qIGhhdmUgb25seSA4a0IsIDE2a0IgaXMgc2F2ZSBoZXJlICAgICAqLwogI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIJLyogLi4uCQkJKi8KICNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQogI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTUJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9SUFhDbGFzc2ljLmggYi9pbmNsdWRlL2NvbmZpZ3MvUlBYQ2xhc3NpYy5oCmluZGV4IGYyMGI4ZjkuLjk1OWVlMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9SUFhDbGFzc2ljLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1JQWENsYXNzaWMuaApAQCAtMTgyLDcgKzE4Miw3IEBACiAjZGVmaW5lCUNGR19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCiAjZGVmaW5lIENGR19GTEFTSF9CQVNFCTB4RkYwMDAwMDAKIAotI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQgKENPTkZJR19WSURFT19TRUQxMzgwNikgfHwgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfSURFKSAKKyNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkIChDT05GSUdfVklERU9fU0VEMTM4MDYpIHx8IChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0lERSkKICNkZWZpbmUJQ0ZHX01PTklUT1JfTEVOCQkoMjU2IDw8IDEwKQkvKiBSZXNlcnZlIDI1NiBrQiBmb3IgTW9uaXRvcgkqLwogI2Vsc2UKICNkZWZpbmUJQ0ZHX01PTklUT1JfTEVOCQkoMTI4IDw8IDEwKQkvKiBSZXNlcnZlIDEyOCBrQiBmb3IgTW9uaXRvcgkqLwpAQCAtMzcwLDggKzM3MCw4IEBACiAKIC8qIEVDQ1ggQ1Mgc2V0dGluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU0VEMTM4MDZfT1IgICAgICAgICAgICAgMHhGRkMwMDEwOCAgICAgLyogLSA0IE1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEJ1cnN0IGluaGliaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZXh0ZXJuYWwgVEEgICAgICAgICAgICAgKi8KKwkJCQkJCSAgIC0gQnVyc3QgaW5oaWJpdAorCQkJCQkJICAgLSBleHRlcm5hbCBUQSAgICAgICAgICAgICAqLwogI2RlZmluZSBTRUQxMzgwNl9SRUdfQUREUiAgICAgICAweGEwMDAwMDAwCiAjZGVmaW5lIFNFRDEzODA2X0FDQ0VTICAgICAgICAgIDB4ODAxICAgICAgICAgICAvKiAxNiBiaXQgYWNjZXNzICAgICAgICAgICAgICovCiAKQEAgLTM5MSw4ICszOTEsOCBAQAogCiAvKiBEZWZpbml0aW9ucyBmb3IgQ1NSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEVDQ1hfRU5FUFNPTiAgICAgICAgICAgIDB4ODAgICAgLyogQml0IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMD0gZGlzYWJsZSBhbmQgcmVzZXQgU0VEMTM4NgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE9IGVuYWJsZSBTRUQxMzg2ICAgICAgICAgICAgICAgICAqLworCQkJCQkgICAwPSBkaXNhYmxlIGFuZCByZXNldCBTRUQxMzg2CisJCQkJCSAgIDE9IGVuYWJsZSBTRUQxMzg2ICAgICAgICAgICAgICAgICAqLwogLyogQml0IDE6ICAgMD0gU0VEMTM4NiBpbiBCaWcgRW5kaWFuIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgMT0gU0VEMTM4NiBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBFQ0NYX0xFICAgICAgICAgICAgICAgICAweDQwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUlBYc3VwZXIuaCBiL2luY2x1ZGUvY29uZmlncy9SUFhzdXBlci5oCmluZGV4IGMzNjQ2NzIuLjBhYmZmMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9SUFhzdXBlci5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9SUFhzdXBlci5oCkBAIC0yMjYsMTggKzIyNiwxOCBAQAogCiAvKiBnZXQgdGhlIEhSQ1cgSVNCIGZpZWxkIGZyb20gQ0ZHX0lNTVIgKi8KICNkZWZpbmUgQ0ZHX1NCQ19IUkNXX0lNTVIgKCAoKENGR19JTU1SICYgMHgxMDAwMDAwMCkgPj4gMTApIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDRkdfSU1NUiAmIDB4MDEwMDAwMDApID4+IDcpICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0ZHX0lNTVIgJiAweDAwMTAwMDAwKSA+PiA0KSApCisJCQkgICAgKChDRkdfSU1NUiAmIDB4MDEwMDAwMDApID4+IDcpICB8XAorCQkJICAgICgoQ0ZHX0lNTVIgJiAweDAwMTAwMDAwKSA+PiA0KSApCiAKICNkZWZpbmUgQ0ZHX0hSQ1dfTUFTVEVSIChIUkNXX0JQUzExICAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBIUkNXX0RQUEMxMSAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfU0JDX0hSQ1dfSU1NUiAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBIUkNXX01NUjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBIUkNXX0xCUEMxMSAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBIUkNXX0FQUEMxMCAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBIUkNXX0NTMTBQQzAwICAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoQ0ZHX1NCQ19NT0RDS19IICYgSFJDV19NT0RDS19IMTExMSkgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfU0JDX0hSQ1dfQk9PVF9GTEFHUykKKwkJCSBIUkNXX0RQUEMxMSAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBDRkdfU0JDX0hSQ1dfSU1NUiAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBIUkNXX01NUjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBIUkNXX0xCUEMxMSAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBIUkNXX0FQUEMxMCAgICAgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBIUkNXX0NTMTBQQzAwICAgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSAoQ0ZHX1NCQ19NT0RDS19IICYgSFJDV19NT0RDS19IMTExMSkgfFwKKwkJCSBDRkdfU0JDX0hSQ1dfQk9PVF9GTEFHUykKIAogLyogbm8gc2xhdmVzICovCiAjZGVmaW5lIENGR19IUkNXX1NMQVZFMSAwCkBAIC0zNTgsOCArMzU4LDggQEAKICAqLwogCiAjZGVmaW5lIENGR19TSVVNQ1IgICAgICAoU0lVTUNSX0wyQ1BDMDEgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTSVVNQ1JfQVBQQzEwICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFNJVU1DUl9DUzEwUEMwMSkKKwkJCSBTSVVNQ1JfQVBQQzEwICB8XAorCQkJIFNJVU1DUl9DUzEwUEMwMSkKIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNjksMTEgKzM2OSwxMSBAQAogICogV2F0Y2hkb2cgJiBCdXMgTW9uaXRvciBUaW1lciBtYXgsIDYweCBCdXMgTW9uaXRvciBlbmFibGUKICAqLwogI2RlZmluZSBDRkdfU1lQQ1IgICAgICAgKFNZUENSX1NXVEMgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVBDUl9CTVQgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfUEJNRSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZUENSX0xCTUUgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVBDUl9TV1JJIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfU1dQKQorCQkJIFNZUENSX0JNVCAgfFwKKwkJCSBTWVBDUl9QQk1FIHxcCisJCQkgU1lQQ1JfTEJNRSB8XAorCQkJIFNZUENSX1NXUkkgfFwKKwkJCSBTWVBDUl9TV1ApCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRNQ05UU0MgLSBUaW1lIENvdW50ZXIgU3RhdHVzIGFuZCBDb250cm9sICAgICAgICAgICAgICAgICAgICAgNC00MApAQCAtMzgyLDkgKzM4Miw5IEBACiAgKiBhbmQgZW5hYmxlIFRpbWUgQ291bnRlcgogICovCiAjZGVmaW5lIENGR19UTUNOVFNDICAgICAoVE1DTlRTQ19TRUMgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUTUNOVFNDX0FMUiB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFRNQ05UU0NfVENGIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgVE1DTlRTQ19UQ0UpCisJCQkgVE1DTlRTQ19BTFIgfFwKKwkJCSBUTUNOVFNDX1RDRiB8XAorCQkJIFRNQ05UU0NfVENFKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQSVNDUiAtIFBlcmlvZGljIEludGVycnVwdCBTdGF0dXMgYW5kIENvbnRyb2wgICAgICAgICAgICAgICAgIDQtNDIKQEAgLTM5Myw4ICszOTMsOCBAQAogICogUGVyaW9kaWMgdGltZXIKICAqLwogI2RlZmluZSBDRkdfUElTQ1IgICAgICAgKFBJU0NSX1BTICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBJU0NSX1BURiB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBJU0NSX1BURSkKKwkJCSBQSVNDUl9QVEYgfFwKKwkJCSBQSVNDUl9QVEUpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNDQ1IgLSBTeXN0ZW0gQ2xvY2sgQ29udHJvbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOS04CkBAIC00MzEsMjkgKzQzMSwyOSBAQAogICoKICAqLwogI2RlZmluZSBDRkdfQlIwX1BSRUxJTSAgKChDRkdfRkxBU0gwX0JBU0UgJiBCUnhfQkFfTVNLKSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9QU182NCAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9QU182NCAgICAgICAgICAgICAgICAgICAgICB8XAogCQkJIEJSeF9ERUNDX05PTkUgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9WKQorCQkJIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9WKQogCiAjZGVmaW5lIENGR19PUjBfUFJFTElNICAoTUVHX1RPX0FNKENGR19GTEFTSDBfU0laRSkgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19DU05UICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TQ1lfNl9DTEsgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19FSFRSKQorCQkJIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfU0NZXzZfQ0xLICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfRUhUUikKIAogLyogQmFuayAxIC0gU0RSQU0KICAqCiAgKi8KICNkZWZpbmUgQ0ZHX0JSMV9QUkVMSU0gICgoQ0ZHX1NEUkFNMF9CQVNFICYgQlJ4X0JBX01TSykgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfU0RSQU1fUCAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfU0RSQU1fUCAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IxX1BSRUxJTSAgKE1FR19UT19BTShDRkdfU0RSQU0wX1NJWkUpICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfUk9XU1RfUEJJMF9BOCAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfTlVNUl8xMiAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeFNfUk9XU1RfUEJJMF9BOCAgICAgICAgICAgICB8XAorCQkJIE9SeFNfTlVNUl8xMiAgICAgICAgICAgICAgICAgICB8XAogCQkJIE9SeFNfSUJJRCkKIAogI2RlZmluZSBDRkdfUFNETVIgICAgICAgMHgwMTREQTQxMgpAQCAtNDY0LDE0ICs0NjQsMTQgQEAKICAqCiAgKi8KICNkZWZpbmUgQ0ZHX0JSMl9QUkVMSU0gICgoQ0ZHX1NEUkFNMV9CQVNFICYgQlJ4X0JBX01TSykgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfMzIgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfU0RSQU1fTCAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfMzIgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfU0RSQU1fTCAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IyX1BSRUxJTSAgKE1FR19UT19BTShDRkdfU0RSQU0xX1NJWkUpICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfUk9XU1RfUEJJMF9BOSAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfTlVNUl8xMikKKwkJCSBPUnhTX0JQRF80ICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhTX1JPV1NUX1BCSTBfQTkgICAgICAgICAgICAgfFwKKwkJCSBPUnhTX05VTVJfMTIpCiAKICNkZWZpbmUgQ0ZHX0xTRE1SICAgICAgIDB4MDE2OUE1MTIKICNkZWZpbmUgQ0ZHX0xTUlQJMHg3OQpAQCAtNDgyLDE1ICs0ODIsMTUgQEAKICAqCiAgKi8KICNkZWZpbmUgQ0ZHX0JSNF9QUkVMSU0gICAoKENGR19SRUdTX0JBU0UgJiBCUnhfQkFfTVNLKSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9QU184ICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9WKQorCQkJICAgQlJ4X1BTXzggICAgICAgICAgICAgICAgICAgICB8XAorCQkJICAgQlJ4X01TX0dQQ01fUCAgICAgICAgICAgICAgICB8XAorCQkJICAgQlJ4X1YpCiAKICNkZWZpbmUgQ0ZHX09SNF9QUkVMSU0gICAgKE9SeEdfQU1fTVNLICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19DU05UICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzVfQ0xLICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19UUkxYKQorCQkJICAgT1J4R19DU05UICAgICAgICAgICAgICAgICAgIHxcCisJCQkgICBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgfFwKKwkJCSAgIE9SeEdfU0NZXzVfQ0xLICAgICAgICAgICAgICB8XAorCQkJICAgT1J4R19UUkxYKQogCiAvKgogICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKQEAgLTUwMSw1ICs1MDEsMyBAQAogI2RlZmluZSBCT09URkxBR19XQVJNICAgMHgwMiAgICAvKiBTb2Z0d2FyZSByZWJvb3QgICAgICAgICAgICAgICAgICAgKi8KIAogI2VuZGlmICAvKiBfX0NPTkZJR19IICovCi0KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1JSdmlzaW9uLmggYi9pbmNsdWRlL2NvbmZpZ3MvUlJ2aXNpb24uaAppbmRleCBhMTMyN2U3Li45MjZkNjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvUlJ2aXNpb24uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUlJ2aXNpb24uaApAQCAtMTM1LDcgKzEzNSw2IEBACiAjZW5kaWYJLyogQ09ORklHX1NPRlRfSTJDICovCiAKIAotCiAjZGVmaW5lIENPTkZJR19DT01NQU5EUwkgICAgKCAoIENPTkZJR19DTURfREZMCXwgXAogCQkJCUNGR19DTURfREhDUAl8IFwKIAkJCQlDRkdfQ01EX0kyQwl8IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9TQ00uaCBiL2luY2x1ZGUvY29uZmlncy9TQ00uaAppbmRleCAwZGQ0NmEwLi5lNDUzM2I0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvU0NNLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1NDTS5oCkBAIC0yODcsMTAgKzI4NywxMCBAQAogICovCiAjaWYgZGVmaW5lZChDT05GSUdfMjY2TUh6KQogI2RlZmluZSBDRkdfSFJDV19NQVNURVIJCShIUkNXX0NJUCB8IEhSQ1dfSVNCMTExIHwgSFJDV19CTVMgfCBcCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFJDV19NT0RDS19IMDExMSkKKwkJCQkJCQkgICAgICBIUkNXX01PRENLX0gwMTExKQogI2VsaWYgZGVmaW5lZChDT05GSUdfMzAwTUh6KQogI2RlZmluZSBDRkdfSFJDV19NQVNURVIJCShIUkNXX0NJUCB8IEhSQ1dfSVNCMTExIHwgSFJDV19CTVMgfCBcCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFJDV19NT0RDS19IMDExMCkKKwkJCQkJCQkgICAgICBIUkNXX01PRENLX0gwMTEwKQogI2Vsc2UKICNkZWZpbmUgQ0ZHX0hSQ1dfTUFTVEVSCQkoSFJDV19DSVAgfCBIUkNXX0lTQjExMSB8IEhSQ1dfQk1TKQogI2VuZGlmCkBAIC0zNjcsNyArMzY3LDcgQEAKICAqIEhJRDEgaGFzIG9ubHkgcmVhZC1vbmx5IGluZm9ybWF0aW9uIC0gbm90aGluZyB0byBzZXQuCiAgKi8KICNkZWZpbmUgQ0ZHX0hJRDBfSU5JVCAgIChISUQwX0lDRXxISUQwX0RDRXxISUQwX0lDRkl8SElEMF9EQ0l8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBISUQwX0lGRU18SElEMF9BQkUpCisJCQkJSElEMF9JRkVNfEhJRDBfQUJFKQogI2RlZmluZSBDRkdfSElEMF9GSU5BTCAgKEhJRDBfSUZFTXxISUQwX0FCRSkKICNkZWZpbmUgQ0ZHX0hJRDIgICAgICAgIDAKIApAQCAtNDA5LDEwICs0MDksMTAgQEAKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQogI2RlZmluZSBDRkdfU1lQQ1IgICAgICAgKFNZUENSX1NXVEN8U1lQQ1JfQk1UfFNZUENSX1BCTUV8U1lQQ1JfTEJNRXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfU1dSSXxTWVBDUl9TV1B8U1lQQ1JfU1dFKQorCQkJIFNZUENSX1NXUkl8U1lQQ1JfU1dQfFNZUENSX1NXRSkKICNlbHNlCiAjZGVmaW5lIENGR19TWVBDUiAgICAgICAoU1lQQ1JfU1dUQ3xTWVBDUl9CTVR8U1lQQ1JfUEJNRXxTWVBDUl9MQk1FfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVBDUl9TV1JJfFNZUENSX1NXUCkKKwkJCSBTWVBDUl9TV1JJfFNZUENSX1NXUCkKICNlbmRpZiAvKiBDT05GSUdfV0FUQ0hET0cgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDkwLDE2ICs0OTAsMTYgQEAKIC8qIEJhbmsgMCAtIEZMQVNICiAgKi8KICNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0gICgoQ0ZHX0ZMQVNIX0JBU0UgJiBCUnhfQkFfTVNLKSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IwX1BSRUxJTSAgKE1FR19UT19BTShDRkdfRkxBU0hfU0laRSkgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzNfQ0xLICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfRUhUUiAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfVFJMWCkKKwkJCSBPUnhHX0NTTlQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX1NDWV8zX0NMSyAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX0VIVFIgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX1RSTFgpCiAKIAkvKiBTRFJBTSBvbiBUUU04MjYwIGNhbiBoYXZlIGVpdGhlciA4IG9yIDkgY29sdW1ucy4KIAkgKiBUaGUgbnVtYmVyIGFmZmVjdHMgY29uZmlndXJhdGlvbiB2YWx1ZXMuCkBAIC01MTEsOSArNTExLDkgQEAKICNkZWZpbmUgQ0ZHX0xTUlQgICAgICAgIDB4MjAKICNpZm5kZWYgQ0ZHX1JBTUJPT1QKICNkZWZpbmUgQ0ZHX0JSMV9QUkVMSU0gICgoQ0ZHX1NEUkFNX0JBU0UgJiBCUnhfQkFfTVNLKSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfU0RSQU1fUCAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfNjQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfU0RSQU1fUCAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IxX1BSRUxJTQlDRkdfT1IxXzhDT0wKIApAQCAtNTIxLDQ4ICs1MjEsNDggQEAKIAkvKiBTRFJBTSBpbml0aWFsaXphdGlvbiB2YWx1ZXMgZm9yIDgtY29sdW1uIGNoaXBzCiAJICovCiAjZGVmaW5lIENGR19PUjFfOENPTCAgICAoKH4oQ0ZHX0dMT0JBTF9TRFJBTV9MSU1JVC0xKSAmIE9SeFNfU0RBTV9NU0spIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19CUERfNCAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19ST1dTVF9QQkkxX0E3ICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19OVU1SXzEyKQorCQkJIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeFNfUk9XU1RfUEJJMV9BNyAgICAgICAgICAgICB8XAorCQkJIE9SeFNfTlVNUl8xMikKIAogI2RlZmluZSBDRkdfUFNETVJfOENPTCAgKFBTRE1SX1BCSSAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1NEQU1fQTE1X0lTX0E1ICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0JTTUFfQTEyX0ExNCAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1NEQTEwX1BCSTFfQTggICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1JGUkNfN19DTEsgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1BSRVRPQUNUXzJXICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0FDVFRPUldfMlcgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0xET1RPUFJFXzFDICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1dSQ18yQyAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0VBTVVYICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0NMXzIpCisJCQkgUFNETVJfU0RBTV9BMTVfSVNfQTUgICAgICAgICAgIHxcCisJCQkgUFNETVJfQlNNQV9BMTJfQTE0ICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfU0RBMTBfUEJJMV9BOCAgICAgICAgICAgIHxcCisJCQkgUFNETVJfUkZSQ183X0NMSyAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfUFJFVE9BQ1RfMlcgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfQUNUVE9SV18yVyAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfTERPVE9QUkVfMUMgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfV1JDXzJDICAgICAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfRUFNVVggICAgICAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfQ0xfMikKIAogCS8qIFNEUkFNIGluaXRpYWxpemF0aW9uIHZhbHVlcyBmb3IgOS1jb2x1bW4gY2hpcHMKIAkgKi8KICNkZWZpbmUgQ0ZHX09SMV85Q09MICAgICgofihDRkdfR0xPQkFMX1NEUkFNX0xJTUlULTEpICYgT1J4U19TREFNX01TSykgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX0JQRF80ICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX1JPV1NUX1BCSTFfQTUgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX05VTVJfMTMpCisJCQkgT1J4U19CUERfNCAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4U19ST1dTVF9QQkkxX0E1ICAgICAgICAgICAgIHxcCisJCQkgT1J4U19OVU1SXzEzKQogCiAjZGVmaW5lIENGR19QU0RNUl85Q09MICAoUFNETVJfUEJJICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfU0RBTV9BMTZfSVNfQTUgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfQlNNQV9BMTJfQTE0ICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfU0RBMTBfUEJJMV9BNyAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfUkZSQ183X0NMSyAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfUFJFVE9BQ1RfMlcgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfQUNUVE9SV18yVyAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfTERPVE9QUkVfMUMgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfV1JDXzJDICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfRUFNVVggICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfQ0xfMikKKwkJCSBQU0RNUl9TREFNX0ExNl9JU19BNSAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9CU01BX0ExMl9BMTQgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9TREExMF9QQkkxX0E3ICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9SRlJDXzdfQ0xLICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9QUkVUT0FDVF8yVyAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9BQ1RUT1JXXzJXICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9MRE9UT1BSRV8xQyAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9XUkNfMkMgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9FQU1VWCAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9DTF8yKQogCiAvKiBCYW5rIDIgLSBMb2NhbCBidXMgU0RSQU0KICAqLwogI2lmZGVmIENGR19JTklUX0xPQ0FMX1NEUkFNCiAjZGVmaW5lIENGR19CUjJfUFJFTElNICAoKFNEUkFNX0JBU0UyX1BSRUxJTSAmIEJSeF9CQV9NU0spIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1BTXzMyICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X01TX1NEUkFNX0wgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1YpCisJCQkgQlJ4X1BTXzMyICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X01TX1NEUkFNX0wgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X1YpCiAKICNkZWZpbmUgQ0ZHX09SMl9QUkVMSU0JQ0ZHX09SMl84Q09MCiAKQEAgLTU3MSw0MCArNTcxLDQwIEBACiAJLyogU0RSQU0gaW5pdGlhbGl6YXRpb24gdmFsdWVzIGZvciA4LWNvbHVtbiBjaGlwcwogCSAqLwogI2RlZmluZSBDRkdfT1IyXzhDT0wgICAgKCh+KENGR19MT0NBTF9TRFJBTV9MSU1JVC0xKSAmIE9SeFNfU0RBTV9NU0spIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19CUERfNCAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19ST1dTVF9QQkkxX0E4ICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19OVU1SXzEyKQorCQkJIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeFNfUk9XU1RfUEJJMV9BOCAgICAgICAgICAgICB8XAorCQkJIE9SeFNfTlVNUl8xMikKIAogI2RlZmluZSBDRkdfTFNETVJfOENPTCAgKFBTRE1SX1BCSSAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1NEQU1fQTE1X0lTX0E1ICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0JTTUFfQTEzX0ExNSAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1NEQTEwX1BCSTFfQTkgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1JGUkNfN19DTEsgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1BSRVRPQUNUXzJXICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0FDVFRPUldfMlcgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0JMICAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0xET1RPUFJFXzFDICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1dSQ18yQyAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0NMXzIpCisJCQkgUFNETVJfU0RBTV9BMTVfSVNfQTUgICAgICAgICAgIHxcCisJCQkgUFNETVJfQlNNQV9BMTNfQTE1ICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfU0RBMTBfUEJJMV9BOSAgICAgICAgICAgIHxcCisJCQkgUFNETVJfUkZSQ183X0NMSyAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfUFJFVE9BQ1RfMlcgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfQUNUVE9SV18yVyAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfQkwgICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfTERPVE9QUkVfMUMgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfV1JDXzJDICAgICAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfQ0xfMikKIAogCS8qIFNEUkFNIGluaXRpYWxpemF0aW9uIHZhbHVlcyBmb3IgOS1jb2x1bW4gY2hpcHMKIAkgKi8KICNkZWZpbmUgQ0ZHX09SMl85Q09MICAgICgofihDRkdfTE9DQUxfU0RSQU1fTElNSVQtMSkgJiBPUnhTX1NEQU1fTVNLKSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfUk9XU1RfUEJJMV9BNiAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfTlVNUl8xMykKKwkJCSBPUnhTX0JQRF80ICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhTX1JPV1NUX1BCSTFfQTYgICAgICAgICAgICAgfFwKKwkJCSBPUnhTX05VTVJfMTMpCiAKICNkZWZpbmUgQ0ZHX0xTRE1SXzlDT0wgIChQU0RNUl9QQkkgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9TREFNX0ExNl9JU19BNSAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9CU01BX0ExM19BMTUgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9TREExMF9QQkkxX0E4ICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9SRlJDXzdfQ0xLICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9QUkVUT0FDVF8yVyAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9BQ1RUT1JXXzJXICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9CTCAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9MRE9UT1BSRV8xQyAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9XUkNfMkMgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9DTF8yKQorCQkJIFBTRE1SX1NEQU1fQTE2X0lTX0E1ICAgICAgICAgICB8XAorCQkJIFBTRE1SX0JTTUFfQTEzX0ExNSAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX1NEQTEwX1BCSTFfQTggICAgICAgICAgICB8XAorCQkJIFBTRE1SX1JGUkNfN19DTEsgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX1BSRVRPQUNUXzJXICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0FDVFRPUldfMlcgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0JMICAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0xET1RPUFJFXzFDICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX1dSQ18yQyAgICAgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0NMXzIpCiAKICNlbmRpZiAvKiBDRkdfSU5JVF9MT0NBTF9TRFJBTSAqLwogCkBAIC03MDgsNCArNzA4LDMgQEAKIAogCiAjZW5kaWYJLyogX19DT05GSUdfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODI2MC5oIGIvaW5jbHVkZS9jb25maWdzL1RRTTgyNjAuaAppbmRleCAxZWE5YTVlLi4yOTYxYTZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVFFNODI2MC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9UUU04MjYwLmgKQEAgLTM5NCw3ICszOTQsNyBAQAogICogSElEMSBoYXMgb25seSByZWFkLW9ubHkgaW5mb3JtYXRpb24gLSBub3RoaW5nIHRvIHNldC4KICAqLwogI2RlZmluZSBDRkdfSElEMF9JTklUICAgKEhJRDBfSUNFfEhJRDBfRENFfEhJRDBfSUNGSXxISUQwX0RDSXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJRDBfSUZFTXxISUQwX0FCRSkKKwkJCQlISUQwX0lGRU18SElEMF9BQkUpCiAjZGVmaW5lIENGR19ISUQwX0ZJTkFMICAoSElEMF9JRkVNfEhJRDBfQUJFKQogI2RlZmluZSBDRkdfSElEMiAgICAgICAgMAogCkBAIC00MzYsMTAgKzQzNiwxMCBAQAogICovCiAjaWYgZGVmaW5lZChDT05GSUdfV0FUQ0hET0cpCiAjZGVmaW5lIENGR19TWVBDUiAgICAgICAoU1lQQ1JfU1dUQ3xTWVBDUl9CTVR8U1lQQ1JfUEJNRXxTWVBDUl9MQk1FfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVBDUl9TV1JJfFNZUENSX1NXUHxTWVBDUl9TV0UpCisJCQkgU1lQQ1JfU1dSSXxTWVBDUl9TV1B8U1lQQ1JfU1dFKQogI2Vsc2UKICNkZWZpbmUgQ0ZHX1NZUENSICAgICAgIChTWVBDUl9TV1RDfFNZUENSX0JNVHxTWVBDUl9QQk1FfFNZUENSX0xCTUV8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZUENSX1NXUkl8U1lQQ1JfU1dQKQorCQkJIFNZUENSX1NXUkl8U1lQQ1JfU1dQKQogI2VuZGlmIC8qIENPTkZJR19XQVRDSERPRyAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MTcsMTYgKzUxNywxNiBAQAogLyogQmFuayAwIC0gRkxBU0gKICAqLwogI2RlZmluZSBDRkdfQlIwX1BSRUxJTSAgKChDRkdfRkxBU0hfQkFTRSAmIEJSeF9CQV9NU0spICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9QU182NCAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9WKQorCQkJIEJSeF9QU182NCAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9WKQogCiAjZGVmaW5lIENGR19PUjBfUFJFTElNICAoTUVHX1RPX0FNKENGR19GTEFTSF9TSVpFKSAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19DU05UICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TQ1lfM19DTEsgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19FSFRSICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19UUkxYKQorCQkJIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfU0NZXzNfQ0xLICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfRUhUUiAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfVFJMWCkKIAogCS8qIFNEUkFNIG9uIFRRTTgyNjAgY2FuIGhhdmUgZWl0aGVyIDggb3IgOSBjb2x1bW5zLgogCSAqIFRoZSBudW1iZXIgYWZmZWN0cyBjb25maWd1cmF0aW9uIHZhbHVlcy4KQEAgLTUzOCw5ICs1MzgsOSBAQAogI2RlZmluZSBDRkdfTFNSVCAgICAgICAgMHgyMAogI2lmbmRlZiBDRkdfUkFNQk9PVAogI2RlZmluZSBDRkdfQlIxX1BSRUxJTSAgKChDRkdfU0RSQU1fQkFTRSAmIEJSeF9CQV9NU0spICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9QU182NCAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9NU19TRFJBTV9QICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9WKQorCQkJIEJSeF9QU182NCAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9NU19TRFJBTV9QICAgICAgICAgICAgICAgICB8XAorCQkJIEJSeF9WKQogCiAjZGVmaW5lIENGR19PUjFfUFJFTElNCUNGR19PUjFfOENPTAogCkBAIC01NDgsNDggKzU0OCw0OCBAQAogCS8qIFNEUkFNIGluaXRpYWxpemF0aW9uIHZhbHVlcyBmb3IgOC1jb2x1bW4gY2hpcHMKIAkgKi8KICNkZWZpbmUgQ0ZHX09SMV84Q09MICAgICgofihDRkdfR0xPQkFMX1NEUkFNX0xJTUlULTEpICYgT1J4U19TREFNX01TSykgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX0JQRF80ICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX1JPV1NUX1BCSTFfQTcgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX05VTVJfMTIpCisJCQkgT1J4U19CUERfNCAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4U19ST1dTVF9QQkkxX0E3ICAgICAgICAgICAgIHxcCisJCQkgT1J4U19OVU1SXzEyKQogCiAjZGVmaW5lIENGR19QU0RNUl84Q09MICAoUFNETVJfUEJJICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfU0RBTV9BMTVfSVNfQTUgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfQlNNQV9BMTJfQTE0ICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfU0RBMTBfUEJJMV9BOCAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfUkZSQ183X0NMSyAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfUFJFVE9BQ1RfMlcgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfQUNUVE9SV18yVyAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfTERPVE9QUkVfMUMgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfV1JDXzJDICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfRUFNVVggICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfQ0xfMikKKwkJCSBQU0RNUl9TREFNX0ExNV9JU19BNSAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9CU01BX0ExMl9BMTQgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9TREExMF9QQkkxX0E4ICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9SRlJDXzdfQ0xLICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9QUkVUT0FDVF8yVyAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9BQ1RUT1JXXzJXICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9MRE9UT1BSRV8xQyAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9XUkNfMkMgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9FQU1VWCAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9DTF8yKQogCiAJLyogU0RSQU0gaW5pdGlhbGl6YXRpb24gdmFsdWVzIGZvciA5LWNvbHVtbiBjaGlwcwogCSAqLwogI2RlZmluZSBDRkdfT1IxXzlDT0wgICAgKCh+KENGR19HTE9CQUxfU0RSQU1fTElNSVQtMSkgJiBPUnhTX1NEQU1fTVNLKSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfUk9XU1RfUEJJMV9BNSAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfTlVNUl8xMykKKwkJCSBPUnhTX0JQRF80ICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhTX1JPV1NUX1BCSTFfQTUgICAgICAgICAgICAgfFwKKwkJCSBPUnhTX05VTVJfMTMpCiAKICNkZWZpbmUgQ0ZHX1BTRE1SXzlDT0wgIChQU0RNUl9QQkkgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9TREFNX0ExNl9JU19BNSAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9CU01BX0ExMl9BMTQgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9TREExMF9QQkkxX0E3ICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9SRlJDXzdfQ0xLICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9QUkVUT0FDVF8yVyAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9BQ1RUT1JXXzJXICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9MRE9UT1BSRV8xQyAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9XUkNfMkMgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9FQU1VWCAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQU0RNUl9DTF8yKQorCQkJIFBTRE1SX1NEQU1fQTE2X0lTX0E1ICAgICAgICAgICB8XAorCQkJIFBTRE1SX0JTTUFfQTEyX0ExNCAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX1NEQTEwX1BCSTFfQTcgICAgICAgICAgICB8XAorCQkJIFBTRE1SX1JGUkNfN19DTEsgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX1BSRVRPQUNUXzJXICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0FDVFRPUldfMlcgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0xET1RPUFJFXzFDICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX1dSQ18yQyAgICAgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0VBTVVYICAgICAgICAgICAgICAgICAgICB8XAorCQkJIFBTRE1SX0NMXzIpCiAKIC8qIEJhbmsgMiAtIExvY2FsIGJ1cyBTRFJBTQogICovCiAjaWZkZWYgQ0ZHX0lOSVRfTE9DQUxfU0RSQU0KICNkZWZpbmUgQ0ZHX0JSMl9QUkVMSU0gICgoU0RSQU1fQkFTRTJfUFJFTElNICYgQlJ4X0JBX01TSykgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfMzIgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfU0RSQU1fTCAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfMzIgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfU0RSQU1fTCAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IyX1BSRUxJTQlDRkdfT1IyXzhDT0wKIApAQCAtNTk4LDQwICs1OTgsNDAgQEAKIAkvKiBTRFJBTSBpbml0aWFsaXphdGlvbiB2YWx1ZXMgZm9yIDgtY29sdW1uIGNoaXBzCiAJICovCiAjZGVmaW5lIENGR19PUjJfOENPTCAgICAoKH4oQ0ZHX0xPQ0FMX1NEUkFNX0xJTUlULTEpICYgT1J4U19TREFNX01TSykgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX0JQRF80ICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX1JPV1NUX1BCSTFfQTggICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX05VTVJfMTIpCisJCQkgT1J4U19CUERfNCAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4U19ST1dTVF9QQkkxX0E4ICAgICAgICAgICAgIHxcCisJCQkgT1J4U19OVU1SXzEyKQogCiAjZGVmaW5lIENGR19MU0RNUl84Q09MICAoUFNETVJfUEJJICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfU0RBTV9BMTVfSVNfQTUgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfQlNNQV9BMTNfQTE1ICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfU0RBMTBfUEJJMV9BOSAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfUkZSQ183X0NMSyAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfUFJFVE9BQ1RfMlcgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfQUNUVE9SV18yVyAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfQkwgICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfTERPVE9QUkVfMUMgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfV1JDXzJDICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgUFNETVJfQ0xfMikKKwkJCSBQU0RNUl9TREFNX0ExNV9JU19BNSAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9CU01BX0ExM19BMTUgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9TREExMF9QQkkxX0E5ICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9SRlJDXzdfQ0xLICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9QUkVUT0FDVF8yVyAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9BQ1RUT1JXXzJXICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9CTCAgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9MRE9UT1BSRV8xQyAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9XUkNfMkMgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBQU0RNUl9DTF8yKQogCiAJLyogU0RSQU0gaW5pdGlhbGl6YXRpb24gdmFsdWVzIGZvciA5LWNvbHVtbiBjaGlwcwogCSAqLwogI2RlZmluZSBDRkdfT1IyXzlDT0wgICAgKCh+KENGR19MT0NBTF9TRFJBTV9MSU1JVC0xKSAmIE9SeFNfU0RBTV9NU0spIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19CUERfNCAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19ST1dTVF9QQkkxX0E2ICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19OVU1SXzEzKQorCQkJIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeFNfUk9XU1RfUEJJMV9BNiAgICAgICAgICAgICB8XAorCQkJIE9SeFNfTlVNUl8xMykKIAogI2RlZmluZSBDRkdfTFNETVJfOUNPTCAgKFBTRE1SX1BCSSAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1NEQU1fQTE2X0lTX0E1ICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0JTTUFfQTEzX0ExNSAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1NEQTEwX1BCSTFfQTggICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1JGUkNfN19DTEsgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1BSRVRPQUNUXzJXICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0FDVFRPUldfMlcgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0JMICAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0xET1RPUFJFXzFDICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1dSQ18yQyAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0NMXzIpCisJCQkgUFNETVJfU0RBTV9BMTZfSVNfQTUgICAgICAgICAgIHxcCisJCQkgUFNETVJfQlNNQV9BMTNfQTE1ICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfU0RBMTBfUEJJMV9BOCAgICAgICAgICAgIHxcCisJCQkgUFNETVJfUkZSQ183X0NMSyAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfUFJFVE9BQ1RfMlcgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfQUNUVE9SV18yVyAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfQkwgICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfTERPVE9QUkVfMUMgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfV1JDXzJDICAgICAgICAgICAgICAgICAgIHxcCisJCQkgUFNETVJfQ0xfMikKIAogI2VuZGlmIC8qIENGR19JTklUX0xPQ0FMX1NEUkFNICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9XN09MTUMuaCBiL2luY2x1ZGUvY29uZmlncy9XN09MTUMuaAppbmRleCBiNTYxMGM5Li43YWUxYzcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvVzdPTE1DLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL1c3T0xNQy5oCkBAIC0zMjMsNCArMzIzLDMgQEAKICNkZWZpbmUgQ09ORklHX0ZQR0FTX0JBTktfU0laRQkweDAwMTAwMDAwTAkvKiBGUEdBcycgbW1hcCBiYW5rIHNpemUJKi8KIAogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1dBTE5VVDQwNS5oIGIvaW5jbHVkZS9jb25maWdzL1dBTE5VVDQwNS5oCmluZGV4IDM2Njc0ZGIuLmNkYzlhM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9XQUxOVVQ0MDUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvV0FMTlVUNDA1LmgKQEAgLTE2MSw3ICsxNjEsNyBAQAogI2RlZmluZSBDT05GSUdfUENJCQkJLyogaW5jbHVkZSBwY2kgc3VwcG9ydAkgICAgICAgICovCiAjZGVmaW5lIENPTkZJR19QQ0lfSE9TVAlQQ0lfSE9TVF9GT1JDRSAgLyogc2VsZWN0IHBjaSBob3N0IGZ1bmN0aW9uICAgICAqLwogI2RlZmluZSBDT05GSUdfUENJX1BOUAkJCS8qIGRvIHBjaSBwbHVnLWFuZC1wbGF5ICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNvdXJjZSBjb25maWd1cmF0aW9uICAgICAgICovCisJCQkJCS8qIHJlc291cmNlIGNvbmZpZ3VyYXRpb24gICAgICAgKi8KIAogI2RlZmluZSBDRkdfUENJX1NVQlNZU19WRU5ET1JJRCAweDAwMDAgIC8qIFBDSSBWZW5kb3IgSUQ6IHRvLWRvISEhICAgICAgKi8KICNkZWZpbmUgQ0ZHX1BDSV9TVUJTWVNfREVWSUNFSUQgMHgwMDAwICAvKiBQQ0kgRGV2aWNlIElEOiB0by1kbyEhISAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvWlVNQS5oIGIvaW5jbHVkZS9jb25maWdzL1pVTUEuaAppbmRleCA1NDFjZjkyLi4zZmRlMjM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvWlVNQS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9aVU1BLmgKQEAgLTIwNyw3ICsyMDcsNiBAQAogCS8qICAzfCAwfC4uLi4gLi58IDF8IDUgfCAgNSB8ICA1IHwgICA1IHwgICA4IHwgNSAgKi8KIAogCi0KICNkZWZpbmUgQ0ZHXzhCSVRfQk9PVF9QQVIJMHhjMDBiNWU3YwogCiAjZGVmaW5lIENGR19NUFBfQ09OVFJPTF8wCTB4MDAwMDc3NzcgLyogR1BQWzc6NF0gOiBSRVEwWzE6MF0gR05UMFsxOjBdICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXQ5MXJtOTIwMGRrLmgKaW5kZXggZTM4Mjk3Ny4uNDE1YjdmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2F0OTFybTkyMDBkay5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9hdDkxcm05MjAwZGsuaApAQCAtNDksMTkgKzQ5LDE5IEBACiAKICN1bmRlZglDT05GSUdfTU9ERU1fU1VQUE9SVAkJLyogZGlzYWJsZSBtb2RlbSBpbml0aWFsaXphdGlvbiBzdHVmZiAqLwogCi0jZGVmaW5lIENPTkZJR19CT09UREVMQVkgICAgICAzICAKKyNkZWZpbmUgQ09ORklHX0JPT1RERUxBWSAgICAgIDMKIC8qICNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUgIDEgKi8KIAogI2RlZmluZSBDT05GSUdfQ09NTUFORFMJCVwKIAkJICAgICAgICgoQ09ORklHX0NNRF9ERkwJfCBcCiAJCQlDRkdfQ01EX0RIQ1AgKSAmIFwKLSAgICAgICAgICAgICAgICAgICAgICB+KENGR19DTURfQkRJIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0NNRF9JTUkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBDRkdfQ01EX0FVVE9TQ1JJUFQgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBDRkdfQ01EX0ZQR0EgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBDRkdfQ01EX01JU0MgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBDRkdfQ01EX0xPQURTICkpCi0gICAgICAgICAgICAgICAgICAgICAKKwkJICAgICAgfihDRkdfQ01EX0JESSB8IFwKKwkJCUNGR19DTURfSU1JIHwgXAorCQkJQ0ZHX0NNRF9BVVRPU0NSSVBUIHwgXAorCQkJQ0ZHX0NNRF9GUEdBIHwgXAorCQkJQ0ZHX0NNRF9NSVNDIHwgXAorCQkJQ0ZHX0NNRF9MT0FEUyApKQorCiAvKiB0aGlzIG11c3QgYmUgaW5jbHVkZWQgQUZURVIgdGhlIGRlZmluaXRpb24gb2YgQ09ORklHX0NPTU1BTkRTIChpZiBhbnkpICovCiAjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CiAKQEAgLTE1NSw3ICsxNTUsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUJQ0ZHX0haIEFUOTFDX01BU1RFUl9DTE9DSy8yICAvKiBBVDkxQ19UQzBfQ01SIGlzIGltcGxpY2l0bHkgc2V0IHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVQ5MUNfVENfVElNRVJfRElWMV9DTE9DSyAqLworCQkJCQlBVDkxQ19UQ19USU1FUl9ESVYxX0NMT0NLICovCiAKICNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMzIqMTAyNCkJLyogcmVndWxhciBzdGFjayAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYXRjLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXRjLmgKaW5kZXggMWZiNmVkOC4uMjc1MTI0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2F0Yy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9hdGMuaApAQCAtMjk5LDcgKzI5OSw3IEBACiAgKiBISUQxIGhhcyBvbmx5IHJlYWQtb25seSBpbmZvcm1hdGlvbiAtIG5vdGhpbmcgdG8gc2V0LgogICovCiAjZGVmaW5lIENGR19ISUQwX0lOSVQgICAoSElEMF9JQ0V8SElEMF9EQ0V8SElEMF9JQ0ZJfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBISUQwX0RDSXxISUQwX0lGRU18SElEMF9BQkUpCisJCQkgSElEMF9EQ0l8SElEMF9JRkVNfEhJRDBfQUJFKQogI2RlZmluZSBDRkdfSElEMF9GSU5BTCAgKEhJRDBfSUZFTXxISUQwX0FCRSkKICNkZWZpbmUgQ0ZHX0hJRDIgICAgICAgIDAKIApAQCAtMzMyLDEwICszMzIsMTAgQEAKICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQogI2RlZmluZSBDRkdfU1lQQ1IgICAgICAgKFNZUENSX1NXVEN8U1lQQ1JfQk1UfFNZUENSX1BCTUV8U1lQQ1JfTEJNRXxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfU1dSSXxTWVBDUl9TV1B8U1lQQ1JfU1dFKQorCQkJIFNZUENSX1NXUkl8U1lQQ1JfU1dQfFNZUENSX1NXRSkKICNlbHNlCiAjZGVmaW5lIENGR19TWVBDUiAgICAgICAoU1lQQ1JfU1dUQ3xTWVBDUl9CTVR8U1lQQ1JfUEJNRXxTWVBDUl9MQk1FfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVBDUl9TV1JJfFNZUENSX1NXUCkKKwkJCSBTWVBDUl9TV1JJfFNZUENSX1NXUCkKICNlbmRpZiAvKiBDT05GSUdfV0FUQ0hET0cgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDM3LDI0ICs0MzcsMjQgQEAKIC8qIEJhbmsgMCAtIEZMQVNICiAgKi8KICNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0gICgoQ0ZHX0ZMQVNIX0JBU0UgJiBCUnhfQkFfTVNLKSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfMTYgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfMTYgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1IwX1BSRUxJTSAgKFAyU1pfVE9fQU0oQ0ZHX0ZMQVNIX1NJWkUpICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzNfQ0xLICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFVfRUhUUl84SURMRSkKKwkJCSBPUnhHX0NTTlQgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhHX1NDWV8zX0NMSyAgICAgICAgICAgICAgICAgfFwKKwkJCSBPUnhVX0VIVFJfOElETEUpCiAKIAogLyogQmFuayAyIC0gNjB4IGJ1cyBTRFJBTQogICovCiAjaWZuZGVmIENGR19SQU1CT09UCiAjZGVmaW5lIENGR19CUjJfUFJFTElNICAoKENGR19TRFJBTV9CQVNFICYgQlJ4X0JBX01TSykgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1BTXzY0ICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X01TX1NEUkFNX1AgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1YpCisJCQkgQlJ4X1BTXzY0ICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X01TX1NEUkFNX1AgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X1YpCiAKICNkZWZpbmUgQ0ZHX09SMl9QUkVMSU0JIENGR19PUjJfOENPTAogCkBAIC00NjIsMTIgKzQ2MiwxMiBAQAogI2VuZGlmIC8qIENGR19SQU1CT09UICovCiAKICNkZWZpbmUgQ0ZHX0JSNF9QUkVMSU0gICgoUlRDX0JBU0VfQUREUiAmIEJSeF9CQV9NU0spICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfOCAgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfVVBNQSAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSBCUnhfUFNfOCAgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfTVNfVVBNQSAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSBCUnhfVikKIAogI2RlZmluZSBDRkdfT1I0X1BSRUxJTSAgKE9SeFVfQU1fTVNLIHwgT1J4VV9CSSkKLQkJCQkJCQkJCSAgIAorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQQ01DSUEgc3R1ZmYKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9jbWlfbXBjNXh4LmggYi9pbmNsdWRlL2NvbmZpZ3MvY21pX21wYzV4eC5oCmluZGV4IGU4YjNlYjUuLmU0NTk5MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9jbWlfbXBjNXh4LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2NtaV9tcGM1eHguaApAQCAtMTcsMTMgKzE3LDEzIEBACiAgKgogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCAKKyAqIEZvdW5kYXRpb24sCiAgKi8KIAogLyoKICAqIEZpbGU6CQljbWlfbXBjNXh4LmgKLSAqIAotICogRGlzY3JpcHRpb246CQlDb25maWcgaGVhZGVyIGZpbGUgZm9yIGNtaSAKKyAqCisgKiBEaXNjcmlwdGlvbjoJCUNvbmZpZyBoZWFkZXIgZmlsZSBmb3IgY21pCiAgKiAJCQlib2FyZCAgdXNpbmcgYW4gTVBDNXh4IENQVQogICoKICAqLwpAQCAtNjMsMTIgKzYzLDEyIEBACiAKICNkZWZpbmUgQ09ORklHX1dBVENIRE9HCQkJCS8qIHR1cm4gb24gcGxhdGZvcm0gc3BlY2lmaWMgd2F0Y2hkb2cgCSovCiAKLSNkZWZpbmUgQ09ORklHX1NUQVRVU19MRUQJMQkJLyogRW5hYmxlIHN0YXR1cyBsZWQgKi8gCisjZGVmaW5lIENPTkZJR19TVEFUVVNfTEVECTEJCS8qIEVuYWJsZSBzdGF0dXMgbGVkICovCiAKICNkZWZpbmUgQ09ORklHX0xPQURTX0VDSE8JMQkJLyogRWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkICovCiAKIC8qCi0gKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zIAorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucwogICovCiAKICNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLwpAQCAtMTA0LDcgKzEwNCw3IEBACiAvKgogICogRGVmaW5pdGlvbnMgZm9yIGluaXRpYWwgc3RhY2sgcG9pbnRlciBhbmQgZGF0YSBhcmVhCiAgKi8KLSNkZWZpbmUgQ0ZHX0lOSVRfUkFNX0FERFIJKENGR19JTU1SICsgMHgwMDNmOTgwMCkgICAgICAJCS8qIFBoeXNpY2FsIHN0YXJ0IGFkcmVzcyBvZiBpbnRlcm5hbCBNUEM1NTUgd3JpdGFibGUgUkFNICovICAgICAgIAorI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUgkoQ0ZHX0lNTVIgKyAweDAwM2Y5ODAwKSAgICAgIAkJLyogUGh5c2ljYWwgc3RhcnQgYWRyZXNzIG9mIGludGVybmFsIE1QQzU1NSB3cml0YWJsZSBSQU0gKi8KICNkZWZpbmUJQ0ZHX0lOSVRfUkFNX0VORAkoQ0ZHX0lNTVIgKyAweDAwM2ZmZmZmKSAgICAgICAJCS8qIFBoeXNpY2FsIGVuZCBhZHJlc3Mgb2YgaW50ZXJuYWwgTVBDNTU1IHVzZWQgUkFNIGFyZWEJKi8KICNkZWZpbmUJQ0ZHX0dCTF9EQVRBX1NJWkUJNjQJCQkJCS8qIFNpemUgaW4gYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZ2xvYmFsIGRhdGEgKi8KICNkZWZpbmUgQ0ZHX0dCTF9EQVRBX09GRlNFVAkoKENGR19JTklUX1JBTV9FTkQgLSBDRkdfSU5JVF9SQU1fQUREUikgLSBDRkdfR0JMX0RBVEFfU0laRSkgLyogT2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiByYW0gKi8KQEAgLTEzNSw5ICsxMzUsOSBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEZMQVNIIG9yZ2FuaXphdGlvbiAKKyAqIEZMQVNIIG9yZ2FuaXphdGlvbgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogCisgKgogICovCiAKICNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkxCQkvKiBNYXggbnVtYmVyIG9mIG1lbW9yeSBiYW5rcwkJKi8KQEAgLTE1NCw3ICsxNTQsNyBAQAogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNZUENSIC0gU3lzdGVtIFByb3RlY3Rpb24gQ29udHJvbAkJCQorICogU1lQQ1IgLSBTeXN0ZW0gUHJvdGVjdGlvbiBDb250cm9sCiAgKiBTWVBDUiBjYW4gb25seSBiZSB3cml0dGVuIG9uY2UgYWZ0ZXIgcmVzZXQhCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBTVyBXYXRjaGRvZyBmcmVlemUKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQkJIFNZUENSX1NXRSB8IFNZUENSX1NXUkl8IFNZUENSX1NXUCkKICNlbHNlCiAjZGVmaW5lIENGR19TWVBDUgkoU1lQQ1JfU1dUQyB8IFNZUENSX0JNVCB8IFNZUENSX0JNRSB8IFNZUENSX1NXRiB8IFwKLQkJCSBTWVBDUl9TV1ApCQkKKwkJCSBTWVBDUl9TV1ApCiAjZW5kaWYJLyogQ09ORklHX1dBVENIRE9HICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIwMiwzMCArMjAyLDMwIEBACiAgKiBQTFBSQ1IgLSBQTEwsIExvdy1Qb3dlciwgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNldCBhbGwgYml0cyB0byA0MCBNaHoKLSAqIAorICoKICAqLwogI2RlZmluZSBDRkdfT1NDX0NMSyAgIAkoKHVpbnQpNDAwMDAwMCkgCS8qIE9zY2lsbGF0b3IgY2xvY2sgaXMgNE1IeiAJKi8KICNkZWZpbmUgQ0ZHX1BMUFJDUgkoUExQUkNSX01GXzkgfCBQTFBSQ1JfRElWRl8wKQotCQorCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFVNQ1IgLSBVSU1CIE1vZHVsZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAKKyAqCiAgKi8KICNkZWZpbmUgQ0ZHX1VNQ1IJKFVNQ1JfRlNQRUVEKSAJCS8qIElNQiBjbG9jayBzYW1lIGFzIFUtYnVzIAkqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJQ1RSTCAtIEktQnVzIFN1cHBvcnQgQ29udHJvbCBSZWdpc3RlcgogICovCi0jZGVmaW5lIENGR19JQ1RSTAkoSUNUUkxfSVNDVF9TRVJfNykgCS8qIFRha2Ugb3V0IG9mIHNlcmlhbGl6ZWQgbW9kZSAJKi8gCisjZGVmaW5lIENGR19JQ1RSTAkoSUNUUkxfSVNDVF9TRVJfNykgCS8qIFRha2Ugb3V0IG9mIHNlcmlhbGl6ZWQgbW9kZSAJKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVVNJVSAtIE1lbW9yeSBDb250cm9sbGVyIFJlZ2lzdGVyCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLSNkZWZpbmUgQ0ZHX0JSMF9QUkVMSU0JCShDRkdfRkxBU0hfQkFTRSB8IEJSX1YgfCBCUl9CSSB8IEJSX1BTXzE2KQkJCisjZGVmaW5lIENGR19CUjBfUFJFTElNCQkoQ0ZHX0ZMQVNIX0JBU0UgfCBCUl9WIHwgQlJfQkkgfCBCUl9QU18xNikKICNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0JCShPUl9BRERSX01LX0ZGIHwgT1JfU0NZXzMpCiAjZGVmaW5lIENGR19CUjFfUFJFTElNCQkoQU5ZQlVTX0JBU0UpCiAjZGVmaW5lIENGR19PUjFfUFJFTElNCQkoT1JfQUREUl9NS19GRkZGIHwgT1JfU0NZXzEgfCBPUl9FVEhSKQpAQCAtMjM4LDcgKzIzOCw3IEBACiAjZGVmaW5lIEZMQVNIX0JBU0UwX1BSRUxJTQlDRkdfRkxBU0hfQkFTRQkvKiBXZSBkb24ndCByZWFsaWduIHRoZSBmbGFzaAkqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBERVIgLSBUaW1lciBEZWNyZW1lbnRlciAKKyAqIERFUiAtIFRpbWVyIERlY3JlbWVudGVyCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBJbml0aWFsaXNlIHRvIHplcm8KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2NyYWRsZS5oIGIvaW5jbHVkZS9jb25maWdzL2NyYWRsZS5oCmluZGV4IDVhMjE1ZTQuLjEzOTk2ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9jcmFkbGUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvY3JhZGxlLmgKQEAgLTEwMCw3ICsxMDAsNyBAQAogI2RlZmluZSBDRkdfSFogICAgICAgICAgICAgICAgICAzNjg2NDAwICAgICAgICAgLyogaW5jcmVtZW50ZXIgZnJlcTogMy42ODY0IE1IeiAqLwogI2RlZmluZSBDRkdfQ1BVU1BFRUQgICAgICAgICAgICAweDE0MSAgICAgICAgICAgLyogc2V0IGNvcmUgY2xvY2sgdG8gMjAwLzIwMC8xMDAgTUh6ICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZhbGlkIGJhdWRyYXRlcyAqLworCQkJCQkJLyogdmFsaWQgYmF1ZHJhdGVzICovCiAjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgICAgIHsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9jc2IyMjYuaCBiL2luY2x1ZGUvY29uZmlncy9jc2IyMjYuaAppbmRleCBhMjU3YjgyLi44Nzk2MDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvY3NiMjI2LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2NzYjIyNi5oCkBAIC0xMjIsNyArMTIyLDcgQEAKIAogI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCTB4MjAwMDAJCS8qIDEyOCBLaUIgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFsaWQgYmF1ZHJhdGVzICovCisJCQkJCQkvKiB2YWxpZCBiYXVkcmF0ZXMgKi8KICNkZWZpbmUgQ0ZHX0JBVURSQVRFX1RBQkxFICAgICAgeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2VwODI2MC5oIGIvaW5jbHVkZS9jb25maWdzL2VwODI2MC5oCmluZGV4IGI5MzNiZTkuLmYxYjJjYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9lcDgyNjAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvZXA4MjYwLmgKQEAgLTM3MCwxMSArMzcwLDExIEBACiAvKiBnZXQgdGhlIEhSQ1cgSVNCIGZpZWxkIGZyb20gQ0ZHX0lNTVIgKi8KIC8qCiAjZGVmaW5lIENGR19TQkNfSFJDV19JTU1SICggKChDRkdfSU1NUiAmIDB4MTAwMDAwMDApID4+IDEwKSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0ZHX0lNTVIgJiAweDAxMDAwMDAwKSA+PiA3KSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENGR19JTU1SICYgMHgwMDEwMDAwMCkgPj4gNCkgKQorCQkJICAgICgoQ0ZHX0lNTVIgJiAweDAxMDAwMDAwKSA+PiA3KSAgfFwKKwkJCSAgICAoKENGR19JTU1SICYgMHgwMDEwMDAwMCkgPj4gNCkgKQogCiAjZGVmaW5lIENGR19IUkNXX01BU1RFUiAoSFJDV19FQk0gICAgICAgICAgICAgICAgfFwKLQkJICAgICAgICAgSFJDV19MMkNQQzAxICAgICAgICAgICAgfFwKKwkJCSBIUkNXX0wyQ1BDMDEgICAgICAgICAgICB8XAogCQkJIENGR19TQkNfSFJDV19JTU1SICAgICAgIHxcCiAJCQkgSFJDV19BUFBDMTAgICAgICAgICAgICAgfFwKIAkJCSBIUkNXX0NTMTBQQzAxICAgICAgICAgICB8XApAQCAtNTEyLDggKzUxMiw4IEBACiAgKi8KIAogI2RlZmluZSBDRkdfU0lVTUNSICAgICAgKFNJVU1DUl9MMkNQQzAxIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU0lVTUNSX0FQUEMxMCAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTSVVNQ1JfQ1MxMFBDMDEpCisJCQkgU0lVTUNSX0FQUEMxMCAgfFwKKwkJCSBTSVVNQ1JfQ1MxMFBDMDEpCiAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTI0LDE1ICs1MjQsMTUgQEAKICAqLwogI2lmZGVmIENGR19MU0RSQU0KICNkZWZpbmUgQ0ZHX1NZUENSICAgICAgIChTWVBDUl9TV1RDIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfQk1UICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZUENSX1BCTUUgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVBDUl9MQk1FIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfU1dQKQorCQkJIFNZUENSX0JNVCAgfFwKKwkJCSBTWVBDUl9QQk1FIHxcCisJCQkgU1lQQ1JfTEJNRSB8XAorCQkJIFNZUENSX1NXUCkKICNlbHNlCiAjZGVmaW5lIENGR19TWVBDUiAgICAgICAoU1lQQ1JfU1dUQyB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFNZUENSX0JNVCAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTWVBDUl9QQk1FIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgU1lQQ1JfU1dQKQorCQkJIFNZUENSX0JNVCAgfFwKKwkJCSBTWVBDUl9QQk1FIHxcCisJCQkgU1lQQ1JfU1dQKQogI2VuZGlmCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBUTUNOVFNDIC0gVGltZSBDb3VudGVyIFN0YXR1cyBhbmQgQ29udHJvbCAgICAgICAgICAgICAgICAgICAgIDQtNDAKQEAgLTU0MSw5ICs1NDEsOSBAQAogICogYW5kIGVuYWJsZSBUaW1lIENvdW50ZXIKICAqLwogI2RlZmluZSBDRkdfVE1DTlRTQyAgICAgKFRNQ05UU0NfU0VDIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgVE1DTlRTQ19BTFIgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUTUNOVFNDX1RDRiB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFRNQ05UU0NfVENFKQorCQkJIFRNQ05UU0NfQUxSIHxcCisJCQkgVE1DTlRTQ19UQ0YgfFwKKwkJCSBUTUNOVFNDX1RDRSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogUElTQ1IgLSBQZXJpb2RpYyBJbnRlcnJ1cHQgU3RhdHVzIGFuZCBDb250cm9sICAgICAgICAgICAgICAgICA0LTQyCkBAIC01NTIsOCArNTUyLDggQEAKICAqIFBlcmlvZGljIHRpbWVyCiAgKi8KIC8qI2RlZmluZSBDRkdfUElTQ1IgICAgICAgKFBJU0NSX1BTICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBJU0NSX1BURiB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIFBJU0NSX1BURSkqLworCQkJIFBJU0NSX1BURiB8XAorCQkJIFBJU0NSX1BURSkqLwogI2RlZmluZSBDRkdfUElTQ1IJMAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogU0NDUiAtIFN5c3RlbSBDbG9jayBDb250cm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5LTgKQEAgLTYwNCwyOSArNjA0LDI5IEBACiAgKgogICovCiAjZGVmaW5lIENGR19CUjBfUFJFTElNICAoKENGR19GTEFTSDBfQkFTRSAmIEJSeF9CQV9NU0spIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1BTXzY0ICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X1BTXzY0ICAgICAgICAgICAgICAgICAgICAgIHxcCiAJCQkgQlJ4X0RFQ0NfTk9ORSAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X01TX0dQQ01fUCAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1YpCisJCQkgQlJ4X01TX0dQQ01fUCAgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X1YpCiAKICNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0gIChNRUdfVE9fQU0oQ0ZHX0ZMQVNIMF9TSVpFKSAgICAgfFwKLQkJICAgICAgICAgT1J4R19DU05UICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TQ1lfNl9DTEsgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19FSFRSKQorCQkJIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfU0NZXzZfQ0xLICAgICAgICAgICAgICAgICB8XAorCQkJIE9SeEdfRUhUUikKIAogLyogQmFuayAxIC0gU0RSQU0KICAqIFBTRFJBTQogICovCiAjZGVmaW5lIENGR19CUjFfUFJFTElNICAoKENGR19TRFJBTTBfQkFTRSAmIEJSeF9CQV9NU0spIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1BTXzY0ICAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X01TX1NEUkFNX1AgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1YpCisJCQkgQlJ4X1BTXzY0ICAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X01TX1NEUkFNX1AgICAgICAgICAgICAgICAgIHxcCisJCQkgQlJ4X1YpCiAKICNkZWZpbmUgQ0ZHX09SMV9QUkVMSU0gIChNRUdfVE9fQU0oQ0ZHX1NEUkFNMF9TSVpFKSAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX0JQRF80ICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX1JPV1NUX1BCSTFfQTYgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX05VTVJfMTIpCisJCQkgT1J4U19CUERfNCAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgT1J4U19ST1dTVF9QQkkxX0E2ICAgICAgICAgICAgIHxcCisJCQkgT1J4U19OVU1SXzEyKQogCiAjZGVmaW5lIENGR19QU0RNUiAgICAgICAweEMzNEUyNDYyCiAjZGVmaW5lIENGR19QU1JUCTB4NjQKQEAgLTYzOCwxNCArNjM4LDE0IEBACiAgKi8KIAogICAjZGVmaW5lIENGR19CUjJfUFJFTElNICAoKENGR19TRFJBTTFfQkFTRSAmIEJSeF9CQV9NU0spIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfMzIgICAgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9NU19TRFJBTV9MICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1YpCisJCQkgICBCUnhfUFNfMzIgICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSAgIEJSeF9NU19TRFJBTV9MICAgICAgICAgICAgICAgICB8XAorCQkJICAgQlJ4X1YpCiAKICAgI2RlZmluZSBDRkdfT1IyX1BSRUxJTSAgKE1FR19UT19BTShDRkdfU0RSQU0xX1NJWkUpICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19CUERfNCAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPUnhTX1JPV1NUX1BCSTBfQTkgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SeFNfTlVNUl8xMikKKwkJCSAgIE9SeFNfQlBEXzQgICAgICAgICAgICAgICAgICAgICB8XAorCQkJICAgT1J4U19ST1dTVF9QQkkwX0E5ICAgICAgICAgICAgIHxcCisJCQkgICBPUnhTX05VTVJfMTIpCiAKICAgI2RlZmluZSBDRkdfTFNETVIgICAgICAgMHg0MTZBMjU2MgogICAjZGVmaW5lIENGR19MU1JUCTB4NjQKQEAgLTY1NywxNSArNjU3LDE1IEBACiAgKiBOVlJUQyBhbmQgQkNTUgogICovCiAjZGVmaW5lIENGR19CUjRfUFJFTElNICAgKChDRkdfUkVHU19CQVNFICYgQlJ4X0JBX01TSykgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfOCAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSAgIEJSeF9QU184ICAgICAgICAgICAgICAgICAgICAgfFwKKwkJCSAgIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgfFwKKwkJCSAgIEJSeF9WKQogLyoKICNkZWZpbmUgQ0ZHX09SNF9QUkVMSU0gICAgKE9SeEdfQU1fTVNLICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19DU05UICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzEwX0NMSyAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfVFJMWCkKKwkJCSAgIE9SeEdfQ1NOVCAgICAgICAgICAgICAgICAgICB8XAorCQkJICAgT1J4R19BQ1NfRElWMSAgICAgICAgICAgICAgIHxcCisJCQkgICBPUnhHX1NDWV8xMF9DTEsgICAgICAgICAgICAgIHxcCisJCQkgICBPUnhHX1RSTFgpCiAqLwogI2RlZmluZSBDRkdfT1I0X1BSRUxJTSAweGZmZjAwODU0CiAKQEAgLTY3MywxNSArNjczLDE1IEBACiAgKiBQQ01DSUEgKGN1cnJlbnRseSBub3Qgd29ya2luZyEpCiAgKi8KICNkZWZpbmUgQ0ZHX0JSOF9QUkVMSU0gICAoKENGR19SRUdTX0JBU0UgJiBCUnhfQkFfTVNLKSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9QU18xNiAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfVikKKwkJCSAgIEJSeF9QU18xNiAgICAgICAgICAgICAgICAgICAgIHxcCisJCQkgICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgIHxcCisJCQkgICBCUnhfVikKIAogI2RlZmluZSBDRkdfT1I4X1BSRUxJTSAgICAoT1J4R19BTV9NU0sgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0NTTlQgICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQUNTX0RJVjEgICAgICAgICAgICAgICB8XAorCQkJICAgT1J4R19DU05UICAgICAgICAgICAgICAgICAgIHxcCisJCQkgICBPUnhHX0FDU19ESVYxICAgICAgICAgICAgICAgfFwKIAkJCSAgIE9SeEdfU0VUQSAgICAgICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TQ1lfMTBfQ0xLKQorCQkJICAgT1J4R19TQ1lfMTBfQ0xLKQogCiAvKgogICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9ndzgyNjAuaCBiL2luY2x1ZGUvY29uZmlncy9ndzgyNjAuaAppbmRleCAwZTlhNGVjLi4zNjY2YmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvZ3c4MjYwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2d3ODI2MC5oCkBAIC0yMTksMTAgKzIxOSwxMCBAQAogI2RlZmluZSBNRElPX1JFQUQgICAgICgoaW9wLT5wZGF0ICYgIDB4MDA0MDAwMDApICE9IDApCiAKICNkZWZpbmUgTURJTyhiaXQpICAgaWYoYml0KSBpb3AtPnBkYXQgfD0gIDB4MDA0MDAwMDA7IFwKLSAgICAgICAgICAgIGVsc2UgICAgICAgICAgICBpb3AtPnBkYXQgJj0gfjB4MDA0MDAwMDAKKwkgICAgZWxzZSAgICAgICAgICAgIGlvcC0+cGRhdCAmPSB+MHgwMDQwMDAwMAogCiAjZGVmaW5lIE1EQyhiaXQpICAgIGlmKGJpdCkgaW9wLT5wZGF0IHw9ICAweDAwMjAwMDAwOyBcCi0gICAgICAgICAgICBlbHNlICAgIGlvcC0+cGRhdCAmPSB+MHgwMDIwMDAwMAorCSAgICBlbHNlICAgIGlvcC0+cGRhdCAmPSB+MHgwMDIwMDAwMAogCiAjZGVmaW5lIE1JSURFTEFZICAgIHVkZWxheSgxKQogI2VuZGlmICAvKiBDT05GSUdfRVRIRVJfT05fRkNDICovCkBAIC0yOTEsOCArMjkxLDggQEAKICAqICAtIEROUwogICovCiAjZGVmaW5lIENPTkZJR19CT09UUF9NQVNLICAgKENPTkZJR19CT09UUF9ERUZBVUxUIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GSUdfQk9PVFBfRE5TKQorCQkJICAgICBDT05GSUdfQk9PVFBfQk9PVEZJTEVTSVpFIHwgXAorCQkJICAgICBDT05GSUdfQk9PVFBfRE5TKQogCiAvKiB1bmRlZiB0aGlzIHRvIHNhdmUgbWVtb3J5ICovCiAjZGVmaW5lIENGR19MT05HSEVMUApAQCAtMzAyLDEzICszMDIsMTMgQEAKIAogLyogV2hhdCBVLUJvb3Qgc3Vic3l0ZW1zIGRvIHlvdSB3YW50IGVuYWJsZWQ/ICovCiAjZGVmaW5lIENPTkZJR19DT01NQU5EUyAgICAgKCgoQ09ORklHX0NNRF9ERkwgJiB+KENGR19DTURfS0dEQikpKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfQ01EX0JFREJVRyAgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0NNRF9FTEYgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0NNRF9BU0tFTlYgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTURfRUNITyAgICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfQ01EX1JFR0lORk8gfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZHX0NNRF9JTU1BUCAgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGR19DTURfTUlJKQorCQkJICAgICAgIENGR19DTURfQkVEQlVHICB8IFwKKwkJCSAgICAgICBDRkdfQ01EX0VMRiB8IFwKKwkJCSAgICAgICBDRkdfQ01EX0FTS0VOViAgfCBcCisJCQkgICAgICAgQ0ZHX0NNRF9FQ0hPICAgIHwgXAorCQkJICAgICAgIENGR19DTURfUkVHSU5GTyB8IFwKKwkJCSAgICAgICBDRkdfQ01EX0lNTUFQICAgfCBcCisJCQkgICAgICAgQ0ZHX0NNRF9NSUkpCiAKIC8qIFdoZXJlIGRvIHRoZSBpbnRlcm5hbCByZWdpc3RlcnMgbGl2ZT8gKi8KICNkZWZpbmUgQ0ZHX0lNTVIgICAgICAgIDB4ZjAwMDAwMDAKQEAgLTM2NywxMiArMzY3LDEyIEBACiAjZGVmaW5lIENGR19TVEFDS19VU0FHRSAgICAgMHgxMDAwMCAvKiBSZXNlcnZlIDY0ayBmb3IgdGhlIHN0YWNrIHVzYWdlICovCiAKICNkZWZpbmUgQ0ZHX01FTV9FTkRfVVNBR0UgICAoIENGR19NT05JVE9SX0xFTiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBDRkdfTUFMTE9DX0xFTiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBDRkdfRU5WX1NFQ1RfU0laRSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBDRkdfU1RBQ0tfVVNBR0UgKQorCQkJICAgICsgQ0ZHX01BTExPQ19MRU4gXAorCQkJICAgICsgQ0ZHX0VOVl9TRUNUX1NJWkUgXAorCQkJICAgICsgQ0ZHX1NUQUNLX1VTQUdFICkKIAogI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQgICAgICggQ0ZHX1NEUkFNX1NJWkUgKiAxMDI0ICogMTAyNCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBDRkdfTUVNX0VORF9VU0FHRSApCisJCQkgICAgLSBDRkdfTUVNX0VORF9VU0FHRSApCiAKIC8qIHZhbGlkIGJhdWRyYXRlcyAqLwogI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUgIHsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KQEAgLTM5OSwxOCArMzk5LDE4IEBACiAKIC8qIGdldCB0aGUgSFJDVyBJU0IgZmllbGQgZnJvbSBDRkdfSU1NUiAqLwogI2RlZmluZSBDRkdfU0JDX0hSQ1dfSU1NUiAgICggKChDRkdfSU1NUiAmIDB4MTAwMDAwMDApID4+IDEwKSB8IFwKLSAgICAgICAgICAgICAgICAgICgoQ0ZHX0lNTVIgJiAweDAxMDAwMDAwKSA+PiAgNykgfCBcCi0gICAgICAgICAgICAgICAgICAoKENGR19JTU1SICYgMHgwMDEwMDAwMCkgPj4gIDQpICkKKwkJICAoKENGR19JTU1SICYgMHgwMTAwMDAwMCkgPj4gIDcpIHwgXAorCQkgICgoQ0ZHX0lNTVIgJiAweDAwMTAwMDAwKSA+PiAgNCkgKQogCiAjZGVmaW5lIENGR19IUkNXX01BU1RFUiAgICAgKCBIUkNXX0JQUzExICAgICAgICAgICAgICAgIHwgXAotICAgICAgICAgICAgICAgICAgSFJDV19EUFBDMTEgICAgICAgICAgICAgICB8IFwKLSAgICAgICAgICAgICAgICAgIENGR19TQkNfSFJDV19JTU1SICAgICAgICAgfCBcCi0gICAgICAgICAgICAgICAgICBIUkNXX01NUjAwICAgICAgICAgICAgICAgIHwgXAotICAgICAgICAgICAgICAgICAgSFJDV19MQlBDMTEgICAgICAgICAgICAgICB8IFwKLSAgICAgICAgICAgICAgICAgIEhSQ1dfQVBQQzEwICAgICAgICAgICAgICAgfCBcCi0gICAgICAgICAgICAgICAgICBIUkNXX0NTMTBQQzAwICAgICAgICAgICAgIHwgXAotICAgICAgICAgICAgICAgICAgKENGR19TQkNfTU9EQ0tfSCAmIEhSQ1dfTU9EQ0tfSDExMTEpICB8IFwKLSAgICAgICAgICAgICAgICAgIENGR19TQkNfSFJDV19CT09UX0ZMQUdTICkKKwkJICBIUkNXX0RQUEMxMSAgICAgICAgICAgICAgIHwgXAorCQkgIENGR19TQkNfSFJDV19JTU1SICAgICAgICAgfCBcCisJCSAgSFJDV19NTVIwMCAgICAgICAgICAgICAgICB8IFwKKwkJICBIUkNXX0xCUEMxMSAgICAgICAgICAgICAgIHwgXAorCQkgIEhSQ1dfQVBQQzEwICAgICAgICAgICAgICAgfCBcCisJCSAgSFJDV19DUzEwUEMwMCAgICAgICAgICAgICB8IFwKKwkJICAoQ0ZHX1NCQ19NT0RDS19IICYgSFJDV19NT0RDS19IMTExMSkgIHwgXAorCQkgIENGR19TQkNfSFJDV19CT09UX0ZMQUdTICkKIAogLyogbm8gc2xhdmVzICovCiAjZGVmaW5lIENGR19IUkNXX1NMQVZFMSAgICAgMApAQCAtNDg4LDE2ICs0ODgsMTYgQEAKICAqIEhJRDEgaGFzIG9ubHkgcmVhZC1vbmx5IGluZm9ybWF0aW9uIC0gbm90aGluZyB0byBzZXQuCiAgKi8KICNkZWZpbmUgQ0ZHX0hJRDBfSU5JVCAgIChISUQwX0lDRSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBISUQwX0RDRSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBISUQwX0lDRkkgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBISUQwX0RDSSAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBISUQwX0lGRU0gfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBISUQwX0FCRSkKKwkJCSBISUQwX0RDRSAgfFwKKwkJCSBISUQwX0lDRkkgfFwKKwkJCSBISUQwX0RDSSAgfFwKKwkJCSBISUQwX0lGRU0gfFwKKwkJCSBISUQwX0FCRSkKIAogI2RlZmluZSBDRkdfSElEMF9GSU5BTCAgKEhJRDBfSUNFICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEhJRDBfSUZFTSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEhJRDBfQUJFICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIEhJRDBfRU1DUCkKKwkJCSBISUQwX0lGRU0gfFwKKwkJCSBISUQwX0FCRSAgfFwKKwkJCSBISUQwX0VNQ1ApCiAjZGVmaW5lIENGR19ISUQyICAgIDAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTE3LDkgKzUxNyw5IEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KICNkZWZpbmUgQ0ZHX1NJVU1DUiAgKFNJVU1DUl9EUFBDMTEgIHxcCi0gICAgICAgICAgICAgICAgICAgICBTSVVNQ1JfTDJDUEMwMCB8XAotICAgICAgICAgICAgICAgICAgICAgU0lVTUNSX0FQUEMxMCAgfFwKLSAgICAgICAgICAgICAgICAgICAgIFNJVU1DUl9NTVIwMCkKKwkJICAgICBTSVVNQ1JfTDJDUEMwMCB8XAorCQkgICAgIFNJVU1DUl9BUFBDMTAgIHxcCisJCSAgICAgU0lVTUNSX01NUjAwKQogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUyOSwxMSArNTI5LDExIEBACiAgKiBXYXRjaGRvZyAmIEJ1cyBNb25pdG9yIFRpbWVyIG1heCwgNjB4IEJ1cyBNb25pdG9yIGVuYWJsZQogICovCiAjZGVmaW5lIENGR19TWVBDUiAgIChTWVBDUl9TV1RDIHxcCi0gICAgICAgICAgICAgICAgICAgICBTWVBDUl9CTVQgIHxcCi0gICAgICAgICAgICAgICAgICAgICBTWVBDUl9QQk1FIHxcCi0gICAgICAgICAgICAgICAgICAgICBTWVBDUl9MQk1FIHxcCi0gICAgICAgICAgICAgICAgICAgICBTWVBDUl9TV1JJIHxcCi0gICAgICAgICAgICAgICAgICAgICBTWVBDUl9TV1ApCisJCSAgICAgU1lQQ1JfQk1UICB8XAorCQkgICAgIFNZUENSX1BCTUUgfFwKKwkJICAgICBTWVBDUl9MQk1FIHxcCisJCSAgICAgU1lQQ1JfU1dSSSB8XAorCQkgICAgIFNZUENSX1NXUCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVE1DTlRTQyAtIFRpbWUgQ291bnRlciBTdGF0dXMgYW5kIENvbnRyb2wgICAgICAgICAgICAgNC00MApAQCAtNTQyLDkgKzU0Miw5IEBACiAgKiBhbmQgZW5hYmxlIFRpbWUgQ291bnRlcgogICovCiAjZGVmaW5lIENGR19UTUNOVFNDIChUTUNOVFNDX1NFQyB8XAotICAgICAgICAgICAgICAgICAgICAgVE1DTlRTQ19BTFIgfFwKLSAgICAgICAgICAgICAgICAgICAgIFRNQ05UU0NfVENGIHxcCi0gICAgICAgICAgICAgICAgICAgICBUTUNOVFNDX1RDRSkKKwkJICAgICBUTUNOVFNDX0FMUiB8XAorCQkgICAgIFRNQ05UU0NfVENGIHxcCisJCSAgICAgVE1DTlRTQ19UQ0UpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFBJU0NSIC0gUGVyaW9kaWMgSW50ZXJydXB0IFN0YXR1cyBhbmQgQ29udHJvbCAgICAgICAgIDQtNDIKQEAgLTU1Myw4ICs1NTMsOCBAQAogICogUGVyaW9kaWMgdGltZXIKICAqLwogI2RlZmluZSBDRkdfUElTQ1IgICAoUElTQ1JfUFMgIHxcCi0gICAgICAgICAgICAgICAgICAgICBQSVNDUl9QVEYgfFwKLSAgICAgICAgICAgICAgICAgICAgIFBJU0NSX1BURSkKKwkJICAgICBQSVNDUl9QVEYgfFwKKwkJICAgICBQSVNDUl9QVEUpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNDQ1IgLSBTeXN0ZW0gQ2xvY2sgQ29udHJvbCAgICAgICAgICAgICAgICAgICAgICAgICAgIDktOApAQCAtNjEzLDkgKzYxMyw5IEBACiAgKiAgICAgLSBWYWxpZAogICovCiAjZGVmaW5lIENGR19CUjBfUFJFTElNICAoKENGR19GTEFTSDBfQkFTRSAmIEJSeF9CQV9NU0spIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9QU18zMiAgICAgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9NU19HUENNX1AgICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9WKQorCQkJICBCUnhfUFNfMzIgICAgICAgICAgICAgICAgICAgICB8XAorCQkJICBCUnhfTVNfR1BDTV9QICAgICAgICAgICAgICAgICB8XAorCQkJICBCUnhfVikKIAogLyogT1IwIGlzIGNvbmZpZ3VyZWQgYXMgZm9sbG93czoKICAqCkBAIC02MzIsMTEgKzYzMiwxMSBAQAogICogICAgICAgY3VycmVudCBiYW5rIGFuZCB0aGUgbmV4dCBhY2Nlc3MuCiAgKi8KICNkZWZpbmUgQ0ZHX09SMF9QUkVMSU0gIChNRUdfVE9fQU0oQ0ZHX0ZMQVNIMF9TSVpFKSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQ1NOVCAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfQUNTX0RJVjEgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfU0NZXzVfQ0xLICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfVFJMWCAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgIE9SeEdfRUhUUikKKwkJCSBPUnhHX0NTTlQgICAgICAgICAgfFwKKwkJCSBPUnhHX0FDU19ESVYxICAgICAgfFwKKwkJCSBPUnhHX1NDWV81X0NMSyAgICAgfFwKKwkJCSBPUnhHX1RSTFggICAgICAgICAgfFwKKwkJCSBPUnhHX0VIVFIpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEJSMiAtIEJhc2UgUmVnaXN0ZXIKQEAgLTY2OCw5ICs2NjgsOSBAQAogICogICAgIC0gVmFsaWQKICAqLwogI2RlZmluZSBDRkdfQlIyX1BSRUxJTSAgKChDRkdfU0RSQU0wX0JBU0UgJiBCUnhfQkFfTVNLKSB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfUFNfNjQgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X01TX1NEUkFNX1AgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9WKQorCQkJICBCUnhfUFNfNjQgICAgICAgICAgfFwKKwkJCSAgQlJ4X01TX1NEUkFNX1AgICAgIHxcCisJCQkgIEJSeF9WKQogCiAvKiBXaXRoIGEgMTYgTUIgRElNTSwgdGhlIE9SMiBpcyBjb25maWd1cmVkIGFzIGZvbGxvd3M6CiAgKgpAQCAtNjgzLDkgKzY4Myw5IEBACiAgKi8KICNpZiAoQ0ZHX1NEUkFNMF9TSVpFID09IDE2KQogI2RlZmluZSBDRkdfT1IyX1BSRUxJTSAgKE1FR19UT19BTShDRkdfU0RSQU0wX1NJWkUpIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19CUERfMiAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19ST1dTVF9QQkkwX0E5IHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4U19OVU1SXzExKQorCQkJIE9SeFNfQlBEXzIgICAgICAgICB8XAorCQkJIE9SeFNfUk9XU1RfUEJJMF9BOSB8XAorCQkJIE9SeFNfTlVNUl8xMSkKIAogLyogV2l0aCBhIDE2IE1CIERJTU0sIHRoZSBQU0RNUiBpcyBjb25maWd1cmVkIGFzIGZvbGxvd3M6CiAgKgpAQCAtNzExLDE1ICs3MTEsMTUgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogI2RlZmluZSBDRkdfUFNETVIgICAoUFNETVJfUkZFTiAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgUFNETVJfU0RBTV9BMTRfSVNfQTUgfFwKLSAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0JTTUFfQTE2X0ExOCAgIHxcCi0gICAgICAgICAgICAgICAgICAgICBQU0RNUl9TREExMF9QQkkwX0E5ICB8XAotICAgICAgICAgICAgICAgICAgICAgUFNETVJfUkZSQ183X0NMSyAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1BSRVRPQUNUXzNXICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICBQU0RNUl9BQ1RUT1JXXzJXICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgUFNETVJfTERPVE9QUkVfMUMgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1dSQ18xQyAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICBQU0RNUl9DTF8yKQorCQkgICAgIFBTRE1SX1NEQU1fQTE0X0lTX0E1IHxcCisJCSAgICAgUFNETVJfQlNNQV9BMTZfQTE4ICAgfFwKKwkJICAgICBQU0RNUl9TREExMF9QQkkwX0E5ICB8XAorCQkgICAgIFBTRE1SX1JGUkNfN19DTEsgICAgIHxcCisJCSAgICAgUFNETVJfUFJFVE9BQ1RfM1cgICAgfFwKKwkJICAgICBQU0RNUl9BQ1RUT1JXXzJXICAgICB8XAorCQkgICAgIFBTRE1SX0xET1RPUFJFXzFDICAgIHxcCisJCSAgICAgUFNETVJfV1JDXzFDICAgICAgICAgfFwKKwkJICAgICBQU0RNUl9DTF8yKQogI2VuZGlmIC8qIChDRkdfU0RSQU0wX1NJWkUgPT0gMTYpICovCiAKIC8qIFdpdGggYSA2NCBNQiBESU1NLCB0aGUgT1IyIGlzIGNvbmZpZ3VyZWQgYXMgZm9sbG93czoKQEAgLTczMyw5ICs3MzMsOSBAQAogICovCiAjaWYgKENGR19TRFJBTTBfU0laRSA9PSA2NCkKICNkZWZpbmUgQ0ZHX09SMl9QUkVMSU0gIChNRUdfVE9fQU0oQ0ZHX1NEUkFNMF9TSVpFKSB8XAotICAgICAgICAgICAgIE9SeFNfQlBEXzQgICAgICAgICB8XAotICAgICAgICAgICAgIE9SeFNfUk9XU1RfUEJJMF9BOCAgICAgfFwKLSAgICAgICAgICAgICBPUnhTX05VTVJfMTIpCisJICAgICBPUnhTX0JQRF80ICAgICAgICAgfFwKKwkgICAgIE9SeFNfUk9XU1RfUEJJMF9BOCAgICAgfFwKKwkgICAgIE9SeFNfTlVNUl8xMikKIAogLyogV2l0aCBhIDY0IE1CIERJTU0sIHRoZSBQU0RNUiBpcyBjb25maWd1cmVkIGFzIGZvbGxvd3M6CiAgKgpAQCAtNzYxLDE1ICs3NjEsMTUgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogI2RlZmluZSBDRkdfUFNETVIgICAoUFNETVJfUkZFTiAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgUFNETVJfU0RBTV9BMTRfSVNfQTUgfFwKLSAgICAgICAgICAgICAgICAgICAgIFBTRE1SX0JTTUFfQTE0X0ExNiAgIHxcCi0gICAgICAgICAgICAgICAgICAgICBQU0RNUl9TREExMF9QQkkwX0E5ICB8XAotICAgICAgICAgICAgICAgICAgICAgUFNETVJfUkZSQ183X0NMSyAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1BSRVRPQUNUXzNXICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICBQU0RNUl9BQ1RUT1JXXzJXICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgUFNETVJfTERPVE9QUkVfMUMgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgIFBTRE1SX1dSQ18xQyAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICBQU0RNUl9DTF8yKQorCQkgICAgIFBTRE1SX1NEQU1fQTE0X0lTX0E1IHxcCisJCSAgICAgUFNETVJfQlNNQV9BMTRfQTE2ICAgfFwKKwkJICAgICBQU0RNUl9TREExMF9QQkkwX0E5ICB8XAorCQkgICAgIFBTRE1SX1JGUkNfN19DTEsgICAgIHxcCisJCSAgICAgUFNETVJfUFJFVE9BQ1RfM1cgICAgfFwKKwkJICAgICBQU0RNUl9BQ1RUT1JXXzJXICAgICB8XAorCQkgICAgIFBTRE1SX0xET1RPUFJFXzFDICAgIHxcCisJCSAgICAgUFNETVJfV1JDXzFDICAgICAgICAgfFwKKwkJICAgICBQU0RNUl9DTF8yKQogI2VuZGlmICAvKiAoQ0ZHX1NEUkFNMF9TSVpFID09IDY0KSAqLwogCiAjZGVmaW5lIENGR19QU1JUICAgIDB4MGUKQEAgLTgwMCwxMyArODAwLDEzIEBACiAKICNpZmRlZiBDRkdfSU9fQkFTRQogIyAgZGVmaW5lIENGR19CUjRfUFJFTElNICAoKENGR19JT19CQVNFICYgQlJ4X0JBX01TSykgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJ4X1BTXzggICAgICAgICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUnhfTVNfR1BDTV9MICAgICAgICAgICAgICB8XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJSeF9WKQorCQkJICAgIEJSeF9QU184ICAgICAgICAgICAgICAgICAgIHxcCisJCQkgICAgQlJ4X01TX0dQQ01fTCAgICAgICAgICAgICAgfFwKKwkJCSAgICBCUnhfVikKIAogIyAgZGVmaW5lIENGR19PUjRfUFJFTElNICAgKE9SeEdfQU1fTVNLICAgICAgICAgICAgICAgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TQ1lfMTFfQ0xLICAgICAgICAgICAgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0VIVFIpCisJCQkgICAgT1J4R19TQ1lfMTFfQ0xLICAgICAgICAgICAgfFwKKwkJCSAgICBPUnhHX0VIVFIpCiAjZW5kaWYgLyogQ0ZHX0lPX0JBU0UgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9pbm5va29tLmggYi9pbmNsdWRlL2NvbmZpZ3MvaW5ub2tvbS5oCmluZGV4IDYwNjk5ZmUuLmNmZTkwMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9pbm5va29tLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2lubm9rb20uaApAQCAtMTEzLDcgKzExMyw3IEBACiAKICNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkweDIwMDAwCQkvKiAxMjggS2lCICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZhbGlkIGJhdWRyYXRlcyAqLworCQkJCQkJLyogdmFsaWQgYmF1ZHJhdGVzICovCiAjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgICAgIHsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KIAogLyoKQEAgLTE3NSw3ICsxNzUsNyBAQAogICogSkZGUzIgUGFydGl0aW9ucwogICovCiAjZGVmaW5lIENGR19KRkZTX0NVU1RPTV9QQVJUCTEJCS8qIHNlZSBib2FyZC9pbm5va29tL2ZsYXNoLmMgKi8KLSNkZWZpbmUgQ09ORklHX01URF9JTk5PS09NXzE2TUIgMQkJLyogZGV2ZWxvcG1lbnQgZmxhc2ggICAgICAgICAqLwkKKyNkZWZpbmUgQ09ORklHX01URF9JTk5PS09NXzE2TUIgMQkJLyogZGV2ZWxvcG1lbnQgZmxhc2ggICAgICAgICAqLwogI3VuZGVmICBDT05GSUdfTVREX0lOTk9LT01fNjRNQgkJCS8qIHByb2R1Y3Rpb24gZmxhc2ggICAgICAgICAgKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbG9nb2RsLmggYi9pbmNsdWRlL2NvbmZpZ3MvbG9nb2RsLmgKaW5kZXggY2I3MzdmYy4uMmFlZTQ2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2xvZ29kbC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9sb2dvZGwuaApAQCAtMTEzLDcgKzExMyw3IEBACiAKICNkZWZpbmUgQ0ZHX01PTklUT1JfTEVOCQkweDIwMDAwCQkvKiAxMjggS2lCICovCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHZhbGlkIGJhdWRyYXRlcyAqLworCQkJCQkJLyogdmFsaWQgYmF1ZHJhdGVzICovCiAjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgICAgIHsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KIAogLyoKQEAgLTIyNywxMiArMjI3LDEyIEBACiAKICNkZWZpbmUgQ0ZHX0dBRlIwX0xfVkFMICAgICAoX0JJVDIyK19CSVQyNCtfQklUMzEpCiAjZGVmaW5lIENGR19HQUZSMF9VX1ZBTCAgICAgKF9CSVQxNStfQklUMTcrX0JJVDE5K1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJVDIwK19CSVQyMitfQklUMjQrX0JJVDI2K19CSVQyOStfQklUMzEpCisJCQkgICAgIF9CSVQyMCtfQklUMjIrX0JJVDI0K19CSVQyNitfQklUMjkrX0JJVDMxKQogI2RlZmluZSBDRkdfR0FGUjFfTF9WQUwgICAgIChfQklUMytfQklUNCtfQklUNitfQklUOCtfQklUMTArX0JJVDEyK19CSVQxNStfQklUMTcrX0JJVDE5K1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJVDIwK19CSVQyMytfQklUMjQrX0JJVDI3K19CSVQyOCtfQklUMzEpCisJCQkgICAgIF9CSVQyMCtfQklUMjMrX0JJVDI0K19CSVQyNytfQklUMjgrX0JJVDMxKQogI2RlZmluZSBDRkdfR0FGUjFfVV9WQUwgICAgIChfQklUMjErX0JJVDIzK19CSVQyNStfQklUMjcrX0JJVDI5K19CSVQzMSkKICNkZWZpbmUgQ0ZHX0dBRlIyX0xfVkFMICAgICAoX0JJVDErX0JJVDMrX0JJVDUrX0JJVDcrX0JJVDkrX0JJVDExK19CSVQxMytfQklUMTUrX0JJVDE3K1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJVDE5K19CSVQyMStfQklUMjMrX0JJVDI1K19CSVQyNytfQklUMjkrX0JJVDMxKQorCQkJICAgICBfQklUMTkrX0JJVDIxK19CSVQyMytfQklUMjUrX0JJVDI3K19CSVQyOStfQklUMzEpCiAjZGVmaW5lIENGR19HQUZSMl9VX1ZBTCAgICAgKF9CSVQxKQogCiAjZGVmaW5lIENGR19QU1NSX1ZBTCAgICAgICAgKDB4MjApCkBAIC0yODMsNCArMjgzLDMgQEAKICNkZWZpbmUgQ0ZHX0VOVl9TSVpFICAgICAgICAgICAgMHg0MDAwICAvKiBUb3RhbCBTaXplIG9mIEVudmlyb25tZW50IFNlY3RvciAgICAgKi8KIAogI2VuZGlmICAvKiBfX0NPTkZJR19IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9yc2Rwcm90by5oIGIvaW5jbHVkZS9jb25maWdzL3JzZHByb3RvLmgKaW5kZXggOTVmYWE0MS4uZDcxYjNlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3JzZHByb3RvLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3JzZHByb3RvLmgKQEAgLTIxMSwxNiArMjExLDE2IEBACiAKIC8qIGdldCB0aGUgSFJDVyBJU0IgZmllbGQgZnJvbSBDRkdfSU1NUiAqLwogI2RlZmluZSBDRkdfUlNEX0hSQ1dfSU1NUiAoICgoQ0ZHX0lNTVIgJiAweDEwMDAwMDAwKSA+PiAxMCkgfFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENGR19JTU1SICYgMHgwMTAwMDAwMCkgPj4gNykgIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDRkdfSU1NUiAmIDB4MDAxMDAwMDApID4+IDQpICkKKwkJCSAgICAoKENGR19JTU1SICYgMHgwMTAwMDAwMCkgPj4gNykgIHxcCisJCQkgICAgKChDRkdfSU1NUiAmIDB4MDAxMDAwMDApID4+IDQpICkKIAogI2RlZmluZSBDRkdfSFJDV19NQVNURVIJKEhSQ1dfTDJDUEMxMCB8IFwKIAkJCSBIUkNXX0RQUEMxMSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDRkdfUlNEX0hSQ1dfSU1NUiB8XAotCQkgICAgIAkgSFJDV19NTVIwMCB8IFwKLQkgICAgIAkJIEhSQ1dfQVBQQzEwIHwgXAotCQkgICAgIAkgSFJDV19DUzEwUEMwMCB8IFwKLQkJICAgICAJIEhSQ1dfTU9EQ0tfSDAwMDAgfFwKKwkJCSBDRkdfUlNEX0hSQ1dfSU1NUiB8XAorCQkJIEhSQ1dfTU1SMDAgfCBcCisJCQkgSFJDV19BUFBDMTAgfCBcCisJCQkgSFJDV19DUzEwUEMwMCB8IFwKKwkJCSBIUkNXX01PRENLX0gwMDAwIHxcCiAJCQkgQ0ZHX1JTRF9IUkNXX0JPT1RfRkxBR1MpCiAKIC8qIG5vIHNsYXZlcyAqLwpAQCAtMzg4LDkgKzM4OCw5IEBACiAvKiBWaXJ0ZXgtRlBHQSAtIFJlZ2lzdGVyICovCiAjZGVmaW5lIENGR19CUjNfUFJFTElNICAoUEhZU19WSVJURVhfUkVHSVNURVIgfCBCUnhfVikKICNkZWZpbmUgQ0ZHX09SM19QUkVMSU0gIChPUnhTX1NJWkVfVE9fQU0oUEhZU19WSVJURVhfUkVHSVNURVJfU0laRSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19TQ1lfMV9DTEsgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1J4R19BQ1NfRElWMiB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBPUnhHX0NTTlQgKQorCQkJIE9SeEdfU0NZXzFfQ0xLIHwgXAorCQkJIE9SeEdfQUNTX0RJVjIgfCBcCisJCQkgT1J4R19DU05UICkKIAogLyogbG9jYWwgYnVzIFNEUkFNICovCiAjZGVmaW5lIENGR19CUjRfUFJFTElNCShQSFlTX1NEUkFNX0xPQ0FMIHwgQlJ4X1BTXzMyIHwgQlJ4X01TX1NEUkFNX0wgfCBCUnhfVikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zYWNzbmcuaCBiL2luY2x1ZGUvY29uZmlncy9zYWNzbmcuaAppbmRleCA3YWNjZjc0Li42ZmQ4YWJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvc2Fjc25nLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NhY3NuZy5oCkBAIC0yNTYsOCArMjU2LDggQEAKICAqLwogI2RlZmluZSBDT05GSUdfU09GVF9TUEkJCS8qIEVuYWJsZSBTUEkgZHJpdmVyICovCiAjZGVmaW5lIE1BWF9TUElfQllURVMgICA0CS8qIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHdlIGNhbiBoYW5kbGUgKi8KLSN1bmRlZiAgREVCVUdfU1BJICAgICAgICAgICAgICAgLyogRGlzYWJsZSBTUEkgZGVidWdnaW5nICovICAKLSAKKyN1bmRlZiAgREVCVUdfU1BJICAgICAgICAgICAgICAgLyogRGlzYWJsZSBTUEkgZGVidWdnaW5nICovCisKIC8qCiAgKiBTb2Z0d2FyZSAoYml0LWJhbmcpIFNQSSBkcml2ZXIgY29uZmlndXJhdGlvbgogICovCkBAIC0yNzMsOSArMjczLDkgQEAKICN1bmRlZiAgU1BJX0lOSVQJCQkvKiBubyBwb3J0IGluaXRpYWxpemF0aW9uIG5lZWRlZCAqLwogI2RlZmluZSBTUElfUkVBRCAgICAgICAgKChpbW1yLT5pbV9pb3BvcnQuaW9wX3BkYXRkICYgSTJDX01JU08pICE9IDApCiAjZGVmaW5lIFNQSV9TREEoYml0KSAgICBpZihiaXQpIGltbXItPmltX2lvcG9ydC5pb3BfcGRhdGQgfD0gIEkyQ19NT1NJOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlICAgIGltbXItPmltX2lvcG9ydC5pb3BfcGRhdGQgJj0gfkkyQ19NT1NJCisJCQllbHNlICAgIGltbXItPmltX2lvcG9ydC5pb3BfcGRhdGQgJj0gfkkyQ19NT1NJCiAjZGVmaW5lIFNQSV9TQ0woYml0KSAgICBpZihiaXQpIGltbXItPmltX2lvcG9ydC5pb3BfcGRhdGQgfD0gIEkyQ19TQ0xLOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlICAgIGltbXItPmltX2lvcG9ydC5pb3BfcGRhdGQgJj0gfkkyQ19TQ0xLCisJCQllbHNlICAgIGltbXItPmltX2lvcG9ydC5pb3BfcGRhdGQgJj0gfkkyQ19TQ0xLCiAjZGVmaW5lIFNQSV9ERUxBWSAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gZGVsYXkgaXMgbmVlZGVkICovCiAjZW5kaWYgLyogQ09ORklHX1NPRlRfU1BJICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zYmM4MjYwLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc2JjODI2MC5oCmluZGV4IGQ0N2MyMDguLjE4MjJmYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zYmM4MjYwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NiYzgyNjAuaApAQCAtMjg0LDcgKzI4NCw3IEBACiAvKiBXaGF0IHNob3VsZCB0aGUgY29uc29sZSdzIGJhdWQgcmF0ZSBiZT8gKi8KICNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwCiAKLS8qIEV0aGVybmV0IE1BQyBhZGRyZXNzIAorLyogRXRoZXJuZXQgTUFDIGFkZHJlc3MKICAqICAgICBOb3RlOiBXZSBhcmUgdXNpbmcgdGhlIEVTVCBDb3Jwb3JhdGlvbiBPVUkgKDAwOmEwOjFlOnh4Onh4Onh4KQogICogICAgICAgICAgIGh0dHA6Ly9zdGFuZGFyZHMuaWVlZS5vcmcvcmVnYXV0aC9vdWkvaW5kZXguc2h0bWwKICAqLwpAQCAtMzE1LDM4ICszMTUsMzggQEAKIAogLyogRGVmaW5lIHRoaXMgdG8gY29udGFpbiBhbnkgbnVtYmVyIG9mIG51bGwgdGVybWluYXRlZCBzdHJpbmdzIHRoYXQKICAqIHdpbGwgYmUgcGFydCBvZiB0aGUgZGVmYXVsdCBlbnZpcm9tZW50IGNvbXBpbGVkIGludG8gdGhlIGJvb3QgaW1hZ2UuCi0gKiAKKyAqCiAgKiBWYXJpYWJsZQkJVXNhZ2UKICAqIC0tLS0tLS0tLS0tLS0tICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIHNlcnZlcmlwCQlzZXJ2ZXIgSVAgYWRkcmVzcyAKKyAqIHNlcnZlcmlwCQlzZXJ2ZXIgSVAgYWRkcmVzcwogICogaXBhZGRyCQlteSBJUCBhZGRyZXNzCiAgKiByZXByb2cJCVJlbG9hZCBmbGFzaCB3aXRoIGEgbmV3IGNvcHkgb2YgVS1Cb290CiAgKiB6YXBlbnYJCUVyYXNlIHRoZSBlbnZpcm9ubWVudCBhcmVhIGluIGZsYXNoCiAgKiByb290LW9uLWluaXRyZCAgICAgICBTZXQgdGhlIGJvb3RjbWQgdmFyaWFibGUgdG8gYWxsb3cgYm9vdGluZyBvZiBhbiBpbml0aWFsCiAgKiAgICAgICAgICAgICAgICAgICAgICByYW0gZGlzay4KLSAqIHJvb3Qtb24tbmZzICAgICAgICAgIFNldCB0aGUgYm9vdGNtZCB2YXJpYWJsZSB0byBhbGxvdyBib290aW5nIG9mIGEgTkZTIAorICogcm9vdC1vbi1uZnMgICAgICAgICAgU2V0IHRoZSBib290Y21kIHZhcmlhYmxlIHRvIGFsbG93IGJvb3Rpbmcgb2YgYSBORlMKICAqICAgICAgICAgICAgICAgICAgICAgIG1vdW50ZWQgcm9vdCBmaWxlc3lzdGVtLgotICogYm9vdC1ob29rICAgICAgICAgICAgQ29udmVuaWVudCBzdHViIHRvIGRvIHNvbWV0aGluZyB1c2VmdWwgYmVmb3JlIHRoZSAKKyAqIGJvb3QtaG9vayAgICAgICAgICAgIENvbnZlbmllbnQgc3R1YiB0byBkbyBzb21ldGhpbmcgdXNlZnVsIGJlZm9yZSB0aGUKICAqICAgICAgICAgICAgICAgICAgICAgIGJvb3RtIGNvbW1hbmQgaXMgZXhlY3V0ZWQuCi0gKiAKKyAqCiAgKiBFeGFtcGxlIHVzYWdlIG9mIHJvb3Qtb24taW5pdHJkIGFuZCByb290LW9uLW5mcyA6CiAgKgogICogTm90ZTogVGhlIGxpbmVzIGhhdmUgYmVlbiB3cmFwcGVkIHRvIGltcHJvdmVkIGl0cyByZWFkYWJpbGl0eS4KICAqCiAgKiA9PiBwcmludGVudiBib290Y21kCiAgKiBib290Y21kPXZlcnNpb247ZWNobztib290cDtzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydwotICogbmZzcm9vdD0kKHNlcnZlcmlwKTokKHJvb3RwYXRoKSAKKyAqIG5mc3Jvb3Q9JChzZXJ2ZXJpcCk6JChyb290cGF0aCkKICAqIGlwPSQoaXBhZGRyKTokKHNlcnZlcmlwKTokKGdhdGV3YXlpcCk6JChuZXRtYXNrKTokKGhvc3RuYW1lKTo6b2ZmO3J1biBib290LWhvb2s7Ym9vdG0KICAqCiAgKiA9PiBydW4gcm9vdC1vbi1pbml0cmQKICAqID0+IHByaW50ZW52IGJvb3RjbWQKICAqIGJvb3RjbWQ9dmVyc2lvbjtlY2hvO2Jvb3RwO3NldGVudiBib290YXJncyByb290PS9kZXYvcmFtMCBydwogICogaXA9JChpcGFkZHIpOiQoc2VydmVyaXApOiQoZ2F0ZXdheWlwKTokKG5ldG1hc2spOiQoaG9zdG5hbWUpOjpvZmY7cnVuIGJvb3QtaG9vaztib290bQotICogCisgKgogICogPT4gcnVuIHJvb3Qtb24tbmZzCiAgKiA9PiBwcmludGVudiBib290Y21kCiAgKiBib290Y21kPXZlcnNpb247ZWNobztib290cDtzZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydwotICogbmZzcm9vdD0kKHNlcnZlcmlwKTokKHJvb3RwYXRoKSAKKyAqIG5mc3Jvb3Q9JChzZXJ2ZXJpcCk6JChyb290cGF0aCkKICAqIGlwPSQoaXBhZGRyKTokKHNlcnZlcmlwKTokKGdhdGV3YXlpcCk6JChuZXRtYXNrKTokKGhvc3RuYW1lKTo6b2ZmO3J1biBib290LWhvb2s7Ym9vdG0KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zYzUyMF9jZHAuaCBiL2luY2x1ZGUvY29uZmlncy9zYzUyMF9jZHAuaAppbmRleCAyOTJiNGJmLi43NjRlZmRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvc2M1MjBfY2RwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NjNTIwX2NkcC5oCkBAIC0zNyw3ICszNyw3IEBACiAjZGVmaW5lIENPTkZJR19TQzUyMAkJMQkvKiBJbmNsdWRlIHN1cHBvcnQgZm9yIEFNRCBTQzUyMCAqLwogI2RlZmluZSBDT05GSUdfQUxJMTUyWAkJMQkvKiBJbmNsdWRlIHN1cHBvcnQgZm9yIEFsaSAxNTJ4IFNJTyAqLwogCi0jZGVmaW5lIENGR19TRFJBTV9QUkVDSEFSR0VfREVMQVkgNiAgICAgLyogNlQgKi8JCisjZGVmaW5lIENGR19TRFJBTV9QUkVDSEFSR0VfREVMQVkgNiAgICAgLyogNlQgKi8KICNkZWZpbmUgQ0ZHX1NEUkFNX1JFRlJFU0hfUkFURSAgICA3OCAgICAvKiA3Ljh1UyAoY2hvaWNlcyBhcmUgNy44LCAxNS42LCAzMS4yIG9yIDYyLjV1UykgKi8KICNkZWZpbmUgQ0ZHX1NEUkFNX1JBU19DQVNfREVMQVkgICAzICAgICAvKiAzVCAqLwogCkBAIC0xMjMsNyArMTIzLDcgQEAKICNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJKDIqQ0ZHX0haKSAvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAqLwogCiAjZGVmaW5lIENPTkZJR19TUElfRUVQUk9NICAgICAgLyogU3VwcG9ydCBmb3IgU1BJIEVFUFJPTXMgKEFUMjUxMjgpICovCi0jZGVmaW5lIENPTkZJR19NV19FRVBST00gICAgICAgLyogU3VwcG9ydCBmb3IgTWljcm9XaXJlIEVFUFJPTXMgKEFUOTNMQzQ2KSAqLyAKKyNkZWZpbmUgQ09ORklHX01XX0VFUFJPTSAgICAgICAvKiBTdXBwb3J0IGZvciBNaWNyb1dpcmUgRUVQUk9NcyAoQVQ5M0xDNDYpICovCiAKIAogLyogYWxsb3cgdG8gb3ZlcndyaXRlIHNlcmlhbCBhbmQgZXRoYWRkciAqLwpAQCAtMTM0LDcgKzEzNCw3IEBACiAjZGVmaW5lIENGR19FTlZfSVNfSU5fRUVQUk9NICAgMQogI2RlZmluZSBDT05GSUdfU1BJCiAjZGVmaW5lIENGR19FTlZfU0laRQkgICAgICAgMHg0MDAwCS8qIFRvdGFsIFNpemUgb2YgRW52aXJvbm1lbnQgRUVQUk9NIDE2ayBpcyBTUEkgaXMgdXNlZCBvciAxMjggYnl0ZXMgaWYgTVcgaXMgdXNlZCovCi0jZGVmaW5lIENGR19FTlZfT0ZGU0VUICAgICAgICAgMCAgICAgIAorI2RlZmluZSBDRkdfRU5WX09GRlNFVCAgICAgICAgIDAKICNkZWZpbmUgQ09ORklHX1NDNTIwX0NEUF9VU0VfU1BJICAvKiBTdG9yZSBjb25maWd1cmF0aW9uIGluIHRoZSBTUEkgcGFydCAqLwogI3VuZGVmIENPTkZJR19TQzUyMF9DRFBfVVNFX01XICAgIC8qIFN0b3JlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIE1pY3JvV2lyZSBwYXJ0ICovCiAjZGVmaW5lIENPTkZJR19TUElfWCAxCkBAIC0xNTcsNyArMTU3LDcgQEAKICNkZWZpbmUgQ0ZHX0lERV9NQVhERVZJQ0UJKENGR19JREVfTUFYQlVTKjIpIC8qIG1heC4gMiBkcml2ZXMgcGVyIElERSBidXMgKi8KIAogI2RlZmluZSBDRkdfQVRBX0lERTBfT0ZGU0VUCTB4MDFGMAkvKiBpZGUwIG9mZnN0ZSAqLwotLy8jZGVmaW5lIENGR19BVEFfSURFMV9PRkZTRVQJMHgwMTcwCS8qIGlkZTEgb2Zmc2V0ICovCisvKiNkZWZpbmUgQ0ZHX0FUQV9JREUxX09GRlNFVAkweDAxNzAJLyMjIyogaWRlMSBvZmZzZXQgKi8KICNkZWZpbmUgQ0ZHX0FUQV9EQVRBX09GRlNFVAkwCS8qIGRhdGEgcmVnIG9mZnNldAkqLwogI2RlZmluZSBDRkdfQVRBX1JFR19PRkZTRVQJMAkvKiByZWcgb2Zmc2V0ICovCiAjZGVmaW5lIENGR19BVEFfQUxUX09GRlNFVAkweDIwMAkvKiBhbHRlcm5hdGUgcmVnaXN0ZXIgb2Zmc2V0ICovCkBAIC0xODcsNyArMTg3LDYgQEAKICNkZWZpbmUgQ0ZHX0lTQV9JTyAwCiAKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSVEMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTIwMiw5ICsyMDEsOCBAQAogI2RlZmluZSBDT05GSUdfUENJX1NDQU5fU0hPVwogCiAjZGVmaW5lCUNGR19GSVJTVF9QQ0lfSVJRICAgMTAKLSNkZWZpbmUJQ0ZHX1NFQ09ORF9QQ0lfSVJRICA5IAotI2RlZmluZSBDRkdfVEhJUkRfUENJX0lSUSAgIDExIAorI2RlZmluZQlDRkdfU0VDT05EX1BDSV9JUlEgIDkKKyNkZWZpbmUgQ0ZHX1RISVJEX1BDSV9JUlEgICAxMQogI2RlZmluZQlDRkdfRk9SVEhfUENJX0lSUSAgIDE1CiAKLQogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zYzUyMF9zcHVuay5oIGIvaW5jbHVkZS9jb25maWdzL3NjNTIwX3NwdW5rLmgKaW5kZXggMGEyODgwNS4uOWQyNmJlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NjNTIwX3NwdW5rLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NjNTIwX3NwdW5rLmgKQEAgLTE4OSw4ICsxODksNiBAQAogI2RlZmluZSBDT05GSUdfSVNPX1BBUlRJVElPTiAvKiBFeHBlcmltZW50YWwgKi8KIAogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUlRDCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMDksNSArMjA3LDQgQEAKICNkZWZpbmUJQ0ZHX1RISVJEX1BDSV9JUlEgICAxMQogI2RlZmluZQlDRkdfRk9SVEhfUENJX0lSUSAgIDEyCiAKLQogI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zYzUyMF9zcHVua19yZWwuaCBiL2luY2x1ZGUvY29uZmlncy9zYzUyMF9zcHVua19yZWwuaAppbmRleCAyZDUzNTMwLi4yZTdhN2UxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvc2M1MjBfc3B1bmtfcmVsLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NjNTIwX3NwdW5rX3JlbC5oCkBAIC0yNyw2ICsyNyw2IEBACiAjaW5jbHVkZSAic2M1MjBfc3B1bmsuaCIKIAogI3VuZGVmIENPTkZJR19CT09UQ09NTUFORAotI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJImZzbG9hZCBib290L3ZtbGludXogOyBib290bSIgCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiZnNsb2FkIGJvb3Qvdm1saW51eiA7IGJvb3RtIgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zdm1fc2M4eHguaCBiL2luY2x1ZGUvY29uZmlncy9zdm1fc2M4eHguaAppbmRleCBiNDZiMGJlLi5lOWU4NmY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvc3ZtX3NjOHh4LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3N2bV9zYzh4eC5oCkBAIC05MiwyMiArOTIsMjIgQEAKIAogI3VuZGVmCUNPTkZJR19CT09UQVJHUwogI2RlZmluZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIm5mc3Jvb3Q9JChzZXJ2ZXJpcCk6JChyb290cGF0aClcMCIgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJyYW1hcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3XDAiICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJChib290YXJncykgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAiaXA9JChpcGFkZHIpOiQoc2VydmVyaXApOiQoZ2F0ZXdheWlwKTokKG5ldG1hc2spIiAgICAgIFwKLSAgICAgICAgICAgICAgICAiOiQoaG9zdG5hbWUpOiQobmV0ZGV2KTpvZmYgcGFuaWM9MVwwIiAgICAgICAgICAgICAgICAgIFwKLQkgICAgICAgICJmbGFzaF9uZnM9cnVuIG5mc2FyZ3MgYWRkaXA7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgImJvb3RtICQoa2VybmVsX2FkZHIpXDAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJmbGFzaF9zZWxmPXJ1biByYW1hcmdzIGFkZGlwOyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAiYm9vdG0gJChrZXJuZWxfYWRkcikgJChyYW1kaXNrX2FkZHIpXDAiICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIm5ldF9uZnM9dGZ0cCAweDIxMDAwMCAkKGJvb3RmaWxlKTtydW4gbmZzYXJncyBhZGRpcDtib290bVwwIiAgICAgXAotICAgICAgICAicm9vdHBhdGg9L29wdC9zaW5vdmVlL3BwYzh4eC1saW51eC0yLjAvdGFyZ2V0XDAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgImJvb3RmaWxlPXBJbWFnZS1zYzg1NXRcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJrZXJuZWxfYWRkcj00ODAwMDAwMFwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICJyYW1kaXNrX2FkZHI9NDgxMDAwMDBcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICIiCisJIm5mc2FyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgcncgIiAgICAgICAgICAgICAgICAgICAgIFwKKwkgIm5mc3Jvb3Q9JChzZXJ2ZXJpcCk6JChyb290cGF0aClcMCIgICAgICAgICAgICAgICAgICAgICBcCisJInJhbWFyZ3M9c2V0ZW52IGJvb3RhcmdzIHJvb3Q9L2Rldi9yYW0gcndcMCIgICAgICAgICAgICAgICAgICAgIFwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICQoYm9vdGFyZ3MpICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiaXA9JChpcGFkZHIpOiQoc2VydmVyaXApOiQoZ2F0ZXdheWlwKTokKG5ldG1hc2spIiAgICAgIFwKKwkJIjokKGhvc3RuYW1lKTokKG5ldGRldik6b2ZmIHBhbmljPTFcMCIgICAgICAgICAgICAgICAgICBcCisJCSJmbGFzaF9uZnM9cnVuIG5mc2FyZ3MgYWRkaXA7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAiYm9vdG0gJChrZXJuZWxfYWRkcilcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiZmxhc2hfc2VsZj1ydW4gcmFtYXJncyBhZGRpcDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAiYm9vdG0gJChrZXJuZWxfYWRkcikgJChyYW1kaXNrX2FkZHIpXDAiICAgICAgICAgICAgICAgIFwKKwkibmV0X25mcz10ZnRwIDB4MjEwMDAwICQoYm9vdGZpbGUpO3J1biBuZnNhcmdzIGFkZGlwO2Jvb3RtXDAiICAgICBcCisJInJvb3RwYXRoPS9vcHQvc2lub3ZlZS9wcGM4eHgtbGludXgtMi4wL3RhcmdldFwwIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJImJvb3RmaWxlPXBJbWFnZS1zYzg1NXRcMCIgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJImtlcm5lbF9hZGRyPTQ4MDAwMDAwXDAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkicmFtZGlza19hZGRyPTQ4MTAwMDAwXDAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSIiCiAjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkJCQkJCQlcCiAJInNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3IG5mc3Jvb3Q9JChzZXJ2ZXJpcCk6JChyb290cGF0aCkgIiAJXAogCSJpcD0kKGlwYWRkcik6JChzZXJ2ZXJpcCk6JChnYXRld2F5aXApOiQobmV0bWFzayk6JChob3N0bmFtZSk6Om9mZjsgIiAJXApAQCAtMTMzLDggKzEzMyw4IEBACiAjZGVmaW5lCUNPTkZJR19SVENfTVBDOHh4CQkvKiB1c2UgaW50ZXJuYWwgUlRDIG9mIE1QQzh4eAkqLwogCiAjZGVmaW5lIENPTkZJR19DT01NQU5EUwkgICAgICAoIENPTkZJR19DTURfREZMCXwgXAotCQkgICAgICAgICAgICAgICAgQ0ZHX0NNRF9BU0tFTlYgIHwgXAotCQkgCQlDRkdfQ01EX0RIQ1AJfCBcCisJCQkJQ0ZHX0NNRF9BU0tFTlYgIHwgXAorCQkJCUNGR19DTURfREhDUAl8IFwKIAkJCQlDRkdfQ01EX0RPQwl8IFwKIC8qCQkJCUNGR19DTURfSURFICAgICB8Ki8gXAogCQkJCUNGR19DTURfREFURQkpCkBAIC0yNzIsNyArMjcyLDcgQEAKICAqLwogI2lmbmRlZglDT05GSUdfQ0FOX0RSSVZFUgogLyojZGVmaW5lIENGR19TSVVNQ1IgMHgwMDYxMGMwMAkqLwotI2RlZmluZSBDRkdfU0lVTUNSIDB4MDAwMDAwMDAJCisjZGVmaW5lIENGR19TSVVNQ1IgMHgwMDAwMDAwMAogI2Vsc2UJLyogd2UgbXVzdCBhY3RpdmF0ZSBHUEw1IGluIHRoZSBTSVVNQ1IgZm9yIENBTiAqLwogI2RlZmluZSBDRkdfU0lVTUNSCShTSVVNQ1JfREJHQzExIHwgU0lVTUNSX0RCUEMwMCB8IFNJVU1DUl9NTFJDMDEpCiAjZW5kaWYJLyogQ09ORklHX0NBTl9EUklWRVIgKi8KQEAgLTMwOSwxNiArMzA5LDE2IEBACiAjZWxpZiBkZWZpbmVkIChDT05GSUdfODBNSHopCiAjZGVmaW5lIENGR19QTFBSQ1IgMHgwNGYwMTAwMAogI2RlZmluZSBDT05GSUdfOHh4X0dDTEtfRlJFUSA4MDAwMDAwMAotI2VsaWYgZGVmaW5lZChDT05GSUdfNzVNSHopCQotI2RlZmluZSBDRkdfUExQUkNSIDB4MDRhMDAxMDAJCisjZWxpZiBkZWZpbmVkKENPTkZJR183NU1IeikKKyNkZWZpbmUgQ0ZHX1BMUFJDUiAweDA0YTAwMTAwCiAjZGVmaW5lIENPTkZJR184eHhfR0NMS19GUkVRIDc1MDAwMDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR182Nk1IeikJCi0jZGVmaW5lIENGR19QTFBSQ1IgMHgwNDEwMTAwMAkKKyNlbGlmIGRlZmluZWQoQ09ORklHXzY2TUh6KQorI2RlZmluZSBDRkdfUExQUkNSIDB4MDQxMDEwMDAKICNkZWZpbmUgQ09ORklHXzh4eF9HQ0xLX0ZSRVEgNjYwMDAwMDAKLSNlbGlmIGRlZmluZWQoQ09ORklHXzUwTUh6KQkKLSNkZWZpbmUgQ0ZHX1BMUFJDUiAweDAzMTAxMDAwCQorI2VsaWYgZGVmaW5lZChDT05GSUdfNTBNSHopCisjZGVmaW5lIENGR19QTFBSQ1IgMHgwMzEwMTAwMAogI2RlZmluZSBDT05GSUdfOHh4X0dDTEtfRlJFUSA1MDAwMDAwMAotI2VuZGlmCQorI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFNDQ1IgLSBTeXN0ZW0gQ2xvY2sgYW5kIHJlc2V0IENvbnRyb2wgUmVnaXN0ZXIJCTE1LTI3CkBAIC0zMjcsMTEgKzMyNywxMSBAQAogICogcG93ZXIgbWFuYWdlbWVudCBhbmQgc29tZSBvdGhlciBpbnRlcm5hbCBjbG9ja3MKICAqLwogI2RlZmluZSBTQ0NSX01BU0sJU0NDUl9FQkRGMTEKLSNpZmRlZglDT05GSUdfQlVTX0RJVjIJCisjaWZkZWYJQ09ORklHX0JVU19ESVYyCiAjZGVmaW5lIENGR19TQ0NSCTB4MDIwMjAwMDAgfCBTQ0NSX1JUU0VMCiAjZWxzZQkJCS8qIHVwIHRvIDUwIE1IeiB3ZSB1c2UgYSAxOjEgY2xvY2sgKi8KICNkZWZpbmUgQ0ZHX1NDQ1IgICAgMHgwMjAwMDAwMCB8IFNDQ1JfUlRTRUwKLSNlbmRpZgkKKyNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQQ01DSUEgc3R1ZmYKQEAgLTM3MCw3ICszNzAsNyBAQAogCQkJCQkgICAqLwogI2RlZmluZSBDRkdfQVRBX0FMVF9PRkZTRVQgICAgICAweDAyMTAgIC8qIE9mZnNldCBmb3IgYWx0ZXJuYXRlIHJlZ2lzdGVycwogCQkJCQkgICAqLwotI2RlZmluZSBDT05GSUdfQVRBUEkgICAgCisjZGVmaW5lIENPTkZJR19BVEFQSQogI2RlZmluZSBDRkdfUElPX01PREUgMAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MDAsMzUgKzQwMCwzNSBAQAogLyoKICAqIEZMQVNIIHRpbWluZzoKICAqLwotI2lmIGRlZmluZWQoQ09ORklHXzEwME1IeikgCi0jZGVmaW5lIENGR19PUl9USU1JTkdfRkxBU0ggMHgwMDAwMDJmNAkKLSNkZWZpbmUgQ0ZHX09SX1RJTUlOR19ET0MgICAweDAwMDAwMmY0CQorI2lmIGRlZmluZWQoQ09ORklHXzEwME1IeikKKyNkZWZpbmUgQ0ZHX09SX1RJTUlOR19GTEFTSCAweDAwMDAwMmY0CisjZGVmaW5lIENGR19PUl9USU1JTkdfRE9DICAgMHgwMDAwMDJmNAogI2RlZmluZSBDRkdfTXhNUl9QVHggMHg2MTAwMDAwMAogI2RlZmluZSBDRkdfTVBUUFIgMHg0MDAKIAogI2VsaWYgIGRlZmluZWQoQ09ORklHXzgwTUh6KQotI2RlZmluZSBDRkdfT1JfVElNSU5HX0ZMQVNIIDB4MDAwMDBmZjQJCi0jZGVmaW5lIENGR19PUl9USU1JTkdfRE9DICAgMHgwMDAwMDFmNAkKKyNkZWZpbmUgQ0ZHX09SX1RJTUlOR19GTEFTSCAweDAwMDAwZmY0CisjZGVmaW5lIENGR19PUl9USU1JTkdfRE9DICAgMHgwMDAwMDFmNAogI2RlZmluZSBDRkdfTXhNUl9QVHggMHg0ZTAwMDAwMAogI2RlZmluZSBDRkdfTVBUUFIgMHg0MDAKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfNzVNSHopIAotI2RlZmluZSBDRkdfT1JfVElNSU5HX0ZMQVNIIDB4MDAwMDA4ZjQJCi0jZGVmaW5lIENGR19PUl9USU1JTkdfRE9DICAgMHgwMDAwMDJmNAkKKyNlbGlmIGRlZmluZWQoQ09ORklHXzc1TUh6KQorI2RlZmluZSBDRkdfT1JfVElNSU5HX0ZMQVNIIDB4MDAwMDA4ZjQKKyNkZWZpbmUgQ0ZHX09SX1RJTUlOR19ET0MgICAweDAwMDAwMmY0CiAjZGVmaW5lIENGR19NeE1SX1BUeCAweDQ5MDAwMDAwCiAjZGVmaW5lIENGR19NUFRQUiAweDQwMAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR182Nk1IeikKICNkZWZpbmUgQ0ZHX09SX1RJTUlOR19GTEFTSCAgICAgKE9SX0FDU19ESVYxICB8IE9SX1RSTFggfCBPUl9DU05UX1NBTSB8IFwKLSAgICAgICAgT1JfU0NZXzNfQ0xLIHwgT1JfRUhUUiB8IE9SX0JJKQorCU9SX1NDWV8zX0NMSyB8IE9SX0VIVFIgfCBPUl9CSSkKIC8qI2RlZmluZSBDRkdfT1JfVElNSU5HX0ZMQVNIIDB4MDAwMDAxZjQgKi8KLSNkZWZpbmUgQ0ZHX09SX1RJTUlOR19ET0MgICAweDAwMDAwM2Y0CQorI2RlZmluZSBDRkdfT1JfVElNSU5HX0RPQyAgIDB4MDAwMDAzZjQKICNkZWZpbmUgQ0ZHX014TVJfUFR4ICAweDQwMDAwMDAwCiAjZGVmaW5lIENGR19NUFRQUiAweDQwMAogCiAjZWxzZQkJLyogICA1MCBNSHogKi8KICNkZWZpbmUgQ0ZHX09SX1RJTUlOR19GTEFTSCAweDAwMDAwZmY0Ci0jZGVmaW5lIENGR19PUl9USU1JTkdfRE9DICAgMHgwMDAwMDFmNAkKKyNkZWZpbmUgQ0ZHX09SX1RJTUlOR19ET0MgICAweDAwMDAwMWY0CiAjZGVmaW5lIENGR19NeE1SX1BUeCAgMHgzMDAwMDAwMAogI2RlZmluZSBDRkdfTVBUUFIgMHg0MDAKICNlbmRpZgkvKkNPTkZJR18/P01IeiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3YzNy5oIGIvaW5jbHVkZS9jb25maWdzL3YzNy5oCmluZGV4IGY1Mjc0NDAuLjY2OTY5ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy92MzcuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvdjM3LmgKQEAgLTM3Niw2ICszNzYsNCBAQAogI2RlZmluZQlCT09URkxBR19DT0xECTB4MDEJCS8qIE5vcm1hbCBQb3dlci1PbjogQm9vdCBmcm9tIEZMQVNICSovCiAjZGVmaW5lIEJPT1RGTEFHX1dBUk0JMHgwMgkJLyogU29mdHdhcmUgcmVib290CQkJKi8KIAotCi0KICNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvd2VwZXAyNTAuaCBiL2luY2x1ZGUvY29uZmlncy93ZXBlcDI1MC5oCmluZGV4IGM4OGM0YWIuLmVjYjcyMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy93ZXBlcDI1MC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy93ZXBlcDI1MC5oCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogQ29weXJpZ2h0IChDKSAyMDAzIEVUQyBzLnIuby4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01Miw3ICs1Miw3IEBACiAvKgogICogQm9vdCBvcHRpb25zLiBTZXR0aW5nIGRlbGF5IHRvIC0xIHN0b3BzIGF1dG9zdGFydCBjb3VudCBkb3duLgogICogTk9URTogU2VuZGluZyBwYXJhbWV0ZXJzIHRvIGtlcm5lbCBkZXBlbmRzIG9uIGtlcm5lbCB2ZXJzaW9uIGFuZAotICogMi40LjE5LXJtazYtcHhhMSBwYXRjaCB1c2VkIHdoaWxlIG15IHUtYm9vdCBjb2RpbmcgZGlkbid0IGFjY2VwdCAKKyAqIDIuNC4xOS1ybWs2LXB4YTEgcGF0Y2ggdXNlZCB3aGlsZSBteSB1LWJvb3QgY29kaW5nIGRpZG4ndCBhY2NlcHQKICAqIHBhcmFtZXRlcnMgYXQgYWxsISBEbyBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHRoZW0gc28uCiAgKi8KICNkZWZpbmUgQ09ORklHX0JPT1RERUxBWSAgIC0xCkBAIC03MSw3ICs3MSw3IEBACiAjZGVmaW5lIENGR19CQVJHU0laRSAgICAgICAgICAgIENGR19DQlNJWkUgICAgICAgICAgICAvKiBib290IGFyZ3MgYnVmIHNpemUgICovCiAKICNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQgICAgICAgMHhhMDQwMDAwMCAgICAgICAgICAgIC8qIG1lbXRlc3QgdGVzdCBhcmVhICAgKi8KLSNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5EICAgICAgICAgMHhhMDgwMDAwMCAgICAgIAorI2RlZmluZSBDRkdfTUVNVEVTVF9FTkQgICAgICAgICAweGEwODAwMDAwCiAKICN1bmRlZiAgQ0ZHX0NMS1NfSU5fSFogICAgICAgICAgICAgICAgICAgICAgIC8qIHVzZSBIWiBmb3IgZnJlcS4gZGlzcGxheSAgICAgKi8KIApAQCAtMTI4LDcgKzEyOCw3IEBACiAjZGVmaW5lIENGR19NQVhfRkxBU0hfQkFOS1MgICAgCTEgIAkvKiBGTEFTSCBiYW5rcyBjb3VudCAobm90IGNoaXAgY291bnQpKi8KICNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9TRUNUICAgICAJMTI4CS8qIG51bWJlciBvZiBzZWN0b3IgaW4gRkxBU0ggYmFuayAgICAqLwogI2RlZmluZSBXRVBfRkxBU0hfQlVTX1dJRFRIIAk0CS8qIHdlIHVzZSAzMiBiaXQgRkxBU0ggbWVtb3J5Li4uICAgICAqLwotI2RlZmluZSBXRVBfRkxBU0hfSU5URVJMRUFWRQkyCS8qIC4uLiBtYWRlIG9mIDIgY2hpcHMgKi8gCisjZGVmaW5lIFdFUF9GTEFTSF9JTlRFUkxFQVZFCTIJLyogLi4uIG1hZGUgb2YgMiBjaGlwcyAqLwogI2RlZmluZSBXRVBfRkxBU0hfQkFOS19TSVpFICAweDIwMDAwMDAgIC8qIHNpemUgb2Ygb25lIGZsYXNoIGJhbmsqLwogI2RlZmluZSBXRVBfRkxBU0hfU0VDVF9TSVpFICAweDAwNDAwMDAgIC8qIHNpemUgb2YgZXJhc2Ugc2VjdG9yICovCiAjZGVmaW5lIFdFUF9GTEFTSF9CQVNFICAgICAgIDB4MDAwMDAwMCAgLyogbG9jYXRpb24gb2YgZmxhc2ggbWVtb3J5ICovCkBAIC0xMzcsOSArMTM3LDkgQEAKIAogLyogVGhpcyBzaG91bGQgYmUgZGVmaW5lZCBpZiBDRkkgRkxBU0ggZGV2aWNlIGlzIHByZXNlbnQuIEFjdHVhbGx5IGJlbmVmaXQKICAgIGlzIG5vdCBzbyBjbGVhciB0byBtZS4gSW4gb3RoZXIgd29yZHMgd2UgY2FuIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbnMKLSAgIHRvIHVzZXIsIGJ1dCB0aGlzIGV4cGVjdHMgbW9yZSBjb21wbGV4IGZsYXNoIGhhbmRsaW5nIHdlIGRvIG5vdCBwcm92aWRlIAorICAgdG8gdXNlciwgYnV0IHRoaXMgZXhwZWN0cyBtb3JlIGNvbXBsZXggZmxhc2ggaGFuZGxpbmcgd2UgZG8gbm90IHByb3ZpZGUKICAgIG5vdy4qLwotI3VuZGVmICBDRkdfRkxBU0hfQ0ZJCQorI3VuZGVmICBDRkdfRkxBU0hfQ0ZJCiAKICNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQgICAgKDIqQ0ZHX0haKSAgICAvKiB0aW1lb3V0IGZvciBFcmFzZSBvcGVyYXRpb24gKi8KICNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQgICAgKDIqQ0ZHX0haKSAgICAvKiB0aW1lb3V0IGZvciBXcml0ZSBvcGVyYXRpb24gKi8KQEAgLTE3Myw3ICsxNzMsNyBAQAogI2RlZmluZSBDRkdfTU9OSVRPUl9MRU4JCTB4MjAwMDAJCS8qIDEyOGtiICggMSBmbGFzaCBzZWN0b3IgKSAgKi8KICNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCiAjZGVmaW5lIENGR19FTlZfQUREUgkJMHgyMDAwMAkgICAgICAgIC8qIGFic29sdXRlIGFkZHJlc3MgZm9yIG5vdyAgKi8KLSNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAJICAgICAgICAKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFCQkweDIwMDAKIAogI3VuZGVmICBDT05GSUdfRU5WX09WRVJXUklURSAgICAgICAgICAgICAgICAgICAgLyogZW52IGlzIG5vdCB3cml0YWJsZSBub3cgICAqLwogCkBAIC0xODUsNCArMTg1LDMgQEAKICNkZWZpbmUgQ0ZHX0xPQURfQUREUiAgICAgICAgMHg0MDAwMAogCiAjZW5kaWYgIC8qIF9fQ09ORklHX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kYXRhZmxhc2guaCBiL2luY2x1ZGUvZGF0YWZsYXNoLmgKaW5kZXggY2M0YmFkZi4uNWUxMTg2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kYXRhZmxhc2guaAorKysgYi9pbmNsdWRlL2RhdGFmbGFzaC5oCkBAIC05MSw3ICs5MSw2IEBACiB9IEFUOTFTX0RhdGFGbGFzaCwgKkFUOTFQU19EYXRhRmxhc2g7CiAKIAotCiB0eXBlZGVmIHN0cnVjdCBfQVQ5MVNfREFUQUZMQVNIX0lORk8gewogCiAJQVQ5MVNfRGF0YWZsYXNoRGVzYyBEZXNjOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kbTkxNjEuaCBiL2luY2x1ZGUvZG05MTYxLmgKaW5kZXggNjI5OTkyMS4uNzA2ZTIxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kbTkxNjEuaAorKysgYi9pbmNsdWRlL2RtOTE2MS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIE5PVEU6CURBVklDT00gZXRoZXJuZXQgUGh5c2ljYWwgbGF5ZXIgCisgKiBOT1RFOglEQVZJQ09NIGV0aGVybmV0IFBoeXNpY2FsIGxheWVyCiAgKgogICogVmVyc2lvbjoJQCgjKURNOTE2MS5oCTEuMC4wCTAxLzEwLzIwMDEKICAqCkBAIC0xMywzNiArMTMsMzYgQEAKICAqLwogCiAKLS8vIERBVklDT00gUEhZU0lDQUwgTEFZRVIgVFJBTlNDRUlWRVIgRE05MTYxCisvKiBEQVZJQ09NIFBIWVNJQ0FMIExBWUVSIFRSQU5TQ0VJVkVSIERNOTE2MSAqLwogCi0jZGVmaW5lCURNOTE2MV9CTUNSIAkJMAkvLyBCYXNpYyBNb2RlIENvbnRyb2wgUmVnaXN0ZXIKLSNkZWZpbmUgRE05MTYxX0JNU1IJCTEJLy8gQmFzaWMgTW9kZSBTdGF0dXMgUmVnaXN0ZXIKLSNkZWZpbmUgRE05MTYxX1BIWUlEMQkJMgkvLyBQSFkgSWRlbmRpZmllciBSZWdpc3RlciAxCi0jZGVmaW5lIERNOTE2MV9QSFlJRDIJCTMJLy8gUEhZIElkZW5kaWZpZXIgUmVnaXN0ZXIgMgotI2RlZmluZSBETTkxNjFfQU5BUgkJNAkvLyBBdXRvX05lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgCi0jZGVmaW5lIERNOTE2MV9BTkxQQVIJCTUJLy8gQXV0b19uZWdvdGlhdGlvbiBMaW5rIFBhcnRuZXIgQWJpbGl0eSBSZWdpc3RlcgotI2RlZmluZSBETTkxNjFfQU5FUgkJNgkvLyBBdXRvLW5lZ290aWF0aW9uIEV4cGFuc2lvbiBSZWdpc3RlciAKLSNkZWZpbmUgRE05MTYxX0RTQ1IJCTE2CS8vIFNwZWNpZmllZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCi0jZGVmaW5lIERNOTE2MV9EU0NTUgkJMTcJLy8gU3BlY2lmaWVkIENvbmZpZ3VyYXRpb24gYW5kIFN0YXR1cyBSZWdpc3RlcgotI2RlZmluZSBETTkxNjFfMTBCVENTUgkJMTgJLy8gMTBCQVNFLVQgQ29uZmlndXJhdGlvbiBhbmQgU2F0dXMgUmVnaXN0ZXIKLSNkZWZpbmUgRE05MTYxX01ESU5UUgkJMjEJLy8gU3BlY2lmaWVkIEludGVycnVwdCBSZWdpc3RlcgotI2RlZmluZSBETTkxNjFfUkVDUgkJMjIJLy8gU3BlY2lmaWVkIFJlY2VpdmUgRXJyb3IgQ291bnRlciBSZWdpc3RlcgotI2RlZmluZSBETTkxNjFfRElTQ1IJCTIzCS8vIFNwZWNpZmllZCBEaXNjb25uZWN0IENvdW50ZXIgUmVnaXN0ZXIKLSNkZWZpbmUgRE05MTYxX1JMU1IJCTI0CS8vIEhhcmR3YXJlIFJlc2V0IExhdGNoIFN0YXRlIFJlZ2lzdGVyCisjZGVmaW5lCURNOTE2MV9CTUNSIAkJMAkvKiBCYXNpYyBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE05MTYxX0JNU1IJCTEJLyogQmFzaWMgTW9kZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE05MTYxX1BIWUlEMQkJMgkvKiBQSFkgSWRlbmRpZmllciBSZWdpc3RlciAxICovCisjZGVmaW5lIERNOTE2MV9QSFlJRDIJCTMJLyogUEhZIElkZW5kaWZpZXIgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBETTkxNjFfQU5BUgkJNAkvKiBBdXRvX05lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgICovCisjZGVmaW5lIERNOTE2MV9BTkxQQVIJCTUJLyogQXV0b19uZWdvdGlhdGlvbiBMaW5rIFBhcnRuZXIgQWJpbGl0eSBSZWdpc3RlciAqLworI2RlZmluZSBETTkxNjFfQU5FUgkJNgkvKiBBdXRvLW5lZ290aWF0aW9uIEV4cGFuc2lvbiBSZWdpc3RlciAgKi8KKyNkZWZpbmUgRE05MTYxX0RTQ1IJCTE2CS8qIFNwZWNpZmllZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIERNOTE2MV9EU0NTUgkJMTcJLyogU3BlY2lmaWVkIENvbmZpZ3VyYXRpb24gYW5kIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBETTkxNjFfMTBCVENTUgkJMTgJLyogMTBCQVNFLVQgQ29uZmlndXJhdGlvbiBhbmQgU2F0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE05MTYxX01ESU5UUgkJMjEJLyogU3BlY2lmaWVkIEludGVycnVwdCBSZWdpc3RlciAqLworI2RlZmluZSBETTkxNjFfUkVDUgkJMjIJLyogU3BlY2lmaWVkIFJlY2VpdmUgRXJyb3IgQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSBETTkxNjFfRElTQ1IJCTIzCS8qIFNwZWNpZmllZCBEaXNjb25uZWN0IENvdW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE05MTYxX1JMU1IJCTI0CS8qIEhhcmR3YXJlIFJlc2V0IExhdGNoIFN0YXRlIFJlZ2lzdGVyICovCiAKIAotLy8gLS1CaXQgZGVmaW5pdGlvbnM6IERNOTE2MV9CTUNSCi0jZGVmaW5lIERNOTE2MV9SRVNFVCAgIAkgICAgICAgICAoMSA8PCAxNSkJLy8gMT0gU29mdHdhcmUgUmVzZXQ7IDA9Tm9ybWFsIE9wZXJhdGlvbgotI2RlZmluZSBETTkxNjFfTE9PUEJBQ0sJICAgICAgICAgKDEgPDwgMTQpCS8vIDE9bG9vcGJhY2sgRW5hYmxlZDsgMD1Ob3JtYWwgT3BlcmF0aW9uCi0jZGVmaW5lIERNOTE2MV9TUEVFRF9TRUxFQ1QgICAgICAoMSA8PCAxMykJLy8gMT0xMDBNYnBzOyAwPTEwTWJwcworLyogLS1CaXQgZGVmaW5pdGlvbnM6IERNOTE2MV9CTUNSICovCisjZGVmaW5lIERNOTE2MV9SRVNFVCAgIAkgICAgICAgICAoMSA8PCAxNSkJLyogMT0gU29mdHdhcmUgUmVzZXQ7IDA9Tm9ybWFsIE9wZXJhdGlvbiAqLworI2RlZmluZSBETTkxNjFfTE9PUEJBQ0sJICAgICAgICAgKDEgPDwgMTQpCS8qIDE9bG9vcGJhY2sgRW5hYmxlZDsgMD1Ob3JtYWwgT3BlcmF0aW9uICovCisjZGVmaW5lIERNOTE2MV9TUEVFRF9TRUxFQ1QgICAgICAoMSA8PCAxMykJLyogMT0xMDBNYnBzOyAwPTEwTWJwcyAqLwogI2RlZmluZSBETTkxNjFfQVVUT05FRwkgICAgICAgICAoMSA8PCAxMikKICNkZWZpbmUgRE05MTYxX1BPV0VSX0RPV04gICAgICAgICgxIDw8IDExKQotI2RlZmluZSBETTkxNjFfSVNPTEFURSAgICAgICAgICAgKDEgPDwgMTApCQorI2RlZmluZSBETTkxNjFfSVNPTEFURSAgICAgICAgICAgKDEgPDwgMTApCiAjZGVmaW5lIERNOTE2MV9SRVNUQVJUX0FVVE9ORUcgICAoMSA8PCA5KQogI2RlZmluZSBETTkxNjFfRFVQTEVYX01PREUgICAgICAgKDEgPDwgOCkKICNkZWZpbmUgRE05MTYxX0NPTExJU0lPTl9URVNUICAgICgxIDw8IDcpCiAKLS8vLS1CaXQgZGVmaW5pdGlvbnM6IERNOTE2MV9CTVNSCisvKi0tQml0IGRlZmluaXRpb25zOiBETTkxNjFfQk1TUiAqLwogI2RlZmluZSBETTkxNjFfMTAwQkFTRV9UNCAgICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIERNOTE2MV8xMDBCQVNFX1RYX0ZEICAgICAoMSA8PCAxNCkKICNkZWZpbmUgRE05MTYxXzEwMEJBU0VfVDRfSEQgICAgICgxIDw8IDEzKQpAQCAtNTYsMTEgKzU2LDExIEBACiAjZGVmaW5lIERNOTE2MV9KQUJCRVJfREVURUNUICAgICAoMSA8PCAxKQogI2RlZmluZSBETTkxNjFfRVhURU5EX0NBUEFCICAgICAgKDEgPDwgMCkKIAotLy8tLWRlZmluaXRpb25zOiBETTkxNjFfUEhZSUQxCisvKi0tZGVmaW5pdGlvbnM6IERNOTE2MV9QSFlJRDEgKi8KICNkZWZpbmUgRE05MTYxX1BIWUlEMV9PVUkJIDB4NjA2RQogI2RlZmluZSBETTkxNjFfTFNCX01BU0sJICAgICAgICAgMHgzRgogCi0vLy0tQml0IGRlZmluaXRpb25zOiBETTkxNjFfQU5BUiwgRE05MTYxX0FOTFBBUgorLyotLUJpdCBkZWZpbml0aW9uczogRE05MTYxX0FOQVIsIERNOTE2MV9BTkxQQVIgKi8KICNkZWZpbmUgRE05MTYxX05QICAgICAgICAgICAgICAgKDEgPDwgMTUpCiAjZGVmaW5lIERNOTE2MV9BQ0sgICAgICAgICAgICAgICgxIDw8IDE0KQogI2RlZmluZSBETTkxNjFfUkYgICAgICAgICAgICAgICAoMSA8PCAxMykKQEAgLTcyLDE0ICs3MiwxNCBAQAogI2RlZmluZSBETTkxNjFfMTBfSERYICAgICAgICAgICAoMSA8PCA1KQogI2RlZmluZSBETTkxNjFfQU5fSUVFRV84MDJfMwkweDAwMDEKIAotLy8tLUJpdCBkZWZpbml0aW9uczogRE05MTYxX0FORVIKKy8qLS1CaXQgZGVmaW5pdGlvbnM6IERNOTE2MV9BTkVSICovCiAjZGVmaW5lIERNOTE2MV9QREYgICAgICAgICAgICAgICgxIDw8IDQpCiAjZGVmaW5lIERNOTE2MV9MUF9OUF9BQkxFICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIERNOTE2MV9OUF9BQkxFICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIERNOTE2MV9QQUdFX1JYICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIERNOTE2MV9MUF9BTl9BQkxFICAgICAgICgxIDw8IDApCiAKLS8vLS1CaXQgZGVmaW5pdGlvbnM6IERNOTE2MV9EU0NSCisvKi0tQml0IGRlZmluaXRpb25zOiBETTkxNjFfRFNDUiAqLwogI2RlZmluZSBETTkxNjFfQlA0QjVCICAgICAgICAgICAoMSA8PCAxNSkKICNkZWZpbmUgRE05MTYxX0JQX1NDUiAgICAgICAgICAgKDEgPDwgMTQpCiAjZGVmaW5lIERNOTE2MV9CUF9BTElHTiAgICAgICAgICgxIDw8IDEzKQpAQCAtOTYsMTMgKzk2LDEzIEBACiAjZGVmaW5lIERNOTE2MV9TTEVFUCAgICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIERNOTE2MV9STE9VVCAgICAgICAgICAgICgxIDw8IDApCiAKLS8vLS1CaXQgZGVmaW5pdGlvbnM6IERNOTE2MV9EU0NTUgorLyotLUJpdCBkZWZpbml0aW9uczogRE05MTYxX0RTQ1NSICovCiAjZGVmaW5lIERNOTE2MV8xMDBGRFggICAgICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBETTkxNjFfMTAwSERYICAgICAgICAgICAoMSA8PCAxNCkKICNkZWZpbmUgRE05MTYxXzEwRkRYICAgICAgICAgICAgKDEgPDwgMTMpCiAjZGVmaW5lIERNOTE2MV8xMEhEWCAgICAgICAgICAgICgxIDw8IDEyKQogCi0vLy0tQml0IGRlZmluaXRpb25zOiBETTkxNjFfMTBCVENTUgorLyotLUJpdCBkZWZpbml0aW9uczogRE05MTYxXzEwQlRDU1IgKi8KICNkZWZpbmUgRE05MTYxX0xQX0VOICAgICAgICAgICAoMSA8PCAxNCkKICNkZWZpbmUgRE05MTYxX0hCRSAgICAgICAgICAgICAoMSA8PCAxMykKICNkZWZpbmUgRE05MTYxX1NRVUVMQ0ggICAgICAgICAoMSA8PCAxMikKQEAgLTExMSw3ICsxMTEsNyBAQAogI2RlZmluZSBETTkxNjFfUE9MUiAgICAgICAgICAgICgxIDw8IDApCiAKIAotLy8tLUJpdCBkZWZpbml0aW9uczogRE05MTYxX01ESU5UUgorLyotLUJpdCBkZWZpbml0aW9uczogRE05MTYxX01ESU5UUiAqLwogI2RlZmluZSBETTkxNjFfSU5UUl9QRU5EICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBETTkxNjFfRkRYX01BU0sgICAgICAgICgxIDw8IDExKQogI2RlZmluZSBETTkxNjFfU1BEX01BU0sgICAgICAgICgxIDw8IDEwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9lbGYuaCBiL2luY2x1ZGUvZWxmLmgKaW5kZXggZWQyMzhjMy4uMWJlMjk0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9lbGYuaAorKysgYi9pbmNsdWRlL2VsZi5oCkBAIC0xMTUsOSArMTE1LDkgQEAKIAogLyogZV9pZGVudCAqLwogI2RlZmluZSBJU19FTEYoZWhkcikgKChlaGRyKS5lX2lkZW50W0VJX01BRzBdID09IEVMRk1BRzAgJiYgXAotICAgICAgICAgICAgICAgICAgICAgIChlaGRyKS5lX2lkZW50W0VJX01BRzFdID09IEVMRk1BRzEgJiYgXAotICAgICAgICAgICAgICAgICAgICAgIChlaGRyKS5lX2lkZW50W0VJX01BRzJdID09IEVMRk1BRzIgJiYgXAotICAgICAgICAgICAgICAgICAgICAgIChlaGRyKS5lX2lkZW50W0VJX01BRzNdID09IEVMRk1BRzMpCisJCSAgICAgIChlaGRyKS5lX2lkZW50W0VJX01BRzFdID09IEVMRk1BRzEgJiYgXAorCQkgICAgICAoZWhkcikuZV9pZGVudFtFSV9NQUcyXSA9PSBFTEZNQUcyICYmIFwKKwkJICAgICAgKGVoZHIpLmVfaWRlbnRbRUlfTUFHM10gPT0gRUxGTUFHMykKIAogLyogRUxGIEhlYWRlciAqLwogdHlwZWRlZiBzdHJ1Y3QgZWxmaGRyewpAQCAtNTMxLDcgKzUzMSw3IEBACiAvKiBDeWdudXMgbG9jYWwgYml0cyBiZWxvdyAqLwogI2RlZmluZSBFRl9QUENfUkVMT0NBVEFCTEUgICAgICAweDAwMDEwMDAwICAgICAgLyogUG93ZXJQQyAtbXJlbG9jYXRhYmxlIGZsYWcqLwogI2RlZmluZSBFRl9QUENfUkVMT0NBVEFCTEVfTElCICAweDAwMDA4MDAwICAgICAgLyogUG93ZXJQQyAtbXJlbG9jYXRhYmxlLWxpYgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyAqLworCQkJCQkJICAgZmxhZyAqLwogCiAvKiBQb3dlclBDIHJlbG9jYXRpb25zIGRlZmluZWQgYnkgdGhlIEFCSXMgKi8KICNkZWZpbmUgUl9QUENfTk9ORSAgICAgICAgICAgICAgMApAQCAtNjA2LDQgKzYwNiwzIEBACiAjZGVmaW5lIFJfUFBDX1RPQzE2ICAgICAgICAgICAgIDI1NQogCiAjZW5kaWYgLyogX0VMRl9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmRjLmggYi9pbmNsdWRlL2ZkYy5oCmluZGV4IDc4OTJiMGUuLmI2NmYyMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZmRjLmgKKysrIGIvaW5jbHVkZS9mZGMuaApAQCAtMjUsOCArMjUsNiBAQAogI2lmbmRlZiBfRkRDX0hfCiAjZGVmaW5lIF9GRENfSF8KIAotCi0KIC8qIEZ1bmN0aW9ucyBwcm90b3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIGludCBmZGNfZmRvc19pbml0IChpbnQgZHJpdmUpOwogaW50IGZkY19mZG9zX3NlZWsgKGludCB3aGVyZSk7CkBAIC0zNiw2ICszNCw0IEBACiBpbnQgZG9zX3JlYWQgKHVsb25nIGFkZHIpOwogaW50IGRvc19kaXIgKHZvaWQpOwogCi0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dhbGlsZW8vY29yZS5oIGIvaW5jbHVkZS9nYWxpbGVvL2NvcmUuaAppbmRleCA1NmRiMDk3Li4wNzM1ZDA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dhbGlsZW8vY29yZS5oCisrKyBiL2luY2x1ZGUvZ2FsaWxlby9jb3JlLmgKQEAgLTEyMywxOCArMTIzLDE4IEBACiAjZGVmaW5lIFNIT1JUX1NXQVAoWCkgKChYIDw8OCApIHwgKFggPj4gOCkpCiAKICNkZWZpbmUgV09SRF9TV0FQKFgpICgoKFgpJjB4ZmYpPDwyNCkrICAgICAgXAotICAgICAgICAgICAgICAgICAgICAoKChYKSYweGZmMDApPDw4KSsgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICgoKFgpJjB4ZmYwMDAwKT4+OCkrICAgIFwKLSAgICAgICAgICAgICAgICAgICAgKCgoWCkmMHhmZjAwMDAwMCk+PjI0KQorCQkgICAgKCgoWCkmMHhmZjAwKTw8OCkrICAgICAgXAorCQkgICAgKCgoWCkmMHhmZjAwMDApPj44KSsgICAgXAorCQkgICAgKCgoWCkmMHhmZjAwMDAwMCk+PjI0KQogCiAjZGVmaW5lIExPTkdfU1dBUChYKSAoIChsNjQpICgoKFgpJjB4ZmZVTEwpPDw1NikrICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFgpJjB4ZmYwMFVMTCk8PDQwKSsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChYKSYweGZmMDAwMFVMTCk8PDI0KSsgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWCkmMHhmZjAwMDAwMFVMTCk8PDgpKyAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFgpJjB4ZmYwMDAwMDAwMFVMTCk+PjgpKyAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChYKSYweGZmMDAwMDAwMDAwMFVMTCk+PjI0KSsgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoWCkmMHhmZjAwMDAwMDAwMDAwMFVMTCk+PjQwKSsgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFgpJjB4ZmYwMDAwMDAwMDAwMDAwMFVMTCk+PjU2KSkKKwkJCSAgICAoKChYKSYweGZmMDBVTEwpPDw0MCkrICAgICAgICAgICAgICBcCisJCQkgICAgKCgoWCkmMHhmZjAwMDBVTEwpPDwyNCkrICAgICAgICAgICAgXAorCQkJICAgICgoKFgpJjB4ZmYwMDAwMDBVTEwpPDw4KSsgICAgICAgICAgIFwKKwkJCSAgICAoKChYKSYweGZmMDAwMDAwMDBVTEwpPj44KSsgICAgICAgICBcCisJCQkgICAgKCgoWCkmMHhmZjAwMDAwMDAwMDBVTEwpPj4yNCkrICAgICAgXAorCQkJICAgICgoKFgpJjB4ZmYwMDAwMDAwMDAwMDBVTEwpPj40MCkrICAgIFwKKwkJCSAgICAoKChYKSYweGZmMDAwMDAwMDAwMDAwMDBVTEwpPj41NikpCiAKICNlbmRpZgogCkBAIC0xNTQsNDQgKzE1NCw0NCBAQAogLyogUmVhZC9Xcml0ZSB0by9mcm9tIEdUYHMgaW50ZXJuYWwgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEdUX1JFR19SRUFEKG9mZnNldCwgcERhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogKnBEYXRhID0gKCAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoTk9ORV9DQUNIRUFCTEUgfCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBJTlRFUk5BTF9SRUdfQkFTRV9BRERSIHwgKG9mZnNldCkpKSApIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlJTlRFUk5BTF9SRUdfQkFTRV9BRERSIHwgKG9mZnNldCkpKSApIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogKnBEYXRhID0gV09SRF9TV0FQKCpwRGF0YSkKIAogI2RlZmluZSBHVFJFR1JFQUQob2Zmc2V0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgIChXT1JEX1NXQVAoICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShOT05FX0NBQ0hFQUJMRSB8ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgIElOVEVSTkFMX1JFR19CQVNFX0FERFIgfCAob2Zmc2V0KSkpICkpCisJIChXT1JEX1NXQVAoICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShOT05FX0NBQ0hFQUJMRSB8ICAgICAgICAgICAgXAorCQkgICBJTlRFUk5BTF9SRUdfQkFTRV9BRERSIHwgKG9mZnNldCkpKSApKQogCiAjZGVmaW5lIEdUX1JFR19XUklURShvZmZzZXQsIGRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogKigodW5zaWduZWQgaW50ICopKCBJTlRFUk5BTF9SRUdfQkFTRV9BRERSIHwgKG9mZnNldCkpKSA9ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgV09SRF9TV0FQKGRhdGEpCisJCSAgICBXT1JEX1NXQVAoZGF0YSkKIAogLyogV3JpdGUgMzIvMTYvOCBiaXQgKi8KICNkZWZpbmUgV1JJVEVfQ0hBUihhZGRyZXNzLCBkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICooKHVuc2lnbmVkIGNoYXIgKikoYWRkcmVzcykpID0gZGF0YQorCSooKHVuc2lnbmVkIGNoYXIgKikoYWRkcmVzcykpID0gZGF0YQogI2RlZmluZSBXUklURV9TSE9SVChhZGRyZXNzLCBkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKigodW5zaWduZWQgc2hvcnQgKikoYWRkcmVzcykpID0gZGF0YQorCSooKHVuc2lnbmVkIHNob3J0ICopKGFkZHJlc3MpKSA9IGRhdGEKICNkZWZpbmUgV1JJVEVfV09SRChhZGRyZXNzLCBkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICooKHVuc2lnbmVkIGludCAqKShhZGRyZXNzKSkgPSBkYXRhCisJKigodW5zaWduZWQgaW50ICopKGFkZHJlc3MpKSA9IGRhdGEKIAogLyogUmVhZCAzMi8xNi84IGJpdHMgLSByZXR1cm5zIGRhdGEgaW4gdmFyaWFibGUuICovCiAjZGVmaW5lIFJFQURfQ0hBUihhZGRyZXNzLCBwRGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAqcERhdGEgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKGFkZHJlc3MpKQorCSpwRGF0YSA9ICooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoYWRkcmVzcykpCiAKICNkZWZpbmUgUkVBRF9TSE9SVChhZGRyZXNzLCBwRGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICpwRGF0YSA9ICooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKGFkZHJlc3MpKQorCSpwRGF0YSA9ICooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKGFkZHJlc3MpKQogCiAjZGVmaW5lIFJFQURfV09SRChhZGRyZXNzLCBwRGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAqcERhdGEgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoYWRkcmVzcykpCisJKnBEYXRhID0gKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKGFkZHJlc3MpKQogCiAvKiBSZWFkIDMyLzE2LzggYml0IC0gcmV0dXJucyBkYXRhIGRpcmVjdC4gKi8KICNkZWZpbmUgUkVBRENIQVIoYWRkcmVzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKGFkZHJlc3MpIHwgTk9ORV9DQUNIRUFCTEUpKQorCSooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoKGFkZHJlc3MpIHwgTk9ORV9DQUNIRUFCTEUpKQogCiAjZGVmaW5lIFJFQURTSE9SVChhZGRyZXNzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSgoYWRkcmVzcykgfCBOT05FX0NBQ0hFQUJMRSkpCisJKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikoKGFkZHJlc3MpIHwgTk9ORV9DQUNIRUFCTEUpKQogCiAjZGVmaW5lIFJFQURXT1JEKGFkZHJlc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoKGFkZHJlc3MpIHwgTk9ORV9DQUNIRUFCTEUpKQorCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSgoYWRkcmVzcykgfCBOT05FX0NBQ0hFQUJMRSkpCiAKIC8qIFRob3NlIHR3byBNYWNyb3Mgd2VyZSBkZWZpbmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBNSVBTICovCiAjZGVmaW5lIFZJUlRVQUxfVE9fUEhZKHgpICAgICgoKHVuc2lnbmVkIGludCl4KSAmIDB4ZmZmZmZmZmYpCkBAIC0yMDMsOCArMjAzLDggQEAKICAgIFNFVF9SRUdfQklUUygweDg0MCxCSVQzIHwgQklUMjQgfCBCSVQzMCkgLSBzZXQgYml0czogMywyNCBhbmQgMzAgdG8gbG9naWMKICAgICcxJyBpbiByZWdpc3RlciAweDg0MCB3aGlsZSB0aGUgb3RoZXIgYml0cyBzdGF5cyBhcyBpcy4gKi8KICNkZWZpbmUgU0VUX1JFR19CSVRTKHJlZ09mZnNldCxiaXRzKSBcCi0gICAgICAgICoodW5zaWduZWQgaW50KikoTk9ORV9DQUNIRUFCTEUgfCBJTlRFUk5BTF9SRUdfQkFTRV9BRERSIHwgIFwKLSAgICAgICAgcmVnT2Zmc2V0KSB8PSAodW5zaWduZWQgaW50KVdPUkRfU1dBUChiaXRzKQorCSoodW5zaWduZWQgaW50KikoTk9ORV9DQUNIRUFCTEUgfCBJTlRFUk5BTF9SRUdfQkFTRV9BRERSIHwgIFwKKwlyZWdPZmZzZXQpIHw9ICh1bnNpZ25lZCBpbnQpV09SRF9TV0FQKGJpdHMpCiAKIC8qICBSRVNFVF9SRUdfQklUUyhyZWdPZmZzZXQsYml0cykgLQogICAgZ2V0cyByZWdpc3RlciBvZmZzZXQgYW5kIGJpdHM6IGEgMzJiaXQgdmFsdWUuIEl0IHNldCB0byBsb2dpYyAnMCcgaW4gdGhlCkBAIC0yMTIsNyArMjEyLDcgQEAKICAgIFJFU0VUX1JFR19CSVRTKDB4ODQwLEJJVDMgfCBCSVQyNCB8IEJJVDMwKSAtIHNldCBiaXRzOiAzLDI0IGFuZCAzMCB0byBsb2dpYwogICAgJzAnIGluIHJlZ2lzdGVyIDB4ODQwIHdoaWxlIHRoZSBvdGhlciBiaXRzIHN0YXlzIGFzIGlzLiAqLwogI2RlZmluZSBSRVNFVF9SRUdfQklUUyhyZWdPZmZzZXQsYml0cykgXAotICAgICAgICAqKHVuc2lnbmVkIGludCopKE5PTkVfQ0FDSEVBQkxFIHwgSU5URVJOQUxfUkVHX0JBU0VfQUREUiAgIFwKLSAgICAgICAgfCByZWdPZmZzZXQpICY9IH4oICh1bnNpZ25lZCBpbnQpV09SRF9TV0FQKGJpdHMpICkKKwkqKHVuc2lnbmVkIGludCopKE5PTkVfQ0FDSEVBQkxFIHwgSU5URVJOQUxfUkVHX0JBU0VfQUREUiAgIFwKKwl8IHJlZ09mZnNldCkgJj0gfiggKHVuc2lnbmVkIGludClXT1JEX1NXQVAoYml0cykgKQogCiAjZW5kaWYgLyogX19JTkNjb3JlaCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9nYWxpbGVvL2d0NjQyNjBSLmggYi9pbmNsdWRlL2dhbGlsZW8vZ3Q2NDI2MFIuaAppbmRleCAxZTZmNThiLi5lYmYwODdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dhbGlsZW8vZ3Q2NDI2MFIuaAorKysgYi9pbmNsdWRlL2dhbGlsZW8vZ3Q2NDI2MFIuaApAQCAtODksOCArODksNiBAQAogI2RlZmluZSBQQ0lfMU1FTU9SWTNfSElHSF9BRERSRVNTX1JFTUFQCQkJCQkgICAJMHgzNTgKIAogCi0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBDUFUgU3luYyBCYXJyaWVyICAgICAgICAgICAgIAkJKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjMxLDcgKzIyOSw2IEBACiAjZGVmaW5lIFgxX1NOT09QX0NPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDU0YwogCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEZXZpY2UgUGFyYW1ldGVycwkJCQkJKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9nYWxpbGVvL21lbW9yeS5oIGIvaW5jbHVkZS9nYWxpbGVvL21lbW9yeS5oCmluZGV4IDk5YmQ3OWIuLjBjNDZjMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZ2FsaWxlby9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2dhbGlsZW8vbWVtb3J5LmgKQEAgLTM2LDIwICszNiwyMCBAQAogdHlwZWRlZiBlbnVtIF9fbWVtRGV2aWNle0RFVklDRTAsREVWSUNFMSxERVZJQ0UyLERFVklDRTMsQk9PVF9ERVZJQ0V9IERFVklDRTsKIAogdHlwZWRlZiBlbnVtIF9fbWVtb3J5UHJvdGVjdFJlZ2lvbntNRU1fUkVHSU9OMCxNRU1fUkVHSU9OMSxNRU1fUkVHSU9OMiwgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1fUkVHSU9OMyxNRU1fUkVHSU9ONCxNRU1fUkVHSU9ONSwgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1fUkVHSU9ONixNRU1fUkVHSU9ON30gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfUFJPVEVDVF9SRUdJT047CisJCQkJICAgTUVNX1JFR0lPTjMsTUVNX1JFR0lPTjQsTUVNX1JFR0lPTjUsICAgICAgIFwKKwkJCQkgICBNRU1fUkVHSU9ONixNRU1fUkVHSU9ON30gICAgICAgICAgICAgICAgICAgXAorCQkJCSAgIE1FTU9SWV9QUk9URUNUX1JFR0lPTjsKIHR5cGVkZWYgZW51bSBfX21lbW9yeUFjY2Vzc3tNRU1fQUNDRVNTX0FMTE9XRUQsTUVNX0FDQ0VTU19GT1JCSURFTn0gICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfQUNDRVNTOworCQkJICAgIE1FTU9SWV9BQ0NFU1M7CiB0eXBlZGVmIGVudW0gX19tZW1vcnlXcml0ZXtNRU1fV1JJVEVfQUxMT1dFRCxNRU1fV1JJVEVfRk9SQklERU59ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfQUNDRVNTX1dSSVRFOworCQkJICAgTUVNT1JZX0FDQ0VTU19XUklURTsKIHR5cGVkZWYgZW51bSBfX21lbW9yeUNhY2hlUHJvdGVjdHtNRU1fQ0FDSEVfQUxMT1dFRCxNRU1fQ0FDSEVfRk9SQklERU59ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfQ0FDSEVfUFJPVEVDVDsKKwkJCQkgIE1FTU9SWV9DQUNIRV9QUk9URUNUOwogdHlwZWRlZiBlbnVtIF9fbWVtb3J5U25vb3BUeXBle01FTV9OT19TTk9PUCxNRU1fU05PT1BfV1QsTUVNX1NOT09QX1dCfSAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWV9TTk9PUF9UWVBFOworCQkJICAgICAgIE1FTU9SWV9TTk9PUF9UWVBFOwogdHlwZWRlZiBlbnVtIF9fbWVtb3J5U25vb3BSZWdpb257TUVNX1NOT09QX1JFR0lPTjAsTUVNX1NOT09QX1JFR0lPTjEsICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNX1NOT09QX1JFR0lPTjIsTUVNX1NOT09QX1JFR0lPTjN9ICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX1NOT09QX1JFR0lPTjsKKwkJCQkgTUVNX1NOT09QX1JFR0lPTjIsTUVNX1NOT09QX1JFR0lPTjN9ICAgICAgICAgXAorCQkJCSBNRU1PUllfU05PT1BfUkVHSU9OOwogCiAvKiBmdW5jdGlvbnMgKi8KIHVuc2lnbmVkIGludCBtZW1vcnlHZXRCYW5rQmFzZUFkZHJlc3MoTUVNT1JZX0JBTksgYmFuayk7CkBAIC02OCwxOSArNjgsMTggQEAKIHVuc2lnbmVkIGludCBtZW1vcnlHZXRJbnRlcm5hbFJlZ2lzdGVyc1NwYWNlKHZvaWQpOwogLyogQ29uZmlndXJhdGUgdGhlIHByb3RlY3Rpb24gZmVhdHVyZSB0byBhIGdpdmVuIHNwYWNlLiAqLwogYm9vbCBtZW1vcnlTZXRQcm90ZWN0UmVnaW9uKE1FTU9SWV9QUk9URUNUX1JFR0lPTiByZWdpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX0FDQ0VTUyBtZW1vcnlBY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX0FDQ0VTU19XUklURSBtZW1vcnlXcml0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRU1PUllfQ0FDSEVfUFJPVEVDVCBjYWNoZVByb3RlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhc2VBZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWdpb25MZW5ndGgpOworCQkJICAgIE1FTU9SWV9BQ0NFU1MgbWVtb3J5QWNjZXNzLAorCQkJICAgIE1FTU9SWV9BQ0NFU1NfV1JJVEUgbWVtb3J5V3JpdGUsCisJCQkgICAgTUVNT1JZX0NBQ0hFX1BST1RFQ1QgY2FjaGVQcm90ZWN0aW9uLAorCQkJICAgIHVuc2lnbmVkIGludCBiYXNlQWRkcmVzcywKKwkJCSAgICB1bnNpZ25lZCBpbnQgcmVnaW9uTGVuZ3RoKTsKIC8qIENvbmZpZ3VyYXRlIHRoZSBzbm9vcCBmZWF0dXJlIHRvIGEgZ2l2ZW4gc3BhY2UuICovCiBib29sIG1lbW9yeVNldFJlZ2lvblNub29wTW9kZShNRU1PUllfU05PT1BfUkVHSU9OIHJlZ2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTU9SWV9TTk9PUF9UWVBFIHNub29wVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiYXNlQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWdpb25MZW5ndGgpOworCQkJICAgICAgTUVNT1JZX1NOT09QX1RZUEUgc25vb3BUeXBlLAorCQkJICAgICAgdW5zaWduZWQgaW50IGJhc2VBZGRyZXNzLAorCQkJICAgICAgdW5zaWduZWQgaW50IHJlZ2lvbkxlbmd0aCk7CiAKIGJvb2wgbWVtb3J5UmVtYXBBZGRyZXNzKHVuc2lnbmVkIGludCByZW1hcFJlZywgdW5zaWduZWQgaW50IHJlbWFwVmFsdWUpOwogYm9vbCBtZW1vcnlHZXREZXZpY2VQYXJhbShERVZJQ0VfUEFSQU0gKmRldmljZVBhcmFtLCBERVZJQ0UgZGV2aWNlTnVtKTsKIGJvb2wgbWVtb3J5U2V0RGV2aWNlUGFyYW0oREVWSUNFX1BBUkFNICpkZXZpY2VQYXJhbSwgREVWSUNFIGRldmljZU51bSk7CiAjZW5kaWYgIC8qIF9fSU5DbWVtb3J5aCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dhbGlsZW8vcGNpLmggYi9pbmNsdWRlL2dhbGlsZW8vcGNpLmgKaW5kZXggZjQ1ZGQzNi4uNmVkOGI5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9nYWxpbGVvL3BjaS5oCisrKyBiL2luY2x1ZGUvZ2FsaWxlby9wY2kuaApAQCAtNDEsMjAgKzQxLDIwIEBACiAvKiB0eXBlZGVmcyAqLwogCiB0eXBlZGVmIGVudW0gX19wY2lBY2Nlc3NSZWdpb25ze1JFR0lPTjAsUkVHSU9OMSxSRUdJT04yLFJFR0lPTjMsUkVHSU9ONCxSRUdJT041LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdJT042LFJFR0lPTjd9IFBDSV9BQ0NFU1NfUkVHSU9OUzsKKwkJCQlSRUdJT042LFJFR0lPTjd9IFBDSV9BQ0NFU1NfUkVHSU9OUzsKIAogdHlwZWRlZiBlbnVtIF9fcGNpQWdlbnRQcmlve0xPV19BR0VOVF9QUklPLEhJX0FHRU5UX1BSSU99IFBDSV9BR0VOVF9QUklPOwogdHlwZWRlZiBlbnVtIF9fcGNpQWdlbnRQYXJre1BBUktfT05fQUdFTlQsRE9OVF9QQVJLX09OX0FHRU5UfSBQQ0lfQUdFTlRfUEFSSzsKIAogdHlwZWRlZiBlbnVtIF9fcGNpU25vb3BUeXBle1BDSV9OT19TTk9PUCxQQ0lfU05PT1BfV1QsUENJX1NOT09QX1dCfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9TTk9PUF9UWVBFOworCQkJICAgIFBDSV9TTk9PUF9UWVBFOwogdHlwZWRlZiBlbnVtIF9fcGNpU25vb3BSZWdpb257UENJX1NOT09QX1JFR0lPTjAsUENJX1NOT09QX1JFR0lPTjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0lfU05PT1BfUkVHSU9OMixQQ0lfU05PT1BfUkVHSU9OM30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9TTk9PUF9SRUdJT047CisJCQkgICAgICBQQ0lfU05PT1BfUkVHSU9OMixQQ0lfU05PT1BfUkVHSU9OM30KKwkJCSAgICAgIFBDSV9TTk9PUF9SRUdJT047CiAKIHR5cGVkZWYgZW51bSBfX21lbVBjaUhvc3R7UENJX0hPU1QwLFBDSV9IT1NUMX0gUENJX0hPU1Q7CiB0eXBlZGVmIGVudW0gX19tZW1QY2lSZWdpb257UENJX1JFR0lPTjAsUENJX1JFR0lPTjEsCi0gICAJCQkgUENJX1JFR0lPTjIsUENJX1JFR0lPTjMsCisJCQkgUENJX1JFR0lPTjIsUENJX1JFR0lPTjMsCiAJCQkgUENJX0lPfQogCQkJIFBDSV9SRUdJT047CiAKQEAgLTYyLDIzICs2MiwyMyBAQAogdm9pZCBwY2lXcml0ZUNvbmZpZ1JlZyhQQ0lfSE9TVCBob3N0LCB1bnNpZ25lZCBpbnQgcmVnT2Zmc2V0LAogCQkgICAgICAgdW5zaWduZWQgaW50IHBjaURldk51bSwgdW5zaWduZWQgaW50IGRhdGEpOwogdW5zaWduZWQgaW50IHBjaVJlYWRDb25maWdSZWcgKFBDSV9IT1NUIGhvc3QsIHVuc2lnbmVkIGludCByZWdPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBjaURldk51bSk7CisJCQkgICAgICAgdW5zaWduZWQgaW50IHBjaURldk51bSk7CiAKIC8qIHJlYWQvd3JpdGUgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgb24gYW5vdGhlciBQQ0kgYnVzLiAqLwogdm9pZCBwY2lPdmVyQnJpZGdlV3JpdGVDb25maWdSZWcoUENJX0hPU1QgaG9zdCwKIAkJCQkgdW5zaWduZWQgaW50IHJlZ09mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwY2lEZXZOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYnVzTnVtLHVuc2lnbmVkIGludCBkYXRhKTsKKwkJCQkgdW5zaWduZWQgaW50IHBjaURldk51bSwKKwkJCQkgdW5zaWduZWQgaW50IGJ1c051bSx1bnNpZ25lZCBpbnQgZGF0YSk7CiB1bnNpZ25lZCBpbnQgcGNpT3ZlckJyaWRnZVJlYWRDb25maWdSZWcoUENJX0hPU1QgaG9zdCwKIAkJCQkJdW5zaWduZWQgaW50IHJlZ09mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGNpRGV2TnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBidXNOdW0pOworCQkJCQl1bnNpZ25lZCBpbnQgcGNpRGV2TnVtLAorCQkJCQl1bnNpZ25lZCBpbnQgYnVzTnVtKTsKIAogLyogICAgICBNYXN0ZXJgcyBtZW1vcnkgc3BhY2UgICAqLwogYm9vbCBwY2lNYXBTcGFjZShQQ0lfSE9TVCBob3N0LCBQQ0lfUkVHSU9OIHJlZ2lvbiwKIAkJdW5zaWduZWQgaW50IHJlbWFwQmFzZSwKIAkJdW5zaWduZWQgaW50IGRldmljZUJhc2UsCi0JICAgICAgICB1bnNpZ25lZCBpbnQgZGV2aWNlTGVuZ3RoKTsKKwkJdW5zaWduZWQgaW50IGRldmljZUxlbmd0aCk7CiB1bnNpZ25lZCBpbnQgcGNpR2V0U3BhY2VCYXNlKFBDSV9IT1NUIGhvc3QsIFBDSV9SRUdJT04gcmVnaW9uKTsKIHVuc2lnbmVkIGludCBwY2lHZXRTcGFjZVNpemUoUENJX0hPU1QgaG9zdCwgUENJX1JFR0lPTiByZWdpb24pOwogCkBAIC05OSwxNSArOTksMTUgQEAKIGJvb2wgcGNpQXJiaXRlckVuYWJsZShQQ0lfSE9TVCBob3N0KTsKIGJvb2wgcGNpQXJiaXRlckRpc2FibGUoUENJX0hPU1QgaG9zdCk7CiBib29sIHBjaVBhcmtpbmdEaXNhYmxlKFBDSV9IT1NUIGhvc3QsIFBDSV9BR0VOVF9QQVJLIGludGVybmFsQWdlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQQ0lfQUdFTlRfUEFSSyBleHRlcm5hbEFnZW50MCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9BR0VOVF9QQVJLIGV4dGVybmFsQWdlbnQxLAotICAgICAgICAgICAgICAgICAgICAgICAgUENJX0FHRU5UX1BBUksgZXh0ZXJuYWxBZ2VudDIsCi0gICAgICAgICAgICAgICAgICAgICAgICBQQ0lfQUdFTlRfUEFSSyBleHRlcm5hbEFnZW50MywKLSAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9BR0VOVF9QQVJLIGV4dGVybmFsQWdlbnQ0LAotICAgICAgICAgICAgICAgICAgICAgICAgUENJX0FHRU5UX1BBUksgZXh0ZXJuYWxBZ2VudDUpOworCQkJUENJX0FHRU5UX1BBUksgZXh0ZXJuYWxBZ2VudDAsCisJCQlQQ0lfQUdFTlRfUEFSSyBleHRlcm5hbEFnZW50MSwKKwkJCVBDSV9BR0VOVF9QQVJLIGV4dGVybmFsQWdlbnQyLAorCQkJUENJX0FHRU5UX1BBUksgZXh0ZXJuYWxBZ2VudDMsCisJCQlQQ0lfQUdFTlRfUEFSSyBleHRlcm5hbEFnZW50NCwKKwkJCVBDSV9BR0VOVF9QQVJLIGV4dGVybmFsQWdlbnQ1KTsKIGJvb2wgcGNpU2V0UmVnaW9uU25vb3BNb2RlKFBDSV9IT1NUIGhvc3QsIFBDSV9TTk9PUF9SRUdJT04gcmVnaW9uLAogCQkJICAgIFBDSV9TTk9PUF9UWVBFIHNub29wVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmFzZUFkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZ2lvbkxlbmd0aCk7CisJCQkgICAgdW5zaWduZWQgaW50IGJhc2VBZGRyZXNzLAorCQkJICAgIHVuc2lnbmVkIGludCByZWdpb25MZW5ndGgpOwogCiAjZW5kaWYgLyogX19JTkNwY2loICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2pmZnMyL2pmZnMyLmggYi9pbmNsdWRlL2pmZnMyL2pmZnMyLmgKaW5kZXggOTA5ODY5MC4uZmMzYTg0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9qZmZzMi9qZmZzMi5oCisrKyBiL2luY2x1ZGUvamZmczIvamZmczIuaApAQCAtMjAxLDggKzIwMSw0IEBACiBsb25nIHpsaWJfZGVjb21wcmVzcyh1bnNpZ25lZCBjaGFyICpkYXRhX2luLCB1bnNpZ25lZCBjaGFyICpjcGFnZV9vdXQsCiAJICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHNyY2xlbiwgX191MzIgZGVzdGxlbik7CiAKLQotCi0KLQogI2VuZGlmIC8qIF9fTElOVVhfSkZGUzJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaAppbmRleCBiMTU1Yjc3Li43ZDQxYWU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTQ0LDI2ICs0NCwyNiBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZW5lcmljX2h3ZWlnaHQzMih1bnNpZ25lZCBpbnQgdykKIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHJlcyA9ICh3ICYgMHg1NTU1NTU1NSkgKyAoKHcgPj4gMSkgJiAweDU1NTU1NTU1KTsKLSAgICAgICAgcmVzID0gKHJlcyAmIDB4MzMzMzMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMzMzMzKTsKLSAgICAgICAgcmVzID0gKHJlcyAmIDB4MEYwRjBGMEYpICsgKChyZXMgPj4gNCkgJiAweDBGMEYwRjBGKTsKLSAgICAgICAgcmVzID0gKHJlcyAmIDB4MDBGRjAwRkYpICsgKChyZXMgPj4gOCkgJiAweDAwRkYwMEZGKTsKLSAgICAgICAgcmV0dXJuIChyZXMgJiAweDAwMDBGRkZGKSArICgocmVzID4+IDE2KSAmIDB4MDAwMEZGRkYpOworCXVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4NTU1NTU1NTUpICsgKCh3ID4+IDEpICYgMHg1NTU1NTU1NSk7CisJcmVzID0gKHJlcyAmIDB4MzMzMzMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMzMzMzKTsKKwlyZXMgPSAocmVzICYgMHgwRjBGMEYwRikgKyAoKHJlcyA+PiA0KSAmIDB4MEYwRjBGMEYpOworCXJlcyA9IChyZXMgJiAweDAwRkYwMEZGKSArICgocmVzID4+IDgpICYgMHgwMEZGMDBGRik7CisJcmV0dXJuIChyZXMgJiAweDAwMDBGRkZGKSArICgocmVzID4+IDE2KSAmIDB4MDAwMEZGRkYpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZW5lcmljX2h3ZWlnaHQxNih1bnNpZ25lZCBpbnQgdykKIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHJlcyA9ICh3ICYgMHg1NTU1KSArICgodyA+PiAxKSAmIDB4NTU1NSk7Ci0gICAgICAgIHJlcyA9IChyZXMgJiAweDMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMpOwotICAgICAgICByZXMgPSAocmVzICYgMHgwRjBGKSArICgocmVzID4+IDQpICYgMHgwRjBGKTsKLSAgICAgICAgcmV0dXJuIChyZXMgJiAweDAwRkYpICsgKChyZXMgPj4gOCkgJiAweDAwRkYpOworCXVuc2lnbmVkIGludCByZXMgPSAodyAmIDB4NTU1NSkgKyAoKHcgPj4gMSkgJiAweDU1NTUpOworCXJlcyA9IChyZXMgJiAweDMzMzMpICsgKChyZXMgPj4gMikgJiAweDMzMzMpOworCXJlcyA9IChyZXMgJiAweDBGMEYpICsgKChyZXMgPj4gNCkgJiAweDBGMEYpOworCXJldHVybiAocmVzICYgMHgwMEZGKSArICgocmVzID4+IDgpICYgMHgwMEZGKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2VuZXJpY19od2VpZ2h0OCh1bnNpZ25lZCBpbnQgdykKIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHJlcyA9ICh3ICYgMHg1NSkgKyAoKHcgPj4gMSkgJiAweDU1KTsKLSAgICAgICAgcmVzID0gKHJlcyAmIDB4MzMpICsgKChyZXMgPj4gMikgJiAweDMzKTsKLSAgICAgICAgcmV0dXJuIChyZXMgJiAweDBGKSArICgocmVzID4+IDQpICYgMHgwRik7CisJdW5zaWduZWQgaW50IHJlcyA9ICh3ICYgMHg1NSkgKyAoKHcgPj4gMSkgJiAweDU1KTsKKwlyZXMgPSAocmVzICYgMHgzMykgKyAoKHJlcyA+PiAyKSAmIDB4MzMpOworCXJldHVybiAocmVzICYgMHgwRikgKyAoKHJlcyA+PiA0KSAmIDB4MEYpOwogfQogCiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIGIvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oCmluZGV4IDgxM2RmNDYuLjc1NWE4MjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9zd2FiLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAkJKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8IFwKIAkJKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8IFwKIAkJKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8ICA4KSB8IFwKLQkgICAgICAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiAgOCkgfCBcCisJCShfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiAgOCkgfCBcCiAJCShfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCBcCiAJCShfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCBcCiAJCShfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSkKQEAgLTEyNyw4ICsxMjcsOCBAQAogewogIyAgaWZkZWYgX19TV0FCXzY0X1RIUlVfMzJfXwogCV9fdTMyIGggPSB4ID4+IDMyOwotICAgICAgICBfX3UzMiBsID0geCAmICgoMVVMTDw8MzIpLTEpOwotICAgICAgICByZXR1cm4gKCgoX191NjQpX19zd2FiMzIobCkpIDw8IDMyKSB8ICgoX191NjQpKF9fc3dhYjMyKGgpKSk7CisJX191MzIgbCA9IHggJiAoKDFVTEw8PDMyKS0xKTsKKwlyZXR1cm4gKCgoX191NjQpX19zd2FiMzIobCkpIDw8IDMyKSB8ICgoX191NjQpKF9fc3dhYjMyKGgpKSk7CiAjICBlbHNlCiAJcmV0dXJuIF9fYXJjaF9fc3dhYjY0KHgpOwogIyAgZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAppbmRleCA2NzhiZWY3Li5kMzcwNTVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCkBAIC0yNCw3ICsyNCw3IEBACiAgKgkJCWJhdCBsYXRlciBpZiBJIGRpZCBzb21ldGhpbmcgbmF1Z2h0eS4KICAqICAgMTAtMTEtMjAwMCBTSkggICAgIEFkZGVkIHByaXZhdGUgTkFORCBmbGFzaCBzdHJ1Y3R1cmUgZm9yIGRyaXZlcgogICogICAxMC0yNC0yMDAwIFNKSCAgICAgQWRkZWQgcHJvdG90eXBlIGZvciAnbmFuZF9zY2FuJyBmdW5jdGlvbgotICogICAxMC0yOS0yMDAxIFRHCWNoYW5nZWQgbmFuZF9jaGlwIHN0cnVjdHVyZSB0byBzdXBwb3J0IAorICogICAxMC0yOS0yMDAxIFRHCWNoYW5nZWQgbmFuZF9jaGlwIHN0cnVjdHVyZSB0byBzdXBwb3J0CiAgKgkJCWhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGFjY2Vzc2luZyBjb250cm9sIGxpbmVzCiAgKiAgIDAyLTIxLTIwMDIgVEcJYWRkZWQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHJlYWQvd3JpdGUgYWRyZXNzIGFuZAogICoJCQlyZWFkeS9idXN5IGxpbmUgYWNjZXNzIGZ1bmN0aW9uCkBAIC02Nyw3ICs2Nyw3IEBACiAgKgogICogU3RydWN0dXJlIG92ZXJ2aWV3OgogICoKLSAqICBJT19BRERSIC0gYWRkcmVzcyB0byBhY2Nlc3MgdGhlIDggSS9PIGxpbmVzIG9mIHRoZSBmbGFzaCBkZXZpY2UgCisgKiAgSU9fQUREUiAtIGFkZHJlc3MgdG8gYWNjZXNzIHRoZSA4IEkvTyBsaW5lcyBvZiB0aGUgZmxhc2ggZGV2aWNlCiAgKgogICogIGh3Y29udHJvbCAtIGhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGFjY2VzaW5nIGNvbnRyb2wtbGluZXMKICAqCkBAIC0xMTksOCArMTE5LDggQEAKIAljaGFyIHBhZ2VhZHJsZW47CiAJdW5zaWduZWQgbG9uZyBJT19BRERSOyAgLyogYWRkcmVzcyB0byBhY2Nlc3MgdGhlIDggSS9PIGxpbmVzIHRvIHRoZSBmbGFzaCBkZXZpY2UgKi8KIAl1bnNpZ25lZCBsb25nIHRvdGxlbjsKLQl1aW50IG9vYmJsb2NrOyAgLy8gU2l6ZSBvZiBPT0IgYmxvY2tzIChlLmcuIDUxMikKLQl1aW50IG9vYnNpemU7ICAgLy8gQW1vdW50IG9mIE9PQiBkYXRhIHBlciBibG9jayAoZS5nLiAxNikKKwl1aW50IG9vYmJsb2NrOyAgLyogU2l6ZSBvZiBPT0IgYmxvY2tzIChlLmcuIDUxMikgKi8KKwl1aW50IG9vYnNpemU7ICAgLyogQW1vdW50IG9mIE9PQiBkYXRhIHBlciBibG9jayAoZS5nLiAxNikgKi8KIAl1aW50IGVjY3NpemU7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmgKaW5kZXggMzc1MTc1OC4uNDM4MTMwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbmZ0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25mdGwuaApAQCAtMzEsOCArMzEsOCBAQAogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IG5mdGxfdWNpMiB7Ci0gICAgICAgIF9fdTE2IEZvbGRNYXJrOwotICAgICAgICBfX3UxNiBGb2xkTWFyazE7CisJX191MTYgRm9sZE1hcms7CisJX191MTYgRm9sZE1hcmsxOwogCV9fdTMyIHVudXNlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKQEAgLTk0LDggKzk0LDggQEAKIAlpbnQgaGVhZCxzZWN0LGN5bDsKIAlfX3UxNiAqRVVOdGFibGU7IAkJLyogW251bXZ1bml0c106IEZpcnN0IEVVTiBmb3IgZWFjaCB2aXJ0dWFsIHVuaXQgICovCiAJX191MTYgKlJlcGxVbml0VGFibGU7IAkJLyogW251bUVVTnNdOiBSZXBsVW5pdE51bWJlciBmb3IgZWFjaCAqLwotICAgICAgICB1bnNpZ25lZCBpbnQgbmJfYmxvY2tzOwkJLyogbnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyAqLwotICAgICAgICB1bnNpZ25lZCBpbnQgbmJfYm9vdF9ibG9ja3M7CS8qIG51bWJlciBvZiBibG9ja3MgdXNlZCBieSB0aGUgYmlvcyAqLworCXVuc2lnbmVkIGludCBuYl9ibG9ja3M7CQkvKiBudW1iZXIgb2YgcGh5c2ljYWwgYmxvY2tzICovCisJdW5zaWduZWQgaW50IG5iX2Jvb3RfYmxvY2tzOwkvKiBudW1iZXIgb2YgYmxvY2tzIHVzZWQgYnkgdGhlIGJpb3MgKi8KIH07CiAKICNkZWZpbmUgTUFYX05GVExTIDE2CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpc3RzLmggYi9pbmNsdWRlL2xpc3RzLmgKaW5kZXggYjQyYTJmYS4uODA0YjVjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saXN0cy5oCisrKyBiL2luY2x1ZGUvbGlzdHMuaApAQCAtMyw3ICszLDcgQEAKIAogI2RlZmluZSBMSVNUX1NUQVJUICAgIAktMSAgICAgIC8qIEhhbmR5IENvbnN0YW50cyB0aGF0IHN1YnN0aXR1dGUgZm9yIGl0ZW0gcG9zaXRpb25zICovCiAjZGVmaW5lIExJU1RfRU5EICAgICAgCTAgICAgICAgLyogRU5EX09GX0xJU1QgbWVhbnMgb25lIHBhc3QgY3VycmVudCBsZW5ndGggb2YgbGlzdCB3aGVuICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluc2VydGluZy4gT3RoZXJ3aXNlIGl0IHJlZmVycyB0aGUgbGFzdCBpdGVtIGluIHRoZSBsaXN0LiAqLworCQkJCS8qIGluc2VydGluZy4gT3RoZXJ3aXNlIGl0IHJlZmVycyB0aGUgbGFzdCBpdGVtIGluIHRoZSBsaXN0LiAqLwogCiB0eXBlZGVmIHN0cnVjdAogICAgIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWFsbG9jLmggYi9pbmNsdWRlL21hbGxvYy5oCmluZGV4IDA4NDY5YmMuLjQ3MTU0YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWFsbG9jLmgKKysrIGIvaW5jbHVkZS9tYWxsb2MuaApAQCAtNiw4ICs2LDggQEAKICogVkVSU0lPTiAyLjYuNiAgU3VuIE1hciAgNSAxOToxMDowMyAyMDAwICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKIAogICAgTm90ZTogVGhlcmUgbWF5IGJlIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGlzIG1hbGxvYyBvYnRhaW5hYmxlIGF0Ci0gICAgICAgICAgIGZ0cDovL2cub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYwotICAgICAgICAgQ2hlY2sgYmVmb3JlIGluc3RhbGxpbmchCisJICAgZnRwOi8vZy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy5jCisJIENoZWNrIGJlZm9yZSBpbnN0YWxsaW5nIQogCiAqIFdoeSB1c2UgdGhpcyBtYWxsb2M/CiAKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICBhbmQgc3RhdHVzIGluZm9ybWF0aW9uLgogCiAgIE1pbmltdW0gYWxsb2NhdGVkIHNpemU6IDQtYnl0ZSBwdHJzOiAgMTYgYnl0ZXMgICAgKGluY2x1ZGluZyA0IG92ZXJoZWFkKQotICAgICAgICAgICAgICAgICAgICAgICAgICA4LWJ5dGUgcHRyczogIDI0LzMyIGJ5dGVzIChpbmNsdWRpbmcsIDQvOCBvdmVyaGVhZCkKKwkJCSAgOC1ieXRlIHB0cnM6ICAyNC8zMiBieXRlcyAoaW5jbHVkaW5nLCA0Lzggb3ZlcmhlYWQpCiAKICAgICAgICBXaGVuIGEgY2h1bmsgaXMgZnJlZWQsIDEyIChmb3IgNGJ5dGUgcHRycykgb3IgMjAgKGZvciA4IGJ5dGUKICAgICAgICBwdHJzIGJ1dCA0IGJ5dGUgc2l6ZSkgb3IgMjQgKGZvciA4LzgpIGFkZGl0aW9uYWwgYnl0ZXMgYXJlCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgcG9pbnRlciB0byBzb21ldGhpbmcgb2YgdGhlIG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4KIAogICBNYXhpbXVtIGFsbG9jYXRlZCBzaXplOiA0LWJ5dGUgc2l6ZV90OiAyXjMxIC0gIDggYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOC1ieXRlIHNpemVfdDogMl42MyAtIDE2IGJ5dGVzCisJCQkgIDgtYnl0ZSBzaXplX3Q6IDJeNjMgLSAxNiBieXRlcwogCiAgICAgICAgSXQgaXMgYXNzdW1lZCB0aGF0IChwb3NzaWJseSBzaWduZWQpIHNpemVfdCBiaXQgdmFsdWVzIHN1ZmZpY2UgdG8KICAgICAgICByZXByZXNlbnQgY2h1bmsgc2l6ZXMuIGBQb3NzaWJseSBzaWduZWQnIGlzIGR1ZSB0byB0aGUgZmFjdApAQCAtMTEyLDExICsxMTIsMTEgQEAKICAgICAgICBtYWtlIHRoZSBub3JtYWwgd29yc3QtY2FzZSB3YXN0YWdlIDE1IGJ5dGVzIChpLmUuLCB1cCB0byAxNQogICAgICAgIG1vcmUgYnl0ZXMgd2lsbCBiZSBhbGxvY2F0ZWQgdGhhbiB3ZXJlIHJlcXVlc3RlZCBpbiBtYWxsb2MpLCB3aXRoCiAgICAgICAgdHdvIGV4Y2VwdGlvbnM6Ci0gICAgICAgICAxLiBCZWNhdXNlIHJlcXVlc3RzIGZvciB6ZXJvIGJ5dGVzIGFsbG9jYXRlIG5vbi16ZXJvIHNwYWNlLAotICAgICAgICAgICAgdGhlIHdvcnN0IGNhc2Ugd2FzdGFnZSBmb3IgYSByZXF1ZXN0IG9mIHplcm8gYnl0ZXMgaXMgMjQgYnl0ZXMuCi0gICAgICAgICAyLiBGb3IgcmVxdWVzdHMgPj0gbW1hcF90aHJlc2hvbGQgdGhhdCBhcmUgc2VydmljZWQgdmlhCi0gICAgICAgICAgICBtbWFwKCksIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgaXMgOCBieXRlcyBwbHVzIHRoZSByZW1haW5kZXIKLSAgICAgICAgICAgIGZyb20gYSBzeXN0ZW0gcGFnZSAodGhlIG1pbmltYWwgbW1hcCB1bml0KTsgdHlwaWNhbGx5IDQwOTYgYnl0ZXMuCisJIDEuIEJlY2F1c2UgcmVxdWVzdHMgZm9yIHplcm8gYnl0ZXMgYWxsb2NhdGUgbm9uLXplcm8gc3BhY2UsCisJICAgIHRoZSB3b3JzdCBjYXNlIHdhc3RhZ2UgZm9yIGEgcmVxdWVzdCBvZiB6ZXJvIGJ5dGVzIGlzIDI0IGJ5dGVzLgorCSAyLiBGb3IgcmVxdWVzdHMgPj0gbW1hcF90aHJlc2hvbGQgdGhhdCBhcmUgc2VydmljZWQgdmlhCisJICAgIG1tYXAoKSwgdGhlIHdvcnN0IGNhc2Ugd2FzdGFnZSBpcyA4IGJ5dGVzIHBsdXMgdGhlIHJlbWFpbmRlcgorCSAgICBmcm9tIGEgc3lzdGVtIHBhZ2UgKHRoZSBtaW5pbWFsIG1tYXAgdW5pdCk7IHR5cGljYWxseSA0MDk2IGJ5dGVzLgogCiAqIExpbWl0YXRpb25zCiAKQEAgLTM3Miw4ICszNzIsOCBAQAogdm9pZCogbWVtY3B5KHZvaWQqLCBjb25zdCB2b2lkKiwgc2l6ZV90KTsKICNlbHNlCiAjaWZkZWYgV0lOMzIKLS8vIE9uIFdpbjMyIHBsYXRmb3JtcywgJ21lbXNldCgpJyBhbmQgJ21lbWNweSgpJyBhcmUgYWxyZWFkeSBkZWNsYXJlZCBpbgotLy8gJ3dpbmRvd3MuaCcKKy8qIE9uIFdpbjMyIHBsYXRmb3JtcywgJ21lbXNldCgpJyBhbmQgJ21lbWNweSgpJyBhcmUgYWxyZWFkeSBkZWNsYXJlZCBpbiAqLworLyogJ3dpbmRvd3MuaCcgKi8KICNlbHNlCiBWb2lkX3QqIG1lbXNldCgpOwogVm9pZF90KiBtZW1jcHkoKTsKQEAgLTM5MywxNCArMzkzLDE0IEBACiAgIGlmKG16c3ogPD0gOSpzaXplb2YobXpzeikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgSU5URVJOQUxfU0laRV9UKiBteiA9IChJTlRFUk5BTF9TSVpFX1QqKSAoY2hhcnApOyAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYobXpzeiA+PSA1KnNpemVvZihtenN6KSkgeyAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIGlmKG16c3ogPj0gNypzaXplb2YobXpzeikpIHsgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYobXpzeiA+PSA5KnNpemVvZihtenN6KSkgeyAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbXorKyA9IDA7IH19fSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbXorKyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbXogICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmKG16c3ogPj0gOSpzaXplb2YobXpzeikpIHsgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbXorKyA9IDA7IH19fSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICpteisrID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm16KysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbXogICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfSBlbHNlIG1lbXNldCgoY2hhcnApLCAwLCBtenN6KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUoMCkKIApAQCAtNDExLDE0ICs0MTEsMTQgQEAKICAgICBJTlRFUk5BTF9TSVpFX1QqIG1jc3JjID0gKElOVEVSTkFMX1NJWkVfVCopIChzcmMpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBJTlRFUk5BTF9TSVpFX1QqIG1jZHN0ID0gKElOVEVSTkFMX1NJWkVfVCopIChkZXN0KTsgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZihtY3N6ID49IDUqc2l6ZW9mKG1jc3opKSB7ICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgaWYobWNzeiA+PSA3KnNpemVvZihtY3N6KSkgeyAgICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZihtY3N6ID49IDkqc2l6ZW9mKG1jc3opKSB7ICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptY2RzdCsrID0gKm1jc3JjKys7IH19fSAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptY2RzdCsrID0gKm1jc3JjKys7ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICptY2RzdCAgID0gKm1jc3JjICA7ICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCisJaWYobWNzeiA+PSA5KnNpemVvZihtY3N6KSkgeyAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICptY2RzdCsrID0gKm1jc3JjKys7IH19fSAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgKm1jZHN0KysgPSAqbWNzcmMrKzsgICAgICAgICAgICAgICAgICAgICBcCisJCQkJICAgICAqbWNkc3QrKyA9ICptY3NyYysrOyAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkgICAgICptY2RzdCAgID0gKm1jc3JjICA7ICAgICAgICAgICAgICAgICAgICAgXAogICB9IGVsc2UgbWVtY3B5KGRlc3QsIHNyYywgbWNzeik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSgwKQogCkBAIC01NjcsNyArNTY3LDYgQEAKICNlbmRpZgogCiAKLQogLyoKIAogICBUaGlzIHZlcnNpb24gb2YgbWFsbG9jIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBTVklEL1hQRyBtYWxsaW5mbwpAQCAtNjMxLDcgKzYzMCw2IEBACiAjZGVmaW5lIE1fTU1BUF9NQVggICAgICAgICAgLTQKIAogCi0KICNpZm5kZWYgREVGQVVMVF9UUklNX1RIUkVTSE9MRAogI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICgxMjggKiAxMDI0KQogI2VuZGlmCkBAIC02OTUsMTEgKzY5MywxMSBAQAogICAgICAgcmV0YWluIHdoZW5ldmVyIHNicmsgaXMgY2FsbGVkLiBJdCBpcyB1c2VkIGluIHR3byB3YXlzIGludGVybmFsbHk6CiAKICAgICAgICogV2hlbiBzYnJrIGlzIGNhbGxlZCB0byBleHRlbmQgdGhlIHRvcCBvZiB0aGUgYXJlbmEgdG8gc2F0aXNmeQotICAgICAgICBhIG5ldyBtYWxsb2MgcmVxdWVzdCwgdGhpcyBtdWNoIHBhZGRpbmcgaXMgYWRkZWQgdG8gdGhlIHNicmsKLSAgICAgICAgcmVxdWVzdC4KKwlhIG5ldyBtYWxsb2MgcmVxdWVzdCwgdGhpcyBtdWNoIHBhZGRpbmcgaXMgYWRkZWQgdG8gdGhlIHNicmsKKwlyZXF1ZXN0LgogCiAgICAgICAqIFdoZW4gbWFsbG9jX3RyaW0gaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBmcmVlKCksCi0gICAgICAgIGl0IGlzIHVzZWQgYXMgdGhlIGBwYWQnIGFyZ3VtZW50LgorCWl0IGlzIHVzZWQgYXMgdGhlIGBwYWQnIGFyZ3VtZW50LgogCiAgICAgICBJbiBib3RoIGNhc2VzLCB0aGUgYWN0dWFsIGFtb3VudCBvZiBwYWRkaW5nIGlzIHJvdW5kZWQKICAgICAgIHNvIHRoYXQgdGhlIGVuZCBvZiB0aGUgYXJlbmEgaXMgYWx3YXlzIGEgc3lzdGVtIHBhZ2UgYm91bmRhcnkuCkBAIC03NDUsMTUgKzc0MywxNSBAQAogCiAgICAgICBIb3dldmVyLCBpdCBoYXMgdGhlIGRpc2FkdmFudGFnZXMgdGhhdDoKIAotICAgICAgICAgMS4gVGhlIHNwYWNlIGNhbm5vdCBiZSByZWNsYWltZWQsIGNvbnNvbGlkYXRlZCwgYW5kIHRoZW4KLSAgICAgICAgICAgIHVzZWQgdG8gc2VydmljZSBsYXRlciByZXF1ZXN0cywgYXMgaGFwcGVucyB3aXRoIG5vcm1hbCBjaHVua3MuCi0gICAgICAgICAyLiBJdCBjYW4gbGVhZCB0byBtb3JlIHdhc3RhZ2UgYmVjYXVzZSBvZiBtbWFwIHBhZ2UgYWxpZ25tZW50Ci0gICAgICAgICAgICByZXF1aXJlbWVudHMKLSAgICAgICAgIDMuIEl0IGNhdXNlcyBtYWxsb2MgcGVyZm9ybWFuY2UgdG8gYmUgbW9yZSBkZXBlbmRlbnQgb24gaG9zdAotICAgICAgICAgICAgc3lzdGVtIG1lbW9yeSBtYW5hZ2VtZW50IHN1cHBvcnQgcm91dGluZXMgd2hpY2ggbWF5IHZhcnkgaW4KLSAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIHF1YWxpdHkgYW5kIG1heSBpbXBvc2UgYXJiaXRyYXJ5Ci0gICAgICAgICAgICBsaW1pdGF0aW9ucy4gR2VuZXJhbGx5LCBzZXJ2aWNpbmcgYSByZXF1ZXN0IHZpYSBub3JtYWwKLSAgICAgICAgICAgIG1hbGxvYyBzdGVwcyBpcyBmYXN0ZXIgdGhhbiBnb2luZyB0aHJvdWdoIGEgc3lzdGVtJ3MgbW1hcC4KKwkgMS4gVGhlIHNwYWNlIGNhbm5vdCBiZSByZWNsYWltZWQsIGNvbnNvbGlkYXRlZCwgYW5kIHRoZW4KKwkgICAgdXNlZCB0byBzZXJ2aWNlIGxhdGVyIHJlcXVlc3RzLCBhcyBoYXBwZW5zIHdpdGggbm9ybWFsIGNodW5rcy4KKwkgMi4gSXQgY2FuIGxlYWQgdG8gbW9yZSB3YXN0YWdlIGJlY2F1c2Ugb2YgbW1hcCBwYWdlIGFsaWdubWVudAorCSAgICByZXF1aXJlbWVudHMKKwkgMy4gSXQgY2F1c2VzIG1hbGxvYyBwZXJmb3JtYW5jZSB0byBiZSBtb3JlIGRlcGVuZGVudCBvbiBob3N0CisJICAgIHN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudCBzdXBwb3J0IHJvdXRpbmVzIHdoaWNoIG1heSB2YXJ5IGluCisJICAgIGltcGxlbWVudGF0aW9uIHF1YWxpdHkgYW5kIG1heSBpbXBvc2UgYXJiaXRyYXJ5CisJICAgIGxpbWl0YXRpb25zLiBHZW5lcmFsbHksIHNlcnZpY2luZyBhIHJlcXVlc3QgdmlhIG5vcm1hbAorCSAgICBtYWxsb2Mgc3RlcHMgaXMgZmFzdGVyIHRoYW4gZ29pbmcgdGhyb3VnaCBhIHN5c3RlbSdzIG1tYXAuCiAKICAgICAgIEFsbCB0b2dldGhlciwgdGhlc2UgY29uc2lkZXJhdGlvbnMgc2hvdWxkIGxlYWQgeW91IHRvIHVzZSBtbWFwCiAgICAgICBvbmx5IGZvciByZWxhdGl2ZWx5IGxhcmdlIHJlcXVlc3RzLgpAQCAtNzYyLDcgKzc2MCw2IEBACiAqLwogCiAKLQogI2lmbmRlZiBERUZBVUxUX01NQVBfTUFYCiAjaWYgSEFWRV9NTUFQCiAjZGVmaW5lIERFRkFVTFRfTU1BUF9NQVggICAgICAgKDY0KQpAQCAtNzc1LDE1ICs3NzIsMTUgQEAKICAgICBNX01NQVBfTUFYIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0byBzaW11bHRhbmVvdXNseQogICAgICAgc2VydmljZSB1c2luZyBtbWFwLiBUaGlzIHBhcmFtZXRlciBleGlzdHMgYmVjYXVzZToKIAotICAgICAgICAgMS4gU29tZSBzeXN0ZW1zIGhhdmUgYSBsaW1pdGVkIG51bWJlciBvZiBpbnRlcm5hbCB0YWJsZXMgZm9yCi0gICAgICAgICAgICB1c2UgYnkgbW1hcC4KLSAgICAgICAgIDIuIEluIG1vc3Qgc3lzdGVtcywgb3ZlcnJlbGlhbmNlIG9uIG1tYXAgY2FuIGRlZ3JhZGUgb3ZlcmFsbAotICAgICAgICAgICAgcGVyZm9ybWFuY2UuCi0gICAgICAgICAzLiBJZiBhIHByb2dyYW0gYWxsb2NhdGVzIG1hbnkgbGFyZ2UgcmVnaW9ucywgaXQgaXMgcHJvYmFibHkKLSAgICAgICAgICAgIGJldHRlciBvZmYgdXNpbmcgbm9ybWFsIHNicmstYmFzZWQgYWxsb2NhdGlvbiByb3V0aW5lcyB0aGF0Ci0gICAgICAgICAgICBjYW4gcmVjbGFpbSBhbmQgcmVhbGxvY2F0ZSBub3JtYWwgaGVhcCBtZW1vcnkuIFVzaW5nIGEKLSAgICAgICAgICAgIHNtYWxsIHZhbHVlIGFsbG93cyB0cmFuc2l0aW9uIGludG8gdGhpcyBtb2RlIGFmdGVyIHRoZQotICAgICAgICAgICAgZmlyc3QgZmV3IGFsbG9jYXRpb25zLgorCSAxLiBTb21lIHN5c3RlbXMgaGF2ZSBhIGxpbWl0ZWQgbnVtYmVyIG9mIGludGVybmFsIHRhYmxlcyBmb3IKKwkgICAgdXNlIGJ5IG1tYXAuCisJIDIuIEluIG1vc3Qgc3lzdGVtcywgb3ZlcnJlbGlhbmNlIG9uIG1tYXAgY2FuIGRlZ3JhZGUgb3ZlcmFsbAorCSAgICBwZXJmb3JtYW5jZS4KKwkgMy4gSWYgYSBwcm9ncmFtIGFsbG9jYXRlcyBtYW55IGxhcmdlIHJlZ2lvbnMsIGl0IGlzIHByb2JhYmx5CisJICAgIGJldHRlciBvZmYgdXNpbmcgbm9ybWFsIHNicmstYmFzZWQgYWxsb2NhdGlvbiByb3V0aW5lcyB0aGF0CisJICAgIGNhbiByZWNsYWltIGFuZCByZWFsbG9jYXRlIG5vcm1hbCBoZWFwIG1lbW9yeS4gVXNpbmcgYQorCSAgICBzbWFsbCB2YWx1ZSBhbGxvd3MgdHJhbnNpdGlvbiBpbnRvIHRoaXMgbW9kZSBhZnRlciB0aGUKKwkgICAgZmlyc3QgZmV3IGFsbG9jYXRpb25zLgogCiAgICAgICBTZXR0aW5nIHRvIDAgZGlzYWJsZXMgYWxsIHVzZSBvZiBtbWFwLiAgSWYgSEFWRV9NTUFQIGlzIG5vdCBzZXQsCiAgICAgICB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAwLCBhbmQgYXR0ZW1wdHMgdG8gc2V0IGl0IHRvIG5vbi16ZXJvIHZhbHVlcwpAQCAtNzkxLDggKzc4OCw2IEBACiAqLwogCiAKLQotCiAvKgogICAgIFVTRV9ETF9QUkVGSVggd2lsbCBwcmVmaXggYWxsIHB1YmxpYyByb3V0aW5lcyB3aXRoIHRoZSBzdHJpbmcgJ2RsJy4KICAgICAgIFVzZWZ1bCB0byBxdWlja2x5IGF2b2lkIHByb2NlZHVyZSBkZWNsYXJhdGlvbiBjb25mbGljdHMgYW5kIGxpbmtlcgpAQCAtODAzLDggKzc5OCw2IEBACiAvKiAjZGVmaW5lIFVTRV9ETF9QUkVGSVggKi8KIAogCi0KLQogLyoKIAogICBTcGVjaWFsIGRlZmluZXMgZm9yIGxpbnV4IGxpYmMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWlpX3BoeS5oIGIvaW5jbHVkZS9taWlfcGh5LmgKaW5kZXggYTY1YmQ2Ni4uZjBkM2U2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9taWlfcGh5LmgKKysrIGIvaW5jbHVkZS9taWlfcGh5LmgKQEAgLTYsNCArNiwzIEBACiB2b2lkIG1paV9waHlfd3JpdGUodW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpOwogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9taWlwaHkuaCBiL2luY2x1ZGUvbWlpcGh5LmgKaW5kZXggZjE4NDBhZS4uNTEyMmIwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9taWlwaHkuaAorKysgYi9pbmNsdWRlL21paXBoeS5oCkBAIC00Miw3ICs0Miw3IEBACiBpbnQgIG1paXBoeV9yZWFkKHVuc2lnbmVkIGNoYXIgYWRkciwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIHNob3J0ICogdmFsdWUpOwogaW50ICBtaWlwaHlfd3JpdGUodW5zaWduZWQgY2hhciBhZGRyLCB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgc2hvcnQgdmFsdWUpOwogaW50ICBtaWlwaHlfaW5mbyh1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGludCAgKm91aSwgdW5zaWduZWQgY2hhciAqbW9kZWwsCi0gICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnJldik7CisJCSB1bnNpZ25lZCBjaGFyICpyZXYpOwogaW50ICBtaWlwaHlfcmVzZXQodW5zaWduZWQgY2hhciBhZGRyKTsKIGludCAgbWlpcGh5X3NwZWVkKHVuc2lnbmVkIGNoYXIgYWRkcik7CiBpbnQgIG1paXBoeV9kdXBsZXgodW5zaWduZWQgY2hhciBhZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXBjMTA2LmggYi9pbmNsdWRlL21wYzEwNi5oCmluZGV4IDM5MjZmOGIuLmFiNmQ1N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXBjMTA2LmgKKysrIGIvaW5jbHVkZS9tcGMxMDYuaApAQCAtMTU1LDQgKzE1NSwzIEBACiAjZGVmaW5lIE1CRVJfQkFOSzMJCQkweDgKIAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXBjNXh4LmggYi9pbmNsdWRlL21wYzV4eC5oCmluZGV4IDg1NDFlZjYuLjM0NWZjYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXBjNXh4LmgKKysrIGIvaW5jbHVkZS9tcGM1eHguaApAQCAtMjMsNyArMjMsNyBAQAogCiAvKgogICogRmlsZToJCW1wYzV4eC5oCi0gKiAKKyAqCiAgKiBEaXNjcmlwdGlvbjoJCW1wYzV4eCBzcGVjaWZpYyBkZWZpbml0aW9ucwogICoKICAqLwpAQCAtODgsNyArODgsNyBAQAogI2RlZmluZSBTSVVNQ1JfTVRTQwkweDAwMDAwMTAwCS8qIE1lbW9yeSB0cmFuc2ZlciAgICAgIAkJKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVEJTQ1IgLSBUaW1lIEJhc2UgU3RhdHVzIGFuZCBDb250cm9sIFJlZ2lzdGVyCQkKKyAqIFRCU0NSIC0gVGltZSBCYXNlIFN0YXR1cyBhbmQgQ29udHJvbCBSZWdpc3RlcgogICovCiAjZGVmaW5lIFRCU0NSX1JFRkEJKCh1c2hvcnQpMHgwMDgwKQkvKiBSZWZlcmVuY2UgSW50ZXJydXB0IFN0YXR1cyBBCSovCiAjZGVmaW5lIFRCU0NSX1JFRkIJKCh1c2hvcnQpMHgwMDQwKQkvKiBSZWZlcmVuY2UgSW50ZXJydXB0IFN0YXR1cyBCICovCkBAIC0xMTMsMTMgKzExMywxMyBAQAogI2RlZmluZSBQTFBSQ1JfQ1NSCTB4MDAwMDAwODAJLyogQ2hlc2tTdG9wIFJlc2V0IHZhbHVlCQkqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTQ0NSIC0gU3lzdGVtIENsb2NrIGFuZCByZXNldCBDb250cm9sIFJlZ2lzdGVyCQorICogU0NDUiAtIFN5c3RlbSBDbG9jayBhbmQgcmVzZXQgQ29udHJvbCBSZWdpc3RlcgogICovCiAjZGVmaW5lIFNDQ1JfREZOTF9NU0sJMHgwMDAwMDA3MAkvKiBERk5MIG1hc2sJCQkJKi8KICNkZWZpbmUgU0NDUl9ERk5IX01TSwkweDAwMDAwMDA3ICAJLyogREZOSCBtYXNrCQkJCSovCiAjZGVmaW5lIFNDQ1JfREZOTF9TSElGVCAweDAwMDAwMDQJLyogREZOTCBzaGlmdCB2YWx1ZQkJCSovCiAjZGVmaW5lIFNDQ1JfUlRTRUwJMHgwMDEwMDAwMAkvKiBSVEMgY2lyY3VpdCBpbnB1dCBzb3VyY2Ugc2VsZWN0CSovCi0jZGVmaW5lIFNDQ1JfRUJERjAwCTB4MDAwMDAwMDAJLyogRGl2aXNpb24gZmFjdG9yIDEuIENMS09VVCBpcyBHQ0xLMiAgICovCQkKKyNkZWZpbmUgU0NDUl9FQkRGMDAJMHgwMDAwMDAwMAkvKiBEaXZpc2lvbiBmYWN0b3IgMS4gQ0xLT1VUIGlzIEdDTEsyICAgKi8KICNkZWZpbmUgU0NDUl9FQkRGMTEJMHgwMDA2MDAwMAkvKiByZXNlcnZlZAkJCQkqLwogI2RlZmluZSBTQ0NSX1RCUwkweDAyMDAwMDAwCS8qIFRpbWUgQmFzZSBTb3VyY2UJCQkqLwogI2RlZmluZSBTQ0NSX1JURElWCTB4MDEwMDAwMDAJLyogUlRDIENsb2NrIERpdmlkZSAJCQkqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQuaCBiL2luY2x1ZGUvbmV0LmgKaW5kZXggMmExZDMzNi4uYjliZjEzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQuaAorKysgYi9pbmNsdWRlL25ldC5oCkBAIC02NCw3ICs2NCw2IEBACiB0eXBlZGVmIHVsb25nCQlJUGFkZHJfdDsKIAogCi0KIC8qCiAgKiBUaGUgY3VycmVudCByZWNlaXZlIHBhY2tldCBoYW5kbGVyLiAgQ2FsbGVkIHdpdGggYSBwb2ludGVyIHRvIHRoZQogICogYXBwbGljYXRpb24gcGFja2V0LCBhbmQgYSBwcm90b2NvbCB0eXBlIChQT1JUX0JPT1RQQyBvciBQT1JUX1RGVFApLgpAQCAtMTg0LDkgKzE4Myw5IEBACiAjICAgZGVmaW5lIFJBUlBPUF9SRVBMWQkgICAgNAkJLyogUmVzcG9uc2UgdG8gcHJldmlvdXMgcmVxdWVzdCAqLwogCiAJLyoKLSAgICAgICAgICogVGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlIHZhcmlhYmxlIGluIHNpemUsIGFjY29yZGluZyB0bwotICAgICAgICAgKiB0aGUgc2l6ZXMgYWJvdmUsIGFuZCBhcmUgZGVmaW5lZCBhcyBhcHByb3ByaWF0ZSBmb3IKLSAgICAgICAgICogc3BlY2lmaWMgaGFyZHdhcmUvcHJvdG9jb2wgY29tYmluYXRpb25zLgorCSAqIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSB2YXJpYWJsZSBpbiBzaXplLCBhY2NvcmRpbmcgdG8KKwkgKiB0aGUgc2l6ZXMgYWJvdmUsIGFuZCBhcmUgZGVmaW5lZCBhcyBhcHByb3ByaWF0ZSBmb3IKKwkgKiBzcGVjaWZpYyBoYXJkd2FyZS9wcm90b2NvbCBjb21iaW5hdGlvbnMuCiAJICovCiAJdWNoYXIJCWFyX2RhdGFbMF07CiAjaWYgMApAQCAtMjI4LDcgKzIyNyw2IEBACiB9IElDTVBfdDsKIAogCi0KIC8qCiAgKiBNYXhpbXVtIHBhY2tldCBzaXplOyB1c2VkIHRvIGFsbG9jYXRlIHBhY2tldCBzdG9yYWdlLgogICogVEZUUCBwYWNrZXRzIGNhbiBiZSA1MjQgYnl0ZXMgKyBJUCBoZWFkZXIgKyBldGhlcm5ldCBoZWFkZXIuCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BhcnQuaCBiL2luY2x1ZGUvcGFydC5oCmluZGV4IDlhYTlmNWEuLjM1YWZhMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGFydC5oCisrKyBiL2luY2x1ZGUvcGFydC5oCkBAIC0xMDQsNSArMTA0LDMgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX1BBUlRfSCAqLwotCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGNtY2lhL2k4MjM2NS5oIGIvaW5jbHVkZS9wY21jaWEvaTgyMzY1LmgKaW5kZXggMjdlZTU4My4uMGI0MzJhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvaTgyMzY1LmgKKysrIGIvaW5jbHVkZS9wY21jaWEvaTgyMzY1LmgKQEAgLTksNyArOSw3IEBACiAgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCiAgKiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCiAgKiB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqCiAgKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKICAqIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS9zcy5oIGIvaW5jbHVkZS9wY21jaWEvc3MuaAppbmRleCBkMTk3ZTQyLi5hYWZhZThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9zcy5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKQEAgLTksNyArOSw3IEBACiAgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCiAgKiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCiAgKiB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqCiAgKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKICAqIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS90aTExM3guaCBiL2luY2x1ZGUvcGNtY2lhL3RpMTEzeC5oCmluZGV4IDI2YzU3NjQuLjU0NTM1ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcGNtY2lhL3RpMTEzeC5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3RpMTEzeC5oCkBAIC05LDcgKzksNyBAQAogICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgogICogYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQogICogdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKgogICogVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCiAgKiA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcwpAQCAtMTE1LDcgKzExNSw3IEBACiAjZGVmaW5lICBUSTExM1hfU0NSX0NETUFfRU4JCTB4MDAwMDAwMDgKICNkZWZpbmUgIFRJMTEzWF9TQ1JfQVNZTkNfSVJRCQkweDAwMDAwMDA0CiAjZGVmaW5lICBUSTExM1hfU0NSX0tFRVBDTEsJCTB4MDAwMDAwMDIKLSNkZWZpbmUgIFRJMTEzWF9TQ1JfQ0xLUlVOX0VOQQkJMHgwMDAwMDAwMSAgCisjZGVmaW5lICBUSTExM1hfU0NSX0NMS1JVTl9FTkEJCTB4MDAwMDAwMDEKIAogI2RlZmluZSAgVEkxMjJYX1NDUl9TRVJfU1RFUAkJMHhjMDAwMDAwMAogI2RlZmluZSAgVEkxMjJYX1NDUl9JTlRSVElFCQkweDIwMDAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjbWNpYS95ZW50YS5oIGIvaW5jbHVkZS9wY21jaWEveWVudGEuaAppbmRleCA1MjVkOGVjLi41Y2Q1OGE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS95ZW50YS5oCisrKyBiL2luY2x1ZGUvcGNtY2lhL3llbnRhLmgKQEAgLTksNyArOSw3IEBACiAgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCiAgKiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCiAgKiB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqCiAgKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKICAqIDxkYWhpbmRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BwYzQwNS5oIGIvaW5jbHVkZS9wcGM0MDUuaAppbmRleCAyNDNhMjJkLi5hMGRiYmMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BwYzQwNS5oCisrKyBiL2luY2x1ZGUvcHBjNDA1LmgKQEAgLTI1LDggKzI1LDggQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXJzCQkJCQkJKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0gICAgICAgICNkZWZpbmUgIHNycjIgIDB4M2RlICAgICAgLyogc2F2ZS9yZXN0b3JlIHJlZ2lzdGVyIDIgKi8KLSAgICAgICAgI2RlZmluZSAgc3JyMyAgMHgzZGYgICAgICAvKiBzYXZlL3Jlc3RvcmUgcmVnaXN0ZXIgMyAqLworCSNkZWZpbmUgIHNycjIgIDB4M2RlICAgICAgLyogc2F2ZS9yZXN0b3JlIHJlZ2lzdGVyIDIgKi8KKwkjZGVmaW5lICBzcnIzICAweDNkZiAgICAgIC8qIHNhdmUvcmVzdG9yZSByZWdpc3RlciAzICovCiAJI2RlZmluZSAgZGJzciAgMHgzZjAgICAgICAvKiBkZWJ1ZyBzdGF0dXMgcmVnaXN0ZXIgKi8KIAkjZGVmaW5lICBkYmNyMCAweDNmMiAgICAgIC8qIGRlYnVnIGNvbnRyb2wgcmVnaXN0ZXIgMCAqLwogCSNkZWZpbmUgIGRiY3IxIDB4M2JkICAgICAgLyogZGVidWcgY29udHJvbCByZWdpc3RlciAxICovCkBAIC00NCw5ICs0NCw5IEBACiAJI2RlZmluZSAgdHNyICAgMHgzZDggICAgICAvKiB0aW1lciBzdGF0dXMgcmVnaXN0ZXIgKi8KIAkjZGVmaW5lICB0Y3IgICAweDNkYSAgICAgIC8qIHRpbWVyIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAkjZGVmaW5lICBwaXQgICAweDNkYiAgICAgIC8qIHByb2dyYW1tYWJsZSBpbnRlcnZhbCB0aW1lciAqLwotICAgICAgICAjZGVmaW5lICBzZ3IgICAweDNiOSAgICAgIC8qIHN0b3JhZ2UgZ3VhcmRlZCByZWcgICAgICAqLwotICAgICAgICAjZGVmaW5lICBkY3dyICAweDNiYSAgICAgIC8qIGRhdGEgY2FjaGUgd3JpdGUtdGhydSByZWcqLwotICAgICAgICAjZGVmaW5lICBzbGVyICAweDNiYiAgICAgIC8qIHN0b3JhZ2UgbGl0dGxlLWVuZGlhbiByZWcgKi8KKwkjZGVmaW5lICBzZ3IgICAweDNiOSAgICAgIC8qIHN0b3JhZ2UgZ3VhcmRlZCByZWcgICAgICAqLworCSNkZWZpbmUgIGRjd3IgIDB4M2JhICAgICAgLyogZGF0YSBjYWNoZSB3cml0ZS10aHJ1IHJlZyovCisJI2RlZmluZSAgc2xlciAgMHgzYmIgICAgICAvKiBzdG9yYWdlIGxpdHRsZS1lbmRpYW4gcmVnICovCiAJI2RlZmluZSAgY2RiY3IgMHgzZDcgICAgICAvKiBjYWNoZSBkZWJ1ZyBjbnRybCByZWcgICAgKi8KIAkjZGVmaW5lICBpY2RiZHIgMHgzZDMgICAgIC8qIGluc3RyIGNhY2hlIGRidWcgZGF0YSByZWcqLwogCSNkZWZpbmUgIGNjcjAgIDB4M2IzICAgICAgLyogY29yZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCkBAIC01Niw4ICs1Niw4IEBACiAJI2RlZmluZSAgc3UwciAgMHgzYmMgICAgICAvKiBzdG9yYWdlIHVzZXItZGVmaW5lZCByZWdpc3RlciAwICovCiAJI2RlZmluZSAgenByICAgMHgzYjAgICAgICAvKiB6b25lIHByb3RlY3Rpb24gcmVnc2l0ZXIgKi8KIAotICAgICAgICAjZGVmaW5lICB0YmwgICAweDExYyAgICAgIC8qIHRpbWUgYmFzZSBsb3dlciAtIHByaXZpbGVnZWQgd3JpdGUgKi8KLSAJI2RlZmluZSAgdGJ1ICAgMHgxMWQgICAgICAvKiB0aW1lIGJhc2UgdXBwZXIgLSBwcml2aWxlZ2VkIHdyaXRlICovCisJI2RlZmluZSAgdGJsICAgMHgxMWMgICAgICAvKiB0aW1lIGJhc2UgbG93ZXIgLSBwcml2aWxlZ2VkIHdyaXRlICovCisJI2RlZmluZSAgdGJ1ICAgMHgxMWQgICAgICAvKiB0aW1lIGJhc2UgdXBwZXIgLSBwcml2aWxlZ2VkIHdyaXRlICovCiAKIAkjZGVmaW5lICBzcHJnNHIgMHgxMDQgICAgIC8qIFNwZWNpYWwgcHVycG9zZSBnZW5lcmFsIDQgLSByZWFkIG9ubHkgKi8KIAkjZGVmaW5lICBzcHJnNXIgMHgxMDUgICAgIC8qIFNwZWNpYWwgcHVycG9zZSBnZW5lcmFsIDUgLSByZWFkIG9ubHkgKi8KQEAgLTQ0OCwzMCArNDQ4LDMwIEBACiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogI2RlZmluZSBQTExNUjBfMjY2XzEzM182NiAgKFBMTF9DUFVESVZfMSB8IFBMTF9QTEJESVZfMiB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUExMX09QQkRJVl8yIHwgUExMX0VYVEJVU0RJVl8yIHwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTExfTUFMRElWXzEgfCBQTExfUENJRElWXzQpCisJCQkgICAgUExMX09QQkRJVl8yIHwgUExMX0VYVEJVU0RJVl8yIHwgIFwKKwkJCSAgICBQTExfTUFMRElWXzEgfCBQTExfUENJRElWXzQpCiAjZGVmaW5lIFBMTE1SMV8yNjZfMTMzXzY2ICAoUExMX0ZCS0RJVl84ICB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUExMX0ZXRERJVkFfMyB8IFBMTF9GV0RESVZCXzMgfCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBMTF9UVU5FXzE1X01fNDAgfCBQTExfVFVORV9WQ09fTE9XKQorCQkJICAgIFBMTF9GV0RESVZBXzMgfCBQTExfRldERElWQl8zIHwgIFwKKwkJCSAgICBQTExfVFVORV8xNV9NXzQwIHwgUExMX1RVTkVfVkNPX0xPVykKIAogI2RlZmluZSBQTExNUjBfMTMzXzY2XzY2XzMzICAoUExMX0NQVURJVl8xIHwgUExMX1BMQkRJVl8xIHwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBMTF9PUEJESVZfMiB8IFBMTF9FWFRCVVNESVZfNCB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTExfTUFMRElWXzEgfCBQTExfUENJRElWXzQpCisJCQkgICAgICBQTExfT1BCRElWXzIgfCBQTExfRVhUQlVTRElWXzQgfCAgXAorCQkJICAgICAgUExMX01BTERJVl8xIHwgUExMX1BDSURJVl80KQogI2RlZmluZSBQTExNUjFfMTMzXzY2XzY2XzMzICAoUExMX0ZCS0RJVl80ICB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTExfRldERElWQV82IHwgUExMX0ZXRERJVkJfNiB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTExfVFVORV8xNV9NXzQwIHwgUExMX1RVTkVfVkNPX0xPVykKKwkJCSAgICAgIFBMTF9GV0RESVZBXzYgfCBQTExfRldERElWQl82IHwgIFwKKwkJCSAgICAgIFBMTF9UVU5FXzE1X01fNDAgfCBQTExfVFVORV9WQ09fTE9XKQogI2RlZmluZSBQTExNUjBfMjAwXzEwMF81MF8zMyAoUExMX0NQVURJVl8xIHwgUExMX1BMQkRJVl8yIHwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBMTF9PUEJESVZfMiB8IFBMTF9FWFRCVVNESVZfMyB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTExfTUFMRElWXzEgfCBQTExfUENJRElWXzQpCisJCQkgICAgICBQTExfT1BCRElWXzIgfCBQTExfRVhUQlVTRElWXzMgfCAgXAorCQkJICAgICAgUExMX01BTERJVl8xIHwgUExMX1BDSURJVl80KQogI2RlZmluZSBQTExNUjFfMjAwXzEwMF81MF8zMyAoUExMX0ZCS0RJVl82ICB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTExfRldERElWQV80IHwgUExMX0ZXRERJVkJfNCB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTExfVFVORV8xNV9NXzQwIHwgUExMX1RVTkVfVkNPX0xPVykKKwkJCSAgICAgIFBMTF9GV0RESVZBXzQgfCBQTExfRldERElWQl80IHwgIFwKKwkJCSAgICAgIFBMTF9UVU5FXzE1X01fNDAgfCBQTExfVFVORV9WQ09fTE9XKQogI2RlZmluZSBQTExNUjBfMjY2XzEzM182Nl8zMyAoUExMX0NQVURJVl8xIHwgUExMX1BMQkRJVl8yIHwgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBMTF9PUEJESVZfMiB8IFBMTF9FWFRCVVNESVZfNCB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTExfTUFMRElWXzEgfCBQTExfUENJRElWXzQpCisJCQkgICAgICBQTExfT1BCRElWXzIgfCBQTExfRVhUQlVTRElWXzQgfCAgXAorCQkJICAgICAgUExMX01BTERJVl8xIHwgUExMX1BDSURJVl80KQogI2RlZmluZSBQTExNUjFfMjY2XzEzM182Nl8zMyAoUExMX0ZCS0RJVl84ICB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTExfRldERElWQV8zIHwgUExMX0ZXRERJVkJfMyB8ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTExfVFVORV8xNV9NXzQwIHwgUExMX1RVTkVfVkNPX0xPVykKKwkJCSAgICAgIFBMTF9GV0RESVZBXzMgfCBQTExfRldERElWQl8zIHwgIFwKKwkJCSAgICAgIFBMTF9UVU5FXzE1X01fNDAgfCBQTExfVFVORV9WQ09fTE9XKQogCiAvKgogICogUExMIFZvbHRhZ2UgQ29udHJvbGxlZCBPc2NpbGxhdG9yIChWQ08pIGRlZmluaXRpb25zCkBAIC02NzIsNCArNjcyLDMgQEAKIAkJCQkJCSAgICAgbGluZSBhbGlnbmVkIGRhdGEuICovCiAKICNlbmRpZgkvKiBfX1BQQzQwNV9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcGM0NDAuaCBiL2luY2x1ZGUvcHBjNDQwLmgKaW5kZXggMzJjNWI1Mi4uNzY5MzBhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wcGM0NDAuaAorKysgYi9pbmNsdWRlL3BwYzQ0MC5oCkBAIC01NTEsNCArNTUxLDMgQEAKIAkJCQkJCSAgICAgbGluZSBhbGlnbmVkIGRhdGEuICovCiAKICNlbmRpZgkvKiBfX1BQQzQ0MF9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcGM0eHguaCBiL2luY2x1ZGUvcHBjNHh4LmgKaW5kZXggNTc1MDkwMi4uNjc3NTljNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wcGM0eHguaAorKysgYi9pbmNsdWRlL3BwYzR4eC5oCkBAIC0zMCw0ICszMCwzIEBACiAjZW5kaWYKIAogI2VuZGlmCS8qIF9fUFBDNFhYX0hfXyAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BwY19hc20udG1wbCBiL2luY2x1ZGUvcHBjX2FzbS50bXBsCmluZGV4IGY5OWQ3YjIuLjBlMGJkZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHBjX2FzbS50bXBsCisrKyBiL2luY2x1ZGUvcHBjX2FzbS50bXBsCkBAIC0yNDgsMzEgKzI0OCwzMSBAQAogICogY29kZSBleGNlcHQgdGhhdCBpdCB1c2VzIFNSUjIgYW5kIFNSUjMgaW5zdGVhZCBvZiBTUlIwIGFuZCBTUlIxLgogICovCiAjZGVmaW5lIENSSVRJQ0FMX0VYQ0VQVElPTl9QUk9MT0cgICAgICAgXAotICAgICAgICBtdHNwciAgIFNQUkcwLHIyMDsgICAgICBcCi0gICAgICAgIG10c3ByICAgU1BSRzEscjIxOyAgICAgIFwKLSAgICAgICAgbWZjciAgICByMjA7ICAgICAgICAgICAgXAotICAgICAgICBzdWJpICAgIHIyMSxyMSxJTlRfRlJBTUVfU0laRStTVEFDS19VTkRFUkhFQUQ7ICAvKiBhbGxvYyBleGMuIGZyYW1lICovXAotICAgICAgICBzdHcgICAgIHIyMCxfQ0NSKHIyMSk7ICAgICAgICAgIC8qIHNhdmUgcmVnaXN0ZXJzICovIFwKLSAgICAgICAgc3R3ICAgICByMjIsR1BSMjIocjIxKTsgXAotICAgICAgICBzdHcgICAgIHIyMyxHUFIyMyhyMjEpOyBcCi0gICAgICAgIG1mc3ByICAgcjIwLFNQUkcwOyAgICAgIFwKLSAgICAgICAgc3R3ICAgICByMjAsR1BSMjAocjIxKTsgXAotICAgICAgICBtZnNwciAgIHIyMixTUFJHMTsgICAgICBcCi0gICAgICAgIHN0dyAgICAgcjIyLEdQUjIxKHIyMSk7IFwKLSAgICAgICAgbWZsciAgICByMjA7ICAgICAgICAgICAgXAotICAgICAgICBzdHcgICAgIHIyMCxfTElOSyhyMjEpOyBcCi0gICAgICAgIG1mY3RyICAgcjIyOyAgICAgICAgICAgIFwKLSAgICAgICAgc3R3ICAgICByMjIsX0NUUihyMjEpOyAgXAotICAgICAgICBtZnNwciAgIHIyMCxYRVI7ICAgICAgICBcCi0gICAgICAgIHN0dyAgICAgcjIwLF9YRVIocjIxKTsgIFwKLSAgICAgICAgbWZzcHIgICByMjIsOTkwOyAgICAgICAgLyogU1JSMiAqLyAgICAgIFwKLSAgICAgICAgbWZzcHIgICByMjMsOTkxOyAgICAgICAgLyogU1JSMyAqLyAgICAgIFwKLSAgICAgICAgc3R3ICAgICByMCxHUFIwKHIyMSk7ICAgXAotICAgICAgICBzdHcgICAgIHIxLEdQUjEocjIxKTsgICBcCi0gICAgICAgIHN0dyAgICAgcjIsR1BSMihyMjEpOyAgIFwKLSAgICAgICAgc3R3ICAgICByMSwwKHIyMSk7ICAgICAgXAotICAgICAgICBtciAgICAgIHIxLHIyMTsgICAgICAgICAgICAgICAgIC8qIHNldCBuZXcga2VybmVsIHNwICovIFwKLSAgICAgICAgU0FWRV80R1BSUygzLCByMjEpOworCW10c3ByICAgU1BSRzAscjIwOyAgICAgIFwKKwltdHNwciAgIFNQUkcxLHIyMTsgICAgICBcCisJbWZjciAgICByMjA7ICAgICAgICAgICAgXAorCXN1YmkgICAgcjIxLHIxLElOVF9GUkFNRV9TSVpFK1NUQUNLX1VOREVSSEVBRDsgIC8qIGFsbG9jIGV4Yy4gZnJhbWUgKi9cCisJc3R3ICAgICByMjAsX0NDUihyMjEpOyAgICAgICAgICAvKiBzYXZlIHJlZ2lzdGVycyAqLyBcCisJc3R3ICAgICByMjIsR1BSMjIocjIxKTsgXAorCXN0dyAgICAgcjIzLEdQUjIzKHIyMSk7IFwKKwltZnNwciAgIHIyMCxTUFJHMDsgICAgICBcCisJc3R3ICAgICByMjAsR1BSMjAocjIxKTsgXAorCW1mc3ByICAgcjIyLFNQUkcxOyAgICAgIFwKKwlzdHcgICAgIHIyMixHUFIyMShyMjEpOyBcCisJbWZsciAgICByMjA7ICAgICAgICAgICAgXAorCXN0dyAgICAgcjIwLF9MSU5LKHIyMSk7IFwKKwltZmN0ciAgIHIyMjsgICAgICAgICAgICBcCisJc3R3ICAgICByMjIsX0NUUihyMjEpOyAgXAorCW1mc3ByICAgcjIwLFhFUjsgICAgICAgIFwKKwlzdHcgICAgIHIyMCxfWEVSKHIyMSk7ICBcCisJbWZzcHIgICByMjIsOTkwOyAgICAgICAgLyogU1JSMiAqLyAgICAgIFwKKwltZnNwciAgIHIyMyw5OTE7ICAgICAgICAvKiBTUlIzICovICAgICAgXAorCXN0dyAgICAgcjAsR1BSMChyMjEpOyAgIFwKKwlzdHcgICAgIHIxLEdQUjEocjIxKTsgICBcCisJc3R3ICAgICByMixHUFIyKHIyMSk7ICAgXAorCXN0dyAgICAgcjEsMChyMjEpOyAgICAgIFwKKwltciAgICAgIHIxLHIyMTsgICAgICAgICAgICAgICAgIC8qIHNldCBuZXcga2VybmVsIHNwICovIFwKKwlTQVZFXzRHUFJTKDMsIHIyMSk7CiAvKgogICogTm90ZTogY29kZSB3aGljaCBmb2xsb3dzIHRoaXMgdXNlcyBjcjAuZXEgKHNldCBpZiBmcm9tIGtlcm5lbCksCiAgKiByMjEsIHIyMiAoU1JSMiksIGFuZCByMjMgKFNSUjMpLgpAQCAtMzAxLDE3ICszMDEsMTcgQEAKIAogCiAjZGVmaW5lIENSSVRfRVhDRVBUSU9OKG4sIGxhYmVsLCBoZGxyKSAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLiA9IG47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCS4gPSBuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIGxhYmVsOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDUklUSUNBTF9FWENFUFRJT05fUFJPTE9HOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGx3eiAgICAgcjMsR09UKHRyYW5zZmVyX3RvX2hhbmRsZXIpOyAgICAgICAgICAgIFwKLSAgICAgICAgbXRsciAgICByMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBhZGRpICAgIHIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFEOyAgICAgICAgICAgICBcCi0gICAgICAgIGxpICAgICAgcjIwLE1TUl9LRVJORUw7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmx3aW1pICByMjAscjIzLDAsMjUsMjU7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBibHJsICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJQ1JJVElDQUxfRVhDRVBUSU9OX1BST0xPRzsgICAgICAgICAgICAgICAgICAgICAgXAorCWx3eiAgICAgcjMsR09UKHRyYW5zZmVyX3RvX2hhbmRsZXIpOyAgICAgICAgICAgIFwKKwltdGxyICAgIHIzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJYWRkaSAgICByMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsgICAgICAgICAgICAgXAorCWxpICAgICAgcjIwLE1TUl9LRVJORUw7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlybHdpbWkgIHIyMCxyMjMsMCwyNSwyNTsgICAgICAgICAgICAgICAgICAgICAgICBcCisJYmxybCAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogLkxfICMjIGxhYmVsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC5sb25nICAgaGRsciAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUOyAgICAgIFwKLSAgICAgICAgLmxvbmcgICBjcml0X3JldHVybiAtIF9zdGFydCArIEVYQ19PRkZfU1lTX1JFU0VUCisJLmxvbmcgICBoZGxyIC0gX3N0YXJ0ICsgRVhDX09GRl9TWVNfUkVTRVQ7ICAgICAgXAorCS5sb25nICAgY3JpdF9yZXR1cm4gLSBfc3RhcnQgKyBFWENfT0ZGX1NZU19SRVNFVAogCiAjZW5kaWYJLyogX19QUENfQVNNX1RNUExfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zM2MyNDAwLmggYi9pbmNsdWRlL3MzYzI0MDAuaAppbmRleCA2MjY5MTE3Li5iYzFmMWU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3MzYzI0MDAuaAorKysgYi9pbmNsdWRlL3MzYzI0MDAuaApAQCAtNDY1LDcgKzQ2NSw2IEBACiAjZGVmaW5lIHJNTURBVAkJKCoodm9sYXRpbGUgdW5zaWduZWQgKikweDE1YTAwMDNDKQogCiAKLQogLyogSVNSICovCiAjZGVmaW5lIHBJU1JfUkVTRVQJKCoodW5zaWduZWQgKikoX0lTUl9TVEFSVEFERFJFU1MrMHgwKSkKICNkZWZpbmUgcElTUl9VTkRFRgkoKih1bnNpZ25lZCAqKShfSVNSX1NUQVJUQUREUkVTUysweDQpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zM2MyNHgwLmggYi9pbmNsdWRlL3MzYzI0eDAuaAppbmRleCA3OGE3OTgxLi43MWYzNWE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3MzYzI0eDAuaAorKysgYi9pbmNsdWRlL3MzYzI0eDAuaApAQCAtMzcxLDcgKzM3MSw3IEBACiAjaWZkZWYgQ09ORklHX1MzQzI0MDAKIAlTM0MyNFgwX1JFRzMyCVBBQ09OOwogCVMzQzI0WDBfUkVHMzIJUEFEQVQ7Ci0JCisKIAlTM0MyNFgwX1JFRzMyCVBCQ09OOwogCVMzQzI0WDBfUkVHMzIJUEJEQVQ7CiAJUzNDMjRYMF9SRUczMglQQlVQOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpLmggYi9pbmNsdWRlL3Njc2kuaAppbmRleCA4OTI5MzE4Li4yYmU0ZDQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kuaAorKysgYi9pbmNsdWRlL3Njc2kuaApAQCAtMTg3LDcgKzE4Nyw2IEBACiB2b2lkIHNjc2lfaW5pdCh2b2lkKTsKIAogCi0KICNkZWZpbmUgU0NTSV9JREVOVElGWQkJCQkJMHhDMCAgLyogbm90IHVzZWQgKi8KIAogLyogSGFyZHdhcmUgZXJyb3JzICAqLwpAQCAtMTk5LDcgKzE5OCw2IEBACiAjZGVmaW5lIFNDU0lfSU5UX1NUQVRFCQkJCSAweDAwMDEwMDAwICAvKiB1bmtub3duIEludGVycnVwdCBudW1iZXIgaXMgc3RvcmVkIGluIDE2IExTQiAqLwogCiAKLQogI2lmbmRlZiBUUlVFCiAjZGVmaW5lIFRSVUUgMQogI2VuZGlmCkBAIC0yMDcsOSArMjA1LDQgQEAKICNkZWZpbmUgRkFMU0UgMAogI2VuZGlmCiAKLQotCi0KLQogI2VuZGlmIC8qIF9TQ1NJX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zZWQxMzgwNi5oIGIvaW5jbHVkZS9zZWQxMzgwNi5oCmluZGV4IDcwZThlODcuLjIxNmU3ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2VkMTM4MDYuaAorKysgYi9pbmNsdWRlL3NlZDEzODA2LmgKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgREVGQVVMVF9WSURFT19NRU1PUllfU0laRSAgMHgxNDAwMDAgICAgIC8qIFZpZGVvIE1lbW9yeSBTaXplICovCiAKICNkZWZpbmUgSFdDVVJTT1JTSVpFIAkJICAgMTAyNCAgICAgLyogU2l6ZSBvZiBtZW1vcnkgcmVzZXJ2ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBIVyBjdXJzb3IqLyAKKwkJCQkJCSAgIGZvciBIVyBjdXJzb3IqLwogCiAvKiBPZmZzZXQgb2YgY2hpcHNldCByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lCUJMVF9DVFJMMAkoMHgwMTAwKQpAQCAtODcsNyArODcsNiBAQAogfSBTMURfUkVHUzsKIAogCi0KIC8qIEJvYXJkIHNwZWNpZmljIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIHVuc2lnbmVkIGludCBib2FyZF92aWRlb19pbml0ICh2b2lkKTsKIHZvaWQgYm9hcmRfdmFsaWRhdGVfc2NyZWVuICh1bnNpZ25lZCBpbnQgYmFzZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NtaUx5bnhFTS5oIGIvaW5jbHVkZS9zbWlMeW54RU0uaAppbmRleCBjZGQyZjI0Li4wMTc5NjRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NtaUx5bnhFTS5oCisrKyBiL2luY2x1ZGUvc21pTHlueEVNLmgKQEAgLTQ0LDkgKzQ0LDkgQEAKICAqLwogI2RlZmluZSBWSURFT19NT0RFUyAgICAgICAgICAgICA3CiAjZGVmaW5lIERVQUxfODAwXzYwMCAgICAgICAgICAgIDAgICAvKiBTTUk3MTA6VkdBMTo3NUh6ICAgICAocGl0Y2g9MTYwMCkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICBWR0EyOjYwLzEyMEh6IChwaXRjaD0xNjAwKSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU01JODEwOlZHQTE6NzVIeiAgICAgKHBpdGNoPTE2MDApICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgVkdBMjo3NUh6ICAgICAocGl0Y2g9MTYwMCkgKi8KKwkJCQkgICAgLyogICAgICAgIFZHQTI6NjAvMTIwSHogKHBpdGNoPTE2MDApICovCisJCQkJICAgIC8qIFNNSTgxMDpWR0ExOjc1SHogICAgIChwaXRjaD0xNjAwKSAqLworCQkJCSAgICAvKiAgICAgICAgVkdBMjo3NUh6ICAgICAocGl0Y2g9MTYwMCkgKi8KICNkZWZpbmUgRFVBTF8xMDI0Xzc2OCAgICAgICAgICAgMSAgIC8qIFZHQTE6NzVIeiBWR0EyOjczSHogKHBpdGNoPTIwNDgpICAqLwogI2RlZmluZSBTSU5HTEVfODAwXzYwMCAgICAgICAgICAyICAgLyogVkdBMTo3NUh6IChwaXRjaD04MDApICAgICAgICAgICAgICovCiAjZGVmaW5lIFNJTkdMRV8xMDI0Xzc2OCAgICAgICAgIDMgICAvKiBWR0ExOjc1SHogKHBpdGNoPTEwMjQpICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3BhcnRhbjIuaCBiL2luY2x1ZGUvc3BhcnRhbjIuaAppbmRleCBhMDRhYWNhLi45NzI1ZDRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NwYXJ0YW4yLmgKKysrIGIvaW5jbHVkZS9zcGFydGFuMi5oCkBAIC04OSw0ICs4OSwzIEBACiB7IFhpbGlueF9TcGFydGFuMiwgaWZhY2UsIFhJTElOWF9YQzJTMTUwX1NJWkUsIGZuX3RhYmxlLCBjb29raWUgfQogCiAjZW5kaWYgLyogX1NQQVJUQU4yX0hfICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3BkX3NkcmFtLmggYi9pbmNsdWRlL3NwZF9zZHJhbS5oCmluZGV4IGZlYjFiYmQuLjRlNzU0ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc3BkX3NkcmFtLmgKKysrIGIvaW5jbHVkZS9zcGRfc2RyYW0uaApAQCAtMyw0ICszLDQgQEAKIAogbG9uZyBpbnQgc3BkX3NkcmFtKGludChyZWFkX3NwZCkodWludCBhZGRyKSk7CiAKLSNlbmRpZiAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGF0dXNfbGVkLmggYi9pbmNsdWRlL3N0YXR1c19sZWQuaAppbmRleCBlOGJhOWZkLi40N2Y3YzM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3N0YXR1c19sZWQuaAorKysgYi9pbmNsdWRlL3N0YXR1c19sZWQuaApAQCAtMjU4LDggKzI1OCw4IEBACiAKIC8qKioqKiAgQ01JICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DTUkpCi0jIGRlZmluZSBTVEFUVVNfTEVEX0RJUgkJaW1fbWlvcy5taW9zX21waW9zbTMyZGRyIAotIyBkZWZpbmUgU1RBVFVTX0xFRF9EQVQJCWltX21pb3MubWlvc19tcGlvc20zMmRyIAorIyBkZWZpbmUgU1RBVFVTX0xFRF9ESVIJCWltX21pb3MubWlvc19tcGlvc20zMmRkcgorIyBkZWZpbmUgU1RBVFVTX0xFRF9EQVQJCWltX21pb3MubWlvc19tcGlvc20zMmRyCiAKICMgZGVmaW5lIFNUQVRVU19MRURfQklUCQkweDIwMDAJCS8qIFNlbGVjdCBvbmUgb2YgdGhlIDE2IHBvc3NpYmxlKi8KIAkJCQkJCS8qIE1JT1Mgb3V0cHV0cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zeW01M2M4eHguaCBiL2luY2x1ZGUvc3ltNTNjOHh4LmgKaW5kZXggODIxZTFmOC4uMDczNGZlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zeW01M2M4eHguaAorKysgYi9pbmNsdWRlL3N5bTUzYzh4eC5oCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkjZGVmaW5lICAgSVJRTSAgICAweDA4ICAvKiBtb2Q6IGlycSBtb2RlICgxID0gdG90ZW0gcG9sZSAhKSAqLwogCSNkZWZpbmUgICBTVEQgICAgIDB4MDQgIC8qIGNtZDogc3RhcnQgZG1hIG1vZGUgICAgICAgICAgICAgICovCiAJI2RlZmluZSAgIElSUUQgICAgMHgwMiAgLyogbW9kOiBpcnEgZGlzYWJsZSAgICAgICAgICAgICAgICAgKi8KLSAJI2RlZmluZQkgIE5PQ09NICAgMHgwMQkvKiBjbWQ6IHByb3RlY3Qgc2ZiciB3aGlsZSByZXNlbGVjdCAqLworCSNkZWZpbmUJICBOT0NPTSAgIDB4MDEJLyogY21kOiBwcm90ZWN0IHNmYnIgd2hpbGUgcmVzZWxlY3QgKi8KIAkJCQkvKiBiaXRzIDAtMSByc3ZkIGZvciBDMTAxMCAgICAgICAgICAqLwogCiAjZGVmaW5lIEFEREVSCQkJMHgzYwpAQCAtMjMxLDggKzIzMSw2IEBACiAjZGVmaW5lIFNCREwJCQkweDU4CS8qIExvd2xldmVsOiBkYXRhIGZyb20gc2NzaSBkYXRhICAgICovCiAKIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoqCiAqKglVdGlsaXR5IG1hY3JvcyBmb3IgdGhlIHNjcmlwdC4KQEAgLTM1Niw4ICszNTQsNiBAQAogI2RlZmluZQlTQ1JfQVROCQkweDAwMDAwMDA4CiAKIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoqCiAqKglNZW1vcnkgdG8gbWVtb3J5IG1vdmUKQEAgLTQwOCwxMyArNDA0LDEzIEBACiAjZGVmaW5lIFNDUl9SRUdfT0ZTKG9mcykgKCgoKG9mcykgJiAweDdmKSA8PCAxNnVsKSkgLyogKyAoKG9mcykgJiAweDgwKSkgKi8KIAogI2RlZmluZSBTQ1JfU0ZCUl9SRUcocmVnLG9wLGRhdGEpIFwKLSAgICAgICAgKDB4NjgwMDAwMDAgfCAoU0NSX1JFR19PRlMoUkVHKHJlZykpKSB8IChvcCkgfCAoKChkYXRhKSYweGZmKTw8OHVsKSkKKwkoMHg2ODAwMDAwMCB8IChTQ1JfUkVHX09GUyhSRUcocmVnKSkpIHwgKG9wKSB8ICgoKGRhdGEpJjB4ZmYpPDw4dWwpKQogCiAjZGVmaW5lIFNDUl9SRUdfU0ZCUihyZWcsb3AsZGF0YSkgXAotICAgICAgICAoMHg3MDAwMDAwMCB8IChTQ1JfUkVHX09GUyhSRUcocmVnKSkpIHwgKG9wKSB8ICgoKGRhdGEpJjB4ZmYpPDw4dWwpKQorCSgweDcwMDAwMDAwIHwgKFNDUl9SRUdfT0ZTKFJFRyhyZWcpKSkgfCAob3ApIHwgKCgoZGF0YSkmMHhmZik8PDh1bCkpCiAKICNkZWZpbmUgU0NSX1JFR19SRUcocmVnLG9wLGRhdGEpIFwKLSAgICAgICAgKDB4NzgwMDAwMDAgfCAoU0NSX1JFR19PRlMoUkVHKHJlZykpKSB8IChvcCkgfCAoKChkYXRhKSYweGZmKTw8OHVsKSkKKwkoMHg3ODAwMDAwMCB8IChTQ1JfUkVHX09GUyhSRUcocmVnKSkpIHwgKG9wKSB8ICgoKGRhdGEpJjB4ZmYpPDw4dWwpKQogCiAKICNkZWZpbmUgICAgICBTQ1JfTE9BRCAgIDB4MDAwMDAwMDAKQEAgLTQ1NSw3ICs0NTEsNyBAQAogCVNDUl9SRUdfUkVHKHJlZyxTQ1JfTE9BRCxkYXRhKQogCiAjZGVmaW5lIFNDUl9MT0FEX1NGQlIoZGF0YSkgXAotICAgICAgICAoU0NSX1JFR19TRkJSIChncHJlZywgU0NSX0xPQUQsIGRhdGEpKQorCShTQ1JfUkVHX1NGQlIgKGdwcmVnLCBTQ1JfTE9BRCwgZGF0YSkpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoqCkBAIC00ODAsMTAgKzQ3NiwxMCBAQAogI2RlZmluZSBTQ1JfRFNBX1JFTDIJMHgxMDAwMDAwMAogCiAjZGVmaW5lIFNDUl9MT0FEX1IocmVnLCBob3csIG4pIFwKLSAgICAgICAgKDB4ZTEwMDAwMDAgfCBob3cgfCAoU0NSX1JFR19PRlMyKFJFRyhyZWcpKSkgfCAobikpCisJKDB4ZTEwMDAwMDAgfCBob3cgfCAoU0NSX1JFR19PRlMyKFJFRyhyZWcpKSkgfCAobikpCiAKICNkZWZpbmUgU0NSX1NUT1JFX1IocmVnLCBob3csIG4pIFwKLSAgICAgICAgKDB4ZTAwMDAwMDAgfCBob3cgfCAoU0NSX1JFR19PRlMyKFJFRyhyZWcpKSkgfCAobikpCisJKDB4ZTAwMDAwMDAgfCBob3cgfCAoU0NSX1JFR19PRlMyKFJFRyhyZWcpKSkgfCAobikpCiAKICNkZWZpbmUgU0NSX0xPQURfQUJTKHJlZywgbikJU0NSX0xPQURfUihyZWcsIFNDUl9OT19GTFVTSDIsIG4pCiAjZGVmaW5lIFNDUl9MT0FEX1JFTChyZWcsIG4pCVNDUl9MT0FEX1IocmVnLCBTQ1JfTk9fRkxVU0gyfFNDUl9EU0FfUkVMMiwgbikKQEAgLTU1NCw3ICs1NTAsNiBAQAogI2RlZmluZSBDQVJSWVNFVCAgICAgICAoMHgwMDIwMDAwMCkKIAogCi0KICNkZWZpbmUgU0lSX0NPTVBMRVRFCQkJCQkgMHgxMDAwMDAwMAogLyogc2NyaXB0IGVycm9ycyAqLwogI2RlZmluZSBTSVJfU0VMX0FUTl9OT19NU0dfT1VUIDB4MDAwMDAwMDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXNiLmggYi9pbmNsdWRlL3VzYi5oCmluZGV4IGMzY2M4OTAuLmVkYjYxMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdXNiLmgKKysrIGIvaW5jbHVkZS91c2IuaApAQCAtNTksNyArNTksNiBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIAotCiAvKiBBbGwgc3RhbmRhcmQgZGVzY3JpcHRvcnMgaGF2ZSB0aGVzZSAyIGZpZWxkcyBpbiBjb21tb24gKi8KIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgewogCXVuc2lnbmVkIGNoYXIgIGJMZW5ndGg7CkBAIC0xNDEsNyArMTQwLDcgQEAKIAlpbnQgbWF4cGFja2V0c2l6ZTsJCSAgICAvKiBNYXhpbXVtIHBhY2tldCBzaXplOyBlbmNvZGVkIGFzIDAsMSwyLDMgPSA4LDE2LDMyLDY0ICovCiAJdW5zaWduZWQgaW50IHRvZ2dsZVsyXTsJCS8qIG9uZSBiaXQgZm9yIGVhY2ggZW5kcG9pbnQgKFswXSA9IElOLCBbMV0gPSBPVVQpICovCiAJdW5zaWduZWQgaW50IGhhbHRlZFsyXTsJCS8qIGVuZHBvaW50IGhhbHRzOyBvbmUgYml0IHBlciBlbmRwb2ludCAjICYgZGlyZWN0aW9uOyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFswXSA9IElOLCBbMV0gPSBPVVQgKi8KKwkJCSAgICAvKiBbMF0gPSBJTiwgWzFdID0gT1VUICovCiAJaW50IGVwbWF4cGFja2V0aW5bMTZdOwkJLyogSU5wdXQgZW5kcG9pbnQgc3BlY2lmaWMgbWF4aW11bXMgKi8KIAlpbnQgZXBtYXhwYWNrZXRvdXRbMTZdOwkJLyogT1VUcHV0IGVuZHBvaW50IHNwZWNpZmljIG1heGltdW1zICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXNiX2RlZnMuaCBiL2luY2x1ZGUvdXNiX2RlZnMuaAppbmRleCAwMGEzMWU5Li4zM2QxZTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VzYl9kZWZzLmgKKysrIGIvaW5jbHVkZS91c2JfZGVmcy5oCkBAIC0xODksNyArMTg5LDYgQEAKICNkZWZpbmUgVVNCX1NUX05PVF9QUk9DICAgICAgICAgMHg4MDAwMDAwMEwJLyogTm90IHlldCBwcm9jZXNzZWQgKi8KIAogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBIdWIgZGVmaW5lcwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZlcnNpb24uaCBiL2luY2x1ZGUvdmVyc2lvbi5oCmluZGV4IDNmMjI4YzguLmZlZTFiNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvdmVyc2lvbi5oCkBAIC0yNCw2ICsyNCw2IEBACiAjaWZuZGVmCV9fVkVSU0lPTl9IX18KICNkZWZpbmUJX19WRVJTSU9OX0hfXwogCi0jZGVmaW5lCVVfQk9PVF9WRVJTSU9OCSJVLUJvb3QgMC40LjAiCisjZGVmaW5lCVVfQk9PVF9WRVJTSU9OCSJVLUJvb3QgMC40LjEiCiAKICNlbmRpZgkvKiBfX1ZFUlNJT05fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvX2FkNzE3Ni5oIGIvaW5jbHVkZS92aWRlb19hZDcxNzYuaAppbmRleCA4ODAwN2NlLi41YjhiMDEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvX2FkNzE3Ni5oCisrKyBiL2luY2x1ZGUvdmlkZW9fYWQ3MTc2LmgKQEAgLTQ5LDU2ICs0OSw1NiBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB2aWRlb19lbmNvZGVyX2RhdGFbXSA9IHsKICNpZmRlZiBWSURFT19NT0RFX05UU0MKLSAgICAJCQkJICAgICAgICAweDA0LCAvKiBNb2RlIFJlZ2lzdGVyIDAJKi8KKwkJCQkJMHgwNCwgLyogTW9kZSBSZWdpc3RlciAwCSovCiAjaWZkZWYgVklERU9fREVCVUdfQ09MT1JCQVJTCiAJCQkJCTB4ODIsCiAjZWxzZQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgLyogTW9kZSBSZWdpc3RlciAxCSovCisJCQkJCTB4MDIsIC8qIE1vZGUgUmVnaXN0ZXIgMQkqLwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNiwgLyogU3ViY2FycmllciBGcmVxIDAJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdjLCAvKiBTdWJjYXJyaWVyIEZyZXEgMQkqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJMHhmMCwgLyogU3ViY2FycmllciBGcmVxIDIJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxLCAvKiBTdWJjYXJyaWVyIEZyZXEgMwkqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIFN1YmNhcnJpZXIgcGhhc2UJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAvKiBUaW1pbmcgUmVnaXN0ZXIgMAkqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJMHgwMCwgLyogRXh0ZW5kZWQgQ2FwdGlvbmluZyAwCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogRXh0ZW5kZWQgQ2FwdGlvbmluZyAxCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogQ2xvc2VkIENhcHRpb25pbmcgMAkqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJMHgwMCwgLyogQ2xvc2VkIENhcHRpb25pbmcgMQkqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIFRpbWluZyBSZWdpc3RlciAxCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOCwgLyogTW9kZSBSZWdpc3RlciAyCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAwCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMQkqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDIJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAzCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAgLyogTW9kZSBSZWdpc3RlciAzCSovCisJCQkJCTB4MTYsIC8qIFN1YmNhcnJpZXIgRnJlcSAwCSovCisJCQkJCTB4N2MsIC8qIFN1YmNhcnJpZXIgRnJlcSAxCSovCisJCQkJCTB4ZjAsIC8qIFN1YmNhcnJpZXIgRnJlcSAyCSovCisJCQkJCTB4MjEsIC8qIFN1YmNhcnJpZXIgRnJlcSAzCSovCisJCQkJCTB4MDAsIC8qIFN1YmNhcnJpZXIgcGhhc2UJKi8KKwkJCQkJMHgwMiwgLyogVGltaW5nIFJlZ2lzdGVyIDAJKi8KKwkJCQkJMHgwMCwgLyogRXh0ZW5kZWQgQ2FwdGlvbmluZyAwCSovCisJCQkJCTB4MDAsIC8qIEV4dGVuZGVkIENhcHRpb25pbmcgMQkqLworCQkJCQkweDAwLCAvKiBDbG9zZWQgQ2FwdGlvbmluZyAwCSovCisJCQkJCTB4MDAsIC8qIENsb3NlZCBDYXB0aW9uaW5nIDEJKi8KKwkJCQkJMHgwMCwgLyogVGltaW5nIFJlZ2lzdGVyIDEJKi8KKwkJCQkJMHgwOCwgLyogTW9kZSBSZWdpc3RlciAyCSovCisJCQkJCTB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDAJKi8KKwkJCQkJMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMQkqLworCQkJCQkweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAyCSovCisJCQkJCTB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDMJKi8KKwkJCQkJMHgwMCAgLyogTW9kZSBSZWdpc3RlciAzCSovCiAKICNlbmRpZgkvKiBWSURFT19NT0RFX05UU0MgKi8KIAogI2lmZGVmIFZJREVPX01PREVfUEFMCi0gICAgCQkJCSAgICAgICAgMHgwNSwgLyogTW9kZSBSZWdpc3RlciAwCSovCisJCQkJCTB4MDUsIC8qIE1vZGUgUmVnaXN0ZXIgMAkqLwogI2lmZGVmIFZJREVPX0RFQlVHX0NPTE9SQkFSUwogCQkJCQkweDgyLAogI2Vsc2UKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIC8qIE1vZGUgUmVnaXN0ZXIgMSAoMikJKi8KKwkJCQkJMHgwMiwgLyogTW9kZSBSZWdpc3RlciAxICgyKQkqLwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjYiwgLyogU3ViY2FycmllciBGcmVxIDAJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhhLCAvKiBTdWJjYXJyaWVyIEZyZXEgMQkqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksIC8qIFN1YmNhcnJpZXIgRnJlcSAyCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYSwgLyogU3ViY2FycmllciBGcmVxIDMJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBTdWJjYXJyaWVyIHBoYXNlCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYSwgLyogVGltaW5nIFJlZ2lzdGVyIDAgKGEpCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogRXh0ZW5kZWQgQ2FwdGlvbmluZyAwCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogRXh0ZW5kZWQgQ2FwdGlvbmluZyAxCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogQ2xvc2VkIENhcHRpb25pbmcgMAkqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIENsb3NlZCBDYXB0aW9uaW5nIDEJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBUaW1pbmcgUmVnaXN0ZXIgMQkqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgsIC8qIE1vZGUgUmVnaXN0ZXIgMiAoOCkJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAwCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMQkqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDIJKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAzCSovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAgLyogTW9kZSBSZWdpc3RlciAzCSovCisJCQkJCTB4Y2IsIC8qIFN1YmNhcnJpZXIgRnJlcSAwCSovCisJCQkJCTB4OGEsIC8qIFN1YmNhcnJpZXIgRnJlcSAxCSovCisJCQkJCTB4MDksIC8qIFN1YmNhcnJpZXIgRnJlcSAyCSovCisJCQkJCTB4MmEsIC8qIFN1YmNhcnJpZXIgRnJlcSAzCSovCisJCQkJCTB4MDAsIC8qIFN1YmNhcnJpZXIgcGhhc2UJKi8KKwkJCQkJMHgwYSwgLyogVGltaW5nIFJlZ2lzdGVyIDAgKGEpCSovCisJCQkJCTB4MDAsIC8qIEV4dGVuZGVkIENhcHRpb25pbmcgMAkqLworCQkJCQkweDAwLCAvKiBFeHRlbmRlZCBDYXB0aW9uaW5nIDEJKi8KKwkJCQkJMHgwMCwgLyogQ2xvc2VkIENhcHRpb25pbmcgMAkqLworCQkJCQkweDAwLCAvKiBDbG9zZWQgQ2FwdGlvbmluZyAxCSovCisJCQkJCTB4MDAsIC8qIFRpbWluZyBSZWdpc3RlciAxCSovCisJCQkJCTB4MDgsIC8qIE1vZGUgUmVnaXN0ZXIgMiAoOCkJKi8KKwkJCQkJMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMAkqLworCQkJCQkweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAxCSovCisJCQkJCTB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDIJKi8KKwkJCQkJMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMwkqLworCQkJCQkweDAwICAvKiBNb2RlIFJlZ2lzdGVyIDMJKi8KICNlbmRpZgkvKiBWSURFT19NT0RFX1BBTCAqLwogfSA7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW9fYWQ3MTc3LmggYi9pbmNsdWRlL3ZpZGVvX2FkNzE3Ny5oCmluZGV4IDY4YTZiOGQuLjNmMzVmMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW9fYWQ3MTc3LmgKKysrIGIvaW5jbHVkZS92aWRlb19hZDcxNzcuaApAQCAtNTIsOTUgKzUyLDk1IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhcgogICAgIHZpZGVvX2VuY29kZXJfZGF0YVtdID0gewogI2lmZGVmIFZJREVPX01PREVfTlRTQwotICAgIAkJCQkgICAgICAgIDB4MDQsIC8qIE1vZGUgUmVnaXN0ZXIgMCAqLworCQkJCQkweDA0LCAvKiBNb2RlIFJlZ2lzdGVyIDAgKi8KICNpZmRlZiBWSURFT19ERUJVR19DT0xPUkJBUlMKIAkJCQkJMHhjMiwKICNlbHNlCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQyLCAvKiBNb2RlIFJlZ2lzdGVyIDEgKi8KKwkJCQkJMHg0MiwgLyogTW9kZSBSZWdpc3RlciAxICovCiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2LCAvKiBTdWJjYXJyaWVyIEZyZXEgMCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2MsIC8qIFN1YmNhcnJpZXIgRnJlcSAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkweGYwLCAvKiBTdWJjYXJyaWVyIEZyZXEgMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEsIC8qIFN1YmNhcnJpZXIgRnJlcSAzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogU3ViY2FycmllciBwaGFzZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIC8qIFRpbWluZyBSZWdpc3RlciAwICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkweDAwLCAvKiBFeHRlbmRlZCBDYXB0aW9uaW5nIDAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBFeHRlbmRlZCBDYXB0aW9uaW5nIDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBDbG9zZWQgQ2FwdGlvbmluZyAwICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkweDAwLCAvKiBDbG9zZWQgQ2FwdGlvbmluZyAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogVGltaW5nIFJlZ2lzdGVyIDEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4LCAvKiBNb2RlIFJlZ2lzdGVyIDIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4IC8qIE1vZGUgUmVnaXN0ZXIgMyAqLworCQkJCQkweDE2LCAvKiBTdWJjYXJyaWVyIEZyZXEgMCAqLworCQkJCQkweDdjLCAvKiBTdWJjYXJyaWVyIEZyZXEgMSAqLworCQkJCQkweGYwLCAvKiBTdWJjYXJyaWVyIEZyZXEgMiAqLworCQkJCQkweDIxLCAvKiBTdWJjYXJyaWVyIEZyZXEgMyAqLworCQkJCQkweDAwLCAvKiBTdWJjYXJyaWVyIHBoYXNlICovCisJCQkJCTB4MDIsIC8qIFRpbWluZyBSZWdpc3RlciAwICovCisJCQkJCTB4MDAsIC8qIEV4dGVuZGVkIENhcHRpb25pbmcgMCAqLworCQkJCQkweDAwLCAvKiBFeHRlbmRlZCBDYXB0aW9uaW5nIDEgKi8KKwkJCQkJMHgwMCwgLyogQ2xvc2VkIENhcHRpb25pbmcgMCAqLworCQkJCQkweDAwLCAvKiBDbG9zZWQgQ2FwdGlvbmluZyAxICovCisJCQkJCTB4MDAsIC8qIFRpbWluZyBSZWdpc3RlciAxICovCisJCQkJCTB4MDgsIC8qIE1vZGUgUmVnaXN0ZXIgMiAqLworCQkJCQkweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAwICovCisJCQkJCTB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDEgKi8KKwkJCQkJMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMiAqLworCQkJCQkweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAzICovCisJCQkJCTB4MDggLyogTW9kZSBSZWdpc3RlciAzICovCiAKICNlbmRpZgogI2lmZGVmIFZJREVPX01PREVfUEFMCiAjaWZkZWYgVklERU9fTU9ERV9SR0JfT1VUCiAKLSAgICAJCQkJICAgICAgICAweDY5LCAvKiBNb2RlIFJlZ2lzdGVyIDAgKi8KKwkJCQkJMHg2OSwgLyogTW9kZSBSZWdpc3RlciAwICovCiAjaWZkZWYgVklERU9fREVCVUdfQ09MT1JCQVJTCiAJCQkJCTB4YzAsIC8qIE1vZGUgUmVnaXN0ZXIgMSAoYzApICovCiAjZWxzZQogCQkJCQkweDQwLCAvKiBNb2RlIFJlZ2lzdGVyIDEgKGMwKSAqLwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjYiwgLyogU3ViY2FycmllciBGcmVxIDAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhhLCAvKiBTdWJjYXJyaWVyIEZyZXEgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJMHgwOSwgLyogU3ViY2FycmllciBGcmVxIDIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJhLCAvKiBTdWJjYXJyaWVyIEZyZXEgMyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIFN1YmNhcnJpZXIgcGhhc2UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyLCAvKiBUaW1pbmcgUmVnaXN0ZXIgMCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJMHgwMCwgLyogRXh0ZW5kZWQgQ2FwdGlvbmluZyAwICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogRXh0ZW5kZWQgQ2FwdGlvbmluZyAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogQ2xvc2VkIENhcHRpb25pbmcgMCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJMHgwMCwgLyogQ2xvc2VkIENhcHRpb25pbmcgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIFRpbWluZyBSZWdpc3RlciAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOCwgLyogTW9kZSBSZWdpc3RlciAyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAwICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOCAgLyogTW9kZSBSZWdpc3RlciAzICovCisJCQkJCTB4Y2IsIC8qIFN1YmNhcnJpZXIgRnJlcSAwICovCisJCQkJCTB4OGEsIC8qIFN1YmNhcnJpZXIgRnJlcSAxICovCisJCQkJCTB4MDksIC8qIFN1YmNhcnJpZXIgRnJlcSAyICovCisJCQkJCTB4MmEsIC8qIFN1YmNhcnJpZXIgRnJlcSAzICovCisJCQkJCTB4MDAsIC8qIFN1YmNhcnJpZXIgcGhhc2UgKi8KKwkJCQkJMHgwMiwgLyogVGltaW5nIFJlZ2lzdGVyIDAgKi8KKwkJCQkJMHgwMCwgLyogRXh0ZW5kZWQgQ2FwdGlvbmluZyAwICovCisJCQkJCTB4MDAsIC8qIEV4dGVuZGVkIENhcHRpb25pbmcgMSAqLworCQkJCQkweDAwLCAvKiBDbG9zZWQgQ2FwdGlvbmluZyAwICovCisJCQkJCTB4MDAsIC8qIENsb3NlZCBDYXB0aW9uaW5nIDEgKi8KKwkJCQkJMHgwMCwgLyogVGltaW5nIFJlZ2lzdGVyIDEgKi8KKwkJCQkJMHgyOCwgLyogTW9kZSBSZWdpc3RlciAyICovCisJCQkJCTB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDAgKi8KKwkJCQkJMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMSAqLworCQkJCQkweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAyICovCisJCQkJCTB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDMgKi8KKwkJCQkJMHgwOCAgLyogTW9kZSBSZWdpc3RlciAzICovCiAKICNlbHNlCiAKLSAgICAJCQkJICAgICAgICAweDA5LCAvKiBNb2RlIFJlZ2lzdGVyIDAgKHdhcyAwMSkgKi8KKwkJCQkJMHgwOSwgLyogTW9kZSBSZWdpc3RlciAwICh3YXMgMDEpICovCiAjaWZkZWYgVklERU9fREVCVUdfQ09MT1JCQVJTCiAJCQkJCTB4ZDgsCS8qICovCiAjZWxzZQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1OSwgLyogTW9kZSBSZWdpc3RlciAxICh3YXMgNTgpICovCisJCQkJCTB4NTksIC8qIE1vZGUgUmVnaXN0ZXIgMSAod2FzIDU4KSAqLwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjYiwgLyogU3ViY2FycmllciBGcmVxIDAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhhLCAvKiBTdWJjYXJyaWVyIEZyZXEgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDksIC8qIFN1YmNhcnJpZXIgRnJlcSAyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYSwgLyogU3ViY2FycmllciBGcmVxIDMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBTdWJjYXJyaWVyIHBoYXNlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiwgLyogVGltaW5nIFJlZ2lzdGVyIDAgKHdhcyBhKSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIEV4dGVuZGVkIENhcHRpb25pbmcgMCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIEV4dGVuZGVkIENhcHRpb25pbmcgMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIENsb3NlZCBDYXB0aW9uaW5nIDAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBDbG9zZWQgQ2FwdGlvbmluZyAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogVGltaW5nIFJlZ2lzdGVyIDEgKi8KKwkJCQkJMHhjYiwgLyogU3ViY2FycmllciBGcmVxIDAgKi8KKwkJCQkJMHg4YSwgLyogU3ViY2FycmllciBGcmVxIDEgKi8KKwkJCQkJMHgwOSwgLyogU3ViY2FycmllciBGcmVxIDIgKi8KKwkJCQkJMHgyYSwgLyogU3ViY2FycmllciBGcmVxIDMgKi8KKwkJCQkJMHgwMCwgLyogU3ViY2FycmllciBwaGFzZSAqLworCQkJCQkweDAyLCAvKiBUaW1pbmcgUmVnaXN0ZXIgMCAod2FzIGEpICovCisJCQkJCTB4MDAsIC8qIEV4dGVuZGVkIENhcHRpb25pbmcgMCAqLworCQkJCQkweDAwLCAvKiBFeHRlbmRlZCBDYXB0aW9uaW5nIDEgKi8KKwkJCQkJMHgwMCwgLyogQ2xvc2VkIENhcHRpb25pbmcgMCAqLworCQkJCQkweDAwLCAvKiBDbG9zZWQgQ2FwdGlvbmluZyAxICovCisJCQkJCTB4MDAsIC8qIFRpbWluZyBSZWdpc3RlciAxICovCiAjaWZkZWYgVklERU9fREVCVUdfTE9XUE9XRVIKICNpZmRlZiBWSURFT19ERUJVR19ESVNBQkxFX0NPTE9SUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTgsIC8qIE1vZGUgUmVnaXN0ZXIgMiAqLworCQkJCQkweDk4LCAvKiBNb2RlIFJlZ2lzdGVyIDIgKi8KICNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OCwgLyogTW9kZSBSZWdpc3RlciAyICovCisJCQkJCTB4ODgsIC8qIE1vZGUgUmVnaXN0ZXIgMiAqLwogI2VuZGlmCiAjZWxzZQogI2lmZGVmIFZJREVPX0RFQlVHX0RJU0FCTEVfQ09MT1JTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOCwgLyogTW9kZSBSZWdpc3RlciAyICovCisJCQkJCTB4MTgsIC8qIE1vZGUgUmVnaXN0ZXIgMiAqLwogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4LCAvKiBNb2RlIFJlZ2lzdGVyIDIgKi8KKwkJCQkJMHgwOCwgLyogTW9kZSBSZWdpc3RlciAyICovCiAjZW5kaWYKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4ICAvKiBNb2RlIFJlZ2lzdGVyIDMgKi8KKwkJCQkJMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMCAqLworCQkJCQkweDAwLCAvKiBQZWRlc3RhbCBSZWdpc3RlciAxICovCisJCQkJCTB4MDAsIC8qIFBlZGVzdGFsIFJlZ2lzdGVyIDIgKi8KKwkJCQkJMHgwMCwgLyogUGVkZXN0YWwgUmVnaXN0ZXIgMyAqLworCQkJCQkweDA4ICAvKiBNb2RlIFJlZ2lzdGVyIDMgKi8KICNlbmRpZgogI2VuZGlmCiAgICAgfSA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvX2ZiLmggYi9pbmNsdWRlL3ZpZGVvX2ZiLmgKaW5kZXggYTllNDI3NS4uOTgyNWYwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlb19mYi5oCisrKyBiL2luY2x1ZGUvdmlkZW9fZmIuaApAQCAtMSw0ICsxLDQgQEAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisJCQkJCQkJCQkJICAgIC8qCiAgKiAoQykgQ29weXJpZ2h0IDE5OTctMjAwMiBFTFRFQyBFbGVrdHJvbmlrIEFHCiAgKiBGcmFuayBHb3R0c2NobGluZyA8ZmdvdHRzY2hsaW5nQGVsdGVjLmRlPgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvd2F0Y2hkb2cuaCBiL2luY2x1ZGUvd2F0Y2hkb2cuaAppbmRleCBkYzI2ZTZhLi5iOWFlOTE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3dhdGNoZG9nLmgKKysrIGIvaW5jbHVkZS93YXRjaGRvZy5oCkBAIC05OCw0ICs5OCwzIEBACiAjZW5kaWYgLyogQ09ORklHX01QQzgyNjAgJiYgIV9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX1dBVENIRE9HX0hfICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvemxpYi5oIGIvaW5jbHVkZS96bGliLmgKaW5kZXggNjk1OGFiOC4uZTQ0MTQ5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS96bGliLmgKKysrIGIvaW5jbHVkZS96bGliLmgKQEAgLTkzLDcgKzkzLDcgQEAKICNlbmRpZgogCiAvKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGluIGJ5dGVzKToKLSAgICAgICAgICAgIDEgPDwgKHdpbmRvd0JpdHMrMikgICArICAxIDw8IChtZW1MZXZlbCs5KQorCSAgICAxIDw8ICh3aW5kb3dCaXRzKzIpICAgKyAgMSA8PCAobWVtTGV2ZWwrOSkKICB0aGF0IGlzOiAxMjhLIGZvciB3aW5kb3dCaXRzPTE1ICArICAxMjhLIGZvciBtZW1MZXZlbCA9IDggIChkZWZhdWx0IHZhbHVlcykKICBwbHVzIGEgZmV3IGtpbG9ieXRlcyBmb3Igc21hbGwgb2JqZWN0cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHJlZHVjZQogIHRoZSBkZWZhdWx0IG1lbW9yeSByZXF1aXJlbWVudHMgZnJvbSAyNTZLIHRvIDEyOEssIGNvbXBpbGUgd2l0aApAQCAtMTA1LDcgKzEwNSw3IEBACiAgZm9yIHNtYWxsIG9iamVjdHMuCiAqLwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGRlY2xhcmF0aW9ucyAqLworCQkJLyogVHlwZSBkZWNsYXJhdGlvbnMgKi8KIAogI2lmbmRlZiBPRiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCiAjICBpZmRlZiBTVERDCkBAIC0yMTQsNyArMjE0LDcgQEAKICAgIGEgc2luZ2xlIHN0ZXApLgogKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc3RhbnRzICovCisJCQkvKiBjb25zdGFudHMgKi8KIAogI2RlZmluZSBaX05PX0ZMVVNIICAgICAgMAogI2RlZmluZSBaX1BBUlRJQUxfRkxVU0ggMQpAQCAtMjU1LDcgKzI1NSw3IEBACiAgICBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSB6bGliLmggaGVhZGVyIGZpbGUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uCiAgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgLyogYmFzaWMgZnVuY3Rpb25zICovCisJCQkvKiBiYXNpYyBmdW5jdGlvbnMgKi8KIAogZXh0ZXJuIGludCBpbmZsYXRlSW5pdCBPRigoel9zdHJlYW0gKnN0cm0pKTsKIC8qCkBAIC0zMzMsMTAgKzMzMywxMCBAQAogICAgc3RhdGljIHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUgZGVhbGxvY2F0ZWQpLgogKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgLyogYWR2YW5jZWQgZnVuY3Rpb25zICovCisJCQkvKiBhZHZhbmNlZCBmdW5jdGlvbnMgKi8KIAogZXh0ZXJuIGludCBpbmZsYXRlSW5pdDIgT0YoKHpfc3RyZWFtICpzdHJtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd2luZG93Qml0cykpOworCQkJICAgIGludCAgd2luZG93Qml0cykpOwogLyoKICAgICAgVGhpcyBpcyBhbm90aGVyIHZlcnNpb24gb2YgaW5mbGF0ZUluaXQgd2l0aCBtb3JlIGNvbXByZXNzaW9uIG9wdGlvbnMuIFRoZQogICAgZmllbGRzIG5leHRfb3V0LCB6YWxsb2MgYW5kIHpmcmVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5IHRoZSBjYWxsZXIuCkBAIC00MDIsNyArNDAyLDcgQEAKICAgIGNvbnRhaW5pbmcgdGhlIGRhdGEgYXQgbmV4dF9pbiAoZXhjZXB0IHRoYXQgdGhlIGRhdGEgaXMgbm90IG91dHB1dCkuCiAqLwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVja3N1bSBmdW5jdGlvbnMgKi8KKwkJCS8qIGNoZWNrc3VtIGZ1bmN0aW9ucyAqLwogCiAvKgogICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWxhdGVkIHRvIGNvbXByZXNzaW9uIGJ1dCBpcyBleHBvcnRlZApkaWZmIC0tZ2l0IGEvbGliX2FybS9hcm1saW51eC5jIGIvbGliX2FybS9hcm1saW51eC5jCmluZGV4IDAzMDU4MDMuLjhlMDZiZDYgMTAwNjQ0Ci0tLSBhL2xpYl9hcm0vYXJtbGludXguYworKysgYi9saWJfYXJtL2FybWxpbnV4LmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgogI2luY2x1ZGUgPGltYWdlLmg+CiAjaW5jbHVkZSA8emxpYi5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KQEAgLTM1LDYgKzM0LDkgQEAKICNkZWZpbmUgdGFnX3NpemUodHlwZSkgICgoc2l6ZW9mKHN0cnVjdCB0YWdfaGVhZGVyKSArIHNpemVvZihzdHJ1Y3QgdHlwZSkpID4+IDIpCiAjZGVmaW5lIHRhZ19uZXh0KHQpICAgICAoKHN0cnVjdCB0YWcgKikoKHUzMiAqKSh0KSArICh0KS0+aGRyLnNpemUpKQogCisvKmNtZF9ib290LmMqLworZXh0ZXJuIGludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOworCiAjaWYgZGVmaW5lZCAoQ09ORklHX1NFVFVQX01FTU9SWV9UQUdTKSB8fCBcCiAgICAgZGVmaW5lZCAoQ09ORklHX0NNRExJTkVfVEFHKSB8fCBcCiAgICAgZGVmaW5lZCAoQ09ORklHX0lOSVRSRF9UQUcpIHx8IFwKQEAgLTEwMSw3ICsxMDMsNyBAQAogCWlmIChhZGRyX2RhdGFmbGFzaChhZGRyKSl7CiAJCXJlYWRfZGF0YWZsYXNoKGFkZHIsIHNpemVvZihpbWFnZV9oZWFkZXJfdCksIChjaGFyICopJmhlYWRlcik7CiAJfSBlbHNlCi0jZW5kaWYJCisjZW5kaWYKIAltZW1jcHkgKCZoZWFkZXIsIChjaGFyICopYWRkciwgc2l6ZW9mKGltYWdlX2hlYWRlcl90KSk7CiAKIAlpZiAobnRvaGwoaGRyLT5paF9tYWdpYykgIT0gSUhfTUFHSUMpIHsKQEAgLTE0Myw3ICsxNDUsNyBAQAogCSAgICBjc3VtID0gY3JjMzIgKDAsIChjaGFyICopZGF0YSwgbGVuKTsKIAkgICAgaWYgKGNzdW0gIT0gbnRvaGwoaGRyLT5paF9kY3JjKSkgewogCQlwcmludGYgKCJCYWQgRGF0YSBDUkNcbiIpOwotCSAgICAgICAgU0hPV19CT09UX1BST0dSRVNTICgtMTIpOworCQlTSE9XX0JPT1RfUFJPR1JFU1MgKC0xMik7CiAJCWRvX3Jlc2V0IChjbWR0cCwgZmxhZywgYXJnYywgYXJndik7CiAJICAgIH0KIAkgICAgcHJpbnRmICgiT0tcbiIpOwpAQCAtMTg1LDcgKzE4Nyw3IEBACiAJLyoKIAkgKiBubyBpbml0cmQgaW1hZ2UKIAkgKi8KLSAgICAgICAgU0hPV19CT09UX1BST0dSRVNTICgxNCk7CisJU0hPV19CT09UX1BST0dSRVNTICgxNCk7CiAKIAlkYXRhID0gMDsKICAgICB9CmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9sZGl2LmMgYi9saWJfZ2VuZXJpYy9sZGl2LmMKaW5kZXggNDM3YjE2MC4uNWQyMzFhMiAxMDA2NDQKLS0tIGEvbGliX2dlbmVyaWMvbGRpdi5jCisrKyBiL2xpYl9nZW5lcmljL2xkaXYuYwpAQCAtMTcsOCArMTcsOCBAQAogICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgICAgIGxvbmcgICAgcXVvdDsKLSAgICAgICAgbG9uZyAgICByZW07CisJbG9uZyAgICBxdW90OworCWxvbmcgICAgcmVtOwogfSBsZGl2X3Q7CiAvKiBSZXR1cm4gdGhlIGBsZGl2X3QnIHJlcHJlc2VudGF0aW9uIG9mIE5VTUVSIG92ZXIgREVOT00uICAqLwogbGRpdl90CmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9zdHJpbmcuYyBiL2xpYl9nZW5lcmljL3N0cmluZy5jCmluZGV4IGY0ZDI0NTcuLmQwNmE2NDUgMTAwNjQ0Ci0tLSBhL2xpYl9nZW5lcmljL3N0cmluZy5jCisrKyBiL2xpYl9nZW5lcmljL3N0cmluZy5jCkBAIC0yMDcsOCArMjA3LDggQEAKIHsKICAgICAgICBjb25zdCBjaGFyICpwID0gcyArIHN0cmxlbihzKTsKICAgICAgICBkbyB7Ci0gICAgICAgICAgIGlmICgqcCA9PSAoY2hhciljKQotICAgICAgICAgICAgICAgcmV0dXJuIChjaGFyICopcDsKKwkgICBpZiAoKnAgPT0gKGNoYXIpYykKKwkgICAgICAgcmV0dXJuIChjaGFyICopcDsKICAgICAgICB9IHdoaWxlICgtLXAgPj0gcyk7CiAgICAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC00OTgsNyArNDk4LDcgQEAKIAkJcCsrOwogCQlzaXplLS07CiAJfQotICAJcmV0dXJuICh2b2lkICopIHA7CisJcmV0dXJuICh2b2lkICopIHA7CiB9CiAjZW5kaWYKIApAQCAtNTQwLDcgKzU0MCw3IEBACiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHM7CiAJd2hpbGUgKG4tLSAhPSAwKSB7Ci0gICAgICAgIAlpZiAoKHVuc2lnbmVkIGNoYXIpYyA9PSAqcCsrKSB7CisJCWlmICgodW5zaWduZWQgY2hhciljID09ICpwKyspIHsKIAkJCXJldHVybiAodm9pZCAqKShwLTEpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbGliX2dlbmVyaWMvdnNwcmludGYuYyBiL2xpYl9nZW5lcmljL3ZzcHJpbnRmLmMKaW5kZXggYjllNmUxYi4uNmIwNDQ1MyAxMDA2NDQKLS0tIGEvbGliX2dlbmVyaWMvdnNwcmludGYuYworKysgYi9saWJfZ2VuZXJpYy92c3ByaW50Zi5jCkBAIC0xNyw3ICsxNyw4IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaWYgIWRlZmluZWQgKENPTkZJR19QQU5JQ19IQU5HKQogI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxjbWRfYm9vdC5oPgkJLyogZm9yIGRvX3Jlc2V0KCkgcHJvdG90eXBlICovCisvKmNtZF9ib290LmMqLworZXh0ZXJuIGludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwogI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgc2ltcGxlX3N0cnRvdWwoY29uc3QgY2hhciAqY3AsY2hhciAqKmVuZHAsdW5zaWduZWQgaW50IGJhc2UpCmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy96bGliLmMgYi9saWJfZ2VuZXJpYy96bGliLmMKaW5kZXggM2I3YWIyNS4uNjY4YWM4ZiAxMDA2NDQKLS0tIGEvbGliX2dlbmVyaWMvemxpYi5jCisrKyBiL2xpYl9nZW5lcmljL3psaWIuYwpAQCAtNTEsNyArNTEsNyBAQAogI2RlZmluZSBOVUxMCSgodm9pZCAqKSAwKQogI2VuZGlmCiAKLSAgICAgICAgLyogY29tbW9uIGNvbnN0YW50cyAqLworCS8qIGNvbW1vbiBjb25zdGFudHMgKi8KIAogI2RlZmluZSBERUZMQVRFRCAgIDgKIApAQCAtNzYsNyArNzYsNyBAQAogI2RlZmluZSBNQVhfTUFUQ0ggIDI1OAogLyogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gbWF0Y2ggbGVuZ3RocyAqLwogCi0gICAgICAgICAvKiBmdW5jdGlvbnMgKi8KKwkgLyogZnVuY3Rpb25zICovCiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNkZWZpbmUgem1lbWNweSBtZW1jcHkKQEAgLTExMCw3ICsxMTAsNyBAQAogLyogdm9pZCAgIHpjZnJlZSAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpKTsgKi8KIAogI2RlZmluZSBaQUxMT0Moc3RybSwgaXRlbXMsIHNpemUpIFwKLSAgICAgICAgICAgKCooKHN0cm0pLT56YWxsb2MpKSgoc3RybSktPm9wYXF1ZSwgKGl0ZW1zKSwgKHNpemUpKQorCSAgICgqKChzdHJtKS0+emFsbG9jKSkoKHN0cm0pLT5vcGFxdWUsIChpdGVtcyksIChzaXplKSkKICNkZWZpbmUgWkZSRUUoc3RybSwgYWRkciwgc2l6ZSkJXAogCSAgICgqKChzdHJtKS0+emZyZWUpKSgoc3RybSktPm9wYXF1ZSwgKHZvaWRwZikoYWRkciksIChzaXplKSkKICNkZWZpbmUgVFJZX0ZSRUUocywgcCwgbikge2lmIChwKSBaRlJFRShzLCBwLCBuKTt9CkBAIC00MDIsMzQgKzQwMiwzNCBAQAogICAgICAgTkVFREJZVEUKICAgICAgIGlmICgoKHotPnN0YXRlLT5zdWIubWV0aG9kID0gTkVYVEJZVEUpICYgMHhmKSAhPSBERUZMQVRFRCkKICAgICAgIHsKLSAgICAgICAgei0+c3RhdGUtPm1vZGUgPSBCQUQ7Ci0gICAgICAgIHotPm1zZyA9ICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCI7Ci0gICAgICAgIHotPnN0YXRlLT5zdWIubWFya2VyID0gNTsgICAgICAgLyogY2FuJ3QgdHJ5IGluZmxhdGVTeW5jICovCi0gICAgICAgIGJyZWFrOworCXotPnN0YXRlLT5tb2RlID0gQkFEOworCXotPm1zZyA9ICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCI7CisJei0+c3RhdGUtPnN1Yi5tYXJrZXIgPSA1OyAgICAgICAvKiBjYW4ndCB0cnkgaW5mbGF0ZVN5bmMgKi8KKwlicmVhazsKICAgICAgIH0KICAgICAgIGlmICgoei0+c3RhdGUtPnN1Yi5tZXRob2QgPj4gNCkgKyA4ID4gei0+c3RhdGUtPndiaXRzKQogICAgICAgewotICAgICAgICB6LT5zdGF0ZS0+bW9kZSA9IEJBRDsKLSAgICAgICAgei0+bXNnID0gImludmFsaWQgd2luZG93IHNpemUiOwotICAgICAgICB6LT5zdGF0ZS0+c3ViLm1hcmtlciA9IDU7ICAgICAgIC8qIGNhbid0IHRyeSBpbmZsYXRlU3luYyAqLwotICAgICAgICBicmVhazsKKwl6LT5zdGF0ZS0+bW9kZSA9IEJBRDsKKwl6LT5tc2cgPSAiaW52YWxpZCB3aW5kb3cgc2l6ZSI7CisJei0+c3RhdGUtPnN1Yi5tYXJrZXIgPSA1OyAgICAgICAvKiBjYW4ndCB0cnkgaW5mbGF0ZVN5bmMgKi8KKwlicmVhazsKICAgICAgIH0KICAgICAgIHotPnN0YXRlLT5tb2RlID0gRkxBRzsKICAgICBjYXNlIEZMQUc6CiAgICAgICBORUVEQllURQogICAgICAgaWYgKChiID0gTkVYVEJZVEUpICYgMHgyMCkKICAgICAgIHsKLSAgICAgICAgei0+c3RhdGUtPm1vZGUgPSBCQUQ7Ci0gICAgICAgIHotPm1zZyA9ICJpbnZhbGlkIHJlc2VydmVkIGJpdCI7Ci0gICAgICAgIHotPnN0YXRlLT5zdWIubWFya2VyID0gNTsgICAgICAgLyogY2FuJ3QgdHJ5IGluZmxhdGVTeW5jICovCi0gICAgICAgIGJyZWFrOworCXotPnN0YXRlLT5tb2RlID0gQkFEOworCXotPm1zZyA9ICJpbnZhbGlkIHJlc2VydmVkIGJpdCI7CisJei0+c3RhdGUtPnN1Yi5tYXJrZXIgPSA1OyAgICAgICAvKiBjYW4ndCB0cnkgaW5mbGF0ZVN5bmMgKi8KKwlicmVhazsKICAgICAgIH0KICAgICAgIGlmICgoKHotPnN0YXRlLT5zdWIubWV0aG9kIDw8IDgpICsgYikgJSAzMSkKICAgICAgIHsKLSAgICAgICAgei0+c3RhdGUtPm1vZGUgPSBCQUQ7Ci0gICAgICAgIHotPm1zZyA9ICJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIjsKLSAgICAgICAgei0+c3RhdGUtPnN1Yi5tYXJrZXIgPSA1OyAgICAgICAvKiBjYW4ndCB0cnkgaW5mbGF0ZVN5bmMgKi8KLSAgICAgICAgYnJlYWs7CisJei0+c3RhdGUtPm1vZGUgPSBCQUQ7CisJei0+bXNnID0gImluY29ycmVjdCBoZWFkZXIgY2hlY2siOworCXotPnN0YXRlLT5zdWIubWFya2VyID0gNTsgICAgICAgLyogY2FuJ3QgdHJ5IGluZmxhdGVTeW5jICovCisJYnJlYWs7CiAgICAgICB9CiAgICAgICBUcmFjZSgoc3RkZXJyLCAiaW5mbGF0ZTogemxpYiBoZWFkZXIgb2tcbiIpKTsKICAgICAgIHotPnN0YXRlLT5tb2RlID0gQkxPQ0tTOwpAQCAtNDM5LDE4ICs0MzksMTggQEAKIAkgIHIgPSBpbmZsYXRlX3BhY2tldF9mbHVzaCh6LT5zdGF0ZS0+YmxvY2tzKTsKICAgICAgIGlmIChyID09IFpfREFUQV9FUlJPUikKICAgICAgIHsKLSAgICAgICAgei0+c3RhdGUtPm1vZGUgPSBCQUQ7Ci0gICAgICAgIHotPnN0YXRlLT5zdWIubWFya2VyID0gMDsgICAgICAgLyogY2FuIHRyeSBpbmZsYXRlU3luYyAqLwotICAgICAgICBicmVhazsKKwl6LT5zdGF0ZS0+bW9kZSA9IEJBRDsKKwl6LT5zdGF0ZS0+c3ViLm1hcmtlciA9IDA7ICAgICAgIC8qIGNhbiB0cnkgaW5mbGF0ZVN5bmMgKi8KKwlicmVhazsKICAgICAgIH0KICAgICAgIGlmIChyICE9IFpfU1RSRUFNX0VORCkKLSAgICAgICAgcmV0dXJuIHI7CisJcmV0dXJuIHI7CiAgICAgICByID0gWl9PSzsKICAgICAgIGluZmxhdGVfYmxvY2tzX3Jlc2V0KHotPnN0YXRlLT5ibG9ja3MsIHosICZ6LT5zdGF0ZS0+c3ViLmNoZWNrLndhcyk7CiAgICAgICBpZiAoei0+c3RhdGUtPm5vd3JhcCkKICAgICAgIHsKLSAgICAgICAgei0+c3RhdGUtPm1vZGUgPSBET05FOwotICAgICAgICBicmVhazsKKwl6LT5zdGF0ZS0+bW9kZSA9IERPTkU7CisJYnJlYWs7CiAgICAgICB9CiAgICAgICB6LT5zdGF0ZS0+bW9kZSA9IENIRUNLNDsKICAgICBjYXNlIENIRUNLNDoKQEAgLTQ3MSwxMCArNDcxLDEwIEBACiAKICAgICAgIGlmICh6LT5zdGF0ZS0+c3ViLmNoZWNrLndhcyAhPSB6LT5zdGF0ZS0+c3ViLmNoZWNrLm5lZWQpCiAgICAgICB7Ci0gICAgICAgIHotPnN0YXRlLT5tb2RlID0gQkFEOwotICAgICAgICB6LT5tc2cgPSAiaW5jb3JyZWN0IGRhdGEgY2hlY2siOwotICAgICAgICB6LT5zdGF0ZS0+c3ViLm1hcmtlciA9IDU7ICAgICAgIC8qIGNhbid0IHRyeSBpbmZsYXRlU3luYyAqLwotICAgICAgICBicmVhazsKKwl6LT5zdGF0ZS0+bW9kZSA9IEJBRDsKKwl6LT5tc2cgPSAiaW5jb3JyZWN0IGRhdGEgY2hlY2siOworCXotPnN0YXRlLT5zdWIubWFya2VyID0gNTsgICAgICAgLyogY2FuJ3QgdHJ5IGluZmxhdGVTeW5jICovCisJYnJlYWs7CiAgICAgICB9CiAgICAgICBUcmFjZSgoc3RkZXJyLCAiaW5mbGF0ZTogemxpYiBjaGVjayBva1xuIikpOwogICAgICAgei0+c3RhdGUtPm1vZGUgPSBET05FOwpAQCAtNjA2LDcgKzYwNiw3IEBACiAgICAgc3RydWN0IHsKICAgICAgIGluZmxhdGVfaHVmdCAqdGwsICp0ZDsgICAgLyogdHJlZXMgdG8gZnJlZSAqLwogICAgICAgaW5mbGF0ZV9jb2Rlc19zdGF0ZWYKLSAgICAgICAgICpjb2RlczsKKwkgKmNvZGVzOwogICAgIH0gZGVjb2RlOyAgICAgICAgICAgLyogaWYgQ09ERVMsIGN1cnJlbnQgc3RhdGUgKi8KICAgfSBzdWI7ICAgICAgICAgICAgICAgIC8qIHN1Ym1vZGUgKi8KICAgdUludCBsYXN0OyAgICAgICAgICAgIC8qIHRydWUgaWYgdGhpcyBibG9jayBpcyB0aGUgbGFzdCBibG9jayAqLwpAQCAtNjk1LDcgKzY5NSw3IEBACiAKIC8qIFRhYmxlIGZvciBkZWZsYXRlIGZyb20gUEtaSVAncyBhcHBub3RlLnR4dC4gKi8KIGxvY2FsIHVJbnQgYm9yZGVyW10gPSB7IC8qIE9yZGVyIG9mIHRoZSBiaXQgbGVuZ3RoIGNvZGUgbGVuZ3RocyAqLwotICAgICAgICAxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1fTsKKwkxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1fTsKIAogLyoKICAgIE5vdGVzIGJleW9uZCB0aGUgMS45M2EgYXBwbm90ZS50eHQ6CkBAIC04MTksNTYgKzgxOSw1NiBAQAogICAgICAgcy0+bGFzdCA9IHQgJiAxOwogICAgICAgc3dpdGNoICh0ID4+IDEpCiAgICAgICB7Ci0gICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgLyogc3RvcmVkICovCi0gICAgICAgICAgVHJhY2UoKHN0ZGVyciwgImluZmxhdGU6ICAgICBzdG9yZWQgYmxvY2slc1xuIiwKLSAgICAgICAgICAgICAgICAgcy0+bGFzdCA/ICIgKGxhc3QpIiA6ICIiKSk7Ci0gICAgICAgICAgRFVNUEJJVFMoMykKLSAgICAgICAgICB0ID0gayAmIDc7ICAgICAgICAgICAgICAgICAgICAvKiBnbyB0byBieXRlIGJvdW5kYXJ5ICovCi0gICAgICAgICAgRFVNUEJJVFModCkKLSAgICAgICAgICBzLT5tb2RlID0gTEVOUzsgICAgICAgICAgICAgICAvKiBnZXQgbGVuZ3RoIG9mIHN0b3JlZCBibG9jayAqLwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpeGVkICovCi0gICAgICAgICAgVHJhY2UoKHN0ZGVyciwgImluZmxhdGU6ICAgICBmaXhlZCBjb2RlcyBibG9jayVzXG4iLAotICAgICAgICAgICAgICAgICBzLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB1SW50IGJsLCBiZDsKLSAgICAgICAgICAgIGluZmxhdGVfaHVmdCAqdGwsICp0ZDsKKwljYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0b3JlZCAqLworCSAgVHJhY2UoKHN0ZGVyciwgImluZmxhdGU6ICAgICBzdG9yZWQgYmxvY2slc1xuIiwKKwkJIHMtPmxhc3QgPyAiIChsYXN0KSIgOiAiIikpOworCSAgRFVNUEJJVFMoMykKKwkgIHQgPSBrICYgNzsgICAgICAgICAgICAgICAgICAgIC8qIGdvIHRvIGJ5dGUgYm91bmRhcnkgKi8KKwkgIERVTVBCSVRTKHQpCisJICBzLT5tb2RlID0gTEVOUzsgICAgICAgICAgICAgICAvKiBnZXQgbGVuZ3RoIG9mIHN0b3JlZCBibG9jayAqLworCSAgYnJlYWs7CisJY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXhlZCAqLworCSAgVHJhY2UoKHN0ZGVyciwgImluZmxhdGU6ICAgICBmaXhlZCBjb2RlcyBibG9jayVzXG4iLAorCQkgcy0+bGFzdCA/ICIgKGxhc3QpIiA6ICIiKSk7CisJICB7CisJICAgIHVJbnQgYmwsIGJkOworCSAgICBpbmZsYXRlX2h1ZnQgKnRsLCAqdGQ7CiAKLSAgICAgICAgICAgIGluZmxhdGVfdHJlZXNfZml4ZWQoJmJsLCAmYmQsICZ0bCwgJnRkKTsKLSAgICAgICAgICAgIHMtPnN1Yi5kZWNvZGUuY29kZXMgPSBpbmZsYXRlX2NvZGVzX25ldyhibCwgYmQsIHRsLCB0ZCwgeik7Ci0gICAgICAgICAgICBpZiAocy0+c3ViLmRlY29kZS5jb2RlcyA9PSBaX05VTEwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHIgPSBaX01FTV9FUlJPUjsKLSAgICAgICAgICAgICAgTEVBVkUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN1Yi5kZWNvZGUudGwgPSBaX05VTEw7ICAvKiBkb24ndCB0cnkgdG8gZnJlZSB0aGVzZSAqLwotICAgICAgICAgICAgcy0+c3ViLmRlY29kZS50ZCA9IFpfTlVMTDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgRFVNUEJJVFMoMykKLSAgICAgICAgICBzLT5tb2RlID0gQ09ERVM7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgLyogZHluYW1pYyAqLwotICAgICAgICAgIFRyYWNlKChzdGRlcnIsICJpbmZsYXRlOiAgICAgZHluYW1pYyBjb2RlcyBibG9jayVzXG4iLAotICAgICAgICAgICAgICAgICBzLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKLSAgICAgICAgICBEVU1QQklUUygzKQotICAgICAgICAgIHMtPm1vZGUgPSBUQUJMRTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbGxlZ2FsICovCi0gICAgICAgICAgRFVNUEJJVFMoMykKLSAgICAgICAgICBzLT5tb2RlID0gQkFEQjsKLSAgICAgICAgICB6LT5tc2cgPSAiaW52YWxpZCBibG9jayB0eXBlIjsKLSAgICAgICAgICByID0gWl9EQVRBX0VSUk9SOwotICAgICAgICAgIExFQVZFCisJICAgIGluZmxhdGVfdHJlZXNfZml4ZWQoJmJsLCAmYmQsICZ0bCwgJnRkKTsKKwkgICAgcy0+c3ViLmRlY29kZS5jb2RlcyA9IGluZmxhdGVfY29kZXNfbmV3KGJsLCBiZCwgdGwsIHRkLCB6KTsKKwkgICAgaWYgKHMtPnN1Yi5kZWNvZGUuY29kZXMgPT0gWl9OVUxMKQorCSAgICB7CisJICAgICAgciA9IFpfTUVNX0VSUk9SOworCSAgICAgIExFQVZFCisJICAgIH0KKwkgICAgcy0+c3ViLmRlY29kZS50bCA9IFpfTlVMTDsgIC8qIGRvbid0IHRyeSB0byBmcmVlIHRoZXNlICovCisJICAgIHMtPnN1Yi5kZWNvZGUudGQgPSBaX05VTEw7CisJICB9CisJICBEVU1QQklUUygzKQorCSAgcy0+bW9kZSA9IENPREVTOworCSAgYnJlYWs7CisJY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkeW5hbWljICovCisJICBUcmFjZSgoc3RkZXJyLCAiaW5mbGF0ZTogICAgIGR5bmFtaWMgY29kZXMgYmxvY2slc1xuIiwKKwkJIHMtPmxhc3QgPyAiIChsYXN0KSIgOiAiIikpOworCSAgRFVNUEJJVFMoMykKKwkgIHMtPm1vZGUgPSBUQUJMRTsKKwkgIGJyZWFrOworCWNhc2UgMzogICAgICAgICAgICAgICAgICAgICAgICAgLyogaWxsZWdhbCAqLworCSAgRFVNUEJJVFMoMykKKwkgIHMtPm1vZGUgPSBCQURCOworCSAgei0+bXNnID0gImludmFsaWQgYmxvY2sgdHlwZSI7CisJICByID0gWl9EQVRBX0VSUk9SOworCSAgTEVBVkUKICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGNhc2UgTEVOUzoKICAgICAgIE5FRURCSVRTKDMyKQogICAgICAgaWYgKCgofmIpID4+IDE2KSAhPSAoYiAmIDB4ZmZmZikpCiAgICAgICB7Ci0gICAgICAgIHMtPm1vZGUgPSBCQURCOwotICAgICAgICB6LT5tc2cgPSAiaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyI7Ci0gICAgICAgIHIgPSBaX0RBVEFfRVJST1I7Ci0gICAgICAgIExFQVZFCisJcy0+bW9kZSA9IEJBREI7CisJei0+bXNnID0gImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiOworCXIgPSBaX0RBVEFfRVJST1I7CisJTEVBVkUKICAgICAgIH0KICAgICAgIHMtPnN1Yi5sZWZ0ID0gKHVJbnQpYiAmIDB4ZmZmZjsKICAgICAgIGIgPSBrID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogZHVtcCBiaXRzICovCkBAIC04NzcsNyArODc3LDcgQEAKICAgICAgIGJyZWFrOwogICAgIGNhc2UgU1RPUkVEOgogICAgICAgaWYgKG4gPT0gMCkKLSAgICAgICAgTEVBVkUKKwlMRUFWRQogICAgICAgTkVFRE9VVAogICAgICAgdCA9IHMtPnN1Yi5sZWZ0OwogICAgICAgaWYgKHQgPiBuKSB0ID0gbjsKQEAgLTg4NiwxMCArODg2LDEwIEBACiAgICAgICBwICs9IHQ7ICBuIC09IHQ7CiAgICAgICBxICs9IHQ7ICBtIC09IHQ7CiAgICAgICBpZiAoKHMtPnN1Yi5sZWZ0IC09IHQpICE9IDApCi0gICAgICAgIGJyZWFrOworCWJyZWFrOwogICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBzdG9yZWQgZW5kLCAlbHUgdG90YWwgb3V0XG4iLAotICAgICAgICAgICAgICB6LT50b3RhbF9vdXQgKyAocSA+PSBzLT5yZWFkID8gcSAtIHMtPnJlYWQgOgotICAgICAgICAgICAgICAocy0+ZW5kIC0gcy0+cmVhZCkgKyAocSAtIHMtPndpbmRvdykpKSk7CisJICAgICAgei0+dG90YWxfb3V0ICsgKHEgPj0gcy0+cmVhZCA/IHEgLSBzLT5yZWFkIDoKKwkgICAgICAocy0+ZW5kIC0gcy0+cmVhZCkgKyAocSAtIHMtPndpbmRvdykpKSk7CiAgICAgICBzLT5tb2RlID0gcy0+bGFzdCA/IERSWSA6IFRZUEU7CiAgICAgICBicmVhazsKICAgICBjYXNlIFRBQkxFOgpAQCAtODk4LDE5ICs4OTgsMTkgQEAKICNpZm5kZWYgUEtaSVBfQlVHX1dPUktBUk9VTkQKICAgICAgIGlmICgodCAmIDB4MWYpID4gMjkgfHwgKCh0ID4+IDUpICYgMHgxZikgPiAyOSkKICAgICAgIHsKLSAgICAgICAgcy0+bW9kZSA9IEJBREI7Ci0gICAgICAgIHotPm1zZyA9ICJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFuY2Ugc3ltYm9scyI7Ci0gICAgICAgIHIgPSBaX0RBVEFfRVJST1I7Ci0gICAgICAgIExFQVZFCisJcy0+bW9kZSA9IEJBREI7CisJei0+bXNnID0gInRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIjsKKwlyID0gWl9EQVRBX0VSUk9SOworCUxFQVZFCiAgICAgICB9CiAjZW5kaWYKICAgICAgIHQgPSAyNTggKyAodCAmIDB4MWYpICsgKCh0ID4+IDUpICYgMHgxZik7CiAgICAgICBpZiAodCA8IDE5KQotICAgICAgICB0ID0gMTk7CisJdCA9IDE5OwogICAgICAgaWYgKChzLT5zdWIudHJlZXMuYmxlbnMgPSAodUludGYqKVpBTExPQyh6LCB0LCBzaXplb2YodUludCkpKSA9PSBaX05VTEwpCiAgICAgICB7Ci0gICAgICAgIHIgPSBaX01FTV9FUlJPUjsKLSAgICAgICAgTEVBVkUKKwlyID0gWl9NRU1fRVJST1I7CisJTEVBVkUKICAgICAgIH0KICAgICAgIHMtPnN1Yi50cmVlcy5uYmxlbnMgPSB0OwogICAgICAgRFVNUEJJVFMoMTQpCkBAIC05MjAsMTI5ICs5MjAsMTI5IEBACiAgICAgY2FzZSBCVFJFRToKICAgICAgIHdoaWxlIChzLT5zdWIudHJlZXMuaW5kZXggPCA0ICsgKHMtPnN1Yi50cmVlcy50YWJsZSA+PiAxMCkpCiAgICAgICB7Ci0gICAgICAgIE5FRURCSVRTKDMpCi0gICAgICAgIHMtPnN1Yi50cmVlcy5ibGVuc1tib3JkZXJbcy0+c3ViLnRyZWVzLmluZGV4KytdXSA9ICh1SW50KWIgJiA3OwotICAgICAgICBEVU1QQklUUygzKQorCU5FRURCSVRTKDMpCisJcy0+c3ViLnRyZWVzLmJsZW5zW2JvcmRlcltzLT5zdWIudHJlZXMuaW5kZXgrK11dID0gKHVJbnQpYiAmIDc7CisJRFVNUEJJVFMoMykKICAgICAgIH0KICAgICAgIHdoaWxlIChzLT5zdWIudHJlZXMuaW5kZXggPCAxOSkKLSAgICAgICAgcy0+c3ViLnRyZWVzLmJsZW5zW2JvcmRlcltzLT5zdWIudHJlZXMuaW5kZXgrK11dID0gMDsKKwlzLT5zdWIudHJlZXMuYmxlbnNbYm9yZGVyW3MtPnN1Yi50cmVlcy5pbmRleCsrXV0gPSAwOwogICAgICAgcy0+c3ViLnRyZWVzLmJiID0gNzsKICAgICAgIHQgPSBpbmZsYXRlX3RyZWVzX2JpdHMocy0+c3ViLnRyZWVzLmJsZW5zLCAmcy0+c3ViLnRyZWVzLmJiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+c3ViLnRyZWVzLnRiLCB6KTsKKwkJCSAgICAgJnMtPnN1Yi50cmVlcy50Yiwgeik7CiAgICAgICBpZiAodCAhPSBaX09LKQogICAgICAgewotICAgICAgICByID0gdDsKLSAgICAgICAgaWYgKHIgPT0gWl9EQVRBX0VSUk9SKQotICAgICAgICAgIHMtPm1vZGUgPSBCQURCOwotICAgICAgICBMRUFWRQorCXIgPSB0OworCWlmIChyID09IFpfREFUQV9FUlJPUikKKwkgIHMtPm1vZGUgPSBCQURCOworCUxFQVZFCiAgICAgICB9CiAgICAgICBzLT5zdWIudHJlZXMuaW5kZXggPSAwOwogICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBiaXRzIHRyZWUgb2tcbiIpKTsKICAgICAgIHMtPm1vZGUgPSBEVFJFRTsKICAgICBjYXNlIERUUkVFOgogICAgICAgd2hpbGUgKHQgPSBzLT5zdWIudHJlZXMudGFibGUsCi0gICAgICAgICAgICAgcy0+c3ViLnRyZWVzLmluZGV4IDwgMjU4ICsgKHQgJiAweDFmKSArICgodCA+PiA1KSAmIDB4MWYpKQorCSAgICAgcy0+c3ViLnRyZWVzLmluZGV4IDwgMjU4ICsgKHQgJiAweDFmKSArICgodCA+PiA1KSAmIDB4MWYpKQogICAgICAgewotICAgICAgICBpbmZsYXRlX2h1ZnQgKmg7Ci0gICAgICAgIHVJbnQgaSwgaiwgYzsKKwlpbmZsYXRlX2h1ZnQgKmg7CisJdUludCBpLCBqLCBjOwogCi0gICAgICAgIHQgPSBzLT5zdWIudHJlZXMuYmI7Ci0gICAgICAgIE5FRURCSVRTKHQpCi0gICAgICAgIGggPSBzLT5zdWIudHJlZXMudGIgKyAoKHVJbnQpYiAmIGluZmxhdGVfbWFza1t0XSk7Ci0gICAgICAgIHQgPSBoLT53b3JkLndoYXQuQml0czsKLSAgICAgICAgYyA9IGgtPm1vcmUuQmFzZTsKLSAgICAgICAgaWYgKGMgPCAxNikKLSAgICAgICAgewotICAgICAgICAgIERVTVBCSVRTKHQpCi0gICAgICAgICAgcy0+c3ViLnRyZWVzLmJsZW5zW3MtPnN1Yi50cmVlcy5pbmRleCsrXSA9IGM7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAvKiBjID09IDE2Li4xOCAqLwotICAgICAgICB7Ci0gICAgICAgICAgaSA9IGMgPT0gMTggPyA3IDogYyAtIDE0OwotICAgICAgICAgIGogPSBjID09IDE4ID8gMTEgOiAzOwotICAgICAgICAgIE5FRURCSVRTKHQgKyBpKQotICAgICAgICAgIERVTVBCSVRTKHQpCi0gICAgICAgICAgaiArPSAodUludCliICYgaW5mbGF0ZV9tYXNrW2ldOwotICAgICAgICAgIERVTVBCSVRTKGkpCi0gICAgICAgICAgaSA9IHMtPnN1Yi50cmVlcy5pbmRleDsKLSAgICAgICAgICB0ID0gcy0+c3ViLnRyZWVzLnRhYmxlOwotICAgICAgICAgIGlmIChpICsgaiA+IDI1OCArICh0ICYgMHgxZikgKyAoKHQgPj4gNSkgJiAweDFmKSB8fAotICAgICAgICAgICAgICAoYyA9PSAxNiAmJiBpIDwgMSkpCi0gICAgICAgICAgewotICAgICAgICAgICAgcy0+bW9kZSA9IEJBREI7Ci0gICAgICAgICAgICB6LT5tc2cgPSAiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCI7Ci0gICAgICAgICAgICByID0gWl9EQVRBX0VSUk9SOwotICAgICAgICAgICAgTEVBVkUKLSAgICAgICAgICB9Ci0gICAgICAgICAgYyA9IGMgPT0gMTYgPyBzLT5zdWIudHJlZXMuYmxlbnNbaSAtIDFdIDogMDsKLSAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICBzLT5zdWIudHJlZXMuYmxlbnNbaSsrXSA9IGM7Ci0gICAgICAgICAgfSB3aGlsZSAoLS1qKTsKLSAgICAgICAgICBzLT5zdWIudHJlZXMuaW5kZXggPSBpOwotICAgICAgICB9CisJdCA9IHMtPnN1Yi50cmVlcy5iYjsKKwlORUVEQklUUyh0KQorCWggPSBzLT5zdWIudHJlZXMudGIgKyAoKHVJbnQpYiAmIGluZmxhdGVfbWFza1t0XSk7CisJdCA9IGgtPndvcmQud2hhdC5CaXRzOworCWMgPSBoLT5tb3JlLkJhc2U7CisJaWYgKGMgPCAxNikKKwl7CisJICBEVU1QQklUUyh0KQorCSAgcy0+c3ViLnRyZWVzLmJsZW5zW3MtPnN1Yi50cmVlcy5pbmRleCsrXSA9IGM7CisJfQorCWVsc2UgLyogYyA9PSAxNi4uMTggKi8KKwl7CisJICBpID0gYyA9PSAxOCA/IDcgOiBjIC0gMTQ7CisJICBqID0gYyA9PSAxOCA/IDExIDogMzsKKwkgIE5FRURCSVRTKHQgKyBpKQorCSAgRFVNUEJJVFModCkKKwkgIGogKz0gKHVJbnQpYiAmIGluZmxhdGVfbWFza1tpXTsKKwkgIERVTVBCSVRTKGkpCisJICBpID0gcy0+c3ViLnRyZWVzLmluZGV4OworCSAgdCA9IHMtPnN1Yi50cmVlcy50YWJsZTsKKwkgIGlmIChpICsgaiA+IDI1OCArICh0ICYgMHgxZikgKyAoKHQgPj4gNSkgJiAweDFmKSB8fAorCSAgICAgIChjID09IDE2ICYmIGkgPCAxKSkKKwkgIHsKKwkgICAgcy0+bW9kZSA9IEJBREI7CisJICAgIHotPm1zZyA9ICJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IjsKKwkgICAgciA9IFpfREFUQV9FUlJPUjsKKwkgICAgTEVBVkUKKwkgIH0KKwkgIGMgPSBjID09IDE2ID8gcy0+c3ViLnRyZWVzLmJsZW5zW2kgLSAxXSA6IDA7CisJICBkbyB7CisJICAgIHMtPnN1Yi50cmVlcy5ibGVuc1tpKytdID0gYzsKKwkgIH0gd2hpbGUgKC0taik7CisJICBzLT5zdWIudHJlZXMuaW5kZXggPSBpOworCX0KICAgICAgIH0KICAgICAgIGluZmxhdGVfdHJlZXNfZnJlZShzLT5zdWIudHJlZXMudGIsIHopOwogICAgICAgcy0+c3ViLnRyZWVzLnRiID0gWl9OVUxMOwogICAgICAgewotICAgICAgICB1SW50IGJsLCBiZDsKLSAgICAgICAgaW5mbGF0ZV9odWZ0ICp0bCwgKnRkOwotICAgICAgICBpbmZsYXRlX2NvZGVzX3N0YXRlZiAqYzsKKwl1SW50IGJsLCBiZDsKKwlpbmZsYXRlX2h1ZnQgKnRsLCAqdGQ7CisJaW5mbGF0ZV9jb2Rlc19zdGF0ZWYgKmM7CiAKLSAgICAgICAgYmwgPSA5OyAgICAgICAgIC8qIG11c3QgYmUgPD0gOSBmb3IgbG9va2FoZWFkIGFzc3VtcHRpb25zICovCi0gICAgICAgIGJkID0gNjsgICAgICAgICAvKiBtdXN0IGJlIDw9IDkgZm9yIGxvb2thaGVhZCBhc3N1bXB0aW9ucyAqLwotICAgICAgICB0ID0gcy0+c3ViLnRyZWVzLnRhYmxlOwotICAgICAgICB0ID0gaW5mbGF0ZV90cmVlc19keW5hbWljKDI1NyArICh0ICYgMHgxZiksIDEgKyAoKHQgPj4gNSkgJiAweDFmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zdWIudHJlZXMuYmxlbnMsICZibCwgJmJkLCAmdGwsICZ0ZCwgeik7Ci0gICAgICAgIGlmICh0ICE9IFpfT0spCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAodCA9PSAodUludClaX0RBVEFfRVJST1IpCi0gICAgICAgICAgICBzLT5tb2RlID0gQkFEQjsKLSAgICAgICAgICByID0gdDsKLSAgICAgICAgICBMRUFWRQotICAgICAgICB9Ci0gICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgdHJlZXMgb2tcbiIpKTsKLSAgICAgICAgaWYgKChjID0gaW5mbGF0ZV9jb2Rlc19uZXcoYmwsIGJkLCB0bCwgdGQsIHopKSA9PSBaX05VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICBpbmZsYXRlX3RyZWVzX2ZyZWUodGQsIHopOwotICAgICAgICAgIGluZmxhdGVfdHJlZXNfZnJlZSh0bCwgeik7Ci0gICAgICAgICAgciA9IFpfTUVNX0VSUk9SOwotICAgICAgICAgIExFQVZFCi0gICAgICAgIH0KLSAgICAgICAgWkZSRUUoeiwgcy0+c3ViLnRyZWVzLmJsZW5zLCBzLT5zdWIudHJlZXMubmJsZW5zICogc2l6ZW9mKHVJbnQpKTsKLSAgICAgICAgcy0+c3ViLmRlY29kZS5jb2RlcyA9IGM7Ci0gICAgICAgIHMtPnN1Yi5kZWNvZGUudGwgPSB0bDsKLSAgICAgICAgcy0+c3ViLmRlY29kZS50ZCA9IHRkOworCWJsID0gOTsgICAgICAgICAvKiBtdXN0IGJlIDw9IDkgZm9yIGxvb2thaGVhZCBhc3N1bXB0aW9ucyAqLworCWJkID0gNjsgICAgICAgICAvKiBtdXN0IGJlIDw9IDkgZm9yIGxvb2thaGVhZCBhc3N1bXB0aW9ucyAqLworCXQgPSBzLT5zdWIudHJlZXMudGFibGU7CisJdCA9IGluZmxhdGVfdHJlZXNfZHluYW1pYygyNTcgKyAodCAmIDB4MWYpLCAxICsgKCh0ID4+IDUpICYgMHgxZiksCisJCQkJICBzLT5zdWIudHJlZXMuYmxlbnMsICZibCwgJmJkLCAmdGwsICZ0ZCwgeik7CisJaWYgKHQgIT0gWl9PSykKKwl7CisJICBpZiAodCA9PSAodUludClaX0RBVEFfRVJST1IpCisJICAgIHMtPm1vZGUgPSBCQURCOworCSAgciA9IHQ7CisJICBMRUFWRQorCX0KKwlUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgIHRyZWVzIG9rXG4iKSk7CisJaWYgKChjID0gaW5mbGF0ZV9jb2Rlc19uZXcoYmwsIGJkLCB0bCwgdGQsIHopKSA9PSBaX05VTEwpCisJeworCSAgaW5mbGF0ZV90cmVlc19mcmVlKHRkLCB6KTsKKwkgIGluZmxhdGVfdHJlZXNfZnJlZSh0bCwgeik7CisJICByID0gWl9NRU1fRVJST1I7CisJICBMRUFWRQorCX0KKwlaRlJFRSh6LCBzLT5zdWIudHJlZXMuYmxlbnMsIHMtPnN1Yi50cmVlcy5uYmxlbnMgKiBzaXplb2YodUludCkpOworCXMtPnN1Yi5kZWNvZGUuY29kZXMgPSBjOworCXMtPnN1Yi5kZWNvZGUudGwgPSB0bDsKKwlzLT5zdWIuZGVjb2RlLnRkID0gdGQ7CiAgICAgICB9CiAgICAgICBzLT5tb2RlID0gQ09ERVM7CiAgICAgY2FzZSBDT0RFUzoKICAgICAgIFVQREFURQogICAgICAgaWYgKChyID0gaW5mbGF0ZV9jb2RlcyhzLCB6LCByKSkgIT0gWl9TVFJFQU1fRU5EKQotICAgICAgICByZXR1cm4gaW5mbGF0ZV9mbHVzaChzLCB6LCByKTsKKwlyZXR1cm4gaW5mbGF0ZV9mbHVzaChzLCB6LCByKTsKICAgICAgIHIgPSBaX09LOwogICAgICAgaW5mbGF0ZV9jb2Rlc19mcmVlKHMtPnN1Yi5kZWNvZGUuY29kZXMsIHopOwogICAgICAgaW5mbGF0ZV90cmVlc19mcmVlKHMtPnN1Yi5kZWNvZGUudGQsIHopOwogICAgICAgaW5mbGF0ZV90cmVlc19mcmVlKHMtPnN1Yi5kZWNvZGUudGwsIHopOwogICAgICAgTE9BRAogICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlcyBlbmQsICVsdSB0b3RhbCBvdXRcbiIsCi0gICAgICAgICAgICAgIHotPnRvdGFsX291dCArIChxID49IHMtPnJlYWQgPyBxIC0gcy0+cmVhZCA6Ci0gICAgICAgICAgICAgIChzLT5lbmQgLSBzLT5yZWFkKSArIChxIC0gcy0+d2luZG93KSkpKTsKKwkgICAgICB6LT50b3RhbF9vdXQgKyAocSA+PSBzLT5yZWFkID8gcSAtIHMtPnJlYWQgOgorCSAgICAgIChzLT5lbmQgLSBzLT5yZWFkKSArIChxIC0gcy0+d2luZG93KSkpKTsKICAgICAgIGlmICghcy0+bGFzdCkKICAgICAgIHsKLSAgICAgICAgcy0+bW9kZSA9IFRZUEU7Ci0gICAgICAgIGJyZWFrOworCXMtPm1vZGUgPSBUWVBFOworCWJyZWFrOwogICAgICAgfQogICAgICAgaWYgKGsgPiA3KSAgICAgICAgICAgICAgLyogcmV0dXJuIHVudXNlZCBieXRlLCBpZiBhbnkgKi8KICAgICAgIHsKLSAgICAgICAgQXNzZXJ0KGsgPCAxNiwgImluZmxhdGVfY29kZXMgZ3JhYmJlZCB0b28gbWFueSBieXRlcyIpCi0gICAgICAgIGsgLT0gODsKLSAgICAgICAgbisrOwotICAgICAgICBwLS07ICAgICAgICAgICAgICAgICAgICAvKiBjYW4gYWx3YXlzIHJldHVybiBvbmUgKi8KKwlBc3NlcnQoayA8IDE2LCAiaW5mbGF0ZV9jb2RlcyBncmFiYmVkIHRvbyBtYW55IGJ5dGVzIikKKwlrIC09IDg7CisJbisrOworCXAtLTsgICAgICAgICAgICAgICAgICAgIC8qIGNhbiBhbHdheXMgcmV0dXJuIG9uZSAqLwogICAgICAgfQogICAgICAgcy0+bW9kZSA9IERSWTsKICAgICBjYXNlIERSWToKICAgICAgIEZMVVNICiAgICAgICBpZiAocy0+cmVhZCAhPSBzLT53cml0ZSkKLSAgICAgICAgTEVBVkUKKwlMRUFWRQogICAgICAgcy0+bW9kZSA9IERPTkVCOwogICAgIGNhc2UgRE9ORUI6CiAgICAgICByID0gWl9TVFJFQU1fRU5EOwpAQCAtMTE3NSwyMCArMTE3NSwyMCBAQAogCiAvKiBUYWJsZXMgZm9yIGRlZmxhdGUgZnJvbSBQS1pJUCdzIGFwcG5vdGUudHh0LiAqLwogbG9jYWwgdUludCBjcGxlbnNbXSA9IHsgLyogQ29weSBsZW5ndGhzIGZvciBsaXRlcmFsIGNvZGVzIDI1Ny4uMjg1ICovCi0gICAgICAgIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTMsIDE1LCAxNywgMTksIDIzLCAyNywgMzEsCi0gICAgICAgIDM1LCA0MywgNTEsIDU5LCA2NywgODMsIDk5LCAxMTUsIDEzMSwgMTYzLCAxOTUsIDIyNywgMjU4LCAwLCAwfTsKLSAgICAgICAgLyogYWN0dWFsbHkgbGVuZ3RocyAtIDI7IGFsc28gc2VlIG5vdGUgIzEzIGFib3ZlIGFib3V0IDI1OCAqLworCTMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTMsIDE1LCAxNywgMTksIDIzLCAyNywgMzEsCisJMzUsIDQzLCA1MSwgNTksIDY3LCA4MywgOTksIDExNSwgMTMxLCAxNjMsIDE5NSwgMjI3LCAyNTgsIDAsIDB9OworCS8qIGFjdHVhbGx5IGxlbmd0aHMgLSAyOyBhbHNvIHNlZSBub3RlICMxMyBhYm92ZSBhYm91dCAyNTggKi8KIGxvY2FsIHVJbnQgY3BsZXh0W10gPSB7IC8qIEV4dHJhIGJpdHMgZm9yIGxpdGVyYWwgY29kZXMgMjU3Li4yODUgKi8KLSAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwKLSAgICAgICAgMywgMywgMywgMywgNCwgNCwgNCwgNCwgNSwgNSwgNSwgNSwgMCwgMTkyLCAxOTJ9OyAvKiAxOTI9PWludmFsaWQgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAyLCAyLCAyLCAyLAorCTMsIDMsIDMsIDMsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDAsIDE5MiwgMTkyfTsgLyogMTkyPT1pbnZhbGlkICovCiBsb2NhbCB1SW50IGNwZGlzdFtdID0geyAvKiBDb3B5IG9mZnNldHMgZm9yIGRpc3RhbmNlIGNvZGVzIDAuLjI5ICovCi0gICAgICAgIDEsIDIsIDMsIDQsIDUsIDcsIDksIDEzLCAxNywgMjUsIDMzLCA0OSwgNjUsIDk3LCAxMjksIDE5MywKLSAgICAgICAgMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LAotICAgICAgICA4MTkzLCAxMjI4OSwgMTYzODUsIDI0NTc3fTsKKwkxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcsIDI1LCAzMywgNDksIDY1LCA5NywgMTI5LCAxOTMsCisJMjU3LCAzODUsIDUxMywgNzY5LCAxMDI1LCAxNTM3LCAyMDQ5LCAzMDczLCA0MDk3LCA2MTQ1LAorCTgxOTMsIDEyMjg5LCAxNjM4NSwgMjQ1Nzd9OwogbG9jYWwgdUludCBjcGRleHRbXSA9IHsgLyogRXh0cmEgYml0cyBmb3IgZGlzdGFuY2UgY29kZXMgKi8KLSAgICAgICAgMCwgMCwgMCwgMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgNCwgNSwgNSwgNiwgNiwKLSAgICAgICAgNywgNywgOCwgOCwgOSwgOSwgMTAsIDEwLCAxMSwgMTEsCi0gICAgICAgIDEyLCAxMiwgMTMsIDEzfTsKKwkwLCAwLCAwLCAwLCAxLCAxLCAyLCAyLCAzLCAzLCA0LCA0LCA1LCA1LCA2LCA2LAorCTcsIDcsIDgsIDgsIDksIDksIDEwLCAxMCwgMTEsIDExLAorCTEyLCAxMiwgMTMsIDEzfTsKIAogLyoKICAgIEh1ZmZtYW4gY29kZSBkZWNvZGluZyBpcyBwZXJmb3JtZWQgdXNpbmcgYSBtdWx0aS1sZXZlbCB0YWJsZSBsb29rdXAuCkBAIC0xMzQ3LDgzICsxMzQ3LDgzIEBACiAgICAgICAvKiBtYWtlIHRhYmxlcyB1cCB0byByZXF1aXJlZCBsZXZlbCAqLwogICAgICAgd2hpbGUgKGsgPiB3ICsgbCkKICAgICAgIHsKLSAgICAgICAgaCsrOwotICAgICAgICB3ICs9IGw7ICAgICAgICAgICAgICAgICAvKiBwcmV2aW91cyB0YWJsZSBhbHdheXMgbCBiaXRzICovCisJaCsrOworCXcgKz0gbDsgICAgICAgICAgICAgICAgIC8qIHByZXZpb3VzIHRhYmxlIGFsd2F5cyBsIGJpdHMgKi8KIAotICAgICAgICAvKiBjb21wdXRlIG1pbmltdW0gc2l6ZSB0YWJsZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbCBiaXRzICovCi0gICAgICAgIHogPSAoeiA9IGcgLSB3KSA+ICh1SW50KWwgPyBsIDogejsgICAgICAvKiB0YWJsZSBzaXplIHVwcGVyIGxpbWl0ICovCi0gICAgICAgIGlmICgoZiA9IDEgPDwgKGogPSBrIC0gdykpID4gYSArIDEpICAgICAvKiB0cnkgYSBrLXcgYml0IHRhYmxlICovCi0gICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvbyBmZXcgY29kZXMgZm9yIGstdyBiaXQgdGFibGUgKi8KLSAgICAgICAgICBmIC09IGEgKyAxOyAgICAgICAgICAgLyogZGVkdWN0IGNvZGVzIGZyb20gcGF0dGVybnMgbGVmdCAqLwotICAgICAgICAgIHhwID0gYyArIGs7Ci0gICAgICAgICAgaWYgKGogPCB6KQotICAgICAgICAgICAgd2hpbGUgKCsraiA8IHopICAgICAvKiB0cnkgc21hbGxlciB0YWJsZXMgdXAgdG8geiBiaXRzICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICgoZiA8PD0gMSkgPD0gKisreHApCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGVub3VnaCBjb2RlcyB0byB1c2UgdXAgaiBiaXRzICovCi0gICAgICAgICAgICAgIGYgLT0gKnhwOyAgICAgICAgIC8qIGVsc2UgZGVkdWN0IGNvZGVzIGZyb20gcGF0dGVybnMgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB6ID0gMSA8PCBqOyAgICAgICAgICAgICAvKiB0YWJsZSBlbnRyaWVzIGZvciBqLWJpdCB0YWJsZSAqLworCS8qIGNvbXB1dGUgbWluaW11bSBzaXplIHRhYmxlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBsIGJpdHMgKi8KKwl6ID0gKHogPSBnIC0gdykgPiAodUludClsID8gbCA6IHo7ICAgICAgLyogdGFibGUgc2l6ZSB1cHBlciBsaW1pdCAqLworCWlmICgoZiA9IDEgPDwgKGogPSBrIC0gdykpID4gYSArIDEpICAgICAvKiB0cnkgYSBrLXcgYml0IHRhYmxlICovCisJeyAgICAgICAgICAgICAgICAgICAgICAgLyogdG9vIGZldyBjb2RlcyBmb3Igay13IGJpdCB0YWJsZSAqLworCSAgZiAtPSBhICsgMTsgICAgICAgICAgIC8qIGRlZHVjdCBjb2RlcyBmcm9tIHBhdHRlcm5zIGxlZnQgKi8KKwkgIHhwID0gYyArIGs7CisJICBpZiAoaiA8IHopCisJICAgIHdoaWxlICgrK2ogPCB6KSAgICAgLyogdHJ5IHNtYWxsZXIgdGFibGVzIHVwIHRvIHogYml0cyAqLworCSAgICB7CisJICAgICAgaWYgKChmIDw8PSAxKSA8PSAqKyt4cCkKKwkJYnJlYWs7ICAgICAgICAgIC8qIGVub3VnaCBjb2RlcyB0byB1c2UgdXAgaiBiaXRzICovCisJICAgICAgZiAtPSAqeHA7ICAgICAgICAgLyogZWxzZSBkZWR1Y3QgY29kZXMgZnJvbSBwYXR0ZXJucyAqLworCSAgICB9CisJfQorCXogPSAxIDw8IGo7ICAgICAgICAgICAgIC8qIHRhYmxlIGVudHJpZXMgZm9yIGotYml0IHRhYmxlICovCiAKLSAgICAgICAgLyogYWxsb2NhdGUgYW5kIGxpbmsgaW4gbmV3IHRhYmxlICovCi0gICAgICAgIGlmICgocSA9IChpbmZsYXRlX2h1ZnQgKilaQUxMT0MKLSAgICAgICAgICAgICAoenMseiArIDEsc2l6ZW9mKGluZmxhdGVfaHVmdCkpKSA9PSBaX05VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoaCkKLSAgICAgICAgICAgIGluZmxhdGVfdHJlZXNfZnJlZSh1WzBdLCB6cyk7Ci0gICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOyAgIC8qIG5vdCBlbm91Z2ggbWVtb3J5ICovCi0gICAgICAgIH0KKwkvKiBhbGxvY2F0ZSBhbmQgbGluayBpbiBuZXcgdGFibGUgKi8KKwlpZiAoKHEgPSAoaW5mbGF0ZV9odWZ0ICopWkFMTE9DCisJICAgICAoenMseiArIDEsc2l6ZW9mKGluZmxhdGVfaHVmdCkpKSA9PSBaX05VTEwpCisJeworCSAgaWYgKGgpCisJICAgIGluZmxhdGVfdHJlZXNfZnJlZSh1WzBdLCB6cyk7CisJICByZXR1cm4gWl9NRU1fRVJST1I7ICAgLyogbm90IGVub3VnaCBtZW1vcnkgKi8KKwl9CiAJcS0+d29yZC5OYWxsb2MgPSB6ICsgMTsKICNpZmRlZiBERUJVR19aTElCCi0gICAgICAgIGluZmxhdGVfaHVmdHMgKz0geiArIDE7CisJaW5mbGF0ZV9odWZ0cyArPSB6ICsgMTsKICNlbmRpZgotICAgICAgICAqdCA9IHEgKyAxOyAgICAgICAgICAgICAvKiBsaW5rIHRvIGxpc3QgZm9yIGh1ZnRfZnJlZSgpICovCi0gICAgICAgICoodCA9ICYocS0+bmV4dCkpID0gWl9OVUxMOwotICAgICAgICB1W2hdID0gKytxOyAgICAgICAgICAgICAvKiB0YWJsZSBzdGFydHMgYWZ0ZXIgbGluayAqLworCSp0ID0gcSArIDE7ICAgICAgICAgICAgIC8qIGxpbmsgdG8gbGlzdCBmb3IgaHVmdF9mcmVlKCkgKi8KKwkqKHQgPSAmKHEtPm5leHQpKSA9IFpfTlVMTDsKKwl1W2hdID0gKytxOyAgICAgICAgICAgICAvKiB0YWJsZSBzdGFydHMgYWZ0ZXIgbGluayAqLwogCi0gICAgICAgIC8qIGNvbm5lY3QgdG8gbGFzdCB0YWJsZSwgaWYgdGhlcmUgaXMgb25lICovCi0gICAgICAgIGlmIChoKQotICAgICAgICB7Ci0gICAgICAgICAgeFtoXSA9IGk7ICAgICAgICAgICAgIC8qIHNhdmUgcGF0dGVybiBmb3IgYmFja2luZyB1cCAqLwotICAgICAgICAgIHIuYml0cyA9IChCeXRlKWw7ICAgICAvKiBiaXRzIHRvIGR1bXAgYmVmb3JlIHRoaXMgdGFibGUgKi8KLSAgICAgICAgICByLmV4b3AgPSAoQnl0ZSlqOyAgICAgLyogYml0cyBpbiB0aGlzIHRhYmxlICovCi0gICAgICAgICAgci5uZXh0ID0gcTsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gdGhpcyB0YWJsZSAqLwotICAgICAgICAgIGogPSBpID4+ICh3IC0gbCk7ICAgICAvKiAoZ2V0IGFyb3VuZCBUdXJibyBDIGJ1ZykgKi8KLSAgICAgICAgICB1W2gtMV1bal0gPSByOyAgICAgICAgLyogY29ubmVjdCB0byBsYXN0IHRhYmxlICovCi0gICAgICAgIH0KKwkvKiBjb25uZWN0IHRvIGxhc3QgdGFibGUsIGlmIHRoZXJlIGlzIG9uZSAqLworCWlmIChoKQorCXsKKwkgIHhbaF0gPSBpOyAgICAgICAgICAgICAvKiBzYXZlIHBhdHRlcm4gZm9yIGJhY2tpbmcgdXAgKi8KKwkgIHIuYml0cyA9IChCeXRlKWw7ICAgICAvKiBiaXRzIHRvIGR1bXAgYmVmb3JlIHRoaXMgdGFibGUgKi8KKwkgIHIuZXhvcCA9IChCeXRlKWo7ICAgICAvKiBiaXRzIGluIHRoaXMgdGFibGUgKi8KKwkgIHIubmV4dCA9IHE7ICAgICAgICAgICAvKiBwb2ludGVyIHRvIHRoaXMgdGFibGUgKi8KKwkgIGogPSBpID4+ICh3IC0gbCk7ICAgICAvKiAoZ2V0IGFyb3VuZCBUdXJibyBDIGJ1ZykgKi8KKwkgIHVbaC0xXVtqXSA9IHI7ICAgICAgICAvKiBjb25uZWN0IHRvIGxhc3QgdGFibGUgKi8KKwl9CiAgICAgICB9CiAKICAgICAgIC8qIHNldCB1cCB0YWJsZSBlbnRyeSBpbiByICovCiAgICAgICByLmJpdHMgPSAoQnl0ZSkoayAtIHcpOwogICAgICAgaWYgKHAgPj0gdiArIG4pCi0gICAgICAgIHIuZXhvcCA9IDEyOCArIDY0OyAgICAgIC8qIG91dCBvZiB2YWx1ZXMtLWludmFsaWQgY29kZSAqLworCXIuZXhvcCA9IDEyOCArIDY0OyAgICAgIC8qIG91dCBvZiB2YWx1ZXMtLWludmFsaWQgY29kZSAqLwogICAgICAgZWxzZSBpZiAoKnAgPCBzKQogICAgICAgewotICAgICAgICByLmV4b3AgPSAoQnl0ZSkoKnAgPCAyNTYgPyAwIDogMzIgKyA2NCk7ICAgICAvKiAyNTYgaXMgZW5kLW9mLWJsb2NrICovCi0gICAgICAgIHIuYmFzZSA9ICpwKys7ICAgICAgICAgIC8qIHNpbXBsZSBjb2RlIGlzIGp1c3QgdGhlIHZhbHVlICovCisJci5leG9wID0gKEJ5dGUpKCpwIDwgMjU2ID8gMCA6IDMyICsgNjQpOyAgICAgLyogMjU2IGlzIGVuZC1vZi1ibG9jayAqLworCXIuYmFzZSA9ICpwKys7ICAgICAgICAgIC8qIHNpbXBsZSBjb2RlIGlzIGp1c3QgdGhlIHZhbHVlICovCiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIHIuZXhvcCA9IChCeXRlKWVbKnAgLSBzXSArIDE2ICsgNjQ7IC8qIG5vbi1zaW1wbGUtLWxvb2sgdXAgaW4gbGlzdHMgKi8KLSAgICAgICAgci5iYXNlID0gZFsqcCsrIC0gc107CisJci5leG9wID0gKEJ5dGUpZVsqcCAtIHNdICsgMTYgKyA2NDsgLyogbm9uLXNpbXBsZS0tbG9vayB1cCBpbiBsaXN0cyAqLworCXIuYmFzZSA9IGRbKnArKyAtIHNdOwogICAgICAgfQogCiAgICAgICAvKiBmaWxsIGNvZGUtbGlrZSBlbnRyaWVzIHdpdGggciAqLwogICAgICAgZiA9IDEgPDwgKGsgLSB3KTsKICAgICAgIGZvciAoaiA9IGkgPj4gdzsgaiA8IHo7IGogKz0gZikKLSAgICAgICAgcVtqXSA9IHI7CisJcVtqXSA9IHI7CiAKICAgICAgIC8qIGJhY2t3YXJkcyBpbmNyZW1lbnQgdGhlIGstYml0IGNvZGUgaSAqLwogICAgICAgZm9yIChqID0gMSA8PCAoayAtIDEpOyBpICYgajsgaiA+Pj0gMSkKLSAgICAgICAgaSBePSBqOworCWkgXj0gajsKICAgICAgIGkgXj0gajsKIAogICAgICAgLyogYmFja3VwIG92ZXIgZmluaXNoZWQgdGFibGVzICovCiAgICAgICB3aGlsZSAoKGkgJiAoKDEgPDwgdykgLSAxKSkgIT0geFtoXSkKICAgICAgIHsKLSAgICAgICAgaC0tOyAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgbmVlZCB0byB1cGRhdGUgcSAqLwotICAgICAgICB3IC09IGw7CisJaC0tOyAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgbmVlZCB0byB1cGRhdGUgcSAqLworCXcgLT0gbDsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTE1MjMsNyArMTUyMyw3IEBACiB1SW50IHM7ICAgICAgICAgLyogc2l6ZSBvZiBpdGVtICovCiB7CiAgIEFzc2VydChzID09IHNpemVvZihpbmZsYXRlX2h1ZnQpICYmIG4gPD0gZml4ZWRfbGVmdCwKLSAgICAgICAgICJpbmZsYXRlX3RyZWVzIGZhbGxvYyBvdmVyZmxvdyIpOworCSAiaW5mbGF0ZV90cmVlcyBmYWxsb2Mgb3ZlcmZsb3ciKTsKICAgaWYgKHEpIHMrKzsgLyogdG8gbWFrZSBzb21lIGNvbXBpbGVycyBoYXBweSAqLwogICBmaXhlZF9sZWZ0IC09IG47CiAgIHJldHVybiAodm9pZHBmKShmaXhlZF9tZW0gKyBmaXhlZF9sZWZ0KTsKQEAgLTE3MTAsMTQgKzE3MTAsMTQgQEAKICNpZm5kZWYgU0xPVwogICAgICAgaWYgKG0gPj0gMjU4ICYmIG4gPj0gMTApCiAgICAgICB7Ci0gICAgICAgIFVQREFURQotICAgICAgICByID0gaW5mbGF0ZV9mYXN0KGMtPmxiaXRzLCBjLT5kYml0cywgYy0+bHRyZWUsIGMtPmR0cmVlLCBzLCB6KTsKLSAgICAgICAgTE9BRAotICAgICAgICBpZiAociAhPSBaX09LKQotICAgICAgICB7Ci0gICAgICAgICAgYy0+bW9kZSA9IHIgPT0gWl9TVFJFQU1fRU5EID8gV0FTSCA6IEJBRENPREU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwlVUERBVEUKKwlyID0gaW5mbGF0ZV9mYXN0KGMtPmxiaXRzLCBjLT5kYml0cywgYy0+bHRyZWUsIGMtPmR0cmVlLCBzLCB6KTsKKwlMT0FECisJaWYgKHIgIT0gWl9PSykKKwl7CisJICBjLT5tb2RlID0gciA9PSBaX1NUUkVBTV9FTkQgPyBXQVNIIDogQkFEQ09ERTsKKwkgIGJyZWFrOworCX0KICAgICAgIH0KICNlbmRpZiAvKiAhU0xPVyAqLwogICAgICAgYy0+c3ViLmNvZGUubmVlZCA9IGMtPmxiaXRzOwpAQCAtMTczMSwzMSArMTczMSwzMSBAQAogICAgICAgZSA9ICh1SW50KSh0LT5leG9wKTsKICAgICAgIGlmIChlID09IDApICAgICAgICAgICAgICAgLyogbGl0ZXJhbCAqLwogICAgICAgewotICAgICAgICBjLT5zdWIubGl0ID0gdC0+YmFzZTsKLSAgICAgICAgVHJhY2V2digoc3RkZXJyLCB0LT5iYXNlID49IDB4MjAgJiYgdC0+YmFzZSA8IDB4N2YgPwotICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgotICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgdC0+YmFzZSkpOwotICAgICAgICBjLT5tb2RlID0gTElUOwotICAgICAgICBicmVhazsKKwljLT5zdWIubGl0ID0gdC0+YmFzZTsKKwlUcmFjZXZ2KChzdGRlcnIsIHQtPmJhc2UgPj0gMHgyMCAmJiB0LT5iYXNlIDwgMHg3ZiA/CisJCSAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgorCQkgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAweCUwMnhcbiIsIHQtPmJhc2UpKTsKKwljLT5tb2RlID0gTElUOworCWJyZWFrOwogICAgICAgfQogICAgICAgaWYgKGUgJiAxNikgICAgICAgICAgICAgICAvKiBsZW5ndGggKi8KICAgICAgIHsKLSAgICAgICAgYy0+c3ViLmNvcHkuZ2V0ID0gZSAmIDE1OwotICAgICAgICBjLT5sZW4gPSB0LT5iYXNlOwotICAgICAgICBjLT5tb2RlID0gTEVORVhUOwotICAgICAgICBicmVhazsKKwljLT5zdWIuY29weS5nZXQgPSBlICYgMTU7CisJYy0+bGVuID0gdC0+YmFzZTsKKwljLT5tb2RlID0gTEVORVhUOworCWJyZWFrOwogICAgICAgfQogICAgICAgaWYgKChlICYgNjQpID09IDApICAgICAgICAvKiBuZXh0IHRhYmxlICovCiAgICAgICB7Ci0gICAgICAgIGMtPnN1Yi5jb2RlLm5lZWQgPSBlOwotICAgICAgICBjLT5zdWIuY29kZS50cmVlID0gdC0+bmV4dDsKLSAgICAgICAgYnJlYWs7CisJYy0+c3ViLmNvZGUubmVlZCA9IGU7CisJYy0+c3ViLmNvZGUudHJlZSA9IHQtPm5leHQ7CisJYnJlYWs7CiAgICAgICB9CiAgICAgICBpZiAoZSAmIDMyKSAgICAgICAgICAgICAgIC8qIGVuZCBvZiBibG9jayAqLwogICAgICAgewotICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xuIikpOwotICAgICAgICBjLT5tb2RlID0gV0FTSDsKLSAgICAgICAgYnJlYWs7CisJVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBlbmQgb2YgYmxvY2tcbiIpKTsKKwljLT5tb2RlID0gV0FTSDsKKwlicmVhazsKICAgICAgIH0KICAgICAgIGMtPm1vZGUgPSBCQURDT0RFOyAgICAgICAgLyogaW52YWxpZCBjb2RlICovCiAgICAgICB6LT5tc2cgPSAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKQEAgLTE3NzgsMTYgKzE3NzgsMTYgQEAKICAgICAgIGUgPSAodUludCkodC0+ZXhvcCk7CiAgICAgICBpZiAoZSAmIDE2KSAgICAgICAgICAgICAgIC8qIGRpc3RhbmNlICovCiAgICAgICB7Ci0gICAgICAgIGMtPnN1Yi5jb3B5LmdldCA9IGUgJiAxNTsKLSAgICAgICAgYy0+c3ViLmNvcHkuZGlzdCA9IHQtPmJhc2U7Ci0gICAgICAgIGMtPm1vZGUgPSBESVNURVhUOwotICAgICAgICBicmVhazsKKwljLT5zdWIuY29weS5nZXQgPSBlICYgMTU7CisJYy0+c3ViLmNvcHkuZGlzdCA9IHQtPmJhc2U7CisJYy0+bW9kZSA9IERJU1RFWFQ7CisJYnJlYWs7CiAgICAgICB9CiAgICAgICBpZiAoKGUgJiA2NCkgPT0gMCkgICAgICAgIC8qIG5leHQgdGFibGUgKi8KICAgICAgIHsKLSAgICAgICAgYy0+c3ViLmNvZGUubmVlZCA9IGU7Ci0gICAgICAgIGMtPnN1Yi5jb2RlLnRyZWUgPSB0LT5uZXh0OwotICAgICAgICBicmVhazsKKwljLT5zdWIuY29kZS5uZWVkID0gZTsKKwljLT5zdWIuY29kZS50cmVlID0gdC0+bmV4dDsKKwlicmVhazsKICAgICAgIH0KICAgICAgIGMtPm1vZGUgPSBCQURDT0RFOyAgICAgICAgLyogaW52YWxpZCBjb2RlICovCiAgICAgICB6LT5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSBjb2RlIjsKQEAgLTE4MDMsMjAgKzE4MDMsMjAgQEAKICAgICBjYXNlIENPUFk6ICAgICAgICAgIC8qIG86IGNvcHlpbmcgYnl0ZXMgaW4gd2luZG93LCB3YWl0aW5nIGZvciBzcGFjZSAqLwogI2lmbmRlZiBfX1RVUkJPQ19fIC8qIFR1cmJvIEMgYnVnIGZvciBmb2xsb3dpbmcgZXhwcmVzc2lvbiAqLwogICAgICAgZiA9ICh1SW50KShxIC0gcy0+d2luZG93KSA8IGMtPnN1Yi5jb3B5LmRpc3QgPwotICAgICAgICAgIHMtPmVuZCAtIChjLT5zdWIuY29weS5kaXN0IC0gKHEgLSBzLT53aW5kb3cpKSA6Ci0gICAgICAgICAgcSAtIGMtPnN1Yi5jb3B5LmRpc3Q7CisJICBzLT5lbmQgLSAoYy0+c3ViLmNvcHkuZGlzdCAtIChxIC0gcy0+d2luZG93KSkgOgorCSAgcSAtIGMtPnN1Yi5jb3B5LmRpc3Q7CiAjZWxzZQogICAgICAgZiA9IHEgLSBjLT5zdWIuY29weS5kaXN0OwogICAgICAgaWYgKCh1SW50KShxIC0gcy0+d2luZG93KSA8IGMtPnN1Yi5jb3B5LmRpc3QpCi0gICAgICAgIGYgPSBzLT5lbmQgLSAoYy0+c3ViLmNvcHkuZGlzdCAtIChxIC0gcy0+d2luZG93KSk7CisJZiA9IHMtPmVuZCAtIChjLT5zdWIuY29weS5kaXN0IC0gKHEgLSBzLT53aW5kb3cpKTsKICNlbmRpZgogICAgICAgd2hpbGUgKGMtPmxlbikKICAgICAgIHsKLSAgICAgICAgTkVFRE9VVAotICAgICAgICBPVVRCWVRFKCpmKyspCi0gICAgICAgIGlmIChmID09IHMtPmVuZCkKLSAgICAgICAgICBmID0gcy0+d2luZG93OwotICAgICAgICBjLT5sZW4tLTsKKwlORUVET1VUCisJT1VUQllURSgqZisrKQorCWlmIChmID09IHMtPmVuZCkKKwkgIGYgPSBzLT53aW5kb3c7CisJYy0+bGVuLS07CiAgICAgICB9CiAgICAgICBjLT5tb2RlID0gU1RBUlQ7CiAgICAgICBicmVhazsKQEAgLTE4MjgsNyArMTgyOCw3IEBACiAgICAgY2FzZSBXQVNIOiAgICAgICAgICAvKiBvOiBnb3QgZW9iLCBwb3NzaWJseSBtb3JlIG91dHB1dCAqLwogICAgICAgRkxVU0gKICAgICAgIGlmIChzLT5yZWFkICE9IHMtPndyaXRlKQotICAgICAgICBMRUFWRQorCUxFQVZFCiAgICAgICBjLT5tb2RlID0gRU5EOwogICAgIGNhc2UgRU5EOgogICAgICAgciA9IFpfU1RSRUFNX0VORDsKQEAgLTE5ODgsOCArMTk4OCw4IEBACiAgICAgewogICAgICAgRFVNUEJJVFModC0+Yml0cykKICAgICAgIFRyYWNldnYoKHN0ZGVyciwgdC0+YmFzZSA+PSAweDIwICYmIHQtPmJhc2UgPCAweDdmID8KLSAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICAqIGxpdGVyYWwgJyVjJ1xuIiA6Ci0gICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgKiBsaXRlcmFsIDB4JTAyeFxuIiwgdC0+YmFzZSkpOworCQkiaW5mbGF0ZTogICAgICAgICAqIGxpdGVyYWwgJyVjJ1xuIiA6CisJCSJpbmZsYXRlOiAgICAgICAgICogbGl0ZXJhbCAweCUwMnhcbiIsIHQtPmJhc2UpKTsKICAgICAgICpxKysgPSAoQnl0ZSl0LT5iYXNlOwogICAgICAgbS0tOwogICAgICAgY29udGludWU7CkBAIC0xOTk4LDkwICsxOTk4LDkwIEBACiAgICAgICBEVU1QQklUUyh0LT5iaXRzKQogICAgICAgaWYgKGUgJiAxNikKICAgICAgIHsKLSAgICAgICAgLyogZ2V0IGV4dHJhIGJpdHMgZm9yIGxlbmd0aCAqLwotICAgICAgICBlICY9IDE1OwotICAgICAgICBjID0gdC0+YmFzZSArICgodUludCliICYgaW5mbGF0ZV9tYXNrW2VdKTsKLSAgICAgICAgRFVNUEJJVFMoZSkKLSAgICAgICAgVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICAqIGxlbmd0aCAldVxuIiwgYykpOworCS8qIGdldCBleHRyYSBiaXRzIGZvciBsZW5ndGggKi8KKwllICY9IDE1OworCWMgPSB0LT5iYXNlICsgKCh1SW50KWIgJiBpbmZsYXRlX21hc2tbZV0pOworCURVTVBCSVRTKGUpCisJVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICAqIGxlbmd0aCAldVxuIiwgYykpOwogCi0gICAgICAgIC8qIGRlY29kZSBkaXN0YW5jZSBiYXNlIG9mIGJsb2NrIHRvIGNvcHkgKi8KLSAgICAgICAgR1JBQkJJVFMoMTUpOyAgICAgICAgICAgLyogbWF4IGJpdHMgZm9yIGRpc3RhbmNlIGNvZGUgKi8KLSAgICAgICAgZSA9ICh0ID0gdGQgKyAoKHVJbnQpYiAmIG1kKSktPmV4b3A7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICBEVU1QQklUUyh0LT5iaXRzKQotICAgICAgICAgIGlmIChlICYgMTYpCi0gICAgICAgICAgewotICAgICAgICAgICAgLyogZ2V0IGV4dHJhIGJpdHMgdG8gYWRkIHRvIGRpc3RhbmNlIGJhc2UgKi8KLSAgICAgICAgICAgIGUgJj0gMTU7Ci0gICAgICAgICAgICBHUkFCQklUUyhlKSAgICAgICAgIC8qIGdldCBleHRyYSBiaXRzICh1cCB0byAxMykgKi8KLSAgICAgICAgICAgIGQgPSB0LT5iYXNlICsgKCh1SW50KWIgJiBpbmZsYXRlX21hc2tbZV0pOwotICAgICAgICAgICAgRFVNUEJJVFMoZSkKLSAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgKiBkaXN0YW5jZSAldVxuIiwgZCkpOworCS8qIGRlY29kZSBkaXN0YW5jZSBiYXNlIG9mIGJsb2NrIHRvIGNvcHkgKi8KKwlHUkFCQklUUygxNSk7ICAgICAgICAgICAvKiBtYXggYml0cyBmb3IgZGlzdGFuY2UgY29kZSAqLworCWUgPSAodCA9IHRkICsgKCh1SW50KWIgJiBtZCkpLT5leG9wOworCWRvIHsKKwkgIERVTVBCSVRTKHQtPmJpdHMpCisJICBpZiAoZSAmIDE2KQorCSAgeworCSAgICAvKiBnZXQgZXh0cmEgYml0cyB0byBhZGQgdG8gZGlzdGFuY2UgYmFzZSAqLworCSAgICBlICY9IDE1OworCSAgICBHUkFCQklUUyhlKSAgICAgICAgIC8qIGdldCBleHRyYSBiaXRzICh1cCB0byAxMykgKi8KKwkgICAgZCA9IHQtPmJhc2UgKyAoKHVJbnQpYiAmIGluZmxhdGVfbWFza1tlXSk7CisJICAgIERVTVBCSVRTKGUpCisJICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgKiBkaXN0YW5jZSAldVxuIiwgZCkpOwogCi0gICAgICAgICAgICAvKiBkbyB0aGUgY29weSAqLwotICAgICAgICAgICAgbSAtPSBjOwotICAgICAgICAgICAgaWYgKCh1SW50KShxIC0gcy0+d2luZG93KSA+PSBkKSAgICAgLyogb2Zmc2V0IGJlZm9yZSBkZXN0ICovCi0gICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAganVzdCBjb3B5ICovCi0gICAgICAgICAgICAgIHIgPSBxIC0gZDsKLSAgICAgICAgICAgICAgKnErKyA9ICpyKys7ICBjLS07ICAgICAgICAvKiBtaW5pbXVtIGNvdW50IGlzIHRocmVlLCAqLwotICAgICAgICAgICAgICAqcSsrID0gKnIrKzsgIGMtLTsgICAgICAgIC8qICBzbyB1bnJvbGwgbG9vcCBhIGxpdHRsZSAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVsc2Ugb2Zmc2V0IGFmdGVyIGRlc3RpbmF0aW9uICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGUgPSBkIC0gKHEgLSBzLT53aW5kb3cpOyAgLyogYnl0ZXMgZnJvbSBvZmZzZXQgdG8gZW5kICovCi0gICAgICAgICAgICAgIHIgPSBzLT5lbmQgLSBlOyAgICAgICAgICAgLyogcG9pbnRlciB0byBvZmZzZXQgKi8KLSAgICAgICAgICAgICAgaWYgKGMgPiBlKSAgICAgICAgICAgICAgICAvKiBpZiBzb3VyY2UgY3Jvc3NlcywgKi8KLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGMgLT0gZTsgICAgICAgICAgICAgICAgIC8qIGNvcHkgdG8gZW5kIG9mIHdpbmRvdyAqLwotICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICpxKysgPSAqcisrOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tZSk7Ci0gICAgICAgICAgICAgICAgciA9IHMtPndpbmRvdzsgICAgICAgICAgLyogY29weSByZXN0IGZyb20gc3RhcnQgb2Ygd2luZG93ICovCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3B5IGFsbCBvciB3aGF0J3MgbGVmdCAqLwotICAgICAgICAgICAgICAqcSsrID0gKnIrKzsKLSAgICAgICAgICAgIH0gd2hpbGUgKC0tYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZSBpZiAoKGUgJiA2NCkgPT0gMCkKLSAgICAgICAgICAgIGUgPSAodCA9IHQtPm5leHQgKyAoKHVJbnQpYiAmIGluZmxhdGVfbWFza1tlXSkpLT5leG9wOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB6LT5tc2cgPSAiaW52YWxpZCBkaXN0YW5jZSBjb2RlIjsKLSAgICAgICAgICAgIFVOR1JBQgotICAgICAgICAgICAgVVBEQVRFCi0gICAgICAgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOwotICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoMSk7Ci0gICAgICAgIGJyZWFrOworCSAgICAvKiBkbyB0aGUgY29weSAqLworCSAgICBtIC09IGM7CisJICAgIGlmICgodUludCkocSAtIHMtPndpbmRvdykgPj0gZCkgICAgIC8qIG9mZnNldCBiZWZvcmUgZGVzdCAqLworCSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAganVzdCBjb3B5ICovCisJICAgICAgciA9IHEgLSBkOworCSAgICAgICpxKysgPSAqcisrOyAgYy0tOyAgICAgICAgLyogbWluaW11bSBjb3VudCBpcyB0aHJlZSwgKi8KKwkgICAgICAqcSsrID0gKnIrKzsgIGMtLTsgICAgICAgIC8qICBzbyB1bnJvbGwgbG9vcCBhIGxpdHRsZSAqLworCSAgICB9CisJICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbHNlIG9mZnNldCBhZnRlciBkZXN0aW5hdGlvbiAqLworCSAgICB7CisJICAgICAgZSA9IGQgLSAocSAtIHMtPndpbmRvdyk7ICAvKiBieXRlcyBmcm9tIG9mZnNldCB0byBlbmQgKi8KKwkgICAgICByID0gcy0+ZW5kIC0gZTsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gb2Zmc2V0ICovCisJICAgICAgaWYgKGMgPiBlKSAgICAgICAgICAgICAgICAvKiBpZiBzb3VyY2UgY3Jvc3NlcywgKi8KKwkgICAgICB7CisJCWMgLT0gZTsgICAgICAgICAgICAgICAgIC8qIGNvcHkgdG8gZW5kIG9mIHdpbmRvdyAqLworCQlkbyB7CisJCSAgKnErKyA9ICpyKys7CisJCX0gd2hpbGUgKC0tZSk7CisJCXIgPSBzLT53aW5kb3c7ICAgICAgICAgIC8qIGNvcHkgcmVzdCBmcm9tIHN0YXJ0IG9mIHdpbmRvdyAqLworCSAgICAgIH0KKwkgICAgfQorCSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogY29weSBhbGwgb3Igd2hhdCdzIGxlZnQgKi8KKwkgICAgICAqcSsrID0gKnIrKzsKKwkgICAgfSB3aGlsZSAoLS1jKTsKKwkgICAgYnJlYWs7CisJICB9CisJICBlbHNlIGlmICgoZSAmIDY0KSA9PSAwKQorCSAgICBlID0gKHQgPSB0LT5uZXh0ICsgKCh1SW50KWIgJiBpbmZsYXRlX21hc2tbZV0pKS0+ZXhvcDsKKwkgIGVsc2UKKwkgIHsKKwkgICAgei0+bXNnID0gImludmFsaWQgZGlzdGFuY2UgY29kZSI7CisJICAgIFVOR1JBQgorCSAgICBVUERBVEUKKwkgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKKwkgIH0KKwl9IHdoaWxlICgxKTsKKwlicmVhazsKICAgICAgIH0KICAgICAgIGlmICgoZSAmIDY0KSA9PSAwKQogICAgICAgewotICAgICAgICBpZiAoKGUgPSAodCA9IHQtPm5leHQgKyAoKHVJbnQpYiAmIGluZmxhdGVfbWFza1tlXSkpLT5leG9wKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgRFVNUEJJVFModC0+Yml0cykKLSAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsIHQtPmJhc2UgPj0gMHgyMCAmJiB0LT5iYXNlIDwgMHg3ZiA/Ci0gICAgICAgICAgICAgICAgICAgICJpbmZsYXRlOiAgICAgICAgICogbGl0ZXJhbCAnJWMnXG4iIDoKLSAgICAgICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgKiBsaXRlcmFsIDB4JTAyeFxuIiwgdC0+YmFzZSkpOwotICAgICAgICAgICpxKysgPSAoQnl0ZSl0LT5iYXNlOwotICAgICAgICAgIG0tLTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCWlmICgoZSA9ICh0ID0gdC0+bmV4dCArICgodUludCliICYgaW5mbGF0ZV9tYXNrW2VdKSktPmV4b3ApID09IDApCisJeworCSAgRFVNUEJJVFModC0+Yml0cykKKwkgIFRyYWNldnYoKHN0ZGVyciwgdC0+YmFzZSA+PSAweDIwICYmIHQtPmJhc2UgPCAweDdmID8KKwkJICAgICJpbmZsYXRlOiAgICAgICAgICogbGl0ZXJhbCAnJWMnXG4iIDoKKwkJICAgICJpbmZsYXRlOiAgICAgICAgICogbGl0ZXJhbCAweCUwMnhcbiIsIHQtPmJhc2UpKTsKKwkgICpxKysgPSAoQnl0ZSl0LT5iYXNlOworCSAgbS0tOworCSAgYnJlYWs7CisJfQogICAgICAgfQogICAgICAgZWxzZSBpZiAoZSAmIDMyKQogICAgICAgewotICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgICogZW5kIG9mIGJsb2NrXG4iKSk7Ci0gICAgICAgIFVOR1JBQgotICAgICAgICBVUERBVEUKLSAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VORDsKKwlUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgICogZW5kIG9mIGJsb2NrXG4iKSk7CisJVU5HUkFCCisJVVBEQVRFCisJcmV0dXJuIFpfU1RSRUFNX0VORDsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgei0+bXNnID0gImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSI7Ci0gICAgICAgIFVOR1JBQgotICAgICAgICBVUERBVEUKLSAgICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKKwl6LT5tc2cgPSAiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIjsKKwlVTkdSQUIKKwlVUERBVEUKKwlyZXR1cm4gWl9EQVRBX0VSUk9SOwogICAgICAgfQogICAgIH0gd2hpbGUgKDEpOwogICB9IHdoaWxlIChtID49IDI1OCAmJiBuID49IDEwKTsKQEAgLTIxNDUsMTcgKzIxNDUsMTcgQEAKICAgICBpZiAoYnVmID09IFpfTlVMTCkgcmV0dXJuIDFMOwogCiAgICAgd2hpbGUgKGxlbiA+IDApIHsKLSAgICAgICAgayA9IGxlbiA8IE5NQVggPyBsZW4gOiBOTUFYOwotICAgICAgICBsZW4gLT0gazsKLSAgICAgICAgd2hpbGUgKGsgPj0gMTYpIHsKLSAgICAgICAgICAgIERPMTYoYnVmKTsKLSAgICAgICAgICAgIGsgLT0gMTY7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGsgIT0gMCkgZG8gewotICAgICAgICAgICAgRE8xKGJ1Zik7Ci0gICAgICAgIH0gd2hpbGUgKC0tayk7Ci0gICAgICAgIHMxICU9IEJBU0U7Ci0gICAgICAgIHMyICU9IEJBU0U7CisJayA9IGxlbiA8IE5NQVggPyBsZW4gOiBOTUFYOworCWxlbiAtPSBrOworCXdoaWxlIChrID49IDE2KSB7CisJICAgIERPMTYoYnVmKTsKKwkgICAgayAtPSAxNjsKKwl9CisJaWYgKGsgIT0gMCkgZG8geworCSAgICBETzEoYnVmKTsKKwl9IHdoaWxlICgtLWspOworCXMxICU9IEJBU0U7CisJczIgJT0gQkFTRTsKICAgICB9CiAgICAgcmV0dXJuIChzMiA8PCAxNikgfCBzMTsKIH0KZGlmZiAtLWdpdCBhL2xpYl9pMzg2L01ha2VmaWxlIGIvbGliX2kzODYvTWFrZWZpbGUKaW5kZXggNDdjNWQyYy4uZTU5MjVlNSAxMDA2NDQKLS0tIGEvbGliX2kzODYvTWFrZWZpbGUKKysrIGIvbGliX2kzODYvTWFrZWZpbGUKQEAgLTI1LDExICsyNSwxMSBAQAogCiBMSUIJPSBsaWIkKEFSQ0gpLmEKIAotQU9CSlMJPSBiaW9zLm8gYmlvc19wY2kubyByZWFsbW9kZV9zd2l0Y2gubyAKK0FPQkpTCT0gYmlvcy5vIGJpb3NfcGNpLm8gcmVhbG1vZGVfc3dpdGNoLm8KIAogQ09CSlMJPSBib2FyZC5vIGJpb3Nfc2V0dXAubyBpMzg2X2xpbnV4Lm8gemltYWdlLm8gcmVhbG1vZGUubyBcCi0JICBwY2lfdHlwZTEubyBwY2kubyB2aWRlb19iaW9zLm8gdmlkZW8ubyAgCi0JICAKKwkgIHBjaV90eXBlMS5vIHBjaS5vIHZpZGVvX2Jpb3MubyB2aWRlby5vCisKIE9CSlMJPSAkKEFPQkpTKSAkKENPQkpTKQogCiAkKExJQik6CS5kZXBlbmQgJChPQkpTKQpkaWZmIC0tZ2l0IGEvbGliX2kzODYvYmlvcy5TIGIvbGliX2kzODYvYmlvcy5TCmluZGV4IGNlNmU5NGMuLjQ2MDY0MTkgMTAwNjQ0Ci0tLSBhL2xpYl9pMzg2L2Jpb3MuUworKysgYi9saWJfaTM4Ni9iaW9zLlMKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDAyCiAgKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UKLSAqIAorICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgogICoKQEAgLTQ2LDkgKzQ2LDkgQEAKIC5zZWN0aW9uIC5iaW9zLCAiYXgiCiAuY29kZTE2CiAub3JnIDAKLSAgICAgIAkvKiBhIGNhbGwgdG8gZjAwMDowIHNob3VsZCB3YXJtYm9vdCAqLworCS8qIGEgY2FsbCB0byBmMDAwOjAgc2hvdWxkIHdhcm1ib290ICovCiAJam1wCXJlYWxtb2RlX3Jlc2V0Ci0JCisKIC5nbG9ibCBybV9pbnQwMAogcm1faW50MDA6CiAJcHVzaHcJJDAKQEAgLTE4MSwxOCArMTgxLDE4IEBACiBybV9kZWZfaW50OgogCWlyZXQKIAotIAorCiAJLyoKIAkgKiBBbGwgaW50ZXJydXB0IGp1bXB0YWJsZSBlbnRyaWVzIGp1bXAgdG8gaGVyZQogCSAqIGFmdGVyIHB1c2hpbmcgdGhlIGludGVycnVwdCB2ZWN0b3IgbnVtYmVyIG9udG8gdGhlCiAJICogc3RhY2suCiAJICovCiBhbnlfaW50ZXJydXB0MTY6Ci0gICAgICAgIE1BS0VfQklPU19TVEFDSworCU1BS0VfQklPU19TVEFDSwogCiBncwltb3Z3CU9GRlNfVkVDVE9SKCVicCksICVheAogCWNtcHcJJDB4MTAsICVheAotCWplCUxpbnRfMTBoICAgICAgICAgCisJamUJTGludF8xMGgKIAljbXB3CSQweDExLCAlYXgKIAlqZQlMaW50XzExaAogCWNtcHcJJDB4MTIsICVheApAQCAtMjEwLDEwICsyMTAsMTAgQEAKIExpbnRfMTBoOgkJCQkJLyogVkdBIEJJT1Mgc2VydmljZXMgKi8KIAljYWxsCWJpb3NfMTBoCiAJam1wCUxvdXQKLUxpbnRfMTFoOgkKK0xpbnRfMTFoOgogCWNhbGwJYmlvc18xMWgKIAlqbXAJTG91dAotTGludF8xMmg6CQorTGludF8xMmg6CiAJY2FsbAliaW9zXzEyaAogCWptcAlMb3V0CiBMaW50XzEzaDoJCQkJCS8qIEJJT1MgZGlzayBzZXJ2aWNlcyAqLwpAQCAtMjI4LDEzICsyMjgsMTMgQEAKIExpbnRfMWFoOgkJCQkJLyogUENJIGJpb3MgKi8KIAljYWxsCWJpb3NfMWFoCiAJam1wCUxvdXQKLUxvdXQ6CQorTG91dDoKIAljbXB3CSQwLCAlYXgKIAlqZQlMaGFuZGVsZWQKLQkKKwogCS8qIEluc2VydCBjb2RlIGZvciB1bmhhbmRlbGVkIElOVHMgaGVyZS4KIAkgKgotCSAqIFJPTE8gcHJpbnRzIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZSAKKwkgKiBST0xPIHByaW50cyBhIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUKIAkgKiAod2UgY291bGQgZG8gdGhhdCBidXQgdGhlbiB3ZSdyZSBpbiAxNmJpdCBtb2RlCiAJICogc28gd2UnbGwgaGF2ZSB0byBnZXQgYmFjayBpbnRvIDMyYml0IG1vZGUKIAkgKiB0byB1c2UgdGhlIGNvbnNvbGUgSS9PIHJvdXRpbmVzIChpZiB3ZSBkbyB0aGlzCkBAIC0yODYsNyArMjg2LDcgQEAKIAogYmlvc18xMWg6CiBjcwltb3Z3CWJpb3NfZXF1aXBtZW50LCAlYXgKLWdzCW1vdncJJWF4LCBPRkZTX0FYKCVicCkgIAorZ3MJbW92dwklYXgsIE9GRlNfQVgoJWJwKQogCXhvcncJJWF4LCAlYXgKIAlyZXQKIApAQCAtMzI3LDE0ICszMjcsMTMgQEAKIAlqZQlMZnVuY18xNWgKIAltb3Z3CSQweGZmZmYsICVheAogCXJldAotTGZ1bmNfMTVoOgkKK0xmdW5jXzE1aDoKIGdzCW1vdncJT0ZGU19BWCglYnApLCAlYXgKIAlhbmR3CSQweGZmLCAlYXgJCQkvKiByZXR1cm4gQUg9MC0+ZHJpdmUgbm90IHByZXNlbnQgKi8KIGdzCW1vdncJJWF4LCBPRkZTX0FYKCVicCkKIAl4b3J3CSVheCwgJWF4CiAJcmV0Ci0JCi0JCisKIAogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzU5LDcgKzM1OCw3IEBACiBncwltb3Z3CSVheCwgT0ZGU19GTEFHUyglYnApCiAJeG9ydwklYXgsICVheAogCXJldAotCQorCiBMZnVuY19lOGg6CiBncwltb3Z3CU9GRlNfQVgoJWJwKSwgJWF4CiAJYW5kdwkkMHhmZiwgJWF4CkBAIC0zNzAsMzEgKzM2OSwzMSBAQAogZ3MJbW92dwklYXgsIE9GRlNfRkxBR1MoJWJwKQogCXhvcncJJWF4LCAlYXgKIAlyZXQKLQkKKwogTGZ1bmNfZTgwMWg6CQkJCQkvKiBHZXQgbWVtb3J5IHNpemUgZm9yID42NE0gQ29uZmlndXJhdGlvbnMgKi8KIGNzCW1vdncJcmFtX2luXzY0a2JfY2h1bmtzLCAlYXgKIAljbXB3CSQweDEwMCwgJWF4CiAJamEJZTgwMV9tb3JlX3RoYW5fMTZtYgogCXNobHcJJDYsICVheAkJCQkvKiBtdWx0aXBseSBieSA2NCAqLwogCXN1YncJJDB4NDAwLCAlYXgJCQkvKiAxc3QgbWVnIGRvZXMgbm90IGNvdW50ICovCi0gCQorCiBncwltb3Z3CSVheCwgT0ZGU19BWCglYnApICAgCQkvKiByZXR1cm4gbWVtb3J5IHNpemUgYmV0d2VlbiAxTSBhbmQgMTZNIGluIDFrYiBjaHVua3MgaW4gQVggYW5kIENYICovCiBncwltb3Z3CSVheCwgT0ZGU19DWCglYnApCiBncwltb3Z3CSQwLCBPRkZTX0JYKCVicCkJCS8qIHNldCBCWCBhbmQgRFggdG8gMCovCi1ncwltb3Z3CSQwLCBPRkZTX0RYKCVicCkJCitncwltb3Z3CSQwLCBPRkZTX0RYKCVicCkKIGdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKIAlhbmR3CSQweGZmZmUsICVheAkJCS8qIGNsZWFyIGNhcnJ5IC0tIGZ1bmN0aW9uIHN1Y2NlZWRlZCAqLwogZ3MJbW92dwklYXgsIE9GRlNfRkxBR1MoJWJwKQogCXhvcncJJWF4LCAlYXgKIAlyZXQKLQkKKwogZTgwMV9tb3JlX3RoYW5fMTZtYjoKLQlzdWJ3CSQweDEwMCwgJWF4CQkJLyogc3VidHJhY3QgMTZNQiAqLwkKLQkKKwlzdWJ3CSQweDEwMCwgJWF4CQkJLyogc3VidHJhY3QgMTZNQiAqLworCiBncwltb3Z3CSQweDNjMDAsIE9GRlNfQVgoJWJwKQkJLyogcmV0dXJuIDB4M2MwMCAoMTZNQi0xTUIpIGluIEFYIGFuZCBDWCAqLwogZ3MJbW92dwkkMHgzYzAwLCBPRkZTX0NYKCVicCkKIGdzCW1vdncJJWF4LCBPRkZTX0JYKCVicCkJCS8qIHNldCBCWCBhbmQgRFggdG8gbnVtYmVyIG9mIDY0a2IgY2h1bmtzIGFib3ZlIDE2TUIgKi8KLWdzCW1vdncJJWF4LCBPRkZTX0RYKCVicCkJCitncwltb3Z3CSVheCwgT0ZGU19EWCglYnApCiAKIGdzCW1vdncJT0ZGU19GTEFHUyglYnApLCAlYXgKIAlhbmR3CSQweGZmZmUsICVheAkJCS8qIGNsZWFyIGNhcnJ5IC0tIGZ1bmN0aW9uIHN1Y2NlZWRlZCAqLwpAQCAtNDEwLDcgKzQwOSw3IEBACiBiODhfbm90X21vcmVfdGhhbjE2OgogCXNobHcJJDYsICVheAogCXN1YncJJDB4NDAwLCAlYXgJCQkvKiAxc3QgbWVnIGRvZXMgbm90IGNvdW50ICovCi0JCQorCiBncwltb3Z3CSVheCwgT0ZGU19BWCglYnApCQkvKiByZXR1cm4gbnVtYmVyIG9mIGtpbG9ieXRlcyBiZXR3ZWVuIDE2TUIgYW5kIDE2TUIgaW4gYXggKi8KIAogZ3MJbW92dwlPRkZTX0ZMQUdTKCVicCksICVheApAQCAtNDYxLDQgKzQ2MCwzIEBACiAuZ2xvYmwgYmlvc19lcXVpcG1lbnQKIGJpb3NfZXF1aXBtZW50OgogCS53b3JkIAkwCi0KZGlmZiAtLWdpdCBhL2xpYl9pMzg2L2Jpb3MuaCBiL2xpYl9pMzg2L2Jpb3MuaAppbmRleCA4NzZmZTMxLi41OTE0M2RkIDEwMDY0NAotLS0gYS9saWJfaTM4Ni9iaW9zLmgKKysrIGIvbGliX2kzODYvYmlvcy5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlCi0gKiAKKyAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KICAqCkBAIC0yOCw5ICsyOCw5IEBACiAjZGVmaW5lIE9GRlNfR1MgICAgICAyICAgICAvKiAxNmJpdCAqLwogI2RlZmluZSBPRkZTX0RTICAgICAgNCAgICAgLyogMTZiaXQgKi8KICNkZWZpbmUgT0ZGU19FREkgICAgIDYgICAgIC8qIDMyYml0ICovCi0jZGVmaW5lIE9GRlNfREkgICAgICA2ICAgICAvKiBsb3cgMTYgYml0cyBvZiBFREkgKi8gICAKKyNkZWZpbmUgT0ZGU19ESSAgICAgIDYgICAgIC8qIGxvdyAxNiBiaXRzIG9mIEVESSAqLwogI2RlZmluZSBPRkZTX0VTSSAgICAgMTAgICAgLyogMzJiaXQgKi8KLSNkZWZpbmUgT0ZGU19TSSAgICAgIDEwICAgIC8qIGxvdyAxNiBiaXRzIG9mIEVTSSAqLyAgIAorI2RlZmluZSBPRkZTX1NJICAgICAgMTAgICAgLyogbG93IDE2IGJpdHMgb2YgRVNJICovCiAjZGVmaW5lIE9GRlNfRUJQICAgICAxNCAgICAvKiAzMmJpdCAqLwogI2RlZmluZSBPRkZTX0JQICAgICAgMTQgICAgLyogbG93IDE2IGJpdHMgb2YgRUJQICovCiAjZGVmaW5lIE9GRlNfRVNQICAgICAxOCAgICAvKiAzMmJpdCAqLwpAQCAtNTQsNyArNTQsNyBAQAogI2RlZmluZSBPRkZTX1ZFQ1RPUiAgMzggICAgLyogMTZiaXQgKi8KICNkZWZpbmUgT0ZGU19JUCAgICAgIDQwICAgIC8qIDE2Yml0ICovCiAjZGVmaW5lIE9GRlNfQ1MgICAgICA0MiAgICAvKiAxNmJpdCAqLwotI2RlZmluZSBPRkZTX0ZMQUdTICAgNDQgICAgLyogMTZiaXQgKi8gICAKKyNkZWZpbmUgT0ZGU19GTEFHUyAgIDQ0ICAgIC8qIDE2Yml0ICovCiAKICNkZWZpbmUgU0VHTUVOVCAgICAgIDB4NDAKICNkZWZpbmUgU1RBQ0sJICAgICAweDgwMCAgCQkJLyogc3RhY2sgYXQgMHg0MDoweDgwMCAtPiAweDgwMCAqLwpAQCAtNjMsOSArNjMsOSBAQAogLyogc2F2ZSBzb21lIHNlZ21lbnRzICAgICAqLwogLyogc2F2ZSBjYWxsZXJzIHN0YWNrIHNlZ21lbnQgLi4gKi8KIC8qIC4uLiBpbiBncyAqLwotCS8qIHNldHVwIG15IHNlZ21lbnRzICovIAotCS8qIHNldHVwIEJJT1Mgc3RhY2twb2ludGVyICovIAotCQorCS8qIHNldHVwIG15IHNlZ21lbnRzICovCisJLyogc2V0dXAgQklPUyBzdGFja3BvaW50ZXIgKi8KKwogI2RlZmluZSBNQUtFX0JJT1NfU1RBQ0sgXAogCXB1c2hhbAkJOyBcCiAJcHVzaHcJJWRzCTsgXApAQCAtODksNiArODksNiBAQAogCXBvcHcJJWdzICAgICA7IFwKIAlwb3B3CSVkcyAgICAgOyBcCiAJCVwKLQlwb3BhbAkJCQkJLyogcmVzdG9yZSBHUCByZWdpc3RlcnMgKi8gCisJcG9wYWwJCQkJCS8qIHJlc3RvcmUgR1AgcmVnaXN0ZXJzICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliX2kzODYvYmlvc19wY2kuUyBiL2xpYl9pMzg2L2Jpb3NfcGNpLlMKaW5kZXggZTUzNzkxYS4uYjU3YjcyNiAxMDA2NDQKLS0tIGEvbGliX2kzODYvYmlvc19wY2kuUworKysgYi9saWJfaTM4Ni9iaW9zX3BjaS5TCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlCi0gKiAKKyAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KICAqCkBAIC0yMywxMCArMjMsMTAgQEAKIAogLyoKICAqIHg4NiByZWFsbW9kZSBhc3NlbWJseSBpbXBsZW1lbnRhdGlvbiBvZiBhIFBDSSBCSU9TCi0gKiBmb3IgcGxhdGZvcm1zIHRoYXQgdXNlIG9uZSBQQ0kgaG9zZSBhbmQgY29uZmlndXJhdGlvbiAKKyAqIGZvciBwbGF0Zm9ybXMgdGhhdCB1c2Ugb25lIFBDSSBob3NlIGFuZCBjb25maWd1cmF0aW9uCiAgKiBhY2Nlc3MgdHlwZSAxLiAoVGhlIGNvbW1vbiBjYXNlIGZvciBsb3ctZW5kIFBDJ3MpCiAgKi8KLSAKKwogI2luY2x1ZGUgImJpb3MuaCIKIAogI2RlZmluZSBQQ0lfQklPU19ERUJVRwpAQCAtMzksOCArMzksOCBAQAogCWNhbGwgcmVhbG1vZGVfcGNpX2Jpb3MKIAlSRVNUT1JFX0NBTExFUlNfU1RBQ0sKIAlyZXQKLQkKLQkKKworCiAuZ2xvYmwgcmVhbG1vZGVfcGNpX2Jpb3MKIHJlYWxtb2RlX3BjaV9iaW9zOgogZ3MJbW92dwlPRkZTX0FYKCVicCksICVheApAQCAtNjksNyArNjksNyBAQAogCWNtcGIJJDE1LCAlYWwKIAlqZQlwY2lfYmlvc19zZXRfaXJxCiAJam1wCXVua25vd25fZnVuY3Rpb24KLQkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBwY2lfYmlvc19wcmVzZW50OgpAQCAtNzcsMzEgKzc3LDMxIEBACiBjcwlpbmNsCW51bV9wY2lfYmlvc19wcmVzZW50CiAjZW5kaWYKIAltb3ZsCSQweDIwNDk0MzUwLCAlZWF4Ci1ncwltb3ZsCSVlYXgsIE9GRlNfRURYKCVicCkJCitncwltb3ZsCSVlYXgsIE9GRlNfRURYKCVicCkKIAltb3ZiCSQweDAxLCAlYWwKLWdzCW1vdmIJJWFsLCBPRkZTX0FMKCVicCkJLyogV2Ugc3VwcG9ydCBjZmcgdHlwZSAxICovIAotCW1vdncJJDB4MDIxMCwgJWF4ICAgICAgICAgICAgLyogdmVyc2lvbiAyLjEwICovCQotZ3MJbW92dwklYXgsIE9GRlNfQlgoJWJwKQkKK2dzCW1vdmIJJWFsLCBPRkZTX0FMKCVicCkJLyogV2Ugc3VwcG9ydCBjZmcgdHlwZSAxICovCisJbW92dwkkMHgwMjEwLCAlYXggICAgICAgICAgICAvKiB2ZXJzaW9uIDIuMTAgKi8KK2dzCW1vdncJJWF4LCBPRkZTX0JYKCVicCkKIGNzCW1vdmIJcGNpX2xhc3RfYnVzLCAlYWwgICAgICAgLyogbGFzdCBidXMgbnVtYmVyICovCi1ncwltb3ZiCSVhbCwgT0ZGU19DTCglYnApCQorZ3MJbW92YgklYWwsIE9GRlNfQ0woJWJwKQogCWptcCAJY2xlYXJfY2FycnkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBkZXZpY2UgMC0zMSwgZnVuY3Rpb24gMC03ICovCi1wY2lfYmlvc19maW5kX2RldmljZToJCitwY2lfYmlvc19maW5kX2RldmljZToKICNpZmRlZiBQQ0lfQklPU19ERUJVRwogY3MJaW5jbCAJbnVtX3BjaV9iaW9zX2ZpbmRfZGV2aWNlCiAjZW5kaWYKLWdzCW1vdncJT0ZGU19DWCglYnApLCAlZGkgCitncwltb3Z3CU9GRlNfQ1goJWJwKSwgJWRpCiAJc2hsbAkkMTYsICVlZGkKLWdzCW1vdncJT0ZGU19EWCglYnApLCAlZGkgICAgICAgLyogZWRpIG5vdyBob2xkcyBkZXZpY2UgaW4gdXBwZXIgMTYgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYml0cyBhbmQgdmVuZG9yIGluIGxvd2VyIDE2IGJpdHMgKi8KLWdzCW1vdncJT0ZGU19TSSglYnApLCAlc2kgCQorZ3MJbW92dwlPRkZTX0RYKCVicCksICVkaSAgICAgICAvKiBlZGkgbm93IGhvbGRzIGRldmljZSBpbiB1cHBlciAxNgorCQkJCQkgKiBiaXRzIGFuZCB2ZW5kb3IgaW4gbG93ZXIgMTYgYml0cyAqLworZ3MJbW92dwlPRkZTX1NJKCVicCksICVzaQogCXhvcncJJWJ4LCAlYnggICAgICAgICAgICAgICAgLyogc3RhcnQgYXQgYnVzIDAgZGV2IDAgZnVuY3Rpb24gMCAqLwotcGZkX2xvb3A6CQotCXhvcncJJWF4LCAlYXgJCS8qIGR3b3JkIDAgaXMgdmVuZG9yL2RldmljZSAqLwkKLQljYWxsCV9fcGNpX2Jpb3Nfc2VsZWN0X3JlZ2lzdGVyCQkKK3BmZF9sb29wOgorCXhvcncJJWF4LCAlYXgJCS8qIGR3b3JkIDAgaXMgdmVuZG9yL2RldmljZSAqLworCWNhbGwJX19wY2lfYmlvc19zZWxlY3RfcmVnaXN0ZXIKIAltb3Z3CSQweGNmYywgJWR4CiAJaW5sCSVkeCwgJWVheAogCWNtcGwJJWVkaSwgJWVheAkJLyogb3VyIGRldmljZSA/ICovCkBAIC0xMTEsOCArMTExLDggQEAKIAltb3Z3CSVieCwgJWF4CiAJYW5kdwkkMywgJWF4CiAJam56CXBmZF9mdW5jdGlvbl9ub3RfemVybwotCW1vdncJJDB4MDAwYywgJWF4CQotCWNhbGwJX19wY2lfYmlvc19zZWxlY3RfcmVnaXN0ZXIJCQorCW1vdncJJDB4MDAwYywgJWF4CisJY2FsbAlfX3BjaV9iaW9zX3NlbGVjdF9yZWdpc3RlcgogCW1vdncJJDB4Y2ZlLCAlZHgKIAlpbmIJJWR4LCAlYWwKIAlhbmRiCSQweDgwLCAlYWwKQEAgLTEyMSwxMSArMTIxLDExIEBACiAJaW5jdwklYngJCQkvKiBuZXh0IGZ1bmN0aW9uLCBvdmVyZmxvd3MgaW4gdG8KIAkJCQkJICogZGV2aWNlIG51bWJlciwgdGhlbiBidXMgbnVtYmVyICovCiAJam1wCXBmZF9jaGVja19idXMKLQkKKwogcGZkX25vdF9tdWx0aV9mdW5jdGlvbjoKIAlhbmR3CSQweGZmZjgsICVieCAgICAgICAgICAgIC8qIHJlbW92ZSBmdW5jdGlvbiBiaXRzICovCiAJYWRkdwkkMHgwMDA4LCAlYnggICAgICAgICAgICAvKiBuZXh0IGRldmljZSwgb3ZlcmZsb3dzIGluIHRvIGJ1cyBudW1iZXIgKi8KLXBmZF9jaGVja19idXM6CQorcGZkX2NoZWNrX2J1czoKIGNzCW1vdmIJcGNpX2xhc3RfYnVzLCAlYWgKIAljbXBiCSVhaCwgJWJoCiAJamEJcGZkX25vdF9mb3VuZApAQCAtMTM2LDcgKzEzNiw3IEBACiAJam1wCXBmZF9uZXh0X2RldgogCiBwZmRfZG9uZToKLWdzCW1vdncJJWJ4LCBPRkZTX0JYKCVicCkgCitncwltb3Z3CSVieCwgT0ZGU19CWCglYnApCiAJam1wCWNsZWFyX2NhcnJ5CiAKIHBmZF9ub3RfZm91bmQ6CkBAIC0xNDksMTMgKzE0OSwxMyBAQAogI2lmZGVmIFBDSV9CSU9TX0RFQlVHCiBjcwlpbmNsCW51bV9wY2lfYmlvc19maW5kX2NsYXNzCiAjZW5kaWYKLWdzCW1vdmwJT0ZGU19FQ1goJWJwKSwgJWVkaSAKLQlhbmRsCSQweDAwZmZmZmZmLCAlZWRpICAgICAgIC8qIGVkaSBub3cgaG9sZHMgY2xhc3MtY29kZSBpbiBsb3dlciAyNCBiaXRzICovIAotZ3MJbW92dwlPRkZTX1NJKCVicCksICVzaSAJCitncwltb3ZsCU9GRlNfRUNYKCVicCksICVlZGkKKwlhbmRsCSQweDAwZmZmZmZmLCAlZWRpICAgICAgIC8qIGVkaSBub3cgaG9sZHMgY2xhc3MtY29kZSBpbiBsb3dlciAyNCBiaXRzICovCitncwltb3Z3CU9GRlNfU0koJWJwKSwgJXNpCiAJeG9ydwklYngsICVieCAgICAgICAgICAgICAgICAvKiBzdGFydCBhdCBidXMgMCBkZXYgMCBmdW5jdGlvbiAwICovCi1wZmNfbG9vcDoJCi0JbW92dwkkOCwgJWF4CQkJLyogZHdvcmQgOCBpcyBjbGFzcy1jb2RlIGhpZ2ggMjRiaXRzICovCQotCWNhbGwJX19wY2lfYmlvc19zZWxlY3RfcmVnaXN0ZXIJCQorcGZjX2xvb3A6CisJbW92dwkkOCwgJWF4CQkJLyogZHdvcmQgOCBpcyBjbGFzcy1jb2RlIGhpZ2ggMjRiaXRzICovCisJY2FsbAlfX3BjaV9iaW9zX3NlbGVjdF9yZWdpc3RlcgogCW1vdncJJDB4Y2ZjLCAlZHgKIAlpbmwJJWR4LCAlZWF4CiAJc2hybAkkOCwgJWVheApAQCAtMTY2LDggKzE2Niw4IEBACiAJLyogY2hlY2sgZm9yIG11bHRpIGZ1bmN0aW9uIGRldmljZXMgKi8KIAlhbmR3CSQzLCAlYngKIAlqbnoJcGZjX2Z1bmN0aW9uX25vdF96ZXJvCi0JbW92dwkkMHgwMDBjLCAlYXgJCi0JY2FsbAlfX3BjaV9iaW9zX3NlbGVjdF9yZWdpc3RlcgkJCisJbW92dwkkMHgwMDBjLCAlYXgKKwljYWxsCV9fcGNpX2Jpb3Nfc2VsZWN0X3JlZ2lzdGVyCiAJbW92dwkkMHhjZmUsICVkeAogCWluYgklZHgsICVhbAogCWFuZGIJJDB4ODAsICVhbApAQCAtMTc2LDExICsxNzYsMTEgQEAKIAlpbmN3CSVieAkJCS8qIG5leHQgZnVuY3Rpb24sIG92ZXJmbG93cyBpbiB0bwogCQkJCQkgKiBkZXZpY2UgbnVtYmVyLCB0aGVuIGJ1cyBudW1iZXIgKi8KIAlqbXAJcGZjX2NoZWNrX2J1cwotCQorCiBwZmNfbm90X211bHRpX2Z1bmN0aW9uOgogCWFuZHcJJDB4ZmZmOCwgJWJ4ICAgICAgICAgICAgLyogcmVtb3ZlIGZ1bmN0aW9uIGJpdHMgKi8KIAlhZGR3CSQweDAwMDgsICVieCAgICAgICAgICAgIC8qIG5leHQgZGV2aWNlLCBvdmVyZmxvd3MgaW4gdG8gYnVzIG51bWJlciAqLwotcGZjX2NoZWNrX2J1czoJCitwZmNfY2hlY2tfYnVzOgogY3MJbW92YglwY2lfbGFzdF9idXMsICVhaAogCWNtcGIJJWFoLCAlYmgKIAlqYQlwZmNfbm90X2ZvdW5kCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlqbXAJcGZjX25leHRfZGV2CiAKIHBmY19kb25lOgotZ3MJbW92dwklYngsIE9GRlNfQlgoJWJwKSAKK2dzCW1vdncJJWJ4LCBPRkZTX0JYKCVicCkKIAlqbXAJY2xlYXJfY2FycnkKIAogcGZjX25vdF9mb3VuZDoKQEAgLTIwNiwyNCArMjA2LDI0IEBACiAjZW5kaWYKIAltb3ZiCSQweDgxLCAlYWggICAgICAgICAgICAgIC8qIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KIAlqbXAJc2V0X2NhcnJ5Ci0JCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotcGNpX2Jpb3NfcmVhZF9jZmdfYnl0ZTogCitwY2lfYmlvc19yZWFkX2NmZ19ieXRlOgogI2lmZGVmIFBDSV9CSU9TX0RFQlVHCiBjcwlpbmNsCW51bV9wY2lfYmlvc19yZWFkX2NmZ19ieXRlCiAjZW5kaWYKLQljYWxsCXBjaV9iaW9zX3NlbGVjdF9yZWdpc3RlcgkKKwljYWxsCXBjaV9iaW9zX3NlbGVjdF9yZWdpc3RlcgogZ3MJbW92dyAJT0ZGU19ESSglYnApLCAlZHgKIAlhbmR3CSQzLCAlZHgKIAlhZGR3CSQweGNmYywgJWR4CiAJaW5iCSVkeCwgJWFsCi1ncwltb3ZiCSVhbCwgT0ZGU19DTCglYnApCSAgIAorZ3MJbW92YgklYWwsIE9GRlNfQ0woJWJwKQogCWptcCAJY2xlYXJfY2FycnkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1wY2lfYmlvc19yZWFkX2NmZ193b3JkOiAKK3BjaV9iaW9zX3JlYWRfY2ZnX3dvcmQ6CiAjaWZkZWYgUENJX0JJT1NfREVCVUcKIGNzCWluY2wJbnVtX3BjaV9iaW9zX3JlYWRfY2ZnX3dvcmQKICNlbmRpZgpAQCAtMjMyLDIwICsyMzIsMjAgQEAKIAlhbmR3CSQyLCAlZHgKIAlhZGR3CSQweGNmYywgJWR4CiAJaW53CSVkeCwgJWF4Ci1ncwltb3Z3CSVheCwgT0ZGU19DWCglYnApCSAgIAorZ3MJbW92dwklYXgsIE9GRlNfQ1goJWJwKQogCWptcCAJY2xlYXJfY2FycnkKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXBjaV9iaW9zX3JlYWRfY2ZnX2R3b3JkOiAKK3BjaV9iaW9zX3JlYWRfY2ZnX2R3b3JkOgogI2lmZGVmIFBDSV9CSU9TX0RFQlVHCiBjcwlpbmNsCW51bV9wY2lfYmlvc19yZWFkX2NmZ19kd29yZAogI2VuZGlmCiAJY2FsbAlwY2lfYmlvc19zZWxlY3RfcmVnaXN0ZXIKIAltb3Z3CSQweGNmYywgJWR4CiAJaW5sCSVkeCwgJWVheAotZ3MJbW92bAklZWF4LCBPRkZTX0VDWCglYnApCSAgICAKK2dzCW1vdmwJJWVheCwgT0ZGU19FQ1goJWJwKQogCWptcCAJY2xlYXJfY2FycnkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjU0LDM1ICsyNTQsMzUgQEAKICNpZmRlZiBQQ0lfQklPU19ERUJVRwogY3MJaW5jbAludW1fcGNpX2Jpb3Nfd3JpdGVfY2ZnX2J5dGUKICNlbmRpZgotCWNhbGwJcGNpX2Jpb3Nfc2VsZWN0X3JlZ2lzdGVyCQorCWNhbGwJcGNpX2Jpb3Nfc2VsZWN0X3JlZ2lzdGVyCiBncwltb3Z3IAlPRkZTX0RJKCVicCksICVkeAogZ3MJbW92YglPRkZTX0NMKCVicCksICVhbAogCWFuZHcJJDMsICVkeAogCWFkZHcJJDB4Y2ZjLCAlZHgKIAlvdXRiCSVhbCwgJWR4CiAJam1wIAljbGVhcl9jYXJyeQotCQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBjaV9iaW9zX3dyaXRlX2NmZ193b3JkOgogI2lmZGVmIFBDSV9CSU9TX0RFQlVHCiBjcwlpbmNsCW51bV9wY2lfYmlvc193cml0ZV9jZmdfd29yZAogI2VuZGlmCi0JY2FsbAlwY2lfYmlvc19zZWxlY3RfcmVnaXN0ZXIJCisJY2FsbAlwY2lfYmlvc19zZWxlY3RfcmVnaXN0ZXIKIGdzCW1vdncgCU9GRlNfREkoJWJwKSwgJWR4CiBncwltb3Z3CU9GRlNfQ1goJWJwKSwgJWF4CiAJYW5kdwkkMiwgJWR4CiAJYWRkdwkkMHhjZmMsICVkeAogCW91dHcJJWF4LCAlZHgKIAlqbXAgCWNsZWFyX2NhcnJ5Ci0JCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogcGNpX2Jpb3Nfd3JpdGVfY2ZnX2R3b3JkOgogI2lmZGVmIFBDSV9CSU9TX0RFQlVHCiBjcwlpbmNsCW51bV9wY2lfYmlvc193cml0ZV9jZmdfZHdvcmQKICNlbmRpZgotCWNhbGwJcGNpX2Jpb3Nfc2VsZWN0X3JlZ2lzdGVyCQorCWNhbGwJcGNpX2Jpb3Nfc2VsZWN0X3JlZ2lzdGVyCiBncwltb3ZsCU9GRlNfRUNYKCVicCksICVlYXgKIAltb3Z3CSQweGNmYywgJWR4CiAJb3V0bAklZWF4LCAlZHgKQEAgLTI5Niw3ICsyOTYsNyBAQAogI2VuZGlmCiAJbW92YgkkMHg4MSwgJWFoICAgICAgICAgICAgICAvKiBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkICovCiAJam1wCXNldF9jYXJyeQotCQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBjaV9iaW9zX3NldF9pcnE6CkBAIC0zMTYsNyArMzE2LDcgQEAKIAlqbXAJc2V0X2NhcnJ5CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJCisKIHBjaV9iaW9zX3NlbGVjdF9yZWdpc3RlcjoKIGdzCW1vdncgCU9GRlNfQlgoJWJwKSwgJWJ4CiBncwltb3Z3IAlPRkZTX0RJKCVicCksICVheApAQCAtMzM5LDExICszMzksMTEgQEAKIAlhbmR3CSQweGZmZmUsICVheAkJCS8qIGNsZWFyIGNhcnJ5IC0tIGZ1bmN0aW9uIHN1Y2NlZWRlZCAqLwogZ3MJbW92dwklYXgsIE9GRlNfRkxBR1MoJWJwKQogCXhvcncJJWF4LCAlYXgKLWdzCW1vdmIJJWFoLCBPRkZTX0FIKCVicCkJCitncwltb3ZiCSVhaCwgT0ZGU19BSCglYnApCiAJcmV0CiAKIHNldF9jYXJyeToKLWdzCW1vdmIJJWFoLCBPRkZTX0FIKCVicCkJCitncwltb3ZiCSVhaCwgT0ZGU19BSCglYnApCiBncwltb3Z3CU9GRlNfRkxBR1MoJWJwKSwgJWF4CiAJb3J3CSQxLCAlYXgJCQkJLyogcmV0dXJuIGNhcnJ5IC0tIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KIGdzCW1vdncJJWF4LCBPRkZTX0ZMQUdTKCVicCkKQEAgLTM2MCw3ICszNjAsNyBAQAogLmdsb2JsIG51bV9wY2lfYmlvc19wcmVzZW50CiBudW1fcGNpX2Jpb3NfcHJlc2VudDoKIAkubG9uZyAJMAotCQorCiAuZ2xvYmwgbnVtX3BjaV9iaW9zX2ZpbmRfZGV2aWNlCiBudW1fcGNpX2Jpb3NfZmluZF9kZXZpY2U6CiAJLmxvbmcgCTAKQEAgLTM3MCw5ICszNzAsOSBAQAogCS5sb25nIAkwCiAKIC5nbG9ibCBudW1fcGNpX2Jpb3NfZ2VuZXJhdGVfc3BlY2lhbF9jeWNsZQotbnVtX3BjaV9iaW9zX2dlbmVyYXRlX3NwZWNpYWxfY3ljbGU6IAorbnVtX3BjaV9iaW9zX2dlbmVyYXRlX3NwZWNpYWxfY3ljbGU6CiAJLmxvbmcgMAotCQorCiAuZ2xvYmwgbnVtX3BjaV9iaW9zX3JlYWRfY2ZnX2J5dGUKIG51bV9wY2lfYmlvc19yZWFkX2NmZ19ieXRlOgogCS5sb25nIAkwCmRpZmYgLS1naXQgYS9saWJfaTM4Ni9iaW9zX3NldHVwLmMgYi9saWJfaTM4Ni9iaW9zX3NldHVwLmMKaW5kZXggM2RhNzg1OC4uYmM5NzgxNSAxMDA2NDQKLS0tIGEvbGliX2kzODYvYmlvc19zZXR1cC5jCisrKyBiL2xpYl9pMzg2L2Jpb3Nfc2V0dXAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQotICogCisgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCiAgKgpAQCAtODcsMjcgKzg3LDI3IEBACiBleHRlcm4gdm9pZCAqcmVhbG1vZGVfcmVzZXQ7CiBleHRlcm4gdm9pZCAqcmVhbG1vZGVfcGNpX2Jpb3NfY2FsbF9lbnRyeTsKIAotc3RhdGljIGludCBzZXRfam1wX3ZlY3RvcihpbnQgZW50cnlfcG9pbnQsIHZvaWQgKnRhcmdldCkgCitzdGF0aWMgaW50IHNldF9qbXBfdmVjdG9yKGludCBlbnRyeV9wb2ludCwgdm9pZCAqdGFyZ2V0KQogewogCWlmIChlbnRyeV9wb2ludCAmIH4weGZmZmYpIHsKIAkJcmV0dXJuIC0xOwogCX0KLQkKKwogCWlmICgoKHUzMil0YXJnZXQtMHhmMDAwMCkgJiB+MHhmZmZmKSB7CiAJCXJldHVybiAtMTsKIAl9CiAJcHJpbnRmKCJzZXRfam1wX3ZlY3RvcjogMHhmMDAwOiUwNHggLT4gJXBcbiIsCiAJICAgICAgIGVudHJ5X3BvaW50LCB0YXJnZXQpOwotCQorCiAJLyogam1wIG9wY29kZSAqLwogCXdyaXRlYigweGVhLCAweGYwMDAwICsgZW50cnlfcG9pbnQpOwotCQorCiAJLyogb2Zmc2V0ICovCiAJd3JpdGV3KCgodTMyKXRhcmdldC0weGYwMDAwKSwgMHhmMDAwMCArIGVudHJ5X3BvaW50ICsgMSk7Ci0JCisKIAkvKiBzZWdtZW50ICovCiAJd3JpdGV3KDB4ZjAwMCwgMHhmMDAwMCArIGVudHJ5X3BvaW50ICsgMyk7Ci0JCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIzLDQwICsxMjMsNDAgQEAKIAl1MTYgKnB0ciA9ICh1MTYqKSh2ZWN0b3IqNCk7CiAJcHRyWzBdID0gKCh1MzIpaGFuZGxlciAtIChzZWdtZW50IDw8IDQpKSYweGZmZmY7CiAJcHRyWzFdID0gc2VnbWVudDsKLQkKLSNpZiAwCQorCisjaWYgMAogCXByaW50Zigic2V0dmVjdG9yOiBpbnQlMDJ4IC0+ICUwNHg6JTA0eFxuIiwKIAkgICAgICAgdmVjdG9yLCBwdHJbMV0sIHB0clswXSk7Ci0jZW5kaWYJCisjZW5kaWYKIH0KIAotI2RlZmluZSBSRUxPQ18xNl9MT05HKHNlZywgb2ZmKSAqKHUzMiopKHNlZyA8PCA0IHwgKHUzMikmb2ZmKSAKLSNkZWZpbmUgUkVMT0NfMTZfV09SRChzZWcsIG9mZikgKih1MTYqKShzZWcgPDwgNCB8ICh1MzIpJm9mZikgCi0jZGVmaW5lIFJFTE9DXzE2X0JZVEUoc2VnLCBvZmYpICoodTgqKShzZWcgPDwgNCB8ICh1MzIpJm9mZikgCisjZGVmaW5lIFJFTE9DXzE2X0xPTkcoc2VnLCBvZmYpICoodTMyKikoc2VnIDw8IDQgfCAodTMyKSZvZmYpCisjZGVmaW5lIFJFTE9DXzE2X1dPUkQoc2VnLCBvZmYpICoodTE2Kikoc2VnIDw8IDQgfCAodTMyKSZvZmYpCisjZGVmaW5lIFJFTE9DXzE2X0JZVEUoc2VnLCBvZmYpICoodTgqKShzZWcgPDwgNCB8ICh1MzIpJm9mZikKIAogaW50IGJpb3Nfc2V0dXAodm9pZCkKIHsKIAlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKLQlzdGF0aWMgaW50IGRvbmU9MDsJCisJc3RhdGljIGludCBkb25lPTA7CiAJaW50IHZlY3RvcjsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnByaV9ob3NlOwotCQorCiAJaWYgKGRvbmUpIHsKIAkJcmV0dXJuIDA7CiAJfQogCWRvbmUgPSAxOwotCQorCiAJaWYgKGkzODZib290X2Jpb3Nfc2l6ZSA+IDY1NTM2KSB7Ci0JCXByaW50ZigiQklPUyB0b28gbGFyZ2UgKCVsZCBieXRlcywgbWF4IGlzIDY1NTM2KVxuIiwgCisJCXByaW50ZigiQklPUyB0b28gbGFyZ2UgKCVsZCBieXRlcywgbWF4IGlzIDY1NTM2KVxuIiwKIAkJICAgICAgIGkzODZib290X2Jpb3Nfc2l6ZSk7CiAJCXJldHVybiAtMTsKIAl9Ci0JCisKIAltZW1jcHkoQklPU19CQVNFLCAodm9pZCopaTM4NmJvb3RfYmlvcywgaTM4NmJvb3RfYmlvc19zaXplKTsKIAogCS8qIGNsZWFyIGJkYSAqLwogCW1lbXNldChCSU9TX0RBVEEsIDAsIEJJT1NfREFUQV9TSVpFKTsKLQkKKwogCS8qIGVudGVyIHNvbWUgdmFsdWVzIHRvIHRoZSBiZGEgKi8KIAl3cml0ZXcoMHgzZjgsIEJJT1NfREFUQSk7ICAgLyogY29tMSBhZGRyICovCiAJd3JpdGV3KDB4MmY4LCBCSU9TX0RBVEErMik7IC8qIGNvbTIgYWRkciAqLwpAQCAtMTY5LDEyICsxNjksMTIgQEAKIAkgKi8KIAl3cml0ZXcoMCwgQklPU19EQVRBKzB4MTMpOyAgLyogYmFzZSBtZW1vcnkgc2l6ZSAqLwogCi0JCi0JLyogc2V0dXAgcmVhbG1vZGUgaW50ZXJydXB0IHZlY3RvcnMgKi8JCisKKwkvKiBzZXR1cCByZWFsbW9kZSBpbnRlcnJ1cHQgdmVjdG9ycyAqLwogCWZvciAodmVjdG9yID0gMDsgdmVjdG9yIDwgTlVNVkVDVFM7IHZlY3RvcisrKSB7CiAJCXNldHZlY3Rvcih2ZWN0b3IsIEJJT1NfQ1MsICZybV9kZWZfaW50KTsKIAl9Ci0JCisKIAlzZXR2ZWN0b3IoMHgwMCwgQklPU19DUywgJnJtX2ludDAwKTsKIAlzZXR2ZWN0b3IoMHgwMSwgQklPU19DUywgJnJtX2ludDAxKTsKIAlzZXR2ZWN0b3IoMHgwMiwgQklPU19DUywgJnJtX2ludDAyKTsKQEAgLTIxMCwyNSArMjEwLDI0IEBACiAKIAlzZXRfam1wX3ZlY3RvcigweGZmZjAsICZyZWFsbW9kZV9yZXNldCk7CiAJc2V0X2ptcF92ZWN0b3IoMHhmZTZlLCAmcmVhbG1vZGVfcGNpX2Jpb3NfY2FsbF9lbnRyeSk7Ci0JCisKIAkvKiBmaWxsIGluIGRhdGEgYXJlYSAqLwogCVJFTE9DXzE2X1dPUkQoMHhmMDAwLCByYW1faW5fNjRrYl9jaHVua3MpID0gZ2QtPnJhbV9zaXplID4+IDE2OwogCVJFTE9DXzE2X1dPUkQoMHhmMDAwLCBiaW9zX2VxdWlwbWVudCkgPSAwOyAvKiBGaXhNZSAqLwotCQorCiAJLyogSWYgd2UgYXNzdW1lIG9ubHkgb25lIFBDSSBob3NlLCB0aGlzIFBDSSBob3NlCi0JICogd2lsbCBvd24gUENJIGJ1cyAjMCwgYW5kIHRoZSBsYXN0IFBDSSBidXMgb2YgCi0JICogdGhhdCBQQ0kgaG9zZSB3aWxsIGJlIHRoZSBsYXN0IFBDSSBidXMgaW4gdGhlIAotCSAqIHN5c3RlbS4gCisJICogd2lsbCBvd24gUENJIGJ1cyAjMCwgYW5kIHRoZSBsYXN0IFBDSSBidXMgb2YKKwkgKiB0aGF0IFBDSSBob3NlIHdpbGwgYmUgdGhlIGxhc3QgUENJIGJ1cyBpbiB0aGUKKwkgKiBzeXN0ZW0uCiAJICogKFRoaXMsIG9mY2F1c2UgYnJlYWsgb24gbXVsdGkgaG9zZSBzeXN0ZW1zLAotCSAqICBidXQgb3VyIFBDSSBCSU9TIG9ubHkgc3VwcG9ydCBvbmUgaG9zZSBhbnl3YXkpIAorCSAqICBidXQgb3VyIFBDSSBCSU9TIG9ubHkgc3VwcG9ydCBvbmUgaG9zZSBhbnl3YXkpCiAJICovCiAJcHJpX2hvc2UgPSBwY2lfYnVzX3RvX2hvc2UoMCk7CiAJaWYgKE5VTEwgIT0gcHJpX2hvc2UpIHsKLQkJLyogZmlsbCBpbiBsYXN0IHBjaSBidXMgbnVtYmVyIGZvciB1c2UgYnkgdGhlIHJlYWxtb2RlIAorCQkvKiBmaWxsIGluIGxhc3QgcGNpIGJ1cyBudW1iZXIgZm9yIHVzZSBieSB0aGUgcmVhbG1vZGUKIAkJICogUENJIEJJT1MgKi8KIAkJUkVMT0NfMTZfQllURSgweGYwMDAsIHBjaV9sYXN0X2J1cykgPSBwcmlfaG9zZS0+bGFzdF9idXNubzsKIAl9Ci0JCisKIAlyZXR1cm4gMDsKIH0KLQpkaWZmIC0tZ2l0IGEvbGliX2kzODYvYm9hcmQuYyBiL2xpYl9pMzg2L2JvYXJkLmMKaW5kZXggODVkN2Q3Zi4uNWQxYzFmYiAxMDA2NDQKLS0tIGEvbGliX2kzODYvYm9hcmQuYworKysgYi9saWJfaTM4Ni9ib2FyZC5jCkBAIC0xLDEwICsxLDEwIEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDAyCiAgKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UKLSAqIAorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqIAorICoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogU3lzZ28gUmVhbC1UaW1lIFNvbHV0aW9ucywgR21iSCA8d3d3LmVsaW5vcy5jb20+CiAgKiBNYXJpdXMgR3JvZWdlciA8bWdyb2VnZXJAc3lzZ28uZGU+CkBAIC0zOSwxOCArMzksMTggQEAKICNpbmNsdWRlIDxpZGUuaD4KICNpbmNsdWRlIDxhc20vdS1ib290LWkzODYuaD4KIAotZXh0ZXJuIGxvbmcgX2kzODZib290X3N0YXJ0OwkgICAgCi1leHRlcm4gbG9uZyBfaTM4NmJvb3RfZW5kOwkgICAgCitleHRlcm4gbG9uZyBfaTM4NmJvb3Rfc3RhcnQ7CitleHRlcm4gbG9uZyBfaTM4NmJvb3RfZW5kOwogZXh0ZXJuIGxvbmcgX2kzODZib290X3JvbWRhdGFfc3RhcnQ7Ci1leHRlcm4gbG9uZyBfaTM4NmJvb3Rfcm9tZGF0YV9kZXN0OyAKLWV4dGVybiBsb25nIF9pMzg2Ym9vdF9yb21kYXRhX3NpemU7IAotZXh0ZXJuIGxvbmcgX2kzODZib290X2Jzc19zdGFydDsgICAKLWV4dGVybiBsb25nIF9pMzg2Ym9vdF9ic3Nfc2l6ZTsgICAgCitleHRlcm4gbG9uZyBfaTM4NmJvb3Rfcm9tZGF0YV9kZXN0OworZXh0ZXJuIGxvbmcgX2kzODZib290X3JvbWRhdGFfc2l6ZTsKK2V4dGVybiBsb25nIF9pMzg2Ym9vdF9ic3Nfc3RhcnQ7CitleHRlcm4gbG9uZyBfaTM4NmJvb3RfYnNzX3NpemU7CiAKLWV4dGVybiBsb25nIF9pMzg2Ym9vdF9yZWFsbW9kZTsgICAgCitleHRlcm4gbG9uZyBfaTM4NmJvb3RfcmVhbG1vZGU7CiBleHRlcm4gbG9uZyBfaTM4NmJvb3RfcmVhbG1vZGVfc2l6ZTsKLWV4dGVybiBsb25nIF9pMzg2Ym9vdF9iaW9zOyAgICAgICAgIAotZXh0ZXJuIGxvbmcgX2kzODZib290X2Jpb3Nfc2l6ZTsgICAgCitleHRlcm4gbG9uZyBfaTM4NmJvb3RfYmlvczsKK2V4dGVybiBsb25nIF9pMzg2Ym9vdF9iaW9zX3NpemU7CiAKIC8qIFRoZSBzeW1ib2xzIGRlZmluZWQgYnkgdGhlIGxpbmtlciBzY3JpcHQgYmVjb21lcyBwb2ludGVycwogICogd2hpY2ggaXMgc29tZXdoYXQgaW5jb252ZWllbnQgLi4uICovCkBAIC04MiwxNSArODIsMTUgQEAKIHN0YXRpYyBpbnQgbWVtX21hbGxvY19pbml0KHZvaWQpCiB7CiAJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0gICAgICAgIAorCiAJLyogc3RhcnQgbWFsbG9jIGFyZWEgcmlnaHQgYWZ0ZXIgdGhlIHN0YWNrICovCi0JbWVtX21hbGxvY19zdGFydCA9IGkzODZib290X2Jzc19zdGFydCArIAorCW1lbV9tYWxsb2Nfc3RhcnQgPSBpMzg2Ym9vdF9ic3Nfc3RhcnQgKwogCQlpMzg2Ym9vdF9ic3Nfc2l6ZSArIENGR19TVEFDS19TSVpFOwogCW1lbV9tYWxsb2Nfc3RhcnQgPSAobWVtX21hbGxvY19zdGFydCszKSZ+MzsKLQkKKwogCS8qIFVzZSBhbGwgYXZhaWxhYmxlIFJBTSBmb3IgbWFsbG9jKCkgKi8KIAltZW1fbWFsbG9jX2VuZCA9IGdkLT5yYW1fc2l6ZTsKLQkKKwogCW1lbV9tYWxsb2NfYnJrID0gbWVtX21hbGxvY19zdGFydDsKIAogCXJldHVybiAwOwpAQCAtMTYyLDkgKzE2Miw5IEBACiAJCWkzODZib290X3N0YXJ0LCBpMzg2Ym9vdF9yb21kYXRhX3N0YXJ0LTEsCiAJCWkzODZib290X3JvbWRhdGFfZGVzdCwgaTM4NmJvb3Rfcm9tZGF0YV9kZXN0K2kzODZib290X3JvbWRhdGFfc2l6ZS0xLAogCQlpMzg2Ym9vdF9ic3Nfc3RhcnQsIGkzODZib290X2Jzc19zdGFydCtpMzg2Ym9vdF9ic3Nfc2l6ZS0xLAotCQlpMzg2Ym9vdF9ic3Nfc3RhcnQraTM4NmJvb3RfYnNzX3NpemUsIAorCQlpMzg2Ym9vdF9ic3Nfc3RhcnQraTM4NmJvb3RfYnNzX3NpemUsCiAJCWkzODZib290X2Jzc19zdGFydCtpMzg2Ym9vdF9ic3Nfc2l6ZStDRkdfU1RBQ0tfU0laRS0xKTsKLQkKKwogCiAJcmV0dXJuICgwKTsKIH0KQEAgLTE4Nyw3ICsxODcsNyBAQAogCQlwcmludGYgKCJCYW5rICMlZDogJTA4bHggIiwgaSwgZ2QtPmJkLT5iaV9kcmFtW2ldLnN0YXJ0KTsKIAkJcHJpbnRfc2l6ZSAoZ2QtPmJkLT5iaV9kcmFtW2ldLnNpemUsICJcbiIpOwogCX0KLQkKKwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTE5OCw3ICsxOTgsNiBAQAogfQogCiAKLQogLyoKICAqIEJyZWF0aCBzb21lIGxpZmUgaW50byB0aGUgYm9hcmQuLi4KICAqCkBAIC0yMzAsNyArMjI5LDcgQEAKIAlkcmFtX2luaXQsCQkvKiBjb25maWd1cmUgYXZhaWxhYmxlIFJBTSBiYW5rcyAqLwogCW1lbV9tYWxsb2NfaW5pdCwgICAgICAgIC8qIGRlcGVuZGFudCBvbiBkcmFtX2luaXQgKi8KIAlpbnRlcnJ1cHRfaW5pdCwJCS8qIHNldCB1cCBleGNlcHRpb25zICovCi0JdGltZXJfaW5pdCwJCisJdGltZXJfaW5pdCwKIAlzZXJpYWxfaW5pdCwKIAllbnZfaW5pdCwJCS8qIGluaXRpYWxpemUgZW52aXJvbm1lbnQgKi8KIAlpbml0X2JhdWRyYXRlLAkJLyogaW5pdGlhbHplIGJhdWRyYXRlIHNldHRpbmdzICovCkBAIC0yNTIsMTggKzI1MSwxOCBAQAogCXN0YXRpYyBnZF90IGdkX2RhdGE7CiAJc3RhdGljIGJkX3QgYmRfZGF0YTsKIAlpbml0X2ZuY190ICoqaW5pdF9mbmNfcHRyOwotCQorCiAJc2hvd19ib290X3Byb2dyZXNzKDB4MjEpOwogCiAJZ2QgPSBnbG9iYWxfZGF0YSA9ICZnZF9kYXRhOwotCQorCiAJbWVtc2V0IChnZCwgMCwgc2l6ZW9mIChnZF90KSk7CiAJZ2QtPmJkID0gJmJkX2RhdGE7CiAJbWVtc2V0IChnZC0+YmQsIDAsIHNpemVvZiAoYmRfdCkpOwogCXNob3dfYm9vdF9wcm9ncmVzcygweDIyKTsKIAogCWdkLT5iYXVkcmF0ZSA9ICBDT05GSUdfQkFVRFJBVEU7Ci0JCisKIAlmb3IgKGluaXRfZm5jX3B0ciA9IGluaXRfc2VxdWVuY2UsIGk9MDsgKmluaXRfZm5jX3B0cjsgKytpbml0X2ZuY19wdHIsIGkrKykgewogCQlzaG93X2Jvb3RfcHJvZ3Jlc3MoMHhhMTMwfGkpOwogCkBAIC0zMjAsNyArMzE5LDcgQEAKIAkvKiBhbGxvY2F0ZSBzeXNjYWxscyB0YWJsZSAoY29uc29sZV9pbml0X3Igd2lsbCBmaWxsIGl0IGluICovCiAJc3lzY2FsbF90YmwgPSAodm9pZCAqKikgbWFsbG9jIChOUl9TWVNDQUxMUyAqIHNpemVvZiAodm9pZCAqKSk7CiAJbWVtc2V0KHN5c2NhbGxfdGJsLCAwLCBOUl9TWVNDQUxMUyAqIHNpemVvZiAodm9pZCAqKSk7Ci0JCisKIAkvKiBJbml0aWFsaXplIHRoZSBjb25zb2xlIChhZnRlciB0aGUgcmVsb2NhdGlvbiBhbmQgZGV2aWNlcyBpbml0KSAqLwogCWNvbnNvbGVfaW5pdF9yKCk7CiAJc3lzY2FsbHNfaW5pdCgpOwpAQCAtMzYxLDcgKzM2MCw3IEBACiAjaWZkZWYgQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPCiAJc2VyaWFsX2J1ZmZlcmVkX2luaXQoKTsKICNlbmRpZgotICAgIAorCiAjaWZkZWYgQ09ORklHX1NUQVRVU19MRUQKIAlzdGF0dXNfbGVkX3NldCAoU1RBVFVTX0xFRF9CT09ULCBTVEFUVVNfTEVEX0JMSU5LSU5HKTsKICNlbmRpZgpAQCAtNDE3LDcgKzQxNiw2IEBACiAjZW5kaWYKIAogCi0KICNpZmRlZiBDT05GSUdfUE9TVAogCXBvc3RfcnVuIChOVUxMLCBQT1NUX1JBTSB8IHBvc3RfYm9vdG1vZGVfZ2V0KDApKTsKIAlpZiAocG9zdF9ib290bW9kZV9nZXQoMCkgJiBQT1NUX1BPV0VSRkFJTCkgewpAQCAtNDI1LDEwICs0MjMsMTAgQEAKIAkJYm9hcmRfcG93ZXJvZmYoKTsKIAl9CiAjZW5kaWYKLQkKLQkKKworCiAJc2hvd19ib290X3Byb2dyZXNzKDB4MjkpOwotCQorCiAJLyogbWFpbl9sb29wKCkgY2FuIHJldHVybiB0byByZXRyeSBhdXRvYm9vdCwgaWYgc28ganVzdCBydW4gaXQgYWdhaW4uICovCiAJZm9yICg7OykgewogCQltYWluX2xvb3AoKTsKQEAgLTQ0Miw1ICs0NDAsMyBAQAogCXB1dHMgKCIjIyMgRVJST1IgIyMjIFBsZWFzZSBSRVNFVCB0aGUgYm9hcmQgIyMjXG4iKTsKIAlmb3IgKDs7KTsKIH0KLQotCmRpZmYgLS1naXQgYS9saWJfaTM4Ni9pMzg2X2xpbnV4LmMgYi9saWJfaTM4Ni9pMzg2X2xpbnV4LmMKaW5kZXggNWE1OTZmZi4uZTVkOGVlYSAxMDA2NDQKLS0tIGEvbGliX2kzODYvaTM4Nl9saW51eC5jCisrKyBiL2xpYl9pMzg2L2kzODZfbGludXguYwpAQCAtMjMsMTIgKzIzLDEzIEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KICNpbmNsdWRlIDxpbWFnZS5oPgogI2luY2x1ZGUgPHpsaWIuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3ppbWFnZS5oPgogCisvKmNtZF9ib290LmMqLworZXh0ZXJuIGludCBkb19yZXNldCAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pOwogCiBleHRlcm4gaW1hZ2VfaGVhZGVyX3QgaGVhZGVyOyAgICAgICAgICAgLyogZnJvbSBjbWRfYm9vdG0uYyAqLwogCkBAIC0zOSw3ICs0MCw3IEBACiAJaWYgKE5VTEwgIT0gZmFrZV96aW1hZ2VfaGVhZGVyKGhkciwgcHRyLCBzaXplKSkgewogCQlyZXR1cm4gaGRyOwogCX0KLQkKKwogCXJldHVybiBOVUxMOwogfQogCkBAIC00OCw0NyArNDksNDcgQEAKIAkJdWxvbmcgYWRkciwgdWxvbmcgKmxlbl9wdHIsIGludCAgIHZlcmlmeSkKIHsKIAl2b2lkICpiYXNlX3B0cjsKLQkKKwogCXVsb25nIGxlbiA9IDAsIGNoZWNrc3VtOwogCXVsb25nIGluaXRyZF9zdGFydCwgaW5pdHJkX2VuZDsKIAl1bG9uZyBkYXRhOwogCWltYWdlX2hlYWRlcl90ICpoZHIgPSAmaGVhZGVyOwotCQorCiAJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBpbml0cmQgaW1hZ2UKIAkgKi8KIAlpZiAoYXJnYyA+PSAzKSB7CiAJCWFkZHIgPSBzaW1wbGVfc3RydG91bChhcmd2WzJdLCBOVUxMLCAxNik7Ci0JCQorCiAJCXByaW50ZiAoIiMjIExvYWRpbmcgUmFtZGlzayBJbWFnZSBhdCAlMDhseCAuLi5cbiIsIGFkZHIpOwotCQkKKwogCQkvKiBDb3B5IGhlYWRlciBzbyB3ZSBjYW4gYmxhbmsgQ1JDIGZpZWxkIGZvciByZS1jYWxjdWxhdGlvbiAqLwogCQltZW1jcHkgKCZoZWFkZXIsIChjaGFyICopYWRkciwgc2l6ZW9mKGltYWdlX2hlYWRlcl90KSk7Ci0JCQorCiAJCWlmIChudG9obChoZHItPmloX21hZ2ljKSAhPSBJSF9NQUdJQykgewogCQkJcHJpbnRmICgiQmFkIE1hZ2ljIE51bWJlclxuIik7CiAJCQlkb19yZXNldCAoY21kdHAsIGZsYWcsIGFyZ2MsIGFyZ3YpOwogCQl9Ci0JCQorCiAJCWRhdGEgPSAodWxvbmcpJmhlYWRlcjsKIAkJbGVuICA9IHNpemVvZihpbWFnZV9oZWFkZXJfdCk7Ci0JCQorCiAJCWNoZWNrc3VtID0gbnRvaGwoaGRyLT5paF9oY3JjKTsKIAkJaGRyLT5paF9oY3JjID0gMDsKLQkJCisKIAkJaWYgKGNyYzMyICgwLCAoY2hhciAqKWRhdGEsIGxlbikgIT0gY2hlY2tzdW0pIHsKIAkJCXByaW50ZiAoIkJhZCBIZWFkZXIgQ2hlY2tzdW1cbiIpOwogCQkJZG9fcmVzZXQgKGNtZHRwLCBmbGFnLCBhcmdjLCBhcmd2KTsKIAkJfQotCQkKKwogCQlwcmludF9pbWFnZV9oZHIgKGhkcik7Ci0JCQorCiAJCWRhdGEgPSBhZGRyICsgc2l6ZW9mKGltYWdlX2hlYWRlcl90KTsKIAkJbGVuICA9IG50b2hsKGhkci0+aWhfc2l6ZSk7Ci0JCQorCiAJCWlmICh2ZXJpZnkpIHsKIAkJCXVsb25nIGNzdW0gPSAwOwotCQkJCisKIAkJCXByaW50ZiAoIiAgIFZlcmlmeWluZyBDaGVja3N1bSAuLi4gIik7CiAJCQljc3VtID0gY3JjMzIgKDAsIChjaGFyICopZGF0YSwgbGVuKTsKIAkJCWlmIChjc3VtICE9IG50b2hsKGhkci0+aWhfZGNyYykpIHsKQEAgLTk3LDIxICs5OCwyMSBAQAogCQkJfQogCQkJcHJpbnRmICgiT0tcbiIpOwogCQl9Ci0JCQorCiAJCWlmICgoaGRyLT5paF9vcyAgICE9IElIX09TX0xJTlVYKQl8fAogCQkgICAgKGhkci0+aWhfYXJjaCAhPSBJSF9DUFVfSTM4NikJfHwKIAkJICAgIChoZHItPmloX3R5cGUgIT0gSUhfVFlQRV9SQU1ESVNLKQkpIHsKIAkJCXByaW50ZiAoIk5vIExpbnV4IGkzODYgUmFtZGlzayBJbWFnZVxuIik7CiAJCQlkb19yZXNldCAoY21kdHAsIGZsYWcsIGFyZ2MsIGFyZ3YpOwogCQl9Ci0JCQorCiAJCS8qCiAJCSAqIE5vdyBjaGVjayBpZiB3ZSBoYXZlIGEgbXVsdGlmaWxlIGltYWdlCiAJCSAqLwogCX0gZWxzZSBpZiAoKGhkci0+aWhfdHlwZT09SUhfVFlQRV9NVUxUSSkgJiYgKGxlbl9wdHJbMV0pKSB7CiAJCXVsb25nIHRhaWwgICAgPSBudG9obChsZW5fcHRyWzBdKSAlIDQ7CiAJCWludCBpOwotCQkKKwogCQkvKiBza2lwIGtlcm5lbCBsZW5ndGggYW5kIHRlcm1pbmF0b3IgKi8KIAkJZGF0YSA9ICh1bG9uZykoJmxlbl9wdHJbMl0pOwogCQkvKiBza2lwIGFueSBhZGRpdGlvbmFsIGltYWdlIGxlbmd0aCBmaWVsZHMgKi8KQEAgLTEyMiwyMiArMTIzLDIyIEBACiAJCWlmICh0YWlsKSB7CiAJCQlkYXRhICs9IDQgLSB0YWlsOwogCQl9Ci0JCQorCiAJCWxlbiAgID0gbnRvaGwobGVuX3B0clsxXSk7Ci0JCQorCiAJfSBlbHNlIHsKIAkJLyoKIAkJICogbm8gaW5pdHJkIGltYWdlCiAJCSAqLwogCQlkYXRhID0gMDsKIAl9Ci0JCisKICNpZmRlZglERUJVRwogCWlmICghZGF0YSkgewogCQlwcmludGYgKCJObyBpbml0cmRcbiIpOwogCX0KICNlbmRpZgotCQorCiAJaWYgKGRhdGEpIHsKIAkJaW5pdHJkX3N0YXJ0ID0gZGF0YTsKIAkJaW5pdHJkX2VuZCAgID0gaW5pdHJkX3N0YXJ0ICsgbGVuOwpAQCAtMTQ5LDI2ICsxNTAsMjQgQEAKIAkJaW5pdHJkX3N0YXJ0ID0gMDsKIAkJaW5pdHJkX2VuZCA9IDA7CiAJfQotCQotCWJhc2VfcHRyID0gbG9hZF96aW1hZ2UoKHZvaWQqKWFkZHIgKyBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpLCBudG9obChoZHItPmloX3NpemUpLCAKKworCWJhc2VfcHRyID0gbG9hZF96aW1hZ2UoKHZvaWQqKWFkZHIgKyBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpLCBudG9obChoZHItPmloX3NpemUpLAogCQkJICAgICAgIGluaXRyZF9zdGFydCwgaW5pdHJkX2VuZC1pbml0cmRfc3RhcnQsIDApOwogCiAJaWYgKE5VTEwgPT0gYmFzZV9wdHIpIHsKIAkJcHJpbnRmICgiIyMgS2VybmVsIGxvYWRpbmcgZmFpbGVkIC4uLlxuIik7CiAJCWRvX3Jlc2V0KGNtZHRwLCBmbGFnLCBhcmdjLCBhcmd2KTsKLQkJCisKIAl9Ci0JCQorCiAjaWZkZWYgREVCVUcKIAlwcmludGYgKCIjIyBUcmFuc2ZlcnJpbmcgY29udHJvbCB0byBMaW51eCAoYXQgYWRkcmVzcyAlMDh4KSAuLi5cbiIsCiAJCSh1MzIpYmFzZV9wdHIpOwogI2VuZGlmCi0JCQorCiAJLyogd2UgYXNzdW1lIHRoYXQgdGhlIGtlcm5lbCBpcyBpbiBwbGFjZSAqLwogCXByaW50ZigiXG5TdGFydGluZyBrZXJuZWwgLi4uXG5cbiIpOwotCQkKKwogCWJvb3RfemltYWdlKGJhc2VfcHRyKTsKLQkKKwogfQotCi0KZGlmZiAtLWdpdCBhL2xpYl9pMzg2L3BjaS5jIGIvbGliX2kzODYvcGNpLmMKaW5kZXggYWNkMWQyNS4uYTdmMTZhYSAxMDA2NDQKLS0tIGEvbGliX2kzODYvcGNpLmMKKysrIGIvbGliX2kzODYvcGNpLmMKQEAgLTIxLDI0ICsyMSwyNCBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaW5jbHVkZSA8Y29tbW9uLmg+IAotI2luY2x1ZGUgPHBjaS5oPiAKLSNpbmNsdWRlIDxhc20vaW8uaD4gCi0jaW5jbHVkZSA8YXNtL3BjaS5oPiAKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxwY2kuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGNpLmg+CiAKICNpZmRlZiBDT05GSUdfUENJCiAjdW5kZWYgUENJX1JPTV9TQ0FOX1ZFUkJPU0UKIAotaW50IHBjaV9zaGFkb3dfcm9tKHBjaV9kZXZfdCBkZXYsIHVuc2lnbmVkIGNoYXIgKmRlc3QpIAoraW50IHBjaV9zaGFkb3dfcm9tKHBjaV9kZXZfdCBkZXYsIHVuc2lnbmVkIGNoYXIgKmRlc3QpCiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogCWludCByZXMgPSAtMTsKIAlpbnQgaTsKLQkKKwogCXUzMiByb21fYWRkcjsKIAl1MzIgYWRkcl9yZWc7CiAJdTMyIHNpemU7Ci0JCisKIAl1MTYgdmVuZG9yOwogCXUxNiBkZXZpY2U7CiAJdTMyIGNsYXNzX2NvZGU7CkBAIC00NywxOCArNDcsMTggQEAKICNpZiAwCiAJcHJpbnRmKCJwY2lfc2hhZG93X3JvbSgpIGFza2VkIHRvIHNoYWRvdyBkZXZpY2UgJXggdG8gJXhcbiIsCiAJICAgICAgIGRldiwgKHUzMilkZXN0KTsKLSNlbmRpZgkKKyNlbmRpZgogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX1ZFTkRPUl9JRCwgJnZlbmRvcik7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfREVWSUNFX0lELCAmZGV2aWNlKTsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjbGFzc19jb2RlKTsKLQkKKwogIAljbGFzc19jb2RlICY9IDB4ZmZmZmZmMDA7CiAJY2xhc3NfY29kZSA+Pj0gODsKIAotI2lmIDAJCisjaWYgMAogCXByaW50ZigiUENJIEhlYWRlciBWZW5kb3IgJTA0eCBkZXZpY2UgJTA0eCBjbGFzcyAlMDZ4XG4iLAogCSAgICAgICB2ZW5kb3IsIGRldmljZSwgY2xhc3NfY29kZSk7Ci0jZW5kaWYJCisjZW5kaWYKIAkvKiBFbmFibGUgdGhlIHJvbSBhZGRlc3MgZGVjb2RlciAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfUk9NX0FERFJFU1MsIFBDSV9ST01fQUREUkVTU19NQVNLKTsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfUk9NX0FERFJFU1MsICZhZGRyX3JlZyk7CkBAIC02OCw0MCArNjgsMzkgQEAKIAkJcHJpbnRmKCJwY2lfY2hhZG93X3JvbTogZGV2aWNlIGRvIG5vdCBzZWVtIHRvIGhhdmUgYSByb21cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCQotCXNpemUgPSAofihhZGRyX3JlZyZQQ0lfUk9NX0FERFJFU1NfTUFTSykpKzE7ICAKLQkKLSNpZiAwCQorCisJc2l6ZSA9ICh+KGFkZHJfcmVnJlBDSV9ST01fQUREUkVTU19NQVNLKSkrMTsKKworI2lmIDAKIAlwcmludGYoIlJPTSBpcyAlZCBieXRlc1xuIiwgc2l6ZSk7Ci0jZW5kaWYJCisjZW5kaWYKIAlyb21fYWRkciA9IHBjaV9nZXRfcm9tX3dpbmRvdyhob3NlLCBzaXplKTsKLSNpZiAwCQorI2lmIDAKIAlwcmludGYoIlJPTSBtYXBwZWQgYXQgJXggXG4iLCByb21fYWRkcik7Ci0jZW5kaWYJCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywgCisjZW5kaWYKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1JPTV9BRERSRVNTLAogCQkJICAgICAgIHBjaV9waHlzX3RvX21lbShkZXYsIHJvbV9hZGRyKQogCQkJICAgICAgIHxQQ0lfUk9NX0FERFJFU1NfRU5BQkxFKTsKIAogCi0JCiAJZm9yIChpPXJvbV9hZGRyO2k8cm9tX2FkZHIrc2l6ZTsgaSs9NTEyKSB7Ci0JCQotCQkKKworCiAJCWlmIChyZWFkdyhpKSA9PSAweGFhNTUpIHsKIAkJCXUzMiBwY2lfZGF0YTsKICNpZmRlZiBQQ0lfUk9NX1NDQU5fVkVSQk9TRQogCQkJcHJpbnRmKCJST00gc2lnbmF0dXJlIGZvdW5kXG4iKTsKLSNlbmRpZgkJCQorI2VuZGlmCiAJCQlwY2lfZGF0YSA9IHJlYWR3KDB4MTgraSk7CiAJCQlwY2lfZGF0YSArPSBpOwotCQkJCisKIAkJCWlmICgwPT1tZW1jbXAoKHZvaWQqKXBjaV9kYXRhLCAiUENJUiIsIDQpKSB7Ci0jaWZkZWYgUENJX1JPTV9TQ0FOX1ZFUkJPU0UJCQkJCisjaWZkZWYgUENJX1JPTV9TQ0FOX1ZFUkJPU0UKIAkJCQlwcmludGYoIkZvdW50IFBDSSByb20gaW1hZ2UgYXQgb2Zmc2V0ICVkXG4iLCBpLXJvbV9hZGRyKTsKIAkJCQlwcmludGYoIlZlbmRvciAlMDR4IGRldmljZSAlMDR4IGNsYXNzICUwNnhcbiIsCiAJCQkJICAgICAgIHJlYWR3KHBjaV9kYXRhKzQpLCByZWFkdyhwY2lfZGF0YSs2KSwKIAkJCQkgICAgICAgcmVhZGwocGNpX2RhdGErMHgwZCkmMHhmZmZmZmYpOwotCQkJCXByaW50ZigiJXNcbiIsIAorCQkJCXByaW50ZigiJXNcbiIsCiAJCQkJICAgICAgIChyZWFkdyhwY2lfZGF0YSsweDE1KSAmMHg4MCk/CiAJCQkJICAgICAgICJMYXN0IGltYWdlIjoiTW9yZSBpbWFnZXMgZm9sbG93Iik7CiAJCQkJc3dpdGNoIAkocmVhZGIocGNpX2RhdGErMHgxNCkpIHsKQEAgLTExNiwzOCArMTE1LDM4IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQlwcmludGYoIkltYWdlIHNpemUgJWRcbiIsIHJlYWR3KHBjaV9kYXRhKzB4MTApICogNTEyKTsKLSNlbmRpZgkJCQkKKyNlbmRpZgogCQkJCS8qIEZpeE1lOiBJIHRoaW5rIHdlIHNob3VsZCBjb21wYXJlIHRoZSBjbGFzcyBjb2RlCiAJCQkJICogYnl0ZXMgYXMgd2VsbCBidXQgSSBoYXZlIG5vIHJlZmVyZW5jZSBvbiB0aGUKIAkJCQkgKiBleGFjdCBvcmRlciBvZiB0aGVzZSBieXRlcyBpbiB0aGUgUENJIFJPTSBoZWFkZXIgKi8KLQkJCQlpZiAocmVhZHcocGNpX2RhdGErNCkgPT0gdmVuZG9yICYmIAorCQkJCWlmIChyZWFkdyhwY2lfZGF0YSs0KSA9PSB2ZW5kb3IgJiYKIAkJCQkgICAgcmVhZHcocGNpX2RhdGErNikgPT0gZGV2aWNlICYmCiAJCQkJICAgIC8qIChyZWFkbChwY2lfZGF0YSsweDBkKSYweGZmZmZmZikgPT0gY2xhc3NfY29kZSAmJiAqLwogCQkJCSAgICByZWFkYihwY2lfZGF0YSsweDE0KSA9PSAwIC8qIHg4NiBjb2RlIGltYWdlICovICkgewotI2lmZGVmIFBDSV9ST01fU0NBTl9WRVJCT1NFCQkJCQkKKyNpZmRlZiBQQ0lfUk9NX1NDQU5fVkVSQk9TRQogCQkJCQlwcmludGYoIlN1aXRhYmxlIFJPTSBpbWFnZSBmb3VuZCwgY29weWluZ1xuIik7Ci0jZW5kaWYJCQkJCQorI2VuZGlmCiAJCQkJCW1lbW1vdmUoZGVzdCwgKHZvaWQqKXJvbV9hZGRyLCByZWFkdyhwY2lfZGF0YSsweDEwKSAqIDUxMik7CiAJCQkJCXJlcyA9IDA7CiAJCQkJCWJyZWFrOwotCQkJCQkKKwogCQkJCX0KIAkJCQlpZiAocmVhZHcocGNpX2RhdGErMHgxNSkgJjB4ODApIHsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQogCQl9Ci0JCQorCiAJfQotCQorCiAjaWZkZWYgUENJX1JPTV9TQ0FOX1ZFUkJPU0UKIAlpZiAocmVzKSB7CiAJCXByaW50ZigiTm8gc3VpdGFibGUgaW1hZ2UgZm91bmRcbiIpOwogCX0KLSNlbmRpZgkKKyNlbmRpZgogCS8qIGRpc2FibGUgUEFSIHJlZ2lzdGVyIGFuZCBQQ0kgZGV2aWNlIFJPTSBhZGRyZXNzIGRldm9jZXIgKi8KIAlwY2lfcmVtb3ZlX3JvbV93aW5kb3coaG9zZSwgcm9tX2FkZHIpOwotCSAgCQorCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9ST01fQUREUkVTUywgMCk7CiAKIAlyZXR1cm4gcmVzOwpkaWZmIC0tZ2l0IGEvbGliX2kzODYvcmVhbG1vZGUuYyBiL2xpYl9pMzg2L3JlYWxtb2RlLmMKaW5kZXggZDdiYjgxYy4uNmNmMjczOCAxMDA2NDQKLS0tIGEvbGliX2kzODYvcmVhbG1vZGUuYworKysgYi9saWJfaTM4Ni9yZWFsbW9kZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlCi0gKiAKKyAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KICAqCkBAIC0zNywzOSArMzcsMzkgQEAKIHsKIAkvKiBjb3B5IHRoZSByZWFsbW9kZSBzd2l0Y2ggY29kZSAqLwogCWlmIChpMzg2Ym9vdF9yZWFsbW9kZV9zaXplID4gKFJFQUxNT0RFX01BSUxCT1gtUkVBTE1PREVfQkFTRSkpIHsKLQkJcHJpbnRmKCJyZWFsbW9kZSBzd2l0Y2ggdG9vIGxhcmdlICglbGQgYnl0ZXMsIG1heCBpcyAlZClcbiIsIAorCQlwcmludGYoInJlYWxtb2RlIHN3aXRjaCB0b28gbGFyZ2UgKCVsZCBieXRlcywgbWF4IGlzICVkKVxuIiwKIAkJICAgICAgIGkzODZib290X3JlYWxtb2RlX3NpemUsIChSRUFMTU9ERV9NQUlMQk9YLVJFQUxNT0RFX0JBU0UpKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkKKwogCW1lbWNweShSRUFMTU9ERV9CQVNFLCAodm9pZCopaTM4NmJvb3RfcmVhbG1vZGUsIGkzODZib290X3JlYWxtb2RlX3NpemUpOwogCWFzbSgid2JpbnZkXG4iKTsKLQkKKwogCXJldHVybiAwOwogfQotCQkKKwogaW50IGVudGVyX3JlYWxtb2RlKHUxNiBzZWcsIHUxNiBvZmYsIHN0cnVjdCBwdF9yZWdzICppbiwgc3RydWN0IHB0X3JlZ3MgKm91dCkKIHsKLQkKKwogCS8qIHNldHVwIG91dCB0aGluIGJpb3MgZW11bGF0aW9uICovCiAJaWYgKGJpb3Nfc2V0dXAoKSkgewogCQlyZXR1cm4gLTE7CiAJfQotCQorCiAJaWYgKHJlYWxtb2RlX3NldHVwKCkpIHsKIAkJcmV0dXJuIC0xOwogCX0KLQkJICAgICAgIAkKKwogCWluLT5laXAgPSBvZmY7CiAJaW4tPnhjcyA9IHNlZzsKIAlpZiAoMz4oaW4tPmVzcCAmIDB4ZmZmZikpIHsKIAkJcHJpbnRmKCJXYXJuaW5nOiBlbnRlcmluZyByZWFsbW9kZSB3aXRoIHNwIDwgNCB3aWxsIGZhaWxcbiIpOwogCX0KLQkKKwogCW1lbWNweShSRUFMTU9ERV9NQUlMQk9YLCBpbiwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CiAJYXNtKCJ3YmludmRcbiIpOwotCQotCV9fYXNtX18gdm9sYXRpbGUgKCAKKworCV9fYXNtX18gdm9sYXRpbGUgKAogCQkgImxjYWxsICQweDIwLCUwXG4iICA6IDogICJpIiAoJnJlYWxtb2RlX2VudGVyKSApOwogCiAJYXNtKCJ3YmludmRcbiIpOwpAQCAtODgsOSArODgsOCBAQAogCXdyaXRlYihsdmwsIDB4NzAxKTsKIAl3cml0ZWIoMHhjYiwgMHg3MDIpOyAgLyogbHJldCAqLwogCWFzbSgid2JpbnZkXG4iKTsKLSAgICAgIAotCWVudGVyX3JlYWxtb2RlKDB4MDAsIDB4NzAwLCBpbiwgb3V0KTsJCi0JCisKKwllbnRlcl9yZWFsbW9kZSgweDAwLCAweDcwMCwgaW4sIG91dCk7CisKIAlyZXR1cm4gb3V0LT5lZmxhZ3MmMTsKIH0KLQpkaWZmIC0tZ2l0IGEvbGliX2kzODYvcmVhbG1vZGVfc3dpdGNoLlMgYi9saWJfaTM4Ni9yZWFsbW9kZV9zd2l0Y2guUwppbmRleCAxN2FkY2JkLi4wNDMzY2Q0IDEwMDY0NAotLS0gYS9saWJfaTM4Ni9yZWFsbW9kZV9zd2l0Y2guUworKysgYi9saWJfaTM4Ni9yZWFsbW9kZV9zd2l0Y2guUwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAoQykgQ29weXJpZ2h0IDIwMDIKICAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQotICogCisgKgogICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICAqIHByb2plY3QuCiAgKgpAQCAtMzEsMTEgKzMxLDExIEBACiAgKgllMDggZWR4OwogICoJZTBjIGVzaTsKICAqCWUxMCBlZGk7Ci0gKgllMTQgZWJwOyAKKyAqCWUxNCBlYnA7CiAgKgllMTggZWF4OwotICoJZTFjIGRzOyAgCisgKgllMWMgZHM7CiAgKgllMjAgZXM7Ci0gKgllMjQgZnM7ICAKKyAqCWUyNCBmczsKICAqCWUyOCBnczsKICAqCWUyYyBvcmlnX2VheDsKICAqCWUzMCBlaXA7CkBAIC00Niw3ICs0Niw3IEBACiAgKi8KIAogI2RlZmluZSBhMzIJCS5ieXRlIDB4Njc7CQkvKiBhZGRyZXNzIHNpemUgcHJlZml4IDMyICovCi0jZGVmaW5lIG8zMgkJLmJ5dGUgMHg2NjsJCS8qIG9wZXJhbmQgc2l6ZSBwcmVmaXggMzIgKi8gCisjZGVmaW5lIG8zMgkJLmJ5dGUgMHg2NjsJCS8qIG9wZXJhbmQgc2l6ZSBwcmVmaXggMzIgKi8KIAogLnNlY3Rpb24gLnJlYWxtb2RlLCAiYXgiCiAuY29kZTE2CkBAIC01NiwxMSArNTYsMTEgQEAKIG8zMglwdXNoYQogbzMyCXB1c2hmCiAJY2xpCi0gICAgICAgIHNpZHQgICAJc2F2ZWRfaWR0Ci0gICAgICAgIHNnZHQgICAgc2F2ZWRfZ2R0Ci0gICAgICAgIG1vdmwgICAgJWVzcCwgJWVheAotICAgICAgICBtb3ZsICAgICVlYXgsIHNhdmVkX3Byb3RlY3RlZF9tb2RlX2VzcAotCQorCXNpZHQgICAJc2F2ZWRfaWR0CisJc2dkdCAgICBzYXZlZF9nZHQKKwltb3ZsICAgICVlc3AsICVlYXgKKwltb3ZsICAgICVlYXgsIHNhdmVkX3Byb3RlY3RlZF9tb2RlX2VzcAorCiAJbW92bAkkMHgxMCwgJWVheAogCW1vdmwgICAgJWVheCwgJWVzcAogCW1vdncJJDB4MjgsICVheApAQCAtNzQsMjEgKzc0LDIxIEBACiAJYW5kbAkkMHg3ZmZmZmZmZSwgJWVheCAgICAgICAgIAkvKiBjbGVhcmluZyBQRSB0byAwICovCiAJbW92bAklZWF4LCAlY3IwCiAJbGptcAkkMHgwLCRkb19yZWFsbW9kZSAgICAgICAgICAgICAJLyogc3dpdGNoIHRvIHJlYWwgbW9kZSAqLwotCQkJCQkJCi1kb19yZWFsbW9kZToJCQkJCS8qIHJlYWxtb2RlIGNvZGUgZnJvbSBoZXJlICovIAorCitkb19yZWFsbW9kZToJCQkJCS8qIHJlYWxtb2RlIGNvZGUgZnJvbSBoZXJlICovCiAJbW92dwklY3MsJWF4CiAJbW92dwklYXgsJWRzCiAJbW92dwklYXgsJWVzCiAJbW92dwklYXgsJWZzCiAJbW92dwklYXgsJWdzCi0JCisKIAkJCQkJCS8qIGNyZWF0ZSBhIHRlbXBvcmFyeSBzdGFjayAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQltb3Z3CSQweGMwLCAlYXggICAgICAgICAgICAgCi0JbW92dwklYXgsICVzcyAgICAgICAgICAgICAgICAKLQltb3Z3CSQweDIwMCwgJWF4ICAgICAgICAgICAKLQltb3Z3CSVheCwgJXNwIAotCQorCisJbW92dwkkMHhjMCwgJWF4CisJbW92dwklYXgsICVzcworCW1vdncJJDB4MjAwLCAlYXgKKwltb3Z3CSVheCwgJXNwCisKIAlwb3BsCSVlYngKIAlwb3BsCSVlY3gKIAlwb3BsCSVlZHgKQEAgLTExNywxMSArMTE3LDExIEBACiBjcwltb3ZsCXRlbXBfZWF4LCAlZWF4CiAJd2JpbnZkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbGYtbW9kaWZ5aW5nIGNvZGUsCiAJCQkJCQkgKiBiZXR0ZXIgZmx1c2ggdGhlIGNhY2hlICovCi0JCisKIAkuYnl0ZQkweDlhCQkJCS8qIGxjYWxsICovCiB0ZW1wX2lwOgogCS53b3JkCTAJICAgICAJCQkvKiBuZXcgaXAgKi8KLXRlbXBfY3M6CQordGVtcF9jczoKIAkud29yZCAgIDAJCQkJLyogbmV3IGNzICovCiByZWFsbW9kZV9yZXQ6CiAJCQkJCQkvKiBzYXZlIGVheCwgZXNwIGFuZCBzcyAqLwpAQCAtMTMwLDE2ICsxMzAsMTYgQEAKIGNzCW1vdmwJJWVheCwgc2F2ZWRfZXNwCiAJbW92dyAgICAlc3MsICVheAogY3MJbW92dwklYXgsIHNhdmVkX3NzCi0JCisKIAkvKiByZXN0b3JlIHRoZSBzdGFjaywgbm90ZSB0aGF0IHdlIHNldCBzcCB0byAweDI0NDsKIAkgKiBwdF9yZWdzIGlzIDB4NDQgYnl0ZXMgbG9uZyBhbmQgd2UgcHVzaCB0aGUgc3RydWN0dXJlCiAJICogYmFja3dhcmRzIG9uIHRvIHRoZSBzdGFjaywgYm90dG9tIGZpcnN0ICovCi0JIAotCW1vdncJJDB4YzAsICVheCAgICAgICAgICAgICAKLQltb3Z3CSVheCwgJXNzICAgICAgICAgICAgICAgIAotCW1vdncJJDB4MjQ0LCAlYXggICAgICAgICAgIAotCW1vdncJJWF4LCAlc3AgCi0JCisKKwltb3Z3CSQweGMwLCAlYXgKKwltb3Z3CSVheCwgJXNzCisJbW92dwkkMHgyNDQsICVheAorCW1vdncJJWF4LCAlc3AKKwogCXhvcmwJJWVheCwlZWF4CiBjcwltb3Z3CXNhdmVkX3NzLCAlYXgKIAlwdXNobAklZWF4CkBAIC0xNzIsMjggKzE3MiwyOCBAQAogbzMyIGNzCWxpZHQJc2F2ZWRfaWR0CiBvMzIgY3MJbGdkdCAgICBzYXZlZF9nZHQJCQkvKiBTZXQgR0RUUiAqLwogCi0gICAgICAgIG1vdmwgICAgJWNyMCwgJWVheCAgICAgICAgICAgICAgCS8qIEdvIGJhY2sgaW50byBwcm90ZWN0ZWQgbW9kZSAqLwotICAgICAgICBvcmwgICAgICQxLCVlYXggICAgICAgICAgICAgICAgIAkvKiByZXNldCBQRSB0byAxICovCi0gICAgICAgIG1vdmwgICAgJWVheCwgJWNyMCAgICAgICAgICAgICAgIAotICAgICAgICBqbXAgICAgIG5leHRfbGluZSAgICAgICAgICAgICAgIAkvKiBmbHVzaCBwcmVmZXRjaCBxdWV1ZSAqLwotbmV4dF9saW5lOiAgICAKLSAgICAgICAgbW92dwkkcmV0dXJuX3B0ciwgJWF4ICAgICAgICAgIAotICAgICAgICBtb3Z3ICAgICVheCwlYnAKKwltb3ZsICAgICVjcjAsICVlYXggICAgICAgICAgICAgIAkvKiBHbyBiYWNrIGludG8gcHJvdGVjdGVkIG1vZGUgKi8KKwlvcmwgICAgICQxLCVlYXggICAgICAgICAgICAgICAgIAkvKiByZXNldCBQRSB0byAxICovCisJbW92bCAgICAlZWF4LCAlY3IwCisJam1wICAgICBuZXh0X2xpbmUgICAgICAgICAgICAgICAJLyogZmx1c2ggcHJlZmV0Y2ggcXVldWUgKi8KK25leHRfbGluZToKKwltb3Z3CSRyZXR1cm5fcHRyLCAlYXgKKwltb3Z3ICAgICVheCwlYnAKIG8zMiBjcwlsam1wCSooJWJwKQogCiAuY29kZTMyCiBwcm90ZWN0ZWRfbW9kZToKLSAgICAgICAgbW92bCAgICAkMHgxOCwlZWF4ICAgICAgICAgCQkvKiByZWxvYWQgR0RUWzNdICovCi0gICAgICAgIG1vdncgICAgJWF4LCVmcyAgICAgICAgICAgICAgICAgCS8qIHJlc2V0IEZTICovCisJbW92bCAgICAkMHgxOCwlZWF4ICAgICAgICAgCQkvKiByZWxvYWQgR0RUWzNdICovCisJbW92dyAgICAlYXgsJWZzICAgICAgICAgICAgICAgICAJLyogcmVzZXQgRlMgKi8KIAltb3Z3CSVheCwlZHMgICAgICAgICAgICAgICAgCQkvKiByZXNldCBEUyAqLwotICAgICAgICBtb3Z3ICAgICVheCwlZ3MgICAgICAgICAgICAgICAgIAkvKiByZXNldCBHUyAqLwotICAgICAgICBtb3Z3ICAgICVheCwlZXMgICAgICAgICAgICAgICAgIAkvKiByZXNldCBFUyAqLwotICAgICAgICBtb3Z3ICAgICVheCwlc3MgICAgICAgICAgICAgICAgIAkvKiByZXNldCBTUyAqLwotICAgICAgICBtb3ZsICAgIHNhdmVkX3Byb3RlY3RlZF9tb2RlX2VzcCwgJWVheAorCW1vdncgICAgJWF4LCVncyAgICAgICAgICAgICAgICAgCS8qIHJlc2V0IEdTICovCisJbW92dyAgICAlYXgsJWVzICAgICAgICAgICAgICAgICAJLyogcmVzZXQgRVMgKi8KKwltb3Z3ICAgICVheCwlc3MgICAgICAgICAgICAgICAgIAkvKiByZXNldCBTUyAqLworCW1vdmwgICAgc2F2ZWRfcHJvdGVjdGVkX21vZGVfZXNwLCAlZWF4CiAJbW92bAklZWF4LCAlZXNwCiAJcG9wZgogCXBvcGEKLSAgICAgICAgcmV0CisJcmV0CiAKIHRlbXBfZWF4OgogCS5sb25nCTAKQEAgLTIwNCwxOSArMjA0LDE5IEBACiAJLmxvbmcJMAogc2F2ZWRfZWF4OgogCS5sb25nCTAKLQkKKwogcmVhbG1vZGVfaWR0X3B0cjoKLQkud29yZAkweDQwMAkJCSAgICAgICAKLQkud29yZAkweDAsIDB4MAkJCi0JCi1zYXZlZF9nZHQ6ICAKLSAgCS53b3JkIAkwLCAwLCAwLCAwCisJLndvcmQJMHg0MDAKKwkud29yZAkweDAsIDB4MAorCitzYXZlZF9nZHQ6CisJLndvcmQgCTAsIDAsIDAsIDAKIHNhdmVkX2lkdDoKLSAgCS53b3JkIAkwLCAwLCAwLCAwCisJLndvcmQgCTAsIDAsIDAsIDAKIAogc2F2ZWRfcHJvdGVjdGVkX21vZGVfZXNwOgogCS5sb25nIAkwCi0JCisKIHJldHVybl9wdHI6CiAJLmxvbmcJcHJvdGVjdGVkX21vZGUKIAkud29yZAkweDEwCmRpZmYgLS1naXQgYS9saWJfaTM4Ni92aWRlby5jIGIvbGliX2kzODYvdmlkZW8uYwppbmRleCA3NzYwMjJlLi5jZDg5NDU3IDEwMDY0NAotLS0gYS9saWJfaTM4Ni92aWRlby5jCisrKyBiL2xpYl9pMzg2L3ZpZGVvLmMKQEAgLTIxLDE0ICsyMSwxNCBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaW5jbHVkZSA8Y29tbW9uLmg+IAotI2luY2x1ZGUgPHBjaS5oPiAKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxwY2kuaD4KICNpbmNsdWRlIDxkZXZpY2VzLmg+CiAjaW5jbHVkZSA8aTgwNDIuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+IAotI2luY2x1ZGUgPGFzbS9yZWFsbW9kZS5oPiAKLSNpbmNsdWRlIDxhc20vaW8uaD4gCi0jaW5jbHVkZSA8YXNtL3BjaS5oPiAKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3JlYWxtb2RlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BjaS5oPgogCiAKIC8qIGJhc2ljIHRleHRtb2RlIEkvTyBmcm9tIGxpbnV4IGtlcm5lbCAqLwpAQCAtNDAsNyArNDAsNyBAQAogc3RhdGljIHZvaWQgYmVlcChpbnQgZHVyKQogewogCWludCBpOwotCQorCiAJb3V0Yl9wKDMsIDB4NjEpOwogCWZvciAoaT0wO2k8MTAqZHVyO2krKykgewogCQl1ZGVsYXkoMTAwMCk7CkBAIC02MCwyMyArNjAsMjMgQEAKIHN0YXRpYyB2b2lkIF9fdmlkZW9fcHV0Yyhjb25zdCBjaGFyIGMsIGludCAqeCwgaW50ICp5KQogewogCWlmIChjID09ICdcbicpIHsKLSAJCSgqeCkgPSAwOworCQkoKngpID0gMDsKIAkJaWYgKCArKygqeSkgPj0gbGluZXMgKSB7CiAJCQlzY3JvbGwoKTsKIAkJCSgqeSktLTsKIAkJfQotCX0gZWxzZSBpZiAoYyA9PSAnXGInKSB7IAorCX0gZWxzZSBpZiAoYyA9PSAnXGInKSB7CiAJCWlmICgoKngpICE9IDApIHsKIAkJCS0tKCp4KTsKLQkJCXZpZG1lbSBbICggKCp4KSArIGNvbHMgKiAoKnkpICkgKiAyIF0gPSAnICc7IAorCQkJdmlkbWVtIFsgKCAoKngpICsgY29scyAqICgqeSkgKSAqIDIgXSA9ICcgJzsKIAkJfQotIAl9IGVsc2UgaWYgKGMgPT0gJ1xyJykgeyAKKwl9IGVsc2UgaWYgKGMgPT0gJ1xyJykgewogCQkoKngpID0gMDsKLQkJCi0JfSBlbHNlIGlmIChjID09ICdcYScpIHsgCisKKwl9IGVsc2UgaWYgKGMgPT0gJ1xhJykgewogCQliZWVwKDMpOwotCQkKLQl9IGVsc2UgaWYgKGMgPT0gJ1x0JykgeyAKKworCX0gZWxzZSBpZiAoYyA9PSAnXHQnKSB7CiAJCV9fdmlkZW9fcHV0YygnICcsIHgsIHkpOwogCQlfX3ZpZGVvX3B1dGMoJyAnLCB4LCB5KTsKIAkJX192aWRlb19wdXRjKCcgJywgeCwgeSk7CkBAIC04NSw3ICs4NSw3IEBACiAJCV9fdmlkZW9fcHV0YygnICcsIHgsIHkpOwogCQlfX3ZpZGVvX3B1dGMoJyAnLCB4LCB5KTsKIAkJX192aWRlb19wdXRjKCcgJywgeCwgeSk7Ci0JfSBlbHNlIGlmIChjID09ICdcdicpIHsgCisJfSBlbHNlIGlmIChjID09ICdcdicpIHsKIAkJc3dpdGNoICgoKngpICUgOCkgewogCQljYXNlIDA6CiAJCQlfX3ZpZGVvX3B1dGMoJyAnLCB4LCB5KTsKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQljYXNlIDE6CiAJCQlfX3ZpZGVvX3B1dGMoJyAnLCB4LCB5KTsKIAkJfQotCX0gZWxzZSBpZiAoYyA9PSAnXGYnKSB7IAorCX0gZWxzZSBpZiAoYyA9PSAnXGYnKSB7CiAJCWludCBpOwogCQlmb3IgKGk9MDtpPGxpbmVzKmNvbHMqMjtpKz0yKSB7CiAJCQl2aWRtZW1baV0gPSAwOwpAQCAtMTEyLDcgKzExMiw3IEBACiAJCSgqeCkgPSAwOwogCQkoKnkpID0gMDsKIAl9IGVsc2UgewotCQl2aWRtZW0gWyAoICgqeCkgKyBjb2xzICogKCp5KSApICogMiBdID0gYzsgCisJCXZpZG1lbSBbICggKCp4KSArIGNvbHMgKiAoKnkpICkgKiAyIF0gPSBjOwogCQlpZiAoICsrKCp4KSA+PSBjb2xzICkgewogCQkJKCp4KSA9IDA7CiAJCQlpZiAoICsrKCp5KSA+PSBsaW5lcyApIHsKQEAgLTEyNiwxNSArMTI2LDE1IEBACiBzdGF0aWMgdm9pZCB2aWRlb19wdXRjKGNvbnN0IGNoYXIgYykKIHsKIAlpbnQgeCx5LHBvczsKLQkKKwogCXggPSBvcmlnX3g7CiAJeSA9IG9yaWdfeTsKLQkKKwogCV9fdmlkZW9fcHV0YyhjLCAmeCwgJnkpOwogCiAJb3JpZ194ID0geDsKIAlvcmlnX3kgPSB5OwotCQorCiAJcG9zID0gKHggKyBjb2xzICogeSkgKiAyOwkvKiBVcGRhdGUgY3Vyc29yIHBvc2l0aW9uICovCiAJb3V0Yl9wKDE0LCB2aWRwb3J0KTsKIAlvdXRiX3AoMHhmZiAmIChwb3MgPj4gOSksIHZpZHBvcnQrMSk7CkBAIC0xNjcsNzIgKzE2Nyw3MSBAQAogaW50IHZpZGVvX2luaXQodm9pZCkKIHsKIAl1MTYgcG9zOwotCQorCiAJc3RhdGljIGRldmljZV90IHZnYV9kZXY7CiAJc3RhdGljIGRldmljZV90IGtiZF9kZXY7Ci0JCisKIAl2aWRtZW0gPSAoY2hhciAqKSAweGI4MDAwOwogCXZpZHBvcnQgPSAweDNkNDsKIAogCWxpbmVzID0gMjU7CiAJY29scyA9IDgwOwotCQorCiAJb3V0Yl9wKDE0LCB2aWRwb3J0KTsKIAlwb3MgPSBpbmJfcCh2aWRwb3J0KzEpOwogCXBvcyA8PD0gODsKIAlvdXRiX3AoMTUsIHZpZHBvcnQpOwogCXBvcyB8PSBpbmJfcCh2aWRwb3J0KzEpOwotCQorCiAJb3JpZ194ID0gcG9zJWNvbHM7CiAJb3JpZ195ID0gcG9zL2NvbHM7CiAKLSNpZiAwCQorI2lmIDAKIAlwcmludGYoInBvcyAleCAlZCAlZFxuIiwgcG9zLCBvcmlnX3gsIG9yaWdfeSk7Ci0jZW5kaWYJCisjZW5kaWYKIAlpZiAob3JpZ195ID4gbGluZXMpIHsKIAkJb3JpZ194ID0gb3JpZ195ID0wOwogCX0KLQkKLQkKLQltZW1zZXQoJnZnYV9kZXYsIDAsIHNpemVvZih2Z2FfZGV2KSk7Ci0gICAgICAgIHN0cmNweSh2Z2FfZGV2Lm5hbWUsICJ2Z2EiKTsKLSAgICAgICAgdmdhX2Rldi5leHQgICA9IDA7IAotICAgICAgICB2Z2FfZGV2LmZsYWdzID0gREVWX0ZMQUdTX09VVFBVVCB8IERFVl9GTEFHU19TWVNURU07Ci0gICAgICAgIHZnYV9kZXYucHV0YyAgPSB2aWRlb19wdXRjOyAgICAgICAgLyogJ3B1dGMnIGZ1bmN0aW9uICovCi0gICAgICAgIHZnYV9kZXYucHV0cyAgPSB2aWRlb19wdXRzOyAgICAgICAgLyogJ3B1dHMnIGZ1bmN0aW9uICovCi0gICAgICAgIHZnYV9kZXYudHN0YyAgPSBOVUxMOyAgICAgICAgICAgICAgLyogJ3RzdGMnIGZ1bmN0aW9uICovCi0gICAgICAgIHZnYV9kZXYuZ2V0YyAgPSBOVUxMOyAgICAgICAgICAgICAgLyogJ2dldGMnIGZ1bmN0aW9uICovCiAKLSAgICAgICAgaWYgKGRldmljZV9yZWdpc3RlcigmdmdhX2RldikgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIDE7CisKKwltZW1zZXQoJnZnYV9kZXYsIDAsIHNpemVvZih2Z2FfZGV2KSk7CisJc3RyY3B5KHZnYV9kZXYubmFtZSwgInZnYSIpOworCXZnYV9kZXYuZXh0ICAgPSAwOworCXZnYV9kZXYuZmxhZ3MgPSBERVZfRkxBR1NfT1VUUFVUIHwgREVWX0ZMQUdTX1NZU1RFTTsKKwl2Z2FfZGV2LnB1dGMgID0gdmlkZW9fcHV0YzsgICAgICAgIC8qICdwdXRjJyBmdW5jdGlvbiAqLworCXZnYV9kZXYucHV0cyAgPSB2aWRlb19wdXRzOyAgICAgICAgLyogJ3B1dHMnIGZ1bmN0aW9uICovCisJdmdhX2Rldi50c3RjICA9IE5VTEw7ICAgICAgICAgICAgICAvKiAndHN0YycgZnVuY3Rpb24gKi8KKwl2Z2FfZGV2LmdldGMgID0gTlVMTDsgICAgICAgICAgICAgIC8qICdnZXRjJyBmdW5jdGlvbiAqLworCisJaWYgKGRldmljZV9yZWdpc3RlcigmdmdhX2RldikgPT0gMCkgeworCSAgICByZXR1cm4gMTsKIAl9Ci0JCisKIAlpZiAoaTgwNDJfa2JkX2luaXQoKSkgewogCQlyZXR1cm4gMTsKIAl9Ci0JCi0JbWVtc2V0KCZrYmRfZGV2LCAwLCBzaXplb2Yoa2JkX2RldikpOwotICAgICAgICBzdHJjcHkoa2JkX2Rldi5uYW1lLCAia2JkIik7Ci0gICAgICAgIGtiZF9kZXYuZXh0ICAgPSAwOyAKLSAgICAgICAga2JkX2Rldi5mbGFncyA9IERFVl9GTEFHU19JTlBVVCB8IERFVl9GTEFHU19TWVNURU07Ci0gICAgICAgIGtiZF9kZXYucHV0YyAgPSBOVUxMOyAgICAgICAgLyogJ3B1dGMnIGZ1bmN0aW9uICovCi0gICAgICAgIGtiZF9kZXYucHV0cyAgPSBOVUxMOyAgICAgICAgLyogJ3B1dHMnIGZ1bmN0aW9uICovCi0gICAgICAgIGtiZF9kZXYudHN0YyAgPSBpODA0Ml90c3RjOyAgLyogJ3RzdGMnIGZ1bmN0aW9uICovCi0gICAgICAgIGtiZF9kZXYuZ2V0YyAgPSBpODA0Ml9nZXRjOyAgLyogJ2dldGMnIGZ1bmN0aW9uICovCiAKLSAgICAgICAgaWYgKGRldmljZV9yZWdpc3Rlcigma2JkX2RldikgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIDE7CisJbWVtc2V0KCZrYmRfZGV2LCAwLCBzaXplb2Yoa2JkX2RldikpOworCXN0cmNweShrYmRfZGV2Lm5hbWUsICJrYmQiKTsKKwlrYmRfZGV2LmV4dCAgID0gMDsKKwlrYmRfZGV2LmZsYWdzID0gREVWX0ZMQUdTX0lOUFVUIHwgREVWX0ZMQUdTX1NZU1RFTTsKKwlrYmRfZGV2LnB1dGMgID0gTlVMTDsgICAgICAgIC8qICdwdXRjJyBmdW5jdGlvbiAqLworCWtiZF9kZXYucHV0cyAgPSBOVUxMOyAgICAgICAgLyogJ3B1dHMnIGZ1bmN0aW9uICovCisJa2JkX2Rldi50c3RjICA9IGk4MDQyX3RzdGM7ICAvKiAndHN0YycgZnVuY3Rpb24gKi8KKwlrYmRfZGV2LmdldGMgID0gaTgwNDJfZ2V0YzsgIC8qICdnZXRjJyBmdW5jdGlvbiAqLworCisJaWYgKGRldmljZV9yZWdpc3Rlcigma2JkX2RldikgPT0gMCkgeworCSAgICByZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKIAotaW50IGRydl92aWRlb19pbml0KHZvaWQpIAoraW50IGRydl92aWRlb19pbml0KHZvaWQpCiB7CiAJaWYgKHZpZGVvX2Jpb3NfaW5pdCgpKSB7CiAJCXJldHVybiAxOwogCX0KLQkKLQlyZXR1cm4gdmlkZW9faW5pdCgpOwkKKworCXJldHVybiB2aWRlb19pbml0KCk7CiB9Ci0gICAgICAKZGlmZiAtLWdpdCBhL2xpYl9pMzg2L3ZpZGVvX2Jpb3MuYyBiL2xpYl9pMzg2L3ZpZGVvX2Jpb3MuYwppbmRleCBkOTcwOWI5Li40NWY3OGUyIDEwMDY0NAotLS0gYS9saWJfaTM4Ni92aWRlb19iaW9zLmMKKysrIGIvbGliX2kzODYvdmlkZW9fYmlvcy5jCkBAIC0yMSwxMyArMjEsMTMgQEAKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGNvbW1vbi5oPiAKLSNpbmNsdWRlIDxwY2kuaD4gCi0jaW5jbHVkZSA8bWFsbG9jLmg+IAotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4gCi0jaW5jbHVkZSA8YXNtL3JlYWxtb2RlLmg+IAotI2luY2x1ZGUgPGFzbS9pby5oPiAKLSNpbmNsdWRlIDxhc20vcGNpLmg+IAorI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHBjaS5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vcmVhbG1vZGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGNpLmg+CiAKICN1bmRlZiBQQ0lfQklPU19ERUJVRwogI3VuZGVmIFZHQV9CSU9TX0RFQlVHCkBAIC00MSw3ICs0MSw3IEBACiAjaWZkZWYgQ09ORklHX1BDSQogCiAjaWZkZWYgUENJX0JJT1NfREVCVUcKLSNkZWZpbmUgUkVMT0NfMTYoc2VnLCBvZmYpICoodTMyKikoc2VnIDw8IDQgfCAodTMyKSZvZmYpIAorI2RlZmluZSBSRUxPQ18xNihzZWcsIG9mZikgKih1MzIqKShzZWcgPDwgNCB8ICh1MzIpJm9mZikKIGV4dGVybiB1MzIgbnVtX3BjaV9iaW9zX3ByZXNlbnQ7CiBleHRlcm4gdTMyIG51bV9wY2lfYmlvc19maW5kX2RldmljZTsKIGV4dGVybiB1MzIgbnVtX3BjaV9iaW9zX2ZpbmRfY2xhc3M7CkBAIC02Miw3ICs2Miw3IEBACiAJcHJpbnRmKCJwY2lfYmlvc19wcmVzZW50OiAgICAgICAgICAgICAgICAlZFxuIiwgUkVMT0NfMTYoMHhmMDAwLCBudW1fcGNpX2Jpb3NfcHJlc2VudCkpOwogCXByaW50ZigicGNpX2Jpb3NfZmluZF9kZXZpY2U6ICAgICAgICAgICAgJWRcbiIsIFJFTE9DXzE2KDB4ZjAwMCwgbnVtX3BjaV9iaW9zX2ZpbmRfZGV2aWNlKSk7CiAJcHJpbnRmKCJwY2lfYmlvc19maW5kX2NsYXNzOiAgICAgICAgICAgICAlZFxuIiwgUkVMT0NfMTYoMHhmMDAwLCBudW1fcGNpX2Jpb3NfZmluZF9jbGFzcykpOwotCXByaW50ZigicGNpX2Jpb3NfZ2VuZXJhdGVfc3BlY2lhbF9jeWNsZTogJWRcbiIsIFJFTE9DXzE2KDB4ZjAwMCwgbnVtX3BjaV9iaW9zX2dlbmVyYXRlX3NwZWNpYWxfY3ljbGUpKTsJCisJcHJpbnRmKCJwY2lfYmlvc19nZW5lcmF0ZV9zcGVjaWFsX2N5Y2xlOiAlZFxuIiwgUkVMT0NfMTYoMHhmMDAwLCBudW1fcGNpX2Jpb3NfZ2VuZXJhdGVfc3BlY2lhbF9jeWNsZSkpOwogCXByaW50ZigicGNpX2Jpb3NfcmVhZF9jZmdfYnl0ZTogICAgICAgICAgJWRcbiIsIFJFTE9DXzE2KDB4ZjAwMCwgbnVtX3BjaV9iaW9zX3JlYWRfY2ZnX2J5dGUpKTsKIAlwcmludGYoInBjaV9iaW9zX3JlYWRfY2ZnX3dvcmQ6ICAgICAgICAgICVkXG4iLCBSRUxPQ18xNigweGYwMDAsIG51bV9wY2lfYmlvc19yZWFkX2NmZ193b3JkKSk7CiAJcHJpbnRmKCJwY2lfYmlvc19yZWFkX2NmZ19kd29yZDogICAgICAgICAlZFxuIiwgUkVMT0NfMTYoMHhmMDAwLCBudW1fcGNpX2Jpb3NfcmVhZF9jZmdfZHdvcmQpKTsKQEAgLTg0LDUyICs4NCw1MiBAQAogc3RhdGljIHUzMiBwcm9iZV9wY2lfdmlkZW8odm9pZCkKIHsKIAlwY2lfZGV2X3QgZGV2YnVzZm47Ci0JCi0JaWYgKChkZXZidXNmbiA9IHBjaV9maW5kX2NsYXNzKFBDSV9DTEFTU19WSURFTywgCi0JCQkJICAgICAgIFBDSV9DTEFTU19WSURFT19TVEQsIAorCisJaWYgKChkZXZidXNmbiA9IHBjaV9maW5kX2NsYXNzKFBDSV9DTEFTU19WSURFTywKKwkJCQkgICAgICAgUENJX0NMQVNTX1ZJREVPX1NURCwKIAkJCQkgICAgICAgUENJX0NMQVNTX1ZJREVPX1BST0dfSUZfVkdBLCAwKSkgIT0gLTEpIHsKIAkJdTMyIG9sZDsKIAkJdTMyIGFkZHI7Ci0JCQorCiAJCS8qIFBDSSB2aWRlbyBkZXZpY2UgZGV0ZWN0ZWQgKi8KLQkJcHJpbnRmKCJGb3VuZCBQQ0kgVkdBIGRldmljZSBhdCAlMDJ4LiUwMnguJXhcbiIsIAorCQlwcmludGYoIkZvdW5kIFBDSSBWR0EgZGV2aWNlIGF0ICUwMnguJTAyeC4leFxuIiwKIAkJICAgICAgIFBDSV9CVVMoZGV2YnVzZm4pLCBQQ0lfREVWKGRldmJ1c2ZuKSwgUENJX0ZVTkMoZGV2YnVzZm4pKTsKLQkJCisKIAkJLyogRW5hYmxlIEkvTyBkZWNvZGluZyBhcyB3ZWxsLCBQQ0kgdml1ZGVvIGJvYXJkcwogCQkgKiBzdXBwb3J0IEkvTyBhY2Nlc3NlcywgYnV0IHRoZXkgcHJvdmlkZSBubwogCQkgKiBiYXIgcmVnaXN0ZXIgZm9yIHRoaXMgc2luY2UgdGhlIHBvcnRzIGFyZSBmaXhlZC4KIAkJICovCiAJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXZidXNmbiwgUENJX0NPTU1BTkQsIFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUFTVEVSKTsKLQkJCisKIAkJLyogVGVzdCB0aGUgUk9NIGRlY29kZXIsIGRvIHRoZSBkZXZpY2Ugc3VwcG9ydCBhIHJvbT8gKi8KLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldmJ1c2ZuLCBQQ0lfUk9NX0FERFJFU1MsICZvbGQpOwkJCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZidXNmbiwgUENJX1JPTV9BRERSRVNTLCAmb2xkKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZidXNmbiwgUENJX1JPTV9BRERSRVNTLCBQQ0lfUk9NX0FERFJFU1NfTUFTSyk7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZidXNmbiwgUENJX1JPTV9BRERSRVNTLCAmYWRkcik7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2YnVzZm4sIFBDSV9ST01fQUREUkVTUywgb2xkKTsKLQkJCQkKKwogCQlpZiAoIWFkZHIpIHsKIAkJCXByaW50ZigiUENJIFZHQSBoYXZlIG5vIFJPTT9cbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJCisKIAkJLyogZGV2aWNlIGhhdmUgYSByb20gKi8KLQkJaWYgKHBjaV9zaGFkb3dfcm9tKGRldmJ1c2ZuLCAodm9pZCopMHhjMDAwMCkpIHsgCisJCWlmIChwY2lfc2hhZG93X3JvbShkZXZidXNmbiwgKHZvaWQqKTB4YzAwMDApKSB7CiAJCQlwcmludGYoIlNoYWRvd2luZyBvZiBQQ0kgVkdBIEJJT1MgZmFpbGVkXG4iKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCQorCiAJCS8qIE5vdyBlbmFibGUgbGFnYWN5IFZHQSBwb3J0IGFjY2VzcyAqLwogCQlpZiAocGNpX2VuYWJsZV9sZWdhY3lfdmlkZW9fcG9ydHMocGNpX2J1c190b19ob3NlKFBDSV9CVVMoZGV2YnVzZm4pKSkpIHsKIAkJCXByaW50ZigiUENJIFZHQSBlbmFibGUgZmFpbGVkXG4iKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCQkJCi0JCisKKwogCQkvKiByZXR1cm4gdGhlIHBjaSBkZXZpY2UgaW5mbywgdGhhdCB3ZSdsbCBuZWVkIGxhdGVyICovCi0JCXJldHVybiBQQ0lfQlVTKGRldmJ1c2ZuKSA8PCA4IHwgCisJCXJldHVybiBQQ0lfQlVTKGRldmJ1c2ZuKSA8PCA4IHwKIAkJCVBDSV9ERVYoZGV2YnVzZm4pIDw8IDMgfCAoUENJX0ZVTkMoZGV2YnVzZm4pJjcpOwogCX0KLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xMzksOCArMTM5LDggQEAKIHN0YXRpYyBpbnQgcHJvYmVfaXNhX3ZpZGVvKHZvaWQpCiB7CiAJdTMyIHB0cjsKLQljaGFyICpidWY7CQotCQorCWNoYXIgKmJ1ZjsKKwogCWlmICgwID09IChwdHIgPSBpc2FfbWFwX3JvbSgweGMwMDAwLCAweDgwMDApKSkgewogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTUzLDE0ICsxNTMsMTQgQEAKIAkJaXNhX3VubWFwX3JvbShwdHIpOwogCQlyZXR1cm4gLTE7CiAJfQotCQorCiAJLyogc2hhZG93IHRoZSByb20gKi8KIAltZW1jcHkoYnVmLCAodm9pZCopcHRyLCAweDgwMDApOwogCWlzYV91bm1hcF9yb20ocHRyKTsKIAltZW1jcHkoKHZvaWQqKTB4YzAwMDAsIGJ1ZiwgMHg4MDAwKTsKLQkKKwogCWZyZWUoYnVmKTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xNjksMjAgKzE2OSwyMCBAQAogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CiAKIAkvKiBjbGVhciB0aGUgdmlkZW8gYmlvcyBhcmVhIGluIGNhc2Ugd2Ugd2FybWJvb3RlZCAqLwotCW1lbXNldCgodm9pZCopMHhjMDAwMCwgMCwgMHg4MDAwKTsJCisJbWVtc2V0KCh2b2lkKikweGMwMDAwLCAwLCAweDgwMDApOwogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7Ci0JCisKIAlpZiAocHJvYmVfaXNhX3ZpZGVvKCkpIHsKIAkJLyogTm8gSVNBIGJvYXJkIGZvdW5kLCB0cnkgdGhlIFBDSSBidXMgKi8KIAkJcmVncy5lYXggPSBwcm9iZV9wY2lfdmlkZW8oKTsKIAl9Ci0JCisKIAkvKiBEaWQgd2Ugc3VjY2VlZCBpbiBtYXBwaW5nIGFueSB2aWRlbyBiaW9zICovCiAJaWYgKHJlYWR3KDB4YzAwMDApID09IDB4YWE1NSkgewogCSAgICAgICAgaW50IHNpemU7CiAJCWludCBpOwogCQl1OCBzdW07Ci0JCQorCiAJCVBSSU5URigiRm91bmQgdmlkZW8gYmlvcyBzaWduYXR1cmVcbiIpOwogCQlzaXplID0gNTEyKnJlYWRiKDB4YzAwMDIpOwogCQlQUklOVEYoInNpemUgJWRcbiIsIHNpemUpOwpAQCAtMTk0LDI4ICsxOTQsMjYgQEAKIAkJaWYgKHN1bSkgewogCQkJcmV0dXJuIDE7CiAJCX0KLQkJCisKIAkJLyogc29tZSB2aWRlbyBiaW9zZXMgKEFUSSBNYWNoNjQpIHNlZW0gdG8gdGhpbmsgdGhhdAogCQkgKiB0aGUgb3JpZ2luYWwgaW50IDEwIGhhbmRsZXIgaXMgYWx3YXlzIGF0CiAJCSAqIDB4ZjAwMDoweGYwNjUgLCBwbGFjZSBhbiBpcmV0IGluc3RydWN0aW9uIHRoZXJlCiAJCSAqLwogCQl3cml0ZWIoMHhjZiwgMHhmZjA2NSk7Ci0JCQorCiAJCXJlZ3MuZXNwID0gMHg4MDAwOwogCQlyZWdzLnhzcyA9IDB4MjAwMDsKIAkJZW50ZXJfcmVhbG1vZGUoMHhjMDAwLCAzLCAmcmVncywgJnJlZ3MpOwogCQlQUklOVEYoIklOVCAweDEwIHZlY3RvciBhZnRlcjogICUwNHg6JTA0eFxuIiwKLQkJICAgICAgIHJlYWR3KDB4NDIpLCByZWFkdygweDQwKSk7IAorCQkgICAgICAgcmVhZHcoMHg0MiksIHJlYWR3KDB4NDApKTsKIAkJUFJJTlRGKCJCSU9TIHJldHVybmVkICVzY2FycnlcbiIsIHJlZ3MuZWZsYWdzICYgMT8iIjoiTk9UICIpOwotI2lmZGVmIFBDSV9CSU9TX0RFQlVHCQkKKyNpZmRlZiBQQ0lfQklPU19ERUJVRwogCQlwcmludF9iaW9zX2Jpb3Nfc3RhdCgpOwotI2VuZGlmCQkKKyNlbmRpZgogCQlyZXR1cm4gKHJlZ3MuZWZsYWdzICYgMSk7Ci0JCQorCiAJfQotCQorCiAJcmV0dXJuIDE7Ci0JCisKIH0KLQotCmRpZmYgLS1naXQgYS9saWJfaTM4Ni96aW1hZ2UuYyBiL2xpYl9pMzg2L3ppbWFnZS5jCmluZGV4IDlkMzNiMmQuLjM1MTBmMmYgMTAwNjQ0Ci0tLSBhL2xpYl9pMzg2L3ppbWFnZS5jCisrKyBiL2xpYl9pMzg2L3ppbWFnZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSBDb3B5cmlnaHQgMjAwMgogICogRGFuaWVsIEVuZ3N0cvZtLCBPbWljcm9uIENldGkgQUIsIGRhbmllbEBvbWljcm9uLnNlCi0gKiAKKyAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogICogcHJvamVjdC4KICAqCkBAIC0yMSwxMCArMjEsMTAgQEAKICAqIE1BIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotLyogCisvKgogICogTGludXggaTM4NiB6SW1hZ2UgYW5kIGJ6SW1hZ2UgbG9hZGluZwotICogCi0gKiBiYXNlZCBvbiB0aGUgcHJvY2R1cmUgZGVzY3JpYmVkIGluIAorICoKKyAqIGJhc2VkIG9uIHRoZSBwcm9jZHVyZSBkZXNjcmliZWQgaW4KICAqIGxpbnV4L0RvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dAogICovCiAKQEAgLTM3LDEwICszNywxMCBAQAogCiAvKgogICogTWVtb3J5IGxheS1vdXQ6Ci0gKiAKKyAqCiAgKiByZWxhdGl2ZSB0byBzZXR1cF9iYXNlICh3aGljaCBpcyAweDkwMDAwIGN1cnJlbnRseSkKLSAqIAotICoJMHgwMDAwLTB4N0ZGRglSZWFsIG1vZGUga2VybmVsICAgCisgKgorICoJMHgwMDAwLTB4N0ZGRglSZWFsIG1vZGUga2VybmVsCiAgKgkweDgwMDAtMHg4RkZGCVN0YWNrIGFuZCBoZWFwCiAgKgkweDkwMDAtMHg5MEZGCUtlcm5lbCBjb21tYW5kIGxpbmUKICAqLwpAQCAtNTMsNTMgKzUzLDUzIEBACiBzdGF0aWMgdm9pZCBidWlsZF9jb21tYW5kX2xpbmUoY2hhciAqY29tbWFuZF9saW5lLCBpbnQgYXV0b19ib290KQogewogCWNoYXIgKmVudl9jb21tYW5kX2xpbmU7Ci0JCisKIAljb21tYW5kX2xpbmVbMF0gPSAnXDAnOwotCQorCiAJZW52X2NvbW1hbmRfbGluZSA9ICBnZXRlbnYoImJvb3RhcmdzIik7Ci0JCisKIAkvKiBzZXQgY29uc29sZT0gYXJndW1lbnQgaWYgd2UgdXNlIGEgc2VyaWFsIGNvbnNvbGUgKi8KIAlpZiAoTlVMTCA9PSBzdHJzdHIoZW52X2NvbW1hbmRfbGluZSwgImNvbnNvbGU9IikpIHsKIAkJaWYgKDA9PXN0cmNtcChnZXRlbnYoInN0ZG91dCIpLCAic2VyaWFsIikpIHsKLQkJCQorCiAJCQkvKiBXZSBzZWVtIHRvIHVzZSBzZXJpYWwgY29uc29sZSAqLwotCQkJc3ByaW50Zihjb21tYW5kX2xpbmUsICJjb25zb2xlPXR0eVMwLCVzICIsIAorCQkJc3ByaW50Zihjb21tYW5kX2xpbmUsICJjb25zb2xlPXR0eVMwLCVzICIsCiAJCQkJIGdldGVudigiYmF1ZHJhdGUiKSk7CiAJCX0KIAl9Ci0JCisKIAlpZiAoYXV0b19ib290KSB7CiAJCXN0cmNhdChjb21tYW5kX2xpbmUsICJhdXRvICIpOwogCX0KLQkJCisKIAlpZiAoTlVMTCAhPSBlbnZfY29tbWFuZF9saW5lKSB7CiAJCXN0cmNhdChjb21tYW5kX2xpbmUsIGVudl9jb21tYW5kX2xpbmUpOwotCX0gCi0JCi0JCisJfQorCisKIAlwcmludGYoIktlcm5lbCBjb21tYW5kIGxpbmU6IFwiJXNcIlxuIiwgY29tbWFuZF9saW5lKTsKIH0KIAotdm9pZCAqbG9hZF96aW1hZ2UoY2hhciAqaW1hZ2UsIHVuc2lnbmVkIGxvbmcga2VybmVsX3NpemUsIAordm9pZCAqbG9hZF96aW1hZ2UoY2hhciAqaW1hZ2UsIHVuc2lnbmVkIGxvbmcga2VybmVsX3NpemUsCiAJCSAgdW5zaWduZWQgbG9uZyBpbml0cmRfYWRkciwgdW5zaWduZWQgbG9uZyBpbml0cmRfc2l6ZSwKIAkJICBpbnQgYXV0b19ib290KQogewotICAgICAgICB2b2lkICpzZXR1cF9iYXNlOworCXZvaWQgKnNldHVwX2Jhc2U7CiAJaW50IHNldHVwX3NpemU7CiAJaW50IGJvb3Rwcm90bzsKIAlpbnQgYmlnX2ltYWdlOwogCXZvaWQgKmxvYWRfYWRkcmVzczsKLQkKLQkKKworCiAJc2V0dXBfYmFzZSA9ICh2b2lkKilERUZBVUxUX1NFVFVQX0JBU0U7CS8qIGJhc2UgYWRkcmVzcyBmb3IgcmVhbC1tb2RlIHNlZ21lbnQgKi8KLQkKLSAJaWYgKEtFUk5FTF9NQUdJQyAhPSAqKHUxNiopKGltYWdlICsgQk9PVF9GTEFHX09GRikpIHsKKworCWlmIChLRVJORUxfTUFHSUMgIT0gKih1MTYqKShpbWFnZSArIEJPT1RfRkxBR19PRkYpKSB7CiAJCXByaW50ZigiRXJyb3I6IEludmFsaWQga2VybmVsIG1hZ2ljIChmb3VuZCAweCUwNHgsIGV4cGVjdGVkIDB4YWE1NSlcbiIsCiAJCSAgICAgICAqKHUxNiopKGltYWdlICsgQk9PVF9GTEFHX09GRikpOwogCQlyZXR1cm4gMDsKIAl9Ci0JCi0JCisKKwogCS8qIGRldGVybWluZSBib290IHByb3RvY29sIHZlcnNpb24gKi8KIAlpZiAoS0VSTkVMX1YyX01BR0lDID09ICoodTMyKikoaW1hZ2UrSEVBREVSX09GRikpIHsKIAkJYm9vdHByb3RvID0gKih1MTYqKShpbWFnZStWRVJTSU9OX09GRik7CkBAIC0xMDcsMTA4ICsxMDcsMTA3IEBACiAJCS8qIFZlcnkgb2xkIGtlcm5lbCAqLwogCQlib290cHJvdG8gPSAweDAxMDA7CiAJfQotCQorCiAJLyogZGV0ZXJtaW5lIHNpemUgb2Ygc2V0dXAgKi8KIAlpZiAoMCA9PSAqKHU4KikoaW1hZ2UgKyBTRVRVUF9TRUNUU19PRkYpKSB7CiAJCXNldHVwX3NpemUgPSA1ICogNTEyOwogCX0gZWxzZSB7CiAJCXNldHVwX3NpemUgPSAoKih1OCopKGltYWdlICsgU0VUVVBfU0VDVFNfT0ZGKSArIDEpICogNTEyOwogCX0KLQkKKwogCWlmIChzZXR1cF9zaXplID4gU0VUVVBfTUFYX1NJWkUpIHsKIAkJcHJpbnRmKCJFcnJvcjogU2V0dXAgaXMgdG9vIGxhcmdlICglZCBieXRlcylcbiIsIHNldHVwX3NpemUpOwogCX0KLQkKKwogCS8qIERldGVybWluZSBpbWFnZSB0eXBlICovCi0gIAliaWdfaW1hZ2UgPSAoYm9vdHByb3RvID49IDB4MDIwMCkgJiYgKCoodTgqKShpbWFnZSArIExPQURGTEFHU19PRkYpICYgQklHX0tFUk5FTF9GTEFHKTsKLQkKKwliaWdfaW1hZ2UgPSAoYm9vdHByb3RvID49IDB4MDIwMCkgJiYgKCoodTgqKShpbWFnZSArIExPQURGTEFHU19PRkYpICYgQklHX0tFUk5FTF9GTEFHKTsKKwogCS8qIERlcmVybWluZSBsb2FkIGFkZHJlc3MgKi8KIAlsb2FkX2FkZHJlc3MgPSAodm9pZCopKGJpZ19pbWFnZSA/IEJaSU1BR0VfTE9BRF9BRERSOlpJTUFHRV9MT0FEX0FERFIpOwotCQkJCisKIAkvKiBsb2FkIHNldHVwICovCiAJbWVtbW92ZShzZXR1cF9iYXNlLCBpbWFnZSwgc2V0dXBfc2l6ZSk7Ci0JCi0JcHJpbnRmKCJVc2luZyBib290IHByb3RvY29sIHZlcnNpb24gJXguJTAyeFxuIiwgCisKKwlwcmludGYoIlVzaW5nIGJvb3QgcHJvdG9jb2wgdmVyc2lvbiAleC4lMDJ4XG4iLAogCSAgICAgICAoYm9vdHByb3RvICYgMHhmZjAwKSA+PiA4LCBib290cHJvdG8gJiAweGZmKTsKLQkKLQkKLQlpZiAoYm9vdHByb3RvID09IDB4MDEwMCkgewkJCi0JCisKKworCWlmIChib290cHJvdG8gPT0gMHgwMTAwKSB7CisKIAkJKih1MTYqKShzZXR1cF9iYXNlICsgQ01EX0xJTkVfTUFHSUNfT0ZGKSA9IENPTU1BTkRfTElORV9NQUdJQzsKLQkJKih1MTYqKShzZXR1cF9iYXNlICsgQ01EX0xJTkVfT0ZGU0VUX09GRikgPSBDT01NQU5EX0xJTkVfT0ZGU0VUOyAKLQkJCisJCSoodTE2Kikoc2V0dXBfYmFzZSArIENNRF9MSU5FX09GRlNFVF9PRkYpID0gQ09NTUFORF9MSU5FX09GRlNFVDsKKwogCQkvKiBBIHZlcnkgb2xkIGtlcm5lbCBNVVNUIGhhdmUgaXRzIHJlYWwtbW9kZSBjb2RlCiAJCSAqIGxvYWRlZCBhdCAweDkwMDAwICovCi0JCQorCiAJCWlmICgodTMyKXNldHVwX2Jhc2UgIT0gMHg5MDAwMCkgewogCQkJLyogQ29weSB0aGUgcmVhbC1tb2RlIGtlcm5lbCAqLwogCQkJbWVtbW92ZSgodm9pZCopMHg5MDAwMCwgc2V0dXBfYmFzZSwgc2V0dXBfc2l6ZSk7CiAJCQkvKiBDb3B5IHRoZSBjb21tYW5kIGxpbmUgKi8KLQkJCW1lbW1vdmUoKHZvaWQqKTB4OTkwMDAsIHNldHVwX2Jhc2UrQ09NTUFORF9MSU5FX09GRlNFVCwgCisJCQltZW1tb3ZlKCh2b2lkKikweDk5MDAwLCBzZXR1cF9iYXNlK0NPTU1BTkRfTElORV9PRkZTRVQsCiAJCQkgICAgICAgQ09NTUFORF9MSU5FX1NJWkUpOwotCQkJCisKIAkJCXNldHVwX2Jhc2UgPSAodm9pZCopMHg5MDAwMDsJCSAvKiBSZWxvY2F0ZWQgKi8KIAkJfQotCQkKKwogCQkvKiBJdCBpcyByZWNvbW1lbmRlZCB0byBjbGVhciBtZW1vcnkgdXAgdG8gdGhlIDMySyBtYXJrICovCiAJCW1lbXNldCgodm9pZCopMHg5MDAwMCArIHNldHVwX3NpemUsIDAsIFNFVFVQX01BWF9TSVpFLXNldHVwX3NpemUpOwogCX0KLQkKKwogCWlmIChib290cHJvdG8gPj0gMHgwMjAwKSB7CiAJCSoodTgqKShzZXR1cF9iYXNlICsgVFlQRV9PRl9MT0FERVJfT0ZGKSA9IDB4ZmY7Ci0JCXByaW50ZigiTGludXgga2VybmVsIHZlcnNpb24gJXNcbiIsIAotCQkgICAgICAgKGNoYXIqKShzZXR1cF9iYXNlICsgU0VUVVBfU1RBUlRfT0ZGU0VUICsgCisJCXByaW50ZigiTGludXgga2VybmVsIHZlcnNpb24gJXNcbiIsCisJCSAgICAgICAoY2hhciopKHNldHVwX2Jhc2UgKyBTRVRVUF9TVEFSVF9PRkZTRVQgKwogCQkJICAgICAgICoodTE2Kikoc2V0dXBfYmFzZSArIFNUQVJUX1NZU19PRkYgKyAyKSkpOwotCQkKKwogCQlpZiAoaW5pdHJkX2FkZHIpIHsKIAkJCXByaW50ZigiSW5pdGlhbCBSQU0gZGlzayBhdCBsaW5lYXIgYWRkcmVzcyAweCUwOGx4LCBzaXplICVsZCBieXRlc1xuIiwKIAkJCSAgICAgICBpbml0cmRfYWRkciwgaW5pdHJkX3NpemUpOwotCQkJCisKIAkJCSoodTMyKikoc2V0dXBfYmFzZSArIFJBTURJU0tfSU1BR0VfT0ZGKSA9IGluaXRyZF9hZGRyOwogCQkJKih1MzIqKShzZXR1cF9iYXNlICsgUkFNRElTS19TSVpFX09GRik9aW5pdHJkX3NpemU7CiAJCX0KIAl9Ci0JCisKIAlpZiAoYm9vdHByb3RvID49IDB4MDIwMSkgewogCQkqKHUxNiopKHNldHVwX2Jhc2UgKyBIRUFQX0VORF9QVFJfT0ZGKSA9IEhFQVBfRU5EX09GRlNFVDsKLQkJCisKIAkJLyogQ0FOX1VTRV9IRUFQICovCi0JCSoodTgqKShzZXR1cF9iYXNlICsgTE9BREZMQUdTX09GRikgPSAKKwkJKih1OCopKHNldHVwX2Jhc2UgKyBMT0FERkxBR1NfT0ZGKSA9CiAJCQkqKHU4Kikoc2V0dXBfYmFzZSArIExPQURGTEFHU19PRkYpIHwgSEVBUF9GTEFHOwogCX0KLQkKKwogCWlmIChib290cHJvdG8gPj0gMHgwMjAyKSB7CiAJCSoodTMyKikoc2V0dXBfYmFzZSArIENNRF9MSU5FX1BUUl9PRkYpID0gKHUzMilzZXR1cF9iYXNlICsgQ09NTUFORF9MSU5FX09GRlNFVDsKIAl9IGVsc2UgaWYgKGJvb3Rwcm90byA+PSAweDAyMDApIHsKIAkJKih1MTYqKShzZXR1cF9iYXNlICsgQ01EX0xJTkVfTUFHSUNfT0ZGKSA9IENPTU1BTkRfTElORV9NQUdJQzsKLQkJKih1MTYqKShzZXR1cF9iYXNlICsgQ01EX0xJTkVfT0ZGU0VUX09GRikgPSBDT01NQU5EX0xJTkVfT0ZGU0VUOyAKKwkJKih1MTYqKShzZXR1cF9iYXNlICsgQ01EX0xJTkVfT0ZGU0VUX09GRikgPSBDT01NQU5EX0xJTkVfT0ZGU0VUOwogCQkqKHUxNiopKHNldHVwX2Jhc2UgKyBTRVRVUF9NT1ZFX1NJWkVfT0ZGKSA9IDB4OTEwMDsKIAl9Ci0JCiAKLQkKKwogCWlmIChiaWdfaW1hZ2UpIHsKLQkJaWYgKChrZXJuZWxfc2l6ZSAtIHNldHVwX3NpemUpID4gQlpJTUFHRV9NQVhfU0laRSkgeyAKKwkJaWYgKChrZXJuZWxfc2l6ZSAtIHNldHVwX3NpemUpID4gQlpJTUFHRV9NQVhfU0laRSkgewogCQkJcHJpbnRmKCJFcnJvcjogYnpJbWFnZSBrZXJuZWwgdG9vIGJpZyEgKHNpemU6ICVsZCwgbWF4OiAlZClcbiIsCiAJCQkgICAgICAga2VybmVsX3NpemUgLSBzZXR1cF9zaXplLCBCWklNQUdFX01BWF9TSVpFKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCQorCiAJfSBlbHNlIGlmICgoa2VybmVsX3NpemUgLSBzZXR1cF9zaXplKSA+IFpJTUFHRV9NQVhfU0laRSkgewogCQlwcmludGYoIkVycm9yOiB6SW1hZ2Uga2VybmVsIHRvbyBiaWchIChzaXplOiAlbGQsIG1heDogJWQpXG4iLAogCQkgICAgICAga2VybmVsX3NpemUgLSBzZXR1cF9zaXplLCBaSU1BR0VfTUFYX1NJWkUpOwogCQlyZXR1cm4gMDsKIAl9Ci0JCisKIAkvKiBidWlsZCBjb21tYW5kIGxpbmUgYXQgQ09NTUFORF9MSU5FX09GRlNFVCAqLwogCWJ1aWxkX2NvbW1hbmRfbGluZShzZXR1cF9iYXNlICsgQ09NTUFORF9MSU5FX09GRlNFVCwgYXV0b19ib290KTsKLQkKLSAgICAgICAgcHJpbnRmKCJMb2FkaW5nICVjekltYWdlIGF0IGFkZHJlc3MgMHglMDh4ICglbGQgYnl0ZXMpXG4iLCBiaWdfaW1hZ2UgPyAnYicgOiAnICcsIAorCisJcHJpbnRmKCJMb2FkaW5nICVjekltYWdlIGF0IGFkZHJlc3MgMHglMDh4ICglbGQgYnl0ZXMpXG4iLCBiaWdfaW1hZ2UgPyAnYicgOiAnICcsCiAJICAgICAgICh1MzIpbG9hZF9hZGRyZXNzLCBrZXJuZWxfc2l6ZSAtIHNldHVwX3NpemUpOwogCi0JICAgICAgIAorCiAJbWVtbW92ZShsb2FkX2FkZHJlc3MsIGltYWdlICsgc2V0dXBfc2l6ZSwga2VybmVsX3NpemUgLSBzZXR1cF9zaXplKTsKLQkKKwogCS8qIHJlYWR5IGZvciBib290aW5nICovCiAJcmV0dXJuIHNldHVwX2Jhc2U7CiB9CkBAIC0yMTcsNyArMjE2LDcgQEAKIHZvaWQgYm9vdF96aW1hZ2Uodm9pZCAqc2V0dXBfYmFzZSkKIHsKIAlzdHJ1Y3QgcHRfcmVncyByZWdzOwotCQorCiAJbWVtc2V0KCZyZWdzLCAwLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKIAlyZWdzLnhkcyA9ICh1MzIpc2V0dXBfYmFzZSA+PiA0OwogCXJlZ3MueHNzID0gMHg5MDAwOwpAQCAtMjI4LDE4ICsyMjcsMTggQEAKIAogCiBpbWFnZV9oZWFkZXJfdCAqZmFrZV96aW1hZ2VfaGVhZGVyKGltYWdlX2hlYWRlcl90ICpoZHIsIHZvaWQgKnB0ciwgaW50IHNpemUpCi17CQorewogCS8qIFRoZXJlIGlzIG5vIHdheSB0byBrbm93IHRoZSBzaXplIG9mIGEgekltYWdlIC4uLiAqCiAJICogc28gd2UgYXNzdW1lIHRoYXQgMk1CIHdpbGwgYmUgZW5vdWdoIGZvciBub3cgKi8KICNkZWZpbmUgWklNQUdFX1NJWkUgMHgyMDAwMDAKLQkKKwogCS8qIGxvYWQgYSAxTUIsIHRoZSBsb2FkZWQgd2lsbCBoYXZlIHRvIGJlIG1vdmVkIHRvIGl0cyBmaW5hbAogCSAqIHBvc2l0aW9uIGFnYWluIGxhdGVyLi4uICovCiAjZGVmaW5lIFpJTUFHRV9MT0FEIDB4MTAwMDAwCi0JCisKIAl1bG9uZyBjaGVja3N1bTsKLQkKLSAJaWYgKEtFUk5FTF9NQUdJQyAhPSAqKHUxNiopKHB0ciArIEJPT1RfRkxBR19PRkYpKSB7CisKKwlpZiAoS0VSTkVMX01BR0lDICE9ICoodTE2KikocHRyICsgQk9PVF9GTEFHX09GRikpIHsKIAkJLyogbm90IGEgekltYWdlIG9yIGJ6SW1hZ2UgKi8KIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMjQ3LDEzICsyNDYsMTMgQEAKIAlpZiAoLTEgPT0gc2l6ZSkgewogCQlzaXplID0gWklNQUdFX1NJWkU7CiAJfQotI2lmIDAJCisjaWYgMAogCWNoZWNrc3VtID0gY3JjMzIgKDAsIHB0ciwgc2l6ZSk7CiAjZWxzZQogCWNoZWNrc3VtID0gMDsKLSNlbmRpZgkJCisjZW5kaWYKIAltZW1zZXQoaGRyLCAwLCBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpKTsKLQkKKwogCS8qIEJ1aWxkIG5ldyBoZWFkZXIgKi8KIAloZHItPmloX21hZ2ljID0gaHRvbmwoSUhfTUFHSUMpOwogCWhkci0+aWhfdGltZSAgPSAwOwpAQCAtMjcxLDYgKzI3MCw2IEBACiAJY2hlY2tzdW0gPSBjcmMzMigwLChjb25zdCBjaGFyICopaGRyLHNpemVvZihpbWFnZV9oZWFkZXJfdCkpOwogCiAJaGRyLT5paF9oY3JjID0gaHRvbmwoY2hlY2tzdW0pOwotCQorCiAJcmV0dXJuIGhkcjsKIH0KZGlmZiAtLWdpdCBhL2xpYl9taXBzL01ha2VmaWxlIGIvbGliX21pcHMvTWFrZWZpbGUKaW5kZXggNTQwMzgzZC4uZDU5ODBlNiAxMDA2NDQKLS0tIGEvbGliX21pcHMvTWFrZWZpbGUKKysrIGIvbGliX21pcHMvTWFrZWZpbGUKQEAgLTI1LDcgKzI1LDcgQEAKIAogTElCCT0gbGliJChBUkNIKS5hCiAKLUFPQkpTCT0gCitBT0JKUwk9CiAKIENPQkpTCT0gYm9hcmQubyB0aW1lLm8gbWlwc19saW51eC5vCiAKZGlmZiAtLWdpdCBhL2xpYl9taXBzL2JvYXJkLmMgYi9saWJfbWlwcy9ib2FyZC5jCmluZGV4IDJiYmYwMjkuLjExZTUwMTEgMTAwNjQ0Ci0tLSBhL2xpYl9taXBzL2JvYXJkLmMKKysrIGIvbGliX21pcHMvYm9hcmQuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAjaWZkZWYgREVCVUcKIAlwcmludGYgKCJUb3Agb2YgUkFNIHVzYWJsZSBmb3IgVS1Cb290IGF0OiAlMDhseFxuIiwgYWRkcik7CiAjZW5kaWYKLQkgCisKIAkJLyogUmVzZXJ2ZSBtZW1vcnkgZm9yIFUtQm9vdCBjb2RlLCBkYXRhICYgYnNzCiAJCSAqIHJvdW5kIGRvd24gdG8gbmV4dCAxNiBrQiBsaW1pdAogCQkgKi8KQEAgLTMwNCw3ICszMDQsNiBAQAogdm9pZCBib2FyZF9pbml0X3IgKGdkX3QgKmlkLCB1bG9uZyBkZXN0X2FkZHIpCiB7CiAJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0KIAljbWRfdGJsX3QgKmNtZHRwOwogCXVsb25nIHNpemU7CiAJZXh0ZXJuIHZvaWQgbWFsbG9jX2Jpbl9yZWxvYyAodm9pZCk7CkBAIC0zMjksNyArMzI4LDcgQEAKIAkvKgogCSAqIFdlIGhhdmUgdG8gcmVsb2NhdGUgdGhlIGNvbW1hbmQgdGFibGUgbWFudWFsbHkKIAkgKi8KLQlmb3IgKGNtZHRwID0gJmNtZF90YmxbMF07IGNtZHRwLT5uYW1lOyBjbWR0cCsrKSB7CisgCWZvciAoY21kdHAgPSAmX191X2Jvb3RfY21kX3N0YXJ0OyBjbWR0cCAhPSAgJl9fdV9ib290X2NtZF9lbmQ7IGNtZHRwKyspIHsKIAkJdWxvbmcgYWRkcjsKIAogCQlhZGRyID0gKHVsb25nKSAoY21kdHAtPmNtZCkgKyBnZC0+cmVsb2Nfb2ZmOwpAQCAtMzU4LDcgKzM1Nyw3IEBACiAjaWZuZGVmIENGR19FTlZfSVNfTk9XSEVSRQogCWVudl9uYW1lX3NwZWMgKz0gZ2QtPnJlbG9jX29mZjsKICNlbmRpZgotCQorCiAJLyogY29uZmlndXJlIGF2YWlsYWJsZSBGTEFTSCBiYW5rcyAqLwogCXNpemUgPSBmbGFzaF9pbml0KCk7CiAJZGlzcGxheV9mbGFzaF9jb25maWcgKHNpemUpOwpAQCAtNDM0LDQgKzQzMywzIEBACiAJcHV0cyAoIiMjIyBFUlJPUiAjIyMgUGxlYXNlIFJFU0VUIHRoZSBib2FyZCAjIyNcbiIpOwogCWZvciAoOzspOwogfQotCmRpZmYgLS1naXQgYS9saWJfbWlwcy9taXBzX2xpbnV4LmMgYi9saWJfbWlwcy9taXBzX2xpbnV4LmMKaW5kZXggZTczZDRkOC4uNTQ2OWQ1MCAxMDA2NDQKLS0tIGEvbGliX21pcHMvbWlwc19saW51eC5jCisrKyBiL2xpYl9taXBzL21pcHNfbGludXguYwpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2luY2x1ZGUgPGNtZF9ib290Lmg+CiAjaW5jbHVkZSA8aW1hZ2UuaD4KICNpbmNsdWRlIDx6bGliLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtNDEsNiArNDAsOCBAQAogCiBleHRlcm4gaW1hZ2VfaGVhZGVyX3QgaGVhZGVyOyAgICAgICAgICAgLyogZnJvbSBjbWRfYm9vdG0uYyAqLwogCitleHRlcm4gaW50IGRvX3Jlc2V0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKIHN0YXRpYyBpbnQJbGludXhfYXJnYzsKIHN0YXRpYyBjaGFyICoqCWxpbnV4X2FyZ3Y7CiAKQEAgLTExMiw3ICsxMTMsNyBAQAogCSAgICBjc3VtID0gY3JjMzIgKDAsIChjaGFyICopZGF0YSwgbGVuKTsKIAkgICAgaWYgKGNzdW0gIT0gbnRvaGwoaGRyLT5paF9kY3JjKSkgewogCQlwcmludGYgKCJCYWQgRGF0YSBDUkNcbiIpOwotCSAgICAgICAgU0hPV19CT09UX1BST0dSRVNTICgtMTIpOworCQlTSE9XX0JPT1RfUFJPR1JFU1MgKC0xMik7CiAJCWRvX3Jlc2V0IChjbWR0cCwgZmxhZywgYXJnYywgYXJndik7CiAJICAgIH0KIAkgICAgcHJpbnRmICgiT0tcbiIpOwpAQCAtMTU0LDcgKzE1NSw3IEBACiAJLyoKIAkgKiBubyBpbml0cmQgaW1hZ2UKIAkgKi8KLSAgICAgICAgU0hPV19CT09UX1BST0dSRVNTICgxNCk7CisJU0hPV19CT09UX1BST0dSRVNTICgxNCk7CiAKIAlkYXRhID0gMDsKICAgICB9CkBAIC0yMTksMTkgKzIyMCwxOSBAQAogCXF1b3RlID0gc3RyY2hyIChsaW5lLCAnIicpOwogCW5leHQgPSBzdHJjaHIgKGxpbmUsICcgJyk7CiAKLSAgICAgICAgd2hpbGUgKG5leHQgIT0gTlVMTCAmJiBxdW90ZSAhPSBOVUxMICYmIHF1b3RlIDwgbmV4dCkKKwl3aGlsZSAobmV4dCAhPSBOVUxMICYmIHF1b3RlICE9IE5VTEwgJiYgcXVvdGUgPCBuZXh0KQogCXsKIAkgICAgLyogd2UgZm91bmQgYSBsZWZ0IHF1b3RlIGJlZm9yZSB0aGUgbmV4dCBibGFuawotICAgICAgICAgICAgICogbm93IHdlIGhhdmUgdG8gZmluZCB0aGUgbWF0Y2hpbmcgcmlnaHQgcXVvdGUKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbmV4dCA9IHN0cmNociAocXVvdGUgKyAxLCAnIicpOwotICAgICAgICAgICAgaWYgKG5leHQgIT0gTlVMTCkKKwkgICAgICogbm93IHdlIGhhdmUgdG8gZmluZCB0aGUgbWF0Y2hpbmcgcmlnaHQgcXVvdGUKKwkgICAgICovCisJICAgIG5leHQgPSBzdHJjaHIgKHF1b3RlICsgMSwgJyInKTsKKwkgICAgaWYgKG5leHQgIT0gTlVMTCkKIAkgICAgewotICAgICAgICAgICAgICAgIHF1b3RlID0gc3RyY2hyIChuZXh0ICsgMSwgJyInKTsKLSAgICAgICAgICAgICAgICBuZXh0ID0gc3RyY2hyIChuZXh0ICsgMSwgJyAnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCQorCQlxdW90ZSA9IHN0cmNociAobmV4dCArIDEsICciJyk7CisJCW5leHQgPSBzdHJjaHIgKG5leHQgKyAxLCAnICcpOworCSAgICB9CisJfQorCiAJaWYgKG5leHQgPT0gTlVMTCkKIAl7CiAJICAgIG5leHQgPSBsaW5lICsgc3RybGVuIChsaW5lKTsKQEAgLTI0Myw5ICsyNDQsOSBAQAogCiAJYXJncCArPSBuZXh0IC0gbGluZSArIDE7CiAJbGludXhfYXJnYyArKzsKLSAgICAgICAgCisKIAlpZiAoKm5leHQpIG5leHQgKys7Ci0JCisKIAlsaW5lID0gbmV4dDsKICAgICB9CiAKQEAgLTI2OSw3ICsyNzAsNyBAQAogCiAJc3RyY3B5IChsaW51eF9lbnZfcCwgZW52X3ZhbCk7CiAJbGludXhfZW52X3AgKz0gc3RybGVuIChlbnZfdmFsKTsKLQkKKwogCWxpbnV4X2Vudl9wICsrOwogCWxpbnV4X2VudiBbKysgbGludXhfZW52X2lkeF0gPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL2xpYl9taXBzL3RpbWUuYyBiL2xpYl9taXBzL3RpbWUuYwppbmRleCA5ZTYxMzhkLi4wY2I3MzNjIDEwMDY0NAotLS0gYS9saWJfbWlwcy90aW1lLmMKKysrIGIvbGliX21pcHMvdGltZS5jCkBAIC05OSw1ICs5OSwzIEBACiB7CiAJcmV0dXJuIENGR19IWjsKIH0KLQotCmRpZmYgLS1naXQgYS9saWJfcHBjL2JvYXJkLmMgYi9saWJfcHBjL2JvYXJkLmMKaW5kZXggOWJjNzdiNS4uMDQ0ZDhmOCAxMDA2NDQKLS0tIGEvbGliX3BwYy9ib2FyZC5jCisrKyBiL2xpYl9wcGMvYm9hcmQuYwpAQCAtNDYsOSArNDYsNiBAQAogI2luY2x1ZGUgPHN0YXR1c19sZWQuaD4KICNlbmRpZgogI2luY2x1ZGUgPG5ldC5oPgotI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0JFREJVRykKLSNpbmNsdWRlIDxjbWRfYmVkYnVnLmg+Ci0jZW5kaWYKICNpZmRlZiBDRkdfQUxMT0NfRFBSQU0KICNpZiAhZGVmaW5lZChDT05GSUdfODI2MCkKICNpbmNsdWRlIDxjb21tcHJvYy5oPgpAQCAtOTUsOSArOTIsMTIgQEAKIAogZXh0ZXJuIHVsb25nIF9faW5pdF9lbmQ7CiBleHRlcm4gdWxvbmcgX2VuZDsKLQogdWxvbmcgbW9uaXRvcl9mbGFzaF9sZW47CiAKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9CRURCVUcpCisjaW5jbHVkZSA8YmVkYnVnL3R5cGUuaD4KKyNlbmRpZgorCiAvKgogICogQmVnaW4gYW5kIEVuZCBvZiBtZW1vcnkgYXJlYSBmb3IgbWFsbG9jKCksIGFuZCBjdXJyZW50ICJicmsiCiAgKi8KQEAgLTM4Miw3ICszODIsNyBAQAogCSAqIHJlbG9jYXRlIHRoZSBjb2RlIGFuZCBjb250aW51ZSBydW5uaW5nIGZyb20gRFJBTS4KIAkgKgogCSAqIFJlc2VydmUgbWVtb3J5IGF0IGVuZCBvZiBSQU0gZm9yICh0b3AgZG93biBpbiB0aGF0IG9yZGVyKToKLSAgICAgICAgICogIC0ga2VybmVsIGxvZyBidWZmZXIKKwkgKiAgLSBrZXJuZWwgbG9nIGJ1ZmZlcgogCSAqICAtIHByb3RlY3RlZCBSQU0KIAkgKiAgLSBMQ0QgZnJhbWVidWZmZXIKIAkgKiAgLSBtb25pdG9yIGNvZGUKQEAgLTU3MCw3ICs1NzAsNiBAQAogdm9pZCBib2FyZF9pbml0X3IgKGdkX3QgKmlkLCB1bG9uZyBkZXN0X2FkZHIpCiB7CiAJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7Ci0KIAljbWRfdGJsX3QgKmNtZHRwOwogCWNoYXIgKnMsICplOwogCWJkX3QgKmJkOwpAQCAtNTk2LDE1ICs1OTUsMTQgQEAKIAlXQVRDSERPR19SRVNFVCAoKTsKIAogCWdkLT5yZWxvY19vZmYgPSBkZXN0X2FkZHIgLSBDRkdfTU9OSVRPUl9CQVNFOwotCQorCiAJbW9uaXRvcl9mbGFzaF9sZW4gPSAodWxvbmcpJl9faW5pdF9lbmQgLSBkZXN0X2FkZHI7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gcmVsb2NhdGUgdGhlIGNvbW1hbmQgdGFibGUgbWFudWFsbHkKIAkgKi8KLQlmb3IgKGNtZHRwID0gJmNtZF90YmxbMF07IGNtZHRwLT5uYW1lOyBjbWR0cCsrKSB7CisJZm9yIChjbWR0cCA9ICZfX3VfYm9vdF9jbWRfc3RhcnQ7IGNtZHRwICE9ICAmX191X2Jvb3RfY21kX2VuZDsgY21kdHArKykgewogCQl1bG9uZyBhZGRyOwotCiAJCWFkZHIgPSAodWxvbmcpIChjbWR0cC0+Y21kKSArIGdkLT5yZWxvY19vZmY7CiAjaWYgMAogCQlwcmludGYgKCJDb21tYW5kIFwiJXNcIjogMHglMDhseCA9PiAweCUwOGx4XG4iLApAQCAtNzM3LDEwICs3MzUsMTAgQEAKIAogCS8qCiAJICogRmlsbCBpbiBtaXNzaW5nIGZpZWxkcyBvZiBiZF9pbmZvLgotICAgICAgICAgKiBXZSBkbyB0aGlzIGhlcmUsIHdoZXJlIHdlIGhhdmUgIm5vcm1hbCIgYWNjZXNzIHRvIHRoZQotICAgICAgICAgKiBlbnZpcm9ubWVudDsgd2UgdXNlZCB0byBkbyB0aGlzIHN0aWxsIHJ1bm5pbmcgZnJvbSBST00sCi0gICAgICAgICAqIHdoZXJlIGhhZCB0byB1c2UgZ2V0ZW52X3IoKSwgd2hpY2ggY2FuIGJlIHByZXR0eSBzbG93IHdoZW4KLSAgICAgICAgICogdGhlIGVudmlyb25tZW50IGlzIGluIEVFUFJPTS4KKwkgKiBXZSBkbyB0aGlzIGhlcmUsIHdoZXJlIHdlIGhhdmUgIm5vcm1hbCIgYWNjZXNzIHRvIHRoZQorCSAqIGVudmlyb25tZW50OyB3ZSB1c2VkIHRvIGRvIHRoaXMgc3RpbGwgcnVubmluZyBmcm9tIFJPTSwKKwkgKiB3aGVyZSBoYWQgdG8gdXNlIGdldGVudl9yKCksIHdoaWNoIGNhbiBiZSBwcmV0dHkgc2xvdyB3aGVuCisJICogdGhlIGVudmlyb25tZW50IGlzIGluIEVFUFJPTS4KIAkgKi8KIAlzID0gZ2V0ZW52ICgiZXRoYWRkciIpOwogI2lmIGRlZmluZWQgKENPTkZJR19NQlgpIHx8IGRlZmluZWQgKENPTkZJR19SUFhDTEFTU0lDKSB8fCBkZWZpbmVkKENPTkZJR19JQUQyMTApCmRpZmYgLS1naXQgYS9saWJfcHBjL2V4dGFibGUuYyBiL2xpYl9wcGMvZXh0YWJsZS5jCmluZGV4IDJmOTBkZjAuLmQ5MmYxNDIgMTAwNjQ0Ci0tLSBhL2xpYl9wcGMvZXh0YWJsZS5jCisrKyBiL2xpYl9wcGMvZXh0YWJsZS5jCkBAIC01MCwyMCArNTAsMjAgQEAKIAkJIGNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmxhc3QsCiAJCSB1bnNpZ25lZCBsb25nIHZhbHVlKQogewotICAgICAgICB3aGlsZSAoZmlyc3QgPD0gbGFzdCkgeworCXdoaWxlIChmaXJzdCA8PSBsYXN0KSB7CiAJCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKm1pZDsKIAkJbG9uZyBkaWZmOwogCiAJCW1pZCA9IChsYXN0IC0gZmlyc3QpIC8gMiArIGZpcnN0OwogCQlkaWZmID0gbWlkLT5pbnNuIC0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKGRpZmYgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtaWQtPmZpeHVwOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRpZmYgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBtaWQrMTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gbWlkLTE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7CisJCWlmIChkaWZmID09IDApCisJCQlyZXR1cm4gbWlkLT5maXh1cDsKKwkJZWxzZSBpZiAoZGlmZiA8IDApCisJCQlmaXJzdCA9IG1pZCsxOworCQllbHNlCisJCQlsYXN0ID0gbWlkLTE7CisJfQorCXJldHVybiAwOwogfQogCiBpbnQJZXhfdGFiX21lc3NhZ2UgPSAxOwpkaWZmIC0tZ2l0IGEvbGliX3BwYy9rZ2RiLmMgYi9saWJfcHBjL2tnZGIuYwppbmRleCBjZWYzNWQzLi40YzVkNzlhIDEwMDY0NAotLS0gYS9saWJfcHBjL2tnZGIuYworKysgYi9saWJfcHBjL2tnZGIuYwpAQCAtMzIwLDcgKzMyMCw3IEBACiB7CiAJYXNtKCIJLmdsb2JsIGJyZWFraW5zdFxuXAogCSAgICAgYnJlYWtpbnN0OiAubG9uZyAweDdkODIxMDA4XG5cCi0gICAgICAgICAgICAiKTsKKwkgICAgIik7CiB9CiAKICNlbmRpZiAvKiBDRkdfQ01EX0tHREIgKi8KZGlmZiAtLWdpdCBhL2xpYl9wcGMvdGltZS5jIGIvbGliX3BwYy90aW1lLmMKaW5kZXggM2IzYzUwZS4uNTFlOGU4NDAgMTAwNjQ0Ci0tLSBhL2xpYl9wcGMvdGltZS5jCisrKyBiL2xpYl9wcGMvdGltZS5jCkBAIC05Nyw0ICs5NywzIEBACiAJcmV0dXJuICgwKTsKIH0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQpkaWZmIC0tZ2l0IGEvbmV0L2Jvb3RwLmMgYi9uZXQvYm9vdHAuYwppbmRleCA4ZTBmMzMyLi4zMWIyMjQzIDEwMDY0NAotLS0gYS9uZXQvYm9vdHAuYworKysgYi9uZXQvYm9vdHAuYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJZGVidWcgKCJCb290ZmlsZTogJXNcbiIsIEJvb3RGaWxlKTsKIAogCS8qIFByb3BhZ2F0ZSB0byBlbnZpcm9ubWVudDoKLSAgICAgICAgICogZG9uJ3QgZGVsZXRlIGV4aXNpbmcgZW50cnkgd2hlbiBCT09UUCAvIERIQ1AgcmVwbHkgZG9lcworCSAqIGRvbid0IGRlbGV0ZSBleGlzaW5nIGVudHJ5IHdoZW4gQk9PVFAgLyBESENQIHJlcGx5IGRvZXMKIAkgKiBub3QgY29udGFpbiBhIG5ldyB2YWx1ZQogCSAqLwogCWlmICgqQm9vdEZpbGUpIHsKQEAgLTIxMywxNiArMjEzLDE2IEBACiAJCWJyZWFrOwogCWNhc2UgMTg6CS8qIEV4dGVuc2lvbiBwYXRoIC0gTm90IHlldCBzdXBwb3J0ZWQJCSovCiAJCS8qCi0gICAgICAgICAgICAgICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUKLSAgICAgICAgICAgICAgICAgKiB2ZW5kb3IgYXJlYSBpbiBhbm90aGVyIGZpbGUgdGhhdCB0aGUgY2xpZW50IGNhbgotICAgICAgICAgICAgICAgICAqIGFjY2VzcyB2aWEgVEZUUC4KKwkJICogVGhpcyBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUKKwkJICogdmVuZG9yIGFyZWEgaW4gYW5vdGhlciBmaWxlIHRoYXQgdGhlIGNsaWVudCBjYW4KKwkJICogYWNjZXNzIHZpYSBURlRQLgogCQkgKi8KIAkJYnJlYWs7CiAgICAgLyogSVAgaG9zdCBsYXllciBmaWVsZHMgKi8KIAljYXNlIDQwOgkvKiBOSVMgRG9tYWluIG5hbWUJCQkJKi8KIAkJaWYgKE5ldE91ck5JU0RvbWFpblswXSA9PSAwKSB7CiAJCSAgICBzaXplID0gdHJ1bmNhdGVfc3ogKCJOSVMgRG9tYWluIE5hbWUiLAotCQkgICAgCQkJc2l6ZW9mKE5ldE91ck5JU0RvbWFpbiksCisJCQkJCXNpemVvZihOZXRPdXJOSVNEb21haW4pLAogCQkJCQlzaXplKTsKIAkJICAgIG1lbWNweSgmTmV0T3VyTklTRG9tYWluLCBleHQrMiwgc2l6ZSk7CiAJCSAgICBOZXRPdXJOSVNEb21haW5bc2l6ZV0gPSAwIDsKQEAgLTIzMSw4ICsyMzEsOCBAQAogICAgIC8qIEFwcGxpY2F0aW9uIGxheWVyIGZpZWxkcyAqLwogCWNhc2UgNDM6CS8qIFZlbmRvciBzcGVjaWZpYyBpbmZvIC0gTm90IHlldCBzdXBwb3J0ZWQJKi8KIAkJLyoKLSAgICAgICAgICAgICAgICAgKiBCaW5hcnkgaW5mb3JtYXRpb24gdG8gZXhjaGFuZ2Ugc3BlY2lmaWMKLSAgICAgICAgICAgICAgICAgKiBwcm9kdWN0IGluZm9ybWF0aW9uLgorCQkgKiBCaW5hcnkgaW5mb3JtYXRpb24gdG8gZXhjaGFuZ2Ugc3BlY2lmaWMKKwkJICogcHJvZHVjdCBpbmZvcm1hdGlvbi4KIAkJICovCiAJCWJyZWFrOwogICAgIC8qIFJlc2VydmVkIChjdXN0b20pIGZpZWxkcyAoMTI4Li4yNTQpICovCkBAIC0yODMsNyArMjgzLDcgQEAKICAgICB9CiAKICAgICBpZiAoTmV0T3VyTklTRG9tYWluWzBdKSB7Ci0gICAgICAgIHByaW50ZigiTmV0T3VyTklTRG9tYWluIDogJXNcbiIsIE5ldE91ck5JU0RvbWFpbik7CisJcHJpbnRmKCJOZXRPdXJOSVNEb21haW4gOiAlc1xuIiwgTmV0T3VyTklTRG9tYWluKTsKICAgICB9CiAKICAgICBpZiAoTmV0Qm9vdEZpbGVTaXplKSB7CkBAIC0zODEsNyArMzgxLDcgQEAKICAgICAqZSsrID0gKDU3Ni0zMTIrT1BUX1NJWkUpICYgMHhmZjsKIAogICAgIGlmICggU2VydmVySUQgKSB7Ci0gICAgCSAgICBpbnQgdG1wID0gbnRvaGwoU2VydmVySUQpOworCSAgICBpbnQgdG1wID0gbnRvaGwoU2VydmVySUQpOwogCiAJICAgICplKysgPSA1NDsJLyogU2VydmVySUQgKi8KIAkgICAgKmUrKyA9IDQ7CkBAIC0zOTIsNyArMzkyLDcgQEAKICAgICB9CiAKICAgICBpZiAoIFJlcXVlc3RlZElQICkgewotICAgIAkgICAgaW50IHRtcCA9IG50b2hsKFJlcXVlc3RlZElQKTsKKwkgICAgaW50IHRtcCA9IG50b2hsKFJlcXVlc3RlZElQKTsKIAogCSAgICAqZSsrID0gNTA7CS8qIFJlcXVlc3RlZCBJUCAqLwogCSAgICAqZSsrID0gNDsKQEAgLTQwNCw3ICs0MDQsNyBAQAogCiAjaWYgKENPTkZJR19CT09UUF9NQVNLICYgQ09ORklHX0JPT1RQX1ZFTkRPUkVYKQogICAgIGlmICgoeCA9IGRoY3BfdmVuZG9yZXhfcHJlcCAoZSkpKQotICAgIAlyZXR1cm4geCAtIHN0YXJ0IDsKKwlyZXR1cm4geCAtIHN0YXJ0IDsKICNlbmRpZgogCiAgICAgKmUrKyA9IDU1OwkJLyogUGFyYW1ldGVyIFJlcXVlc3QgTGlzdCAqLwpAQCAtNTkwLDcgKzU5MCw3IEBACiAJCXN1bSA9IHNlZWQxICsgc2VlZDI7CiAJCWlmIChzdW0gPCBzZWVkMSB8fCBzdW0gPCBzZWVkMikKIAkJCXN1bSsrOwotCSAgICAgICAgc2VlZDIgPSBzZWVkMTsKKwkJc2VlZDIgPSBzZWVkMTsKIAkJc2VlZDEgPSBzdW07CiAKIAkJaWYgKEJvb3RwVHJ5PD0yKSB7CS8qIFN0YXJ0IHdpdGggbWF4IDEwMjQgKiAxbXMgKi8KQEAgLTcyMiw3ICs3MjIsNyBAQAogCQkJZGVmYXVsdDoKICNpZiAoQ09ORklHX0JPT1RQX01BU0sgJiBDT05GSUdfQk9PVFBfVkVORE9SRVgpCiAJCQkgICAgaWYgKGRoY3BfdmVuZG9yZXhfcHJvYyhwb3B0KSkKLSAgICAgICAgCQkJYnJlYWs7CisJCQkJYnJlYWs7CiAjZW5kaWYKIAkJCQlwcmludGYoIioqKiBVbmhhbmRsZWQgREhDUCBPcHRpb24gaW4gT0ZGRVIvQUNLOiAlZFxuIiwKIAkJCQkJKnBvcHQpOwpkaWZmIC0tZ2l0IGEvbmV0L2V0aC5jIGIvbmV0L2V0aC5jCmluZGV4IDVmOWMzYTYuLjQ2OGI4NGMgMTAwNjQ0Ci0tLSBhL25ldC9ldGguYworKysgYi9uZXQvZXRoLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogCWV0aF9jdXJyZW50ID0gTlVMTDsKIAogI2lmIGRlZmluZWQoQ09ORklHXzQwNUdQKSB8fCBkZWZpbmVkKENPTkZJR180NDApIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKQotICAgICAgICBwcGNfNHh4X2V0aF9pbml0aWFsaXplKGJpcyk7CisJcHBjXzR4eF9ldGhfaW5pdGlhbGl6ZShiaXMpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0lOQ0FfSVBfU1dJVENICiAJaW5jYV9zd2l0Y2hfaW5pdGlhbGl6ZShiaXMpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldC5jIGIvbmV0L25ldC5jCmluZGV4IDMwODE4MjkuLmNlNzkzNDEgMTAwNjQ0Ci0tLSBhL25ldC9uZXQuYworKysgYi9uZXQvbmV0LmMKQEAgLTE3NSw5ICsxNzUsOSBAQAogCSAgICB9CiAJICAgIE5ldEFycFdhaXRSZXBseUlQID0gTmV0T3VyR2F0ZXdheUlQOwogCX0gZWxzZQotICAgICAgICAgICAgTmV0QXJwV2FpdFJlcGx5SVAgPSBOZXRBcnBXYWl0UGFja2V0SVA7CisJICAgIE5ldEFycFdhaXRSZXBseUlQID0gTmV0QXJwV2FpdFBhY2tldElQOwogCi0gICAgICAgIE5ldFdyaXRlSVAoKHVjaGFyKikmYXJwLT5hcl9kYXRhWzE2XSwgTmV0QXJwV2FpdFJlcGx5SVApOworCU5ldFdyaXRlSVAoKHVjaGFyKikmYXJwLT5hcl9kYXRhWzE2XSwgTmV0QXJwV2FpdFJlcGx5SVApOwogCSh2b2lkKSBldGhfc2VuZChOZXRUeFBhY2tldCwgRVRIRVJfSERSX1NJWkUgKyBBUlBfSERSX1NJWkUpOwogfQogCkBAIC0yOTUsOCArMjk1LDggQEAKIAljYXNlIEJPT1RQOgogCWNhc2UgUkFSUDoKIAkJLyoKLSAgICAgICAgICAgICAgICAgKiBpbml0aWFsaXplIG91ciBJUCBhZGRyIHRvIDAgaW4gb3JkZXIgdG8gYWNjZXB0IEFOWQotICAgICAgICAgICAgICAgICAqIElQIGFkZHIgYXNzaWduZWQgdG8gdXMgYnkgdGhlIEJPT1RQIC8gUkFSUCBzZXJ2ZXIKKwkJICogaW5pdGlhbGl6ZSBvdXIgSVAgYWRkciB0byAwIGluIG9yZGVyIHRvIGFjY2VwdCBBTlkKKwkJICogSVAgYWRkciBhc3NpZ25lZCB0byB1cyBieSB0aGUgQk9PVFAgLyBSQVJQIHNlcnZlcgogCQkgKi8KIAkJTmV0T3VySVAgPSAwOwogCQlOZXRTZXJ2ZXJJUCA9IDA7CkBAIC0zODAsNyArMzgwLDcgQEAKIAkJICoJQWJvcnQgaWYgY3RybC1jIHdhcyBwcmVzc2VkLgogCQkgKi8KIAkJaWYgKGN0cmxjKCkpIHsKLQkJICAgICAgICBldGhfaGFsdCgpOworCQkJZXRoX2hhbHQoKTsKIAkJCXByaW50ZigiXG5BYm9ydFxuIik7CiAJCQlyZXR1cm4gKC0xKTsKIAkJfQpAQCAtNjcxLDEyICs2NzEsMTIgQEAKIAljYXNlIFBST1RfQVJQOgogCQkvKgogCQkgKiBXZSBoYXZlIHRvIGRlYWwgd2l0aCB0d28gdHlwZXMgb2YgQVJQIHBhY2tldHM6Ci0gICAgICAgICAgICAgICAgICogLSBSRVFVRVNUIHBhY2tldHMgd2lsbCBiZSBhbnN3ZXJlZCBieSBzZW5kaW5nICBvdXIKLSAgICAgICAgICAgICAgICAgKiAgIElQIGFkZHJlc3MgLSBpZiB3ZSBrbm93IGl0LgotICAgICAgICAgICAgICAgICAqIC0gUkVQTFkgcGFja2F0ZXMgYXJlIGV4cGVjdGVkIG9ubHkgYWZ0ZXIgd2UgYXNrZWQKLSAgICAgICAgICAgICAgICAgKiAgIGZvciB0aGUgVEZUUCBzZXJ2ZXIncyBvciB0aGUgZ2F0ZXdheSdzIGV0aGVybmV0Ci0gICAgICAgICAgICAgICAgICogICBhZGRyZXNzOyBzbyBpZiB3ZSByZWNlaXZlIHN1Y2ggYSBwYWNrZXQsIHdlIHNldAotICAgICAgICAgICAgICAgICAqICAgdGhlIHNlcnZlciBldGhlcm5ldCBhZGRyZXNzCisJCSAqIC0gUkVRVUVTVCBwYWNrZXRzIHdpbGwgYmUgYW5zd2VyZWQgYnkgc2VuZGluZyAgb3VyCisJCSAqICAgSVAgYWRkcmVzcyAtIGlmIHdlIGtub3cgaXQuCisJCSAqIC0gUkVQTFkgcGFja2F0ZXMgYXJlIGV4cGVjdGVkIG9ubHkgYWZ0ZXIgd2UgYXNrZWQKKwkJICogICBmb3IgdGhlIFRGVFAgc2VydmVyJ3Mgb3IgdGhlIGdhdGV3YXkncyBldGhlcm5ldAorCQkgKiAgIGFkZHJlc3M7IHNvIGlmIHdlIHJlY2VpdmUgc3VjaCBhIHBhY2tldCwgd2Ugc2V0CisJCSAqICAgdGhlIHNlcnZlciBldGhlcm5ldCBhZGRyZXNzCiAJCSAqLwogI2lmZGVmIEVUX0RFQlVHCiAJCXByaW50ZigiR290IEFSUFxuIik7CkBAIC04MTgsMTkgKzgxOCwxOSBAQAogCQkvKgogCQkgKiB3YXRjaCBmb3IgSUNNUCBob3N0IHJlZGlyZWN0cwogCQkgKgotICAgICAgICAgICAgICAgICAqIFRoZXJlIGlzIG5vIHJlYWwgaGFuZGxlciBjb2RlICh5ZXQpLiBXZSBqdXN0IHdhdGNoCi0gICAgICAgICAgICAgICAgICogZm9yIElDTVAgaG9zdCByZWRpcmVjdCBtZXNzYWdlcy4gSW4gY2FzZSBhbnlib2R5Ci0gICAgICAgICAgICAgICAgICogc2VlcyB0aGVzZSBtZXNzYWdlczogcGxlYXNlIGNvbnRhY3QgbWUKLSAgICAgICAgICAgICAgICAgKiAod2RAZGVueC5kZSksIG9yIC0gZXZlbiBiZXR0ZXIgLSBzZW5kIG1lIHRoZQotICAgICAgICAgICAgICAgICAqIG5lY2Vzc2FyeSBmaXhlcyA6LSkKKwkJICogVGhlcmUgaXMgbm8gcmVhbCBoYW5kbGVyIGNvZGUgKHlldCkuIFdlIGp1c3Qgd2F0Y2gKKwkJICogZm9yIElDTVAgaG9zdCByZWRpcmVjdCBtZXNzYWdlcy4gSW4gY2FzZSBhbnlib2R5CisJCSAqIHNlZXMgdGhlc2UgbWVzc2FnZXM6IHBsZWFzZSBjb250YWN0IG1lCisJCSAqICh3ZEBkZW54LmRlKSwgb3IgLSBldmVuIGJldHRlciAtIHNlbmQgbWUgdGhlCisJCSAqIG5lY2Vzc2FyeSBmaXhlcyA6LSkKIAkJICoKLSAgICAgICAgICAgICAgICAgKiBOb3RlOiBpbiBhbGwgY2FzZXMgd2hlcmUgSSBoYXZlIHNlZW4gdGhpcyBzbyBmYXIKLSAgICAgICAgICAgICAgICAgKiBpdCB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIHJvdXRlciBjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAqIGZvciBpbnN0YW5jZSB3aGVuIGEgcm91dGVyIHdhcyBjb25maWd1cmVkIGluIHRoZQotICAgICAgICAgICAgICAgICAqIEJPT1RQIHJlcGx5LCBidXQgdGhlIFRGVFAgc2VydmVyIHdhcyBvbiB0aGUgc2FtZQotICAgICAgICAgICAgICAgICAqIHN1Ym5ldC4gU28gdGhpcyBpcyBwcm9iYWJseSBhIHdhcm5pbmcgdGhhdCB5b3VyCi0gICAgICAgICAgICAgICAgICogY29uZmlndXJhdGlvbiBtaWdodCBiZSB3cm9uZy4gQnV0IEknbSBub3QgcmVhbGx5Ci0gICAgICAgICAgICAgICAgICogc3VyZSBpZiB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHNpdHVhdGlvbnMuCisJCSAqIE5vdGU6IGluIGFsbCBjYXNlcyB3aGVyZSBJIGhhdmUgc2VlbiB0aGlzIHNvIGZhcgorCQkgKiBpdCB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIHJvdXRlciBjb25maWd1cmF0aW9uLAorCQkgKiBmb3IgaW5zdGFuY2Ugd2hlbiBhIHJvdXRlciB3YXMgY29uZmlndXJlZCBpbiB0aGUKKwkJICogQk9PVFAgcmVwbHksIGJ1dCB0aGUgVEZUUCBzZXJ2ZXIgd2FzIG9uIHRoZSBzYW1lCisJCSAqIHN1Ym5ldC4gU28gdGhpcyBpcyBwcm9iYWJseSBhIHdhcm5pbmcgdGhhdCB5b3VyCisJCSAqIGNvbmZpZ3VyYXRpb24gbWlnaHQgYmUgd3JvbmcuIEJ1dCBJJ20gbm90IHJlYWxseQorCQkgKiBzdXJlIGlmIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgc2l0dWF0aW9ucy4KIAkJICovCiAJCWlmIChpcC0+aXBfcCA9PSBJUFBST1RPX0lDTVApIHsKIAkJCUlDTVBfdCAqaWNtcGggPSAoSUNNUF90ICopJihpcC0+dWRwX3NyYyk7CkBAIC05MTgsNyArOTE4LDcgQEAKIAkJCQlwdXRzICgiKioqIEVSUk9SOiBgZXRoYWRkcicgbm90IHNldFxuIik7CiAJCQkJYnJlYWs7CiAJCQkgICAgZGVmYXVsdDoKLQkJCSAgICAgICAgcHJpbnRmICgiKioqIEVSUk9SOiBgZXRoJWRhZGRyJyBub3Qgc2V0XG4iLAorCQkJCXByaW50ZiAoIioqKiBFUlJPUjogYGV0aCVkYWRkcicgbm90IHNldFxuIiwKIAkJCQkJbnVtKTsKIAkJCQlicmVhazsKIAkJCSAgICB9CkBAIC0xMDIzLDcgKzEwMjMsNyBAQAogewogICAgIHggPSBudG9obCh4KTsKICAgICBzcHJpbnRmIChzLCIlZC4lZC4lZC4lZCIsCi0gICAgCShpbnQpKCh4ID4+IDI0KSAmIDB4ZmYpLAorCShpbnQpKCh4ID4+IDI0KSAmIDB4ZmYpLAogCShpbnQpKCh4ID4+IDE2KSAmIDB4ZmYpLAogCShpbnQpKCh4ID4+ICA4KSAmIDB4ZmYpLAogCShpbnQpKCh4ID4+ICAwKSAmIDB4ZmYpCmRpZmYgLS1naXQgYS9wb3N0L2NwdS9iLmMgYi9wb3N0L2NwdS9iLmMKaW5kZXggMWFlMjJjYy4uYjRiMTdjOCAxMDA2NDQKLS0tIGEvcG9zdC9jcHUvYi5jCisrKyBiL3Bvc3QvY3B1L2IuYwpAQCAtODQsOCArODQsOCBAQAogICAgIH0KICAgICBpZiAocmV0ID09IDApCiAgICAgewotICAgIAlpZiAobGluaykKLSAgICAgICAgICAgIHJldCA9IGxyID09ICh1bG9uZykgY29kZSArIDI0ID8gMCA6IC0xOworCWlmIChsaW5rKQorCSAgICByZXQgPSBsciA9PSAodWxvbmcpIGNvZGUgKyAyNCA/IDAgOiAtMTsKIAllbHNlCiAJICAgIHJldCA9IGxyID09IDAgPyAwIDogLTE7CiAgICAgfQpAQCAtMTAwLDcgKzEwMCw3IEBACiAKICAgICBpZiAocmV0ID09IDApCiAgICAgewotICAgIAl1bG9uZyBjb2RlW10gPQorCXVsb25nIGNvZGVbXSA9CiAJewogCSAgIEFTTV9NRkxSKDQpLAogCSAgIEFTTV9NVExSKDMpLApAQCAtMTE1LDE1ICsxMTUsMTUgQEAKIAogCXJldCA9IHJlcyA9PSAwID8gMCA6IC0xOwogCi0gICAgCWlmIChyZXQgIT0gMCkKLSAgICAJewotICAgICAgICAgICAgcG9zdF9sb2cgKCJFcnJvciBhdCBiMSB0ZXN0ICFcbiIpOwotICAgIAl9CisJaWYgKHJldCAhPSAwKQorCXsKKwkgICAgcG9zdF9sb2cgKCJFcnJvciBhdCBiMSB0ZXN0ICFcbiIpOworCX0KICAgICB9CiAKICAgICBpZiAocmV0ID09IDApCiAgICAgewotICAgIAl1bG9uZyBjb2RlW10gPQorCXVsb25nIGNvZGVbXSA9CiAJewogCSAgIEFTTV9NRkxSKDQpLAogCSAgIEFTTV9NVExSKDMpLApAQCAtMTM4LDE1ICsxMzgsMTUgQEAKIAogCXJldCA9IHJlcyA9PSAodWxvbmcpY29kZSArIDEyID8gMCA6IC0xOwogCi0gICAgCWlmIChyZXQgIT0gMCkKLSAgICAJewotICAgICAgICAgICAgcG9zdF9sb2cgKCJFcnJvciBhdCBiMiB0ZXN0ICFcbiIpOwotICAgIAl9CisJaWYgKHJldCAhPSAwKQorCXsKKwkgICAgcG9zdF9sb2cgKCJFcnJvciBhdCBiMiB0ZXN0ICFcbiIpOworCX0KICAgICB9CiAKICAgICBpZiAocmV0ID09IDApCiAgICAgewotICAgICAgICB1bG9uZyBjYywgY2Q7CisJdWxvbmcgY2MsIGNkOwogCWludCBjb25kOwogCXVsb25nIGN0cjsKIAlpbnQgbGluazsKQEAgLTE1NywzMCArMTU3LDMwIEBACiAJewogCSAgICBmb3IgKGNkID0gMDsgY2QgPCA0ICYmIHJldCA9PSAwOyBjZCsrKQogCSAgICB7Ci0JICAgICAgICBmb3IgKGxpbmsgPSAwOyBsaW5rIDw9IDEgJiYgcmV0ID09IDA7IGxpbmsrKykKKwkJZm9yIChsaW5rID0gMDsgbGluayA8PSAxICYmIHJldCA9PSAwOyBsaW5rKyspCiAJCXsKIAkJICAgIGZvciAoY29uZCA9IDA7IGNvbmQgPD0gMSAmJiByZXQgPT0gMDsgY29uZCsrKQogCQkgICAgewotCQkgICAgICAgIGZvciAoY3RyID0gMTsgY3RyIDw9IDIgJiYgcmV0ID09IDA7IGN0cisrKQorCQkJZm9yIChjdHIgPSAxOyBjdHIgPD0gMiAmJiByZXQgPT0gMDsgY3RyKyspCiAJCQl7CiAJCQkgICAgaW50IGRlYyA9IGNkIDwgMjsKIAkJCSAgICBpbnQgY3IgPSBjb25kID8gMHg4MDAwMDAwMCA6IDB4MDAwMDAwMDA7CiAJCQkgICAgaW50IGp1bXBjID0gY2MgPj0gMiB8fAotCQkJICAgICAgICAgICAgICAgIChjYyA9PSAwICYmICFjb25kKSB8fAotICAgIAkJCSAgICAJCShjYyA9PSAxICYmIGNvbmQpOworCQkJCQkoY2MgPT0gMCAmJiAhY29uZCkgfHwKKwkJCQkJKGNjID09IDEgJiYgY29uZCk7CiAJCQkgICAgaW50IGp1bXBkID0gY2QgPj0gMiB8fAotCQkJICAgICAgICAgICAgICAgIChjZCA9PSAwICYmIGN0ciAhPSAxKSB8fAotICAgIAkJCSAgICAJCShjZCA9PSAxICYmIGN0ciA9PSAxKTsKKwkJCQkJKGNkID09IDAgJiYgY3RyICE9IDEpIHx8CisJCQkJCShjZCA9PSAxICYmIGN0ciA9PSAxKTsKIAkJCSAgICBpbnQganVtcCA9IGp1bXBjICYmIGp1bXBkOwogCiAJCQkgICAgcmV0ID0gY3B1X3Bvc3RfdGVzdF9iYyAobGluayA/IE9QX0JDTCA6IE9QX0JDLAotCQkJICAgICAgICAoY2MgPDwgMykgKyAoY2QgPDwgMSksIDAsIGp1bXAsIGRlYywgbGluaywKKwkJCQkoY2MgPDwgMykgKyAoY2QgPDwgMSksIDAsIGp1bXAsIGRlYywgbGluaywKIAkJCQljdHIsIGNyKTsKIAotCQkgICAgCSAgICBpZiAocmV0ICE9IDApCi0JCSAgICAJICAgIHsKLQkJICAgICAgICAgICAgICAgIHBvc3RfbG9nICgiRXJyb3IgYXQgYjMgdGVzdCAlZCAhXG4iLCBpKTsKLQkJICAgICAgICAgICAgfQorCQkJICAgIGlmIChyZXQgIT0gMCkKKwkJCSAgICB7CisJCQkJcG9zdF9sb2cgKCJFcnJvciBhdCBiMyB0ZXN0ICVkICFcbiIsIGkpOworCQkJICAgIH0KIAogCQkJICAgIGkrKzsKIAkJCX0KZGlmZiAtLWdpdCBhL3Bvc3QvY3B1L2NvbXBsZXguYyBiL3Bvc3QvY3B1L2NvbXBsZXguYwppbmRleCBkYzhiMDgwLi4wMzM1ODRiIDEwMDY0NAotLS0gYS9wb3N0L2NwdS9jb21wbGV4LmMKKysrIGIvcG9zdC9jcHUvY29tcGxleC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogICAgIGlmIChyZXQgIT0gMCkKICAgICB7Ci0gICAgICAgIHBvc3RfbG9nICgiRXJyb3IgYXQgY29tcGxleCB0ZXN0ICFcbiIpOworCXBvc3RfbG9nICgiRXJyb3IgYXQgY29tcGxleCB0ZXN0ICFcbiIpOwogICAgIH0KIAogICAgIHJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9wb3N0L2NwdS9jci5jIGIvcG9zdC9jcHUvY3IuYwppbmRleCA4ZTM4NzI5Li5kYTZlZjM3IDEwMDY0NAotLS0gYS9wb3N0L2NwdS9jci5jCisrKyBiL3Bvc3QvY3B1L2NyLmMKQEAgLTcwLDExICs3MCwxMSBAQAogfSBjcHVfcG9zdF9jcl90YWJsZTJbXSA9CiB7CiAgICAgewotICAgIAkweGEwMDAwMDAwLAorCTB4YTAwMDAwMDAsCiAJMQogICAgIH0sCiAgICAgewotICAgIAkweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsCiAJNQogICAgIH0sCiB9OwpAQCAtODksMTMgKzg5LDEzIEBACiB9IGNwdV9wb3N0X2NyX3RhYmxlM1tdID0KIHsKICAgICB7Ci0gICAgCTB4MDEyMzQ1NjcsCisJMHgwMTIzNDU2NywKIAkwLAogCTQsCiAJMHgwMTIzMDU2NwogICAgIH0sCiAgICAgewotICAgIAkweDAxMjM0NTY3LAorCTB4MDEyMzQ1NjcsCiAJNywKIAkwLAogCTB4NzEyMzQ1NjcKQEAgLTExNSwxMzEgKzExNSwxMzEgQEAKIHsKICAgICB7CiAJT1BfQ1JBTkQsCi0gICAgCTB4MDAwMGZmZmYsCisJMHgwMDAwZmZmZiwKIAkwLAogCTE2LAogCTAsCi0gICAgCTB4MDAwMGZmZmYKKwkweDAwMDBmZmZmCiAgICAgfSwKICAgICB7CiAJT1BfQ1JBTkQsCi0gICAgCTB4MDAwMGZmZmYsCisJMHgwMDAwZmZmZiwKIAkxNiwKIAkxNywKIAkwLAotICAgIAkweDgwMDBmZmZmCisJMHg4MDAwZmZmZgogICAgIH0sCiAgICAgewogCU9QX0NSQU5EQywKLSAgICAJMHgwMDAwZmZmZiwKKwkweDAwMDBmZmZmLAogCTAsCiAJMTYsCiAJMCwKLSAgICAJMHgwMDAwZmZmZgorCTB4MDAwMGZmZmYKICAgICB9LAogICAgIHsKIAlPUF9DUkFOREMsCi0gICAgCTB4MDAwMGZmZmYsCisJMHgwMDAwZmZmZiwKIAkxNiwKIAkwLAogCTAsCi0gICAgCTB4ODAwMGZmZmYKKwkweDgwMDBmZmZmCiAgICAgfSwKICAgICB7CiAJT1BfQ1JPUiwKLSAgICAJMHgwMDAwZmZmZiwKKwkweDAwMDBmZmZmLAogCTAsCiAJMTYsCiAJMCwKLSAgICAJMHg4MDAwZmZmZgorCTB4ODAwMGZmZmYKICAgICB9LAogICAgIHsKIAlPUF9DUk9SLAotICAgIAkweDAwMDBmZmZmLAorCTB4MDAwMGZmZmYsCiAJMCwKIAkxLAogCTAsCi0gICAgCTB4MDAwMGZmZmYKKwkweDAwMDBmZmZmCiAgICAgfSwKICAgICB7CiAJT1BfQ1JPUkMsCi0gICAgCTB4MDAwMGZmZmYsCisJMHgwMDAwZmZmZiwKIAkwLAogCTE2LAogCTAsCi0gICAgCTB4MDAwMGZmZmYKKwkweDAwMDBmZmZmCiAgICAgfSwKICAgICB7CiAJT1BfQ1JPUkMsCi0gICAgCTB4MDAwMGZmZmYsCisJMHgwMDAwZmZmZiwKIAkwLAogCTAsCiAJMCwKLSAgICAJMHg4MDAwZmZmZgorCTB4ODAwMGZmZmYKICAgICB9LAogICAgIHsKIAlPUF9DUlhPUiwKLSAgICAJMHgwMDAwZmZmZiwKKwkweDAwMDBmZmZmLAogCTAsCiAJMCwKIAkwLAotICAgIAkweDAwMDBmZmZmCisJMHgwMDAwZmZmZgogICAgIH0sCiAgICAgewogCU9QX0NSWE9SLAotICAgIAkweDAwMDBmZmZmLAorCTB4MDAwMGZmZmYsCiAJMCwKIAkxNiwKIAkwLAotICAgIAkweDgwMDBmZmZmCisJMHg4MDAwZmZmZgogICAgIH0sCiAgICAgewogCU9QX0NSTkFORCwKLSAgICAJMHgwMDAwZmZmZiwKKwkweDAwMDBmZmZmLAogCTAsCiAJMTYsCiAJMCwKLSAgICAJMHg4MDAwZmZmZgorCTB4ODAwMGZmZmYKICAgICB9LAogICAgIHsKIAlPUF9DUk5BTkQsCi0gICAgCTB4MDAwMGZmZmYsCisJMHgwMDAwZmZmZiwKIAkxNiwKIAkxNywKIAkwLAotICAgIAkweDAwMDBmZmZmCisJMHgwMDAwZmZmZgogICAgIH0sCiAgICAgewogCU9QX0NSTk9SLAotICAgIAkweDAwMDBmZmZmLAorCTB4MDAwMGZmZmYsCiAJMCwKIAkxNiwKIAkwLAotICAgIAkweDAwMDBmZmZmCisJMHgwMDAwZmZmZgogICAgIH0sCiAgICAgewogCU9QX0NSTk9SLAotICAgIAkweDAwMDBmZmZmLAorCTB4MDAwMGZmZmYsCiAJMCwKIAkxLAogCTAsCi0gICAgCTB4ODAwMGZmZmYKKwkweDgwMDBmZmZmCiAgICAgfSwKICAgICB7CiAJT1BfQ1JFUVYsCi0gICAgCTB4MDAwMGZmZmYsCisJMHgwMDAwZmZmZiwKIAkwLAogCTAsCiAJMCwKLSAgICAJMHg4MDAwZmZmZgorCTB4ODAwMGZmZmYKICAgICB9LAogICAgIHsKIAlPUF9DUkVRViwKLSAgICAJMHgwMDAwZmZmZiwKKwkweDAwMDBmZmZmLAogCTAsCiAJMTYsCiAJMCwKLSAgICAJMHgwMDAwZmZmZgorCTB4MDAwMGZmZmYKICAgICB9LAogfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY3B1X3Bvc3RfY3Jfc2l6ZTQgPQpAQCAtMjU4LDcgKzI1OCw3IEBACiAJdWxvbmcgY3IgPSBjcHVfcG9zdF9jcl90YWJsZTFbaV07CiAJdWxvbmcgcmVzOwogCi0gICAgCXVuc2lnbmVkIGxvbmcgY29kZVtdID0KKwl1bnNpZ25lZCBsb25nIGNvZGVbXSA9CiAJewogCSAgICBBU01fTVRDUigzKSwKIAkgICAgQVNNX01GQ1IoMyksCkBAIC0yNjksMTAgKzI2OSwxMCBAQAogCiAJcmV0ID0gcmVzID09IGNyID8gMCA6IC0xOwogCi0gICAgCWlmIChyZXQgIT0gMCkKLSAgICAJewotICAgICAgICAgICAgcG9zdF9sb2cgKCJFcnJvciBhdCBjcjEgdGVzdCAlZCAhXG4iLCBpKTsKLSAgICAJfQorCWlmIChyZXQgIT0gMCkKKwl7CisJICAgIHBvc3RfbG9nICgiRXJyb3IgYXQgY3IxIHRlc3QgJWQgIVxuIiwgaSk7CisJfQogICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBjcHVfcG9zdF9jcl9zaXplMiAmJiByZXQgPT0gMDsgaSsrKQpAQCAtMjgxLDcgKzI4MSw3IEBACiAJdWxvbmcgcmVzOwogCXVsb25nIHhlcjsKIAotICAgIAl1bnNpZ25lZCBsb25nIGNvZGVbXSA9CisJdW5zaWduZWQgbG9uZyBjb2RlW10gPQogCXsKIAkgICAgQVNNX01UWEVSKDMpLAogCSAgICBBU01fTUNSWFIodGVzdC0+Y3IpLApAQCAtMjk1LDEwICsyOTUsMTAgQEAKIAlyZXQgPSB4ZXIgPT0gMCAmJiAoKHJlcyA8PCAoNCAqIHRlc3QtPmNyKSkgJiAweGUwMDAwMDAwKSA9PSB0ZXN0LT54ZXIgPwogCSAgICAgIDAgOiAtMTsKIAotICAgIAlpZiAocmV0ICE9IDApCi0gICAgCXsKLSAgICAgICAgICAgIHBvc3RfbG9nICgiRXJyb3IgYXQgY3IyIHRlc3QgJWQgIVxuIiwgaSk7Ci0gICAgCX0KKwlpZiAocmV0ICE9IDApCisJeworCSAgICBwb3N0X2xvZyAoIkVycm9yIGF0IGNyMiB0ZXN0ICVkICFcbiIsIGkpOworCX0KICAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgY3B1X3Bvc3RfY3Jfc2l6ZTMgJiYgcmV0ID09IDA7IGkrKykKQEAgLTMwNiw3ICszMDYsNyBAQAogCXN0cnVjdCBjcHVfcG9zdF9jcl9zMyAqdGVzdCA9IGNwdV9wb3N0X2NyX3RhYmxlMyArIGk7CiAJdWxvbmcgcmVzOwogCi0gICAgCXVuc2lnbmVkIGxvbmcgY29kZVtdID0KKwl1bnNpZ25lZCBsb25nIGNvZGVbXSA9CiAJewogCSAgICBBU01fTVRDUigzKSwKIAkgICAgQVNNX01DUkYodGVzdC0+Y2QsIHRlc3QtPmNzKSwKQEAgLTMxOCwxMCArMzE4LDEwIEBACiAKIAlyZXQgPSByZXMgPT0gdGVzdC0+cmVzID8gMCA6IC0xOwogCi0gICAgCWlmIChyZXQgIT0gMCkKLSAgICAJewotICAgICAgICAgICAgcG9zdF9sb2cgKCJFcnJvciBhdCBjcjMgdGVzdCAlZCAhXG4iLCBpKTsKLSAgICAJfQorCWlmIChyZXQgIT0gMCkKKwl7CisJICAgIHBvc3RfbG9nICgiRXJyb3IgYXQgY3IzIHRlc3QgJWQgIVxuIiwgaSk7CisJfQogICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBjcHVfcG9zdF9jcl9zaXplNCAmJiByZXQgPT0gMDsgaSsrKQpAQCAtMzI5LDcgKzMyOSw3IEBACiAJc3RydWN0IGNwdV9wb3N0X2NyX3M0ICp0ZXN0ID0gY3B1X3Bvc3RfY3JfdGFibGU0ICsgaTsKIAl1bG9uZyByZXM7CiAKLSAgICAJdW5zaWduZWQgbG9uZyBjb2RlW10gPQorCXVuc2lnbmVkIGxvbmcgY29kZVtdID0KIAl7CiAJICAgIEFTTV9NVENSKDMpLAogCSAgICBBU01fMTJGKHRlc3QtPmNtZCwgdGVzdC0+b3AzLCB0ZXN0LT5vcDEsIHRlc3QtPm9wMiksCkBAIC0zNDEsMTAgKzM0MSwxMCBAQAogCiAJcmV0ID0gcmVzID09IHRlc3QtPnJlcyA/IDAgOiAtMTsKIAotICAgIAlpZiAocmV0ICE9IDApCi0gICAgCXsKLSAgICAgICAgICAgIHBvc3RfbG9nICgiRXJyb3IgYXQgY3I0IHRlc3QgJWQgIVxuIiwgaSk7Ci0gICAgCX0KKwlpZiAocmV0ICE9IDApCisJeworCSAgICBwb3N0X2xvZyAoIkVycm9yIGF0IGNyNCB0ZXN0ICVkICFcbiIsIGkpOworCX0KICAgICB9CiAKICAgICBhc20gKCAibXRjciAlMCIgOiA6ICJyIiAoY3Jfc2F2KSk7CmRpZmYgLS1naXQgYS9wb3N0L2NwdS9sb2FkLmMgYi9wb3N0L2NwdS9sb2FkLmMKaW5kZXggYjM0MThlZi4uMzkzYzU2OCAxMDA2NDQKLS0tIGEvcG9zdC9jcHUvbG9hZC5jCisrKyBiL3Bvc3QvY3B1L2xvYWQuYwpAQCAtNjEsMTEyICs2MSwxMTIgQEAKIH0gY3B1X3Bvc3RfbG9hZF90YWJsZVtdID0KIHsKICAgICB7Ci0gICAgCU9QX0xXWiwKKwlPUF9MV1osCiAJNCwKIAkwLAogCTAsCiAJNAogICAgIH0sCiAgICAgewotICAgIAlPUF9MSEEsCisJT1BfTEhBLAogCTMsCiAJMCwKIAkwLAogCTIKICAgICB9LAogICAgIHsKLSAgICAJT1BfTEhaLAorCU9QX0xIWiwKIAkyLAogCTAsCiAJMCwKIAkyCiAgICAgfSwKICAgICB7Ci0gICAgCU9QX0xCWiwKKwlPUF9MQlosCiAJMSwKIAkwLAogCTAsCiAJMQogICAgIH0sCiAgICAgewotICAgIAlPUF9MV1pVLAorCU9QX0xXWlUsCiAJNCwKIAkxLAogCTAsCiAJNAogICAgIH0sCiAgICAgewotICAgIAlPUF9MSEFVLAorCU9QX0xIQVUsCiAJMywKIAkxLAogCTAsCiAJMgogICAgIH0sCiAgICAgewotICAgIAlPUF9MSFpVLAorCU9QX0xIWlUsCiAJMiwKIAkxLAogCTAsCiAJMgogICAgIH0sCiAgICAgewotICAgIAlPUF9MQlpVLAorCU9QX0xCWlUsCiAJMSwKIAkxLAogCTAsCiAJMQogICAgIH0sCiAgICAgewotICAgIAlPUF9MV1pYLAorCU9QX0xXWlgsCiAJNCwKIAkwLAogCTEsCiAJNAogICAgIH0sCiAgICAgewotICAgIAlPUF9MSEFYLAorCU9QX0xIQVgsCiAJMywKIAkwLAogCTEsCiAJMgogICAgIH0sCiAgICAgewotICAgIAlPUF9MSFpYLAorCU9QX0xIWlgsCiAJMiwKIAkwLAogCTEsCiAJMgogICAgIH0sCiAgICAgewotICAgIAlPUF9MQlpYLAorCU9QX0xCWlgsCiAJMSwKIAkwLAogCTEsCiAJMQogICAgIH0sCiAgICAgewotICAgIAlPUF9MV1pVWCwKKwlPUF9MV1pVWCwKIAk0LAogCTEsCiAJMSwKIAk0CiAgICAgfSwKICAgICB7Ci0gICAgCU9QX0xIQVVYLAorCU9QX0xIQVVYLAogCTMsCiAJMSwKIAkxLAogCTIKICAgICB9LAogICAgIHsKLSAgICAJT1BfTEhaVVgsCisJT1BfTEhaVVgsCiAJMiwKIAkxLAogCTEsCiAJMgogICAgIH0sCiAgICAgewotICAgIAlPUF9MQlpVWCwKKwlPUF9MQlpVWCwKIAkxLAogCTEsCiAJMSwKQEAgLTE4Niw3ICsxODYsNyBAQAogCXN0cnVjdCBjcHVfcG9zdF9sb2FkX3MgKnRlc3QgPSBjcHVfcG9zdF9sb2FkX3RhYmxlICsgaTsKIAl1Y2hhciBkYXRhWzE2XSA9CiAJeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1IH07Ci0gICAgCXVsb25nIGJhc2UwID0gKHVsb25nKSAoZGF0YSArIDgpOworCXVsb25nIGJhc2UwID0gKHVsb25nKSAoZGF0YSArIDgpOwogCXVsb25nIGJhc2UgPSBiYXNlMDsKIAl1bG9uZyB2YWx1ZTsKIApAQCAtMTk0LDcgKzE5NCw3IEBACiAJewogCSAgICB1bG9uZyBjb2RlW10gPQogCSAgICB7Ci0JICAgIAlBU01fMTIodGVzdC0+Y21kLCA1LCAzLCA0KSwKKwkJQVNNXzEyKHRlc3QtPmNtZCwgNSwgMywgNCksCiAJCUFTTV9CTFIsCiAJICAgIH07CiAKQEAgLTIwNCw3ICsyMDQsNyBAQAogCXsKIAkgICAgdWxvbmcgY29kZVtdID0KIAkgICAgewotCSAgICAJQVNNXzExSSh0ZXN0LT5jbWQsIDQsIDMsIHRlc3QtPm9mZnNldCksCisJCUFTTV8xMUkodGVzdC0+Y21kLCA0LCAzLCB0ZXN0LT5vZmZzZXQpLAogCQlBU01fQkxSLAogCSAgICB9OwogCkBAIC0yMjQsMjcgKzIyNCwyNyBAQAogCSAgICBzd2l0Y2ggKHRlc3QtPndpZHRoKQogCSAgICB7CiAJICAgIGNhc2UgMToKLQkgICAgICAgIHJldCA9ICoodWNoYXIgKikoYmFzZTAgKyB0ZXN0LT5vZmZzZXQpID09IHZhbHVlID8KKwkJcmV0ID0gKih1Y2hhciAqKShiYXNlMCArIHRlc3QtPm9mZnNldCkgPT0gdmFsdWUgPwogCQkgICAgICAwIDogLTE7Ci0JICAgICAgICBicmVhazsKKwkJYnJlYWs7CiAJICAgIGNhc2UgMjoKLQkgICAgICAgIHJldCA9ICoodXNob3J0ICopKGJhc2UwICsgdGVzdC0+b2Zmc2V0KSA9PSB2YWx1ZSA/CisJCXJldCA9ICoodXNob3J0ICopKGJhc2UwICsgdGVzdC0+b2Zmc2V0KSA9PSB2YWx1ZSA/CiAJCSAgICAgIDAgOiAtMTsKLQkgICAgICAgIGJyZWFrOworCQlicmVhazsKIAkgICAgY2FzZSAzOgotCSAgICAgICAgcmV0ID0gKihzaG9ydCAqKShiYXNlMCArIHRlc3QtPm9mZnNldCkgPT0gdmFsdWUgPworCQlyZXQgPSAqKHNob3J0ICopKGJhc2UwICsgdGVzdC0+b2Zmc2V0KSA9PSB2YWx1ZSA/CiAJCSAgICAgIDAgOiAtMTsKLQkgICAgICAgIGJyZWFrOworCQlicmVhazsKIAkgICAgY2FzZSA0OgotCSAgICAgICAgcmV0ID0gKih1bG9uZyAqKShiYXNlMCArIHRlc3QtPm9mZnNldCkgPT0gdmFsdWUgPworCQlyZXQgPSAqKHVsb25nICopKGJhc2UwICsgdGVzdC0+b2Zmc2V0KSA9PSB2YWx1ZSA/CiAJCSAgICAgIDAgOiAtMTsKLQkgICAgICAgIGJyZWFrOworCQlicmVhazsKIAkgICAgfQogCX0KIAogCWlmIChyZXQgIT0gMCkKIAl7Ci0gICAgICAgICAgICBwb3N0X2xvZyAoIkVycm9yIGF0IGxvYWQgdGVzdCAlZCAhXG4iLCBpKTsKKwkgICAgcG9zdF9sb2cgKCJFcnJvciBhdCBsb2FkIHRlc3QgJWQgIVxuIiwgaSk7CiAJfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvcG9zdC9jcHUvbXVsdGkuYyBiL3Bvc3QvY3B1L211bHRpLmMKaW5kZXggYmRhZDVkOS4uODcyNDM4NCAxMDA2NDQKLS0tIGEvcG9zdC9jcHUvbXVsdGkuYworKysgYi9wb3N0L2NwdS9tdWx0aS5jCkBAIC01MSw3ICs1MSw3IEBACiAgICAgewogCXVsb25nIHNyYyBbMjZdLCBkc3QgWzI2XTsKIAotICAgIAl1bG9uZyBjb2RlW10gPQorCXVsb25nIGNvZGVbXSA9CiAJewogCSAgICBBU01fTE1XKDUsIDMsIDApLAogCSAgICBBU01fU1RNVyg1LCA0LCAwKSwKQEAgLTcxLDcgKzcxLDcgQEAKIAogICAgIGlmIChyZXQgIT0gMCkKICAgICB7Ci0gICAgICAgIHBvc3RfbG9nICgiRXJyb3IgYXQgbXVsdGkgdGVzdCAhXG4iKTsKKwlwb3N0X2xvZyAoIkVycm9yIGF0IG11bHRpIHRlc3QgIVxuIik7CiAgICAgfQogCiAgICAgcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Bvc3QvY3B1L3N0b3JlLmMgYi9wb3N0L2NwdS9zdG9yZS5jCmluZGV4IGU1MTg5YzcuLmY0OTViZjIgMTAwNjQ0Ci0tLSBhL3Bvc3QvY3B1L3N0b3JlLmMKKysrIGIvcG9zdC9jcHUvc3RvcmUuYwpAQCAtNjIsNyArNjIsNyBAQAogfSBjcHVfcG9zdF9zdG9yZV90YWJsZVtdID0KIHsKICAgICB7Ci0gICAgCU9QX1NUVywKKwlPUF9TVFcsCiAJNCwKIAkwLAogCTAsCkBAIC03MCw3ICs3MCw3IEBACiAJMHhmZjAwZmYwMAogICAgIH0sCiAgICAgewotICAgIAlPUF9TVEgsCisJT1BfU1RILAogCTIsCiAJMCwKIAkwLApAQCAtNzgsNyArNzgsNyBAQAogCTB4ZmYwMAogICAgIH0sCiAgICAgewotICAgIAlPUF9TVEIsCisJT1BfU1RCLAogCTEsCiAJMCwKIAkwLApAQCAtODYsNyArODYsNyBAQAogCTB4ZmYKICAgICB9LAogICAgIHsKLSAgICAJT1BfU1RXVSwKKwlPUF9TVFdVLAogCTQsCiAJMSwKIAkwLApAQCAtOTQsNyArOTQsNyBAQAogCTB4ZmYwMGZmMDAKICAgICB9LAogICAgIHsKLSAgICAJT1BfU1RIVSwKKwlPUF9TVEhVLAogCTIsCiAJMSwKIAkwLApAQCAtMTAyLDcgKzEwMiw3IEBACiAJMHhmZjAwCiAgICAgfSwKICAgICB7Ci0gICAgCU9QX1NUQlUsCisJT1BfU1RCVSwKIAkxLAogCTEsCiAJMCwKQEAgLTExMCw3ICsxMTAsNyBAQAogCTB4ZmYKICAgICB9LAogICAgIHsKLSAgICAJT1BfU1RXWCwKKwlPUF9TVFdYLAogCTQsCiAJMCwKIAkxLApAQCAtMTE4LDcgKzExOCw3IEBACiAJMHhmZjAwZmYwMAogICAgIH0sCiAgICAgewotICAgIAlPUF9TVEhYLAorCU9QX1NUSFgsCiAJMiwKIAkwLAogCTEsCkBAIC0xMjYsNyArMTI2LDcgQEAKIAkweGZmMDAKICAgICB9LAogICAgIHsKLSAgICAJT1BfU1RCWCwKKwlPUF9TVEJYLAogCTEsCiAJMCwKIAkxLApAQCAtMTM0LDcgKzEzNCw3IEBACiAJMHhmZgogICAgIH0sCiAgICAgewotICAgIAlPUF9TVFdVWCwKKwlPUF9TVFdVWCwKIAk0LAogCTEsCiAJMSwKQEAgLTE0Miw3ICsxNDIsNyBAQAogCTB4ZmYwMGZmMDAKICAgICB9LAogICAgIHsKLSAgICAJT1BfU1RIVVgsCisJT1BfU1RIVVgsCiAJMiwKIAkxLAogCTEsCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkweGZmMDAKICAgICB9LAogICAgIHsKLSAgICAJT1BfU1RCVVgsCisJT1BfU1RCVVgsCiAJMSwKIAkxLAogCTEsCkBAIC0xNzEsMTQgKzE3MSwxNCBAQAogCXN0cnVjdCBjcHVfcG9zdF9zdG9yZV9zICp0ZXN0ID0gY3B1X3Bvc3Rfc3RvcmVfdGFibGUgKyBpOwogCXVjaGFyIGRhdGFbMTZdID0KIAl7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUgfTsKLSAgICAJdWxvbmcgYmFzZTAgPSAodWxvbmcpIChkYXRhICsgOCk7CisJdWxvbmcgYmFzZTAgPSAodWxvbmcpIChkYXRhICsgOCk7CiAJdWxvbmcgYmFzZSA9IGJhc2UwOwogCiAJaWYgKHRlc3QtPmluZGV4KQogCXsKIAkgICAgdWxvbmcgY29kZVtdID0KIAkgICAgewotCSAgICAJQVNNXzEyKHRlc3QtPmNtZCwgNSwgMywgNCksCisJCUFTTV8xMih0ZXN0LT5jbWQsIDUsIDMsIDQpLAogCQlBU01fQkxSLAogCSAgICB9OwogCkBAIC0xODgsNyArMTg4LDcgQEAKIAl7CiAJICAgIHVsb25nIGNvZGVbXSA9CiAJICAgIHsKLQkgICAgCUFTTV8xMUkodGVzdC0+Y21kLCA0LCAzLCB0ZXN0LT5vZmZzZXQpLAorCQlBU01fMTFJKHRlc3QtPmNtZCwgNCwgMywgdGVzdC0+b2Zmc2V0KSwKIAkJQVNNX0JMUiwKIAkgICAgfTsKIApAQCAtMjA4LDIzICsyMDgsMjMgQEAKIAkgICAgc3dpdGNoICh0ZXN0LT53aWR0aCkKIAkgICAgewogCSAgICBjYXNlIDE6Ci0JICAgICAgICByZXQgPSAqKHVjaGFyICopKGJhc2UwICsgdGVzdC0+b2Zmc2V0KSA9PSB0ZXN0LT52YWx1ZSA/CisJCXJldCA9ICoodWNoYXIgKikoYmFzZTAgKyB0ZXN0LT5vZmZzZXQpID09IHRlc3QtPnZhbHVlID8KIAkJICAgICAgMCA6IC0xOwotCSAgICAgICAgYnJlYWs7CisJCWJyZWFrOwogCSAgICBjYXNlIDI6Ci0JICAgICAgICByZXQgPSAqKHVzaG9ydCAqKShiYXNlMCArIHRlc3QtPm9mZnNldCkgPT0gdGVzdC0+dmFsdWUgPworCQlyZXQgPSAqKHVzaG9ydCAqKShiYXNlMCArIHRlc3QtPm9mZnNldCkgPT0gdGVzdC0+dmFsdWUgPwogCQkgICAgICAwIDogLTE7Ci0JICAgICAgICBicmVhazsKKwkJYnJlYWs7CiAJICAgIGNhc2UgNDoKLQkgICAgICAgIHJldCA9ICoodWxvbmcgKikoYmFzZTAgKyB0ZXN0LT5vZmZzZXQpID09IHRlc3QtPnZhbHVlID8KKwkJcmV0ID0gKih1bG9uZyAqKShiYXNlMCArIHRlc3QtPm9mZnNldCkgPT0gdGVzdC0+dmFsdWUgPwogCQkgICAgICAwIDogLTE7Ci0JICAgICAgICBicmVhazsKKwkJYnJlYWs7CiAJICAgIH0KIAl9CiAKIAlpZiAocmV0ICE9IDApCiAJewotICAgICAgICAgICAgcG9zdF9sb2cgKCJFcnJvciBhdCBzdG9yZSB0ZXN0ICVkICFcbiIsIGkpOworCSAgICBwb3N0X2xvZyAoIkVycm9yIGF0IHN0b3JlIHRlc3QgJWQgIVxuIiwgaSk7CiAJfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvcG9zdC9jcHUvc3RyaW5nLmMgYi9wb3N0L2NwdS9zdHJpbmcuYwppbmRleCBhMTlhNzU1Li5iZDgzYmQxIDEwMDY0NAotLS0gYS9wb3N0L2NwdS9zdHJpbmcuYworKysgYi9wb3N0L2NwdS9zdHJpbmcuYwpAQCAtNTQsNyArNTQsNyBAQAogICAgIHsKIAljaGFyIHNyYyBbMzFdLCBkc3QgWzMxXTsKIAotICAgIAl1bG9uZyBjb2RlW10gPQorCXVsb25nIGNvZGVbXSA9CiAJewogCSAgICBBU01fTFNXSSg1LCAzLCAzMSksCiAJICAgIEFTTV9TVFNXSSg1LCA0LCAzMSksCkBAIC03Niw3ICs3Niw3IEBACiAgICAgewogCWNoYXIgc3JjIFs5NV0sIGRzdCBbOTVdOwogCi0gICAgCXVsb25nIGNvZGVbXSA9CisJdWxvbmcgY29kZVtdID0KIAl7CiAJICAgIEFTTV9MU1dYKDgsIDMsIDUpLAogCSAgICBBU01fU1RTV1goOCwgNCwgNSksCkBAIC05Niw3ICs5Niw3IEBACiAKICAgICBpZiAocmV0ICE9IDApCiAgICAgewotICAgICAgICBwb3N0X2xvZyAoIkVycm9yIGF0IHN0cmluZyB0ZXN0ICFcbiIpOworCXBvc3RfbG9nICgiRXJyb3IgYXQgc3RyaW5nIHRlc3QgIVxuIik7CiAgICAgfQogCiAgICAgcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3Bvc3QvY3B1L3R3by5jIGIvcG9zdC9jcHUvdHdvLmMKaW5kZXggNjA3NTcxNC4uY2ZiYWM1ZSAxMDA2NDQKLS0tIGEvcG9zdC9jcHUvdHdvLmMKKysrIGIvcG9zdC9jcHUvdHdvLmMKQEAgLTUzLDMyICs1MywzMiBAQAogfSBjcHVfcG9zdF90d29fdGFibGVbXSA9CiB7CiAgICAgewotICAgIAlPUF9ORUcsCisJT1BfTkVHLAogCTMsCiAJLTMKICAgICB9LAogICAgIHsKLSAgICAJT1BfTkVHLAorCU9QX05FRywKIAk1LAogCS01CiAgICAgfSwKICAgICB7Ci0gICAgICAgIE9QX0FERE1FLAorCU9QX0FERE1FLAogCTYsCiAJNQogICAgIH0sCiAgICAgewotICAgICAgICBPUF9BRERaRSwKKwlPUF9BRERaRSwKIAk1LAogCTUKICAgICB9LAogICAgIHsKLSAgICAgICAgT1BfU1VCRk1FLAorCU9QX1NVQkZNRSwKIAk2LAogCX42IC0gMQogICAgIH0sCiAgICAgewotICAgICAgICBPUF9TVUJGWkUsCisJT1BfU1VCRlpFLAogCTUsCiAJfjUKICAgICB9LApAQCAtMTAxLDcgKzEwMSw3IEBACiAJICAgIHVuc2lnbmVkIGludCByZWcwID0gKHJlZyArIDApICUgMzI7CiAJICAgIHVuc2lnbmVkIGludCByZWcxID0gKHJlZyArIDEpICUgMzI7CiAJICAgIHVuc2lnbmVkIGludCBzdGsgPSByZWcgPCAxNiA/IDMxIDogMTU7Ci0gICAgCSAgICB1bnNpZ25lZCBsb25nIGNvZGVbXSA9CisJICAgIHVuc2lnbmVkIGxvbmcgY29kZVtdID0KIAkgICAgewogCQlBU01fU1RXKHN0aywgMSwgLTQpLAogCQlBU01fQURESShzdGssIDEsIC0xNiksCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJQVNNX0xXWihzdGssIDEsIC00KSwKIAkJQVNNX0JMUiwKIAkgICAgfTsKLSAgICAJICAgIHVuc2lnbmVkIGxvbmcgY29kZWNyW10gPQorCSAgICB1bnNpZ25lZCBsb25nIGNvZGVjcltdID0KIAkgICAgewogCQlBU01fU1RXKHN0aywgMSwgLTQpLAogCQlBU01fQURESShzdGssIDEsIC0xNiksCkBAIC0xNDAsMzQgKzE0MCwzNCBAQAogCiAJICAgIGlmIChyZXQgPT0gMCkKIAkgICAgewotIAkgICAgCWNyID0gMDsKLQkgICAgCWNwdV9wb3N0X2V4ZWNfMjEgKGNvZGUsICYgY3IsICYgcmVzLCB0ZXN0LT5vcCk7CisJCWNyID0gMDsKKwkJY3B1X3Bvc3RfZXhlY18yMSAoY29kZSwgJiBjciwgJiByZXMsIHRlc3QtPm9wKTsKIAotCSAgICAJcmV0ID0gcmVzID09IHRlc3QtPnJlcyAmJiBjciA9PSAwID8gMCA6IC0xOworCQlyZXQgPSByZXMgPT0gdGVzdC0+cmVzICYmIGNyID09IDAgPyAwIDogLTE7CiAKLQkgICAgCWlmIChyZXQgIT0gMCkKLQkgICAgCXsKLQkgICAgICAgICAgICBwb3N0X2xvZyAoIkVycm9yIGF0IHR3byB0ZXN0ICVkICFcbiIsIGkpOwotCSAgICAJfQorCQlpZiAocmV0ICE9IDApCisJCXsKKwkJICAgIHBvc3RfbG9nICgiRXJyb3IgYXQgdHdvIHRlc3QgJWQgIVxuIiwgaSk7CisJCX0KIAkgICAgfQogCiAJICAgIGlmIChyZXQgPT0gMCkKIAkgICAgewotCSAgICAJY3B1X3Bvc3RfZXhlY18yMSAoY29kZWNyLCAmIGNyLCAmIHJlcywgdGVzdC0+b3ApOworCQljcHVfcG9zdF9leGVjXzIxIChjb2RlY3IsICYgY3IsICYgcmVzLCB0ZXN0LT5vcCk7CiAKLQkgICAgCXJldCA9IHJlcyA9PSB0ZXN0LT5yZXMgJiYKKwkJcmV0ID0gcmVzID09IHRlc3QtPnJlcyAmJgogCQkgICAgICAoY3IgJiAweGUwMDAwMDAwKSA9PSBjcHVfcG9zdF9tYWtlY3IgKHJlcykgPyAwIDogLTE7CiAKLQkgICAgCWlmIChyZXQgIT0gMCkKLQkgICAgCXsKLQkgICAgICAgICAgICBwb3N0X2xvZyAoIkVycm9yIGF0IHR3byB0ZXN0ICVkICFcbiIsIGkpOwotCSAgICAgICAgfQorCQlpZiAocmV0ICE9IDApCisJCXsKKwkJICAgIHBvc3RfbG9nICgiRXJyb3IgYXQgdHdvIHRlc3QgJWQgIVxuIiwgaSk7CisJCX0KIAkgICAgfQogCX0KICAgICB9CiAKICAgICBpZiAoZmxhZykKLSAgICAJZW5hYmxlX2ludGVycnVwdHMoKTsKKwllbmFibGVfaW50ZXJydXB0cygpOwogCiAgICAgcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL3Bvc3QvcG9zdC5jIGIvcG9zdC9wb3N0LmMKaW5kZXggZDUxMjUzMy4uOWQ2MmY0MCAxMDA2NDQKLS0tIGEvcG9zdC9wb3N0LmMKKysrIGIvcG9zdC9wb3N0LmMKQEAgLTUwLDcgKzUwLDcgQEAKIAkJCXJlcyA9IC0xOwogCQl9CiAJfQotCQorCiAJZ2QtPnBvc3RfaW5pdF9mX3RpbWUgPSBwb3N0X3RpbWVfbXMoMCk7CiAJaWYgKCFnZC0+cG9zdF9pbml0X2ZfdGltZSkKIAl7CkBAIC0zOTgsNyArMzk4LDcgQEAKIAkJaWYgKHRlc3QtPnJlbG9jKSB7CiAJCQlhZGRyID0gKHVsb25nKSAodGVzdC0+cmVsb2MpICsgZ2QtPnJlbG9jX29mZjsKIAkJCXRlc3QtPnJlbG9jID0gKHZvaWQgKCopKHZvaWQpKSBhZGRyOwotCQkJCisKIAkJCXRlc3QtPnJlbG9jKCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9wb3N0L3Nwci5jIGIvcG9zdC9zcHIuYwppbmRleCA5N2Y3NjEwLi4zMzBiOTc3IDEwMDY0NAotLS0gYS9wb3N0L3Nwci5jCisrKyBiL3Bvc3Qvc3ByLmMKQEAgLTQ4LDY2ICs0OCw2NiBAQAogfSBzcHJfdGVzdF9saXN0IFtdID0gewogCS8qIFN0YW5kYXJkIFNwZWNpYWwtUHVycG9zZSBSZWdpc3RlcnMgKi8KIAotICAgICAgICB7MSwJIlhFUiIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezgsCSJMUiIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezksCSJDVFIiLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHsxOCwJIkRTSVNSIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHsxOSwJIkRBUiIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezIyLAkiREVDIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7MjYsCSJTUlIwIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7MjcsCSJTUlIxIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7MjcyLAkiU1BSRzAiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezI3MywJIlNQUkcxIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHsyNzQsCSJTUFJHMiIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7Mjc1LAkiU1BSRzMiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezI4NywJIlBWUiIsCQkweEZGRkYwMDAwLAkweDAwNTAwMDAwfSwKKwl7MSwJIlhFUiIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7OCwJIkxSIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAorCXs5LAkiQ1RSIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAorCXsxOCwJIkRTSVNSIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezE5LAkiREFSIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAorCXsyMiwJIkRFQyIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7MjYsCSJTUlIwIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAorCXsyNywJIlNSUjEiLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezI3MiwJIlNQUkcwIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezI3MywJIlNQUkcxIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezI3NCwJIlNQUkcyIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezI3NSwJIlNQUkczIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezI4NywJIlBWUiIsCQkweEZGRkYwMDAwLAkweDAwNTAwMDAwfSwKIAogCS8qIEFkZGl0aW9uYWwgU3BlY2lhbC1QdXJwb3NlIFJlZ2lzdGVycyAqLwogCi0gICAgICAgIHsxNDQsCSJDTVBBIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7MTQ1LAkiQ01QQiIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezE0NiwJIkNNUEMiLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHsxNDcsCSJDTVBEIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7MTQ4LAkiSUNSIiwJCTB4RkZGRkZGRkYsCTB4MDAwMDAwMDB9LAotICAgICAgICB7MTQ5LAkiREVSIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7MTUwLAkiQ09VTlRBIiwJMHhGRkZGRkZGRiwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHsxNTEsCSJDT1VOVEIiLAkweEZGRkZGRkZGLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezE1MiwJIkNNUEUiLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHsxNTMsCSJDTVBGIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7MTU0LAkiQ01QRyIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezE1NSwJIkNNUEgiLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHsxNTYsCSJMQ1RSTDEiLAkweEZGRkZGRkZGLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezE1NywJIkxDVFJMMiIsCTB4RkZGRkZGRkYsCTB4MDAwMDAwMDB9LAotICAgICAgICB7MTU4LAkiSUNUUkwiLAkweEZGRkZGRkZGLAkweDAwMDAwMDA3fSwKLSAgICAgICAgezE1OSwJIkJBUiIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezYzMCwJIkRQRFIiLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHs2MzEsCSJEUElSIiwJCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7NjM4LAkiSU1NUiIsCQkweEZGRkYwMDAwLAlDRkdfSU1NUiAgfSwKLSAgICAgICAgezU2MCwJIklDX0NTVCIsCTB4OEUzODAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7NTYxLAkiSUNfQURSIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHs1NjIsCSJJQ19EQVQiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezU2OCwJIkRDX0NTVCIsCTB4RUYzODAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7NTY5LAkiRENfQURSIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHs1NzAsCSJEQ19EQVQiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezc4NCwJIk1JX0NUUiIsCTB4RkZGRkZGRkYsCTB4MDAwMDAwMDB9LAotICAgICAgICB7Nzg2LAkiTUlfQVAiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezc4NywJIk1JX0VQTiIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7Nzg5LAkiTUlfVFdDIiwJMHhGRkZGRkUwMiwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHs3OTAsCSJNSV9SUE4iLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezgxNiwJIk1JX0RCQ0FNIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHs4MTcsCSJNSV9EQlJBTTAiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezgxOCwJIk1JX0RCUkFNMSIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7NzkyLAkiTURfQ1RSIiwJMHhGRkZGRkZGRiwJMHgwNDAwMDAwMH0sCi0gICAgICAgIHs3OTMsCSJNX0NBU0lEIiwJMHhGRkZGRkZGMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHs3OTQsCSJNRF9BUCIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7Nzk1LAkiTURfRVBOIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHs3OTYsCSJNX1RXQiIsCTB4MDAwMDAwMDMsCTB4MDAwMDAwMDB9LAotICAgICAgICB7Nzk3LAkiTURfVFdDIiwJMHgwMDAwMDAwMywJMHgwMDAwMDAwMH0sCi0gICAgICAgIHs3OTgsCSJNRF9SUE4iLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKLSAgICAgICAgezc5OSwJIk1fVFciLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHs4MjQsCSJNRF9EQkNBTSIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAotICAgICAgICB7ODI1LAkiTURfREJSQU0wIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCi0gICAgICAgIHs4MjYsCSJNRF9EQlJBTTEiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7MTQ0LAkiQ01QQSIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7MTQ1LAkiQ01QQiIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7MTQ2LAkiQ01QQyIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7MTQ3LAkiQ01QRCIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7MTQ4LAkiSUNSIiwJCTB4RkZGRkZGRkYsCTB4MDAwMDAwMDB9LAorCXsxNDksCSJERVIiLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezE1MCwJIkNPVU5UQSIsCTB4RkZGRkZGRkYsCTB4MDAwMDAwMDB9LAorCXsxNTEsCSJDT1VOVEIiLAkweEZGRkZGRkZGLAkweDAwMDAwMDAwfSwKKwl7MTUyLAkiQ01QRSIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7MTUzLAkiQ01QRiIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7MTU0LAkiQ01QRyIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7MTU1LAkiQ01QSCIsCQkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7MTU2LAkiTENUUkwxIiwJMHhGRkZGRkZGRiwJMHgwMDAwMDAwMH0sCisJezE1NywJIkxDVFJMMiIsCTB4RkZGRkZGRkYsCTB4MDAwMDAwMDB9LAorCXsxNTgsCSJJQ1RSTCIsCTB4RkZGRkZGRkYsCTB4MDAwMDAwMDd9LAorCXsxNTksCSJCQVIiLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezYzMCwJIkRQRFIiLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezYzMSwJIkRQSVIiLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezYzOCwJIklNTVIiLAkJMHhGRkZGMDAwMCwJQ0ZHX0lNTVIgIH0sCisJezU2MCwJIklDX0NTVCIsCTB4OEUzODAwMDAsCTB4MDAwMDAwMDB9LAorCXs1NjEsCSJJQ19BRFIiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7NTYyLAkiSUNfREFUIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezU2OCwJIkRDX0NTVCIsCTB4RUYzODAwMDAsCTB4MDAwMDAwMDB9LAorCXs1NjksCSJEQ19BRFIiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7NTcwLAkiRENfREFUIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezc4NCwJIk1JX0NUUiIsCTB4RkZGRkZGRkYsCTB4MDAwMDAwMDB9LAorCXs3ODYsCSJNSV9BUCIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAorCXs3ODcsCSJNSV9FUE4iLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7Nzg5LAkiTUlfVFdDIiwJMHhGRkZGRkUwMiwJMHgwMDAwMDAwMH0sCisJezc5MCwJIk1JX1JQTiIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAorCXs4MTYsCSJNSV9EQkNBTSIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAorCXs4MTcsCSJNSV9EQlJBTTAiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKKwl7ODE4LAkiTUlfREJSQU0xIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezc5MiwJIk1EX0NUUiIsCTB4RkZGRkZGRkYsCTB4MDQwMDAwMDB9LAorCXs3OTMsCSJNX0NBU0lEIiwJMHhGRkZGRkZGMCwJMHgwMDAwMDAwMH0sCisJezc5NCwJIk1EX0FQIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezc5NSwJIk1EX0VQTiIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAorCXs3OTYsCSJNX1RXQiIsCTB4MDAwMDAwMDMsCTB4MDAwMDAwMDB9LAorCXs3OTcsCSJNRF9UV0MiLAkweDAwMDAwMDAzLAkweDAwMDAwMDAwfSwKKwl7Nzk4LAkiTURfUlBOIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezc5OSwJIk1fVFciLAkJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezgyNCwJIk1EX0RCQ0FNIiwJMHgwMDAwMDAwMCwJMHgwMDAwMDAwMH0sCisJezgyNSwJIk1EX0RCUkFNMCIsCTB4MDAwMDAwMDAsCTB4MDAwMDAwMDB9LAorCXs4MjYsCSJNRF9EQlJBTTEiLAkweDAwMDAwMDAwLAkweDAwMDAwMDAwfSwKIH07CiAKIHN0YXRpYyBpbnQgc3ByX3Rlc3RfbGlzdF9zaXplID0KZGlmZiAtLWdpdCBhL3Bvc3Qvc3lzbW9uLmMgYi9wb3N0L3N5c21vbi5jCmluZGV4IGYwNjljYWEuLjMwYTVjYjIgMTAwNjQ0Ci0tLSBhL3Bvc3Qvc3lzbW9uLmMKKysrIGIvcG9zdC9zeXNtb24uYwpAQCAtMzIsNyArMzIsNyBAQAogICogVGhpcyB0ZXN0IHBlcmZvcm1zIHRoZSBzeXN0ZW0gaGFyZHdhcmUgbW9uaXRvcmluZy4KICAqIFRoZSB0ZXN0IHBhc3NlcyB3aGVuIGFsbCB0aGUgZm9sbG93aW5nIHZvbHRhZ2VzIGFuZCB0ZW1wZXJhdHVyZXMKICAqIGFyZSB3aXRoaW4gYWxsb3dlZCByYW5nZXM6Ci0gKiAKKyAqCiAgKiBCb2FyZCB0ZW1wZXJhdHVyZQogICogRnJvbnQgdGVtcGVyYXR1cmUKICAqICszLjNWIENQVSBsb2dpYwpAQCAtNDAsNyArNDAsNyBAQAogICogKzEyViBQQ01DSUEKICAqICsxMlYgQ0NGTAogICogKzVWIHN0YW5kYnkKLSAqIAorICoKICAqIENDRkwgaXMgbm90IGVuYWJsZWQgaWYgdGVtcGVyYXR1cmUgdmFsdWVzIGFyZSBub3Qgd2l0aGluIGFsbG93ZWQgcmFuZ2VzCiAgKgogICogU2VlIHRoZSBsaXN0IG9mZiBhbGwgcGFyYW1ldGVycyBpbiB0aGUgc3lzbW9uX3RhYmxlIGJlbG93CkBAIC0xNTAsNyArMTUwLDcgQEAKIAl7CiAJCSgqbCktPmluaXQoKmwpOwogCX0KLQkKKwogCXJldHVybiAwOwogfQogCkBAIC0xODUsMjQgKzE4NSwyNCBAQAogCWludCBkZWMsIGZyYWM7CiAKIAlzcHJpbnRmKGJ1ZiwgIiUrZCIsIHVuaXRfdmFsIC8gcy0+dW5pdF9kaXYpOwotCQorCiAJZnJhYyA9ICh1bml0X3ZhbCA+IDAgPyB1bml0X3ZhbCA6IC11bml0X3ZhbCkgJSBzLT51bml0X2RpdjsKIAlwID0gYnVmICsgc3RybGVuKGJ1Zik7Ci0JCisKIAlkZWMgPSBzLT51bml0X2RpdjsKLQkKKwogCWlmIChkZWMgIT0gMSkKIAl7CiAJCSpwKysgPSAnLic7CiAJfQotCQorCiAJZm9yIChkZWMgLz0gMTA7IGRlYyAhPSAwOyBkZWMgLz0gMTApCiAJewogCQkqcCsrID0gJzAnICsgZnJhYyAvIGRlYyAlIDEwOwogCX0KLQkKKwogCXN0cmNweShwLCBzLT51bml0X25hbWUpOwotCQorCiAJcmV0dXJuIGJ1ZjsKIH0KIApAQCAtMjE3LDcgKzIxNyw3IEBACiAJCXByaW50ZigiRXJyb3I6IExNODcgbm90IGZvdW5kIGF0IDB4JTAyWFxuIiwgdGhpcy0+Y2hpcCk7CiAJCXJldHVybjsKIAl9Ci0JCisKIAkvKiBDb25maWd1cmUgcGlucyA1LDYgYXMgQUlOICovCiAJdmFsID0gMHgwMzsKIAlpZiAoaTJjX3dyaXRlKHRoaXMtPmNoaXAsIDB4MTYsIDEsICZ2YWwsIDEpKQpkaWZmIC0tZ2l0IGEvcG9zdC90ZXN0cy5jIGIvcG9zdC90ZXN0cy5jCmluZGV4IDViMmM3ZTIuLjU1ZGE5MjcgMTAwNjQ0Ci0tLSBhL3Bvc3QvdGVzdHMuYworKysgYi9wb3N0L3Rlc3RzLmMKQEAgLTUzLDE0NiArNTMsMTQ2IEBACiB7CiAjaWYgQ09ORklHX1BPU1QgJiBDRkdfUE9TVF9DQUNIRQogICAgIHsKLSAgICAgICAgIkNhY2hlIHRlc3QiLAotICAgICAgICAiY2FjaGUiLAotICAgICAgICAiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoZSBDUFUgY2FjaGUgb3BlcmF0aW9uLiIsCi0gICAgICAgIFBPU1RfUkFNIHwgUE9TVF9BTFdBWVMsCi0gICAgICAgICZjYWNoZV9wb3N0X3Rlc3QsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCisJIkNhY2hlIHRlc3QiLAorCSJjYWNoZSIsCisJIlRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgQ1BVIGNhY2hlIG9wZXJhdGlvbi4iLAorCVBPU1RfUkFNIHwgUE9TVF9BTFdBWVMsCisJJmNhY2hlX3Bvc3RfdGVzdCwKKwlOVUxMLAorCU5VTEwsCiAJQ0ZHX1BPU1RfQ0FDSEUKICAgICB9LAogI2VuZGlmCiAjaWYgQ09ORklHX1BPU1QgJiBDRkdfUE9TVF9XQVRDSERPRwogICAgIHsKLSAgICAgICAgIldhdGNoZG9nIHRpbWVyIHRlc3QiLAotICAgICAgICAid2F0Y2hkb2ciLAotICAgICAgICAiVGhpcyB0ZXN0IGNoZWNrcyB0aGUgd2F0Y2hkb2cgdGltZXIuIiwKLSAgICAgICAgUE9TVF9SQU0gfCBQT1NUX1BPV0VST04gfCBQT1NUX1BPV0VSRkFJTCB8IFBPU1RfTUFOVUFMIHwgUE9TVF9SRUJPT1QsCi0gICAgICAgICZ3YXRjaGRvZ19wb3N0X3Rlc3QsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCisJIldhdGNoZG9nIHRpbWVyIHRlc3QiLAorCSJ3YXRjaGRvZyIsCisJIlRoaXMgdGVzdCBjaGVja3MgdGhlIHdhdGNoZG9nIHRpbWVyLiIsCisJUE9TVF9SQU0gfCBQT1NUX1BPV0VST04gfCBQT1NUX1BPV0VSRkFJTCB8IFBPU1RfTUFOVUFMIHwgUE9TVF9SRUJPT1QsCisJJndhdGNoZG9nX3Bvc3RfdGVzdCwKKwlOVUxMLAorCU5VTEwsCiAJQ0ZHX1BPU1RfV0FUQ0hET0cKICAgICB9LAogI2VuZGlmCiAjaWYgQ09ORklHX1BPU1QgJiBDRkdfUE9TVF9JMkMKICAgICB7Ci0gICAgICAgICJJMkMgdGVzdCIsCi0gICAgICAgICJpMmMiLAotICAgICAgICAiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoZSBJMkMgb3BlcmF0aW9uLiIsCi0gICAgICAgIFBPU1RfUkFNIHwgUE9TVF9BTFdBWVMsCi0gICAgICAgICZpMmNfcG9zdF90ZXN0LAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAorCSJJMkMgdGVzdCIsCisJImkyYyIsCisJIlRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgSTJDIG9wZXJhdGlvbi4iLAorCVBPU1RfUkFNIHwgUE9TVF9BTFdBWVMsCisJJmkyY19wb3N0X3Rlc3QsCisJTlVMTCwKKwlOVUxMLAogCUNGR19QT1NUX0kyQwogICAgIH0sCiAjZW5kaWYKICNpZiBDT05GSUdfUE9TVCAmIENGR19QT1NUX1JUQwogICAgIHsKLSAgICAgICAgIlJUQyB0ZXN0IiwKLSAgICAgICAgInJ0YyIsCi0gICAgICAgICJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIFJUQyBvcGVyYXRpb24uIiwKLSAgICAgICAgUE9TVF9SQU0gfCBQT1NUX1BPV0VSRkFJTCB8IFBPU1RfTUFOVUFMLAotICAgICAgICAmcnRjX3Bvc3RfdGVzdCwKLSAgICAgICAgTlVMTCwKLSAgICAgICAgTlVMTCwKKwkiUlRDIHRlc3QiLAorCSJydGMiLAorCSJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIFJUQyBvcGVyYXRpb24uIiwKKwlQT1NUX1JBTSB8IFBPU1RfUE9XRVJGQUlMIHwgUE9TVF9NQU5VQUwsCisJJnJ0Y19wb3N0X3Rlc3QsCisJTlVMTCwKKwlOVUxMLAogCUNGR19QT1NUX1JUQwogICAgIH0sCiAjZW5kaWYKICNpZiBDT05GSUdfUE9TVCAmIENGR19QT1NUX01FTU9SWQogICAgIHsKLSAgICAgICAgIk1lbW9yeSB0ZXN0IiwKLSAgICAgICAgIm1lbW9yeSIsCi0gICAgICAgICJUaGlzIHRlc3QgY2hlY2tzIFJBTS4iLAotICAgICAgICBQT1NUX1JPTSB8IFBPU1RfUE9XRVJPTiB8IFBPU1RfUE9XRVJGQUlMIHwgUE9TVF9QUkVSRUwsCi0gICAgICAgICZtZW1vcnlfcG9zdF90ZXN0LAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAorCSJNZW1vcnkgdGVzdCIsCisJIm1lbW9yeSIsCisJIlRoaXMgdGVzdCBjaGVja3MgUkFNLiIsCisJUE9TVF9ST00gfCBQT1NUX1BPV0VST04gfCBQT1NUX1BPV0VSRkFJTCB8IFBPU1RfUFJFUkVMLAorCSZtZW1vcnlfcG9zdF90ZXN0LAorCU5VTEwsCisJTlVMTCwKIAlDRkdfUE9TVF9NRU1PUlkKICAgICB9LAogI2VuZGlmCiAjaWYgQ09ORklHX1BPU1QgJiBDRkdfUE9TVF9DUFUKICAgICB7Ci0gICAgICAgICJDUFUgdGVzdCIsCi0gICAgICAgICJjcHUiLAotICAgICAgICAiVGhpcyB0ZXN0IHZlcmlmaWVzIHRoZSBhcml0aG1ldGljIGxvZ2ljIHVuaXQgb2YiCi0gICAgICAgICIgQ1BVLiIsCi0gICAgICAgIFBPU1RfUkFNIHwgUE9TVF9BTFdBWVMsCi0gICAgICAgICZjcHVfcG9zdF90ZXN0LAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAorCSJDUFUgdGVzdCIsCisJImNwdSIsCisJIlRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgYXJpdGhtZXRpYyBsb2dpYyB1bml0IG9mIgorCSIgQ1BVLiIsCisJUE9TVF9SQU0gfCBQT1NUX0FMV0FZUywKKwkmY3B1X3Bvc3RfdGVzdCwKKwlOVUxMLAorCU5VTEwsCiAJQ0ZHX1BPU1RfQ1BVCiAgICAgfSwKICNlbmRpZgogI2lmIENPTkZJR19QT1NUICYgQ0ZHX1BPU1RfVUFSVAogICAgIHsKLSAgICAgICAgIlVBUlQgdGVzdCIsCi0gICAgICAgICJ1YXJ0IiwKLSAgICAgICAgIlRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgVUFSVCBvcGVyYXRpb24uIiwKLSAgICAgICAgUE9TVF9SQU0gfCBQT1NUX1BPV0VSRkFJTCB8IFBPU1RfTUFOVUFMLAotICAgICAgICAmdWFydF9wb3N0X3Rlc3QsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCisJIlVBUlQgdGVzdCIsCisJInVhcnQiLAorCSJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIFVBUlQgb3BlcmF0aW9uLiIsCisJUE9TVF9SQU0gfCBQT1NUX1BPV0VSRkFJTCB8IFBPU1RfTUFOVUFMLAorCSZ1YXJ0X3Bvc3RfdGVzdCwKKwlOVUxMLAorCU5VTEwsCiAJQ0ZHX1BPU1RfVUFSVAogICAgIH0sCiAjZW5kaWYKICNpZiBDT05GSUdfUE9TVCAmIENGR19QT1NUX0VUSEVSCiAgICAgewotICAgICAgICAiRVRIRVJORVQgdGVzdCIsCi0gICAgICAgICJldGhlcm5ldCIsCi0gICAgICAgICJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIEVUSEVSTkVUIG9wZXJhdGlvbi4iLAotICAgICAgICBQT1NUX1JBTSB8IFBPU1RfQUxXQVlTIHwgUE9TVF9NQU5VQUwsCi0gICAgICAgICZldGhlcl9wb3N0X3Rlc3QsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCisJIkVUSEVSTkVUIHRlc3QiLAorCSJldGhlcm5ldCIsCisJIlRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgRVRIRVJORVQgb3BlcmF0aW9uLiIsCisJUE9TVF9SQU0gfCBQT1NUX0FMV0FZUyB8IFBPU1RfTUFOVUFMLAorCSZldGhlcl9wb3N0X3Rlc3QsCisJTlVMTCwKKwlOVUxMLAogCUNGR19QT1NUX0VUSEVSCiAgICAgfSwKICNlbmRpZgogI2lmIENPTkZJR19QT1NUICYgQ0ZHX1BPU1RfU1BJCiAgICAgewotICAgICAgICAiU1BJIHRlc3QiLAotICAgICAgICAic3BpIiwKLSAgICAgICAgIlRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgU1BJIG9wZXJhdGlvbi4iLAotICAgICAgICBQT1NUX1JBTSB8IFBPU1RfQUxXQVlTIHwgUE9TVF9NQU5VQUwsCi0gICAgICAgICZzcGlfcG9zdF90ZXN0LAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAorCSJTUEkgdGVzdCIsCisJInNwaSIsCisJIlRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgU1BJIG9wZXJhdGlvbi4iLAorCVBPU1RfUkFNIHwgUE9TVF9BTFdBWVMgfCBQT1NUX01BTlVBTCwKKwkmc3BpX3Bvc3RfdGVzdCwKKwlOVUxMLAorCU5VTEwsCiAJQ0ZHX1BPU1RfU1BJCiAgICAgfSwKICNlbmRpZgogI2lmIENPTkZJR19QT1NUICYgQ0ZHX1BPU1RfVVNCCiAgICAgewotICAgICAgICAiVVNCIHRlc3QiLAotICAgICAgICAidXNiIiwKLSAgICAgICAgIlRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgVVNCIG9wZXJhdGlvbi4iLAotICAgICAgICBQT1NUX1JBTSB8IFBPU1RfQUxXQVlTIHwgUE9TVF9NQU5VQUwsCi0gICAgICAgICZ1c2JfcG9zdF90ZXN0LAotICAgICAgICBOVUxMLAotICAgICAgICBOVUxMLAorCSJVU0IgdGVzdCIsCisJInVzYiIsCisJIlRoaXMgdGVzdCB2ZXJpZmllcyB0aGUgVVNCIG9wZXJhdGlvbi4iLAorCVBPU1RfUkFNIHwgUE9TVF9BTFdBWVMgfCBQT1NUX01BTlVBTCwKKwkmdXNiX3Bvc3RfdGVzdCwKKwlOVUxMLAorCU5VTEwsCiAJQ0ZHX1BPU1RfVVNCCiAgICAgfSwKICNlbmRpZgogI2lmIENPTkZJR19QT1NUICYgQ0ZHX1BPU1RfU1BSCiAgICAgewotICAgICAgICAiU1BSIHRlc3QiLAotICAgICAgICAic3ByIiwKLSAgICAgICAgIlRoaXMgdGVzdCBjaGVja3MgU1BSIGNvbnRlbnRzLiIsCi0gICAgICAgIFBPU1RfUk9NIHwgUE9TVF9BTFdBWVMgfCBQT1NUX1BSRVJFTCwKLSAgICAgICAgJnNwcl9wb3N0X3Rlc3QsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCisJIlNQUiB0ZXN0IiwKKwkic3ByIiwKKwkiVGhpcyB0ZXN0IGNoZWNrcyBTUFIgY29udGVudHMuIiwKKwlQT1NUX1JPTSB8IFBPU1RfQUxXQVlTIHwgUE9TVF9QUkVSRUwsCisJJnNwcl9wb3N0X3Rlc3QsCisJTlVMTCwKKwlOVUxMLAogCUNGR19QT1NUX1NQUgogICAgIH0sCiAjZW5kaWYKICNpZiBDT05GSUdfUE9TVCAmIENGR19QT1NUX1NZU01PTgogICAgIHsKLSAgICAgICAgIlNZU01PTiB0ZXN0IiwKLSAgICAgICAgInN5c21vbiIsCi0gICAgICAgICJUaGlzIHRlc3QgbW9uaXRvcnMgc3lzdGVtIGhhcmR3YXJlLiIsCi0gICAgICAgIFBPU1RfUkFNIHwgUE9TVF9BTFdBWVMsCi0gICAgICAgICZzeXNtb25fcG9zdF90ZXN0LAotICAgICAgICAmc3lzbW9uX2luaXRfZiwKLSAgICAgICAgJnN5c21vbl9yZWxvYywKKwkiU1lTTU9OIHRlc3QiLAorCSJzeXNtb24iLAorCSJUaGlzIHRlc3QgbW9uaXRvcnMgc3lzdGVtIGhhcmR3YXJlLiIsCisJUE9TVF9SQU0gfCBQT1NUX0FMV0FZUywKKwkmc3lzbW9uX3Bvc3RfdGVzdCwKKwkmc3lzbW9uX2luaXRfZiwKKwkmc3lzbW9uX3JlbG9jLAogCUNGR19QT1NUX1NZU01PTgogICAgIH0sCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Bvc3Qvd2F0Y2hkb2cuYyBiL3Bvc3Qvd2F0Y2hkb2cuYwppbmRleCAwY2RmYmYwLi40OGM0MjgyIDEwMDY0NAotLS0gYS9wb3N0L3dhdGNoZG9nLmMKKysrIGIvcG9zdC93YXRjaGRvZy5jCkBAIC02Niw4ICs2Niw4IEBACiAJCWlmIChpbnRzKQogCQkJZW5hYmxlX2ludGVycnVwdHMgKCk7CiAKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIElmIHdlIGhhdmUgcmVhY2hlZCB0aGlzIHBvaW50LCB0aGUgd2F0Y2hkb2cgdGltZXIKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSByZWFjaGVkIHRoaXMgcG9pbnQsIHRoZSB3YXRjaGRvZyB0aW1lcgogCQkgKiBkb2VzIG5vdCB3b3JrCiAJCSAqLwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9ydGMvZHMxMjg4Ny5jIGIvcnRjL2RzMTI4ODcuYwppbmRleCBjZjU3MmNjLi44YjEyODkzIDEwMDY0NAotLS0gYS9ydGMvZHMxMjg4Ny5jCisrKyBiL3J0Yy9kczEyODg3LmMKQEAgLTU2LDcgKzU2LDcgQEAKIHsKIAl1Y2hhciB2YWw7CiAKLSAgICAJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikoUlRDX1BPUlRfQUREUikgPSByZWc7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikoUlRDX1BPUlRfQUREUikgPSByZWc7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CiAKIAl2YWwgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKShSVENfUE9SVF9EQVRBKTsKQEAgLTY1LDcgKzY1LDcgQEAKIAogc3RhdGljIHZvaWQgcnRjX3dyaXRlICh1Y2hhciByZWcsIHVjaGFyIHZhbCkKIHsKLSAgICAJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikoUlRDX1BPUlRfQUREUikgPSByZWc7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKikoUlRDX1BPUlRfQUREUikgPSByZWc7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CiAKIAkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKShSVENfUE9SVF9EQVRBKSA9IHZhbDsKQEAgLTIxOCwxNCArMjE4LDE0IEBACiAJdG1wLnRtX3NlYyA9IDA7CiAKICNpZmRlZiBSVENfREVCVUcKLSAgICAgICAgcHJpbnRmICggIlJUQzogICAlNGQtJTAyZC0lMDJkICUyZDolMDJkOiUwMmQgVVRDXG4iLAotICAgIAkJICAgIHRtcC50bV95ZWFyLCB0bXAudG1fbW9uLCB0bXAudG1fbWRheSwKKwlwcmludGYgKCAiUlRDOiAgICU0ZC0lMDJkLSUwMmQgJTJkOiUwMmQ6JTAyZCBVVENcbiIsCisJCSAgICB0bXAudG1feWVhciwgdG1wLnRtX21vbiwgdG1wLnRtX21kYXksCiAJCSAgICB0bXAudG1faG91ciwgdG1wLnRtX21pbiwgdG1wLnRtX3NlYyk7CiAjZW5kaWYKIAogCWN0cmxfcmcgPSBSVENfQ0JfU0VUIHwgUlRDX0NCXzI0XzEyIHwgUlRDX0NCX0RNOwogCXJ0Y193cml0ZShSVENfQ09OVFJPTF9CLGN0cmxfcmcpOwotICAgIAlydGNfc2V0KCZ0bXApOworCXJ0Y19zZXQoJnRtcCk7CiAKIAlydGNfd3JpdGUoUlRDX0hPVVJTX0FMQVJNLCAwKSwKIAlydGNfd3JpdGUoUlRDX01JTlVURVNfQUxBUk0sIDApLApkaWZmIC0tZ2l0IGEvcnRjL2RzMTMwNy5jIGIvcnRjL2RzMTMwNy5jCmluZGV4IGQyYjZiYmUuLjRiNmQ4YWMgMTAwNjQ0Ci0tLSBhL3J0Yy9kczEzMDcuYworKysgYi9ydGMvZHMxMzA3LmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCQlydGNfd3JpdGUgKFJUQ19TRUNfUkVHX0FERFIsCiAJCQkgICBydGNfcmVhZCAoUlRDX1NFQ19SRUdfQUREUikgJiB+UlRDX1NFQ19CSVRfQ0gpOwogCX0KLQkKKwogCXRtcC0+dG1fc2VjICA9IGJjZDJiaW4gKHNlYyAmIDB4N0YpOwogCXRtcC0+dG1fbWluICA9IGJjZDJiaW4gKG1pbiAmIDB4N0YpOwogCXRtcC0+dG1faG91ciA9IGJjZDJiaW4gKGhvdXIgJiAweDNGKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiAJaWYgKHRtcC0+dG1feWVhciA8IDE5NzAgfHwgdG1wLT50bV95ZWFyID4gMjA2OSkKIAkJcHJpbnRmKCJXQVJOSU5HOiB5ZWFyIHNob3VsZCBiZSBiZXR3ZWVuIDE5NzAgYW5kIDIwNjkhXG4iKTsKLQkJCisKIAlydGNfd3JpdGUgKFJUQ19ZUl9SRUdfQUREUiwgYmluMmJjZCAodG1wLT50bV95ZWFyICUgMTAwKSk7CiAJcnRjX3dyaXRlIChSVENfTU9OX1JFR19BRERSLCBiaW4yYmNkICh0bXAtPnRtX21vbikpOwogCXJ0Y193cml0ZSAoUlRDX0RBWV9SRUdfQUREUiwgYmluMmJjZCAodG1wLT50bV93ZGF5ICsgMSkpOwpAQCAtMTQ1LDggKzE0NSw4IEBACiAKIAogLyoKLSAqIFJlc2V0IHRoZSBSVEMuIFdlIHNldHRpbmcgdGhlIGRhdGUgYmFjayB0byAxOTcwLTAxLTAxLiAKLSAqIFdlIGFsc28gZW5hYmxlIHRoZSBvc2NpbGxhdG9yIG91dHB1dCBvbiB0aGUgU1FXL09VVCBwaW4gYW5kIHByb2dyYW0gCisgKiBSZXNldCB0aGUgUlRDLiBXZSBzZXR0aW5nIHRoZSBkYXRlIGJhY2sgdG8gMTk3MC0wMS0wMS4KKyAqIFdlIGFsc28gZW5hYmxlIHRoZSBvc2NpbGxhdG9yIG91dHB1dCBvbiB0aGUgU1FXL09VVCBwaW4gYW5kIHByb2dyYW0KICAqIGl0IGZvciAzMiw3NjggSHogb3V0cHV0LiBOb3RlIHRoYXQgYWNjb3JkaW5nIHRvIHRoZSBkYXRhc2hlZXQsIHR1cm5pbmcKICAqIG9uIHRoZSBzcXVhcmUgd2F2ZSBvdXRwdXQgaW5jcmVhc2VzIHRoZSBjdXJyZW50IGRyYWluIG9uIHRoZSBiYWNrdXAKICAqIGJhdHRlcnkgdG8gc29tZXRoaW5nIGJldHdlZW4gNDgwbkEgYW5kIDgwMG5BLgpkaWZmIC0tZ2l0IGEvcnRjL2RzMTY0eC5jIGIvcnRjL2RzMTY0eC5jCmluZGV4IDNmMzI5YzcuLjNjYzc2YWIgMTAwNjQ0Ci0tLSBhL3J0Yy9kczE2NHguYworKysgYi9ydGMvZHMxNjR4LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIENvcHlyaWdodCAyMDAyCiAgKiBBUklPIERhdGEgTmV0d29ya3MsIEluYy4gZGNoaXVAYXJpb2RhdGEuY29tCi0gKiAKKyAqCiAgKiBtb2RpZmllZCBmb3IgRFMxNjR4OgogICogVGhlIExFT1ggdGVhbSA8dGVhbUBsZW94Lm9yZz4sIGh0dHA6Ly93d3cubGVveC5vcmcKICAqCmRpZmYgLS1naXQgYS9ydGMvbTQxdDExLmMgYi9ydGMvbTQxdDExLmMKaW5kZXggMzBhMTAxYy4uMTFhMWIwOCAxMDA2NDQKLS0tIGEvcnRjL200MXQxMS5jCisrKyBiL3J0Yy9tNDF0MTEuYwpAQCAtOTgsMzYgKzk4LDM2IEBACiAKIHZvaWQgcnRjX2dldCAoc3RydWN0IHJ0Y190aW1lICp0bXApCiB7Ci0gICAgICAgIHVjaGFyIGRhdGFbUlRDX1JFR19DTlRdOworCXVjaGFyIGRhdGFbUlRDX1JFR19DTlRdOwogCi0gICAgICAgIGkyY19yZWFkKENGR19JMkNfUlRDX0FERFIsIFJUQ19TRUNfQUREUiwgMSwgZGF0YSwgUlRDX1JFR19DTlQpOworCWkyY19yZWFkKENGR19JMkNfUlRDX0FERFIsIFJUQ19TRUNfQUREUiwgMSwgZGF0YSwgUlRDX1JFR19DTlQpOwogCi0gICAgICAgIGlmKCBkYXRhW1JUQ19TRUNfQUREUl0gJiAweDgwICl7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCAibTQxdDExIFJUQyBDbG9jayBzdG9wcGVkISEhXG4iICk7Ci0gICAgICAgIH0KKwlpZiggZGF0YVtSVENfU0VDX0FERFJdICYgMHg4MCApeworCQlwcmludGYoICJtNDF0MTEgUlRDIENsb2NrIHN0b3BwZWQhISFcbiIgKTsKKwl9CiAJdG1wLT50bV9zZWMgID0gYmNkMmJpbiAoZGF0YVtSVENfU0VDX0FERFJdICAmIDB4N0YpOwogCXRtcC0+dG1fbWluICA9IGJjZDJiaW4gKGRhdGFbUlRDX01JTl9BRERSXSAgJiAweDdGKTsKIAl0bXAtPnRtX2hvdXIgPSBiY2QyYmluIChkYXRhW1JUQ19IT1VSX0FERFJdICYgMHgzRik7CiAJdG1wLT50bV9tZGF5ID0gYmNkMmJpbiAoZGF0YVtSVENfREFURV9BRERSXSAmIDB4M0YpOwogCXRtcC0+dG1fbW9uICA9IGJjZDJiaW4gKGRhdGFbUlRDX01PTlRIX0FERFJdJiAweDFGKTsKICNpZm5kZWYgQ0ZHX000MVQxMV9FWFRfQ0VOVFVSWV9EQVRBCi0gICAgICAgIHRtcC0+dG1feWVhciA9IENGR19NNDFUMTFfQkFTRV9ZRUFSCi0gICAgICAgICAgICAgICAgKyBiY2QyYmluKGRhdGFbUlRDX1lFQVJTX0FERFJdKQotICAgICAgICAgICAgICAgICsgKChkYXRhW1JUQ19IT1VSX0FERFJdJjB4NDApID8gMTAwIDogMCk7CisJdG1wLT50bV95ZWFyID0gQ0ZHX000MVQxMV9CQVNFX1lFQVIKKwkJKyBiY2QyYmluKGRhdGFbUlRDX1lFQVJTX0FERFJdKQorCQkrICgoZGF0YVtSVENfSE9VUl9BRERSXSYweDQwKSA/IDEwMCA6IDApOwogI2Vsc2UKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2VudDsKLSAgICAgICAgICAgICAgICBpMmNfcmVhZChDRkdfSTJDX1JUQ19BRERSLCBNNDFUMTFfWUVBUl9EQVRBLCAxLCAmY2VudCwgTTQxVDExX1lFQVJfU0laRSk7Ci0gICAgICAgICAgICAgICAgaWYoICEoZGF0YVtSVENfSE9VUl9BRERSXSAmIDB4ODApICl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoICJtNDF0MTEgUlRDOiBjYW5uJ3Qga2VlcCB0cmFjayBvZiB5ZWFycyB3aXRob3V0IENFQiBzZXRcbiIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYoIChjZW50ICYgMHgxKSAhPSAoKGRhdGFbUlRDX0hPVVJfQUREUl0mMHg0MCk+PjcpICl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKmNlbnR1cnkgZmxpcCBzdG9yZSBvZmYgbmV3IHllYXIqLwotICAgICAgICAgICAgICAgICAgICAgICAgY2VudCArPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgaTJjX3dyaXRlKENGR19JMkNfUlRDX0FERFIsIE00MVQxMV9ZRUFSX0RBVEEsIDEsICZjZW50LCBNNDFUMTFfWUVBUl9TSVpFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdG1wLT50bV95ZWFyID0oKGludCljZW50KjEwMCkrYmNkMmJpbihkYXRhW1JUQ19ZRUFSU19BRERSXSk7Ci0gICAgICAgIH0KKwl7CisJCXVuc2lnbmVkIGNoYXIgY2VudDsKKwkJaTJjX3JlYWQoQ0ZHX0kyQ19SVENfQUREUiwgTTQxVDExX1lFQVJfREFUQSwgMSwgJmNlbnQsIE00MVQxMV9ZRUFSX1NJWkUpOworCQlpZiggIShkYXRhW1JUQ19IT1VSX0FERFJdICYgMHg4MCkgKXsKKwkJCXByaW50ZiggIm00MXQxMSBSVEM6IGNhbm4ndCBrZWVwIHRyYWNrIG9mIHllYXJzIHdpdGhvdXQgQ0VCIHNldFxuIiApOworCQl9CisJCWlmKCAoY2VudCAmIDB4MSkgIT0gKChkYXRhW1JUQ19IT1VSX0FERFJdJjB4NDApPj43KSApeworCQkJLypjZW50dXJ5IGZsaXAgc3RvcmUgb2ZmIG5ldyB5ZWFyKi8KKwkJCWNlbnQgKz0gMTsKKwkJCWkyY193cml0ZShDRkdfSTJDX1JUQ19BRERSLCBNNDFUMTFfWUVBUl9EQVRBLCAxLCAmY2VudCwgTTQxVDExX1lFQVJfU0laRSk7CisJCX0KKwkJdG1wLT50bV95ZWFyID0oKGludCljZW50KjEwMCkrYmNkMmJpbihkYXRhW1JUQ19ZRUFSU19BRERSXSk7CisJfQogI2VuZGlmCiAJdG1wLT50bV93ZGF5ID0gYmNkMmJpbiAoZGF0YVtSVENfREFZX0FERFJdICAmIDB4MDcpOwogCXRtcC0+dG1feWRheSA9IDA7CkBAIC0xNDAsNyArMTQwLDcgQEAKIAogdm9pZCBydGNfc2V0IChzdHJ1Y3QgcnRjX3RpbWUgKnRtcCkKIHsKLSAgICAgICAgdWNoYXIgZGF0YVtSVENfUkVHX0NOVF07CisJdWNoYXIgZGF0YVtSVENfUkVHX0NOVF07CiAKIAlkZWJ1ZyAoICJTZXQgREFURTogJTRkLSUwMmQtJTAyZCAod2RheT0lZCkgIFRJTUU6ICUyZDolMDJkOiUwMmRcbiIsCiAJCXRtcC0+dG1feWVhciwgdG1wLT50bV9tb24sIHRtcC0+dG1fbWRheSwgdG1wLT50bV93ZGF5LApAQCAtMTUzLDUwICsxNTMsNTAgQEAKIAlkYXRhW1JUQ19NT05USF9BRERSXSAgPSBiaW4yYmNkKHRtcC0+dG1fbW9uKTsKIAlkYXRhW1JUQ19EQVlfQUREUl0gICAgPSBiaW4yYmNkKHRtcC0+dG1fd2RheSkgJiAweDA3OwogCi0gICAgICAgIGRhdGFbUlRDX0hPVVJfQUREUl0gICB8PSAweDgwOy8qd2Ugd2lsbCBhbHdheXMgdXNlIENFQiovCisJZGF0YVtSVENfSE9VUl9BRERSXSAgIHw9IDB4ODA7Lyp3ZSB3aWxsIGFsd2F5cyB1c2UgQ0VCKi8KIAotICAgICAgICBkYXRhW1JUQ19ZRUFSU19BRERSXSAgPSBiaW4yYmNkKHRtcC0+dG1feWVhciUxMDApOy8qc2FtZSB0aGluZyBlaXRoZXIgd2F5Ki8KKwlkYXRhW1JUQ19ZRUFSU19BRERSXSAgPSBiaW4yYmNkKHRtcC0+dG1feWVhciUxMDApOy8qc2FtZSB0aGluZyBlaXRoZXIgd2F5Ki8KICNpZm5kZWYgQ0ZHX000MVQxMV9FWFRfQ0VOVFVSWV9EQVRBCi0gICAgICAgIGlmKCAoKHRtcC0+dG1feWVhciAtIENGR19NNDFUMTFfQkFTRV9ZRUFSKSA+IDIwMCkgfHwKLSAgICAgICAgICAgICh0bXAtPnRtX3llYXIgPCBDRkdfTTQxVDExX0JBU0VfWUVBUikgKXsKLSAgICAgICAgICAgICAgICBwcmludGYoICJtNDF0MTEgUlRDIHNldHRpbmcgeWVhciBvdXQgb2YgcmFuZ2UhIW5lZWQgcmVjb21waWxlXG4iICk7Ci0gICAgICAgIH0KLSAgICAgICAgZGF0YVtSVENfSE9VUl9BRERSXSB8PSAodG1wLT50bV95ZWFyIC0gQ0ZHX000MVQxMV9CQVNFX1lFQVIpID4gMTAwID8gMHg0MCA6IDA7CisJaWYoICgodG1wLT50bV95ZWFyIC0gQ0ZHX000MVQxMV9CQVNFX1lFQVIpID4gMjAwKSB8fAorCSAgICAodG1wLT50bV95ZWFyIDwgQ0ZHX000MVQxMV9CQVNFX1lFQVIpICl7CisJCXByaW50ZiggIm00MXQxMSBSVEMgc2V0dGluZyB5ZWFyIG91dCBvZiByYW5nZSEhbmVlZCByZWNvbXBpbGVcbiIgKTsKKwl9CisJZGF0YVtSVENfSE9VUl9BRERSXSB8PSAodG1wLT50bV95ZWFyIC0gQ0ZHX000MVQxMV9CQVNFX1lFQVIpID4gMTAwID8gMHg0MCA6IDA7CiAjZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjZW50OwotICAgICAgICAgICAgICAgIGNlbnQgPSB0bXAtPnRtX3llYXIgPyB0bXAtPnRtX3llYXIgLyAxMDAgOiAwOwotICAgICAgICAgICAgICAgIGRhdGFbUlRDX0hPVVJfQUREUl0gfD0gKGNlbnQgJiAweDEpID8gMHg0MCA6IDA7Ci0gICAgICAgICAgICAgICAgaTJjX3dyaXRlKENGR19JMkNfUlRDX0FERFIsIE00MVQxMV9ZRUFSX0RBVEEsIDEsICZjZW50LCBNNDFUMTFfWUVBUl9TSVpFKTsKLSAgICAgICAgfQorCXsKKwkJdW5zaWduZWQgY2hhciBjZW50OworCQljZW50ID0gdG1wLT50bV95ZWFyID8gdG1wLT50bV95ZWFyIC8gMTAwIDogMDsKKwkJZGF0YVtSVENfSE9VUl9BRERSXSB8PSAoY2VudCAmIDB4MSkgPyAweDQwIDogMDsKKwkJaTJjX3dyaXRlKENGR19JMkNfUlRDX0FERFIsIE00MVQxMV9ZRUFSX0RBVEEsIDEsICZjZW50LCBNNDFUMTFfWUVBUl9TSVpFKTsKKwl9CiAjZW5kaWYKLSAgICAgICAgaTJjX3dyaXRlKENGR19JMkNfUlRDX0FERFIsIFJUQ19TRUNfQUREUiwgMSwgZGF0YSwgUlRDX1JFR19DTlQpOworCWkyY193cml0ZShDRkdfSTJDX1JUQ19BRERSLCBSVENfU0VDX0FERFIsIDEsIGRhdGEsIFJUQ19SRUdfQ05UKTsKIH0KIAogdm9pZCBydGNfcmVzZXQgKHZvaWQpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgdmFsOworCXVuc2lnbmVkIGNoYXIgdmFsOwogCS8qIGNsZWFyIGFsbCBjb250cm9sICYgc3RhdHVzIHJlZ2lzdGVycyAqLwotICAgICAgICBpMmNfcmVhZChDRkdfSTJDX1JUQ19BRERSLCBSVENfU0VDX0FERFIsIDEsICZ2YWwsIDEpOwotICAgICAgICB2YWwgPSB2YWwgJiAweDdGOy8qbWFrZSBzdXJlIHdlIGFyZSBydW5uaW5nKi8KLSAgICAgICAgaTJjX3dyaXRlKENGR19JMkNfUlRDX0FERFIsIFJUQ19TRUNfQUREUiwgMSwgJnZhbCwgUlRDX1JFR19DTlQpOworCWkyY19yZWFkKENGR19JMkNfUlRDX0FERFIsIFJUQ19TRUNfQUREUiwgMSwgJnZhbCwgMSk7CisJdmFsID0gdmFsICYgMHg3RjsvKm1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyovCisJaTJjX3dyaXRlKENGR19JMkNfUlRDX0FERFIsIFJUQ19TRUNfQUREUiwgMSwgJnZhbCwgUlRDX1JFR19DTlQpOwogCi0gICAgICAgIGkyY19yZWFkKENGR19JMkNfUlRDX0FERFIsIFJUQ19DT05UUk9MX0FERFIsIDEsICZ2YWwsIDEpOwotICAgICAgICB2YWwgPSB2YWwgJiAweDNGOy8qdHVybiBvZmYgZnJlcSB0ZXN0IGtlZXAgY2FsaWJyYXRpb24qLwotICAgICAgICBpMmNfd3JpdGUoQ0ZHX0kyQ19SVENfQUREUiwgUlRDX0NPTlRST0xfQUREUiwgMSwgJnZhbCwgMSk7CisJaTJjX3JlYWQoQ0ZHX0kyQ19SVENfQUREUiwgUlRDX0NPTlRST0xfQUREUiwgMSwgJnZhbCwgMSk7CisJdmFsID0gdmFsICYgMHgzRjsvKnR1cm4gb2ZmIGZyZXEgdGVzdCBrZWVwIGNhbGlicmF0aW9uKi8KKwlpMmNfd3JpdGUoQ0ZHX0kyQ19SVENfQUREUiwgUlRDX0NPTlRST0xfQUREUiwgMSwgJnZhbCwgMSk7CiB9CiAKIGludCBydGNfc3RvcmUoaW50IGFkZHIsIHVuc2lnbmVkIGNoYXIqIGRhdGEsIGludCBzaXplKQogewotICAgICAgICAvKmRvbid0IGxldCB0aGluZ3Mgd3JhcCBvbnRvIHRoZSB0aW1lIG9uIGEgd3JpdGUqLwotICAgICAgICBpZiggKGFkZHIrc2l6ZSkgPj0gTTQxVDExX1NUT1JBR0VfU1ogKQotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICByZXR1cm4gaTJjX3dyaXRlKCBDRkdfSTJDX1JUQ19BRERSLCBSRUdfQ05UK2FkZHIsIDEsIGRhdGEsIHNpemUgKTsKKwkvKmRvbid0IGxldCB0aGluZ3Mgd3JhcCBvbnRvIHRoZSB0aW1lIG9uIGEgd3JpdGUqLworCWlmKCAoYWRkcitzaXplKSA+PSBNNDFUMTFfU1RPUkFHRV9TWiApCisJCXJldHVybiAxOworCXJldHVybiBpMmNfd3JpdGUoIENGR19JMkNfUlRDX0FERFIsIFJFR19DTlQrYWRkciwgMSwgZGF0YSwgc2l6ZSApOwogfQogCiBpbnQgcnRjX3JlY2FsbChpbnQgYWRkciwgdW5zaWduZWQgY2hhciogZGF0YSwgaW50IHNpemUpCiB7Ci0gICAgICAgIHJldHVybiBpMmNfcmVhZCggQ0ZHX0kyQ19SVENfQUREUiwgUkVHX0NOVCthZGRyLCAxLCBkYXRhLCBzaXplICk7CisJcmV0dXJuIGkyY19yZWFkKCBDRkdfSTJDX1JUQ19BRERSLCBSRUdfQ05UK2FkZHIsIDEsIGRhdGEsIHNpemUgKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19SVENfTTQxVDExICYmIENGR19JMkNfUlRDX0FERFIgJiYgQ0ZHX0NNRF9EQVRFICovCmRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZSBiL3Rvb2xzL01ha2VmaWxlCmluZGV4IDM1YzYwYjYuLmRlNmY3ZGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL01ha2VmaWxlCisrKyBiL3Rvb2xzL01ha2VmaWxlCkBAIC0xODYsNCArMTg2LDMgQEAKIHNpbmNsdWRlIC5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCmRpZmYgLS1naXQgYS90b29scy9ibXBfbG9nby5jIGIvdG9vbHMvYm1wX2xvZ28uYwppbmRleCA1NGZkY2ZmLi4yNDIxYjgyIDEwMDY0NAotLS0gYS90b29scy9ibXBfbG9nby5jCisrKyBiL3Rvb2xzL2JtcF9sb2dvLmMKQEAgLTY4LDggKzY4LDggQEAKIAkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKIAl9CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogcmVhZCB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBpbWFnZSwgYW5kIHRoZSBudW1iZXIgb2YgY29sb3JzIHVzZWQ7CisJLyoKKwkgKiByZWFkIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGltYWdlLCBhbmQgdGhlIG51bWJlciBvZiBjb2xvcnMgdXNlZDsKIAkgKiBpZ25vcmUgdGhlIHJlc3QKIAkgKi8KIAlza2lwX2J5dGVzIChmcCwgMTYpOwpAQCAtMTc0LDQgKzE3NCwzIEBACiAKIAlyZXR1cm4gKDApOwogfQotCmRpZmYgLS1naXQgYS90b29scy9lYXN5bG9nby9lYXN5bG9nby5jIGIvdG9vbHMvZWFzeWxvZ28vZWFzeWxvZ28uYwppbmRleCAzMTExMDY4Li5jYmVjNzBiIDEwMDY0NAotLS0gYS90b29scy9lYXN5bG9nby9lYXN5bG9nby5jCisrKyBiL3Rvb2xzL2Vhc3lsb2dvL2Vhc3lsb2dvLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCQlwcmludGYoIiAiKTsKIAkgICAgZWxzZQogCQlwcmludGYoIlgiKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOworCXByaW50ZigiXG4iKTsKICAgICB9CiB9CiAKQEAgLTEyMSw3ICsxMjEsNyBAQAogCQlwcmludGYoIiAiKTsKIAkgICAgZWxzZQogCQlwcmludGYoIlgiKTsKLSAgICAgICAgcHJpbnRmKCJcbiIpOworCXByaW50ZigiXG4iKTsKICAgICB9CiB9CiAKQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgIHJnYl90ICpwIDsKIAogICAgIGlmKCAoIGZpbGUgPSBmb3BlbiggZmlsZW5hbWUsICJyYiIgKSApID09IE5VTEwgKQotICAgIAlyZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogCiAgICAgZnJlYWQoJmhlYWRlciwgc2l6ZW9mKGhlYWRlciksIDEsIGZpbGUpOwogCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJCWltYWdlLT55dXl2ID0gMCA7CiAJCQlpbWFnZS0+cGFsZXR0ZV9zaXplID0gMCA7CiAJCQlpbWFnZS0+cGFsZXR0ZSA9IE5VTEwgOwotICAgIAkgICAgYnJlYWs7CisJICAgIGJyZWFrOwogCiAJZGVmYXVsdDoKIAkgICAgcHJpbnRmKCJGb3JtYXQgbm90IHN1cHBvcnRlZCFcbiIpOwpAQCAtMTgxLDE5ICsxODEsMTkgQEAKIAogICAgIGlmKCEoaGVhZGVyLkltYWdlRGVzY3JpcHRvckJ5dGUgJiAweDIwKSkKICAgICB7Ci0gICAgCXVuc2lnbmVkIGNoYXIgKnRlbXAgPSBtYWxsb2MoaW1hZ2UtPnNpemUpOwotICAgIAlpbnQgbGluZXNpemUgPSBpbWFnZS0+cGl4ZWxfc2l6ZSAqIGltYWdlLT53aWR0aCA7CisJdW5zaWduZWQgY2hhciAqdGVtcCA9IG1hbGxvYyhpbWFnZS0+c2l6ZSk7CisJaW50IGxpbmVzaXplID0gaW1hZ2UtPnBpeGVsX3NpemUgKiBpbWFnZS0+d2lkdGggOwogCXZvaWQJKmRlc3QgPSBpbWFnZS0+ZGF0YSwKIAkJKnNvdXJjZSA9IHRlbXAgKyBpbWFnZS0+c2l6ZSAtIGxpbmVzaXplIDsKIAotICAgICAgICBwcmludGYoIlMiKTsKKwlwcmludGYoIlMiKTsKIAlpZiAodGVtcCA9PSBOVUxMKQogCXsKIAkgICAgcHJpbnRmKCJDYW5ub3QgYWxsb2MgdGVtcCBidWZmZXIhXG4iKTsKIAkgICAgcmV0dXJuIC0xOwogCX0KIAotICAgIAltZW1jcHkodGVtcCwgaW1hZ2UtPmRhdGEsIGltYWdlLT5zaXplKTsKKwltZW1jcHkodGVtcCwgaW1hZ2UtPmRhdGEsIGltYWdlLT5zaXplKTsKIAlmb3IoaSA9IDA7IGk8aW1hZ2UtPmhlaWdodDsgaSsrLCBkZXN0Kz1saW5lc2l6ZSwgc291cmNlLT1saW5lc2l6ZSkKIAkgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgbGluZXNpemUpOwogCkBAIC0yNDIsNyArMjQyLDcgQEAKIAkJcGl4ZWxfcmdiX3RvX3l1eXYgKHJnYl9wdHIrKywgJnl1eXYpOwogCiAJCWlmICgoY291bnQgJiAxKT09MCkJLyogV2FzID09IDAgKi8KLQkgICAgCSAgICBtZW1jcHkgKGRlc3QsICgodm9pZCAqKSZ5dXl2KSArIDIsIHNpemVvZihzaG9ydCkpOworCQkgICAgbWVtY3B5IChkZXN0LCAoKHZvaWQgKikmeXV5dikgKyAyLCBzaXplb2Yoc2hvcnQpKTsKIAkJZWxzZQogCQkgICAgbWVtY3B5IChkZXN0LCAodm9pZCAqKSZ5dXl2LCBzaXplb2Yoc2hvcnQpKTsKIApAQCAtMzQ2LDcgKzM0Niw3IEBACiAgICAgY2FzZSAyOgogICAgIGNhc2UgMzoKICAgICBjYXNlIDQ6Ci0gICAgICAgIHN0cmNweSAoaW5wdXRmaWxlLCAJYXJndlsxXSk7CisJc3RyY3B5IChpbnB1dGZpbGUsIAlhcmd2WzFdKTsKIAogCWlmIChhcmdjID4gMikKIAkgICAgc3RyY3B5ICh2YXJuYW1lLCAJYXJndlsyXSk7CkBAIC0zNzUsMTQgKzM3NSwxNCBAQAogCQlzcHJpbnRmKG91dHB1dGZpbGUsICIlcy5oIiwgYXBwKTsKIAkgICAgfQogCX0KLSAgICAgICAgYnJlYWs7CisJYnJlYWs7CiAKICAgICBkZWZhdWx0OgotICAgICAgICBwcmludGYoIkVhc3lMb2dvIDEuMCAoQykgMjAwMCBieSBQYW9sbyBTY2FmZmFyZGlcblxuIik7CisJcHJpbnRmKCJFYXN5TG9nbyAxLjAgKEMpIDIwMDAgYnkgUGFvbG8gU2NhZmZhcmRpXG5cbiIpOwogCi0gICAgICAgIHByaW50ZigiU3ludGF4OgllYXN5bG9nbyBpbnB1dGZpbGUgW291dHB1dHZhciB7b3V0cHV0ZmlsZX1dIFxuIik7Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgcHJpbnRmKCJXaGVyZToJJ2lucHV0ZmlsZScgCWlzIHRoZSBUR0EgaW1hZ2UgdG8gbG9hZFxuIik7CisJcHJpbnRmKCJTeW50YXg6CWVhc3lsb2dvIGlucHV0ZmlsZSBbb3V0cHV0dmFyIHtvdXRwdXRmaWxlfV0gXG4iKTsKKwlwcmludGYoIlxuIik7CisJcHJpbnRmKCJXaGVyZToJJ2lucHV0ZmlsZScgCWlzIHRoZSBUR0EgaW1hZ2UgdG8gbG9hZFxuIik7CiAJcHJpbnRmKCIgICAgICAJJ291dHB1dHZhcicgCWlzIHRoZSB2YXJpYWJsZSBuYW1lIHRvIGNyZWF0ZVxuIik7CiAJcHJpbnRmKCIgICAgICAgCSdvdXRwdXRmaWxlJyAJaXMgdGhlIG91dHB1dCBoZWFkZXIgZmlsZSAoZGVmYXVsdCBpcyAnaW5wdXRmaWxlLmgnKVxuIik7CiAKQEAgLTM5OCw3ICszOTgsNyBAQAogICAgIGlmIChpbWFnZV9sb2FkX3RnYSAoJnJnYl9sb2dvLCBpbnB1dGZpbGUpPDApCiAgICAgewogCXByaW50ZigiaW5wdXQgZmlsZSBub3QgZm91bmQhXG4iKTsKLSAgICAJZXhpdCgxKTsKKwlleGl0KDEpOwogICAgIH0KIAogLyogQ29udmVydCBpdCB0byBZVVlWIGZvcm1hdCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvZW52L01ha2VmaWxlIGIvdG9vbHMvZW52L01ha2VmaWxlCmluZGV4IDdkYTFkMmIuLjljZTQ3N2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Vudi9NYWtlZmlsZQorKysgYi90b29scy9lbnYvTWFrZWZpbGUKQEAgLTQzLDQgKzQzLDMgQEAKIHNpbmNsdWRlIC5kZXBlbmQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCmRpZmYgLS1naXQgYS90b29scy9lbnYvZndfZW52LmggYi90b29scy9lbnYvZndfZW52LmgKaW5kZXggMmNjNzcyNC4uY2MyZmYwOSAxMDA2NDQKLS0tIGEvdG9vbHMvZW52L2Z3X2Vudi5oCisrKyBiL3Rvb2xzL2Vudi9md19lbnYuaApAQCAtMjEsOCArMjEsOCBAQAogICogTUEgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0vKiAKLSAqIFRvIGJ1aWxkIHRoZSB1dGlsaXR5IHdpdGggdGhlIHJ1bi10aW1lIGNvbmZpZ3VyYXRpb24gCisvKgorICogVG8gYnVpbGQgdGhlIHV0aWxpdHkgd2l0aCB0aGUgcnVuLXRpbWUgY29uZmlndXJhdGlvbgogICogdW5jb21tZW50IHRoZSBuZXh0IGxpbmUuCiAgKiBTZWUgaW5jbHVkZWQgImZ3X2Vudi5jb25maWciIHNhbXBsZSBmaWxlIChUUkFCIGJvYXJkKQogICogZm9yIG5vdGVzIG9uIGNvbmZpZ3VyYXRpb24uCmRpZmYgLS1naXQgYS90b29scy9lbnZjcmMuYyBiL3Rvb2xzL2VudmNyYy5jCmluZGV4IDE5ZmUxN2MuLjVmMTNhNjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VudmNyYy5jCisrKyBiL3Rvb2xzL2VudmNyYy5jCkBAIC05NCw0ICs5NCwzIEBACiAjZW5kaWYKICAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwogfQotCmRpZmYgLS1naXQgYS90b29scy9nZGIvcmVtb3RlLmMgYi90b29scy9nZGIvcmVtb3RlLmMKaW5kZXggYjhiMjQ3MC4uZjQwYjZjNiAxMDA2NDQKLS0tIGEvdG9vbHMvZ2RiL3JlbW90ZS5jCisrKyBiL3Rvb2xzL2dkYi9yZW1vdGUuYwpAQCAtMTcxLDcgKzE3MSw3IEBACiAJcmVwbHkJCU9LCQlmb3Igc3VjY2VzcwogCQkJRU5OCQlmb3IgYW4gZXJyb3IKIAotICAgICAgICB3cml0ZSByZWcJUG4uLi49ci4uLglXcml0ZSByZWdpc3RlciBuLi4uIHdpdGggdmFsdWUgci4uLiwKKwl3cml0ZSByZWcJUG4uLi49ci4uLglXcml0ZSByZWdpc3RlciBuLi4uIHdpdGggdmFsdWUgci4uLiwKIAkJCQkJd2hpY2ggY29udGFpbnMgdHdvIGhleCBkaWdpdHMgZm9yIGVhY2gKIAkJCQkJYnl0ZSBpbiB0aGUgcmVnaXN0ZXIgKHRhcmdldCBieXRlCiAJCQkJCW9yZGVyKS4KQEAgLTE5NCwxMiArMTk0LDEyIEBACiAJCQkJCXdoZXJlIG9ubHkgcGFydCBvZiB0aGUgZGF0YSB3YXMKIAkJCQkJd3JpdHRlbikuCiAKLSAgICAgICAgd3JpdGUgbWVtICAgICAgIFhBQS4uQUEsTExMTDpYWC4uWFgKLSAgICAgICAgIChiaW5hcnkpICAgICAgICAgICAgICAgICAgICAgICBBQS4uQUEgaXMgYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTExMIGlzIG51bWJlciBvZiBieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYWC4uWFggaXMgYmluYXJ5IGRhdGEKLSAgICAgICAgcmVwbHkgICAgICAgICAgIE9LICAgICAgICAgICAgICBmb3Igc3VjY2VzcwotICAgICAgICAgICAgICAgICAgICAgICAgRU5OICAgICAgICAgICAgIGZvciBhbiBlcnJvcgorCXdyaXRlIG1lbSAgICAgICBYQUEuLkFBLExMTEw6WFguLlhYCisJIChiaW5hcnkpICAgICAgICAgICAgICAgICAgICAgICBBQS4uQUEgaXMgYWRkcmVzcywKKwkJCQkJTExMTCBpcyBudW1iZXIgb2YgYnl0ZXMsCisJCQkJCVhYLi5YWCBpcyBiaW5hcnkgZGF0YQorCXJlcGx5ICAgICAgICAgICBPSyAgICAgICAgICAgICAgZm9yIHN1Y2Nlc3MKKwkJCUVOTiAgICAgICAgICAgICBmb3IgYW4gZXJyb3IKIAogCWNvbnRpbnVlCWNBQS4uQUEJCUFBLi5BQSBpcyBhZGRyZXNzIHRvIHJlc3VtZQogCQkJCQlJZiBBQS4uQUEgaXMgb21pdHRlZCwKQEAgLTIxNyw3ICsyMTcsNyBAQAogCXNpZ25hbAogCiAJbGFzdCBzaWduYWwgICAgID8gICAgICAgICAgICAgICBSZXBseSB0aGUgY3VycmVudCByZWFzb24gZm9yIHN0b3BwaW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgdGhlIHNhbWUgcmVwbHkgYXMgaXMgZ2VuZXJhdGVkCisJCQkJCVRoaXMgaXMgdGhlIHNhbWUgcmVwbHkgYXMgaXMgZ2VuZXJhdGVkCiAJCQkJCWZvciBzdGVwIG9yIGNvbnQgOiBTQUEgd2hlcmUgQUEgaXMgdGhlCiAJCQkJCXNpZ25hbCBudW1iZXIuCiAKQEAgLTI1Niw3ICsyNTYsNyBAQAogCQkJCQl0aGUgJ04nIHBhY2tldCBtYXkgYXJyaXZlIHNwb250YW5lb3VzbHkKIAkJCQkJd2hlcmVhcyB0aGUgJ3FPZmZzZXRzJyBpcyBhIHF1ZXJ5CiAJCQkJCWluaXRpYXRlZCBieSB0aGUgaG9zdCBkZWJ1Z2dlci4KLSAgICAgICAgb3IuLi4gICAgICAgICAgIE9YWC4uWFgJWFguLlhYICBpcyBoZXggZW5jb2Rpbmcgb2YgQVNDSUkgZGF0YS4gVGhpcworCW9yLi4uICAgICAgICAgICBPWFguLlhYCVhYLi5YWCAgaXMgaGV4IGVuY29kaW5nIG9mIEFTQ0lJIGRhdGEuIFRoaXMKIAkJCQkJY2FuIGhhcHBlbiBhdCBhbnkgdGltZSB3aGlsZSB0aGUKIAkJCQkJcHJvZ3JhbSBpcyBydW5uaW5nIGFuZCB0aGUgZGVidWdnZXIKIAkJCQkJc2hvdWxkIGNvbnRpbnVlIHRvIHdhaXQgZm9yCkBAIC00MTYsNyArNDE2LDcgQEAKICAgICAgICYmIHJlbW90ZV9hZGRyZXNzX3NpemUgPCAoc2l6ZW9mIChVTE9OR0VTVCkgKiA4KSkKICAgICB7CiAgICAgICAvKiBPbmx5IGNyZWF0ZSBhIG1hc2sgd2hlbiB0aGF0IG1hc2sgY2FuIHNhZmVseSBiZSBjb25zdHJ1Y3RlZAotICAgICAgICAgaW4gYSBVTE9OR0VTVCB2YXJpYWJsZS4gKi8KKwkgaW4gYSBVTE9OR0VTVCB2YXJpYWJsZS4gKi8KICAgICAgIFVMT05HRVNUIG1hc2sgPSAxOwogICAgICAgbWFzayA9IChtYXNrIDw8IHJlbW90ZV9hZGRyZXNzX3NpemUpIC0gMTsKICAgICAgIGFkZHIgJj0gbWFzazsKQEAgLTUyOSw4ICs1MjksOCBAQAogICAgICAgKnAgPSAnXDAnOwogCiAgICAgICAvKiBXZSBzZW5kIHRhcmdldCBzeXN0ZW0gdmFsdWVzIGJ5dGUgYnkgYnl0ZSwgaW4gaW5jcmVhc2luZyBieXRlCi0gICAgICAgICBhZGRyZXNzZXMsIGVhY2ggYnl0ZSBlbmNvZGVkIGFzIHR3byBoZXggY2hhcmFjdGVycyAob3Igb25lCi0gICAgICAgICBiaW5hcnkgY2hhcmFjdGVyKS4gICovCisJIGFkZHJlc3NlcywgZWFjaCBieXRlIGVuY29kZWQgYXMgdHdvIGhleCBjaGFyYWN0ZXJzIChvciBvbmUKKwkgYmluYXJ5IGNoYXJhY3RlcikuICAqLwogICAgICAgaWYgKHJlbW90ZV9iaW5hcnlfZG93bmxvYWQpCiAJewogCSAgaW50IGVzY2FwZWQgPSAwOwpAQCAtNTU3LDExICs1NTcsMTEgQEAKIAkgIGlmIChpIDwgdG9kbykKIAkgICAgewogCSAgICAgIC8qIEVzY2FwZSBjaGFycyBoYXZlIGZpbGxlZCB1cCB0aGUgYnVmZmVyIHByZW1hdHVyZWx5LAotCSAgICAgICAgIGFuZCB3ZSBoYXZlIGFjdHVhbGx5IHNlbnQgZmV3ZXIgYnl0ZXMgdGhhbiBwbGFubmVkLgotCSAgICAgICAgIEZpeC11cCB0aGUgbGVuZ3RoIGZpZWxkIG9mIHRoZSBwYWNrZXQuICAqLworCQkgYW5kIHdlIGhhdmUgYWN0dWFsbHkgc2VudCBmZXdlciBieXRlcyB0aGFuIHBsYW5uZWQuCisJCSBGaXgtdXAgdGhlIGxlbmd0aCBmaWVsZCBvZiB0aGUgcGFja2V0LiAgKi8KIAogCSAgICAgIC8qIEZJWE1FOiB3aWxsIGZhaWwgaWYgbmV3IGxlbiBpcyBhIHNob3J0ZXIgc3RyaW5nIHRoYW4KLQkgICAgICAgICBvbGQgbGVuLiAgKi8KKwkJIG9sZCBsZW4uICAqLwogCiAJICAgICAgcGxlbiArPSBoZXhudW1zdHIgKChjaGFyICopcGxlbiwgKFVMT05HRVNUKSBpKTsKIAkgICAgICAqcGxlbisrID0gJzonOwpAQCAtNTkxLDcgKzU5MSw3IEBACiAJfQogCiAgICAgICAvKiBJbmNyZW1lbnQgYnkgaSwgbm90IGJ5IHRvZG8sIGluIGNhc2UgZXNjYXBlIGNoYXJzCi0gICAgICAgICBjYXVzZWQgdXMgdG8gc2VuZCBmZXdlciBieXRlcyB0aGFuIHdlJ2QgcGxhbm5lZC4gICovCisJIGNhdXNlZCB1cyB0byBzZW5kIGZld2VyIGJ5dGVzIHRoYW4gd2UnZCBwbGFubmVkLiAgKi8KICAgICAgIG15YWRkciArPSBpOwogICAgICAgbWVtYWRkciArPSBpOwogICAgICAgbGVuIC09IGk7CkBAIC03NDMsMTAgKzc0MywxMCBAQAogCiAjaWYgMAogICAgICAgLyogVGhpcyBpcyB3cm9uZy4gIElmIGRvaW5nIGEgbG9uZyBiYWNrdHJhY2UsIHRoZSB1c2VyIHNob3VsZCBiZQotICAgICAgICAgYWJsZSB0byBnZXQgb3V0IG5leHQgdGltZSB3ZSBjYWxsIFFVSVQsIHdpdGhvdXQgYW55dGhpbmcgYXMKLSAgICAgICAgIHZpb2xlbnQgYXMgaW50ZXJydXB0X3F1ZXJ5LiAgSWYgd2Ugd2FudCB0byBwcm92aWRlIGEgd2F5IG91dCBvZgotICAgICAgICAgaGVyZSB3aXRob3V0IGdldHRpbmcgdG8gdGhlIG5leHQgUVVJVCwgaXQgc2hvdWxkIGJlIGJhc2VkIG9uCi0gICAgICAgICBoaXR0aW5nIF5DIHR3aWNlIGFzIGluIHJlbW90ZV93YWl0LiAgKi8KKwkgYWJsZSB0byBnZXQgb3V0IG5leHQgdGltZSB3ZSBjYWxsIFFVSVQsIHdpdGhvdXQgYW55dGhpbmcgYXMKKwkgdmlvbGVudCBhcyBpbnRlcnJ1cHRfcXVlcnkuICBJZiB3ZSB3YW50IHRvIHByb3ZpZGUgYSB3YXkgb3V0IG9mCisJIGhlcmUgd2l0aG91dCBnZXR0aW5nIHRvIHRoZSBuZXh0IFFVSVQsIGl0IHNob3VsZCBiZSBiYXNlZCBvbgorCSBoaXR0aW5nIF5DIHR3aWNlIGFzIGluIHJlbW90ZV93YWl0LiAgKi8KICAgICAgIGlmIChxdWl0X2ZsYWcpCiAJewogCSAgcXVpdF9mbGFnID0gMDsKQEAgLTg3NSwxMiArODc1LDEyIEBACiAgIGZvciAodHJpZXMgPSAxOyB0cmllcyA8PSBNQVhfVFJJRVM7IHRyaWVzKyspCiAgICAgewogICAgICAgLyogVGhpcyBjYW4gbG9vcCBmb3JldmVyIGlmIHRoZSByZW1vdGUgc2lkZSBzZW5kcyB1cyBjaGFyYWN0ZXJzCi0gICAgICAgICBjb250aW51b3VzbHksIGJ1dCBpZiBpdCBwYXVzZXMsIHdlJ2xsIGdldCBhIHplcm8gZnJvbSByZWFkY2hhcgotICAgICAgICAgYmVjYXVzZSBvZiB0aW1lb3V0LiAgVGhlbiB3ZSdsbCBjb3VudCB0aGF0IGFzIGEgcmV0cnkuICAqLworCSBjb250aW51b3VzbHksIGJ1dCBpZiBpdCBwYXVzZXMsIHdlJ2xsIGdldCBhIHplcm8gZnJvbSByZWFkY2hhcgorCSBiZWNhdXNlIG9mIHRpbWVvdXQuICBUaGVuIHdlJ2xsIGNvdW50IHRoYXQgYXMgYSByZXRyeS4gICovCiAKICAgICAgIC8qIE5vdGUgdGhhdCB3ZSB3aWxsIG9ubHkgd2FpdCBmb3JldmVyIHByaW9yIHRvIHRoZSBzdGFydCBvZiBhIHBhY2tldC4KLSAgICAgICAgIEFmdGVyIHRoYXQsIHdlIGV4cGVjdCBjaGFyYWN0ZXJzIHRvIGFycml2ZSBhdCBhIGJyaXNrIHBhY2UuICBUaGV5Ci0gICAgICAgICBzaG91bGQgc2hvdyB1cCB3aXRoaW4gcmVtb3RlX3RpbWVvdXQgaW50ZXJ2YWxzLiAgKi8KKwkgQWZ0ZXIgdGhhdCwgd2UgZXhwZWN0IGNoYXJhY3RlcnMgdG8gYXJyaXZlIGF0IGEgYnJpc2sgcGFjZS4gIFRoZXkKKwkgc2hvdWxkIHNob3cgdXAgd2l0aGluIHJlbW90ZV90aW1lb3V0IGludGVydmFscy4gICovCiAKICAgICAgIGRvCiAJewpkaWZmIC0tZ2l0IGEvdG9vbHMvaW1nMnNyZWMuYyBiL3Rvb2xzL2ltZzJzcmVjLmMKaW5kZXggMzMwYWUwMi4uYjA0YWJiZCAxMDA2NDQKLS0tIGEvdG9vbHMvaW1nMnNyZWMuYworKysgYi90b29scy9pbWcyc3JlYy5jCkBAIC0zNTEsMzQgKzM1MSwzNCBAQAogICBsb2FkQWRkciAgPSAgMDsKICAgZm9yIChpID0gMDsgaSA8IGVsZkhlYWRlci5lX3NobnVtOyBpKyspIHsKICAgICBpZiAoICAgIChzZWN0SGVhZGVyW2ldLnNoX3R5cGUgPT0gU0hUX1BST0dCSVRTKQotICAgICAgICAgJiYgKHNlY3RIZWFkZXJbaV0uc2hfc2l6ZSAhPSAwKQotICAgICAgICAgKSB7CisJICYmIChzZWN0SGVhZGVyW2ldLnNoX3NpemUgIT0gMCkKKwkgKSB7CiAgICAgICBsb2FkU2l6ZSA9IHNlY3RIZWFkZXJbaV0uc2hfc2l6ZTsKICAgICAgIGlmIChzZWN0SGVhZGVyW2ldLnNoX2ZsYWdzICE9IDApIHsKLSAgICAgICAgbG9hZEFkZHIgPSBzZWN0SGVhZGVyW2ldLnNoX2FkZHI7Ci0gICAgICAgIGxvYWREaWZmID0gbG9hZEFkZHIgLSBzZWN0SGVhZGVyW2ldLnNoX29mZnNldDsKKwlsb2FkQWRkciA9IHNlY3RIZWFkZXJbaV0uc2hfYWRkcjsKKwlsb2FkRGlmZiA9IGxvYWRBZGRyIC0gc2VjdEhlYWRlcltpXS5zaF9vZmZzZXQ7CiAgICAgICB9IC8qIGlmICovCiAgICAgICBlbHNlIHsKLSAgICAgICAgbG9hZEFkZHIgPSBzZWN0SGVhZGVyW2ldLnNoX29mZnNldCArIGxvYWREaWZmOworCWxvYWRBZGRyID0gc2VjdEhlYWRlcltpXS5zaF9vZmZzZXQgKyBsb2FkRGlmZjsKICAgICAgIH0gLyogZWxzZSAqLwogCiAgICAgICBpZiAobG9hZEFkZHIgPCBmaXJzdEFkZHIpCi0gICAgICAgIGZpcnN0QWRkciA9IGxvYWRBZGRyOworCWZpcnN0QWRkciA9IGxvYWRBZGRyOwogCiAgICAgICAvKiBidWlsZCBzLXJlY29yZHMgKi8KICAgICAgIGxvYWRTaXplID0gc2VjdEhlYWRlcltpXS5zaF9zaXplOwogICAgICAgZnNlZWsoZmlsZSwgc2VjdEhlYWRlcltpXS5zaF9vZmZzZXQsIFNFRUtfU0VUKTsKICAgICAgIHdoaWxlIChsb2FkU2l6ZSkgewotICAgICAgICByeENvdW50ID0gZnJlYWQocnhCbG9jaywgMSwgKGxvYWRTaXplID4gMzIpID8gMzIgOiBsb2FkU2l6ZSwgZmlsZSk7Ci0gICAgICAgIGlmIChyeENvdW50IDwgMCkgewotICAgICAgICAgIGZjbG9zZShmaWxlKTsKLSAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIqKiogaWxsZWdhbCBmaWxlIGZvcm1hdFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgICAgfSAvKiBpZiAqLwotICAgICAgICAodm9pZClCdWlsZFNSZWNvcmQoc3JlY0xpbmUsIDMsIGxvYWRBZGRyICsgbG9hZE9mZnNldCwgcnhCbG9jaywgcnhDb3VudCk7Ci0gICAgICAgIGxvYWRTaXplIC09IHJ4Q291bnQ7Ci0gICAgICAgIGxvYWRBZGRyICs9IHJ4Q291bnQ7Ci0gICAgICAgIHByaW50ZigiJXNcclxuIixzcmVjTGluZSk7CisJcnhDb3VudCA9IGZyZWFkKHJ4QmxvY2ssIDEsIChsb2FkU2l6ZSA+IDMyKSA/IDMyIDogbG9hZFNpemUsIGZpbGUpOworCWlmIChyeENvdW50IDwgMCkgeworCSAgZmNsb3NlKGZpbGUpOworCSAgZnByaW50ZiAoc3RkZXJyLCAiKioqIGlsbGVnYWwgZmlsZSBmb3JtYXRcbiIpOworCXJldHVybjsKKwl9IC8qIGlmICovCisJKHZvaWQpQnVpbGRTUmVjb3JkKHNyZWNMaW5lLCAzLCBsb2FkQWRkciArIGxvYWRPZmZzZXQsIHJ4QmxvY2ssIHJ4Q291bnQpOworCWxvYWRTaXplIC09IHJ4Q291bnQ7CisJbG9hZEFkZHIgKz0gcnhDb3VudDsKKwlwcmludGYoIiVzXHJcbiIsc3JlY0xpbmUpOwogICAgICAgfSAvKiB3aGlsZSAqLwogICAgIH0gLyogaWYgKi8KICAgfSAvKiBmb3IgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3NjcmlwdHMvUkVBRE1FIGIvdG9vbHMvc2NyaXB0cy9SRUFETUUKaW5kZXggY2RhMTBhOC4uMDQ2YzFkNCAxMDA2NDQKLS0tIGEvdG9vbHMvc2NyaXB0cy9SRUFETUUKKysrIGIvdG9vbHMvc2NyaXB0cy9SRUFETUUKQEAgLTI4LDcgKzI4LDYgQEAKIGhhdmUgdG8gbW9kaWZ5IHRoZW0gYmVmb3JlIHVzZS4KIAogCi0KIFNob3J0IGRlc2NyaXB0aW9uOgogPT09PT09PT09PT09PT09PT09CiAKQEAgLTQwLDExICszOSwxMSBAQAogCiBmbGFzaF9wYXJhbToKIAotICAgICAgICAia2VybWl0IiBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBpbml0aWFsaXplIHRoZSBlbnZpcm9ubWVudAotICAgICAgICB2YXJpYWJsZXMgb24geW91ciB0YXJnZXQuIFRoaXMgaXMgbW9zdCB1c2VmdWwgZHVyaW5nCi0gICAgICAgIGRldmVsb3BtZW50IHdoZW4geW91ciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHN0b3JlZCBpbiBhbgotICAgICAgICBlbWJlZGRlZCBmbGFzaCBzZWN0b3Igd2hpY2ggaXMgZXJhc2VkIHdoZW5ldmVyIHlvdSBpbnN0YWxsIGEKLSAgICAgICAgbmV3IFUtQm9vdCBpbWFnZS4KKwkia2VybWl0IiBzY3JpcHQgdG8gYXV0b21hdGljYWxseSBpbml0aWFsaXplIHRoZSBlbnZpcm9ubWVudAorCXZhcmlhYmxlcyBvbiB5b3VyIHRhcmdldC4gVGhpcyBpcyBtb3N0IHVzZWZ1bCBkdXJpbmcKKwlkZXZlbG9wbWVudCB3aGVuIHlvdXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzdG9yZWQgaW4gYW4KKwllbWJlZGRlZCBmbGFzaCBzZWN0b3Igd2hpY2ggaXMgZXJhc2VkIHdoZW5ldmVyIHlvdSBpbnN0YWxsIGEKKwluZXcgVS1Cb290IGltYWdlLgogCiAJYnkgU3dlbiBBbmRlcnNvbiwgMTAgTWF5IDIwMDEKIApAQCAtNTIsOSArNTEsOSBAQAogCiAJc2VuZF9jbWQgVV9CT09UX0NPTU1BTkQKIAotICAgICAgICAia2VybWl0IiBzY3JpcHQgdG8gc2VuZCBhIFUtQm9vdCBjb21tYW5kIGFuZCBwcmludCB0aGUKLSAgICAgICAgcmVzdWx0cy4gV2hlbiB1c2VkIGZyb20gYSBzaGVsbCB3aXRoIGhpc3RvcnkgKGxpa2UgdGhlIGJhc2gpCi0gICAgICAgIHRoaXMgaW5kaXJlY3RseSBhZGRzIGtpbmQgb2YgaGlzdG9yeSB0byBVLUJvb3QgOy0pCisJImtlcm1pdCIgc2NyaXB0IHRvIHNlbmQgYSBVLUJvb3QgY29tbWFuZCBhbmQgcHJpbnQgdGhlCisJcmVzdWx0cy4gV2hlbiB1c2VkIGZyb20gYSBzaGVsbCB3aXRoIGhpc3RvcnkgKGxpa2UgdGhlIGJhc2gpCisJdGhpcyBpbmRpcmVjdGx5IGFkZHMga2luZCBvZiBoaXN0b3J5IHRvIFUtQm9vdCA7LSkKIAogCWJ5IFN3ZW4gQW5kZXJzb24sIDEwIE1heSAyMDAxCiAKQEAgLTYyLDcgKzYxLDcgQEAKIAogCXNlbmRfaW1hZ2UgRklMRV9OQU1FIE9GRlNFVAogCi0gICAgICAgICJrZXJtaXQiIHNjcmlwdCB0byBhdXRvbWF0aWNhbGx5IGRvd25sb2FkIGEgZmlsZSB0byB0aGUKLSAgICAgICAgdGFyZ2V0IHVzaW5nIHRoZSAibG9hZGIiIGNvbW1hbmQgKGtlcm1pdCBiaW5hcnkgcHJvdG9jb2wpCisJImtlcm1pdCIgc2NyaXB0IHRvIGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYSBmaWxlIHRvIHRoZQorCXRhcmdldCB1c2luZyB0aGUgImxvYWRiIiBjb21tYW5kIChrZXJtaXQgYmluYXJ5IHByb3RvY29sKQogCiAJYnkgU3dlbiBBbmRlcnNvbiwgMTAgTWF5IDIwMDEKZGlmZiAtLWdpdCBhL3Rvb2xzL3NjcmlwdHMvc2VuZF9jbWQgYi90b29scy9zY3JpcHRzL3NlbmRfY21kCmluZGV4IGQwMWVmZTIuLjQxMzEzMzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3NjcmlwdHMvc2VuZF9jbWQKKysrIGIvdG9vbHMvc2NyaXB0cy9zZW5kX2NtZApAQCAtMTksNCArMTksMyBAQAogaW4gMTAgPT4KIHF1aXQKIGV4aXQgMAotCmRpZmYgLS1naXQgYS90b29scy91cGRhdGVyL01ha2VmaWxlIGIvdG9vbHMvdXBkYXRlci9NYWtlZmlsZQppbmRleCBhOGZiNGNlLi4yMWIxMWNhIDEwMDY0NAotLS0gYS90b29scy91cGRhdGVyL01ha2VmaWxlCisrKyBiL3Rvb2xzL3VwZGF0ZXIvTWFrZWZpbGUKQEAgLTI5LDkgKzI5LDkgQEAKIElNQUdFICAgPSB1cGRhdGVyLmltYWdlCiBTUkMgICAgID0gdXBkYXRlLmMgZmxhc2guYyBmbGFzaF9ody5jIHV0aWxzLmMgY21kX2ZsYXNoLmMgc3RyaW5nLmMgY3R5cGUuYyBkdW1teS5jCiBBU1JDICAgID0gcHBjc3RyaW5nLlMKLU9CSlMJPSAkKFNSQzouYz0ubykgJChBU1JDOi5TPS5vKSAKK09CSlMJPSAkKFNSQzouYz0ubykgJChBU1JDOi5TPS5vKQogCi1MSUIJPSAkKFRPUERJUikvZXhhbXBsZXMvbGlic3lzY2FsbC5hIAorTElCCT0gJChUT1BESVIpL2V4YW1wbGVzL2xpYnN5c2NhbGwuYQogTElCQU9CSlM9ICQoVE9QRElSKS9leGFtcGxlcy9zeXNjYWxsLm8KIExJQkNPQkpTPQogTElCT0JKUwk9ICQoTElCQU9CSlMpICQoTElCQ09CSlMpCkBAIC01MCwxNCArNTAsMTQgQEAKIAkkKE9CSkNPUFkpIC1PIHNyZWMgJCg8Oi5vPSkgJEAKIAogJS5vOiAlLmMKLQkkKENDKSAkKENQUEZMQUdTKSAtYyAkPCAKKwkkKENDKSAkKENQUEZMQUdTKSAtYyAkPAogCiAlLm86ICUuUwogCSQoQ0MpICQoQ1BQRkxBR1MpIC1jICQ8CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotdXBkYXRlcjogJChPQkpTKSAkKExJQikgJChUT1BESVIpL2JvYXJkL01BSS9BbWlnYU9uZUczU0UvbWVtaW8ubyAKK3VwZGF0ZXI6ICQoT0JKUykgJChMSUIpICQoVE9QRElSKS9ib2FyZC9NQUkvQW1pZ2FPbmVHM1NFL21lbWlvLm8KIAkkKExEKSAtZyAtVHRleHQgJChMT0FEX0FERFIpIC1vIHVwZGF0ZXIgLWUgX21haW4gJChPQkpTKSAkKExJQikgIFwKIAkkKFRPUERJUikvYm9hcmQvTUFJL0FtaWdhT25lRzNTRS9tZW1pby5vCiAJJChPQkpDT1BZKSAtTyBiaW5hcnkgdXBkYXRlciB1cGRhdGVyLmJpbgpkaWZmIC0tZ2l0IGEvdG9vbHMvdXBkYXRlci9jbWRfZmxhc2guYyBiL3Rvb2xzL3VwZGF0ZXIvY21kX2ZsYXNoLmMKaW5kZXggZjM0NjVmMS4uNTczNTQ2ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdXBkYXRlci9jbWRfZmxhc2guYworKysgYi90b29scy91cGRhdGVyL2NtZF9mbGFzaC5jCkBAIC0yNiw3ICsyNiw2IEBACiAgKi8KICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8Y21kX2Jvb3QuaD4KICNpbmNsdWRlIDxmbGFzaC5oPgogCiAjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfRkxBU0gpCkBAIC0yMjcsNyArMjI2LDcgQEAKIAkJfQogCX0KIAlpZiAoZXJhc2VkKSB7Ci0JICAgIC8vCW1vbl9wcmludGYgKCJFcmFzZWQgJWQgc2VjdG9yc1xuIiwgZXJhc2VkKTsKKwkgICAgLyoJbW9uX3ByaW50ZiAoIkVyYXNlZCAlZCBzZWN0b3JzXG4iLCBlcmFzZWQpOyAqLwogCX0gZWxzZSB7CiAJCW1vbl9wcmludGYgKCJFcnJvcjogc3RhcnQgYW5kL29yIGVuZCBhZGRyZXNzIgogCQkJIiBub3Qgb24gc2VjdG9yIGJvdW5kYXJ5XG4iKTsKQEAgLTI2NCw4ICsyNjMsOCBAQAogCQkJaWYgKGluZm8tPmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pIHsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCS8vbW9uX3ByaW50ZiAoIiVzUHJvdGVjdCBGbGFzaCBCYW5rICMgJWxkXG4iLAotCQkJLy8JcCA/ICIiIDogIlVuLSIsIGJhbmspOworCQkJLyptb25fcHJpbnRmICgiJXNQcm90ZWN0IEZsYXNoIEJhbmsgIyAlbGRcbiIsICovCisJCQkvKglwID8gIiIgOiAiVW4tIiwgYmFuayk7ICovCiAKIAkJCWZvciAoaT0wOyBpPGluZm8tPnNlY3Rvcl9jb3VudDsgKytpKSB7CiAjaWYgZGVmaW5lZChDRkdfRkxBU0hfUFJPVEVDVElPTikKQEAgLTI5MCw5ICsyODksOSBAQAogCQkJbW9uX3ByaW50ZigiQmFkIHNlY3RvciBzcGVjaWZpY2F0aW9uXG4iKTsKIAkJCXJldHVybiAxOwogCQl9Ci0JCS8vbW9uX3ByaW50ZigiJXNQcm90ZWN0IEZsYXNoIFNlY3RvcnMgJWQtJWQgaW4gQmFuayAjICVkXG4iLAotCQkvLwlwID8gIiIgOiAiVW4tIiwgc2VjdF9maXJzdCwgc2VjdF9sYXN0LAotCQkvLwkoaW5mby1mbGFzaF9pbmZvKSsxKTsKKwkJLyptb25fcHJpbnRmKCIlc1Byb3RlY3QgRmxhc2ggU2VjdG9ycyAlZC0lZCBpbiBCYW5rICMgJWRcbiIsICovCisJCS8qCXAgPyAiIiA6ICJVbi0iLCBzZWN0X2ZpcnN0LCBzZWN0X2xhc3QsICovCisJCS8qCShpbmZvLWZsYXNoX2luZm8pKzEpOyAqLwogCQlmb3IgKGkgPSBzZWN0X2ZpcnN0OyBpIDw9IHNlY3RfbGFzdDsgaSsrKSB7CiAjaWYgZGVmaW5lZChDRkdfRkxBU0hfUFJPVEVDVElPTikKIAkJCWlmIChmbGFzaF9yZWFsX3Byb3RlY3QoaW5mbywgaSwgcCkpCkBAIC00MTgsOCArNDE3LDggQEAKIAogCX0KIAlpZiAocHJvdGVjdGVkKSB7Ci0JICAgIC8vCW1vbl9wcmludGYgKCIlc1Byb3RlY3RlZCAlZCBzZWN0b3JzXG4iLAotCSAgICAvLwlwID8gIiIgOiAiVW4tIiwgcHJvdGVjdGVkKTsKKwkgICAgLyoJbW9uX3ByaW50ZiAoIiVzUHJvdGVjdGVkICVkIHNlY3RvcnNcbiIsICovCisJICAgIC8qCXAgPyAiIiA6ICJVbi0iLCBwcm90ZWN0ZWQpOyAqLwogCX0gZWxzZSB7CiAJICAgIG1vbl9wcmludGYgKCJFcnJvcjogc3RhcnQgYW5kL29yIGVuZCBhZGRyZXNzIgogCQkJIiBub3Qgb24gc2VjdG9yIGJvdW5kYXJ5XG4iKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3VwZGF0ZXIvZmxhc2hfaHcuYyBiL3Rvb2xzL3VwZGF0ZXIvZmxhc2hfaHcuYwppbmRleCBlYzExNTg5Li4xZDc4MmM2IDEwMDY0NAotLS0gYS90b29scy91cGRhdGVyL2ZsYXNoX2h3LmMKKysrIGIvdG9vbHMvdXBkYXRlci9mbGFzaF9ody5jCkBAIC0zMSw3ICszMSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICN1bmRlZiBERUJVR19GTEFTSAotLy8jZGVmaW5lIERFQlVHX0ZMQVNICiAKICNpZmRlZiBERUJVR19GTEFTSAogI2RlZmluZSBERUJVR0YoZm10LGFyZ3MuLi4pIG1vbl9wcmludGYoZm10ICwjI2FyZ3MpCkBAIC02OCw3ICs2Nyw3IEBACiAgICAgdW5zaWduZWQgY2hhciB4OwogCiAgICAgZmxhc2hfeGRfbmVzdCAtLTsKLSAgIAorCiAgICAgaWYgKGZsYXNoX3hkX25lc3QgPT0gMCkKICAgICB7CiAJREVCVUdGKCJGbGFzaCBvbiBtZW1vcnkgYnVzXG4iKTsKQEAgLTMyNyw3ICszMjYsNyBAQAogCQkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciB1bmlmb3JtIHNlY3RvciB0eXBlCSovCiAJCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKyspIHsKIAkJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyBpICogaW5mby0+c2l6ZSAvCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8tPnNlY3Rvcl9jb3VudDsKKwkJCQkJCQkgICAgaW5mby0+c2VjdG9yX2NvdW50OwogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00NzksNyArNDc4LDcgQEAKIAkJfQogCiAJCWlmICgocmMgPSB3cml0ZV93b3JkKGluZm8sIHdwLCBkYXRhKSkgIT0gMCkgewotCQkgICAgICAgIGZsYXNoX3RvX21lbSgpOworCQkJZmxhc2hfdG9fbWVtKCk7CiAJCQlyZXR1cm4gKHJjKTsKIAkJfQogCQl3cCArPSA0OwpAQCAtNDkxLDcgKzQ5MCw3IEBACiAJICogaGFuZGxlIHdvcmQgYWxpZ25lZCBwYXJ0CiAJICovCiAJd2hpbGUgKGNudCA+PSA0KSB7Ci0JICAgIGlmIChvdXRfY250PjI2MjE0KSAKKwkgICAgaWYgKG91dF9jbnQ+MjYyMTQpCiAJICAgIHsKIAkJbW9uX3B1dGMoMjE5KTsKIAkJb3V0X2NudCA9IDA7CkBAIC01OTAsNyArNTg5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZmxhc2hfcmVzZXQgKHVsb25nIGFkZHIpCiB7Ci0gICAgICAgIGZsYXNoX3RvX3hkKCk7CisJZmxhc2hfdG9feGQoKTsKIAlvdXQ4KGFkZHIsIDB4RjApOwkvKiByZXNldCBiYW5rICovCiAJaW9iYXJyaWVyX3J3KCk7CiAJZmxhc2hfdG9fbWVtKCk7CkBAIC02NDEsMTAgKzY0MCwxMCBAQAogCQkJaW5mby0+c2l6ZSAvIDB4MTAwMDAwLCBpbmZvLT5zZWN0b3JfY291bnQpOwogCX0gZWxzZSBpZiAoaW5mby0+c2l6ZSAlIDB4NDAwID09IDApIHsKIAkJbW9uX3ByaW50ZiAoIiAgU2l6ZTogJWxkIEtCIGluICVkIFNlY3RvcnNcbiIsCi0JCSAgICAgICAgaW5mby0+c2l6ZSAvIDB4NDAwLCBpbmZvLT5zZWN0b3JfY291bnQpOworCQkJaW5mby0+c2l6ZSAvIDB4NDAwLCBpbmZvLT5zZWN0b3JfY291bnQpOwogCX0gZWxzZSB7CiAJCW1vbl9wcmludGYgKCIgIFNpemU6ICVsZCBCIGluICVkIFNlY3RvcnNcbiIsCi0JCSAgICAgICAgaW5mby0+c2l6ZSwgaW5mby0+c2VjdG9yX2NvdW50KTsKKwkJCWluZm8tPnNpemUsIGluZm8tPnNlY3Rvcl9jb3VudCk7CiAJfQogCiAJbW9uX3ByaW50ZiAoIiAgU2VjdG9yIFN0YXJ0IEFkZHJlc3NlczoiKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3VwZGF0ZXIvc3RyaW5nLmMgYi90b29scy91cGRhdGVyL3N0cmluZy5jCmluZGV4IDUwNTM3YTYuLjhhOGVkZWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3VwZGF0ZXIvc3RyaW5nLmMKKysrIGIvdG9vbHMvdXBkYXRlci9zdHJpbmcuYwpAQCAtMTI5LDggKzEyOSw4IEBACiB7CiAgICAgICAgY29uc3QgY2hhciAqcCA9IHMgKyBzdHJsZW4ocyk7CiAgICAgICAgZG8gewotICAgICAgICAgICBpZiAoKnAgPT0gKGNoYXIpYykKLSAgICAgICAgICAgICAgIHJldHVybiAoY2hhciAqKXA7CisJICAgaWYgKCpwID09IChjaGFyKWMpCisJICAgICAgIHJldHVybiAoY2hhciAqKXA7CiAgICAgICAgfSB3aGlsZSAoLS1wID49IHMpOwogICAgICAgIHJldHVybiBOVUxMOwogfQpAQCAtMzE2LDcgKzMxNiw3IEBACiAJCXArKzsKIAkJc2l6ZS0tOwogCX0KLSAgCXJldHVybiAodm9pZCAqKSBwOworCXJldHVybiAodm9pZCAqKSBwOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3VwZGF0ZXIvdXBkYXRlLmMgYi90b29scy91cGRhdGVyL3VwZGF0ZS5jCmluZGV4IDY2YzZkZmMuLjI2MjA0ZmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3VwZGF0ZXIvdXBkYXRlLmMKKysrIGIvdG9vbHMvdXBkYXRlci91cGRhdGUuYwpAQCAtMzUsNyArMzUsNyBAQAogICAgIG1vbl9wcmludGYoIlxuVXBkYXRlIGRvbmUuIFBsZWFzZSByZW1vdmUgZGlza2V0dGUuXG4iKTsKICAgICBtb25fcHJpbnRmKCJUaGUgbWFjaGluZSB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzZXQgaW4gJWQgc2Vjb25kc1xuIiwgaSk7CiAgICAgbW9uX3ByaW50ZigiWW91IGNhbiBzd2l0Y2ggb2ZmL3Jlc2V0IG5vdyB3aGVuIHRoZSBmbG9wcHkgaXMgcmVtb3ZlZFxuXG4iKTsKLSAgICAKKwogICAgIHdoaWxlIChpKQogICAgIHsKIAltb25fcHJpbnRmKCJSZXNldHRpbmcgaW4gJWRcciIsIGkpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdXBkYXRlci91dGlscy5jIGIvdG9vbHMvdXBkYXRlci91dGlscy5jCmluZGV4IGUyMzBlMTkuLjAzMDRmOTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3VwZGF0ZXIvdXRpbHMuYworKysgYi90b29scy91cGRhdGVyL3V0aWxzLmMKQEAgLTE1LDcgKzE1LDcgQEAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKIHNldF9tc3IodW5zaWduZWQgbG9uZyBtc3IpCiB7Ci0JYXNtIHZvbGF0aWxlKCJtdG1zciAlMCIgOiA6ICJyIiAobXNyKSk7IAorCWFzbSB2b2xhdGlsZSgibXRtc3IgJTAiIDogOiAiciIgKG1zcikpOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCkBAIC0zMSw3ICszMSw3IEBACiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCiBzZXRfZGVjKHVuc2lnbmVkIGxvbmcgdmFsKQogewotCWFzbSB2b2xhdGlsZSgibXRkZWMgJTAiIDogOiAiciIgKHZhbCkpOyAKKwlhc20gdm9sYXRpbGUoIm10ZGVjICUwIiA6IDogInIiICh2YWwpKTsKIH0KIAogCkBAIC02OSw4MCArNjksODAgQEAKIAogdW5zaWduZWQgbG9uZyBzaW1wbGVfc3RydG91bChjb25zdCBjaGFyICpjcCxjaGFyICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSkKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwLHZhbHVlOworCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMCx2YWx1ZTsKIAotICAgICAgICBpZiAoKmNwID09ICcwJykgewotICAgICAgICAgICAgICAgIGNwKys7Ci0gICAgICAgICAgICAgICAgaWYgKCgqY3AgPT0gJ3gnKSAmJiBpc3hkaWdpdChjcFsxXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNwKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghYmFzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghYmFzZSkgewotICAgICAgICAgICAgICAgIGJhc2UgPSAxMDsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoaXN4ZGlnaXQoKmNwKSAmJiAodmFsdWUgPSBpc2RpZ2l0KCpjcCkgPyAqY3AtJzAnIDogKGlzbG93ZXIoKmNwKQotICAgICAgICAgICAgPyB0b3VwcGVyKCpjcCkgOiAqY3ApLSdBJysxMCkgPCBiYXNlKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0KmJhc2UgKyB2YWx1ZTsKLSAgICAgICAgICAgICAgICBjcCsrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbmRwKQotICAgICAgICAgICAgICAgICplbmRwID0gKGNoYXIgKiljcDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKwlpZiAoKmNwID09ICcwJykgeworCQljcCsrOworCQlpZiAoKCpjcCA9PSAneCcpICYmIGlzeGRpZ2l0KGNwWzFdKSkgeworCQkJYmFzZSA9IDE2OworCQkJY3ArKzsKKwkJfQorCQlpZiAoIWJhc2UpIHsKKwkJCWJhc2UgPSA4OworCQl9CisJfQorCWlmICghYmFzZSkgeworCQliYXNlID0gMTA7CisJfQorCXdoaWxlIChpc3hkaWdpdCgqY3ApICYmICh2YWx1ZSA9IGlzZGlnaXQoKmNwKSA/ICpjcC0nMCcgOiAoaXNsb3dlcigqY3ApCisJICAgID8gdG91cHBlcigqY3ApIDogKmNwKS0nQScrMTApIDwgYmFzZSkgeworCQlyZXN1bHQgPSByZXN1bHQqYmFzZSArIHZhbHVlOworCQljcCsrOworCX0KKwlpZiAoZW5kcCkKKwkJKmVuZHAgPSAoY2hhciAqKWNwOworCXJldHVybiByZXN1bHQ7CiB9CiAKIGxvbmcgc2ltcGxlX3N0cnRvbChjb25zdCBjaGFyICpjcCxjaGFyICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSkKIHsKLSAgICAgICAgaWYoKmNwPT0nLScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1zaW1wbGVfc3RydG91bChjcCsxLGVuZHAsYmFzZSk7Ci0gICAgICAgIHJldHVybiBzaW1wbGVfc3RydG91bChjcCxlbmRwLGJhc2UpOworCWlmKCpjcD09Jy0nKQorCQlyZXR1cm4gLXNpbXBsZV9zdHJ0b3VsKGNwKzEsZW5kcCxiYXNlKTsKKwlyZXR1cm4gc2ltcGxlX3N0cnRvdWwoY3AsZW5kcCxiYXNlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBzb2Z0X3Jlc3RhcnQodW5zaWduZWQgbG9uZyBhZGRyKQogewotICAgICAgICAvKiBTUlIwIGhhcyBzeXN0ZW0gcmVzZXQgdmVjdG9yLCBTUlIxIGhhcyBkZWZhdWx0IE1TUiB2YWx1ZSAqLwotICAgICAgICAvKiByZmkgcmVzdG9yZXMgTVNSIGZyb20gU1JSMSBhbmQgc2V0cyB0aGUgUEMgdG8gdGhlIFNSUjAgdmFsdWUgKi8KKwkvKiBTUlIwIGhhcyBzeXN0ZW0gcmVzZXQgdmVjdG9yLCBTUlIxIGhhcyBkZWZhdWx0IE1TUiB2YWx1ZSAqLworCS8qIHJmaSByZXN0b3JlcyBNU1IgZnJvbSBTUlIxIGFuZCBzZXRzIHRoZSBQQyB0byB0aGUgU1JSMCB2YWx1ZSAqLwogCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibXRzcHIgICAgMjYsICUwIiAgICAgICAgIDo6ICJyIiAoYWRkcikpOwotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxpICAgICAgIDQsICgxIDw8IDYpIiAgICA6OjogInI0Iik7Ci0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibXRzcHIgICAgMjcsIDQiKTsKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyZmkiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm10c3ByICAgIDI2LCAlMCIgICAgICAgICA6OiAiciIgKGFkZHIpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxpICAgICAgIDQsICgxIDw8IDYpIiAgICA6OjogInI0Iik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtdHNwciAgICAyNywgNCIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgicmZpIik7CiAKLSAgICAgICAgd2hpbGUoMSk7ICAgICAgIC8qIG5vdCByZWFjaGVkICovCisJd2hpbGUoMSk7ICAgICAgIC8qIG5vdCByZWFjaGVkICovCiB9CiAKIHZvaWQKIGRvX3Jlc2V0ICh2b2lkKQogewotICAgICAgICB1bG9uZyBhZGRyOwotICAgICAgICAvKiBmbHVzaCBhbmQgZGlzYWJsZSBJL0QgY2FjaGUgKi8KLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtZnNwciAgICAzLCAxMDA4IiAgICAgICAgOjo6ICJyMyIpOwotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm9yaSAgICAgIDUsIDUsIDB4Y2MwMCIgICA6OjogInI1Iik7Ci0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgib3JpICAgICAgNCwgMywgMHhjMDAiICAgIDo6OiAicjQiKTsKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJhbmRjICAgICA1LCAzLCA1IiAgICAgICAgOjo6ICJyNSIpOwotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtdHNwciAgICAxMDA4LCA0Iik7Ci0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiaXN5bmMiKTsKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7Ci0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibXRzcHIgICAgMTAwOCwgNSIpOwotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImlzeW5jIik7Ci0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCXVsb25nIGFkZHI7CisJLyogZmx1c2ggYW5kIGRpc2FibGUgSS9EIGNhY2hlICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtZnNwciAgICAzLCAxMDA4IiAgICAgICAgOjo6ICJyMyIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgib3JpICAgICAgNSwgNSwgMHhjYzAwIiAgIDo6OiAicjUiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm9yaSAgICAgIDQsIDMsIDB4YzAwIiAgICA6OjogInI0Iik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJhbmRjICAgICA1LCAzLCA1IiAgICAgICAgOjo6ICJyNSIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgibXRzcHIgICAgMTAwOCwgNCIpOworCV9fYXNtX18gX192b2xhdGlsZV9fICgiaXN5bmMiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm10c3ByICAgIDEwMDgsIDUiKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImlzeW5jIik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIik7CiAKICNpZmRlZiBDRkdfUkVTRVRfQUREUkVTUwotICAgICAgICBhZGRyID0gQ0ZHX1JFU0VUX0FERFJFU1M7CisJYWRkciA9IENGR19SRVNFVF9BRERSRVNTOwogI2Vsc2UKLSAgICAgICAgLyoKLSAgICAgICAgICogbm90ZTogd2hlbiBDRkdfTU9OSVRPUl9CQVNFIHBvaW50cyB0byBhIFJBTSBhZGRyZXNzLAotICAgICAgICAgKiBDRkdfTU9OSVRPUl9CQVNFIC0gc2l6ZW9mICh1bG9uZykgaXMgdXN1YWxseSBhIHZhbGlkCi0gICAgICAgICAqIGFkZHJlc3MuIEJldHRlciBwaWNrIGFuIGFkZHJlc3Mga25vd24gdG8gYmUgaW52YWxpZCBvbiB5b3VyCi0gICAgICAgICAqIHN5c3RlbSBhbmQgYXNzaWduIGl0IHRvIENGR19SRVNFVF9BRERSRVNTLgotICAgICAgICAgKi8KLSAgICAgICAgYWRkciA9IENGR19NT05JVE9SX0JBU0UgLSBzaXplb2YgKHVsb25nKTsKKwkvKgorCSAqIG5vdGU6IHdoZW4gQ0ZHX01PTklUT1JfQkFTRSBwb2ludHMgdG8gYSBSQU0gYWRkcmVzcywKKwkgKiBDRkdfTU9OSVRPUl9CQVNFIC0gc2l6ZW9mICh1bG9uZykgaXMgdXN1YWxseSBhIHZhbGlkCisJICogYWRkcmVzcy4gQmV0dGVyIHBpY2sgYW4gYWRkcmVzcyBrbm93biB0byBiZSBpbnZhbGlkIG9uIHlvdXIKKwkgKiBzeXN0ZW0gYW5kIGFzc2lnbiBpdCB0byBDRkdfUkVTRVRfQUREUkVTUy4KKwkgKi8KKwlhZGRyID0gQ0ZHX01PTklUT1JfQkFTRSAtIHNpemVvZiAodWxvbmcpOwogI2VuZGlmCi0gICAgICAgIHNvZnRfcmVzdGFydChhZGRyKTsKLSAgICAgICAgd2hpbGUoMSk7ICAgICAgIC8qIG5vdCByZWFjaGVkICovCisJc29mdF9yZXN0YXJ0KGFkZHIpOworCXdoaWxlKDEpOyAgICAgICAvKiBub3QgcmVhY2hlZCAqLwogfQo=